aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore12
-rw-r--r--HOWTO/INSTALL-CROSS.md1
-rw-r--r--HOWTO/INSTALL-WIN32.md3
-rw-r--r--HOWTO/INSTALL.md5
-rw-r--r--HOWTO/MARKDOWN.md15
-rw-r--r--OTP_VERSION2
-rw-r--r--README.md26
-rw-r--r--bootstrap/bin/start.bootbin5343 -> 5393 bytes
-rw-r--r--bootstrap/bin/start_clean.bootbin5343 -> 5393 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_asm.beambin11428 -> 11428 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_block.beambin9688 -> 9484 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_bool.beambin15648 -> 15720 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_bsm.beambin12632 -> 12632 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_clean.beambin8948 -> 8948 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_dead.beambin12972 -> 12992 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_disasm.beambin26204 -> 26188 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_except.beambin3540 -> 3564 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_jump.beambin9372 -> 9524 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_receive.beambin6380 -> 6392 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_reorder.beambin1992 -> 2040 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_split.beambin2496 -> 2496 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_type.beambin17144 -> 17728 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_utils.beambin13912 -> 13700 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_validator.beambin30028 -> 30828 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/cerl.beambin32080 -> 32080 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/cerl_clauses.beambin2956 -> 2956 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/cerl_inline.beambin38692 -> 38688 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/compile.beambin38976 -> 39112 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/compiler.app2
-rw-r--r--bootstrap/lib/compiler/ebin/core_lint.beambin13572 -> 13572 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/core_parse.beambin57124 -> 57160 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/core_pp.beambin12796 -> 12020 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/core_scan.beambin6636 -> 6636 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/rec_env.beambin4920 -> 4652 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/sys_core_fold.beambin52184 -> 52400 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/sys_pre_attributes.beambin3308 -> 3308 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/v3_codegen.beambin55848 -> 56552 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/v3_core.beambin53896 -> 54484 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/v3_kernel.beambin46656 -> 46680 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/v3_life.beambin19044 -> 19044 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/application_controller.beambin31932 -> 31932 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/application_master.beambin6632 -> 6636 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/auth.beambin6516 -> 6520 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/code_server.beambin24808 -> 24840 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/disk_log.beambin35836 -> 35836 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/disk_log_1.beambin24876 -> 24884 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/disk_log_server.beambin6624 -> 6624 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/dist_ac.beambin26328 -> 26336 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/dist_util.beambin10672 -> 11220 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/erl_epmd.beambin7180 -> 7244 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/file.beambin14452 -> 14456 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/gen_sctp.beambin3604 -> 3392 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/gen_tcp.beambin2404 -> 2216 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/gen_udp.beambin1616 -> 1400 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/global.beambin32244 -> 32244 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/global_group.beambin17548 -> 17548 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/group.beambin14036 -> 14032 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/heart.beambin5540 -> 5544 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/hipe_unified_loader.beambin13792 -> 13796 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet.beambin23312 -> 24156 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet6_sctp.beambin1536 -> 1532 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet6_tcp.beambin3032 -> 3092 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet6_tcp_dist.beambin768 -> 872 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet6_udp.beambin1728 -> 1796 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_db.beambin27024 -> 27024 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_parse.beambin12916 -> 12912 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_res.beambin14868 -> 14868 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_sctp.beambin2304 -> 2300 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_tcp.beambin2744 -> 2776 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_tcp_dist.beambin7184 -> 7616 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_udp.beambin1916 -> 1940 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/kernel.app4
-rw-r--r--bootstrap/lib/kernel/ebin/kernel_config.beambin2764 -> 2764 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/local_tcp.beambin0 -> 2396 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/local_udp.beambin0 -> 1476 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/net_adm.beambin3008 -> 3036 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/net_kernel.beambin22968 -> 24856 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/user.beambin11572 -> 11576 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/user_drv.beambin11408 -> 11420 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/wrap_log_reader.beambin3320 -> 3320 bytes
-rw-r--r--bootstrap/lib/kernel/include/dist_util.hrl8
-rw-r--r--bootstrap/lib/stdlib/ebin/binary.beambin2828 -> 2828 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/dets.beambin53660 -> 53688 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/dets_server.beambin6984 -> 6992 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/dets_utils.beambin28748 -> 28748 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/dets_v8.beambin27488 -> 27488 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/dets_v9.beambin49832 -> 49824 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/digraph_utils.beambin6816 -> 6816 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/epp.beambin28828 -> 29280 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_eval.beambin30636 -> 30632 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_expand_records.beambin21760 -> 21760 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_lint.beambin90264 -> 90276 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_parse.beambin82864 -> 82660 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_pp.beambin27352 -> 26856 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/file_sorter.beambin30400 -> 30400 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/filelib.beambin8044 -> 8048 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/filename.beambin14884 -> 14884 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gen_event.beambin13468 -> 13416 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gen_fsm.beambin9536 -> 9492 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gen_server.beambin12500 -> 12452 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gen_statem.beambin13588 -> 13492 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/lib.beambin9596 -> 9596 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/lists.beambin29912 -> 29904 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/log_mf_h.beambin2636 -> 2636 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/otp_internal.beambin9632 -> 9684 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/pool.beambin3836 -> 3840 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/proc_lib.beambin10676 -> 10620 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/qlc.beambin70116 -> 70124 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/qlc_pt.beambin76228 -> 76228 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/queue.beambin6184 -> 6212 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/shell.beambin30232 -> 30300 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/slave.beambin4852 -> 4856 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/sofs.beambin40600 -> 40624 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/stdlib.app4
-rw-r--r--bootstrap/lib/stdlib/ebin/stdlib.appup2
-rw-r--r--bootstrap/lib/stdlib/ebin/supervisor.beambin23436 -> 23616 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/supervisor_bridge.beambin2072 -> 2072 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/zip.beambin26632 -> 26632 bytes
-rw-r--r--configure.in7
-rw-r--r--erts/aclocal.m46
-rw-r--r--erts/configure.in61
-rw-r--r--erts/doc/src/absform.xml1297
-rw-r--r--erts/doc/src/alt_dist.xml1304
-rw-r--r--erts/doc/src/communication.xml67
-rw-r--r--erts/doc/src/crash_dump.xml955
-rw-r--r--erts/doc/src/driver.xml451
-rw-r--r--erts/doc/src/driver_entry.xml641
-rw-r--r--erts/doc/src/epmd.xml445
-rw-r--r--erts/doc/src/erl.xml2219
-rw-r--r--erts/doc/src/erl_dist_protocol.xml1964
-rw-r--r--erts/doc/src/erl_driver.xml4915
-rw-r--r--erts/doc/src/erl_ext_dist.xml891
-rw-r--r--erts/doc/src/erl_nif.xml4256
-rw-r--r--erts/doc/src/erl_prim_loader.xml115
-rw-r--r--erts/doc/src/erl_tracer.xml922
-rw-r--r--erts/doc/src/erlang.xml7735
-rw-r--r--erts/doc/src/erlc.xml274
-rw-r--r--erts/doc/src/erlsrv.xml613
-rw-r--r--erts/doc/src/erts_alloc.xml1086
-rw-r--r--erts/doc/src/escript.xml400
-rw-r--r--erts/doc/src/inet_cfg.xml437
-rw-r--r--erts/doc/src/init.xml241
-rw-r--r--erts/doc/src/introduction.xml56
-rw-r--r--erts/doc/src/match_spec.xml1073
-rw-r--r--erts/doc/src/notes.xml247
-rw-r--r--erts/doc/src/part.xml2
-rw-r--r--erts/doc/src/ref_man.xml8
-rw-r--r--erts/doc/src/run_erl.xml257
-rw-r--r--erts/doc/src/start.xml36
-rw-r--r--erts/doc/src/start_erl.xml201
-rw-r--r--erts/doc/src/time_correction.xml288
-rw-r--r--erts/doc/src/tty.xml67
-rw-r--r--erts/doc/src/werl.xml105
-rw-r--r--erts/doc/src/zlib.xml682
-rw-r--r--erts/emulator/Makefile.in33
-rw-r--r--erts/emulator/beam/atom.h3
-rw-r--r--erts/emulator/beam/atom.names20
-rw-r--r--erts/emulator/beam/beam_bif_load.c1089
-rw-r--r--erts/emulator/beam/beam_bp.c3
-rw-r--r--erts/emulator/beam/beam_emu.c401
-rw-r--r--erts/emulator/beam/beam_load.c170
-rw-r--r--erts/emulator/beam/beam_load.h10
-rw-r--r--erts/emulator/beam/benchmark.c301
-rw-r--r--erts/emulator/beam/benchmark.h295
-rw-r--r--erts/emulator/beam/bif.c480
-rw-r--r--erts/emulator/beam/bif.tab10
-rw-r--r--erts/emulator/beam/big.h9
-rw-r--r--erts/emulator/beam/binary.c2
-rw-r--r--erts/emulator/beam/erl_alloc.c30
-rw-r--r--erts/emulator/beam/erl_alloc.types4
-rw-r--r--erts/emulator/beam/erl_ao_firstfit_alloc.c2
-rw-r--r--erts/emulator/beam/erl_bif_info.c133
-rw-r--r--erts/emulator/beam/erl_bif_port.c8
-rw-r--r--erts/emulator/beam/erl_bif_re.c8
-rw-r--r--erts/emulator/beam/erl_db.c4
-rw-r--r--erts/emulator/beam/erl_db_hash.c44
-rw-r--r--erts/emulator/beam/erl_db_util.h1
-rw-r--r--erts/emulator/beam/erl_fun.c53
-rw-r--r--erts/emulator/beam/erl_fun.h6
-rw-r--r--erts/emulator/beam/erl_gc.c165
-rw-r--r--erts/emulator/beam/erl_hl_timer.c5
-rw-r--r--erts/emulator/beam/erl_init.c53
-rw-r--r--erts/emulator/beam/erl_lock_check.c4
-rw-r--r--erts/emulator/beam/erl_map.c48
-rw-r--r--erts/emulator/beam/erl_map.h8
-rw-r--r--erts/emulator/beam/erl_message.c81
-rw-r--r--erts/emulator/beam/erl_message.h53
-rw-r--r--erts/emulator/beam/erl_msacc.c190
-rw-r--r--erts/emulator/beam/erl_msacc.h69
-rw-r--r--erts/emulator/beam/erl_nif.c372
-rw-r--r--erts/emulator/beam/erl_nif.h14
-rw-r--r--erts/emulator/beam/erl_nif_api_funcs.h6
-rw-r--r--erts/emulator/beam/erl_port.h58
-rw-r--r--erts/emulator/beam/erl_process.c526
-rw-r--r--erts/emulator/beam/erl_process.h75
-rw-r--r--erts/emulator/beam/erl_process_dump.c5
-rw-r--r--erts/emulator/beam/erl_ptab.h2
-rw-r--r--erts/emulator/beam/erl_thr_progress.c29
-rw-r--r--erts/emulator/beam/erl_time_sup.c6
-rw-r--r--erts/emulator/beam/erl_trace.c141
-rw-r--r--erts/emulator/beam/erl_unicode.c58
-rw-r--r--erts/emulator/beam/erlang_lttng.h48
-rw-r--r--erts/emulator/beam/export.c5
-rw-r--r--erts/emulator/beam/export.h6
-rw-r--r--erts/emulator/beam/external.c19
-rw-r--r--erts/emulator/beam/global.h53
-rw-r--r--erts/emulator/beam/hash.c21
-rw-r--r--erts/emulator/beam/hash.h2
-rw-r--r--erts/emulator/beam/index.h5
-rw-r--r--erts/emulator/beam/io.c475
-rw-r--r--erts/emulator/beam/lttng-wrapper.h12
-rw-r--r--erts/emulator/beam/module.h2
-rw-r--r--erts/emulator/beam/register.c51
-rw-r--r--erts/emulator/beam/register.h2
-rw-r--r--erts/emulator/beam/safe_hash.h5
-rw-r--r--erts/emulator/beam/sys.h5
-rw-r--r--erts/emulator/beam/utils.c186
-rw-r--r--erts/emulator/drivers/common/inet_drv.c640
-rw-r--r--erts/emulator/hipe/hipe_amd64_asm.m422
-rw-r--r--erts/emulator/hipe/hipe_amd64_bifs.m43
-rw-r--r--erts/emulator/hipe/hipe_amd64_glue.S2
-rw-r--r--erts/emulator/hipe/hipe_arm_asm.m432
-rw-r--r--erts/emulator/hipe/hipe_arm_bifs.m433
-rw-r--r--erts/emulator/hipe/hipe_arm_glue.S4
-rw-r--r--erts/emulator/hipe/hipe_bif0.c36
-rw-r--r--erts/emulator/hipe/hipe_bif1.c754
-rw-r--r--erts/emulator/hipe/hipe_bif1.tab21
-rw-r--r--erts/emulator/hipe/hipe_bif_list.m447
-rw-r--r--erts/emulator/hipe/hipe_gc.c123
-rw-r--r--erts/emulator/hipe/hipe_mkliterals.c6
-rw-r--r--erts/emulator/hipe/hipe_mode_switch.c29
-rw-r--r--erts/emulator/hipe/hipe_ppc_bifs.m436
-rw-r--r--erts/emulator/hipe/hipe_process.h6
-rw-r--r--erts/emulator/hipe/hipe_risc_gc.h13
-rw-r--r--erts/emulator/hipe/hipe_sparc_bifs.m434
-rw-r--r--erts/emulator/hipe/hipe_stack.h3
-rw-r--r--erts/emulator/hipe/hipe_x86.c4
-rw-r--r--erts/emulator/hipe/hipe_x86_bifs.m43
-rw-r--r--erts/emulator/hipe/hipe_x86_gc.h17
-rw-r--r--erts/emulator/internal_doc/Tracing.md2
-rw-r--r--erts/emulator/nifs/common/erl_tracer_nif.c34
-rw-r--r--erts/emulator/sys/common/erl_mmap.c8
-rw-r--r--erts/emulator/sys/common/erl_mmap.h12
-rw-r--r--erts/emulator/sys/common/erl_poll.c14
-rw-r--r--erts/emulator/sys/unix/erl_child_setup.c117
-rw-r--r--erts/emulator/sys/unix/erl_unix_sys.h4
-rw-r--r--erts/emulator/sys/unix/sys.c12
-rw-r--r--erts/emulator/sys/unix/sys_drivers.c57
-rw-r--r--erts/emulator/sys/unix/sys_time.c16
-rw-r--r--erts/emulator/sys/win32/erl_poll.c7
-rw-r--r--erts/emulator/sys/win32/erl_win_sys.h2
-rw-r--r--erts/emulator/test/Makefile1
-rw-r--r--erts/emulator/test/after_SUITE.erl4
-rw-r--r--erts/emulator/test/alloc_SUITE.erl24
-rw-r--r--erts/emulator/test/bif_SUITE.erl15
-rw-r--r--erts/emulator/test/bs_construct_SUITE.erl68
-rw-r--r--erts/emulator/test/busy_port_SUITE.erl6
-rw-r--r--erts/emulator/test/code_SUITE.erl355
-rw-r--r--erts/emulator/test/code_SUITE_data/my_code_test.erl2
-rw-r--r--erts/emulator/test/code_SUITE_data/my_code_test2.erl32
-rw-r--r--erts/emulator/test/dirty_nif_SUITE.erl242
-rw-r--r--erts/emulator/test/dirty_nif_SUITE_data/dirty_nif_SUITE.c62
-rw-r--r--erts/emulator/test/distribution_SUITE.erl196
-rw-r--r--erts/emulator/test/driver_SUITE.erl12
-rw-r--r--erts/emulator/test/erl_link_SUITE.erl2
-rw-r--r--erts/emulator/test/estone_SUITE.erl2
-rw-r--r--erts/emulator/test/float_SUITE.erl2
-rw-r--r--erts/emulator/test/hipe_SUITE.erl67
-rw-r--r--erts/emulator/test/hipe_SUITE_data/literals.erl26
-rw-r--r--erts/emulator/test/hipe_SUITE_data/ref_cell.erl64
-rw-r--r--erts/emulator/test/long_timers_test.erl188
-rw-r--r--erts/emulator/test/lttng_SUITE.erl231
-rw-r--r--erts/emulator/test/map_SUITE.erl35
-rw-r--r--erts/emulator/test/message_queue_data_SUITE.erl44
-rw-r--r--erts/emulator/test/monitor_SUITE.erl14
-rw-r--r--erts/emulator/test/mtx_SUITE.erl2
-rw-r--r--erts/emulator/test/nif_SUITE.erl38
-rw-r--r--erts/emulator/test/nif_SUITE_data/nif_SUITE.c68
-rw-r--r--erts/emulator/test/node_container_SUITE.erl2
-rw-r--r--erts/emulator/test/old_scheduler_SUITE.erl4
-rw-r--r--erts/emulator/test/port_SUITE.erl594
-rw-r--r--erts/emulator/test/port_SUITE_data/Makefile.src2
-rw-r--r--erts/emulator/test/port_SUITE_data/sleep_failure_drv.c76
-rw-r--r--erts/emulator/test/port_trace_SUITE.erl44
-rw-r--r--erts/emulator/test/port_trace_SUITE_data/echo_drv.c36
-rw-r--r--erts/emulator/test/process_SUITE.erl17
-rw-r--r--erts/emulator/test/scheduler_SUITE.erl73
-rw-r--r--erts/emulator/test/signal_SUITE.erl2
-rw-r--r--erts/emulator/test/smoke_test_SUITE.erl2
-rw-r--r--erts/emulator/test/statistics_SUITE.erl17
-rw-r--r--erts/emulator/test/system_info_SUITE.erl2
-rw-r--r--erts/emulator/test/time_SUITE.erl89
-rw-r--r--erts/emulator/test/timer_bif_SUITE.erl20
-rw-r--r--erts/emulator/test/trace_bif_SUITE.erl4
-rw-r--r--erts/emulator/test/trace_call_time_SUITE.erl10
-rw-r--r--erts/emulator/test/trace_local_SUITE.erl8
-rw-r--r--erts/emulator/test/trace_port_SUITE.erl22
-rw-r--r--erts/emulator/test/tracer_SUITE.erl103
-rw-r--r--erts/emulator/test/tracer_SUITE_data/tracer_test.c4
-rw-r--r--erts/emulator/test/tracer_test.erl4
-rw-r--r--erts/emulator/test/z_SUITE.erl8
-rw-r--r--erts/epmd/test/epmd_SUITE.erl1205
-rw-r--r--erts/etc/common/erlexec.c21
-rw-r--r--erts/etc/common/heart.c18
-rw-r--r--erts/etc/unix/etp-commands.in173
-rw-r--r--erts/etc/unix/format_man_pages2
-rw-r--r--erts/etc/unix/run_erl.c29
-rw-r--r--erts/example/time_compat.erl4
-rw-r--r--erts/include/internal/erl_misc_utils.h29
-rw-r--r--erts/include/internal/ethr_mutex.h10
-rw-r--r--erts/lib_src/pthread/ethr_event.c74
-rw-r--r--erts/preloaded/ebin/erl_prim_loader.beambin55780 -> 55752 bytes
-rw-r--r--erts/preloaded/ebin/erl_tracer.beambin2112 -> 2200 bytes
-rw-r--r--erts/preloaded/ebin/erlang.beambin104620 -> 105100 bytes
-rw-r--r--erts/preloaded/ebin/erts_code_purger.beambin8696 -> 11168 bytes
-rw-r--r--erts/preloaded/ebin/erts_dirty_process_code_checker.beambin0 -> 2144 bytes
-rw-r--r--erts/preloaded/ebin/erts_internal.beambin10536 -> 11116 bytes
-rw-r--r--erts/preloaded/ebin/erts_literal_area_collector.beambin0 -> 3304 bytes
-rw-r--r--erts/preloaded/ebin/init.beambin49924 -> 50032 bytes
-rw-r--r--erts/preloaded/ebin/otp_ring0.beambin1444 -> 1444 bytes
-rw-r--r--erts/preloaded/ebin/prim_eval.beambin1312 -> 1312 bytes
-rw-r--r--erts/preloaded/ebin/prim_file.beambin44764 -> 44764 bytes
-rw-r--r--erts/preloaded/ebin/prim_inet.beambin72544 -> 76268 bytes
-rw-r--r--erts/preloaded/ebin/prim_zip.beambin23152 -> 23152 bytes
-rw-r--r--erts/preloaded/ebin/zlib.beambin14136 -> 14136 bytes
-rw-r--r--erts/preloaded/src/Makefile4
-rw-r--r--erts/preloaded/src/erl_prim_loader.erl6
-rw-r--r--erts/preloaded/src/erl_tracer.erl14
-rw-r--r--erts/preloaded/src/erlang.erl59
-rw-r--r--erts/preloaded/src/erts.app.src2
-rw-r--r--erts/preloaded/src/erts_code_purger.erl141
-rw-r--r--erts/preloaded/src/erts_dirty_process_code_checker.erl82
-rw-r--r--erts/preloaded/src/erts_internal.erl52
-rw-r--r--erts/preloaded/src/erts_literal_area_collector.erl113
-rw-r--r--erts/preloaded/src/init.erl42
-rw-r--r--erts/preloaded/src/prim_inet.erl340
-rw-r--r--erts/start_scripts/Makefile2
-rw-r--r--erts/test/run_erl_SUITE.erl19
-rw-r--r--erts/test/z_SUITE.erl14
-rw-r--r--erts/vsn.mk2
-rw-r--r--lib/asn1/doc/src/asn1_getting_started.xml2
-rw-r--r--lib/asn1/doc/src/asn1_introduction.xml2
-rw-r--r--lib/asn1/doc/src/notes.xml4
-rw-r--r--lib/asn1/src/asn1_db.erl4
-rw-r--r--lib/asn1/src/asn1ct.erl3
-rw-r--r--lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl16
-rw-r--r--lib/asn1/test/asn1_test_lib.erl53
-rw-r--r--lib/common_test/doc/src/common_test_app.xml2
-rw-r--r--lib/common_test/doc/src/ct.xml8
-rw-r--r--lib/common_test/doc/src/ct_hooks.xml2
-rw-r--r--lib/common_test/doc/src/ct_hooks_chapter.xml8
-rw-r--r--lib/common_test/doc/src/ct_netconfc.xml7
-rw-r--r--lib/common_test/doc/src/ct_ssh.xml106
-rw-r--r--lib/common_test/doc/src/ct_telnet.xml2
-rw-r--r--lib/common_test/doc/src/event_handler_chapter.xml6
-rw-r--r--lib/common_test/doc/src/introduction.xml2
-rw-r--r--lib/common_test/doc/src/notes.xml7
-rw-r--r--lib/common_test/doc/src/run_test_chapter.xml6
-rw-r--r--lib/common_test/doc/src/write_test_chapter.xml10
-rw-r--r--lib/common_test/src/ct.erl2
-rw-r--r--lib/common_test/src/ct_config.erl47
-rw-r--r--lib/common_test/src/ct_framework.erl10
-rw-r--r--lib/common_test/src/ct_ftp.erl2
-rw-r--r--lib/common_test/src/ct_gen_conn.erl10
-rw-r--r--lib/common_test/src/ct_groups.erl16
-rw-r--r--lib/common_test/src/ct_hooks.erl3
-rw-r--r--lib/common_test/src/ct_hooks_lock.erl2
-rw-r--r--lib/common_test/src/ct_logs.erl160
-rw-r--r--lib/common_test/src/ct_make.erl2
-rw-r--r--lib/common_test/src/ct_master.erl24
-rw-r--r--lib/common_test/src/ct_master_logs.erl43
-rw-r--r--lib/common_test/src/ct_property_test.erl8
-rw-r--r--lib/common_test/src/ct_release_test.erl38
-rw-r--r--lib/common_test/src/ct_repeat.erl6
-rw-r--r--lib/common_test/src/ct_rpc.erl6
-rw-r--r--lib/common_test/src/ct_run.erl98
-rw-r--r--lib/common_test/src/ct_slave.erl6
-rw-r--r--lib/common_test/src/ct_snmp.erl80
-rw-r--r--lib/common_test/src/ct_ssh.erl4
-rw-r--r--lib/common_test/src/ct_telnet.erl94
-rw-r--r--lib/common_test/src/ct_telnet_client.erl4
-rw-r--r--lib/common_test/src/ct_util.erl23
-rw-r--r--lib/common_test/src/ct_webtool.erl39
-rw-r--r--lib/common_test/src/cth_conn_log.erl2
-rw-r--r--lib/common_test/src/cth_log_redirect.erl9
-rw-r--r--lib/common_test/src/erl2html2.erl20
-rw-r--r--lib/common_test/src/test_server.erl135
-rw-r--r--lib/common_test/src/test_server_ctrl.erl67
-rw-r--r--lib/common_test/src/test_server_gl.erl5
-rw-r--r--lib/common_test/src/test_server_io.erl17
-rw-r--r--lib/common_test/src/test_server_node.erl12
-rw-r--r--lib/common_test/src/test_server_sup.erl5
-rw-r--r--lib/common_test/src/vts.erl19
-rw-r--r--lib/common_test/test/Makefile3
-rw-r--r--lib/common_test/test/ct_auto_compile_SUITE.erl1
-rw-r--r--lib/common_test/test/ct_config_SUITE.erl53
-rw-r--r--lib/common_test/test/ct_config_SUITE_data/config/test/config_dynamic_SUITE.erl9
-rw-r--r--lib/common_test/test/ct_gen_conn_SUITE_data/conn_SUITE.erl68
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/cth_log_SUITE.erl10
-rw-r--r--lib/common_test/test/ct_log_SUITE.erl328
-rw-r--r--lib/common_test/test/ct_netconfc_SUITE.erl32
-rw-r--r--lib/common_test/test/ct_netconfc_SUITE_data/netconfc1_SUITE.erl275
-rw-r--r--lib/common_test/test/ct_netconfc_SUITE_data/netconfc_remote_SUITE.erl36
-rw-r--r--lib/common_test/test/ct_netconfc_SUITE_data/netconfc_test_lib.erl166
-rw-r--r--lib/common_test/test/ct_netconfc_SUITE_data/ns.erl8
-rw-r--r--lib/common_test/test/ct_netconfc_SUITE_data/ssh_dir/ssh_host_dsa_key13
-rw-r--r--lib/common_test/test/ct_netconfc_SUITE_data/ssh_dir/ssh_host_dsa_key.pub11
-rw-r--r--lib/common_test/test/ct_repeat_testrun_SUITE.erl60
-rw-r--r--lib/common_test/test/ct_telnet_SUITE_data/ct_telnet_own_server_SUITE.erl15
-rw-r--r--lib/common_test/test/ct_test_support.erl6
-rw-r--r--lib/common_test/test/telnet_server.erl58
-rw-r--r--lib/common_test/test_server/ts_install.erl9
-rw-r--r--lib/common_test/test_server/ts_run.erl2
-rw-r--r--lib/compiler/doc/src/compile.xml22
-rw-r--r--lib/compiler/doc/src/notes.xml41
-rw-r--r--lib/compiler/doc/src/ref_man.xml2
-rw-r--r--lib/compiler/src/beam_block.erl115
-rw-r--r--lib/compiler/src/beam_bool.erl6
-rw-r--r--lib/compiler/src/beam_dead.erl25
-rw-r--r--lib/compiler/src/beam_disasm.erl5
-rw-r--r--lib/compiler/src/beam_disasm.hrl6
-rw-r--r--lib/compiler/src/beam_except.erl8
-rw-r--r--lib/compiler/src/beam_jump.erl70
-rw-r--r--lib/compiler/src/beam_receive.erl3
-rw-r--r--lib/compiler/src/beam_reorder.erl9
-rw-r--r--lib/compiler/src/beam_type.erl66
-rw-r--r--lib/compiler/src/beam_utils.erl123
-rw-r--r--lib/compiler/src/beam_validator.erl125
-rw-r--r--lib/compiler/src/cerl.erl32
-rw-r--r--lib/compiler/src/compile.erl29
-rw-r--r--lib/compiler/src/core_pp.erl55
-rw-r--r--lib/compiler/src/rec_env.erl174
-rw-r--r--lib/compiler/src/sys_core_fold.erl34
-rw-r--r--lib/compiler/src/v3_codegen.erl106
-rw-r--r--lib/compiler/src/v3_core.erl77
-rw-r--r--lib/compiler/src/v3_kernel.erl2
-rw-r--r--lib/compiler/test/Makefile7
-rw-r--r--lib/compiler/test/andor_SUITE.erl63
-rw-r--r--lib/compiler/test/beam_block_SUITE.erl45
-rw-r--r--lib/compiler/test/beam_bool_SUITE.erl197
-rw-r--r--lib/compiler/test/beam_except_SUITE.erl26
-rw-r--r--lib/compiler/test/beam_jump_SUITE.erl74
-rw-r--r--lib/compiler/test/beam_reorder_SUITE.erl16
-rw-r--r--lib/compiler/test/beam_type_SUITE.erl36
-rw-r--r--lib/compiler/test/beam_utils_SUITE.erl88
-rw-r--r--lib/compiler/test/beam_validator_SUITE.erl120
-rw-r--r--lib/compiler/test/bif_SUITE.erl65
-rw-r--r--lib/compiler/test/compile_SUITE.erl54
-rw-r--r--lib/compiler/test/core_fold_SUITE.erl61
-rw-r--r--lib/compiler/test/fun_SUITE.erl30
-rw-r--r--lib/compiler/test/guard_SUITE.erl29
-rw-r--r--lib/compiler/test/map_SUITE.erl44
-rw-r--r--lib/compiler/test/match_SUITE.erl93
-rw-r--r--lib/compiler/test/misc_SUITE.erl7
-rw-r--r--lib/compiler/test/receive_SUITE.erl6
-rw-r--r--lib/compiler/test/test_lib.erl16
-rw-r--r--lib/compiler/test/trycatch_SUITE.erl3
-rw-r--r--lib/compiler/vsn.mk2
-rw-r--r--lib/cosEvent/test/event_channel_SUITE.erl17
-rw-r--r--lib/cosEvent/test/generated_SUITE.erl50
-rw-r--r--lib/cosEventDomain/test/event_domain_SUITE.erl16
-rw-r--r--lib/cosEventDomain/test/generated_SUITE.erl42
-rw-r--r--lib/cosFileTransfer/test/fileTransfer_SUITE.erl290
-rw-r--r--lib/cosNotification/test/eventDB_SUITE.erl85
-rw-r--r--lib/cosNotification/test/generated_SUITE.erl185
-rw-r--r--lib/cosNotification/test/grammar_SUITE.erl25
-rw-r--r--lib/cosNotification/test/notification_SUITE.erl47
-rw-r--r--lib/cosProperty/test/generated_SUITE.erl68
-rw-r--r--lib/cosProperty/test/property_SUITE.erl29
-rw-r--r--lib/cosTime/test/generated_SUITE.erl30
-rw-r--r--lib/cosTime/test/time_SUITE.erl160
-rw-r--r--lib/cosTransactions/test/generated_SUITE.erl62
-rw-r--r--lib/cosTransactions/test/transactions_SUITE.erl131
-rw-r--r--lib/crypto/c_src/crypto.c148
-rw-r--r--lib/crypto/doc/src/crypto.xml4
-rw-r--r--lib/crypto/doc/src/notes.xml8
-rw-r--r--lib/crypto/src/crypto.erl14
-rw-r--r--lib/crypto/test/crypto_SUITE.erl25
-rw-r--r--lib/crypto/test/old_crypto_SUITE.erl37
-rw-r--r--lib/debugger/doc/src/Makefile2
-rw-r--r--lib/debugger/doc/src/i.xml4
-rw-r--r--lib/debugger/src/dbg_debugged.erl5
-rw-r--r--lib/debugger/src/dbg_icmd.erl8
-rw-r--r--lib/debugger/src/dbg_iserver.erl57
-rw-r--r--lib/debugger/src/dbg_wx_break_win.erl34
-rw-r--r--lib/debugger/src/dbg_wx_code.erl10
-rw-r--r--lib/debugger/src/dbg_wx_filedialog_win.erl16
-rw-r--r--lib/debugger/src/dbg_wx_mon.erl4
-rw-r--r--lib/debugger/src/dbg_wx_mon_win.erl24
-rw-r--r--lib/debugger/src/dbg_wx_src_view.erl2
-rw-r--r--lib/debugger/src/dbg_wx_trace.erl15
-rw-r--r--lib/debugger/src/dbg_wx_trace_win.erl57
-rw-r--r--lib/debugger/src/dbg_wx_view.erl12
-rw-r--r--lib/debugger/src/dbg_wx_win.erl13
-rw-r--r--lib/debugger/src/dbg_wx_winman.erl4
-rw-r--r--lib/debugger/src/i.erl2
-rw-r--r--lib/debugger/src/int.erl24
-rw-r--r--lib/dialyzer/doc/src/notes.xml43
-rw-r--r--lib/dialyzer/src/dialyzer.erl2
-rw-r--r--lib/dialyzer/src/dialyzer_contracts.erl190
-rw-r--r--lib/dialyzer/src/dialyzer_dataflow.erl133
-rw-r--r--lib/dialyzer/src/dialyzer_dep.erl62
-rw-r--r--lib/dialyzer/src/dialyzer_utils.erl122
-rw-r--r--lib/dialyzer/test/Makefile1
-rw-r--r--lib/dialyzer/test/abstract_SUITE.erl102
-rw-r--r--lib/dialyzer/test/behaviour_SUITE_data/dialyzer_options1
-rw-r--r--lib/dialyzer/test/dialyzer_common.erl11
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/exact2
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/guard_update2
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/map_in_guard22
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/typeflow2
-rw-r--r--lib/dialyzer/test/map_SUITE_data/results/typesig4
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/mand_remote_val/a.erl9
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/mand_remote_val/b.erl3
-rw-r--r--lib/dialyzer/test/map_SUITE_data/src/opaque_bif.erl13
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/dialyzer_options1
-rw-r--r--lib/dialyzer/test/small_SUITE_data/results/higher_order_discrepancy5
-rw-r--r--lib/dialyzer/test/small_SUITE_data/results/maps12
-rw-r--r--lib/dialyzer/test/small_SUITE_data/src/higher_order_discrepancy.erl5
-rw-r--r--lib/dialyzer/test/small_SUITE_data/src/loopy.erl17
-rw-r--r--lib/dialyzer/test/unmatched_returns_SUITE_data/src/send.erl11
-rw-r--r--lib/dialyzer/test/user_SUITE_data/results/wpc_hlines3
-rw-r--r--lib/dialyzer/test/user_SUITE_data/src/wpc_hlines.erl22
-rw-r--r--lib/dialyzer/vsn.mk2
-rw-r--r--lib/diameter/doc/src/notes.xml20
-rw-r--r--lib/diameter/src/Makefile2
-rw-r--r--lib/diameter/src/base/diameter_lib.erl33
-rw-r--r--lib/diameter/src/base/diameter_session.erl5
-rw-r--r--lib/diameter/src/base/diameter_watchdog.erl4
-rw-r--r--lib/diameter/test/diameter_codec_test.erl13
-rw-r--r--lib/diameter/test/diameter_transport_SUITE.erl3
-rw-r--r--lib/diameter/test/diameter_util.erl35
-rw-r--r--lib/edoc/priv/edoc.dtd6
-rw-r--r--lib/edoc/src/edoc_extract.erl14
-rw-r--r--lib/edoc/src/edoc_layout.erl18
-rw-r--r--lib/edoc/src/edoc_lib.erl2
-rw-r--r--lib/edoc/src/edoc_parser.yrl11
-rw-r--r--lib/edoc/src/edoc_run.erl11
-rw-r--r--lib/edoc/src/edoc_scanner.erl2
-rw-r--r--lib/edoc/src/edoc_specs.erl6
-rw-r--r--lib/edoc/src/edoc_tags.erl11
-rw-r--r--lib/edoc/src/edoc_types.erl4
-rw-r--r--lib/edoc/src/edoc_types.hrl2
-rw-r--r--lib/eldap/doc/src/notes.xml22
-rw-r--r--lib/eldap/src/eldap.erl7
-rw-r--r--lib/eldap/test/eldap_basic_SUITE.erl157
-rw-r--r--lib/erl_docgen/doc/src/notes.xml38
-rwxr-xr-xlib/erl_docgen/priv/bin/xref_mod_app.escript2
-rw-r--r--lib/erl_docgen/priv/css/otp_doc.css5
-rw-r--r--lib/erl_docgen/priv/dtd/common.dtd7
-rw-r--r--lib/erl_docgen/priv/dtd/erlref.dtd2
-rw-r--r--lib/erl_docgen/priv/xsl/db_html.xsl190
-rw-r--r--lib/erl_docgen/priv/xsl/db_man.xsl12
-rw-r--r--lib/erl_docgen/priv/xsl/db_pdf.xsl26
-rw-r--r--lib/erl_docgen/src/docgen_edoc_xml_cb.erl142
-rw-r--r--lib/erl_docgen/src/docgen_otp_specs.erl32
-rw-r--r--lib/erl_docgen/test/erl_docgen_SUITE.erl10
-rw-r--r--lib/erl_docgen/vsn.mk2
-rw-r--r--lib/erl_interface/configure.in4
-rw-r--r--lib/erl_interface/doc/src/notes.xml22
-rw-r--r--lib/erl_interface/src/connect/ei_connect.c40
-rw-r--r--lib/erl_interface/src/legacy/erl_marshal.c40
-rw-r--r--lib/erl_interface/src/misc/ei_portio.h9
-rw-r--r--lib/erl_interface/src/misc/show_msg.c2
-rw-r--r--lib/erl_interface/test/ei_connect_SUITE_data/Makefile.src3
-rw-r--r--lib/erl_interface/test/ei_connect_SUITE_data/einode.c3
-rw-r--r--lib/erl_interface/test/ei_decode_SUITE_data/ei_decode_test.c10
-rw-r--r--lib/erl_interface/test/erl_eterm_SUITE_data/eterm_test.c4
-rw-r--r--lib/erl_interface/test/runner.erl6
-rw-r--r--lib/et/doc/src/et_desc.xmlsrc82
-rw-r--r--lib/et/doc/src/et_examples.xmlsrc255
-rw-r--r--lib/et/doc/src/et_tutorial.xmlsrc13
-rw-r--r--lib/et/src/et_collector.erl29
-rw-r--r--lib/et/src/et_wx_contents_viewer.erl109
-rw-r--r--lib/et/src/et_wx_viewer.erl136
-rw-r--r--lib/eunit/doc/overview.edoc9
-rw-r--r--lib/eunit/doc/src/notes.xml10
-rw-r--r--lib/eunit/include/eunit.hrl10
-rw-r--r--lib/eunit/vsn.mk2
-rw-r--r--lib/gs/doc/src/Makefile2
-rw-r--r--lib/hipe/amd64/Makefile2
-rw-r--r--lib/hipe/amd64/hipe_amd64_ra_sse2_postconditions.erl16
-rw-r--r--lib/hipe/arm/Makefile2
-rw-r--r--lib/hipe/arm/hipe_arm_registers.erl8
-rw-r--r--lib/hipe/arm/hipe_rtl_to_arm.erl9
-rw-r--r--lib/hipe/cerl/Makefile2
-rw-r--r--lib/hipe/cerl/cerl_pmatch.erl28
-rw-r--r--lib/hipe/cerl/erl_bif_types.erl6
-rw-r--r--lib/hipe/cerl/erl_types.erl1018
-rw-r--r--lib/hipe/doc/src/notes.xml23
-rw-r--r--lib/hipe/flow/Makefile2
-rw-r--r--lib/hipe/flow/cfg.hrl6
-rw-r--r--lib/hipe/flow/hipe_dominators.erl2
-rw-r--r--lib/hipe/icode/Makefile4
-rw-r--r--lib/hipe/icode/hipe_icode.erl14
-rw-r--r--lib/hipe/icode/hipe_icode.hrl2
-rw-r--r--lib/hipe/icode/hipe_icode_call_elim.erl78
-rw-r--r--lib/hipe/icode/hipe_icode_cfg.erl3
-rw-r--r--lib/hipe/icode/hipe_icode_range.erl156
-rw-r--r--lib/hipe/icode/hipe_icode_type.erl34
-rw-r--r--lib/hipe/llvm/Makefile19
-rw-r--r--lib/hipe/llvm/elf_format.erl654
-rw-r--r--lib/hipe/llvm/elf_format.hrl40
-rw-r--r--lib/hipe/llvm/hipe_llvm.erl98
-rw-r--r--lib/hipe/llvm/hipe_llvm_main.erl189
-rw-r--r--lib/hipe/llvm/hipe_rtl_to_llvm.erl45
-rw-r--r--lib/hipe/main/Makefile2
-rw-r--r--lib/hipe/main/hipe.app.src1
-rw-r--r--lib/hipe/main/hipe.erl80
-rw-r--r--lib/hipe/main/hipe.hrl.src40
-rw-r--r--lib/hipe/main/hipe_main.erl16
-rw-r--r--lib/hipe/misc/Makefile2
-rw-r--r--lib/hipe/misc/hipe_consttab.erl13
-rw-r--r--lib/hipe/misc/hipe_consttab.hrl2
-rw-r--r--lib/hipe/opt/Makefile2
-rw-r--r--lib/hipe/ppc/Makefile2
-rw-r--r--lib/hipe/ppc/hipe_ppc.erl12
-rw-r--r--lib/hipe/ppc/hipe_ppc_assemble.erl7
-rw-r--r--lib/hipe/regalloc/Makefile2
-rw-r--r--lib/hipe/rtl/Makefile2
-rw-r--r--lib/hipe/rtl/hipe_rtl.erl7
-rw-r--r--lib/hipe/rtl/hipe_rtl_arith.inc55
-rw-r--r--lib/hipe/rtl/hipe_rtl_binary_construct.erl478
-rw-r--r--lib/hipe/rtl/hipe_rtl_lcm.erl81
-rw-r--r--lib/hipe/rtl/hipe_rtl_ssapre.erl474
-rw-r--r--lib/hipe/sparc/Makefile2
-rw-r--r--lib/hipe/sparc/hipe_rtl_to_sparc.erl40
-rw-r--r--lib/hipe/sparc/hipe_sparc_registers.erl8
-rw-r--r--lib/hipe/test/Makefile5
-rw-r--r--lib/hipe/test/hipe_testsuite_driver.erl26
-rw-r--r--lib/hipe/test/opt_verify_SUITE.erl62
-rw-r--r--lib/hipe/test/opt_verify_SUITE_data/call_elim_test.erl12
-rw-r--r--lib/hipe/test/opt_verify_SUITE_data/call_elim_test_branches_no_opt_poss.erl32
-rw-r--r--lib/hipe/test/opt_verify_SUITE_data/call_elim_test_branches_opt_poss.erl32
-rw-r--r--lib/hipe/tools/Makefile2
-rw-r--r--lib/hipe/util/Makefile2
-rw-r--r--lib/hipe/x86/Makefile2
-rw-r--r--lib/hipe/x86/hipe_x86_postpass.erl3
-rw-r--r--lib/ic/doc/src/Makefile2
-rw-r--r--lib/ic/src/ic_codegen.erl8
-rw-r--r--lib/ic/test/c_client_erl_server_SUITE.erl76
-rw-r--r--lib/ic/test/c_client_erl_server_SUITE_data/c_client.c1
-rw-r--r--lib/ic/test/c_client_erl_server_proto_SUITE.erl76
-rw-r--r--lib/ic/test/c_client_erl_server_proto_tmo_SUITE.erl78
-rw-r--r--lib/ic/test/erl_client_c_server_SUITE.erl77
-rw-r--r--lib/ic/test/erl_client_c_server_proto_SUITE.erl77
-rw-r--r--lib/ic/test/ic_SUITE.erl469
-rw-r--r--lib/ic/test/ic_be_SUITE.erl23
-rw-r--r--lib/ic/test/ic_pp_SUITE.erl212
-rw-r--r--lib/ic/test/ic_pragma_SUITE.erl48
-rw-r--r--lib/ic/test/ic_register_SUITE.erl186
-rw-r--r--lib/ic/test/java_client_erl_server_SUITE.erl137
-rw-r--r--lib/inets/doc/src/http_server.xml36
-rw-r--r--lib/inets/doc/src/httpc.xml4
-rw-r--r--lib/inets/doc/src/httpd.xml18
-rw-r--r--lib/inets/doc/src/mod_auth.xml2
-rw-r--r--lib/inets/doc/src/mod_esi.xml157
-rw-r--r--lib/inets/doc/src/notes.xml72
-rw-r--r--lib/inets/src/ftp/ftp.erl28
-rw-r--r--lib/inets/src/ftp/ftp_response.erl1
-rw-r--r--lib/inets/src/http_server/httpd_conf.erl19
-rw-r--r--lib/inets/src/http_server/httpd_example.erl11
-rw-r--r--lib/inets/src/http_server/httpd_response.erl3
-rw-r--r--lib/inets/src/http_server/mod_esi.erl66
-rw-r--r--lib/inets/src/http_server/mod_htaccess.erl4
-rw-r--r--lib/inets/src/inets_app/Makefile3
-rw-r--r--lib/inets/src/inets_app/inets.app.src1
-rw-r--r--lib/inets/src/inets_app/inets_lib.erl2
-rw-r--r--lib/inets/src/inets_app/inets_time_compat.erl72
-rw-r--r--lib/inets/src/tftp/tftp_logger.erl4
-rw-r--r--lib/inets/src/tftp/tftp_sup.erl4
-rw-r--r--lib/inets/test/Makefile3
-rw-r--r--lib/inets/test/ftp_SUITE.erl643
-rw-r--r--lib/inets/test/ftp_format_SUITE.erl111
-rw-r--r--lib/inets/test/ftp_suite_lib.erl1695
-rw-r--r--lib/inets/test/http_format_SUITE.erl8
-rw-r--r--lib/inets/test/httpc_SUITE.erl62
-rw-r--r--lib/inets/test/httpc_cookie_SUITE.erl369
-rw-r--r--lib/inets/test/httpc_proxy_SUITE.erl16
-rw-r--r--lib/inets/test/httpd_SUITE.erl505
-rw-r--r--lib/inets/test/httpd_SUITE_data/mime_types.txt100
-rw-r--r--lib/inets/test/httpd_basic_SUITE.erl33
-rw-r--r--lib/inets/test/httpd_block.erl2
-rw-r--r--lib/inets/test/httpd_load.erl5
-rw-r--r--lib/inets/test/httpd_mod.erl185
-rw-r--r--lib/inets/test/httpd_time_test.erl2
-rw-r--r--lib/inets/test/inets_SUITE.erl133
-rw-r--r--lib/inets/test/inets_app_test.erl245
-rw-r--r--lib/inets/test/inets_appup_test.erl71
-rw-r--r--lib/inets/test/inets_socketwrap_SUITE.erl6
-rw-r--r--lib/inets/test/inets_sup_SUITE.erl107
-rw-r--r--lib/inets/test/inets_test_lib.hrl88
-rw-r--r--lib/inets/test/old_httpd_SUITE.erl487
-rw-r--r--lib/inets/vsn.mk2
-rw-r--r--lib/jinterface/doc/src/Makefile2
-rw-r--r--lib/jinterface/doc/src/notes.xml12
-rw-r--r--lib/kernel/doc/src/app.xml6
-rw-r--r--lib/kernel/doc/src/application.xml9
-rw-r--r--lib/kernel/doc/src/auth.xml4
-rw-r--r--lib/kernel/doc/src/code.xml22
-rw-r--r--lib/kernel/doc/src/erl_boot_server.xml4
-rw-r--r--lib/kernel/doc/src/erl_ddll.xml6
-rw-r--r--lib/kernel/doc/src/error_logger.xml30
-rw-r--r--lib/kernel/doc/src/file.xml31
-rw-r--r--lib/kernel/doc/src/gen_sctp.xml6
-rw-r--r--lib/kernel/doc/src/gen_tcp.xml40
-rw-r--r--lib/kernel/doc/src/gen_udp.xml22
-rw-r--r--lib/kernel/doc/src/heart.xml11
-rw-r--r--lib/kernel/doc/src/inet.xml95
-rw-r--r--lib/kernel/doc/src/init_stub.xml2
-rw-r--r--lib/kernel/doc/src/kernel_app.xml22
-rw-r--r--lib/kernel/doc/src/net_kernel.xml48
-rw-r--r--lib/kernel/doc/src/notes.xml95
-rw-r--r--lib/kernel/doc/src/rpc.xml4
-rw-r--r--lib/kernel/doc/src/zlib_stub.xml2
-rw-r--r--lib/kernel/include/dist_util.hrl8
-rw-r--r--lib/kernel/src/Makefile4
-rw-r--r--lib/kernel/src/code_server.erl26
-rw-r--r--lib/kernel/src/dist_util.erl71
-rw-r--r--lib/kernel/src/erl_epmd.erl6
-rw-r--r--lib/kernel/src/gen_sctp.erl33
-rw-r--r--lib/kernel/src/gen_tcp.erl50
-rw-r--r--lib/kernel/src/gen_udp.erl46
-rw-r--r--lib/kernel/src/inet.erl244
-rw-r--r--lib/kernel/src/inet6_sctp.erl26
-rw-r--r--lib/kernel/src/inet6_tcp.erl88
-rw-r--r--lib/kernel/src/inet6_tcp_dist.erl7
-rw-r--r--lib/kernel/src/inet6_udp.erl42
-rw-r--r--lib/kernel/src/inet_int.hrl5
-rw-r--r--lib/kernel/src/inet_sctp.erl19
-rw-r--r--lib/kernel/src/inet_tcp.erl86
-rw-r--r--lib/kernel/src/inet_tcp_dist.erl33
-rw-r--r--lib/kernel/src/inet_udp.erl52
-rw-r--r--lib/kernel/src/kernel.app.src4
-rw-r--r--lib/kernel/src/local_tcp.erl178
-rw-r--r--lib/kernel/src/local_udp.erl106
-rw-r--r--lib/kernel/src/net_adm.erl3
-rw-r--r--lib/kernel/src/net_kernel.erl128
-rw-r--r--lib/kernel/src/os.erl76
-rw-r--r--lib/kernel/test/erl_distribution_SUITE.erl163
-rw-r--r--lib/kernel/test/erl_prim_loader_SUITE.erl24
-rw-r--r--lib/kernel/test/gen_sctp_SUITE.erl148
-rw-r--r--lib/kernel/test/gen_tcp_api_SUITE.erl269
-rw-r--r--lib/kernel/test/gen_udp_SUITE.erl177
-rw-r--r--lib/kernel/test/heart_SUITE.erl45
-rw-r--r--lib/kernel/test/inet_SUITE.erl117
-rw-r--r--lib/kernel/test/inet_res_SUITE.erl15
-rw-r--r--lib/kernel/test/init_SUITE.erl79
-rw-r--r--lib/kernel/test/loose_node.erl11
-rw-r--r--lib/kernel/test/os_SUITE.erl51
-rw-r--r--lib/kernel/test/os_SUITE_data/Makefile.src8
-rw-r--r--lib/kernel/test/os_SUITE_data/my_fds.c9
-rw-r--r--lib/kernel/test/prim_file_SUITE.erl7
-rw-r--r--lib/kernel/vsn.mk2
-rw-r--r--lib/megaco/src/app/megaco.appup.src29
-rw-r--r--lib/mnesia/doc/src/Mnesia_chap1.xml28
-rw-r--r--lib/mnesia/doc/src/Mnesia_chap2.xmlsrc2
-rw-r--r--lib/mnesia/doc/src/Mnesia_chap8.xml8
-rw-r--r--lib/mnesia/doc/src/Mnesia_overview.xml42
-rw-r--r--lib/mnesia/doc/src/mnesia.xml337
-rw-r--r--lib/mnesia/doc/src/mnesia_frag_hash.xml12
-rw-r--r--lib/mnesia/doc/src/mnesia_registry.xml12
-rw-r--r--lib/mnesia/doc/src/part.xml2
-rw-r--r--lib/mnesia/doc/src/ref_man.xml2
-rw-r--r--lib/mnesia/src/mnesia_index.erl4
-rw-r--r--lib/mnesia/test/mnesia_atomicity_test.erl18
-rw-r--r--lib/mnesia/test/mnesia_consistency_test.erl54
-rw-r--r--lib/mnesia/test/mnesia_dirty_access_test.erl56
-rw-r--r--lib/mnesia/test/mnesia_evil_backup.erl2
-rw-r--r--lib/mnesia/test/mnesia_recovery_test.erl11
-rw-r--r--lib/mnesia/test/mt.erl2
-rw-r--r--lib/observer/doc/src/notes.xml32
-rw-r--r--lib/observer/doc/src/observer_ug.xml111
-rw-r--r--lib/observer/doc/src/ttb.xml58
-rw-r--r--lib/observer/src/Makefile1
-rw-r--r--lib/observer/src/crashdump_viewer.erl3
-rw-r--r--lib/observer/src/observer.app.src1
-rw-r--r--lib/observer/src/observer_app_wx.erl8
-rw-r--r--lib/observer/src/observer_lib.erl19
-rw-r--r--lib/observer/src/observer_perf_wx.erl40
-rw-r--r--lib/observer/src/observer_port_wx.erl479
-rw-r--r--lib/observer/src/observer_pro_wx.erl61
-rw-r--r--lib/observer/src/observer_procinfo.erl10
-rw-r--r--lib/observer/src/observer_sys_wx.erl98
-rw-r--r--lib/observer/src/observer_trace_wx.erl672
-rw-r--r--lib/observer/src/observer_traceoptions_wx.erl106
-rw-r--r--lib/observer/src/observer_tv_wx.erl56
-rw-r--r--lib/observer/src/observer_wx.erl104
-rw-r--r--lib/observer/src/ttb.erl51
-rw-r--r--lib/observer/test/observer_SUITE.erl28
-rw-r--r--lib/observer/vsn.mk2
-rw-r--r--lib/odbc/configure.in2
-rw-r--r--lib/odbc/doc/src/notes.xml4
-rw-r--r--lib/odbc/src/odbc.erl2
-rw-r--r--lib/odbc/test/odbc_connect_SUITE.erl188
-rw-r--r--lib/odbc/test/odbc_data_type_SUITE.erl421
-rw-r--r--lib/odbc/test/odbc_query_SUITE.erl464
-rw-r--r--lib/odbc/test/odbc_start_SUITE.erl37
-rw-r--r--lib/odbc/test/odbc_test_lib.erl6
-rw-r--r--lib/orber/test/cdrcoding_10_SUITE.erl237
-rw-r--r--lib/orber/test/cdrcoding_11_SUITE.erl236
-rw-r--r--lib/orber/test/cdrcoding_12_SUITE.erl236
-rw-r--r--lib/orber/test/cdrlib_SUITE.erl182
-rw-r--r--lib/orber/test/corba_SUITE.erl454
-rw-r--r--lib/orber/test/csiv2_SUITE.erl103
-rw-r--r--lib/orber/test/data_types_SUITE.erl16
-rw-r--r--lib/orber/test/generated_SUITE.erl48
-rw-r--r--lib/orber/test/interceptors_SUITE.erl18
-rw-r--r--lib/orber/test/iop_ior_10_SUITE.erl70
-rw-r--r--lib/orber/test/iop_ior_11_SUITE.erl70
-rw-r--r--lib/orber/test/iop_ior_12_SUITE.erl80
-rw-r--r--lib/orber/test/ip_v4v6_interop_SUITE.erl9
-rw-r--r--lib/orber/test/lname_SUITE.erl76
-rw-r--r--lib/orber/test/multi_ORB_SUITE.erl294
-rw-r--r--lib/orber/test/naming_context_SUITE.erl111
-rw-r--r--lib/orber/test/orber_SUITE.erl22
-rw-r--r--lib/orber/test/orber_acl_SUITE.erl42
-rw-r--r--lib/orber/test/orber_firewall_ipv4_in_SUITE.erl47
-rw-r--r--lib/orber/test/orber_firewall_ipv4_out_SUITE.erl43
-rw-r--r--lib/orber/test/orber_firewall_ipv6_in_SUITE.erl47
-rw-r--r--lib/orber/test/orber_firewall_ipv6_out_SUITE.erl43
-rw-r--r--lib/orber/test/orber_nat_SUITE.erl42
-rw-r--r--lib/orber/test/orber_web_SUITE.erl32
-rw-r--r--lib/orber/test/tc_SUITE.erl346
-rw-r--r--lib/os_mon/c_src/cpu_sup.c105
-rw-r--r--lib/os_mon/doc/src/notes.xml13
-rw-r--r--lib/os_mon/src/cpu_sup.erl13
-rw-r--r--lib/os_mon/src/disksup.erl2
-rw-r--r--lib/os_mon/src/memsup.erl58
-rw-r--r--lib/os_mon/test/cpu_sup_SUITE.erl4
-rw-r--r--lib/os_mon/test/memsup_SUITE.erl14
-rw-r--r--lib/os_mon/test/os_mon_SUITE.erl9
-rw-r--r--lib/parsetools/doc/src/yecc.xml2
-rw-r--r--lib/percept/doc/src/egd_ug.xmlsrc39
-rw-r--r--lib/percept/doc/src/notes.xml16
-rw-r--r--lib/percept/src/egd.erl46
-rw-r--r--lib/percept/src/egd.hrl3
-rw-r--r--lib/percept/src/egd_font.erl11
-rw-r--r--lib/percept/src/egd_primitives.erl514
-rw-r--r--lib/percept/src/egd_render.erl268
-rw-r--r--lib/percept/src/percept.erl52
-rw-r--r--lib/percept/src/percept_db.erl54
-rw-r--r--lib/percept/src/percept_graph.erl20
-rw-r--r--lib/percept/src/percept_html.erl102
-rw-r--r--lib/percept/test/egd_SUITE.erl150
-rw-r--r--lib/percept/vsn.mk2
-rw-r--r--lib/public_key/doc/src/Makefile11
-rw-r--r--lib/public_key/doc/src/notes.xml13
-rw-r--r--lib/public_key/doc/src/public_key.xml72
-rw-r--r--lib/public_key/doc/src/public_key_app.xml85
-rw-r--r--lib/public_key/doc/src/ref_man.xml1
-rwxr-xr-xlib/public_key/priv/generate2
-rw-r--r--lib/public_key/src/pubkey_cert.erl4
-rw-r--r--lib/public_key/src/public_key.erl118
-rw-r--r--lib/public_key/test/pbe_SUITE.erl7
-rw-r--r--lib/public_key/test/pkits_SUITE.erl2
-rw-r--r--lib/public_key/test/public_key_SUITE.erl113
-rw-r--r--lib/reltool/doc/src/notes.xml14
-rw-r--r--lib/reltool/doc/src/part.xml2
-rw-r--r--lib/reltool/doc/src/ref_man.xml2
-rw-r--r--lib/reltool/doc/src/reltool.xml18
-rw-r--r--lib/reltool/doc/src/reltool_intro.xml4
-rw-r--r--lib/reltool/src/reltool.hrl26
-rw-r--r--lib/reltool/src/reltool_server.erl151
-rw-r--r--lib/reltool/test/reltool_server_SUITE.erl37
-rw-r--r--lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/x-1.0/ebin/x.app7
-rw-r--r--lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/x-1.0/src/x1.erl5
-rw-r--r--lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/y-1.0/ebin/y.app8
-rw-r--r--lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/y-1.0/src/y1.erl5
-rw-r--r--lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/z-1.0/ebin/z.app7
-rw-r--r--lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/z-1.0/src/z1.erl5
-rw-r--r--lib/runtime_tools/c_src/dyntrace.c61
-rw-r--r--lib/runtime_tools/c_src/dyntrace_lttng.h56
-rw-r--r--lib/runtime_tools/c_src/trace_ip_drv.c3
-rw-r--r--lib/runtime_tools/doc/src/LTTng.xml226
-rw-r--r--lib/runtime_tools/doc/src/dbg.xml221
-rw-r--r--lib/runtime_tools/doc/src/notes.xml26
-rw-r--r--lib/runtime_tools/src/appmon_info.erl9
-rw-r--r--lib/runtime_tools/src/dbg.erl23
-rw-r--r--lib/runtime_tools/src/dyntrace.erl38
-rw-r--r--lib/runtime_tools/src/erts_alloc_config.erl8
-rw-r--r--lib/runtime_tools/src/observer_backend.erl47
-rw-r--r--lib/runtime_tools/src/percept_profile.erl7
-rw-r--r--lib/runtime_tools/src/system_information.erl11
-rw-r--r--lib/runtime_tools/test/dbg_SUITE.erl10
-rw-r--r--lib/runtime_tools/test/dbg_SUITE_data/dbg_SUITE.c4
-rw-r--r--lib/runtime_tools/test/dyntrace_lttng_SUITE.erl146
-rw-r--r--lib/sasl/doc/src/alarm_handler.xml4
-rw-r--r--lib/sasl/doc/src/appup.xml10
-rw-r--r--lib/sasl/doc/src/error_logging.xml18
-rw-r--r--lib/sasl/doc/src/notes.xml2
-rw-r--r--lib/sasl/doc/src/part.xml2
-rw-r--r--lib/sasl/doc/src/rb.xml6
-rw-r--r--lib/sasl/doc/src/ref_man.xml2
-rw-r--r--lib/sasl/doc/src/rel.xml6
-rw-r--r--lib/sasl/doc/src/release_handler.xml20
-rw-r--r--lib/sasl/doc/src/sasl_app.xml24
-rw-r--r--lib/sasl/doc/src/sasl_intro.xml2
-rw-r--r--lib/sasl/doc/src/systools.xml6
-rw-r--r--lib/sasl/src/sasl.app.src4
-rw-r--r--lib/sasl/src/systools_make.erl5
-rw-r--r--lib/sasl/test/release_handler_SUITE.erl64
-rw-r--r--lib/sasl/test/rh_test_lib.erl2
-rw-r--r--lib/snmp/src/agent/snmpa_conf.erl16
-rw-r--r--lib/snmp/src/app/snmp.app.src12
-rw-r--r--lib/snmp/src/compile/snmpc.erl11
-rw-r--r--lib/snmp/src/compile/snmpc_misc.erl20
-rw-r--r--lib/snmp/test/modules.mk1
-rw-r--r--lib/snmp/test/snmp_SUITE.erl4
-rw-r--r--lib/snmp/test/snmp_agent_conf_test.erl210
-rw-r--r--lib/snmp/test/snmp_agent_test.erl26
-rw-r--r--lib/snmp/test/snmp_app_test.erl381
-rw-r--r--lib/snmp/test/snmp_manager_test.erl26
-rw-r--r--lib/snmp/test/snmp_to_snmpnet_SUITE.erl10
-rw-r--r--lib/ssh/doc/src/notes.xml58
-rw-r--r--lib/ssh/doc/src/ssh.xml26
-rw-r--r--lib/ssh/doc/src/ssh_app.xml4
-rw-r--r--lib/ssh/doc/src/ssh_channel.xml2
-rw-r--r--lib/ssh/doc/src/ssh_sftp.xml15
-rw-r--r--lib/ssh/src/ssh.app.src2
-rw-r--r--lib/ssh/src/ssh.erl337
-rw-r--r--lib/ssh/src/ssh.hrl2
-rw-r--r--lib/ssh/src/ssh_acceptor.erl3
-rw-r--r--lib/ssh/src/ssh_acceptor_sup.erl2
-rw-r--r--lib/ssh/src/ssh_auth.erl355
-rw-r--r--lib/ssh/src/ssh_channel_sup.erl2
-rw-r--r--lib/ssh/src/ssh_cli.erl15
-rw-r--r--lib/ssh/src/ssh_client_key_api.erl24
-rw-r--r--lib/ssh/src/ssh_connection_handler.erl276
-rw-r--r--lib/ssh/src/ssh_connection_sup.erl2
-rw-r--r--lib/ssh/src/ssh_dbg.erl71
-rw-r--r--lib/ssh/src/ssh_file.erl23
-rw-r--r--lib/ssh/src/ssh_io.erl52
-rw-r--r--lib/ssh/src/ssh_message.erl10
-rw-r--r--lib/ssh/src/ssh_server_key_api.erl15
-rw-r--r--lib/ssh/src/ssh_sftp.erl23
-rw-r--r--lib/ssh/src/ssh_sftpd.erl16
-rw-r--r--lib/ssh/src/ssh_shell.erl15
-rw-r--r--lib/ssh/src/ssh_subsystem_sup.erl2
-rw-r--r--lib/ssh/src/ssh_sup.erl2
-rw-r--r--lib/ssh/src/ssh_system_sup.erl7
-rw-r--r--lib/ssh/src/ssh_transport.erl7
-rw-r--r--lib/ssh/src/sshc_sup.erl2
-rw-r--r--lib/ssh/src/sshd_sup.erl2
-rw-r--r--lib/ssh/test/ssh_algorithms_SUITE.erl144
-rw-r--r--lib/ssh/test/ssh_basic_SUITE.erl265
-rw-r--r--lib/ssh/test/ssh_benchmark_SUITE.erl45
-rw-r--r--lib/ssh/test/ssh_connection_SUITE.erl306
-rw-r--r--lib/ssh/test/ssh_echo_server.erl35
-rw-r--r--lib/ssh/test/ssh_options_SUITE.erl82
-rw-r--r--lib/ssh/test/ssh_property_test_SUITE.erl2
-rw-r--r--lib/ssh/test/ssh_protocol_SUITE.erl17
-rw-r--r--lib/ssh/test/ssh_renegotiate_SUITE.erl15
-rw-r--r--lib/ssh/test/ssh_sftp_SUITE.erl393
-rw-r--r--lib/ssh/test/ssh_sftpd_SUITE.erl102
-rw-r--r--lib/ssh/test/ssh_sftpd_erlclient_SUITE.erl64
-rw-r--r--lib/ssh/test/ssh_sup_SUITE.erl41
-rw-r--r--lib/ssh/test/ssh_test_lib.erl61
-rw-r--r--lib/ssh/test/ssh_test_lib.hrl10
-rw-r--r--lib/ssh/test/ssh_to_openssh_SUITE.erl29
-rw-r--r--lib/ssh/test/ssh_upgrade_SUITE.erl23
-rw-r--r--lib/ssh/vsn.mk2
-rw-r--r--lib/ssl/doc/src/notes.xml177
-rw-r--r--lib/ssl/doc/src/ssl.xml133
-rw-r--r--lib/ssl/doc/src/ssl_app.xml47
-rw-r--r--lib/ssl/doc/src/ssl_crl_cache_api.xml15
-rw-r--r--lib/ssl/doc/src/ssl_distribution.xml16
-rw-r--r--lib/ssl/src/Makefile1
-rw-r--r--lib/ssl/src/dtls_connection.erl535
-rw-r--r--lib/ssl/src/dtls_connection.hrl1
-rw-r--r--lib/ssl/src/dtls_handshake.erl228
-rw-r--r--lib/ssl/src/dtls_record.erl322
-rw-r--r--lib/ssl/src/inet_tls_dist.erl3
-rw-r--r--lib/ssl/src/ssl.app.src3
-rw-r--r--lib/ssl/src/ssl.appup.src17
-rw-r--r--lib/ssl/src/ssl.erl119
-rw-r--r--lib/ssl/src/ssl_alert.erl18
-rw-r--r--lib/ssl/src/ssl_alert.hrl4
-rw-r--r--lib/ssl/src/ssl_certificate.erl34
-rw-r--r--lib/ssl/src/ssl_cipher.erl8
-rw-r--r--lib/ssl/src/ssl_connection.erl779
-rw-r--r--lib/ssl/src/ssl_connection.hrl9
-rw-r--r--lib/ssl/src/ssl_crl.erl38
-rw-r--r--lib/ssl/src/ssl_crl_cache.erl5
-rw-r--r--lib/ssl/src/ssl_crl_cache_api.erl7
-rw-r--r--lib/ssl/src/ssl_crl_hash_dir.erl106
-rw-r--r--lib/ssl/src/ssl_handshake.erl410
-rw-r--r--lib/ssl/src/ssl_handshake.hrl3
-rw-r--r--lib/ssl/src/ssl_internal.hrl6
-rw-r--r--lib/ssl/src/ssl_manager.erl54
-rw-r--r--lib/ssl/src/ssl_pkix_db.erl67
-rw-r--r--lib/ssl/src/ssl_record.erl465
-rw-r--r--lib/ssl/src/ssl_record.hrl38
-rw-r--r--lib/ssl/src/ssl_socket.erl7
-rw-r--r--lib/ssl/src/ssl_sup.erl11
-rw-r--r--lib/ssl/src/ssl_tls_dist_proxy.erl33
-rw-r--r--lib/ssl/src/tls_connection.erl646
-rw-r--r--lib/ssl/src/tls_handshake.erl112
-rw-r--r--lib/ssl/src/tls_record.erl131
-rw-r--r--lib/ssl/test/make_certs.erl15
-rw-r--r--lib/ssl/test/ssl.spec3
-rw-r--r--lib/ssl/test/ssl_ECC_SUITE.erl100
-rw-r--r--lib/ssl/test/ssl_alpn_handshake_SUITE.erl30
-rw-r--r--lib/ssl/test/ssl_basic_SUITE.erl939
-rw-r--r--lib/ssl/test/ssl_bench_SUITE.erl102
-rw-r--r--lib/ssl/test/ssl_certificate_verify_SUITE.erl247
-rw-r--r--lib/ssl/test/ssl_crl_SUITE.erl247
-rw-r--r--lib/ssl/test/ssl_dist_SUITE.erl443
-rw-r--r--lib/ssl/test/ssl_handshake_SUITE.erl11
-rw-r--r--lib/ssl/test/ssl_npn_handshake_SUITE.erl27
-rw-r--r--lib/ssl/test/ssl_npn_hello_SUITE.erl48
-rw-r--r--lib/ssl/test/ssl_packet_SUITE.erl190
-rw-r--r--lib/ssl/test/ssl_payload_SUITE.erl88
-rw-r--r--lib/ssl/test/ssl_pem_cache_SUITE.erl13
-rw-r--r--lib/ssl/test/ssl_session_cache_SUITE.erl20
-rw-r--r--lib/ssl/test/ssl_sni_SUITE.erl22
-rw-r--r--lib/ssl/test/ssl_test_lib.erl141
-rw-r--r--lib/ssl/test/ssl_to_openssl_SUITE.erl270
-rw-r--r--lib/ssl/test/ssl_upgrade_SUITE.erl34
-rw-r--r--lib/ssl/vsn.mk2
-rw-r--r--lib/stdlib/doc/src/array.xml1003
-rw-r--r--lib/stdlib/doc/src/assert_hrl.xml169
-rw-r--r--lib/stdlib/doc/src/base64.xml49
-rw-r--r--lib/stdlib/doc/src/beam_lib.xml528
-rw-r--r--lib/stdlib/doc/src/binary.xml564
-rw-r--r--lib/stdlib/doc/src/book.xml3
-rw-r--r--lib/stdlib/doc/src/c.xml168
-rw-r--r--lib/stdlib/doc/src/calendar.xml248
-rw-r--r--lib/stdlib/doc/src/dets.xml1067
-rw-r--r--lib/stdlib/doc/src/dict.xml208
-rw-r--r--lib/stdlib/doc/src/digraph.xml538
-rw-r--r--lib/stdlib/doc/src/digraph_utils.xml459
-rw-r--r--lib/stdlib/doc/src/epp.xml231
-rw-r--r--lib/stdlib/doc/src/erl_anno.xml189
-rw-r--r--lib/stdlib/doc/src/erl_eval.xml245
-rw-r--r--lib/stdlib/doc/src/erl_expand_records.xml20
-rw-r--r--lib/stdlib/doc/src/erl_id_trans.xml34
-rw-r--r--lib/stdlib/doc/src/erl_internal.xml93
-rw-r--r--lib/stdlib/doc/src/erl_lint.xml147
-rw-r--r--lib/stdlib/doc/src/erl_parse.xml393
-rw-r--r--lib/stdlib/doc/src/erl_pp.xml129
-rw-r--r--lib/stdlib/doc/src/erl_scan.xml337
-rw-r--r--lib/stdlib/doc/src/erl_tar.xml608
-rw-r--r--lib/stdlib/doc/src/ets.xml2281
-rw-r--r--lib/stdlib/doc/src/file_sorter.xml350
-rw-r--r--lib/stdlib/doc/src/filelib.xml184
-rw-r--r--lib/stdlib/doc/src/filename.xml278
-rw-r--r--lib/stdlib/doc/src/gb_sets.xml325
-rw-r--r--lib/stdlib/doc/src/gb_trees.xml245
-rw-r--r--lib/stdlib/doc/src/gen_event.xml887
-rw-r--r--lib/stdlib/doc/src/gen_fsm.xml1262
-rw-r--r--lib/stdlib/doc/src/gen_server.xml1063
-rw-r--r--lib/stdlib/doc/src/gen_statem.xml253
-rw-r--r--lib/stdlib/doc/src/introduction.xml72
-rw-r--r--lib/stdlib/doc/src/io.xml1138
-rw-r--r--lib/stdlib/doc/src/io_lib.xml400
-rw-r--r--lib/stdlib/doc/src/io_protocol.xml1172
-rw-r--r--lib/stdlib/doc/src/lib.xml57
-rw-r--r--lib/stdlib/doc/src/lists.xml734
-rw-r--r--lib/stdlib/doc/src/log_mf_h.xml46
-rw-r--r--lib/stdlib/doc/src/maps.xml667
-rw-r--r--lib/stdlib/doc/src/math.xml76
-rw-r--r--lib/stdlib/doc/src/ms_transform.xml958
-rw-r--r--lib/stdlib/doc/src/notes.xml74
-rw-r--r--lib/stdlib/doc/src/orddict.xml220
-rw-r--r--lib/stdlib/doc/src/ordsets.xml161
-rw-r--r--lib/stdlib/doc/src/part.xml7
-rw-r--r--lib/stdlib/doc/src/pool.xml110
-rw-r--r--lib/stdlib/doc/src/proc_lib.xml413
-rw-r--r--lib/stdlib/doc/src/proplists.xml280
-rw-r--r--lib/stdlib/doc/src/qlc.xml1428
-rw-r--r--lib/stdlib/doc/src/queue.xml352
-rw-r--r--lib/stdlib/doc/src/rand.xml290
-rw-r--r--lib/stdlib/doc/src/random.xml134
-rw-r--r--lib/stdlib/doc/src/re.xml7343
-rw-r--r--lib/stdlib/doc/src/ref_man.xml3
-rw-r--r--lib/stdlib/doc/src/sets.xml161
-rw-r--r--lib/stdlib/doc/src/shell.xml969
-rw-r--r--lib/stdlib/doc/src/shell_default.xml38
-rw-r--r--lib/stdlib/doc/src/slave.xml202
-rw-r--r--lib/stdlib/doc/src/sofs.xml1348
-rw-r--r--lib/stdlib/doc/src/stdlib_app.xml45
-rw-r--r--lib/stdlib/doc/src/string.xml416
-rw-r--r--lib/stdlib/doc/src/supervisor.xml780
-rw-r--r--lib/stdlib/doc/src/supervisor_bridge.xml164
-rw-r--r--lib/stdlib/doc/src/sys.xml831
-rw-r--r--lib/stdlib/doc/src/timer.xml380
-rw-r--r--lib/stdlib/doc/src/unicode.xml428
-rw-r--r--lib/stdlib/doc/src/unicode_usage.xml2420
-rw-r--r--lib/stdlib/doc/src/win32reg.xml193
-rw-r--r--lib/stdlib/doc/src/zip.xml683
-rw-r--r--lib/stdlib/src/beam_lib.erl4
-rw-r--r--lib/stdlib/src/epp.erl46
-rw-r--r--lib/stdlib/src/erl_compile.erl1
-rw-r--r--lib/stdlib/src/erl_expand_records.erl5
-rw-r--r--lib/stdlib/src/erl_lint.erl8
-rw-r--r--lib/stdlib/src/erl_parse.yrl39
-rw-r--r--lib/stdlib/src/erl_pp.erl74
-rw-r--r--lib/stdlib/src/escript.erl1
-rw-r--r--lib/stdlib/src/ets.erl8
-rw-r--r--lib/stdlib/src/gen_statem.erl261
-rw-r--r--lib/stdlib/src/lib.erl2
-rw-r--r--lib/stdlib/src/ms_transform.erl7
-rw-r--r--lib/stdlib/src/otp_internal.erl4
-rw-r--r--lib/stdlib/src/proc_lib.erl14
-rw-r--r--lib/stdlib/src/proplists.erl5
-rw-r--r--lib/stdlib/src/qlc.erl7
-rw-r--r--lib/stdlib/src/qlc_pt.erl18
-rw-r--r--lib/stdlib/src/queue.erl6
-rw-r--r--lib/stdlib/src/shell.erl4
-rw-r--r--lib/stdlib/src/sofs.erl3
-rw-r--r--lib/stdlib/src/stdlib.app.src2
-rw-r--r--lib/stdlib/src/supervisor.erl33
-rw-r--r--lib/stdlib/src/zip.erl82
-rw-r--r--lib/stdlib/test/binary_module_SUITE.erl29
-rw-r--r--lib/stdlib/test/erl_lint_SUITE.erl6
-rw-r--r--lib/stdlib/test/erl_pp_SUITE.erl29
-rw-r--r--lib/stdlib/test/ets_SUITE.erl45
-rw-r--r--lib/stdlib/test/gen_server_SUITE.erl4
-rw-r--r--lib/stdlib/test/gen_statem_SUITE.erl121
-rw-r--r--lib/stdlib/test/id_transform_SUITE.erl9
-rw-r--r--lib/stdlib/test/io_SUITE.erl44
-rw-r--r--lib/stdlib/test/io_proto_SUITE.erl3
-rw-r--r--lib/stdlib/test/rand_SUITE.erl28
-rw-r--r--lib/stdlib/test/select_SUITE.erl30
-rw-r--r--lib/stdlib/test/shell_SUITE.erl17
-rw-r--r--lib/stdlib/test/slave_SUITE.erl1
-rw-r--r--lib/stdlib/test/supervisor_SUITE.erl12
-rw-r--r--lib/stdlib/test/unicode_SUITE.erl24
-rw-r--r--lib/stdlib/test/zip_SUITE.erl50
-rw-r--r--lib/stdlib/test/zip_SUITE_data/exploit.zipbin0 -> 797 bytes
-rw-r--r--lib/stdlib/vsn.mk2
-rw-r--r--lib/syntax_tools/doc/specs/.gitignore1
-rw-r--r--lib/syntax_tools/doc/src/Makefile8
-rw-r--r--lib/syntax_tools/doc/src/notes.xml4
-rw-r--r--lib/syntax_tools/doc/src/specs.xml14
-rw-r--r--lib/syntax_tools/src/Makefile2
-rw-r--r--lib/syntax_tools/src/erl_comment_scan.erl10
-rw-r--r--lib/syntax_tools/src/erl_prettypr.erl60
-rw-r--r--lib/syntax_tools/src/erl_recomment.erl12
-rw-r--r--lib/syntax_tools/src/erl_syntax.erl9
-rw-r--r--lib/syntax_tools/src/erl_syntax_lib.erl4
-rw-r--r--lib/syntax_tools/src/erl_tidy.erl13
-rw-r--r--lib/syntax_tools/src/igor.erl6
-rw-r--r--lib/syntax_tools/src/merl_tests.erl15
-rw-r--r--lib/syntax_tools/src/merl_transform.erl13
-rw-r--r--lib/syntax_tools/test/merl_SUITE.erl21
-rw-r--r--lib/syntax_tools/test/syntax_tools_SUITE.erl10
-rw-r--r--lib/syntax_tools/test/syntax_tools_SUITE_data/erl_tidy_tilde.erl13
-rw-r--r--lib/syntax_tools/test/syntax_tools_SUITE_data/type_specs.erl9
-rw-r--r--lib/tools/doc/src/erlang_mode.xml9
-rw-r--r--lib/tools/doc/src/notes.xml34
-rw-r--r--lib/tools/doc/src/xref_chapter.xml6
-rw-r--r--lib/tools/emacs/erlang-skels.el153
-rw-r--r--lib/tools/emacs/erlang-test.el184
-rw-r--r--lib/tools/emacs/erlang.el547
-rw-r--r--lib/tools/emacs/test.erl.indented13
-rw-r--r--lib/tools/emacs/test.erl.orig13
-rw-r--r--lib/tools/src/cover.erl155
-rw-r--r--lib/tools/src/eprof.erl16
-rw-r--r--lib/tools/src/fprof.erl35
-rw-r--r--lib/tools/src/lcnt.erl107
-rw-r--r--lib/tools/src/make.erl2
-rw-r--r--lib/tools/src/tags.erl4
-rw-r--r--lib/tools/src/tools.app.src2
-rw-r--r--lib/tools/src/xref_base.erl217
-rw-r--r--lib/tools/src/xref_utils.erl8
-rw-r--r--lib/tools/test/cover_SUITE.erl33
-rw-r--r--lib/tools/test/cover_SUITE_data/otp_6115/f1.erl15
-rw-r--r--lib/tools/test/cover_SUITE_data/otp_6115/f2.erl14
-rw-r--r--lib/tools/test/make_SUITE_data/test1.erl2
-rw-r--r--lib/tools/test/xref_SUITE.erl17
-rw-r--r--lib/tools/vsn.mk2
-rw-r--r--lib/wx/api_gen/gl_gen.erl14
-rw-r--r--lib/wx/api_gen/gl_gen_erl.erl2
-rw-r--r--lib/wx/api_gen/wx_extra/wxEvtHandler.erl10
-rw-r--r--lib/wx/api_gen/wx_extra/wxListCtrl.erl62
-rw-r--r--lib/wx/api_gen/wx_extra/wxXmlResource.erl6
-rw-r--r--lib/wx/api_gen/wx_gen_cpp.erl40
-rw-r--r--lib/wx/api_gen/wx_gen_erl.erl10
-rw-r--r--lib/wx/c_src/gen/wxe_funcs.cpp81
-rw-r--r--lib/wx/c_src/wxe_helpers.cpp8
-rw-r--r--lib/wx/c_src/wxe_impl.cpp17
-rw-r--r--lib/wx/c_src/wxe_main.cpp6
-rw-r--r--lib/wx/c_src/wxe_memory.h5
-rw-r--r--lib/wx/doc/specs/.gitignore1
-rw-r--r--lib/wx/doc/src/Makefile6
-rw-r--r--lib/wx/doc/src/specs.xml232
-rw-r--r--lib/wx/examples/demo/ex_graphicsContext.erl2
-rw-r--r--lib/wx/include/gl.hrl4
-rw-r--r--lib/wx/include/wx.hrl436
-rw-r--r--lib/wx/src/gen/gl.erl1548
-rw-r--r--lib/wx/src/gen/glu.erl28
-rw-r--r--lib/wx/src/gen/wxAcceleratorEntry.erl16
-rw-r--r--lib/wx/src/gen/wxAcceleratorTable.erl4
-rw-r--r--lib/wx/src/gen/wxArtProvider.erl8
-rw-r--r--lib/wx/src/gen/wxAuiDockArt.erl8
-rw-r--r--lib/wx/src/gen/wxAuiManager.erl34
-rw-r--r--lib/wx/src/gen/wxAuiManagerEvent.erl18
-rw-r--r--lib/wx/src/gen/wxAuiNotebook.erl32
-rw-r--r--lib/wx/src/gen/wxAuiNotebookEvent.erl6
-rw-r--r--lib/wx/src/gen/wxAuiPaneInfo.erl42
-rw-r--r--lib/wx/src/gen/wxAuiSimpleTabArt.erl4
-rw-r--r--lib/wx/src/gen/wxAuiTabArt.erl14
-rw-r--r--lib/wx/src/gen/wxBitmap.erl32
-rw-r--r--lib/wx/src/gen/wxBitmapButton.erl26
-rw-r--r--lib/wx/src/gen/wxBitmapDataObject.erl6
-rw-r--r--lib/wx/src/gen/wxBoxSizer.erl2
-rw-r--r--lib/wx/src/gen/wxBrush.erl12
-rw-r--r--lib/wx/src/gen/wxBufferedDC.erl32
-rw-r--r--lib/wx/src/gen/wxBufferedPaintDC.erl8
-rw-r--r--lib/wx/src/gen/wxButton.erl26
-rw-r--r--lib/wx/src/gen/wxCalendarCtrl.erl48
-rw-r--r--lib/wx/src/gen/wxCalendarDateAttr.erl32
-rw-r--r--lib/wx/src/gen/wxCaret.erl20
-rw-r--r--lib/wx/src/gen/wxCheckBox.erl22
-rw-r--r--lib/wx/src/gen/wxCheckListBox.erl18
-rw-r--r--lib/wx/src/gen/wxChoice.erl24
-rw-r--r--lib/wx/src/gen/wxChoicebook.erl34
-rw-r--r--lib/wx/src/gen/wxClientDC.erl2
-rw-r--r--lib/wx/src/gen/wxClipboard.erl12
-rw-r--r--lib/wx/src/gen/wxCloseEvent.erl10
-rw-r--r--lib/wx/src/gen/wxColourData.erl8
-rw-r--r--lib/wx/src/gen/wxColourDialog.erl6
-rw-r--r--lib/wx/src/gen/wxColourPickerCtrl.erl26
-rw-r--r--lib/wx/src/gen/wxComboBox.erl42
-rw-r--r--lib/wx/src/gen/wxCommandEvent.erl4
-rw-r--r--lib/wx/src/gen/wxContextMenuEvent.erl2
-rw-r--r--lib/wx/src/gen/wxControl.erl2
-rw-r--r--lib/wx/src/gen/wxControlWithItems.erl16
-rw-r--r--lib/wx/src/gen/wxCursor.erl6
-rw-r--r--lib/wx/src/gen/wxDC.erl138
-rw-r--r--lib/wx/src/gen/wxDCOverlay.erl6
-rw-r--r--lib/wx/src/gen/wxDatePickerCtrl.erl16
-rw-r--r--lib/wx/src/gen/wxDialog.erl22
-rw-r--r--lib/wx/src/gen/wxDirDialog.erl16
-rw-r--r--lib/wx/src/gen/wxDirPickerCtrl.erl28
-rw-r--r--lib/wx/src/gen/wxEvent.erl8
-rw-r--r--lib/wx/src/gen/wxEvtHandler.erl10
-rw-r--r--lib/wx/src/gen/wxFileDataObject.erl4
-rw-r--r--lib/wx/src/gen/wxFileDialog.erl28
-rw-r--r--lib/wx/src/gen/wxFilePickerCtrl.erl32
-rw-r--r--lib/wx/src/gen/wxFindReplaceData.erl8
-rw-r--r--lib/wx/src/gen/wxFindReplaceDialog.erl6
-rw-r--r--lib/wx/src/gen/wxFlexGridSizer.erl26
-rw-r--r--lib/wx/src/gen/wxFont.erl20
-rw-r--r--lib/wx/src/gen/wxFontData.erl16
-rw-r--r--lib/wx/src/gen/wxFontDialog.erl2
-rw-r--r--lib/wx/src/gen/wxFontPickerCtrl.erl26
-rw-r--r--lib/wx/src/gen/wxFrame.erl42
-rw-r--r--lib/wx/src/gen/wxGLCanvas.erl48
-rw-r--r--lib/wx/src/gen/wxGauge.erl24
-rw-r--r--lib/wx/src/gen/wxGenericDirCtrl.erl44
-rw-r--r--lib/wx/src/gen/wxGraphicsContext.erl84
-rw-r--r--lib/wx/src/gen/wxGraphicsMatrix.erl26
-rw-r--r--lib/wx/src/gen/wxGraphicsObject.erl2
-rw-r--r--lib/wx/src/gen/wxGraphicsPath.erl40
-rw-r--r--lib/wx/src/gen/wxGraphicsRenderer.erl14
-rw-r--r--lib/wx/src/gen/wxGrid.erl308
-rw-r--r--lib/wx/src/gen/wxGridBagSizer.erl70
-rw-r--r--lib/wx/src/gen/wxGridCellAttr.erl20
-rw-r--r--lib/wx/src/gen/wxGridCellBoolEditor.erl10
-rw-r--r--lib/wx/src/gen/wxGridCellBoolRenderer.erl2
-rw-r--r--lib/wx/src/gen/wxGridCellChoiceEditor.erl6
-rw-r--r--lib/wx/src/gen/wxGridCellEditor.erl22
-rw-r--r--lib/wx/src/gen/wxGridCellFloatEditor.erl8
-rw-r--r--lib/wx/src/gen/wxGridCellFloatRenderer.erl12
-rw-r--r--lib/wx/src/gen/wxGridCellNumberEditor.erl8
-rw-r--r--lib/wx/src/gen/wxGridCellNumberRenderer.erl2
-rw-r--r--lib/wx/src/gen/wxGridCellRenderer.erl2
-rw-r--r--lib/wx/src/gen/wxGridCellStringRenderer.erl2
-rw-r--r--lib/wx/src/gen/wxGridCellTextEditor.erl4
-rw-r--r--lib/wx/src/gen/wxGridSizer.erl14
-rw-r--r--lib/wx/src/gen/wxHelpEvent.erl4
-rw-r--r--lib/wx/src/gen/wxHtmlEasyPrinting.erl30
-rw-r--r--lib/wx/src/gen/wxHtmlWindow.erl30
-rw-r--r--lib/wx/src/gen/wxIcon.erl10
-rw-r--r--lib/wx/src/gen/wxIconBundle.erl8
-rw-r--r--lib/wx/src/gen/wxIdleEvent.erl8
-rw-r--r--lib/wx/src/gen/wxImage.erl132
-rw-r--r--lib/wx/src/gen/wxImageList.erl14
-rw-r--r--lib/wx/src/gen/wxJoystickEvent.erl6
-rw-r--r--lib/wx/src/gen/wxLayoutAlgorithm.erl8
-rw-r--r--lib/wx/src/gen/wxListBox.erl28
-rw-r--r--lib/wx/src/gen/wxListCtrl.erl112
-rw-r--r--lib/wx/src/gen/wxListItem.erl28
-rw-r--r--lib/wx/src/gen/wxListItemAttr.erl8
-rw-r--r--lib/wx/src/gen/wxListView.erl12
-rw-r--r--lib/wx/src/gen/wxListbook.erl34
-rw-r--r--lib/wx/src/gen/wxLocale.erl16
-rw-r--r--lib/wx/src/gen/wxLogNull.erl2
-rw-r--r--lib/wx/src/gen/wxMDIChildFrame.erl24
-rw-r--r--lib/wx/src/gen/wxMDIClientWindow.erl6
-rw-r--r--lib/wx/src/gen/wxMDIParentFrame.erl28
-rw-r--r--lib/wx/src/gen/wxMask.erl2
-rw-r--r--lib/wx/src/gen/wxMemoryDC.erl6
-rw-r--r--lib/wx/src/gen/wxMenu.erl68
-rw-r--r--lib/wx/src/gen/wxMenuBar.erl18
-rw-r--r--lib/wx/src/gen/wxMenuItem.erl36
-rw-r--r--lib/wx/src/gen/wxMessageDialog.erl8
-rw-r--r--lib/wx/src/gen/wxMiniFrame.erl14
-rw-r--r--lib/wx/src/gen/wxMirrorDC.erl2
-rw-r--r--lib/wx/src/gen/wxMouseEvent.erl6
-rw-r--r--lib/wx/src/gen/wxMultiChoiceDialog.erl8
-rw-r--r--lib/wx/src/gen/wxNavigationKeyEvent.erl8
-rw-r--r--lib/wx/src/gen/wxNotebook.erl36
-rw-r--r--lib/wx/src/gen/wxNotebookEvent.erl4
-rw-r--r--lib/wx/src/gen/wxNotifyEvent.erl4
-rw-r--r--lib/wx/src/gen/wxOverlay.erl6
-rw-r--r--lib/wx/src/gen/wxPageSetupDialog.erl4
-rw-r--r--lib/wx/src/gen/wxPageSetupDialogData.erl34
-rw-r--r--lib/wx/src/gen/wxPaintDC.erl2
-rw-r--r--lib/wx/src/gen/wxPalette.erl2
-rw-r--r--lib/wx/src/gen/wxPaletteChangedEvent.erl2
-rw-r--r--lib/wx/src/gen/wxPanel.erl16
-rw-r--r--lib/wx/src/gen/wxPasswordEntryDialog.erl10
-rw-r--r--lib/wx/src/gen/wxPen.erl18
-rw-r--r--lib/wx/src/gen/wxPickerBase.erl18
-rw-r--r--lib/wx/src/gen/wxPopupTransientWindow.erl12
-rw-r--r--lib/wx/src/gen/wxPopupWindow.erl8
-rw-r--r--lib/wx/src/gen/wxPostScriptDC.erl4
-rw-r--r--lib/wx/src/gen/wxPreviewControlBar.erl12
-rw-r--r--lib/wx/src/gen/wxPreviewFrame.erl18
-rw-r--r--lib/wx/src/gen/wxPrintData.erl20
-rw-r--r--lib/wx/src/gen/wxPrintDialog.erl4
-rw-r--r--lib/wx/src/gen/wxPrintDialogData.erl28
-rw-r--r--lib/wx/src/gen/wxPrintPreview.erl14
-rw-r--r--lib/wx/src/gen/wxPrinter.erl8
-rw-r--r--lib/wx/src/gen/wxPrintout.erl20
-rw-r--r--lib/wx/src/gen/wxProgressDialog.erl14
-rw-r--r--lib/wx/src/gen/wxQueryNewPaletteEvent.erl2
-rw-r--r--lib/wx/src/gen/wxRadioBox.erl32
-rw-r--r--lib/wx/src/gen/wxRadioButton.erl20
-rw-r--r--lib/wx/src/gen/wxRegion.erl6
-rw-r--r--lib/wx/src/gen/wxSashLayoutWindow.erl24
-rw-r--r--lib/wx/src/gen/wxSashWindow.erl20
-rw-r--r--lib/wx/src/gen/wxScreenDC.erl2
-rw-r--r--lib/wx/src/gen/wxScrollBar.erl26
-rw-r--r--lib/wx/src/gen/wxScrolledWindow.erl32
-rw-r--r--lib/wx/src/gen/wxSetCursorEvent.erl2
-rw-r--r--lib/wx/src/gen/wxShowEvent.erl2
-rw-r--r--lib/wx/src/gen/wxSingleChoiceDialog.erl8
-rw-r--r--lib/wx/src/gen/wxSizer.erl120
-rw-r--r--lib/wx/src/gen/wxSizerFlags.erl6
-rw-r--r--lib/wx/src/gen/wxSizerItem.erl38
-rw-r--r--lib/wx/src/gen/wxSlider.erl28
-rw-r--r--lib/wx/src/gen/wxSpinButton.erl22
-rw-r--r--lib/wx/src/gen/wxSpinCtrl.erl44
-rw-r--r--lib/wx/src/gen/wxSpinEvent.erl2
-rw-r--r--lib/wx/src/gen/wxSplashScreen.erl8
-rw-r--r--lib/wx/src/gen/wxSplitterEvent.erl2
-rw-r--r--lib/wx/src/gen/wxSplitterWindow.erl42
-rw-r--r--lib/wx/src/gen/wxStaticBitmap.erl16
-rw-r--r--lib/wx/src/gen/wxStaticBox.erl14
-rw-r--r--lib/wx/src/gen/wxStaticBoxSizer.erl4
-rw-r--r--lib/wx/src/gen/wxStaticLine.erl18
-rw-r--r--lib/wx/src/gen/wxStaticText.erl18
-rw-r--r--lib/wx/src/gen/wxStatusBar.erl42
-rw-r--r--lib/wx/src/gen/wxStdDialogButtonSizer.erl12
-rw-r--r--lib/wx/src/gen/wxStyledTextCtrl.erl598
-rw-r--r--lib/wx/src/gen/wxSystemOptions.erl6
-rw-r--r--lib/wx/src/gen/wxSystemSettings.erl2
-rw-r--r--lib/wx/src/gen/wxTaskBarIcon.erl4
-rw-r--r--lib/wx/src/gen/wxTextAttr.erl32
-rw-r--r--lib/wx/src/gen/wxTextCtrl.erl68
-rw-r--r--lib/wx/src/gen/wxTextDataObject.erl6
-rw-r--r--lib/wx/src/gen/wxTextEntryDialog.erl12
-rw-r--r--lib/wx/src/gen/wxToggleButton.erl20
-rw-r--r--lib/wx/src/gen/wxToolBar.erl118
-rw-r--r--lib/wx/src/gen/wxToolTip.erl8
-rw-r--r--lib/wx/src/gen/wxToolbook.erl34
-rw-r--r--lib/wx/src/gen/wxTopLevelWindow.erl38
-rw-r--r--lib/wx/src/gen/wxTreeCtrl.erl132
-rw-r--r--lib/wx/src/gen/wxTreeEvent.erl2
-rw-r--r--lib/wx/src/gen/wxTreebook.erl40
-rw-r--r--lib/wx/src/gen/wxUpdateUIEvent.erl14
-rw-r--r--lib/wx/src/gen/wxWindow.erl290
-rw-r--r--lib/wx/src/gen/wxWindowDC.erl2
-rw-r--r--lib/wx/src/gen/wxXmlResource.erl26
-rw-r--r--lib/wx/src/gen/wx_misc.erl18
-rw-r--r--lib/wx/src/wx.erl20
-rw-r--r--lib/wx/src/wx_object.erl124
-rw-r--r--lib/wx/src/wxe_master.erl4
-rw-r--r--lib/wx/src/wxe_util.erl8
-rw-r--r--lib/wx/test/wx_basic_SUITE.erl4
-rw-r--r--lib/wx/test/wx_class_SUITE.erl4
-rw-r--r--lib/xmerl/src/xmerl_eventp.erl88
-rw-r--r--lib/xmerl/src/xmerl_sax_parser.erl12
-rw-r--r--lib/xmerl/src/xmerl_sax_parser_base.erlsrc26
-rw-r--r--lib/xmerl/src/xmerl_scan.erl7
-rw-r--r--lib/xmerl/src/xmerl_xpath.erl30
-rw-r--r--lib/xmerl/src/xmerl_xpath_scan.erl7
-rw-r--r--lib/xmerl/src/xmerl_xs.erl7
-rw-r--r--lib/xmerl/src/xmerl_xsd.erl160
-rw-r--r--lib/xmerl/src/xmerl_xsd_type.erl14
-rw-r--r--lib/xmerl/test/xmerl_SUITE.erl592
-rw-r--r--lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_abbrev.erl403
-rw-r--r--lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_lib.erl212
-rw-r--r--lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_text.erl8
-rw-r--r--lib/xmerl/test/xmerl_app_test.erl29
-rw-r--r--lib/xmerl/test/xmerl_appup_test.erl28
-rw-r--r--lib/xmerl/test/xmerl_sax_SUITE.erl81
-rw-r--r--lib/xmerl/test/xmerl_sax_std_SUITE.erl16382
-rw-r--r--lib/xmerl/test/xmerl_std_SUITE.erl12767
-rw-r--r--lib/xmerl/test/xmerl_test_lib.erl2
-rw-r--r--lib/xmerl/test/xmerl_xsd_MS2002-01-16_SUITE.erl14488
-rw-r--r--lib/xmerl/test/xmerl_xsd_NIST2002-01-16_SUITE.erl13252
-rw-r--r--lib/xmerl/test/xmerl_xsd_SUITE.erl1085
-rw-r--r--lib/xmerl/test/xmerl_xsd_Sun2002-01-16_SUITE.erl424
-rw-r--r--lib/xmerl/test/xmerl_xsd_lib.erl243
-rw-r--r--lib/xmerl/vsn.mk2
-rwxr-xr-x[-rw-r--r--]make/emd2exml.in39
-rwxr-xr-xmake/make_emakefile.in (renamed from make/make_emakefile)2
-rw-r--r--make/otp.mk.in5
-rw-r--r--make/otp_release_targets.mk2
-rwxr-xr-xotp_build3
-rw-r--r--otp_versions.table12
-rw-r--r--system/README78
-rw-r--r--system/doc/design_principles/statem.xml90
-rw-r--r--system/doc/design_principles/sup_princ.xml5
-rw-r--r--system/doc/efficiency_guide/advanced.xml22
-rw-r--r--system/doc/efficiency_guide/profiling.xml8
-rw-r--r--system/doc/embedded/embedded_nt.xml4
-rw-r--r--system/doc/embedded/embedded_solaris.xml14
-rw-r--r--system/doc/embedded/starting.xml8
-rw-r--r--system/doc/oam/oam_intro.xml10
-rw-r--r--system/doc/programming_examples/records.xml2
-rw-r--r--system/doc/reference_manual/expressions.xml11
-rw-r--r--system/doc/reference_manual/typespec.xml20
-rw-r--r--system/doc/system_principles/create_target.xmlsrc12
-rw-r--r--system/doc/system_principles/versions.xml4
-rw-r--r--system/doc/top/Makefile8
-rw-r--r--system/doc/top/src/erl_html_tools.erl28
-rw-r--r--system/doc/top/templates/index.html.src28
1434 files changed, 108197 insertions, 94666 deletions
diff --git a/.gitignore b/.gitignore
index 3dcfa79f4d..3fc95170aa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,7 @@
# emacs
*~
lib/tools/emacs/*.elc
+TAGS
# vim
.*.sw[a-z]
@@ -360,15 +361,8 @@ JAVADOC-GENERATED
# system
-/system/doc/pdf/*.pdf
-/system/doc/pdf/*.fo
-/system/doc/html/*.html
-/system/doc/html/*.eix
-/system/doc/html/js
-/system/doc/html/*/*.html
-/system/doc/html/*/*.gif
-/system/doc/html/*/*.jpg
-/system/doc/html/*/*.eix
+/system/doc/pdf
+/system/doc/html
/system/doc/top/PR.template
/system/doc/top/erlresolvelinks.js
/system/doc/programming_examples/funs.xml
diff --git a/HOWTO/INSTALL-CROSS.md b/HOWTO/INSTALL-CROSS.md
index 0c984a825d..29614966b8 100644
--- a/HOWTO/INSTALL-CROSS.md
+++ b/HOWTO/INSTALL-CROSS.md
@@ -286,6 +286,7 @@ document for information on how to build the documentation.
Testing the cross compiled system
---------------------------------
+
Some of the tests that come with erlang use native code to test. This means
that when cross compiling erlang you also have to cross compile test suites
in order to run tests on the target host. To do this you first have to release
diff --git a/HOWTO/INSTALL-WIN32.md b/HOWTO/INSTALL-WIN32.md
index 067c939d7a..d7be255e9f 100644
--- a/HOWTO/INSTALL-WIN32.md
+++ b/HOWTO/INSTALL-WIN32.md
@@ -60,7 +60,8 @@ followed by some FAQ, and then we’ll go into more details of the setup.
Short Version
---------------------------
+-------------
+
In the following sections, we've described as much as we could about the
installation of the tools needed. Once the tools are installed, building
is quite easy. We have also tried to make these instructions understandable
diff --git a/HOWTO/INSTALL.md b/HOWTO/INSTALL.md
index 2ae1ed3c8d..551ecdd224 100644
--- a/HOWTO/INSTALL.md
+++ b/HOWTO/INSTALL.md
@@ -429,6 +429,10 @@ Some of the available `configure` options are:
and **not supported**. This functionality **will** be subject to backward
incompatible changes. Note that you should **not** enable the dirty scheduler
functionality on production systems. It is only provided for testing.
+ This switch also imply `--enable-new-purge-strategy` (see below).
+* `--enable-new-purge-strategy` - Enable the purge strategy that will be
+ introduced in ERTS version 9.0 (OTP 20). Note that this switch will be
+ removed in OTP 20.
If you or your system has special requirements please read the `Makefile` for
additional configuration information.
@@ -824,6 +828,7 @@ Known platform issues
Daily Build and Test
--------------------
+
At Ericsson we have a "Daily Build and Test" that runs on:
* Solaris 8, 9
diff --git a/HOWTO/MARKDOWN.md b/HOWTO/MARKDOWN.md
index 2df0460dab..e6773a0a8e 100644
--- a/HOWTO/MARKDOWN.md
+++ b/HOWTO/MARKDOWN.md
@@ -70,6 +70,9 @@ in the future.
* Lists aren't supported inside block quotes.
+* Nested block quotes can be generated, but current DTD does not
+ support it.
+
* Link and image definition names *are* case sensitive.
#### Additional Features ####
@@ -126,7 +129,7 @@ places. Appropriate attributes to the `X` tag will also be generated.
<icaption>...</icaption> </image>` sequence where the "title" will be
placed between `<icaption>` and `</icaption>`.
-* Block quotes generate `<blockquote>` tags.
+* Block quotes generate `<quote>` tags.
* If the first line of a top level block quote begins with a `> *NOTE*:`
character sequence, a `<note>` tag will be generated instead of a
@@ -152,7 +155,7 @@ places. Appropriate attributes to the `X` tag will also be generated.
* Emphasis (single `*` or `_`) will generate `<em>` tags.
-* Strong emphasis (double `*` or `_`) will generate `<b>` tags.
+* Strong emphasis (double `*` or `_`) will generate `<strong>` tags.
* The level 1 heading will cause the following to be generated:
@@ -180,11 +183,11 @@ places. Appropriate attributes to the `X` tag will also be generated.
contain information from a \%CopyrightBegin\%, \%CopyrightEnd\% block
if such exist (see below).
-* A level `X` heading where `1 < X <= 3` will cause the the following
+* A level `X` heading where `1 < X <= 6` will cause the the following
to be generated:
- <marker id="..."/>
<section>
+ <marker id="..."/>
<title>...</title>
...
</section>
@@ -206,11 +209,11 @@ places. Appropriate attributes to the `X` tag will also be generated.
other documents. That is, *be careful* when changing headings in an
existing document.
-* A level `X` heading where `3 < X` will cause the the following
+* A level `X` heading where `6 < X` will cause the the following
to be generated:
<marker id="..."/>
- <p><b>...</b></p>
+ <p><strong>...</strong></p>
...
Current DTD:s used don't support deeper levels of sections, and we
diff --git a/OTP_VERSION b/OTP_VERSION
index 6ea9a3bd47..02f94dcfc1 100644
--- a/OTP_VERSION
+++ b/OTP_VERSION
@@ -1 +1 @@
-19.0
+19.0.5
diff --git a/README.md b/README.md
index 9986d6bc18..127ac9cad7 100644
--- a/README.md
+++ b/README.md
@@ -36,29 +36,11 @@ Here are the [instructions for submitting patches] [2].
In short:
-* Go to the JIRA issue tracker at [bugs.erlang.org] [7] to see reported issues which you can contribute to. Search for issues with the status *Contribution Needed*.
+* Submit your patch by opening a new Pull Request.
-* We prefer to receive proposed updates via email on the
- [`erlang-patches`] [3] mailing list or through a pull request.
-
-* Pull requests will be handled once everyday and there will be
- essential testing before we will take a decision on the outcome
- of the request. If the essential testings fails, the pull request
- will be closed and you will have to fix the problem and submit another
- pull request when this is done.
-
-* We merge all proposed updates to the `pu` (*proposed updates*) branch,
- typically within one working day.
-
-* At least once a day, the contents of the `pu` branch will be built on
- several platforms (Linux, Solaris, Mac OS X, Windows, and so on) and
- automatic test suites will be run. We will email you if any problems are
- found.
-
-* If a proposed change builds and passes the tests, it will be reviewed
- by one or more members of the Erlang/OTP team at Ericsson. The reviewer
- may suggest improvements that are needed before the change can be accepted
- and merged.
+* Go to the JIRA issue tracker at [bugs.erlang.org] [7] to
+ see reported issues which you can contribute to.
+ Search for issues with the status *Contribution Needed*.
Bug Reports
diff --git a/bootstrap/bin/start.boot b/bootstrap/bin/start.boot
index cc0edd5427..4a1f656c3c 100644
--- a/bootstrap/bin/start.boot
+++ b/bootstrap/bin/start.boot
Binary files differ
diff --git a/bootstrap/bin/start_clean.boot b/bootstrap/bin/start_clean.boot
index cc0edd5427..4a1f656c3c 100644
--- a/bootstrap/bin/start_clean.boot
+++ b/bootstrap/bin/start_clean.boot
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_asm.beam b/bootstrap/lib/compiler/ebin/beam_asm.beam
index c8bc82022c..481d43c967 100644
--- a/bootstrap/lib/compiler/ebin/beam_asm.beam
+++ b/bootstrap/lib/compiler/ebin/beam_asm.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_block.beam b/bootstrap/lib/compiler/ebin/beam_block.beam
index cccf21d9ab..b6a4b6f10f 100644
--- a/bootstrap/lib/compiler/ebin/beam_block.beam
+++ b/bootstrap/lib/compiler/ebin/beam_block.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_bool.beam b/bootstrap/lib/compiler/ebin/beam_bool.beam
index a793db8bed..37f368190e 100644
--- a/bootstrap/lib/compiler/ebin/beam_bool.beam
+++ b/bootstrap/lib/compiler/ebin/beam_bool.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_bsm.beam b/bootstrap/lib/compiler/ebin/beam_bsm.beam
index 51abd68b00..48e8f80f79 100644
--- a/bootstrap/lib/compiler/ebin/beam_bsm.beam
+++ b/bootstrap/lib/compiler/ebin/beam_bsm.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_clean.beam b/bootstrap/lib/compiler/ebin/beam_clean.beam
index 0f24e040e3..ed0827953c 100644
--- a/bootstrap/lib/compiler/ebin/beam_clean.beam
+++ b/bootstrap/lib/compiler/ebin/beam_clean.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_dead.beam b/bootstrap/lib/compiler/ebin/beam_dead.beam
index 4fda5157fa..c473003687 100644
--- a/bootstrap/lib/compiler/ebin/beam_dead.beam
+++ b/bootstrap/lib/compiler/ebin/beam_dead.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_disasm.beam b/bootstrap/lib/compiler/ebin/beam_disasm.beam
index 477ab0a957..3b74bc6e3e 100644
--- a/bootstrap/lib/compiler/ebin/beam_disasm.beam
+++ b/bootstrap/lib/compiler/ebin/beam_disasm.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_except.beam b/bootstrap/lib/compiler/ebin/beam_except.beam
index e5d2c51c4d..03fc2edd02 100644
--- a/bootstrap/lib/compiler/ebin/beam_except.beam
+++ b/bootstrap/lib/compiler/ebin/beam_except.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_jump.beam b/bootstrap/lib/compiler/ebin/beam_jump.beam
index 7382cafb48..2d1961570f 100644
--- a/bootstrap/lib/compiler/ebin/beam_jump.beam
+++ b/bootstrap/lib/compiler/ebin/beam_jump.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_receive.beam b/bootstrap/lib/compiler/ebin/beam_receive.beam
index fef3fcc816..f864c15ae1 100644
--- a/bootstrap/lib/compiler/ebin/beam_receive.beam
+++ b/bootstrap/lib/compiler/ebin/beam_receive.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_reorder.beam b/bootstrap/lib/compiler/ebin/beam_reorder.beam
index 0dc44add6b..45d1dcfa2f 100644
--- a/bootstrap/lib/compiler/ebin/beam_reorder.beam
+++ b/bootstrap/lib/compiler/ebin/beam_reorder.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_split.beam b/bootstrap/lib/compiler/ebin/beam_split.beam
index 3a02e2b17c..4a63468419 100644
--- a/bootstrap/lib/compiler/ebin/beam_split.beam
+++ b/bootstrap/lib/compiler/ebin/beam_split.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_type.beam b/bootstrap/lib/compiler/ebin/beam_type.beam
index 8f89c771b7..1c61b33c25 100644
--- a/bootstrap/lib/compiler/ebin/beam_type.beam
+++ b/bootstrap/lib/compiler/ebin/beam_type.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_utils.beam b/bootstrap/lib/compiler/ebin/beam_utils.beam
index 661cd1c60d..25cd7ce430 100644
--- a/bootstrap/lib/compiler/ebin/beam_utils.beam
+++ b/bootstrap/lib/compiler/ebin/beam_utils.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_validator.beam b/bootstrap/lib/compiler/ebin/beam_validator.beam
index 187968450f..9d952f0a64 100644
--- a/bootstrap/lib/compiler/ebin/beam_validator.beam
+++ b/bootstrap/lib/compiler/ebin/beam_validator.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/cerl.beam b/bootstrap/lib/compiler/ebin/cerl.beam
index 82bd89c17a..eecdd4e2dd 100644
--- a/bootstrap/lib/compiler/ebin/cerl.beam
+++ b/bootstrap/lib/compiler/ebin/cerl.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/cerl_clauses.beam b/bootstrap/lib/compiler/ebin/cerl_clauses.beam
index 95dd3f3cbb..cc4e3a92a3 100644
--- a/bootstrap/lib/compiler/ebin/cerl_clauses.beam
+++ b/bootstrap/lib/compiler/ebin/cerl_clauses.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/cerl_inline.beam b/bootstrap/lib/compiler/ebin/cerl_inline.beam
index ce1f13db6a..dcfb32d866 100644
--- a/bootstrap/lib/compiler/ebin/cerl_inline.beam
+++ b/bootstrap/lib/compiler/ebin/cerl_inline.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/compile.beam b/bootstrap/lib/compiler/ebin/compile.beam
index b309544c39..044ed03d93 100644
--- a/bootstrap/lib/compiler/ebin/compile.beam
+++ b/bootstrap/lib/compiler/ebin/compile.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/compiler.app b/bootstrap/lib/compiler/ebin/compiler.app
index 53891c7260..ebd5205219 100644
--- a/bootstrap/lib/compiler/ebin/compiler.app
+++ b/bootstrap/lib/compiler/ebin/compiler.app
@@ -19,7 +19,7 @@
{application, compiler,
[{description, "ERTS CXC 138 10"},
- {vsn, "6.0.3"},
+ {vsn, "7.0.1"},
{modules, [
beam_a,
beam_asm,
diff --git a/bootstrap/lib/compiler/ebin/core_lint.beam b/bootstrap/lib/compiler/ebin/core_lint.beam
index 0e47e00b15..47f9f53546 100644
--- a/bootstrap/lib/compiler/ebin/core_lint.beam
+++ b/bootstrap/lib/compiler/ebin/core_lint.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/core_parse.beam b/bootstrap/lib/compiler/ebin/core_parse.beam
index baf2c9d70f..2599138a8c 100644
--- a/bootstrap/lib/compiler/ebin/core_parse.beam
+++ b/bootstrap/lib/compiler/ebin/core_parse.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/core_pp.beam b/bootstrap/lib/compiler/ebin/core_pp.beam
index 6047596cb6..e274211c6c 100644
--- a/bootstrap/lib/compiler/ebin/core_pp.beam
+++ b/bootstrap/lib/compiler/ebin/core_pp.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/core_scan.beam b/bootstrap/lib/compiler/ebin/core_scan.beam
index 5f7b22ba8b..3017a4e026 100644
--- a/bootstrap/lib/compiler/ebin/core_scan.beam
+++ b/bootstrap/lib/compiler/ebin/core_scan.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/rec_env.beam b/bootstrap/lib/compiler/ebin/rec_env.beam
index 9388b5d4e1..068108dab2 100644
--- a/bootstrap/lib/compiler/ebin/rec_env.beam
+++ b/bootstrap/lib/compiler/ebin/rec_env.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/sys_core_fold.beam b/bootstrap/lib/compiler/ebin/sys_core_fold.beam
index 088d69fa2a..75a6570461 100644
--- a/bootstrap/lib/compiler/ebin/sys_core_fold.beam
+++ b/bootstrap/lib/compiler/ebin/sys_core_fold.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/sys_pre_attributes.beam b/bootstrap/lib/compiler/ebin/sys_pre_attributes.beam
index 934a539ad9..58dff1b796 100644
--- a/bootstrap/lib/compiler/ebin/sys_pre_attributes.beam
+++ b/bootstrap/lib/compiler/ebin/sys_pre_attributes.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/v3_codegen.beam b/bootstrap/lib/compiler/ebin/v3_codegen.beam
index 0d76bb21e2..6afb674a9f 100644
--- a/bootstrap/lib/compiler/ebin/v3_codegen.beam
+++ b/bootstrap/lib/compiler/ebin/v3_codegen.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/v3_core.beam b/bootstrap/lib/compiler/ebin/v3_core.beam
index 3b3b8f4208..54f507218f 100644
--- a/bootstrap/lib/compiler/ebin/v3_core.beam
+++ b/bootstrap/lib/compiler/ebin/v3_core.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/v3_kernel.beam b/bootstrap/lib/compiler/ebin/v3_kernel.beam
index 5e3ae80d14..60cc6503eb 100644
--- a/bootstrap/lib/compiler/ebin/v3_kernel.beam
+++ b/bootstrap/lib/compiler/ebin/v3_kernel.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/v3_life.beam b/bootstrap/lib/compiler/ebin/v3_life.beam
index d8822f929f..d4b3f2a5e6 100644
--- a/bootstrap/lib/compiler/ebin/v3_life.beam
+++ b/bootstrap/lib/compiler/ebin/v3_life.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/application_controller.beam b/bootstrap/lib/kernel/ebin/application_controller.beam
index 2b3c8cf454..d46de4527a 100644
--- a/bootstrap/lib/kernel/ebin/application_controller.beam
+++ b/bootstrap/lib/kernel/ebin/application_controller.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/application_master.beam b/bootstrap/lib/kernel/ebin/application_master.beam
index 24492a6771..da770c5a84 100644
--- a/bootstrap/lib/kernel/ebin/application_master.beam
+++ b/bootstrap/lib/kernel/ebin/application_master.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/auth.beam b/bootstrap/lib/kernel/ebin/auth.beam
index cbe477830b..1ccad1a5a3 100644
--- a/bootstrap/lib/kernel/ebin/auth.beam
+++ b/bootstrap/lib/kernel/ebin/auth.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/code_server.beam b/bootstrap/lib/kernel/ebin/code_server.beam
index 6f99487ca7..7f073fe932 100644
--- a/bootstrap/lib/kernel/ebin/code_server.beam
+++ b/bootstrap/lib/kernel/ebin/code_server.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/disk_log.beam b/bootstrap/lib/kernel/ebin/disk_log.beam
index 998d4bca2f..31fb2d609d 100644
--- a/bootstrap/lib/kernel/ebin/disk_log.beam
+++ b/bootstrap/lib/kernel/ebin/disk_log.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/disk_log_1.beam b/bootstrap/lib/kernel/ebin/disk_log_1.beam
index fc1c4781f1..6b10d652de 100644
--- a/bootstrap/lib/kernel/ebin/disk_log_1.beam
+++ b/bootstrap/lib/kernel/ebin/disk_log_1.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/disk_log_server.beam b/bootstrap/lib/kernel/ebin/disk_log_server.beam
index 50154045be..67cda715c4 100644
--- a/bootstrap/lib/kernel/ebin/disk_log_server.beam
+++ b/bootstrap/lib/kernel/ebin/disk_log_server.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/dist_ac.beam b/bootstrap/lib/kernel/ebin/dist_ac.beam
index d2c186f03a..56868dfe6d 100644
--- a/bootstrap/lib/kernel/ebin/dist_ac.beam
+++ b/bootstrap/lib/kernel/ebin/dist_ac.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/dist_util.beam b/bootstrap/lib/kernel/ebin/dist_util.beam
index eb09a06785..bf3572fe23 100644
--- a/bootstrap/lib/kernel/ebin/dist_util.beam
+++ b/bootstrap/lib/kernel/ebin/dist_util.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/erl_epmd.beam b/bootstrap/lib/kernel/ebin/erl_epmd.beam
index 8e8460514c..19be6babd1 100644
--- a/bootstrap/lib/kernel/ebin/erl_epmd.beam
+++ b/bootstrap/lib/kernel/ebin/erl_epmd.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/file.beam b/bootstrap/lib/kernel/ebin/file.beam
index c82dada559..28d72dfafc 100644
--- a/bootstrap/lib/kernel/ebin/file.beam
+++ b/bootstrap/lib/kernel/ebin/file.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/gen_sctp.beam b/bootstrap/lib/kernel/ebin/gen_sctp.beam
index fe2ff17ff1..fca569c779 100644
--- a/bootstrap/lib/kernel/ebin/gen_sctp.beam
+++ b/bootstrap/lib/kernel/ebin/gen_sctp.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/gen_tcp.beam b/bootstrap/lib/kernel/ebin/gen_tcp.beam
index e40f1f2e45..cf4757a568 100644
--- a/bootstrap/lib/kernel/ebin/gen_tcp.beam
+++ b/bootstrap/lib/kernel/ebin/gen_tcp.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/gen_udp.beam b/bootstrap/lib/kernel/ebin/gen_udp.beam
index ec4eda12f7..fec430304e 100644
--- a/bootstrap/lib/kernel/ebin/gen_udp.beam
+++ b/bootstrap/lib/kernel/ebin/gen_udp.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/global.beam b/bootstrap/lib/kernel/ebin/global.beam
index b461d30baa..601cb9176b 100644
--- a/bootstrap/lib/kernel/ebin/global.beam
+++ b/bootstrap/lib/kernel/ebin/global.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/global_group.beam b/bootstrap/lib/kernel/ebin/global_group.beam
index 03202f68eb..8bd51c2424 100644
--- a/bootstrap/lib/kernel/ebin/global_group.beam
+++ b/bootstrap/lib/kernel/ebin/global_group.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/group.beam b/bootstrap/lib/kernel/ebin/group.beam
index 0511d1fa09..c2c66f77ec 100644
--- a/bootstrap/lib/kernel/ebin/group.beam
+++ b/bootstrap/lib/kernel/ebin/group.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/heart.beam b/bootstrap/lib/kernel/ebin/heart.beam
index 86044153af..2ab7ef9d9f 100644
--- a/bootstrap/lib/kernel/ebin/heart.beam
+++ b/bootstrap/lib/kernel/ebin/heart.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/hipe_unified_loader.beam b/bootstrap/lib/kernel/ebin/hipe_unified_loader.beam
index 5a2f294951..f6715adbfe 100644
--- a/bootstrap/lib/kernel/ebin/hipe_unified_loader.beam
+++ b/bootstrap/lib/kernel/ebin/hipe_unified_loader.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet.beam b/bootstrap/lib/kernel/ebin/inet.beam
index 60469432b9..ff7f0ba7e6 100644
--- a/bootstrap/lib/kernel/ebin/inet.beam
+++ b/bootstrap/lib/kernel/ebin/inet.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet6_sctp.beam b/bootstrap/lib/kernel/ebin/inet6_sctp.beam
index 5c827589bd..c3aac09fbe 100644
--- a/bootstrap/lib/kernel/ebin/inet6_sctp.beam
+++ b/bootstrap/lib/kernel/ebin/inet6_sctp.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet6_tcp.beam b/bootstrap/lib/kernel/ebin/inet6_tcp.beam
index f1ab2912bb..80e8e389a2 100644
--- a/bootstrap/lib/kernel/ebin/inet6_tcp.beam
+++ b/bootstrap/lib/kernel/ebin/inet6_tcp.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet6_tcp_dist.beam b/bootstrap/lib/kernel/ebin/inet6_tcp_dist.beam
index 1be1dc1c57..98f70db13c 100644
--- a/bootstrap/lib/kernel/ebin/inet6_tcp_dist.beam
+++ b/bootstrap/lib/kernel/ebin/inet6_tcp_dist.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet6_udp.beam b/bootstrap/lib/kernel/ebin/inet6_udp.beam
index 2eb8c09701..39b9f0343b 100644
--- a/bootstrap/lib/kernel/ebin/inet6_udp.beam
+++ b/bootstrap/lib/kernel/ebin/inet6_udp.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_db.beam b/bootstrap/lib/kernel/ebin/inet_db.beam
index 557852c917..30ab40c93f 100644
--- a/bootstrap/lib/kernel/ebin/inet_db.beam
+++ b/bootstrap/lib/kernel/ebin/inet_db.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_parse.beam b/bootstrap/lib/kernel/ebin/inet_parse.beam
index 30f05d5c09..c5c171aa54 100644
--- a/bootstrap/lib/kernel/ebin/inet_parse.beam
+++ b/bootstrap/lib/kernel/ebin/inet_parse.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_res.beam b/bootstrap/lib/kernel/ebin/inet_res.beam
index 2713c7fef6..b1bbf771a3 100644
--- a/bootstrap/lib/kernel/ebin/inet_res.beam
+++ b/bootstrap/lib/kernel/ebin/inet_res.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_sctp.beam b/bootstrap/lib/kernel/ebin/inet_sctp.beam
index 835c7b2928..e2f574b514 100644
--- a/bootstrap/lib/kernel/ebin/inet_sctp.beam
+++ b/bootstrap/lib/kernel/ebin/inet_sctp.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_tcp.beam b/bootstrap/lib/kernel/ebin/inet_tcp.beam
index 698a94770b..d0c9f09f6f 100644
--- a/bootstrap/lib/kernel/ebin/inet_tcp.beam
+++ b/bootstrap/lib/kernel/ebin/inet_tcp.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam b/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam
index 59cb7ce40e..087274e89d 100644
--- a/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam
+++ b/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_udp.beam b/bootstrap/lib/kernel/ebin/inet_udp.beam
index 6876ba3892..11eb4f840f 100644
--- a/bootstrap/lib/kernel/ebin/inet_udp.beam
+++ b/bootstrap/lib/kernel/ebin/inet_udp.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/kernel.app b/bootstrap/lib/kernel/ebin/kernel.app
index 8e00bc4a45..a4600713e5 100644
--- a/bootstrap/lib/kernel/ebin/kernel.app
+++ b/bootstrap/lib/kernel/ebin/kernel.app
@@ -55,6 +55,8 @@
inet_tcp_dist,
kernel,
kernel_config,
+ local_tcp,
+ local_udp,
net,
net_adm,
net_kernel,
@@ -116,6 +118,6 @@
{applications, []},
{env, [{error_logger, tty}]},
{mod, {kernel, []}},
- {runtime_dependencies, ["erts-8.0", "stdlib-2.6", "sasl-2.6"]}
+ {runtime_dependencies, ["erts-8.0", "stdlib-3.0", "sasl-3.0"]}
]
}.
diff --git a/bootstrap/lib/kernel/ebin/kernel_config.beam b/bootstrap/lib/kernel/ebin/kernel_config.beam
index 8691aff64a..5e59fc2f82 100644
--- a/bootstrap/lib/kernel/ebin/kernel_config.beam
+++ b/bootstrap/lib/kernel/ebin/kernel_config.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/local_tcp.beam b/bootstrap/lib/kernel/ebin/local_tcp.beam
new file mode 100644
index 0000000000..3c1de4fab9
--- /dev/null
+++ b/bootstrap/lib/kernel/ebin/local_tcp.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/local_udp.beam b/bootstrap/lib/kernel/ebin/local_udp.beam
new file mode 100644
index 0000000000..44a4bee902
--- /dev/null
+++ b/bootstrap/lib/kernel/ebin/local_udp.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/net_adm.beam b/bootstrap/lib/kernel/ebin/net_adm.beam
index 00772b61ff..60f51602b3 100644
--- a/bootstrap/lib/kernel/ebin/net_adm.beam
+++ b/bootstrap/lib/kernel/ebin/net_adm.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/net_kernel.beam b/bootstrap/lib/kernel/ebin/net_kernel.beam
index 8afe1c0388..1197b4f681 100644
--- a/bootstrap/lib/kernel/ebin/net_kernel.beam
+++ b/bootstrap/lib/kernel/ebin/net_kernel.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/user.beam b/bootstrap/lib/kernel/ebin/user.beam
index c2b2808555..cded4b87be 100644
--- a/bootstrap/lib/kernel/ebin/user.beam
+++ b/bootstrap/lib/kernel/ebin/user.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/user_drv.beam b/bootstrap/lib/kernel/ebin/user_drv.beam
index 1d72927105..bd9b1a3bce 100644
--- a/bootstrap/lib/kernel/ebin/user_drv.beam
+++ b/bootstrap/lib/kernel/ebin/user_drv.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/wrap_log_reader.beam b/bootstrap/lib/kernel/ebin/wrap_log_reader.beam
index 91ef523b99..93f1f1ba72 100644
--- a/bootstrap/lib/kernel/ebin/wrap_log_reader.beam
+++ b/bootstrap/lib/kernel/ebin/wrap_log_reader.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/include/dist_util.hrl b/bootstrap/lib/kernel/include/dist_util.hrl
index 43e50d4325..320e916c04 100644
--- a/bootstrap/lib/kernel/include/dist_util.hrl
+++ b/bootstrap/lib/kernel/include/dist_util.hrl
@@ -63,7 +63,7 @@
f_getll, %% Get low level port or pid.
f_address, %% The address of the "socket",
%% generated from Socket,Node
- %% These two are used in the tick loop,
+ %% These three are used in the tick loop,
%% so they are not fun's to avoid holding old code.
mf_tick, %% Takes the socket as parameters and
%% sends a tick, this is no fun, it
@@ -74,7 +74,11 @@
%% {ok, RecvCnt, SendCnt, SendPend} for
%% a given socket. This is a {M,F},
%% returning {error, Reason on failure}
- request_type = normal
+ request_type = normal,
+
+ %% New in kernel-5.1 (OTP 19.1):
+ mf_setopts, %% netkernel:setopts on active connection
+ mf_getopts %% netkernel:getopts on active connection
}).
diff --git a/bootstrap/lib/stdlib/ebin/binary.beam b/bootstrap/lib/stdlib/ebin/binary.beam
index 538d169565..ff9022388e 100644
--- a/bootstrap/lib/stdlib/ebin/binary.beam
+++ b/bootstrap/lib/stdlib/ebin/binary.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/dets.beam b/bootstrap/lib/stdlib/ebin/dets.beam
index 754663b531..8b9049c855 100644
--- a/bootstrap/lib/stdlib/ebin/dets.beam
+++ b/bootstrap/lib/stdlib/ebin/dets.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/dets_server.beam b/bootstrap/lib/stdlib/ebin/dets_server.beam
index 502eb98318..0b0783bf9d 100644
--- a/bootstrap/lib/stdlib/ebin/dets_server.beam
+++ b/bootstrap/lib/stdlib/ebin/dets_server.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/dets_utils.beam b/bootstrap/lib/stdlib/ebin/dets_utils.beam
index 37247c7176..2a3b22b7e0 100644
--- a/bootstrap/lib/stdlib/ebin/dets_utils.beam
+++ b/bootstrap/lib/stdlib/ebin/dets_utils.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/dets_v8.beam b/bootstrap/lib/stdlib/ebin/dets_v8.beam
index 9a1416a316..39ddeebf85 100644
--- a/bootstrap/lib/stdlib/ebin/dets_v8.beam
+++ b/bootstrap/lib/stdlib/ebin/dets_v8.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/dets_v9.beam b/bootstrap/lib/stdlib/ebin/dets_v9.beam
index 3e02f4b0be..f381b9b624 100644
--- a/bootstrap/lib/stdlib/ebin/dets_v9.beam
+++ b/bootstrap/lib/stdlib/ebin/dets_v9.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/digraph_utils.beam b/bootstrap/lib/stdlib/ebin/digraph_utils.beam
index 66777eeb8f..80e91be663 100644
--- a/bootstrap/lib/stdlib/ebin/digraph_utils.beam
+++ b/bootstrap/lib/stdlib/ebin/digraph_utils.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/epp.beam b/bootstrap/lib/stdlib/ebin/epp.beam
index 54909eeaa3..b1a75a54eb 100644
--- a/bootstrap/lib/stdlib/ebin/epp.beam
+++ b/bootstrap/lib/stdlib/ebin/epp.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_eval.beam b/bootstrap/lib/stdlib/ebin/erl_eval.beam
index 8793d70a39..d5bd46593c 100644
--- a/bootstrap/lib/stdlib/ebin/erl_eval.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_eval.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_expand_records.beam b/bootstrap/lib/stdlib/ebin/erl_expand_records.beam
index f6c0d0a732..e8ce1fa0da 100644
--- a/bootstrap/lib/stdlib/ebin/erl_expand_records.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_expand_records.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_lint.beam b/bootstrap/lib/stdlib/ebin/erl_lint.beam
index aeea1e2fcd..6653cb9f49 100644
--- a/bootstrap/lib/stdlib/ebin/erl_lint.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_lint.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_parse.beam b/bootstrap/lib/stdlib/ebin/erl_parse.beam
index 9b04739d58..d75b490162 100644
--- a/bootstrap/lib/stdlib/ebin/erl_parse.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_parse.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_pp.beam b/bootstrap/lib/stdlib/ebin/erl_pp.beam
index 9841362f9d..c8798a6094 100644
--- a/bootstrap/lib/stdlib/ebin/erl_pp.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_pp.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/file_sorter.beam b/bootstrap/lib/stdlib/ebin/file_sorter.beam
index ac4f1a36f1..693c0b523d 100644
--- a/bootstrap/lib/stdlib/ebin/file_sorter.beam
+++ b/bootstrap/lib/stdlib/ebin/file_sorter.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/filelib.beam b/bootstrap/lib/stdlib/ebin/filelib.beam
index a9783ed990..904edee66f 100644
--- a/bootstrap/lib/stdlib/ebin/filelib.beam
+++ b/bootstrap/lib/stdlib/ebin/filelib.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/filename.beam b/bootstrap/lib/stdlib/ebin/filename.beam
index b6248fe460..c129ac4f97 100644
--- a/bootstrap/lib/stdlib/ebin/filename.beam
+++ b/bootstrap/lib/stdlib/ebin/filename.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gen_event.beam b/bootstrap/lib/stdlib/ebin/gen_event.beam
index 2486647f46..b53ac26280 100644
--- a/bootstrap/lib/stdlib/ebin/gen_event.beam
+++ b/bootstrap/lib/stdlib/ebin/gen_event.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gen_fsm.beam b/bootstrap/lib/stdlib/ebin/gen_fsm.beam
index dbf38090af..0370d430b2 100644
--- a/bootstrap/lib/stdlib/ebin/gen_fsm.beam
+++ b/bootstrap/lib/stdlib/ebin/gen_fsm.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gen_server.beam b/bootstrap/lib/stdlib/ebin/gen_server.beam
index e7026a2a9a..aa22d6aae4 100644
--- a/bootstrap/lib/stdlib/ebin/gen_server.beam
+++ b/bootstrap/lib/stdlib/ebin/gen_server.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gen_statem.beam b/bootstrap/lib/stdlib/ebin/gen_statem.beam
index 5a3fd2a1a5..3dc104f1c3 100644
--- a/bootstrap/lib/stdlib/ebin/gen_statem.beam
+++ b/bootstrap/lib/stdlib/ebin/gen_statem.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/lib.beam b/bootstrap/lib/stdlib/ebin/lib.beam
index 541ea59421..06ddba221a 100644
--- a/bootstrap/lib/stdlib/ebin/lib.beam
+++ b/bootstrap/lib/stdlib/ebin/lib.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/lists.beam b/bootstrap/lib/stdlib/ebin/lists.beam
index 422a9bd214..22705c8a9a 100644
--- a/bootstrap/lib/stdlib/ebin/lists.beam
+++ b/bootstrap/lib/stdlib/ebin/lists.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/log_mf_h.beam b/bootstrap/lib/stdlib/ebin/log_mf_h.beam
index 0c4b22c3df..d0e18955c7 100644
--- a/bootstrap/lib/stdlib/ebin/log_mf_h.beam
+++ b/bootstrap/lib/stdlib/ebin/log_mf_h.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/otp_internal.beam b/bootstrap/lib/stdlib/ebin/otp_internal.beam
index e1ebd34afd..3ca0ad9a27 100644
--- a/bootstrap/lib/stdlib/ebin/otp_internal.beam
+++ b/bootstrap/lib/stdlib/ebin/otp_internal.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/pool.beam b/bootstrap/lib/stdlib/ebin/pool.beam
index a06ae1717a..cc6e536ccd 100644
--- a/bootstrap/lib/stdlib/ebin/pool.beam
+++ b/bootstrap/lib/stdlib/ebin/pool.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/proc_lib.beam b/bootstrap/lib/stdlib/ebin/proc_lib.beam
index d3249b120e..59627fb4df 100644
--- a/bootstrap/lib/stdlib/ebin/proc_lib.beam
+++ b/bootstrap/lib/stdlib/ebin/proc_lib.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/qlc.beam b/bootstrap/lib/stdlib/ebin/qlc.beam
index f0ed1e961b..a39ca1391b 100644
--- a/bootstrap/lib/stdlib/ebin/qlc.beam
+++ b/bootstrap/lib/stdlib/ebin/qlc.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/qlc_pt.beam b/bootstrap/lib/stdlib/ebin/qlc_pt.beam
index 17c698de60..e9c760ba45 100644
--- a/bootstrap/lib/stdlib/ebin/qlc_pt.beam
+++ b/bootstrap/lib/stdlib/ebin/qlc_pt.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/queue.beam b/bootstrap/lib/stdlib/ebin/queue.beam
index 4365c5518d..85b1e81d16 100644
--- a/bootstrap/lib/stdlib/ebin/queue.beam
+++ b/bootstrap/lib/stdlib/ebin/queue.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/shell.beam b/bootstrap/lib/stdlib/ebin/shell.beam
index 9fa5727aa5..3d7b53387b 100644
--- a/bootstrap/lib/stdlib/ebin/shell.beam
+++ b/bootstrap/lib/stdlib/ebin/shell.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/slave.beam b/bootstrap/lib/stdlib/ebin/slave.beam
index 373d65f198..fa0fa8c960 100644
--- a/bootstrap/lib/stdlib/ebin/slave.beam
+++ b/bootstrap/lib/stdlib/ebin/slave.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/sofs.beam b/bootstrap/lib/stdlib/ebin/sofs.beam
index 01f7810764..7b8ab95876 100644
--- a/bootstrap/lib/stdlib/ebin/sofs.beam
+++ b/bootstrap/lib/stdlib/ebin/sofs.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/stdlib.app b/bootstrap/lib/stdlib/ebin/stdlib.app
index 4c8f196620..81b30526ab 100644
--- a/bootstrap/lib/stdlib/ebin/stdlib.app
+++ b/bootstrap/lib/stdlib/ebin/stdlib.app
@@ -20,7 +20,7 @@
%%
{application, stdlib,
[{description, "ERTS CXC 138 10"},
- {vsn, "3.0"},
+ {vsn, "3.0.1"},
{modules, [array,
base64,
beam_lib,
@@ -106,7 +106,7 @@
dets]},
{applications, [kernel]},
{env, []},
- {runtime_dependencies, ["sasl-2.6","kernel-4.1","erts-7.3","crypto-3.3",
+ {runtime_dependencies, ["sasl-3.0","kernel-5.0","erts-8.0","crypto-3.3",
"compiler-5.0"]}
]}.
diff --git a/bootstrap/lib/stdlib/ebin/stdlib.appup b/bootstrap/lib/stdlib/ebin/stdlib.appup
index 737486d3c5..322a329931 100644
--- a/bootstrap/lib/stdlib/ebin/stdlib.appup
+++ b/bootstrap/lib/stdlib/ebin/stdlib.appup
@@ -16,7 +16,7 @@
%% limitations under the License.
%%
%% %CopyrightEnd%
-{"3.0",
+{"3.0.1",
%% Up from - max one major revision back
[{<<"3\\.0(\\.[0-9]+)*">>,[restart_new_emulator]}, % OTP-19.*
{<<"2\\.[5-8](\\.[0-9]+)*">>,[restart_new_emulator]}], % OTP-18.*
diff --git a/bootstrap/lib/stdlib/ebin/supervisor.beam b/bootstrap/lib/stdlib/ebin/supervisor.beam
index d30b4a037b..c7534b5438 100644
--- a/bootstrap/lib/stdlib/ebin/supervisor.beam
+++ b/bootstrap/lib/stdlib/ebin/supervisor.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/supervisor_bridge.beam b/bootstrap/lib/stdlib/ebin/supervisor_bridge.beam
index d2bfe6eea8..f52d5c407b 100644
--- a/bootstrap/lib/stdlib/ebin/supervisor_bridge.beam
+++ b/bootstrap/lib/stdlib/ebin/supervisor_bridge.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/zip.beam b/bootstrap/lib/stdlib/ebin/zip.beam
index 1a19b1f28a..919166fe89 100644
--- a/bootstrap/lib/stdlib/ebin/zip.beam
+++ b/bootstrap/lib/stdlib/ebin/zip.beam
Binary files differ
diff --git a/configure.in b/configure.in
index 8a7f372a50..ea98dc9836 100644
--- a/configure.in
+++ b/configure.in
@@ -129,6 +129,13 @@ AC_PROG_CC
AC_PROG_CXX
AC_CHECK_TOOL(LD, [ld])
+_search_path=/bin:/usr/bin:/usr/local/bin:$PATH
+
+AC_PATH_PROG(ENV, [env], false, $_search_path)
+if test "$ac_cv_path_ENV" = false; then
+ AC_MSG_ERROR([No 'env' command found])
+fi
+
#
# We need GNU make, complain if we can't find it
#
diff --git a/erts/aclocal.m4 b/erts/aclocal.m4
index 86799186fd..013bfe5652 100644
--- a/erts/aclocal.m4
+++ b/erts/aclocal.m4
@@ -128,13 +128,13 @@ MIXED_MSYS=no
AC_MSG_CHECKING(for mixed cygwin or msys and native VC++ environment)
if test "X$host" = "Xwin32" -a "x$GCC" != "xyes"; then
if test -x /usr/bin/msys-?.0.dll; then
- CFLAGS="-O2"
+ CFLAGS="$CFLAGS -O2"
MIXED_MSYS=yes
AC_MSG_RESULT([MSYS and VC])
MIXED_MSYS_VC=yes
CPPFLAGS="$CPPFLAGS -DERTS_MIXED_MSYS_VC"
elif test -x /usr/bin/cygpath; then
- CFLAGS="-O2"
+ CFLAGS="$CFLAGS -O2"
MIXED_CYGWIN=yes
AC_MSG_RESULT([Cygwin and VC])
MIXED_CYGWIN_VC=yes
@@ -162,7 +162,7 @@ if test "x$MIXED_MSYS" != "xyes"; then
AC_MSG_CHECKING(for mixed cygwin and native MinGW environment)
if test "X$host" = "Xwin32" -a "x$GCC" = x"yes"; then
if test -x /usr/bin/cygpath; then
- CFLAGS="-O2"
+ CFLAGS="$CFLAGS -O2"
MIXED_CYGWIN=yes
AC_MSG_RESULT([yes])
MIXED_CYGWIN_MINGW=yes
diff --git a/erts/configure.in b/erts/configure.in
index 4a63381eb7..883ce2db68 100644
--- a/erts/configure.in
+++ b/erts/configure.in
@@ -121,6 +121,7 @@ AS_HELP_STRING([--enable-bootstrap-only],
enable_hipe=no
enable_sctp=no
enable_dirty_schedulers=no
+ enable_new_purge=no
fi
])
@@ -139,6 +140,13 @@ AS_HELP_STRING([--enable-dirty-schedulers], [enable dirty scheduler support]),
*) enable_dirty_schedulers=yes ;;
esac ], enable_dirty_schedulers=default)
+AC_ARG_ENABLE(new-purge-strategy,
+AS_HELP_STRING([--enable-new-purge-strategy], [enable new code purge strategy]),
+[ case "$enableval" in
+ no) enable_new_purge=no ;;
+ *) enable_new_purge=yes ;;
+ esac ], enable_new_purge=default)
+
AC_ARG_ENABLE(smp-support,
AS_HELP_STRING([--enable-smp-support], [enable smp support])
AS_HELP_STRING([--disable-smp-support], [disable smp support]),
@@ -738,6 +746,11 @@ if test "$ac_cv_path_MKDIR" = false; then
AC_MSG_ERROR([No 'mkdir' command found])
fi
+AC_PATH_PROG(CP, cp, false, $_search_path)
+if test "$ac_cv_path_CP" = false; then
+ AC_MSG_ERROR([No 'cp' command found])
+fi
+
_search_path=
@@ -1023,6 +1036,27 @@ esac
AC_MSG_RESULT($DIRTY_SCHEDULER_SUPPORT)
AC_SUBST(DIRTY_SCHEDULER_SUPPORT)
+AC_MSG_CHECKING(whether the new code purge strategy should be enabled)
+case $enable_new_purge-$enable_dirty_schedulers in
+ yes-*)
+ AC_MSG_RESULT(yes)
+ enable_new_purge=yes;;
+ default-yes)
+ AC_MSG_RESULT(yes; forced by dirty scheduler support)
+ enable_new_purge=yes;;
+ no-yes)
+ AC_MSG_ERROR([Dirty schedulers enabled, but new code purge strategy disabled]);;
+ *)
+ AC_MSG_RESULT(no)
+ enable_new_purge=no;;
+esac
+
+if test $enable_new_purge = yes; then
+ AC_DEFINE(ERTS_NEW_PURGE_STRATEGY, 1, [Define if you want to use the new code purge strategy])
+fi
+NEW_PURGE_STRATEGY=$enable_new_purge
+AC_SUBST(NEW_PURGE_STRATEGY)
+
if test $ERTS_BUILD_SMP_EMU = yes; then
if test $found_threads = no; then
@@ -1676,7 +1710,8 @@ if test "x$enable_sctp" != "xno" ; then
fi
if test x"$ac_cv_header_netinet_sctp_h" = x"yes"; then
- AC_CHECK_FUNCS([sctp_bindx sctp_peeloff sctp_getladdrs sctp_freeladdrs sctp_getpaddrs sctp_freepaddrs])
+ AC_CHECK_LIB(sctp, sctp_bindx)
+ AC_CHECK_FUNCS([sctp_peeloff sctp_getladdrs sctp_freeladdrs sctp_getpaddrs sctp_freepaddrs])
AC_CHECK_DECLS([SCTP_UNORDERED, SCTP_ADDR_OVER, SCTP_ABORT,
SCTP_EOF, SCTP_SENDALL, SCTP_ADDR_CONFIRMED,
SCTP_DELAYED_ACK_TIME,
@@ -2116,7 +2151,7 @@ fi
dnl Need by run_erl.
AC_CHECK_FUNCS([openpty])
-AC_CHECK_HEADERS(net/if_dl.h ifaddrs.h netpacket/packet.h)
+AC_CHECK_HEADERS(net/if_dl.h ifaddrs.h netpacket/packet.h sys/un.h)
AC_CHECK_FUNCS([getifaddrs])
dnl Checks for variables in6addr_any and in6addr_loopback,
@@ -3858,17 +3893,17 @@ if test "$enable_lttng_test" = "yes" ; then
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[#include <lttng/tracepoint.h>
- #define TRACEPOINT_PROVIDER com_ericsson_otp
+ #define TRACEPOINT_PROVIDER org_erlang_otp
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
dummy,
TP_ARGS(int, my_int),
TP_FIELDS(ctf_integer(int, my_int, my_int)))
#define TRACEPOINT_CREATE_PROBES
#define TRACEPOINT_DEFINE],
- [if(tracepoint_enabled(com_ericsson_otp,dummy)) do {} while(0)])],
+ [if(tracepoint_enabled(org_erlang_otp,dummy)) do {} while(0)])],
[AC_MSG_RESULT([yes])],
- [AC_MSG_ERROR([no (must be present)])])
+ [AC_MSG_ERROR([no (available in lttng-ust v2.7)])])
if test "x$ac_cv_header_lttng_tracepoint_h" = "xyes" \
-a "x$ac_cv_header_lttng_tracepoint_event_h" = "xyes"; then
# No straight forward way to test for liblttng-ust when no public symbol exists,
@@ -4816,8 +4851,7 @@ dnl Output the result.
dnl ----------------------------------------------------------------------
dnl Note that the output files are relative to $srcdir
-
-AC_OUTPUT(
+AC_CONFIG_FILES([
emulator/$host/Makefile:emulator/Makefile.in
epmd/src/$host/Makefile:epmd/src/Makefile.in
etc/common/$host/Makefile:etc/common/Makefile.in
@@ -4827,15 +4861,22 @@ AC_OUTPUT(
Makefile:Makefile.in
../make/$host/otp.mk:../make/otp.mk.in
../make/$host/otp_ded.mk:../make/otp_ded.mk.in
+])
+
+AC_CONFIG_FILES([../make/make_emakefile:../make/make_emakefile.in],
+ [chmod +x ../make/make_emakefile])
+
dnl
dnl The ones below should be moved to their respective lib
dnl
+dnl ../lib/ssl/c_src/$host/Makefile:../lib/ssl/c_src/Makefile.in
+AC_CONFIG_FILES([
../lib/ic/c_src/$host/Makefile:../lib/ic/c_src/Makefile.in
../lib/os_mon/c_src/$host/Makefile:../lib/os_mon/c_src/Makefile.in
-dnl ../lib/ssl/c_src/$host/Makefile:../lib/ssl/c_src/Makefile.in
../lib/crypto/c_src/$host/Makefile:../lib/crypto/c_src/Makefile.in
../lib/orber/c_src/$host/Makefile:../lib/orber/c_src/Makefile.in
../lib/runtime_tools/c_src/$host/Makefile:../lib/runtime_tools/c_src/Makefile.in
../lib/tools/c_src/$host/Makefile:../lib/tools/c_src/Makefile.in
- )
+ ])
+AC_OUTPUT
diff --git a/erts/doc/src/absform.xml b/erts/doc/src/absform.xml
index bfabb7f042..ab00d47425 100644
--- a/erts/doc/src/absform.xml
+++ b/erts/doc/src/absform.xml
@@ -26,142 +26,198 @@
<prepared>Arndt Jonasson</prepared>
<responsible>Kenneth Lundin</responsible>
<docno>1</docno>
- <approved>Jultomten</approved>
+ <approved></approved>
<checked></checked>
- <date>00-12-01</date>
+ <date>2000-12-01</date>
<rev>A</rev>
<file>absform.xml</file>
</header>
- <p></p>
- <p>This document describes the standard representation of parse trees for Erlang
- programs as Erlang terms. This representation is known as the <em>abstract format</em>.
- Functions dealing with such parse trees are <c>compile:forms/[1,2]</c>
- and functions in the modules
- <c>epp</c>,
- <c>erl_eval</c>,
- <c>erl_lint</c>,
- <c>erl_pp</c>,
- <c>erl_parse</c>,
- and
- <c>io</c>.
- They are also used as input and output for parse transforms (see the module
- <c>compile</c>).</p>
+ <p>This section describes the standard representation of parse trees for Erlang
+ programs as Erlang terms. This representation is known as the <em>abstract
+ format</em>. Functions dealing with such parse trees are
+ <seealso marker="compiler:compile#forms/1">
+ <c>compile:forms/1,2</c></seealso> and functions in the following
+ modules:</p>
+
+ <list type="bulleted">
+ <item><seealso marker="stdlib:epp">
+ <c>epp(3)</c></seealso></item>
+ <item><seealso marker="stdlib:erl_eval">
+ <c>erl_eval(3)</c></seealso></item>
+ <item><seealso marker="stdlib:erl_lint">
+ <c>erl_lint(3)</c></seealso></item>
+ <item><seealso marker="stdlib:erl_parse">
+ <c>erl_parse(3)</c></seealso></item>
+ <item><seealso marker="stdlib:erl_pp">
+ <c>erl_pp(3)</c></seealso></item>
+ <item><seealso marker="stdlib:io">
+ <c>io(3)</c></seealso></item>
+ </list>
+
+ <p>The functions are also used as input and output for parse transforms, see
+ the <seealso marker="compiler:compile"><c>compile(3)</c></seealso>
+ module.</p>
+
<p>We use the function <c>Rep</c> to denote the mapping from an Erlang source
construct <c>C</c> to its abstract format representation <c>R</c>, and write
- <c>R = Rep(C)</c>.
- </p>
- <p>The word <c>LINE</c> below represents an integer, and denotes the
+ <c>R = Rep(C)</c>.</p>
+
+ <p>The word <c>LINE</c> in this section represents an integer, and denotes the
number of the line in the source file where the construction occurred.
- Several instances of <c>LINE</c> in the same construction may denote
+ Several instances of <c>LINE</c> in the same construction can denote
different lines.</p>
- <p>Since operators are not terms in their own right, when operators are
- mentioned below, the representation of an operator should be taken to
+
+ <p>As operators are not terms in their own right, when operators are
+ mentioned below, the representation of an operator is to be taken to
be the atom with a printname consisting of the same characters as the
- operator.
- </p>
+ operator.</p>
<section>
<title>Module Declarations and Forms</title>
- <p>A module declaration consists of a sequence of forms that are either
+ <p>A module declaration consists of a sequence of forms, which are either
function declarations or attributes.</p>
+
<list type="bulleted">
- <item>If D is a module declaration consisting of the forms
- <c>F_1</c>, ..., <c>F_k</c>, then
- Rep(D) = <c>[Rep(F_1), ..., Rep(F_k)]</c>.</item>
- <item>If F is an attribute <c>-export([Fun_1/A_1, ..., Fun_k/A_k])</c>, then
- Rep(F) = <c>{attribute,LINE,export,[{Fun_1,A_1}, ..., {Fun_k,A_k}]}</c>.</item>
- <item>If F is an attribute <c>-import(Mod,[Fun_1/A_1, ..., Fun_k/A_k])</c>, then
- Rep(F) = <c>{attribute,LINE,import,{Mod,[{Fun_1,A_1}, ..., {Fun_k,A_k}]}}</c>.</item>
- <item>If F is an attribute <c>-module(Mod)</c>, then
- Rep(F) = <c>{attribute,LINE,module,Mod}</c>.</item>
- <item>If F is an attribute <c>-file(File,Line)</c>, then
- Rep(F) = <c>{attribute,LINE,file,{File,Line}}</c>.</item>
- <item>If F is a function declaration
- <c>Name Fc_1 ; ... ; Name Fc_k</c>,
- where each <c>Fc_i</c> is a function clause with a
- pattern sequence of the same length <c>Arity</c>, then
- Rep(F) = <c>{function,LINE,Name,Arity,[Rep(Fc_1), ...,Rep(Fc_k)]}</c>.
- </item>
- <item>If F is a function specification
- <c>-Spec Name Ft_1; ...; Ft_k</c>,
- where <c>Spec</c> is either the atom <c>spec</c> or the atom
- <c>callback</c>, and each <c>Ft_i</c> is a possibly constrained
- function type with an argument sequence of the same length
- <c>Arity</c>, then Rep(F) =
- <c>{attribute,Line,Spec,{{Name,Arity},[Rep(Ft_1), ..., Rep(Ft_k)]}}</c>.
- </item>
- <item>If F is a function specification
- <c>-spec Mod:Name Ft_1; ...; Ft_k</c>,
- where each <c>Ft_i</c> is a possibly constrained
- function type with an argument sequence of the same length
- <c>Arity</c>, then Rep(F) =
- <c>{attribute,Line,spec,{{Mod,Name,Arity},[Rep(Ft_1), ..., Rep(Ft_k)]}}</c>.
- </item>
- <item>If F is a record declaration
- <c>-record(Name,{V_1, ..., V_k})</c>,
- where each <c>V_i</c> is a record field, then Rep(F) =
- <c>{attribute,LINE,record,{Name,[Rep(V_1), ..., Rep(V_k)]}}</c>.
- For Rep(V), see below.</item>
- <item>If F is a type declaration
- <c>-Type Name(V_1, ..., V_k) :: T</c>, where
- <c>Type</c> is either the atom <c>type</c> or the atom <c>opaque</c>,
- each <c>V_i</c> is a variable, and <c>T</c> is a type, then Rep(F) =
- <c>{attribute,LINE,Type,{Name,Rep(T),[Rep(V_1), ..., Rep(V_k)]}}</c>.
- </item>
- <item>If F is a wild attribute <c>-A(T)</c>, then
- Rep(F) = <c>{attribute,LINE,A,T}</c>.
- <br></br></item>
+ <item>
+ <p>If D is a module declaration consisting of the forms
+ <c>F_1</c>, ..., <c>F_k</c>, then
+ Rep(D) = <c>[Rep(F_1), ..., Rep(F_k)]</c>.</p>
+ </item>
+ <item>
+ <p>If F is an attribute <c>-export([Fun_1/A_1, ..., Fun_k/A_k])</c>,
+ then Rep(F) =
+ <c>{attribute,LINE,export,[{Fun_1,A_1}, ..., {Fun_k,A_k}]}</c>.</p>
+ </item>
+ <item>
+ <p>If F is an attribute <c>-import(Mod,[Fun_1/A_1, ..., Fun_k/A_k])</c>,
+ then Rep(F) =
+ <c>{attribute,LINE,import,{Mod,[{Fun_1,A_1}, ...,
+ {Fun_k,A_k}]}}</c>.</p>
+ </item>
+ <item>
+ <p>If F is an attribute <c>-module(Mod)</c>, then
+ Rep(F) = <c>{attribute,LINE,module,Mod}</c>.</p>
+ </item>
+ <item>
+ <p>If F is an attribute <c>-file(File,Line)</c>, then
+ Rep(F) = <c>{attribute,LINE,file,{File,Line}}</c>.</p>
+ </item>
+ <item>
+ <p>If F is a function declaration <c>Name Fc_1 ; ... ; Name Fc_k</c>,
+ where each <c>Fc_i</c> is a function clause with a pattern sequence of
+ the same length <c>Arity</c>, then Rep(F) =
+ <c>{function,LINE,Name,Arity,[Rep(Fc_1), ...,Rep(Fc_k)]}</c>.</p>
+ </item>
+ <item>
+ <p>If F is a function specification <c>-Spec Name Ft_1; ...; Ft_k</c>,
+ where <c>Spec</c> is either the atom <c>spec</c> or the atom
+ <c>callback</c>, and each <c>Ft_i</c> is a possibly constrained
+ function type with an argument sequence of the same length
+ <c>Arity</c>, then Rep(F) =
+ <c>{attribute,Line,Spec,{{Name,Arity},[Rep(Ft_1), ...,
+ Rep(Ft_k)]}}</c>.</p>
+ </item>
+ <item>
+ <p>If F is a function specification
+ <c>-spec Mod:Name Ft_1; ...; Ft_k</c>, where each <c>Ft_i</c> is a
+ possibly constrained function type with an argument sequence of the
+ same length <c>Arity</c>, then Rep(F) =
+ <c>{attribute,Line,spec,{{Mod,Name,Arity},[Rep(Ft_1), ...,
+ Rep(Ft_k)]}}</c>.</p>
+ </item>
+ <item>
+ <p>If F is a record declaration <c>-record(Name,{V_1, ..., V_k})</c>,
+ where each <c>V_i</c> is a record field, then Rep(F) =
+ <c>{attribute,LINE,record,{Name,[Rep(V_1), ..., Rep(V_k)]}}</c>.
+ For Rep(V), see below.</p>
+ </item>
+ <item>
+ <p>If F is a type declaration <c>-Type Name(V_1, ..., V_k) :: T</c>,
+ where <c>Type</c> is either the atom <c>type</c> or the atom
+ <c>opaque</c>, each <c>V_i</c> is a variable, and <c>T</c> is a type,
+ then Rep(F) =
+ <c>{attribute,LINE,Type,{Name,Rep(T),[Rep(V_1), ...,
+ Rep(V_k)]}}</c>.</p>
+ </item>
+ <item>
+ <p>If F is a wild attribute <c>-A(T)</c>, then
+ Rep(F) = <c>{attribute,LINE,A,T}</c>.</p>
+ </item>
</list>
<section>
<title>Record Fields</title>
- <p>Each field in a record declaration may have an optional
- explicit default initializer expression, as well as an
+ <p>Each field in a record declaration can have an optional,
+ explicit, default initializer expression, and an
optional type.</p>
+
<list type="bulleted">
- <item>If V is <c>A</c>, then
- Rep(V) = <c>{record_field,LINE,Rep(A)}</c>.</item>
- <item>If V is <c>A = E</c>,
- where <c>E</c> is an expression, then
- Rep(V) = <c>{record_field,LINE,Rep(A),Rep(E)}</c>.</item>
- <item>If V is <c>A :: T</c>, where <c>T</c> is a type, then Rep(V) =
- <c>{typed_record_field,{record_field,LINE,Rep(A)},Rep(T)}</c>.
- </item>
- <item>If V is <c>A = E :: T</c>, where
- <c>E</c> is an expression and <c>T</c> is a type, then Rep(V) =
- <c>{typed_record_field,{record_field,LINE,Rep(A),Rep(E)},Rep(T)}</c>.
+ <item>
+ <p>If V is <c>A</c>, then
+ Rep(V) = <c>{record_field,LINE,Rep(A)}</c>.</p>
+ </item>
+ <item>
+ <p>If V is <c>A = E</c>, where <c>E</c> is an expression, then
+ Rep(V) = <c>{record_field,LINE,Rep(A),Rep(E)}</c>.</p>
+ </item>
+ <item>
+ <p>If V is <c>A :: T</c>, where <c>T</c> is a type, then Rep(V) =
+ <c>{typed_record_field,{record_field,LINE,Rep(A)},Rep(T)}</c>.</p>
+ </item>
+ <item>
+ <p>If V is <c>A = E :: T</c>, where
+ <c>E</c> is an expression and <c>T</c> is a type, then Rep(V) =
+ <c>{typed_record_field,{record_field,LINE,Rep(A),Rep(E)},Rep(T)}</c>.
+ </p>
</item>
</list>
</section>
<section>
- <title>Representation of Parse Errors and End-of-file</title>
+ <title>Representation of Parse Errors and End-of-File</title>
<p>In addition to the representations of forms, the list that represents
- a module declaration (as returned by functions in <c>erl_parse</c> and
- <c>epp</c>) may contain tuples <c>{error,E}</c> and
- <c>{warning,W}</c>, denoting syntactically incorrect forms and
- warnings, and <c>{eof,LINE}</c>, denoting an end-of-stream
- encountered before a complete form had been parsed.</p>
+ a module declaration (as returned by functions in
+ <seealso marker="stdlib:epp"><c>epp(3)</c></seealso> and
+ <seealso marker="stdlib:erl_parse"><c>erl_parse(3)</c></seealso>)
+ can contain the following:</p>
+
+ <list type="bulleted">
+ <item>Tuples <c>{error,E}</c> and <c>{warning,W}</c>, denoting
+ syntactically incorrect forms and warnings</item>
+ <item><c>{eof,LINE}</c>, denoting an end-of-stream
+ encountered before a complete form had been parsed</item>
+ </list>
</section>
</section>
<section>
<title>Atomic Literals</title>
<p>There are five kinds of atomic literals, which are represented in the
- same way in patterns, expressions and guards:</p>
+ same way in patterns, expressions, and guards:</p>
+
<list type="bulleted">
- <item>If L is an atom literal, then
- Rep(L) = <c>{atom,LINE,L}</c>.</item>
- <item>If L is a float literal, then
- Rep(L) = <c>{float,LINE,L}</c>.</item>
- <item>If L is an integer or character literal, then
- Rep(L) = <c>{integer,LINE,L}</c>.</item>
- <item>If L is a string literal consisting of the characters
- <c>C_1</c>, ..., <c>C_k</c>, then
- Rep(L) = <c>{string,LINE,[C_1, ..., C_k]}</c>.</item>
+ <item>
+ <p>If L is an atom literal, then Rep(L) = <c>{atom,LINE,L}</c>.</p>
+ </item>
+ <item>
+ <p>If L is a character literal, then Rep(L) = <c>{char,LINE,L}</c>.</p>
+ </item>
+ <item>
+ <p>If L is a float literal, then Rep(L) = <c>{float,LINE,L}</c>.</p>
+ </item>
+ <item>
+ <p>If L is an integer literal, then
+ Rep(L) = <c>{integer,LINE,L}</c>.</p>
+ </item>
+ <item>
+ <p>If L is a string literal consisting of the characters
+ <c>C_1</c>, ..., <c>C_k</c>, then
+ Rep(L) = <c>{string,LINE,[C_1, ..., C_k]}</c>.</p>
+ </item>
</list>
- <p>Note that negative integer and float literals do not occur as such; they are
- parsed as an application of the unary negation operator.</p>
+
+ <p>Notice that negative integer and float literals do not occur as such;
+ they are parsed as an application of the unary negation operator.</p>
</section>
<section>
@@ -169,288 +225,424 @@
<p>If Ps is a sequence of patterns <c>P_1, ..., P_k</c>, then
Rep(Ps) = <c>[Rep(P_1), ..., Rep(P_k)]</c>. Such sequences occur as the
list of arguments to a function or fun.</p>
+
<p>Individual patterns are represented as follows:</p>
+
<list type="bulleted">
- <item>If P is an atomic literal <c>L</c>, then Rep(P) = Rep(L).</item>
- <item>If P is a bit string pattern
- <c>&lt;&lt;P_1:Size_1/TSL_1, ..., P_k:Size_k/TSL_k>></c>, where each
- <c>Size_i</c> is an expression that can be evaluated to an integer
- and each <c>TSL_i</c> is a type specificer list, then
- Rep(P) = <c>{bin,LINE,[{bin_element,LINE,Rep(P_1),Rep(Size_1),Rep(TSL_1)}, ..., {bin_element,LINE,Rep(P_k),Rep(Size_k),Rep(TSL_k)}]}</c>.
- For Rep(TSL), see below.
- An omitted <c>Size_i</c> is represented by <c>default</c>.
- An omitted <c>TSL_i</c> is represented by <c>default</c>.</item>
- <item>If P is a compound pattern <c>P_1 = P_2</c>, then
- Rep(P) = <c>{match,LINE,Rep(P_1),Rep(P_2)}</c>.</item>
- <item>If P is a cons pattern <c>[P_h | P_t]</c>, then
- Rep(P) = <c>{cons,LINE,Rep(P_h),Rep(P_t)}</c>.</item>
- <item>If P is a map pattern <c>#{A_1, ..., A_k}</c>, where each
- <c>A_i</c> is an association <c>P_i_1 := P_i_2</c>, then Rep(P) =
- <c>{map,LINE,[Rep(A_1), ..., Rep(A_k)]}</c>. For Rep(A), see
- below.</item>
- <item>If P is a nil pattern <c>[]</c>, then
- Rep(P) = <c>{nil,LINE}</c>.</item>
- <item>If P is an operator pattern <c>P_1 Op P_2</c>,
- where <c>Op</c> is a binary operator (this is either an occurrence
- of <c>++</c> applied to a literal string or character
- list, or an occurrence of an expression that can be evaluated to a number
- at compile time),
- then Rep(P) = <c>{op,LINE,Op,Rep(P_1),Rep(P_2)}</c>.</item>
- <item>If P is an operator pattern <c>Op P_0</c>,
- where <c>Op</c> is a unary operator (this is an occurrence of
- an expression that can be evaluated to a number at compile
- time), then Rep(P) = <c>{op,LINE,Op,Rep(P_0)}</c>.</item>
- <item>If P is a parenthesized pattern <c>( P_0 )</c>, then
- Rep(P) = <c>Rep(P_0)</c>,
- that is, parenthesized patterns cannot be distinguished from their
- bodies.</item>
- <item>If P is a record field index pattern <c>#Name.Field</c>,
- where <c>Field</c> is an atom, then
- Rep(P) = <c>{record_index,LINE,Name,Rep(Field)}</c>.</item>
- <item>If P is a record pattern
- <c>#Name{Field_1=P_1, ..., Field_k=P_k}</c>,
- where each <c>Field_i</c> is an atom or <c>_</c>, then Rep(P) =
- <c>{record,LINE,Name,[{record_field,LINE,Rep(Field_1),Rep(P_1)}, ..., {record_field,LINE,Rep(Field_k),Rep(P_k)}]}</c>.</item>
- <item>If P is a tuple pattern <c>{P_1, ..., P_k}</c>, then
- Rep(P) = <c>{tuple,LINE,[Rep(P_1), ..., Rep(P_k)]}</c>.</item>
- <item>If P is a universal pattern <c>_</c>, then
- Rep(P) = <c>{var,LINE,'_'}</c>.</item>
- <item>If P is a variable pattern <c>V</c>, then
- Rep(P) = <c>{var,LINE,A}</c>,
- where A is an atom with a printname consisting of the same characters as
- <c>V</c>.</item>
+ <item>
+ <p>If P is an atomic literal <c>L</c>, then Rep(P) = Rep(L).</p>
+ </item>
+ <item>
+ <p>If P is a bitstring pattern
+ <c>&lt;&lt;P_1:Size_1/TSL_1, ..., P_k:Size_k/TSL_k>></c>, where each
+ <c>Size_i</c> is an expression that can be evaluated to an integer,
+ and each <c>TSL_i</c> is a type specificer list, then Rep(P) =
+ <c>{bin,LINE,[{bin_element,LINE,Rep(P_1),Rep(Size_1),Rep(TSL_1)},
+ ..., {bin_element,LINE,Rep(P_k),Rep(Size_k),Rep(TSL_k)}]}</c>.
+ For Rep(TSL), see below.
+ An omitted <c>Size_i</c> is represented by <c>default</c>.
+ An omitted <c>TSL_i</c> is represented by <c>default</c>.</p>
+ </item>
+ <item>
+ <p>If P is a compound pattern <c>P_1 = P_2</c>, then Rep(P) =
+ <c>{match,LINE,Rep(P_1),Rep(P_2)}</c>.</p>
+ </item>
+ <item>
+ <p>If P is a cons pattern <c>[P_h | P_t]</c>, then Rep(P) =
+ <c>{cons,LINE,Rep(P_h),Rep(P_t)}</c>.</p>
+ </item>
+ <item>
+ <p>If P is a map pattern <c>#{A_1, ..., A_k}</c>, where each
+ <c>A_i</c> is an association <c>P_i_1 := P_i_2</c>, then Rep(P) =
+ <c>{map,LINE,[Rep(A_1), ..., Rep(A_k)]}</c>.
+ For Rep(A), see below.</p>
+ </item>
+ <item>
+ <p>If P is a nil pattern <c>[]</c>, then Rep(P) =
+ <c>{nil,LINE}</c>.</p>
+ </item>
+ <item>
+ <p>If P is an operator pattern <c>P_1 Op P_2</c>, where <c>Op</c> is a
+ binary operator (this is either an occurrence of <c>++</c> applied to
+ a literal string or character list, or an occurrence of an expression
+ that can be evaluated to a number at compile time), then Rep(P) =
+ <c>{op,LINE,Op,Rep(P_1),Rep(P_2)}</c>.</p>
+ </item>
+ <item>
+ <p>If P is an operator pattern <c>Op P_0</c>, where <c>Op</c> is a
+ unary operator (this is an occurrence of an expression that can be
+ evaluated to a number at compile time), then Rep(P) =
+ <c>{op,LINE,Op,Rep(P_0)}</c>.</p>
+ </item>
+ <item>
+ <p>If P is a parenthesized pattern <c>( P_0 )</c>, then Rep(P) =
+ <c>Rep(P_0)</c>, that is, parenthesized patterns cannot be
+ distinguished from their bodies.</p>
+ </item>
+ <item>
+ <p>If P is a record field index pattern <c>#Name.Field</c>,
+ where <c>Field</c> is an atom, then Rep(P) =
+ <c>{record_index,LINE,Name,Rep(Field)}</c>.</p>
+ </item>
+ <item>
+ <p>If P is a record pattern <c>#Name{Field_1=P_1, ..., Field_k=P_k}</c>,
+ where each <c>Field_i</c> is an atom or <c>_</c>, then Rep(P) =
+ <c>{record,LINE,Name,[{record_field,LINE,Rep(Field_1),Rep(P_1)}, ...,
+ {record_field,LINE,Rep(Field_k),Rep(P_k)}]}</c>.</p>
+ </item>
+ <item>
+ <p>If P is a tuple pattern <c>{P_1, ..., P_k}</c>, then Rep(P) =
+ <c>{tuple,LINE,[Rep(P_1), ..., Rep(P_k)]}</c>.</p>
+ </item>
+ <item>
+ <p>If P is a universal pattern <c>_</c>, then Rep(P) =
+ <c>{var,LINE,'_'}</c>.</p></item>
+ <item>
+ <p>If P is a variable pattern <c>V</c>, then Rep(P) =
+ <c>{var,LINE,A}</c>, where A is an atom with a printname consisting
+ of the same characters as <c>V</c>.</p>
+ </item>
</list>
- <p>Note that every pattern has the same source form as some expression, and is
- represented the same way as the corresponding expression.</p>
+
+ <p>Notice that every pattern has the same source form as some expression,
+ and is represented in the same way as the corresponding expression.</p>
</section>
<section>
<title>Expressions</title>
- <p>A body B is a nonempty sequence of expressions <c>E_1, ..., E_k</c>,
+ <p>A body B is a non-empty sequence of expressions <c>E_1, ..., E_k</c>,
and Rep(B) = <c>[Rep(E_1), ..., Rep(E_k)]</c>.</p>
- <p>An expression E is one of the following alternatives:</p>
+
+ <p>An expression E is one of the following:</p>
+
<list type="bulleted">
- <item>If E is an atomic literal <c>L</c>, then Rep(E) = Rep(L).</item>
- <item>If E is a bit string comprehension
- <c>&lt;&lt;E_0 || Q_1, ..., Q_k>></c>,
- where each <c>Q_i</c> is a qualifier, then
- Rep(E) = <c>{bc,LINE,Rep(E_0),[Rep(Q_1), ..., Rep(Q_k)]}</c>.
- For Rep(Q), see below.</item>
- <item>If E is a bit string constructor
- <c>&lt;&lt;E_1:Size_1/TSL_1, ..., E_k:Size_k/TSL_k>></c>,
- where each <c>Size_i</c> is an expression and each
- <c>TSL_i</c> is a type specificer list, then Rep(E) =
- <c>{bin,LINE,[{bin_element,LINE,Rep(E_1),Rep(Size_1),Rep(TSL_1)}, ..., {bin_element,LINE,Rep(E_k),Rep(Size_k),Rep(TSL_k)}]}</c>.
- For Rep(TSL), see below.
- An omitted <c>Size_i</c> is represented by <c>default</c>.
- An omitted <c>TSL_i</c> is represented by <c>default</c>.</item>
- <item>If E is a block expression <c>begin B end</c>,
- where <c>B</c> is a body, then
- Rep(E) = <c>{block,LINE,Rep(B)}</c>.</item>
- <item>If E is a case expression <c>case E_0 of Cc_1 ; ... ; Cc_k end</c>,
- where <c>E_0</c> is an expression and each <c>Cc_i</c> is a
- case clause then Rep(E) =
- <c>{'case',LINE,Rep(E_0),[Rep(Cc_1), ..., Rep(Cc_k)]}</c>.</item>
- <item>If E is a catch expression <c>catch E_0</c>, then
- Rep(E) = <c>{'catch',LINE,Rep(E_0)}</c>.</item>
- <item>If E is a cons skeleton <c>[E_h | E_t]</c>, then
- Rep(E) = <c>{cons,LINE,Rep(E_h),Rep(E_t)}</c>.</item>
- <item>If E is a fun expression <c>fun Name/Arity</c>, then
- Rep(E) = <c>{'fun',LINE,{function,Name,Arity}}</c>.</item>
- <item>If E is a fun expression
- <c>fun Module:Name/Arity</c>, then Rep(E) =
- <c>{'fun',LINE,{function,Rep(Module),Rep(Name),Rep(Arity)}}</c>.
- (Before the R15 release: Rep(E) =
- <c>{'fun',LINE,{function,Module,Name,Arity}}</c>.)</item>
- <item>If E is a fun expression <c>fun Fc_1 ; ... ; Fc_k end</c>,
- where each <c>Fc_i</c> is a function clause then Rep(E) =
- <c>{'fun',LINE,{clauses,[Rep(Fc_1), ..., Rep(Fc_k)]}}</c>.</item>
- <item>If E is a fun expression
- <c>fun Name Fc_1 ; ... ; Name Fc_k end</c>,
- where <c>Name</c> is a variable and each
- <c>Fc_i</c> is a function clause then Rep(E) =
- <c>{named_fun,LINE,Name,[Rep(Fc_1), ..., Rep(Fc_k)]}</c>.
- </item>
- <item>If E is a function call <c>E_0(E_1, ..., E_k)</c>, then
- Rep(E) = <c>{call,LINE,Rep(E_0),[Rep(E_1), ..., Rep(E_k)]}</c>.</item>
- <item>If E is a function call <c>E_m:E_0(E_1, ..., E_k)</c>,
- then Rep(E) =
- <c>{call,LINE,{remote,LINE,Rep(E_m),Rep(E_0)},[Rep(E_1), ..., Rep(E_k)]}</c>.
- </item>
- <item>If E is an if expression <c>if Ic_1 ; ... ; Ic_k end</c>,
- where each <c>Ic_i</c> is an if clause then Rep(E) =
- <c>{'if',LINE,[Rep(Ic_1), ..., Rep(Ic_k)]}</c>.</item>
- <item>If E is a list comprehension <c>[E_0 || Q_1, ..., Q_k]</c>,
- where each <c>Q_i</c> is a qualifier, then Rep(E) =
- <c>{lc,LINE,Rep(E_0),[Rep(Q_1), ..., Rep(Q_k)]}</c>. For Rep(Q), see
- below.</item>
- <item>If E is a map creation <c>#{A_1, ..., A_k}</c>,
- where each <c>A_i</c> is an association <c>E_i_1 => E_i_2</c>
- or <c>E_i_1 := E_i_2</c>, then Rep(E) =
- <c>{map,LINE,[Rep(A_1), ..., Rep(A_k)]}</c>. For Rep(A), see
- below.</item>
- <item>If E is a map update <c>E_0#{A_1, ..., A_k}</c>,
- where each <c>A_i</c> is an association <c>E_i_1 => E_i_2</c>
- or <c>E_i_1 := E_i_2</c>, then Rep(E) =
- <c>{map,LINE,Rep(E_0),[Rep(A_1), ..., Rep(A_k)]}</c>.
- For Rep(A), see below.</item>
- <item>If E is a match operator expression <c>P = E_0</c>,
- where <c>P</c> is a pattern, then
- Rep(E) = <c>{match,LINE,Rep(P),Rep(E_0)}</c>.</item>
- <item>If E is nil, <c>[]</c>, then
- Rep(E) = <c>{nil,LINE}</c>.</item>
- <item>If E is an operator expression <c>E_1 Op E_2</c>,
- where <c>Op</c> is a binary operator other than the match
- operator <c>=</c>, then
- Rep(E) = <c>{op,LINE,Op,Rep(E_1),Rep(E_2)}</c>.</item>
- <item>If E is an operator expression <c>Op E_0</c>,
- where <c>Op</c> is a unary operator, then
- Rep(E) = <c>{op,LINE,Op,Rep(E_0)}</c>.</item>
- <item>If E is a parenthesized expression <c>( E_0 )</c>, then
- Rep(E) = <c>Rep(E_0)</c>, that is, parenthesized
- expressions cannot be distinguished from their bodies.</item>
- <item>If E is a receive expression <c>receive Cc_1 ; ... ; Cc_k end</c>,
- where each <c>Cc_i</c> is a case clause then Rep(E) =
- <c>{'receive',LINE,[Rep(Cc_1), ..., Rep(Cc_k)]}</c>.</item>
- <item>If E is a receive expression
- <c>receive Cc_1 ; ... ; Cc_k after E_0 -> B_t end</c>,
- where each <c>Cc_i</c> is a case clause,
- <c>E_0</c> is an expression and <c>B_t</c> is a body, then Rep(E) =
- <c>{'receive',LINE,[Rep(Cc_1), ..., Rep(Cc_k)],Rep(E_0),Rep(B_t)}</c>.</item>
- <item>If E is a record creation
- <c>#Name{Field_1=E_1, ..., Field_k=E_k}</c>,
- where each <c>Field_i</c> is an atom or <c>_</c>, then Rep(E) =
- <c>{record,LINE,Name,[{record_field,LINE,Rep(Field_1),Rep(E_1)}, ..., {record_field,LINE,Rep(Field_k),Rep(E_k)}]}</c>.</item>
- <item>If E is a record field access <c>E_0#Name.Field</c>,
- where <c>Field</c> is an atom, then
- Rep(E) = <c>{record_field,LINE,Rep(E_0),Name,Rep(Field)}</c>.</item>
- <item>If E is a record field index <c>#Name.Field</c>,
- where <c>Field</c> is an atom, then
- Rep(E) = <c>{record_index,LINE,Name,Rep(Field)}</c>.</item>
- <item>If E is a record update
- <c>E_0#Name{Field_1=E_1, ..., Field_k=E_k}</c>,
- where each <c>Field_i</c> is an atom, then Rep(E) =
- <c>{record,LINE,Rep(E_0),Name,[{record_field,LINE,Rep(Field_1),Rep(E_1)}, ..., {record_field,LINE,Rep(Field_k),Rep(E_k)}]}</c>.</item>
- <item>If E is a tuple skeleton <c>{E_1, ..., E_k}</c>, then
- Rep(E) = <c>{tuple,LINE,[Rep(E_1), ..., Rep(E_k)]}</c>.</item>
- <item>If E is a try expression <c>try B catch Tc_1 ; ... ; Tc_k end</c>,
- where <c>B</c> is a body and each <c>Tc_i</c> is a catch clause then
- Rep(E) =
- <c>{'try',LINE,Rep(B),[],[Rep(Tc_1), ..., Rep(Tc_k)],[]}</c>.</item>
- <item>If E is a try expression
- <c>try B of Cc_1 ; ... ; Cc_k catch Tc_1 ; ... ; Tc_n end</c>,
- where <c>B</c> is a body,
- each <c>Cc_i</c> is a case clause and
- each <c>Tc_j</c> is a catch clause then Rep(E) =
- <c>{'try',LINE,Rep(B),[Rep(Cc_1), ..., Rep(Cc_k)],[Rep(Tc_1), ..., Rep(Tc_n)],[]}</c>.</item>
- <item>If E is a try expression <c>try B after A end</c>,
- where <c>B</c> and <c>A</c> are bodies then Rep(E) =
- <c>{'try',LINE,Rep(B),[],[],Rep(A)}</c>.</item>
- <item>If E is a try expression
- <c>try B of Cc_1 ; ... ; Cc_k after A end</c>,
- where <c>B</c> and <c>A</c> are a bodies and
- each <c>Cc_i</c> is a case clause then Rep(E) =
- <c>{'try',LINE,Rep(B),[Rep(Cc_1), ..., Rep(Cc_k)],[],Rep(A)}</c>.</item>
- <item>If E is a try expression
- <c>try B catch Tc_1 ; ... ; Tc_k after A end</c>,
- where <c>B</c> and <c>A</c> are bodies and
- each <c>Tc_i</c> is a catch clause then Rep(E) =
- <c>{'try',LINE,Rep(B),[],[Rep(Tc_1), ..., Rep(Tc_k)],Rep(A)}</c>.</item>
- <item>If E is a try expression
- <c>try B of Cc_1 ; ... ; Cc_k catch Tc_1 ; ... ; Tc_n after A end</c>,
- where <c>B</c> and <c>A</c> are a bodies,
- each <c>Cc_i</c> is a case clause, and
- each <c>Tc_j</c> is a catch clause then
- Rep(E) =
- <c>{'try',LINE,Rep(B),[Rep(Cc_1), ..., Rep(Cc_k)],[Rep(Tc_1), ..., Rep(Tc_n)],Rep(A)}</c>.</item>
- <item>If E is a variable <c>V</c>, then Rep(E) = <c>{var,LINE,A}</c>,
- where <c>A</c> is an atom with a printname consisting of the same
- characters as <c>V</c>.</item>
+ <item>
+ <p>If E is an atomic literal <c>L</c>, then Rep(E) = Rep(L).</p>
+ </item>
+ <item>
+ <p>If E is a bitstring comprehension
+ <c>&lt;&lt;E_0 || Q_1, ..., Q_k>></c>,
+ where each <c>Q_i</c> is a qualifier, then Rep(E) =
+ <c>{bc,LINE,Rep(E_0),[Rep(Q_1), ..., Rep(Q_k)]}</c>.
+ For Rep(Q), see below.</p>
+ </item>
+ <item>
+ <p>If E is a bitstring constructor
+ <c>&lt;&lt;E_1:Size_1/TSL_1, ..., E_k:Size_k/TSL_k>></c>,
+ where each <c>Size_i</c> is an expression and each
+ <c>TSL_i</c> is a type specificer list, then Rep(E) =
+ <c>{bin,LINE,[{bin_element,LINE,Rep(E_1),Rep(Size_1),Rep(TSL_1)},
+ ..., {bin_element,LINE,Rep(E_k),Rep(Size_k),Rep(TSL_k)}]}</c>.
+ For Rep(TSL), see below.
+ An omitted <c>Size_i</c> is represented by <c>default</c>.
+ An omitted <c>TSL_i</c> is represented by <c>default</c>.</p>
+ </item>
+ <item>
+ <p>If E is a block expression <c>begin B end</c>,
+ where <c>B</c> is a body, then Rep(E) =
+ <c>{block,LINE,Rep(B)}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a case expression <c>case E_0 of Cc_1 ; ... ; Cc_k end</c>,
+ where <c>E_0</c> is an expression and each <c>Cc_i</c> is a
+ case clause, then Rep(E) =
+ <c>{'case',LINE,Rep(E_0),[Rep(Cc_1), ..., Rep(Cc_k)]}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a catch expression <c>catch E_0</c>, then Rep(E) =
+ <c>{'catch',LINE,Rep(E_0)}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a cons skeleton <c>[E_h | E_t]</c>, then Rep(E) =
+ <c>{cons,LINE,Rep(E_h),Rep(E_t)}</c>.</p>
+ </item>
+ <item>
+ <p>>If E is a fun expression <c>fun Name/Arity</c>, then Rep(E) =
+ <c>{'fun',LINE,{function,Name,Arity}}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a fun expression <c>fun Module:Name/Arity</c>, then Rep(E) =
+ <c>{'fun',LINE,{function,Rep(Module),Rep(Name),Rep(Arity)}}</c>.
+ (Before Erlang/OTP R15: Rep(E) =
+ <c>{'fun',LINE,{function,Module,Name,Arity}}</c>.)</p>
+ </item>
+ <item>
+ <p>If E is a fun expression <c>fun Fc_1 ; ... ; Fc_k end</c>,
+ where each <c>Fc_i</c> is a function clause, then Rep(E) =
+ <c>{'fun',LINE,{clauses,[Rep(Fc_1), ..., Rep(Fc_k)]}}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a fun expression <c>fun Name Fc_1 ; ... ; Name Fc_k end</c>,
+ where <c>Name</c> is a variable and each
+ <c>Fc_i</c> is a function clause, then Rep(E) =
+ <c>{named_fun,LINE,Name,[Rep(Fc_1), ..., Rep(Fc_k)]}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a function call <c>E_0(E_1, ..., E_k)</c>, then Rep(E) =
+ <c>{call,LINE,Rep(E_0),[Rep(E_1), ..., Rep(E_k)]}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a function call <c>E_m:E_0(E_1, ..., E_k)</c>, then Rep(E) =
+ <c>{call,LINE,{remote,LINE,Rep(E_m),Rep(E_0)},[Rep(E_1), ...,
+ Rep(E_k)]}</c>.</p>
+ </item>
+ <item>
+ <p>If E is an if expression <c>if Ic_1 ; ... ; Ic_k end</c>,
+ where each <c>Ic_i</c> is an if clause, then Rep(E) =
+ <c>{'if',LINE,[Rep(Ic_1), ..., Rep(Ic_k)]}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a list comprehension <c>[E_0 || Q_1, ..., Q_k]</c>,
+ where each <c>Q_i</c> is a qualifier, then Rep(E) =
+ <c>{lc,LINE,Rep(E_0),[Rep(Q_1), ..., Rep(Q_k)]}</c>.
+ For Rep(Q), see below.</p>
+ </item>
+ <item>
+ <p>If E is a map creation <c>#{A_1, ..., A_k}</c>,
+ where each <c>A_i</c> is an association <c>E_i_1 => E_i_2</c>
+ or <c>E_i_1 := E_i_2</c>, then Rep(E) =
+ <c>{map,LINE,[Rep(A_1), ..., Rep(A_k)]}</c>.
+ For Rep(A), see below.</p>
+ </item>
+ <item>
+ <p>If E is a map update <c>E_0#{A_1, ..., A_k}</c>,
+ where each <c>A_i</c> is an association <c>E_i_1 => E_i_2</c>
+ or <c>E_i_1 := E_i_2</c>, then Rep(E) =
+ <c>{map,LINE,Rep(E_0),[Rep(A_1), ..., Rep(A_k)]}</c>.
+ For Rep(A), see below.</p>
+ </item>
+ <item>
+ <p>If E is a match operator expression <c>P = E_0</c>,
+ where <c>P</c> is a pattern, then Rep(E) =
+ <c>{match,LINE,Rep(P),Rep(E_0)}</c>.</p>
+ </item>
+ <item>
+ <p>If E is nil, <c>[]</c>, then Rep(E) = <c>{nil,LINE}</c>.</p>
+ </item>
+ <item>
+ <p>If E is an operator expression <c>E_1 Op E_2</c>,
+ where <c>Op</c> is a binary operator other than match operator
+ <c>=</c>, then Rep(E) =
+ <c>{op,LINE,Op,Rep(E_1),Rep(E_2)}</c>.</p>
+ </item>
+ <item>
+ <p>If E is an operator expression <c>Op E_0</c>,
+ where <c>Op</c> is a unary operator, then Rep(E) =
+ <c>{op,LINE,Op,Rep(E_0)}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a parenthesized expression <c>( E_0 )</c>, then Rep(E) =
+ <c>Rep(E_0)</c>, that is, parenthesized expressions cannot be
+ distinguished from their bodies.</p>
+ </item>
+ <item>
+ <p>If E is a receive expression <c>receive Cc_1 ; ... ; Cc_k end</c>,
+ where each <c>Cc_i</c> is a case clause, then Rep(E) =
+ <c>{'receive',LINE,[Rep(Cc_1), ..., Rep(Cc_k)]}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a receive expression
+ <c>receive Cc_1 ; ... ; Cc_k after E_0 -> B_t end</c>,
+ where each <c>Cc_i</c> is a case clause, <c>E_0</c> is an expression,
+ and <c>B_t</c> is a body, then Rep(E) =
+ <c>{'receive',LINE,[Rep(Cc_1), ...,
+ Rep(Cc_k)],Rep(E_0),Rep(B_t)}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a record creation
+ <c>#Name{Field_1=E_1, ..., Field_k=E_k}</c>,
+ where each <c>Field_i</c> is an atom or <c>_</c>, then Rep(E) =
+ <c>{record,LINE,Name,[{record_field,LINE,Rep(Field_1),Rep(E_1)},
+ ..., {record_field,LINE,Rep(Field_k),Rep(E_k)}]}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a record field access <c>E_0#Name.Field</c>,
+ where <c>Field</c> is an atom, then Rep(E) =
+ <c>{record_field,LINE,Rep(E_0),Name,Rep(Field)}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a record field index <c>#Name.Field</c>,
+ where <c>Field</c> is an atom, then Rep(E) =
+ <c>{record_index,LINE,Name,Rep(Field)}</c>.</p></item>
+ <item>
+ <p>If E is a record update
+ <c>E_0#Name{Field_1=E_1, ..., Field_k=E_k}</c>,
+ where each <c>Field_i</c> is an atom, then Rep(E) =
+ <c>{record,LINE,Rep(E_0),Name,[{record_field,LINE,Rep(Field_1),Rep(E_1)},
+ ..., {record_field,LINE,Rep(Field_k),Rep(E_k)}]}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a tuple skeleton <c>{E_1, ..., E_k}</c>, then Rep(E) =
+ <c>{tuple,LINE,[Rep(E_1), ..., Rep(E_k)]}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a try expression <c>try B catch Tc_1 ; ... ; Tc_k end</c>,
+ where <c>B</c> is a body and each <c>Tc_i</c> is a catch clause,
+ then Rep(E) =
+ <c>{'try',LINE,Rep(B),[],[Rep(Tc_1), ..., Rep(Tc_k)],[]}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a try expression
+ <c>try B of Cc_1 ; ... ; Cc_k catch Tc_1 ; ... ; Tc_n end</c>,
+ where <c>B</c> is a body, each <c>Cc_i</c> is a case clause, and
+ each <c>Tc_j</c> is a catch clause, then Rep(E) =
+ <c>{'try',LINE,Rep(B),[Rep(Cc_1), ..., Rep(Cc_k)],[Rep(Tc_1), ...,
+ Rep(Tc_n)],[]}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a try expression <c>try B after A end</c>,
+ where <c>B</c> and <c>A</c> are bodies, then Rep(E) =
+ <c>{'try',LINE,Rep(B),[],[],Rep(A)}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a try expression
+ <c>try B of Cc_1 ; ... ; Cc_k after A end</c>,
+ where <c>B</c> and <c>A</c> are a bodies,
+ and each <c>Cc_i</c> is a case clause, then Rep(E) =
+ <c>{'try',LINE,Rep(B),[Rep(Cc_1), ...,
+ Rep(Cc_k)],[],Rep(A)}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a try expression
+ <c>try B catch Tc_1 ; ... ; Tc_k after A end</c>,
+ where <c>B</c> and <c>A</c> are bodies,
+ and each <c>Tc_i</c> is a catch clause, then Rep(E) =
+ <c>{'try',LINE,Rep(B),[],[Rep(Tc_1), ...,
+ Rep(Tc_k)],Rep(A)}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a try expression
+ <c>try B of Cc_1 ; ... ; Cc_k catch Tc_1 ; ... ; Tc_n after A
+ end</c>, where <c>B</c> and <c>A</c> are a bodies,
+ each <c>Cc_i</c> is a case clause,
+ and each <c>Tc_j</c> is a catch clause, then Rep(E) =
+ <c>{'try',LINE,Rep(B),[Rep(Cc_1), ..., Rep(Cc_k)],[Rep(Tc_1), ...,
+ Rep(Tc_n)],Rep(A)}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a variable <c>V</c>, then Rep(E) = <c>{var,LINE,A}</c>,
+ where <c>A</c> is an atom with a printname consisting of the same
+ characters as <c>V</c>.</p>
+ </item>
</list>
<section>
<title>Qualifiers</title>
- <p>A qualifier Q is one of the following alternatives:</p>
+ <p>A qualifier Q is one of the following:</p>
+
<list type="bulleted">
- <item>If Q is a filter <c>E</c>, where <c>E</c> is an expression, then
- Rep(Q) = <c>Rep(E)</c>.</item>
- <item>If Q is a generator <c>P &lt;- E</c>, where <c>P</c> is
- a pattern and <c>E</c> is an expression, then
- Rep(Q) = <c>{generate,LINE,Rep(P),Rep(E)}</c>.</item>
- <item>If Q is a bit string generator
- <c>P &lt;= E</c>, where <c>P</c> is
- a pattern and <c>E</c> is an expression, then
- Rep(Q) = <c>{b_generate,LINE,Rep(P),Rep(E)}</c>.</item>
+ <item>
+ <p>If Q is a filter <c>E</c>, where <c>E</c> is an expression, then
+ Rep(Q) = <c>Rep(E)</c>.</p>
+ </item>
+ <item>
+ <p>If Q is a generator <c>P &lt;- E</c>, where <c>P</c> is
+ a pattern and <c>E</c> is an expression, then Rep(Q) =
+ <c>{generate,LINE,Rep(P),Rep(E)}</c>.</p>
+ </item>
+ <item>
+ <p>If Q is a bitstring generator <c>P &lt;= E</c>, where <c>P</c> is
+ a pattern and <c>E</c> is an expression, then Rep(Q) =
+ <c>{b_generate,LINE,Rep(P),Rep(E)}</c>.</p>
+ </item>
</list>
</section>
<section>
- <title>Bit String Element Type Specifiers</title>
- <p>A type specifier list TSL for a bit string element is a sequence
+ <title>Bitstring Element Type Specifiers</title>
+ <p>A type specifier list TSL for a bitstring element is a sequence
of type specifiers <c>TS_1 - ... - TS_k</c>, and
Rep(TSL) = <c>[Rep(TS_1), ..., Rep(TS_k)]</c>.</p>
+
<list type="bulleted">
- <item>If TS is a type specifier <c>A</c>, where <c>A</c> is an atom,
- then Rep(TS) = <c>A</c>.</item>
- <item>If TS is a type specifier <c>A:Value</c>,
- where <c>A</c> is an atom and <c>Value</c> is an integer,
- then Rep(TS) = <c>{A,Value}</c>.</item>
+ <item>
+ <p>If TS is a type specifier <c>A</c>, where <c>A</c> is an atom,
+ then Rep(TS) = <c>A</c>.</p>
+ </item>
+ <item>
+ <p>If TS is a type specifier <c>A:Value</c>,
+ where <c>A</c> is an atom and <c>Value</c> is an integer,
+ then Rep(TS) = <c>{A,Value}</c>.</p>
+ </item>
</list>
</section>
<section>
<title>Associations</title>
- <p>An association A is one of the following alternatives:</p>
+ <p>An association A is one of the following:</p>
+
<list type="bulleted">
- <item>If A is an association <c>K => V</c>,
- then Rep(A) = <c>{map_field_assoc,LINE,Rep(K),Rep(V)}</c>.
- </item>
- <item>If A is an association <c>K := V</c>,
- then Rep(A) = <c>{map_field_exact,LINE,Rep(K),Rep(V)}</c>.
- </item>
+ <item>
+ <p>If A is an association <c>K => V</c>,
+ then Rep(A) = <c>{map_field_assoc,LINE,Rep(K),Rep(V)}</c>.</p>
+ </item>
+ <item>
+ <p>If A is an association <c>K := V</c>,
+ then Rep(A) = <c>{map_field_exact,LINE,Rep(K),Rep(V)}</c>.</p>
+ </item>
</list>
</section>
</section>
<section>
<title>Clauses</title>
- <p>There are function clauses, if clauses, case clauses
+ <p>There are function clauses, if clauses, case clauses,
and catch clauses.</p>
- <p>A clause <c>C</c> is one of the following alternatives:</p>
+
+ <p>A clause C is one of the following:</p>
+
<list type="bulleted">
- <item>If C is a case clause <c>P -> B</c>,
- where <c>P</c> is a pattern and <c>B</c> is a body, then
- Rep(C) = <c>{clause,LINE,[Rep(P)],[],Rep(B)}</c>.</item>
- <item>If C is a case clause <c>P when Gs -> B</c>,
- where <c>P</c> is a pattern,
- <c>Gs</c> is a guard sequence and <c>B</c> is a body, then
- Rep(C) = <c>{clause,LINE,[Rep(P)],Rep(Gs),Rep(B)}</c>.</item>
- <item>If C is a catch clause <c>P -> B</c>,
- where <c>P</c> is a pattern and <c>B</c> is a body, then
- Rep(C) = <c>{clause,LINE,[Rep({throw,P,_})],[],Rep(B)}</c>.</item>
- <item>If C is a catch clause <c>X : P -> B</c>,
- where <c>X</c> is an atomic literal or a variable pattern,
- <c>P</c> is a pattern, and <c>B</c> is a body, then
- Rep(C) = <c>{clause,LINE,[Rep({X,P,_})],[],Rep(B)}</c>.</item>
- <item>If C is a catch clause <c>P when Gs -> B</c>,
- where <c>P</c> is a pattern, <c>Gs</c> is a guard sequence,
- and <c>B</c> is a body, then
- Rep(C) = <c>{clause,LINE,[Rep({throw,P,_})],Rep(Gs),Rep(B)}</c>.</item>
- <item>If C is a catch clause <c>X : P when Gs -> B</c>,
- where <c>X</c> is an atomic literal or a variable pattern,
- <c>P</c> is a pattern, <c>Gs</c> is a guard sequence,
- and <c>B</c> is a body, then
- Rep(C) = <c>{clause,LINE,[Rep({X,P,_})],Rep(Gs),Rep(B)}</c>.</item>
- <item>If C is a function clause <c>( Ps ) -> B</c>,
- where <c>Ps</c> is a pattern sequence and <c>B</c> is a body, then
- Rep(C) = <c>{clause,LINE,Rep(Ps),[],Rep(B)}</c>.</item>
- <item>If C is a function clause <c>( Ps ) when Gs -> B</c>,
- where <c>Ps</c> is a pattern sequence,
- <c>Gs</c> is a guard sequence and <c>B</c> is a body, then
- Rep(C) = <c>{clause,LINE,Rep(Ps),Rep(Gs),Rep(B)}</c>.</item>
- <item>If C is an if clause <c>Gs -> B</c>,
- where <c>Gs</c> is a guard sequence and <c>B</c> is a body, then
- Rep(C) = <c>{clause,LINE,[],Rep(Gs),Rep(B)}</c>.</item>
+ <item>
+ <p>If C is a case clause <c>P -> B</c>,
+ where <c>P</c> is a pattern and <c>B</c> is a body, then
+ Rep(C) = <c>{clause,LINE,[Rep(P)],[],Rep(B)}</c>.</p>
+ </item>
+ <item>
+ <p>If C is a case clause <c>P when Gs -> B</c>,
+ where <c>P</c> is a pattern,
+ <c>Gs</c> is a guard sequence, and <c>B</c> is a body, then
+ Rep(C) = <c>{clause,LINE,[Rep(P)],Rep(Gs),Rep(B)}</c>.</p>
+ </item>
+ <item>
+ <p>If C is a catch clause <c>P -> B</c>,
+ where <c>P</c> is a pattern and <c>B</c> is a body, then
+ Rep(C) = <c>{clause,LINE,[Rep({throw,P,_})],[],Rep(B)}</c>.</p>
+ </item>
+ <item>
+ <p>If C is a catch clause <c>X : P -> B</c>,
+ where <c>X</c> is an atomic literal or a variable pattern,
+ <c>P</c> is a pattern, and <c>B</c> is a body, then
+ Rep(C) = <c>{clause,LINE,[Rep({X,P,_})],[],Rep(B)}</c>.</p>
+ </item>
+ <item>
+ <p>If C is a catch clause <c>P when Gs -> B</c>,
+ where <c>P</c> is a pattern, <c>Gs</c> is a guard sequence,
+ and <c>B</c> is a body, then
+ Rep(C) = <c>{clause,LINE,[Rep({throw,P,_})],Rep(Gs),Rep(B)}</c>.</p>
+ </item>
+ <item>
+ <p>If C is a catch clause <c>X : P when Gs -> B</c>,
+ where <c>X</c> is an atomic literal or a variable pattern,
+ <c>P</c> is a pattern, <c>Gs</c> is a guard sequence,
+ and <c>B</c> is a body, then
+ Rep(C) = <c>{clause,LINE,[Rep({X,P,_})],Rep(Gs),Rep(B)}</c>.</p>
+ </item>
+ <item>
+ <p>If C is a function clause <c>( Ps ) -> B</c>,
+ where <c>Ps</c> is a pattern sequence and <c>B</c> is a body, then
+ Rep(C) = <c>{clause,LINE,Rep(Ps),[],Rep(B)}</c>.</p>
+ </item>
+ <item>
+ <p>If C is a function clause <c>( Ps ) when Gs -> B</c>,
+ where <c>Ps</c> is a pattern sequence,
+ <c>Gs</c> is a guard sequence and <c>B</c> is a body, then
+ Rep(C) = <c>{clause,LINE,Rep(Ps),Rep(Gs),Rep(B)}</c>.</p>
+ </item>
+ <item>
+ <p>If C is an if clause <c>Gs -> B</c>,
+ where <c>Gs</c> is a guard sequence and <c>B</c> is a body, then
+ Rep(C) = <c>{clause,LINE,[],Rep(Gs),Rep(B)}</c>.</p>
+ </item>
</list>
</section>
@@ -458,205 +650,292 @@
<title>Guards</title>
<p>A guard sequence Gs is a sequence of guards <c>G_1; ...; G_k</c>, and
Rep(Gs) = <c>[Rep(G_1), ..., Rep(G_k)]</c>. If the guard sequence is
- empty, Rep(Gs) = <c>[]</c>.</p>
- <p>A guard G is a nonempty sequence of guard tests
+ empty, then Rep(Gs) = <c>[]</c>.</p>
+
+ <p>A guard G is a non-empty sequence of guard tests
<c>Gt_1, ..., Gt_k</c>, and Rep(G) =
<c>[Rep(Gt_1), ..., Rep(Gt_k)]</c>.</p>
- <p>A guard test <c>Gt</c> is one of the following alternatives:</p>
+
+ <p>A guard test Gt is one of the following:</p>
+
<list type="bulleted">
- <item>If Gt is an atomic literal <c>L</c>, then Rep(Gt) = Rep(L).</item>
- <item>If Gt is a bit string constructor
- <c>&lt;&lt;Gt_1:Size_1/TSL_1, ..., Gt_k:Size_k/TSL_k>></c>,
- where each <c>Size_i</c> is a guard test and each
- <c>TSL_i</c> is a type specificer list, then
- Rep(Gt) = <c>{bin,LINE,[{bin_element,LINE,Rep(Gt_1),Rep(Size_1),Rep(TSL_1)}, ..., {bin_element,LINE,Rep(Gt_k),Rep(Size_k),Rep(TSL_k)}]}</c>.
- For Rep(TSL), see above.
- An omitted <c>Size_i</c> is represented by <c>default</c>.
- An omitted <c>TSL_i</c> is represented by <c>default</c>.</item>
- <item>If Gt is a cons skeleton <c>[Gt_h | Gt_t]</c>, then
- Rep(Gt) = <c>{cons,LINE,Rep(Gt_h),Rep(Gt_t)}</c>.</item>
- <item>If Gt is a function call <c>A(Gt_1, ..., Gt_k)</c>,
- where <c>A</c> is an atom, then Rep(Gt) =
- <c>{call,LINE,Rep(A),[Rep(Gt_1), ..., Rep(Gt_k)]}</c>.</item>
- <item>If Gt is a function call <c>A_m:A(Gt_1, ..., Gt_k)</c>,
- where <c>A_m</c> is the atom <c>erlang</c> and <c>A</c> is
- an atom or an operator, then Rep(Gt) =
- <c>{call,LINE,{remote,LINE,Rep(A_m),Rep(A)},[Rep(Gt_1), ..., Rep(Gt_k)]}</c>.</item>
- <item>If Gt is a map creation <c>#{A_1, ..., A_k}</c>,
- where each <c>A_i</c> is an association <c>Gt_i_1 => Gt_i_2</c>
- or <c>Gt_i_1 := Gt_i_2</c>, then Rep(Gt) =
- <c>{map,LINE,[Rep(A_1), ..., Rep(A_k)]}</c>. For Rep(A), see
- above.</item>
- <item>If Gt is a map update <c>Gt_0#{A_1, ..., A_k}</c>, where each
- <c>A_i</c> is an association <c>Gt_i_1 => Gt_i_2</c>
- or <c>Gt_i_1 := Gt_i_2</c>, then Rep(Gt) =
- <c>{map,LINE,Rep(Gt_0),[Rep(A_1), ..., Rep(A_k)]}</c>.
- For Rep(A), see above.</item>
- <item>If Gt is nil, <c>[]</c>,
- then Rep(Gt) = <c>{nil,LINE}</c>.</item>
- <item>If Gt is an operator guard test <c>Gt_1 Op Gt_2</c>,
- where <c>Op</c> is a binary operator other than the match
- operator <c>=</c>, then
- Rep(Gt) = <c>{op,LINE,Op,Rep(Gt_1),Rep(Gt_2)}</c>.</item>
- <item>If Gt is an operator guard test <c>Op Gt_0</c>,
- where <c>Op</c> is a unary operator, then
- Rep(Gt) = <c>{op,LINE,Op,Rep(Gt_0)}</c>.</item>
- <item>If Gt is a parenthesized guard test <c>( Gt_0 )</c>, then
- Rep(Gt) = <c>Rep(Gt_0)</c>, that is, parenthesized
- guard tests cannot be distinguished from their bodies.</item>
- <item>If Gt is a record creation
- <c>#Name{Field_1=Gt_1, ..., Field_k=Gt_k}</c>,
- where each <c>Field_i</c> is an atom or <c>_</c>, then Rep(Gt) =
- <c>{record,LINE,Name,[{record_field,LINE,Rep(Field_1),Rep(Gt_1)}, ..., {record_field,LINE,Rep(Field_k),Rep(Gt_k)}]}</c>.</item>
- <item>If Gt is a record field access <c>Gt_0#Name.Field</c>,
- where <c>Field</c> is an atom, then
- Rep(Gt) = <c>{record_field,LINE,Rep(Gt_0),Name,Rep(Field)}</c>.</item>
- <item>If Gt is a record field index <c>#Name.Field</c>,
- where <c>Field</c> is an atom, then
- Rep(Gt) = <c>{record_index,LINE,Name,Rep(Field)}</c>.</item>
- <item>If Gt is a tuple skeleton <c>{Gt_1, ..., Gt_k}</c>, then
- Rep(Gt) = <c>{tuple,LINE,[Rep(Gt_1), ..., Rep(Gt_k)]}</c>.</item>
- <item>If Gt is a variable pattern <c>V</c>, then
- Rep(Gt) = <c>{var,LINE,A}</c>, where A is an atom with
- a printname consisting of the same characters as <c>V</c>.</item>
+ <item>
+ <p>If Gt is an atomic literal <c>L</c>, then Rep(Gt) = Rep(L).</p>
+ </item>
+ <item>
+ <p>If Gt is a bitstring constructor
+ <c>&lt;&lt;Gt_1:Size_1/TSL_1, ..., Gt_k:Size_k/TSL_k>></c>,
+ where each <c>Size_i</c> is a guard test and each
+ <c>TSL_i</c> is a type specificer list, then Rep(Gt) =
+ <c>{bin,LINE,[{bin_element,LINE,Rep(Gt_1),Rep(Size_1),Rep(TSL_1)},
+ ..., {bin_element,LINE,Rep(Gt_k),Rep(Size_k),Rep(TSL_k)}]}</c>.
+ For Rep(TSL), see above.
+ An omitted <c>Size_i</c> is represented by <c>default</c>.
+ An omitted <c>TSL_i</c> is represented by <c>default</c>.</p>
+ </item>
+ <item>
+ <p>If Gt is a cons skeleton <c>[Gt_h | Gt_t]</c>, then Rep(Gt) =
+ <c>{cons,LINE,Rep(Gt_h),Rep(Gt_t)}</c>.</p>
+ </item>
+ <item>
+ <p>If Gt is a function call <c>A(Gt_1, ..., Gt_k)</c>,
+ where <c>A</c> is an atom, then Rep(Gt) =
+ <c>{call,LINE,Rep(A),[Rep(Gt_1), ..., Rep(Gt_k)]}</c>.</p>
+ </item>
+ <item>
+ <p>If Gt is a function call <c>A_m:A(Gt_1, ..., Gt_k)</c>,
+ where <c>A_m</c> is the atom <c>erlang</c> and <c>A</c> is
+ an atom or an operator, then Rep(Gt) =
+ <c>{call,LINE,{remote,LINE,Rep(A_m),Rep(A)},[Rep(Gt_1), ...,
+ Rep(Gt_k)]}</c>.</p>
+ </item>
+ <item>
+ <p>If Gt is a map creation <c>#{A_1, ..., A_k}</c>,
+ where each <c>A_i</c> is an association <c>Gt_i_1 => Gt_i_2</c>
+ or <c>Gt_i_1 := Gt_i_2</c>, then Rep(Gt) =
+ <c>{map,LINE,[Rep(A_1), ..., Rep(A_k)]}</c>.
+ For Rep(A), see above.</p>
+ </item>
+ <item>
+ <p>If Gt is a map update <c>Gt_0#{A_1, ..., A_k}</c>,
+ where each <c>A_i</c> is an association <c>Gt_i_1 => Gt_i_2</c>
+ or <c>Gt_i_1 := Gt_i_2</c>, then Rep(Gt) =
+ <c>{map,LINE,Rep(Gt_0),[Rep(A_1), ..., Rep(A_k)]}</c>.
+ For Rep(A), see above.</p>
+ </item>
+ <item>
+ <p>If Gt is nil, <c>[]</c>, then Rep(Gt) = <c>{nil,LINE}</c>.</p>
+ </item>
+ <item>
+ <p>If Gt is an operator guard test <c>Gt_1 Op Gt_2</c>,
+ where <c>Op</c> is a binary operator other than match
+ operator <c>=</c>, then Rep(Gt) =
+ <c>{op,LINE,Op,Rep(Gt_1),Rep(Gt_2)}</c>.</p>
+ </item>
+ <item>
+ <p>If Gt is an operator guard test <c>Op Gt_0</c>,
+ where <c>Op</c> is a unary operator, then Rep(Gt) =
+ <c>{op,LINE,Op,Rep(Gt_0)}</c>.</p>
+ </item>
+ <item>
+ <p>If Gt is a parenthesized guard test <c>( Gt_0 )</c>, then Rep(Gt) =
+ <c>Rep(Gt_0)</c>, that is, parenthesized
+ guard tests cannot be distinguished from their bodies.</p>
+ </item>
+ <item>
+ <p>If Gt is a record creation
+ <c>#Name{Field_1=Gt_1, ..., Field_k=Gt_k}</c>,
+ where each <c>Field_i</c> is an atom or <c>_</c>, then Rep(Gt) =
+ <c>{record,LINE,Name,[{record_field,LINE,Rep(Field_1),Rep(Gt_1)},
+ ..., {record_field,LINE,Rep(Field_k),Rep(Gt_k)}]}</c>.</p>
+ </item>
+ <item>
+ <p>If Gt is a record field access <c>Gt_0#Name.Field</c>,
+ where <c>Field</c> is an atom, then Rep(Gt) =
+ <c>{record_field,LINE,Rep(Gt_0),Name,Rep(Field)}</c>.</p>
+ </item>
+ <item>
+ <p>If Gt is a record field index <c>#Name.Field</c>,
+ where <c>Field</c> is an atom, then Rep(Gt) =
+ <c>{record_index,LINE,Name,Rep(Field)}</c>.</p>
+ </item>
+ <item>
+ <p>If Gt is a tuple skeleton <c>{Gt_1, ..., Gt_k}</c>, then Rep(Gt) =
+ <c>{tuple,LINE,[Rep(Gt_1), ..., Rep(Gt_k)]}</c>.</p>
+ </item>
+ <item>
+ <p>If Gt is a variable pattern <c>V</c>, then Rep(Gt) =
+ <c>{var,LINE,A}</c>, where A is an atom with
+ a printname consisting of the same characters as <c>V</c>.</p>
+ </item>
</list>
- <p>Note that every guard test has the same source form as some expression,
- and is represented the same way as the corresponding expression.</p>
+
+ <p>Notice that every guard test has the same source form as some expression,
+ and is represented in the same way as the corresponding expression.</p>
</section>
<section>
<title>Types</title>
<list type="bulleted">
- <item>If T is an annotated type <c>A :: T_0</c>,
- where <c>A</c> is a variable, then Rep(T) =
- <c>{ann_type,LINE,[Rep(A),Rep(T_0)]}</c>.</item>
- <item>If T is an atom or integer literal L, then Rep(T) = Rep(L).
- </item>
- <item>If T is a bit string type <c>&lt;&lt;_:M,_:_*N>></c>,
- where <c>M</c> and <c>N</c> are singleton integer types, then Rep(T) =
- <c>{type,LINE,binary,[Rep(M),Rep(N)]}</c>.</item>
- <item>If T is the empty list type <c>[]</c>, then Rep(T) =
- <c>{type,Line,nil,[]}</c>.</item>
- <item>If T is a fun type <c>fun()</c>, then Rep(T) =
- <c>{type,LINE,'fun',[]}</c>.</item>
- <item>If T is a fun type <c>fun((...) -> T_0)</c>, then
- Rep(T) = <c>{type,LINE,'fun',[{type,LINE,any},Rep(T_0)]}</c>.
- </item>
- <item>If T is a fun type <c>fun(Ft)</c>, where
- <c>Ft</c> is a function type,
- then Rep(T) = <c>Rep(Ft)</c>. For Rep(Ft), see below.</item>
- <item>If T is an integer range type <c>L .. H</c>,
- where <c>L</c> and <c>H</c> are singleton integer types, then
- Rep(T) = <c>{type,LINE,range,[Rep(L),Rep(H)]}</c>.</item>
- <item>If T is a map type <c>map()</c>, then Rep(T) =
- <c>{type,LINE,map,any}</c>.</item>
- <item>If T is a map type <c>#{A_1, ..., A_k}</c>, where each
- <c>A_i</c> is an association type, then Rep(T) =
- <c>{type,LINE,map,[Rep(A_1), ..., Rep(A_k)]}</c>.
- For Rep(A), see below.</item>
- <item>If T is an operator type <c>T_1 Op T_2</c>,
- where <c>Op</c> is a binary operator (this is an occurrence of
- an expression that can be evaluated to an integer at compile
- time), then
- Rep(T) = <c>{op,LINE,Op,Rep(T_1),Rep(T_2)}</c>.</item>
- <item>If T is an operator type <c>Op T_0</c>, where <c>Op</c> is a
- unary operator (this is an occurrence of
- an expression that can be evaluated to an integer at compile time),
- then Rep(T) = <c>{op,LINE,Op,Rep(T_0)}</c>.</item>
- <item>If T is <c>( T_0 )</c>, then Rep(T) = <c>Rep(T_0)</c>,
- that is, parenthesized types cannot be distinguished from their
- bodies.</item>
- <item>If T is a predefined (or built-in) type <c>N(T_1, ..., T_k)</c>,
- then Rep(T) =
- <c>{type,LINE,N,[Rep(T_1), ..., Rep(T_k)]}</c>.</item>
- <item>If T is a record type <c>#Name{F_1, ..., F_k}</c>,
- where each <c>F_i</c> is a record field type, then Rep(T) =
- <c>{type,LINE,record,[Rep(Name),Rep(F_1), ..., Rep(F_k)]}</c>.
- For Rep(F), see below.</item>
- <item>If T is a remote type <c>M:N(T_1, ..., T_k)</c>, then Rep(T) =
- <c>{remote_type,LINE,[Rep(M),Rep(N),[Rep(T_1), ..., Rep(T_k)]]}</c>.
- </item>
- <item>If T is a tuple type <c>tuple()</c>, then Rep(T) =
- <c>{type,LINE,tuple,any}</c>.</item>
- <item>If T is a tuple type <c>{T_1, ..., T_k}</c>, then Rep(T) =
- <c>{type,LINE,tuple,[Rep(T_1), ..., Rep(T_k)]}</c>.</item>
- <item>If T is a type union <c>T_1 | ... | T_k</c>, then Rep(T) =
- <c>{type,LINE,union,[Rep(T_1), ..., Rep(T_k)]}</c>.</item>
- <item>If T is a type variable <c>V</c>, then Rep(T) =
- <c>{var,LINE,A}</c>, where <c>A</c> is an atom with a printname
- consisting of the same characters as <c>V</c>. A type variable
- is any variable except underscore (<c>_</c>).</item>
- <item>If T is a user-defined type <c>N(T_1, ..., T_k)</c>,
- then Rep(T) =
- <c>{user_type,LINE,N,[Rep(T_1), ..., Rep(T_k)]}</c>.</item>
+ <item>
+ <p>If T is an annotated type <c>A :: T_0</c>,
+ where <c>A</c> is a variable, then Rep(T) =
+ <c>{ann_type,LINE,[Rep(A),Rep(T_0)]}</c>.</p>
+ </item>
+ <item>
+ <p>If T is an atom or integer literal L, then Rep(T) = Rep(L).</p>
+ </item>
+ <item>
+ <p>If T is a bitstring type <c>&lt;&lt;_:M,_:_*N>></c>,
+ where <c>M</c> and <c>N</c> are singleton integer types, then Rep(T) =
+ <c>{type,LINE,binary,[Rep(M),Rep(N)]}</c>.</p>
+ </item>
+ <item>
+ <p>If T is the empty list type <c>[]</c>, then Rep(T) =
+ <c>{type,Line,nil,[]}</c>.</p>
+ </item>
+ <item>
+ <p>If T is a fun type <c>fun()</c>, then Rep(T) =
+ <c>{type,LINE,'fun',[]}</c>.</p>
+ </item>
+ <item>
+ <p>If T is a fun type <c>fun((...) -> T_0)</c>, then Rep(T) =
+ <c>{type,LINE,'fun',[{type,LINE,any},Rep(T_0)]}</c>.</p>
+ </item>
+ <item>
+ <p>If T is a fun type <c>fun(Ft)</c>, where
+ <c>Ft</c> is a function type, then Rep(T) = <c>Rep(Ft)</c>.
+ For Rep(Ft), see below.</p>
+ </item>
+ <item>
+ <p>If T is an integer range type <c>L .. H</c>,
+ where <c>L</c> and <c>H</c> are singleton integer types, then Rep(T) =
+ <c>{type,LINE,range,[Rep(L),Rep(H)]}</c>.</p>
+ </item>
+ <item>
+ <p>If T is a map type <c>map()</c>, then Rep(T) =
+ <c>{type,LINE,map,any}</c>.</p>
+ </item>
+ <item>
+ <p>If T is a map type <c>#{A_1, ..., A_k}</c>, where each
+ <c>A_i</c> is an association type, then Rep(T) =
+ <c>{type,LINE,map,[Rep(A_1), ..., Rep(A_k)]}</c>.
+ For Rep(A), see below.</p>
+ </item>
+ <item>
+ <p>If T is an operator type <c>T_1 Op T_2</c>,
+ where <c>Op</c> is a binary operator (this is an occurrence of
+ an expression that can be evaluated to an integer at compile
+ time), then Rep(T) =
+ <c>{op,LINE,Op,Rep(T_1),Rep(T_2)}</c>.</p>
+ </item>
+ <item>
+ <p>If T is an operator type <c>Op T_0</c>, where <c>Op</c> is a
+ unary operator (this is an occurrence of an expression that can
+ be evaluated to an integer at compile time), then Rep(T) =
+ <c>{op,LINE,Op,Rep(T_0)}</c>.</p>
+ </item>
+ <item>
+ <p>If T is <c>( T_0 )</c>, then Rep(T) = <c>Rep(T_0)</c>, that is,
+ parenthesized types cannot be distinguished from their bodies.</p>
+ </item>
+ <item>
+ <p>If T is a predefined (or built-in) type <c>N(T_1, ..., T_k)</c>,
+ then Rep(T) = <c>{type,LINE,N,[Rep(T_1), ..., Rep(T_k)]}</c>.</p>
+ </item>
+ <item>
+ <p>If T is a record type <c>#Name{F_1, ..., F_k}</c>,
+ where each <c>F_i</c> is a record field type, then Rep(T) =
+ <c>{type,LINE,record,[Rep(Name),Rep(F_1), ..., Rep(F_k)]}</c>.
+ For Rep(F), see below.</p>
+ </item>
+ <item>
+ <p>If T is a remote type <c>M:N(T_1, ..., T_k)</c>, then Rep(T) =
+ <c>{remote_type,LINE,[Rep(M),Rep(N),[Rep(T_1), ...,
+ Rep(T_k)]]}</c>.</p>
+ </item>
+ <item>
+ <p>If T is a tuple type <c>tuple()</c>, then Rep(T) =
+ <c>{type,LINE,tuple,any}</c>.</p>
+ </item>
+ <item>
+ <p>If T is a tuple type <c>{T_1, ..., T_k}</c>, then Rep(T) =
+ <c>{type,LINE,tuple,[Rep(T_1), ..., Rep(T_k)]}</c>.</p>
+ </item>
+ <item>
+ <p>If T is a type union <c>T_1 | ... | T_k</c>, then Rep(T) =
+ <c>{type,LINE,union,[Rep(T_1), ..., Rep(T_k)]}</c>.</p>
+ </item>
+ <item>
+ <p>If T is a type variable <c>V</c>, then Rep(T) =
+ <c>{var,LINE,A}</c>, where <c>A</c> is an atom with a printname
+ consisting of the same characters as <c>V</c>. A type variable
+ is any variable except underscore (<c>_</c>).</p>
+ </item>
+ <item>
+ <p>If T is a user-defined type <c>N(T_1, ..., T_k)</c>, then Rep(T) =
+ <c>{user_type,LINE,N,[Rep(T_1), ..., Rep(T_k)]}</c>.</p>
+ </item>
</list>
<section>
<title>Function Types</title>
- <p>A function type Ft is one of the following alternatives:</p>
+ <p>A function type Ft is one of the following:</p>
+
<list type="bulleted">
- <item>If Ft is a constrained function type <c>Ft_1 when Fc</c>,
- where <c>Ft_1</c> is a function type and
- <c>Fc</c> is a function constraint, then Rep(T) =
- <c>{type,LINE,bounded_fun,[Rep(Ft_1),Rep(Fc)]}</c>.
- For Rep(Fc), see below.</item>
- <item>If Ft is a function type <c>(T_1, ..., T_n) -> T_0</c>,
- where each <c>T_i</c> is a type, then
- Rep(Ft) = <c>{type,LINE,'fun',[{type,LINE,product,[Rep(T_1),
- ..., Rep(T_n)]},Rep(T_0)]}</c>.</item>
+ <item>
+ <p>If Ft is a constrained function type <c>Ft_1 when Fc</c>,
+ where <c>Ft_1</c> is a function type and
+ <c>Fc</c> is a function constraint, then Rep(T) =
+ <c>{type,LINE,bounded_fun,[Rep(Ft_1),Rep(Fc)]}</c>.
+ For Rep(Fc), see below.</p>
+ </item>
+ <item>
+ <p>If Ft is a function type <c>(T_1, ..., T_n) -> T_0</c>,
+ where each <c>T_i</c> is a type, then Rep(Ft) =
+ <c>{type,LINE,'fun',[{type,LINE,product,[Rep(T_1), ...,
+ Rep(T_n)]},Rep(T_0)]}</c>.</p>
+ </item>
</list>
</section>
<section>
<title>Function Constraints</title>
- <p>A function constraint Fc is a nonempty sequence of constraints
- <c>C_1, ..., C_k</c>, and
- Rep(Fc) = <c>[Rep(C_1), ..., Rep(C_k)]</c>.</p>
+ <p>A function constraint Fc is a non-empty sequence of constraints
+ <c>C_1, ..., C_k</c>, and
+ Rep(Fc) = <c>[Rep(C_1), ..., Rep(C_k)]</c>.</p>
+
<list type="bulleted">
- <item>If C is a constraint <c>is_subtype(V, T)</c> or <c>V :: T</c>,
- where <c>V</c> is a type variable and <c>T</c> is a type, then
- Rep(C) = <c>{type,LINE,constraint,[{atom,LINE,is_subtype},[Rep(V),Rep(T)]]}</c>.
- </item>
+ <item>If C is a constraint <c>is_subtype(V, T)</c> or <c>V :: T</c>,
+ where <c>V</c> is a type variable
+ and <c>T</c> is a type, then Rep(C) =
+ <c>{type,LINE,constraint,[{atom,LINE,is_subtype},[Rep(V),Rep(T)]]}</c>.
+ </item>
</list>
</section>
<section>
<title>Association Types</title>
<list type="bulleted">
- <item>If A is an association type <c>K => V</c>, where
- <c>K</c> and <c>V</c> are types, then Rep(A) =
- <c>{type,LINE,map_field_assoc,[Rep(K),Rep(V)]}</c>.</item>
- <item>If A is an association type <c>K := V</c>, where
- <c>K</c> and <c>V</c> are types, then Rep(A) =
- <c>{type,LINE,map_field_exact,[Rep(K),Rep(V)]}</c>.</item>
+ <item>
+ <p>If A is an association type <c>K => V</c>,
+ where <c>K</c> and <c>V</c> are types, then Rep(A) =
+ <c>{type,LINE,map_field_assoc,[Rep(K),Rep(V)]}</c>.</p>
+ </item>
+ <item>
+ <p>If A is an association type <c>K := V</c>,
+ where <c>K</c> and <c>V</c> are types, then Rep(A) =
+ <c>{type,LINE,map_field_exact,[Rep(K),Rep(V)]}</c>.</p>
+ </item>
</list>
</section>
<section>
<title>Record Field Types</title>
<list type="bulleted">
- <item>If F is a record field type <c>Name :: Type</c>,
- where <c>Type</c> is a type, then Rep(F) =
- <c>{type,LINE,field_type,[Rep(Name),Rep(Type)]}</c>.</item>
+ <item>If F is a record field type <c>Name :: Type</c>,
+ where <c>Type</c> is a type, then Rep(F) =
+ <c>{type,LINE,field_type,[Rep(Name),Rep(Type)]}</c>.
+ </item>
</list>
</section>
</section>
<section>
- <title>The Abstract Format After Preprocessing</title>
- <p>The compilation option <c>debug_info</c> can be given to the
+ <title>The Abstract Format after Preprocessing</title>
+ <p>The compilation option <c>debug_info</c> can be specified to the
compiler to have the abstract code stored in
- the <c>abstract_code</c> chunk in the BEAM file
+ the <c>abstract_code</c> chunk in the Beam file
(for debugging purposes).</p>
- <p>In OTP R9C and later, the <c>abstract_code</c> chunk will
- contain</p>
- <p><c>{raw_abstract_v1,AbstractCode}</c></p>
- <p>where <c>AbstractCode</c> is the abstract code as described
- in this document.</p>
- <p>In releases of OTP prior to R9C, the abstract code after some more
- processing was stored in the BEAM file. The first element of the
- tuple would be either <c>abstract_v1</c> (R7B) or <c>abstract_v2</c>
- (R8B).</p>
+
+ <p>As from Erlang/OTP R9C, the <c>abstract_code</c> chunk contains
+ <c>{raw_abstract_v1,AbstractCode}</c>, where <c>AbstractCode</c> is the
+ abstract code as described in this section.</p>
+
+ <p>In OTP releases before R9C, the abstract code after some more
+ processing was stored in the Beam file. The first element of the
+ tuple would be either <c>abstract_v1</c> (in OTP R7B) or
+ <c>abstract_v2</c> (in OTP R8B).</p>
</section>
</chapter>
diff --git a/erts/doc/src/alt_dist.xml b/erts/doc/src/alt_dist.xml
index e283acc1b4..be969a8267 100644
--- a/erts/doc/src/alt_dist.xml
+++ b/erts/doc/src/alt_dist.xml
@@ -22,7 +22,8 @@
</legalnotice>
- <title>How to implement an alternative carrier for the Erlang distribution</title>
+ <title>How to Implement an Alternative Carrier for the Erlang Distribution
+ </title>
<prepared>Patrik Nyblom</prepared>
<responsible></responsible>
<docno></docno>
@@ -32,203 +33,270 @@
<rev>PA2</rev>
<file>alt_dist.xml</file>
</header>
- <p>This document describes how one can implement ones own carrier
+ <p>This section describes how to implement an alternative carrier
protocol for the Erlang distribution. The distribution is normally
- carried by the TCP/IP protocol. What's explained here is the method for
- replacing TCP/IP with another protocol. </p>
- <p>The document is a step by step explanation of the <c><![CDATA[uds_dist]]></c> example
- application (seated in the kernel applications <c><![CDATA[examples]]></c> directory).
- The <c><![CDATA[uds_dist]]></c> application implements distribution over Unix domain
- sockets and is written for the Sun Solaris 2 operating environment. The
- mechanisms are however general and applies to any operating system Erlang
- runs on. The reason the C code is not made portable, is simply readability.</p>
- <note><p>This document was written a long time ago. Most of it is still
- valid, but some things have changed since it was first written.
- Most notably the driver interface. There have been some updates
- to the documentation of the driver presented in this documentation,
- but more could be done and are planned for the future. The
- reader is encouraged to also read the
- <seealso marker="erl_driver">erl_driver</seealso>, and the
- <seealso marker="erl_driver">driver_entry</seealso> documentation.
- </p></note>
+ carried by TCP/IP. Here is explained a method for replacing TCP/IP
+ with another protocol.</p>
+
+ <p>The section is a step-by-step explanation of the
+ <c><![CDATA[uds_dist]]></c> example application (in the
+ Kernel application <c><![CDATA[examples]]></c> directory). The
+ <c><![CDATA[uds_dist]]></c> application implements distribution over Unix
+ domain sockets and is written for the Sun Solaris 2 operating environment.
+ The mechanisms are however general and apply to any operating system Erlang
+ runs on. The reason the C code is not made portable, is simply
+ readability.</p>
+
+ <note>
+ <p>This section was written a long time ago. Most of it is still
+ valid, but some things have changed since then.
+ Most notably is the driver interface. Some updates have been made
+ to the documentation of the driver presented here,
+ but more can be done and is planned for the future.
+ The reader is encouraged to read the
+ <seealso marker="erl_driver"><c>erl_driver</c></seealso> and
+ <seealso marker="driver_entry"><c>driver_entry</c></seealso>
+ documentation also.</p>
+ </note>
<section>
<title>Introduction</title>
- <p>To implement a new carrier for the Erlang distribution, one must first
- make the protocol available to the Erlang machine, which involves writing
- an Erlang driver. There is no way one can use a port program,
- there <em>has</em> to
- be an Erlang driver. Erlang drivers can either be statically
- linked
- to the emulator, which can be an alternative when using the open source
- distribution of Erlang, or dynamically loaded into the Erlang machines
- address space, which is the only alternative if a precompiled version of
- Erlang is to be used. </p>
- <p>Writing an Erlang driver is by no means easy. The driver is written
- as a couple of call-back functions called by the Erlang emulator when
- data is sent to the driver or the driver has any data available on a file
- descriptor. As the driver call-back routines execute in the main
- thread of the Erlang machine, the call-back functions can perform
- no blocking activity whatsoever. The call-backs should only set up
- file descriptors for waiting and/or read/write available data. All
- I/O has to be non blocking. Driver call-backs are however executed
- in sequence, why a global state can safely be updated within the
- routines. </p>
- <p>When the driver is implemented, one would preferably write an
- Erlang interface for the driver to be able to test the
- functionality of the driver separately. This interface can then
- be used by the distribution module which will cover the details of
- the protocol from the <c><![CDATA[net_kernel]]></c>. The easiest path is to
- mimic the <c><![CDATA[inet]]></c> and <c><![CDATA[inet_tcp]]></c> interfaces, but a lot of
- functionality in those modules need not be implemented. In the
- example application, only a few of the usual interfaces are
- implemented, and they are much simplified.</p>
- <p>When the protocol is available to Erlang through a driver and an
- Erlang interface module, a distribution module can be
- written. The distribution module is a module with well defined
- call-backs, much like a <c><![CDATA[gen_server]]></c> (there is no compiler support
- for checking the call-backs though). The details of finding other
- nodes (i.e. talking to epmd or something similar), creating a
- listen port (or similar), connecting to other nodes and performing
- the handshakes/cookie verification are all implemented by this
- module. There is however a utility module, <c><![CDATA[dist_util]]></c>, that
- will do most of the hard work of handling handshakes, cookies,
- timers and ticking. Using <c><![CDATA[dist_util]]></c> makes implementing a
- distribution module much easier and that's what we are doing in
- the example application.</p>
- <p>The last step is to create boot scripts to make the protocol
- implementation available at boot time. The implementation can be
- debugged by starting the distribution when all of the system is
- running, but in a real system the distribution should start very
- early, why a boot-script and some command line parameters are
- necessary. This last step also implies that the Erlang code in the
- interface and distribution modules is written in such a way that
- it can be run in the startup phase. Most notably there can be no
- calls to the <c><![CDATA[application]]></c> module or to any modules not
- loaded at boot-time (i.e. only <c><![CDATA[kernel]]></c>, <c><![CDATA[stdlib]]></c> and the
- application itself can be used).</p>
+ <p>To implement a new carrier for the Erlang distribution, the main
+ steps are as follows.</p>
+
+ <section>
+ <title>Writing an Erlang Driver</title>
+ <p>First, the protocol must be available to the Erlang machine, which
+ involves writing an Erlang driver. A port program cannot be used,
+ an Erlang driver is required. Erlang drivers can be:</p>
+
+ <list type="bulleted">
+ <item>
+ <p>Statically linked to the emulator, which can be an alternative
+ when using the open source distribution of Erlang, or</p>
+ </item>
+ <item>
+ <p>Dynamically loaded into the Erlang machines address space,
+ which is the only alternative if a precompiled version of
+ Erlang is to be used</p>
+ </item>
+ </list>
+
+ <p>Writing an Erlang driver is not easy. The driver is written
+ as some callback functions called by the Erlang emulator when
+ data is sent to the driver, or the driver has any data available on
+ a file descriptor. As the driver callback routines execute in the main
+ thread of the Erlang machine, the callback functions can perform
+ no blocking activity whatsoever. The callbacks are only to set up
+ file descriptors for waiting and/or read/write available data. All
+ I/O must be non-blocking. Driver callbacks are however executed
+ in sequence, why a global state can safely be updated within the
+ routines.</p>
+ </section>
+
+ <section>
+ <title>Writing an Erlang Interface for the Driver</title>
+ <p>When the driver is implemented, one would preferably write an
+ Erlang interface for the driver to be able to test the
+ functionality of the driver separately. This interface can then
+ be used by the distribution module, which will cover the details of
+ the protocol from the <c><![CDATA[net_kernel]]></c>.</p>
+
+ <p>The easiest path
+ is to mimic the <c><![CDATA[inet]]></c> and <c><![CDATA[inet_tcp]]></c>
+ interfaces, but not much
+ functionality in those modules needs to be implemented. In the
+ example application, only a few of the usual interfaces are
+ implemented, and they are much simplified.</p>
+ </section>
+
+ <section>
+ <title>Writing a Distribution Module</title>
+ <p>When the protocol is available to Erlang through a driver and an
+ Erlang interface module, a distribution module can be written.
+ The distribution module is a module with well-defined callbacks,
+ much like a <c><![CDATA[gen_server]]></c> (there is no compiler support
+ for checking the callbacks, though). This module implements:</p>
+
+ <list type="bulleted">
+ <item>The details of finding other nodes (that is, talking to
+ <c>epmd</c> or something similar)</item>
+ <item>Creating a listen port (or similar)</item>
+ <item>Connecting to other nodes</item>
+ <item>Performing the handshakes/cookie verification</item>
+ </list>
+
+ <p>There is however a utility module, <c><![CDATA[dist_util]]></c>, which
+ does most of the hard work of handling handshakes, cookies, timers,
+ and ticking. Using <c><![CDATA[dist_util]]></c> makes implementing a
+ distribution module much easier and that is done in
+ the example application.</p>
+ </section>
+
+ <section>
+ <title>Creating Boot Scripts</title>
+ <p>The last step is to create boot scripts to make the protocol
+ implementation available at boot time. The implementation can be
+ debugged by starting the distribution when all the system is
+ running, but in a real system the distribution is to start very
+ early, why a boot script and some command-line parameters are
+ necessary.</p>
+
+ <p>This step also implies that the Erlang code in the
+ interface and distribution modules is written in such a way that
+ it can be run in the startup phase. In particular, there can be no
+ calls to the <c><![CDATA[application]]></c> module or to any modules
+ not loaded at boot time. That is, only <c><![CDATA[Kernel]]></c>,
+ <c><![CDATA[STDLIB]]></c>, and the application itself can be used.</p>
+ </section>
</section>
<section>
- <title>The driver</title>
- <p>Although Erlang drivers in general may be beyond the scope of this
- document, a brief introduction seems to be in place.</p>
+ <title>The Driver</title>
+ <p>Although Erlang drivers in general can be beyond the scope of this
+ section, a brief introduction seems to be in place.</p>
<section>
- <title>Drivers in general</title>
+ <title>Drivers in General</title>
<p>An Erlang driver is a native code module written in C (or
- assembler) which serves as an interface for some special operating
+ assembler), which serves as an interface for some special operating
system service. This is a general mechanism that is used
throughout the Erlang emulator for all kinds of I/O. An Erlang
driver can be dynamically linked (or loaded) to the Erlang
emulator at runtime by using the <c><![CDATA[erl_ddll]]></c> Erlang
module. Some of the drivers in OTP are however statically linked
- to the runtime system, but that's more an optimization than a
+ to the runtime system, but that is more an optimization than a
necessity.</p>
- <p>The driver data-types and the functions available to the driver
- writer are defined in the header file <c><![CDATA[erl_driver.h]]></c> (there
- is also an deprecated version called <c><![CDATA[driver.h]]></c>, don't use
- that one.) seated in Erlang's include directory (and in
- $ERL_TOP/erts/emulator/beam in the source code
- distribution). Refer to that file for function prototypes etc.</p>
+
+ <p>The driver data types and the functions available to the driver
+ writer are defined in header file <c><![CDATA[erl_driver.h]]></c>
+ seated in Erlang's include directory. See the
+ <seealso marker="erts:erl_driver">erl_driver</seealso> documentation
+ for details of which functions are available.</p>
+
<p>When writing a driver to make a communications protocol available
to Erlang, one should know just about everything worth knowing
- about that particular protocol. All operation has to be non
- blocking and all possible situations should be accounted for in
- the driver. A non stable driver will affect and/or crash the
- whole Erlang runtime system, which is seldom what's wanted. </p>
+ about that particular protocol. All operation must be
+ non-blocking and all possible situations are to be accounted for in
+ the driver. A non-stable driver will affect and/or crash the
+ whole Erlang runtime system.</p>
+
<p>The emulator calls the driver in the following situations:</p>
+
<list type="bulleted">
- <item>When the driver is loaded. This call-back has to have a
- special name and will inform the emulator of what call-backs should
- be used by returning a pointer to a <c><![CDATA[ErlDrvEntry]]></c> struct,
- which should be properly filled in (see below).</item>
- <item>When a port to the driver is opened (by a <c><![CDATA[open_port]]></c>
- call from Erlang). This routine should set up internal data
- structures and return an opaque data entity of the type
- <c><![CDATA[ErlDrvData]]></c>, which is a data-type large enough to hold a
- pointer. The pointer returned by this function will be the first
- argument to all other call-backs concerning this particular
- port. It is usually called the port handle. The emulator only
- stores the handle and does never try to interpret it, why it can
- be virtually anything (well anything not larger than a pointer
- that is) and can point to anything if it is a pointer. Usually
- this pointer will refer to a structure holding information about
- the particular port, as i t does in our example.</item>
- <item>When an Erlang process sends data to the port. The data will
- arrive as a buffer of bytes, the interpretation is not defined,
- but is up to the implementor. This call-back returns nothing to the
- caller, answers are sent to the caller as messages (using a
- routine called <c><![CDATA[driver_output]]></c> available to all
- drivers). There is also a way to talk in a synchronous way to
- drivers, described below. There can be an additional call-back
- function for handling data that is fragmented (sent in a deep
- io-list). That interface will get the data in a form suitable for
- Unix <c><![CDATA[writev]]></c> rather than in a single buffer. There is no
- need for a distribution driver to implement such a call-back, so
- we wont.</item>
- <item>When a file descriptor is signaled for input. This call-back
- is called when the emulator detects input on a file descriptor
- which the driver has marked for monitoring by using the interface
- <c><![CDATA[driver_select]]></c>. The mechanism of driver select makes it
- possible to read non blocking from file descriptors by calling
- <c><![CDATA[driver_select]]></c> when reading is needed and then do the actual
- reading in this call-back (when reading is actually possible). The
- typical scenario is that <c><![CDATA[driver_select]]></c> is called when an
- Erlang process orders a read operation, and that this routine
- sends the answer when data is available on the file descriptor.</item>
- <item>When a file descriptor is signaled for output. This call-back
- is called in a similar way as the previous, but when writing to a
- file descriptor is possible. The usual scenario is that Erlang
- orders writing on a file descriptor and that the driver calls
- <c><![CDATA[driver_select]]></c>. When the descriptor is ready for output,
- this call-back is called an the driver can try to send the
- output. There may of course be queuing involved in such
- operations, and there are some convenient queue routines available
- to the driver writer to use in such situations.</item>
- <item>When a port is closed, either by an Erlang process or by the
- driver calling one of the <c><![CDATA[driver_failure_XXX]]></c> routines. This
- routine should clean up everything connected to one particular
- port. Note that when other call-backs call a
- <c><![CDATA[driver_failure_XXX]]></c> routine, this routine will be
- immediately called and the call-back routine issuing the error can
- make no more use of the data structures for the port, as this
- routine surely has freed all associated data and closed all file
- descriptors. If the queue utility available to driver writes is
- used, this routine will however <em>not</em> be called until the
- queue is empty.</item>
- <item>When an Erlang process calls <c>erlang:port_control/3</c>,
- which is a synchronous interface to drivers. The control interface
- is used to set driver options, change states of ports etc. We'll
- use this interface quite a lot in our example.</item>
- <item>When a timer expires. The driver can set timers with the
- function <c><![CDATA[driver_set_timer]]></c>. When such timers expire, a
- specific call-back function is called. We will not use timers in
- our example.</item>
- <item>When the whole driver is unloaded. Every resource allocated
- by the driver should be freed.</item>
+ <item>
+ <p>When the driver is loaded. This callback must have a special
+ name and inform the emulator of what callbacks are to be used
+ by returning a pointer to a <c><![CDATA[ErlDrvEntry]]></c> struct,
+ which is to be properly filled in (see below).</p>
+ </item>
+ <item>
+ <p>When a port to the driver is opened (by a
+ <c><![CDATA[open_port]]></c> call from Erlang). This routine is to
+ set up internal data structures and return an opaque data entity of
+ the type <c><![CDATA[ErlDrvData]]></c>, which is a data type large
+ enough to hold a pointer.
+ The pointer returned by this function is the first
+ argument to all other callbacks concerning this particular
+ port. It is usually called the port handle. The emulator only
+ stores the handle and does never try to interpret it, why it can
+ be virtually anything (anything not larger than a pointer
+ that is) and can point to anything if it is a pointer. Usually
+ this pointer refers to a structure holding information about
+ the particular port, as it does in the example.</p>
+ </item>
+ <item>
+ <p>When an Erlang process sends data to the port. The data
+ arrives as a buffer of bytes, the interpretation is not defined,
+ but is up to the implementor. This callback returns nothing to the
+ caller, answers are sent to the caller as messages (using a
+ routine called <c><![CDATA[driver_output]]></c> available to all
+ drivers). There is also a way to talk in a synchronous way to
+ drivers, described below. There can be an additional callback
+ function for handling data that is fragmented (sent in a deep
+ io-list). That interface gets the data in a form suitable for
+ Unix <c><![CDATA[writev]]></c> rather than in a single buffer.
+ There is no need for a distribution driver to implement such a
+ callback, so we will not.</p>
+ </item>
+ <item>
+ <p>When a file descriptor is signaled for input. This callback
+ is called when the emulator detects input on a file descriptor
+ that the driver has marked for monitoring by using the interface
+ <c><![CDATA[driver_select]]></c>. The mechanism of driver select
+ makes it possible to read non-blocking from file descriptors by
+ calling <c><![CDATA[driver_select]]></c> when reading is needed, and
+ then do the reading in this callback (when reading is possible).
+ The typical scenario is that <c><![CDATA[driver_select]]></c> is
+ called when an Erlang process orders a read operation, and that
+ this routine sends the answer when data is available on the file
+ descriptor.</p>
+ </item>
+ <item>
+ <p>When a file descriptor is signaled for output. This callback
+ is called in a similar way as the previous, but when writing to a
+ file descriptor is possible. The usual scenario is that Erlang
+ orders writing on a file descriptor and that the driver calls
+ <c><![CDATA[driver_select]]></c>. When the descriptor is ready for
+ output, this callback is called and the driver can try to send the
+ output. Queuing can be involved in such operations, and there are
+ convenient queue routines available to the driver writer to use.</p>
+ </item>
+ <item>
+ <p>When a port is closed, either by an Erlang process or by the
+ driver calling one of the <c><![CDATA[driver_failure_XXX]]></c>
+ routines. This routine is to clean up everything connected to one
+ particular port. When other callbacks call a
+ <c><![CDATA[driver_failure_XXX]]></c> routine, this routine is
+ immediately called. The callback routine issuing the error can
+ make no more use of the data structures for the port, as this
+ routine surely has freed all associated data and closed all file
+ descriptors. If the queue utility available to driver writer is
+ used, this routine is however <em>not</em> called until the
+ queue is empty.</p>
+ </item>
+ <item>
+ <p>When an Erlang process calls
+ <seealso marker="erlang#port_control/3">
+ <c>erlang:port_control/3</c></seealso>,
+ which is a synchronous interface to drivers. The control interface
+ is used to set driver options, change states of ports, and so on.
+ This interface is used a lot in the example.</p>
+ </item>
+ <item>
+ <p>When a timer expires. The driver can set timers with the function
+ <c><![CDATA[driver_set_timer]]></c>. When such timers expire, a
+ specific callback function is called. No timers are used in
+ the example.</p>
+ </item>
+ <item>
+ <p>When the whole driver is unloaded. Every resource allocated
+ by the driver is to be freed.</p>
+ </item>
</list>
</section>
<section>
- <title>The distribution driver's data structures</title>
- <p>The driver used for Erlang distribution should implement a
- reliable, order maintaining, variable length packet oriented
- protocol. All error correction, re-sending and such need to be
+ <title>The Data Structures of the Distribution Driver</title>
+ <p>The driver used for Erlang distribution is to implement a
+ reliable, order maintaining, variable length packet-oriented
+ protocol. All error correction, resending and such need to be
implemented in the driver or by the underlying communications
- protocol. If the protocol is stream oriented (as is the case with
+ protocol. If the protocol is stream-oriented (as is the case with
both TCP/IP and our streamed Unix domain sockets), some mechanism
for packaging is needed. We will use the simple method of having a
- header of four bytes containing the length of the package in a big
- endian 32 bit integer (as Unix domain sockets only can be used
- between processes on the same machine, we actually don't need to
- code the integer in some special endianess, but I'll do it anyway
- because in most situation you do need to do it. Unix domain
- sockets are reliable and order maintaining, so we don't need to
- implement resends and such in our driver.</p>
- <p>Lets start writing our example Unix domain sockets driver by
- declaring prototypes and filling in a static ErlDrvEntry
- structure.</p>
+ header of four bytes containing the length of the package in a
+ big-endian 32-bit integer. As Unix domain sockets only can be used
+ between processes on the same machine, we do not need to
+ code the integer in some special endianess, but we will do it anyway
+ because in most situation you need to do it. Unix domain
+ sockets are reliable and order maintaining, so we do not need to
+ implement resends and such in the driver.</p>
+
+ <p>We start writing the example Unix domain sockets driver by
+ declaring prototypes and filling in a static <c>ErlDrvEntry</c>
+ structure:</p>
+
<code type="none"><![CDATA[
( 1) #include <stdio.h>
( 2) #include <stdlib.h>
@@ -286,94 +354,122 @@
(51) NULL, /* process_exit callback */
(52) NULL /* stop_select callback */
(53) };]]></code>
- <p>On line 1 to 10 we have included the OS headers needed for our
- driver. As this driver is written for Solaris, we know that the
- header <c><![CDATA[uio.h]]></c> exists, why we can define the preprocessor
- variable <c><![CDATA[HAVE_UIO_H]]></c> before we include <c><![CDATA[erl_driver.h]]></c>
- at line 12. The definition of <c><![CDATA[HAVE_UIO_H]]></c> will make the
+
+ <p>On line 1-10 the OS headers needed for the driver are included.
+ As this driver is written for Solaris, we know that the
+ header <c><![CDATA[uio.h]]></c> exists. So the preprocessor variable
+ <c><![CDATA[HAVE_UIO_H]]></c> can be defined before
+ <c><![CDATA[erl_driver.h]]></c> is included on line 12.
+ The definition of <c><![CDATA[HAVE_UIO_H]]></c> will make the
I/O vectors used in Erlang's driver queues to correspond to the
operating systems ditto, which is very convenient.</p>
- <p>The different call-back functions are declared ("forward
- declarations") on line 16 to 23.</p>
- <p>The driver structure is similar for statically linked in
- drivers and dynamically loaded. However some of the fields
- should be left empty (i.e. initialized to NULL) in the
+
+ <p>On line 16-23 the different callback functions are declared ("forward
+ declarations").</p>
+
+ <p>The driver structure is similar for statically linked-in
+ drivers and dynamically loaded. However, some of the fields
+ are to be left empty (that is, initialized to NULL) in the
different types of drivers. The first field (the <c><![CDATA[init]]></c>
function pointer) is always left blank in a dynamically loaded
- driver, which can be seen on line 26. The NULL on line 37
- should always be there, the field is no longer used and is
- retained for backward compatibility. We use no timers in this
- driver, why no call-back for timers is needed. The <c>outputv</c> field
+ driver, see line 26. <c>NULL</c> on line 37
+ is always to be there, the field is no longer used and is
+ retained for backward compatibility. No timers are used in this
+ driver, why no callback for timers is needed. The <c>outputv</c> field
(line 40) can be used to implement an interface similar to
Unix <c><![CDATA[writev]]></c> for output. The Erlang runtime
- system could previously not use <c>outputv</c> for the
- distribution, but since erts version 5.7.2 it can.
- Since this driver was written before erts version 5.7.2 it does
- not use the <c>outputv</c> callback. Using the <c>outputv</c>
- callback is preferred since it reduces copying of data. (We
- will however use scatter/gather I/O internally in the driver).</p>
- <p>As of erts version 5.5.3 the driver interface was extended with
- version control and the possibility to pass capability information.
- Capability flags are present at line 48. As of erts version 5.7.4
- the
- <seealso marker="driver_entry#driver_flags">ERL_DRV_FLAG_SOFT_BUSY</seealso>
- flag is required for drivers that are to be used by the distribution.
- The soft busy flag implies that the driver is capable of handling
- calls to the <c>output</c> and <c>outputv</c> callbacks even though
- it has marked itself as busy. This has always been a requirement
- on drivers used by the distribution, but there have previously not
- been any capability information available about this. For more
- information see
- <seealso marker="erl_driver#set_busy_port">set_busy_port()</seealso>).
-</p>
+ system could previously not use <c>outputv</c> for the
+ distribution, but it can as from ERTS 5.7.2.
+ As this driver was written before ERTS 5.7.2 it does
+ not use the <c>outputv</c> callback. Using the <c>outputv</c>
+ callback is preferred, as it reduces copying of data. (We
+ will however use scatter/gather I/O internally in the driver.)</p>
+
+ <p>As from ERTS 5.5.3 the driver interface was extended with
+ version control and the possibility to pass capability information.
+ Capability flags are present on line 48. As from ERTS 5.7.4 flag
+ <seealso marker="driver_entry#driver_flags">
+ <c>ERL_DRV_FLAG_SOFT_BUSY</c></seealso> is required for drivers that
+ are to be used by the distribution. The soft busy flag implies that the
+ driver can handle calls to the <c>output</c> and <c>outputv</c>
+ callbacks although it has marked itself as busy. This has always been a
+ requirement on drivers used by the distribution, but no capability
+ information has been available about this previously. For more
+ information. see <seealso marker="erl_driver#set_busy_port">
+ <c>erl_driver:set_busy_port()</c></seealso>).</p>
+
<p>This driver was written before the runtime system had SMP support.
- The driver will still function in the runtime system with SMP support,
- but performance will suffer from lock contention on the driver lock
- used for the driver. This can be alleviated by reviewing and perhaps
- rewriting the code so that each instance of the driver safely can
- execute in parallel. When instances safely can execute in parallel it
- is safe to enable instance specific locking on the driver. This is done
- by passing
- <seealso marker="driver_entry#driver_flags">ERL_DRV_FLAG_USE_PORT_LOCKING</seealso>
- as a driver flag. This is left as an exercise for the reader.</p>
- <p>Our defined call-backs thus are:</p>
- <list type="bulleted">
- <item>uds_start, which shall initiate data for a port. We wont
- create any actual sockets here, just initialize data structures.</item>
- <item>uds_stop, the function called when a port is closed.</item>
- <item>uds_command, which will handle messages from Erlang. The
- messages can either be plain data to be sent or more subtle
- instructions to the driver. We will use this function mostly for
- data pumping.</item>
- <item>uds_input, this is the call-back which is called when we have
- something to read from a socket.</item>
- <item>uds_output, this is the function called when we can write to a
- socket.</item>
- <item>uds_finish, which is called when the driver is unloaded. A
- distribution driver will actually (or hopefully) never be unloaded,
- but we include this for completeness. Being able to clean up after
- oneself is always a good thing.</item>
- <item>uds_control, the <c>erlang:port_control/2</c> call-back, which
- will be used a lot in this implementation.</item>
- </list>
- <p>The ports implemented by this driver will operate in two major
- modes, which i will call the <em>command</em> and <em>data</em>
- modes. In command mode, only passive reading and writing (like
- gen_tcp:recv/gen_tcp:send) can be
- done, and this is the mode the port will be in during the
- distribution handshake. When the connection is up, the port will
- be switched to data mode and all data will be immediately read and
- passed further to the Erlang emulator. In data mode, no data
- arriving to the uds_command will be interpreted, but just packaged
- and sent out on the socket. The uds_control call-back will do the
- switching between those two modes.</p>
- <p>While the <c><![CDATA[net_kernel]]></c> informs different subsystems that the
- connection is coming up, the port should accept data to send, but
- not receive any data, to avoid that data arrives from another node
- before every kernel subsystem is prepared to handle it. We have a
- third mode for this intermediate stage, lets call it the
- <em>intermediate</em> mode.</p>
- <p>Lets define an enum for the different types of ports we have:</p>
+ The driver will still function in the runtime system with SMP support,
+ but performance will suffer from lock contention on the driver lock
+ used for the driver. This can be alleviated by reviewing and perhaps
+ rewriting the code so that each instance of the driver safely can
+ execute in parallel. When instances safely can execute in parallel, it
+ is safe to enable instance-specific locking on the driver. This is done
+ by passing <seealso marker="driver_entry#driver_flags">
+ <c>ERL_DRV_FLAG_USE_PORT_LOCKING</c></seealso> as a driver flag. This
+ is left as an exercise for the reader.</p>
+
+ <p>Thus, the defined callbacks are as follows:</p>
+
+ <taglist>
+ <tag><c>uds_start</c></tag>
+ <item>
+ <p>Must initiate data for a port. We do not create any sockets
+ here, only initialize data structures.</p>
+ </item>
+ <tag><c>uds_stop</c></tag>
+ <item>
+ <p>Called when a port is closed.</p>
+ </item>
+ <tag><c>uds_command</c></tag>
+ <item>
+ <p>Handles messages from Erlang. The
+ messages can either be plain data to be sent or more subtle
+ instructions to the driver. This function is here mostly for
+ data pumping.</p>
+ </item>
+ <tag><c>uds_input</c></tag>
+ <item>
+ <p>Called when there is something to read from a socket.</p>
+ </item>
+ <tag><c>uds_output</c></tag>
+ <item>
+ <p>Called when it is possible to write to a socket.</p>
+ </item>
+ <tag><c>uds_finish</c></tag>
+ <item>
+ <p>Called when the driver is unloaded. A distribution driver will
+ never be unloaded, but we include this for completeness. To be
+ able to clean up after oneself is always a good thing.</p>
+ </item>
+ <tag><c>uds_control</c></tag>
+ <item>
+ <p>The <seealso marker="erlang#port_control/3">
+ <c>erlang:port_control/3</c></seealso> callback, which is
+ used a lot in this implementation.</p>
+ </item>
+ </taglist>
+
+ <p>The ports implemented by this driver operate in two major modes,
+ named <c>command</c> and <c>data</c>. In <c>command</c> mode,
+ only passive reading and writing (like
+ <c>gen_tcp:recv</c>/<c>gen_tcp:send</c>) can be done. The port is in
+ this mode during the distribution handshake. When the connection is up,
+ the port is switched to <c>data</c> mode and all data is immediately
+ read and passed further to the Erlang emulator. In <c>data</c>
+ mode, no data arriving to <c>uds_command</c> is interpreted, only
+ packaged and sent out on the socket. The <c>uds_control</c> callback
+ does the switching between those two modes.</p>
+
+ <p>While <c><![CDATA[net_kernel]]></c> informs different subsystems
+ that the connection is coming up, the port is to accept data to send.
+ However, the port should not receive any data, to avoid that data
+ arrives from another node before every kernel subsystem is prepared
+ to handle it. A third mode, named <c>intermediate</c>, is used for this
+ intermediate stage.</p>
+
+ <p>An enum is defined for the different types of ports:</p>
+
<code type="none"><![CDATA[
( 1) typedef enum {
( 2) portTypeUnknown, /* An uninitialized port */
@@ -384,40 +480,63 @@
( 7) portTypeCommand, /* A connected open port in command mode */
( 8) portTypeIntermediate, /* A connected open port in special
( 9) half active mode */
-(10) portTypeData /* A connectec open port in data mode */
+(10) portTypeData /* A connected open port in data mode */
(11) } PortType; ]]></code>
- <p>Lets look at the different types:</p>
- <list type="bulleted">
- <item>portTypeUnknown - The type a port has when it's opened, but
- not actually bound to any file descriptor.</item>
- <item>portTypeListener - A port that is connected to a listen
- socket. This port will not do especially much, there will be no data
- pumping done on this socket, but there will be read data available
- when one is trying to do an accept on the port.</item>
- <item>portTypeAcceptor - This is a port that is to represent the
- result of an accept operation. It is created when one wants to
- accept from a listen socket, and it will be converted to a
- portTypeCommand when the accept succeeds.</item>
- <item>portTypeConnector - Very similar to portTypeAcceptor, an
- intermediate stage between the request for a connect operation and
- that the socket is really connected to an accepting ditto in the
- other end. As soon as the sockets are connected, the port will
- switch type to portTypeCommand.</item>
- <item>portTypeCommand - A connected socket (or accepted socket if
- you want) that is in the command mode mentioned earlier.</item>
- <item>portTypeIntermediate - The intermediate stage for a connected
- socket. There should be no processing of input for this socket.</item>
- <item>portTypeData - The mode where data is pumped through the port
- and the uds_command routine will regard every call as a call where
- sending is wanted. In this mode all input available will be read and
- sent to Erlang as soon as it arrives on the socket, much like in the
- active mode of a <c><![CDATA[gen_tcp]]></c> socket.</item>
- </list>
- <p>Now lets look at the state we'll need for our ports. One can note
- that not all fields are used for all types of ports and that one
- could save some space by using unions, but that would clutter the
- code with multiple indirections, so i simply use one struct for
- all types of ports, for readability.</p>
+
+ <p>The different types are as follows:</p>
+
+ <taglist>
+ <tag><c>portTypeUnknown</c></tag>
+ <item>
+ <p>The type a port has when it is opened, but
+ not bound to any file descriptor.</p>
+ </item>
+ <tag><c>portTypeListener</c></tag>
+ <item>
+ <p>A port that is connected to a listen socket. This port does not
+ do much, no data pumping is done on this socket, but read data is
+ available when one is trying to do an accept on the port.</p>
+ </item>
+ <tag><c>portTypeAcceptor</c></tag>
+ <item>
+ <p>This port is to represent the result of an accept operation. It is
+ created when one wants to accept from a listen socket, and it is
+ converted to a <c>portTypeCommand</c> when the accept succeeds.</p>
+ </item>
+ <tag><c>portTypeConnector</c></tag>
+ <item>
+ <p>Very similar to <c>portTypeAcceptor</c>, an
+ intermediate stage between the request for a connect operation and
+ that the socket is connected to an accepting ditto in the
+ other end. When the sockets are connected, the port
+ switches type to <c>portTypeCommand</c>.</p>
+ </item>
+ <tag><c>portTypeCommand</c></tag>
+ <item>
+ <p>A connected socket (or accepted socket) in <c>command</c> mode
+ mentioned earlier.</p>
+ </item>
+ <tag><c>portTypeIntermediate</c></tag>
+ <item>
+ <p>The intermediate stage for a connected socket.
+ There is to be no processing of input for this socket.</p>
+ </item>
+ <tag><c>portTypeData</c></tag>
+ <item>
+ <p>The mode where data is pumped through the port and the
+ <c>uds_command</c> routine regards every call as a call where
+ sending is wanted. In this mode, all input available is read and
+ sent to Erlang when it arrives on the socket, much like in the
+ active mode of a <c><![CDATA[gen_tcp]]></c> socket.</p>
+ </item>
+ </taglist>
+
+ <p>We study the state that is needed for the ports. Notice
+ that not all fields are used for all types of ports. Some space
+ could be saved by using unions, but that would clutter the
+ code with multiple indirections, so here is used one struct for
+ all types of ports, for readability:</p>
+
<code type="none"><![CDATA[
( 1) typedef unsigned char Byte;
( 2) typedef unsigned int Word;
@@ -428,7 +547,7 @@
( 6) int lockfd; /* The file descriptor for a lock file in
( 7) case of listen sockets */
( 8) Byte creation; /* The creation serial derived from the
-( 9) lockfile */
+( 9) lock file */
(10) PortType type; /* Type of port */
(11) char *name; /* Short name of socket for unlink */
(12) Word sent; /* Bytes sent */
@@ -442,114 +561,154 @@
(20) input buffer */
(21) Byte *buffer; /* The actual input buffer */
(22) } UdsData; ]]></code>
+
<p>This structure is used for all types of ports although some
fields are useless for some types. The least memory consuming
solution would be to arrange this structure as a union of
- structures, but the multiple indirections in the code to
- access a field in such a structure will clutter the code to
+ structures. However, the multiple indirections in the code to
+ access a field in such a structure would clutter the code too
much for an example.</p>
- <p>Let's look at the fields in our structure:</p>
- <list type="bulleted">
- <item>fd - The file descriptor of the socket associated with the
- port.</item>
- <item>port - The port identifier for the port which this structure
- corresponds to. It is needed for most <c><![CDATA[driver_XXX]]></c>
- calls from the driver back to the emulator.</item>
+
+ <p>The fields in the structure are as follows:</p>
+
+ <taglist>
+ <tag><c>fd</c></tag>
<item>
- <p>lockfd - If the socket is a listen socket, we use a separate
+ <p>The file descriptor of the socket associated with the port.</p>
+ </item>
+ <tag><c>port</c></tag>
+ <item>
+ <p>The port identifier for the port that this structure
+ corresponds to. It is needed for most <c><![CDATA[driver_XXX]]></c>
+ calls from the driver back to the emulator.</p>
+ </item>
+ <tag><c>lockfd</c></tag>
+ <item>
+ <p>If the socket is a listen socket, we use a separate
(regular) file for two purposes:</p>
<list type="bulleted">
- <item>We want a locking mechanism that gives no race
- conditions, so that we can be sure of if another Erlang
- node uses the listen socket name we require or if the
- file is only left there from a previous (crashed)
- session.</item>
<item>
- <p>We store the <em>creation</em> serial number in the
- file. The <em>creation</em> is a number that should
+ <p>We want a locking mechanism that gives no race
+ conditions, to be sure if another Erlang
+ node uses the listen socket name we require or if the
+ file is only left there from a previous (crashed) session.</p>
+ </item>
+ <item>
+ <p>We store the <c>creation</c> serial number in the
+ file. The <c>creation</c> is a number that is to
change between different instances of different Erlang
emulators with the same name, so that process
- identifiers from one emulator won't be valid when sent
+ identifiers from one emulator do not become valid when sent
to a new emulator with the same distribution name. The
- creation can be between 0 and 3 (two bits) and is stored
- in every process identifier sent to another node. </p>
- <p>In a system with TCP based distribution, this data is
+ creation can be from 0 through 3 (two bits) and is stored
+ in every process identifier sent to another node.</p>
+ <p>In a system with TCP-based distribution, this data is
kept in the <em>Erlang port mapper daemon</em>
(<c><![CDATA[epmd]]></c>), which is contacted when a distributed
- node starts. The lock-file and a convention for the UDS
- listen socket's name will remove the need for
+ node starts. The lock file and a convention for the UDS
+ listen socket's name remove the need for
<c><![CDATA[epmd]]></c> when using this distribution module. UDS
is always restricted to one host, why avoiding a port
mapper is easy.</p>
</item>
</list>
</item>
- <item>creation - The creation number for a listen socket, which is
- calculated as (the value found in the lock-file + 1) rem
- 4. This creation value is also written back into the
- lock-file, so that the next invocation of the emulator will
- found our value in the file.</item>
- <item>type - The current type/state of the port, which can be one
- of the values declared above.</item>
- <item>name - The name of the socket file (the path prefix
- removed), which allows for deletion (<c><![CDATA[unlink]]></c>) when the
- socket is closed.</item>
- <item>sent - How many bytes that have been sent over the
- socket. This may wrap, but that's no problem for the
- distribution, as the only thing that interests the Erlang
- distribution is if this value has changed (the Erlang
- net_kernel <em>ticker</em> uses this value by calling the
- driver to fetch it, which is done through the
- <c>erlang:port_control</c> routine).</item>
- <item>received - How many bytes that are read (received) from the
- socket, used in similar ways as <c><![CDATA[sent]]></c>.</item>
- <item>partner - A pointer to another port structure, which is
- either the listen port from which this port is accepting a
- connection or the other way around. The "partner relation"
- is always bidirectional.</item>
- <item>next - Pointer to next structure in a linked list of all
- port structures. This list is used when accepting
- connections and when the driver is unloaded.</item>
- <item>buffer_size, buffer_pos, header_pos, buffer - data for input
- buffering. Refer to the source code (in the kernel/examples
- directory) for details about the input buffering. That
- certainly goes beyond the scope of this document.</item>
- </list>
+ <tag><c>creation</c></tag>
+ <item>
+ <p>The creation number for a listen socket, which is
+ calculated as (the value found in the lock-file + 1) rem 4.
+ This creation value is also written back into the
+ lock file, so that the next invocation of the emulator
+ finds our value in the file.</p>
+ </item>
+ <tag><c>type</c></tag>
+ <item>
+ <p>The current type/state of the port, which can be one
+ of the values declared above.</p>
+ </item>
+ <tag><c>name</c></tag>
+ <item>
+ <p>The name of the socket file (the path prefix removed),
+ which allows for deletion (<c><![CDATA[unlink]]></c>) when the
+ socket is closed.</p>
+ </item>
+ <tag><c>sent</c></tag>
+ <item>
+ <p>How many bytes that have been sent over the
+ socket. This can wrap, but that is no problem for the
+ distribution, as the Erlang distribution is only interested in
+ if this value has changed. (The Erlang
+ <c>net_kernel</c> <c>ticker</c> uses this value by calling the
+ driver to fetch it, which is done through the
+ <seealso marker="erlang#port_control/3">
+ <c>erlang:port_control/3</c></seealso> routine.)</p>
+ </item>
+ <tag><c>received</c></tag>
+ <item>
+ <p>How many bytes that are read (received) from the
+ socket, used in similar ways as <c><![CDATA[sent]]></c>.</p>
+ </item>
+ <tag><c>partner</c></tag>
+ <item>
+ <p>A pointer to another port structure, which is
+ either the listen port from which this port is accepting a
+ connection or conversely. The "partner relation"
+ is always bidirectional.</p>
+ </item>
+ <tag><c>next</c></tag>
+ <item>
+ <p>Pointer to next structure in a linked list of all
+ port structures. This list is used when accepting
+ connections and when the driver is unloaded.</p>
+ </item>
+ <tag><c>buffer_size</c>, <c>buffer_pos</c>, <c>header_pos</c>,
+ <c>buffer</c></tag>
+ <item>
+ <p>Data for input buffering. For details about the input buffering,
+ see the source code in directory <c>kernel/examples</c>. That
+ certainly goes beyond the scope of this section.</p>
+ </item>
+ </taglist>
</section>
<section>
- <title>Selected parts of the distribution driver implementation</title>
- <p>The distribution drivers implementation is not completely
- covered in this text, details about buffering and other things
+ <title>Selected Parts of the Distribution Driver Implementation</title>
+ <p>The implemenation of the distribution driver is not completely
+ covered here, details about buffering and other things
unrelated to driver writing are not explained. Likewise are
some peculiarities of the UDS protocol not explained in
detail. The chosen protocol is not important.</p>
- <p>Prototypes for the driver call-back routines can be found in
+
+ <p>Prototypes for the driver callback routines can be found in
the <c><![CDATA[erl_driver.h]]></c> header file.</p>
+
<p>The driver initialization routine is (usually) declared with a
macro to make the driver easier to port between different
- operating systems (and flavours of systems). This is the only
- routine that has to have a well defined name. All other
- call-backs are reached through the driver structure. The macro
+ operating systems (and flavors of systems). This is the only
+ routine that must have a well-defined name. All other
+ callbacks are reached through the driver structure. The macro
to use is named <c><![CDATA[DRIVER_INIT]]></c> and takes the driver name
- as parameter.</p>
+ as parameter:</p>
+
<code type="none"><![CDATA[
(1) /* Beginning of linked list of ports */
(2) static UdsData *first_data;
-
(3) DRIVER_INIT(uds_drv)
(4) {
(5) first_data = NULL;
(6) return &uds_driver_entry;
(7) } ]]></code>
+
<p>The routine initializes the single global data structure and
- returns a pointer to the driver entry. The routine will be
- called when <c><![CDATA[erl_ddll:load_driver]]></c> is called from Erlang.</p>
- <p>The <c><![CDATA[uds_start]]></c> routine is called when a port is opened
- from Erlang. In our case, we only allocate a structure and
+ returns a pointer to the driver entry. The routine is called
+ when <c><![CDATA[erl_ddll:load_driver]]></c> is called from Erlang.</p>
+
+ <p>The <c><![CDATA[uds_start]]></c> routine is called when a port is
+ opened from Erlang. In this case, we only allocate a structure and
initialize it. Creating the actual socket is left to the
<c><![CDATA[uds_command]]></c> routine.</p>
+
<code type="none"><![CDATA[
( 1) static ErlDrvData uds_start(ErlDrvPort port, char *buff)
( 2) {
@@ -574,15 +733,18 @@
(21)
(22) return((ErlDrvData) ud);
(23) } ]]></code>
- <p>Every data item is initialized, so that no problems will arise
+
+ <p>Every data item is initialized, so that no problems arise
when a newly created port is closed (without there being any
corresponding socket). This routine is called when
- <c><![CDATA[open_port({spawn, "uds_drv"},[])]]></c> is called from Erlang.</p>
- <p>The <c><![CDATA[uds_command]]></c> routine is the routine called when an
- Erlang process sends data to the port. All asynchronous
- commands when the port is in <em>command mode</em> as well as
- the sending of all data when the port is in <em>data mode</em>
- is handled in this9s routine. Let's have a look at it:</p>
+ <c><![CDATA[open_port({spawn, "uds_drv"},[])]]></c> is called from
+ Erlang.</p>
+
+ <p>The <c><![CDATA[uds_command]]></c> routine is the routine called when
+ an Erlang process sends data to the port. This routine handles all
+ asynchronous commands when the port is in <c>command</c> mode and
+ the sending of all data when the port is in <c>data</c> mode:</p>
+
<code type="none"><![CDATA[
( 1) static void uds_command(ErlDrvData handle, char *buff, int bufflen)
( 2) {
@@ -636,57 +798,77 @@
(49) return;
(50) }
(51) } ]]></code>
- <p>The command routine takes three parameters; the handle
- returned for the port by <c><![CDATA[uds_start]]></c>, which is a pointer
- to the internal port structure, the data buffer and the length
+
+ <p>The command routine takes three parameters; the handle returned for
+ the port by <c><![CDATA[uds_start]]></c>, which is a pointer
+ to the internal port structure, the data buffer, and the length
of the data buffer. The buffer is the data sent from Erlang
- (a list of bytes) converted to an C array (of bytes). </p>
- <p>If Erlang sends i.e. the list <c><![CDATA[[$a,$b,$c]]]></c> to the port,
- the <c><![CDATA[bufflen]]></c> variable will be <c><![CDATA[3]]></c> ant the
- <c><![CDATA[buff]]></c> variable will contain <c><![CDATA[{'a','b','c'}]]></c> (no
- null termination). Usually the first byte is used as an
- opcode, which is the case in our driver to (at least when the
- port is in command mode). The opcodes are defined as:</p>
- <list type="bulleted">
- <item>'L'&lt;socketname&gt;: Create and listen on socket with the
- given name.</item>
- <item>'A'&lt;listennumber as 32 bit bigendian&gt;: Accept from the
- listen socket identified by the given identification
- number. The identification number is retrieved with the
- uds_control routine.</item>
- <item>'C'&lt;socketname&gt;: Connect to the socket named
- &lt;socketname&gt;.</item>
- <item>'S'&lt;data&gt;: Send the data &lt;data&gt; on the
- connected/accepted socket (in command mode). The sending is
- acked when the data has left this process.</item>
- <item>'R': Receive one packet of data.</item>
- </list>
- <p>One may wonder what is meant by "one packet of data" in the
- 'R' command. This driver always sends data packeted with a 4
- byte header containing a big endian 32 bit integer that
+ (a list of bytes) converted to an C array (of bytes).</p>
+
+ <p>If Erlang sends, for example, the list <c><![CDATA[[$a,$b,$c]]]></c>
+ to the port, the <c><![CDATA[bufflen]]></c> variable is
+ <c><![CDATA[3]]></c> and the <c><![CDATA[buff]]></c> variable contains
+ <c><![CDATA[{'a','b','c'}]]></c> (no
+ <c>NULL</c> termination). Usually the first byte is used as an
+ opcode, which is the case in this driver too (at least when the
+ port is in <c>command</c> mode). The opcodes are defined as follows:</p>
+
+ <taglist>
+ <tag><c>'L'&lt;socket name&gt;</c></tag>
+ <item>
+ <p>Creates and listens on socket with the specified name.</p>
+ </item>
+ <tag><c>'A'&lt;listen number as 32-bit big-endian&gt;</c></tag>
+ <item>
+ <p>Accepts from the listen socket identified by the specified
+ identification number. The identification number is retrieved with
+ the <c>uds_control</c> routine.</p>
+ </item>
+ <tag><c>'C'&lt;socket name&gt;</c></tag>
+ <item>
+ <p>Connects to the socket named &lt;socket name&gt;.</p>
+ </item>
+ <tag><c>'S'&lt;data&gt;</c></tag>
+ <item>
+ <p>Sends the data &lt;data&gt; on the
+ connected/accepted socket (in <c>command</c> mode). The sending is
+ acknowledged when the data has left this process.</p>
+ </item>
+ <tag><c>'R'</c></tag>
+ <item>
+ <p>Receives one packet of data.</p>
+ </item>
+ </taglist>
+
+ <p>"One packet of data" in command <c>'R'</c> can be explained
+ as follows. This driver always sends data packaged with a 4
+ byte header containing a big-endian 32-bit integer that
represents the length of the data in the packet. There is no
need for different packet sizes or some kind of streamed
- mode, as this driver is for the distribution only. One may
- wonder why the header word is coded explicitly in big endian
- when an UDS socket is local to the host. The answer simply is
- that I see it as a good practice when writing a distribution
- driver, as distribution in practice usually cross the host
- boundaries. </p>
- <p>On line 4-8 we handle the case where the port is in data or
- intermediate mode, the rest of the routine handles the
- different commands. We see (first on line 15) that the routine
- uses the <c><![CDATA[driver_failure_posix()]]></c> routine to report
- errors. One important thing to remember is that the failure
- routines make a call to our <c><![CDATA[uds_stop]]></c> routine, which
- will remove the internal port data. The handle (and the casted
- handle <c><![CDATA[ud]]></c>) is therefore <em>invalid pointers</em> after a
- <c><![CDATA[driver_failure]]></c> call and we should <em>immediately return</em>. The runtime system will send exit signals to all
+ mode, as this driver is for the distribution only.
+ Why is the header word coded explicitly in big-endian when a UDS
+ socket is local to the host? It is good practice when writing a
+ distribution driver, as distribution in practice usually crosses
+ the host boundaries.</p>
+
+ <p>On line 4-8 is handled the case where the port is in <c>data</c> mode
+ or <c>intermediate</c> mode and the remaining routine handles the
+ different commands. The routine uses the
+ <c><![CDATA[driver_failure_posix()]]></c> routine to report errors
+ (see, for example, line 15). Notice that the failure routines make
+ a call to the <c><![CDATA[uds_stop]]></c> routine, which will
+ remove the internal port data. The handle (and the casted handle
+ <c><![CDATA[ud]]></c>) is therefore <em>invalid pointers</em> after a
+ <c><![CDATA[driver_failure]]></c> call and we should <em>return
+ immediately</em>. The runtime system will send exit signals to all
linked processes.</p>
- <p>The uds_input routine gets called when data is available on a
- file descriptor previously passed to the <c><![CDATA[driver_select]]></c>
- routine. Typically this happens when a read command is issued
- and no data is available. Lets look at the <c><![CDATA[do_recv]]></c>
- routine:</p>
+
+ <p>The <c>uds_input</c> routine is called when data is available on a
+ file descriptor previously passed to the
+ <c><![CDATA[driver_select]]></c> routine. This occurs typically when
+ a read command is issued and no data is available. The
+ <c><![CDATA[do_recv]]></c> routine is as follows:</p>
+
<code type="none"><![CDATA[
( 1) static void do_recv(UdsData *ud)
( 2) {
@@ -716,29 +898,34 @@
(26) }
(27) }
(28) } ]]></code>
+
<p>The routine tries to read data until a packet is read or the
<c><![CDATA[buffered_read_package]]></c> routine returns a
- <c><![CDATA[NORMAL_READ_FAILURE]]></c> (an internally defined constant for
- the module that means that the read operation resulted in an
- <c><![CDATA[EWOULDBLOCK]]></c>). If the port is in command mode, the
- reading stops when one package is read, but if it is in data
- mode, the reading continues until the socket buffer is empty
- (read failure). If no more data can be read and more is wanted
- (always the case when socket is in data mode) driver_select is
- called to make the <c><![CDATA[uds_input]]></c> call-back be called when
- more data is available for reading.</p>
- <p>When the port is in data mode, all data is sent to Erlang in a
- format that suits the distribution, in fact the raw data will
+ <c><![CDATA[NORMAL_READ_FAILURE]]></c> (an internally defined constant
+ for the module, which means that the read operation resulted in an
+ <c><![CDATA[EWOULDBLOCK]]></c>). If the port is in <c>command</c> mode,
+ the reading stops when one package is read. If the port is in
+ <c>data</c> mode, the reading continues until the socket buffer is empty
+ (read failure). If no more data can be read and more is wanted (which
+ is always the case when the socket is in <c>data</c> mode),
+ <c>driver_select</c> is called to make the <c><![CDATA[uds_input]]></c>
+ callback be called when more data is available for reading.</p>
+
+ <p>When the port is in <c>data</c> mode, all data is sent to Erlang in a
+ format that suits the distribution. In fact, the raw data will
never reach any Erlang process, but will be
translated/interpreted by the emulator itself and then
delivered in the correct format to the correct processes. In
- the current emulator version, received data should be tagged
- with a single byte of 100. Thats what the macro
- <c><![CDATA[DIST_MAGIC_RECV_TAG]]></c> is defined to. The tagging of data
- in the distribution will possibly change in the future.</p>
- <p>The <c><![CDATA[uds_input]]></c> routine will handle other input events
- (like nonblocking <c><![CDATA[accept]]></c>), but most importantly handle
+ the current emulator version, received data is to be tagged
+ with a single byte of 100. That is what the macro
+ <c><![CDATA[DIST_MAGIC_RECV_TAG]]></c> is defined to. The tagging of
+ data in the distribution can be changed in the future.</p>
+
+ <p>The <c><![CDATA[uds_input]]></c> routine handles other input events
+ (like non-blocking <c><![CDATA[accept]]></c>), but most importantly
+ handle
data arriving at the socket by calling <c><![CDATA[do_recv]]></c>:</p>
+
<code type="none"><![CDATA[
( 1) static void uds_input(ErlDrvData handle, ErlDrvEvent event)
( 2) {
@@ -768,13 +955,16 @@
(24) }
(25) do_recv(ud);
(26) } ]]></code>
- <p>The important line here is the last line in the function, the
- <c><![CDATA[do_read]]></c> routine is called to handle new input. The rest
- of the function handles input on a listen socket, which means
- that there should be possible to do an accept on the
+
+ <p>The important line is the last line in the function: the
+ <c><![CDATA[do_read]]></c> routine is called to handle new input.
+ The remaining function handles input on a listen socket, which means
+ that it is to be possible to do an accept on the
socket, which is also recognized as a read event.</p>
- <p>The output mechanisms are similar to the input. Lets first
- look at the <c><![CDATA[do_send]]></c> routine:</p>
+
+ <p>The output mechanisms are similar to the input.
+ The <c><![CDATA[do_send]]></c> routine is as follows:</p>
+
<code type="none"><![CDATA[
( 1) static void do_send(UdsData *ud, char *buff, int bufflen)
( 2) {
@@ -816,33 +1006,36 @@
(37) driver_enqv(ud->port, &eio, written);
(38) send_out_queue(ud);
(39) } ]]></code>
+
<p>This driver uses the <c><![CDATA[writev]]></c> system call to send data
- onto the socket. A combination of writev and the driver output
- queues is very convenient. An <em>ErlIOVec</em> structure
- contains a <em>SysIOVec</em> (which is equivalent to the
- <c><![CDATA[struct iovec]]></c> structure defined in <c><![CDATA[uio.h]]></c>. The
- ErlIOVec also contains an array of <em>ErlDrvBinary</em>
+ onto the socket. A combination of <c>writev</c> and the driver output
+ queues is very convenient. An <c>ErlIOVec</c> structure
+ contains a <c>SysIOVec</c> (which is equivalent to the
+ <c><![CDATA[struct iovec]]></c> structure defined in
+ <c><![CDATA[uio.h]]></c>. The
+ <c>ErlIOVec</c> also contains an array of <c>ErlDrvBinary</c>
pointers, of the same length as the number of buffers in the
I/O vector itself. One can use this to allocate the binaries
- for the queue "manually" in the driver, but we'll just fill
- the binary array with NULL values (line 7) , which will make
- the runtime system allocate its own buffers when we call
- <c><![CDATA[driver_enqv]]></c> (line 37).</p>
- <p></p>
+ for the queue "manually" in the driver, but here
+ the binary array is filled with <c>NULL</c> values (line 7).
+ The runtime system then allocates its own buffers when
+ <c><![CDATA[driver_enqv]]></c> is called (line 37).</p>
+
<p>The routine builds an I/O vector containing the header bytes
and the buffer (the opcode has been removed and the buffer
length decreased by the output routine). If the queue is
- empty, we'll write the data directly to the socket (or at
+ empty, we write the data directly to the socket (or at
least try to). If any data is left, it is stored in the queue
- and then we try to send the queue (line 38). An ack is sent
- when the message is delivered completely (line 22). The
- <c><![CDATA[send_out_queue]]></c> will send acks if the sending is
- completed there. If the port is in command mode, the Erlang
+ and then we try to send the queue (line 38). An acknowledgement
+ is sent when the message is delivered completely (line 22). The
+ <c><![CDATA[send_out_queue]]></c> sends acknowledgements if the sending
+ is completed there. If the port is in <c>command</c> mode, the Erlang
code serializes the send operations so that only one packet
- can be waiting for delivery at a time. Therefore the ack can
- be sent simply whenever the queue is empty.</p>
- <p></p>
- <p>A short look at the <c><![CDATA[send_out_queue]]></c> routine:</p>
+ can be waiting for delivery at a time. Therefore the acknowledgement
+ can be sent whenever the queue is empty.</p>
+
+ <p>The <c><![CDATA[send_out_queue]]></c> routine is as follows:</p>
+
<code type="none"><![CDATA[
( 1) static int send_out_queue(UdsData *ud)
( 2) {
@@ -874,20 +1067,24 @@
(28) ud->sent += wrote;
(29) }
(30) } ]]></code>
- <p>What we do is simply to pick out an I/O vector from the queue
- (which is the whole queue as an <em>SysIOVec</em>). If the I/O
- vector is to long (IO_VECTOR_MAX is defined to 16), the vector
+
+ <p>We simply pick out an I/O vector from the queue
+ (which is the whole queue as a <c>SysIOVec</c>). If the I/O
+ vector is too long (<c>IO_VECTOR_MAX</c> is defined to 16), the vector
length is decreased (line 15), otherwise the <c><![CDATA[writev]]></c>
- (line 17) call will
- fail. Writing is tried and anything written is dequeued (line
- 27). If the write fails with <c><![CDATA[EWOULDBLOCK]]></c> (note that all
- sockets are in nonblocking mode), <c><![CDATA[driver_select]]></c> is
+ call (line 17) fails. Writing is tried and anything written is dequeued
+ (line 27).
+ If the write fails with <c><![CDATA[EWOULDBLOCK]]></c> (notice that all
+ sockets are in non-blocking mode), <c><![CDATA[driver_select]]></c> is
called to make the <c><![CDATA[uds_output]]></c> routine be called when
there is space to write again.</p>
- <p>We will continue trying to write until the queue is empty or
- the writing would block.</p>
- <p>The routine above are called from the <c><![CDATA[uds_output]]></c>
- routine, which looks like this:</p>
+
+ <p>We continue trying to write until the queue is empty or
+ the writing blocks.</p>
+
+ <p>The routine above is called from the <c><![CDATA[uds_output]]></c>
+ routine:</p>
+
<code type="none"><![CDATA[
( 1) static void uds_output(ErlDrvData handle, ErlDrvEvent event)
( 2) {
@@ -900,51 +1097,80 @@
( 9) }
(10) send_out_queue(ud);
(11) } ]]></code>
- <p>The routine is simple, it first handles the fact that the
+
+ <p>The routine is simple: it first handles the fact that the
output select will concern a socket in the business of
connecting (and the connecting blocked). If the socket is in
- a connected state it simply sends the output queue, this
- routine is called when there is possible to write to a socket
+ a connected state, it simply sends the output queue. This
+ routine is called when it is possible to write to a socket
where we have an output queue, so there is no question what to
do.</p>
+
<p>The driver implements a control interface, which is a
synchronous interface called when Erlang calls
- <c><![CDATA[erlang:port_control/3]]></c>. This is the only interface
- that can control the driver when it is in data mode and it may
+ <seealso marker="erlang#port_control/3">
+ <c>erlang:port_control/3</c></seealso>. Only this interface
+ can control the driver when it is in <c>data</c> mode. It can
be called with the following opcodes:</p>
- <list type="bulleted">
- <item>'C': Set port in command mode.</item>
- <item>'I': Set port in intermediate mode.</item>
- <item>'D': Set port in data mode.</item>
- <item>'N': Get identification number for listen port, this
- identification number is used in an accept command to the
- driver, it is returned as a big endian 32 bit integer, which
- happens to be the file identifier for the listen socket.</item>
- <item>'S': Get statistics, which is the number of bytes received,
- the number of bytes sent and the number of bytes pending in
- the output queue. This data is used when the distribution
- checks that a connection is alive (ticking). The statistics
- is returned as 3 32 bit big endian integers.</item>
- <item>'T': Send a tick message, which is a packet of length
- 0. Ticking is done when the port is in data mode, so the
- command for sending data cannot be used (besides it ignores
- zero length packages in command mode). This is used by the
- ticker to send dummy data when no other traffic is present.
- <em>Note</em> that it is important that the interface for
- sending ticks is not blocking. This implementation uses
- <c>erlang:port_control/3</c> which does not block the caller.
- If <c>erlang:port_command</c> is used, use
- <c>erlang:port_command/3</c> and pass <c>[force]</c> as
- option list; otherwise, the caller can be blocked indefinitely
- on a busy port and prevent the system from taking down a
- connection that is not functioning.</item>
- <item>'R': Get creation number of listen socket, which is used to
- dig out the number stored in the lock file to differentiate
- between invocations of Erlang nodes with the same name.</item>
- </list>
+
+ <taglist>
+ <tag><c>'C'</c></tag>
+ <item>
+ <p>Sets port in <c>command</c> mode.</p>
+ </item>
+ <tag><c>'I'</c></tag>
+ <item>
+ <p>Sets port in <c>intermediate</c> mode.</p>
+ </item>
+ <tag><c>'D'</c></tag>
+ <item>
+ <p>Sets port in <c>data</c> mode.</p>
+ </item>
+ <tag><c>'N'</c></tag>
+ <item>
+ <p>Gets identification number for listen port. This
+ identification number is used in an accept command to the
+ driver. It is returned as a big-endian 32-bit integer, which
+ is the file identifier for the listen socket.</p>
+ </item>
+ <tag><c>'S'</c></tag>
+ <item>
+ <p>Gets statistics, which is the number of bytes received,
+ the number of bytes sent, and the number of bytes pending in
+ the output queue. This data is used when the distribution
+ checks that a connection is alive (ticking). The statistics
+ is returned as three 32-bit big-endian integers.</p>
+ </item>
+ <tag><c>'T'</c></tag>
+ <item>
+ <p>Sends a tick message, which is a packet of length 0.
+ Ticking is done when the port is in <c>data</c> mode, so the
+ command for sending data cannot be used (besides it ignores
+ zero length packages in <c>command</c> mode). This is used by the
+ ticker to send dummy data when no other traffic is present.</p>
+ <p><em>Note:</em> It is important that the interface for
+ sending ticks is not blocking. This implementation uses
+ <seealso marker="erlang#port_control/3">
+ <c>erlang:port_control/3</c></seealso>, which does not block the
+ caller. If <c>erlang:port_command</c> is used, use
+ <seealso marker="erlang#port_command/3">
+ <c>erlang:port_command/3</c></seealso> and pass <c>[force]</c> as
+ option list; otherwise the caller can be blocked indefinitely
+ on a busy port and prevent the system from taking down a
+ connection that is not functioning.</p>
+ </item>
+ <tag><c>'R'</c></tag>
+ <item>
+ <p>Gets creation number of a listen socket, which is used to
+ dig out the number stored in the lock file to differentiate
+ between invocations of Erlang nodes with the same name.</p>
+ </item>
+ </taglist>
+
<p>The control interface gets a buffer to return its value in,
- but is free to allocate its own buffer is the provided one is
- to small. Here is the code for <c><![CDATA[uds_control]]></c>:</p>
+ but is free to allocate its own buffer if the provided one is
+ too small. The <c><![CDATA[uds_control]]></c> code is as follows:</p>
+
<code type="none"><![CDATA[
( 1) static int uds_control(ErlDrvData handle, unsigned int command,
( 2) char* buf, int count, char** res, int res_size)
@@ -1025,47 +1251,55 @@
(75) }
(76) #undef ENSURE
(77) } ]]></code>
- <p>The macro <c><![CDATA[ENSURE]]></c> (line 5 to 10) is used to ensure that
- the buffer is large enough for our answer. We switch on the
- command and take actions, there is not much to say about this
- routine. Worth noting is that we always has read select active
- on a port in data mode (achieved by calling <c><![CDATA[do_recv]]></c> on
- line 45), but turn off read selection in intermediate and
- command modes (line 27 and 36).</p>
- <p>The rest of the driver is more or less UDS specific and not of
+
+ <p>The macro <c><![CDATA[ENSURE]]></c> (line 5-10) is used to ensure that
+ the buffer is large enough for the answer. We switch on the command and
+ take actions. We always have read select active on a port in <c>data</c>
+ mode (achieved by calling <c><![CDATA[do_recv]]></c> on line 45), but
+ we turn off read selection in <c>intermediate</c> and <c>command</c>
+ modes (line 27 and 36).</p>
+
+ <p>The rest of the driver is more or less UDS-specific and not of
general interest.</p>
</section>
</section>
<section>
- <title>Putting it all together</title>
- <p>To test the distribution, one can use the
- <c><![CDATA[net_kernel:start/1]]></c> function, which is useful as it starts
- the distribution on a running system, where tracing/debugging
- can be performed. The <c><![CDATA[net_kernel:start/1]]></c> routine takes a
- list as its single argument. The lists first element should be
- the node name (without the "@hostname") as an atom, and the second (and
- last) element should be one of the atoms <c><![CDATA[shortnames]]></c> or
- <c><![CDATA[longnames]]></c>. In the example case <c><![CDATA[shortnames]]></c> is
- preferred. </p>
- <p>For net kernel to find out which distribution module to use, the
- command line argument <c><![CDATA[-proto_dist]]></c> is used. The argument
- is followed by one or more distribution module names, with the
- "_dist" suffix removed, i.e. uds_dist as a distribution module
+ <title>Putting It All Together</title>
+ <p>To test the distribution, the <c><![CDATA[net_kernel:start/1]]></c>
+ function can be used. It is useful, as it starts the distribution on a
+ running system, where tracing/debugging can be performed.
+ The <c><![CDATA[net_kernel:start/1]]></c> routine takes a
+ list as its single argument. The list first element in the list is to be
+ the node name (without the "@hostname") as an atom. The second (and
+ last) element is to be one of the atoms <c><![CDATA[shortnames]]></c> or
+ <c><![CDATA[longnames]]></c>. In the example case,
+ <c><![CDATA[shortnames]]></c> is preferred.</p>
+
+ <p>For <c>net_kernel</c> to find out which distribution module to use,
+ command-line argument <c><![CDATA[-proto_dist]]></c> is used. It
+ is followed by one or more distribution module names, with suffix
+ "_dist" removed, that is, <c>uds_dist</c> as a distribution module
is specified as <c><![CDATA[-proto_dist uds]]></c>.</p>
- <p>If no epmd (TCP port mapper daemon) is used, one should also
- specify the command line option <c><![CDATA[-no_epmd]]></c>, which will make
- Erlang skip the epmd startup, both as a OS process and as an
+
+ <p>If no <c>epmd</c> (TCP port mapper daemon) is used, also command-line
+ option <c><![CDATA[-no_epmd]]></c> is to be specified, which makes
+ Erlang skip the <c>epmd</c> startup, both as an OS process and as an
Erlang ditto.</p>
+
<p>The path to the directory where the distribution modules reside
- must be known at boot, which can either be achieved by
- specifying <c><![CDATA[-pa <path>]]></c> on the command line or by building
- a boot script containing the applications used for your
- distribution protocol (in the uds_dist protocol, it's only the
- uds_dist application that needs to be added to the script).</p>
- <p>The distribution will be started at boot if all the above is
+ must be known at boot. This can be achieved either by
+ specifying <c><![CDATA[-pa <path>]]></c> on the command line or by
+ building a boot script containing the applications used for your
+ distribution protocol. (In the <c>uds_dist</c> protocol, only the
+ <c>uds_dist</c> application needs to be added to the script.)</p>
+
+ <p>The distribution starts at boot if all the above is
specified and an <c><![CDATA[-sname <name>]]></c> flag is present at the
- command line, here follows two examples: </p>
+ command line.</p>
+
+ <p><em>Example 1:</em></p>
+
<pre>
$ <input>erl -pa $ERL_TOP/lib/kernel/examples/uds_dist/ebin -proto_dist uds -no_epmd</input>
Erlang (BEAM) emulator version 5.0
@@ -1074,7 +1308,9 @@ Eshell V5.0 (abort with ^G)
1> <input>net_kernel:start([bing,shortnames]).</input>
{ok,&lt;0.30.0>}
(bing@hador)2></pre>
- <p>...</p>
+
+ <p><em>Example 2:</em></p>
+
<pre>
$ <input>erl -pa $ERL_TOP/lib/kernel/examples/uds_dist/ebin -proto_dist uds \ </input>
<input> -no_epmd -sname bong</input>
@@ -1082,8 +1318,10 @@ Erlang (BEAM) emulator version 5.0
Eshell V5.0 (abort with ^G)
(bong@hador)1></pre>
- <p>One can utilize the ERL_FLAGS environment variable to store the
+
+ <p>The <c>ERL_FLAGS</c> environment variable can be used to store the
complicated parameters in:</p>
+
<pre>
$ <input>ERL_FLAGS=-pa $ERL_TOP/lib/kernel/examples/uds_dist/ebin \ </input>
<input> -proto_dist uds -no_epmd</input>
@@ -1093,8 +1331,8 @@ Erlang (BEAM) emulator version 5.0
Eshell V5.0 (abort with ^G)
(bang@hador)1></pre>
- <p>The <c><![CDATA[ERL_FLAGS]]></c> should preferably not include the name of
- the node.</p>
+
+ <p><c><![CDATA[ERL_FLAGS]]></c> should not include the node name.</p>
</section>
</chapter>
diff --git a/erts/doc/src/communication.xml b/erts/doc/src/communication.xml
index 1eb05310e9..7e18a73aa8 100644
--- a/erts/doc/src/communication.xml
+++ b/erts/doc/src/communication.xml
@@ -26,63 +26,72 @@
<prepared>Rickard Green</prepared>
<responsible></responsible>
<docno></docno>
- <approved></approved>
+ <approved>uy</approved>
<checked></checked>
<date>2012-12-03</date>
<rev>PA1</rev>
<file>communication.xml</file>
</header>
<p>Communication in Erlang is conceptually performed using
- asynchronous signaling. All different executing entities
- such as processes, and ports communicate via asynchronous
+ asynchronous signaling. All different executing entities,
+ such as processes and ports, communicate through asynchronous
signals. The most commonly used signal is a message. Other
- common signals are exit, link, unlink, monitor, demonitor
+ common signals are exit, link, unlink, monitor, and demonitor
signals.</p>
+
<section>
<title>Passing of Signals</title>
- <p>The amount of time that passes between a signal being sent
+ <p>The amount of time that passes between a signal is sent
and the arrival of the signal at the destination is unspecified
- but positive. If the receiver has terminated, the signal will
- not arrive, but it is possible that it triggers another signal.
- For example, a link signal sent to a non-existing process will
- trigger an exit signal which will be sent back to where the link
+ but positive. If the receiver has terminated, the signal does
+ not arrive, but it can trigger another signal.
+ For example, a link signal sent to a non-existing process
+ triggers an exit signal, which is sent back to where the link
signal originated from. When communicating over the distribution,
- signals may be lost if the distribution channel goes down.</p>
- <p>The only signal ordering guarantee given is the following. If
+ signals can be lost if the distribution channel goes down.</p>
+
+ <p>The only signal ordering guarantee given is the following: if
an entity sends multiple signals to the same destination entity,
- the order will be preserved. That is, if <c>A</c> sends
+ the order is preserved; that is, if <c>A</c> sends
a signal <c>S1</c> to <c>B</c>, and later sends
- the signal <c>S2</c> to <c>B</c>, <c>S1</c> is guaranteed not to
+ signal <c>S2</c> to <c>B</c>, <c>S1</c> is guaranteed not to
arrive after <c>S2</c>.</p>
</section>
+
<section>
<title>Synchronous Communication</title>
<p>Some communication is synchronous. If broken down into pieces,
- a synchronous communication operation, consists of two asynchronous
- signals. One request signal and one reply signal. An example of
- such a synchronous communication is a call to <c>process_info/2</c>
- when the first argument is not <c>self()</c>. The caller will send
- an asynchronous signal requesting information, and will then
- wait for the reply signal containing the requested information. When
- the request signal reaches its destination the destination process
+ a synchronous communication operation consists of two asynchronous
+ signals; one request signal and one reply signal. An example of
+ such a synchronous communication is a call to
+ <seealso marker="erlang:process_info/2">
+ <c>erlang:process_info/2</c></seealso>
+ when the first argument is not <c>self()</c>. The caller sends
+ an asynchronous signal requesting information, and then
+ waits for the reply signal containing the requested information. When
+ the request signal reaches its destination, the destination process
replies with the requested information.</p>
</section>
+
<section>
<title>Implementation</title>
- <p>The implementation of different asynchronous signals in the
- VM may vary over time, but the behaviour will always respect this
+ <p>The implementation of different asynchronous signals in the virtual
+ machine can vary over time, but the behavior always respects this
concept of asynchronous signals being passed between entities
as described above.</p>
- <p>By inspecting the implementation you might notice that some
- specific signal actually gives a stricter guarantee than described
+
+ <p>By inspecting the implementation, you might notice that some
+ specific signal gives a stricter guarantee than described
above. It is of vital importance that such knowledge about the
- implementation is <em>not</em> used by Erlang code, since the
- implementation might change at any time without prior notice.</p>
- <p>Some example of major implementation changes:</p>
+ implementation is <em>not</em> used by Erlang code, as the
+ implementation can change at any time without prior notice.</p>
+
+ <p>Examples of major implementation changes:</p>
+
<list type="bulleted">
- <item>As of ERTS version 5.5.2 exit signals to processes are truly
+ <item>As from ERTS 5.5.2 exit signals to processes are truly
asynchronously delivered.</item>
- <item>As of ERTS version 5.10 all signals from processes to ports
+ <item>As from ERTS 5.10 all signals from processes to ports
are truly asynchronously delivered.</item>
</list>
</section>
diff --git a/erts/doc/src/crash_dump.xml b/erts/doc/src/crash_dump.xml
index 0b827ae583..a9aeb1888c 100644
--- a/erts/doc/src/crash_dump.xml
+++ b/erts/doc/src/crash_dump.xml
@@ -22,7 +22,7 @@
</legalnotice>
- <title>How to interpret the Erlang crash dumps</title>
+ <title>How to Interpret the Erlang Crash Dumps</title>
<prepared>Patrik Nyblom</prepared>
<responsible></responsible>
<docno></docno>
@@ -32,401 +32,529 @@
<rev>PA1</rev>
<file>crash_dump.xml</file>
</header>
- <p>This document describes the <c><![CDATA[erl_crash.dump]]></c> file generated
- upon abnormal exit of the Erlang runtime system.</p>
- <p><em>Important:</em> For OTP release R9C the Erlang crash dump has
- had a major facelift. This means that the information in this
- document will not be directly applicable for older dumps. However,
- if you use the Crashdump Viewer tool on older dumps, the crash
- dumps are translated into a format similar to this.</p>
- <p>The system will write the crash dump in the current directory of
+ <p>This section describes the <c><![CDATA[erl_crash.dump]]></c> file
+ generated upon abnormal exit of the Erlang runtime system.</p>
+
+ <note>
+ <p>The Erlang crash dump had a major facelift in Erlang/OTP R9C. The
+ information in this section is therefore not directly applicable for
+ older dumps. However, if you use <seealso marker="observer:crashdump_viewer">
+ <c>crashdump_viewer(3)</c></seealso> on older dumps,
+ the crash dumps are translated into a format similar to this.</p>
+ </note>
+
+ <p>The system writes the crash dump in the current directory of
the emulator or in the file pointed out by the environment variable
(whatever that means on the current operating system)
- ERL_CRASH_DUMP. For a crash dump to be written, there has to be a
- writable file system mounted.</p>
+ <c>ERL_CRASH_DUMP</c>. For a crash dump to be written, a
+ writable file system must be mounted.</p>
+
<p>Crash dumps are written mainly for one of two reasons: either the
- builtin function <c><![CDATA[erlang:halt/1]]></c> is called explicitly with a
- string argument from running Erlang code, or else the runtime
+ built-in function <c><![CDATA[erlang:halt/1]]></c> is called explicitly
+ with a string argument from running Erlang code, or the runtime
system has detected an error that cannot be handled. The most
- usual reason that the system can't handle the error is that the
+ usual reason that the system cannot handle the error is that the
cause is external limitations, such as running out of memory. A
- crash dump due to an internal error may be caused by the system
+ crash dump caused by an internal error can be caused by the system
reaching limits in the emulator itself (like the number of atoms
- in the system, or too many simultaneous ets tables). Usually the
+ in the system, or too many simultaneous ETS tables). Usually the
emulator or the operating system can be reconfigured to avoid the
crash, which is why interpreting the crash dump correctly is
important.</p>
+
<p>On systems that support OS signals, it is also possible to stop
- the runtime system and generate a crash dump by sending the SIGUSR1.</p>
- <p>The erlang crash dump is a readable text file, but it might not be
- very easy to read. Using the Crashdump Viewer tool in the
- <c><![CDATA[observer]]></c> application will simplify the task. This is an
- wx-widget based tool for browsing Erlang crash dumps.</p>
+ the runtime system and generate a crash dump by sending the <c>SIGUSR1</c>
+ signal.</p>
+
+ <p>The Erlang crash dump is a readable text file, but it can be difficult
+ to read. Using the Crashdump Viewer tool in the
+ <c><![CDATA[Observer]]></c> application simplifies the task. This is a
+ wx-widget-based tool for browsing Erlang crash dumps.</p>
<section>
<marker id="general_info"></marker>
- <title>General information</title>
- <p>The first part of the dump shows the creation time for the dump,
- a slogan indicating the reason for the dump, the system version,
- of the node from which the dump originates, the compile time of
- the emulator running the originating node, the number of
- atoms in the atom table and the runtime system thread that caused
- the crash dump to happen.
- </p>
+ <title>General Information</title>
+ <p>The first part of the crash dump shows the following:</p>
+
+ <list type="bulleted">
+ <item>The creation time for the dump</item>
+ <item>A slogan indicating the reason for the dump</item>
+ <item>The system version of the node from which the dump originates</item>
+ <item>The compile time of the emulator running the originating node</item>
+ <item>The number of atoms in the atom table</item>
+ <item>The runtime system thread that caused the crash dump</item>
+ </list>
<section>
- <title>Reasons for crash dumps (slogan)</title>
- <p>The reason for the dump is noted in the beginning of the file
- as <em>Slogan: &lt;reason&gt;</em> (the word "slogan" has historical
- roots). If the system is halted by the BIF
+ <title>Reasons for Crash Dumps (Slogan)</title>
+ <p>The reason for the dump is shown in the beginning of the file as:</p>
+
+ <pre>
+Slogan: &lt;reason&gt;</pre>
+
+ <p>If the system is halted by the BIF
<c><![CDATA[erlang:halt/1]]></c>, the slogan is the string parameter
passed to the BIF, otherwise it is a description generated by
the emulator or the (Erlang) kernel. Normally the message
- should be enough to understand the problem, but nevertheless
- some messages are described here. Note however that the
- suggested reasons for the crash are <em>only suggestions</em>. The exact reasons for the errors may vary
+ is enough to understand the problem, but
+ some messages are described here. Notice that the
+ suggested reasons for the crash are <em>only suggestions</em>.
+ The exact reasons for the errors can vary
depending on the local applications and the underlying
operating system.</p>
- <list type="bulleted">
- <item>"<em>&lt;A&gt;</em>: Cannot allocate <em>&lt;N&gt;</em>
- bytes of memory (of type "<em>&lt;T&gt;</em>")." - The system
- has run out of memory. &lt;A&gt; is the allocator that failed
- to allocate memory, &lt;N&gt; is the number of bytes that
- &lt;A&gt; tried to allocate, and &lt;T&gt; is the memory block
- type that the memory was needed for. The most common case is
- that a process stores huge amounts of data. In this case
- &lt;T&gt; is most often <c><![CDATA[heap]]></c>, <c><![CDATA[old_heap]]></c>,
- <c><![CDATA[heap_frag]]></c>, or <c><![CDATA[binary]]></c>. For more information on
- allocators see
- <seealso marker="erts_alloc">erts_alloc(3)</seealso>.</item>
- <item>"<em>&lt;A&gt;</em>: Cannot reallocate <em>&lt;N&gt;</em>
- bytes of memory (of type "<em>&lt;T&gt;</em>")." - Same as
- above with the exception that memory was being reallocated
- instead of being allocated when the system ran out of memory.</item>
- <item>"Unexpected op code <em>N</em>" - Error in compiled
- code, <c><![CDATA[beam]]></c> file damaged or error in the compiler.</item>
- <item>"Module <em>Name</em> undefined" <c><![CDATA[|]]></c> "Function
- <em>Name</em> undefined" <c><![CDATA[|]]></c> "No function
- <em>Name</em>:<em>Name</em>/1" <c><![CDATA[|]]></c> "No function
- <em>Name</em>:start/2" - The kernel/stdlib applications are
- damaged or the start script is damaged.</item>
- <item>"Driver_select called with too large file descriptor
- <c><![CDATA[N]]></c>" - The number of file descriptors for sockets
- exceed 1024 (Unix only). The limit on file-descriptors in
- some Unix flavors can be set to over 1024, but only 1024
- sockets/pipes can be used simultaneously by Erlang (due to
- limitations in the Unix <c><![CDATA[select]]></c> call). The number of
- open regular files is not affected by this.</item>
- <item>"Received SIGUSR1" - Sending the SIGUSR1 signal to a
- Erlang machine (Unix only) forces a crash dump. This slogan reflects
- that the Erlang machine crash-dumped due to receiving that signal.</item>
- <item>"Kernel pid terminated (<em>Who</em>)
- (<em>Exit-reason</em>)" - The kernel supervisor has detected
- a failure, usually that the <c><![CDATA[application_controller]]></c>
- has shut down (<c><![CDATA[Who]]></c> = <c><![CDATA[application_controller]]></c>,
- <c><![CDATA[Why]]></c> = <c><![CDATA[shutdown]]></c>). The application controller
- may have shut down for a number of reasons, the most usual
- being that the node name of the distributed Erlang node is
- already in use. A complete supervisor tree "crash" (i.e.,
- the top supervisors have exited) will give about the same
- result. This message comes from the Erlang code and not from
- the virtual machine itself. It is always due to some kind of
- failure in an application, either within OTP or a
- "user-written" one. Looking at the error log for your
- application is probably the first step to take.</item>
- <item>"Init terminating in do_boot ()" - The primitive Erlang boot
- sequence was terminated, most probably because the boot
- script has errors or cannot be read. This is usually a
- configuration error - the system may have been started with
- a faulty <c><![CDATA[-boot]]></c> parameter or with a boot script from
- the wrong version of OTP.</item>
- <item>"Could not start kernel pid (<em>Who</em>) ()" - One of the
- kernel processes could not start. This is probably due to
- faulty arguments (like errors in a <c><![CDATA[-config]]></c> argument)
- or faulty configuration files. Check that all files are in
- their correct location and that the configuration files (if
- any) are not damaged. Usually there are also messages
- written to the controlling terminal and/or the error log
- explaining what's wrong.</item>
- </list>
- <p>Other errors than the ones mentioned above may occur, as the
- <c><![CDATA[erlang:halt/1]]></c> BIF may generate any message. If the
+
+ <taglist>
+ <tag><em>&lt;A&gt;: Cannot allocate &lt;N&gt; bytes of memory (of type
+ "&lt;T&gt;")</em></tag>
+ <item>
+ <p>The system has run out of memory. &lt;A&gt; is the allocator that
+ failed to allocate memory, &lt;N&gt; is the number of bytes that
+ &lt;A&gt; tried to allocate, and &lt;T&gt; is the memory block
+ type that the memory was needed for. The most common case is
+ that a process stores huge amounts of data. In this case
+ &lt;T&gt; is most often <c><![CDATA[heap]]></c>,
+ <c><![CDATA[old_heap]]></c>, <c><![CDATA[heap_frag]]></c>, or
+ <c><![CDATA[binary]]></c>. For more information on allocators, see
+ <seealso marker="erts_alloc"><c>erts_alloc(3)</c></seealso>.</p>
+ </item>
+ <tag><em>&lt;A&gt;: Cannot reallocate &lt;N&gt; bytes of memory (of
+ type "&lt;T&gt;")</em></tag>
+ <item>
+ <p>Same as above except that memory was reallocated
+ instead of allocated when the system ran out of memory.</p>
+ </item>
+ <tag><em>Unexpected op code &lt;N&gt;</em></tag>
+ <item>
+ <p>Error in compiled code, <c><![CDATA[beam]]></c> file damaged, or
+ error in the compiler.</p>
+ </item>
+ <tag><em>Module &lt;Name&gt; undefined <c><![CDATA[|]]></c> Function
+ &lt;Name&gt; undefined <c><![CDATA[|]]></c> No function
+ &lt;Name&gt;:&lt;Name&gt;/1 <c><![CDATA[|]]></c> No function
+ &lt;Name&gt;:start/2</em></tag>
+ <item>
+ <p>The Kernel/STDLIB applications are
+ damaged or the start script is damaged.</p>
+ </item>
+ <tag><em>Driver_select called with too large file descriptor
+ <c><![CDATA[N]]></c></em></tag>
+ <item>
+ <p>The number of file descriptors for sockets
+ exceeds 1024 (Unix only). The limit on file descriptors in
+ some Unix flavors can be set to over 1024, but only 1024
+ sockets/pipes can be used simultaneously by Erlang (because of
+ limitations in the Unix <c><![CDATA[select]]></c> call). The number
+ of open regular files is not affected by this.</p>
+ </item>
+ <tag><em>Received SIGUSR1</em></tag>
+ <item>
+ <p>Sending the <c>SIGUSR1</c> signal to an Erlang machine (Unix only)
+ forces a crash dump. This slogan reflects that the Erlang machine
+ crash-dumped because of receiving that signal.</p>
+ </item>
+ <tag><em>Kernel pid terminated (&lt;Who&gt;) (&lt;Exit
+ reason&gt;)</em></tag>
+ <item>
+ <p>The kernel supervisor has detected a failure, usually that the
+ <c><![CDATA[application_controller]]></c> has shut down
+ (<c><![CDATA[Who]]></c> = <c><![CDATA[application_controller]]></c>,
+ <c><![CDATA[Why]]></c> = <c><![CDATA[shutdown]]></c>).
+ The application controller
+ can have shut down for many reasons, the most usual
+ is that the node name of the distributed Erlang node is
+ already in use. A complete supervisor tree "crash" (that is,
+ the top supervisors have exited) gives about the same
+ result. This message comes from the Erlang code and not from
+ the virtual machine itself. It is always because of some
+ failure in an application, either within OTP or a
+ "user-written" one. Looking at the error log for your
+ application is probably the first step to take.</p>
+ </item>
+ <tag><em>Init terminating in do_boot ()</em></tag>
+ <item>
+ <p>The primitive Erlang boot sequence was terminated, most probably
+ because the boot script has errors or cannot be read. This is
+ usually a configuration error; the system can have been started
+ with a faulty <c><![CDATA[-boot]]></c> parameter or with a boot
+ script from the wrong OTP version.</p>
+ </item>
+ <tag><em>Could not start kernel pid (&lt;Who&gt;) ()</em></tag>
+ <item>
+ <p>One of the kernel processes could not start. This is probably
+ because of faulty arguments (like errors in a
+ <c><![CDATA[-config]]></c> argument)
+ or faulty configuration files. Check that all files are in
+ their correct location and that the configuration files (if
+ any) are not damaged. Usually messages are also
+ written to the controlling terminal and/or the error log
+ explaining what is wrong.</p>
+ </item>
+ </taglist>
+
+ <p>Other errors than these can occur, as the
+ <c><![CDATA[erlang:halt/1]]></c> BIF can generate any message. If the
message is not generated by the BIF and does not occur in the
- list above, it may be due to an error in the emulator. There
- may however be unusual messages that I haven't mentioned, that
- still are connected to an application failure. There is a lot
- more information available, so more thorough reading of the
- crash dump may reveal the crash reason. The size of processes,
- the number of ets tables and the Erlang data on each process
- stack can be useful for tracking down the problem.</p>
+ list above, it can be because of an error in the emulator. There
+ can however be unusual messages, not mentioned here, which
+ are still connected to an application failure. There is much
+ more information available, so a thorough reading of the
+ crash dump can reveal the crash reason. The size of processes,
+ the number of ETS tables, and the Erlang data on each process
+ stack can be useful to find the problem.</p>
</section>
<section>
- <title>Number of atoms</title>
+ <title>Number of Atoms</title>
<p>The number of atoms in the system at the time of the crash is
shown as <em>Atoms: &lt;number&gt;</em>. Some ten thousands atoms is
- perfectly normal, but more could indicate that the BIF
- <c><![CDATA[erlang:list_to_atom/1]]></c> is used to dynamically generate a
- lot of <em>different</em> atoms, which is never a good idea.</p>
+ perfectly normal, but more can indicate that the BIF
+ <c><![CDATA[erlang:list_to_atom/1]]></c> is used to generate many
+ <em>different</em> atoms dynamically, which is never a good idea.</p>
</section>
</section>
<section>
<marker id="scheduler"></marker>
- <title>Scheduler information</title>
- <p>Under the tag <em>=scheduler</em> information about the current state
- and statistics of the schedulers in the runtime system is displayed.
- On OSs that do allow instant suspension of other threads, the data within
- this section will reflect what the runtime system looks like at the moment
- when the crash happens.</p>
+ <title>Scheduler Information</title>
+ <p>Under the tag <em>=scheduler</em> is shown information about the current
+ state and statistics of the schedulers in the runtime system. On
+ operating systems that allow suspension of other threads, the
+ data within this section reflects what the runtime system looks like
+ when a crash occurs.</p>
+
<p>The following fields can exist for a process:</p>
+
<taglist>
<tag><em>=scheduler:id</em></tag>
- <item>Header, states the scheduler identifier.</item>
+ <item>
+ <p>Heading. States the scheduler identifier.</p>
+ </item>
<tag><em>Scheduler Sleep Info Flags</em></tag>
- <item>If empty the scheduler was doing some work.
- If not empty the scheduler is either in some state of sleep,
- or suspended. This entry is only present in a SMP enabled emulator</item>
+ <item>
+ <p>If empty, the scheduler was doing some work.
+ If not empty, the scheduler is either in some state of sleep,
+ or suspended. This entry is only present in an SMP-enabled
+ emulator.</p>
+ </item>
<tag><em>Scheduler Sleep Info Aux Work</em></tag>
- <item>If not empty, a scheduler internal auxiliary work is scheduled
- to be done.</item>
+ <item>
+ <p>If not empty, a scheduler internal auxiliary work is scheduled
+ to be done.</p>
+ </item>
<tag><em>Current Port</em></tag>
- <item>The port identifier of the port that is currently being
- executed by the scheduler.</item>
+ <item>
+ <p>The port identifier of the port that is currently
+ executed by the scheduler.</p>
+ </item>
<tag><em>Current Process</em></tag>
- <item>The process identifier of the process that is currently being
- executed by the scheduler. If there is such a process this entry is
- followed by the <em>State</em>,<em>Internal State</em>,
- <em>Program Counter</em>, <em>CP</em> of that same process. See
- <seealso marker="#processes">Process Information</seealso> for a
- description what the different entries mean. Keep in mind that
- this is a snapshot of what the entries are exactly when the crash
- dump is starting to be generated. Therefore they will most likely
- be different (and more telling) then the entries for the same
- processes found in the <em>=proc</em> section. If there is no currently
- running process, only the <em>Current Process</em> entry will be printed.
+ <item>
+ <p>The process identifier of the process that is currently
+ executed by the scheduler. If there is such a process, this entry is
+ followed by the <em>State</em>, <em>Internal State</em>,
+ <em>Program Counter</em>, and <em>CP</em> of that same process.
+ The entries are described in section
+ <seealso marker="#processes">Process Information</seealso>.</p>
+ <p>Notice that this is a snapshot of what the entries are exactly when
+ the crash dump is starting to be generated. Therefore they are most
+ likely different (and more telling) than the entries for the same
+ processes found in the <em>=proc</em> section. If there is no
+ currently running process, only the <em>Current Process</em> entry is
+ shown.</p>
</item>
<tag><em>Current Process Limited Stack Trace</em></tag>
- <item>This entry only shows up if there is a current process. It is very
- similar to <seealso marker="#proc_data"><em>=proc_stack</em></seealso>,
- except that only the function frames are printed (i.e. the stack variables
- are omited). It is also limited to only print the top and bottom part
- of the stack. If the stack is small (less that 512 slots) then the
- entire stack will be printed. If not, an entry stating
- <code>skipping ## slots</code> will be printed where ## is
- replaced by the number of slots that has been skipped.</item>
+ <item>
+ <p>This entry is shown only if there is a current process. It is
+ similar to <seealso marker="#proc_data">
+ <em>=proc_stack</em></seealso>, except that only the function frames
+ are shown (that is, the stack variables are omitted).
+ Also, only the top and bottom part of the stack are shown. If the
+ stack is small (&lt; 512 slots), the entire stack is shown. Otherwise
+ the entry <em>skipping ## slots</em> is shown, where <c>##</c>
+ is replaced by the number of slots that has been skipped.</p>
+ </item>
<tag><em>Run Queue</em></tag>
- <item>Displays statistics about how many processes and ports
- of different priorities are scheduled on this scheduler.</item>
+ <item>
+ <p>Shows statistics about how many processes and ports
+ of different priorities are scheduled on this scheduler.</p>
+ </item>
<tag><em>** crashed **</em></tag>
- <item>This entry is normally not printed. It signifies that getting
- the rest of the information about this scheduler failed for some reason.
+ <item>
+ <p>This entry is normally not shown. It signifies that getting the rest
+ of the information about this scheduler failed for some reason.</p>
</item>
</taglist>
</section>
<section>
<marker id="memory"></marker>
- <title>Memory information</title>
- <p>Under the tag <em>=memory</em> you will find information similar
- to what you can obtain on a living node with
- <seealso marker="erts:erlang#erlang:memory/0">erlang:memory()</seealso>.</p>
+ <title>Memory Information</title>
+ <p>Under the tag <em>=memory</em> is shown information similar
+ to what can be obtainted on a living node with
+ <seealso marker="erts:erlang#erlang:memory/0">
+ <c>erlang:memory()</c></seealso>.</p>
</section>
<section>
<marker id="internal_tables"></marker>
- <title>Internal table information</title>
- <p>The tags <em>=hash_table:&lt;table_name&gt;</em> and
- <em>=index_table:&lt;table_name&gt;</em> presents internal
- tables. These are mostly of interest for runtime system
- developers.</p>
+ <title>Internal Table Information</title>
+ <p>Under the tags <em>=hash_table:&lt;table_name&gt;</em> and
+ <em>=index_table:&lt;table_name&gt;</em> is shown internal
+ tables. These are mostly of interest for runtime system developers.</p>
</section>
<section>
<marker id="allocated_areas"></marker>
- <title>Allocated areas</title>
- <p>Under the tag <em>=allocated_areas</em> you will find information
- similar to what you can obtain on a living node with
- <seealso marker="erts:erlang#system_info_allocated_areas">erlang:system_info(allocated_areas)</seealso>.</p>
+ <title>Allocated Areas</title>
+ <p>Under the tag <em>=allocated_areas</em> is shown information
+ similar to what can be obtained on a living node with
+ <seealso marker="erts:erlang#system_info_allocated_areas">
+ <c>erlang:system_info(allocated_areas)</c></seealso>.</p>
</section>
<section>
<marker id="allocator"></marker>
<title>Allocator</title>
- <p>Under the tag <em>=allocator:&lt;A&gt;</em> you will find
+ <p>Under the tag <em>=allocator:&lt;A&gt;</em> is shown
various information about allocator &lt;A&gt;. The information
- is similar to what you can obtain on a living node with
- <seealso marker="erts:erlang#system_info_allocator_tuple">erlang:system_info({allocator, &lt;A&gt;})</seealso>.
- For more information see the documentation of
- <seealso marker="erts:erlang#system_info_allocator_tuple">erlang:system_info({allocator, &lt;A&gt;})</seealso>,
- and the
- <seealso marker="erts_alloc">erts_alloc(3)</seealso>
- documentation.</p>
+ is similar to what can be obtained on a living node with
+ <seealso marker="erts:erlang#system_info_allocator_tuple">
+ <c>erlang:system_info({allocator, &lt;A&gt;})</c></seealso>.
+ For more information, see also
+ <seealso marker="erts_alloc"><c>erts_alloc(3)</c></seealso>.</p>
</section>
<section>
<marker id="processes"></marker>
- <title>Process information</title>
+ <title>Process Information</title>
<p>The Erlang crashdump contains a listing of each living Erlang
- process in the system. The process information for one process
- may look like this (line numbers have been added):
- </p>
- <p>The following fields can exist for a process:</p>
+ process in the system. The following fields can exist for a process:</p>
+
<taglist>
<tag><em>=proc:&lt;pid&gt;</em></tag>
- <item>Heading, states the process identifier</item>
+ <item>
+ <p>Heading. States the process identifier.</p>
+ </item>
<tag><em>State</em></tag>
<item>
<p>The state of the process. This can be one of the following:</p>
- <list type="bulleted">
- <item><em>Scheduled</em> - The process was scheduled to run
- but not currently running ("in the run queue").</item>
- <item><em>Waiting</em> - The process was waiting for
- something (in <c><![CDATA[receive]]></c>).</item>
- <item><em>Running</em> - The process was currently
- running. If the BIF <c><![CDATA[erlang:halt/1]]></c> was called, this was
- the process calling it.</item>
- <item><em>Exiting</em> - The process was on its way to
- exit.</item>
- <item><em>Garbing</em> - This is bad luck, the process was
- garbage collecting when the crash dump was written, the rest
- of the information for this process is limited.</item>
- <item><em>Suspended</em> - The process is suspended, either
- by the BIF <c><![CDATA[erlang:suspend_process/1]]></c> or because it is
- trying to write to a busy port.</item>
- </list>
+ <taglist>
+ <tag><em>Scheduled</em></tag>
+ <item>The process was scheduled to run
+ but is currently not running ("in the run queue").</item>
+ <tag><em>Waiting</em></tag>
+ <item>The process was waiting for
+ something (in <c><![CDATA[receive]]></c>).</item>
+ <tag><em>Running</em></tag>
+ <item>The process was currently running.
+ If the BIF <c><![CDATA[erlang:halt/1]]></c> was called, this was
+ the process calling it.</item>
+ <tag><em>Exiting</em></tag>
+ <item>The process was on its way to exit.</item>
+ <tag><em>Garbing</em></tag>
+ <item>This is bad luck, the process was
+ garbage collecting when the crash dump was written. The rest
+ of the information for this process is limited.</item>
+ <tag><em>Suspended</em></tag>
+ <item>The process is suspended, either
+ by the BIF <c><![CDATA[erlang:suspend_process/1]]></c> or because
+ it tries to write to a busy port.</item>
+ </taglist>
</item>
<tag><em>Registered name</em></tag>
- <item>The registered name of the process, if any.</item>
+ <item>
+ <p>The registered name of the process, if any.</p>
+ </item>
<tag><em>Spawned as</em></tag>
- <item>The entry point of the process, i.e., what function was
- referenced in the <c><![CDATA[spawn]]></c> or <c><![CDATA[spawn_link]]></c> call that
- started the process.</item>
+ <item>
+ <p>The entry point of the process, that is, what function was
+ referenced in the <c><![CDATA[spawn]]></c> or
+ <c><![CDATA[spawn_link]]></c> call that
+ started the process.</p>
+ </item>
<tag><em>Last scheduled in for | Current call</em></tag>
- <item>The current function of the process. These fields will not
- always exist.</item>
+ <item>
+ <p>The current function of the process. These fields do not
+ always exist.</p>
+ </item>
<tag><em>Spawned by</em></tag>
- <item>The parent of the process, i.e. the process which executed
- <c><![CDATA[spawn]]></c> or <c><![CDATA[spawn_link]]></c>.</item>
+ <item>
+ <p>The parent of the process, that is, the process that executed
+ <c><![CDATA[spawn]]></c> or <c><![CDATA[spawn_link]]></c>.</p>
+ </item>
<tag><em>Started</em></tag>
- <item>The date and time when the process was started.</item>
+ <item>
+ <p>The date and time when the process was started.</p>
+ </item>
<tag><em>Message queue length</em></tag>
- <item>The number of messages in the process' message queue.</item>
+ <item>
+ <p>The number of messages in the process' message queue.</p>
+ </item>
<tag><em>Number of heap fragments</em></tag>
- <item>The number of allocated heap fragments.</item>
+ <item>
+ <p>The number of allocated heap fragments.</p>
+ </item>
<tag><em>Heap fragment data</em></tag>
- <item>Size of fragmented heap data. This is data either created by
- messages being sent to the process or by the Erlang BIFs. This
- amount depends on so many things that this field is utterly
- uninteresting.</item>
+ <item>
+ <p>Size of fragmented heap data. This is data either created by
+ messages sent to the process or by the Erlang BIFs. This
+ amount depends on so many things that this field is utterly
+ uninteresting.</p>
+ </item>
<tag><em>Link list</em></tag>
- <item>Process id's of processes linked to this one. May also contain
- ports. If process monitoring is used, this field also tells in
- which direction the monitoring is in effect, i.e., a link
- being "to" a process tells you that the "current" process was
- monitoring the other and a link "from" a process tells you
- that the other process was monitoring the current one.</item>
+ <item>
+ <p>Process IDs of processes linked to this one. Can also contain
+ ports. If process monitoring is used, this field also tells in
+ which direction the monitoring is in effect. That is, a link
+ "to" a process tells you that the "current" process was
+ monitoring the other, and a link "from" a process tells you
+ that the other process was monitoring the current one.</p>
+ </item>
<tag><em>Reductions</em></tag>
- <item>The number of reductions consumed by the process.</item>
+ <item>
+ <p>The number of reductions consumed by the process.</p>
+ </item>
<tag><em>Stack+heap</em></tag>
- <item>The size of the stack and heap (they share memory segment)</item>
+ <item>
+ <p>The size of the stack and heap (they share memory segment).</p>
+ </item>
<tag><em>OldHeap</em></tag>
- <item>The size of the "old heap". The Erlang virtual machine uses
- generational garbage collection with two generations. There is
- one heap for new data items and one for the data that have
- survived two garbage collections. The assumption (which is
- almost always correct) is that data that survive two garbage
- collections can be "tenured" to a heap more seldom garbage
- collected, as they will live for a long period. This is a
- quite usual technique in virtual machines. The sum of the
- heaps and stack together constitute most of the process's
- allocated memory.</item>
+ <item>
+ <p>The size of the "old heap". The Erlang virtual machine uses
+ generational garbage collection with two generations. There is
+ one heap for new data items and one for the data that has
+ survived two garbage collections. The assumption (which is
+ almost always correct) is that data surviving two garbage
+ collections can be "tenured" to a heap more seldom garbage
+ collected, as they will live for a long period. This is a
+ usual technique in virtual machines. The sum of the
+ heaps and stack together constitute most of the
+ allocated memory of the process.</p>
+ </item>
<tag><em>Heap unused, OldHeap unused</em></tag>
- <item>The amount of unused memory on each heap. This information is
- usually useless.</item>
- <tag><em>Stack</em></tag>
- <item>If the system uses shared heap, the fields
- <em>Stack+heap</em>, <em>OldHeap</em>, <em>Heap unused</em>
- and <em>OldHeap unused</em> do not exist. Instead this field
- presents the size of the process' stack.</item>
+ <item>
+ <p>The amount of unused memory on each heap. This information is
+ usually useless.</p>
+ </item>
<tag><em>Memory</em></tag>
- <item>The total memory used by this process. This includes call stack,
- heap and internal structures. Same as <seealso marker="erlang#process_info-2">erlang:process_info(Pid,memory)</seealso>.
+ <item>
+ <p>The total memory used by this process. This includes call stack,
+ heap, and internal structures. Same as
+ <seealso marker="erlang#process_info-2">
+ <c>erlang:process_info(Pid,memory)</c></seealso>.</p>
</item>
<tag><em>Program counter</em></tag>
- <item>The current instruction pointer. This is only interesting for
- runtime system developers. The function into which the program
- counter points is the current function of the process.</item>
+ <item>
+ <p>The current instruction pointer. This is only of interest for
+ runtime system developers. The function into which the program
+ counter points is the current function of the process.</p>
+ </item>
<tag><em>CP</em></tag>
- <item>The continuation pointer, i.e. the return address for the
- current call. Usually useless for other than runtime system
- developers. This may be followed by the function into which
- the CP points, which is the function calling the current
- function.</item>
+ <item>
+ <p>The continuation pointer, that is, the return address for the
+ current call. Usually useless for other than runtime system
+ developers. This can be followed by the function into which
+ the CP points, which is the function calling the current
+ function.</p>
+ </item>
<tag><em>Arity</em></tag>
- <item>The number of live argument registers. The argument registers,
- if any are live, will follow. These may contain the arguments
- of the function if they are not yet moved to the stack.</item>
- <item><em>Internal State</em></item>
- <item>A more detailed internal represantation of the state of
- this process.</item>
+ <item>
+ <p>The number of live argument registers. The argument registers
+ if any are live will follow. These can contain the arguments
+ of the function if they are not yet moved to the stack.</p>
+ </item>
+ <tag><em>Internal State</em></tag>
+ <item>
+ <p>A more detailed internal representation of the state of
+ this process.</p>
+ </item>
</taglist>
- <p>See also the section about <seealso marker="#proc_data">process data</seealso>.</p>
+ <p>See also section <seealso marker="#proc_data">Process Data</seealso>.</p>
</section>
<section>
<marker id="ports"></marker>
- <title>Port information</title>
+ <title>Port Information</title>
<p>This section lists the open ports, their owners, any linked
- processed, and the name of their driver or external process.</p>
+ processes, and the name of their driver or external process.</p>
</section>
<section>
<marker id="ets_tables"></marker>
- <title>ETS tables</title>
+ <title>ETS Tables</title>
<p>This section contains information about all the ETS tables in
- the system. The following fields are interesting for each table:</p>
+ the system. The following fields are of interest for each table:</p>
+
<taglist>
<tag><em>=ets:&lt;owner&gt;</em></tag>
- <item>Heading, states the owner of the table (a process identifier)</item>
+ <item>
+ <p>Heading. States the table owner (a process identifier).</p>
+ </item>
<tag><em>Table</em></tag>
- <item>The identifier for the table. If the table is a
- <c><![CDATA[named_table]]></c>, this is the name.</item>
+ <item>
+ <p>The identifier for the table. If the table is a
+ <c><![CDATA[named_table]]></c>, this is the name.</p>
+ </item>
<tag><em>Name</em></tag>
- <item>The name of the table, regardless of whether it is a
- <c><![CDATA[named_table]]></c> or not.</item>
+ <item>
+ <p>The table name, regardless of if it is a
+ <c><![CDATA[named_table]]></c> or not.</p>
+ </item>
<tag><em>Hash table, Buckets</em></tag>
- <item>This occurs if the table is a hash table, i.e. if it is not an
- <c><![CDATA[ordered_set]]></c>.</item>
+ <item>
+ <p>If the table is a hash table, that is, if it is not an
+ <c><![CDATA[ordered_set]]></c>.</p>
+ </item>
<tag><em>Hash table, Chain Length</em></tag>
- <item>Only applicable for hash tables. Contains statistics about the
- hash table, such as the max, min and avg chain length. Having a max much
- larger than the avg, and a std dev much larger that
- the expected std dev is a sign that the hashing of the terms is
- behaving badly for some reason.</item>
+ <item>
+ <p>If the table is a hash table. Contains statistics about the
+ table, such as the maximum, minimum, and average chain length.
+ Having a maximum much larger than the average, and a standard
+ deviation much larger than the expected standard deviation is
+ a sign that the hashing of the terms
+ behaves badly for some reason.</p>
+ </item>
<tag><em>Ordered set (AVL tree), Elements</em></tag>
- <item>This occurs only if the table is an <c><![CDATA[ordered_set]]></c>. (The
- number of elements is the same as the number of objects in the
- table.)</item>
+ <item>
+ <p>If the table is an <c><![CDATA[ordered_set]]></c>. (The
+ number of elements is the same as the number of objects in the
+ table.)</p>
+ </item>
<tag><em>Fixed</em></tag>
- <item>If the table is fixed using ets:safe_fixtable or some internal
- mechanism.</item>
+ <item>
+ <p>If the table is fixed using
+ <seealso marker="stdlib:ets#safe_fixtable/2">
+ <c>ets:safe_fixtable/2</c></seealso> or some internal mechanism.</p>
+ </item>
<tag><em>Objects</em></tag>
- <item>The number of objects in the table</item>
+ <item>
+ <p>The number of objects in the table.</p>
+ </item>
<tag><em>Words</em></tag>
- <item>The number of words (usually 4 bytes/word) allocated to data
- in the table.</item>
+ <item>
+ <p>The number of words (usually 4 bytes/word) allocated to data
+ in the table.</p>
+ </item>
<tag><em>Type</em></tag>
- <item>The type of the table, i.e. <c>set</c>, <c>bag</c>,
- <c>dublicate_bag</c> or <c>ordered_set</c>.</item>
+ <item>
+ <p>The table type, that is, <c>set</c>, <c>bag</c>,
+ <c>dublicate_bag</c>, or <c>ordered_set</c>.</p>
+ </item>
<tag><em>Compressed</em></tag>
- <item>If this table was compressed.</item>
+ <item>
+ <p>If the table was compressed.</p>
+ </item>
<tag><em>Protection</em></tag>
- <item>The protection of this table.</item>
+ <item>
+ <p>The protection of the table.</p>
+ </item>
<tag><em>Write Concurrency</em></tag>
- <item>If write_concurrency was enabled for this table.</item>
+ <item>
+ <p>If <c>write_concurrency</c> was enabled for the table.</p>
+ </item>
<tag><em>Read Concurrency</em></tag>
- <item>If read_concurrency was enabled for this table.</item>
+ <item>
+ <p>If <c>read_concurrency</c> was enabled for the table.</p>
+ </item>
</taglist>
</section>
@@ -435,167 +563,252 @@
<title>Timers</title>
<p>This section contains information about all the timers started
with the BIFs <c><![CDATA[erlang:start_timer/3]]></c> and
- <c><![CDATA[erlang:send_after/3]]></c>. The following fields exists for each
- timer:</p>
+ <c><![CDATA[erlang:send_after/3]]></c>. The following fields exist
+ for each timer:</p>
+
<taglist>
<tag><em>=timer:&lt;owner&gt;</em></tag>
- <item>Heading, states the owner of the timer (a process identifier)
- i.e. the process to receive the message when the timer
- expires.</item>
+ <item>
+ <p>Heading. States the timer owner (a process identifier),
+ that is, the process to receive the message when the timer
+ expires.</p>
+ </item>
<tag><em>Message</em></tag>
- <item>The message to be sent.</item>
+ <item>
+ <p>The message to be sent.</p>
+ </item>
<tag><em>Time left</em></tag>
- <item>Number of milliseconds left until the message would have been
- sent.</item>
+ <item>
+ <p>Number of milliseconds left until the message would have been
+ sent.</p>
+ </item>
</taglist>
</section>
<section>
<marker id="distribution_info"></marker>
- <title>Distribution information</title>
- <p>If the Erlang node was alive, i.e., set up for communicating
+ <title>Distribution Information</title>
+ <p>If the Erlang node was alive, that is, set up for communicating
with other nodes, this section lists the connections that were
active. The following fields can exist:</p>
+
<taglist>
<tag><em>=node:&lt;node_name&gt;</em></tag>
- <item>The name of the node</item>
+ <item>
+ <p>The node name.</p>
+ </item>
<tag><em>no_distribution</em></tag>
- <item>This will only occur if the node was not distributed.</item>
+ <item>
+ <p>If the node was not distributed.</p>
+ </item>
<tag><em>=visible_node:&lt;channel&gt;</em></tag>
- <item>Heading for a visible nodes, i.e. an alive node with a
- connection to the node that crashed. States the channel number
- for the node.</item>
+ <item>
+ <p>Heading for a visible node, that is, an alive node with a
+ connection to the node that crashed. States the channel number
+ for the node.</p>
+ </item>
<tag><em>=hidden_node:&lt;channel&gt;</em></tag>
- <item>Heading for a hidden node. A hidden node is the same as a
- visible node, except that it is started with the "-hidden"
- flag. States the channel number for the node.</item>
+ <item>
+ <p>Heading for a hidden node. A hidden node is the same as a
+ visible node, except that it is started with the <c>"-hidden"</c>
+ flag. States the channel number for the node.</p>
+ </item>
<tag><em>=not_connected:&lt;channel&gt;</em></tag>
- <item>Heading for a node which is has been connected to the crashed
- node earlier. References (i.e. process or port identifiers)
- to the not connected node existed at the time of the crash.
- exist. States the channel number for the node.</item>
+ <item>
+ <p>Heading for a node that was connected to the crashed
+ node earlier. References (that is, process or port identifiers)
+ to the not connected node existed at the time of the crash.
+ States the channel number for the node.</p>
+ </item>
<tag><em>Name</em></tag>
- <item>The name of the remote node.</item>
+ <item>
+ <p>The name of the remote node.</p>
+ </item>
<tag><em>Controller</em></tag>
- <item>The port which controls the communication with the remote node.</item>
+ <item>
+ <p>The port controlling communication with the remote node.</p>
+ </item>
<tag><em>Creation</em></tag>
- <item>An integer (1-3) which together with the node name identifies
- a specific instance of the node.</item>
- <tag><em>Remote monitoring: &lt;local_proc&gt; &lt;remote_proc&gt;</em></tag>
- <item>The local process was monitoring the remote process at the
- time of the crash.</item>
- <tag><em>Remotely monitored by: &lt;local_proc&gt; &lt;remote_proc&gt;</em></tag>
- <item>The remote process was monitoring the local process at the
- time of the crash.</item>
+ <item>
+ <p>An integer (1-3) that together with the node name identifies
+ a specific instance of the node.</p>
+ </item>
+ <tag><em>Remote monitoring: &lt;local_proc&gt; &lt;remote_proc&gt;</em>
+ </tag>
+ <item>
+ <p>The local process was monitoring the remote process at the
+ time of the crash.</p>
+ </item>
+ <tag><em>Remotely monitored by: &lt;local_proc&gt;
+ &lt;remote_proc&gt;</em></tag>
+ <item>
+ <p>The remote process was monitoring the local process at the
+ time of the crash.</p>
+ </item>
<tag><em>Remote link: &lt;local_proc&gt; &lt;remote_proc&gt;</em></tag>
- <item>A link existed between the local process and the remote
- process at the time of the crash.</item>
+ <item>
+ <p>A link existed between the local process and the remote
+ process at the time of the crash.</p>
+ </item>
</taglist>
</section>
<section>
<marker id="loaded_modules"></marker>
- <title>Loaded module information</title>
- <p>This section contains information about all loaded modules.
- First, the memory usage by loaded code is summarized. There is
- one field for "Current code" which is code that is the current
- latest version of the modules. There is also a field for "Old
- code" which is code where there exists a newer version in the
- system, but the old version is not yet purged. The memory usage
- is in bytes.</p>
- <p>All loaded modules are then listed. The following fields exist:</p>
+ <title>Loaded Module Information</title>
+ <p>This section contains information about all loaded modules.</p>
+
+ <p>First, the memory use by the loaded code is summarized:</p>
+
+ <taglist>
+ <tag><em>Current code</em></tag>
+ <item>
+ <p>Code that is the current latest version of the modules.</p>
+ </item>
+ <tag><em>Old code</em></tag>
+ <item>
+ <p>Code where there exists a newer version in the
+ system, but the old version is not yet purged.</p>
+ </item>
+ </taglist>
+
+ <p>The memory use is in bytes.</p>
+
+ <p>Then, all loaded modules are listed. The following fields exist:</p>
+
<taglist>
<tag><em>=mod:&lt;module_name&gt;</em></tag>
- <item>Heading, and the name of the module.</item>
+ <item>
+ <p>Heading. States the module name.</p>
+ </item>
<tag><em>Current size</em></tag>
- <item>Memory usage for the loaded code in bytes</item>
+ <item>
+ <p>Memory use for the loaded code, in bytes.</p>
+ </item>
<tag><em>Old size</em></tag>
- <item>Memory usage for the old code, if any.</item>
+ <item>
+ <p>Memory use for the old code, if any.</p>
+ </item>
<tag><em>Current attributes</em></tag>
- <item>Module attributes for the current code. This field is decoded
- when looked at by the Crashdump Viewer tool.</item>
+ <item>
+ <p>Module attributes for the current code. This field is decoded
+ when looked at by the Crashdump Viewer tool.</p>
+ </item>
<tag><em>Old attributes</em></tag>
- <item>Module attributes for the old code, if any. This field is
- decoded when looked at by the Crashdump Viewer tool.</item>
+ <item>
+ <p>Module attributes for the old code, if any. This field is
+ decoded when looked at by the Crashdump Viewer tool.</p>
+ </item>
<tag><em>Current compilation info</em></tag>
- <item>Compilation information (options) for the current code. This
- field is decoded when looked at by the Crashdump Viewer tool.</item>
+ <item>
+ <p>Compilation information (options) for the current code. This
+ field is decoded when looked at by the Crashdump Viewer tool.</p>
+ </item>
<tag><em>Old compilation info</em></tag>
- <item>Compilation information (options) for the old code, if
- any. This field is decoded when looked at by the Crashdump
- Viewer tool.</item>
+ <item>
+ <p>Compilation information (options) for the old code, if
+ any. This field is decoded when looked at by the Crashdump
+ Viewer tool.</p>
+ </item>
</taglist>
</section>
<section>
<marker id="funs"></marker>
- <title>Fun information</title>
- <p>In this section, all funs are listed. The following fields exist
- for each fun:</p>
+ <title>Fun Information</title>
+ <p>This section lists all funs. The following fields exist for each fun:</p>
+
<taglist>
<tag><em>=fun</em></tag>
- <item>Heading</item>
+ <item>
+ <p>Heading.</p>
+ </item>
<tag><em>Module</em></tag>
- <item>The name of the module where the fun was defined.</item>
+ <item>
+ <p>The name of the module where the fun was defined.</p>
+ </item>
<tag><em>Uniq, Index</em></tag>
- <item>Identifiers</item>
+ <item>
+ <p>Identifiers.</p>
+ </item>
<tag><em>Address</em></tag>
- <item>The address of the fun's code.</item>
+ <item>
+ <p>The address of the fun's code.</p>
+ </item>
<tag><em>Native_address</em></tag>
- <item>The address of the fun's code when HiPE is enabled.</item>
+ <item>
+ <p>The address of the fun's code when HiPE is enabled.</p>
+ </item>
<tag><em>Refc</em></tag>
- <item>The number of references to the fun.</item>
+ <item>
+ <p>The number of references to the fun.</p>
+ </item>
</taglist>
</section>
<section>
<marker id="proc_data"></marker>
<title>Process Data</title>
- <p>For each process there will be at least one <em>=proc_stack</em>
- and one <em>=proc_heap</em> tag followed by the raw memory
+ <p>For each process there is at least one <em>=proc_stack</em>
+ and one <em>=proc_heap</em> tag, followed by the raw memory
information for the stack and heap of the process.</p>
- <p>For each process there will also be a <em>=proc_messages</em>
- tag if the process' message queue is non-empty and a
- <em>=proc_dictionary</em> tag if the process' dictionary (the
- <c><![CDATA[put/2]]></c> and <c><![CDATA[get/1]]></c> thing) is non-empty.</p>
+
+ <p>For each process there is also a <em>=proc_messages</em>
+ tag if the process message queue is non-empty, and a
+ <em>=proc_dictionary</em> tag if the process dictionary (the
+ <c><![CDATA[put/2]]></c> and <c><![CDATA[get/1]]></c> thing) is
+ non-empty.</p>
+
<p>The raw memory information can be decoded by the Crashdump
- Viewer tool. You will then be able to see the stack dump, the
- message queue (if any) and the dictionary (if any).</p>
+ Viewer tool. You can then see the stack dump, the
+ message queue (if any), and the dictionary (if any).</p>
+
<p>The stack dump is a dump of the Erlang process stack. Most of
- the live data (i.e., variables currently in use) are placed on
- the stack; thus this can be quite interesting. One has to
- "guess" what's what, but as the information is symbolic,
- thorough reading of this information can be very useful. As an
- example we can find the state variable of the Erlang primitive
- loader on line <c><![CDATA[(5)]]></c> in the example below:</p>
+ the live data (that is, variables currently in use) are placed on
+ the stack; thus this can be interesting. One has to
+ "guess" what is what, but as the information is symbolic,
+ thorough reading of this information can be useful. As an
+ example, we can find the state variable of the Erlang primitive
+ loader online <c><![CDATA[(5)]]></c> and <c><![CDATA[(6)]]></c>
+ in the following example:</p>
+
<code type="none"><![CDATA[
(1) 3cac44 Return addr 0x13BF58 (<terminate process normally>)
-(2) y(0) ["/view/siri_r10_dev/clearcase/otp/erts/lib/kernel/ebin","/view/siri_r10_dev/
-(3) clearcase/otp/erts/lib/stdlib/ebin"]
+(2) y(0) ["/view/siri_r10_dev/clearcase/otp/erts/lib/kernel/ebin",
+(3) "/view/siri_r10_dev/clearcase/otp/erts/lib/stdlib/ebin"]
(4) y(1) <0.1.0>
-(5) y(2) {state,[],none,#Fun<erl_prim_loader.6.7085890>,undefined,#Fun<erl_prim_loader.7.9000327>,#Fun<erl_prim_loader.8.116480692>,#Port<0.2>,infinity,#Fun<erl_prim_loader.9.10708760>}
-(6) y(3) infinity ]]></code>
+(5) y(2) {state,[],none,#Fun<erl_prim_loader.6.7085890>,undefined,#Fun<erl_prim_loader.7.9000327>,
+(6) #Fun<erl_prim_loader.8.116480692>,#Port<0.2>,infinity,#Fun<erl_prim_loader.9.10708760>}
+(7) y(3) infinity ]]></code>
+
<p>When interpreting the data for a process, it is helpful to know
- that anonymous function objects (funs) are given a name
- constructed from the name of the function in which they are
- created, and a number (starting with 0) indicating the number of
- that fun within that function.</p>
+ that anonymous function objects (funs) are given the following:</p>
+
+ <list type="bulleted">
+ <item>A name constructed from the name of the function in which they are
+ created
+ </item>
+ <item>A number (starting with 0) indicating the number of that fun within
+ that function
+ </item>
+ </list>
</section>
<section>
<marker id="atoms"></marker>
<title>Atoms</title>
- <p>Now all the atoms in the system are written. This is only
- interesting if one suspects that dynamic generation of atoms could
+ <p>This section presents all the atoms in the system. This is only
+ of interest if one suspects that dynamic generation of atoms can
be a problem, otherwise this section can be ignored.</p>
- <p>Note that the last created atom is printed first.</p>
+
+ <p>Notice that the last created atom is shown first.</p>
</section>
<section>
<title>Disclaimer</title>
- <p>The format of the crash dump evolves between releases of
- OTP. Some information here may not apply to your
- version. A description as this will never be complete; it is meant as
+ <p>The format of the crash dump evolves between OTP releases.
+ Some information described here may not apply to your
+ version. A description like this will never be complete; it is meant as
an explanation of the crash dump in general and as a help
when trying to find application errors, not as a complete
specification.</p>
diff --git a/erts/doc/src/driver.xml b/erts/doc/src/driver.xml
index 4bef5e1388..8f31df4cad 100644
--- a/erts/doc/src/driver.xml
+++ b/erts/doc/src/driver.xml
@@ -22,103 +22,115 @@
</legalnotice>
- <title>How to implement a driver</title>
+ <title>How to Implement a Driver</title>
<prepared>Jakob C</prepared>
<docno></docno>
<date>2000-11-28</date>
<rev>PA1</rev>
<file>driver.xml</file>
</header>
-
- <note><p>This document was written a long time ago. A lot of it is still
- interesting since it explains important concepts, but it was
- written for an older driver interface so the examples do not
- work anymore. The reader is encouraged to read
- <seealso marker="erl_driver">erl_driver</seealso> and the
- <seealso marker="driver_entry">driver_entry</seealso> documentation.
- </p></note>
+ <note>
+ <p>This section was written a long time ago. Most of it is still
+ valid, as it explains important concepts, but this was
+ written for an older driver interface so the examples do not
+ work anymore. The reader is encouraged to read the
+ <seealso marker="erl_driver"><c>erl_driver</c></seealso> and
+ <seealso marker="driver_entry"><c>driver_entry</c></seealso>
+ documentation also.</p>
+ </note>
<section>
<title>Introduction</title>
- <p>This chapter tells you how to build your own driver for erlang.</p>
- <p>A driver in Erlang is a library written in C, that is linked to
- the Erlang emulator and called from erlang. Drivers can be used
- when C is more suitable than Erlang, to speed things up, or to
- provide access to OS resources not directly accessible from
- Erlang.</p>
+ <p>This section describes how to build your own driver for Erlang.</p>
+
+ <p>A driver in Erlang is a library written in C, which is linked to
+ the Erlang emulator and called from Erlang. Drivers can be used
+ when C is more suitable than Erlang, to speed up things, or to
+ provide access to OS resources not directly accessible from Erlang.</p>
+
<p>A driver can be dynamically loaded, as a shared library (known as
- a DLL on windows), or statically loaded, linked with the emulator
+ a DLL on Windows), or statically loaded, linked with the emulator
when it is compiled and linked. Only dynamically loaded drivers
are described here, statically linked drivers are beyond the scope
- of this chapter.</p>
- <p>When a driver is loaded it is executed in the context of the
- emulator, shares the same memory and the same thread. This means
- that all operations in the driver must be non-blocking, and that
- any crash in the driver will bring the whole emulator down. In
- short: you have to be extremely careful!</p>
- <p></p>
+ of this section.</p>
+
+ <warning>
+ <p>When a driver is loaded it is executed in the context of the
+ emulator, shares the same memory and the same thread. This means
+ that all operations in the driver must be non-blocking, and that
+ any crash in the driver brings the whole emulator down. In short,
+ be careful.</p>
+ </warning>
</section>
<section>
- <title>Sample driver</title>
- <p>This is a simple driver for accessing a postgres
+ <title>Sample Driver</title>
+ <p>This section describes a simple driver for accessing a postgres
database using the libpq C client library. Postgres
- is used because it's free and open source. For information
- on postgres, refer to the website
- <url href="http://www.postgres.org">www.postgres.org</url>.</p>
+ is used because it is free and open source. For information on postgres,
+ see <url href="http://www.postgres.org">www.postgres.org</url>.</p>
+
<p>The driver is synchronous, it uses the synchronous calls of
- the client library. This is only for simplicity, and is
- generally not good, since it will
- halt the emulator while waiting for the database.
- This will be improved on below with an asynchronous
- sample driver.</p>
- <p>The code is quite straight-forward: all
+ the client library. This is only for simplicity, but not good, as it
+ halts the emulator while waiting for the database.
+ This is improved below with an asynchronous sample driver.</p>
+
+ <p>The code is straightforward: all
communication between Erlang and the driver
is done with <c><![CDATA[port_control/3]]></c>, and the
driver returns data back using the <c><![CDATA[rbuf]]></c>.</p>
+
<p>An Erlang driver only exports one function: the driver
entry function. This is defined with a macro,
- <c><![CDATA[DRIVER_INIT]]></c>, and returns a pointer to a
+ <c><![CDATA[DRIVER_INIT]]></c>, which returns a pointer to a
C <c><![CDATA[struct]]></c> containing the entry points that are
called from the emulator. The <c><![CDATA[struct]]></c> defines the
entries that the emulator calls to call the driver, with
a <c><![CDATA[NULL]]></c> pointer for entries that are not defined
and used by the driver.</p>
+
<p>The <c><![CDATA[start]]></c> entry is called when the driver
is opened as a port with <c><![CDATA[open_port/2]]></c>. Here
we allocate memory for a user data structure.
- This user data will be passed every time the emulator
- calls us. First we store the driver handle, because it
- is needed in subsequent calls. We allocate memory for
+ This user data is passed every time the emulator
+ calls us. First we store the driver handle, as it
+ is needed in later calls. We allocate memory for
the connection handle that is used by LibPQ. We also
set the port to return allocated driver binaries, by
- setting the flag <c><![CDATA[PORT_CONTROL_FLAG_BINARY]]></c>, calling
+ setting flag <c><![CDATA[PORT_CONTROL_FLAG_BINARY]]></c>, calling
<c><![CDATA[set_port_control_flags]]></c>. (This is because
- we don't know whether our data will fit in the
- result buffer of <c><![CDATA[control]]></c>, which has a default size
- set up by the emulator, currently 64 bytes.)</p>
- <p>There is an entry <c><![CDATA[init]]></c> which is called when
- the driver is loaded, but we don't use this, since
+ we do not know if our data will fit in the
+ result buffer of <c><![CDATA[control]]></c>, which has a default size,
+ 64 bytes, set up by the emulator.)</p>
+
+ <p>An entry <c><![CDATA[init]]></c> is called when
+ the driver is loaded. However, we do not use this, as
it is executed only once, and we want to have the
possibility of several instances of the driver.</p>
+
<p>The <c><![CDATA[stop]]></c> entry is called when the port
is closed.</p>
+
<p>The <c><![CDATA[control]]></c> entry is called from the emulator
when the Erlang code calls <c><![CDATA[port_control/3]]></c>,
to do the actual work. We have defined a simple set of
- commands: <c><![CDATA[connect]]></c> to login to the database, <c><![CDATA[disconnect]]></c>
- to log out and <c><![CDATA[select]]></c> to send a SQL-query and get the result.
+ commands: <c><![CDATA[connect]]></c> to log in to the database,
+ <c><![CDATA[disconnect]]></c> to log out, and <c><![CDATA[select]]></c>
+ to send a SQL-query and get the result.
All results are returned through <c><![CDATA[rbuf]]></c>.
- The library <c><![CDATA[ei]]></c> in <c><![CDATA[erl_interface]]></c> is used
- to encode data in binary term format. The result is returned
+ The library <c><![CDATA[ei]]></c> in <c><![CDATA[erl_interface]]></c> is
+ used to encode data in binary term format. The result is returned
to the emulator as binary terms, so <c><![CDATA[binary_to_term]]></c>
is called in Erlang to convert the result to term form.</p>
- <p>The code is available in <c><![CDATA[pg_sync.c]]></c> in the <c><![CDATA[sample]]></c>
- directory of <c><![CDATA[erts]]></c>.</p>
+
+ <p>The code is available in <c><![CDATA[pg_sync.c]]></c> in the
+ <c><![CDATA[sample]]></c> directory of <c><![CDATA[erts]]></c>.</p>
+
<p>The driver entry contains the functions that
- will be called by the emulator. In our simple
- example, we only provide <c><![CDATA[start]]></c>, <c><![CDATA[stop]]></c>
- and <c><![CDATA[control]]></c>.</p>
+ will be called by the emulator. In this example,
+ only <c><![CDATA[start]]></c>, <c><![CDATA[stop]]></c>,
+ and <c><![CDATA[control]]></c> are provided:</p>
+
<code type="none"><![CDATA[
/* Driver interface declarations */
static ErlDrvData start(ErlDrvPort port, char *command);
@@ -128,15 +140,15 @@ static int control(ErlDrvData drv_data, unsigned int command, char *buf,
static ErlDrvEntry pq_driver_entry = {
NULL, /* init */
- start,
- stop,
+ start,
+ stop,
NULL, /* output */
NULL, /* ready_input */
- NULL, /* ready_output */
+ NULL, /* ready_output */
"pg_sync", /* the name of the driver */
NULL, /* finish */
NULL, /* handle */
- control,
+ control,
NULL, /* timeout */
NULL, /* outputv */
NULL, /* ready_async */
@@ -145,14 +157,18 @@ static ErlDrvEntry pq_driver_entry = {
NULL /* event */
};
]]></code>
+
<p>We have a structure to store state needed by the driver,
- in this case we only need to keep the database connection.</p>
+ in this case we only need to keep the database connection:</p>
+
<code type="none"><![CDATA[
typedef struct our_data_s {
PGconn* conn;
} our_data_t;
]]></code>
- <p>These are control codes we have defined.</p>
+
+ <p>The control codes that we have defined are as follows:</p>
+
<code type="none"><![CDATA[
/* Keep the following definitions in alignment with the
* defines in erl_pq_sync.erl
@@ -162,10 +178,12 @@ typedef struct our_data_s {
#define DRV_DISCONNECT 'D'
#define DRV_SELECT 'S'
]]></code>
- <p>This just returns the driver structure. The macro
+
+ <p>This returns the driver structure. The macro
<c><![CDATA[DRIVER_INIT]]></c> defines the only exported function.
All the other functions are static, and will not be exported
from the library.</p>
+
<code type="none"><![CDATA[
/* INITIALIZATION AFTER LOADING */
@@ -180,9 +198,11 @@ DRIVER_INIT(pq_drv)
return &pq_driver_entry;
}
]]></code>
- <p>Here we do some initialization, <c><![CDATA[start]]></c> is called from
- <c><![CDATA[open_port]]></c>. The data will be passed to <c><![CDATA[control]]></c>
- and <c><![CDATA[stop]]></c>.</p>
+
+ <p>Here some initialization is done, <c><![CDATA[start]]></c> is called from
+ <c><![CDATA[open_port]]></c>. The data will be passed to
+ <c><![CDATA[control]]></c> and <c><![CDATA[stop]]></c>.</p>
+
<code type="none"><![CDATA[
/* DRIVER INTERFACE */
static ErlDrvData start(ErlDrvPort port, char *command)
@@ -195,8 +215,10 @@ static ErlDrvData start(ErlDrvPort port, char *command)
return (ErlDrvData)data;
}
]]></code>
+
<p>We call disconnect to log out from the database.
(This should have been done from Erlang, but just in case.)</p>
+
<code type="none"><![CDATA[
static int do_disconnect(our_data_t* data, ei_x_buff* x);
@@ -208,22 +230,27 @@ static void stop(ErlDrvData drv_data)
driver_free(data);
}
]]></code>
+
<p>We use the binary format only to return data to the emulator;
- input data is a string paramater for <c><![CDATA[connect]]></c> and
+ input data is a string parameter for <c><![CDATA[connect]]></c> and
<c><![CDATA[select]]></c>. The returned data consists of Erlang terms.</p>
- <p>The functions <c><![CDATA[get_s]]></c> and <c><![CDATA[ei_x_to_new_binary]]></c> are
- utilities that are used to make the code shorter. <c><![CDATA[get_s]]></c>
- duplicates the string and zero-terminates it, since the
+
+ <p>The functions <c><![CDATA[get_s]]></c> and
+ <c><![CDATA[ei_x_to_new_binary]]></c> are utilities that are used to
+ make the code shorter. <c><![CDATA[get_s]]></c>
+ duplicates the string and zero-terminates it, as the
postgres client library wants that. <c><![CDATA[ei_x_to_new_binary]]></c>
- takes an <c><![CDATA[ei_x_buff]]></c> buffer and allocates a binary and
- copies the data there. This binary is returned in <c><![CDATA[*rbuf]]></c>.
- (Note that this binary is freed by the emulator, not by us.)</p>
+ takes an <c><![CDATA[ei_x_buff]]></c> buffer, allocates a binary, and
+ copies the data there. This binary is returned in
+ <c><![CDATA[*rbuf]]></c>.
+ (Notice that this binary is freed by the emulator, not by us.)</p>
+
<code type="none"><![CDATA[
static char* get_s(const char* buf, int len);
static int do_connect(const char *s, our_data_t* data, ei_x_buff* x);
static int do_select(const char* s, our_data_t* data, ei_x_buff* x);
-/* Since we are operating in binary mode, the return value from control
+/* As we are operating in binary mode, the return value from control
* is irrelevant, as long as it is not negative.
*/
static int control(ErlDrvData drv_data, unsigned int command, char *buf,
@@ -246,10 +273,12 @@ static int control(ErlDrvData drv_data, unsigned int command, char *buf,
return r;
}
]]></code>
- <p><c><![CDATA[do_connect]]></c> is where we log in to the database. If the connection
- was successful we store the connection handle in our driver
- data, and return ok. Otherwise, we return the error message
- from postgres, and store <c><![CDATA[NULL]]></c> in the driver data.</p>
+
+ <p><c><![CDATA[do_connect]]></c> is where we log in to the database. If the
+ connection was successful, we store the connection handle in the driver
+ data, and return <c>'ok'</c>. Otherwise, we return the error message
+ from postgres and store <c><![CDATA[NULL]]></c> in the driver data.</p>
+
<code type="none"><![CDATA[
static int do_connect(const char *s, our_data_t* data, ei_x_buff* x)
{
@@ -265,10 +294,13 @@ static int do_connect(const char *s, our_data_t* data, ei_x_buff* x)
return 0;
}
]]></code>
- <p>If we are connected (if the connection handle is not <c><![CDATA[NULL]]></c>),
+
+ <p>If we are connected (and if the connection handle is not
+ <c><![CDATA[NULL]]></c>),
we log out from the database. We need to check if we should
- encode an ok, since we might get here from the <c><![CDATA[stop]]></c>
- function, which doesn't return data to the emulator.</p>
+ encode an <c>'ok'</c>, as we can get here from function
+ <c><![CDATA[stop]]></c>, which does not return data to the emulator:</p>
+
<code type="none"><![CDATA[
static int do_disconnect(our_data_t* data, ei_x_buff* x)
{
@@ -281,9 +313,11 @@ static int do_disconnect(our_data_t* data, ei_x_buff* x)
return 0;
}
]]></code>
- <p>We execute a query and encode the result. Encoding is done
- in another C module, <c><![CDATA[pg_encode.c]]></c> which is also provided
+
+ <p>We execute a query and encode the result. Encoding is done in
+ another C module, <c><![CDATA[pg_encode.c]]></c>, which is also provided
as sample code.</p>
+
<code type="none"><![CDATA[
static int do_select(const char* s, our_data_t* data, ei_x_buff* x)
{
@@ -293,12 +327,14 @@ static int do_select(const char* s, our_data_t* data, ei_x_buff* x)
return 0;
}
]]></code>
- <p>Here we simply check the result from postgres, and
- if it's data we encode it as lists of lists with
+
+ <p>Here we check the result from postgres.
+ If it is data, we encode it as lists of lists with
column data. Everything from postgres is C strings,
- so we just use <c><![CDATA[ei_x_encode_string]]></c> to send
+ so we use <c><![CDATA[ei_x_encode_string]]></c> to send
the result as strings to Erlang. (The head of the list
contains the column names.)</p>
+
<code type="none"><![CDATA[
void encode_result(ei_x_buff* x, PGresult* res, PGconn* conn)
{
@@ -338,33 +374,36 @@ void encode_result(ei_x_buff* x, PGresult* res, PGconn* conn)
</section>
<section>
- <title>Compiling and linking the sample driver</title>
- <p>The driver should be compiled and linked to a shared
- library (DLL on windows). With gcc this is done
- with the link flags <c><![CDATA[-shared]]></c> and <c><![CDATA[-fpic]]></c>.
- Since we use the <c><![CDATA[ei]]></c> library we should include
+ <title>Compiling and Linking the Sample Driver</title>
+ <p>The driver is to be compiled and linked to a shared
+ library (DLL on Windows). With gcc, this is done with
+ link flags <c><![CDATA[-shared]]></c> and <c><![CDATA[-fpic]]></c>.
+ As we use the <c><![CDATA[ei]]></c> library, we should include
it too. There are several versions of <c><![CDATA[ei]]></c>, compiled
for debug or non-debug and multi-threaded or single-threaded.
- In the makefile for the samples the <c><![CDATA[obj]]></c> directory
+ In the makefile for the samples, the <c><![CDATA[obj]]></c> directory
is used for the <c><![CDATA[ei]]></c> library, meaning that we use
the non-debug, single-threaded version.</p>
</section>
<section>
- <title>Calling a driver as a port in Erlang</title>
+ <title>Calling a Driver as a Port in Erlang</title>
<p>Before a driver can be called from Erlang, it must be
loaded and opened. Loading is done using the <c><![CDATA[erl_ddll]]></c>
module (the <c><![CDATA[erl_ddll]]></c> driver that loads dynamic
- driver, is actually a driver itself). If loading is ok
+ driver is actually a driver itself). If loading is successfull,
the port can be opened with <c><![CDATA[open_port/2]]></c>. The port
name must match the name of the shared library and
the name in the driver entry structure.</p>
+
<p>When the port has been opened, the driver can be called. In
- the <c><![CDATA[pg_sync]]></c> example, we don't have any data from
+ the <c><![CDATA[pg_sync]]></c> example, we do not have any data from
the port, only the return value from the
<c><![CDATA[port_control]]></c>.</p>
+
<p>The following code is the Erlang part of the synchronous
- postgres driver, <c><![CDATA[pg_sync.erl]]></c>.</p>
+ postgres driver, <c><![CDATA[pg_sync.erl]]></c>:</p>
+
<code type="none"><![CDATA[
-module(pg_sync).
@@ -394,20 +433,35 @@ disconnect(Port) ->
select(Port, Query) ->
binary_to_term(port_control(Port, ?DRV_SELECT, Query)).
]]></code>
- <p>The API is simple: <c><![CDATA[connect/1]]></c> loads the driver, opens it
- and logs on to the database, returning the Erlang port
- if successful, <c><![CDATA[select/2]]></c> sends a query to the driver,
- and returns the result, <c><![CDATA[disconnect/1]]></c> closes the
- database connection and the driver. (It does not unload it,
- however.) The connection string should be a connection
- string for postgres.</p>
- <p>The driver is loaded with <c><![CDATA[erl_ddll:load_driver/2]]></c>,
- and if this is successful, or if it's already loaded,
+
+ <p>The API is simple:</p>
+
+ <list type="bulleted">
+ <item>
+ <p><c><![CDATA[connect/1]]></c> loads the driver, opens it,
+ and logs on to the database, returning the Erlang port
+ if successful.</p>
+ </item>
+ <item>
+ <p><c><![CDATA[select/2]]></c> sends a query to the driver
+ and returns the result.</p>
+ </item>
+ <item>
+ <p><c><![CDATA[disconnect/1]]></c> closes the database
+ connection and the driver. (However, it does not unload it.)</p>
+ </item>
+ </list>
+
+ <p>The connection string is to be a connection string for postgres.</p>
+
+ <p>The driver is loaded with <c><![CDATA[erl_ddll:load_driver/2]]></c>.
+ If this is successful, or if it is already loaded,
it is opened. This will call the <c><![CDATA[start]]></c> function
in the driver.</p>
+
<p>We use the <c><![CDATA[port_control/3]]></c> function for all
- calls into the driver, the result from the driver is
- returned immediately, and converted to terms by calling
+ calls into the driver. The result from the driver is
+ returned immediately and converted to terms by calling
<c><![CDATA[binary_to_term/1]]></c>. (We trust that the terms returned
from the driver are well-formed, otherwise the
<c><![CDATA[binary_to_term]]></c> calls could be contained in a
@@ -415,16 +469,18 @@ select(Port, Query) ->
</section>
<section>
- <title>Sample asynchronous driver</title>
- <p>Sometimes database queries can take long time to
+ <title>Sample Asynchronous Driver</title>
+ <p>Sometimes database queries can take a long time to
complete, in our <c><![CDATA[pg_sync]]></c> driver, the emulator
halts while the driver is doing its job. This is
- often not acceptable, since no other Erlang process
+ often not acceptable, as no other Erlang process
gets a chance to do anything. To improve on our
- postgres driver, we reimplement it using the asynchronous
+ postgres driver, we re-implement it using the asynchronous
calls in LibPQ.</p>
- <p>The asynchronous version of the driver is in the
- sample files <c><![CDATA[pg_async.c]]></c> and <c><![CDATA[pg_asyng.erl]]></c>.</p>
+
+ <p>The asynchronous version of the driver is in the sample files
+ <c><![CDATA[pg_async.c]]></c> and <c><![CDATA[pg_asyng.erl]]></c>.</p>
+
<code type="none"><![CDATA[
/* Driver interface declarations */
static ErlDrvData start(ErlDrvPort port, char *command);
@@ -459,22 +515,26 @@ typedef struct our_data_t {
int connecting;
} our_data_t;
]]></code>
- <p>Here some things have changed from <c><![CDATA[pg_sync.c]]></c>: we use the
- entry <c><![CDATA[ready_io]]></c> for <c><![CDATA[ready_input]]></c> and
- <c><![CDATA[ready_output]]></c> which will be called from the emulator only
- when there is input to be read from the socket. (Actually, the
+
+ <p>Some things have changed from <c><![CDATA[pg_sync.c]]></c>: we use
+ the entry <c><![CDATA[ready_io]]></c> for <c><![CDATA[ready_input]]></c>
+ and <c><![CDATA[ready_output]]></c>, which is called from the emulator
+ only when there is input to be read from the socket. (Actually, the
socket is used in a <c><![CDATA[select]]></c> function inside
- the emulator, and when the socket is signalled,
- indicating there is data to read, the <c><![CDATA[ready_input]]></c> entry
- is called. More on this below.)</p>
+ the emulator, and when the socket is signaled,
+ indicating there is data to read, the <c><![CDATA[ready_input]]></c>
+ entry is called. More about this below.)</p>
+
<p>Our driver data is also extended, we keep track of the
socket used for communication with postgres, and also
the port, which is needed when we send data to the port with
- <c><![CDATA[driver_output]]></c>. We have a flag <c><![CDATA[connecting]]></c> to tell
+ <c><![CDATA[driver_output]]></c>. We have a flag
+ <c><![CDATA[connecting]]></c> to tell
whether the driver is waiting for a connection or waiting
- for the result of a query. (This is needed since the entry
- <c><![CDATA[ready_io]]></c> will be called both when connecting and
+ for the result of a query. (This is needed, as the entry
+ <c><![CDATA[ready_io]]></c> is called both when connecting and
when there is a query result.)</p>
+
<code type="none"><![CDATA[
static int do_connect(const char *s, our_data_t* data)
{
@@ -498,16 +558,20 @@ static int do_connect(const char *s, our_data_t* data)
return 0;
}
]]></code>
- <p>The <c><![CDATA[connect]]></c> function looks a bit different too. We connect
- using the asynchronous <c><![CDATA[PQconnectStart]]></c> function. After the
- connection is started, we retrieve the socket for the connection
+
+ <p>The <c><![CDATA[connect]]></c> function looks a bit different too. We
+ connect using the asynchronous <c><![CDATA[PQconnectStart]]></c> function.
+ After the connection is started, we retrieve the socket for the connection
with <c><![CDATA[PQsocket]]></c>. This socket is used with the
<c><![CDATA[driver_select]]></c> function to wait for connection. When
- the socket is ready for input or for output, the <c><![CDATA[ready_io]]></c>
- function will be called.</p>
- <p>Note that we only return data (with <c><![CDATA[driver_output]]></c>) if there
+ the socket is ready for input or for output, the
+ <c><![CDATA[ready_io]]></c> function is called.</p>
+
+ <p>Notice that we only return data (with <c><![CDATA[driver_output]]></c>)
+ if there
is an error here, otherwise we wait for the connection to be completed,
- in which case our <c><![CDATA[ready_io]]></c> function will be called.</p>
+ in which case our <c><![CDATA[ready_io]]></c> function is called.</p>
+
<code type="none"><![CDATA[
static int do_select(const char* s, our_data_t* data)
{
@@ -525,9 +589,11 @@ static int do_select(const char* s, our_data_t* data)
return 0;
}
]]></code>
+
<p>The <c><![CDATA[do_select]]></c> function initiates a select, and returns
- if there is no immediate error. The actual result will be returned
+ if there is no immediate error. The result is returned
when <c><![CDATA[ready_io]]></c> is called.</p>
+
<code type="none"><![CDATA[
static void ready_io(ErlDrvData drv_data, ErlDrvEvent event)
{
@@ -566,26 +632,31 @@ static void ready_io(ErlDrvData drv_data, ErlDrvEvent event)
ei_x_free(&x);
}
]]></code>
- <p>The <c><![CDATA[ready_io]]></c> function will be called when the socket
+
+ <p>The <c><![CDATA[ready_io]]></c> function is called when the socket
we got from postgres is ready for input or output. Here
we first check if we are connecting to the database. In that
- case we check connection status and return ok if the
- connection is successful, or error if it's not. If the
- connection is not yet established, we simply return; <c><![CDATA[ready_io]]></c>
- will be called again.</p>
+ case, we check connection status and return OK if the
+ connection is successful, or error if it is not. If the
+ connection is not yet established, we simply return;
+ <c><![CDATA[ready_io]]></c> is called again.</p>
+
<p>If we have a result from a connect, indicated by having data in
the <c><![CDATA[x]]></c> buffer, we no longer need to select on
output (<c><![CDATA[ready_output]]></c>), so we remove this by calling
<c><![CDATA[driver_select]]></c>.</p>
- <p>If we're not connecting, we're waiting for results from a
+
+ <p>If we are not connecting, we wait for results from a
<c><![CDATA[PQsendQuery]]></c>, so we get the result and return it. The
encoding is done with the same functions as in the earlier
example.</p>
- <p>We should add error handling here, for instance checking
- that the socket is still open, but this is just a simple
- example.</p>
+
+ <p>Error handling is to be added here, for example, checking
+ that the socket is still open, but this is only a simple example.</p>
+
<p>The Erlang part of the asynchronous driver consists of the
sample file <c><![CDATA[pg_async.erl]]></c>.</p>
+
<code type="none"><![CDATA[
-module(pg_async).
@@ -626,45 +697,50 @@ return_port_data(Port) ->
binary_to_term(Data)
end.
]]></code>
- <p>The Erlang code is slightly different, this is because we
- don't return the result synchronously from <c><![CDATA[port_control]]></c>,
+
+ <p>The Erlang code is slightly different, as we do not
+ return the result synchronously from <c><![CDATA[port_control]]></c>,
instead we get it from <c><![CDATA[driver_output]]></c> as data in the
message queue. The function <c><![CDATA[return_port_data]]></c> above
- receives data from the port. Since the data is in
+ receives data from the port. As the data is in
binary format, we use <c><![CDATA[binary_to_term/1]]></c> to convert
- it to an Erlang term. Note that the driver is opened in
- binary mode (<c><![CDATA[open_port/2]]></c> is called with the option
+ it to an Erlang term. Notice that the driver is opened in
+ binary mode (<c><![CDATA[open_port/2]]></c> is called with option
<c><![CDATA[[binary]]]></c>). This means that data sent from the driver
- to the emulator is sent as binaries. Without the <c><![CDATA[binary]]></c>
- option, they would have been lists of integers.</p>
+ to the emulator is sent as binaries. Without option
+ <c><![CDATA[binary]]></c>, they would have been lists of integers.</p>
</section>
<section>
- <title>An asynchronous driver using driver_async</title>
- <p>As a final example we demonstrate the use of <c><![CDATA[driver_async]]></c>.
+ <title>An Asynchronous Driver Using driver_async</title>
+ <p>As a final example we demonstrate the use of
+ <c><![CDATA[driver_async]]></c>.
We also use the driver term interface. The driver is written
- in C++. This enables us to use an algorithm from STL. We will
- use the <c><![CDATA[next_permutation]]></c> algorithm to get the next permutation
- of a list of integers. For large lists (more than 100000
- elements), this will take some time, so we will perform this
+ in C++. This enables us to use an algorithm from STL. We use
+ the <c><![CDATA[next_permutation]]></c> algorithm to get the next
+ permutation of a list of integers. For large lists (&gt; 100,000
+ elements), this takes some time, so we perform this
as an asynchronous task.</p>
- <p>The asynchronous API for drivers is quite complicated. First
- of all, the work must be prepared. In our example we do this
- in <c><![CDATA[output]]></c>. We could have used <c><![CDATA[control]]></c> just as well,
- but we want some variation in our examples. In our driver, we allocate
- a structure that contains anything that's needed for the asynchronous task
- to do the work. This is done in the main emulator thread.
+
+ <p>The asynchronous API for drivers is complicated. First,
+ the work must be prepared. In the example, this is done in
+ <c><![CDATA[output]]></c>. We could have used <c><![CDATA[control]]></c>,
+ but we want some variation in the examples. In our driver, we allocate
+ a structure that contains anything that is needed for the asynchronous
+ task to do the work. This is done in the main emulator thread.
Then the asynchronous function is called from a driver thread,
- separate from the main emulator thread. Note that the driver-functions
- are not reentrant, so they shouldn't be used.
+ separate from the main emulator thread. Notice that the driver functions
+ are not re-entrant, so they are not to be used.
Finally, after the function is completed, the driver callback
<c><![CDATA[ready_async]]></c> is called from the main emulator thread,
- this is where we return the result to Erlang. (We can't
- return the result from within the asynchronous function, since
- we can't call the driver-functions.)</p>
- <p>The code below is from the sample file <c><![CDATA[next_perm.cc]]></c>.</p>
- <p>The driver entry looks like before, but also contains the
- call-back <c><![CDATA[ready_async]]></c>.</p>
+ this is where we return the result to Erlang. (We cannot
+ return the result from within the asynchronous function, as
+ we cannot call the driver functions.)</p>
+
+ <p>The following code is from the sample file
+ <c><![CDATA[next_perm.cc]]></c>. The driver entry looks like before,
+ but also contains the callback <c><![CDATA[ready_async]]></c>.</p>
+
<code type="none"><![CDATA[
static ErlDrvEntry next_perm_driver_entry = {
NULL, /* init */
@@ -685,17 +761,21 @@ static ErlDrvEntry next_perm_driver_entry = {
NULL /* event */
};
]]></code>
- <p>The <c><![CDATA[output]]></c> function allocates the work-area of the
- asynchronous function. Since we use C++, we use a struct,
- and stuff the data in it. We have to copy the original data,
+
+ <p>The <c><![CDATA[output]]></c> function allocates the work area of the
+ asynchronous function. As we use C++, we use a struct,
+ and stuff the data in it. We must copy the original data,
it is not valid after we have returned from the <c><![CDATA[output]]></c>
- function, and the <c><![CDATA[do_perm]]></c> function will be called later,
- and from another thread. We return no data here, instead it will
- be sent later from the <c><![CDATA[ready_async]]></c> call-back.</p>
- <p>The <c><![CDATA[async_data]]></c> will be passed to the <c><![CDATA[do_perm]]></c> function.
- We do not use a <c><![CDATA[async_free]]></c> function (the last argument to
- <c><![CDATA[driver_async]]></c>), it's only used if the task is cancelled
+ function, and the <c><![CDATA[do_perm]]></c> function is called
+ later, and from another thread. We return no data here, instead it
+ is sent later from the <c><![CDATA[ready_async]]></c> callback.</p>
+
+ <p>The <c><![CDATA[async_data]]></c> is passed to the
+ <c><![CDATA[do_perm]]></c> function. We do not use a
+ <c><![CDATA[async_free]]></c> function (the last argument to
+ <c><![CDATA[driver_async]]></c>), it is only used if the task is cancelled
programmatically.</p>
+
<code type="none"><![CDATA[
struct our_async_data {
bool prev;
@@ -720,8 +800,10 @@ static void output(ErlDrvData drv_data, char *buf, int len)
driver_async(port, NULL, do_perm, async_data, do_free);
}
]]></code>
- <p>In the <c><![CDATA[do_perm]]></c> we simply do the work, operating
+
+ <p>In the <c><![CDATA[do_perm]]></c> we do the work, operating
on the structure that was allocated in <c><![CDATA[output]]></c>.</p>
+
<code type="none"><![CDATA[
static void do_perm(void* async_data)
{
@@ -732,13 +814,17 @@ static void do_perm(void* async_data)
next_permutation(d->data.begin(), d->data.end());
}
]]></code>
- <p>In the <c><![CDATA[ready_async]]></c> function, the output is sent back to the
+
+ <p>In the <c><![CDATA[ready_async]]></c> function the output is sent back
+ to the
emulator. We use the driver term format instead of <c><![CDATA[ei]]></c>.
- This is the only way to send Erlang terms directly to a driver,
- without having the Erlang code to call <c><![CDATA[binary_to_term/1]]></c>. In
- our simple example this works well, and we don't need to use
+ This is the only way to send Erlang terms directly to a driver, without
+ having the Erlang code to call <c><![CDATA[binary_to_term/1]]></c>. In
+ the simple example this works well, and we do not need to use
<c><![CDATA[ei]]></c> to handle the binary term format.</p>
- <p>When the data is returned we deallocate our data.</p>
+
+ <p>When the data is returned, we deallocate our data.</p>
+
<code type="none"><![CDATA[
static void ready_async(ErlDrvData drv_data, ErlDrvThreadData async_data)
{
@@ -759,12 +845,15 @@ static void ready_async(ErlDrvData drv_data, ErlDrvThreadData async_data)
delete d;
}
]]></code>
- <p>This driver is called like the others from Erlang, however, since
+
+ <p>This driver is called like the others from Erlang. However, as
we use <c><![CDATA[driver_output_term]]></c>, there is no need to call
- binary_to_term. The Erlang code is in the sample file
+ <c>binary_to_term</c>. The Erlang code is in the sample file
<c><![CDATA[next_perm.erl]]></c>.</p>
+
<p>The input is changed into a list of integers and sent to
the driver.</p>
+
<code type="none"><![CDATA[
-module(next_perm).
diff --git a/erts/doc/src/driver_entry.xml b/erts/doc/src/driver_entry.xml
index ae7f264d0c..2421e0a8d9 100644
--- a/erts/doc/src/driver_entry.xml
+++ b/erts/doc/src/driver_entry.xml
@@ -4,7 +4,7 @@
<cref>
<header>
<copyright>
- <year>2001</year><year>2015</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -33,55 +33,64 @@
<file>driver_entry.xml</file>
</header>
<lib>driver_entry</lib>
- <libsummary>The driver-entry structure used by erlang drivers.</libsummary>
+ <libsummary>The driver-entry structure used by Erlang drivers.</libsummary>
<description>
<marker id="WARNING"/>
- <warning><p><em>Use this functionality with extreme care!</em></p>
+ <warning>
+ <p><em>Use this functionality with extreme care.</em></p>
<p>A driver callback is executed as a direct extension of the
- native code of the VM. Execution is not made in a safe environment.
- The VM can <em>not</em> provide the same services as provided when
- executing Erlang code, such as preemptive scheduling or memory
- protection. If the driver callback function doesn't behave well,
- the whole VM will misbehave.</p>
- <list>
- <item><p>A driver callback that crash will crash the whole VM.</p></item>
- <item><p>An erroneously implemented driver callback might cause
- a VM internal state inconsistency which may cause a crash of the VM,
- or miscellaneous misbehaviors of the VM at any point after the call
- to the driver callback.</p></item>
- <item><p>A driver callback that do
- <seealso marker="erl_driver#lengthy_work">lengthy work</seealso>
- before returning will degrade responsiveness of the VM,
- and may cause miscellaneous strange behaviors. Such strange behaviors
- include, but are not limited to, extreme memory usage, and bad load
- balancing between schedulers. Strange behaviors that might occur due
- to lengthy work may also vary between OTP releases.</p></item>
+ native code of the VM. Execution is not made in a safe environment.
+ The VM <em>cannot</em> provide the same services as provided when
+ executing Erlang code, such as pre-emptive scheduling or memory
+ protection. If the driver callback function does not behave well,
+ the whole VM will misbehave.</p>
+ <list type="bulleted">
+ <item>
+ <p>A driver callback that crash will crash the whole VM.</p>
+ </item>
+ <item>
+ <p>An erroneously implemented driver callback can cause a VM
+ internal state inconsistency, which can cause a crash of the VM,
+ or miscellaneous misbehaviors of the VM at any point after the
+ call to the driver callback.</p>
+ </item>
+ <item>
+ <p>A driver callback doing
+ <seealso marker="erl_driver#lengthy_work">lengthy work</seealso>
+ before returning degrades responsiveness of the VM, and can cause
+ miscellaneous strange behaviors. Such strange behaviors
+ include, but are not limited to, extreme memory usage, and bad
+ load balancing between schedulers. Strange behaviors that can
+ occur because of lengthy work can also vary between Erlang/OTP
+ releases.</p>
+ </item>
</list>
- </warning>
- <p>
- As of erts version 5.9 (OTP release R15B) the driver interface
+ </warning>
+
+ <p>As from ERTS 5.9 (Erlang/OTP R15B) the driver interface
has been changed with larger types for the callbacks
- <seealso marker="#output">output</seealso>,
- <seealso marker="#control">control</seealso> and
- <seealso marker="#call">call</seealso>.
+ <seealso marker="#output"><c>output</c></seealso>,
+ <seealso marker="#control"><c>control</c></seealso>, and
+ <seealso marker="#call"><c>call</c></seealso>.
See driver <seealso marker="erl_driver#version_management">
version management</seealso> in
- <seealso marker="erl_driver">erl_driver</seealso>.
- </p>
+ <seealso marker="erl_driver"><c>erl_driver</c></seealso>.</p>
+
<note>
<p>Old drivers (compiled with an <c>erl_driver.h</c> from an
- earlier erts version than 5.9) have to be updated and have
- to use the extended interface (with
- <seealso marker="erl_driver#version_management">version management
- </seealso>).</p>
+ ERTS version earlier than 5.9) must be updated and have
+ to use the extended interface (with
+ <seealso marker="erl_driver#version_management">version management
+ </seealso>).</p>
</note>
- <p>The <c>driver_entry</c> structure is a C struct that all erlang
- drivers define. It contains entry points for the erlang driver
- that are called by the erlang emulator when erlang code accesses
+
+ <p>The <c>driver_entry</c> structure is a C struct that all Erlang
+ drivers define. It contains entry points for the Erlang driver,
+ which are called by the Erlang emulator when Erlang code accesses
the driver.</p>
- <p>
- <marker id="emulator"></marker>
- The <seealso marker="erl_driver">erl_driver</seealso> driver
+
+ <p><marker id="emulator"></marker>
+ The <seealso marker="erl_driver"><c>erl_driver</c></seealso> driver
API functions need a port handle
that identifies the driver instance (and the port in the
emulator). This is only passed to the <c>start</c> function, but
@@ -90,416 +99,466 @@
common practice is to have the <c>start</c> function allocate
some application-defined structure and stash the <c>port</c>
handle in it, to use it later with the driver API functions.</p>
- <p>The driver call-back functions are called synchronously from the
- erlang emulator. If they take too long before completing, they
- can cause timeouts in the emulator. Use the queue or
- asynchronous calls if necessary, since the emulator must be
+
+ <p>The driver callback functions are called synchronously from the
+ Erlang emulator. If they take too long before completing, they
+ can cause time-outs in the emulator. Use the queue or
+ asynchronous calls if necessary, as the emulator must be
responsive.</p>
- <p>The driver structure contains the name of the driver and some
- 15 function pointers. These pointers are called at different
+
+ <p>The driver structure contains the driver name and some
+ 15 function pointers, which are called at different
times by the emulator.</p>
+
<p>The only exported function from the driver is
<c>driver_init</c>. This function returns the <c>driver_entry</c>
structure that points to the other functions in the driver. The
- <c>driver_init</c> function is declared with a macro
- <c>DRIVER_INIT(drivername)</c>. (This is because different OS's
- have different names for it.)</p>
- <p>When writing a driver in C++, the driver entry should be of
- <c>"C"</c> linkage. One way to do this is to put this line
- somewhere before the driver entry:
- <c>extern "C" DRIVER_INIT(drivername);</c>.</p>
+ <c>driver_init</c> function is declared with a macro,
+ <c>DRIVER_INIT(drivername)</c>. (This is because different
+ operating systems have different names for it.)</p>
+
+ <p>When writing a driver in C++, the driver entry is to be of
+ <c>"C"</c> linkage. One way to do this is to put the
+ following line somewhere before the driver entry:</p>
+
+ <pre>
+extern "C" DRIVER_INIT(drivername);</pre>
+
<p>When the driver has passed the <c>driver_entry</c> over to
the emulator, the driver is <em>not</em> allowed to modify the
<c>driver_entry</c>.</p>
- <p>If compiling a driver for static inclusion via --enable-static-drivers you
- have to define STATIC_ERLANG_DRIVER before the DRIVER_INIT declaration.</p>
+
+ <p>If compiling a driver for static inclusion through
+ <c>--enable-static-drivers</c>, you must define
+ <c>STATIC_ERLANG_DRIVER</c> before the <c>DRIVER_INIT</c> declaration.</p>
+
<note>
- <p>Do <em>not</em> declare the <c>driver_entry</c> <c>const</c>. This since the emulator needs to
- modify the <c>handle</c>, and the <c>handle2</c>
- fields. A statically allocated, and <c>const</c>
- declared <c>driver_entry</c> may be located in
- read only memory which will cause the emulator
- to crash.</p>
+ <p>Do <em>not</em> declare the <c>driver_entry</c> <c>const</c>.
+ This because the emulator must
+ modify the <c>handle</c> and the <c>handle2</c>
+ fields. A statically allocated, and <c>const</c>-declared
+ <c>driver_entry</c> can be located in
+ read-only memory, which causes the emulator to crash.</p>
</note>
</description>
<section>
- <title>DATA TYPES</title>
- <taglist>
- <tag><em>ErlDrvEntry</em></tag>
- <item>
- <p/>
+ <title>Data Types</title>
+ <p><c>ErlDrvEntry</c></p>
<code type="none">
typedef struct erl_drv_entry {
- int (*init)(void); /* called at system start up for statically
+ int (*init)(void); /* Called at system startup for statically
linked drivers, and after loading for
- dynamically loaded drivers */
-
+ dynamically loaded drivers */
#ifndef ERL_SYS_DRV
ErlDrvData (*start)(ErlDrvPort port, char *command);
- /* called when open_port/2 is invoked.
- return value -1 means failure. */
+ /* Called when open_port/2 is invoked,
+ return value -1 means failure */
#else
ErlDrvData (*start)(ErlDrvPort port, char *command, SysDriverOpts* opts);
- /* special options, only for system driver */
+ /* Special options, only for system driver */
#endif
void (*stop)(ErlDrvData drv_data);
- /* called when port is closed, and when the
- emulator is halted. */
+ /* Called when port is closed, and when the
+ emulator is halted */
void (*output)(ErlDrvData drv_data, char *buf, ErlDrvSizeT len);
- /* called when we have output from erlang to
+ /* Called when we have output from Erlang to
the port */
void (*ready_input)(ErlDrvData drv_data, ErlDrvEvent event);
- /* called when we have input from one of
+ /* Called when we have input from one of
the driver's handles */
void (*ready_output)(ErlDrvData drv_data, ErlDrvEvent event);
- /* called when output is possible to one of
+ /* Called when output is possible to one of
the driver's handles */
- char *driver_name; /* name supplied as command
- in open_port XXX ? */
- void (*finish)(void); /* called before unloading the driver -
- DYNAMIC DRIVERS ONLY */
- void *handle; /* Reserved -- Used by emulator internally */
+ char *driver_name; /* Name supplied as command in
+ erlang:open_port/2 */
+ void (*finish)(void); /* Called before unloading the driver -
+ dynamic drivers only */
+ void *handle; /* Reserved, used by emulator internally */
ErlDrvSSizeT (*control)(ErlDrvData drv_data, unsigned int command,
char *buf, ErlDrvSizeT len,
char **rbuf, ErlDrvSizeT rlen);
- /* "ioctl" for drivers - invoked by
+ /* "ioctl" for drivers - invoked by
port_control/3 */
- void (*timeout)(ErlDrvData drv_data); /* Handling of timeout in driver */
+ void (*timeout)(ErlDrvData drv_data);
+ /* Handling of time-out in driver */
void (*outputv)(ErlDrvData drv_data, ErlIOVec *ev);
- /* called when we have output from erlang
+ /* Called when we have output from Erlang
to the port */
void (*ready_async)(ErlDrvData drv_data, ErlDrvThreadData thread_data);
void (*flush)(ErlDrvData drv_data);
- /* called when the port is about to be
- closed, and there is data in the
- driver queue that needs to be flushed
+ /* Called when the port is about to be
+ closed, and there is data in the
+ driver queue that must be flushed
before 'stop' can be called */
ErlDrvSSizeT (*call)(ErlDrvData drv_data, unsigned int command,
char *buf, ErlDrvSizeT len,
char **rbuf, ErlDrvSizeT rlen, unsigned int *flags);
/* Works mostly like 'control', a synchronous
- call into the driver. */
+ call into the driver */
void (*event)(ErlDrvData drv_data, ErlDrvEvent event,
ErlDrvEventData event_data);
- /* Called when an event selected by
+ /* Called when an event selected by
driver_event() has occurred */
int extended_marker; /* ERL_DRV_EXTENDED_MARKER */
int major_version; /* ERL_DRV_EXTENDED_MAJOR_VERSION */
int minor_version; /* ERL_DRV_EXTENDED_MINOR_VERSION */
int driver_flags; /* ERL_DRV_FLAGs */
- void *handle2; /* Reserved -- Used by emulator internally */
+ void *handle2; /* Reserved, used by emulator internally */
void (*process_exit)(ErlDrvData drv_data, ErlDrvMonitor *monitor);
/* Called when a process monitor fires */
void (*stop_select)(ErlDrvEvent event, void* reserved);
/* Called to close an event object */
- } ErlDrvEntry;
- </code>
- <p/>
+ } ErlDrvEntry;</code>
<taglist>
- <tag><marker id="init"/>int (*init)(void)</tag>
- <item>
- <p>This is called directly after the driver has been loaded by
- <c>erl_ddll:load_driver/2</c>. (Actually when the driver is
- added to the driver list.) The driver should return 0, or if
- the driver can't initialize, -1.</p>
+ <tag><marker id="init"/><c>int (*init)(void)</c></tag>
+ <item>
+ <p>Called directly after the driver has been loaded by
+ <seealso marker="kernel:erl_ddll#load_driver/2">
+ <c>erl_ddll:load_driver/2</c></seealso> (actually when the driver is
+ added to the driver list). The driver is to return <c>0</c>, or, if
+ the driver cannot initialize, <c>-1</c>.</p>
</item>
- <tag><marker id="start"/>ErlDrvData (*start)(ErlDrvPort port, char* command)</tag>
+ <tag><marker id="start"/>
+ <c>ErlDrvData (*start)(ErlDrvPort port, char* command)</c></tag>
<item>
- <p>This is called when the driver is instantiated, when
- <c>open_port/2</c> is called. The driver should return a
- number &gt;= 0 or a pointer, or if the driver can't be started,
- one of three error codes should be returned:</p>
- <p>ERL_DRV_ERROR_GENERAL - general error, no error code</p>
- <p>ERL_DRV_ERROR_ERRNO - error with error code in <c>errno</c></p>
- <p>ERL_DRV_ERROR_BADARG - error, badarg</p>
- <p>If an error code is returned, the port isn't started.</p>
+ <p>Called when the driver is instantiated, when
+ <seealso marker="erlang#open_port/2">
+ <c>erlang:open_port/2</c></seealso> is called.
+ The driver is to return a number &gt;= 0 or a pointer, or, if the
+ driver cannot be started, one of three error codes:</p>
+ <taglist>
+ <tag><c>ERL_DRV_ERROR_GENERAL</c></tag>
+ <item>General error, no error code</item>
+ <tag><c>ERL_DRV_ERROR_ERRNO</c></tag>
+ <item>Error with error code in <c>errno</c></item>
+ <tag><c>ERL_DRV_ERROR_BADARG</c></tag>
+ <item>Error, <c>badarg</c></item>
+ </taglist>
+ <p>If an error code is returned, the port is not started.</p>
</item>
- <tag><marker id="stop"/>void (*stop)(ErlDrvData drv_data)</tag>
+ <tag><marker id="stop"/><c>void (*stop)(ErlDrvData drv_data)</c></tag>
<item>
- <p>This is called when the port is closed, with
- <c>port_close/1</c> or <c>Port ! {self(), close}</c>. Note
- that terminating the port owner process also closes the
+ <p>Called when the port is closed, with
+ <seealso marker="erlang#port_close/1">
+ <c>erlang:port_close/1</c></seealso> or <c>Port ! {self(), close}</c>.
+ Notice that terminating the port owner process also closes the
port. If <c>drv_data</c> is a pointer to memory allocated in
- <c>start</c>, then <c>stop</c> is the place to deallocate that
- memory.</p>
+ <c>start</c>, then <c>stop</c> is the place to deallocate that
+ memory.</p>
</item>
- <tag><marker id="output"/>void (*output)(ErlDrvData drv_data, char *buf, ErlDrvSizeT len)</tag>
+ <tag><marker id="output"/>
+ <c>void (*output)(ErlDrvData drv_data, char *buf, ErlDrvSizeT len)</c>
+ </tag>
<item>
- <p>This is called when an erlang process has sent data to the
- port. The data is pointed to by <c>buf</c>, and is
- <c>len</c> bytes. Data is sent to the port with <c>Port ! {self(), {command, Data}}</c>, or with
- <c>port_command/2</c>. Depending on how the port was opened,
- it should be either a list of integers 0...255 or a
- binary. See <c>open_port/3</c> and <c>port_command/2</c>.</p>
+ <p>Called when an Erlang process has sent data to the port. The data is
+ pointed to by <c>buf</c>, and is <c>len</c> bytes. Data is sent to
+ the port with <c>Port ! {self(), {command, Data}}</c> or with
+ <c>erlang:port_command/2</c>. Depending on how the port was
+ opened, it is to be either a list of integers <c>0...255</c> or a
+ binary. See <seealso marker="erlang#open_port/2">
+ <c>erlang:open_port/2</c></seealso> and
+ <seealso marker="erlang#port_command/2">
+ <c>erlang:port_command/2</c></seealso>.</p>
</item>
-
- <tag><marker id="ready_input"/>void (*ready_input)(ErlDrvData drv_data, ErlDrvEvent event)</tag>
- <item/>
- <tag><marker id="ready_output"/>void (*ready_output)(ErlDrvData drv_data, ErlDrvEvent event)</tag>
+ <tag><marker id="ready_input"/>
+ <c>void (*ready_input)(ErlDrvData drv_data, ErlDrvEvent event)</c>
+ </tag>
+ <item></item>
+ <tag><marker id="ready_output"/>
+ <c>void (*ready_output)(ErlDrvData drv_data, ErlDrvEvent event)</c>
+ </tag>
<item>
- <p>This is called when a driver event (given in the
- <c>event</c> parameter) is signaled. This is used to help
- asynchronous drivers "wake up" when something happens.</p>
- <p>On unix the <c>event</c> is a pipe or socket handle (or
+ <p>Called when a driver event (specified in parameter
+ <c>event</c>) is signaled. This is used to help
+ asynchronous drivers "wake up" when something occurs.</p>
+ <p>On Unix the <c>event</c> is a pipe or socket handle (or
something that the <c>select</c> system call understands).</p>
- <p>On Windows the <c>event</c> is an Event or Semaphore (or
- something that the <c>WaitForMultipleObjects</c> API
+ <p>On Windows the <c>event</c> is an <c>Event</c> or <c>Semaphore</c>
+ (or something that the <c>WaitForMultipleObjects</c> API
function understands). (Some trickery in the emulator allows
more than the built-in limit of 64 <c>Events</c> to be used.)</p>
<p>To use this with threads and asynchronous routines, create a
- pipe on unix and an Event on Windows. When the routine
+ pipe on Unix and an <c>Event</c> on Windows. When the routine
completes, write to the pipe (use <c>SetEvent</c> on
- Windows), this will make the emulator call
+ Windows), this makes the emulator call
<c>ready_input</c> or <c>ready_output</c>.</p>
- <p>Spurious events may happen. That is, calls to <c>ready_input</c>
- or <c>ready_output</c> even though no real events are signaled. In
- reality it should be rare (and OS dependant), but a robust driver
+ <p>False events can occur. That is, calls to <c>ready_input</c>
+ or <c>ready_output</c> although no real events are signaled. In
+ reality, it is rare (and OS-dependant), but a robust driver
must nevertheless be able to handle such cases.</p>
</item>
- <tag><marker id="driver_name"/>char *driver_name</tag>
+ <tag><marker id="driver_name"/><c>char *driver_name</c></tag>
<item>
- <p>This is the name of the driver, it must correspond to the
- atom used in <c>open_port</c>, and the name of the driver
+ <p>The driver name. It must correspond to the atom used in
+ <seealso marker="erlang#open_port/2">
+ <c>erlang:open_port/2</c></seealso>, and the name of the driver
library file (without the extension).</p>
</item>
- <tag><marker id="finish"/>void (*finish)(void)</tag>
+ <tag><marker id="finish"/><c>void (*finish)(void)</c></tag>
<item>
- <p>This function is called by the <c>erl_ddll</c> driver when the
+ <p>Called by the <c>erl_ddll</c> driver when the
driver is unloaded. (It is only called in dynamic drivers.)</p>
<p>The driver is only unloaded as a result of calling
- <c>unload_driver/1</c>, or when the emulator halts.</p>
+ <seealso marker="kernel:erl_ddll#unload_driver/1">
+ <c>erl_ddll:unload_driver/1</c></seealso>,
+ or when the emulator halts.</p>
</item>
- <tag>void *handle</tag>
+ <tag><c>void *handle</c></tag>
<item>
<p>This field is reserved for the emulator's internal use. The
- emulator will modify this field; therefore, it is important
- that the <c>driver_entry</c> isn't declared <c>const</c>.</p>
+ emulator will modify this field, so it is important
+ that the <c>driver_entry</c> is not declared <c>const</c>.</p>
</item>
- <tag><marker id="control"></marker>ErlDrvSSizeT (*control)(ErlDrvData drv_data, unsigned int command, char *buf, ErlDrvSizeT len, char **rbuf, ErlDrvSizeT rlen)</tag>
+ <tag><marker id="control"></marker>
+ <c>ErlDrvSSizeT (*control)(ErlDrvData drv_data, unsigned int command,
+ char *buf, ErlDrvSizeT len, char **rbuf, ErlDrvSizeT rlen)</c></tag>
<item>
- <p>This is a special routine invoked with the erlang function
- <c>port_control/3</c>. It works a little like an "ioctl" for
- erlang drivers. The data given to <c>port_control/3</c>
- arrives in <c>buf</c> and <c>len</c>. The driver may send
+ <p>A special routine invoked with
+ <seealso marker="erlang#port_control/3">
+ <c>erlang:port_control/3</c></seealso>.
+ It works a little like an "ioctl" for
+ Erlang drivers. The data specified to <c>port_control/3</c>
+ arrives in <c>buf</c> and <c>len</c>. The driver can send
data back, using <c>*rbuf</c> and <c>rlen</c>.</p>
<p>This is the fastest way of calling a driver and get a
- response. It won't make any context switch in the erlang
- emulator, and requires no message passing. It is suitable
- for calling C function to get faster execution, when erlang
+ response. It makes no context switch in the Erlang
+ emulator and requires no message passing. It is suitable
+ for calling C function to get faster execution, when Erlang
is too slow.</p>
- <p>If the driver wants to return data, it should return it in
+ <p>If the driver wants to return data, it is to return it in
<c>rbuf</c>. When <c>control</c> is called,
<c>*rbuf</c> points to a default buffer of <c>rlen</c> bytes, which
- can be used to return data. Data is returned different depending on
+ can be used to return data. Data is returned differently depending on
the port control flags (those that are set with
- <seealso marker="erl_driver#set_port_control_flags">set_port_control_flags</seealso>).
- </p>
+ <seealso marker="erl_driver#set_port_control_flags">
+ <c>erl_driver:set_port_control_flags</c></seealso>).</p>
<p>If the flag is set to <c>PORT_CONTROL_FLAG_BINARY</c>,
- a binary will be returned. Small binaries can be returned by writing
- the raw data into the default buffer. A binary can also be
- returned by setting <c>*rbuf</c> to point to a binary allocated with
- <seealso marker="erl_driver#driver_alloc_binary">driver_alloc_binary</seealso>.
- This binary will be freed automatically after <c>control</c> has returned.
+ a binary is returned. Small binaries can be returned by writing
+ the raw data into the default buffer. A binary can also be
+ returned by setting <c>*rbuf</c> to point to a binary allocated with
+ <seealso marker="erl_driver#driver_alloc_binary">
+ <c>erl_driver:driver_alloc_binary</c></seealso>.
+ This binary is freed automatically after <c>control</c> has returned.
The driver can retain the binary for <em>read only</em> access with
- <seealso marker="erl_driver#driver_binary_inc_refc">driver_binary_inc_refc</seealso> to be freed later with
- <seealso marker="erl_driver#driver_free_binary">driver_free_binary</seealso>.
- It is never allowed to alter the binary after <c>control</c> has returned.
- If <c>*rbuf</c> is set to NULL, an empty list will be returned.
- </p>
+ <seealso marker="erl_driver#driver_binary_inc_refc">
+ <c>erl_driver:driver_binary_inc_refc</c></seealso> to be freed later
+ with <seealso marker="erl_driver#driver_free_binary">
+ <c>erl_driver:driver_free_binary</c></seealso>.
+ It is never allowed to change the binary after <c>control</c> has
+ returned. If <c>*rbuf</c> is set to <c>NULL</c>, an empty list is
+ returned.</p>
<p>If the flag is set to <c>0</c>, data is returned as a
list of integers. Either use the default buffer or set
<c>*rbuf</c> to point to a larger buffer allocated with
- <seealso marker="erl_driver#driver_alloc">driver_alloc</seealso>.
- The buffer will be freed automatically after <c>control</c> has returned.</p>
+ <seealso marker="erl_driver#driver_alloc">
+ <c>erl_driver:driver_alloc</c></seealso>. The
+ buffer is freed automatically after <c>control</c> has returned.</p>
<p>Using binaries is faster if more than a few bytes are returned.</p>
- <p>The return value is the number of bytes returned in
- <c>*rbuf</c>.</p>
+ <p>The return value is the number of bytes returned in <c>*rbuf</c>.</p>
</item>
-
- <tag><marker id="timeout"/>void (*timeout)(ErlDrvData drv_data)</tag>
+ <tag><marker id="timeout"/><c>void (*timeout)(ErlDrvData drv_data)</c>
+ </tag>
<item>
- <p>This function is called any time after the driver's timer
- reaches 0. The timer is activated with
- <c>driver_set_timer</c>. There are no priorities or ordering
- among drivers, so if several drivers time out at the same
- time, any one of them is called first.</p>
+ <p>Called any time after the driver's timer reaches <c>0</c>.
+ The timer is activated with
+ <seealso marker="erl_driver#driver_set_timer">
+ <c>erl_driver:driver_set_timer</c></seealso>. No priorities or
+ ordering exist among drivers, so if several drivers time out at
+ the same time, anyone of them is called first.</p>
</item>
-
- <tag><marker id="outputv"/>void (*outputv)(ErlDrvData drv_data, ErlIOVec *ev)</tag>
+ <tag><marker id="outputv"/>
+ <c>void (*outputv)(ErlDrvData drv_data, ErlIOVec *ev)</c></tag>
<item>
- <p>This function is called whenever the port is written to. If
+ <p>Called whenever the port is written to. If
it is <c>NULL</c>, the <c>output</c> function is called
- instead. This function is faster than <c>output</c>, because
+ instead. This function is faster than <c>output</c>, as
it takes an <c>ErlIOVec</c> directly, which requires no
- copying of the data. The port should be in binary mode, see
- <c>open_port/2</c>.</p>
- <p>The <c>ErlIOVec</c> contains both a <c>SysIOVec</c>,
+ copying of the data. The port is to be in binary mode, see
+ <seealso marker="erlang#open_port/2">
+ <c>erlang:open_port/2</c></seealso>.</p>
+ <p><c>ErlIOVec</c> contains both a <c>SysIOVec</c>,
suitable for <c>writev</c>, and one or more binaries. If
- these binaries should be retained, when the driver returns
- from <c>outputv</c>, they can be queued (using <seealso marker="erl_driver#driver_enq_bin">driver_enq_bin</seealso>
- for instance), or if they are kept in a static or global
+ these binaries are to be retained when the driver returns
+ from <c>outputv</c>, they can be queued (using, for example,
+ <seealso marker="erl_driver#driver_enq_bin">
+ <c>erl_driver:driver_enq_bin</c></seealso>)
+ or, if they are kept in a static or global
variable, the reference counter can be incremented.</p>
</item>
- <tag><marker id="ready_async"/>void (*ready_async)(ErlDrvData drv_data, ErlDrvThreadData thread_data)</tag>
+ <tag><marker id="ready_async"/>
+ <c>void (*ready_async)(ErlDrvData drv_data, ErlDrvThreadData
+ thread_data)</c></tag>
<item>
- <p>This function is called after an asynchronous call has
- completed. The asynchronous call is started with <seealso marker="erl_driver#driver_async">driver_async</seealso>.
- This function is called from the erlang emulator thread, as
+ <p>Called after an asynchronous call has completed.
+ The asynchronous call is started with
+ <seealso marker="erl_driver#driver_async">
+ <c>erl_driver:driver_async</c></seealso>.
+ This function is called from the Erlang emulator thread, as
opposed to the asynchronous function, which is called in
- some thread (if multithreading is enabled).</p>
+ some thread (if multi-threading is enabled).</p>
+ </item>
+ <tag><c>void (*flush)(ErlDrvData drv_data)</c></tag>
+ <item>
+ <p>Called when the port is about to be closed,
+ and there is data in the driver queue that must be flushed
+ before 'stop' can be called.</p>
</item>
- <tag><marker id="call"/>ErlDrvSSizeT (*call)(ErlDrvData drv_data, unsigned int command, char *buf, ErlDrvSizeT len, char **rbuf, ErlDrvSizeT rlen, unsigned int *flags)</tag>
+ <tag><marker id="call"/><c>ErlDrvSSizeT (*call)(ErlDrvData drv_data,
+ unsigned int command, char *buf, ErlDrvSizeT len, char **rbuf,
+ ErlDrvSizeT rlen, unsigned int *flags)</c></tag>
<item>
- <p>This function is called from <c>erlang:port_call/3</c>. It
- works a lot like the <c>control</c> call-back, but uses the
+ <p>Called from <seealso marker="erlang#port_call/3">
+ <c>erlang:port_call/3</c></seealso>.
+ It works a lot like the <c>control</c> callback, but uses the
external term format for input and output.</p>
<p><c>command</c> is an integer, obtained from the call from
- erlang (the second argument to <c>erlang:port_call/3</c>).</p>
+ Erlang (the second argument to <c>erlang:port_call/3</c>).</p>
<p><c>buf</c> and <c>len</c> provide the arguments to the call
(the third argument to <c>erlang:port_call/3</c>). They can
be decoded using <c>ei</c> functions.</p>
<p><c>rbuf</c> points to a return buffer, <c>rlen</c> bytes
- long. The return data should be a valid erlang term in the
- external (binary) format. This is converted to an erlang
+ long. The return data is to be a valid Erlang term in the
+ external (binary) format. This is converted to an Erlang
term and returned by <c>erlang:port_call/3</c> to the
- caller. If more space than <c>rlen</c> bytes is needed to
+ caller. If more space than <c>rlen</c> bytes is needed to
return data, <c>*rbuf</c> can be set to memory allocated with
- <c>driver_alloc</c>. This memory will be freed automatically
- after <c>call</c> has returned.</p>
+ <seealso marker="erl_driver#driver_alloc">
+ <c>erl_driver:driver_alloc</c></seealso>.
+ This memory is freed automatically after <c>call</c> has returned.</p>
<p>The return value is the number of bytes returned in
<c>*rbuf</c>. If <c>ERL_DRV_ERROR_GENERAL</c> is returned
- (or in fact, anything &lt; 0), <c>erlang:port_call/3</c> will
- throw a <c>BAD_ARG</c>.</p>
+ (or in fact, anything &lt; 0), <c>erlang:port_call/3</c>
+ throws a <c>BAD_ARG</c>.</p>
</item>
- <tag>void (*event)(ErlDrvData drv_data, ErlDrvEvent event, ErlDrvEventData event_data)</tag>
+ <tag><c>void (*event)(ErlDrvData drv_data, ErlDrvEvent event,
+ ErlDrvEventData event_data)</c></tag>
<item>
<p>Intentionally left undocumented.</p>
</item>
- <tag><marker id="extended_marker"/>int extended_marker</tag>
+ <tag><marker id="extended_marker"/><c>int extended_marker</c></tag>
<item>
- <p>
- This field should either be equal to <c>ERL_DRV_EXTENDED_MARKER</c>
+ <p>This field is either to be equal to <c>ERL_DRV_EXTENDED_MARKER</c>
or <c>0</c>. An old driver (not aware of the extended driver
- interface) should set this field to <c>0</c>. If this field is
- equal to <c>0</c>, all the fields following this field also
- <em>have</em> to be <c>0</c>, or <c>NULL</c> in case it is a
- pointer field.
- </p>
+ interface) is to set this field to <c>0</c>. If this field is
+ <c>0</c>, all the following fields <em>must</em> also be <c>0</c>,
+ or <c>NULL</c> if it is a pointer field.</p>
</item>
- <tag>int major_version</tag>
+ <tag><c>int major_version</c></tag>
<item>
- <p>This field should equal <c>ERL_DRV_EXTENDED_MAJOR_VERSION</c> if
- the <c>extended_marker</c> field equals
+ <p>This field is to equal <c>ERL_DRV_EXTENDED_MAJOR_VERSION</c> if
+ field <c>extended_marker</c> equals
<c>ERL_DRV_EXTENDED_MARKER</c>.</p>
</item>
- <tag>int minor_version</tag>
+ <tag><c>int minor_version</c></tag>
<item>
- <p>
- This field should equal <c>ERL_DRV_EXTENDED_MINOR_VERSION</c> if
- the <c>extended_marker</c> field equals
- <c>ERL_DRV_EXTENDED_MARKER</c>.
- </p>
+ <p>This field is to equal <c>ERL_DRV_EXTENDED_MINOR_VERSION</c> if
+ field <c>extended_marker</c> equals
+ <c>ERL_DRV_EXTENDED_MARKER</c>.</p>
</item>
-
- <tag><marker id="driver_flags"/>int driver_flags</tag>
+ <tag><marker id="driver_flags"/><c>int driver_flags</c></tag>
<item>
<p>This field is used to pass driver capability and other
- information to the runtime system. If the
- <c>extended_marker</c> field equals <c>ERL_DRV_EXTENDED_MARKER</c>,
- it should contain <c>0</c> or driver flags (<c>ERL_DRV_FLAG_*</c>)
- ored bitwise. Currently the following driver flags exist:
- </p>
+ information to the runtime system. If
+ field <c>extended_marker</c> equals <c>ERL_DRV_EXTENDED_MARKER</c>,
+ it is to contain <c>0</c> or driver flags (<c>ERL_DRV_FLAG_*</c>)
+ OR'ed bitwise. The following driver flags exist:</p>
<taglist>
<tag><c>ERL_DRV_FLAG_USE_PORT_LOCKING</c></tag>
<item>
- The runtime system will use port level locking on
- all ports executing this driver instead of driver
- level locking when the driver is run in a runtime
- system with SMP support. For more information see the
- <seealso marker="erl_driver#smp_support">erl_driver</seealso>
- documentation.
- </item>
+ <p>The runtime system uses port-level locking on
+ all ports executing this driver instead of driver-level
+ locking when the driver is run in a runtime
+ system with SMP support. For more information, see
+ <seealso marker="erl_driver#smp_support">
+ <c>erl_driver</c></seealso>.</p>
+ </item>
<tag><c>ERL_DRV_FLAG_SOFT_BUSY</c></tag>
<item>
- Marks that driver instances can handle being called
- in the <seealso marker="#output">output</seealso> and/or
- <seealso marker="#outputv">outputv</seealso> callbacks even
- though a driver instance has marked itself as busy (see
- <seealso marker="erl_driver#set_busy_port">set_busy_port()</seealso>).
- Since erts version 5.7.4 this flag is required for drivers used
- by the Erlang distribution (the behaviour has always been
- required by drivers used by the distribution).
+ <p>Marks that driver instances can handle being called
+ in the <seealso marker="#output"><c>output</c></seealso> and/or
+ <seealso marker="#outputv"><c>outputv</c></seealso> callbacks
+ although a driver instance has marked itself as busy (see
+ <seealso marker="erl_driver#set_busy_port">
+ <c>erl_driver:set_busy_port</c></seealso>).
+ As from ERTS 5.7.4 this flag is required for drivers used
+ by the Erlang distribution (the behavior has always been
+ required by drivers used by the distribution).</p>
</item>
<tag><c>ERL_DRV_FLAG_NO_BUSY_MSGQ</c></tag>
- <item>Disable busy port message queue functionality. For
- more information, see the documentation of the
- <seealso marker="erl_driver#erl_drv_busy_msgq_limits">erl_drv_busy_msgq_limits()</seealso>
- function.
+ <item>
+ <p>Disables busy port message queue functionality. For
+ more information, see
+ <seealso marker="erl_driver#erl_drv_busy_msgq_limits">
+ <c>erl_driver:erl_drv_busy_msgq_limits</c></seealso>.</p>
</item>
<tag><c>ERL_DRV_FLAG_USE_INIT_ACK</c></tag>
- <item>When this flag is given the linked-in driver has to manually
- acknowledge that the port has been successfully started using
- <seealso marker="erl_driver#erl_drv_init_ack">erl_drv_init_ack()</seealso>.
- This allows the implementor to make the erlang:open_port exit with
- badarg after some initial asynchronous initialization has been done.
+ <item>
+ <p>When this flag is specified, the linked-in driver must manually
+ acknowledge that the port has been successfully started using
+ <seealso marker="erl_driver#erl_drv_init_ack">
+ <c>erl_driver:erl_drv_init_ack()</c></seealso>.
+ This allows the implementor to make the
+ <c>erlang:open_port</c> exit with <c>badarg</c> after some
+ initial asynchronous initialization has been done.</p>
</item>
</taglist>
</item>
- <tag>void *handle2</tag>
+ <tag><c>void *handle2</c></tag>
<item>
- <p>
- This field is reserved for the emulator's internal use. The
- emulator will modify this field; therefore, it is important
- that the <c>driver_entry</c> isn't declared <c>const</c>.
- </p>
+ <p>This field is reserved for the emulator's internal use. The
+ emulator modifies this field, so it is important
+ that the <c>driver_entry</c> is not declared <c>const</c>.</p>
</item>
- <tag><marker id="process_exit"/>void (*process_exit)(ErlDrvData drv_data, ErlDrvMonitor *monitor)</tag>
+ <tag><marker id="process_exit"/>
+ <c>void (*process_exit)(ErlDrvData drv_data, ErlDrvMonitor *monitor)</c>
+ </tag>
<item>
- <p>This callback is called when a monitored process exits. The
+ <p>Called when a monitored process exits. The
<c>drv_data</c> is the data associated with the port for which
- the process is monitored (using <seealso marker="erl_driver#driver_monitor_process">driver_monitor_process</seealso>)
- and the <c>monitor</c> corresponds to the <c>ErlDrvMonitor</c>
+ the process is monitored (using
+ <seealso marker="erl_driver#driver_monitor_process">
+ <c>erl_driver:driver_monitor_process</c></seealso>)
+ and the <c>monitor</c> corresponds to the <c>ErlDrvMonitor</c>
structure filled
in when creating the monitor. The driver interface function
- <seealso marker="erl_driver#driver_get_monitored_process">driver_get_monitored_process</seealso>
- can be used to retrieve the process id of the exiting process as
+ <seealso marker="erl_driver#driver_get_monitored_process">
+ <c>erl_driver:driver_get_monitored_process</c></seealso>
+ can be used to retrieve the process ID of the exiting process as
an <c>ErlDrvTermData</c>.</p>
</item>
- <tag><marker id="stop_select"/>void (*stop_select)(ErlDrvEvent event, void* reserved)</tag>
+ <tag><marker id="stop_select"/>
+ <c>void (*stop_select)(ErlDrvEvent event, void* reserved)</c></tag>
<item>
- <p>This function is called on behalf of
- <seealso marker="erl_driver#driver_select">driver_select</seealso>
- when it is safe to close an event object.</p>
+ <p>Called on behalf of
+ <seealso marker="erl_driver#driver_select">
+ <c>erl_driver:driver_select</c></seealso>
+ when it is safe to close an event object.</p>
<p>A typical implementation on Unix is to do
- <c>close((int)event)</c>.</p>
- <p>Argument <c>reserved</c> is intended for future use and should be ignored.</p>
- <p>In contrast to most of the other call-back functions,
- <c>stop_select</c> is called independent of any port. No
- <c>ErlDrvData</c> argument is passed to the function. No
- driver lock or port lock is guaranteed to be held. The port that
- called <c>driver_select</c> might even be closed at the
- time <c>stop_select</c> is called. But it could also be
- the case that <c>stop_select</c> is called directly by
- <c>driver_select</c>.</p>
+ <c>close((int)event)</c>.</p>
+ <p>Argument <c>reserved</c> is intended for future use and is to be
+ ignored.</p>
+ <p>In contrast to most of the other callback functions,
+ <c>stop_select</c> is called independent of any port. No
+ <c>ErlDrvData</c> argument is passed to the function. No
+ driver lock or port lock is guaranteed to be held. The port that
+ called <c>driver_select</c> can even be closed at the
+ time <c>stop_select</c> is called. But it can also be
+ the case that <c>stop_select</c> is called directly by
+ <c>erl_driver:driver_select</c>.</p>
<p>It is not allowed to call any functions in the
- <seealso marker="erl_driver">driver API</seealso> from
- <c>stop_select</c>. This strict limitation is due to the
- volatile context that <c>stop_select</c> may be called.</p>
+ <seealso marker="erl_driver">driver API</seealso> from
+ <c>stop_select</c>. This strict limitation is because the
+ volatile context that <c>stop_select</c> can be called.</p>
</item>
-
- </taglist>
- </item>
-
</taglist>
</section>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="erl_driver">erl_driver(3)</seealso>,
- <seealso marker="kernel:erl_ddll">erl_ddll(3)</seealso>,
- <seealso marker="erlang">erlang(3)</seealso>,
- kernel(3)</p>
+ <title>See Also</title>
+ <p><seealso marker="erl_driver"><c>erl_driver(3)</c></seealso>,
+ <seealso marker="erlang"><c>erlang(3)</c></seealso>,
+ <seealso marker="kernel:erl_ddll"><c>erl_ddll(3)</c></seealso></p>
</section>
</cref>
diff --git a/erts/doc/src/epmd.xml b/erts/doc/src/epmd.xml
index d9f580d081..311483022d 100644
--- a/erts/doc/src/epmd.xml
+++ b/erts/doc/src/epmd.xml
@@ -28,242 +28,259 @@
<docno>1</docno>
<approved></approved>
<checked></checked>
- <date>98-01-05</date>
+ <date>1998-01-05</date>
<rev>A</rev>
<file>epmd.xml</file>
</header>
<com>epmd</com>
- <comsummary>
- <p>Erlang Port Mapper Daemon</p>
- <taglist>
- <tag><c><![CDATA[epmd [-d|-debug] [DbgExtra...] [-address Addresses] [-port No] [-daemon] [-relaxed_command_check]]]></c></tag>
- <item>
- <p>Starts the port mapper daemon</p>
- </item>
- <tag><c><![CDATA[epmd [-d|-debug] [-port No] [-names|-kill|-stop Name]]]></c></tag>
- <item>
- <p>Communicates with a running port mapper daemon</p>
- </item>
- </taglist>
- </comsummary>
+ <comsummary>Erlang Port Mapper Daemon</comsummary>
+
<description>
- <p>This daemon acts as a name server on all hosts involved in
- distributed Erlang computations. When an Erlang node
- starts, the node has a name and it obtains an address from the host
- OS kernel.
- The name and the address are sent to the
+ <taglist>
+ <tag><c><![CDATA[epmd [-d|-debug] [DbgExtra...] [-address Addresses]
+ [-port No] [-daemon] [-relaxed_command_check]]]></c></tag>
+ <item>
+ <p>Starts the port mapper daemon.</p>
+ </item>
+ <tag><c><![CDATA[epmd [-d|-debug] [-port No]
+ [-names|-kill|-stop Name]]]></c></tag>
+ <item>
+ <p>Communicates with a running port mapper daemon.</p>
+ </item>
+ </taglist>
+
+ <p>This daemon acts as a name server on all hosts involved in
+ distributed Erlang computations. When an Erlang node starts,
+ the node has a name and it obtains an address from the host
+ OS kernel. The name and address are sent to the
<c><![CDATA[epmd]]></c> daemon running on the local host.
In a TCP/IP environment, the address consists
- of the IP address and a port number. The name of the node is
+ of the IP address and a port number. The node name is
an atom on the form of <c><![CDATA[Name@Node]]></c>.
The job of the <c><![CDATA[epmd]]></c> daemon is to keep track of which
node name listens on which address. Hence, <c><![CDATA[epmd]]></c> maps
symbolic node names to machine addresses.</p>
- <p>The TCP/IP <c>epmd</c> daemon actually only keeps track of
+ <p>The TCP/IP <c>epmd</c> daemon only keeps track of
the <c>Name</c> (first) part of an Erlang node name. The <c>Host</c>
part (whatever is after the <c><![CDATA[@]]></c>) is implicit in the
- node name where the <c>epmd</c> daemon was actually contacted,
+ node name where the <c>epmd</c> daemon was contacted,
as is the IP address where the Erlang node can be
reached. Consistent and correct TCP naming services are
therefore required for an Erlang network to function
correctly.</p>
<taglist>
- <tag>Starting the port mapper daemon</tag>
- <item>
-
- <p>The daemon is started automatically by the <c>erl</c>
- command if the node is to be distributed and there is no
- running instance present. If automatically launched,
- environment variables have to be used to alter the behavior of
- the daemon. See the <seealso
- marker="#environment_variables">Environment
- variables</seealso> section below.</p>
-
- <p>If the -daemon argument is not given,
- <c><![CDATA[epmd]]></c> runs as a normal program with the
- controlling terminal of the shell in which it is
- started. Normally, it should run as a daemon.</p>
-
- <p>Regular start-up options are described in the
- <seealso marker="#daemon_flags">Regular options</seealso>
- section below.</p>
-
- <p>The <c>DbgExtra</c> options are described in the
- <seealso marker="#debug_flags">DbgExtra options</seealso>
- section below.</p>
-
- </item>
- <tag>Communicating with a running port mapper daemon</tag>
- <item>
-
- <p>Communicating with the running epmd daemon by means of the
- <c>epmd</c> program is done primarily for debugging
- purposes.</p>
-
- <p>The different queries are described in the <seealso
- marker="#interactive_flags">Interactive options</seealso>
- section below.</p>
-
- </item>
- </taglist>
+ <tag>Starting the port mapper daemon</tag>
+ <item>
+ <p>The daemon is started automatically by command
+ <seealso marker="erl"><c>erl(1)</c></seealso>
+ if the node is to be distributed and no running
+ instance is present. If automatically launched
+ environment variables must be used to change the behavior
+ of the daemon; see section
+ <seealso marker="#environment_variables">Environment
+ Variables</seealso>.</p>
+ <p>If argument <c>-daemon</c> is not specified,
+ <c><![CDATA[epmd]]></c> runs as a normal program with the
+ controlling terminal of the shell in which it is
+ started. Normally, it is to be run as a daemon.</p>
+ <p>Regular startup options are described in section
+ <seealso marker="#daemon_flags">Regular Options</seealso>.</p>
+ <p>The <c>DbgExtra</c> options are described in section
+ <seealso marker="#debug_flags">DbgExtra Options</seealso>.</p>
+ </item>
+ <tag>Communicating with a running port mapper daemon</tag>
+ <item>
+ <p>Communicating with the running <c>epmd</c> daemon by the
+ <c>epmd</c> program is done primarily for debugging purposes.</p>
+ <p>The different queries are described in section <seealso
+ marker="#interactive_flags">Interactive options</seealso>.</p>
+ </item>
+ </taglist>
</description>
+
<section>
<marker id="daemon_flags"></marker>
- <title>Regular options</title>
+ <title>Regular Options</title>
+ <p>These options are available when starting the name server. The name
+ server is normally started automatically by command
+ <seealso marker="erl"><c>erl(1)</c></seealso> (if not already available),
+ but it can also be started at system startup.</p>
- <p>These options are available when starting the actual name server. The name server is normally started automatically by the <c>erl</c> command (if not already available), but it can also be started at i.e. system start-up.</p>
<taglist>
- <tag><c><![CDATA[-address List]]></c></tag>
- <item>
- <p>Let this instance of <c>epmd</c> listen only on the
- comma-separated list of IP addresses and on the loopback address
- (which is implicitly added to the list if it has not been
- specified). This can also be set using the
- <c><![CDATA[ERL_EPMD_ADDRESS]]></c> environment variable. See the
- section <seealso marker="#environment_variables">Environment
- variables</seealso> below.</p>
- </item>
- <tag><c><![CDATA[-port No]]></c></tag>
- <item>
- <p>Let this instance of epmd listen to another TCP port than
- default 4369. This can also be set using the
- <c><![CDATA[ERL_EPMD_PORT]]></c> environment variable. See the
- section <seealso marker="#environment_variables">Environment
- variables</seealso> below</p>
- </item>
- <tag><c><![CDATA[-d | -debug]]></c></tag>
- <item>
-
- <p>Enable debug output. The more <c>-d</c> flags given, the more
- debug output you will get (to a certain limit). This option is
- most useful when the epmd daemon is not started as a daemon.</p>
- </item>
- <tag><c><![CDATA[-daemon]]></c></tag>
- <item>
- <p>Start epmd detached from the controlling terminal. Logging will end up in syslog when available and correctly configured. If the epmd daemon is started at boot, this option should definitely be used. It is also used when the <c>erl</c> command automatically starts <c>epmd</c>.</p>
- </item>
- <tag><c><![CDATA[-relaxed_command_check]]></c></tag>
- <item>
- <p>Start the epmd program with relaxed command checking (mostly for backward compatibility). This affects the following:</p>
- <list type="bulleted">
- <item>
- <p>With relaxed command checking, the <c>epmd</c> daemon can be killed from the localhost with i.e. <c>epmd -kill</c> even if there are active nodes registered. Normally only daemons with an empty node database can be killed with the <c>epmd -kill</c> command.</p>
+ <tag><c><![CDATA[-address List]]></c></tag>
+ <item>
+ <p>Lets this instance of <c>epmd</c> listen only on the
+ comma-separated list of IP addresses and on the loopback address
+ (which is implicitly added to the list if it has not been
+ specified). This can also be set using environment variable
+ <c><![CDATA[ERL_EPMD_ADDRESS]]></c>; see section <seealso
+ marker="#environment_variables">Environment Variables</seealso>.</p>
+ </item>
+ <tag><c><![CDATA[-port No]]></c></tag>
+ <item>
+ <p>Lets this instance of <c>epmd</c> listen to another TCP port than
+ default 4369. This can also be set using environment variable
+ <c><![CDATA[ERL_EPMD_PORT]]></c>; see section <seealso
+ marker="#environment_variables">Environment Variables</seealso>.</p>
+ </item>
+ <tag><c><![CDATA[-d | -debug]]></c></tag>
+ <item>
+ <p>Enables debug output. The more <c>-d</c> flags specified, the more
+ debug output you will get (to a certain limit). This option is most
+ useful when the <c>epmd</c> daemon is not started as a daemon.</p>
+ </item>
+ <tag><c><![CDATA[-daemon]]></c></tag>
+ <item>
+ <p>Starts <c>epmd</c> detached from the controlling terminal. Logging
+ ends up in syslog when available and correctly configured. If the
+ <c>epmd</c> daemon is started at boot, this option is definitely
+ to be used. It is also used when command <c>erl</c> automatically
+ starts <c>epmd</c>.</p>
+ </item>
+ <tag><c><![CDATA[-relaxed_command_check]]></c></tag>
+ <item>
+ <p>Starts the <c>epmd</c> program with relaxed command checking
+ (mostly for backward compatibility). This affects the following:</p>
+ <list type="bulleted">
+ <item>
+ <p>With relaxed command checking, the <c>epmd</c> daemon can be
+ killed from the local host with, for example, command
+ <c>epmd -kill</c> even if active nodes are registered. Normally
+ only daemons with an empty node database can be killed with
+ <c>epmd -kill</c>.</p>
</item>
<item>
- <p>The <c>epmd -stop</c> command (and the corresponding messages to epmd, as can be given using <c>erl_interface/ei</c>) is normally always ignored, as it opens up the possibility of a strange situation where two nodes of the same name can be alive at the same time. A node unregisters itself by just closing the connection to epmd, which is why the <c>stop</c> command was only intended for use in debugging situations.</p>
- <p>With relaxed command checking enabled, you can forcibly unregister live nodes.</p>
+ <p>Command <c>epmd -stop</c> (and the corresponding messages to
+ <c>epmd</c>, as can be specified using <seealso
+ marker="erl_interface:ei"><c>erl_interface:ei(3)</c></seealso>) is
+ normally always ignored. This because it can cause a strange
+ situation where two nodes of the same name can be alive at the
+ same time. A node unregisters itself by only closing the
+ connection to <c>epmd</c>, which is why command <c>stop</c>
+ was only intended for use in debugging situations.</p>
+ <p>With relaxed command checking enabled, you can forcibly
+ unregister live nodes.</p>
</item>
- </list>
- <p>Relaxed command checking can also be enabled by setting the environment variable <c>ERL_EPMD_RELAXED_COMMAND_CHECK</c> prior to starting <c>epmd</c>.</p>
- <p>Only use relaxed command checking on systems with very limited interactive usage.</p>
- </item>
- </taglist>
+ </list>
+ <p>Relaxed command checking can also be enabled by setting environment
+ variable <c>ERL_EPMD_RELAXED_COMMAND_CHECK</c> before starting
+ <c>epmd</c>.</p>
+ <p>Use relaxed command checking only on systems with very limited
+ interactive usage.</p>
+ </item>
+ </taglist>
</section>
<section>
<marker id="debug_flags"></marker>
- <title>DbgExtra options</title>
- <p>These options are purely for debugging and testing epmd clients. They should not be used in normal operation.</p>
+ <title>DbgExtra Options</title>
+ <note>
+ <p>These options are only for debugging and testing <c>epmd</c> clients.
+ They are not to be used in normal operation.</p>
+ </note>
<taglist>
- <tag><c><![CDATA[-packet_timeout Seconds]]></c></tag>
- <item>
- <p>Set the number of seconds a connection can be
- inactive before epmd times out and closes the
- connection (default 60).</p>
- </item>
- <tag><c><![CDATA[-delay_accept Seconds]]></c></tag>
- <item>
- <p>To simulate a busy server you can insert a delay between when epmd
- gets notified that a new connection is requested and
- when the connection gets accepted.</p>
- </item>
- <tag><c><![CDATA[-delay_write Seconds]]></c></tag>
- <item>
- <p>Also a simulation of a busy server. Inserts
- a delay before a reply is sent.</p>
- </item>
+ <tag><c><![CDATA[-packet_timeout Seconds]]></c></tag>
+ <item>
+ <p>Sets the number of seconds a connection can be
+ inactive before <c>epmd</c> times out and closes the
+ connection. Defaults to 60.</p>
+ </item>
+ <tag><c><![CDATA[-delay_accept Seconds]]></c></tag>
+ <item>
+ <p>To simulate a busy server, you can insert a delay between when
+ <c>epmd</c> gets notified that a new connection is requested and
+ when the connection gets accepted.</p>
+ </item>
+ <tag><c><![CDATA[-delay_write Seconds]]></c></tag>
+ <item>
+ <p>Also a simulation of a busy server. Inserts
+ a delay before a reply is sent.</p>
+ </item>
</taglist>
</section>
+
<section>
<marker id="interactive_flags"></marker>
- <title>Interactive options</title>
- <p>These options make <c>epmd</c> run as an interactive command, displaying the results of sending queries to an already running instance of <c>epmd</c>. The epmd contacted is always on the local node, but the <c>-port</c> option can be used to select between instances if several are running using different ports on the host.</p>
- <taglist>
- <tag><c><![CDATA[-port No]]></c></tag>
- <item>
- <p>Contacts the <c>epmd</c> listening on the given TCP port number
- (default 4369). This can also be set using the
- <c><![CDATA[ERL_EPMD_PORT]]></c> environment variable. See the
- section <seealso marker="#environment_variables">Environment
- variables</seealso> below.</p>
- </item>
- <tag><c><![CDATA[-names]]></c></tag>
- <item>
- <p>List names registered with the currently running epmd</p>
- </item>
- <tag><c><![CDATA[-kill]]></c></tag>
- <item>
- <p>Kill the currently running <c>epmd</c>.</p>
+ <title>Interactive Options</title>
+ <p>These options make <c>epmd</c> run as an interactive command,
+ displaying the results of sending queries to an already running
+ instance of <c>epmd</c>. The <c>epmd</c> contacted is always on the
+ local node, but option <c>-port</c> can be used to select between
+ instances if several are running using different ports on the host.</p>
- <p>Killing the running <c>epmd</c> is only allowed if <c>epmd
- -names</c> shows an empty database or
- <c>-relaxed_command_check</c> was given when the running
- instance of <c>epmd</c> was started. Note that
- <c>-relaxed_command_check</c> is given when starting the
- daemon that is to accept killing when it has live nodes
- registered. When running epmd interactively,
- <c>-relaxed_command_check</c> has no effect. A daemon that is
- started without relaxed command checking has to be killed
- using i.e. signals or some other OS specific method if it has
- active clients registered.</p>
- </item>
- <tag><c><![CDATA[-stop Name]]></c></tag>
- <item>
- <p>Forcibly unregister a live node from <c>epmd</c>'s database</p>
-
- <p>This command can only be used when contacting <c>epmd</c>
- instances started with the <c>-relaxed_command_check</c>
- flag. Note that relaxed command checking has to be enabled for
- the <c>epmd</c> daemon contacted. When running epmd
- interactively,
- <c>-relaxed_command_check</c> has no effect.</p>
- </item>
- </taglist>
+ <taglist>
+ <tag><c><![CDATA[-port No]]></c></tag>
+ <item>
+ <p>Contacts the <c>epmd</c> listening on the specified TCP port
+ number (default 4369). This can also be set using environment
+ variable <c><![CDATA[ERL_EPMD_PORT]]></c>; see section <seealso
+ marker="#environment_variables">Environment Variables</seealso>.</p>
+ </item>
+ <tag><c><![CDATA[-names]]></c></tag>
+ <item>
+ <p>Lists names registered with the currently running <c>epmd</c>.</p>
+ </item>
+ <tag><c><![CDATA[-kill]]></c></tag>
+ <item>
+ <p>Kills the currently running <c>epmd</c>.</p>
+ <p>Killing the running <c>epmd</c> is only allowed if
+ <c>epmd -names</c> shows an empty database or if
+ <c>-relaxed_command_check</c> was specified when the running
+ instance of <c>epmd</c> was started.</p>
+ <p>Notice that <c>-relaxed_command_check</c> is specified when
+ starting the daemon that is to accept killing when it has live
+ nodes registered. When running <c>epmd</c> interactively,
+ <c>-relaxed_command_check</c> has no effect. A daemon that is
+ started without relaxed command checking must be killed using,
+ for example, signals or some other OS-specific method if it has
+ active clients registered.</p>
+ </item>
+ <tag><c><![CDATA[-stop Name]]></c></tag>
+ <item>
+ <p>Forcibly unregisters a live node from the <c>epmd</c> database.</p>
+ <p>This command can only be used when contacting <c>epmd</c>
+ instances started with flag <c>-relaxed_command_check</c>.</p>
+ <p>Notice that relaxed command checking must enabled for the
+ <c>epmd</c> daemon contacted. When running <c>epmd</c>
+ interactively, <c>-relaxed_command_check</c> has no effect.</p>
+ </item>
+ </taglist>
</section>
+
<section>
<marker id="environment_variables"></marker>
- <title>Environment variables</title>
+ <title>Environment Variables</title>
<taglist>
<tag><c><![CDATA[ERL_EPMD_ADDRESS]]></c></tag>
<item>
- <p>This environment variable may be set to a comma-separated
- list of IP addresses, in which case the <c>epmd</c> daemon
- will listen only on the specified address(es) and on the
- loopback address (which is implicitly added to the list if it
- has not been specified). The default behaviour is to listen on
- all available IP addresses.</p>
+ <p>Can be set to a comma-separated
+ list of IP addresses, in which case the <c>epmd</c> daemon
+ will listen only on the specified address(es) and on the
+ loopback address (which is implicitly added to the list if it
+ has not been specified). The default behavior is to listen on
+ all available IP addresses.</p>
</item>
<tag><c><![CDATA[ERL_EPMD_PORT]]></c></tag>
<item>
- <p>This environment variable can contain the port number epmd will use.
- The default port will work fine in most cases. A different port can
- be specified to allow several instances of epmd, representing
- independent clusters of nodes, to co-exist on the same host.
- All nodes in a cluster must use the same epmd port number.</p>
+ <p>Can contain the port number <c>epmd</c> will use.
+ The default port will work fine in most cases. A different port can
+ be specified to allow several instances of <c>epmd</c>, representing
+ independent clusters of nodes, to co-exist on the same host.
+ All nodes in a cluster must use the same <c>epmd</c> port number.</p>
</item>
<tag><c><![CDATA[ERL_EPMD_RELAXED_COMMAND_CHECK]]></c></tag>
<item>
- <p>If set prior to start, the <c>epmd</c> daemon will behave
- as if the <c>-relaxed_command_check</c> option was given at
- start-up. Consequently, if this option is set before starting
- the Erlang virtual machine, the automatically started
- <c>epmd</c> will accept the <c>-kill</c> and <c>-stop</c>
- commands without restrictions.</p>
+ <p>If set before start, the <c>epmd</c> daemon behaves
+ as if option <c>-relaxed_command_check</c> was specified at
+ startup. Consequently, if this option is set before starting
+ the Erlang virtual machine, the automatically started
+ <c>epmd</c> accepts the <c>-kill</c> and <c>-stop</c>
+ commands without restrictions.</p>
</item>
</taglist>
</section>
@@ -271,41 +288,45 @@
<section>
<title>Logging</title>
<p>On some operating systems <em>syslog</em> will be used for
- error reporting when epmd runs as an daemon. To enable
- the error logging you have to edit <path unix="" windows="">/etc/syslog.conf</path>
- file and add an entry</p>
+ error reporting when <c>epmd</c> runs as a daemon. To enable
+ the error logging, you must edit the
+ <path unix="" windows="">/etc/syslog.conf</path> file and add an
+ entry:</p>
+
<code type="none"><![CDATA[
- !epmd
- *.*<TABs>/var/log/epmd.log
- ]]></code>
- <p>where &lt;TABs&gt; are at least one real tab character. Spaces will
- silently be ignored.
- </p>
+ !epmd
+ *.*<TABs>/var/log/epmd.log
+]]></code>
+
+ <p>where <c>&lt;TABs&gt;</c> are at least one real tab character.
+ Spaces are silently ignored.</p>
</section>
+
<section>
- <title>Access restrictions</title>
- <p>The <c>epmd</c> daemon accepts messages from both localhost and
- remote hosts. However, only the query commands are answered (and
- acted upon) if the query comes from a remote host. It is always an
- error to try to register a nodename if the client is not a process
- located on the same host as the <c>epmd</c> instance is running on-
- such requests are considered hostile and the connection is
- immediately closed.</p>
+ <title>Access Restrictions</title>
+ <p>The <c>epmd</c> daemon accepts messages from both the local host and
+ remote hosts. However, only the query commands are answered (and
+ acted upon) if the query comes from a remote host. It is always an
+ error to try to register a node name if the client is not a process
+ on the same host as the <c>epmd</c> instance is running on. Such
+ requests are considered hostile and the connection is closed
+ immediately.</p>
- <p>The queries accepted from remote nodes are:</p>
- <list type="bulleted">
- <item>
- <p>Port queries - i.e. on which port does the node with a given
- name listen</p>
- </item>
- <item>
- <p>Name listing - i.e. give a list of all names registered on
+ <p>The following queries are accepted from remote nodes:</p>
+
+ <list type="bulleted">
+ <item>
+ <p>Port queries, that is, on which port the node with a specified
+ name listens</p>
+ </item>
+ <item>
+ <p>Name listing, that is, gives a list of all names registered on
the host</p>
- </item>
- </list>
- <p>To restrict access further, firewall software has to be used.</p>
- </section>
+ </item>
+ </list>
+ <p>To restrict access further, firewall software must be used.</p>
+ </section>
</comref>
diff --git a/erts/doc/src/erl.xml b/erts/doc/src/erl.xml
index 1bbde7f1e0..f62d3fb170 100644
--- a/erts/doc/src/erl.xml
+++ b/erts/doc/src/erl.xml
@@ -30,86 +30,92 @@
<file>erl.xml</file>
</header>
<com>erl</com>
- <comsummary>The Erlang Emulator</comsummary>
+ <comsummary>The Erlang emulator.</comsummary>
<description>
<p>The <c><![CDATA[erl]]></c> program starts an Erlang runtime system.
- The exact details (for example, whether <c><![CDATA[erl]]></c> is a script or
- a program and which other programs it calls) are system-dependent.</p>
- <p>Windows users probably wants to use the <c><![CDATA[werl]]></c> program
+ The exact details (for example, whether <c><![CDATA[erl]]></c> is a
+ script or a program and which other programs it calls) are
+ system-dependent.</p>
+
+ <p>Windows users probably want to use the <c><![CDATA[werl]]></c> program
instead, which runs in its own window with scrollbars and supports
- command-line editing. The <c><![CDATA[erl]]></c> program on Windows provides
- no line editing in its shell, and on Windows 95 there is no way
- to scroll back to text which has scrolled off the screen.
- The <c><![CDATA[erl]]></c> program must be used, however, in pipelines or if
+ command-line editing. The <c><![CDATA[erl]]></c> program on Windows
+ provides no line editing in its shell, and on Windows 95 there is no way
+ to scroll back to text that has scrolled off the screen. The
+ <c><![CDATA[erl]]></c> program must be used, however, in pipelines or if
you want to redirect standard input or output.</p>
- <note><p>As of ERTS version 5.9 (OTP-R15B) the runtime system will by
- default <em>not</em> bind schedulers to logical processors.
- For more information see documentation of the
- <seealso marker="#+sbt">+sbt</seealso> system flag.
- </p>
- </note>
+
+ <note>
+ <p>As from ERTS 5.9 (Erlang/OTP R15B) the runtime system does by
+ default <em>not</em> bind schedulers to logical processors.
+ For more information, see system flag
+ <seealso marker="#+sbt"><c>+sbt</c></seealso>.</p>
+ </note>
</description>
+
<funcs>
<func>
<name>erl &lt;arguments></name>
- <fsummary>Start an Erlang runtime system</fsummary>
+ <fsummary>Start an Erlang runtime system.</fsummary>
<desc>
- <p>Starts an Erlang runtime system.</p>
- <p>The arguments can be divided into <em>emulator flags</em>,
- <em>flags</em> and <em>plain arguments</em>:</p>
- <list type="bulleted">
- <item>
- <p>Any argument starting with the character <c><![CDATA[+]]></c> is
- interpreted as an <seealso marker="#emu_flags">emulator flag</seealso>.</p>
- <p>As indicated by the name, emulator flags controls
- the behavior of the emulator.</p>
- </item>
- <item>
- <p>Any argument starting with the character <c><![CDATA[-]]></c>
- (hyphen) is interpreted as a
- <seealso marker="#init_flags">flag</seealso> which should
- be passed to the Erlang part of the runtime system, more
- specifically to the <c><![CDATA[init]]></c> system process, see
- <seealso marker="init">init(3)</seealso>.</p>
- <p>The <c><![CDATA[init]]></c> process itself interprets some of these
- flags, the <em>init flags</em>. It also stores any
- remaining flags, the <em>user flags</em>. The latter can
- be retrieved by calling <c><![CDATA[init:get_argument/1]]></c>.</p>
- <p>It can be noted that there are a small number of "-"
- flags which now actually are emulator flags, see
- the description below.</p>
- </item>
- <item>
- <p>Plain arguments are not interpreted in any way. They are
- also stored by the <c><![CDATA[init]]></c> process and can be
- retrieved by calling <c><![CDATA[init:get_plain_arguments/0]]></c>.
- Plain arguments can occur before the first flag, or after
- a <c><![CDATA[--]]></c> flag. Additionally, the flag <c><![CDATA[-extra]]></c>
- causes everything that follows to become plain arguments.</p>
- </item>
- </list>
- <p>Example:</p>
- <pre>
+ <p>Starts an Erlang runtime system.</p>
+ <p>The arguments can be divided into <em>emulator flags</em>,
+ <em>flags</em>, and <em>plain arguments</em>:</p>
+ <list type="bulleted">
+ <item>
+ <p>Any argument starting with character <c><![CDATA[+]]></c> is
+ interpreted as an
+ <seealso marker="#emu_flags">emulator flag</seealso>.</p>
+ <p>As indicated by the name, emulator flags control
+ the behavior of the emulator.</p>
+ </item>
+ <item>
+ <p>Any argument starting with character <c><![CDATA[-]]></c>
+ (hyphen) is interpreted as a
+ <seealso marker="#init_flags">flag</seealso>, which is to
+ be passed to the Erlang part of the runtime system, more
+ specifically to the <c><![CDATA[init]]></c> system process, see
+ <seealso marker="init"><c>init(3)</c></seealso>.</p>
+ <p>The <c><![CDATA[init]]></c> process itself interprets some of
+ these flags, the <em>init flags</em>. It also stores any
+ remaining flags, the <em>user flags</em>. The latter can be
+ retrieved by calling <c><![CDATA[init:get_argument/1]]></c>.</p>
+ <p>A small number of "-" flags exist, which now actually are
+ emulator flags, see the description below.</p>
+ </item>
+ <item>
+ <p>Plain arguments are not interpreted in any way. They are also
+ stored by the <c><![CDATA[init]]></c> process and can be retrieved
+ by calling <c><![CDATA[init:get_plain_arguments/0]]></c>.
+ Plain arguments can occur before the first flag, or after a
+ <c><![CDATA[--]]></c> flag. Also, the <c><![CDATA[-extra]]></c>
+ flag causes everything that follows to become plain arguments.</p>
+ </item>
+ </list>
+ <p><em>Examples:</em></p>
+ <pre>
% <input>erl +W w -sname arnie +R 9 -s my_init -extra +bertie</input>
(arnie@host)1> <input>init:get_argument(sname).</input>
{ok,[["arnie"]]}
(arnie@host)2> <input>init:get_plain_arguments().</input>
["+bertie"]</pre>
- <p>Here <c><![CDATA[+W w]]></c> and <c><![CDATA[+R 9]]></c> are emulator flags.
- <c><![CDATA[-s my_init]]></c> is an init flag, interpreted by <c><![CDATA[init]]></c>.
- <c><![CDATA[-sname arnie]]></c> is a user flag, stored by <c><![CDATA[init]]></c>.
- It is read by Kernel and will cause the Erlang runtime system
- to become distributed. Finally, everything after <c><![CDATA[-extra]]></c>
- (that is, <c><![CDATA[+bertie]]></c>) is considered as plain arguments.</p>
- <pre>
+ <p>Here <c><![CDATA[+W w]]></c> and <c><![CDATA[+R 9]]></c> are
+ emulator flags. <c><![CDATA[-s my_init]]></c> is an init flag,
+ interpreted by <c><![CDATA[init]]></c>.
+ <c><![CDATA[-sname arnie]]></c> is a user flag, stored by
+ <c><![CDATA[init]]></c>. It is read by Kernel and causes the
+ Erlang runtime system to become distributed. Finally, everything after
+ <c><![CDATA[-extra]]></c> (that is, <c><![CDATA[+bertie]]></c>) is
+ considered as plain arguments.</p>
+ <pre>
% <input>erl -myflag 1</input>
1> <input>init:get_argument(myflag).</input>
{ok,[["1"]]}
2> <input>init:get_plain_arguments().</input>
[]</pre>
- <p>Here the user flag <c><![CDATA[-myflag 1]]></c> is passed to and stored
- by the <c><![CDATA[init]]></c> process. It is a user defined flag,
- presumably used by some user defined application.</p>
+ <p>Here the user flag <c><![CDATA[-myflag 1]]></c> is passed to and
+ stored by the <c><![CDATA[init]]></c> process. It is a user-defined
+ flag, presumably used by some user-defined application.</p>
</desc>
</func>
</funcs>
@@ -117,50 +123,54 @@
<section>
<marker id="init_flags"></marker>
<title>Flags</title>
- <p>In the following list, init flags are marked (init flag).
+ <p>In the following list, init flags are marked "(init flag)".
Unless otherwise specified, all other flags are user flags, for
which the values can be retrieved by calling
- <c><![CDATA[init:get_argument/1]]></c>. Note that the list of user flags is
- not exhaustive, there may be additional, application specific
- flags which instead are documented in the corresponding
+ <c><![CDATA[init:get_argument/1]]></c>. Notice that the list of user
+ flags is not exhaustive, there can be more application-specific
+ flags that instead are described in the corresponding
application documentation.</p>
<taglist>
- <tag><c><![CDATA[--]]></c>(init flag)</tag>
+ <tag><c><![CDATA[--]]></c> (init flag)</tag>
<item>
<p>Everything following <c><![CDATA[--]]></c> up to the next flag
- (<c><![CDATA[-flag]]></c> or <c><![CDATA[+flag]]></c>) is considered plain arguments
- and can be retrieved using <c><![CDATA[init:get_plain_arguments/0]]></c>.</p>
+ (<c><![CDATA[-flag]]></c> or <c><![CDATA[+flag]]></c>) is considered
+ plain arguments and can be retrieved using
+ <c><![CDATA[init:get_plain_arguments/0]]></c>.</p>
</item>
<tag><c><![CDATA[-Application Par Val]]></c></tag>
<item>
- <p>Sets the application configuration parameter <c><![CDATA[Par]]></c> to
- the value <c><![CDATA[Val]]></c> for the application <c><![CDATA[Application]]></c>,
- see <seealso marker="kernel:app">app(4)</seealso> and
- <seealso marker="kernel:application">application(3)</seealso>.</p>
+ <p>Sets the application configuration parameter <c><![CDATA[Par]]></c>
+ to the value <c><![CDATA[Val]]></c> for the application
+ <c><![CDATA[Application]]></c>; see
+ <seealso marker="kernel:app"><c>app(4)</c></seealso> and
+ <seealso marker="kernel:application">
+ <c>application(3)</c></seealso>.</p>
</item>
<tag><marker id="args_file"/><c><![CDATA[-args_file FileName]]></c></tag>
<item>
- <p>Command line arguments are read from the file <c><![CDATA[FileName]]></c>.
- The arguments read from the file replace the
- '<c><![CDATA[-args_file FileName]]></c>' flag on the resulting command line.</p>
- <p>The file <c><![CDATA[FileName]]></c> should be a plain text file and may
- contain comments and command line arguments. A comment begins
- with a # character and continues until next end of line character.
- Backslash (\\) is used as quoting character. All command line
- arguments accepted by <c><![CDATA[erl]]></c> are allowed, also the
- <c><![CDATA[-args_file FileName]]></c> flag. Be careful not to cause circular
- dependencies between files containing the <c><![CDATA[-args_file]]></c> flag,
- though.</p>
- <p>The <c><![CDATA[-extra]]></c> flag is treated specially. Its scope ends
- at the end of the file. Arguments following an <c><![CDATA[-extra]]></c>
- flag are moved on the command line into the <c><![CDATA[-extra]]></c> section,
- i.e. the end of the command line following after an <c><![CDATA[-extra]]></c>
- flag.</p>
+ <p>Command-line arguments are read from the file
+ <c><![CDATA[FileName]]></c>. The arguments read from the file replace
+ flag '<c><![CDATA[-args_file FileName]]></c>' on the resulting
+ command line.</p>
+ <p>The file <c><![CDATA[FileName]]></c> is to be a plain text file and
+ can contain comments and command-line arguments. A comment begins
+ with a <c>#</c> character and continues until the next end of line
+ character. Backslash (\\) is used as quoting character. All
+ command-line arguments accepted by <c><![CDATA[erl]]></c> are allowed,
+ also flag <c><![CDATA[-args_file FileName]]></c>. Be careful not to
+ cause circular dependencies between files containing flag
+ <c><![CDATA[-args_file]]></c>, though.</p>
+ <p>The flag <c><![CDATA[-extra]]></c> is treated in special way. Its
+ scope ends at the end of the file. Arguments following an
+ <c><![CDATA[-extra]]></c> flag are moved on the command line into the
+ <c><![CDATA[-extra]]></c> section, that is, the end of the command
+ line following after an <c><![CDATA[-extra]]></c> flag.</p>
</item>
<tag><c><![CDATA[-async_shell_start]]></c></tag>
<item>
<p>The initial Erlang shell does not read user input until
- the system boot procedure has been completed (Erlang 5.4 and
+ the system boot procedure has been completed (Erlang/OTP 5.4 and
later). This flag disables the start synchronization feature
and lets the shell start in parallel with the rest of
the system.</p>
@@ -168,52 +178,56 @@
<tag><c><![CDATA[-boot File]]></c></tag>
<item>
<p>Specifies the name of the boot file, <c><![CDATA[File.boot]]></c>,
- which is used to start the system. See
- <seealso marker="init">init(3)</seealso>. Unless
+ which is used to start the system; see
+ <seealso marker="init"><c>init(3)</c></seealso>. Unless
<c><![CDATA[File]]></c> contains an absolute path, the system searches
- for <c><![CDATA[File.boot]]></c> in the current and <c><![CDATA[$ROOT/bin]]></c>
- directories.</p>
+ for <c><![CDATA[File.boot]]></c> in the current and
+ <c><![CDATA[$ROOT/bin]]></c> directories.</p>
<p>Defaults to <c><![CDATA[$ROOT/bin/start.boot]]></c>.</p>
</item>
<tag><c><![CDATA[-boot_var Var Dir]]></c></tag>
<item>
- <p>If the boot script contains a path variable <c><![CDATA[Var]]></c> other
- than <c><![CDATA[$ROOT]]></c>, this variable is expanded to <c><![CDATA[Dir]]></c>.
- Used when applications are installed in another directory
- than <c><![CDATA[$ROOT/lib]]></c>, see
- <seealso marker="sasl:systools#make_script/1">systools:make_script/1,2</seealso>.</p>
+ <p>If the boot script contains a path variable <c><![CDATA[Var]]></c>
+ other than <c><![CDATA[$ROOT]]></c>, this variable is expanded to
+ <c><![CDATA[Dir]]></c>. Used when applications are installed in
+ another directory than <c><![CDATA[$ROOT/lib]]></c>; see
+ <seealso marker="sasl:systools#make_script/1">
+ <c>systools:make_script/1,2</c></seealso> in SASL.</p>
</item>
<tag><c><![CDATA[-code_path_cache]]></c></tag>
<item>
- <p>Enables the code path cache of the code server, see
- <seealso marker="kernel:code">code(3)</seealso>.</p>
+ <p>Enables the code path cache of the code server; see
+ <seealso marker="kernel:code"><c>code(3)</c></seealso>.</p>
</item>
<tag><c><![CDATA[-compile Mod1 Mod2 ...]]></c></tag>
<item>
<p>Compiles the specified modules and then terminates (with
non-zero exit code if the compilation of some file did not
- succeed). Implies <c><![CDATA[-noinput]]></c>. Not recommended - use
- <seealso marker="erlc">erlc</seealso> instead.</p>
+ succeed). Implies <c><![CDATA[-noinput]]></c>.</p>
+ <p>Not recommended; use <seealso marker="erlc"><c>erlc</c></seealso>
+ instead.</p>
</item>
<tag><c><![CDATA[-config Config]]></c></tag>
<item>
<p>Specifies the name of a configuration file,
<c><![CDATA[Config.config]]></c>, which is used to configure
- applications. See
- <seealso marker="kernel:app">app(4)</seealso> and
- <seealso marker="kernel:application">application(3)</seealso>.</p>
+ applications; see
+ <seealso marker="kernel:app"><c>app(4)</c></seealso> and
+ <seealso marker="kernel:application">
+ <c>application(3)</c></seealso>.</p>
</item>
<tag><marker id="connect_all"/><c><![CDATA[-connect_all false]]></c></tag>
<item>
- <p>If this flag is present, <c><![CDATA[global]]></c> will not maintain a
- fully connected network of distributed Erlang nodes, and then
- global name registration cannot be used. See
- <seealso marker="kernel:global">global(3)</seealso>.</p>
+ <p>If this flag is present, <c><![CDATA[global]]></c> does not maintain
+ a fully connected network of distributed Erlang nodes, and then
+ global name registration cannot be used; see
+ <seealso marker="kernel:global"><c>global(3)</c></seealso>.</p>
</item>
<tag><c><![CDATA[-cookie Cookie]]></c></tag>
<item>
<p>Obsolete flag without any effect and common misspelling for
- <c><![CDATA[-setcookie]]></c>. Use <c><![CDATA[-setcookie]]></c> instead.</p>
+ <c><![CDATA[-setcookie]]></c>. Use <c><![CDATA[-setcookie]]></c>
+ instead.</p>
</item>
<tag><c><![CDATA[-detached]]></c></tag>
<item>
@@ -223,8 +237,7 @@
</item>
<tag><c><![CDATA[-emu_args]]></c></tag>
<item>
- <p>Useful for debugging. Prints out the actual arguments
- sent to the emulator.</p>
+ <p>Useful for debugging. Prints the arguments sent to the emulator.</p>
</item>
<tag><c><![CDATA[-env Variable Value]]></c></tag>
<item>
@@ -234,14 +247,16 @@
<pre>
% <input>erl -env DISPLAY gin:0</input></pre>
<p>In this example, an Erlang runtime system is started with
- the <c><![CDATA[DISPLAY]]></c> environment variable set to <c><![CDATA[gin:0]]></c>.</p>
+ environment variable <c><![CDATA[DISPLAY]]></c> set to
+ <c><![CDATA[gin:0]]></c>.</p>
</item>
- <tag><c><![CDATA[-eval Expr]]></c>(init flag)</tag>
+ <tag><c><![CDATA[-eval Expr]]></c> (init flag)</tag>
<item>
- <p>Makes <c><![CDATA[init]]></c> evaluate the expression <c><![CDATA[Expr]]></c>, see
- <seealso marker="init">init(3)</seealso>.</p>
+ <p>Makes <c><![CDATA[init]]></c> evaluate the expression
+ <c><![CDATA[Expr]]></c>; see
+ <seealso marker="init"><c>init(3)</c></seealso>.</p>
</item>
- <tag><c><![CDATA[-extra]]></c>(init flag)</tag>
+ <tag><c><![CDATA[-extra]]></c> (init flag)</tag>
<item>
<p>Everything following <c><![CDATA[-extra]]></c> is considered plain
arguments and can be retrieved using
@@ -249,8 +264,9 @@
</item>
<tag><c><![CDATA[-heart]]></c></tag>
<item>
- <p>Starts heart beat monitoring of the Erlang runtime system.
- See <seealso marker="kernel:heart">heart(3)</seealso>.</p>
+ <p>Starts heartbeat monitoring of the Erlang runtime system;
+ see <seealso marker="kernel:heart">
+ <c>heart(3)</c></seealso>.</p>
</item>
<tag><c><![CDATA[-hidden]]></c></tag>
<item>
@@ -258,90 +274,99 @@
run as a distributed node. Hidden nodes always establish
hidden connections to all other nodes except for nodes in the
same global group. Hidden connections are not published on
- either of the connected nodes, i.e. neither of the connected
- nodes are part of the result from <c><![CDATA[nodes/0]]></c> on the other
- node. See also hidden global groups,
- <seealso marker="kernel:global_group">global_group(3)</seealso>.</p>
+ any of the connected nodes, that is, none of the connected
+ nodes are part of the result from <c><![CDATA[nodes/0]]></c> on the
+ other node. See also hidden global groups;
+ <seealso marker="kernel:global_group">
+ <c>global_group(3)</c></seealso>.</p>
</item>
<tag><c><![CDATA[-hosts Hosts]]></c></tag>
<item>
- <p>Specifies the IP addresses for the hosts on which Erlang
- boot servers are running, see
- <seealso marker="kernel:erl_boot_server">erl_boot_server(3)</seealso>.
- This flag is mandatory if the <c><![CDATA[-loader inet]]></c> flag is
- present.</p>
- <p>The IP addresses must be given in the standard form (four
- decimal numbers separated by periods, for example
- <c><![CDATA["150.236.20.74"]]></c>. Hosts names are not acceptable, but
- a broadcast address (preferably limited to the local network)
+ <p>Specifies the IP addresses for the hosts on which Erlang boot servers
+ are running, see <seealso marker="kernel:erl_boot_server">
+ <c>erl_boot_server(3)</c></seealso>. This flag
+ is mandatory if flag <c><![CDATA[-loader inet]]></c> is present.</p>
+ <p>The IP addresses must be specified in the standard form (four
+ decimal numbers separated by periods, for example,
+ <c><![CDATA["150.236.20.74"]]></c>. Hosts names are not acceptable,
+ but a broadcast address (preferably limited to the local network)
is.</p>
</item>
<tag><c><![CDATA[-id Id]]></c></tag>
<item>
<p>Specifies the identity of the Erlang runtime system. If it is
run as a distributed node, <c><![CDATA[Id]]></c> must be identical to
- the name supplied together with the <c><![CDATA[-sname]]></c> or
- <c><![CDATA[-name]]></c> flag.</p>
+ the name supplied together with flag <c><![CDATA[-sname]]></c> or
+ <c><![CDATA[-name]]></c>.</p>
</item>
<tag><c><![CDATA[-init_debug]]></c></tag>
<item>
<p>Makes <c><![CDATA[init]]></c> write some debug information while
interpreting the boot script.</p>
</item>
- <tag><marker id="instr"/><c><![CDATA[-instr]]></c>(emulator flag)</tag>
+ <tag><marker id="instr"/><c><![CDATA[-instr]]></c> (emulator flag)</tag>
<item>
<p>Selects an instrumented Erlang runtime system (virtual
machine) to run, instead of the ordinary one. When running an
instrumented runtime system, some resource usage data can be
- obtained and analysed using the module <c><![CDATA[instrument]]></c>.
+ obtained and analyzed using the <c><![CDATA[instrument]]></c> module.
Functionally, it behaves exactly like an ordinary Erlang
runtime system.</p>
</item>
<tag><c><![CDATA[-loader Loader]]></c></tag>
<item>
- <p>Specifies the method used by <c><![CDATA[erl_prim_loader]]></c> to load
- Erlang modules into the system. See
- <seealso marker="erl_prim_loader">erl_prim_loader(3)</seealso>.
- Two <c><![CDATA[Loader]]></c> methods are supported, <c><![CDATA[efile]]></c> and
- <c><![CDATA[inet]]></c>. <c><![CDATA[efile]]></c> means use the local file system,
- this is the default. <c><![CDATA[inet]]></c> means use a boot server on
- another machine, and the <c><![CDATA[-id]]></c>, <c><![CDATA[-hosts]]></c> and
- <c><![CDATA[-setcookie]]></c> flags must be specified as well. If
- <c><![CDATA[Loader]]></c> is something else, the user supplied
+ <p>Specifies the method used by <c><![CDATA[erl_prim_loader]]></c> to
+ load Erlang modules into the system; see
+ <seealso marker="erl_prim_loader"><c>erl_prim_loader(3)</c></seealso>.
+ Two <c><![CDATA[Loader]]></c> methods are supported:</p>
+ <list type="bulleted">
+ <item>
+ <p><c><![CDATA[efile]]></c>, which means use the local file system,
+ this is the default.</p>
+ </item>
+ <item>
+ <p><c><![CDATA[inet]]></c>, which means use a boot server on
+ another machine. The flags <c><![CDATA[-id]]></c>,
+ <c><![CDATA[-hosts]]></c> and <c><![CDATA[-setcookie]]></c> must
+ also be specified.</p>
+ </item>
+ </list>
+ <p>If <c><![CDATA[Loader]]></c> is something else, the user-supplied
<c><![CDATA[Loader]]></c> port program is started.</p>
</item>
<tag><c><![CDATA[-make]]></c></tag>
<item>
- <p>Makes the Erlang runtime system invoke <c><![CDATA[make:all()]]></c> in
- the current working directory and then terminate. See
- <seealso marker="tools:make">make(3)</seealso>. Implies
+ <p>Makes the Erlang runtime system invoke <c><![CDATA[make:all()]]></c>
+ in the current working directory and then terminate; see
+ <seealso marker="tools:make"><c>make(3)</c></seealso>. Implies
<c><![CDATA[-noinput]]></c>.</p>
</item>
<tag><c><![CDATA[-man Module]]></c></tag>
<item>
- <p>Displays the manual page for the Erlang module <c><![CDATA[Module]]></c>.
- Only supported on Unix.</p>
+ <p>Displays the manual page for the Erlang module
+ <c><![CDATA[Module]]></c>. Only supported on Unix.</p>
</item>
<tag><c><![CDATA[-mode interactive | embedded]]></c></tag>
<item>
- <p>Indicates if the system should load code dynamically
- (<c><![CDATA[interactive]]></c>), or if all code should be loaded
- during system initialization (<c><![CDATA[embedded]]></c>), see
- <seealso marker="kernel:code">code(3)</seealso>. Defaults to
- <c><![CDATA[interactive]]></c>.</p>
+ <p>Indicates if the system is to load code dynamically
+ (<c><![CDATA[interactive]]></c>), or if all code is to be loaded
+ during system initialization (<c><![CDATA[embedded]]></c>); see
+ <seealso marker="kernel:code"><c>code(3)</c></seealso>.
+ Defaults to <c><![CDATA[interactive]]></c>.</p>
</item>
<tag><c><![CDATA[-name Name]]></c></tag>
<item>
<p>Makes the Erlang runtime system into a distributed node.
This flag invokes all network servers necessary for a node to
- become distributed. See
- <seealso marker="kernel:net_kernel">net_kernel(3)</seealso>.
- It is also ensured that <c><![CDATA[epmd]]></c> runs on the current host
- before Erlang is started. See
- <seealso marker="epmd">epmd(1)</seealso>.</p>
- <p>The name of the node will be <c><![CDATA[Name@Host]]></c>, where
- <c><![CDATA[Host]]></c> is the fully qualified host name of the current
- host. For short names, use the <c><![CDATA[-sname]]></c> flag instead.</p>
+ become distributed; see <seealso marker="kernel:net_kernel">
+ <c>net_kernel(3)</c></seealso>. It is also ensured that
+ <c><![CDATA[epmd]]></c> runs on the current host before Erlang is
+ started; see <seealso marker="epmd"><c>epmd(1)</c></seealso>.and the
+ <seealso marker="#start_epmd"><c>-start_epmd</c></seealso> option.</p>
+ <p>The node name will be <c><![CDATA[Name@Host]]></c>, where
+ <c><![CDATA[Host]]></c> is the fully qualified host name of the
+ current host. For short names, use flag <c><![CDATA[-sname]]></c>
+ instead.</p>
</item>
<tag><c><![CDATA[-noinput]]></c></tag>
<item>
@@ -352,132 +377,145 @@
<item>
<p>Starts an Erlang runtime system with no shell. This flag
makes it possible to have the Erlang runtime system as a
- component in a series of UNIX pipes.</p>
+ component in a series of Unix pipes.</p>
</item>
<tag><c><![CDATA[-nostick]]></c></tag>
<item>
<p>Disables the sticky directory facility of the Erlang code
- server, see
- <seealso marker="kernel:code">code(3)</seealso>.</p>
+ server; see
+ <seealso marker="kernel:code"><c>code(3)</c></seealso>.</p>
</item>
<tag><c><![CDATA[-oldshell]]></c></tag>
<item>
- <p>Invokes the old Erlang shell from Erlang 3.3. The old shell
+ <p>Invokes the old Erlang shell from Erlang/OTP 3.3. The old shell
can still be used.</p>
</item>
<tag><c><![CDATA[-pa Dir1 Dir2 ...]]></c></tag>
<item>
<p>Adds the specified directories to the beginning of the code
- path, similar to <c><![CDATA[code:add_pathsa/1]]></c>. See
- <seealso marker="kernel:code">code(3)</seealso>.
+ path, similar to <c><![CDATA[code:add_pathsa/1]]></c>; see
+ <seealso marker="kernel:code"><c>code(3)</c></seealso>.
As an alternative to <c>-pa</c>, if several directories are
to be prepended to the code path and the directories have a
- common parent directory, that parent directory could be
- specified in the <c>ERL_LIBS</c> environment variable.
- See <seealso marker="kernel:code">code(3)</seealso>.</p>
+ common parent directory, that parent directory can be
+ specified in environment variable <c>ERL_LIBS</c>; see
+ <seealso marker="kernel:code"><c>code(3)</c></seealso>.</p>
</item>
<tag><c><![CDATA[-pz Dir1 Dir2 ...]]></c></tag>
<item>
<p>Adds the specified directories to the end of the code path,
- similar to <c><![CDATA[code:add_pathsz/1]]></c>. See
- <seealso marker="kernel:code">code(3)</seealso>.</p>
+ similar to <c><![CDATA[code:add_pathsz/1]]></c>; see
+ <seealso marker="kernel:code"><c>code(3)</c></seealso>.</p>
</item>
<tag><c><![CDATA[-path Dir1 Dir2 ...]]></c></tag>
<item>
- <p>Replaces the path specified in the boot script. See
- <seealso marker="sasl:script">script(4)</seealso>.</p>
+ <p>Replaces the path specified in the boot script; see
+ <seealso marker="sasl:script"><c>script(4)</c></seealso>.</p>
</item>
<tag><c><![CDATA[-proto_dist Proto]]></c></tag>
<item>
- <p>Specify a protocol for Erlang distribution.</p>
- <taglist>
- <tag><c>inet_tcp</c></tag>
- <item>
- <p>TCP over IPv4 (the default)</p>
- </item>
- <tag><c>inet_tls</c></tag>
- <item>
- <p>distribution over TLS/SSL</p>
- </item>
- <tag><c>inet6_tcp</c></tag>
- <item>
- <p>TCP over IPv6</p>
- </item>
+ <p>Specifies a protocol for Erlang distribution:</p>
+ <taglist>
+ <tag><c>inet_tcp</c></tag>
+ <item>TCP over IPv4 (the default)</item>
+ <tag><c>inet_tls</c></tag>
+ <item>Distribution over TLS/SSL</item>
+ <tag><c>inet6_tcp</c></tag>
+ <item>TCP over IPv6</item>
</taglist>
<p>For example, to start up IPv6 distributed nodes:</p>
<pre>
-% <input>erl -name [email protected] -proto_dist inet6_tcp</input>
-</pre>
+% <input>erl -name [email protected] -proto_dist inet6_tcp</input></pre>
</item>
<tag><c><![CDATA[-remsh Node]]></c></tag>
<item>
- <p>Starts Erlang with a remote shell connected to <c><![CDATA[Node]]></c>.</p>
+ <p>Starts Erlang with a remote shell connected to
+ <c><![CDATA[Node]]></c>.</p>
</item>
<tag><c><![CDATA[-rsh Program]]></c></tag>
<item>
- <p>Specifies an alternative to <c><![CDATA[rsh]]></c> for starting a slave
- node on a remote host. See
- <seealso marker="stdlib:slave">slave(3)</seealso>.</p>
+ <p>Specifies an alternative to <c><![CDATA[rsh]]></c> for starting a
+ slave node on a remote host; see
+ <seealso marker="stdlib:slave"><c>slave(3)</c></seealso>.</p>
</item>
- <tag><c><![CDATA[-run Mod [Func [Arg1, Arg2, ...]]]]></c>(init flag)</tag>
+ <tag><c><![CDATA[-run Mod [Func [Arg1, Arg2, ...]]]]></c> (init
+ flag)</tag>
<item>
- <p>Makes <c><![CDATA[init]]></c> call the specified function. <c><![CDATA[Func]]></c>
- defaults to <c><![CDATA[start]]></c>. If no arguments are provided,
- the function is assumed to be of arity 0. Otherwise it is
- assumed to be of arity 1, taking the list
- <c><![CDATA[[Arg1,Arg2,...]]]></c> as argument. All arguments are passed
- as strings. See
- <seealso marker="init">init(3)</seealso>.</p>
+ <p>Makes <c><![CDATA[init]]></c> call the specified function.
+ <c><![CDATA[Func]]></c> defaults to <c><![CDATA[start]]></c>.
+ If no arguments are provided, the function is assumed to be of
+ arity 0. Otherwise it is assumed to be of arity 1, taking the list
+ <c><![CDATA[[Arg1,Arg2,...]]]></c> as argument. All arguments are
+ passed as strings. See <seealso marker="init">
+ <c>init(3)</c></seealso>.</p>
</item>
- <tag><c><![CDATA[-s Mod [Func [Arg1, Arg2, ...]]]]></c>(init flag)</tag>
+ <tag><c><![CDATA[-s Mod [Func [Arg1, Arg2, ...]]]]></c> (init flag)</tag>
<item>
- <p>Makes <c><![CDATA[init]]></c> call the specified function. <c><![CDATA[Func]]></c>
- defaults to <c><![CDATA[start]]></c>. If no arguments are provided,
- the function is assumed to be of arity 0. Otherwise it is
- assumed to be of arity 1, taking the list
- <c><![CDATA[[Arg1,Arg2,...]]]></c> as argument. All arguments are passed
- as atoms. See
- <seealso marker="init">init(3)</seealso>.</p>
+ <p>Makes <c><![CDATA[init]]></c> call the specified function.
+ <c><![CDATA[Func]]></c> defaults to <c><![CDATA[start]]></c>.
+ If no arguments are provided, the function is assumed to be of
+ arity 0. Otherwise it is assumed to be of arity 1, taking the list
+ <c><![CDATA[[Arg1,Arg2,...]]]></c> as argument. All arguments are
+ passed as atoms. See <seealso marker="init">
+ <c>init(3)</c></seealso>.</p>
</item>
<tag><c><![CDATA[-setcookie Cookie]]></c></tag>
<item>
- <p>Sets the magic cookie of the node to <c><![CDATA[Cookie]]></c>, see
- <seealso marker="erlang#set_cookie/2">erlang:set_cookie/2</seealso>.</p>
+ <p>Sets the magic cookie of the node to <c><![CDATA[Cookie]]></c>; see
+ <seealso marker="erlang#set_cookie/2">
+ <c>erlang:set_cookie/2</c></seealso>.</p>
</item>
<tag><c><![CDATA[-shutdown_time Time]]></c></tag>
<item>
<p>Specifies how long time (in milliseconds) the <c><![CDATA[init]]></c>
process is allowed to spend shutting down the system. If
- <c><![CDATA[Time]]></c> ms have elapsed, all processes still existing are
- killed. Defaults to <c><![CDATA[infinity]]></c>.</p>
+ <c><![CDATA[Time]]></c> milliseconds have elapsed, all processes still
+ existing are killed. Defaults to <c><![CDATA[infinity]]></c>.</p>
</item>
<tag><c><![CDATA[-sname Name]]></c></tag>
<item>
- <p>Makes the Erlang runtime system into a distributed node,
- similar to <c><![CDATA[-name]]></c>, but the host name portion of the node
+ <p>Makes the Erlang runtime system into a distributed node, similar to
+ <c><![CDATA[-name]]></c>, but the host name portion of the node
name <c><![CDATA[Name@Host]]></c> will be the short name, not fully
qualified.</p>
<p>This is sometimes the only way to run distributed Erlang if
- the DNS (Domain Name System) is not running. There can be no
- communication between nodes running with the <c><![CDATA[-sname]]></c>
- flag and those running with the <c><![CDATA[-name]]></c> flag, as node
+ the Domain Name System (DNS) is not running. No communication can
+ exist between nodes running with flag <c><![CDATA[-sname]]></c>
+ and those running with flag <c><![CDATA[-name]]></c>, as node
names must be unique in distributed Erlang systems.</p>
</item>
+ <tag><marker id="start_epmd"/><c>-start_epmd true | false</c></tag>
+ <item>
+
+ <p>Specifies whether Erlang should start
+ <seealso marker="epmd">epmd</seealso> on startup. By default
+ this is <c>true</c>, but if you prefer to start epmd
+ manually, set this to <c>false</c>.</p>
+
+ <p>This only applies if Erlang is started as a distributed node,
+ i.e. if <c>-name</c> or <c>-sname</c> is specified. Otherwise,
+ epmd is not started even if <c>-start_epmd true</c> is given.</p>
+
+ <p>Note that a distributed node will fail to start if epmd is
+ not running.</p>
+ </item>
<tag><marker id="smp"/><c><![CDATA[-smp [enable|auto|disable]]]></c></tag>
<item>
- <p><c>-smp enable</c> and <c>-smp</c> starts the Erlang runtime
- system with SMP support enabled. This may fail if no runtime
+ <p><c>-smp enable</c> and <c>-smp</c> start the Erlang runtime
+ system with SMP support enabled. This can fail if no runtime
system with SMP support is available. <c>-smp auto</c> starts
the Erlang runtime system with SMP support enabled if it is
- available and more than one logical processor are detected.
+ available and more than one logical processor is detected.
<c>-smp disable</c> starts a runtime system without SMP support.</p>
- <p><em>NOTE</em>: The runtime system with SMP support will not
- be available on all supported platforms. See also the
- <seealso marker="#+S">+S</seealso> flag.</p>
+ <note>
+ <p>The runtime system with SMP support is not available on all
+ supported platforms. See also flag
+ <seealso marker="#+S"><c>+S</c></seealso>.</p>
+ </note>
</item>
- <tag><c><![CDATA[-version]]></c>(emulator flag)</tag>
+ <tag><c><![CDATA[-version]]></c> (emulator flag)</tag>
<item>
- <p>Makes the emulator print out its version number. The same
+ <p>Makes the emulator print its version number. The same
as <c><![CDATA[erl +V]]></c>.</p>
</item>
</taglist>
@@ -489,133 +527,169 @@
<p><c><![CDATA[erl]]></c> invokes the code for the Erlang emulator (virtual
machine), which supports the following flags:</p>
<taglist>
- <tag><marker id="async_thread_stack_size"/><c><![CDATA[+a size]]></c></tag>
+ <tag><marker id="async_thread_stack_size"/>
+ <c><![CDATA[+a size]]></c></tag>
<item>
<p>Suggested stack size, in kilowords, for threads in the
- async-thread pool. Valid range is 16-8192 kilowords. The
- default suggested stack size is 16 kilowords, i.e, 64
+ async thread pool. Valid range is 16-8192 kilowords. The
+ default suggested stack size is 16 kilowords, that is, 64
kilobyte on 32-bit architectures. This small default size
- has been chosen since the amount of async-threads might
- be quite large. The default size is enough for drivers
- delivered with Erlang/OTP, but might not be sufficiently
- large for other dynamically linked in drivers that use the
- <seealso marker="erl_driver#driver_async">driver_async()</seealso>
- functionality. Note that the value passed is only a
- suggestion, and it might even be ignored on some
- platforms.</p>
+ has been chosen because the number of async threads can
+ be large. The default size is enough for drivers
+ delivered with Erlang/OTP, but might not be large
+ enough for other dynamically linked-in drivers that use the
+ <seealso marker="erl_driver#driver_async">
+ <c>driver_async()</c></seealso> functionality.
+ Notice that the value passed is only a suggestion,
+ and it can even be ignored on some platforms.</p>
</item>
<tag><marker id="async_thread_pool_size"/><c><![CDATA[+A size]]></c></tag>
<item>
- <p>Sets the number of threads in async thread pool, valid range
- is 0-1024. If thread support is available, the default is 10.</p>
+ <p>Sets the number of threads in async thread pool. Valid range
+ is 0-1024. Defaults to 10 if thread support is available.</p>
</item>
<tag><c><![CDATA[+B [c | d | i]]]></c></tag>
<item>
- <p>The <c><![CDATA[c]]></c> option makes <c><![CDATA[Ctrl-C]]></c> interrupt the current
- shell instead of invoking the emulator break handler.
- The <c><![CDATA[d]]></c> option (same as specifying <c><![CDATA[+B]]></c> without an
- extra option) disables the break handler. The <c><![CDATA[i]]></c> option
- makes the emulator ignore any break signal.</p>
- <p>If the <c><![CDATA[c]]></c> option is used with <c><![CDATA[oldshell]]></c> on Unix,
- <c><![CDATA[Ctrl-C]]></c> will restart the shell process rather than
- interrupt it.</p>
- <p>Note that on Windows, this flag is only applicable for
- <c><![CDATA[werl]]></c>, not <c><![CDATA[erl]]></c> (<c><![CDATA[oldshell]]></c>). Note also that
- <c><![CDATA[Ctrl-Break]]></c> is used instead of <c><![CDATA[Ctrl-C]]></c> on Windows.</p>
+ <p>Option <c><![CDATA[c]]></c> makes <c><![CDATA[Ctrl-C]]></c>
+ interrupt the current shell instead of invoking the emulator break
+ handler. Option <c><![CDATA[d]]></c> (same as specifying
+ <c><![CDATA[+B]]></c> without an extra option) disables the break
+ handler. Option <c><![CDATA[i]]></c> makes the emulator ignore any
+ break signal.</p>
+ <p>If option <c><![CDATA[c]]></c> is used with
+ <c><![CDATA[oldshell]]></c> on Unix, <c><![CDATA[Ctrl-C]]></c> will
+ restart the shell process rather than interrupt it.</p>
+ <p>Notice that on Windows, this flag is only applicable for
+ <c><![CDATA[werl]]></c>, not <c><![CDATA[erl]]></c>
+ (<c><![CDATA[oldshell]]></c>). Notice also that
+ <c><![CDATA[Ctrl-Break]]></c> is used instead of
+ <c><![CDATA[Ctrl-C]]></c> on Windows.</p>
</item>
<tag><marker id="+c"/><c><![CDATA[+c true | false]]></c></tag>
<item>
- <p>Enable or disable
- <seealso marker="time_correction#Time_Correction">time correction</seealso>:</p>
+ <p>Enables or disables
+ <seealso marker="time_correction#Time_Correction">time
+ correction</seealso>:</p>
<taglist>
<tag><c>true</c></tag>
- <item><p>Enable time correction. This is the default if
- time correction is supported on the specific platform.</p></item>
-
- <tag><c>false</c></tag>
- <item><p>Disable time correction.</p></item>
- </taglist>
- <p>For backwards compatibility, the boolean value can be omitted.
- This is interpreted as <c>+c false</c>.
- </p>
- </item>
- <tag><marker id="+C_"/><c><![CDATA[+C no_time_warp | single_time_warp | multi_time_warp]]></c></tag>
- <item>
- <p>Set
- <seealso marker="time_correction#Time_Warp_Modes">time warp mode</seealso>:
- </p>
- <taglist>
- <tag><c>no_time_warp</c></tag>
- <item><p><seealso marker="time_correction#No_Time_Warp_Mode">No Time Warp Mode</seealso> (the default)</p></item>
- <tag><c>single_time_warp</c></tag>
- <item><p><seealso marker="time_correction#Single_Time_Warp_Mode">Single Time Warp Mode</seealso></p></item>
- <tag><c>multi_time_warp</c></tag>
- <item><p><seealso marker="time_correction#Multi_Time_Warp_Mode">Multi Time Warp Mode</seealso></p></item>
- </taglist>
+ <item>Enables time correction. This is the default if
+ time correction is supported on the specific platform.</item>
+ <tag><c>false</c></tag>
+ <item>Disables time correction.</item>
+ </taglist>
+ <p>For backward compatibility, the boolean value can be omitted.
+ This is interpreted as <c>+c false</c>.</p>
+ </item>
+ <tag><marker id="+C_"/><c><![CDATA[+C no_time_warp | single_time_warp |
+ multi_time_warp]]></c></tag>
+ <item>
+ <p>Sets <seealso marker="time_correction#Time_Warp_Modes">time warp
+ mode</seealso>:</p>
+ <taglist>
+ <tag><c>no_time_warp</c></tag>
+ <item><seealso marker="time_correction#No_Time_Warp_Mode">
+ No time warp mode</seealso> (the default)</item>
+ <tag><c>single_time_warp</c></tag>
+ <item><seealso marker="time_correction#Single_Time_Warp_Mode">
+ Single time warp mode</seealso></item>
+ <tag><c>multi_time_warp</c></tag>
+ <item><seealso marker="time_correction#Multi_Time_Warp_Mode">
+ Multi-time warp mode</seealso></item>
+ </taglist>
</item>
<tag><c><![CDATA[+d]]></c></tag>
<item>
<p>If the emulator detects an internal error (or runs out of memory),
- it will by default generate both a crash dump and a core dump.
- The core dump will, however, not be very useful since the content
- of process heaps is destroyed by the crash dump generation.</p>
-
- <p>The <c>+d</c> option instructs the emulator to only produce a
- core dump and no crash dump if an internal error is detected.</p>
-
- <p>Calling <c>erlang:halt/1</c> with a string argument will still
- produce a crash dump. On Unix systems, sending an emulator process
- a SIGUSR1 signal will also force a crash dump.</p>
+ it, by default, generates both a crash dump and a core dump.
+ The core dump is, however, not very useful as the content
+ of process heaps is destroyed by the crash dump generation.</p>
+ <p>Option <c>+d</c> instructs the emulator to produce only a
+ core dump and no crash dump if an internal error is detected.</p>
+ <p>Calling <seealso marker="erlang:halt/1">
+ <c>erlang:halt/1</c></seealso> with a string argument still
+ produces a crash dump. On Unix systems, sending an emulator process
+ a <c>SIGUSR1</c> signal also forces a crash dump.</p>
</item>
<tag><marker id="+e"/><c><![CDATA[+e Number]]></c></tag>
<item>
- <p>Set max number of ETS tables.</p>
+ <p>Sets the maximum number of ETS tables.</p>
</item>
<tag><c><![CDATA[+ec]]></c></tag>
<item>
- <p>Force the <c>compressed</c> option on all ETS tables.
- Only intended for test and evaluation.</p>
+ <p>Forces option <c>compressed</c> on all ETS tables.
+ Only intended for test and evaluation.</p>
</item>
- <tag><marker id="file_name_encoding"></marker><c><![CDATA[+fnl]]></c></tag>
+ <tag><marker id="file_name_encoding"></marker>
+ <c><![CDATA[+fnl]]></c></tag>
<item>
- <p>The VM works with file names as if they are encoded using the ISO-latin-1 encoding, disallowing Unicode characters with codepoints beyond 255.</p>
- <p>See <seealso marker="stdlib:unicode_usage#unicode_file_names">STDLIB User's Guide</seealso> for more infomation about unicode file names. Note that this value also applies to command-line parameters and environment variables (see <seealso marker="stdlib:unicode_usage#unicode_in_environment_and_parameters">STDLIB User's Guide</seealso>).</p>
+ <p>The virtual machine works with filenames as if they are encoded
+ using the ISO Latin-1 encoding, disallowing Unicode characters with
+ code points &gt; 255.</p>
+ <p>For more information about Unicode filenames, see section
+ <seealso marker="stdlib:unicode_usage#unicode_file_names">Unicode
+ Filenames</seealso> in the STDLIB User's Guide. Notice that
+ this value also applies to command-line parameters and environment
+ variables (see section <seealso
+ marker="stdlib:unicode_usage#unicode_in_environment_and_parameters">
+ Unicode in Enviroment and Parameters</seealso> in the STDLIB
+ User's Guide).</p>
</item>
<tag><c><![CDATA[+fnu[{w|i|e}]]]></c></tag>
<item>
- <p>The VM works with file names as if they are encoded using
- UTF-8 (or some other system specific Unicode encoding). This
- is the default on operating systems that enforce Unicode
- encoding, i.e. Windows and MacOS X.</p>
- <p>The <c>+fnu</c> switch can be followed by <c>w</c>,
- <c>i</c>, or <c>e</c> to control the way wrongly encoded file
- names are to be reported. <c>w</c> means that a warning is
- sent to the <c>error_logger</c> whenever a wrongly encoded
- file name is "skipped" in directory listings, <c>i</c> means
- that those wrongly encoded file names are silently ignored and
- <c>e</c> means that the API function will return an error
- whenever a wrongly encoded file (or directory) name is
- encountered. <c>w</c> is the default. Note that
- <c>file:read_link/1</c> will always return an error if the
- link points to an invalid file name.</p>
- <p>See <seealso marker="stdlib:unicode_usage#unicode_file_names">STDLIB User's Guide</seealso> for more infomation about unicode file names. Note that this value also applies to command-line parameters and environment variables (see <seealso marker="stdlib:unicode_usage#unicode_in_environment_and_parameters">STDLIB User's Guide</seealso>).</p>
+ <p>The virtual machine works with filenames as if they are encoded
+ using UTF-8 (or some other system-specific Unicode encoding). This is
+ the default on operating systems that enforce Unicode encoding, that
+ is, Windows and MacOS X.</p>
+ <p>The <c>+fnu</c> switch can be followed by <c>w</c>, <c>i</c>, or
+ <c>e</c> to control how wrongly encoded filenames are to be
+ reported:</p>
+ <list type="bulleted">
+ <item>
+ <p><c>w</c> means that a warning is sent to the <c>error_logger</c>
+ whenever a wrongly encoded filename is "skipped" in directory
+ listings. This is the default.</p>
+ </item>
+ <item>
+ <p><c>i</c> means that those wrongly encoded filenames are silently
+ ignored.</p>
+ </item>
+ <item>
+ <p><c>e</c> means that the API function returns an error whenever a
+ wrongly encoded filename (or directory name) is encountered.</p>
+ </item>
+ </list>
+ <p>Notice that <seealso marker="kernel:file#read_link/1">
+ <c>file:read_link/1</c></seealso> always returns an error if the link
+ points to an invalid filename.</p>
+ <p>For more information about Unicode filenames, see section
+ <seealso marker="stdlib:unicode_usage#unicode_file_names">Unicode
+ Filenames</seealso> in the STDLIB User's Guide. Notice that
+ this value also applies to command-line parameters and environment
+ variables (see section <seealso
+ marker="stdlib:unicode_usage#unicode_in_environment_and_parameters">
+ Unicode in Enviroment and Parameters</seealso> in the STDLIB
+ User's Guide).</p>
</item>
<tag><c><![CDATA[+fna[{w|i|e}]]]></c></tag>
<item>
<p>Selection between <c>+fnl</c> and <c>+fnu</c> is done based
- on the current locale settings in the OS, meaning that if you
- have set your terminal for UTF-8 encoding, the filesystem is
- expected to use the same encoding for file names. This is
- default on all operating systems except MacOS X and
- Windows.</p>
- <p>The <c>+fna</c> switch can be followed by <c>w</c>,
- <c>i</c>, or <c>e</c>. This will have effect if the locale
- settings cause the behavior of <c>+fnu</c> to be selected.
- See the description of <c>+fnu</c> above. If the locale
- settings cause the behavior of <c>+fnl</c> to be selected,
- then <c>w</c>, <c>i</c>, or <c>e</c> will not have any
- effect.</p>
- <p>See <seealso marker="stdlib:unicode_usage#unicode_file_names">STDLIB User's Guide</seealso> for more infomation about unicode file names. Note that this value also applies to command-line parameters and environment variables (see <seealso marker="stdlib:unicode_usage#unicode_in_environment_and_parameters">STDLIB User's Guide</seealso>).</p>
+ on the current locale settings in the OS. This means that if you
+ have set your terminal for UTF-8 encoding, the filesystem is
+ expected to use the same encoding for filenames. This is
+ default on all operating systems, except MacOS X and Windows.</p>
+ <p>The <c>+fna</c> switch can be followed by <c>w</c>, <c>i</c>, or
+ <c>e</c>. This has effect if the locale settings cause the behavior
+ of <c>+fnu</c> to be selected; see the description of <c>+fnu</c>
+ above. If the locale settings cause the behavior of <c>+fnl</c> to be
+ selected, then <c>w</c>, <c>i</c>, or <c>e</c> have no effect.</p>
+ <p>For more information about Unicode filenames, see section
+ <seealso marker="stdlib:unicode_usage#unicode_file_names">Unicode
+ Filenames</seealso> in the STDLIB User's Guide. Notice that
+ this value also applies to command-line parameters and environment
+ variables (see section <seealso
+ marker="stdlib:unicode_usage#unicode_in_environment_and_parameters">
+ Unicode in Enviroment and Parameters</seealso> in the STDLIB
+ User's Guide).</p>
</item>
<tag><c><![CDATA[+hms Size]]></c></tag>
<item>
@@ -627,32 +701,27 @@
<p>Sets the default binary virtual heap size of processes to the size
<c><![CDATA[Size]]></c>.</p>
</item>
- <marker id="+hmax"/>
- <tag><c><![CDATA[+hmax Size]]></c></tag>
+ <tag><marker id="+hmax"/><c><![CDATA[+hmax Size]]></c></tag>
<item>
<p>Sets the default maximum heap size of processes to the size
- <c><![CDATA[Size]]></c>. If <c>+hmax</c> is not given, the default is <c>0</c>
- which means that no maximum heap size is used.
- For more information, see the documentation of
+ <c><![CDATA[Size]]></c>. Defaults to <c>0</c>, which means that no
+ maximum heap size is used. For more information, see
<seealso marker="erlang#process_flag_max_heap_size">
- <c>process_flag(max_heap_size, MaxHeapSize)</c></seealso>.</p>
+ <c>process_flag(max_heap_size, MaxHeapSize)</c></seealso>.</p>
</item>
- <marker id="+hmaxel"/>
- <tag><c><![CDATA[+hmaxel true|false]]></c></tag>
+ <tag><marker id="+hmaxel"/><c><![CDATA[+hmaxel true|false]]></c></tag>
<item>
- <p>Sets whether to send an error logger message for processes that reach
- the maximum heap size or not. If <c>+hmaxel</c> is not given, the default is <c>true</c>.
- For more information, see the documentation of
- <seealso marker="erlang#process_flag_max_heap_size">
+ <p>Sets whether to send an error logger message or not for processes
+ reaching the maximum heap size. Defaults to <c>true</c>.
+ For more information, see
+ <seealso marker="erlang#process_flag_max_heap_size">
<c>process_flag(max_heap_size, MaxHeapSize)</c></seealso>.</p>
</item>
- <marker id="+hmaxk"/>
- <tag><c><![CDATA[+hmaxk true|false]]></c></tag>
+ <tag><marker id="+hmaxk"/><c><![CDATA[+hmaxk true|false]]></c></tag>
<item>
- <p>Sets whether to kill processes that reach the maximum heap size or not. If
- <c>+hmaxk</c> is not given, the default is <c>true</c>. For more information,
- see the documentation of
- <seealso marker="erlang#process_flag_max_heap_size">
+ <p>Sets whether to kill processes reaching the maximum heap size or not.
+ Default to <c>true</c>. For more information, see
+ <seealso marker="erlang#process_flag_max_heap_size">
<c>process_flag(max_heap_size, MaxHeapSize)</c></seealso>.</p>
</item>
<tag><c><![CDATA[+hpds Size]]></c></tag>
@@ -660,96 +729,63 @@
<p>Sets the initial process dictionary size of processes to the size
<c><![CDATA[Size]]></c>.</p>
</item>
- <tag><marker id="+hmqd"><c>+hmqd off_heap|on_heap|mixed</c></marker></tag>
- <item><p>
- Sets the default value for the process flag
- <c>message_queue_data</c>. If <c>+hmqd</c> is not
- passed, <c>mixed</c> will be the default. For more information,
- see the documentation of
- <seealso marker="erlang#process_flag_message_queue_data"><c>process_flag(message_queue_data,
- MQD)</c></seealso>.
- </p></item>
+ <tag><marker id="+hmqd"/><c>+hmqd off_heap|on_heap</c></tag>
+ <item>
+ <p>Sets the default value for process flag <c>message_queue_data</c>.
+ Defaults to <c>on_heap</c>. If <c>+hmqd</c> is not
+ passed, <c>on_heap</c> will be the default. For more information, see
+ <seealso marker="erlang#process_flag_message_queue_data">
+ <c>process_flag(message_queue_data, MQD)</c></seealso>.</p>
+ </item>
<tag><c><![CDATA[+K true | false]]></c></tag>
<item>
- <p>Enables or disables the kernel poll functionality if
- the emulator supports it. Default is <c><![CDATA[false]]></c> (disabled).
- If the emulator does not support kernel poll, and
- the <c><![CDATA[+K]]></c> flag is passed to the emulator, a warning is
+ <p>Enables or disables the kernel poll functionality if supported by
+ the emulator. Defaults to <c><![CDATA[false]]></c> (disabled).
+ If the emulator does not support kernel poll, and flag
+ <c><![CDATA[+K]]></c> is passed to the emulator, a warning is
issued at startup.</p>
</item>
<tag><c><![CDATA[+l]]></c></tag>
<item>
- <p>Enables auto load tracing, displaying info while loading
+ <p>Enables autoload tracing, displaying information while loading
code.</p>
</item>
<tag><c><![CDATA[+L]]></c></tag>
<item>
- <p>Don't load information about source file names and line numbers.
- This will save some memory, but exceptions will not contain
- information about the file names and line numbers.
- </p>
+ <p>Prevents loading information about source filenames and line
+ numbers. This saves some memory, but exceptions do not contain
+ information about the filenames and line numbers.</p>
</item>
<tag><marker id="erts_alloc"/><c><![CDATA[+MFlag Value]]></c></tag>
<item>
- <p>Memory allocator specific flags, see
- <seealso marker="erts_alloc">erts_alloc(3)</seealso> for
- further information.</p>
- </item>
- <tag><marker id="+n"/><c><![CDATA[+n Behavior]]></c></tag>
- <item>
- <p>Control behavior of signals to ports.</p>
- <p>As of OTP-R16 signals to ports are truly asynchronously
- delivered. Note that signals always have been documented as
- asynchronous. The underlying implementation has, however,
- previously delivered these signals synchronously. Correctly
- written Erlang programs should be able to handle this without
- any issues. Bugs in existing Erlang programs that make false
- assumptions about signals to ports may, however, be tricky to
- find. This switch has been introduced in order to at least
- make it easier to compare behaviors during a transition period.
- Note that <em>this flag is deprecated</em> as of its
- introduction, and is scheduled for removal in OTP-R17.
- <c>Behavior</c> should be one of the following characters:</p>
- <taglist>
- <tag><c>d</c></tag>
- <item>The default. Asynchronous signals. A process that sends
- a signal to a port may continue execution before the signal
- has been delivered to the port.</item>
- <tag><c>s</c></tag>
- <item>Synchronous signals. A processes that sends a signal
- to a port will not continue execution until the signal has
- been delivered. Should <em>only</em> be used for testing and
- debugging.</item>
- <tag><c>a</c></tag>
- <item>Asynchronous signals. As the default, but a processes
- that sends a signal will even more frequently continue
- execution before the signal has been delivered to the
- port. Should <em>only</em> be used for testing and
- debugging.</item>
- </taglist>
- </item>
- <tag><marker id="+pc"/><marker id="printable_character_range"/><c><![CDATA[+pc Range]]></c></tag>
- <item>
- <p>Sets the range of characters that the system will consider printable in heuristic detection of strings. This typically affects the shell, debugger and io:format functions (when ~tp is used in the format string).</p>
- <p>Currently two values for the <c>Range</c> are supported:</p>
- <taglist>
- <tag><c>latin1</c></tag> <item>The default. Only characters
- in the ISO-latin-1 range can be considered printable, which means
- that a character with a code point &gt; 255 will never be
- considered printable and that lists containing such
- characters will be displayed as lists of integers rather
- than text strings by tools.</item>
- <tag><c>unicode</c></tag>
- <item>All printable Unicode characters are considered when
- determining if a list of integers is to be displayed in
- string syntax. This may give unexpected results if for
- example your font does not cover all Unicode
- characters.</item>
- </taglist>
- <p>Se also <seealso marker="stdlib:io#printable_range/0">
- io:printable_range/0</seealso>.</p>
- </item>
- <tag><marker id="+P"/><marker id="max_processes"/><c><![CDATA[+P Number|legacy]]></c></tag>
+ <p>Memory allocator-specific flags. For more information, see
+ <seealso marker="erts_alloc"><c>erts_alloc(3)</c></seealso>.</p>
+ </item>
+ <tag><marker id="+pc"/><marker id="printable_character_range"/>
+ <c><![CDATA[+pc Range]]></c></tag>
+ <item>
+ <p>Sets the range of characters that the system considers printable in
+ heuristic detection of strings. This typically affects the shell,
+ debugger, and <c>io:format</c> functions (when <c>~tp</c> is used in
+ the format string).</p>
+ <p>Two values are supported for <c>Range</c>:</p>
+ <taglist>
+ <tag><c>latin1</c></tag>
+ <item>The default. Only characters in the ISO Latin-1 range can be
+ considered printable. This means that a character with a code point
+ &gt; 255 is never considered printable and that lists containing
+ such characters are displayed as lists of integers rather than text
+ strings by tools.</item>
+ <tag><c>unicode</c></tag>
+ <item>All printable Unicode characters are considered when
+ determining if a list of integers is to be displayed in
+ string syntax. This can give unexpected results if, for
+ example, your font does not cover all Unicode characters.</item>
+ </taglist>
+ <p>See also <seealso marker="stdlib:io#printable_range/0">
+ <c>io:printable_range/0</c></seealso> in STDLIB.</p>
+ </item>
+ <tag><marker id="+P"/><marker id="max_processes"/><c><![CDATA[+P Number]]></c></tag>
<item>
<p>Sets the maximum number of simultaneously existing processes for this
system if a <c>Number</c> is passed as value. Valid range for
@@ -761,15 +797,8 @@
checked by calling
<seealso marker="erlang#system_info_process_limit">erlang:system_info(process_limit)</seealso>.</p>
<p>The default value is <c>262144</c></p>
- <p>If <c>legacy</c> is passed as value, the legacy algorithm for
- allocation of process identifiers will be used. Using the legacy
- algorithm, identifiers will be allocated in a strictly increasing
- fashion until largest possible identifier has been reached. Note that
- this algorithm suffers from performance issues and can under certain
- circumstances be extremely expensive. The legacy algoritm is deprecated,
- and the <c>legacy</c> option is scheduled for removal in OTP-R18.</p>
</item>
- <tag><marker id="+Q"/><marker id="max_ports"/><c><![CDATA[+Q Number|legacy]]></c></tag>
+ <tag><marker id="+Q"/><marker id="max_ports"/><c><![CDATA[+Q Number]]></c></tag>
<item>
<p>Sets the maximum number of simultaneously existing ports for this
system if a Number is passed as value. Valid range for <c>Number</c>
@@ -786,164 +815,179 @@
than <c>65536</c>, the chosen value will increased to a value
larger or equal to the maximum amount of file descriptors that
can be opened.</p>
- <p>On Windows the default value is set to <c>8196</c> because the
+ <p>On Windows the default value is set to <c>8196</c> because the
normal OS limitations are set higher than most machines can handle.</p>
- <p>Previously the environment variable <c>ERL_MAX_PORTS</c> was used
- for setting the maximum number of simultaneously existing ports. This
- environment variable is deprecated, and scheduled for removal in
- OTP-R17, but can still be used.</p>
- <p>If <c>legacy</c> is passed as value, the legacy algorithm for
- allocation of port identifiers will be used. Using the legacy
- algorithm, identifiers will be allocated in a strictly increasing
- fashion until largest possible identifier has been reached. Note that
- this algorithm suffers from performance issues and can under certain
- circumstances be extremely expensive. The legacy algoritm is deprecated,
- and the <c>legacy</c> option is scheduled for removal in OTP-R18.</p>
</item>
<tag><marker id="compat_rel"/><c><![CDATA[+R ReleaseNumber]]></c></tag>
<item>
<p>Sets the compatibility mode.</p>
- <p>The distribution mechanism is not backwards compatible by
- default. This flags sets the emulator in compatibility mode
+ <p>The distribution mechanism is not backward compatible by
+ default. This flag sets the emulator in compatibility mode
with an earlier Erlang/OTP release <c><![CDATA[ReleaseNumber]]></c>.
The release number must be in the range
<c><![CDATA[<current release>-2..<current release>]]></c>. This
- limits the emulator, making it possible for it to communicate
- with Erlang nodes (as well as C- and Java nodes) running that
- earlier release.</p>
- <p>Note: Make sure all nodes (Erlang-, C-, and Java nodes) of
- a distributed Erlang system is of the same Erlang/OTP release,
- or from two different Erlang/OTP releases X and Y, where
- <em>all</em> Y nodes have compatibility mode X.</p>
+ limits the emulator, making it possible for it to communicate
+ with Erlang nodes (as well as C- and Java nodes) running that
+ earlier release.</p>
+ <note>
+ <p>Ensure that all nodes (Erlang-, C-, and Java nodes) of
+ a distributed Erlang system is of the same Erlang/OTP release,
+ or from two different Erlang/OTP releases X and Y, where
+ <em>all</em> Y nodes have compatibility mode X.</p>
+ </note>
</item>
<tag><c><![CDATA[+r]]></c></tag>
<item>
- <p>Force ets memory block to be moved on realloc.</p>
+ <p>Forces ETS memory block to be moved on realloc.</p>
</item>
<tag><marker id="+rg"/><c><![CDATA[+rg ReaderGroupsLimit]]></c></tag>
<item>
- <p>Limits the amount of reader groups used by read/write locks
- optimized for read operations in the Erlang runtime system. By
- default the reader groups limit equals 64.</p>
- <p>When the amount of schedulers is less than or equal to the reader
- groups limit, each scheduler has its own reader group. When the
- amount of schedulers is larger than the reader groups limit,
- schedulers share reader groups. Shared reader groups degrades
- read lock and read unlock performance while a large amount of
- reader groups degrades write lock performance, so the limit is a
- tradeoff between performance for read operations and performance
- for write operations. Each reader group currently consumes 64 byte
- in each read/write lock. Also note that a runtime system using
- shared reader groups benefits from <seealso marker="#+sbt">binding
- schedulers to logical processors</seealso>, since the reader groups
- are distributed better between schedulers.</p>
- </item>
- <tag><marker id="+S"/><c><![CDATA[+S Schedulers:SchedulerOnline]]></c></tag>
- <item>
- <p>Sets the number of scheduler threads to create and scheduler
- threads to set online when SMP support has been enabled. The maximum for
- both values is 1024. If the Erlang runtime system is able to determine the
- amount of logical processors configured and logical processors available,
- <c>Schedulers</c> will default to logical processors configured, and
- <c>SchedulersOnline</c> will default to logical processors available;
- otherwise, the default values will be 1. <c>Schedulers</c> may be omitted
- if <c>:SchedulerOnline</c> is not and vice versa. The number of schedulers
- online can be changed at run time via
- <seealso marker="erlang#system_flag_schedulers_online">erlang:system_flag(schedulers_online, SchedulersOnline)</seealso>.
- </p>
- <p>If <c>Schedulers</c> or <c>SchedulersOnline</c> is specified as a
- negative number, the value is subtracted from the default number of
- logical processors configured or logical processors available, respectively.
- </p>
- <p>Specifying the value 0 for <c>Schedulers</c> or <c>SchedulersOnline</c>
- resets the number of scheduler threads or scheduler threads online respectively
- to its default value.
- </p>
- <p>This option is ignored if the emulator doesn't have
- SMP support enabled (see the <seealso marker="#smp">-smp</seealso>
- flag).</p>
- </item>
- <tag><marker id="+SP"/><c><![CDATA[+SP SchedulersPercentage:SchedulersOnlinePercentage]]></c></tag>
- <item>
- <p>Similar to <seealso marker="#+S">+S</seealso> but uses percentages to set the
- number of scheduler threads to create, based on logical processors configured,
- and scheduler threads to set online, based on logical processors available, when
- SMP support has been enabled. Specified values must be greater than 0. For example,
- <c>+SP 50:25</c> sets the number of scheduler threads to 50% of the logical processors
- configured and the number of scheduler threads online to 25% of the logical processors available.
- <c>SchedulersPercentage</c> may be omitted if <c>:SchedulersOnlinePercentage</c> is
- not and vice versa. The number of schedulers online can be changed at run time via
- <seealso marker="erlang#system_flag_schedulers_online">erlang:system_flag(schedulers_online, SchedulersOnline)</seealso>.
- </p>
- <p>This option interacts with <seealso marker="#+S">+S</seealso> settings.
- For example, on a system with 8 logical cores configured and 8 logical cores
- available, the combination of the options <c>+S 4:4 +SP 50:25</c> (in either order)
- results in 2 scheduler threads (50% of 4) and 1 scheduler thread online (25% of 4).
- </p>
- <p>This option is ignored if the emulator doesn't have
- SMP support enabled (see the <seealso marker="#smp">-smp</seealso>
- flag).</p>
- </item>
- <tag><marker id="+SDcpu"/><c><![CDATA[+SDcpu DirtyCPUSchedulers:DirtyCPUSchedulersOnline]]></c></tag>
- <item>
- <p>Sets the number of dirty CPU scheduler threads to create and dirty
- CPU scheduler threads to set online when threading support has been
- enabled. The maximum for both values is 1024, and each value is further
- limited by the settings for normal schedulers: the number of dirty CPU
- scheduler threads created cannot exceed the number of normal scheduler
- threads created, and the number of dirty CPU scheduler threads online
- cannot exceed the number of normal scheduler threads online (see the
- <seealso marker="#+S">+S</seealso> and <seealso marker="#+SP">+SP</seealso>
- flags for more details). By default, the number of dirty CPU scheduler
- threads created equals the number of normal scheduler threads created,
- and the number of dirty CPU scheduler threads online equals the number
- of normal scheduler threads online. <c>DirtyCPUSchedulers</c> may be
- omitted if <c>:DirtyCPUSchedulersOnline</c> is not and vice versa. The
- number of dirty CPU schedulers online can be changed at run time via
- <seealso marker="erlang#system_flag_dirty_cpu_schedulers_online">erlang:system_flag(dirty_cpu_schedulers_online, DirtyCPUSchedulersOnline)</seealso>.
- </p>
- <p>This option is ignored if the emulator doesn't have threading support
- enabled. Currently, <em>this option is experimental</em> and is supported only
- if the emulator was configured and built with support for dirty schedulers
- enabled (it's disabled by default).
- </p>
- </item>
- <tag><marker id="+SDPcpu"/><c><![CDATA[+SDPcpu DirtyCPUSchedulersPercentage:DirtyCPUSchedulersOnlinePercentage]]></c></tag>
- <item>
- <p>Similar to <seealso marker="#+SDcpu">+SDcpu</seealso> but uses percentages to set the
- number of dirty CPU scheduler threads to create and number of dirty CPU scheduler threads
- to set online when threading support has been enabled. Specified values must be greater
- than 0. For example, <c>+SDPcpu 50:25</c> sets the number of dirty CPU scheduler threads
- to 50% of the logical processors configured and the number of dirty CPU scheduler threads
- online to 25% of the logical processors available. <c>DirtyCPUSchedulersPercentage</c> may
- be omitted if <c>:DirtyCPUSchedulersOnlinePercentage</c> is not and vice versa. The
- number of dirty CPU schedulers online can be changed at run time via
- <seealso marker="erlang#system_flag_dirty_cpu_schedulers_online">erlang:system_flag(dirty_cpu_schedulers_online, DirtyCPUSchedulersOnline)</seealso>.
- </p>
- <p>This option interacts with <seealso marker="#+SDcpu">+SDcpu</seealso> settings.
- For example, on a system with 8 logical cores configured and 8 logical cores available,
- the combination of the options <c>+SDcpu 4:4 +SDPcpu 50:25</c> (in either order) results
- in 2 dirty CPU scheduler threads (50% of 4) and 1 dirty CPU scheduler thread online (25% of 4).
- </p>
- <p>This option is ignored if the emulator doesn't have threading support
- enabled. Currently, <em>this option is experimental</em> and is supported only
- if the emulator was configured and built with support for dirty schedulers
- enabled (it's disabled by default).
- </p>
- </item>
- <tag><marker id="+SDio"/><c><![CDATA[+SDio IOSchedulers]]></c></tag>
- <item>
- <p>Sets the number of dirty I/O scheduler threads to create when threading
- support has been enabled. The valid range is 0-1024. By default, the number
- of dirty I/O scheduler threads created is 10, same as the default number of
- threads in the <seealso marker="#async_thread_pool_size">async thread pool
- </seealso>.
- </p>
- <p>This option is ignored if the emulator doesn't have threading support
- enabled. Currently, <em>this option is experimental</em> and is supported only
- if the emulator was configured and built with support for dirty schedulers
- enabled (it's disabled by default).
- </p>
+ <p>Limits the number of reader groups used by read/write locks
+ optimized for read operations in the Erlang runtime system. By
+ default the reader groups limit is 64.</p>
+ <p>When the number of schedulers is less than or equal to the reader
+ groups limit, each scheduler has its own reader group. When the
+ number of schedulers is larger than the reader groups limit,
+ schedulers share reader groups. Shared reader groups degrade
+ read lock and read unlock performance while many
+ reader groups degrade write lock performance. So, the limit is a
+ tradeoff between performance for read operations and performance
+ for write operations. Each reader group consumes 64 byte
+ in each read/write lock.</p>
+ <p>Notice that a runtime system using shared reader groups benefits from
+ <seealso marker="#+sbt">binding schedulers to logical
+ processors</seealso>, as the reader groups are distributed better
+ between schedulers.</p>
+ </item>
+ <tag><marker id="+S"/>
+ <c><![CDATA[+S Schedulers:SchedulerOnline]]></c></tag>
+ <item>
+ <p>Sets the number of scheduler threads to create and scheduler threads
+ to set online when SMP support has been enabled. The maximum for both
+ values is 1024. If the Erlang runtime system is able to determine the
+ number of logical processors configured and logical processors
+ available, <c>Schedulers</c> defaults to logical processors
+ configured, and <c>SchedulersOnline</c> defaults to logical processors
+ available; otherwise the default values are 1. <c>Schedulers</c> can
+ be omitted if <c>:SchedulerOnline</c> is not and conversely. The
+ number of schedulers online can be changed at runtime through
+ <seealso marker="erlang#system_flag_schedulers_online">
+ <c>erlang:system_flag(schedulers_online,
+ SchedulersOnline)</c></seealso>.</p>
+ <p>If <c>Schedulers</c> or <c>SchedulersOnline</c> is specified as a
+ negative number, the value is subtracted from the default number of
+ logical processors configured or logical processors available,
+ respectively.</p>
+ <p>Specifying value <c>0</c> for <c>Schedulers</c> or
+ <c>SchedulersOnline</c> resets the number of scheduler threads or
+ scheduler threads online, respectively, to its default value.</p>
+ <p>This option is ignored if the emulator does not have SMP support
+ enabled (see flag <seealso marker="#smp"><c>-smp</c></seealso>).</p>
+ </item>
+ <tag><marker id="+SP"/><c><![CDATA[+SP
+ SchedulersPercentage:SchedulersOnlinePercentage]]></c></tag>
+ <item>
+ <p>Similar to <seealso marker="#+S"><c>+S</c></seealso> but uses
+ percentages to set the number of scheduler threads to create, based
+ on logical processors configured, and scheduler threads to set online,
+ based on logical processors available, when SMP support has been
+ enabled. Specified values must be &gt; 0. For example,
+ <c>+SP 50:25</c> sets the number of scheduler threads to 50% of the
+ logical processors configured, and the number of scheduler threads
+ online to 25% of the logical processors available.
+ <c>SchedulersPercentage</c> can be omitted if
+ <c>:SchedulersOnlinePercentage</c> is not and conversely. The number
+ of schedulers online can be changed at runtime through
+ <seealso marker="erlang#system_flag_schedulers_online">
+ <c>erlang:system_flag(schedulers_online,
+ SchedulersOnline)</c></seealso>.</p>
+ <p>This option interacts with <seealso marker="#+S"><c>+S</c></seealso>
+ settings. For example, on a system with 8 logical cores configured
+ and 8 logical cores available, the combination of the options
+ <c>+S 4:4 +SP 50:25</c> (in either order) results in 2 scheduler
+ threads (50% of 4) and 1 scheduler thread online (25% of 4).</p>
+ <p>This option is ignored if the emulator does not have SMP support
+ enabled (see flag <seealso marker="#smp"><c>-smp</c></seealso>).</p>
+ </item>
+ <tag><marker id="+SDcpu"/><c><![CDATA[+SDcpu
+ DirtyCPUSchedulers:DirtyCPUSchedulersOnline]]></c></tag>
+ <item>
+ <p>Sets the number of dirty CPU scheduler threads to create and dirty
+ CPU scheduler threads to set online when threading support has been
+ enabled. The maximum for both values is 1024, and each value is
+ further limited by the settings for normal schedulers:</p>
+ <list type="bulleted">
+ <item>The number of dirty CPU scheduler threads created cannot exceed
+ the number of normal scheduler threads created.</item>
+ <item>The number of dirty CPU scheduler threads online cannot exceed
+ the number of normal scheduler threads online.</item>
+ </list>
+ <p>For details, see the <seealso marker="#+S"><c>+S</c></seealso> and
+ <seealso marker="#+SP"><c>+SP</c></seealso>. By default, the number
+ of dirty CPU scheduler threads created equals the number of normal
+ scheduler threads created, and the number of dirty CPU scheduler
+ threads online equals the number of normal scheduler threads online.
+ <c>DirtyCPUSchedulers</c> can be omitted if
+ <c>:DirtyCPUSchedulersOnline</c> is not and conversely. The number of
+ dirty CPU schedulers online can be changed at runtime through
+ <seealso marker="erlang#system_flag_dirty_cpu_schedulers_online">
+ <c>erlang:system_flag(dirty_cpu_schedulers_online,
+ DirtyCPUSchedulersOnline)</c></seealso>.</p>
+ <p>The amount of dirty CPU schedulers is limited by the amount of
+ normal schedulers in order to limit the effect on processes
+ executing on ordinary schedulers. If the amount of dirty CPU
+ schedulers was allowed to be unlimited, dirty CPU bound jobs would
+ potentially starve normal jobs.</p>
+ <p>This option is ignored if the emulator does not have threading
+ support enabled. <em>This option is experimental</em> and
+ is supported only if the emulator was configured and built with
+ support for dirty schedulers enabled (it is disabled by default).</p>
+ </item>
+ <tag><marker id="+SDPcpu"/><c><![CDATA[+SDPcpu
+ DirtyCPUSchedulersPercentage:DirtyCPUSchedulersOnlinePercentage]]></c></tag>
+ <item>
+ <p>Similar to <seealso marker="#+SDcpu"><c>+SDcpu</c></seealso> but
+ uses percentages to set the number of dirty CPU scheduler threads to
+ create and the number of dirty CPU scheduler threads to set online
+ when threading support has been enabled. Specified values must be
+ &gt; 0. For example, <c>+SDPcpu 50:25</c> sets the number of dirty
+ CPU scheduler threads to 50% of the logical processors configured
+ and the number of dirty CPU scheduler threads online to 25% of the
+ logical processors available. <c>DirtyCPUSchedulersPercentage</c> can
+ be omitted if <c>:DirtyCPUSchedulersOnlinePercentage</c> is not and
+ conversely. The number of dirty CPU schedulers online can be changed
+ at runtime through
+ <seealso marker="erlang#system_flag_dirty_cpu_schedulers_online">
+ <c>erlang:system_flag(dirty_cpu_schedulers_online,
+ DirtyCPUSchedulersOnline)</c></seealso>.</p>
+ <p>This option interacts with <seealso
+ marker="#+SDcpu"><c>+SDcpu</c></seealso> settings. For example, on a
+ system with 8 logical cores configured and 8 logical cores available,
+ the combination of the options <c>+SDcpu 4:4 +SDPcpu 50:25</c> (in
+ either order) results in 2 dirty CPU scheduler threads (50% of 4) and
+ 1 dirty CPU scheduler thread online (25% of 4).</p>
+ <p>This option is ignored if the emulator does not have threading
+ support enabled. <em>This option is experimental</em> and
+ is supported only if the emulator was configured and built with
+ support for dirty schedulers enabled (it is disabled by default).</p>
+ </item>
+ <tag><marker id="+SDio"/><c><![CDATA[+SDio DirtyIOSchedulers]]></c></tag>
+ <item>
+ <p>Sets the number of dirty I/O scheduler threads to create when
+ threading support has been enabled. Valid range is 0-1024. By
+ default, the number of dirty I/O scheduler threads created is 10,
+ same as the default number of threads in the <seealso
+ marker="#async_thread_pool_size">async thread pool</seealso>.</p>
+ <p>The amount of dirty IO schedulers is not limited by the amount of
+ normal schedulers <seealso marker="#+SDcpu">like the amount of
+ dirty CPU schedulers</seealso>. This since only I/O bound work is
+ expected to execute on dirty I/O schedulers. If the user should schedule CPU
+ bound jobs on dirty I/O schedulers, these jobs might starve ordinary
+ jobs executing on ordinary schedulers.</p>
+ <p>This option is ignored if the emulator does not have threading
+ support enabled. <em>This option is experimental</em> and
+ is supported only if the emulator was configured and built with
+ support for dirty schedulers enabled (it is disabled by default).</p>
</item>
<tag><c><![CDATA[+sFlag Value]]></c></tag>
<item>
@@ -951,238 +995,237 @@
<taglist>
<tag><marker id="+sbt"/><c>+sbt BindType</c></tag>
<item>
- <p>Set scheduler bind type.</p>
- <p>Schedulers can also be bound using the
- <seealso marker="#+stbt">+stbt</seealso> flag. The only difference
- between these two flags is how the following errors are handled:</p>
- <list>
- <item>Binding of schedulers is not supported on the specific
- platform.</item>
- <item>No available CPU topology. That is the runtime system
- was not able to automatically detected the CPU topology, and
- no <seealso marker="#+sct">user defined CPU topology</seealso>
- was set.</item>
- </list>
- <p>If any of these errors occur when <c>+sbt</c> has been passed,
- the runtime system will print an error message, and refuse to
- start. If any of these errors occur when <c>+stbt</c> has been
- passed, the runtime system will silently ignore the error, and
- start up using unbound schedulers.</p>
- <p>Currently valid <c>BindType</c>s:
- </p>
- <taglist>
- <tag><c>u</c></tag>
- <item>
- <p><c>unbound</c> - Schedulers will not be bound to logical
- processors, i.e., the operating system decides where the
- scheduler threads execute, and when to migrate them. This is
- the default.</p>
+ <p>Sets scheduler bind type.</p>
+ <p>Schedulers can also be bound using flag
+ <seealso marker="#+stbt"><c>+stbt</c></seealso>. The only
+ difference between these two flags is how the following errors
+ are handled:</p>
+ <list type="bulleted">
+ <item>Binding of schedulers is not supported on the specific
+ platform.</item>
+ <item>No available CPU topology. That is, the runtime system was
+ not able to detect the CPU topology automatically, and no
+ <seealso marker="#+sct">user-defined CPU topology</seealso>
+ was set.</item>
+ </list>
+ <p>If any of these errors occur when <c>+sbt</c> has been passed,
+ the runtime system prints an error message, and refuses to
+ start. If any of these errors occur when <c>+stbt</c> has been
+ passed, the runtime system silently ignores the error, and
+ start up using unbound schedulers.</p>
+ <p>Valid <c>BindType</c>s:</p>
+ <taglist>
+ <tag><c>u</c></tag>
+ <item><c>unbound</c> - Schedulers are not bound to logical
+ processors, that is, the operating system decides where the
+ scheduler threads execute, and when to migrate them. This is
+ the default.
</item>
- <tag><c>ns</c></tag>
- <item>
- <p><c>no_spread</c> - Schedulers with close scheduler
- identifiers will be bound as close as possible in hardware.</p>
+ <tag><c>ns</c></tag>
+ <item><c>no_spread</c> - Schedulers with close scheduler
+ identifiers are bound as close as possible in hardware.
</item>
- <tag><c>ts</c></tag>
- <item>
- <p><c>thread_spread</c> - Thread refers to hardware threads
- (e.g. Intel's hyper-threads). Schedulers with low scheduler
- identifiers, will be bound to the first hardware thread of
- each core, then schedulers with higher scheduler identifiers
- will be bound to the second hardware thread of each core,
- etc.</p>
+ <tag><c>ts</c></tag>
+ <item><c>thread_spread</c> - Thread refers to hardware threads
+ (such as Intel's hyper-threads). Schedulers with low scheduler
+ identifiers, are bound to the first hardware thread of
+ each core, then schedulers with higher scheduler identifiers
+ are bound to the second hardware thread of each core,and so on.
</item>
- <tag><c>ps</c></tag>
- <item>
- <p><c>processor_spread</c> - Schedulers will be spread like
- <c>thread_spread</c>, but also over physical processor chips.</p>
+ <tag><c>ps</c></tag>
+ <item><c>processor_spread</c> - Schedulers are spread like
+ <c>thread_spread</c>, but also over physical processor chips.
</item>
- <tag><c>s</c></tag>
- <item>
- <p><c>spread</c> - Schedulers will be spread as much as
- possible.</p>
+ <tag><c>s</c></tag>
+ <item><c>spread</c> - Schedulers are spread as much as possible.
</item>
- <tag><c>nnts</c></tag>
- <item>
- <p><c>no_node_thread_spread</c> - Like <c>thread_spread</c>,
- but if multiple NUMA (Non-Uniform Memory Access) nodes exists,
- schedulers will be spread over one NUMA node at a time,
- i.e., all logical processors of one NUMA node will be bound
- to schedulers in sequence.</p>
+ <tag><c>nnts</c></tag>
+ <item><c>no_node_thread_spread</c> - Like <c>thread_spread</c>,
+ but if multiple Non-Uniform Memory Access (NUMA) nodes exist,
+ schedulers are spread over one NUMA node at a time,
+ that is, all logical processors of one NUMA node are bound
+ to schedulers in sequence.
</item>
- <tag><c>nnps</c></tag>
- <item>
- <p><c>no_node_processor_spread</c> - Like
- <c>processor_spread</c>, but if multiple NUMA nodes exists,
- schedulers will be spread over one NUMA node at a time, i.e.,
- all logical processors of one NUMA node will be bound to
- schedulers in sequence.</p>
+ <tag><c>nnps</c></tag>
+ <item><c>no_node_processor_spread</c> - Like
+ <c>processor_spread</c>, but if multiple NUMA nodes exist,
+ schedulers are spread over one NUMA node at a time, that is,
+ all logical processors of one NUMA node are bound to
+ schedulers in sequence.
</item>
- <tag><c>tnnps</c></tag>
- <item>
- <p><c>thread_no_node_processor_spread</c> - A combination of
- <c>thread_spread</c>, and <c>no_node_processor_spread</c>.
- Schedulers will be spread over hardware threads across NUMA
- nodes, but schedulers will only be spread over processors
- internally in one NUMA node at a time.</p>
+ <tag><c>tnnps</c></tag>
+ <item><c>thread_no_node_processor_spread</c> - A combination of
+ <c>thread_spread</c>, and <c>no_node_processor_spread</c>.
+ Schedulers are spread over hardware threads across NUMA
+ nodes, but schedulers are only spread over processors
+ internally in one NUMA node at a time.
</item>
- <tag><c>db</c></tag>
- <item>
- <p><c>default_bind</c> - Binds schedulers the default way.
- Currently the default is <c>thread_no_node_processor_spread</c>
- (which might change in the future).</p>
+ <tag><c>db</c></tag>
+ <item><c>default_bind</c> - Binds schedulers the default way.
+ Defaults to <c>thread_no_node_processor_spread</c>
+ (which can change in the future).
</item>
- </taglist>
- <p>Binding of schedulers is currently only supported on newer
- Linux, Solaris, FreeBSD, and Windows systems.</p>
- <p>If no CPU topology is available when the <c>+sbt</c> flag
- is processed and <c>BindType</c> is any other type than
- <c>u</c>, the runtime system will fail to start. CPU
- topology can be defined using the
- <seealso marker="#+sct">+sct</seealso> flag. Note
- that the <c>+sct</c> flag may have to be passed before the
- <c>+sbt</c> flag on the command line (in case no CPU topology
- has been automatically detected).</p>
- <p>The runtime system will by default <em>not</em> bind schedulers
- to logical processors.
- </p>
- <p><em>NOTE:</em> If the Erlang runtime system is the only operating system
- process that binds threads to logical processors, this
- improves the performance of the runtime system. However,
- if other operating system processes (as for example
- another Erlang runtime system) also bind threads to
- logical processors, there might be a performance penalty
- instead. In some cases this performance penalty might be
- severe. If this is the case, you are advised to not
- bind the schedulers.</p>
+ </taglist>
+ <p>Binding of schedulers is only supported on newer
+ Linux, Solaris, FreeBSD, and Windows systems.</p>
+ <p>If no CPU topology is available when flag <c>+sbt</c>
+ is processed and <c>BindType</c> is any other type than
+ <c>u</c>, the runtime system fails to start. CPU
+ topology can be defined using flag
+ <seealso marker="#+sct"><c>+sct</c></seealso>. Notice
+ that flag <c>+sct</c> can have to be passed before flag
+ <c>+sbt</c> on the command line (if no CPU topology
+ has been automatically detected).</p>
+ <p>The runtime system does by default <em>not</em> bind schedulers
+ to logical processors.</p>
+ <note>
+ <p>If the Erlang runtime system is the only operating system
+ process that binds threads to logical processors, this
+ improves the performance of the runtime system. However,
+ if other operating system processes (for example
+ another Erlang runtime system) also bind threads to
+ logical processors, there can be a performance penalty
+ instead. This performance penalty can sometimes be
+ severe. If so, you are advised not to
+ bind the schedulers.</p>
+ </note>
<p>How schedulers are bound matters. For example, in
- situations when there are fewer running processes than
- schedulers online, the runtime system tries to migrate
- processes to schedulers with low scheduler identifiers.
- The more the schedulers are spread over the hardware,
- the more resources will be available to the runtime
- system in such situations.
- </p>
- <p>
- <em>NOTE:</em> If a scheduler fails to bind, this
- will often be silently ignored. This since it isn't always
- possible to verify valid logical processor identifiers. If
- an error is reported, it will be reported to the
- <c>error_logger</c>. If you want to verify that the
- schedulers actually have bound as requested, call
- <seealso marker="erlang#system_info_scheduler_bindings">erlang:system_info(scheduler_bindings)</seealso>.
- </p>
+ situations when there are fewer running processes than
+ schedulers online, the runtime system tries to migrate
+ processes to schedulers with low scheduler identifiers.
+ The more the schedulers are spread over the hardware,
+ the more resources are available to the runtime
+ system in such situations.</p>
+ <note>
+ <p>If a scheduler fails to bind, this is
+ often silently ignored, as it is not always
+ possible to verify valid logical processor identifiers. If
+ an error is reported, it is reported to the
+ <c>error_logger</c>. If you want to verify that the
+ schedulers have bound as requested, call
+ <seealso marker="erlang#system_info_scheduler_bindings">
+ <c>erlang:system_info(scheduler_bindings)</c></seealso>.</p>
+ </note>
</item>
- <tag><marker id="+sbwt"/><c>+sbwt none|very_short|short|medium|long|very_long</c></tag>
- <item>
- <p>Set scheduler busy wait threshold. Default is <c>medium</c>.
- The threshold determines how long schedulers should busy
- wait when running out of work before going to sleep.
- </p>
- <p><em>NOTE:</em> This flag may be removed or changed at any time
- without prior notice.
- </p>
- </item>
- <tag><marker id="+scl"/><c>+scl true|false</c></tag>
+ <tag><marker id="+sbwt"/>
+ <c>+sbwt none|very_short|short|medium|long|very_long</c></tag>
<item>
- <p>Enable or disable scheduler compaction of load. By default
- scheduler compaction of load is enabled. When enabled, load
- balancing will strive for a load distribution which causes
- as many scheduler threads as possible to be fully loaded (i.e.,
- not run out of work). This is accomplished by migrating load
- (e.g. runnable processes) into a smaller set of schedulers
- when schedulers frequently run out of work. When disabled,
- the frequency with which schedulers run out of work will
- not be taken into account by the load balancing logic.
- <br/>&nbsp;&nbsp;<c>+scl false</c> is similar to
- <seealso marker="#+sub">+sub true</seealso> with the difference
- that <c>+sub true</c> also will balance scheduler utilization
- between schedulers.
- </p>
+ <p>Sets scheduler busy wait threshold. Defaults to <c>medium</c>.
+ The threshold determines how long schedulers are to busy
+ wait when running out of work before going to sleep.</p>
+ <note>
+ <p>This flag can be removed or changed at any time
+ without prior notice.</p>
+ </note>
+ </item>
+<tag><marker id="+scl"/><c>+scl true|false</c></tag>
+ <item>
+ <p>Enables or disables scheduler compaction of load. By default
+ scheduler compaction of load is enabled. When enabled, load
+ balancing strives for a load distribution, which causes
+ as many scheduler threads as possible to be fully loaded (that is,
+ not run out of work). This is accomplished by migrating load
+ (for example, runnable processes) into a smaller set of schedulers
+ when schedulers frequently run out of work. When disabled,
+ the frequency with which schedulers run out of work is
+ not taken into account by the load balancing logic.</p>
+ <p><c>+scl false</c> is similar to
+ <seealso marker="#+sub"><c>+sub true</c></seealso>, but
+ <c>+sub true</c> also balances scheduler utilization
+ between schedulers.</p>
</item>
<tag><marker id="+sct"/><c>+sct CpuTopology</c></tag>
<item>
<list type="bulleted">
- <item><c><![CDATA[<Id> = integer(); when 0 =< <Id> =< 65535]]></c></item>
+ <item><c><![CDATA[<Id> = integer(); when 0 =< <Id> =< 65535]]></c>
+ </item>
<item><c><![CDATA[<IdRange> = <Id>-<Id>]]></c></item>
<item><c><![CDATA[<IdOrIdRange> = <Id> | <IdRange>]]></c></item>
- <item><c><![CDATA[<IdList> = <IdOrIdRange>,<IdOrIdRange> | <IdOrIdRange>]]></c></item>
+ <item><c><![CDATA[<IdList> = <IdOrIdRange>,<IdOrIdRange> |
+ <IdOrIdRange>]]></c></item>
<item><c><![CDATA[<LogicalIds> = L<IdList>]]></c></item>
- <item><c><![CDATA[<ThreadIds> = T<IdList> | t<IdList>]]></c></item>
+ <item><c><![CDATA[<ThreadIds> = T<IdList> | t<IdList>]]></c>
+ </item>
<item><c><![CDATA[<CoreIds> = C<IdList> | c<IdList>]]></c></item>
- <item><c><![CDATA[<ProcessorIds> = P<IdList> | p<IdList>]]></c></item>
+ <item><c><![CDATA[<ProcessorIds> = P<IdList> | p<IdList>]]></c>
+ </item>
<item><c><![CDATA[<NodeIds> = N<IdList> | n<IdList>]]></c></item>
- <item><c><![CDATA[<IdDefs> = <LogicalIds><ThreadIds><CoreIds><ProcessorIds><NodeIds> | <LogicalIds><ThreadIds><CoreIds><NodeIds><ProcessorIds>]]></c></item>
- <item><c><![CDATA[CpuTopology = <IdDefs>:<IdDefs> | <IdDefs>]]></c></item>
+ <item><c><![CDATA[<IdDefs> =
+ <LogicalIds><ThreadIds><CoreIds><ProcessorIds><NodeIds> |
+ <LogicalIds><ThreadIds><CoreIds><NodeIds><ProcessorIds>]]></c>
+ </item>
+ <item><c><![CDATA[CpuTopology = <IdDefs>:<IdDefs> |
+ <IdDefs>]]></c></item>
+ </list>
+ <p>Sets a user-defined CPU topology. The user-defined
+ CPU topology overrides any automatically detected
+ CPU topology. The CPU topology is used when
+ <seealso marker="#+sbt">binding schedulers to logical
+ processors</seealso>.</p>
+ <p>Uppercase letters signify real identifiers and lowercase
+ letters signify fake identifiers only used for description
+ of the topology. Identifiers passed as real identifiers can
+ be used by the runtime system when trying to access specific
+ hardware; if they are incorrect the behavior is
+ undefined. Faked logical CPU identifiers are not accepted,
+ as there is no point in defining the CPU topology without
+ real logical CPU identifiers. Thread, core, processor, and
+ node identifiers can be omitted. If omitted, the thread ID
+ defaults to <c>t0</c>, the core ID defaults to <c>c0</c>,
+ the processor ID defaults to <c>p0</c>, and the node ID is
+ left undefined. Either each logical processor must
+ belong to only one NUMA node, or no logical
+ processors must belong to any NUMA nodes.</p>
+ <p>Both increasing and decreasing <c><![CDATA[<IdRange>]]></c>s
+ are allowed.</p>
+ <p>NUMA node identifiers are system wide. That is, each NUMA
+ node on the system must have a unique identifier. Processor
+ identifiers are also system wide. Core identifiers are
+ processor wide. Thread identifiers are core wide.</p>
+ <p>The order of the identifier types implies the hierarchy of the
+ CPU topology. The valid orders are as follows:</p>
+ <list type="bulleted">
+ <item>
+ <p><c><![CDATA[<LogicalIds><ThreadIds><CoreIds><ProcessorIds><NodeIds>]]></c>,
+ that is, thread is part of a core that is part of a processor,
+ which is part of a NUMA node.</p>
+ </item>
+ <item>
+ <p><c><![CDATA[<LogicalIds><ThreadIds><CoreIds><NodeIds><ProcessorIds>]]></c>,
+ that is, thread is part of a core that is part of a NUMA node,
+ which is part of a processor.</p>
+ </item>
</list>
- <p>Set a user defined CPU topology. The user defined
- CPU topology will override any automatically detected
- CPU topology. The CPU topology is used when
- <seealso marker="#+sbt">binding schedulers to logical
- processors</seealso>.
- </p>
- <p>Upper-case letters signify real identifiers and lower-case
- letters signify fake identifiers only used for description
- of the topology. Identifiers passed as real identifiers may
- be used by the runtime system when trying to access specific
- hardware and if they are not correct the behavior is
- undefined. Faked logical CPU identifiers are not accepted
- since there is no point in defining the CPU topology without
- real logical CPU identifiers. Thread, core, processor, and
- node identifiers may be left out. If left out, thread id
- defaults to <c>t0</c>, core id defaults to <c>c0</c>,
- processor id defaults to <c>p0</c>, and node id will
- be left undefined. Either each logical processor must
- belong to one and only one NUMA node, or no logical
- processors must belong to any NUMA nodes.
- </p>
- <p>Both increasing and decreasing <c><![CDATA[<IdRange>]]></c>s
- are allowed.</p>
- <p>NUMA node identifiers are system wide. That is, each NUMA
- node on the system have to have a unique identifier. Processor
- identifiers are also system wide. Core identifiers are
- processor wide. Thread identifiers are core wide.</p>
- <p>The order of the identifier types imply the hierarchy of the
- CPU topology. Valid orders are either
- <c><![CDATA[<LogicalIds><ThreadIds><CoreIds><ProcessorIds><NodeIds>]]></c>,
- or
- <c><![CDATA[<LogicalIds><ThreadIds><CoreIds><NodeIds><ProcessorIds>]]></c>.
- That is, thread is part of a core which is part of a processor
- which is part of a NUMA node, or thread is part of a core which
- is part of a NUMA node which is part of a processor. A cpu
- topology can consist of both processor external, and processor
- internal NUMA nodes as long as each logical processor belongs
- to one and only one NUMA node. If <c><![CDATA[<ProcessorIds>]]></c>
- is left out, its default position will be before
- <c><![CDATA[<NodeIds>]]></c>. That is, the default is
- processor external NUMA nodes.
- </p>
- <p>If a list of identifiers is used in an
- <c><![CDATA[<IdDefs>]]></c>:</p>
- <list type="bulleted">
- <item><c><![CDATA[<LogicalIds>]]></c> have to be a list
- of identifiers.</item>
- <item>At least one other identifier type apart from
- <c><![CDATA[<LogicalIds>]]></c> also have to have a
- list of identifiers.</item>
- <item>All lists of identifiers have to produce the
- same amount of identifiers.</item>
- </list>
- <p>A simple example. A single quad core processor may be
- described this way:</p>
+ <p>A CPU topology can consist of both processor external, and
+ processor internal NUMA nodes as long as each logical processor
+ belongs to only one NUMA node. If
+ <c><![CDATA[<ProcessorIds>]]></c> is omitted, its default position
+ is before <c><![CDATA[<NodeIds>]]></c>. That is, the default is
+ processor external NUMA nodes.</p>
+ <p>If a list of identifiers is used in an
+ <c><![CDATA[<IdDefs>]]></c>:</p>
+ <list type="bulleted">
+ <item><c><![CDATA[<LogicalIds>]]></c> must be a list
+ of identifiers.</item>
+ <item>At least one other identifier type besides
+ <c><![CDATA[<LogicalIds>]]></c> must also have a
+ list of identifiers.</item>
+ <item>All lists of identifiers must produce the
+ same number of identifiers.</item>
+ </list>
+ <p>A simple example. A single quad core processor can be
+ described as follows:</p>
<pre>
% <input>erl +sct L0-3c0-3</input>
1> <input>erlang:system_info(cpu_topology).</input>
[{processor,[{core,{logical,0}},
{core,{logical,1}},
{core,{logical,2}},
- {core,{logical,3}}]}]
-</pre>
- <p>A little more complicated example. Two quad core
- processors. Each processor in its own NUMA node.
- The ordering of logical processors is a little weird.
- This in order to give a better example of identifier
- lists:</p>
+ {core,{logical,3}}]}]</pre>
+ <p>A more complicated example with two quad core
+ processors, each processor in its own NUMA node.
+ The ordering of logical processors is a bit weird.
+ This to give a better example of identifier lists:</p>
<pre>
% <input>erl +sct L0-1,3-2c0-3p0N0:L7,4,6-5c0-3p1N1</input>
1> <input>erlang:system_info(cpu_topology).</input>
@@ -1193,239 +1236,247 @@
{node,[{processor,[{core,{logical,7}},
{core,{logical,4}},
{core,{logical,6}},
- {core,{logical,5}}]}]}]
-</pre>
- <p>As long as real identifiers are correct it is okay
- to pass a CPU topology that is not a correct
- description of the CPU topology. When used with
- care this can actually be very useful. This in
- order to trick the emulator to bind its schedulers
- as you want. For example, if you want to run multiple
- Erlang runtime systems on the same machine, you
- want to reduce the amount of schedulers used and
- manipulate the CPU topology so that they bind to
- different logical CPUs. An example, with two Erlang
- runtime systems on a quad core machine:</p>
+ {core,{logical,5}}]}]}]</pre>
+ <p>As long as real identifiers are correct, it is OK
+ to pass a CPU topology that is not a correct
+ description of the CPU topology. When used with
+ care this can be very useful. This
+ to trick the emulator to bind its schedulers
+ as you want. For example, if you want to run multiple
+ Erlang runtime systems on the same machine, you
+ want to reduce the number of schedulers used and
+ manipulate the CPU topology so that they bind to
+ different logical CPUs. An example, with two Erlang
+ runtime systems on a quad core machine:</p>
<pre>
% <input>erl +sct L0-3c0-3 +sbt db +S3:2 -detached -noinput -noshell -sname one</input>
-% <input>erl +sct L3-0c0-3 +sbt db +S3:2 -detached -noinput -noshell -sname two</input>
-</pre>
- <p>In this example each runtime system have two
- schedulers each online, and all schedulers online
- will run on different cores. If we change to one
- scheduler online on one runtime system, and three
- schedulers online on the other, all schedulers
- online will still run on different cores.</p>
- <p>Note that a faked CPU topology that does not reflect
- how the real CPU topology looks like is likely to
- decrease the performance of the runtime system.</p>
- <p>For more information, see
- <seealso marker="erlang#system_info_cpu_topology">erlang:system_info(cpu_topology)</seealso>.</p>
+% <input>erl +sct L3-0c0-3 +sbt db +S3:2 -detached -noinput -noshell -sname two</input></pre>
+ <p>In this example, each runtime system have two
+ schedulers each online, and all schedulers online
+ will run on different cores. If we change to one
+ scheduler online on one runtime system, and three
+ schedulers online on the other, all schedulers
+ online will still run on different cores.</p>
+ <p>Notice that a faked CPU topology that does not reflect
+ how the real CPU topology looks like is likely to
+ decrease the performance of the runtime system.</p>
+ <p>For more information, see
+ <seealso marker="erlang#system_info_cpu_topology">
+ <c>erlang:system_info(cpu_topology)</c></seealso>.</p>
</item>
<tag><marker id="+secio"/><c>+secio true|false</c></tag>
<item>
- <p>Enable or disable eager check I/O scheduling. The default
- is currently <c>true</c>. The default was changed from <c>false</c>
- to <c>true</c> as of erts version 7.0. The behaviour before this
- flag was introduced corresponds to <c>+secio false</c>.</p>
- <p>The flag effects when schedulers will check for I/O
- operations possible to execute, and when such I/O operations
- will execute. As the name of the parameter implies,
- schedulers will be more eager to check for I/O when
- <c>true</c> is passed. This however also implies that
- execution of outstanding I/O operation will not be
- prioritized to the same extent as when <c>false</c> is
- passed.</p>
- <p><seealso marker="erlang#system_info_eager_check_io"><c>erlang:system_info(eager_check_io)</c></seealso>
- returns the value of this parameter used when starting the VM.</p>
+ <p>Enables or disables eager check I/O scheduling. Defaults
+ to <c>true</c>. The default was changed from <c>false</c>
+ as from ERTS 7.0. The behavior before this
+ flag was introduced corresponds to <c>+secio false</c>.</p>
+ <p>The flag effects when schedulers will check for I/O
+ operations possible to execute, and when such I/O operations
+ will execute. As the parameter name implies,
+ schedulers are more eager to check for I/O when
+ <c>true</c> is passed. This, however, also implies that
+ execution of outstanding I/O operation is not
+ prioritized to the same extent as when <c>false</c> is
+ passed.</p>
+ <p><seealso marker="erlang#system_info_eager_check_io">
+ <c>erlang:system_info(eager_check_io)</c></seealso>
+ returns the value of this parameter used when starting
+ the virtual machine.</p>
</item>
<tag><marker id="+sfwi"/><c>+sfwi Interval</c></tag>
<item>
- <p>Set scheduler forced wakeup interval. All run queues will
- be scanned each <c>Interval</c> milliseconds. While there are
- sleeping schedulers in the system, one scheduler will be woken
- for each non-empty run queue found. An <c>Interval</c> of zero
- disables this feature, which also is the default.
- </p>
- <p>This feature has been introduced as a temporary workaround
- for long-executing native code, and native code that does not
- bump reductions properly in OTP. When these bugs have be fixed
- the <c>+sfwi</c> flag will be removed.
- </p>
- </item>
+ <p>Sets scheduler-forced wakeup interval. All run queues are
+ scanned each <c>Interval</c> milliseconds. While there are
+ sleeping schedulers in the system, one scheduler is woken
+ for each non-empty run queue found. <c>Interval</c> default
+ to <c>0</c>, meaning this feature is disabled.</p>
+ <note>
+ <p>This feature has been introduced as a temporary workaround
+ for long-executing native code, and native code that does not
+ bump reductions properly in OTP. When these bugs have be fixed,
+ this flag will be removed.</p>
+ </note>
+ </item>
+ <tag><marker id="+spp"/><c>+spp Bool</c></tag>
+ <item>
+ <p>Sets default scheduler hint for port parallelism. If set to
+ <c>true</c>, the virtual machine schedules port tasks when it
+ improves parallelism in the system. If set to <c>false</c>, the
+ virtual machine tries to perform port tasks immediately,
+ improving latency at the expense of parallelism. Default to
+ <c>false</c>. The default used can be inspected in runtime by
+ calling <seealso marker="erlang#system_info_port_parallelism">
+ <c>erlang:system_info(port_parallelism)</c></seealso>.
+ The default can be overridden on port creation by passing option
+ <seealso marker="erlang#open_port_parallelism">
+ <c>parallelism</c></seealso> to
+ <seealso marker="erlang#open_port/2">
+ <c>erlang:open_port/2</c></seealso></p>.
+ </item>
+ <tag><marker id="sched_thread_stack_size"/>
+ <c><![CDATA[+sss size]]></c></tag>
+ <item>
+ <p>Suggested stack size, in kilowords, for scheduler threads.
+ Valid range is 4-8192 kilowords. The default stack size is
+ OS-dependent.</p>
+ </item>
<tag><marker id="+stbt"/><c>+stbt BindType</c></tag>
<item>
- <p>Try to set scheduler bind type. The same as the
- <seealso marker="#+sbt">+sbt</seealso> flag with the exception of
- how some errors are handled. For more information, see the
- documentation of the <seealso marker="#+sbt">+sbt</seealso> flag.
- </p>
- </item>
+ <p>Tries to set the scheduler bind type. The same as flag
+ <seealso marker="#+sbt"><c>+sbt</c></seealso> except
+ how some errors are handled. For more information, see
+ <seealso marker="#+sbt"><c>+sbt</c></seealso>.</p>
+ </item>
<tag><marker id="+sub"/><c>+sub true|false</c></tag>
<item>
- <p>Enable or disable
- <seealso marker="erts:erlang#statistics_scheduler_wall_time">scheduler
- utilization</seealso> balancing of load. By default scheduler
- utilization balancing is disabled and instead scheduler
- compaction of load is enabled which will strive for a load
- distribution which causes as many scheduler threads as possible
- to be fully loaded (i.e., not run out of work). When scheduler
- utilization balancing is enabled the system will instead try to
- balance scheduler utilization between schedulers. That is,
- strive for equal scheduler utilization on all schedulers.
- <br/>&nbsp;&nbsp;&nbsp;<c>+sub true</c> is only supported on
- systems where the runtime system detects and uses a monotonically
- increasing high resolution clock. On other systems, the runtime
- system will fail to start.
- <br/>&nbsp;&nbsp;&nbsp;<c>+sub true</c> implies
- <seealso marker="#+scl">+scl false</seealso>. The difference
- between <c>+sub true</c> and <c>+scl false</c> is that
- <c>+scl false</c> will not try to balance the scheduler
- utilization.
- </p>
+ <p>Enables or disables
+ <seealso marker="erts:erlang#statistics_scheduler_wall_time">
+ scheduler utilization</seealso> balancing of load. By default
+ scheduler utilization balancing is disabled and instead scheduler
+ compaction of load is enabled, which strives for a load
+ distribution that causes as many scheduler threads as possible
+ to be fully loaded (that is, not run out of work). When scheduler
+ utilization balancing is enabled, the system instead tries to
+ balance scheduler utilization between schedulers. That is,
+ strive for equal scheduler utilization on all schedulers.</p>
+ <p><c>+sub true</c> is only supported on systems where the runtime
+ system detects and uses a monotonically increasing high-resolution
+ clock. On other systems, the runtime system fails to start.</p>
+ <p><c>+sub true</c> implies <seealso marker="#+scl">
+ <c>+scl false</c></seealso>. The difference between
+ <c>+sub true</c> and <c>+scl false</c> is that <c>+scl false</c>
+ does not try to balance the scheduler utilization.</p>
</item>
- <tag><marker id="+swct"/><c>+swct very_eager|eager|medium|lazy|very_lazy</c></tag>
- <item>
- <p>
- Set scheduler wake cleanup threshold. Default is <c>medium</c>.
- This flag controls how eager schedulers should be requesting
- wake up due to certain cleanup operations. When a lazy setting
- is used, more outstanding cleanup operations can be left undone
- while a scheduler is idling. When an eager setting is used,
- schedulers will more frequently be woken, potentially increasing
- CPU-utilization.
- </p>
- <p><em>NOTE:</em> This flag may be removed or changed at any time without prior notice.
- </p>
- </item>
- <tag><marker id="+sws"/><c>+sws default|legacy</c></tag>
- <item>
- <p>
- Set scheduler wakeup strategy. Default strategy changed in erts-5.10/OTP-R16A. This strategy was previously known as <c>proposal</c> in OTP-R15. The <c>legacy</c> strategy was used as default from R13 up to and including R15.
- </p>
- <p><em>NOTE:</em> This flag may be removed or changed at any time without prior notice.
- </p>
- </item>
- <tag><marker id="+swt"/><c>+swt very_low|low|medium|high|very_high</c></tag>
- <item>
- <p>Set scheduler wakeup threshold. Default is <c>medium</c>.
- The threshold determines when to wake up sleeping schedulers
- when more work than can be handled by currently awake schedulers
- exist. A low threshold will cause earlier wakeups, and a high
- threshold will cause later wakeups. Early wakeups will
- distribute work over multiple schedulers faster, but work will
- more easily bounce between schedulers.
- </p>
- <p><em>NOTE:</em> This flag may be removed or changed at any time
- without prior notice.
- </p>
- </item>
- <tag><marker id="+spp"/><c>+spp Bool</c></tag>
+ <tag><marker id="+swct"/>
+ <c>+swct very_eager|eager|medium|lazy|very_lazy</c></tag>
<item>
- <p>Set default scheduler hint for port parallelism. If set to
- <c>true</c>, the VM will schedule port tasks when doing so will
- improve parallelism in the system. If set to <c>false</c>, the VM
- will try to perform port tasks immediately, improving latency at the
- expense of parallelism. If this flag has not been passed, the
- default scheduler hint for port parallelism is currently
- <c>false</c>. The default used can be inspected in runtime by
- calling <seealso
- marker="erlang#system_info_port_parallelism">erlang:system_info(port_parallelism)</seealso>.
- The default can be overriden on port creation by passing the
- <seealso marker="erlang#open_port_parallelism">parallelism</seealso>
- option to <seealso
- marker="erlang#open_port/2">open_port/2</seealso></p>.
- </item>
- <tag><marker id="sched_thread_stack_size"/><c><![CDATA[+sss size]]></c></tag>
- <item>
- <p>Suggested stack size, in kilowords, for scheduler threads.
- Valid range is 4-8192 kilowords. The default stack size
- is OS dependent.</p>
- </item>
+ <p>Sets scheduler wake cleanup threshold. Defaults to <c>medium</c>.
+ Controls how eager schedulers are to be requesting
+ wakeup because of certain cleanup operations. When a lazy setting
+ is used, more outstanding cleanup operations can be left undone
+ while a scheduler is idling. When an eager setting is used,
+ schedulers are more frequently woken, potentially increasing
+ CPU-utilization.</p>
+ <note>
+ <p>This flag can be removed or changed at any time without prior
+ notice.</p>
+ </note>
+ </item>
+ <tag><marker id="+sws"/><c>+sws default|legacy</c></tag>
+ <item>
+ <p>Sets scheduler wakeup strategy. Default strategy changed in
+ ERTS 5.10 (Erlang/OTP R16A). This strategy was known as
+ <c>proposal</c> in Erlang/OTP R15. The <c>legacy</c> strategy
+ was used as default from R13 up to and including R15.</p>
+ <note>
+ <p>This flag can be removed or changed at any time without prior
+ notice.</p>
+ </note>
+ </item>
+ <tag><marker id="+swt"/>
+ <c>+swt very_low|low|medium|high|very_high</c></tag>
+ <item>
+ <p>Sets scheduler wakeup threshold. Defaults to <c>medium</c>.
+ The threshold determines when to wake up sleeping schedulers
+ when more work than can be handled by currently awake schedulers
+ exists. A low threshold causes earlier wakeups, and a high
+ threshold causes later wakeups. Early wakeups distribute work
+ over multiple schedulers faster, but work does more easily bounce
+ between schedulers.</p>
+ <note>
+ <p>This flag can be removed or changed at any time without prior
+ notice.</p>
+ </note>
+ </item>
</taglist>
</item>
<tag><marker id="+t"/><c><![CDATA[+t size]]></c></tag>
<item>
- <p>Set the maximum number of atoms the VM can handle. Default is 1048576.</p>
+ <p>Sets the maximum number of atoms the virtual machine can handle.
+ Defaults to 1,048,576.</p>
</item>
<tag><marker id="+T"/><c><![CDATA[+T Level]]></c></tag>
<item>
- <p>Enables modified timing and sets the modified timing level.
- Currently valid range is 0-9. The timing of the runtime system
- will change. A high level usually means a greater change than
- a low level. Changing the timing can be very useful for finding
- timing related bugs.</p>
- <p>Currently, modified timing affects the following:</p>
+ <p>Enables modified timing and sets the modified timing level. Valid
+ range is 0-9. The timing of the runtime system is changed. A high
+ level usually means a greater change than a low level. Changing the
+ timing can be very useful for finding timing-related bugs.</p>
+ <p>Modified timing affects the following:</p>
<taglist>
<tag>Process spawning</tag>
- <item>
- <p>A process calling <c><![CDATA[spawn]]></c>, <c><![CDATA[spawn_link]]></c>,
- <c><![CDATA[spawn_monitor]]></c>, or <c><![CDATA[spawn_opt]]></c> will be scheduled
- out immediately after completing the call. When higher modified
- timing levels are used, the caller will also sleep for a while
- after being scheduled out.</p>
+ <item>A process calling <c><![CDATA[spawn]]></c>,
+ <c><![CDATA[spawn_link]]></c>, <c><![CDATA[spawn_monitor]]></c>,
+ or <c><![CDATA[spawn_opt]]></c> is scheduled out immediately
+ after completing the call. When higher modified timing levels are
+ used, the caller also sleeps for a while after it is scheduled out.
</item>
<tag>Context reductions</tag>
- <item>The amount of reductions a process is a allowed to
- use before being scheduled out is increased or reduced.</item>
+ <item>The number of reductions a process is allowed to use before it
+ is scheduled out is increased or reduced.
+ </item>
<tag>Input reductions</tag>
- <item>The amount of reductions performed before checking I/O
- is increased or reduced.</item>
+ <item>The number of reductions performed before checking I/O is
+ increased or reduced.
+ </item>
</taglist>
- <p><em>NOTE:</em> Performance will suffer when modified timing
- is enabled. This flag is <em>only</em> intended for testing and
- debugging. Also note that <c><![CDATA[return_to]]></c> and <c><![CDATA[return_from]]></c>
- trace messages will be lost when tracing on the spawn BIFs. This
- flag may be removed or changed at any time without prior notice.</p>
- </item>
- <tag><c><![CDATA[+V]]></c></tag>
- <item>
- <p>Makes the emulator print out its version number.</p>
+ <note>
+ <p>Performance suffers when modified timing is enabled. This flag is
+ <em>only</em> intended for testing and debugging.</p>
+ <p><c><![CDATA[return_to]]></c> and <c><![CDATA[return_from]]></c>
+ trace messages are lost when tracing on the spawn BIFs.</p>
+ <p>This flag can be removed or changed at any time without prior
+ notice.</p>
+ </note>
</item>
<tag><c><![CDATA[+v]]></c></tag>
<item>
<p>Verbose.</p>
</item>
+ <tag><c><![CDATA[+V]]></c></tag>
+ <item>
+ <p>Makes the emulator print its version number.</p>
+ </item>
<tag><c><![CDATA[+W w | i | e]]></c></tag>
<item>
- <p>Sets the mapping of warning messages for <c><![CDATA[error_logger]]></c>.
- Messages sent to the error logger using one of the warning
- routines can be mapped either to errors (<c><![CDATA[+W e]]></c>),
- warnings (<c><![CDATA[+W w]]></c>), or info reports
- (<c><![CDATA[+W i]]></c>). The default is warnings.
+ <p>Sets the mapping of warning messages for
+ <c><![CDATA[error_logger]]></c>. Messages sent to the error logger
+ using one of the warning routines can be mapped to errors
+ (<c><![CDATA[+W e]]></c>), warnings (<c><![CDATA[+W w]]></c>), or
+ information reports (<c><![CDATA[+W i]]></c>). Defaults to warnings.
The current mapping can be retrieved using
- <c><![CDATA[error_logger:warning_map/0]]></c>. See
- <seealso marker="kernel:error_logger#warning_map/0">error_logger(3)</seealso>
- for further information.</p>
+ <c><![CDATA[error_logger:warning_map/0]]></c>. For more information,
+ see <seealso marker="kernel:error_logger#warning_map/0">
+ <c>error_logger:warning_map/0</c></seealso> in Kernel.</p>
</item>
<tag><c><![CDATA[+zFlag Value]]></c></tag>
<item>
- <p>Miscellaneous flags.</p>
+ <p>Miscellaneous flags:</p>
<taglist>
<tag><marker id="+zdbbl"/><c>+zdbbl size</c></tag>
<item>
- <p>Set the distribution buffer busy limit
- (<seealso marker="erlang#system_info_dist_buf_busy_limit">dist_buf_busy_limit</seealso>)
- in kilobytes. Valid range is 1-2097151. Default is 1024.</p>
- <p>A larger buffer limit will allow processes to buffer
- more outgoing messages over the distribution. When the
- buffer limit has been reached, sending processes will be
- suspended until the buffer size has shrunk. The buffer
- limit is per distribution channel. A higher limit will
- give lower latency and higher throughput at the expense
- of higher memory usage.</p>
+ <p>Sets the distribution buffer busy limit
+ (<seealso marker="erlang#system_info_dist_buf_busy_limit">
+ <c>dist_buf_busy_limit</c></seealso>)
+ in kilobytes. Valid range is 1-2097151. Defaults to 1024.</p>
+ <p>A larger buffer limit allows processes to buffer
+ more outgoing messages over the distribution. When the
+ buffer limit has been reached, sending processes will be
+ suspended until the buffer size has shrunk. The buffer
+ limit is per distribution channel. A higher limit
+ gives lower latency and higher throughput at the expense
+ of higher memory use.</p>
</item>
<tag><marker id="+zdntgc"/><c>+zdntgc time</c></tag>
<item>
- <p>Set the delayed node table garbage collection time
- (<seealso marker="erlang#system_info_delayed_node_table_gc">delayed_node_table_gc</seealso>)
- in seconds. Valid values are either <c>infinity</c> or
- an integer in the range [0-100000000]. Default is 60.</p>
- <p>Node table entries that are not referred will linger
- in the table for at least the amount of time that this
- parameter determines. The lingering prevents repeated
- deletions and insertions in the tables from occurring.
- </p>
+ <p>Sets the delayed node table garbage collection time
+ (<seealso marker="erlang#system_info_delayed_node_table_gc">
+ <c>delayed_node_table_gc</c></seealso>)
+ in seconds. Valid values are either <c>infinity</c> or
+ an integer in the range 0-100000000. Defaults to 60.</p>
+ <p>Node table entries that are not referred linger
+ in the table for at least the amount of time that this
+ parameter determines. The lingering prevents repeated
+ deletions and insertions in the tables from occurring.</p>
</item>
</taglist>
</item>
@@ -1434,104 +1485,95 @@
<section>
<marker id="environment_variables"></marker>
- <title>Environment variables</title>
+ <title>Environment Variables</title>
<taglist>
<tag><c><![CDATA[ERL_CRASH_DUMP]]></c></tag>
<item>
<p>If the emulator needs to write a crash dump, the value of this
- variable will be the file name of the crash dump file.
- If the variable is not set, the name of the crash dump file will
- be <c><![CDATA[erl_crash.dump]]></c> in the current directory.</p>
+ variable is the filename of the crash dump file.
+ If the variable is not set, the name of the crash dump file is
+ <c><![CDATA[erl_crash.dump]]></c> in the current directory.</p>
</item>
<tag><c><![CDATA[ERL_CRASH_DUMP_NICE]]></c></tag>
<item>
- <p><em>Unix systems</em>: If the emulator needs to write a crash dump,
- it will use the value of this variable to set the nice value
- for the process, thus lowering its priority. The allowable range is
- 1 through 39 (higher values will be replaced with 39). The highest
- value, 39, will give the process the lowest priority.</p>
+ <p><em>Unix systems</em>: If the emulator needs to write a crash dump,
+ it uses the value of this variable to set the nice value
+ for the process, thus lowering its priority. Valid range is
+ 1-39 (higher values are replaced with 39). The highest
+ value, 39, gives the process the lowest priority.</p>
</item>
<tag><c><![CDATA[ERL_CRASH_DUMP_SECONDS]]></c></tag>
<item>
- <p><em>Unix systems</em>: This variable gives the number of seconds that
- the emulator will be allowed to spend writing a crash dump. When
- the given number of seconds have elapsed, the emulator will be
- terminated by a SIGALRM signal.</p>
-
- <p> If the environment variable is <em>not</em> set or it is set to zero seconds, <c><![CDATA[ERL_CRASH_DUMP_SECONDS=0]]></c>,
- the runtime system will not even attempt to write the crash dump file. It will just terminate.
- </p>
- <p> If the environment variable is set to negative valie, e.g. <c><![CDATA[ERL_CRASH_DUMP_SECONDS=-1]]></c>,
- the runtime system will wait indefinitely for the crash dump file to be written.
- </p>
- <p> This environment variable is used in conjuction with
- <seealso marker="kernel:heart"><c>heart</c></seealso> if <c>heart</c> is running:
- </p>
- <taglist>
- <tag><c><![CDATA[ERL_CRASH_DUMP_SECONDS=0]]></c></tag>
- <item><p>
- Suppresses the writing a crash dump file entirely,
- thus rebooting the runtime system immediately.
- This is the same as not setting the environment variable.
- </p>
- </item>
- <tag><c><![CDATA[ERL_CRASH_DUMP_SECONDS=-1]]></c></tag>
- <item><p>Setting the environment variable to a negative value will cause the
- termination of the runtime system to wait until the crash dump file
- has been completly written.
- </p>
- </item>
- <tag><c><![CDATA[ERL_CRASH_DUMP_SECONDS=S]]></c></tag>
- <item><p>
- Will wait for <c>S</c> seconds to complete the crash dump file and
- then terminate the runtime system.
- </p>
- </item>
- </taglist>
+ <p><em>Unix systems</em>: This variable gives the number of seconds
+ that the emulator is allowed to spend writing a crash dump. When the
+ given number of seconds have elapsed, the emulator is terminated by a
+ <c>SIGALRM</c> signal.</p>
+ <p>If the variable is <em>not</em> set or set to <c>0</c> seconds
+ (<c><![CDATA[ERL_CRASH_DUMP_SECONDS=0]]></c>), the runtime system does
+ not even attempt to write the crash dump file. It only terminates.</p>
+ <p>If the variable is set to negative value, such as
+ <c><![CDATA[ERL_CRASH_DUMP_SECONDS=-1]]></c>, the runtime system
+ waits indefinitely for the crash dump file to be written.</p>
+ <p>This variable is used with <seealso marker="kernel:heart">
+ <c>heart(3)</c></seealso> if <c>heart</c> is running:</p>
+ <taglist>
+ <tag><c><![CDATA[ERL_CRASH_DUMP_SECONDS=0]]></c></tag>
+ <item>Suppresses the writing a crash dump file entirely, thus
+ rebooting the runtime system immediately. This is the same as not
+ setting the environment variable.
+ </item>
+ <tag><c><![CDATA[ERL_CRASH_DUMP_SECONDS=-1]]></c></tag>
+ <item>Setting the environment variable to a negative value causes the
+ termination of the runtime system to wait until the crash dump file
+ has been completly written.
+ </item>
+ <tag><c><![CDATA[ERL_CRASH_DUMP_SECONDS=S]]></c></tag>
+ <item>Waits for <c>S</c> seconds to complete the crash dump file and
+ then terminates the runtime system.
+ </item>
+ </taglist>
</item>
<tag><marker id="ERL_AFLAGS"/><c><![CDATA[ERL_AFLAGS]]></c></tag>
<item>
- <p>The content of this environment variable will be added to the
- beginning of the command line for <c><![CDATA[erl]]></c>.</p>
- <p>The <c><![CDATA[-extra]]></c> flag is treated specially. Its scope ends
- at the end of the environment variable content. Arguments
- following an <c><![CDATA[-extra]]></c> flag are moved on the command line into
- the <c><![CDATA[-extra]]></c> section, i.e. the end of the command line
- following after an <c><![CDATA[-extra]]></c> flag.</p>
- </item>
- <tag><marker id="ERL_ZFLAGS"/><c><![CDATA[ERL_ZFLAGS]]></c> and <marker id="ERL_FLAGS"/><c><![CDATA[ERL_FLAGS]]></c></tag>
- <item>
- <p>The content of these environment variables will be added to the
- end of the command line for <c><![CDATA[erl]]></c>.</p>
- <p>The <c><![CDATA[-extra]]></c> flag is treated specially. Its scope ends
- at the end of the environment variable content. Arguments
- following an <c><![CDATA[-extra]]></c> flag are moved on the command line into
- the <c><![CDATA[-extra]]></c> section, i.e. the end of the command line
- following after an <c><![CDATA[-extra]]></c> flag.</p>
+ <p>The content of this variable is added to the beginning of the
+ command line for <c><![CDATA[erl]]></c>.</p>
+ <p>Flag <c><![CDATA[-extra]]></c> is treated in a special way. Its
+ scope ends at the end of the environment variable content. Arguments
+ following an <c><![CDATA[-extra]]></c> flag are moved on the command
+ line into section <c><![CDATA[-extra]]></c>, that is, the end of the
+ command line following an <c><![CDATA[-extra]]></c> flag.</p>
+ </item>
+ <tag><marker id="ERL_ZFLAGS"/><c><![CDATA[ERL_ZFLAGS]]></c> and
+ <marker id="ERL_FLAGS"/><c><![CDATA[ERL_FLAGS]]></c></tag>
+ <item>
+ <p>The content of these variables are added to the end of the command
+ line for <c><![CDATA[erl]]></c>.</p>
+ <p>Flag <c><![CDATA[-extra]]></c> is treated in a special way. Its
+ scope ends at the end of the environment variable content. Arguments
+ following an <c><![CDATA[-extra]]></c> flag are moved on the command
+ line into section <c><![CDATA[-extra]]></c>, that is, the end of the
+ command line following an <c><![CDATA[-extra]]></c> flag.</p>
</item>
<tag><c><![CDATA[ERL_LIBS]]></c></tag>
<item>
- <p>This environment variable contains a list of additional library
- directories that the code server will search for applications and
- add to the code path.
- See <seealso marker="kernel:code">code(3)</seealso>.</p>
+ <p>Contains a list of additional library directories that the code
+ server searches for applications and adds to the code path; see
+ <seealso marker="kernel:code"><c>code(3)</c></seealso>.</p>
</item>
<tag><c><![CDATA[ERL_EPMD_ADDRESS]]></c></tag>
<item>
- <p>This environment variable may be set to a comma-separated
- list of IP addresses, in which case the
- <seealso marker="epmd">epmd</seealso> daemon
- will listen only on the specified address(es) and on the
- loopback address (which is implicitly added to the list if it
- has not been specified).</p>
+ <p>Can be set to a comma-separated list of IP addresses, in which case
+ the <seealso marker="epmd"><c>epmd</c></seealso> daemon listens only
+ on the specified address(es) and on the loopback address (which is
+ implicitly added to the list if it has not been specified).</p>
</item>
<tag><c><![CDATA[ERL_EPMD_PORT]]></c></tag>
<item>
- <p>This environment variable can contain the port number to use when
- communicating with <seealso marker="epmd">epmd</seealso>. The default
- port will work fine in most cases. A different port can be specified
+ <p>Can contain the port number to use when communicating with
+ <seealso marker="epmd"><c>epmd</c></seealso>. The default port works
+ fine in most cases. A different port can be specified
to allow nodes of independent clusters to co-exist on the same host.
- All nodes in a cluster must use the same epmd port number.</p>
+ All nodes in a cluster must use the same <c>epmd</c> port number.</p>
</item>
</taglist>
</section>
@@ -1539,59 +1581,64 @@
<section>
<marker id="configuration"></marker>
<title>Configuration</title>
- <p>The standard Erlang/OTP system can be re-configured to change the default
- behavior on start-up.</p>
+ <p>The standard Erlang/OTP system can be reconfigured to change the default
+ behavior on startup.</p>
<taglist>
- <tag>The .erlang Start-up File</tag>
- <item>
- <p>When Erlang/OTP is started, the system searches for a file named .erlang
- in the directory where Erlang/OTP is started. If not found, the user's home
- directory is searched for an .erlang file.</p>
- <p>If an .erlang file is found, it is assumed to contain valid Erlang expressions.
- These expressions are evaluated as if they were input to the shell.</p>
- <p>A typical .erlang file contains a set of search paths, for example:</p>
- <code type="none"><![CDATA[
- io:format("executing user profile in HOME/.erlang\n",[]).
- code:add_path("/home/calvin/test/ebin").
- code:add_path("/home/hobbes/bigappl-1.2/ebin").
- io:format(".erlang rc finished\n",[]).
- ]]></code>
- </item>
- <tag>user_default and shell_default</tag>
- <item>
- <p>Functions in the shell which are not prefixed by a module name are assumed
- to be functional objects (Funs), built-in functions (BIFs), or belong to the
- module user_default or shell_default.</p>
- <p>To include private shell commands, define them in a module user_default and
- add the following argument as the first line in the .erlang file.</p>
+ <tag>The <c>.erlang</c> startup file</tag>
+ <item>
+ <p>When Erlang/OTP is started, the system searches for a file named
+ <c>.erlang</c> in the directory where Erlang/OTP is started. If not
+ found, the user's home directory is searched for an <c>.erlang</c>
+ file.</p>
+ <p>If an <c>.erlang</c> file is found, it is assumed to contain valid
+ Erlang expressions. These expressions are evaluated as if they were
+ input to the shell.</p>
+ <p>A typical <c>.erlang</c> file contains a set of search paths, for
+ example:</p>
<code type="none"><![CDATA[
- code:load_abs("..../user_default").
- ]]></code>
- </item>
- <tag>erl</tag>
- <item>
- <p>If the contents of .erlang are changed and a private version of
- user_default is defined, it is possible to customize the Erlang/OTP environment.
- More powerful changes can be made by supplying command line arguments in the
- start-up script erl. Refer to erl(1) and <seealso marker="init">init(3)</seealso>
- for further information.</p>
- </item>
+io:format("executing user profile in HOME/.erlang\n",[]).
+code:add_path("/home/calvin/test/ebin").
+code:add_path("/home/hobbes/bigappl-1.2/ebin").
+io:format(".erlang rc finished\n",[]). ]]></code>
+ </item>
+ <tag>user_default and shell_default</tag>
+ <item>
+ <p>Functions in the shell that are not prefixed by a module name are
+ assumed to be functional objects (funs), built-in functions (BIFs),
+ or belong to the module <c>user_default</c> or
+ <c>shell_default</c>.</p>
+ <p>To include private shell commands, define them in a module
+ <c>user_default</c> and add the following argument as the first line
+ in the <c>.erlang</c> file:</p>
+ <code type="none"><![CDATA[
+code:load_abs("..../user_default"). ]]></code>
+ </item>
+ <tag>erl</tag>
+ <item>
+ <p>If the contents of <c>.erlang</c> are changed and a private version
+ of <c>user_default</c> is defined, the Erlang/OTP environment can be
+ customized. More powerful changes can be made by supplying
+ command-line arguments in the startup script <c>erl</c>. For more
+ information, see <seealso marker="init"><c>init(3)</c></seealso>.</p>
+ </item>
</taglist>
</section>
- <section>
- <title>SEE ALSO</title>
- <p><seealso marker="init">init(3)</seealso>,
- <seealso marker="erl_prim_loader">erl_prim_loader(3)</seealso>,
- <seealso marker="kernel:erl_boot_server">erl_boot_server(3)</seealso>,
- <seealso marker="kernel:code">code(3)</seealso>,
- <seealso marker="kernel:application">application(3)</seealso>,
- <seealso marker="kernel:heart">heart(3)</seealso>,
- <seealso marker="kernel:net_kernel">net_kernel(3)</seealso>,
- <seealso marker="kernel:auth">auth(3)</seealso>,
- <seealso marker="tools:make">make(3)</seealso>,
- <seealso marker="epmd">epmd(1)</seealso>,
- <seealso marker="erts_alloc">erts_alloc(3)</seealso></p>
+ <section>
+ <title>See Also</title>
+ <p><seealso marker="epmd"><c>epmd(1)</c></seealso>,
+ <seealso marker="erl_prim_loader"><c>erl_prim_loader(3)</c></seealso>,
+ <seealso marker="erts_alloc"><c>erts_alloc(3)</c></seealso>,
+ <seealso marker="init"><c>init(3)</c></seealso>,
+ <seealso marker="kernel:application">
+ <c>application(3)</c></seealso>,
+ <seealso marker="kernel:auth"><c>auth(3)</c></seealso>,
+ <seealso marker="kernel:code"><c>code(3)</c></seealso>,
+ <seealso marker="kernel:erl_boot_server">
+ <c>erl_boot_server(3)</c></seealso>,
+ <seealso marker="kernel:heart"><c>heart(3)</c></seealso>,
+ <seealso marker="kernel:net_kernel"><c>net_kernel(3)</c></seealso>,
+ <seealso marker="tools:make"><c>make(3)</c></seealso></p>
</section>
</comref>
diff --git a/erts/doc/src/erl_dist_protocol.xml b/erts/doc/src/erl_dist_protocol.xml
index f9fa981d9a..ee74983730 100644
--- a/erts/doc/src/erl_dist_protocol.xml
+++ b/erts/doc/src/erl_dist_protocol.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2007</year>
- <year>2015</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -32,1049 +32,989 @@
<file>erl_dist_protocol.xml</file>
</header>
-<p>
-The description here is far from complete and will therefore be further
-refined in upcoming releases.
-
-The protocols both from Erlang nodes towards
-EPMD (Erlang Port Mapper Daemon) and between Erlang nodes, however, are
-stable since many years.
-</p>
-
-<p>The distribution protocol can be divided into four (4) parts:</p>
-<list>
- <item>
- <p>
- 1. Low level socket connection.
- </p>
- </item>
- <item>
- 2. Handshake, interchange node name and authenticate.
- </item>
- <item>
- 3. Authentication (done by net_kernel).
- </item>
- <item>
- 4. Connected.
- </item>
-</list>
-<p>
- A node fetches the Port number of another node through the EPMD (at the
- other host) in order to initiate a connection request.
-</p>
-<p>
-For each host where a distributed Erlang node is running there should also
-be an EPMD running. The EPMD can be started explicitly or automatically
-as a result of the Erlang node startup.
-</p>
-<p>
-By default EPMD listens on port 4369.
-</p>
-<p>
- 3 and 4 are performed at the same level but the net_kernel disconnects the
- other node if it communicates using an invalid cookie (after one (1) second).
-</p>
-
-<p>The integers in all multi-byte fields are in big-endian order.</p>
+ <p>This description is far from complete. It will be updated if the
+ protocol is updated. However, the protocols, both from Erlang
+ nodes to the Erlang Port Mapper Daemon (EPMD) and between Erlang nodes
+ are stable since many years.</p>
+
+ <p>The distribution protocol can be divided into four parts:</p>
+
+ <list type="bulleted">
+ <item>
+ <p>Low-level socket connection (1)</p>
+ </item>
+ <item>
+ <p>Handshake, interchange node name, and authenticate (2)</p>
+ </item>
+ <item>
+ <p>Authentication (done by <seealso marker="kernel:net_kernel">
+ <c>net_kernel(3)</c></seealso>) (3)</p>
+ </item>
+ <item>
+ <p>Connected (4)</p>
+ </item>
+ </list>
+
+ <p>A node fetches the port number of another node through the EPMD (at the
+ other host) to initiate a connection request.</p>
+
+ <p>For each host, where a distributed Erlang node is running, also an EPMD
+ is to be running. The EPMD can be started explicitly or automatically
+ as a result of the Erlang node startup.</p>
+
+ <p>By default the EPMD listens on port 4369.</p>
+
+ <p>(3) and (4) above are performed at the same level but the <c>net_kernel</c>
+ disconnects the other node if it communicates using an invalid cookie (after
+ 1 second).</p>
+
+ <p>The integers in all multibyte fields are in big-endian order.</p>
<section>
<title>EPMD Protocol</title>
- <p>
- The requests served by the EPMD (Erlang Port Mapper Daemon) are
- summarized in the figure below.
- </p>
-
- <image file="erl_ext_fig.gif">
- <icaption>
- Summary of EPMD requests.
- </icaption>
- </image>
- <p>
- Each request <c>*_REQ</c> is preceded by a two-byte length field.
- Thus, the overall request format is:
- </p>
+ <p>The requests served by the EPMD are summarized in the following
+ figure.</p>
+
+ <image file="erl_ext_fig.gif">
+ <icaption>Summary of EPMD Requests</icaption>
+ </image>
+
+ <p>Each request <c>*_REQ</c> is preceded by a 2 byte length field.
+ Thus, the overall request format is as follows:</p>
+
+ <table align="left">
+ <row>
+ <cell align="center">2</cell>
+ <cell align="center">n</cell>
+ </row>
+ <row>
+ <cell align="center"><c>Length</c></cell>
+ <cell align="center"><c>Request</c></cell>
+ </row>
+ <tcaption>Request Format</tcaption>
+ </table>
+
+ <section>
+ <title>Register a Node in EPMD</title>
+ <p>When a distributed node is started it registers itself in the EPMD.
+ The message <c>ALIVE2_REQ</c> described below is sent from the node to
+ the EPMD. The response from the EPMD is <c>ALIVE2_RESP</c>.</p>
+
+ <table align="left">
+ <row>
+ <cell align="center">1</cell>
+ <cell align="center">2</cell>
+ <cell align="center">1</cell>
+ <cell align="center">1</cell>
+ <cell align="center">2</cell>
+ <cell align="center">2</cell>
+ <cell align="center">2</cell>
+ <cell align="center">Nlen</cell>
+ <cell align="center">2</cell>
+ <cell align="center">Elen</cell>
+ </row>
+ <row>
+ <cell align="center"><c>120</c></cell>
+ <cell align="center"><c>PortNo</c></cell>
+ <cell align="center"><c>NodeType</c></cell>
+ <cell align="center"><c>Protocol</c></cell>
+ <cell align="center"><c>HighestVersion</c></cell>
+ <cell align="center"><c>LowestVersion</c></cell>
+ <cell align="center"><c>Nlen</c></cell>
+ <cell align="center"><c>NodeName</c></cell>
+ <cell align="center"><c>Elen</c></cell>
+ <cell align="center"><c>Extra</c></cell>
+ </row>
+ <tcaption>ALIVE2_REQ (120)</tcaption>
+ </table>
+
+ <taglist>
+ <tag><c>PortNo</c></tag>
+ <item>
+ <p>The port number on which the node accept connection requests.</p>
+ </item>
+ <tag><c>NodeType</c></tag>
+ <item>
+ <p>77 = normal Erlang node, 72 = hidden node (C-node), ...</p>
+ </item>
+ <tag><c>Protocol</c></tag>
+ <item>
+ <p>0 = TCP/IPv4, ...</p>
+ </item>
+ <tag><c>HighestVersion</c></tag>
+ <item>
+ <p>The highest distribution version that this node can handle.
+ The value in Erlang/OTP R6B and later is 5.</p>
+ </item>
+ <tag><c>LowestVersion</c></tag>
+ <item>
+ <p>The lowest distribution version that this node can handle.
+ The value in Erlang/OTP R6B and later is 5.</p>
+ </item>
+ <tag><c>Nlen</c></tag>
+ <item>
+ <p>The length (in bytes) of field <c>NodeName</c>.</p>
+ </item>
+ <tag><c>NodeName</c></tag>
+ <item>
+ <p>The node name as an UTF-8 encoded string of <c>Nlen</c> bytes.</p>
+ </item>
+ <tag><c>Elen</c></tag>
+ <item>
+ <p>The length of field <c>Extra</c>.</p>
+ </item>
+ <tag><c>Extra</c></tag>
+ <item>
+ <p>Extra field of <c>Elen</c> bytes.</p>
+ </item>
+ </taglist>
+
+ <p>The connection created to the EPMD must be kept as long as the
+ node is a distributed node. When the connection is closed,
+ the node is automatically unregistered from the EPMD.</p>
+
+ <p>The response message <c>ALIVE2_RESP</c> is as follows:</p>
+
+ <table align="left">
+ <row>
+ <cell align="center">1</cell>
+ <cell align="center">1</cell>
+ <cell align="center">2</cell>
+ </row>
+ <row>
+ <cell align="center"><c>121</c></cell>
+ <cell align="center"><c>Result</c></cell>
+ <cell align="center"><c>Creation</c></cell>
+ </row>
+ <tcaption>ALIVE2_RESP (121)</tcaption>
+ </table>
+
+ <p>Result = 0 -> ok, result &gt; 0 -> error.</p>
+ </section>
+
+ <section>
+ <title>Unregister a Node from EPMD</title>
+ <p>A node unregisters itself from the EPMD by closing the TCP
+ connection to EPMD established when the node was registered.</p>
+ </section>
+
+ <section>
+ <title>Get the Distribution Port of Another Node</title>
+ <p>When one node wants to connect to another node it starts with
+ a <c>PORT_PLEASE2_REQ</c> request to the EPMD on the host where the
+ node resides to get the distribution port that the node listens to.</p>
+
+ <table align="left">
+ <row>
+ <cell align="center">1</cell>
+ <cell align="center">N</cell>
+ </row>
+ <row>
+ <cell align="center"><c>122</c></cell>
+ <cell align="center"><c>NodeName</c></cell>
+ </row>
+ <tcaption>PORT_PLEASE2_REQ (122)</tcaption>
+ </table>
+
+ <p>where N = <c>Length</c> - 1.</p>
+
+ <table align="left">
+ <row>
+ <cell align="center">1</cell>
+ <cell align="center">1</cell>
+ </row>
+ <row>
+ <cell align="center"><c>119</c></cell>
+ <cell align="center"><c>Result</c></cell>
+ </row>
+ <tcaption>PORT2_RESP (119) Response Indicating Error, Result &gt; 0
+ </tcaption>
+ </table>
+
+ <p>or</p>
+
+ <table align="left">
+ <row>
+ <cell align="center">1</cell>
+ <cell align="center">1</cell>
+ <cell align="center">2</cell>
+ <cell align="center">1</cell>
+ <cell align="center">1</cell>
+ <cell align="center">2</cell>
+ <cell align="center">2</cell>
+ <cell align="center">2</cell>
+ <cell align="center">Nlen</cell>
+ <cell align="center">2</cell>
+ <cell align="center">Elen</cell>
+ </row>
+ <row>
+ <cell align="center"><c>119</c></cell>
+ <cell align="center"><c>Result</c></cell>
+ <cell align="center"><c>PortNo</c></cell>
+ <cell align="center"><c>NodeType</c></cell>
+ <cell align="center"><c>Protocol</c></cell>
+ <cell align="center"><c>HighestVersion</c></cell>
+ <cell align="center"><c>LowestVersion</c></cell>
+ <cell align="center"><c>Nlen</c></cell>
+ <cell align="center"><c>NodeName</c></cell>
+ <cell align="center"><c>Elen</c></cell>
+ <cell align="center">><c>Extra</c></cell>
+ </row>
+ <tcaption>PORT2_RESP, Result = 0</tcaption>
+ </table>
+
+ <p>If <c>Result</c> &gt; 0, the packet only consists of
+ <c>[119, Result]</c>.</p>
+
+ <p>The EPMD closes the socket when it has sent the information.</p>
+ </section>
+
+ <section>
+ <title>Get All Registered Names from EPMD</title>
+ <p>This request is used through the Erlang function
+ <seealso marker="kernel:net_adm#names/1,2">
+ <c>net_adm:names/1,2</c></seealso>. A TCP connection is opened
+ to the EPMD and this request is sent.</p>
+
+ <table align="left">
+ <row>
+ <cell align="center">1</cell>
+ </row>
+ <row>
+ <cell align="center"><c>110</c></cell>
+ </row>
+ <tcaption>NAMES_REQ (110)</tcaption>
+ </table>
+
+ <p>The response for a <c>NAMES_REQ</c> is as follows:</p>
+
+ <table align="left">
+ <row>
+ <cell align="center">4</cell>
+ <cell align="center">&nbsp;</cell>
+ </row>
+ <row>
+ <cell align="center"><c>EPMDPortNo</c></cell>
+ <cell align="center"><c>NodeInfo*</c></cell>
+ </row>
+ <tcaption>NAMES_RESP</tcaption>
+ </table>
+
+ <p><c>NodeInfo</c> is a string written for each active node.
+ When all <c>NodeInfo</c> has been written the connection is
+ closed by the EPMD.</p>
+
+ <p><c>NodeInfo</c> is, as expressed in Erlang:</p>
+
+ <code>
+io:format("name ~ts at port ~p~n", [NodeName, Port]).</code>
+ </section>
+
+ <section>
+ <title>Dump All Data from EPMD</title>
+ <p>This request is not really used, it is to be regarded as a debug
+ feature.</p>
+
+ <table align="left">
+ <row>
+ <cell align="center">1</cell>
+ </row>
+ <row>
+ <cell align="center"><c>100</c></cell>
+ </row>
+ <tcaption>DUMP_REQ</tcaption>
+ </table>
+
+ <p>The response for a <c>DUMP_REQ</c> is as follows:</p>
+
+ <table align="left">
+ <row>
+ <cell align="center">4</cell>
+ <cell align="center">&nbsp;</cell>
+ </row>
+ <row>
+ <cell align="center"><c>EPMDPortNo</c></cell>
+ <cell align="center"><c>NodeInfo*</c></cell>
+ </row>
+ <tcaption>DUMP_RESP</tcaption>
+ </table>
+
+ <p><c>NodeInfo</c> is a string written for each node kept in the EPMD.
+ When all <c>NodeInfo</c> has been written the connection is
+ closed by the EPMD.</p>
+
+ <p><c>NodeInfo</c> is, as expressed in Erlang:</p>
+
+ <code>
+io:format("active name ~ts at port ~p, fd = ~p~n",
+ [NodeName, Port, Fd]).</code>
+
+ <p>or</p>
+
+ <code>
+io:format("old/unused name ~ts at port ~p, fd = ~p ~n",
+ [NodeName, Port, Fd]).</code>
+ </section>
+
+ <section>
+ <title>Kill EPMD</title>
+ <p>This request kills the running EPMD. It is almost never used.</p>
<table align="left">
- <row>
- <cell align="center">2</cell>
- <cell align="center">n</cell>
- </row>
- <row>
- <cell align="center">Length</cell>
- <cell align="center">Request</cell>
- </row>
- <tcaption></tcaption></table>
-
- <section>
- <title>Register a node in the EPMD</title>
- <p>
- When a distributed node is started it registers itself in EPMD.
- The message ALIVE2_REQ described below is sent from the node towards
- EPMD. The response from EPMD is ALIVE2_RESP.
- </p>
- <table align="left">
- <row>
- <cell align="center">1</cell>
- <cell align="center">2</cell>
- <cell align="center">1</cell>
- <cell align="center">1</cell>
- <cell align="center">2</cell>
- <cell align="center">2</cell>
- <cell align="center">2</cell>
- <cell align="center">Nlen</cell>
- <cell align="center">2</cell>
- <cell align="center">Elen</cell>
- </row>
- <row>
- <cell align="center">120</cell>
- <cell align="center">PortNo</cell>
- <cell align="center">NodeType</cell>
- <cell align="center">Protocol</cell>
- <cell align="center">HighestVersion</cell>
- <cell align="center">LowestVersion</cell>
- <cell align="center">Nlen</cell>
- <cell align="center">NodeName</cell>
- <cell align="center">Elen</cell>
- <cell align="center">Extra</cell>
- </row>
- <tcaption>ALIVE2_REQ (120)</tcaption></table>
- <taglist>
- <tag><c>PortNo</c></tag>
- <item>
- The port number on which the node accept connection requests.
- </item>
- <tag><c>NodeType</c></tag>
- <item>
- 77 = normal Erlang node, 72 = hidden node (C-node),...
- </item>
- <tag><c>Protocol</c></tag>
- <item>
- 0 = tcp/ip-v4, ...
- </item>
- <tag><c>HighestVersion</c></tag>
- <item>
- The highest distribution version that this node can handle.
- The value in R6B and later is 5.
- </item>
- <tag><c>LowestVersion</c></tag>
- <item>
- The lowest distribution version that this node can handle.
- The value in R6B and later is 5.
- </item>
- <tag><c>Nlen</c></tag>
- <item>
- The length (in bytes) of the <c>NodeName</c> field.
- </item>
- <tag><c>NodeName</c></tag>
- <item>
- The NodeName as an UTF-8 encoded string of
- <c>Nlen</c> bytes.
- </item>
- <tag><c>Elen</c></tag>
- <item>
- The length of the <c>Extra</c> field.
- </item>
- <tag><c>Extra</c></tag>
- <item>
- Extra field of <c>Elen</c> bytes.
- </item>
- </taglist>
- <p>
- The connection created to the EPMD must be kept as long as the
- node is a distributed node. When the connection is closed
- the node is automatically unregistered from the EPMD.
- </p>
- <p>
- The response message ALIVE2_RESP is described below.
- </p>
-
- <table align="left">
- <row>
- <cell align="center">1</cell>
- <cell align="center">1</cell>
- <cell align="center">2</cell>
- </row>
- <row>
- <cell align="center">121</cell>
- <cell align="center">Result</cell>
- <cell align="center">Creation</cell>
- </row>
- <tcaption>ALIVE2_RESP (121)</tcaption></table>
- <p>
- Result = 0 -> ok, Result > 0 -> error
- </p>
- </section>
-
- <section>
- <title>Unregister a node from the EPMD</title>
- <p>
- A node unregisters itself from the EPMD by simply closing the
- TCP connection towards EPMD established when the node was registered.
- </p>
- </section>
-
- <section>
- <title>Get the distribution port of another node</title>
- <p>
- When one node wants to connect to another node it starts with
- a PORT_PLEASE2_REQ request towards EPMD on the host where the
- node resides in order to get the distribution port that the node
- listens to.
- </p>
-
- <table align="left">
- <row>
- <cell align="center">1</cell>
- <cell align="center">N</cell>
- </row>
- <row>
- <cell align="center">122</cell>
- <cell align="center">NodeName</cell>
- </row>
- <tcaption>PORT_PLEASE2_REQ (122)</tcaption></table>
- <p>
- where N = Length - 1
- </p>
-
- <p>
- </p>
+ <row>
+ <cell align="center">1</cell>
+ </row>
+ <row>
+ <cell align="center"><c>107</c></cell>
+ </row>
+ <tcaption>KILL_REQ</tcaption>
+ </table>
+
+ <p>The response for a <c>KILL_REQ</c> is as follows:</p>
+
<table align="left">
- <row>
- <cell align="center">1</cell>
- <cell align="center">1</cell>
- </row>
- <row>
- <cell align="center">119</cell>
- <cell align="center">Result</cell>
- </row>
- <tcaption>
- PORT2_RESP (119) response indicating error, Result > 0.
- </tcaption>
+ <row>
+ <cell align="center">2</cell>
+ </row>
+ <row>
+ <cell align="center"><c>OKString</c></cell>
+ </row>
+ <tcaption>KILL_RESP</tcaption>
</table>
- <p>Or</p>
+
+ <p>where <c>OKString</c> is "OK".</p>
+ </section>
+
+ <section>
+ <title>STOP_REQ (Not Used)</title>
<table align="left">
- <row>
- <cell align="center">1</cell>
- <cell align="center">1</cell>
- <cell align="center">2</cell>
- <cell align="center">1</cell>
- <cell align="center">1</cell>
- <cell align="center">2</cell>
- <cell align="center">2</cell>
- <cell align="center">2</cell>
- <cell align="center">Nlen</cell>
- <cell align="center">2</cell>
- <cell align="center">Elen</cell>
- </row>
- <row>
- <cell align="center">119</cell>
- <cell align="center">Result</cell>
- <cell align="center">PortNo</cell>
- <cell align="center">NodeType</cell>
- <cell align="center">Protocol</cell>
- <cell align="center">HighestVersion</cell>
- <cell align="center">LowestVersion</cell>
- <cell align="center">Nlen</cell>
- <cell align="center">NodeName</cell>
- <cell align="center">Elen</cell>
- <cell align="center">Extra</cell>
- </row>
- <tcaption>PORT2_RESP when Result = 0.</tcaption></table>
-<p>
-If Result > 0, the packet only consists of [119, Result].
-</p>
-
- <p>EPMD will close the socket as soon as it has sent the information.</p>
- </section>
-
- <section>
- <title>Get all registered names from EPMD</title>
- <p>
- This request is used via the Erlang function
- <c>net_adm:names/1,2</c>. A TCP connection is opened
- towards EPMD and this request is sent.
- </p>
- <table align="left">
- <row>
- <cell align="center">1</cell>
- </row>
- <row>
- <cell align="center">110</cell>
- </row>
- <tcaption>NAMES_REQ (110)</tcaption></table>
-
-
- <p>The response for a <c>NAMES_REQ</c> looks like this:</p>
- <table align="left">
- <row>
- <cell align="center">4</cell>
- <cell align="center">&nbsp;</cell>
- </row>
- <row>
- <cell align="center">EPMDPortNo</cell>
- <cell align="center">NodeInfo*</cell>
- </row>
- <tcaption>NAMES_RESP</tcaption></table>
- <p>
- NodeInfo is a string written for each active node.
- When all NodeInfo has been written the connection is
- closed by EPMD.
- </p>
- <p>
- NodeInfo is, as expressed in Erlang:
- </p>
- <code>
- io:format("name ~ts at port ~p~n", [NodeName, Port]).
- </code>
- </section>
-
-
- <section>
- <title>Dump all data from EPMD</title>
- <p>
- This request is not really used, it should be regarded as a debug
- feature.
- </p>
- <table align="left">
- <row>
- <cell align="center">1</cell>
- </row>
- <row>
- <cell align="center">100</cell>
- </row>
- <tcaption>DUMP_REQ</tcaption></table>
-
- <p>The response for a <c>DUMP_REQ</c> looks like this:</p>
- <table align="left">
- <row>
- <cell align="center">4</cell>
- <cell align="center">&nbsp;</cell>
- </row>
- <row>
- <cell align="center">EPMDPortNo</cell>
- <cell align="center">NodeInfo*</cell>
- </row>
- <tcaption>DUMP_RESP</tcaption></table>
- <p>
- NodeInfo is a string written for each node kept in EPMD.
- When all NodeInfo has been written the connection is
- closed by EPMD.
- </p>
- <p>
- NodeInfo is, as expressed in Erlang:
- </p>
- <code>
- io:format("active name ~ts at port ~p, fd = ~p~n",
- [NodeName, Port, Fd]).
- </code>
- <p>
- or
- </p>
- <code>
- io:format("old/unused name ~ts at port ~p, fd = ~p ~n",
- [NodeName, Port, Fd]).
- </code>
-
- </section>
-
- <section>
- <title>Kill the EPMD</title>
- <p>
- This request will kill the running EPMD. It is almost never used.
- </p>
- <table align="left">
- <row>
- <cell align="center">1</cell>
- </row>
- <row>
- <cell align="center">107</cell>
- </row>
- <tcaption>KILL_REQ</tcaption></table>
-
- <p>The response fo a <c>KILL_REQ</c> looks like this:</p>
- <table align="left">
- <row>
- <cell align="center">2</cell>
- </row>
- <row>
- <cell align="center">OKString</cell>
- </row>
- <tcaption>KILL_RESP</tcaption></table>
- <p>
- where <c>OKString</c> is "OK".
- </p>
- </section>
-
- <section>
- <title>STOP_REQ (Not Used)</title>
- <p></p>
- <table align="left">
- <row>
- <cell align="center">1</cell>
- <cell align="center">n</cell>
- </row>
- <row>
- <cell align="center">115</cell>
- <cell align="center">NodeName</cell>
- </row>
- <tcaption>STOP_REQ</tcaption></table>
- <p>
- where n = Length - 1
- </p>
- <p>
- The current implementation of Erlang does not care if the connection
- to the EPMD is broken.
- </p>
- <p>The response for a <c>STOP_REQ</c> looks like this.</p>
- <table align="left">
- <row>
- <cell align="center">7</cell>
- </row>
- <row>
- <cell align="center">OKString</cell>
- </row>
- <tcaption>STOP_RESP</tcaption></table>
- <p>
- where OKString is "STOPPED".
- </p>
- <p>A negative response can look like this.</p>
- <table align="left">
- <row>
- <cell align="center">7</cell>
- </row>
- <row>
- <cell align="center">NOKString</cell>
- </row>
- <tcaption>STOP_NOTOK_RESP</tcaption></table>
- <p>
- where NOKString is "NOEXIST".
- </p>
- </section>
+ <row>
+ <cell align="center">1</cell>
+ <cell align="center">n</cell>
+ </row>
+ <row>
+ <cell align="center"><c>115</c></cell>
+ <cell align="center"><c>NodeName</c></cell>
+ </row>
+ <tcaption>STOP_REQ</tcaption>
+ </table>
+
+ <p>where n = <c>Length</c> - 1.</p>
+
+ <p>The current implementation of Erlang does not care if the connection
+ to the EPMD is broken.</p>
+
+ <p>The response for a <c>STOP_REQ</c> is as follows:</p>
+
+ <table align="left">
+ <row>
+ <cell align="center">7</cell>
+ </row>
+ <row>
+ <cell align="center"><c>OKString</c></cell>
+ </row>
+ <tcaption>STOP_RESP</tcaption>
+ </table>
+
+ <p>where <c>OKString</c> is "STOPPED".</p>
+
+ <p>A negative response can look as follows:</p>
+
+ <table align="left">
+ <row>
+ <cell align="center">7</cell>
+ </row>
+ <row>
+ <cell align="center"><c>NOKString</c></cell>
+ </row>
+ <tcaption>STOP_NOTOK_RESP</tcaption>
+ </table>
+
+ <p>where <c>NOKString</c> is "NOEXIST".</p>
+ </section>
<!--
- <section>
- <title>ALIVE_REQ (97)</title>
- <p></p>
-
- <table align="left">
- <row>
- <cell align="center">1</cell>
- <cell align="center">2</cell>
- <cell align="center">n</cell>
- </row>
- <row>
- <cell align="center">97</cell>
- <cell align="center">PortNo</cell>
- <cell align="center">NodeName</cell>
- </row>
- <tcaption></tcaption></table>
-
- <p>
- where n = Length - 3
- </p>
- <p>
- The connection created to the EPMD must be kept until the node is
- not a distributed node any longer.
- </p>
- </section>
-
- <section>
- <title>ALIVE_OK_RESP (89)</title>
- <p></p>
- <table align="left">
- <row>
- <cell align="center">1</cell>
- <cell align="center">2</cell>
- </row>
- <row>
- <cell align="center">89</cell>
- <cell align="center">Creation</cell>
- </row>
- <tcaption></tcaption></table>
- </section>
-
-
- <section>
- <title>ALIVE_NOTOK_RESP ()</title>
- <p>
- EPMD closed the connection.
- </p>
- </section>
-
- <section>
- <title>PORT_PLEASE_REQ (112)</title>
- <p></p>
+ <section>
+ <title>ALIVE_REQ (97)</title>
+ <table align="left">
+ <row>
+ <cell align="center">1</cell>
+ <cell align="center">2</cell>
+ <cell align="center">n</cell>
+ </row>
+ <row>
+ <cell align="center"><c>97</c></cell>
+ <cell align="center"><c>PortNo</c></cell>
+ <cell align="center"><c>NodeName</c></cell>
+ </row>
+ <tcaption></tcaption>
+ </table>
+
+ <p>where n = <c>Length</c> - 3.</p>
+
+ <p>The connection created to the EPMD must be kept until the node is
+ not a distributed node any longer.</p>
+ </section>
+
+ <section>
+ <title>ALIVE_OK_RESP (89)</title>
+ <table align="left">
+ <row>
+ <cell align="center">1</cell>
+ <cell align="center">2</cell>
+ </row>
+ <row>
+ <cell align="center"><c>89</c></cell>
+ <cell align="center"><c>Creation</c></cell>
+ </row>
+ <tcaption></tcaption>
+ </table>
+ </section>
+
+ <section>
+ <title>ALIVE_NOTOK_RESP ()</title>
+ <p>The EPMD closed the connection.</p>
+ </section>
+
+ <section>
+ <title>PORT_PLEASE_REQ (112)</title>
+ <table align="left">
+ <row>
+ <cell align="center">1</cell>
+ <cell align="center">n</cell>
+ </row>
+ <row>
+ <cell align="center"><c>112</c></cell>
+ <cell align="center"><c>NodeName</c></cell>
+ </row>
+ <tcaption></tcaption>
+ </table>
+
+ <p>where n = <c>Length</c> - 1.</p>
+ </section>
+
+ <section>
+ <title>PORT_OK_RESP ()</title>
<table align="left">
- <row>
- <cell align="center">1</cell>
- <cell align="center">n</cell>
- </row>
- <row>
- <cell align="center">112</cell>
- <cell align="center">NodeName</cell>
- </row>
- <tcaption></tcaption></table>
- <p>
- where n = Length - 1
- </p>
- </section>
-
- <section>
- <title>PORT_OK_RESP ()</title>
- <p></p>
- <table align="left">
- <row>
- <cell align="center">2</cell>
- </row>
- <row>
- <cell align="center">PortNo</cell>
- </row>
- <tcaption></tcaption></table>
-
- </section>
-
- <section>
- <title>PORT_NOTOK_RESP ()</title>
- <p>
- EPMD closed the connection.
- </p>
- </section>
-
-
- <section>
- <title>PORT_NOTOK_RESP ()</title>
- <p>
- EPMD closed the connection.
- </p>
- </section>
+ <row>
+ <cell align="center">2</cell>
+ </row>
+ <row>
+ <cell align="center"><c>PortNo</c></cell>
+ </row>
+ <tcaption></tcaption>
+ </table>
+ </section>
+
+ <section>
+ <title>PORT_NOTOK_RESP ()</title>
+ <p>The EPMD closed the connection.</p>
+ </section>
+
+ <section>
+ <title>PORT_NOTOK_RESP ()</title>
+ <p>The EPMD closed the connection.</p>
+ </section>
-->
+ </section>
+
+ <section>
+ <marker id="distribution_handshake"/>
+ <title>Distribution Handshake</title>
+ <p>This section describes the distribution handshake protocol introduced
+ in Erlang/OTP R6. This description was previously located in
+ <c>$ERL_TOP/lib/kernel/internal_doc/distribution_handshake.txt</c> and
+ has more or less been copied and "formatted" here. It has been almost
+ unchanged since 1999, but the handshake has not changed much since then
+ either.</p>
+
+ <section>
+ <title>General</title>
+ <p>The TCP/IP distribution uses a handshake that expects a
+ connection-based protocol, that is, the protocol does not include any
+ authentication after the handshake procedure.</p>
+
+ <p>This is not entirely safe, as it is vulnerable against takeover
+ attacks, but it is a tradeoff between fair safety and performance.</p>
+
+ <p>The cookies are never sent in cleartext and the handshake procedure
+ expects the client (called <c>A</c>) to be the first one to prove that
+ it can generate a sufficient digest. The digest is generated with the
+ MD5 message digest algorithm and the challenges are expected to be
+ random numbers.</p>
+ </section>
+ <section>
+ <title>Definitions</title>
+ <p>A challenge is a 32-bit integer in big-endian order. Below the function
+ <c>gen_challenge()</c> returns a random 32-bit integer used as a
+ challenge.</p>
+
+ <p>A digest is a (16 bytes) MD5 hash of the challenge (as text)
+ concatenated with the cookie (as text). Below, the function
+ <c>gen_digest(Challenge, Cookie)</c> generates a digest as described
+ above.</p>
+
+ <p>An <c>out_cookie</c> is the cookie used in outgoing communication to a
+ certain node, so that <c>A</c>'s <c>out_cookie</c> for <c>B</c> is to
+ correspond with <c>B</c>'s <c>in_cookie</c> for <c>A</c> and conversely.
+ <c>A</c>'s <c>out_cookie</c> for <c>B</c> and <c>A</c>'s
+ <c>in_cookie</c> for <c>B</c> need <em>not</em> be the same. Below the
+ function <c>out_cookie(Node)</c> returns the current node's
+ <c>out_cookie</c> for <c>Node</c>.</p>
+
+ <p>An <c>in_cookie</c> is the cookie expected to be used by another node
+ when communicating with us, so that <c>A</c>'s <c>in_cookie</c> for
+ <c>B</c> corresponds with <c>B</c>'s <c>out_cookie</c> for <c>A</c>.
+ Below the function <c>in_cookie(Node)</c> returns the current node's
+ <c>in_cookie</c> for <c>Node</c>.</p>
+
+ <p>The cookies are text strings that can be viewed as passwords.</p>
+
+ <p>Every message in the handshake starts with a 16-bit big-endian integer,
+ which contains the message length (not counting the two initial bytes).
+ In Erlang this corresponds to option <c>{packet, 2}</c> in
+ <seealso marker="kernel:gen_tcp"><c>gen_tcp(3)</c></seealso>.
+ Notice that after the handshake, the distribution switches to 4 byte
+ packet headers.</p>
</section>
- <section>
- <title>Distribution Handshake</title>
- <p>
- <marker id="distribution_handshake"/>
- This section describes the distribution handshake protocol
- introduced in the OTP-R6 release of Erlang/OTP. This
- description was previously located in
- <c>$ERL_TOP/lib/kernel/internal_doc/distribution_handshake.txt</c>,
- and has more or less been copied and "formatted" here. It has been
- more or less unchanged since the year 1999, but the handshake
- should not have changed much since then either.
- </p>
- <section>
- <title>General</title>
- <p>
- The TCP/IP distribution uses a handshake which expects a
- connection based protocol, i.e. the protocol does not include
- any authentication after the handshake procedure.
- </p>
- <p>
- This is not entirely safe, as it is vulnerable against takeover
- attacks, but it is a tradeoff between fair safety and performance.
- </p>
- <p>
- The cookies are never sent in cleartext and the handshake procedure
- expects the client (called A) to be the first one to prove that it can
- generate a sufficient digest. The digest is generated with the
- MD5 message digest algorithm and the challenges are expected to be very
- random numbers.
- </p>
- </section>
- <section>
- <title>Definitions</title>
- <p>
- A challenge is a 32 bit integer number in big endian order. Below the function
- <c>gen_challenge()</c> returns a random 32 bit integer used as a challenge.
- </p>
- <p>
- A digest is a (16 bytes) MD5 hash of the Challenge (as text) concatenated
- with the cookie (as text). Below, the function <c>gen_digest(Challenge, Cookie)</c>
- generates a digest as described above.
- </p>
- <p>
- An out_cookie is the cookie used in outgoing communication to a certain node,
- so that A's out_cookie for B should correspond with B's in_cookie for A and
- the other way around. A's out_cookie for B and A's in_cookie for B need <em>NOT</em>
- be the same. Below the function <c>out_cookie(Node)</c> returns the current
- node's out_cookie for <c>Node</c>.
- </p>
- <p>
- An in_cookie is the cookie expected to be used by another node when
- communicating with us, so that A's in_cookie for B corresponds with B's
- out_cookie for A. Below the function <c>in_cookie(Node)</c> returns the current
- node's <c>in_cookie</c> for <c>Node</c>.
- </p>
- <p>
- The cookies are text strings that can be viewed as passwords.
- </p>
- <p>
- Every message in the handshake starts with a 16 bit big endian integer
- which contains the length of the message (not counting the two initial bytes).
- In erlang this corresponds to the <c>gen_tcp</c> option <c>{packet, 2}</c>. Note that after
- the handshake, the distribution switches to 4 byte packet headers.
- </p>
-
- </section>
- <section>
- <title>The Handshake in Detail</title>
- <p>
- Imagine two nodes, node A, which initiates the handshake and node B, which
- accepts the connection.
- </p>
- <taglist>
- <tag>1) connect/accept</tag>
- <item><p>A connects to B via TCP/IP and B accepts the connection.</p></item>
- <tag>2) send_name/receive_name</tag>
- <item><p>A sends an initial identification to B. B receives the message.
- The message looks like this (every "square" being one byte and the packet
- header removed):
- </p>
-<pre>
+
+ <section>
+ <title>The Handshake in Detail</title>
+ <p>Imagine two nodes, <c>A</c> that initiates the handshake and <c>B</c>
+ that accepts the connection.</p>
+
+ <taglist>
+ <tag>1) connect/accept</tag>
+ <item>
+ <p><c>A</c> connects to <c>B</c> through TCP/IP and <c>B</c> accepts
+ the connection.</p>
+ </item>
+ <tag>2) <c>send_name</c>/<c>receive_name</c></tag>
+ <item>
+ <p><c>A</c> sends an initial identification to <c>B</c>, which
+ receives the message. The message looks as follows (every "square"
+ is one byte and the packet header is removed):</p>
+ <pre>
+---+--------+--------+-----+-----+-----+-----+-----+-----+-...-+-----+
|'n'|Version0|Version1|Flag0|Flag1|Flag2|Flag3|Name0|Name1| ... |NameN|
-+---+--------+--------+-----+-----+-----+-----+-----+-----+-... +-----+
-</pre>
- <p>
- The 'n' is just a message tag.
- Version0 and Version1 is the distribution version selected by node A,
- based on information from EPMD. (16 bit big endian)
- Flag0 ... Flag3 are capability flags, the capabilities defined in
- <c>$ERL_TOP/lib/kernel/include/dist.hrl</c>.
- (32 bit big endian)
- Name0 ... NameN is the full nodename of A, as a string of bytes (the
- packet length denotes how long it is).
- </p></item>
- <tag>3) recv_status/send_status</tag>
- <item><p>B sends a status message to A, which indicates
- if the connection is allowed. The following status codes are defined:</p>
- <taglist>
- <tag><c>ok</c></tag>
- <item>The handshake will continue.</item>
- <tag><c>ok_simultaneous</c></tag>
- <item>The handshake will continue, but A is informed that B
- has another ongoing connection attempt that will be
- shut down (simultaneous connect where A's name is
- greater than B's name, compared literally).</item>
- <tag><c>nok</c></tag>
- <item>The handshake will not continue, as B already has an ongoing handshake
- which it itself has initiated. (simultaneous connect where B's name is
- greater than A's).</item>
- <tag><c>not_allowed</c></tag>
- <item>The connection is disallowed for some (unspecified) security
- reason.</item>
- <tag><c>alive</c></tag>
- <item>A connection to the node is already active, which either means
- that node A is confused or that the TCP connection breakdown
- of a previous node with this name has not yet reached node B.
- See 3B below.</item>
- </taglist>
- <p>This is the format of the status message:</p>
-<pre>
++---+--------+--------+-----+-----+-----+-----+-----+-----+-... +-----+</pre>
+ <p>'n' is the message tag. 'Version0' and 'Version1' is the
+ distribution version selected by <c>A</c>, based on information
+ from the EPMD. (16-bit big-endian) 'Flag0' ... 'Flag3' are
+ capability flags, the capabilities are defined in
+ <c>$ERL_TOP/lib/kernel/include/dist.hrl</c>. (32-bit big-endian)
+ 'Name0' ... 'NameN' is the full node name of <c>A</c>, as a string
+ of bytes (the packet length denotes how long it is).</p>
+ </item>
+ <tag>3) <c>recv_status</c>/<c>send_status</c></tag>
+ <item>
+ <p><c>B</c> sends a status message to <c>A</c>, which indicates if the
+ connection is allowed. The following status codes are defined:</p>
+ <taglist>
+ <tag><c>ok</c></tag>
+ <item>
+ <p>The handshake will continue.</p>
+ </item>
+ <tag><c>ok_simultaneous</c></tag>
+ <item>
+ <p>The handshake will continue, but <c>A</c> is informed that
+ <c>B</c> has another ongoing connection attempt that will be
+ shut down (simultaneous connect where <c>A</c>'s name is
+ greater than <c>B</c>'s name, compared literally).</p>
+ </item>
+ <tag><c>nok</c></tag>
+ <item>
+ <p>The handshake will not continue, as <c>B</c> already has an
+ ongoing handshake, which it itself has initiated (simultaneous
+ connect where <c>B</c>'s name is greater than <c>A</c>'s).</p>
+ </item>
+ <tag><c>not_allowed</c></tag>
+ <item>
+ <p>The connection is disallowed for some (unspecified) security
+ reason.</p>
+ </item>
+ <tag><c>alive</c></tag>
+ <item>
+ <p>A connection to the node is already active, which either means
+ that node <c>A</c> is confused or that the TCP connection
+ breakdown of a previous node with this name has not yet reached
+ node <c>B</c>. See step 3B below.</p>
+ </item>
+ </taglist>
+ <p>The format of the status message is as follows:</p>
+ <pre>
+---+-------+-------+-...-+-------+
|'s'|Status0|Status1| ... |StatusN|
-+---+-------+-------+-...-+-------+
-</pre>
- <p>
- 's' is the message tag Status0 ... StatusN is the status as a string (not terminated)
- </p>
- </item>
- <tag>3B) send_status/recv_status</tag>
- <item><p>If status was 'alive', node A will answer with
- another status message containing either 'true' which means that the
- connection should continue (The old connection from this node is broken), or
- <c>'false'</c>, which simply means that the connection should be closed, the
- connection attempt was a mistake.</p></item>
- <tag>4) recv_challenge/send_challenge</tag>
- <item><p>If the status was <c>ok</c> or <c>ok_simultaneous</c>,
- The handshake continues with B sending A another message, the challenge.
- The challenge contains the same type of information as the "name" message
- initially sent from A to B, with the addition of a 32 bit challenge:</p>
-<pre>
++---+-------+-------+-...-+-------+</pre>
+ <p>'s' is the message tag. 'Status0' ... 'StatusN' is the status as a
+ string (not terminated).</p>
+ </item>
+ <tag>3B) <c>send_status</c>/<c>recv_status</c></tag>
+ <item>
+ <p>If status was <c>alive</c>, node <c>A</c> answers with another
+ status message containing either <c>true</c>, which means that the
+ connection is to continue (the old connection from this node is
+ broken), or <c>false</c>, which means that the connection is to be
+ closed (the connection attempt was a mistake.</p>
+ </item>
+ <tag>4) <c>recv_challenge</c>/<c>send_challenge</c></tag>
+ <item>
+ <p>If the status was <c>ok</c> or <c>ok_simultaneous</c>, the
+ handshake continues with <c>B</c> sending <c>A</c> another message,
+ the challenge. The challenge contains the same type of information
+ as the "name" message initially sent from <c>A</c> to <c>B</c>, plus
+ a 32-bit challenge:</p>
+ <pre>
+---+--------+--------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-...-+-----+
|'n'|Version0|Version1|Flag0|Flag1|Flag2|Flag3|Chal0|Chal1|Chal2|Chal3|Name0|Name1| ... |NameN|
-+---+--------+--------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-... +-----+
-</pre>
- <p>
- Where Chal0 ... Chal3 is the challenge as a 32 bit big endian integer
- and the other fields are B's version, flags and full nodename.
- </p></item>
- <tag>5) send_challenge_reply/recv_challenge_reply</tag>
- <item><p>Now A has generated a digest and its own challenge. Those are
- sent together in a package to B:</p>
-<pre>
++---+--------+--------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-... +-----+</pre>
+ <p>'Chal0' ... 'Chal3' is the challenge as a 32-bit big-endian integer
+ and the other fields are <c>B</c>'s version, flags, and full node
+ name.</p>
+ </item>
+ <tag>5) <c>send_challenge_reply</c>/<c>recv_challenge_reply</c></tag>
+ <item>
+ <p>Now <c>A</c> has generated a digest and its own challenge. Those
+ are sent together in a package to <c>B</c>:</p>
+ <pre>
+---+-----+-----+-----+-----+-----+-----+-----+-----+-...-+------+
|'r'|Chal0|Chal1|Chal2|Chal3|Dige0|Dige1|Dige2|Dige3| ... |Dige15|
-+---+-----+-----+-----+-----+-----+-----+-----+-----+-...-+------+
-</pre>
- <p>
- Where 'r' is the tag, Chal0 ... Chal3 is A's challenge for B to handle and
- Dige0 ... Dige15 is the digest that A constructed from the challenge B sent
- in the previous step.
- </p></item>
- <tag>6) recv_challenge_ack/send_challenge_ack</tag>
- <item><p>B checks that the digest received from A is correct and generates a
- digest from the challenge received from A. The digest is then sent to A. The
- message looks like this:</p>
-<pre>
++---+-----+-----+-----+-----+-----+-----+-----+-----+-...-+------+</pre>
+ <p>'r' is the tag. 'Chal0' ... 'Chal3' is <c>A</c>'s challenge for
+ <c>B</c> to handle. 'Dige0' ... 'Dige15' is the digest that <c>A</c>
+ constructed from the challenge <c>B</c> sent in the previous
+ step.</p>
+ </item>
+ <tag>6) <c>recv_challenge_ack</c>/<c>send_challenge_ack</c></tag>
+ <item>
+ <p><c>B</c> checks that the digest received from <c>A</c> is correct
+ and generates a digest from the challenge received from <c>A</c>.
+ The digest is then sent to <c>A</c>. The message is as follows:</p>
+ <pre>
+---+-----+-----+-----+-----+-...-+------+
|'a'|Dige0|Dige1|Dige2|Dige3| ... |Dige15|
-+---+-----+-----+-----+-----+-...-+------+
-</pre>
- <p>
- Where 'a' is the tag and Dige0 ... Dige15 is the digest calculated by B
- for A's challenge.</p></item>
- <tag>7)</tag>
- <item><p>A checks the digest from B and the connection is up.</p></item>
- </taglist>
- </section>
- <section>
- <title>Semigraphic View</title>
-<pre>
-A (initiator) B (acceptor)
-
-TCP connect -----------------------------------------&gt;
- TCP accept
-
-send_name -----------------------------------------&gt;
- recv_name
-
- &lt;---------------------------------------- send_status
++---+-----+-----+-----+-----+-...-+------+</pre>
+ <p>'a' is the tag. 'Dige0' ... 'Dige15' is the digest calculated by
+ <c>B</c> for <c>A</c>'s challenge.</p>
+ </item>
+ <tag>7) check</tag>
+ <item>
+ <p><c>A</c> checks the digest from <c>B</c> and the connection is
+ up.</p>
+ </item>
+ </taglist>
+ </section>
+
+ <section>
+ <title>Semigraphic View</title>
+ <pre>
+A (initiator) B (acceptor)
+
+TCP connect ------------------------------------&gt;
+ TCP accept
+
+send_name --------------------------------------&gt;
+ recv_name
+
+ &lt;---------------------------------------------- send_status
recv_status
(if status was 'alive'
- send_status - - - - - - - - - - - - - - - - - - - -&gt;
- recv_status)
- ChB = gen_challenge()
- (ChB)
- &lt;---------------------------------------- send_challenge
+ send_status - - - - - - - - - - - - - - - - - -&gt;
+ recv_status)
+ ChB = gen_challenge()
+ (ChB)
+ &lt;---------------------------------------------- send_challenge
recv_challenge
-
ChA = gen_challenge(),
OCA = out_cookie(B),
-DiA = gen_digest(ChB,OCA)
- (ChA, DiA)
-send_challenge_reply --------------------------------&gt;
- recv_challenge_reply
- ICB = in_cookie(A),
- check:
- DiA == gen_digest
- (ChB, ICB) ?
- - if OK:
- OCB = out_cookie(A),
- DiB = gen_digest
- (DiB) (ChA, OCB)
- &lt;----------------------------------------- send_challenge_ack
-recv_challenge_ack DONE
-ICA = in_cookie(B), - else
-check: CLOSE
-DiB == gen_digest(ChA,ICA) ?
-- if OK
+DiA = gen_digest(ChB, OCA)
+ (ChA, DiA)
+send_challenge_reply ---------------------------&gt;
+ recv_challenge_reply
+ ICB = in_cookie(A),
+ check:
+ DiA == gen_digest (ChB, ICB)?
+ - if OK:
+ OCB = out_cookie(A),
+ DiB = gen_digest (ChA, OCB)
+ (DiB)
+ &lt;----------------------------------------------- send_challenge_ack
+recv_challenge_ack DONE
+ICA = in_cookie(B), - else:
+check: CLOSE
+DiB == gen_digest(ChA, ICA)?
+- if OK:
DONE
-- else
- CLOSE
-</pre>
- </section>
- <marker id="dflags"/>
- <section>
- <title>The Currently Defined Distribution Flags</title>
- <p>
- Currently (OTP-R16) the following capability flags are defined:
- </p>
-<pre>
-%% The node should be published and part of the global namespace
--define(DFLAG_PUBLISHED,1).
-
-%% The node implements an atom cache (obsolete)
--define(DFLAG_ATOM_CACHE,2).
-
-%% The node implements extended (3 * 32 bits) references. This is
-%% required today. If not present connection will be refused.
--define(DFLAG_EXTENDED_REFERENCES,4).
-
-%% The node implements distributed process monitoring.
--define(DFLAG_DIST_MONITOR,8).
-
-%% The node uses separate tag for fun's (lambdas) in the distribution protocol.
--define(DFLAG_FUN_TAGS,16#10).
-
-%% The node implements distributed named process monitoring.
--define(DFLAG_DIST_MONITOR_NAME,16#20).
-
-%% The (hidden) node implements atom cache (obsolete)
--define(DFLAG_HIDDEN_ATOM_CACHE,16#40).
-
-%% The node understand new fun-tags
--define(DFLAG_NEW_FUN_TAGS,16#80).
-
-%% The node is capable of handling extended pids and ports. This is
-%% required today. If not present connection will be refused.
--define(DFLAG_EXTENDED_PIDS_PORTS,16#100).
-
-%%
--define(DFLAG_EXPORT_PTR_TAG,16#200).
-
-%%
--define(DFLAG_BIT_BINARIES,16#400).
-
-%% The node understands new float format
--define(DFLAG_NEW_FLOATS,16#800).
-
-%%
--define(DFLAG_UNICODE_IO,16#1000).
-
-%% The node implements atom cache in distribution header.
--define(DFLAG_DIST_HDR_ATOM_CACHE,16#2000).
-
-%% The node understand the SMALL_ATOM_EXT tag
--define(DFLAG_SMALL_ATOM_TAGS, 16#4000).
-
-%% The node understand UTF-8 encoded atoms
--define(DFLAG_UTF8_ATOMS, 16#10000).
-
-</pre>
- </section>
- </section>
-
- <section>
- <marker id="connected_nodes"/>
- <title>Protocol between connected nodes</title>
- <p>
- As of erts version 5.7.2 the runtime system passes a distribution
- flag in the handshake stage that enables the use of a
- <seealso marker="erl_ext_dist#distribution_header">distribution
- header</seealso> on all messages passed. Messages passed between
- nodes are in this case on the following format:
- </p>
- <table align="left">
- <row>
- <cell align="center">4</cell>
- <cell align="center">d</cell>
- <cell align="center">n</cell>
- <cell align="center">m</cell>
- </row>
- <row>
- <cell align="center"><c>Length</c></cell>
- <cell align="center"><c>DistributionHeader</c></cell>
- <cell align="center"><c>ControlMessage</c></cell>
- <cell align="center"><c>Message</c></cell>
- </row>
- <tcaption></tcaption></table>
- <p>
- where:
- </p>
- <p>
- <c>Length</c> is equal to d + n + m
- </p>
- <p>
- <c>ControlMessage</c> is a tuple passed using the external format of
- Erlang.
- </p>
- <p>
- <c>Message</c> is the message sent to another node using the '!'
- (in external format). Note that <c>Message</c> is only passed in
- combination with a <c>ControlMessage</c> encoding a send ('!').
- </p>
- <p>
- Also note that <seealso marker="erl_ext_dist#overall_format">the
- version number is omitted from the terms that follow a
- distribution header</seealso>.
- </p>
- <p>
- Nodes with an erts version less than 5.7.2 does not pass the
- distribution flag that enables the distribution header. Messages
- passed between nodes are in this case on the following format:
- </p>
- <table align="left">
- <row>
- <cell align="center">4</cell>
- <cell align="center">1</cell>
- <cell align="center">n</cell>
- <cell align="center">m</cell>
- </row>
- <row>
- <cell align="center"><c>Length</c></cell>
- <cell align="center"><c>Type</c></cell>
- <cell align="center"><c>ControlMessage</c></cell>
- <cell align="center"><c>Message</c></cell>
- </row>
- <tcaption></tcaption></table>
- <p>
- where:
- </p>
- <p>
- <c>Length</c> is equal to 1 + n + m
- </p>
- <p>
- Type is: 112 (pass through)
- </p>
- <p>
- <c>ControlMessage</c> is a tuple passed using the external format of
- Erlang.
- </p>
- <p>
- <c>Message</c> is the message sent to another node using the '!'
- (in external format). Note that <c>Message</c> is only passed in
- combination with a <c>ControlMessage</c> encoding a send ('!').
- </p>
- <p>
- The <c>ControlMessage</c> is a tuple, where the first element
- indicates which distributed operation it encodes.
- </p>
- <taglist>
- <tag><c>LINK</c></tag>
- <item>
- <p>
- <c>{1, FromPid, ToPid}</c>
- </p>
- </item>
-
- <tag><c>SEND</c></tag>
- <item>
- <p>
- <c>{2, Cookie, ToPid}</c>
- </p>
- <p>
- <em>Note</em> followed by <c>Message</c>
- </p>
- </item>
-
- <tag><c>EXIT</c></tag>
- <item>
- <p>
- <c>{3, FromPid, ToPid, Reason}</c>
- </p>
- </item>
-
- <tag><c>UNLINK</c></tag>
- <item>
- <p>
- <c>{4, FromPid, ToPid}</c>
- </p>
- </item>
-
- <tag><c>NODE_LINK</c></tag>
- <item>
- <p>
- <c>{5}</c>
- </p>
- </item>
-
- <tag><c>REG_SEND</c></tag>
- <item>
- <p>
- <c>{6, FromPid, Cookie, ToName}</c>
- </p>
- <p>
- <em>Note</em> followed by <c>Message</c>
- </p>
- </item>
-
- <tag><c>GROUP_LEADER</c></tag>
- <item>
- <p>
- <c>{7, FromPid, ToPid}</c>
- </p>
- </item>
-
- <tag><c>EXIT2</c></tag>
- <item>
- <p>
- <c>{8, FromPid, ToPid, Reason}</c>
- </p>
- </item>
- </taglist>
- </section>
-
-
- <section>
- <title>New Ctrlmessages for distrvsn = 1 (OTP R4)</title>
- <taglist>
- <tag><c>SEND_TT</c></tag>
- <item>
- <p>
- <c>{12, Cookie, ToPid, TraceToken}</c>
- </p>
- <p>
- <em>Note</em> followed by <c>Message</c>
- </p>
- </item>
-
- <tag><c>EXIT_TT</c></tag>
- <item>
- <p>
- <c>{13, FromPid, ToPid, TraceToken, Reason}</c>
- </p>
- </item>
-
- <tag><c>REG_SEND_TT</c></tag>
- <item>
- <p>
- <c>{16, FromPid, Cookie, ToName, TraceToken}</c>
- </p>
- <p>
- <em>Note</em> followed by <c>Message</c>
- </p>
- </item>
-
- <tag><c>EXIT2_TT</c></tag>
- <item>
- <p>
- <c>{18, FromPid, ToPid, TraceToken, Reason}</c>
- </p>
- </item>
- </taglist>
- </section>
-
- <section>
- <title>New Ctrlmessages for distrvsn = 2</title>
- <p>
- distrvsn 2 was never used.
- </p>
- </section>
-
- <section>
- <title>New Ctrlmessages for distrvsn = 3 (OTP R5C)</title>
- <p>
- None, but the version number was increased anyway.
- </p>
+- else:
+ CLOSE</pre>
</section>
<section>
- <title>New Ctrlmessages for distrvsn = 4 (OTP R6)</title>
- <p>
- These are only recognized by Erlang nodes, not by hidden nodes.
- </p>
+ <marker id="dflags"/>
+ <title>Distribution Flags</title>
+ <p>The following capability flags are defined:</p>
<taglist>
- <tag><c>MONITOR_P</c></tag>
- <item>
- <p>
- <c>{19, FromPid, ToProc, Ref}</c>
-
- <c>FromPid</c> = monitoring process
- <c>ToProc</c> = monitored process pid or name (atom)
- </p>
- </item>
-
- <tag><c>DEMONITOR_P</c></tag>
- <item>
- <p>
- <c>{20, FromPid, ToProc, Ref}</c>
- We include the FromPid just in case we want to trace this.
-
- <c>FromPid</c> = monitoring process
- <c>ToProc</c> = monitored process pid or name (atom)
- </p>
- </item>
-
- <tag><c>MONITOR_P_EXIT</c></tag>
- <item>
- <p>
- <c>{21, FromProc, ToPid, Ref, Reason}</c>
-
- <c>FromProc</c> = monitored process pid or name (atom)
- <c>ToPid</c> = monitoring process
- <c>Reason</c> = exit reason for the monitored process
- </p>
- </item>
+ <tag><c>-define(DFLAG_PUBLISHED,16#1).</c></tag>
+ <item>
+ <p>The node is to be published and part of the global namespace.</p>
+ </item>
+ <tag><c>-define(DFLAG_ATOM_CACHE,16#2).</c></tag>
+ <item>
+ <p>The node implements an atom cache (obsolete).</p>
+ </item>
+ <tag><c>-define(DFLAG_EXTENDED_REFERENCES,16#4).</c></tag>
+ <item>
+ <p>The node implements extended (3 &times; 32 bits) references. This
+ is required today. If not present, the connection is refused.</p>
+ </item>
+ <tag><c>-define(DFLAG_DIST_MONITOR,16#8).</c></tag>
+ <item>
+ <p>The node implements distributed process monitoring.</p>
+ </item>
+ <tag><c>-define(DFLAG_FUN_TAGS,16#10).</c></tag>
+ <item>
+ <p>The node uses separate tag for funs (lambdas) in the distribution
+ protocol.</p>
+ </item>
+ <tag><c>-define(DFLAG_DIST_MONITOR_NAME,16#20).</c></tag>
+ <item>
+ <p>The node implements distributed named process monitoring.</p>
+ </item>
+ <tag><c>-define(DFLAG_HIDDEN_ATOM_CACHE,16#40).</c></tag>
+ <item>
+ <p>The (hidden) node implements atom cache (obsolete).</p>
+ </item>
+ <tag><c>-define(DFLAG_NEW_FUN_TAGS,16#80).</c></tag>
+ <item>
+ <p>The node understand new fun tags.</p>
+ </item>
+ <tag><c>-define(DFLAG_EXTENDED_PIDS_PORTS,16#100).</c></tag>
+ <item>
+ <p>The node can handle extended pids and ports. This is required
+ today. If not present, the connection is refused.</p>
+ </item>
+ <tag><c>-define(DFLAG_EXPORT_PTR_TAG,16#200).</c></tag>
+ <item>
+ </item>
+ <tag><c>-define(DFLAG_BIT_BINARIES,16#400).</c></tag>
+ <item>
+ </item>
+ <tag><c>-define(DFLAG_NEW_FLOATS,16#800).</c></tag>
+ <item>
+ <p>The node understands new float format.</p>
+ </item>
+ <tag><c>-define(DFLAG_UNICODE_IO,16#1000).</c></tag>
+ <item>
+ </item>
+ <tag><c>-define(DFLAG_DIST_HDR_ATOM_CACHE,16#2000).</c></tag>
+ <item>
+ <p>The node implements atom cache in distribution header.</p>
+ </item>
+ <tag><c>-define(DFLAG_SMALL_ATOM_TAGS, 16#4000).</c></tag>
+ <item>
+ <p>The node understand the <c>SMALL_ATOM_EXT</c> tag.</p>
+ </item>
+ <tag><c>-define(DFLAG_UTF8_ATOMS, 16#10000).</c></tag>
+ <item>
+ <p>The node understand UTF-8 encoded atoms.</p>
+ </item>
</taglist>
</section>
- </chapter>
+ </section>
+
+ <section>
+ <marker id="connected_nodes"/>
+ <title>Protocol between Connected Nodes</title>
+ <p>As from ERTS 5.7.2 the runtime system passes a distribution flag
+ in the handshake stage that enables the use of a
+ <seealso marker="erl_ext_dist#distribution_header">distribution header
+ </seealso> on all messages passed. Messages passed between nodes have in
+ this case the following format:</p>
+
+ <table align="left">
+ <row>
+ <cell align="center">4</cell>
+ <cell align="center">d</cell>
+ <cell align="center">n</cell>
+ <cell align="center">m</cell>
+ </row>
+ <row>
+ <cell align="center"><c>Length</c></cell>
+ <cell align="center"><c>DistributionHeader</c></cell>
+ <cell align="center"><c>ControlMessage</c></cell>
+ <cell align="center"><c>Message</c></cell>
+ </row>
+ <tcaption>Format of Messages Passed between Nodes (as from ERTS 5.7.2)
+ </tcaption>
+ </table>
+
+ <taglist>
+ <tag><c>Length</c></tag>
+ <item>
+ <p>Equal to d + n + m.</p>
+ </item>
+ <tag><c>ControlMessage</c></tag>
+ <item>
+ <p>A tuple passed using the external format of Erlang.</p>
+ </item>
+ <tag><c>Message</c></tag>
+ <item>
+ <p>The message sent to another node using the '!' (in external format).
+ Notice that <c>Message</c> is only passed in combination with a
+ <c>ControlMessage</c> encoding a send ('!').</p>
+ </item>
+ </taglist>
+
+ <p>Notice that <seealso marker="erl_ext_dist#overall_format">the version
+ number is omitted from the terms that follow a distribution header
+ </seealso>.</p>
+
+ <p>Nodes with an ERTS version earlier than 5.7.2 does not pass the
+ distribution flag that enables the distribution header. Messages passed
+ between nodes have in this case the following format:</p>
+
+ <table align="left">
+ <row>
+ <cell align="center">4</cell>
+ <cell align="center">1</cell>
+ <cell align="center">n</cell>
+ <cell align="center">m</cell>
+ </row>
+ <row>
+ <cell align="center"><c>Length</c></cell>
+ <cell align="center"><c>Type</c></cell>
+ <cell align="center"><c>ControlMessage</c></cell>
+ <cell align="center"><c>Message</c></cell>
+ </row>
+ <tcaption>Format of Messages Passed between Nodes (before ERTS 5.7.2)
+ </tcaption>
+ </table>
+
+ <taglist>
+ <tag><c>Length</c></tag>
+ <item>
+ <p>Equal to 1 + n + m.</p>
+ </item>
+ <tag><c>Type</c></tag>
+ <item>
+ <p>Equal to <c>112</c> (pass through).</p>
+ </item>
+ <tag><c>ControlMessage</c></tag>
+ <item>
+ <p>A tuple passed using the external format of Erlang.</p>
+ </item>
+ <tag><c>Message</c></tag>
+ <item>
+ <p>The message sent to another node using the '!' (in external format).
+ Notice that <c>Message</c> is only passed in combination with a
+ <c>ControlMessage</c> encoding a send ('!').</p>
+ </item>
+ </taglist>
+
+ <p>The <c>ControlMessage</c> is a tuple, where the first element indicates
+ which distributed operation it encodes:</p>
+
+ <taglist>
+ <tag><c>LINK</c></tag>
+ <item>
+ <p><c>{1, FromPid, ToPid}</c></p>
+ </item>
+ <tag><c>SEND</c></tag>
+ <item>
+ <p><c>{2, Unused, ToPid}</c></p>
+ <p>Followed by <c>Message</c>.</p>
+ <p><c>Unused</c> is kept for backward compatibility.</p>
+ </item>
+ <tag><c>EXIT</c></tag>
+ <item>
+ <p><c>{3, FromPid, ToPid, Reason}</c></p>
+ </item>
+ <tag><c>UNLINK</c></tag>
+ <item>
+ <p><c>{4, FromPid, ToPid}</c></p>
+ </item>
+ <tag><c>NODE_LINK</c></tag>
+ <item>
+ <p><c>{5}</c></p>
+ </item>
+ <tag><c>REG_SEND</c></tag>
+ <item>
+ <p><c>{6, FromPid, Unused, ToName}</c></p>
+ <p>Followed by <c>Message</c>.</p>
+ <p><c>Unused</c> is kept for backward compatibility.</p>
+ </item>
+ <tag><c>GROUP_LEADER</c></tag>
+ <item>
+ <p><c>{7, FromPid, ToPid}</c></p>
+ </item>
+ <tag><c>EXIT2</c></tag>
+ <item>
+ <p><c>{8, FromPid, ToPid, Reason}</c></p>
+ </item>
+ </taglist>
+ </section>
+
+ <section>
+ <title>New Ctrlmessages for distrvsn = 1 (Erlang/OTP R4)</title>
+ <taglist>
+ <tag><c>SEND_TT</c></tag>
+ <item>
+ <p><c>{12, Unused, ToPid, TraceToken}</c></p>
+ <p>Followed by <c>Message</c>.</p>
+ <p><c>Unused</c> is kept for backward compatibility.</p>
+ </item>
+ <tag><c>EXIT_TT</c></tag>
+ <item>
+ <p><c>{13, FromPid, ToPid, TraceToken, Reason}</c></p>
+ </item>
+ <tag><c>REG_SEND_TT</c></tag>
+ <item>
+ <p><c>{16, FromPid, Unused, ToName, TraceToken}</c></p>
+ <p>Followed by <c>Message</c>.</p>
+ <p><c>Unused</c> is kept for backward compatibility.</p>
+ </item>
+ <tag><c>EXIT2_TT</c></tag>
+ <item>
+ <p><c>{18, FromPid, ToPid, TraceToken, Reason}</c></p>
+ </item>
+ </taglist>
+ </section>
+
+ <section>
+ <title>New Ctrlmessages for distrvsn = 2</title>
+ <p><c>distrvsn</c> 2 was never used.</p>
+ </section>
+
+ <section>
+ <title>New Ctrlmessages for distrvsn = 3 (Erlang/OTP R5C)</title>
+ <p>None, but the version number was increased anyway.</p>
+ </section>
+
+ <section>
+ <title>New Ctrlmessages for distrvsn = 4 (Erlang/OTP R6)</title>
+ <p>These are only recognized by Erlang nodes, not by hidden nodes.</p>
+
+ <taglist>
+ <tag><c>MONITOR_P</c></tag>
+ <item>
+ <p><c>{19, FromPid, ToProc, Ref}</c>, where
+ <c>FromPid</c> = monitoring process and
+ <c>ToProc</c> = monitored process pid or name (atom)</p>
+ </item>
+ <tag><c>DEMONITOR_P</c></tag>
+ <item>
+ <p><c>{20, FromPid, ToProc, Ref}</c>, where
+ <c>FromPid</c> = monitoring process and
+ <c>ToProc</c> = monitored process pid or name (atom)</p>
+ <p>We include <c>FromPid</c> just in case we want to trace this.</p>
+ </item>
+ <tag><c>MONITOR_P_EXIT</c></tag>
+ <item>
+ <p><c>{21, FromProc, ToPid, Ref, Reason}</c>, where
+ <c>FromProc</c> = monitored process pid or name (atom),
+ <c>ToPid</c> = monitoring process, and
+ <c>Reason</c> = exit reason for the monitored process</p>
+ </item>
+ </taglist>
+ </section>
+</chapter>
diff --git a/erts/doc/src/erl_driver.xml b/erts/doc/src/erl_driver.xml
index 175b7f6bfb..836a58a676 100644
--- a/erts/doc/src/erl_driver.xml
+++ b/erts/doc/src/erl_driver.xml
@@ -21,7 +21,6 @@
limitations under the License.
</legalnotice>
-
<title>erl_driver</title>
<prepared>Jakob Cederlund</prepared>
<responsible>Jakob Cederlund</responsible>
@@ -33,519 +32,545 @@
<file>erl_driver.xml</file>
</header>
<lib>erl_driver</lib>
- <libsummary>API functions for an Erlang driver</libsummary>
+ <libsummary>API functions for an Erlang driver.</libsummary>
<description>
<p>An Erlang driver is a library containing a set of native driver
- callback functions that the Erlang VM calls when certain
- events occur. There may be multiple instances of a driver, each
+ callback functions that the Erlang Virtual Machine calls when certain
+ events occur. There can be multiple instances of a driver, each
instance is associated with an Erlang port.</p>
+
<marker id="WARNING"/>
- <warning><p><em>Use this functionality with extreme care!</em></p>
+ <warning>
+ <p><em>Use this functionality with extreme care.</em></p>
<p>A driver callback is executed as a direct extension of the
- native code of the VM. Execution is not made in a safe environment.
- The VM can <em>not</em> provide the same services as provided when
- executing Erlang code, such as preemptive scheduling or memory
- protection. If the driver callback function doesn't behave well,
- the whole VM will misbehave.</p>
- <list>
- <item><p>A driver callback that crash will crash the whole VM.</p></item>
- <item><p>An erroneously implemented driver callback might cause
- a VM internal state inconsistency which may cause a crash of the VM,
- or miscellaneous misbehaviors of the VM at any point after the call
- to the driver callback.</p></item>
- <item><p>A driver callback that do <seealso marker="#lengthy_work">lengthy
- work</seealso> before returning will degrade responsiveness of the VM,
- and may cause miscellaneous strange behaviors. Such strange behaviors
- include, but are not limited to, extreme memory usage, and bad load
- balancing between schedulers. Strange behaviors that might occur due
- to lengthy work may also vary between OTP releases.</p></item>
+ native code of the VM. Execution is not made in a safe environment.
+ The VM <em>cannot</em> provide the same services as provided when
+ executing Erlang code, such as pre-emptive scheduling or memory
+ protection. If the driver callback function does not behave well,
+ the whole VM will misbehave.</p>
+ <list type="bulleted">
+ <item>
+ <p>A driver callback that crash will crash the whole VM.</p>
+ </item>
+ <item>
+ <p>An erroneously implemented driver callback can cause a VM
+ internal state inconsistency, which can cause a crash of the VM,
+ or miscellaneous misbehaviors of the VM at any point after the
+ call to the driver callback.</p>
+ </item>
+ <item>
+ <p>A driver callback doing
+ <seealso marker="#lengthy_work">lengthy work</seealso> before
+ returning degrades responsiveness of the VM and can cause
+ miscellaneous strange behaviors. Such strange behaviors
+ include, but are not limited to, extreme memory usage and bad
+ load balancing between schedulers. Strange behaviors that can
+ occur because of lengthy work can also vary between Erlang/OTP
+ releases.</p>
+ </item>
</list>
- </warning>
- <p>As of erts version 5.5.3 the driver interface has been extended
- (see <seealso marker="driver_entry#extended_marker">extended marker</seealso>).
- The extended interface introduce
+ </warning>
+
+ <p>As from ERTS 5.5.3 the driver interface has been extended
+ (see <seealso marker="driver_entry#extended_marker">
+ <c>extended marker</c></seealso>). The extended interface introduces
<seealso marker="#version_management">version management</seealso>,
- the possibility to pass capability flags
- (see <seealso marker="driver_entry#driver_flags">driver flags</seealso>)
- to the runtime system at driver initialization, and some new
- driver API functions. </p>
+ the possibility to pass capability flags (see
+ <seealso marker="driver_entry#driver_flags">
+ <c>driver_flags</c></seealso>) to the runtime system at driver
+ initialization, and some new driver API functions.</p>
+
<note>
- <p>As of erts version 5.9 old drivers have to be recompiled
- and have to use the extended interface. They also have to be
- adjusted to the
- <seealso marker="#rewrites_for_64_bits">64-bit capable driver interface.
- </seealso>
- </p>
+ <p>As from ERTS 5.9 old drivers must be recompiled
+ and use the extended interface. They must also be adjusted to the
+ <seealso marker="#rewrites_for_64_bits">
+ 64-bit capable driver interface</seealso>.</p>
</note>
+
<p>The driver calls back to the emulator, using the API
functions declared in <c>erl_driver.h</c>. They are used for
- outputting data from the driver, using timers, etc.</p>
+ outputting data from the driver, using timers, and so on.</p>
+
<p>Each driver instance is associated with a port. Every port
has a port owner process. Communication with the port is normally
done through the port owner process. Most of the functions take
the <c>port</c> handle as an argument. This identifies the driver
- instance. Note that this port handle must be stored by the driver,
+ instance. Notice that this port handle must be stored by the driver,
it is not given when the driver is called from the emulator (see
- <seealso marker="driver_entry#emulator">driver_entry</seealso>).</p>
+ <seealso marker="driver_entry#emulator">
+ <c>driver_entry</c></seealso>).</p>
+
<p>Some of the functions take a parameter of type
- <c>ErlDrvBinary</c>, a driver binary. It should be both
+ <c>ErlDrvBinary</c>, a driver binary. It is to be both
allocated and freed by the caller. Using a binary directly avoids
one extra copying of data.</p>
+
<p>Many of the output functions have a "header buffer", with
<c>hbuf</c> and <c>hlen</c> parameters. This buffer is sent as a
list before the binary (or list, depending on port mode) that is
sent. This is convenient when matching on messages received from
- the port. (Although in the latest versions of Erlang, there is
- the binary syntax, that enables you to match on the beginning of
- a binary.)
- <marker id="smp_support"></marker>
-</p>
- <p>In the runtime system with SMP support, drivers are locked either
- on driver level or port level (driver instance level). By default
- driver level locking will be used, i.e., only one emulator thread
+ the port. (Although in the latest Erlang versions there is
+ the binary syntax, which enables you to match on the beginning of
+ a binary.)</p>
+ <p><marker id="smp_support"></marker>In the runtime system with
+ SMP support, drivers are locked either on driver level
+ or port level (driver instance level). By default
+ driver level locking will be used, that is, only one emulator thread
will execute code in the driver at a time. If port level locking
- is used, multiple emulator threads may execute code in the driver
- at the same time. There will only be one thread at a time calling
- driver call-backs corresponding to the same port, though. In order
- to enable port level locking set the <c>ERL_DRV_FLAG_USE_PORT_LOCKING</c>
+ is used, multiple emulator threads can execute code in the driver
+ at the same time. Only one thread at a time will call
+ driver callbacks corresponding to the same port, though.
+ To enable port level locking, set the <c>ERL_DRV_FLAG_USE_PORT_LOCKING</c>
<seealso marker="driver_entry#driver_flags">driver flag</seealso> in
- the <seealso marker="driver_entry">driver_entry</seealso>
- used by the driver. When port level locking is used it is the
- responsibility of the driver writer to synchronize all accesses
+ the <seealso marker="driver_entry"><c>driver_entry</c></seealso>
+ used by the driver. When port level locking is used,
+ the driver writer is responsible for synchronizing all accesses
to data shared by the ports (driver instances).</p>
+
<p>Most drivers written before the runtime system with SMP
- support existed will be able to run in the runtime system
- with SMP support without being rewritten if driver
+ support existed can run in the runtime system
+ with SMP support, without being rewritten, if driver
level locking is used.</p>
+
<note>
<p>It is assumed that drivers do not access other drivers. If
- drivers should access each other they have to provide their own
- mechanism for thread safe synchronization. Such "inter driver
+ drivers access each other, they must provide their own
+ mechanism for thread-safe synchronization. Such "inter-driver
communication" is strongly discouraged.</p>
</note>
+
<p>Previously, in the runtime system without SMP support,
- specific driver call-backs were always called from the same
+ specific driver callbacks were always called from the same
thread. This is <em>not</em> the case in the runtime system
with SMP support. Regardless of locking scheme used, calls
- to driver call-backs may be made from different threads, e.g.,
- two consecutive calls to exactly the same call-back for exactly
- the same port may be made from two different threads. This
- will for <em>most</em> drivers not be a problem, but it might.
- Drivers that depend on all call-backs being called in the
- same thread, <em>have</em> to be rewritten before being used
+ to driver callbacks can be made from different threads. For example,
+ two consecutive calls to exactly the same callback for exactly
+ the same port can be made from two different threads. This
+ is for <em>most</em> drivers not a problem, but it can be.
+ Drivers that depend on all callbacks that are called in the
+ same thread, <em>must</em> be rewritten before they are used
in the runtime system with SMP support.</p>
+
<note>
<p>Regardless of locking scheme used, calls to driver
- call-backs may be made from different threads.</p>
+ callbacks can be made from different threads.</p>
</note>
- <p>Most functions in this API are <em>not</em> thread-safe, i.e.,
- they may <em>not</em> be called from an arbitrary thread. Functions
- that are not documented as thread-safe may only be called from
- driver call-backs or function calls descending from a driver
- call-back call. Note that driver call-backs may be called from
+
+ <p>Most functions in this API are <em>not</em> thread-safe, that is,
+ they <em>cannot</em> be called from any thread. Functions
+ that are not documented as thread-safe can only be called from
+ driver callbacks or function calls descending from a driver
+ callback call. Notice that driver callbacks can be called from
different threads. This, however, is not a problem for any
- function in this API, since the emulator has control over
+ function in this API, as the emulator has control over
these threads.</p>
+
<warning>
- <p>Functions not explicitly documented as thread safe are
- <em>not</em> thread safe. Also note that some functions
- are <em>only</em> thread safe when used in a runtime
+ <p>Functions not explicitly documented as thread-safe are
+ <em>not</em> thread safe. Also notice that some functions
+ are <em>only</em> thread-safe when used in a runtime
system with SMP support.</p>
- <p>A function not explicitly documented as thread safe may at
- some point in time have a thread safe implementation in the
- runtime system. Such an implementation may however change to
- a thread <em>unsafe</em> implementation at any time <em>without
- any notice</em> at all.
- </p>
- <p><em>Only use functions explicitly documented as thread safe
- from arbitrary threads.</em></p>
+ <p>A function not explicitly documented as thread-safe can, at
+ some point in time, have a thread-safe implementation in the
+ runtime system. Such an implementation can however change to
+ a thread <em>unsafe</em> implementation at any time <em>without
+ any notice</em>.</p>
+ <p><em>Only use functions explicitly documented as thread-safe
+ from arbitrary threads.</em></p>
</warning>
- <p><marker id="lengthy_work"/>
- As mentioned in the <seealso marker="#WARNING">warning</seealso> text at
- the beginning of this document it is of vital importance that a driver callback
- does return relatively fast. It is hard to give an exact maximum amount
- of time that a driver callback is allowed to work, but as a rule of thumb
- a well behaving driver callback should return before a millisecond has
- passed. This can be achieved using different approaches.
- If you have full control over the code that are to execute in the driver
- callback, the best approach is to divide the work into multiple chunks of
- work and trigger multiple calls to the
- <seealso marker="driver_entry#timeout">timeout callback</seealso> using
- zero timeouts. The
- <seealso marker="#erl_drv_consume_timeslice"><c>erl_drv_consume_timeslice()</c></seealso>
- function can be useful in order to determine when to trigger such
- timeout callback calls. It might, however, not always be possible to
- implement it this way, e.g. when calling third party libraries. In this
- case you typically want to dispatch the work to another thread.
- Information about thread primitives can be found below.</p>
+
+ <p><marker id="lengthy_work"/>
+ As mentioned in the <seealso marker="#WARNING">warning</seealso> text at
+ the beginning of this section, it is of vital importance that a driver
+ callback returns relatively fast. It is difficult to give an exact
+ maximum amount of time that a driver callback is allowed to work, but
+ usually a well-behaving driver callback is to return within 1 millisecond.
+ This can be achieved using different approaches.
+ If you have full control over the code to execute in the driver
+ callback, the best approach is to divide the work into multiple chunks of
+ work, and trigger multiple calls to the
+ <seealso marker="driver_entry#timeout">time-out callback</seealso> using
+ zero time-outs. Function <seealso marker="#erl_drv_consume_timeslice">
+ <c>erl_drv_consume_timeslice</c></seealso> can be useful to
+ determine when to trigger such time-out callback calls. However, sometimes
+ it cannot be implemented this way, for example when calling
+ third-party libraries. In this case, you typically want to dispatch the
+ work to another thread. Information about thread primitives is provided
+ below.</p>
</description>
<section>
- <title>FUNCTIONALITY</title>
+ <title>Functionality</title>
<p>All functions that a driver needs to do with Erlang are
- performed through driver API functions. There are functions
+ performed through driver API functions. Functions exist
for the following functionality:</p>
+
<taglist>
<tag>Timer functions</tag>
- <item>Timer functions are used to control the timer that a driver
- may use. The timer will have the emulator call the
- <seealso marker="driver_entry#timeout">timeout</seealso> entry
- function after a specified time. Only one timer is available
- for each driver instance.</item>
+ <item>
+ <p>Control the timer that a driver can use. The timer has the
+ emulator call the <seealso marker="driver_entry#timeout">
+ <c>timeout</c></seealso> entry function after a specified time.
+ Only one timer is available for each driver instance.</p>
+ </item>
<tag>Queue handling</tag>
<item>
<p>Every driver instance has an associated queue. This queue is a
- <c>SysIOVec</c> that works as a buffer. It's mostly used for
- the driver to buffer data that should be written to a device,
+ <c>SysIOVec</c>, which works as a buffer. It is mostly used for
+ the driver to buffer data that is to be written to a device,
it is a byte stream. If the port owner process closes the
- driver, and the queue is not empty, the driver will not be
+ driver, and the queue is not empty, the driver is not
closed. This enables the driver to flush its buffers before
closing.</p>
- <p>The queue can be manipulated from arbitrary threads if
- a port data lock is used. See documentation of the
- <seealso marker="#ErlDrvPDL">ErlDrvPDL</seealso> type for
- more information.</p>
+ <p>The queue can be manipulated from any threads if
+ a port data lock is used. For more information, see
+ <seealso marker="#ErlDrvPDL"><c>ErlDrvPDL</c></seealso>.</p>
</item>
<tag>Output functions</tag>
- <item>With the output functions, the driver sends data back to
- the emulator. They will be received as messages by the port owner
- process, see <c>open_port/2</c>. The vector function and the
- function taking a driver binary are faster, because they avoid
- copying the data buffer. There is also a fast way of sending
- terms from the driver, without going through the binary term
- format.</item>
+ <item>
+ <p>With these functions, the driver sends data back to the emulator.
+ The data is received as messages by the port owner process, see
+ <seealso marker="erlang:open_port/2">
+ <c>erlang:open_port/2</c></seealso>. The vector function and the
+ function taking a driver binary are faster, as they avoid
+ copying the data buffer. There is also a fast way of sending
+ terms from the driver, without going through the binary term
+ format.</p></item>
<tag>Failure</tag>
- <item>The driver can exit and signal errors up to Erlang. This is
- only for severe errors, when the driver can't possibly keep
- open.</item>
+ <item>
+ <p>The driver can exit and signal errors up to Erlang. This is
+ only for severe errors, when the driver cannot possibly keep
+ open.</p>
+ </item>
<tag>Asynchronous calls</tag>
- <item>The latest Erlang versions (R7B and later) has provision for
- asynchronous function calls, using a thread pool provided by
- Erlang. There is also a select call, that can be used for
- asynchronous drivers.</item>
+ <item>
+ <p>Erlang/OTP R7B and later versions have provision for
+ asynchronous function calls, using a thread pool provided by
+ Erlang. There is also a select call, which can be used for
+ asynchronous drivers.</p>
+ </item>
<tag><marker id="multi_threading"/>Multi-threading</tag>
<item>
- <p>A POSIX thread like API for multi-threading is provided. The
- Erlang driver thread API only provide a subset of the functionality
- provided by the POSIX thread API. The subset provided is
- more or less the basic functionality needed for multi-threaded
- programming:
- </p>
- <list>
- <item><seealso marker="#ErlDrvTid">Threads</seealso></item>
- <item><seealso marker="#ErlDrvMutex">Mutexes</seealso></item>
- <item><seealso marker="#ErlDrvCond">Condition variables</seealso></item>
- <item><seealso marker="#ErlDrvRWLock">Read/Write locks</seealso></item>
- <item><seealso marker="#ErlDrvTSDKey">Thread specific data</seealso></item>
- </list>
- <p>The Erlang driver thread API can be used in conjunction with
- the POSIX thread API on UN-ices and with the Windows native thread
- API on Windows. The Erlang driver thread API has the advantage of
- being portable, but there might exist situations where you want to
- use functionality from the POSIX thread API or the Windows
- native thread API.
- </p>
- <p>The Erlang driver thread API only returns error codes when it is
- reasonable to recover from an error condition. If it isn't reasonable
- to recover from an error condition, the whole runtime system is
- terminated. For example, if a create mutex operation fails, an error
- code is returned, but if a lock operation on a mutex fails, the
- whole runtime system is terminated.
- </p>
- <p>Note that there exists no "condition variable wait with timeout" in
- the Erlang driver thread API. This is due to issues with
- <c>pthread_cond_timedwait()</c>. When the system clock suddenly
- is changed, it isn't always guaranteed that you will wake up from
- the call as expected. An Erlang runtime system has to be able to
- cope with sudden changes of the system clock. Therefore, we have
- omitted it from the Erlang driver thread API. In the Erlang driver
- case, timeouts can and should be handled with the timer functionality
- of the Erlang driver API.
- </p>
- <p>In order for the Erlang driver thread API to function, thread
- support has to be enabled in the runtime system. An Erlang driver
- can check if thread support is enabled by use of
- <seealso marker="#driver_system_info">driver_system_info()</seealso>.
- Note that some functions in the Erlang driver API are thread-safe
- only when the runtime system has SMP support, also this
- information can be retrieved via
- <seealso marker="#driver_system_info">driver_system_info()</seealso>.
- Also note that a lot of functions in the Erlang driver API are
- <em>not</em> thread-safe regardless of whether SMP support is
- enabled or not. If a function isn't documented as thread-safe it
- is <em>not</em> thread-safe.
- </p>
- <p><em>NOTE</em>: When executing in an emulator thread, it is
- <em>very important</em> that you unlock <em>all</em> locks you
- have locked before letting the thread out of your control;
- otherwise, you are <em>very likely</em> to deadlock the whole
- emulator. If you need to use thread specific data in an emulator
- thread, only have the thread specific data set while the thread is
- under your control, and clear the thread specific data before
- you let the thread out of your control.
- </p>
- <p>In the future there will probably be debug functionality
- integrated with the Erlang driver thread API. All functions
- that create entities take a <c>name</c> argument. Currently
- the <c>name</c> argument is unused, but it will be used when
- the debug functionality has been implemented. If you name all
- entities created well, the debug functionality will be able
- to give you better error reports.
- </p>
+ <p>A POSIX thread like API for multi-threading is provided. The
+ Erlang driver thread API only provides a subset of the functionality
+ provided by the POSIX thread API. The subset provided is
+ more or less the basic functionality needed for multi-threaded
+ programming:</p>
+ <list>
+ <item><seealso marker="#ErlDrvTid">Threads</seealso></item>
+ <item><seealso marker="#ErlDrvMutex">Mutexes</seealso></item>
+ <item><seealso marker="#ErlDrvCond">
+ Condition variables</seealso></item>
+ <item><seealso marker="#ErlDrvRWLock">
+ Read/write locks</seealso></item>
+ <item><seealso marker="#ErlDrvTSDKey">
+ Thread-specific data</seealso></item>
+ </list>
+ <p>The Erlang driver thread API can be used in conjunction with
+ the POSIX thread API on UN-ices and with the Windows native thread
+ API on Windows. The Erlang driver thread API has the advantage of
+ being portable, but there can exist situations where you want to
+ use functionality from the POSIX thread API or the Windows
+ native thread API.</p>
+ <p>The Erlang driver thread API only returns error codes when it is
+ reasonable to recover from an error condition. If it is not reasonable
+ to recover from an error condition, the whole runtime system is
+ terminated. For example, if a create mutex operation fails, an error
+ code is returned, but if a lock operation on a mutex fails, the
+ whole runtime system is terminated.</p>
+ <p>Notice that there is no "condition variable wait with time-out" in
+ the Erlang driver thread API. This because of issues with
+ <c>pthread_cond_timedwait</c>. When the system clock suddenly
+ is changed, it is not always guaranteed that you will wake up from
+ the call as expected. An Erlang runtime system must be able to
+ cope with sudden changes of the system clock. Therefore, we have
+ omitted it from the Erlang driver thread API. In the Erlang driver
+ case, time-outs can and are to be handled with the timer functionality
+ of the Erlang driver API.</p>
+ <p>In order for the Erlang driver thread API to function, thread
+ support must be enabled in the runtime system. An Erlang driver
+ can check if thread support is enabled by use of
+ <seealso marker="#driver_system_info">
+ <c>driver_system_info</c></seealso>.
+ Notice that some functions in the Erlang driver API are thread-safe
+ only when the runtime system has SMP support, also this
+ information can be retrieved through
+ <seealso marker="#driver_system_info">
+ <c>driver_system_info</c></seealso>.
+ Also notice that many functions in the Erlang driver API are
+ <em>not</em> thread-safe, regardless of whether SMP support is
+ enabled or not. If a function is not documented as thread-safe, it
+ is <em>not</em> thread-safe.</p>
+ <note>
+ <p>When executing in an emulator thread, it is
+ <em>very important</em> that you unlock <em>all</em> locks you
+ have locked before letting the thread out of your control;
+ otherwise you are <em>very likely</em> to deadlock the whole
+ emulator.</p>
+ <p>If you need to use thread-specific data in an emulator
+ thread, only have the thread-specific data set while the thread is
+ under your control, and clear the thread-specific data before
+ you let the thread out of your control.</p>
+ </note>
+ <p>In the future, debug functionality will probably be
+ integrated with the Erlang driver thread API. All functions
+ that create entities take a <c>name</c> argument. Currently
+ the <c>name</c> argument is unused, but it will be used when
+ the debug functionality is implemented. If you name all
+ entities created well, the debug functionality will be able
+ to give you better error reports.</p>
+ </item>
+ <tag>Adding/removing drivers</tag>
+ <item>
+ <p>A driver can add and later remove drivers.</p>
</item>
- <tag>Adding / removing drivers</tag>
- <item><p>A driver can add and later remove drivers.</p></item>
<tag>Monitoring processes</tag>
- <item><p>A driver can monitor a process that does not own a port.</p></item>
+ <item>
+ <p>A driver can monitor a process that does not own a port.</p>
+ </item>
<tag><marker id="version_management"/>Version management</tag>
<item>
<p>Version management is enabled for drivers that have set the
- <seealso marker="driver_entry#extended_marker">extended_marker</seealso>
- field of their
- <seealso marker="driver_entry">driver_entry</seealso>
- to <c>ERL_DRV_EXTENDED_MARKER</c>. <c>erl_driver.h</c> defines
- <c>ERL_DRV_EXTENDED_MARKER</c>,
- <c>ERL_DRV_EXTENDED_MAJOR_VERSION</c>, and
- <c>ERL_DRV_EXTENDED_MINOR_VERSION</c>.
- <c>ERL_DRV_EXTENDED_MAJOR_VERSION</c> will be incremented when
- driver incompatible changes are made to the Erlang runtime
- system. Normally it will suffice to recompile drivers when the
- <c>ERL_DRV_EXTENDED_MAJOR_VERSION</c> has changed, but it
- could, under rare circumstances, mean that drivers have to
- be slightly modified. If so, this will of course be documented.
- <c>ERL_DRV_EXTENDED_MINOR_VERSION</c> will be incremented when
- new features are added. The runtime system uses the minor version
- of the driver to determine what features to use.
- The runtime system will normally refuse to load a driver if the major
+ <seealso marker="driver_entry#extended_marker">
+ <c>extended_marker</c></seealso> field of their
+ <seealso marker="driver_entry"><c>driver_entry</c></seealso>
+ to <c>ERL_DRV_EXTENDED_MARKER</c>. <c>erl_driver.h</c> defines:</p>
+ <list type="bulleted">
+ <item>
+ <p><c>ERL_DRV_EXTENDED_MARKER</c></p>
+ </item>
+ <item>
+ <p><c>ERL_DRV_EXTENDED_MAJOR_VERSION</c>, which is incremented when
+ driver incompatible changes are made to the Erlang runtime
+ system. Normally it suffices to recompile drivers when
+ <c>ERL_DRV_EXTENDED_MAJOR_VERSION</c> has changed, but it
+ can, under rare circumstances, mean that drivers must
+ be slightly modified. If so, this will of course be
+ documented.</p>
+ </item>
+ <item>
+ <p><c>ERL_DRV_EXTENDED_MINOR_VERSION</c>, which is incremented when
+ new features are added. The runtime system uses the minor version
+ of the driver to determine what features to use.</p>
+ </item>
+ </list>
+ <p>The runtime system normally refuses to load a driver if the major
versions differ, or if the major versions are equal and the
minor version used by the driver is greater than the one used
by the runtime system. Old drivers with lower major versions
- will however be allowed after a bump of the major version during
- a transition period of two major releases. Such old drivers might
- however fail if deprecated features are used.</p>
- <p>The emulator will refuse to load a driver that does not use
- the extended driver interface,
- to allow for 64-bit capable drivers,
- since incompatible type changes for the callbacks
- <seealso marker="driver_entry#output">output</seealso>,
- <seealso marker="driver_entry#control">control</seealso> and
- <seealso marker="driver_entry#call">call</seealso>
- were introduced in release R15B. A driver written
- with the old types would compile with warnings and when
- called return garbage sizes to the emulator causing it
- to read random memory and create huge incorrect result blobs.</p>
- <p>Therefore it is not enough to just recompile drivers written with
- version management for pre-R15B types; the types have to be changed
- in the driver suggesting other rewrites especially regarding
- size variables. Investigate all warnings when recompiling!</p>
- <p>Also, the API driver functions <c>driver_output*</c>,
- <c>driver_vec_to_buf</c>, <c>driver_alloc/realloc*</c>
- and the <c>driver_*</c> queue functions were changed to have
- larger length arguments and return values. This is a
- lesser problem since code that passes smaller types
- will get them auto converted in the calls and as long as
- the driver does not handle sizes that overflow an <c>int</c>
- all will work as before.</p>
+ are however allowed after a bump of the major version during
+ a transition period of two major releases. Such old drivers can,
+ however, fail if deprecated features are used.</p>
+ <p>The emulator refuses to load a driver that does not use
+ the extended driver interface, to allow for 64-bit capable drivers,
+ as incompatible type changes for the callbacks
+ <seealso marker="driver_entry#output"><c>output</c></seealso>,
+ <seealso marker="driver_entry#control"><c>control</c></seealso>, and
+ <seealso marker="driver_entry#call"><c>call</c></seealso>
+ were introduced in Erlang/OTP R15B. A driver written
+ with the old types would compile with warnings and when
+ called return garbage sizes to the emulator, causing it
+ to read random memory and create huge incorrect result blobs.</p>
+ <p>Therefore it is not enough to only recompile drivers written with
+ version management for pre R15B types; the types must be changed
+ in the driver suggesting other rewrites, especially regarding size
+ variables. <em>Investigate all warnings when recompiling.</em></p>
+ <p>Also, the API driver functions <c>driver_output*</c> and
+ <c>driver_vec_to_buf</c>, <c>driver_alloc/realloc*</c>, and the
+ <c>driver_*</c> queue functions were changed to have
+ larger length arguments and return values. This is a
+ lesser problem, as code that passes smaller types
+ gets them auto-converted in the calls, and as long as
+ the driver does not handle sizes that overflow an <c>int</c>,
+ all will work as before.</p>
</item>
- <tag><marker id="time_measurement"/>Time Measurement</tag>
- <item><p>Support for time measurement in drivers:
- <list>
- <item><seealso marker="#ErlDrvTime"><c>ErlDrvTime</c></seealso></item>
- <item><seealso marker="#ErlDrvTimeUnit"><c>ErlDrvTimeUnit</c></seealso></item>
- <item><seealso marker="#erl_drv_monotonic_time"><c>erl_drv_monotonic_time()</c></seealso></item>
- <item><seealso marker="#erl_drv_time_offset"><c>erl_drv_time_offset()</c></seealso></item>
- <item><seealso marker="#erl_drv_convert_time_unit"><c>erl_drv_convert_time_unit()</c></seealso></item>
- </list></p>
+ <tag><marker id="time_measurement"/>Time measurement</tag>
+ <item>
+ <p>Support for time measurement in drivers:</p>
+ <list type="bulleted">
+ <item><seealso marker="#ErlDrvTime">
+ <c>ErlDrvTime</c></seealso></item>
+ <item><seealso marker="#ErlDrvTimeUnit">
+ <c>ErlDrvTimeUnit</c></seealso></item>
+ <item><seealso marker="#erl_drv_monotonic_time">
+ <c>erl_drv_monotonic_time</c></seealso></item>
+ <item><seealso marker="#erl_drv_time_offset">
+ <c>erl_drv_time_offset</c></seealso></item>
+ <item><seealso marker="#erl_drv_convert_time_unit">
+ <c>erl_drv_convert_time_unit</c></seealso></item>
+ </list>
</item>
</taglist>
</section>
<section>
<marker id="rewrites_for_64_bits"/>
- <title>
- REWRITES FOR 64-BIT DRIVER INTERFACE
- </title>
- <p>
- For erts-5.9 two new integer types
- <seealso marker="#ErlDrvSizeT">ErlDrvSizeT</seealso> and
- <seealso marker="#ErlDrvSSizeT">ErlDrvSSizeT</seealso>
- were introduced that can hold 64-bit sizes if necessary.
- </p>
- <p>
- To not update a driver and just recompile it probably works
+ <title>Rewrites for 64-Bit Driver Interface</title>
+ <p>ERTS 5.9 introduced two new integer types,
+ <seealso marker="#ErlDrvSizeT"><c>ErlDrvSizeT</c></seealso> and
+ <seealso marker="#ErlDrvSSizeT"><c>ErlDrvSSizeT</c></seealso>,
+ which can hold 64-bit sizes if necessary.</p>
+
+ <p>To not update a driver and only recompile, it probably works
when building for a 32-bit machine creating a false sense of security.
Hopefully that will generate many important warnings.
- But when recompiling the same driver later on for a 64-bit machine
+ But when recompiling the same driver later on for a 64-bit machine,
there <em>will</em> be warnings and almost certainly crashes.
- So it is a BAD idea to postpone updating the driver and
- not fixing the warnings!
- </p>
- <p>
- When recompiling with <c>gcc</c> use the <c>-Wstrict-prototypes</c>
- flag to get better warnings. Try to find a similar flag if you
- are using some other compiler.
- </p>
- <p>
- Here follows a checklist for rewriting a pre erts-5.9 driver,
- most important first.
- </p>
+ So it is a <em>bad</em> idea to postpone updating the driver and
+ not fixing the warnings.</p>
+
+ <p>When recompiling with <c>gcc</c>, use flag <c>-Wstrict-prototypes</c>
+ to get better warnings. Try to find a similar flag if you use
+ another compiler.</p>
+
+ <p>The following is a checklist for rewriting a pre ERTS 5.9 driver,
+ most important first:</p>
+
<taglist>
<tag>Return types for driver callbacks</tag>
<item>
- <p>
- Rewrite driver callback
+ <p>Rrewrite driver callback
<seealso marker="driver_entry#control"><c>control</c></seealso>
- to use return type <c>ErlDrvSSizeT</c> instead of <c>int</c>.
- </p>
- <p>
- Rewrite driver callback
+ to use return type <c>ErlDrvSSizeT</c> instead of <c>int</c>.</p>
+ <p>Rewrite driver callback
<seealso marker="driver_entry#call"><c>call</c></seealso>
- to use return type <c>ErlDrvSSizeT</c> instead of <c>int</c>.
- </p>
+ to use return type <c>ErlDrvSSizeT</c> instead of <c>int</c>.</p>
<note>
- <p>
- These changes are essential to not crash the emulator
+ <p>These changes are essential not to crash the emulator
or worse cause malfunction.
- Without them a driver may return garbage in the high 32 bits
- to the emulator causing it to build a huge result from random
- bytes either crashing on memory allocation or succeeding with
- a random result from the driver call.
- </p>
+ Without them a driver can return garbage in the high 32 bits
+ to the emulator, causing it to build a huge result from random
+ bytes, either crashing on memory allocation or succeeding with
+ a random result from the driver call.</p>
</note>
</item>
<tag>Arguments to driver callbacks</tag>
<item>
- <p>
- Driver callback
+ <p>Driver callback
<seealso marker="driver_entry#output"><c>output</c></seealso>
now gets <c>ErlDrvSizeT</c> as 3rd argument instead
- of previously <c>int</c>.
- </p>
- <p>
- Driver callback
+ of previously <c>int</c>.</p>
+ <p>Driver callback
<seealso marker="driver_entry#control"><c>control</c></seealso>
now gets <c>ErlDrvSizeT</c> as 4th and 6th arguments instead
- of previously <c>int</c>.
- </p>
- <p>
- Driver callback
+ of previously <c>int</c>.</p>
+ <p>Driver callback
<seealso marker="driver_entry#call"><c>call</c></seealso>
now gets <c>ErlDrvSizeT</c> as 4th and 6th arguments instead
- of previously <c>int</c>.
- </p>
- <p>
- Sane compiler's calling conventions probably make these changes
+ of previously <c>int</c>.</p>
+ <p>Sane compiler's calling conventions probably make these changes
necessary only for a driver to handle data chunks that require
- 64-bit size fields (mostly larger than 2 GB since that is what
+ 64-bit size fields (mostly larger than 2 GB, as that is what
an <c>int</c> of 32 bits can hold). But it is possible to think
of non-sane calling conventions that would make the driver
- callbacks mix up the arguments causing malfunction.
- </p>
+ callbacks mix up the arguments causing malfunction.</p>
<note>
- <p>
- The argument type change is from signed to unsigned which
- may cause problems for e.g. loop termination conditions or
- error conditions if you just change the types all over the place.
- </p>
+ <p>The argument type change is from signed to unsigned. This
+ can cause problems for, for example, loop termination conditions or
+ error conditions if you only change the types all over the place.
+ </p>
</note>
</item>
<tag>Larger <c>size</c> field in <c>ErlIOVec</c></tag>
<item>
- <p>
- The <c>size</c> field in
+ <p>The <c>size</c> field in
<seealso marker="#ErlIOVec"><c>ErlIOVec</c></seealso>
has been changed to <c>ErlDrvSizeT</c> from <c>int</c>.
- Check all code that use that field.
- </p>
- <p>
- Automatic type casting probably makes these changes necessary only
- for a driver that encounters sizes larger than 32 bits.
- </p>
+ Check all code that use that field.</p>
+ <p>Automatic type-casting probably makes these changes necessary only
+ for a driver that encounters sizes &gt; 32 bits.</p>
<note>
- <p>
- The <c>size</c> field changed from signed to unsigned which
- may cause problems for e.g. loop termination conditions or
- error conditions if you just change the types all over the place.
- </p>
+ <p>The <c>size</c> field changed from signed to unsigned. This
+ can cause problems for, for example, loop termination conditions or
+ error conditions if you only change the types all over the place.
+ </p>
</note>
</item>
<tag>Arguments and return values in the driver API</tag>
<item>
- <p>
- Many driver API functions have changed argument type
+ <p>Many driver API functions have changed argument type
and/or return value to <c>ErlDrvSizeT</c> from mostly <c>int</c>.
- Automatic type casting probably makes these changes necessary only
- for a driver that encounters sizes larger than 32 bits.
- </p>
+ Automatic type-casting probably makes these changes necessary only
+ for a driver that encounters sizes &gt; 32 bits.</p>
<taglist>
- <tag><seealso marker="#driver_output">driver_output</seealso></tag>
+ <tag><seealso marker="#driver_output">
+ <c>driver_output</c></seealso></tag>
<item>3rd argument</item>
- <tag><seealso marker="#driver_output2">driver_output2</seealso></tag>
+ <tag><seealso marker="#driver_output2">
+ <c>driver_output2</c></seealso></tag>
<item>3rd and 5th arguments</item>
- <tag>
- <seealso marker="#driver_output_binary">driver_output_binary</seealso>
- </tag>
- <item>3rd 5th and 6th arguments</item>
- <tag><seealso marker="#driver_outputv">driver_outputv</seealso></tag>
+ <tag><seealso marker="#driver_output_binary">
+ <c>driver_output_binary</c></seealso></tag>
+ <item>3rd, 5th, and 6th arguments</item>
+ <tag><seealso marker="#driver_outputv">
+ <c>driver_outputv</c></seealso></tag>
<item>3rd and 5th arguments</item>
- <tag>
- <seealso marker="#driver_vec_to_buf">driver_vec_to_buf</seealso>
- </tag>
+ <tag><seealso marker="#driver_vec_to_buf">
+ <c>driver_vec_to_buf</c></seealso></tag>
<item>3rd argument and return value</item>
- <tag><seealso marker="#driver_alloc">driver_alloc</seealso></tag>
+ <tag><seealso marker="#driver_alloc">
+ <c>driver_alloc</c></seealso></tag>
<item>1st argument</item>
- <tag><seealso marker="#driver_realloc">driver_realloc</seealso></tag>
+ <tag><seealso marker="#driver_realloc">
+ <c>driver_realloc</c></seealso></tag>
<item>2nd argument</item>
- <tag>
- <seealso marker="#driver_alloc_binary">driver_alloc_binary</seealso>
- </tag>
+ <tag><seealso marker="#driver_alloc_binary">
+ <c>driver_alloc_binary</c></seealso></tag>
<item>1st argument</item>
- <tag>
- <seealso marker="#driver_realloc_binary">driver_realloc_binary</seealso>
- </tag>
+ <tag><seealso marker="#driver_realloc_binary">
+ <c>driver_realloc_binary</c></seealso></tag>
<item>2nd argument</item>
- <tag><seealso marker="#driver_enq">driver_enq</seealso></tag>
+ <tag><seealso marker="#driver_enq">
+ <c>driver_enq</c></seealso></tag>
<item>3rd argument</item>
- <tag><seealso marker="#driver_pushq">driver_pushq</seealso></tag>
+ <tag><seealso marker="#driver_pushq">
+ <c>driver_pushq</c></seealso></tag>
<item>3rd argument</item>
- <tag><seealso marker="#driver_deq">driver_deq</seealso></tag>
+ <tag><seealso marker="#driver_deq">
+ <c>driver_deq</c></seealso></tag>
<item>2nd argument and return value</item>
- <tag><seealso marker="#driver_sizeq">driver_sizeq</seealso></tag>
- <item>return value</item>
- <tag><seealso marker="#driver_enq_bin">driver_enq_bin</seealso></tag>
- <item>3rd and 4th argument</item>
- <tag><seealso marker="#driver_pushq_bin">driver_pushq_bin</seealso></tag>
- <item>3rd and 4th argument</item>
- <tag><seealso marker="#driver_enqv">driver_enqv</seealso></tag>
+ <tag><seealso marker="#driver_sizeq">
+ <c>driver_sizeq</c></seealso></tag>
+ <item>Return value</item>
+ <tag><seealso marker="#driver_enq_bin">
+ <c>driver_enq_bin</c></seealso></tag>
+ <item>3rd and 4th arguments</item>
+ <tag><seealso marker="#driver_pushq_bin">
+ <c>driver_pushq_bin</c></seealso></tag>
+ <item>3rd and 4th arguments</item>
+ <tag><seealso marker="#driver_enqv">
+ <c>driver_enqv</c></seealso></tag>
<item>3rd argument</item>
- <tag><seealso marker="#driver_pushqv">driver_pushqv</seealso></tag>
+ <tag><seealso marker="#driver_pushqv">
+ <c>driver_pushqv</c></seealso></tag>
<item>3rd argument</item>
- <tag><seealso marker="#driver_peekqv">driver_peekqv</seealso></tag>
- <item>return value</item>
+ <tag><seealso marker="#driver_peekqv">
+ <c>driver_peekqv</c></seealso></tag>
+ <item>Return value</item>
</taglist>
<note>
- <p>
- This is a change from signed to unsigned which
- may cause problems for e.g. loop termination conditions and
- error conditions if you just change the types all over the place.
- </p>
+ <p>This is a change from signed to unsigned. This can cause
+ problems for, for example, loop termination conditions and error
+ conditions if you only change the types all over the place.</p>
</note>
</item>
</taglist>
</section>
<section>
- <title>DATA TYPES</title>
-
+ <title>Data Types</title>
<taglist>
- <tag><marker id="ErlDrvSizeT"/>ErlDrvSizeT</tag>
- <item><p>An unsigned integer type to be used as <c>size_t</c></p></item>
- <tag><marker id="ErlDrvSSizeT"/>ErlDrvSSizeT</tag>
- <item><p>A signed integer type the size of <c>ErlDrvSizeT</c></p></item>
- <tag><marker id="ErlDrvSysInfo"/>ErlDrvSysInfo</tag>
+ <tag><marker id="ErlDrvSizeT"/><c>ErlDrvSizeT</c></tag>
<item>
- <p/>
- <code type="none">
+ <p>An unsigned integer type to be used as <c>size_t</c>.</p>
+ </item>
+ <tag><marker id="ErlDrvSSizeT"/><c>ErlDrvSSizeT</c></tag>
+ <item>
+ <p>A signed integer type, the size of <c>ErlDrvSizeT</c>.</p>
+ </item>
+ <tag><marker id="ErlDrvSysInfo"/><c>ErlDrvSysInfo</c></tag>
+ <item>
+ <code type="none">
typedef struct ErlDrvSysInfo {
int driver_major_version;
int driver_minor_version;
@@ -558,2610 +583,2638 @@ typedef struct ErlDrvSysInfo {
int nif_major_version;
int nif_minor_version;
int dirty_scheduler_support;
-} ErlDrvSysInfo;
- </code>
-
- <p>
- The <c>ErlDrvSysInfo</c> structure is used for storage of
- information about the Erlang runtime system.
- <seealso marker="#driver_system_info">driver_system_info()</seealso>
- will write the system information when passed a reference to
- a <c>ErlDrvSysInfo</c> structure. A description of the
- fields in the structure follows:
- </p>
- <taglist>
- <tag><c>driver_major_version</c></tag>
- <item>The value of
- <seealso marker="#version_management">ERL_DRV_EXTENDED_MAJOR_VERSION</seealso>
- when the runtime system was compiled. This value is the same
- as the value of
- <seealso marker="#version_management">ERL_DRV_EXTENDED_MAJOR_VERSION</seealso>
- used when compiling the driver; otherwise, the runtime system
- would have refused to load the driver.
- </item>
- <tag><c>driver_minor_version</c></tag>
- <item>The value of
- <seealso marker="#version_management">ERL_DRV_EXTENDED_MINOR_VERSION</seealso>
- when the runtime system was compiled. This value might differ
- from the value of
- <seealso marker="#version_management">ERL_DRV_EXTENDED_MINOR_VERSION</seealso>
- used when compiling the driver.
- </item>
- <tag><c>erts_version</c></tag>
- <item>A string containing the version number of the runtime system
- (the same as returned by
- <seealso marker="erlang#system_info_version">erlang:system_info(version)</seealso>).
- </item>
- <tag><c>otp_release</c></tag>
- <item>A string containing the OTP release number
- (the same as returned by
- <seealso marker="erlang#system_info_otp_release">erlang:system_info(otp_release)</seealso>).
- </item>
- <tag><c>thread_support</c></tag>
- <item>A value <c>!= 0</c> if the runtime system has thread support;
- otherwise, <c>0</c>.
- </item>
- <tag><c>smp_support</c></tag>
- <item>A value <c>!= 0</c> if the runtime system has SMP support;
- otherwise, <c>0</c>.
- </item>
- <tag><c>async_threads</c></tag>
- <item>The number of async threads in the async thread pool used
- by <seealso marker="#driver_async">driver_async()</seealso>
- (the same as returned by
- <seealso marker="erlang#system_info_thread_pool_size">erlang:system_info(thread_pool_size)</seealso>).
- </item>
- <tag><c>scheduler_threads</c></tag>
- <item>The number of scheduler threads used by the runtime system
- (the same as returned by
- <seealso marker="erlang#system_info_schedulers">erlang:system_info(schedulers)</seealso>).
- </item>
- <tag><c>nif_major_version</c></tag>
- <item>The value of <c>ERL_NIF_MAJOR_VERSION</c> when the runtime system was compiled.
- </item>
- <tag><c>nif_minor_version</c></tag>
- <item>The value of <c>ERL_NIF_MINOR_VERSION</c> when the runtime system was compiled.
- </item>
- <tag><c>dirty_scheduler_support</c></tag>
- <item>A value <c>!= 0</c> if the runtime system has support for dirty scheduler threads;
- otherwise <c>0</c>.
- </item>
+} ErlDrvSysInfo;</code>
+ <p>The <c>ErlDrvSysInfo</c> structure is used for storage of
+ information about the Erlang runtime system.
+ <seealso marker="#driver_system_info">
+ <c>driver_system_info</c></seealso>
+ writes the system information when passed a reference to
+ a <c>ErlDrvSysInfo</c> structure. The fields in the structure
+ are as follows:</p>
+ <taglist>
+ <tag><c>driver_major_version</c></tag>
+ <item>
+ <p>The value of <seealso marker="#version_management">
+ <c>ERL_DRV_EXTENDED_MAJOR_VERSION</c></seealso>
+ when the runtime system was compiled. This value is the same
+ as the value of <seealso marker="#version_management">
+ <c>ERL_DRV_EXTENDED_MAJOR_VERSION</c></seealso>
+ used when compiling the driver; otherwise the runtime system
+ would have refused to load the driver.</p>
+ </item>
+ <tag><c>driver_minor_version</c></tag>
+ <item>
+ <p>The value of <seealso marker="#version_management">
+ <c>ERL_DRV_EXTENDED_MINOR_VERSION</c></seealso>
+ when the runtime system was compiled. This value can differ
+ from the value of <seealso marker="#version_management">
+ <c>ERL_DRV_EXTENDED_MINOR_VERSION</c></seealso>
+ used when compiling the driver.</p>
+ </item>
+ <tag><c>erts_version</c></tag>
+ <item>
+ <p>A string containing the version number of the runtime system
+ (the same as returned by
+ <seealso marker="erlang#system_info_version">
+ <c>erlang:system_info(version)</c></seealso>).</p>
+ </item>
+ <tag><c>otp_release</c></tag>
+ <item>
+ <p>A string containing the OTP release number
+ (the same as returned by
+ <seealso marker="erlang#system_info_otp_release">
+ <c>erlang:system_info(otp_release)</c></seealso>).</p>
+ </item>
+ <tag><c>thread_support</c></tag>
+ <item>
+ <p>A value <c>!= 0</c> if the runtime system has thread support;
+ otherwise <c>0</c>.</p>
+ </item>
+ <tag><c>smp_support</c></tag>
+ <item>
+ <p>A value <c>!= 0</c> if the runtime system has SMP support;
+ otherwise <c>0</c>.</p>
+ </item>
+ <tag><c>async_threads</c></tag>
+ <item>
+ <p>The number of async threads in the async thread pool used by
+ <seealso marker="#driver_async"><c>driver_async</c></seealso>
+ (the same as returned by
+ <seealso marker="erlang#system_info_thread_pool_size">
+ <c>erlang:system_info(thread_pool_size)</c></seealso>).</p>
+ </item>
+ <tag><c>scheduler_threads</c></tag>
+ <item>
+ <p>The number of scheduler threads used by the runtime system
+ (the same as returned by
+ <seealso marker="erlang#system_info_schedulers">
+ <c>erlang:system_info(schedulers)</c></seealso>).</p>
+ </item>
+ <tag><c>nif_major_version</c></tag>
+ <item>
+ <p>The value of <c>ERL_NIF_MAJOR_VERSION</c> when the runtime
+ system was compiled.</p>
+ </item>
+ <tag><c>nif_minor_version</c></tag>
+ <item>
+ <p>The value of <c>ERL_NIF_MINOR_VERSION</c> when the runtime
+ system was compiled.</p>
+ </item>
+ <tag><c>dirty_scheduler_support</c></tag>
+ <item>
+ <p>A value <c>!= 0</c> if the runtime system has support for dirty
+ scheduler threads; otherwise <c>0</c>.</p>
+ </item>
</taglist>
</item>
- <tag><marker id="ErlDrvBinary"/>ErlDrvBinary</tag>
+ <tag><marker id="ErlDrvBinary"/><c>ErlDrvBinary</c></tag>
<item>
- <p/>
- <code type="none">
+ <code type="none">
typedef struct ErlDrvBinary {
ErlDrvSint orig_size;
char orig_bytes[];
-} ErlDrvBinary;
-</code>
+} ErlDrvBinary;</code>
<p>The <c>ErlDrvBinary</c> structure is a binary, as sent
between the emulator and the driver. All binaries are
reference counted; when <c>driver_binary_free</c> is called,
the reference count is decremented, when it reaches zero,
- the binary is deallocated. The <c>orig_size</c> is the size
- of the binary, and <c>orig_bytes</c> is the buffer. The
- <c>ErlDrvBinary</c> does not have a fixed size, its size is
+ the binary is deallocated. <c>orig_size</c> is the binary size
+ and <c>orig_bytes</c> is the buffer.
+ <c>ErlDrvBinary</c> has not a fixed size, its size is
<c>orig_size + 2 * sizeof(int)</c>.</p>
<note>
<p>The <c>refc</c> field has been removed. The reference count of
an <c>ErlDrvBinary</c> is now stored elsewhere. The
- reference count of an <c>ErlDrvBinary</c> can be accessed via
- <seealso marker="#driver_binary_get_refc">driver_binary_get_refc()</seealso>,
- <seealso marker="#driver_binary_inc_refc">driver_binary_inc_refc()</seealso>,
- and
- <seealso marker="#driver_binary_dec_refc">driver_binary_dec_refc()</seealso>.</p>
+ reference count of an <c>ErlDrvBinary</c> can be accessed through
+ <seealso marker="#driver_binary_get_refc">
+ <c>driver_binary_get_refc</c></seealso>,
+ <seealso marker="#driver_binary_inc_refc">
+ <c>driver_binary_inc_refc</c></seealso>, and
+ <seealso marker="#driver_binary_dec_refc">
+ <c>driver_binary_dec_refc</c></seealso>.</p>
</note>
<p>Some driver calls, such as <c>driver_enq_binary</c>,
increment the driver reference count, and others, such as
<c>driver_deq</c> decrement it.</p>
- <p>Using a driver binary instead of a normal buffer, is often
- faster, since the emulator doesn't need to copy the data,
+ <p>Using a driver binary instead of a normal buffer is often
+ faster, as the emulator needs not to copy the data,
only the pointer is used.</p>
<p>A driver binary allocated in the driver, with
- <c>driver_alloc_binary</c>, should be freed in the driver (unless otherwise stated),
- with <c>driver_free_binary</c>. (Note that this doesn't
+ <c>driver_alloc_binary</c>, is to be freed in the driver
+ (unless otherwise stated)
+ with <c>driver_free_binary</c>. (Notice that this does not
necessarily deallocate it, if the driver is still referred
in the emulator, the ref-count will not go to zero.)</p>
<p>Driver binaries are used in the <c>driver_output2</c> and
<c>driver_outputv</c> calls, and in the queue. Also the
- driver call-back <seealso marker="driver_entry#outputv">outputv</seealso> uses driver
- binaries.</p>
- <p>If the driver for some reason or another, wants to keep a
- driver binary around, in a static variable for instance, the
- reference count should be incremented,
- and the binary can later be freed in the <seealso marker="driver_entry#stop">stop</seealso> call-back, with
- <c>driver_free_binary</c>.</p>
- <p>Note that since a driver binary is shared by the driver and
- the emulator, a binary received from the emulator or sent to
- the emulator, must not be changed by the driver.</p>
- <p>Since erts version 5.5 (OTP release R11B), orig_bytes is
+ driver callback <seealso marker="driver_entry#outputv">
+ <c>outputv</c></seealso> uses driver binaries.</p>
+ <p>If the driver for some reason wants to keep a
+ driver binary around, for example in a static variable, the
+ reference count is to be incremented, and the binary can later
+ be freed in the <seealso marker="driver_entry#stop">
+ <c>stop</c></seealso> callback, with <c>driver_free_binary</c>.</p>
+ <p>Notice that as a driver binary is shared by the driver and
+ the emulator. A binary received from the emulator or sent to
+ the emulator must not be changed by the driver.</p>
+ <p>Since ERTS 5.5 (Erlang/OTP R11B), <c>orig_bytes</c> is
guaranteed to be properly aligned for storage of an array of
doubles (usually 8-byte aligned).</p>
</item>
- <tag>ErlDrvData</tag>
+ <tag><c>ErlDrvData</c></tag>
<item>
- <p>The <c>ErlDrvData</c> is a handle to driver-specific data,
- passed to the driver call-backs. It is a pointer, and is
+ <p>A handle to driver-specific data,
+ passed to the driver callbacks. It is a pointer, and is
most often type cast to a specific pointer in the driver.</p>
</item>
- <tag>SysIOVec</tag>
+ <tag><c>SysIOVec</c></tag>
<item>
- <p>This is a system I/O vector, as used by <c>writev</c> on
- unix and <c>WSASend</c> on Win32. It is used in
+ <p>A system I/O vector, as used by <c>writev</c> on
+ Unix and <c>WSASend</c> on Win32. It is used in
<c>ErlIOVec</c>.</p>
</item>
- <tag><marker id="ErlIOVec"/>ErlIOVec</tag>
+ <tag><marker id="ErlIOVec"/><c>ErlIOVec</c></tag>
<item>
- <p/>
- <code type="none">
+ <code type="none">
typedef struct ErlIOVec {
int vsize;
ErlDrvSizeT size;
SysIOVec* iov;
ErlDrvBinary** binv;
-} ErlIOVec;
-</code>
- <p>The I/O vector used by the emulator and drivers, is a list
+} ErlIOVec;</code>
+ <p>The I/O vector used by the emulator and drivers is a list
of binaries, with a <c>SysIOVec</c> pointing to the buffers
of the binaries. It is used in <c>driver_outputv</c> and the
- <seealso marker="driver_entry#outputv">outputv</seealso>
- driver call-back. Also, the driver queue is an
+ <seealso marker="driver_entry#outputv"><c>outputv</c></seealso>
+ driver callback. Also, the driver queue is an
<c>ErlIOVec</c>.</p>
</item>
-
- <tag>ErlDrvMonitor</tag>
+ <tag><c>ErlDrvMonitor</c></tag>
<item>
<p>When a driver creates a monitor for a process, a
<c>ErlDrvMonitor</c> is filled in. This is an opaque
- data-type which can be assigned to but not compared without
- using the supplied compare function (i.e. it behaves like a struct).</p>
- <p>The driver writer should provide the memory for storing the
- monitor when calling <seealso marker="#driver_monitor_process">driver_monitor_process</seealso>. The
+ data type that can be assigned to, but not compared without
+ using the supplied compare function (that is, it behaves like
+ a struct).</p>
+ <p>The driver writer is to provide the memory for storing the
+ monitor when calling <seealso marker="#driver_monitor_process">
+ <c>driver_monitor_process</c></seealso>. The
address of the data is not stored outside of the driver, so
- the <c>ErlDrvMonitor</c> can be used as any other datum, it
- can be copied, moved in memory, forgotten etc.</p>
+ <c>ErlDrvMonitor</c> can be used as any other data, it
+ can be copied, moved in memory, forgotten, and so on.</p>
</item>
- <tag><marker id="ErlDrvNowData"/>ErlDrvNowData</tag>
+ <tag><marker id="ErlDrvNowData"/><c>ErlDrvNowData</c></tag>
<item>
- <p>The <c>ErlDrvNowData</c> structure holds a timestamp
+ <p>The <c>ErlDrvNowData</c> structure holds a time stamp
consisting of three values measured from some arbitrary
point in the past. The three structure members are:</p>
<taglist>
- <tag>megasecs</tag>
+ <tag><c>megasecs</c></tag>
<item>The number of whole megaseconds elapsed since the arbitrary
- point in time</item>
- <tag>secs</tag>
+ point in time</item>
+ <tag><c>secs</c></tag>
<item>The number of whole seconds elapsed since the arbitrary
- point in time</item>
- <tag>microsecs</tag>
+ point in time</item>
+ <tag><c>microsecs</c></tag>
<item>The number of whole microseconds elapsed since the arbitrary
- point in time</item>
+ point in time</item>
</taglist>
</item>
- <tag><marker id="ErlDrvPDL"/>ErlDrvPDL</tag>
+ <tag><marker id="ErlDrvPDL"/><c>ErlDrvPDL</c></tag>
<item>
- <p>If certain port specific data have to be accessed from other
- threads than those calling the driver call-backs, a port data lock
- can be used in order to synchronize the operations on the data.
- Currently, the only port specific data that the emulator
+ <p>If certain port-specific data must be accessed from other
+ threads than those calling the driver callbacks, a port data lock
+ can be used to synchronize the operations on the data.
+ Currently, the only port-specific data that the emulator
associates with the port data lock is the driver queue.</p>
- <p>Normally a driver instance does not have a port data lock. If
- the driver instance wants to use a port data lock, it has to
+ <p>Normally a driver instance has no port data lock. If
+ the driver instance wants to use a port data lock, it must
create the port data lock by calling
- <seealso marker="#driver_pdl_create">driver_pdl_create()</seealso>.
- <em>NOTE</em>: Once the port data lock has been created, every
- access to data associated with the port data lock has to be done
- while having the port data lock locked. The port data lock is
- locked, and unlocked, respectively, by use of
- <seealso marker="#driver_pdl_lock">driver_pdl_lock()</seealso>, and
- <seealso marker="#driver_pdl_unlock">driver_pdl_unlock()</seealso>.</p>
+ <seealso marker="#driver_pdl_create">
+ <c>driver_pdl_create</c></seealso>.</p>
+ <note>
+ <p>Once the port data lock has been created, every
+ access to data associated with the port data lock must be done
+ while the port data lock is locked. The port data lock is
+ locked and unlocked by
+ <seealso marker="#driver_pdl_lock">
+ <c>driver_pdl_lock</c></seealso>, and
+ <seealso marker="#driver_pdl_unlock">
+ <c>driver_pdl_unlock</c></seealso>, respectively.</p>
+ </note>
<p>A port data lock is reference counted, and when the reference
- count reaches zero, it will be destroyed. The emulator will at
- least increment the reference count once when the lock is
- created and decrement it once when the port associated with
- the lock terminates. The emulator will also increment the
- reference count when an async job is enqueued and decrement
- it after an async job has been invoked. Besides
- this, it is the responsibility of the driver to ensure that
+ count reaches zero, it is destroyed. The emulator at
+ least increments the reference count once when the lock is
+ created and decrements it once the port associated with
+ the lock terminates. The emulator also increments the
+ reference count when an async job is enqueued and decrements
+ it when an async job has been invoked.
+ Also, the driver is responsible for ensuring that
the reference count does not reach zero before the last use
of the lock by the driver has been made. The reference count
- can be read, incremented, and decremented, respectively, by
- use of
- <seealso marker="#driver_pdl_get_refc">driver_pdl_get_refc()</seealso>,
- <seealso marker="#driver_pdl_inc_refc">driver_pdl_inc_refc()</seealso>, and
- <seealso marker="#driver_pdl_dec_refc">driver_pdl_dec_refc()</seealso>.</p>
+ can be read, incremented, and decremented by
+ <seealso marker="#driver_pdl_get_refc">
+ <c>driver_pdl_get_refc</c></seealso>,
+ <seealso marker="#driver_pdl_inc_refc">
+ <c>driver_pdl_inc_refc</c></seealso>, and
+ <seealso marker="#driver_pdl_dec_refc">
+ <c>driver_pdl_dec_refc</c></seealso>, respectively.</p>
</item>
-
- <tag><marker id="ErlDrvTid"/>ErlDrvTid</tag>
+ <tag><marker id="ErlDrvTid"/><c>ErlDrvTid</c></tag>
<item>
<p>Thread identifier.</p>
- <p>See also:
- <seealso marker="#erl_drv_thread_create">erl_drv_thread_create()</seealso>,
- <seealso marker="#erl_drv_thread_exit">erl_drv_thread_exit()</seealso>,
- <seealso marker="#erl_drv_thread_join">erl_drv_thread_join()</seealso>,
- <seealso marker="#erl_drv_thread_self">erl_drv_thread_self()</seealso>,
- and
- <seealso marker="#erl_drv_equal_tids">erl_drv_equal_tids()</seealso>.
- </p>
+ <p>See also <seealso marker="#erl_drv_thread_create">
+ <c>erl_drv_thread_create</c></seealso>,
+ <seealso marker="#erl_drv_thread_exit">
+ <c>erl_drv_thread_exit</c></seealso>,
+ <seealso marker="#erl_drv_thread_join">
+ <c>erl_drv_thread_join</c></seealso>,
+ <seealso marker="#erl_drv_thread_self">
+ <c>erl_drv_thread_self</c></seealso>, and
+ <seealso marker="#erl_drv_equal_tids">
+ <c>erl_drv_equal_tids</c></seealso>.</p>
</item>
- <tag><marker id="ErlDrvThreadOpts"/>ErlDrvThreadOpts</tag>
+ <tag><marker id="ErlDrvThreadOpts"/><c>ErlDrvThreadOpts</c></tag>
<item>
- <p/>
- <code type="none">
- int suggested_stack_size;
- </code>
+ <code type="none">
+int suggested_stack_size;</code>
<p>Thread options structure passed to
- <seealso marker="#erl_drv_thread_create">erl_drv_thread_create()</seealso>.
- Currently the following fields exist:
- </p>
+ <seealso marker="#erl_drv_thread_create">
+ <c>erl_drv_thread_create</c></seealso>.
+ The following fields exists:</p>
<taglist>
- <tag>suggested_stack_size</tag>
- <item>A suggestion, in kilo-words, on how large a stack to use. A value less
- than zero means default size.
+ <tag><c>suggested_stack_size</c></tag>
+ <item>A suggestion, in kilowords, on how large a stack to use.
+ A value &lt; 0 means default size.
</item>
</taglist>
- <p>See also:
- <seealso marker="#erl_drv_thread_opts_create">erl_drv_thread_opts_create()</seealso>,
- <seealso marker="#erl_drv_thread_opts_destroy">erl_drv_thread_opts_destroy()</seealso>,
- and
- <seealso marker="#erl_drv_thread_create">erl_drv_thread_create()</seealso>.
- </p>
+ <p>See also <seealso marker="#erl_drv_thread_opts_create">
+ <c>erl_drv_thread_opts_create</c></seealso>,
+ <seealso marker="#erl_drv_thread_opts_destroy">
+ <c>erl_drv_thread_opts_destroy</c></seealso>, and
+ <seealso marker="#erl_drv_thread_create">
+ <c>erl_drv_thread_create</c></seealso>.</p>
</item>
-
- <tag><marker id="ErlDrvMutex"/>ErlDrvMutex</tag>
+ <tag><marker id="ErlDrvMutex"/><c>ErlDrvMutex</c></tag>
<item>
<p>Mutual exclusion lock. Used for synchronizing access to shared data.
- Only one thread at a time can lock a mutex.
- </p>
- <p>See also:
- <seealso marker="#erl_drv_mutex_create">erl_drv_mutex_create()</seealso>,
- <seealso marker="#erl_drv_mutex_destroy">erl_drv_mutex_destroy()</seealso>,
- <seealso marker="#erl_drv_mutex_lock">erl_drv_mutex_lock()</seealso>,
- <seealso marker="#erl_drv_mutex_trylock">erl_drv_mutex_trylock()</seealso>,
- and
- <seealso marker="#erl_drv_mutex_unlock">erl_drv_mutex_unlock()</seealso>.
- </p>
+ Only one thread at a time can lock a mutex.</p>
+ <p>See also <seealso marker="#erl_drv_mutex_create">
+ <c>erl_drv_mutex_create</c></seealso>,
+ <seealso marker="#erl_drv_mutex_destroy">
+ <c>erl_drv_mutex_destroy</c></seealso>,
+ <seealso marker="#erl_drv_mutex_lock">
+ <c>erl_drv_mutex_lock</c></seealso>,
+ <seealso marker="#erl_drv_mutex_trylock">
+ <c>erl_drv_mutex_trylock</c></seealso>, and
+ <seealso marker="#erl_drv_mutex_unlock">
+ <c>erl_drv_mutex_unlock</c></seealso>.</p>
</item>
- <tag><marker id="ErlDrvCond"/>ErlDrvCond</tag>
+ <tag><marker id="ErlDrvCond"/><c>ErlDrvCond</c></tag>
<item>
- <p>Condition variable. Used when threads need to wait for a specific
- condition to appear before continuing execution. Condition variables
- need to be used with associated mutexes.
- </p>
- <p>See also:
- <seealso marker="#erl_drv_cond_create">erl_drv_cond_create()</seealso>,
- <seealso marker="#erl_drv_cond_destroy">erl_drv_cond_destroy()</seealso>,
- <seealso marker="#erl_drv_cond_signal">erl_drv_cond_signal()</seealso>,
- <seealso marker="#erl_drv_cond_broadcast">erl_drv_cond_broadcast()</seealso>,
- and
- <seealso marker="#erl_drv_cond_wait">erl_drv_cond_wait()</seealso>.
- </p>
+ <p>Condition variable. Used when threads must wait for a specific
+ condition to appear before continuing execution. Condition variables
+ must be used with associated mutexes.</p>
+ <p>See also <seealso marker="#erl_drv_cond_create">
+ <c>erl_drv_cond_create</c></seealso>,
+ <seealso marker="#erl_drv_cond_destroy">
+ <c>erl_drv_cond_destroy</c></seealso>,
+ <seealso marker="#erl_drv_cond_signal">
+ <c>erl_drv_cond_signal</c></seealso>,
+ <seealso marker="#erl_drv_cond_broadcast">
+ <c>erl_drv_cond_broadcast</c></seealso>, and
+ <seealso marker="#erl_drv_cond_wait">
+ <c>erl_drv_cond_wait</c></seealso>.</p>
</item>
- <tag><marker id="ErlDrvRWLock"/>ErlDrvRWLock</tag>
+ <tag><marker id="ErlDrvRWLock"/><c>ErlDrvRWLock</c></tag>
<item>
<p>Read/write lock. Used to allow multiple threads to read shared data
- while only allowing one thread to write the same data. Multiple threads
- can read lock an rwlock at the same time, while only one thread can
- read/write lock an rwlock at a time.
- </p>
- <p>See also:
- <seealso marker="#erl_drv_rwlock_create">erl_drv_rwlock_create()</seealso>,
- <seealso marker="#erl_drv_rwlock_destroy">erl_drv_rwlock_destroy()</seealso>,
- <seealso marker="#erl_drv_rwlock_rlock">erl_drv_rwlock_rlock()</seealso>,
- <seealso marker="#erl_drv_rwlock_tryrlock">erl_drv_rwlock_tryrlock()</seealso>,
- <seealso marker="#erl_drv_rwlock_runlock">erl_drv_rwlock_runlock()</seealso>,
- <seealso marker="#erl_drv_rwlock_rwlock">erl_drv_rwlock_rwlock()</seealso>,
- <seealso marker="#erl_drv_rwlock_tryrwlock">erl_drv_rwlock_tryrwlock()</seealso>,
- and
- <seealso marker="#erl_drv_rwlock_rwunlock">erl_drv_rwlock_rwunlock()</seealso>.
- </p>
+ while only allowing one thread to write the same data. Multiple
+ threads can read lock an rwlock at the same time, while only
+ one thread can read/write lock an rwlock at a time.</p>
+ <p>See also <seealso marker="#erl_drv_rwlock_create">
+ <c>erl_drv_rwlock_create</c></seealso>,
+ <seealso marker="#erl_drv_rwlock_destroy">
+ <c>erl_drv_rwlock_destroy</c></seealso>,
+ <seealso marker="#erl_drv_rwlock_rlock">
+ <c>erl_drv_rwlock_rlock</c></seealso>,
+ <seealso marker="#erl_drv_rwlock_tryrlock">
+ <c>erl_drv_rwlock_tryrlock</c></seealso>,
+ <seealso marker="#erl_drv_rwlock_runlock">
+ <c>erl_drv_rwlock_runlock</c></seealso>,
+ <seealso marker="#erl_drv_rwlock_rwlock">
+ <c>erl_drv_rwlock_rwlock</c></seealso>,
+ <seealso marker="#erl_drv_rwlock_tryrwlock">
+ <c>erl_drv_rwlock_tryrwlock</c></seealso>, and
+ <seealso marker="#erl_drv_rwlock_rwunlock">
+ <c>erl_drv_rwlock_rwunlock</c></seealso>.</p>
</item>
- <tag><marker id="ErlDrvTSDKey"/>ErlDrvTSDKey</tag>
+ <tag><marker id="ErlDrvTSDKey"/><c>ErlDrvTSDKey</c></tag>
<item>
- <p>Key which thread specific data can be associated with.</p>
- <p>See also:
- <seealso marker="#erl_drv_tsd_key_create">erl_drv_tsd_key_create()</seealso>,
- <seealso marker="#erl_drv_tsd_key_destroy">erl_drv_tsd_key_destroy()</seealso>,
- <seealso marker="#erl_drv_tsd_set">erl_drv_tsd_set()</seealso>,
- and
- <seealso marker="#erl_drv_tsd_get">erl_drv_tsd_get()</seealso>.
- </p>
+ <p>Key that thread-specific data can be associated with.</p>
+ <p>See also <seealso marker="#erl_drv_tsd_key_create">
+ <c>erl_drv_tsd_key_create</c></seealso>,
+ <seealso marker="#erl_drv_tsd_key_destroy">
+ <c>erl_drv_tsd_key_destroy</c></seealso>,
+ <seealso marker="#erl_drv_tsd_set">
+ <c>erl_drv_tsd_set</c></seealso>, and
+ <seealso marker="#erl_drv_tsd_get">
+ <c>erl_drv_tsd_get</c></seealso>.</p>
</item>
- <tag><marker id="ErlDrvTime"/>ErlDrvTime</tag>
+ <tag><marker id="ErlDrvTime"/><c>ErlDrvTime</c></tag>
<item>
- <p>A signed 64-bit integer type for representation of time.</p>
+ <p>A signed 64-bit integer type for time representation.</p>
</item>
- <tag><marker id="ErlDrvTimeUnit"/>ErlDrvTimeUnit</tag>
+ <tag><marker id="ErlDrvTimeUnit"/><c>ErlDrvTimeUnit</c></tag>
<item>
<p>An enumeration of time units supported by the driver API:</p>
- <taglist>
+ <taglist>
<tag><c>ERL_DRV_SEC</c></tag>
- <item><p>Seconds</p></item>
+ <item>Seconds</item>
<tag><c>ERL_DRV_MSEC</c></tag>
- <item><p>Milliseconds</p></item>
+ <item>Milliseconds</item>
<tag><c>ERL_DRV_USEC</c></tag>
- <item><p>Microseconds</p></item>
+ <item>Microseconds</item>
<tag><c>ERL_DRV_NSEC</c></tag>
- <item><p>Nanoseconds</p></item>
- </taglist>
+ <item>Nanoseconds</item>
+ </taglist>
</item>
- </taglist>
- </section>
+ </taglist>
+ </section>
<funcs>
<func>
- <name><ret>void</ret><nametext>driver_system_info(ErlDrvSysInfo *sys_info_ptr, size_t size)</nametext></name>
- <fsummary>Get information about the Erlang runtime system</fsummary>
+ <name><ret>void</ret><nametext>add_driver_entry(ErlDrvEntry
+ *de)</nametext></name>
+ <fsummary>Add a driver entry.</fsummary>
<desc>
- <marker id="driver_system_info"></marker>
- <p>This function will write information about the Erlang runtime
- system into the
- <seealso marker="#ErlDrvSysInfo">ErlDrvSysInfo</seealso>
- structure referred to by the first argument. The second
- argument should be the size of the
- <seealso marker="#ErlDrvSysInfo">ErlDrvSysInfo</seealso>
- structure, i.e., <c>sizeof(ErlDrvSysInfo)</c>.</p>
- <p>See the documentation of the
- <seealso marker="#ErlDrvSysInfo">ErlDrvSysInfo</seealso>
- structure for information about specific fields.</p>
+ <marker id="add_driver_entry"></marker>
+ <p>Adds a driver entry to the list of drivers known by Erlang.
+ The <seealso marker="driver_entry#init"><c>init</c></seealso>
+ function of parameter <c>de</c> is called.</p>
+ <note>
+ <p>To use this function for adding drivers residing in
+ dynamically loaded code is dangerous. If the driver code
+ for the added driver resides in the same dynamically
+ loaded module (that is, <c>.so</c> file) as a normal
+ dynamically loaded driver (loaded with the <c>erl_ddll</c>
+ interface), the caller is to call
+ <seealso marker="#driver_lock_driver">
+ <c>driver_lock_driver</c></seealso> before
+ adding driver entries.</p>
+ <p><em>Use of this function is generally deprecated.</em></p>
+ </note>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_output(ErlDrvPort port, char *buf, ErlDrvSizeT len)</nametext></name>
- <fsummary>Send data from driver to port owner</fsummary>
+ <name><ret>void *</ret>
+ <nametext>driver_alloc(ErlDrvSizeT size)</nametext></name>
+ <fsummary>Allocate memory.</fsummary>
<desc>
- <marker id="driver_output"></marker>
- <p>The <c>driver_output</c> function is used to send data from
- the driver up to the emulator. The data will be received as
- terms or binary data, depending on how the driver port was
- opened.</p>
- <p>The data is queued in the port owner process' message
- queue. Note that this does not yield to the emulator. (Since
- the driver and the emulator run in the same thread.)</p>
- <p>The parameter <c>buf</c> points to the data to send, and
- <c>len</c> is the number of bytes.</p>
- <p>The return value for all output functions is 0. (Unless the
- driver is used for distribution, in which case it can fail
- and return -1. For normal use, the output function always
- returns 0.)</p>
+ <marker id="driver_alloc"></marker>
+ <p>Allocates a memory block of the size specified
+ in <c>size</c>, and returns it. This fails only on out of
+ memory, in which case <c>NULL</c> is returned. (This is most
+ often a wrapper for <c>malloc</c>).</p>
+ <p>Memory allocated must be explicitly freed with a corresponding
+ call to <seealso marker="#driver_free"><c>driver_free</c></seealso>
+ (unless otherwise stated).</p>
+ <p>This function is thread-safe.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_output2(ErlDrvPort port, char *hbuf, ErlDrvSizeT hlen, char *buf, ErlDrvSizeT len)</nametext></name>
- <fsummary>Send data and binary data to port owner</fsummary>
+ <name><ret>ErlDrvBinary *</ret>
+ <nametext>driver_alloc_binary(ErlDrvSizeT size)</nametext></name>
+ <fsummary>Allocate a driver binary.</fsummary>
<desc>
- <marker id="driver_output2"></marker>
- <p>The <c>driver_output2</c> function first sends <c>hbuf</c>
- (length in <c>hlen</c>) data as a list, regardless of port
- settings. Then <c>buf</c> is sent as a binary or list.
- E.g. if <c>hlen</c> is 3 then the port owner process will
- receive <c>[H1, H2, H3 | T]</c>.</p>
- <p>The point of sending data as a list header, is to facilitate
- matching on the data received.</p>
- <p>The return value is 0 for normal use.</p>
+ <marker id="driver_alloc_binary"></marker>
+ <p>Allocates a driver binary with a memory block
+ of at least <c>size</c> bytes, and returns a pointer to it,
+ or <c>NULL</c> on failure (out of memory). When a driver binary has
+ been sent to the emulator, it must not be changed. Every
+ allocated binary is to be freed by a corresponding call to
+ <seealso marker="#driver_free_binary">
+ <c>driver_free_binary</c></seealso> (unless otherwise stated).</p>
+ <p>Notice that a driver binary has an internal reference counter.
+ This means that calling <c>driver_free_binary</c>, it may not
+ actually dispose of it. If it is sent to the emulator, it can
+ be referenced there.</p>
+ <p>The driver binary has a field, <c>orig_bytes</c>, which
+ marks the start of the data in the binary.</p>
+ <p>This function is thread-safe.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_output_binary(ErlDrvPort port, char *hbuf, ErlDrvSizeT hlen, ErlDrvBinary* bin, ErlDrvSizeT offset, ErlDrvSizeT len)</nametext></name>
- <fsummary>Send data from a driver binary to port owner</fsummary>
+ <name><ret>long</ret><nametext>driver_async(ErlDrvPort port, unsigned
+ int* key, void (*async_invoke)(void*), void* async_data, void
+ (*async_free)(void*))</nametext></name>
+ <fsummary>Perform an asynchronous call within a driver.</fsummary>
<desc>
- <marker id="driver_output_binary"></marker>
- <p>This function sends data to port owner process from a
- driver binary, it has a header buffer (<c>hbuf</c>
- and <c>hlen</c>) just like <c>driver_output2</c>. The
- <c>hbuf</c> parameter can be <c>NULL</c>.</p>
- <p>The parameter <c>offset</c> is an offset into the binary and
- <c>len</c> is the number of bytes to send.</p>
- <p>Driver binaries are created with <c>driver_alloc_binary</c>.</p>
- <p>The data in the header is sent as a list and the binary as
- an Erlang binary in the tail of the list.</p>
- <p>E.g. if <c>hlen</c> is 2, then the port owner process will
- receive <c><![CDATA[[H1, H2 | <<T>>]]]></c>.</p>
- <p>The return value is 0 for normal use.</p>
- <p>Note that, using the binary syntax in Erlang, the driver
- application can match the header directly from the binary,
- so the header can be put in the binary, and hlen can be set
- to 0.</p>
+ <marker id="driver_async"></marker>
+ <p>Performs an asynchronous call. The function
+ <c>async_invoke</c> is invoked in a thread separate from the
+ emulator thread. This enables the driver to perform
+ time-consuming, blocking operations without blocking the
+ emulator.</p>
+ <p>The async thread pool size can be set with command-line argument
+ <seealso marker="erl#async_thread_pool_size"><c>+A</c></seealso>
+ in <seealso marker="erl"><c>erl(1)</c></seealso>.
+ If an async thread pool is unavailable, the call is made
+ synchronously in the thread calling <c>driver_async</c>. The
+ current number of async threads in the async thread pool can be
+ retrieved through <seealso marker="#driver_system_info">
+ <c>driver_system_info</c></seealso>.</p>
+ <p>If a thread pool is available, a thread is used.
+ If argument <c>key</c> is <c>NULL</c>, the threads from the
+ pool are used in a round-robin way, each call to
+ <c>driver_async</c> uses the next thread in the pool. With
+ argument <c>key</c> set, this behavior is changed. The two
+ same values of <c>*key</c> always get the same thread.</p>
+ <p>To ensure that a driver instance always uses the same
+ thread, the following call can be used:</p>
+ <code type="none"><![CDATA[
+unsigned int myKey = driver_async_port_key(myPort);
+
+r = driver_async(myPort, &myKey, myData, myFunc); ]]></code>
+ <p>It is enough to initialize <c>myKey</c> once for each
+ driver instance.</p>
+ <p>If a thread is already working, the calls are
+ queued up and executed in order. Using the same thread for
+ each driver instance ensures that the calls are made in sequence.</p>
+ <p>The <c>async_data</c> is the argument to the functions
+ <c>async_invoke</c> and <c>async_free</c>. It is typically a
+ pointer to a structure containing a pipe or event that
+ can be used to signal that the async operation completed.
+ The data is to be freed in <c>async_free</c>.</p>
+ <p>When the async operation is done,
+ <seealso marker="driver_entry#ready_async">
+ <c>ready_async</c></seealso> driver
+ entry function is called. If <c>ready_async</c> is <c>NULL</c> in
+ the driver entry, the <c>async_free</c> function is called
+ instead.</p>
+ <p>The return value is <c>-1</c> if the <c>driver_async</c> call
+ fails.</p>
+ <note>
+ <p>As from ERTS 5.5.4.3 the default stack size for
+ threads in the async-thread pool is 16 kilowords,
+ that is, 64 kilobyte on 32-bit architectures.
+ This small default size has been chosen because the
+ amount of async-threads can be quite large. The
+ default stack size is enough for drivers delivered
+ with Erlang/OTP, but is possibly not sufficiently large
+ for other dynamically linked-in drivers that use the
+ <c>driver_async</c> functionality. A suggested stack size
+ for threads in the async-thread pool can be configured
+ through command-line argument
+ <seealso marker="erl#async_thread_stack_size"><c>+a</c></seealso>
+ in <seealso marker="erl"><c>erl(1)</c></seealso>.</p>
+ </note>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_outputv(ErlDrvPort port, char* hbuf, ErlDrvSizeT hlen, ErlIOVec *ev, ErlDrvSizeT skip)</nametext></name>
- <fsummary>Send vectorized data to port owner</fsummary>
+ <name><ret>unsigned int</ret><nametext>driver_async_port_key(ErlDrvPort
+ port)</nametext></name>
+ <fsummary>Calculate an async key from an ErlDrvPort.</fsummary>
<desc>
- <marker id="driver_outputv"></marker>
- <p>This function sends data from an IO vector, <c>ev</c>, to
- the port owner process. It has a header buffer (<c>hbuf</c>
- and <c>hlen</c>), just like <c>driver_output2</c>.</p>
- <p>The <c>skip</c> parameter is a number of bytes to skip of
- the <c>ev</c> vector from the head.</p>
- <p>You get vectors of <c>ErlIOVec</c> type from the driver
- queue (see below), and the <seealso marker="driver_entry#outputv">outputv</seealso> driver entry
- function. You can also make them yourself, if you want to
- send several <c>ErlDrvBinary</c> buffers at once. Often
- it is faster to use <c>driver_output</c> or
- <c>driver_output_binary</c>.</p>
- <p>E.g. if <c>hlen</c> is 2 and <c>ev</c> points to an array of
- three binaries, the port owner process will receive <c><![CDATA[[H1, H2, <<B1>>, <<B2>> | <<B3>>]]]></c>.</p>
- <p>The return value is 0 for normal use.</p>
- <p>The comment for <c>driver_output_binary</c> applies for
- <c>driver_outputv</c> too.</p>
+ <marker id="driver_async_port_key"></marker>
+ <p>Calculates a key for later use in <seealso
+ marker="#driver_async"><c>driver_async</c></seealso>. The keys are
+ evenly distributed so that a fair mapping between port IDs
+ and async thread IDs is achieved.</p>
+ <note>
+ <p>Before Erlang/OTP R16, the port ID could be used as a key
+ with proper casting, but after the rewrite of the port
+ subsystem, this is no longer the case. With this function, you
+ can achieve the same distribution based on port IDs as before
+ Erlang/OTP R16.</p>
+ </note>
</desc>
</func>
+
<func>
- <name><ret>ErlDrvSizeT</ret><nametext>driver_vec_to_buf(ErlIOVec *ev, char *buf, ErlDrvSizeT len)</nametext></name>
- <fsummary>Collect data segments into a buffer</fsummary>
+ <name><ret>long</ret>
+ <nametext>driver_binary_dec_refc(ErlDrvBinary *bin)</nametext></name>
+ <fsummary>Decrement the reference count of a driver binary.</fsummary>
<desc>
- <marker id="driver_vec_to_buf"></marker>
- <p>This function collects several segments of data, referenced
- by <c>ev</c>, by copying them in order to the buffer
- <c>buf</c>, of the size <c>len</c>.</p>
- <p>If the data is to be sent from the driver to the port owner
- process, it is faster to use <c>driver_outputv</c>.</p>
- <p>The return value is the space left in the buffer, i.e. if
- the <c>ev</c> contains less than <c>len</c> bytes it's the
- difference, and if <c>ev</c> contains <c>len</c> bytes or
- more, it's 0. This is faster if there is more than one header byte,
- since the binary syntax can construct integers directly from
- the binary.</p>
+ <marker id="driver_binary_dec_refc"></marker>
+ <p>Decrements the reference count on <c>bin</c> and returns
+ the reference count reached after the decrement.</p>
+ <p>This function is only thread-safe when the emulator with SMP
+ support is used.</p>
+ <note>
+ <p>The reference count of driver binary is normally to be decremented
+ by calling <seealso marker="#driver_free_binary">
+ <c>driver_free_binary</c></seealso>.</p>
+ <p><c>driver_binary_dec_refc</c> does <em>not</em> free
+ the binary if the reference count reaches zero. <em>Only</em>
+ use <c>driver_binary_dec_refc</c> when you are sure
+ <em>not</em> to reach a reference count of zero.</p>
+ </note>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_set_timer(ErlDrvPort port, unsigned long time)</nametext></name>
- <fsummary>Set a timer to call the driver</fsummary>
+ <name><ret>long</ret>
+ <nametext>driver_binary_get_refc(ErlDrvBinary *bin)</nametext></name>
+ <fsummary>Get the reference count of a driver binary.</fsummary>
<desc>
- <marker id="driver_set_timer"></marker>
- <p>This function sets a timer on the driver, which will count
- down and call the driver when it is timed out. The
- <c>time</c> parameter is the time in milliseconds before the
- timer expires.</p>
- <p>When the timer reaches 0 and expires, the driver entry
- function <seealso marker="driver_entry#timeout">timeout</seealso> is called.</p>
- <p>Note that there is only one timer on each driver instance;
- setting a new timer will replace an older one.</p>
- <p>Return value is 0 (-1 only when the <c>timeout</c> driver
- function is <c>NULL</c>).</p>
+ <marker id="driver_binary_get_refc"></marker>
+ <p>Returns the current reference count on <c>bin</c>.</p>
+ <p>This function is only thread-safe when the emulator with SMP
+ support is used.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>long</ret>
+ <nametext>driver_binary_inc_refc(ErlDrvBinary *bin)</nametext></name>
+ <fsummary>Increment the reference count of a driver binary.</fsummary>
+ <desc>
+ <marker id="driver_binary_inc_refc"></marker>
+ <p>Increments the reference count on <c>bin</c> and returns
+ the reference count reached after the increment.</p>
+ <p>This function is only thread-safe when the emulator with SMP
+ support is used.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ErlDrvTermData</ret><nametext>driver_caller(ErlDrvPort
+ port)</nametext></name>
+ <fsummary>Return the process making the driver call.</fsummary>
+ <desc>
+ <marker id="driver_caller"></marker>
+ <p>Returns the process ID of the process that
+ made the current call to the driver. The process ID can be used with
+ <seealso marker="#driver_send_term"><c>driver_send_term</c></seealso>
+ to send back data to the caller.
+ <c>driver_caller</c> only returns valid data
+ when currently executing in one of the following driver callbacks:</p>
+ <taglist>
+ <tag><seealso marker="driver_entry#start">
+ <c>start</c></seealso></tag>
+ <item>Called from <seealso marker="erlang:open_port/2">
+ <c>erlang:open_port/2</c></seealso>.</item>
+ <tag><seealso marker="driver_entry#output">
+ <c>output</c></seealso></tag>
+ <item>Called from <seealso marker="erlang:send/2">
+ <c>erlang:send/2</c></seealso> and
+ <seealso marker="erlang:port_command/2">
+ <c>erlang:port_command/2</c></seealso>.</item>
+ <tag><seealso marker="driver_entry#outputv">
+ <c>outputv</c></seealso></tag>
+ <item>Called from <seealso marker="erlang:send/2">
+ <c>erlang:send/2</c></seealso> and
+ <seealso marker="erlang:port_command/2">
+ <c>erlang:port_command/2</c></seealso>.</item>
+ <tag><seealso marker="driver_entry#control">
+ <c>control</c></seealso></tag>
+ <item>Called from <seealso marker="erlang:port_control/3">
+ <c>erlang:port_control/3</c></seealso>.</item>
+ <tag><seealso marker="driver_entry#call">
+ <c>call</c></seealso></tag>
+ <item>Called from <seealso marker="erlang:port_call/3">
+ <c>erlang:port_call/3</c></seealso>.</item>
+ </taglist>
+ <p>Notice that this function is <em>not</em> thread-safe, not
+ even when the emulator with SMP support is used.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_cancel_timer(ErlDrvPort port)</nametext></name>
- <fsummary>Cancel a previously set timer</fsummary>
+ <name><ret>int</ret>
+ <nametext>driver_cancel_timer(ErlDrvPort port)</nametext></name>
+ <fsummary>Cancel a previously set timer.</fsummary>
<desc>
<marker id="driver_cancel_timer"></marker>
- <p>This function cancels a timer set with
- <c>driver_set_timer</c>.</p>
- <p>The return value is 0.</p>
+ <p>Cancels a timer set with
+ <seealso marker="#driver_set_timer">
+ <c>driver_set_timer</c></seealso>.</p>
+ <p>The return value is <c>0</c>.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_read_timer(ErlDrvPort port, unsigned long *time_left)</nametext></name>
- <fsummary>Read the time left before timeout</fsummary>
+ <name><ret>int</ret><nametext>driver_compare_monitors(const ErlDrvMonitor
+ *monitor1, const ErlDrvMonitor *monitor2)</nametext></name>
+ <fsummary>Compare two monitors.</fsummary>
<desc>
- <marker id="driver_read_timer"></marker>
- <p>This function reads the current time of a timer, and places
- the result in <c>time_left</c>. This is the time in
- milliseconds, before the timeout will occur.</p>
- <p>The return value is 0.</p>
+ <marker id="driver_compare_monitors"></marker>
+ <p>Compares two <c>ErlDrvMonitor</c>s.
+ Can also be used to imply some artificial order on monitors,
+ for whatever reason.</p>
+ <p>Returns <c>0</c> if <c>monitor1</c> and <c>monitor2</c> are equal,
+ &lt; <c>0</c> if <c>monitor1</c> &lt; <c>monitor2</c>, and
+ &gt; <c>0</c> if <c>monitor1</c> &gt; <c>monitor2</c>.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_get_now(ErlDrvNowData *now)</nametext></name>
- <fsummary>Read a system timestamp</fsummary>
+ <name><ret>ErlDrvTermData</ret><nametext>driver_connected(ErlDrvPort
+ port)</nametext></name>
+ <fsummary>Return the port owner process.</fsummary>
<desc>
- <marker id="driver_get_now"></marker>
- <warning><p><em>This function is deprecated! Do not use it!</em>
- Use <seealso marker="#erl_drv_monotonic_time"><c>erl_drv_monotonic_time()</c></seealso>
- (perhaps in combination with
- <seealso marker="#erl_drv_time_offset"><c>erl_drv_time_offset()</c></seealso>)
- instead.</p></warning>
- <p>This function reads a timestamp into the memory pointed to by
- the parameter <c>now</c>. See the description of <seealso marker="#ErlDrvNowData">ErlDrvNowData</seealso> for
- specification of its fields. </p>
- <p>The return value is 0 unless the <c>now</c> pointer is not
- valid, in which case it is &lt; 0. </p>
+ <marker id="driver_connected"></marker>
+ <p>Returns the port owner process.</p>
+ <p>Notice that this function is <em>not</em> thread-safe, not
+ even when the emulator with SMP support is used.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_select(ErlDrvPort port, ErlDrvEvent event, int mode, int on)</nametext></name>
- <fsummary>Provide an event for having the emulator call the driver</fsummary>
+ <name><ret>ErlDrvPort</ret><nametext>driver_create_port(ErlDrvPort port,
+ ErlDrvTermData owner_pid, char* name,
+ ErlDrvData drv_data)</nametext></name>
+ <fsummary>Create a new port (driver instance).</fsummary>
<desc>
- <marker id="driver_select"></marker>
- <p>This function is used by drivers to provide the emulator with
- events to check for. This enables the emulator to call the driver
- when something has happened asynchronously.</p>
- <p>The <c>event</c> argument identifies an OS-specific event object.
- On Unix systems, the functions <c>select</c>/<c>poll</c> are used. The
- event object must be a socket or pipe (or other object that
- <c>select</c>/<c>poll</c> can use).
- On windows, the Win32 API function <c>WaitForMultipleObjects</c>
- is used. This places other restrictions on the event object.
- Refer to the Win32 SDK documentation.</p>
- <p>The <c>on</c> parameter should be <c>1</c> for setting events
- and <c>0</c> for clearing them.</p>
- <p>The <c>mode</c> argument is a bitwise-or combination of
- <c>ERL_DRV_READ</c>, <c>ERL_DRV_WRITE</c> and <c>ERL_DRV_USE</c>.
- The first two specify whether to wait for read events and/or write
- events. A fired read event will call
- <seealso marker="driver_entry#ready_input">ready_input</seealso>
- while a fired write event will call
- <seealso marker="driver_entry#ready_output">ready_output</seealso>.
- </p>
- <note>
- <p>Some OS (Windows) do not differentiate between read and write events.
- The call-back for a fired event then only depends on the value of <c>mode</c>.</p>
- </note>
- <p><c>ERL_DRV_USE</c> specifies if we are using the event object or if we want to close it.
- On an emulator with SMP support, it is not safe to clear all events
- and then close the event object after <c>driver_select</c> has
- returned. Another thread may still be using the event object
- internally. To safely close an event object call
- <c>driver_select</c> with <c>ERL_DRV_USE</c> and <c>on==0</c>. That
- will clear all events and then call
- <seealso marker="driver_entry#stop_select">stop_select</seealso>
- when it is safe to close the event object.
- <c>ERL_DRV_USE</c> should be set together with the first event
- for an event object. It is harmless to set <c>ERL_DRV_USE</c>
- even though it already has been done. Clearing all events but keeping
- <c>ERL_DRV_USE</c> set will indicate that we are using the event
- object and probably will set events for it again.</p>
- <note>
- <p>ERL_DRV_USE was added in OTP release R13. Old drivers will still work
- as before. But it is recommended to update them to use <c>ERL_DRV_USE</c> and
- <c>stop_select</c> to make sure that event objects are closed in a safe way.</p>
- </note>
- <p>The return value is 0 (failure, -1, only if the
- <c>ready_input</c>/<c>ready_output</c> is
- <c>NULL</c>).</p>
+ <p>Creates a new port executing the same driver
+ code as the port creating the new port.</p>
+ <taglist>
+ <tag><c>port</c></tag>
+ <item>The port handle of the port (driver instance) creating
+ the new port.</item>
+ <tag><c>owner_pid</c></tag>
+ <item>The process ID of the Erlang process to become
+ owner of the new port. This process will be linked
+ to the new port. You usually want to use
+ <c>driver_caller(port)</c> as <c>owner_pid</c>.</item>
+ <tag><c>name</c></tag>
+ <item>The port name of the new port. You usually want to
+ use the same port name as the driver name
+ (<seealso marker="driver_entry#driver_name">
+ <c>driver_name</c></seealso> field of the
+ <seealso marker="driver_entry"><c>driver_entry</c></seealso>).
+ </item>
+ <tag><c>drv_data</c></tag>
+ <item>The driver-defined handle that is passed in later
+ calls to driver callbacks. Notice that the
+ <seealso marker="driver_entry#start">driver start
+ callback</seealso> is not called for this new driver instance.
+ The driver-defined handle is normally created in the
+ <seealso marker="driver_entry#start">driver start callback</seealso>
+ when a port is created through
+ <seealso marker="erlang#open_port/2">
+ <c>erlang:open_port/2</c></seealso>.
+ </item>
+ </taglist>
+ <p>The caller of <c>driver_create_port</c> is allowed to
+ manipulate the newly created port when <c>driver_create_port</c>
+ has returned. When
+ <seealso marker="#smp_support">port level locking</seealso>
+ is used, the creating port is only allowed to
+ manipulate the newly created port until the current driver
+ callback, which was called by the emulator, returns.</p>
</desc>
</func>
+
<func>
- <name><ret>void *</ret><nametext>driver_alloc(ErlDrvSizeT size)</nametext></name>
- <fsummary>Allocate memory</fsummary>
+ <name><ret>int</ret><nametext>driver_demonitor_process(ErlDrvPort port,
+ const ErlDrvMonitor *monitor)</nametext></name>
+ <fsummary>Stop monitoring a process from a driver.</fsummary>
<desc>
- <marker id="driver_alloc"></marker>
- <p>This function allocates a memory block of the size specified
- in <c>size</c>, and returns it. This only fails on out of
- memory, in that case <c>NULL</c> is returned. (This is most
- often a wrapper for <c>malloc</c>).</p>
- <p>Memory allocated must be explicitly freed with a corresponding
- call to <c>driver_free</c> (unless otherwise stated).</p>
- <p>This function is thread-safe.</p>
+ <marker id="driver_demonitor_process"></marker>
+ <p>Cancels a monitor created earlier.</p>
+ <p>Returns <c>0</c> if a monitor was removed and &gt; 0 if the monitor
+ no longer exists.</p>
</desc>
</func>
+
<func>
- <name><ret>void *</ret><nametext>driver_realloc(void *ptr, ErlDrvSizeT size)</nametext></name>
- <fsummary>Resize an allocated memory block</fsummary>
+ <name><ret>ErlDrvSizeT</ret><nametext>driver_deq(ErlDrvPort port,
+ ErlDrvSizeT size)</nametext></name>
+ <fsummary>Dequeue data from the head of the driver queue.</fsummary>
<desc>
- <marker id="driver_realloc"></marker>
- <p>This function resizes a memory block, either in place, or by
- allocating a new block, copying the data and freeing the old
- block. A pointer is returned to the reallocated memory. On
- failure (out of memory), <c>NULL</c> is returned. (This is
- most often a wrapper for <c>realloc</c>.)</p>
- <p>This function is thread-safe.</p>
+ <marker id="driver_deq"></marker>
+ <p>Dequeues data by moving the head pointer
+ forward in the driver queue by <c>size</c> bytes. The data
+ in the queue is deallocated.</p>
+ <p>Returns the number of bytes remaining in the queue on success,
+ otherwise <c>-1</c>.</p>
+ <p>This function can be called from any thread if a
+ <seealso marker="#ErlDrvPDL">port data lock</seealso>
+ associated with the <c>port</c> is locked by the calling
+ thread during the call.</p>
</desc>
</func>
+
<func>
- <name><ret>void</ret><nametext>driver_free(void *ptr)</nametext></name>
- <fsummary>Free an allocated memory block</fsummary>
+ <name><ret>int</ret><nametext>driver_enq(ErlDrvPort port, char* buf,
+ ErlDrvSizeT len)</nametext></name>
+ <fsummary>Enqueue data in the driver queue.</fsummary>
<desc>
- <marker id="driver_free"></marker>
- <p>This function frees the memory pointed to by <c>ptr</c>. The
- memory should have been allocated with
- <c>driver_alloc</c>. All allocated memory should be
- deallocated, just once. There is no garbage collection in
- drivers.</p>
- <p>This function is thread-safe.</p>
+ <marker id="driver_enq"></marker>
+ <p>Enqueues data in the driver queue. The data in
+ <c>buf</c> is copied (<c>len</c> bytes) and placed at the
+ end of the driver queue. The driver queue is normally used
+ in a FIFO way.</p>
+ <p>The driver queue is available to queue output from the
+ emulator to the driver (data from the driver to the emulator
+ is queued by the emulator in normal Erlang message
+ queues). This can be useful if the driver must wait for
+ slow devices, and so on, and wants to yield back to the
+ emulator. The driver queue is implemented as an <c>ErlIOVec</c>.</p>
+ <p>When the queue contains data, the driver does not close until
+ the queue is empty.</p>
+ <p>The return value is <c>0</c>.</p>
+ <p>This function can be called from any thread if a
+ <seealso marker="#ErlDrvPDL">port data lock</seealso>
+ associated with the <c>port</c> is locked by the calling
+ thread during the call.</p>
</desc>
</func>
+
<func>
- <name><ret>ErlDrvBinary *</ret><nametext>driver_alloc_binary(ErlDrvSizeT size)</nametext></name>
- <fsummary>Allocate a driver binary</fsummary>
+ <name><ret>int</ret><nametext>driver_enq_bin(ErlDrvPort port,
+ ErlDrvBinary *bin, ErlDrvSizeT offset, ErlDrvSizeT len)</nametext>
+ </name>
+ <fsummary>Enqueue binary in the driver queue.</fsummary>
<desc>
- <marker id="driver_alloc_binary"></marker>
- <p>This function allocates a driver binary with a memory block
- of at least <c>size</c> bytes, and returns a pointer to it,
- or NULL on failure (out of memory). When a driver binary has
- been sent to the emulator, it must not be altered. Every
- allocated binary should be freed by a corresponding call to
- <c>driver_free_binary</c> (unless otherwise stated).</p>
- <p>Note that a driver binary has an internal reference counter,
- this means that calling <c>driver_free_binary</c> it may not
- actually dispose of it. If it's sent to the emulator, it may
- be referenced there.</p>
- <p>The driver binary has a field, <c>orig_bytes</c>, which
- marks the start of the data in the binary.</p>
- <p>This function is thread-safe.</p>
+ <marker id="driver_enq_bin"></marker>
+ <p>Enqueues a driver binary in the driver
+ queue. The data in <c>bin</c> at <c>offset</c> with length
+ <c>len</c> is placed at the end of the queue. This function
+ is most often faster than
+ <seealso marker="#driver_enq"><c>driver_enq</c></seealso>,
+ because no data must be copied.</p>
+ <p>This function can be called from any thread if a
+ <seealso marker="#ErlDrvPDL">port data lock</seealso>
+ associated with the <c>port</c> is locked by the calling
+ thread during the call.</p>
+ <p>The return value is <c>0</c>.</p>
</desc>
</func>
+
<func>
- <name><ret>ErlDrvBinary *</ret><nametext>driver_realloc_binary(ErlDrvBinary *bin, ErlDrvSizeT size)</nametext></name>
- <fsummary>Resize a driver binary</fsummary>
+ <name><ret>int</ret><nametext>driver_enqv(ErlDrvPort port, ErlIOVec *ev,
+ ErlDrvSizeT skip)</nametext></name>
+ <fsummary>Enqueue vector in the driver queue.</fsummary>
<desc>
- <marker id="driver_realloc_binary"></marker>
- <p>This function resizes a driver binary, while keeping the
- data. The resized driver binary is returned. On failure (out
- of memory), <c>NULL</c> is returned.</p>
- <p>This function is only thread-safe when the emulator with SMP
- support is used.</p>
+ <marker id="driver_enqv"></marker>
+ <p>Enqueues the data in <c>ev</c>, skipping the
+ first <c>skip</c> bytes of it, at the end of the driver
+ queue. It is faster than
+ <seealso marker="#driver_enq"><c>driver_enq</c></seealso>,
+ because no data must be copied.</p>
+ <p>The return value is <c>0</c>.</p>
+ <p>This function can be called from any thread if a
+ <seealso marker="#ErlDrvPDL">port data lock</seealso>
+ associated with the <c>port</c> is locked by the calling
+ thread during the call.</p>
</desc>
</func>
+
<func>
- <name><ret>void</ret><nametext>driver_free_binary(ErlDrvBinary *bin)</nametext></name>
- <fsummary>Free a driver binary</fsummary>
+ <name><ret>int</ret><nametext>driver_failure(ErlDrvPort port, int
+ error)</nametext></name>
+ <name><ret>int</ret><nametext>driver_failure_atom(ErlDrvPort port, char
+ *string)</nametext></name>
+ <name><ret>int</ret><nametext>driver_failure_posix(ErlDrvPort port, int
+ error)</nametext></name>
+ <fsummary>Fail with error.</fsummary>
<desc>
- <marker id="driver_free_binary"></marker>
- <p>This function frees a driver binary <c>bin</c>, allocated
- previously with <c>driver_alloc_binary</c>. Since binaries
- in Erlang are reference counted, the binary may still be
- around.</p>
- <p>This function is only thread-safe when the emulator with SMP
- support is used.</p>
+ <marker id="driver_failure_atom"></marker>
+ <marker id="driver_failure_posix"></marker>
+ <marker id="driver_failure"></marker>
+ <p>Signals to Erlang that the driver has
+ encountered an error and is to be closed. The port is
+ closed and the tuple <c>{'EXIT', error, Err}</c> is sent to
+ the port owner process, where error is an error atom
+ (<c>driver_failure_atom</c> and
+ <c>driver_failure_posix</c>) or an integer
+ (<c>driver_failure</c>).</p>
+ <p>The driver is to fail only when in severe error situations,
+ when the driver cannot possibly keep open, for example,
+ buffer allocation gets out of memory. For normal errors
+ it is more appropriate to send error codes with
+ <seealso marker="#driver_output"><c>driver_output</c></seealso>.</p>
+ <p>The return value is <c>0</c>.</p>
</desc>
</func>
+
<func>
- <name><ret>long</ret><nametext>driver_binary_get_refc(ErlDrvBinary *bin)</nametext></name>
- <fsummary>Get the reference count of a driver binary</fsummary>
+ <name><ret>int</ret><nametext>driver_failure_eof(ErlDrvPort
+ port)</nametext></name>
+ <fsummary>Fail with EOF.</fsummary>
<desc>
- <marker id="driver_binary_get_refc"></marker>
- <p>Returns current reference count on <c>bin</c>.</p>
- <p>This function is only thread-safe when the emulator with SMP
- support is used.</p>
+ <marker id="driver_failure_eof"></marker>
+ <p>Signals to Erlang that the driver has
+ encountered an EOF and is to be closed, unless the port was
+ opened with option <c>eof</c>, in which case <c>eof</c> is sent
+ to the port. Otherwise the port is closed and an
+ <c>'EXIT'</c> message is sent to the port owner process.</p>
+ <p>The return value is <c>0</c>.</p>
</desc>
</func>
+
<func>
- <name><ret>long</ret><nametext>driver_binary_inc_refc(ErlDrvBinary *bin)</nametext></name>
- <fsummary>Increment the reference count of a driver binary</fsummary>
+ <name><ret>void</ret><nametext>driver_free(void *ptr)</nametext></name>
+ <fsummary>Free an allocated memory block.</fsummary>
<desc>
- <marker id="driver_binary_inc_refc"></marker>
- <p>Increments the reference count on <c>bin</c> and returns
- the reference count reached after the increment.</p>
- <p>This function is only thread-safe when the emulator with SMP
- support is used.</p>
+ <marker id="driver_free"></marker>
+ <p>Frees the memory pointed to by <c>ptr</c>. The
+ memory is to have been allocated with
+ <c>driver_alloc</c>. All allocated memory is to be
+ deallocated, only once. There is no garbage collection in
+ drivers.</p>
+ <p>This function is thread-safe.</p>
</desc>
</func>
+
<func>
- <name><ret>long</ret><nametext>driver_binary_dec_refc(ErlDrvBinary *bin)</nametext></name>
- <fsummary>Decrement the reference count of a driver binary</fsummary>
+ <name><ret>void</ret>
+ <nametext>driver_free_binary(ErlDrvBinary *bin)</nametext></name>
+ <fsummary>Free a driver binary.</fsummary>
<desc>
- <marker id="driver_binary_dec_refc"></marker>
- <p>Decrements the reference count on <c>bin</c> and returns
- the reference count reached after the decrement.</p>
+ <marker id="driver_free_binary"></marker>
+ <p>Frees a driver binary <c>bin</c>, allocated previously with
+ <seealso marker="#driver_alloc_binary">
+ <c>driver_alloc_binary</c></seealso>. As binaries
+ in Erlang are reference counted, the binary can still be around.</p>
<p>This function is only thread-safe when the emulator with SMP
support is used.</p>
- <note>
- <p>You should normally decrement the reference count of a
- driver binary by calling
- <seealso marker="#driver_free_binary">driver_free_binary()</seealso>.
- <c>driver_binary_dec_refc()</c> does <em>not</em> free
- the binary if the reference count reaches zero. <em>Only</em>
- use <c>driver_binary_dec_refc()</c> when you are sure
- <em>not</em> to reach a reference count of zero.</p>
- </note>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_enq(ErlDrvPort port, char* buf, ErlDrvSizeT len)</nametext></name>
- <fsummary>Enqueue data in the driver queue</fsummary>
+ <name><ret>ErlDrvTermData</ret>
+ <nametext>driver_get_monitored_process(ErlDrvPort port, const
+ ErlDrvMonitor *monitor)</nametext></name>
+ <fsummary>Retrieve the process ID from a monitor.</fsummary>
<desc>
- <marker id="driver_enq"></marker>
- <p>This function enqueues data in the driver queue. The data in
- <c>buf</c> is copied (<c>len</c> bytes) and placed at the
- end of the driver queue. The driver queue is normally used
- in a FIFO way.</p>
- <p>The driver queue is available to queue output from the
- emulator to the driver (data from the driver to the emulator
- is queued by the emulator in normal erlang message
- queues). This can be useful if the driver has to wait for
- slow devices etc, and wants to yield back to the
- emulator. The driver queue is implemented as an ErlIOVec.</p>
- <p>When the queue contains data, the driver won't close, until
- the queue is empty.</p>
- <p>The return value is 0.</p>
- <p>This function can be called from an arbitrary thread if a
- <seealso marker="#ErlDrvPDL">port data lock</seealso>
- associated with the <c>port</c> is locked by the calling
- thread during the call.</p>
+ <marker id="driver_get_monitored_process"></marker>
+ <p>Returns the process ID associated with a living
+ monitor. It can be used in the
+ <seealso marker="driver_entry#process_exit">
+ <c>process_exit</c></seealso> callback to
+ get the process identification for the exiting process.</p>
+ <p>Returns <c>driver_term_nil</c> if the monitor no longer exists.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_pushq(ErlDrvPort port, char* buf, ErlDrvSizeT len)</nametext></name>
- <fsummary>Push data at the head of the driver queue</fsummary>
+ <name><ret>int</ret>
+ <nametext>driver_get_now(ErlDrvNowData *now)</nametext></name>
+ <fsummary>Read a system time stamp.</fsummary>
<desc>
- <marker id="driver_pushq"></marker>
- <p>This function puts data at the head of the driver queue. The
- data in <c>buf</c> is copied (<c>len</c> bytes) and placed
- at the beginning of the queue.</p>
- <p>The return value is 0.</p>
- <p>This function can be called from an arbitrary thread if a
- <seealso marker="#ErlDrvPDL">port data lock</seealso>
- associated with the <c>port</c> is locked by the calling
- thread during the call.</p>
+ <marker id="driver_get_now"></marker>
+ <warning>
+ <p><em>This function is deprecated. Do not use it.</em> Use
+ <seealso marker="#erl_drv_monotonic_time">
+ <c>erl_drv_monotonic_time</c></seealso> (perhaps in combination with
+ <seealso marker="#erl_drv_time_offset">
+ <c>erl_drv_time_offset</c></seealso>) instead.</p>
+ </warning>
+ <p>Reads a time stamp into the memory pointed to by
+ parameter <c>now</c>. For information about specific fields, see
+ <seealso marker="#ErlDrvNowData"><c>ErlDrvNowData</c></seealso>.</p>
+ <p>The return value is <c>0</c>, unless the <c>now</c> pointer is
+ invalid, in which case it is &lt; <c>0</c>.</p>
</desc>
</func>
+
<func>
- <name><ret>ErlDrvSizeT</ret><nametext>driver_deq(ErlDrvPort port, ErlDrvSizeT size)</nametext></name>
- <fsummary>Dequeue data from the head of the driver queue</fsummary>
+ <name><ret>int</ret><nametext>driver_lock_driver(ErlDrvPort
+ port)</nametext></name>
+ <fsummary>Ensure the driver is never unloaded.</fsummary>
<desc>
- <marker id="driver_deq"></marker>
- <p>This function dequeues data by moving the head pointer
- forward in the driver queue by <c>size</c> bytes. The data
- in the queue will be deallocated.</p>
- <p>The return value is the number of bytes remaining in the queue
- or -1 on failure.</p>
- <p>This function can be called from an arbitrary thread if a
- <seealso marker="#ErlDrvPDL">port data lock</seealso>
- associated with the <c>port</c> is locked by the calling
- thread during the call.</p>
+ <marker id="driver_lock_driver"></marker>
+ <p>Locks the driver used by the port <c>port</c>
+ in memory for the rest of the emulator process'
+ lifetime. After this call, the driver behaves as one of Erlang's
+ statically linked-in drivers.</p>
</desc>
</func>
+
<func>
- <name><ret>ErlDrvSizeT</ret><nametext>driver_sizeq(ErlDrvPort port)</nametext></name>
- <fsummary>Return the size of the driver queue</fsummary>
+ <name><ret>ErlDrvTermData</ret><nametext>driver_mk_atom(char*
+ string)</nametext></name>
+ <fsummary>Make an atom from a name.</fsummary>
<desc>
- <marker id="driver_sizeq"></marker>
- <p>This function returns the number of bytes currently in the
- driver queue.</p>
- <p>This function can be called from an arbitrary thread if a
- <seealso marker="#ErlDrvPDL">port data lock</seealso>
- associated with the <c>port</c> is locked by the calling
- thread during the call.</p>
+ <marker id="driver_mk_atom"></marker>
+ <p>Returns an atom given a name
+ <c>string</c>. The atom is created and does not change, so the
+ return value can be saved and reused, which is faster than
+ looking up the atom several times.</p>
+ <p>Notice that this function is <em>not</em> thread-safe, not
+ even when the emulator with SMP support is used.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_enq_bin(ErlDrvPort port, ErlDrvBinary *bin, ErlDrvSizeT offset, ErlDrvSizeT len)</nametext></name>
- <fsummary>Enqueue binary in the driver queue</fsummary>
+ <name><ret>ErlDrvTermData</ret><nametext>driver_mk_port(ErlDrvPort
+ port)</nametext></name>
+ <fsummary>Make an Erlang term port from a port.</fsummary>
<desc>
- <marker id="driver_enq_bin"></marker>
- <p>This function enqueues a driver binary in the driver
- queue. The data in <c>bin</c> at <c>offset</c> with length
- <c>len</c> is placed at the end of the queue. This function
- is most often faster than <c>driver_enq</c>, because the
- data doesn't have to be copied.</p>
- <p>This function can be called from an arbitrary thread if a
- <seealso marker="#ErlDrvPDL">port data lock</seealso>
- associated with the <c>port</c> is locked by the calling
- thread during the call.</p>
- <p>The return value is 0.</p>
+ <marker id="driver_mk_port"></marker>
+ <p>Converts a port handle to the Erlang term format, usable in
+ <seealso marker="#erl_drv_output_term">
+ <c>erl_drv_output_term</c></seealso> and
+ <seealso marker="#erl_drv_send_term">
+ <c>erl_drv_send_term</c></seealso>.</p>
+ <p>Notice that this function is <em>not</em> thread-safe, not
+ even when the emulator with SMP support is used.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_pushq_bin(ErlDrvPort port, ErlDrvBinary *bin, ErlDrvSizeT offset, ErlDrvSizeT len)</nametext></name>
- <fsummary>Push binary at the head of the driver queue</fsummary>
+ <name><ret>int</ret><nametext>driver_monitor_process(ErlDrvPort port,
+ ErlDrvTermData process, ErlDrvMonitor *monitor)</nametext></name>
+ <fsummary>Monitor a process from a driver.</fsummary>
<desc>
- <marker id="driver_pushq_bin"></marker>
- <p>This function puts data in the binary <c>bin</c>, at
- <c>offset</c> with length <c>len</c> at the head of the
- driver queue. It is most often faster than
- <c>driver_pushq</c>, because the data doesn't have to be
- copied.</p>
- <p>This function can be called from an arbitrary thread if a
- <seealso marker="#ErlDrvPDL">port data lock</seealso>
- associated with the <c>port</c> is locked by the calling
- thread during the call.</p>
- <p>The return value is 0.</p>
+ <marker id="driver_monitor_process"></marker>
+ <p>Starts monitoring a process from a driver. When a process is
+ monitored, a process exit results in a call to the provided
+ <seealso marker="driver_entry#process_exit">
+ <c>process_exit</c></seealso> callback
+ in the <seealso marker="driver_entry"><c>ErlDrvEntry</c></seealso>
+ structure. The <c>ErlDrvMonitor</c> structure is filled in, for later
+ removal or compare.</p>
+ <p>Parameter <c>process</c> is to be the return value of an
+ earlier call to <seealso marker="#driver_caller">
+ <c>driver_caller</c></seealso> or
+ <seealso marker="#driver_connected"><c>driver_connected</c></seealso>
+ call.</p>
+ <p>Returns <c>0</c> on success, &lt; 0 if no callback is
+ provided, and &gt; 0 if the process is no longer alive.</p>
</desc>
</func>
+
<func>
- <name><ret>ErlDrvSizeT</ret><nametext>driver_peekqv(ErlDrvPort port, ErlIOVec *ev)</nametext></name>
- <fsummary>Get the driver queue as an IO vector</fsummary>
+ <name><ret>int</ret><nametext>driver_output(ErlDrvPort port, char *buf,
+ ErlDrvSizeT len)</nametext></name>
+ <fsummary>Send data from driver to port owner.</fsummary>
<desc>
- <marker id="driver_peekqv"></marker>
- <p>
- This function retrieves the driver queue into a supplied
- <c>ErlIOVec</c> <c>ev</c>. It also returns the queue size.
- This is one of two ways to get data out of the queue.
- </p>
- <p>
- If <c>ev</c> is <c>NULL</c> all ones i.e. <c>-1</c> type cast to
- <c>ErlDrvSizeT</c> is returned.
- </p>
- <p>Nothing is removed from the queue by this function, that must be done
- with <c>driver_deq</c>.</p>
- <p>This function can be called from an arbitrary thread if a
- <seealso marker="#ErlDrvPDL">port data lock</seealso>
- associated with the <c>port</c> is locked by the calling
- thread during the call.</p>
+ <marker id="driver_output"></marker>
+ <p>Sends data from the driver up to the emulator. The data is received
+ as terms or binary data, depending on how the driver port was
+ opened.</p>
+ <p>The data is queued in the port owner process' message
+ queue. Notice that this does not yield to the emulator (as
+ the driver and the emulator run in the same thread).</p>
+ <p>Parameter <c>buf</c> points to the data to send, and
+ <c>len</c> is the number of bytes.</p>
+ <p>The return value for all output functions is <c>0</c> for normal use.
+ If the driver is used for distribution, it can fail and return
+ <c>-1</c>.</p>
</desc>
</func>
+
<func>
- <name><ret>SysIOVec *</ret><nametext>driver_peekq(ErlDrvPort port, int *vlen)</nametext></name>
- <fsummary>Get the driver queue as a vector</fsummary>
+ <name><ret>int</ret><nametext>driver_output_binary(ErlDrvPort port, char
+ *hbuf, ErlDrvSizeT hlen, ErlDrvBinary* bin, ErlDrvSizeT offset,
+ ErlDrvSizeT len)</nametext></name>
+ <fsummary>Send data from a driver binary to port owner.</fsummary>
<desc>
- <marker id="driver_peekq"></marker>
- <p>This function retrieves the driver queue as a pointer to an
- array of <c>SysIOVec</c>s. It also returns the number of
- elements in <c>vlen</c>. This is one of two ways to get data
- out of the queue.</p>
- <p>Nothing is removed from the queue by this function, that must be done
- with <c>driver_deq</c>.</p>
- <p>The returned array is suitable to use with the Unix system
- call <c>writev</c>.</p>
- <p>This function can be called from an arbitrary thread if a
- <seealso marker="#ErlDrvPDL">port data lock</seealso>
- associated with the <c>port</c> is locked by the calling
- thread during the call.</p>
+ <marker id="driver_output_binary"></marker>
+ <p>Sends data to a port owner process from a
+ driver binary. It has a header buffer (<c>hbuf</c>
+ and <c>hlen</c>) just like
+ <seealso marker="#driver_output2"><c>driver_output2</c></seealso>.
+ Parameter <c>hbuf</c> can be <c>NULL</c>.</p>
+ <p>Parameter <c>offset</c> is an offset into the binary and
+ <c>len</c> is the number of bytes to send.</p>
+ <p>Driver binaries are created with
+ <seealso marker="#driver_alloc_binary">
+ <c>driver_alloc_binary</c></seealso>.</p>
+ <p>The data in the header is sent as a list and the binary as
+ an Erlang binary in the tail of the list.</p>
+ <p>For example, if <c>hlen</c> is <c>2</c>, the port owner process
+ receives <c><![CDATA[[H1, H2 | <<T>>]]]></c>.</p>
+ <p>The return value is <c>0</c> for normal use.</p>
+ <p>Notice that, using the binary syntax in Erlang, the driver
+ application can match the header directly from the binary,
+ so the header can be put in the binary, and <c>hlen</c> can be set
+ to <c>0</c>.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_enqv(ErlDrvPort port, ErlIOVec *ev, ErlDrvSizeT skip)</nametext></name>
- <fsummary>Enqueue vector in the driver queue</fsummary>
+ <name><ret>int</ret><nametext>driver_output_term(ErlDrvPort port,
+ ErlDrvTermData* term, int n)</nametext></name>
+ <fsummary>Send term data from driver to port owner.</fsummary>
<desc>
- <marker id="driver_enqv"></marker>
- <p>This function enqueues the data in <c>ev</c>, skipping the
- first <c>skip</c> bytes of it, at the end of the driver
- queue. It is faster than <c>driver_enq</c>, because the data
- doesn't have to be copied.</p>
- <p>The return value is 0.</p>
- <p>This function can be called from an arbitrary thread if a
- <seealso marker="#ErlDrvPDL">port data lock</seealso>
- associated with the <c>port</c> is locked by the calling
- thread during the call.</p>
+ <marker id="driver_output_term"></marker>
+ <warning>
+ <p><em>This function is deprecated.</em>
+ Use <seealso marker="#erl_drv_send_term">
+ <c>erl_drv_output_term</c></seealso>instead.</p>
+ </warning>
+ <p>Parameters <c>term</c> and <c>n</c> work as in
+ <seealso marker="#erl_drv_output_term">
+ <c>erl_drv_output_term</c></seealso>.</p>
+ <p>Notice that this function is <em>not</em> thread-safe, not
+ even when the emulator with SMP support is used.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_pushqv(ErlDrvPort port, ErlIOVec *ev, ErlDrvSizeT skip)</nametext></name>
- <fsummary>Push vector at the head of the driver queue</fsummary>
+ <name><ret>int</ret><nametext>driver_output2(ErlDrvPort port, char *hbuf,
+ ErlDrvSizeT hlen, char *buf, ErlDrvSizeT len)</nametext></name>
+ <fsummary>Send data and binary data to port owner.</fsummary>
<desc>
- <marker id="driver_pushqv"></marker>
- <p>This function puts the data in <c>ev</c>, skipping the first
- <c>skip</c> bytes of it, at the head of the driver queue.
- It is faster than <c>driver_pushq</c>, because the data
- doesn't have to be copied.</p>
- <p>The return value is 0.</p>
- <p>This function can be called from an arbitrary thread if a
- <seealso marker="#ErlDrvPDL">port data lock</seealso>
- associated with the <c>port</c> is locked by the calling
- thread during the call.</p>
+ <marker id="driver_output2"></marker>
+ <p>First sends <c>hbuf</c>
+ (length in <c>hlen</c>) data as a list, regardless of port
+ settings. Then sends <c>buf</c> as a binary or list.
+ For example, if <c>hlen</c> is <c>3</c>, the port owner process
+ receives <c>[H1, H2, H3 | T]</c>.</p>
+ <p>The point of sending data as a list header, is to facilitate
+ matching on the data received.</p>
+ <p>The return value is <c>0</c> for normal use.</p>
</desc>
</func>
+
<func>
- <name><ret>ErlDrvPDL</ret><nametext>driver_pdl_create(ErlDrvPort port)</nametext></name>
- <fsummary>Create a port data lock</fsummary>
+ <name><ret>int</ret><nametext>driver_outputv(ErlDrvPort port, char* hbuf,
+ ErlDrvSizeT hlen, ErlIOVec *ev, ErlDrvSizeT skip)</nametext></name>
+ <fsummary>Send vectorized data to port owner.</fsummary>
<desc>
- <marker id="driver_pdl_create"></marker>
- <p>This function creates a port data lock associated with
- the <c>port</c>. <em>NOTE</em>: Once a port data lock has
- been created, it has to be locked during all operations
- on the driver queue of the <c>port</c>.</p>
- <p>On success a newly created port data lock is returned. On
- failure <c>NULL</c> is returned. <c>driver_pdl_create()</c> will
- fail if <c>port</c> is invalid or if a port data lock already has
- been associated with the <c>port</c>.</p>
+ <marker id="driver_outputv"></marker>
+ <p>Sends data from an I/O vector, <c>ev</c>, to
+ the port owner process. It has a header buffer (<c>hbuf</c>
+ and <c>hlen</c>), just like <seealso marker="#driver_output2">
+ <c>driver_output2</c></seealso>.</p>
+ <p>Parameter <c>skip</c> is a number of bytes to skip of
+ the <c>ev</c> vector from the head.</p>
+ <p>You get vectors of <c>ErlIOVec</c> type from the driver
+ queue (see below), and the
+ <seealso marker="driver_entry#outputv"><c>outputv</c></seealso>
+ driver entry function. You can also make them yourself, if you want to
+ send several <c>ErlDrvBinary</c> buffers at once. Often
+ it is faster to use
+ <seealso marker="#driver_output"><c>driver_output</c></seealso> or
+ <seealso marker="#driver_output_binary"></seealso>.</p>
+ <p>For example, if <c>hlen</c> is <c>2</c> and <c>ev</c> points to an
+ array of three binaries, the port owner process receives
+ <c><![CDATA[[H1, H2, <<B1>>, <<B2>> | <<B3>>]]]></c>.</p>
+ <p>The return value is <c>0</c> for normal use.</p>
+ <p>The comment for <c>driver_output_binary</c> also applies for
+ <c>driver_outputv</c>.</p>
</desc>
</func>
+
<func>
- <name><ret>void</ret><nametext>driver_pdl_lock(ErlDrvPDL pdl)</nametext></name>
- <fsummary>Lock port data lock</fsummary>
+ <name><ret>ErlDrvPDL</ret>
+ <nametext>driver_pdl_create(ErlDrvPort port)</nametext></name>
+ <fsummary>Create a port data lock.</fsummary>
<desc>
- <marker id="driver_pdl_lock"></marker>
- <p>This function locks the port data lock passed as argument
- (<c>pdl</c>).</p>
- <p>This function is thread-safe.</p>
+ <marker id="driver_pdl_create"></marker>
+ <p>Creates a port data lock associated with the <c>port</c>.</p>
+ <note>
+ <p>Once a port data lock has been created, it must be locked during
+ all operations on the driver queue of the <c>port</c>.</p>
+ </note>
+ <p>Returns a newly created port data lock on success,
+ otherwise <c>NULL</c>. The function fails
+ if <c>port</c> is invalid or if a port data lock already has
+ been associated with the <c>port</c>.</p>
</desc>
</func>
+
<func>
- <name><ret>void</ret><nametext>driver_pdl_unlock(ErlDrvPDL pdl)</nametext></name>
- <fsummary>Unlock port data lock</fsummary>
+ <name><ret>long</ret><nametext>driver_pdl_dec_refc(ErlDrvPDL
+ pdl)</nametext></name>
+ <fsummary></fsummary>
<desc>
- <marker id="driver_pdl_unlock"></marker>
- <p>This function unlocks the port data lock passed as argument
- (<c>pdl</c>).</p>
+ <marker id="driver_pdl_dec_refc"></marker>
+ <p>Decrements the reference count of
+ the port data lock passed as argument (<c>pdl</c>).</p>
+ <p>The current reference count after the decrement has
+ been performed is returned.</p>
<p>This function is thread-safe.</p>
</desc>
</func>
+
<func>
- <name><ret>long</ret><nametext>driver_pdl_get_refc(ErlDrvPDL pdl)</nametext></name>
+ <name><ret>long</ret>
+ <nametext>driver_pdl_get_refc(ErlDrvPDL pdl)</nametext></name>
<fsummary></fsummary>
<desc>
<marker id="driver_pdl_get_refc"></marker>
- <p>This function returns the current reference count of
+ <p>Returns the current reference count of
the port data lock passed as argument (<c>pdl</c>).</p>
<p>This function is thread-safe.</p>
</desc>
</func>
+
<func>
- <name><ret>long</ret><nametext>driver_pdl_inc_refc(ErlDrvPDL pdl)</nametext></name>
+ <name><ret>long</ret>
+ <nametext>driver_pdl_inc_refc(ErlDrvPDL pdl)</nametext></name>
<fsummary></fsummary>
<desc>
<marker id="driver_pdl_inc_refc"></marker>
- <p>This function increments the reference count of
+ <p>Increments the reference count of
the port data lock passed as argument (<c>pdl</c>).</p>
<p>The current reference count after the increment has
been performed is returned.</p>
<p>This function is thread-safe.</p>
</desc>
</func>
+
<func>
- <name><ret>long</ret><nametext>driver_pdl_dec_refc(ErlDrvPDL pdl)</nametext></name>
- <fsummary></fsummary>
+ <name><ret>void</ret>
+ <nametext>driver_pdl_lock(ErlDrvPDL pdl)</nametext></name>
+ <fsummary>Lock port data lock.</fsummary>
<desc>
- <marker id="driver_pdl_dec_refc"></marker>
- <p>This function decrements the reference count of
- the port data lock passed as argument (<c>pdl</c>).</p>
- <p>The current reference count after the decrement has
- been performed is returned.</p>
+ <marker id="driver_pdl_lock"></marker>
+ <p>Locks the port data lock passed as argument (<c>pdl</c>).</p>
<p>This function is thread-safe.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_monitor_process(ErlDrvPort port, ErlDrvTermData process, ErlDrvMonitor *monitor)</nametext></name>
- <fsummary>Monitor a process from a driver</fsummary>
+ <name><ret>void</ret>
+ <nametext>driver_pdl_unlock(ErlDrvPDL pdl)</nametext></name>
+ <fsummary>Unlock port data lock.</fsummary>
<desc>
- <marker id="driver_monitor_process"></marker>
- <p>Start monitoring a process from a driver. When a process is
- monitored, a process exit will result in a call to the
- provided <seealso marker="driver_entry#process_exit">process_exit</seealso> call-back
- in the <seealso marker="driver_entry">ErlDrvEntry</seealso>
- structure. The <c>ErlDrvMonitor</c> structure is filled in, for later
- removal or compare.</p>
- <p>The <c>process</c> parameter should be the return value of an
- earlier call to <seealso marker="#driver_caller">driver_caller</seealso> or <seealso marker="#driver_connected">driver_connected</seealso> call.</p>
- <p>The function returns 0 on success, &lt; 0 if no call-back is
- provided and &gt; 0 if the process is no longer alive.</p>
+ <marker id="driver_pdl_unlock"></marker>
+ <p>Unlocks the port data lock passed as argument (<c>pdl</c>).</p>
+ <p>This function is thread-safe.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_demonitor_process(ErlDrvPort port, const ErlDrvMonitor *monitor)</nametext></name>
- <fsummary>Stop monitoring a process from a driver</fsummary>
+ <name><ret>SysIOVec *</ret><nametext>driver_peekq(ErlDrvPort port, int
+ *vlen)</nametext></name>
+ <fsummary>Get the driver queue as a vector.</fsummary>
<desc>
- <marker id="driver_demonitor_process"></marker>
- <p>This function cancels a monitor created earlier. </p>
- <p>The function returns 0 if a monitor was removed and &gt; 0
- if the monitor did no longer exist.</p>
+ <marker id="driver_peekq"></marker>
+ <p>Retrieves the driver queue as a pointer to an
+ array of <c>SysIOVec</c>s. It also returns the number of
+ elements in <c>vlen</c>. This is one of two ways to get data
+ out of the queue.</p>
+ <p>Nothing is removed from the queue by this function, that must be done
+ with <seealso marker="#driver_deq"><c>driver_deq</c></seealso>.</p>
+ <p>The returned array is suitable to use with the Unix system
+ call <c>writev</c>.</p>
+ <p>This function can be called from any thread if a
+ <seealso marker="#ErlDrvPDL">port data lock</seealso>
+ associated with the <c>port</c> is locked by the calling
+ thread during the call.</p>
</desc>
</func>
+
<func>
- <name><ret>ErlDrvTermData</ret><nametext>driver_get_monitored_process(ErlDrvPort port, const ErlDrvMonitor *monitor)</nametext></name>
- <fsummary>Retrieve the process id from a monitor</fsummary>
+ <name><ret>ErlDrvSizeT</ret><nametext>driver_peekqv(ErlDrvPort port,
+ ErlIOVec *ev)</nametext></name>
+ <fsummary>Get the driver queue as an I/O vector.</fsummary>
<desc>
- <marker id="driver_get_monitored_process"></marker>
- <p>The function returns the process id associated with a living
- monitor. It can be used in the <c>process_exit</c> call-back to
- get the process identification for the exiting process.</p>
- <p>The function returns <c>driver_term_nil</c> if the monitor
- no longer exists.</p>
+ <marker id="driver_peekqv"></marker>
+ <p>Retrieves the driver queue into a supplied
+ <c>ErlIOVec</c> <c>ev</c>. It also returns the queue size.
+ This is one of two ways to get data out of the queue.</p>
+ <p>If <c>ev</c> is <c>NULL</c>, all ones that is <c>-1</c> type cast to
+ <c>ErlDrvSizeT</c> are returned.</p>
+ <p>Nothing is removed from the queue by this function, that must be done
+ with <seealso marker="#driver_deq"><c>driver_deq</c></seealso>.</p>
+ <p>This function can be called from any thread if a
+ <seealso marker="#ErlDrvPDL">port data lock</seealso>
+ associated with the <c>port</c> is locked by the calling
+ thread during the call.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_compare_monitors(const ErlDrvMonitor *monitor1, const ErlDrvMonitor *monitor2)</nametext></name>
- <fsummary>Compare two monitors</fsummary>
+ <name><ret>int</ret><nametext>driver_pushq(ErlDrvPort port, char* buf,
+ ErlDrvSizeT len)</nametext></name>
+ <fsummary>Push data at the head of the driver queue.</fsummary>
<desc>
- <marker id="driver_compare_monitors"></marker>
- <p>This function is used to compare two <c>ErlDrvMonitor</c>s. It
- can also be used to imply some artificial order on monitors,
- for whatever reason.</p>
- <p>The function returns 0 if <c>monitor1</c> and
- <c>monitor2</c> are equal, &lt; 0 if <c>monitor1</c> is less
- than <c>monitor2</c> and &gt; 0 if <c>monitor1</c> is greater
- than <c>monitor2</c>.</p>
+ <marker id="driver_pushq"></marker>
+ <p>Puts data at the head of the driver queue. The
+ data in <c>buf</c> is copied (<c>len</c> bytes) and placed
+ at the beginning of the queue.</p>
+ <p>The return value is <c>0</c>.</p>
+ <p>This function can be called from any thread if a
+ <seealso marker="#ErlDrvPDL">port data lock</seealso>
+ associated with the <c>port</c> is locked by the calling
+ thread during the call.</p>
</desc>
</func>
+
<func>
- <name><ret>void</ret><nametext>add_driver_entry(ErlDrvEntry *de)</nametext></name>
- <fsummary>Add a driver entry</fsummary>
+ <name><ret>int</ret><nametext>driver_pushq_bin(ErlDrvPort port,
+ ErlDrvBinary *bin, ErlDrvSizeT offset, ErlDrvSizeT len)</nametext>
+ </name>
+ <fsummary>Push binary at the head of the driver queue.</fsummary>
<desc>
- <marker id="add_driver_entry"></marker>
- <p>This function adds a driver entry to the list of drivers
- known by Erlang. The <seealso marker="driver_entry#init">init</seealso> function of the <c>de</c>
- parameter is called.</p>
- <note>
- <p>To use this function for adding drivers residing in
- dynamically loaded code is dangerous. If the driver code
- for the added driver resides in the same dynamically
- loaded module (i.e. <c>.so</c> file) as a normal
- dynamically loaded driver (loaded with the <c>erl_ddll</c>
- interface), the caller should call <seealso marker="#driver_lock_driver">driver_lock_driver</seealso> before
- adding driver entries.</p>
- <p>Use of this function is generally deprecated.</p>
- </note>
+ <marker id="driver_pushq_bin"></marker>
+ <p>Puts data in the binary <c>bin</c>, at
+ <c>offset</c> with length <c>len</c> at the head of the
+ driver queue. It is most often faster than
+ <seealso marker="#driver_pushq"><c>driver_pushq</c></seealso>,
+ because no data must be copied.</p>
+ <p>This function can be called from any thread if a
+ <seealso marker="#ErlDrvPDL">port data lock</seealso>
+ associated with the <c>port</c> is locked by the calling
+ thread during the call.</p>
+ <p>The return value is <c>0</c>.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>remove_driver_entry(ErlDrvEntry *de)</nametext></name>
- <fsummary>Remove a driver entry</fsummary>
+ <name><ret>int</ret><nametext>driver_pushqv(ErlDrvPort port, ErlIOVec
+ *ev, ErlDrvSizeT skip)</nametext></name>
+ <fsummary>Push vector at the head of the driver queue.</fsummary>
<desc>
- <marker id="remove_driver_entry"></marker>
- <p>This function removes a driver entry <c>de</c> previously
- added with <c>add_driver_entry</c>.</p>
- <p>Driver entries added by the <c>erl_ddll</c> erlang interface can
- not be removed by using this interface.</p>
+ <marker id="driver_pushqv"></marker>
+ <p>Puts the data in <c>ev</c>, skipping the first
+ <c>skip</c> bytes of it, at the head of the driver queue.
+ It is faster than
+ <seealso marker="#driver_pushq"><c>driver_pushq</c></seealso>,
+ because no data must be copied.</p>
+ <p>The return value is <c>0</c>.</p>
+ <p>This function can be called from any thread if a
+ <seealso marker="#ErlDrvPDL">port data lock</seealso>
+ associated with the <c>port</c> is locked by the calling
+ thread during the call.</p>
</desc>
</func>
+
<func>
- <name><ret>char *</ret><nametext>erl_errno_id(int error)</nametext></name>
- <fsummary>Get erlang error atom name from error number</fsummary>
+ <name><ret>int</ret><nametext>driver_read_timer(ErlDrvPort port, unsigned
+ long *time_left)</nametext></name>
+ <fsummary>Read the time left before time-out.</fsummary>
<desc>
- <marker id="erl_errno_id"></marker>
- <p>This function returns the atom name of the erlang error,
- given the error number in <c>error</c>. Error atoms are:
- <c>einval</c>, <c>enoent</c>, etc. It can be used to make
- error terms from the driver.</p>
+ <marker id="driver_read_timer"></marker>
+ <p>Reads the current time of a timer, and places
+ the result in <c>time_left</c>. This is the time in
+ milliseconds, before the time-out occurs.</p>
+ <p>The return value is <c>0</c>.</p>
</desc>
</func>
+
<func>
- <name><ret>void</ret><nametext>erl_drv_busy_msgq_limits(ErlDrvPort port, ErlDrvSizeT *low, ErlDrvSizeT *high)</nametext></name>
- <fsummary>Set and get limits for busy port message queue</fsummary>
- <desc>
- <marker id="erl_drv_busy_msgq_limits"></marker>
- <p>Sets and gets limits that will be used for controling the
- busy state of the port message queue.</p>
- <p>The port message queue will be set into a busy
- state when the amount of command data queued on the
- message queue reaches the <c>high</c> limit. The port
- message queue will be set into a not busy state when the
- amount of command data queued on the message queue falls
- below the <c>low</c> limit. Command data is in this
- context data passed to the port using either
- <c>Port ! {Owner, {command, Data}}</c>, or
- <c>port_command/[2,3]</c>. Note that these limits
- only concerns command data that have not yet reached the
- port. The <seealso marker="#set_busy_port">busy port</seealso>
- feature can be used for data that has reached the port.</p>
-
- <p>Valid limits are values in the range
- <c>[ERL_DRV_BUSY_MSGQ_LIM_MIN, ERL_DRV_BUSY_MSGQ_LIM_MAX]</c>.
- Limits will be automatically adjusted to be sane. That is,
- the system will adjust values so that the low limit used is
- lower than or equal to the high limit used. By default the high
- limit will be 8 kB and the low limit will be 4 kB.</p>
-
- <p>By passing a pointer to an integer variable containing
- the value <c>ERL_DRV_BUSY_MSGQ_READ_ONLY</c>, currently used
- limit will be read and written back to the integer variable.
- A new limit can be set by passing a pointer to an integer
- variable containing a valid limit. The passed value will be
- written to the internal limit. The internal limit will then
- be adjusted. After this the adjusted limit will be written
- back to the integer variable from which the new value was
- read. Values are in bytes.</p>
-
- <p>The busy message queue feature can be disabled either
- by setting the <c>ERL_DRV_FLAG_NO_BUSY_MSGQ</c>
- <seealso marker="driver_entry#driver_flags">driver flag</seealso>
- in the <seealso marker="driver_entry">driver_entry</seealso>
- used by the driver, or by calling this function with
- <c>ERL_DRV_BUSY_MSGQ_DISABLED</c> as a limit (either low or
- high). When this feature has been disabled it cannot be
- enabled again. When reading the limits both of them
- will be <c>ERL_DRV_BUSY_MSGQ_DISABLED</c>, if this
- feature has been disabled.</p>
-
- <p>Processes sending command data to the port will be suspended
- if either the port is busy or if the port message queue is
- busy. Suspended processes will be resumed when neither the
- port is busy, nor the port message queue is busy.</p>
-
- <p>For information about busy port functionality
- see the documentation of the
- <seealso marker="#set_busy_port">set_busy_port()</seealso>
- function.</p>
- </desc>
- </func>
- <func>
- <name><ret>void</ret><nametext>set_busy_port(ErlDrvPort port, int on)</nametext></name>
- <fsummary>Signal or unsignal port as busy</fsummary>
+ <name><ret>void *</ret>
+ <nametext>driver_realloc(void *ptr, ErlDrvSizeT size)</nametext></name>
+ <fsummary>Resize an allocated memory block.</fsummary>
<desc>
- <marker id="set_busy_port"></marker>
- <p>This function set and unset the busy state of the port. If
- <c>on</c> is non-zero, the port is set to busy, if it's zero the port
- is set to not busy. You typically want to combine
- this feature with the <seealso marker="#erl_drv_busy_msgq_limits">busy
- port message queue</seealso> functionality.</p>
- <p>Processes sending command data to the port will be suspended
- if either the port is busy or if the port message queue
- is busy. Suspended processes will be resumed when neither the
- port is busy, nor the port message queue is busy. Command data
- is in this context data passed to the port using either
- <c>Port ! {Owner, {command, Data}}</c>, or
- <c>port_command/[2,3]</c>.</p>
- <p>If the
- <seealso marker="driver_entry#driver_flags"><![CDATA[ERL_DRV_FLAG_SOFT_BUSY]]></seealso>
- has been set in the
- <seealso marker="driver_entry">driver_entry</seealso>,
- data can be forced into the driver via
- <seealso marker="erlang#port_command/3">port_command(Port, Data, [force])</seealso>
- even though the driver has signaled that it is busy.
- </p>
- <p>For information about busy port message queue functionality
- see the documentation of the
- <seealso marker="#erl_drv_busy_msgq_limits">erl_drv_busy_msgq_limits()</seealso>
- function.</p>
- </desc>
- </func>
- <func>
- <name><ret>void</ret><nametext>set_port_control_flags(ErlDrvPort port, int flags)</nametext></name>
- <fsummary>Set flags on how to handle control entry function</fsummary>
- <desc>
- <marker id="set_port_control_flags"></marker>
- <p>This function sets flags for how the <seealso marker="driver_entry#control">control</seealso> driver entry
- function will return data to the port owner process. (The
- <c>control</c> function is called from <c>port_control/3</c>
- in erlang.)</p>
- <p>Currently there are only two meaningful values for
- <c>flags</c>: 0 means that data is returned in a list, and
- <c>PORT_CONTROL_FLAG_BINARY</c> means data is returned as
- a binary from <c>control</c>.</p>
+ <marker id="driver_realloc"></marker>
+ <p>Resizes a memory block, either in place, or by
+ allocating a new block, copying the data, and freeing the old
+ block. A pointer is returned to the reallocated memory. On
+ failure (out of memory), <c>NULL</c> is returned. (This is
+ most often a wrapper for <c>realloc</c>.)</p>
+ <p>This function is thread-safe.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_failure_eof(ErlDrvPort port)</nametext></name>
- <fsummary>Fail with EOF</fsummary>
+ <name><ret>ErlDrvBinary *</ret>
+ <nametext>driver_realloc_binary(ErlDrvBinary *bin, ErlDrvSizeT size)
+ </nametext></name>
+ <fsummary>Resize a driver binary.</fsummary>
<desc>
- <marker id="driver_failure_eof"></marker>
- <p>This function signals to erlang that the driver has
- encountered an EOF and should be closed, unless the port was
- opened with the <c>eof</c> option, in that case eof is sent
- to the port. Otherwise, the port is closed and an
- <c>'EXIT'</c> message is sent to the port owner process.</p>
- <p>The return value is 0.</p>
+ <marker id="driver_realloc_binary"></marker>
+ <p>Resizes a driver binary, while keeping the data.</p>
+ <p>Returns the resized driver binary on success. Returns <c>NULL</c>
+ on failure (out of memory).</p>
+ <p>This function is only thread-safe when the emulator with SMP
+ support is used.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_failure_atom(ErlDrvPort port, char *string)</nametext></name>
- <name><ret>int</ret><nametext>driver_failure_posix(ErlDrvPort port, int error)</nametext></name>
- <name><ret>int</ret><nametext>driver_failure(ErlDrvPort port, int error)</nametext></name>
- <fsummary>Fail with error</fsummary>
+ <name><ret>int</ret><nametext>driver_select(ErlDrvPort port, ErlDrvEvent
+ event, int mode, int on)</nametext></name>
+ <fsummary>Provides an event for having the emulator call the driver.
+ </fsummary>
<desc>
- <marker id="driver_failure_atom"></marker>
- <marker id="driver_failure_posix"></marker>
- <marker id="driver_failure"></marker>
- <p>These functions signal to Erlang that the driver has
- encountered an error and should be closed. The port is
- closed and the tuple <c>{'EXIT', error, Err}</c>, is sent to
- the port owner process, where error is an error atom
- (<c>driver_failure_atom</c> and
- <c>driver_failure_posix</c>), or an integer
- (<c>driver_failure</c>).</p>
- <p>The driver should fail only when in severe error situations,
- when the driver cannot possibly keep open, for instance
- buffer allocation gets out of memory. For normal errors
- it is more appropriate to send error codes with
- <c>driver_output</c>.</p>
- <p>The return value is 0.</p>
+ <marker id="driver_select"></marker>
+ <p>This function is used by drivers to provide the emulator with
+ events to check for. This enables the emulator to call the driver
+ when something has occurred asynchronously.</p>
+ <p>Parameter <c>event</c> identifies an OS-specific event object.
+ On Unix systems, the functions <c>select</c>/<c>poll</c> are used.
+ The event object must be a socket or pipe (or other object that
+ <c>select</c>/<c>poll</c> can use).
+ On Windows, the Win32 API function <c>WaitForMultipleObjects</c>
+ is used. This places other restrictions on the event object;
+ see the Win32 SDK documentation.</p>
+ <p>Parameter <c>on</c> is to be <c>1</c> for setting events
+ and <c>0</c> for clearing them.</p>
+ <p>Parameter <c>mode</c> is a bitwise OR combination of
+ <c>ERL_DRV_READ</c>, <c>ERL_DRV_WRITE</c>, and <c>ERL_DRV_USE</c>.
+ The first two specify whether to wait for read events and/or write
+ events. A fired read event calls
+ <seealso marker="driver_entry#ready_input">
+ <c>ready_input</c></seealso> and a fired write event calls
+ <seealso marker="driver_entry#ready_output">
+ <c>ready_output</c></seealso>.</p>
+ <note>
+ <p>Some OS (Windows) do not differentiate between read and write
+ events. The callback for a fired event then only depends on the
+ value of <c>mode</c>.</p>
+ </note>
+ <p><c>ERL_DRV_USE</c> specifies if we are using the event object or
+ if we want to close it.
+ On an emulator with SMP support, it is not safe to clear all events
+ and then close the event object after <c>driver_select</c> has
+ returned. Another thread can still be using the event object
+ internally. To safely close an event object, call
+ <c>driver_select</c> with <c>ERL_DRV_USE</c> and <c>on==0</c>, which
+ clears all events. Then call
+ <seealso marker="driver_entry#stop_select">
+ <c>stop_select</c></seealso> when it is safe to close the event
+ object. <c>ERL_DRV_USE</c> is to be set together with the first event
+ for an event object. It is harmless to set <c>ERL_DRV_USE</c>
+ even if it already has been done. Clearing all events but keeping
+ <c>ERL_DRV_USE</c> set indicates that we are using the event
+ object and probably will set events for it again.</p>
+ <note>
+ <p><c>ERL_DRV_USE</c> was added in Erlang/OTP R13. Old drivers still
+ work as before, but it is recommended to update them to use
+ <c>ERL_DRV_USE</c> and <c>stop_select</c> to ensure that event
+ objects are closed in a safe way.</p>
+ </note>
+ <p>The return value is <c>0</c>, unless
+ <c>ready_input</c>/<c>ready_output</c> is <c>NULL</c>, in which case
+ it is <c>-1</c>.</p>
</desc>
</func>
+
<func>
- <name><ret>ErlDrvTermData</ret><nametext>driver_connected(ErlDrvPort port)</nametext></name>
- <fsummary>Return the port owner process</fsummary>
+ <name><ret>int</ret><nametext>driver_send_term(ErlDrvPort port,
+ ErlDrvTermData receiver, ErlDrvTermData* term, int n)</nametext></name>
+ <fsummary>Send term data to other process than port owner process.
+ </fsummary>
<desc>
- <marker id="driver_connected"></marker>
- <p>This function returns the port owner process.</p>
- <p>Note that this function is <em>not</em> thread-safe, not
- even when the emulator with SMP support is used.</p>
+ <marker id="driver_send_term"></marker>
+ <warning>
+ <p><em>This function is deprecated.</em>
+ Use <seealso marker="#erl_drv_send_term">
+ <c>erl_drv_send_term</c></seealso> instead.</p>
+ </warning>
+ <note>
+ <p>The parameters of this function
+ cannot be properly checked by the runtime system when
+ executed by arbitrary threads. This can cause the
+ function not to fail when it should.</p>
+ </note>
+ <p>Parameters <c>term</c> and <c>n</c> work as in
+ <seealso marker="#erl_drv_output_term">
+ <c>erl_drv_output_term</c></seealso>.</p>
+ <p>This function is only thread-safe when the emulator with SMP
+ support is used.</p>
</desc>
</func>
+
<func>
- <name><ret>ErlDrvTermData</ret><nametext>driver_caller(ErlDrvPort port)</nametext></name>
- <fsummary>Return the process making the driver call</fsummary>
+ <name><ret>int</ret><nametext>driver_set_timer(ErlDrvPort port, unsigned
+ long time)</nametext></name>
+ <fsummary>Set a timer to call the driver.</fsummary>
<desc>
- <marker id="driver_caller"></marker>
- <p>This function returns the process id of the process that
- made the current call to the driver. The process id can be
- used with <c>driver_send_term</c> to send back data to the
- caller. <c>driver_caller()</c> only returns valid data
- when currently executing in one of the following driver
- callbacks:</p>
- <taglist>
- <tag><seealso marker="driver_entry#start">start</seealso></tag>
- <item>Called from <c>open_port/2</c>.</item>
- <tag><seealso marker="driver_entry#output">output</seealso></tag>
- <item>Called from <c>erlang:send/2</c>, and
- <c>erlang:port_command/2</c></item>
- <tag><seealso marker="driver_entry#outputv">outputv</seealso></tag>
- <item>Called from <c>erlang:send/2</c>, and
- <c>erlang:port_command/2</c></item>
- <tag><seealso marker="driver_entry#control">control</seealso></tag>
- <item>Called from <c>erlang:port_control/3</c></item>
- <tag><seealso marker="driver_entry#call">call</seealso></tag>
- <item>Called from <c>erlang:port_call/3</c></item>
- </taglist>
- <p>Note that this function is <em>not</em> thread-safe, not
- even when the emulator with SMP support is used.</p>
+ <marker id="driver_set_timer"></marker>
+ <p>Sets a timer on the driver, which will count
+ down and call the driver when it is timed out. Parameter
+ <c>time</c> is the time in milliseconds before the timer expires.</p>
+ <p>When the timer reaches <c>0</c> and expires, the driver entry
+ function <seealso marker="driver_entry#timeout">
+ <c>timeout</c></seealso> is called.</p>
+ <p>Notice that only one timer exists on each driver instance;
+ setting a new timer replaces an older one.</p>
+ <p>Return value is <c>0</c>, unless the <c>timeout</c>
+ driver function is <c>NULL</c>, in which case it is <c>-1</c>.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>erl_drv_output_term(ErlDrvTermData port, ErlDrvTermData* term, int n)</nametext></name>
- <fsummary>Send term data from driver to port owner</fsummary>
+ <name><ret>ErlDrvSizeT</ret>
+ <nametext>driver_sizeq(ErlDrvPort port)</nametext></name>
+ <fsummary>Return the size of the driver queue.</fsummary>
<desc>
- <marker id="erl_drv_output_term"></marker>
- <p>This functions sends data in the special driver term
- format to the port owner process. This is a fast way to
- deliver term data from a driver. It also needs no binary
- conversion, so the port owner process receives data as
- normal Erlang terms. The
- <seealso marker="#erl_drv_send_term">erl_drv_send_term()</seealso>
- functions can be used for sending to any arbitrary process
- on the local node.</p>
- <note><p>Note that the <c>port</c> parameter is <em>not</em>
- an ordinary port handle, but a port handle converted using
- <c>driver_mk_port()</c>.</p></note>
- <p>The <c>term</c> parameter points to an array of
- <c>ErlDrvTermData</c>, with <c>n</c> elements. This array
- contains terms described in the driver term format. Every
- term consists of one to four elements in the array. The
- term first has a term type, and then arguments. The
- <c>port</c> parameter specifies the sending port.</p>
- <p>Tuples, maps and lists (with the exception of strings, see below),
- are built in reverse polish notation, so that to build a
- tuple, the elements are given first, and then the tuple
- term, with a count. Likewise for lists and maps.</p>
- <p>A tuple must be specified with the number of elements. (The
- elements precede the <c>ERL_DRV_TUPLE</c> term.)</p>
- <p>A list must be specified with the number of elements,
- including the tail, which is the last term preceding
- <c>ERL_DRV_LIST</c>.</p>
- <p>A map must be specified with the number of key-value pairs <c>N</c>.
- The key-value pairs must precede the <c>ERL_DRV_MAP</c> in this order:
- <c>key1,value1,key2,value2,...,keyN,valueN</c>.
- Duplicate keys are not allowed.</p>
- <p>The special term <c>ERL_DRV_STRING_CONS</c> is used to
- "splice" in a string in a list, a string given this way is
- not a list per se, but the elements are elements of the
- surrounding list.</p>
- <pre>
-Term type Argument(s)
-===========================================
-ERL_DRV_NIL
-ERL_DRV_ATOM ErlDrvTermData atom (from driver_mk_atom(char *string))
-ERL_DRV_INT ErlDrvSInt integer
-ERL_DRV_UINT ErlDrvUInt integer
-ERL_DRV_INT64 ErlDrvSInt64 *integer_ptr
-ERL_DRV_UINT64 ErlDrvUInt64 *integer_ptr
-ERL_DRV_PORT ErlDrvTermData port (from driver_mk_port(ErlDrvPort port))
-ERL_DRV_BINARY ErlDrvBinary *bin, ErlDrvUInt len, ErlDrvUInt offset
-ERL_DRV_BUF2BINARY char *buf, ErlDrvUInt len
-ERL_DRV_STRING char *str, int len
-ERL_DRV_TUPLE int sz
-ERL_DRV_LIST int sz
-ERL_DRV_PID ErlDrvTermData pid (from driver_connected(ErlDrvPort port) or driver_caller(ErlDrvPort port))
-ERL_DRV_STRING_CONS char *str, int len
-ERL_DRV_FLOAT double *dbl
-ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len
-ERL_DRV_MAP int sz
- </pre>
- <p>The unsigned integer data type <c>ErlDrvUInt</c> and the
- signed integer data type <c>ErlDrvSInt</c> are 64 bits wide
- on a 64 bit runtime system and 32 bits wide on a 32 bit
- runtime system. They were introduced in erts version 5.6,
- and replaced some of the <c>int</c> arguments in the list above.
- </p>
- <p>The unsigned integer data type <c>ErlDrvUInt64</c> and the
- signed integer data type <c>ErlDrvSInt64</c> are always 64 bits
- wide. They were introduced in erts version 5.7.4.
- </p>
-
- <p>To build the tuple <c>{tcp, Port, [100 | Binary]}</c>, the
- following call could be made.</p>
- <code type="none"><![CDATA[
- ErlDrvBinary* bin = ...
- ErlDrvPort port = ...
- ErlDrvTermData spec[] = {
- ERL_DRV_ATOM, driver_mk_atom("tcp"),
- ERL_DRV_PORT, driver_mk_port(drvport),
- ERL_DRV_INT, 100,
- ERL_DRV_BINARY, bin, 50, 0,
- ERL_DRV_LIST, 2,
- ERL_DRV_TUPLE, 3,
- };
- erl_drv_output_term(driver_mk_port(drvport), spec, sizeof(spec) / sizeof(spec[0]));
- ]]>
- </code>
- <p>Where <c>bin</c> is a driver binary of length at least 50
- and <c>drvport</c> is a port handle. Note that the <c>ERL_DRV_LIST</c>
- comes after the elements of the list, likewise the
- <c>ERL_DRV_TUPLE</c>.</p>
- <p>The term <c>ERL_DRV_STRING_CONS</c> is a way to construct
- strings. It works differently from how <c>ERL_DRV_STRING</c>
- works. <c>ERL_DRV_STRING_CONS</c> builds a string list in
- reverse order, (as opposed to how <c>ERL_DRV_LIST</c>
- works), concatenating the strings added to a list. The tail
- must be given before <c>ERL_DRV_STRING_CONS</c>.</p>
- <p>The <c>ERL_DRV_STRING</c> constructs a string, and ends
- it. (So it's the same as <c>ERL_DRV_NIL</c> followed by
- <c>ERL_DRV_STRING_CONS</c>.)</p>
- <code type="none"><![CDATA[
- /* to send [x, "abc", y] to the port: */
- ErlDrvTermData spec[] = {
- ERL_DRV_ATOM, driver_mk_atom("x"),
- ERL_DRV_STRING, (ErlDrvTermData)"abc", 3,
- ERL_DRV_ATOM, driver_mk_atom("y"),
- ERL_DRV_NIL,
- ERL_DRV_LIST, 4
- };
- erl_drv_output_term(driver_mk_port(drvport), spec, sizeof(spec) / sizeof(spec[0]));
- ]]></code>
- <p></p>
- <code type="none"><![CDATA[
- /* to send "abc123" to the port: */
- ErlDrvTermData spec[] = {
- ERL_DRV_NIL, /* with STRING_CONS, the tail comes first */
- ERL_DRV_STRING_CONS, (ErlDrvTermData)"123", 3,
- ERL_DRV_STRING_CONS, (ErlDrvTermData)"abc", 3,
- };
- erl_drv_output_term(driver_mk_port(drvport), spec, sizeof(spec) / sizeof(spec[0]));
- ]]></code>
- <p>The <c>ERL_DRV_EXT2TERM</c> term type is used for passing a
- term encoded with the
- <seealso marker="erl_ext_dist">external format</seealso>,
- i.e., a term that has been encoded by
- <seealso marker="erlang#term_to_binary/2">erlang:term_to_binary</seealso>,
- <seealso marker="erl_interface:ei">erl_interface</seealso>, etc.
- For example, if <c>binp</c> is a pointer to an <c>ErlDrvBinary</c>
- that contains the term <c>{17, 4711}</c> encoded with the
- <seealso marker="erl_ext_dist">external format</seealso>
- and you want to wrap it in a two tuple with the tag <c>my_tag</c>,
- i.e., <c>{my_tag, {17, 4711}}</c>, you can do as follows:
- </p>
- <code type="none"><![CDATA[
- ErlDrvTermData spec[] = {
- ERL_DRV_ATOM, driver_mk_atom("my_tag"),
- ERL_DRV_EXT2TERM, (ErlDrvTermData) binp->orig_bytes, binp->orig_size
- ERL_DRV_TUPLE, 2,
- };
- erl_drv_output_term(driver_mk_port(drvport), spec, sizeof(spec) / sizeof(spec[0]));
- ]]></code>
-
- <p>To build the map <c>#{key1 => 100, key2 => {200, 300}}</c>, the
- following call could be made.</p>
- <code type="none"><![CDATA[
- ErlDrvPort port = ...
- ErlDrvTermData spec[] = {
- ERL_DRV_ATOM, driver_mk_atom("key1"),
- ERL_DRV_INT, 100,
- ERL_DRV_ATOM, driver_mk_atom("key2"),
- ERL_DRV_INT, 200,
- ERL_DRV_INT, 300,
- ERL_DRV_TUPLE, 2,
- ERL_DRV_MAP, 2
- };
- erl_drv_output_term(driver_mk_port(drvport), spec, sizeof(spec) / sizeof(spec[0]));
- ]]>
- </code>
-
- <p>If you want to pass a binary and don't already have the content
- of the binary in an <c>ErlDrvBinary</c>, you can benefit from using
- <c>ERL_DRV_BUF2BINARY</c> instead of creating an <c>ErlDrvBinary</c>
- via <c>driver_alloc_binary()</c> and then pass the binary via
- <c>ERL_DRV_BINARY</c>. The runtime system will often allocate
- binaries smarter if <c>ERL_DRV_BUF2BINARY</c> is used.
- However, if the content of the binary to pass already resides in
- an <c>ErlDrvBinary</c>, it is normally better to pass the binary
- using <c>ERL_DRV_BINARY</c> and the <c>ErlDrvBinary</c> in question.
- </p>
- <p>The <c>ERL_DRV_UINT</c>, <c>ERL_DRV_BUF2BINARY</c>, and
- <c>ERL_DRV_EXT2TERM</c> term types were introduced in the 5.6
- version of erts.
- </p>
- <p>This function is only thread-safe when the emulator with SMP
- support is used.</p>
+ <marker id="driver_sizeq"></marker>
+ <p>Returns the number of bytes currently in the driver queue.</p>
+ <p>This function can be called from any thread if a
+ <seealso marker="#ErlDrvPDL">port data lock</seealso>
+ associated with the <c>port</c> is locked by the calling
+ thread during the call.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_output_term(ErlDrvPort port, ErlDrvTermData* term, int n)</nametext></name>
- <fsummary>Send term data from driver to port owner</fsummary>
+ <name><ret>void</ret><nametext>driver_system_info(ErlDrvSysInfo
+ *sys_info_ptr, size_t size)</nametext></name>
+ <fsummary>Get information about the Erlang runtime system.</fsummary>
<desc>
- <marker id="driver_output_term"></marker>
- <warning><p><c>driver_output_term()</c> is deprecated and will
- be removed in the OTP-R17 release. Use
- <seealso marker="#erl_drv_send_term">erl_drv_output_term()</seealso>
- instead.</p>
- </warning>
- <p>The parameters <c>term</c> and <c>n</c> do the same thing
- as in <seealso marker="#erl_drv_output_term">erl_drv_output_term()</seealso>.</p>
- <p>Note that this function is <em>not</em> thread-safe, not
- even when the emulator with SMP support is used.</p>
+ <marker id="driver_system_info"></marker>
+ <p>Writes information about the Erlang runtime system into the
+ <seealso marker="#ErlDrvSysInfo"><c>ErlDrvSysInfo</c></seealso>
+ structure referred to by the first argument. The second
+ argument is to be the size of the
+ <seealso marker="#ErlDrvSysInfo"><c>ErlDrvSysInfo</c></seealso>
+ structure, that is, <c>sizeof(ErlDrvSysInfo)</c>.</p>
+ <p>For information about specific fields, see
+ <seealso marker="#ErlDrvSysInfo"><c>ErlDrvSysInfo</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name><ret>ErlDrvTermData</ret><nametext>driver_mk_atom(char* string)</nametext></name>
- <fsummary>Make an atom from a name</fsummary>
+ <name><ret>ErlDrvSizeT</ret><nametext>driver_vec_to_buf(ErlIOVec *ev,
+ char *buf, ErlDrvSizeT len)</nametext></name>
+ <fsummary>Collect data segments into a buffer.</fsummary>
<desc>
- <marker id="driver_mk_atom"></marker>
- <p>This function returns an atom given a name
- <c>string</c>. The atom is created and won't change, so the
- return value may be saved and reused, which is faster than
- looking up the atom several times.</p>
- <p>Note that this function is <em>not</em> thread-safe, not
- even when the emulator with SMP support is used.</p>
+ <marker id="driver_vec_to_buf"></marker>
+ <p>Collects several segments of data, referenced
+ by <c>ev</c>, by copying them in order to the buffer
+ <c>buf</c>, of the size <c>len</c>.</p>
+ <p>If the data is to be sent from the driver to the port owner
+ process, it is faster to use
+ <seealso marker="#driver_outputv"><c>driver_outputv</c></seealso>.</p>
+ <p>The return value is the space left in the buffer, that is, if
+ <c>ev</c> contains less than <c>len</c> bytes it is the
+ difference, and if <c>ev</c> contains <c>len</c> bytes or more,
+ it is <c>0</c>. This is faster if there is more than one header byte,
+ as the binary syntax can construct integers directly from
+ the binary.</p>
</desc>
</func>
+
<func>
- <name><ret>ErlDrvTermData</ret><nametext>driver_mk_port(ErlDrvPort port)</nametext></name>
- <fsummary>Make a erlang term port from a port</fsummary>
+ <name><ret>void</ret><nametext>erl_drv_busy_msgq_limits(ErlDrvPort port,
+ ErlDrvSizeT *low, ErlDrvSizeT *high)</nametext></name>
+ <fsummary>Set and get limits for busy port message queue.</fsummary>
<desc>
- <marker id="driver_mk_port"></marker>
- <p>This function converts a port handle to the erlang term
- format, usable in the <seealso marker="#erl_drv_output_term">erl_drv_output_term()</seealso>, and <seealso marker="#erl_drv_send_term">erl_drv_send_term()</seealso> functions.</p>
- <p>Note that this function is <em>not</em> thread-safe, not
- even when the emulator with SMP support is used.</p>
+ <marker id="erl_drv_busy_msgq_limits"></marker>
+ <p>Sets and gets limits that will be used for controling the
+ busy state of the port message queue.</p>
+ <p>The port message queue is set into a busy
+ state when the amount of command data queued on the
+ message queue reaches the <c>high</c> limit. The port
+ message queue is set into a not busy state when the
+ amount of command data queued on the message queue falls
+ below the <c>low</c> limit. Command data is in this
+ context data passed to the port using either
+ <c>Port ! {Owner, {command, Data}}</c> or
+ <c>port_command/[2,3]</c>. Notice that these limits
+ only concerns command data that have not yet reached the
+ port. The <seealso marker="#set_busy_port">busy port</seealso>
+ feature can be used for data that has reached the port.</p>
+ <p>Valid limits are values in the range
+ <c>[ERL_DRV_BUSY_MSGQ_LIM_MIN, ERL_DRV_BUSY_MSGQ_LIM_MAX]</c>.
+ Limits are automatically adjusted to be sane. That is,
+ the system adjusts values so that the low limit used is
+ lower than or equal to the high limit used. By default the high
+ limit is 8 kB and the low limit is 4 kB.</p>
+ <p>By passing a pointer to an integer variable containing
+ the value <c>ERL_DRV_BUSY_MSGQ_READ_ONLY</c>, the currently used
+ limit is read and written back to the integer variable.
+ A new limit can be set by passing a pointer to an integer
+ variable containing a valid limit. The passed value is
+ written to the internal limit. The internal limit is then
+ adjusted. After this the adjusted limit is written
+ back to the integer variable from which the new value was
+ read. Values are in bytes.</p>
+ <p>The busy message queue feature can be disabled either
+ by setting the <c>ERL_DRV_FLAG_NO_BUSY_MSGQ</c>
+ <seealso marker="driver_entry#driver_flags">driver flag</seealso>
+ in the <seealso marker="driver_entry"><c>driver_entry</c></seealso>
+ used by the driver, or by calling this function with
+ <c>ERL_DRV_BUSY_MSGQ_DISABLED</c> as a limit (either low or
+ high). When this feature has been disabled, it cannot be
+ enabled again. When reading the limits, both are
+ <c>ERL_DRV_BUSY_MSGQ_DISABLED</c> if this
+ feature has been disabled.</p>
+ <p>Processes sending command data to the port are suspended
+ if either the port is busy or if the port message queue is
+ busy. Suspended processes are resumed when neither the
+ port or the port message queue is busy.</p>
+ <p>For information about busy port functionality, see
+ <seealso marker="#set_busy_port"><c>set_busy_port</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret><nametext>erl_drv_cond_broadcast(ErlDrvCond
+ *cnd)</nametext></name>
+ <fsummary>Broadcast on a condition variable.</fsummary>
+ <desc>
+ <marker id="erl_drv_cond_broadcast"></marker>
+ <p>Broadcasts on a condition variable. That is, if
+ other threads are waiting on the condition variable being
+ broadcast on, <em>all</em> of them are woken.</p>
+ <p><c>cnd</c> is a pointer to a condition variable to broadcast on.</p>
+ <p>This function is thread-safe.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>erl_drv_send_term(ErlDrvTermData port, ErlDrvTermData receiver, ErlDrvTermData* term, int n)</nametext></name>
- <fsummary>Send term data to other process than port owner process</fsummary>
+ <name><ret>ErlDrvCond *</ret><nametext>erl_drv_cond_create(char
+ *name)</nametext></name>
+ <fsummary>Create a condition variable.</fsummary>
<desc>
- <marker id="erl_drv_send_term"></marker>
- <p>This function is the only way for a driver to send data to
- <em>other</em> processes than the port owner process. The
- <c>receiver</c> parameter specifies the process to receive
- the data.</p>
- <note><p>Note that the <c>port</c> parameter is <em>not</em>
- an ordinary port handle, but a port handle converted using
- <c>driver_mk_port()</c>.</p></note>
- <p>The parameters <c>port</c>, <c>term</c> and <c>n</c> do the same thing
- as in <seealso marker="#erl_drv_output_term">erl_drv_output_term()</seealso>.</p>
- <p>This function is only thread-safe when the emulator with SMP
- support is used.</p>
+ <marker id="erl_drv_cond_create"></marker>
+ <p>Creates a condition variable and returns a pointer to it.</p>
+ <p><c>name</c> is a string identifying the created condition variable.
+ It is used to identify the condition variable in planned
+ future debug functionality.</p>
+ <p>Returns <c>NULL</c> on failure. The driver
+ creating the condition variable is responsibile for
+ destroying it before the driver is unloaded.</p>
+ <p>This function is thread-safe.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_send_term(ErlDrvPort port, ErlDrvTermData receiver, ErlDrvTermData* term, int n)</nametext></name>
- <fsummary>Send term data to other process than port owner process</fsummary>
+ <name><ret>void</ret><nametext>erl_drv_cond_destroy(ErlDrvCond
+ *cnd)</nametext></name>
+ <fsummary>Destroy a condition variable.</fsummary>
<desc>
- <marker id="driver_send_term"></marker>
- <warning><p><c>driver_send_term()</c> is deprecated and will
- be removed in the OTP-R17 release. Use
- <seealso marker="#erl_drv_send_term">erl_drv_send_term()</seealso>
- instead.</p>
- <p>Also note that parameters of <c>driver_send_term()</c>
- cannot be properly checked by the runtime system when
- executed by arbitrary threads. This may cause the
- <c>driver_send_term()</c> function not to fail when
- it should.</p>
- </warning>
- <p>The parameters <c>term</c> and <c>n</c> do the same thing
- as in <seealso marker="#erl_drv_output_term">erl_drv_output_term()</seealso>.</p>
- <p>This function is only thread-safe when the emulator with SMP
- support is used.</p>
+ <marker id="erl_drv_cond_destroy"></marker>
+ <p>Destroys a condition variable previously created by
+ <seealso marker="#erl_drv_cond_create">
+ <c>erl_drv_cond_create</c></seealso>.</p>
+ <p><c>cnd</c> is a pointer to a condition variable to destroy.</p>
+ <p>This function is thread-safe.</p>
</desc>
</func>
+
<func>
- <name><ret>long</ret><nametext>driver_async (ErlDrvPort port, unsigned int* key, void (*async_invoke)(void*), void* async_data, void (*async_free)(void*))</nametext></name>
- <fsummary>Perform an asynchronous call within a driver</fsummary>
+ <name><ret>char *</ret><nametext>erl_drv_cond_name(ErlDrvCond
+ *cnd)</nametext></name>
+ <fsummary>Get name of driver mutex.</fsummary>
<desc>
- <marker id="driver_async"></marker>
- <p>This function performs an asynchronous call. The function
- <c>async_invoke</c> is invoked in a thread separate from the
- emulator thread. This enables the driver to perform
- time-consuming, blocking operations without blocking the
- emulator.</p>
- <p>The async thread pool size can be set with the
- <seealso marker="erl#async_thread_pool_size">+A</seealso>
- command line argument of <seealso marker="erl">erl(1)</seealso>.
- If no async thread pool is available, the call is made
- synchronously in the thread calling <c>driver_async()</c>. The
- current number of async threads in the async thread pool can be
- retrieved via
- <seealso marker="#driver_system_info">driver_system_info()</seealso>.</p>
- <p>If there is a thread pool available, a thread will be
- used. If the <c>key</c> argument is null, the threads from the
- pool are used in a round-robin way, each call to
- <c>driver_async</c> uses the next thread in the pool. With the
- <c>key</c> argument set, this behaviour is changed. The two
- same values of <c>*key</c> always get the same thread.</p>
- <p>To make sure that a driver instance always uses the same
- thread, the following call can be used:</p>
- <p></p>
- <code type="none"><![CDATA[
- unsigned int myKey = driver_async_port_key(myPort);
-
- r = driver_async(myPort, &myKey, myData, myFunc);
- ]]></code>
- <p>It is enough to initialize <c>myKey</c> once for each
- driver instance.</p>
- <p>If a thread is already working, the calls will be
- queued up and executed in order. Using the same thread for
- each driver instance ensures that the calls will be made in
- sequence.</p>
- <p>The <c>async_data</c> is the argument to the functions
- <c>async_invoke</c> and <c>async_free</c>. It's typically a
- pointer to a structure that contains a pipe or event that
- can be used to signal that the async operation completed.
- The data should be freed in <c>async_free</c>.</p>
- <p>When the async operation is done, <seealso marker="driver_entry#ready_async">ready_async</seealso> driver
- entry function is called. If <c>ready_async</c> is null in
- the driver entry, the <c>async_free</c> function is called
- instead.</p>
- <p>The return value is -1 if the <c>driver_async</c> call
- fails.</p>
+ <marker id="erl_drv_cnd_name"></marker>
+ <p>Returns a pointer to the name of the condition.</p>
+ <p><c>cnd</c> is a pointer to an initialized condition.</p>
<note>
- <p>As of erts version 5.5.4.3 the default stack size for
- threads in the async-thread pool is 16 kilowords,
- i.e., 64 kilobyte on 32-bit architectures.
- This small default size has been chosen since the
- amount of async-threads might be quite large. The
- default stack size is enough for drivers delivered
- with Erlang/OTP, but might not be sufficiently large
- for other dynamically linked in drivers that use the
- driver_async() functionality. A suggested stack size
- for threads in the async-thread pool can be configured
- via the
- <seealso marker="erl#async_thread_stack_size">+a</seealso>
- command line argument of
- <seealso marker="erl">erl(1)</seealso>.</p>
+ <p>This function is intended for debugging purposes only.</p>
</note>
</desc>
</func>
+
<func>
- <name><ret>unsigned int</ret><nametext>driver_async_port_key (ErlDrvPort port)</nametext></name>
- <fsummary>Calculate an async key from an ErlDrvPort</fsummary>
+ <name><ret>void</ret><nametext>erl_drv_cond_signal(ErlDrvCond
+ *cnd)</nametext></name>
+ <fsummary>Signal on a condition variable.</fsummary>
<desc>
- <marker id="driver_async_port_key"></marker>
- <p>This function calculates a key for later use in <seealso
- marker="#driver_async">driver_async()</seealso>. The keys are
- evenly distributed so that a fair mapping between port id's
- and async thread id's is achieved.</p>
- <note>
- <p>Before OTP-R16, the actual port id could be used as a key
- with proper casting, but after the rewrite of the port
- subsystem, this is no longer the case. With this function, you
- can achieve the same distribution based on port id's as before
- OTP-R16.</p>
- </note>
+ <marker id="erl_drv_cond_signal"></marker>
+ <p>Signals on a condition variable. That is, if
+ other threads are waiting on the condition variable being
+ signaled, <em>one</em> of them is woken.</p>
+ <p><c>cnd</c> is a pointer to a condition variable to signal on.</p>
+ <p>This function is thread-safe.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>driver_lock_driver(ErlDrvPort port)</nametext></name>
- <fsummary>Make sure the driver is never unloaded</fsummary>
+ <name><ret>void</ret><nametext>erl_drv_cond_wait(ErlDrvCond *cnd,
+ ErlDrvMutex *mtx)</nametext></name>
+ <fsummary>Wait on a condition variable.</fsummary>
<desc>
- <marker id="driver_lock_driver"></marker>
- <p>This function locks the driver used by the port <c>port</c>
- in memory for the rest of the emulator process'
- lifetime. After this call, the driver behaves as one of Erlang's
- statically linked in drivers.</p>
+ <marker id="erl_drv_cond_wait"></marker>
+ <p>Waits on a condition variable. The calling
+ thread is blocked until another thread wakes it by signaling
+ or broadcasting on the condition variable. Before the calling
+ thread is blocked, it unlocks the mutex passed as argument.
+ When the calling thread is woken, it locks the same mutex before
+ returning. That is, the mutex currently must be locked by
+ the calling thread when calling this function.</p>
+ <p><c>cnd</c> is a pointer to a condition variable to wait on.
+ <c>mtx</c> is a pointer to a mutex to unlock while waiting.</p>
+ <note>
+ <p><c>erl_drv_cond_wait</c> can return even if
+ no one has signaled or broadcast on the condition
+ variable. Code calling <c>erl_drv_cond_wait</c> is
+ always to be prepared for <c>erl_drv_cond_wait</c>
+ returning even if the condition that the thread was
+ waiting for has not occurred. That is, when returning from
+ <c>erl_drv_cond_wait</c>, always check if the condition
+ has occurred, and if not call <c>erl_drv_cond_wait</c> again.</p>
+ </note>
+ <p>This function is thread-safe.</p>
</desc>
</func>
+
<func>
- <name><ret>ErlDrvPort</ret><nametext>driver_create_port(ErlDrvPort port, ErlDrvTermData owner_pid, char* name, ErlDrvData drv_data)</nametext></name>
- <fsummary>Create a new port (driver instance)</fsummary>
+ <name><ret>int</ret><nametext>erl_drv_consume_timeslice(ErlDrvPort port,
+ int percent)</nametext></name>
+ <fsummary>Give the runtime system a hint about how much CPU time the
+ current driver callback call has consumed.</fsummary>
<desc>
- <p>This function creates a new port executing the same driver
- code as the port creating the new port.
- A short description of the arguments:</p>
+ <marker id="erl_drv_consume_timeslice"></marker>
+ <p>Gives the runtime system a hint about how much CPU time the current
+ driver callback call has consumed since the last hint, or since the
+ the start of the callback if no previous hint has been given.</p>
<taglist>
<tag><c>port</c></tag>
- <item>The port handle of the port (driver instance) creating
- the new port.</item>
- <tag><c>owner_pid</c></tag>
- <item>The process id of the Erlang process which will be
- owner of the new port. This process will be linked
- to the new port. You usually want to use
- <c>driver_caller(port)</c> as <c>owner_pid</c>.</item>
- <tag><c>name</c></tag>
- <item>The port name of the new port. You usually want to
- use the same port name as the driver name
- (<seealso marker="driver_entry#driver_name">driver_name</seealso>
- field of the
- <seealso marker="driver_entry">driver_entry</seealso>).</item>
- <tag><c>drv_data</c></tag>
- <item>The driver defined handle that will be passed in subsequent
- calls to driver call-backs. Note, that the
- <seealso marker="driver_entry#start">driver start call-back</seealso>
- will not be called for this new driver instance.
- The driver defined handle is normally created in the
- <seealso marker="driver_entry#start">driver start call-back</seealso>
- when a port is created via
- <seealso marker="erlang#open_port/2">erlang:open_port/2</seealso>. </item>
+ <item>Port handle of the executing port.</item>
+ <tag><c>percent</c></tag>
+ <item>Approximate consumed fraction of a full
+ time-slice in percent.</item>
</taglist>
- <p>The caller of <c>driver_create_port()</c> is allowed to
- manipulate the newly created port when <c>driver_create_port()</c>
- has returned. When
- <seealso marker="#smp_support">port level locking</seealso>
- is used, the creating port is, however, only allowed to
- manipulate the newly created port until the current driver
- call-back that was called by the emulator returns.</p>
+ <p>The time is specified as a fraction, in percent, of a full time-slice
+ that a port is allowed to execute before it is to surrender the
+ CPU to other runnable ports or processes. Valid range is
+ <c>[1, 100]</c>. The scheduling time-slice is not an exact entity,
+ but can usually be approximated to about 1 millisecond.</p>
+ <p>Notice that it is up to the runtime system to determine if and
+ how to use this information. Implementations on some platforms
+ can use other means to determine the consumed fraction
+ of the time-slice. Lengthy driver callbacks should, regardless of
+ this, frequently call this function to determine if it is allowed
+ to continue execution or not.</p>
+ <p>This function returns a non-zero value
+ if the time-slice has been exhausted, and zero if the callback is
+ allowed to continue execution. If a non-zero value is
+ returned, the driver callback is to return as soon as possible in
+ order for the port to be able to yield.</p>
+ <p>This function is provided to better support co-operative scheduling,
+ improve system responsiveness, and to make it easier to prevent
+ misbehaviors of the VM because of a port monopolizing a scheduler
+ thread. It can be used when dividing lengthy work into some repeated
+ driver callback calls, without the need to use threads.</p>
+ <p>See also the important <seealso marker="#WARNING">warning</seealso>
+ text at the beginning of this manual page.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ErlDrvTime</ret><nametext>erl_drv_convert_time_unit(ErlDrvTime
+ val, ErlDrvTimeUnit from, ErlDrvTimeUnit to)</nametext></name>
+ <fsummary>Convert time unit of a time value.</fsummary>
+ <desc>
+ <marker id="erl_drv_convert_time_unit"></marker>
+ <p>Converts the <c>val</c> value of time unit <c>from</c> to
+ the corresponding value of time unit <c>to</c>. The result is
+ rounded using the floor function.</p>
+ <taglist>
+ <tag><c>val</c></tag>
+ <item>Value to convert time unit for.</item>
+ <tag><c>from</c></tag>
+ <item>Time unit of <c>val</c>.</item>
+ <tag><c>to</c></tag>
+ <item>Time unit of returned value.</item>
+ </taglist>
+ <p>Returns <c>ERL_DRV_TIME_ERROR</c> if called with an invalid
+ time unit argument.</p>
+ <p>See also <seealso marker="#ErlDrvTime">
+ <c>ErlDrvTime</c></seealso> and
+ <seealso marker="#ErlDrvTimeUnit">
+ <c>ErlDrvTimeUnit</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>erl_drv_equal_tids(ErlDrvTid tid1,
+ ErlDrvTid tid2)</nametext></name>
+ <fsummary>Compare thread identifiers for equality.</fsummary>
+ <desc>
+ <marker id="erl_drv_equal_tids"></marker>
+ <p>Compares two thread identifiers, <c>tid1</c> and <c>tid2</c>,
+ for equality.</p>
+ <p>Returns <c>0</c> it they are not equal, and a value not equal to
+ <c>0</c> if they are equal.</p>
<note>
- <p>When
- <seealso marker="#smp_support">port level locking</seealso>
- is used, the creating port is only allowed to manipulate
- the newly created port until the current driver call-back
- returns.</p>
+ <p>A thread identifier can be reused very quickly after
+ a thread has terminated. Therefore, if a thread
+ corresponding to one of the involved thread identifiers
+ has terminated since the thread identifier was saved,
+ the result of <c>erl_drv_equal_tids</c> does possibly not give
+ the expected result.</p>
</note>
+ <p>This function is thread-safe.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>erl_drv_getenv(const char *key, char
+ *value, size_t *value_size)</nametext></name>
+ <fsummary>Get the value of an environment variable.</fsummary>
+ <desc>
+ <marker id="erl_drv_getenv"></marker>
+ <p>Retrieves the value of an environment variable.</p>
+ <taglist>
+ <tag><c>key</c></tag>
+ <item>A <c>NULL</c>-terminated string containing the
+ name of the environment variable.</item>
+ <tag><c>value</c></tag>
+ <item>A pointer to an output buffer.</item>
+ <tag><c>value_size</c></tag>
+ <item>A pointer to an integer. The integer is used both for
+ passing input and output sizes (see below).</item>
+ </taglist>
+ <p>When this function is called, <c>*value_size</c> is to contain the
+ size of the <c>value</c> buffer.</p>
+ <p>On success, <c>0</c> is returned,
+ the value of the environment variable has been written to
+ the <c>value</c> buffer, and <c>*value_size</c> contains the
+ string length (excluding the terminating <c>NULL</c> character) of
+ the value written to the <c>value</c> buffer.</p>
+ <p>On failure, that is, no such environment variable was found,
+ a value &lt; <c>0</c> is returned. When the size of the <c>value</c>
+ buffer is too small, a value &gt; <c>0</c> is returned and
+ <c>*value_size</c> has been set to the buffer size needed.</p>
+ <warning>
+ <p>Do <em>not</em> use libc's <c>getenv</c> or similar C library
+ interfaces from a driver.</p>
+ </warning>
+ <p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>void</ret><nametext>erl_drv_init_ack(ErlDrvPort port, ErlDrvData res)</nametext></name>
- <fsummary>Acknowledge the start of the port</fsummary>
+ <name><ret>void</ret><nametext>erl_drv_init_ack(ErlDrvPort port,
+ ErlDrvData res)</nametext></name>
+ <fsummary>Acknowledge the start of the port.</fsummary>
<desc>
<marker id="erl_drv_init_ack"></marker>
- <p>Arguments:</p>
+ <p>Acknowledges the start of the port.</p>
<taglist>
<tag><c>port</c></tag>
- <item>The port handle of the port (driver instance) creating
- doing the acknowledgment.
+ <item>The port handle of the port (driver instance)
+ doing the acknowledgment.
</item>
<tag><c>res</c></tag>
- <item>The result of the port initialization. This can be the same values
- as the return value of <seealso marker="driver_entry#start">start</seealso>,
- i.e any of the error codes or the ErlDrvData that is to be used for this
- port.
+ <item>The result of the port initialization. Can be the same
+ values as the return value of <seealso marker="driver_entry#start">
+ <c>start</c></seealso>, that is, any of the error codes or the
+ <c>ErlDrvData</c> that is to be used for this port.
</item>
</taglist>
- <p>
- When this function is called the initiating erlang:open_port call is
- returned as if the <seealso marker="driver_entry#start">start</seealso>
- function had just been called. It can only be used when the
- <seealso marker="driver_entry#driver_flags">ERL_DRV_FLAG_USE_INIT_ACK</seealso>
- flag has been set on the linked-in driver.
- </p>
+ <p>When this function is called the initiating <c>erlang:open_port</c>
+ call is returned as if the <seealso marker="driver_entry#start">
+ <c>start</c></seealso> function had just been called. It can only be
+ used when flag <seealso marker="driver_entry#driver_flags">
+ <c>ERL_DRV_FLAG_USE_INIT_ACK</c></seealso>
+ has been set on the linked-in driver.</p>
</desc>
</func>
<func>
- <name><ret>void</ret><nametext>erl_drv_set_os_pid(ErlDrvPort port, ErlDrvSInt pid)</nametext></name>
- <fsummary>Set the os_pid for the port</fsummary>
+ <name><ret>ErlDrvTime</ret>
+ <nametext>erl_drv_monotonic_time(ErlDrvTimeUnit time_unit)</nametext>
+ </name>
+ <fsummary>Get Erlang monotonic time.</fsummary>
<desc>
- <marker id="erl_drv_set_os_pid"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>port</c></tag>
- <item>The port handle of the port (driver instance) to set the pid on.
- </item>
- <tag><c>pid</c></tag>
- <item>The pid to set.</item>
- </taglist>
- <p>
- Set the os_pid seen when doing erlang:port_info/2 on this port.
- </p>
+ <marker id="erl_drv_monotonic_time"></marker>
+ <p>Returns <seealso marker="time_correction#Erlang_Monotonic_Time">
+ Erlang monotonic time</seealso>. Notice that negative values are
+ not uncommon.</p>
+ <p><c>time_unit</c> is time unit of returned value.</p>
+ <p>Returns <c>ERL_DRV_TIME_ERROR</c> if called with an invalid
+ time unit argument, or if called from a thread that is not a
+ scheduler thread.</p>
+ <p>See also <seealso marker="#ErlDrvTime"><c>ErlDrvTime</c></seealso>
+ and <seealso marker="#ErlDrvTimeUnit">
+ <c>ErlDrvTimeUnit</c></seealso>.</p>
</desc>
</func>
<func>
- <name><ret>int</ret><nametext>erl_drv_thread_create(char *name,
- ErlDrvTid *tid,
- void * (*func)(void *),
- void *arg,
- ErlDrvThreadOpts *opts)</nametext></name>
- <fsummary>Create a thread</fsummary>
+ <name><ret>ErlDrvMutex *</ret><nametext>erl_drv_mutex_create(char
+ *name)</nametext></name>
+ <fsummary>Create a mutex.</fsummary>
<desc>
- <marker id="erl_drv_thread_create"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>name</c></tag>
- <item>A string identifying the created thread. It will be used
- to identify the thread in planned future debug
- functionality.
- </item>
- <tag><c>tid</c></tag>
- <item>A pointer to a thread identifier variable.</item>
- <tag><c>func</c></tag>
- <item>A pointer to a function to execute in the created thread.</item>
- <tag><c>arg</c></tag>
- <item>A pointer to argument to the <c>func</c> function.</item>
- <tag><c>opts</c></tag>
- <item>A pointer to thread options to use or <c>NULL</c>.</item>
- </taglist>
- <p>This function creates a new thread. On success <c>0</c> is returned;
- otherwise, an <c>errno</c> value is returned to indicate the error.
- The newly created thread will begin executing in the function pointed
- to by <c>func</c>, and <c>func</c> will be passed <c>arg</c> as
- argument. When <c>erl_drv_thread_create()</c> returns the thread
- identifier of the newly created thread will be available in
- <c>*tid</c>. <c>opts</c> can be either a <c>NULL</c> pointer, or a
- pointer to an
- <seealso marker="#ErlDrvThreadOpts">ErlDrvThreadOpts</seealso>
- structure. If <c>opts</c> is a <c>NULL</c> pointer, default options
- will be used; otherwise, the passed options will be used.
- </p>
- <warning><p>You are not allowed to allocate the
- <seealso marker="#ErlDrvThreadOpts">ErlDrvThreadOpts</seealso>
- structure by yourself. It has to be allocated and
- initialized by
- <seealso marker="#erl_drv_thread_opts_create">erl_drv_thread_opts_create()</seealso>.
- </p></warning>
- <p>The created thread will terminate either when <c>func</c> returns
- or if
- <seealso marker="#erl_drv_thread_exit">erl_drv_thread_exit()</seealso>
- is called by the thread. The exit value of the thread is either
- returned from <c>func</c> or passed as argument to
- <seealso marker="#erl_drv_thread_exit">erl_drv_thread_exit()</seealso>.
- The driver creating the thread has the responsibility of joining the
- thread, via
- <seealso marker="#erl_drv_thread_join">erl_drv_thread_join()</seealso>,
- before the driver is unloaded. It is not possible to create
- "detached" threads, i.e., threads that don't need to be joined.
- </p>
- <warning><p>All created threads need to be joined by the driver before
- it is unloaded. If the driver fails to join all threads
- created before it is unloaded, the runtime system will
- most likely crash when the code of the driver is unloaded.
- </p></warning>
+ <marker id="erl_drv_mutex_create"></marker>
+ <p>Creates a mutex and returns a pointer to it.</p>
+ <p><c>name</c> is a string identifying the created mutex. It is used
+ to identify the mutex in planned future debug functionality.</p>
+ <p>Returns <c>NULL</c> on failure. The driver creating the mutex is
+ responsible for destroying it before the driver is unloaded.</p>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>ErlDrvThreadOpts *</ret><nametext>erl_drv_thread_opts_create(char *name)</nametext></name>
- <fsummary>Create thread options</fsummary>
+ <name><ret>void</ret><nametext>erl_drv_mutex_destroy(ErlDrvMutex
+ *mtx)</nametext></name>
+ <fsummary>Destroy a mutex.</fsummary>
<desc>
- <marker id="erl_drv_thread_opts_create"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>name</c></tag>
- <item>A string identifying the created thread options. It will be used
- to identify the thread options in planned future debug
- functionality.
- </item>
- </taglist>
- <p>This function allocates and initialize a thread option
- structure. On failure <c>NULL</c> is returned. A thread option
- structure is used for passing options to
- <seealso marker="#erl_drv_thread_create">erl_drv_thread_create()</seealso>.
- If the structure isn't modified before it is passed to
- <seealso marker="#erl_drv_thread_create">erl_drv_thread_create()</seealso>,
- the default values will be used.
- </p>
- <warning><p>You are not allowed to allocate the
- <seealso marker="#ErlDrvThreadOpts">ErlDrvThreadOpts</seealso>
- structure by yourself. It has to be allocated and
- initialized by <c>erl_drv_thread_opts_create()</c>.
- </p></warning>
+ <marker id="erl_drv_mutex_destroy"></marker>
+ <p>Destroys a mutex previously created by
+ <seealso marker="#erl_drv_mutex_create">
+ <c>erl_drv_mutex_create</c></seealso>.
+ The mutex must be in an unlocked state before it is destroyed.</p>
+ <p><c>mtx</c> is a pointer to a mutex to destroy.</p>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>void</ret><nametext>erl_drv_thread_opts_destroy(ErlDrvThreadOpts *opts)</nametext></name>
- <fsummary>Destroy thread options</fsummary>
+ <name><ret>void</ret><nametext>erl_drv_mutex_lock(ErlDrvMutex
+ *mtx)</nametext></name>
+ <fsummary>Lock a mutex.</fsummary>
<desc>
- <marker id="erl_drv_thread_opts_destroy"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>opts</c></tag>
- <item>A pointer to thread options to destroy.</item>
- </taglist>
- <p>This function destroys thread options previously created by
- <seealso marker="#erl_drv_thread_opts_create">erl_drv_thread_opts_create()</seealso>.
- </p>
+ <marker id="erl_drv_mutex_lock"></marker>
+ <p>Locks a mutex. The calling thread is blocked until the mutex has
+ been locked. A thread that has currently locked the mutex
+ <em>cannot</em> lock the same mutex again.</p>
+ <p><c>mtx</c> is a pointer to a mutex to lock.</p>
+ <warning>
+ <p>If you leave a mutex locked in an emulator thread
+ when you let the thread out of your control, you will
+ <em>very likely</em> deadlock the whole emulator.</p>
+ </warning>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>void</ret><nametext>erl_drv_thread_exit(void *exit_value)</nametext></name>
- <fsummary>Terminate calling thread</fsummary>
+ <name><ret>char *</ret><nametext>erl_drv_mutex_name(ErlDrvMutex
+ *mtx)</nametext></name>
+ <fsummary>Get name of driver mutex.</fsummary>
<desc>
- <marker id="erl_drv_thread_exit"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>exit_value</c></tag>
- <item>A pointer to an exit value or <c>NULL</c>.</item>
- </taglist>
- <p>This function terminates the calling thread with the exit
- value passed as argument. You are only allowed to terminate
- threads created with
- <seealso marker="#erl_drv_thread_create">erl_drv_thread_create()</seealso>.
- The exit value can later be retrieved by another thread via
- <seealso marker="#erl_drv_thread_join">erl_drv_thread_join()</seealso>.
- </p>
- <p>This function is thread-safe.</p>
+ <marker id="erl_drv_mutex_name"></marker>
+ <p>Returns a pointer to the mutex name.</p>
+ <p><c>mtx</c> is a pointer to an initialized mutex.</p>
+ <note>
+ <p>This function is intended for debugging purposes only.</p>
+ </note>
</desc>
</func>
<func>
- <name><ret>int</ret><nametext>erl_drv_thread_join(ErlDrvTid tid, void **exit_value)</nametext></name>
- <fsummary>Join with another thread</fsummary>
+ <name><ret>int</ret><nametext>erl_drv_mutex_trylock(ErlDrvMutex
+ *mtx)</nametext></name>
+ <fsummary>Try lock a mutex.</fsummary>
<desc>
- <marker id="erl_drv_thread_join"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>tid</c></tag>
- <item>The thread identifier of the thread to join.</item>
- <tag><c>exit_value</c></tag>
- <item>A pointer to a pointer to an exit value, or <c>NULL</c>.</item>
- </taglist>
- <p>This function joins the calling thread with another thread, i.e.,
- the calling thread is blocked until the thread identified by
- <c>tid</c> has terminated. On success <c>0</c> is returned;
- otherwise, an <c>errno</c> value is returned to indicate the error.
- A thread can only be joined once. The behavior of joining
- more than once is undefined, an emulator crash is likely. If
- <c>exit_value == NULL</c>, the exit value of the terminated thread
- will be ignored; otherwise, the exit value of the terminated thread
- will be stored at <c>*exit_value</c>.
- </p>
+ <marker id="erl_drv_mutex_trylock"></marker>
+ <p>Tries to lock a mutex. A thread that has currently locked the mutex
+ <em>cannot</em> try to lock the same mutex again.</p>
+ <p><c>mtx</c> is a pointer to a mutex to try to lock.</p>
+ <p>Returns <c>0</c> on success, otherwise <c>EBUSY</c>.</p>
+ <warning>
+ <p>If you leave a mutex locked in an emulator thread
+ when you let the thread out of your control, you will
+ <em>very likely</em> deadlock the whole emulator.</p>
+ </warning>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>ErlDrvTid</ret><nametext>erl_drv_thread_self(void)</nametext></name>
- <fsummary>Get the thread identifier of the current thread</fsummary>
+ <name><ret>void</ret><nametext>erl_drv_mutex_unlock(ErlDrvMutex
+ *mtx)</nametext></name>
+ <fsummary>Unlock a mutex.</fsummary>
<desc>
- <marker id="erl_drv_thread_self"></marker>
- <p>This function returns the thread identifier of the
- calling thread.
- </p>
+ <marker id="erl_drv_mutex_unlock"></marker>
+ <p>Unlocks a mutex. The mutex currently must be
+ locked by the calling thread.</p>
+ <p><c>mtx</c> is a pointer to a mutex to unlock.</p>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>int</ret><nametext>erl_drv_equal_tids(ErlDrvTid tid1, ErlDrvTid tid2)</nametext></name>
- <fsummary>Compare thread identifiers for equality</fsummary>
+ <name><ret>int</ret><nametext>erl_drv_output_term(ErlDrvTermData port,
+ ErlDrvTermData* term, int n)</nametext></name>
+ <fsummary>Send term data from driver to port owner.</fsummary>
<desc>
- <marker id="erl_drv_equal_tids"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>tid1</c></tag>
- <item>A thread identifier.</item>
- <tag><c>tid2</c></tag>
- <item>A thread identifier.</item>
- </taglist>
- <p>This function compares two thread identifiers for equality,
- and returns <c>0</c> it they aren't equal, and
- a value not equal to <c>0</c> if they are equal.</p>
- <note><p>A Thread identifier may be reused very quickly after
- a thread has terminated. Therefore, if a thread
- corresponding to one of the involved thread identifiers
- has terminated since the thread identifier was saved,
- the result of <c>erl_drv_equal_tids()</c> might not give
- the expected result.
- </p></note>
- <p>This function is thread-safe.</p>
+ <marker id="erl_drv_output_term"></marker>
+ <p>Sends data in the special driver term
+ format to the port owner process. This is a fast way to
+ deliver term data from a driver. It needs no binary
+ conversion, so the port owner process receives data as
+ normal Erlang terms. The <seealso marker="#erl_drv_send_term">
+ <c>erl_drv_send_term</c></seealso>
+ functions can be used for sending to any process
+ on the local node.</p>
+ <note>
+ <p>Parameter <c>port</c> is <em>not</em>
+ an ordinary port handle, but a port handle converted using
+ <seealso marker="#driver_mk_port">
+ <c>driver_mk_port</c></seealso>.</p>
+ </note>
+ <p>Parameter <c>term</c> points to an array of
+ <c>ErlDrvTermData</c> with <c>n</c> elements. This array
+ contains terms described in the driver term format. Every
+ term consists of 1-4 elements in the array. The
+ first term has a term type and then arguments.
+ Parameter <c>port</c> specifies the sending port.</p>
+ <p>Tuples, maps, and lists (except strings, see below)
+ are built in reverse polish notation, so that to build a
+ tuple, the elements are specified first, and then the tuple
+ term, with a count. Likewise for lists and maps.</p>
+ <list type="bulleted">
+ <item>
+ <p>A tuple must be specified with the number of elements. (The
+ elements precede the <c>ERL_DRV_TUPLE</c> term.)</p>
+ </item>
+ <item>
+ <p>A map must be specified with the number of key-value pairs
+ <c>N</c>. The key-value pairs must precede the <c>ERL_DRV_MAP</c>
+ in this order: <c>key1,value1,key2,value2,...,keyN,valueN</c>.
+ Duplicate keys are not allowed.</p>
+ </item>
+ <item>
+ <p>A list must be specified with the number of elements,
+ including the tail, which is the last term preceding
+ <c>ERL_DRV_LIST</c>.</p>
+ </item>
+ </list>
+ <p>The special term <c>ERL_DRV_STRING_CONS</c> is used to
+ "splice" in a string in a list, a string specified this way is
+ not a list in itself, but the elements are elements of the
+ surrounding list.</p>
+ <pre>
+Term type Arguments
+--------- ---------
+ERL_DRV_NIL
+ERL_DRV_ATOM ErlDrvTermData atom (from driver_mk_atom(char *string))
+ERL_DRV_INT ErlDrvSInt integer
+ERL_DRV_UINT ErlDrvUInt integer
+ERL_DRV_INT64 ErlDrvSInt64 *integer_ptr
+ERL_DRV_UINT64 ErlDrvUInt64 *integer_ptr
+ERL_DRV_PORT ErlDrvTermData port (from driver_mk_port(ErlDrvPort port))
+ERL_DRV_BINARY ErlDrvBinary *bin, ErlDrvUInt len, ErlDrvUInt offset
+ERL_DRV_BUF2BINARY char *buf, ErlDrvUInt len
+ERL_DRV_STRING char *str, int len
+ERL_DRV_TUPLE int sz
+ERL_DRV_LIST int sz
+ERL_DRV_PID ErlDrvTermData pid (from driver_connected(ErlDrvPort port)
+ or driver_caller(ErlDrvPort port))
+ERL_DRV_STRING_CONS char *str, int len
+ERL_DRV_FLOAT double *dbl
+ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len
+ERL_DRV_MAP int sz</pre>
+ <p>The unsigned integer data type <c>ErlDrvUInt</c> and the
+ signed integer data type <c>ErlDrvSInt</c> are 64 bits wide
+ on a 64-bit runtime system and 32 bits wide on a 32-bit
+ runtime system. They were introduced in ERTS 5.6
+ and replaced some of the <c>int</c> arguments in the list above.</p>
+ <p>The unsigned integer data type <c>ErlDrvUInt64</c> and the
+ signed integer data type <c>ErlDrvSInt64</c> are always 64 bits
+ wide. They were introduced in ERTS 5.7.4.</p>
+ <p>To build the tuple <c>{tcp, Port, [100 | Binary]}</c>, the
+ following call can be made.</p>
+ <code type="none"><![CDATA[
+ErlDrvBinary* bin = ...
+ErlDrvPort port = ...
+ErlDrvTermData spec[] = {
+ ERL_DRV_ATOM, driver_mk_atom("tcp"),
+ ERL_DRV_PORT, driver_mk_port(drvport),
+ ERL_DRV_INT, 100,
+ ERL_DRV_BINARY, bin, 50, 0,
+ ERL_DRV_LIST, 2,
+ ERL_DRV_TUPLE, 3,
+};
+erl_drv_output_term(driver_mk_port(drvport), spec, sizeof(spec) / sizeof(spec[0])); ]]></code>
+ <p>Here <c>bin</c> is a driver binary of length at least 50 and
+ <c>drvport</c> is a port handle. Notice that <c>ERL_DRV_LIST</c>
+ comes after the elements of the list, likewise
+ <c>ERL_DRV_TUPLE</c>.</p>
+ <p>The <c>ERL_DRV_STRING_CONS</c> term is a way to construct
+ strings. It works differently from how <c>ERL_DRV_STRING</c>
+ works. <c>ERL_DRV_STRING_CONS</c> builds a string list in
+ reverse order (as opposed to how <c>ERL_DRV_LIST</c>
+ works), concatenating the strings added to a list. The tail
+ must be specified before <c>ERL_DRV_STRING_CONS</c>.</p>
+ <p><c>ERL_DRV_STRING</c> constructs a string, and ends
+ it. (So it is the same as <c>ERL_DRV_NIL</c> followed by
+ <c>ERL_DRV_STRING_CONS</c>.)</p>
+ <code type="none"><![CDATA[
+/* to send [x, "abc", y] to the port: */
+ErlDrvTermData spec[] = {
+ ERL_DRV_ATOM, driver_mk_atom("x"),
+ ERL_DRV_STRING, (ErlDrvTermData)"abc", 3,
+ ERL_DRV_ATOM, driver_mk_atom("y"),
+ ERL_DRV_NIL,
+ ERL_DRV_LIST, 4
+};
+erl_drv_output_term(driver_mk_port(drvport), spec, sizeof(spec) / sizeof(spec[0])); ]]></code>
+ <code type="none"><![CDATA[
+/* to send "abc123" to the port: */
+ErlDrvTermData spec[] = {
+ ERL_DRV_NIL, /* with STRING_CONS, the tail comes first */
+ ERL_DRV_STRING_CONS, (ErlDrvTermData)"123", 3,
+ ERL_DRV_STRING_CONS, (ErlDrvTermData)"abc", 3,
+};
+erl_drv_output_term(driver_mk_port(drvport), spec, sizeof(spec) / sizeof(spec[0])); ]]></code>
+ <p>The <c>ERL_DRV_EXT2TERM</c> term type is used for passing a
+ term encoded with the
+ <seealso marker="erl_ext_dist">external format</seealso>,
+ that is, a term that has been encoded by
+ <seealso marker="erlang#term_to_binary/2">
+ <c>erlang:term_to_binary</c></seealso>,
+ <seealso marker="erl_interface:ei"><c>erl_interface:ei(3)</c></seealso>,
+ and so on.
+ For example, if <c>binp</c> is a pointer to an <c>ErlDrvBinary</c>
+ that contains term <c>{17, 4711}</c> encoded with the
+ <seealso marker="erl_ext_dist">external format</seealso>,
+ and you want to wrap it in a two-tuple with the tag <c>my_tag</c>,
+ that is, <c>{my_tag, {17, 4711}}</c>, you can do as follows:</p>
+ <code type="none"><![CDATA[
+ErlDrvTermData spec[] = {
+ ERL_DRV_ATOM, driver_mk_atom("my_tag"),
+ ERL_DRV_EXT2TERM, (ErlDrvTermData) binp->orig_bytes, binp->orig_size
+ ERL_DRV_TUPLE, 2,
+};
+erl_drv_output_term(driver_mk_port(drvport), spec, sizeof(spec) / sizeof(spec[0])); ]]></code>
+ <p>To build the map <c>#{key1 => 100, key2 => {200, 300}}</c>, the
+ following call can be made.</p>
+ <code type="none"><![CDATA[
+ErlDrvPort port = ...
+ErlDrvTermData spec[] = {
+ ERL_DRV_ATOM, driver_mk_atom("key1"),
+ ERL_DRV_INT, 100,
+ ERL_DRV_ATOM, driver_mk_atom("key2"),
+ ERL_DRV_INT, 200,
+ ERL_DRV_INT, 300,
+ ERL_DRV_TUPLE, 2,
+ ERL_DRV_MAP, 2
+};
+erl_drv_output_term(driver_mk_port(drvport), spec, sizeof(spec) / sizeof(spec[0])); ]]></code>
+ <p>If you want to pass a binary and do not already have the content
+ of the binary in an <c>ErlDrvBinary</c>, you can benefit from using
+ <c>ERL_DRV_BUF2BINARY</c> instead of creating an <c>ErlDrvBinary</c>
+ through <seealso marker="#driver_alloc_binary">
+ <c>driver_alloc_binary</c></seealso> and then pass the binary through
+ <c>ERL_DRV_BINARY</c>. The runtime system often allocates
+ binaries smarter if <c>ERL_DRV_BUF2BINARY</c> is used.
+ However, if the content of the binary to pass already resides in
+ an <c>ErlDrvBinary</c>, it is normally better to pass the binary using
+ <c>ERL_DRV_BINARY</c> and the <c>ErlDrvBinary</c> in question.</p>
+ <p>The <c>ERL_DRV_UINT</c>, <c>ERL_DRV_BUF2BINARY</c>, and
+ <c>ERL_DRV_EXT2TERM</c> term types were introduced in
+ ERTS 5.6.</p>
+ <p>This function is only thread-safe when the emulator with SMP
+ support is used.</p>
</desc>
</func>
<func>
- <name><ret>ErlDrvMutex *</ret><nametext>erl_drv_mutex_create(char *name)</nametext></name>
- <fsummary>Create a mutex</fsummary>
+ <name><ret>int</ret><nametext>erl_drv_putenv(const char *key, char
+ *value)</nametext></name>
+ <fsummary>Set the value of an environment variable.</fsummary>
<desc>
- <marker id="erl_drv_mutex_create"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>name</c></tag>
- <item>A string identifying the created mutex. It will be used
- to identify the mutex in planned future debug functionality.
- </item>
- </taglist>
- <p>This function creates a mutex and returns a pointer to it. On
- failure <c>NULL</c> is returned. The driver creating the mutex
- has the responsibility of destroying it before the driver is
- unloaded.
- </p>
+ <marker id="erl_drv_putenv"></marker>
+ <p>Sets the value of an environment variable.</p>
+ <p><c>key</c> is a <c>NULL</c>-terminated string containing the
+ name of the environment variable.</p>
+ <p><c>value</c> is a <c>NULL</c>-terminated string containing the
+ new value of the environment variable.</p>
+ <p>Returns <c>0</c> on success, otherwise a value <c>!= 0</c>.</p>
+ <note>
+ <p>The result of passing the empty string (<c>""</c>) as a value
+ is platform-dependent. On some platforms the variable value
+ is set to the empty string, on others the
+ environment variable is removed.</p>
+ </note>
+ <warning>
+ <p>Do <em>not</em> use libc's <c>putenv</c> or similar C library
+ interfaces from a driver.</p>
+ </warning>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>void</ret><nametext>erl_drv_mutex_destroy(ErlDrvMutex *mtx)</nametext></name>
- <fsummary>Destroy a mutex</fsummary>
+ <name><ret>ErlDrvRWLock *</ret><nametext>erl_drv_rwlock_create(char
+ *name)</nametext></name>
+ <fsummary>Create an rwlock.</fsummary>
<desc>
- <marker id="erl_drv_mutex_destroy"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>mtx</c></tag>
- <item>A pointer to a mutex to destroy.</item>
- </taglist>
- <p>This function destroys a mutex previously created by
- <seealso marker="#erl_drv_mutex_create">erl_drv_mutex_create()</seealso>.
- The mutex has to be in an unlocked state before being
- destroyed.
- </p>
+ <marker id="erl_drv_rwlock_create"></marker>
+ <p>Creates an rwlock and returns a pointer to it.</p>
+ <p><c>name</c> is a string identifying the created rwlock.
+ It is used to identify the rwlock in planned future
+ debug functionality.</p>
+ <p>Returns <c>NULL</c> on failure. The driver creating the rwlock
+ is responsible for destroying it before the driver is unloaded.</p>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>void</ret><nametext>erl_drv_mutex_lock(ErlDrvMutex *mtx)</nametext></name>
- <fsummary>Lock a mutex</fsummary>
+ <name><ret>void</ret><nametext>erl_drv_rwlock_destroy(ErlDrvRWLock
+ *rwlck)</nametext></name>
+ <fsummary>Destroy an rwlock.</fsummary>
<desc>
- <marker id="erl_drv_mutex_lock"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>mtx</c></tag>
- <item>A pointer to a mutex to lock.</item>
- </taglist>
- <p>This function locks a mutex. The calling thread will be
- blocked until the mutex has been locked. A thread
- which currently has locked the mutex may <em>not</em> lock
- the same mutex again.
- </p>
- <warning><p>If you leave a mutex locked in an emulator thread
- when you let the thread out of your control, you will
- <em>very likely</em> deadlock the whole emulator.
- </p></warning>
+ <marker id="erl_drv_rwlock_destroy"></marker>
+ <p>Destroys an rwlock previously created by
+ <seealso marker="#erl_drv_rwlock_create">
+ <c>erl_drv_rwlock_create</c></seealso>.
+ The rwlock must be in an unlocked state before it is destroyed.</p>
+ <p><c>rwlck</c> is a pointer to an rwlock to destroy.</p>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>int</ret><nametext>erl_drv_mutex_trylock(ErlDrvMutex *mtx)</nametext></name>
- <fsummary>Try lock a mutex</fsummary>
+ <name><ret>char *</ret><nametext>erl_drv_rwlock_name(ErlDrvRWLock
+ *rwlck)</nametext></name>
+ <fsummary>Get name of driver mutex.</fsummary>
<desc>
- <marker id="erl_drv_mutex_trylock"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>mtx</c></tag>
- <item>A pointer to a mutex to try to lock.</item>
- </taglist>
- <p>This function tries to lock a mutex. If successful <c>0</c>,
- is returned; otherwise, <c>EBUSY</c> is returned. A thread
- which currently has locked the mutex may <em>not</em> try to
- lock the same mutex again.
- </p>
- <warning><p>If you leave a mutex locked in an emulator thread
- when you let the thread out of your control, you will
- <em>very likely</em> deadlock the whole emulator.
- </p></warning>
- <p>This function is thread-safe.</p>
+ <marker id="erl_drv_rwlock_name"></marker>
+ <p>Returns a pointer to the name of the rwlock.</p>
+ <p><c>rwlck</c> is a pointer to an initialized rwlock.</p>
+ <note>
+ <p>This function is intended for debugging purposes only.</p>
+ </note>
</desc>
</func>
<func>
- <name><ret>void</ret><nametext>erl_drv_mutex_unlock(ErlDrvMutex *mtx)</nametext></name>
- <fsummary>Unlock a mutex</fsummary>
+ <name><ret>void</ret><nametext>erl_drv_rwlock_rlock(ErlDrvRWLock
+ *rwlck)</nametext></name>
+ <fsummary>Read lock an rwlock.</fsummary>
<desc>
- <marker id="erl_drv_mutex_unlock"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>mtx</c></tag>
- <item>A pointer to a mutex to unlock.</item>
- </taglist>
- <p>This function unlocks a mutex. The mutex currently has to be
- locked by the calling thread.
- </p>
+ <marker id="erl_drv_rwlock_rlock"></marker>
+ <p>Read locks an rwlock. The calling thread is
+ blocked until the rwlock has been read locked. A thread
+ that currently has read or read/write locked the rwlock
+ <em>cannot</em> lock the same rwlock again.</p>
+ <p><c>rwlck</c> is a pointer to the rwlock to read lock.</p>
+ <warning>
+ <p>If you leave an rwlock locked in an emulator thread
+ when you let the thread out of your control, you will
+ <em>very likely</em> deadlock the whole emulator.</p>
+ </warning>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>ErlDrvCond *</ret><nametext>erl_drv_cond_create(char *name)</nametext></name>
- <fsummary>Create a condition variable</fsummary>
+ <name><ret>void</ret><nametext>erl_drv_rwlock_runlock(ErlDrvRWLock
+ *rwlck)</nametext></name>
+ <fsummary>Read unlock an rwlock.</fsummary>
<desc>
- <marker id="erl_drv_cond_create"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>name</c></tag>
- <item>A string identifying the created condition variable. It
- will be used to identify the condition variable in planned
- future debug functionality.
- </item>
- </taglist>
- <p>This function creates a condition variable and returns a
- pointer to it. On failure <c>NULL</c> is returned. The driver
- creating the condition variable has the responsibility of
- destroying it before the driver is unloaded.</p>
+ <marker id="erl_drv_rwlock_runlock"></marker>
+ <p>Read unlocks an rwlock. The rwlock currently must
+ be read locked by the calling thread.</p>
+ <p><c>rwlck</c> is a pointer to an rwlock to read unlock.</p>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>void</ret><nametext>erl_drv_cond_destroy(ErlDrvCond *cnd)</nametext></name>
- <fsummary>Destroy a condition variable</fsummary>
+ <name><ret>void</ret><nametext>erl_drv_rwlock_rwlock(ErlDrvRWLock
+ *rwlck)</nametext></name>
+ <fsummary>Read/write lock an rwlock.</fsummary>
<desc>
- <marker id="erl_drv_cond_destroy"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>cnd</c></tag>
- <item>A pointer to a condition variable to destroy.</item>
- </taglist>
- <p>This function destroys a condition variable previously
- created by
- <seealso marker="#erl_drv_cond_create">erl_drv_cond_create()</seealso>.
- </p>
- <p>This function is thread-safe.</p>
+ <marker id="erl_drv_rwlock_rwlock"></marker>
+ <p>Read/write locks an rwlock. The calling thread
+ is blocked until the rwlock has been read/write locked.
+ A thread that currently has read or read/write locked the
+ rwlock <em>cannot</em> lock the same rwlock again.</p>
+ <p><c>rwlck</c> is a pointer to an rwlock to read/write lock.</p>
+ <warning>
+ <p>If you leave an rwlock locked in an emulator thread
+ when you let the thread out of your control, you will
+ <em>very likely</em> deadlock the whole emulator.</p>
+ </warning>
+ <p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>void</ret><nametext>erl_drv_cond_signal(ErlDrvCond *cnd)</nametext></name>
- <fsummary>Signal on a condition variable</fsummary>
+ <name><ret>void</ret><nametext>erl_drv_rwlock_rwunlock(ErlDrvRWLock
+ *rwlck)</nametext></name>
+ <fsummary>Read/write unlock an rwlock.</fsummary>
<desc>
- <marker id="erl_drv_cond_signal"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>cnd</c></tag>
- <item>A pointer to a condition variable to signal on.</item>
- </taglist>
- <p>This function signals on a condition variable. That is, if
- other threads are waiting on the condition variable being
- signaled, <em>one</em> of them will be woken.
- </p>
+ <marker id="erl_drv_rwlock_rwunlock"></marker>
+ <p>Read/write unlocks an rwlock. The rwlock currently must be
+ read/write locked by the calling thread.</p>
+ <p><c>rwlck</c> is a pointer to an rwlock to read/write unlock.</p>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>void</ret><nametext>erl_drv_cond_broadcast(ErlDrvCond *cnd)</nametext></name>
- <fsummary>Broadcast on a condition variable</fsummary>
+ <name><ret>int</ret><nametext>erl_drv_rwlock_tryrlock(ErlDrvRWLock
+ *rwlck)</nametext></name>
+ <fsummary>Try to read lock an rwlock.</fsummary>
<desc>
- <marker id="erl_drv_cond_broadcast"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>cnd</c></tag>
- <item>A pointer to a condition variable to broadcast on.</item>
- </taglist>
- <p>This function broadcasts on a condition variable. That is, if
- other threads are waiting on the condition variable being
- broadcast on, <em>all</em> of them will be woken.
- </p>
+ <marker id="erl_drv_rwlock_tryrlock"></marker>
+ <p>Tries to read lock an rwlock.</p>
+ <p><c>rwlck</c> is a pointer to an rwlock to try to read lock.</p>
+ <p>Returns <c>0</c> on success, otherwise <c>EBUSY</c>.
+ A thread that currently has read or read/write locked the
+ rwlock <em>cannot</em> try to lock the same rwlock again.</p>
+ <warning>
+ <p>If you leave an rwlock locked in an emulator thread
+ when you let the thread out of your control, you will
+ <em>very likely</em> deadlock the whole emulator.</p>
+ </warning>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>void</ret><nametext>erl_drv_cond_wait(ErlDrvCond *cnd, ErlDrvMutex *mtx)</nametext></name>
- <fsummary>Wait on a condition variable</fsummary>
+ <name><ret>int</ret><nametext>erl_drv_rwlock_tryrwlock(ErlDrvRWLock
+ *rwlck)</nametext></name>
+ <fsummary>Try to read/write lock an rwlock.</fsummary>
<desc>
- <marker id="erl_drv_cond_wait"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>cnd</c></tag>
- <item>A pointer to a condition variable to wait on.</item>
- <tag><c>mtx</c></tag>
- <item>A pointer to a mutex to unlock while waiting.</item>
- <tag><c></c></tag>
- <item></item>
- </taglist>
- <p>This function waits on a condition variable. The calling
- thread is blocked until another thread wakes it by signaling
- or broadcasting on the condition variable. Before the calling
- thread is blocked it unlocks the mutex passed as argument, and
- when the calling thread is woken it locks the same mutex before
- returning. That is, the mutex currently has to be locked by
- the calling thread when calling this function.
- </p>
- <note><p><c>erl_drv_cond_wait()</c> might return even though
- no-one has signaled or broadcast on the condition
- variable. Code calling <c>erl_drv_cond_wait()</c> should
- always be prepared for <c>erl_drv_cond_wait()</c>
- returning even though the condition that the thread was
- waiting for hasn't occurred. That is, when returning from
- <c>erl_drv_cond_wait()</c> always check if the condition
- has occurred, and if not call <c>erl_drv_cond_wait()</c>
- again.
- </p></note>
+ <marker id="erl_drv_rwlock_tryrwlock"></marker>
+ <p>Tries to read/write lock an rwlock.
+ A thread that currently has read or read/write locked the
+ rwlock <em>cannot</em> try to lock the same rwlock again.</p>
+ <p><c>rwlck</c>is pointer to an rwlock to try to read/write lock.</p>
+ <p>Returns <c>0</c> on success, otherwise <c>EBUSY</c>.</p>
+ <warning>
+ <p>If you leave an rwlock locked in an emulator thread
+ when you let the thread out of your control, you will
+ <em>very likely</em> deadlock the whole emulator.</p>
+ </warning>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>ErlDrvRWLock *</ret><nametext>erl_drv_rwlock_create(char *name)</nametext></name>
- <fsummary>Create an rwlock</fsummary>
+ <name><ret>int</ret><nametext>erl_drv_send_term(ErlDrvTermData port,
+ ErlDrvTermData receiver, ErlDrvTermData* term, int n)</nametext></name>
+ <fsummary>Send term data to other process than port owner process.
+ </fsummary>
<desc>
- <marker id="erl_drv_rwlock_create"></marker>
- <p>Arguments:</p>
+ <marker id="erl_drv_send_term"></marker>
+ <p>This function is the only way for a driver to send data to
+ <em>other</em> processes than the port owner process. Parameter
+ <c>receiver</c> specifies the process to receive the data.</p>
+ <note>
+ <p>Parameter <c>port</c> is <em>not</em> an ordinary port handle, but
+ a port handle converted using
+ <seealso marker="#driver_mk_port">
+ <c>driver_mk_port</c></seealso>.</p>
+ </note>
+ <p>Parameters <c>port</c>, <c>term</c>, and <c>n</c> work as in
+ <seealso marker="#erl_drv_output_term">
+ <c>erl_drv_output_term</c></seealso>.</p>
+ <p>This function is only thread-safe when the emulator with SMP
+ support is used.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret><nametext>erl_drv_set_os_pid(ErlDrvPort port,
+ ErlDrvSInt pid)</nametext></name>
+ <fsummary>Set the os_pid for the port.</fsummary>
+ <desc>
+ <marker id="erl_drv_set_os_pid"></marker>
+ <p>Sets the <c>os_pid</c> seen when doing
+ <seealso marker="erlang:port_info/2">
+ <c>erlang:port_info/2</c></seealso> on this port.</p>
+ <p><c>port</c> is the port handle of the port (driver instance) to set
+ the pid on. <c>pid</c>is the pid to set.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>erl_drv_thread_create(char *name, ErlDrvTid
+ *tid, void * (*func)(void *), void *arg, ErlDrvThreadOpts
+ *opts)</nametext></name>
+ <fsummary>Create a thread.</fsummary>
+ <desc>
+ <marker id="erl_drv_thread_create"></marker>
+ <p>Creates a new thread.</p>
<taglist>
<tag><c>name</c></tag>
- <item>A string identifying the created rwlock. It will be used to
- identify the rwlock in planned future debug functionality.
- </item>
+ <item>A string identifying the created thread. It is used to
+ identify the thread in planned future debug functionality.
+ </item>
+ <tag><c>tid</c></tag>
+ <item>A pointer to a thread identifier variable.</item>
+ <tag><c>func</c></tag>
+ <item>A pointer to a function to execute in the created thread.</item>
+ <tag><c>arg</c></tag>
+ <item>A pointer to argument to the <c>func</c> function.</item>
+ <tag><c>opts</c></tag>
+ <item>A pointer to thread options to use or <c>NULL</c>.</item>
</taglist>
- <p>This function creates an rwlock and returns a pointer to it. On
- failure <c>NULL</c> is returned. The driver creating the rwlock
- has the responsibility of destroying it before the driver is
- unloaded.
- </p>
+ <p>Returns <c>0</c> on success,
+ otherwise an <c>errno</c> value is returned to indicate the error.
+ The newly created thread begins executing in the function pointed
+ to by <c>func</c>, and <c>func</c> is passed <c>arg</c> as
+ argument. When <c>erl_drv_thread_create</c> returns, the thread
+ identifier of the newly created thread is available in
+ <c>*tid</c>. <c>opts</c> can be either a <c>NULL</c> pointer, or a
+ pointer to an
+ <seealso marker="#ErlDrvThreadOpts"><c>ErlDrvThreadOpts</c></seealso>
+ structure. If <c>opts</c> is a <c>NULL</c> pointer, default options
+ are used, otherwise the passed options are used.</p>
+ <warning>
+ <p>You are not allowed to allocate the
+ <seealso marker="#ErlDrvThreadOpts">
+ <c>ErlDrvThreadOpts</c></seealso> structure by yourself.
+ It must be allocated and initialized by
+ <seealso marker="#erl_drv_thread_opts_create">
+ <c>erl_drv_thread_opts_create</c></seealso>.</p>
+ </warning>
+ <p>The created thread terminates either when <c>func</c> returns or if
+ <seealso marker="#erl_drv_thread_exit">
+ <c>erl_drv_thread_exit</c></seealso>
+ is called by the thread. The exit value of the thread is either
+ returned from <c>func</c> or passed as argument to
+ <seealso marker="#erl_drv_thread_exit">
+ <c>erl_drv_thread_exit</c></seealso>.
+ The driver creating the thread is responsible for joining the
+ thread, through <seealso marker="#erl_drv_thread_join">
+ <c>erl_drv_thread_join</c></seealso>,
+ before the driver is unloaded. "Detached" threads cannot be created,
+ that is, threads that do not need to be joined.</p>
+ <warning>
+ <p>All created threads must be joined by the driver before
+ it is unloaded. If the driver fails to join all threads
+ created before it is unloaded, the runtime system
+ most likely crashes when the driver code is unloaded.</p>
+ </warning>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>void</ret><nametext>erl_drv_rwlock_destroy(ErlDrvRWLock *rwlck)</nametext></name>
- <fsummary>Destroy an rwlock</fsummary>
+ <name><ret>void</ret><nametext>erl_drv_thread_exit(void
+ *exit_value)</nametext></name>
+ <fsummary>Terminate calling thread.</fsummary>
<desc>
- <marker id="erl_drv_rwlock_destroy"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>rwlck</c></tag>
- <item>A pointer to an rwlock to destroy.</item>
- </taglist>
- <p>This function destroys an rwlock previously created by
- <seealso marker="#erl_drv_rwlock_create">erl_drv_rwlock_create()</seealso>.
- The rwlock has to be in an unlocked state before being destroyed.
- </p>
+ <marker id="erl_drv_thread_exit"></marker>
+ <p>Terminates the calling thread with the exit value passed as
+ argument. <c>exit_value</c> is a pointer to an exit value or
+ <c>NULL</c>.</p>
+ <p>You are only allowed to terminate threads created with
+ <seealso marker="#erl_drv_thread_create">
+ <c>erl_drv_thread_create</c></seealso>.</p>
+ <p>The exit value can later be retrieved by another thread through
+ <seealso marker="#erl_drv_thread_join">
+ <c>erl_drv_thread_join</c></seealso>.</p>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>void</ret><nametext>erl_drv_rwlock_rlock(ErlDrvRWLock *rwlck)</nametext></name>
- <fsummary>Read lock an rwlock</fsummary>
+ <name><ret>int</ret><nametext>erl_drv_thread_join(ErlDrvTid tid, void
+ **exit_value)</nametext></name>
+ <fsummary>Join with another thread.</fsummary>
<desc>
- <marker id="erl_drv_rwlock_rlock"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>rwlck</c></tag>
- <item>A pointer to an rwlock to read lock.</item>
- </taglist>
- <p>This function read locks an rwlock. The calling thread will be
- blocked until the rwlock has been read locked. A thread
- which currently has read or read/write locked the rwlock may
- <em>not</em> lock the same rwlock again.
- </p>
- <warning><p>If you leave an rwlock locked in an emulator thread
- when you let the thread out of your control, you will
- <em>very likely</em> deadlock the whole emulator.
- </p></warning>
+ <marker id="erl_drv_thread_join"></marker>
+ <p>Joins the calling thread with another thread, that is,
+ the calling thread is blocked until the thread identified by
+ <c>tid</c> has terminated.</p>
+ <p><c>tid</c> is the thread identifier of the thread to join.
+ <c>exit_value</c> is a pointer to a pointer to an exit value,
+ or <c>NULL</c>.</p>
+ <p>Returns <c>0</c> on success, otherwise an <c>errno</c>
+ value is returned to indicate the error.</p>
+ <p>A thread can only be joined once. The behavior of joining
+ more than once is undefined, an emulator crash is likely. If
+ <c>exit_value == NULL</c>, the exit value of the terminated thread
+ is ignored, otherwise the exit value of the terminated thread
+ is stored at <c>*exit_value</c>.</p>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>int</ret><nametext>erl_drv_rwlock_tryrlock(ErlDrvRWLock *rwlck)</nametext></name>
- <fsummary>Try to read lock an rwlock</fsummary>
+ <name><ret>char *</ret><nametext>erl_drv_thread_name(ErlDrvTid
+ tid)</nametext></name>
+ <fsummary>Get name of driver mutex.</fsummary>
<desc>
- <marker id="erl_drv_rwlock_tryrlock"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>rwlck</c></tag>
- <item>A pointer to an rwlock to try to read lock.</item>
- </taglist>
- <p>This function tries to read lock an rwlock. If successful
- <c>0</c>, is returned; otherwise, <c>EBUSY</c> is returned.
- A thread which currently has read or read/write locked the
- rwlock may <em>not</em> try to lock the same rwlock again.
- </p>
- <warning><p>If you leave an rwlock locked in an emulator thread
- when you let the thread out of your control, you will
- <em>very likely</em> deadlock the whole emulator.
- </p></warning>
- <p>This function is thread-safe.</p>
+ <marker id="erl_drv_rwlock_name"></marker>
+ <p>Returns a pointer to the name of the thread.</p>
+ <p><c>tid</c> is a thread identifier.</p>
+ <note>
+ <p>This function is intended for debugging purposes only.</p>
+ </note>
</desc>
</func>
<func>
- <name><ret>void</ret><nametext>erl_drv_rwlock_runlock(ErlDrvRWLock *rwlck)</nametext></name>
- <fsummary>Read unlock an rwlock</fsummary>
+ <name><ret>ErlDrvThreadOpts *</ret>
+ <nametext>erl_drv_thread_opts_create(char *name)</nametext></name>
+ <fsummary>Create thread options.</fsummary>
<desc>
- <marker id="erl_drv_rwlock_runlock"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>rwlck</c></tag>
- <item>A pointer to an rwlock to read unlock.</item>
- </taglist>
- <p>This function read unlocks an rwlock. The rwlock currently
- has to be read locked by the calling thread.
- </p>
+ <marker id="erl_drv_thread_opts_create"></marker>
+ <p>Allocates and initializes a thread option structure.</p>
+ <p><c>name</c> is a string identifying the created thread options.
+ It is used to identify the thread options in planned future debug
+ functionality.</p>
+ <p>Returns <c>NULL</c> on failure. A thread option
+ structure is used for passing options to
+ <seealso marker="#erl_drv_thread_create">
+ <c>erl_drv_thread_create</c></seealso>.
+ If the structure is not modified before it is passed to
+ <seealso marker="#erl_drv_thread_create">
+ <c>erl_drv_thread_create</c></seealso>,
+ the default values are used.</p>
+ <warning>
+ <p>You are not allowed to allocate the
+ <seealso marker="#ErlDrvThreadOpts">
+ <c>ErlDrvThreadOpts</c></seealso>
+ structure by yourself. It must be allocated and initialized by
+ <c>erl_drv_thread_opts_create</c>.</p>
+ </warning>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>void</ret><nametext>erl_drv_rwlock_rwlock(ErlDrvRWLock *rwlck)</nametext></name>
- <fsummary>Read/Write lock an rwlock</fsummary>
+ <name><ret>void</ret>
+ <nametext>erl_drv_thread_opts_destroy(ErlDrvThreadOpts *opts)</nametext>
+ </name>
+ <fsummary>Destroy thread options.</fsummary>
<desc>
- <marker id="erl_drv_rwlock_rwlock"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>rwlck</c></tag>
- <item>A pointer to an rwlock to read/write lock.</item>
- </taglist>
- <p>This function read/write locks an rwlock. The calling thread
- will be blocked until the rwlock has been read/write locked.
- A thread which currently has read or read/write locked the
- rwlock may <em>not</em> lock the same rwlock again.
- </p>
- <warning><p>If you leave an rwlock locked in an emulator thread
- when you let the thread out of your control, you will
- <em>very likely</em> deadlock the whole emulator.
- </p></warning>
+ <marker id="erl_drv_thread_opts_destroy"></marker>
+ <p>Destroys thread options previously created by
+ <seealso marker="#erl_drv_thread_opts_create">
+ <c>erl_drv_thread_opts_create</c></seealso>.</p>
+ <p><c>opts</c> is a pointer to thread options to destroy.</p>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>int</ret><nametext>erl_drv_rwlock_tryrwlock(ErlDrvRWLock *rwlck)</nametext></name>
- <fsummary>Try to read/write lock an rwlock</fsummary>
+ <name><ret>ErlDrvTid</ret>
+ <nametext>erl_drv_thread_self(void)</nametext></name>
+ <fsummary>Get the thread identifier of the current thread.</fsummary>
<desc>
- <marker id="erl_drv_rwlock_tryrwlock"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>rwlck</c></tag>
- <item>A pointer to an rwlock to try to read/write lock.</item>
- </taglist>
- <p>This function tries to read/write lock an rwlock. If successful
- <c>0</c>, is returned; otherwise, <c>EBUSY</c> is returned.
- A thread which currently has read or read/write locked the
- rwlock may <em>not</em> try to lock the same rwlock again.
- </p>
- <warning><p>If you leave an rwlock locked in an emulator thread
- when you let the thread out of your control, you will
- <em>very likely</em> deadlock the whole emulator.
- </p></warning>
+ <marker id="erl_drv_thread_self"></marker>
+ <p>Returns the thread identifier of the calling thread.</p>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>void</ret><nametext>erl_drv_rwlock_rwunlock(ErlDrvRWLock *rwlck)</nametext></name>
- <fsummary>Read/Write unlock an rwlock</fsummary>
+ <name><ret>ErlDrvTime</ret><nametext>erl_drv_time_offset(ErlDrvTimeUnit
+ time_unit)</nametext></name>
+ <fsummary>Get current time offset.</fsummary>
<desc>
- <marker id="erl_drv_rwlock_rwunlock"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>rwlck</c></tag>
- <item>A pointer to an rwlock to read/write unlock.</item>
- </taglist>
- <p>This function read/write unlocks an rwlock. The rwlock
- currently has to be read/write locked by the calling thread.
- </p>
+ <marker id="erl_drv_time_offset"></marker>
+ <p>Returns the current time offset between
+ <seealso marker="time_correction#Erlang_Monotonic_Time">
+ Erlang monotonic time</seealso> and
+ <seealso marker="time_correction#Erlang_System_Time">
+ Erlang system time</seealso>
+ converted into the <c>time_unit</c> passed as argument.</p>
+ <p><c>time_unit</c> is time unit of returned value.</p>
+ <p>Returns <c>ERL_DRV_TIME_ERROR</c> if called with an invalid
+ time unit argument, or if called from a thread that is not a
+ scheduler thread.</p>
+ <p>See also <seealso marker="#ErlDrvTime">
+ <c>ErlDrvTime</c></seealso> and
+ <seealso marker="#ErlDrvTimeUnit">
+ <c>ErlDrvTimeUnit</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void *</ret><nametext>erl_drv_tsd_get(ErlDrvTSDKey
+ key)</nametext></name>
+ <fsummary>Get thread-specific data.</fsummary>
+ <desc>
+ <marker id="erl_drv_tsd_get"></marker>
+ <p>Returns the thread-specific data
+ associated with <c>key</c> for the calling thread.</p>
+ <p><c>key</c> is a thread-specific data key.</p>
+ <p>Returns <c>NULL</c> if no data has been associated
+ with <c>key</c> for the calling thread.</p>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>int</ret><nametext>erl_drv_tsd_key_create(char *name, ErlDrvTSDKey *key)</nametext></name>
- <fsummary>Create a thread specific data key</fsummary>
+ <name><ret>int</ret><nametext>erl_drv_tsd_key_create(char *name,
+ ErlDrvTSDKey *key)</nametext></name>
+ <fsummary>Create a thread-specific data key.</fsummary>
<desc>
<marker id="erl_drv_tsd_key_create"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>name</c></tag>
- <item>A string identifying the created key. It will be used
- to identify the key in planned future debug
- functionality.
- </item>
- <tag><c>key</c></tag>
- <item>A pointer to a thread specific data key variable.</item>
- </taglist>
- <p>This function creates a thread specific data key. On success
- <c>0</c> is returned; otherwise, an <c>errno</c> value is returned
- to indicate the error. The driver creating the key has the
- responsibility of destroying it before the driver is unloaded.
- </p>
+ <p>Creates a thread-specific data key.</p>
+ <p><c>name</c> is a string identifying the created key. It is used
+ to identify the key in planned future debug functionality.</p>
+ <p><c>key</c> is a pointer to a thread-specific data key variable.</p>
+ <p>Returns <c>0</c> on success, otherwise an <c>errno</c> value is
+ returned to indicate the error. The driver creating the key is
+ responsible for destroying it before the driver is unloaded.</p>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>void</ret><nametext>erl_drv_tsd_key_destroy(ErlDrvTSDKey key)</nametext></name>
- <fsummary>Destroy a thread specific data key</fsummary>
+ <name><ret>void</ret><nametext>erl_drv_tsd_key_destroy(ErlDrvTSDKey
+ key)</nametext></name>
+ <fsummary>Destroy a thread-specific data key.</fsummary>
<desc>
<marker id="erl_drv_tsd_key_destroy"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>key</c></tag>
- <item>A thread specific data key to destroy.</item>
- </taglist>
- <p>This function destroys a thread specific data key
- previously created by
- <seealso marker="#erl_drv_tsd_key_create">erl_drv_tsd_key_create()</seealso>.
- All thread specific data using this key in all threads
- have to be cleared (see
- <seealso marker="#erl_drv_tsd_set">erl_drv_tsd_set()</seealso>)
- prior to the call to <c>erl_drv_tsd_key_destroy()</c>.
- </p>
- <warning><p>A destroyed key is very likely to be reused soon.
- Therefore, if you fail to clear the thread specific
- data using this key in a thread prior to destroying
- the key, you will <em>very likely</em> get unexpected
- errors in other parts of the system.
- </p></warning>
+ <p>Destroys a thread-specific data key previously created by
+ <seealso marker="#erl_drv_tsd_key_create">
+ <c>erl_drv_tsd_key_create</c></seealso>.
+ All thread-specific data using this key in all threads
+ must be cleared (see <seealso marker="#erl_drv_tsd_set">
+ <c>erl_drv_tsd_set</c></seealso>)
+ before the call to <c>erl_drv_tsd_key_destroy</c>.</p>
+ <p><c>key</c> is a thread-specific data key to destroy.</p>
+ <warning>
+ <p>A destroyed key is very likely to be reused soon.
+ Therefore, if you fail to clear the thread-specific
+ data using this key in a thread before destroying
+ the key, you will <em>very likely</em> get unexpected
+ errors in other parts of the system.</p>
+ </warning>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>void</ret><nametext>erl_drv_tsd_set(ErlDrvTSDKey key, void *data)</nametext></name>
- <fsummary>Set thread specific data</fsummary>
+ <name><ret>void</ret><nametext>erl_drv_tsd_set(ErlDrvTSDKey key, void
+ *data)</nametext></name>
+ <fsummary>Set thread-specific data.</fsummary>
<desc>
<marker id="erl_drv_tsd_set"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>key</c></tag>
- <item>A thread specific data key.</item>
- <tag><c>data</c></tag>
- <item>A pointer to data to associate with <c>key</c>
- in calling thread.
- </item>
- </taglist>
- <p>This function sets thread specific data associated with
- <c>key</c> for the calling thread. You are only allowed to set
- thread specific data for threads while they are fully under your
- control. For example, if you set thread specific data in a thread
- calling a driver call-back function, it has to be cleared, i.e.
- set to <c>NULL</c>, before returning from the driver call-back
- function.
- </p>
- <warning><p>If you fail to clear thread specific data in an
- emulator thread before letting it out of your control,
- you might not ever be able to clear this data with
- later unexpected errors in other parts of the system as
- a result.
- </p></warning>
+ <p>Sets thread-specific data associated with
+ <c>key</c> for the calling thread. You are only allowed to set
+ thread-specific data for threads while they are fully under your
+ control. For example, if you set thread-specific data in a thread
+ calling a driver callback function, it must be cleared, that is,
+ set to <c>NULL</c>, before returning from the driver callback
+ function.</p>
+ <p><c>key</c> is a thread-specific data key.</p>
+ <p><c>data</c> is a pointer to data to associate with <c>key</c>
+ in the calling thread.</p>
+ <warning>
+ <p>If you fail to clear thread-specific data in an
+ emulator thread before letting it out of your control,
+ you might never be able to clear this data with
+ later unexpected errors in other parts of the system as
+ a result.</p>
+ </warning>
<p>This function is thread-safe.</p>
</desc>
</func>
<func>
- <name><ret>void *</ret><nametext>erl_drv_tsd_get(ErlDrvTSDKey key)</nametext></name>
- <fsummary>Get thread specific data</fsummary>
+ <name><ret>char *</ret><nametext>erl_errno_id(int error)</nametext></name>
+ <fsummary>Get Erlang error atom name from error number.</fsummary>
<desc>
- <marker id="erl_drv_tsd_get"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>key</c></tag>
- <item>A thread specific data key.</item>
- </taglist>
- <p>This function returns the thread specific data
- associated with <c>key</c> for the calling thread.
- If no data has been associated with <c>key</c> for
- the calling thread, <c>NULL</c> is returned.
- </p>
- <p>This function is thread-safe.</p>
+ <marker id="erl_errno_id"></marker>
+ <p>Returns the atom name of the Erlang error,
+ given the error number in <c>error</c>. The error atoms are
+ <c>einval</c>, <c>enoent</c>, and so on. It can be used to make
+ error terms from the driver.</p>
</desc>
</func>
<func>
- <name><ret>int</ret><nametext>erl_drv_putenv(const char *key, char *value)</nametext></name>
- <fsummary>Set the value of an environment variable</fsummary>
+ <name><ret>int</ret><nametext>remove_driver_entry(ErlDrvEntry
+ *de)</nametext></name>
+ <fsummary>Remove a driver entry.</fsummary>
<desc>
- <marker id="erl_drv_putenv"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>key</c></tag>
- <item>A null terminated string containing the
- name of the environment variable.</item>
- <tag><c>value</c></tag>
- <item>A null terminated string containing the
- new value of the environment variable.</item>
- </taglist>
- <p>This function sets the value of an environment variable.
- It returns <c>0</c> on success, and a value <c>!= 0</c> on
- failure.
- </p>
- <note><p>The result of passing the empty string ("") as a value
- is platform dependent. On some platforms the value of the
- variable is set to the empty string, on others, the
- environment variable is removed.</p>
- </note>
- <warning><p>Do <em>not</em> use libc's <c>putenv</c> or similar
- C library interfaces from a driver.
- </p></warning>
- <p>This function is thread-safe.</p>
+ <marker id="remove_driver_entry"></marker>
+ <p>Removes a driver entry <c>de</c> previously added with
+ <seealso marker="#add_driver_entry">
+ <c>add_driver_entry</c></seealso>.</p>
+ <p>Driver entries added by the <c>erl_ddll</c> Erlang interface
+ cannot be removed by using this interface.</p>
</desc>
</func>
+
<func>
- <name><ret>int</ret><nametext>erl_drv_getenv(const char *key, char *value, size_t *value_size)</nametext></name>
- <fsummary>Get the value of an environment variable</fsummary>
+ <name><ret>void</ret><nametext>set_busy_port(ErlDrvPort port, int
+ on)</nametext></name>
+ <fsummary>Signal or unsignal port as busy.</fsummary>
<desc>
- <marker id="erl_drv_getenv"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>key</c></tag>
- <item>A null terminated string containing the
- name of the environment variable.</item>
- <tag><c>value</c></tag>
- <item>A pointer to an output buffer.</item>
- <tag><c>value_size</c></tag>
- <item>A pointer to an integer. The integer is both used for
- passing input and output sizes (see below).
- </item>
- </taglist>
- <p>This function retrieves the value of an environment variable.
- When called, <c>*value_size</c> should contain the size of
- the <c>value</c> buffer. On success <c>0</c> is returned,
- the value of the environment variable has been written to
- the <c>value</c> buffer, and <c>*value_size</c> contains the
- string length (excluding the terminating null character) of
- the value written to the <c>value</c> buffer. On failure,
- i.e., no such environment variable was found, a value less than
- <c>0</c> is returned. When the size of the <c>value</c>
- buffer is too small, a value greater than <c>0</c> is returned
- and <c>*value_size</c> has been set to the buffer size needed.
- </p>
- <warning><p>Do <em>not</em> use libc's <c>getenv</c> or similar
- C library interfaces from a driver.
- </p></warning>
- <p>This function is thread-safe.</p>
+ <marker id="set_busy_port"></marker>
+ <p>Sets and unsets the busy state of the port. If
+ <c>on</c> is non-zero, the port is set to busy. If it is zero,
+ the port is set to not busy. You typically want to combine
+ this feature with the <seealso marker="#erl_drv_busy_msgq_limits">
+ busy port message queue</seealso> functionality.</p>
+ <p>Processes sending command data to the port are suspended
+ if either the port or the port message queue
+ is busy. Suspended processes are resumed when neither the
+ port or the port message queue is busy. Command data
+ is in this context data passed to the port using either
+ <c>Port ! {Owner, {command, Data}}</c> or
+ <c>port_command/[2,3]</c>.</p>
+ <p>If the <seealso marker="driver_entry#driver_flags">
+ <![CDATA[ERL_DRV_FLAG_SOFT_BUSY]]></seealso> has been set in the
+ <seealso marker="driver_entry"><c>driver_entry</c></seealso>,
+ data can be forced into the driver through
+ <seealso marker="erlang#port_command/3">
+ <c>erlang:port_command(Port, Data, [force])</c></seealso>
+ even if the driver has signaled that it is busy.</p>
+ <p>For information about busy port message queue functionality, see
+ <seealso marker="#erl_drv_busy_msgq_limits">
+ <c>erl_drv_busy_msgq_limits</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret><nametext>set_port_control_flags(ErlDrvPort port,
+ int flags)</nametext></name>
+ <fsummary>Set flags on how to handle control entry function.</fsummary>
+ <desc>
+ <marker id="set_port_control_flags"></marker>
+ <p>Sets flags for how the <seealso marker="driver_entry#control">
+ <c>control</c></seealso> driver entry
+ function will return data to the port owner process.
+ (The <c>control</c> function is called from
+ <seealso marker="erlang:port_control/3">
+ <c>erlang:port_control/3</c></seealso>.)</p>
+ <p>Currently there are only two meaningful values for
+ <c>flags</c>: <c>0</c> means that data is returned in a list,
+ and <c>PORT_CONTROL_FLAG_BINARY</c> means data is returned as
+ a binary from <c>control</c>.</p>
</desc>
</func>
- <func>
- <name><ret>int</ret><nametext>erl_drv_consume_timeslice(ErlDrvPort port, int percent)</nametext></name>
- <fsummary>Give the runtime system a hint about how much CPU time the
- current driver callback call has consumed</fsummary>
- <desc>
- <marker id="erl_drv_consume_timeslice"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>port</c></tag>
- <item>Port handle of the executing port.</item>
- <tag><c>percent</c></tag>
- <item>Approximate consumed fraction of a full
- time-slice in percent.</item>
- </taglist>
- <p>Give the runtime system a hint about how much CPU time the
- current driver callback call has consumed since last hint, or
- since the start of the callback if no previous hint has been given.
- The time is given as a fraction, in percent, of a full time-slice
- that a port is allowed to execute before it should surrender the
- CPU to other runnable ports or processes. Valid range is
- <c>[1, 100]</c>. The scheduling time-slice is not an exact entity,
- but can usually be approximated to about 1 millisecond.</p>
-
- <p>Note that it is up to the runtime system to determine if and
- how to use this information. Implementations on some platforms
- may use other means in order to determine the consumed fraction
- of the time-slice. Lengthy driver callbacks should regardless of
- this frequently call the <c>erl_drv_consume_timeslice()</c>
- function in order to determine if it is allowed to continue
- execution or not.</p>
-
- <p><c>erl_drv_consume_timeslice()</c> returns a non-zero value
- if the time-slice has been exhausted, and zero if the callback is
- allowed to continue execution. If a non-zero value is
- returned the driver callback should return as soon as possible in
- order for the port to be able to yield.</p>
-
- <p>This function is provided to better support co-operative scheduling,
- improve system responsiveness, and to make it easier to prevent
- misbehaviors of the VM due to a port monopolizing a scheduler thread.
- It can be used when dividing length work into a number of repeated
- driver callback calls without the need to use threads. Also see the
- important <seealso marker="#WARNING">warning</seealso> text at the
- beginning of this document.</p>
- </desc>
- </func>
-
- <func>
- <name><ret>char *</ret><nametext>erl_drv_cond_name(ErlDrvCond *cnd)</nametext></name>
- <fsummary>Get name of driver mutex.</fsummary>
- <desc>
- <marker id="erl_drv_cnd_name"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>cnd</c></tag>
- <item>A pointer to an initialized condition.</item>
- </taglist>
- <p>
- Returns a pointer to the name of the condition.
- </p>
- <note>
- <p>This function is intended for debugging purposes only.</p>
- </note>
- </desc>
- </func>
-
- <func>
- <name><ret>char *</ret><nametext>erl_drv_mutex_name(ErlDrvMutex *mtx)</nametext></name>
- <fsummary>Get name of driver mutex.</fsummary>
- <desc>
- <marker id="erl_drv_mutex_name"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>mtx</c></tag>
- <item>A pointer to an initialized mutex.</item>
- </taglist>
- <p>
- Returns a pointer to the name of the mutex.
- </p>
- <note>
- <p>This function is intended for debugging purposes only.</p>
- </note>
- </desc>
- </func>
-
- <func>
- <name><ret>char *</ret><nametext>erl_drv_rwlock_name(ErlDrvRWLock *rwlck)</nametext></name>
- <fsummary>Get name of driver mutex.</fsummary>
- <desc>
- <marker id="erl_drv_rwlock_name"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>rwlck</c></tag>
- <item>A pointer to an initialized r/w-lock.</item>
- </taglist>
- <p>
- Returns a pointer to the name of the r/w-lock.
- </p>
- <note>
- <p>This function is intended for debugging purposes only.</p>
- </note>
- </desc>
- </func>
-
- <func>
- <name><ret>char *</ret><nametext>erl_drv_thread_name(ErlDrvTid tid)</nametext></name>
- <fsummary>Get name of driver mutex.</fsummary>
- <desc>
- <marker id="erl_drv_rwlock_name"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>tid</c></tag>
- <item>A thread identifier.</item>
- </taglist>
- <p>
- Returns a pointer to the name of the thread.
- </p>
- <note>
- <p>This function is intended for debugging purposes only.</p>
- </note>
- </desc>
- </func>
-
- <func>
- <name><ret>ErlDrvTime</ret><nametext>erl_drv_monotonic_time(ErlDrvTimeUnit time_unit)</nametext></name>
- <fsummary>Get Erlang Monotonic Time</fsummary>
- <desc>
- <marker id="erl_drv_monotonic_time"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>time_unit</c></tag>
- <item>Time unit of returned value.</item>
- </taglist>
- <p>
- Returns
- <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
- monotonic time</seealso>. Note that it is not uncommon with
- negative values.
- </p>
- <p>Returns <c>ERL_DRV_TIME_ERROR</c> if called with an invalid
- time unit argument, or if called from a thread that is not a
- scheduler thread.</p>
- <p>See also:</p>
- <list>
- <item><seealso marker="#ErlDrvTime"><c>ErlDrvTime</c></seealso></item>
- <item><seealso marker="#ErlDrvTimeUnit"><c>ErlDrvTimeUnit</c></seealso></item>
- </list>
- </desc>
- </func>
-
- <func>
- <name><ret>ErlDrvTime</ret><nametext>erl_drv_time_offset(ErlDrvTimeUnit time_unit)</nametext></name>
- <fsummary>Get current Time Offset</fsummary>
- <desc>
- <marker id="erl_drv_time_offset"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>time_unit</c></tag>
- <item>Time unit of returned value.</item>
- </taglist>
- <p>Returns the current time offset between
- <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang monotonic time</seealso>
- and
- <seealso marker="time_correction#Erlang_System_Time">Erlang system time</seealso>
- converted into the <c>time_unit</c> passed as argument.</p>
- <p>Returns <c>ERL_DRV_TIME_ERROR</c> if called with an invalid
- time unit argument, or if called from a thread that is not a
- scheduler thread.</p>
- <p>See also:</p>
- <list>
- <item><seealso marker="#ErlDrvTime"><c>ErlDrvTime</c></seealso></item>
- <item><seealso marker="#ErlDrvTimeUnit"><c>ErlDrvTimeUnit</c></seealso></item>
- </list>
- </desc>
- </func>
-
- <func>
- <name><ret>ErlDrvTime</ret><nametext>erl_drv_convert_time_unit(ErlDrvTime val, ErlDrvTimeUnit from, ErlDrvTimeUnit to)</nametext></name>
- <fsummary>Convert time unit of a time value</fsummary>
- <desc>
- <marker id="erl_drv_convert_time_unit"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>val</c></tag>
- <item>Value to convert time unit for.</item>
- <tag><c>from</c></tag>
- <item>Time unit of <c>val</c>.</item>
- <tag><c>to</c></tag>
- <item>Time unit of returned value.</item>
- </taglist>
- <p>Converts the <c>val</c> value of time unit <c>from</c> to
- the corresponding value of time unit <c>to</c>. The result is
- rounded using the floor function.</p>
- <p>Returns <c>ERL_DRV_TIME_ERROR</c> if called with an invalid
- time unit argument.</p>
- <p>See also:</p>
- <list>
- <item><seealso marker="#ErlDrvTime"><c>ErlDrvTime</c></seealso></item>
- <item><seealso marker="#ErlDrvTimeUnit"><c>ErlDrvTimeUnit</c></seealso></item>
- </list>
- </desc>
- </func>
-
</funcs>
+
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="driver_entry">driver_entry(3)</seealso>,
- <seealso marker="kernel:erl_ddll">erl_ddll(3)</seealso>,
- <seealso marker="erlang">erlang(3)</seealso></p>
- <p>An Alternative Distribution Driver (ERTS User's
- Guide Ch. 3)</p>
+ <title>See Also</title>
+ <p><seealso marker="driver_entry"><c>driver_entry(3)</c></seealso>,
+ <seealso marker="erlang"><c>erlang(3)</c></seealso>,
+ <seealso marker="kernel:erl_ddll"><c>erl_ddll(3)</c></seealso>,
+ section <seealso marker="alt_dist">How to Implement an Alternative
+ Carrier for the Erlang Distribution></seealso> in the User's Guide</p>
</section>
</cref>
diff --git a/erts/doc/src/erl_ext_dist.xml b/erts/doc/src/erl_ext_dist.xml
index 2ac974f497..4f799f8f34 100644
--- a/erts/doc/src/erl_ext_dist.xml
+++ b/erts/doc/src/erl_ext_dist.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2007</year>
- <year>2015</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -35,135 +35,130 @@
<section>
<title>Introduction</title>
<p>
- The external term format is mainly used in the distribution
+ The external term format is mainly used in the distribution
mechanism of Erlang.
</p>
<p>
- Since Erlang has a fixed number of types, there is no need for a
- programmer to define a specification for the external format used
+ As Erlang has a fixed number of types, there is no need for a
+ programmer to define a specification for the external format used
within some application.
- All Erlang terms has an external representation and the interpretation
- of the different terms are application specific.
+ All Erlang terms have an external representation and the interpretation
+ of the different terms is application-specific.
</p>
<p>
- In Erlang the BIF <seealso marker="erts:erlang#term_to_binary/1">term_to_binary/1,2</seealso> is used to convert a
- term into the external format.
- To convert binary data encoding a term the BIF
+ In Erlang the BIF <seealso marker="erts:erlang#term_to_binary/1">
+ <c>erlang:term_to_binary/1,2</c></seealso> is used to convert a
+ term into the external format.
+ To convert binary data encoding to a term, the BIF
<seealso marker="erts:erlang#binary_to_term/1">
- binary_to_term/1
- </seealso>
- is used.
+ <c>erlang:binary_to_term/1</c>c></seealso> is used.
</p>
<p>
- The distribution does this implicitly when sending messages across
+ The distribution does this implicitly when sending messages across
node boundaries.
</p>
<marker id="overall_format"/>
<p>
- The overall format of the term format is:
+ The overall format of the term format is as follows:
</p>
<table align="left">
<row>
- <cell align="center">1</cell>
- <cell align="center">1</cell>
- <cell align="center">N</cell>
+ <cell align="center">1</cell>
+ <cell align="center">1</cell>
+ <cell align="center">N</cell>
</row>
- <row>
- <cell align="center"><c>131</c></cell>
- <cell align="center"><c>Tag</c></cell>
- <cell align="center"><c>Data</c></cell>
- </row>
- <tcaption></tcaption></table>
+ <row>
+ <cell align="center"><c>131</c></cell>
+ <cell align="center"><c>Tag</c></cell>
+ <cell align="center"><c>Data</c></cell>
+ </row>
+ <tcaption>Term Format</tcaption></table>
<note>
- <p>
- When messages are
- <seealso marker="erl_dist_protocol#connected_nodes">passed between
- connected nodes</seealso> and a
- <seealso marker="#distribution_header">distribution
- header</seealso> is used, the first byte containing the version
- number (131) is omitted from the terms that follow the distribution
- header. This since
- the version number is implied by the version number in the
- distribution header.
- </p>
+ <p>
+ When messages are
+ <seealso marker="erl_dist_protocol#connected_nodes">passed between
+ connected nodes</seealso> and a
+ <seealso marker="#distribution_header">distribution
+ header</seealso> is used, the first byte containing the version
+ number (131) is omitted from the terms that follow the distribution
+ header. This is because the version number is implied by the version
+ number in the distribution header.
+ </p>
</note>
<p>
- A compressed term looks like this:
+ The compressed term format is as follows:
</p>
<table align="left">
<row>
- <cell align="center">1</cell>
- <cell align="center">1</cell>
- <cell align="center">4</cell>
- <cell align="center">N</cell>
+ <cell align="center">1</cell>
+ <cell align="center">1</cell>
+ <cell align="center">4</cell>
+ <cell align="center">N</cell>
</row>
<row>
- <cell align="center">131</cell>
- <cell align="center">80</cell>
- <cell align="center">UncompressedSize</cell>
- <cell align="center">Zlib-compressedData</cell>
+ <cell align="center"><c>131</c></cell>
+ <cell align="center"><c>80</c></cell>
+ <cell align="center"><c>UncompressedSize</c></cell>
+ <cell align="center"><c>Zlib-compressedData</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>Compressed Term Format</tcaption></table>
<p>
- Uncompressed Size (unsigned 32 bit integer in big-endian byte order)
+ Uncompressed size (unsigned 32-bit integer in big-endian byte order)
is the size of the data before it was compressed.
- The compressed data has the following format when it has been
- expanded:
+ The compressed data has the following format when it has been expanded:
</p>
<table align="left">
<row>
- <cell align="center">1</cell>
- <cell align="center">Uncompressed Size</cell>
+ <cell align="center">1</cell>
+ <cell align="center">Uncompressed Size</cell>
</row>
<row>
- <cell align="center">Tag</cell>
- <cell align="center">Data</cell>
+ <cell align="center"><c>Tag</c></cell>
+ <cell align="center"><c>Data</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>Compressed Data Format when Expanded</tcaption></table>
<marker id="utf8_atoms"/>
<note>
- <p>As of ERTS version 5.10 (OTP-R16) support
- for UTF-8 encoded atoms has been introduced in the external format.
- However, only characters that can be encoded using Latin1 (ISO-8859-1)
- are currently supported in atoms. The support for UTF-8 encoded atoms
- in the external format has been implemented in order to be able to support
- all Unicode characters in atoms in <em>some future release</em>.
- Until full Unicode support for
- atoms has been introduced, it is an <em>error</em> to pass atoms containing
- characters that cannot be encoded in Latin1, and <em>the behavior is
- undefined</em>.</p>
- <p>When the
- <seealso marker="erl_dist_protocol#dflags"><c>DFLAG_UTF8_ATOMS</c></seealso>
- distribution flag has been exchanged between both nodes in the
- <seealso marker="erl_dist_protocol#distribution_handshake">distribution handshake</seealso>,
- all atoms in the distribution header will be encoded in UTF-8; otherwise,
- all atoms in the distribution header will be encoded in Latin1. The two
- new tags <seealso marker="#ATOM_UTF8_EXT">ATOM_UTF8_EXT</seealso>, and
- <seealso marker="#SMALL_ATOM_UTF8_EXT">SMALL_ATOM_UTF8_EXT</seealso>
- will only be used if the <c>DFLAG_UTF8_ATOMS</c> distribution flag has
- been exchanged between nodes, or if an atom containing characters
- that cannot be encoded in Latin1 is encountered.
- </p>
- <p>The maximum number of allowed characters in an atom is 255. In the
- UTF-8 case each character may need 4 bytes to be encoded.
- </p>
+ <p>As from ERTS 5.10 (OTP R16) support
+ for UTF-8 encoded atoms has been introduced in the external format.
+ However, only characters that can be encoded using Latin-1 (ISO-8859-1)
+ are currently supported in atoms. The support for UTF-8 encoded atoms
+ in the external format has been implemented to be able to support
+ all Unicode characters in atoms in <em>some future release</em>.
+ Until full Unicode support for atoms has been introduced,
+ it is an <em>error</em> to pass atoms containing
+ characters that cannot be encoded in Latin-1, and <em>the behavior is
+ undefined</em>.</p>
+ <p>When distribution flag <seealso marker="erl_dist_protocol#dflags">
+ <c>DFLAG_UTF8_ATOMS</c></seealso> has been exchanged between both nodes
+ in the <seealso marker="erl_dist_protocol#distribution_handshake">
+ distribution handshake</seealso>, all atoms in the distribution header
+ are encoded in UTF-8, otherwise in Latin-1. The two
+ new tags <seealso marker="#ATOM_UTF8_EXT"><c>ATOM_UTF8_EXT</c></seealso>
+ and <seealso marker="#SMALL_ATOM_UTF8_EXT">
+ <c>SMALL_ATOM_UTF8_EXT</c></seealso>
+ are only used if the distribution flag <c>DFLAG_UTF8_ATOMS</c> has
+ been exchanged between nodes, or if an atom containing characters
+ that cannot be encoded in Latin-1 is encountered.</p>
+ <p>The maximum number of allowed characters in an atom is 255. In the
+ UTF-8 case, each character can need 4 bytes to be encoded.</p>
</note>
</section>
<section>
- <title>Distribution header</title>
+ <title>Distribution Header</title>
<p>
<marker id="distribution_header"/>
- As of erts version 5.7.2 the old atom cache protocol was
- dropped and a new one was introduced. This atom cache protocol
- introduced the distribution header. Nodes with erts versions
+ As from ERTS 5.7.2 the old atom cache protocol was
+ dropped and a new one was introduced. This protocol
+ introduced the distribution header. Nodes with an ERTS version
earlier than 5.7.2 can still communicate with new nodes,
- but no distribution header and no atom cache will be used.</p>
+ but no distribution header and no atom cache are used.</p>
<p>
- The distribution header currently only contains an atom cache
- reference section, but could in the future contain more
+ The distribution header only contains an atom cache
+ reference section, but can in the future contain more
information. The distribution header precedes one or more Erlang
- terms on the external format. For more information see the
+ terms on the external format. For more information, see the
documentation of the
<seealso marker="erl_dist_protocol#connected_nodes">protocol between
connected nodes</seealso> in the
@@ -173,37 +168,37 @@
<p>
<seealso marker="#ATOM_CACHE_REF">ATOM_CACHE_REF</seealso>
entries with corresponding <c>AtomCacheReferenceIndex</c> in terms
- encoded on the external format following a distribution header refers
+ encoded on the external format following a distribution header refer
to the atom cache references made in the distribution header. The range
- is 0 &lt;= <c>AtomCacheReferenceIndex</c> &lt; 255, i.e., at most 255
+ is 0 &lt;= <c>AtomCacheReferenceIndex</c> &lt; 255, that is, at most 255
different atom cache references from the following terms can be made.
</p>
<p>
- The distribution header format is:
+ The distribution header format is as follows:
</p>
<table align="left">
<row>
- <cell align="center">1</cell>
- <cell align="center">1</cell>
- <cell align="center">1</cell>
- <cell align="center">NumberOfAtomCacheRefs/2+1 | 0</cell>
- <cell align="center">N | 0</cell>
+ <cell align="center">1</cell>
+ <cell align="center">1</cell>
+ <cell align="center">1</cell>
+ <cell align="center">NumberOfAtomCacheRefs/2+1 | 0</cell>
+ <cell align="center">N | 0</cell>
</row>
<row>
- <cell align="center"><c>131</c></cell>
- <cell align="center"><c>68</c></cell>
- <cell align="center"><c>NumberOfAtomCacheRefs</c></cell>
- <cell align="center"><c>Flags</c></cell>
- <cell align="center"><c>AtomCacheRefs</c></cell>
+ <cell align="center"><c>131</c></cell>
+ <cell align="center"><c>68</c></cell>
+ <cell align="center"><c>NumberOfAtomCacheRefs</c></cell>
+ <cell align="center"><c>Flags</c></cell>
+ <cell align="center"><c>AtomCacheRefs</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>Distribution Header Format</tcaption></table>
<p>
- <c>Flags</c> consists of <c>NumberOfAtomCacheRefs/2+1</c> bytes,
+ <c>Flags</c> consist of <c>NumberOfAtomCacheRefs/2+1</c> bytes,
unless <c>NumberOfAtomCacheRefs</c> is <c>0</c>. If
<c>NumberOfAtomCacheRefs</c> is <c>0</c>, <c>Flags</c> and
- <c>AtomCacheRefs</c> are omitted. Each atom cache reference have
+ <c>AtomCacheRefs</c> are omitted. Each atom cache reference has
a half byte flag field. Flags corresponding to a specific
- <c>AtomCacheReferenceIndex</c>, are located in flag byte number
+ <c>AtomCacheReferenceIndex</c> are located in flag byte number
<c>AtomCacheReferenceIndex/2</c>. Flag byte 0 is the first byte
after the <c>NumberOfAtomCacheRefs</c> byte. Flags for an even
<c>AtomCacheReferenceIndex</c> are located in the least significant
@@ -216,95 +211,97 @@
</p>
<table align="left">
<row>
- <cell align="center">1 bit</cell>
- <cell align="center">3 bits</cell>
+ <cell align="center">1 bit</cell>
+ <cell align="center">3 bits</cell>
</row>
<row>
- <cell align="center"><c>NewCacheEntryFlag</c></cell>
- <cell align="center"><c>SegmentIndex</c></cell>
+ <cell align="center"><c>NewCacheEntryFlag</c></cell>
+ <cell align="center"><c>SegmentIndex</c></cell>
</row>
<tcaption></tcaption></table>
<p>
The most significant bit is the <c>NewCacheEntryFlag</c>. If set,
the corresponding cache reference is new. The three least
significant bits are the <c>SegmentIndex</c> of the corresponding
- atom cache entry. An atom cache consists of 8 segments each of size
- 256, i.e., an atom cache can contain 2048 entries.
+ atom cache entry. An atom cache consists of 8 segments, each of size
+ 256, that is, an atom cache can contain 2048 entries.
</p>
<p>
After flag fields for atom cache references, another half byte flag
- field is located which has the following format:
+ field is located with the following format:
</p>
<table align="left">
<row>
- <cell align="center">3 bits</cell>
- <cell align="center">1 bit</cell>
+ <cell align="center">3 bits</cell>
+ <cell align="center">1 bit</cell>
</row>
<row>
- <cell align="center"><c>CurrentlyUnused</c></cell>
- <cell align="center"><c>LongAtoms</c></cell>
+ <cell align="center"><c>CurrentlyUnused</c></cell>
+ <cell align="center"><c>LongAtoms</c></cell>
</row>
<tcaption></tcaption></table>
<p>
- The least significant bit in that half byte is the <c>LongAtoms</c>
- flag. If it is set, 2 bytes are used for atom lengths instead of
+ The least significant bit in that half byte is flag <c>LongAtoms</c>.
+ If it is set, 2 bytes are used for atom lengths instead of
1 byte in the distribution header.
</p>
<p>
After the <c>Flags</c> field follow the <c>AtomCacheRefs</c>. The
first <c>AtomCacheRef</c> is the one corresponding to
- <c>AtomCacheReferenceIndex</c> 0. Higher indices follows
+ <c>AtomCacheReferenceIndex</c> 0. Higher indices follow
in sequence up to index <c>NumberOfAtomCacheRefs - 1</c>.
</p>
<p>
If the <c>NewCacheEntryFlag</c> for the next <c>AtomCacheRef</c> has
- been set, a <c>NewAtomCacheRef</c> on the following format will follow:
+ been set, a <c>NewAtomCacheRef</c> on the following format follows:
</p>
<table align="left">
<row>
- <cell align="center">1</cell>
- <cell align="center">1 | 2</cell>
- <cell align="center">Length</cell>
+ <cell align="center">1</cell>
+ <cell align="center">1 | 2</cell>
+ <cell align="center">Length</cell>
</row>
<row>
- <cell align="center"><c>InternalSegmentIndex</c></cell>
- <cell align="center"><c>Length</c></cell>
- <cell align="center"><c>AtomText</c></cell>
+ <cell align="center"><c>InternalSegmentIndex</c></cell>
+ <cell align="center"><c>Length</c></cell>
+ <cell align="center"><c>AtomText</c></cell>
</row>
<tcaption></tcaption></table>
<p>
<c>InternalSegmentIndex</c> together with the <c>SegmentIndex</c>
completely identify the location of an atom cache entry in the
- atom cache. <c>Length</c> is number of bytes that <c>AtomText</c>
- consists of. Length is a two byte big endian integer
- if the <c>LongAtoms</c> flag has been set, otherwise a one byte
- integer. When the
- <seealso marker="erl_dist_protocol#dflags"><c>DFLAG_UTF8_ATOMS</c></seealso>
- distribution flag has been exchanged between both nodes in the
- <seealso marker="erl_dist_protocol#distribution_handshake">distribution handshake</seealso>,
- characters in <c>AtomText</c> is encoded in UTF-8; otherwise,
- encoded in Latin1. Subsequent <c>CachedAtomRef</c>s with the same
+ atom cache. <c>Length</c> is the number of bytes that <c>AtomText</c>
+ consists of. Length is a 2 byte big-endian integer
+ if flag <c>LongAtoms</c> has been set, otherwise a 1 byte
+ integer. When distribution flag
+ <seealso marker="erl_dist_protocol#dflags">
+ <c>DFLAG_UTF8_ATOMS</c></seealso>
+ has been exchanged between both nodes in the
+ <seealso marker="erl_dist_protocol#distribution_handshake">
+ distribution handshake</seealso>,
+ characters in <c>AtomText</c> are encoded in UTF-8, otherwise
+ in Latin-1. The following <c>CachedAtomRef</c>s with the same
<c>SegmentIndex</c> and <c>InternalSegmentIndex</c> as this
- <c>NewAtomCacheRef</c> will refer to this atom until a new
+ <c>NewAtomCacheRef</c> refer to this atom until a new
<c>NewAtomCacheRef</c> with the same <c>SegmentIndex</c>
and <c>InternalSegmentIndex</c> appear.
</p>
<p>
- For more information on encoding of atoms, see
+ For more information on encoding of atoms, see the
<seealso marker="#utf8_atoms">note on UTF-8 encoded atoms</seealso>
- in the beginning of this document.
+ in the beginning of this section.
</p>
<p>
If the <c>NewCacheEntryFlag</c> for the next <c>AtomCacheRef</c>
has not been set, a <c>CachedAtomRef</c> on the following format
- will follow:
+ follows:
</p>
<table align="left">
<row>
- <cell align="center">1</cell>
+ <cell align="center">1</cell>
</row>
<row>
- <cell align="center"><c>InternalSegmentIndex</c></cell>
+ <cell align="center"><c>InternalSegmentIndex</c></cell>
</row>
<tcaption></tcaption></table>
<p>
@@ -319,157 +316,147 @@
<section>
<marker id="ATOM_CACHE_REF"/>
<title>ATOM_CACHE_REF</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
- <cell align="center">1</cell>
+ <cell align="center">1</cell>
</row>
<row>
- <cell align="center"><c>82</c></cell>
- <cell align="center"><c>AtomCacheReferenceIndex</c></cell>
+ <cell align="center"><c>82</c></cell>
+ <cell align="center"><c>AtomCacheReferenceIndex</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>ATOM_CACHE_REF</tcaption></table>
<p>
Refers to the atom with <c>AtomCacheReferenceIndex</c> in the
- <seealso marker="#distribution_header">distribution header</seealso>.
+ <seealso marker="#distribution_header">distribution header</seealso>.
</p>
</section>
<section>
<marker id="SMALL_INTEGER_EXT"/>
<title>SMALL_INTEGER_EXT</title>
-
<table align="left">
<row>
- <cell align="center">1</cell>
- <cell align="center">1</cell>
+ <cell align="center">1</cell>
+ <cell align="center">1</cell>
</row>
<row>
- <cell align="center">97</cell>
- <cell align="center">Int</cell>
+ <cell align="center"><c>97</c></cell>
+ <cell align="center"><c>Int</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>SMALL_INTEGER_EXT</tcaption></table>
<p>
- Unsigned 8 bit integer.
+ Unsigned 8-bit integer.
</p>
</section>
<section>
<marker id="INTEGER_EXT"/>
<title>INTEGER_EXT</title>
-
<table align="left">
<row>
- <cell align="center">1</cell>
- <cell align="center">4</cell>
+ <cell align="center">1</cell>
+ <cell align="center">4</cell>
</row>
<row>
- <cell align="center">98</cell>
- <cell align="center">Int</cell>
+ <cell align="center"><c>98</c></cell>
+ <cell align="center"><c>Int</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>INTEGER_EXT</tcaption></table>
<p>
- Signed 32 bit integer in big-endian format (i.e. MSB first)
+ Signed 32-bit integer in big-endian format.
</p>
</section>
<section>
<marker id="FLOAT_EXT"/>
<title>FLOAT_EXT</title>
-
<table align="left">
<row>
- <cell align="center">1</cell>
- <cell align="center">31</cell>
+ <cell align="center">1</cell>
+ <cell align="center">31</cell>
</row>
<row>
- <cell align="center">99</cell>
- <cell align="center">Float String</cell>
+ <cell align="center"><c>99</c></cell>
+ <cell align="center"><c>Float string</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>FLOAT_EXT</tcaption></table>
<p>
- A float is stored in string format. the format used in sprintf to
- format the float is "%.20e"
+ A float is stored in string format. The format used in sprintf to
+ format the float is "%.20e"
(there are more bytes allocated than necessary).
- To unpack the float use sscanf with format "%lf".
+ To unpack the float, use sscanf with format "%lf".
</p>
<p>
- This term is used in minor version 0 of the external format;
- it has been superseded by
- <seealso marker="#NEW_FLOAT_EXT">
- NEW_FLOAT_EXT
- </seealso>.
+ This term is used in minor version 0 of the external format;
+ it has been superseded by
+ <seealso marker="#NEW_FLOAT_EXT"><c>NEW_FLOAT_EXT</c></seealso>.
</p>
</section>
<section>
<marker id="ATOM_EXT"/>
<title>ATOM_EXT</title>
-
<table align="left">
<row>
- <cell align="center">1</cell>
- <cell align="center">2</cell>
- <cell align="center">Len</cell>
+ <cell align="center">1</cell>
+ <cell align="center">2</cell>
+ <cell align="center">Len</cell>
</row>
<row>
- <cell align="center"><c>100</c></cell>
- <cell align="center"><c>Len</c></cell>
- <cell align="center"><c>AtomName</c></cell>
+ <cell align="center"><c>100</c></cell>
+ <cell align="center"><c>Len</c></cell>
+ <cell align="center"><c>AtomName</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>ATOM_EXT</tcaption></table>
<p>
- An atom is stored with a 2 byte unsigned length in big-endian order,
- followed by <c>Len</c> numbers of 8 bit Latin1 characters that forms
- the <c>AtomName</c>.
- <em>Note</em>: The maximum allowed value for <c>Len</c> is 255.
+ An atom is stored with a 2 byte unsigned length in big-endian order,
+ followed by <c>Len</c> numbers of 8-bit Latin-1 characters that forms
+ the <c>AtomName</c>. The maximum allowed value for <c>Len</c> is 255.
</p>
</section>
<section>
<marker id="REFERENCE_EXT"/>
<title>REFERENCE_EXT</title>
-
- <table align="left">
- <row>
- <cell align="center">1</cell>
- <cell align="center">N</cell>
- <cell align="center">4</cell>
- <cell align="center">1</cell>
- </row>
- <row>
- <cell align="center"><c>101</c></cell>
- <cell align="center"><c>Node</c></cell>
- <cell align="center"><c>ID</c></cell>
- <cell align="center"><c>Creation</c></cell>
- </row>
- <tcaption></tcaption></table>
+ <table align="left">
+ <row>
+ <cell align="center">1</cell>
+ <cell align="center">N</cell>
+ <cell align="center">4</cell>
+ <cell align="center">1</cell>
+ </row>
+ <row>
+ <cell align="center"><c>101</c></cell>
+ <cell align="center"><c>Node</c></cell>
+ <cell align="center"><c>ID</c></cell>
+ <cell align="center"><c>Creation</c></cell>
+ </row>
+ <tcaption>REFERENCE_EXT</tcaption></table>
<p>
- Encode a reference object (an object generated with <c>make_ref/0</c>).
- The <c>Node</c> term is an encoded atom, i.e.
- <seealso marker="#ATOM_EXT">ATOM_EXT</seealso>,
- <seealso marker="#SMALL_ATOM_EXT">SMALL_ATOM_EXT</seealso> or
- <seealso marker="#ATOM_CACHE_REF">ATOM_CACHE_REF</seealso>.
- The <c>ID</c> field contains a big-endian
- unsigned integer,
- but <em>should be regarded as uninterpreted data</em>
- since this field is node specific.
- <c>Creation</c> is a byte containing a node serial number that
- makes it possible to separate old (crashed) nodes from a new one.
+ Encodes a reference object (an object generated with
+ <seealso marker="erlang:make_ref/0">erlang:make_ref/0</seealso>).
+ The <c>Node</c> term is an encoded atom, that is,
+ <seealso marker="#ATOM_EXT"><c>ATOM_EXT</c></seealso>,
+ <seealso marker="#SMALL_ATOM_EXT"><c>SMALL_ATOM_EXT</c></seealso>, or
+ <seealso marker="#ATOM_CACHE_REF"><c>ATOM_CACHE_REF</c></seealso>.
+ The <c>ID</c> field contains a big-endian unsigned integer,
+ but <em>is to be regarded as uninterpreted data</em>,
+ as this field is node-specific.
+ <c>Creation</c> is a byte containing a node serial number, which
+ makes it possible to separate old (crashed) nodes from a new one.
</p>
<p>
- In <c>ID</c>, only 18 bits are significant; the rest should be 0.
- In <c>Creation</c>, only 2 bits are significant; the rest should be 0.
-
- See <seealso marker="#NEW_REFERENCE_EXT">NEW_REFERENCE_EXT</seealso>.
+ In <c>ID</c>, only 18 bits are significant; the rest are to be 0.
+ In <c>Creation</c>, only two bits are significant; the rest are to be 0.
+ See <seealso marker="#NEW_REFERENCE_EXT">
+ <c>NEW_REFERENCE_EXT</c></seealso>.
</p>
</section>
<section>
<marker id="PORT_EXT"/>
<title>PORT_EXT</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
@@ -483,20 +470,21 @@
<cell align="center"><c>ID</c></cell>
<cell align="center"><c>Creation</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>PORT_EXT</tcaption></table>
<p>
- Encode a port object (obtained form <c>open_port/2</c>).
- The <c>ID</c> is a node specific identifier for a local port.
+ Encodes a port object (obtained from
+ <seealso marker="erlang:open_port/2">
+ <c>erlang:open_port/2</c></seealso>).
+ The <c>ID</c> is a node-specific identifier for a local port.
Port operations are not allowed across node boundaries.
The <c>Creation</c> works just like in
- <seealso marker="#REFERENCE_EXT">REFERENCE_EXT</seealso>.
+ <seealso marker="#REFERENCE_EXT"><c>REFERENCE_EXT</c></seealso>.
</p>
</section>
<section>
<marker id="PID_EXT"/>
<title>PID_EXT</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
@@ -512,23 +500,20 @@
<cell align="center"><c>Serial</c></cell>
<cell align="center"><c>Creation</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>PID_EXT</tcaption></table>
<p>
- Encode a process identifier object (obtained from <c>spawn/3</c> or
- friends).
- The <c>ID</c> and <c>Creation</c> fields works just like in
- <seealso marker="#REFERENCE_EXT">REFERENCE_EXT</seealso>, while
- the <c>Serial</c> field is used to improve safety.
-
- In <c>ID</c>, only 15 bits are significant; the rest should be 0.
+ Encodes a process identifier object (obtained from
+ <seealso marker="erlang:spawn/3"><c>erlang:spawn/3</c></seealso> or
+ friends). The <c>ID</c> and <c>Creation</c> fields works just like in
+ <seealso marker="#REFERENCE_EXT"><c>REFERENCE_EXT</c></seealso>, while
+ the <c>Serial</c> field is used to improve safety.
+ In <c>ID</c>, only 15 bits are significant; the rest are to be 0.
</p>
-
</section>
<section>
<marker id="SMALL_TUPLE_EXT"/>
<title>SMALL_TUPLE_EXT</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
@@ -536,22 +521,21 @@
<cell align="center">N</cell>
</row>
<row>
- <cell align="center">104</cell>
- <cell align="center">Arity</cell>
- <cell align="center">Elements</cell>
+ <cell align="center"><c>104</c></cell>
+ <cell align="center"><c>Arity</c></cell>
+ <cell align="center"><c>Elements</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>SMALL_TUPLE_EXT</tcaption></table>
<p>
- <c>SMALL_TUPLE_EXT</c> encodes a tuple. The <c>Arity</c>
- field is an unsigned byte that determines how many element
- that follows in the <c>Elements</c> section.
+ Encodes a tuple. The <c>Arity</c>
+ field is an unsigned byte that determines how many elements
+ that follows in section <c>Elements</c>.
</p>
</section>
<section>
<marker id="LARGE_TUPLE_EXT"/>
<title>LARGE_TUPLE_EXT</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
@@ -559,23 +543,22 @@
<cell align="center">N</cell>
</row>
<row>
- <cell align="center">105</cell>
- <cell align="center">Arity</cell>
- <cell align="center">Elements</cell>
+ <cell align="center"><c>105</c></cell>
+ <cell align="center"><c>Arity</c></cell>
+ <cell align="center"><c>Elements</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>LARGE_TUPLE_EXT</tcaption></table>
<p>
- Same as
- <seealso marker="#SMALL_TUPLE_EXT">SMALL_TUPLE_EXT</seealso>
- with the exception that <c>Arity</c> is an
- unsigned 4 byte integer in big endian format.
+ Same as
+ <seealso marker="#SMALL_TUPLE_EXT"><c>SMALL_TUPLE_EXT</c></seealso>
+ except that <c>Arity</c> is an
+ unsigned 4 byte integer in big-endian format.
</p>
</section>
<section>
<marker id="MAP_EXT"/>
<title>MAP_EXT</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
@@ -583,43 +566,42 @@
<cell align="center">N</cell>
</row>
<row>
- <cell align="center">116</cell>
- <cell align="center">Arity</cell>
- <cell align="center">Pairs</cell>
+ <cell align="center"><c>116</c></cell>
+ <cell align="center"><c>Arity</c></cell>
+ <cell align="center"><c>Pairs</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>MAP_EXT</tcaption></table>
<p>
- <c>MAP_EXT</c> encodes a map. The <c>Arity</c> field is an unsigned
- 4 byte integer in big endian format that determines the number of
+ Encodes a map. The <c>Arity</c> field is an unsigned
+ 4 byte integer in big-endian format that determines the number of
key-value pairs in the map. Key and value pairs (<c>Ki => Vi</c>)
- are encoded in the <c>Pairs</c> section in the following order:
+ are encoded in section <c>Pairs</c> in the following order:
<c>K1, V1, K2, V2,..., Kn, Vn</c>.
Duplicate keys are <em>not allowed</em> within the same map.
</p>
- <p><em>Since: </em>OTP 17.0</p>
+ <p><em>As from </em>Erlang/OTP 17.0</p>
</section>
<section>
<marker id="NIL_EXT"/>
<title>NIL_EXT</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
</row>
<row>
- <cell align="center">106</cell>
+ <cell align="center"><c>106</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>NIL_EXT</tcaption></table>
<p>
- The representation for an empty list, i.e. the Erlang syntax <c>[]</c>.
+ The representation for an empty list, that is, the Erlang syntax
+ <c>[]</c>.
</p>
</section>
<section>
<marker id="STRING_EXT"/>
<title>STRING_EXT</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
@@ -627,27 +609,25 @@
<cell align="center">Len</cell>
</row>
<row>
- <cell align="center">107</cell>
- <cell align="center">Length</cell>
- <cell align="center">Characters</cell>
+ <cell align="center"><c>107</c></cell>
+ <cell align="center"><c>Length</c></cell>
+ <cell align="center"><c>Characters</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>STRING_EXT</tcaption></table>
<p>
- String does NOT have a corresponding Erlang representation,
+ String does <em>not</em> have a corresponding Erlang representation,
but is an optimization for sending lists of bytes (integer in
the range 0-255) more efficiently over the distribution.
- Since the <c>Length</c> field is an unsigned 2 byte integer
- (big endian), implementations must make sure that lists longer than
- 65535 elements are encoded as
- <seealso marker="#LIST_EXT">LIST_EXT</seealso>.
+ As field <c>Length</c> is an unsigned 2 byte integer
+ (big-endian), implementations must ensure that lists longer than
+ 65535 elements are encoded as
+ <seealso marker="#LIST_EXT"><c>LIST_EXT</c></seealso>.
</p>
-
</section>
<section>
<marker id="LIST_EXT"/>
<title>LIST_EXT</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
@@ -656,27 +636,24 @@
<cell align="center">&nbsp;</cell>
</row>
<row>
- <cell align="center">108</cell>
- <cell align="center">Length</cell>
- <cell align="center">Elements</cell>
- <cell align="center">Tail</cell>
+ <cell align="center"><c>108</c></cell>
+ <cell align="center"><c>Length</c></cell>
+ <cell align="center"><c>Elements</c></cell>
+ <cell align="center"><c>Tail</c></cell>
</row>
- <tcaption></tcaption></table>
-
+ <tcaption>LIST_EXT</tcaption></table>
<p>
- <c>Length</c> is the number of elements that follows in the
- <c>Elements</c> section. <c>Tail</c> is the final tail of
- the list; it is
- <seealso marker="#NIL_EXT">NIL_EXT</seealso>
- for a proper list, but may be anything type if the list is
- improper (for instance <c>[a|b]</c>).
+ <c>Length</c> is the number of elements that follows in section
+ <c>Elements</c>. <c>Tail</c> is the final tail of the list; it is
+ <seealso marker="#NIL_EXT"><c>NIL_EXT</c></seealso>
+ for a proper list, but can be any type if the list is
+ improper (for example, <c>[a|b]</c>).
</p>
</section>
<section>
<marker id="BINARY_EXT"/>
<title>BINARY_EXT</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
@@ -684,25 +661,26 @@
<cell align="center">Len</cell>
</row>
<row>
- <cell align="center">109</cell>
- <cell align="center">Len</cell>
- <cell align="center">Data</cell>
+ <cell align="center"><c>109</c></cell>
+ <cell align="center"><c>Len</c></cell>
+ <cell align="center"><c>Data</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>BINARY_EXT</tcaption></table>
<p>
Binaries are generated with bit syntax expression or with
- <seealso marker="erts:erlang#list_to_binary/1">list_to_binary/1</seealso>,
- <seealso marker="erts:erlang#term_to_binary/1">term_to_binary/1</seealso>,
+ <seealso marker="erts:erlang#list_to_binary/1">
+ <c>erlang:list_to_binary/1</c></seealso>,
+ <seealso marker="erts:erlang#term_to_binary/1">
+ <c>erlang:term_to_binary/1</c></seealso>,
or as input from binary ports.
- The <c>Len</c> length field is an unsigned 4 byte integer
- (big endian).
+ The <c>Len</c> length field is an unsigned 4 byte integer
+ (big-endian).
</p>
</section>
<section>
<marker id="SMALL_BIG_EXT"/>
<title>SMALL_BIG_EXT</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
@@ -711,27 +689,26 @@
<cell align="center">n</cell>
</row>
<row>
- <cell align="center">110</cell>
- <cell align="center">n</cell>
- <cell align="center">Sign</cell>
- <cell align="center">d(0) ... d(n-1)</cell>
+ <cell align="center"><c>110</c></cell>
+ <cell align="center"><c>n</c></cell>
+ <cell align="center"><c>Sign</c></cell>
+ <cell align="center"><c>d(0)</c> ... <c>d(n-1)</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>SMALL_BIG_EXT</tcaption></table>
<p>
- Bignums are stored in unary form with a <c>Sign</c> byte
- that is 0 if the binum is positive and 1 if is negative. The
- digits are stored with the LSB byte stored first. To
- calculate the integer the following formula can be used:<br/>
-
- B = 256<br/>
- (d0*B^0 + d1*B^1 + d2*B^2 + ... d(N-1)*B^(n-1))
+ Bignums are stored in unary form with a <c>Sign</c> byte,
+ that is, 0 if the binum is positive and 1 if it is negative. The
+ digits are stored with the least significant byte stored first. To
+ calculate the integer, the following formula can be used:
+ </p>
+ <p><c>B</c> = 256<br/>
+ <c>(d0*B^0 + d1*B^1 + d2*B^2 + ... d(N-1)*B^(n-1))</c>
</p>
</section>
<section>
<marker id="LARGE_BIG_EXT"/>
<title>LARGE_BIG_EXT</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
@@ -740,24 +717,22 @@
<cell align="center">n</cell>
</row>
<row>
- <cell align="center">111</cell>
- <cell align="center">n</cell>
- <cell align="center">Sign</cell>
- <cell align="center">d(0) ... d(n-1)</cell>
+ <cell align="center"><c>111</c></cell>
+ <cell align="center"><c>n</c></cell>
+ <cell align="center"><c>Sign</c></cell>
+ <cell align="center"><c>d(0)</c> ... <c>d(n-1)</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>LARGE_BIG_EXT</tcaption></table>
<p>
- Same as <seealso marker="#SMALL_BIG_EXT">SMALL_BIG_EXT</seealso>
- with the difference that the length field
- is an unsigned 4 byte integer.
+ Same as <seealso marker="#SMALL_BIG_EXT">
+ <c>SMALL_BIG_EXT</c></seealso>
+ except that the length field is an unsigned 4 byte integer.
</p>
-
</section>
<section>
<marker id="NEW_REFERENCE_EXT"/>
<title>NEW_REFERENCE_EXT</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
@@ -767,44 +742,43 @@
<cell align="center">N'</cell>
</row>
<row>
- <cell align="center">114</cell>
- <cell align="center">Len</cell>
- <cell align="center">Node</cell>
- <cell align="center">Creation</cell>
- <cell align="center">ID ...</cell>
+ <cell align="center"><c>114</c></cell>
+ <cell align="center"><c>Len</c></cell>
+ <cell align="center"><c>Node</c></cell>
+ <cell align="center"><c>Creation</c></cell>
+ <cell align="center"><c>ID ...</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>NEW_REFERENCE_EXT</tcaption></table>
<p>
- Node and Creation are as in
- <seealso marker="#REFERENCE_EXT">REFERENCE_EXT</seealso>.
+ <c>Node</c> and <c>Creation</c> are as in
+ <seealso marker="#REFERENCE_EXT"><c>REFERENCE_EXT</c></seealso>.
</p>
<p>
- <c>ID</c> contains a sequence of big-endian unsigned integers
- (4 bytes each, so <c>N'</c> is a multiple of 4),
- but should be regarded as uninterpreted data.
+ <c>ID</c> contains a sequence of big-endian unsigned integers
+ (4 bytes each, so <c>N'</c> is a multiple of 4),
+ but is to be regarded as uninterpreted data.
</p>
<p>
<c>N'</c> = 4 * <c>Len</c>.
</p>
<p>
- In the first word (four bytes) of <c>ID</c>, only 18 bits are
- significant, the rest should be 0.
- In <c>Creation</c>, only 2 bits are significant,
- the rest should be 0.
+ In the first word (4 bytes) of <c>ID</c>, only 18 bits are
+ significant, the rest are to be 0.
+ In <c>Creation</c>, only two bits are significant,
+ the rest are to be 0.
</p>
<p>
- NEW_REFERENCE_EXT was introduced with distribution version 4.
- In version 4, <c>N'</c> should be at most 12.
+ <c>NEW_REFERENCE_EXT</c> was introduced with distribution version 4.
+ In version 4, <c>N'</c> is to be at most 12.
</p>
<p>
- See <seealso marker="#REFERENCE_EXT">REFERENCE_EXT</seealso>).
+ See <seealso marker="#REFERENCE_EXT"><c>REFERENCE_EXT</c></seealso>.
</p>
</section>
<section>
<marker id="SMALL_ATOM_EXT"/>
<title>SMALL_ATOM_EXT</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
@@ -816,24 +790,28 @@
<cell align="center"><c>Len</c></cell>
<cell align="center"><c>AtomName</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>SMALL_ATOM_EXT</tcaption></table>
<p>
- An atom is stored with a 1 byte unsigned length,
- followed by <c>Len</c> numbers of 8 bit Latin1 characters that
+ An atom is stored with a 1 byte unsigned length,
+ followed by <c>Len</c> numbers of 8-bit Latin-1 characters that
forms the <c>AtomName</c>. Longer atoms can be represented
- by <seealso marker="#ATOM_EXT">ATOM_EXT</seealso>. <em>Note</em>
- the <c>SMALL_ATOM_EXT</c> was introduced in erts version 5.7.2 and
- require an exchange of the
- <seealso marker="erl_dist_protocol#dflags"><c>DFLAG_SMALL_ATOM_TAGS</c></seealso>
- distribution flag in the
- <seealso marker="erl_dist_protocol#distribution_handshake">distribution handshake</seealso>.
+ by <seealso marker="#ATOM_EXT"><c>ATOM_EXT</c></seealso>.
</p>
+ <note>
+ <p>
+ <c>SMALL_ATOM_EXT</c> was introduced in ERTS 5.7.2 and
+ require an exchange of distribution flag
+ <seealso marker="erl_dist_protocol#dflags">
+ <c>DFLAG_SMALL_ATOM_TAGS</c></seealso> in the
+ <seealso marker="erl_dist_protocol#distribution_handshake">
+ distribution handshake</seealso>.
+ </p>
+ </note>
</section>
<section>
<marker id="FUN_EXT"/>
<title>FUN_EXT</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
@@ -845,48 +823,56 @@
<cell align="center">N5</cell>
</row>
<row>
- <cell align="center">117</cell>
- <cell align="center">NumFree</cell>
- <cell align="center">Pid</cell>
- <cell align="center">Module</cell>
- <cell align="center">Index</cell>
- <cell align="center">Uniq</cell>
- <cell align="center">Free vars ...</cell>
+ <cell align="center"><c>117</c></cell>
+ <cell align="center"><c>NumFree</c></cell>
+ <cell align="center"><c>Pid</c></cell>
+ <cell align="center"><c>Module</c></cell>
+ <cell align="center"><c>Index</c></cell>
+ <cell align="center"><c>Uniq</c></cell>
+ <cell align="center"><c>Free vars ...</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>FUN_EXT</tcaption></table>
<taglist>
- <tag><c>Pid</c></tag>
+ <tag><c>Pid</c></tag>
<item>
- is a process identifier as in
- <seealso marker="#PID_EXT">PID_EXT</seealso>.
- It represents the process in which the fun was created.
+ <p>A process identifier as in
+ <seealso marker="#PID_EXT"><c>PID_EXT</c></seealso>.
+ Represents the process in which the fun was created.
+ </p>
</item>
<tag><c>Module</c></tag>
<item>
- is an encoded as an atom, using
- <seealso marker="#ATOM_EXT">ATOM_EXT</seealso>,
- <seealso marker="#SMALL_ATOM_EXT">SMALL_ATOM_EXT</seealso>
- or <seealso marker="#ATOM_CACHE_REF">ATOM_CACHE_REF</seealso>.
- This is the module that the fun is implemented in.
+ <p>Encoded as an atom, using
+ <seealso marker="#ATOM_EXT"><c>ATOM_EXT</c></seealso>,
+ <seealso marker="#SMALL_ATOM_EXT"><c>SMALL_ATOM_EXT</c></seealso>,
+ or <seealso marker="#ATOM_CACHE_REF">
+ <c>ATOM_CACHE_REF</c></seealso>.
+ This is the module that the fun is implemented in.
+ </p>
</item>
<tag><c>Index</c></tag>
<item>
- is an integer encoded using
- <seealso marker="#SMALL_INTEGER_EXT">SMALL_INTEGER_EXT</seealso>
- or <seealso marker="#INTEGER_EXT">INTEGER_EXT</seealso>.
- It is typically a small index into the module's fun table.
+ <p>An integer encoded using
+ <seealso marker="#SMALL_INTEGER_EXT">
+ <c>SMALL_INTEGER_EXT</c></seealso>
+ or <seealso marker="#INTEGER_EXT"><c>INTEGER_EXT</c></seealso>.
+ It is typically a small index into the module's fun table.
+ </p>
</item>
<tag><c>Uniq</c></tag>
<item>
- is an integer encoded using
- <seealso marker="#SMALL_INTEGER_EXT">SMALL_INTEGER_EXT</seealso> or
- <seealso marker="#INTEGER_EXT">INTEGER_EXT</seealso>.
- <c>Uniq</c> is the hash value of the parse for the fun.
+ <p>An integer encoded using
+ <seealso marker="#SMALL_INTEGER_EXT">
+ <c>SMALL_INTEGER_EXT</c></seealso> or
+ <seealso marker="#INTEGER_EXT"><c>INTEGER_EXT</c></seealso>.
+ <c>Uniq</c> is the hash value of the parse for the fun.
+ </p>
</item>
<tag><c>Free vars</c></tag>
<item>
- is <c>NumFree</c> number of terms, each one encoded according
- to its type.
+ <p><c>NumFree</c> number of terms, each one encoded according
+ to its type.
+ </p>
</item>
</taglist>
</section>
@@ -894,7 +880,6 @@
<section>
<marker id="NEW_FUN_EXT"/>
<title>NEW_FUN_EXT</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
@@ -910,19 +895,19 @@
<cell align="center">N5</cell>
</row>
<row>
- <cell align="center">112</cell>
- <cell align="center">Size</cell>
- <cell align="center">Arity</cell>
- <cell align="center">Uniq</cell>
- <cell align="center">Index</cell>
- <cell align="center">NumFree</cell>
- <cell align="center">Module</cell>
- <cell align="center">OldIndex</cell>
- <cell align="center">OldUniq</cell>
- <cell align="center">Pid</cell>
- <cell align="center">Free Vars</cell>
+ <cell align="center"><c>112</c></cell>
+ <cell align="center"><c>Size</c></cell>
+ <cell align="center"><c>Arity</c></cell>
+ <cell align="center"><c>Uniq</c></cell>
+ <cell align="center"><c>Index</c></cell>
+ <cell align="center"><c>NumFree</c></cell>
+ <cell align="center"><c>Module</c></cell>
+ <cell align="center"><c>OldIndex</c></cell>
+ <cell align="center"><c>OldUniq</c></cell>
+ <cell align="center"><c>Pid</c></cell>
+ <cell align="center"><c>Free Vars</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>NEW_FUN_EXT</tcaption></table>
<p>
This is the new encoding of internal funs: <c>fun F/A</c> and
<c>fun(Arg1,..) -> ... end</c>.
@@ -930,68 +915,73 @@
<taglist>
<tag><c>Size</c></tag>
<item>
- is the total number of bytes, including the <c>Size</c> field.
+ <p>The total number of bytes, including field <c>Size</c>.</p>
</item>
<tag><c>Arity</c></tag>
<item>
- is the arity of the function implementing the fun.
+ <p>The arity of the function implementing the fun.</p>
</item>
<tag><c>Uniq</c></tag>
<item>
- is the 16 bytes MD5 of the significant parts of the Beam file.
+ <p>The 16 bytes MD5 of the significant parts of the Beam file.</p>
</item>
<tag><c>Index</c></tag>
<item>
- is an index number. Each fun within a module has an unique
- index. <c>Index</c> is stored in big-endian byte order.
+ <p>An index number. Each fun within a module has an unique
+ index. <c>Index</c> is stored in big-endian byte order.
+ </p>
</item>
<tag><c>NumFree</c></tag>
<item>
- is the number of free variables.
+ <p>The number of free variables.</p>
</item>
<tag><c>Module</c></tag>
<item>
- is an encoded as an atom, using
- <seealso marker="#ATOM_EXT">ATOM_EXT</seealso>,
- <seealso marker="#SMALL_ATOM_EXT">SMALL_ATOM_EXT</seealso> or
- <seealso marker="#ATOM_CACHE_REF">ATOM_CACHE_REF</seealso>.
- This is the module that the fun is implemented in.
+ <p>Encoded as an atom, using
+ <seealso marker="#ATOM_EXT"><c>ATOM_EXT</c></seealso>,
+ <seealso marker="#SMALL_ATOM_EXT"><c>SMALL_ATOM_EXT</c></seealso>,
+ or <seealso marker="#ATOM_CACHE_REF">
+ <c>ATOM_CACHE_REF</c></seealso>.
+ Is the module that the fun is implemented in.
+ </p>
</item>
<tag><c>OldIndex</c></tag>
<item>
- is an integer encoded using
- <seealso marker="#SMALL_INTEGER_EXT">SMALL_INTEGER_EXT</seealso>
- or <seealso marker="#INTEGER_EXT">INTEGER_EXT</seealso>.
- It is typically a small index into the module's fun table.
+ <p>An integer encoded using
+ <seealso marker="#SMALL_INTEGER_EXT">
+ <c>SMALL_INTEGER_EXT</c></seealso> or
+ <seealso marker="#INTEGER_EXT"><c>INTEGER_EXT</c></seealso>.
+ Is typically a small index into the module's fun table.
+ </p>
</item>
<tag><c>OldUniq</c></tag>
<item>
- is an integer encoded using
- <seealso marker="#SMALL_INTEGER_EXT">SMALL_INTEGER_EXT</seealso>
- or
- <seealso marker="#INTEGER_EXT">INTEGER_EXT</seealso>.
- <c>Uniq</c> is the hash value of the parse tree for the fun.
+ <p>An integer encoded using
+ <seealso marker="#SMALL_INTEGER_EXT">
+ <c>SMALL_INTEGER_EXT</c></seealso> or
+ <seealso marker="#INTEGER_EXT"><c>INTEGER_EXT</c></seealso>.
+ <c>Uniq</c> is the hash value of the parse tree for the fun.
+ </p>
</item>
<tag><c>Pid</c></tag>
<item>
- is a process identifier as in
- <seealso marker="#PID_EXT">PID_EXT</seealso>.
- It represents the process in which
- the fun was created.
+ <p>A process identifier as in
+ <seealso marker="#PID_EXT"><c>PID_EXT</c></seealso>.
+ Represents the process in which the fun was created.
+ </p>
</item>
-
<tag><c>Free vars</c></tag>
<item>
- is <c>NumFree</c> number of terms, each one encoded according
- to its type.
+ <p><c>NumFree</c> number of terms, each one encoded according
+ to its type.
+ </p>
</item>
</taglist>
</section>
<section>
<marker id="EXPORT_EXT"/>
- <title>EXPORT_EXT</title>
-
+ <title>EXPORT_EXT</title>
<table align="left">
<row>
<cell align="center">1</cell>
@@ -1000,32 +990,31 @@
<cell align="center">N3</cell>
</row>
<row>
- <cell align="center">113</cell>
- <cell align="center">Module</cell>
- <cell align="center">Function</cell>
- <cell align="center">Arity</cell>
+ <cell align="center"><c>113</c></cell>
+ <cell align="center"><c>Module</c></cell>
+ <cell align="center"><c>Function</c></cell>
+ <cell align="center"><c>Arity</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>EXPORT_EXT</tcaption></table>
<p>
This term is the encoding for external funs: <c>fun M:F/A</c>.
</p>
<p>
- <c>Module</c> and <c>Function</c> are atoms
- (encoded using <seealso marker="#ATOM_EXT">ATOM_EXT</seealso>,
- <seealso marker="#SMALL_ATOM_EXT">SMALL_ATOM_EXT</seealso> or
- <seealso marker="#ATOM_CACHE_REF">ATOM_CACHE_REF</seealso>).
+ <c>Module</c> and <c>Function</c> are atoms
+ (encoded using <seealso marker="#ATOM_EXT"><c>ATOM_EXT</c></seealso>,
+ <seealso marker="#SMALL_ATOM_EXT"><c>SMALL_ATOM_EXT</c></seealso>, or
+ <seealso marker="#ATOM_CACHE_REF"><c>ATOM_CACHE_REF</c></seealso>).
</p>
<p>
- <c>Arity</c> is an integer encoded using
- <seealso marker="#SMALL_INTEGER_EXT">SMALL_INTEGER_EXT</seealso>.
+ <c>Arity</c> is an integer encoded using
+ <seealso marker="#SMALL_INTEGER_EXT">
+ <c>SMALL_INTEGER_EXT</c></seealso>.
</p>
-
</section>
<section>
<marker id="BIT_BINARY_EXT"/>
<title>BIT_BINARY_EXT</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
@@ -1034,39 +1023,35 @@
<cell align="center">Len</cell>
</row>
<row>
- <cell align="center">77</cell>
- <cell align="center">Len</cell>
- <cell align="center">Bits</cell>
- <cell align="center">Data</cell>
+ <cell align="center"><c>77</c></cell>
+ <cell align="center"><c>Len</c></cell>
+ <cell align="center"><c>Bits</c></cell>
+ <cell align="center"><c>Data</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>BIT_BINARY_EXT</tcaption></table>
<p>
This term represents a bitstring whose length in bits does
not have to be a multiple of 8.
- The <c>Len</c> field is an unsigned 4 byte integer (big endian).
+ The <c>Len</c> field is an unsigned 4 byte integer (big-endian).
The <c>Bits</c> field is the number of bits (1-8) that are used
- in the last byte in the data field,
- counting from the most significant bit towards the least
- significant.
+ in the last byte in the data field,
+ counting from the most significant bit to the least significant.
</p>
-
-
</section>
<section>
<marker id="NEW_FLOAT_EXT"/>
<title>NEW_FLOAT_EXT</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
<cell align="center">8</cell>
</row>
<row>
- <cell align="center">70</cell>
- <cell align="center">IEEE float</cell>
+ <cell align="center"><c>70</c></cell>
+ <cell align="center"><c>IEEE float</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>NEW_FLOAT_EXT</tcaption></table>
<p>
A float is stored as 8 bytes in big-endian IEEE format.
</p>
@@ -1074,10 +1059,10 @@
This term is used in minor version 1 of the external format.
</p>
</section>
+
<section>
<marker id="ATOM_UTF8_EXT"/>
<title>ATOM_UTF8_EXT</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
@@ -1089,23 +1074,22 @@
<cell align="center"><c>Len</c></cell>
<cell align="center"><c>AtomName</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>ATOM_UTF8_EXT</tcaption></table>
<p>
An atom is stored with a 2 byte unsigned length in big-endian order,
followed by <c>Len</c> bytes containing the <c>AtomName</c> encoded
in UTF-8.
</p>
<p>
- For more information on encoding of atoms, see
+ For more information on encoding of atoms, see the
<seealso marker="#utf8_atoms">note on UTF-8 encoded atoms</seealso>
- in the beginning of this document.
+ in the beginning of this section.
</p>
</section>
<section>
<marker id="SMALL_ATOM_UTF8_EXT"/>
<title>SMALL_ATOM_UTF8_EXT</title>
-
<table align="left">
<row>
<cell align="center">1</cell>
@@ -1117,20 +1101,19 @@
<cell align="center"><c>Len</c></cell>
<cell align="center"><c>AtomName</c></cell>
</row>
- <tcaption></tcaption></table>
+ <tcaption>SMALL_ATOM_UTF8_EXT</tcaption></table>
<p>
- An atom is stored with a 1 byte unsigned length,
+ An atom is stored with a 1 byte unsigned length,
followed by <c>Len</c> bytes containing the <c>AtomName</c> encoded
in UTF-8. Longer atoms encoded in UTF-8 can be represented using
- <seealso marker="#ATOM_UTF8_EXT">ATOM_UTF8_EXT</seealso>.
+ <seealso marker="#ATOM_UTF8_EXT"><c>ATOM_UTF8_EXT</c></seealso>.
</p>
<p>
- For more information on encoding of atoms, see
+ For more information on encoding of atoms, see the
<seealso marker="#utf8_atoms">note on UTF-8 encoded atoms</seealso>
- in the beginning of this document.
+ in the beginning of this section.
</p>
</section>
-
</chapter>
-
+
diff --git a/erts/doc/src/erl_nif.xml b/erts/doc/src/erl_nif.xml
index fefec3eeb6..b5dc9037c4 100644
--- a/erts/doc/src/erl_nif.xml
+++ b/erts/doc/src/erl_nif.xml
@@ -33,43 +33,52 @@
<file>erl_nif.xml</file>
</header>
<lib>erl_nif</lib>
- <libsummary>API functions for an Erlang NIF library</libsummary>
+ <libsummary>API functions for an Erlang NIF library.</libsummary>
<description>
<p>A NIF library contains native implementation of some functions
- of an Erlang module. The native implemented functions (NIFs) are
- called like any other functions without any difference to the
- caller. Each NIF must also have an implementation in Erlang that
- will be invoked if the function is called before the NIF library
- has been successfully loaded. A typical such stub implementation
- is to throw an exception. But it can also be used as a fallback
- implementation if the NIF library is not implemented for some
- architecture.</p>
- <marker id="WARNING"/>
- <warning><p><em>Use this functionality with extreme care!</em></p>
+ of an Erlang module. The native implemented functions (NIFs) are
+ called like any other functions without any difference to the
+ caller. Each NIF must have an implementation in Erlang that
+ is invoked if the function is called before the NIF library
+ is successfully loaded. A typical such stub implementation
+ is to throw an exception. But it can also be used as a fallback
+ implementation if the NIF library is not implemented for some
+ architecture.</p>
+
+ <warning>
+ <marker id="WARNING"/>
+ <p><em>Use this functionality with extreme care.</em></p>
<p>A native function is executed as a direct extension of the
- native code of the VM. Execution is not made in a safe environment.
- The VM can <em>not</em> provide the same services as provided when
- executing Erlang code, such as preemptive scheduling or memory
- protection. If the native function doesn't behave well, the whole
- VM will misbehave.</p>
- <list>
- <item><p>A native function that crash will crash the whole VM.</p></item>
- <item><p>An erroneously implemented native function might cause
- a VM internal state inconsistency which may cause a crash of the VM,
- or miscellaneous misbehaviors of the VM at any point after the call
- to the native function.</p></item>
- <item><p>A native function that do <seealso marker="#lengthy_work">lengthy
- work</seealso> before returning will degrade responsiveness of the VM,
- and may cause miscellaneous strange behaviors. Such strange behaviors
- include, but are not limited to, extreme memory usage, and bad load
- balancing between schedulers. Strange behaviors that might occur due
- to lengthy work may also vary between OTP releases.</p></item>
+ native code of the VM. Execution is not made in a safe environment.
+ The VM <em>cannot</em> provide the same services as provided when
+ executing Erlang code, such as pre-emptive scheduling or memory
+ protection. If the native function does not behave well, the whole
+ VM will misbehave.</p>
+ <list type="bulleted">
+ <item>
+ <p>A native function that crash will crash the whole VM.</p>
+ </item>
+ <item>
+ <p>An erroneously implemented native function can cause a VM
+ internal state inconsistency, which can cause a crash of the VM,
+ or miscellaneous misbehaviors of the VM at any point after the
+ call to the native function.</p>
+ </item>
+ <item>
+ <p>A native function doing <seealso marker="#lengthy_work">lengthy
+ work</seealso> before returning degrades responsiveness of the VM,
+ and can cause miscellaneous strange behaviors. Such strange
+ behaviors include, but are not limited to, extreme memory usage,
+ and bad load balancing between schedulers. Strange behaviors that
+ can occur because of lengthy work can also vary between Erlang/OTP
+ releases.</p>
+ </item>
</list>
- </warning>
+ </warning>
- <p>A minimal example of a NIF library can look like this:</p>
- <p/>
- <code type="none">
+ <p>A minimal example of a NIF library can look as follows:</p>
+
+ <code type="none">
/* niftest.c */
#include "erl_nif.h"
@@ -83,13 +92,11 @@ static ErlNifFunc nif_funcs[] =
{"hello", 0, hello}
};
-ERL_NIF_INIT(niftest,nif_funcs,NULL,NULL,NULL,NULL)
-</code>
+ERL_NIF_INIT(niftest,nif_funcs,NULL,NULL,NULL,NULL)</code>
+
+ <p>The Erlang module can look as follows:</p>
- <p>and the Erlang module would have to look something like
- this:</p>
- <p/>
- <code type="none">
+ <code type="none">
-module(niftest).
-export([init/0, hello/0]).
@@ -98,11 +105,11 @@ init() ->
erlang:load_nif("./niftest", 0).
hello() ->
- "NIF library not loaded".
-</code>
- <p>and compile and test something like this (on Linux):</p>
- <p/>
- <code type="none">
+ "NIF library not loaded".</code>
+
+ <p>Compile and test can look as follows (on Linux):</p>
+
+ <code type="none">
$> gcc -fPIC -shared -o niftest.so niftest.c -I $ERL_ROOT/usr/include/
$> erl
@@ -113,1339 +120,1936 @@ $> erl
3> niftest:init().
ok
4> niftest:hello().
-"Hello world!"
-</code>
-
- <p>A better solution for a real module is to take advantage of
- the new directive <seealso
- marker="doc/reference_manual:code_loading#on_load">on_load</seealso> to automatically
- load the NIF library when the module is loaded.</p>
- <note><p>A NIF does not have to be exported, it can be local to the module.
- Note however that unused local stub functions will be optimized
- away by the compiler causing loading of the NIF library to fail.</p>
+"Hello world!"</code>
+
+ <p>A better solution for a real module is to take advantage of the new
+ directive <c>on load</c> (see section
+ <seealso marker="doc/reference_manual:code_loading#on_load">Running a
+ Function When a Module is Loaded</seealso> in the Erlang Reference
+ Manual) to load the NIF library automatically when the module is
+ loaded.</p>
+
+ <note>
+ <p>A NIF does not have to be exported, it can be local to the module.
+ However, unused local stub functions will be optimized
+ away by the compiler, causing loading of the NIF library to fail.</p>
</note>
- <p>A loaded NIF library is tied to the Erlang module code version
- that loaded it. If the module is upgraded with a new version, the
- new Erlang code will have to load its own NIF library (or maybe choose not
- to). The new code version can however choose to load the exact
- same NIF library as the old code if it wants to. Sharing the same
- dynamic library will mean that static data defined by the library
- will be shared as well. To avoid unintentionally shared static
- data, each Erlang module code can keep its own private data. This
- private data can be set when the NIF library is loaded and
- then retrieved by calling <seealso marker="#enif_priv_data">enif_priv_data</seealso>.</p>
- <p>There is no way to explicitly unload a NIF library. A library will be
- automatically unloaded when the module code that it belongs to is purged
- by the code server.</p>
+ <p>A loaded NIF library is tied to the Erlang module code version
+ that loaded it. If the module is upgraded with a new version, the
+ new Erlang code need to load its own NIF library (or maybe choose not
+ to). The new code version can, however, choose to load the
+ same NIF library as the old code if it wants to. Sharing the
+ dynamic library means that static data defined by the library
+ is shared as well. To avoid unintentionally shared static
+ data, each Erlang module code can keep its own private data. This
+ private data can be set when the NIF library is loaded and
+ then retrieved by calling <seealso marker="#enif_priv_data">
+ <c>enif_priv_data</c></seealso>.</p>
+
+ <p>A NIF library cannot be loaded explicitly. A library is
+ automatically unloaded when the module code that it belongs to is purged
+ by the code server.</p>
</description>
+
<section>
- <title>FUNCTIONALITY</title>
- <p>All functions that a NIF library needs to do with Erlang are
- performed through the NIF API functions. There are functions
+ <title>Functionality</title>
+ <p>All functions that a NIF library needs to do with Erlang are
+ performed through the NIF API functions. Functions exist
for the following functionality:</p>
+
<taglist>
<tag>Read and write Erlang terms</tag>
- <item><p>Any Erlang terms can be passed to a NIF as function arguments and
- be returned as function return values. The terms are of C-type
- <seealso marker="#ERL_NIF_TERM">ERL_NIF_TERM</seealso>
- and can only be read or written using API functions. Most functions to read
- the content of a term are prefixed <c>enif_get_</c> and usually return
- true (or false) if the term was of the expected type (or not).
- The functions to write terms are all prefixed <c>enif_make_</c> and usually
- return the created <c>ERL_NIF_TERM</c>. There are also some functions
- to query terms, like <c>enif_is_atom</c>, <c>enif_is_identical</c> and
- <c>enif_compare</c>.</p>
- <p>All terms of type <c>ERL_NIF_TERM</c> belong to an environment of type
- <seealso marker="#ErlNifEnv">ErlNifEnv</seealso>. The lifetime of a term is
- controlled by the lifetime of its environment object. All API functions that read
- or write terms has the environment, that the term belongs to, as the first
- function argument.</p></item>
+ <item>
+ <p>Any Erlang terms can be passed to a NIF as function arguments and
+ be returned as function return values. The terms are of C-type
+ <seealso marker="#ERL_NIF_TERM"><c>ERL_NIF_TERM</c></seealso> and can
+ only be read or written using API functions. Most functions to read
+ the content of a term are prefixed <c>enif_get_</c> and usually return
+ <c>true</c> (or <c>false</c>) if the term is of the expected type (or
+ not). The functions to write terms are all prefixed <c>enif_make_</c>
+ and usually
+ return the created <c>ERL_NIF_TERM</c>. There are also some functions
+ to query terms, like <c>enif_is_atom</c>, <c>enif_is_identical</c>,
+ and <c>enif_compare</c>.</p>
+ <p>All terms of type <c>ERL_NIF_TERM</c> belong to an environment of
+ type <seealso marker="#ErlNifEnv"><c>ErlNifEnv</c></seealso>. The
+ lifetime of a term is controlled by the lifetime of its environment
+ object. All API functions that read or write terms has the
+ environment that the term belongs to as the first function
+ argument.</p>
+ </item>
<tag>Binaries</tag>
- <item><p>Terms of type binary are accessed with the help of the struct type
- <seealso marker="#ErlNifBinary">ErlNifBinary</seealso>
- that contains a pointer (<c>data</c>) to the raw binary data and the length
- (<c>size</c>) of the data in bytes. Both <c>data</c> and <c>size</c> are
- read-only and should only be written using calls to API functions.
- Instances of <c>ErlNifBinary</c> are however always allocated by the user
- (usually as local variables).</p>
- <p>The raw data pointed to by <c>data</c> is only mutable after a call to
- <seealso marker="#enif_alloc_binary">enif_alloc_binary</seealso> or
- <seealso marker="#enif_realloc_binary">enif_realloc_binary</seealso>.
- All other functions that operates on a binary will leave the data as read-only.
- A mutable binary must in the end either be freed with
- <seealso marker="#enif_release_binary">enif_release_binary</seealso>
- or made read-only by transferring it to an Erlang term with
- <seealso marker="#enif_make_binary">enif_make_binary</seealso>.
- But it does not have to happen in the same NIF call. Read-only binaries
- do not have to be released.</p>
- <p><seealso marker="#enif_make_new_binary">enif_make_new_binary</seealso>
- can be used as a shortcut to allocate and return a binary in the same NIF call.</p>
- <p>Binaries are sequences of whole bytes. Bitstrings with an arbitrary
- bit length have no support yet.</p>
- </item>
+ <item>
+ <p>Terms of type binary are accessed with the help of struct type
+ <seealso marker="#ErlNifBinary"><c>ErlNifBinary</c></seealso>,
+ which contains a pointer (<c>data</c>) to the raw binary data and the
+ length (<c>size</c>) of the data in bytes. Both <c>data</c> and
+ <c>size</c> are read-only and are only to be written using calls to
+ API functions. Instances of <c>ErlNifBinary</c> are, however, always
+ allocated by the user (usually as local variables).</p>
+ <p>The raw data pointed to by <c>data</c> is only mutable after a call
+ to <seealso marker="#enif_alloc_binary">
+ <c>enif_alloc_binary</c></seealso> or
+ <seealso marker="#enif_realloc_binary">
+ <c>enif_realloc_binary</c></seealso>. All other functions that
+ operate on a binary leave the data as read-only.
+ A mutable binary must in the end either be freed with
+ <seealso marker="#enif_release_binary">
+ <c>enif_release_binary</c></seealso>
+ or made read-only by transferring it to an Erlang term with
+ <seealso marker="#enif_make_binary"><c>enif_make_binary</c></seealso>.
+ However, it does not have to occur in the same NIF call. Read-only
+ binaries do not have to be released.</p>
+ <p><seealso marker="#enif_make_new_binary">
+ <c>enif_make_new_binary</c></seealso> can be used as a shortcut to
+ allocate and return a binary in the same NIF call.</p>
+ <p>Binaries are sequences of whole bytes. Bitstrings with an arbitrary
+ bit length have no support yet.</p>
+ </item>
<tag>Resource objects</tag>
- <item><p>The use of resource objects is a safe way to return pointers to
- native data structures from a NIF. A resource object is
- just a block of memory allocated with
- <seealso marker="#enif_alloc_resource">enif_alloc_resource</seealso>.
- A handle ("safe pointer") to this memory block can then be returned to Erlang by the use of
- <seealso marker="#enif_make_resource">enif_make_resource</seealso>.
- The term returned by <c>enif_make_resource</c>
- is totally opaque in nature. It can be stored and passed between processes
- on the same node, but the only real end usage is to pass it back as an argument to a NIF.
- The NIF can then call <seealso marker="#enif_get_resource">enif_get_resource</seealso>
- and get back a pointer to the memory block that is guaranteed to still be
- valid. A resource object will not be deallocated until the last handle term
- has been garbage collected by the VM and the resource has been
- released with <seealso marker="#enif_release_resource">enif_release_resource</seealso>
- (not necessarily in that order).</p>
- <p>All resource objects are created as instances of some <em>resource type</em>.
- This makes resources from different modules to be distinguishable.
- A resource type is created by calling
- <seealso marker="#enif_open_resource_type">enif_open_resource_type</seealso>
- when a library is loaded. Objects of that resource type can then later be allocated
- and <c>enif_get_resource</c> verifies that the resource is of the expected type.
- A resource type can have a user supplied destructor function that is
- automatically called when resources of that type are released (by either
- the garbage collector or <c>enif_release_resource</c>). Resource types
- are uniquely identified by a supplied name string and the name of the
- implementing module.</p>
- <marker id="enif_resource_example"/><p>Here is a template example of how to create and return a resource object.</p>
- <p/>
- <code type="none">
- ERL_NIF_TERM term;
- MyStruct* obj = enif_alloc_resource(my_resource_type, sizeof(MyStruct));
-
- /* initialize struct ... */
-
- term = enif_make_resource(env, obj);
-
- if (keep_a_reference_of_our_own) {
- /* store 'obj' in static variable, private data or other resource object */
- }
- else {
- enif_release_resource(obj);
- /* resource now only owned by "Erlang" */
- }
- return term;
- </code>
- <p>Note that once <c>enif_make_resource</c> creates the term to
- return to Erlang, the code can choose to either keep its own
- native pointer to the allocated struct and release it later, or
- release it immediately and rely solely on the garbage collector
- to eventually deallocate the resource object when it collects
- the term.</p>
- <p>Another usage of resource objects is to create binary terms with
- user defined memory management.
- <seealso marker="#enif_make_resource_binary">enif_make_resource_binary</seealso>
- will create a binary term that is connected to a resource object. The
- destructor of the resource will be called when the binary is garbage
- collected, at which time the binary data can be released. An example of
- this can be a binary term consisting of data from a <c>mmap</c>'ed file.
- The destructor can then do <c>munmap</c> to release the memory
- region.</p>
- <p>Resource types support upgrade in runtime by allowing a loaded NIF
- library to takeover an already existing resource type and thereby
- "inherit" all existing objects of that type. The destructor of the new
- library will thereafter be called for the inherited objects and the
- library with the old destructor function can be safely unloaded. Existing
- resource objects, of a module that is upgraded, must either be deleted
- or taken over by the new NIF library. The unloading of a library will be
- postponed as long as there exist resource objects with a destructor
- function in the library.
- </p>
+ <item>
+ <p>The use of resource objects is a safe way to return pointers to
+ native data structures from a NIF. A resource object is
+ only a block of memory allocated with
+ <seealso marker="#enif_alloc_resource">
+ <c>enif_alloc_resource</c></seealso>.
+ A handle ("safe pointer") to this memory block can then be returned
+ to Erlang by the use of
+ <seealso marker="#enif_make_resource">
+ <c>enif_make_resource</c></seealso>.
+ The term returned by <c>enif_make_resource</c> is opaque in nature.
+ It can be stored and passed between processes on the same node, but
+ the only real end usage is to pass it back as an argument to a NIF.
+ The NIF can then call <seealso marker="#enif_get_resource">
+ <c>enif_get_resource</c></seealso> and get back a pointer to the
+ memory block, which is guaranteed to still be valid. A resource
+ object is not deallocated until the last handle term
+ is garbage collected by the VM and the resource is released with
+ <seealso marker="#enif_release_resource">
+ <c>enif_release_resource</c></seealso>
+ (not necessarily in that order).</p>
+ <p>All resource objects are created as instances of some <em>resource
+ type</em>. This makes resources from different modules to be
+ distinguishable. A resource type is created by calling
+ <seealso marker="#enif_open_resource_type">
+ <c>enif_open_resource_type</c></seealso> when a library is loaded.
+ Objects of that resource type can then later be allocated and
+ <c>enif_get_resource</c> verifies that the resource is of the
+ expected type. A resource type can have a user-supplied destructor
+ function, which is automatically called when resources of that type
+ are released (by either the garbage collector or
+ <c>enif_release_resource</c>). Resource types are uniquely identified
+ by a supplied name string and the name of the implementing module.</p>
+ <marker id="enif_resource_example"/>
+ <p>The following is a template example of how to create and return a
+ resource object.</p>
+ <code type="none">
+ERL_NIF_TERM term;
+MyStruct* obj = enif_alloc_resource(my_resource_type, sizeof(MyStruct));
+
+/* initialize struct ... */
+
+term = enif_make_resource(env, obj);
+
+if (keep_a_reference_of_our_own) {
+ /* store 'obj' in static variable, private data or other resource object */
+}
+else {
+ enif_release_resource(obj);
+ /* resource now only owned by "Erlang" */
+}
+return term;</code>
+ <p>Notice that once <c>enif_make_resource</c> creates the term to
+ return to Erlang, the code can choose to either keep its own
+ native pointer to the allocated struct and release it later, or
+ release it immediately and rely only on the garbage collector
+ to deallocate the resource object eventually when it collects
+ the term.</p>
+ <p>Another use of resource objects is to create binary terms with
+ user-defined memory management.
+ <seealso marker="#enif_make_resource_binary">
+ <c>enif_make_resource_binary</c></seealso>
+ creates a binary term that is connected to a resource object. The
+ destructor of the resource is called when the binary is garbage
+ collected, at which time the binary data can be released. An example
+ of this can be a binary term consisting of data from a <c>mmap</c>'ed
+ file. The destructor can then do <c>munmap</c> to release the memory
+ region.</p>
+ <p>Resource types support upgrade in runtime by allowing a loaded NIF
+ library to take over an already existing resource type and by that
+ "inherit" all existing objects of that type. The destructor of the
+ new library is thereafter called for the inherited objects and the
+ library with the old destructor function can be safely unloaded.
+ Existing resource objects, of a module that is upgraded, must either
+ be deleted or taken over by the new NIF library. The unloading of a
+ library is postponed as long as there exist resource objects with a
+ destructor function in the library.</p>
</item>
<tag>Threads and concurrency</tag>
- <item><p>A NIF is thread-safe without any explicit synchronization as
- long as it acts as a pure function and only reads the supplied
- arguments. As soon as you write towards a shared state either through
- static variables or <seealso marker="#enif_priv_data">enif_priv_data</seealso>
- you need to supply your own explicit synchronization. This includes terms
- in process independent environments that are shared between threads.
- Resource objects will also require synchronization if you treat them as
- mutable.</p>
- <p>The library initialization callbacks <c>load</c>, <c>reload</c> and
- <c>upgrade</c> are all thread-safe even for shared state data.</p>
+ <item>
+ <p>A NIF is thread-safe without any explicit synchronization as
+ long as it acts as a pure function and only reads the supplied
+ arguments. When you write to a shared state either through
+ static variables or <seealso marker="#enif_priv_data">
+ <c>enif_priv_data</c></seealso>, you need to supply your own explicit
+ synchronization. This includes terms in process-independent
+ environments that are shared between threads. Resource objects also
+ require synchronization if you treat them as mutable.</p>
+ <p>The library initialization callbacks <c>load</c>, <c>reload</c>, and
+ <c>upgrade</c> are all thread-safe even for shared state data.</p>
</item>
-
<tag><marker id="version_management"/>Version Management</tag>
- <item><p>
- When a NIF library is built, information about NIF API version
- is compiled into the library. When a NIF library is loaded the
- runtime system verifies that the library is of a compatible version.
- <c>erl_nif.h</c> defines <c>ERL_NIF_MAJOR_VERSION</c>, and
- <c>ERL_NIF_MINOR_VERSION</c>. <c>ERL_NIF_MAJOR_VERSION</c> will be
- incremented when NIF library incompatible changes are made to the
- Erlang runtime system. Normally it will suffice to recompile the NIF
- library when the <c>ERL_NIF_MAJOR_VERSION</c> has changed, but it
- could, under rare circumstances, mean that NIF libraries have to
- be slightly modified. If so, this will of course be documented.
- <c>ERL_NIF_MINOR_VERSION</c> will be incremented when
- new features are added. The runtime system uses the minor version
- to determine what features to use.
- </p><p>
- The runtime system will normally refuse to load a NIF library if
- the major versions differ, or if the major versions are equal and
- the minor version used by the NIF library is greater than the one
- used by the runtime system. Old NIF libraries with lower major
- versions will however be allowed after a bump of the major version
- during a transition period of two major releases. Such old NIF
- libraries might however fail if deprecated features are used.
- </p></item>
-
+ <item>
+ <p>When a NIF library is built, information about the NIF API version
+ is compiled into the library. When a NIF library is loaded, the
+ runtime system verifies that the library is of a compatible version.
+ <c>erl_nif.h</c> defines the following:</p>
+ <taglist>
+ <tag><c>ERL_NIF_MAJOR_VERSION</c></tag>
+ <item>
+ <p>Incremented when NIF library incompatible changes are made to the
+ Erlang runtime system. Normally it suffices to recompile the NIF
+ library when the <c>ERL_NIF_MAJOR_VERSION</c> has changed, but it
+ can, under rare circumstances, mean that NIF libraries must be
+ slightly modified. If so, this will of course be documented.</p>
+ </item>
+ <tag><c>ERL_NIF_MINOR_VERSION</c></tag>
+ <item>
+ <p>Incremented when new features are added. The runtime system uses
+ the minor version to determine what features to use.</p>
+ </item>
+ </taglist>
+ <p>The runtime system normally refuses to load a NIF library if
+ the major versions differ, or if the major versions are equal and
+ the minor version used by the NIF library is greater than the one
+ used by the runtime system. Old NIF libraries with lower major
+ versions are, however, allowed after a bump of the major version
+ during a transition period of two major releases. Such old NIF
+ libraries can however fail if deprecated features are used.</p>
+ </item>
<tag><marker id="time_measurement"/>Time Measurement</tag>
- <item><p>Support for time measurement in NIF libraries:
- <list>
- <item><seealso marker="#ErlNifTime"><c>ErlNifTime</c></seealso></item>
- <item><seealso marker="#ErlNifTimeUnit"><c>ErlNifTimeUnit</c></seealso></item>
- <item><seealso marker="#enif_monotonic_time"><c>enif_monotonic_time()</c></seealso></item>
- <item><seealso marker="#enif_time_offset"><c>enif_time_offset()</c></seealso></item>
- <item><seealso marker="#enif_convert_time_unit"><c>enif_convert_time_unit()</c></seealso></item>
- </list></p>
+ <item>
+ <p>Support for time measurement in NIF libraries:</p>
+ <list type="bulleted">
+ <item><seealso marker="#ErlNifTime">
+ <c>ErlNifTime</c></seealso></item>
+ <item><seealso marker="#ErlNifTimeUnit">
+ <c>ErlNifTimeUnit</c></seealso></item>
+ <item><seealso marker="#enif_monotonic_time">
+ <c>enif_monotonic_time()</c></seealso></item>
+ <item><seealso marker="#enif_time_offset">
+ <c>enif_time_offset()</c></seealso></item>
+ <item><seealso marker="#enif_convert_time_unit">
+ <c>enif_convert_time_unit()</c></seealso></item>
+ </list>
</item>
-
<tag><marker id="lengthy_work"/>Long-running NIFs</tag>
-
- <item><p>
- As mentioned in the <seealso marker="#WARNING">warning</seealso> text at
- the beginning of this document it is of <em>vital importance</em> that a
- native function return relatively quickly. It is hard to give an exact
- maximum amount of time that a native function is allowed to work, but as a
- rule of thumb a well-behaving native function should return to its caller
- before a millisecond has passed. This can be achieved using different
- approaches. If you have full control over the code to execute in the
- native function, the best approach is to divide the work into multiple
- chunks of work and call the native function multiple times. In some
- cases this might however not always be possible, e.g. when calling
- third-party libraries.</p>
-
- <p>The
- <seealso marker="#enif_consume_timeslice">enif_consume_timeslice()</seealso>
- function can be used to inform the runtime system about the lenght of the
- NIF call. It should typically always be used unless the NIF executes very
- quickly.</p>
-
- <p>If the NIF call is too lenghty one needs to handle this in one of the
- following ways in order to avoid degraded responsiveness, scheduler load
- balancing problems, and other strange behaviours:</p>
-
- <taglist>
- <tag>Yielding NIF</tag>
- <item>
- <p>
- If the functionality of a long-running NIF can be split so that
- its work can be achieved through a series of shorter NIF calls,
- the application can either make that series of NIF calls from the
- Erlang level, or it can call a NIF that first performs a chunk of
- the work, then invokes the
- <seealso marker="#enif_schedule_nif">enif_schedule_nif</seealso>
- function to schedule another NIF call to perform the next chunk.
- The final call scheduled in this manner can then return the
- overall result. Breaking up a long-running function in
- this manner enables the VM to regain control between calls to the
- NIFs.
- </p>
- <p>
- This approach is always preferred over the other alternatives
- described below. This both from a performance perspective and
- a system characteristics perspective.
- </p>
- </item>
-
- <tag>Threaded NIF</tag>
- <item>
- <p>
- This is accomplished by dispatching the work to another thread
- managed by the NIF library, return from the NIF, and wait for the
- result. The thread can send the result back to the Erlang
- process using <seealso marker="#enif_send">enif_send</seealso>.
- Information about thread primitives can be found below.
- </p>
- </item>
-
- <tag><marker id="dirty_nifs"/>Dirty NIF</tag>
- <item>
-
- <note>
- <p>
- <em>The dirty NIF functionality described here
- is experimental</em>. Dirty NIF support is available only when
- the emulator is configured with dirty schedulers enabled. This
- feature is currently disabled by default. The Erlang runtime
- without SMP support do not support dirty schedulers even when
- the dirty scheduler support has been enabled. To check at
- runtime for the presence of dirty scheduler threads, code can
- use the
- <seealso marker="#enif_system_info"><c>enif_system_info()</c></seealso>
- API function.
- </p>
- </note>
-
- <p>
- A NIF that cannot be split and cannot execute in a millisecond or
- less is called a "dirty NIF" because it performs work that the
- Erlang runtime cannot handle cleanly. Applications that make use
- of such functions must indicate to the runtime that the functions
- are dirty so they can be handled specially. To schedule a dirty
- NIF for execution, the appropriate flags value can be set for the
- NIF in its <seealso marker="#ErlNifFunc"><c>ErlNifFunc</c></seealso>
- entry, or the application can call
- <seealso marker="#enif_schedule_nif"><c>enif_schedule_nif</c></seealso>,
- passing to it a pointer to the dirty NIF to be executed and
- indicating with the <c>flags</c> argument whether it expects the
- operation to be CPU-bound or I/O-bound. A dirty NIF executing
+ <item>
+ <p>As mentioned in the <seealso marker="#WARNING">warning</seealso> text
+ at the beginning of this manual page, it is of <em>vital
+ importance</em> that a native function returns relatively fast. It is
+ difficult to give an exact maximum amount of time that a native
+ function is allowed to work, but usually a well-behaving native
+ function is to return to its caller within 1 millisecond. This can be
+ achieved using different approaches. If you have full control over the
+ code to execute in the native function, the best approach is to
+ divide the work into multiple chunks of work and call the native
+ function multiple times. This is, however, not always possible, for
+ example when calling third-party libraries.</p>
+ <p>The <seealso marker="#enif_consume_timeslice">
+ <c>enif_consume_timeslice()</c></seealso> function can be used to
+ inform the runtime system about the length of the NIF call.
+ It is typically always to be used unless the NIF executes very
+ fast.</p>
+ <p>If the NIF call is too lengthy, this must be handled in one of
+ the following ways to avoid degraded responsiveness, scheduler load
+ balancing problems, and other strange behaviors:</p>
+ <taglist>
+ <tag>Yielding NIF</tag>
+ <item>
+ <p>If the functionality of a long-running NIF can be split so that
+ its work can be achieved through a series of shorter NIF calls,
+ the application has two options:</p>
+ <list type="bulleted">
+ <item>
+ <p>Make that series of NIF calls from the Erlang level.</p>
+ </item>
+ <item>
+ <p>Call a NIF that first performs a chunk of the work, then
+ invokes the <seealso marker="#enif_schedule_nif">
+ <c>enif_schedule_nif</c></seealso> function to schedule
+ another NIF call to perform the next chunk. The final call
+ scheduled in this manner can then return the overall
+ result.</p>
+ </item>
+ </list>
+ <p>Breaking up a long-running function in this manner enables the
+ VM to regain control between calls to the NIFs.</p>
+ <p>This approach is always preferred over the other alternatives
+ described below. This both from a performance perspective and
+ a system characteristics perspective.</p>
+ </item>
+ <tag>Threaded NIF</tag>
+ <item>
+ <p>This is accomplished by dispatching the work to another thread
+ managed by the NIF library, return from the NIF, and wait for
+ the result. The thread can send the result back to the Erlang
+ process using <seealso marker="#enif_send">
+ <c>enif_send</c></seealso>.
+ Information about thread primitives is provided below.</p>
+ </item>
+ <tag><marker id="dirty_nifs"/>Dirty NIF</tag>
+ <item>
+ <note>
+ <p><em>The dirty NIF functionality described here
+ is experimental</em>. Dirty NIF support is available only when
+ the emulator is configured with dirty schedulers enabled. This
+ feature is disabled by default. The Erlang runtime
+ without SMP support does not support dirty schedulers even when
+ the dirty scheduler support is enabled. To check at runtime for
+ the presence of dirty scheduler threads, code can use the
+ <seealso marker="#enif_system_info">
+ <c>enif_system_info()</c></seealso> API function.</p>
+ </note>
+ <p>A NIF that cannot be split and cannot execute in a millisecond
+ or less is called a "dirty NIF", as it performs work that the
+ ordinary schedulers of the Erlang runtime system cannot handle cleanly.
+ Applications that make use of such functions must indicate to the
+ runtime that the functions are dirty so they can be handled
+ specially. This is handled by executing dirty jobs on a separate
+ set of schedulers called dirty schedulers. A dirty NIF executing
on a dirty scheduler does not have the same duration restriction
as a normal NIF.
- </p>
-
- <p>
- While a process is executing a dirty NIF some operations that
- communicate with it may take a very long time to complete.
- Suspend, or garbage collection of a process executing a dirty
- NIF cannot be done until the dirty NIF has returned, so other
- processes waiting for such operations to complete might have to
- wait for a very long time. Blocking multi scheduling, i.e.,
- calling
- <seealso marker="erlang#system_flag_multi_scheduling"><c>erlang:system_flag(multi_scheduling,
- block)</c></seealso>, might also take a very long time to
- complete. This since all ongoing dirty operations on all
- dirty schedulers need to complete before the the block
- operation can complete.
- </p>
-
- <p>
- A lot of operations communicating with a process executing a
- dirty NIF can, however, complete while it is executing the
- dirty NIF. For example, retreiving information about it via
- <c>process_info()</c>, setting its group leader,
- register/unregister its name, etc.
- </p>
-
- <p>
- Termination of a process executing a dirty NIF can only be
- completed up to a certain point while it is executing the
- dirty NIF. All Erlang resources such as registered names,
- ETS tables, etc will be released. All links and monitors
- will be triggered. The actual execution of the NIF will
- however <em>not</em> be stopped. The NIF can safely contiue
- execution, allocate heap memory, etc, but it is of course better
- to stop executing as soon as possible. The NIF can check
- whether current process is alive or not using
- <seealso marker="#enif_is_current_process_alive"><c>enif_is_current_process_alive</c></seealso>.
- Communication using
- <seealso marker="#enif_send"><c>enif_send</c></seealso>,
- and <seealso marker="#enif_port_command"><c>enif_port_command</c></seealso>
- will also be dropped when the sending process is not alive.
- Deallocation of certain internal resources such as process
- heap, and process control block will be delayed until the
- dirty NIF has completed.
- </p>
-
- <p>Currently known issues that are planned to be fixed:</p>
- <list>
- <item>
- <p>
- Since purging of a module currently might need to garbage
- collect a process in order to determine if it has
- references to the module, a process executing a dirty
- NIF might delay purging for a very long time. Delaying
- a purge operatin implies delaying <em>all</em> code
- loding operations which might cause severe problems for
- the system as a whole.
- </p>
- </item>
- </list>
-
- </item>
- </taglist>
+ </p>
+
+ <p>
+ It is important to classify the dirty job correct. An I/O bound
+ job should be classified as such, and a CPU bound job should be
+ classified as such. If you should classify CPU bound jobs
+ as I/O bound jobs, dirty I/O schedulers might starve ordinary
+ schedulers. I/O bound jobs are expected to either block waiting
+ for I/O, and/or spend a limited amount of time moving data.
+ </p>
+ <p>
+ To schedule a dirty NIF for execution, the application has two options:</p>
+ <list type="bulleted">
+ <item>
+ <p>Set the appropriate flags value for the dirty NIF in its
+ <seealso marker="#ErlNifFunc"> <c>ErlNifFunc</c></seealso>
+ entry.</p>
+ </item>
+ <item>
+ <p>Call <seealso marker="#enif_schedule_nif">
+ <c>enif_schedule_nif</c></seealso>, pass to it a pointer
+ to the dirty NIF to be executed, and indicate with argument
+ <c>flags</c> whether it expects the operation to be CPU-bound
+ or I/O-bound.</p>
+ </item>
+ </list>
+ <p>A job that alternates between I/O bound and CPU bound can be
+ reclassified and rescheduled using <c>enif_schedule_nif</c> so
+ that it executes on the correct type of dirty scheduler at all
+ times. For more information see the documentation of the
+ <c>erl(1)</c> command line arguments
+ <seealso marker="erl#+SDcpu"><c>+SDcpu</c></seealso>,
+ and <seealso marker="erl#+SDio"><c>+SDio</c></seealso>.</p>
+ <p>While a process executes a dirty NIF, some operations that
+ communicate with it can take a very long time to complete.
+ Suspend or garbage collection of a process executing a dirty
+ NIF cannot be done until the dirty NIF has returned. Thus, other
+ processes waiting for such operations to complete might
+ have to wait for a very long time. Blocking multi-scheduling, that
+ is, calling <seealso marker="erlang#system_flag_multi_scheduling">
+ <c>erlang:system_flag(multi_scheduling, block)</c></seealso>, can
+ also take a very long time to complete. This becaue all ongoing
+ dirty operations on all dirty schedulers must complete before
+ the block operation can complete.</p>
+ <p>Many operations communicating with a process executing a
+ dirty NIF can, however, complete while it executes the
+ dirty NIF. For example, retrieving information about it through
+ <seealso marker="erlang:process_info/1">
+ <c>erlang:process_info</c></seealso>, setting its group leader,
+ register/unregister its name, and so on.</p>
+ <p>Termination of a process executing a dirty NIF can only be
+ completed up to a certain point while it executes the dirty NIF.
+ All Erlang resources, such as its registered name and its ETS
+ tables, are released. All links and monitors are triggered. The
+ execution of the NIF is, however, <em>not</em> stopped. The NIF
+ can safely continue execution, allocate heap memory, and so on,
+ but it is of course better to stop executing as soon as possible.
+ The NIF can check whether a current process is alive using
+ <seealso marker="#enif_is_current_process_alive">
+ <c>enif_is_current_process_alive</c></seealso>. Communication
+ using <seealso marker="#enif_send"><c>enif_send</c></seealso> and
+ <seealso marker="#enif_port_command">
+ <c>enif_port_command</c></seealso> is also dropped when the
+ sending process is not alive. Deallocation of certain internal
+ resources, such as process heap and process control block, is
+ delayed until the dirty NIF has completed.</p>
+ </item>
+ </taglist>
</item>
</taglist>
</section>
+
<section>
- <title>INITIALIZATION</title>
+ <title>Initialization</title>
<taglist>
- <tag><marker id="ERL_NIF_INIT"/>ERL_NIF_INIT(MODULE, ErlNifFunc funcs[], load, reload, upgrade, unload)</tag>
- <item><p>This is the magic macro to initialize a NIF library. It
- should be evaluated in global file scope.</p>
- <p><c>MODULE</c> is the name of the Erlang module as an
- identifier without string quotations. It will be stringified by
- the macro.</p>
- <p><c>funcs</c> is a static array of function descriptors for
- all the implemented NIFs in this library.</p>
- <p><c>load</c>, <c>reload</c>, <c>upgrade</c> and <c>unload</c>
- are pointers to functions. One of <c>load</c>, <c>reload</c> or
- <c>upgrade</c> will be called to initialize the library.
- <c>unload</c> is called to release the library. They are all
- described individually below.</p>
- <p>If compiling a nif for static inclusion via --enable-static-nifs you
- have to define STATIC_ERLANG_NIF before the ERL_NIF_INIT declaration.</p>
+ <tag><marker id="ERL_NIF_INIT"/><c>ERL_NIF_INIT(MODULE,
+ ErlNifFunc funcs[], load, reload, upgrade, unload)</c></tag>
+ <item>
+ <p>This is the magic macro to initialize a NIF library. It
+ is to be evaluated in global file scope.</p>
+ <p><c>MODULE</c> is the name of the Erlang module as an
+ identifier without string quotations. It is stringified by
+ the macro.</p>
+ <p><c>funcs</c> is a static array of function descriptors for
+ all the implemented NIFs in this library.</p>
+ <p><c>load</c>, <c>reload</c>, <c>upgrade</c> and <c>unload</c>
+ are pointers to functions. One of <c>load</c>, <c>reload</c>, or
+ <c>upgrade</c> is called to initialize the library.
+ <c>unload</c> is called to release the library. All are
+ described individually below.</p>
+ <p>If compiling a NIF for static inclusion through
+ <c>--enable-static-nifs</c>, you must define <c>STATIC_ERLANG_NIF</c>
+ before the <c>ERL_NIF_INIT</c> declaration.</p>
</item>
-
- <tag><marker id="load"/>int (*load)(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)</tag>
- <item><p><c>load</c> is called when the NIF library is loaded
- and there is no previously loaded library for this module.</p>
+ <tag><marker id="load"/><c>int (*load)(ErlNifEnv* env, void** priv_data,
+ ERL_NIF_TERM load_info)</c></tag>
+ <item>
+ <p><c>load</c> is called when the NIF library is loaded
+ and no previously loaded library exists for this module.</p>
<p><c>*priv_data</c> can be set to point to some private data
- that the library needs in order to keep a state between NIF
- calls. <c>enif_priv_data</c> will return this pointer.
- <c>*priv_data</c> will be initialized to NULL when <c>load</c> is
- called.</p>
+ that the library needs to keep a state between NIF
+ calls. <c>enif_priv_data</c> returns this pointer.
+ <c>*priv_data</c> is initialized to <c>NULL</c> when <c>load</c> is
+ called.</p>
<p><c>load_info</c> is the second argument to <seealso
- marker="erlang#load_nif-2">erlang:load_nif/2</seealso>.</p>
- <p>The library will fail to load if <c>load</c> returns
- anything other than 0. <c>load</c> can be NULL in case no
- initialization is needed.</p>
- </item>
-
- <tag><marker id="upgrade"/>int (*upgrade)(ErlNifEnv* env, void** priv_data, void** old_priv_data, ERL_NIF_TERM load_info)</tag>
- <item><p><c>upgrade</c> is called when the NIF library is loaded
- and there is old code of this module with a loaded NIF library.</p>
- <p>Works the same as <c>load</c>. The only difference is that
- <c>*old_priv_data</c> already contains the value set by the
- last call to <c>load</c> or <c>reload</c> for the old module
- code. <c>*priv_data</c> will be initialized to NULL when <c>upgrade</c>
- is called. It is allowed to write to both *priv_data and *old_priv_data.</p>
- <p>The library will fail to load if <c>upgrade</c> returns
- anything other than 0 or if <c>upgrade</c> is NULL.</p>
+ marker="erlang#load_nif-2"><c>erlang:load_nif/2</c></seealso>.</p>
+ <p>The library fails to load if <c>load</c> returns
+ anything other than <c>0</c>. <c>load</c> can be <c>NULL</c> if
+ initialization is not needed.</p>
</item>
-
- <tag><marker id="unload"/>void (*unload)(ErlNifEnv* env, void* priv_data)</tag>
- <item><p><c>unload</c> is called when the module code that
- the NIF library belongs to is purged as old. New code
- of the same module may or may not exist. Note that <c>unload</c> is not
- called for a replaced library as a consequence of <c>reload</c>.</p>
+ <tag><marker id="upgrade"/><c>int (*upgrade)(ErlNifEnv* env, void**
+ priv_data, void** old_priv_data, ERL_NIF_TERM load_info)</c></tag>
+ <item>
+ <p><c>upgrade</c> is called when the NIF library is loaded
+ and there is old code of this module with a loaded NIF library.</p>
+ <p>Works as <c>load</c>, except that <c>*old_priv_data</c> already
+ contains the value set by the last call to <c>load</c> or
+ <c>reload</c> for the old module code. <c>*priv_data</c> is
+ initialized to <c>NULL</c> when <c>upgrade</c> is called. It is
+ allowed to write to both <c>*priv_data</c> and
+ <c>*old_priv_data.</c></p>
+ <p>The library fails to load if <c>upgrade</c> returns
+ anything other than <c>0</c> or if <c>upgrade</c> is <c>NULL</c>.</p>
</item>
-
- <tag><marker id="reload"/>int (*reload)(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)</tag>
- <note><p>The reload mechanism is <em>deprecated</em>. It was only intended
- as a development feature. Do not use it as an upgrade method for
- live production systems. It might be removed in future releases. Be sure
- to pass <c>reload</c> as <c>NULL</c> to <seealso marker="#ERL_NIF_INIT">ERL_NIF_INIT</seealso>
- to disable it when not used.</p>
- </note>
- <item><p><c>reload</c> is called when the NIF library is loaded
- and there is already a previously loaded library for this
- module code.</p>
- <p>Works the same as <c>load</c>. The only difference is that
- <c>*priv_data</c> already contains the value set by the
- previous call to <c>load</c> or <c>reload</c>.</p>
- <p>The library will fail to load if <c>reload</c> returns
- anything other than 0 or if <c>reload</c> is NULL.</p>
+ <tag><marker id="unload"/><c>void (*unload)(ErlNifEnv* env, void*
+ priv_data)</c></tag>
+ <item>
+ <p><c>unload</c> is called when the module code that
+ the NIF library belongs to is purged as old. New code of the same
+ module may or may not exist. Notice that <c>unload</c> is not
+ called for a replaced library as a consequence of <c>reload</c>.</p>
+ </item>
+ <tag><marker id="reload"/><c>int (*reload)(ErlNifEnv* env, void**
+ priv_data, ERL_NIF_TERM load_info)</c></tag>
+ <item>
+ <note>
+ <p><em>The reload mechanism is deprecated.</em> It was only intended
+ as a development feature. Do not use it as an upgrade method for
+ live production systems. It can be removed in future releases.
+ Ensure to pass <c>reload</c> as <c>NULL</c> to
+ <seealso marker="#ERL_NIF_INIT"><c>ERL_NIF_INIT</c></seealso>
+ to disable it when not used.</p>
+ </note>
+ <p><c>reload</c> is called when the NIF library is loaded and a
+ previously loaded library already exists for this module code.</p>
+ <p>Works as <c>load</c>, except that
+ <c>*priv_data</c> already contains the value set by the
+ previous call to <c>load</c> or <c>reload</c>.</p>
+ <p>The library fails to load if <c>reload</c> returns
+ anything other than <c>0</c> or if <c>reload</c> is <c>NULL</c>.</p>
</item>
-
</taglist>
</section>
<section>
- <title>DATA TYPES</title>
-
+ <title>Data Types</title>
<taglist>
- <tag><marker id="ERL_NIF_TERM"/>ERL_NIF_TERM</tag>
- <item>
+ <tag><marker id="ERL_NIF_TERM"/><c>ERL_NIF_TERM</c></tag>
+ <item>
<p>Variables of type <c>ERL_NIF_TERM</c> can refer to any Erlang term.
- This is an opaque type and values of it can only by used either as
- arguments to API functions or as return values from NIFs. All
- <c>ERL_NIF_TERM</c>'s belong to an environment
- (<seealso marker="#ErlNifEnv">ErlNifEnv</seealso>). A term can not be
- destructed individually, it is valid until its environment is destructed.</p>
+ This is an opaque type and values of it can only by used either as
+ arguments to API functions or as return values from NIFs. All
+ <c>ERL_NIF_TERM</c>s belong to an environment
+ (<seealso marker="#ErlNifEnv"><c>ErlNifEnv</c></seealso>).
+ A term cannot be destructed individually, it is valid until its
+ environment is destructed.</p>
</item>
- <tag><marker id="ErlNifEnv"/>ErlNifEnv</tag>
+ <tag><marker id="ErlNifEnv"/><c>ErlNifEnv</c></tag>
<item>
- <p><c>ErlNifEnv</c> represents an environment that can host Erlang terms.
- All terms in an environment are valid as long as the environment is valid.
- <c>ErlNifEnv</c> is an opaque type and pointers to it can only be passed
- on to API functions. There are two types of environments; process
- bound and process independent.</p>
- <p>A <em>process bound environment</em> is passed as the first argument to all NIFs.
- All function arguments passed to a NIF will belong to that environment.
- The return value from a NIF must also be a term belonging to the same
- environment.
- In addition a process bound environment contains transient information
- about the calling Erlang process. The environment is only valid in the
- thread where it was supplied as argument until the NIF returns. It is
- thus useless and dangerous to store pointers to process bound
- environments between NIF calls. </p>
- <p>A <em>process independent environment</em> is created by calling
- <seealso marker="#enif_alloc_env">enif_alloc_env</seealso>. It can be
- used to store terms between NIF calls and to send terms with
- <seealso marker="#enif_send">enif_send</seealso>. A process
- independent environment with all its terms is valid until you explicitly
- invalidates it with <seealso marker="#enif_free_env">enif_free_env</seealso>
- or <c>enif_send</c>.</p>
+ <p><c>ErlNifEnv</c> represents an environment that can host Erlang
+ terms. All terms in an environment are valid as long as the
+ environment is valid. <c>ErlNifEnv</c> is an opaque type; pointers to
+ it can only be passed on to API functions. Two types of environments
+ exist:</p>
+ <taglist>
+ <tag>Process-bound environment</tag>
+ <item>
+ <p>Passed as the first argument to all NIFs. All function arguments
+ passed to a NIF belong to that environment. The return value from
+ a NIF must also be a term belonging to the same environment.</p>
+ <p>A process-bound environment contains transient information
+ about the calling Erlang process. The environment is only valid
+ in the thread where it was supplied as argument until the NIF
+ returns. It is thus useless and dangerous to store pointers to
+ process-bound environments between NIF calls.</p>
+ </item>
+ <tag>Process-independent environment</tag>
+ <item>
+ <p>Created by calling <seealso marker="#enif_alloc_env">
+ <c>enif_alloc_env</c></seealso>. This environment can be
+ used to store terms between NIF calls and to send terms with
+ <seealso marker="#enif_send"><c>enif_send</c></seealso>. A
+ process-independent environment with all its terms is valid until
+ you explicitly invalidate it with
+ <seealso marker="#enif_free_env"><c>enif_free_env</c></seealso>
+ or <c>enif_send</c>.</p>
+ </item>
+ </taglist>
<p>All contained terms of a list/tuple/map must belong to the same
- environment as the list/tuple/map itself. Terms can be copied between
- environments with
- <seealso marker="#enif_make_copy">enif_make_copy</seealso>.</p>
+ environment as the list/tuple/map itself. Terms can be copied between
+ environments with
+ <seealso marker="#enif_make_copy"><c>enif_make_copy</c></seealso>.</p>
</item>
- <tag><marker id="ErlNifFunc"/>ErlNifFunc</tag>
- <item>
- <p/>
- <code type="none">
+ <tag><marker id="ErlNifFunc"/><c>ErlNifFunc</c></tag>
+ <item>
+ <code type="none">
typedef struct {
- const char* <em>name</em>;
- unsigned <em>arity</em>;
- ERL_NIF_TERM (*<em>fptr</em>)(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+ const char* name;
+ unsigned arity;
+ ERL_NIF_TERM (*fptr)(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
unsigned flags;
-} ErlNifFunc;
-</code>
- <p>Describes a NIF by its name, arity and implementation.
- <c>fptr</c> is a pointer to the function that implements the
- NIF. The argument <c>argv</c> of a NIF will contain the
- function arguments passed to the NIF and <c>argc</c> is the
- length of the array, i.e. the function arity. <c>argv[N-1]</c>
- will thus denote the Nth argument to the NIF. Note that the
- <c>argc</c> argument allows for the same C function to
- implement several Erlang functions with different arity (but
- same name probably). For a regular NIF, <c>flags</c> is 0 (and
- so its value can be omitted for statically initialized <c>ErlNifFunc</c>
- instances), or it can be used to indicate that the NIF is a <seealso
- marker="#dirty_nifs">dirty NIF</seealso> that should be executed
- on a dirty scheduler thread (<em>note that the dirty NIF functionality
- described here is experimental</em> and that you have to enable
- support for dirty schedulers when building OTP in order to try the
- functionality out). If the dirty NIF is expected to be
- CPU-bound, its <c>flags</c> field should be set to
- <c>ERL_NIF_DIRTY_JOB_CPU_BOUND</c>, or for I/O-bound jobs,
- <c>ERL_NIF_DIRTY_JOB_IO_BOUND</c>.</p>
- <note><p>If one of the
- <c>ERL_NIF_DIRTY_JOB_*_BOUND</c> flags is set, and the runtime
- system has no support for dirty schedulers, the runtime system
- will refuse to load the NIF library.</p></note>
+} ErlNifFunc;</code>
+ <p>Describes a NIF by its name, arity, and implementation.</p>
+ <taglist>
+ <tag><c>fptr</c></tag>
+ <item>
+ <p>A pointer to the function that implements the NIF.</p>
+ </item>
+ <tag><c>argv</c></tag>
+ <item>
+ <p>Contains the function arguments passed to the NIF.</p>
+ </item>
+ <tag><c>argc</c></tag>
+ <item>
+ <p>The array length, that is, the function arity. <c>argv[N-1]</c>
+ thus denotes the Nth argument to the NIF. Notice that the argument
+ <c>argc</c> allows for the same C function to implement several
+ Erlang functions with different arity (but probably with the same
+ name).</p>
+ </item>
+ <tag><c>flags</c></tag>
+ <item>
+ <p>Is <c>0</c> for a regular NIF (and so its value can be omitted
+ for statically initialized <c>ErlNifFunc</c> instances).</p>
+ <p><c>flags</c> can be used to indicate that the NIF is a
+ <seealso marker="#dirty_nifs">dirty NIF</seealso> that is to be
+ executed on a dirty scheduler thread.</p>
+ <p><em>The dirty NIF functionality described here is
+ experimental.</em> You have to enable support for dirty
+ schedulers when building OTP to try out the functionality.</p>
+ <p>If the dirty NIF is expected to be CPU-bound, its <c>flags</c>
+ field is to be set to <c>ERL_NIF_DIRTY_JOB_CPU_BOUND</c> or
+ <c>ERL_NIF_DIRTY_JOB_IO_BOUND</c>.</p>
+ <note>
+ <p>If one of the <c>ERL_NIF_DIRTY_JOB_*_BOUND</c> flags is set,
+ and the runtime system has no support for dirty schedulers,
+ the runtime system refuses to load the NIF library.</p>
+ </note>
+ </item>
+ </taglist>
</item>
- <tag><marker id="ErlNifBinary"/>ErlNifBinary</tag>
- <item>
- <p/>
- <code type="none">
+ <tag><marker id="ErlNifBinary"/><c>ErlNifBinary</c></tag>
+ <item>
+ <code type="none">
typedef struct {
- unsigned <em>size</em>;
- unsigned char* <em>data</em>;
-} ErlNifBinary;
-</code>
+ unsigned size;
+ unsigned char* data;
+} ErlNifBinary;</code>
<p><c>ErlNifBinary</c> contains transient information about an
inspected binary term. <c>data</c> is a pointer to a buffer
of <c>size</c> bytes with the raw content of the binary.</p>
- <p>Note that <c>ErlNifBinary</c> is a semi-opaque type and you are
+ <p>Notice that <c>ErlNifBinary</c> is a semi-opaque type and you are
only allowed to read fields <c>size</c> and <c>data</c>.</p>
</item>
-
- <tag><marker id="ErlNifBinaryToTerm"/>ErlNifBinaryToTerm</tag>
+ <tag><marker id="ErlNifBinaryToTerm"/><c>ErlNifBinaryToTerm</c></tag>
<item>
- <p>An enumeration of the options that can be given to
- <seealso marker="#enif_binary_to_term">enif_binary_to_term</seealso>.
- For default behavior, use the value <c>0</c>.</p>
- <taglist>
- <tag><c>ERL_NIF_BIN2TERM_SAFE</c></tag>
- <item><p>Use this option when receiving data from untrusted sources.</p></item>
- </taglist>
+ <p>An enumeration of the options that can be specified to
+ <seealso marker="#enif_binary_to_term">
+ <c>enif_binary_to_term</c></seealso>.
+ For default behavior, use value <c>0</c>.</p>
+ <p>When receiving data from untrusted sources, use option
+ <c>ERL_NIF_BIN2TERM_SAFE</c>.</p>
</item>
-
- <tag><marker id="ErlNifPid"/>ErlNifPid</tag>
- <item>
- <p><c>ErlNifPid</c> is a process identifier (pid). In contrast to
- pid terms (instances of <c>ERL_NIF_TERM</c>), <c>ErlNifPid</c>'s are self
- contained and not bound to any
- <seealso marker="#ErlNifEnv">environment</seealso>. <c>ErlNifPid</c>
- is an opaque type.</p>
- </item>
- <tag><marker id="ErlNifPort"/>ErlNifPort</tag>
- <item>
- <p><c>ErlNifPort</c> is a port identifier. In contrast to
- port id terms (instances of <c>ERL_NIF_TERM</c>), <c>ErlNifPort</c>'s are self
- contained and not bound to any
- <seealso marker="#ErlNifEnv">environment</seealso>. <c>ErlNifPort</c>
- is an opaque type.</p>
- </item>
-
- <tag><marker id="ErlNifResourceType"/>ErlNifResourceType</tag>
- <item>
- <p>Each instance of <c>ErlNifResourceType</c> represent a class of
- memory managed resource objects that can be garbage collected.
+ <tag><marker id="ErlNifPid"/><c>ErlNifPid</c></tag>
+ <item>
+ <p>A process identifier (pid). In contrast to pid terms (instances of
+ <c>ERL_NIF_TERM</c>), <c>ErlNifPid</c>s are self-contained and not
+ bound to any <seealso marker="#ErlNifEnv">environment</seealso>.
+ <c>ErlNifPid</c> is an opaque type.</p>
+ </item>
+ <tag><marker id="ErlNifPort"/><c>ErlNifPort</c></tag>
+ <item>
+ <p>A port identifier. In contrast to port ID terms (instances of
+ <c>ERL_NIF_TERM</c>), <c>ErlNifPort</c>s are self-contained and not
+ bound to any <seealso marker="#ErlNifEnv">environment</seealso>.
+ <c>ErlNifPort</c> is an opaque type.</p>
+ </item>
+ <tag><marker id="ErlNifResourceType"/><c>ErlNifResourceType</c></tag>
+ <item>
+ <p>Each instance of <c>ErlNifResourceType</c> represents a class of
+ memory-managed resource objects that can be garbage collected.
Each resource type has a unique name and a destructor function that
is called when objects of its type are released.</p>
- </item>
- <tag><marker id="ErlNifResourceDtor"/>ErlNifResourceDtor</tag>
- <item>
- <p/>
- <code type="none">
-typedef void ErlNifResourceDtor(ErlNifEnv* env, void* obj);
-</code>
- <p>The function prototype of a resource destructor function.</p>
- </item>
- <tag><marker id="ErlNifCharEncoding"/>ErlNifCharEncoding</tag>
- <item>
- <p/>
- <code type="none">
+ </item>
+ <tag><marker id="ErlNifResourceDtor"/><c>ErlNifResourceDtor</c></tag>
+ <item>
+ <code type="none">
+typedef void ErlNifResourceDtor(ErlNifEnv* env, void* obj);</code>
+ <p>The function prototype of a resource destructor function.</p>
+ </item>
+ <tag><marker id="ErlNifCharEncoding"/><c>ErlNifCharEncoding</c></tag>
+ <item>
+ <code type="none">
typedef enum {
ERL_NIF_LATIN1
-}ErlNifCharEncoding;
-</code>
- <p>The character encoding used in strings and atoms. The only
- supported encoding is currently <c>ERL_NIF_LATIN1</c> for
- iso-latin-1 (8-bit ascii).</p>
- </item>
- <tag><marker id="ErlNifSysInfo"/>ErlNifSysInfo</tag>
- <item>
- <p>Used by <seealso marker="#enif_system_info">enif_system_info</seealso>
- to return information about the runtime system. Contains currently
- the exact same content as <seealso marker="erl_driver#ErlDrvSysInfo">ErlDrvSysInfo</seealso>.</p>
- </item>
- <tag><marker id="ErlNifSInt64"/>ErlNifSInt64</tag>
- <item><p>A native signed 64-bit integer type.</p></item>
- <tag><marker id="ErlNifUInt64"/>ErlNifUInt64</tag>
- <item><p>A native unsigned 64-bit integer type.</p></item>
-
- <tag><marker id="ErlNifTime"/>ErlNifTime</tag>
+}ErlNifCharEncoding;</code>
+ <p>The character encoding used in strings and atoms. The only
+ supported encoding is <c>ERL_NIF_LATIN1</c> for
+ ISO Latin-1 (8-bit ASCII).</p>
+ </item>
+ <tag><marker id="ErlNifSysInfo"/><c>ErlNifSysInfo</c></tag>
+ <item>
+ <p>Used by <seealso marker="#enif_system_info">
+ <c>enif_system_info</c></seealso> to return information about the
+ runtime system. Contains the same content as
+ <seealso marker="erl_driver#ErlDrvSysInfo">
+ <c>ErlDrvSysInfo</c></seealso>.</p>
+ </item>
+ <tag><marker id="ErlNifSInt64"/><c>ErlNifSInt64</c></tag>
+ <item>
+ <p>A native signed 64-bit integer type.</p>
+ </item>
+ <tag><marker id="ErlNifUInt64"/><c>ErlNifUInt64</c></tag>
+ <item>
+ <p>A native unsigned 64-bit integer type.</p>
+ </item>
+ <tag><marker id="ErlNifTime"/><c>ErlNifTime</c></tag>
<item>
<p>A signed 64-bit integer type for representation of time.</p>
</item>
- <tag><marker id="ErlNifTimeUnit"/>ErlNifTimeUnit</tag>
+ <tag><marker id="ErlNifTimeUnit"/><c>ErlNifTimeUnit</c></tag>
<item>
<p>An enumeration of time units supported by the NIF API:</p>
- <taglist>
- <tag><c>ERL_NIF_SEC</c></tag>
- <item><p>Seconds</p></item>
- <tag><c>ERL_NIF_MSEC</c></tag>
- <item><p>Milliseconds</p></item>
- <tag><c>ERL_NIF_USEC</c></tag>
- <item><p>Microseconds</p></item>
- <tag><c>ERL_NIF_NSEC</c></tag>
- <item><p>Nanoseconds</p></item>
- </taglist>
+ <taglist>
+ <tag><c>ERL_NIF_SEC</c></tag>
+ <item>Seconds</item>
+ <tag><c>ERL_NIF_MSEC</c></tag>
+ <item>Milliseconds</item>
+ <tag><c>ERL_NIF_USEC</c></tag>
+ <item>Microseconds</item>
+ <tag><c>ERL_NIF_NSEC</c></tag>
+ <item>Nanoseconds</item>
+ </taglist>
</item>
-
- <tag><marker id="ErlNifUniqueInteger"/>ErlNifUniqueInteger</tag>
+ <tag><marker id="ErlNifUniqueInteger"/><c>ErlNifUniqueInteger</c></tag>
<item>
<p>An enumeration of the properties that can be requested from
- <seealso marker="#enif_make_unique_integer">enif_unique_integer</seealso>.
- For default properties, use the value <c>0</c>.</p>
+ <seealso marker="#enif_make_unique_integer">
+ <c>enif_unique_integer</c></seealso>.
+ For default properties, use value <c>0</c>.</p>
<taglist>
- <tag><c>ERL_NIF_UNIQUE_POSITIVE</c></tag>
- <item><p>Return only positive integers</p></item>
- <tag><c>ERL_NIF_UNIQUE_MONOTONIC</c></tag>
- <item><p>Return only
- <seealso marker="time_correction#Strictly_Monotonically_Increasing">strictly
- monotonically increasing</seealso> integer corresponding to creation time</p></item>
- </taglist>
+ <tag><c>ERL_NIF_UNIQUE_POSITIVE</c></tag>
+ <item>
+ <p>Return only positive integers.</p>
+ </item>
+ <tag><c>ERL_NIF_UNIQUE_MONOTONIC</c></tag>
+ <item>
+ <p>Return only <seealso
+ marker="time_correction#Strictly_Monotonically_Increasing">
+ strictly monotonically increasing</seealso> integer corresponding
+ to creation time.</p>
+ </item>
+ </taglist>
</item>
-
</taglist>
</section>
<funcs>
- <func><name><ret>void *</ret><nametext>enif_alloc(size_t size)</nametext></name>
- <fsummary>Allocate dynamic memory</fsummary>
- <desc><p>Allocate memory of <c>size</c> bytes. Return NULL if allocation failed.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_alloc_binary(size_t size, ErlNifBinary* bin)</nametext></name>
- <fsummary>Create a new binary</fsummary>
- <desc><p>Allocate a new binary of size <c>size</c>
- bytes. Initialize the structure pointed to by <c>bin</c> to
- refer to the allocated binary. The binary must either be released by
- <seealso marker="#enif_release_binary">enif_release_binary</seealso>
- or ownership transferred to an Erlang term with
- <seealso marker="#enif_make_binary">enif_make_binary</seealso>.
- An allocated (and owned) <c>ErlNifBinary</c> can be kept between NIF
- calls.</p>
- <p>Return true on success or false if allocation failed.</p>
- </desc>
- </func>
- <func><name><ret>ErlNifEnv *</ret><nametext>enif_alloc_env()</nametext></name>
- <fsummary>Create a new environment</fsummary>
- <desc><p>Allocate a new process independent environment. The environment can
- be used to hold terms that is not bound to any process. Such terms can
- later be copied to a process environment with
- <seealso marker="#enif_make_copy">enif_make_copy</seealso>
- or be sent to a process as a message with <seealso marker="#enif_send">enif_send</seealso>.</p>
- <p>Return pointer to the new environment.</p>
- </desc>
- </func>
- <func><name><ret>void *</ret><nametext>enif_alloc_resource(ErlNifResourceType* type, unsigned size)</nametext></name>
- <fsummary>Allocate a memory managed resource object</fsummary>
- <desc><p>Allocate a memory managed resource object of type <c>type</c> and size <c>size</c> bytes.</p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_clear_env(ErlNifEnv* env)</nametext></name>
- <fsummary>Clear an environment for reuse</fsummary>
- <desc><p>Free all terms in an environment and clear it for reuse. The environment must
- have been allocated with <seealso marker="#enif_alloc_env">enif_alloc_env</seealso>.
- </p></desc>
- </func>
- <func><name><ret>size_t</ret><nametext>enif_binary_to_term(ErlNifEnv *env, const unsigned char* data, size_t size, ERL_NIF_TERM *term, ErlNifBinaryToTerm opts)</nametext></name>
- <fsummary>Create a term from the external format</fsummary>
- <desc>
- <p>Create a term that is the result of decoding the binary data
- at <c>data</c>, which must be encoded according to the Erlang external term format.
- No more than <c>size</c> bytes are read from <c>data</c>. Argument <c>opts</c>
- correspond to the second argument to <seealso marker="erlang#binary_to_term-2">
- <c>erlang:binary_to_term/2</c></seealso>, and must be either <c>0</c> or
- <c>ERL_NIF_BIN2TERM_SAFE</c>.</p>
- <p>On success, store the resulting term at <c>*term</c> and return
- the actual number of bytes read. Return zero if decoding fails or if <c>opts</c>
- is invalid.</p>
- <p>See also:
- <seealso marker="#ErlNifBinaryToTerm"><c>ErlNifBinaryToTerm</c></seealso>,
- <seealso marker="erlang#binary_to_term-2"><c>erlang:binary_to_term/2</c></seealso> and
- <seealso marker="#enif_term_to_binary"><c>enif_term_to_binary</c></seealso>.
- </p>
- </desc>
+ <func>
+ <name><ret>void *</ret><nametext>enif_alloc(size_t size)</nametext></name>
+ <fsummary>Allocate dynamic memory.</fsummary>
+ <desc>
+ <p>Allocates memory of <c>size</c> bytes.</p>
+ <p>Returns <c>NULL</c> if the allocation fails.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_alloc_binary(size_t size, ErlNifBinary* bin)</nametext>
+ </name>
+ <fsummary>Create a new binary.</fsummary>
+ <desc>
+ <p>Allocates a new binary of size <c>size</c> bytes.
+ Initializes the structure pointed to by <c>bin</c> to
+ refer to the allocated binary. The binary must either be released by
+ <seealso marker="#enif_release_binary">
+ <c>enif_release_binary</c></seealso>
+ or ownership transferred to an Erlang term with
+ <seealso marker="#enif_make_binary"><c>enif_make_binary</c></seealso>.
+ An allocated (and owned) <c>ErlNifBinary</c> can be kept between NIF
+ calls.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if allocation
+ fails.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ErlNifEnv *</ret><nametext>enif_alloc_env()</nametext></name>
+ <fsummary>Create a new environment.</fsummary>
+ <desc>
+ <p>Allocates a new process-independent environment. The environment can
+ be used to hold terms that are not bound to any process. Such terms
+ can later be copied to a process environment with
+ <seealso marker="#enif_make_copy"><c>enif_make_copy</c></seealso> or
+ be sent to a process as a message with <seealso marker="#enif_send">
+ <c>enif_send</c></seealso>.</p>
+ <p>Returns pointer to the new environment.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void *</ret><nametext>enif_alloc_resource(ErlNifResourceType*
+ type, unsigned size)</nametext></name>
+ <fsummary>Allocate a memory-managed resource object.</fsummary>
+ <desc>
+ <p>Allocates a memory-managed resource object of type <c>type</c> and
+ size <c>size</c> bytes.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>size_t</ret><nametext>enif_binary_to_term(ErlNifEnv *env,
+ const unsigned char* data, size_t size, ERL_NIF_TERM *term,
+ ErlNifBinaryToTerm opts)</nametext></name>
+ <fsummary>Create a term from the external format.</fsummary>
+ <desc>
+ <p>Creates a term that is the result of decoding the binary data at
+ <c>data</c>, which must be encoded according to the Erlang external
+ term format. No more than <c>size</c> bytes are read from <c>data</c>.
+ Argument <c>opts</c> corresponds to the second argument to
+ <seealso marker="erlang#binary_to_term-2">
+ <c>erlang:binary_to_term/2</c></seealso> and must be either <c>0</c>
+ or <c>ERL_NIF_BIN2TERM_SAFE</c>.</p>
+ <p>On success, stores the resulting term at <c>*term</c> and returns
+ the number of bytes read. Returns <c>0</c> if decoding fails or if
+ <c>opts</c> is invalid.</p>
+ <p>See also <seealso marker="#ErlNifBinaryToTerm">
+ <c>ErlNifBinaryToTerm</c></seealso>,
+ <seealso marker="erlang#binary_to_term-2">
+ <c>erlang:binary_to_term/2</c></seealso>, and
+ <seealso marker="#enif_term_to_binary">
+ <c>enif_term_to_binary</c></seealso>.</p>
+ </desc>
</func>
- <func><name><ret>int</ret><nametext>enif_compare(ERL_NIF_TERM lhs, ERL_NIF_TERM rhs)</nametext></name>
- <fsummary>Compare two terms</fsummary>
- <desc><p>Return an integer less than, equal to, or greater than
- zero if <c>lhs</c> is found, respectively, to be less than,
- equal, or greater than <c>rhs</c>. Corresponds to the Erlang
- operators <c>==</c>, <c>/=</c>, <c>=&lt;</c>, <c>&lt;</c>,
- <c>&gt;=</c> and <c>&gt;</c> (but <em>not</em> <c>=:=</c> or <c>=/=</c>).</p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_cond_broadcast(ErlNifCond *cnd)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_cond_broadcast">erl_drv_cond_broadcast</seealso>.
- </p></desc>
- </func>
- <func><name><ret>ErlNifCond *</ret><nametext>enif_cond_create(char *name)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_cond_create">erl_drv_cond_create</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_cond_destroy(ErlNifCond *cnd)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_cond_destroy">erl_drv_cond_destroy</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_cond_signal(ErlNifCond *cnd)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_cond_signal">erl_drv_cond_signal</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_cond_wait(ErlNifCond *cnd, ErlNifMutex *mtx)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_cond_wait">erl_drv_cond_wait</seealso>.
- </p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_consume_timeslice(ErlNifEnv *env, int percent)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Give the runtime system a hint about how much CPU time the current NIF call has consumed
- since last hint, or since the start of the NIF if no previous hint has been given.
- The time is given as a <c>percent</c> of the timeslice that a process is allowed to execute Erlang
- code until it may be suspended to give time for other runnable processes.
- The scheduling timeslice is not an exact entity, but can usually be
- approximated to about 1 millisecond.</p>
- <p>Note that it is up to the runtime system to determine if and how to use this information.
- Implementations on some platforms may use other means in order to determine consumed
- CPU time. Lengthy NIFs should regardless of this frequently call <c>enif_consume_timeslice</c>
- in order to determine if it is allowed to continue execution or not.</p>
-
- <p>Returns 1 if the timeslice is exhausted, or 0 otherwise. If 1 is returned the NIF should return
- as soon as possible in order for the process to yield.</p>
- <p>Argument <c>percent</c> must be an integer between 1 and 100. This function
- must only be called from a NIF-calling thread and argument <c>env</c> must be
- the environment of the calling process.</p>
- <p>This function is provided to better support co-operative scheduling, improve system responsiveness,
- and make it easier to prevent misbehaviors of the VM due to a NIF monopolizing a scheduler thread.
- It can be used to divide <seealso marker="#lengthy_work">length work</seealso> into
- a number of repeated NIF-calls without the need to create threads.
- See also the <seealso marker="#WARNING">warning</seealso> text at the beginning of this document.</p>
- </desc>
+ <func>
+ <name><ret>void</ret><nametext>enif_clear_env(ErlNifEnv* env)</nametext>
+ </name>
+ <fsummary>Clear an environment for reuse.</fsummary>
+ <desc>
+ <p>Frees all terms in an environment and clears it for reuse.
+ The environment must have been allocated with
+ <seealso marker="#enif_alloc_env"><c>enif_alloc_env</c></seealso>.</p>
+ </desc>
</func>
<func>
- <name><ret>ErlNifTime</ret><nametext>enif_convert_time_unit(ErlNifTime val, ErlNifTimeUnit from, ErlNifTimeUnit to)</nametext></name>
- <fsummary>Convert time unit of a time value</fsummary>
+ <name><ret>int</ret>
+ <nametext>enif_compare(ERL_NIF_TERM lhs, ERL_NIF_TERM rhs)</nametext>
+ </name>
+ <fsummary>Compare two terms.</fsummary>
<desc>
- <marker id="enif_convert_time_unit"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>val</c></tag>
- <item>Value to convert time unit for.</item>
- <tag><c>from</c></tag>
- <item>Time unit of <c>val</c>.</item>
- <tag><c>to</c></tag>
- <item>Time unit of returned value.</item>
- </taglist>
- <p>Converts the <c>val</c> value of time unit <c>from</c> to
- the corresponding value of time unit <c>to</c>. The result is
- rounded using the floor function.</p>
- <p>Returns <c>ERL_NIF_TIME_ERROR</c> if called with an invalid
- time unit argument.</p>
- <p>See also:
- <seealso marker="#ErlNifTime"><c>ErlNifTime</c></seealso> and
- <seealso marker="#ErlNifTimeUnit"><c>ErlNifTimeUnit</c></seealso>.
- </p>
+ <p>Returns an integer &lt; <c>0</c> if <c>lhs</c> &lt; <c>rhs</c>,
+ <c>0</c> if <c>lhs</c> = <c>rhs</c>, and &gt; <c>0</c> if
+ <c>lhs</c> &gt; <c>rhs</c>. Corresponds to the Erlang
+ operators <c>==</c>, <c>/=</c>, <c>=&lt;</c>, <c>&lt;</c>,
+ <c>&gt;=</c>, and <c>&gt;</c> (but <em>not</em> <c>=:=</c> or
+ <c>=/=</c>).</p>
</desc>
</func>
<func>
- <name><ret>ERL_NIF_TERM</ret><nametext>enif_cpu_time(ErlNifEnv *)</nametext></name>
+ <name><ret>void</ret>
+ <nametext>enif_cond_broadcast(ErlNifCond *cnd)</nametext></name>
<fsummary></fsummary>
<desc>
- <p>Returns the CPU time in the same format as <seealso marker="erlang#timestamp-0">erlang:timestamp()</seealso>.
- The CPU time is the time the current logical cpu has spent executing since
- some arbitrary point in the past.
- If the OS does not support fetching of this value <c>enif_cpu_time</c>
- invokes <seealso marker="#enif_make_badarg">enif_make_badarg</seealso>.
- </p>
+ <p>Same as <seealso marker="erl_driver#erl_drv_cond_broadcast">
+ <c>erl_drv_cond_broadcast</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ErlNifCond *</ret>
+ <nametext>enif_cond_create(char *name)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_cond_create">
+ <c>erl_drv_cond_create</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret>
+ <nametext>enif_cond_destroy(ErlNifCond *cnd)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_cond_destroy">
+ <c>erl_drv_cond_destroy</c></seealso>.</p>
</desc>
</func>
- <func><name><ret>int</ret><nametext>enif_equal_tids(ErlNifTid tid1, ErlNifTid tid2)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_equal_tids">erl_drv_equal_tids</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_free(void* ptr)</nametext></name>
- <fsummary>Free dynamic memory</fsummary>
- <desc><p>Free memory allocated by <c>enif_alloc</c>.</p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_free_env(ErlNifEnv* env)</nametext></name>
- <fsummary>Free an environment allocated with enif_alloc_env</fsummary>
- <desc><p>Free an environment allocated with <seealso marker="#enif_alloc_env">enif_alloc_env</seealso>.
- All terms created in the environment will be freed as well.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_get_atom(ErlNifEnv* env, ERL_NIF_TERM term, char* buf, unsigned size, ErlNifCharEncoding encode)</nametext></name>
- <fsummary>Get the text representation of an atom term</fsummary>
- <desc><p>Write a null-terminated string, in the buffer pointed to by
- <c>buf</c> of size <c>size</c>, consisting of the string
- representation of the atom <c>term</c> with encoding
- <seealso marker="#ErlNifCharEncoding">encode</seealso>. Return
- the number of bytes written (including terminating null character) or 0 if
- <c>term</c> is not an atom with maximum length of
- <c>size-1</c>.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_get_atom_length(ErlNifEnv* env, ERL_NIF_TERM term, unsigned* len, ErlNifCharEncoding encode)</nametext></name>
- <fsummary>Get the length of atom <c>term</c></fsummary>
- <desc><p>Set <c>*len</c> to the length (number of bytes excluding
- terminating null character) of the atom <c>term</c> with encoding
- <c>encode</c>. Return true on success or false if <c>term</c> is not an
- atom.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_get_double(ErlNifEnv* env, ERL_NIF_TERM term, double* dp)</nametext></name>
- <fsummary>Read a floating-point number term</fsummary>
- <desc><p>Set <c>*dp</c> to the floating point value of
- <c>term</c>. Return true on success or false if <c>term</c> is not a float.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_get_int(ErlNifEnv* env, ERL_NIF_TERM term, int* ip)</nametext></name>
- <fsummary>Read an integer term</fsummary>
- <desc><p>Set <c>*ip</c> to the integer value of
- <c>term</c>. Return true on success or false if <c>term</c> is not an
- integer or is outside the bounds of type <c>int</c>.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_get_int64(ErlNifEnv* env, ERL_NIF_TERM term, ErlNifSInt64* ip)</nametext></name>
- <fsummary>Read a 64-bit integer term</fsummary>
- <desc><p>Set <c>*ip</c> to the integer value of
- <c>term</c>. Return true on success or false if <c>term</c> is not an
- integer or is outside the bounds of a signed 64-bit integer.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_get_local_pid(ErlNifEnv* env, ERL_NIF_TERM term, ErlNifPid* pid)</nametext></name>
- <fsummary>Read an local pid term</fsummary>
- <desc><p>If <c>term</c> is the pid of a node local process, initialize the
- pid variable <c>*pid</c> from it and return true. Otherwise return false.
- No check if the process is alive is done.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_get_local_port(ErlNifEnv* env, ERL_NIF_TERM term, ErlNifPort* port_id)</nametext></name>
- <fsummary>Read an local port term</fsummary>
- <desc><p>If <c>term</c> identifies a node local port, initialize the
- port variable <c>*port_id</c> from it and return true. Otherwise return false.
- No check if the port is alive is done.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_get_list_cell(ErlNifEnv* env, ERL_NIF_TERM list, ERL_NIF_TERM* head, ERL_NIF_TERM* tail)</nametext></name>
- <fsummary>Get head and tail from a list</fsummary>
- <desc><p>Set <c>*head</c> and <c>*tail</c> from
- <c>list</c> and return true, or return false if <c>list</c> is not a
- non-empty list.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_get_list_length(ErlNifEnv* env, ERL_NIF_TERM term, unsigned* len)</nametext></name>
- <fsummary>Get the length of list <c>term</c></fsummary>
- <desc><p>Set <c>*len</c> to the length of list <c>term</c> and return true,
- or return false if <c>term</c> is not a proper list.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_get_long(ErlNifEnv* env, ERL_NIF_TERM term, long int* ip)</nametext></name>
- <fsummary>Read an long integer term</fsummary>
- <desc><p>Set <c>*ip</c> to the long integer value of <c>term</c> and
- return true, or return false if <c>term</c> is not an integer or is
- outside the bounds of type <c>long int</c>.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_get_map_size(ErlNifEnv* env, ERL_NIF_TERM term, size_t *size)</nametext></name>
- <fsummary>Read the size of a map term</fsummary>
- <desc><p>Set <c>*size</c> to the number of key-value pairs in the map <c>term</c> and
- return true, or return false if <c>term</c> is not a map.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_get_map_value(ErlNifEnv* env, ERL_NIF_TERM map, ERL_NIF_TERM key, ERL_NIF_TERM* value)</nametext></name>
- <fsummary>Get the value of a key in a map</fsummary>
- <desc><p>Set <c>*value</c> to the value associated with <c>key</c> in the
- map <c>map</c> and return true. Return false if <c>map</c> is not a map
- or if <c>map</c> does not contain <c>key</c>.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_get_resource(ErlNifEnv* env, ERL_NIF_TERM term, ErlNifResourceType* type, void** objp)</nametext></name>
- <fsummary>Get the pointer to a resource object</fsummary>
- <desc><p>Set <c>*objp</c> to point to the resource object referred to by <c>term</c>.</p>
- <p>Return true on success or false if <c>term</c> is not a handle to a resource object
- of type <c>type</c>.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_get_string(ErlNifEnv* env,
- ERL_NIF_TERM list, char* buf, unsigned size,
- ErlNifCharEncoding encode)</nametext></name>
- <fsummary>Get a C-string from a list</fsummary>
- <desc><p>Write a null-terminated string, in the buffer pointed to by
- <c>buf</c> with size <c>size</c>, consisting of the characters
- in the string <c>list</c>. The characters are written using encoding
- <seealso marker="#ErlNifCharEncoding">encode</seealso>.
- Return the number of bytes written (including terminating null
- character), or <c>-size</c> if the string was truncated due to
- buffer space, or 0 if <c>list</c> is not a string that can be
- encoded with <c>encode</c> or if <c>size</c> was less than 1.
- The written string is always null-terminated unless buffer
- <c>size</c> is less than 1.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_get_tuple(ErlNifEnv* env, ERL_NIF_TERM term, int* arity, const ERL_NIF_TERM** array)</nametext></name>
- <fsummary>Inspect the elements of a tuple</fsummary>
- <desc><p>If <c>term</c> is a tuple, set <c>*array</c> to point
- to an array containing the elements of the tuple and set
- <c>*arity</c> to the number of elements. Note that the array
- is read-only and <c>(*array)[N-1]</c> will be the Nth element of
- the tuple. <c>*array</c> is undefined if the arity of the tuple
- is zero.</p><p>Return true on success or false if <c>term</c> is not a
- tuple.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_get_uint(ErlNifEnv* env, ERL_NIF_TERM term, unsigned int* ip)</nametext></name>
- <fsummary>Read an unsigned integer term</fsummary>
- <desc><p>Set <c>*ip</c> to the unsigned integer value of <c>term</c> and
- return true, or return false if <c>term</c> is not an unsigned integer or
- is outside the bounds of type <c>unsigned int</c>.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_get_uint64(ErlNifEnv* env, ERL_NIF_TERM term, ErlNifUInt64* ip)</nametext></name>
- <fsummary>Read an unsigned 64-bit integer term</fsummary>
- <desc><p>Set <c>*ip</c> to the unsigned integer value of <c>term</c> and
- return true, or return false if <c>term</c> is not an unsigned integer or
- is outside the bounds of an unsigned 64-bit integer.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_get_ulong(ErlNifEnv* env, ERL_NIF_TERM term, unsigned long* ip)</nametext></name>
- <fsummary>Read an unsigned integer term</fsummary>
- <desc><p>Set <c>*ip</c> to the unsigned long integer value of <c>term</c>
- and return true, or return false if <c>term</c> is not an unsigned integer or is
- outside the bounds of type <c>unsigned long</c>.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_getenv(const char* key, char* value, size_t *value_size)</nametext></name>
- <fsummary>Get the value of an environment variable</fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_getenv">erl_drv_getenv</seealso>.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_has_pending_exception(ErlNifEnv* env, ERL_NIF_TERM* reason)</nametext></name>
- <fsummary>Check if an exception has been raised</fsummary>
- <desc><p>Return true if a pending exception is associated
- with the environment <c>env</c>. If <c>reason</c> is a null pointer, ignore it.
- Otherwise, if there's a pending exception associated with <c>env</c>, set the ERL_NIF_TERM
- to which <c>reason</c> points to the value of the exception's term. For example, if
- <seealso marker="#enif_make_badarg">enif_make_badarg</seealso> is called to set a
- pending <c>badarg</c> exception, a subsequent call to <c>enif_has_pending_exception(env, &amp;reason)</c>
- will set <c>reason</c> to the atom <c>badarg</c>, then return true.</p>
- <p>See also: <seealso marker="#enif_make_badarg">enif_make_badarg</seealso>
- and <seealso marker="#enif_raise_exception">enif_raise_exception</seealso>.</p>
- </desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_inspect_binary(ErlNifEnv* env, ERL_NIF_TERM bin_term, ErlNifBinary* bin)</nametext></name>
- <fsummary>Inspect the content of a binary</fsummary>
- <desc><p>Initialize the structure pointed to by <c>bin</c> with
- information about the binary term
- <c>bin_term</c>. Return true on success or false if <c>bin_term</c> is not a binary.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_inspect_iolist_as_binary(ErlNifEnv*
- env, ERL_NIF_TERM term, ErlNifBinary* bin)
- </nametext></name>
- <fsummary>Inspect the content of an iolist</fsummary>
- <desc><p>Initialize the structure pointed to by <c>bin</c> with one
- continuous buffer with the same byte content as <c>iolist</c>. As with
- inspect_binary, the data pointed to by <c>bin</c> is transient and does
- not need to be released. Return true on success or false if <c>iolist</c> is not an
- iolist.</p>
+ <func>
+ <name><ret>void</ret>
+ <nametext>enif_cond_signal(ErlNifCond *cnd)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_cond_signal">
+ <c>erl_drv_cond_signal</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret>
+ <nametext>enif_cond_wait(ErlNifCond *cnd, ErlNifMutex *mtx)</nametext>
+ </name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_cond_wait">
+ <c>erl_drv_cond_wait</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_consume_timeslice(ErlNifEnv *env, int percent)</nametext>
+ </name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Gives the runtime system a hint about how much CPU time the current
+ NIF call has consumed since the last hint, or since the start of the
+ NIF if no previous hint has been specified. The time is specified as a
+ percent of the timeslice that a process is allowed to execute
+ Erlang code until it can be suspended to give time for other runnable
+ processes. The scheduling timeslice is not an exact entity, but can
+ usually be approximated to about 1 millisecond.</p>
+ <p>Notice that it is up to the runtime system to determine if and how
+ to use this information. Implementations on some platforms can use
+ other means to determine consumed CPU time. Lengthy NIFs should
+ regardless of this frequently call <c>enif_consume_timeslice</c> to
+ determine if it is allowed to continue execution.</p>
+ <p>Argument <c>percent</c> must be an integer between 1 and 100. This
+ function must only be called from a NIF-calling thread, and argument
+ <c>env</c> must be the environment of the calling process.</p>
+ <p>Returns <c>1</c> if the timeslice is exhausted, otherwise <c>0</c>.
+ If <c>1</c> is returned, the NIF is to return as soon as possible in
+ order for the process to yield.</p>
+ <p>This function is provided to better support co-operative scheduling,
+ improve system responsiveness, and make it easier to prevent
+ misbehaviors of the VM because of a NIF monopolizing a scheduler
+ thread. It can be used to divide <seealso marker="#lengthy_work">
+ length work</seealso> into a number of repeated NIF calls without the
+ need to create threads.</p>
+ <p>See also the <seealso marker="#WARNING">warning</seealso> text at
+ the beginning of this manual page.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ErlNifTime</ret><nametext>enif_convert_time_unit(ErlNifTime
+ val, ErlNifTimeUnit from, ErlNifTimeUnit to)</nametext></name>
+ <fsummary>Convert time unit of a time value.</fsummary>
+ <desc>
+ <marker id="enif_convert_time_unit"></marker>
+ <p>Converts the <c>val</c> value of time unit <c>from</c> to
+ the corresponding value of time unit <c>to</c>. The result is
+ rounded using the floor function.</p>
+ <taglist>
+ <tag><c>val</c></tag>
+ <item>Value to convert time unit for.</item>
+ <tag><c>from</c></tag>
+ <item>Time unit of <c>val</c>.</item>
+ <tag><c>to</c></tag>
+ <item>Time unit of returned value.</item>
+ </taglist>
+ <p>Returns <c>ERL_NIF_TIME_ERROR</c> if called with an invalid
+ time unit argument.</p>
+ <p>See also <seealso marker="#ErlNifTime"><c>ErlNifTime</c></seealso>
+ and
+ <seealso marker="#ErlNifTimeUnit"><c>ErlNifTimeUnit</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_cpu_time(ErlNifEnv *)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns the CPU time in the same format as
+ <seealso marker="erlang#timestamp-0">
+ <c>erlang:timestamp()</c></seealso>.
+ The CPU time is the time the current logical CPU has spent executing
+ since some arbitrary point in the past. If the OS does not support
+ fetching this value, <c>enif_cpu_time</c> invokes
+ <seealso marker="#enif_make_badarg">
+ <c>enif_make_badarg</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_equal_tids(ErlNifTid tid1, ErlNifTid tid2)</nametext>
+ </name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_equal_tids">
+ <c>erl_drv_equal_tids</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret><nametext>enif_free(void* ptr)</nametext></name>
+ <fsummary>Free dynamic memory.</fsummary>
+ <desc>
+ <p>Frees memory allocated by
+ <seealso marker="#enif_alloc"><c>enif_alloc</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret>
+ <nametext>enif_free_env(ErlNifEnv* env)</nametext></name>
+ <fsummary>Free an environment allocated with enif_alloc_env.</fsummary>
+ <desc>
+ <p>Frees an environment allocated with
+ <seealso marker="#enif_alloc_env"><c>enif_alloc_env</c></seealso>.
+ All terms created in the environment are freed as well.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_get_atom(ErlNifEnv* env, ERL_NIF_TERM
+ term, char* buf, unsigned size, ErlNifCharEncoding encode)</nametext>
+ </name>
+ <fsummary>Get the text representation of an atom term.</fsummary>
+ <desc>
+ <p>Writes a <c>NULL</c>-terminated string in the buffer pointed to by
+ <c>buf</c> of size <c>size</c>, consisting of the string
+ representation of the atom <c>term</c> with encoding
+ <seealso marker="#ErlNifCharEncoding">encode</seealso>.</p>
+ <p>Returns the number of bytes written (including terminating
+ <c>NULL</c> character) or <c>0</c> if <c>term</c> is not an atom with
+ maximum length of <c>size-1</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_get_atom_length(ErlNifEnv* env,
+ ERL_NIF_TERM term, unsigned* len, ErlNifCharEncoding encode)</nametext>
+ </name>
+ <fsummary>Get the length of atom <c>term</c>.</fsummary>
+ <desc>
+ <p>Sets <c>*len</c> to the length (number of bytes excluding
+ terminating <c>NULL</c> character) of the atom <c>term</c> with
+ encoding <c>encode</c>.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if <c>term</c> is not
+ an atom.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_get_double(ErlNifEnv* env,
+ ERL_NIF_TERM term, double* dp)</nametext></name>
+ <fsummary>Read a floating-point number term.</fsummary>
+ <desc>
+ <p>Sets <c>*dp</c> to the floating-point value of <c>term</c>.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if <c>term</c> is not
+ a float.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_get_int(ErlNifEnv* env, ERL_NIF_TERM
+ term, int* ip)</nametext></name>
+ <fsummary>Read an integer term.</fsummary>
+ <desc>
+ <p>Sets <c>*ip</c> to the integer value of <c>term</c>.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if <c>term</c> is not
+ an integer or is outside the bounds of type <c>int</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_get_int64(ErlNifEnv* env, ERL_NIF_TERM
+ term, ErlNifSInt64* ip)</nametext></name>
+ <fsummary>Read a 64-bit integer term.</fsummary>
+ <desc>
+ <p>Sets <c>*ip</c> to the integer value of <c>term</c>.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if <c>term</c> is not
+ an integer or is outside the bounds of a signed 64-bit integer.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_get_local_pid(ErlNifEnv* env,
+ ERL_NIF_TERM term, ErlNifPid* pid)</nametext></name>
+ <fsummary>Read a local pid term.</fsummary>
+ <desc>
+ <p>If <c>term</c> is the pid of a node local process, this function
+ initializes the pid variable <c>*pid</c> from it and returns
+ <c>true</c>. Otherwise returns <c>false</c>. No check is done to see
+ if the process is alive.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_get_local_port(ErlNifEnv* env,
+ ERL_NIF_TERM term, ErlNifPort* port_id)</nametext></name>
+ <fsummary>Read a local port term.</fsummary>
+ <desc>
+ <p>If <c>term</c> identifies a node local port, this function
+ initializes the port variable <c>*port_id</c> from it and returns
+ <c>true</c>. Otherwise returns <c>false</c>. No check is done to see
+ if the port is alive.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_get_list_cell(ErlNifEnv* env,
+ ERL_NIF_TERM list, ERL_NIF_TERM* head, ERL_NIF_TERM* tail)</nametext>
+ </name>
+ <fsummary>Get head and tail from a list.</fsummary>
+ <desc>
+ <p>Sets <c>*head</c> and <c>*tail</c> from list <c>list</c>.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if it is
+ not a list or the list is empty.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_get_list_length(ErlNifEnv* env,
+ ERL_NIF_TERM term, unsigned* len)</nametext></name>
+ <fsummary>Get the length of list <c>term</c>.</fsummary>
+ <desc>
+ <p>Sets <c>*len</c> to the length of list <c>term</c>.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if <c>term</c> is
+ not a proper list.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_get_long(ErlNifEnv* env, ERL_NIF_TERM
+ term, long int* ip)</nametext></name>
+ <fsummary>Read a long integer term.</fsummary>
+ <desc>
+ <p>Sets <c>*ip</c> to the long integer value of <c>term</c>.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if <c>term</c> is
+ not an integer or is outside the bounds of type <c>long int</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_get_map_size(ErlNifEnv* env,
+ ERL_NIF_TERM term, size_t *size)</nametext></name>
+ <fsummary>Read the size of a map term.</fsummary>
+ <desc>
+ <p>Sets <c>*size</c> to the number of key-value pairs in the map
+ <c>term</c>.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if <c>term</c> is
+ not a map.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_get_map_value(ErlNifEnv* env,
+ ERL_NIF_TERM map, ERL_NIF_TERM key, ERL_NIF_TERM* value)</nametext>
+ </name>
+ <fsummary>Get the value of a key in a map.</fsummary>
+ <desc>
+ <p>Sets <c>*value</c> to the value associated with <c>key</c> in the
+ map <c>map</c>.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if <c>map</c> is not
+ a map or if <c>map</c> does not contain <c>key</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_get_resource(ErlNifEnv* env,
+ ERL_NIF_TERM term, ErlNifResourceType* type, void** objp)</nametext>
+ </name>
+ <fsummary>Get the pointer to a resource object.</fsummary>
+ <desc>
+ <p>Sets <c>*objp</c> to point to the resource object referred to by
+ <c>term</c>.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if <c>term</c> is
+ not a handle to a resource object of type <c>type</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_get_string(ErlNifEnv* env,
+ ERL_NIF_TERM list, char* buf, unsigned size,
+ ErlNifCharEncoding encode)</nametext></name>
+ <fsummary>Get a C-string from a list.</fsummary>
+ <desc>
+ <p>Writes a <c>NULL</c>-terminated string in the buffer pointed to by
+ <c>buf</c> with size <c>size</c>, consisting of the characters
+ in the string <c>list</c>. The characters are written using encoding
+ <seealso marker="#ErlNifCharEncoding">encode</seealso>.</p>
+ <p>Returns one of the following:</p>
+ <list type="bulleted">
+ <item>The number of bytes written (including terminating <c>NULL</c>
+ character)</item>
+ <item><c>-size</c> if the string was truncated because of buffer
+ space</item>
+ <item><c>0</c> if <c>list</c> is not a string that can be encoded
+ with <c>encode</c> or if <c>size</c> was &lt; <c>1</c>.</item>
+ </list>
+ <p>The written string is always <c>NULL</c>-terminated, unless buffer
+ <c>size</c> is &lt; <c>1</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_get_tuple(ErlNifEnv* env, ERL_NIF_TERM
+ term, int* arity, const ERL_NIF_TERM** array)</nametext></name>
+ <fsummary>Inspect the elements of a tuple.</fsummary>
+ <desc>
+ <p>If <c>term</c> is a tuple, this function sets <c>*array</c> to point
+ to an array containing the elements of the tuple, and sets
+ <c>*arity</c> to the number of elements. Notice that the array
+ is read-only and <c>(*array)[N-1]</c> is the Nth element of
+ the tuple. <c>*array</c> is undefined if the arity of the tuple
+ is zero.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if <c>term</c> is
+ not a tuple.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_get_uint(ErlNifEnv* env, ERL_NIF_TERM
+ term, unsigned int* ip)</nametext></name>
+ <fsummary>Read an unsigned integer term.</fsummary>
+ <desc>
+ <p>Sets <c>*ip</c> to the unsigned integer value of <c>term</c>.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if <c>term</c> is
+ not an unsigned integer or is outside the bounds of type
+ <c>unsigned int</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_get_uint64(ErlNifEnv* env,
+ ERL_NIF_TERM term, ErlNifUInt64* ip)</nametext></name>
+ <fsummary>Read an unsigned 64-bit integer term.</fsummary>
+ <desc>
+ <p>Sets <c>*ip</c> to the unsigned integer value of <c>term</c>.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if <c>term</c> is
+ not an unsigned integer or is outside the bounds of an unsigned
+ 64-bit integer.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_get_ulong(ErlNifEnv* env, ERL_NIF_TERM
+ term, unsigned long* ip)</nametext></name>
+ <fsummary>Read an unsigned integer term.</fsummary>
+ <desc>
+ <p>Sets <c>*ip</c> to the unsigned long integer value of
+ <c>term</c>.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if <c>term</c> is
+ not an unsigned integer or is outside the bounds of type
+ <c>unsigned long</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_getenv(const char* key, char* value,
+ size_t *value_size)</nametext></name>
+ <fsummary>Get the value of an environment variable.</fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_getenv">
+ <c>erl_drv_getenv</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_has_pending_exception(ErlNifEnv* env,
+ ERL_NIF_TERM* reason)</nametext></name>
+ <fsummary>Check if an exception has been raised.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if a pending exception is associated with the
+ environment <c>env</c>. If <c>reason</c> is a <c>NULL</c> pointer,
+ ignore it. Otherwise, if a pending exception associated with
+ <c>env</c> exists, set <c>ERL_NIF_TERM</c> to which <c>reason</c>
+ points to the value of the exception's term. For example, if
+ <seealso marker="#enif_make_badarg">
+ <c>enif_make_badarg</c></seealso> is called to set a pending
+ <c>badarg</c> exception, a later call to
+ <c>enif_has_pending_exception(env, &amp;reason)</c> sets
+ <c>reason</c> to the atom <c>badarg</c>, then return <c>true</c>.</p>
+ <p>See also <seealso marker="#enif_make_badarg">
+ <c>enif_make_badarg</c></seealso> and
+ <seealso marker="#enif_raise_exception">
+ <c>enif_raise_exception</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_inspect_binary(ErlNifEnv* env,
+ ERL_NIF_TERM bin_term, ErlNifBinary* bin)</nametext></name>
+ <fsummary>Inspect the content of a binary.</fsummary>
+ <desc>
+ <p>Initializes the structure pointed to by <c>bin</c> with information
+ about binary term <c>bin_term</c>.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if <c>bin_term</c>
+ is not a binary.</p>
</desc>
</func>
- <func><name><ret>int</ret><nametext>enif_is_atom(ErlNifEnv* env, ERL_NIF_TERM term)</nametext></name>
- <fsummary>Determine if a term is an atom</fsummary>
- <desc><p>Return true if <c>term</c> is an atom.</p></desc>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_inspect_iolist_as_binary(ErlNifEnv*
+ env, ERL_NIF_TERM term, ErlNifBinary* bin)</nametext></name>
+ <fsummary>Inspect the content of an iolist.</fsummary>
+ <desc>
+ <p>Initializes the structure pointed to by <c>bin</c> with a
+ continuous buffer with the same byte content as <c>iolist</c>. As
+ with <c>inspect_binary</c>, the data pointed to by <c>bin</c> is
+ transient and does not need to be released.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if <c>iolist</c> is
+ not an iolist.</p>
+ </desc>
</func>
- <func><name><ret>int</ret><nametext>enif_is_binary(ErlNifEnv* env, ERL_NIF_TERM term)</nametext></name>
- <fsummary>Determine if a term is a binary</fsummary>
- <desc><p>Return true if <c>term</c> is a binary</p></desc>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_is_atom(ErlNifEnv* env, ERL_NIF_TERM term)</nametext>
+ </name>
+ <fsummary>Determine if a term is an atom.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c>term</c> is an atom.</p>
+ </desc>
</func>
- <func><name><ret>int</ret><nametext>enif_is_current_process_alive(ErlNifEnv* env)</nametext></name>
- <fsummary>Determine if currently executing process is alive or not.</fsummary>
- <desc><p>Return true if currently executing process is currently alive; otherwise
- false.</p>
- <p>This function can only be used from a NIF-calling thread, and with an
- environment corresponding to currently executing processes.</p></desc>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_is_binary(ErlNifEnv* env, ERL_NIF_TERM term)</nametext>
+ </name>
+ <fsummary>Determine if a term is a binary.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c>term</c> is a binary.</p>
+ </desc>
</func>
- <func><name><ret>int</ret><nametext>enif_is_empty_list(ErlNifEnv* env, ERL_NIF_TERM term)</nametext></name>
- <fsummary>Determine if a term is an empty list</fsummary>
- <desc><p>Return true if <c>term</c> is an empty list.</p></desc>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_is_current_process_alive(ErlNifEnv* env)</nametext>
+ </name>
+ <fsummary>Determine if currently executing process is alive.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if the currently executing process is currently
+ alive, otherwise <c>false</c>.</p>
+ <p>This function can only be used from a NIF-calling thread, and with
+ an environment corresponding to currently executing processes.</p>
+ </desc>
</func>
- <func><name><ret>int</ret><nametext>enif_is_exception(ErlNifEnv* env, ERL_NIF_TERM term)</nametext></name>
- <fsummary>Determine if a term is an exception</fsummary>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_is_empty_list(ErlNifEnv* env,
+ ERL_NIF_TERM term)</nametext></name>
+ <fsummary>Determine if a term is an empty list.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c>term</c> is an empty list.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_is_exception(ErlNifEnv* env,
+ ERL_NIF_TERM term)</nametext></name>
+ <fsummary>Determine if a term is an exception.</fsummary>
<desc><marker id="enif_is_exception"/>
- <p>Return true if <c>term</c> is an exception.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_is_map(ErlNifEnv* env, ERL_NIF_TERM term)</nametext></name>
- <fsummary>Determine if a term is a map</fsummary>
- <desc><p>Return true if <c>term</c> is a map, false otherwise.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_is_number(ErlNifEnv* env, ERL_NIF_TERM term)</nametext></name>
- <fsummary>Determine if a term is a number (integer or float)</fsummary>
- <desc><p>Return true if <c>term</c> is a number.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_is_fun(ErlNifEnv* env, ERL_NIF_TERM term)</nametext></name>
- <fsummary>Determine if a term is a fun</fsummary>
- <desc><p>Return true if <c>term</c> is a fun.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_is_identical(ERL_NIF_TERM lhs, ERL_NIF_TERM rhs)</nametext></name>
- <fsummary>Erlang operator =:=</fsummary>
- <desc><p>Return true if the two terms are identical. Corresponds to the
- Erlang operators <c>=:=</c> and
- <c>=/=</c>.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_is_on_dirty_scheduler(ErlNifEnv* env)</nametext></name>
- <fsummary>Check to see if executing on a dirty scheduler thread</fsummary>
- <desc>
- <p>Check to see if the current NIF is executing on a dirty scheduler thread. If
- executing on a dirty scheduler thread true returned; otherwise false.</p>
- <p>This function can only be used from a NIF-calling thread, and with an
- environment corresponding to currently executing processes.</p>
- </desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_is_pid(ErlNifEnv* env, ERL_NIF_TERM term)</nametext></name>
- <fsummary>Determine if a term is a pid</fsummary>
- <desc><p>Return true if <c>term</c> is a pid.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_is_port(ErlNifEnv* env, ERL_NIF_TERM term)</nametext></name>
- <fsummary>Determine if a term is a port</fsummary>
- <desc><p>Return true if <c>term</c> is a port.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_is_port_alive(ErlNifEnv* env, ErlNifPort *port_id)</nametext></name>
- <fsummary>Determine if a local port is alive or not.</fsummary>
- <desc><p>Return true if <c>port_id</c> is currently alive.</p>
- <p>This function is only thread-safe when the emulator with SMP support is used.
- It can only be used in a non-SMP emulator from a NIF-calling thread.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_is_process_alive(ErlNifEnv* env, ErlNifPid *pid)</nametext></name>
- <fsummary>Determine if a local process is alive or not.</fsummary>
- <desc><p>Return true if <c>pid</c> is currently alive.</p>
- <p>This function is only thread-safe when the emulator with SMP support is used.
- It can only be used in a non-SMP emulator from a NIF-calling thread.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_is_ref(ErlNifEnv* env, ERL_NIF_TERM term)</nametext></name>
- <fsummary>Determine if a term is a reference</fsummary>
- <desc><p>Return true if <c>term</c> is a reference.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_is_tuple(ErlNifEnv* env, ERL_NIF_TERM term)</nametext></name>
- <fsummary>Determine if a term is a tuple</fsummary>
- <desc><p>Return true if <c>term</c> is a tuple.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_is_list(ErlNifEnv* env, ERL_NIF_TERM term)</nametext></name>
- <fsummary>Determine if a term is a list</fsummary>
- <desc><p>Return true if <c>term</c> is a list.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_keep_resource(void* obj)</nametext></name>
- <fsummary>Add a reference to a resource object</fsummary>
- <desc><p>Add a reference to resource object <c>obj</c> obtained from
- <seealso marker="#enif_alloc_resource">enif_alloc_resource</seealso>.
- Each call to <c>enif_keep_resource</c> for an object must be balanced by
- a call to <seealso marker="#enif_release_resource">enif_release_resource</seealso>
- before the object will be destructed.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_atom(ErlNifEnv* env, const char* name)</nametext></name>
- <fsummary>Create an atom term</fsummary>
- <desc><p>Create an atom term from the null-terminated C-string <c>name</c>
- with iso-latin-1 encoding. If the length of <c>name</c> exceeds the maximum length
- allowed for an atom (255 characters), <c>enif_make_atom</c> invokes
- <seealso marker="#enif_make_badarg">enif_make_badarg</seealso>.
- </p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_atom_len(ErlNifEnv* env, const char* name, size_t len)</nametext></name>
- <fsummary>Create an atom term</fsummary>
- <desc><p>Create an atom term from the string <c>name</c> with length <c>len</c>.
- Null-characters are treated as any other characters. If <c>len</c> is greater than the maximum length
- allowed for an atom (255 characters), <c>enif_make_atom</c> invokes
- <seealso marker="#enif_make_badarg">enif_make_badarg</seealso>.
- </p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_badarg(ErlNifEnv* env)</nametext></name>
- <fsummary>Make a badarg exception</fsummary>
- <desc><p>Make a badarg exception to be returned from a NIF, and associate
- it with the environment <c>env</c>. Once a NIF or any function
- it calls invokes <c>enif_make_badarg</c>, the runtime ensures that a
- <c>badarg</c> exception is raised when the NIF returns, even if the NIF
- attempts to return a non-exception term instead.
- The return value from <c>enif_make_badarg</c> may be used only as the
- return value from the NIF that invoked it (directly or indirectly)
- or be passed to
- <seealso marker="#enif_is_exception">enif_is_exception</seealso>, but
- not to any other NIF API function.</p>
- <p>See also: <seealso marker="#enif_has_pending_exception">enif_has_pending_exception</seealso>
- and <seealso marker="#enif_raise_exception">enif_raise_exception</seealso>.
- </p>
- <note><p>In earlier versions (older than erts-7.0, OTP 18) the return value
- from <c>enif_make_badarg</c> had to be returned from the NIF. This
- requirement is now lifted as the return value from the NIF is ignored
- if <c>enif_make_badarg</c> has been invoked.</p></note></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_binary(ErlNifEnv* env, ErlNifBinary* bin)</nametext></name>
- <fsummary>Make a binary term</fsummary>
- <desc><p>Make a binary term from <c>bin</c>. Any ownership of
- the binary data will be transferred to the created term and
- <c>bin</c> should be considered read-only for the rest of the NIF
- call and then as released.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_copy(ErlNifEnv* dst_env, ERL_NIF_TERM src_term)</nametext></name>
- <fsummary>Make a copy of a term</fsummary>
- <desc><p>Make a copy of term <c>src_term</c>. The copy will be created in
- environment <c>dst_env</c>. The source term may be located in any
- environment.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_double(ErlNifEnv* env, double d)</nametext></name>
- <fsummary>Create a floating-point term</fsummary>
- <desc><p>Create a floating-point term from a <c>double</c>. If the <c>double</c> argument is
- not finite or is NaN, <c>enif_make_double</c> invokes
- <seealso marker="#enif_make_badarg">enif_make_badarg</seealso>.
- </p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_make_existing_atom(ErlNifEnv* env, const char* name, ERL_NIF_TERM* atom, ErlNifCharEncoding encode)</nametext></name>
- <fsummary>Create an existing atom term</fsummary>
- <desc><p>Try to create the term of an already existing atom from
- the null-terminated C-string <c>name</c> with encoding
- <seealso marker="#ErlNifCharEncoding">encode</seealso>. If the atom
- already exists store the term in <c>*atom</c> and return true, otherwise
- return false. If the length of <c>name</c> exceeds the maximum length
- allowed for an atom (255 characters), <c>enif_make_existing_atom</c>
- returns false.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_make_existing_atom_len(ErlNifEnv* env, const char* name, size_t len, ERL_NIF_TERM* atom, ErlNifCharEncoding encoding)</nametext></name>
- <fsummary>Create an existing atom term</fsummary>
- <desc><p>Try to create the term of an already existing atom from the
- string <c>name</c> with length <c>len</c> and encoding
- <seealso marker="#ErlNifCharEncoding">encode</seealso>. Null-characters
- are treated as any other characters. If the atom already exists store the term
- in <c>*atom</c> and return true, otherwise return false. If <c>len</c> is greater
- than the maximum length allowed for an atom (255 characters),
- <c>enif_make_existing_atom_len</c> returns false.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_int(ErlNifEnv* env, int i)</nametext></name>
- <fsummary>Create an integer term</fsummary>
- <desc><p>Create an integer term.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_int64(ErlNifEnv* env, ErlNifSInt64 i)</nametext></name>
- <fsummary>Create an integer term</fsummary>
- <desc><p>Create an integer term from a signed 64-bit integer.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list(ErlNifEnv* env, unsigned cnt, ...)</nametext></name>
- <fsummary>Create a list term</fsummary>
- <desc><p>Create an ordinary list term of length <c>cnt</c>. Expects
- <c>cnt</c> number of arguments (after <c>cnt</c>) of type ERL_NIF_TERM as the
- elements of the list. An empty list is returned if <c>cnt</c> is 0.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list1(ErlNifEnv* env, ERL_NIF_TERM e1)</nametext></name>
- <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list2(ErlNifEnv* env, ERL_NIF_TERM e1, ERL_NIF_TERM e2)</nametext></name>
- <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list3(ErlNifEnv* env, ERL_NIF_TERM e1, ERL_NIF_TERM e2, ERL_NIF_TERM e3)</nametext></name>
- <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list4(ErlNifEnv* env, ERL_NIF_TERM e1, ..., ERL_NIF_TERM e4)</nametext></name>
- <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list5(ErlNifEnv* env, ERL_NIF_TERM e1, ..., ERL_NIF_TERM e5)</nametext></name>
- <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list6(ErlNifEnv* env, ERL_NIF_TERM e1, ..., ERL_NIF_TERM e6)</nametext></name>
- <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list7(ErlNifEnv* env, ERL_NIF_TERM e1, ..., ERL_NIF_TERM e7)</nametext></name>
- <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list8(ErlNifEnv* env, ERL_NIF_TERM e1, ..., ERL_NIF_TERM e8)</nametext></name>
- <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list9(ErlNifEnv* env, ERL_NIF_TERM e1, ..., ERL_NIF_TERM e9)</nametext></name>
- <fsummary>Create a list term</fsummary>
- <desc><p>Create an ordinary list term with length indicated by the
- function name. Prefer these functions (macros) over the variadic
- <c>enif_make_list</c> to get a compile time error if the number of
- arguments does not match.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list_cell(ErlNifEnv* env, ERL_NIF_TERM head, ERL_NIF_TERM tail)</nametext></name>
- <fsummary>Create a list cell</fsummary>
- <desc><p>Create a list cell <c>[head | tail]</c>.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list_from_array(ErlNifEnv* env, const ERL_NIF_TERM arr[], unsigned cnt)</nametext></name>
- <fsummary>Create a list term from an array</fsummary>
- <desc><p>Create an ordinary list containing the elements of array <c>arr</c>
- of length <c>cnt</c>. An empty list is returned if <c>cnt</c> is 0.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_long(ErlNifEnv* env, long int i)</nametext></name>
- <fsummary>Create an integer term from a long int</fsummary>
- <desc><p>Create an integer term from a <c>long int</c>.</p></desc>
- </func>
- <func><name><ret>unsigned char *</ret><nametext>enif_make_new_binary(ErlNifEnv* env, size_t size, ERL_NIF_TERM* termp)</nametext></name>
- <fsummary>Allocate and create a new binary term</fsummary>
- <desc><p>Allocate a binary of size <c>size</c> bytes and create an owning
- term. The binary data is mutable until the calling NIF returns. This is a
- quick way to create a new binary without having to use
- <seealso marker="#ErlNifBinary">ErlNifBinary</seealso>. The drawbacks are
- that the binary can not be kept between NIF calls and it can not be
- reallocated.</p><p>Return a pointer to the raw binary data and set
- <c>*termp</c> to the binary term.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_new_map(ErlNifEnv* env)</nametext></name>
- <fsummary>Make an empty map term</fsummary>
- <desc><p>Make an empty map term.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_make_map_put(ErlNifEnv* env, ERL_NIF_TERM map_in, ERL_NIF_TERM key, ERL_NIF_TERM value, ERL_NIF_TERM* map_out)</nametext></name>
- <fsummary>Insert key-value pair in map</fsummary>
- <desc><p>Make a copy of map <c>map_in</c> and insert <c>key</c> with
- <c>value</c>. If <c>key</c> already exists in <c>map_in</c>, the old
- associated value is replaced by <c>value</c>. If successful set
- <c>*map_out</c> to the new map and return true. Return false if
- <c>map_in</c> is not a map.</p>
- <p>The <c>map_in</c> term must belong to the environment <c>env</c>.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_make_map_update(ErlNifEnv* env, ERL_NIF_TERM map_in, ERL_NIF_TERM key, ERL_NIF_TERM new_value, ERL_NIF_TERM* map_out)</nametext></name>
- <fsummary>Replace value for key in map</fsummary>
- <desc><p>Make a copy of map <c>map_in</c> and replace the old associated
- value for <c>key</c> with <c>new_value</c>. If successful set
- <c>*map_out</c> to the new map and return true. Return false if
- <c>map_in</c> is not a map or if it does no contain <c>key</c>.</p>
- <p>The <c>map_in</c> term must belong to the environment <c>env</c>.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_make_map_remove(ErlNifEnv* env, ERL_NIF_TERM map_in, ERL_NIF_TERM key, ERL_NIF_TERM* map_out)</nametext></name>
- <fsummary>Remove key from map</fsummary>
- <desc><p>If map <c>map_in</c> contains <c>key</c>, make a copy of
- <c>map_in</c> in <c>*map_out</c> and remove <c>key</c> and associated
- value. If map <c>map_in</c> does not contain <c>key</c>, set
- <c>*map_out</c> to <c>map_in</c>. Return true for success or false if
- <c>map_in</c> is not a map.</p>
- <p>The <c>map_in</c> term must belong to the environment <c>env</c>.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_pid(ErlNifEnv* env, const ErlNifPid* pid)</nametext></name>
- <fsummary>Make a pid term</fsummary>
- <desc><p>Make a pid term from <c>*pid</c>.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_ref(ErlNifEnv* env)</nametext></name>
- <fsummary>Create a reference</fsummary>
- <desc><p>Create a reference like <seealso marker="erlang#make_ref-0">erlang:make_ref/0</seealso>.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_resource(ErlNifEnv* env, void* obj)</nametext></name>
- <fsummary>Create an opaque handle to a resource object</fsummary>
- <desc><p>Create an opaque handle to a memory managed resource object
- obtained by <seealso marker="#enif_alloc_resource">enif_alloc_resource</seealso>.
- No ownership transfer is done, as the resource object still needs to be released by
- <seealso marker="#enif_release_resource">enif_release_resource</seealso>,
- but note that the call to <c>enif_release_resource</c> can occur
- immediately after obtaining the term from <c>enif_make_resource</c>,
- in which case the resource object will be deallocated when the
- term is garbage collected. See the
- <seealso marker="#enif_resource_example">example of creating and
- returning a resource object</seealso> for more details.</p>
- <p>Note that the only defined behaviour of using a resource term in
- an Erlang program is to store it and send it between processes on the
- same node. Other operations such as matching or <c>term_to_binary</c>
- will have unpredictable (but harmless) results.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_resource_binary(ErlNifEnv* env, void* obj, const void* data, size_t size)</nametext></name>
- <fsummary>Create a custom binary term</fsummary>
- <desc><p>Create a binary term that is memory managed by a resource object
- <c>obj</c> obtained by <seealso marker="#enif_alloc_resource">enif_alloc_resource</seealso>.
- The returned binary term will consist of <c>size</c> bytes pointed to
- by <c>data</c>. This raw binary data must be kept readable and unchanged
- until the destructor of the resource is called. The binary data may be
- stored external to the resource object in which case it is the responsibility
- of the destructor to release the data.</p>
- <p>Several binary terms may be managed by the same resource object. The
- destructor will not be called until the last binary is garbage collected.
- This can be useful as a way to return different parts of a larger binary
- buffer.</p>
- <p>As with <seealso marker="#enif_make_resource">enif_make_resource</seealso>,
- no ownership transfer is done. The resource still needs to be released with
- <seealso marker="#enif_release_resource">enif_release_resource</seealso>.</p>
- </desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_make_reverse_list(ErlNifEnv* env, ERL_NIF_TERM list_in, ERL_NIF_TERM *list_out)</nametext></name>
- <fsummary>Create the reverse of a list</fsummary>
- <desc><p>Set <c>*list_out</c> to the reverse list of the list <c>list_in</c> and return true,
- or return false if <c>list_in</c> is not a list. This function should only be used on
- short lists as a copy will be created of the list which will not be released until after the
- nif returns.</p>
- <p>The <c>list_in</c> term must belong to the environment <c>env</c>.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_string(ErlNifEnv* env, const char* string, ErlNifCharEncoding encoding)</nametext></name>
- <fsummary>Create a string</fsummary>
- <desc><p>Create a list containing the characters of the
- null-terminated string <c>string</c> with encoding <seealso marker="#ErlNifCharEncoding">encoding</seealso>.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_string_len(ErlNifEnv* env, const char* string, size_t len, ErlNifCharEncoding encoding)</nametext></name>
- <fsummary>Create a string</fsummary>
- <desc><p>Create a list containing the characters of the string <c>string</c> with
- length <c>len</c> and encoding <seealso marker="#ErlNifCharEncoding">encoding</seealso>.
- Null-characters are treated as any other characters.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_sub_binary(ErlNifEnv*
- env, ERL_NIF_TERM bin_term, size_t pos, size_t size)</nametext></name>
- <fsummary>Make a subbinary term</fsummary>
- <desc><p>Make a subbinary of binary <c>bin_term</c>, starting at
- zero-based position <c>pos</c> with a length of <c>size</c> bytes.
- <c>bin_term</c> must be a binary or bitstring and
- <c>pos+size</c> must be less or equal to the number of whole
- bytes in <c>bin_term</c>.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple(ErlNifEnv* env, unsigned cnt, ...)</nametext></name>
- <fsummary>Create a tuple term</fsummary>
- <desc><p>Create a tuple term of arity <c>cnt</c>. Expects
- <c>cnt</c> number of arguments (after <c>cnt</c>) of type ERL_NIF_TERM as the
- elements of the tuple.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple1(ErlNifEnv* env, ERL_NIF_TERM e1)</nametext></name>
- <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple2(ErlNifEnv* env, ERL_NIF_TERM e1, ERL_NIF_TERM e2)</nametext></name>
- <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple3(ErlNifEnv* env, ERL_NIF_TERM e1, ERL_NIF_TERM e2, ERL_NIF_TERM e3)</nametext></name>
- <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple4(ErlNifEnv* env, ERL_NIF_TERM e1, ..., ERL_NIF_TERM e4)</nametext></name>
- <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple5(ErlNifEnv* env, ERL_NIF_TERM e1, ..., ERL_NIF_TERM e5)</nametext></name>
- <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple6(ErlNifEnv* env, ERL_NIF_TERM e1, ..., ERL_NIF_TERM e6)</nametext></name>
- <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple7(ErlNifEnv* env, ERL_NIF_TERM e1, ..., ERL_NIF_TERM e7)</nametext></name>
- <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple8(ErlNifEnv* env, ERL_NIF_TERM e1, ..., ERL_NIF_TERM e8)</nametext></name>
- <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple9(ErlNifEnv* env, ERL_NIF_TERM e1, ..., ERL_NIF_TERM e9)</nametext></name>
- <fsummary>Create a tuple term</fsummary>
- <desc><p>Create a tuple term with length indicated by the
- function name. Prefer these functions (macros) over the variadic
- <c>enif_make_tuple</c> to get a compile time error if the number of
- arguments does not match.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple_from_array(ErlNifEnv* env, const ERL_NIF_TERM arr[], unsigned cnt)</nametext></name>
- <fsummary>Create a tuple term from an array</fsummary>
- <desc><p>Create a tuple containing the elements of array <c>arr</c>
- of length <c>cnt</c>.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_uint(ErlNifEnv* env, unsigned int i)</nametext></name>
- <fsummary>Create an unsigned integer term</fsummary>
- <desc><p>Create an integer term from an <c>unsigned int</c>.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_uint64(ErlNifEnv* env, ErlNifUInt64 i)</nametext></name>
- <fsummary>Create an unsigned integer term</fsummary>
- <desc><p>Create an integer term from an unsigned 64-bit integer.</p></desc>
- </func>
- <func>
- <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_unique_integer(ErlNifEnv *env, ErlNifUniqueInteger properties)</nametext></name>
+ <p>Return true if <c>term</c> is an exception.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_is_fun(ErlNifEnv* env, ERL_NIF_TERM
+ term)</nametext></name>
+ <fsummary>Determine if a term is a fun.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c>term</c> is a fun.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_is_identical(ERL_NIF_TERM lhs,
+ ERL_NIF_TERM rhs)</nametext></name>
+ <fsummary>Erlang operator =:=.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if the two terms are identical. Corresponds to
+ the Erlang operators <c>=:=</c> and <c>=/=</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_is_list(ErlNifEnv* env, ERL_NIF_TERM term)</nametext>
+ </name>
+ <fsummary>Determine if a term is a list.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c>term</c> is a list.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_is_map(ErlNifEnv* env, ERL_NIF_TERM
+ term)</nametext></name>
+ <fsummary>Determine if a term is a map.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c>term</c> is a map, otherwise
+ <c>false</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_is_number(ErlNifEnv* env, ERL_NIF_TERM
+ term)</nametext></name>
+ <fsummary>Determine if a term is a number (integer or float).</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c>term</c> is a number.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_is_pid(ErlNifEnv* env, ERL_NIF_TERM term)</nametext>
+ </name>
+ <fsummary>Determine if a term is a pid.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c>term</c> is a pid.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_is_port(ErlNifEnv* env, ERL_NIF_TERM term)</nametext>
+ </name>
+ <fsummary>Determine if a term is a port.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c>term</c> is a port.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_is_port_alive(ErlNifEnv* env,
+ ErlNifPort *port_id)</nametext></name>
+ <fsummary>Determine if a local port is alive.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c>port_id</c> is alive.</p>
+ <p>This function is only thread-safe when the emulator with SMP support
+ is used. It can only be used in a non-SMP emulator from a NIF-calling
+ thread.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_is_process_alive(ErlNifEnv* env,
+ ErlNifPid *pid)</nametext></name>
+ <fsummary>Determine if a local process is alive.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c>pid</c> is alive.</p>
+ <p>This function is only thread-safe when the emulator with SMP support
+ is used. It can only be used in a non-SMP emulator from a NIF-calling
+ thread.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_is_ref(ErlNifEnv* env, ERL_NIF_TERM term)</nametext>
+ </name>
+ <fsummary>Determine if a term is a reference.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c>term</c> is a reference.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_is_tuple(ErlNifEnv* env, ERL_NIF_TERM term)</nametext>
+ </name>
+ <fsummary>Determine if a term is a tuple.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c>term</c> is a tuple.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_keep_resource(void* obj)</nametext>
+ </name>
+ <fsummary>Add a reference to a resource object.</fsummary>
+ <desc>
+ <p>Adds a reference to resource object <c>obj</c> obtained from
+ <seealso marker="#enif_alloc_resource">
+ <c>enif_alloc_resource</c></seealso>. Each call to
+ <c>enif_keep_resource</c> for an object must be balanced by a call to
+ <seealso marker="#enif_release_resource">
+ <c>enif_release_resource</c></seealso>
+ before the object is destructed.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_make_atom(ErlNifEnv* env, const char* name)</nametext>
+ </name>
+ <fsummary>Create an atom term.</fsummary>
+ <desc>
+ <p>Creates an atom term from the <c>NULL</c>-terminated C-string
+ <c>name</c> with ISO Latin-1 encoding. If the length of <c>name</c>
+ exceeds the maximum length allowed for an atom (255 characters),
+ <c>enif_make_atom</c> invokes <seealso marker="#enif_make_badarg">
+ <c>enif_make_badarg</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_atom_len(ErlNifEnv* env,
+ const char* name, size_t len)</nametext></name>
+ <fsummary>Create an atom term.</fsummary>
+ <desc>
+ <p>Create an atom term from the string <c>name</c> with length
+ <c>len</c>. <c>NULL</c> characters are treated as any other
+ characters. If <c>len</c> exceeds the maximum length
+ allowed for an atom (255 characters), <c>enif_make_atom</c> invokes
+ <seealso marker="#enif_make_badarg">
+ <c>enif_make_badarg</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_make_badarg(ErlNifEnv* env)</nametext></name>
+ <fsummary>Make a badarg exception.</fsummary>
+ <desc>
+ <p>Makes a <c>badarg</c> exception to be returned from a NIF, and
+ associates it with environment <c>env</c>. Once a NIF or any function
+ it calls invokes <c>enif_make_badarg</c>, the runtime ensures that a
+ <c>badarg</c> exception is raised when the NIF returns, even if the
+ NIF attempts to return a non-exception term instead.</p>
+ <p>The return value from <c>enif_make_badarg</c> can be used only as
+ the return value from the NIF that invoked it (directly or indirectly)
+ or be passed to <seealso marker="#enif_is_exception">
+ <c>enif_is_exception</c></seealso>, but not to any other NIF API
+ function.</p>
+ <p>See also <seealso marker="#enif_has_pending_exception">
+ <c>enif_has_pending_exception</c></seealso> and
+ <seealso marker="#enif_raise_exception">
+ <c>enif_raise_exception</c></seealso>.</p>
+ <note>
+ <p>Before ERTS 7.0 (Erlang/OTP 18), the return value
+ from <c>enif_make_badarg</c> had to be returned from the NIF. This
+ requirement is now lifted as the return value from the NIF is
+ ignored if <c>enif_make_badarg</c> has been invoked.</p>
+ </note>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_make_binary(ErlNifEnv* env, ErlNifBinary* bin)</nametext>
+ </name>
+ <fsummary>Make a binary term.</fsummary>
+ <desc>
+ <p>Makes a binary term from <c>bin</c>. Any ownership of
+ the binary data is transferred to the created term and
+ <c>bin</c> is to be considered read-only for the rest of the NIF
+ call and then as released.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_copy(ErlNifEnv* dst_env,
+ ERL_NIF_TERM src_term)</nametext></name>
+ <fsummary>Make a copy of a term.</fsummary>
+ <desc>
+ <p>Makes a copy of term <c>src_term</c>. The copy is created in
+ environment <c>dst_env</c>. The source term can be located in any
+ environment.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_make_double(ErlNifEnv* env, double d)</nametext></name>
+ <fsummary>Create a floating-point term.</fsummary>
+ <desc>
+ <p>Creates a floating-point term from a <c>double</c>. If argument
+ <c>double</c> is not finite or is NaN, <c>enif_make_double</c>
+ invokes <seealso marker="#enif_make_badarg">
+ <c>enif_make_badarg</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_make_existing_atom(ErlNifEnv* env,
+ const char* name, ERL_NIF_TERM* atom, ErlNifCharEncoding
+ encode)</nametext></name>
+ <fsummary>Create an existing atom term.</fsummary>
+ <desc>
+ <p>Tries to create the term of an already existing atom from
+ the <c>NULL</c>-terminated C-string <c>name</c> with encoding
+ <seealso marker="#ErlNifCharEncoding">encode</seealso>.</p>
+ <p>If the atom already exists, this function stores the term in
+ <c>*atom</c> and returns <c>true</c>, otherwise <c>false</c>.
+ Also returns <c>false</c> if the length of <c>name</c> exceeds the
+ maximum length allowed for an atom (255 characters).</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_make_existing_atom_len(ErlNifEnv* env,
+ const char* name, size_t len, ERL_NIF_TERM* atom, ErlNifCharEncoding
+ encoding)</nametext></name>
+ <fsummary>Create an existing atom term.</fsummary>
+ <desc>
+ <p>Tries to create the term of an already existing atom from the
+ string <c>name</c> with length <c>len</c> and encoding
+ <seealso marker="#ErlNifCharEncoding">encode</seealso>. <c>NULL</c>
+ characters are treated as any other characters.</p>
+ <p>If the atom already exists, this function stores the term in
+ <c>*atom</c> and returns <c>true</c>, otherwise <c>false</c>.
+ Also returns <c>false</c> if <c>len</c> exceeds the maximum length
+ allowed for an atom (255 characters).</p>
+ </desc>
+ </func>
+
+ <func><name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_make_int(ErlNifEnv* env, int i)</nametext></name>
+ <fsummary>Create an integer term.</fsummary>
+ <desc>
+ <p>Creates an integer term.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_make_int64(ErlNifEnv* env, ErlNifSInt64 i)</nametext>
+ </name>
+ <fsummary>Create an integer term.</fsummary>
+ <desc>
+ <p>Creates an integer term from a signed 64-bit integer.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_make_list(ErlNifEnv* env, unsigned cnt, ...)</nametext>
+ </name>
+ <fsummary>Create a list term.</fsummary>
+ <desc>
+ <p>Creates an ordinary list term of length <c>cnt</c>. Expects
+ <c>cnt</c> number of arguments (after <c>cnt</c>) of type
+ <c>ERL_NIF_TERM</c> as the elements of the list.</p>
+ <p>Returns an empty list if <c>cnt</c> is 0.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_make_list1(ErlNifEnv* env, ERL_NIF_TERM e1)</nametext>
+ </name>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list2(ErlNifEnv* env,
+ ERL_NIF_TERM e1, ERL_NIF_TERM e2)</nametext></name>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list3(ErlNifEnv* env,
+ ERL_NIF_TERM e1, ERL_NIF_TERM e2, ERL_NIF_TERM e3)</nametext></name>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list4(ErlNifEnv* env,
+ ERL_NIF_TERM e1, ..., ERL_NIF_TERM e4)</nametext></name>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list5(ErlNifEnv* env,
+ ERL_NIF_TERM e1, ..., ERL_NIF_TERM e5)</nametext></name>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list6(ErlNifEnv* env,
+ ERL_NIF_TERM e1, ..., ERL_NIF_TERM e6)</nametext></name>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list7(ErlNifEnv* env,
+ ERL_NIF_TERM e1, ..., ERL_NIF_TERM e7)</nametext></name>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list8(ErlNifEnv* env,
+ ERL_NIF_TERM e1, ..., ERL_NIF_TERM e8)</nametext></name>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list9(ErlNifEnv* env,
+ ERL_NIF_TERM e1, ..., ERL_NIF_TERM e9)</nametext></name>
+ <fsummary>Create a list term.</fsummary>
+ <desc>
+ <p>Creates an ordinary list term with length indicated by the
+ function name. Prefer these functions (macros) over the variadic
+ <c>enif_make_list</c> to get a compile-time error if the number of
+ arguments does not match.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_list_cell(ErlNifEnv*
+ env, ERL_NIF_TERM head, ERL_NIF_TERM tail)</nametext></name>
+ <fsummary>Create a list cell.</fsummary>
+ <desc>
+ <p>Creates a list cell <c>[head | tail]</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_make_list_from_array(ErlNifEnv* env, const ERL_NIF_TERM
+ arr[], unsigned cnt)</nametext></name>
+ <fsummary>Create a list term from an array.</fsummary>
+ <desc>
+ <p>Creates an ordinary list containing the elements of array <c>arr</c>
+ of length <c>cnt</c>.</p>
+ <p>Returns an empty list if <c>cnt</c> is 0.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_make_long(ErlNifEnv* env, long int i)</nametext></name>
+ <fsummary>Create an integer term from a long int.</fsummary>
+ <desc>
+ <p>Creates an integer term from a <c>long int</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_make_map_put(ErlNifEnv* env,
+ ERL_NIF_TERM map_in, ERL_NIF_TERM key, ERL_NIF_TERM value,
+ ERL_NIF_TERM* map_out)</nametext></name>
+ <fsummary>Insert key-value pair in map.</fsummary>
+ <desc>
+ <p>Makes a copy of map <c>map_in</c> and inserts <c>key</c> with
+ <c>value</c>. If <c>key</c> already exists in <c>map_in</c>, the old
+ associated value is replaced by <c>value</c>.</p>
+ <p>If successful, this function sets <c>*map_out</c> to the new map and
+ returns <c>true</c>. Returns <c>false</c> if <c>map_in</c> is not a
+ map.</p>
+ <p>The <c>map_in</c> term must belong to environment <c>env</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_make_map_remove(ErlNifEnv* env,
+ ERL_NIF_TERM map_in, ERL_NIF_TERM key, ERL_NIF_TERM* map_out)</nametext>
+ </name>
+ <fsummary>Remove key from map.</fsummary>
+ <desc>
+ <p>If map <c>map_in</c> contains <c>key</c>, this function makes a copy
+ of <c>map_in</c> in <c>*map_out</c>, and removes <c>key</c> and the
+ associated value. If map <c>map_in</c> does not contain <c>key</c>,
+ <c>*map_out</c> is set to <c>map_in</c>.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if <c>map_in</c> is
+ not a map.</p>
+ <p>The <c>map_in</c> term must belong to environment <c>env</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_make_map_update(ErlNifEnv* env,
+ ERL_NIF_TERM map_in, ERL_NIF_TERM key, ERL_NIF_TERM new_value,
+ ERL_NIF_TERM* map_out)</nametext></name>
+ <fsummary>Replace value for key in map.</fsummary>
+ <desc>
+ <p>Makes a copy of map <c>map_in</c> and replace the old associated
+ value for <c>key</c> with <c>new_value</c>.</p>
+ <p>If successful, this function sets <c>*map_out</c> to the new map and
+ returns <c>true</c>. Returns <c>false</c> if <c>map_in</c> is not a
+ map or if it does not contain <c>key</c>.</p>
+ <p>The <c>map_in</c> term must belong to environment <c>env</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>unsigned char *</ret><nametext>enif_make_new_binary(ErlNifEnv*
+ env, size_t size, ERL_NIF_TERM* termp)</nametext></name>
+ <fsummary>Allocate and create a new binary term.</fsummary>
+ <desc>
+ <p>Allocates a binary of size <c>size</c> bytes and creates an owning
+ term. The binary data is mutable until the calling NIF returns.
+ This is a quick way to create a new binary without having to use
+ <seealso marker="#ErlNifBinary"><c>ErlNifBinary</c></seealso>.
+ The drawbacks are that the binary cannot be kept between NIF calls
+ and it cannot be reallocated.</p>
+ <p>Returns a pointer to the raw binary data and sets
+ <c>*termp</c> to the binary term.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_make_new_map(ErlNifEnv* env)</nametext></name>
+ <fsummary>Make an empty map term.</fsummary>
+ <desc>
+ <p>Makes an empty map term.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_make_pid(ErlNifEnv* env, const ErlNifPid* pid)</nametext>
+ </name>
+ <fsummary>Make a pid term.</fsummary>
+ <desc>
+ <p>Makes a pid term from <c>*pid</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_make_ref(ErlNifEnv* env)</nametext></name>
+ <fsummary>Create a reference.</fsummary>
+ <desc>
+ <p>Creates a reference like <seealso marker="erlang#make_ref-0">
+ <c>erlang:make_ref/0</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_make_resource(ErlNifEnv* env, void* obj)</nametext>
+ </name>
+ <fsummary>Create an opaque handle to a resource object.</fsummary>
+ <desc>
+ <p>Creates an opaque handle to a memory-managed resource object
+ obtained by <seealso marker="#enif_alloc_resource">
+ <c>enif_alloc_resource</c></seealso>. No ownership transfer is done,
+ as the resource object still needs to be released by
+ <seealso marker="#enif_release_resource">
+ <c>enif_release_resource</c></seealso>. However, notice that the call
+ to <c>enif_release_resource</c> can occur immediately after obtaining
+ the term from <c>enif_make_resource</c>, in which case the resource
+ object is deallocated when the term is garbage collected. For more
+ details, see the <seealso marker="#enif_resource_example">example of
+ creating and returning a resource object</seealso> in the User's
+ Guide.</p>
+ <p>Notice that the only defined behavior of using a resource term in
+ an Erlang program is to store it and send it between processes on the
+ same node. Other operations, such as matching or
+ <c>term_to_binary</c>, have unpredictable (but harmless) results.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_make_resource_binary(ErlNifEnv* env, void* obj, const
+ void* data, size_t size)</nametext></name>
+ <fsummary>Create a custom binary term.</fsummary>
+ <desc>
+ <p>Creates a binary term that is memory-managed by a resource object
+ <c>obj</c> obtained by <seealso marker="#enif_alloc_resource">
+ <c>enif_alloc_resource</c></seealso>. The returned binary term
+ consists of <c>size</c> bytes pointed to by <c>data</c>. This raw
+ binary data must be kept readable and unchanged until the destructor
+ of the resource is called. The binary data can be stored external to
+ the resource object, in which case the destructor is responsible
+ for releasing the data.</p>
+ <p>Several binary terms can be managed by the same resource object. The
+ destructor is not called until the last binary is garbage collected.
+ This can be useful to return different parts of a larger binary
+ buffer.</p>
+ <p>As with <seealso marker="#enif_make_resource">
+ <c>enif_make_resource</c></seealso>, no ownership transfer is done.
+ The resource still needs to be released with
+ <seealso marker="#enif_release_resource">
+ <c>enif_release_resource</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_make_reverse_list(ErlNifEnv* env, ERL_NIF_TERM list_in,
+ ERL_NIF_TERM *list_out)</nametext></name>
+ <fsummary>Create the reverse of a list.</fsummary>
+ <desc>
+ <p>Sets <c>*list_out</c> to the reverse list of the list <c>list_in</c>
+ and returns <c>true</c>, or returns <c>false</c> if <c>list_in</c> is
+ not a list.</p>
+ <p>This function is only to be used on short lists, as a copy is
+ created of the list, which is not released until after the NIF
+ returns.</p>
+ <p>The <c>list_in</c> term must belong to environment <c>env</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_string(ErlNifEnv* env,
+ const char* string, ErlNifCharEncoding encoding)</nametext></name>
+ <fsummary>Create a string.</fsummary>
+ <desc>
+ <p>Creates a list containing the characters of the
+ <c>NULL</c>-terminated string <c>string</c> with encoding
+ <seealso marker="#ErlNifCharEncoding">encoding</seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_string_len(ErlNifEnv*
+ env, const char* string, size_t len, ErlNifCharEncoding
+ encoding)</nametext></name>
+ <fsummary>Create a string.</fsummary>
+ <desc>
+ <p>Creates a list containing the characters of the string <c>string</c>
+ with length <c>len</c> and encoding
+ <seealso marker="#ErlNifCharEncoding">encoding</seealso>.
+ <c>NULL</c> characters are treated as any other characters.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_sub_binary(ErlNifEnv*
+ env, ERL_NIF_TERM bin_term, size_t pos, size_t size)</nametext></name>
+ <fsummary>Make a subbinary term.</fsummary>
+ <desc>
+ <p>Makes a subbinary of binary <c>bin_term</c>, starting at
+ zero-based position <c>pos</c> with a length of <c>size</c> bytes.
+ <c>bin_term</c> must be a binary or bitstring. <c>pos+size</c> must
+ be less or equal to the number of whole bytes in <c>bin_term</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple(ErlNifEnv* env,
+ unsigned cnt, ...)</nametext></name>
+ <fsummary>Creates a tuple term.</fsummary>
+ <desc>
+ <p>Creates a tuple term of arity <c>cnt</c>. Expects <c>cnt</c> number
+ of arguments (after <c>cnt</c>) of type <c>ERL_NIF_TERM</c> as the
+ elements of the tuple.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple1(ErlNifEnv* env,
+ ERL_NIF_TERM e1)</nametext></name>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple2(ErlNifEnv* env,
+ ERL_NIF_TERM e1, ERL_NIF_TERM e2)</nametext></name>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple3(ErlNifEnv* env,
+ ERL_NIF_TERM e1, ERL_NIF_TERM e2, ERL_NIF_TERM e3)</nametext></name>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple4(ErlNifEnv* env,
+ ERL_NIF_TERM e1, ..., ERL_NIF_TERM e4)</nametext></name>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple5(ErlNifEnv* env,
+ ERL_NIF_TERM e1, ..., ERL_NIF_TERM e5)</nametext></name>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple6(ErlNifEnv* env,
+ ERL_NIF_TERM e1, ..., ERL_NIF_TERM e6)</nametext></name>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple7(ErlNifEnv* env,
+ ERL_NIF_TERM e1, ..., ERL_NIF_TERM e7)</nametext></name>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple8(ErlNifEnv* env,
+ ERL_NIF_TERM e1, ..., ERL_NIF_TERM e8)</nametext></name>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_tuple9(ErlNifEnv* env,
+ ERL_NIF_TERM e1, ..., ERL_NIF_TERM e9)</nametext></name>
+ <fsummary>Create a tuple term.</fsummary>
+ <desc>
+ <p>Creates a tuple term with length indicated by the
+ function name. Prefer these functions (macros) over the variadic
+ <c>enif_make_tuple</c> to get a compile-time error if the number of
+ arguments does not match.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_make_tuple_from_array(ErlNifEnv* env, const ERL_NIF_TERM
+ arr[], unsigned cnt)</nametext></name>
+ <fsummary>Create a tuple term from an array.</fsummary>
+ <desc>
+ <p>Creates a tuple containing the elements of array <c>arr</c>
+ of length <c>cnt</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_make_uint(ErlNifEnv* env, unsigned int i)</nametext>
+ </name>
+ <fsummary>Create an unsigned integer term.</fsummary>
+ <desc>
+ <p>Creates an integer term from an <c>unsigned int</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_make_uint64(ErlNifEnv* env, ErlNifUInt64 i)</nametext>
+ </name>
+ <fsummary>Create an unsigned integer term.</fsummary>
+ <desc>
+ <p>Creates an integer term from an unsigned 64-bit integer.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_make_ulong(ErlNifEnv* env, unsigned long i)</nametext>
+ </name>
+ <fsummary>Create an integer term from an unsigned long int.</fsummary>
+ <desc>
+ <p>Creates an integer term from an <c>unsigned long int</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_unique_integer(ErlNifEnv
+ *env, ErlNifUniqueInteger properties)</nametext></name>
<fsummary></fsummary>
<desc>
- <p>Returns a unique integer with the same properties as given by <seealso marker="erlang#unique_integer-1">erlang:unique_integer/1</seealso>.</p>
+ <p>Returns a unique integer with the same properties as specified by
+ <seealso marker="erlang#unique_integer-1">
+ <c>erlang:unique_integer/1</c></seealso>.</p>
<p><c>env</c> is the environment to create the integer in.</p>
- <p>
- <c>ERL_NIF_UNIQUE_POSITIVE</c> and <c>ERL_NIF_UNIQUE_MONOTONIC</c> can
- be passed as the second argument to change the properties of the
- integer returned. It is possible to combine them by or:ing the
- two values together.
- </p>
- <p>See also:
- <seealso marker="#ErlNifUniqueInteger"><c>ErlNifUniqueInteger</c></seealso>.
- </p>
- </desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_ulong(ErlNifEnv* env, unsigned long i)</nametext></name>
- <fsummary>Create an integer term from an unsigned long int</fsummary>
- <desc><p>Create an integer term from an <c>unsigned long int</c>.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_map_iterator_create(ErlNifEnv *env, ERL_NIF_TERM map, ErlNifMapIterator *iter, ErlNifMapIteratorEntry entry)</nametext></name>
- <fsummary>Create a map iterator</fsummary>
- <desc><p>Create an iterator for the map <c>map</c> by initializing the
- structure pointed to by <c>iter</c>. The <c>entry</c> argument determines
- the start position of the iterator: <c>ERL_NIF_MAP_ITERATOR_FIRST</c> or
- <c>ERL_NIF_MAP_ITERATOR_LAST</c>. Return true on success or false if
- <c>map</c> is not a map.</p>
- <p>A map iterator is only useful during the lifetime of the environment
- <c>env</c> that the <c>map</c> belongs to. The iterator must be destroyed by
- calling <seealso marker="#enif_map_iterator_destroy">
- enif_map_iterator_destroy</seealso>.</p>
- <code type="none">
+ <p><c>ERL_NIF_UNIQUE_POSITIVE</c> and <c>ERL_NIF_UNIQUE_MONOTONIC</c>
+ can be passed as the second argument to change the properties of the
+ integer returned. They can be combined by OR:ing the two values
+ together.</p>
+ <p>See also <seealso marker="#ErlNifUniqueInteger">
+ <c>ErlNifUniqueInteger</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_map_iterator_create(ErlNifEnv *env,
+ ERL_NIF_TERM map, ErlNifMapIterator *iter, ErlNifMapIteratorEntry
+ entry)</nametext></name>
+ <fsummary>Create a map iterator.</fsummary>
+ <desc>
+ <p>Creates an iterator for the map <c>map</c> by initializing the
+ structure pointed to by <c>iter</c>. Argument <c>entry</c> determines
+ the start position of the iterator: <c>ERL_NIF_MAP_ITERATOR_FIRST</c>
+ or <c>ERL_NIF_MAP_ITERATOR_LAST</c>.</p>
+ <p>Returns <c>true</c> on success, or false if <c>map</c> is not a
+ map.</p>
+ <p>A map iterator is only useful during the lifetime of environment
+ <c>env</c> that the <c>map</c> belongs to. The iterator must be
+ destroyed by calling <seealso marker="#enif_map_iterator_destroy">
+ <c>enif_map_iterator_destroy</c></seealso>:</p>
+ <code type="none">
ERL_NIF_TERM key, value;
ErlNifMapIterator iter;
enif_map_iterator_create(env, my_map, &amp;iter, ERL_NIF_MAP_ITERATOR_FIRST);
@@ -1454,412 +2058,714 @@ while (enif_map_iterator_get_pair(env, &amp;iter, &amp;key, &amp;value)) {
do_something(key,value);
enif_map_iterator_next(env, &amp;iter);
}
-enif_map_iterator_destroy(env, &amp;iter);
- </code>
- <note><p>The key-value pairs of a map have no defined iteration
- order. The only guarantee is that the iteration order of a single map
- instance is preserved during the lifetime of the environment that the map
- belongs to.</p>
- </note>
+enif_map_iterator_destroy(env, &amp;iter);</code>
+ <note>
+ <p>The key-value pairs of a map have no defined iteration order.
+ The only guarantee is that the iteration order of a single map
+ instance is preserved during the lifetime of the environment that
+ the map belongs to.</p>
+ </note>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret><nametext>enif_map_iterator_destroy(ErlNifEnv *env,
+ ErlNifMapIterator *iter)</nametext></name>
+ <fsummary>Destroy a map iterator.</fsummary>
+ <desc>
+ <p>Destroys a map iterator created by
+ <seealso marker="#enif_map_iterator_create">
+ <c>enif_map_iterator_create</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_map_iterator_get_pair(ErlNifEnv *env,
+ ErlNifMapIterator *iter, ERL_NIF_TERM *key, ERL_NIF_TERM
+ *value)</nametext></name>
+ <fsummary>Get key and value at current map iterator position.</fsummary>
+ <desc>
+ <p>Gets key and value terms at the current map iterator position.</p>
+ <p>On success, sets <c>*key</c> and <c>*value</c> and returns
+ <c>true</c>. Returns <c>false</c> if the iterator is positioned at
+ head (before first entry) or tail (beyond last entry).</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_map_iterator_is_head(ErlNifEnv *env,
+ ErlNifMapIterator *iter)</nametext></name>
+ <fsummary>Check if map iterator is positioned before first.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if map iterator <c>iter</c> is positioned
+ before the first entry.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_map_iterator_is_tail(ErlNifEnv *env,
+ ErlNifMapIterator *iter)</nametext></name>
+ <fsummary>Check if map iterator is positioned after last.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if map iterator <c>iter</c> is positioned
+ after the last entry.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_map_iterator_next(ErlNifEnv *env,
+ ErlNifMapIterator *iter)</nametext></name>
+ <fsummary>Increment map iterator to point to next entry.</fsummary>
+ <desc>
+ <p>Increments map iterator to point to the next key-value entry.</p>
+ <p>Returns <c>true</c> if the iterator is now positioned at a valid
+ key-value entry, or <c>false</c> if the iterator is positioned at
+ the tail (beyond the last entry).</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_map_iterator_prev(ErlNifEnv *env,
+ ErlNifMapIterator *iter)</nametext></name>
+ <fsummary>Decrement map iterator to point to previous entry.</fsummary>
+ <desc>
+ <p>Decrements map iterator to point to the previous key-value entry.</p>
+ <p>Returns <c>true</c> if the iterator is now positioned at a valid
+ key-value entry, or <c>false</c> if the iterator is positioned at
+ the head (before the first entry).</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ErlNifTime</ret>
+ <nametext>enif_monotonic_time(ErlNifTimeUnit time_unit)</nametext>
+ </name>
+ <fsummary>Get Erlang monotonic time.</fsummary>
+ <desc>
+ <marker id="enif_monotonic_time"></marker>
+ <p>Returns the current
+ <seealso marker="time_correction#Erlang_Monotonic_Time">
+ Erlang monotonic time</seealso>. Notice that it is not uncommon with
+ negative values.</p>
+ <p><c>time_unit</c> is the time unit of the returned value.</p>
+ <p>Returns <c>ERL_NIF_TIME_ERROR</c> if called with an invalid time
+ unit argument, or if called from a thread that is not a scheduler
+ thread.</p>
+ <p>See also <seealso marker="#ErlNifTime"><c>ErlNifTime</c></seealso>
+ and <seealso marker="#ErlNifTimeUnit"><c>ErlNifTimeUnit</c></seealso>.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ErlNifMutex *</ret>
+ <nametext>enif_mutex_create(char *name)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_mutex_create">
+ <c>erl_drv_mutex_create</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret>
+ <nametext>enif_mutex_destroy(ErlNifMutex *mtx)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_mutex_destroy">
+ <c>erl_drv_mutex_destroy</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret>
+ <nametext>enif_mutex_lock(ErlNifMutex *mtx)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_mutex_lock">
+ <c>erl_drv_mutex_lock</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_mutex_trylock(ErlNifMutex *mtx)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_mutex_trylock">
+ <c>erl_drv_mutex_trylock</c></seealso>.</p>
</desc>
</func>
- <func><name><ret>void</ret><nametext>enif_map_iterator_destroy(ErlNifEnv *env, ErlNifMapIterator *iter)</nametext></name>
- <fsummary>Destroy a map iterator</fsummary>
- <desc><p>Destroy a map iterator created by
- <seealso marker="#enif_map_iterator_create">enif_map_iterator_create</seealso>.
- </p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_map_iterator_get_pair(ErlNifEnv *env, ErlNifMapIterator *iter, ERL_NIF_TERM *key, ERL_NIF_TERM *value)</nametext></name>
- <fsummary>Get key and value at current map iterator position</fsummary>
- <desc><p>Get key and value terms at current map iterator position.
- On success set <c>*key</c> and <c>*value</c> and return true.
- Return false if the iterator is positioned at head (before first entry)
- or tail (beyond last entry).</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_map_iterator_is_head(ErlNifEnv *env, ErlNifMapIterator *iter)</nametext></name>
- <fsummary>Check if map iterator is positioned before first</fsummary>
- <desc><p>Return true if map iterator <c>iter</c> is positioned
- before first entry.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_map_iterator_is_tail(ErlNifEnv *env, ErlNifMapIterator *iter)</nametext></name>
- <fsummary>Check if map iterator is positioned after last</fsummary>
- <desc><p>Return true if map iterator <c>iter</c> is positioned
- after last entry.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_map_iterator_next(ErlNifEnv *env, ErlNifMapIterator *iter)</nametext></name>
- <fsummary>Increment map iterator to point to next entry</fsummary>
- <desc><p>Increment map iterator to point to next key-value entry.
- Return true if the iterator is now positioned at a valid key-value entry,
- or false if the iterator is positioned at the tail (beyond the last
- entry).</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_map_iterator_prev(ErlNifEnv *env, ErlNifMapIterator *iter)</nametext></name>
- <fsummary>Decrement map iterator to point to previous entry</fsummary>
- <desc><p>Decrement map iterator to point to previous key-value entry.
- Return true if the iterator is now positioned at a valid key-value entry,
- or false if the iterator is positioned at the head (before the first
- entry).</p></desc>
- </func>
-
- <func>
- <name><ret>ErlNifTime</ret><nametext>enif_monotonic_time(ErlNifTimeUnit time_unit)</nametext></name>
- <fsummary>Get Erlang Monotonic Time</fsummary>
- <desc>
- <marker id="enif_monotonic_time"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>time_unit</c></tag>
- <item>Time unit of returned value.</item>
- </taglist>
- <p>
- Returns the current
- <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
- monotonic time</seealso>. Note that it is not uncommon with
- negative values.
- </p>
- <p>Returns <c>ERL_NIF_TIME_ERROR</c> if called with an invalid
- time unit argument, or if called from a thread that is not a
- scheduler thread.</p>
- <p>See also:
- <seealso marker="#ErlNifTime"><c>ErlNifTime</c></seealso> and
- <seealso marker="#ErlNifTimeUnit"><c>ErlNifTimeUnit</c></seealso>.
- </p>
- </desc>
- </func>
-
- <func><name><ret>ErlNifMutex *</ret><nametext>enif_mutex_create(char *name)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_mutex_create">erl_drv_mutex_create</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_mutex_destroy(ErlNifMutex *mtx)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_mutex_destroy">erl_drv_mutex_destroy</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_mutex_lock(ErlNifMutex *mtx)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_mutex_lock">erl_drv_mutex_lock</seealso>.
- </p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_mutex_trylock(ErlNifMutex *mtx)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_mutex_trylock">erl_drv_mutex_trylock</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_mutex_unlock(ErlNifMutex *mtx)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_mutex_unlock">erl_drv_mutex_unlock</seealso>.
- </p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_now_time(ErlNifEnv *env)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Retuns an <seealso marker="erlang#now-0">erlang:now()</seealso> timestamp.
- The enif_now_time function is <em>deprecated</em>.</p></desc>
- </func>
- <func><name><ret>ErlNifResourceType *</ret><nametext>enif_open_resource_type(ErlNifEnv* env,
- const char* module_str, const char* name,
- ErlNifResourceDtor* dtor, ErlNifResourceFlags flags, ErlNifResourceFlags* tried)</nametext></name>
- <fsummary>Create or takeover a resource type</fsummary>
- <desc><p>Create or takeover a resource type identified by the string
- <c>name</c> and give it the destructor function pointed to by <seealso marker="#ErlNifResourceDtor">dtor</seealso>.
- Argument <c>flags</c> can have the following values:</p>
- <taglist>
- <tag><c>ERL_NIF_RT_CREATE</c></tag>
- <item>Create a new resource type that does not already exist.</item>
- <tag><c>ERL_NIF_RT_TAKEOVER</c></tag>
- <item>Open an existing resource type and take over ownership of all its instances.
- The supplied destructor <c>dtor</c> will be called both for existing instances
- as well as new instances not yet created by the calling NIF library.</item>
- </taglist>
- <p>The two flag values can be combined with bitwise-or. The name of the
- resource type is local to the calling module. Argument <c>module_str</c>
- is not (yet) used and must be NULL. The <c>dtor</c> may be <c>NULL</c>
- in case no destructor is needed.</p>
- <p>On success, return a pointer to the resource type and <c>*tried</c>
- will be set to either <c>ERL_NIF_RT_CREATE</c> or
- <c>ERL_NIF_RT_TAKEOVER</c> to indicate what was actually done.
- On failure, return <c>NULL</c> and set <c>*tried</c> to <c>flags</c>.
- It is allowed to set <c>tried</c> to <c>NULL</c>.</p>
- <p>Note that <c>enif_open_resource_type</c> is only allowed to be called in the three callbacks
- <seealso marker="#load">load</seealso>, <seealso marker="#reload">reload</seealso>
- and <seealso marker="#upgrade">upgrade</seealso>.</p>
- </desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_port_command(ErlNifEnv* env, const ErlNifPort* to_port, ErlNifEnv *msg_env, ERL_NIF_TERM msg)</nametext></name>
- <fsummary>Send a port_command to to_port</fsummary>
- <desc>
- <p>This function works the same as <seealso marker="erlang#port_command-2">erlang:port_command/2</seealso>
- except that it is always completely asynchronous.</p>
+
+ <func>
+ <name><ret>void</ret>
+ <nametext>enif_mutex_unlock(ErlNifMutex *mtx)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_mutex_unlock">
+ <c>erl_drv_mutex_unlock</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret>
+ <nametext>enif_now_time(ErlNifEnv *env)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns an <seealso marker="erlang#now-0">
+ <c>erlang:now()</c></seealso> time stamp.</p>
+ <p><em>This function is deprecated.</em></p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ErlNifResourceType *</ret>
+ <nametext>enif_open_resource_type(ErlNifEnv* env, const char*
+ module_str, const char* name, ErlNifResourceDtor* dtor,
+ ErlNifResourceFlags flags, ErlNifResourceFlags* tried)</nametext>
+ </name>
+ <fsummary>Create or takeover a resource type.</fsummary>
+ <desc>
+ <p>Creates or takes over a resource type identified by the string
+ <c>name</c> and gives it the destructor function pointed to by
+ <seealso marker="#ErlNifResourceDtor"><c>dtor</c></seealso>.
+ Argument <c>flags</c> can have the following values:</p>
+ <taglist>
+ <tag><c>ERL_NIF_RT_CREATE</c></tag>
+ <item>Creates a new resource type that does not already exist.</item>
+ <tag><c>ERL_NIF_RT_TAKEOVER</c></tag>
+ <item>Opens an existing resource type and takes over ownership of all
+ its instances. The supplied destructor <c>dtor</c> is called both
+ for existing instances and new instances not yet created by the
+ calling NIF library.</item>
+ </taglist>
+ <p>The two flag values can be combined with bitwise OR. The resource
+ type name is local to the calling module. Argument <c>module_str</c>
+ is not (yet) used and must be <c>NULL</c>. <c>dtor</c> can be
+ <c>NULL</c> if no destructor is needed.</p>
+ <p>On success, the function returns a pointer to the resource type and
+ <c>*tried</c> is set to either <c>ERL_NIF_RT_CREATE</c> or
+ <c>ERL_NIF_RT_TAKEOVER</c> to indicate what was done. On failure,
+ returns <c>NULL</c> and sets <c>*tried</c> to <c>flags</c>.
+ It is allowed to set <c>tried</c> to <c>NULL</c>.</p>
+ <p>Notice that <c>enif_open_resource_type</c> is only allowed to be
+ called in the three callbacks
+ <seealso marker="#load"><c>load</c></seealso>,
+ <seealso marker="#reload"><c>reload</c></seealso>, and
+ <seealso marker="#upgrade"><c>upgrade</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_port_command(ErlNifEnv* env, const
+ ErlNifPort* to_port, ErlNifEnv *msg_env, ERL_NIF_TERM msg)</nametext>
+ </name>
+ <fsummary>Send a port_command to to_port.</fsummary>
+ <desc>
+ <p>Works as <seealso marker="erlang#port_command-2">
+ <c>erlang:port_command/2</c></seealso>,
+ except that it is always completely asynchronous.</p>
+ <taglist>
+ <tag><c>env</c></tag>
+ <item>The environment of the calling process. Must not be
+ <c>NULL</c>.</item>
+ <tag><c>*to_port</c></tag>
+ <item>The port ID of the receiving port. The port ID is to refer to a
+ port on the local node.</item>
+ <tag><c>msg_env</c></tag>
+ <item>The environment of the message term. Can be a process-independent
+ environment allocated with <seealso marker="#enif_alloc_env">
+ <c>enif_alloc_env</c></seealso> or <c>NULL</c>.</item>
+ <tag><c>msg</c></tag>
+ <item>The message term to send. The same limitations apply as on the
+ payload to <seealso marker="erlang#port_command-2">
+ <c>erlang:port_command/2</c></seealso>.</item>
+ </taglist>
+ <p>Using a <c>msg_env</c> of <c>NULL</c> is an optimization, which
+ groups together calls to <c>enif_alloc_env</c>, <c>enif_make_copy</c>,
+ <c>enif_port_command</c>, and <c>enif_free_env</c> into one call.
+ This optimization is only useful when a majority of the terms are to
+ be copied from <c>env</c> to <c>msg_env</c>.</p>
+ <p>Returns <c>true</c> if the command is successfully sent. Returns
+ <c>false</c> if the command fails, for example:</p>
+ <list type="bulleted">
+ <item><c>*to_port</c> does not refer to a local port.</item>
+ <item>The currently executing process (that is, the sender) is not
+ alive.</item>
+ <item><c>msg</c> is invalid.</item>
+ </list>
+ <p>See also <seealso marker="#enif_get_local_port">
+ <c>enif_get_local_port</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void *</ret>
+ <nametext>enif_priv_data(ErlNifEnv* env)</nametext></name>
+ <fsummary>Get the private data of a NIF library.</fsummary>
+ <desc>
+ <p>Returns the pointer to the private data that was set by
+ <seealso marker="#load"><c>load</c></seealso>,
+ <seealso marker="#reload"><c>reload</c></seealso>, or
+ <seealso marker="#upgrade"><c>upgrade</c></seealso>.</p>
+ <p>Was previously named <c>enif_get_data</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_raise_exception(ErlNifEnv*
+ env, ERL_NIF_TERM reason)</nametext></name>
+ <fsummary>Raise a NIF error exception.</fsummary>
+ <desc>
+ <p>Creates an error exception with the term <c>reason</c> to be
+ returned from a NIF, and associates it with environment <c>env</c>.
+ Once a NIF or any function it calls invokes
+ <c>enif_raise_exception</c>, the runtime ensures that the exception
+ it creates is raised when the NIF returns, even if the NIF attempts
+ to return a non-exception term instead.</p>
+ <p>The return value from <c>enif_raise_exception</c> can only be used
+ as the return value from the NIF that invoked it (directly or
+ indirectly) or be passed to <seealso marker="#enif_is_exception">
+ <c>enif_is_exception</c></seealso>, but not to any other NIF API
+ function.</p>
+ <p>See also <seealso marker="#enif_has_pending_exception">
+ <c>enif_has_pending_exception</c></seealso> and
+ <seealso marker="#enif_make_badarg">
+ <c>enif_make_badarg</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_realloc_binary(ErlNifBinary* bin, size_t size)</nametext>
+ </name>
+ <fsummary>Change the size of a binary.</fsummary>
+ <desc>
+ <p>Changes the size of a binary <c>bin</c>. The source binary
+ can be read-only, in which case it is left untouched and
+ a mutable copy is allocated and assigned to <c>*bin</c>.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if memory allocation
+ failed.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret>
+ <nametext>enif_release_binary(ErlNifBinary* bin)</nametext></name>
+ <fsummary>Release a binary.</fsummary>
+ <desc>
+ <p>Releases a binary obtained from
+ <seealso marker="#enif_alloc_binary">
+ <c>enif_alloc_binary</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret>
+ <nametext>enif_release_resource(void* obj)</nametext></name>
+ <fsummary>Release a resource object.</fsummary>
+ <desc>
+ <p>Removes a reference to resource object <c>obj</c>obtained from
+ <seealso marker="#enif_alloc_resource">
+ <c>enif_alloc_resource</c></seealso>.
+ The resource object is destructed when the last reference is removed.
+ Each call to <c>enif_release_resource</c> must correspond to a
+ previous call to <c>enif_alloc_resource</c> or
+ <seealso marker="#enif_keep_resource">
+ <c>enif_keep_resource</c></seealso>.
+ References made by <seealso marker="#enif_make_resource">
+ <c>enif_make_resource</c></seealso>
+ can only be removed by the garbage collector.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ErlNifRWLock *</ret>
+ <nametext>enif_rwlock_create(char *name)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_rwlock_create">
+ <c>erl_drv_rwlock_create</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret>
+ <nametext>enif_rwlock_destroy(ErlNifRWLock *rwlck)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_rwlock_destroy">
+ <c>erl_drv_rwlock_destroy</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret>
+ <nametext>enif_rwlock_rlock(ErlNifRWLock *rwlck)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_rwlock_rlock">
+ <c>erl_drv_rwlock_rlock</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret>
+ <nametext>enif_rwlock_runlock(ErlNifRWLock *rwlck)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_rwlock_runlock">
+ <c>erl_drv_rwlock_runlock</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret>
+ <nametext>enif_rwlock_rwlock(ErlNifRWLock *rwlck)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_rwlock_rwlock">
+ <c>erl_drv_rwlock_rwlock</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret>
+ <nametext>enif_rwlock_rwunlock(ErlNifRWLock *rwlck)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_rwlock_rwunlock">
+ <c>erl_drv_rwlock_rwunlock</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_rwlock_tryrlock(ErlNifRWLock *rwlck)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_rwlock_tryrlock">
+ <c>erl_drv_rwlock_tryrlock</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_rwlock_tryrwlock(ErlNifRWLock *rwlck)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_rwlock_tryrwlock">
+ <c>erl_drv_rwlock_tryrwlock</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_schedule_nif(ErlNifEnv* env,
+ const char* fun_name, int flags, ERL_NIF_TERM (*fp)(ErlNifEnv* env, int
+ argc, const ERL_NIF_TERM argv[]), int argc, const ERL_NIF_TERM
+ argv[])</nametext></name>
+ <fsummary>Schedule a NIF for execution.</fsummary>
+ <desc>
+ <p>Schedules NIF <c>fp</c> to execute. This function allows an
+ application to break up long-running work into multiple regular NIF
+ calls or to schedule a <seealso marker="#dirty_nifs">
+ dirty NIF</seealso> to execute on a dirty scheduler thread.</p>
+ <p><em>The dirty NIF functionality described here is
+ experimental.</em> You have to enable support for dirty
+ schedulers when building OTP to try out the functionality.</p>
+ <taglist>
+ <tag><c>fun_name</c></tag>
+ <item>
+ <p>Provides a name for the NIF that is scheduled for execution.
+ If it cannot be converted to an atom, <c>enif_schedule_nif</c>
+ returns a <c>badarg</c> exception.</p>
+ </item>
+ <tag><c>flags</c></tag>
+ <item>
+ <p>Must be set to <c>0</c> for a regular NIF. If the emulator was
+ built with the experimental dirty scheduler support enabled,
+ <c>flags</c> can be set to either
+ <c>ERL_NIF_DIRTY_JOB_CPU_BOUND</c> if the job is expected to be
+ CPU-bound, or <c>ERL_NIF_DIRTY_JOB_IO_BOUND</c> for
+ jobs that will be I/O-bound. If dirty scheduler threads are not
+ available in the emulator, an attempt to schedule such a job
+ results in a <c>badarg</c> exception.</p>
+ </item>
+ <tag><c>argc</c> and <c>argv</c></tag>
+ <item>
+ <p>Can either be the originals passed into the calling NIF,
+ or can be values created by the calling NIF.</p>
+ </item>
+ </taglist>
+ <p>The calling NIF must use the return value of
+ <c>enif_schedule_nif</c> as its own return value.</p>
+ <p>Be aware that <c>enif_schedule_nif</c>, as its name implies, only
+ schedules the NIF for future execution. The calling NIF does not
+ block waiting for the scheduled NIF to execute and return. This means
+ that the calling NIF cannot expect to receive the scheduled NIF
+ return value and use it for further operations.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ErlNifPid *</ret>
+ <nametext>enif_self(ErlNifEnv* caller_env, ErlNifPid* pid)</nametext>
+ </name>
+ <fsummary>Get the pid of the calling process.</fsummary>
+ <desc>
+ <p>Initializes the pid variable <c>*pid</c> to represent the
+ calling process.</p>
+ <p>Returns <c>pid</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_send(ErlNifEnv* env, ErlNifPid* to_pid,
+ ErlNifEnv* msg_env, ERL_NIF_TERM msg)</nametext></name>
+ <fsummary>Send a message to a process.</fsummary>
+ <desc>
+ <p>Sends a message to a process.</p>
<taglist>
<tag><c>env</c></tag>
- <item>The environment of the calling process. May not be NULL.</item>
- <tag><c>*to_port</c></tag>
- <item>The port id of the receiving port. The port id should refer to a
- port on the local node.</item>
+ <item>The environment of the calling process. Must be <c>NULL</c>
+ only if calling from a created thread.</item>
+ <tag><c>*to_pid</c></tag>
+ <item>The pid of the receiving process. The pid is to refer to a
+ process on the local node.</item>
<tag><c>msg_env</c></tag>
- <item>The environment of the message term. Can be a process
- independent environment allocated with
- <seealso marker="#enif_alloc_env">enif_alloc_env</seealso> or NULL.</item>
+ <item>The environment of the message term. Must be a
+ process-independent environment allocated with
+ <seealso marker="#enif_alloc_env"><c>enif_alloc_env</c></seealso>
+ or NULL.</item>
<tag><c>msg</c></tag>
- <item>The message term to send. The same limitations apply as on the
- payload to <seealso marker="erlang#port_command-2">erlang:port_command/2</seealso>.</item>
+ <item>The message term to send.</item>
</taglist>
- <p>Using a <c>msg_env</c> of NULL is an optimization which groups together
- calls to <c>enif_alloc_env</c>, <c>enif_make_copy</c>, <c>enif_port_command</c>
- and <c>enif_free_env</c> into one call. This optimization is only usefull
- when a majority of the terms are to be copied from <c>env</c> to the <c>msg_env</c>.</p>
- <p>This function return true if the command was successfully sent; otherwise,
- false. The call may return false if it detects that the command failed for some
- reason. For example, <c>*to_port</c> does not refer to a local port, if currently
- executing process, i.e. the sender, is not alive, or if <c>msg</c> is invalid.</p>
- <p>See also: <seealso marker="#enif_get_local_port"><c>enif_get_local_port</c></seealso>.</p>
- </desc>
- </func>
- <func><name><ret>void *</ret><nametext>enif_priv_data(ErlNifEnv* env)</nametext></name>
- <fsummary>Get the private data of a NIF library</fsummary>
- <desc><p>Return the pointer to the private data that was set by <c>load</c>,
- <c>reload</c> or <c>upgrade</c>.</p>
- <p>Was previously named <c>enif_get_data</c>.</p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_raise_exception(ErlNifEnv* env, ERL_NIF_TERM reason)</nametext></name>
- <fsummary>Raise a NIF error exception</fsummary>
- <desc><p>Create an error exception with the term <c>reason</c> to be returned from a NIF,
- and associate it with the environment <c>env</c>. Once a NIF or any function it calls
- invokes <c>enif_raise_exception</c>, the runtime ensures that the exception it creates
- is raised when the NIF returns, even if the NIF attempts to return a non-exception
- term instead. The return value from <c>enif_raise_exception</c> may be used only as
- the return value from the NIF that invoked it (directly or indirectly) or be passed
- to <seealso marker="#enif_is_exception">enif_is_exception</seealso>, but
- not to any other NIF API function.</p>
- <p>See also: <seealso marker="#enif_has_pending_exception">enif_has_pending_exception</seealso>
- and <seealso marker="#enif_make_badarg">enif_make_badarg</seealso>.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_realloc_binary(ErlNifBinary* bin, size_t size)</nametext></name>
- <fsummary>Change the size of a binary</fsummary>
- <desc><p>Change the size of a binary <c>bin</c>. The source binary
- may be read-only, in which case it will be left untouched and
- a mutable copy is allocated and assigned to <c>*bin</c>. Return true on success,
- false if memory allocation failed.</p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_release_binary(ErlNifBinary* bin)</nametext></name>
- <fsummary>Release a binary</fsummary>
- <desc><p>Release a binary obtained from <c>enif_alloc_binary</c>.</p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_release_resource(void* obj)</nametext></name>
- <fsummary>Release a resource object</fsummary>
- <desc><p>Remove a reference to resource object <c>obj</c>obtained from
- <seealso marker="#enif_alloc_resource">enif_alloc_resource</seealso>.
- The resource object will be destructed when the last reference is removed.
- Each call to <c>enif_release_resource</c> must correspond to a previous
- call to <c>enif_alloc_resource</c> or
- <seealso marker="#enif_keep_resource">enif_keep_resource</seealso>.
- References made by <seealso marker="#enif_make_resource">enif_make_resource</seealso>
- can only be removed by the garbage collector.</p></desc>
- </func>
- <func><name><ret>ErlNifRWLock *</ret><nametext>enif_rwlock_create(char *name)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_rwlock_create">erl_drv_rwlock_create</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_rwlock_destroy(ErlNifRWLock *rwlck)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_rwlock_destroy">erl_drv_rwlock_destroy</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_rwlock_rlock(ErlNifRWLock *rwlck)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_rwlock_rlock">erl_drv_rwlock_rlock</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_rwlock_runlock(ErlNifRWLock *rwlck)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_rwlock_runlock">erl_drv_rwlock_runlock</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_rwlock_rwlock(ErlNifRWLock *rwlck)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_rwlock_rwlock">erl_drv_rwlock_rwlock</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_rwlock_rwunlock(ErlNifRWLock *rwlck)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_rwlock_rwunlock">erl_drv_rwlock_rwunlock</seealso>.
- </p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_rwlock_tryrlock(ErlNifRWLock *rwlck)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_rwlock_tryrlock">erl_drv_rwlock_tryrlock</seealso>.
- </p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_rwlock_tryrwlock(ErlNifRWLock *rwlck)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_rwlock_tryrwlock">erl_drv_rwlock_tryrwlock</seealso>.
- </p></desc>
- </func>
- <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_schedule_nif(ErlNifEnv* env, const char* fun_name, int flags, ERL_NIF_TERM (*fp)(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]), int argc, const ERL_NIF_TERM argv[])</nametext></name>
- <fsummary>Schedule a NIF for execution</fsummary>
- <desc>
- <p>Schedule NIF <c>fp</c> to execute. This function allows an application to break up long-running
- work into multiple regular NIF calls or to schedule a <seealso marker="#dirty_nifs">dirty NIF</seealso>
- to execute on a dirty scheduler thread (<em>note that the dirty NIF functionality described here is
- experimental</em> and that you have to enable support for dirty schedulers when building OTP in
- order to try the functionality out).</p>
- <p>The <c>fun_name</c> argument provides a name for the NIF being scheduled for execution. If it cannot
- be converted to an atom, <c>enif_schedule_nif</c> returns a <c>badarg</c> exception.</p>
- <p>The <c>flags</c> argument must be set to 0 for a regular NIF, or if the emulator was built the
- experimental dirty scheduler support enabled, <c>flags</c> can be set to either <c>ERL_NIF_DIRTY_JOB_CPU_BOUND</c>
- if the job is expected to be primarily CPU-bound, or <c>ERL_NIF_DIRTY_JOB_IO_BOUND</c> for jobs that will
- be I/O-bound. If dirty scheduler threads are not available in the emulator, a try to schedule such a job
- will result in a <c>badarg</c> exception.</p>
-
- <p>The <c>argc</c> and <c>argv</c> arguments can either be the originals passed into the calling NIF, or
- they can be values created by the calling NIF.</p>
- <p>The calling NIF must use the return value of <c>enif_schedule_nif</c> as its own return value.</p>
- <p>Be aware that <c>enif_schedule_nif</c>, as its name implies, only schedules the
- NIF for future execution. The calling NIF does not block waiting for the scheduled NIF to
- execute and return, which means that the calling NIF can't expect to receive the scheduled NIF
- return value and use it for further operations.</p>
+ <p>Returns <c>true</c> if the message is successfully sent. Returns
+ <c>false</c> if the send operation fails, that is:</p>
+ <list type="bulleted">
+ <item><c>*to_pid</c> does not refer to an alive local process.</item>
+ <item>The currently executing process (that is, the sender) is not
+ alive.</item>
+ </list>
+ <p>The message environment <c>msg_env</c> with all its terms (including
+ <c>msg</c>) is invalidated by a successful call to <c>enif_send</c>.
+ The environment is to either be freed with
+ <seealso marker="#enif_free_env">
+ <c>enif_free_env</c></seealso> of cleared for reuse with
+ <seealso marker="#enif_clear_env"><c>enif_clear_env</c></seealso>.</p>
+ <p>If <c>msg_env</c> is set to <c>NULL</c>, the <c>msg</c> term is
+ copied and the original term and its environemt is still valid after
+ the call.</p>
+ <p>This function is only thread-safe when the emulator with SMP support
+ is used. It can only be used in a non-SMP emulator from a NIF-calling
+ thread.</p>
+ <note>
+ <p>Passing <c>msg_env</c> as <c>NULL</c> is only supported as from
+ ERTS 8.0 (Erlang/OTP 19).</p>
+ </note>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>unsigned</ret>
+ <nametext>enif_sizeof_resource(void* obj)</nametext></name>
+ <fsummary>Get the byte size of a resource object.</fsummary>
+ <desc>
+ <p>Gets the byte size of resource object <c>obj</c> obtained by
+ <seealso marker="#enif_alloc_resource">
+ <c>enif_alloc_resource</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_snprintf(char *str, size_t size, const
+ char *format, ...)</nametext></name>
+ <fsummary>Format strings and Erlang terms.</fsummary>
+ <desc>
+ <p>Similar to <c>snprintf</c> but this format string also accepts
+ <c>"%T"</c>, which formats Erlang terms.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret><nametext>enif_system_info(ErlNifSysInfo
+ *sys_info_ptr, size_t size)</nametext></name>
+ <fsummary>Get information about the Erlang runtime system.</fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#driver_system_info">
+ <c>driver_system_info</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret><nametext>enif_term_to_binary(ErlNifEnv *env,
+ ERL_NIF_TERM term, ErlNifBinary *bin)</nametext></name>
+ <fsummary>Convert a term to the external format.</fsummary>
+ <desc>
+ <p>Allocates a new binary with <seealso marker="#enif_alloc_binary">
+ <c>enif_alloc_binary</c></seealso> and stores the result of encoding
+ <c>term</c> according to the Erlang external term format.</p>
+ <p>Returns <c>true</c> on success, or <c>false</c> if the allocation
+ fails.</p>
+ <p>See also <seealso marker="erlang#term_to_binary-1">
+ <c>erlang:term_to_binary/1</c></seealso> and
+ <seealso marker="#enif_binary_to_term">
+ <c>enif_binary_to_term</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_thread_create(char *name,ErlNifTid
+ *tid,void * (*func)(void *),void *args,ErlNifThreadOpts
+ *opts)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_thread_create">
+ <c>erl_drv_thread_create</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret>
+ <nametext>enif_thread_exit(void *resp)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_thread_exit">
+ <c>erl_drv_thread_exit</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_thread_join(ErlNifTid, void **respp)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_thread_join">
+ <c>erl_drv_thread_join</c></seealso>.</p>
</desc>
</func>
- <func><name><ret>ErlNifPid *</ret><nametext>enif_self(ErlNifEnv* caller_env, ErlNifPid* pid)</nametext></name>
- <fsummary>Get the pid of the calling process</fsummary>
- <desc><p>Initialize the pid variable <c>*pid</c> to represent the
- calling process. Return <c>pid</c>.</p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_send(ErlNifEnv* env, ErlNifPid* to_pid, ErlNifEnv* msg_env, ERL_NIF_TERM msg)</nametext></name>
- <fsummary>Send a message to a process</fsummary>
- <desc><p>Send a message to a process.</p>
- <taglist>
- <tag><c>env</c></tag>
- <item>The environment of the calling process. Must be NULL if and
- only if calling from a created thread.</item>
- <tag><c>*to_pid</c></tag>
- <item>The pid of the receiving process. The pid should refer to a process on the local node.</item>
- <tag><c>msg_env</c></tag>
- <item>The environment of the message term. Must be a process
- independent environment allocated with
- <seealso marker="#enif_alloc_env">enif_alloc_env</seealso> or NULL.</item>
- <tag><c>msg</c></tag>
- <item>The message term to send.</item>
- </taglist>
- <p>Return true if the message was successfully sent; otherwise, false. The send
- operation will fail if <c>*to_pid</c> does not refer to an alive local process,
- or if currently executing process, i.e. the sender, is not alive.</p>
- <p>The message environment <c>msg_env</c> with all its terms (including
- <c>msg</c>) will be invalidated by a successful call to <c>enif_send</c>. The environment
- should either be freed with <seealso marker="#enif_free_env">enif_free_env</seealso>
- of cleared for reuse with <seealso marker="#enif_clear_env">enif_clear_env</seealso>.</p>
- <p>If <c>msg_env</c> is set to NULL the <c>msg</c> term is copied and
- the original term and its environemt is still valid after the call.</p>
- <p>This function is only thread-safe when the emulator with SMP support is used.
- It can only be used in a non-SMP emulator from a NIF-calling thread.</p>
- <note><p>Passing <c>msg_env</c> as <c>NULL</c> is only supported since
- erts-8.0 (OTP 19).</p></note>
- </desc>
- </func>
- <func><name><ret>unsigned</ret><nametext>enif_sizeof_resource(void* obj)</nametext></name>
- <fsummary>Get the byte size of a resource object</fsummary>
- <desc><p>Get the byte size of a resource object <c>obj</c> obtained by
- <seealso marker="#enif_alloc_resource">enif_alloc_resource</seealso>.</p></desc>
- </func>
- <func>
- <name><ret>void</ret><nametext>enif_system_info(ErlNifSysInfo *sys_info_ptr, size_t size)</nametext></name>
- <fsummary>Get information about the Erlang runtime system</fsummary>
- <desc><p>Same as <seealso marker="erl_driver#driver_system_info">driver_system_info</seealso>.
- </p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_term_to_binary(ErlNifEnv *env, ERL_NIF_TERM term, ErlNifBinary *bin)</nametext></name>
- <fsummary>Convert a term to the external format</fsummary>
- <desc>
- <p>Allocates a new binary with <seealso marker="#enif_alloc_binary">enif_alloc_binary</seealso>
- and stores the result of encoding <c>term</c> according to the Erlang external term format.</p>
- <p>Returns true on success or false if allocation failed.</p>
- <p>See also:
- <seealso marker="erlang#term_to_binary-1"><c>erlang:term_to_binary/1</c></seealso> and
- <seealso marker="#enif_binary_to_term"><c>enif_binary_to_term</c></seealso>.
- </p>
+
+ <func>
+ <name><ret>ErlNifThreadOpts *</ret>
+ <nametext>enif_thread_opts_create(char *name)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_thread_opts_create">
+ <c>erl_drv_thread_opts_create</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret>
+ <nametext>enif_thread_opts_destroy(ErlNifThreadOpts *opts)</nametext>
+ </name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_thread_opts_destroy">
+ <c>erl_drv_thread_opts_destroy</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ErlNifTid</ret>
+ <nametext>enif_thread_self(void)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_thread_self">
+ <c>erl_drv_thread_self</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_thread_type(void)</nametext></name>
+ <fsummary>Determine type of current thread</fsummary>
+ <desc>
+ <p>Determine the type of currently executing thread. A positive value
+ indicates a scheduler thread while a negative value or zero indicates
+ another type of thread. Currently the following specific types exist
+ (which may be extended in the future):</p>
+ <taglist>
+ <tag><c>ERL_NIF_THR_UNDEFINED</c></tag>
+ <item><p>Undefined thread that is not a scheduler thread.</p></item>
+ <tag><c>ERL_NIF_THR_NORMAL_SCHEDULER</c></tag>
+ <item><p>A normal scheduler thread.</p></item>
+ <tag><c>ERL_NIF_THR_DIRTY_CPU_SCHEDULER</c></tag>
+ <item><p>A dirty CPU scheduler thread.</p></item>
+ <tag><c>ERL_NIF_THR_DIRTY_IO_SCHEDULER</c></tag>
+ <item><p>A dirty I/O scheduler thread.</p></item>
+ </taglist>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ErlNifTime</ret>
+ <nametext>enif_time_offset(ErlNifTimeUnit time_unit)</nametext></name>
+ <fsummary>Get current time offset.</fsummary>
+ <desc>
+ <marker id="enif_time_offset"></marker>
+ <p>Returns the current time offset between
+ <seealso marker="time_correction#Erlang_Monotonic_Time">
+ Erlang monotonic time</seealso> and
+ <seealso marker="time_correction#Erlang_System_Time">
+ Erlang system time</seealso>
+ converted into the <c>time_unit</c> passed as argument.</p>
+ <p><c>time_unit</c> is the time unit of the returned value.</p>
+ <p>Returns <c>ERL_NIF_TIME_ERROR</c> if called with an invalid
+ time unit argument or if called from a thread that is not a
+ scheduler thread.</p>
+ <p>See also <seealso marker="#ErlNifTime"><c>ErlNifTime</c></seealso>
+ and
+ <seealso marker="#ErlNifTimeUnit"><c>ErlNifTimeUnit</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>void *</ret>
+ <nametext>enif_tsd_get(ErlNifTSDKey key)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_tsd_get">
+ <c>erl_drv_tsd_get</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>int</ret>
+ <nametext>enif_tsd_key_create(char *name, ErlNifTSDKey *key)</nametext>
+ </name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_tsd_key_create">
+ <c>erl_drv_tsd_key_create</c></seealso>.</p>
</desc>
+ </func>
+
+ <func>
+ <name><ret>void</ret>
+ <nametext>enif_tsd_key_destroy(ErlNifTSDKey key)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_tsd_key_destroy">
+ <c>erl_drv_tsd_key_destroy</c></seealso>.</p>
+ </desc>
</func>
- <func><name><ret>int</ret><nametext>enif_thread_create(char *name,ErlNifTid *tid,void * (*func)(void *),void *args,ErlNifThreadOpts *opts)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_thread_create">erl_drv_thread_create</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_thread_exit(void *resp)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_thread_exit">erl_drv_thread_exit</seealso>.
- </p></desc>
- </func>
- <func><name><ret>int</ret><nametext>enif_thread_join(ErlNifTid, void **respp)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_thread_join">erl_drv_thread_join </seealso>.
- </p></desc>
- </func>
- <func><name><ret>ErlNifThreadOpts *</ret><nametext>enif_thread_opts_create(char *name)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_thread_opts_create">erl_drv_thread_opts_create</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_thread_opts_destroy(ErlNifThreadOpts *opts)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_thread_opts_destroy">erl_drv_thread_opts_destroy</seealso>.
- </p></desc>
- </func>
- <func><name><ret>ErlNifTid</ret><nametext>enif_thread_self(void)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_thread_self">erl_drv_thread_self</seealso>.
- </p></desc>
- </func>
-
- <func>
- <name><ret>ErlNifTime</ret><nametext>enif_time_offset(ErlNifTimeUnit time_unit)</nametext></name>
- <fsummary>Get current Time Offset</fsummary>
- <desc>
- <marker id="enif_time_offset"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>time_unit</c></tag>
- <item>Time unit of returned value.</item>
- </taglist>
- <p>Returns the current time offset between
- <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang monotonic time</seealso>
- and
- <seealso marker="time_correction#Erlang_System_Time">Erlang system time</seealso>
- converted into the <c>time_unit</c> passed as argument.</p>
- <p>Returns <c>ERL_NIF_TIME_ERROR</c> if called with an invalid
- time unit argument, or if called from a thread that is not a
- scheduler thread.</p>
- <p>See also:
- <seealso marker="#ErlNifTime"><c>ErlNifTime</c></seealso> and
- <seealso marker="#ErlNifTimeUnit"><c>ErlNifTimeUnit</c></seealso>.
- </p>
- </desc>
- </func>
-
- <func><name><ret>int</ret><nametext>enif_tsd_key_create(char *name, ErlNifTSDKey *key)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_tsd_key_create">erl_drv_tsd_key_create</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_tsd_key_destroy(ErlNifTSDKey key)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_tsd_key_destroy">erl_drv_tsd_key_destroy</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void *</ret><nametext>enif_tsd_get(ErlNifTSDKey key)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_tsd_get">erl_drv_tsd_get</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_tsd_set(ErlNifTSDKey key, void *data)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_tsd_set">erl_drv_tsd_set</seealso>.
- </p></desc>
+
+ <func>
+ <name><ret>void</ret>
+ <nametext>enif_tsd_set(ErlNifTSDKey key, void *data)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Same as <seealso marker="erl_driver#erl_drv_tsd_set">
+ <c>erl_drv_tsd_set</c></seealso>.</p>
+ </desc>
</func>
</funcs>
+
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="erlang#load_nif-2">erlang:load_nif/2</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="erlang#load_nif-2">
+ <c>erlang:load_nif/2</c></seealso></p>
</section>
</cref>
diff --git a/erts/doc/src/erl_prim_loader.xml b/erts/doc/src/erl_prim_loader.xml
index d3ece37cc5..286bac6c93 100644
--- a/erts/doc/src/erl_prim_loader.xml
+++ b/erts/doc/src/erl_prim_loader.xml
@@ -30,70 +30,70 @@
<file>erl_prim_loader.xml</file>
</header>
<module>erl_prim_loader</module>
- <modulesummary>Low Level Erlang Loader</modulesummary>
+ <modulesummary>Low-level Erlang loader.</modulesummary>
<description>
- <p><c>erl_prim_loader</c> is used to load all Erlang modules into
- the system. The start script is also fetched with this low level
+ <p>This module is used to load all Erlang modules into
+ the system. The start script is also fetched with this low-level
loader.</p>
+
<p><c>erl_prim_loader</c> knows about the environment and how to
fetch modules.</p>
- <p>The <c>-loader Loader</c> command line flag can be used to
- choose the method used by the <c>erl_prim_loader</c>. Two
+
+ <p>Command-line flag <c>-loader Loader</c> can be used to
+ choose the method used by <c>erl_prim_loader</c>. Two
<c>Loader</c> methods are supported by the Erlang runtime system:
<c>efile</c> and <c>inet</c>.</p>
-
- <warning><p>The support for loading of code from archive files is
- experimental. The sole purpose of releasing it before it is ready
- is to obtain early feedback. The file format, semantics,
- interfaces etc. may be changed in a future release. The functions
- <c>list_dir/1</c> and <c>read_file_info/1</c> as well as the flag
- <c>-loader_debug</c> are also experimental</p></warning>
-
</description>
<funcs>
<func>
<name name="get_file" arity="1"/>
- <fsummary>Get a file</fsummary>
+ <fsummary>Get a file.</fsummary>
<desc>
- <p>This function fetches a file using the low level loader.
- <c><anno>Filename</anno></c> is either an absolute file name or just the name
- of the file, for example <c>"lists.beam"</c>. If an internal
+ <p>Fetches a file using the low-level loader.
+ <c><anno>Filename</anno></c> is either an absolute filename or only
+ the name of the file, for example, <c>"lists.beam"</c>. If an internal
path is set to the loader, this path is used to find the file.
<c><anno>FullName</anno></c> is the complete name of the fetched file.
<c><anno>Bin</anno></c> is the contents of the file as a binary.</p>
-
- <p>The <c><anno>Filename</anno></c> can also be a file in an archive. For example
+ <p><c><anno>Filename</anno></c> can also be a file in an archive,
+ for example,
<c>$OTPROOT/lib/</c><c>mnesia-4.4.7.ez/mnesia-4.4.7/ebin/</c><c>mnesia.beam</c>.
- See <seealso marker="kernel:code">code(3)</seealso> about archive files.</p>
+ For information about archive files, see
+ <seealso marker="kernel:code"><c>code(3)</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="get_path" arity="0"/>
- <fsummary>Get the path set in the loader</fsummary>
+ <fsummary>Get the path set in the loader.</fsummary>
<desc>
- <p>This function gets the path set in the loader. The path is
- set by the <c>init</c> process according to information found
- in the start script.</p>
+ <p>Gets the path set in the loader. The path is
+ set by the <seealso marker="init"><c>init(3)</c></seealso>
+ process according to information found in the start script.</p>
</desc>
</func>
+
<func>
<name name="list_dir" arity="1"/>
- <fsummary>List files in a directory</fsummary>
+ <fsummary>List files in a directory.</fsummary>
<desc>
<p>Lists all the files in a directory. Returns
- <c>{ok, <anno>Filenames</anno>}</c> if successful. Otherwise, it returns
+ <c>{ok, <anno>Filenames</anno>}</c> if successful, otherwise
<c>error</c>. <c><anno>Filenames</anno></c> is a list of
the names of all the files in the directory. The names are
not sorted.</p>
- <p>The <c><anno>Dir</anno></c> can also be a directory in an archive. For example
+ <p><c><anno>Dir</anno></c> can also be a directory in an archive,
+ for example,
<c>$OTPROOT/lib/</c><c>mnesia-4.4.7.ez/mnesia-4.4.7/ebin</c>.
- See <seealso marker="kernel:code">code(3)</seealso> about archive files.</p>
+ For information about archive files, see
+ <seealso marker="kernel:code"><c>code(3)</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="read_file_info" arity="1"/>
- <fsummary>Get information about a file</fsummary>
+ <fsummary>Get information about a file.</fsummary>
<desc>
<p>Retrieves information about a file. Returns
<c>{ok, <anno>FileInfo</anno>}</c> if successful, otherwise
@@ -103,22 +103,25 @@
from which the function is called:</p>
<code type="none">
-include_lib("kernel/include/file.hrl").</code>
- <p>See <seealso marker="kernel:file">file(3)</seealso> for more info about
- the record <c>file_info</c>.</p>
- <p>The <c><anno>Filename</anno></c> can also be a file in an archive. For example
+ <p>For more information about the record <c>file_info</c>, see
+ <seealso marker="kernel:file"><c>file(3)</c></seealso>.</p>
+ <p><c><anno>Filename</anno></c> can also be a file in an archive,
+ for example,
<c>$OTPROOT/lib/</c><c>mnesia-4.4.7.ez/mnesia-4.4.7/ebin/</c><c>mnesia</c>.
- See <seealso marker="kernel:code">code(3)</seealso> about archive files.</p>
+ For information about archive files, see
+ <seealso marker="kernel:code"><c>code(3)</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="read_link_info" arity="1"/>
- <fsummary>Get information about a link or file</fsummary>
+ <fsummary>Get information about a link or file.</fsummary>
<desc>
- <p>This function works like
- <seealso marker="#read_file_info/1">read_file_info/1</seealso>
+ <p>Works like
+ <seealso marker="#read_file_info/1"><c>read_file_info/1</c></seealso>
except that if <c><anno>Filename</anno></c> is a symbolic link,
- information about the link will be returned in the <c>file_info</c>
- record and the <c>type</c> field of the record will be set to
+ information about the link is returned in the <c>file_info</c>
+ record and the <c>type</c> field of the record is set to
<c>symlink</c>.</p>
<p>If <c><anno>Filename</anno></c> is not a symbolic link, this function
returns exactly the same result as <c>read_file_info/1</c>.
@@ -126,20 +129,23 @@
is always equivalent to <c>read_file_info/1</c>.</p>
</desc>
</func>
+
<func>
<name name="set_path" arity="1"/>
- <fsummary>Set the path of the loader</fsummary>
+ <fsummary>Set the path of the loader.</fsummary>
<desc>
- <p>This function sets the path of the loader if <c>init</c>
+ <p>Sets the path of the loader if
+ <seealso marker="init"><c>init(3)</c></seealso>
interprets a <c>path</c> command in the start script.</p>
</desc>
</func>
</funcs>
<section>
- <title>Command Line Flags</title>
+ <title>Command-Line Flags</title>
<p>The <c>erl_prim_loader</c> module interprets the following
- command line flags:</p>
+ command-line flags:</p>
+
<taglist>
<tag><c>-loader Loader</c></tag>
<item>
@@ -147,37 +153,38 @@
<c>erl_prim_loader</c>. <c>Loader</c> can be <c>efile</c>
(use the local file system) or <c>inet</c> (load using
the <c>boot_server</c> on another Erlang node).</p>
- <p>If the <c>-loader</c> flag is omitted, it defaults to
+ <p>If flag <c>-loader</c> is omitted, it defaults to
<c>efile</c>.</p>
</item>
<tag><c>-loader_debug</c></tag>
<item>
<p>Makes the <c>efile</c> loader write some debug information,
- such as the reason for failures, while it handles files.</p>
+ such as the reason for failures, while it handles files.</p>
</item>
<tag><c>-hosts Hosts</c></tag>
<item>
<p>Specifies which other Erlang nodes the <c>inet</c> loader
- can use. This flag is mandatory if the <c>-loader inet</c>
- flag is present. On each host, there must be on Erlang node
- with the <seealso
- marker="kernel:erl_boot_server">erl_boot_server(3)</seealso>
- which handles the load requests.
- <c>Hosts</c> is a list of IP addresses (hostnames
+ can use. This flag is mandatory if flag <c>-loader inet</c>
+ is present. On each host, there must be on Erlang node
+ with the <seealso marker="kernel:erl_boot_server">
+ <c>erl_boot_server(3)</c></seealso>,
+ which handles the load requests.
+ <c>Hosts</c> is a list of IP addresses (hostnames
are not acceptable).</p>
</item>
<tag><c>-setcookie Cookie</c></tag>
<item>
<p>Specifies the cookie of the Erlang runtime system. This flag
- is mandatory if the <c>-loader inet</c> flag is present.</p>
+ is mandatory if flag <c>-loader inet</c> is present.</p>
</item>
</taglist>
</section>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="init">init(3)</seealso>,
- <seealso marker="kernel:erl_boot_server">erl_boot_server(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="init"><c>init(3)</c></seealso>,
+ <seealso marker="kernel:erl_boot_server">
+ <c>erl_boot_server(3)</c></seealso></p>
</section>
</erlref>
diff --git a/erts/doc/src/erl_tracer.xml b/erts/doc/src/erl_tracer.xml
index 7fd5512b33..83eef374ca 100644
--- a/erts/doc/src/erl_tracer.xml
+++ b/erts/doc/src/erl_tracer.xml
@@ -29,510 +29,618 @@
<rev></rev>
</header>
<module>erl_tracer</module>
- <modulesummary>Erlang Tracer Behaviour</modulesummary>
+ <modulesummary>Erlang tracer behavior.</modulesummary>
<description>
- <p>A behaviour module for implementing the back end of the erlang
- tracing system. The functions in this module will be called whenever
- a trace probe is triggered. Both the <c>enabled</c> and <c>trace</c>
- functions are called in the context of the entity that triggered the
- trace probe.
- This means that the overhead by having the tracing enabled will be
- greatly effected by how much time is spent in these functions. So do as
- little work as possible in these functions.</p>
+ <p>This behavior module implements the back end of the Erlang
+ tracing system. The functions in this module are called whenever
+ a trace probe is triggered. Both the <c>enabled</c> and <c>trace</c>
+ functions are called in the context of the entity that triggered the
+ trace probe.
+ This means that the overhead by having the tracing enabled is
+ greatly effected by how much time is spent in these functions. So, do as
+ little work as possible in these functions.</p>
+
<note>
- <p>All functions in this behaviour have to be implemented as NIF's.
- This is a limitation that may the lifted in the future.
- There is an <seealso marker="#example">example tracer module nif</seealso>
- implementation at the end of this page.</p>
+ <p>All functions in this behavior must be implemented as NIFs.
+ This limitation can be removed in a future releases.
+ An <seealso marker="#example">example tracer module NIF</seealso>
+ implementation is provided at the end of this page.</p>
</note>
+
<warning>
<p>Do not send messages or issue port commands to the <c>Tracee</c>
- in any of the callbacks. Doing so is not allowed and can cause all
- sorts of strange behaviour, including but not limited to infinite
- recursions.</p>
+ in any of the callbacks. This is not allowed and can cause all
+ sorts of strange behavior, including, but not limited to, infinite
+ recursions.</p>
</warning>
</description>
<datatypes>
- <datatype> <name name="trace_tag_send" /> </datatype>
- <datatype> <name name="trace_tag_receive" /> </datatype>
- <datatype> <name name="trace_tag_call" /> </datatype>
- <datatype> <name name="trace_tag_procs" /> </datatype>
- <datatype> <name name="trace_tag_ports" /> </datatype>
- <datatype> <name name="trace_tag_running_procs" /> </datatype>
- <datatype> <name name="trace_tag_running_ports" /> </datatype>
- <datatype> <name name="trace_tag_gc" /> </datatype>
<datatype>
- <name name="trace_tag" />
+ <name name="trace_tag_call"/>
+ </datatype>
+ <datatype>
+ <name name="trace_tag_gc"/>
+ </datatype>
+ <datatype>
+ <name name="trace_tag_ports"/>
+ </datatype>
+ <datatype>
+ <name name="trace_tag_procs"/>
+ </datatype>
+ <datatype>
+ <name name="trace_tag_receive"/>
+ </datatype>
+ <datatype>
+ <name name="trace_tag_running_ports"/>
+ </datatype>
+ <datatype>
+ <name name="trace_tag_running_procs"/>
+ </datatype>
+ <datatype>
+ <name name="trace_tag_send"/>
+ </datatype>
+ <datatype>
+ <name name="trace_tag"/>
<desc>
- <p>The different trace tags that the tracer will be called with.
- Each trace tag is described in greater detail in
- <seealso marker="#trace">Module:trace/6</seealso>
- </p>
+ <p>The different trace tags that the tracer is called with.
+ Each trace tag is described in detail in
+ <seealso marker="#Module:trace/5"><c>Module:trace/5</c></seealso>.</p>
</desc>
</datatype>
<datatype>
- <name name="tracee" />
+ <name name="tracee"/>
<desc>
- <p>The process or port that the trace belongs to.
- </p>
+ <p>The process or port that the trace belongs to.</p>
</desc>
</datatype>
<datatype>
- <name name="trace_opts" />
+ <name name="trace_opts"/>
<desc>
- <p>The options for the tracee.
+ <p>The options for the tracee:</p>
<taglist>
<tag><c>timestamp</c></tag>
- <item>If not set to <c>undefined</c>, the tracer has been requested to
- include a timestamp.</item>
+ <item>If set the tracer has been requested to include a
+ time stamp.</item>
+ <tag><c>extra</c></tag>
+ <item>If set the tracepoint has included additonal data about
+ the trace event. What the additional data is depends on which
+ <c>TraceTag</c> has been triggered. The <c>extra</c> trace data
+ corresponds to the fifth element in the trace tuples described in
+ <seealso marker="erlang#trace_3_trace_messages">
+ erlang:trace/3</seealso>.</item>
<tag><c>match_spec_result</c></tag>
- <item>If not set to <c>true</c>, the tracer has been requested to
- include the output of a match specification that was run.</item>
+ <item>If set the tracer has been requested to include the output
+ of a match specification that was run.</item>
<tag><c>scheduler_id</c></tag>
- <item>Set to a number if the scheduler id is to be included by the tracer.
- Otherwise it is set to <c>undefined</c>.</item>
+ <item>If set the scheduler id is to be included by the tracer.</item>
</taglist>
- </p>
</desc>
</datatype>
<datatype>
- <name name="tracer_state" />
+ <name name="tracer_state"/>
<desc>
- <p>
- The state which is given when calling
- <seealso marker="erlang#trace-3"><c>erlang:trace(PidPortSpec,true,[{tracer,Module,TracerState}])</c></seealso>.
- The tracer state is an immutable value that is passed to erl_tracer callbacks and should
- contain all the data that is needed to generate the trace event.
- </p>
+ <p>The state specified when calling
+ <seealso marker="erlang#trace-3">
+ <c>erlang:trace(PidPortSpec,true,[{tracer,Module,TracerState}])</c></seealso>.
+ The tracer state is an immutable value that is passed to
+ <c>erl_tracer</c> callbacks and is to
+ contain all the data that is needed to generate the trace event.</p>
</desc>
</datatype>
</datatypes>
<section>
- <title>CALLBACK FUNCTIONS</title>
- <p>The following functions
- should be exported from a <c>erl_tracer</c> callback module.</p>
- <taglist>
- <tag><seealso marker="#enabled"><c>Module:enabled/3</c></seealso></tag>
- <item>Mandatory</item>
- <tag><seealso marker="#trace"><c>Module:trace/6</c></seealso></tag>
- <item>Mandatory</item>
- <tag><seealso marker="#enabled_procs"><c>Module:enabled_procs/3</c></seealso></tag>
- <item>Optional</item>
- <tag><seealso marker="#trace_procs"><c>Module:trace_procs/6</c></seealso></tag>
- <item>Optional</item>
- <tag><seealso marker="#enabled_ports"><c>Module:enabled_ports/3</c></seealso></tag>
- <item>Optional</item>
- <tag><seealso marker="#trace_ports"><c>Module:trace_ports/6</c></seealso></tag>
- <item>Optional</item>
- <tag><seealso marker="#enabled_running_ports"><c>Module:enabled_running_ports/3</c></seealso></tag>
- <item>Optional</item>
- <tag><seealso marker="#trace_running_ports"><c>Module:trace_running_ports/6</c></seealso></tag>
- <item>Optional</item>
- <tag><seealso marker="#enabled_running_procs"><c>Module:enabled_running_procs/3</c></seealso></tag>
- <item>Optional</item>
- <tag><seealso marker="#trace_running_procs"><c>Module:trace_running_procs/6</c></seealso></tag>
- <item>Optional</item>
+ <title>Callback Functions</title>
+ <p>The following functions are to be exported from an <c>erl_tracer</c>
+ callback module:</p>
+
+ <taglist>
+ <tag><seealso marker="#Module:enabled/3">
+ <c>Module:enabled/3</c></seealso></tag>
+ <item>Mandatory</item>
+ <tag><seealso marker="#Module:trace/5">
+ <c>Module:trace/5</c></seealso></tag>
+ <item>Mandatory</item>
+ <tag><seealso marker="#Module:enabled_call/3">
+ <c>Module:enabled_call/3</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:trace_call/5">
+ <c>Module:trace_call/5</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:enabled_garbage_collection/3">
+ <c>Module:enabled_garbage_collection/3</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:trace_garbage_collection/5">
+ <c>Module:trace_garbage_collection/5</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:enabled_ports/3">
+ <c>Module:enabled_ports/3</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:trace_ports/5">
+ <c>Module:trace_ports/5</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:enabled_procs/3">
+ <c>Module:enabled_procs/3</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:trace_procs/5">
+ <c>Module:trace_procs/5</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:enabled_receive/3">
+ <c>Module:enabled_receive/3</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:trace_receive/5">
+ <c>Module:trace_receive/5</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:enabled_running_ports/3">
+ <c>Module:enabled_running_ports/3</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:trace_running_ports/5">
+ <c>Module:trace_running_ports/5</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:enabled_running_procs/3">
+ <c>Module:enabled_running_procs/3</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:trace_running_procs/5">
+ <c>Module:trace_running_procs/5</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:enabled_send/3">
+ <c>Module:enabled_send/3</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:trace_send/5">
+ <c>Module:trace_send/5</c></seealso></tag>
+ <item>Optional</item>
</taglist>
-
</section>
- <marker id="enabled"></marker>
+
<funcs>
<func>
<name>Module:enabled(TraceTag, TracerState, Tracee) -> Result</name>
- <fsummary>Check if a trace event should be generated.</fsummary>
+ <fsummary>Check if a trace event is to be generated.</fsummary>
<type>
- <v>TraceTag = <seealso marker="#type-trace_tag">trace_tag()</seealso> | trace_status</v>
+ <v>TraceTag = <seealso marker="#type-trace_tag">
+ trace_tag()</seealso> | trace_status</v>
<v>TracerState = term()</v>
<v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
- <v>Result = trace | discard | remove</v>
+ <v>Result = trace | discard | remove</v>
</type>
<desc>
- <p>This callback will be called whenever a tracepoint is triggered. It
- allows the tracer to decide whether a trace should be generated or not.
- This check is made as early as possible in order to limit the amount of
- overhead associated with tracing. If <c>trace</c> is returned the
- necessary trace data will be created and the trace call-back of the tracer
- will be called. If <c>discard</c> is returned, this trace call
- will be discarded and no call to trace will be done.
- </p>
- <p><c>trace_status</c> is a special type of <c>TraceTag</c> which is used
- to check if the tracer should still be active. It is called in multiple
- scenarios, but most significantly it is used when tracing is started
- using this tracer. If <c>remove</c> is returned when the <c>trace_status</c>
- is checked, the tracer will be removed from the tracee.</p>
- <p>This function may be called multiple times per tracepoint, so it
- is important that it is both fast and side effect free.</p>
+ <p>This callback is called whenever a tracepoint is triggered. It
+ allows the tracer to decide whether a trace is to be generated or not.
+ This check is made as early as possible to limit the amount of
+ overhead associated with tracing. If <c>trace</c> is returned, the
+ necessary trace data is created and the trace callback of the tracer
+ is called. If <c>discard</c> is returned, this trace call is
+ discarded and no call to trace is done.</p>
+ <p><c>trace_status</c> is a special type of <c>TraceTag</c>, which is
+ used to check if the tracer is still to be active. It is called in
+ multiple scenarios, but most significantly it is used when tracing
+ is started using this tracer. If <c>remove</c> is returned when the
+ <c>trace_status</c> is checked, the tracer is removed from the
+ tracee.</p>
+ <p>This function can be called multiple times per tracepoint, so it
+ is important that it is both fast and without side effects.</p>
</desc>
</func>
- <marker id="trace"></marker>
+
<func>
- <name>Module:trace(TraceTag, TracerState, Tracee, FirstTraceTerm, SecondTraceTerm, Opts) -> Result</name>
- <fsummary>Check if a trace event should be generated.</fsummary>
+ <name>Module:enabled_call(TraceTag, TracerState, Tracee) -> Result</name>
+ <fsummary>Check if a trace event is to be generated.</fsummary>
<type>
- <v>TraceTag = <seealso marker="#type-trace_tag">trace_tag()</seealso></v>
+ <v>TraceTag = <seealso marker="#type-trace_tag_call">
+ trace_tag_call()</seealso></v>
<v>TracerState = term()</v>
<v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
- <v>FirstTraceTerm = term()</v>
- <v>SecondTraceTerm = term() | undefined</v>
- <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
- <v>Result = ok</v>
+ <v>Result = trace | discard | remove</v>
</type>
<desc>
- <p>This callback will be called when a tracepoint is triggered and
- the <seealso marker="#enabled">Module:enabled/3</seealso>
- callback returned <c>trace</c>. In it any side effects needed by
- the tracer should be done. The tracepoint payload is located in
- the <c>FirstTraceTerm</c> and <c>SecondTraceTerm</c>. The content
- of the TraceTerms depends on which <c>TraceTag</c> has been triggered.
- The <c>FirstTraceTerm</c> and <c>SecondTraceTerm</c> correspond to the
- fourth and fifth slot in the trace tuples described in
- <seealso marker="erlang#trace_3_trace_messages">erlang:trace/3</seealso>.
- If the tuple only has four elements, <c>SecondTraceTerm</c> will be
- <c>undefined</c>.</p>
+ <p>This callback is called whenever a tracepoint with trace flag
+ <seealso marker="erlang#trace-3"><c>call | return_to</c></seealso>
+ is triggered.</p>
+ <p>If <c>enabled_call/3</c> is undefined,
+ <seealso marker="#Module:enabled/3"><c>Module:enabled/3</c></seealso>
+ is called instead.</p>
</desc>
</func>
+
<func>
- <name name="trace">Module:trace(seq_trace, TracerState, Label, SeqTraceInfo, undefined, Opts) -> Result</name>
- <fsummary>Check if a sequence trace event should be generated.</fsummary>
+ <name>Module:enabled_garbage_collection(TraceTag, TracerState, Tracee) -> Result</name>
+ <fsummary>Check if a trace event is to be generated.</fsummary>
<type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_gc">
+ trace_tag_gc()</seealso></v>
<v>TracerState = term()</v>
- <v>Label = term()</v>
- <v>SeqTraceInfo = term()</v>
- <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
- <v>Result = ok</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>Result = trace | discard | remove</v>
</type>
<desc>
- <p>The <c>TraceTag</c> <c>seq_trace</c> is handled a little bit
- differently. There is not <c>Tracee</c> for seq_trace, instead the
- <c>Label</c> associated with the seq_trace event is given.
- For more info on what <c>Label</c> and <c>SeqTraceInfo</c> can be
- see the <seealso marker="kernel:seq_trace">seq_trace</seealso> manual.</p>
+ <p>This callback is called whenever a tracepoint with trace flag
+ <seealso marker="erlang#trace-3"><c>garbage_collection</c></seealso>
+ is triggered.</p>
+ <p>If <c>enabled_garbage_collection/3</c> is undefined,
+ <seealso marker="#Module:enabled/3"><c>Module:enabled/3</c></seealso>
+ is called instead.</p>
</desc>
</func>
- <marker id="enabled_procs"></marker>
<func>
- <name>Module:enabled_procs(TraceTag, TracerState, Tracee) -> Result</name>
- <fsummary>Check if a trace event should be generated.</fsummary>
- <type>
- <v>TraceTag = <seealso marker="#type-trace_tag_procs">trace_tag_procs()</seealso></v>
- <v>TracerState = term()</v>
- <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
- <v>Result = trace | discard | remove</v>
- </type>
- <desc>
- <p>This callback will be called whenever a tracepoint with trace flag
- <seealso marker="erlang#trace-3"><c>procs</c></seealso>
- is triggered.</p>
- <p>If <c>enabled_procs/3</c> is not defined <c>enabled/3</c> will be called instead.</p>
- </desc>
+ <name>Module:enabled_ports(TraceTag, TracerState, Tracee) -> Result</name>
+ <fsummary>Check if a trace event is to be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_ports">
+ trace_tag_ports()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>Result = trace | discard | remove</v>
+ </type>
+ <desc>
+ <p>This callback is called whenever a tracepoint with trace flag
+ <seealso marker="erlang#trace-3"><c>ports</c></seealso>
+ is triggered.</p>
+ <p>If <c>enabled_ports/3</c> is undefined,
+ <seealso marker="#Module:enabled/3"><c>Module:enabled/3</c></seealso>
+ is called instead.</p>
+ </desc>
</func>
- <marker id="trace_procs"></marker>
<func>
- <name>Module:trace_procs(TraceTag, TracerState, Tracee, FirstTraceTerm, SecondTraceTerm, Opts) -> Result</name>
- <fsummary>Check if a trace event should be generated.</fsummary>
- <type>
- <v>TraceTag = <seealso marker="#type-trace_tag_procs">trace_tag()</seealso></v>
- <v>TracerState = term()</v>
- <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
- <v>FirstTraceTerm = term()</v>
- <v>SecondTraceTerm = term() | undefined</v>
- <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
- <v>Result = ok</v>
- </type>
- <desc>
- <p>This callback will be called when a tracepoint is triggered and
- the <seealso marker="#enabled_procs">Module:enabled_procs/3</seealso>
- callback returned <c>trace</c>.</p>
- <p>If <c>trace_procs/6</c> is not defined <c>trace/6</c> will be called instead.</p>
- </desc>
+ <name>Module:enabled_procs(TraceTag, TracerState, Tracee) -> Result</name>
+ <fsummary>Check if a trace event is to be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_procs">
+ trace_tag_procs()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>Result = trace | discard | remove</v>
+ </type>
+ <desc>
+ <p>This callback is called whenever a tracepoint with trace flag
+ <seealso marker="erlang#trace-3"><c>procs</c></seealso>
+ is triggered.</p>
+ <p>If <c>enabled_procs/3</c> is undefined,
+ <seealso marker="#Module:enabled/3"><c>Module:enabled/3</c></seealso>
+ is called instead.</p>
+ </desc>
</func>
- <marker id="enabled_ports"></marker>
<func>
- <name>Module:enabled_ports(TraceTag, TracerState, Tracee) -> Result</name>
- <fsummary>Check if a trace event should be generated.</fsummary>
- <type>
- <v>TraceTag = <seealso marker="#type-trace_tag_ports">trace_tag_ports()</seealso></v>
- <v>TracerState = term()</v>
- <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
- <v>Result = trace | discard | remove</v>
- </type>
- <desc>
- <p>This callback will be called whenever a tracepoint with trace flag
- <seealso marker="erlang#trace-3"><c>ports</c></seealso>
- is triggered.</p>
- <p>If <c>enabled_ports/3</c> is not defined <c>enabled/3</c> will be called instead.</p>
- </desc>
+ <name>Module:enabled_receive(TraceTag, TracerState, Tracee) -> Result
+ </name>
+ <fsummary>Check if a trace event is to be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_receive">
+ trace_tag_receive()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>Result = trace | discard | remove</v>
+ </type>
+ <desc>
+ <p>This callback is called whenever a tracepoint with trace flag
+ <seealso marker="erlang#trace-3"><c>'receive'</c></seealso>
+ is triggered.</p>
+ <p>If <c>enabled_receive/3</c> is undefined,
+ <seealso marker="#Module:enabled/3"><c>Module:enabled/3</c></seealso>
+ is called instead.</p>
+ </desc>
</func>
- <marker id="trace_ports"></marker>
<func>
- <name>Module:trace_ports(TraceTag, TracerState, Tracee, FirstTraceTerm, SecondTraceTerm, Opts) -> Result</name>
- <fsummary>Check if a trace event should be generated.</fsummary>
- <type>
- <v>TraceTag = <seealso marker="#type-trace_tag_ports">trace_tag()</seealso></v>
- <v>TracerState = term()</v>
- <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
- <v>FirstTraceTerm = term()</v>
- <v>SecondTraceTerm = term() | undefined</v>
- <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
- <v>Result = ok</v>
- </type>
- <desc>
- <p>This callback will be called when a tracepoint is triggered and
- the <seealso marker="#enabled_ports">Module:enabled_ports/3</seealso>
- callback returned <c>trace</c>.</p>
- <p>If <c>trace_ports/6</c> is not defined <c>trace/6</c> will be called instead.</p>
- </desc>
+ <name>Module:enabled_running_ports(TraceTag, TracerState, Tracee) ->
+ Result</name>
+ <fsummary>Check if a trace event is to be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_running_ports">
+ trace_tag_running_ports()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>Result = trace | discard | remove</v>
+ </type>
+ <desc>
+ <p>This callback is called whenever a tracepoint with trace flag
+ <seealso marker="erlang#trace-3"><c>running_ports</c></seealso>
+ is triggered.</p>
+ <p>If <c>enabled_running_ports/3</c> is undefined,
+ <seealso marker="#Module:enabled/3"><c>Module:enabled/3</c></seealso>
+ is called instead.</p>
+ </desc>
</func>
- <marker id="enabled_running_procs"></marker>
<func>
- <name>Module:enabled_running_procs(TraceTag, TracerState, Tracee) -> Result</name>
- <fsummary>Check if a trace event should be generated.</fsummary>
- <type>
- <v>TraceTag = <seealso marker="#type-trace_tag_running_procs">trace_tag_running_procs()</seealso></v>
- <v>TracerState = term()</v>
- <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
- <v>Result = trace | discard | remove</v>
- </type>
- <desc>
- <p>This callback will be called whenever a tracepoint with trace flag
- <seealso marker="erlang#trace-3"><c>running_procs | running</c></seealso>
- is triggered.</p>
- <p>If <c>enabled_running_procs/3</c> is not defined <c>enabled/3</c> will be called instead.</p>
- </desc>
+ <name>Module:enabled_running_procs(TraceTag, TracerState, Tracee) ->
+ Result</name>
+ <fsummary>Check if a trace event is to be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_running_procs">
+ trace_tag_running_procs()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>Result = trace | discard | remove</v>
+ </type>
+ <desc>
+ <p>This callback is called whenever a tracepoint with trace flag
+ <seealso marker="erlang#trace-3">
+ <c>running_procs | running</c></seealso>
+ is triggered.</p>
+ <p>If <c>enabled_running_procs/3</c> is undefined,
+ <seealso marker="#Module:enabled/3"><c>Module:enabled/3</c></seealso>
+ is called instead.</p>
+ </desc>
</func>
- <marker id="trace_running_procs"></marker>
<func>
- <name>Module:trace_running_procs(TraceTag, TracerState, Tracee, FirstTraceTerm, SecondTraceTerm, Opts) -> Result</name>
- <fsummary>Check if a trace event should be generated.</fsummary>
- <type>
- <v>TraceTag = <seealso marker="#type-trace_tag_running_procs">trace_tag_running_procs()</seealso></v>
- <v>TracerState = term()</v>
- <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
- <v>FirstTraceTerm = term()</v>
- <v>SecondTraceTerm = term() | undefined</v>
- <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
- <v>Result = ok</v>
- </type>
- <desc>
- <p>This callback will be called when a tracepoint is triggered and
- the <seealso marker="#enabled_running_procs">Module:enabled_running_procs/3</seealso>
- callback returned <c>trace</c>.</p>
- <p>If <c>trace_running_procs/6</c> is not defined <c>trace/6</c> will be called instead.</p>
- </desc>
+ <name>Module:enabled_send(TraceTag, TracerState, Tracee) -> Result</name>
+ <fsummary>Check if a trace event is to be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_send">
+ trace_tag_send()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>Result = trace | discard | remove</v>
+ </type>
+ <desc>
+ <p>This callback is called whenever a tracepoint with trace flag
+ <seealso marker="erlang#trace-3"><c>send</c></seealso>
+ is triggered.</p>
+ <p>If <c>enabled_send/3</c> is undefined,
+ <seealso marker="#Module:enabled/3"><c>Module:enabled/3</c></seealso>
+ is called instead.</p>
+ </desc>
</func>
- <marker id="enabled_running_ports"></marker>
<func>
- <name>Module:enabled_running_ports(TraceTag, TracerState, Tracee) -> Result</name>
- <fsummary>Check if a trace event should be generated.</fsummary>
- <type>
- <v>TraceTag = <seealso marker="#type-trace_tag_running_ports">trace_tag_running_ports()</seealso></v>
- <v>TracerState = term()</v>
- <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
- <v>Result = trace | discard | remove</v>
- </type>
- <desc>
- <p>This callback will be called whenever a tracepoint with trace flag
- <seealso marker="erlang#trace-3"><c>running_ports</c></seealso>
- is triggered.</p>
- <p>If <c>enabled_running_ports/3</c> is not defined <c>enabled/3</c> will be called instead.</p>
- </desc>
+ <name>Module:trace(TraceTag, TracerState, Tracee, TraceTerm,
+ Opts) -> Result</name>
+ <fsummary>Check if a trace event is to be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag">
+ trace_tag()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>TraceTerm = term()</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>This callback is called when a tracepoint is triggered and the
+ <seealso marker="#Module:enabled/3"><c>Module:enabled/3</c></seealso>
+ callback returned <c>trace</c>. In it any side effects needed by
+ the tracer are to be done. The tracepoint payload is located in
+ the <c>TraceTerm</c>. The content of the <c>TraceTerm</c>
+ depends on which <c>TraceTag</c> is triggered.
+ <c>TraceTerm</c> corresponds to the
+ fourth element in the trace tuples described in
+ <seealso marker="erlang#trace_3_trace_messages">
+ <c>erlang:trace/3</c></seealso>.</p>
+ <p>If the trace tuple has five elements, the fifth element
+ will be sent as the <c>extra</c> value in the <c>Opts</c> maps.</p>
+ </desc>
</func>
- <marker id="trace_running_ports"></marker>
<func>
- <name>Module:trace_running_ports(TraceTag, TracerState, Tracee, FirstTraceTerm, SecondTraceTerm, Opts) -> Result</name>
- <fsummary>Check if a trace event should be generated.</fsummary>
- <type>
- <v>TraceTag = <seealso marker="#type-trace_tag_running_ports">trace_tag_running_ports()</seealso></v>
- <v>TracerState = term()</v>
- <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
- <v>FirstTraceTerm = term()</v>
- <v>SecondTraceTerm = term() | undefined</v>
- <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
- <v>Result = ok</v>
- </type>
- <desc>
- <p>This callback will be called when a tracepoint is triggered and
- the <seealso marker="#enabled_running_ports">Module:enabled_running_ports/3</seealso>
- callback returned <c>trace</c>.</p>
- <p>If <c>trace_running_ports/6</c> is not defined <c>trace/6</c> will be called instead.</p>
- </desc>
+ <name name="trace">Module:trace(seq_trace, TracerState, Label,
+ SeqTraceInfo, Opts) -> Result</name>
+ <fsummary>Check if a sequence trace event is to be generated.</fsummary>
+ <type>
+ <v>TracerState = term()</v>
+ <v>Label = term()</v>
+ <v>SeqTraceInfo = term()</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>The <c>TraceTag</c> <c>seq_trace</c> is handled slightly
+ differently. There is no <c>Tracee</c> for <c>seq_trace</c>, instead
+ the <c>Label</c> associated with the <c>seq_trace</c> event is
+ specified.</p>
+ <p>For more information on what <c>Label</c> and <c>SeqTraceInfo</c>
+ can be, see <seealso marker="kernel:seq_trace">
+ <c>seq_trace(3)</c></seealso>.</p>
+ </desc>
</func>
- <marker id="enabled_call"></marker>
<func>
- <name>Module:enabled_call(TraceTag, TracerState, Tracee) -> Result</name>
- <fsummary>Check if a trace event should be generated.</fsummary>
- <type>
- <v>TraceTag = <seealso marker="#type-trace_tag_call">trace_tag_call()</seealso></v>
- <v>TracerState = term()</v>
- <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
- <v>Result = trace | discard | remove</v>
- </type>
- <desc>
- <p>This callback will be called whenever a tracepoint with trace flag
- <seealso marker="erlang#trace-3"><c>call | return_to</c></seealso>
- is triggered.</p>
- <p>If <c>enabled_call/3</c> is not defined <c>enabled/3</c> will be called instead.</p>
- </desc>
+ <name>Module:trace_call(TraceTag, TracerState, Tracee, TraceTerm,
+ Opts) -> Result</name>
+ <fsummary>Check if a trace event is to be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_call">
+ trace_tag_call()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>TraceTerm = term()</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>This callback is called when a tracepoint is triggered and the
+ <seealso marker="#Module:enabled_call/3">
+ <c>Module:enabled_call/3</c></seealso>
+ callback returned <c>trace</c>.</p>
+ <p>If <c>trace_call/5</c> is undefined,
+ <seealso marker="#Module:trace/5"><c>Module:trace/5</c></seealso>
+ is called instead.</p>
+ </desc>
</func>
- <marker id="trace_call"></marker>
<func>
- <name>Module:trace_call(TraceTag, TracerState, Tracee, FirstTraceTerm, SecondTraceTerm, Opts) -> Result</name>
- <fsummary>Check if a trace event should be generated.</fsummary>
- <type>
- <v>TraceTag = <seealso marker="#type-trace_tag_call">trace_tag_call()</seealso></v>
- <v>TracerState = term()</v>
- <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
- <v>FirstTraceTerm = term()</v>
- <v>SecondTraceTerm = term() | undefined</v>
- <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
- <v>Result = ok</v>
- </type>
- <desc>
- <p>This callback will be called when a tracepoint is triggered and
- the <seealso marker="#enabled_call">Module:enabled_call/3</seealso>
- callback returned <c>trace</c>.</p>
- <p>If <c>trace_call/6</c> is not defined <c>trace/6</c> will be called instead.</p>
- </desc>
+ <name>Module:trace_garbage_collection(TraceTag, TracerState, Tracee,
+ TraceTerm, Opts) -> Result</name>
+ <fsummary>Check if a trace event is to be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_gc">
+ trace_tag_gc()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>TraceTerm = term()</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>This callback is called when a tracepoint is triggered and the
+ <seealso marker="#Module:enabled_garbage_collection/3">
+ <c>Module:enabled_garbage_collection/3</c></seealso>
+ callback returned <c>trace</c>.</p>
+ <p>If <c>trace_garbage_collection/5</c> is undefined,
+ <seealso marker="#Module:trace/5"><c>Module:trace/5</c></seealso>
+ is called instead.</p>
+ </desc>
</func>
- <marker id="enabled_send"></marker>
<func>
- <name>Module:enabled_send(TraceTag, TracerState, Tracee) -> Result</name>
- <fsummary>Check if a trace event should be generated.</fsummary>
- <type>
- <v>TraceTag = <seealso marker="#type-trace_tag_send">trace_tag_send()</seealso></v>
- <v>TracerState = term()</v>
- <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
- <v>Result = trace | discard | remove</v>
- </type>
- <desc>
- <p>This callback will be called whenever a tracepoint with trace flag
- <seealso marker="erlang#trace-3"><c>send</c></seealso>
- is triggered.</p>
- <p>If <c>enabled_send/3</c> is not defined <c>enabled/3</c> will be called instead.</p>
- </desc>
+ <name>Module:trace_ports(TraceTag, TracerState, Tracee, TraceTerm,
+ Opts) -> Result</name>
+ <fsummary>Check if a trace event is to be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_ports">
+ trace_tag()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>TraceTerm = term()</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>This callback is called when a tracepoint is triggered and the
+ <seealso marker="#Module:enabled_ports/3">
+ <c>Module:enabled_ports/3</c></seealso>
+ callback returned <c>trace</c>.</p>
+ <p>If <c>trace_ports/5</c> is undefined,
+ <seealso marker="#Module:trace/5"><c>Module:trace/5</c></seealso>
+ is called instead.</p>
+ </desc>
</func>
- <marker id="trace_send"></marker>
<func>
- <name>Module:trace_send(TraceTag, TracerState, Tracee, FirstTraceTerm, SecondTraceTerm, Opts) -> Result</name>
- <fsummary>Check if a trace event should be generated.</fsummary>
- <type>
- <v>TraceTag = <seealso marker="#type-trace_tag_send">trace_tag_send()</seealso></v>
- <v>TracerState = term()</v>
- <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
- <v>FirstTraceTerm = term()</v>
- <v>SecondTraceTerm = term() | undefined</v>
- <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
- <v>Result = ok</v>
- </type>
- <desc>
- <p>This callback will be called when a tracepoint is triggered and
- the <seealso marker="#enabled_send">Module:enabled_send/3</seealso>
- callback returned <c>trace</c>.</p>
- <p>If <c>trace_send/6</c> is not defined <c>trace/6</c> will be called instead.</p>
- </desc>
+ <name>Module:trace_procs(TraceTag, TracerState, Tracee, TraceTerm,
+ Opts) -> Result</name>
+ <fsummary>Check if a trace event is to be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_procs">
+ trace_tag()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>TraceTerm = term()</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>This callback is called when a tracepoint is triggered and the
+ <seealso marker="#Module:enabled_procs/3">
+ <c>Module:enabled_procs/3</c></seealso>
+ callback returned <c>trace</c>.</p>
+ <p>If <c>trace_procs/5</c> is undefined,
+ <seealso marker="#Module:trace/5"><c>Module:trace/5</c></seealso>
+ is called instead.</p>
+ </desc>
</func>
- <marker id="enabled_receive"></marker>
<func>
- <name>Module:enabled_receive(TraceTag, TracerState, Tracee) -> Result</name>
- <fsummary>Check if a trace event should be generated.</fsummary>
- <type>
- <v>TraceTag = <seealso marker="#type-trace_tag_receive">trace_tag_receive()</seealso></v>
- <v>TracerState = term()</v>
- <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
- <v>Result = trace | discard | remove</v>
- </type>
- <desc>
- <p>This callback will be called whenever a tracepoint with trace flag
- <seealso marker="erlang#trace-3"><c>'receive'</c></seealso>
- is triggered.</p>
- <p>If <c>enabled_receive/3</c> is not defined <c>enabled/3</c> will be called instead.</p>
- </desc>
+ <name>Module:trace_receive(TraceTag, TracerState, Tracee, TraceTerm,
+ Opts) -> Result</name>
+ <fsummary>Check if a trace event is to be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_receive">
+ trace_tag_receive()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>TraceTerm = term()</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>This callback is called when a tracepoint is triggered and the
+ <seealso marker="#Module:enabled_receive/3">
+ <c>Module:enabled_receive/3</c></seealso>
+ callback returned <c>trace</c>.</p>
+ <p>If <c>trace_receive/5</c> is undefined,
+ <seealso marker="#Module:trace/5"><c>Module:trace/5</c></seealso>
+ is called instead.</p>
+ </desc>
</func>
- <marker id="trace_receive"></marker>
<func>
- <name>Module:trace_receive(TraceTag, TracerState, Tracee, FirstTraceTerm, SecondTraceTerm, Opts) -> Result</name>
- <fsummary>Check if a trace event should be generated.</fsummary>
- <type>
- <v>TraceTag = <seealso marker="#type-trace_tag_receive">trace_tag_receive()</seealso></v>
- <v>TracerState = term()</v>
- <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
- <v>FirstTraceTerm = term()</v>
- <v>SecondTraceTerm = term() | undefined</v>
- <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
- <v>Result = ok</v>
- </type>
- <desc>
- <p>This callback will be called when a tracepoint is triggered and
- the <seealso marker="#enabled_receive">Module:enabled_receive/3</seealso>
- callback returned <c>trace</c>.</p>
- <p>If <c>trace_receive/6</c> is not defined <c>trace/6</c> will be called instead.</p>
- </desc>
+ <name>Module:trace_running_ports(TraceTag, TracerState, Tracee,
+ TraceTerm, Opts) -> Result</name>
+ <fsummary>Check if a trace event is to be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_running_ports">
+ trace_tag_running_ports()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>TraceTerm = term()</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>This callback is called when a tracepoint is triggered and the
+ <seealso marker="#Module:enabled_running_ports/3">
+ <c>Module:enabled_running_ports/3</c></seealso>
+ callback returned <c>trace</c>.</p>
+ <p>If <c>trace_running_ports/5</c> is undefined,
+ <seealso marker="#Module:trace/5"><c>Module:trace/5</c></seealso>
+ is called instead.</p>
+ </desc>
</func>
- <marker id="enabled_garbage_collection"></marker>
<func>
- <name>Module:enabled_garbage_collection(TraceTag, TracerState, Tracee) -> Result</name>
- <fsummary>Check if a trace event should be generated.</fsummary>
- <type>
- <v>TraceTag = <seealso marker="#type-trace_tag_gc">trace_tag_gc()</seealso></v>
- <v>TracerState = term()</v>
- <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
- <v>Result = trace | discard | remove</v>
- </type>
- <desc>
- <p>This callback will be called whenever a tracepoint with trace flag
- <seealso marker="erlang#trace-3"><c>garbage_collection</c></seealso>
- is triggered.</p>
- <p>If <c>enabled_garbage_collection/3</c> is not defined <c>enabled/3</c> will be called instead.</p>
- </desc>
+ <name>Module:trace_running_procs(TraceTag, TracerState, Tracee,
+ TraceTerm, Opts) -> Result</name>
+ <fsummary>Check if a trace event is to be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_running_procs">
+ trace_tag_running_procs()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>TraceTerm = term()</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>This callback is called when a tracepoint is triggered and the
+ <seealso marker="#Module:enabled_running_procs/3">
+ <c>Module:enabled_running_procs/3</c></seealso>
+ callback returned <c>trace</c>.</p>
+ <p>If <c>trace_running_procs/5</c> is undefined,
+ <seealso marker="#Module:trace/5"><c>Module:trace/5</c></seealso>
+ is called instead.</p>
+ </desc>
</func>
- <marker id="trace_garbage_collection"></marker>
<func>
- <name>Module:trace_garbage_collection(TraceTag, TracerState, Tracee, FirstTraceTerm, SecondTraceTerm, Opts) -> Result</name>
- <fsummary>Check if a trace event should be generated.</fsummary>
- <type>
- <v>TraceTag = <seealso marker="#type-trace_tag_gc">trace_tag_gc()</seealso></v>
- <v>TracerState = term()</v>
- <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
- <v>FirstTraceTerm = term()</v>
- <v>SecondTraceTerm = term() | undefined</v>
- <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
- <v>Result = ok</v>
- </type>
- <desc>
- <p>This callback will be called when a tracepoint is triggered and
- the <seealso marker="#enabled_garbage_collection">Module:enabled_garbage_collection/3</seealso>
- callback returned <c>trace</c>.</p>
- <p>If <c>trace_garbage_collection/6</c> is not defined <c>trace/6</c> will be called instead.</p>
- </desc>
+ <name>Module:trace_send(TraceTag, TracerState, Tracee, TraceTerm,
+ Opts) -> Result</name>
+ <fsummary>Check if a trace event is to be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_send">
+ trace_tag_send()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>TraceTerm = term()</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>This callback is called when a tracepoint is triggered and the
+ <seealso marker="#Module:enabled_send/3">
+ <c>Module:enabled_send/3</c></seealso>
+ callback returned <c>trace</c>.</p>
+ <p>If <c>trace_send/5</c> is undefined,
+ <seealso marker="#Module:trace/5"><c>Module:trace/5</c></seealso>
+ is called instead.</p>
+ </desc>
</func>
-
</funcs>
+
<section>
<marker id="example"></marker>
- <title>Erl Tracer Module example</title>
- <p>In the example below a tracer module with a nif backend sends a message
- for each <c>send</c> trace tag containing only the sender and receiver.
- Using this tracer module, a much more lightweight message tracer is
- used that only records who sent messages to who.</p>
- <p>Here is an example session using it on Linux.</p>
+ <title>Erl Tracer Module Example</title>
+ <p>In this example, a tracer module with a NIF back end sends a
+ message for each <c>send</c> trace tag containing only the sender and
+ receiver. Using this tracer module, a much more lightweight message
+ tracer is used, which only records who sent messages to who.</p>
+
+ <p>The following is an example session using it on Linux:</p>
+
<pre>
$ gcc -I erts-8.0/include/ -fPIC -shared -o erl_msg_tracer.so erl_msg_tracer.c
$ erl
@@ -555,13 +663,14 @@ ok
{trace,#Port&lt;0.490&gt;,&lt;0.4.0&gt;}
{ok,&lt;0.40.0&gt;}
{trace,&lt;0.41.0&gt;,&lt;0.27.0&gt;}
-5&gt;
- </pre>
- <p>erl_msg_tracer.erl</p>
+5&gt;</pre>
+
+ <p><c>erl_msg_tracer.erl</c>:</p>
+
<pre>
-module(erl_msg_tracer).
--export([enabled/3, trace/6, load/0]).
+-export([enabled/3, trace/5, load/0]).
load() ->
erlang:load_nif("erl_msg_tracer", []).
@@ -569,10 +678,11 @@ load() ->
enabled(_, _, _) ->
error.
-trace(_, _, _,_, _, _) ->
- error.
- </pre>
- <p>erl_msg_tracer.c</p>
+trace(_, _, _, _, _) ->
+ error.</pre>
+
+ <p><c>erl_msg_tracer.c</c>:</p>
+
<pre>
#include "erl_nif.h"
@@ -587,7 +697,7 @@ static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ErlNifFunc nif_funcs[] = {
{"enabled", 3, enabled},
- {"trace", 6, trace}
+ {"trace", 5, trace}
};
ERL_NIF_INIT(erl_msg_tracer, nif_funcs, load, NULL, upgrade, unload)
@@ -650,9 +760,8 @@ static ERL_NIF_TERM enabled(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
* argv[0]: TraceTag, should only be 'send'
* argv[1]: TracerState, process to send {argv[2], argv[4]} to
* argv[2]: Tracee
- * argv[3]: Message, ignored
- * argv[4]: Recipient
- * argv[5]: Options, ignored
+ * argv[3]: Recipient
+ * argv[4]: Options, ignored
*/
static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
@@ -664,7 +773,6 @@ static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
}
return enif_make_atom(env, "ok");
-}
- </pre>
+}</pre>
</section>
</erlref>
diff --git a/erts/doc/src/erlang.xml b/erts/doc/src/erlang.xml
index e0723127f2..d0a3a77e43 100644
--- a/erts/doc/src/erlang.xml
+++ b/erts/doc/src/erlang.xml
@@ -32,18 +32,21 @@
<module>erlang</module>
<modulesummary>The Erlang BIFs.</modulesummary>
<description>
- <p>By convention, most Built-In Functions (BIFs) are seen as being
+ <p>By convention, most Built-In Functions (BIFs) are included
in this module. Some of the BIFs are viewed more
or less as part of the Erlang programming language and are
<em>auto-imported</em>. Thus, it is not necessary to specify the
module name. For example, the calls <c>atom_to_list(Erlang)</c>
and <c>erlang:atom_to_list(Erlang)</c> are identical.</p>
+
<p>Auto-imported BIFs are listed without module prefix.
BIFs listed with module prefix are not auto-imported.</p>
+
<p>BIFs can fail for various reasons. All BIFs fail with
reason <c>badarg</c> if they are called with arguments of an
incorrect type. The other reasons are described in the
description of each individual BIF.</p>
+
<p>Some BIFs can be used in guard tests and are marked with
"Allowed in guard tests".</p>
</description>
@@ -52,102 +55,130 @@
<datatype>
<name>ext_binary()</name>
<desc>
- <marker id="type-ext_binary"></marker>
<p>A binary data object, structured according to
- the Erlang external term format.</p>
+ the Erlang external term format.</p>
</desc>
</datatype>
-
<datatype>
<name name="message_queue_data"></name>
- <desc><p>See <seealso marker="#process_flag_message_queue_data"><c>erlang:process_flag(message_queue_data, MQD)</c></seealso>.</p>
+ <desc>
+ <p>See <seealso marker="#process_flag_message_queue_data">
+ <c>process_flag(message_queue_data, MQD)</c></seealso>.</p>
</desc>
</datatype>
-
<datatype>
<name name="timestamp"></name>
- <desc><p>See <seealso marker="#timestamp/0">erlang:timestamp/0</seealso>.</p>
+ <desc>
+ <p>See <seealso marker="#timestamp/0">
+ <c>erlang:timestamp/0</c></seealso>.</p>
</desc>
</datatype>
<datatype>
<name name="time_unit"></name>
- <desc><p><marker id="type_time_unit"/>
- Supported time unit representations:</p>
+ <desc>
+ <marker id="type_time_unit"/>
+ <p>Supported time unit representations:</p>
<taglist>
- <tag><c>PartsPerSecond :: integer() >= 1</c></tag>
- <item><p>Time unit expressed in parts per second. That is,
- the time unit equals <c>1/PartsPerSecond</c> second.</p></item>
-
+ <tag><c>PartsPerSecond :: integer() >= 1</c></tag>
+ <item>
+ <p>Time unit expressed in parts per second. That is,
+ the time unit equals <c>1/PartsPerSecond</c> second.</p>
+ </item>
+ <tag><c>second</c></tag>
+ <item>
+ <p>Symbolic representation of the time unit
+ represented by the integer <c>1</c>.</p>
+ </item>
+ <tag><c>millisecond</c></tag>
+ <item>
+ <p>Symbolic representation of the time unit
+ represented by the integer <c>1000</c>.</p>
+ </item>
+ <tag><c>microsecond</c></tag>
+ <item>
+ <p>Symbolic representation of the time unit
+ represented by the integer <c>1000000</c>.</p>
+ </item>
+ <tag><c>nanosecond</c></tag>
+ <item>
+ <p>Symbolic representation of the time unit
+ represented by the integer <c>1000000000</c>.</p>
+ </item>
+ <tag><c>native</c></tag>
+ <item>
+ <p>Symbolic representation of the native time unit
+ used by the Erlang runtime system.</p>
+ <p>The <c>native</c> time unit is determined at
+ runtime system start, and remains the same until
+ the runtime system terminates. If a runtime system
+ is stopped and then started again (even on the same
+ machine), the <c>native</c> time unit of the new
+ runtime system instance can differ from the
+ <c>native</c> time unit of the old runtime system
+ instance.</p>
+ <p>One can get an approximation of the <c>native</c>
+ time unit by calling
+ <seealso marker="erlang:convert_time_unit/3">
+ <c>erlang:convert_time_unit(1, second, native)</c></seealso>.
+ The result equals the number
+ of whole <c>native</c> time units per second. If
+ the number of <c>native</c> time units per second does not
+ add up to a whole number, the result is rounded downwards.</p>
+ <note>
+ <p>The value of the <c>native</c> time unit gives
+ you more or less no information about the
+ quality of time values. It sets a limit for the
+ <seealso marker="time_correction#Time_Resolution">
+ resolution</seealso> and for the
+ <seealso marker="time_correction#Time_Precision">
+ precision</seealso> of time values,
+ but it gives no information about the
+ <seealso marker="time_correction#Time_Accuracy">
+ accuracy</seealso> of time values. The resolution of
+ the <c>native</c> time unit and the resolution of time
+ values can differ significantly.</p>
+ </note>
+ </item>
+ <tag><c>perf_counter</c></tag>
+ <item>
+ <p>Symbolic representation of the performance counter
+ time unit used by the Erlang runtime system.</p>
+ <p>The <c>perf_counter</c> time unit behaves much in the same way
+ as the <c>native</c> time unit. That is, it can differ between
+ runtime restarts. To get values of this type, call
+ <seealso marker="kernel:os#perf_counter/0">
+ <c>os:perf_counter/0</c></seealso>.</p>
+ </item>
+ <tag><seealso marker="#type_deprecated_time_unit"><c>deprecated_time_unit()</c></seealso></tag>
+ <item><p>
+ Deprecated symbolic representations kept for backwards-compatibility.
+ </p></item>
+ </taglist>
+ <p>The <c>time_unit/0</c> type can be extended.
+ To convert time values between time units, use
+ <seealso marker="#convert_time_unit/3">
+ <c>erlang:convert_time_unit/3</c></seealso>.</p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="deprecated_time_unit"></name>
+ <desc><marker id="type_deprecated_time_unit"/>
+ <p>The <seealso marker="#type_time_unit"><c>time_unit()</c></seealso>
+ type also consist of the following <em>deprecated</em> symbolic
+ time units:</p>
+ <taglist>
<tag><c>seconds</c></tag>
- <item><p>Symbolic representation of the time unit
- represented by the integer <c>1</c>.</p></item>
+ <item><p>Same as <seealso marker="#type_time_unit"><c>second</c></seealso>.</p></item>
<tag><c>milli_seconds</c></tag>
- <item><p>Symbolic representation of the time unit
- represented by the integer <c>1000</c>.</p></item>
+ <item><p>Same as <seealso marker="#type_time_unit"><c>millisecond</c></seealso>.</p></item>
<tag><c>micro_seconds</c></tag>
- <item><p>Symbolic representation of the time unit
- represented by the integer <c>1000000</c>.</p></item>
+ <item><p>Same as <seealso marker="#type_time_unit"><c>microsecond</c></seealso>.</p></item>
<tag><c>nano_seconds</c></tag>
- <item><p>Symbolic representation of the time unit
- represented by the integer <c>1000000000</c>.</p></item>
-
- <tag><c>native</c></tag>
- <item><p>Symbolic representation of the native time unit
- used by the Erlang runtime system.</p>
-
- <p>The <c>native</c> time unit is determined at
- runtime system start, and remains the same until
- the runtime system terminates. If a runtime system
- is stopped and then started again (even on the same
- machine), the <c>native</c> time unit of the new
- runtime system instance can differ from the
- <c>native</c> time unit of the old runtime system
- instance.</p>
-
- <p>One can get an approximation of the <c>native</c>
- time unit by calling <c>erlang:convert_time_unit(1,
- seconds, native)</c>. The result equals the number
- of whole <c>native</c> time units per second. In case
- the number of <c>native</c> time units per second does
- not add up to a whole number, the result is rounded downwards.</p>
-
- <note>
- <p>The value of the <c>native</c> time unit gives
- you more or less no information at all about the
- quality of time values. It sets a limit for
- the
- <seealso marker="time_correction#Time_Resolution">resolution</seealso>
- as well as for the
- <seealso marker="time_correction#Time_Precision">precision</seealso>
- of time values,
- but it gives absolutely no information at all about the
- <seealso marker="time_correction#Time_Accuracy">accuracy</seealso>
- of time values. The resolution of the <c>native</c> time
- unit and the resolution of time values can differ
- significantly.</p>
- </note>
- </item>
-
- <tag><c>perf_counter</c></tag>
- <item><p>Symbolic representation of the performance counter
- time unit used by the Erlang runtime system.</p>
-
- <p>The <c>perf_counter</c> time unit behaves much in the same way
- as the <c>native</c> time unit. That is it might differ inbetween
- run-time restarts. You get values of this type by calling
- <seealso marker="kernel:os#perf_counter/0"><c>os:perf_counter()</c></seealso>
- </p>
- </item>
-
+ <item><p>Same as <seealso marker="#type_time_unit"><c>nanosecond</c></seealso>.</p></item>
</taglist>
-
- <p>The <c>time_unit/0</c> type may be extended. Use
- <seealso marker="#convert_time_unit/3"><c>erlang:convert_time_unit/3</c></seealso>
- in order to convert time values between time units.</p>
-
</desc>
</datatype>
</datatypes>
@@ -176,61 +207,60 @@
<func>
<name name="adler32" arity="1"/>
- <fsummary>Computes adler32 checksum.</fsummary>
+ <fsummary>Compute adler32 checksum.</fsummary>
<desc>
<p>Computes and returns the adler32 checksum for
- <c><anno>Data</anno></c>.</p>
+ <c><anno>Data</anno></c>.</p>
</desc>
</func>
<func>
<name name="adler32" arity="2"/>
- <fsummary>Computes adler32 checksum.</fsummary>
+ <fsummary>Compute adler32 checksum.</fsummary>
<desc>
<p>Continues computing the adler32 checksum by combining
- the previous checksum, <c><anno>OldAdler</anno></c>, with
- the checksum of <c><anno>Data</anno></c>.</p>
+ the previous checksum, <c><anno>OldAdler</anno></c>, with
+ the checksum of <c><anno>Data</anno></c>.</p>
<p>The following code:</p>
<code>
- X = erlang:adler32(Data1),
- Y = erlang:adler32(X,Data2).</code>
- <p>assigns the same value to <c>Y</c> as this:</p>
+X = erlang:adler32(Data1),
+Y = erlang:adler32(X,Data2).</code>
+ <p>assigns the same value to <c>Y</c> as this:</p>
<code>
- Y = erlang:adler32([Data1,Data2]).</code>
+Y = erlang:adler32([Data1,Data2]).</code>
</desc>
</func>
<func>
<name name="adler32_combine" arity="3"/>
- <fsummary>Combines two adler32 checksums.</fsummary>
+ <fsummary>Combine two adler32 checksums.</fsummary>
<desc>
<p>Combines two previously computed adler32 checksums.
- This computation requires the size of the data object for
- the second checksum to be known.</p>
+ This computation requires the size of the data object for
+ the second checksum to be known.</p>
<p>The following code:</p>
<code>
- Y = erlang:adler32(Data1),
- Z = erlang:adler32(Y,Data2).</code>
+Y = erlang:adler32(Data1),
+Z = erlang:adler32(Y,Data2).</code>
<p>assigns the same value to <c>Z</c> as this:</p>
<code>
- X = erlang:adler32(Data1),
- Y = erlang:adler32(Data2),
- Z = erlang:adler32_combine(X,Y,iolist_size(Data2)).</code>
+X = erlang:adler32(Data1),
+Y = erlang:adler32(Data2),
+Z = erlang:adler32_combine(X,Y,iolist_size(Data2)).</code>
</desc>
</func>
<func>
<name name="append_element" arity="2"/>
- <fsummary>Appends an extra element to a tuple.</fsummary>
+ <fsummary>Append an extra element to a tuple.</fsummary>
<desc>
<p>Returns a new tuple that has one element more than
<c><anno>Tuple1</anno></c>, and contains the elements in
- <c><anno>Tuple1</anno></c>
+ <c><anno>Tuple1</anno></c>
followed by <c><anno>Term</anno></c> as the last element.
- Semantically equivalent to
+ Semantically equivalent to
<c>list_to_tuple(tuple_to_list(<anno>Tuple1</anno>) ++
- [<anno>Term</anno>])</c>, but much faster.</p>
- <p>Example:</p>
+ [<anno>Term</anno>])</c>, but much faster. Example:</p>
<pre>
> <input>erlang:append_element({one, two}, three).</input>
{one,two,three}</pre>
@@ -239,32 +269,31 @@
<func>
<name name="apply" arity="2"/>
- <fsummary>Applies a function to an argument list.</fsummary>
+ <fsummary>Apply a function to an argument list.</fsummary>
<desc>
<p>Calls a fun, passing the elements in <c><anno>Args</anno></c>
- as arguments.</p>
+ as arguments.</p>
<p>If the number of elements in the arguments are known at
compile time, the call is better written as
<c><anno>Fun</anno>(Arg1, Arg2, ... ArgN)</c>.</p>
<warning>
- <p>Earlier, <c><anno>Fun</anno></c> could also be given as
+ <p>Earlier, <c><anno>Fun</anno></c> could also be specified as
<c>{Module, Function}</c>, equivalent to
- <c>apply(Module, Function, Args)</c>. This use is
- deprecated and will stop working in a future release.</p>
+ <c>apply(Module, Function, Args)</c>. <em>This use is
+ deprecated and will stop working in a future release.</em></p>
</warning>
</desc>
</func>
<func>
<name name="apply" arity="3"/>
- <fsummary>Applies a function to an argument list.</fsummary>
+ <fsummary>Apply a function to an argument list.</fsummary>
<desc>
<p>Returns the result of applying <c>Function</c> in
<c><anno>Module</anno></c> to <c><anno>Args</anno></c>.
- The applied function must
+ The applied function must
be exported from <c>Module</c>. The arity of the function is
- the length of <c>Args</c>.</p>
- <p>Example:</p>
+ the length of <c>Args</c>. Example:</p>
<pre>
> <input>apply(lists, reverse, [[a, b, c]]).</input>
[c,b,a]
@@ -272,39 +301,43 @@
"Erlang"</pre>
<p>If the number of arguments are known at compile time,
the call is better written as
- <c><anno>Module</anno>:<anno>Function</anno>(Arg1, Arg2, ..., ArgN)</c>.</p>
- <p>Failure: <c>error_handler:undefined_function/3</c> is called
+ <c><anno>Module</anno>:<anno>Function</anno>(Arg1, Arg2, ...,
+ ArgN)</c>.</p>
+ <p>Failure: <seealso marker="kernel:error_handler#undefined_function/3">
+ <c>error_handler:undefined_function/3</c></seealso> is called
if the applied function is not exported. The error handler
can be redefined (see
- <seealso marker="#process_flag/2">process_flag/2</seealso>).
+ <seealso marker="#process_flag/2"><c>process_flag/2</c></seealso>).
If <c>error_handler</c> is undefined, or if the user has
redefined the default <c>error_handler</c> so the replacement
- module is undefined, an error with the reason <c>undef</c>
+ module is undefined, an error with reason <c>undef</c>
is generated.</p>
</desc>
</func>
<func>
<name name="atom_to_binary" arity="2"/>
- <fsummary>Returns the binary representation of an atom.</fsummary>
+ <fsummary>Return the binary representation of an atom.</fsummary>
<desc>
<p>Returns a binary corresponding to the text
representation of <c><anno>Atom</anno></c>.
If <c><anno>Encoding</anno></c>
- is <c>latin1</c>, there is one byte for each character
+ is <c>latin1</c>, one byte exists for each character
in the text representation. If <c><anno>Encoding</anno></c> is
<c>utf8</c> or
<c>unicode</c>, the characters are encoded using UTF-8
(that is, characters from 128 through 255 are
encoded in two bytes).</p>
- <note><p><c>atom_to_binary(<anno>Atom</anno>, latin1)</c> never
- fails because the text representation of an atom can only
- contain characters from 0 through 255. In a future release,
- the text representation
- of atoms can be allowed to contain any Unicode character and
- <c>atom_to_binary(<anno>Atom</anno>, latin1)</c> will then fail if the
- text representation for <c><anno>Atom</anno></c> contains a Unicode
- character greater than 255.</p></note>
+ <note>
+ <p><c>atom_to_binary(<anno>Atom</anno>, latin1)</c> never
+ fails, as the text representation of an atom can only
+ contain characters from 0 through 255. In a future release,
+ the text representation
+ of atoms can be allowed to contain any Unicode character and
+ <c>atom_to_binary(<anno>Atom</anno>, latin1)</c> then fails if the
+ text representation for <c><anno>Atom</anno></c> contains a Unicode
+ character &gt; 255.</p>
+ </note>
<p>Example:</p>
<pre>
> <input>atom_to_binary('Erlang', latin1).</input>
@@ -326,12 +359,12 @@
<func>
<name name="binary_part" arity="2"/>
- <fsummary>Extracts a part of a binary.</fsummary>
+ <fsummary>Extract a part of a binary.</fsummary>
<desc>
<p>Extracts the part of the binary described by
<c><anno>PosLen</anno></c>.</p>
<p>Negative length can be used to extract bytes at the end
- of a binary, for example:</p>
+ of a binary, for example:</p>
<code>
1> Bin = &lt;&lt;1,2,3,4,5,6,7,8,9,10&gt;&gt;.
2> binary_part(Bin,{byte_size(Bin), -5}).
@@ -343,43 +376,44 @@
1> Bin = &lt;&lt;1,2,3&gt;&gt;
2> binary_part(Bin,{0,2}).
&lt;&lt;1,2&gt;&gt;</code>
- <p>For details about the <c><anno>PosLen</anno></c> semantics, see the
- <seealso marker="stdlib:binary">binary</seealso>
- manual page in <c>STDLIB</c>.</p>
+ <p>For details about the <c><anno>PosLen</anno></c> semantics, see
+ <seealso marker="stdlib:binary"><c>binary(3)</c></seealso>.</p>
<p>Allowed in guard tests.</p>
</desc>
</func>
<func>
<name name="binary_part" arity="3"/>
- <fsummary>Extracts a part of a binary.</fsummary>
+ <fsummary>Extract a part of a binary.</fsummary>
<desc>
<p>The same as <c>binary_part(<anno>Subject</anno>,
- {<anno>Start</anno>, <anno>Length</anno>})</c>.</p>
+ {<anno>Start</anno>, <anno>Length</anno>})</c>.</p>
<p>Allowed in guard tests.</p>
</desc>
</func>
<func>
<name name="binary_to_atom" arity="2"/>
- <fsummary>Converts from text representation to an atom.</fsummary>
+ <fsummary>Convert from text representation to an atom.</fsummary>
<desc>
<p>Returns the atom whose text representation is
- <c><anno>Binary</anno></c>.
- If <c><anno>Encoding</anno></c> is <c>latin1</c>, no
- translation of bytes in the binary is done.
- If <c><anno>Encoding</anno></c>
- is <c>utf8</c> or <c>unicode</c>, the binary must contain
- valid UTF-8 sequences. Only Unicode characters up
- to 255 are allowed.</p>
- <note><p><c>binary_to_atom(<anno>Binary</anno>, utf8)</c> fails if
- the binary contains Unicode characters greater than 255.
- In a future release, such Unicode characters can be allowed
- and <c>binary_to_atom(<anno>Binary</anno>, utf8)</c> does then not fail.
- For more information on Unicode support in atoms, see the
- <seealso marker="erl_ext_dist#utf8_atoms">note on UTF-8
- encoded atoms</seealso>
- in Section "External Term Format" in the User's Guide.</p></note>
+ <c><anno>Binary</anno></c>.
+ If <c><anno>Encoding</anno></c> is <c>latin1</c>, no
+ translation of bytes in the binary is done.
+ If <c><anno>Encoding</anno></c>
+ is <c>utf8</c> or <c>unicode</c>, the binary must contain
+ valid UTF-8 sequences. Only Unicode characters up
+ to 255 are allowed.</p>
+ <note>
+ <p><c>binary_to_atom(<anno>Binary</anno>, utf8)</c> fails if
+ the binary contains Unicode characters &gt; 255.
+ In a future release, such Unicode characters can be allowed and
+ <c>binary_to_atom(<anno>Binary</anno>, utf8)</c> does then not fail.
+ For more information about Unicode support in atoms, see the
+ <seealso marker="erl_ext_dist#utf8_atoms">note on UTF-8
+ encoded atoms</seealso>
+ in section "External Term Format" in the User's Guide.</p>
+ </note>
<p>Examples:</p>
<pre>
> <input>binary_to_atom(&lt;&lt;"Erlang"&gt;&gt;, latin1).</input>
@@ -393,10 +427,10 @@
<func>
<name name="binary_to_existing_atom" arity="2"/>
- <fsummary>Converts from text representation to an atom.</fsummary>
+ <fsummary>Convert from text representation to an atom.</fsummary>
<desc>
<p>As
- <seealso marker="#binary_to_atom/2">binary_to_atom/2</seealso>,
+ <seealso marker="#binary_to_atom/2"><c>binary_to_atom/2</c></seealso>,
but the atom must exist.</p>
<p>Failure: <c>badarg</c> if the atom does not exist.</p>
</desc>
@@ -404,7 +438,7 @@
<func>
<name name="binary_to_float" arity="1"/>
- <fsummary>Converts from text representation to a float.</fsummary>
+ <fsummary>Convert from text representation to a float.</fsummary>
<desc>
<p>Returns the float whose text representation is
<c><anno>Binary</anno></c>, for example:</p>
@@ -418,7 +452,7 @@
<func>
<name name="binary_to_integer" arity="1"/>
- <fsummary>Converts from text representation to an integer.</fsummary>
+ <fsummary>Convert from text representation to an integer.</fsummary>
<desc>
<p>Returns an integer whose text representation is
<c><anno>Binary</anno></c>, for example:</p>
@@ -432,10 +466,11 @@
<func>
<name name="binary_to_integer" arity="2"/>
- <fsummary>Converts from text representation to an integer.</fsummary>
+ <fsummary>Convert from text representation to an integer.</fsummary>
<desc>
<p>Returns an integer whose text representation in base
- <c><anno>Base</anno></c> is <c><anno>Binary</anno></c>, for example:</p>
+ <c><anno>Base</anno></c> is <c><anno>Binary</anno></c>, for
+ example:</p>
<pre>
> <input>binary_to_integer(&lt;&lt;"3FF"&gt;&gt;, 16).</input>
1023</pre>
@@ -446,7 +481,7 @@
<func>
<name name="binary_to_list" arity="1"/>
- <fsummary>Converts a binary to a list.</fsummary>
+ <fsummary>Convert a binary to a list.</fsummary>
<desc>
<p>Returns a list of integers corresponding to the bytes of
<c><anno>Binary</anno></c>.</p>
@@ -455,86 +490,83 @@
<func>
<name name="binary_to_list" arity="3"/>
- <fsummary>Converts part of a binary to a list.</fsummary>
- <type_desc variable="Start">1..byte_size(<c><anno>Binary</anno></c>)</type_desc>
+ <fsummary>Convert part of a binary to a list.</fsummary>
+ <type_desc variable="Start">1..byte_size(<c><anno>Binary</anno></c>)
+ </type_desc>
<desc>
<p>As <c>binary_to_list/1</c>, but returns a list of integers
corresponding to the bytes from position <c><anno>Start</anno></c> to
position <c><anno>Stop</anno></c> in <c><anno>Binary</anno></c>.
- The positions in the
+ The positions in the
binary are numbered starting from 1.</p>
- <note><p>The one-based indexing for binaries used by
- this function is deprecated. New code is to use
- <seealso marker="stdlib:binary#bin_to_list/3">binary:bin_to_list/3</seealso>
- in <c>STDLIB</c> instead. All functions in module
- <c>binary</c> consistently use zero-based indexing.</p></note>
- </desc>
- </func>
-
- <func>
- <name name="bitstring_to_list" arity="1"/>
- <fsummary>Converts a bitstring to a list.</fsummary>
- <desc>
- <p>Returns a list of integers corresponding to the bytes of
- <c><anno>Bitstring</anno></c>. If the number of bits in the binary
- is not divisible by 8, the last element of the list is a bitstring
- containing the remaining 1-7 bits.</p>
+ <note>
+ <p><em>The one-based indexing for binaries used by
+ this function is deprecated.</em> New code is to use
+ <seealso marker="stdlib:binary#bin_to_list/3">
+ <c>binary:bin_to_list/3</c></seealso>
+ in STDLIB instead. All functions in module
+ <c>binary</c> consistently use zero-based indexing.</p>
+ </note>
</desc>
</func>
<func>
<name name="binary_to_term" arity="1"/>
- <fsummary>Decodes an Erlang external term format binary.</fsummary>
+ <fsummary>Decode an Erlang external term format binary.</fsummary>
<desc>
<p>Returns an Erlang term that is the result of decoding
binary object <c><anno>Binary</anno></c>, which must be encoded
according to the Erlang external term format.</p>
- <warning><p>When decoding binaries from untrusted sources,
- consider using <c>binary_to_term/2</c> to prevent Denial
- of Service attacks.</p></warning>
+ <warning>
+ <p>When decoding binaries from untrusted sources,
+ consider using <c>binary_to_term/2</c> to prevent Denial
+ of Service attacks.</p>
+ </warning>
<p>See also
- <seealso marker="#term_to_binary/1">term_to_binary/1</seealso>
- and
- <seealso marker="#binary_to_term/2">binary_to_term/2</seealso>.</p>
+ <seealso marker="#term_to_binary/1"><c>term_to_binary/1</c></seealso>
+ and <seealso marker="#binary_to_term/2">
+ <c>binary_to_term/2</c></seealso>.</p>
</desc>
</func>
<func>
<name name="binary_to_term" arity="2"/>
- <fsummary>Decodes an Erlang external term format binary.</fsummary>
+ <fsummary>Decode an Erlang external term format binary.</fsummary>
<desc>
<p>As <c>binary_to_term/1</c>, but takes options that affect decoding
- of the binary.</p>
+ of the binary.</p>
+ <p>Option:</p>
<taglist>
<tag><c>safe</c></tag>
<item>
<p>Use this option when receiving binaries from an untrusted
- source.</p>
+ source.</p>
<p>When enabled, it prevents decoding data that can be used to
- attack the Erlang system. In the event of receiving unsafe
- data, decoding fails with a <c>badarg</c> error.</p>
+ attack the Erlang system. In the event of receiving unsafe
+ data, decoding fails with a <c>badarg</c> error.</p>
<p>This prevents creation of new atoms directly,
- creation of new atoms indirectly (as they are embedded in
- certain structures, such as process identifiers,
- refs, and funs), and
- creation of new external function references.
- None of those resources are garbage collected, so unchecked
- creation of them can exhaust available memory.</p>
+ creation of new atoms indirectly (as they are embedded in
+ certain structures, such as process identifiers,
+ refs, and funs), and
+ creation of new external function references.
+ None of those resources are garbage collected, so unchecked
+ creation of them can exhaust available memory.</p>
</item>
</taglist>
<p>Failure: <c>badarg</c> if <c>safe</c> is specified and unsafe
- data is decoded.</p>
+ data is decoded.</p>
<p>See also
- <seealso marker="#term_to_binary/1">term_to_binary/1</seealso>,
- <seealso marker="#binary_to_term/1">binary_to_term/1</seealso>,
- and
- <seealso marker="#list_to_existing_atom/1">list_to_existing_atom/1</seealso>.</p>
+ <seealso marker="#term_to_binary/1"><c>term_to_binary/1</c></seealso>,
+ <seealso marker="#binary_to_term/1">
+ <c>binary_to_term/1</c></seealso>, and
+ <seealso marker="#list_to_existing_atom/1">
+ <c>list_to_existing_atom/1</c></seealso>.</p>
</desc>
</func>
<func>
<name name="bit_size" arity="1"/>
- <fsummary>Returns the size of a bitstring.</fsummary>
+ <fsummary>Return the size of a bitstring.</fsummary>
<desc>
<p>Returns an integer that is the size in bits of
<c><anno>Bitstring</anno></c>, for example:</p>
@@ -548,15 +580,26 @@
</func>
<func>
+ <name name="bitstring_to_list" arity="1"/>
+ <fsummary>Convert a bitstring to a list.</fsummary>
+ <desc>
+ <p>Returns a list of integers corresponding to the bytes of
+ <c><anno>Bitstring</anno></c>. If the number of bits in the binary
+ is not divisible by 8, the last element of the list is a bitstring
+ containing the remaining 1-7 bits.</p>
+ </desc>
+ </func>
+
+ <func>
<name name="bump_reductions" arity="1"/>
- <fsummary>Increments the reduction counter.</fsummary>
+ <fsummary>Increment the reduction counter.</fsummary>
<desc>
<p>This implementation-dependent function increments
the reduction counter for the calling process. In the Beam
emulator, the reduction counter is normally incremented by
one for each function and BIF call. A context switch is
forced when the counter reaches the maximum number of
- reductions for a process (2000 reductions in OTP R12B).</p>
+ reductions for a process (2000 reductions in Erlang/OTP R12B).</p>
<warning>
<p>This BIF can be removed in a future version of the Beam
machine without prior warning. It is unlikely to be
@@ -567,13 +610,12 @@
<func>
<name name="byte_size" arity="1"/>
- <fsummary>Returns the size of a bitstring (or binary).</fsummary>
+ <fsummary>Return the size of a bitstring (or binary).</fsummary>
<desc>
<p>Returns an integer that is the number of bytes needed to
contain <c><anno>Bitstring</anno></c>. That is, if the number of bits
in <c><anno>Bitstring</anno></c> is not divisible by 8, the resulting
- number of bytes is rounded <em>up</em>.</p>
- <p>Examples:</p>
+ number of bytes is rounded <em>up</em>. Examples:</p>
<pre>
> <input>byte_size(&lt;&lt;433:16,3:3&gt;&gt;).</input>
3
@@ -584,134 +626,127 @@
</func>
<func>
- <name name="cancel_timer" arity="2"/>
- <fsummary>Cancels a timer.</fsummary>
+ <name name="cancel_timer" arity="1"/>
+ <fsummary>Cancel a timer.</fsummary>
<desc>
- <p>
- Cancels a timer that has been created by
- <seealso marker="#start_timer/4"><c>erlang:start_timer()</c></seealso>,
- or <seealso marker="#send_after/4"><c>erlang:send_after()</c></seealso>.
- <c><anno>TimerRef</anno></c> identifies the timer, and
- was returned by the BIF that created the timer.
- </p>
- <p>Available <c><anno>Option</anno></c>s:</p>
+ <p>Cancels a timer. The same as calling
+ <seealso marker="#cancel_timer/2">
+ <c>erlang:cancel_timer(TimerRef, [])</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="cancel_timer" arity="2"/>
+ <fsummary>Cancel a timer.</fsummary>
+ <desc>
+ <p>Cancels a timer that has been created by
+ <seealso marker="#start_timer/4">
+ <c>erlang:start_timer</c></seealso> or
+ <seealso marker="#send_after/4"><c>erlang:send_after</c></seealso>.
+ <c><anno>TimerRef</anno></c> identifies the timer, and
+ was returned by the BIF that created the timer.</p>
+ <p><c><anno>Option</anno></c>s:</p>
<taglist>
<tag><c>{async, Async}</c></tag>
<item>
- <p>
- Asynchronous request for cancellation. <c>Async</c>
- defaults to <c>false</c> which will cause the
- cancellation to be performed synchronously. When
- <c>Async</c> is set to <c>true</c>, the cancel
- operation is performed asynchronously. That is,
- <c>erlang:cancel_timer()</c> will send an asynchronous
- request for cancellation to the timer service that
- manages the timer, and then return <c>ok</c>.
- </p>
- </item>
+ <p>Asynchronous request for cancellation. <c>Async</c>
+ defaults to <c>false</c>, which causes the
+ cancellation to be performed synchronously. When
+ <c>Async</c> is set to <c>true</c>, the cancel
+ operation is performed asynchronously. That is,
+ <c>cancel_timer()</c> sends an asynchronous
+ request for cancellation to the timer service that
+ manages the timer, and then returns <c>ok</c>.</p>
+ </item>
<tag><c>{info, Info}</c></tag>
<item>
- <p>
- Request information about the <c><anno>Result</anno></c>
- of the cancellation. <c>Info</c> defaults to <c>true</c>
- which means the <c><anno>Result</anno></c> is
- given. When <c>Info</c> is set to <c>false</c>, no
- information about the result of the cancellation
- is given. When the operation is performed</p>
- <taglist>
- <tag>synchronously</tag>
- <item>
- <p>
- If <c>Info</c> is <c>true</c>, the <c>Result</c> is
- returned by <c>erlang:cancel_timer()</c>; otherwise,
- <c>ok</c> is returned.
- </p>
- </item>
- <tag>asynchronously</tag>
- <item>
- <p>
- If <c>Info</c> is <c>true</c>, a message on the form
- <c>{cancel_timer, <anno>TimerRef</anno>,
- <anno>Result</anno>}</c> is sent to the
- caller of <c>erlang:cancel_timer()</c> when the
- cancellation operation has been performed; otherwise,
- no message is sent.
- </p>
- </item>
- </taglist>
- </item>
- </taglist>
- <p>
- More <c><anno>Option</anno></c>s may be added in the future.
- </p>
- <p>If <c><anno>Result</anno></c> is an integer, it represents
- the time in milli-seconds left until the canceled timer would
- have expired.</p>
- <p>
- If <c><anno>Result</anno></c> is <c>false</c>, a
- timer corresponding to <c><anno>TimerRef</anno></c> could not
- be found. This can be either because the timer had expired,
- already had been canceled, or because <c><anno>TimerRef</anno></c>
- never corresponded to a timer. Even if the timer had expired,
- it does not tell you whether or not the timeout message has
- arrived at its destination yet.
- </p>
- <note>
- <p>
- The timer service that manages the timer may be co-located
- with another scheduler than the scheduler that the calling
- process is executing on. If this is the case, communication
- with the timer service takes much longer time than if it
- is located locally. If the calling process is in critical
- path, and can do other things while waiting for the result
- of this operation, or is not interested in the result of
- the operation, you want to use option <c>{async, true}</c>.
- If using option <c>{async, false}</c>, the calling
- process blocks until the operation has been performed.
- </p>
- </note>
- <p>See also
+ <p>Requests information about the <c><anno>Result</anno></c>
+ of the cancellation. <c>Info</c> defaults to <c>true</c>,
+ which means the <c><anno>Result</anno></c> is
+ given. When <c>Info</c> is set to <c>false</c>, no
+ information about the result of the cancellation
+ is given.</p>
+ <list type="bulleted">
+ <item>
+ <p>When <c>Async</c> is <c>false</c>:
+ if <c>Info</c> is <c>true</c>, the <c>Result</c> is
+ returned by <c>erlang:cancel_timer()</c>. otherwise
+ <c>ok</c> is returned.</p>
+ </item>
+ <item>
+ <p>When <c>Async</c> is <c>true</c>:
+ if <c>Info</c> is <c>true</c>, a message on the form
+ <c>{cancel_timer, <anno>TimerRef</anno>,
+ <anno>Result</anno>}</c> is sent to the
+ caller of <c>erlang:cancel_timer()</c> when the
+ cancellation operation has been performed, otherwise
+ no message is sent.</p>
+ </item>
+ </list>
+ </item>
+ </taglist>
+ <p>More <c><anno>Option</anno></c>s may be added in the future.</p>
+ <p>If <c><anno>Result</anno></c> is an integer, it represents
+ the time in milliseconds left until the canceled timer would
+ have expired.</p>
+ <p>If <c><anno>Result</anno></c> is <c>false</c>, a
+ timer corresponding to <c><anno>TimerRef</anno></c> could not
+ be found. This can be either because the timer had expired,
+ already had been canceled, or because <c><anno>TimerRef</anno></c>
+ never corresponded to a timer. Even if the timer had expired,
+ it does not tell you if the time-out message has
+ arrived at its destination yet.</p>
+ <note>
+ <p>The timer service that manages the timer can be co-located
+ with another scheduler than the scheduler that the calling
+ process is executing on. If so, communication
+ with the timer service takes much longer time than if it
+ is located locally. If the calling process is in critical
+ path, and can do other things while waiting for the result
+ of this operation, or is not interested in the result of
+ the operation, you want to use option <c>{async, true}</c>.
+ If using option <c>{async, false}</c>, the calling
+ process blocks until the operation has been performed.</p>
+ </note>
+ <p>See also
<seealso marker="#send_after/4"><c>erlang:send_after/4</c></seealso>,
- <seealso marker="#start_timer/4"><c>erlang:start_timer/4</c></seealso>,
- and
- <seealso marker="#read_timer/2"><c>erlang:read_timer/2</c></seealso>.</p>
- </desc>
- </func>
- <func>
- <name name="cancel_timer" arity="1"/>
- <fsummary>Cancels a timer.</fsummary>
- <desc>
- <p>Cancels a timer. The same as calling
- <seealso marker="#cancel_timer/2"><c>erlang:cancel_timer(TimerRef,
- [])</c></seealso>.</p>
+ <seealso marker="#start_timer/4">
+ <c>erlang:start_timer/4</c></seealso>, and
+ <seealso marker="#read_timer/2">
+ <c>erlang:read_timer/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="check_old_code" arity="1"/>
- <fsummary>Checks if a module has old code.</fsummary>
+ <fsummary>Check if a module has old code.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Module</anno></c> has old code,
- otherwise <c>false</c>.</p>
- <p>See also <seealso marker="kernel:code">code(3)</seealso>.</p>
+ otherwise <c>false</c>.</p>
+ <p>See also <seealso marker="kernel:code">
+ <c>code(3)</c></seealso>.</p>
</desc>
</func>
<func>
<name name="check_process_code" arity="2"/>
- <fsummary>Checks if a process executes old code for a module.</fsummary>
+ <fsummary>Check if a process executes old code for a module.</fsummary>
<desc>
<p>The same as
- <seealso marker="#check_process_code/3"><c>erlang:check_process_code(<anno>Pid</anno>, <anno>Module</anno>, [])</c></seealso>.</p>
+ <seealso marker="#check_process_code/3">
+ <c>check_process_code(<anno>Pid</anno>, <anno>Module</anno>, [])</c>
+ </seealso>.</p>
</desc>
</func>
<func>
<name name="check_process_code" arity="3"/>
- <fsummary>Checks if a process executes old code for a module.</fsummary>
+ <fsummary>Check if a process executes old code for a module.</fsummary>
<desc>
- <p>Checks if the node local process identified by <c><anno>Pid</anno></c>
- executes old code for <c><anno>Module</anno></c>.</p>
- <p>The available <c><anno>Option</anno></c>s are as follows:</p>
+ <p>Checks if the node local process identified by
+ <c><anno>Pid</anno></c>
+ executes old code for <c><anno>Module</anno></c>.</p>
+ <p><c><anno>Option</anno></c>s:</p>
<taglist>
<tag><c>{allow_gc, boolean()}</c></tag>
<item>
@@ -719,30 +754,30 @@
the operation. If <c>{allow_gc, false}</c> is passed, and
a garbage collection is needed to determine the
result of the operation, the operation is aborted (see
- information on <c><anno>CheckResult</anno></c> in the following).
+ information on <c><anno>CheckResult</anno></c> below).
The default is to allow garbage collection, that is,
<c>{allow_gc, true}</c>.</p>
- </item>
+ </item>
<tag><c>{async, RequestId}</c></tag>
<item>
<p>The function <c>check_process_code/3</c> returns
the value <c>async</c> immediately after the request
has been sent. When the request has been processed, the
process that called this function is passed a
- message on the form
- <c>{check_process_code, <anno>RequestId</anno>, <anno>CheckResult</anno>}</c>.</p>
- </item>
+ message on the form <c>{check_process_code, <anno>RequestId</anno>,
+ <anno>CheckResult</anno>}</c>.</p>
+ </item>
</taglist>
<p>If <c><anno>Pid</anno></c> equals <c>self()</c>, and
- no <c>async</c> option has been passed, the operation
- is performed at once. Otherwise a request for
- the operation is sent to the process identified by
- <c><anno>Pid</anno></c>, and is handled when
- appropriate. If no <c>async</c> option has been passed,
- the caller blocks until <c><anno>CheckResult</anno></c>
- is available and can be returned.</p>
+ no <c>async</c> option has been passed, the operation
+ is performed at once. Otherwise a request for
+ the operation is sent to the process identified by
+ <c><anno>Pid</anno></c>, and is handled when
+ appropriate. If no <c>async</c> option has been passed,
+ the caller blocks until <c><anno>CheckResult</anno></c>
+ is available and can be returned.</p>
<p><c><anno>CheckResult</anno></c> informs about the result of
- the request as follows:</p>
+ the request as follows:</p>
<taglist>
<tag><c>true</c></tag>
<item>
@@ -752,54 +787,82 @@
code for this module, or the process has references
to old code for this module, or the process contains
funs that references old code for this module.</p>
- </item>
+ </item>
<tag><c>false</c></tag>
<item>
<p>The process identified by <c><anno>Pid</anno></c> does
not execute old code for <c><anno>Module</anno></c>.</p>
- </item>
+ </item>
<tag><c>aborted</c></tag>
<item>
<p>The operation was aborted, as the process needed to
be garbage collected to determine the operation result,
and the operation was requested
- by passing option <c>{allow_gc, false}</c>.</p></item>
+ by passing option <c>{allow_gc, false}</c>.</p>
+ </item>
</taglist>
- <p>See also <seealso marker="kernel:code">code(3)</seealso>.</p>
+ <note>
+ <p>
+ Up until ERTS version 8.*, the check process code operation
+ checks for all types of references to the old code. That is,
+ direct references (e.g. return addresses on the process
+ stack), indirect references (<c>fun</c>s in process
+ context), and references to literals in the code.
+ </p>
+ <p>
+ As of ERTS version 9.0, the check process code operation
+ only checks for direct references to the code. Indirect
+ references via <c>fun</c>s will be ignored. If such
+ <c>fun</c>s exist and are used after a purge of the old
+ code, an exception will be raised upon usage (same as
+ the case when the <c>fun</c> is received by the process
+ after the purge). Literals will be taken care of (copied)
+ at a later stage. This behavior can as of ERTS version
+ 8.1 be enabled when
+ <seealso marker="doc/installation_guide:INSTALL#Advanced-configuration-and-build-of-ErlangOTP_Configuring">building OTP</seealso>,
+ and will automatically be enabled if dirty scheduler
+ support is enabled.
+ </p>
+ </note>
+ <p>See also <seealso marker="kernel:code">
+ <c>code(3)</c></seealso>.</p>
<p>Failures:</p>
<taglist>
<tag><c>badarg</c></tag>
- <item>If <c><anno>Pid</anno></c> is not a node local process identifier.
- </item>
+ <item>If <c><anno>Pid</anno></c> is not a node local process
+ identifier.
+ </item>
<tag><c>badarg</c></tag>
<item>If <c><anno>Module</anno></c> is not an atom.
- </item>
+ </item>
<tag><c>badarg</c></tag>
<item>If <c><anno>OptionList</anno></c> is an invalid list of options.
- </item>
+ </item>
</taglist>
</desc>
</func>
<func>
<name name="convert_time_unit" arity="3"/>
- <fsummary>Converts time unit of a time value.</fsummary>
+ <fsummary>Convert time unit of a time value.</fsummary>
<desc>
- <p>Converts the <c><anno>Time</anno></c> value of time unit
- <c><anno>FromUnit</anno></c> to the corresponding
- <c><anno>ConvertedTime</anno></c> value of time unit
- <c><anno>ToUnit</anno></c>. The result is rounded
- using the floor function.</p>
-
- <warning><p>You may lose accuracy and precision when converting
- between time units. In order to minimize such loss, collect all
- data at <c>native</c> time unit and do the conversion on the end
- result.</p></warning>
+ <p>Converts the <c><anno>Time</anno></c> value of time unit
+ <c><anno>FromUnit</anno></c> to the corresponding
+ <c><anno>ConvertedTime</anno></c> value of time unit
+ <c><anno>ToUnit</anno></c>. The result is rounded
+ using the floor function.</p>
+ <warning>
+ <p>You can lose accuracy and precision when converting
+ between time units. To minimize such loss, collect all
+ data at <c>native</c> time unit and do the conversion on the end
+ result.</p>
+ </warning>
</desc>
</func>
+
<func>
<name name="crc32" arity="1"/>
- <fsummary>Computes crc32 (IEEE 802.3) checksum.</fsummary>
+ <fsummary>Compute crc32 (IEEE 802.3) checksum.</fsummary>
<desc>
<p>Computes and returns the crc32 (IEEE 802.3 style) checksum
for <c><anno>Data</anno></c>.</p>
@@ -808,37 +871,37 @@
<func>
<name name="crc32" arity="2"/>
- <fsummary>Computes crc32 (IEEE 802.3) checksum.</fsummary>
+ <fsummary>Compute crc32 (IEEE 802.3) checksum.</fsummary>
<desc>
<p>Continues computing the crc32 checksum by combining
- the previous checksum, <c><anno>OldCrc</anno></c>, with the checksum of
- <c><anno>Data</anno></c>.</p>
+ the previous checksum, <c><anno>OldCrc</anno></c>, with the checksum
+ of <c><anno>Data</anno></c>.</p>
<p>The following code:</p>
<code>
- X = erlang:crc32(Data1),
- Y = erlang:crc32(X,Data2).</code>
+X = erlang:crc32(Data1),
+Y = erlang:crc32(X,Data2).</code>
<p>assigns the same value to <c>Y</c> as this:</p>
<code>
- Y = erlang:crc32([Data1,Data2]).</code>
+Y = erlang:crc32([Data1,Data2]).</code>
</desc>
</func>
<func>
<name name="crc32_combine" arity="3"/>
- <fsummary>Combines two crc32 (IEEE 802.3) checksums.</fsummary>
+ <fsummary>Combine two crc32 (IEEE 802.3) checksums.</fsummary>
<desc>
<p>Combines two previously computed crc32 checksums.
- This computation requires the size of the data object for
- the second checksum to be known.</p>
+ This computation requires the size of the data object for
+ the second checksum to be known.</p>
<p>The following code:</p>
<code>
- Y = erlang:crc32(Data1),
- Z = erlang:crc32(Y,Data2).</code>
+Y = erlang:crc32(Data1),
+Z = erlang:crc32(Y,Data2).</code>
<p>assigns the same value to <c>Z</c> as this:</p>
<code>
- X = erlang:crc32(Data1),
- Y = erlang:crc32(Data2),
- Z = erlang:crc32_combine(X,Y,iolist_size(Data2)).</code>
+X = erlang:crc32(Data1),
+Y = erlang:crc32(Data2),
+Z = erlang:crc32_combine(X,Y,iolist_size(Data2)).</code>
</desc>
</func>
@@ -848,8 +911,7 @@
<desc>
<p>Returns the current date as <c>{Year, Month, Day}</c>.</p>
<p>The time zone and Daylight Saving Time correction depend on
- the underlying OS.</p>
- <p>Example:</p>
+ the underlying OS. Example:</p>
<pre>
> <input>date().</input>
{1995,2,19}</pre>
@@ -858,28 +920,29 @@
<func>
<name name="decode_packet" arity="3"/>
- <fsummary>Extracts a protocol packet from a binary.</fsummary>
+ <fsummary>Extract a protocol packet from a binary.</fsummary>
<desc>
<p>Decodes the binary <c><anno>Bin</anno></c> according to the packet
- protocol specified by <c><anno>Type</anno></c>. Similar to the packet
- handling done by sockets with option {packet,<anno>Type</anno>}.</p>
+ protocol specified by <c><anno>Type</anno></c>. Similar to the packet
+ handling done by sockets with option
+ <c>{packet,<anno>Type</anno>}.</c></p>
<p>If an entire packet is contained in <c><anno>Bin</anno></c>, it is
- returned together with the remainder of the binary as
- <c>{ok,<anno>Packet</anno>,<anno>Rest</anno>}</c>.</p>
+ returned together with the remainder of the binary as
+ <c>{ok,<anno>Packet</anno>,<anno>Rest</anno>}</c>.</p>
<p>If <c><anno>Bin</anno></c> does not contain the entire packet,
- <c>{more,<anno>Length</anno>}</c> is returned.
- <c><anno>Length</anno></c> is either the
- expected <em>total size</em> of the packet, or <c>undefined</c>
- if the expected packet size is unknown. <c>decode_packet</c>
- can then be called again with more data added.</p>
+ <c>{more,<anno>Length</anno>}</c> is returned.
+ <c><anno>Length</anno></c> is either the
+ expected <em>total size</em> of the packet, or <c>undefined</c>
+ if the expected packet size is unknown. <c>decode_packet</c>
+ can then be called again with more data added.</p>
<p>If the packet does not conform to the protocol format,
- <c>{error,<anno>Reason</anno>}</c> is returned.</p>
- <p>The following <c>Type</c>s are valid:</p>
+ <c>{error,<anno>Reason</anno>}</c> is returned.</p>
+ <p><c>Type</c>s:</p>
<taglist>
<tag><c>raw | 0</c></tag>
<item>
<p>No packet handling is done. The entire binary is
- returned unless it is empty.</p>
+ returned unless it is empty.</p>
</item>
<tag><c>1 | 2 | 4</c></tag>
<item>
@@ -891,10 +954,10 @@
</item>
<tag><c>line</c></tag>
<item>
- <p>A packet is a line terminated by a delimiter byte,
- default is the latin1 newline character. The delimiter
- byte is included in the returned packet unless the line
- was truncated according to option <c>line_length</c>.</p>
+ <p>A packet is a line-terminated by a delimiter byte,
+ default is the latin-1 newline character. The delimiter
+ byte is included in the returned packet unless the line
+ was truncated according to option <c>line_length</c>.</p>
</item>
<tag><c>asn1 | cdr | sunrm | fcgi | tpkt</c></tag>
<item>
@@ -911,50 +974,51 @@
<tag><c>http | httph | http_bin | httph_bin</c></tag>
<item>
<p>The Hypertext Transfer Protocol. The packets
- are returned with the format according to
- <c><anno>HttpPacket</anno></c> described earlier.
- A packet is either a
- request, a response, a header, or an end of header
- mark. Invalid lines are returned as
- <c><anno>HttpError</anno></c>.</p>
+ are returned with the format according to
+ <c><anno>HttpPacket</anno></c> described earlier.
+ A packet is either a
+ request, a response, a header, or an end of header
+ mark. Invalid lines are returned as
+ <c><anno>HttpError</anno></c>.</p>
<p>Recognized request methods and header fields are returned
- as atoms. Others are returned as strings. Strings of
- unrecognized header fields are formatted with only
- capital letters first and after hyphen characters, for
- example, <c>"Sec-Websocket-Key"</c>.</p>
+ as atoms. Others are returned as strings. Strings of
+ unrecognized header fields are formatted with only
+ capital letters first and after hyphen characters, for
+ example, <c>"Sec-Websocket-Key"</c>.</p>
<p>The protocol type <c>http</c> is only to be used for
- the first line when an <c><anno>HttpRequest</anno></c> or an
- <c><anno>HttpResponse</anno></c> is expected.
- The following calls are to use <c>httph</c> to get
- <c><anno>HttpHeader</anno></c>s until
- <c>http_eoh</c> is returned, which marks the end of the
- headers and the beginning of any following message body.</p>
+ the first line when an <c><anno>HttpRequest</anno></c> or an
+ <c><anno>HttpResponse</anno></c> is expected.
+ The following calls are to use <c>httph</c> to get
+ <c><anno>HttpHeader</anno></c>s until
+ <c>http_eoh</c> is returned, which marks the end of the
+ headers and the beginning of any following message body.</p>
<p>The variants <c>http_bin</c> and <c>httph_bin</c> return
- strings (<c>HttpString</c>) as binaries instead of lists.</p>
+ strings (<c>HttpString</c>) as binaries instead of lists.</p>
</item>
</taglist>
- <p>The following options are available:</p>
- <taglist>
- <tag><c>{packet_size, integer() >= 0}</c></tag>
- <item><p>Sets the maximum allowed size of the packet body.
- If the packet header indicates that the length of the
- packet is longer than the maximum allowed length, the
- packet is considered invalid. Default is 0, which means
- no size limit.</p>
- </item>
- <tag><c>{line_length, integer() >= 0}</c></tag>
- <item><p>For packet type <c>line</c>, lines longer than
+ <p>Options:</p>
+ <taglist>
+ <tag><c>{packet_size, integer() >= 0}</c></tag>
+ <item><p>Sets the maximum allowed size of the packet body.
+ If the packet header indicates that the length of the
+ packet is longer than the maximum allowed length, the
+ packet is considered invalid. Defaults to 0, which means
+ no size limit.</p>
+ </item>
+ <tag><c>{line_length, integer() >= 0}</c></tag>
+ <item>
+ <p>For packet type <c>line</c>, lines longer than
the indicated length are truncated.</p>
- <p>Option <c>line_length</c> also applies to <c>http*</c>
- packet types as an alias for option <c>packet_size</c>
- if <c>packet_size</c> itself is not set. This use is
- only intended for backward compatibility.</p>
- </item>
- <tag><c>{line_delimiter, 0 =&lt; byte() =&lt; 255}</c></tag>
- <item><p>For packet type <c>line</c>, sets the delimiting byte.
- Default is the latin1 character <c>$\n</c>.</p>
- </item>
- </taglist>
+ <p>Option <c>line_length</c> also applies to <c>http*</c>
+ packet types as an alias for option <c>packet_size</c>
+ if <c>packet_size</c> itself is not set. This use is
+ only intended for backward compatibility.</p>
+ </item>
+ <tag><c>{line_delimiter, 0 =&lt; byte() =&lt; 255}</c></tag>
+ <item><p>For packet type <c>line</c>, sets the delimiting byte.
+ Default is the latin-1 character <c>$\n</c>.</p>
+ </item>
+ </taglist>
<p>Examples:</p>
<pre>
> <input>erlang:decode_packet(1,&lt;&lt;3,"abcd"&gt;&gt;,[]).</input>
@@ -966,7 +1030,7 @@
<func>
<name name="delete_element" arity="2"/>
- <fsummary>Deletes element at index in a tuple.</fsummary>
+ <fsummary>Delete element at index in a tuple.</fsummary>
<type_desc variable="Index">1..tuple_size(<anno>Tuple1</anno>)</type_desc>
<desc>
<p>Returns a new tuple with element at <c><anno>Index</anno></c>
@@ -979,16 +1043,16 @@
<func>
<name name="delete_module" arity="1"/>
- <fsummary>Makes the current code for a module old.</fsummary>
+ <fsummary>Make the current code for a module old.</fsummary>
<desc>
- <p>Makes the current code for <c><anno>Module</anno></c> become old code,
- and deletes all references for this module from the export table.
+ <p>Makes the current code for <c><anno>Module</anno></c> become old
+ code and deletes all references for this module from the export table.
Returns <c>undefined</c> if the module does not exist,
otherwise <c>true</c>.</p>
<warning>
<p>This BIF is intended for the code server (see
- <seealso marker="kernel:code">code(3)</seealso>) and is not
- to be used elsewhere.</p>
+ <seealso marker="kernel:code"><c>code(3)</c></seealso>)
+ and is not to be used elsewhere.</p>
</warning>
<p>Failure: <c>badarg</c> if there already is an old version of
<c>Module</c>.</p>
@@ -997,54 +1061,56 @@
<func>
<name name="demonitor" arity="1"/>
- <fsummary>Stops monitoring.</fsummary>
+ <fsummary>Stop monitoring.</fsummary>
<desc>
<p>If <c><anno>MonitorRef</anno></c> is a reference that the
calling process obtained by calling
- <seealso marker="#monitor/2">monitor/2</seealso>,
+ <seealso marker="#monitor/2"><c>monitor/2</c></seealso>,
this monitoring is turned off. If the monitoring is already
turned off, nothing happens.</p>
<p>Once <c>demonitor(<anno>MonitorRef</anno>)</c> has returned, it is
guaranteed that no <c>{'DOWN',
<anno>MonitorRef</anno>, _, _, _}</c> message,
because of the monitor, will be placed in the caller message queue
- in the future. A <c>{'DOWN',
+ in the future. However, a <c>{'DOWN',
<anno>MonitorRef</anno>, _, _, _}</c> message
can have been placed in the caller message queue before
- the call, though. It is therefore usually advisable
+ the call. It is therefore usually advisable
to remove such a <c>'DOWN'</c> message from the message queue
after monitoring has been stopped.
- <seealso marker="#demonitor/2"><c>demonitor(<anno>MonitorRef</anno>, [flush])</c></seealso>
- can be used instead of
- <c>demonitor(<anno>MonitorRef</anno>)</c> if this cleanup is wanted.</p>
+ <seealso marker="#demonitor/2">
+ <c>demonitor(<anno>MonitorRef</anno>, [flush])</c></seealso>
+ can be used instead of <c>demonitor(<anno>MonitorRef</anno>)</c>
+ if this cleanup is wanted.</p>
<note>
- <p>Prior to OTP release R11B (ERTS version 5.5) <c>demonitor/1</c>
- behaved completely asynchronously, i.e., the monitor was active
+ <p>Before Erlang/OTP R11B (ERTS 5.5) <c>demonitor/1</c>
+ behaved completely asynchronously, that is, the monitor was active
until the "demonitor signal" reached the monitored entity. This
had one undesirable effect. You could never know when
you were guaranteed <em>not</em> to receive a <c>DOWN</c> message
- due to the monitor.</p>
- <p>Current behavior can be viewed as two combined operations:
+ because of the monitor.</p>
+ <p>The current behavior can be viewed as two combined operations:
asynchronously send a "demonitor signal" to the monitored entity
- and ignore any future results of the monitor. </p>
+ and ignore any future results of the monitor.</p>
</note>
<p>Failure: It is an error if <c><anno>MonitorRef</anno></c> refers to a
monitoring started by another process. Not all such cases are
cheap to check. If checking is cheap, the call fails with
- <c>badarg</c> for example, if <c><anno>MonitorRef</anno></c> is a
+ <c>badarg</c>, for example if <c><anno>MonitorRef</anno></c> is a
remote reference.</p>
</desc>
</func>
<func>
<name name="demonitor" arity="2"/>
- <fsummary>Stops monitoring.</fsummary>
+ <fsummary>Stop monitoring.</fsummary>
<desc>
<p>The returned value is <c>true</c> unless <c>info</c> is part
of <c><anno>OptionList</anno></c>.</p>
<p><c>demonitor(<anno>MonitorRef</anno>, [])</c> is equivalent to
- <seealso marker="#demonitor/1"><c>demonitor(<anno>MonitorRef</anno>)</c></seealso>.</p>
- <p>The available <c><anno>Option</anno></c>s are as follows:</p>
+ <seealso marker="#demonitor/1">
+ <c>demonitor(<anno>MonitorRef</anno>)</c></seealso>.</p>
+ <p><c><anno>Option</anno></c>s:</p>
<taglist>
<tag><c>flush</c></tag>
<item>
@@ -1055,28 +1121,28 @@
<p>Calling <c>demonitor(<anno>MonitorRef</anno>, [flush])</c>
is equivalent to the following, but more efficient:</p>
<code type="none">
- demonitor(MonitorRef),
- receive
- {_, MonitorRef, _, _, _} ->
- true
- after 0 ->
- true
- end</code>
+demonitor(MonitorRef),
+receive
+ {_, MonitorRef, _, _, _} ->
+ true
+after 0 ->
+ true
+end</code>
</item>
<tag><c>info</c></tag>
<item>
<p>The returned value is one of the following:</p>
<taglist>
<tag><c>true</c></tag>
- <item>The monitor was found and removed. In this case,
+ <item><p>The monitor was found and removed. In this case,
no <c>'DOWN'</c> message corresponding to this
- monitor has been delivered and will not be delivered.
+ monitor has been delivered and will not be delivered.</p>
</item>
<tag><c>false</c></tag>
- <item>The monitor was not found and could not be removed.
+ <item><p>The monitor was not found and could not be removed.
This probably because someone already has placed a
<c>'DOWN'</c> message corresponding to this monitor
- in the caller message queue.
+ in the caller message queue.</p>
</item>
</taglist>
<p>If option <c>info</c> is combined with option <c>flush</c>,
@@ -1091,21 +1157,21 @@
<taglist>
<tag><c>badarg</c></tag>
<item>If <c><anno>OptionList</anno></c> is not a list.
- </item>
+ </item>
<tag><c>badarg</c></tag>
<item>If <c><anno>Option</anno></c> is an invalid option.
- </item>
+ </item>
<tag><c>badarg</c></tag>
<item>The same failure as for
- <seealso marker="#demonitor/1">demonitor/1</seealso>.
- </item>
+ <seealso marker="#demonitor/1"><c>demonitor/1</c></seealso>.
+ </item>
</taglist>
</desc>
</func>
<func>
<name name="disconnect_node" arity="1"/>
- <fsummary>Forces the disconnection of a node.</fsummary>
+ <fsummary>Force the disconnection of a node.</fsummary>
<desc>
<p>Forces the disconnection of a node. This appears to
the node <c><anno>Node</anno></c> as if the local node has crashed.
@@ -1119,7 +1185,7 @@
<func>
<name name="display" arity="1"/>
- <fsummary>Prints a term on standard output.</fsummary>
+ <fsummary>Print a term on standard output.</fsummary>
<desc>
<p>Prints a text representation of <c><anno>Term</anno></c> on the
standard output.</p>
@@ -1131,7 +1197,7 @@
<func>
<name name="element" arity="2"/>
- <fsummary>Returns the Nth element of a tuple.</fsummary>
+ <fsummary>Return the Nth element of a tuple.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
<p>Returns the <c><anno>N</anno></c>th element (numbering from 1) of
@@ -1145,7 +1211,7 @@ b</pre>
<func>
<name name="erase" arity="0"/>
- <fsummary>Returns and deletes the process dictionary.</fsummary>
+ <fsummary>Return and delete the process dictionary.</fsummary>
<desc>
<p>Returns the process dictionary and deletes it, for
example:</p>
@@ -1159,13 +1225,13 @@ b</pre>
<func>
<name name="erase" arity="1"/>
- <fsummary>Returns and deletes a value from the process dictionary.</fsummary>
+ <fsummary>Return and delete a value from the process dictionary.
+ </fsummary>
<desc>
<p>Returns the value <c><anno>Val</anno></c> associated with
<c><anno>Key</anno></c> and deletes it from the process dictionary.
Returns <c>undefined</c> if no value is associated with
- <c><anno>Key</anno></c>.</p>
- <p>Example:</p>
+ <c><anno>Key</anno></c>. Example:</p>
<pre>
> <input>put(key1, {merry, lambs, are, playing}),</input>
<input>X = erase(key1),</input>
@@ -1176,16 +1242,15 @@ b</pre>
<func>
<name name="error" arity="1"/>
- <fsummary>Stops execution with a given reason.</fsummary>
+ <fsummary>Stop execution with a specified reason.</fsummary>
<desc>
<p>Stops the execution of the calling process with the reason
<c><anno>Reason</anno></c>, where <c><anno>Reason</anno></c>
is any term. The exit reason is
<c>{<anno>Reason</anno>, Where}</c>, where <c>Where</c>
is a list of the functions most recently called (the current
- function first). Since evaluating this function causes
- the process to terminate, it has no return value.</p>
- <p>Example:</p>
+ function first). As evaluating this function causes
+ the process to terminate, it has no return value. Example:</p>
<pre>
> <input>catch error(foobar).</input>
{'EXIT',{foobar,[{erl_eval,do_apply,5},
@@ -1198,7 +1263,7 @@ b</pre>
<func>
<name name="error" arity="2"/>
- <fsummary>Stops execution with a given reason.</fsummary>
+ <fsummary>Stop execution with a specified reason.</fsummary>
<desc>
<p>Stops the execution of the calling process with the reason
<c><anno>Reason</anno></c>, where <c><anno>Reason</anno></c>
@@ -1208,21 +1273,20 @@ b</pre>
function first). <c><anno>Args</anno></c> is expected to be the
list of arguments for the current function; in Beam it is used
to provide the arguments for the current function in
- the term <c>Where</c>. Since evaluating this function causes
+ the term <c>Where</c>. As evaluating this function causes
the process to terminate, it has no return value.</p>
</desc>
</func>
<func>
<name name="exit" arity="1"/>
- <fsummary>Stops execution with a given reason.</fsummary>
+ <fsummary>Stop execution with a specified reason.</fsummary>
<desc>
<p>Stops the execution of the calling process with exit reason
<c><anno>Reason</anno></c>, where <c><anno>Reason</anno></c>
- is any term. Since
+ is any term. As
evaluating this function causes the process to terminate, it
- has no return value.</p>
- <p>Example:</p>
+ has no return value. Example:</p>
<pre>
> <input>exit(foobar).</input>
** exception exit: foobar
@@ -1233,43 +1297,44 @@ b</pre>
<func>
<name name="exit" arity="2"/>
- <fsummary>Sends an exit signal to a process or a port.</fsummary>
+ <fsummary>Send an exit signal to a process or a port.</fsummary>
<desc>
<p>Sends an exit signal with exit reason <c><anno>Reason</anno></c> to
the process or port identified by <c><anno>Pid</anno></c>.</p>
<p>The following behavior applies if <c><anno>Reason</anno></c>
is any term, except <c>normal</c> or <c>kill</c>:</p>
- <list type="bulleted">
- <item>If <c><anno>Pid</anno></c> is not trapping exits,
- <c><anno>Pid</anno></c>
- itself exits with exit reason <c><anno>Reason</anno></c>.
- </item>
- <item>If <c><anno>Pid</anno></c> is trapping exits, the exit
- signal is transformed into a message
- <c>{'EXIT', From, <anno>Reason</anno>}</c>
- and delivered to the message queue of <c><anno>Pid</anno></c>.
- </item>
- <item><c>From</c> is the process identifier of the process
- that sent the exit signal. See also
- <seealso marker="#process_flag/2">process_flag/2</seealso>.
- </item>
- </list>
- <p>If <c><anno>Reason</anno></c> is the atom <c>normal</c>,
+ <list type="bulleted">
+ <item><p>If <c><anno>Pid</anno></c> is not trapping exits,
<c><anno>Pid</anno></c>
- does not exit. If it is trapping exits, the exit signal is
- transformed into a message <c>{'EXIT', From, normal}</c>
- and delivered to its message queue.</p>
- <p>If <c><anno>Reason</anno></c> is the atom <c>kill</c>,
- that is, if <c>exit(<anno>Pid</anno>, kill)</c> is called,
- an untrappable exit signal is sent to <c><anno>Pid</anno></c>,
- which unconditionally exits with exit reason <c>killed</c>.
- </p>
+ itself exits with exit reason <c><anno>Reason</anno></c>.</p>
+ </item>
+ <item><p>If <c><anno>Pid</anno></c> is trapping exits, the exit
+ signal is transformed into a message
+ <c>{'EXIT', From, <anno>Reason</anno>}</c>
+ and delivered to the message queue of <c><anno>Pid</anno></c>.</p>
+ </item>
+ <item><p><c>From</c> is the process identifier of the process
+ that sent the exit signal. See also
+ <seealso marker="#process_flag/2">
+ <c>process_flag/2</c></seealso>.</p>
+ </item>
+ </list>
+ <p>If <c><anno>Reason</anno></c> is the atom <c>normal</c>,
+ <c><anno>Pid</anno></c>
+ does not exit. If it is trapping exits, the exit signal is
+ transformed into a message <c>{'EXIT', From, normal}</c>
+ and delivered to its message queue.</p>
+ <p>If <c><anno>Reason</anno></c> is the atom <c>kill</c>,
+ that is, if <c>exit(<anno>Pid</anno>, kill)</c> is called,
+ an untrappable exit signal is sent to <c><anno>Pid</anno></c>,
+ which unconditionally exits with exit reason <c>killed</c>.</p>
</desc>
</func>
<func>
<name name="external_size" arity="1"/>
- <fsummary>Calculates the maximum size for a term encoded in the Erlang external term format.</fsummary>
+ <fsummary>Calculate the maximum size for a term encoded in the Erlang
+ external term format.</fsummary>
<desc>
<p>Calculates, without doing the encoding, the maximum byte size for
a term encoded in the Erlang external term format. The following
@@ -1280,13 +1345,15 @@ b</pre>
> <input>true = Size1 =&lt; Size2.</input>
true</pre>
<p>This is equivalent to a call to:</p>
-<code>erlang:external_size(<anno>Term</anno>, [])</code>
+<code>
+erlang:external_size(<anno>Term</anno>, [])</code>
</desc>
</func>
<func>
<name name="external_size" arity="2"/>
- <fsummary>Calculates the maximum size for a term encoded in the Erlang external term format.</fsummary>
+ <fsummary>Calculate the maximum size for a term encoded in the Erlang
+ external term format.</fsummary>
<desc>
<p>Calculates, without doing the encoding, the maximum byte size for
a term encoded in the Erlang external term format. The following
@@ -1298,13 +1365,14 @@ true</pre>
true</pre>
<p>Option <c>{minor_version, <anno>Version</anno>}</c> specifies how
floats are encoded. For a detailed description, see
- <seealso marker="#term_to_binary/2">term_to_binary/2</seealso>.</p>
+ <seealso marker="#term_to_binary/2">
+ <c>term_to_binary/2</c></seealso>.</p>
</desc>
</func>
<func>
<name name="float" arity="1"/>
- <fsummary>Converts a number to a float.</fsummary>
+ <fsummary>Convert a number to a float.</fsummary>
<desc>
<p>Returns a float by converting <c><anno>Number</anno></c> to a float,
for example:</p>
@@ -1315,7 +1383,8 @@ true</pre>
<note>
<p>If used on the top level in a guard, it tests whether the
argument is a floating point number; for clarity, use
- <seealso marker="#is_float/1">is_float/1</seealso> instead.</p>
+ <seealso marker="#is_float/1"><c>is_float/1</c></seealso>
+ instead.</p>
<p>When <c>float/1</c> is used in an expression in a guard,
such as '<c>float(A) == 4.0</c>', it converts a number as
described earlier.</p>
@@ -1334,13 +1403,14 @@ true</pre>
<func>
<name name="float_to_binary" arity="2"/>
- <fsummary>Text representation of a float formatted using given options.</fsummary>
+ <fsummary>Text representation of a float formatted using specified
+ options.</fsummary>
<desc>
<p>Returns a binary corresponding to the text
representation of <c><anno>Float</anno></c> using fixed decimal
point formatting. <c><anno>Options</anno></c> behaves in the same
- way as <seealso marker="#float_to_list/2">float_to_list/2</seealso>.</p>
- <p>Examples:</p>
+ way as <seealso marker="#float_to_list/2">
+ <c>float_to_list/2</c></seealso>. Examples:</p>
<pre>
> <input>float_to_binary(7.12, [{decimals, 4}]).</input>
&lt;&lt;"7.1200">>
@@ -1360,27 +1430,29 @@ true</pre>
<func>
<name name="float_to_list" arity="2"/>
- <fsummary>Text representation of a float formatted using given options.</fsummary>
+ <fsummary>Text representation of a float formatted using specified
+ options.</fsummary>
<desc>
<p>Returns a string corresponding to the text representation
- of <c>Float</c> using fixed decimal point formatting. The
- options are as follows:</p>
+ of <c>Float</c> using fixed decimal point formatting.</p>
+ <p>Available options:</p>
<list type="bulleted">
- <item>If option <c>decimals</c> is specified, the returned value
+ <item><p>If option <c>decimals</c> is specified, the returned value
contains at most <c>Decimals</c> number of digits past the
- decimal point. If the number does not fit in the internal
- static buffer of 256 bytes, the function throws <c>badarg</c>.
+ decimal point. If the number does not fit in the internal
+ static buffer of 256 bytes, the function throws <c>badarg</c>.</p>
</item>
- <item>If option <c>compact</c> is provided, the trailing zeros
+ <item><p>If option <c>compact</c> is specified, the trailing zeros
at the end of the list are truncated. This option is only
- meaningful together with option <c>decimals</c>.
+ meaningful together with option <c>decimals</c>.</p>
</item>
- <item>If option <c>scientific</c> is provided, the float is
+ <item><p>If option <c>scientific</c> is specified, the float is
formatted using scientific notation with <c>Decimals</c>
- digits of precision.
+ digits of precision.</p>
</item>
- <item>If <c>Options</c> is <c>[]</c>, the function behaves as
- <seealso marker="#float_to_list/1">float_to_list/1</seealso>.
+ <item><p>If <c>Options</c> is <c>[]</c>, the function behaves as
+ <seealso marker="#float_to_list/1">
+ <c>float_to_list/1</c></seealso>.</p>
</item>
</list>
<p>Examples:</p>
@@ -1407,16 +1479,16 @@ true</pre>
</warning>
<p>Two types of funs have slightly different semantics:</p>
<list type="bulleted">
- <item>A fun created by <c>fun M:F/A</c> is called an
+ <item><p>A fun created by <c>fun M:F/A</c> is called an
<em>external</em> fun. Calling it will always call the
function <c>F</c> with arity <c>A</c> in the latest code for
module <c>M</c>. Notice that module <c>M</c> does not even
- need to be loaded when the fun <c>fun M:F/A</c> is created.
+ need to be loaded when the fun <c>fun M:F/A</c> is created.</p>
</item>
- <item>All other funs are called <em>local</em>. When a local fun
+ <item><p>All other funs are called <em>local</em>. When a local fun
is called, the same version of the code that created the fun
is called (even if a newer version of the module has been
- loaded).
+ loaded).</p>
</item>
</list>
<p>The following elements are always present in the list
@@ -1480,14 +1552,14 @@ true</pre>
<tag><c>{new_uniq, Uniq}</c></tag>
<item>
<p><c>Uniq</c> (a binary) is a unique value for this fun. It
- is calculated from the compiled code for the entire module.</p>
+ is calculated from the compiled code for the entire module.</p>
</item>
<tag><c>{uniq, Uniq}</c></tag>
<item>
<p><c>Uniq</c> (an integer) is a unique value for this fun.
- As from OTP R15, this integer is calculated from the
- compiled code for the entire module. Before OTP R15, this
- integer was based on only the body of the fun.</p>
+ As from Erlang/OTP R15, this integer is calculated from the
+ compiled code for the entire module. Before Erlang/OTP R15, this
+ integer was based on only the body of the fun.</p>
</item>
</taglist>
</desc>
@@ -1509,7 +1581,7 @@ true</pre>
<c>uniq</c>, and <c>pid</c>. For an external fun, the value
of any of these items is always the atom <c>undefined</c>.</p>
<p>See
- <seealso marker="#fun_info/1">erlang:fun_info/1</seealso>.</p>
+ <seealso marker="#fun_info/1"><c>erlang:fun_info/1</c></seealso>.</p>
</desc>
</func>
@@ -1524,20 +1596,24 @@ true</pre>
<func>
<name name="function_exported" arity="3"/>
- <fsummary>Checks if a function is exported and loaded.</fsummary>
+ <fsummary>Check if a function is exported and loaded.</fsummary>
<desc>
- <p>Returns <c>true</c> if the module <c><anno>Module</anno></c> is loaded
- and contains an exported function <c><anno>Function</anno>/<anno>Arity</anno></c>,
- or if there is a BIF (a built-in function implemented in C)
- with the given name, otherwise returns <c>false</c>.</p>
- <note><p>This function used to return false for built-in
- functions before the 18.0 release.</p></note>
+ <p>Returns <c>true</c> if the module <c><anno>Module</anno></c> is
+ loaded and contains an exported function
+ <c><anno>Function</anno>/<anno>Arity</anno></c>,
+ or if there is a BIF (a built-in function implemented in C)
+ with the specified name, otherwise returns <c>false</c>.</p>
+ <note>
+ <p>This function used to return <c>false</c> for BIFs
+ before Erlang/OTP 18.0.</p>
+ </note>
</desc>
</func>
<func>
<name name="garbage_collect" arity="0"/>
- <fsummary>Forces an immediate garbage collection of the calling process.</fsummary>
+ <fsummary>Force an immediate garbage collection of the calling process.
+ </fsummary>
<desc>
<p>Forces an immediate garbage collection of the
executing process. The function is not to be used unless
@@ -1552,73 +1628,76 @@ true</pre>
<func>
<name name="garbage_collect" arity="1"/>
- <fsummary>Garbage collects a process.</fsummary>
+ <fsummary>Garbage collect a process.</fsummary>
<desc>
<p>The same as
- <seealso marker="#garbage_collect/2"><c>garbage_collect(<anno>Pid</anno>, [])</c></seealso>.</p>
+ <seealso marker="#garbage_collect/2">
+ <c>garbage_collect(<anno>Pid</anno>, [])</c></seealso>.</p>
</desc>
</func>
<func>
<name name="garbage_collect" arity="2"/>
- <fsummary>Garbage collects a process.</fsummary>
+ <fsummary>Garbage collect a process.</fsummary>
<desc>
<p>Garbage collects the node local process identified by
- <c><anno>Pid</anno></c>.</p>
- <p>The available <c><anno>Option</anno></c>s are as follows:</p>
+ <c><anno>Pid</anno></c>.</p>
+ <p><c><anno>Option</anno></c>:</p>
<taglist>
<tag><c>{async, RequestId}</c></tag>
<item>The function <c>garbage_collect/2</c> returns
- the value <c>async</c> immediately after the request
- has been sent. When the request has been processed, the
- process that called this function is passed a message on
+ the value <c>async</c> immediately after the request
+ has been sent. When the request has been processed, the
+ process that called this function is passed a message on
the form <c>{garbage_collect,
<anno>RequestId</anno>, <anno>GCResult</anno>}</c>.
</item>
</taglist>
- <p>If <c><anno>Pid</anno></c> equals <c>self()</c>, and
- no <c>async</c> option has been passed, the garbage
- collection is performed at once, that is, the same as calling
- <seealso marker="#garbage_collect/0">garbage_collect/0</seealso>.
- Otherwise a request for garbage collection
- is sent to the process identified by <c><anno>Pid</anno></c>,
- and will be handled when appropriate. If no <c>async</c>
- option has been passed, the caller blocks until
- <c><anno>GCResult</anno></c> is available and can be returned.</p>
- <p><c><anno>GCResult</anno></c> informs about the result of
- the garbage collection request as follows:</p>
+ <p>If <c><anno>Pid</anno></c> equals <c>self()</c>, and
+ no <c>async</c> option has been passed, the garbage
+ collection is performed at once, that is, the same as calling
+ <seealso marker="#garbage_collect/0">
+ <c>garbage_collect/0</c></seealso>.
+ Otherwise a request for garbage collection
+ is sent to the process identified by <c><anno>Pid</anno></c>,
+ and will be handled when appropriate. If no <c>async</c>
+ option has been passed, the caller blocks until
+ <c><anno>GCResult</anno></c> is available and can be returned.</p>
+ <p><c><anno>GCResult</anno></c> informs about the result of
+ the garbage collection request as follows:</p>
<taglist>
<tag><c>true</c></tag>
<item>
- The process identified by <c><anno>Pid</anno></c> has
- been garbage collected.
- </item>
+ The process identified by <c><anno>Pid</anno></c> has
+ been garbage collected.
+ </item>
<tag><c>false</c></tag>
<item>
- No garbage collection was performed, as
- the process identified by <c><anno>Pid</anno></c>
- terminated before the request could be satisfied.
- </item>
+ No garbage collection was performed, as
+ the process identified by <c><anno>Pid</anno></c>
+ terminated before the request could be satisfied.
+ </item>
</taglist>
<p>Notice that the same caveats apply as for
- <seealso marker="#garbage_collect/0">garbage_collect/0</seealso>.</p>
+ <seealso marker="#garbage_collect/0">
+ <c>garbage_collect/0</c></seealso>.</p>
<p>Failures:</p>
<taglist>
<tag><c>badarg</c></tag>
<item>
- If <c><anno>Pid</anno></c> is not a node local process identifier.
- </item>
+ If <c><anno>Pid</anno></c> is not a node local process identifier.
+ </item>
<tag><c>badarg</c></tag>
<item>
- If <c><anno>OptionList</anno></c> is an invalid list of options.
- </item>
+ If <c><anno>OptionList</anno></c> is an invalid list of options.
+ </item>
</taglist>
</desc>
</func>
<func>
<name name="get" arity="0"/>
- <fsummary>Returns the process dictionary.</fsummary>
+ <fsummary>Return the process dictionary.</fsummary>
<desc>
<p>Returns the process dictionary as a list of
<c>{<anno>Key</anno>, <anno>Val</anno>}</c> tuples, for example:</p>
@@ -1633,12 +1712,11 @@ true</pre>
<func>
<name name="get" arity="1"/>
- <fsummary>Returns a value from the process dictionary.</fsummary>
+ <fsummary>Return a value from the process dictionary.</fsummary>
<desc>
- <p>Returns the value <c><anno>Val</anno></c> associated with <c><anno>Key</anno></c> in
- the process dictionary, or <c>undefined</c> if <c><anno>Key</anno></c>
- does not exist.</p>
- <p>Example:</p>
+ <p>Returns the value <c><anno>Val</anno></c> associated with
+ <c><anno>Key</anno></c> in the process dictionary, or <c>undefined</c>
+ if <c><anno>Key</anno></c> does not exist. Example:</p>
<pre>
> <input>put(key1, merry),</input>
<input>put(key2, lambs),</input>
@@ -1650,7 +1728,7 @@ true</pre>
<func>
<name name="get_cookie" arity="0"/>
- <fsummary>Gets the magic cookie of the local node.</fsummary>
+ <fsummary>Get the magic cookie of the local node.</fsummary>
<desc>
<p>Returns the magic cookie of the local node if the node is
alive, otherwise the atom <c>nocookie</c>.</p>
@@ -1659,9 +1737,11 @@ true</pre>
<func>
<name name="get_keys" arity="0"/>
- <fsummary>Return a list of all keys from the process dictionary</fsummary>
+ <fsummary>Return a list of all keys from the process dictionary.
+ </fsummary>
<desc>
- <p>Returns a list of keys all keys present in the process dictionary.</p>
+ <p>Returns a list of all keys present in the process dictionary,
+ for example:</p>
<pre>
> <input>put(dog, {animal,1}),</input>
<input>put(cow, {animal,2}),</input>
@@ -1670,9 +1750,10 @@ true</pre>
[dog,cow,lamb]</pre>
</desc>
</func>
+
<func>
<name name="get_keys" arity="1"/>
- <fsummary>Returns a list of keys from the process dictionary.</fsummary>
+ <fsummary>Return a list of keys from the process dictionary.</fsummary>
<desc>
<p>Returns a list of keys that are associated with the value
<c><anno>Val</anno></c> in the process dictionary, for example:</p>
@@ -1690,48 +1771,49 @@ true</pre>
<func>
<name name="get_stacktrace" arity="0"/>
- <fsummary>Gets the call stack back-trace of the last exception.</fsummary>
+ <fsummary>Get the call stack back-trace of the last exception.</fsummary>
<type name="stack_item"/>
<desc>
<p>Gets the call stack back-trace (<em>stacktrace</em>) of the
last exception in the calling process as a list of
- <c>{<anno>Module</anno>,<anno>Function</anno>,<anno>Arity</anno>,<anno>Location</anno>}</c> tuples.
- Field <c><anno>Arity</anno></c> in the first tuple can be the
+ <c>{<anno>Module</anno>,<anno>Function</anno>,<anno>Arity</anno>,<anno>Location</anno>}</c>
+ tuples. Field <c><anno>Arity</anno></c> in the first tuple can be the
argument list of that function call instead of an arity integer,
depending on the exception.</p>
<p>If there has not been any exceptions in a process, the
stacktrace is <c>[]</c>. After a code change for the process,
the stacktrace can also be reset to <c>[]</c>.</p>
- <p>The stacktrace is the same data as the <c>catch</c> operator
+ <p>The stacktrace is the same data as operator <c>catch</c>
returns, for example:</p>
- <p><c>{'EXIT',{badarg,Stacktrace}} = catch abs(x)</c></p>
- <p><c><anno>Location</anno></c> is a (possibly empty) list
+ <pre>
+{'EXIT',{badarg,Stacktrace}} = catch abs(x)</pre>
+ <p><c><anno>Location</anno></c> is a (possibly empty) list
of two-tuples that
- can indicate the location in the source code of the function.
- The first element is an atom describing the type of
- information in the second element. The following
- items can occur:</p>
- <taglist>
- <tag><c>file</c></tag>
- <item>The second element of the tuple is a string (list of
- characters) representing the file name of the source file
- of the function.
- </item>
- <tag><c>line</c></tag>
- <item>The second element of the tuple is the line number
- (an integer greater than zero) in the source file
- where the exception occurred or the function was called.
- </item>
- </taglist>
+ can indicate the location in the source code of the function.
+ The first element is an atom describing the type of
+ information in the second element. The following
+ items can occur:</p>
+ <taglist>
+ <tag><c>file</c></tag>
+ <item>The second element of the tuple is a string (list of
+ characters) representing the filename of the source file
+ of the function.
+ </item>
+ <tag><c>line</c></tag>
+ <item>The second element of the tuple is the line number
+ (an integer &gt; 0) in the source file
+ where the exception occurred or the function was called.
+ </item>
+ </taglist>
<p>See also
- <seealso marker="#error/1">erlang:error/1</seealso> and
- <seealso marker="#error/2">erlang:error/2</seealso>.</p>
+ <seealso marker="#error/1"><c>error/1</c></seealso> and
+ <seealso marker="#error/2"><c>error/2</c></seealso>.</p>
</desc>
</func>
<func>
<name name="group_leader" arity="0"/>
- <fsummary>Gets the group leader for the calling process.</fsummary>
+ <fsummary>Get the group leader for the calling process.</fsummary>
<desc>
<p>Returns the process identifier of the group leader for the
process evaluating the function.</p>
@@ -1739,14 +1821,14 @@ true</pre>
groups have a <em>group leader</em>. All I/O from the group
is channeled to the group leader. When a new process is
spawned, it gets the same group leader as the spawning
- process. Initially, at system start-up, <c>init</c> is both
+ process. Initially, at system startup, <c>init</c> is both
its own group leader and the group leader of all processes.</p>
</desc>
</func>
<func>
<name name="group_leader" arity="2"/>
- <fsummary>Sets the group leader for a process.</fsummary>
+ <fsummary>Set the group leader for a process.</fsummary>
<desc>
<p>Sets the group leader of <c><anno>Pid</anno></c>
to <c><anno>GroupLeader</anno></c>.
@@ -1754,70 +1836,72 @@ true</pre>
certain shell is to have another group leader than
<c>init</c>.</p>
<p>See also
- <seealso marker="#group_leader/0">group_leader/0</seealso>.</p>
+ <seealso marker="#group_leader/0"><c>group_leader/0</c></seealso>.</p>
</desc>
</func>
<func>
<name name="halt" arity="0"/>
- <fsummary>Halts the Erlang runtime system and indicates normal exit to the calling environment.</fsummary>
+ <fsummary>Halt the Erlang runtime system and indicate normal exit to
+ the calling environment.</fsummary>
<desc>
- <p>The same as
- <seealso marker="#halt/2"><c>halt(0, [])</c></seealso>.</p>
- <p>Example:</p>
+ <p>The same as
+ <seealso marker="#halt/2"><c>halt(0, [])</c></seealso>. Example:</p>
<pre>
> <input>halt().</input>
-os_prompt% </pre>
+os_prompt%</pre>
</desc>
</func>
<func>
<name name="halt" arity="1"/>
- <fsummary>Halts the Erlang runtime system.</fsummary>
+ <fsummary>Halt the Erlang runtime system.</fsummary>
<desc>
- <p>The same as
- <seealso marker="#halt/2"><c>halt(<anno>Status</anno>, [])</c></seealso>.</p>
- <p>Example:</p>
+ <p>The same as <seealso marker="#halt/2">
+ <c>halt(<anno>Status</anno>, [])</c></seealso>. Example:</p>
<pre>
> <input>halt(17).</input>
os_prompt% <input>echo $?</input>
17
-os_prompt% </pre>
+os_prompt%</pre>
</desc>
</func>
<func>
<name name="halt" arity="2"/>
- <fsummary>Halts the Erlang runtime system.</fsummary>
+ <fsummary>Halt the Erlang runtime system.</fsummary>
<desc>
<p><c><anno>Status</anno></c> must be a non-negative integer, a string,
- or the atom <c>abort</c>.
- Halts the Erlang runtime system. Has no return value.
- Depending on <c><anno>Status</anno></c>, the following occurs:</p>
- <taglist>
- <tag>integer()</tag>
- <item>The runtime system exits with integer value
- <c><anno>Status</anno></c>
- as status code to the calling environment (OS).
- </item>
- <tag>string()</tag>
- <item>An Erlang crash dump is produced with <c><anno>Status</anno></c>
- as slogan. Then the runtime system exits with status code <c>1</c>.
- </item>
- <tag><c>abort</c></tag>
- <item>
- The runtime system aborts producing a core dump, if that is
- enabled in the OS.
- </item>
- </taglist>
- <note><p>On many platforms, the OS supports only status
- codes 0-255. A too large status code will be truncated by clearing
- the high bits.</p></note>
- <p>For integer <c><anno>Status</anno></c>, the Erlang runtime system
+ or the atom <c>abort</c>.
+ Halts the Erlang runtime system. Has no return value.
+ Depending on <c><anno>Status</anno></c>, the following occurs:</p>
+ <taglist>
+ <tag>integer()</tag>
+ <item>The runtime system exits with integer value
+ <c><anno>Status</anno></c>
+ as status code to the calling environment (OS).
+ </item>
+ <tag>string()</tag>
+ <item>An Erlang crash dump is produced with <c><anno>Status</anno></c>
+ as slogan. Then the runtime system exits with status code <c>1</c>.
+ Note that only code points in the range 0-255 may be used
+ and the string will be truncated if longer than 200 characters.
+ </item>
+ <tag><c>abort</c></tag>
+ <item>The runtime system aborts producing a core dump, if that is
+ enabled in the OS.
+ </item>
+ </taglist>
+ <note>
+ <p>On many platforms, the OS supports only status
+ codes 0-255. A too large status code is truncated by clearing
+ the high bits.</p>
+ </note>
+ <p>For integer <c><anno>Status</anno></c>, the Erlang runtime system
closes all ports and allows async threads to finish their
operations before exiting. To exit without such flushing, use
- <c><anno>Option</anno></c> as <c>{flush,false}</c>.</p>
- <p>For statuses <c>string()</c> and <c>abort</c>, option
+ <c><anno>Option</anno></c> as <c>{flush,false}</c>.</p>
+ <p>For statuses <c>string()</c> and <c>abort</c>, option
<c>flush</c> is ignored and flushing is <em>not</em> done.</p>
</desc>
</func>
@@ -1829,13 +1913,15 @@ os_prompt% </pre>
<p>Returns a hash value for <c><anno>Term</anno></c> within the range
<c>1..<anno>Range</anno></c>. The maximum range is 1..2^27-1.</p>
<warning>
- <p>This BIF is deprecated, as the hash value can differ on
- different architectures. The hash values for integer
- terms higher than 2^27 and large binaries are
+ <p><em>This BIF is deprecated, as the hash value can differ on
+ different architectures.</em> The hash values for integer
+ terms &gt; 2^27 and large binaries are
poor. The BIF is retained for backward compatibility
reasons (it can have been used to hash records into a file),
but all new code is to use one of the BIFs
- <c>erlang:phash/2</c> or <c>erlang:phash2/1,2</c> instead.</p>
+ <seealso marker="#phash/2"><c>erlang:phash/2</c></seealso> or
+ <seealso marker="#phash2/1"><c>erlang:phash2/1,2</c></seealso>
+ instead.</p>
</warning>
</desc>
</func>
@@ -1857,7 +1943,7 @@ os_prompt% </pre>
<func>
<name name="hibernate" arity="3"/>
- <fsummary>Hibernates a process until a message is sent to it.</fsummary>
+ <fsummary>Hibernate a process until a message is sent to it.</fsummary>
<desc>
<p>Puts the calling process into a wait state where its memory
allocation has been reduced as much as possible. This is
@@ -1865,15 +1951,15 @@ os_prompt% </pre>
soon.</p>
<p>The process is awaken when a message is sent to it, and control
resumes in <c><anno>Module</anno>:<anno>Function</anno></c> with
- the arguments given by <c><anno>Args</anno></c> with the call
+ the arguments specified by <c><anno>Args</anno></c> with the call
stack emptied, meaning that the process terminates when that
function returns. Thus <c>erlang:hibernate/3</c> never
returns to its caller.</p>
<p>If the process has any message in its message queue,
the process is awakened immediately in the same way as
described earlier.</p>
- <p>In more technical terms, what <c>erlang:hibernate/3</c> does
- is the following. It discards the call stack for the process,
+ <p>In more technical terms, <c>erlang:hibernate/3</c>
+ discards the call stack for the process,
and then garbage collects the process. After this,
all live data is in one continuous heap. The heap
is then shrunken to the exact same size as the live data
@@ -1885,11 +1971,12 @@ os_prompt% </pre>
size is changed to a size not smaller than the minimum heap
size.</p>
<p>Notice that emptying the call stack means that any surrounding
- <c>catch</c> is removed and must be reinserted after
+ <c>catch</c> is removed and must be re-inserted after
hibernation. One effect of this is that processes started
using <c>proc_lib</c> (also indirectly, such as
<c>gen_server</c> processes), are to use
- <seealso marker="stdlib:proc_lib#hibernate/3">proc_lib:hibernate/3</seealso>
+ <seealso marker="stdlib:proc_lib#hibernate/3">
+ <c>proc_lib:hibernate/3</c></seealso>
instead, to ensure that the exception handler continues to work
when the process wakes up.</p>
</desc>
@@ -1897,15 +1984,16 @@ os_prompt% </pre>
<func>
<name name="insert_element" arity="3"/>
- <fsummary>Inserts an element at index in a tuple.</fsummary>
- <type_desc variable="Index">1..tuple_size(<anno>Tuple1</anno>) + 1</type_desc>
+ <fsummary>Insert an element at index in a tuple.</fsummary>
+ <type_desc variable="Index">1..tuple_size(<anno>Tuple1</anno>)
+ + 1</type_desc>
<desc>
<p>Returns a new tuple with element <c><anno>Term</anno></c>
- inserted at position
- <c><anno>Index</anno></c> in tuple <c><anno>Tuple1</anno></c>.
- All elements from position <c><anno>Index</anno></c> and upwards are
- pushed one step higher in the new tuple <c><anno>Tuple2</anno></c>.</p>
- <p>Example:</p>
+ inserted at position
+ <c><anno>Index</anno></c> in tuple <c><anno>Tuple1</anno></c>.
+ All elements from position <c><anno>Index</anno></c> and upwards are
+ pushed one step higher in the new tuple <c><anno>Tuple2</anno></c>.
+ Example:</p>
<pre>
> <input>erlang:insert_element(2, {one, two, three}, new).</input>
{one,new,two,three}</pre>
@@ -1929,8 +2017,8 @@ os_prompt% </pre>
<fsummary>Text representation of an integer.</fsummary>
<desc>
<p>Returns a binary corresponding to the text
- representation of <c><anno>Integer</anno></c> in base
- <c><anno>Base</anno></c>, for example:</p>
+ representation of <c><anno>Integer</anno></c> in base
+ <c><anno>Base</anno></c>, for example:</p>
<pre>
> <input>integer_to_binary(1023, 16).</input>
&lt;&lt;"3FF">></pre>
@@ -1963,8 +2051,21 @@ os_prompt% </pre>
</func>
<func>
+ <name name="iolist_size" arity="1"/>
+ <fsummary>Size of an iolist.</fsummary>
+ <desc>
+ <p>Returns an integer, that is the size in bytes,
+ of the binary that would be the result of
+ <c>iolist_to_binary(<anno>Item</anno>)</c>, for example:</p>
+ <pre>
+> <input>iolist_size([1,2|&lt;&lt;3,4>>]).</input>
+4</pre>
+ </desc>
+ </func>
+
+ <func>
<name name="iolist_to_binary" arity="1"/>
- <fsummary>Converts an iolist to a binary.</fsummary>
+ <fsummary>Convert an iolist to a binary.</fsummary>
<desc>
<p>Returns a binary that is made from the integers and
binaries in <c><anno>IoListOrBinary</anno></c>, for example:</p>
@@ -1981,21 +2082,8 @@ os_prompt% </pre>
</func>
<func>
- <name name="iolist_size" arity="1"/>
- <fsummary>Size of an iolist.</fsummary>
- <desc>
- <p>Returns an integer that is the size in bytes
- of the binary that would be the result of
- <c>iolist_to_binary(<anno>Item</anno>)</c>, for example:</p>
- <pre>
-> <input>iolist_size([1,2|&lt;&lt;3,4>>]).</input>
-4</pre>
- </desc>
- </func>
-
- <func>
<name name="is_alive" arity="0"/>
- <fsummary>Checks whether the local node is alive.</fsummary>
+ <fsummary>Check whether the local node is alive.</fsummary>
<desc>
<p>Returns <c>true</c> if the local node is alive (that is, if
the node can be part of a distributed system), otherwise
@@ -2005,7 +2093,7 @@ os_prompt% </pre>
<func>
<name name="is_atom" arity="1"/>
- <fsummary>Checks whether a term is an atom.</fsummary>
+ <fsummary>Check whether a term is an atom.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Term</anno></c> is an atom,
otherwise <c>false</c>.</p>
@@ -2015,18 +2103,18 @@ os_prompt% </pre>
<func>
<name name="is_binary" arity="1"/>
- <fsummary>Checks whether a term is a binary.</fsummary>
+ <fsummary>Check whether a term is a binary.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Term</anno></c> is a binary,
otherwise <c>false</c>.</p>
- <p>A binary always contains a complete number of bytes.</p>
+ <p>A binary always contains a complete number of bytes.</p>
<p>Allowed in guard tests.</p>
</desc>
</func>
<func>
<name name="is_bitstring" arity="1"/>
- <fsummary>Checks whether a term is a bitstring.</fsummary>
+ <fsummary>Check whether a term is a bitstring.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Term</anno></c> is a
bitstring (including a binary), otherwise <c>false</c>.</p>
@@ -2036,7 +2124,7 @@ os_prompt% </pre>
<func>
<name name="is_boolean" arity="1"/>
- <fsummary>Checks whether a term is a boolean.</fsummary>
+ <fsummary>Check whether a term is a boolean.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Term</anno></c> is the
atom <c>true</c> or the atom <c>false</c> (that is, a boolean).
@@ -2047,18 +2135,18 @@ os_prompt% </pre>
<func>
<name name="is_builtin" arity="3"/>
- <fsummary>Checks if a function is a BIF implemented in C.</fsummary>
+ <fsummary>Check if a function is a BIF implemented in C.</fsummary>
<desc>
<p>This BIF is useful for builders of cross-reference tools.</p>
<p>Returns <c>true</c> if
<c><anno>Module</anno>:<anno>Function</anno>/<anno>Arity</anno></c>
- is a BIF implemented in C, otherwise <c>false</c>.</p>
+ is a BIF implemented in C, otherwise <c>false</c>.</p>
</desc>
</func>
<func>
<name name="is_float" arity="1"/>
- <fsummary>Checks whether a term is a float.</fsummary>
+ <fsummary>Check whether a term is a float.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Term</anno></c> is a floating point
number, otherwise <c>false</c>.</p>
@@ -2068,7 +2156,7 @@ os_prompt% </pre>
<func>
<name name="is_function" arity="1"/>
- <fsummary>Checks whether a term is a fun.</fsummary>
+ <fsummary>Check whether a term is a fun.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Term</anno></c> is a fun, otherwise
<c>false</c>.</p>
@@ -2078,7 +2166,8 @@ os_prompt% </pre>
<func>
<name name="is_function" arity="2"/>
- <fsummary>Checks whether a term is a fun with a given arity.</fsummary>
+ <fsummary>Check whether a term is a fun with a specified given arity.
+ </fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Term</anno></c> is a fun that can be
applied with <c><anno>Arity</anno></c> number of arguments, otherwise
@@ -2089,7 +2178,7 @@ os_prompt% </pre>
<func>
<name name="is_integer" arity="1"/>
- <fsummary>Checks whether a term is an integer.</fsummary>
+ <fsummary>Check whether a term is an integer.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Term</anno></c> is an integer,
otherwise <c>false</c>.</p>
@@ -2099,7 +2188,7 @@ os_prompt% </pre>
<func>
<name name="is_list" arity="1"/>
- <fsummary>Checks whether a term is a list.</fsummary>
+ <fsummary>Check whether a term is a list.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Term</anno></c> is a list with
zero or more elements, otherwise <c>false</c>.</p>
@@ -2109,7 +2198,7 @@ os_prompt% </pre>
<func>
<name name="is_map" arity="1"/>
- <fsummary>Checks whether a term is a map.</fsummary>
+ <fsummary>Check whether a term is a map.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Term</anno></c> is a map,
otherwise <c>false</c>.</p>
@@ -2119,7 +2208,7 @@ os_prompt% </pre>
<func>
<name name="is_number" arity="1"/>
- <fsummary>Checks whether a term is a number.</fsummary>
+ <fsummary>Check whether a term is a number.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Term</anno></c> is an integer or a
floating point number. Otherwise returns <c>false</c>.</p>
@@ -2129,7 +2218,7 @@ os_prompt% </pre>
<func>
<name name="is_pid" arity="1"/>
- <fsummary>Checks whether a term is a process identifier.</fsummary>
+ <fsummary>Check whether a term is a process identifier.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Term</anno></c> is a process
identifier, otherwise <c>false</c>.</p>
@@ -2139,7 +2228,7 @@ os_prompt% </pre>
<func>
<name name="is_port" arity="1"/>
- <fsummary>Checks whether a term is a port.</fsummary>
+ <fsummary>Check whether a term is a port.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Term</anno></c> is a port identifier,
otherwise <c>false</c>.</p>
@@ -2149,26 +2238,26 @@ os_prompt% </pre>
<func>
<name name="is_process_alive" arity="1"/>
- <fsummary>Checks whether a process is alive.</fsummary>
+ <fsummary>Check whether a process is alive.</fsummary>
<desc>
- <p><c><anno>Pid</anno></c> must refer to a process at the local node.</p>
+ <p><c><anno>Pid</anno></c> must refer to a process at the local
+ node.</p>
<p>Returns <c>true</c> if the process exists and is alive, that
is, is not exiting and has not exited. Otherwise returns
- <c>false</c>.
- </p>
+ <c>false</c>.</p>
</desc>
</func>
<func>
<name name="is_record" arity="2"/>
- <fsummary>Checks whether a term appears to be a record.</fsummary>
+ <fsummary>Check whether a term appears to be a record.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Term</anno></c> is a tuple and its
first element is <c><anno>RecordTag</anno></c>.
Otherwise returns <c>false</c>.</p>
<note>
<p>Normally the compiler treats calls to <c>is_record/2</c>
- specially. It emits code to verify that <c><anno>Term</anno></c>
+ especially. It emits code to verify that <c><anno>Term</anno></c>
is a tuple, that its first element is
<c><anno>RecordTag</anno></c>, and that the
size is correct. However, if <c><anno>RecordTag</anno></c> is
@@ -2182,7 +2271,7 @@ os_prompt% </pre>
<func>
<name name="is_record" arity="3"/>
- <fsummary>Checks whether a term appears to be a record.</fsummary>
+ <fsummary>Check whether a term appears to be a record.</fsummary>
<desc>
<p><c><anno>RecordTag</anno></c> must be an atom.</p>
<p>Returns <c>true</c> if
@@ -2201,7 +2290,7 @@ os_prompt% </pre>
<func>
<name name="is_reference" arity="1"/>
- <fsummary>Checks whether a term is a reference.</fsummary>
+ <fsummary>Check whether a term is a reference.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Term</anno></c> is a reference,
otherwise <c>false</c>.</p>
@@ -2211,7 +2300,7 @@ os_prompt% </pre>
<func>
<name name="is_tuple" arity="1"/>
- <fsummary>Checks whether a term is a tuple.</fsummary>
+ <fsummary>Check whether a term is a tuple.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Term</anno></c> is a tuple,
otherwise <c>false</c>.</p>
@@ -2233,7 +2322,7 @@ os_prompt% </pre>
<func>
<name name="link" arity="1"/>
- <fsummary>Creates a link to another process (or port).</fsummary>
+ <fsummary>Create a link to another process (or port).</fsummary>
<desc>
<p>Creates a link between the calling process and another
process (or port) <c><anno>PidOrPort</anno></c>, if there is
@@ -2243,34 +2332,34 @@ os_prompt% </pre>
<p>If <c><anno>PidOrPort</anno></c> does not exist, the behavior
of the BIF
depends on if the calling process is trapping exits or not (see
- <seealso marker="#process_flag/2">process_flag/2</seealso>):</p>
+ <seealso marker="#process_flag/2">
+ <c>process_flag/2</c></seealso>):</p>
<list type="bulleted">
- <item>If the calling process is not trapping exits, and
- checking <c><anno>PidOrPort</anno></c> is cheap
- (that is, if <c><anno>PidOrPort</anno></c>
- is local), <c>link/1</c> fails with reason <c>noproc</c>.</item>
- <item>Otherwise, if the calling process is trapping exits,
- and/or <c><anno>PidOrPort</anno></c> is remote, <c>link/1</c>
- returns <c>true</c>, but an exit signal with reason <c>noproc</c>
- is sent to the calling process.</item>
+ <item><p>If the calling process is not trapping exits, and
+ checking <c><anno>PidOrPort</anno></c> is cheap
+ (that is, if <c><anno>PidOrPort</anno></c>
+ is local), <c>link/1</c> fails with reason <c>noproc</c>.</p></item>
+ <item><p>Otherwise, if the calling process is trapping exits,
+ and/or <c><anno>PidOrPort</anno></c> is remote, <c>link/1</c>
+ returns <c>true</c>, but an exit signal with reason <c>noproc</c>
+ is sent to the calling process.</p></item>
</list>
</desc>
</func>
<func>
<name name="list_to_atom" arity="1"/>
- <fsummary>Converts from text representation to an atom.</fsummary>
+ <fsummary>Convert from text representation to an atom.</fsummary>
<desc>
<p>Returns the atom whose text representation is
<c><anno>String</anno></c>.</p>
- <p><c><anno>String</anno></c> can only contain ISO-latin-1
- characters (that is,
- numbers less than 256) as the implementation does not
- allow unicode characters equal to or above 256 in atoms.
- For more information on Unicode support in atoms, see
- <seealso marker="erl_ext_dist#utf8_atoms">note on UTF-8
+ <p><c><anno>String</anno></c> can only contain ISO-latin-1
+ characters (that is, numbers &lt; 256) as the implementation does not
+ allow Unicode characters equal to or above 256 in atoms.
+ For more information on Unicode support in atoms, see
+ <seealso marker="erl_ext_dist#utf8_atoms">note on UTF-8
encoded atoms</seealso>
- in Section "External Term Format" in the User's Guide.</p>
+ in section "External Term Format" in the User's Guide.</p>
<p>Example:</p>
<pre>
> <input>list_to_atom("Erlang").</input>
@@ -2280,7 +2369,7 @@ os_prompt% </pre>
<func>
<name name="list_to_binary" arity="1"/>
- <fsummary>Converts a list to a binary.</fsummary>
+ <fsummary>Convert a list to a binary.</fsummary>
<desc>
<p>Returns a binary that is made from the integers and
binaries in <c><anno>IoList</anno></c>, for example:</p>
@@ -2298,13 +2387,13 @@ os_prompt% </pre>
<func>
<name name="list_to_bitstring" arity="1"/>
- <fsummary>Converts a list to a bitstring.</fsummary>
+ <fsummary>Convert a list to a bitstring.</fsummary>
<type name="bitstring_list"/>
<desc>
<p>Returns a bitstring that is made from the integers and
bitstrings in <c><anno>BitstringList</anno></c>. (The last tail in
- <c><anno>BitstringList</anno></c> is allowed to be a bitstring.)</p>
- <p>Example:</p>
+ <c><anno>BitstringList</anno></c> is allowed to be a bitstring.)
+ Example:</p>
<pre>
> <input>Bin1 = &lt;&lt;1,2,3&gt;&gt;.</input>
&lt;&lt;1,2,3&gt;&gt;
@@ -2319,7 +2408,7 @@ os_prompt% </pre>
<func>
<name name="list_to_existing_atom" arity="1"/>
- <fsummary>Converts from text representation to an atom.</fsummary>
+ <fsummary>Convert from text representation to an atom.</fsummary>
<desc>
<p>Returns the atom whose text representation is
<c><anno>String</anno></c>,
@@ -2331,7 +2420,7 @@ os_prompt% </pre>
<func>
<name name="list_to_float" arity="1"/>
- <fsummary>Converts from text representation to a float.</fsummary>
+ <fsummary>Convert from text representation to a float.</fsummary>
<desc>
<p>Returns the float whose text representation is
<c><anno>String</anno></c>, for example:</p>
@@ -2345,7 +2434,7 @@ os_prompt% </pre>
<func>
<name name="list_to_integer" arity="1"/>
- <fsummary>Converts from text representation to an integer.</fsummary>
+ <fsummary>Convert from text representation to an integer.</fsummary>
<desc>
<p>Returns an integer whose text representation is
<c><anno>String</anno></c>, for example:</p>
@@ -2359,7 +2448,7 @@ os_prompt% </pre>
<func>
<name name="list_to_integer" arity="2"/>
- <fsummary>Converts from text representation to an integer.</fsummary>
+ <fsummary>Convert from text representation to an integer.</fsummary>
<desc>
<p>Returns an integer whose text representation in base
<c><anno>Base</anno></c> is <c><anno>String</anno></c>,
@@ -2374,7 +2463,7 @@ os_prompt% </pre>
<func>
<name name="list_to_pid" arity="1"/>
- <fsummary>Converts from text representation to a pid.</fsummary>
+ <fsummary>Convert from text representation to a pid.</fsummary>
<desc>
<p>Returns a process identifier whose text representation is a
<c><anno>String</anno></c>, for example:</p>
@@ -2385,14 +2474,14 @@ os_prompt% </pre>
representation of a process identifier.</p>
<warning>
<p>This BIF is intended for debugging and is not to be used
- in application programs.</p>
+ in application programs.</p>
</warning>
</desc>
</func>
<func>
<name name="list_to_tuple" arity="1"/>
- <fsummary>Converts a list to a tuple.</fsummary>
+ <fsummary>Convert a list to a tuple.</fsummary>
<desc>
<p>Returns a tuple corresponding to <c><anno>List</anno></c>,
for example</p>
@@ -2405,7 +2494,7 @@ os_prompt% </pre>
<func>
<name name="load_module" arity="2"/>
- <fsummary>Loads object code for a module.</fsummary>
+ <fsummary>Load object code for a module.</fsummary>
<desc>
<p>If <c><anno>Binary</anno></c> contains the object code for module
<c><anno>Module</anno></c>, this BIF loads that object code. If
@@ -2416,23 +2505,21 @@ os_prompt% </pre>
that code.</p>
<p>Returns either <c>{module, <anno>Module</anno>}</c>, or
<c>{error, <anno>Reason</anno>}</c> if loading fails.
- <c><anno>Reason</anno></c> is any of the following:</p>
+ <c><anno>Reason</anno></c> is one of the following:</p>
<taglist>
<tag><c>badfile</c></tag>
- <item>
- <p>The object code in <c><anno>Binary</anno></c> has an
- incorrect format <em>or</em> the object code contains code
- for another module than <c><anno>Module</anno></c>.</p>
+ <item>The object code in <c><anno>Binary</anno></c> has an
+ incorrect format <em>or</em> the object code contains code
+ for another module than <c><anno>Module</anno></c>.
</item>
<tag><c>not_purged</c></tag>
- <item>
- <p><c><anno>Binary</anno></c> contains a module that cannot be
- loaded because old code for this module already exists.</p>
+ <item><c><anno>Binary</anno></c> contains a module that cannot be
+ loaded because old code for this module already exists.
</item>
</taglist>
<warning>
<p>This BIF is intended for the code server (see
- <seealso marker="kernel:code">code(3)</seealso>)
+ <seealso marker="kernel:code"><c>code(3)</c></seealso>)
and is not to be used elsewhere.</p>
</warning>
</desc>
@@ -2440,33 +2527,36 @@ os_prompt% </pre>
<func>
<name name="load_nif" arity="2"/>
- <fsummary>Loads NIF library.</fsummary>
+ <fsummary>Load NIF library.</fsummary>
<desc>
<note>
- <p>Before OTP R14B, NIFs were an
- experimental feature. Versions before OTP R14B can
- have different and possibly incompatible NIF semantics and
- interfaces. For example, in OTP R13B03 the return value on
- failure was <c>{error,Reason,Text}</c>.</p>
+ <p>Before Erlang/OTP R14B, NIFs were an
+ experimental feature. Versions before Erlang/OTP R14B can
+ have different and possibly incompatible NIF semantics and
+ interfaces. For example, in Erlang/OTP R13B03 the return value on
+ failure was <c>{error,Reason,Text}</c>.</p>
</note>
<p>Loads and links a dynamic library containing native
- implemented functions (NIFs) for a module. <c><anno>Path</anno></c>
- is a file path to the shareable object/dynamic library file minus
- the OS-dependent file extension (<c>.so</c> for Unix and
- <c>.dll</c> for Windows. For information on how to
- implement a NIF library, see
- <seealso marker="erl_nif">erl_nif</seealso>.</p>
+ implemented functions (NIFs) for a module. <c><anno>Path</anno></c>
+ is a file path to the shareable object/dynamic library file minus
+ the OS-dependent file extension (<c>.so</c> for Unix and
+ <c>.dll</c> for Windows). Notice that on most OSs the library has
+ to have a different name on disc when an upgrade of the nif is
+ done. If the name is the same, but the contents differ, the
+ old library may be loaded instead. For information on how to
+ implement a NIF library, see
+ <seealso marker="erl_nif"><c>erl_nif(3)</c></seealso>.</p>
<p><c><anno>LoadInfo</anno></c> can be any term. It is passed on to
- the library as part of the initialization. A good practice is
- to include a module version number to support future code
- upgrade scenarios.</p>
+ the library as part of the initialization. A good practice is
+ to include a module version number to support future code
+ upgrade scenarios.</p>
<p>The call to <c>load_nif/2</c> must be made
- <em>directly</em> from the Erlang code of the module that the
- NIF library belongs to. It returns either <c>ok</c>, or
- <c>{error,{<anno>Reason</anno>,Text}}</c> if loading fails.
- <c><anno>Reason</anno></c> is one of the following atoms
- while <c><anno>Text</anno></c> is a human readable string that
- can give more information about the failure:</p>
+ <em>directly</em> from the Erlang code of the module that the
+ NIF library belongs to. It returns either <c>ok</c>, or
+ <c>{error,{<anno>Reason</anno>,Text}}</c> if loading fails.
+ <c><anno>Reason</anno></c> is one of the following atoms
+ while <c><anno>Text</anno></c> is a human readable string that
+ can give more information about the failure:</p>
<taglist>
<tag><c>load_failed</c></tag>
<item>The OS failed to load the NIF library.
@@ -2489,11 +2579,12 @@ os_prompt% </pre>
<func>
<name name="loaded" arity="0"/>
- <fsummary>Lists all loaded modules.</fsummary>
+ <fsummary>List all loaded modules.</fsummary>
<desc>
<p>Returns a list of all loaded Erlang modules (current and
old code), including preloaded modules.</p>
- <p>See also <seealso marker="kernel:code">code(3)</seealso>.</p>
+ <p>See also <seealso marker="kernel:code">
+ <c>code(3)</c></seealso>.</p>
</desc>
</func>
@@ -2514,13 +2605,13 @@ os_prompt% </pre>
<func>
<name name="localtime_to_universaltime" arity="1"/>
- <fsummary>Converts from local to Universal Time Coordinated (UTC) date and time.</fsummary>
+ <fsummary>Convert from local to Universal Time Coordinated (UTC) date
+ and time.</fsummary>
<desc>
<p>Converts local date and time to Universal Time Coordinated
(UTC), if supported by the underlying OS. Otherwise
no conversion is done and <c><anno>Localtime</anno></c>
- is returned.</p>
- <p>Example:</p>
+ is returned. Example:</p>
<pre>
> <input>erlang:localtime_to_universaltime({{1996,11,6},{14,45,17}}).</input>
{{1996,11,6},{13,45,17}}</pre>
@@ -2531,15 +2622,16 @@ os_prompt% </pre>
<func>
<name name="localtime_to_universaltime" arity="2"/>
- <fsummary>Converts from local to Universal Time Coordinated (UTC) date and time.</fsummary>
+ <fsummary>Convert from local to Universal Time Coordinated (UTC) date
+ and time.</fsummary>
<desc>
<p>Converts local date and time to Universal Time Coordinated
(UTC) as <c>erlang:localtime_to_universaltime/1</c>,
but the caller decides if Daylight Saving Time is active.</p>
- <p>If <c><anno>IsDst</anno> == true</c>, <c><anno>Localtime</anno></c> is
- during Daylight Saving Time, if <c><anno>IsDst</anno> == false</c> it is
- not. If <c><anno>IsDst</anno> == undefined</c>, the underlying OS can
- guess, which is the same as calling
+ <p>If <c><anno>IsDst</anno> == true</c>, <c><anno>Localtime</anno></c>
+ is during Daylight Saving Time, if <c><anno>IsDst</anno> == false</c>
+ it is not. If <c><anno>IsDst</anno> == undefined</c>, the underlying
+ OS can guess, which is the same as calling
<c>erlang:localtime_to_universaltime(<anno>Localtime</anno>)</c>.</p>
<p>Examples:</p>
<pre>
@@ -2556,24 +2648,27 @@ os_prompt% </pre>
<func>
<name name="make_ref" arity="0"/>
- <fsummary>Returns a unique reference.</fsummary>
+ <fsummary>Return a unique reference.</fsummary>
<desc>
- <p>Returns a <seealso marker="doc/efficiency_guide:advanced#unique_references">unique
- reference</seealso>. The reference is unique among
- connected nodes.</p>
- <warning><p>Known issue: When a node is restarted multiple
- times with the same node name, references created
- on a newer node can be mistaken for a reference
- created on an older node with the same node name.</p></warning>
+ <p>Returns a
+ <seealso marker="doc/efficiency_guide:advanced#unique_references">
+ unique reference</seealso>. The reference is unique among
+ connected nodes.</p>
+ <warning>
+ <p>Known issue: When a node is restarted multiple
+ times with the same node name, references created
+ on a newer node can be mistaken for a reference
+ created on an older node with the same node name.</p>
+ </warning>
</desc>
</func>
<func>
<name name="make_tuple" arity="2"/>
- <fsummary>Creates a new tuple of a given arity.</fsummary>
+ <fsummary>Create a new tuple of a specified arity.</fsummary>
<desc>
- <p>Creates a new tuple of the given <c><anno>Arity</anno></c>, where all
- elements are <c><anno>InitialValue</anno></c>, for example:</p>
+ <p>Creates a new tuple of the specified <c><anno>Arity</anno></c>, where
+ all elements are <c><anno>InitialValue</anno></c>, for example:</p>
<pre>
> <input>erlang:make_tuple(4, []).</input>
{[],[],[],[]}</pre>
@@ -2582,17 +2677,16 @@ os_prompt% </pre>
<func>
<name name="make_tuple" arity="3"/>
- <fsummary>Creates a new tuple with given arity and contents.</fsummary>
+ <fsummary>Create a new tuple with specifed arity and contents.</fsummary>
<desc>
<p>Creates a tuple of size <c><anno>Arity</anno></c>, where each element
has value <c><anno>DefaultValue</anno></c>, and then fills in
- values from <c><anno>InitList</anno></c>.
+ values from <c><anno>InitList</anno></c>.
Each list element in <c><anno>InitList</anno></c>
- must be a two-tuple, where the first element is a position in the
- newly created tuple and the second element is any term. If a
- position occurs more than once in the list, the term corresponding
- to the last occurrence is used.</p>
- <p>Example:</p>
+ must be a two-tuple, where the first element is a position in the
+ newly created tuple and the second element is any term. If a
+ position occurs more than once in the list, the term corresponding
+ to the last occurrence is used. Example:</p>
<pre>
> <input>erlang:make_tuple(5, [], [{2,ignored},{5,zz},{2,aa}]).</input>
{{[],aa,[],[],zz}</pre>
@@ -2601,7 +2695,7 @@ os_prompt% </pre>
<func>
<name name="map_size" arity="1"/>
- <fsummary>Returns the size of a map.</fsummary>
+ <fsummary>Return the size of a map.</fsummary>
<desc>
<p>Returns an integer, which is the number of key-value pairs
in <c><anno>Map</anno></c>, for example:</p>
@@ -2614,74 +2708,74 @@ os_prompt% </pre>
<func>
<name name="match_spec_test" arity="3"/>
- <fsummary>Test that a match specification works</fsummary>
- <desc>
- <p>
- This function is a utility to test a match_spec used in calls to
- <seealso marker="stdlib:ets#select/2">ets:select/2</seealso> and
- <seealso marker="#trace_pattern/3">erlang:trace_pattern/3</seealso>.
- The function both tests MatchSpec for "syntactic" correctness and
- runs the match_spec against the object. If the match_spec contains
- errors, the tuple {error, Errors} is returned where Errors is a list
- of natural language descriptions of what was wrong with the match_spec.
- </p>
- <p>
- If the <c><anno>Type</anno></c> is <c>table</c> the object to match
- against should be a tuple. The function then returns
- {ok,Result,[],Warnings} where Result is what would have been the
- result in a real ets:select/2 call or false if the match_spec does
- not match the object tuple.
- </p>
-
- <p>
- If <c><anno>Type</anno></c> is <c>trace</c> the object to match
- against should be a list. The function returns
- {ok, Result, Flags, Warnings} where Result is <c>true</c> if a trace
- message should be emitted, <c>false</c> if a trace message should not
- be emitted or the message term to be appended to the trace message.
- Flags is a list containing all the trace flags that will be enabled,
- at the moment this is only <c>return_trace</c>.
- </p>
-
- <p>
- This is a useful debugging and test tool, especially when writing complicated
- match specifications.
- </p>
- <p>
- See also
- <seealso marker="stdlib:ets#test_ms/2">ets:test_ms/2</seealso>.
- </p>
+ <fsummary>Test that a match specification works.</fsummary>
+ <desc>
+ <p>Tests a match specification used in calls to
+ <seealso marker="stdlib:ets#select/2"><c>ets:select/2</c></seealso>
+ and <seealso marker="#trace_pattern/3">
+ <c>erlang:trace_pattern/3</c></seealso>.
+ The function tests both a match specification for "syntactic"
+ correctness and runs the match specification against the object. If
+ the match specification contains errors, the tuple <c>{error,
+ Errors}</c> is returned, where <c>Errors</c> is a list of natural
+ language descriptions of what was wrong with the match
+ specification.</p>
+ <p>If <c><anno>Type</anno></c> is <c>table</c>, the object to match
+ against is to be a tuple. The function then returns
+ <c>{ok,Result,[],Warnings}</c>, where <c>Result</c> is what would
+ have been the result in a real <c>ets:select/2</c> call, or
+ <c>false</c> if the match specification does not match the object
+ tuple.</p>
+ <p>If <c><anno>Type</anno></c> is <c>trace</c>, the object to match
+ against is to be a list. The function returns
+ <c>{ok, Result, Flags, Warnings}</c>, where <c>Result</c> is one of
+ the following:</p>
+ <list type="bulleted">
+ <item><c>true</c> if a trace message is to be emitted</item>
+ <item><c>false</c> if a trace message is not to be emitted</item>
+ <item>The message term to be appended to the trace message</item>
+ </list>
+ <p><c>Flags</c> is a list containing all the trace flags to be enabled,
+ currently this is only <c>return_trace</c>.</p>
+ <p>This is a useful debugging and test tool, especially when writing
+ complicated match specifications.</p>
+ <p>See also
+ <seealso marker="stdlib:ets#test_ms/2"><c>ets:test_ms/2</c></seealso>.</p>
</desc>
</func>
<func>
<name name="max" arity="2"/>
- <fsummary>Returns the largest of two terms.</fsummary>
+ <fsummary>Return the largest of two terms.</fsummary>
<desc>
<p>Returns the largest of <c><anno>Term1</anno></c> and
<c><anno>Term2</anno></c>.
- If the terms are equal, <c><anno>Term1</anno></c> is returned.</p>
+ If the terms are equal, <c><anno>Term1</anno></c> is returned.</p>
</desc>
</func>
<func>
<name name="md5" arity="1"/>
- <fsummary>Computes an MD5 message digest.</fsummary>
+ <fsummary>Compute an MD5 message digest.</fsummary>
<desc>
<p>Computes an MD5 message digest from <c><anno>Data</anno></c>, where
the length of the digest is 128 bits (16 bytes).
<c><anno>Data</anno></c>
is a binary or a list of small integers and binaries.</p>
- <p>For more information about MD5, see RFC 1321 - The
- MD5 Message-Digest Algorithm.</p>
- <warning><p>The MD5 Message-Digest Algorithm is <em>not</em> considered
- safe for code-signing or software-integrity purposes.</p></warning>
+ <p>For more information about MD5, see
+ <url href="https://www.ietf.org/rfc/rfc1321.txt">
+ RFC 1321 - The MD5 Message-Digest Algorithm</url>.</p>
+ <warning>
+ <p>The MD5 Message-Digest Algorithm is <em>not</em> considered
+ safe for code-signing or software-integrity purposes.</p>
+ </warning>
</desc>
</func>
<func>
<name name="md5_final" arity="1"/>
- <fsummary>Finishes the update of an MD5 context and returns the computed MD5 message digest.</fsummary>
+ <fsummary>Finish the update of an MD5 context and return the computed
+ MD5 message digest.</fsummary>
<desc>
<p>Finishes the update of an MD5 <c><anno>Context</anno></c> and returns
the computed <c>MD5</c> message digest.</p>
@@ -2690,18 +2784,19 @@ os_prompt% </pre>
<func>
<name name="md5_init" arity="0"/>
- <fsummary>Creates an MD5 context.</fsummary>
+ <fsummary>Create an MD5 context.</fsummary>
<desc>
- <p>Creates an MD5 context, to be used in subsequent calls to
+ <p>Creates an MD5 context, to be used in the following calls to
<c>md5_update/2</c>.</p>
</desc>
</func>
<func>
<name name="md5_update" arity="2"/>
- <fsummary>Updates an MD5 context with data and returns a new context.</fsummary>
+ <fsummary>Update an MD5 context with data and return a new context.
+ </fsummary>
<desc>
- <p>Updates an MD5 <c><anno>Context</anno></c> with
+ <p>Update an MD5 <c><anno>Context</anno></c> with
<c><anno>Data</anno></c> and returns a
<c><anno>NewContext</anno></c>.</p>
</desc>
@@ -2717,7 +2812,7 @@ os_prompt% </pre>
element is a tuple <c>{Type, Size}</c>. The first element
<c><anno>Type</anno></c> is an atom describing memory type. The second
element <c><anno>Size</anno></c> is the memory size in bytes.</p>
- <p>The memory types are as follows:</p>
+ <p>Memory types:</p>
<taglist>
<tag><c>total</c></tag>
<item>
@@ -2769,7 +2864,7 @@ os_prompt% </pre>
</item>
<tag><c>ets</c></tag>
<item>
- <p>The total amount of memory currently allocated for ets
+ <p>The total amount of memory currently allocated for ETS
tables. This memory is part of the memory presented as
<c>system</c> memory.</p>
</item>
@@ -2777,9 +2872,9 @@ os_prompt% </pre>
<item>
<p>Only on 64-bit halfword emulator.
The total amount of memory allocated in low memory areas
- that are restricted to less than 4 GB, although
- the system can have more memory.</p>
- <p>Can be removed in a future release of the halfword
+ that are restricted to &lt; 4 GB, although
+ the system can have more memory.</p>
+ <p>Can be removed in a future release of the halfword
emulator.</p>
</item>
<tag><c>maximum</c></tag>
@@ -2789,8 +2884,9 @@ os_prompt% </pre>
when the emulator is run with instrumentation.</p>
<p>For information on how to run the emulator with
instrumentation, see
- <seealso marker="tools:instrument">instrument(3)</seealso>
- and/or <seealso marker="erts:erl">erl(1)</seealso>.</p>
+ <seealso marker="tools:instrument">
+ <c>instrument(3)</c></seealso>
+ and/or <seealso marker="erl"><c>erl(1)</c></seealso>.</p>
</item>
</taglist>
<note>
@@ -2807,20 +2903,20 @@ os_prompt% </pre>
<p>As the <c>total</c> value is the sum of <c>processes</c>
and <c>system</c>, the error in <c>system</c> propagates
to the <c>total</c> value.</p>
- <p>The different amounts of memory that are summed are
- <em>not</em> gathered atomically, which introduces
- an error in the result.</p>
+ <p>The different amounts of memory that are summed are
+ <em>not</em> gathered atomically, which introduces
+ an error in the result.</p>
</note>
<p>The different values have the following relation to each
other. Values beginning with an uppercase letter is not part
of the result.</p>
<code type="none">
- total = processes + system
- processes = processes_used + ProcessesNotUsed
- system = atom + binary + code + ets + OtherSystem
- atom = atom_used + AtomNotUsed
- RealTotal = processes + RealSystem
- RealSystem = system + MissedSystem</code>
+total = processes + system
+processes = processes_used + ProcessesNotUsed
+system = atom + binary + code + ets + OtherSystem
+atom = atom_used + AtomNotUsed
+RealTotal = processes + RealSystem
+RealSystem = system + MissedSystem</code>
<p>More tuples in the returned list can be added in a
future release.</p>
<note>
@@ -2830,20 +2926,20 @@ os_prompt% </pre>
the emulator stacks are not supposed to be included. That
is, the <c>total</c> value is <em>not</em> supposed to be
equal to the total size of all pages mapped to the emulator.</p>
- <p>Furthermore, because of fragmentation and prereservation of
+ <p>Also, because of fragmentation and prereservation of
memory areas, the size of the memory segments containing
the dynamically allocated memory blocks can be much
larger than the total size of the dynamically allocated
memory blocks.</p>
</note>
- <note>
- <p>As from <c>ERTS</c> 5.6.4, <c>erlang:memory/0</c> requires that
- all <seealso marker="erts:erts_alloc">erts_alloc(3)</seealso>
- allocators are enabled (default behavior).</p>
- </note>
+ <note>
+ <p>As from ERTS 5.6.4, <c>erlang:memory/0</c> requires that
+ all <seealso marker="erts:erts_alloc"><c>erts_alloc(3)</c></seealso>
+ allocators are enabled (default behavior).</p>
+ </note>
<p>Failure: <c>notsup</c> if an
- <seealso marker="erts:erts_alloc">erts_alloc(3)</seealso>
- allocator has been disabled.</p>
+ <seealso marker="erts:erts_alloc"><c>erts_alloc(3)</c></seealso>
+ allocator has been disabled.</p>
</desc>
</func>
@@ -2853,61 +2949,61 @@ os_prompt% </pre>
<fsummary>Information about dynamically allocated memory.</fsummary>
<type name="memory_type"/>
<desc>
- <p>Returns the memory size in bytes allocated for memory of
- type <c><anno>Type</anno></c>. The argument can also be given as a list
+ <p>Returns the memory size in bytes allocated for memory of type
+ <c><anno>Type</anno></c>. The argument can also be specified as a list
of <c>memory_type()</c> atoms, in which case a corresponding list of
<c>{memory_type(), Size :: integer >= 0}</c> tuples is returned.</p>
- <note>
- <p>As from <c>ERTS</c> version 5.6.4,
+ <note>
+ <p>As from ERTS 5.6.4,
<c>erlang:memory/1</c> requires that
- all <seealso marker="erts:erts_alloc">erts_alloc(3)</seealso>
- allocators are enabled (default behavior).</p>
- </note>
+ all <seealso marker="erts_alloc"><c>erts_alloc(3)</c></seealso>
+ allocators are enabled (default behavior).</p>
+ </note>
<p>Failures:</p>
<taglist>
<tag><c>badarg</c></tag>
<item>
- If <c><anno>Type</anno></c> is not one of the memory types
+ If <c><anno>Type</anno></c> is not one of the memory types
listed in the description of
- <seealso marker="#memory/0">erlang:memory/0</seealso>.
- </item>
+ <seealso marker="#memory/0"><c>erlang:memory/0</c></seealso>.
+ </item>
<tag><c>badarg</c></tag>
<item>
- If <c>maximum</c> is passed as <c><anno>Type</anno></c> and
+ If <c>maximum</c> is passed as <c><anno>Type</anno></c> and
the emulator is not run in instrumented mode.
- </item>
+ </item>
<tag><c>notsup</c></tag>
<item>
- If an <seealso marker="erts:erts_alloc">erts_alloc(3)</seealso>
- allocator has been disabled.
- </item>
- </taglist>
+ If an <seealso marker="erts_alloc"><c>erts_alloc(3)</c></seealso>
+ allocator has been disabled.
+ </item>
+ </taglist>
<p>See also
- <seealso marker="#memory/0">erlang:memory/0</seealso>.</p>
+ <seealso marker="#memory/0"><c>erlang:memory/0</c></seealso>.</p>
</desc>
</func>
<func>
<name name="min" arity="2"/>
- <fsummary>Returns the smallest of two terms.</fsummary>
+ <fsummary>Return the smallest of two terms.</fsummary>
<desc>
<p>Returns the smallest of <c><anno>Term1</anno></c> and
<c><anno>Term2</anno></c>.
- If the terms are equal, <c><anno>Term1</anno></c> is returned.</p>
+ If the terms are equal, <c><anno>Term1</anno></c> is returned.</p>
</desc>
</func>
<func>
<name name="module_loaded" arity="1"/>
- <fsummary>Checks if a module is loaded.</fsummary>
+ <fsummary>Check if a module is loaded.</fsummary>
<desc>
<p>Returns <c>true</c> if the module <c><anno>Module</anno></c>
is loaded, otherwise <c>false</c>. It does not attempt to load
the module.</p>
<warning>
<p>This BIF is intended for the code server (see
- <seealso marker="kernel:code">code(3)</seealso>) and is not to be
- used elsewhere.</p>
+ <seealso marker="kernel:code"><c>code(3)</c></seealso>)
+ and is not to be used elsewhere.</p>
</warning>
</desc>
</func>
@@ -2915,184 +3011,189 @@ os_prompt% </pre>
<func>
<name name="monitor" arity="2" clause_i="1"/>
<name name="monitor" arity="2" clause_i="2"/>
- <fsummary>Starts monitoring.</fsummary>
+ <name name="monitor" arity="2" clause_i="3"/>
+ <fsummary>Start monitoring.</fsummary>
<type name="registered_name"/>
<type name="registered_process_identifier"/>
<type name="monitor_process_identifier"/>
+ <type name="monitor_port_identifier"/>
<desc>
- <p>Send a monitor request of type <c><anno>Type</anno></c> to the
- entity identified by <c><anno>Item</anno></c>. The caller of
- <c>monitor/2</c> will later be notified by a monitor message on the
- following format if the monitored state is changed:</p>
- <code type="none">{Tag, <anno>MonitorRef</anno>, <anno>Type</anno>, Object, Info}</code>
- <note><p>The monitor request is an asynchronous signal. That is, it
- takes time before the signal reaches its destination.</p></note>
- <p>Valid <c><anno>Type</anno></c>s:</p>
- <taglist>
- <tag><marker id="monitor_process"/><c>process</c></tag>
- <item>
- <p>Monitor the existence of the process identified by
- <c><anno>Item</anno></c>. Valid
- <c><anno>Item</anno></c>s in combination with the
- <c>process <anno>Type</anno></c> can be any of the following:</p>
- <taglist>
- <tag><c>pid()</c></tag>
- <item>
- <p>The process identifier of the process to monitor.</p>
- </item>
- <tag><c>{RegisteredName, Node}</c></tag>
- <item>
- <p>A tuple consisting of a registered name of a process and
- a node name. The process residing on the node <c>Node</c>
- with the registered name <c>{RegisteredName, Node}</c> will
- be monitored.</p>
- </item>
- <tag><c>RegisteredName</c></tag>
- <item>
- <p>The process locally registered as <c>RegisteredName</c>
- will become monitored.</p>
- </item>
- </taglist>
- <note><p>When a registered name is used, the
- process that has the registered name when the
- monitor request reach its destination will be monitored.
- The monitor is not effected if the registered name is
- unregistered, or unregistered and later registered on another
- process.</p></note>
- <p>The monitor is triggered either when the monitored process
- terminates, is non existing, or if the connection to it is
- lost. In the case the connection to it is lost, we do not know
- if it still exist or not. After this type of monitor has been
- triggered, the monitor is automatically removed.</p>
- <p>When the monitor is triggered a <c>'DOWN'</c> message is
- sent to the monitoring process. A <c>'DOWN'</c> message has
- the following pattern:</p>
- <code type="none">{'DOWN', MonitorRef, Type, Object, Info}</code>
- <p>Here <c>MonitorRef</c> and <c>Type</c> are the same as
- described earlier, and:</p>
- <taglist>
- <tag><c>Object</c></tag>
- <item>
- <p>equals:</p>
- <taglist>
- <tag><c><anno>Item</anno></c></tag>
- <item>If <c><anno>Item</anno></c> is specified by a
- process identifier.</item>
- <tag><c>{RegisteredName, Node}</c></tag>
- <item>If <c><anno>Item</anno></c> is specified as
- <c>RegisteredName</c>, or <c>{RegisteredName, Node}</c>
- where <c>Node</c> corresponds to the node that the
- monitored process resides on.</item>
- </taglist>
- </item>
- <tag><c>Info</c></tag>
- <item>
- <p>Either the exit reason of the process, <c>noproc</c>
- (non-existing process), or <c>noconnection</c> (no
- connection to the node where the monitored process
- resides).</p></item>
- </taglist>
- <p>The monitoring is turned off when the <c>'DOWN'</c>
- message is sent or when
- <seealso marker="#demonitor/1">demonitor/1</seealso>
- is called.</p>
- <p>If an attempt is made to monitor a process on an older node
- (where remote process monitoring is not implemented or
- where remote process monitoring by registered name is not
- implemented), the call fails with <c>badarg</c>.</p>
- <note>
- <p>The format of the <c>'DOWN'</c> message changed in ERTS
- version 5.2 (OTP R9B) for monitoring
- <em>by registered name</em>. Element <c>Object</c> of
- the <c>'DOWN'</c> message could in earlier versions
- sometimes be the process identifier of the monitored process and sometimes
- be the registered name. Now element <c>Object</c> is
- always a tuple consisting of the registered name and
- the node name. Processes on new nodes (ERTS version 5.2
- or higher) always get <c>'DOWN'</c> messages on
- the new format even if they are monitoring processes on old
- nodes. Processes on old nodes always get <c>'DOWN'</c>
- messages on the old format.</p>
- </note>
- </item>
- <tag><marker id="monitor_time_offset"/><c>time_offset</c></tag>
+ <p>Sends a monitor request of type <c><anno>Type</anno></c> to the
+ entity identified by <c><anno>Item</anno></c>. If the monitored entity
+ does not exist or it changes monitored state, the caller of
+ <c>monitor/2</c> is notified by a message on the following format:</p>
+ <code type="none">
+{Tag, <anno>MonitorRef</anno>, <anno>Type</anno>, Object, Info}</code>
+ <note>
+ <p>The monitor request is an asynchronous signal. That is, it
+ takes time before the signal reaches its destination.</p>
+ </note>
+
+ <p><c><anno>Type</anno></c> can be one of the following atoms:
+ <c>process</c>, <c>port</c> or <c>time_offset</c>.</p>
+
+ <p>A <c>process</c> or <c>port</c> monitor is triggered only once,
+ after that it is removed from both monitoring process and
+ the monitored entity. Monitors are fired when the monitored process
+ or port terminates, does not exist at the moment of creation,
+ or if the connection to it is lost. If the connection to it is lost,
+ we do not know if it still exists. The monitoring is also turned off
+ when <seealso marker="#demonitor/1">demonitor/1</seealso> is
+ called.</p>
+
+ <p>A <c>process</c> or <c>port</c> monitor by name
+ resolves the <c>RegisteredName</c> to <c>pid()</c> or <c>port()</c>
+ only once at the moment of monitor instantiation, later changes to
+ the name registration will not affect the existing monitor.</p>
+
+ <p>When a <c>process</c> or <c>port</c> monitor is triggered,
+ a <c>'DOWN'</c> message is sent that has the following pattern:</p>
+ <code type="none">
+{'DOWN', MonitorRef, Type, Object, Info}</code>
+
+ <p>In the monitor message <c>MonitorRef</c> and <c>Type</c> are the
+ same as described earlier, and:</p>
+ <taglist>
+ <tag><c>Object</c></tag>
+ <item>
+ <p>The monitored entity, which triggered the event. When monitoring
+ a local process or port, <c>Object</c> will be equal to the
+ <c>pid()</c> or <c>port()</c> that was being monitored. When
+ monitoring process or port by name, <c>Object</c> will have format
+ <c>{RegisteredName, Node}</c> where <c>RegisteredName</c> is the
+ name which has been used with <c>monitor/2</c> call and
+ <c>Node</c> is local or remote node name (for ports monitored by
+ name, <c>Node</c> is always local node name).</p>
+ </item>
+ <tag><c>Info</c></tag>
+ <item>
+ <p>Either the exit reason of the process, <c>noproc</c>
+ (process or port did not exist at the time of monitor creation),
+ or <c>noconnection</c> (no connection to the node where the
+ monitored process resides). </p></item>
+ </taglist>
+
+ <p>If an attempt is made to monitor a process on an older node
+ (where remote process monitoring is not implemented or
+ where remote process monitoring by registered name is not
+ implemented), the call fails with <c>badarg</c>.</p>
+ <note>
+ <p>The format of the <c>'DOWN'</c> message changed in ERTS
+ 5.2 (Erlang/OTP R9B) for monitoring
+ <em>by registered name</em>. Element <c>Object</c> of
+ the <c>'DOWN'</c> message could in earlier versions
+ sometimes be the process identifier of the monitored process and sometimes
+ be the registered name. Now element <c>Object</c> is
+ always a tuple consisting of the registered name and
+ the node name. Processes on new nodes (ERTS 5.2
+ or higher versions) always get <c>'DOWN'</c> messages on
+ the new format even if they are monitoring processes on old
+ nodes. Processes on old nodes always get <c>'DOWN'</c>
+ messages on the old format.</p>
+ </note>
+
+ <taglist>
+ <tag>Monitoring a <marker id="monitor_process"/><c>process</c></tag>
+ <item>
+ <p>Creates monitor between the current process and another
+ process identified by <c><anno>Item</anno></c>, which can be a
+ <c>pid()</c> (local or remote), an atom <c>RegisteredName</c> or
+ a tuple <c>{RegisteredName, Node}</c> for a registered process,
+ located elsewhere.</p>
+ </item>
+
+ <tag>Monitoring a <marker id="monitor_port"/><c>port</c></tag>
+ <item>
+ <p>Creates monitor between the current process and a port
+ identified by <c><anno>Item</anno></c>, which can be a
+ <c>port()</c> (only local), an atom <c>RegisteredName</c> or
+ a tuple <c>{RegisteredName, Node}</c> for a registered port,
+ located on this node. Note, that attempt to monitor a remote port
+ will result in <c>badarg</c>.</p>
+ </item>
+
+ <tag>Monitoring a
+ <marker id="monitor_time_offset"/><c>time_offset</c></tag>
<item>
- <p>Monitor changes in
- <seealso marker="#time_offset/0">time offset</seealso>
- between
- <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
- monotonic time</seealso> and
- <seealso marker="time_correction#Erlang_System_Time">Erlang
- system time</seealso>. There is only one valid
- <c><anno>Item</anno></c> in combination with the
- <c>time_offset <anno>Type</anno></c>, namely the atom
- <c>clock_service</c>. Note that the atom <c>clock_service</c> is
- <em>not</em> the registered name of a process. In this specific
- case it serves as an identifier of the runtime system internal
- clock service at current runtime system instance.</p>
+ <p>Monitors changes in
+ <seealso marker="#time_offset/0"><c>time offset</c></seealso>
+ between
+ <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
+ monotonic time</seealso> and
+ <seealso marker="time_correction#Erlang_System_Time">Erlang
+ system time</seealso>. One valid <c><anno>Item</anno></c>
+ exists in combination with the
+ <c>time_offset <anno>Type</anno></c>, namely the atom
+ <c>clock_service</c>. Notice that the atom <c>clock_service</c> is
+ <em>not</em> the registered name of a process. In this
+ case it serves as an identifier of the runtime system internal
+ clock service at current runtime system instance.</p>
<p>The monitor is triggered when the time offset is changed.
- This either if the time offset value is changed, or if the
- offset is changed from preliminary to final during
- <seealso marker="#system_flag_time_offset">finalization
- of the time offset</seealso> when the
- <seealso marker="time_correction#Single_Time_Warp_Mode">single
- time warp mode</seealso> is used. When a change from preliminary
- to final time offset is made, the monitor will be triggered once
- regardless of whether the time offset value was actually changed
- or not.</p>
+ This either if the time offset value is changed, or if the
+ offset is changed from preliminary to final during
+ <seealso marker="#system_flag_time_offset">finalization
+ of the time offset</seealso> when the
+ <seealso marker="time_correction#Single_Time_Warp_Mode">single
+ time warp mode</seealso> is used. When a change from preliminary
+ to final time offset is made, the monitor is triggered once
+ regardless of whether the time offset value was changed
+ or not.</p>
<p>If the runtime system is in
- <seealso marker="time_correction#Multi_Time_Warp_Mode">multi
- time warp mode</seealso>, the time offset will be changed when
- the runtime system detects that the
- <seealso marker="time_correction#OS_System_Time">OS system
- time</seealso> has changed. The runtime system will, however,
- not detect this immediately when it happens. A task checking
- the time offset is scheduled to execute at least once a minute,
- so under normal operation this should be detected within a
- minute, but during heavy load it might take longer time.</p>
-
- <p>The monitor will <em>not</em> be automatically removed
- after it has been triggered. That is, repeated changes of
- the time offset will trigger the monitor repeatedly.</p>
-
- <p>When the monitor is triggered a <c>'CHANGE'</c> message will
- be sent to the monitoring process. A <c>'CHANGE'</c> message has
- the following pattern:</p>
- <code type="none">{'CHANGE', MonitorRef, Type, Item, NewTimeOffset}</code>
- <p>where <c>MonitorRef</c>, <c><anno>Type</anno></c>, and
- <c><anno>Item</anno></c> are the same as described above, and
- <c>NewTimeOffset</c> is the new time offset.</p>
+ <seealso marker="time_correction#Multi_Time_Warp_Mode">multi
+ time warp mode</seealso>, the time offset is changed when
+ the runtime system detects that the
+ <seealso marker="time_correction#OS_System_Time">OS system
+ time</seealso> has changed. The runtime system does, however,
+ not detect this immediately when it occurs. A task checking
+ the time offset is scheduled to execute at least once a minute,
+ so under normal operation this is to be detected within a
+ minute, but during heavy load it can take longer time.</p>
+
+ <p>The monitor is <em>not</em> automatically removed
+ after it has been triggered. That is, repeated changes of
+ the time offset trigger the monitor repeatedly.</p>
+
+ <p>When the monitor is triggered a <c>'CHANGE'</c> message is
+ sent to the monitoring process. A <c>'CHANGE'</c> message has
+ the following pattern:</p>
+ <code type="none">
+{'CHANGE', MonitorRef, Type, Item, NewTimeOffset}</code>
+ <p>where <c>MonitorRef</c>, <c><anno>Type</anno></c>, and
+ <c><anno>Item</anno></c> are the same as described above, and
+ <c>NewTimeOffset</c> is the new time offset.</p>
<p>When the <c>'CHANGE'</c> message has been received you are
- guaranteed not to retrieve the old time offset when calling
- <seealso marker="#time_offset/0"><c>erlang:time_offset()</c></seealso>.
- Note that you can observe the change of the time offset
- when calling <c>erlang:time_offset()</c> before you
- get the <c>'CHANGE'</c> message.</p>
-
+ guaranteed not to retrieve the old time offset when calling
+ <seealso marker="#time_offset/0">
+ <c>erlang:time_offset()</c></seealso>.
+ Notice that you can observe the change of the time offset
+ when calling <c>erlang:time_offset()</c> before you
+ get the <c>'CHANGE'</c> message.</p>
</item>
</taglist>
+
<p>Making several calls to <c>monitor/2</c> for the same
- <c><anno>Item</anno></c> and/or <c><anno>Type</anno></c> is not
- an error; it results in as many independent monitoring instances.</p>
+ <c><anno>Item</anno></c> and/or <c><anno>Type</anno></c> is not
+ an error; it results in as many independent monitoring instances.</p>
+
<p>The monitor functionality is expected to be extended. That is,
- other <c><anno>Type</anno></c>s and <c><anno>Item</anno></c>s
- are expected to be supported in a future release.</p>
+ other <c><anno>Type</anno></c>s and <c><anno>Item</anno></c>s
+ are expected to be supported in a future release.</p>
<note>
<p>If or when <c>monitor/2</c> is extended, other
- possible values for <c>Tag</c>, <c>Object</c> and
- <c>Info</c> in the monitor message will be introduced.</p>
+ possible values for <c>Tag</c>, <c>Object</c>, and
+ <c>Info</c> in the monitor message will be introduced.</p>
</note>
</desc>
</func>
<func>
<name name="monitor_node" arity="2"/>
- <fsummary>Monitors the status of a node.</fsummary>
+ <fsummary>Monitor the status of a node.</fsummary>
<desc>
- <p>Monitors the status of the node <c><anno>Node</anno></c>.
+ <p>Monitor the status of the node <c><anno>Node</anno></c>.
If <c><anno>Flag</anno></c>
is <c>true</c>, monitoring is turned on. If <c><anno>Flag</anno></c>
is <c>false</c>, monitoring is turned off.</p>
@@ -3114,23 +3215,23 @@ os_prompt% </pre>
<func>
<name name="monitor_node" arity="3"/>
- <fsummary>Monitors the status of a node.</fsummary>
+ <fsummary>Monitor the status of a node.</fsummary>
<desc>
<p>Behaves as
- <seealso marker="#monitor_node/2">monitor_node/2</seealso>
+ <seealso marker="#monitor_node/2"><c>monitor_node/2</c></seealso>
except that it allows an
- extra option to be given, namely <c>allow_passive_connect</c>.
+ extra option to be specified, namely <c>allow_passive_connect</c>.
This option allows the BIF to wait the normal network connection
time-out for the <em>monitored node</em> to connect itself,
even if it cannot be actively connected from this node
(that is, it is blocked). The state where this can be useful
- can only be achieved by using the <c>Kernel</c> option
+ can only be achieved by using the Kernel option
<c>dist_auto_connect once</c>. If that option is not
used, option <c>allow_passive_connect</c> has no effect.</p>
<note>
<p>Option <c>allow_passive_connect</c> is used
internally and is seldom needed in applications where the
- network topology and the <c>Kernel</c> options in effect
+ network topology and the Kernel options in effect
are known in advance.</p>
</note>
<p>Failure: <c>badarg</c> if the local node is not alive or the
@@ -3142,70 +3243,77 @@ os_prompt% </pre>
<name name="monotonic_time" arity="0"/>
<fsummary>Current Erlang monotonic time.</fsummary>
<desc>
- <p>Returns the current
- <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
- monotonic time</seealso> in <c>native</c>
- <seealso marker="#type_time_unit">time unit</seealso>. This
- is a monotonically increasing time since some unspecified point in
- time.</p>
-
- <note><p>This is a
- <seealso marker="time_correction#Monotonically_Increasing">monotonically increasing</seealso> time, but <em>not</em> a
- <seealso marker="time_correction#Strictly_Monotonically_Increasing">strictly monotonically increasing</seealso>
- time. That is, consecutive calls to
- <c>erlang:monotonic_time/0</c> can produce the same result.</p>
-
- <p>Different runtime system instances will use different
- unspecified points in time as base for their Erlang monotonic clocks.
- That is, it is <em>pointless</em> comparing monotonic times from
- different runtime system instances. Different runtime system instances
- may also place this unspecified point in time different relative
- runtime system start. It may be placed in the future (time at start
- is a negative value), the past (time at start is a
- positive value), or the runtime system start (time at start is
- zero). The monotonic time at runtime system start can be
- retrieved by calling
- <seealso marker="#system_info_start_time"><c>erlang:system_info(start_time)</c></seealso>.</p></note>
+ <p>Returns the current
+ <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
+ monotonic time</seealso> in <c>native</c>
+ <seealso marker="#type_time_unit">time unit</seealso>. This
+ is a monotonically increasing time since some unspecified point in
+ time.</p>
+ <note>
+ <p>This is a
+ <seealso marker="time_correction#Monotonically_Increasing">
+ monotonically increasing</seealso> time, but <em>not</em> a
+ <seealso marker="time_correction#Strictly_Monotonically_Increasing">
+ strictly monotonically increasing</seealso>
+ time. That is, consecutive calls to
+ <c>erlang:monotonic_time/0</c> can produce the same result.</p>
+ <p>Different runtime system instances will use different unspecified
+ points in time as base for their Erlang monotonic clocks.
+ That is, it is <em>pointless</em> comparing monotonic times from
+ different runtime system instances. Different runtime system
+ instances can also place this unspecified point in time different
+ relative runtime system start. It can be placed in the future (time
+ at start is a negative value), the past (time at start is a
+ positive value), or the runtime system start (time at start is
+ zero). The monotonic time at runtime system start can be
+ retrieved by calling
+ <seealso marker="#system_info_start_time">
+ <c>erlang:system_info(start_time)</c></seealso>.</p>
+ </note>
</desc>
</func>
+
<func>
<name name="monotonic_time" arity="1"/>
- <fsummary>Current Erlang monotonic time</fsummary>
+ <fsummary>Current Erlang monotonic time.</fsummary>
<desc>
- <p>Returns the current
- <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
- monotonic time</seealso> converted
- into the <c><anno>Unit</anno></c> passed as argument.</p>
-
- <p>Same as calling
- <seealso marker="#convert_time_unit/3"><c>erlang:convert_time_unit</c></seealso><c>(</c><seealso marker="#monotonic_time/0"><c>erlang:monotonic_time()</c></seealso><c>,
- native, <anno>Unit</anno>)</c>
- however optimized for commonly used <c><anno>Unit</anno></c>s.</p>
+ <p>Returns the current
+ <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
+ monotonic time</seealso> converted
+ into the <c><anno>Unit</anno></c> passed as argument.</p>
+ <p>Same as calling
+ <seealso marker="#convert_time_unit/3">
+ <c>erlang:convert_time_unit</c></seealso><c>(</c><seealso
+ marker="#monotonic_time/0">
+ <c>erlang:monotonic_time()</c></seealso><c>,
+ native, <anno>Unit</anno>)</c>,
+ however optimized for commonly used <c><anno>Unit</anno></c>s.</p>
</desc>
</func>
+
<func>
<name name="nif_error" arity="1"/>
- <fsummary>Stops execution with a given reason.</fsummary>
+ <fsummary>Stop execution with a specified reason.</fsummary>
<desc>
<p>Works exactly like
- <seealso marker="#error/1">erlang:error/1</seealso>, but
- <c>Dialyzer</c> thinks that this BIF will return an arbitrary
- term. When used in a stub function for a NIF to generate an
- exception when the NIF library is not loaded, <c>Dialyzer</c>
- does not generate false warnings.</p>
+ <seealso marker="#error/1"><c>error/1</c></seealso>, but
+ Dialyzer thinks that this BIF will return an arbitrary
+ term. When used in a stub function for a NIF to generate an
+ exception when the NIF library is not loaded, Dialyzer
+ does not generate false warnings.</p>
</desc>
</func>
<func>
<name name="nif_error" arity="2"/>
- <fsummary>Stops execution with a given reason.</fsummary>
+ <fsummary>Stop execution with a specified reason.</fsummary>
<desc>
<p>Works exactly like
- <seealso marker="#error/2">erlang:error/2</seealso>, but
- <c>Dialyzer</c> thinks that this BIF will return an arbitrary
- term. When used in a stub function for a NIF to generate an
- exception when the NIF library is not loaded, <c>Dialyzer</c>
- does not generate false warnings.</p>
+ <seealso marker="#error/2"><c>error/2</c></seealso>, but
+ Dialyzer thinks that this BIF will return an arbitrary
+ term. When used in a stub function for a NIF to generate an
+ exception when the NIF library is not loaded, Dialyzer
+ does not generate false warnings.</p>
</desc>
</func>
@@ -3245,10 +3353,10 @@ os_prompt% </pre>
<name name="nodes" arity="1"/>
<fsummary>All nodes of a certain type in the system.</fsummary>
<desc>
- <p>Returns a list of nodes according to the argument given.
- The returned result when the argument is a list, is the list
+ <p>Returns a list of nodes according to the argument specified.
+ The returned result, when the argument is a list, is the list
of nodes satisfying the disjunction(s) of the list elements.</p>
- <p><c><anno>NodeType</anno></c> can be any of the following:</p>
+ <p><c><anno>NodeType</anno></c>s:</p>
<taglist>
<tag><c>visible</c></tag>
<item>
@@ -3269,13 +3377,13 @@ os_prompt% </pre>
<tag><c>known</c></tag>
<item>
<p>Nodes that are known to this node. That is, connected
- nodes and nodes referred to by process identifiers, port
- identifiers and references located on this node.
- The set of known nodes is garbage collected. Notice that
- this garbage collection can be delayed. For more
- information, see
- <seealso marker="erlang#system_info_delayed_node_table_gc">delayed_node_table_gc</seealso>.
- </p>
+ nodes and nodes referred to by process identifiers, port
+ identifiers, and references located on this node.
+ The set of known nodes is garbage collected. Notice that
+ this garbage collection can be delayed. For more
+ information, see
+ <seealso marker="erlang#system_info_delayed_node_table_gc">
+ <c>erlang:system_info(delayed_node_table_gc)</c></seealso>.</p>
</item>
</taglist>
<p>Some equalities: <c>[node()] = nodes(this)</c>,
@@ -3289,20 +3397,22 @@ os_prompt% </pre>
<fsummary>Elapsed time since 00:00 GMT.</fsummary>
<type name="timestamp"/>
<desc>
- <warning><p><em>This function is deprecated! Do not use it!</em>
- See the users guide chapter
- <seealso marker="time_correction">Time and Time Correction</seealso>
- for more information. Specifically the
- <seealso marker="time_correction#Dos_and_Donts">Dos and Dont's</seealso>
- section for information on what to use instead of <c>erlang:now/0</c>.
- </p></warning>
- <p>Returns the tuple <c>{MegaSecs, Secs, MicroSecs}</c> which is
+ <warning>
+ <p><em>This function is deprecated. Do not use it.</em></p>
+ <p>For more information, see section
+ <seealso marker="time_correction">Time and Time Correction</seealso>
+ in the User's Guide. Specifically, section
+ <seealso marker="time_correction#Dos_and_Donts">
+ Dos and Dont's</seealso> describes what to use instead of
+ <c>erlang:now/0</c>.</p>
+ </warning>
+ <p>Returns the tuple <c>{MegaSecs, Secs, MicroSecs}</c>, which is
the elapsed time since 00:00 GMT, January 1, 1970 (zero hour),
- on the assumption that the underlying OS supports this.
+ if provided by the underlying OS.
Otherwise some other point in time is chosen. It is also
- guaranteed that subsequent calls to this BIF return
+ guaranteed that the following calls to this BIF return
continuously increasing values. Hence, the return value from
- <c>now()</c> can be used to generate unique time-stamps.
+ <c>erlang:now/0</c> can be used to generate unique time stamps.
If it is called in a tight loop on a fast machine,
the time of the node can become skewed.</p>
<p>Can only be used to check the local time of day if
@@ -3313,28 +3423,31 @@ os_prompt% </pre>
<func>
<name name="open_port" arity="2"/>
- <fsummary>Opens a port.</fsummary>
+ <fsummary>Open a port.</fsummary>
<desc>
<p>Returns a port identifier as the result of opening a
new Erlang port. A port can be seen as an external Erlang
process.</p>
- <p>The name of the executable as well as the arguments
- given in <c>cd</c>, <c>env</c>, <c>args</c>, and <c>arg0</c> are
- subject to Unicode file name translation if the system is running
- in Unicode file name mode. To avoid
- translation or to force, for example UTF-8, supply the executable
- and/or arguments as a binary in the correct
- encoding. For details, see the module
- <seealso marker="kernel:file">file</seealso>, the function
- <seealso marker="kernel:file#native_name_encoding/0">file:native_name_encoding/0</seealso>, and the
- <seealso marker="stdlib:unicode_usage">STDLIB </seealso>
- User's Guide.</p>
- <note><p>The characters in the name (if given as a list) can
- only be higher than 255 if the Erlang Virtual Machine is started
- in Unicode file name translation mode. Otherwise the name
- of the executable is limited to the ISO-latin-1
- character set.</p></note>
- <p><c><anno>PortName</anno></c> can be any of the following:</p>
+ <p>The name of the executable as well as the arguments
+ specifed in <c>cd</c>, <c>env</c>, <c>args</c>, and <c>arg0</c> are
+ subject to Unicode filename translation if the system is running
+ in Unicode filename mode. To avoid
+ translation or to force, for example UTF-8, supply the executable
+ and/or arguments as a binary in the correct
+ encoding. For details, see the module
+ <seealso marker="kernel:file"><c>file(3)</c></seealso>, the
+ function <seealso marker="kernel:file#native_name_encoding/0">
+ <c>file:native_name_encoding/0</c></seealso> in Kernel, and
+ the <seealso marker="stdlib:unicode_usage">
+ <c>Using Unicode in Erlang</c></seealso> User's Guide.</p>
+ <note>
+ <p>The characters in the name (if specified as a list) can
+ only be &gt; 255 if the Erlang virtual machine is started
+ in Unicode filename translation mode. Otherwise the name
+ of the executable is limited to the ISO Latin-1
+ character set.</p>
+ </note>
+ <p><c><anno>PortName</anno></c>s:</p>
<taglist>
<tag><c>{spawn, <anno>Command</anno>}</c></tag>
<item>
@@ -3353,55 +3466,57 @@ os_prompt% </pre>
<c>vfork</c>, setting environment variable
<c>ERL_NO_VFORK</c> to any value causes <c>fork</c>
to be used instead.</p>
- <p>For external programs, <c>PATH</c> is searched
- (or an equivalent method is used to find programs,
- depending on OS). This is done by invoking
- the shell on certain platforms. The first space-separated
- token of the command is considered as the
- name of the executable (or driver). This (among other
- things) makes this option unsuitable for running
- programs having spaces in file names or directory names.
- If spaces in executable file names are desired, use
- <c>{spawn_executable, <anno>Command</anno>}</c> instead.</p>
+ <p>For external programs, <c>PATH</c> is searched
+ (or an equivalent method is used to find programs,
+ depending on the OS). This is done by invoking
+ the shell on certain platforms. The first space-separated
+ token of the command is considered as the
+ name of the executable (or driver). This (among other
+ things) makes this option unsuitable for running
+ programs with spaces in filenames or directory names.
+ If spaces in executable filenames are desired, use
+ <c>{spawn_executable, <anno>Command</anno>}</c> instead.</p>
</item>
<tag><c>{spawn_driver, <anno>Command</anno>}</c></tag>
<item>
- <p>Works like <c>{spawn, <anno>Command</anno>}</c>, but demands the
- first (space-separated) token of the command to be the name of a
- loaded driver. If no driver with that name is loaded, a
- <c>badarg</c> error is raised.</p>
+ <p>Works like <c>{spawn, <anno>Command</anno>}</c>, but demands
+ the first (space-separated) token of the command to be the name
+ of a loaded driver. If no driver with that name is loaded, a
+ <c>badarg</c> error is raised.</p>
</item>
<tag><c>{spawn_executable, <anno>FileName</anno>}</c></tag>
<item>
- <p>Works like <c>{spawn, <anno>FileName</anno>}</c>, but only runs
- external executables. <c><anno>FileName</anno></c> in its whole
- is used as the name of the executable, including any spaces.
- If arguments are to be passed, the <c><anno>PortSettings</anno></c>
- <c>args</c> and <c>arg0</c> can be used.</p>
- <p>The shell is usually not invoked to start the
- program, it is executed directly. <c>PATH</c> (or
+ <p>Works like <c>{spawn, <anno>FileName</anno>}</c>, but only runs
+ external executables. <c><anno>FileName</anno></c> in its whole
+ is used as the name of the executable, including any spaces.
+ If arguments are to be passed, the
+ <c><anno>PortSettings</anno></c>
+ <c>args</c> and <c>arg0</c> can be used.</p>
+ <p>The shell is usually not invoked to start the
+ program, it is executed directly. <c>PATH</c> (or
equivalent) is not searched. To find a program
- in <c>PATH</c> to execute, use
- <seealso marker="kernel:os#find_executable/1">os:find_executable/1</seealso>.</p>
- <p>Only if a shell script or <c>.bat</c> file is
- executed, the appropriate command interpreter is
- invoked implicitly, but there is still no
- command argument expansion or implicit <c>PATH</c> search.</p>
- <p>If <c><anno>FileName</anno></c> cannot be run, an error
- exception is raised, with the POSIX error code as the reason.
- The error reason can differ between OSs.
- Typically the error <c>enoent</c> is raised when an
- attempt is made to run a program that is not found and
- <c>eacces</c> is raised when the given file is not
- executable.</p>
+ in <c>PATH</c> to execute, use
+ <seealso marker="kernel:os#find_executable/1">
+ <c>os:find_executable/1</c></seealso>.</p>
+ <p>Only if a shell script or <c>.bat</c> file is
+ executed, the appropriate command interpreter is
+ invoked implicitly, but there is still no
+ command-argument expansion or implicit <c>PATH</c> search.</p>
+ <p>If <c><anno>FileName</anno></c> cannot be run, an error
+ exception is raised, with the POSIX error code as the reason.
+ The error reason can differ between OSs.
+ Typically the error <c>enoent</c> is raised when an
+ attempt is made to run a program that is not found and
+ <c>eacces</c> is raised when the specified file is not
+ executable.</p>
</item>
<tag><c>{fd, <anno>In</anno>, <anno>Out</anno>}</c></tag>
<item>
<p>Allows an Erlang process to access any currently opened
file descriptors used by Erlang. The file descriptor
- <c><anno>In</anno></c> can be used for standard input, and the file
- descriptor <c><anno>Out</anno></c> for standard output. It is only
- used for various servers in the Erlang OS (<c>shell</c>
+ <c><anno>In</anno></c> can be used for standard input, and the
+ file descriptor <c><anno>Out</anno></c> for standard output.
+ It is only used for various servers in the Erlang OS (<c>shell</c>
and <c>user</c>). Hence, its use is limited.</p>
</item>
</taglist>
@@ -3410,7 +3525,8 @@ os_prompt% </pre>
<taglist>
<tag><c>{packet, <anno>N</anno>}</c></tag>
<item>
- <p>Messages are preceded by their length, sent in <c><anno>N</anno></c>
+ <p>Messages are preceded by their length, sent in
+ <c><anno>N</anno></c>
bytes, with the most significant byte first. The valid values
for <c>N</c> are 1, 2, and 4.</p>
</item>
@@ -3423,16 +3539,16 @@ os_prompt% </pre>
<tag><c>{line, <anno>L</anno>}</c></tag>
<item>
<p>Messages are delivered on a per line basis. Each line
- (delimited by the OS-dependent new line sequence) is
+ (delimited by the OS-dependent newline sequence) is
delivered in a single message. The message data format
is <c>{Flag, Line}</c>, where <c>Flag</c> is
<c>eol</c> or <c>noeol</c>, and <c>Line</c> is the
- data delivered (without the new line sequence).</p>
+ data delivered (without the newline sequence).</p>
<p><c><anno>L</anno></c> specifies the maximum line length in bytes.
Lines longer than this are delivered in more than one
message, with <c>Flag</c> set to <c>noeol</c> for all
but the last message. If end of file is encountered
- anywhere else than immediately following a new line
+ anywhere else than immediately following a newline
sequence, the last line is also delivered with
<c>Flag</c> set to <c>noeol</c>. Otherwise
lines are delivered with <c>Flag</c> set to <c>eol</c>.</p>
@@ -3442,14 +3558,14 @@ os_prompt% </pre>
<tag><c>{cd, <anno>Dir</anno>}</c></tag>
<item>
<p>Only valid for <c>{spawn, <anno>Command</anno>}</c> and
- <c>{spawn_executable, <anno>FileName</anno>}</c>.
+ <c>{spawn_executable, <anno>FileName</anno>}</c>.
The external program starts using <c><anno>Dir</anno></c> as its
working directory. <c><anno>Dir</anno></c> must be a string.</p>
</item>
<tag><c>{env, <anno>Env</anno>}</c></tag>
<item>
- <p>Only valid for <c>{spawn, <anno>Command</anno>}</c> and
- <c>{spawn_executable, <anno>FileName</anno>}</c>.
+ <p>Only valid for <c>{spawn, <anno>Command</anno>}</c>, and
+ <c>{spawn_executable, <anno>FileName</anno>}</c>.
The environment of the started process is extended using
the environment specifications in <c><anno>Env</anno></c>.</p>
<p><c><anno>Env</anno></c> is to be a list of tuples
@@ -3460,56 +3576,58 @@ os_prompt% </pre>
port process. Both <c><anno>Name</anno></c> and
<c><anno>Val</anno></c> must be strings. The one
exception is <c><anno>Val</anno></c> being the atom
- <c>false</c> (in analogy with <c>os:getenv/1</c>), which
- removes the environment variable.</p>
- </item>
- <tag><c>{args, [ string() | binary() ]}</c></tag>
- <item>
- <p>Only valid for <c>{spawn_executable, <anno>FileName</anno>}</c>
- and specifies arguments to the executable. Each argument
- is given as a separate string and (on Unix) eventually
- ends up as one element each in the argument vector. On
- other platforms, a similar behavior is mimicked.</p>
- <p>The arguments are not expanded by the shell before
- being supplied to the executable. Most notably this
- means that file wild card expansion does not happen.
- To expand wild cards for the arguments, use
- <seealso marker="stdlib:filelib#wildcard/1">filelib:wildcard/1</seealso>.
- Notice that even if
- the program is a Unix shell script, meaning that the
- shell ultimately is invoked, wild card expansion
- does not happen, and the script is provided with the
- untouched arguments. On Windows, wild card expansion
- is always up to the program itself, therefore this is
- not an issue issue.</p>
- <p>The executable name (also known as <c>argv[0]</c>)
- is not to be given in this list. The proper executable name
- is automatically used as argv[0], where applicable.</p>
- <p>If you explicitly want to set the
- program name in the argument vector, option <c>arg0</c>
- can be used.</p>
- </item>
- <tag><c>{arg0, string() | binary()}</c></tag>
- <item>
- <p>Only valid for <c>{spawn_executable, <anno>FileName</anno>}</c>
- and explicitly specifies the program name argument when
- running an executable. This can in some circumstances,
- on some OSs, be desirable. How the program
- responds to this is highly system-dependent and no specific
- effect is guaranteed.</p>
- </item>
+ <c>false</c> (in analogy with
+ <seealso marker="kernel:os#getenv/1"><c>os:getenv/1</c></seealso>,
+ which removes the environment variable.</p>
+ </item>
+ <tag><c>{args, [ string() | binary() ]}</c></tag>
+ <item>
+ <p>Only valid for <c>{spawn_executable, <anno>FileName</anno>}</c>
+ and specifies arguments to the executable. Each argument
+ is specified as a separate string and (on Unix) eventually
+ ends up as one element each in the argument vector. On
+ other platforms, a similar behavior is mimicked.</p>
+ <p>The arguments are not expanded by the shell before
+ they are supplied to the executable. Most notably this
+ means that file wildcard expansion does not occur.
+ To expand wildcards for the arguments, use
+ <seealso marker="stdlib:filelib#wildcard/1">
+ <c>filelib:wildcard/1</c></seealso>.
+ Notice that even if
+ the program is a Unix shell script, meaning that the
+ shell ultimately is invoked, wildcard expansion
+ does not occur, and the script is provided with the
+ untouched arguments. On Windows, wildcard expansion
+ is always up to the program itself, therefore this is
+ not an issue.</p>
+ <p>The executable name (also known as <c>argv[0]</c>)
+ is not to be specified in this list. The proper executable name
+ is automatically used as <c>argv[0]</c>, where applicable.</p>
+ <p>If you explicitly want to set the
+ program name in the argument vector, option <c>arg0</c>
+ can be used.</p>
+ </item>
+ <tag><c>{arg0, string() | binary()}</c></tag>
+ <item>
+ <p>Only valid for <c>{spawn_executable, <anno>FileName</anno>}</c>
+ and explicitly specifies the program name argument when
+ running an executable. This can in some circumstances,
+ on some OSs, be desirable. How the program
+ responds to this is highly system-dependent and no specific
+ effect is guaranteed.</p>
+ </item>
<tag><c>exit_status</c></tag>
<item>
<p>Only valid for <c>{spawn, <anno>Command</anno>}</c>, where
<c><anno>Command</anno></c> refers to an external program, and
- for <c>{spawn_executable, <anno>FileName</anno>}</c>.</p>
+ for <c>{spawn_executable, <anno>FileName</anno>}</c>.</p>
<p>When the external process connected to the port exits, a
message of the form <c>{Port,{exit_status,Status}}</c> is
sent to the connected process, where <c>Status</c> is the
exit status of the external process. If the program
aborts on Unix, the same convention is used as the shells
do (that is, 128+signal).</p>
- <p>If option <c>eof</c> is also given, the messages <c>eof</c>
+ <p>If option <c>eof</c> is specified also, the messages <c>eof</c>
and <c>exit_status</c> appear in an unspecified order.</p>
<p>If the port program closes its <c>stdout</c> without exiting,
option <c>exit_status</c> does not work.</p>
@@ -3517,7 +3635,7 @@ os_prompt% </pre>
<tag><c>use_stdio</c></tag>
<item>
<p>Only valid for <c>{spawn, <anno>Command</anno>}</c> and
- <c>{spawn_executable, <anno>FileName</anno>}</c>. It
+ <c>{spawn_executable, <anno>FileName</anno>}</c>. It
allows the standard input and output (file descriptors 0
and 1) of the spawned (Unix) process for communication
with Erlang.</p>
@@ -3537,14 +3655,14 @@ os_prompt% </pre>
<tag><c>overlapped_io</c></tag>
<item>
<p>Affects ports to external programs on Windows only. The
- standard input and standard output handles of the port program
- are, if this option is supplied, opened with flag
- <c>FILE_FLAG_OVERLAPPED</c>, so that the port program can
- (and must) do
- overlapped I/O on its standard handles. This is not normally
- the case for simple port programs, but an option of value for the
- experienced Windows programmer. <em>On all other platforms, this
- option is silently discarded.</em></p>
+ standard input and standard output handles of the port program
+ are, if this option is supplied, opened with flag
+ <c>FILE_FLAG_OVERLAPPED</c>, so that the port program can
+ (and must) do
+ overlapped I/O on its standard handles. This is not normally
+ the case for simple port programs, but an option of value for the
+ experienced Windows programmer. <em>On all other platforms, this
+ option is silently discarded.</em></p>
</item>
<tag><c>in</c></tag>
<item>
@@ -3569,27 +3687,28 @@ os_prompt% </pre>
<tag><c>hide</c></tag>
<item>
<p>When running on Windows, suppresses creation of a new
- console window when spawning the port program.
- (This option has no effect on other platforms.)</p>
+ console window when spawning the port program.
+ (This option has no effect on other platforms.)</p>
</item>
<tag><c>{parallelism, Boolean}</c></tag>
<item>
- <marker id="open_port_parallelism"></marker>
+ <marker id="open_port_parallelism"></marker>
<p>Sets scheduler hint for port parallelism. If set to
- <c>true</c>, the Virtual Machine schedules port tasks;
- when doing so, it improves parallelism in the system. If set
- to <c>false</c>, the Virtual Machine tries to
- perform port tasks immediately, improving latency at the
- expense of parallelism. The default can be set at system startup
- by passing command-line argument
- <seealso marker="erl#+spp">+spp</seealso> to <c>erl(1)</c>.</p>
+ <c>true</c>, the virtual machine schedules port tasks;
+ when doing so, it improves parallelism in the system. If set
+ to <c>false</c>, the virtual machine tries to
+ perform port tasks immediately, improving latency at the
+ expense of parallelism. The default can be set at system startup
+ by passing command-line argument
+ <seealso marker="erl#+spp"><c>+spp</c></seealso> to
+ <c>erl(1)</c>.</p>
</item>
</taglist>
<p>Default is <c>stream</c> for all port types and
<c>use_stdio</c> for spawned ports.</p>
- <p>Failure: If the port cannot be opened, the exit reason is
- <c>badarg</c>, <c>system_limit</c>, or the POSIX error code that
- most closely describes the error, or <c>einval</c> if no POSIX
+ <p>Failure: if the port cannot be opened, the exit reason is
+ <c>badarg</c>, <c>system_limit</c>, or the POSIX error code that
+ most closely describes the error, or <c>einval</c> if no POSIX
code is appropriate:</p>
<taglist>
<tag><c>badarg</c></tag>
@@ -3615,11 +3734,11 @@ os_prompt% </pre>
<item>Full file table (for the entire OS).
</item>
<tag><c>eacces</c></tag>
- <item><c>Command</c> given in <c>{spawn_executable, Command}</c>
+ <item><c>Command</c> specified in <c>{spawn_executable, Command}</c>
does not point out an executable file.
</item>
<tag><c>enoent</c></tag>
- <item><c><anno>FileName</anno></c> given in
+ <item><c><anno>FileName</anno></c> specified in
<c>{spawn_executable, <anno>FileName</anno>}</c>
does not point out an existing file.
</item>
@@ -3629,13 +3748,12 @@ os_prompt% </pre>
errors arising when sending messages to it are reported to
the owning process using signals of the form
<c>{'EXIT', Port, PosixCode}</c>. For the possible values of
- <c>PosixCode</c>, see the
- <seealso marker="kernel:file">file(3)</seealso>
- manual page in <c>Kernel</c>.</p>
- <p>The maximum number of ports that can be open at the same
+ <c>PosixCode</c>, see
+ <seealso marker="kernel:file"><c>file(3)</c></seealso>.</p>
+ <p>The maximum number of ports that can be open at the same
time can be configured by passing command-line flag
- <seealso marker="erl#max_ports"><c>+Q</c></seealso> to
- <c>erl(1)</c>.</p>
+ <seealso marker="erl#max_ports"><c>+Q</c></seealso> to
+ <c>erl(1)</c>.</p>
</desc>
</func>
@@ -3646,11 +3764,11 @@ os_prompt% </pre>
<desc>
<p>Portable hash function that gives the same hash for
the same Erlang term regardless of machine architecture and
- <c>ERTS</c> version (the BIF was introduced in <c>ERTS</c> 4.9.1.1).
+ ERTS version (the BIF was introduced in ERTS 4.9.1.1).
The function returns a hash value for
<c><anno>Term</anno></c> within the range
<c>1..<anno>Range</anno></c>. The maximum value for
- <c><anno>Range</anno></c> is 2^32.</p>
+ <c><anno>Range</anno></c> is 2^32.</p>
<p>This BIF can be used instead of the old deprecated BIF
<c>erlang:hash/2</c>, as it calculates better hashes for
all data types, but consider using <c>phash2/1,2</c> instead.</p>
@@ -3666,11 +3784,11 @@ os_prompt% </pre>
<desc>
<p>Portable hash function that gives the same hash for
the same Erlang term regardless of machine architecture and
- <c>ERTS</c> version (the BIF was introduced in <c>ERTS</c> 5.2).
+ ERTS version (the BIF was introduced in ERTS 5.2).
The function returns a hash value for
- <c><anno>Term</anno></c> within the range
- <c>0..<anno>Range</anno>-1</c>. The maximum value for
- <c><anno>Range</anno></c> is 2^32. When without argument
+ <c><anno>Term</anno></c> within the range
+ <c>0..<anno>Range</anno>-1</c>. The maximum value for
+ <c><anno>Range</anno></c> is 2^32. When without argument
<c><anno>Range</anno></c>, a value in the range
0..2^27-1 is returned.</p>
<p>This BIF is always to be used for hashing terms. It
@@ -3690,66 +3808,109 @@ os_prompt% </pre>
representation of <c><anno>Pid</anno></c>.</p>
<warning>
<p>This BIF is intended for debugging and is not to be used
- in application programs.</p>
+ in application programs.</p>
</warning>
</desc>
</func>
<func>
+ <name name="port_call" arity="3"/>
+ <fsummary>Perform a synchronous call to a port with term data.</fsummary>
+ <desc>
+ <p>Performs a synchronous call to a port. The meaning of
+ <c><anno>Operation</anno></c> and <c><anno>Data</anno></c>
+ depends on the port, that is,
+ on the port driver. Not all port drivers support this feature.</p>
+ <p><c><anno>Port</anno></c> is a port identifier,
+ referring to a driver.</p>
+ <p><c><anno>Operation</anno></c> is an integer, which is passed on to
+ the driver.</p>
+ <p><c><anno>Data</anno></c> is any Erlang term. This data is converted
+ to binary term format and sent to the port.</p>
+ <p>Returns a term from the driver. The meaning of the returned
+ data also depends on the port driver.</p>
+ <p>Failures:</p>
+ <taglist>
+ <tag><c>badarg</c></tag>
+ <item>
+ If <c><anno>Port</anno></c> is not an identifier of an open port,
+ or the registered name of an open port. If the calling
+ process was previously linked to the closed port,
+ identified by <c><anno>Port</anno></c>, the exit signal
+ from the port is guaranteed to be delivered before this
+ <c>badarg</c> exception occurs.
+ </item>
+ <tag><c>badarg</c></tag>
+ <item>
+ If <c><anno>Operation</anno></c> does not fit in a 32-bit integer.
+ </item>
+ <tag><c>badarg</c></tag>
+ <item>
+ If the port driver does not support synchronous control operations.
+ </item>
+ <tag><c>badarg</c></tag>
+ <item>
+ If the port driver so decides for any reason (probably
+ something wrong with <c><anno>Operation</anno></c>
+ or <c><anno>Data</anno></c>).
+ </item>
+ </taglist>
+ </desc>
+ </func>
+
+ <func>
<name name="port_close" arity="1"/>
- <fsummary>Closes an open port.</fsummary>
- <desc>
- <p>Closes an open port. Roughly the same as
- <c><anno>Port</anno> ! {self(), close}</c> except for the error behavior
- (see the following), being synchronous, and that the port does
- <em>not</em> reply with <c>{Port, closed}</c>. Any process can
- close a port with <c>port_close/1</c>, not only the port owner
- (the connected process). If the calling process is linked to
+ <fsummary>Close an open port.</fsummary>
+ <desc>
+ <p>Closes an open port. Roughly the same as <c><anno>Port</anno> !
+ {self(), close}</c> except for the error behavior
+ (see below), being synchronous, and that the port does
+ <em>not</em> reply with <c>{Port, closed}</c>. Any process can
+ close a port with <c>port_close/1</c>, not only the port owner
+ (the connected process). If the calling process is linked to
the port identified by <c><anno>Port</anno></c>, the exit
- signal from the port is guaranteed to be delivered before
- <c>port_close/1</c> returns.</p>
+ signal from the port is guaranteed to be delivered before
+ <c>port_close/1</c> returns.</p>
<p>For comparison: <c><anno>Port</anno> ! {self(), close}</c>
- only fails with <c>badarg</c> if <c><anno>Port</anno></c> does
- not refer to a port or a process. If <c><anno>Port</anno></c>
- is a closed port, nothing happens. If <c><anno>Port</anno></c>
+ only fails with <c>badarg</c> if <c><anno>Port</anno></c> does
+ not refer to a port or a process. If <c><anno>Port</anno></c>
+ is a closed port, nothing happens. If <c><anno>Port</anno></c>
is an open port and the calling process is the port owner,
- the port replies with <c>{Port, closed}</c> when all buffers
- have been flushed and the port really closes. If the calling
- process is not the port owner, the <em>port owner</em> fails
- with <c>badsig</c>.</p>
+ the port replies with <c>{Port, closed}</c> when all buffers
+ have been flushed and the port really closes. If the calling
+ process is not the port owner, the <em>port owner</em> fails
+ with <c>badsig</c>.</p>
<p>Notice that any process can close a port using
<c><anno>Port</anno> ! {PortOwner, close}</c> as if it itself was
the port owner, but the reply always goes to the port owner.</p>
- <p>As from OTP R16, <c><anno>Port</anno> ! {PortOwner, close}</c> is truly
- asynchronous. Notice that this operation has always been
- documented as an asynchronous operation, while the underlying
- implementation has been synchronous. <c>port_close/1</c> is
- however still fully synchronous. This because of its error
- behavior.</p>
- <p>Failure: <c>badarg</c> if <c><anno>Port</anno></c> is not an identifier
- of an open port, or the registered name of an open port.
- If the calling process was previously linked to the closed
- port, identified by <c><anno>Port</anno></c>, the exit
- signal from the port is guaranteed to be delivered before
- this <c>badarg</c> exception occurs.</p>
+ <p>As from Erlang/OTP R16,
+ <c><anno>Port</anno> ! {PortOwner, close}</c> is truly
+ asynchronous. Notice that this operation has always been
+ documented as an asynchronous operation, while the underlying
+ implementation has been synchronous. <c>port_close/1</c> is
+ however still fully synchronous because of its error behavior.</p>
+ <p>Failure: <c>badarg</c> if <c><anno>Port</anno></c> is not an
+ identifier of an open port, or the registered name of an open port.
+ If the calling process was previously linked to the closed
+ port, identified by <c><anno>Port</anno></c>, the exit
+ signal from the port is guaranteed to be delivered before
+ this <c>badarg</c> exception occurs.</p>
</desc>
</func>
<func>
<name name="port_command" arity="2"/>
- <fsummary>Sends data to a port.</fsummary>
+ <fsummary>Send data to a port.</fsummary>
<desc>
<p>Sends data to a port. Same as
- <c><anno>Port</anno> ! {PortOwner, {command, Data}}</c> except
- for the error
- behavior and being synchronous (see the following). Any process
- can send data to a port with <c>port_command/2</c>, not only the
- port owner (the connected process).</p>
- <p>For comparison: <c><anno>Port</anno> ! {PortOwner, {command, Data}}</c>
- only fails with <c>badarg</c> if <c><anno>Port</anno></c>
- does not refer to a port or a process. If
- <c><anno>Port</anno></c> is a closed port, the data message
- disappears
+ <c><anno>Port</anno> ! {PortOwner, {command, Data}}</c> except for
+ the error behavior and being synchronous (see below). Any process
+ can send data to a port with <c>port_command/2</c>, not only the
+ port owner (the connected process).</p>
+ <p>For comparison: <c><anno>Port</anno> ! {PortOwner, {command,
+ Data}}</c> only fails with <c>badarg</c> if <c><anno>Port</anno></c>
+ does not refer to a port or a process. If <c><anno>Port</anno></c> is
+ a closed port, the data message disappears
without a sound. If <c><anno>Port</anno></c> is open and the calling
process is not the port owner, the <em>port owner</em> fails
with <c>badsig</c>. The port owner fails with <c>badsig</c>
@@ -3757,57 +3918,58 @@ os_prompt% </pre>
<p>Notice that any process can send to a port using
<c><anno>Port</anno> ! {PortOwner, {command, <anno>Data</anno>}}</c>
as if it itself was the port owner.</p>
- <p>If the port is busy, the calling process is suspended
- until the port is not busy any more.</p>
- <p>As from OTP-R16, <c><anno>Port</anno> ! {PortOwner, {command, Data}}</c>
- is truly asynchronous. Notice that this operation has always been
- documented as an asynchronous operation, while the underlying
- implementation has been synchronous. <c>port_command/2</c> is
- however still fully synchronous. This because of its error
- behavior.</p>
+ <p>If the port is busy, the calling process is suspended
+ until the port is not busy any more.</p>
+ <p>As from Erlang/OTP R16,
+ <c><anno>Port</anno> ! {PortOwner, {command, Data}}</c>
+ is truly asynchronous. Notice that this operation has always been
+ documented as an asynchronous operation, while the underlying
+ implementation has been synchronous. <c>port_command/2</c> is
+ however still fully synchronous because of its error behavior.</p>
<p>Failures:</p>
<taglist>
<tag><c>badarg</c></tag>
<item>
- If <c><anno>Port</anno></c> is not an identifier of an open
- port, or the registered name of an open port. If the
- calling process was previously linked to the closed port,
- identified by <c><anno>Port</anno></c>, the exit signal
- from the port is guaranteed to be delivered before this
- <c>badarg</c> exception occurs.
- </item>
+ <p>If <c><anno>Port</anno></c> is not an identifier of an open
+ port, or the registered name of an open port. If the
+ calling process was previously linked to the closed port,
+ identified by <c><anno>Port</anno></c>, the exit signal
+ from the port is guaranteed to be delivered before this
+ <c>badarg</c> exception occurs.</p>
+ </item>
<tag><c>badarg</c></tag>
<item>
- If <c><anno>Data</anno></c> is an invalid I/O list.
- </item>
- </taglist>
+ <p>If <c><anno>Data</anno></c> is an invalid I/O list.</p>
+ </item>
+ </taglist>
</desc>
</func>
<func>
<name name="port_command" arity="3"/>
- <fsummary>Sends data to a port.</fsummary>
+ <fsummary>Send data to a port.</fsummary>
<desc>
<p>Sends data to a port. <c>port_command(Port, Data, [])</c>
- equals <c>port_command(Port, Data)</c>.</p>
- <p>If the port command is aborted, <c>false</c> is returned,
- otherwise <c>true</c>.</p>
- <p>If the port is busy, the calling process is suspended
- until the port is not busy any more.</p>
- <p>The following <c><anno>Option</anno></c>s are valid:</p>
+ equals <c>port_command(Port, Data)</c>.</p>
+ <p>If the port command is aborted, <c>false</c> is returned,
+ otherwise <c>true</c>.</p>
+ <p>If the port is busy, the calling process is suspended
+ until the port is not busy anymore.</p>
+ <p><c><anno>Option</anno></c>s:</p>
<taglist>
<tag><c>force</c></tag>
<item>The calling process is not suspended if the port is
- busy, instead the port command is forced through. The
- call fails with a <c>notsup</c> exception if the
- driver of the port does not support this. For more
- information, see driver flag
- <seealso marker="driver_entry#driver_flags"><![CDATA[ERL_DRV_FLAG_SOFT_BUSY]]></seealso>.
+ busy, instead the port command is forced through. The
+ call fails with a <c>notsup</c> exception if the
+ driver of the port does not support this. For more
+ information, see driver flag
+ <seealso marker="driver_entry#driver_flags">
+ <c>![CDATA[ERL_DRV_FLAG_SOFT_BUSY]]</c></seealso>.
</item>
<tag><c>nosuspend</c></tag>
<item>The calling process is not suspended if the port is
- busy, instead the port command is aborted and
- <c>false</c> is returned.
+ busy, instead the port command is aborted and
+ <c>false</c> is returned.
</item>
</taglist>
<note>
@@ -3817,34 +3979,34 @@ os_prompt% </pre>
<taglist>
<tag><c>badarg</c></tag>
<item>
- If <c><anno>Port</anno></c> is not an identifier of an open
- port, or the registered name of an open port. If the
- calling process was previously linked to the closed port,
- identified by <c><anno>Port</anno></c>, the exit signal
- from the port is guaranteed to be delivered before this
- <c>badarg</c> exception occurs.
- </item>
+ If <c><anno>Port</anno></c> is not an identifier of an open
+ port, or the registered name of an open port. If the
+ calling process was previously linked to the closed port,
+ identified by <c><anno>Port</anno></c>, the exit signal
+ from the port is guaranteed to be delivered before this
+ <c>badarg</c> exception occurs.
+ </item>
<tag><c>badarg</c></tag>
<item>
- If <c><anno>Data</anno></c> is an invalid I/O list.
- </item>
+ If <c><anno>Data</anno></c> is an invalid I/O list.
+ </item>
<tag><c>badarg</c></tag>
<item>
- If <c><anno>OptionList</anno></c> is an invalid option list.
- </item>
+ If <c><anno>OptionList</anno></c> is an invalid option list.
+ </item>
<tag><c>notsup</c></tag>
<item>
- If option <c>force</c> has been passed, but the
- driver of the port does not allow forcing through
- a busy port.
- </item>
- </taglist>
+ If option <c>force</c> has been passed, but the
+ driver of the port does not allow forcing through
+ a busy port.
+ </item>
+ </taglist>
</desc>
</func>
<func>
<name name="port_connect" arity="2"/>
- <fsummary>Sets the owner of a port.</fsummary>
+ <fsummary>Set the owner of a port.</fsummary>
<desc>
<p>Sets the port owner (the connected port) to <c><anno>Pid</anno></c>.
Roughly the same as
@@ -3852,14 +4014,14 @@ os_prompt% </pre>
except for the following:</p>
<list type="bulleted">
<item>
- <p>The error behavior differs, see the following.</p>
+ <p>The error behavior differs, see below.</p>
</item>
<item>
<p>The port does <em>not</em> reply with
<c>{Port,connected}</c>.</p>
</item>
<item>
- <p><c>port_connect/1</c> is synchronous, see the following.</p>
+ <p><c>port_connect/1</c> is synchronous, see below.</p>
</item>
<item>
<p>The new port owner gets linked to the port.</p>
@@ -3871,7 +4033,7 @@ os_prompt% </pre>
<c>port_connect/2</c>.</p>
<p>For comparison:
<c><anno>Port</anno> ! {self(), {connect, <anno>Pid</anno>}}</c>
- only fails with <c>badarg</c> if <c><anno>Port</anno></c>
+ only fails with <c>badarg</c> if <c><anno>Port</anno></c>
does not refer to a port or a process. If
<c><anno>Port</anno></c> is a closed port, nothing happens.
If <c><anno>Port</anno></c>
@@ -3881,40 +4043,39 @@ os_prompt% </pre>
the port, while the new is not. If <c><anno>Port</anno></c> is an open
port and the calling process is not the port owner,
the <em>port owner</em> fails with <c>badsig</c>. The port
- owner fails with <c>badsig</c> also if <c><anno>Pid</anno></c> is not an
- existing local process identifier.</p>
+ owner fails with <c>badsig</c> also if <c><anno>Pid</anno></c> is not
+ an existing local process identifier.</p>
<p>Notice that any process can set the port owner using
<c><anno>Port</anno> ! {PortOwner, {connect, <anno>Pid</anno>}}</c>
as if it itself was the port owner, but the reply always goes to
the port owner.</p>
- <p>As from OTP-R16,
- <c><anno>Port</anno> ! {PortOwner, {connect, <anno>Pid</anno>}}</c> is
- truly asynchronous. Notice that this operation has always been
- documented as an asynchronous operation, while the underlying
- implementation has been synchronous. <c>port_connect/2</c> is
- however still fully synchronous. This because of its error
- behavior.</p>
+ <p>As from Erlang/OTP R16,
+ <c><anno>Port</anno> ! {PortOwner, {connect, <anno>Pid</anno>}}</c>
+ is truly asynchronous. Notice that this operation has always been
+ documented as an asynchronous operation, while the underlying
+ implementation has been synchronous. <c>port_connect/2</c> is
+ however still fully synchronous because of its error behavior.</p>
<p>Failures:</p>
<taglist>
<tag><c>badarg</c></tag>
<item>
- If <c><anno>Port</anno></c> is not an identifier of an open port, or
- the registered name of an open port. If the calling
- process was previously linked to the closed port,
- identified by <c><anno>Port</anno></c>, the exit signal
- from the port is guaranteed to be delivered before this
- <c>badarg</c> exception occurs.
- </item>
+ If <c><anno>Port</anno></c> is not an identifier of an open port,
+ or the registered name of an open port. If the calling
+ process was previously linked to the closed port,
+ identified by <c><anno>Port</anno></c>, the exit signal
+ from the port is guaranteed to be delivered before this
+ <c>badarg</c> exception occurs.
+ </item>
<tag><c>badarg</c></tag>
- <item>If process identified by <c>Pid</c> is not an existing
- local process.</item>
- </taglist>
+ <item>If the process identified by <c>Pid</c> is not an existing
+ local process.</item>
+ </taglist>
</desc>
</func>
<func>
<name name="port_control" arity="3"/>
- <fsummary>Performs a synchronous control operation on a port.</fsummary>
+ <fsummary>Perform a synchronous control operation on a port.</fsummary>
<desc>
<p>Performs a synchronous control operation on a port.
The meaning of <c><anno>Operation</anno></c> and
@@ -3928,71 +4089,24 @@ os_prompt% </pre>
<taglist>
<tag><c>badarg</c></tag>
<item>
- If <c><anno>Port</anno></c> is not an open port or the registered
- name of an open port.
- </item>
+ If <c><anno>Port</anno></c> is not an open port or the registered
+ name of an open port.
+ </item>
<tag><c>badarg</c></tag>
<item>
- If <c><anno>Operation</anno></c> cannot fit in a 32-bit integer.
- </item>
+ If <c><anno>Operation</anno></c> cannot fit in a 32-bit integer.
+ </item>
<tag><c>badarg</c></tag>
<item>
- If the port driver does not support synchronous control
- operations.
- </item>
+ If the port driver does not support synchronous control operations.
+ </item>
<tag><c>badarg</c></tag>
<item>
- If the port driver so decides for any reason (probably
+ If the port driver so decides for any reason (probably
something wrong with <c><anno>Operation</anno></c> or
<c><anno>Data</anno></c>).
- </item>
- </taglist>
- </desc>
- </func>
-
- <func>
- <name name="port_call" arity="3"/>
- <fsummary>Performs a synchronous call to a port with term data.</fsummary>
- <desc>
- <p>Performs a synchronous call to a port. The meaning of
- <c><anno>Operation</anno></c> and <c><anno>Data</anno></c>
- depends on the port, that is,
- on the port driver. Not all port drivers support this feature.</p>
- <p><c><anno>Port</anno></c> is a port identifier,
- referring to a driver.</p>
- <p><c><anno>Operation</anno></c> is an integer, which is passed on to
- the driver.</p>
- <p><c><anno>Data</anno></c> is any Erlang term. This data is converted
- to binary term format and sent to the port.</p>
- <p>Returns a term from the driver. The meaning of the returned
- data also depends on the port driver.</p>
- <p>Failures:</p>
- <taglist>
- <tag><c>badarg</c></tag>
- <item>
- If <c><anno>Port</anno></c> is not an identifier of an open port,
- or the registered name of an open port. If the calling
- process was previously linked to the closed port,
- identified by <c><anno>Port</anno></c>, the exit signal
- from the port is guaranteed to be delivered before this
- <c>badarg</c> exception occurs.
- </item>
- <tag><c>badarg</c></tag>
- <item>
- If <c><anno>Operation</anno></c> does not fit in a 32-bit integer.
- </item>
- <tag><c>badarg</c></tag>
- <item>
- If the port driver does not support synchronous control
- operations.
- </item>
- <tag><c>badarg</c></tag>
- <item>
- If the port driver so decides for any reason (probably
- something wrong with <c><anno>Operation</anno></c>
- or <c><anno>Data</anno></c>).
- </item>
- </taglist>
+ </item>
+ </taglist>
</desc>
</func>
@@ -4004,11 +4118,11 @@ os_prompt% </pre>
<c><anno>Port</anno></c>, or <c>undefined</c> if the port is not open.
The order of the tuples is undefined, and all the
tuples are not mandatory.
- If the port is closed and the calling process
- was previously linked to the port, the exit signal from the
- port is guaranteed to be delivered before <c>port_info/1</c>
- returns <c>undefined</c>.</p>
- <p>The result contains information about the following
+ If the port is closed and the calling process
+ was previously linked to the port, the exit signal from the
+ port is guaranteed to be delivered before <c>port_info/1</c>
+ returns <c>undefined</c>.</p>
+ <p>The result contains information about the following
<c>Item</c>s:</p>
<list type="bulleted">
<item><c>registered_name</c> (if the port has a registered
@@ -4021,9 +4135,9 @@ os_prompt% </pre>
<item><c>output</c></item>
</list>
<p>For more information about the different <c>Item</c>s, see
- <seealso marker="#port_info/2">port_info/2</seealso>.</p>
+ <seealso marker="#port_info/2"><c>port_info/2</c></seealso>.</p>
<p>Failure: <c>badarg</c> if <c>Port</c> is not a local port
- identifier, or an atom.</p>
+ identifier, or an atom.</p>
</desc>
</func>
@@ -4031,15 +4145,15 @@ os_prompt% </pre>
<name name="port_info" arity="2" clause_i="1"/>
<fsummary>Information about the connected process of a port.</fsummary>
<desc>
- <p><c><anno>Pid</anno></c> is the process identifier of the process
- connected to the port.</p>
- <p>If the port identified by <c><anno>Port</anno></c> is not open,
- <c>undefined</c> is returned. If the port is closed and the
- calling process was previously linked to the port, the exit
- signal from the port is guaranteed to be delivered before
- <c>port_info/2</c> returns <c>undefined</c>.</p>
+ <p><c><anno>Pid</anno></c> is the process identifier of the process
+ connected to the port.</p>
+ <p>If the port identified by <c><anno>Port</anno></c> is not open,
+ <c>undefined</c> is returned. If the port is closed and the
+ calling process was previously linked to the port, the exit
+ signal from the port is guaranteed to be delivered before
+ <c>port_info/2</c> returns <c>undefined</c>.</p>
<p>Failure: <c>badarg</c> if <c><anno>Port</anno></c> is not a local
- port identifier, or an atom.</p>
+ port identifier, or an atom.</p>
</desc>
</func>
@@ -4047,15 +4161,15 @@ os_prompt% </pre>
<name name="port_info" arity="2" clause_i="2"/>
<fsummary>Information about the internal index of a port.</fsummary>
<desc>
- <p><c><anno>Index</anno></c> is the internal index of the port. This
- index can be used to separate ports.</p>
- <p>If the port identified by <c><anno>Port</anno></c> is not open,
- <c>undefined</c> is returned. If the port is closed and the
- calling process was previously linked to the port, the exit
- signal from the port is guaranteed to be delivered before
- <c>port_info/2</c> returns <c>undefined</c>.</p>
+ <p><c><anno>Index</anno></c> is the internal index of the port. This
+ index can be used to separate ports.</p>
+ <p>If the port identified by <c><anno>Port</anno></c> is not open,
+ <c>undefined</c> is returned. If the port is closed and the
+ calling process was previously linked to the port, the exit
+ signal from the port is guaranteed to be delivered before
+ <c>port_info/2</c> returns <c>undefined</c>.</p>
<p>Failure: <c>badarg</c> if <c><anno>Port</anno></c> is not a local
- port identifier, or an atom.</p>
+ port identifier, or an atom.</p>
</desc>
</func>
@@ -4063,15 +4177,15 @@ os_prompt% </pre>
<name name="port_info" arity="2" clause_i="3"/>
<fsummary>Information about the input of a port.</fsummary>
<desc>
- <p><c><anno>Bytes</anno></c> is the total number of bytes
- read from the port.</p>
- <p>If the port identified by <c><anno>Port</anno></c> is not open,
- <c>undefined</c> is returned. If the port is closed and the
- calling process was previously linked to the port, the exit
- signal from the port is guaranteed to be delivered before
- <c>port_info/2</c> returns <c>undefined</c>.</p>
+ <p><c><anno>Bytes</anno></c> is the total number of bytes
+ read from the port.</p>
+ <p>If the port identified by <c><anno>Port</anno></c> is not open,
+ <c>undefined</c> is returned. If the port is closed and the
+ calling process was previously linked to the port, the exit
+ signal from the port is guaranteed to be delivered before
+ <c>port_info/2</c> returns <c>undefined</c>.</p>
<p>Failure: <c>badarg</c> if <c><anno>Port</anno></c> is not a local
- port identifier, or an atom.</p>
+ port identifier, or an atom.</p>
</desc>
</func>
@@ -4079,15 +4193,15 @@ os_prompt% </pre>
<name name="port_info" arity="2" clause_i="4"/>
<fsummary>Information about the links of a port.</fsummary>
<desc>
- <p><c><anno>Pids</anno></c> is a list of the process identifiers
- of the processes that the port is linked to.</p>
- <p>If the port identified by <c><anno>Port</anno></c> is not open,
- <c>undefined</c> is returned. If the port is closed and the
- calling process was previously linked to the port, the exit
- signal from the port is guaranteed to be delivered before
- <c>port_info/2</c> returns <c>undefined</c>.</p>
+ <p><c><anno>Pids</anno></c> is a list of the process identifiers
+ of the processes that the port is linked to.</p>
+ <p>If the port identified by <c><anno>Port</anno></c> is not open,
+ <c>undefined</c> is returned. If the port is closed and the
+ calling process was previously linked to the port, the exit
+ signal from the port is guaranteed to be delivered before
+ <c>port_info/2</c> returns <c>undefined</c>.</p>
<p>Failure: <c>badarg</c> if <c><anno>Port</anno></c> is not a local
- port identifier, or an atom.</p>
+ port identifier, or an atom.</p>
</desc>
</func>
@@ -4095,7 +4209,7 @@ os_prompt% </pre>
<name name="port_info" arity="2" clause_i="5"/>
<fsummary>Information about the locking of a port.</fsummary>
<desc>
- <p><c><anno>Locking</anno></c> is one of the following:</p>
+ <p><c><anno>Locking</anno></c> is one of the following:</p>
<list type="bulleted">
<item><c>false</c> (emulator without SMP support)</item>
<item><c>port_level</c> (port-specific locking)</item>
@@ -4103,13 +4217,13 @@ os_prompt% </pre>
</list>
<p>Notice that these results are highly implementation-specific
and can change in a future release.</p>
- <p>If the port identified by <c><anno>Port</anno></c> is not open,
- <c>undefined</c> is returned. If the port is closed and the
- calling process was previously linked to the port, the exit
- signal from the port is guaranteed to be delivered before
- <c>port_info/2</c> returns <c>undefined</c>.</p>
+ <p>If the port identified by <c><anno>Port</anno></c> is not open,
+ <c>undefined</c> is returned. If the port is closed and the
+ calling process was previously linked to the port, the exit
+ signal from the port is guaranteed to be delivered before
+ <c>port_info/2</c> returns <c>undefined</c>.</p>
<p>Failure: <c>badarg</c> if <c><anno>Port</anno></c> is not a local
- port identifier, or an atom.</p>
+ port identifier, or an atom.</p>
</desc>
</func>
@@ -4117,17 +4231,17 @@ os_prompt% </pre>
<name name="port_info" arity="2" clause_i="6"/>
<fsummary>Information about the memory size of a port.</fsummary>
<desc>
- <p><c><anno>Bytes</anno></c> is the total number of
- bytes allocated for this port by the runtime system. The
- port itself can have allocated memory that is not
- included in <c><anno>Bytes</anno></c>.</p>
- <p>If the port identified by <c><anno>Port</anno></c> is not open,
- <c>undefined</c> is returned. If the port is closed and the
- calling process was previously linked to the port, the exit
- signal from the port is guaranteed to be delivered before
- <c>port_info/2</c> returns <c>undefined</c>.</p>
+ <p><c><anno>Bytes</anno></c> is the total number of
+ bytes allocated for this port by the runtime system. The
+ port itself can have allocated memory that is not
+ included in <c><anno>Bytes</anno></c>.</p>
+ <p>If the port identified by <c><anno>Port</anno></c> is not open,
+ <c>undefined</c> is returned. If the port is closed and the
+ calling process was previously linked to the port, the exit
+ signal from the port is guaranteed to be delivered before
+ <c>port_info/2</c> returns <c>undefined</c>.</p>
<p>Failure: <c>badarg</c> if <c><anno>Port</anno></c> is not a local
- port identifier, or an atom.</p>
+ port identifier, or an atom.</p>
</desc>
</func>
@@ -4135,113 +4249,130 @@ os_prompt% </pre>
<name name="port_info" arity="2" clause_i="7"/>
<fsummary>Information about the monitors of a port.</fsummary>
<desc>
- <p><c><anno>Monitors</anno></c> represent processes that this port
- monitors.</p>
- <p>If the port identified by <c><anno>Port</anno></c> is not open,
- <c>undefined</c> is returned. If the port is closed and the
- calling process was previously linked to the port, the exit
- signal from the port is guaranteed to be delivered before
- <c>port_info/2</c> returns <c>undefined</c>.</p>
+ <p><c><anno>Monitors</anno></c> represent processes monitored by
+ this port.</p>
+ <p>If the port identified by <c><anno>Port</anno></c> is not open,
+ <c>undefined</c> is returned. If the port is closed and the
+ calling process was previously linked to the port, the exit
+ signal from the port is guaranteed to be delivered before
+ <c>port_info/2</c> returns <c>undefined</c>.</p>
<p>Failure: <c>badarg</c> if <c><anno>Port</anno></c> is not a local
- port identifier, or an atom.</p>
+ port identifier, or an atom.</p>
</desc>
</func>
<func>
<name name="port_info" arity="2" clause_i="8"/>
+ <fsummary>Which processes are monitoring this port.</fsummary>
+ <desc>
+ <p>Returns list of pids that are monitoring given port at the
+ moment.</p>
+ <p>If the port identified by <c><anno>Port</anno></c> is not open,
+ <c>undefined</c> is returned. If the port is closed and the
+ calling process was previously linked to the port, the exit
+ signal from the port is guaranteed to be delivered before
+ <c>port_info/2</c> returns <c>undefined</c>.</p>
+ <p>Failure: <c>badarg</c> if <c><anno>Port</anno></c> is not a local
+ port identifier, or an atom.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="port_info" arity="2" clause_i="9"/>
<fsummary>Information about the name of a port.</fsummary>
<desc>
- <p><c><anno>Name</anno></c> is the command name set by
- <seealso marker="#open_port/2">open_port/2</seealso>.</p>
- <p>If the port identified by <c><anno>Port</anno></c> is not open,
- <c>undefined</c> is returned. If the port is closed and the
- calling process was previously linked to the port, the exit
- signal from the port is guaranteed to be delivered before
- <c>port_info/2</c> returns <c>undefined</c>.</p>
+ <p><c><anno>Name</anno></c> is the command name set by
+ <seealso marker="#open_port/2"><c>open_port/2</c></seealso>.</p>
+ <p>If the port identified by <c><anno>Port</anno></c> is not open,
+ <c>undefined</c> is returned. If the port is closed and the
+ calling process was previously linked to the port, the exit
+ signal from the port is guaranteed to be delivered before
+ <c>port_info/2</c> returns <c>undefined</c>.</p>
<p>Failure: <c>badarg</c> if <c><anno>Port</anno></c> is not a local
- port identifier, or an atom.</p>
+ port identifier, or an atom.</p>
</desc>
</func>
<func>
- <name name="port_info" arity="2" clause_i="9"/>
+ <name name="port_info" arity="2" clause_i="10"/>
<fsummary>Information about the OS pid of a port.</fsummary>
<desc>
- <p><c><anno>OsPid</anno></c> is the process identifier (or equivalent)
- of an OS process created with
- <seealso marker="#open_port/2">open_port({spawn | spawn_executable,
- Command}, Options)</seealso>. If the port is not the result of spawning
- an OS process, the value is <c>undefined</c>.</p>
- <p>If the port identified by <c><anno>Port</anno></c> is not open,
- <c>undefined</c> is returned. If the port is closed and the
- calling process was previously linked to the port, the exit
- signal from the port is guaranteed to be delivered before
- <c>port_info/2</c> returns <c>undefined</c>.</p>
+ <p><c><anno>OsPid</anno></c> is the process identifier (or equivalent)
+ of an OS process created with
+ <seealso marker="#open_port/2"><c>open_port({spawn | spawn_executable,
+ Command}, Options)</c></seealso>. If the port is not the result of
+ spawning an OS process, the value is <c>undefined</c>.</p>
+ <p>If the port identified by <c><anno>Port</anno></c> is not open,
+ <c>undefined</c> is returned. If the port is closed and the
+ calling process was previously linked to the port, the exit
+ signal from the port is guaranteed to be delivered before
+ <c>port_info/2</c> returns <c>undefined</c>.</p>
<p>Failure: <c>badarg</c> if <c><anno>Port</anno></c> is not a local
- port identifier, or an atom.</p>
+ port identifier, or an atom.</p>
</desc>
</func>
<func>
- <name name="port_info" arity="2" clause_i="10"/>
+ <name name="port_info" arity="2" clause_i="11"/>
<fsummary>Information about the output of a port.</fsummary>
<desc>
- <p><c><anno>Bytes</anno></c> is the total number of bytes written
- to the port from Erlang processes using
- <seealso marker="#port_command/2">port_command/2</seealso>,
- <seealso marker="#port_command/3">port_command/3</seealso>,
- or <c><anno>Port</anno> ! {Owner, {command, Data}</c>.</p>
- <p>If the port identified by <c><anno>Port</anno></c> is not open,
- <c>undefined</c> is returned. If the port is closed and the
- calling process was previously linked to the port, the exit
- signal from the port is guaranteed to be delivered before
- <c>port_info/2</c> returns <c>undefined</c>.</p>
+ <p><c><anno>Bytes</anno></c> is the total number of bytes written
+ to the port from Erlang processes using
+ <seealso marker="#port_command/2"><c>port_command/2</c></seealso>,
+ <seealso marker="#port_command/3"><c>port_command/3</c></seealso>,
+ or <c><anno>Port</anno> ! {Owner, {command, Data}</c>.</p>
+ <p>If the port identified by <c><anno>Port</anno></c> is not open,
+ <c>undefined</c> is returned. If the port is closed and the
+ calling process was previously linked to the port, the exit
+ signal from the port is guaranteed to be delivered before
+ <c>port_info/2</c> returns <c>undefined</c>.</p>
<p>Failure: <c>badarg</c> if <c><anno>Port</anno></c> is not a local
- port identifier, or an atom.</p>
+ port identifier, or an atom.</p>
</desc>
</func>
<func>
- <name name="port_info" arity="2" clause_i="11"/>
+ <name name="port_info" arity="2" clause_i="12"/>
<fsummary>Information about the parallelism hint of a port.</fsummary>
<desc>
- <p><c><anno>Boolean</anno></c> corresponds to the port parallelism
- hint being used by this port. For more information, see option
- <seealso marker="#open_port_parallelism">parallelism</seealso>
- of <seealso marker="#open_port/2">open_port/2</seealso>.</p>
+ <p><c><anno>Boolean</anno></c> corresponds to the port parallelism
+ hint used by this port. For more information, see option
+ <seealso marker="#open_port_parallelism"><c>parallelism</c></seealso>
+ of <seealso marker="#open_port/2"><c>open_port/2</c></seealso>.</p>
</desc>
</func>
<func>
- <name name="port_info" arity="2" clause_i="12"/>
+ <name name="port_info" arity="2" clause_i="13"/>
<fsummary>Information about the queue size of a port.</fsummary>
<desc>
- <p><c><anno>Bytes</anno></c> is the total number
- of bytes queued by the port using the <c>ERTS</c> driver queue
- implementation.</p>
- <p>If the port identified by <c><anno>Port</anno></c> is not open,
- <c>undefined</c> is returned. If the port is closed and the
- calling process was previously linked to the port, the exit
- signal from the port is guaranteed to be delivered before
- <c>port_info/2</c> returns <c>undefined</c>.</p>
+ <p><c><anno>Bytes</anno></c> is the total number
+ of bytes queued by the port using the ERTS driver queue
+ implementation.</p>
+ <p>If the port identified by <c><anno>Port</anno></c> is not open,
+ <c>undefined</c> is returned. If the port is closed and the
+ calling process was previously linked to the port, the exit
+ signal from the port is guaranteed to be delivered before
+ <c>port_info/2</c> returns <c>undefined</c>.</p>
<p>Failure: <c>badarg</c> if <c><anno>Port</anno></c> is not a local
- port identifier, or an atom.</p>
+ port identifier, or an atom.</p>
</desc>
</func>
<func>
- <name name="port_info" arity="2" clause_i="13"/>
+ <name name="port_info" arity="2" clause_i="14"/>
<fsummary>Information about the registered name of a port.</fsummary>
<desc>
- <p><c><anno>RegisteredName</anno></c> is the registered name of
- the port. If the port has no registered name, <c>[]</c> is returned.</p>
- <p>If the port identified by <c><anno>Port</anno></c> is not open,
- <c>undefined</c> is returned. If the port is closed and the
- calling process was previously linked to the port, the exit
- signal from the port is guaranteed to be delivered before
- <c>port_info/2</c> returns <c>undefined</c>.</p>
+ <p><c><anno>RegisteredName</anno></c> is the registered name of
+ the port. If the port has no registered name, <c>[]</c> is
+ returned.</p>
+ <p>If the port identified by <c><anno>Port</anno></c> is not open,
+ <c>undefined</c> is returned. If the port is closed and the
+ calling process was previously linked to the port, the exit
+ signal from the port is guaranteed to be delivered before
+ <c>port_info/2</c> returns <c>undefined</c>.</p>
<p>Failure: <c>badarg</c> if <c><anno>Port</anno></c> is not a local
- port identifier, or an atom.</p>
+ port identifier, or an atom.</p>
</desc>
</func>
@@ -4253,24 +4384,24 @@ os_prompt% </pre>
representation of the port identifier <c><anno>Port</anno></c>.</p>
<warning>
<p>This BIF is intended for debugging. It is not to be used
- in application programs.</p>
+ in application programs.</p>
</warning>
</desc>
</func>
<func>
<name name="ports" arity="0"/>
- <fsummary>Lists all existing ports.</fsummary>
+ <fsummary>List all existing ports.</fsummary>
<desc>
- <p>Returns a list of port identifiers corresponding to all the
- ports existing on the local node.</p>
- <p>Notice that an exiting port exists, but is not open.</p>
+ <p>Returns a list of port identifiers corresponding to all the
+ ports existing on the local node.</p>
+ <p>Notice that an exiting port exists, but is not open.</p>
</desc>
</func>
<func>
<name name="pre_loaded" arity="0"/>
- <fsummary>Lists all pre-loaded modules.</fsummary>
+ <fsummary>List all preloaded modules.</fsummary>
<desc>
<p>Returns a list of Erlang modules that are preloaded in
the system. As all loading of code is done through the file
@@ -4281,12 +4412,13 @@ os_prompt% </pre>
<func>
<name name="process_display" arity="2"/>
- <fsummary>Writes information about a local process on standard error.</fsummary>
+ <fsummary>Write information about a local process on standard error.
+ </fsummary>
<desc>
<p>Writes information about the local process <c><anno>Pid</anno></c> on
standard error. The only allowed value for the atom
- <c><anno>Type</anno></c> is <c>backtrace</c>, which shows the contents of
- the call stack, including information about the call chain, with
+ <c><anno>Type</anno></c> is <c>backtrace</c>, which shows the contents
+ of the call stack, including information about the call chain, with
the current function printed first. The format of the output
is not further defined.</p>
</desc>
@@ -4294,7 +4426,7 @@ os_prompt% </pre>
<func>
<name name="process_flag" arity="2" clause_i="1"/>
- <fsummary>Sets process flag <c>trap_exit</c> for the calling process.</fsummary>
+ <fsummary>Set process flag trap_exit for the calling process.</fsummary>
<desc>
<p>When <c>trap_exit</c> is set to <c>true</c>, exit signals
arriving to a process are converted to <c>{'EXIT', From, Reason}</c>
@@ -4305,13 +4437,14 @@ os_prompt% </pre>
linked processes. Application processes are normally
not to trap exits.</p>
<p>Returns the old value of the flag.</p>
- <p>See also <seealso marker="#exit/2">exit/2</seealso>.</p>
+ <p>See also <seealso marker="#exit/2"><c>exit/2</c></seealso>.</p>
</desc>
</func>
<func>
<name name="process_flag" arity="2" clause_i="2"/>
- <fsummary>Sets process flag <c>error_handler</c> for the calling process.</fsummary>
+ <fsummary>Set process flag error_handler for the calling process.
+ </fsummary>
<desc>
<p>Used by a process to redefine the error handler
for undefined function calls and undefined registered
@@ -4322,11 +4455,12 @@ os_prompt% </pre>
</desc>
</func>
- <marker id="process_flag_min_heap_size"/>
<func>
<name name="process_flag" arity="2" clause_i="3"/>
- <fsummary>Sets process flag <c>min_heap_size</c> for the calling process.</fsummary>
+ <fsummary>Set process flag min_heap_size for the calling process.
+ </fsummary>
<desc>
+ <marker id="process_flag_min_heap_size"/>
<p>Changes the minimum heap size for the calling process.</p>
<p>Returns the old value of the flag.</p>
</desc>
@@ -4334,158 +4468,139 @@ os_prompt% </pre>
<func>
<name name="process_flag" arity="2" clause_i="4"/>
- <fsummary>Sets process flag <c>min_bin_vheap_size</c> for the calling process.</fsummary>
+ <fsummary>Set process flag min_bin_vheap_size for the calling process.
+ </fsummary>
<desc>
<p>Changes the minimum binary virtual heap size for the calling
process.</p>
<p>Returns the old value of the flag.</p>
</desc>
</func>
- <marker id="process_flag_max_heap_size"/>
+
<func>
<name name="process_flag" arity="2" clause_i="5"/>
+ <fsummary>Set process flag max_heap_size for the calling process.
+ </fsummary>
<type name="max_heap_size"/>
- <fsummary>Sets process flag <c>max_heap_size</c> for the calling process.</fsummary>
<desc>
- <p>
- This flag sets the maximum heap size for the calling process.
+ <marker id="process_flag_max_heap_size"/>
+ <p>This flag sets the maximum heap size for the calling process.
If <c><anno>MaxHeapSize</anno></c> is an integer, the system default
values for <c>kill</c> and <c>error_logger</c> are used.
- <taglist>
- <tag><c>size</c></tag>
- <item>
- <p>
- The maximum size in words of the process. If set to zero, the
- heap size limit is disabled. Badarg will be thrown if the value is
- smaller than
- <seealso marker="#process_flag_min_heap_size"><c>min_heap_size</c></seealso>.
- The size check is only done when a garbage collection is triggered.
- </p>
- <p>
- <c>size</c> is the entire heap of the process when garbage collection
- is triggered, this includes all generational heaps, the process stack,
- any <seealso marker="#process_flag_message_queue_data">
- messages that are considered to be part of the heap</seealso> and any
- extra memory that the garbage collector needs during collection.
- </p>
- <p>
- <c>size</c> is the same as can be retrieved using
- <seealso marker="#process_info_total_heap_size">
- <c>erlang:process_info(Pid, total_heap_size)</c></seealso>,
- or by adding <c>heap_block_size</c>, <c>old_heap_block_size</c>
- and <c>mbuf_size</c> from <seealso marker="#process_info_garbage_collection_info">
- <c>erlang:process_info(Pid, garbage_collection_info)</c></seealso>.
- </p>
- </item>
- <tag><c>kill</c></tag>
- <item>
- <p>
- When set to <c>true</c> the runtime system will send an
- untrappable exit signal with reason <c>kill</c> to the process
- if the maximum heap size is reached. The garbage collection
- that triggered the <c>kill</c> will not be completed, instead the
- process will exit as soon as is possible. When set to <c>false</c>
- no exit signal will be sent to the process, instead it will
- continue executing.
- </p>
- <p>
- If <c>kill</c> is not defined in the map
- the system default will be used. The default system default
- is <c>true</c>. It can be changed by either the erl
- <seealso marker="erl#+hmaxk">+hmaxk</seealso> option,
- or <seealso marker="#system_flag_max_heap_size"><c>
- erlang:system_flag(max_heap_size, MaxHeapSize)</c></seealso>.
- </p>
- </item>
- <tag><c>error_logger</c></tag>
- <item>
- <p>
- When set to <c>true</c> the runtime system will send a
- message to the current <seealso marker="kernel:error_logger"><c>error_logger</c></seealso>
- containing details about the process when the maximum
- heap size is reached. One <c>error_logger</c> report will
- be sent each time the limit is reached.
- </p>
- <p>
- If <c>error_logger</c> is not defined in the map the system
- default will be used. The default system default is <c>true</c>.
- It can be changed by either the erl <seealso marker="erl#+hmaxel">+hmaxel</seealso>
- option, or <seealso marker="#system_flag_max_heap_size"><c>
- erlang:system_flag(max_heap_size, MaxHeapSize)</c></seealso>.
- </p>
- </item>
- <p>
- The heap size of a process is quite hard to predict, especially the
- amount of memory that is used during the garbage collection. When
- contemplating using this option, it is recommended to first run
- it in production with <c>kill</c> set to <c>false</c> and inspect
- the <c>error_logger</c> reports to see what the normal peak sizes
- of the processes in the system is and then tune the value
- accordingly.
- </p>
- </taglist>
+ </p>
+ <taglist>
+ <tag><c>size</c></tag>
+ <item>
+ <p>The maximum size in words of the process. If set to zero, the
+ heap size limit is disabled. <c>badarg</c> is be thrown if the
+ value is smaller than <seealso marker="#process_flag_min_heap_size">
+ <c>min_heap_size</c></seealso>. The size check is only done when
+ a garbage collection is triggered.</p>
+ <p><c>size</c> is the entire heap of the process when garbage collection
+ is triggered. This includes all generational heaps, the process stack,
+ any <seealso marker="#process_flag_message_queue_data">
+ messages that are considered to be part of the heap</seealso>, and any
+ extra memory that the garbage collector needs during collection.</p>
+ <p><c>size</c> is the same as can be retrieved using
+ <seealso marker="#process_info_total_heap_size">
+ <c>erlang:process_info(Pid, total_heap_size)</c></seealso>,
+ or by adding <c>heap_block_size</c>, <c>old_heap_block_size</c>
+ and <c>mbuf_size</c> from <seealso marker="#process_info_garbage_collection_info">
+ <c>erlang:process_info(Pid, garbage_collection_info)</c></seealso>.</p>
+ </item>
+ <tag><c>kill</c></tag>
+ <item>
+ <p>When set to <c>true</c>, the runtime system sends an
+ untrappable exit signal with reason <c>kill</c> to the process
+ if the maximum heap size is reached. The garbage collection
+ that triggered the <c>kill</c> is not completed, instead the
+ process exits as soon as possible. When set to <c>false</c>,
+ no exit signal is sent to the process, instead it continues
+ executing.</p>
+ <p>If <c>kill</c> is not defined in the map,
+ the system default will be used. The default system default
+ is <c>true</c>. It can be changed by either option
+ <seealso marker="erl#+hmaxk">+hmaxk</seealso> in <c>erl(1)</c>,
+ or <seealso marker="#system_flag_max_heap_size">
+ <c>erlang:system_flag(max_heap_size, MaxHeapSize)</c></seealso>.</p>
+ </item>
+ <tag><c>error_logger</c></tag>
+ <item>
+ <p>When set to <c>true</c>, the runtime system sends a
+ message to the current <seealso marker="kernel:error_logger">
+ <c>error_logger</c></seealso>
+ containing details about the process when the maximum
+ heap size is reached. One <c>error_logger</c> report is sent
+ each time the limit is reached.</p>
+ <p>If <c>error_logger</c> is not defined in the map, the system
+ default is used. The default system default is <c>true</c>.
+ It can be changed by either the option
+ <seealso marker="erl#+hmaxel">+hmaxel</seealso> int <c>erl(1)</c>,
+ or <seealso marker="#system_flag_max_heap_size">
+ <c>erlang:system_flag(max_heap_size, MaxHeapSize)</c></seealso>.</p>
+ </item>
+ </taglist>
+ <p>The heap size of a process is quite hard to predict, especially the
+ amount of memory that is used during the garbage collection. When
+ contemplating using this option, it is recommended to first run
+ it in production with <c>kill</c> set to <c>false</c> and inspect
+ the <c>error_logger</c> reports to see what the normal peak sizes
+ of the processes in the system is and then tune the value
+ accordingly.
</p>
</desc>
</func>
- <marker id="process_flag_message_queue_data"/>
+
<func>
<name name="process_flag" arity="2" clause_i="6"/>
- <fsummary>Set process flag <c>message_queue_data</c> for the calling process</fsummary>
+ <fsummary>Set process flag message_queue_data for the calling process.
+ </fsummary>
<type name="message_queue_data"/>
<desc>
- <p>This flag determines how messages in the message queue
- are stored. When the flag is:</p>
+ <marker id="process_flag_message_queue_data"/>
+ <p>This flag determines how messages in the message queue
+ are stored, as follows:</p>
<taglist>
<tag><c>off_heap</c></tag>
- <item><p>
- <em>All</em> messages in the message queue will be stored
- outside of the process heap. This implies that <em>no</em>
- messages in the message queue will be part of a garbage
- collection of the process.
- </p></item>
+ <item>
+ <p><em>All</em> messages in the message queue will be stored
+ outside of the process heap. This implies that <em>no</em>
+ messages in the message queue will be part of a garbage
+ collection of the process.</p>
+ </item>
<tag><c>on_heap</c></tag>
- <item><p>
- All messages in the message queue will eventually be
- placed on heap. They may however temporarily be stored
- off heap. This is how messages always have been stored
- up until ERTS version 8.0.
- </p></item>
- <tag><c>mixed</c></tag>
- <item><p>
- Messages may be placed either on the heap or outside
- of the heap.
- </p></item>
+ <item>
+ <p>All messages in the message queue will eventually be
+ placed on heap. They can however temporarily be stored
+ off heap. This is how messages always have been stored
+ up until ERTS 8.0.</p>
+ </item>
</taglist>
- <p>
- The default <c>message_queue_data</c> process flag is determined
- by the <seealso marker="erl#+hmqd"><c>+hmqd</c></seealso>
- <c>erl</c> command line argument.
- </p>
- <p>
- If the process potentially may get a hugh amount of messages,
- you are recommended to set the flag to <c>off_heap</c>. This
- since a garbage collection with lots of messages placed on
- the heap may become extremly expensive and the process may
- consume large amounts of memory. Performance of the
- actual message passing is however generally better when not
- using the <c>off_heap</c> flag.
- </p>
- <p>
- When changing this flag messages will be moved. This work
- has been initiated but not completed when this function
- call returns.
- </p>
+ <p>The default <c>message_queue_data</c> process flag is determined
+ by command-line argument <seealso marker="erl#+hmqd">
+ <c>+hmqd</c></seealso> in <c>erl(1)</c>.</p>
+ <p>If the process potentially can get many messages,
+ you are advised to set the flag to <c>off_heap</c>. This
+ because a garbage collection with many messages placed on
+ the heap can become extremly expensive and the process can
+ consume large amounts of memory. Performance of the
+ actual message passing is however generally better when not
+ using flag <c>off_heap</c>.</p>
+ <p>When changing this flag messages will be moved. This work
+ has been initiated but not completed when this function
+ call returns.</p>
<p>Returns the old value of the flag.</p>
</desc>
</func>
+
<func>
<name name="process_flag" arity="2" clause_i="7"/>
- <fsummary>Sets process flag <c>priority</c> for the calling process.</fsummary>
+ <fsummary>Set process flag priority for the calling process.</fsummary>
<type name="priority_level"/>
<desc>
<p><marker id="process_flag_priority"></marker>
Sets the process priority. <c><anno>Level</anno></c> is an atom.
- There are four priority levels: <c>low</c>,
+ Four priority levels exist: <c>low</c>,
<c>normal</c>, <c>high</c>, and <c>max</c>. Default
is <c>normal</c>.</p>
<note>
@@ -4499,23 +4614,23 @@ os_prompt% </pre>
<c>low</c> are interleaved. Processes on priority
<c>low</c> are selected for execution less
frequently than processes on priority <c>normal</c>.</p>
- <p>When there are runnable processes on priority <c>high</c>,
+ <p>When runnable processes on priority <c>high</c> exist,
no processes on priority <c>low</c> or <c>normal</c> are
- selected for execution. Notice however, that this does
+ selected for execution. Notice however that this does
<em>not</em> mean that no processes on priority <c>low</c>
- or <c>normal</c> can run when there are processes
- running on priority <c>high</c>. On the runtime
+ or <c>normal</c> can run when processes
+ are running on priority <c>high</c>. On the runtime
system with SMP support, more processes can be running
- in parallel than processes on priority <c>high</c>, that is,
+ in parallel than processes on priority <c>high</c>. That is,
a <c>low</c> and a <c>high</c> priority process can
execute at the same time.</p>
- <p>When there are runnable processes on priority <c>max</c>,
+ <p>When runnable processes on priority <c>max</c> exist,
no processes on priority <c>low</c>, <c>normal</c>, or
<c>high</c> are selected for execution. As with priority
<c>high</c>, processes on lower priorities can
execute in parallel with processes on priority <c>max</c>.</p>
- <p>Scheduling is preemptive. Regardless of priority, a process
- is preempted when it has consumed more than a certain number
+ <p>Scheduling is pre-emptive. Regardless of priority, a process
+ is pre-empted when it has consumed more than a certain number
of reductions since the last time it was selected for
execution.</p>
<note>
@@ -4531,7 +4646,7 @@ os_prompt% </pre>
take this into account and handle such scenarios by
yourself.</p>
<p>Making calls from a <c>high</c> priority process into code
- that you have no control over can cause the <c>high</c>
+ that you has no control over can cause the <c>high</c>
priority process to wait for a process with lower
priority. That is, effectively decreasing the priority of the
<c>high</c> priority process during the call. Even if this
@@ -4545,8 +4660,8 @@ os_prompt% </pre>
<em>especially</em> priority <c>high</c>. A
process on priority <c>high</c> is only
to perform work for short periods. Busy looping for
- long periods in a <c>high</c> priority process does
- most likely cause problems, as important OTP servers
+ long periods in a <c>high</c> priority process causes
+ most likely problems, as important OTP servers
run on priority <c>normal</c>.</p>
<p>Returns the old value of the flag.</p>
</desc>
@@ -4554,10 +4669,10 @@ os_prompt% </pre>
<func>
<name name="process_flag" arity="2" clause_i="8"/>
- <fsummary>Sets process flag <c>save_calls</c> for the calling process.</fsummary>
+ <fsummary>Set process flag save_calls for the calling process.</fsummary>
<desc>
<p><c><anno>N</anno></c> must be an integer in the interval 0..10000.
- If <c><anno>N</anno></c> is greater than 0, call saving is made
+ If <c><anno>N</anno></c> &gt; 0, call saving is made
active for the
process. This means that information about the <c><anno>N</anno></c>
most recent global function calls, BIF calls, sends, and
@@ -4568,12 +4683,12 @@ os_prompt% </pre>
explicitly mentioned. Only a fixed amount of information
is saved, as follows:</p>
<list type="bulleted">
- <item>A tuple <c>{Module, Function, Arity}</c> for
- function calls</item>
- <item> The atoms <c>send</c>, <c>'receive'</c>, and
+ <item><p>A tuple <c>{Module, Function, Arity}</c> for
+ function calls</p></item>
+ <item><p>The atoms <c>send</c>, <c>'receive'</c>, and
<c>timeout</c> for sends and receives (<c>'receive'</c>
when a message is received and <c>timeout</c> when a
- receive times out)</item>
+ receive times out)</p></item>
</list>
<p>If <c>N</c> = 0,
call saving is disabled for the process, which is the
@@ -4585,7 +4700,7 @@ os_prompt% </pre>
<func>
<name name="process_flag" arity="2" clause_i="9"/>
- <fsummary>Sets process flag <c>sensitive</c> for the calling process.</fsummary>
+ <fsummary>Set process flag sensitive for the calling process.</fsummary>
<desc>
<p>Sets or clears flag <c>sensitive</c> for the current process.
When a process has been marked as sensitive by calling
@@ -4595,13 +4710,13 @@ os_prompt% </pre>
<p>Features that are disabled include (but are not limited to)
the following:</p>
<list type="bulleted">
- <item>Tracing: Trace flags can still be set for the process,
+ <item><p>Tracing. Trace flags can still be set for the process,
but no trace messages of any kind are generated. (If flag
<c>sensitive</c> is turned off, trace messages are again
- generated if any trace flags are set.)</item>
- <item>Sequential tracing: The sequential trace token is
+ generated if any trace flags are set.)</p></item>
+ <item><p>Sequential tracing. The sequential trace token is
propagated as usual, but no sequential trace messages are
- generated.</item>
+ generated.</p></item>
</list>
<p><c>process_info/1,2</c> cannot be used to read out the
message queue or the process dictionary (both are returned
@@ -4611,19 +4726,19 @@ os_prompt% </pre>
are omitted.</p>
<p>If <c>{save_calls,N}</c> has been set for the process, no
function calls are saved to the call saving list.
- (The call saving list is not cleared. Furthermore, send, receive,
- and timeout events are still added to the list.)</p>
+ (The call saving list is not cleared. Also, send, receive,
+ and time-out events are still added to the list.)</p>
<p>Returns the old value of the flag.</p>
</desc>
</func>
<func>
<name name="process_flag" arity="3"/>
- <fsummary>Sets process flags for a process.</fsummary>
+ <fsummary>Set process flags for a process.</fsummary>
<desc>
<p>Sets certain flags for the process <c><anno>Pid</anno></c>,
in the same manner as
- <seealso marker="#process_flag/2">process_flag/2</seealso>.
+ <seealso marker="#process_flag/2"><c>process_flag/2</c></seealso>.
Returns the old value of the flag. The valid values for
<c><anno>Flag</anno></c> are only a subset of those allowed in
<c>process_flag/2</c>, namely <c>save_calls</c>.</p>
@@ -4638,46 +4753,46 @@ os_prompt% </pre>
<type name="process_info_result_item"/>
<type name="priority_level"/>
<type name="stack_item"/>
- <type name="max_heap_size" />
- <type name="message_queue_data" />
+ <type name="max_heap_size"/>
+ <type name="message_queue_data"/>
<desc>
<p>Returns a list containing <c><anno>InfoTuple</anno></c>s with
- miscellaneous information about the process identified by
- <c>Pid</c>, or <c>undefined</c> if the process is not alive.</p>
- <p>The order of the <c><anno>InfoTuple</anno></c>s is undefined and
- all <c><anno>InfoTuple</anno></c>s are not mandatory.
+ miscellaneous information about the process identified by
+ <c>Pid</c>, or <c>undefined</c> if the process is not alive.</p>
+ <p>The order of the <c><anno>InfoTuple</anno></c>s is undefined and
+ all <c><anno>InfoTuple</anno></c>s are not mandatory.
The <c><anno>InfoTuple</anno></c>s
- part of the result can be changed without prior notice.</p>
- <p>The <c><anno>InfoTuple</anno></c>s with the following items
- are part of the result:</p>
+ part of the result can be changed without prior notice.</p>
+ <p>The <c><anno>InfoTuple</anno></c>s with the following items
+ are part of the result:</p>
<list type="bulleted">
<item><c>current_function</c></item>
<item><c>initial_call</c></item>
<item><c>status</c></item>
- <item><c>message_queue_len</c></item>
+ <item><c>message_queue_len</c></item>
<item><c>messages</c></item>
<item><c>links</c></item>
- <item><c>dictionary</c></item>
+ <item><c>dictionary</c></item>
<item><c>trap_exit</c></item>
<item><c>error_handler</c></item>
- <item><c>priority</c></item>
+ <item><c>priority</c></item>
<item><c>group_leader</c></item>
<item><c>total_heap_size</c></item>
- <item><c>heap_size</c></item>
+ <item><c>heap_size</c></item>
<item><c>stack_size</c></item>
<item><c>reductions</c></item>
- <item><c>garbage_collection</c></item>
+ <item><c>garbage_collection</c></item>
</list>
<p>If the process identified by <c><anno>Pid</anno></c> has a
registered name,
- also an <c><anno>InfoTuple</anno></c> with item <c>registered_name</c>
- appears.</p>
- <p>For information about specific <c><anno>InfoTuple</anno></c>s, see
- <seealso marker="#process_info/2">process_info/2</seealso>.</p>
+ also an <c><anno>InfoTuple</anno></c> with item <c>registered_name</c>
+ is included.</p>
+ <p>For information about specific <c><anno>InfoTuple</anno></c>s, see
+ <seealso marker="#process_info/2"><c>process_info/2</c></seealso>.</p>
<warning>
<p>This BIF is intended for <em>debugging only</em>. For
- all other purposes, use
- <seealso marker="#process_info/2">process_info/2</seealso>.</p>
+ all other purposes, use <seealso marker="#process_info/2">
+ <c>process_info/2</c></seealso>.</p>
</warning>
<p>Failure: <c>badarg</c> if <c><anno>Pid</anno></c> is not a
local process.</p>
@@ -4692,38 +4807,39 @@ os_prompt% </pre>
<type name="process_info_result_item"/>
<type name="stack_item"/>
<type name="priority_level"/>
- <type name="max_heap_size" />
- <type name="message_queue_data" />
+ <type name="max_heap_size"/>
+ <type name="message_queue_data"/>
<desc>
<p>Returns information about the process identified by
- <c><anno>Pid</anno></c>, as specified by
- <c><anno>Item</anno></c> or <c><anno>ItemList</anno></c>.
- Returns <c>undefined</c> if the process is not alive.</p>
- <p>If the process is alive and a single <c><anno>Item</anno></c>
- is given, the returned value is the corresponding
- <c><anno>InfoTuple</anno></c>, unless <c>Item =:= registered_name</c>
- and the process has no registered name. In this case,
- <c>[]</c> is returned. This strange behavior is because of
- historical reasons, and is kept for backward compatibility.</p>
- <p>If <c><anno>ItemList</anno></c> is given, the result is
- <c><anno>InfoTupleList</anno></c>.
- The <c><anno>InfoTuple</anno></c>s in
- <c><anno>InfoTupleList</anno></c> appear with the corresponding
- <c><anno>Item</anno></c>s in the same order as the
- <c><anno>Item</anno></c>s appeared
- in <c><anno>ItemList</anno></c>. Valid <c><anno>Item</anno></c>s can
- appear multiple times in <c><anno>ItemList</anno></c>.</p>
- <note><p>If <c>registered_name</c> is part of <c><anno>ItemList</anno></c>
- and the process has no name registered a
- <c>{registered_name, []}</c>, <c><anno>InfoTuple</anno></c>
- <em>will</em> appear in the resulting
- <c><anno>InfoTupleList</anno></c>. This
- behavior is different when a single
- <c>Item =:= registered_name</c> is given, and when
- <c>process_info/1</c> is used.</p>
- </note>
- <p>The following <c><anno>InfoTuple</anno></c>s with corresponding
- <c><anno>Item</anno></c>s are valid:</p>
+ <c><anno>Pid</anno></c>, as specified by
+ <c><anno>Item</anno></c> or <c><anno>ItemList</anno></c>.
+ Returns <c>undefined</c> if the process is not alive.</p>
+ <p>If the process is alive and a single <c><anno>Item</anno></c>
+ is specified, the returned value is the corresponding
+ <c><anno>InfoTuple</anno></c>, unless <c>Item =:= registered_name</c>
+ and the process has no registered name. In this case,
+ <c>[]</c> is returned. This strange behavior is because of
+ historical reasons, and is kept for backward compatibility.</p>
+ <p>If <c><anno>ItemList</anno></c> is specified, the result is
+ <c><anno>InfoTupleList</anno></c>.
+ The <c><anno>InfoTuple</anno></c>s in
+ <c><anno>InfoTupleList</anno></c> are included with the corresponding
+ <c><anno>Item</anno></c>s in the same order as the
+ <c><anno>Item</anno></c>s were included
+ in <c><anno>ItemList</anno></c>. Valid <c><anno>Item</anno></c>s can
+ be included multiple times in <c><anno>ItemList</anno></c>.</p>
+ <note>
+ <p>If <c>registered_name</c> is part of <c><anno>ItemList</anno></c>
+ and the process has no name registered, a
+ <c>{registered_name, []}</c>, <c><anno>InfoTuple</anno></c>
+ <em>will</em> be included in the resulting
+ <c><anno>InfoTupleList</anno></c>. This
+ behavior is different when a single
+ <c>Item =:= registered_name</c> is specified, and when
+ <c>process_info/1</c> is used.</p>
+ </note>
+ <p>Valid <c><anno>InfoTuple</anno></c>s with corresponding
+ <c><anno>Item</anno></c>s:</p>
<taglist>
<tag><c>{backtrace, <anno>Bin</anno>}</c></tag>
<item>
@@ -4736,15 +4852,15 @@ os_prompt% </pre>
<tag><c>{binary, <anno>BinInfo</anno>}</c></tag>
<item>
<p><c><anno>BinInfo</anno></c> is a list containing miscellaneous
- information about binaries currently being referred to by this
+ information about binaries currently referred to by this
process. This <c><anno>InfoTuple</anno></c> can be changed or
removed without prior notice.</p>
</item>
<tag><c>{catchlevel, <anno>CatchLevel</anno>}</c></tag>
<item>
<p><c><anno>CatchLevel</anno></c> is the number of currently active
- catches in this process. This <c><anno>InfoTuple</anno></c> can be
- changed or removed without prior notice.</p>
+ catches in this process. This <c><anno>InfoTuple</anno></c> can be
+ changed or removed without prior notice.</p>
</item>
<tag><c>{current_function, {<anno>Module</anno>,
<anno>Function</anno>, Arity}}</c></tag>
@@ -4760,14 +4876,15 @@ os_prompt% </pre>
<p><c><anno>Module</anno></c>, <c><anno>Function</anno></c>,
<c><anno>Arity</anno></c> is
the current function call of the process.
- <c><anno>Location</anno></c> is a list of two-tuples describing the
- location in the source code.</p>
+ <c><anno>Location</anno></c> is a list of two-tuples describing
+ the location in the source code.</p>
</item>
<tag><c>{current_stacktrace, <anno>Stack</anno>}</c></tag>
<item>
<p>Returns the current call stack back-trace (<em>stacktrace</em>)
of the process. The stack has the same format as returned by
- <seealso marker="#get_stacktrace/0">erlang:get_stacktrace/0</seealso>.</p>
+ <seealso marker="#get_stacktrace/0">
+ <c>erlang:get_stacktrace/0</c></seealso>.</p>
</item>
<tag><c>{dictionary, <anno>Dictionary</anno>}</c></tag>
<item>
@@ -4781,32 +4898,32 @@ os_prompt% </pre>
<tag><c>{garbage_collection, <anno>GCInfo</anno>}</c></tag>
<item>
<p><c><anno>GCInfo</anno></c> is a list containing miscellaneous
- information about garbage collection for this process.
- The content of <c><anno>GCInfo</anno></c> can be changed without
- prior notice.</p>
+ information about garbage collection for this process.
+ The content of <c><anno>GCInfo</anno></c> can be changed without
+ prior notice.</p>
</item>
- <marker id="process_info_garbage_collection_info"/>
- <tag><c>{garbage_collection_info, <anno>GCInfo</anno>}</c></tag>
+ <tag>
+ <marker id="process_info_garbage_collection_info"/>
+ <c>{garbage_collection_info, <anno>GCInfo</anno>}</c>
+ </tag>
<item>
<p><c><anno>GCInfo</anno></c> is a list containing miscellaneous
- detailed information about garbage collection for this process.
- The content of <c><anno>GCInfo</anno></c> can be changed without
- prior notice.
- See <seealso marker="#gc_minor_start">gc_minor_start</seealso> in
- <seealso marker="#trace/3">erlang:trace/3</seealso> for details about
- what each item means.
- </p>
+ detailed information about garbage collection for this process.
+ The content of <c><anno>GCInfo</anno></c> can be changed without
+ prior notice. For details about the meaning of each item, see
+ <seealso marker="#gc_minor_start"><c>gc_minor_start</c></seealso>
+ in <seealso marker="#trace/3"><c>erlang:trace/3</c></seealso>.</p>
</item>
<tag><c>{group_leader, <anno>GroupLeader</anno>}</c></tag>
<item>
- <p><c><anno>GroupLeader</anno></c> is group leader for the I/O of
- the process.</p>
+ <p><c><anno>GroupLeader</anno></c> is the group leader for the I/O
+ of the process.</p>
</item>
<tag><c>{heap_size, <anno>Size</anno>}</c></tag>
<item>
- <p><c><anno>Size</anno></c> is the size in words of the youngest heap
- generation of the process. This generation includes
- the process stack. This information is highly
+ <p><c><anno>Size</anno></c> is the size in words of the youngest
+ heap generation of the process. This generation includes
+ the process stack. This information is highly
implementation-dependent, and can change if the
implementation changes.</p>
</item>
@@ -4820,29 +4937,29 @@ os_prompt% </pre>
</item>
<tag><c>{links, <anno>PidsAndPorts</anno>}</c></tag>
<item>
- <p><c><anno>PidsAndPorts</anno></c> is a list of process identifiers
- and port identifiers, with processes or ports to which the process
- has a link.</p>
+ <p><c><anno>PidsAndPorts</anno></c> is a list of process identifiers
+ and port identifiers, with processes or ports to which the process
+ has a link.</p>
</item>
<tag><c>{last_calls, false|Calls}</c></tag>
<item>
<p>The value is <c>false</c> if call saving is not active
- for the process (see
- <seealso marker="#process_flag/3">process_flag/3</seealso>).
+ for the process (see <seealso marker="#process_flag/3">
+ <c>process_flag/3</c></seealso>).
If call saving is active, a list is returned, in which
the last element is the most recent called.</p>
</item>
<tag><c>{memory, <anno>Size</anno>}</c></tag>
<item>
- <p><c><anno>Size</anno></c> is the size in bytes of the process. This
- includes call stack, heap, and internal structures.</p>
+ <p><c><anno>Size</anno></c> is the size in bytes of the process.
+ This includes call stack, heap, and internal structures.</p>
</item>
<tag><c>{message_queue_len, <anno>MessageQueueLen</anno>}</c></tag>
<item>
<p><c><anno>MessageQueueLen</anno></c> is the number of messages
- currently in the message queue of the process. This is
- the length of the list <c><anno>MessageQueue</anno></c> returned as
- the information item <c>messages</c> (see the following).</p>
+ currently in the message queue of the process. This is the
+ length of the list <c><anno>MessageQueue</anno></c> returned as
+ the information item <c>messages</c> (see below).</p>
</item>
<tag><c>{messages, <anno>MessageQueue</anno>}</c></tag>
<item>
@@ -4869,43 +4986,53 @@ os_prompt% </pre>
<p>A list of monitors (started by <c>monitor/2</c>)
that are active for the process. For a local process
monitor or a remote process monitor by a process
- identifier, the list item is <c>{process, <anno>Pid</anno>}</c>.
- For a remote process
- monitor by name, the list item is
- <c>{process, {<anno>RegName</anno>, <anno>Node</anno>}}</c>.</p>
+ identifier, the list consists of:</p>
+ <taglist>
+ <tag><c>{process, <anno>Pid</anno>}</c></tag>
+ <item>Process is monitored by pid.</item>
+ <tag><c>{process, {<anno>RegName</anno>, <anno>Node</anno>}}</c></tag>
+ <item>Local or remote process is monitored by name.</item>
+ <tag><c>{port, PortId}</c></tag>
+ <item>Local port is monitored by port id.</item>
+ <tag><c>{port, {<anno>RegName</anno>, <anno>Node</anno>}}</c></tag>
+ <item>Local port is monitored by name. Please note, that
+ remote port monitors are not supported, so <c>Node</c> will
+ always be the local node name.</item>
+ </taglist>
</item>
<tag><c>{message_queue_data, <anno>MQD</anno>}</c></tag>
<item>
- <p>Returns the current state of the <c>message_queue_data</c>
- process flag. <c><anno>MQD</anno></c> is either <c>off_heap</c>,
- <c>on_heap</c>, or <c>mixed</c>. For more information, see the
- documentation of
- <seealso marker="#process_flag_message_queue_data"><c>process_flag(message_queue_data,
- MQD)</c></seealso>.</p>
+ <p>Returns the current state of process flag
+ <c>message_queue_data</c>. <c><anno>MQD</anno></c> is either
+ <c>off_heap</c> or <c>on_heap</c>. For more
+ information, see the documentation of
+ <seealso marker="#process_flag_message_queue_data">
+ <c>process_flag(message_queue_data, MQD)</c></seealso>.</p>
</item>
<tag><c>{priority, <anno>Level</anno>}</c></tag>
<item>
<p><c><anno>Level</anno></c> is the current priority level for
- the process. For more information on priorities, see
- <seealso marker="#process_flag_priority">process_flag(priority,
- Level)</seealso>.</p>
+ the process. For more information on priorities, see
+ <seealso marker="#process_flag_priority">
+ <c>process_flag(priority, Level)</c></seealso>.</p>
</item>
<tag><c>{reductions, <anno>Number</anno>}</c></tag>
<item>
- <p><c><anno>Number</anno></c> is the number of reductions executed by
- the process.</p>
+ <p><c><anno>Number</anno></c> is the number of reductions executed
+ by the process.</p>
</item>
<tag><c>{registered_name, <anno>Atom</anno>}</c></tag>
<item>
- <p><c><anno>Atom</anno></c> is the registered name of the process. If
- the process has no registered name, this tuple is not
+ <p><c><anno>Atom</anno></c> is the registered process name.
+ If the process has no registered name, this tuple is not
present in the list.</p>
</item>
- <tag><c>{sequential_trace_token, [] | <anno>SequentialTraceToken</anno>}</c></tag>
+ <tag><c>{sequential_trace_token, [] |
+ <anno>SequentialTraceToken</anno>}</c></tag>
<item>
<p><c><anno>SequentialTraceToken</anno></c> is the sequential trace
- token for the process. This <c><anno>InfoTuple</anno></c> can be
- changed or removed without prior notice.</p>
+ token for the process. This <c><anno>InfoTuple</anno></c> can be
+ changed or removed without prior notice.</p>
</item>
<tag><c>{stack_size, <anno>Size</anno>}</c></tag>
<item>
@@ -4914,9 +5041,9 @@ os_prompt% </pre>
</item>
<tag><c>{status, <anno>Status</anno>}</c></tag>
<item>
- <p><c><anno>Status</anno></c> is the status of the process and is one
- of the following:</p>
- <list type="bulleted">
+ <p><c><anno>Status</anno></c> is the status of the process and is
+ one of the following:</p>
+ <list type="bulleted">
<item><c>exiting</c></item>
<item><c>garbage_collecting</c></item>
<item><c>waiting</c> (for a message)</item>
@@ -4924,66 +5051,66 @@ os_prompt% </pre>
<item><c>runnable</c> (ready to run, but another process is
running)</item>
<item><c>suspended</c> (suspended on a "busy" port
- or by the BIF <c>erlang:suspend_process/[1,2]</c>)</item>
+ or by the BIF <c>erlang:suspend_process/1,2</c>)</item>
</list>
</item>
<tag><c>{suspending, <anno>SuspendeeList</anno>}</c></tag>
<item>
<p><c><anno>SuspendeeList</anno></c> is a list of
- <c>{<anno>Suspendee</anno>, <anno>ActiveSuspendCount</anno>,
- <anno>OutstandingSuspendCount</anno>}</c> tuples.
- <c><anno>Suspendee</anno></c> is the process identifier of a
- process that has been, or is to be,
- suspended by the process identified by <c><anno>Pid</anno></c>
- through one of the following BIFs:</p>
+ <c>{<anno>Suspendee</anno>, <anno>ActiveSuspendCount</anno>,
+ <anno>OutstandingSuspendCount</anno>}</c> tuples.
+ <c><anno>Suspendee</anno></c> is the process identifier of a
+ process that has been, or is to be,
+ suspended by the process identified by <c><anno>Pid</anno></c>
+ through the BIF <seealso marker="#suspend_process/2">
+ <c>erlang:suspend_process/2</c></seealso> or
+ <seealso marker="#suspend_process/1">
+ <c>erlang:suspend_process/1</c></seealso>.</p>
+ <p><c><anno>ActiveSuspendCount</anno></c> is the number of
+ times <c><anno>Suspendee</anno></c> has been suspended by
+ <c><anno>Pid</anno></c>.
+ <c><anno>OutstandingSuspendCount</anno></c> is the number of not
+ yet completed suspend requests sent by <c><anno>Pid</anno></c>,
+ that is:</p>
<list type="bulleted">
<item>
- <seealso marker="#suspend_process/2">erlang:suspend_process/2</seealso>
- </item>
- <item>
- <seealso marker="#suspend_process/1">erlang:suspend_process/1</seealso>
- </item>
- </list>
- <p><c><anno>ActiveSuspendCount</anno></c> is the number of
- times <c><anno>Suspendee</anno></c> has been suspended by
- <c><anno>Pid</anno></c>.
- <c><anno>OutstandingSuspendCount</anno></c> is the number of not yet
- completed suspend requests sent by <c><anno>Pid</anno></c>, that is:</p>
- <list type="bulleted">
- <item>If <c><anno>ActiveSuspendCount</anno> =/= 0</c>,
- <c><anno>Suspendee</anno></c> is
- currently in the suspended state.
+ <p>If <c><anno>ActiveSuspendCount</anno> =/= 0</c>,
+ <c><anno>Suspendee</anno></c> is
+ currently in the suspended state.</p>
</item>
- <item>If <c><anno>OutstandingSuspendCount</anno> =/= 0</c>, option
- <c>asynchronous</c> of <c>erlang:suspend_process/2</c>
- has been used and the suspendee has not yet been
- suspended by <c><anno>Pid</anno></c>.
+ <item>
+ <p>If <c><anno>OutstandingSuspendCount</anno> =/= 0</c>,
+ option <c>asynchronous</c> of <c>erlang:suspend_process/2</c>
+ has been used and the suspendee has not yet been
+ suspended by <c><anno>Pid</anno></c>.</p>
</item>
</list>
- <p>Notice that <c><anno>ActiveSuspendCount</anno></c> and
- <c><anno>OutstandingSuspendCount</anno></c> are not the
- total suspend count on <c><anno>Suspendee</anno></c>,
- only the parts contributed by <c><anno>Pid</anno></c>.</p>
+ <p>Notice that <c><anno>ActiveSuspendCount</anno></c> and
+ <c><anno>OutstandingSuspendCount</anno></c> are not the
+ total suspend count on <c><anno>Suspendee</anno></c>,
+ only the parts contributed by <c><anno>Pid</anno></c>.</p>
</item>
- <marker id="process_info_total_heap_size"/>
- <tag><c>{total_heap_size, <anno>Size</anno>}</c></tag>
+ <tag>
+ <marker id="process_info_total_heap_size"/>
+ <c>{total_heap_size, <anno>Size</anno>}</c>
+ </tag>
<item>
<p><c><anno>Size</anno></c> is the total size, in words, of all heap
- fragments of the process. This includes the process stack and
- any unreceived messages that are considered to be part of the
- heap. </p>
+ fragments of the process. This includes the process stack and
+ any unreceived messages that are considered to be part of the
+ heap.</p>
</item>
<tag><c>{trace, <anno>InternalTraceFlags</anno>}</c></tag>
<item>
<p><c><anno>InternalTraceFlags</anno></c> is an integer
- representing the internal trace flag for this process.
- This <c><anno>InfoTuple</anno></c>
- can be changed or removed without prior notice.</p>
+ representing the internal trace flag for this process.
+ This <c><anno>InfoTuple</anno></c>
+ can be changed or removed without prior notice.</p>
</item>
<tag><c>{trap_exit, <anno>Boolean</anno>}</c></tag>
<item>
<p><c><anno>Boolean</anno></c> is <c>true</c> if the process
- is trapping exits, otherwise <c>false</c>.</p>
+ is trapping exits, otherwise <c>false</c>.</p>
</item>
</taglist>
<p>Notice that not all implementations support all
@@ -4991,9 +5118,9 @@ os_prompt% </pre>
<p>Failures:</p>
<taglist>
<tag><c>badarg</c></tag>
- <item>If <c><anno>Pid</anno></c> is not a local process.</item>
+ <item>If <c><anno>Pid</anno></c> is not a local process.</item>
<tag><c>badarg</c></tag>
- <item>If <c><anno>Item</anno></c> is an invalid item.</item>
+ <item>If <c><anno>Item</anno></c> is an invalid item.</item>
</taglist>
</desc>
</func>
@@ -5003,11 +5130,11 @@ os_prompt% </pre>
<fsummary>All processes.</fsummary>
<desc>
<p>Returns a list of process identifiers corresponding to
- all the processes currently existing on the local node.</p>
- <p>Notice that an exiting process exists, but is not alive.
- That is, <c>is_process_alive/1</c> returns <c>false</c>
- for an exiting process, but its process identifier is part
- of the result returned from <c>processes/0</c>.</p>
+ all the processes currently existing on the local node.</p>
+ <p>Notice that an exiting process exists, but is not alive.
+ That is, <c>is_process_alive/1</c> returns <c>false</c>
+ for an exiting process, but its process identifier is part
+ of the result returned from <c>processes/0</c>.</p>
<p>Example:</p>
<pre>
> <input>processes().</input>
@@ -5017,22 +5144,23 @@ os_prompt% </pre>
<func>
<name name="purge_module" arity="1"/>
- <fsummary>Removes old code for a module.</fsummary>
+ <fsummary>Remove old code for a module.</fsummary>
<desc>
<p>Removes old code for <c><anno>Module</anno></c>.
Before this BIF is used,
- <c>erlang:check_process_code/2</c> is to be called to check
+ <seealso marker="#check_process_code/2">
+ <c>check_process_code/2</c></seealso>is to be called to check
that no processes execute old code in the module.</p>
<warning>
<p>This BIF is intended for the code server (see
- <seealso marker="kernel:code">code(3)</seealso>)
+ <seealso marker="kernel:code"><c>code(3)</c></seealso>)
and is not to be used elsewhere.</p>
</warning>
<note>
- <p>As from <c>ERTS</c> 8.0 (OTP 19), any lingering processes
- that still execute the old code will be killed by this function.
- In earlier versions, such incorrect use could cause much
- more fatal failures, like emulator crash.</p>
+ <p>As from ERTS 8.0 (Erlang/OTP 19), any lingering processes
+ that still execute the old code is killed by this function.
+ In earlier versions, such incorrect use could cause much
+ more fatal failures, like emulator crash.</p>
</note>
<p>Failure: <c>badarg</c> if there is no old code for
<c><anno>Module</anno></c>.</p>
@@ -5041,14 +5169,13 @@ os_prompt% </pre>
<func>
<name name="put" arity="2"/>
- <fsummary>Adds a new value to the process dictionary.</fsummary>
+ <fsummary>Add a new value to the process dictionary.</fsummary>
<desc>
<p>Adds a new <c><anno>Key</anno></c> to the process dictionary,
associated with the value <c><anno>Val</anno></c>, and returns
<c>undefined</c>. If <c><anno>Key</anno></c> exists, the old
value is deleted and replaced by <c><anno>Val</anno></c>, and
- the function returns the old value.</p>
- <p>Example:</p>
+ the function returns the old value. Example:</p>
<pre>
> <input>X = put(name, walrus), Y = put(name, carpenter),</input>
<input>Z = get(name),</input>
@@ -5064,21 +5191,18 @@ os_prompt% </pre>
<func>
<name name="raise" arity="3"/>
- <fsummary>Stops execution with an exception of given class, reason, and call stack backtrace.</fsummary>
+ <fsummary>Stop execution with an exception of specified class, reason,
+ and call stack backtrace.</fsummary>
<type name="raise_stacktrace"/>
<desc>
<p>Stops the execution of the calling process with an
- exception of given class, reason, and call stack backtrace
+ exception of the specified class, reason, and call stack backtrace
(<em>stacktrace</em>).</p>
- <warning>
- <p>This BIF is intended for debugging. Avoid to use it in applications,
- unless you really know what you are doing.</p>
- </warning>
<p><c><anno>Class</anno></c> is <c>error</c>, <c>exit</c>, or
<c>throw</c>. So, if it were not for the stacktrace,
<c>erlang:raise(<anno>Class</anno>, <anno>Reason</anno>,
- <anno>Stacktrace</anno>)</c> is
- equivalent to <c>erlang:<anno>Class</anno>(<anno>Reason</anno>)</c>.</p>
+ <anno>Stacktrace</anno>)</c> is equivalent to
+ <c>erlang:<anno>Class</anno>(<anno>Reason</anno>)</c>.</p>
<p><c><anno>Reason</anno></c> is any term.
<c><anno>Stacktrace</anno></c> is a list as
returned from <c>get_stacktrace()</c>, that is, a list of
@@ -5088,12 +5212,12 @@ os_prompt% </pre>
argument list. The stacktrace can also contain <c>{Fun,
Args, Location}</c> tuples, where <c>Fun</c> is a local
fun and <c>Args</c> is an argument list.</p>
- <p>Element <c>Location</c> at the end is optional.
- Omitting it is equivalent to specifying an empty list.</p>
+ <p>Element <c>Location</c> at the end is optional.
+ Omitting it is equivalent to specifying an empty list.</p>
<p>The stacktrace is used as the exception stacktrace for the
calling process; it is truncated to the current
maximum stacktrace depth.</p>
- <p>Since evaluating this function causes the process to
+ <p>As evaluating this function causes the process to
terminate, it has no return value unless the arguments are
invalid, in which case the function <em>returns the error
reason</em> <c>badarg</c>. If you want to be
@@ -5105,78 +5229,68 @@ os_prompt% </pre>
</func>
<func>
- <name name="read_timer" arity="2"/>
- <fsummary>Reads the state of a timer.</fsummary>
+ <name name="read_timer" arity="1"/>
+ <fsummary>Read the state of a timer.</fsummary>
<desc>
- <p>
- Read the state of a timer that has been created by either
- <seealso marker="#start_timer/4"><c>erlang:start_timer()</c></seealso>,
- or <seealso marker="#send_after/4"><c>erlang:send_after()</c></seealso>.
- <c><anno>TimerRef</anno></c> identifies the timer, and
- was returned by the BIF that created the timer.
- </p>
- <p>Available <c><anno>Option</anno>s</c>:</p>
+ <p>Reads the state of a timer. The same as calling
+ <seealso marker="#read_timer/2"><c>erlang:read_timer(TimerRef,
+ [])</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="read_timer" arity="2"/>
+ <fsummary>Read the state of a timer.</fsummary>
+ <desc>
+ <p>Reads the state of a timer that has been created by either
+ <seealso marker="#start_timer/4"><c>erlang:start_timer</c></seealso>
+ or <seealso marker="#send_after/4"><c>erlang:send_after</c></seealso>.
+ <c><anno>TimerRef</anno></c> identifies the timer, and
+ was returned by the BIF that created the timer.</p>
+ <p><c><anno>Option</anno>s</c>:</p>
<taglist>
- <tag><c>{async, Async}</c></tag>
- <item>
- <p>
- Asynchronous request for state information. <c>Async</c>
- defaults to <c>false</c> which will cause the operation
- to be performed synchronously. In this case, the <c>Result</c>
- is returned by <c>erlang:read_timer()</c>. When
- <c>Async</c> is <c>true</c>, <c>erlang:read_timer()</c>
- sends an asynchronous request for the state information
- to the timer service that manages the timer, and then returns
- <c>ok</c>. A message on the format <c>{read_timer,
- <anno>TimerRef</anno>, <anno>Result</anno>}</c> is
- sent to the caller of <c>erlang:read_timer()</c> when the
- operation has been processed.
- </p>
- </item>
+ <tag><c>{async, Async}</c></tag>
+ <item>
+ <p>Asynchronous request for state information. <c>Async</c>
+ defaults to <c>false</c>, which causes the operation
+ to be performed synchronously. In this case, the <c>Result</c>
+ is returned by <c>erlang:read_timer</c>. When
+ <c>Async</c> is <c>true</c>, <c>erlang:read_timer</c>
+ sends an asynchronous request for the state information
+ to the timer service that manages the timer, and then returns
+ <c>ok</c>. A message on the format <c>{read_timer,
+ <anno>TimerRef</anno>, <anno>Result</anno>}</c> is
+ sent to the caller of <c>erlang:read_timer</c> when the
+ operation has been processed.</p>
+ </item>
</taglist>
- <p>
- More <c><anno>Option</anno></c>s may be added in the future.
- </p>
- <p>
- If <c><anno>Result</anno></c> is an integer, it represents the
- time in milli-seconds left until the timer expires.</p>
- <p>
- If <c><anno>Result</anno></c> is <c>false</c>, a
- timer corresponding to <c><anno>TimerRef</anno></c> could not
- be found. This can be because the timer had expired,
- it had been canceled, or because <c><anno>TimerRef</anno></c>
- never has corresponded to a timer. Even if the timer has expired,
- it does not tell you whether or not the timeout message has
- arrived at its destination yet.
- </p>
- <note>
- <p>
- The timer service that manages the timer may be co-located
- with another scheduler than the scheduler that the calling
- process is executing on. If this is the case, communication
- with the timer service takes much longer time than if it
- is located locally. If the calling process is in critical
- path, and can do other things while waiting for the result
- of this operation, you want to use option <c>{async, true}</c>.
- If using option <c>{async, false}</c>, the calling
- process will be blocked until the operation has been
- performed.
- </p>
- </note>
+ <p>More <c><anno>Option</anno></c>s can be added in the future.</p>
+ <p>If <c><anno>Result</anno></c> is an integer, it represents the
+ time in milliseconds left until the timer expires.</p>
+ <p>If <c><anno>Result</anno></c> is <c>false</c>, a
+ timer corresponding to <c><anno>TimerRef</anno></c> could not
+ be found. This because the timer had expired,
+ or been canceled, or because <c><anno>TimerRef</anno></c>
+ never has corresponded to a timer. Even if the timer has expired,
+ it does not tell you whether or not the time-out message has
+ arrived at its destination yet.</p>
+ <note>
+ <p>The timer service that manages the timer can be co-located
+ with another scheduler than the scheduler that the calling
+ process is executing on. If so, communication
+ with the timer service takes much longer time than if it
+ is located locally. If the calling process is in a critical
+ path, and can do other things while waiting for the result
+ of this operation, you want to use option <c>{async, true}</c>.
+ If using option <c>{async, false}</c>, the calling
+ process is blocked until the operation has been performed.</p>
+ </note>
<p>See also
<seealso marker="#send_after/4"><c>erlang:send_after/4</c></seealso>,
- <seealso marker="#start_timer/4"><c>erlang:start_timer/4</c></seealso>,
- and
- <seealso marker="#cancel_timer/2"><c>erlang:cancel_timer/2</c></seealso>.</p>
- </desc>
- </func>
- <func>
- <name name="read_timer" arity="1"/>
- <fsummary>Reads the state of a timer.</fsummary>
- <desc>
- <p>Read the state of a timer. The same as calling
- <seealso marker="#read_timer/2"><c>erlang:read_timer(TimerRef,
- [])</c></seealso>.</p>
+ <seealso marker="#start_timer/4">
+ <c>erlang:start_timer/4</c></seealso>, and
+ <seealso marker="#cancel_timer/2">
+ <c>erlang:cancel_timer/2</c></seealso>.</p>
</desc>
</func>
@@ -5188,21 +5302,20 @@ os_prompt% </pre>
representation of <c><anno>Ref</anno></c>.</p>
<warning>
<p>This BIF is intended for debugging and is not to be used
- in application programs.</p>
+ in application programs.</p>
</warning>
</desc>
</func>
<func>
<name name="register" arity="2"/>
- <fsummary>Registers a name for a pid (or port).</fsummary>
+ <fsummary>Register a name for a pid (or port).</fsummary>
<desc>
<p>Associates the name <c><anno>RegName</anno></c> with a process
identifier (pid) or a port identifier.
<c><anno>RegName</anno></c>, which must be an atom, can be used
instead of the pid or port identifier in send operator
- (<c><anno>RegName</anno> ! Message</c>).</p>
- <p>Example:</p>
+ (<c><anno>RegName</anno> ! Message</c>). Example:</p>
<pre>
> <input>register(db, Pid).</input>
true</pre>
@@ -5228,7 +5341,7 @@ true</pre>
<fsummary>All registered names.</fsummary>
<desc>
<p>Returns a list of names that have been registered using
- <seealso marker="#register/2">register/2</seealso>, for
+ <seealso marker="#register/2"><c>register/2</c></seealso>, for
example:</p>
<pre>
> <input>registered().</input>
@@ -5238,20 +5351,21 @@ true</pre>
<func>
<name name="resume_process" arity="1"/>
- <fsummary>Resumes a suspended process.</fsummary>
+ <fsummary>Resume a suspended process.</fsummary>
<desc>
<p>Decreases the suspend count on the process identified by
- <c><anno>Suspendee</anno></c>. <c><anno>Suspendee</anno></c>
- is previously to have been suspended through
- <seealso marker="#suspend_process/2">erlang:suspend_process/2</seealso>
- or
- <seealso marker="#suspend_process/1">erlang:suspend_process/1</seealso>
- by the process calling
- <c>erlang:resume_process(<anno>Suspendee</anno>)</c>. When the
- suspend count on <c><anno>Suspendee</anno></c> reaches zero,
- <c><anno>Suspendee</anno></c> is resumed, that is, its state
- is changed from suspended into the state it had before it was
- suspended.</p>
+ <c><anno>Suspendee</anno></c>. <c><anno>Suspendee</anno></c>
+ is previously to have been suspended through
+ <seealso marker="#suspend_process/2">
+ <c>erlang:suspend_process/2</c></seealso> or
+ <seealso marker="#suspend_process/1">
+ <c>erlang:suspend_process/1</c></seealso>
+ by the process calling
+ <c>erlang:resume_process(<anno>Suspendee</anno>)</c>. When the
+ suspend count on <c><anno>Suspendee</anno></c> reaches zero,
+ <c><anno>Suspendee</anno></c> is resumed, that is, its state
+ is changed from suspended into the state it had before it was
+ suspended.</p>
<warning>
<p>This BIF is intended for debugging only.</p>
</warning>
@@ -5259,29 +5373,29 @@ true</pre>
<taglist>
<tag><c>badarg</c></tag>
<item>
- If <c><anno>Suspendee</anno></c> is not a process identifier.
- </item>
+ If <c><anno>Suspendee</anno></c> is not a process identifier.
+ </item>
<tag><c>badarg</c></tag>
<item>
- If the process calling <c>erlang:resume_process/1</c> had
- not previously increased the suspend count on the process
- identified by <c><anno>Suspendee</anno></c>.
- </item>
+ If the process calling <c>erlang:resume_process/1</c> had
+ not previously increased the suspend count on the process
+ identified by <c><anno>Suspendee</anno></c>.
+ </item>
<tag><c>badarg</c></tag>
<item>
- If the process identified by <c><anno>Suspendee</anno></c>
- is not alive.
- </item>
+ If the process identified by <c><anno>Suspendee</anno></c>
+ is not alive.
+ </item>
</taglist>
</desc>
</func>
<func>
<name name="round" arity="1"/>
- <fsummary>Returns an integer by rounding a number.</fsummary>
+ <fsummary>Return an integer by rounding a number.</fsummary>
<desc>
<p>Returns an integer by rounding <c><anno>Number</anno></c>,
- for example:</p>
+ for example:</p>
<pre>
<input>round(5.5).</input>
6</pre>
@@ -5291,7 +5405,7 @@ true</pre>
<func>
<name name="self" arity="0"/>
- <fsummary>Returns pid of the calling process.</fsummary>
+ <fsummary>Return pid of the calling process.</fsummary>
<desc>
<p>Returns the process identifier of the calling process, for
example:</p>
@@ -5304,7 +5418,7 @@ true</pre>
<func>
<name name="send" arity="2"/>
- <fsummary>Sends a message.</fsummary>
+ <fsummary>Send a message.</fsummary>
<type name="dst"/>
<desc>
<p>Sends a message and returns <c><anno>Msg</anno></c>. This
@@ -5318,27 +5432,27 @@ true</pre>
<func>
<name name="send" arity="3"/>
- <fsummary>Sends a message conditionally.</fsummary>
+ <fsummary>Send a message conditionally.</fsummary>
<type name="dst"/>
<desc>
<p>Either sends a message and returns <c>ok</c>, or does not send
- the message but returns something else (see the following).
+ the message but returns something else (see below).
Otherwise the same as
- <seealso marker="#send/2">erlang:send/2</seealso>.
+ <seealso marker="#send/2"><c>erlang:send/2</c></seealso>.
For more detailed explanation and warnings, see
- <seealso marker="#send_nosuspend/2">erlang:send_nosuspend/2,3</seealso>.</p>
- <p>The options are as follows:</p>
+ <seealso marker="#send_nosuspend/2">
+ <c>erlang:send_nosuspend/2,3</c></seealso>.</p>
+ <p>Options:</p>
<taglist>
<tag><c>nosuspend</c></tag>
- <item>
- <p>If the sender would have to be suspended to do the send,
- <c>nosuspend</c> is returned instead.</p>
+ <item>If the sender would have to be suspended to do the send,
+ <c>nosuspend</c> is returned instead.
</item>
<tag><c>noconnect</c></tag>
<item>
- <p>If the destination node would have to be auto-connected
- to do the send, <c>noconnect</c> is returned
- instead.</p>
+ If the destination node would have to be auto-connected
+ to do the send, <c>noconnect</c> is returned
+ instead.
</item>
</taglist>
<warning>
@@ -5349,36 +5463,37 @@ true</pre>
</func>
<func>
- <name name="send_after" arity="4"/>
- <fsummary>Start a timer</fsummary>
+ <name name="send_after" arity="3"/>
+ <fsummary>Start a timer.</fsummary>
<desc>
- <p>
- Starts a timer. When the timer expires, the message
- <c><anno>Msg</anno></c> is sent to the process
- identified by <c><anno>Dest</anno></c>. Apart from
- the format of the timeout message,
- <c>erlang:send_after/4</c> works exactly as
- <seealso marker="#start_timer/4"><c>erlang:start_timer/4</c></seealso>.</p>
+ <p>Starts a timer. The same as calling
+ <seealso marker="#send_after/4">
+ <c>erlang:send_after(<anno>Time</anno>, <anno>Dest</anno>,
+ <anno>Msg</anno>, [])</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="send_after" arity="3"/>
- <fsummary>Starts a timer.</fsummary>
+ <name name="send_after" arity="4"/>
+ <fsummary>Start a timer.</fsummary>
<desc>
- <p>Starts a timer. The same as calling
- <seealso marker="#send_after/4"><c>erlang:send_after(<anno>Time</anno>,
- <anno>Dest</anno>, <anno>Msg</anno>, [])</c></seealso>.</p>
+ <p>Starts a timer. When the timer expires, the message
+ <c><anno>Msg</anno></c> is sent to the process
+ identified by <c><anno>Dest</anno></c>. Apart from
+ the format of the time-out message, this function works exactly as
+ <seealso marker="#start_timer/4">
+ <c>erlang:start_timer/4</c></seealso>.</p>
</desc>
</func>
<func>
<name name="send_nosuspend" arity="2"/>
- <fsummary>Tries to send a message without ever blocking.</fsummary>
+ <fsummary>Try to send a message without ever blocking.</fsummary>
<type name="dst"/>
<desc>
<p>The same as
- <seealso marker="#send/3">erlang:send(<anno>Dest</anno>,
- <anno>Msg</anno>, [nosuspend])</seealso>,
+ <seealso marker="#send/3"><c>erlang:send(<anno>Dest</anno>,
+ <anno>Msg</anno>, [nosuspend])</c></seealso>,
but returns <c>true</c> if
the message was sent and <c>false</c> if the message was not
sent because the sender would have had to be suspended.</p>
@@ -5404,12 +5519,12 @@ true</pre>
contradictory to the Erlang programming model. The message is
<em>not</em> sent if this function returns <c>false</c>.</p>
<p>In many systems, transient states of
- overloaded queues are normal. The fact that this function
+ overloaded queues are normal. Although this function
returns <c>false</c> does not mean that the other
node is guaranteed to be non-responsive, it could be a
temporary overload. Also, a return value of <c>true</c> does
only mean that the message can be sent on the (TCP) channel
- without blocking, the message is not guaranteed to
+ without blocking; the message is not guaranteed to
arrive at the remote node. For a disconnected
non-responsive node, the return value is <c>true</c> (mimics
the behavior of operator <c>!</c>). The expected
@@ -5423,15 +5538,16 @@ true</pre>
<func>
<name name="send_nosuspend" arity="3"/>
- <fsummary>Tries to send a message without ever blocking.</fsummary>
+ <fsummary>Try to send a message without ever blocking.</fsummary>
<type name="dst"/>
<desc>
<p>The same as
- <seealso marker="#send/3">erlang:send(<anno>Dest</anno>,
- <anno>Msg</anno>, [nosuspend | <anno>Options</anno>])</seealso>,
+ <seealso marker="#send/3"><c>erlang:send(<anno>Dest</anno>,
+ <anno>Msg</anno>, [nosuspend | <anno>Options</anno>])</c></seealso>,
but with a Boolean return value.</p>
<p>This function behaves like
- <seealso marker="#send_nosuspend/2">erlang:send_nosuspend/2</seealso>,
+ <seealso marker="#send_nosuspend/2">
+ <c>erlang:send_nosuspend/2</c></seealso>,
but takes a third parameter, a list of options.
The only option is <c>noconnect</c>, which
makes the function return <c>false</c> if
@@ -5455,14 +5571,15 @@ true</pre>
<func>
<name name="set_cookie" arity="2"/>
- <fsummary>Sets the magic cookie of a node.</fsummary>
+ <fsummary>Set the magic cookie of a node.</fsummary>
<desc>
<p>Sets the magic cookie of <c><anno>Node</anno></c> to the atom
<c><anno>Cookie</anno></c>. If <c><anno>Node</anno></c> is the
local node, the function
also sets the cookie of all other unknown nodes to
- <c><anno>Cookie</anno></c> (see Section
- <seealso marker="doc/reference_manual:distributed">Distributed Erlang</seealso>
+ <c><anno>Cookie</anno></c> (see section
+ <seealso marker="doc/reference_manual:distributed">
+ Distributed Erlang</seealso>
in the Erlang Reference Manual in System Documentation).</p>
<p>Failure: <c>function_clause</c> if the local node is not
alive.</p>
@@ -5471,12 +5588,12 @@ true</pre>
<func>
<name name="setelement" arity="3"/>
- <fsummary>Sets the Nth element of a tuple.</fsummary>
+ <fsummary>Set the Nth element of a tuple.</fsummary>
<type_desc variable="Index">1..tuple_size(<anno>Tuple1</anno></type_desc>
<desc>
<p>Returns a tuple that is a copy of argument
<c><anno>Tuple1</anno></c>
- with the element given by integer argument
+ with the element specified by integer argument
<c><anno>Index</anno></c>
(the first element is the element with index 1) replaced by
argument <c><anno>Value</anno></c>, for example:</p>
@@ -5491,52 +5608,52 @@ true</pre>
<fsummary>Size of a tuple or binary.</fsummary>
<desc>
<p>Returns the number of elements in a tuple or the number of
- bytes in a binary or bitstring, for example:</p>
+ bytes in a binary or bitstring, for example:</p>
<pre>
> <input>size({morni, mulle, bwange}).</input>
3
> <input>size(&lt;&lt;11, 22, 33&gt;&gt;).</input>
-3
-</pre>
- <p>For bitstrings the number of whole bytes is returned. That is, if the number of bits
+3</pre>
+ <p>For bitstrings, the number of whole bytes is returned.
+ That is, if the number of bits
in the bitstring is not divisible by 8, the resulting
number of bytes is rounded <em>down</em>.</p>
<p>Allowed in guard tests.</p>
<p>See also
<seealso marker="#tuple_size/1"><c>tuple_size/1</c></seealso>,
- <seealso marker="#byte_size/1"><c>byte_size/1</c></seealso>
- and
+ <seealso marker="#byte_size/1"><c>byte_size/1</c></seealso>, and
<seealso marker="#bit_size/1"><c>bit_size/1</c></seealso>.</p>
</desc>
</func>
<func>
<name name="spawn" arity="1"/>
- <fsummary>Creates a new process with a fun as entry point.</fsummary>
+ <fsummary>Create a new process with a fun as entry point.</fsummary>
<desc>
<p>Returns the process identifier of a new process started by the
application of <c><anno>Fun</anno></c> to the empty list
<c>[]</c>. Otherwise
- works like <seealso marker="#spawn/3">spawn/3</seealso>.</p>
+ works like <seealso marker="#spawn/3"><c>spawn/3</c></seealso>.</p>
</desc>
</func>
<func>
<name name="spawn" arity="2"/>
- <fsummary>Creates a new process with a fun as entry point on a given node.</fsummary>
+ <fsummary>Create a new process with a fun as entry point on a specified
+ node.</fsummary>
<desc>
<p>Returns the process identifier of a new process started
by the application of <c><anno>Fun</anno></c> to the
empty list <c>[]</c> on <c><anno>Node</anno></c>. If
<c><anno>Node</anno></c> does not exist, a useless pid is
returned. Otherwise works like
- <seealso marker="#spawn/3">spawn/3</seealso>.</p>
+ <seealso marker="#spawn/3"><c>spawn/3</c></seealso>.</p>
</desc>
</func>
<func>
<name name="spawn" arity="3"/>
- <fsummary>Creates a new process with a function as entry point.</fsummary>
+ <fsummary>Create a new process with a function as entry point.</fsummary>
<desc>
<p>Returns the process identifier of a new process started by
the application of <c><anno>Module</anno>:<anno>Function</anno></c>
@@ -5548,7 +5665,7 @@ true</pre>
does not exist (where <c>Arity</c> is the length of
<c><anno>Args</anno></c>). The error handler
can be redefined (see
- <seealso marker="#process_flag/2">process_flag/2</seealso>).
+ <seealso marker="#process_flag/2"><c>process_flag/2</c></seealso>).
If <c>error_handler</c> is undefined, or the user has
redefined the default <c>error_handler</c> and its replacement is
undefined, a failure with reason <c>undef</c> occurs.</p>
@@ -5561,7 +5678,8 @@ true</pre>
<func>
<name name="spawn" arity="4"/>
- <fsummary>Creates a new process with a function as entry point on a given node.</fsummary>
+ <fsummary>Create a new process with a function as entry point on a
+ specified node.</fsummary>
<desc>
<p>Returns the process identifier (pid) of a new process started
by the application
@@ -5569,26 +5687,28 @@ true</pre>
to <c><anno>Args</anno></c> on <c><anno>Node</anno></c>. If
<c><anno>Node</anno></c> does not exist, a useless pid is returned.
Otherwise works like
- <seealso marker="#spawn/3">spawn/3</seealso>.</p>
+ <seealso marker="#spawn/3"><c>spawn/3</c></seealso>.</p>
</desc>
</func>
<func>
<name name="spawn_link" arity="1"/>
- <fsummary>Creates and links to a new process with a fun as entry point.</fsummary>
+ <fsummary>Create and link to a new process with a fun as entry point.
+ </fsummary>
<desc>
<p>Returns the process identifier of a new process started by
the application of <c><anno>Fun</anno></c> to the empty list
<c>[]</c>. A link is created between
the calling process and the new process, atomically.
Otherwise works like
- <seealso marker="#spawn/3">spawn/3</seealso>.</p>
+ <seealso marker="#spawn/3"><c>spawn/3</c></seealso>.</p>
</desc>
</func>
<func>
<name name="spawn_link" arity="2"/>
- <fsummary>Creates and links to a new process with a fun as entry point on a specified node.</fsummary>
+ <fsummary>Create and link to a new process with a fun as entry point on
+ a specified node.</fsummary>
<desc>
<p>Returns the process identifier (pid) of a new process started
by the application of <c><anno>Fun</anno></c> to the empty
@@ -5597,26 +5717,29 @@ true</pre>
atomically. If <c><anno>Node</anno></c> does not exist,
a useless pid is returned and an exit signal with
reason <c>noconnection</c> is sent to the calling
- process. Otherwise works like <seealso marker="#spawn/3">spawn/3</seealso>.</p>
+ process. Otherwise works like <seealso marker="#spawn/3">
+ <c>spawn/3</c></seealso>.</p>
</desc>
</func>
<func>
<name name="spawn_link" arity="3"/>
- <fsummary>Creates and links to a new process with a function as entry point.</fsummary>
+ <fsummary>Create and link to a new process with a function as entry point.
+ </fsummary>
<desc>
<p>Returns the process identifier of a new process started by
the application of <c><anno>Module</anno>:<anno>Function</anno></c>
to <c><anno>Args</anno></c>. A link is created
between the calling process and the new process, atomically.
Otherwise works like
- <seealso marker="#spawn/3">spawn/3</seealso>.</p>
+ <seealso marker="#spawn/3"><c>spawn/3</c></seealso>.</p>
</desc>
</func>
<func>
<name name="spawn_link" arity="4"/>
- <fsummary>Creates and links to a new process with a function as entry point on a given node.</fsummary>
+ <fsummary>Create and link to a new process with a function as entry point
+ on a specified node.</fsummary>
<desc>
<p>Returns the process identifier (pid) of a new process
started by the application
@@ -5626,109 +5749,113 @@ true</pre>
process, atomically. If <c><anno>Node</anno></c> does
not exist, a useless pid is returned and an exit signal with
reason <c>noconnection</c> is sent to the calling
- process. Otherwise works like <seealso marker="#spawn/3">spawn/3</seealso>.</p>
+ process. Otherwise works like <seealso marker="#spawn/3">
+ <c>spawn/3</c></seealso>.</p>
</desc>
</func>
<func>
<name name="spawn_monitor" arity="1"/>
- <fsummary>Creates and monitors a new process with a fun as entry point.</fsummary>
+ <fsummary>Create and monitor a new process with a fun as entry point.
+ </fsummary>
<desc>
<p>Returns the process identifier of a new process, started by
the application of <c><anno>Fun</anno></c> to the empty list
<c>[]</c>,
and a reference for a monitor created to the new process.
Otherwise works like
- <seealso marker="#spawn/3">spawn/3</seealso>.</p>
+ <seealso marker="#spawn/3"><c>spawn/3</c></seealso>.</p>
</desc>
</func>
<func>
<name name="spawn_monitor" arity="3"/>
- <fsummary>Creates and monitors a new process with a function as entry point.</fsummary>
+ <fsummary>Create and monitor a new process with a function as entry point.
+ </fsummary>
<desc>
<p>A new process is started by the application
of <c><anno>Module</anno>:<anno>Function</anno></c>
to <c><anno>Args</anno></c>. The process is
monitored at the same time. Returns the process identifier
and a reference for the monitor. Otherwise works like
- <seealso marker="#spawn/3">spawn/3</seealso>.</p>
+ <seealso marker="#spawn/3"><c>spawn/3</c></seealso>.</p>
</desc>
</func>
<func>
<name name="spawn_opt" arity="2"/>
- <fsummary>Creates a new process with a fun as entry point.</fsummary>
+ <fsummary>Create a new process with a fun as entry point.</fsummary>
<type name="priority_level"/>
- <type name="max_heap_size" />
- <type name="message_queue_data" />
- <type name="spawn_opt_option" />
+ <type name="max_heap_size"/>
+ <type name="message_queue_data"/>
+ <type name="spawn_opt_option"/>
<desc>
<p>Returns the process identifier (pid) of a new process
started by the application of <c><anno>Fun</anno></c>
to the empty list <c>[]</c>. Otherwise works like
- <seealso marker="#spawn_opt/4">spawn_opt/4</seealso>.</p>
- <p>If option <c>monitor</c> is given, the newly created
+ <seealso marker="#spawn_opt/4"><c>spawn_opt/4</c></seealso>.</p>
+ <p>If option <c>monitor</c> is specified, the newly created
process is monitored, and both the pid and reference for
- the monitor is returned.</p>
+ the monitor are returned.</p>
</desc>
</func>
<func>
<name name="spawn_opt" arity="3"/>
- <fsummary>Creates a new process with a fun as entry point on a given node.</fsummary>
+ <fsummary>Create a new process with a fun as entry point on a specified
+ node.</fsummary>
<type name="priority_level"/>
- <type name="max_heap_size" />
- <type name="message_queue_data" />
- <type name="spawn_opt_option" />
+ <type name="max_heap_size"/>
+ <type name="message_queue_data"/>
+ <type name="spawn_opt_option"/>
<desc>
<p>Returns the process identifier (pid) of a new process started
by the application of <c><anno>Fun</anno></c> to the
empty list <c>[]</c> on <c><anno>Node</anno></c>. If
<c><anno>Node</anno></c> does not exist, a useless pid is
returned. Otherwise works like
- <seealso marker="#spawn_opt/4">spawn_opt/4</seealso>.</p>
+ <seealso marker="#spawn_opt/4"><c>spawn_opt/4</c></seealso>.</p>
</desc>
</func>
<func>
<name name="spawn_opt" arity="4"/>
- <fsummary>Creates a new process with a function as entry point.</fsummary>
+ <fsummary>Create a new process with a function as entry point.</fsummary>
<type name="priority_level"/>
- <type name="max_heap_size" />
- <type name="message_queue_data" />
- <type name="spawn_opt_option" />
+ <type name="max_heap_size"/>
+ <type name="message_queue_data"/>
+ <type name="spawn_opt_option"/>
<desc>
<p>Works as
- <seealso marker="#spawn/3">spawn/3</seealso>, except that an
- extra option list is given when creating the process.</p>
- <p>If option <c>monitor</c> is given, the newly created
+ <seealso marker="#spawn/3"><c>spawn/3</c></seealso>, except that an
+ extra option list is specified when creating the process.</p>
+ <p>If option <c>monitor</c> is specified, the newly created
process is monitored, and both the pid and reference for
- the monitor is returned.</p>
- <p>The options are as follows:</p>
+ the monitor are returned.</p>
+ <p>Options:</p>
<taglist>
<tag><c>link</c></tag>
<item>
<p>Sets a link to the parent process (like
- <c>spawn_link/3</c> does).</p>
+ <seealso marker="#spawn_link/3"><c>spawn_link/3</c></seealso>
+ does).</p>
</item>
<tag><c>monitor</c></tag>
<item>
<p>Monitors the new process (like
- <seealso marker="#monitor/2">monitor/2</seealso> does).</p>
+ <seealso marker="#monitor/2"><c>monitor/2</c></seealso> does).</p>
</item>
<tag><c>{priority, <anno>Level</anno></c></tag>
<item>
<p>Sets the priority of the new process. Equivalent to
- executing
- <seealso marker="#process_flag_priority">process_flag(priority,
- <anno>Level</anno>)</seealso>
+ executing <seealso marker="#process_flag_priority">
+ <c>process_flag(priority, <anno>Level</anno>)</c></seealso>
in the start function of the new process,
except that the priority is set before the process is
selected for execution for the first time. For more
information on priorities, see
- <seealso marker="#process_flag_priority">process_flag(priority,
- <anno>Level</anno>)</seealso>.</p>
+ <seealso marker="#process_flag_priority">
+ <c>process_flag(priority, <anno>Level</anno>)</c></seealso>.</p>
</item>
<tag><c>{fullsweep_after, <anno>Number</anno>}</c></tag>
<item>
@@ -5751,21 +5878,22 @@ true</pre>
<p>A few cases when it can be useful to change
<c>fullsweep_after</c>:</p>
<list type="bulleted">
- <item>If binaries that are no longer used are to be
+ <item><p>If binaries that are no longer used are to be
thrown away as soon as possible. (Set
- <c><anno>Number</anno></c> to zero.)
+ <c><anno>Number</anno></c> to zero.)</p>
</item>
- <item>A process that mostly have short-lived data is
+ <item><p>A process that mostly have short-lived data is
fullsweeped seldom or never, that is, the old heap
contains mostly garbage. To ensure a fullsweep
occasionally, set <c><anno>Number</anno></c> to a
- suitable value, such as 10 or 20.
+ suitable value, such as 10 or 20.</p>
</item>
<item>In embedded systems with a limited amount of RAM
and no virtual memory, you might want to preserve memory
by setting <c><anno>Number</anno></c> to zero.
(The value can be set globally, see
- <seealso marker="#system_flag/2">erlang:system_flag/2</seealso>.)
+ <seealso marker="#system_flag/2">
+ <c>erlang:system_flag/2</c></seealso>.)
</item>
</list>
</item>
@@ -5790,7 +5918,7 @@ true</pre>
option unless you know that there is problem with
execution times or memory consumption, and
ensure that the option improves matters.</p>
- <p>Gives a minimum binary virtual heap size, in words.
+ <p>Gives a minimum binary virtual heap size, in words.
Setting this value
higher than the system default can speed up some
processes because less garbage collection is done.
@@ -5802,24 +5930,25 @@ true</pre>
<tag><c>{max_heap_size, <anno>Size</anno>}</c></tag>
<item>
<p>Sets the <c>max_heap_size</c> process flag. The default
- <c>max_heap_size</c> is determined by the
- <seealso marker="erl#+hmax"><c>+hmax</c></seealso> <c>erl</c>
- command line argument. For more information, see the
- documentation of
- <seealso marker="#process_flag_max_heap_size"><c>process_flag(max_heap_size,
- <anno>Size</anno>)</c></seealso>.</p>
+ <c>max_heap_size</c> is determined by command-line argument
+ <seealso marker="erl#+hmax"><c>+hmax</c></seealso>
+ in <c>erl(1)</c>. For more information, see the
+ documentation of <seealso marker="#process_flag_max_heap_size">
+ <c>process_flag(max_heap_size, <anno>Size</anno>)</c></seealso>.
+ </p>
</item>
<tag><c>{message_queue_data, <anno>MQD</anno>}</c></tag>
<item>
<p>Sets the state of the <c>message_queue_data</c> process
- flag. <c><anno>MQD</anno></c> should be either <c>off_heap</c>,
- <c>on_heap</c>, or <c>mixed</c>. The default
- <c>message_queue_data</c> process flag is determined by the
- <seealso marker="erl#+hmqd"><c>+hmqd</c></seealso> <c>erl</c>
- command line argument. For more information, see the
- documentation of
- <seealso marker="#process_flag_message_queue_data"><c>process_flag(message_queue_data,
- <anno>MQD</anno>)</c></seealso>.</p>
+ flag. <c><anno>MQD</anno></c> is to be either <c>off_heap</c>
+ or <c>on_heap</c>. The default
+ <c>message_queue_data</c> process flag is determined by
+ command-line argument <seealso marker="erl#+hmqd">
+ <c>+hmqd</c></seealso> in <c>erl(1)</c>.
+ For more information, see the documentation of
+ <seealso marker="#process_flag_message_queue_data">
+ <c>process_flag(message_queue_data,
+ <anno>MQD</anno>)</c></seealso>.</p>
</item>
</taglist>
</desc>
@@ -5827,11 +5956,12 @@ true</pre>
<func>
<name name="spawn_opt" arity="5"/>
- <fsummary>Creates a new process with a function as entry point on a given node.</fsummary>
+ <fsummary>Create a new process with a function as entry point on a
+ specified node.</fsummary>
<type name="priority_level"/>
- <type name="max_heap_size" />
- <type name="message_queue_data" />
- <type name="spawn_opt_option" />
+ <type name="max_heap_size"/>
+ <type name="message_queue_data"/>
+ <type name="spawn_opt_option"/>
<desc>
<p>Returns the process identifier (pid) of a new process started
by the application
@@ -5839,23 +5969,24 @@ true</pre>
<c><anno>Args</anno></c> on <c><anno>Node</anno></c>. If
<c><anno>Node</anno></c> does not exist, a useless pid is returned.
Otherwise works like
- <seealso marker="#spawn_opt/4">spawn_opt/4</seealso>.</p>
- <note><p>Option <c>monitor</c> is not supported by
- <c>spawn_opt/5</c>.</p></note>
+ <seealso marker="#spawn_opt/4"><c>spawn_opt/4</c></seealso>.</p>
+ <note>
+ <p>Option <c>monitor</c> is not supported by
+ <c>spawn_opt/5</c>.</p>
+ </note>
</desc>
</func>
<func>
<name name="split_binary" arity="2"/>
- <fsummary>Splits a binary into two.</fsummary>
+ <fsummary>Split a binary into two.</fsummary>
<type_desc variable="Pos">0..byte_size(Bin)</type_desc>
<desc>
<p>Returns a tuple containing the binaries that are the result
of splitting <c><anno>Bin</anno></c> into two parts at
position <c><anno>Pos</anno></c>.
This is not a destructive operation. After the operation,
- there are three binaries altogether.</p>
- <p>Example:</p>
+ there are three binaries altogether. Example:</p>
<pre>
> <input>B = list_to_binary("0123456789").</input>
&lt;&lt;"0123456789">>
@@ -5871,104 +6002,96 @@ true</pre>
</func>
<func>
+ <name name="start_timer" arity="3"/>
+ <fsummary>Start a timer.</fsummary>
+ <desc>
+ <p>Starts a timer. The same as calling
+ <seealso marker="#start_timer/4">
+ <c>erlang:start_timer(<anno>Time</anno>,
+ <anno>Dest</anno>, <anno>Msg</anno>, [])</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
<name name="start_timer" arity="4"/>
- <fsummary>Starts a timer.</fsummary>
+ <fsummary>Start a timer.</fsummary>
<desc>
- <p>
- Starts a timer. When the timer expires, the message
+ <p>Starts a timer. When the timer expires, the message
<c>{timeout, <anno>TimerRef</anno>, <anno>Msg</anno>}</c>
- is sent to the process identified by
- <c><anno>Dest</anno></c>.
- </p>
- <p>Available <c><anno>Option</anno></c>s:</p>
+ is sent to the process identified by <c><anno>Dest</anno></c>.</p>
+ <p><c><anno>Option</anno></c>s:</p>
<taglist>
<tag><c>{abs, false}</c></tag>
<item>
- <p>
- This is the default. It means the
- <c><anno>Time</anno></c> value is interpreted
- as a time in milli-seconds <em>relative</em> current
- <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
- monotonic time</seealso>.
- </p>
- </item>
+ <p>This is the default. It means the
+ <c><anno>Time</anno></c> value is interpreted
+ as a time in milliseconds <em>relative</em> current
+ <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
+ monotonic time</seealso>.</p>
+ </item>
<tag><c>{abs, true}</c></tag>
<item>
- <p>
- Absolute <c><anno>Time</anno></c> value. The
- <c><anno>Time</anno></c> value is interpreted as an
- absolute Erlang monotonic time in milli-seconds.
- </p>
- </item>
+ <p>Absolute <c><anno>Time</anno></c> value. The
+ <c><anno>Time</anno></c> value is interpreted as an
+ absolute Erlang monotonic time in milliseconds.</p>
+ </item>
</taglist>
- <p>
- More <c><anno>Option</anno></c>s may be added in the future.
- </p>
- <p>
- The absolute point in time, the timer is set to expire on,
- has to be in the interval
- <c>[</c><seealso marker="#system_info_start_time"><c>erlang:system_info(start_time)</c></seealso><c>,
- </c><seealso marker="#system_info_end_time"><c>erlang:system_info(end_time)</c></seealso><c>]</c>.
- Further, if a relative time is specified, the <c><anno>Time</anno></c> value
- is not allowed to be negative.
- </p>
- <p>
- If <c><anno>Dest</anno></c> is a <c>pid()</c>, it must
- be a <c>pid()</c> of a process created on the current
- runtime system instance. This process may or may not
- have terminated. If <c><anno>Dest</anno></c> is an
- <c>atom()</c>, it is interpreted as the name of a
- locally registered process. The process referred to by the
- name is looked up at the time of timer expiration. No error
- is given if the name does not refer to a process.
- </p>
- <p>
- If <c><anno>Dest</anno></c> is a <c>pid()</c>, the timer is
- automatically canceled if the process referred to by the
- <c>pid()</c> is not alive, or if the process exits. This
- feature was introduced in ERTS version 5.4.11. Notice that
- timers are not automatically canceled when
- <c><anno>Dest</anno></c> is an <c>atom()</c>.
- </p>
+ <p>More <c><anno>Option</anno></c>s can be added in the future.</p>
+ <p>The absolute point in time, the timer is set to expire on,
+ must be in the interval
+ <c>[</c><seealso marker="#system_info_start_time">
+ <c>erlang:system_info(start_time)</c></seealso><c>,
+ </c><seealso marker="#system_info_end_time">
+ <c>erlang:system_info(end_time)</c></seealso><c>]</c>.
+ If a relative time is specified, the <c><anno>Time</anno></c>
+ value is not allowed to be negative.</p>
+ <p>If <c><anno>Dest</anno></c> is a <c>pid()</c>, it must
+ be a <c>pid()</c> of a process created on the current
+ runtime system instance. This process has either terminated
+ or not. If <c><anno>Dest</anno></c> is an
+ <c>atom()</c>, it is interpreted as the name of a
+ locally registered process. The process referred to by the
+ name is looked up at the time of timer expiration. No error
+ is returned if the name does not refer to a process.</p>
+ <p>If <c><anno>Dest</anno></c> is a <c>pid()</c>, the timer is
+ automatically canceled if the process referred to by the
+ <c>pid()</c> is not alive, or if the process exits. This
+ feature was introduced in ERTS 5.4.11. Notice that
+ timers are not automatically canceled when
+ <c><anno>Dest</anno></c> is an <c>atom()</c>.</p>
<p>See also
<seealso marker="#send_after/4"><c>erlang:send_after/4</c></seealso>,
- <seealso marker="#cancel_timer/2"><c>erlang:cancel_timer/2</c></seealso>,
- and
- <seealso marker="#read_timer/2"><c>erlang:read_timer/2</c></seealso>.</p>
+ <seealso marker="#cancel_timer/2">
+ <c>erlang:cancel_timer/2</c></seealso>, and
+ <seealso marker="#read_timer/2">
+ <c>erlang:read_timer/2</c></seealso>.</p>
<p>Failure: <c>badarg</c> if the arguments do not satisfy
the requirements specified here.</p>
</desc>
</func>
<func>
- <name name="start_timer" arity="3"/>
- <fsummary>Starts a timer.</fsummary>
- <desc>
- <p>Starts a timer. The same as calling
- <seealso marker="#start_timer/4"><c>erlang:start_timer(<anno>Time</anno>,
- <anno>Dest</anno>, <anno>Msg</anno>, [])</c></seealso>.</p>
- </desc>
- </func>
-
- <func>
<name name="statistics" arity="1" clause_i="1"/>
<fsummary>Information about active processes and ports.</fsummary>
- <desc><marker id="statistics_active_tasks"></marker>
- <p>
- Returns a list where each element represents the amount
- of active processes and ports on each run queue and its
- associated scheduler. That is, the number of processes and
- ports that are ready to run, or are currently running. The
- element location in the list corresponds to the scheduler
- and its run queue. The first element corresponds to scheduler
- number 1 and so on. The information is <em>not</em> gathered
- atomically. That is, the result is not necessarily a
- consistent snapshot of the state, but instead quite
- efficiently gathered. See also,
- <seealso marker="#statistics_total_active_tasks"><c>statistics(total_active_tasks)</c></seealso>,
- <seealso marker="#statistics_run_queue_lengths"><c>statistics(run_queue_lengths)</c></seealso>, and
- <seealso marker="#statistics_total_run_queue_lengths"><c>statistics(total_run_queue_lengths)</c></seealso>.
- </p>
+ <desc>
+ <marker id="statistics_active_tasks"></marker>
+ <p>Returns a list where each element represents the amount
+ of active processes and ports on each run queue and its
+ associated scheduler. That is, the number of processes and
+ ports that are ready to run, or are currently running. The
+ element location in the list corresponds to the scheduler
+ and its run queue. The first element corresponds to scheduler
+ number 1 and so on. The information is <em>not</em> gathered
+ atomically. That is, the result is not necessarily a
+ consistent snapshot of the state, but instead quite
+ efficiently gathered.</p>
+ <p>See also
+ <seealso marker="#statistics_total_active_tasks">
+ <c>statistics(total_active_tasks)</c></seealso>,
+ <seealso marker="#statistics_run_queue_lengths">
+ <c>statistics(run_queue_lengths)</c></seealso>, and
+ <seealso marker="#statistics_total_run_queue_lengths">
+ <c>statistics(total_run_queue_lengths)</c></seealso>.</p>
</desc>
</func>
@@ -5987,11 +6110,13 @@ true</pre>
<desc>
<marker id="statistics_exact_reductions"></marker>
<p>Returns the number of exact reductions.</p>
- <note><p><c>statistics(exact_reductions)</c> is
- a more expensive operation than
- <seealso marker="#statistics_reductions">statistics(reductions)</seealso>,
- especially on an Erlang machine with SMP support.</p>
- </note>
+ <note>
+ <p><c>statistics(exact_reductions)</c> is
+ a more expensive operation than
+ <seealso marker="#statistics_reductions">
+ statistics(reductions)</seealso>,
+ especially on an Erlang machine with SMP support.</p>
+ </note>
</desc>
</func>
@@ -6000,7 +6125,7 @@ true</pre>
<fsummary>Information about garbage collection.</fsummary>
<desc>
<p>Returns information about garbage collection, for example:</p>
- <pre>
+ <pre>
> <input>statistics(garbage_collection).</input>
{85,23961,0}</pre>
<p>This information can be invalid for some implementations.</p>
@@ -6012,9 +6137,9 @@ true</pre>
<fsummary>Information about I/O.</fsummary>
<desc>
<p>Returns <c><anno>Input</anno></c>,
- which is the total number of bytes
- received through ports, and <c><anno>Output</anno></c>,
- which is the total number of bytes output to ports.</p>
+ which is the total number of bytes
+ received through ports, and <c><anno>Output</anno></c>,
+ which is the total number of bytes output to ports.</p>
</desc>
</func>
@@ -6023,23 +6148,21 @@ true</pre>
<fsummary>Information about microstate accounting.</fsummary>
<desc>
<marker id="statistics_microstate_accounting"></marker>
- <p>
- Microstate accounting can be used to measure how much time the Erlang
+ <p>Microstate accounting can be used to measure how much time the Erlang
runtime system spends doing various tasks. It is designed to be as
- lightweight as possible, but there will be some overhead when this
+ lightweight as possible, but some overhead exists when this
is enabled. Microstate accounting is meant to be a profiling tool
- to help figure out performance bottlenecks.
- To <c>start</c>/<c>stop</c>/<c>reset</c> microstate_accounting you use
- the system_flag
- <seealso marker="#system_flag_microstate_accounting">
- <c>microstate_accounting</c></seealso>.
- </p>
- <p>
- <c>erlang:statistics(microstate_accounting)</c> returns a list of maps
- representing some of the OS threads within ERTS. Each map contains
- <c>type</c> and <c>id</c> fields that can be used to identify what
+ to help finding performance bottlenecks.
+ To <c>start</c>/<c>stop</c>/<c>reset</c> microstate accounting, use
+ system flag <seealso marker="#system_flag_microstate_accounting">
+ <c>microstate_accounting</c></seealso>.</p>
+ <p><c>statistics(microstate_accounting)</c> returns a list of maps
+ representing some of the OS threads within ERTS. Each map
+ contains <c>type</c> and <c>id</c> fields that can be used to
+ identify what
thread it is, and also a counters field that contains data about how
much time has been spent in the various states.</p>
+ <p>Example:</p>
<pre>
> <input>erlang:statistics(microstate_accounting).</input>
[#{counters => #{aux => 1899182914,
@@ -6050,12 +6173,11 @@ true</pre>
port => 221631,
sleep => 5150294100},
id => 1,
- type => scheduler}|...]
- </pre>
+ type => scheduler}|...]</pre>
<p>The time unit is the same as returned by
- <seealso marker="kernel:os#perf_counter/0">
+ <seealso marker="kernel:os#perf_counter/0">
<c>os:perf_counter/0</c></seealso>.
- So to convert it to milliseconds you could do something like this:</p>
+ So, to convert it to milliseconds, you can do something like this:</p>
<pre>
lists:map(
fun(#{ counters := Cnt } = M) ->
@@ -6063,39 +6185,40 @@ lists:map(
erlang:convert_time_unit(PerfCount, perf_counter, 1000)
end, Cnt),
M#{ counters := MsCnt }
- end, erlang:statistics(microstate_accounting)).
- </pre>
- <p>
- It is important to note that these values are not guaranteed to be
+ end, erlang:statistics(microstate_accounting)).</pre>
+ <p>Notice that these values are not guaranteed to be
the exact time spent in each state. This is because of various
- optimisation done in order to keep the overhead as small as possible.
- </p>
-
- <p>Currently the following <c><anno>MSAcc_Thread_Type</anno></c> are available:</p>
+ optimisation done to keep the overhead as small as possible.</p>
+ <p><c><anno>MSAcc_Thread_Type</anno></c>s:</p>
<taglist>
<tag><c>scheduler</c></tag>
<item>The main execution threads that do most of the work.</item>
- <tag><c>async</c></tag><item>Async threads are used by various
- linked-in drivers (mainly the file drivers) do offload non-cpu
- intensive work.</item>
- <tag><c>aux</c></tag><item>Takes care of any work that is not
- specifically assigned to a scheduler.</item>
+ <tag><c>dirty_cpu_scheduler</c></tag>
+ <item>The threads for long running cpu intensive work.</item>
+ <tag><c>dirty_io_scheduler</c></tag>
+ <item>The threads for long running I/O work.</item>
+ <tag><c>async</c></tag>
+ <item>Async threads are used by various linked-in drivers (mainly the
+ file drivers) do offload non-CPU intensive work.</item>
+ <tag><c>aux</c></tag>
+ <item>Takes care of any work that is not
+ specifically assigned to a scheduler.</item>
</taglist>
- <p>Currently the following <c><anno>MSAcc_Thread_State</anno></c>s are available.
- All states are exclusive, meaning that a thread cannot be in two states
- at once. So if you add the numbers of all counters in a thread
- you will get the total run-time for that thread.</p>
+ <p>The following <c><anno>MSAcc_Thread_State</anno></c>s are available.
+ All states are exclusive, meaning that a thread cannot be in two
+ states at once. So, if you add the numbers of all counters in a
+ thread, you get the total runtime for that thread.</p>
<taglist>
<tag><c>aux</c></tag>
<item>Time spent handling auxiliary jobs.</item>
<tag><c>check_io</c></tag>
<item>Time spent checking for new I/O events.</item>
<tag><c>emulator</c></tag>
- <item>Time spent executing erlang processes.</item>
+ <item>Time spent executing Erlang processes.</item>
<tag><c>gc</c></tag>
<item>Time spent doing garbage collection. When extra states are
- enabled this is the time spent doing non-fullsweep garbage
- collections.</item>
+ enabled this is the time spent doing non-fullsweep garbage
+ collections.</item>
<tag><c>other</c></tag>
<item>Time spent doing unaccounted things.</item>
<tag><c>port</c></tag>
@@ -6103,61 +6226,59 @@ lists:map(
<tag><c>sleep</c></tag>
<item>Time spent sleeping.</item>
</taglist>
- <p>It is possible to add more fine grained <c><anno>MSAcc_Thread_State</anno></c>s
- through configure.
- (e.g. <c>./configure --with-microstate-accounting=extra</c>).
- Enabling these states will cause a performance degradation when
- microstate accounting is turned off and increase the overhead when
- it is turned on.</p>
+ <p>More fine-grained <c><anno>MSAcc_Thread_State</anno></c>s can
+ be added through configure (such as
+ <c>./configure --with-microstate-accounting=extra</c>).
+ Enabling these states causes performance degradation when
+ microstate accounting is turned off and increases the overhead when
+ it is turned on.</p>
<taglist>
<tag><c>alloc</c></tag>
<item>Time spent managing memory. Without extra states this time is
- spread out over all other states.</item>
+ spread out over all other states.</item>
<tag><c>bif</c></tag>
- <item>Time spent in bifs. Without extra states this time is part of
- the <c>emulator</c> state.</item>
+ <item>Time spent in BIFs. Without extra states this time is part of
+ the <c>emulator</c> state.</item>
<tag><c>busy_wait</c></tag>
<item>Time spent busy waiting. This is also the state where a
- scheduler no longer reports that it is active when using
- <seealso marker="#statistics_scheduler_wall_time">
- <c>erlang:statistics(scheduler_wall_time)</c></seealso>.
- So if you add all other states but this and sleep and then divide that
- by all time in the thread you should get something very similar to the
- scheduler_wall_time fraction. Without extra states this time is part
- of the <c>other</c> state.</item>
+ scheduler no longer reports that it is active when using
+ <seealso marker="#statistics_scheduler_wall_time">
+ <c>statistics(scheduler_wall_time)</c></seealso>. So, if you add
+ all other states but this and sleep, and then divide that by all
+ time in the thread, you should get something very similar to the
+ <c>scheduler_wall_time</c> fraction. Without extra states this
+ time is part of the <c>other</c> state.</item>
<tag><c>ets</c></tag>
- <item>Time spent executing ETS bifs. Without extra states this time is
- part of the <c>emulator</c> state.</item>
+ <item>Time spent executing ETS BIFs. Without extra states
+ this time is part of the <c>emulator</c> state.</item>
<tag><c>gc_full</c></tag>
<item>Time spent doing fullsweep garbage collection. Without extra
- states this time is part of the <c>gc</c> state.</item>
+ states this time is part of the <c>gc</c> state.</item>
<tag><c>nif</c></tag>
- <item>Time spent in nifs. Without extra states this time is part of
- the <c>emulator</c> state.</item>
+ <item>Time spent in NIFs. Without extra states this time is part of
+ the <c>emulator</c> state.</item>
<tag><c>send</c></tag>
<item>Time spent sending messages (processes only). Without extra
- states this time is part of the <c>emulator</c> state.</item>
+ states this time is part of the <c>emulator</c> state.</item>
<tag><c>timers</c></tag>
<item>Time spent managing timers. Without extra states this time is
- part of the <c>other</c> state.</item>
+ part of the <c>other</c> state.</item>
</taglist>
- <p>There is a utility module called
- <seealso marker="runtime_tools:msacc"><c>msacc</c></seealso> in
- runtime_tools that can be used to more easily analyse these
- statistics.</p>
-
- <p>
- Returns <c>undefined</c> if the system flag
+ <p>The utility module
+ <seealso marker="runtime_tools:msacc"><c>msacc(3)</c></seealso>
+ can be used to more easily analyse these statistics.</p>
+ <p>Returns <c>undefined</c> if system flag
<seealso marker="#system_flag_microstate_accounting">
- <c>microstate_accounting</c></seealso>
- is turned off.
- </p>
- <p>The list of thread information is unsorted and may appear in
- different order between calls.</p>
- <note><p>The threads and states are subject to change without any
- prior notice.</p></note>
+ <c>microstate_accounting</c></seealso> is turned off.</p>
+ <p>The list of thread information is unsorted and can appear in
+ different order between calls.</p>
+ <note>
+ <p>The threads and states are subject to change without any
+ prior notice.</p>
+ </note>
</desc>
</func>
+
<func>
<name name="statistics" arity="1" clause_i="7"/>
<fsummary>Information about reductions.</fsummary>
@@ -6167,11 +6288,12 @@ lists:map(
<pre>
> <input>statistics(reductions).</input>
{2046,11}</pre>
- <note><p>As from <c>ERTS</c> 5.5 (OTP R11B),
+ <note><p>As from ERTS 5.5 (Erlang/OTP R11B),
this value does not include reductions performed in current
time slices of currently scheduled processes. If an
exact value is wanted, use
- <seealso marker="#statistics_exact_reductions">statistics(exact_reductions)</seealso>.</p>
+ <seealso marker="#statistics_exact_reductions">
+ <c>statistics(exact_reductions)</c></seealso>.</p>
</note>
</desc>
</func>
@@ -6180,15 +6302,14 @@ lists:map(
<name name="statistics" arity="1" clause_i="8"/>
<fsummary>Information about the run-queues.</fsummary>
<desc><marker id="statistics_run_queue"></marker>
- <p>
- Returns the total length of the run-queues. That is, the number
+ <p>Returns the total length of the run-queues. That is, the number
of processes and ports that are ready to run on all available
- run-queues. The information is gathered atomically. That
- is, the result is a consistent snapshot of the state, but
- this operation is much more expensive compared to
- <seealso marker="#statistics_total_run_queue_lengths"><c>statistics(total_run_queue_lengths)</c></seealso>.
- This especially when a large amount of schedulers is used.
- </p>
+ run-queues. The information is gathered atomically. That
+ is, the result is a consistent snapshot of the state, but
+ this operation is much more expensive compared to
+ <seealso marker="#statistics_total_run_queue_lengths">
+ <c>statistics(total_run_queue_lengths)</c></seealso>,
+ especially when a large amount of schedulers is used.</p>
</desc>
</func>
@@ -6196,19 +6317,21 @@ lists:map(
<name name="statistics" arity="1" clause_i="9"/>
<fsummary>Information about the run-queue lengths.</fsummary>
<desc><marker id="statistics_run_queue_lengths"></marker>
- <p>
- Returns a list where each element represents the amount
- of processes and ports ready to run for each run queue. The
- element location in the list corresponds to the run queue
- of a scheduler. The first element corresponds to the run
- queue of scheduler number 1 and so on. The information is
- <em>not</em> gathered atomically. That is, the result is
- not necessarily a consistent snapshot of the state, but
- instead quite efficiently gathered. See also,
- <seealso marker="#statistics_total_run_queue_lengths"><c>statistics(total_run_queue_lengths)</c></seealso>,
- <seealso marker="#statistics_active_tasks"><c>statistics(active_tasks)</c></seealso>, and
- <seealso marker="#statistics_total_active_tasks"><c>statistics(total_active_tasks)</c></seealso>.
- </p>
+ <p>Returns a list where each element represents the amount
+ of processes and ports ready to run for each run queue. The
+ element location in the list corresponds to the run queue
+ of a scheduler. The first element corresponds to the run
+ queue of scheduler number 1 and so on. The information is
+ <em>not</em> gathered atomically. That is, the result is
+ not necessarily a consistent snapshot of the state, but
+ instead quite efficiently gathered.</p>
+ <p>See also
+ <seealso marker="#statistics_total_run_queue_lengths">
+ <c>statistics(total_run_queue_lengths)</c></seealso>,
+ <seealso marker="#statistics_active_tasks">
+ <c>statistics(active_tasks)</c></seealso>, and
+ <seealso marker="#statistics_total_active_tasks">
+ <c>statistics(total_active_tasks)</c></seealso>.</p>
</desc>
</func>
@@ -6218,8 +6341,8 @@ lists:map(
<desc>
<p>Returns information about runtime, in milliseconds.</p>
<p>This is the sum of the runtime for all threads
- in the Erlang runtime system and can therefore be greater
- than the wall clock time.</p>
+ in the Erlang runtime system and can therefore be greater
+ than the wall clock time.</p>
<p>Example:</p>
<pre>
> <input>statistics(runtime).</input>
@@ -6231,7 +6354,7 @@ lists:map(
<name name="statistics" arity="1" clause_i="11"/>
<fsummary>Information about each schedulers work time.</fsummary>
<desc>
- <marker id="statistics_scheduler_wall_time"></marker>
+ <marker id="statistics_scheduler_wall_time"></marker>
<p>Returns a list of tuples with
<c>{<anno>SchedulerId</anno>, <anno>ActiveTime</anno>,
<anno>TotalTime</anno>}</c>, where
@@ -6239,7 +6362,8 @@ lists:map(
<c><anno>ActiveTime</anno></c> is
the duration the scheduler has been busy, and
<c><anno>TotalTime</anno></c> is the total time duration since
- <seealso marker="#system_flag_scheduler_wall_time">scheduler_wall_time</seealso>
+ <seealso marker="#system_flag_scheduler_wall_time">
+ <c>scheduler_wall_time</c></seealso>
activation. The time unit is undefined and can be subject
to change between releases, OSs, and system restarts.
<c>scheduler_wall_time</c> is only to be used to
@@ -6251,28 +6375,28 @@ lists:map(
that is:</p>
<list type="bulleted">
<item>Executing process code</item>
- <item>Executing linked-in-driver or NIF code</item>
- <item>Executing built-in-functions, or any other runtime
- handling</item>
+ <item>Executing linked-in driver or NIF code</item>
+ <item>Executing BIFs, or any other runtime handling</item>
<item>Garbage collecting</item>
<item>Handling any other memory management</item>
</list>
- <p>Notice that a scheduler can also be busy even if the
- OS has scheduled out the scheduler thread.</p>
+ <p>Notice that a scheduler can also be busy even if the
+ OS has scheduled out the scheduler thread.</p>
<p>Returns <c>undefined</c> if system flag
- <seealso marker="#system_flag_scheduler_wall_time">scheduler_wall_time</seealso>
- is turned off.</p>
+ <seealso marker="#system_flag_scheduler_wall_time">
+ <c>scheduler_wall_time</c></seealso> is turned off.</p>
<p>The list of scheduler information is unsorted and can
appear in different order between calls.</p>
- <p>Using <c>scheduler_wall_time</c> to calculate scheduler-utilization:</p>
-<pre>
+ <p>Using <c>scheduler_wall_time</c> to calculate
+ scheduler-utilization:</p>
+ <pre>
> <input>erlang:system_flag(scheduler_wall_time, true).</input>
false
> <input>Ts0 = lists:sort(erlang:statistics(scheduler_wall_time)), ok.</input>
ok</pre>
<p>Some time later the user takes another snapshot and calculates
scheduler-utilization per scheduler, for example:</p>
-<pre>
+ <pre>
> <input>Ts1 = lists:sort(erlang:statistics(scheduler_wall_time)), ok.</input>
ok
> <input>lists:map(fun({{I, A0, T0}, {I, A1, T1}}) ->
@@ -6285,8 +6409,9 @@ ok
{6,0.9739235846420741},
{7,0.973237033077876},
{8,0.9741297293248656}]</pre>
- <p>Using the same snapshots to calculate a total scheduler-utilization:</p>
-<pre>
+ <p>Using the same snapshots to calculate a total
+ scheduler-utilization:</p>
+ <pre>
> <input>{A, T} = lists:foldl(fun({{_, A0, T0}, {_, A1, T1}}, {Ai,Ti}) ->
{Ai + (A1 - A0), Ti + (T1 - T0)} end, {0, 0}, lists:zip(Ts0,Ts1)), A/T.</input>
0.9769136803764825</pre>
@@ -6302,17 +6427,19 @@ ok
<name name="statistics" arity="1" clause_i="12"/>
<fsummary>Information about active processes and ports.</fsummary>
<desc><marker id="statistics_total_active_tasks"></marker>
- <p>
- Returns the total amount of active processes and ports in
- the system. That is, the number of processes and ports that
- are ready to run, or are currently running. The information
- is <em>not</em> gathered atomically. That is, the result
- is not necessarily a consistent snapshot of the state, but
- instead quite efficiently gathered. See also,
- <seealso marker="#statistics_active_tasks"><c>statistics(active_tasks)</c></seealso>,
- <seealso marker="#statistics_run_queue_lengths"><c>statistics(run_queue_lengths)</c></seealso>, and
- <seealso marker="#statistics_total_run_queue_lengths"><c>statistics(total_run_queue_lengths)</c></seealso>.
- </p>
+ <p>Returns the total amount of active processes and ports in
+ the system. That is, the number of processes and ports that
+ are ready to run, or are currently running. The information
+ is <em>not</em> gathered atomically. That is, the result
+ is not necessarily a consistent snapshot of the state, but
+ instead quite efficiently gathered.</p>
+ <p>See also
+ <seealso marker="#statistics_active_tasks">
+ <c>statistics(active_tasks)</c></seealso>,
+ <seealso marker="#statistics_run_queue_lengths">
+ <c>statistics(run_queue_lengths)</c></seealso>, and
+ <seealso marker="#statistics_total_run_queue_lengths">
+ <c>statistics(total_run_queue_lengths)</c></seealso>.</p>
</desc>
</func>
@@ -6320,18 +6447,19 @@ ok
<name name="statistics" arity="1" clause_i="13"/>
<fsummary>Information about the run-queue lengths.</fsummary>
<desc><marker id="statistics_total_run_queue_lengths"></marker>
- <p>
- Returns the total length of the run-queues. That is, the number
+ <p>Returns the total length of the run queues. That is, the number
of processes and ports that are ready to run on all available
- run-queues. The information is <em>not</em> gathered atomically.
- That is, the result is not necessarily a consistent snapshot of
- the state, but much more efficiently gathered compared to
- <seealso marker="#statistics_run_queue"><c>statistics(run_queue)</c></seealso>.
- See also,
- <seealso marker="#statistics_run_queue_lengths"><c>statistics(run_queue_lengths)</c></seealso>,
- <seealso marker="#statistics_total_active_tasks"><c>statistics(total_active_tasks)</c></seealso>, and
- <seealso marker="#statistics_active_tasks"><c>statistics(active_tasks)</c></seealso>.
- </p>
+ run queues. The information is <em>not</em> gathered atomically.
+ That is, the result is not necessarily a consistent snapshot of
+ the state, but much more efficiently gathered compared to
+ <seealso marker="#statistics_run_queue">
+ <c>statistics(run_queue)</c></seealso>.</p>
+ <p>See also <seealso marker="#statistics_run_queue_lengths">
+ <c>statistics(run_queue_lengths)</c></seealso>,
+ <seealso marker="#statistics_total_active_tasks">
+ <c>statistics(total_active_tasks)</c></seealso>, and
+ <seealso marker="#statistics_active_tasks">
+ <c>statistics(active_tasks)</c></seealso>.</p>
</desc>
</func>
@@ -6347,64 +6475,80 @@ ok
</func>
<func>
+ <name name="suspend_process" arity="1"/>
+ <fsummary>Suspend a process.</fsummary>
+ <desc>
+ <p>Suspends the process identified by
+ <c><anno>Suspendee</anno></c>. The same as calling
+ <seealso marker="#suspend_process/2">
+ <c>erlang:suspend_process(<anno>Suspendee</anno>,
+ [])</c></seealso>.</p>
+ <warning>
+ <p>This BIF is intended for debugging only.</p>
+ </warning>
+ </desc>
+ </func>
+
+ <func>
<name name="suspend_process" arity="2"/>
- <fsummary>Suspends a process.</fsummary>
+ <fsummary>Suspend a process.</fsummary>
<desc>
<p>Increases the suspend count on the process identified by
- <c><anno>Suspendee</anno></c> and puts it in the suspended
- state if it is not
- already in that state. A suspended process will not be
- scheduled for execution until the process has been resumed.</p>
- <p>A process can be suspended by multiple processes and can
- be suspended multiple times by a single process. A suspended
- process does not leave the suspended state until its suspend
- count reaches zero. The suspend count of
- <c><anno>Suspendee</anno></c> is decreased when
- <seealso marker="#resume_process/1">erlang:resume_process(<anno>Suspendee</anno>)</seealso>
- is called by the same process that called
- <c>erlang:suspend_process(<anno>Suspendee</anno>)</c>.
- All increased suspend
- counts on other processes acquired by a process are automatically
- decreased when the process terminates.</p>
- <p>The options (<c><anno>Opt</anno></c>s) are as follows:</p>
+ <c><anno>Suspendee</anno></c> and puts it in the suspended
+ state if it is not
+ already in that state. A suspended process is not
+ scheduled for execution until the process has been resumed.</p>
+ <p>A process can be suspended by multiple processes and can
+ be suspended multiple times by a single process. A suspended
+ process does not leave the suspended state until its suspend
+ count reaches zero. The suspend count of
+ <c><anno>Suspendee</anno></c> is decreased when
+ <seealso marker="#resume_process/1">
+ <c>erlang:resume_process(<anno>Suspendee</anno>)</c></seealso>
+ is called by the same process that called
+ <c>erlang:suspend_process(<anno>Suspendee</anno>)</c>.
+ All increased suspend
+ counts on other processes acquired by a process are automatically
+ decreased when the process terminates.</p>
+ <p>Options (<c><anno>Opt</anno></c>s):</p>
<taglist>
<tag><c>asynchronous</c></tag>
<item>
- A suspend request is sent to the process identified by
- <c><anno>Suspendee</anno></c>. <c><anno>Suspendee</anno></c>
- eventually suspends
- unless it is resumed before it could suspend. The caller
- of <c>erlang:suspend_process/2</c> returns immediately,
- regardless of whether <c><anno>Suspendee</anno></c> has
- suspended yet or not. The point in time when
- <c><anno>Suspendee</anno></c> suspends cannot be deduced
- from other events in the system. It is only guaranteed that
- <c><anno>Suspendee</anno></c> <em>eventually</em> suspends
- (unless it
- is resumed). If option <c>asynchronous</c> has <em>not</em>
- been passed, the caller of <c>erlang:suspend_process/2</c> is
- blocked until <c><anno>Suspendee</anno></c> has suspended.
- </item>
+ <p>A suspend request is sent to the process identified by
+ <c><anno>Suspendee</anno></c>. <c><anno>Suspendee</anno></c>
+ eventually suspends
+ unless it is resumed before it could suspend. The caller
+ of <c>erlang:suspend_process/2</c> returns immediately,
+ regardless of whether <c><anno>Suspendee</anno></c> has
+ suspended yet or not. The point in time when
+ <c><anno>Suspendee</anno></c> suspends cannot be deduced
+ from other events in the system. It is only guaranteed that
+ <c><anno>Suspendee</anno></c> <em>eventually</em> suspends
+ (unless it
+ is resumed). If option <c>asynchronous</c> has <em>not</em>
+ been passed, the caller of <c>erlang:suspend_process/2</c> is
+ blocked until <c><anno>Suspendee</anno></c> has suspended.</p>
+ </item>
<tag><c>unless_suspending</c></tag>
<item>
- The process identified by <c><anno>Suspendee</anno></c> is
- suspended unless the calling process already is suspending
- <c><anno>Suspendee</anno></c>.
- If <c>unless_suspending</c> is combined
- with option <c>asynchronous</c>, a suspend request is
- sent unless the calling process already is suspending
- <c><anno>Suspendee</anno></c> or if a suspend request
- already has been sent and is in transit. If the calling
- process already is suspending <c><anno>Suspendee</anno></c>,
- or if combined with option <c>asynchronous</c>
- and a send request already is in transit,
- <c>false</c> is returned and the suspend count on
- <c><anno>Suspendee</anno></c> remains unchanged.
- </item>
+ <p>The process identified by <c><anno>Suspendee</anno></c> is
+ suspended unless the calling process already is suspending
+ <c><anno>Suspendee</anno></c>.
+ If <c>unless_suspending</c> is combined
+ with option <c>asynchronous</c>, a suspend request is
+ sent unless the calling process already is suspending
+ <c><anno>Suspendee</anno></c> or if a suspend request
+ already has been sent and is in transit. If the calling
+ process already is suspending <c><anno>Suspendee</anno></c>,
+ or if combined with option <c>asynchronous</c>
+ and a send request already is in transit,
+ <c>false</c> is returned and the suspend count on
+ <c><anno>Suspendee</anno></c> remains unchanged.</p>
+ </item>
</taglist>
- <p>If the suspend count on the process identified by
- <c><anno>Suspendee</anno></c> is increased, <c>true</c>
- is returned, otherwise <c>false</c>.</p>
+ <p>If the suspend count on the process identified by
+ <c><anno>Suspendee</anno></c> is increased, <c>true</c>
+ is returned, otherwise <c>false</c>.</p>
<warning>
<p>This BIF is intended for debugging only.</p>
</warning>
@@ -6412,58 +6556,44 @@ ok
<taglist>
<tag><c>badarg</c></tag>
<item>
- If <c><anno>Suspendee</anno></c> is not a process identifier.
- </item>
+ If <c><anno>Suspendee</anno></c> is not a process identifier.
+ </item>
<tag><c>badarg</c></tag>
<item>
- If the process identified by <c><anno>Suspendee</anno></c>
- is the same process
- as the process calling <c>erlang:suspend_process/2</c>.
- </item>
+ If the process identified by <c><anno>Suspendee</anno></c>
+ is the same process
+ as the process calling <c>erlang:suspend_process/2</c>.
+ </item>
<tag><c>badarg</c></tag>
<item>
- If the process identified by <c><anno>Suspendee</anno></c>
- is not alive.
- </item>
+ If the process identified by <c><anno>Suspendee</anno></c>
+ is not alive.
+ </item>
<tag><c>badarg</c></tag>
<item>
- If the process identified by <c><anno>Suspendee</anno></c>
- resides on another node.
- </item>
+ If the process identified by <c><anno>Suspendee</anno></c>
+ resides on another node.
+ </item>
<tag><c>badarg</c></tag>
<item>
- If <c><anno>OptList</anno></c> is not a proper list of valid
- <c><anno>Opt</anno></c>s.
- </item>
+ If <c><anno>OptList</anno></c> is not a proper list of valid
+ <c><anno>Opt</anno></c>s.
+ </item>
<tag><c>system_limit</c></tag>
<item>
- If the process identified by <c><anno>Suspendee</anno></c>
- has been suspended
- more times by the calling process than can be represented by the
- currently used internal data structures. The system limit is
- higher than 2,000,000,000 suspends and will never be lower.
- </item>
+ If the process identified by <c><anno>Suspendee</anno></c>
+ has been suspended
+ more times by the calling process than can be represented by the
+ currently used internal data structures. The system limit is
+ &gt; 2,000,000,000 suspends and will never be lower.
+ </item>
</taglist>
</desc>
</func>
<func>
- <name name="suspend_process" arity="1"/>
- <fsummary>Suspends a process.</fsummary>
- <desc>
- <p>Suspends the process identified by
- <c><anno>Suspendee</anno></c>. The same as calling
- <seealso marker="#suspend_process/2">erlang:suspend_process(<anno>Suspendee</anno>,
- [])</seealso>.</p>
- <warning>
- <p>This BIF is intended for debugging only.</p>
- </warning>
- </desc>
- </func>
-
- <func>
<name name="system_flag" arity="2" clause_i="1"/>
- <fsummary>Sets system flag <c>backtrace_depth</c>.</fsummary>
+ <fsummary>Set system flag <c>backtrace_depth</c>.</fsummary>
<desc>
<p>Sets the maximum depth of call stack back-traces in the
exit reason element of <c>'EXIT'</c> tuples.</p>
@@ -6473,7 +6603,7 @@ ok
<func>
<name name="system_flag" arity="2" clause_i="2"/>
- <fsummary>Sets system flag <c>cpu_topology</c>.</fsummary>
+ <fsummary>Set system flag <c>cpu_topology</c>.</fsummary>
<type name="cpu_topology"/>
<type name="level_entry"/>
<type name="level_tag"/>
@@ -6482,52 +6612,52 @@ ok
<desc>
<warning>
<p><marker id="system_flag_cpu_topology"></marker>
- This argument is <em>deprecated</em> and scheduled for
- removal in <c>ERTS</c> 5.10/OTP R16. Instead of using this
- argument, use command-line argument
- <seealso marker="erts:erl#+sct">+sct</seealso> in
- <c>erl(1)</c>.</p>
+ <em>This argument is deprecated.</em>
+ Instead of using this argument, use command-line argument
+ <seealso marker="erts:erl#+sct"><c>+sct</c></seealso> in
+ <c>erl(1)</c>.</p>
<p>When this argument is removed, a final CPU topology
- to use is determined at emulator boot time.</p>
+ to use is determined at emulator boot time.</p>
</warning>
<p>Sets the user-defined <c><anno>CpuTopology</anno></c>.
- The user-defined
- CPU topology overrides any automatically detected
- CPU topology. By passing <c>undefined</c> as
- <c><anno>CpuTopology</anno></c>,
- the system reverts to the CPU topology automatically
- detected. The returned value equals the value returned
- from <c>erlang:system_info(cpu_topology)</c> before the
- change was made.</p>
+ The user-defined
+ CPU topology overrides any automatically detected
+ CPU topology. By passing <c>undefined</c> as
+ <c><anno>CpuTopology</anno></c>,
+ the system reverts to the CPU topology automatically
+ detected. The returned value equals the value returned
+ from <c>erlang:system_info(cpu_topology)</c> before the
+ change was made.</p>
<p>Returns the old value of the flag.</p>
<p>The CPU topology is used when binding schedulers to logical
- processors. If schedulers are already bound when the CPU
- topology is changed, the schedulers are sent a request
- to rebind according to the new CPU topology.</p>
+ processors. If schedulers are already bound when the CPU
+ topology is changed, the schedulers are sent a request
+ to rebind according to the new CPU topology.</p>
<p>The user-defined CPU topology can also be set by passing
- command-line argument
- <seealso marker="erts:erl#+sct">+sct</seealso> to
- <c>erl(1)</c>.</p>
+ command-line argument
+ <seealso marker="erts:erl#+sct"><c>+sct</c></seealso> to
+ <c>erl(1)</c>.</p>
<p>For information on type <c><anno>CpuTopology</anno></c>
- and more, see
- <seealso marker="#system_info_cpu_topology">erlang:system_info(cpu_topology)</seealso>
- as well as the command-line flags
- <seealso marker="erts:erl#+sct">+sct</seealso> and
- <seealso marker="erts:erl#+sbt">+sbt</seealso> in
- <c>erl(1)</c>.</p>
+ and more, see
+ <seealso marker="#system_info_cpu_topology">
+ <c>erlang:system_info(cpu_topology)</c></seealso>
+ as well as command-line flags
+ <seealso marker="erts:erl#+sct"><c>+sct</c></seealso> and
+ <seealso marker="erts:erl#+sbt"><c>+sbt</c></seealso> in
+ <c>erl(1)</c>.</p>
</desc>
</func>
<func>
<name name="system_flag" arity="2" clause_i="3"/>
- <fsummary>Sets <c>system_flag_dirty_cpu_schedulers_online</c>.</fsummary>
+ <fsummary>Set system_flag_dirty_cpu_schedulers_online.</fsummary>
<desc>
<p><marker id="system_flag_dirty_cpu_schedulers_online"></marker>
- Sets the number of dirty CPU schedulers online. Range is
- <![CDATA[1 <= DirtyCPUSchedulersOnline <= N]]>, where <c>N</c>
- is the smallest of the return values of
- <c>erlang:system_info(dirty_cpu_schedulers)</c> and
- <c>erlang:system_info(schedulers_online)</c>.</p>
+ Sets the number of dirty CPU schedulers online. Range is
+ <c><![CDATA[1 <= DirtyCPUSchedulersOnline <= N]]></c>, where <c>N</c>
+ is the smallest of the return values of
+ <c>erlang:system_info(dirty_cpu_schedulers)</c> and
+ <c>erlang:system_info(schedulers_online)</c>.</p>
<p>Returns the old value of the flag.</p>
<p>The number of dirty CPU schedulers online can change if the
number of schedulers online changes. For example, if 12
@@ -6538,20 +6668,22 @@ ok
down to 3. Similarly, the number of dirty CPU schedulers
online increases proportionally to increases in the number of
schedulers online.</p>
- <note><p>The dirty schedulers functionality is experimental.
- Enable support for dirty schedulers when building OTP to
- try out the functionality.</p>
+ <note>
+ <p>The dirty schedulers functionality is experimental.
+ Enable support for dirty schedulers when building OTP to
+ try out the functionality.</p>
</note>
<p>For more information, see
- <seealso marker="#system_info_dirty_cpu_schedulers">erlang:system_info(dirty_cpu_schedulers)</seealso>
- and
- <seealso marker="#system_info_dirty_cpu_schedulers_online">erlang:system_info(dirty_cpu_schedulers_online)</seealso>.</p>
+ <seealso marker="#system_info_dirty_cpu_schedulers">
+ <c>erlang:system_info(dirty_cpu_schedulers)</c></seealso> and
+ <seealso marker="#system_info_dirty_cpu_schedulers_online">
+ <c>erlang:system_info(dirty_cpu_schedulers_online)</c></seealso>.</p>
</desc>
</func>
<func>
<name name="system_flag" arity="2" clause_i="4"/>
- <fsummary>Sets system flag <c>fullsweep_after</c>.</fsummary>
+ <fsummary>Set system flag fullsweep_after.</fsummary>
<desc>
<p>Sets system flag <c>fullsweep_after</c>.
<c><anno>Number</anno></c> is a non-negative integer indicating
@@ -6570,276 +6702,297 @@ ok
<func>
<name name="system_flag" arity="2" clause_i="5"/>
- <fsummary>Set system flag microstate_accounting</fsummary>
- <desc><p><marker id="system_flag_microstate_accounting"></marker>
- Turns on/off microstate accounting measurements. By passing reset it is possible to reset
- all counters to 0.</p>
- <p>For more information see,
- <seealso marker="#statistics_microstate_accounting">erlang:statistics(microstate_accounting)</seealso>.
- </p>
+ <fsummary>Set system flag microstate_accounting.</fsummary>
+ <desc>
+ <p><marker id="system_flag_microstate_accounting"></marker>
+ Turns on/off microstate accounting measurements. When passing reset,
+ all counters are reset to 0.</p>
+ <p>For more information see
+ <seealso marker="#statistics_microstate_accounting">
+ <c>statistics(microstate_accounting)</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="system_flag" arity="2" clause_i="6"/>
- <fsummary>Sets system flag <c>min_heap_size</c>.</fsummary>
+ <fsummary>Set system flag min_heap_size.</fsummary>
<desc>
<p>Sets the default minimum heap size for processes. The size
- is given in words. The new <c>min_heap_size</c> effects
+ is specified in words. The new <c>min_heap_size</c> effects
only processes spawned after the change of
<c>min_heap_size</c> has been made. <c>min_heap_size</c>
can be set for individual processes by using
- <seealso marker="#spawn_opt/4">spawn_opt/N</seealso> or
- <seealso marker="#process_flag/2">process_flag/2</seealso>.</p>
+ <seealso marker="#spawn_opt/4"><c>spawn_opt/4</c></seealso> or
+ <seealso marker="#process_flag/2"><c>process_flag/2</c></seealso>.</p>
<p>Returns the old value of the flag.</p>
</desc>
</func>
<func>
<name name="system_flag" arity="2" clause_i="7"/>
- <fsummary>Sets system flag <c>min_bin_vheap_size</c>.</fsummary>
+ <fsummary>Set system flag min_bin_vheap_size.</fsummary>
<desc>
<p>Sets the default minimum binary virtual heap size for
- processes. The size is given in words.
+ processes. The size is specified in words.
The new <c>min_bin_vhheap_size</c> effects only
processes spawned after the change of
- <c>min_bin_vhheap_size</c> has been made.
+ <c>min_bin_vheap_size</c> has been made.
<c>min_bin_vheap_size</c> can be set for individual
processes by using
- <seealso marker="#spawn_opt/4">spawn_opt/N</seealso> or
- <seealso marker="#process_flag/2">process_flag/2</seealso>.</p>
+ <seealso marker="#spawn_opt/4"><c>spawn_opt/2,3,4</c></seealso> or
+ <seealso marker="#process_flag/2"><c>process_flag/2</c></seealso>.</p>
<p>Returns the old value of the flag.</p>
</desc>
</func>
- <marker id="system_flag_max_heap_size"></marker>
<func>
<name name="system_flag" arity="2" clause_i="8"/>
+ <fsummary>Set system flag max_heap_size.</fsummary>
<type name="max_heap_size"/>
- <fsummary>Sets system flag <c>max_heap_size</c></fsummary>
<desc>
+ <marker id="system_flag_max_heap_size"></marker>
<p>
Sets the default maximum heap size settings for processes.
- The size is given in words. The new <c>max_heap_size</c>
+ The size is specified in words. The new <c>max_heap_size</c>
effects only processes spawned efter the change has been made.
<c>max_heap_size</c> can be set for individual processes using
- <seealso marker="#spawn_opt/4">spawn_opt/N</seealso> or
- <seealso marker="#process_flag_message_queue_data">process_flag/2</seealso>.</p>
+ <seealso marker="#spawn_opt/4"><c>spawn_opt/2,3,4</c></seealso> or
+ <seealso marker="#process_flag_message_queue_data">
+ <c>process_flag/2</c></seealso>.</p>
<p>Returns the old value of the flag.</p>
</desc>
</func>
<func>
<name name="system_flag" arity="2" clause_i="9"/>
- <fsummary>Sets system flag <c>multi_scheduling</c>.</fsummary>
+ <fsummary>Set system flag multi_scheduling.</fsummary>
<desc>
<p><marker id="system_flag_multi_scheduling"></marker>
If multi-scheduling is enabled, more than one scheduler
thread is used by the emulator. Multi-scheduling can be
blocked in two different ways. Either all schedulers but
- one is blocked, or all <em>normal</em> schedulers but
- one is blocked. When only normal schedulers are blocked
- dirty schedulers are free to continue to schedule
- processes.</p>
+ one is blocked, or all <em>normal</em> schedulers but
+ one is blocked. When only normal schedulers are blocked,
+ dirty schedulers are free to continue to schedule
+ processes.</p>
<p>If <c><anno>BlockState</anno> =:= block</c>, multi-scheduling is
blocked. That is, one and only one scheduler thread will
- execute. If <c><anno>BlockState</anno> =:= unblock</c> and no one
+ execute. If <c><anno>BlockState</anno> =:= unblock</c> and no one
else blocks multi-scheduling, and this process has
blocked only once, multi-scheduling is unblocked.</p>
<p>If <c><anno>BlockState</anno> =:= block_normal</c>, normal
- multi-scheduling is blocked. That is, only one normal scheduler
- thread will execute, but multiple dirty schedulers may execute.
- If <c><anno>BlockState</anno> =:= unblock_normal</c> and no one
+ multi-scheduling is blocked. That is, only one normal scheduler
+ thread will execute, but multiple dirty schedulers can execute.
+ If <c><anno>BlockState</anno> =:= unblock_normal</c> and no one
else blocks normal multi-scheduling, and this process has
blocked only once, normal multi-scheduling is unblocked.</p>
- <p>One process can block multi-scheduling as well as normal
- multi-scheduling multiple times. If a process has blocked
- multiple times, it must unblock exactly as many times as it
- has blocked before it has released its multi-scheduling
- block. If a process that has blocked multi-scheduling or normal
- multi scheduling exits, it automatically releases its blocking
- of multi-scheduling and normal multi-scheduling.</p>
+ <p>One process can block multi-scheduling and normal
+ multi-scheduling multiple times. If a process has blocked
+ multiple times, it must unblock exactly as many times as it
+ has blocked before it has released its multi-scheduling
+ block. If a process that has blocked multi-scheduling or normal
+ multi-scheduling exits, it automatically releases its blocking
+ of multi-scheduling and normal multi-scheduling.</p>
<p>The return values are <c>disabled</c>, <c>blocked</c>,
<c>blocked_normal</c>, or <c>enabled</c>. The returned value
- describes the state just after the call to
+ describes the state just after the call to
<c>erlang:system_flag(multi_scheduling, <anno>BlockState</anno>)</c>
has been made. For information about the return values, see
- <seealso marker="#system_info_multi_scheduling">erlang:system_info(multi_scheduling)</seealso>.</p>
+ <seealso marker="#system_info_multi_scheduling">
+ <c>erlang:system_info(multi_scheduling)</c></seealso>.</p>
<note><p>Blocking of multi-scheduling and normal multi-scheduling
- is normally not needed. If you feel that you need to use these
- features, consider it a few more times again. Blocking
- multi-scheduling is only to be used as a last resort, as it is
- most likely a <em>very inefficient</em> way to solve the problem.</p>
+ is normally not needed. If you feel that you need to use these
+ features, consider it a few more times again. Blocking
+ multi-scheduling is only to be used as a last resort, as it is
+ most likely a <em>very inefficient</em> way to solve the problem.</p>
</note>
<p>See also
- <seealso marker="#system_info_multi_scheduling">erlang:system_info(multi_scheduling)</seealso>,
- <seealso marker="#system_info_normal_multi_scheduling_blockers">erlang:system_info(normal_multi_scheduling_blockers)</seealso>,
- <seealso marker="#system_info_multi_scheduling_blockers">erlang:system_info(multi_scheduling_blockers)</seealso>, and
- <seealso marker="#system_info_schedulers">erlang:system_info(schedulers)</seealso>.</p>
+ <seealso marker="#system_info_multi_scheduling">
+ <c>erlang:system_info(multi_scheduling)</c></seealso>,
+ <seealso marker="#system_info_normal_multi_scheduling_blockers">
+ <c>erlang:system_info(normal_multi_scheduling_blockers)</c></seealso>,
+ <seealso marker="#system_info_multi_scheduling_blockers">
+ <c>erlang:system_info(multi_scheduling_blockers)</c></seealso>, and
+ <seealso marker="#system_info_schedulers">
+ <c>erlang:system_info(schedulers)</c></seealso>.</p>
</desc>
</func>
<func>
<name name="system_flag" arity="2" clause_i="10"/>
- <fsummary>Sets system flag <c>scheduler_bind_type</c>.</fsummary>
+ <fsummary>Set system flag scheduler_bind_type.</fsummary>
<type name="scheduler_bind_type"/>
<desc>
<warning>
<p><marker id="system_flag_scheduler_bind_type"></marker>
- This argument is <em>deprecated</em> and scheduled for
- removal in <c>ERTS</c> 5.10/OTP R16. Instead of using this
- argument, use command-line argument
- <seealso marker="erts:erl#+sbt">+sbt</seealso> in <c>erl(1)</c>.
- When this argument is removed, a final scheduler bind
- type to use is determined at emulator boot time.</p>
+ <em>This argument is deprecated.</em>
+ Instead of using this argument, use command-line argument
+ <seealso marker="erts:erl#+sbt"><c>+sbt</c></seealso> in
+ <c>erl(1)</c>. When this argument is removed, a final scheduler bind
+ type to use is determined at emulator boot time.</p>
</warning>
<p>Controls if and how schedulers are bound to logical
- processors.</p>
+ processors.</p>
<p>When <c>erlang:system_flag(scheduler_bind_type, <anno>How</anno>)</c>
- is called, an asynchronous signal is sent to all schedulers
- online, causing them to try to bind or unbind as requested.</p>
+ is called, an asynchronous signal is sent to all schedulers
+ online, causing them to try to bind or unbind as requested.</p>
<note><p>If a scheduler fails to bind, this is often silently
- ignored, as it is not always possible to verify valid
- logical processor identifiers. If an error is reported,
- it is reported to <c>error_logger</c>. To verify that the
- schedulers have bound as requested, call
- <seealso marker="#system_info_scheduler_bindings">erlang:system_info(scheduler_bindings)</seealso>.</p>
+ ignored, as it is not always possible to verify valid
+ logical processor identifiers. If an error is reported,
+ it is reported to <c>error_logger</c>. To verify that the
+ schedulers have bound as requested, call
+ <seealso marker="#system_info_scheduler_bindings">
+ <c>erlang:system_info(scheduler_bindings)</c></seealso>.</p>
</note>
<p>Schedulers can be bound on newer Linux,
- Solaris, FreeBSD, and Windows systems, but more systems will be
- supported in future releases.</p>
+ Solaris, FreeBSD, and Windows systems, but more systems will be
+ supported in future releases.</p>
<p>In order for the runtime system to be able to bind schedulers,
- the CPU topology must be known. If the runtime system fails
- to detect the CPU topology automatically, it can be defined.
- For more information on how to define the CPU topology, see
- command-line flag <seealso marker="erts:erl#+sct">+sct</seealso>
- in <c>erl(1)</c>.</p>
+ the CPU topology must be known. If the runtime system fails
+ to detect the CPU topology automatically, it can be defined.
+ For more information on how to define the CPU topology, see
+ command-line flag <seealso marker="erts:erl#+sct">
+ <c>+sct</c></seealso> in <c>erl(1)</c>.</p>
<p>The runtime system does by default <em>not</em> bind schedulers
- to logical processors.</p>
+ to logical processors.</p>
<note><p>If the Erlang runtime system is the only OS
- process binding threads to logical processors, this
- improves the performance of the runtime system. However,
- if other OS processes (for example, another Erlang
- runtime system) also bind threads to logical processors,
- there can be a performance penalty instead. Sometimes this
- performance penalty can be severe. If so, it is recommended
- to not bind the schedulers.</p>
+ process binding threads to logical processors, this
+ improves the performance of the runtime system. However,
+ if other OS processes (for example, another Erlang
+ runtime system) also bind threads to logical processors,
+ there can be a performance penalty instead. Sometimes this
+ performance penalty can be severe. If so, it is recommended
+ to not bind the schedulers.</p>
</note>
<p>Schedulers can be bound in different ways. Argument
- <c><anno>How</anno></c> determines how schedulers are
- bound and can be any of the following:</p>
+ <c><anno>How</anno></c> determines how schedulers are
+ bound and can be any of the following:</p>
<taglist>
<tag><c>unbound</c></tag>
- <item><p>Same as command-line argument
- <seealso marker="erts:erl#+sbt">+sbt u</seealso> in <c>erl(1)</c>.
- </p></item>
+ <item>Same as command-line argument
+ <seealso marker="erts:erl#+sbt"><c>+sbt u</c></seealso> in
+ <c>erl(1)</c>.
+ </item>
<tag><c>no_spread</c></tag>
- <item><p>Same as command-line argument
- <seealso marker="erts:erl#+sbt">+sbt ns</seealso> in <c>erl(1)</c>.
- </p></item>
+ <item>Same as command-line argument
+ <seealso marker="erts:erl#+sbt"><c>+sbt ns</c></seealso>
+ in <c>erl(1)</c>.
+ </item>
<tag><c>thread_spread</c></tag>
- <item><p>Same as command-line argument
- <seealso marker="erts:erl#+sbt">+sbt ts</seealso> in <c>erl(1)</c>.
- </p></item>
+ <item>Same as command-line argument
+ <seealso marker="erts:erl#+sbt"><c>+sbt ts</c></seealso>
+ in <c>erl(1)</c>.
+ </item>
<tag><c>processor_spread</c></tag>
- <item><p>Same as command-line argument
- <seealso marker="erts:erl#+sbt">+sbt ps</seealso> in <c>erl(1)</c>.
- </p></item>
+ <item>Same as command-line argument
+ <seealso marker="erts:erl#+sbt"><c>+sbt ps</c></seealso>
+ in <c>erl(1)</c>.
+ </item>
<tag><c>spread</c></tag>
- <item><p>Same as command-line argument
- <seealso marker="erts:erl#+sbt">+sbt s</seealso> in <c>erl(1)</c>.
- </p></item>
+ <item>Same as command-line argument
+ <seealso marker="erts:erl#+sbt"><c>+sbt s</c></seealso>
+ in <c>erl(1)</c>.
+ </item>
<tag><c>no_node_thread_spread</c></tag>
- <item><p>Same as command-line argument
- <seealso marker="erts:erl#+sbt">+sbt nnts</seealso> in <c>erl(1)</c>.
- </p></item>
+ <item>Same as command-line argument
+ <seealso marker="erts:erl#+sbt"><c>+sbt nnts</c></seealso>
+ in <c>erl(1)</c>.
+ </item>
<tag><c>no_node_processor_spread</c></tag>
- <item><p>Same as command-line argument
- <seealso marker="erts:erl#+sbt">+sbt nnps</seealso> in <c>erl(1)</c>.
- </p></item>
+ <item>Same as command-line argument
+ <seealso marker="erts:erl#+sbt"><c>+sbt nnps</c></seealso>
+ in <c>erl(1)</c>.
+ </item>
<tag><c>thread_no_node_processor_spread</c></tag>
- <item><p>Same as command-line argument
- <seealso marker="erts:erl#+sbt">+sbt tnnps</seealso> in <c>erl(1)</c>.
- </p></item>
+ <item>Same as command-line argument
+ <seealso marker="erts:erl#+sbt"><c>+sbt tnnps</c></seealso>
+ in <c>erl(1)</c>.
+ </item>
<tag><c>default_bind</c></tag>
- <item><p>Same as command-line argument
- <seealso marker="erts:erl#+sbt">+sbt db</seealso> in <c>erl(1)</c>.
- </p></item>
+ <item>Same as command-line argument
+ <seealso marker="erts:erl#+sbt"><c>+sbt db</c></seealso>
+ in <c>erl(1)</c>.
+ </item>
</taglist>
<p>The returned value equals <c><anno>How</anno></c> before flag
<c>scheduler_bind_type</c> was changed.</p>
<p>Failures:</p>
<taglist>
<tag><c>notsup</c></tag>
- <item>
- <p>If binding of schedulers is not supported.</p>
+ <item>If binding of schedulers is not supported.
</item>
<tag><c>badarg</c></tag>
- <item>
- <p>If <c><anno>How</anno></c> is not one of the documented
- alternatives.</p>
+ <item>If <c><anno>How</anno></c> is not one of the documented
+ alternatives.
</item>
<tag><c>badarg</c></tag>
- <item>
- <p>If CPU topology information is unavailable.</p>
+ <item>If CPU topology information is unavailable.
</item>
</taglist>
- <p>The scheduler bind type can also be set by passing
- command-line argument
- <seealso marker="erts:erl#+sbt">+sbt</seealso> to <c>erl(1)</c>.</p>
+ <p>The scheduler bind type can also be set by passing command-line
+ argument <seealso marker="erts:erl#+sbt">
+ <c>+sbt</c></seealso> to <c>erl(1)</c>.</p>
<p>For more information, see
- <seealso marker="#system_info_scheduler_bind_type">erlang:system_info(scheduler_bind_type)</seealso>,
- <seealso marker="#system_info_scheduler_bindings">erlang:system_info(scheduler_bindings)</seealso>,
- as well as command-line flags
- <seealso marker="erts:erl#+sbt">+sbt</seealso>
- and <seealso marker="erts:erl#+sct">+sct</seealso>
- in <c>erl(1)</c>.</p>
+ <seealso marker="#system_info_scheduler_bind_type">
+ <c>erlang:system_info(scheduler_bind_type)</c></seealso>,
+ <seealso marker="#system_info_scheduler_bindings">
+ <c>erlang:system_info(scheduler_bindings)</c></seealso>,
+ as well as command-line flags
+ <seealso marker="erts:erl#+sbt"><c>+sbt</c></seealso>
+ and <seealso marker="erts:erl#+sct"><c>+sct</c></seealso>
+ in <c>erl(1)</c>.</p>
</desc>
</func>
<func>
<name name="system_flag" arity="2" clause_i="11"/>
- <fsummary>Sets system flag <c>scheduler_wall_time</c>.</fsummary>
- <desc><p><marker id="system_flag_scheduler_wall_time"></marker>
- Turns on or off scheduler wall time measurements.</p>
- <p>For more information, see
- <seealso marker="#statistics_scheduler_wall_time">erlang:statistics(scheduler_wall_time)</seealso>.</p>
+ <fsummary>Set system flag scheduler_wall_time.</fsummary>
+ <desc>
+ <p><marker id="system_flag_scheduler_wall_time"></marker>
+ Turns on or off scheduler wall time measurements.</p>
+ <p>For more information, see
+ <seealso marker="#statistics_scheduler_wall_time">
+ <c>statistics(scheduler_wall_time)</c></seealso>.</p>
</desc>
</func>
<func>
<name name="system_flag" arity="2" clause_i="12"/>
- <fsummary>Sets system flag <c>schedulers_online</c>.</fsummary>
+ <fsummary>Set system flag schedulers_online.</fsummary>
<desc>
<p><marker id="system_flag_schedulers_online"></marker>
- Sets the number of schedulers online. Range is
- <![CDATA[1 <= SchedulersOnline <= erlang:system_info(schedulers)]]>.</p>
+ Sets the number of schedulers online. Range is
+ <c><![CDATA[1 <= SchedulersOnline <=
+ erlang:system_info(schedulers)]]></c>.</p>
<p>Returns the old value of the flag.</p>
<p>If the emulator was built with support for
- <seealso marker="#system_flag_dirty_cpu_schedulers_online">dirty schedulers</seealso>,
- changing the number of schedulers online can also change the
- number of dirty CPU schedulers online. For example, if 12
- schedulers and 6 dirty CPU schedulers are online, and
- <c>system_flag/2</c> is used to set the number of schedulers
- online to 6, then the number of dirty CPU schedulers online
- is automatically decreased by half as well, down to 3.
- Similarly, the number of dirty CPU schedulers online increases
- proportionally to increases in the number of schedulers online.</p>
+ <seealso marker="#system_flag_dirty_cpu_schedulers_online">
+ dirty schedulers</seealso>,
+ changing the number of schedulers online can also change the
+ number of dirty CPU schedulers online. For example, if 12
+ schedulers and 6 dirty CPU schedulers are online, and
+ <c>system_flag/2</c> is used to set the number of schedulers
+ online to 6, then the number of dirty CPU schedulers online
+ is automatically decreased by half as well, down to 3.
+ Similarly, the number of dirty CPU schedulers online increases
+ proportionally to increases in the number of schedulers online.</p>
<p>For more information, see
- <seealso marker="#system_info_schedulers">erlang:system_info(schedulers)</seealso>
- and
- <seealso marker="#system_info_schedulers_online">erlang:system_info(schedulers_online)</seealso>.</p>
+ <seealso marker="#system_info_schedulers">
+ <c>erlang:system_info(schedulers)</c></seealso> and
+ <seealso marker="#system_info_schedulers_online">
+ <c>erlang:system_info(schedulers_online)</c></seealso>.</p>
</desc>
</func>
<func>
<name name="system_flag" arity="2" clause_i="13"/>
- <fsummary>Sets system flag <c>trace_control_word</c>.</fsummary>
+ <fsummary>Set system flag trace_control_word.</fsummary>
<desc>
<p>Sets the value of the node trace control word to
<c><anno>TCW</anno></c>, which is to be an unsigned integer.
- For more information, see the function
- <seealso marker="erts:match_spec#set_tcw">set_tcw</seealso>
- in Section "Match Specifications in Erlang" in the
+ For more information, see function
+ <seealso marker="erts:match_spec#set_tcw"><c>set_tcw</c></seealso>
+ in section "Match Specifications in Erlang" in the
User's Guide.</p>
<p>Returns the old value of the flag.</p>
</desc>
@@ -6847,29 +7000,30 @@ ok
<func>
<name name="system_flag" arity="2" clause_i="14"/>
- <fsummary>Finalize the Time Offset</fsummary>
+ <fsummary>Finalize the time offset.</fsummary>
<desc>
<p><marker id="system_flag_time_offset"></marker>
- Finalizes the <seealso marker="#time_offset/0">time offset</seealso>
- when <seealso marker="time_correction#Single_Time_Warp_Mode">single
- time warp mode</seealso> is used. If another time warp mode
- is used, the time offset state is left unchanged.</p>
- <p>Returns the old state identifier. That is:</p>
- <list>
- <item><p>If <c>preliminary</c> is returned, finalization was
- performed and the time offset is now final.</p></item>
-
- <item><p>If <c>final</c> is returned, the time offset was
- already in the final state. This either because another
- <c>erlang:system_flag(time_offset, finalize)</c> call, or
- because <seealso marker="time_correction#No_Time_Warp_Mode">no
- time warp mode</seealso> is used.</p></item>
-
- <item><p>If <c>volatile</c> is returned, the time offset
- cannot be finalized because
- <seealso marker="time_correction#Multi_Time_Warp_Mode">multi
- time warp mode</seealso> is used.</p></item>
- </list>
+ Finalizes the <seealso marker="#time_offset/0">time offset</seealso>
+ when <seealso marker="time_correction#Single_Time_Warp_Mode">single
+ time warp mode</seealso> is used. If another time warp mode
+ is used, the time offset state is left unchanged.</p>
+ <p>Returns the old state identifier, that is:</p>
+ <list>
+ <item><p>If <c>preliminary</c> is returned, finalization was
+ performed and the time offset is now final.</p>
+ </item>
+ <item><p>If <c>final</c> is returned, the time offset was
+ already in the final state. This either because another
+ <c>erlang:system_flag(time_offset, finalize)</c> call or
+ because <seealso marker="time_correction#No_Time_Warp_Mode">no
+ time warp mode</seealso> is used.</p>
+ </item>
+ <item><p>If <c>volatile</c> is returned, the time offset
+ cannot be finalized because
+ <seealso marker="time_correction#Multi_Time_Warp_Mode">multi-time
+ warp mode</seealso> is used.</p>
+ </item>
+ </list>
</desc>
</func>
@@ -6886,7 +7040,7 @@ ok
<type variable="Settings" name_i="2"/>
<type variable="Alloc" name_i="3"/>
<desc>
- <marker id="system_info_allocator_tags"></marker>
+ <marker id="system_info_allocator_tags"></marker>
<p>Returns various information about the allocators of the
current system (emulator) as specified by
<c><anno>Item</anno></c>:</p>
@@ -6905,17 +7059,18 @@ ok
<p><c>erlang:system_info(allocated_areas)</c> is intended
for debugging, and the content is highly
implementation-dependent. The content of the results
- therefore changes when needed without prior notice.</p>
+ therefore changes when needed without prior notice.</p>
<p>Notice that the sum of these values is <em>not</em>
the total amount of memory allocated by the emulator.
Some values are part of other values, and some memory
areas are not part of the result. For information about
the total amount of memory allocated by the emulator, see
- <seealso marker="#memory/0">erlang:memory/0,1</seealso>.</p>
+ <seealso marker="#memory/0">
+ <c>erlang:memory/0,1</c></seealso>.</p>
</item>
<tag><c>allocator</c></tag>
<item>
- <marker id="system_info_allocator"></marker>
+ <marker id="system_info_allocator"></marker>
<p>Returns <c>{<anno>Allocator</anno>, <anno>Version</anno>,
<anno>Features</anno>, <anno>Settings</anno></c>, where:</p>
<list type="bulleted">
@@ -6945,27 +7100,30 @@ ok
</item>
</list>
<p>See also "System Flags Effecting erts_alloc" in
- <seealso marker="erts:erts_alloc#flags">erts_alloc(3)</seealso>.</p>
+ <seealso marker="erts:erts_alloc#flags">
+ <c>erts_alloc(3)</c></seealso>.</p>
</item>
<tag><c>alloc_util_allocators</c></tag>
<item>
- <marker id="system_info_alloc_util_allocators"></marker>
- <p>Returns a list of the names of all allocators using
- the <c>ERTS</c> internal <c>alloc_util</c> framework
- as atoms. For more information, see Section
- <seealso marker="erts:erts_alloc#alloc_util">"The
- alloc_util framework" in erts_alloc(3)</seealso>.</p>
+ <marker id="system_info_alloc_util_allocators"></marker>
+ <p>Returns a list of the names of all allocators using
+ the ERTS internal <c>alloc_util</c> framework
+ as atoms. For more information, see section
+ <seealso marker="erts:erts_alloc#alloc_util">The
+ alloc_util framework</seealso>
+ in <c>erts_alloc(3)</c>.</p>
</item>
<tag><c>{allocator, <anno>Alloc</anno>}</c></tag>
<item>
- <marker id="system_info_allocator_tuple"></marker>
+ <marker id="system_info_allocator_tuple"></marker>
<p>Returns information about the specified allocator.
- As from <c>ERTS</c> 5.6.1, the return value is a list
- of <c>{instance, InstanceNo, InstanceInfo}</c> tuples,
- where <c>InstanceInfo</c> contains information about
- a specific instance of the allocator. If <c><anno>Alloc</anno></c> is not a
- recognized allocator, <c>undefined</c> is returned.
- If <c><anno>Alloc</anno></c> is disabled,
+ As from ERTS 5.6.1, the return value is a list
+ of <c>{instance, InstanceNo, InstanceInfo}</c> tuples,
+ where <c>InstanceInfo</c> contains information about
+ a specific instance of the allocator.
+ If <c><anno>Alloc</anno></c> is not a
+ recognized allocator, <c>undefined</c> is returned.
+ If <c><anno>Alloc</anno></c> is disabled,
<c>false</c> is returned.</p>
<p>Notice that the information returned is highly
implementation-dependent and can be changed or removed
@@ -6974,15 +7132,14 @@ ok
as it can be of interest for others it has been
briefly documented.</p>
<p>The recognized allocators are listed in
- <seealso marker="erts:erts_alloc">erts_alloc(3)</seealso>.
- Information about super carriers can be obtained from
- <c>ERTS</c> 8.0 with <c>{allocator, erts_mmap}</c> or from
- <c>ERTS</c> 5.10.4, the returned list when calling with
- <c>{allocator, mseg_alloc}</c> also includes an
- <c>{erts_mmap, _}</c> tuple as one element in the list.</p>
-
+ <seealso marker="erts:erts_alloc"><c>erts_alloc(3)</c></seealso>.
+ Information about super carriers can be obtained from
+ ERTS 8.0 with <c>{allocator, erts_mmap}</c> or from
+ ERTS 5.10.4; the returned list when calling with
+ <c>{allocator, mseg_alloc}</c> also includes an
+ <c>{erts_mmap, _}</c> tuple as one element in the list.</p>
<p>After reading the <c>erts_alloc(3)</c> documentation,
- the returned information
+ the returned information
more or less speaks for itself, but it can be worth
explaining some things. Call counts are presented by two
values, the first value is giga calls, and the second
@@ -6998,19 +7155,20 @@ ok
<item>The third is the maximum value since the emulator
was started.</item>
</list>
- <p>If only one value is present, it is the current value.
+ <p>If only one value is present, it is the current value.
<c>fix_alloc</c> memory block types are presented by two
values. The first value is the memory pool size and
the second value is the used memory size.</p>
</item>
<tag><c>{allocator_sizes, <anno>Alloc</anno>}</c></tag>
<item>
- <marker id="system_info_allocator_sizes"></marker>
- <p>Returns various size information for the specified
- allocator. The information returned is a subset of the
- information returned by
- <seealso marker="#system_info_allocator_tuple"><c>erlang:system_info({allocator, <anno>Alloc</anno>})</c></seealso>.
- </p>
+ <marker id="system_info_allocator_sizes"></marker>
+ <p>Returns various size information for the specified
+ allocator. The information returned is a subset of the
+ information returned by
+ <seealso marker="#system_info_allocator_tuple">
+ <c>erlang:system_info({allocator,
+ <anno>Alloc</anno>})</c></seealso>.</p>
</item>
</taglist>
</desc>
@@ -7044,69 +7202,74 @@ ok
The <c>info_list()</c> can be extended in a future release.
</type_desc>
<desc>
- <marker id="system_info_cpu_topology_tags"></marker>
- <marker id="system_info_cpu_topology"></marker>
+ <marker id="system_info_cpu_topology_tags"></marker>
+ <marker id="system_info_cpu_topology"></marker>
<p>Returns various information about the CPU topology of
the current system (emulator) as specified by
<c><anno>Item</anno></c>:</p>
<taglist>
<tag><c>cpu_topology</c></tag>
<item>
- <p>Returns the <c><anno>CpuTopology</anno></c> currently used by
- the emulator. The CPU topology is used when binding schedulers
- to logical processors. The CPU topology used is the
- <seealso marker="erlang#system_info_cpu_topology_defined">user-defined CPU topology</seealso>,
- if such exists, otherwise the
- <seealso marker="erlang#system_info_cpu_topology_detected">automatically detected CPU topology</seealso>,
- if such exists. If no CPU topology
- exists, <c>undefined</c> is returned.</p>
- <p><c>node</c> refers to Non-Uniform Memory Access (NUMA)
- nodes. <c>thread</c> refers to hardware threads
- (for example, Intel hyper-threads).</p>
+ <p>Returns the <c><anno>CpuTopology</anno></c> currently used by
+ the emulator. The CPU topology is used when binding schedulers
+ to logical processors. The CPU topology used is the
+ <seealso marker="erlang#system_info_cpu_topology_defined">
+ user-defined CPU topology</seealso>,
+ if such exists, otherwise the
+ <seealso marker="erlang#system_info_cpu_topology_detected">
+ automatically detected CPU topology</seealso>,
+ if such exists. If no CPU topology
+ exists, <c>undefined</c> is returned.</p>
+ <p><c>node</c> refers to Non-Uniform Memory Access (NUMA)
+ nodes. <c>thread</c> refers to hardware threads
+ (for example, Intel hyper-threads).</p>
<p>A level in term <c><anno>CpuTopology</anno></c> can be
- omitted if only one entry exists and
- <c><anno>InfoList</anno></c> is empty.</p>
- <p><c>thread</c> can only be a sub level to <c>core</c>.
- <c>core</c> can be a sub level to <c>processor</c>
- or <c>node</c>. <c>processor</c> can be on the
- top level or a sub level to <c>node</c>. <c>node</c>
- can be on the top level or a sub level to
- <c>processor</c>. That is, NUMA nodes can be processor
- internal or processor external. A CPU topology can
- consist of a mix of processor internal and external
- NUMA nodes, as long as each logical CPU belongs to
- <em>one</em> NUMA node. Cache hierarchy is not part of
- the <c><anno>CpuTopology</anno></c> type, but will be in a
- future release. Other things can also make it into the CPU
- topology in a future release. In other words, expect the
- <c><anno>CpuTopology</anno></c> type to change.</p>
+ omitted if only one entry exists and
+ <c><anno>InfoList</anno></c> is empty.</p>
+ <p><c>thread</c> can only be a sublevel to <c>core</c>.
+ <c>core</c> can be a sublevel to <c>processor</c>
+ or <c>node</c>. <c>processor</c> can be on the
+ top level or a sublevel to <c>node</c>. <c>node</c>
+ can be on the top level or a sublevel to
+ <c>processor</c>. That is, NUMA nodes can be processor
+ internal or processor external. A CPU topology can
+ consist of a mix of processor internal and external
+ NUMA nodes, as long as each logical CPU belongs to
+ <em>one</em> NUMA node. Cache hierarchy is not part of
+ the <c><anno>CpuTopology</anno></c> type, but will be in a
+ future release. Other things can also make it into the CPU
+ topology in a future release. So, expect the
+ <c><anno>CpuTopology</anno></c> type to change.</p>
</item>
<tag><c>{cpu_topology, defined}</c></tag>
<item>
- <marker id="system_info_cpu_topology_defined"></marker>
+ <marker id="system_info_cpu_topology_defined"></marker>
<p>Returns the user-defined <c><anno>CpuTopology</anno></c>.
- For more information, see command-line flag
- <seealso marker="erts:erl#+sct">+sct</seealso> in
- <c>erl(1)</c> and argument
- <seealso marker="#system_info_cpu_topology">cpu_topology</seealso>.</p>
+ For more information, see command-line flag
+ <seealso marker="erts:erl#+sct"><c>+sct</c></seealso> in
+ <c>erl(1)</c> and argument
+ <seealso marker="#system_info_cpu_topology">
+ <c>cpu_topology</c></seealso>.</p>
</item>
<tag><c>{cpu_topology, detected}</c></tag>
<item>
- <marker id="system_info_cpu_topology_detected"></marker>
+ <marker id="system_info_cpu_topology_detected"></marker>
<p>Returns the automatically detected
- <c><anno>CpuTopology</anno>y</c>. The
- emulator detects the CPU topology on some newer
- Linux, Solaris, FreeBSD, and Windows systems.
- On Windows system with more than 32 logical processors,
- the CPU topology is not detected.</p>
+ <c><anno>CpuTopology</anno>y</c>. The
+ emulator detects the CPU topology on some newer
+ Linux, Solaris, FreeBSD, and Windows systems.
+ On Windows system with more than 32 logical processors,
+ the CPU topology is not detected.</p>
<p>For more information, see argument
- <seealso marker="#system_info_cpu_topology">cpu_topology</seealso>.</p>
+ <seealso marker="#system_info_cpu_topology">
+ <c>cpu_topology</c></seealso>.</p>
</item>
<tag><c>{cpu_topology, used}</c></tag>
<item>
<p>Returns <c><anno>CpuTopology</anno></c> used by the emulator.
For more information, see argument
- <seealso marker="#system_info_cpu_topology">cpu_topology</seealso>.</p>
+ <seealso marker="#system_info_cpu_topology">
+ <c>cpu_topology</c></seealso>.</p>
</item>
</taglist>
</desc>
@@ -7119,17 +7282,18 @@ ok
<name name="system_info" arity="1" clause_i="37"/>
<name name="system_info" arity="1" clause_i="38"/>
<name name="system_info" arity="1" clause_i="39"/>
+ <fsummary>Information about the default process heap settings.</fsummary>
<type name="message_queue_data"/>
<type name="max_heap_size"/>
- <fsummary>Information about the default process heap settings.</fsummary>
<desc>
+ <p>Returns information about the default process heap settings:</p>
<taglist>
<tag><c>fullsweep_after</c></tag>
<item>
<p>Returns <c>{fullsweep_after, integer() >= 0}</c>, which is
the <c>fullsweep_after</c> garbage collection setting used
by default. For more information, see
- <c>garbage_collection</c> described in the following.</p>
+ <c>garbage_collection</c> described below.</p>
</item>
<tag><c>garbage_collection</c></tag>
<item>
@@ -7138,50 +7302,52 @@ ok
<c>spawn</c> or <c>spawn_link</c> uses these
garbage collection settings. The default settings can be
changed by using
- <seealso marker="#system_flag/2">system_flag/2</seealso>.
- <seealso marker="#spawn_opt/4">spawn_opt/4</seealso>
+ <seealso marker="#system_flag/2">
+ <c>erlang:system_flag/2</c></seealso>.
+ <seealso marker="#spawn_opt/4"><c>spawn_opt/2,3,4</c></seealso>
can spawn a process that does not use the default
settings.</p>
</item>
<tag><c>max_heap_size</c></tag>
<item>
- <p>Returns <c>{max_heap_size, <anno>MaxHeapSize</anno>}</c>,
+ <p>Returns <c>{max_heap_size, <anno>MaxHeapSize</anno>}</c>,
where <c><anno>MaxHeapSize</anno></c> is the current
- system-wide max heap size settings for spawned processes.
- This setting can be set using the <c>erl</c> command line
- flags <seealso marker="erl#+hmax"><c>+hmax</c></seealso>,
+ system-wide maximum heap size settings for spawned processes.
+ This setting can be set using the command-line flags
+ <seealso marker="erl#+hmax"><c>+hmax</c></seealso>,
<seealso marker="erl#+hmaxk"><c>+hmaxk</c></seealso> and
- <seealso marker="erl#+hmaxel"><c>+hmaxel</c></seealso>. It can
- also be changed at run-time using
+ <seealso marker="erl#+hmaxel"><c>+hmaxel</c></seealso> in
+ <c>erl(1)</c>. It can also be changed at runtime using
<seealso marker="#system_flag_max_heap_size">
- <c>erlang:system_flag(max_heap_size, MaxHeapSize)</c></seealso>.
- For more details about the <c>max_heap_size</c> process flag
+ <c>erlang:system_flag(max_heap_size, MaxHeapSize)</c></seealso>.
+ For more details about the <c>max_heap_size</c> process flag,
see <seealso marker="#process_flag_max_heap_size">
- <c>process_flag(max_heap_size, MaxHeapSize)</c></seealso>.
- </p>
+ <c>process_flag(max_heap_size, MaxHeapSize)</c></seealso>.</p>
</item>
- <tag><c>min_heap_size</c></tag>
+ <tag><c>min_heap_size</c></tag>
<item>
- <p>Returns <c>{min_heap_size, <anno>MinHeapSize</anno>}</c>,
+ <p>Returns <c>{min_heap_size, <anno>MinHeapSize</anno>}</c>,
where <c><anno>MinHeapSize</anno></c> is the current
system-wide minimum heap size for spawned processes.</p>
</item>
- <tag><marker id="system_info_message_queue_data"><c>message_queue_data</c></marker></tag>
+ <tag><marker id="system_info_message_queue_data"/>
+ <c>message_queue_data</c></tag>
<item>
<p>Returns the default value of the <c>message_queue_data</c>
- process flag which is either <c>off_heap</c>, <c>on_heap</c>, or <c>mixed</c>.
- This default is set by the <c>erl</c> command line argument
- <seealso marker="erl#+hmqd"><c>+hmqd</c></seealso>. For more information on the
- <c>message_queue_data</c> process flag, see documentation of
- <seealso marker="#process_flag_message_queue_data"><c>process_flag(message_queue_data,
- MQD)</c></seealso>.</p>
+ process flag, which is either <c>off_heap</c> or <c>on_heap</c>.
+ This default is set by command-line argument
+ <seealso marker="erl#+hmqd"><c>+hmqd</c></seealso> in
+ <c>erl(1)</c>. For more information on the
+ <c>message_queue_data</c> process flag, see documentation of
+ <seealso marker="#process_flag_message_queue_data">
+ <c>process_flag(message_queue_data, MQD)</c></seealso>.</p>
</item>
- <tag><c>min_bin_vheap_size</c></tag>
+ <tag><c>min_bin_vheap_size</c></tag>
<item>
- <p>Returns <c>{min_bin_vheap_size,
+ <p>Returns <c>{min_bin_vheap_size,
<anno>MinBinVHeapSize</anno>}</c>, where
<c><anno>MinBinVHeapSize</anno></c> is the current system-wide
- minimum binary virtual heap size for spawned processes.</p>
+ minimum binary virtual heap size for spawned processes.</p>
</item>
</taglist>
</desc>
@@ -7252,24 +7418,25 @@ ok
<tag><c>allocated_areas</c>, <c>allocator</c>,
<c>alloc_util_allocators</c>, <c>allocator_sizes</c></tag>
<item>
- <p>See <seealso marker="#system_info_allocator_tags">above</seealso>.</p>
+ <p>See <seealso marker="#system_info_allocator_tags">
+ above</seealso>.</p>
</item>
<tag><c>build_type</c></tag>
<item>
<p>Returns an atom describing the build type of the runtime
- system. This is normally the atom <c>opt</c> for optimized.
- Other possible return values are <c>debug</c>, <c>purify</c>,
- <c>quantify</c>, <c>purecov</c>, <c>gcov</c>, <c>valgrind</c>,
- <c>gprof</c>, and <c>lcnt</c>. Possible return values
- can be added or removed at any time without prior notice.</p>
+ system. This is normally the atom <c>opt</c> for optimized.
+ Other possible return values are <c>debug</c>, <c>purify</c>,
+ <c>quantify</c>, <c>purecov</c>, <c>gcov</c>, <c>valgrind</c>,
+ <c>gprof</c>, and <c>lcnt</c>. Possible return values
+ can be added or removed at any time without prior notice.</p>
</item>
<tag><c>c_compiler_used</c></tag>
<item>
<p>Returns a two-tuple describing the C compiler used when
- compiling the runtime system. The first element is an
- atom describing the name of the compiler, or <c>undefined</c>
- if unknown. The second element is a term describing the
- version of the compiler, or <c>undefined</c> if unknown.</p>
+ compiling the runtime system. The first element is an
+ atom describing the name of the compiler, or <c>undefined</c>
+ if unknown. The second element is a term describing the
+ version of the compiler, or <c>undefined</c> if unknown.</p>
</item>
<tag><c>check_io</c></tag>
<item>
@@ -7286,12 +7453,13 @@ ok
Erlang/OTP release that the current emulator has been
set to be backward compatible with. The compatibility
mode can be configured at startup by using command-line flag
- <seealso marker="erts:erl#compat_rel">+R</seealso> in
+ <seealso marker="erts:erl#compat_rel"><c>+R</c></seealso> in
<c>erl(1)</c>.</p>
</item>
<tag><c>cpu_topology</c></tag>
<item>
- <p>See <seealso marker="#system_info_cpu_topology_tags">above</seealso>.</p>
+ <p>See <seealso
+ marker="#system_info_cpu_topology_tags">above</seealso>.</p>
</item>
<tag><c>creation</c></tag>
<item>
@@ -7307,22 +7475,22 @@ ok
</item>
<tag><c>debug_compiled</c></tag>
<item>
- <p>Returns <c>true</c> if the emulator has been debug
- compiled, otherwise <c>false</c>.</p>
+ <p>Returns <c>true</c> if the emulator has been
+ debug-compiled, otherwise <c>false</c>.</p>
</item>
<tag><c>delayed_node_table_gc</c></tag>
<item>
<marker id="system_info_delayed_node_table_gc"></marker>
<p>Returns the amount of time in seconds garbage collection
- of an entry in a node table is delayed. This limit can be set
- on startup by passing the command line flag
- <seealso marker="erts:erl#+zdntgc">+zdntgc</seealso>
- to <c>erl</c>. For more information see the documentation of the
- command line flag.</p>
+ of an entry in a node table is delayed. This limit can be set
+ on startup by passing command-line flag
+ <seealso marker="erts:erl#+zdntgc"><c>+zdntgc</c></seealso>
+ to <c>erl(1)</c>. For more information, see the documentation of
+ the command-line flag.</p>
</item>
<tag><c>dirty_cpu_schedulers</c></tag>
<item>
- <marker id="system_info_dirty_cpu_schedulers"></marker>
+ <marker id="system_info_dirty_cpu_schedulers"></marker>
<p>Returns the number of dirty CPU scheduler threads used by
the emulator. Dirty CPU schedulers execute CPU-bound
native functions, such as NIFs, linked-in driver code,
@@ -7334,23 +7502,31 @@ ok
can be changed at any time. The number of dirty CPU
schedulers can be set at startup by passing
command-line flag
- <seealso marker="erts:erl#+SDcpu">+SDcpu</seealso> or
- <seealso marker="erts:erl#+SDPcpu">+SDPcpu</seealso> in
+ <seealso marker="erts:erl#+SDcpu"><c>+SDcpu</c></seealso> or
+ <seealso marker="erts:erl#+SDPcpu"><c>+SDPcpu</c></seealso> in
<c>erl(1)</c>.</p>
- <p>Notice that the dirty schedulers functionality is
+ <p>Notice that the dirty schedulers functionality is
experimental. Enable support for dirty schedulers when
building OTP to try out the functionality.</p>
<p>See also
- <seealso marker="#system_flag_dirty_cpu_schedulers_online">erlang:system_flag(dirty_cpu_schedulers_online, DirtyCPUSchedulersOnline)</seealso>,
- <seealso marker="#system_info_dirty_cpu_schedulers_online">erlang:system_info(dirty_cpu_schedulers_online)</seealso>,
- <seealso marker="#system_info_dirty_io_schedulers">erlang:system_info(dirty_io_schedulers)</seealso>,
- <seealso marker="#system_info_schedulers">erlang:system_info(schedulers)</seealso>,
- <seealso marker="#system_info_schedulers_online">erlang:system_info(schedulers_online)</seealso>, and
- <seealso marker="#system_flag_schedulers_online">erlang:system_flag(schedulers_online, SchedulersOnline)</seealso>.</p>
+ <seealso marker="#system_flag_dirty_cpu_schedulers_online">
+ <c>erlang:system_flag(dirty_cpu_schedulers_online,
+ DirtyCPUSchedulersOnline)</c></seealso>,
+ <seealso marker="#system_info_dirty_cpu_schedulers_online">
+ <c>erlang:system_info(dirty_cpu_schedulers_online)</c></seealso>,
+ <seealso marker="#system_info_dirty_io_schedulers">
+ <c>erlang:system_info(dirty_io_schedulers)</c></seealso>,
+ <seealso marker="#system_info_schedulers">
+ <c>erlang:system_info(schedulers)</c></seealso>,
+ <seealso marker="#system_info_schedulers_online">
+ <c>erlang:system_info(schedulers_online)</c></seealso>, and
+ <seealso marker="#system_flag_schedulers_online">
+ <c>erlang:system_flag(schedulers_online,
+ SchedulersOnline)</c></seealso>.</p>
</item>
<tag><c>dirty_cpu_schedulers_online</c></tag>
<item>
- <marker id="system_info_dirty_cpu_schedulers_online"></marker>
+ <marker id="system_info_dirty_cpu_schedulers_online"></marker>
<p>Returns the number of dirty CPU schedulers online.
The return value satisfies
<c><![CDATA[1 <= DirtyCPUSchedulersOnline <= N]]></c>,
@@ -7359,51 +7535,60 @@ ok
<c>erlang:system_info(schedulers_online)</c>.</p>
<p>The number of dirty CPU schedulers online can be set at
startup by passing command-line flag
- <seealso marker="erts:erl#+SDcpu">+SDcpu</seealso> in
+ <seealso marker="erts:erl#+SDcpu"><c>+SDcpu</c></seealso> in
<c>erl(1)</c>.</p>
<p>Notice that the dirty schedulers functionality is
experimental. Enable support for dirty schedulers when
building OTP to try out the functionality.</p>
<p>For more information, see
- <seealso marker="#system_info_dirty_cpu_schedulers">erlang:system_info(dirty_cpu_schedulers)</seealso>,
- <seealso marker="#system_info_dirty_io_schedulers">erlang:system_info(dirty_io_schedulers)</seealso>,
- <seealso marker="#system_info_schedulers_online">erlang:system_info(schedulers_online)</seealso>, and
- <seealso marker="#system_flag_dirty_cpu_schedulers_online">erlang:system_flag(dirty_cpu_schedulers_online, DirtyCPUSchedulersOnline)</seealso>.</p>
+ <seealso marker="#system_info_dirty_cpu_schedulers">
+ <c>erlang:system_info(dirty_cpu_schedulers)</c></seealso>,
+ <seealso marker="#system_info_dirty_io_schedulers">
+ <c>erlang:system_info(dirty_io_schedulers)</c></seealso>,
+ <seealso marker="#system_info_schedulers_online">
+ <c>erlang:system_info(schedulers_online)</c></seealso>, and
+ <seealso marker="#system_flag_dirty_cpu_schedulers_online">
+ <c>erlang:system_flag(dirty_cpu_schedulers_online,
+ DirtyCPUSchedulersOnline)</c></seealso>.</p>
</item>
<tag><c>dirty_io_schedulers</c></tag>
<item>
- <marker id="system_info_dirty_io_schedulers"></marker>
+ <marker id="system_info_dirty_io_schedulers"></marker>
<p>Returns the number of dirty I/O schedulers as an integer.
Dirty I/O schedulers execute I/O-bound native functions,
such as NIFs and linked-in driver code, which cannot be
managed cleanly by the normal emulator schedulers.</p>
<p>This value can be set at startup by passing command-line
- argument <seealso marker="erts:erl#+SDio">+SDio</seealso>
+ argument <seealso marker="erts:erl#+SDio"><c>+SDio</c></seealso>
in <c>erl(1)</c>.</p>
- <p>Notice that the dirty schedulers functionality is
+ <p>Notice that the dirty schedulers functionality is
experimental. Enable support for dirty schedulers when
building OTP to try out the functionality.</p>
<p>For more information, see
- <seealso marker="#system_info_dirty_cpu_schedulers">erlang:system_info(dirty_cpu_schedulers)</seealso>,
- <seealso marker="#system_info_dirty_cpu_schedulers_online">erlang:system_info(dirty_cpu_schedulers_online)</seealso>, and
- <seealso marker="#system_flag_dirty_cpu_schedulers_online">erlang:system_flag(dirty_cpu_schedulers_online, DirtyCPUSchedulersOnline)</seealso>.</p>
+ <seealso marker="#system_info_dirty_cpu_schedulers">
+ <c>erlang:system_info(dirty_cpu_schedulers)</c></seealso>,
+ <seealso marker="#system_info_dirty_cpu_schedulers_online">
+ <c>erlang:system_info(dirty_cpu_schedulers_online)</c></seealso>,
+ and <seealso marker="#system_flag_dirty_cpu_schedulers_online">
+ <c>erlang:system_flag(dirty_cpu_schedulers_online,
+ DirtyCPUSchedulersOnline)</c></seealso>.</p>
</item>
<tag><c>dist</c></tag>
<item>
<p>Returns a binary containing a string of distribution
information formatted as in Erlang crash dumps. For more
- information, see Section
- <seealso marker="erts:crash_dump">"How to interpret the Erlang crash dumps"</seealso>
+ information, see section <seealso marker="erts:crash_dump">
+ How to interpret the Erlang crash dumps</seealso>
in the User's Guide.</p>
</item>
<tag><c>dist_buf_busy_limit</c></tag>
<item>
- <marker id="system_info_dist_buf_busy_limit"></marker>
+ <marker id="system_info_dist_buf_busy_limit"></marker>
<p>Returns the value of the distribution buffer busy limit
- in bytes. This limit can be set at startup by passing
- command-line flag
- <seealso marker="erts:erl#+zdbbl">+zdbbl</seealso>
- to <c>erl</c>.</p>
+ in bytes. This limit can be set at startup by passing
+ command-line flag
+ <seealso marker="erts:erl#+zdbbl"><c>+zdbbl</c></seealso>
+ to <c>erl(1)</c>.</p>
</item>
<tag><c>dist_ctrl</c></tag>
<item>
@@ -7421,61 +7606,63 @@ ok
<item>
<p>Returns a string containing the Erlang driver version
used by the runtime system. It has the form
- <seealso marker="erts:erl_driver#version_management">"&lt;major ver&gt;.&lt;minor ver&gt;"</seealso>.</p>
+ <seealso marker="erts:erl_driver#version_management">
+ "&lt;major ver&gt;.&lt;minor ver&gt;"</seealso>.</p>
</item>
<tag><c>dynamic_trace</c></tag>
<item>
<p>Returns an atom describing the dynamic trace framework
- compiled into the virtual machine. It can be
- <c>dtrace</c>, <c>systemtap</c>, or <c>none</c>. For a
- commercial or standard build, it is always <c>none</c>.
- The other return values indicate a custom configuration
- (for example, <c>./configure --with-dynamic-trace=dtrace</c>).
- For more information about dynamic tracing, see the
- <seealso marker="runtime_tools:dyntrace">dyntrace</seealso>
- manual page and the
- <c>README.dtrace</c>/<c>README.systemtap</c> files in the
- Erlang source code top directory.</p>
+ compiled into the virtual machine. It can be
+ <c>dtrace</c>, <c>systemtap</c>, or <c>none</c>. For a
+ commercial or standard build, it is always <c>none</c>.
+ The other return values indicate a custom configuration
+ (for example, <c>./configure --with-dynamic-trace=dtrace</c>).
+ For more information about dynamic tracing, see
+ <seealso marker="runtime_tools:dyntrace">
+ <c>dyntrace(3)</c></seealso> manual page and the
+ <c>README.dtrace</c>/<c>README.systemtap</c> files in the
+ Erlang source code top directory.</p>
</item>
<tag><c>dynamic_trace_probes</c></tag>
<item>
<p>Returns a <c>boolean()</c> indicating if dynamic trace
- probes (<c>dtrace</c> or <c>systemtap</c>) are built into
- the emulator. This can only be <c>true</c> if the Virtual
- Machine was built for dynamic tracing (that is,
- <c>system_info(dynamic_trace)</c> returns
- <c>dtrace</c> or <c>systemtap</c>).</p>
- </item>
- <tag><marker id="system_info_end_time"/><c>end_time</c></tag>
- <item><p>The last <seealso marker="#monotonic_time/0">Erlang monotonic
- time</seealso> in <c>native</c>
- <seealso marker="#type_time_unit">time unit</seealso> that
- can be represented internally in the current Erlang runtime system
- instance. The time between the
- <seealso marker="#system_info_start_time">start time</seealso> and
- the end time is at least a quarter of a millennium.</p></item>
+ probes (<c>dtrace</c> or <c>systemtap</c>) are built into
+ the emulator. This can only be <c>true</c> if the virtual
+ machine was built for dynamic tracing (that is,
+ <c>system_info(dynamic_trace)</c> returns
+ <c>dtrace</c> or <c>systemtap</c>).</p>
+ </item>
+ <tag><marker id="system_info_end_time"/><c>end_time</c></tag>
+ <item>
+ <p>The last <seealso marker="#monotonic_time/0">Erlang monotonic
+ time</seealso> in <c>native</c>
+ <seealso marker="#type_time_unit">time unit</seealso> that
+ can be represented internally in the current Erlang runtime system
+ instance. The time between the
+ <seealso marker="#system_info_start_time">start time</seealso> and
+ the end time is at least a quarter of a millennium.</p>
+ </item>
<tag><c>elib_malloc</c></tag>
<item>
<p>This option will be removed in a future release.
- The return value will always be <c>false</c>, as the
- <c>elib_malloc</c> allocator has been removed.</p>
+ The return value will always be <c>false</c>, as the
+ <c>elib_malloc</c> allocator has been removed.</p>
</item>
- <tag><marker id="system_info_eager_check_io"/><c>eager_check_io</c></tag>
+ <tag><marker id="system_info_eager_check_io"/>
+ <c>eager_check_io</c></tag>
<item>
- <p>
- Returns the value of the <c>erl</c> command line flag
- <seealso marker="erl#+secio">+secio</seealso>
- which is either <c>true</c> or <c>false</c>. See the
- documentation of the command line flag for information about
- the different values.
- </p>
+ <p>Returns the value of command-line flag
+ <seealso marker="erl#+secio"><c>+secio</c></seealso> in
+ <c>erl(1)</c>, which is either <c>true</c> or <c>false</c>.
+ For information about the different values, see the
+ documentation of the command-line flag.</p>
</item>
<tag><c>ets_limit</c></tag>
<item>
<p>Returns the maximum number of ETS tables allowed. This
limit can be increased at startup by passing
command-line flag
- <seealso marker="erts:erl#+e">+e</seealso> to
+ <seealso marker="erts:erl#+e"><c>+e</c></seealso> to
<c>erl(1)</c> or by setting environment variable
<c>ERL_MAX_ETS_TABLES</c> before starting the Erlang
runtime system.</p>
@@ -7493,10 +7680,10 @@ ok
<taglist>
<tag><c>private</c></tag>
<item>
- <p>Each process has a heap reserved for its use and no
- references between heaps of different processes are
- allowed. Messages passed between processes are copied
- between heaps.</p>
+ Each process has a heap reserved for its use and no
+ references between heaps of different processes are
+ allowed. Messages passed between processes are copied
+ between heaps.
</item>
</taglist>
</item>
@@ -7504,8 +7691,9 @@ ok
<item>
<p>Returns a binary containing a string of miscellaneous
system information formatted as in Erlang crash dumps.
- For more information, see Section
- <seealso marker="erts:crash_dump">"How to interpret the Erlang crash dumps"</seealso>
+ For more information, see section
+ <seealso marker="erts:crash_dump">
+ How to interpret the Erlang crash dumps</seealso>
in the User's Guide.</p>
</item>
<tag><c>kernel_poll</c></tag>
@@ -7517,38 +7705,39 @@ ok
<item>
<p>Returns a binary containing a string of loaded module
information formatted as in Erlang crash dumps. For more
- information, see Section
- <seealso marker="erts:crash_dump">"How to interpret the Erlang crash dumps"</seealso>
- in the User's Guide.</p>
+ information, see section
+ <seealso marker="erts:crash_dump">How to interpret the Erlang
+ crash dumps</seealso> in the User's Guide.</p>
</item>
- <tag><c>logical_processors</c></tag>
+ <tag><c>logical_processors</c></tag>
<item>
- <marker id="logical_processors"></marker>
+ <marker id="logical_processors"></marker>
<p>Returns the detected number of logical processors configured
- in the system. The return value is either an integer, or
- the atom <c>unknown</c> if the emulator cannot
- detect the configured logical processors.</p>
+ in the system. The return value is either an integer, or
+ the atom <c>unknown</c> if the emulator cannot
+ detect the configured logical processors.</p>
</item>
- <tag><c>logical_processors_available</c></tag>
+ <tag><c>logical_processors_available</c></tag>
<item>
- <marker id="logical_processors_available"></marker>
+ <marker id="logical_processors_available"></marker>
<p>Returns the detected number of logical processors available
- to the Erlang runtime system. The return value is either an
- integer, or the atom <c>unknown</c> if the emulator
- cannot detect the available logical processors. The number
- of available logical processors is less than or equal to
- the number of
- <seealso marker="#logical_processors_online">logical processors online</seealso>.</p>
+ to the Erlang runtime system. The return value is either an
+ integer, or the atom <c>unknown</c> if the emulator
+ cannot detect the available logical processors. The number
+ of available logical processors is less than or equal to
+ the number of <seealso marker="#logical_processors_online">
+ logical processors online</seealso>.</p>
</item>
- <tag><c>logical_processors_online</c></tag>
+ <tag><c>logical_processors_online</c></tag>
<item>
- <marker id="logical_processors_online"></marker>
+ <marker id="logical_processors_online"></marker>
<p>Returns the detected number of logical processors online on
- the system. The return value is either an integer,
- or the atom <c>unknown</c> if the emulator cannot
- detect logical processors online. The number of logical
- processors online is less than or equal to the number of
- <seealso marker="#logical_processors">logical processors configured</seealso>.</p>
+ the system. The return value is either an integer,
+ or the atom <c>unknown</c> if the emulator cannot
+ detect logical processors online. The number of logical
+ processors online is less than or equal to the number of
+ <seealso marker="#logical_processors">logical processors
+ configured</seealso>.</p>
</item>
<tag><c>machine</c></tag>
<item>
@@ -7557,17 +7746,16 @@ ok
<tag><c>modified_timing_level</c></tag>
<item>
<p>Returns the modified timing-level (an integer) if
- modified timing is enabled, otherwise, <c>undefined</c>.
+ modified timing is enabled, otherwise <c>undefined</c>.
For more information about modified timing, see
command-line flag
- <seealso marker="erts:erl#+T">+T</seealso>
+ <seealso marker="erts:erl#+T"><c>+T</c></seealso>
in <c>erl(1)</c></p>
</item>
<tag><c>multi_scheduling</c></tag>
<item>
- <marker id="system_info_multi_scheduling"></marker>
- <p>Returns <c>disabled</c>, <c>blocked</c>, <c>blocked_normal</c>,
- or <c>enabled</c>:</p>
+ <marker id="system_info_multi_scheduling"></marker>
+ <p>Returns one of the following:</p>
<taglist>
<tag><c>disabled</c></tag>
<item>
@@ -7586,9 +7774,9 @@ ok
<item>
<p>The emulator has more than one scheduler thread,
but all normal scheduler threads except one are
- blocked. Note that dirty schedulers are not
- blocked, and may schedule Erlang processes and
- execute native code.</p>
+ blocked. Notice that dirty schedulers are not
+ blocked, and can schedule Erlang processes and
+ execute native code.</p>
</item>
<tag><c>enabled</c></tag>
<item>
@@ -7599,189 +7787,204 @@ ok
</item>
</taglist>
<p>See also
- <seealso marker="#system_flag_multi_scheduling">erlang:system_flag(multi_scheduling, BlockState)</seealso>,
- <seealso marker="#system_info_multi_scheduling_blockers">erlang:system_info(multi_scheduling_blockers)</seealso>,
- <seealso marker="#system_info_normal_multi_scheduling_blockers">erlang:system_info(normal_multi_scheduling_blockers)</seealso>,
- and
- <seealso marker="#system_info_schedulers">erlang:system_info(schedulers)</seealso>.</p>
+ <seealso marker="#system_flag_multi_scheduling">
+ <c>erlang:system_flag(multi_scheduling, BlockState)</c></seealso>,
+ <seealso marker="#system_info_multi_scheduling_blockers">
+ <c>erlang:system_info(multi_scheduling_blockers)</c></seealso>,
+ <seealso marker="#system_info_normal_multi_scheduling_blockers">
+ <c>erlang:system_info(normal_multi_scheduling_blockers)</c></seealso>,
+ and <seealso marker="#system_info_schedulers">
+ <c>erlang:system_info(schedulers)</c></seealso>.</p>
</item>
<tag><c>multi_scheduling_blockers</c></tag>
<item>
- <marker id="system_info_multi_scheduling_blockers"></marker>
+ <marker id="system_info_multi_scheduling_blockers"></marker>
<p>Returns a list of <c><anno>Pid</anno></c>s when
multi-scheduling is blocked, otherwise the empty list is
returned. The <c><anno>Pid</anno></c>s in the list
- represent all the processes currently
+ represent all the processes currently
blocking multi-scheduling. A <c><anno>Pid</anno></c> occurs
only once in the list, even if the corresponding
process has blocked multiple times.</p>
<p>See also
- <seealso marker="#system_flag_multi_scheduling">erlang:system_flag(multi_scheduling, BlockState)</seealso>,
- <seealso marker="#system_info_multi_scheduling">erlang:system_info(multi_scheduling)</seealso>,
- <seealso marker="#system_info_normal_multi_scheduling_blockers">erlang:system_info(normal_multi_scheduling_blockers)</seealso>,
-
- and
- <seealso marker="#system_info_schedulers">erlang:system_info(schedulers)</seealso>.</p>
+ <seealso marker="#system_flag_multi_scheduling">
+ <c>erlang:system_flag(multi_scheduling, BlockState)</c></seealso>,
+ <seealso marker="#system_info_multi_scheduling">
+ <c>erlang:system_info(multi_scheduling)</c></seealso>,
+ <seealso marker="#system_info_normal_multi_scheduling_blockers">
+ <c>erlang:system_info(normal_multi_scheduling_blockers)</c></seealso>,
+ and <seealso marker="#system_info_schedulers">
+ <c>erlang:system_info(schedulers)</c></seealso>.</p>
</item>
<tag><c>nif_version</c></tag>
<item>
- <p>Returns a string containing the version of the Erlang NIF interface
- used by the runtime system. It is on the form
- "&lt;major ver&gt;.&lt;minor ver&gt;".</p>
+ <p>Returns a string containing the version of the Erlang NIF
+ interface used by the runtime system. It is on the form
+ "&lt;major ver&gt;.&lt;minor ver&gt;".</p>
</item>
<tag><c>normal_multi_scheduling_blockers</c></tag>
<item>
- <marker id="system_info_normal_multi_scheduling_blockers"></marker>
+ <marker id="system_info_normal_multi_scheduling_blockers"></marker>
<p>Returns a list of <c><anno>Pid</anno></c>s when
- normal multi-scheduling is blocked (i.e. all normal schedulers
- but one is blocked), otherwise the empty list is returned.
- The <c><anno>Pid</anno></c>s in the list represent all the
- processes currently blocking normal multi-scheduling.
- A <c><anno>Pid</anno></c> occurs only once in the list, even if
- the corresponding process has blocked multiple times.</p>
+ normal multi-scheduling is blocked (that is, all normal schedulers
+ but one is blocked), otherwise the empty list is returned.
+ The <c><anno>Pid</anno></c>s in the list represent all the
+ processes currently blocking normal multi-scheduling.
+ A <c><anno>Pid</anno></c> occurs only once in the list, even if
+ the corresponding process has blocked multiple times.</p>
<p>See also
- <seealso marker="#system_flag_multi_scheduling">erlang:system_flag(multi_scheduling, BlockState)</seealso>,
- <seealso marker="#system_info_multi_scheduling">erlang:system_info(multi_scheduling)</seealso>,
- <seealso marker="#system_info_multi_scheduling_blockers">erlang:system_info(multi_scheduling_blockers)</seealso>,
-
- and
- <seealso marker="#system_info_schedulers">erlang:system_info(schedulers)</seealso>.</p>
- </item>
- <tag><marker id="system_info_otp_release"><c>otp_release</c></marker></tag>
- <item>
- <marker id="system_info_otp_release"></marker>
+ <seealso marker="#system_flag_multi_scheduling">
+ <c>erlang:system_flag(multi_scheduling, BlockState)</c></seealso>,
+ <seealso marker="#system_info_multi_scheduling">
+ <c>erlang:system_info(multi_scheduling)</c></seealso>,
+ <seealso marker="#system_info_multi_scheduling_blockers">
+ <c>erlang:system_info(multi_scheduling_blockers)</c></seealso>,
+ and <seealso marker="#system_info_schedulers">
+ <c>erlang:system_info(schedulers)</c></seealso>.</p>
+ </item>
+ <tag><marker id="system_info_otp_release"/>
+ <c>otp_release</c></tag>
+ <item>
+ <marker id="system_info_otp_release"></marker>
<p>Returns a string containing the OTP release number of the
- OTP release that the currently executing <c>ERTS</c> application is
- part of.</p>
- <p>As from OTP 17, the OTP release number corresponds to
- the major OTP version number. No
- <c>erlang:system_info()</c> argument gives the exact OTP
- version. This is because the exact OTP version in the general case
- is difficult to determine. For more information, see the description
- of versions in <seealso marker="doc/system_principles:versions">
- System principles</seealso> in System Documentation.</p>
- </item>
- <tag><marker id="system_info_os_monotonic_time_source"/><c>os_monotonic_time_source</c></tag>
+ OTP release that the currently executing ERTS application
+ is part of.</p>
+ <p>As from Erlang/OTP 17, the OTP release number corresponds to
+ the major OTP version number. No
+ <c>erlang:system_info()</c> argument gives the exact OTP
+ version. This is because the exact OTP version in the general case
+ is difficult to determine. For more information, see the
+ description of versions in
+ <seealso marker="doc/system_principles:versions">
+ System principles</seealso> in System Documentation.</p>
+ </item>
+ <tag><marker id="system_info_os_monotonic_time_source"/>
+ <c>os_monotonic_time_source</c></tag>
<item>
<p>Returns a list containing information about the source of
- <seealso marker="erts:time_correction#OS_Monotonic_Time">OS
- monotonic time</seealso> that is used by the runtime system.</p>
- <p>If <c>[]</c> is returned, no OS monotonic time is
- available. The list contains two-tuples with <c>Key</c>s
- as first element, and <c>Value</c>s as second element. The
- order of these tuples is undefined. The following
- tuples can be part of the list, but more tuples can be
- introduced in the future:</p>
- <taglist>
- <tag><c>{function, Function}</c></tag>
- <item><p><c>Function</c> is the name of the function
- used. This tuple always exist if OS monotonic time is
- available to the runtime system.</p></item>
-
- <tag><c>{clock_id, ClockId}</c></tag>
- <item><p>This tuple only exist if <c>Function</c>
- can be used with different clocks. <c>ClockId</c>
- corresponds to the clock identifier used when calling
- <c>Function</c>.</p></item>
-
- <tag><c>{resolution, OsMonotonicTimeResolution}</c></tag>
- <item><p>Highest possible
- <seealso marker="time_correction#Time_Resolution">resolution</seealso>
- of current OS monotonic time source as parts per
- second. If no resolution information can be retrieved
- from the OS, <c>OsMonotonicTimeResolution</c> is
- set to the resolution of the time unit of
- <c>Function</c>s return value. That is, the actual
- resolution can be lower than
- <c>OsMonotonicTimeResolution</c>. Also note that
- the resolution does not say anything about the
- <seealso marker="time_correction#Time_Accuracy">accuracy</seealso>,
- and whether the
- <seealso marker="time_correction#Time_Precision">precision</seealso>
- do align with the resolution. You do,
- however, know that the precision is not better than
- <c>OsMonotonicTimeResolution</c>.</p></item>
-
- <tag><c>{extended, Extended}</c></tag>
- <item><p><c>Extended</c> equals <c>yes</c> if
- the range of time values has been extended;
- otherwise, <c>Extended</c> equals <c>no</c>. The
- range needs to be extended if <c>Function</c>
- returns values that wrap fast. This typically
- is the case when the return value is a 32-bit
- value.</p></item>
-
- <tag><c>{parallel, Parallel}</c></tag>
- <item><p><c>Parallel</c> equals <c>yes</c> if
- <c>Function</c> is called in parallel from multiple
- threads. If it is not called in parallel, because
- calls needs to be serialized, <c>Parallel</c> equals
- <c>no</c>.</p></item>
-
- <tag><c>{time, OsMonotonicTime}</c></tag>
- <item><p><c>OsMonotonicTime</c> equals current OS
- monotonic time in <c>native</c>
- <seealso marker="#type_time_unit">time unit</seealso>.</p></item>
- </taglist>
- </item>
- <tag><marker id="system_info_os_system_time_source"/><c>os_system_time_source</c></tag>
+ <seealso marker="erts:time_correction#OS_Monotonic_Time">OS
+ monotonic time</seealso> that is used by the runtime system.</p>
+ <p>If <c>[]</c> is returned, no OS monotonic time is
+ available. The list contains two-tuples with <c>Key</c>s
+ as first element, and <c>Value</c>s as second element. The
+ order of these tuples is undefined. The following
+ tuples can be part of the list, but more tuples can be
+ introduced in the future:</p>
+ <taglist>
+ <tag><c>{function, Function}</c></tag>
+ <item><p><c>Function</c> is the name of the function
+ used. This tuple always exists if OS monotonic time is
+ available to the runtime system.</p>
+ </item>
+ <tag><c>{clock_id, ClockId}</c></tag>
+ <item><p>This tuple only exists if <c>Function</c>
+ can be used with different clocks. <c>ClockId</c>
+ corresponds to the clock identifier used when calling
+ <c>Function</c>.</p>
+ </item>
+ <tag><c>{resolution, OsMonotonicTimeResolution}</c></tag>
+ <item><p>Highest possible
+ <seealso marker="time_correction#Time_Resolution">
+ resolution</seealso>
+ of current OS monotonic time source as parts per
+ second. If no resolution information can be retrieved
+ from the OS, <c>OsMonotonicTimeResolution</c> is
+ set to the resolution of the time unit of
+ <c>Function</c>s return value. That is, the actual
+ resolution can be lower than
+ <c>OsMonotonicTimeResolution</c>. Notice that
+ the resolution does not say anything about the
+ <seealso marker="time_correction#Time_Accuracy">
+ accuracy</seealso> or whether the
+ <seealso marker="time_correction#Time_Precision">
+ precision</seealso> aligns with the resolution. You do,
+ however, know that the precision is not better than
+ <c>OsMonotonicTimeResolution</c>.</p>
+ </item>
+ <tag><c>{extended, Extended}</c></tag>
+ <item><p><c>Extended</c> equals <c>yes</c> if
+ the range of time values has been extended;
+ otherwise <c>Extended</c> equals <c>no</c>. The
+ range must be extended if <c>Function</c>
+ returns values that wrap fast. This typically
+ is the case when the return value is a 32-bit value.</p>
+ </item>
+ <tag><c>{parallel, Parallel}</c></tag>
+ <item><p><c>Parallel</c> equals <c>yes</c> if
+ <c>Function</c> is called in parallel from multiple
+ threads. If it is not called in parallel, because
+ calls must be serialized, <c>Parallel</c> equals
+ <c>no</c>.</p>
+ </item>
+ <tag><c>{time, OsMonotonicTime}</c></tag>
+ <item><p><c>OsMonotonicTime</c> equals current OS
+ monotonic time in <c>native</c>
+ <seealso marker="#type_time_unit">time unit</seealso>.</p>
+ </item>
+ </taglist>
+ </item>
+ <tag><marker id="system_info_os_system_time_source"/>
+ <c>os_system_time_source</c></tag>
<item>
<p>Returns a list containing information about the source of
- <seealso marker="erts:time_correction#OS_System_Time">OS
- system time</seealso> that is used by the runtime system.</p>
- <p>The list contains two-tuples with <c>Key</c>s
- as first element, and <c>Value</c>s as second element. The
- order if these tuples is undefined. The following
- tuples can be part of the list, but more tuples can be
- introduced in the future:</p>
- <taglist>
- <tag><c>{function, Function}</c></tag>
- <item><p><c>Function</c> is the name of the funcion
- used.</p></item>
-
- <tag><c>{clock_id, ClockId}</c></tag>
- <item><p>This tuple only exist if <c>Function</c>
- can be used with different clocks. <c>ClockId</c>
- corresponds to the clock identifier used when calling
- <c>Function</c>.</p></item>
-
- <tag><c>{resolution, OsSystemTimeResolution}</c></tag>
- <item><p>Highest possible
- <seealso marker="time_correction#Time_Resolution">resolution</seealso>
- of current OS system time source as parts per
- second. If no resolution information can be retrieved
- from the OS, <c>OsSystemTimeResolution</c> is
- set to the resolution of the time unit of
- <c>Function</c>s return value. That is, the actual
- resolution may be lower than
- <c>OsSystemTimeResolution</c>. Also note that
- the resolution does not say anything about the
- <seealso marker="time_correction#Time_Accuracy">accuracy</seealso>,
- and whether the
- <seealso marker="time_correction#Time_Precision">precision</seealso>
- do align with the resolution. You do,
- however, know that the precision is not better than
- <c>OsSystemTimeResolution</c>.</p></item>
-
- <tag><c>{parallel, Parallel}</c></tag>
- <item><p><c>Parallel</c> equals <c>yes</c> if
- <c>Function</c> is called in parallel from multiple
- threads. If it is not called in parallel, because
- calls needs to be serialized, <c>Parallel</c> equals
- <c>no</c>.</p></item>
-
- <tag><c>{time, OsSystemTime}</c></tag>
- <item><p><c>OsSystemTime</c> equals current OS
- system time in <c>native</c>
- <seealso marker="#type_time_unit">time unit</seealso>.</p></item>
- </taglist>
- </item>
- <tag><c>port_parallelism</c></tag>
- <item>
- <marker id="system_info_port_parallelism"></marker>
- <p>Returns the default port parallelism scheduling hint used.
- For more information, see command-line argument
- <seealso marker="erl#+spp">+spp</seealso> in <c>erl(1)</c>.</p></item>
+ <seealso marker="erts:time_correction#OS_System_Time">OS
+ system time</seealso> that is used by the runtime system.</p>
+ <p>The list contains two-tuples with <c>Key</c>s
+ as first element, and <c>Value</c>s as second element. The
+ order if these tuples is undefined. The following
+ tuples can be part of the list, but more tuples can be
+ introduced in the future:</p>
+ <taglist>
+ <tag><c>{function, Function}</c></tag>
+ <item><p><c>Function</c> is the name of the funcion used.</p>
+ </item>
+ <tag><c>{clock_id, ClockId}</c></tag>
+ <item><p>Exists only if <c>Function</c>
+ can be used with different clocks. <c>ClockId</c>
+ corresponds to the clock identifier used when calling
+ <c>Function</c>.</p>
+ </item>
+ <tag><c>{resolution, OsSystemTimeResolution}</c></tag>
+ <item><p>Highest possible
+ <seealso marker="time_correction#Time_Resolution">
+ resolution</seealso>
+ of current OS system time source as parts per
+ second. If no resolution information can be retrieved
+ from the OS, <c>OsSystemTimeResolution</c> is
+ set to the resolution of the time unit of
+ <c>Function</c>s return value. That is, the actual
+ resolution can be lower than
+ <c>OsSystemTimeResolution</c>. Notice that
+ the resolution does not say anything about the
+ <seealso marker="time_correction#Time_Accuracy">
+ accuracy</seealso> or whether the
+ <seealso marker="time_correction#Time_Precision">
+ precision</seealso> do align with the resolution. You do,
+ however, know that the precision is not better than
+ <c>OsSystemTimeResolution</c>.</p>
+ </item>
+ <tag><c>{parallel, Parallel}</c></tag>
+ <item><p><c>Parallel</c> equals <c>yes</c> if
+ <c>Function</c> is called in parallel from multiple
+ threads. If it is not called in parallel, because
+ calls needs to be serialized, <c>Parallel</c> equals
+ <c>no</c>.</p>
+ </item>
+ <tag><c>{time, OsSystemTime}</c></tag>
+ <item><p><c>OsSystemTime</c> equals current OS
+ system time in <c>native</c>
+ <seealso marker="#type_time_unit">time unit</seealso>.</p>
+ </item>
+ </taglist>
+ </item>
+ <tag><c>port_parallelism</c></tag>
+ <item>
+ <marker id="system_info_port_parallelism"></marker>
+ <p>Returns the default port parallelism scheduling hint used.
+ For more information, see command-line argument
+ <seealso marker="erl#+spp"><c>+spp</c></seealso>
+ in <c>erl(1)</c>.</p>
+ </item>
<tag><marker id="system_info_port_count"/><c>port_count</c></tag>
<item>
<p>Returns the number of ports currently existing at the
@@ -7795,9 +7998,10 @@ ok
<p>Returns the maximum number of simultaneously existing
ports at the local node as an integer. This limit can be
configured at startup by using command-line flag
- <seealso marker="erl#+Q">+Q</seealso> in <c>erl(1)</c>.</p>
+ <seealso marker="erl#+Q"><c>+Q</c></seealso> in <c>erl(1)</c>.</p>
</item>
- <tag><marker id="system_info_process_count"/><c>process_count</c></tag>
+ <tag><marker id="system_info_process_count"/>
+ <c>process_count</c></tag>
<item>
<p>Returns the number of processes currently existing at the
local node. The value is given as an integer. This is
@@ -7806,74 +8010,78 @@ ok
</item>
<tag><c>process_limit</c></tag>
<item>
- <marker id="system_info_process_limit"></marker>
+ <marker id="system_info_process_limit"></marker>
<p>Returns the maximum number of simultaneously existing
processes at the local node. The value is given as an
integer. This limit can be configured at startup by using
- command-line flag <seealso marker="erl#+P">+P</seealso>
- in <c>erl(1)</c>.</p>
+ command-line flag <seealso marker="erl#+P"><c>+P</c></seealso>
+ in <c>erl(1)</c>.</p>
</item>
<tag><c>procs</c></tag>
<item>
<p>Returns a binary containing a string of process and port
information formatted as in Erlang crash dumps. For more
- information, see Section
- <seealso marker="erts:crash_dump">"How to interpret the Erlang crash dumps"</seealso>
+ information, see section <seealso marker="erts:crash_dump">
+ How to interpret the Erlang crash dumps</seealso>
in the User's Guide.</p>
</item>
<tag><c>scheduler_bind_type</c></tag>
<item>
- <marker id="system_info_scheduler_bind_type"></marker>
- <p>Returns information about how the user has requested
- schedulers to be bound or not bound.</p>
- <p>Notice that even though a user has requested
- schedulers to be bound, they can silently have failed
- to bind. To inspect the scheduler bindings, call
- <seealso marker="#system_info_scheduler_bindings">erlang:system_info(scheduler_bindings)</seealso>.</p>
- <p>For more information, see command-line argument
- <seealso marker="erts:erl#+sbt">+sbt</seealso>
- in <c>erl(1)</c> and
- <seealso marker="#system_info_scheduler_bindings">erlang:system_info(scheduler_bindings)</seealso>.</p>
+ <marker id="system_info_scheduler_bind_type"></marker>
+ <p>Returns information about how the user has requested
+ schedulers to be bound or not bound.</p>
+ <p>Notice that although a user has requested
+ schedulers to be bound, they can silently have failed
+ to bind. To inspect the scheduler bindings, call
+ <seealso marker="#system_info_scheduler_bindings">
+ <c>erlang:system_info(scheduler_bindings)</c></seealso>.</p>
+ <p>For more information, see command-line argument
+ <seealso marker="erts:erl#+sbt"><c>+sbt</c></seealso>
+ in <c>erl(1)</c> and
+ <seealso marker="#system_info_scheduler_bindings">
+ <c>erlang:system_info(scheduler_bindings)</c></seealso>.</p>
</item>
<tag><c>scheduler_bindings</c></tag>
<item>
- <marker id="system_info_scheduler_bindings"></marker>
- <p>Returns information about the currently used scheduler
- bindings.</p>
- <p>A tuple of a size equal to
- <seealso marker="#system_info_schedulers">erlang:system_info(schedulers)</seealso>
- is returned. The tuple elements are integers
- or the atom <c>unbound</c>. Logical processor identifiers
- are represented as integers. The <c>N</c>th
- element of the tuple equals the current binding for
- the scheduler with the scheduler identifier equal to
- <c>N</c>. For example, if the schedulers are bound,
- <c>element(erlang:system_info(scheduler_id),
- erlang:system_info(scheduler_bindings))</c> returns
- the identifier of the logical processor that the calling
- process is executing on.</p>
- <p>Notice that only schedulers online can be bound to logical
- processors.</p>
- <p>For more information, see command-line argument
- <seealso marker="erts:erl#+sbt">+sbt</seealso>
- in <c>erl(1)</c> and
- <seealso marker="#system_info_schedulers_online">erlang:system_info(schedulers_online)</seealso>.
- </p>
+ <marker id="system_info_scheduler_bindings"></marker>
+ <p>Returns information about the currently used scheduler
+ bindings.</p>
+ <p>A tuple of a size equal to
+ <seealso marker="#system_info_schedulers">
+ <c>erlang:system_info(schedulers)</c></seealso>
+ is returned. The tuple elements are integers
+ or the atom <c>unbound</c>. Logical processor identifiers
+ are represented as integers. The <c>N</c>th
+ element of the tuple equals the current binding for
+ the scheduler with the scheduler identifier equal to
+ <c>N</c>. For example, if the schedulers are bound,
+ <c>element(erlang:system_info(scheduler_id),
+ erlang:system_info(scheduler_bindings))</c> returns
+ the identifier of the logical processor that the calling
+ process is executing on.</p>
+ <p>Notice that only schedulers online can be bound to logical
+ processors.</p>
+ <p>For more information, see command-line argument
+ <seealso marker="erts:erl#+sbt"><c>+sbt</c></seealso>
+ in <c>erl(1)</c> and
+ <seealso marker="#system_info_schedulers_online">
+ <c>erlang:system_info(schedulers_online)</c></seealso>.</p>
</item>
<tag><c>scheduler_id</c></tag>
<item>
- <marker id="system_info_scheduler_id"></marker>
+ <marker id="system_info_scheduler_id"></marker>
<p>Returns the scheduler ID (<c>SchedulerId</c>) of the
scheduler thread that the calling process is executing
on. <c><anno>SchedulerId</anno></c> is a positive integer,
- where
- <c><![CDATA[1 <= SchedulerId <= erlang:system_info(schedulers)]]></c>.
- See also
- <seealso marker="#system_info_schedulers">erlang:system_info(schedulers)</seealso>.</p>
+ where <c><![CDATA[1 <= SchedulerId <=
+ erlang:system_info(schedulers)]]></c>.</p>
+ <p>See also
+ <seealso marker="#system_info_schedulers">
+ <c>erlang:system_info(schedulers)</c></seealso>.</p>
</item>
<tag><c>schedulers</c></tag>
<item>
- <marker id="system_info_schedulers"></marker>
+ <marker id="system_info_schedulers"></marker>
<p>Returns the number of scheduler threads used by
the emulator. Scheduler threads online schedules Erlang
processes and Erlang ports, and execute Erlang code
@@ -7881,44 +8089,57 @@ ok
<p>The number of scheduler threads is determined at
emulator boot time and cannot be changed later.
However, the number of schedulers online can
- be changed at any time.</p>
+ be changed at any time.</p>
<p>See also
- <seealso marker="#system_flag_schedulers_online">erlang:system_flag(schedulers_online, SchedulersOnline)</seealso>,
- <seealso marker="#system_info_schedulers_online">erlang:system_info(schedulers_online)</seealso>,
- <seealso marker="#system_info_scheduler_id">erlang:system_info(scheduler_id)</seealso>,
- <seealso marker="#system_flag_multi_scheduling">erlang:system_flag(multi_scheduling, BlockState)</seealso>,
- <seealso marker="#system_info_multi_scheduling">erlang:system_info(multi_scheduling)</seealso>,
- <seealso marker="#system_info_normal_multi_scheduling_blockers">erlang:system_info(normal_multi_scheduling_blockers)</seealso>
- and
- <seealso marker="#system_info_multi_scheduling_blockers">erlang:system_info(multi_scheduling_blockers)</seealso>.</p>
+ <seealso marker="#system_flag_schedulers_online">
+ <c>erlang:system_flag(schedulers_online,
+ SchedulersOnline)</c></seealso>,
+ <seealso marker="#system_info_schedulers_online">
+ <c>erlang:system_info(schedulers_online)</c></seealso>,
+ <seealso marker="#system_info_scheduler_id">
+ <c>erlang:system_info(scheduler_id)</c></seealso>,
+ <seealso marker="#system_flag_multi_scheduling">
+ <c>erlang:system_flag(multi_scheduling, BlockState)</c></seealso>,
+ <seealso marker="#system_info_multi_scheduling">
+ <c>erlang:system_info(multi_scheduling)</c></seealso>,
+ <seealso marker="#system_info_normal_multi_scheduling_blockers">
+ <c>erlang:system_info(normal_multi_scheduling_blockers)</c></seealso>
+ and <seealso marker="#system_info_multi_scheduling_blockers">
+ <c>erlang:system_info(multi_scheduling_blockers)</c></seealso>.
+ </p>
</item>
<tag><c>schedulers_online</c></tag>
<item>
- <marker id="system_info_schedulers_online"></marker>
+ <marker id="system_info_schedulers_online"></marker>
<p>Returns the number of schedulers online. The scheduler
- identifiers of schedulers online satisfy the relationship
- <c><![CDATA[1 <= SchedulerId <= erlang:system_info(schedulers_online)]]></c>.</p>
- <p>For more information, see
- <seealso marker="#system_info_schedulers">erlang:system_info(schedulers)</seealso>
- and
- <seealso marker="#system_flag_schedulers_online">erlang:system_flag(schedulers_online, SchedulersOnline)</seealso>.</p>
+ identifiers of schedulers online satisfy the relationship
+ <c><![CDATA[1 <= SchedulerId <=
+ erlang:system_info(schedulers_online)]]></c>.</p>
+ <p>For more information, see
+ <seealso marker="#system_info_schedulers">
+ <c>erlang:system_info(schedulers)</c></seealso> and
+ <seealso marker="#system_flag_schedulers_online">
+ <c>erlang:system_flag(schedulers_online,
+ SchedulersOnline)</c></seealso>.</p>
</item>
<tag><c>smp_support</c></tag>
<item>
<p>Returns <c>true</c> if the emulator has been compiled
with SMP support, otherwise <c>false</c> is returned.</p>
</item>
- <tag><marker id="system_info_start_time"/><c>start_time</c></tag>
- <item><p>The <seealso marker="#monotonic_time/0">Erlang monotonic
- time</seealso> in <c>native</c>
- <seealso marker="#type_time_unit">time unit</seealso> at the
- time when current Erlang runtime system instance started. See also
- <seealso marker="#system_info_end_time"><c>erlang:system_info(end_time)</c></seealso>.
- </p></item>
+ <tag><marker id="system_info_start_time"/><c>start_time</c></tag>
+ <item>
+ <p>The <seealso marker="#monotonic_time/0">Erlang monotonic
+ time</seealso> in <c>native</c>
+ <seealso marker="#type_time_unit">time unit</seealso> at the
+ time when current Erlang runtime system instance started.</p>
+ <p>See also <seealso marker="#system_info_end_time">
+ <c>erlang:system_info(end_time)</c></seealso>.</p>
+ </item>
<tag><c>system_version</c></tag>
<item>
<p>Returns a string containing version number and
- some important properties, such as the number of schedulers.</p>
+ some important properties, such as the number of schedulers.</p>
</item>
<tag><c>system_architecture</c></tag>
<item>
@@ -7932,105 +8153,114 @@ ok
</item>
<tag><c>thread_pool_size</c></tag>
<item>
- <marker id="system_info_thread_pool_size"></marker>
+ <marker id="system_info_thread_pool_size"></marker>
<p>Returns the number of async threads in the async thread
pool used for asynchronous driver calls
- (<seealso marker="erts:erl_driver#driver_async">driver_async()</seealso>).
+ (<seealso marker="erts:erl_driver#driver_async">
+ <c>erl_driver:driver_async()</c></seealso>).
The value is given as an integer.</p>
</item>
-
- <tag><c>time_correction</c></tag>
- <item>
- <marker id="system_info_time_correction"></marker>
- <p>Returns a boolean value indicating whether
- <seealso marker="time_correction#Time_Correction">time correction</seealso>
- is enabled or not.
- </p></item>
- <tag><c>time_offset</c></tag>
- <item>
- <marker id="system_info_time_offset"></marker>
- <p>Returns the state of the time offset:</p>
- <taglist>
- <tag><c>preliminary</c></tag>
- <item><p>The time offset is preliminary, and will be changed
- at a later time when being finalized. The preliminary time offset
- is used during the preliminary phase of the
- <seealso marker="time_correction#Single_Time_Warp_Mode">single
- time warp mode</seealso>.</p></item>
-
- <tag><c>final</c></tag>
- <item><p>The time offset is final. This either because
- <seealso marker="time_correction#No_Time_Warp_Mode">no
- time warp mode</seealso> is used, or because the time
- offset have been finalized when
- <seealso marker="time_correction#Single_Time_Warp_Mode">single
- time warp mode</seealso> is used.</p></item>
-
- <tag><c>volatile</c></tag>
- <item><p>The time offset is volatile. That is, it can
- change at any time. This is because
- <seealso marker="time_correction#Multi_Time_Warp_Mode">multi
- time warp mode</seealso> is used.</p></item>
- </taglist>
- </item>
- <tag><marker id="system_info_time_warp_mode"/><c>time_warp_mode</c></tag>
- <item><p>Returns a value identifying the
- <seealso marker="time_correction#Time_Warp_Modes">time warp
- mode</seealso> being used:</p>
- <taglist>
- <tag><c>no_time_warp</c></tag>
- <item><p>The <seealso marker="time_correction#No_Time_Warp_Mode">no
- time warp mode</seealso> is used.</p></item>
-
- <tag><c>single_time_warp</c></tag>
- <item><p>The <seealso marker="time_correction#Single_Time_Warp_Mode">single
- time warp mode</seealso> is used.</p></item>
-
- <tag><c>multi_time_warp</c></tag>
- <item><p>The <seealso marker="time_correction#Multi_Time_Warp_Mode">multi
- time warp mode</seealso> is used.</p></item>
- </taglist>
- </item>
+ <tag><c>time_correction</c></tag>
+ <item>
+ <marker id="system_info_time_correction"></marker>
+ <p>Returns a boolean value indicating whether
+ <seealso marker="time_correction#Time_Correction">
+ time correction</seealso> is enabled or not.</p>
+ </item>
+ <tag><c>time_offset</c></tag>
+ <item>
+ <marker id="system_info_time_offset"></marker>
+ <p>Returns the state of the time offset:</p>
+ <taglist>
+ <tag><c>preliminary</c></tag>
+ <item>
+ <p>The time offset is preliminary, and will be changed
+ and finalized later. The preliminary time offset
+ is used during the preliminary phase of the
+ <seealso marker="time_correction#Single_Time_Warp_Mode">
+ single time warp mode</seealso>.</p>
+ </item>
+ <tag><c>final</c></tag>
+ <item>
+ <p>The time offset is final. This either because
+ <seealso marker="time_correction#No_Time_Warp_Mode">
+ no time warp mode</seealso> is used, or because the time
+ offset have been finalized when
+ <seealso marker="time_correction#Single_Time_Warp_Mode">
+ single time warp mode</seealso> is used.</p>
+ </item>
+ <tag><c>volatile</c></tag>
+ <item>
+ <p>The time offset is volatile. That is, it can
+ change at any time. This is because
+ <seealso marker="time_correction#Multi_Time_Warp_Mode">
+ multi-time warp mode</seealso> is used.</p>
+ </item>
+ </taglist>
+ </item>
+ <tag><marker id="system_info_time_warp_mode"/>
+ <c>time_warp_mode</c></tag>
+ <item>
+ <p>Returns a value identifying the
+ <seealso marker="time_correction#Time_Warp_Modes">
+ time warp mode</seealso> that is used:</p>
+ <taglist>
+ <tag><c>no_time_warp</c></tag>
+ <item>The <seealso marker="time_correction#No_Time_Warp_Mode">
+ no time warp mode</seealso> is used.
+ </item>
+ <tag><c>single_time_warp</c></tag>
+ <item>The <seealso marker="time_correction#Single_Time_Warp_Mode">
+ single time warp mode</seealso> is used.
+ </item>
+ <tag><c>multi_time_warp</c></tag>
+ <item>The <seealso marker="time_correction#Multi_Time_Warp_Mode">
+ multi-time warp mode</seealso> is used.
+ </item>
+ </taglist>
+ </item>
<tag><c>tolerant_timeofday</c></tag>
<item>
- <marker id="system_info_tolerant_timeofday"></marker>
- <p>Returns whether a pre erts-7.0 backwards compatible compensation
- for sudden changes of system time is <c>enabled</c> or <c>disabled</c>.
- Such compensation is <c>enabled</c> when the
- <seealso marker="#system_info_time_offset">time offset</seealso> is
- <c>final</c>, and
- <seealso marker="#system_info_time_correction">time correction</seealso>
- is enabled.</p>
+ <marker id="system_info_tolerant_timeofday"></marker>
+ <p>Returns whether a pre ERTS 7.0 backwards compatible
+ compensation for sudden changes of system time is <c>enabled</c>
+ or <c>disabled</c>. Such compensation is <c>enabled</c> when the
+ <seealso marker="#system_info_time_offset">time offset</seealso>
+ is <c>final</c>, and
+ <seealso marker="#system_info_time_correction">
+ time correction</seealso> is enabled.</p>
</item>
<tag><c>trace_control_word</c></tag>
<item>
<p>Returns the value of the node trace control word. For
- more information, see function <c>get_tcw</c> in Section
- <seealso marker="erts:match_spec#get_tcw">Match Specifications in Erlang</seealso> in the User's Guide.</p>
+ more information, see function <c>get_tcw</c> in section
+ <seealso marker="erts:match_spec#get_tcw">
+ Match Specifications in Erlang</seealso> in the User's Guide.</p>
</item>
<tag><c>update_cpu_info</c></tag>
<item>
- <marker id="update_cpu_info"></marker>
+ <marker id="update_cpu_info"></marker>
<p>The runtime system rereads the CPU information available
- and updates its internally stored information about the
- <seealso marker="#system_info_cpu_topology_detected">detected
- CPU topology</seealso> and the number of logical processors
- <seealso marker="#logical_processors">configured</seealso>,
- <seealso marker="#logical_processors_online">online</seealso>, and
- <seealso marker="#logical_processors_available">available</seealso>.</p>
- <p>If the CPU information has changed since the last time
- it was read, the atom <c>changed</c> is returned, otherwise
- the atom <c>unchanged</c>. If the CPU information has changed,
- you probably want to
- <seealso marker="#system_flag_schedulers_online">adjust the
- number of schedulers online</seealso>. You typically want
- to have as many schedulers online as
- <seealso marker="#logical_processors_available">logical
- processors available</seealso>.</p>
+ and updates its internally stored information about the
+ <seealso marker="#system_info_cpu_topology_detected">detected
+ CPU topology</seealso> and the number of logical processors
+ <seealso marker="#logical_processors">configured</seealso>,
+ <seealso marker="#logical_processors_online">online</seealso>,
+ and <seealso marker="#logical_processors_available">
+ available</seealso>.</p>
+ <p>If the CPU information has changed since the last time
+ it was read, the atom <c>changed</c> is returned, otherwise
+ the atom <c>unchanged</c>. If the CPU information has changed,
+ you probably want to
+ <seealso marker="#system_flag_schedulers_online">adjust the
+ number of schedulers online</seealso>. You typically want
+ to have as many schedulers online as
+ <seealso marker="#logical_processors_available">logical
+ processors available</seealso>.</p>
</item>
<tag><c>version</c></tag>
<item>
- <marker id="system_info_version"></marker>
+ <marker id="system_info_version"></marker>
<p>Returns a string containing the version number of the
emulator.</p>
</item>
@@ -8049,19 +8279,19 @@ ok
</item>
<tag><c>{wordsize, external}</c></tag>
<item>
- <p>Returns the true word size of the emulator, that is,
- the size of a pointer. The value is given in bytes
- as an integer. On a pure 32-bit architecture, 4 is
- returned. On both a half word and on a pure
- 64-bit architecture, 8 is returned.</p>
+ <p>Returns the true word size of the emulator, that is,
+ the size of a pointer. The value is given in bytes
+ as an integer. On a pure 32-bit architecture, 4 is
+ returned. On both a half word and on a pure
+ 64-bit architecture, 8 is returned.</p>
</item>
</taglist>
<note>
<p>Argument <c>scheduler</c> has changed name to
<c>scheduler_id</c> to avoid mix up with argument
<c>schedulers</c>. Argument <c>scheduler</c> was
- introduced in <c>ERTS</c> 5.5 and renamed in
- <c>ERTS</c> 5.5.1.</p>
+ introduced in ERTS 5.5 and renamed in
+ ERTS 5.5.1.</p>
</note>
</desc>
</func>
@@ -8072,32 +8302,35 @@ ok
<type name="system_monitor_option"/>
<desc>
<p>Returns the current system monitoring settings set by
- <seealso marker="#system_monitor/2">erlang:system_monitor/2</seealso>
+ <seealso marker="#system_monitor/2">
+ <c>erlang:system_monitor/2</c></seealso>
as <c>{<anno>MonitorPid</anno>, <anno>Options</anno>}</c>,
- or <c>undefined</c> if there
- are no settings. The order of the options can be different
- from the one that was set.</p>
+ or <c>undefined</c> if no settings exist. The order of the
+ options can be different from the one that was set.</p>
</desc>
</func>
<func>
<name name="system_monitor" arity="1"/>
- <fsummary>Sets or clears system performance monitoring options.</fsummary>
+ <fsummary>Set or clear system performance monitoring options.</fsummary>
<type name="system_monitor_option"/>
<desc>
<p>When called with argument <c>undefined</c>, all
system performance monitoring settings are cleared.</p>
<p>Calling the function with <c>{<anno>MonitorPid</anno>,
<anno>Options</anno>}</c> as argument is the same as calling
- <seealso marker="#system_monitor/2"><c>erlang:system_monitor(<anno>MonitorPid</anno>, <anno>Options</anno>)</c></seealso>.</p>
+ <seealso marker="#system_monitor/2">
+ <c>erlang:system_monitor(<anno>MonitorPid</anno>,
+ <anno>Options</anno>)</c></seealso>.</p>
<p>Returns the previous system monitor settings just like
- <seealso marker="#system_monitor/0">erlang:system_monitor/0</seealso>.</p>
+ <seealso marker="#system_monitor/0">
+ <c>erlang:system_monitor/0</c></seealso>.</p>
</desc>
</func>
<func>
<name name="system_monitor" arity="2"/>
- <fsummary>Sets system performance monitoring options.</fsummary>
+ <fsummary>Set system performance monitoring options.</fsummary>
<type name="system_monitor_option"/>
<desc>
<p>Sets the system performance monitoring options.
@@ -8116,12 +8349,12 @@ ok
<p>One of the tuples is <c>{timeout, GcTime}</c>, where
<c>GcTime</c> is the time for the garbage
collection in milliseconds. The other tuples are
- tagged with <c>heap_size</c>, <c>heap_block_size</c>
+ tagged with <c>heap_size</c>, <c>heap_block_size</c>,
<c>stack_size</c>, <c>mbuf_size</c>, <c>old_heap_size</c>,
and <c>old_heap_block_size</c>. These tuples are
explained in the description of trace message
- <seealso marker="#gc_minor_start">gc_minor_start</seealso> (see
- <seealso marker="#trace/3">erlang:trace/3</seealso>).
+ <seealso marker="#gc_minor_start"><c>gc_minor_start</c></seealso>
+ (see <seealso marker="#trace/3"><c>erlang:trace/3</c></seealso>).
New tuples can be added, and the order of the tuples in
the <c>Info</c> list can be changed at any time without
prior notice.</p>
@@ -8152,7 +8385,7 @@ ok
<c>timeout</c>, <c>ready_input</c>, <c>ready_output</c>,
<c>event</c>, and <c>outputv</c> (when the port
is used by distribution). Value <c>Millis</c> in
- the <c>timeout</c> tuple informs about the
+ tuple <c>timeout</c> informs about the
uninterrupted execution time of the process or port, which
always is equal to or higher than the <c>Time</c> value
supplied when starting the trace. New tuples can be
@@ -8163,7 +8396,7 @@ ok
drivers that take too long to execute. 1 ms is
considered a good maximum time for a driver callback
or a NIF. However, a time-sharing system is usually to
- consider everything below 100 ms as "possible" and
+ consider everything &lt; 100 ms as "possible" and
fairly "normal". However, longer schedule times can
indicate swapping or a misbehaving NIF/driver.
Misbehaving NIFs and drivers can cause bad resource
@@ -8181,10 +8414,11 @@ ok
<p>The monitor message is sent if the sum of the sizes of
all memory blocks allocated for all heap generations after
a garbage collection is equal to or higher than <c>Size</c>.</p>
- <p>When a process is killed by <seealso marker="#process_flag_max_heap_size">
+ <p>When a process is killed by
+ <seealso marker="#process_flag_max_heap_size">
<c>max_heap_size</c></seealso>, it is killed before the
garbage collection is complete and thus no large heap message
- will be sent.</p>
+ is sent.</p>
</item>
<tag><c>busy_port</c></tag>
<item>
@@ -8206,7 +8440,8 @@ ok
</item>
</taglist>
<p>Returns the previous system monitor settings just like
- <seealso marker="#system_monitor/0">erlang:system_monitor/0</seealso>.</p>
+ <seealso marker="#system_monitor/0">
+ <c>erlang:system_monitor/0</c></seealso>.</p>
<note>
<p>If a monitoring process gets so large that it itself
starts to cause system monitor messages when garbage
@@ -8231,7 +8466,8 @@ ok
<type name="system_profile_option"/>
<desc>
<p>Returns the current system profiling settings set by
- <seealso marker="#system_profile/2">erlang:system_profile/2</seealso>
+ <seealso marker="#system_profile/2">
+ <c>erlang:system_profile/2</c></seealso>
as <c>{<anno>ProfilerPid</anno>, <anno>Options</anno>}</c>,
or <c>undefined</c> if there
are no settings. The order of the options can be different
@@ -8251,106 +8487,116 @@ ok
<taglist>
<tag><c>exclusive</c></tag>
<item>
- <p>If a synchronous call to a port from a process is done, the
- calling process is considered not runnable during the call
- runtime to the port. The calling process is notified as
- <c>inactive</c>, and later <c>active</c> when the port
- callback returns.</p>
+ <p>If a synchronous call to a port from a process is done, the
+ calling process is considered not runnable during the call
+ runtime to the port. The calling process is notified as
+ <c>inactive</c>, and later <c>active</c> when the port
+ callback returns.</p>
</item>
<tag><c>monotonic_timestamp</c></tag>
<item>
- <p>Timestamps in profile messages will use
- <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
- monotonic time</seealso>. The time-stamp (Ts) has the same
- format and value as produced by
- <c>erlang:monotonic_time(nano_seconds)</c>.</p>
+ <p>Time stamps in profile messages use
+ <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
+ monotonic time</seealso>. The time stamp (Ts) has the same
+ format and value as produced by
+ <c>erlang:monotonic_time(nanosecond)</c>.</p>
</item>
<tag><c>runnable_procs</c></tag>
<item>
- <p>If a process is put into or removed from the run queue, a
- message, <c>{profile, Pid, State, Mfa, Ts}</c>, is sent to
- <c><anno>ProfilerPid</anno></c>. Running processes that
- are reinserted into the run queue after having been
- preempted do not trigger this message.</p>
+ <p>If a process is put into or removed from the run queue, a
+ message, <c>{profile, Pid, State, Mfa, Ts}</c>, is sent to
+ <c><anno>ProfilerPid</anno></c>. Running processes that
+ are reinserted into the run queue after having been
+ pre-empted do not trigger this message.</p>
</item>
<tag><c>runnable_ports</c></tag>
<item>
- <p>If a port is put into or removed from the run queue, a
- message, <c>{profile, Port, State, 0, Ts}</c>, is sent to
- <c><anno>ProfilerPid</anno></c>.</p>
+ <p>If a port is put into or removed from the run queue, a
+ message, <c>{profile, Port, State, 0, Ts}</c>, is sent to
+ <c><anno>ProfilerPid</anno></c>.</p>
</item>
<tag><c>scheduler</c></tag>
<item>
- <p>If a scheduler is put to sleep or awoken, a message,
- <c>{profile, scheduler, Id, State, NoScheds, Ts}</c>, is
- sent to <c><anno>ProfilerPid</anno></c>.</p>
+ <p>If a scheduler is put to sleep or awoken, a message,
+ <c>{profile, scheduler, Id, State, NoScheds, Ts}</c>, is
+ sent to <c><anno>ProfilerPid</anno></c>.</p>
</item>
<tag><c>strict_monotonic_timestamp</c></tag>
<item>
- <p>Timestamps in profile messages will consisting of
- <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
- monotonic time</seealso> and a monotonically increasing
- integer. The time-stamp (Ts) has the same format and value
- as produced by <c>{erlang:monotonic_time(nano_seconds),
- erlang:unique_integer([monotonic])}</c>.</p>
+ <p>Time stamps in profile messages consist of
+ <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
+ monotonic time</seealso> and a monotonically increasing
+ integer. The time stamp (Ts) has the same format and value
+ as produced by <c>{erlang:monotonic_time(nanosecond),
+ erlang:unique_integer([monotonic])}</c>.</p>
</item>
<tag><c>timestamp</c></tag>
<item>
- <p>Timestamps in profile messages will include a
- time-stamp (Ts) that has the same form as returned by
- <c>erlang:now()</c>. This is also the default if no
- timestamp flag is given. If <c>cpu_timestamp</c> has
- been enabled via <c>erlang:trace/3</c>, this will also
- effect the timestamp produced in profiling messages
- when <c>timestamp</c> flag is enabled.</p>
+ <p>Time stamps in profile messages include a
+ time stamp (Ts) that has the same form as returned by
+ <c>erlang:now()</c>. This is also the default if no
+ time stamp flag is specified. If <c>cpu_timestamp</c> has
+ been enabled through
+ <seealso marker="erlang:trace/3"><c>erlang:trace/3</c></seealso>,
+ this also effects the time stamp produced in profiling messages
+ when flag <c>timestamp</c> is enabled.</p>
</item>
</taglist>
- <note><p><c>erlang:system_profile</c> is considered experimental
- and its behavior can change in a future release.</p>
+ <note>
+ <p><c>erlang:system_profile</c> behavior can change
+ in a future release.</p>
</note>
</desc>
</func>
+
<func>
<name name="system_time" arity="0"/>
- <fsummary>Current Erlang system time</fsummary>
- <desc>
- <p>Returns current
- <seealso marker="time_correction#Erlang_System_Time">Erlang system time</seealso>
- in <c>native</c>
- <seealso marker="#type_time_unit">time unit</seealso>.</p>
-
- <p>Calling <c>erlang:system_time()</c> is equivalent to:
- <seealso marker="#monotonic_time/0"><c>erlang:monotonic_time()</c></seealso><c>
- +
- </c><seealso marker="#time_offset/0"><c>erlang:time_offset()</c></seealso>.</p>
-
- <note><p>This time is <em>not</em> a monotonically increasing time
- in the general case. For more information, see the documentation of
- <seealso marker="time_correction#Time_Warp_Modes">time warp modes</seealso> in the
- ERTS User's Guide.</p></note>
+ <fsummary>Current Erlang system time.</fsummary>
+ <desc>
+ <p>Returns current
+ <seealso marker="time_correction#Erlang_System_Time">
+ Erlang system time</seealso> in <c>native</c>
+ <seealso marker="#type_time_unit">time unit</seealso>.</p>
+ <p>Calling <c>erlang:system_time()</c> is equivalent to
+ <seealso marker="#monotonic_time/0">
+ <c>erlang:monotonic_time()</c></seealso><c> +
+ </c><seealso marker="#time_offset/0">
+ <c>erlang:time_offset()</c></seealso>.</p>
+ <note>
+ <p>This time is <em>not</em> a monotonically increasing time
+ in the general case. For more information, see the documentation of
+ <seealso marker="time_correction#Time_Warp_Modes">
+ time warp modes</seealso> in the User's Guide.</p>
+ </note>
</desc>
</func>
+
<func>
<name name="system_time" arity="1"/>
- <fsummary>Current Erlang system time</fsummary>
- <desc>
- <p>Returns current
- <seealso marker="time_correction#Erlang_System_Time">Erlang system time</seealso>
- converted into the <c><anno>Unit</anno></c> passed as argument.</p>
-
- <p>Calling <c>erlang:system_time(<anno>Unit</anno>)</c> is equivalent to:
- <seealso marker="#convert_time_unit/3"><c>erlang:convert_time_unit</c></seealso><c>(</c><seealso marker="#system_time/0"><c>erlang:system_time()</c></seealso><c>,
- native, <anno>Unit</anno>)</c>.</p>
-
- <note><p>This time is <em>not</em> a monotonically increasing time
- in the general case. For more information, see the documentation of
- <seealso marker="time_correction#Time_Warp_Modes">time warp modes</seealso> in the
- ERTS User's Guide.</p></note>
+ <fsummary>Current Erlang system time.</fsummary>
+ <desc>
+ <p>Returns current
+ <seealso marker="time_correction#Erlang_System_Time">
+ Erlang system time</seealso>
+ converted into the <c><anno>Unit</anno></c> passed as argument.</p>
+ <p>Calling <c>erlang:system_time(<anno>Unit</anno>)</c> is equivalent
+ to <seealso marker="#convert_time_unit/3">
+ <c>erlang:convert_time_unit</c></seealso><c>(</c><seealso
+ marker="#system_time/0"><c>erlang:system_time()</c></seealso><c>,
+ native, <anno>Unit</anno>)</c>.</p>
+ <note>
+ <p>This time is <em>not</em> a monotonically increasing time
+ in the general case. For more information, see the documentation of
+ <seealso marker="time_correction#Time_Warp_Modes">
+ time warp modes</seealso> in the User's Guide.</p>
+ </note>
</desc>
</func>
+
<func>
<name name="term_to_binary" arity="1"/>
- <fsummary>Encodes a term to an Erlang external term format binary.</fsummary>
+ <fsummary>Encode a term to an Erlang external term format binary.
+ </fsummary>
<desc>
<p>Returns a binary data object that is the result of encoding
<c><anno>Term</anno></c> according to the Erlang external
@@ -8359,64 +8605,65 @@ ok
writing a term to a file in an efficient way, or sending an
Erlang term to some type of communications channel not
supported by distributed Erlang.</p>
- <p>See also
- <seealso marker="#binary_to_term/1">binary_to_term/1</seealso>.</p>
+ <p>See also <seealso marker="#binary_to_term/1">
+ <c>binary_to_term/1</c></seealso>.</p>
</desc>
</func>
<func>
<name name="term_to_binary" arity="2"/>
- <fsummary>Encodes a term to en Erlang external term format binary.</fsummary>
+ <fsummary>Encode a term to en Erlang external term format binary.
+ </fsummary>
<desc>
<p>Returns a binary data object that is the result of encoding
<c><anno>Term</anno></c> according to the Erlang external
term format.</p>
<p>If option <c>compressed</c> is provided, the external term
format is compressed. The compressed format is automatically
- recognized by <c>binary_to_term/1</c> as from Erlang R7B.</p>
+ recognized by <c>binary_to_term/1</c> as from Erlang/OTP R7B.</p>
<p>A compression level can be specified by giving option
<c>{compressed, <anno>Level</anno>}</c>.
<c><anno>Level</anno></c> is an integer
with range 0..9, where:</p>
<list type="bulleted">
- <item><c>0</c> - No compression is done (it is the same as
- giving no <c>compressed</c> option).</item>
- <item><c>1</c> - Takes least time but may not compress
- as well as the higher levels.</item>
- <item><c>6</c> - Default level when option <c>compressed</c>
- is provided.</item>
- <item><c>9</c> - Takes most time and tries to produce a smaller
+ <item><p><c>0</c> - No compression is done (it is the same as
+ giving no <c>compressed</c> option).</p></item>
+ <item><p><c>1</c> - Takes least time but may not compress
+ as well as the higher levels.</p></item>
+ <item><p><c>6</c> - Default level when option <c>compressed</c>
+ is provided.</p></item>
+ <item><p><c>9</c> - Takes most time and tries to produce a smaller
result. Notice "tries" in the preceding sentence; depending
on the input term, level 9 compression either does or does
- not produce a smaller result than level 1 compression.</item>
+ not produce a smaller result than level 1 compression.</p></item>
</list>
<p>Option <c>{minor_version, <anno>Version</anno>}</c>
- can be used to control
- some encoding details. This option was introduced in OTP R11B-4.
+ can be used to control some
+ encoding details. This option was introduced in Erlang/OTP R11B-4.
The valid values for <c><anno>Version</anno></c> are
<c>0</c> and <c>1</c>.</p>
- <p>As from OTP 17.0, <c>{minor_version, 1}</c> is the default. It
+ <p>As from Erlang/OTP 17.0, <c>{minor_version, 1}</c> is the default. It
forces any floats in the term to be encoded in a more
space-efficient and exact way (namely in the 64-bit IEEE format,
rather than converted to a textual representation).</p>
- <p>As from OTP R11B-4, <c>binary_to_term/1</c> can decode this
+ <p>As from Erlang/OTP R11B-4, <c>binary_to_term/1</c> can decode this
representation.</p>
<p><c>{minor_version, 0}</c> means that floats are encoded
using a textual representation. This option is useful to
- ensure that releases before OTP R11B-4 can decode resulting
+ ensure that releases before Erlang/OTP R11B-4 can decode resulting
binary.</p>
- <p>See also
- <seealso marker="#binary_to_term/1">binary_to_term/1</seealso>.</p>
+ <p>See also <seealso marker="#binary_to_term/1">
+ <c>binary_to_term/1</c></seealso>.</p>
</desc>
</func>
<func>
<name name="throw" arity="1"/>
- <fsummary>Throws an exception.</fsummary>
+ <fsummary>Throw an exception.</fsummary>
<desc>
<p>A non-local return from a function. If evaluated within a
- <c>catch</c>, <c>catch</c> returns value <c><anno>Any</anno></c>.</p>
- <p>Example:</p>
+ <c>catch</c>, <c>catch</c> returns value <c><anno>Any</anno></c>.
+ Example:</p>
<pre>
> <input>catch throw({hello, there}).</input>
{hello,there}</pre>
@@ -8430,8 +8677,7 @@ ok
<desc>
<p>Returns the current time as <c>{Hour, Minute, Second}</c>.</p>
<p>The time zone and Daylight Saving Time correction depend on
- the underlying OS.</p>
- <p>Example:</p>
+ the underlying OS. Example:</p>
<pre>
> <input>time().</input>
{9,42,44}</pre>
@@ -8440,86 +8686,94 @@ ok
<func>
<name name="time_offset" arity="0"/>
- <fsummary>Current time offset</fsummary>
- <desc>
- <p>Returns the current time offset between
- <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang monotonic time</seealso>
- and
- <seealso marker="time_correction#Erlang_System_Time">Erlang system time</seealso> in
- <c>native</c> <seealso marker="#type_time_unit">time unit</seealso>.
- Current time offset added to an Erlang monotonic time gives
- corresponding Erlang system time.</p>
-
- <p>The time offset may or may not change during operation depending
- on the <seealso marker="time_correction#Time_Warp_Modes">time
- warp mode</seealso> used.</p>
-
- <note>
- <p>A change in time offset may be observed at slightly
- different points in time by different processes.</p>
-
- <p>If the runtime system is in
- <seealso marker="time_correction#Multi_Time_Warp_Mode">multi
- time warp mode</seealso>, the time offset will be changed when
- the runtime system detects that the
- <seealso marker="time_correction#OS_System_Time">OS system
- time</seealso> has changed. The runtime system will, however,
- not detect this immediately when it happens. A task checking
- the time offset is scheduled to execute at least once a minute,
- so under normal operation this should be detected within a
- minute, but during heavy load it might take longer time.</p>
- </note>
+ <fsummary>Current time offset.</fsummary>
+ <desc>
+ <p>Returns the current time offset between
+ <seealso marker="time_correction#Erlang_Monotonic_Time">
+ Erlang monotonic time</seealso> and
+ <seealso marker="time_correction#Erlang_System_Time">
+ Erlang system time</seealso> in
+ <c>native</c> <seealso marker="#type_time_unit">time unit</seealso>.
+ Current time offset added to an Erlang monotonic time gives
+ corresponding Erlang system time.</p>
+ <p>The time offset may or may not change during operation depending
+ on the <seealso marker="time_correction#Time_Warp_Modes">time
+ warp mode</seealso> used.</p>
+ <note>
+ <p>A change in time offset can be observed at slightly
+ different points in time by different processes.</p>
+ <p>If the runtime system is in
+ <seealso marker="time_correction#Multi_Time_Warp_Mode">multi-time
+ warp mode</seealso>, the time offset is changed when
+ the runtime system detects that the
+ <seealso marker="time_correction#OS_System_Time">OS system
+ time</seealso> has changed. The runtime system will, however,
+ not detect this immediately when it occurs. A task checking
+ the time offset is scheduled to execute at least once a minute;
+ so, under normal operation this is to be detected within a
+ minute, but during heavy load it can take longer time.</p>
+ </note>
</desc>
</func>
+
<func>
<name name="time_offset" arity="1"/>
- <fsummary>Current time offset</fsummary>
+ <fsummary>Current time offset.</fsummary>
<desc>
- <p>Returns the current time offset between
- <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang monotonic time</seealso>
- and
- <seealso marker="time_correction#Erlang_System_Time">Erlang system time</seealso>
- converted into the <c><anno>Unit</anno></c> passed as argument.</p>
-
- <p>Same as calling
- <seealso marker="#convert_time_unit/3"><c>erlang:convert_time_unit</c></seealso><c>(</c><seealso marker="#time_offset/0"><c>erlang:time_offset()</c></seealso><c>, native, <anno>Unit</anno>)</c>
- however optimized for commonly used <c><anno>Unit</anno></c>s.</p>
+ <p>Returns the current time offset between
+ <seealso marker="time_correction#Erlang_Monotonic_Time">
+ Erlang monotonic time</seealso> and
+ <seealso marker="time_correction#Erlang_System_Time">
+ Erlang system time</seealso>
+ converted into the <c><anno>Unit</anno></c> passed as argument.</p>
+ <p>Same as calling
+ <seealso marker="#convert_time_unit/3">
+ <c>erlang:convert_time_unit</c></seealso><c>(</c><seealso marker="#time_offset/0">
+ <c>erlang:time_offset()</c></seealso><c>, native,
+ <anno>Unit</anno>)</c>
+ however optimized for commonly used <c><anno>Unit</anno></c>s.</p>
</desc>
</func>
+
<func>
<name name="timestamp" arity="0"/>
- <fsummary>Current Erlang System time</fsummary>
+ <fsummary>Current Erlang System time.</fsummary>
<type name="timestamp"/>
<desc>
- <p>Returns current
- <seealso marker="time_correction#Erlang_System_Time">Erlang system time</seealso>
- on the format <c>{MegaSecs, Secs, MicroSecs}</c>. This format is
- the same as <seealso marker="kernel:os#timestamp/0"><c>os:timestamp/0</c></seealso>
- and the deprecated <seealso marker="#now/0"><c>erlang:now/0</c></seealso>
- uses. The reason for the existence of <c>erlang:timestamp()</c> is
- purely to simplify usage for existing code that assumes this timestamp
- format. Current Erlang system time can more efficiently be retrieved in
- the time unit of your choice using
- <seealso marker="#system_time/1"><c>erlang:system_time/1</c></seealso>.</p>
-
- <p>The <c>erlang:timestamp()</c> BIF is equivalent to:</p><code type="none">
+ <p>Returns current
+ <seealso marker="time_correction#Erlang_System_Time">
+ Erlang system time</seealso>
+ on the format <c>{MegaSecs, Secs, MicroSecs}</c>. This format is
+ the same as <seealso marker="kernel:os#timestamp/0">
+ <c>os:timestamp/0</c></seealso>
+ and the deprecated <seealso marker="#now/0">
+ <c>erlang:now/0</c></seealso>
+ use. The reason for the existence of <c>erlang:timestamp()</c> is
+ purely to simplify use for existing code that assumes this time stamp
+ format. Current Erlang system time can more efficiently be retrieved
+ in the time unit of your choice using
+ <seealso marker="#system_time/1">
+ <c>erlang:system_time/1</c></seealso>.</p>
+ <p>The <c>erlang:timestamp()</c> BIF is equivalent to:</p>
+<code type="none">
timestamp() ->
- ErlangSystemTime = erlang:system_time(micro_seconds),
+ ErlangSystemTime = erlang:system_time(microsecond),
MegaSecs = ErlangSystemTime div 1000000000000,
Secs = ErlangSystemTime div 1000000 - MegaSecs*1000000,
MicroSecs = ErlangSystemTime rem 1000000,
{MegaSecs, Secs, MicroSecs}.</code>
- <p>It, however, uses a native implementation which does
- not build garbage on the heap and with slightly better
- performance.</p>
-
- <note><p>This time is <em>not</em> a monotonically increasing time
- in the general case. For more information, see the documentation of
- <seealso marker="time_correction#Time_Warp_Modes">time warp modes</seealso> in the
- ERTS User's Guide.</p></note>
+ <p>It, however, uses a native implementation that does
+ not build garbage on the heap and with slightly better
+ performance.</p>
+ <note>
+ <p>This time is <em>not</em> a monotonically increasing time
+ in the general case. For more information, see the documentation of
+ <seealso marker="time_correction#Time_Warp_Modes">
+ time warp modes</seealso> in the User's Guide.</p>
+ </note>
</desc>
-
</func>
+
<func>
<name name="tl" arity="1"/>
<fsummary>Tail of a list.</fsummary>
@@ -8537,7 +8791,7 @@ timestamp() ->
<func>
<name name="trace" arity="3"/>
- <fsummary>Sets trace flags for a process or processes.</fsummary>
+ <fsummary>Set trace flags for a process or processes.</fsummary>
<type name="trace_flag"/>
<desc>
<p>Turns on (if <c><anno>How</anno> == true</c>) or off (if
@@ -8547,49 +8801,43 @@ timestamp() ->
<c><anno>PidPortSpec</anno></c>.</p>
<p><c><anno>PidPortSpec</anno></c> is either a process identifier
(pid) for a local process, a port identifier,
- or one of the following atoms:</p>
+ or one of the following atoms:</p>
<taglist>
<tag><c>all</c></tag>
- <item>
- <p>All currently existing processes and ports and all that
- will be created in the future.</p>
+ <item>All currently existing processes and ports and all that
+ will be created in the future.
</item>
<tag><c>processes</c></tag>
- <item>
- <p>All currently existing processes and all that will be created in the future.</p>
+ <item>All currently existing processes and all that will be created
+ in the future.
</item>
<tag><c>ports</c></tag>
- <item>
- <p>All currently existing ports and all that will be created in the future.</p>
+ <item>All currently existing ports and all that will be created in
+ the future.
</item>
<tag><c>existing</c></tag>
- <item>
- <p>All currently existing processes and ports.</p>
+ <item>All currently existing processes and ports.
</item>
<tag><c>existing_processes</c></tag>
- <item>
- <p>All currently existing processes.</p>
+ <item>All currently existing processes.
</item>
<tag><c>existing_ports</c></tag>
- <item>
- <p>All currently existing ports.</p>
+ <item>All currently existing ports.
</item>
<tag><c>new</c></tag>
- <item>
- <p>All processes and ports that will be created in the future.</p>
+ <item>All processes and ports that will be created in the future.
</item>
<tag><c>new_processes</c></tag>
- <item>
- <p>All processes that will be created in the future.</p>
+ <item>All processes that will be created in the future.
</item>
<tag><c>new_ports</c></tag>
- <item>
- <p>All ports that will be created in the future.</p>
+ <item>All ports that will be created in the future.
</item>
</taglist>
<p><c><anno>FlagList</anno></c> can contain any number of the
following flags (the "message tags" refers to the list of
- <seealso marker="#trace_3_trace_messages">trace messages</seealso>):</p>
+ <seealso marker="#trace_3_trace_messages">
+ <c>trace messages</c></seealso>):</p>
<taglist>
<tag><c>all</c></tag>
<item>
@@ -8600,21 +8848,29 @@ timestamp() ->
<tag><c>send</c></tag>
<item>
<p>Traces sending of messages.</p>
- <p>Message tags: <c><seealso marker="#trace_3_trace_messages_send">send</seealso></c> and
- <c><seealso marker="#trace_3_trace_messages_send_to_non_existing_process">send_to_non_existing_process</seealso></c>.</p>
+ <p>Message tags:
+ <seealso marker="#trace_3_trace_messages_send">
+ <c>send</c></seealso> and
+ <seealso marker="#trace_3_trace_messages_send_to_non_existing_process">
+ <c>send_to_non_existing_process</c></seealso>.</p>
</item>
<tag><c>'receive'</c></tag>
<item>
<p>Traces receiving of messages.</p>
- <p>Message tags: <c><seealso marker="#trace_3_trace_messages_receive">'receive'</seealso></c>.</p>
+ <p>Message tags:
+ <seealso marker="#trace_3_trace_messages_receive">
+ <c>'receive'</c></seealso>.</p>
</item>
-<tag><c>call</c></tag>
+ <tag><c>call</c></tag>
<item>
<p>Traces certain function calls. Specify which function
- calls to trace by calling
- <seealso marker="#trace_pattern/3">erlang:trace_pattern/3</seealso>.</p>
- <p>Message tags: <c><seealso marker="#trace_3_trace_messages_call">call</seealso></c> and
- <c><seealso marker="#trace_3_trace_messages_return_from">return_from</seealso></c>.</p>
+ calls to trace by calling <seealso marker="#trace_pattern/3">
+ <c>erlang:trace_pattern/3</c></seealso>.</p>
+ <p>Message tags:
+ <seealso marker="#trace_3_trace_messages_call">
+ <c>call</c></seealso> and
+ <seealso marker="#trace_3_trace_messages_return_from">
+ <c>return_from</c></seealso>.</p>
</item>
<tag><c>silent</c></tag>
<item>
@@ -8632,17 +8888,21 @@ timestamp() ->
specification function <c>{silent,Bool}</c>, giving
a high degree of control of which functions with which
arguments that trigger the trace.</p>
- <p>Message tags: <c><seealso marker="#trace_3_trace_messages_call">call</seealso></c>,
- <c><seealso marker="#trace_3_trace_messages_return_from">return_from</seealso></c>, and
- <c><seealso marker="#trace_3_trace_messages_return_to">return_to</seealso></c>. Or rather, the absence of.</p>
+ <p>Message tags:
+ <seealso marker="#trace_3_trace_messages_call">
+ <c>call</c></seealso>,
+ <seealso marker="#trace_3_trace_messages_return_from">
+ <c>return_from</c></seealso>, and
+ <seealso marker="#trace_3_trace_messages_return_to">
+ <c>return_to</c></seealso>. Or rather, the absence of.</p>
</item>
<tag><c>return_to</c></tag>
<item>
<p>Used with the <c>call</c> trace flag.
Traces the return from a traced function back to
its caller. Only works for functions traced with
- option <c>local</c> to
- <seealso marker="#trace_pattern/3">erlang:trace_pattern/3</seealso>.</p>
+ option <c>local</c> to <seealso marker="#trace_pattern/3">
+ <c>erlang:trace_pattern/3</c></seealso>.</p>
<p>The semantics is that a trace message is sent when a
call traced function returns, that is, when a
chain of tail recursive calls ends. Only one trace
@@ -8655,105 +8915,144 @@ timestamp() ->
<p>To get trace messages containing return values from
functions, use the <c>{return_trace}</c> match
specification action instead.</p>
- <p>Message tags: <c><seealso marker="#trace_3_trace_messages_return_to">return_to</seealso></c>.</p>
+ <p>Message tags:
+ <seealso marker="#trace_3_trace_messages_return_to">
+ <c>return_to</c></seealso>.</p>
</item>
<tag><c>procs</c></tag>
<item>
<p>Traces process-related events.</p>
- <p>Message tags: <c><seealso marker="#trace_3_trace_messages_spawn">spawn</seealso></c>,
- <c><seealso marker="#trace_3_trace_messages_spawned">spawned</seealso></c>,
- <c><seealso marker="#trace_3_trace_messages_exit">exit</seealso></c>,
- <c><seealso marker="#trace_3_trace_messages_register">register</seealso></c>,
- <c><seealso marker="#trace_3_trace_messages_unregister">unregister</seealso></c>,
- <c><seealso marker="#trace_3_trace_messages_link">link</seealso></c>,
- <c><seealso marker="#trace_3_trace_messages_unlink">unlink</seealso></c>,
- <c><seealso marker="#trace_3_trace_messages_getting_linked">getting_linked</seealso></c>, and
- <c><seealso marker="#trace_3_trace_messages_getting_unlinked">getting_unlinked</seealso></c>.</p>
+ <p>Message tags:
+ <seealso marker="#trace_3_trace_messages_spawn">
+ <c>spawn</c></seealso>,
+ <seealso marker="#trace_3_trace_messages_spawned">
+ <c>spawned</c></seealso>,
+ <seealso marker="#trace_3_trace_messages_exit">
+ <c>exit</c></seealso>,
+ <seealso marker="#trace_3_trace_messages_register">
+ <c>register</c></seealso>,
+ <seealso marker="#trace_3_trace_messages_unregister">
+ <c>unregister</c></seealso>,
+ <seealso marker="#trace_3_trace_messages_link">
+ <c>link</c></seealso>,
+ <seealso marker="#trace_3_trace_messages_unlink">
+ <c>unlink</c></seealso>,
+ <seealso marker="#trace_3_trace_messages_getting_linked">
+ <c>getting_linked</c></seealso>, and
+ <seealso marker="#trace_3_trace_messages_getting_unlinked">
+ <c>getting_unlinked</c></seealso>.</p>
</item>
<tag><c>ports</c></tag>
<item>
<p>Traces port-related events.</p>
- <p>Message tags: <c><seealso marker="#trace_3_trace_messages_open">open</seealso></c>,
- <c><seealso marker="#trace_3_trace_messages_closed">closed</seealso></c>,
- <c><seealso marker="#trace_3_trace_messages_register">register</seealso></c>,
- <c><seealso marker="#trace_3_trace_messages_unregister">unregister</seealso></c>,
- <c><seealso marker="#trace_3_trace_messages_getting_linked">getting_linked</seealso></c>, and
- <c><seealso marker="#trace_3_trace_messages_getting_unlinked">getting_unlinked</seealso></c>.</p>
+ <p>Message tags:
+ <seealso marker="#trace_3_trace_messages_open">
+ <c>open</c></seealso>,
+ <seealso marker="#trace_3_trace_messages_closed">
+ <c>closed</c></seealso>,
+ <seealso marker="#trace_3_trace_messages_register">
+ <c>register</c></seealso>,
+ <seealso marker="#trace_3_trace_messages_unregister">
+ <c>unregister</c></seealso>,
+ <seealso marker="#trace_3_trace_messages_getting_linked">
+ <c>getting_linked</c></seealso>, and
+ <seealso marker="#trace_3_trace_messages_getting_unlinked">
+ <c>getting_unlinked</c></seealso>.</p>
</item>
<tag><c>running</c></tag>
<item>
<p>Traces scheduling of processes.</p>
- <p>Message tags: <c><seealso marker="#trace_3_trace_messages_in_proc">in</seealso></c> and
- <c><seealso marker="#trace_3_trace_messages_out_proc">out</seealso></c>.</p>
+ <p>Message tags:
+ <seealso marker="#trace_3_trace_messages_in_proc">
+ <c>in</c></seealso> and
+ <seealso marker="#trace_3_trace_messages_out_proc">
+ <c>out</c></seealso>.</p>
</item>
<tag><c>exiting</c></tag>
<item>
<p>Traces scheduling of exiting processes.</p>
- <p>Message tags: <c><seealso marker="#trace_3_trace_messages_in_exiting_proc">in_exiting</seealso></c>,
- <c><seealso marker="#trace_3_trace_messages_out_exiting_proc">out_exiting</seealso></c>, and
- <c><seealso marker="#trace_3_trace_messages_out_exited_proc">out_exited</seealso></c>.</p>
+ <p>Message tags:
+ <seealso marker="#trace_3_trace_messages_in_exiting_proc">
+ <c>in_exiting</c></seealso>,
+ <seealso marker="#trace_3_trace_messages_out_exiting_proc">
+ <c>out_exiting</c></seealso>, and
+ <seealso marker="#trace_3_trace_messages_out_exited_proc">
+ <c>out_exited</c></seealso>.</p>
</item>
<tag><c>running_procs</c></tag>
<item>
<p>Traces scheduling of processes just like <c>running</c>.
- However this option also includes schedule events when the
- process executes within the context of a port without
- being scheduled out itself.</p>
- <p>Message tags: <c><seealso marker="#trace_3_trace_messages_in_proc">in</seealso></c> and
- <c><seealso marker="#trace_3_trace_messages_out_proc">out</seealso></c>.</p>
+ However, this option also includes schedule events when the
+ process executes within the context of a port without
+ being scheduled out itself.</p>
+ <p>Message tags:
+ <seealso marker="#trace_3_trace_messages_in_proc">
+ <c>in</c></seealso> and
+ <seealso marker="#trace_3_trace_messages_out_proc">
+ <c>out</c></seealso>.</p>
</item>
<tag><c>running_ports</c></tag>
<item>
<p>Traces scheduling of ports.</p>
- <p>Message tags: <c><seealso marker="#trace_3_trace_messages_in_port">in</seealso></c> and
- <c><seealso marker="#trace_3_trace_messages_out_port">out</seealso></c>.</p>
+ <p>Message tags:
+ <seealso marker="#trace_3_trace_messages_in_port">
+ <c>in</c></seealso> and
+ <seealso marker="#trace_3_trace_messages_out_port">
+ <c>out</c></seealso>.</p>
</item>
<tag><c>garbage_collection</c></tag>
<item>
<p>Traces garbage collections of processes.</p>
- <p>Message tags: <c><seealso marker="#trace_3_trace_messages_gc_minor_start">gc_minor_start</seealso></c>,
- <c><seealso marker="#trace_3_trace_messages_gc_max_heap_size">gc_max_heap_size</seealso></c> and
- <c><seealso marker="#trace_3_trace_messages_gc_minor_end">gc_minor_end</seealso></c>.</p>
+ <p>Message tags:
+ <seealso marker="#trace_3_trace_messages_gc_minor_start">
+ <c>gc_minor_start</c></seealso>,
+ <seealso marker="#trace_3_trace_messages_gc_max_heap_size">
+ <c>gc_max_heap_size</c></seealso>, and
+ <seealso marker="#trace_3_trace_messages_gc_minor_end">
+ <c>gc_minor_end</c></seealso>.</p>
</item>
<tag><c>timestamp</c></tag>
<item>
- <p>Includes a time-stamp in all trace messages. The
- time-stamp (Ts) has the same form as returned by
+ <p>Includes a time stamp in all trace messages. The
+ time stamp (Ts) has the same form as returned by
<c>erlang:now()</c>.</p>
</item>
<tag><c>cpu_timestamp</c></tag>
<item>
<p>A global trace flag for the Erlang node that makes all
- trace time-stamps using the <c>timestamp</c> flag to be
- in CPU time, not wall clock time. That is, <c>cpu_timestamp</c>
- will not be used if <c>monotonic_timestamp</c>, or
- <c>strict_monotonic_timestamp</c> is enabled.
+ trace time stamps using flag <c>timestamp</c> to be
+ in CPU time, not wall clock time. That is, <c>cpu_timestamp</c>
+ is not be used if <c>monotonic_timestamp</c> or
+ <c>strict_monotonic_timestamp</c> is enabled.
Only allowed with <c><anno>PidPortSpec</anno>==all</c>. If the
host machine OS does not support high-resolution
CPU time measurements, <c>trace/3</c> exits with
<c>badarg</c>. Notice that most OS do
not synchronize this value across cores, so be prepared
- that time might seem to go backwards when using this option.</p>
+ that time can seem to go backwards when using this option.</p>
</item>
<tag><c>monotonic_timestamp</c></tag>
<item>
<p>Includes an
- <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
- monotonic time</seealso> time-stamp in all trace messages. The
- time-stamp (Ts) has the same format and value as produced by
- <c><seealso marker="#monotonic_time-1">erlang:monotonic_time(nano_seconds)</seealso></c>.
- This flag overrides the <c>cpu_timestamp</c> flag.</p>
+ <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
+ monotonic time</seealso> time stamp in all trace messages. The
+ time stamp (Ts) has the same format and value as produced by
+ <seealso marker="#monotonic_time-1">
+ <c>erlang:monotonic_time(nanosecond)</c></seealso>.
+ This flag overrides flag <c>cpu_timestamp</c>.</p>
</item>
<tag><c>strict_monotonic_timestamp</c></tag>
<item>
- <p>Includes an timestamp consisting of
- <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
- monotonic time</seealso> and a monotonically increasing
- integer in all trace messages. The time-stamp (Ts) has the
- same format and value as produced by
- <c>{<seealso marker="#monotonic_time-1">erlang:monotonic_time(nano_seconds)</seealso>,
- <seealso marker="#unique_integer-1">erlang:unique_integer([monotonic])</seealso>}</c>.
- This flag overrides the <c>cpu_timestamp</c> flag.</p>
+ <p>Includes an time stamp consisting of
+ <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
+ monotonic time</seealso> and a monotonically increasing
+ integer in all trace messages. The time stamp (Ts) has the
+ same format and value as produced by <c>{</c>
+ <seealso marker="#monotonic_time-1">
+ <c>erlang:monotonic_time(nanosecond)</c></seealso><c>,</c>
+ <seealso marker="#unique_integer-1">
+ <c>erlang:unique_integer([monotonic])</c></seealso><c>}</c>.
+ This flag overrides flag <c>cpu_timestamp</c>.</p>
</item>
<tag><c>arity</c></tag>
<item>
@@ -8791,34 +9090,34 @@ timestamp() ->
</item>
<tag><c>{tracer, TracerModule, TracerState}</c></tag>
<item>
- <p>Specifies that a tracer module should be called
- instead of sending a trace message. The tracer module
- can then ignore or change the trace message. For more details
- on how to write a tracer module see
- <seealso marker="erts:erl_tracer"><c>erl_tracer</c></seealso>
- </p>
+ <p>Specifies that a tracer module is to be called
+ instead of sending a trace message. The tracer module
+ can then ignore or change the trace message. For more details
+ on how to write a tracer module, see
+ <seealso marker="erts:erl_tracer"><c>erl_tracer(3)</c></seealso>.</p>
</item>
</taglist>
- <p>If no <c>tracer</c> is given, the calling process
- will be receiving all of the trace messages</p>
+ <p>If no <c>tracer</c> is specified, the calling process
+ receives all the trace messages.</p>
<p>The effect of combining <c>set_on_first_link</c> with
- <c>set_on_link</c> is the same as having
+ <c>set_on_link</c> is the same as
<c>set_on_first_link</c> alone. Likewise for
<c>set_on_spawn</c> and <c>set_on_first_spawn</c>.</p>
<p>The tracing process receives the <em>trace messages</em> described
- in the following list. <c>Pid</c> is the process identifier of the
- traced process in which the traced event has occurred. The
- third tuple element is the message tag.</p>
+ in the following list. <c>Pid</c> is the process identifier of the
+ traced process in which the traced event has occurred. The
+ third tuple element is the message tag.</p>
<p>If flag <c>timestamp</c>, <c>strict_monotonic_timestamp</c>, or
- <c>monotonic_timestamp</c> is given, the first tuple
- element is <c>trace_ts</c> instead, and the time-stamp
- is added as an extra element last in the message tuple. If
- multiple timestamp flags are passed, <c>timestamp</c> has
- precedence over <c>strict_monotonic_timestamp</c> which
- in turn has precedence over <c>monotonic_timestamp</c>. All
- timestamp flags are remembered, so if two are passed
- and the one with highest precedence later is disabled
- the other one will become active.</p>
+ <c>monotonic_timestamp</c> is specified, the first tuple
+ element is <c>trace_ts</c> instead, and the time stamp
+ is added as an extra element last in the message tuple. If
+ multiple time stamp flags are passed, <c>timestamp</c> has
+ precedence over <c>strict_monotonic_timestamp</c>, which
+ in turn has precedence over <c>monotonic_timestamp</c>. All
+ time stamp flags are remembered, so if two are passed
+ and the one with highest precedence later is disabled,
+ the other one becomes active.</p>
+ <p>Trace messages:</p>
<marker id="trace_3_trace_messages"></marker>
<taglist>
<tag>
@@ -8830,7 +9129,7 @@ timestamp() ->
process <c>To</c>.</p>
</item>
<tag>
- <marker id="trace_3_trace_messages_send_to_non_existing_process"></marker>
+ <marker id="trace_3_trace_messages_send_to_non_existing_process"/>
<c>{trace, PidPort, send_to_non_existing_process, Msg, To}</c>
</tag>
<item>
@@ -8843,9 +9142,9 @@ timestamp() ->
</tag>
<item>
<p>When <c>PidPort</c> receives message <c>Msg</c>.
- If <c>Msg</c> is set to timeout, then a receive
- statement may have timedout, or the process received
- a message with the payload <c>timeout</c>.</p>
+ If <c>Msg</c> is set to time-out, a receive
+ statement can have timed out, or the process received
+ a message with the payload <c>timeout</c>.</p>
</item>
<tag>
<marker id="trace_3_trace_messages_call"></marker>
@@ -8979,7 +9278,7 @@ timestamp() ->
</tag>
<item>
<p>When <c>Pid</c> opens a new port <c>Port</c> with
- the running the <c>Driver</c>.</p>
+ the running <c>Driver</c>.</p>
<p><c>Driver</c> is the name of the driver as an atom.</p>
</item>
<tag>
@@ -8987,7 +9286,7 @@ timestamp() ->
<c>{trace, Port, closed, Reason}</c>
</tag>
<item>
- <p>When <c>Port</c> closed with <c>Reason</c>.</p>
+ <p>When <c>Port</c> closes with <c>Reason</c>.</p>
</item>
<tag>
<marker id="trace_3_trace_messages_in_proc"></marker>
@@ -9004,7 +9303,8 @@ timestamp() ->
<marker id="trace_3_trace_messages_out_proc"></marker>
<marker id="trace_3_trace_messages_out_exiting_proc"></marker>
<marker id="trace_3_trace_messages_out_exited_proc"></marker>
- <c>{trace, Pid, out | out_exiting | out_exited, {M, F, Arity} | 0}</c>
+ <c>{trace, Pid, out | out_exiting | out_exited, {M, F, Arity}
+ | 0}</c>
</tag>
<item>
<p>When <c>Pid</c> is scheduled out. The process was
@@ -9018,11 +9318,13 @@ timestamp() ->
</tag>
<item>
<p>When <c>Port</c> is scheduled to run. <c>Command</c> is the
- first thing the port will execute, it may however run several
- commands before being scheduled out. On some rare
- occasions, the current function cannot be determined,
- then the last element is <c>0</c>.</p>
- <p>The possible commands are: <c>call | close | command | connect | control | flush | info | link | open | unlink</c></p>
+ first thing the port will execute, it can however run several
+ commands before being scheduled out. On some rare
+ occasions, the current function cannot be determined,
+ then the last element is <c>0</c>.</p>
+ <p>The possible commands are <c>call</c>, <c>close</c>,
+ <c>command</c>, <c>connect</c>, <c>control</c>, <c>flush</c>,
+ <c>info</c>, <c>link</c>, <c>open</c>, and <c>unlink</c>.</p>
</item>
<tag>
<marker id="trace_3_trace_messages_out_port"></marker>
@@ -9033,8 +9335,7 @@ timestamp() ->
was <c>Command</c>. On some rare occasions,
the current function cannot be determined, then the last
element is <c>0</c>. <c>Command</c> can contain the same
- commands as <c>in</c>
- </p>
+ commands as <c>in</c></p>
</item>
<tag>
<marker id="trace_3_trace_messages_gc_minor_start"></marker>
@@ -9050,13 +9351,13 @@ timestamp() ->
<taglist>
<tag><c>heap_size</c></tag>
<item>The size of the used part of the heap.</item>
- <tag><c>heap_block_size</c></tag>
- <item>The size of the memory block used for storing
- the heap and the stack.</item>
+ <tag><c>heap_block_size</c></tag>
+ <item>The size of the memory block used for storing
+ the heap and the stack.</item>
<tag><c>old_heap_size</c></tag>
<item>The size of the used part of the old heap.</item>
- <tag><c>old_heap_block_size</c></tag>
- <item>The size of the memory block used for storing
+ <tag><c>old_heap_block_size</c></tag>
+ <item>The size of the memory block used for storing
the old heap.</item>
<tag><c>stack_size</c></tag>
<item>The size of the stack.</item>
@@ -9070,14 +9371,15 @@ timestamp() ->
<item>The total size of unique off-heap binaries referenced
from the process heap.</item>
<tag><c>bin_vheap_block_size</c></tag>
- <item>The total size of binaries allowed in the virtual
- heap in the process before doing a garbage collection.</item>
+ <item>The total size of binaries allowed in the virtual
+ heap in the process before doing a garbage collection.</item>
<tag><c>bin_old_vheap_size</c></tag>
<item>The total size of unique off-heap binaries referenced
from the process old heap.</item>
<tag><c>bin_old_vheap_block_size</c></tag>
- <item>The total size of binaries allowed in the virtual
- old heap in the process before doing a garbage collection.</item>
+ <item>The total size of binaries allowed in the virtual
+ old heap in the process before doing a garbage
+ collection.</item>
</taglist>
<p>All sizes are in words.</p>
</item>
@@ -9086,13 +9388,12 @@ timestamp() ->
<c>{trace, Pid, gc_max_heap_size, Info}</c>
</tag>
<item>
- <p>
- Sent when the <seealso marker="#process_flag_max_heap_size"><c>max_heap_size</c></seealso>
+ <p>Sent when the <seealso marker="#process_flag_max_heap_size">
+ <c>max_heap_size</c></seealso>
is reached during garbage collection. <c>Info</c> contains the
same kind of list as in message <c>gc_start</c>,
- but the sizes reflect the sizes that triggered max_heap_size to
- be reached.
- </p>
+ but the sizes reflect the sizes that triggered
+ <c>max_heap_size</c> to be reached.</p>
</item>
<tag>
<marker id="trace_3_trace_messages_gc_minor_end"></marker>
@@ -9100,7 +9401,8 @@ timestamp() ->
</tag>
<item>
<p>Sent when young garbage collection is finished. <c>Info</c>
- contains the same kind of list as in message <c>gc_minor_start</c>,
+ contains the same kind of list as in message
+ <c>gc_minor_start</c>,
but the sizes reflect the new sizes after
garbage collection.</p>
</item>
@@ -9109,8 +9411,9 @@ timestamp() ->
<c>{trace, Pid, gc_major_start, Info}</c>
</tag>
<item>
- <p>Sent when fullsweep garbage collection is about to be started. <c>Info</c>
- contains the same kind of list as in message <c>gc_minor_start</c>.</p>
+ <p>Sent when fullsweep garbage collection is about to be started.
+ <c>Info</c> contains the same kind of list as in message
+ <c>gc_minor_start</c>.</p>
</item>
<tag>
<marker id="trace_3_trace_messages_gc_major_end"></marker>
@@ -9118,15 +9421,16 @@ timestamp() ->
</tag>
<item>
<p>Sent when fullsweep garbage collection is finished. <c>Info</c>
- contains the same kind of list as in message <c>gc_minor_start</c>
- but the sizes reflect the new sizes after a fullsweep garbage collection.</p>
+ contains the same kind of list as in message
+ <c>gc_minor_start</c>, but the sizes reflect the new sizes after
+ a fullsweep garbage collection.</p>
</item>
</taglist>
<p>If the tracing process/port dies or the tracer module returns
- <c>remove</c>, the flags are silently removed.</p>
+ <c>remove</c>, the flags are silently removed.</p>
<p>Each process can only be traced by one tracer. Therefore,
attempts to trace an already traced process fail.</p>
- <p>Returns: A number indicating the number of processes that
+ <p>Returns a number indicating the number of processes that
matched <c><anno>PidPortSpec</anno></c>.
If <c><anno>PidPortSpec</anno></c> is a process
identifier, the return value is <c>1</c>.
@@ -9146,22 +9450,24 @@ timestamp() ->
<fsummary>Notification when trace has been delivered.</fsummary>
<desc>
<p>The delivery of trace messages (generated by
- <seealso marker="#trace/3"><c>erlang:trace/3</c></seealso>,
- <seealso marker="kernel:seq_trace"><c>seq_trace</c></seealso> or
- <seealso marker="#system_profile/2"><c>erlang:system_profile/2</c></seealso>)
+ <seealso marker="#trace/3"><c>erlang:trace/3</c></seealso>,
+ <seealso marker="kernel:seq_trace"><c>seq_trace(3)</c></seealso>,
+ or <seealso marker="#system_profile/2">
+ <c>erlang:system_profile/2</c></seealso>)
is dislocated on the time-line
compared to other events in the system. If you know that
<c><anno>Tracee</anno></c> has passed some specific point
in its execution,
and you want to know when at least all trace messages
corresponding to events up to this point have reached the
- tracer, use <c>erlang:trace_delivered(<anno>Tracee</anno>)</c>. A
- <c>{trace_delivered, <anno>Tracee</anno>, <anno>Ref</anno>}</c> message is sent to
- the caller of <c>erlang:trace_delivered(<anno>Tracee</anno>)</c> when it
- is guaranteed that all trace messages are delivered to
+ tracer, use <c>erlang:trace_delivered(<anno>Tracee</anno>)</c>.</p>
+ <p>When it is guaranteed that all trace messages are delivered to
the tracer up to the point that <c><anno>Tracee</anno></c> reached
at the time of the call to
- <c>erlang:trace_delivered(<anno>Tracee</anno>)</c>.</p>
+ <c>erlang:trace_delivered(<anno>Tracee</anno>)</c>, then a
+ <c>{trace_delivered, <anno>Tracee</anno>, <anno>Ref</anno>}</c>
+ message is sent to the caller of
+ <c>erlang:trace_delivered(<anno>Tracee</anno>)</c> .</p>
<p>Notice that message <c>trace_delivered</c> does <em>not</em>
imply that trace messages have been delivered.
Instead it implies that all trace messages that
@@ -9171,22 +9477,22 @@ timestamp() ->
<em>no</em> trace messages have been delivered when the
<c>trace_delivered</c> message arrives.</p>
<p>Notice that <c><anno>Tracee</anno></c> must refer
- to a process currently,
+ to a process currently
or previously existing on the same node as the caller of
<c>erlang:trace_delivered(<anno>Tracee</anno>)</c> resides on.
The special <c><anno>Tracee</anno></c> atom <c>all</c>
denotes all processes that currently are traced in the node.</p>
- <p>When used together with an <seealso marker="erts:erl_tracer">
- Tracer Module</seealso> any message sent in the trace callback
- is guaranteed to have reached it's recipient before the
+ <p>When used together with a <seealso marker="erts:erl_tracer">
+ Tracer Module</seealso>, any message sent in the trace callback
+ is guaranteed to have reached its recipient before the
<c>trace_delivered</c> message is sent.</p>
<p>Example: Process <c>A</c> is <c><anno>Tracee</anno></c>,
- port <c>B</c> is tracer, and process <c>C</c> is the port
- owner of <c>B</c>. <c>C</c> wants to close <c>B</c> when
- <c>A</c> exits. To ensure that the trace is not truncated,
- <c>C</c> can call <c>erlang:trace_delivered(A)</c>, when
- <c>A</c> exits, and wait for message <c>{trace_delivered, A,
- <anno>Ref</anno>}</c> before closing <c>B</c>.</p>
+ port <c>B</c> is tracer, and process <c>C</c> is the port
+ owner of <c>B</c>. <c>C</c> wants to close <c>B</c> when
+ <c>A</c> exits. To ensure that the trace is not truncated,
+ <c>C</c> can call <c>erlang:trace_delivered(A)</c> when
+ <c>A</c> exits, and wait for message <c>{trace_delivered, A,
+ <anno>Ref</anno>}</c> before closing <c>B</c>.</p>
<p>Failure: <c>badarg</c> if <c><anno>Tracee</anno></c>
does not refer to a
process (dead or alive) on the same node as the caller of
@@ -9196,22 +9502,23 @@ timestamp() ->
<func>
<name name="trace_info" arity="2"/>
- <fsummary>Trace information about a process or function.</fsummary>
+ <fsummary>Trace information about a process or function.</fsummary>
<type name="trace_info_return"/>
<type name="trace_info_item_result"/>
<type name="trace_info_flag"/>
<type name="trace_match_spec"/>
<desc>
- <p>Returns trace information about a port, process, function or event.</p>
+ <p>Returns trace information about a port, process, function, or
+ event.</p>
<p><em>To get information about a port or process</em>,
- <c><anno>PidPortFuncEvent</anno></c> is to
- be a process identifier (pid), port identifier or one of
- the atoms <c>new</c>, <c>new_processes</c>, <c>new_ports</c>.
- The atom <c>new</c> or <c>new_processes</c> means that the default trace
- state for processes to be created is returned. The atom <c>new_ports</c>
- means that the default trace state for ports to be created is returned.
- </p>
- <p>The following <c>Item</c>s are valid for ports and processes:</p>
+ <c><anno>PidPortFuncEvent</anno></c> is to
+ be a process identifier (pid), port identifier, or one of
+ the atoms <c>new</c>, <c>new_processes</c>, or <c>new_ports</c>. The
+ atom <c>new</c> or <c>new_processes</c> means that the default trace
+ state for processes to be created is returned. The atom
+ <c>new_ports</c> means that the default trace state for ports to be
+ created is returned.</p>
+ <p>Valid <c>Item</c>s for ports and processes:</p>
<taglist>
<tag><c>flags</c></tag>
<item>
@@ -9220,30 +9527,32 @@ timestamp() ->
traces are enabled, and one or more of the followings
atoms if traces are enabled: <c>send</c>,
<c>'receive'</c>, <c>set_on_spawn</c>, <c>call</c>,
- <c>return_to</c>, <c>procs</c>, <c>ports</c>, <c>set_on_first_spawn</c>,
+ <c>return_to</c>, <c>procs</c>, <c>ports</c>,
+ <c>set_on_first_spawn</c>,
<c>set_on_link</c>, <c>running</c>, <c>running_procs</c>,
- <c>running_ports</c>, <c>silent</c>, <c>exiting</c>
+ <c>running_ports</c>, <c>silent</c>, <c>exiting</c>,
<c>monotonic_timestamp</c>, <c>strict_monotonic_timestamp</c>,
<c>garbage_collection</c>, <c>timestamp</c>, and
<c>arity</c>. The order is arbitrary.</p>
</item>
<tag><c>tracer</c></tag>
<item>
- <p>Returns the identifier for process, port or a tuple containing
+ <p>Returns the identifier for process, port, or a tuple containing
the tracer module and tracer state tracing this
- process. If this process is not being traced, the return
+ process. If this process is not traced, the return
value is <c>[]</c>.</p>
</item>
</taglist>
- <p><em>To get information about a function</em>, <c><anno>PidPortFuncEvent</anno></c> is to
+ <p><em>To get information about a function</em>,
+ <c><anno>PidPortFuncEvent</anno></c> is to
be the three-element tuple <c>{Module, Function, Arity}</c> or
- the atom <c>on_load</c>. No wild cards are allowed. Returns
+ the atom <c>on_load</c>. No wildcards are allowed. Returns
<c>undefined</c> if the function does not exist, or
- <c>false</c> if the function is not traced. If <c><anno>PidPortFuncEvent</anno></c>
- is <c>on_load</c>, the information returned refers to
- the default value for code that will be loaded.</p>
-
- <p>The following <c>Item</c>s are valid for functions:</p>
+ <c>false</c> if the function is not traced.
+ If <c><anno>PidPortFuncEvent</anno></c>
+ is <c>on_load</c>, the information returned refers to
+ the default value for code that will be loaded.</p>
+ <p>Valid <c>Item</c>s for functions:</p>
<taglist>
<tag><c>traced</c></tag>
<item>
@@ -9262,11 +9571,12 @@ timestamp() ->
</item>
<tag><c>meta</c></tag>
<item>
- <p>Returns the meta-trace tracer process, port or trace module
+ <p>Returns the meta-trace tracer process, port, or trace module
for this function, if it has one. If the function is not
meta-traced, the returned value is <c>false</c>. If
the function is meta-traced but has once detected that
- the tracer process is invalid, the returned value is [].</p>
+ the tracer process is invalid, the returned value is
+ <c>[]</c>.</p>
</item>
<tag><c>meta_match_spec</c></tag>
<item>
@@ -9279,21 +9589,22 @@ timestamp() ->
<item>
<p>Returns the call count value for this function or
<c>true</c> for the pseudo function <c>on_load</c> if call
- count tracing is active. Otherwise <c>false</c> is returned.
- See also
- <seealso marker="#trace_pattern/3">erlang:trace_pattern/3</seealso>.</p>
+ count tracing is active. Otherwise <c>false</c> is returned.</p>
+ <p>See also <seealso marker="#trace_pattern/3">
+ <c>erlang:trace_pattern/3</c></seealso>.</p>
</item>
<tag><c>call_time</c></tag>
<item>
- <p>Returns the call time values for this function or
+ <p>Returns the call time values for this function or
<c>true</c> for the pseudo function <c>on_load</c> if call
- time tracing is active. Otherwise <c>false</c> is returned.
- The call time values returned, <c>[{Pid, Count, S, Us}]</c>,
- is a list of each process that executed the function
- and its specific counters. See also
- <seealso marker="#trace_pattern/3">erlang:trace_pattern/3</seealso>.</p>
+ time tracing is active. Otherwise <c>false</c> is returned.
+ The call time values returned, <c>[{Pid, Count, S, Us}]</c>,
+ is a list of each process that executed the function
+ and its specific counters.</p>
+ <p>See also
+ <seealso marker="#trace_pattern/3">
+ <c>erlang:trace_pattern/3</c></seealso>.</p>
</item>
-
<tag><c>all</c></tag>
<item>
<p>Returns a list containing the
@@ -9302,80 +9613,84 @@ timestamp() ->
is active for this function.</p>
</item>
</taglist>
- <p><em>To get information about an event</em>, <c><anno>PidPortFuncEvent</anno></c> is to
+ <p><em>To get information about an event</em>,
+ <c><anno>PidPortFuncEvent</anno></c> is to
be one of the atoms <c>send</c> or <c>'receive'</c>.</p>
- <p>The only valid <c>Item</c> for events is:</p>
+ <p>One valid <c>Item</c> for events exists:</p>
<taglist>
<tag><c>match_spec</c></tag>
<item>
<p>Returns the match specification for this event, if it
has one, or <c>true</c> if no match specification has been
- set.</p>
+ set.</p>
</item>
</taglist>
<p>The return value is <c>{<anno>Item</anno>, Value}</c>, where
<c>Value</c> is the requested information as described earlier.
- If a pid for a dead process was given, or the name of a
+ If a pid for a dead process was specified, or the name of a
non-existing function, <c>Value</c> is <c>undefined</c>.</p>
</desc>
</func>
<func>
<name name="trace_pattern" arity="2" clause_i="1"/>
- <fsummary>Sets trace patterns for call, send or 'receive' tracing.</fsummary>
+ <fsummary>Set trace patterns for call, send, or 'receive' tracing.
+ </fsummary>
<type name="trace_pattern_mfa"/>
<type name="trace_match_spec"/>
<desc>
<p>The same as
- <seealso marker="#trace_pattern/3">erlang:trace_pattern(Event, MatchSpec, [])</seealso>,
+ <seealso marker="#trace_pattern/3">
+ <c>erlang:trace_pattern(Event, MatchSpec, [])</c></seealso>,
retained for backward compatibility.</p>
</desc>
</func>
<func>
<name name="trace_pattern" arity="3" clause_i="1"/>
- <fsummary>Sets trace pattern for message sending.</fsummary>
+ <fsummary>Set trace pattern for message sending.</fsummary>
<type name="trace_match_spec"/>
<desc>
<p>Sets trace pattern for <em>message sending</em>.
- Must be combined with
- <seealso marker="#trace/3">erlang:trace/3</seealso>
+ Must be combined with
+ <seealso marker="#trace/3"><c>erlang:trace/3</c></seealso>
to set the <c>send</c> trace flag for one or more processes.
- By default all messages, sent from <c>send</c> traced processes,
- are traced. Use <c>erlang:trace_pattern/3</c> to limit
- traced send events based on the message content, the sender
- and/or the receiver.</p>
+ By default all messages sent from <c>send</c> traced processes
+ are traced. To limit
+ traced send events based on the message content, the sender
+ and/or the receiver, use <c>erlang:trace_pattern/3</c>.</p>
<p>Argument <c><anno>MatchSpec</anno></c> can take the
following forms:</p>
<taglist>
<tag><c><anno>MatchSpecList</anno></c></tag>
<item>
<p>A list of match specifications. The matching is done
- on the list <c>[Receiver, Msg]</c>. <c>Receiver</c>
- is the process or port identity of the receiver and
- <c>Msg</c> is the message term. The pid of the sending
- process can be accessed with the guard function
- <c>self/0</c>. An empty list is the same as <c>true</c>.
- See the users guide section
- <seealso marker="erts:match_spec">Match Specifications in Erlang</seealso>
- for more information.</p>
+ on the list <c>[Receiver, Msg]</c>. <c>Receiver</c>
+ is the process or port identity of the receiver and
+ <c>Msg</c> is the message term. The pid of the sending
+ process can be accessed with the guard function
+ <c>self/0</c>. An empty list is the same as <c>true</c>.
+ For more information, see section
+ <seealso marker="erts:match_spec">
+ Match Specifications in Erlang</seealso> in the User's Guide.</p>
</item>
<tag><c>true</c></tag>
<item>
<p>Enables tracing for all sent messages (from <c>send</c>
- traced processes). Any match specification is
- removed. <em>This is the default</em>.</p>
+ traced processes). Any match specification is
+ removed. <em>This is the default</em>.</p>
</item>
<tag><c>false</c></tag>
<item>
<p>Disables tracing for all sent messages.
- Any match specification is removed.</p>
+ Any match specification is removed.</p>
</item>
</taglist>
- <p>Argument <c><anno>FlagList</anno></c> must be <c>[]</c>
- for send tracing.</p>
- <p>The return value is always <c>1</c>.</p>
- <p>Example; only trace messages to a specific process <c>Pid</c>:</p>
+ <p>Argument <c><anno>FlagList</anno></c> must be <c>[]</c>
+ for send tracing.</p>
+ <p>The return value is always <c>1</c>.</p>
+ <p>Examples:</p>
+ <p>Only trace messages to a specific process <c>Pid</c>:</p>
<pre>
> <input>erlang:trace_pattern(send, [{[Pid, '_'],[],[]}], []).</input>
1</pre>
@@ -9391,58 +9706,60 @@ timestamp() ->
<pre>
> <input>erlang:trace_pattern(send, [{['$1', '_'],[{'=/=',{node,'$1'},{node}}],[]}], []).</input>
1</pre>
- <note><p>A match specification for <c>send</c> trace can use
- all guard and body functions except <c>caller</c>.</p></note>
+ <note>
+ <p>A match specification for <c>send</c> trace can use
+ all guard and body functions except <c>caller</c>.</p>
+ </note>
</desc>
</func>
<func>
<name name="trace_pattern" arity="3" clause_i="2"/>
- <fsummary>Sets trace pattern for tracing of message receiving.</fsummary>
+ <fsummary>Set trace pattern for tracing of message receiving.</fsummary>
<type name="trace_match_spec"/>
<desc>
- <p></p>
<p>Sets trace pattern for <em>message receiving</em>.
- Must be combined with
- <seealso marker="#trace/3">erlang:trace/3</seealso>
+ Must be combined with
+ <seealso marker="#trace/3"><c>erlang:trace/3</c></seealso>
to set the <c>'receive'</c> trace flag for one or more processes.
- By default all messages, received by <c>'receive'</c> traced processes,
- are traced. Use <c>erlang:trace_pattern/3</c> to limit
- traced receive events based on the message content, the sender
- and/or the receiver.</p>
+ By default all messages received by <c>'receive'</c> traced
+ processes are traced. To limit
+ traced receive events based on the message content, the sender
+ and/or the receiver, use <c>erlang:trace_pattern/3</c>.</p>
<p>Argument <c><anno>MatchSpec</anno></c> can take the
following forms:</p>
<taglist>
<tag><c><anno>MatchSpecList</anno></c></tag>
<item>
<p>A list of match specifications. The matching is done
- on the list <c>[Node, Sender, Msg]</c>. <c>Node</c>
- is the node name of the sender. <c>Sender</c> is the
- process or port identity of the sender, or the atom
- <c>undefined</c> if the sender is not known (which may
- be the case for remote senders). <c>Msg</c> is the
- message term. The pid of the receiving process can be
- accessed with the guard function <c>self/0</c>. An empty
- list is the same as <c>true</c>. See the users guide section
- <seealso marker="erts:match_spec">Match Specifications in Erlang</seealso>
- for more information.</p>
+ on the list <c>[Node, Sender, Msg]</c>. <c>Node</c>
+ is the node name of the sender. <c>Sender</c> is the
+ process or port identity of the sender, or the atom
+ <c>undefined</c> if the sender is not known (which can
+ be the case for remote senders). <c>Msg</c> is the
+ message term. The pid of the receiving process can be
+ accessed with the guard function <c>self/0</c>. An empty
+ list is the same as <c>true</c>. For more information, see
+ section <seealso marker="erts:match_spec">
+ Match Specifications in Erlang</seealso> in the User's Guide.</p>
</item>
<tag><c>true</c></tag>
<item>
<p>Enables tracing for all received messages (to <c>'receive'</c>
- traced processes). Any match specification is
- removed. <em>This is the default</em>.</p>
+ traced processes). Any match specification is
+ removed. <em>This is the default</em>.</p>
</item>
<tag><c>false</c></tag>
<item>
<p>Disables tracing for all received messages.
- Any match specification is removed.</p>
+ Any match specification is removed.</p>
</item>
</taglist>
- <p>Argument <c><anno>FlagList</anno></c> must be <c>[]</c>
- for receive tracing.</p>
- <p>The return value is always <c>1</c>.</p>
- <p>Example; only trace messages from a specific process <c>Pid</c>:</p>
+ <p>Argument <c><anno>FlagList</anno></c> must be <c>[]</c>
+ for receive tracing.</p>
+ <p>The return value is always <c>1</c>.</p>
+ <p>Examples:</p>
+ <p>Only trace messages from a specific process <c>Pid</c>:</p>
<pre>
> <input>erlang:trace_pattern('receive', [{['_',Pid, '_'],[],[]}], []).</input>
1</pre>
@@ -9454,33 +9771,36 @@ timestamp() ->
<pre>
> <input>erlang:trace_pattern('receive', [{['$1', '_', '_'],[{'=/=','$1',{node}}],[]}], []).</input>
1</pre>
- <note><p>A match specification for <c>'receive'</c> trace can
- use all guard and body functions except <c>caller,
- is_seq_trace, get_seq_token, set_seq_token, enable_trace,
- disable_trace, trace, silent</c> and <c>process_dump</c>.</p></note>
+ <note>
+ <p>A match specification for <c>'receive'</c> trace can
+ use all guard and body functions except <c>caller</c>,
+ <c>is_seq_trace</c>, <c>get_seq_token</c>, <c>set_seq_token</c>,
+ <c>enable_trace</c>, <c>disable_trace</c>, <c>trace</c>,
+ <c>silent</c>, and <c>process_dump</c>.</p>
+ </note>
</desc>
</func>
<func>
<name name="trace_pattern" arity="3" clause_i="3"/>
- <fsummary>Sets trace patterns for tracing of function calls.</fsummary>
+ <fsummary>Set trace patterns for tracing of function calls.</fsummary>
<type name="trace_pattern_mfa"/>
<type name="trace_match_spec"/>
<type name="trace_pattern_flag"/>
<desc>
<p>Enables or disables <em>call tracing</em> for one or more functions.
- Must be combined with
- <seealso marker="#trace/3">erlang:trace/3</seealso>
+ Must be combined with
+ <seealso marker="#trace/3"><c>erlang:trace/3</c></seealso>
to set the <c>call</c> trace flag
- for one or more processes.</p>
+ for one or more processes.</p>
<p>Conceptually, call tracing works as follows. Inside
- the Erlang Virtual Machine, a set of processes and
+ the Erlang virtual machine, a set of processes and
a set of functions are to be traced. If a traced process
calls a traced function, the trace action is taken.
Otherwise, nothing happens.</p>
<p>To add or remove one or more processes to the set of traced
processes, use
- <seealso marker="#trace/3">erlang:trace/3</seealso>.</p>
+ <seealso marker="#trace/3"><c>erlang:trace/3</c></seealso>.</p>
<p>To add or remove functions to the set of traced
functions, use <c>erlang:trace_pattern/3</c>.</p>
<p>The BIF <c>erlang:trace_pattern/3</c> can also add match
@@ -9492,10 +9812,10 @@ timestamp() ->
fails, the action is not executed.</p>
<p>Argument <c><anno>MFA</anno></c> is to be a tuple, such as
<c>{Module, Function, Arity}</c>, or the atom <c>on_load</c>
- (described in the following). It can be the module, function,
+ (described below). It can be the module, function,
and arity for a function (or a BIF in any module).
- The atom <c>'_'</c> can be used as a wild card in any of the
- following ways:</p>
+ The atom <c>'_'</c> can be used as a wildcard in any of the
+ following ways:</p>
<taglist>
<tag><c>{Module,Function,'_'}</c></tag>
<item>
@@ -9512,7 +9832,7 @@ timestamp() ->
</item>
</taglist>
<p>Other combinations, such as <c>{Module,'_',Arity}</c>, are
- not allowed. Local functions match wild cards only if
+ not allowed. Local functions match wildcards only if
option <c>local</c> is in <c><anno>FlagList</anno></c>.</p>
<p>If argument <c><anno>MFA</anno></c> is the atom <c>on_load</c>,
the match specification and flag list are used on all
@@ -9528,13 +9848,14 @@ timestamp() ->
<tag><c>true</c></tag>
<item>
<p>Enables tracing for the matching functions.
- Any match specification is removed.</p>
+ Any match specification is removed.</p>
</item>
<tag><c><anno>MatchSpecList</anno></c></tag>
<item>
<p>A list of match specifications. An empty list is
equivalent to <c>true</c>. For a description of match
- specifications, see the User's Guide.</p>
+ specifications, see section <seealso marker="erts:match_spec">
+ Match Specifications in Erlang</seealso> in the User's Guide.</p>
</item>
<tag><c>restart</c></tag>
<item>
@@ -9545,7 +9866,7 @@ timestamp() ->
</item>
<tag><c>pause</c></tag>
<item>
- <p>For the <c><anno>FlagList</anno></c> options
+ <p>For the <c><anno>FlagList</anno></c> options
<c>call_count</c> and <c>call_time</c>: pauses
the existing counters. The behavior is undefined for
other <c><anno>FlagList</anno></c> options.</p>
@@ -9570,7 +9891,8 @@ timestamp() ->
the process, a <c>return_to</c> message is also sent
when this function returns to its caller.</p>
</item>
- <tag><c>meta | {meta, <anno>Pid</anno>} | {meta, <anno>TracerModule</anno>, <anno>TracerState</anno>}</c>
+ <tag><c>meta | {meta, <anno>Pid</anno>} |
+ {meta, <anno>TracerModule</anno>, <anno>TracerState</anno>}</c>
</tag>
<item>
<p>Turns on or off meta-tracing for all types of function
@@ -9578,7 +9900,7 @@ timestamp() ->
the specified functions are called. If no tracer is specified,
<c>self()</c> is used as a default tracer process.</p>
<p>Meta-tracing traces all processes and does not care
- about the process trace flags set by <c>trace/3</c>,
+ about the process trace flags set by <c>erlang:trace/3</c>,
the trace flags are instead fixed to
<c>[call, timestamp]</c>.</p>
<p>The match specification function <c>{return_trace}</c>
@@ -9599,7 +9921,8 @@ timestamp() ->
Paused and running counters can be restarted from zero with
<c><anno>MatchSpec</anno> == restart</c>.</p>
<p>To read the counter value, use
- <seealso marker="#trace_info/2">erlang:trace_info/2</seealso>.</p>
+ <seealso marker="#trace_info/2">
+ <c>erlang:trace_info/2</c></seealso>.</p>
</item>
<tag><c>call_time</c></tag>
<item>
@@ -9607,17 +9930,18 @@ timestamp() ->
(<c><anno>MatchSpec</anno> == false</c>) call time
tracing for all
types of function calls. For every function, a counter is
- incremented when the function is called.
+ incremented when the function is called.
Time spent in the function is accumulated in
two other counters, seconds and microseconds.
- The counters are stored for each call traced process.</p>
+ The counters are stored for each call traced process.</p>
<p>If call time tracing is started while already running,
- the count and time is restarted from zero. To pause
+ the count and time restart from zero. To pause
running counters, use <c><anno>MatchSpec</anno> == pause</c>.
Paused and running counters can be restarted from zero with
<c><anno>MatchSpec</anno> == restart</c>.</p>
<p>To read the counter value, use
- <seealso marker="#trace_info/2">erlang:trace_info/2</seealso>.</p>
+ <seealso marker="#trace_info/2">
+ <c>erlang:trace_info/2</c></seealso>.</p>
</item>
</taglist>
<p>The options <c>global</c> and <c>local</c> are mutually
@@ -9632,12 +9956,12 @@ timestamp() ->
<p>When disabling trace, the option must match the type of trace
set on the function. That is, local tracing must be
disabled with option <c>local</c> and global tracing with
- option <c>global</c> (or no option), and so forth.</p>
+ option <c>global</c> (or no option), and so on.</p>
<p>Part of a match specification list cannot be changed directly.
If a function has a match specification, it can be replaced
with a new one. To change an existing match specification,
use the BIF
- <seealso marker="#trace_info/2">erlang:trace_info/2</seealso>
+ <seealso marker="#trace_info/2"><c>erlang:trace_info/2</c></seealso>
to retrieve the existing match specification.</p>
<p>Returns the number of functions matching
argument <c><anno>MFA</anno></c>. This is zero if none matched.</p>
@@ -9646,7 +9970,7 @@ timestamp() ->
<func>
<name name="trunc" arity="1"/>
- <fsummary>Returns an integer by truncating a number</fsummary>
+ <fsummary>Return an integer by truncating a number.</fsummary>
<desc>
<p>Returns an integer by truncating <c><anno>Number</anno></c>,
for example:</p>
@@ -9659,7 +9983,7 @@ timestamp() ->
<func>
<name name="tuple_size" arity="1"/>
- <fsummary>Returns the size of a tuple.</fsummary>
+ <fsummary>Return the size of a tuple.</fsummary>
<desc>
<p>Returns an integer that is the number of elements in
<c><anno>Tuple</anno></c>, for example:</p>
@@ -9672,11 +9996,11 @@ timestamp() ->
<func>
<name name="tuple_to_list" arity="1"/>
- <fsummary>Converts a tuple to a list.</fsummary>
+ <fsummary>Convert a tuple to a list.</fsummary>
<desc>
<p>Returns a list corresponding to <c><anno>Tuple</anno></c>.
- <c><anno>Tuple</anno></c> can contain any Erlang terms.</p>
- <p>Example:</p>
+ <c><anno>Tuple</anno></c> can contain any Erlang terms.
+ Example:</p>
<pre>
> <input>tuple_to_list({share, {'Ericsson_B', 163}}).</input>
[share,{'Ericsson_B',163}]</pre>
@@ -9684,16 +10008,111 @@ timestamp() ->
</func>
<func>
+ <name name="unique_integer" arity="0"/>
+ <fsummary>Get a unique integer value.</fsummary>
+ <desc>
+ <p>Generates and returns an
+ <seealso marker="doc/efficiency_guide:advanced#unique_integers">
+ integer unique on current runtime system instance</seealso>.
+ The same as calling
+ <seealso marker="#unique_integer/1">
+ <c>erlang:unique_integer([])</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="unique_integer" arity="1"/>
+ <fsummary>Get a unique integer value.</fsummary>
+ <desc>
+ <p>Generates and returns an
+ <seealso marker="doc/efficiency_guide:advanced#unique_integers">
+ integer unique on current runtime system
+ instance</seealso>. The integer is unique in the
+ sense that this BIF, using the same set of
+ modifiers, does not return the same integer more
+ than once on the current runtime system instance.
+ Each integer value can of course be constructed
+ by other means.</p>
+ <p>By default, when <c>[]</c> is passed as
+ <c><anno>ModifierList</anno></c>, both negative and
+ positive integers can be returned. This
+ to use the range of integers that do
+ not need heap memory allocation as much as possible.
+ By default the returned integers are also only
+ guaranteed to be unique, that is, any returned integer
+ can be smaller or larger than previously
+ returned integers.</p>
+ <p><c><anno>Modifier</anno></c>s:</p>
+ <taglist>
+ <tag>positive</tag>
+ <item>
+ <p>Returns only positive integers.</p>
+ <p>Notice that by passing the <c>positive</c> modifier
+ you will get heap allocated integers (bignums) quicker.</p>
+ </item>
+ <tag>monotonic</tag>
+ <item>
+ <p>Returns <seealso
+ marker="time_correction#Strictly_Monotonically_Increasing">
+ strictly monotonically increasing</seealso> integers
+ corresponding to creation time. That is, the integer
+ returned is always larger than previously
+ returned integers on the current runtime system
+ instance.</p>
+ <p>These values can be used to determine order between events
+ on the runtime system instance. That is, if both
+ <c>X = erlang:unique_integer([monotonic])</c> and
+ <c>Y = erlang:unique_integer([monotonic])</c> are
+ executed by different processes (or the same
+ process) on the same runtime system instance and
+ <c>X &lt; Y</c>, we know that <c>X</c> was created
+ before <c>Y</c>.</p>
+ <warning>
+ <p>Strictly monotonically increasing values
+ are inherently quite expensive to generate and scales
+ poorly. This is because the values need to be synchronized
+ between CPU cores. That is, do not pass the <c>monotonic</c>
+ modifier unless you really need strictly monotonically
+ increasing values.</p>
+ </warning>
+ </item>
+ </taglist>
+ <p>All valid <c><anno>Modifier</anno></c>s
+ can be combined. Repeated (valid)
+ <c><anno>Modifier</anno></c>s in the <c>ModifierList</c>
+ are ignored.</p>
+ <note>
+ <p>The set of integers returned by
+ <c>erlang:unique_integer/1</c> using different sets of
+ <c><anno>Modifier</anno></c>s <em>will overlap</em>.
+ For example, by calling <c>unique_integer([monotonic])</c>,
+ and <c>unique_integer([positive, monotonic])</c>
+ repeatedly, you will eventually see some integers that are
+ returned by both calls.</p>
+ </note>
+ <p>Failures:</p>
+ <taglist>
+ <tag><c>badarg</c></tag>
+ <item>if <c><anno>ModifierList</anno></c> is not a
+ proper list.</item>
+ <tag><c>badarg</c></tag>
+ <item>if <c><anno>Modifier</anno></c> is not a
+ valid modifier.</item>
+ </taglist>
+ </desc>
+ </func>
+
+ <func>
<name name="universaltime" arity="0"/>
- <fsummary>Current date and time according to Universal Time Coordinated (UTC).</fsummary>
+ <fsummary>Current date and time according to Universal Time Coordinated
+ (UTC).</fsummary>
<desc>
<p>Returns the current date and time according to Universal
Time Coordinated (UTC) in the form
<c>{{Year, Month, Day}, {Hour, Minute, Second}}</c> if
supported by the underlying OS.
Otherwise <c>erlang:universaltime()</c> is equivalent to
- <c>erlang:localtime()</c>.</p>
- <p>Example:</p>
+ <c>erlang:localtime()</c>. Example:</p>
<pre>
> <input>erlang:universaltime().</input>
{{1996,11,6},{14,18,43}}</pre>
@@ -9702,15 +10121,15 @@ timestamp() ->
<func>
<name name="universaltime_to_localtime" arity="1"/>
- <fsummary>Converts from Universal Time Coordinated (UTC) to local date and time.</fsummary>
+ <fsummary>Convert from Universal Time Coordinated (UTC) to local date
+ and time.</fsummary>
<desc>
<p>Converts Universal Time Coordinated (UTC) date and time to
local date and time in the form
<c>{{Year, Month, Day}, {Hour, Minute, Second}}</c> if
supported by the underlying OS.
Otherwise no conversion is done, and
- <c><anno>Universaltime</anno></c> is returned.</p>
- <p>Example:</p>
+ <c><anno>Universaltime</anno></c> is returned. Example:</p>
<pre>
> <input>erlang:universaltime_to_localtime({{1996,11,6},{14,18,43}}).</input>
{{1996,11,7},{15,18,43}}</pre>
@@ -9720,102 +10139,8 @@ timestamp() ->
</func>
<func>
- <name name="unique_integer" arity="0"/>
- <fsummary>Get a unique integer value</fsummary>
- <desc>
- <p>Generates and returns an
- <seealso marker="doc/efficiency_guide:advanced#unique_integers">integer
- unique on current runtime system instance</seealso>. The same as calling
- <seealso marker="#unique_integer/1"><c>erlang:unique_integer([])</c></seealso>.</p>
- </desc>
- </func>
- <func>
- <name name="unique_integer" arity="1"/>
- <fsummary>Get a unique integer value</fsummary>
- <desc>
- <p>Generates and returns an
- <seealso marker="doc/efficiency_guide:advanced#unique_integers">integer
- unique on current runtime system
- instance</seealso>. The integer is unique in the
- sense that this BIF, using the same set of
- modifiers, will not return the same integer more
- than once on the current runtime system instance.
- Each integer value can of course be constructed
- by other means.</p>
-
- <p>By default, when <c>[]</c> is passed as
- <c><anno>ModifierList</anno></c>, both negative and
- positive integers can be returned. This in order
- to utilize the range of integers that do
- not need heap memory allocation as much as possible.
- By default the returned integers are also only
- guaranteed to be unique, that is, any returned integer
- can be smaller or larger than previously
- returned integers.</p>
-
- <p>Valid <c><anno>Modifier</anno></c>s:</p>
- <taglist>
-
- <tag>positive</tag>
- <item><p>Return only positive integers.</p>
- <p>Note that by passing the <c>positive</c> modifier
- you will get heap allocated integers (bignums)
- quicker.</p>
- </item>
-
- <tag>monotonic</tag>
- <item><p>Return
- <seealso marker="time_correction#Strictly_Monotonically_Increasing">strictly
- monotonically increasing</seealso> integers
- corresponding to creation time. That is, the integer
- returned will always be larger than previously
- returned integers on the current runtime system
- instance.</p>
- <p>These values can be used to determine order between events
- on the runtime system instance. That is, if both
- <c>X = erlang:unique_integer([monotonic])</c> and
- <c>Y = erlang:unique_integer([monotonic])</c> are
- executed by different processes (or the same
- process) on the same runtime system instance and
- <c>X &lt; Y</c> we know that <c>X</c> was created
- before <c>Y</c>.</p>
- <warning><p>Strictly monotonically increasing values
- are inherently quite expensive to generate and scales
- poorly. This is because the values need to be
- synchronized between cpu cores. That is, do not pass the <c>monotonic</c>
- modifier unless you really need strictly monotonically
- increasing values.</p></warning>
- </item>
-
- </taglist>
-
- <p>All valid <c><anno>Modifier</anno></c>s
- can be combined. Repeated (valid)
- <c><anno>Modifier</anno></c>s in the <c>ModifierList</c>
- are ignored.</p>
-
- <note><p>Note that the set of integers returned by
- <c>unique_integer/1</c> using different sets of
- <c><anno>Modifier</anno></c>s <em>will overlap</em>.
- For example, by calling <c>unique_integer([monotonic])</c>,
- and <c>unique_integer([positive, monotonic])</c>
- repeatedly, you will eventually see some integers being
- returned by both calls.</p></note>
-
- <p>Failures:</p>
- <taglist>
- <tag><c>badarg</c></tag>
- <item>if <c><anno>ModifierList</anno></c> is not a
- proper list.</item>
- <tag><c>badarg</c></tag>
- <item>if <c><anno>Modifier</anno></c> is not a
- valid modifier.</item>
- </taglist>
- </desc>
- </func>
- <func>
<name name="unlink" arity="1"/>
- <fsummary>Removes a link to another process or port.</fsummary>
+ <fsummary>Remove a link to another process or port.</fsummary>
<desc>
<p>Removes the link, if there is one, between the calling
process and the process or port referred to by
@@ -9830,8 +10155,8 @@ timestamp() ->
in the future (unless
the link is setup again). If the caller is trapping exits, an
<c>{'EXIT', <anno>Id</anno>, _}</c> message from the link
- can have been placed in the caller's message queue before
- the call.</p>
+ can have been placed in the caller's message queue before
+ the call.</p>
<p>Notice that the <c>{'EXIT', <anno>Id</anno>, _}</c>
message can be the
result of the link, but can also be the result of <c>Id</c>
@@ -9839,16 +10164,16 @@ timestamp() ->
appropriate to clean up the message queue when trapping exits
after the call to <c>unlink(<anno>Id</anno>)</c>, as follows:</p>
<code type="none">
- unlink(Id),
- receive
- {'EXIT', Id, _} ->
- true
- after 0 ->
- true
- end</code>
+unlink(Id),
+receive
+ {'EXIT', Id, _} ->
+ true
+after 0 ->
+ true
+end</code>
<note>
- <p>Prior to OTP release R11B (ERTS version 5.5) <c>unlink/1</c>
- behaved completely asynchronously, i.e., the link was active
+ <p>Before Erlang/OTP R11B (ERTS 5.5) <c>unlink/1</c>
+ behaved completely asynchronously, that is, the link was active
until the "unlink signal" reached the linked entity. This
had an undesirable effect, as you could never know when
you were guaranteed <em>not</em> to be effected by the link.</p>
@@ -9861,7 +10186,7 @@ timestamp() ->
<func>
<name name="unregister" arity="1"/>
- <fsummary>Removes the registered name for a process (or port).</fsummary>
+ <fsummary>Remove the registered name for a process (or port).</fsummary>
<desc>
<p>Removes the registered name <c><anno>RegName</anno></c>
associated with a
@@ -9877,12 +10202,12 @@ true</pre>
<func>
<name name="whereis" arity="1"/>
- <fsummary>Gets the pid (or port) with a given registered name.</fsummary>
+ <fsummary>Get the pid (or port) with a specified registered name.
+ </fsummary>
<desc>
<p>Returns the process identifier or port identifier with
the registered name <c>RegName</c>. Returns <c>undefined</c>
- if the name is not registered.</p>
- <p>Example:</p>
+ if the name is not registered. Example:</p>
<pre>
> <input>whereis(db).</input>
&lt;0.43.0></pre>
@@ -9891,17 +10216,19 @@ true</pre>
<func>
<name name="yield" arity="0"/>
- <fsummary>Lets other processes get a chance to execute.</fsummary>
+ <fsummary>Let other processes get a chance to execute.</fsummary>
<desc>
<p>Voluntarily lets other processes (if any) get a chance to
- execute. Using <c>erlang:yield()</c> is similar to
+ execute. Using this function is similar to
<c>receive after 1 -> ok end</c>, except that <c>yield()</c>
is faster.</p>
- <warning><p>There is seldom or never any need to use this BIF,
- especially in the SMP emulator, as other processes have a
- chance to run in another scheduler thread anyway.
- Using this BIF without a thorough grasp of how the scheduler
- works can cause performance degradation.</p></warning>
+ <warning>
+ <p>There is seldom or never any need to use this BIF,
+ especially in the SMP emulator, as other processes have a
+ chance to run in another scheduler thread anyway.
+ Using this BIF without a thorough grasp of how the scheduler
+ works can cause performance degradation.</p>
+ </warning>
</desc>
</func>
</funcs>
diff --git a/erts/doc/src/erlc.xml b/erts/doc/src/erlc.xml
index a64927fec2..7355be488b 100644
--- a/erts/doc/src/erlc.xml
+++ b/erts/doc/src/erlc.xml
@@ -28,7 +28,7 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-03-24</date>
+ <date>1997-03-24</date>
<rev>A</rev>
<file>erlc.xml</file>
</header>
@@ -38,167 +38,162 @@
<p>The <c><![CDATA[erlc]]></c> program provides a common way to run
all compilers in the Erlang system.
Depending on the extension of each input file, <c><![CDATA[erlc]]></c>
- will invoke the appropriate compiler.
- Regardless of which compiler is used, the same flags are used to provide parameters such as include paths and output directory.</p>
- <p>The current working directory, <c>"."</c>, will not be included
- in the code path when running the compiler (to avoid loading
- Beam files from the current working directory that could potentially
- be in conflict with the compiler or Erlang/OTP system used by the
- compiler).</p>
+ invokes the appropriate compiler.
+ Regardless of which compiler is used, the same flags are used to provide
+ parameters, such as include paths and output directory.</p>
+ <p>The current working directory, <c>"."</c>, is not included
+ in the code path when running the compiler. This to avoid loading
+ Beam files from the current working directory that could potentially
+ be in conflict with the compiler or the Erlang/OTP system used by the
+ compiler.</p>
</description>
+
<funcs>
<func>
<name>erlc flags file1.ext file2.ext...</name>
- <fsummary>Compile files</fsummary>
+ <fsummary>Compile files.</fsummary>
<desc>
- <p><c><![CDATA[Erlc]]></c> compiles one or more files.
- The files must include the extension, for example <c><![CDATA[.erl]]></c>
- for Erlang source code, or <c><![CDATA[.yrl]]></c> for Yecc source code.
- <c><![CDATA[Erlc]]></c> uses the extension to invoke the correct compiler.</p>
+ <p>Compiles one or more files. The files must include the extension,
+ for example, <c><![CDATA[.erl]]></c> for Erlang source code, or
+ <c><![CDATA[.yrl]]></c> for Yecc source code.
+ <c><![CDATA[Erlc]]></c> uses the extension to invoke the correct
+ compiler.</p>
</desc>
</func>
</funcs>
<section>
<title>Generally Useful Flags</title>
- <p>The following flags are supported:
- </p>
+ <p>The following flags are supported:</p>
<taglist>
- <tag>-I <em>directory</em></tag>
+ <tag><c>-I &lt;Directory&gt;</c></tag>
<item>
<p>Instructs the compiler to search for include files in
- the specified directory. When encountering an
- <c><![CDATA[-include]]></c> or <c><![CDATA[-include_lib]]></c> directive, the
- compiler searches for header files in the following
+ the <c>Directory</c>. When encountering an
+ <c><![CDATA[-include]]></c> or <c><![CDATA[-include_lib]]></c>
+ directive, the compiler searches for header files in the following
directories:</p>
- <list type="ordered">
+ <list type="bulleted">
<item>
<p><c><![CDATA["."]]></c>, the current working directory of the
- file server;</p>
+ file server</p>
</item>
<item>
- <p>the base name of the compiled file;</p>
+ <p>The base name of the compiled file</p>
</item>
<item>
- <p>the directories specified using the <c><![CDATA[-I]]></c> option.
- The directory specified last is searched first.</p>
+ <p>The directories specified using option <c><![CDATA[-I]]></c>;
+ the directory specified last is searched first</p>
</item>
</list>
</item>
- <tag>-o <em>directory</em></tag>
+ <tag><c>-o &lt;Directory&gt;</c></tag>
<item>
- <p>The directory where the compiler should place the output files.
- If not specified, output files will be placed in the current working
- directory.</p>
+ <p>The directory where the compiler is to place the output files.
+ Defaults to the current working directory.</p>
</item>
- <tag>-D<em>name</em></tag>
+ <tag><c>-D&lt;Name&gt;</c></tag>
<item>
<p>Defines a macro.</p>
</item>
- <tag>-D<em>name</em>=<em>value</em></tag>
+ <tag><c>-D&lt;Name&gt;=&lt;Value&gt;</c></tag>
<item>
- <p>Defines a macro with the given value.
+ <p>Defines a macro with the specified value.
The value can be any Erlang term.
Depending on the platform, the value may need to be
quoted if the shell itself interprets certain characters.
- On Unix, terms which contain tuples and list
- must be quoted. Terms which contain spaces
+ On Unix, terms containing tuples and lists
+ must be quoted. Terms containing spaces
must be quoted on all platforms.</p>
</item>
- <tag>-W<em>error</em></tag>
+ <tag><c>-W&lt;Error&gt;</c></tag>
<item>
<p>Makes all warnings into errors.</p>
</item>
- <tag>-W<em>number</em></tag>
+ <tag><c>-W&lt;Number&gt;</c></tag>
<item>
- <p>Sets warning level to <em>number</em>. Default is <c><![CDATA[1]]></c>.
- Use <c><![CDATA[-W0]]></c> to turn off warnings.</p>
+ <p>Sets warning level to <c>Number</c>. Defaults to
+ <c><![CDATA[1]]></c>. To turn off warnings,
+ use <c><![CDATA[-W0]]></c>.</p>
</item>
- <tag>-W</tag>
+ <tag><c>-W</c></tag>
<item>
<p>Same as <c><![CDATA[-W1]]></c>. Default.</p>
</item>
- <tag>-v</tag>
+ <tag><c>-v</c></tag>
<item>
<p>Enables verbose output.</p>
</item>
- <tag>-b <em>output-type</em></tag>
+ <tag><c>-b &lt;Output_type&gt;</c></tag>
<item>
<p>Specifies the type of output file.
- Generally, <em>output-type</em> is the same as the file extension
- of the output file but without the period.
- This option will be ignored by compilers that have a
+ <c>Output_type</c> is the same as the file extension
+ of the output file, but without the period.
+ This option is ignored by compilers that have
a single output format.</p>
</item>
- <tag>-smp</tag>
+ <tag><c>-smp</c></tag>
<item>
- <p>Compile using the SMP emulator. This is mainly useful
- for compiling native code, which needs to be compiled with the same
- run-time system that it should be run on.</p>
+ <p>Compiles using the SMP emulator. This is mainly useful
+ for compiling native code, which must be compiled with the same
+ runtime system that it is to be run on.</p>
</item>
- <tag>-M</tag>
+ <tag><c>-M</c></tag>
<item>
- <p>Produces a Makefile rule to track headers dependencies. The
- rule is sent to stdout. No object file is produced.
- </p>
+ <p>Produces a Makefile rule to track header dependencies. The
+ rule is sent to <c>stdout</c>. No object file is produced.</p>
</item>
- <tag>-MF <em>Makefile</em></tag>
+ <tag><c>-MF &lt;Makefile&gt;</c></tag>
<item>
- <p>Like the <c><![CDATA[-M]]></c> option above, except that the
- Makefile is written to <em>Makefile</em>. No object
- file is produced.
- </p>
+ <p>As option <c><![CDATA[-M]]></c>, except that the
+ Makefile is written to <c>Makefile</c>. No object
+ file is produced.</p>
</item>
- <tag>-MD</tag>
+ <tag><c>-MD</c></tag>
<item>
- <p>Same as <c><![CDATA[-M -MF <File>.Pbeam]]></c>.
- </p>
+ <p>Same as <c><![CDATA[-M -MF <File>.Pbeam]]></c>.</p>
</item>
- <tag>-MT <em>Target</em></tag>
+ <tag><c>-MT &lt;Target&gt;</c></tag>
<item>
- <p>In conjunction with <c><![CDATA[-M]]></c> or
- <c><![CDATA[-MF]]></c>, change the name of the rule emitted
- to <em>Target</em>.
- </p>
+ <p>In conjunction with option <c><![CDATA[-M]]></c> or
+ <c><![CDATA[-MF]]></c>, changes the name of the rule emitted
+ to <c>Target</c>.</p>
</item>
- <tag>-MQ <em>Target</em></tag>
+ <tag><c>-MQ &lt;Target&gt;</c></tag>
<item>
- <p>Like the <c><![CDATA[-MT]]></c> option above, except that
- characters special to make(1) are quoted.
- </p>
+ <p>As option <c><![CDATA[-MT]]></c>, except that characters special to
+ <c>make/1</c> are quoted.</p>
</item>
- <tag>-MP</tag>
+ <tag><c>-MP</c></tag>
<item>
- <p>In conjunction with <c><![CDATA[-M]]></c> or
- <c><![CDATA[-MF]]></c>, add a phony target for each dependency.
- </p>
+ <p>In conjunction with option <c><![CDATA[-M]]></c> or
+ <c><![CDATA[-MF]]></c>, adds a phony target for each dependency.</p>
</item>
- <tag>-MG</tag>
+ <tag><c>-MG</c></tag>
<item>
- <p>In conjunction with <c><![CDATA[-M]]></c> or
- <c><![CDATA[-MF]]></c>, consider missing headers as generated
- files and add them to the dependencies.
- </p>
+ <p>In conjunction with option <c><![CDATA[-M]]></c> or
+ <c><![CDATA[-MF]]></c>, considers missing headers as generated
+ files and adds them to the dependencies.</p>
</item>
- <tag>--</tag>
+ <tag><c>--</c></tag>
<item>
<p>Signals that no more options will follow.
- The rest of the arguments will be treated as file names,
+ The rest of the arguments is treated as filenames,
even if they start with hyphens.</p>
</item>
- <tag>+<em>term</em></tag>
+ <tag><c>+&lt;Term&gt;</c></tag>
<item>
- <p>A flag starting with a plus ('<em>+</em>') rather than a hyphen
- will be converted to an Erlang term and passed unchanged to
+ <p>A flag starting with a plus (<c>+</c>) rather than a hyphen
+ is converted to an Erlang term and passed unchanged to
the compiler.
- For instance, the <c><![CDATA[export_all]]></c> option for the Erlang
+ For example, option <c><![CDATA[export_all]]></c> for the Erlang
compiler can be specified as follows:</p>
<pre>
erlc +export_all file.erl</pre>
<p>Depending on the platform, the value may need to be
quoted if the shell itself interprets certain characters.
- On Unix, terms which contain tuples and list
- must be quoted. Terms which contain spaces
+ On Unix, terms containing tuples and lists
+ must be quoted. Terms containing spaces
must be quoted on all platforms.</p>
</item>
</taglist>
@@ -206,19 +201,19 @@ erlc +export_all file.erl</pre>
<section>
<title>Special Flags</title>
- <p>The flags in this section are useful in special situations
- such as re-building the OTP system.</p>
+ <p>The following flags are useful in special situations,
+ such as rebuilding the OTP system:</p>
<taglist>
- <tag>-pa <em>directory</em></tag>
+ <tag><c>-pa &lt;Directory&gt;</c></tag>
<item>
- <p>Appends <em>directory</em> to the front of the code path in
+ <p>Appends <c>Directory</c> to the front of the code path in
the invoked Erlang emulator.
This can be used to invoke another
compiler than the default one.</p>
</item>
- <tag>-pz <em>directory</em></tag>
+ <tag><c>-pz &lt;Directory&gt;</c></tag>
<item>
- <p>Appends <em>directory</em> to the code path in
+ <p>Appends <c>Directory</c> to the code path in
the invoked Erlang emulator.</p>
</item>
</taglist>
@@ -226,63 +221,70 @@ erlc +export_all file.erl</pre>
<section>
<title>Supported Compilers</title>
+ <p>The following compilers are supported:</p>
<taglist>
- <tag>.erl</tag>
+ <tag><c>.erl</c></tag>
<item>
<p>Erlang source code. It generates a <c><![CDATA[.beam]]></c> file.</p>
- <p>The options -P, -E, and -S are equivalent to +'P',
- +'E', and +'S', except that it is not necessary to include the single quotes to protect them
- from the shell.</p>
- <p>Supported options: -I, -o, -D, -v, -W, -b.</p>
+ <p>Options <c>-P</c>, <c>-E</c>, and <c>-S</c> are equivalent to
+ <c>+'P'</c>, <c>+'E'</c>, and <c>+'S'</c>, except that it is not
+ necessary to include the single quotes to protect them from the
+ shell.</p>
+ <p>Supported options: <c>-I</c>, <c>-o</c>, <c>-D</c>, <c>-v</c>,
+ <c>-W</c>, <c>-b</c>.</p>
</item>
- <tag>.S</tag>
+ <tag><c>.S</c></tag>
<item>
- <p>Erlang assembler source code. It generates a <c><![CDATA[.beam]]></c> file.</p>
- <p>Supported options: same as for .erl.</p>
+ <p>Erlang assembler source code. It generates a <c><![CDATA[.beam]]></c>
+ file.</p>
+ <p>Supported options: same as for <c>.erl</c>.</p>
</item>
- <tag>.core</tag>
+ <tag><c>.core</c></tag>
<item>
- <p>Erlang core source code. It generates a <c><![CDATA[.beam]]></c> file.</p>
- <p>Supported options: same as for .erl.</p>
+ <p>Erlang core source code. It generates a <c><![CDATA[.beam]]></c>
+ file.</p>
+ <p>Supported options: same as for <c>.erl</c>.</p>
</item>
- <tag>.yrl</tag>
+ <tag><c>.yrl</c></tag>
<item>
<p>Yecc source code. It generates an <c><![CDATA[.erl]]></c> file.</p>
- <p>Use the -I option with the name of a file to use that file
- as a customized prologue file (the <c><![CDATA[includefile]]></c> option).</p>
- <p>Supported options: -o, -v, -I, -W (see above).</p>
+ <p>Use option <c>-I</c> with the name of a file to use that file
+ as a customized prologue file (option
+ <c><![CDATA[includefile]]></c>).</p>
+ <p>Supported options: <c>-o</c>, <c>-v</c>, <c>-I</c>, <c>-W</c>.</p>
</item>
- <tag>.mib</tag>
+ <tag><c>.mib</c></tag>
<item>
<p>MIB for SNMP. It generates a <c><![CDATA[.bin]]></c> file.</p>
- <p>Supported options: -I, -o, -W.</p>
+ <p>Supported options: <c>-I</c>, <c>-o</c>, <c>-W</c>.</p>
</item>
- <tag>.bin</tag>
+ <tag><c>.bin</c></tag>
<item>
- <p>A compiled MIB for SNMP. It generates a <c><![CDATA[.hrl]]></c> file.</p>
- <p>Supported options: -o, -v.</p>
+ <p>A compiled MIB for SNMP. It generates a <c><![CDATA[.hrl]]></c>
+ file.</p>
+ <p>Supported options: <c>-o</c>, <c>-v</c>.</p>
</item>
- <tag>.rel</tag>
+ <tag><c>.rel</c></tag>
<item>
<p>Script file. It generates a boot file.</p>
- <p>Use the -I to name directories to be searched for application
- files (equivalent to the <c><![CDATA[path]]></c> in the option list for
- <c><![CDATA[systools:make_script/2]]></c>).</p>
- <p>Supported options: -o.</p>
+ <p>Use option <c>-I</c> to name directories to be searched for
+ application files (equivalent to the <c><![CDATA[path]]></c> in the
+ option list for <c><![CDATA[systools:make_script/2]]></c>).</p>
+ <p>Supported option: <c>-o</c>.</p>
</item>
- <tag>.asn1</tag>
+ <tag><c>.asn1</c></tag>
<item>
- <p>ASN1 file.</p>
- <p>Creates an <c><![CDATA[.erl]]></c>, <c><![CDATA[.hrl]]></c>, and <c><![CDATA[.asn1db]]></c> file from
- an <c><![CDATA[.asn1]]></c> file. Also compiles the <c><![CDATA[.erl]]></c> using the Erlang
- compiler unless the <c><![CDATA[+noobj]]></c> options is given.</p>
- <p>Supported options: -I, -o, -b, -W.</p>
+ <p>ASN1 file. It creates an <c><![CDATA[.erl]]></c>,
+ <c><![CDATA[.hrl]]></c>, and <c><![CDATA[.asn1db]]></c> file from
+ an <c><![CDATA[.asn1]]></c> file. Also compiles the
+ <c><![CDATA[.erl]]></c> using the Erlang compiler unless option
+ <c><![CDATA[+noobj]]></c> is specified.</p>
+ <p>Supported options: <c>-I</c>, <c>-o</c>, <c>-b</c>, <c>-W</c>.</p>
</item>
- <tag>.idl</tag>
+ <tag><c>.idl</c></tag>
<item>
- <p>IC file.</p>
- <p>Runs the IDL compiler.</p>
- <p>Supported options: -I, -o.</p>
+ <p>IC file. It runs the IDL compiler.</p>
+ <p>Supported options: <c>-I</c>, <c>-o</c>.</p>
</item>
</taglist>
</section>
@@ -290,20 +292,20 @@ erlc +export_all file.erl</pre>
<section>
<title>Environment Variables</title>
<taglist>
- <tag>ERLC_EMULATOR</tag>
- <item>The command for starting the emulator.
- Default is <em>erl</em> in the same directory as the <em>erlc</em> program
- itself, or if it doesn't exist, <em>erl</em> in any of the directories
- given in the <em>PATH</em> environment variable.</item>
+ <tag><c>ERLC_EMULATOR</c></tag>
+ <item>The command for starting the emulator. Defaults to <c>erl</c>
+ in the same directory as the <c>erlc</c> program itself,
+ or, if it does not exist, <c>erl</c> in any of the directories
+ specified in environment variable <c>PATH</c>.</item>
</taglist>
</section>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="erl">erl(1)</seealso>,
- <seealso marker="compiler:compile">compile(3)</seealso>,
- <seealso marker="parsetools:yecc">yecc(3)</seealso>,
- <seealso marker="snmp:snmp">snmp(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="erl"><c>erl(1)</c></seealso>,
+ <seealso marker="compiler:compile"><c>compile(3)</c></seealso>,
+ <seealso marker="parsetools:yecc"><c>yecc(3)</c></seealso>,
+ <seealso marker="snmp:snmp"><c>snmp(3)</c></seealso></p>
</section>
</comref>
diff --git a/erts/doc/src/erlsrv.xml b/erts/doc/src/erlsrv.xml
index fb00444aa4..6c08b25220 100644
--- a/erts/doc/src/erlsrv.xml
+++ b/erts/doc/src/erlsrv.xml
@@ -28,343 +28,447 @@
<docno></docno>
<approved></approved>
<checked></checked>
- <date>98-04-29</date>
+ <date>1998-04-29</date>
<rev></rev>
<file>erlsrv.xml</file>
</header>
<com>erlsrv</com>
- <comsummary>Run the Erlang emulator as a service on Windows NT&reg;</comsummary>
+ <comsummary>Run the Erlang emulator as a service on Windows</comsummary>
<description>
- <p>This utility is specific to Windows NT/2000/XP&reg; (and subsequent versions of Windows) It allows Erlang
+ <p>This utility is specific to Windows NT/2000/XP (and later
+ versions of Windows). It allows Erlang
emulators to run as services on the Windows system, allowing embedded
- systems to start without any user needing to log in. The
+ systems to start without any user needing to log on. The
emulator started in this way can be manipulated through the
- Windows&reg; services applet in a manner similar to other
- services.</p>
- <p>Note that erlsrv is not a general service utility for Windows, but designed for embedded Erlang systems.</p>
- <p>As well as being the actual service, erlsrv also provides a
- command line interface for registering, changing, starting and
- stopping services.</p>
- <p>To manipulate services, the logged in user should have
- Administrator privileges on the machine. The Erlang machine
+ Windows services applet in a manner similar to other services.</p>
+
+ <p>Notice that <c>erlsrv</c> is not a general service utility for Windows,
+ but designed for embedded Erlang systems.</p>
+
+ <p><c>erlsrv</c> also provides a command-line interface for registering,
+ changing, starting, and stopping services.</p>
+
+ <p>To manipulate services, the logged on user is to have
+ administrator privileges on the machine. The Erlang machine
itself is (default) run as the local administrator. This can be
- changed with the Services applet in Windows &reg;.</p>
+ changed with the Services applet in Windows.</p>
+
<p>The processes created by the service can, as opposed to normal
- services, be "killed" with the task manager. Killing a emulator
- that is started by a service will trigger the "OnFail" action
- specified for that service, which may be a reboot.</p>
- <p>The following parameters may be specified for each Erlang
- service:</p>
- <list type="bulleted">
+ services, be "killed" with the task manager. Killing an emulator
+ that is started by a service triggers the "OnFail" action
+ specified for that service, which can be a reboot.</p>
+
+ <p>The following parameters can be specified for each Erlang service:</p>
+
+ <taglist>
+ <tag><c><![CDATA[StopAction]]></c></tag>
<item>
- <p><c><![CDATA[StopAction]]></c>: This tells <c><![CDATA[erlsrv]]></c> how to stop
+ <p>Tells <c><![CDATA[erlsrv]]></c> how to stop
the Erlang emulator. Default is to kill it (Win32
TerminateProcess), but this action can specify any Erlang
shell command that will be executed in the emulator to make
it stop. The emulator is expected to stop within 30 seconds
after the command is issued in the shell. If the emulator is
- not stopped, it will report a running state to the service
+ not stopped, it reports a running state to the service
manager.</p>
</item>
+ <tag><c><![CDATA[OnFail]]></c></tag>
<item>
- <p><c><![CDATA[OnFail]]></c>: This can be either of <c><![CDATA[reboot]]></c>,
- <c><![CDATA[restart]]></c>, <c><![CDATA[restart_always]]></c> or <c><![CDATA[ignore]]></c> (the
- default). In case of <c><![CDATA[reboot]]></c>, the NT system is
- rebooted whenever the emulator stops (a more simple form of
- watchdog), this could be useful for less critical systems,
- otherwise use the heart functionality to accomplish
- this. The restart value makes the Erlang emulator be
- restarted (with whatever parameters are registered for the
- service at the occasion) when it stops. If the emulator
- stops again within 10 seconds, it is not restarted to avoid
- an infinite loop which could completely hang the NT
- system. <c><![CDATA[restart_always]]></c> is similar to restart, but
- does not try to detect cyclic restarts, it is expected that
- some other mechanism is present to avoid the problem. The
- default (ignore) just reports the service as stopped to the
- service manager whenever it fails, it has to be manually
- restarted.</p>
- <p>On a system where release handling is
- used, this should always be set to <c><![CDATA[ignore]]></c>. Use
- <c><![CDATA[heart]]></c> to restart the service on failure instead.</p>
+ <p>Can be one of the following:</p>
+ <taglist>
+ <tag><c><![CDATA[reboot]]></c></tag>
+ <item>
+ <p>The Windows system is rebooted whenever the emulator stops
+ (a more simple form of watchdog). This can be useful for
+ less critical systems, otherwise use the heart functionality
+ to accomplish this.</p>
+ </item>
+ <tag><c><![CDATA[restart]]></c></tag>
+ <item>
+ <p>Makes the Erlang emulator be
+ restarted (with whatever parameters are registered for the
+ service at the occasion) when it stops. If the emulator
+ stops again within 10 seconds, it is not restarted to avoid
+ an infinite loop, which could hang the Windows system.</p>
+ </item>
+ <tag><c><![CDATA[restart_always]]></c></tag>
+ <item>
+ <p>Similar to <c><![CDATA[restart]]></c>, but does
+ not try to detect cyclic restarts; it is expected that
+ some other mechanism is present to avoid the problem.</p>
+ </item>
+ <tag><c><![CDATA[ignore]]></c> (the default)</tag>
+ <item>
+ <p>Reports the service as stopped to the service manager
+ whenever it fails; it must be manually restarted.</p>
+ </item>
+ </taglist>
+ <p>On a system where release handling is used,
+ this is always to be set to <c><![CDATA[ignore]]></c>. Use
+ <c><![CDATA[heart]]></c> to restart the service on failure
+ instead.</p>
</item>
+ <tag><c><![CDATA[Machine]]></c></tag>
<item>
- <p><c><![CDATA[Machine]]></c>: The location of the Erlang
- emulator. The default is the <c><![CDATA[erl.exe]]></c> located in the
- same directory as erlsrv.exe. Do not specify <c><![CDATA[werl.exe]]></c>
- as this emulator, it will not work.</p>
- <p>If the system
- uses release handling, this should be set to a program
- similar to <c><![CDATA[start_erl.exe]]></c>.</p>
+ <p>The location of the Erlang emulator.
+ The default is the <c><![CDATA[erl.exe]]></c> located in the same
+ directory as <c>erlsrv.exe</c>. Do not specify
+ <c><![CDATA[werl.exe]]></c> as this emulator, it will not work.</p>
+ <p>If the system uses release handling, this is to be set to a
+ program similar to <c><![CDATA[start_erl.exe]]></c>.</p>
</item>
+ <tag><c><![CDATA[Env]]></c></tag>
<item>
- <p><c><![CDATA[Env]]></c>: Specifies an <em>additional</em> environment
+ <p>Specifies an <em>extra</em> environment
for the emulator. The environment variables specified
- here are added to the system wide environment block that is
+ here are added to the system-wide environment block that is
normally present when a service starts up. Variables present
- in both the system wide environment and in the service
+ in both the system-wide environment and in the service
environment specification will be set to the value specified
in the service.</p>
</item>
+ <tag><c><![CDATA[WorkDir]]></c></tag>
<item>
- <p><c><![CDATA[WorkDir]]></c>: The working directory for the Erlang
- emulator, has to be on a local drive (there are no network
- drives mounted when a service starts). Default working
- directory for services is <c><![CDATA[%SystemDrive%%SystemPath%]]></c>.
+ <p>The working directory for the Erlang emulator.
+ Must be on a local drive (no network drives are mounted when a
+ service starts). Default working directory for services is
+ <c><![CDATA[%SystemDrive%%SystemPath%]]></c>.
Debug log files will be placed in this directory.</p>
</item>
+ <tag><c><![CDATA[Priority]]></c></tag>
<item>
- <p><c><![CDATA[Priority]]></c>: The process priority of the emulator,
- this can be one of <c><![CDATA[realtime]]></c>, <c><![CDATA[high]]></c>, <c><![CDATA[low]]></c>
- or <c><![CDATA[default]]></c> (the default). Real-time priority is not
- recommended, the machine will possibly be inaccessible to
- interactive users. High priority could be used if two Erlang
- nodes should reside on one dedicated system and one should
- have precedence over the other. Low process priority may be
- used if interactive performance should not be affected by
- the emulator process.</p>
+ <p>The process priority of the emulator. Can be one of the
+ following:</p>
+ <taglist>
+ <tag><c><![CDATA[realtime]]></c></tag>
+ <item>
+ <p>Not recommended, as the machine will possibly be
+ inaccessible to interactive users.</p>
+ </item>
+ <tag><c><![CDATA[high]]></c></tag>
+ <item>
+ <p>Can be used if two Erlang nodes are to reside on one dedicated
+ system and one is to have precedence over the other.</p>
+ </item>
+ <tag><c><![CDATA[low]]></c></tag>
+ <item>
+ <p>Can be used if interactive performance is not to be affected
+ by the emulator process.</p>
+ </item>
+ <tag><c><![CDATA[default]]></c> (the default></tag>
+ <item>
+ </item>
+ </taglist>
</item>
+ <tag><c><![CDATA[SName or Name]]></c></tag>
<item>
- <p><c><![CDATA[SName or Name]]></c>: Specifies the short or long
- node-name of the Erlang emulator. The Erlang services are
- always distributed, default is to use the service name as
- (short) node-name.</p>
+ <p>Specifies the short or long
+ node name of the Erlang emulator. The Erlang services are
+ always distributed. Default is to use the service name as
+ (short) nodename.</p>
</item>
+ <tag><c><![CDATA[DebugType]]></c></tag>
<item>
- <p><c><![CDATA[DebugType]]></c>: Can be one of <c><![CDATA[none]]></c> (default),
- <c><![CDATA[new]]></c>, <c><![CDATA[reuse]]></c> or <c><![CDATA[console]]></c>.
- Specifies that output from the Erlang shell should be
+ <p>Specifies that output from the Erlang shell is to be
sent to a "debug log". The log file is named
&lt;servicename&gt;<c><![CDATA[.debug]]></c> or
- &lt;servicename&gt;<c><![CDATA[.debug.]]></c>&lt;N&gt;, where &lt;N&gt; is
- an integer between 1 and 99. The log-file is placed in the
- working directory of the service (as specified in WorkDir). The
- <c><![CDATA[reuse]]></c> option always reuses the same log file
- (&lt;servicename&gt;<c><![CDATA[.debug]]></c>) and the <c><![CDATA[new]]></c> option
- uses a separate log file for every invocation of the service
- (&lt;servicename&gt;<c><![CDATA[.debug.]]></c>&lt;N&gt;). The <c><![CDATA[console]]></c>
- option opens an interactive Windows&reg; console window for
- the Erlang shell of the service. The <c><![CDATA[console]]></c> option
- automatically
- disables the <c><![CDATA[StopAction]]></c> and a service started with an
- interactive console window will not survive logouts,
- <c><![CDATA[OnFail]]></c> actions do not work with debug-consoles either.
- If no <c><![CDATA[DebugType]]></c> is specified (<c><![CDATA[none]]></c>), the
- output of the Erlang shell is discarded.</p>
- <p>The <c><![CDATA[console]]></c><c><![CDATA[DebugType]]></c> is <em>not in any way</em>
- intended for production. It is <em>only</em> a convenient way to
- debug Erlang services during development. The <c><![CDATA[new]]></c> and
- <c><![CDATA[reuse]]></c> options might seem convenient to have in a
- production system, but one has to take into account that the
- logs will grow indefinitely during the systems lifetime and
- there is no way, short of restarting the service, to
- truncate those logs. In short, the <c><![CDATA[DebugType]]></c> is
- intended for debugging only. Logs during production are
- better produced with the standard Erlang logging
- facilities.</p>
+ &lt;servicename&gt;<c><![CDATA[.debug.]]></c>&lt;N&gt;,
+ where &lt;N&gt; is an integer from 1 through 99.
+ The log file is placed in the working directory of the
+ service (as specified in <c>WorkDir</c>).</p>
+ <p>Can be one of the following:</p>
+ <taglist>
+ <tag><c><![CDATA[new]]></c></tag>
+ <item>
+ <p>Uses a separate log file for every invocation of the service
+ (&lt;servicename&gt;<c><![CDATA[.debug.]]></c>&lt;N&gt;).</p>
+ </item>
+ <tag><c><![CDATA[reuse]]></c></tag>
+ <item>
+ <p>Reuses the same log file
+ (&lt;servicename&gt;<c><![CDATA[.debug]]></c>).</p>
+ </item>
+ <tag><c><![CDATA[console]]></c></tag>
+ <item>
+ <p>Opens an interactive Windows console window for the Erlang
+ shell of the service. Automatically disables the
+ <c><![CDATA[StopAction]]></c>. A service started with an
+ interactive console window does not survive logouts.
+ <c><![CDATA[OnFail]]></c> actions do not work with
+ debug consoles either.</p>
+ </item>
+ <tag><c><![CDATA[none]]></c> (the default)</tag>
+ <item>
+ <p>The output of the Erlang shell is discarded.</p>
+ </item>
+ </taglist>
+ <note>
+ <p>The <c><![CDATA[console]]></c> option is <em>not</em> intended
+ for production. It is <em>only</em> a convenient way to debug
+ Erlang services during development.</p>
+ <p>The <c><![CDATA[new]]></c> and <c><![CDATA[reuse]]></c> options
+ might seem convenient in a production system, but consider that
+ the logs grow indefinitely during the system lifetime and cannot
+ be truncated, except if the service is restarted.</p>
+ <p>In short, the <c><![CDATA[DebugType]]></c> is
+ intended for debugging only. Logs during production are
+ better produced with the standard Erlang logging facilities.</p>
+ </note>
</item>
+ <tag><c><![CDATA[Args]]></c></tag>
<item>
- <p><c><![CDATA[Args]]></c>: Additional arguments passed to the
- emulator startup program <c><![CDATA[erl.exe]]></c> (or
- <c><![CDATA[start_erl.exe]]></c>). Arguments that cannot be specified
- here are <c><![CDATA[-noinput]]></c> (StopActions would not work),
- <c><![CDATA[-name]]></c> and <c><![CDATA[-sname]]></c> (they are specified in any
- way. The most common use is for specifying cookies and flags
- to be passed to init:boot() (<c><![CDATA[-s]]></c>).</p>
+ <p>Passes extra arguments to the emulator startup program
+ <c><![CDATA[erl.exe]]></c> (or <c><![CDATA[start_erl.exe]]></c>).
+ Arguments that cannot be specified here are
+ <c><![CDATA[-noinput]]></c> (<c>StopActions</c> would not work),
+ <c><![CDATA[-name]]></c>, and <c><![CDATA[-sname]]></c> (they are
+ specified in any way). The most common use is for specifying cookies
+ and flags to be passed to <c>init:boot()</c>
+ (<c><![CDATA[-s]]></c>).</p>
</item>
+ <tag><c><![CDATA[InternalServiceName]]></c></tag>
<item>
- <p><c><![CDATA[InternalServiceName]]></c>: Specifies the Windows&reg; internal service name (not the display name, which is the one <c>erlsrv</c> uses to identify the service).</p>
- <p>This internal name can not be changed, it is fixed even if the service is renamed. <c>Erlsrv</c> generates a unique internal name when a service is created, it is recommended to keep to the defaut if release-handling is to be used for the application.</p>
- <p>The internal service name can be seen in the Windows&reg; service manager if viewing <c>Properties</c> for an erlang service.</p>
+ <p>Specifies the Windows-internal service name (not the display name,
+ which is the one <c>erlsrv</c> uses to identify the service).</p>
+ <p>This internal name cannot be changed, it is fixed even if the
+ service is renamed. <c>erlsrv</c> generates a unique internal name
+ when a service is created. It is recommended to keep to the default
+ if release handling is to be used for the application.</p>
+ <p>The internal service name can be seen in the Windows service
+ manager if viewing <c>Properties</c> for an Erlang service.</p>
</item>
+ <tag><c><![CDATA[Comment]]></c></tag>
<item>
- <p><c><![CDATA[Comment]]></c>: A textual comment describing the service. Not mandatory, but shows up as the service description in the Windows&reg; service manager.</p>
+ <p>A textual comment describing the service. Not mandatory, but shows
+ up as the service description in the Windows service manager.</p>
</item>
- </list>
- <p> <marker id="001"></marker>
- The naming of the service in a system that
- uses release handling has to follow the convention
+ </taglist>
+
+ <p><marker id="001"></marker>
+ The naming of the service in a system that
+ uses release handling must follow the convention
<em>NodeName</em>_<em>Release</em>, where <em>NodeName</em> is
- the first part of the Erlang nodename (up to, but not including
+ the first part of the Erlang node name (up to, but not including
the "@") and <em>Release</em> is the current release of the
application.</p>
</description>
+
<funcs>
<func>
<name>erlsrv {set | add} &lt;service-name> [&lt;service options>]</name>
- <fsummary>Add or modify an Erlang service</fsummary>
+ <fsummary>Add or modify an Erlang service.</fsummary>
<desc>
- <p>The set and add commands adds or modifies a Erlang service
- respectively. The simplest form of an add command would be
- completely without options in which case all default values
+ <p>The <c>set</c> and <c>add</c> commands modifies or adds an Erlang
+ service, respectively. The simplest form of an <c>add</c> command is
+ without any options in which case all default values
(described above) apply. The service name is mandatory.</p>
- <p>Every option can be given without parameters, in which case
- the default value is applied. Values to the options are
- supplied <em>only</em> when the default should not be used
- (i.e. <c><![CDATA[erlsrv set myservice -prio -arg]]></c> sets the
- default priority and removes all arguments).</p>
- <p>The following service options are currently available:</p>
+ <p>Every option can be specified without parameters, the
+ default value is then applied. Values to the options are
+ supplied <em>only</em> when the default is not to be used.
+ For example, <c><![CDATA[erlsrv set myservice -prio -arg]]></c>
+ sets the default priority and removes all arguments.</p>
+ <p>Service options:</p>
<taglist>
- <tag>-st[opaction] [&lt;erlang shell command&gt;]</tag>
- <item>Defines the StopAction, the command given to the Erlang
- shell when the service is stopped. Default is none.</item>
- <tag>-on[fail] [{reboot | restart | restart_always}]</tag>
- <item>Specifies the action to take when the Erlang emulator
- stops unexpectedly. Default is to ignore.</item>
- <tag>-m[achine] [&lt;erl-command&gt;]</tag>
- <item>The complete path to the Erlang emulator, never use the
- werl program for this. Default is the <c><![CDATA[erl.exe]]></c> in the
- same directory as <c><![CDATA[erlsrv.exe]]></c>. When release handling
- is used, this should be set to a program similar to
- <c><![CDATA[start_erl.exe]]></c>.</item>
- <tag>-e[nv] [&lt;variable&gt;[=&lt;value&gt;]] ...</tag>
- <item>Edits the environment block for the service. Every
- environment variable specified will add to the system
- environment block. If a variable specified here has the same
- name as a system wide environment variable, the specified
- value overrides the system wide. Environment variables are
- added to this list by specifying
- &lt;variable&gt;=&lt;value&gt; and deleted from the list by
- specifying &lt;variable&gt; alone. The environment block is
- automatically sorted. Any number of <c><![CDATA[-env]]></c> options can
- be specified in one command. Default is to use the system
- environment block unmodified (except for two additions, see
- <seealso marker="#002">below</seealso>).</item>
- <tag>-w[orkdir] [&lt;directory&gt;]</tag>
- <item>The initial working directory of the Erlang
- emulator. Default is the system directory.</item>
- <tag>-p[riority] [{low|high|realtime}]</tag>
- <item>The priority of the Erlang emulator. The default is the
- Windows&reg; default priority.</item>
- <tag>{-sn[ame] | -n[ame]} [&lt;node-name&gt;]</tag>
- <item>The node-name of the Erlang machine, distribution is
- mandatory. Default is <c><![CDATA[-sname <service name>]]></c>.
+ <tag><c>-st[opaction] [&lt;erlang shell command&gt;]</c></tag>
+ <item>
+ <p>Defines the <c><![CDATA[StopAction]]></c>, the command given
+ to the Erlang shell when the service is stopped.
+ Default is none.</p>
+ </item>
+ <tag><c>-on[fail] [{reboot | restart | restart_always}]</c></tag>
+ <item>
+ <p>The action to take when the Erlang emulator
+ stops unexpectedly. Default is to ignore.</p>
+ </item>
+ <tag><c>-m[achine] [&lt;erl-command&gt;]</c></tag>
+ <item>
+ <p>The complete path to the Erlang emulator. Never use the
+ <c>werl</c> program for this. Defaults to the
+ <c><![CDATA[erl.exe]]></c> in the same directory as
+ <c><![CDATA[erlsrv.exe]]></c>. When release handling
+ is used, this is to be set to a program similar to
+ <c><![CDATA[start_erl.exe]]></c>.</p>
+ </item>
+ <tag><c>-e[nv] [&lt;variable&gt;[=&lt;value&gt;]] ...</c></tag>
+ <item>
+ <p>Edits the environment block for the service. Every
+ environment variable specified is added to the system
+ environment block. If a variable specified here has the same
+ name as a system-wide environment variable, the specified
+ value overrides the system-wide. Environment variables are
+ added to this list by specifying
+ &lt;variable&gt;=&lt;value&gt; and deleted from the list by
+ specifying &lt;variable&gt; alone. The environment block is
+ automatically sorted. Any number of <c><![CDATA[-env]]></c>
+ options can be specified in one command. Default is to use the
+ system environment block unmodified (except for two additions,
+ see section <seealso marker="#002">Environment</seealso>
+ below).</p>
+ </item>
+ <tag><c>-w[orkdir] [&lt;directory&gt;]</c></tag>
+ <item>
+ <p>The initial working directory of the Erlang
+ emulator. Defaults to the system directory.</p>
+ </item>
+ <tag><c>-p[riority] [{low|high|realtime}]</c></tag>
+ <item>
+ <p>The priority of the Erlang emulator. Default to the
+ Windows default priority.</p>
+ </item>
+ <tag><c>{-sn[ame] | -n[ame]} [&lt;node-name&gt;]</c></tag>
+ <item>
+ <p>The node name of the Erlang machine. Distribution is mandatory.
+ Defaults to <c><![CDATA[-sname <service name>]]></c>.</p>
+ </item>
+ <tag><c>-d[ebugtype] [{new|reuse|console}]</c></tag>
+ <item>
+ <p>Specifies where shell output is to be sent.
+ Default is that shell output is discarded.
+ To be used only for debugging.</p>
+ </item>
+ <tag><c>-ar[gs] [&lt;limited erl arguments&gt;]</c></tag>
+ <item>
+ <p>Extra arguments to the Erlang emulator. Avoid
+ <c><![CDATA[-noinput]]></c>, <c><![CDATA[-noshell]]></c>, and
+ <c><![CDATA[-sname]]></c>/<c><![CDATA[-name]]></c>. Default is
+ no extra arguments. Remember that the services cookie file is not
+ necessarily the same as the interactive users. The service
+ runs as the local administrator. Specify all arguments
+ together in one string, use double quotes (") to specify an
+ argument string containing spaces, and use quoted quotes (\")
+ to specify a quote within the argument string if necessary.</p>
+ </item>
+ <tag><c>-i[nternalservicename] [&lt;internal name&gt;]</c></tag>
+ <item>
+ <p><em>Only</em> allowed for <c>add</c>. Specifies a
+ Windows-internal service name for the service, which by
+ default is set to something unique (prefixed with the
+ original service name) by <c>erlsrv</c> when adding a new
+ service. Specifying this is a purely cosmethic action and is
+ <em>not</em> recommended if release handling is to be
+ performed. The internal service name cannot be changed once
+ the service is created. The internal name is <em>not</em> to
+ be confused with the ordinary service name, which is the name
+ used to identify a service to <c>erlsrv</c>.</p>
+ </item>
+ <tag><c>-c[omment] [&lt;short description&gt;]</c></tag>
+ <item>
+ <p>Specifies a textual comment describing the
+ service. This comment shows up as the service description
+ in the Windows service manager.</p>
</item>
- <tag>-d[ebugtype] [{new|reuse|console}]</tag>
- <item>Specifies where shell output should be sent,
- default is that shell output is discarded.
- To be used only for debugging.</item>
- <tag>-ar[gs] [&lt;limited erl arguments&gt;]</tag>
- <item>Additional arguments to the Erlang emulator, avoid
- <c><![CDATA[-noinput]]></c>, <c><![CDATA[-noshell]]></c> and
- <c><![CDATA[-sname]]></c>/<c><![CDATA[-name]]></c>. Default is no additional
- arguments. Remember that the services cookie file is not
- necessarily the same as the interactive users. The service
- runs as the local administrator. All arguments should be given
- together in one string, use double quotes (") to give an
- argument string containing spaces and use quoted quotes (\")
- to give an quote within the argument string if
- necessary.</item>
- <tag>-i[nternalservicename] [&lt;internal name&gt;]</tag>
- <item><em>Only</em> allowed for <c>add</c>. Specifies a
- Windows&reg; internal service name for the service, which by
- default is set to something unique (prefixed with the
- original service name) by erlsrv when adding a new
- service. Specifying this is a purely cosmethic action and is
- <em>not</em> recommended if release handling is to be
- performed. The internal service name cannot be changed once
- the service is created. The internal name is <em>not</em> to
- be confused with the ordinary service name, which is the name
- used to identify a service to erlsrv.</item>
- <tag>-c[omment] [&lt;short description&gt;]</tag>
- <item>Specifies a textual comment describing the
- service. This comment will show upp as the service description
- in the Windows&reg; service manager.</item>
</taglist>
</desc>
</func>
+
<func>
- <name>erlsrv {start | start_disabled | stop | disable | enable} &lt;service-name></name>
+ <name>erlsrv {start | start_disabled | stop | disable |
+ enable} &lt;service-name></name>
<fsummary>Manipulate the current service status.</fsummary>
<desc>
<p>These commands are only added for convenience, the normal
way to manipulate the state of a service is through the
- control panels services applet. The <c><![CDATA[start]]></c> and
+ control panels services applet.</p>
+ <p>The <c><![CDATA[start]]></c> and
<c><![CDATA[stop]]></c> commands communicates
- with the service manager for stopping and starting a
- service. The commands wait until the service is actually
- stopped or started. When disabling a service, it is not
- stopped, the disabled state will not take effect until the
- service actually is stopped. Enabling a service sets it in
- automatic mode, that is started at boot. This command cannot
- set the service to manual. </p>
-
- <p>The <c>start_disabled</c> command operates on a service
- regardless of if it's enabled/disabled or started/stopped. It
- does this by first enabling it (regardless of if it's enabled
- or not), then starting it (if it's not already started) and
- then disabling it. The result will be a disabled but started
- service, regardless of its earlier state. This is useful for
- starting services temporarily during a release upgrade. The
- difference between using <c>start_disabled</c> and the
- sequence <c>enable</c>, <c>start</c> and <c>disable</c> is
- that all other <c>erlsrv</c> commands are locked out during
- the sequence of operations in <c>start_disable</c>, making the
- operation atomic from an <c>erlsrv</c> user's point of
- view.</p>
-
+ with the service manager for starting and stopping a
+ service. The commands wait until the service is
+ started or stopped. When disabling a service, it is not
+ stopped, the disabled state does not take effect until the
+ service is stopped. Enabling a service sets it in
+ automatic mode, which is started at boot. This command cannot
+ set the service to manual.</p>
+ <p>The <c>start_disabled</c> command operates on a service
+ regardless of if it is enabled/disabled or started/stopped. It
+ does this by first enabling it (regardless of if it is enabled
+ or not), then starting it (if not already started), and
+ then disabling it. The result is a disabled but started
+ service, regardless of its earlier state. This is useful for
+ starting services temporarily during a release upgrade. The
+ difference between using <c>start_disabled</c> and the
+ sequence <c>enable</c>, <c>start</c>, and <c>disable</c> is
+ that all other <c>erlsrv</c> commands are locked out during
+ the sequence of operations in <c>start_disable</c>, making the
+ operation atomic from an <c>erlsrv</c> user's point of view.</p>
</desc>
</func>
+
<func>
<name>erlsrv remove &lt;service-name&gt;</name>
<fsummary>Remove the service.</fsummary>
<desc>
- <p>This command removes the service completely with all its registered
- options. It will be stopped before it is removed.</p>
+ <p>Removes the service completely with all its registered
+ options. It is stopped before it is removed.</p>
</desc>
</func>
+
<func>
<name>erlsrv list [&lt;service-name&gt;]</name>
- <fsummary>List all Erlang services or all options for one service.</fsummary>
+ <fsummary>List all Erlang services or all options for one service.
+ </fsummary>
<desc>
- <p>If no service name is supplied, a brief listing of all Erlang services
- is presented. If a service-name is supplied, all options for that
- service are presented.</p>
+ <p>If no service name is specified, a brief listing of all Erlang
+ services is presented. If a service name is supplied, all options
+ for that service are presented.</p>
</desc>
</func>
+
<func>
<name>erlsrv help</name>
- <fsummary>Display a brief help text</fsummary>
+ <fsummary>Display a brief help text.</fsummary>
+ <desc>
+ <p>Displays a brief help text.</p>
+ </desc>
</func>
</funcs>
<section>
- <title>ENVIRONMENT</title>
- <p> <marker id="002"></marker>
-The environment of an Erlang machine started
- as a service will contain two special variables,
- <c><![CDATA[ERLSRV_SERVICE_NAME]]></c>, which is the name of the service that
- started the machine and <c><![CDATA[ERLSRV_EXECUTABLE]]></c> which is the
- full path to the <c><![CDATA[erlsrv.exe]]></c> that can be used to manipulate
- the service. This will come in handy when defining a heart command for
- your service. A command file for restarting a service will
- simply look like this:</p>
+ <title>Environment</title>
+ <p><marker id="002"></marker>
+ The environment of an Erlang machine started
+ as a service contains two special variables:</p>
+
+ <taglist>
+ <tag><c><![CDATA[ERLSRV_SERVICE_NAME]]></c></tag>
+ <item>The name of the service that started the machine.</item>
+ <tag><c><![CDATA[ERLSRV_EXECUTABLE]]></c></tag>
+ <item>The full path to the <c><![CDATA[erlsrv.exe]]></c>, which can be
+ used to manipulate the service. This comes in handy when defining a
+ heart command for your service.</item>
+ </taglist>
+
+ <p>A command file for restarting a service looks as follows:</p>
+
<code type="none"><![CDATA[
@echo off
%ERLSRV_EXECUTABLE% stop %ERLSRV_SERVICE_NAME%
%ERLSRV_EXECUTABLE% start %ERLSRV_SERVICE_NAME% ]]></code>
+
<p>This command file is then set as heart command.</p>
+
<p>The environment variables can also be used to detect that we
are running as a service and make port programs react correctly
- to the control events generated on logout (see below).</p>
+ to the control events generated on logout (see the next section).</p>
</section>
<section>
- <title>PORT PROGRAMS</title>
+ <title>Port Programs</title>
<p>When a program runs in
- the service context, it has to handle the control events that is
+ the service context, it must handle the control events that are
sent to every program in the system when the interactive user
logs off. This is done in different ways for programs running in
the console subsystem and programs running as window
- applications. An application which runs in the console subsystem
+ applications. An application running in the console subsystem
(normal for port programs) uses the win32 function
<c><![CDATA[SetConsoleCtrlHandler]]></c> to register a control handler
- that returns TRUE in answer to the <c><![CDATA[CTRL_LOGOFF_EVENT]]></c>
+ that returns <c>true</c> in answer to the
+ <c><![CDATA[CTRL_LOGOFF_EVENT]]></c>
and <c><![CDATA[CTRL_SHUTDOWN_EVENT]]></c> events. Other applications
- just forward <c><![CDATA[WM_ENDSESSION]]></c> and
- <c><![CDATA[WM_QUERYENDSESSION]]></c> to the default window procedure.
- Here is a brief example in C of how to set the console control
- handler:</p>
+ only forward <c><![CDATA[WM_ENDSESSION]]></c> and
+ <c><![CDATA[WM_QUERYENDSESSION]]></c> to the default window procedure.</p>
+
+ <p>A brief example in C of how to set the console control handler:</p>
+
<code type="none"><![CDATA[
#include <windows.h>
/*
@@ -383,7 +487,7 @@ void initialize_handler(void){
char buffer[2];
/*
* We assume we are running as a service if this
- * environment variable is defined
+ * environment variable is defined.
*/
if(GetEnvironmentVariable("ERLSRV_SERVICE_NAME",buffer,
(DWORD) 2)){
@@ -396,29 +500,34 @@ void initialize_handler(void){
</section>
<section>
- <title>NOTES</title>
- <p>Even though the options are described in a Unix-like format, the case of
- the options or commands is not relevant, and the "/" character for options
- can be used as well as the "-" character. </p>
- <p>Note that the program resides in the emulators
- <c><![CDATA[bin]]></c>-directory, not in the <c><![CDATA[bin]]></c>-directory directly under
+ <title>Notes</title>
+ <p>Although the options are described in a Unix-like format, the case of
+ the options or commands is not relevant, and both character "/" and "-"
+ can be used for options.</p>
+
+ <p>Notice that the program resides in the emulator's <c><![CDATA[bin]]></c>
+ directory, not in the <c><![CDATA[bin]]></c> directory directly under
the Erlang root. The reasons for this are the subtle problem of
upgrading the emulator on a running system, where a new version of
the runtime system should not need to overwrite existing (and probably
used) executables.</p>
- <p>To easily manipulate the Erlang services, put
+
+ <p>To manipulate the Erlang services easily, put
the <c><![CDATA[<erlang_root>\erts-<version>\bin]]></c> directory in
- the path instead of <c><![CDATA[<erlang_root>\bin]]></c>. The erlsrv program
- can be found from inside Erlang by using the
+ the path instead of <c><![CDATA[<erlang_root>\bin]]></c>. The
+ <c>erlsrv</c> program can be found from inside Erlang by using the
<c><![CDATA[os:find_executable/1]]></c> Erlang function.</p>
- <p>For release handling to work, use <c><![CDATA[start_erl]]></c> as the Erlang
- machine. It is also worth mentioning again that the name of the
- service is significant (see <seealso marker="#001">above</seealso>).</p>
+
+ <p>For release handling to work, use <c><![CDATA[start_erl]]></c> as the
+ Erlang machine. As stated <seealso marker="#001">above</seealso>,
+ the service name is significant.</p>
</section>
<section>
- <title>SEE ALSO</title>
- <p>start_erl(1), release_handler(3)</p>
+ <title>See Also</title>
+ <p><seealso marker="start_erl"><c>start_erl(1)</c></seealso>,
+ <seealso marker="sasl:release_handler">
+ <c>release_handler(3)</c></seealso></p>
</section>
</comref>
diff --git a/erts/doc/src/erts_alloc.xml b/erts/doc/src/erts_alloc.xml
index 70775b9f0f..8ab35851c1 100644
--- a/erts/doc/src/erts_alloc.xml
+++ b/erts/doc/src/erts_alloc.xml
@@ -25,63 +25,68 @@
<title>erts_alloc</title>
<prepared>Rickard Green</prepared>
<docno>1</docno>
- <date>03-06-11</date>
+ <date>2003-06-11</date>
<rev>1</rev>
<file>erts_alloc.xml</file>
</header>
<lib>erts_alloc</lib>
- <libsummary>An Erlang Run-Time System internal memory allocator library.</libsummary>
+ <libsummary>An Erlang runtime system internal memory allocator library.
+ </libsummary>
<description>
- <p><c>erts_alloc</c> is an Erlang Run-Time System internal memory
+ <p><c>erts_alloc</c> is an Erlang runtime system internal memory
allocator library. <c>erts_alloc</c> provides the Erlang
- Run-Time System with a number of memory allocators.</p>
+ runtime system with a number of memory allocators.</p>
</description>
<section>
<title>Allocators</title>
<marker id="allocators"></marker>
- <p>Currently the following allocators are present:</p>
+ <p>The following allocators are present:</p>
+
<taglist>
<tag><c>temp_alloc</c></tag>
<item>Allocator used for temporary allocations.</item>
<tag><c>eheap_alloc</c></tag>
- <item>Allocator used for Erlang heap data, such as Erlang process heaps.</item>
+ <item>Allocator used for Erlang heap data, such as Erlang process heaps.
+ </item>
<tag><c>binary_alloc</c></tag>
<item>Allocator used for Erlang binary data.</item>
<tag><c>ets_alloc</c></tag>
- <item>Allocator used for ETS data.</item>
+ <item>Allocator used for <c>ets</c> data.</item>
<tag><c>driver_alloc</c></tag>
<item>Allocator used for driver data.</item>
<tag><c>literal_alloc</c></tag>
<item>Allocator used for constant terms in Erlang code.</item>
<tag><c>sl_alloc</c></tag>
<item>Allocator used for memory blocks that are expected to be
- short-lived.</item>
+ short-lived.</item>
<tag><c>ll_alloc</c></tag>
<item>Allocator used for memory blocks that are expected to be
- long-lived, for example Erlang code.</item>
+ long-lived, for example, Erlang code.</item>
<tag><c>fix_alloc</c></tag>
<item>A fast allocator used for some frequently used
fixed size data types.</item>
<tag><c>exec_alloc</c></tag>
- <item>Allocator used by hipe for native executable code
- on specific architectures (x86_64).</item>
+ <item>Allocator used by the <seealso marker="hipe:HiPE_app"><c>HiPE</c></seealso>
+ application for native executable code on specific architectures
+ (x86_64).</item>
<tag><c>std_alloc</c></tag>
- <item>Allocator used for most memory blocks not allocated via any of
- the other allocators described above.</item>
+ <item>Allocator used for most memory blocks not allocated through any of
+ the other allocators described above.</item>
<tag><c>sys_alloc</c></tag>
<item>This is normally the default <c>malloc</c> implementation
- used on the specific OS.</item>
+ used on the specific OS.</item>
<tag><c>mseg_alloc</c></tag>
- <item>A memory segment allocator. <c>mseg_alloc</c> is used by other
- allocators for allocating memory segments and is currently only
- available on systems that have the <c>mmap</c> system
- call. Memory segments that are deallocated are kept for a
- while in a segment cache before they are destroyed. When
- segments are allocated, cached segments are used if possible
- instead of creating new segments. This in order to reduce
- the number of system calls made.</item>
+ <item>A memory segment allocator. It is used by other
+ allocators for allocating memory segments and is only
+ available on systems that have the <c>mmap</c> system
+ call. Memory segments that are deallocated are kept for a
+ while in a segment cache before they are destroyed. When
+ segments are allocated, cached segments are used if possible
+ instead of creating new segments. This to reduce
+ the number of system calls made.</item>
</taglist>
+
<p><c>sys_alloc</c> and <c>literal_alloc</c> are always enabled and
cannot be disabled. <c>exec_alloc</c> is only available if it is needed
and cannot be disabled. <c>mseg_alloc</c> is always enabled if it is
@@ -90,9 +95,10 @@
By default all allocators are enabled.
When an allocator is disabled, <c>sys_alloc</c> is used instead of
the disabled allocator.</p>
+
<p>The main idea with the <c>erts_alloc</c> library is to separate
memory blocks that are used differently into different memory
- areas, and by this achieving less memory fragmentation. By
+ areas, to achieve less memory fragmentation. By
putting less effort in finding a good fit for memory blocks that
are frequently allocated than for those less frequently
allocated, a performance gain can be achieved.</p>
@@ -100,61 +106,85 @@
<section>
<marker id="alloc_util"></marker>
- <title>The alloc_util framework</title>
+ <title>The alloc_util Framework</title>
<p>Internally a framework called <c>alloc_util</c> is used for
- implementing allocators. <c>sys_alloc</c>, and
- <c>mseg_alloc</c> do not use this framework; hence, the
+ implementing allocators. <c>sys_alloc</c> and
+ <c>mseg_alloc</c> do not use this framework, so the
following does <em>not</em> apply to them.</p>
+
<p>An allocator manages multiple areas, called carriers, in which
memory blocks are placed. A carrier is either placed in a
- separate memory segment (allocated via <c>mseg_alloc</c>), or in
- the heap segment (allocated via <c>sys_alloc</c>). Multiblock
- carriers are used for storage of several blocks. Singleblock
- carriers are used for storage of one block. Blocks that are
- larger than the value of the singleblock carrier threshold
- (<seealso marker="#M_sbct">sbct</seealso>) parameter are placed
- in singleblock carriers. Blocks that are smaller than the value
- of the <c>sbct</c> parameter are placed in multiblock
- carriers. Normally an allocator creates a "main multiblock
+ separate memory segment (allocated through <c>mseg_alloc</c>), or in
+ the heap segment (allocated through <c>sys_alloc</c>).</p>
+
+ <list type="bulleted">
+ <item>
+ <p>Multiblock carriers are used for storage of several blocks.</p>
+ </item>
+ <item>
+ <p>Singleblock carriers are used for storage of one block.</p>
+ </item>
+ <item>
+ <p>Blocks that are larger than the value of the singleblock carrier
+ threshold (<seealso marker="#M_sbct"><c>sbct</c></seealso>) parameter
+ are placed in singleblock carriers.</p>
+ </item>
+ <item>
+ <p>Blocks that are smaller than the value of parameter <c>sbct</c>
+ are placed in multiblock carriers.</p></item>
+ </list>
+
+ <p>Normally an allocator creates a "main multiblock
carrier". Main multiblock carriers are never deallocated. The
- size of the main multiblock carrier is determined by the value
- of the <seealso marker="#M_mmbcs">mmbcs</seealso> parameter.</p>
+ size of the main multiblock carrier is determined by the value of
+ parameter <seealso marker="#M_mmbcs"><c>mmbcs</c></seealso>.</p>
+
<p><marker id="mseg_mbc_sizes"></marker>Sizes of multiblock carriers
- allocated via <c>mseg_alloc</c> are
- decided based on the values of the largest multiblock carrier
- size (<seealso marker="#M_lmbcs">lmbcs</seealso>), the smallest
- multiblock carrier size (<seealso marker="#M_smbcs">smbcs</seealso>),
- and the multiblock carrier growth stages
- (<seealso marker="#M_mbcgs">mbcgs</seealso>) parameters. If
- <c>nc</c> is the current number of multiblock carriers (the main
+ allocated through <c>mseg_alloc</c> are decided based on the
+ following parameters:</p>
+
+ <list type="bulleted">
+ <item>The values of the largest multiblock carrier size
+ (<seealso marker="#M_lmbcs"><c>lmbcs</c></seealso>)</item>
+ <item>The smallest multiblock carrier size
+ (<seealso marker="#M_smbcs"><c>smbcs</c></seealso>)</item>
+ <item>The multiblock carrier growth stages
+ (<seealso marker="#M_mbcgs"><c>mbcgs</c></seealso>)</item>
+ </list>
+
+ <p>If <c>nc</c> is the current number of multiblock carriers (the main
multiblock carrier excluded) managed by an allocator, the size
of the next <c>mseg_alloc</c> multiblock carrier allocated by
- this allocator will roughly be
+ this allocator is roughly
<c><![CDATA[smbcs+nc*(lmbcs-smbcs)/mbcgs]]></c> when
<c><![CDATA[nc <= mbcgs]]></c>,
- and <c>lmbcs</c> when <c><![CDATA[nc > mbcgs]]></c>. If the value of the
- <c>sbct</c> parameter should be larger than the value of the
- <c>lmbcs</c> parameter, the allocator may have to create
- multiblock carriers that are larger than the value of the
- <c>lmbcs</c> parameter, though.
- Singleblock carriers allocated via <c>mseg_alloc</c> are sized
+ and <c>lmbcs</c> when <c><![CDATA[nc > mbcgs]]></c>. If the value of
+ parameter <c>sbct</c> is larger than the value of parameter
+ <c>lmbcs</c>, the allocator may have to create
+ multiblock carriers that are larger than the value of
+ parameter <c>lmbcs</c>, though.
+ Singleblock carriers allocated through <c>mseg_alloc</c> are sized
to whole pages.</p>
- <p>Sizes of carriers allocated via <c>sys_alloc</c> are
+
+ <p>Sizes of carriers allocated through <c>sys_alloc</c> are
decided based on the value of the <c>sys_alloc</c> carrier size
- (<seealso marker="#Muycs">ycs</seealso>) parameter. The size of
- a carrier is the least number of multiples of the value of the
- <c>ycs</c> parameter that satisfies the request.</p>
+ (<seealso marker="#Muycs"><c>ycs</c></seealso>) parameter. The size of
+ a carrier is the least number of multiples of the value of
+ parameter <c>ycs</c> satisfying the request.</p>
+
<p>Coalescing of free blocks are always performed immediately.
- Boundary tags (headers and footers) in free blocks are used
+ Boundary tags (headers and footers) in free blocks are used,
which makes the time complexity for coalescing constant.</p>
+
<p><marker id="strategy"></marker>The memory allocation strategy
- used for multiblock carriers by an
- allocator is configurable via the <seealso marker="#M_as">as</seealso>
- parameter. Currently the following strategies are available:</p>
+ used for multiblock carriers by an allocator can be
+ configured using parameter <seealso marker="#M_as"><c>as</c></seealso>.
+ The following strategies are available:</p>
+
<taglist>
<tag>Best fit</tag>
<item>
- <p>Strategy: Find the smallest block that satisfies the
+ <p>Strategy: Find the smallest block satisfying the
requested block size.</p>
<p>Implementation: A balanced binary search tree is
used. The time complexity is proportional to log N, where
@@ -162,7 +192,7 @@
</item>
<tag>Address order best fit</tag>
<item>
- <p>Strategy: Find the smallest block that satisfies the
+ <p>Strategy: Find the smallest block satisfying the
requested block size. If multiple blocks are found, choose
the one with the lowest address.</p>
<p>Implementation: A balanced binary search tree is
@@ -171,7 +201,7 @@
</item>
<tag>Address order first fit</tag>
<item>
- <p>Strategy: Find the block with the lowest address that satisfies the
+ <p>Strategy: Find the block with the lowest address satisfying the
requested block size.</p>
<p>Implementation: A balanced binary search tree is
used. The time complexity is proportional to log N, where
@@ -180,8 +210,8 @@
<tag>Address order first fit carrier best fit</tag>
<item>
<p>Strategy: Find the <em>carrier</em> with the lowest address that
- can satisfy the requested block size, then find a block within
- that carrier using the "best fit" strategy.</p>
+ can satisfy the requested block size, then find a block within
+ that carrier using the "best fit" strategy.</p>
<p>Implementation: Balanced binary search trees are
used. The time complexity is proportional to log N, where
N is the number of free blocks.</p>
@@ -189,8 +219,8 @@
<tag>Address order first fit carrier address order best fit</tag>
<item>
<p>Strategy: Find the <em>carrier</em> with the lowest address that
- can satisfy the requested block size, then find a block within
- that carrier using the "adress order best fit" strategy.</p>
+ can satisfy the requested block size, then find a block within
+ that carrier using the "address order best fit" strategy.</p>
<p>Implementation: Balanced binary search trees are
used. The time complexity is proportional to log N, where
N is the number of free blocks.</p>
@@ -200,12 +230,12 @@
<p>Strategy: Try to find the best fit, but settle for the best fit
found during a limited search.</p>
<p>Implementation: The implementation uses segregated free
- lists with a maximum block search depth (in each list) in
- order to find a good fit fast. When the maximum block
- search depth is small (by default 3) this implementation
+ lists with a maximum block search depth (in each list)
+ to find a good fit fast. When the maximum block
+ search depth is small (by default 3), this implementation
has a time complexity that is constant. The maximum block
- search depth is configurable via the
- <seealso marker="#M_mbsd">mbsd</seealso> parameter.</p>
+ search depth can be configured using parameter
+ <seealso marker="#M_mbsd"><c>mbsd</c></seealso>.</p>
</item>
<tag>A fit</tag>
<item>
@@ -213,43 +243,47 @@
block to see if it satisfies the request. This strategy is
only intended to be used for temporary allocations.</p>
<p>Implementation: Inspect the first block in a free-list.
- If it satisfies the request, it is used; otherwise, a new
+ If it satisfies the request, it is used, otherwise a new
carrier is created. The implementation has a time
complexity that is constant.</p>
- <p>As of erts version 5.6.1 the emulator will refuse to
- use this strategy on other allocators than <c>temp_alloc</c>.
- This since it will only cause problems for other allocators.</p>
+ <p>As from ERTS 5.6.1 the emulator refuses to
+ use this strategy on other allocators than <c>temp_alloc</c>.
+ This because it only causes problems for other allocators.</p>
</item>
</taglist>
- <p>Apart from the ordinary allocators described above a number of
- pre-allocators are used for some specific data types. These
- pre-allocators pre-allocate a fixed amount of memory for certain data
- types when the run-time system starts. As long as pre-allocated memory
- is available, it will be used. When no pre-allocated memory is
- available, memory will be allocated in ordinary allocators. These
- pre-allocators are typically much faster than the ordinary allocators,
- but can only satisfy a limited amount of requests.</p>
+
+ <p>Apart from the ordinary allocators described above, some
+ pre-allocators are used for some specific data types. These
+ pre-allocators pre-allocate a fixed amount of memory for certain data
+ types when the runtime system starts. As long as pre-allocated memory
+ is available, it is used. When no pre-allocated memory is
+ available, memory is allocated in ordinary allocators. These
+ pre-allocators are typically much faster than the ordinary allocators,
+ but can only satisfy a limited number of requests.</p>
</section>
<section>
<marker id="flags"></marker>
<title>System Flags Effecting erts_alloc</title>
<warning>
- <p>Only use these flags if you are absolutely sure what you are
- doing. Unsuitable settings may cause serious performance
+ <p>Only use these flags if you are sure what you are
+ doing. Unsuitable settings can cause serious performance
degradation and even a system crash at any time during
operation.</p>
</warning>
+
<p>Memory allocator system flags have the following syntax:
- <c><![CDATA[+M<S><P> <V>]]></c>
+ <c><![CDATA[+M<S><P> <V>]]></c>,
where <c><![CDATA[<S>]]></c> is a letter identifying a subsystem,
<c><![CDATA[<P>]]></c> is a parameter, and <c><![CDATA[<V>]]></c> is the
value to use. The flags can be passed to the Erlang emulator
- (<seealso marker="erl">erl</seealso>) as command line
+ (<seealso marker="erl"><c>erl(1)</c></seealso>) as command-line
arguments.</p>
- <p>System flags effecting specific allocators have an upper-case
+
+ <p>System flags effecting specific allocators have an uppercase
letter as <c><![CDATA[<S>]]></c>. The following letters are used for
- the currently present allocators:</p>
+ the allocators:</p>
+
<list type="bulleted">
<item><c>B: binary_alloc</c></item>
<item><c>D: std_alloc</c></item>
@@ -265,421 +299,501 @@
<item><c>X: exec_alloc</c></item>
<item><c>Y: sys_alloc</c></item>
</list>
- <p>The following flags are available for configuration of
- <c>mseg_alloc</c>:</p>
- <taglist>
- <tag><marker id="MMamcbf"/><c><![CDATA[+MMamcbf <size>]]></c></tag>
- <item>
- Absolute max cache bad fit (in kilobytes). A segment in the
- memory segment cache is not reused if its size exceeds the
- requested size with more than the value of this
- parameter. Default value is 4096. </item>
- <tag><marker id="MMrmcbf"/><c><![CDATA[+MMrmcbf <ratio>]]></c></tag>
- <item>
- Relative max cache bad fit (in percent). A segment in the
- memory segment cache is not reused if its size exceeds the
- requested size with more than relative max cache bad fit
- percent of the requested size. Default value is 20.</item>
- <tag><marker id="MMsco"/><c><![CDATA[+MMsco true|false]]></c></tag>
- <item>
- Set <seealso marker="#MMscs">super carrier</seealso> only flag. This
- flag defaults to <c>true</c>. When a super carrier is used and this
- flag is <c>true</c>, <c>mseg_alloc</c> will only create carriers
- in the super carrier. Note that the <c>alloc_util</c> framework may
- create <c>sys_alloc</c> carriers, so if you want all carriers to
- be created in the super carrier, you therefore want to disable use
- of <c>sys_alloc</c> carriers by also passing
- <seealso marker="#Musac"><c>+Musac false</c></seealso>. When the flag
- is <c>false</c>, <c>mseg_alloc</c> will try to create carriers outside
- of the super carrier when the super carrier is full.
- <br/><br/>
- <em>NOTE</em>: Setting this flag to <c>false</c> may not be supported
- on all systems. This flag will in that case be ignored.
- <br/><br/>
- <em>NOTE</em>: The super carrier cannot be enabled nor
- disabled on halfword heap systems. This flag will be
- ignored on halfword heap systems.
- </item>
- <tag><marker id="MMscrfsd"/><c><![CDATA[+MMscrfsd <amount>]]></c></tag>
- <item>
- Set <seealso marker="#MMscs">super carrier</seealso> reserved
- free segment descriptors. This parameter defaults to <c>65536</c>.
- This parameter determines the amount of memory to reserve for
- free segment descriptors used by the super carrier. If the system
- runs out of reserved memory for free segment descriptors, other
- memory will be used. This may however cause fragmentation issues,
- so you want to ensure that this never happens. The maximum amount
- of free segment descriptors used can be retrieved from the
- <c>erts_mmap</c> tuple part of the result from calling
- <seealso marker="erts:erlang#system_info_allocator_tuple">erlang:system_info({allocator, mseg_alloc})</seealso>.
- </item>
- <tag><marker id="MMscrpm"/><c><![CDATA[+MMscrpm true|false]]></c></tag>
- <item>
- Set <seealso marker="#MMscs">super carrier</seealso> reserve physical
- memory flag. This flag defaults to <c>true</c>. When this flag is
- <c>true</c>, physical memory will be reserved for the whole super
- carrier at once when it is created. The reservation will after that
- be left unchanged. When this flag is set to <c>false</c> only virtual
- address space will be reserved for the super carrier upon creation.
- The system will attempt to reserve physical memory upon carrier
- creations in the super carrier, and attempt to unreserve physical
- memory upon carrier destructions in the super carrier.
- <br/><br/>
- <em>NOTE</em>: What reservation of physical memory actually means
- highly depends on the operating system, and how it is configured. For
- example, different memory overcommit settings on Linux drastically
- change the behaviour. Also note, setting this flag to <c>false</c>
- may not be supported on all systems. This flag will in that case
- be ignored.
- <br/><br/>
- <em>NOTE</em>: The super carrier cannot be enabled nor
- disabled on halfword heap systems. This flag will be
- ignored on halfword heap systems.
- </item>
- <tag><marker id="MMscs"/><c><![CDATA[+MMscs <size in MB>]]></c></tag>
- <item>
- Set super carrier size (in MB). The super carrier size defaults to
- zero; i.e, the super carrier is by default disabled. The super
- carrier is a large continuous area in the virtual address space.
- <c>mseg_alloc</c> will always try to create new carriers in the super
- carrier if it exists. Note that the <c>alloc_util</c> framework may
- create <c>sys_alloc</c> carriers. For more information on this, see the
- documentation of the <seealso marker="#MMsco"><c>+MMsco</c></seealso>
- flag.
- <br/><br/>
- <em>NOTE</em>: The super carrier cannot be enabled nor
- disabled on halfword heap systems. This flag will be
- ignored on halfword heap systems.
- </item>
- <tag><marker id="MMmcs"/><c><![CDATA[+MMmcs <amount>]]></c></tag>
- <item>
- Max cached segments. The maximum number of memory segments
- stored in the memory segment cache. Valid range is
- 0-30. Default value is 10.</item>
- </taglist>
- <p>The following flags are available for configuration of
- <c>sys_alloc</c>:</p>
- <taglist>
- <tag><marker id="MYe"/><c>+MYe true</c></tag>
- <item>
- Enable <c>sys_alloc</c>. Note: <c>sys_alloc</c> cannot be disabled.</item>
- <tag><marker id="MYm"/><c>+MYm libc</c></tag>
- <item>
- <c>malloc</c> library to use. Currently only
- <c>libc</c> is available. <c>libc</c> enables the standard
- <c>libc</c> malloc implementation. By default <c>libc</c> is used.</item>
- <tag><marker id="MYtt"/><c><![CDATA[+MYtt <size>]]></c></tag>
- <item>
- Trim threshold size (in kilobytes). This is the maximum amount
- of free memory at the top of the heap (allocated by
- <c>sbrk</c>) that will be kept by <c>malloc</c> (not
- released to the operating system). When the amount of free
- memory at the top of the heap exceeds the trim threshold,
- <c>malloc</c> will release it (by calling
- <c>sbrk</c>). Trim threshold is given in kilobytes. Default
- trim threshold is 128. <em>Note:</em> This flag will
- only have any effect when the emulator has been linked with
- the GNU C library, and uses its <c>malloc</c> implementation.</item>
- <tag><marker id="MYtp"/><c><![CDATA[+MYtp <size>]]></c></tag>
- <item>
- Top pad size (in kilobytes). This is the amount of extra
- memory that will be allocated by <c>malloc</c> when
- <c>sbrk</c> is called to get more memory from the operating
- system. Default top pad size is 0. <em>Note:</em> This flag
- will only have any effect when the emulator has been linked
- with the GNU C library, and uses its <c>malloc</c>
- implementation.</item>
- </taglist>
- <p>The following flags are available for configuration of allocators
- based on <c>alloc_util</c>. If <c>u</c> is used as subsystem
- identifier (i.e., <c><![CDATA[<S> = u]]></c>) all allocators based on
- <c>alloc_util</c> will be effected. If <c>B</c>, <c>D</c>, <c>E</c>,
- <c>F</c>, <c>H</c>, <c>L</c>, <c>R</c>, <c>S</c>, or <c>T</c> is used as
- subsystem identifier, only the specific allocator identified will be
- effected:</p>
- <taglist>
- <tag><marker id="M_acul"/><c><![CDATA[+M<S>acul <utilization>|de]]></c></tag>
- <item>
- Abandon carrier utilization limit. A valid
- <c><![CDATA[<utilization>]]></c> is an integer in the range
- <c>[0, 100]</c> representing utilization in percent. When a
- utilization value larger than zero is used, allocator instances
- are allowed to abandon multiblock carriers. If <c>de</c> (default
- enabled) is passed instead of a <c><![CDATA[<utilization>]]></c>,
- a recomended non zero utilization value will be used. The actual
- value chosen depend on allocator type and may be changed between
- ERTS versions. Currently the default equals <c>de</c>, but this
- may be changed in the future. Carriers will be abandoned when
- memory utilization in the allocator instance falls below the
- utilization value used. Once a carrier has been abandoned, no new
- allocations will be made in it. When an allocator instance gets an
- increased multiblock carrier need, it will first try to fetch an
- abandoned carrier from an allocator instances of the same
- allocator type. If no abandoned carrier could be fetched, it will
- create a new empty carrier. When an abandoned carrier has been
- fetched it will function as an ordinary carrier. This feature has
- special requirements on the
- <seealso marker="#M_as">allocation strategy</seealso> used. Currently
- only the strategies <c>aoff</c>, <c>aoffcbf</c> and <c>aoffcaobf</c> support
- abandoned carriers. This feature also requires
- <seealso marker="#M_t">multiple thread specific instances</seealso>
- to be enabled. When enabling this feature, multiple thread specific
- instances will be enabled if not already enabled, and the
- <c>aoffcbf</c> strategy will be enabled if current strategy does not
- support abandoned carriers. This feature can be enabled on all
- allocators based on the <c>alloc_util</c> framework with the
- exception of <c>temp_alloc</c> (which would be pointless).
- </item>
- <tag><marker id="M_as"/><c><![CDATA[+M<S>as bf|aobf|aoff|aoffcbf|aoffcaobf|gf|af]]></c></tag>
- <item>
- Allocation strategy. Valid strategies are <c>bf</c> (best fit),
- <c>aobf</c> (address order best fit), <c>aoff</c> (address order first fit),
- <c>aoffcbf</c> (address order first fit carrier best fit),
- <c>aoffcaobf</c> (address order first fit carrier address order best fit),
- <c>gf</c> (good fit), and <c>af</c> (a fit). See
- <seealso marker="#strategy">the description of allocation strategies</seealso> in "the <c>alloc_util</c> framework" section.</item>
- <tag><marker id="M_asbcst"/><c><![CDATA[+M<S>asbcst <size>]]></c></tag>
- <item>
- Absolute singleblock carrier shrink threshold (in
- kilobytes). When a block located in an
- <c>mseg_alloc</c> singleblock carrier is shrunk, the carrier
- will be left unchanged if the amount of unused memory is less
- than this threshold; otherwise, the carrier will be shrunk.
- See also <seealso marker="#M_rsbcst">rsbcst</seealso>.</item>
- <tag><marker id="M_e"/><c><![CDATA[+M<S>e true|false]]></c></tag>
- <item>
- Enable allocator <c><![CDATA[<S>]]></c>.</item>
- <tag><marker id="M_lmbcs"/><c><![CDATA[+M<S>lmbcs <size>]]></c></tag>
- <item>
- Largest (<c>mseg_alloc</c>) multiblock carrier size (in
- kilobytes). See <seealso marker="#mseg_mbc_sizes">the description
- on how sizes for mseg_alloc multiblock carriers are decided</seealso>
- in "the <c>alloc_util</c> framework" section. On 32-bit Unix style OS
- this limit can not be set higher than 128 megabyte.</item>
- <tag><marker id="M_mbcgs"/><c><![CDATA[+M<S>mbcgs <ratio>]]></c></tag>
- <item>
- (<c>mseg_alloc</c>) multiblock carrier growth stages. See
- <seealso marker="#mseg_mbc_sizes">the description on how sizes for
- mseg_alloc multiblock carriers are decided</seealso>
- in "the <c>alloc_util</c> framework" section.</item>
- <tag><marker id="M_mbsd"/><c><![CDATA[+M<S>mbsd <depth>]]></c></tag>
- <item>
- Max block search depth. This flag has effect only if the
- good fit strategy has been selected for allocator
- <c><![CDATA[<S>]]></c>. When the good fit strategy is used, free
- blocks are placed in segregated free-lists. Each free list
- contains blocks of sizes in a specific range. The max block
- search depth sets a limit on the maximum number of blocks to
- inspect in a free list during a search for suitable block
- satisfying the request.</item>
- <tag><marker id="M_mmbcs"/><c><![CDATA[+M<S>mmbcs <size>]]></c></tag>
- <item>
- Main multiblock carrier size. Sets the size of the main
- multiblock carrier for allocator <c><![CDATA[<S>]]></c>. The main
- multiblock carrier is allocated via <c><![CDATA[sys_alloc]]></c> and is
- never deallocated.</item>
- <tag><marker id="M_mmmbc"/><c><![CDATA[+M<S>mmmbc <amount>]]></c></tag>
- <item>
- Max <c>mseg_alloc</c> multiblock carriers. Maximum number of
- multiblock carriers allocated via <c>mseg_alloc</c> by
- allocator <c><![CDATA[<S>]]></c>. When this limit has been reached,
- new multiblock carriers will be allocated via
- <c>sys_alloc</c>.</item>
- <tag><marker id="M_mmsbc"/><c><![CDATA[+M<S>mmsbc <amount>]]></c></tag>
- <item>
- Max <c>mseg_alloc</c> singleblock carriers. Maximum number of
- singleblock carriers allocated via <c>mseg_alloc</c> by
- allocator <c><![CDATA[<S>]]></c>. When this limit has been reached,
- new singleblock carriers will be allocated via
- <c>sys_alloc</c>.</item>
- <tag><marker id="M_ramv"/><c><![CDATA[+M<S>ramv <bool>]]></c></tag>
- <item>
- Realloc always moves. When enabled, reallocate operations will
- more or less be translated into an allocate, copy, free sequence.
- This often reduce memory fragmentation, but costs performance.
- </item>
- <tag><marker id="M_rmbcmt"/><c><![CDATA[+M<S>rmbcmt <ratio>]]></c></tag>
- <item>
- Relative multiblock carrier move threshold (in percent). When
- a block located in a multiblock carrier is shrunk,
- the block will be moved if the ratio of the size of the returned
- memory compared to the previous size is more than this threshold;
- otherwise, the block will be shrunk at current location.</item>
- <tag><marker id="M_rsbcmt"/><c><![CDATA[+M<S>rsbcmt <ratio>]]></c></tag>
- <item>
- Relative singleblock carrier move threshold (in percent). When
- a block located in a singleblock carrier is shrunk to
- a size smaller than the value of the
- <seealso marker="#M_sbct">sbct</seealso> parameter,
- the block will be left unchanged in the singleblock carrier if
- the ratio of unused memory is less than this threshold;
- otherwise, it will be moved into a multiblock carrier. </item>
- <tag><marker id="M_rsbcst"/><c><![CDATA[+M<S>rsbcst <ratio>]]></c></tag>
- <item>
- Relative singleblock carrier shrink threshold (in
- percent). When a block located in an <c>mseg_alloc</c>
- singleblock carrier is shrunk, the carrier will be left
- unchanged if the ratio of unused memory is less than this
- threshold; otherwise, the carrier will be shrunk.
- See also <seealso marker="#M_asbcst">asbcst</seealso>.</item>
- <tag><marker id="M_sbct"/><c><![CDATA[+M<S>sbct <size>]]></c></tag>
- <item>
- Singleblock carrier threshold. Blocks larger than this
- threshold will be placed in singleblock carriers. Blocks
- smaller than this threshold will be placed in multiblock
- carriers. On 32-bit Unix style OS this threshold can not be set higher
- than 8 megabytes.</item>
- <tag><marker id="M_smbcs"/><c><![CDATA[+M<S>smbcs <size>]]></c></tag>
- <item>
- Smallest (<c>mseg_alloc</c>) multiblock carrier size (in
- kilobytes). See <seealso marker="#mseg_mbc_sizes">the description
- on how sizes for mseg_alloc multiblock carriers are decided</seealso>
- in "the <c>alloc_util</c> framework" section.</item>
- <tag><marker id="M_t"/><c><![CDATA[+M<S>t true|false]]></c></tag>
- <item>
- <p>Multiple, thread specific instances of the allocator.
- This option will only have any effect on the runtime system
- with SMP support. Default behaviour on the runtime system with
- SMP support is <c>NoSchedulers+1</c> instances. Each scheduler will use
- a lock-free instance of its own and other threads will use
- a common instance.</p>
- <p>It was previously (before ERTS version 5.9) possible to configure
- a smaller amount of thread specific instances than schedulers.
- This is, however, not possible any more.</p>
- </item>
- </taglist>
- <p>Currently the following flags are available for configuration of
- <c>alloc_util</c>, i.e. all allocators based on <c>alloc_util</c>
- will be effected:</p>
- <taglist>
- <tag><marker id="Muycs"/><c><![CDATA[+Muycs <size>]]></c></tag>
- <item>
- <c>sys_alloc</c> carrier size. Carriers allocated via
- <c>sys_alloc</c> will be allocated in sizes which are
- multiples of the <c>sys_alloc</c> carrier size. This is not
- true for main multiblock carriers and carriers allocated
- during a memory shortage, though.</item>
- <tag><marker id="Mummc"/><c><![CDATA[+Mummc <amount>]]></c></tag>
- <item>
- Max <c>mseg_alloc</c> carriers. Maximum number of carriers
- placed in separate memory segments. When this limit has been
- reached, new carriers will be placed in memory retrieved from
- <c>sys_alloc</c>.</item>
- <tag><marker id="Musac"/><c><![CDATA[+Musac <bool>]]></c></tag>
- <item>
- Allow <c>sys_alloc</c> carriers. By default <c>true</c>. If
- set to <c>false</c>, <c>sys_alloc</c> carriers will never be
- created by allocators using the <c>alloc_util</c> framework.</item>
- </taglist>
- <p>The following flag is special for <c>literal_alloc</c>:</p>
- <taglist>
- <tag><marker id="MIscs"/><c><![CDATA[+MIscs <size in MB>]]></c></tag>
- <item>
- <c>literal_alloc</c> super carrier size (in MB). The amount of
- <em>virtual</em> address space reserved for literal terms in
- Erlang code on 64-bit architectures. The default is 1024 (1GB)
- and is usually sufficient. The flag is ignored on 32-bit
- architectures.</item>
- </taglist>
- <p>The following flag is special for <c>exec_alloc</c>:</p>
- <taglist>
- <tag><marker id="MIscs"/><c><![CDATA[+MXscs <size in MB>]]></c></tag>
- <item>
- <c>exec_alloc</c> super carrier size (in MB). The amount of
- <em>virtual</em> address space reserved for native executable code
- used by hipe on specific architectures (x86_64). The default is 512 MB.
- </item>
- </taglist>
- <p>Instrumentation flags:</p>
- <taglist>
- <tag><marker id="Mim"/><c>+Mim true|false</c></tag>
- <item>
- A map over current allocations is kept by the emulator. The
- allocation map can be retrieved via the <c>instrument</c>
- module. <c>+Mim true</c> implies <c>+Mis true</c>.
- <c>+Mim true</c> is the same as
- <seealso marker="erl#instr">-instr</seealso>.</item>
- <tag><marker id="Mis"/><c>+Mis true|false</c></tag>
- <item>
- Status over allocated memory is kept by the emulator. The
- allocation status can be retrieved via the <c>instrument</c>
- module.</item>
- <tag><marker id="Mit"/><c>+Mit X</c></tag>
- <item>
- Reserved for future use. Do <em>not</em> use this flag.</item>
- </taglist>
- <note>
- <p>When instrumentation of the emulator is enabled, the emulator
- uses more memory and runs slower.</p>
- </note>
- <p>Other flags:</p>
- <taglist>
- <tag><marker id="Mea"/><c>+Mea min|max|r9c|r10b|r11b|config</c></tag>
- <item>
+
+ <section>
+ <title>Flags for Configuration of mseg_alloc</title>
+ <taglist>
+ <tag><marker id="MMamcbf"/><c><![CDATA[+MMamcbf <size>]]></c></tag>
+ <item>
+ <p>Absolute maximum cache bad fit (in kilobytes). A segment in the
+ memory segment cache is not reused if its size exceeds the
+ requested size with more than the value of this
+ parameter. Defaults to <c>4096</c>.</p>
+ </item>
+ <tag><marker id="MMrmcbf"/><c><![CDATA[+MMrmcbf <ratio>]]></c></tag>
+ <item>
+ <p>Relative maximum cache bad fit (in percent). A segment in the
+ memory segment cache is not reused if its size exceeds the
+ requested size with more than relative maximum cache bad fit
+ percent of the requested size. Defaults to <c>20</c>.</p>
+ </item>
+ <tag><marker id="MMsco"/><c><![CDATA[+MMsco true|false]]></c></tag>
+ <item>
+ <p>Sets <seealso marker="#MMscs">super carrier</seealso> only flag.
+ Defaults to <c>true</c>. When a super carrier is used and this
+ flag is <c>true</c>, <c>mseg_alloc</c> only creates carriers in
+ the super carrier. Notice that the <c>alloc_util</c> framework can
+ create <c>sys_alloc</c> carriers, so if you want all carriers to
+ be created in the super carrier, you therefore want to disable use
+ of <c>sys_alloc</c> carriers by also passing
+ <seealso marker="#Musac"><c>+Musac false</c></seealso>. When
+ the flag is <c>false</c>, <c>mseg_alloc</c> tries to create carriers
+ outside of the super carrier when the super carrier is full.</p>
+ <note>
+ <p>Setting this flag to <c>false</c> is not supported
+ on all systems. The flag is then ignored.</p>
+ </note>
+ </item>
+ <tag><marker id="MMscrfsd"/><c><![CDATA[+MMscrfsd <amount>]]></c></tag>
+ <item>
+ <p>Sets <seealso marker="#MMscs">super carrier</seealso> reserved
+ free segment descriptors. Defaults to <c>65536</c>.
+ This parameter determines the amount of memory to reserve for
+ free segment descriptors used by the super carrier. If the system
+ runs out of reserved memory for free segment descriptors, other
+ memory is used. This can however cause fragmentation issues,
+ so you want to ensure that this never happens. The maximum amount
+ of free segment descriptors used can be retrieved from the
+ <c>erts_mmap</c> tuple part of the result from calling
+ <seealso marker="erts:erlang#system_info_allocator_tuple">
+ <c>erlang:system_info({allocator, mseg_alloc})</c></seealso>.</p>
+ </item>
+ <tag><marker id="MMscrpm"/><c><![CDATA[+MMscrpm true|false]]></c></tag>
+ <item>
+ <p>Sets <seealso marker="#MMscs">super carrier</seealso> reserve
+ physical memory flag. Defaults to <c>true</c>. When this flag is
+ <c>true</c>, physical memory is reserved for the whole super
+ carrier at once when it is created. The reservation is after that
+ left unchanged. When this flag is set to <c>false</c>, only virtual
+ address space is reserved for the super carrier upon creation.
+ The system attempts to reserve physical memory upon carrier
+ creations in the super carrier, and attempt to unreserve physical
+ memory upon carrier destructions in the super carrier.</p>
+ <note>
+ <p>What reservation of physical memory means, highly
+ depends on the operating system, and how it is configured. For
+ example, different memory overcommit settings on Linux drastically
+ change the behavior.</p>
+ <p>Setting this flag to <c>false</c> is possibly not supported on
+ all systems. The flag is then ignored.</p>
+ </note>
+ </item>
+ <tag><marker id="MMscs"/><c><![CDATA[+MMscs <size in MB>]]></c></tag>
+ <item>
+ <p>Sets super carrier size (in MB). Defaults to <c>0</c>, that is,
+ the super carrier is by default disabled. The super
+ carrier is a large continuous area in the virtual address space.
+ <c>mseg_alloc</c> always tries to create new carriers in the super
+ carrier if it exists. Notice that the <c>alloc_util</c> framework
+ can create <c>sys_alloc</c> carriers. For more information, see
+ <seealso marker="#MMsco"><c>+MMsco</c></seealso>.</p>
+ </item>
+ <tag><marker id="MMmcs"/><c><![CDATA[+MMmcs <amount>]]></c></tag>
+ <item>
+ <p>Maximum cached segments. The maximum number of memory segments
+ stored in the memory segment cache. Valid range is <c>[0, 30]</c>.
+ Defaults to <c>10</c>.</p>
+ </item>
+ </taglist>
+ </section>
+
+ <section>
+ <title>Flags for Configuration of sys_alloc</title>
+ <taglist>
+ <tag><marker id="MYe"/><c>+MYe true</c></tag>
+ <item>
+ <p>Enables <c>sys_alloc</c>.</p>
+ <note>
+ <p><c>sys_alloc</c> cannot be disabled.</p>
+ </note>
+ </item>
+ <tag><marker id="MYm"/><c>+MYm libc</c></tag>
+ <item>
+ <p><c>malloc</c> library to use. Only
+ <c>libc</c> is available. <c>libc</c> enables the standard
+ <c>libc</c> <c>malloc</c> implementation. By default <c>libc</c>
+ is used.</p>
+ </item>
+ <tag><marker id="MYtt"/><c><![CDATA[+MYtt <size>]]></c></tag>
+ <item>
+ <p>Trim threshold size (in kilobytes). This is the maximum amount
+ of free memory at the top of the heap (allocated by
+ <c>sbrk</c>) that is kept by <c>malloc</c> (not
+ released to the operating system). When the amount of free
+ memory at the top of the heap exceeds the trim threshold,
+ <c>malloc</c> releases it (by calling <c>sbrk</c>).
+ Trim threshold is specified in kilobytes.
+ Defaults to <c>128</c>.</p>
+ <note>
+ <p>This flag has effect only when the emulator is linked with
+ the GNU C library, and uses its <c>malloc</c> implementation.</p>
+ </note>
+ </item>
+ <tag><marker id="MYtp"/><c><![CDATA[+MYtp <size>]]></c></tag>
+ <item>
+ <p>Top pad size (in kilobytes). This is the amount of extra
+ memory that is allocated by <c>malloc</c> when
+ <c>sbrk</c> is called to get more memory from the operating
+ system. Defaults to <c>0</c>.</p>
+ <note>
+ <p>This flag has effect only when the emulator is linked with
+ the GNU C library, and uses its <c>malloc</c> implementation.</p>
+ </note>
+ </item>
+ </taglist>
+ </section>
+
+ <section>
+ <title>Flags for Configuration of Allocators Based on alloc_util</title>
+ <p>If <c>u</c> is used as subsystem identifier (that is,
+ <c><![CDATA[<S> = u]]></c>), all allocators based on
+ <c>alloc_util</c> are effected. If <c>B</c>, <c>D</c>, <c>E</c>,
+ <c>F</c>, <c>H</c>, <c>L</c>, <c>R</c>, <c>S</c>, or <c>T</c> is used
+ as subsystem identifier, only the specific allocator identifier is
+ effected.</p>
+
+ <taglist>
+ <tag><marker id="M_acul"/><c><![CDATA[+M<S>acul <utilization>|de]]></c>
+ </tag>
+ <item>
+ <p>Abandon carrier utilization limit. A valid
+ <c><![CDATA[<utilization>]]></c> is an integer in the range
+ <c>[0, 100]</c> representing utilization in percent. When a
+ utilization value &gt; 0 is used, allocator instances
+ are allowed to abandon multiblock carriers. If <c>de</c> (default
+ enabled) is passed instead of a <c><![CDATA[<utilization>]]></c>,
+ a recomended non-zero utilization value is used. The value
+ chosen depends on the allocator type and can be changed between
+ ERTS versions. Defaults to <c>de</c>, but this
+ can be changed in the future.</p>
+ <p>Carriers are abandoned when
+ memory utilization in the allocator instance falls below the
+ utilization value used. Once a carrier is abandoned, no new
+ allocations are made in it. When an allocator instance gets an
+ increased multiblock carrier need, it first tries to fetch an
+ abandoned carrier from an allocator instance of the same
+ allocator type. If no abandoned carrier can be fetched, it
+ creates a new empty carrier. When an abandoned carrier has been
+ fetched, it will function as an ordinary carrier. This feature has
+ special requirements on the
+ <seealso marker="#M_as">allocation strategy</seealso> used. Only
+ the strategies <c>aoff</c>, <c>aoffcbf</c>, and <c>aoffcaobf</c>
+ support abandoned carriers.</p>
+ <p>This feature also requires
+ <seealso marker="#M_t">multiple thread specific instances</seealso>
+ to be enabled. When enabling this feature, multiple thread-specific
+ instances are enabled if not already enabled, and the
+ <c>aoffcbf</c> strategy is enabled if the current strategy does not
+ support abandoned carriers. This feature can be enabled on all
+ allocators based on the <c>alloc_util</c> framework, except
+ <c>temp_alloc</c> (which would be pointless).</p>
+ </item>
+ <tag><marker id="M_as"/>
+ <c><![CDATA[+M<S>as bf|aobf|aoff|aoffcbf|aoffcaobf|gf|af]]></c></tag>
+ <item>
+ <p>Allocation strategy. The following strategies are valid:</p>
+ <list type="bulleted">
+ <item><c>bf</c> (best fit)</item>
+ <item><c>aobf</c> (address order best fit)</item>
+ <item><c>aoff</c> (address order first fit)</item>
+ <item><c>aoffcbf</c> (address order first fit carrier best fit)
+ </item>
+ <item><c>aoffcaobf</c> (address order first fit carrier address
+ order best fit)</item>
+ <item><c>gf</c> (good fit)</item>
+ <item><c>af</c> (a fit)</item>
+ </list>
+ <p>See the description of allocation strategies in section
+ <seealso marker="#strategy">The alloc_util Framework</seealso>.</p>
+ </item>
+ <tag><marker id="M_asbcst"/><c><![CDATA[+M<S>asbcst <size>]]></c></tag>
+ <item>
+ <p>Absolute singleblock carrier shrink threshold (in
+ kilobytes). When a block located in an
+ <c>mseg_alloc</c> singleblock carrier is shrunk, the carrier
+ is left unchanged if the amount of unused memory is less
+ than this threshold, otherwise the carrier is shrunk.
+ See also <seealso marker="#M_rsbcst"><c>rsbcst</c></seealso>.</p>
+ </item>
+ <tag><marker id="M_e"/><c><![CDATA[+M<S>e true|false]]></c></tag>
+ <item>
+ <p>Enables allocator <c><![CDATA[<S>]]></c>.</p>
+ </item>
+ <tag><marker id="M_lmbcs"/><c><![CDATA[+M<S>lmbcs <size>]]></c></tag>
+ <item>
+ <p>Largest (<c>mseg_alloc</c>) multiblock carrier size (in kilobytes).
+ See the description on how sizes for <c>mseg_alloc</c> multiblock
+ carriers are decided in section
+ <seealso marker="#mseg_mbc_sizes">
+ The alloc_util Framework</seealso>. On
+ 32-bit Unix style OS this limit cannot be set &gt; 128 MB.</p>
+ </item>
+ <tag><marker id="M_mbcgs"/><c><![CDATA[+M<S>mbcgs <ratio>]]></c></tag>
+ <item>
+ <p>(<c>mseg_alloc</c>) multiblock carrier growth stages.
+ See the description on how sizes for <c>mseg_alloc</c> multiblock
+ carriers are decided in section
+ <seealso marker="#mseg_mbc_sizes">
+ The alloc_util Framework</seealso>.</p>
+ </item>
+ <tag><marker id="M_mbsd"/><c><![CDATA[+M<S>mbsd <depth>]]></c></tag>
+ <item>
+ <p>Maximum block search depth. This flag has effect only if the
+ good fit strategy is selected for allocator
+ <c><![CDATA[<S>]]></c>. When the good fit strategy is used, free
+ blocks are placed in segregated free-lists. Each free-list
+ contains blocks of sizes in a specific range. The maxiumum block
+ search depth sets a limit on the maximum number of blocks to
+ inspect in a free-list during a search for suitable block
+ satisfying the request.</p>
+ </item>
+ <tag><marker id="M_mmbcs"/><c><![CDATA[+M<S>mmbcs <size>]]></c></tag>
+ <item>
+ <p>Main multiblock carrier size. Sets the size of the main
+ multiblock carrier for allocator <c><![CDATA[<S>]]></c>. The main
+ multiblock carrier is allocated through <c><![CDATA[sys_alloc]]></c>
+ and is never deallocated.</p>
+ </item>
+ <tag><marker id="M_mmmbc"/><c><![CDATA[+M<S>mmmbc <amount>]]></c></tag>
+ <item>
+ <p>Maximum <c>mseg_alloc</c> multiblock carriers. Maximum number of
+ multiblock carriers allocated through <c>mseg_alloc</c> by
+ allocator <c><![CDATA[<S>]]></c>. When this limit is reached,
+ new multiblock carriers are allocated through
+ <c>sys_alloc</c>.</p>
+ </item>
+ <tag><marker id="M_mmsbc"/><c><![CDATA[+M<S>mmsbc <amount>]]></c></tag>
+ <item>
+ <p>Maximum <c>mseg_alloc</c> singleblock carriers. Maximum number of
+ singleblock carriers allocated through <c>mseg_alloc</c> by
+ allocator <c><![CDATA[<S>]]></c>. When this limit is reached,
+ new singleblock carriers are allocated through
+ <c>sys_alloc</c>.</p>
+ </item>
+ <tag><marker id="M_ramv"/><c><![CDATA[+M<S>ramv <bool>]]></c></tag>
+ <item>
+ <p>Realloc always moves. When enabled, reallocate operations are
+ more or less translated into an allocate, copy, free sequence.
+ This often reduces memory fragmentation, but costs performance.</p>
+ </item>
+ <tag><marker id="M_rmbcmt"/><c><![CDATA[+M<S>rmbcmt <ratio>]]></c></tag>
+ <item>
+ <p>Relative multiblock carrier move threshold (in percent). When
+ a block located in a multiblock carrier is shrunk,
+ the block is moved if the ratio of the size of the returned
+ memory compared to the previous size is more than this threshold,
+ otherwise the block is shrunk at the current location.</p>
+ </item>
+ <tag><marker id="M_rsbcmt"/><c><![CDATA[+M<S>rsbcmt <ratio>]]></c></tag>
+ <item>
+ <p>Relative singleblock carrier move threshold (in percent). When
+ a block located in a singleblock carrier is shrunk to
+ a size smaller than the value of parameter
+ <seealso marker="#M_sbct"><c>sbct</c></seealso>,
+ the block is left unchanged in the singleblock carrier if
+ the ratio of unused memory is less than this threshold,
+ otherwise it is moved into a multiblock carrier.</p>
+ </item>
+ <tag><marker id="M_rsbcst"/><c><![CDATA[+M<S>rsbcst <ratio>]]></c></tag>
+ <item>
+ <p>Relative singleblock carrier shrink threshold (in
+ percent). When a block located in an <c>mseg_alloc</c>
+ singleblock carrier is shrunk, the carrier is left
+ unchanged if the ratio of unused memory is less than this
+ threshold, otherwise the carrier is shrunk.
+ See also <seealso marker="#M_asbcst"><c>asbcst</c></seealso>.</p>
+ </item>
+ <tag><marker id="M_sbct"/><c><![CDATA[+M<S>sbct <size>]]></c></tag>
+ <item>
+ <p>Singleblock carrier threshold. Blocks larger than this
+ threshold are placed in singleblock carriers. Blocks
+ smaller than this threshold are placed in multiblock
+ carriers. On 32-bit Unix style OS this threshold cannot be set
+ &gt; 8 MB.</p>
+ </item>
+ <tag><marker id="M_smbcs"/><c><![CDATA[+M<S>smbcs <size>]]></c></tag>
+ <item>
+ <p>Smallest (<c>mseg_alloc</c>) multiblock carrier size (in
+ kilobytes). See the description on how sizes for <c>mseg_alloc</c>
+ multiblock carriers are decided in section
+ <seealso marker="#mseg_mbc_sizes">
+ The alloc_util Framework</seealso>.</p>
+ </item>
+ <tag><marker id="M_t"/><c><![CDATA[+M<S>t true|false]]></c></tag>
+ <item>
+ <p>Multiple, thread-specific instances of the allocator.
+ This option has only effect on the runtime system
+ with SMP support. Default behavior on the runtime system with
+ SMP support is <c>NoSchedulers+1</c> instances. Each scheduler
+ uses a lock-free instance of its own and other threads use
+ a common instance.</p>
+ <p>Before ERTS 5.9 it was possible to configure
+ a smaller number of thread-specific instances than schedulers.
+ This is, however, not possible anymore.</p>
+ </item>
+ </taglist>
+ </section>
+
+ <section>
+ <title>Flags for Configuration of alloc_util</title>
+ <p>All allocators based on <c>alloc_util</c> are effected.</p>
+
+ <taglist>
+ <tag><marker id="Muycs"/><c><![CDATA[+Muycs <size>]]></c></tag>
+ <item>
+ <p><c>sys_alloc</c> carrier size. Carriers allocated through
+ <c>sys_alloc</c> are allocated in sizes that are
+ multiples of the <c>sys_alloc</c> carrier size. This is not
+ true for main multiblock carriers and carriers allocated
+ during a memory shortage, though.</p>
+ </item>
+ <tag><marker id="Mummc"/><c><![CDATA[+Mummc <amount>]]></c></tag>
+ <item>
+ <p>Maximum <c>mseg_alloc</c> carriers. Maximum number of carriers
+ placed in separate memory segments. When this limit is
+ reached, new carriers are placed in memory retrieved from
+ <c>sys_alloc</c>.</p>
+ </item>
+ <tag><marker id="Musac"/><c><![CDATA[+Musac <bool>]]></c></tag>
+ <item>
+ <p>Allow <c>sys_alloc</c> carriers. Defaults to <c>true</c>.
+ If set to <c>false</c>, <c>sys_alloc</c> carriers are never
+ created by allocators using the <c>alloc_util</c> framework.</p>
+ </item>
+ </taglist>
+ </section>
+
+ <section>
+ <title>Special Flag for literal_alloc</title>
<taglist>
- <tag><c>min</c></tag>
+ <tag><marker id="MIscs"/><c><![CDATA[+MIscs <size in MB>]]></c></tag>
<item>
- Disables all allocators that can be disabled.
- </item>
+ <p><c>literal_alloc</c> super carrier size (in MB). The amount of
+ <em>virtual</em> address space reserved for literal terms in
+ Erlang code on 64-bit architectures. Defaults to <c>1024</c>
+ (that is, 1 GB), which is usually sufficient.
+ The flag is ignored on 32-bit architectures.</p>
+ </item>
+ </taglist>
+ </section>
- <tag><c>max</c></tag>
+ <section>
+ <title>Special Flag for exec_alloc</title>
+ <taglist>
+ <tag><marker id="MXscs"/><c><![CDATA[+MXscs <size in MB>]]></c></tag>
<item>
- Enables all allocators (currently default).
- </item>
+ <p><c>exec_alloc</c> super carrier size (in MB). The amount of
+ <em>virtual</em> address space reserved for native executable code
+ used by the <seealso marker="hipe:HiPE_app"><c>HiPE</c></seealso> application
+ on specific architectures (x86_64). Defaults to <c>512</c>.</p>
+ </item>
+ </taglist>
+ </section>
- <tag><c>r9c|r10b|r11b</c></tag>
+ <section>
+ <title>Instrumentation Flags</title>
+ <taglist>
+ <tag><marker id="Mim"/><c>+Mim true|false</c></tag>
<item>
- Configures all allocators as they were configured in respective
- OTP release. These will eventually be removed.
- </item>
+ <p>A map over current allocations is kept by the emulator.
+ The allocation map can be retrieved through module
+ <seealso marker="tools:instrument">
+ <c>instrument(3)</c></seealso>. <c>+Mim true</c>
+ implies <c>+Mis true</c>. <c>+Mim true</c> is the same as flag
+ <seealso marker="erl#instr"><c>-instr</c></seealso> in
+ <c>erl(1)</c>.</p>
+ </item>
+ <tag><marker id="Mis"/><c>+Mis true|false</c></tag>
+ <item>
+ <p>Status over allocated memory is kept by the emulator.
+ The allocation status can be retrieved through module
+ <seealso marker="tools:instrument">
+ <c>instrument(3)</c></seealso>.</p>
+ </item>
+ <tag><marker id="Mit"/><c>+Mit X</c></tag>
+ <item>
+ <p>Reserved for future use. Do <em>not</em> use this flag.</p>
+ </item>
+ </taglist>
- <tag><c>config</c></tag>
+ <note>
+ <p>When instrumentation of the emulator is enabled, the emulator
+ uses more memory and runs slower.</p>
+ </note>
+ </section>
+
+ <section>
+ <title>Other Flags</title>
+ <taglist>
+ <tag><marker id="Mea"/><c>+Mea min|max|r9c|r10b|r11b|config</c></tag>
+ <item>
+ <p>Options:</p>
+ <taglist>
+ <tag><c>min</c></tag>
+ <item>
+ <p>Disables all allocators that can be disabled.</p>
+ </item>
+ <tag><c>max</c></tag>
+ <item>
+ <p>Enables all allocators (default).</p>
+ </item>
+ <tag><c>r9c|r10b|r11b</c></tag>
+ <item>
+ <p>Configures all allocators as they were configured in respective
+ Erlang/OTP release. These will eventually be removed.</p>
+ </item>
+ <tag><c>config</c></tag>
+ <item>
+ <p>Disables features that cannot be enabled while creating an
+ allocator configuration with
+ <seealso marker="runtime_tools:erts_alloc_config">
+ <c>erts_alloc_config(3)</c></seealso>.</p>
+ <note>
+ <p>This option is to be used only while running
+ <c>erts_alloc_config(3)</c>, <em>not</em> when
+ using the created configuration.</p>
+ </note>
+ </item>
+ </taglist>
+ </item>
+ <tag><marker id="Mlpm"/><c>+Mlpm all|no</c></tag>
<item>
- Disables features that cannot be enabled while creating an
- allocator configuration with
- <seealso marker="runtime_tools:erts_alloc_config">erts_alloc_config(3)</seealso>.
- Note, this option should only be used while running
- <c>erts_alloc_config</c>, <em>not</em> when using the created
- configuration.
+ <p>Lock physical memory. Defaults to <c>no</c>, that is,
+ no physical memory is locked. If set to <c>all</c>, all
+ memory mappings made by the runtime system are locked into
+ physical memory. If set to <c>all</c>, the runtime system fails to
+ start if this feature is not supported, the user has not got enough
+ privileges, or the user is not allowed to lock enough physical
+ memory. The runtime system also fails with an out of memory
+ condition if the user limit on the amount of locked memory is
+ reached.</p>
</item>
</taglist>
- </item>
- <tag><marker id="Mlpm"/><c>+Mlpm all|no</c></tag>
- <item>Lock physical memory. The default value is <c>no</c>, i.e.,
- no physical memory will be locked. If set to <c>all</c>, all
- memory mappings made by the runtime system, will be locked into
- physical memory. If set to <c>all</c>, the runtime system will fail
- to start if this feature is not supported, the user has not got enough
- privileges, or the user is not allowed to lock enough physical memory.
- The runtime system will also fail with an out of memory condition
- if the user limit on the amount of locked memory is reached.
- </item>
- </taglist>
- <p>Only some default values have been presented
- here.
- <seealso marker="erts:erlang#system_info_allocator">erlang:system_info(allocator)</seealso>,
- and
- <seealso marker="erts:erlang#system_info_allocator_tuple">erlang:system_info({allocator, Alloc})</seealso>
- can be used in order to obtain currently used settings and current
- status of the allocators.</p>
+ </section>
+ </section>
+
+ <section>
+ <title>Notes</title>
+ <p>Only some default values have been presented here. For information
+ about the currently used settings and the current status of the
+ allocators, see
+ <seealso marker="erts:erlang#system_info_allocator">
+ <c>erlang:system_info(allocator)</c></seealso> and
+ <seealso marker="erts:erlang#system_info_allocator_tuple">
+ <c>erlang:system_info({allocator, Alloc})</c></seealso>.</p>
+
<note>
- <p>Most of these flags are highly implementation dependent, and they
- may be changed or removed without prior notice.</p>
+ <p>Most of these flags are highly implementation-dependent and
+ can be changed or removed without prior notice.</p>
<p><c>erts_alloc</c> is not obliged to strictly use the settings that
- have been passed to it (it may even ignore them).</p>
+ have been passed to it (it can even ignore them).</p>
</note>
- <p><seealso marker="runtime_tools:erts_alloc_config">erts_alloc_config(3)</seealso>
- is a tool that can be used to aid creation of an
+
+ <p>The <seealso marker="runtime_tools:erts_alloc_config">
+ <c>erts_alloc_config(3)</c></seealso>
+ tool can be used to aid creation of an
<c>erts_alloc</c> configuration that is suitable for a limited
number of runtime scenarios.</p>
</section>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="runtime_tools:erts_alloc_config">erts_alloc_config(3)</seealso>,
- <seealso marker="erl">erl(1)</seealso>,
- <seealso marker="tools:instrument">instrument(3)</seealso>,
- <seealso marker="erts:erlang">erlang(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="erl"><c>erl(1)</c></seealso>,
+ <seealso marker="erlang"><c>erlang(3)</c></seealso>,
+ <seealso marker="runtime_tools:erts_alloc_config">
+ <c>erts_alloc_config(3)</c></seealso>,
+ <seealso marker="tools:instrument">
+ <c>instrument(3)</c></seealso></p>
</section>
</cref>
diff --git a/erts/doc/src/escript.xml b/erts/doc/src/escript.xml
index f12f76890c..1d5d280338 100644
--- a/erts/doc/src/escript.xml
+++ b/erts/doc/src/escript.xml
@@ -4,7 +4,7 @@
<comref>
<header>
<copyright>
- <year>2007</year><year>2015</year>
+ <year>2007</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -33,17 +33,18 @@
<comsummary>Erlang scripting support</comsummary>
<description>
<p><c>escript</c> provides support for running short Erlang programs
- without having to compile them first and an easy way to retrieve the
- command line arguments.</p>
+ without having to compile them first, and an easy way to retrieve the
+ command-line arguments.</p>
</description>
+
<funcs>
<func>
<name>script-name script-arg1 script-arg2...</name>
<name>escript escript-flags script-name script-arg1 script-arg2...</name>
- <fsummary>Run a script written in Erlang</fsummary>
+ <fsummary>Run a script written in Erlang.</fsummary>
<desc>
<p><c>escript</c> runs a script written in Erlang.</p>
- <p>Here follows an example.</p>
+ <p>Example:</p>
<pre>
$ <input>chmod u+x factorial</input>
$ <input>cat factorial</input>
@@ -73,195 +74,183 @@ factorial 5 = 120
$ <input>./factorial</input>
usage: factorial integer
$ <input>./factorial five</input>
-usage: factorial integer
- </pre>
+usage: factorial integer</pre>
<p>The header of the Erlang script in the example differs from
- a normal Erlang module. The first line is intended to be the
- interpreter line, which invokes <c>escript</c>. However if you
- invoke the <c>escript</c> like this</p>
+ a normal Erlang module. The first line is intended to be the
+ interpreter line, which invokes <c>escript</c>.</p>
+ <p>However, if you invoke the <c>escript</c> as follows,
+ the contents of the first line does not matter, but it
+ cannot contain Erlang code as it will be ignored:</p>
<pre>
-$ <input>escript factorial 5</input> </pre>
- <p>the contents of the first line does not matter, but it
- cannot contain Erlang code as it will be ignored.</p>
- <p>The second line in the example, contains an optional
- directive to the <c>Emacs</c> editor which causes it to
+$ <input>escript factorial 5</input></pre>
+ <p>The second line in the example contains an optional
+ directive to the <c>Emacs</c> editor, which causes it to
enter the major mode for editing Erlang source files. If the
- directive is present it must be located on the second
+ directive is present, it must be located on the second
line.</p>
-
- <p>If there is a comment selecting the <seealso
- marker="stdlib:epp#encoding">encoding</seealso> it can be
+ <p>If a comment selecting the <seealso
+ marker="stdlib:epp#encoding">encoding</seealso> exists, it can be
located on the second line.</p>
-
- <note><p>
- The encoding specified by the above mentioned comment
- applies to the script itself. The encoding of the
- I/O-server, however, has to be set explicitly like this:</p>
-<code>io:setopts([{encoding, unicode}])</code>
+ <note>
+ <p>The encoding specified by the above mentioned comment
+ applies to the script itself. The encoding of the
+ I/O-server, however, must be set explicitly as follows:</p>
+ <code>
+io:setopts([{encoding, unicode}])</code>
<p>The default encoding of the I/O-server for <c>standard_io</c>
- is <c>latin1</c>
- since the script runs in a non-interactive terminal
- (see <seealso marker="stdlib:unicode_usage#unicode_options_summary">
- Using Unicode in Erlang</seealso>).
- </p></note>
-
- <p>On the third line (or second line depending on the presence
- of the Emacs directive), it is possible to give arguments to
- the emulator, such as </p>
+ is <c>latin1</c>, as the script runs in a non-interactive terminal
+ (see section
+ <seealso marker="stdlib:unicode_usage#unicode_options_summary">
+ Summary of Options</seealso>) in the STDLIB User's Guide.</p>
+ </note>
+ <p>On the third line (or second line depending on the presence
+ of the Emacs directive), arguments can be specified to
+ the emulator, for example:</p>
<pre>
%%! -smp enable -sname factorial -mnesia debug verbose</pre>
<p>Such an argument line must start with <c>%%!</c> and the
- rest of the line will interpreted as arguments to the emulator.</p>
+ remaining line is interpreted as arguments to the emulator.</p>
<p>If you know the location of the <c>escript</c> executable, the first
- line can directly give the path to <c>escript</c>. For instance:</p>
+ line can directly give the path to <c>escript</c>, for example:</p>
<pre>
-#!/usr/local/bin/escript </pre>
- <p>As any other kind of scripts, Erlang scripts will not work on
+#!/usr/local/bin/escript</pre>
+ <p>As any other type of scripts, Erlang scripts do not work on
Unix platforms if the execution bit for the script file is not set.
- (Use <c>chmod +x script-name</c> to turn on the execution bit.)
- </p>
-
- <p>The rest of the Erlang script file may either contain
- Erlang <c>source code</c>, an <c>inlined beam file</c> or an
- <c>inlined archive file</c>.</p>
-
- <p>An Erlang script file must always contain the function
- <em>main/1</em>. When the script is run, the
- <c>main/1</c> function will be called with a list
- of strings representing the arguments given to the script (not
- changed or interpreted in any way).</p>
-
+ (To turn on the execution bit, use <c>chmod +x script-name</c>.)</p>
+ <p>The remaining Erlang script file can either contain
+ Erlang <em>source code</em>, an <em>inlined beam file</em>, or an
+ <em>inlined archive file</em>.</p>
+ <p>An Erlang script file must always contain the <c>main/1</c>
+ function. When the script is run, the
+ <c>main/1</c> function is called with a list
+ of strings representing the arguments specified to the script (not
+ changed or interpreted in any way).</p>
<p>If the <c>main/1</c> function in the script returns successfully,
- the exit status for the script will be 0. If an exception is generated
- during execution, a short message will be printed and the script terminated
- with exit status 127.</p>
-
- <p>To return your own non-zero exit code, call <c>halt(ExitCode)</c>;
- for instance:</p>
+ the exit status for the script is <c>0</c>. If an exception is
+ generated during execution, a short message is printed and the script
+ terminates with exit status <c>127</c>.</p>
+ <p>To return your own non-zero exit code, call <c>halt(ExitCode)</c>,
+ for example:</p>
<pre>
halt(1).</pre>
-
- <p>Call <seealso marker="#script_name_0">escript:script_name()</seealso>
- from your to script to retrieve the pathname of the script
- (the pathname is usually, but not always, absolute).</p>
-
+ <p>To retrieve the pathname of the script, call
+ <seealso marker="#script_name_0">
+ <c>escript:script_name()</c></seealso> from your script
+ (the pathname is usually, but not always, absolute).</p>
<p>If the file contains source code (as in the example above),
- it will be processed by the preprocessor <c>epp</c>. This
- means that you for example may use pre-defined macros (such as
- <c>?MODULE</c>) as well as include directives like
- the <c>-include_lib</c> directive. For instance, use</p>
+ it is processed by the
+ <seealso marker="stdlib:epp"><c>epp</c></seealso> preprocessor.
+ This means that you, for example, can use predefined macros
+ (such as <c>?MODULE</c>) and include directives like
+ the <c>-include_lib</c> directive. For example, use</p>
<pre>
-include_lib("kernel/include/file.hrl").</pre>
- <p>to include the record definitions for the records used by the
- <c>file:read_link_info/1</c> function. You can also select
- encoding by including a encoding comment here, but if there
- is a valid encoding comment on the second line it takes
+ <p>to include the record definitions for the records used by function
+ <seealso marker="kernel:file#read_link_info/1">
+ <c>file:read_link_info/1</c></seealso>. You can also select
+ encoding by including an encoding comment here, but if
+ a valid encoding comment exists on the second line, it takes
precedence.</p>
-
- <p>The script will be checked for syntactic and semantic
- correctness before being run. If there are warnings (such as
- unused variables), they will be printed and the script will
- still be run. If there are errors, they will be printed and
- the script will not be run and its exit status will be
- 127.</p>
-
+ <p>The script is checked for syntactic and semantic
+ correctness before it is run. If there are warnings (such as
+ unused variables), they are printed and the script will
+ still be run. If there are errors, they are printed and
+ the script will not be run and its exit status is
+ <c>127</c>.</p>
<p>Both the module declaration and the export declaration of
the <c>main/1</c> function are optional.</p>
-
<p>By default, the script will be interpreted. You can force
it to be compiled by including the following line somewhere
- in the script file:</p><pre>
+ in the script file:</p>
+ <pre>
-mode(compile).</pre>
-
<p>Execution of interpreted code is slower than compiled code.
- If much of the execution takes place in interpreted code it
- may be worthwhile to compile it, even though the compilation
- itself will take a little while. It is also possible to supply
- <c>native</c> instead of <c>compile</c>, this will compile the script
- using the native flag, again depending on the characteristics
- of the escript this could or could not be worth while.</p>
-
- <p>As mentioned earlier, it is possible to have a script which
+ If much of the execution takes place in interpreted code, it
+ can be worthwhile to compile it, although the compilation
+ itself takes a little while. Also, <c>native</c> can be supplied
+ instead of <c>compile</c>. This compiles the script
+ using the native flag and may or may not be worthwhile
+ depending on the escript characteristics.</p>
+ <p>As mentioned earlier, a script can
contains precompiled <c>beam</c> code. In a precompiled
- script, the interpretation of the script header is exactly
- the same as in a script containing source code. That means
+ script, the interpretation of the script header is
+ the same as in a script containing source code. This means
that you can make a <c>beam</c> file executable by
prepending the file with the lines starting with <c>#!</c>
and <c>%%!</c> mentioned above. In a precompiled script, the
- function
- <c>main/1</c> must be exported.</p>
-
- <p>As yet another option it is possible to have an entire
- Erlang archive in the script. In a archive script, the
- interpretation of the script header is exactly the same as
- in a script containing source code. That means that you can
+ <c>main/1</c> function must be exported.</p>
+ <p>Another option is to have an entire
+ Erlang archive in the script. In an archive script, the
+ interpretation of the script header is the same as
+ in a script containing source code. This means that you can
make an archive file executable by prepending the file with
the lines starting with <c>#!</c> and <c>%%!</c> mentioned
- above. In an archive script, the function <c>main/1</c> must
+ above. In an archive script, the <c>main/1</c> function must
be exported. By default the <c>main/1</c> function in the
module with the same name as the basename of the
- <c>escript</c> file will be invoked. This behavior can be
- overridden by setting the flag <c>-escript main Module</c>
- as one of the emulator flags. The <c>Module</c> must be the
- name of a module which has an exported <c>main/1</c>
- function. See <seealso marker="kernel:code">code(3)</seealso>
- for more information about archives and code loading.</p>
-
- <p>In many cases it is very convenient to have a header in
- the escript, especially on Unix platforms. But the header is
- in fact optional. This means that you directly can "execute"
- an Erlang module, beam file or archive file without adding
- any header to them. But then you have to invoke the script
- like this:</p>
- <pre>
+ <c>escript</c> file is invoked. This behavior can be
+ overridden by setting flag <c>-escript main Module</c>
+ as one of the emulator flags. <c>Module</c> must be the
+ name of a module that has an exported <c>main/1</c>
+ function. For more information about archives and code loading, see
+ <seealso marker="kernel:code"><c>code(3)</c></seealso>.</p>
+ <p>It is often very convenient to have a header in
+ the escript, especially on Unix platforms. However, the header
+ is optional, so you directly can "execute"
+ an Erlang module, Beam file, or archive file without adding
+ any header to them. But then you have to invoke the script
+ as follows:</p>
+ <pre>
$ <input>escript factorial.erl 5</input>
factorial 5 = 120
$ <input>escript factorial.beam 5</input>
factorial 5 = 120
$ <input>escript factorial.zip 5</input>
-factorial 5 = 120
-</pre>
+factorial 5 = 120</pre>
</desc>
</func>
+
<func>
- <name>escript:create(FileOrBin, Sections) -> ok | {ok, binary()} | {error, term()}</name>
- <fsummary>Create an escript</fsummary>
+ <name>escript:create(FileOrBin, Sections) -> ok | {ok, binary()} |
+ {error, term()}</name>
+ <fsummary>Create an escript.</fsummary>
<type>
<v>FileOrBin = filename() | 'binary'</v>
<v>Sections = [Header] Body | Body</v>
<v>Header = shebang | {shebang, Shebang}
- | comment | {comment, Comment}
- | {emu_args, EmuArgs}</v>
+ &nbsp;&nbsp;&nbsp;| comment | {comment, Comment}
+ &nbsp;&nbsp;&nbsp;| {emu_args, EmuArgs}</v>
<v>Shebang = string() | 'default' | 'undefined'</v>
<v>Comment = string() | 'default' | 'undefined'</v>
<v>EmuArgs = string() | 'undefined'</v>
- <v>Body = {source, SourceCode}
- | {beam, BeamCode}
- | {archive, ZipArchive}
- | {archive, ZipFiles, ZipOptions}</v>
+ <v>Body = {source, SourceCode} | {beam, BeamCode}
+ &nbsp;&nbsp;&nbsp;| {archive, ZipArchive}
+ &nbsp;&nbsp;&nbsp;| {archive, ZipFiles, ZipOptions}</v>
<v>SourceCode = BeamCode = file:filename() | binary()</v>
- <v>ZipArchive = <seealso marker="stdlib:zip#type-filename">zip:filename()</seealso> | binary()</v>
+ <v>ZipArchive = <seealso marker="stdlib:zip#type-filename">
+ zip:filename()</seealso> | binary()</v>
<v>ZipFiles = [ZipFile]</v>
- <v>ZipFile = file:filename() | {file:filename(), binary()} | {file:filename(), binary(), file:file_info()}</v>
- <v>ZipOptions = [<seealso marker="stdlib:zip#type-create_option">zip:create_option()</seealso>]</v>
+ <v>ZipFile = file:filename()
+ &nbsp;&nbsp;&nbsp;| {file:filename(), binary()}
+ &nbsp;&nbsp;&nbsp;| {file:filename(), binary(), file:file_info()}</v>
+ <v>ZipOptions = [<seealso marker="stdlib:zip#type-create_option">
+ zip:create_option()</seealso>]</v>
</type>
<desc>
- <p>The <marker id="create_2"></marker> <c>create/2</c>
- function creates an escript from a list of sections. The
- sections can be given in any order. An escript begins with an
- optional <c>Header</c> followed by a mandatory <c>Body</c>. If
- the header is present, it does always begin with a
- <c>shebang</c>, possibly followed by a <c>comment</c> and
- <c>emu_args</c>. The <c>shebang</c> defaults to
- <c>"/usr/bin/env escript"</c>. The comment defaults to
- <c>"This is an -*- erlang -*- file"</c>. The created escript
- can either be returned as a binary or written to file.</p>
-
- <p>As an example of how the function can be used, we create an
- interpreted escript which uses <c>emu_args</c> to set some emulator
- flag. In this case it happens to disable the smp_support. We
- do also extract the different sections from the newly created
- script:</p>
+ <p><marker id="create_2"></marker>
+ Creates an escript from a list of sections. The
+ sections can be specified in any order. An escript begins with an
+ optional <c>Header</c> followed by a mandatory <c>Body</c>. If
+ the header is present, it does always begin with a
+ <c>shebang</c>, possibly followed by a <c>comment</c> and
+ <c>emu_args</c>. The <c>shebang</c> defaults to
+ <c>"/usr/bin/env escript"</c>. The <c>comment</c> defaults to
+ <c>"This is an -*- erlang -*- file"</c>. The created escript
+ can either be returned as a binary or written to file.</p>
+ <p>As an example of how the function can be used, we create an
+ interpreted escript that uses <c>emu_args</c> to set some emulator
+ flag. In this case, it happens to disable the <c>smp_support</c>. We
+ also extract the different sections from the newly created script:</p>
<pre>
&gt; <input>Source = "%% Demo\nmain(_Args) ->\n io:format(erlang:system_info(smp_support)).\n".</input>
"%% Demo\nmain(_Args) ->\n io:format(erlang:system_info(smp_support)).\n"
@@ -280,11 +269,9 @@ ok
"false"
&gt; <input>escript:extract("demo.escript", []).</input>
{ok,[{shebang,default}, {comment,default}, {emu_args,"-smp disable"},
- {source,&lt;&lt;"%% Demo\nmain(_Args) ->\n io:format(erlang:system_info(smp_su"...&gt;&gt;}]}
- </pre>
-
- <p>An escript without header can be created like this:</p>
-<pre>
+ {source,&lt;&lt;"%% Demo\nmain(_Args) ->\n io:format(erlang:system_info(smp_su"...&gt;&gt;}]}</pre>
+ <p>An escript without header can be created as follows:</p>
+ <pre>
&gt; <input>file:write_file("demo.erl",
["%% demo.erl\n-module(demo).\n-export([main/1]).\n\n", Source]).</input>
ok
@@ -299,14 +286,12 @@ ok
{beam,&lt;&lt;70,79,82,49,0,0,3,68,66,69,65,77,65,116,
111,109,0,0,0,83,0,0,0,9,...&gt;&gt;}]}
&gt; <input>os:cmd("escript demo.beam").</input>
-"true"
-</pre>
- <p>Here we create an archive script containing both Erlang
- code as well as beam code. Then we iterate over all files in
- the archive and collect their contents and some info about
- them.
- </p>
-<pre>
+"true"</pre>
+ <p>Here we create an archive script containing both Erlang
+ code and Beam code, then we iterate over all files in
+ the archive and collect their contents and some information about
+ them:</p>
+ <pre>
&gt; <input>{ok, SourceCode} = file:read_file("demo.erl").</input>
{ok,&lt;&lt;"%% demo.erl\n-module(demo).\n-export([main/1]).\n\n%% Demo\nmain(_Arg"...&gt;&gt;}
&gt; <input>escript:create("demo.escript",
@@ -339,43 +324,43 @@ ok
&lt;&lt;"%% demo.erl\n-module(demo).\n-export([main/1]).\n\n%% Demo\nmain(_Arg"...&gt;&gt;}]}</pre>
</desc>
</func>
+
<func>
- <name>escript:extract(File, Options) -> {ok, Sections} | {error, term()}</name>
- <fsummary>Parses an escript and extracts its sections</fsummary>
+ <name>escript:extract(File, Options) -> {ok, Sections} |
+ {error, term()}</name>
+ <fsummary>Parse an escript and extract its sections.</fsummary>
<type>
<v>File = filename()</v>
<v>Options = [] | [compile_source]</v>
<v>Sections = Headers Body</v>
<v>Headers = {shebang, Shebang}
- {comment, Comment}
- {emu_args, EmuArgs}</v>
+ {comment, Comment}
+ {emu_args, EmuArgs}</v>
<v>Shebang = string() | 'default' | 'undefined'</v>
<v>Comment = string() | 'default' | 'undefined'</v>
<v>EmuArgs = string() | 'undefined'</v>
<v>Body = {source, SourceCode}
- | {source, BeamCode}
- | {beam, BeamCode}
- | {archive, ZipArchive}</v>
+ &nbsp;&nbsp;&nbsp;| {source, BeamCode}
+ &nbsp;&nbsp;&nbsp;| {beam, BeamCode}
+ &nbsp;&nbsp;&nbsp;| {archive, ZipArchive}</v>
<v>SourceCode = BeamCode = ZipArchive = binary()</v>
</type>
<desc>
- <p>The <marker id="extract_2"></marker> <c>extract/2</c>
- function parses an escript and extracts its sections. This is
- the reverse of <c>create/2</c>.</p>
-
- <p>All sections are returned even if they do not exist in the
- escript. If a particular section happens to have the same
- value as the default value, the extracted value is set to the
- atom <c>default</c>. If a section is missing, the extracted
- value is set to the atom <c>undefined</c>. </p>
-
- <p>The <c>compile_source</c> option only affects the result if
- the escript contains <c>source</c> code. In that case the
- Erlang code is automatically compiled and <c>{source,
- BeamCode}</c> is returned instead of <c>{source,
- SourceCode}</c>.</p>
-
- <pre>
+ <p><marker id="extract_2"></marker>
+ Parses an escript and extracts its sections. This is the reverse
+ of <seealso marker="#create_2"><c>create/2</c></seealso>.</p>
+ <p>All sections are returned even if they do not exist in the
+ escript. If a particular section happens to have the same
+ value as the default value, the extracted value is set to the
+ atom <c>default</c>. If a section is missing, the extracted
+ value is set to the atom <c>undefined</c>.</p>
+ <p>Option <c>compile_source</c> only affects the result if
+ the escript contains <c>source</c> code. In this case the
+ Erlang code is automatically compiled and <c>{source,
+ BeamCode}</c> is returned instead of <c>{source,
+ SourceCode}</c>.</p>
+ <p>Example:</p>
+ <pre>
&gt; <input>escript:create("demo.escript",
[shebang, {archive, [{"demo.erl", SourceCode},
{"demo.beam", BeamCode}], []}]).</input>
@@ -385,52 +370,51 @@ ok
escript:extract("demo.escript", []).</input>
{ok,[{{archive,&lt;&lt;80,75,3,4,20,0,0,0,8,0,118,7,98,60,105,
152,61,93,107,0,0,0,118,0,...&gt;&gt;}
- {emu_args,undefined}]}
- </pre>
+ {emu_args,undefined}]}</pre>
</desc>
</func>
+
<func>
<name>escript:script_name() -> File</name>
- <fsummary>Returns the name of an escript</fsummary>
+ <fsummary>Return the name of an escript.</fsummary>
<type>
<v>File = filename()</v>
</type>
<desc>
- <p>The <marker id="script_name_0"></marker>
- <c>script_name/0</c> function returns the name of the escript
- being executed. If the function is invoked outside the context
- of an escript, the behavior is undefined.</p>
+ <p><marker id="script_name_0"></marker>
+ Returns the name of the escript that is executed.
+ If the function is invoked outside the context
+ of an escript, the behavior is undefined.</p>
</desc>
</func>
</funcs>
<section>
- <title>Options accepted by escript</title>
+ <title>Options Accepted By escript</title>
<taglist>
- <tag>-c</tag>
- <item>Compile the escript regardless of the value of the mode attribute.
+ <tag><c>-c</c></tag>
+ <item>Compiles the escript regardless of the value of the mode attribute.
</item>
-
- <tag>-d</tag>
- <item>Debug the escript. Starts the debugger, loads the module
- containing the <c>main/1</c> function into the debugger, sets a
- breakpoint in <c>main/1</c> and invokes <c>main/1</c>. If the
- module is precompiled, it must be explicitly compiled with the
- <c>debug_info</c> option.
+ <tag><c>-d</c></tag>
+ <item>Debugs the escript. Starts the debugger, loads the module
+ containing the <c>main/1</c> function into the debugger, sets a
+ breakpoint in <c>main/1</c>, and invokes <c>main/1</c>. If the
+ module is precompiled, it must be explicitly compiled with option
+ <c>debug_info</c>.
</item>
-
- <tag>-i</tag>
- <item>Interpret the escript regardless of the value of the mode attribute.
+ <tag><c>-i</c></tag>
+ <item>Interprets the escript regardless of the value of the mode
+ attribute.
+ </item>
+ <tag><c>-s</c></tag>
+ <item>Performs a syntactic and semantic check of the script file.
+ Warnings and errors (if any) are written to the standard output, but
+ the script will not be run. The exit status is <c>0</c> if any errors
+ are found, otherwise <c>127</c>.
+ </item>
+ <tag><c>-n</c></tag>
+ <item>Compiles the escript using flag <c>+native</c>.
</item>
-
- <tag>-s</tag>
- <item>Only perform a syntactic and semantic check of the script file.
- Warnings and errors (if any) are written to the standard output, but
- the script will not be run. The exit status will be 0 if there were
- no errors, and 127 otherwise.</item>
-
- <tag>-n</tag>
- <item>Compile the escript using the +native flag.</item>
</taglist>
</section>
</comref>
diff --git a/erts/doc/src/inet_cfg.xml b/erts/doc/src/inet_cfg.xml
index 027fe600d7..0cfcc7905d 100644
--- a/erts/doc/src/inet_cfg.xml
+++ b/erts/doc/src/inet_cfg.xml
@@ -22,7 +22,7 @@
</legalnotice>
- <title>Inet configuration</title>
+ <title>Inet Configuration</title>
<prepared>Peter Andersson</prepared>
<docno></docno>
<date>2004-03-02</date>
@@ -32,374 +32,341 @@
<section>
<title>Introduction</title>
- <p>This chapter tells you how the Erlang runtime system is configured
- for IP communication. It also explains how you may configure it
- for your own particular needs by means of a configuration file.
- The information here is mainly intended for users with special
- configuration needs or problems. There should normally be no need
- for specific settings for Erlang to function properly on a correctly
- IP configured platform. </p>
- <p>When Erlang starts up it will read the kernel variable
- <c><![CDATA[inetrc]]></c> which, if defined, should specify the location and
- name of a user configuration file. Example:</p>
- <p><c><![CDATA[% erl -kernel inetrc '"./cfg_files/erl_inetrc"']]></c></p>
- <p>Note that the usage of a <c><![CDATA[.inetrc]]></c> file, which was
- supported in earlier Erlang versions, is now obsolete.</p>
- <p>A second way to specify the configuration file is to set the
- environment variable <c><![CDATA[ERL_INETRC]]></c> to the full name of the file. Example (bash):</p>
- <p><c><![CDATA[% export ERL_INETRC=./cfg_files/erl_inetrc]]></c></p>
- <p>Note that the kernel variable <c><![CDATA[inetrc]]></c> overrides this environment variable.</p>
+ <p>This section describes how the Erlang runtime system is configured
+ for IP communication. It also explains how you can configure it
+ for your needs by a configuration file.
+ The information is primarily intended for users with special
+ configuration needs or problems. There is normally no need
+ for specific settings for Erlang to function properly on a correctly
+ IP-configured platform.</p>
+
+ <p>When Erlang starts up it reads the Kernel variable
+ <c><![CDATA[inetrc]]></c>, which, if defined, is to specify the location
+ and name of a user configuration file. Example:</p>
+
+ <code type="none"><![CDATA[
+% erl -kernel inetrc '"./cfg_files/erl_inetrc"']]></code>
+
+ <p>Notice that the use of an <c><![CDATA[.inetrc]]></c> file, which was
+ supported in earlier Erlang/OTP versions, is now obsolete.</p>
+
+ <p>A second way to specify the configuration file is to set
+ environment variable <c><![CDATA[ERL_INETRC]]></c> to the full name of
+ the file. Example (bash):</p>
+
+ <code type="none"><![CDATA[
+% export ERL_INETRC=./cfg_files/erl_inetrc]]></code>
+
+ <p>Notice that the Kernel variable <c><![CDATA[inetrc]]></c>
+ overrides this environment variable.</p>
+
<p>If no user configuration file is specified and Erlang is started
- in non-distributed or short name distributed mode, Erlang will use
- default configuration settings and a native lookup method that should
- work correctly under most circumstances. Erlang
- will not read any information from system inet configuration files
- (like /etc/host.conf, /etc/nsswitch.conf, etc) in these modes,
- except for /etc/resolv.conf and /etc/hosts that is read and monitored
- for changes on Unix platforms for the internal DNS client
- <seealso marker="kernel:inet_res">inet_res</seealso>.</p>
+ in non-distributed or short name distributed mode, Erlang uses
+ default configuration settings and a native lookup method that
+ works correctly under most circumstances. Erlang reads no
+ information from system <c>inet</c> configuration files (such as
+ <c>/etc/host.conf</c> and <c>/etc/nsswitch.conf</c>) in these modes,
+ except for <c>/etc/resolv.conf</c> and <c>/etc/hosts</c> that is read and
+ monitored for changes on Unix platforms for the internal DNS client
+ <seealso marker="kernel:inet_res"><c>inet_res(3)</c></seealso>.</p>
+
<p>If Erlang is started in long name distributed mode, it needs to
- get the domain name from somewhere and will read system inet
+ get the domain name from somewhere and reads system <c>inet</c>
configuration files for this information. Any hosts and resolver
- information found then is also recorded, but not
- used as long as Erlang is configured for native lookups. (The
+ information found is also recorded, but not
+ used as long as Erlang is configured for native lookups. The
information becomes useful if the lookup method is changed to
- <c><![CDATA['file']]></c> or <c><![CDATA['dns']]></c>, see below).</p>
- <p>Native lookup (system calls) is always the default resolver method. This
- is true for all platforms except VxWorks and OSE Delta where <c><![CDATA['file']]></c>
- or <c><![CDATA['dns']]></c> is used (in that order of priority).</p>
- <p>On Windows platforms, Erlang will search the system registry rather than
- look for configuration files when started in long name distributed mode. </p>
+ <c><![CDATA['file']]></c> or <c><![CDATA['dns']]></c>, see below.</p>
+
+ <p>Native lookup (system calls) is always the default resolver method.
+ This is true for all platforms, except VxWorks and OSE Delta where
+ <c><![CDATA['file']]></c> or <c><![CDATA['dns']]></c> is used (in that
+ priority order).</p>
+
+ <p>On Windows platforms, Erlang searches the system registry rather than
+ looks for configuration files when started in long name distributed
+ mode.</p>
</section>
<section>
<title>Configuration Data</title>
<p>Erlang records the following data in a local database if found in system
- inet configuration files (or system registry):</p>
- <list type="bulleted">
- <item>Host names and addresses</item>
+ <c>inet</c> configuration files (or system registry):</p>
+
+ <list type="bulleted">
+ <item>Hostnames and host addresses</item>
<item>Domain name</item>
<item>Nameservers</item>
<item>Search domains</item>
<item>Lookup method</item>
</list>
- <p>This data may also be specified explicitly in the user
- configuration file. The configuration file should contain lines
- of configuration parameters (each terminated with a full
- stop). Some parameters add data to the configuration (e.g. host
+
+ <p>This data can also be specified explicitly in the user
+ configuration file. This file is to contain lines
+ of configuration parameters (each terminated with a full stop).
+ Some parameters add data to the configuration (such as host
and nameserver), others overwrite any previous settings
- (e.g. domain and lookup). The user configuration file is always
+ (such as domain and lookup). The user configuration file is always
examined last in the configuration process, making it possible
for the user to override any default values or previously made
settings. Call <c><![CDATA[inet:get_rc()]]></c> to view the state of the
- inet configuration database.</p>
- <p>These are the valid configuration parameters:</p>
- <p></p>
+ <c>inet</c> configuration database.</p>
+
+ <p>The valid configuration parameters are as follows:</p>
+
<taglist>
- <tag><em><c><![CDATA[{file, Format, File}.]]></c></em></tag>
+ <tag><c><![CDATA[{file, Format, File}.]]></c></tag>
<item>
- <p></p>
<p><c><![CDATA[Format = atom()]]></c></p>
<p><c><![CDATA[File = string()]]></c></p>
- <p></p>
- <p>Specify a system file that Erlang should read configuration
- data from. <c><![CDATA[Format]]></c> tells the parser how the file should be
- interpreted: <c><![CDATA[resolv]]></c> (Unix resolv.conf), <c><![CDATA[host_conf_freebsd]]></c>
- (FreeBSD host.conf), <c><![CDATA[host_conf_bsdos]]></c> (BSDOS host.conf),
- <c><![CDATA[host_conf_linux]]></c> (Linux host.conf), <c><![CDATA[nsswitch_conf]]></c>
- (Unix nsswitch.conf) or <c><![CDATA[hosts]]></c> (Unix hosts). <c><![CDATA[File]]></c> should
- specify the name of the file with full path.</p>
- <p></p>
+ <p>Specify a system file that Erlang is to read configuration data from.
+ <c><![CDATA[Format]]></c> tells the parser how the file is to be
+ interpreted:</p>
+ <list type="bulleted">
+ <item><c><![CDATA[resolv]]></c> (Unix resolv.conf)</item>
+ <item><c><![CDATA[host_conf_freebsd]]></c> (FreeBSD host.conf)</item>
+ <item><c><![CDATA[host_conf_bsdos]]></c> (BSDOS host.conf)</item>
+ <item><c><![CDATA[host_conf_linux]]></c> (Linux host.conf)</item>
+ <item><c><![CDATA[nsswitch_conf]]></c> (Unix nsswitch.conf)</item>
+ <item><c><![CDATA[hosts]]></c> (Unix hosts)</item>
+ </list>
+ <p><c><![CDATA[File]]></c> is to specify the filename with full
+ path.</p>
</item>
- <tag><em><c><![CDATA[{resolv_conf, File}.]]></c></em></tag>
+ <tag><c><![CDATA[{resolv_conf, File}.]]></c></tag>
<item>
- <p></p>
<p><c><![CDATA[File = string()]]></c></p>
- <p></p>
- <p>Specify a system file that Erlang should read resolver
+ <p>Specify a system file that Erlang is to read resolver
configuration from for the internal DNS client
- <seealso marker="kernel:inet_res">inet_res</seealso>,
+ <seealso marker="kernel:inet_res"><c>inet_res(3)</c></seealso>,
and monitor for changes, even if it does not exist.
The path must be absolute.</p>
- <p>This may override the configuration parameters
+ <p>This can override the configuration parameters
<c><![CDATA[nameserver]]></c> and
<c><![CDATA[search]]></c> depending on the contents
- of the specified file. They may also change any time in the future
+ of the specified file. They can also change any time in the future
reflecting the file contents.</p>
- <p>If the file is specified as an empty string "",
- no file is read nor monitored in the future. This emulates
- the old behaviour of not configuring the DNS client when
+ <p>If the file is specified as an empty string <c>""</c>,
+ no file is read or monitored in the future. This emulates
+ the old behavior of not configuring the DNS client when
the node is started in short name distributed mode.</p>
- <p>If this parameter is not specified it defaults to
- <c><![CDATA[/etc/resolv.conf]]></c> unless the environment variable
- <c><![CDATA[ERL_INET_ETC_DIR]]></c> is set which defines
+ <p>If this parameter is not specified, it defaults to
+ <c><![CDATA[/etc/resolv.conf]]></c> unless environment variable
+ <c><![CDATA[ERL_INET_ETC_DIR]]></c> is set, which defines
the directory for this file to some maybe other than
<c><![CDATA[/etc]]></c>.</p>
- <p></p>
</item>
- <tag><em><c><![CDATA[{hosts_file, File}.]]></c></em></tag>
+ <tag><c><![CDATA[{hosts_file, File}.]]></c></tag>
<item>
- <p></p>
<p><c><![CDATA[File = string()]]></c></p>
- <p></p>
- <p>Specify a system file that Erlang should read resolver
- configuration from for the internal hosts file resolver
+ <p>Specify a system file that Erlang is to read resolver
+ configuration from for the internal hosts file resolver,
and monitor for changes, even if it does not exist.
The path must be absolute.</p>
<p>These host entries are searched after all added with
<c>{file, hosts, File}</c> above or
- <c>{host, IP, Aliases}</c> below when the lookup option
+ <c>{host, IP, Aliases}</c> below when lookup option
<c>file</c> is used.</p>
- <p>If the file is specified as an empty string "",
- no file is read nor monitored in the future. This emulates
- the old behaviour of not configuring the DNS client when
+ <p>If the file is specified as an empty string <c>""</c>,
+ no file is read or monitored in the future. This emulates
+ the old behavior of not configuring the DNS client when
the node is started in short name distributed mode.</p>
- <p>If this parameter is not specified it defaults to
- <c><![CDATA[/etc/hosts]]></c> unless the environment variable
- <c><![CDATA[ERL_INET_ETC_DIR]]></c> is set which defines
+ <p>If this parameter is not specified, it defaults to
+ <c><![CDATA[/etc/hosts]]></c> unless environment variable
+ <c><![CDATA[ERL_INET_ETC_DIR]]></c> is set, which defines
the directory for this file to some maybe other than
<c><![CDATA[/etc]]></c>.</p>
- <p></p>
</item>
- <tag><em><c><![CDATA[{registry, Type}.]]></c></em></tag>
+ <tag><c><![CDATA[{registry, Type}.]]></c></tag>
<item>
- <p></p>
<p><c><![CDATA[Type = atom()]]></c></p>
- <p></p>
- <p>Specify a system registry that Erlang should read configuration
- data from. Currently, <c><![CDATA[win32]]></c> is the only valid option.</p>
- <p></p>
+ <p>Specify a system registry that Erlang is to read configuration
+ data from. <c><![CDATA[win32]]></c> is the only valid option.</p>
</item>
- <tag><em><c><![CDATA[{host, IP, Aliases}.]]></c></em></tag>
+ <tag><c><![CDATA[{host, IP, Aliases}.]]></c></tag>
<item>
- <p></p>
<p><c><![CDATA[IP = tuple()]]></c></p>
<p><c><![CDATA[Aliases = [string()]]]></c></p>
- <p></p>
<p>Add host entry to the hosts table.</p>
- <p></p>
</item>
- <tag><em><c><![CDATA[{domain, Domain}.]]></c></em></tag>
+ <tag><c><![CDATA[{domain, Domain}.]]></c></tag>
<item>
- <p></p>
<p><c><![CDATA[Domain = string()]]></c></p>
- <p></p>
<p>Set domain name.</p>
- <p></p>
</item>
- <tag><em><c><![CDATA[{nameserver, IP [,Port]}.]]></c></em></tag>
+ <tag><c><![CDATA[{nameserver, IP [,Port]}.]]></c></tag>
<item>
- <p></p>
<p><c><![CDATA[IP = tuple()]]></c></p>
<p><c><![CDATA[Port = integer()]]></c></p>
- <p></p>
- <p>Add address (and port, if other than default) of primary
+ <p>Add address (and port, if other than default) of the primary
nameserver to use for
- <seealso marker="kernel:inet_res">inet_res</seealso>.</p>
- <p></p>
+ <seealso marker="kernel:inet_res"><c>inet_res(3)</c></seealso>.
+ </p>
</item>
- <tag><em><c><![CDATA[{alt_nameserver, IP [,Port]}.]]></c></em></tag>
+ <tag><c><![CDATA[{alt_nameserver, IP [,Port]}.]]></c></tag>
<item>
- <p></p>
<p><c><![CDATA[IP = tuple()]]></c></p>
<p><c><![CDATA[Port = integer()]]></c></p>
- <p></p>
- <p>Add address (and port, if other than default) of secondary
+ <p>Add address (and port, if other than default) of the secondary
nameserver for
- <seealso marker="kernel:inet_res">inet_res</seealso>.</p>
- <p></p>
+ <seealso marker="kernel:inet_res"><c>inet_res(3)</c></seealso>.
+ </p>
</item>
- <tag><em><c><![CDATA[{search, Domains}.]]></c></em></tag>
+ <tag><c><![CDATA[{search, Domains}.]]></c></tag>
<item>
- <p></p>
<p><c><![CDATA[Domains = [string()]]]></c></p>
- <p></p>
<p>Add search domains for
- <seealso marker="kernel:inet_res">inet_res</seealso>.</p>
- <p></p>
+ <seealso marker="kernel:inet_res"><c>inet_res(3)</c></seealso>.
+ </p>
</item>
- <tag><em><c><![CDATA[{lookup, Methods}.]]></c></em></tag>
+ <tag><c><![CDATA[{lookup, Methods}.]]></c></tag>
<item>
- <p></p>
<p><c><![CDATA[Methods = [atom()]]]></c></p>
- <p></p>
- <p>Specify lookup methods and in which order to try them.
- The valid methods are: <c><![CDATA[native]]></c> (use system calls),
- <c><![CDATA[file]]></c> (use host data retrieved from
- system configuration files and/or
- the user configuration file) or <c><![CDATA[dns]]></c>
- (use the Erlang DNS client
- <seealso marker="kernel:inet_res">inet_res</seealso>
- for nameserver queries).</p>
+ <p>Specify lookup methods and in which order to try them.
+ The valid methods are as follows:</p>
+ <list type="bulleted">
+ <item><c><![CDATA[native]]></c> (use system calls)</item>
+ <item><c><![CDATA[file]]></c> (use host data retrieved from system
+ configuration files and/or the user configuration file)</item>
+ <item><c><![CDATA[dns]]></c> (use the Erlang DNS client
+ <seealso marker="kernel:inet_res"><c>inet_res(3)</c></seealso>
+ for nameserver queries)</item>
+ </list>
<p>The lookup method <c><![CDATA[string]]></c> tries to
- parse the hostname as a IPv4 or IPv6 string and return
+ parse the hostname as an IPv4 or IPv6 string and return
the resulting IP address. It is automatically tried
first when <c><![CDATA[native]]></c> is <em>not</em>
- in the <c><![CDATA[Methods]]></c> list. To skip it in this case
+ in the <c><![CDATA[Methods]]></c> list. To skip it in this case,
the pseudo lookup method <c><![CDATA[nostring]]></c> can be
inserted anywhere in the <c><![CDATA[Methods]]></c> list.</p>
- <p></p>
</item>
- <tag><em><c><![CDATA[{cache_size, Size}.]]></c></em></tag>
+ <tag><c><![CDATA[{cache_size, Size}.]]></c></tag>
<item>
- <p></p>
<p><c><![CDATA[Size = integer()]]></c></p>
- <p></p>
- <p>Set size of resolver cache. Default is 100 DNS records.</p>
- <p></p>
+ <p>Set the resolver cache size. Defaults to 100 DNS records.</p>
</item>
- <tag><em><c><![CDATA[{cache_refresh, Time}.]]></c></em></tag>
- <item>
- <p></p>
+ <tag><c><![CDATA[{cache_refresh, Time}.]]></c></tag>
+ <item>
<p><c><![CDATA[Time = integer()]]></c></p>
- <p></p>
- <p>Set how often (in millisec)
- the resolver cache for
- <seealso marker="kernel:inet_res">inet_res</seealso>.
- is refreshed (i.e. expired DNS records are deleted).
- Default is 1 h.</p>
- <p></p>
+ <p>Set how often (in milliseconds) the resolver cache for
+ <seealso marker="kernel:inet_res"><c>inet_res(3)</c></seealso>
+ is refreshed (that is, expired DNS records are deleted).
+ Defaults to 1 hour.</p>
</item>
- <tag><em><c><![CDATA[{timeout, Time}.]]></c></em></tag>
+ <tag><c><![CDATA[{timeout, Time}.]]></c></tag>
<item>
- <p></p>
<p><c><![CDATA[Time = integer()]]></c></p>
- <p></p>
- <p>Set the time to wait until retry (in millisec) for DNS queries
+ <p>Set the time to wait until retry (in milliseconds) for DNS queries
made by
- <seealso marker="kernel:inet_res">inet_res</seealso>.
- Default is 2 sec.</p>
- <p></p>
+ <seealso marker="kernel:inet_res"><c>inet_res(3)</c></seealso>.
+ Defaults to 2 seconds.</p>
</item>
- <tag><em><c><![CDATA[{retry, N}.]]></c></em></tag>
+ <tag><c><![CDATA[{retry, N}.]]></c></tag>
<item>
- <p></p>
<p><c><![CDATA[N = integer()]]></c></p>
- <p></p>
<p>Set the number of DNS queries
- <seealso marker="kernel:inet_res">inet_res</seealso>
- will try before giving up.
- Default is 3.</p>
- <p></p>
+ <seealso marker="kernel:inet_res"><c>inet_res(3)</c></seealso>
+ will try before giving up. Defaults to 3.</p>
</item>
- <tag><em><c><![CDATA[{inet6, Bool}.]]></c></em></tag>
+ <tag><c><![CDATA[{inet6, Bool}.]]></c></tag>
<item>
- <p></p>
<p><c><![CDATA[Bool = true | false]]></c></p>
- <p></p>
- <p>Tells the DNS client
- <seealso marker="kernel:inet_res">inet_res</seealso>
- to look up IPv6 addresses. Default is false.</p>
- <p></p>
+ <p>Tells the DNS client
+ <seealso marker="kernel:inet_res"><c>inet_res(3)</c></seealso>
+ to look up IPv6 addresses. Defaults to <c>false</c>.</p>
</item>
- <tag><em><c><![CDATA[{usevc, Bool}.]]></c></em></tag>
+ <tag><c><![CDATA[{usevc, Bool}.]]></c></tag>
<item>
- <p></p>
<p><c><![CDATA[Bool = true | false]]></c></p>
- <p></p>
- <p>Tells the DNS client
- <seealso marker="kernel:inet_res">inet_res</seealso>
- to use TCP (Virtual Circuit) instead of UDP. Default is false.</p>
- <p></p>
+ <p>Tells the DNS client
+ <seealso marker="kernel:inet_res"><c>inet_res(3)</c></seealso>
+ to use TCP (Virtual Circuit) instead of UDP. Defaults to
+ <c>false</c>.</p>
</item>
- <tag><em><c><![CDATA[{edns, Version}.]]></c></em></tag>
+ <tag><c><![CDATA[{edns, Version}.]]></c></tag>
<item>
- <p></p>
<p><c><![CDATA[Version = false | 0]]></c></p>
- <p></p>
<p>Sets the EDNS version that
- <seealso marker="kernel:inet_res">inet_res</seealso>
- will use. The only allowed is zero. Default is false
- which means to not use EDNS.</p>
- <p></p>
+ <seealso marker="kernel:inet_res"><c>inet_res(3)</c></seealso>
+ will use. The only allowed version is zero. Defaults to <c>false</c>,
+ which means not to use EDNS.</p>
</item>
- <tag><em><c><![CDATA[{udp_payload_size, Size}.]]></c></em></tag>
+ <tag><c><![CDATA[{udp_payload_size, Size}.]]></c></tag>
<item>
- <p></p>
<p><c><![CDATA[N = integer()]]></c></p>
- <p></p>
<p>Sets the allowed UDP payload size
- <seealso marker="kernel:inet_res">inet_res</seealso>
+ <seealso marker="kernel:inet_res"><c>inet_res(3)</c></seealso>
will advertise in EDNS queries. Also sets the limit
when the DNS query will be deemed too large for UDP
- forcing a TCP query instead, which is not entirely
- correct since the advertised UDP payload size of the
- individual nameserver is what should be used,
+ forcing a TCP query instead; this is not entirely
+ correct, as the advertised UDP payload size of the
+ individual nameserver is what is to be used,
but this simple strategy will do until a more intelligent
- (probing, caching) algorithm need be implemented.
- The default is 1280 which stems from the
- standard Ethernet MTU size.</p>
- <p></p>
+ (probing, caching) algorithm needs to be implemented.
+ Default to 1280, which stems from the standard Ethernet MTU size.</p>
</item>
- <tag><em><c><![CDATA[{udp, Module}.]]></c></em></tag>
+ <tag><c><![CDATA[{udp, Module}.]]></c></tag>
<item>
- <p></p>
<p><c><![CDATA[Module = atom()]]></c></p>
- <p></p>
- <p>Tell Erlang to use other primitive UDP module than inet_udp.</p>
- <p></p>
+ <p>Tell Erlang to use another primitive UDP module than
+ <c>inet_udp</c>.</p>
</item>
- <tag><em><c><![CDATA[{tcp, Module}.]]></c></em></tag>
+ <tag><c><![CDATA[{tcp, Module}.]]></c></tag>
<item>
- <p></p>
<p><c><![CDATA[Module = atom()]]></c></p>
- <p></p>
- <p>Tell Erlang to use other primitive TCP module than inet_tcp.</p>
- <p></p>
+ <p>Tell Erlang to use another primitive TCP module than
+ <c>inet_tcp</c>.</p>
</item>
- <tag><em><c><![CDATA[clear_hosts.]]></c></em></tag>
+ <tag><c><![CDATA[clear_hosts.]]></c></tag>
<item>
- <p></p>
<p>Clear the hosts table.</p>
- <p></p>
</item>
- <tag><em><c><![CDATA[clear_ns.]]></c></em></tag>
+ <tag><c><![CDATA[clear_ns.]]></c></tag>
<item>
- <p></p>
<p>Clear the list of recorded nameservers (primary and secondary).</p>
- <p></p>
</item>
- <tag><em><c><![CDATA[clear_search.]]></c></em></tag>
+ <tag><c><![CDATA[clear_search.]]></c></tag>
<item>
- <p></p>
<p>Clear the list of search domains.</p>
- <p></p>
</item>
</taglist>
</section>
<section>
<title>User Configuration Example</title>
- <p>Here follows a user configuration example.</p>
- <p>Assume a user does not want Erlang to use the native lookup method,
- but wants Erlang to read all information necessary from start and use
- that for resolving names and addresses. In case lookup fails, Erlang
- should request the data from a nameserver (using the Erlang
+ <p>Assume that a user does not want Erlang to use the native lookup method,
+ but wants Erlang to read all information necessary from start and use
+ that for resolving names and addresses. If lookup fails, Erlang
+ is to request the data from a nameserver (using the Erlang
DNS client, set to use EDNS allowing larger responses).
- The resolver configuration will be updated when
- its configuration file changes, furthermore, DNS records
- should never be cached. The user configuration file
+ The resolver configuration is updated when
+ its configuration file changes. Also, DNS records
+ are never to be cached. The user configuration file
(in this example named <c><![CDATA[erl_inetrc]]></c>, stored
- in directory <c><![CDATA[./cfg_files]]></c>) could then look like this
+ in directory <c><![CDATA[./cfg_files]]></c>) can then look as follows
(Unix):</p>
+
<pre>
- %% -- ERLANG INET CONFIGURATION FILE --
- %% read the hosts file
- {file, hosts, "/etc/hosts"}.
- %% add a particular host
- {host, {134,138,177,105}, ["finwe"]}.
- %% do not monitor the hosts file
- {hosts_file, ""}.
- %% read and monitor nameserver config from here
- {resolv_conf, "/usr/local/etc/resolv.conf"}.
- %% enable EDNS
- {edns,0}.
- %% disable caching
- {cache_size, 0}.
- %% specify lookup method
- {lookup, [file, dns]}.</pre>
- <p>And Erlang could, for example, be started like this:</p>
- <p><c><![CDATA[% erl -sname my_node -kernel inetrc '"./cfg_files/erl_inetrc"']]></c></p>
+%% -- ERLANG INET CONFIGURATION FILE --
+%% read the hosts file
+{file, hosts, "/etc/hosts"}.
+%% add a particular host
+{host, {134,138,177,105}, ["finwe"]}.
+%% do not monitor the hosts file
+{hosts_file, ""}.
+%% read and monitor nameserver config from here
+{resolv_conf, "/usr/local/etc/resolv.conf"}.
+%% enable EDNS
+{edns,0}.
+%% disable caching
+{cache_size, 0}.
+%% specify lookup method
+{lookup, [file, dns]}.</pre>
+
+ <p>And Erlang can, for example, be started as follows:</p>
+
+ <code type="none"><![CDATA[
+% erl -sname my_node -kernel inetrc '"./cfg_files/erl_inetrc"']]></code>
</section>
</chapter>
diff --git a/erts/doc/src/init.xml b/erts/doc/src/init.xml
index 84a5aea335..c14f0a558d 100644
--- a/erts/doc/src/init.xml
+++ b/erts/doc/src/init.xml
@@ -19,7 +19,7 @@
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-
+
</legalnotice>
<title>init</title>
@@ -30,128 +30,140 @@
<file>init.xml</file>
</header>
<module>init</module>
- <modulesummary>Coordination of System Startup</modulesummary>
+ <modulesummary>Coordination of system startup.</modulesummary>
<description>
- <p>The <c>init</c> module is pre-loaded and contains the code for
- the <c>init</c> system process which coordinates the start-up of
- the system. The first function evaluated at start-up is
- <c>boot(BootArgs)</c>, where <c>BootArgs</c> is a list of command
- line arguments supplied to the Erlang runtime system from
- the local operating system. See
- <seealso marker="erts:erl">erl(1)</seealso>.</p>
- <p><c>init</c> reads the boot script which contains instructions on
- how to initiate the system. See
- <seealso marker="sasl:script">script(4)</seealso> for more
- information about boot scripts.</p>
+ <p>This module is preloaded and contains the code for
+ the <c>init</c> system process that coordinates the startup of
+ the system. The first function evaluated at startup is
+ <c>boot(BootArgs)</c>, where <c>BootArgs</c> is a list of
+ command-line arguments supplied to the Erlang runtime system from
+ the local operating system; see
+ <seealso marker="erts:erl"><c>erl(1)</c></seealso>.</p>
+
+ <p><c>init</c> reads the boot script, which contains instructions on
+ how to initiate the system. For more information about boot scripts, see
+ <seealso marker="sasl:script"><c>script(4)</c></seealso>.</p>
+
<p><c>init</c> also contains functions to restart, reboot, and stop
the system.</p>
</description>
+
<funcs>
<func>
<name name="boot" arity="1"/>
- <fsummary>Start the Erlang runtime system</fsummary>
+ <fsummary>Start the Erlang runtime system.</fsummary>
<desc>
<p>Starts the Erlang runtime system. This function is called
- when the emulator is started and coordinates system start-up.</p>
- <p><c><anno>BootArgs</anno></c> are all command line arguments except
- the emulator flags, that is, flags and plain arguments. See
- <seealso marker="erts:erl">erl(1)</seealso>.</p>
- <p><c>init</c> itself interprets some of the flags, see
- <seealso marker="#flags">Command Line Flags</seealso> below.
+ when the emulator is started and coordinates system startup.</p>
+ <p><c><anno>BootArgs</anno></c> are all command-line arguments except
+ the emulator flags, that is, flags and plain arguments; see
+ <seealso marker="erts:erl"><c>erl(1)</c></seealso>.</p>
+ <p><c>init</c> interprets some of the flags, see section
+ <seealso marker="#flags">Command-Line Flags</seealso> below.
The remaining flags ("user flags") and plain arguments are
passed to the <c>init</c> loop and can be retrieved by calling
- <c>get_arguments/0</c> and <c>get_plain_arguments/0</c>,
- respectively.</p>
+ <seealso marker="#get_arguments/0"><c>get_arguments/0</c></seealso>
+ and <seealso marker="#get_plain_arguments/0">
+ <c>get_plain_arguments/0</c></seealso>, respectively.</p>
</desc>
</func>
+
<func>
<name name="get_argument" arity="1"/>
- <fsummary>Get the values associated with a command line user flag</fsummary>
+ <fsummary>Get the values associated with a command-line user flag.
+ </fsummary>
<desc>
- <p>Returns all values associated with the command line user flag
- <c><anno>Flag</anno></c>. If <c><anno>Flag</anno></c> is provided several times, each
- <c><anno>Values</anno></c> is returned in preserved order.</p>
+ <p>Returns all values associated with the command-line user flag
+ <c><anno>Flag</anno></c>. If <c><anno>Flag</anno></c> is provided
+ several times, each <c><anno>Values</anno></c> is returned in
+ preserved order. Example:</p>
<pre>
% <input>erl -a b c -a d</input>
...
1> <input>init:get_argument(a).</input>
{ok,[["b","c"],["d"]]}</pre>
- <p>There are also a number of flags, which are defined
+ <p>The following flags are defined
automatically and can be retrieved using this function:</p>
<taglist>
<tag><c>root</c></tag>
<item>
- <p>The installation directory of Erlang/OTP, <c>$ROOT</c>.</p>
+ <p>The installation directory of Erlang/OTP, <c>$ROOT</c>:</p>
<pre>
2> <input>init:get_argument(root).</input>
{ok,[["/usr/local/otp/releases/otp_beam_solaris8_r10b_patched"]]}</pre>
</item>
<tag><c>progname</c></tag>
<item>
- <p>The name of the program which started Erlang.</p>
+ <p>The name of the program which started Erlang:</p>
<pre>
3> <input>init:get_argument(progname).</input>
{ok,[["erl"]]}</pre>
</item>
<tag><c>home</c></tag>
<item>
- <p>The home directory.</p>
+ <p>The home directory:</p>
<pre>
4> <input>init:get_argument(home).</input>
{ok,[["/home/harry"]]}</pre>
</item>
</taglist>
- <p>Returns <c>error</c> if there is no value associated with
- <c>Flag</c>.</p>
+ <p>Returns <c>error</c> if no value is associated with <c>Flag</c>.</p>
</desc>
</func>
+
<func>
<name name="get_arguments" arity="0"/>
- <fsummary>Get all command line user flags</fsummary>
+ <fsummary>Get all command-line user flags.</fsummary>
<desc>
- <p>Returns all command line flags, as well as the system
- defined flags, see <c>get_argument/1</c>.</p>
+ <p>Returns all command-line flags and the system-defined flags, see
+ <seealso marker="#get_argument/1"><c>get_argument/1</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="get_plain_arguments" arity="0"/>
- <fsummary>Get all non-flag command line arguments</fsummary>
+ <fsummary>Get all non-flag command-line arguments.</fsummary>
<desc>
- <p>Returns any plain command line arguments as a list of strings
+ <p>Returns any plain command-line arguments as a list of strings
(possibly empty).</p>
</desc>
</func>
+
<func>
<name name="get_status" arity="0"/>
- <fsummary>Get system status information</fsummary>
+ <fsummary>Get system status information.</fsummary>
<type name="internal_status"/>
<desc>
<p>The current status of the <c>init</c> process can be
inspected. During system startup (initialization),
<c><anno>InternalStatus</anno></c> is <c>starting</c>, and
- <c><anno>ProvidedStatus</anno></c> indicates how far the boot script has
- been interpreted. Each <c>{progress, Info}</c> term
- interpreted in the boot script affects <c><anno>ProvidedStatus</anno></c>,
- that is, <c><anno>ProvidedStatus</anno></c> gets the value of <c>Info</c>.</p>
+ <c><anno>ProvidedStatus</anno></c> indicates how far the boot
+ script has been interpreted. Each <c>{progress, Info}</c> term
+ interpreted in the boot script affects
+ <c><anno>ProvidedStatus</anno></c>, that is,
+ <c><anno>ProvidedStatus</anno></c> gets the value of <c>Info</c>.</p>
</desc>
</func>
+
<func>
<name name="reboot" arity="0"/>
- <fsummary>Take down and restart an Erlang node smoothly</fsummary>
+ <fsummary>Take down and restart an Erlang node smoothly.</fsummary>
<desc>
<p>All applications are taken down smoothly, all code is
unloaded, and all ports are closed before the system
- terminates. If the <c>-heart</c> command line flag was given,
- the <c>heart</c> program will try to reboot the system. Refer
- to <c>heart(3)</c> for more information.</p>
+ terminates. If command-line flag <c>-heart</c> was specified,
+ the <c>heart</c> program tries to reboot the system. For more
+ information, see
+ <seealso marker="kernel:heart"><c>heart(3)</c></seealso>.</p>
<p>To limit the shutdown time, the time <c>init</c> is allowed
- to spend taking down applications, the <c>-shutdown_time</c>
- command line flag should be used.</p>
+ to spend taking down applications, command-line flag
+ <c>-shutdown_time</c> is to be used.</p>
</desc>
</func>
+
<func>
<name name="restart" arity="0"/>
- <fsummary>Restart the running Erlang node</fsummary>
+ <fsummary>Restart the running Erlang node.</fsummary>
<desc>
<p>The system is restarted <em>inside</em> the running Erlang
node, which means that the emulator is not restarted. All
@@ -160,94 +172,104 @@
the same way as initially started. The same <c>BootArgs</c>
are used again.</p>
<p>To limit the shutdown time, the time <c>init</c> is allowed
- to spend taking down applications, the <c>-shutdown_time</c>
- command line flag should be used.</p>
+ to spend taking down applications, command-line flag
+ <c>-shutdown_time</c> is to be used.</p>
</desc>
</func>
+
<func>
<name name="script_id" arity="0"/>
- <fsummary>Get the identity of the used boot script</fsummary>
+ <fsummary>Get the identity of the used boot script.</fsummary>
<desc>
- <p>Get the identity of the boot script used to boot the system.
+ <p>Gets the identity of the boot script used to boot the system.
<c><anno>Id</anno></c> can be any Erlang term. In the delivered boot
- scripts, <c><anno>Id</anno></c> is <c>{Name, Vsn}</c>. <c>Name</c> and
- <c>Vsn</c> are strings.</p>
+ scripts, <c><anno>Id</anno></c> is <c>{Name, Vsn}</c>. <c>Name</c>
+ and <c>Vsn</c> are strings.</p>
</desc>
</func>
+
<func>
<name name="stop" arity="0"/>
- <fsummary>Take down an Erlang node smoothly</fsummary>
+ <fsummary>Take down an Erlang node smoothly.</fsummary>
<desc>
- <p>All applications are taken down smoothly, all code is
- unloaded, and all ports are closed before the system
- terminates. If the <c>-heart</c> command line flag was given,
- the <c>heart</c> program is terminated before the Erlang node
- terminates. Refer to <c>heart(3)</c> for more information.</p>
- <p>To limit the shutdown time, the time <c>init</c> is allowed
- to spend taking down applications, the <c>-shutdown_time</c>
- command line flag should be used.</p>
+ <p>The same as
+ <seealso marker="#stop/1"><c>stop(0)</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="stop" arity="1"/>
- <fsummary>Take down an Erlang node smoothly</fsummary>
+ <fsummary>Take down an Erlang node smoothly.</fsummary>
<desc>
<p>All applications are taken down smoothly, all code is
unloaded, and all ports are closed before the system
- terminates by calling <c>halt(<anno>Status</anno>)</c>. If the
- <c>-heart</c> command line flag was given, the <c>heart</c>
- program is terminated before the Erlang node
- terminates. Refer to <c>heart(3)</c> for more
- information.</p>
+ terminates by calling <c>halt(<anno>Status</anno>)</c>. If
+ command-line flag <c>-heart</c> was specified, the <c>heart</c>
+ program is terminated before the Erlang node terminates.
+ For more information, see
+ <seealso marker="kernel:heart"><c>heart(3)</c></seealso>.</p>
<p>To limit the shutdown time, the time <c>init</c> is allowed
- to spend taking down applications, the <c>-shutdown_time</c>
- command line flag should be used.</p>
+ to spend taking down applications, command-line flag
+ <c>-shutdown_time</c> is to be used.</p>
</desc>
</func>
</funcs>
<section>
<marker id="flags"></marker>
- <title>Command Line Flags</title>
- <warning><p>The support for loading of code from archive files is
- experimental. The sole purpose of releasing it before it is ready
- is to obtain early feedback. The file format, semantics,
- interfaces etc. may be changed in a future release. The
- <c>-code_path_choice</c> flag is also experimental.</p></warning>
+ <title>Command-Line Flags</title>
+ <warning>
+ <p>The support for loading of code from archive files is
+ experimental. The only purpose of releasing it before it is ready
+ is to obtain early feedback. The file format, semantics,
+ interfaces, and so on, can be changed in a future release. The
+ <c>-code_path_choice</c> flag is also experimental.</p>
+ </warning>
- <p>The <c>init</c> module interprets the following command line
- flags:</p>
+ <p>The <c>init</c> module interprets the following command-line flags:</p>
<taglist>
<tag><c>--</c></tag>
<item>
<p>Everything following <c>--</c> up to the next flag is
considered plain arguments and can be retrieved using
- <c>get_plain_arguments/0</c>.</p>
+ <seealso marker="#get_plain_arguments/0">
+ <c>get_plain_arguments/0</c></seealso>.</p>
</item>
<tag><c>-code_path_choice Choice</c></tag>
<item>
- <p>This flag can be set to <c>strict</c> or <c>relaxed</c>. It
- controls whether each directory in the code path should be
- interpreted strictly as it appears in the <c>boot script</c> or if
- <c>init</c> should be more relaxed and try to find a suitable
- directory if it can choose from a regular ebin directory and
- an ebin directory in an archive file. This flag is particular
- useful when you want to elaborate with code loading from
- archives without editing the <c>boot script</c>. See <seealso
- marker="sasl:script">script(4)</seealso> for more information
- about interpretation of boot scripts. The flag does also have
- a similar affect on how the code server works. See <seealso
- marker="kernel:code">code(3)</seealso>.</p>
-
+ <p>Can be set to <c>strict</c> or <c>relaxed</c>. It controls how each
+ directory in the code path is to be interpreted:</p>
+ <list type="bulleted">
+ <item>
+ <p>Strictly as it appears in the <c>boot script</c>, or</p>
+ </item>
+ <item>
+ <p><c>init</c> is to be more relaxed and try to find a suitable
+ directory if it can choose from a regular <c>ebin</c> directory
+ and an <c>ebin</c> directory in an archive file.</p>
+ </item>
+ </list>
+ <p>This flag is particular
+ useful when you want to elaborate with code loading from
+ archives without editing the <c>boot script</c>. For more
+ information about interpretation of boot scripts, see
+ <seealso marker="sasl:script"><c>script(4)</c></seealso>.
+ The flag has also a similar effect on how the code server works; see
+ <seealso marker="kernel:code"><c>code(3)</c></seealso>.</p>
+ </item>
+ <tag><c>-epmd_module Module</c></tag>
+ <item>
+ <p>Specifies the module to use for registration and lookup of
+ node names. Defaults to <c>erl_epmd</c>.</p>
</item>
<tag><c>-eval Expr</c></tag>
<item>
- <p>Scans, parses and evaluates an arbitrary expression
+ <p>Scans, parses, and evaluates an arbitrary expression
<c>Expr</c> during system initialization. If any of these
- steps fail (syntax error, parse error or exception during
- evaluation), Erlang stops with an error message. Here is an
- example that uses Erlang as a hexadecimal calculator:</p>
+ steps fail (syntax error, parse error, or exception during
+ evaluation), Erlang stops with an error message. In the following
+ example Erlang is used as a hexadecimal calculator:</p>
<pre>
% <input>erl -noshell -eval 'R = 16#1F+16#A0, io:format("~.16B~n", [R])' \\</input>
<input>-s erlang halt</input>
@@ -257,14 +279,15 @@ BF</pre>
<c>-eval</c> expressions are evaluated sequentially with
<c>-s</c> and <c>-run</c> function calls (this also in
the order specified). As with <c>-s</c> and <c>-run</c>, an
- evaluation that does not terminate, blocks the system
+ evaluation that does not terminate blocks the system
initialization process.</p>
</item>
<tag><c>-extra</c></tag>
<item>
<p>Everything following <c>-extra</c> is considered plain
arguments and can be retrieved using
- <c>get_plain_arguments/0</c>.</p>
+ <seealso marker="#get_plain_arguments/0">
+ <c>get_plain_arguments/0</c></seealso>.</p>
</item>
<tag><c>-run Mod [Func [Arg1, Arg2, ...]]</c></tag>
<item>
@@ -286,8 +309,8 @@ foo:bar()
foo:bar(["baz", "1", "2"]).</code>
<p>The functions are executed sequentially in an initialization
process, which then terminates normally and passes control to
- the user. This means that a <c>-run</c> call which does not
- return will block further processing; to avoid this, use
+ the user. This means that a <c>-run</c> call that does not
+ return blocks further processing; to avoid this, use
some variant of <c>spawn</c> in such cases.</p>
</item>
<tag><c>-s Mod [Func [Arg1, Arg2, ...]]</c></tag>
@@ -310,11 +333,11 @@ foo:bar()
foo:bar([baz, '1', '2']).</code>
<p>The functions are executed sequentially in an initialization
process, which then terminates normally and passes control to
- the user. This means that a <c>-s</c> call which does not
- return will block further processing; to avoid this, use
+ the user. This means that a <c>-s</c> call that does not
+ return blocks further processing; to avoid this, use
some variant of <c>spawn</c> in such cases.</p>
- <p>Due to the limited length of atoms, it is recommended that
- <c>-run</c> be used instead.</p>
+ <p>Because of the limited length of atoms, it is recommended to
+ use <c>-run</c> instead.</p>
</item>
</taglist>
</section>
@@ -336,9 +359,9 @@ error</pre>
</section>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="erl_prim_loader">erl_prim_loader(3)</seealso>,
- <seealso marker="kernel:heart">heart(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="erl_prim_loader"><c>erl_prim_loader(3)</c></seealso>,
+ <seealso marker="kernel:heart"><c>heart(3)</c></seealso></p>
</section>
</erlref>
diff --git a/erts/doc/src/introduction.xml b/erts/doc/src/introduction.xml
new file mode 100644
index 0000000000..790e24f9f3
--- /dev/null
+++ b/erts/doc/src/introduction.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE chapter SYSTEM "chapter.dtd">
+
+<chapter>
+ <header>
+ <copyright>
+ <year>2012</year><year>2016</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ </legalnotice>
+
+ <title>Introduction</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date>2016-05-22</date>
+ <rev>PA1</rev>
+ <file>introduction.xml</file>
+ </header>
+ <section>
+ <title>Scope</title>
+ <p>The Erlang Runtime System Application, ERTS, contains
+ functionality necessary to run the Erlang system.</p>
+ <note>
+ <p>By default, <c><![CDATA[ERTS]]></c> is only guaranteed to be
+ compatible with other Erlang/OTP components from the same release as
+ <c><![CDATA[ERTS]]></c> itself.</p>
+ <p>For information on how to communicate with Erlang/OTP components
+ from earlier releases, see the documentation of system flag
+ <seealso marker="erl#compat_rel"><c>+R</c></seealso> in <c>erl(1)</c>.
+ </p>
+ </note>
+ </section>
+
+ <section>
+ <title>Prerequisites</title>
+ <p>It is assumed that the reader is familiar with the Erlang programming
+ language.</p>
+ </section>
+</chapter>
+
diff --git a/erts/doc/src/match_spec.xml b/erts/doc/src/match_spec.xml
index 3944f24f84..2a14f1e47b 100644
--- a/erts/doc/src/match_spec.xml
+++ b/erts/doc/src/match_spec.xml
@@ -22,7 +22,7 @@
</legalnotice>
- <title>Match specifications in Erlang</title>
+ <title>Match Specifications in Erlang</title>
<prepared>Patrik Nyblom</prepared>
<responsible></responsible>
<docno></docno>
@@ -32,49 +32,54 @@
<rev>PA1</rev>
<file>match_spec.xml</file>
</header>
- <p>A "match specification" (match_spec) is an Erlang term describing a
- small "program" that will try to match something (either the
- parameters to a function as used in the <c><![CDATA[erlang:trace_pattern/2]]></c>
- BIF, or the objects in an ETS table.).
- The match_spec in many ways works like a small function in Erlang, but is
- interpreted/compiled by the Erlang runtime system to something much more
- efficient than calling an Erlang function. The match_spec is also
+ <p>A "match specification" (<c>match_spec</c>) is an Erlang term describing a
+ small "program" that tries to match something. It can be used
+ to either control tracing with
+ <seealso marker="erlang#trace_pattern/3">erlang:trace_pattern/3</seealso>
+ or to search for objects in an ETS table with for example
+ <seealso marker="stdlib:ets#select/2">ets:select/2</seealso>.
+ The match specification in many ways works like a small function in Erlang,
+ but is interpreted/compiled by the Erlang runtime system to something much more
+ efficient than calling an Erlang function. The match specification is also
very limited compared to the expressiveness of real Erlang functions.</p>
- <p>Match specifications are given to the BIF <c><![CDATA[erlang:trace_pattern/2]]></c> to
- execute matching of function arguments as well as to define some actions
- to be taken when the match succeeds (the <c><![CDATA[MatchBody]]></c> part). Match
- specifications can also be used in ETS, to specify objects to be
- returned from an <c><![CDATA[ets:select/2]]></c> call (or other select
- calls). The semantics and restrictions differ slightly when using
- match specifications for tracing and in ETS, the differences are
- defined in a separate paragraph below.</p>
- <p>The most notable difference between a match_spec and an Erlang fun is
- of course the syntax. Match specifications are Erlang terms, not
- Erlang code. A match_spec also has a somewhat strange concept of
- exceptions. An exception (e.g., <c><![CDATA[badarg]]></c>) in the <c><![CDATA[MatchCondition]]></c>
- part,
- which resembles an Erlang guard, will generate immediate failure,
- while an exception in the <c><![CDATA[MatchBody]]></c> part, which resembles the body of an
- Erlang function, is implicitly caught and results in the single atom
- <c><![CDATA['EXIT']]></c>.
- </p>
+ <p>The most notable difference between a match specification and an Erlang
+ fun is the syntax. Match specifications are Erlang terms, not Erlang code.
+ Also, a match specification has a strange concept of exceptions:</p>
+
+ <list type="bulleted">
+ <item>
+ <p>An exception (such as <c><![CDATA[badarg]]></c>) in the
+ <c><![CDATA[MatchCondition]]></c> part, which resembles an Erlang guard,
+ generates immediate failure.</p>
+ </item>
+ <item>
+ <p>An exception in the <c><![CDATA[MatchBody]]></c> part, which resembles
+ the body of an Erlang function, is implicitly caught and results in the
+ single atom <c><![CDATA['EXIT']]></c>.</p>
+ </item>
+ </list>
<section>
<title>Grammar</title>
- <p>A match_spec used in tracing can be described in this <em>informal</em> grammar:</p>
+ <p>A match specification used in tracing can be described in the following
+ <em>informal</em> grammar:</p>
+
<list type="bulleted">
<item>MatchExpression ::= [ MatchFunction, ... ]
</item>
<item>MatchFunction ::= { MatchHead, MatchConditions, MatchBody }
</item>
- <item>MatchHead ::= MatchVariable | <c><![CDATA['_']]></c> | [ MatchHeadPart, ... ]
+ <item>MatchHead ::= MatchVariable | <c><![CDATA['_']]></c> |
+ [ MatchHeadPart, ... ]
+ </item>
+ <item>MatchHeadPart ::= term() | MatchVariable | <c><![CDATA['_']]></c>
</item>
- <item>MatchHeadPart ::= term() | MatchVariable | <c><![CDATA['_']]></c></item>
<item>MatchVariable ::= '$&lt;number&gt;'
</item>
- <item>MatchConditions ::= [ MatchCondition, ...] | <c><![CDATA[[]]]></c></item>
- <item>MatchCondition ::= { GuardFunction } |
- { GuardFunction, ConditionExpression, ... }
+ <item>MatchConditions ::= [ MatchCondition, ...] | <c><![CDATA[[]]]></c>
+ </item>
+ <item>MatchCondition ::= { GuardFunction } | { GuardFunction,
+ ConditionExpression, ... }
</item>
<item>BoolFunction ::= <c><![CDATA[is_atom]]></c> |
<c><![CDATA[is_float]]></c> | <c><![CDATA[is_integer]]></c> |
@@ -85,58 +90,77 @@
<c><![CDATA[is_function]]></c> | <c><![CDATA[is_record]]></c> |
<c><![CDATA[is_seq_trace]]></c> | <c><![CDATA['and']]></c> |
<c><![CDATA['or']]></c> | <c><![CDATA['not']]></c> |
- <c><![CDATA['xor']]></c> | <c><![CDATA[andalso]]></c> |
- <c><![CDATA[orelse]]></c></item>
+ <c><![CDATA['xor']]></c> | <c><![CDATA['andalso']]></c> |
+ <c><![CDATA['orelse']]></c>
+ </item>
<item>ConditionExpression ::= ExprMatchVariable | { GuardFunction } |
- { GuardFunction, ConditionExpression, ... } | TermConstruct
+ { GuardFunction, ConditionExpression, ... } | TermConstruct
+ </item>
+ <item>ExprMatchVariable ::= MatchVariable (bound in the MatchHead) |
+ <c><![CDATA['$_']]></c> | <c><![CDATA['$$']]></c>
</item>
- <item>ExprMatchVariable ::= MatchVariable (bound in the MatchHead) |
- <c><![CDATA['$_']]></c> | <c><![CDATA['$$']]></c></item>
<item>TermConstruct = {{}} | {{ ConditionExpression, ... }} |
<c><![CDATA[[]]]></c> | [ConditionExpression, ...] |
<c><![CDATA[#{}]]></c> | #{term() => ConditionExpression, ...} |
- NonCompositeTerm | Constant</item>
- <item>NonCompositeTerm ::= term() (not list or tuple or map)</item>
+ NonCompositeTerm | Constant
+ </item>
+ <item>NonCompositeTerm ::= term() (not list or tuple or map)
+ </item>
<item>Constant ::= {<c><![CDATA[const]]></c>, term()}
</item>
<item>GuardFunction ::= BoolFunction | <c><![CDATA[abs]]></c> |
- <c><![CDATA[element]]></c> | <c><![CDATA[hd]]></c> | <c><![CDATA[length]]></c> | <c><![CDATA[node]]></c> |
- <c><![CDATA[round]]></c> | <c><![CDATA[size]]></c> | <c><![CDATA[tl]]></c> | <c><![CDATA[trunc]]></c> |
- <c><![CDATA['+']]></c> | <c><![CDATA['-']]></c> | <c><![CDATA['*']]></c> | <c><![CDATA['div']]></c> |
- <c><![CDATA['rem']]></c> | <c><![CDATA['band']]></c> | <c><![CDATA['bor']]></c> | <c><![CDATA['bxor']]></c> |
- <c><![CDATA['bnot']]></c> | <c><![CDATA['bsl']]></c> | <c><![CDATA['bsr']]></c> | <c><![CDATA['>']]></c> |
- <c><![CDATA['>=']]></c> | <c><![CDATA['<']]></c> | <c><![CDATA['=<']]></c> | <c><![CDATA['=:=']]></c> |
- <c><![CDATA['==']]></c> | <c><![CDATA['=/=']]></c> | <c><![CDATA['/=']]></c> | <c><![CDATA[self]]></c> |
- <c><![CDATA[get_tcw]]></c></item>
+ <c><![CDATA[element]]></c> | <c><![CDATA[hd]]></c> |
+ <c><![CDATA[length]]></c> | <c><![CDATA[node]]></c> |
+ <c><![CDATA[round]]></c> | <c><![CDATA[size]]></c> |
+ <c><![CDATA[tl]]></c> | <c><![CDATA[trunc]]></c> |
+ <c><![CDATA['+']]></c> | <c><![CDATA['-']]></c> |
+ <c><![CDATA['*']]></c> | <c><![CDATA['div']]></c> |
+ <c><![CDATA['rem']]></c> | <c><![CDATA['band']]></c> |
+ <c><![CDATA['bor']]></c> | <c><![CDATA['bxor']]></c> |
+ <c><![CDATA['bnot']]></c> | <c><![CDATA['bsl']]></c> |
+ <c><![CDATA['bsr']]></c> | <c><![CDATA['>']]></c> |
+ <c><![CDATA['>=']]></c> | <c><![CDATA['<']]></c> |
+ <c><![CDATA['=<']]></c> | <c><![CDATA['=:=']]></c> |
+ <c><![CDATA['==']]></c> | <c><![CDATA['=/=']]></c> |
+ <c><![CDATA['/=']]></c> | <c><![CDATA[self]]></c> |
+ <c><![CDATA[get_tcw]]></c>
+ </item>
<item>MatchBody ::= [ ActionTerm ]
</item>
<item>ActionTerm ::= ConditionExpression | ActionCall
</item>
- <item>ActionCall ::= {ActionFunction} |
- {ActionFunction, ActionTerm, ...}
+ <item>ActionCall ::= {ActionFunction} | {ActionFunction, ActionTerm, ...}
</item>
<item>ActionFunction ::= <c><![CDATA[set_seq_token]]></c> |
- <c><![CDATA[get_seq_token]]></c> | <c><![CDATA[message]]></c> |
- <c><![CDATA[return_trace]]></c> | <c><![CDATA[exception_trace]]></c> | <c><![CDATA[process_dump]]></c> |
- <c><![CDATA[enable_trace]]></c> | <c><![CDATA[disable_trace]]></c> | <c><![CDATA[trace]]></c> |
- <c><![CDATA[display]]></c> | <c><![CDATA[caller]]></c> | <c><![CDATA[set_tcw]]></c> |
- <c><![CDATA[silent]]></c></item>
+ <c><![CDATA[get_seq_token]]></c> | <c><![CDATA[message]]></c> |
+ <c><![CDATA[return_trace]]></c> | <c><![CDATA[exception_trace]]></c> |
+ <c><![CDATA[process_dump]]></c> | <c><![CDATA[enable_trace]]></c> |
+ <c><![CDATA[disable_trace]]></c> | <c><![CDATA[trace]]></c> |
+ <c><![CDATA[display]]></c> | <c><![CDATA[caller]]></c> |
+ <c><![CDATA[set_tcw]]></c> | <c><![CDATA[silent]]></c>
+ </item>
</list>
- <p>A match_spec used in ets can be described in this <em>informal</em> grammar:</p>
+ <p>A match specification used in
+ <seealso marker="stdlib:ets"><c>ets(3)</c></seealso>
+ can be described in the following <em>informal</em> grammar:</p>
+
<list type="bulleted">
<item>MatchExpression ::= [ MatchFunction, ... ]
</item>
<item>MatchFunction ::= { MatchHead, MatchConditions, MatchBody }
</item>
- <item>MatchHead ::= MatchVariable | <c><![CDATA['_']]></c> | { MatchHeadPart, ... }
+ <item>MatchHead ::= MatchVariable | <c><![CDATA['_']]></c> |
+ { MatchHeadPart, ... }
+ </item>
+ <item>MatchHeadPart ::= term() | MatchVariable | <c><![CDATA['_']]></c>
</item>
- <item>MatchHeadPart ::= term() | MatchVariable | <c><![CDATA['_']]></c></item>
<item>MatchVariable ::= '$&lt;number&gt;'
</item>
- <item>MatchConditions ::= [ MatchCondition, ...] | <c><![CDATA[[]]]></c></item>
+ <item>MatchConditions ::= [ MatchCondition, ...] | <c><![CDATA[[]]]></c>
+ </item>
<item>MatchCondition ::= { GuardFunction } |
- { GuardFunction, ConditionExpression, ... }
+ { GuardFunction, ConditionExpression, ... }
</item>
<item>BoolFunction ::= <c><![CDATA[is_atom]]></c> |
<c><![CDATA[is_float]]></c> | <c><![CDATA[is_integer]]></c> |
@@ -147,494 +171,628 @@
<c><![CDATA[is_function]]></c> | <c><![CDATA[is_record]]></c> |
<c><![CDATA[is_seq_trace]]></c> | <c><![CDATA['and']]></c> |
<c><![CDATA['or']]></c> | <c><![CDATA['not']]></c> |
- <c><![CDATA['xor']]></c> | <c><![CDATA[andalso]]></c> |
- <c><![CDATA[orelse]]></c></item>
+ <c><![CDATA['xor']]></c> | <c><![CDATA['andalso']]></c> |
+ <c><![CDATA['orelse']]></c>
+ </item>
<item>ConditionExpression ::= ExprMatchVariable | { GuardFunction } |
- { GuardFunction, ConditionExpression, ... } | TermConstruct
+ { GuardFunction, ConditionExpression, ... } | TermConstruct
</item>
<item>ExprMatchVariable ::= MatchVariable (bound in the MatchHead) |
- <c><![CDATA['$_']]></c> | <c><![CDATA['$$']]></c></item>
+ <c><![CDATA['$_']]></c> | <c><![CDATA['$$']]></c>
+ </item>
<item>TermConstruct = {{}} | {{ ConditionExpression, ... }} |
<c><![CDATA[[]]]></c> | [ConditionExpression, ...] | #{} |
- #{term() => ConditionExpression, ...} | NonCompositeTerm |
- Constant</item>
- <item>NonCompositeTerm ::= term() (not list or tuple or map)</item>
+ #{term() => ConditionExpression, ...} | NonCompositeTerm | Constant
+ </item>
+ <item>NonCompositeTerm ::= term() (not list or tuple or map)
+ </item>
<item>Constant ::= {<c><![CDATA[const]]></c>, term()}
</item>
<item>GuardFunction ::= BoolFunction | <c><![CDATA[abs]]></c> |
- <c><![CDATA[element]]></c> | <c><![CDATA[hd]]></c> | <c><![CDATA[length]]></c> | <c><![CDATA[node]]></c> |
- <c><![CDATA[round]]></c> | <c><![CDATA[size]]></c> | <c><![CDATA[tl]]></c> | <c><![CDATA[trunc]]></c> |
- <c><![CDATA['+']]></c> | <c><![CDATA['-']]></c> | <c><![CDATA['*']]></c> | <c><![CDATA['div']]></c> |
- <c><![CDATA['rem']]></c> | <c><![CDATA['band']]></c> | <c><![CDATA['bor']]></c> | <c><![CDATA['bxor']]></c> |
- <c><![CDATA['bnot']]></c> | <c><![CDATA['bsl']]></c> | <c><![CDATA['bsr']]></c> | <c><![CDATA['>']]></c> |
- <c><![CDATA['>=']]></c> | <c><![CDATA['<']]></c> | <c><![CDATA['=<']]></c> | <c><![CDATA['=:=']]></c> |
- <c><![CDATA['==']]></c> | <c><![CDATA['=/=']]></c> | <c><![CDATA['/=']]></c> | <c><![CDATA[self]]></c> |
- <c><![CDATA[get_tcw]]></c></item>
- <item>MatchBody ::= [ ConditionExpression, ... ]</item>
+ <c><![CDATA[element]]></c> | <c><![CDATA[hd]]></c> |
+ <c><![CDATA[length]]></c> | <c><![CDATA[node]]></c> |
+ <c><![CDATA[round]]></c> | <c><![CDATA[size]]></c> |
+ <c><![CDATA[tl]]></c> | <c><![CDATA[trunc]]></c> |
+ <c><![CDATA['+']]></c> | <c><![CDATA['-']]></c> |
+ <c><![CDATA['*']]></c> | <c><![CDATA['div']]></c> |
+ <c><![CDATA['rem']]></c> | <c><![CDATA['band']]></c> |
+ <c><![CDATA['bor']]></c> | <c><![CDATA['bxor']]></c> |
+ <c><![CDATA['bnot']]></c> | <c><![CDATA['bsl']]></c> |
+ <c><![CDATA['bsr']]></c> | <c><![CDATA['>']]></c> |
+ <c><![CDATA['>=']]></c> | <c><![CDATA['<']]></c> |
+ <c><![CDATA['=<']]></c> | <c><![CDATA['=:=']]></c> |
+ <c><![CDATA['==']]></c> | <c><![CDATA['=/=']]></c> |
+ <c><![CDATA['/=']]></c> | <c><![CDATA[self]]></c> |
+ <c><![CDATA[get_tcw]]></c>
+ </item>
+ <item>MatchBody ::= [ ConditionExpression, ... ]
+ </item>
</list>
</section>
<section>
- <title>Function descriptions</title>
-
+ <title>Function Descriptions</title>
<section>
- <title>Functions allowed in all types of match specifications</title>
- <p>The different functions allowed in <c><![CDATA[match_spec]]></c> work like this:
- </p>
- <p><em>is_atom, is_float, is_integer, is_list, is_number, is_pid, is_port,
- is_reference, is_tuple, is_map, is_binary, is_function:</em> Like the
- corresponding guard tests in Erlang, return <c><![CDATA[true]]></c> or
- <c><![CDATA[false]]></c>.</p>
- <p><em>is_record: </em>Takes an additional parameter, which SHALL
- be the result of <c><![CDATA[record_info(size, <record_type>)]]></c>,
- like in <c><![CDATA[{is_record, '$1', rectype, record_info(size, rectype)}]]></c>.
- </p>
- <p><em>'not': </em>Negates its single argument (anything other
- than <c><![CDATA[false]]></c> gives <c><![CDATA[false]]></c>).
- </p>
- <p><em>'and': </em>Returns <c><![CDATA[true]]></c> if all its arguments
- (variable length argument list) evaluate to <c><![CDATA[true]]></c>, else
- <c><![CDATA[false]]></c>. Evaluation order is undefined.
- </p>
- <p><em>'or': </em>Returns <c><![CDATA[true]]></c> if any of its arguments
- evaluates to <c><![CDATA[true]]></c>. Variable length argument
- list. Evaluation order is undefined.
- </p>
- <p><em>andalso: </em>Like <c><![CDATA['and']]></c>, but quits evaluating its
- arguments as soon as one argument evaluates to something else
- than true. Arguments are evaluated left to right.
- </p>
- <p><em>orelse: </em>Like <c><![CDATA['or']]></c>, but quits evaluating as soon
- as one of its arguments evaluates to <c><![CDATA[true]]></c>. Arguments are
- evaluated left to right.
- </p>
- <p><em>'xor': </em>Only two arguments, of which one has to be true
- and the other false to return <c><![CDATA[true]]></c>; otherwise
- <c><![CDATA['xor']]></c> returns false.
- </p>
- <p><em>abs, element, hd, length, node, round, size, tl, trunc, '+', '-', '*', 'div', 'rem', 'band', 'bor', 'bxor', 'bnot', 'bsl', 'bsr', '>', '>=', '&lt;', '=&lt;', '=:=', '==', '=/=', '/=', self: </em>Work as the corresponding Erlang bif's (or
- operators). In case of bad arguments, the result depends on
- the context. In the <c><![CDATA[MatchConditions]]></c> part of the
- expression, the test fails immediately (like in an Erlang
- guard), but in the <c><![CDATA[MatchBody]]></c>, exceptions are implicitly
- caught and the call results in the atom <c><![CDATA['EXIT']]></c>.</p>
+ <title>Functions Allowed in All Types of Match Specifications</title>
+ <p>The functions allowed in <c><![CDATA[match_spec]]></c> work as
+ follows:</p>
+
+ <taglist>
+ <tag><c>is_atom</c>, <c>is_float</c>, <c>is_integer</c>, <c>is_list</c>,
+ <c>is_number</c>, <c>is_pid</c>, <c>is_port</c>, <c>is_reference</c>,
+ <c>is_tuple</c>, <c>is_map</c>, <c>is_binary</c>, <c>is_function</c>
+ </tag>
+ <item>
+ <p>Same as the corresponding guard tests in Erlang, return
+ <c><![CDATA[true]]></c> or <c><![CDATA[false]]></c>.</p>
+ </item>
+ <tag><c>is_record</c></tag>
+ <item>
+ <p>Takes an additional parameter, which <em>must</em> be the result
+ of <c><![CDATA[record_info(size, <record_type>)]]></c>, like in
+ <c><![CDATA[{is_record, '$1', rectype, record_info(size,
+ rectype)}]]></c>.</p>
+ </item>
+ <tag><c>'not'</c></tag>
+ <item>
+ <p>Negates its single argument (anything other
+ than <c><![CDATA[false]]></c> gives <c><![CDATA[false]]></c>).</p>
+ </item>
+ <tag><c>'and'</c></tag>
+ <item>
+ <p>Returns <c><![CDATA[true]]></c> if all its arguments (variable
+ length argument list) evaluate to <c><![CDATA[true]]></c>, otherwise
+ <c><![CDATA[false]]></c>. Evaluation order is undefined.</p>
+ </item>
+ <tag><c>'or'</c></tag>
+ <item>
+ <p>Returns <c><![CDATA[true]]></c> if any of its arguments
+ evaluates to <c><![CDATA[true]]></c>. Variable length argument
+ list. Evaluation order is undefined.</p>
+ </item>
+ <tag><c>'andalso'</c></tag>
+ <item>
+ <p>Works as <c><![CDATA['and']]></c>, but quits evaluating its
+ arguments when one argument evaluates to something else
+ than <c>true</c>. Arguments are evaluated left to right.</p>
+ </item>
+ <tag><c>'orelse'</c></tag>
+ <item>
+ <p>Works as <c><![CDATA['or']]></c>, but quits evaluating as soon
+ as one of its arguments evaluates to <c><![CDATA[true]]></c>.
+ Arguments are evaluated left to right.</p>
+ </item>
+ <tag><c>'xor'</c></tag>
+ <item>
+ <p>Only two arguments, of which one must be <c>true</c> and the
+ other <c>false</c> to return <c><![CDATA[true]]></c>; otherwise
+ <c><![CDATA['xor']]></c> returns false.</p>
+ </item>
+ <tag><c>abs</c>, <c>element</c>, <c>hd</c>, <c>length</c>, <c>node</c>,
+ <c>round</c>, <c>size</c>, <c>tl</c>, <c>trunc</c>, <c>'+'</c>,
+ <c>'-'</c>, <c>'*'</c>, <c>'div'</c>, <c>'rem'</c>, <c>'band'</c>,
+ <c>'bor'</c>, <c>'bxor'</c>, <c>'bnot'</c>, <c>'bsl'</c>,
+ <c>'bsr'</c>, <c>'>'</c>, <c>'>='</c>, <c>'&lt;'</c>, <c>'=&lt;'</c>,
+ <c>'=:='</c>, <c>'=='</c>, <c>'=/='</c>, <c>'/='</c>,
+ <c>self</c></tag>
+ <item>
+ <p>Same as the corresponding Erlang BIFs (or operators). In case of
+ bad arguments, the result depends on the context. In the
+ <c><![CDATA[MatchConditions]]></c> part of the expression, the test
+ fails immediately (like in an Erlang guard). In the
+ <c><![CDATA[MatchBody]]></c> part, exceptions are implicitly caught
+ and the call results in the atom <c><![CDATA['EXIT']]></c>.</p>
+ </item>
+ </taglist>
</section>
<section>
- <title>Functions allowed only for tracing</title>
- <p><em>is_seq_trace: </em>Returns <c><![CDATA[true]]></c> if a sequential
- trace token is set for the current process, otherwise <c><![CDATA[false]]></c>.
- </p>
- <p><em>set_seq_token:</em> Works like
- <c><![CDATA[seq_trace:set_token/2]]></c>, but returns <c><![CDATA[true]]></c> on success
- and <c><![CDATA['EXIT']]></c> on error or bad argument. Only allowed in the
- <c><![CDATA[MatchBody]]></c> part and only allowed when tracing.
- </p>
- <p><em>get_seq_token:</em> Works just like
- <c><![CDATA[seq_trace:get_token/0]]></c>, and is only allowed in the
- <c><![CDATA[MatchBody]]></c> part when tracing.
- </p>
- <p><em>message:</em> Sets an additional message appended to the
- trace message sent. One can only set one additional message in
- the body; subsequent calls will replace the appended message. As
- a special case, <c><![CDATA[{message, false}]]></c> disables sending of
- trace messages ('call' and 'return_to')
- for this function call, just like if the match_spec had not matched,
- which can be useful if only the side effects of
- the <c><![CDATA[MatchBody]]></c> are desired.
- Another special case is <c><![CDATA[{message, true}]]></c> which
- sets the default behavior, as if the function had no match_spec,
- trace message is sent with no extra
- information (if no other calls to <c><![CDATA[message]]></c> are placed
- before <c><![CDATA[{message, true}]]></c>, it is in fact a "noop").
- </p>
- <p>Takes one argument, the message. Returns <c><![CDATA[true]]></c> and can
- only be used in the <c><![CDATA[MatchBody]]></c> part and when tracing.
- </p>
- <p><em>return_trace:</em> Causes a <c><![CDATA[return_from]]></c> trace
- message to be sent upon return from the current function.
- Takes no arguments, returns <c><![CDATA[true]]></c> and can only be used
- in the <c><![CDATA[MatchBody]]></c> part when tracing.
- If the process trace flag <c><![CDATA[silent]]></c>
- is active the <c><![CDATA[return_from]]></c> trace message is inhibited.
- </p>
- <p>NOTE! If the traced function is tail recursive, this match
- spec function destroys that property.
- Hence, if a match spec executing this function is used on a
- perpetual server process, it may only be active for a limited
- time, or the emulator will eventually use all memory in the host
- machine and crash. If this match_spec function is inhibited
- using the <c><![CDATA[silent]]></c> process trace flag
- tail recursiveness still remains.
- </p>
- <p><em>exception_trace:</em> Same as <em>return_trace</em>,
- plus; if the traced function exits due to an exception,
- an <c><![CDATA[exception_from]]></c> trace message is generated,
- whether the exception is caught or not.
- </p>
- <p><em>process_dump:</em> Returns some textual information about
- the current process as a binary. Takes no arguments and is only
- allowed in the <c><![CDATA[MatchBody]]></c> part when tracing.
- </p>
- <p><em>enable_trace:</em> With one parameter this function turns
- on tracing like the Erlang call <c><![CDATA[erlang:trace(self(), true, [P2])]]></c>, where <c><![CDATA[P2]]></c> is the parameter to
- <c><![CDATA[enable_trace]]></c>. With two parameters, the first parameter
- should be either a process identifier or the registered name of
- a process. In this case tracing is turned on for the designated
- process in the same way as in the Erlang call <c><![CDATA[erlang:trace(P1, true, [P2])]]></c>, where P1 is the first and P2 is the second
- argument. The process <c><![CDATA[P1]]></c> gets its trace messages sent to the same
- tracer as the process executing the statement uses. <c><![CDATA[P1]]></c>
- can <em>not</em> be one of the atoms <c><![CDATA[all]]></c>, <c><![CDATA[new]]></c> or
- <c><![CDATA[existing]]></c> (unless, of course, they are registered names).
- <c><![CDATA[P2]]></c> can <em>not</em> be <c><![CDATA[cpu_timestamp]]></c> nor
- <c><![CDATA[tracer]]></c>.
- Returns <c><![CDATA[true]]></c> and may only be used in
- the <c><![CDATA[MatchBody]]></c> part when tracing.
- </p>
- <p><em>disable_trace:</em> With one parameter this function
- disables tracing like the Erlang call <c><![CDATA[erlang:trace(self(), false, [P2])]]></c>, where <c><![CDATA[P2]]></c> is the parameter to
- <c><![CDATA[disable_trace]]></c>. With two parameters it works like the
- Erlang call <c><![CDATA[erlang:trace(P1, false, [P2])]]></c>, where P1 can
- be either a process identifier or a registered name and is given
- as the first argument to the match_spec function.
- <c><![CDATA[P2]]></c> can <em>not</em> be <c><![CDATA[cpu_timestamp]]></c> nor
- <c><![CDATA[tracer]]></c>. Returns
- <c><![CDATA[true]]></c> and may only be used in the <c><![CDATA[MatchBody]]></c> part
- when tracing.
- </p>
- <p><em>trace:</em> With two parameters this function takes a list
- of trace flags to disable as first parameter and a list
- of trace flags to enable as second parameter. Logically, the
- disable list is applied first, but effectively all changes
- are applied atomically. The trace flags
- are the same as for <c><![CDATA[erlang:trace/3]]></c> not including
- <c><![CDATA[cpu_timestamp]]></c> but including <c><![CDATA[tracer]]></c>. If a
- tracer is specified in both lists, the tracer in the
- enable list takes precedence. If no tracer is specified the
- same tracer as the process executing the match spec is
- used. When using a <seealso marker="erl_tracer">tracer module</seealso>
- the module has to be loaded before the match specification is executed.
- If it is not loaded the match will fail.
- With three parameters to this function the first is
- either a process identifier or the registered name of a
- process to set trace flags on, the second is the disable
- list, and the third is the enable list. Returns
- <c><![CDATA[true]]></c> if any trace property was changed for the
- trace target process or <c><![CDATA[false]]></c> if not. It may only
- be used in the <c><![CDATA[MatchBody]]></c> part when tracing.
- </p>
- <p><em>caller:</em>
- Returns the calling function as a tuple {Module,
- Function, Arity} or the atom <c><![CDATA[undefined]]></c> if the calling
- function cannot be determined. May only be used in the
- <c><![CDATA[MatchBody]]></c> part when tracing.
- </p>
- <p>Note that if a "technically built in function" (i.e. a
- function not written in Erlang) is traced, the <c><![CDATA[caller]]></c>
- function will sometimes return the atom <c><![CDATA[undefined]]></c>. The calling
- Erlang function is not available during such calls.
- </p>
- <p><em>display:</em> For debugging purposes only; displays the
- single argument as an Erlang term on stdout, which is seldom
- what is wanted. Returns <c><![CDATA[true]]></c> and may only be used in the
- <c><![CDATA[MatchBody]]></c> part when tracing.
- </p>
- <p> <marker id="get_tcw"></marker>
-<em>get_tcw:</em>
- Takes no argument and returns the value of the node's trace
- control word. The same is done by
- <c><![CDATA[erlang:system_info(trace_control_word)]]></c>.
- </p>
- <p>The trace control word is a 32-bit unsigned integer intended for
- generic trace control. The trace control word can be tested and
- set both from within trace match specifications and with BIFs.
- This call is only allowed when tracing.
- </p>
- <p> <marker id="set_tcw"></marker>
-<em>set_tcw:</em>
- Takes one unsigned integer argument, sets the value of
- the node's trace control word to the value of the argument
- and returns the previous value. The same is done by
- <c><![CDATA[erlang:system_flag(trace_control_word, Value)]]></c>. It is only
- allowed to use <c><![CDATA[set_tcw]]></c> in the <c><![CDATA[MatchBody]]></c> part
- when tracing.
- </p>
- <p><em>silent:</em>
- Takes one argument. If the argument is <c><![CDATA[true]]></c>, the call
- trace message mode for the current process is set to silent
- for this call and all subsequent, i.e call trace messages
- are inhibited even if <c><![CDATA[{message, true}]]></c> is called in the
- <c><![CDATA[MatchBody]]></c> part for a traced function.
- </p>
- <p>This mode can also be activated with the <c><![CDATA[silent]]></c> flag
- to <c><![CDATA[erlang:trace/3]]></c>.
- </p>
- <p>If the argument is <c><![CDATA[false]]></c>, the call trace message mode
- for the current process is set to normal (non-silent) for
- this call and all subsequent.
- </p>
- <p>If the argument is neither <c><![CDATA[true]]></c> nor <c><![CDATA[false]]></c>,
- the call trace message mode is unaffected.</p>
+ <title>Functions Allowed Only for Tracing</title>
+ <p>The functions allowed only for tracing work as follows:</p>
+
+ <taglist>
+ <tag><c>is_seq_trace</c></tag>
+ <item>
+ <p>Returns <c><![CDATA[true]]></c> if a sequential trace token is set
+ for the current process, otherwise <c><![CDATA[false]]></c>.</p>
+ </item>
+ <tag><c>set_seq_token</c></tag>
+ <item>
+ <p>Works as <c><![CDATA[seq_trace:set_token/2]]></c>, but returns
+ <c><![CDATA[true]]></c> on success, and <c><![CDATA['EXIT']]></c>
+ on error or bad argument. Only allowed in the
+ <c><![CDATA[MatchBody]]></c> part and only allowed when tracing.</p>
+ </item>
+ <tag><c>get_seq_token</c></tag>
+ <item>
+ <p>Same as <c><![CDATA[seq_trace:get_token/0]]></c> and only
+ allowed in the <c><![CDATA[MatchBody]]></c> part when tracing.</p>
+ </item>
+ <tag><c>message</c></tag>
+ <item>
+ <p>Sets an additional message appended to the
+ trace message sent. One can only set one additional message in
+ the body. Later calls replace the appended message.</p>
+ <p>As a special case, <c><![CDATA[{message, false}]]></c> disables
+ sending of trace messages ('call' and 'return_to') for this function
+ call, just like if the match specification had not matched.
+ This can be useful if only the side effects of
+ the <c><![CDATA[MatchBody]]></c> part are desired.</p>
+ <p>Another special case is <c><![CDATA[{message, true}]]></c>, which
+ sets the default behavior, as if the function had no match
+ specification; trace message is sent with no extra information
+ (if no other calls to <c><![CDATA[message]]></c> are placed before
+ <c><![CDATA[{message, true}]]></c>, it is in fact a "noop").</p>
+ <p>Takes one argument: the message. Returns <c><![CDATA[true]]></c>
+ and can only be used in the <c><![CDATA[MatchBody]]></c> part and
+ when tracing.</p>
+ </item>
+ <tag><c>return_trace</c></tag>
+ <item>
+ <p>Causes a <c><![CDATA[return_from]]></c> trace message to be sent
+ upon return from the current function. Takes no arguments, returns
+ <c><![CDATA[true]]></c> and can only be used in the
+ <c><![CDATA[MatchBody]]></c> part when tracing.
+ If the process trace flag <c><![CDATA[silent]]></c> is active, the
+ <c><![CDATA[return_from]]></c> trace message is inhibited.</p>
+ <p><em>Warning:</em> If the traced function is tail-recursive, this
+ match specification function destroys that property. Hence, if a
+ match specification executing this function is used on a
+ perpetual server process, it can only be active for a limited
+ period of time, or the emulator will eventually use all memory in
+ the host machine and crash. If this match specification function is
+ inhibited using process trace flag <c><![CDATA[silent]]></c>,
+ tail-recursiveness still remains.</p>
+ </item>
+ <tag><c>exception_trace</c></tag>
+ <item>
+ <p>Works as <c>return_trace</c> plus; if the traced function exits
+ because of an exception,
+ an <c><![CDATA[exception_from]]></c> trace message is generated,
+ regardless of the exception is caught or not.</p>
+ </item>
+ <tag><c>process_dump</c></tag>
+ <item>
+ <p>Returns some textual information about
+ the current process as a binary. Takes no arguments and is only
+ allowed in the <c><![CDATA[MatchBody]]></c> part when tracing.</p>
+ </item>
+ <tag><c>enable_trace</c></tag>
+ <item>
+ <p>With one parameter this function turns on tracing like the Erlang
+ call <c><![CDATA[erlang:trace(self(), true, [P2])]]></c>, where
+ <c><![CDATA[P2]]></c> is the parameter to
+ <c><![CDATA[enable_trace]]></c>.</p>
+ <p>With two parameters, the first parameter is to be either a process
+ identifier or the registered name of a process. In this case tracing
+ is turned on for the designated process in the same way as in the
+ Erlang call <c><![CDATA[erlang:trace(P1, true, [P2])]]></c>, where
+ <c>P1</c> is the first and <c>P2</c> is the second argument. The
+ process <c><![CDATA[P1]]></c> gets its trace messages sent to the
+ same tracer as the process executing the statement uses.
+ <c><![CDATA[P1]]></c> <em>cannot</em> be one of the atoms
+ <c><![CDATA[all]]></c>, <c><![CDATA[new]]></c> or
+ <c><![CDATA[existing]]></c> (unless they are registered names).
+ <c><![CDATA[P2]]></c> <em>cannot</em> be
+ <c><![CDATA[cpu_timestamp]]></c> or <c><![CDATA[tracer]]></c>.</p>
+ <p>Returns <c><![CDATA[true]]></c> and can only be used in
+ the <c><![CDATA[MatchBody]]></c> part when tracing.</p>
+ </item>
+ <tag><c>disable_trace</c></tag>
+ <item>
+ <p>With one parameter this function disables tracing like the Erlang
+ call <c><![CDATA[erlang:trace(self(), false, [P2])]]></c>, where
+ <c><![CDATA[P2]]></c> is the parameter to
+ <c><![CDATA[disable_trace]]></c>.</p>
+ <p>With two parameters this function works as the Erlang call
+ <c><![CDATA[erlang:trace(P1, false, [P2])]]></c>, where <c>P1</c>
+ can be either a process identifier or a registered name and is
+ specified as the first argument to the match specification function.
+ <c><![CDATA[P2]]></c> <em>cannot</em> be
+ <c><![CDATA[cpu_timestamp]]></c> or <c><![CDATA[tracer]]></c>.</p>
+ <p>Returns <c><![CDATA[true]]></c> and can only be used in the
+ <c><![CDATA[MatchBody]]></c> part when tracing.</p>
+ </item>
+ <tag><c>trace</c></tag>
+ <item>
+ <p>With two parameters this function takes a list
+ of trace flags to disable as first parameter and a list
+ of trace flags to enable as second parameter. Logically, the
+ disable list is applied first, but effectively all changes
+ are applied atomically. The trace flags
+ are the same as for <c><![CDATA[erlang:trace/3]]></c>,
+ not including <c><![CDATA[cpu_timestamp]]></c>, but including
+ <c><![CDATA[tracer]]></c>.</p>
+ <p>If a tracer is specified in both lists, the tracer in the
+ enable list takes precedence. If no tracer is specified, the same
+ tracer as the process executing the match specification is used.</p>
+ <p>When using a <seealso marker="erl_tracer">tracer module</seealso>,
+ the module must be loaded before the match specification is
+ executed. If it is not loaded, the match fails.</p>
+ <p>With three parameters to this function, the first is
+ either a process identifier or the registered name of a
+ process to set trace flags on, the second is the disable
+ list, and the third is the enable list.</p>
+ <p>Returns <c><![CDATA[true]]></c> if any trace property was changed
+ for the trace target process, otherwise <c><![CDATA[false]]></c>.
+ Can only be used in the <c><![CDATA[MatchBody]]></c> part when
+ tracing.</p>
+ </item>
+ <tag><c>caller</c></tag>
+ <item>
+ <p>Returns the calling function as a tuple <c>{Module, Function,
+ Arity}</c> or the atom <c><![CDATA[undefined]]></c> if the calling
+ function cannot be determined. Can only be used in the
+ <c><![CDATA[MatchBody]]></c> part when tracing.</p>
+ <p>Notice that if a "technically built in function" (that is, a
+ function not written in Erlang) is traced, the
+ <c><![CDATA[caller]]></c> function sometimes returns the atom
+ <c><![CDATA[undefined]]></c>. The calling
+ Erlang function is not available during such calls.</p>
+ </item>
+ <tag><c>display</c></tag>
+ <item>
+ <p>For debugging purposes only. Displays the single argument as an
+ Erlang term on <c>stdout</c>, which is seldom what is wanted.
+ Returns <c><![CDATA[true]]></c> and can only be used in the
+ <c><![CDATA[MatchBody]]></c> part when tracing.</p>
+ </item>
+ <tag><marker id="get_tcw"/><c>get_tcw</c></tag>
+ <item>
+ <p>Takes no argument and returns the value of the node's trace
+ control word. The same is done by
+ <c><![CDATA[erlang:system_info(trace_control_word)]]></c>.</p>
+ <p>The trace control word is a 32-bit unsigned integer intended for
+ generic trace control. The trace control word can be tested and
+ set both from within trace match specifications and with BIFs.
+ This call is only allowed when tracing.</p>
+ </item>
+ <tag><marker id="set_tcw"/><c>set_tcw</c></tag>
+ <item>
+ <p>Takes one unsigned integer argument, sets the value of
+ the node's trace control word to the value of the argument,
+ and returns the previous value. The same is done by
+ <c><![CDATA[erlang:system_flag(trace_control_word, Value)]]></c>.
+ It is only allowed to use <c><![CDATA[set_tcw]]></c> in the
+ <c><![CDATA[MatchBody]]></c> part when tracing.</p>
+ </item>
+ <tag><c>silent</c></tag>
+ <item>
+ <p>Takes one argument. If the argument is <c><![CDATA[true]]></c>,
+ the call trace message mode for the current process is set to
+ silent for this call and all later calls, that is, call trace
+ messages are inhibited even if
+ <c><![CDATA[{message, true}]]></c> is called in the
+ <c><![CDATA[MatchBody]]></c> part for a traced function.</p>
+ <p>This mode can also be activated with flag
+ <c><![CDATA[silent]]></c> to
+ <c><![CDATA[erlang:trace/3]]></c>.</p>
+ <p>If the argument is <c><![CDATA[false]]></c>, the call trace
+ message mode for the current process is set to normal
+ (non-silent) for this call and all later calls.</p>
+ <p>If the argument is not <c><![CDATA[true]]></c> or
+ <c><![CDATA[false]]></c>, the call trace message mode is
+ unaffected.</p>
+ </item>
+ </taglist>
</section>
- <p><em>Note</em> that all "function calls" have to be tuples,
- even if they take no arguments. The value of <c><![CDATA[self]]></c> is
- the atom() <c><![CDATA[self]]></c>, but the value of <c><![CDATA[{self}]]></c> is
- the pid() of the current process.</p>
+
+ <note>
+ <p>All "function calls" must be tuples, even if they take no arguments.
+ The value of <c><![CDATA[self]]></c> is the atom()
+ <c><![CDATA[self]]></c>, but the value of <c><![CDATA[{self}]]></c> is
+ the pid() of the current process.</p>
+ </note>
+ </section>
+
+ <section>
+ <marker id="match_target"/>
+ <title>Match target</title>
+ <p>Each execution of a match specification is done against
+ a match target term. The format and content of the target term
+ depends on the context in which the match is done. The match
+ target for ETS is always a full table tuple. The match target
+ for call trace is always a list of all function arguments. The
+ match target for event trace depends on the event type, see
+ table below.</p>
+ <table>
+ <row>
+ <cell align="left" valign="middle">Context</cell>
+ <cell align="left" valign="middle">Type</cell>
+ <cell align="left" valign="middle">Match target</cell>
+ <cell align="left" valign="middle">Description</cell>
+ </row>
+ <row>
+ <cell align="left" valign="middle">ETS</cell>
+ <cell align="left" valign="middle"></cell>
+ <cell align="left" valign="middle">{Key, Value1, Value2, ...}</cell>
+ <cell align="left" valign="middle">A table object</cell>
+ </row>
+ <row>
+ <cell align="left" valign="middle">Trace</cell>
+ <cell align="left" valign="middle">call</cell>
+ <cell align="left" valign="middle">[Arg1, Arg2, ...]</cell>
+ <cell align="left" valign="middle">Function arguments</cell>
+ </row>
+ <row>
+ <cell align="left" valign="middle">Trace</cell>
+ <cell align="left" valign="middle">send</cell>
+ <cell align="left" valign="middle">[Receiver, Message]</cell>
+ <cell align="left" valign="middle">Receiving process/port and message term</cell>
+ </row>
+ <row>
+ <cell align="left" valign="middle">Trace</cell>
+ <cell align="left" valign="middle">'receive'</cell>
+ <cell align="left" valign="middle">[Node, Sender, Message]</cell>
+ <cell align="left" valign="middle">Sending node, process/port and message term</cell>
+ </row>
+ <tcaption>Match target depending on context</tcaption>
+ </table>
</section>
<section>
- <title>Variables and literals</title>
- <p>Variables take the form <c><![CDATA['$<number>']]></c> where
- <c><![CDATA[<number>]]></c> is an integer between 0 (zero) and
- 100000000 (1e+8), the behavior if the number is outside these
- limits is <em>undefined</em>. In the <c><![CDATA[MatchHead]]></c> part, the special
- variable <c><![CDATA['_']]></c> matches anything, and never gets bound (like
- <c><![CDATA[_]]></c> in Erlang). In the <c><![CDATA[MatchCondition/MatchBody]]></c>
- parts, no unbound variables are allowed, why <c><![CDATA['_']]></c> is
- interpreted as itself (an atom). Variables can only be bound in
- the <c><![CDATA[MatchHead]]></c> part. In the <c><![CDATA[MatchBody]]></c> and
- <c><![CDATA[MatchCondition]]></c> parts, only variables bound previously may
- be used. As a special case, in the
- <c><![CDATA[MatchCondition/MatchBody]]></c> parts, the variable <c><![CDATA['$_']]></c>
- expands to the whole expression which matched the
- <c><![CDATA[MatchHead]]></c> (i.e., the whole parameter list to the possibly
- traced function or the whole matching object in the ets table)
- and the variable <c><![CDATA['$$']]></c> expands to a list
- of the values of all bound variables in order
- (i.e. <c><![CDATA[['$1','$2', ...]]]></c>).
- </p>
- <p>In the <c><![CDATA[MatchHead]]></c> part, all literals (except the variables
- noted above) are interpreted as is. In the
- <c><![CDATA[MatchCondition/MatchBody]]></c> parts, however, the
- interpretation is in some ways different. Literals in the
- <c><![CDATA[MatchCondition/MatchBody]]></c> can either be written as is,
- which works for all literals except tuples, or by using the
- special form <c><![CDATA[{const, T}]]></c>, where <c><![CDATA[T]]></c> is any Erlang
- term. For tuple literals in the match_spec, one can also use
- double tuple parentheses, i.e., construct them as a tuple of
+ <title>Variables and Literals</title>
+ <p>Variables take the form <c><![CDATA['$<number>']]></c>, where
+ <c><![CDATA[<number>]]></c> is an integer between 0 and
+ 100,000,000 (1e+8). The behavior if the number is outside these limits
+ is <em>undefined</em>. In the <c><![CDATA[MatchHead]]></c> part, the
+ special variable <c><![CDATA['_']]></c> matches anything, and never gets
+ bound (like <c><![CDATA[_]]></c> in Erlang).</p>
+
+ <list type="bulleted">
+ <item>
+ <p>In the <c><![CDATA[MatchCondition/MatchBody]]></c> parts,
+ no unbound variables are allowed, so <c><![CDATA['_']]></c> is
+ interpreted as itself (an atom). Variables can only be bound in the
+ <c><![CDATA[MatchHead]]></c> part.</p>
+ </item>
+ <item>
+ <p>In the <c><![CDATA[MatchBody]]></c> and
+ <c><![CDATA[MatchCondition]]></c> parts, only variables bound
+ previously can be used.</p>
+ </item>
+ <item>
+ <p>As a special case, the following apply in the
+ <c><![CDATA[MatchCondition/MatchBody]]></c> parts:</p>
+ <list type="bulleted">
+ <item>
+ <p>The variable <c><![CDATA['$_']]></c> expands to the whole
+ <seealso marker="#match_target">match target</seealso> term.
+ </p>
+ </item>
+ <item>
+ <p>The variable <c><![CDATA['$$']]></c> expands to a list of the
+ values of all bound variables in order (that is,
+ <c><![CDATA[['$1','$2', ...]]]></c>).</p>
+ </item>
+ </list>
+ </item>
+ </list>
+
+ <p>In the <c><![CDATA[MatchHead]]></c> part, all literals (except the
+ variables above) are interpreted "as is".</p>
+
+ <p>In the <c><![CDATA[MatchCondition/MatchBody]]></c> parts, the
+ interpretation is in some ways different. Literals in these parts
+ can either be written "as is", which works for all literals except
+ tuples, or by using the special form <c><![CDATA[{const, T}]]></c>,
+ where <c><![CDATA[T]]></c> is any Erlang term.</p>
+
+ <p>For tuple literals in the match specification, double tuple parentheses
+ can also be used, that is, construct them as a tuple of
arity one containing a single tuple, which is the one to be
constructed. The "double tuple parenthesis" syntax is useful to
construct tuples from already bound variables, like in
- <c><![CDATA[{{'$1', [a,b,'$2']}}]]></c>. Some examples may be needed:
- </p>
+ <c><![CDATA[{{'$1', [a,b,'$2']}}]]></c>. Examples:</p>
+
<table>
<row>
- <cell align="left" valign="middle">Expression </cell>
- <cell align="left" valign="middle">Variable bindings </cell>
- <cell align="left" valign="middle">Result </cell>
+ <cell align="left" valign="middle"><em>Expression</em></cell>
+ <cell align="left" valign="middle"><em>Variable Bindings</em></cell>
+ <cell align="left" valign="middle"><em>Result</em></cell>
</row>
<row>
- <cell align="left" valign="middle">{{'$1','$2'}} </cell>
+ <cell align="left" valign="middle">{{'$1','$2'}}</cell>
<cell align="left" valign="middle">'$1' = a, '$2' = b</cell>
<cell align="left" valign="middle">{a,b}</cell>
</row>
<row>
- <cell align="left" valign="middle">{const, {'$1', '$2'}} </cell>
- <cell align="left" valign="middle">doesn't matter</cell>
+ <cell align="left" valign="middle">{const, {'$1', '$2'}}</cell>
+ <cell align="left" valign="middle">Irrelevant</cell>
<cell align="left" valign="middle">{'$1', '$2'}</cell>
</row>
<row>
- <cell align="left" valign="middle">a </cell>
- <cell align="left" valign="middle">doesn't matter </cell>
+ <cell align="left" valign="middle">a</cell>
+ <cell align="left" valign="middle">Irrelevant</cell>
<cell align="left" valign="middle">a</cell>
</row>
<row>
- <cell align="left" valign="middle">'$1' </cell>
- <cell align="left" valign="middle">'$1' = [] </cell>
+ <cell align="left" valign="middle">'$1'</cell>
+ <cell align="left" valign="middle">'$1' = []</cell>
<cell align="left" valign="middle">[]</cell>
</row>
<row>
- <cell align="left" valign="middle">['$1'] </cell>
- <cell align="left" valign="middle">'$1' = [] </cell>
+ <cell align="left" valign="middle">['$1']</cell>
+ <cell align="left" valign="middle">'$1' = []</cell>
<cell align="left" valign="middle">[[]]</cell>
</row>
<row>
- <cell align="left" valign="middle">[{{a}}] </cell>
- <cell align="left" valign="middle">doesn't matter</cell>
+ <cell align="left" valign="middle">[{{a}}]</cell>
+ <cell align="left" valign="middle">Irrelevant</cell>
<cell align="left" valign="middle">[{a}]</cell>
</row>
<row>
- <cell align="left" valign="middle">42 </cell>
- <cell align="left" valign="middle">doesn't matter</cell>
+ <cell align="left" valign="middle">42</cell>
+ <cell align="left" valign="middle">Irrelevant</cell>
<cell align="left" valign="middle">42</cell>
</row>
<row>
- <cell align="left" valign="middle">"hello" </cell>
- <cell align="left" valign="middle">doesn't matter</cell>
+ <cell align="left" valign="middle">"hello"</cell>
+ <cell align="left" valign="middle">Irrelevant</cell>
<cell align="left" valign="middle">"hello"</cell>
</row>
<row>
- <cell align="left" valign="middle">$1 </cell>
- <cell align="left" valign="middle">doesn't matter</cell>
- <cell align="left" valign="middle">49 (the ASCII value for the character '1')</cell>
+ <cell align="left" valign="middle">$1</cell>
+ <cell align="left" valign="middle">Irrelevant</cell>
+ <cell align="left" valign="middle">49 (the ASCII value for
+ character '1')</cell>
</row>
- <tcaption>Literals in the MatchCondition/MatchBody parts of a match_spec</tcaption>
+ <tcaption>Literals in MatchCondition/MatchBody Parts of a Match
+ Specification</tcaption>
</table>
</section>
<section>
- <title>Execution of the match</title>
+ <title>Execution of the Match</title>
<p>The execution of the match expression, when the runtime system
- decides whether a trace message should be sent, goes as follows:
- </p>
- <p>For each tuple in the <c><![CDATA[MatchExpression]]></c> list and while no
- match has succeeded:</p>
- <list type="bulleted">
- <item>Match the <c><![CDATA[MatchHead]]></c> part against the arguments to the
- function,
- binding the <c><![CDATA['$<number>']]></c> variables (much like in
- <c><![CDATA[ets:match/2]]></c>).
- If the <c><![CDATA[MatchHead]]></c> cannot match the arguments, the match fails.
- </item>
- <item>Evaluate each <c><![CDATA[MatchCondition]]></c> (where only
- <c><![CDATA['$<number>']]></c> variables previously bound in the
- <c><![CDATA[MatchHead]]></c> can occur) and expect it to return the atom
- <c><![CDATA[true]]></c>. As soon as a condition does not evaluate to
- <c><![CDATA[true]]></c>, the match fails. If any BIF call generates an
- exception, also fail.
+ decides whether a trace message is to be sent, is as follows:</p>
+
+ <p>For each tuple in the <c><![CDATA[MatchExpression]]></c> list and while
+ no match has succeeded:</p>
+
+ <list type="ordered">
+ <item>
+ <p>Match the <c><![CDATA[MatchHead]]></c> part against the match target
+ term, binding the <c><![CDATA['$<number>']]></c> variables
+ (much like in <c><![CDATA[ets:match/2]]></c>). If the
+ <c><![CDATA[MatchHead]]></c> part cannot match the arguments, the
+ match fails.</p>
</item>
<item>
+ <p>Evaluate each <c><![CDATA[MatchCondition]]></c> (where only
+ <c><![CDATA['$<number>']]></c> variables previously bound in the
+ <c><![CDATA[MatchHead]]></c> part can occur) and expect it to return
+ the atom <c><![CDATA[true]]></c>. When a condition does not evaluate
+ to <c><![CDATA[true]]></c>, the match fails. If any BIF call
+ generates an exception, the match also fails.</p>
+ </item>
+ <item>
+ <p>Two cases can occur:</p>
<list type="bulleted">
- <item><em>If the match_spec is executing when tracing:</em><br></br>
- Evaluate each <c><![CDATA[ActionTerm]]></c> in the same way as the
- <c><![CDATA[MatchConditions]]></c>, but completely ignore the return
- values. Regardless of what happens in this part, the match has
- succeeded.</item>
- <item><em>If the match_spec is executed when selecting objects from an ETS table:</em><br></br>
- Evaluate the expressions in order and return the value of
- the last expression (typically there is only one expression
- in this context)</item>
+ <item>
+ <p>If the match specification is executing when tracing:</p>
+ <p>Evaluate each <c><![CDATA[ActionTerm]]></c> in the same way as
+ the <c><![CDATA[MatchConditions]]></c>, but ignore the return
+ values. Regardless of what happens in this part, the match has
+ succeeded.</p>
+ </item>
+ <item>
+ <p>If the match specification is executed when selecting objects
+ from an ETS table:</p>
+ <p>Evaluate the expressions in order and return the value of
+ the last expression (typically there is only one expression
+ in this context).</p>
+ </item>
</list>
</item>
</list>
</section>
<section>
- <title>Differences between match specifications in ETS and tracing</title>
- <p>ETS match specifications are there to produce a return
- value. Usually the <c><![CDATA[MatchBody]]></c> contains one single
- <c><![CDATA[ConditionExpression]]></c> which defines the return value without having
- any side effects. Calls with side effects are not allowed in the
- ETS context.</p>
+ <marker id="differences_ets_tracing"/>
+ <title>Differences between Match Specifications in ETS and Tracing</title>
+ <p>ETS match specifications produce a return value.
+ Usually the <c><![CDATA[MatchBody]]></c> contains one single
+ <c><![CDATA[ConditionExpression]]></c> that defines the return value
+ without any side effects. Calls with side effects are not allowed in
+ the ETS context.</p>
+
<p>When tracing there is no return value to produce, the
- match specification either matches or doesn't. The effect when the
- expression matches is a trace message rather then a returned
- term. The <c><![CDATA[ActionTerm]]></c>'s are executed as in an imperative
- language, i.e. for their side effects. Functions with side effects
+ match specification either matches or does not. The effect when the
+ expression matches is a trace message rather than a returned
+ term. The <c><![CDATA[ActionTerm]]></c>s are executed as in an imperative
+ language, that is, for their side effects. Functions with side effects
are also allowed when tracing.</p>
- <p>In ETS the match head is a <c><![CDATA[tuple()]]></c> (or a single match
- variable) while it is a list (or a single match variable) when
- tracing.</p>
</section>
<section>
- <title>ETS Examples</title>
- <p>Match an argument list of three where the first and third arguments
+ <title>Tracing Examples</title>
+ <p>Match an argument list of three, where the first and third arguments
are equal:</p>
+
<code type="none"><![CDATA[
[{['$1', '_', '$1'],
[],
[]}]
]]></code>
- <p>Match an argument list of three where the second argument is
- a number greater than three:</p>
+
+ <p>Match an argument list of three, where the second argument is
+ a number &gt; 3:</p>
+
<code type="none"><![CDATA[
[{['_', '$1', '_'],
[{ '>', '$1', 3}],
[]}]
]]></code>
- <p>Match an argument list of three, where the third argument
- is a tuple containing argument one and two <em>or</em> a list
- beginning with argument one and two (i. e. <c><![CDATA[[a,b,[a,b,c]]]]></c> or
- <c><![CDATA[[a,b,{a,b}]]]></c>):
- </p>
+
+ <p>Match an argument list of three, where the third argument is
+ either a tuple containing argument one and two, <em>or</em> a list
+ beginning with argument one and two (that is,
+ <c><![CDATA[[a,b,[a,b,c]]]]></c> or <c><![CDATA[[a,b,{a,b}]]]></c>):</p>
+
<code type="none"><![CDATA[
[{['$1', '$2', '$3'],
- [{orelse,
+ [{'orelse',
{'=:=', '$3', {{'$1','$2'}}},
{'and',
{'=:=', '$1', {hd, '$3'}},
{'=:=', '$2', {hd, {tl, '$3'}}}}}],
[]}]
]]></code>
- <p>The above problem may also be solved like this:</p>
+
+ <p>The above problem can also be solved as follows:</p>
+
<code type="none"><![CDATA[
[{['$1', '$2', {'$1', '$2}], [], []},
{['$1', '$2', ['$1', '$2' | '_']], [], []}]
]]></code>
- <p>Match two arguments where the first is a tuple beginning with
- a list which in turn begins with the second argument times
- two (i. e. [{[4,x],y},2] or [{[8], y, z},4])</p>
+
+ <p>Match two arguments, where the first is a tuple beginning with
+ a list that in turn begins with the second argument times
+ two (that is, <c>[{[4,x],y},2]</c> or <c>[{[8], y, z},4])</c>:</p>
+
<code type="none"><![CDATA[
[{['$1', '$2'],[{'=:=', {'*', 2, '$2'}, {hd, {element, 1, '$1'}}}],
[]}]
]]></code>
+
<p>Match three arguments. When all three are equal and are
- numbers, append the process dump to the trace message, else
- let the trace message be as is, but set the sequential trace
- token label to 4711.</p>
+ numbers, append the process dump to the trace message, otherwise
+ let the trace message be "as is", but set the sequential trace
+ token label to 4711:</p>
+
<code type="none"><![CDATA[
[{['$1', '$1', '$1'],
[{is_number, '$1'}],
[{message, {process_dump}}]},
{'_', [], [{set_seq_token, label, 4711}]}]
]]></code>
- <p>As can be noted above, the parameter list can be matched
- against a single <c><![CDATA[MatchVariable]]></c> or an <c><![CDATA['_']]></c>. To replace the
- whole
- parameter list with a single variable is a special case. In all
- other cases the <c><![CDATA[MatchHead]]></c> has to be a <em>proper</em> list.
- </p>
- <p>Match all objects in an ets table where the first element is
- the atom 'strider' and the tuple arity is 3 and return the whole
- object.</p>
- <code type="none"><![CDATA[
-[{{strider,'_','_'},
- [],
- ['$_']}]
- ]]></code>
- <p>Match all objects in an ets table with arity &gt; 1 and the first
- element is 'gandalf', return element 2.</p>
- <code type="none"><![CDATA[
-[{'$1',
- [{'==', gandalf, {element, 1, '$1'}},{'>=',{size, '$1'},2}],
- [{element,2,'$1'}]}]
- ]]></code>
- <p>In the above example, if the first element had been the key,
- it's much more efficient to match that key in the <c><![CDATA[MatchHead]]></c>
- part than in the <c><![CDATA[MatchConditions]]></c> part. The search space of
- the tables is restricted with regards to the <c><![CDATA[MatchHead]]></c> so
- that only objects with the matching key are searched.
- </p>
- <p>Match tuples of 3 elements where the second element is either
- 'merry' or 'pippin', return the whole objects.</p>
- <code type="none"><![CDATA[
-[{{'_',merry,'_'},
- [],
- ['$_']},
- {{'_',pippin,'_'},
- [],
- ['$_']}]
- ]]></code>
- <p>The function <c><![CDATA[ets:test_ms/2]]></c> can be useful for testing
- complicated ets matches.</p>
- </section>
- <section>
- <title>Tracing Examples</title>
- <p>Only generate trace message if trace control word is set to 1:</p>
+
+ <p>As can be noted above, the parameter list can be matched against a
+ single <c><![CDATA[MatchVariable]]></c> or an <c><![CDATA['_']]></c>.
+ To replace the whole parameter list with a single variable is a special
+ case. In all other cases the <c><![CDATA[MatchHead]]></c> must be a
+ <em>proper</em> list.</p>
+
+ <p>Generate a trace message only if the trace control word is set to 1:</p>
+
<code type="none"><![CDATA[
[{'_',
[{'==',{get_tcw},{const, 1}}],
[]}]
]]></code>
- <p>Only generate trace message if there is a seq trace token:</p>
+
+ <p>Generate a trace message only if there is a <c>seq_trace</c> token:</p>
+
<code type="none"><![CDATA[
[{'_',
[{'==',{is_seq_trace},{const, 1}}],
[]}]
]]></code>
- <p>Remove 'silent' trace flag when first argument is 'verbose'
- and add it when it is 'silent':</p>
+
+ <p>Remove the <c>'silent'</c> trace flag when the first argument is
+ <c>'verbose'</c>, and add it when it is <c>'silent':</c></p>
+
<code type="none"><![CDATA[
[{'$1',
[{'==',{hd, '$1'},verbose}],
@@ -643,14 +801,19 @@
[{'==',{hd, '$1'},silent}],
[{trace, [],[silent]}]}]
]]></code>
- <p>Add return_trace message if function is of arity 3:</p>
+
+ <p>Add a <c>return_trace</c> message if the function is of arity 3:</p>
+
<code type="none"><![CDATA[
[{'$1',
[{'==',{length, '$1'},3}],
[{return_trace}]},
{'_',[],[]}]
]]></code>
- <p>Only generate trace message if function is of arity 3 and first argument is 'trace':</p>
+
+ <p>Generate a trace message only if the function is of arity 3 and the
+ first argument is <c>'trace'</c>:</p>
+
<code type="none"><![CDATA[
[{['trace','$2','$3'],
[],
@@ -658,5 +821,49 @@
{'_',[],[]}]
]]></code>
</section>
+
+ <section>
+ <title>ETS Examples</title>
+ <p>Match all objects in an ETS table, where the first element is
+ the atom <c>'strider'</c> and the tuple arity is 3, and return the whole
+ object:</p>
+
+ <code type="none"><![CDATA[
+[{{strider,'_','_'},
+ [],
+ ['$_']}]
+ ]]></code>
+
+ <p>Match all objects in an ETS table with arity &gt; 1 and the first
+ element is 'gandalf', and return element 2:</p>
+
+ <code type="none"><![CDATA[
+[{'$1',
+ [{'==', gandalf, {element, 1, '$1'}},{'>=',{size, '$1'},2}],
+ [{element,2,'$1'}]}]
+ ]]></code>
+
+ <p>In this example, if the first element had been the key, it is
+ much more efficient to match that key in the <c><![CDATA[MatchHead]]></c>
+ part than in the <c><![CDATA[MatchConditions]]></c> part.
+ The search space of the tables is restricted with regards to the
+ <c><![CDATA[MatchHead]]></c> so
+ that only objects with the matching key are searched.</p>
+
+ <p>Match tuples of three elements, where the second element is either
+ <c>'merry'</c> or <c>'pippin'</c>, and return the whole objects:</p>
+
+ <code type="none"><![CDATA[
+[{{'_',merry,'_'},
+ [],
+ ['$_']},
+ {{'_',pippin,'_'},
+ [],
+ ['$_']}]
+ ]]></code>
+
+ <p>Function <seealso marker="stdlib:ets#test_ms/2"><c>ets:test_ms/2></c></seealso>
+ can be useful for testing complicated ETS matches.</p>
+ </section>
</chapter>
diff --git a/erts/doc/src/notes.xml b/erts/doc/src/notes.xml
index 7d39461f10..2a36e5568c 100644
--- a/erts/doc/src/notes.xml
+++ b/erts/doc/src/notes.xml
@@ -32,6 +32,72 @@
<p>This document describes the changes made to the ERTS application.</p>
+<section><title>Erts 8.0.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fixed a race that could cause a lost wakeup of a process
+ that timed out in a <c>receive ... after</c>. This bug
+ was introduced in ERTS version 7.0.</p>
+ <p>
+ Own Id: OTP-13798 Aux Id: OTP-11997 </p>
+ </item>
+ <item>
+ <p>
+ Fixed segfault after writing an erl crash dump.</p>
+ <p>
+ Own Id: OTP-13799</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 8.0.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix scheduler deadlock bug in <c>ets:update_counter/4</c>
+ when key is not found and inserting the default object
+ causes the table to grow.</p>
+ <p>
+ Own Id: OTP-13731 Aux Id: ERL-188 </p>
+ </item>
+ <item>
+ <p>
+ Fix VM abort "Overrun stack and heap" in garbage
+ collection triggered by a <c>bsl</c> operation and some
+ very specific heap conditions.</p>
+ <p>
+ Own Id: OTP-13732 Aux Id: seq13142 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 8.0.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ A memory allocation bug in <c>group_leader/2</c> could
+ cause an emulator crash when garbage collecting a process
+ that had been assigned a remote group leader. This bug
+ was introduced in ERTS version 8.0.</p>
+ <p>
+ Own Id: OTP-13716</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Erts 8.0</title>
<section><title>Fixed Bugs and Malfunctions</title>
@@ -67,7 +133,8 @@
</item>
<item>
<p>
- Use fsync instead of fdatasync on Mac OSX.</p>
+ Make file:datasync use fsync instead of fdatasync on Mac
+ OSX.</p>
<p>
Own Id: OTP-13411</p>
</item>
@@ -111,7 +178,7 @@
</item>
<item>
<p>
- When a abnormally large distribution message is about to
+ When an abnormally large distribution message is about to
be sent, the VM has been changed to create a crash dump
instead of a core dump.</p>
<p>
@@ -133,8 +200,9 @@
</item>
<item>
<p>
- Don't crash on terminating processes with
- <c>erlang:system_profile/1,2</c></p>
+ Fixed a race-condition bug where the emulator could crash
+ when <c>erlang:system_profile/1,2</c> was enabled and a
+ process had to be re-scheduled during termination.</p>
<p>
Own Id: OTP-13494 Aux Id: ERL-126 </p>
</item>
@@ -161,11 +229,34 @@
</item>
<item>
<p>
- Update configure scripts to not use hardcoded path for
+ Update configure scripts to not use hard-coded path for
/bin/pwd and /bin/rm.</p>
<p>
Own Id: OTP-13562</p>
</item>
+ <item>
+ <p>
+ When passing a larger binary than the outputv callback of
+ a linked-in driver can handle in one io vector slot, the
+ binary is now split into multiple slots in the io vector.
+ This change only effects system where the max size of an
+ io vector slot is smaller then the word size of the
+ system (e.g. Windows).</p>
+ <p>
+ This change means that it is now possible on Windows to
+ send binaries that are larger than 4GB to port_command,
+ which is what is used for file:write, gen_tcp:send etc.</p>
+ <p>
+ Own Id: OTP-13628</p>
+ </item>
+ <item>
+ <p>
+ Workaround of Maps output in crashdumps. Currently the
+ atom 'undefined' is generated instead of Map data if a
+ Map type is encountered during crash.</p>
+ <p>
+ Own Id: OTP-13657</p>
+ </item>
</list>
</section>
@@ -179,7 +270,7 @@
trace event handler instead of a process or port. The
<seealso marker="erl_tracer">tracer module</seealso>
makes it possible for trace tools to filter or manipulate
- trace event data without the trace event first haing to
+ trace event data without the trace event first having to
be copied from the traced process or port.</p>
<p>
With the introduction of this feature,
@@ -205,7 +296,18 @@
marker="runtime_tools:LTTng">Runtime Tools User's
Guide</seealso> .</p>
<p>
- Own Id: OTP-10282 Aux Id: kunagi-14 [14] </p>
+ Own Id: OTP-10282</p>
+ </item>
+ <item>
+ <p>
+ Make it possible to monitor/demonitor ports using the
+ <seealso
+ marker="erlang#monitor/2">erlang:monitor/2</seealso> API.
+ The process and port information functions have also been
+ updated to include information about monitors from
+ processes to ports.</p>
+ <p>
+ Own Id: OTP-11384</p>
</item>
<item>
<p>
@@ -222,7 +324,7 @@
enabled by default and more states can be enabled through
configure.</p>
<p>
- There is a convinence module called msacc that has been
+ There is a convenience module called msacc that has been
added to runtime_tools that can assist in gathering and
interpreting the data from Microstate accounting.</p>
<p>
@@ -236,7 +338,7 @@
</item>
<item>
<p>
- The port of Erlang/OTP to the realtime operating system
+ The port of Erlang/OTP to the real-time operating system
OSE has been removed.</p>
<p>
Own Id: OTP-12573</p>
@@ -250,10 +352,10 @@
sharing, within the process, when communication with
other processes in the Erlang node. There is a trade-off,
the copy is more costly but this cost can be reclaimed if
- there is a lot of sharing in the message. With this
- feature enabled literals will not be copied in a send
- except during a purge phase of the module where the
- literals are located.</p>
+ there is a lot of sharing in the message. In addition
+ literals will not be copied in a send except during a
+ purge phase of the module where the literals are located.
+ This feature is considered experimental in 19.0.</p>
<p>
Own Id: OTP-12590 Aux Id: OTP-10251 </p>
</item>
@@ -300,7 +402,7 @@
</item>
<item>
<p>
- Erlang linked-in drivers can now set their own pid's as
+ Erlang linked-in drivers can now set their own pids as
seen in <c>erlang:port_info/1</c> by using the
<c>erl_drv_set_pid</c> function. For more details see the
erl_driver documentation.</p>
@@ -351,7 +453,7 @@
Own Id: OTP-13097</p>
</item>
<item>
- <p>New functions that can load multiple functions at once
+ <p>New functions that can load multiple modules at once
have been added to the '<c>code</c>' module. The
functions are <c>code:atomic_load/1</c>,
<c>code:prepare_loading/1</c>,
@@ -361,6 +463,10 @@
Own Id: OTP-13111</p>
</item>
<item>
+ <p>The <c>-boot_var</c> option for <c>erl</c> now only
+ supports a single key and single value (as documented).
+ The option used to allow multiple key/value pairs, but
+ that behavior was undocumented.</p>
<p>The function <c>erl_prim_loader:start/3</c> has been
removed. Its documentation has also been removed.</p>
<p>The undocumented and unsupported function
@@ -378,15 +484,20 @@
Own Id: OTP-13122</p>
</item>
<item>
- <p>
- Improved dirty scheduler implementation. For more
+ <p>Improved dirty scheduler implementation. For more
information see the <seealso
- marker="erl_nif#dirty_nifs">NIF documentation</seealso>.</p>
- <p>
- Note that support for determining whether dirty NIF
- support exist or not at compile time using the C
- preprocessor macro <c>ERL_NIF_DIRTY_SCHEDULER_SUPPORT</c>
- has been removed.</p>
+ marker="erl_nif#dirty_nifs">NIF
+ documentation</seealso>.</p> <note><list> <item><p>The
+ dirty scheduler support is still
+ <em>experimental</em>.</p></item> <item><p>The support
+ for determining whether dirty NIF support exist or not at
+ compile time using the C preprocessor macro
+ <c>ERL_NIF_DIRTY_SCHEDULER_SUPPORT</c> has been
+ removed.</p></item> <item><p>The
+ <c>enif_is_on_dirty_scheduler()</c> function has been
+ removed. Use <seealso
+ marker="erl_nif#enif_thread_type"><c>enif_thread_type()</c></seealso>
+ instead.</p></item> </list></note>
<p>
Own Id: OTP-13123</p>
</item>
@@ -398,7 +509,10 @@
</item>
<item>
<p>
- Added max_heap_size process flag. See erlang:process_flag
+ Added max_heap_size process flag. max_heap_size allows
+ the user to limit the maximum heap used by a process. See
+ <seealso
+ marker="erlang#process_flag/2">erlang:process_flag</seealso>
for more details.</p>
<p>
Own Id: OTP-13174</p>
@@ -430,6 +544,17 @@
</item>
<item>
<p>
+ Improved memory allocation strategy for hipe native code
+ on x86_64 (amd64) architectures by reserving enough low
+ virtual address space needed for the HiPE/AMD64 small
+ code model. The default virtual address area for hipe
+ code is set to 512Mb, but can be changed with emulator
+ flag <c>+MXscs</c>.</p>
+ <p>
+ Own Id: OTP-13359</p>
+ </item>
+ <item>
+ <p>
Introduction of configurable management of data referred
to by the message queue of a process. Each process can be
configured individually.</p>
@@ -464,9 +589,7 @@
Own Id: OTP-13440</p>
</item>
<item>
- <p>
- Add the following NIF API functions:</p>
- <p>
+ <p>Add the following NIF API functions:</p>
<list> <item><seealso
marker="erl_nif#enif_cpu_time"><c>enif_cpu_time</c></seealso></item>
<item><seealso
@@ -483,9 +606,9 @@
marker="erl_nif#enif_binary_to_term"><c>enif_binary_to_term</c></seealso></item>
<item><seealso
marker="erl_nif#enif_port_command"><c>enif_port_command</c></seealso></item>
- </list></p>
+ </list>
<p>
- for details of what each function does, see the erl_nif
+ For details of what each function does, see the erl_nif
documentation.</p>
<p>
Own Id: OTP-13442</p>
@@ -519,7 +642,7 @@
<p>
The enif_send API has been extended to allow NULL to be
used as the message environment. When used this way, a
- message environent is implicitly created and the given
+ message environment is implicitly created and the given
term is copied into that environment before sending. This
can be an optimization if many small messages are being
sent by the nif.</p>
@@ -555,7 +678,7 @@
when tracking the lifetime of a process this new event
should be used as the creation event.</p>
<p>
- This new trace event is marked as an incompatabiliy
+ This new trace event is marked as an incompatibility
because tools that expect certain trace events when
enabling 'procs' will have to updated.</p>
<p>
@@ -582,7 +705,7 @@
have much less overhead and be more scalable.</p>
<p>
This rewrite does not break any backwards
- incompatabilities, but it does change the ordering of
+ incompatibilities, but it does change the ordering of
some trace messages when compared to previous releases.
It should be noted that this only applies to trace
messages sent to processes or ports, it does not apply to
@@ -652,6 +775,58 @@
<p>
Own Id: OTP-13560</p>
</item>
+ <item>
+ <p>
+ Add enif_snprintf to the NIF API</p>
+ <p>
+ The function <c>enif_snprintf</c> is similar to
+ <c>snprintf</c> call but can handle formatting of Erlang
+ terms via <c>%T</c> format specifier.</p>
+ <p>
+ Own Id: OTP-13580</p>
+ </item>
+ <item>
+ <p>The warning in the documentation for
+ <c>erlang:raise/3</c> has been removed. It is now
+ officially perfectly fine to use raise/3 in production
+ code.</p>
+ <p>
+ Own Id: OTP-13599</p>
+ </item>
+ <item>
+ <p>
+ Fix bugs caused by the VM sometimes truncating object
+ sizes or offsets to 32 bits on 64-bit hosts. These bugs
+ were mainly found when working with large unicode strings
+ and nifs environments.</p>
+ <p>
+ Own Id: OTP-13606</p>
+ </item>
+ <item>
+ <p>
+ Add <c>-start_epmd</c> command line option, this lets you
+ disable automatic starting of epmd when starting a
+ distributed node.</p>
+ <p>
+ Add <c>-epmd_module</c> command line option, this lets
+ you specify a module to register and look-up node names
+ in. The default module is <c>erl_epmd</c>.</p>
+ <p>
+ Own Id: OTP-13627</p>
+ </item>
+ <item>
+ <p>
+ <c>erlang:halt</c> now truncates strings longer than 200
+ characters instead of failing with <c>badarg</c>.</p>
+ <p>
+ Own Id: OTP-13630</p>
+ </item>
+ <item>
+ <p>
+ Fix possible race in poller wake up on windows</p>
+ <p>
+ Own Id: OTP-13634</p>
+ </item>
</list>
</section>
@@ -9205,9 +9380,9 @@
dynamically linking against <c>libssl.so</c> and
<c>libcrypto.so</c>. The runtime library search path has
also been extended. </item><item> The <c>configure</c>
- scripts of <c>erl_interface</c> and <c>odbc</c> now
+ scripts of Erl_interface and ODBC now
search for thread libraries and thread library quirks the
- same way as <c>erts</c> do. </item><item> The
+ same way as ERTS do. </item><item> The
<c>configure</c> script of the <c>odbc</c> application
now also looks for odbc libraries in <c>lib64</c> and
<c>lib/64</c> directories when building on a 64-bit
@@ -10323,7 +10498,7 @@
</item>
<item>
<p>
- A corrected bug in <c>ets</c> for <c>bag</c> and
+ A corrected bug in ETS for <c>bag</c> and
<c>duplicate_bag</c>. A <c>delete/2</c> or
<c>lookup_element/3</c> could miss objects in a fixed
table if one or more objects with the same key had
@@ -10765,7 +10940,7 @@
<list>
<item>
<p>
- A corrected bug in <c>ets</c> for <c>bag</c> and
+ A corrected bug in ETS for <c>bag</c> and
<c>duplicate_bag</c>. A <c>delete/2</c> or
<c>lookup_element/3</c> could miss objects in a fixed
table if one or more objects with the same key had
diff --git a/erts/doc/src/part.xml b/erts/doc/src/part.xml
index b2abfc62ca..d583b873a0 100644
--- a/erts/doc/src/part.xml
+++ b/erts/doc/src/part.xml
@@ -30,8 +30,8 @@
<file>part.xml</file>
</header>
<description>
- <p>The Erlang Runtime System Application <em>ERTS</em>.</p>
</description>
+ <xi:include href="introduction.xml"/>
<xi:include href="communication.xml"/>
<xi:include href="time_correction.xml"/>
<xi:include href="match_spec.xml"/>
diff --git a/erts/doc/src/ref_man.xml b/erts/doc/src/ref_man.xml
index e45402a397..0617463a7b 100644
--- a/erts/doc/src/ref_man.xml
+++ b/erts/doc/src/ref_man.xml
@@ -30,14 +30,6 @@
<file>application.xml</file>
</header>
<description>
- <p>The Erlang Runtime System Application <em>ERTS</em>.</p>
- <note>
- <p>By default, the <c><![CDATA[erts]]></c> is only guaranteed to be compatible
- with other Erlang/OTP components from the same release as
- the <c><![CDATA[erts]]></c> itself. See the documentation of the system flag
- <seealso marker="erl#compat_rel">+R</seealso> on how to communicate
- with Erlang/OTP components from earlier releases.</p>
- </note>
</description>
<xi:include href="erl_prim_loader.xml"/>
<xi:include href="erlang.xml"/>
diff --git a/erts/doc/src/run_erl.xml b/erts/doc/src/run_erl.xml
index 6b0fef7c0a..ad7b2c5b85 100644
--- a/erts/doc/src/run_erl.xml
+++ b/erts/doc/src/run_erl.xml
@@ -28,137 +28,184 @@
<docno></docno>
<approved></approved>
<checked></checked>
- <date>99-12-15</date>
+ <date>1999-12-15</date>
<rev></rev>
<file>run_erl.xml</file>
</header>
<com>run_erl</com>
- <comsummary>Redirect Erlang input and output streams on Solaris&reg;</comsummary>
+ <comsummary>Redirect Erlang input and output streams on Unix systems.</comsummary>
<description>
- <p>This describes the <c><![CDATA[run_erl]]></c> program specific to
- Solaris/Linux. This program redirect the standard input and standard
- output streams so that all output can be logged. It also let the
- program <c><![CDATA[to_erl]]></c> connect to the Erlang console making it
- possible to monitor and debug an embedded system remotely.</p>
- <p>You can read more about the use in the <c><![CDATA[Embedded System User's Guide]]></c>.</p>
+ <p>The <c><![CDATA[run_erl]]></c> program is specific to Unix systems.
+ This program redirects the standard input and standard
+ output streams so that all output can be logged. It also lets the
+ program <c><![CDATA[to_erl]]></c> connect to the Erlang console, making
+ it possible to monitor and debug an embedded system remotely.</p>
+
+ <p>For more information about the use, see the
+ <seealso marker="doc/embedded:embedded_solaris">
+ Embedded System User's Guide</seealso> in System Documentation.</p>
</description>
+
<funcs>
<func>
- <name>run_erl [-daemon] pipe_dir/ log_dir "exec command [command_arguments]"</name>
- <fsummary>Start the Erlang emulator without attached terminal</fsummary>
+ <name>run_erl [-daemon] pipe_dir/ log_dir "exec command
+ [command_arguments]"</name>
+ <fsummary>Start the Erlang emulator without attached terminal.</fsummary>
<desc>
- <p>The <c><![CDATA[run_erl]]></c> program arguments are:</p>
+ <p>Arguments:</p>
<taglist>
- <tag>-daemon</tag>
- <item>This option is highly recommended. It makes run_erl run in
- the background completely detached from any controlling
- terminal and the command returns to the caller immediately.
- Without this option, run_erl must be started using several
- tricks in the shell to detach it completely from the
- terminal in use when starting it. The option must be the
- first argument to run_erl on the command line.</item>
- <tag>pipe_dir</tag>
- <item>This is where to put the named pipe, usually
- <c><![CDATA[/tmp/]]></c>. It shall be suffixed by a <c><![CDATA[/]]></c> (slash),
- i.e. not <c><![CDATA[/tmp/epipies]]></c>, but <c><![CDATA[/tmp/epipes/]]></c>. </item>
- <tag>log_dir</tag>
- <item>This is where the log files are written. There will be one
- log file, <c><![CDATA[run_erl.log]]></c> that log progress and
- warnings from the <c><![CDATA[run_erl]]></c> program itself and there
- will be up to five log files at maximum 100KB each (both
- number of logs and sizes can be
- changed by environment variables, see below) with
- the content of the standard streams from and to the
- command. When the logs are full <c><![CDATA[run_erl]]></c> will delete
- and reuse the oldest log file.</item>
- <tag>"exec command [command_arguments]"</tag>
- <item>In the third argument <c><![CDATA[command]]></c> is the to execute
- where everything written to stdin and stdout is logged to
- <c><![CDATA[log_dir]]></c>.</item>
+ <tag><c>-daemon</c></tag>
+ <item>
+ <p>This option is highly recommended. It makes <c>run_erl</c> run
+ in the background completely detached from any controlling
+ terminal and the command returns to the caller immediately.
+ Without this option, <c>run_erl</c> must be started using several
+ tricks in the shell to detach it completely from the
+ terminal in use when starting it. The option must be the
+ first argument to <c>run_erl</c> on the command line.</p>
+ </item>
+ <tag><c>pipe_dir</c></tag>
+ <item>
+ <p>The named pipe, usually <c><![CDATA[/tmp/]]></c>. It must be
+ suffixed by a <c><![CDATA[/]]></c> (slash), that is,
+ <c><![CDATA[/tmp/epipes/]]></c>, not
+ <c><![CDATA[/tmp/epipes]]></c>.</p>
+ </item>
+ <tag><c>log_dir</c></tag>
+ <item>
+ <p>The log files, that is:</p>
+ <list type="bulleted">
+ <item>
+ <p>One log file, <c><![CDATA[run_erl.log]]></c>, which logs
+ progress and warnings from the <c><![CDATA[run_erl]]></c>
+ program itself.</p>
+ </item>
+ <item>
+ <p>Up to five log files at maximum 100 KB each with the content
+ of the standard streams from and to the command. (Both the
+ number of logs and sizes can be changed by environment
+ variables, see section <seealso
+ marker="#environment_variables">Environment Variables</seealso>
+ below.)</p>
+ <p>When the logs are full, <c><![CDATA[run_erl]]></c> deletes
+ and reuses the oldest log file.</p>
+ </item>
+ </list>
+ </item>
+ <tag><c>"exec command [command_arguments]"</c></tag>
+ <item>
+ <p>In the third argument, <c><![CDATA[command]]></c> is the
+ executable to execute where everything written to <c>stdin</c>
+ and <c>stdout</c> is logged to <c><![CDATA[log_dir]]></c>.</p>
+ </item>
</taglist>
</desc>
</func>
</funcs>
<section>
- <title>Notes concerning the log files</title>
- <p>While running, run_erl (as stated earlier) sends all output,
- uninterpreted, to a log file. The file is called
- <c><![CDATA[erlang.log.N]]></c>, where N is a number. When the log is "full",
- default after 100KB, run_erl starts to log in file
- <c><![CDATA[erlang.log.(N+1)]]></c>, until N reaches a certain number (default
- 5), where after N starts at 1 again and the oldest files start
- getting overwritten. If no output comes from the erlang shell, but
- the erlang machine still seems to be alive, an "ALIVE" message is
- written to the log, it is a timestamp and is written, by default,
- after 15 minutes of inactivity. Also, if output from erlang is
- logged but it's been more than 5 minutes (default) since last time
- we got anything from erlang, a timestamp is written in the
- log. The "ALIVE" messages look like this:</p>
+ <title>Notes concerning the Log Files</title>
+ <p>While running, <c>run_erl</c> (as stated earlier) sends all output,
+ uninterpreted, to a log file. The file is named
+ <c><![CDATA[erlang.log.N]]></c>, where <c>N</c> is an integer. When the
+ log is "full" (default log size is 100 KB), <c>run_erl</c> starts to log
+ in file <c><![CDATA[erlang.log.(N+1)]]></c>, until <c>N</c> reaches a
+ certain number (default 5), whereupon <c>N</c> starts at 1 again and
+ the oldest files start getting overwritten.</p>
+
+ <p>If no output comes from the Erlang shell, but
+ the Erlang machine still seems to be alive, an "ALIVE" message is
+ written to the log; it is a time stamp and is written, by default,
+ after 15 minutes of inactivity. Also, if output from Erlang is
+ logged, but more than 5 minutes (default) has passed since last time
+ we got anything from Erlang, a time stamp is written in the
+ log. The "ALIVE" messages look as follows:</p>
+
<code type="none"><![CDATA[
- ===== ALIVE <date-time-string>
- ]]></code>
- <p>while the other timestamps look like this:</p>
+===== ALIVE <date-time-string> ]]></code>
+
+ <p>The other time stamps look as follows:</p>
+
<code type="none"><![CDATA[
- ===== <date-time-string>
- ]]></code>
- <p>The <c><![CDATA[date-time-string]]></c> is the date and time the message is
- written, default in local time (can be changed to GMT if one wants
- to) and is formatted with the ANSI-C function <c><![CDATA[strftime]]></c>
- using the format string <c><![CDATA[%a %b %e %T %Z %Y]]></c>, which produces
- messages on the line of <c><![CDATA[===== ALIVE Thu May 15 10:13:36 MEST 2003]]></c>, this can be changed, see below.</p>
+===== <date-time-string> ]]></code>
+
+ <p><c><![CDATA[date-time-string]]></c> is the date and time the message is
+ written, default in local time (can be changed to UTC if needed).
+ It is formatted with the ANSI-C function <c><![CDATA[strftime]]></c>
+ using the format string <c><![CDATA[%a %b %e %T %Z %Y]]></c>, which
+ produces messages like
+ <c><![CDATA[===== ALIVE Thu May 15 10:13:36 MEST 2003]]></c>; this can
+ be changed, see the next section.</p>
</section>
<section>
- <title>Environment variables</title>
- <p>The following environment variables are recognized by run_erl
- and change the logging behavior. Also see the notes above to get
- more info on how the log behaves.</p>
+ <marker id="environment_variables"/>
+ <title>Environment Variables</title>
+ <p>The following environment variables are recognized by <c>run_erl</c>
+ and change the logging behavior. For more information, see the previous
+ section.</p>
+
<taglist>
- <tag>RUN_ERL_LOG_ALIVE_MINUTES</tag>
- <item>How long to wait for output (in minutes) before writing an
- "ALIVE" message to the log. Default is 15, can never be less
- than 1.</item>
- <tag>RUN_ERL_LOG_ACTIVITY_MINUTES</tag>
- <item>How long erlang need to be inactive before output will be
- preceded with a timestamp. Default is
- RUN_ERL_LOG_ALIVE_MINUTES div 3, but never less than 1.</item>
- <tag>RUN_ERL_LOG_ALIVE_FORMAT</tag>
- <item>Specifies another format string to be used in the strftime
- C library call. i.e specifying this to <c><![CDATA["%e-%b-%Y, %T %Z"]]></c>
- will give log messages with timestamps looking like
- <c><![CDATA[15-May-2003, 10:23:04 MET]]></c> etc. See the documentation
- for the C library function strftime for more
- information. Default is <c><![CDATA["%a %b %e %T %Z %Y"]]></c>.</item>
- <tag>RUN_ERL_LOG_ALIVE_IN_UTC</tag>
- <item>If set to anything else than "0", it will make all
- times displayed by run_erl to be in UTC (GMT,CET,MET, without
- DST), rather than
- in local time. This does not affect data coming from erlang,
- only the logs output directly by run_erl. The application
- <c><![CDATA[sasl]]></c> can be modified accordingly by setting the erlang
- application variable <c><![CDATA[utc_log]]></c> to <c><![CDATA[true]]></c>.</item>
- <tag>RUN_ERL_LOG_GENERATIONS</tag>
- <item>Controls the number of log files written before older
- files are being reused. Default is 5, minimum is 2, maximum is 1000.</item>
- <tag>RUN_ERL_LOG_MAXSIZE</tag>
- <item>The size (in bytes) of a log file before switching to a
- new log file. Default is 100000, minimum is 1000 and maximum is
- approximately 2^30.</item>
- <tag>RUN_ERL_DISABLE_FLOWCNTRL</tag>
- <item>If defined, disables input and output flow control for the pty opend by run_erl.
- Useful if you want to remove any risk of accidentally blocking the flow control
- by hit Ctrl-S (instead of Ctrl-D to detach).
- Which may result in blocking of the entire beam process
- and in the case of running heart as supervisor
- even the heart process will be blocked when writing log message to terminal.
- Leaving the heart process unable to do its work.</item>
+ <tag><c>RUN_ERL_LOG_ALIVE_MINUTES</c></tag>
+ <item>
+ <p>How long to wait for output (in minutes) before writing an
+ "ALIVE" message to the log. Defaults to 15, minimum is 1.</p>
+ </item>
+ <tag><c>RUN_ERL_LOG_ACTIVITY_MINUTES</c></tag>
+ <item>
+ <p>How long Erlang needs to be inactive before output is
+ preceded with a time stamp. Defaults to
+ <c>RUN_ERL_LOG_ALIVE_MINUTES div 3</c>, minimum is 1.</p>
+ </item>
+ <tag><c>RUN_ERL_LOG_ALIVE_FORMAT</c></tag>
+ <item>
+ <p>Specifies another format string to be used in the <c>strftime</c>
+ C library call. That is, specifying this to
+ <c><![CDATA["%e-%b-%Y, %T %Z"]]></c> gives
+ log messages with time stamps like
+ <c><![CDATA[15-May-2003, 10:23:04 MET]]></c>. For more information,
+ see the documentation for the C library function <c>strftime</c>.
+ Defaults to <c><![CDATA["%a %b %e %T %Z %Y"]]></c>.</p>
+ </item>
+ <tag><c>RUN_ERL_LOG_ALIVE_IN_UTC</c></tag>
+ <item>
+ <p>If set to anything else than <c>0</c>, it makes all
+ times displayed by <c>run_erl</c> to be in UTC (GMT, CET, MET,
+ without Daylight Saving Time), rather than in local time.
+ This does not affect data coming from Erlang,
+ only the logs output directly by <c>run_erl</c>. Application
+ SASL can be modified accordingly by setting the Erlang
+ application variable <c><![CDATA[utc_log]]></c> to
+ <c><![CDATA[true]]></c>.</p>
+ </item>
+ <tag><c>RUN_ERL_LOG_GENERATIONS</c></tag>
+ <item>
+ <p>Controls the number of log files written before older
+ files are reused. Defaults to 5, minimum is 2, maximum is 1000.</p>
+ </item>
+ <tag><c>RUN_ERL_LOG_MAXSIZE</c></tag>
+ <item>
+ <p>The size, in bytes, of a log file before switching to a
+ new log file. Defaults to 100000, minimum is 1000, maximum is
+ about 2^30.</p>
+ </item>
+ <tag><c>RUN_ERL_DISABLE_FLOWCNTRL</c></tag>
+ <item>
+ <p>If defined, disables input and output flow control for the pty
+ opend by <c>run_erl</c>. Useful if you want to remove any risk of
+ accidentally blocking the flow control by using Ctrl-S (instead of
+ Ctrl-D to detach), which can result in blocking of the entire Beam
+ process, and in the case of running heart as supervisor even the
+ heart process becomes blocked when writing log message to terminal,
+ leaving the heart process unable to do its work.</p>
+ </item>
</taglist>
</section>
<section>
- <title>SEE ALSO</title>
- <p>start(1), start_erl(1)</p>
+ <title>See Also</title>
+ <p><seealso marker="start"><c>start(1)</c></seealso>,
+ <seealso marker="start_erl"><c>start_erl(1)</c></seealso></p>
</section>
</comref>
diff --git a/erts/doc/src/start.xml b/erts/doc/src/start.xml
index adacf5b98d..6eac47fe94 100644
--- a/erts/doc/src/start.xml
+++ b/erts/doc/src/start.xml
@@ -28,38 +28,46 @@
<docno></docno>
<approved></approved>
<checked></checked>
- <date>99-12-15</date>
+ <date>1999-12-15</date>
<rev></rev>
<file>start.xml</file>
</header>
<com>start</com>
- <comsummary>OTP start script example for Unix</comsummary>
+ <comsummary>OTP start script example for Unix.</comsummary>
<description>
- <p>This describes the <c><![CDATA[start]]></c> script that is an example script on
- how to startup the Erlang system in embedded mode on Unix.</p>
- <p>You can read more about the use in the <c><![CDATA[Embedded System User's Guide]]></c>.</p>
+ <p>The <c><![CDATA[start]]></c> script is an example script on
+ how to start up the Erlang system in embedded mode on Unix.</p>
+
+ <p>For more information about the use, see the
+ <seealso marker="doc/embedded:embedded_solaris">
+ Embedded System User's Guide</seealso> in System Documentation.</p>
</description>
+
<funcs>
<func>
<name>start [ data_file ]</name>
- <fsummary>This is an example script on how to startup the Erlang system in embedded mode on Unix.</fsummary>
+ <fsummary>Example script on how to start up the Erlang system in embedded
+ mode on Unix.</fsummary>
<desc>
- <p>In the example there is one argument</p>
+ <p>Argument:</p>
<taglist>
- <tag>data_file</tag>
- <item>Optional, specifies what <c><![CDATA[start_erl.data]]></c> file
- to use.</item>
+ <tag><c>data_file</c></tag>
+ <item>
+ <p>Optional. Specifies what <c><![CDATA[start_erl.data]]></c> file
+ to use.</p>
+ </item>
</taglist>
- <p>There is also an environment variable <c><![CDATA[RELDIR]]></c> that can
- be set prior to calling this example that set the directory
+ <p>Environment variable <c><![CDATA[RELDIR]]></c> can
+ be set before calling this example, which sets the directory
where to find the release files.</p>
</desc>
</func>
</funcs>
<section>
- <title>SEE ALSO</title>
- <p>run_erl(1), start_erl(1)</p>
+ <title>See Also</title>
+ <p><seealso marker="run_erl"><c>run_erl(1)</c></seealso>,
+ <seealso marker="start_erl"><c>start_erl(1)</c></seealso></p>
</section>
</comref>
diff --git a/erts/doc/src/start_erl.xml b/erts/doc/src/start_erl.xml
index 243aeaa717..4887d4606e 100644
--- a/erts/doc/src/start_erl.xml
+++ b/erts/doc/src/start_erl.xml
@@ -28,117 +28,142 @@
<docno></docno>
<approved></approved>
<checked></checked>
- <date>98-08-05</date>
+ <date>1998-08-05</date>
<rev></rev>
<file>start_erl.xml</file>
</header>
<com>start_erl</com>
- <comsummary>Start Erlang for embedded systems on Windows NT&reg;</comsummary>
+ <comsummary>Start Erlang for embedded systems on Windows systems.</comsummary>
<description>
- <p>This describes the <c><![CDATA[start_erl]]></c> program specific to Windows
- NT. Although there exists programs with the same name on other
- platforms, their functionality is not the same.</p>
- <p>The <c><![CDATA[start_erl]]></c> program is distributed both in compiled
+ <p>The <c><![CDATA[start_erl]]></c> program is specific to
+ Windows NT/2000/XP (and later versions of Windows).
+ Although there are programs with the same name on other
+ platforms, their functionality is different.</p>
+
+ <p>This program is distributed both in compiled
form (under &lt;Erlang root&gt;\\erts-&lt;version&gt;\\bin) and
- in source form (under &lt;Erlang
- root&gt;\\erts-&lt;version&gt;\\src).
- The purpose of the source code is to make it possible to easily
- customize the program for local needs, such as cyclic restart
- detection etc. There is also a "make"-file, written for the
- <c><![CDATA[nmake]]></c> program distributed with Microsoft&reg; Visual
- C++&reg;. The program can however be compiled with
- any Win32 C compiler (possibly with slight modifications).</p>
- <p>The purpose of the program is to aid release handling on
- Windows NT&reg;. The program should be called by the
+ in source form (under &lt;Erlang root&gt;\\erts-&lt;version&gt;\\src).
+ The purpose of the source code is to ease customization of the
+ program for local needs, such as cyclic restart
+ detection. There is also a "make"-file, written for the
+ <c><![CDATA[nmake]]></c> program distributed with Microsoft Visual
+ C++. This program can, however, be compiled with
+ any Win32 C compiler (possibly with minor modifications).</p>
+
+ <p>This program aids release handling on Windows systems.
+ The program is to be called by the
<c><![CDATA[erlsrv]]></c> program, read up the release data file
- start_erl.data and start Erlang. Certain options to start_erl
- are added and removed by the release handler during upgrade with
- emulator restart (more specifically the <c><![CDATA[-data]]></c> option).</p>
+ <c>start_erl.data</c>, and start Erlang. Some options to
+ <c>start_erl</c> are added and removed by the release handler
+ during upgrade with emulator restart (more specifically option
+ <c><![CDATA[-data]]></c>).</p>
</description>
+
<funcs>
<func>
<name>start_erl [&lt;erl options>] ++ [&lt;start_erl options>]</name>
- <fsummary>Start the Erlang emulator with the correct release data</fsummary>
+ <fsummary>Start the Erlang emulator with the correct release data.
+ </fsummary>
<desc>
- <p>The <c><![CDATA[start_erl]]></c> program in its original form
+ <p>The <c><![CDATA[start_erl]]></c> program in its original form
recognizes the following options:</p>
<taglist>
- <tag>++</tag>
- <item>Mandatory, delimits start_erl options from normal Erlang
- options. Everything on the command line <em>before</em> the
- <c><![CDATA[++]]></c> is interpreted as options to be sent to the
- <c><![CDATA[erl]]></c> program. Everything <em>after</em><c><![CDATA[++]]></c> is
- interpreted as options to <c><![CDATA[start_erl]]></c> itself.</item>
- <tag>-reldir &lt;release root&gt;</tag>
-
- <item>Mandatory if the environment variable
- <c><![CDATA[RELDIR]]></c> is not specified and no
- <c>-rootdir</c> option is given. Tells start_erl where the
- root of the release tree is placed in the file-system (typically
- &lt;Erlang root&gt;\\releases). The
- <c><![CDATA[start_erl.data]]></c> file is expected to be
- placed in this directory (if not otherwise specified). If
- only the <c>-rootdir</c> option is given, the directory is
- assumed to be &lt;Erlang root&gt;\\releases.</item>
-
- <tag>-rootdir &lt;Erlang root directory&gt;</tag>
-
- <item>Mandatory if <c>-reldir</c> is not given and there is
- no <c><![CDATA[RELDIR]]></c> in the environment. This
- specifies the Erlang installation root directory (under
- which the <c>lib</c>, <c>releases</c> and
- <c>erts-&lt;Version&gt;</c> directories are placed). If only
- <c>-reldir</c> (or the environment variable
- <c><![CDATA[RELDIR]]></c>) is given, the Erlang root is assumed to
- be the directory exactly one level above the release
- directory.</item>
-
- <tag>-data &lt;data file name&gt;</tag>
- <item>Optional, specifies another data file than start_erl.data
- in the &lt;release root&gt;. It is specified relative to the
- &lt;release root&gt; or absolute (including drive letter
- etc.). This option is used by the release handler during
- upgrade and should not be used during normal
- operation. The release data file should not normally be
- named differently.</item>
- <tag>-bootflags &lt;boot flags file name&gt;</tag>
- <item>Optional, specifies a file name relative to actual release
- directory (that is the subdirectory of &lt;release
- root&gt; where the <c><![CDATA[.boot]]></c> file etc. are placed).
- The contents of this file is appended to the command line
- when Erlang is started. This makes it easy to start the
- emulator with different options for different releases.</item>
+ <tag><c>++</c></tag>
+ <item>
+ <p>Mandatory. Delimits <c>start_erl</c> options from normal Erlang
+ options. Everything on the command line <em>before</em>
+ <c><![CDATA[++]]></c> is interpreted as options to be sent to the
+ <c><![CDATA[erl]]></c> program. Everything <em>after</em>
+ <c><![CDATA[++]]></c> is interpreted as options to
+ <c><![CDATA[start_erl]]></c> itself.</p>
+ </item>
+ <tag><c>-reldir &lt;release root&gt;</c></tag>
+ <item>
+ <p>Mandatory if environment variable
+ <c><![CDATA[RELDIR]]></c> is not specified and no
+ <c>-rootdir</c> option is specified. Tells <c>start_erl</c> where
+ the root of the release tree is located in the file system
+ (typically &lt;Erlang root&gt;\\releases). The
+ <c><![CDATA[start_erl.data]]></c> file is expected to be
+ located in this directory (unless otherwise specified). If
+ only option <c>-rootdir</c> is specified, the directory is
+ assumed to be &lt;Erlang root&gt;\\releases.</p>
+ </item>
+ <tag><c>-rootdir &lt;Erlang root directory&gt;</c></tag>
+ <item>
+ <p>Mandatory if <c>-reldir</c> is not specified and no
+ <c><![CDATA[RELDIR]]></c> exists in the environment. This
+ specifies the Erlang installation root directory (under
+ which the <c>lib</c>, <c>releases</c>, and
+ <c>erts-&lt;Version&gt;</c> directories are located). If only
+ <c>-reldir</c> (or environment variable <c><![CDATA[RELDIR]]></c>)
+ is specified, the Erlang root is assumed to
+ be the directory exactly one level above the release
+ directory.</p>
+ </item>
+ <tag><c>-data &lt;data file name&gt;</c></tag>
+ <item>
+ <p>Optional. Specifies another data file than <c>start_erl.data</c>
+ in the &lt;release root&gt;. It is specified relative to the
+ &lt;release root&gt; or absolute (including drive letter, and so
+ on). This option is used by the release handler during
+ upgrade and is not to be used during normal
+ operation. Normally the release data file is not to be
+ named differently.</p>
+ </item>
+ <tag><c>-bootflags &lt;boot flags file name&gt;</c></tag>
+ <item>
+ <p>Optional. Specifies a file name relative to the release
+ directory (that is, the subdirectory of &lt;release root&gt;
+ where the <c><![CDATA[.boot]]></c> file and others are located).
+ The contents of this file is appended to the command line
+ when Erlang is started. This makes it easy to start the
+ emulator with different options for different releases.</p>
+ </item>
</taglist>
</desc>
</func>
</funcs>
<section>
- <title>NOTES</title>
- <p>As the source code is distributed, it can easily be modified to
- accept other options. The program must still accept the
- <c><![CDATA[-data]]></c> option with the semantics described above for the
- release handler to work correctly.</p>
- <p>The Erlang emulator is found by examining the registry keys for
- the emulator version specified in the release data file. The new
- emulator needs to be properly installed before the upgrade for
- this to work.</p>
- <p>Although the program is located together with files specific to
- emulator version, it is not expected to be specific to the
- emulator version. The release handler does <em>not</em> change the
- <c><![CDATA[-machine]]></c> option to <c><![CDATA[erlsrv]]></c> during emulator restart.
- Place the (possibly customized) <c><![CDATA[start_erl]]></c> program so that
- it is not overwritten during upgrade. </p>
- <p>The <c><![CDATA[erlsrv]]></c> program's default options are not
- sufficient for release handling. The machine <c><![CDATA[erlsrv]]></c>
- starts should be specified as the <c><![CDATA[start_erl]]></c> program and
- the arguments should contain the <c><![CDATA[++]]></c> followed by desired
- options.</p>
+ <title>Notes</title>
+ <list type="bulleted">
+ <item>
+ <p>As the source code is distributed, it can easily be modified to
+ accept other options. The program must still accept option
+ <c><![CDATA[-data]]></c> with the semantics described above for the
+ release handler to work correctly.</p>
+ </item>
+ <item>
+ <p>The Erlang emulator is found by examining the registry keys for
+ the emulator version specified in the release data file. The new
+ emulator must be properly installed before the upgrade for
+ this to work.</p>
+ </item>
+ <item>
+ <p>Although the program is located together with files specific to the
+ emulator version, it is not expected to be specific to the
+ emulator version. The release handler does <em>not</em> change option
+ <c><![CDATA[-machine]]></c> to <c><![CDATA[erlsrv]]></c> during
+ emulator restart. Locate the (possibly customized)
+ <c><![CDATA[start_erl]]></c> program so that it is not overwritten
+ during upgrade.</p>
+ </item>
+ <item>
+ <p>The default options of the <c><![CDATA[erlsrv]]></c> program are not
+ sufficient for release handling. The machine started by
+ <c><![CDATA[erlsrv]]></c> is be specified as the
+ <c><![CDATA[start_erl]]></c> program and the arguments are to contain
+ <c><![CDATA[++]]></c> followed by the desired options.</p>
+ </item>
+ </list>
</section>
<section>
- <title>SEE ALSO</title>
- <p>erlsrv(1), release_handler(3)</p>
+ <title>See Also</title>
+ <p><seealso marker="erlsrv"><c>erlsrv(1)</c></seealso>,
+ <seealso marker="sasl:release_handler">
+ <c>release_handler(3)</c></seealso></p>
</section>
</comref>
diff --git a/erts/doc/src/time_correction.xml b/erts/doc/src/time_correction.xml
index 236fe679cb..77e7a40529 100644
--- a/erts/doc/src/time_correction.xml
+++ b/erts/doc/src/time_correction.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1999</year><year>2015</year>
+ <year>1999</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -35,12 +35,12 @@
<section>
<title>New Extended Time Functionality</title>
- <note><p>As of OTP 18 (<c>ERTS</c> version 7.0) the time functionality of
- Erlang has been extended. This includes a
+ <note><p>As from Erlang/OTP 18 (ERTS 7.0) the time functionality
+ has been extended. This includes a
<seealso marker="#The_New_Time_API">new API</seealso>
for time and
<seealso marker="#Time_Warp_Modes">time warp
- modes</seealso> that alter the system behavior when
+ modes</seealso> that change the system behavior when
system time changes.</p>
<p>The <seealso marker="#No_Time_Warp_Mode">default
@@ -106,14 +106,18 @@
<section>
<title>POSIX Time</title>
<p>Time since
- <url href="http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap03.html#tag_21_03_00_17">Epoch</url>.
+ <url href="http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap03.html#tag_21_03_00_17">
+ Epoch</url>.
Epoch is defined to be 00:00:00 <seealso marker="#UTC">UTC</seealso>,
1970-01-01.
- <url href="http://pubs.opengroup.org/onlinepubs/009604499/basedefs/xbd_chap04.html#tag_04_14">A day in POSIX time</url>
- is defined to be exactly 86400 seconds long. Strangely enough
+ <url href="http://pubs.opengroup.org/onlinepubs/009604499/basedefs/xbd_chap04.html#tag_04_14">
+ A day in POSIX time</url>
+ is defined to be exactly 86400 seconds long. Strangely enough,
Epoch is defined to be a time in UTC, and UTC has another
definition of how long a day is. Quoting the Open Group
- <url href="http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap04.html#tag_21_04_15">"POSIX time is therefore not necessarily UTC, despite its appearance"</url>.
+ <url href="http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap04.html#tag_21_04_15">
+ "POSIX time is therefore not necessarily UTC, despite its
+ appearance"</url>.
The effect of this is that when an UTC leap second is
inserted, POSIX time either stops for a second, or repeats the
last second. If an UTC leap second would be deleted (which has not
@@ -157,7 +161,8 @@
<p>The operating systems view of
<seealso marker="#POSIX_Time">POSIX time</seealso>. To
retrieve it, call
- <seealso marker="kernel:os#system_time/0"><c>os:system_time()</c></seealso>.
+ <seealso marker="kernel:os#system_time/0">
+ <c>os:system_time()</c></seealso>.
This may or may not be an accurate view of POSIX time. This time
may typically be adjusted both backwards and forwards without
limitation. That is, <seealso marker="#Time_Warp">time warps</seealso>
@@ -165,25 +170,26 @@
<p>To get information about the Erlang runtime
system's source of OS system time, call
- <seealso marker="erlang#system_info_os_system_time_source"><c>erlang:system_info(os_system_time_source)</c></seealso>.</p>
+ <seealso marker="erlang#system_info_os_system_time_source">
+ <c>erlang:system_info(os_system_time_source)</c></seealso>.</p>
</section>
<marker id="OS_Monotonic_Time"/>
<section>
<title>OS Monotonic Time</title>
- <p>A monotonically increasing time provided by the operating
- system. This time does not leap and has a relatively steady
+ <p>A monotonically increasing time provided by the OS.
+ This time does not leap and has a relatively steady
frequency although not completely correct. However, it is not
uncommon that OS monotonic time stops if the system is
suspended. This time typically increases since some
unspecified point in time that is not connected to
<seealso marker="#OS_System_Time">OS system time</seealso>.
- This type of time is not necessarily provided by all
- operating systems.</p>
+ This type of time is not necessarily provided by all OSs.</p>
<p>To get information about the Erlang
runtime system's source of OS monotonic time, call
- <seealso marker="erlang#system_info_os_monotonic_time_source"><c>erlang:system_info(os_monotonic_time_source)</c></seealso>.</p>
+ <seealso marker="erlang#system_info_os_monotonic_time_source">
+ <c>erlang:system_info(os_monotonic_time_source)</c></seealso>.</p>
</section>
<marker id="Erlang_System_Time"/>
@@ -192,7 +198,8 @@
<p>The Erlang runtime systems view of
<seealso marker="#POSIX_Time">POSIX time</seealso>. To
retrieve it, call
- <seealso marker="erlang#system_time/0"><c>erlang:system_time()</c></seealso>.</p>
+ <seealso marker="erlang#system_time/0">
+ <c>erlang:system_time()</c></seealso>.</p>
<p>This time may or may not be an accurate view of POSIX time,
and may
@@ -211,8 +218,8 @@
<p>A monotonically increasing time provided by the
Erlang runtime system. Erlang monotonic time increases since
some unspecified point in time. To retrieve it, call
- <seealso marker="erlang#monotonic_time/0"><c>erlang:monotonic_time()</c></seealso>.
- </p>
+ <seealso marker="erlang#monotonic_time/0">
+ <c>erlang:monotonic_time()</c></seealso>.</p>
<p>The <seealso marker="#Time_Accuracy">accuracy</seealso> and
<seealso marker="#Time_Precision">precision</seealso> of Erlang
@@ -225,7 +232,8 @@
<item>Accuracy and precision of
<seealso marker="#OS_System_Time">OS system time</seealso>
</item>
- <item><seealso marker="#Time_Warp_Modes">time warp mode</seealso> used
+ <item><seealso marker="#Time_Warp_Modes">
+ time warp mode</seealso> used
</item>
</list>
@@ -238,16 +246,17 @@
time is the "time engine" that is used for more or less
everything that has anything to do with time. All timers,
regardless of it is a <c>receive ... after</c> timer, BIF timer,
- or a timer in the <c>timer</c> module, are triggered
- relative Erlang monotonic time. Even
+ or a timer in the
+ <seealso marker="stdlib:timer"><c>timer(3)</c></seealso>
+ module, are triggered relative Erlang monotonic time. Even
<seealso marker="#Erlang_System_Time">Erlang system
time</seealso> is based on Erlang monotonic time.
By adding current Erlang monotonic time with current time
offset, you get current Erlang system time.</p>
- <p>To retrieve current time offset, call
- <seealso marker="erlang#time_offset/0"><c>erlang:time_offset/0</c></seealso>.
- </p>
+ <p>To retrieve the current time offset, call
+ <seealso marker="erlang#time_offset/0">
+ <c>erlang:time_offset/0</c></seealso>.</p>
</section>
</section>
@@ -278,7 +287,7 @@
less potent time-keeper than an atomic clock is used.</p>
<p>However, NTP is not fail-safe. The NTP server can be unavailable,
- <c>ntp.conf</c> can be wrongly configured, or your computer may
+ <c>ntp.conf</c> can be wrongly configured, or your computer can
sometimes be disconnected from Internet. Furthermore, you can have a
user (or even system administrator) who thinks the correct
way to handle Daylight Saving Time is to adjust the clock one
@@ -327,16 +336,18 @@
implementation in the Erlang runtime system using
OS monotonic time. To check if your system has support
for OS monotonic time, call
- <seealso marker="erlang#system_info_os_monotonic_time_source"><c>erlang:system_info(os_monotonic_time_source)</c></seealso>.
+ <seealso marker="erlang#system_info_os_monotonic_time_source">
+ <c>erlang:system_info(os_monotonic_time_source)</c></seealso>.
To check if time correction is enabled on your system, call
- <seealso marker="erlang#system_info_time_correction"><c>erlang:system_info(time_correction)</c></seealso>.</p>
+ <seealso marker="erlang#system_info_time_correction">
+ <c>erlang:system_info(time_correction)</c></seealso>.</p>
<p>To enable or disable time correction, pass command-line argument
- <seealso marker="erl#+c"><c>+c [true|false]</c></seealso>
- to <c>erl</c>.</p>
+ <seealso marker="erl#+c"><c>+c [true|false]</c></seealso> to
+ <seealso marker="erl"><c>erl(1)</c></seealso>.</p>
<p>If time correction is disabled, Erlang monotonic time
- may warp forwards or stop, or even freeze for extended
+ can warp forwards or stop, or even freeze for extended
periods of time. There are then no guarantees that the frequency
of the Erlang monotonic clock is accurate or stable.</p>
@@ -369,7 +380,7 @@
<c>erlang:now/0</c> are suboptimal</em> from a performance
and scalability perspective. So you really want to replace
the use of it with other functionality. For examples
- of how to replace the use of <c>erlang:now/0</c>, see Section
+ of how to replace the use of <c>erlang:now/0</c>, see section
<seealso marker="#Dos_and_Donts">How to Work with the New
API</seealso>.</p>
</section>
@@ -378,7 +389,7 @@
<title>Time Warp Modes</title>
<marker id="Time_Warp_Modes"/>
<p>Current <seealso marker="#Erlang_System_Time">Erlang system
- time</seealso> is determined by adding current
+ time</seealso> is determined by adding the current
<seealso marker="erlang#monotonic_time/0">Erlang monotonic time</seealso>
with current
<seealso marker="erlang#time_offset/0">time offset</seealso>. The
@@ -387,8 +398,8 @@
<p>To set the time warp mode, pass command-line argument
<seealso marker="erl#+C_"><c>+C
- [no_time_warp|single_time_warp|multi_time_warp]</c></seealso>
- to <c>erl</c>.</p>
+ [no_time_warp|single_time_warp|multi_time_warp]</c></seealso> to
+ <seealso marker="erl"><c>erl(1)</c></seealso>.</p>
<marker id="No_Time_Warp_Mode"/>
<section>
@@ -397,8 +408,8 @@
and does not change later. This is the default behavior, but
not because it is the best mode (which it is not). It is
default <em>only</em> because this is how the runtime system
- behaved until <c>ERTS</c> 7.0.
- Ensure that your Erlang code that may execute during a time
+ behaved until ERTS 7.0.
+ Ensure that your Erlang code that can execute during a time
warp is <seealso marker="#Time_Warp_Safe_Code">time warp
safe</seealso> before enabling other modes.</p>
@@ -422,8 +433,8 @@
<marker id="Single_Time_Warp_Mode"/>
<section>
<title>Single Time Warp Mode</title>
- <p>This mode is more or less a backwards compatibility mode
- as of its introduction.</p>
+ <p>This mode is more or less a backward compatibility mode
+ as from its introduction.</p>
<p>On an embedded system it is not uncommon that the system
has no power supply, not even a battery, when it is
@@ -475,11 +486,12 @@
<item>
<p>This phase begins when the user finalizes the time
offset by calling
- <seealso marker="erlang#system_flag_time_offset"><c>erlang:system_flag(time_offset, finalize)</c></seealso>.
+ <seealso marker="erlang#system_flag_time_offset">
+ <c>erlang:system_flag(time_offset, finalize)</c></seealso>.
The finalization can only be performed once.</p>
<p>During finalization, the time offset is adjusted and
- fixated so that current Erlang system time aligns with
+ fixed so that current Erlang system time aligns with the
current OS system time. As the time offset can
change during the finalization, Erlang system time
can do a time warp at this point. The time offset is
@@ -488,7 +500,7 @@
correction from now on also makes adjustments
to align Erlang system time with OS system
time. When the system is in the final phase, it behaves
- exactly as in the <seealso marker="#No_Time_Warp_Mode">no
+ exactly as in <seealso marker="#No_Time_Warp_Mode">no
time warp mode</seealso>.</p>
</item>
</taglist>
@@ -520,7 +532,7 @@
may behave very bad.</p>
<p>Assuming that these requirements are fulfilled,
- time correction is enabled, and that OS system time
+ time correction is enabled, and OS system time
is adjusted using a time adjustment protocol such as NTP,
only small adjustments of Erlang monotonic
time are needed to keep system times
@@ -529,9 +541,10 @@
inserted (or deleted) leap seconds.</p>
<warning><p>To use this mode, ensure that
- all Erlang code that will execute in both phases are
+ all Erlang code that will execute in both phases is
<seealso marker="#Time_Warp_Safe_Code">time warp
safe</seealso>.</p>
+
<p>Code executing only in the final phase does not have
to be able to cope with the time warp.</p></warning>
</section>
@@ -542,13 +555,13 @@
<p><em>Multi-time warp mode in combination with time
correction is the preferred configuration</em>. This as
the Erlang runtime system have better performance, scale
- better, and behave better on almost all platforms. In
- addition, the accuracy and precision of time measurements
+ better, and behave better on almost all platforms.
+ Also, the accuracy and precision of time measurements
are better. Only Erlang runtime systems executing on
ancient platforms benefit from another configuration.</p>
- <p>The time offset may change at any time without limitations.
- That is, Erlang system time may perform time warps both
+ <p>The time offset can change at any time without limitations.
+ That is, Erlang system time can perform time warps both
forwards and backwards at <em>any</em> time. As we align
Erlang system time with OS system time by changing
the time offset, we can enable a time correction that tries
@@ -582,8 +595,8 @@
such issues. To improve this, the new API spreads different
functionality over multiple functions.</p>
- <p>To be backwards compatible, <c>erlang:now/0</c>
- remains as is, but <em>you are strongly discouraged from using
+ <p>To be backward compatible, <c>erlang:now/0</c>
+ remains "as is", but <em>you are strongly discouraged from using
it</em>. Many use cases of <c>erlang:now/0</c>
prevents you from using the new
<seealso marker="#Multi_Time_Warp_Mode">multi-time warp
@@ -597,38 +610,60 @@
<p>The new API consists of the following new BIFs:</p>
<list>
- <item><p><seealso marker="erlang#convert_time_unit/3"><c>erlang:convert_time_unit/3</c></seealso></p></item>
- <item><p><seealso marker="erlang#monotonic_time/0"><c>erlang:monotonic_time/0</c></seealso></p></item>
- <item><p><seealso marker="erlang#monotonic_time/1"><c>erlang:monotonic_time/1</c></seealso></p></item>
- <item><p><seealso marker="erlang#system_time/0"><c>erlang:system_time/0</c></seealso></p></item>
- <item><p><seealso marker="erlang#system_time/1"><c>erlang:system_time/1</c></seealso></p></item>
- <item><p><seealso marker="erlang#time_offset/0"><c>erlang:time_offset/0</c></seealso></p></item>
- <item><p><seealso marker="erlang#time_offset/1"><c>erlang:time_offset/1</c></seealso></p></item>
- <item><p><seealso marker="erlang#timestamp/0"><c>erlang:timestamp/0</c></seealso></p></item>
- <item><p><seealso marker="erlang#unique_integer/0"><c>erlang:unique_integer/0</c></seealso></p></item>
- <item><p><seealso marker="erlang#unique_integer/1"><c>erlang:unique_integer/1</c></seealso></p></item>
- <item><p><seealso marker="kernel:os#system_time/0"><c>os:system_time/0</c></seealso></p></item>
- <item><p><seealso marker="kernel:os#system_time/1"><c>os:system_time/1</c></seealso></p></item>
+ <item><p><seealso marker="erlang#convert_time_unit/3">
+ <c>erlang:convert_time_unit/3</c></seealso></p></item>
+ <item><p><seealso marker="erlang#monotonic_time/0">
+ <c>erlang:monotonic_time/0</c></seealso></p></item>
+ <item><p><seealso marker="erlang#monotonic_time/1">
+ <c>erlang:monotonic_time/1</c></seealso></p></item>
+ <item><p><seealso marker="erlang#system_time/0">
+ <c>erlang:system_time/0</c></seealso></p></item>
+ <item><p><seealso marker="erlang#system_time/1">
+ <c>erlang:system_time/1</c></seealso></p></item>
+ <item><p><seealso marker="erlang#time_offset/0">
+ <c>erlang:time_offset/0</c></seealso></p></item>
+ <item><p><seealso marker="erlang#time_offset/1">
+ <c>erlang:time_offset/1</c></seealso></p></item>
+ <item><p><seealso marker="erlang#timestamp/0">
+ <c>erlang:timestamp/0</c></seealso></p></item>
+ <item><p><seealso marker="erlang#unique_integer/0">
+ <c>erlang:unique_integer/0</c></seealso></p></item>
+ <item><p><seealso marker="erlang#unique_integer/1">
+ <c>erlang:unique_integer/1</c></seealso></p></item>
+ <item><p><seealso marker="kernel:os#system_time/0">
+ <c>os:system_time/0</c></seealso></p></item>
+ <item><p><seealso marker="kernel:os#system_time/1">
+ <c>os:system_time/1</c></seealso></p></item>
</list>
- <p>The new API also consists of extensions of the following existing BIFs:</p>
+ <p>The new API also consists of extensions of the following existing BIFs:
+ </p>
<list>
- <item><p><seealso marker="erlang#monitor/2"><c>erlang:monitor(time_offset, clock_service)</c></seealso></p></item>
- <item><p><seealso marker="erlang#system_flag_time_offset"><c>erlang:system_flag(time_offset, finalize)</c></seealso></p></item>
- <item><p><seealso marker="erlang#system_info_os_monotonic_time_source"><c>erlang:system_info(os_monotonic_time_source)</c></seealso></p></item>
- <item><p><seealso marker="erlang#system_info_os_system_time_source"><c>erlang:system_info(os_system_time_source)</c></seealso></p></item>
- <item><p><seealso marker="erlang#system_info_time_offset"><c>erlang:system_info(time_offset)</c></seealso></p></item>
- <item><p><seealso marker="erlang#system_info_time_warp_mode"><c>erlang:system_info(time_warp_mode)</c></seealso></p></item>
- <item><p><seealso marker="erlang#system_info_time_correction"><c>erlang:system_info(time_correction)</c></seealso></p></item>
- <item><p><seealso marker="erlang#system_info_start_time"><c>erlang:system_info(start_time)</c></seealso></p></item>
- <item><p><seealso marker="erlang#system_info_end_time"><c>erlang:system_info(end_time)</c></seealso></p></item>
+ <item><p><seealso marker="erlang#monitor/2">
+ <c>erlang:monitor(time_offset, clock_service)</c></seealso></p></item>
+ <item><p><seealso marker="erlang#system_flag_time_offset">
+ <c>erlang:system_flag(time_offset, finalize)</c></seealso></p></item>
+ <item><p><seealso marker="erlang#system_info_os_monotonic_time_source">
+ <c>erlang:system_info(os_monotonic_time_source)</c></seealso></p></item>
+ <item><p><seealso marker="erlang#system_info_os_system_time_source">
+ <c>erlang:system_info(os_system_time_source)</c></seealso></p></item>
+ <item><p><seealso marker="erlang#system_info_time_offset">
+ <c>erlang:system_info(time_offset)</c></seealso></p></item>
+ <item><p><seealso marker="erlang#system_info_time_warp_mode">
+ <c>erlang:system_info(time_warp_mode)</c></seealso></p></item>
+ <item><p><seealso marker="erlang#system_info_time_correction">
+ <c>erlang:system_info(time_correction)</c></seealso></p></item>
+ <item><p><seealso marker="erlang#system_info_start_time">
+ <c>erlang:system_info(start_time)</c></seealso></p></item>
+ <item><p><seealso marker="erlang#system_info_end_time">
+ <c>erlang:system_info(end_time)</c></seealso></p></item>
</list>
<marker id="The_New_Erlang_Monotonic_Time"/>
<section>
<title>New Erlang Monotonic Time</title>
- <p>Erlang monotonic time as such is new as of <c>ERTS</c> 7.0.
+ <p>Erlang monotonic time as such is new as from ERTS 7.0.
It is introduced to detach time measurements, such as elapsed
time from calendar time. In many use cases there is a need to
measure elapsed time or specify a time relative to another point
@@ -649,7 +684,7 @@
modes, and only fully separated in the
<seealso marker="#Multi_Time_Warp_Mode">multi-time
warp mode</seealso>. All other modes than the
- multi-time warp mode are for backwards
+ multi-time warp mode are for backward
compatibility reasons. When using these modes, the
accuracy of Erlang monotonic time suffer, as
the adjustments of Erlang monotonic time in these
@@ -672,15 +707,17 @@
<p>To be able to react to a change in Erlang
system time, you must be able to detect that it
- happened. The change in Erlang system time occurs when
+ happened. The change in Erlang system time occurs when the
current time offset is changed. We have therefore
introduced the possibility to monitor the time offset using
- <seealso marker="erlang#monitor/2"><c>erlang:monitor(time_offset, clock_service)</c></seealso>.
+ <seealso marker="erlang#monitor/2">
+ <c>erlang:monitor(time_offset, clock_service)</c></seealso>.
A process monitoring the time
offset is sent a message on the following format
when the time offset is changed:</p>
- <code type="none">{'CHANGE', MonitorReference, time_offset, clock_service, NewTimeOffset}</code>
+ <code type="none">
+{'CHANGE', MonitorReference, time_offset, clock_service, NewTimeOffset}</code>
</section>
<marker id="Unique_Values"/>
@@ -690,8 +727,8 @@
produces unique and strictly monotonically increasing
values. To detach this functionality from
time measurements, we have introduced
- <seealso marker="erlang#unique_integer/1"><c>erlang:unique_integer()</c></seealso>.
- </p>
+ <seealso marker="erlang#unique_integer/1">
+ <c>erlang:unique_integer()</c></seealso>.</p>
</section>
<marker id="Dos_and_Donts"/>
@@ -699,27 +736,28 @@
<title>How to Work with the New API</title>
<p>Previously <c>erlang:now/0</c> was the only option for doing
many things. This section deals with some things that
- <c>erlang:now/0</c> can be used for, and how you are to
- these using the new API.</p>
+ <c>erlang:now/0</c> can be used for, and how you use the new API.</p>
<marker id="Dos_and_Donts_Retrieve_Erlang_System_Time"/>
<section>
<title>Retrieve Erlang System Time</title>
<dont>
<p>
- Use <c>erlang:now/0</c> to retrieve current Erlang system time.
+ Use <c>erlang:now/0</c> to retrieve the current Erlang system time.
</p>
</dont>
<do>
<p>
Use
- <seealso marker="erlang#system_time/1"><c>erlang:system_time/1</c></seealso>
- to retrieve current Erlang system time on the
+ <seealso marker="erlang#system_time/1">
+ <c>erlang:system_time/1</c></seealso>
+ to retrieve the current Erlang system time on the
<seealso marker="erlang#type_time_unit">time unit</seealso>
of your choice.</p>
- <p>If you want the same format as returned by <c>erlang:now/0</c>, use
- <seealso marker="erlang#timestamp/0"><c>erlang:timestamp/0</c></seealso>.
- </p>
+ <p>If you want the same format as returned by <c>erlang:now/0</c>,
+ use <seealso marker="erlang#timestamp/0">
+ <c>erlang:timestamp/0</c></seealso>.
+ </p>
</do>
</section>
@@ -728,28 +766,31 @@
<title>Measure Elapsed Time</title>
<dont>
<p>
- Take timestamps with <c>erlang:now/0</c> and calculate
+ Take time stamps with <c>erlang:now/0</c> and calculate
the difference in time with
- <seealso marker="stdlib:timer#now_diff/2"><c>timer:now_diff/2</c></seealso>.
+ <seealso marker="stdlib:timer#now_diff/2">
+ <c>timer:now_diff/2</c></seealso>.
</p>
</dont>
<do>
<p>
- Take timestamps with
- <seealso marker="erlang#monotonic_time/0"><c>erlang:monotonic_time/0</c></seealso>
+ Take time stamps with
+ <seealso marker="erlang#monotonic_time/0">
+ <c>erlang:monotonic_time/0</c></seealso>
and calculate the time difference using ordinary subtraction.
- The result will be in <c>native</c>
+ The result is in <c>native</c>
<seealso marker="erlang#type_time_unit">time unit</seealso>.
If you want to convert the
result to another time unit, you can use
- <seealso marker="erlang#convert_time_unit/3"><c>erlang:convert_time_unit/3</c></seealso>.
- </p>
-
- <p>An easier way to do this is to use
- <seealso marker="erlang#monotonic_time/1"><c>erlang:monotonic_time/1</c></seealso>
+ <seealso marker="erlang#convert_time_unit/3">
+ <c>erlang:convert_time_unit/3</c></seealso>.
+ </p>
+ <p>An easier way to do this is to use
+ <seealso marker="erlang#monotonic_time/1">
+ <c>erlang:monotonic_time/1</c></seealso>
with the desired time unit. However, you can then lose accuracy
and precision.
- </p>
+ </p>
</do>
</section>
@@ -758,7 +799,7 @@
<title>Determine Order of Events</title>
<dont>
<p>
- Determine the order of events by saving a timestamp
+ Determine the order of events by saving a time stamp
with <c>erlang:now/0</c> when the event occurs.
</p>
</dont>
@@ -766,8 +807,9 @@
<p>
Determine the order of events by saving the integer
returned by
- <seealso marker="erlang#unique_integer/1"><c>erlang:unique_integer([monotonic])</c></seealso>
- when the event occurs. These integers will be strictly
+ <seealso marker="erlang#unique_integer/1">
+ <c>erlang:unique_integer([monotonic])</c></seealso>
+ when the event occurs. These integers are strictly
monotonically ordered on current runtime system instance
corresponding to creation time.
</p>
@@ -779,7 +821,7 @@
<title>Determine Order of Events with Time of the Event</title>
<dont>
<p>
- Determine the order of events by saving a timestamp
+ Determine the order of events by saving a time stamp
with <c>erlang:now/0</c> when the event occurs.
</p>
</dont>
@@ -795,18 +837,19 @@ Time = erlang:monotonic_time(),
UMI = erlang:unique_integer([monotonic]),
EventTag = {Time, UMI}</code>
- <p>These tuples will be strictly monotonically ordered
- on current runtime system instance according to
+ <p>These tuples are strictly monotonically ordered
+ on the current runtime system instance according to
creation time. It is important that the
monotonic time is in the first element (the most
- significant element when comparing 2-tuples). Using
+ significant element when comparing two-tuples). Using
the monotonic time in the tuples, you can calculate time
between events.</p>
<p>If you are interested in Erlang system time at the
time when the event occurred, you can also save the time
offset before or after saving the events using
- <seealso marker="erlang#time_offset/0"><c>erlang:time_offset/0</c></seealso>.
+ <seealso marker="erlang#time_offset/0">
+ <c>erlang:time_offset/0</c></seealso>.
Erlang monotonic time added with the time
offset corresponds to Erlang system time.</p>
@@ -814,7 +857,7 @@ EventTag = {Time, UMI}</code>
can change, and you want to get the actual
Erlang system time when the event occurred, you can
save the time offset as a third element in the tuple
- (the least significant element when comparing 3-tuples).</p>
+ (the least significant element when comparing three-tuples).</p>
</do>
</section>
@@ -830,10 +873,12 @@ EventTag = {Time, UMI}</code>
<do>
<p>
Use the value returned from
- <seealso marker="erlang#unique_integer/0"><c>erlang:unique_integer/0</c></seealso>
+ <seealso marker="erlang#unique_integer/0">
+ <c>erlang:unique_integer/0</c></seealso>
to create a name unique on the current runtime system
instance. If you only want positive integers, you can use
- <seealso marker="erlang#unique_integer/1"><c>erlang:unique_integer([positive])</c></seealso>.
+ <seealso marker="erlang#unique_integer/1">
+ <c>erlang:unique_integer([positive])</c></seealso>.
</p>
</do>
</section>
@@ -849,12 +894,15 @@ EventTag = {Time, UMI}</code>
<do>
<p>
Seed random number generation using a combination of
- <seealso marker="erlang#monotonic_time/0"><c>erlang:monotonic_time()</c></seealso>,
- <seealso marker="erlang#time_offset/0"><c>erlang:time_offset()</c></seealso>,
- <seealso marker="erlang#unique_integer/0"><c>erlang:unique_integer()</c></seealso>,
+ <seealso marker="erlang#monotonic_time/0">
+ <c>erlang:monotonic_time()</c></seealso>,
+ <seealso marker="erlang#time_offset/0">
+ <c>erlang:time_offset()</c></seealso>,
+ <seealso marker="erlang#unique_integer/0">
+ <c>erlang:unique_integer()</c></seealso>,
and other functionality.
</p>
- </do>
+ </do>
</section>
<p>To sum up this section: <em>Do not use <c>erlang:now/0</c>.</em></p>
@@ -867,9 +915,9 @@ EventTag = {Time, UMI}</code>
<p>It can be required that your code must run on a variety
of OTP installations of different OTP releases. If so, you
cannot use the new API out of the box, as it will
- not be available on old pre OTP 18 releases. The solution
+ not be available on releases before OTP 18. The solution
is <em>not</em> to avoid using the new API, as your
- code then would not benefit from the scalability
+ code would then not benefit from the scalability
and accuracy improvements made. Instead, use the
new API when available, and fall back on <c>erlang:now/0</c>
when the new API is unavailable.</p>
@@ -879,16 +927,20 @@ EventTag = {Time, UMI}</code>
<list type="bulleted">
<item>
- <seealso marker="erlang#system_info_start_time"><c>erlang:system_info(start_time)</c></seealso>
+ <seealso marker="erlang#system_info_start_time">
+ <c>erlang:system_info(start_time)</c></seealso>
</item>
<item>
- <seealso marker="erlang#system_info_end_time"><c>erlang:system_info(end_time)</c></seealso>
+ <seealso marker="erlang#system_info_end_time">
+ <c>erlang:system_info(end_time)</c></seealso>
</item>
<item>
- <seealso marker="erlang#system_info_os_monotonic_time_source"><c>erlang:system_info(os_monotonic_time_source)</c></seealso>
+ <seealso marker="erlang#system_info_os_monotonic_time_source">
+ <c>erlang:system_info(os_monotonic_time_source)</c></seealso>
</item>
<item>
- <seealso marker="erlang#system_info_os_system_time_source"><c>erlang:system_info(os_system_time_source)</c></seealso>)
+ <seealso marker="erlang#system_info_os_system_time_source">
+ <c>erlang:system_info(os_system_time_source)</c></seealso>)
</item>
</list>
diff --git a/erts/doc/src/tty.xml b/erts/doc/src/tty.xml
index b2866c82cf..51db1ba8e2 100644
--- a/erts/doc/src/tty.xml
+++ b/erts/doc/src/tty.xml
@@ -22,7 +22,7 @@
</legalnotice>
- <title>tty - A command line interface</title>
+ <title>tty - A Command-Line Interface</title>
<prepared>ETX/B/SFP C. Granbom</prepared>
<responsible></responsible>
<docno></docno>
@@ -32,24 +32,48 @@
<rev>A</rev>
<file>tty.xml</file>
</header>
- <p><c><![CDATA[tty]]></c> is a simple command line interface program where keystrokes are collected and interpreted. Completed lines are sent to the shell for interpretation. There is a simple history mechanism, which saves previous lines. These can be edited before sending them to the shell.
- <c><![CDATA[tty]]></c> is started when Erlang is started with the command:<br></br></p>
- <p><em>erl</em></p>
- <p><c><![CDATA[tty]]></c> operates in one of two modes:<br></br></p>
+ <p><c><![CDATA[tty]]></c> is a simple command-line interface program where
+ keystrokes are collected and interpreted. Completed lines are sent to the
+ shell for interpretation. A simple history mechanism saves previous lines,
+ which can be edited before sending them to the shell. <c><![CDATA[tty]]></c>
+ is started when Erlang is started with the following command:</p>
+
+ <pre>
+erl</pre>
+
+ <p><c><![CDATA[tty]]></c> operates in one of two modes:</p>
+
<list type="bulleted">
<item>
- <p><em>normal mode</em>, in which lines of text can be edited and sent to the shell.</p>
+ <p>Normal mode, in which text lines can be edited and sent to the
+ shell.</p>
</item>
<item>
- <p><em>shell break</em> mode, which allows the user to kill the current shell, start multiple shells etc. Shell break mode is started by typing <em>Control G</em>.</p>
+ <p>Shell break mode, which allows the user to kill the current shell,
+ start multiple shells, and so on.</p>
</item>
</list>
<section>
<title>Normal Mode</title>
- <p>In normal mode keystrokes from the user are collected and interpreted by <c><![CDATA[tty]]></c>. Most of the <em>emacs</em> line editing commands are supported. The following is a complete list of the supported line editing commands.<br></br></p>
- <p><em>Note:</em> The notation <c><![CDATA[C-a]]></c> means pressing the control key and the letter <c><![CDATA[a]]></c> simultaneously. <c><![CDATA[M-f]]></c> means pressing the <c><![CDATA[ESC]]></c> key followed by the letter <c><![CDATA[f]]></c>. <c><![CDATA[Home]]></c> and <c><![CDATA[End]]></c> represent the keys with the same name on the keyboard, whereas <c><![CDATA[Left]]></c> and <c><![CDATA[Right]]></c> represent the corresponding arrow keys.
- </p>
+ <p>In normal mode keystrokes from the user are collected and interpreted by
+ <c><![CDATA[tty]]></c>. Most of the <em>Emacs</em> line-editing commands
+ are supported. The following is a complete list of the supported
+ line-editing commands.</p>
+
+ <p>Typographic conventions:</p>
+
+ <list type="bulleted">
+ <item><c>C-a</c> means pressing the <em>Ctrl</em> key and the letter
+ <c>a</c> simultaneously.</item>
+ <item><c>M-f</c> means pressing the <em>Esc</em> key and the letter
+ <c>f</c> in sequence.</item>
+ <item><c>Home</c> and <c>End</c> represent the keys with the same
+ name on the keyboard.</item>
+ <item><c>Left</c> and <c>Right</c> represent the corresponding arrow
+ keys.</item>
+ </list>
+
<table>
<row>
<cell align="left" valign="middle"><em>Key Sequence</em></cell>
@@ -121,11 +145,13 @@
</row>
<row>
<cell align="left" valign="middle">C-n</cell>
- <cell align="left" valign="middle">Fetch next line from the history buffer</cell>
+ <cell align="left" valign="middle">Fetch next line from the history
+ buffer</cell>
</row>
<row>
<cell align="left" valign="middle">C-p</cell>
- <cell align="left" valign="middle">Fetch previous line from the history buffer</cell>
+ <cell align="left" valign="middle">Fetch previous line from the history
+ buffer</cell>
</row>
<row>
<cell align="left" valign="middle">C-t</cell>
@@ -139,23 +165,18 @@
<cell align="left" valign="middle">C-y</cell>
<cell align="left" valign="middle">Insert previously killed text</cell>
</row>
- <tcaption>tty text editing</tcaption>
+ <tcaption>tty Text Editing</tcaption>
</table>
</section>
<section>
<title>Shell Break Mode</title>
- <p><em>tty</em> enters <em>shell</em> break mode when you type <em>Control G</em>. In this mode you can:<br></br></p>
+ <p>In this mode the following can be done:</p>
+
<list type="bulleted">
- <item>
- <p>Kill or suspend the current shell</p>
- </item>
- <item>
- <p>Connect to a suspended shell</p>
- </item>
- <item>
- <p>Start a new shell</p>
- </item>
+ <item>Kill or suspend the current shell</item>
+ <item>Connect to a suspended shell</item>
+ <item>Start a new shell</item>
</list>
</section>
</chapter>
diff --git a/erts/doc/src/werl.xml b/erts/doc/src/werl.xml
index 1a3cb6f502..792fe204e8 100644
--- a/erts/doc/src/werl.xml
+++ b/erts/doc/src/werl.xml
@@ -28,62 +28,91 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>98-01-26</date>
+ <date>1998-01-26</date>
<rev>A</rev>
<file>werl.xml</file>
</header>
<com>werl</com>
<comsummary>The Erlang Emulator</comsummary>
<description>
- <p>On Windows, the preferred way to start the Erlang system for interactive use is:</p>
+ <p>On Windows, the preferred way to start the Erlang system for interactive
+ use is as follows:</p>
+
<p><c><![CDATA[werl <arguments>]]></c></p>
- <p>This will start Erlang in its own window, with fully
- functioning command-line editing and scrollbars. All flags
+ <p>This starts Erlang in its own window, with fully
+ functioning command-line editing and scrollbars. All flags
except <c><![CDATA[-oldshell]]></c> work as they do for
- the <seealso marker="erl">erl</seealso> command.</p>
+ <seealso marker="erl"><c>erl(1)</c></seealso>.</p>
+
+ <list type="bulleted">
+ <item>
+ <p>To copy text to the clipboard, use <c>Ctrl-C</c>.</p>
+ </item>
+ <item>
+ <p>To paste text, use <c>Ctrl-V</c>.</p>
+ </item>
+ <item>
+ <p>To interrupt the runtime system or the shell process (depending
+ on what has been specified with system flag <c>+B</c>), use
+ <c>Ctrl-Break</c>.</p>
+ </item>
+ </list>
- <p>Ctrl-C is reserved for copying text to the clipboard (Ctrl-V to paste).
- To interrupt the runtime system or the shell process (depending on what
- has been specified with the +B system flag), you should use Ctrl-Break.</p>
<p>In cases where you want to redirect standard input and/or
- standard output or use Erlang in a pipeline, the <c>werl</c> is
- not suitable, and the <c>erl</c> program should be used instead.</p>
+ standard output or use Erlang in a pipeline, <c>werl</c> is
+ not suitable, and the <c>erl</c> program is to be used instead.</p>
- <p>The <c>werl</c> window is in many ways modelled after the <c>xterm</c>
+ <p>The <c>werl</c> window is in many ways modeled after the <c>xterm</c>
window present on other platforms, as the <c>xterm</c> model
- fits well with line oriented command based interaction. This
- means that selecting text is line oriented rather than rectangle
- oriented.</p>
-
- <p>To select text in the <c>werl</c> window , simply press and hold
- the left mouse button and drag the mouse over the text you want
- to select. If the selection crosses line boundaries, the
- selected text will consist of complete lines where applicable
- (just like in a word processor). To select more text than fits
- in the window, start by selecting a small portion in the
- beginning of the text you want, then use the scrollbar
- to view the end of the desired selection, point to it and press
- the <em>right</em> mouse-button. The whole area between your
- first selection and the point where you right-clicked will be
- included in the selection.</p>
+ fits well with line-oriented command-based interaction. This
+ means that selecting text is line-oriented rather than
+ rectangle-oriented.</p>
- <p>The selected text is copied to the clipboard by either
- pressing <c>Ctrl-C</c>, using the menu or pressing the copy
- button in the toolbar.</p>
+ <list type="bulleted">
+ <item>
+ <p>To select text in the <c>werl</c> window, press and hold
+ the left mouse button and drag the mouse over the text you want
+ to select. If the selection crosses line boundaries, the
+ selected text consists of complete lines where applicable
+ (just like in a word processor).</p>
+ </item>
+ <item>
+ <p>To select more text than fits
+ in the window, start by selecting a small part in the
+ beginning of the text you want, then use the scrollbar
+ to view the end of the desired selection, point to it, and press
+ the <em>right</em> mouse button. The whole area between your
+ first selection and the point where you right-clicked is
+ included in the selection.</p>
+ </item>
+ <item>
+ <p>To copy the selected text to the clipboard, either
+ use <c>Ctrl-C</c>, use the menu, or press the copy
+ button in the toolbar.</p>
+ </item>
+ </list>
- <p>Pasted text is always inserted at the current prompt position
- and will be interpreted by Erlang as usual keyboard input.</p>
+ <p>Pasted text is inserted at the current prompt position
+ and is interpreted by Erlang as usual keyboard input.</p>
- <p>Previous command lines can be retrieved by pressing the <c>Up
- arrow</c> or by pressing <c>Ctrl-P</c>. There is also a drop
- down box in the toolbar containing the command
- history. Selecting a command in the drop down box will insert it
- at the prompt, just as if you used the keyboard to retrieve the
+ <list type="bulleted">
+ <item>
+ <p>To retrieve previous command lines, press the <c>Up arrow</c> or
+ use <c>Ctrl-P</c>.</p>
+ </item>
+ </list>
+
+ <p>A drop-down box in the toolbar contains the command
+ history. Selecting a command in the drop-down box inserts the command
+ at the prompt, as if you used the keyboard to retrieve the
command.</p>
-
- <p>Closing the <c>werl</c> window will stop the Erlang emulator.</p>
+ <list type="bulleted">
+ <item>
+ <p>To stop the Erlang emulator, close the <c>werl</c> window.</p>
+ </item>
+ </list>
</description>
</comref>
diff --git a/erts/doc/src/zlib.xml b/erts/doc/src/zlib.xml
index 861661043f..138414a880 100644
--- a/erts/doc/src/zlib.xml
+++ b/erts/doc/src/zlib.xml
@@ -30,13 +30,18 @@
<file>zlib.xml</file>
</header>
<module>zlib</module>
- <modulesummary>Zlib Compression interface.</modulesummary>
+ <modulesummary>zlib compression interface.</modulesummary>
<description>
- <p>The zlib module provides an API for the zlib library
- (http://www.zlib.org).
- It is used to compress and decompress data. The
- data format is described by RFCs 1950 to 1952.</p>
- <p>A typical (compress) usage looks like:</p>
+ <p>This module provides an API for the zlib library
+ (<url href="http://www.zlib.net">www.zlib.net</url>).
+ It is used to compress and decompress data.
+ The data format is described by
+ <url href="https://www.ietf.org/rfc/rfc1950.txt">RFC 1950</url>,
+ <url href="https://www.ietf.org/rfc/rfc1951.txt">RFC 1951</url>, and
+ <url href="https://www.ietf.org/rfc/rfc1952.txt">RFC 1952</url>.</p>
+
+ <p>A typical (compress) usage is as follows:</p>
+
<pre>
Z = zlib:open(),
ok = zlib:deflateInit(Z,default),
@@ -50,29 +55,25 @@ Last = zlib:deflate(Z, [], finish),
ok = zlib:deflateEnd(Z),
zlib:close(Z),
list_to_binary([Compressed|Last])</pre>
+
<p>In all functions errors, <c>{'EXIT',{Reason,Backtrace}}</c>,
- might be thrown, where <c>Reason</c> describes the
- error. Typical reasons are:</p>
+ can be thrown, where <c>Reason</c> describes the error.</p>
+
+ <p>Typical <c>Reasons</c>s:</p>
+
<taglist>
<tag><c>badarg</c></tag>
- <item>
- <p>Bad argument</p>
+ <item>Bad argument.
</item>
<tag><c>data_error</c></tag>
- <item>
- <p>The data contains errors</p>
+ <item>The data contains errors.
</item>
<tag><c>stream_error</c></tag>
- <item>
- <p>Inconsistent stream state</p>
- </item>
+ <item>Inconsistent stream state.</item>
<tag><c>einval</c></tag>
- <item>
- <p>Bad value or wrong function called</p>
- </item>
+ <item>Bad value or wrong function called.</item>
<tag><c>{need_dictionary,Adler32}</c></tag>
- <item>
- <p>See <c>inflate/2</c></p>
+ <item>See <seealso marker="#inflate/2"><c>inflate/2</c></seealso>.
</item>
</taglist>
</description>
@@ -81,7 +82,7 @@ list_to_binary([Compressed|Last])</pre>
<datatype>
<name name="zstream"/>
<desc>
- <p>A zlib stream, see <seealso marker="#open/0">open/0</seealso>.
+ <p>A zlib stream, see <seealso marker="#open/0"><c>open/0</c></seealso>.
</p>
</desc>
</datatype>
@@ -104,116 +105,144 @@ list_to_binary([Compressed|Last])</pre>
</desc>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="open" arity="0"/>
- <fsummary>Open a stream and return a stream reference</fsummary>
+ <name name="adler32" arity="2"/>
+ <fsummary>Calculate the Adler checksum.</fsummary>
+ <desc>
+ <p>Calculates the Adler-32 checksum for <c><anno>Data</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="adler32" arity="3"/>
+ <fsummary>Calculate the Adler checksum.</fsummary>
+ <desc>
+ <p>Updates a running Adler-32 checksum for <c><anno>Data</anno></c>.
+ If <c><anno>Data</anno></c> is the empty binary or the empty iolist,
+ this function returns the required initial value for the checksum.</p>
+ <p>Example:</p>
+ <pre>
+Crc = lists:foldl(fun(Data,Crc0) ->
+ zlib:adler32(Z, Crc0, Data),
+ end, zlib:adler32(Z,&lt;&lt; &gt;&gt;), Datas)</pre>
+ </desc>
+ </func>
+
+ <func>
+ <name name="adler32_combine" arity="4"/>
+ <fsummary>Combine two Adler-32 checksums.</fsummary>
<desc>
- <p>Open a zlib stream.</p>
+ <p>Combines two Adler-32 checksums into one. For two binaries or
+ iolists, <c>Data1</c> and <c>Data2</c> with sizes of <c>Size1</c>
+ and <c><anno>Size2</anno></c>, with Adler-32 checksums
+ <c><anno>Adler1</anno></c> and <c><anno>Adler2</anno></c>.</p>
+ <p>This function returns the <c><anno>Adler</anno></c> checksum of
+ <c>[Data1,Data2]</c>, requiring only <c><anno>Adler1</anno></c>,
+ <c><anno>Adler2</anno></c>, and <c><anno>Size2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="close" arity="1"/>
- <fsummary>Close a stream</fsummary>
+ <fsummary>Close a stream.</fsummary>
<desc>
<p>Closes the stream referenced by <c><anno>Z</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="deflateInit" arity="1"/>
- <fsummary>Initialize a session for compression</fsummary>
+ <name name="compress" arity="1"/>
+ <fsummary>Compress data with standard zlib functionality.</fsummary>
<desc>
- <p>Same as <c>zlib:deflateInit(<anno>Z</anno>, default)</c>.</p>
+ <p>Compresses data with zlib headers and checksum.</p>
</desc>
</func>
+
<func>
- <name name="deflateInit" arity="2"/>
- <fsummary>Initialize a session for compression</fsummary>
+ <name name="crc32" arity="1"/>
+ <fsummary>Get current CRC.</fsummary>
<desc>
- <p>Initialize a zlib stream for compression.</p>
- <p><c><anno>Level</anno></c> decides the compression level to be used, 0
- (<c>none</c>), gives no compression at all, 1
- (<c>best_speed</c>) gives best speed and 9
- (<c>best_compression</c>) gives best compression.</p>
+ <p>Gets the current calculated CRC checksum.</p>
</desc>
</func>
+
<func>
- <name name="deflateInit" arity="6"/>
- <fsummary>Initialize a session for compression</fsummary>
+ <name name="crc32" arity="2"/>
+ <fsummary>Calculate CRC.</fsummary>
<desc>
- <p>Initiates a zlib stream for compression.</p>
- <p>The <c><anno>Level</anno></c> parameter decides the compression level to be
- used, 0 (<c>none</c>), gives no compression at all, 1
- (<c>best_speed</c>) gives best speed and 9
- (<c>best_compression</c>) gives best compression.</p>
- <p>The <c><anno>Method</anno></c> parameter decides which compression method to use,
- currently the only supported method is <c>deflated</c>.</p>
- <p>The <c><anno>WindowBits</anno></c> parameter is the base two logarithm
- of the window size (the size of the history buffer). It
- should be in the range 8 through 15. Larger values
- of this parameter result in better compression at the
- expense of memory usage. The default value is 15 if
- <c>deflateInit/2</c>. A negative <c><anno>WindowBits</anno></c>
- value suppresses the zlib header (and checksum) from the
- stream. Note that the zlib source mentions this only as a
- undocumented feature.</p>
- <p>The <c><anno>MemLevel</anno></c> parameter specifies how much memory
- should be allocated for the internal compression
- state. <c><anno>MemLevel</anno></c>=1 uses minimum memory but is slow and
- reduces compression ratio; <c><anno>MemLevel</anno></c>=9 uses maximum
- memory for optimal speed. The default value is 8.</p>
- <p>The <c><anno>Strategy</anno></c> parameter is used to tune
- the compression algorithm. Use the value <c>default</c> for
- normal data, <c>filtered</c> for data produced by a filter (or
- predictor), <c>huffman_only</c> to force Huffman encoding
- only (no string match), or <c>rle</c> to limit match
- distances to one (run-length encoding). Filtered data
- consists mostly of small values with a somewhat random
- distribution. In this case, the compression algorithm is tuned
- to compress them better. The effect of <c>filtered</c>is to
- force more Huffman coding and less string matching; it is
- somewhat intermediate between <c>default</c> and
- <c>huffman_only</c>. <c>rle</c> is designed to be almost as
- fast as <c>huffman_only</c>, but give better compression for PNG
- image data. The <c><anno>Strategy</anno></c> parameter only
- affects the compression ratio but not the correctness of the
- compressed output even if it is not set appropriately.</p>
+ <p>Calculates the CRC checksum for <c><anno>Data</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="crc32" arity="3"/>
+ <fsummary>Calculate CRC.</fsummary>
+ <desc>
+ <p>Updates a running CRC checksum for <c><anno>Data</anno></c>.
+ If <c><anno>Data</anno></c> is the empty binary or the empty iolist,
+ this function returns the required initial value for the CRC.</p>
+ <p>Example:</p>
+ <pre>
+Crc = lists:foldl(fun(Data,Crc0) ->
+ zlib:crc32(Z, Crc0, Data),
+ end, zlib:crc32(Z,&lt;&lt; &gt;&gt;), Datas)</pre>
+ </desc>
+ </func>
+
+ <func>
+ <name name="crc32_combine" arity="4"/>
+ <fsummary>Combine two CRCs.</fsummary>
+ <desc>
+ <p>Combines two CRC checksums into one. For two binaries or iolists,
+ <c>Data1</c> and <c>Data2</c> with sizes of <c>Size1</c> and
+ <c><anno>Size2</anno></c>, with CRC checksums <c><anno>CRC1</anno></c>
+ and <c><anno>CRC2</anno></c>.</p>
+ <p>This function returns the <c><anno>CRC</anno></c> checksum of
+ <c>[Data1,Data2]</c>, requiring only <c><anno>CRC1</anno></c>,
+ <c><anno>CRC2</anno></c>, and <c><anno>Size2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="deflate" arity="2"/>
- <fsummary>Compress data</fsummary>
+ <fsummary>Compress data.</fsummary>
<desc>
<p>Same as <c>deflate(<anno>Z</anno>, <anno>Data</anno>, none)</c>.</p>
</desc>
</func>
+
<func>
<name name="deflate" arity="3"/>
- <fsummary>Compress data</fsummary>
+ <fsummary>Compress data.</fsummary>
<desc>
- <p><c>deflate/3</c> compresses as much data as possible, and
- stops when the input buffer becomes empty. It may introduce
+ <p>Compresses as much data as possible, and
+ stops when the input buffer becomes empty. It can introduce
some output latency (reading input without producing any
output) except when forced to flush.</p>
- <p>If the parameter <c><anno>Flush</anno></c> is set to <c>sync</c>, all
+ <p>If <c><anno>Flush</anno></c> is set to <c>sync</c>, all
pending output is flushed to the output buffer and the
output is aligned on a byte boundary, so that the
decompressor can get all input data available so far.
- Flushing may degrade compression for some compression algorithms and so
- it should be used only when necessary.</p>
- <p>If <c><anno>Flush</anno></c> is set to <c>full</c>, all output is flushed as with
- <c>sync</c>, and the compression state is reset so that decompression can
- restart from this point if previous compressed data has been damaged or if
- random access is desired. Using <c>full</c> too often can seriously degrade
- the compression.</p>
- <p>If the parameter <c><anno>Flush</anno></c> is set to <c>finish</c>,
- pending input is processed, pending output is flushed and
- <c>deflate/3</c> returns. Afterwards the only possible
- operations on the stream are <c>deflateReset/1</c> or <c>deflateEnd/1</c>.</p>
- <p><c><anno>Flush</anno></c> can be set to <c>finish</c> immediately after
- <c>deflateInit</c> if all compression is to be done in one step.</p>
+ Flushing can degrade compression for some compression algorithms;
+ thus, use it only when necessary.</p>
+ <p>If <c><anno>Flush</anno></c> is set to <c>full</c>, all output is
+ flushed as with <c>sync</c>, and the compression state is reset so
+ that decompression can restart from this point if previous compressed
+ data has been damaged or if random access is desired. Using
+ <c>full</c> too often can seriously degrade the compression.</p>
+ <p>If <c><anno>Flush</anno></c> is set to <c>finish</c>,
+ pending input is processed, pending output is flushed, and
+ <c>deflate/3</c> returns. Afterwards the only possible operations
+ on the stream are
+ <seealso marker="#deflateReset/1"><c>deflateReset/1</c></seealso> or
+ <seealso marker="#deflateEnd/1"><c>deflateEnd/1</c></seealso>.</p>
+ <p><c><anno>Flush</anno></c> can be set to <c>finish</c> immediately
+ after <seealso marker="#deflateInit/1"><c>deflateInit</c></seealso>
+ if all compression is to be done in one step.</p>
+ <p>Example:</p>
<pre>
-
zlib:deflateInit(Z),
B1 = zlib:deflate(Z,Data),
B2 = zlib:deflate(Z,&lt;&lt; &gt;&gt;,finish),
@@ -221,116 +250,234 @@ zlib:deflateEnd(Z),
list_to_binary([B1,B2])</pre>
</desc>
</func>
+
<func>
- <name name="deflateSetDictionary" arity="2"/>
- <fsummary>Initialize the compression dictionary</fsummary>
+ <name name="deflateEnd" arity="1"/>
+ <fsummary>End deflate session.</fsummary>
<desc>
- <p>Initializes the compression dictionary from the given byte
- sequence without producing any compressed output. This
- function must be called immediately after
- <c>deflateInit/[1|2|6]</c> or <c>deflateReset/1</c>, before
- any call of <c>deflate/3</c>. The compressor and
- decompressor must use exactly the same dictionary (see
- <c>inflateSetDictionary/2</c>). The adler checksum of the
- dictionary is returned.</p>
+ <p>Ends the deflate session and cleans all data used. Notice that this
+ function throws a <c>data_error</c> exception if the last call to
+ <seealso marker="#deflate/3"><c>deflate/3</c></seealso>
+ was not called with <c>Flush</c> set to <c>finish</c>.</p>
</desc>
</func>
+
<func>
- <name name="deflateReset" arity="1"/>
- <fsummary>Reset the deflate session</fsummary>
+ <name name="deflateInit" arity="1"/>
+ <fsummary>Initialize a session for compression.</fsummary>
<desc>
- <p>This function is equivalent to <c>deflateEnd/1</c>
- followed by <c>deflateInit/[1|2|6]</c>, but does not free
- and reallocate all the internal compression state. The
- stream will keep the same compression level and any other
- attributes.</p>
+ <p>Same as <c>zlib:deflateInit(<anno>Z</anno>, default)</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="deflateInit" arity="2"/>
+ <fsummary>Initialize a session for compression.</fsummary>
+ <desc>
+ <p>Initializes a zlib stream for compression.</p>
+ <p><c><anno>Level</anno></c> decides the compression level to be
+ used:</p>
+ <list type="bulleted">
+ <item>0 (<c>none</c>), gives no compression</item>
+ <item>1 (<c>best_speed</c>) gives best speed</item>
+ <item>9 (<c>best_compression</c>) gives best compression</item>
+ </list>
+ </desc>
+ </func>
+
+ <func>
+ <name name="deflateInit" arity="6"/>
+ <fsummary>Initialize a session for compression.</fsummary>
+ <desc>
+ <p>Initiates a zlib stream for compression.</p>
+ <taglist>
+ <tag><c><anno>Level</anno></c></tag>
+ <item>
+ <p>Compression level to use:</p>
+ <list type="bulleted">
+ <item>0 (<c>none</c>), gives no compression</item>
+ <item>1 (<c>best_speed</c>) gives best speed</item>
+ <item>9 (<c>best_compression</c>) gives best compression</item>
+ </list>
+ </item>
+ <tag><c><anno>Method</anno></c></tag>
+ <item>
+ <p>Compression method to use, currently the only supported method
+ is <c>deflated</c>.</p>
+ </item>
+ <tag><c><anno>WindowBits</anno></c></tag>
+ <item>
+ <p>The base two logarithm of the window size (the size of the
+ history buffer). It is to be in the range 8 through 15. Larger
+ values result in better compression at the expense of memory
+ usage. Defaults to 15 if <seealso marker="#deflateInit/2">
+ <c>deflateInit/2</c></seealso> is used. A negative
+ <c><anno>WindowBits</anno></c> value suppresses the zlib header
+ (and checksum) from the stream. Notice that the zlib source
+ mentions this only as a undocumented feature.</p>
+ </item>
+ <tag><c><anno>MemLevel</anno></c></tag>
+ <item>
+ <p>Specifies how much memory is to be allocated for the internal
+ compression state: <c><anno>MemLevel</anno></c>=1 uses minimum
+ memory but is slow and reduces compression ratio;
+ <c><anno>MemLevel</anno></c>=9 uses maximum memory for optimal
+ speed. Defaults to 8.</p>
+ </item>
+ <tag><c><anno>Strategy</anno></c></tag>
+ <item>
+ <p>Tunes the compression algorithm. Use the following values:</p>
+ <list type="bulleted">
+ <item><c>default</c> for normal data</item>
+ <item><c>filtered</c> for data produced by a filter (or
+ predictor)</item>
+ <item><c>huffman_only</c> to force Huffman encoding only
+ (no string match)</item>
+ <item><c>rle</c> to limit match distances to one (run-length
+ encoding)</item>
+ </list>
+ <p>Filtered data consists mostly of small values with a somewhat
+ random distribution. In this case, the compression algorithm is
+ tuned to compress them better. The effect of <c>filtered</c> is to
+ force more Huffman coding and less string matching; it is somewhat
+ intermediate between <c>default</c> and <c>huffman_only</c>.
+ <c>rle</c> is designed to be almost as fast as
+ <c>huffman_only</c>, but gives better compression for PNG image
+ data.</p>
+ <p><c><anno>Strategy</anno></c> affects only the compression ratio,
+ but not the correctness of the compressed output even if it is not
+ set appropriately.</p>
+ </item>
+ </taglist>
</desc>
</func>
+
<func>
<name name="deflateParams" arity="3"/>
- <fsummary>Dynamicly update deflate parameters</fsummary>
+ <fsummary>Dynamicly update deflate parameters.</fsummary>
<desc>
- <p>Dynamically update the compression level and compression
- strategy. The interpretation of <c><anno>Level</anno></c> and
- <c><anno>Strategy</anno></c> is as in <c>deflateInit/6</c>. This can be
+ <p>Dynamically updates the compression level and compression
+ strategy. The interpretation of <c><anno>Level</anno></c> and
+ <c><anno>Strategy</anno></c> is as in
+ <seealso marker="#deflateInit/6"><c>deflateInit/6</c></seealso>.
+ This can be
used to switch between compression and straight copy of the
input data, or to switch to a different kind of input data
requiring a different strategy. If the compression level is
changed, the input available so far is compressed with the
- old level (and may be flushed); the new level will take
- effect only at the next call of <c>deflate/3</c>.</p>
- <p>Before the call of <c>deflateParams</c>, the stream state must be set as for
- a call of <c>deflate/3</c>, since the currently available input may have to
- be compressed and flushed.</p>
+ old level (and can be flushed); the new level takes
+ effect only at the next call of
+ <seealso marker="#deflate/3"><c>deflate/3</c></seealso>.</p>
+ <p>Before the call of <c>deflateParams</c>, the stream state must be
+ set as for a call of <c>deflate/3</c>, as the currently available
+ input may have to be compressed and flushed.</p>
</desc>
</func>
+
<func>
- <name name="deflateEnd" arity="1"/>
- <fsummary>End deflate session</fsummary>
+ <name name="deflateReset" arity="1"/>
+ <fsummary>Reset the deflate session.</fsummary>
+ <desc>
+ <p>Equivalent to
+ <seealso marker="#deflateEnd/1"><c>deflateEnd/1</c></seealso>
+ followed by
+ <seealso marker="#deflateInit/1"><c>deflateInit/1,2,6</c></seealso>,
+ but does not free and reallocate all the internal compression state.
+ The stream keeps the same compression level and any other
+ attributes.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="deflateSetDictionary" arity="2"/>
+ <fsummary>Initialize the compression dictionary.</fsummary>
<desc>
- <p>End the deflate session and cleans all data used.
- Note that this function will throw an <c>data_error</c>
- exception if the last call to
- <c>deflate/3</c> was not called with <c>Flush</c> set to
- <c>finish</c>.</p>
+ <p>Initializes the compression dictionary from the specified byte
+ sequence without producing any compressed output.</p>
+ <p>This function must be called immediately after
+ <seealso marker="#deflateInit/1"><c>deflateInit/1,2,6</c></seealso> or
+ <seealso marker="#deflateReset/1"><c>deflateReset/1</c></seealso>,
+ before any call of
+ <seealso marker="#deflate/3"><c>deflate/3</c></seealso>.
+ The compressor and decompressor must use the same dictionary (see
+ <seealso marker="#inflateSetDictionary/2">
+ <c>inflateSetDictionary/2</c></seealso>).</p>
+ <p>The Adler checksum of the dictionary is returned.</p>
</desc>
</func>
+
<func>
- <name name="inflateInit" arity="1"/>
- <fsummary>Initialize a session for decompression</fsummary>
+ <name name="getBufSize" arity="1"/>
+ <fsummary>Get buffer size.</fsummary>
<desc>
- <p>Initialize a zlib stream for decompression.</p>
+ <p>Gets the size of the intermediate buffer.</p>
</desc>
</func>
+
<func>
- <name name="inflateInit" arity="2"/>
- <fsummary>Initialize a session for decompression</fsummary>
+ <name name="gunzip" arity="1"/>
+ <fsummary>Uncompress data with gz header.</fsummary>
<desc>
- <p>Initialize decompression session on zlib stream.</p>
- <p>The <c><anno>WindowBits</anno></c> parameter is the base two logarithm
- of the maximum window size (the size of the history buffer).
- It should be in the range 8 through 15.
- The default value is 15 if <c>inflateInit/1</c> is used.
- If a compressed stream with a larger window size is
- given as input, inflate() will throw the <c>data_error</c>
- exception. A negative <c><anno>WindowBits</anno></c> value makes zlib ignore the
- zlib header (and checksum) from the stream. Note that the zlib
- source mentions this only as a undocumented feature.</p>
+ <p>Uncompresses data with gz headers and checksum.</p>
</desc>
</func>
+
+ <func>
+ <name name="gzip" arity="1"/>
+ <fsummary>Compress data with gz header.</fsummary>
+ <desc>
+ <p>Compresses data with gz headers and checksum.</p>
+ </desc>
+ </func>
+
<func>
<name name="inflate" arity="2"/>
- <fsummary>Decompress data</fsummary>
+ <fsummary>Decompress data.</fsummary>
<desc>
- <p><c>inflate/2</c> decompresses as much data as possible.
- It may introduce some output latency (reading
+ <p>Decompresses as much data as possible.
+ It can introduce some output latency (reading
input without producing any output).</p>
<p>If a preset dictionary is needed at this point (see
- <c>inflateSetDictionary</c> below), <c>inflate/2</c> throws a
- <c>{need_dictionary,Adler}</c> exception where <c>Adler</c> is
- the adler32 checksum of the dictionary chosen by the
- compressor.</p>
+ <seealso marker="#inflateSetDictionary/2">
+ <c>inflateSetDictionary/2</c></seealso>), <c>inflate/2</c> throws a
+ <c>{need_dictionary,Adler}</c> exception, where <c>Adler</c> is
+ the Adler-32 checksum of the dictionary chosen by the compressor.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="inflateChunk" arity="1"/>
+ <fsummary>Read next uncompressed chunk.</fsummary>
+ <desc>
+ <p>Reads the next chunk of uncompressed data, initialized by
+ <seealso marker="#inflateChunk/2"><c>inflateChunk/2</c></seealso>.</p>
+ <p>This function is to be repeatedly called, while it returns
+ <c>{more, Decompressed}</c>.</p>
</desc>
</func>
+
<func>
<name name="inflateChunk" arity="2"/>
- <fsummary>Decompress data with limited output size</fsummary>
+ <fsummary>Decompress data with limited output size.</fsummary>
<desc>
- <p>Like <c>inflate/2</c>, but decompress no more data than
- will fit in the buffer configured via <c>setBufSize/2</c>.
+ <p>Like <seealso marker="#inflate/2"><c>inflate/2</c></seealso>,
+ but decompresses no more data than will fit in the buffer configured
+ through <seealso marker="#setBufSize/2"><c>setBufSize/2</c></seealso>.
Is is useful when decompressing a stream with a high compression
- ratio such that a small amount of compressed input may expand up to
- 1000 times.
- It returns <c>{more, Decompressed}</c>, when there is more output
- available, and <c>inflateChunk/1</c> should be used to read it.
- It may introduce some output latency (reading
+ ratio, such that a small amount of compressed input can expand up to
+ 1000 times.</p>
+ <p>This function returns <c>{more, Decompressed}</c>, when there is
+ more output available, and
+ <seealso marker="#inflateChunk/1"><c>inflateChunk/1</c></seealso>
+ is to be used to read it.</p>
+ <p>This function can introduce some output latency (reading
input without producing any output).</p>
<p>If a preset dictionary is needed at this point (see
- <c>inflateSetDictionary</c> below), <c>inflateChunk/2</c> throws a
- <c>{need_dictionary,Adler}</c> exception where <c>Adler</c> is
- the adler32 checksum of the dictionary chosen by the
- compressor.</p>
-
+ <seealso marker="#inflateSetDictionary/2">
+ <c>inflateSetDictionary/2</c></seealso>), this function throws a
+ <c>{need_dictionary,Adler}</c> exception, where <c>Adler</c> is
+ the Adler-32 checksum of the dictionary chosen by the compressor.</p>
+ <p>Example:</p>
<pre>
walk(Compressed, Handler) ->
Z = zlib:open(),
@@ -345,191 +492,126 @@ loop(Z, Handler, {more, Uncompressed}) ->
Handler(Uncompressed),
loop(Z, Handler, zlib:inflateChunk(Z));
loop(Z, Handler, Uncompressed) ->
- Handler(Uncompressed).
- </pre>
- </desc>
- </func>
- <func>
- <name name="inflateChunk" arity="1"/>
- <fsummary>Read next uncompressed chunk</fsummary>
- <desc>
- <p>Read next chunk of uncompressed data, initialized by
- <c>inflateChunk/2</c>.</p>
- <p>This function should be repeatedly called, while it returns
- <c>{more, Decompressed}</c>.</p>
- </desc>
- </func>
- <func>
- <name name="inflateSetDictionary" arity="2"/>
- <fsummary>Initialize the decompression dictionary</fsummary>
- <desc>
- <p>Initializes the decompression dictionary from the given
- uncompressed byte sequence. This function must be called
- immediately after a call of <c>inflate/2</c> if this call
- threw a <c>{need_dictionary,Adler}</c> exception.
- The dictionary chosen by the
- compressor can be determined from the Adler value thrown
- by the call to <c>inflate/2</c>. The compressor and decompressor
- must use exactly the same dictionary (see <c>deflateSetDictionary/2</c>).</p>
- <p>Example:</p>
- <pre>
-unpack(Z, Compressed, Dict) ->
- case catch zlib:inflate(Z, Compressed) of
- {'EXIT',{{need_dictionary,DictID},_}} ->
- zlib:inflateSetDictionary(Z, Dict),
- Uncompressed = zlib:inflate(Z, []);
- Uncompressed ->
- Uncompressed
- end.</pre>
- </desc>
- </func>
- <func>
- <name name="inflateReset" arity="1"/>
- <fsummary>>Reset the inflate session</fsummary>
- <desc>
- <p>This function is equivalent to <c>inflateEnd/1</c> followed
- by <c>inflateInit/1</c>, but does not free and reallocate all
- the internal decompression state. The stream will keep
- attributes that may have been set by <c>inflateInit/[1|2]</c>.</p>
+ Handler(Uncompressed).</pre>
</desc>
</func>
+
<func>
<name name="inflateEnd" arity="1"/>
- <fsummary>End inflate session</fsummary>
+ <fsummary>End inflate session.</fsummary>
<desc>
- <p>End the inflate session and cleans all data used. Note
- that this function will throw a <c>data_error</c> exception
+ <p>Ends the inflate session and cleans all data used. Notice
+ that this function throws a <c>data_error</c> exception
if no end of stream was found (meaning that not all data
has been uncompressed).</p>
</desc>
</func>
+
<func>
- <name name="setBufSize" arity="2"/>
- <fsummary>Set buffer size</fsummary>
- <desc>
- <p>Sets the intermediate buffer size.</p>
- </desc>
- </func>
- <func>
- <name name="getBufSize" arity="1"/>
- <fsummary>Get buffer size</fsummary>
- <desc>
- <p>Get the size of intermediate buffer.</p>
- </desc>
- </func>
- <func>
- <name name="crc32" arity="1"/>
- <fsummary>Get current CRC</fsummary>
- <desc>
- <p>Get the current calculated CRC checksum.</p>
- </desc>
- </func>
- <func>
- <name name="crc32" arity="2"/>
- <fsummary>Calculate CRC</fsummary>
- <desc>
- <p>Calculate the CRC checksum for <c><anno>Data</anno></c>.</p>
- </desc>
- </func>
- <func>
- <name name="crc32" arity="3"/>
- <fsummary>Calculate CRC</fsummary>
+ <name name="inflateInit" arity="1"/>
+ <fsummary>Initialize a session for decompression.</fsummary>
<desc>
- <p>Update a running CRC checksum for <c><anno>Data</anno></c>.
- If <c><anno>Data</anno></c> is the empty binary or the empty iolist, this function returns
- the required initial value for the crc.</p>
- <pre>
-Crc = lists:foldl(fun(Data,Crc0) ->
- zlib:crc32(Z, Crc0, Data),
- end, zlib:crc32(Z,&lt;&lt; &gt;&gt;), Datas)</pre>
+ <p>Initializes a zlib stream for decompression.</p>
</desc>
</func>
+
<func>
- <name name="crc32_combine" arity="4"/>
- <fsummary>Combine two CRC's</fsummary>
+ <name name="inflateInit" arity="2"/>
+ <fsummary>Initialize a session for decompression.</fsummary>
<desc>
- <p>Combine two CRC checksums into one. For two binaries or iolists,
- <c>Data1</c> and <c>Data2</c> with sizes of <c>Size1</c> and
- <c><anno>Size2</anno></c>, with CRC checksums <c><anno>CRC1</anno></c> and
- <c><anno>CRC2</anno></c>. <c>crc32_combine/4</c> returns the <c><anno>CRC</anno></c>
- checksum of <c>[Data1,Data2]</c>, requiring
- only <c><anno>CRC1</anno></c>, <c><anno>CRC2</anno></c>, and <c><anno>Size2</anno></c>.
- </p>
+ <p>Initializes a decompression session on zlib stream.</p>
+ <p><c><anno>WindowBits</anno></c> is the base two logarithm
+ of the maximum window size (the size of the history buffer).
+ It is to be in the range 8 through 15. Default to 15 if
+ <seealso marker="#inflateInit/1"><c>inflateInit/1</c></seealso>
+ is used.</p>
+ <p>If a compressed stream with a larger window size is specified as
+ input, <seealso marker="#inflate/2"><c>inflate/2</c></seealso>
+ throws the <c>data_error</c> exception.</p>
+ <p>A negative <c><anno>WindowBits</anno></c> value makes zlib
+ ignore the zlib header (and checksum) from the stream. Notice that
+ the zlib source mentions this only as a undocumented feature.</p>
</desc>
</func>
+
<func>
- <name name="adler32" arity="2"/>
- <fsummary>Calculate the adler checksum</fsummary>
+ <name name="inflateReset" arity="1"/>
+ <fsummary>>Reset the inflate session.</fsummary>
<desc>
- <p>Calculate the Adler-32 checksum for <c><anno>Data</anno></c>.</p>
+ <p>Equivalent to
+ <seealso marker="#inflateEnd/1"><c>inflateEnd/1</c></seealso>
+ followed by
+ <seealso marker="#inflateInit/1"><c>inflateInit/1</c></seealso>,
+ but does not free and reallocate all the internal decompression state.
+ The stream will keep attributes that could have been set by
+ <c>inflateInit/1,2</c>.</p>
</desc>
</func>
+
<func>
- <name name="adler32" arity="3"/>
- <fsummary>Calculate the adler checksum</fsummary>
+ <name name="inflateSetDictionary" arity="2"/>
+ <fsummary>Initialize the decompression dictionary.</fsummary>
<desc>
- <p>Update a running Adler-32 checksum for <c><anno>Data</anno></c>.
- If <c><anno>Data</anno></c> is the empty binary or the empty iolist, this function returns
- the required initial value for the checksum.</p>
+ <p>Initializes the decompression dictionary from the specified
+ uncompressed byte sequence. This function must be called
+ immediately after a call of
+ <seealso marker="#inflate/2"><c>inflate/2</c></seealso>
+ if this call threw a <c>{need_dictionary,Adler}</c> exception.
+ The dictionary chosen by the compressor can be determined from the
+ Adler value thrown by the call to <c>inflate/2</c>.
+ The compressor and decompressor must use the same dictionary (see
+ <seealso marker="#deflateSetDictionary/2">
+ <c>deflateSetDictionary/2</c></seealso>).</p>
+ <p>Example:</p>
<pre>
-Crc = lists:foldl(fun(Data,Crc0) ->
- zlib:adler32(Z, Crc0, Data),
- end, zlib:adler32(Z,&lt;&lt; &gt;&gt;), Datas)</pre>
+unpack(Z, Compressed, Dict) ->
+ case catch zlib:inflate(Z, Compressed) of
+ {'EXIT',{{need_dictionary,DictID},_}} ->
+ zlib:inflateSetDictionary(Z, Dict),
+ Uncompressed = zlib:inflate(Z, []);
+ Uncompressed ->
+ Uncompressed
+ end.</pre>
</desc>
</func>
+
<func>
- <name name="adler32_combine" arity="4"/>
- <fsummary>Combine two Adler-32 checksums</fsummary>
+ <name name="open" arity="0"/>
+ <fsummary>Open a stream and return a stream reference.</fsummary>
<desc>
- <p>Combine two Adler-32 checksums into one. For two binaries or iolists,
- <c>Data1</c> and <c>Data2</c> with sizes of <c>Size1</c> and
- <c><anno>Size2</anno></c>, with Adler-32 checksums <c><anno>Adler1</anno></c> and
- <c><anno>Adler2</anno></c>. <c>adler32_combine/4</c> returns the <c><anno>Adler</anno></c>
- checksum of <c>[Data1,Data2]</c>, requiring
- only <c><anno>Adler1</anno></c>, <c><anno>Adler2</anno></c>, and <c><anno>Size2</anno></c>.
- </p>
+ <p>Opens a zlib stream.</p>
</desc>
</func>
+
<func>
- <name name="compress" arity="1"/>
- <fsummary>Compress data with standard zlib functionality</fsummary>
+ <name name="setBufSize" arity="2"/>
+ <fsummary>Set buffer size.</fsummary>
<desc>
- <p>Compress data (with zlib headers and checksum).</p>
+ <p>Sets the intermediate buffer size.</p>
</desc>
</func>
+
<func>
<name name="uncompress" arity="1"/>
- <fsummary>Uncompress data with standard zlib functionality</fsummary>
+ <fsummary>Uncompress data with standard zlib functionality.</fsummary>
<desc>
- <p>Uncompress data (with zlib headers and checksum).</p>
- </desc>
- </func>
- <func>
- <name name="zip" arity="1"/>
- <fsummary>Compress data without the zlib headers</fsummary>
- <desc>
- <p>Compress data (without zlib headers and checksum).</p>
+ <p>Uncompresses data with zlib headers and checksum.</p>
</desc>
</func>
+
<func>
<name name="unzip" arity="1"/>
- <fsummary>Uncompress data without the zlib headers</fsummary>
+ <fsummary>Uncompress data without the zlib headers.</fsummary>
<desc>
- <p>Uncompress data (without zlib headers and checksum).</p>
- </desc>
- </func>
- <func>
- <name name="gzip" arity="1"/>
- <fsummary>Compress data with gz header</fsummary>
- <desc>
- <p>Compress data (with gz headers and checksum).</p>
+ <p>Uncompresses data without zlib headers and checksum.</p>
</desc>
</func>
+
<func>
- <name name="gunzip" arity="1"/>
- <fsummary>Uncompress data with gz header</fsummary>
+ <name name="zip" arity="1"/>
+ <fsummary>Compress data without the zlib headers.</fsummary>
<desc>
- <p>Uncompress data (with gz headers and checksum).</p>
+ <p>Compresses data without zlib headers and checksum.</p>
</desc>
</func>
</funcs>
diff --git a/erts/emulator/Makefile.in b/erts/emulator/Makefile.in
index 2212aed5e0..e0260205e3 100644
--- a/erts/emulator/Makefile.in
+++ b/erts/emulator/Makefile.in
@@ -51,6 +51,7 @@ ARFLAGS=rc
OMIT_OMIT_FP=no
DIRTY_SCHEDULER_SUPPORT=@DIRTY_SCHEDULER_SUPPORT@
+NEW_PURGE_STRATEGY=@NEW_PURGE_STRATEGY@
ifeq ($(TYPE),debug)
PURIFY =
@@ -591,11 +592,8 @@ GENERATE += $(TTF_DIR)/driver_tab.c
#
# This list must be consistent with PRE_LOADED_MODULES in
# erts/preloaded/src/Makefile.
-ifeq ($(TARGET),win32)
-# On windows the preloaded objects are in a resource object.
-PRELOAD_OBJ = $(OBJDIR)/beams.$(RES_EXT)
-PRELOAD_SRC = $(TARGET)/beams.rc
-$(PRELOAD_SRC): $(ERL_TOP)/erts/preloaded/ebin/otp_ring0.beam \
+
+PRELOAD_BEAM = $(ERL_TOP)/erts/preloaded/ebin/otp_ring0.beam \
$(ERL_TOP)/erts/preloaded/ebin/erts_code_purger.beam \
$(ERL_TOP)/erts/preloaded/ebin/init.beam \
$(ERL_TOP)/erts/preloaded/ebin/prim_eval.beam \
@@ -606,23 +604,20 @@ $(PRELOAD_SRC): $(ERL_TOP)/erts/preloaded/ebin/otp_ring0.beam \
$(ERL_TOP)/erts/preloaded/ebin/erl_prim_loader.beam \
$(ERL_TOP)/erts/preloaded/ebin/erlang.beam \
$(ERL_TOP)/erts/preloaded/ebin/erts_internal.beam \
- $(ERL_TOP)/erts/preloaded/ebin/erl_tracer.beam
+ $(ERL_TOP)/erts/preloaded/ebin/erl_tracer.beam \
+ $(ERL_TOP)/erts/preloaded/ebin/erts_literal_area_collector.beam \
+ $(ERL_TOP)/erts/preloaded/ebin/erts_dirty_process_code_checker.beam
+
+ifeq ($(TARGET),win32)
+# On windows the preloaded objects are in a resource object.
+PRELOAD_OBJ = $(OBJDIR)/beams.$(RES_EXT)
+PRELOAD_SRC = $(TARGET)/beams.rc
+$(PRELOAD_SRC): $(PRELOAD_BEAM)
$(gen_verbose)LANG=C $(PERL) utils/make_preload $(MAKE_PRELOAD_EXTRA) -rc $^ > $@
else
PRELOAD_OBJ = $(OBJDIR)/preload.o
PRELOAD_SRC = $(TARGET)/preload.c
-$(PRELOAD_SRC): $(ERL_TOP)/erts/preloaded/ebin/otp_ring0.beam \
- $(ERL_TOP)/erts/preloaded/ebin/erts_code_purger.beam \
- $(ERL_TOP)/erts/preloaded/ebin/init.beam \
- $(ERL_TOP)/erts/preloaded/ebin/prim_eval.beam \
- $(ERL_TOP)/erts/preloaded/ebin/prim_inet.beam \
- $(ERL_TOP)/erts/preloaded/ebin/prim_file.beam \
- $(ERL_TOP)/erts/preloaded/ebin/zlib.beam \
- $(ERL_TOP)/erts/preloaded/ebin/prim_zip.beam \
- $(ERL_TOP)/erts/preloaded/ebin/erl_prim_loader.beam \
- $(ERL_TOP)/erts/preloaded/ebin/erlang.beam \
- $(ERL_TOP)/erts/preloaded/ebin/erts_internal.beam \
- $(ERL_TOP)/erts/preloaded/ebin/erl_tracer.beam
+$(PRELOAD_SRC): $(PRELOAD_BEAM)
$(gen_verbose)LANG=C $(PERL) utils/make_preload -old $^ > $@
endif
@@ -744,7 +739,7 @@ EMU_OBJS = \
$(OBJDIR)/beam_ranges.o
RUN_OBJS = \
- $(OBJDIR)/erl_pbifs.o $(OBJDIR)/benchmark.o \
+ $(OBJDIR)/erl_pbifs.o \
$(OBJDIR)/erl_alloc.o $(OBJDIR)/erl_mtrace.o \
$(OBJDIR)/erl_alloc_util.o $(OBJDIR)/erl_goodfit_alloc.o \
$(OBJDIR)/erl_bestfit_alloc.o $(OBJDIR)/erl_afit_alloc.o \
diff --git a/erts/emulator/beam/atom.h b/erts/emulator/beam/atom.h
index fbd0528009..ae60904785 100644
--- a/erts/emulator/beam/atom.h
+++ b/erts/emulator/beam/atom.h
@@ -21,10 +21,7 @@
#ifndef __ATOM_H__
#define __ATOM_H__
-#ifndef __INDEX_H__
#include "index.h"
-#endif
-
#include "erl_atom_table.h"
#define MAX_ATOM_CHARACTERS 255
diff --git a/erts/emulator/beam/atom.names b/erts/emulator/beam/atom.names
index 8f65e71531..9dae67cb2d 100644
--- a/erts/emulator/beam/atom.names
+++ b/erts/emulator/beam/atom.names
@@ -65,6 +65,7 @@ atom undefined_lambda
atom DOWN='DOWN'
atom UP='UP'
atom EXIT='EXIT'
+atom abort
atom aborted
atom abs_path
atom absoluteURI
@@ -165,6 +166,7 @@ atom commandv
atom compact
atom compat_rel
atom compile
+atom complete
atom compressed
atom config_h
atom convert_time_unit
@@ -176,6 +178,7 @@ atom const
atom context_switches
atom control
atom copy
+atom copy_literals
atom counters
atom cpu
atom cpu_timestamp
@@ -195,6 +198,7 @@ atom dgroup_leader
atom dictionary
atom dirty_cpu
atom dirty_cpu_schedulers_online
+atom dirty_execution
atom dirty_io
atom disable_trace
atom disabled
@@ -228,9 +232,6 @@ atom endian
atom env
atom eof
atom eol
-atom exception_from
-atom exception_trace
-atom extended
atom Eq='=:='
atom Eqeq='=='
atom erl_tracer
@@ -238,11 +239,14 @@ atom erlang
atom ERROR='ERROR'
atom error_handler
atom error_logger
+atom erts_code_purger
atom erts_internal
atom ets
atom ETS_TRANSFER='ETS-TRANSFER'
atom event
atom exact_reductions
+atom exception_from
+atom exception_trace
atom exclusive
atom exit_status
atom existing
@@ -251,7 +255,9 @@ atom existing_ports
atom existing
atom exiting
atom exports
+atom extended
atom external
+atom extra
atom false
atom fcgi
atom fd
@@ -383,13 +389,14 @@ atom merge_trap
atom meta
atom meta_match_spec
atom micro_seconds
+atom microsecond
atom microstate_accounting
atom milli_seconds
+atom millisecond
atom min_heap_size
atom min_bin_vheap_size
atom minor_version
atom Minus='-'
-atom mixed
atom module
atom module_info
atom monitored_by
@@ -402,11 +409,13 @@ atom more
atom multi_scheduling
atom multiline
atom nano_seconds
+atom nanosecond
atom name
atom named_table
atom namelist
atom native
atom native_addresses
+atom need_gc
atom Neq='=/='
atom Neqeq='/='
atom net_kernel
@@ -485,6 +494,7 @@ atom pause
atom pending
atom pending_driver
atom pending_process
+atom pending_purge_lambda
atom pending_reload
atom permanent
atom pid
@@ -494,6 +504,7 @@ atom port_count
atom port_limit
atom port_op
atom positive
+atom prepare
atom print
atom priority
atom private
@@ -554,6 +565,7 @@ atom schedulers_online
atom scheme
atom scientific
atom scope
+atom second
atom seconds
atom send_to_non_existing_process
atom sensitive
diff --git a/erts/emulator/beam/beam_bif_load.c b/erts/emulator/beam/beam_bif_load.c
index 40d44dda4c..dddcfbb77d 100644
--- a/erts/emulator/beam/beam_bif_load.c
+++ b/erts/emulator/beam/beam_bif_load.c
@@ -37,13 +37,90 @@
#include "erl_bits.h"
#include "erl_thr_progress.h"
+#ifdef HIPE
+# include "hipe_stack.h"
+#endif
+
+static struct {
+ Eterm module;
+ erts_smp_mtx_t mtx;
+ Export *pending_purge_lambda;
+ Eterm *sprocs;
+ Eterm def_sprocs[10];
+ Uint sp_size;
+ Uint sp_ix;
+ ErlFunEntry **funs;
+ ErlFunEntry *def_funs[10];
+ Uint fe_size;
+ Uint fe_ix;
+} purge_state;
+
+Process *erts_code_purger = NULL;
+
+#ifdef ERTS_DIRTY_SCHEDULERS
+Process *erts_dirty_process_code_checker;
+#endif
+erts_smp_atomic_t erts_copy_literal_area__;
+#define ERTS_SET_COPY_LITERAL_AREA(LA) \
+ erts_smp_atomic_set_nob(&erts_copy_literal_area__, \
+ (erts_aint_t) (LA))
+#ifdef ERTS_NEW_PURGE_STRATEGY
+Process *erts_literal_area_collector = NULL;
+
+typedef struct ErtsLiteralAreaRef_ ErtsLiteralAreaRef;
+struct ErtsLiteralAreaRef_ {
+ ErtsLiteralAreaRef *next;
+ ErtsLiteralArea *literal_area;
+};
+
+struct {
+ erts_smp_mtx_t mtx;
+ ErtsLiteralAreaRef *first;
+ ErtsLiteralAreaRef *last;
+} release_literal_areas;
+#endif
+
static void set_default_trace_pattern(Eterm module);
static Eterm check_process_code(Process* rp, Module* modp, Uint flags, int *redsp, int fcalls);
static void delete_code(Module* modp);
-static void decrement_refc(BeamCodeHeader*);
static int any_heap_ref_ptrs(Eterm* start, Eterm* end, char* mod_start, Uint mod_size);
static int any_heap_refs(Eterm* start, Eterm* end, char* mod_start, Uint mod_size);
+static void
+init_purge_state(void)
+{
+ purge_state.module = THE_NON_VALUE;
+
+ erts_smp_mtx_init(&purge_state.mtx, "purge_state");
+
+ purge_state.pending_purge_lambda =
+ erts_export_put(am_erts_code_purger, am_pending_purge_lambda, 3);
+
+ purge_state.sprocs = &purge_state.def_sprocs[0];
+ purge_state.sp_size = sizeof(purge_state.def_sprocs);
+ purge_state.sp_size /= sizeof(purge_state.def_sprocs[0]);
+ purge_state.sp_ix = 0;
+
+ purge_state.funs = &purge_state.def_funs[0];
+ purge_state.fe_size = sizeof(purge_state.def_funs);
+ purge_state.fe_size /= sizeof(purge_state.def_funs[0]);
+ purge_state.fe_ix = 0;
+}
+
+void
+erts_beam_bif_load_init(void)
+{
+#ifdef ERTS_NEW_PURGE_STRATEGY
+ erts_smp_mtx_init(&release_literal_areas.mtx, "release_literal_areas");
+ release_literal_areas.first = NULL;
+ release_literal_areas.last = NULL;
+#endif
+ erts_smp_atomic_init_nob(&erts_copy_literal_area__,
+ (erts_aint_t) NULL);
+
+ init_purge_state();
+}
+
BIF_RETTYPE code_is_module_native_1(BIF_ALIST_1)
{
Module* modp;
@@ -516,6 +593,43 @@ badarg:
BIF_ERROR(BIF_P, BADARG);
}
+BIF_RETTYPE erts_internal_check_dirty_process_code_2(BIF_ALIST_2)
+{
+#if !defined(ERTS_DIRTY_SCHEDULERS)
+ BIF_ERROR(BIF_P, EXC_NOTSUP);
+#else
+ Process *rp;
+ int reds = 0;
+ Eterm res;
+
+ if (BIF_P != erts_dirty_process_code_checker)
+ BIF_ERROR(BIF_P, EXC_NOTSUP);
+
+ if (is_not_internal_pid(BIF_ARG_1))
+ BIF_ERROR(BIF_P, BADARG);
+
+ if (is_not_atom(BIF_ARG_2))
+ BIF_ERROR(BIF_P, BADARG);
+
+ rp = erts_pid2proc_not_running(BIF_P, ERTS_PROC_LOCK_MAIN,
+ BIF_ARG_1, ERTS_PROC_LOCK_MAIN);
+ if (rp == ERTS_PROC_LOCK_BUSY)
+ ERTS_BIF_YIELD2(bif_export[BIF_erts_internal_check_dirty_process_code_2],
+ BIF_P, BIF_ARG_1, BIF_ARG_2);
+ if (!rp)
+ BIF_RET(am_false);
+
+ res = erts_check_process_code(rp, BIF_ARG_2, 0, &reds, BIF_P->fcalls);
+
+ if (BIF_P != rp)
+ erts_smp_proc_unlock(rp, ERTS_PROC_LOCK_MAIN);
+
+ ASSERT(is_value(res));
+
+ BIF_RET2(res, reds);
+#endif
+}
+
BIF_RETTYPE delete_module_1(BIF_ALIST_1)
{
ErtsCodeIndex code_ix;
@@ -748,6 +862,8 @@ set_default_trace_pattern(Eterm module)
}
}
+#ifndef ERTS_NEW_PURGE_STRATEGY
+
static ERTS_INLINE int
check_mod_funs(Process *p, ErlOffHeap *off_heap, char *area, size_t area_size)
{
@@ -762,6 +878,248 @@ check_mod_funs(Process *p, ErlOffHeap *off_heap, char *area, size_t area_size)
return 0;
}
+#endif
+
+static Uint hfrag_literal_size(Eterm* start, Eterm* end,
+ char* lit_start, Uint lit_size);
+static void hfrag_literal_copy(Eterm **hpp, ErlOffHeap *ohp,
+ Eterm *start, Eterm *end,
+ char *lit_start, Uint lit_size);
+
+#ifdef ERTS_NEW_PURGE_STRATEGY
+
+Eterm
+erts_proc_copy_literal_area(Process *c_p, int *redsp, int fcalls, int gc_allowed)
+{
+ ErtsLiteralArea *la;
+ ErtsMessage *msgp;
+ struct erl_off_heap_header* oh;
+ char *literals;
+ Uint lit_bsize;
+ ErlHeapFragment *hfrag;
+
+ la = ERTS_COPY_LITERAL_AREA();
+ if (!la)
+ return am_ok;
+
+ oh = la->off_heap;
+ literals = (char *) &la->start[0];
+ lit_bsize = (char *) la->end - literals;
+
+ /*
+ * If a literal is in the message queue we make an explicit copy of
+ * it and attach it to the heap fragment. Each message needs to be
+ * self contained, we cannot save the literal in the old_heap or
+ * any other heap than the message it self.
+ */
+
+ erts_smp_proc_lock(c_p, ERTS_PROC_LOCK_MSGQ);
+ ERTS_SMP_MSGQ_MV_INQ2PRIVQ(c_p);
+ erts_smp_proc_unlock(c_p, ERTS_PROC_LOCK_MSGQ);
+
+ for (msgp = c_p->msg.first; msgp; msgp = msgp->next) {
+ ErlHeapFragment *hf;
+ Uint lit_sz = 0;
+
+ *redsp += 1;
+
+ if (msgp->data.attached == ERTS_MSG_COMBINED_HFRAG)
+ hfrag = &msgp->hfrag;
+ else if (is_value(ERL_MESSAGE_TERM(msgp)) && msgp->data.heap_frag)
+ hfrag = msgp->data.heap_frag;
+ else
+ continue; /* Content on heap or in external term format... */
+
+ for (hf = hfrag; hf; hf = hf->next) {
+ lit_sz += hfrag_literal_size(&hf->mem[0], &hf->mem[hf->used_size],
+ literals, lit_bsize);
+ *redsp += 1;
+ }
+
+ *redsp += lit_sz / 16; /* Better value needed... */
+ if (lit_sz > 0) {
+ ErlHeapFragment *bp = new_message_buffer(lit_sz);
+ Eterm *hp = bp->mem;
+
+ for (hf = hfrag; hf; hf = hf->next) {
+ hfrag_literal_copy(&hp, &bp->off_heap,
+ &hf->mem[0], &hf->mem[hf->used_size],
+ literals, lit_bsize);
+ hfrag = hf;
+ }
+
+ /* link new hfrag last */
+ ASSERT(hfrag->next == NULL);
+ hfrag->next = bp;
+ bp->next = NULL;
+ }
+ }
+
+ if (gc_allowed) {
+ /*
+ * Current implementation first tests without
+ * allowing GC, and then restarts the operation
+ * allowing GC if it is needed. It is therfore
+ * very likely that we will need the GC (although
+ * this is not completely certain). We go for
+ * the GC directly instead of scanning everything
+ * one more time...
+ */
+ goto literal_gc;
+ }
+
+ *redsp += 2;
+ if (any_heap_ref_ptrs(&c_p->fvalue, &c_p->fvalue+1, literals, lit_bsize)) {
+ c_p->freason = EXC_NULL;
+ c_p->fvalue = NIL;
+ c_p->ftrace = NIL;
+ }
+
+ if (any_heap_ref_ptrs(c_p->stop, c_p->hend, literals, lit_bsize))
+ goto literal_gc;
+ *redsp += 1;
+#ifdef HIPE
+ if (nstack_any_heap_ref_ptrs(c_p, literals, lit_bsize))
+ goto literal_gc;
+ *redsp += 1;
+#endif
+ if (any_heap_refs(c_p->heap, c_p->htop, literals, lit_bsize))
+ goto literal_gc;
+ *redsp += 1;
+ if (any_heap_refs(c_p->old_heap, c_p->old_htop, literals, lit_bsize))
+ goto literal_gc;
+
+ /* Check dictionary */
+ *redsp += 1;
+ if (c_p->dictionary) {
+ Eterm* start = ERTS_PD_START(c_p->dictionary);
+ Eterm* end = start + ERTS_PD_SIZE(c_p->dictionary);
+
+ if (any_heap_ref_ptrs(start, end, literals, lit_bsize))
+ goto literal_gc;
+ }
+
+ /* Check heap fragments */
+ for (hfrag = c_p->mbuf; hfrag; hfrag = hfrag->next) {
+ Eterm *hp, *hp_end;
+
+ *redsp += 1;
+
+ hp = &hfrag->mem[0];
+ hp_end = &hfrag->mem[hfrag->used_size];
+ if (any_heap_refs(hp, hp_end, literals, lit_bsize))
+ goto literal_gc;
+ }
+
+ /*
+ * Message buffer fragments (matched messages)
+ * - off heap lists should already have been moved into
+ * process off heap structure.
+ * - Check for literals
+ */
+ for (msgp = c_p->msg_frag; msgp; msgp = msgp->next) {
+ hfrag = erts_message_to_heap_frag(msgp);
+ for (; hfrag; hfrag = hfrag->next) {
+ Eterm *hp, *hp_end;
+
+ *redsp += 1;
+
+ hp = &hfrag->mem[0];
+ hp_end = &hfrag->mem[hfrag->used_size];
+
+ if (any_heap_refs(hp, hp_end, literals, lit_bsize))
+ goto literal_gc;
+ }
+ }
+
+ return am_ok;
+
+literal_gc:
+
+ if (!gc_allowed)
+ return am_need_gc;
+
+ if (c_p->flags & F_DISABLE_GC)
+ return THE_NON_VALUE;
+
+ FLAGS(c_p) |= F_NEED_FULLSWEEP;
+
+ *redsp += erts_garbage_collect_nobump(c_p, 0, c_p->arg_reg, c_p->arity, fcalls);
+
+ erts_garbage_collect_literals(c_p, (Eterm *) literals, lit_bsize, oh);
+
+ *redsp += lit_bsize / 64; /* Need, better value... */
+
+ return am_ok;
+}
+
+static Eterm
+check_process_code(Process* rp, Module* modp, Uint flags, int *redsp, int fcalls)
+{
+ BeamInstr* start;
+ char* mod_start;
+ Uint mod_size;
+ Eterm* sp;
+
+ *redsp += 1;
+
+ /*
+ * Pick up limits for the module.
+ */
+ start = (BeamInstr*) modp->old.code_hdr;
+ mod_start = (char *) start;
+ mod_size = modp->old.code_length;
+
+ /*
+ * Check if current instruction or continuation pointer points into module.
+ */
+ if (ErtsInArea(rp->i, mod_start, mod_size)
+ || ErtsInArea(rp->cp, mod_start, mod_size)) {
+ return am_true;
+ }
+
+ *redsp += (STACK_START(rp) - rp->stop) / 32;
+
+ /*
+ * Check all continuation pointers stored on the stack.
+ */
+ for (sp = rp->stop; sp < STACK_START(rp); sp++) {
+ if (is_CP(*sp) && ErtsInArea(cp_val(*sp), mod_start, mod_size)) {
+ return am_true;
+ }
+ }
+
+ /*
+ * Check all continuation pointers stored in stackdump
+ * and clear exception stackdump if there is a pointer
+ * to the module.
+ */
+ if (rp->ftrace != NIL) {
+ struct StackTrace *s;
+ ASSERT(is_list(rp->ftrace));
+ s = (struct StackTrace *) big_val(CDR(list_val(rp->ftrace)));
+ if ((s->pc && ErtsInArea(s->pc, mod_start, mod_size)) ||
+ (s->current && ErtsInArea(s->current, mod_start, mod_size))) {
+ rp->freason = EXC_NULL;
+ rp->fvalue = NIL;
+ rp->ftrace = NIL;
+ } else {
+ int i;
+ for (i = 0; i < s->depth; i++) {
+ if (ErtsInArea(s->trace[i], mod_start, mod_size)) {
+ rp->freason = EXC_NULL;
+ rp->fvalue = NIL;
+ rp->ftrace = NIL;
+ break;
+ }
+ }
+ }
+ }
+
+ return am_false;
+}
+
+#else /* !ERTS_NEW_PURGE_STRATEGY, i.e, old style purge... */
static Eterm
check_process_code(Process* rp, Module* modp, Uint flags, int *redsp, int fcalls)
@@ -842,17 +1200,28 @@ check_process_code(Process* rp, Module* modp, Uint flags, int *redsp, int fcalls
}
/*
- * Message queue can contains funs, but (at least currently) no
+ * Message queue can contains funs, and may contain
* literals. If we got references to this module from the message
- * queue, a GC cannot remove these...
+ * queue.
+ *
+ * If a literal is in the message queue we maka an explicit copy of
+ * and attach it to the heap fragment. Each message needs to be
+ * self contained, we cannot save the literal in the old_heap or
+ * any other heap than the message it self.
*/
erts_smp_proc_lock(rp, ERTS_PROC_LOCK_MSGQ);
ERTS_SMP_MSGQ_MV_INQ2PRIVQ(rp);
erts_smp_proc_unlock(rp, ERTS_PROC_LOCK_MSGQ);
- literals = (char*) modp->old.code_hdr->literals_start;
- lit_bsize = (char*) modp->old.code_hdr->literals_end - literals;
+ if (modp->old.code_hdr->literal_area) {
+ literals = (char*) modp->old.code_hdr->literal_area->start;
+ lit_bsize = (char*) modp->old.code_hdr->literal_area->end - literals;
+ }
+ else {
+ literals = NULL;
+ lit_bsize = 0;
+ }
for (msgp = rp->msg.first; msgp; msgp = msgp->next) {
if (msgp->data.attached == ERTS_MSG_COMBINED_HFRAG)
@@ -861,15 +1230,31 @@ check_process_code(Process* rp, Module* modp, Uint flags, int *redsp, int fcalls
hfrag = msgp->data.heap_frag;
else
continue;
- for (; hfrag; hfrag = hfrag->next) {
- if (check_mod_funs(rp, &hfrag->off_heap, mod_start, mod_size))
- return am_true;
- /* Should not contain any literals... */
- ASSERT(!any_heap_refs(&hfrag->mem[0],
- &hfrag->mem[hfrag->used_size],
- literals,
- lit_bsize));
- }
+ {
+ ErlHeapFragment *hf;
+ Uint lit_sz;
+ for (hf=hfrag; hf; hf = hf->next) {
+ if (check_mod_funs(rp, &hfrag->off_heap, mod_start, mod_size))
+ return am_true;
+ lit_sz = hfrag_literal_size(&hf->mem[0], &hf->mem[hf->used_size],
+ literals, lit_bsize);
+ }
+ if (lit_sz > 0) {
+ ErlHeapFragment *bp = new_message_buffer(lit_sz);
+ Eterm *hp = bp->mem;
+
+ for (hf=hfrag; hf; hf = hf->next) {
+ hfrag_literal_copy(&hp, &bp->off_heap,
+ &hf->mem[0], &hf->mem[hf->used_size],
+ literals, lit_bsize);
+ hfrag=hf;
+ }
+ /* link new hfrag last */
+ ASSERT(hfrag->next == NULL);
+ hfrag->next = bp;
+ bp->next = NULL;
+ }
+ }
}
while (1) {
@@ -877,12 +1262,6 @@ check_process_code(Process* rp, Module* modp, Uint flags, int *redsp, int fcalls
/* Check heap, stack etc... */
if (check_mod_funs(rp, &rp->off_heap, mod_start, mod_size))
goto try_gc;
- if (!(flags & ERTS_CPC_COPY_LITERALS)) {
- /* Process ok. May contain old literals but we will be called
- * again before module is purged.
- */
- return am_false;
- }
if (any_heap_ref_ptrs(&rp->fvalue, &rp->fvalue+1, literals, lit_bsize)) {
rp->freason = EXC_NULL;
rp->fvalue = NIL;
@@ -890,6 +1269,10 @@ check_process_code(Process* rp, Module* modp, Uint flags, int *redsp, int fcalls
}
if (any_heap_ref_ptrs(rp->stop, rp->hend, literals, lit_bsize))
goto try_literal_gc;
+#ifdef HIPE
+ if (nstack_any_heap_ref_ptrs(rp, literals, lit_bsize))
+ goto try_literal_gc;
+#endif
if (any_heap_refs(rp->heap, rp->htop, literals, lit_bsize))
goto try_literal_gc;
if (any_heap_refs(rp->old_heap, rp->old_htop, literals, lit_bsize))
@@ -916,29 +1299,26 @@ check_process_code(Process* rp, Module* modp, Uint flags, int *redsp, int fcalls
goto try_literal_gc;
}
-#ifdef DEBUG
/*
- * Message buffer fragments should not have any references
- * to literals, and off heap lists should already have
- * been moved into process off heap structure.
+ * Message buffer fragments (matched messages)
+ * - off heap lists should already have been moved into
+ * process off heap structure.
+ * - Check for literals
*/
for (msgp = rp->msg_frag; msgp; msgp = msgp->next) {
- if (msgp->data.attached == ERTS_MSG_COMBINED_HFRAG)
- hfrag = &msgp->hfrag;
- else
- hfrag = msgp->data.heap_frag;
+ hfrag = erts_message_to_heap_frag(msgp);
for (; hfrag; hfrag = hfrag->next) {
Eterm *hp, *hp_end;
ASSERT(!check_mod_funs(rp, &hfrag->off_heap, mod_start, mod_size));
hp = &hfrag->mem[0];
hp_end = &hfrag->mem[hfrag->used_size];
- ASSERT(!any_heap_refs(hp, hp_end, literals, lit_bsize));
+
+ if (any_heap_refs(hp, hp_end, literals, lit_bsize))
+ goto try_literal_gc;
}
}
-#endif
-
return am_false;
try_literal_gc:
@@ -971,7 +1351,7 @@ check_process_code(Process* rp, Module* modp, Uint flags, int *redsp, int fcalls
}
if (need_gc & ERTS_LITERAL_GC__) {
struct erl_off_heap_header* oh;
- oh = modp->old.code_hdr->literals_off_heap;
+ oh = modp->old.code_hdr->literal_area->off_heap;
*redsp += lit_bsize / 64; /* Need, better value... */
erts_garbage_collect_literals(rp, (Eterm*)literals, lit_bsize, oh);
done_gc |= ERTS_LITERAL_GC__;
@@ -984,6 +1364,8 @@ check_process_code(Process* rp, Module* modp, Uint flags, int *redsp, int fcalls
}
+#endif /* !ERTS_NEW_PURGE_STRATEGY */
+
static int
any_heap_ref_ptrs(Eterm* start, Eterm* end, char* mod_start, Uint mod_size)
{
@@ -1038,200 +1420,549 @@ any_heap_refs(Eterm* start, Eterm* end, char* mod_start, Uint mod_size)
return 0;
}
-#undef in_area
+static Uint
+hfrag_literal_size(Eterm* start, Eterm* end, char* lit_start, Uint lit_size)
+{
+ Eterm* p;
+ Eterm val;
+ Uint sz = 0;
+
+ for (p = start; p < end; p++) {
+ val = *p;
+ switch (primary_tag(val)) {
+ case TAG_PRIMARY_BOXED:
+ case TAG_PRIMARY_LIST:
+ if (ErtsInArea(val, lit_start, lit_size)) {
+ sz += size_object(val);
+ }
+ break;
+ case TAG_PRIMARY_HEADER:
+ if (!header_is_transparent(val)) {
+ Eterm* new_p;
+ if (header_is_bin_matchstate(val)) {
+ ErlBinMatchState *ms = (ErlBinMatchState*) p;
+ ErlBinMatchBuffer *mb = &(ms->mb);
+ if (ErtsInArea(mb->orig, lit_start, lit_size)) {
+ sz += size_object(mb->orig);
+ }
+ }
+ new_p = p + thing_arityval(val);
+ ASSERT(start <= new_p && new_p < end);
+ p = new_p;
+ }
+ }
+ }
+ return sz;
+}
+
+static void
+hfrag_literal_copy(Eterm **hpp, ErlOffHeap *ohp,
+ Eterm *start, Eterm *end,
+ char *lit_start, Uint lit_size) {
+ Eterm* p;
+ Eterm val;
+ Uint sz;
+
+ for (p = start; p < end; p++) {
+ val = *p;
+ switch (primary_tag(val)) {
+ case TAG_PRIMARY_BOXED:
+ case TAG_PRIMARY_LIST:
+ if (ErtsInArea(val, lit_start, lit_size)) {
+ sz = size_object(val);
+ val = copy_struct(val, sz, hpp, ohp);
+ *p = val;
+ }
+ break;
+ case TAG_PRIMARY_HEADER:
+ if (!header_is_transparent(val)) {
+ Eterm* new_p;
+ /* matchstate in message, not possible. */
+ if (header_is_bin_matchstate(val)) {
+ ErlBinMatchState *ms = (ErlBinMatchState*) p;
+ ErlBinMatchBuffer *mb = &(ms->mb);
+ if (ErtsInArea(mb->orig, lit_start, lit_size)) {
+ sz = size_object(mb->orig);
+ mb->orig = copy_struct(mb->orig, sz, hpp, ohp);
+ }
+ }
+ new_p = p + thing_arityval(val);
+ ASSERT(start <= new_p && new_p < end);
+ p = new_p;
+ }
+ }
+ }
+}
+
+#ifdef ERTS_NEW_PURGE_STRATEGY
#ifdef ERTS_SMP
-static void copy_literals_commit(void*);
-#endif
-copy_literals_t erts_clrange = {NULL, 0, THE_NON_VALUE};
+ErtsThrPrgrLaterOp later_literal_area_switch;
-/* copy literals
- *
- * copy_literals.ptr = LitPtr
- * copy_literals.sz = LitSz
- * ------ THR PROG COMMIT -----
- *
- * - check process code
- * - check process code
- * ...
- * copy_literals.ptr = NULL
- * copy_literals.sz = 0
- * ------ THR PROG COMMIT -----
- * ...
- */
+typedef struct {
+ ErtsThrPrgrLaterOp lop;
+ ErtsLiteralArea *la;
+} ErtsLaterReleasLiteralArea;
+static void
+later_release_literal_area(void *vlrlap)
+{
+ ErtsLaterReleasLiteralArea *lrlap;
+ lrlap = (ErtsLaterReleasLiteralArea *) vlrlap;
+ erts_release_literal_area(lrlap->la);
+ erts_free(ERTS_ALC_T_RELEASE_LAREA, vlrlap);
+}
-BIF_RETTYPE erts_internal_copy_literals_2(BIF_ALIST_2)
+static void
+complete_literal_area_switch(void *literal_area)
{
- ErtsCodeIndex code_ix;
- Eterm res = am_true;
+ Process *p = erts_literal_area_collector;
+ erts_smp_proc_lock(p, ERTS_PROC_LOCK_STATUS);
+ erts_resume(p, ERTS_PROC_LOCK_STATUS);
+ erts_smp_proc_unlock(p, ERTS_PROC_LOCK_STATUS);
+ if (literal_area)
+ erts_release_literal_area((ErtsLiteralArea *) literal_area);
+}
+#endif
- if (is_not_atom(BIF_ARG_1) || (am_true != BIF_ARG_2 && am_false != BIF_ARG_2)) {
- BIF_ERROR(BIF_P, BADARG);
- }
+#endif /* ERTS_NEW_PURGE_STRATEGY */
- if (!erts_try_seize_code_write_permission(BIF_P)) {
- ERTS_BIF_YIELD2(bif_export[BIF_erts_internal_copy_literals_2],
- BIF_P, BIF_ARG_1, BIF_ARG_2);
+BIF_RETTYPE erts_internal_release_literal_area_switch_0(BIF_ALIST_0)
+{
+#ifndef ERTS_NEW_PURGE_STRATEGY
+ BIF_ERROR(BIF_P, EXC_NOTSUP);
+#else
+ ErtsLiteralArea *unused_la;
+ ErtsLiteralAreaRef *la_ref;
+
+ if (BIF_P != erts_literal_area_collector)
+ BIF_ERROR(BIF_P, EXC_NOTSUP);
+
+ erts_smp_mtx_lock(&release_literal_areas.mtx);
+
+ la_ref = release_literal_areas.first;
+ if (la_ref) {
+ release_literal_areas.first = la_ref->next;
+ if (!release_literal_areas.first)
+ release_literal_areas.last = NULL;
}
- code_ix = erts_active_code_ix();
+ erts_smp_mtx_unlock(&release_literal_areas.mtx);
- if (BIF_ARG_2 == am_true) {
- Module* modp = erts_get_module(BIF_ARG_1, code_ix);
- if (!modp || !modp->old.code_hdr) {
- res = am_false;
- goto done;
- }
- if (erts_clrange.ptr != NULL
- && !(BIF_P->static_flags & ERTS_STC_FLG_SYSTEM_PROC)) {
- res = am_aborted;
- goto done;
- }
- erts_clrange.ptr = modp->old.code_hdr->literals_start;
- erts_clrange.sz = modp->old.code_hdr->literals_end - erts_clrange.ptr;
- erts_clrange.pid = BIF_P->common.id;
- } else if (BIF_ARG_2 == am_false) {
- if (erts_clrange.pid != BIF_P->common.id) {
- res = am_false;
- goto done;
- }
- erts_clrange.ptr = NULL;
- erts_clrange.sz = 0;
- erts_clrange.pid = THE_NON_VALUE;
+ unused_la = ERTS_COPY_LITERAL_AREA();
+
+ if (!la_ref) {
+ ERTS_SET_COPY_LITERAL_AREA(NULL);
+ if (unused_la) {
+#ifdef ERTS_SMP
+ ErtsLaterReleasLiteralArea *lrlap;
+ lrlap = erts_alloc(ERTS_ALC_T_RELEASE_LAREA,
+ sizeof(ErtsLaterReleasLiteralArea));
+ lrlap->la = unused_la;
+ erts_schedule_thr_prgr_later_cleanup_op(
+ later_release_literal_area,
+ (void *) lrlap,
+ &lrlap->lop,
+ (sizeof(ErtsLaterReleasLiteralArea)
+ + sizeof(ErtsLiteralArea)
+ + ((unused_la->end
+ - &unused_la->start[0])
+ - 1)*(sizeof(Eterm))));
+#else
+ erts_release_literal_area(unused_la);
+#endif
+ }
+ BIF_RET(am_false);
}
+ ERTS_SET_COPY_LITERAL_AREA(la_ref->literal_area);
+
+ erts_free(ERTS_ALC_T_LITERAL_REF, la_ref);
+
#ifdef ERTS_SMP
- ASSERT(committer_state.stager == NULL);
- committer_state.stager = BIF_P;
- erts_schedule_thr_prgr_later_op(copy_literals_commit, NULL, &committer_state.lop);
- erts_proc_inc_refc(BIF_P);
+ erts_schedule_thr_prgr_later_op(complete_literal_area_switch,
+ unused_la,
+ &later_literal_area_switch);
erts_suspend(BIF_P, ERTS_PROC_LOCK_MAIN, NULL);
ERTS_BIF_YIELD_RETURN(BIF_P, am_true);
+#else
+ erts_release_literal_area(unused_la);
+ BIF_RET(am_true);
#endif
-done:
- erts_release_code_write_permission();
- BIF_RET(res);
+
+#endif /* ERTS_NEW_PURGE_STRATEGY */
+}
+
+void
+erts_purge_state_add_fun(ErlFunEntry *fe)
+{
+ ASSERT(is_value(purge_state.module));
+ if (purge_state.fe_ix >= purge_state.fe_size) {
+ ErlFunEntry **funs;
+ purge_state.fe_size += 100;
+ funs = erts_alloc(ERTS_ALC_T_PURGE_DATA,
+ sizeof(ErlFunEntry *)*purge_state.fe_size);
+ sys_memcpy((void *) funs,
+ (void *) purge_state.funs,
+ purge_state.fe_ix*sizeof(ErlFunEntry *));
+ if (purge_state.funs != &purge_state.def_funs[0])
+ erts_free(ERTS_ALC_T_PURGE_DATA, purge_state.funs);
+ purge_state.funs = funs;
+ }
+ purge_state.funs[purge_state.fe_ix++] = fe;
+}
+
+Export *
+erts_suspend_process_on_pending_purge_lambda(Process *c_p)
+{
+ erts_smp_mtx_lock(&purge_state.mtx);
+ if (is_value(purge_state.module)) {
+ /*
+ * The process c_p is about to call a fun in the code
+ * that we are trying to purge. Suspend it and call
+ * erts_code_purger:pending_purge_lambda/3. The process
+ * will be resumed when the purge completes or aborts,
+ * and will then try to do the call again.
+ */
+ if (purge_state.sp_ix >= purge_state.sp_size) {
+ Eterm *sprocs;
+ purge_state.sp_size += 100;
+ sprocs = erts_alloc(ERTS_ALC_T_PURGE_DATA,
+ (sizeof(ErlFunEntry *)
+ * purge_state.sp_size));
+ sys_memcpy((void *) sprocs,
+ (void *) purge_state.sprocs,
+ purge_state.sp_ix*sizeof(ErlFunEntry *));
+ if (purge_state.sprocs != &purge_state.def_sprocs[0])
+ erts_free(ERTS_ALC_T_PURGE_DATA, purge_state.sprocs);
+ purge_state.sprocs = sprocs;
+ }
+ purge_state.sprocs[purge_state.sp_ix++] = c_p->common.id;
+ erts_suspend(c_p, ERTS_PROC_LOCK_MAIN, NULL);
+ ERTS_VBUMP_ALL_REDS(c_p);
+ }
+ erts_smp_mtx_unlock(&purge_state.mtx);
+ return purge_state.pending_purge_lambda;
+}
+
+static void
+finalize_purge_operation(Process *c_p, int succeded)
+{
+ Uint ix;
+
+ if (c_p)
+ erts_smp_proc_unlock(c_p, ERTS_PROC_LOCK_MAIN);
+
+ erts_smp_mtx_lock(&purge_state.mtx);
+
+ ASSERT(purge_state.module != THE_NON_VALUE);
+
+ purge_state.module = THE_NON_VALUE;
+
+ /*
+ * Resume all processes that have tried to call
+ * funs in this code.
+ */
+ for (ix = 0; ix < purge_state.sp_ix; ix++) {
+ Process *rp = erts_pid2proc(NULL, 0,
+ purge_state.sprocs[ix],
+ ERTS_PROC_LOCK_STATUS);
+ if (rp) {
+ erts_resume(rp, ERTS_PROC_LOCK_STATUS);
+ erts_smp_proc_unlock(rp, ERTS_PROC_LOCK_STATUS);
+ }
+ }
+
+ erts_smp_mtx_unlock(&purge_state.mtx);
+
+ if (c_p)
+ erts_smp_proc_lock(c_p, ERTS_PROC_LOCK_MAIN);
+
+ if (purge_state.sprocs != &purge_state.def_sprocs[0]) {
+ erts_free(ERTS_ALC_T_PURGE_DATA, purge_state.sprocs);
+ purge_state.sprocs = &purge_state.def_sprocs[0];
+ purge_state.sp_size = sizeof(purge_state.def_sprocs);
+ purge_state.sp_size /= sizeof(purge_state.def_sprocs[0]);
+ }
+ purge_state.sp_ix = 0;
+
+ if (purge_state.funs != &purge_state.def_funs[0]) {
+ erts_free(ERTS_ALC_T_PURGE_DATA, purge_state.funs);
+ purge_state.funs = &purge_state.def_funs[0];
+ purge_state.fe_size = sizeof(purge_state.def_funs);
+ purge_state.fe_size /= sizeof(purge_state.def_funs[0]);
+ }
+ purge_state.fe_ix = 0;
}
#ifdef ERTS_SMP
-static void copy_literals_commit(void* null) {
- Process* p = committer_state.stager;
-#ifdef DEBUG
- committer_state.stager = NULL;
-#endif
- erts_release_code_write_permission();
+
+static ErtsThrPrgrLaterOp purger_lop_data;
+
+static void
+resume_purger(void *unused)
+{
+ Process *p = erts_code_purger;
erts_smp_proc_lock(p, ERTS_PROC_LOCK_STATUS);
- if (!ERTS_PROC_IS_EXITING(p)) {
- erts_resume(p, ERTS_PROC_LOCK_STATUS);
- }
+ erts_resume(p, ERTS_PROC_LOCK_STATUS);
erts_smp_proc_unlock(p, ERTS_PROC_LOCK_STATUS);
- erts_proc_dec_refc(p);
}
-#endif /* ERTS_SMP */
+static void
+finalize_purge_abort(void *unused)
+{
+ erts_fun_purge_abort_finalize(purge_state.funs, purge_state.fe_ix);
-/* Do the actualy module purging and return:
- * true for success
- * false if no such old module
- * BADARG if not an atom
- */
-BIF_RETTYPE erts_internal_purge_module_1(BIF_ALIST_1)
+ finalize_purge_operation(NULL, 0);
+
+ resume_purger(NULL);
+}
+
+#endif /* ERTS_SMP */
+
+BIF_RETTYPE erts_internal_purge_module_2(BIF_ALIST_2)
{
- ErtsCodeIndex code_ix;
- BeamInstr* code;
- BeamInstr* end;
- Module* modp;
- int is_blocking = 0;
- Eterm ret;
+ if (BIF_P != erts_code_purger)
+ BIF_ERROR(BIF_P, EXC_NOTSUP);
- if (is_not_atom(BIF_ARG_1)) {
+ if (is_not_atom(BIF_ARG_1))
BIF_ERROR(BIF_P, BADARG);
- }
- if (!erts_try_seize_code_write_permission(BIF_P)) {
- ERTS_BIF_YIELD1(bif_export[BIF_erts_internal_purge_module_1],
- BIF_P, BIF_ARG_1);
- }
+ switch (BIF_ARG_2) {
- code_ix = erts_active_code_ix();
+ case am_prepare: {
+ /*
+ * Prepare for purge by marking all fun
+ * entries referring to the code to purge
+ * with "pending purge" markers.
+ */
+ ErtsCodeIndex code_ix;
+ Module* modp;
+ Eterm res;
- /*
- * Correct module?
- */
+ if (is_value(purge_state.module))
+ BIF_ERROR(BIF_P, BADARG);
- if ((modp = erts_get_module(BIF_ARG_1, code_ix)) == NULL) {
- ERTS_BIF_PREP_RET(ret, am_false);
- }
- else {
- erts_rwlock_old_code(code_ix);
+ code_ix = erts_active_code_ix();
/*
- * Any code to purge?
+ * Correct module?
*/
- if (!modp->old.code_hdr) {
- ERTS_BIF_PREP_RET(ret, am_false);
- }
+ modp = erts_get_module(BIF_ARG_1, code_ix);
+ if (!modp)
+ res = am_false;
else {
/*
- * Unload any NIF library
+ * Any code to purge?
*/
- if (modp->old.nif != NULL) {
- /* ToDo: Do unload nif without blocking */
- erts_rwunlock_old_code(code_ix);
- erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_MAIN);
- erts_smp_thr_progress_block();
- is_blocking = 1;
- erts_rwlock_old_code(code_ix);
- erts_unload_nif(modp->old.nif);
- modp->old.nif = NULL;
+ erts_rlock_old_code(code_ix);
+ if (!modp->old.code_hdr)
+ res = am_false;
+ else {
+ BeamInstr* code;
+ BeamInstr* end;
+ erts_smp_mtx_lock(&purge_state.mtx);
+ purge_state.module = BIF_ARG_1;
+ erts_smp_mtx_unlock(&purge_state.mtx);
+ res = am_true;
+ code = (BeamInstr*) modp->old.code_hdr;
+ end = (BeamInstr *)((char *)code + modp->old.code_length);
+ erts_fun_purge_prepare(code, end);
+#if !defined(ERTS_NEW_PURGE_STRATEGY)
+ ASSERT(!ERTS_COPY_LITERAL_AREA());
+ ERTS_SET_COPY_LITERAL_AREA(modp->old.code_hdr->literal_area);
+#endif
}
-
+ erts_runlock_old_code(code_ix);
+ }
+
+#ifndef ERTS_SMP
+ BIF_RET(res);
+#else
+ if (res != am_true)
+ BIF_RET(res);
+ else {
/*
- * Remove the old code.
+ * We'll be resumed when all schedulers are guaranteed
+ * to see the "pending purge" markers that we've made on
+ * all fun entries of the code that we are about to purge.
+ * Processes trying to call these funs will be suspended
+ * before calling the funs. That is we are guaranteed not
+ * to get any more direct references into the code while
+ * checking for such references...
*/
- ASSERT(erts_total_code_size >= modp->old.code_length);
- erts_total_code_size -= modp->old.code_length;
- code = (BeamInstr*) modp->old.code_hdr;
- end = (BeamInstr *)((char *)code + modp->old.code_length);
- erts_cleanup_funs_on_purge(code, end);
- beam_catches_delmod(modp->old.catches, code, modp->old.code_length,
- code_ix);
- decrement_refc(modp->old.code_hdr);
- if (modp->old.code_hdr->literals_start) {
- erts_free(ERTS_ALC_T_LITERAL, modp->old.code_hdr->literals_start);
- }
- erts_free(ERTS_ALC_T_CODE, (void *) code);
- modp->old.code_hdr = NULL;
- modp->old.code_length = 0;
- modp->old.catches = BEAM_CATCHES_NIL;
- erts_remove_from_ranges(code);
- ERTS_BIF_PREP_RET(ret, am_true);
+ erts_schedule_thr_prgr_later_op(resume_purger,
+ NULL,
+ &purger_lop_data);
+ erts_suspend(BIF_P, ERTS_PROC_LOCK_MAIN, NULL);
+ ERTS_BIF_YIELD_RETURN(BIF_P, am_true);
}
- erts_rwunlock_old_code(code_ix);
+#endif
}
- if (is_blocking) {
- erts_smp_thr_progress_unblock();
- erts_smp_proc_lock(BIF_P, ERTS_PROC_LOCK_MAIN);
+
+ case am_abort: {
+ /*
+ * Soft purge that detected direct references into the code
+ * we set out to purge. Abort the purge.
+ */
+
+ if (purge_state.module != BIF_ARG_1)
+ BIF_ERROR(BIF_P, BADARG);
+
+ erts_fun_purge_abort_prepare(purge_state.funs, purge_state.fe_ix);
+
+#if !defined(ERTS_NEW_PURGE_STRATEGY)
+ ASSERT(ERTS_COPY_LITERAL_AREA());
+ ERTS_SET_COPY_LITERAL_AREA(NULL);
+#endif
+#ifndef ERTS_SMP
+ erts_fun_purge_abort_finalize(purge_state.funs, purge_state.fe_ix);
+ finalize_purge_operation(BIF_P, 0);
+ BIF_RET(am_false);
+#else
+ /*
+ * We need to restore the code addresses of the funs in
+ * two stages in order to ensure that we do not get any
+ * stale suspended processes due to the purge abort.
+ * Restore address pointer (erts_fun_purge_abort_prepare);
+ * wait for thread progress; clear pending purge address
+ * pointer (erts_fun_purge_abort_finalize), and then
+ * resume processes that got suspended
+ * (finalize_purge_operation).
+ */
+ erts_schedule_thr_prgr_later_op(finalize_purge_abort,
+ NULL,
+ &purger_lop_data);
+ erts_suspend(BIF_P, ERTS_PROC_LOCK_MAIN, NULL);
+ ERTS_BIF_YIELD_RETURN(BIF_P, am_false);
+#endif
}
- erts_release_code_write_permission();
- return ret;
-}
-static void
-decrement_refc(BeamCodeHeader* code_hdr)
-{
- struct erl_off_heap_header* oh = code_hdr->literals_off_heap;
-
- while (oh) {
- Binary* bptr;
- ASSERT(thing_subtag(oh->thing_word) == REFC_BINARY_SUBTAG);
- bptr = ((ProcBin*)oh)->val;
- if (erts_refc_dectest(&bptr->refc, 0) == 0) {
- erts_bin_free(bptr);
+ case am_complete: {
+ ErtsCodeIndex code_ix;
+ BeamInstr* code;
+ Module* modp;
+ int is_blocking = 0;
+ Eterm ret;
+ ErtsLiteralArea *literals = NULL;
+
+
+ /*
+ * We have no direct references into the code.
+ * Complete to purge.
+ */
+
+ if (purge_state.module != BIF_ARG_1)
+ BIF_ERROR(BIF_P, BADARG);
+
+ if (!erts_try_seize_code_write_permission(BIF_P)) {
+ ERTS_BIF_YIELD2(bif_export[BIF_erts_internal_purge_module_2],
+ BIF_P, BIF_ARG_1, BIF_ARG_2);
+ }
+
+ code_ix = erts_active_code_ix();
+
+ /*
+ * Correct module?
+ */
+
+ if ((modp = erts_get_module(BIF_ARG_1, code_ix)) == NULL) {
+ ERTS_BIF_PREP_RET(ret, am_false);
+ }
+ else {
+
+ erts_rwlock_old_code(code_ix);
+
+ /*
+ * Any code to purge?
+ */
+ if (!modp->old.code_hdr) {
+ ERTS_BIF_PREP_RET(ret, am_false);
+ }
+ else {
+ /*
+ * Unload any NIF library
+ */
+ if (modp->old.nif != NULL) {
+ /* ToDo: Do unload nif without blocking */
+ erts_rwunlock_old_code(code_ix);
+ erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_MAIN);
+ erts_smp_thr_progress_block();
+ is_blocking = 1;
+ erts_rwlock_old_code(code_ix);
+ erts_unload_nif(modp->old.nif);
+ modp->old.nif = NULL;
+ }
+
+ /*
+ * Remove the old code.
+ */
+ ASSERT(erts_total_code_size >= modp->old.code_length);
+ erts_total_code_size -= modp->old.code_length;
+ code = (BeamInstr*) modp->old.code_hdr;
+ erts_fun_purge_complete(purge_state.funs, purge_state.fe_ix);
+ beam_catches_delmod(modp->old.catches, code, modp->old.code_length,
+ code_ix);
+ literals = modp->old.code_hdr->literal_area;
+ modp->old.code_hdr->literal_area = NULL;
+ erts_free(ERTS_ALC_T_CODE, (void *) code);
+ modp->old.code_hdr = NULL;
+ modp->old.code_length = 0;
+ modp->old.catches = BEAM_CATCHES_NIL;
+ erts_remove_from_ranges(code);
+ ERTS_BIF_PREP_RET(ret, am_true);
+ }
+ erts_rwunlock_old_code(code_ix);
}
- oh = oh->next;
+ if (is_blocking) {
+ erts_smp_thr_progress_unblock();
+ erts_smp_proc_lock(BIF_P, ERTS_PROC_LOCK_MAIN);
+ }
+
+ erts_release_code_write_permission();
+
+ finalize_purge_operation(BIF_P, ret == am_true);
+
+#if !defined(ERTS_NEW_PURGE_STRATEGY)
+
+ ASSERT(ERTS_COPY_LITERAL_AREA() == literals);
+ ERTS_SET_COPY_LITERAL_AREA(NULL);
+ erts_release_literal_area(literals);
+
+#else /* ERTS_NEW_PURGE_STRATEGY */
+
+ if (literals) {
+ ErtsLiteralAreaRef *ref;
+ ref = erts_alloc(ERTS_ALC_T_LITERAL_REF,
+ sizeof(ErtsLiteralAreaRef));
+ ref->literal_area = literals;
+ ref->next = NULL;
+ erts_smp_mtx_lock(&release_literal_areas.mtx);
+ if (release_literal_areas.last) {
+ release_literal_areas.last->next = ref;
+ release_literal_areas.last = ref;
+ }
+ else {
+ release_literal_areas.first = ref;
+ release_literal_areas.last = ref;
+ }
+ erts_smp_mtx_unlock(&release_literal_areas.mtx);
+ erts_queue_message(erts_literal_area_collector,
+ 0,
+ erts_alloc_message(0, NULL),
+ am_copy_literals,
+ BIF_P->common.id);
+ }
+
+#endif /* ERTS_NEW_PURGE_STRATEGY */
+
+ return ret;
+ }
+
+ default:
+ BIF_ERROR(BIF_P, BADARG);
+
}
}
diff --git a/erts/emulator/beam/beam_bp.c b/erts/emulator/beam/beam_bp.c
index 8489897d3a..920c8b1ed0 100644
--- a/erts/emulator/beam/beam_bp.c
+++ b/erts/emulator/beam/beam_bp.c
@@ -858,7 +858,8 @@ erts_bif_trace(int bif_index, Process* p, Eterm* args, BeamInstr* I)
if (flags & MATCH_SET_RX_TRACE) {
erts_trace_return(p, ep->code, result, &ERTS_TRACER(p));
}
- if (flags & MATCH_SET_RETURN_TO_TRACE) {
+ if (flags & MATCH_SET_RETURN_TO_TRACE &&
+ IS_TRACED_FL(p, F_TRACE_RETURN_TO)) {
/* can only happen if(local)*/
if (applying) {
/* Apply of BIF, cp is in calling function */
diff --git a/erts/emulator/beam/beam_emu.c b/erts/emulator/beam/beam_emu.c
index f8f2e29c95..ef4cdf9d5a 100644
--- a/erts/emulator/beam/beam_emu.c
+++ b/erts/emulator/beam/beam_emu.c
@@ -1323,11 +1323,7 @@ void process_main(void)
if (start_time != 0) {
Sint64 diff = erts_timestamp_millis() - start_time;
- if (diff > 0 && (Uint) diff > erts_system_monitor_long_schedule
-#if defined(ERTS_SMP) && defined(ERTS_DIRTY_SCHEDULERS)
- && !ERTS_SCHEDULER_IS_DIRTY(erts_proc_sched_data(c_p))
-#endif
- ) {
+ if (diff > 0 && (Uint) diff > erts_system_monitor_long_schedule) {
BeamInstr *inptr = find_function_from_pc(start_time_i);
BeamInstr *outptr = find_function_from_pc(c_p->i);
monitor_long_schedule_proc(c_p,inptr,outptr,(Uint) diff);
@@ -1337,7 +1333,7 @@ void process_main(void)
PROCESS_MAIN_CHK_LOCKS(c_p);
ERTS_SMP_UNREQ_PROC_MAIN_LOCK(c_p);
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
- c_p = schedule(c_p, reds_used);
+ c_p = erts_schedule(NULL, c_p, reds_used);
ASSERT(!(c_p->flags & F_HIPE_MODE));
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
start_time = 0;
@@ -1964,6 +1960,8 @@ void process_main(void)
ErtsMessage* msgp;
PROCESS_MAIN_CHK_LOCKS(c_p);
+ ERTS_CHK_MBUF_SZ(c_p);
+
PreFetch(0, next);
msgp = PEEK_MESSAGE(c_p);
@@ -2051,6 +2049,7 @@ void process_main(void)
}
ERTS_DBG_CHK_REDS(c_p, FCALLS);
+ ERTS_CHK_MBUF_SZ(c_p);
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
PROCESS_MAIN_CHK_LOCKS(c_p);
@@ -2165,7 +2164,10 @@ void process_main(void)
c_p->i = (BeamInstr *) Arg(0); /* L1 */
SWAPOUT;
c_p->arity = 0;
- erts_smp_atomic32_read_band_relb(&c_p->state, ~ERTS_PSFLG_ACTIVE);
+
+ if (!ERTS_PTMR_IS_TIMED_OUT(c_p))
+ erts_smp_atomic32_read_band_relb(&c_p->state,
+ ~ERTS_PSFLG_ACTIVE);
ASSERT(!ERTS_PROC_IS_EXITING(c_p));
erts_smp_proc_unlock(c_p, ERTS_PROC_LOCKS_MSG_RECEIVE);
c_p->current = NULL;
@@ -2584,7 +2586,9 @@ do { \
c_p->fcalls = FCALLS;
PROCESS_MAIN_CHK_LOCKS(c_p);
ASSERT(!ERTS_PROC_IS_EXITING(c_p));
+ ERTS_CHK_MBUF_SZ(c_p);
result = (*bf)(c_p, tmp_reg);
+ ERTS_CHK_MBUF_SZ(c_p);
ASSERT(!ERTS_PROC_IS_EXITING(c_p) || is_non_value(result));
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
PROCESS_MAIN_CHK_LOCKS(c_p);
@@ -2615,7 +2619,9 @@ do { \
c_p->fcalls = FCALLS;
PROCESS_MAIN_CHK_LOCKS(c_p);
ASSERT(!ERTS_PROC_IS_EXITING(c_p));
+ ERTS_CHK_MBUF_SZ(c_p);
result = (*bf)(c_p, tmp_reg);
+ ERTS_CHK_MBUF_SZ(c_p);
ASSERT(!ERTS_PROC_IS_EXITING(c_p) || is_non_value(result));
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
PROCESS_MAIN_CHK_LOCKS(c_p);
@@ -2645,7 +2651,9 @@ do { \
SWAPOUT;
PROCESS_MAIN_CHK_LOCKS(c_p);
ERTS_SMP_UNREQ_PROC_MAIN_LOCK(c_p);
+ ERTS_CHK_MBUF_SZ(c_p);
result = (*bf)(c_p, reg, live);
+ ERTS_CHK_MBUF_SZ(c_p);
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
ERTS_SMP_REQ_PROC_MAIN_LOCK(c_p);
PROCESS_MAIN_CHK_LOCKS(c_p);
@@ -2686,7 +2694,9 @@ do { \
SWAPOUT;
PROCESS_MAIN_CHK_LOCKS(c_p);
ERTS_SMP_UNREQ_PROC_MAIN_LOCK(c_p);
+ ERTS_CHK_MBUF_SZ(c_p);
result = (*bf)(c_p, reg, live);
+ ERTS_CHK_MBUF_SZ(c_p);
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
ERTS_SMP_REQ_PROC_MAIN_LOCK(c_p);
PROCESS_MAIN_CHK_LOCKS(c_p);
@@ -2729,7 +2739,9 @@ do { \
SWAPOUT;
PROCESS_MAIN_CHK_LOCKS(c_p);
ERTS_SMP_UNREQ_PROC_MAIN_LOCK(c_p);
+ ERTS_CHK_MBUF_SZ(c_p);
result = (*bf)(c_p, reg, live);
+ ERTS_CHK_MBUF_SZ(c_p);
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
ERTS_SMP_REQ_PROC_MAIN_LOCK(c_p);
PROCESS_MAIN_CHK_LOCKS(c_p);
@@ -2767,7 +2779,9 @@ do { \
c_p->fcalls = FCALLS;
PROCESS_MAIN_CHK_LOCKS(c_p);
ASSERT(!ERTS_PROC_IS_EXITING(c_p));
+ ERTS_CHK_MBUF_SZ(c_p);
result = (*bf)(c_p, tmp_reg);
+ ERTS_CHK_MBUF_SZ(c_p);
ASSERT(!ERTS_PROC_IS_EXITING(c_p) || is_non_value(result));
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
PROCESS_MAIN_CHK_LOCKS(c_p);
@@ -2794,7 +2808,9 @@ do { \
bf = (BifFunction) Arg(0);
PROCESS_MAIN_CHK_LOCKS(c_p);
ASSERT(!ERTS_PROC_IS_EXITING(c_p));
+ ERTS_CHK_MBUF_SZ(c_p);
result = (*bf)(c_p, tmp_reg);
+ ERTS_CHK_MBUF_SZ(c_p);
ASSERT(!ERTS_PROC_IS_EXITING(c_p) || is_non_value(result));
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
PROCESS_MAIN_CHK_LOCKS(c_p);
@@ -2830,13 +2846,7 @@ do { \
goto context_switch3;
}
- if (ERTS_MSACC_IS_ENABLED_CACHED_X()) {
- if (GET_BIF_MODULE(Arg(0)) == am_ets) {
- ERTS_MSACC_SET_STATE_CACHED_M_X(ERTS_MSACC_STATE_ETS);
- } else {
- ERTS_MSACC_SET_STATE_CACHED_M_X(ERTS_MSACC_STATE_BIF);
- }
- }
+ ERTS_MSACC_SET_BIF_STATE_CACHED_X(GET_BIF_MODULE(Arg(0)), GET_BIF_ADDRESS(Arg(0)));
bf = GET_BIF_ADDRESS(Arg(0));
@@ -2850,7 +2860,9 @@ do { \
ASSERT(!ERTS_PROC_IS_EXITING(c_p));
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
live_hf_end = c_p->mbuf;
+ ERTS_CHK_MBUF_SZ(c_p);
result = (*bf)(c_p, reg, I);
+ ERTS_CHK_MBUF_SZ(c_p);
ASSERT(!ERTS_PROC_IS_EXITING(c_p) || is_non_value(result));
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
ERTS_HOLE_CHECK(c_p);
@@ -3036,6 +3048,7 @@ do { \
if (i == 0) {
StoreBifResult(4, Op1);
}
+ ires = big_size(Op1);
goto big_shift;
}
} else if (is_big(Op2)) {
@@ -3051,7 +3064,6 @@ do { \
OpCase(i_bsl_jIssd):
GetArg2(2, Op1, Op2);
-
do_bsl:
if (is_small(Op2)) {
i = signed_val(Op2);
@@ -3077,16 +3089,12 @@ do { \
StoreBifResult(4, Op1);
}
}
- Op1 = small_to_big(ires, tmp_big);
-#ifdef TAG_LITERAL_PTR
- Op1 |= TAG_LITERAL_PTR;
-#endif
+ ires = 1; /* big_size(small_to_big(Op1)) */
big_shift:
if (i > 0) { /* Left shift. */
- ires = big_size(Op1) + (i / D_EXP);
+ ires += (i / D_EXP);
} else { /* Right shift. */
- ires = big_size(Op1);
if (ires <= (-i / D_EXP))
ires = 3; /* ??? */
else
@@ -3105,6 +3113,9 @@ do { \
goto lb_Cl_error;
}
TestHeapPreserve(ires+1, Arg(1), Op1);
+ if (is_small(Op1)) {
+ Op1 = small_to_big(signed_val(Op1), tmp_big);
+ }
bigp = HTOP;
Op1 = big_lshift(Op1, i, bigp);
if (is_big(Op1)) {
@@ -3127,6 +3138,7 @@ do { \
if (i == 0) {
StoreBifResult(4, Op1);
}
+ ires = big_size(Op1);
goto big_shift;
}
} else if (is_big(Op2)) {
@@ -3559,25 +3571,22 @@ do { \
typedef Eterm NifF(struct enif_environment_t*, int argc, Eterm argv[]);
NifF* fp = vbf = (NifF*) I[1];
struct enif_environment_t env;
-#ifdef ERTS_DIRTY_SCHEDULERS
- if (!c_p->scheduler_data)
- live_hf_end = ERTS_INVALID_HFRAG_PTR; /* On dirty scheduler */
- else
+#ifdef ERTS_SMP
+ ASSERT(c_p->scheduler_data);
#endif
- live_hf_end = c_p->mbuf;
+ live_hf_end = c_p->mbuf;
+ ERTS_CHK_MBUF_SZ(c_p);
erts_pre_nif(&env, c_p, (struct erl_module_nif*)I[2], NULL);
nif_bif_result = (*fp)(&env, bif_nif_arity, reg);
if (env.exception_thrown)
nif_bif_result = THE_NON_VALUE;
erts_post_nif(&env);
+ ERTS_CHK_MBUF_SZ(c_p);
PROCESS_MAIN_CHK_LOCKS(c_p);
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
ERTS_MSACC_SET_STATE_CACHED_M_X(ERTS_MSACC_STATE_EMULATOR);
- if (env.exiting) {
- ERTS_SMP_REQ_PROC_MAIN_LOCK(c_p);
- goto do_schedule;
- }
+ ASSERT(!env.exiting);
ASSERT(!ERTS_PROC_IS_EXITING(c_p));
}
@@ -3602,13 +3611,7 @@ do { \
goto context_switch;
}
- if (ERTS_MSACC_IS_ENABLED_CACHED_X()) {
- if ((Eterm)I[-3] == am_ets) {
- ERTS_MSACC_SET_STATE_CACHED_M_X(ERTS_MSACC_STATE_ETS);
- } else {
- ERTS_MSACC_SET_STATE_CACHED_M_X(ERTS_MSACC_STATE_BIF);
- }
- }
+ ERTS_MSACC_SET_BIF_STATE_CACHED_X((Eterm)I[-3], (BifFunction)Arg(0));
c_p->current = I-3; /* In case we apply process_info/1,2 or load_nif/1 */
c_p->i = I; /* In case we apply check_process_code/2. */
@@ -3630,7 +3633,9 @@ do { \
Eterm (*bf)(Process*, Eterm*, BeamInstr*) = vbf;
ASSERT(!ERTS_PROC_IS_EXITING(c_p));
live_hf_end = c_p->mbuf;
+ ERTS_CHK_MBUF_SZ(c_p);
nif_bif_result = (*bf)(c_p, reg, I);
+ ERTS_CHK_MBUF_SZ(c_p);
ASSERT(!ERTS_PROC_IS_EXITING(c_p) ||
is_non_value(nif_bif_result));
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
@@ -5162,6 +5167,273 @@ do { \
}
}
+/*
+ * erts_dirty_process_main() is what dirty schedulers execute. Since they handle
+ * only NIF calls they do not need to be able to execute all BEAM
+ * instructions.
+ */
+void erts_dirty_process_main(ErtsSchedulerData *esdp)
+{
+#ifdef ERTS_DIRTY_SCHEDULERS
+ Process* c_p = NULL;
+ ErtsMonotonicTime start_time;
+#ifdef DEBUG
+ ERTS_DECLARE_DUMMY(Eterm pid);
+#endif
+
+ /* Pointer to X registers: x(1)..x(N); reg[0] is used when doing GC,
+ * in all other cases x0 is used.
+ */
+ register Eterm* reg REG_xregs = NULL;
+
+ /*
+ * Top of heap (next free location); grows upwards.
+ */
+ register Eterm* HTOP REG_htop = NULL;
+
+ /* Stack pointer. Grows downwards; points
+ * to last item pushed (normally a saved
+ * continuation pointer).
+ */
+ register Eterm* E REG_stop = NULL;
+
+ /*
+ * Pointer to next threaded instruction.
+ */
+ register BeamInstr *I REG_I = NULL;
+
+ ERTS_MSACC_DECLARE_CACHE_X() /* a cached value of the tsd pointer for msacc */
+
+ /*
+ * start_time always positive for dirty CPU schedulers,
+ * and negative for dirty I/O schedulers.
+ */
+
+ if (ERTS_SCHEDULER_IS_DIRTY_CPU(esdp)) {
+ start_time = erts_get_monotonic_time(NULL);
+ ASSERT(start_time >= 0);
+ }
+ else {
+ start_time = ERTS_SINT64_MIN;
+ ASSERT(start_time < 0);
+ }
+
+ goto do_dirty_schedule;
+
+ context_switch:
+ c_p->arity = I[-1];
+ c_p->current = I-3; /* Pointer to Mod, Func, Arity */
+
+ {
+ int reds_used;
+ Eterm* argp;
+ int i;
+
+ /*
+ * Make sure that there is enough room for the argument registers to be saved.
+ */
+ if (c_p->arity > c_p->max_arg_reg) {
+ /*
+ * Yes, this is an expensive operation, but you only pay it the first
+ * time you call a function with more than 6 arguments which is
+ * scheduled out. This is better than paying for 26 words of wasted
+ * space for most processes which never call functions with more than
+ * 6 arguments.
+ */
+ Uint size = c_p->arity * sizeof(c_p->arg_reg[0]);
+ if (c_p->arg_reg != c_p->def_arg_reg) {
+ c_p->arg_reg = (Eterm *) erts_realloc(ERTS_ALC_T_ARG_REG,
+ (void *) c_p->arg_reg,
+ size);
+ } else {
+ c_p->arg_reg = (Eterm *) erts_alloc(ERTS_ALC_T_ARG_REG, size);
+ }
+ c_p->max_arg_reg = c_p->arity;
+ }
+
+ /*
+ * Save the argument registers and everything else.
+ */
+
+ argp = c_p->arg_reg;
+ for (i = c_p->arity - 1; i >= 0; i--) {
+ argp[i] = reg[i];
+ }
+ SWAPOUT;
+ c_p->i = I;
+
+ do_dirty_schedule:
+
+ if (start_time < 0) {
+ /*
+ * Dirty I/O scheduler:
+ * One reduction consumed regardless of
+ * time spent in the dirty NIF.
+ */
+ reds_used = esdp->virtual_reds + 1;
+ }
+ else {
+ /*
+ * Dirty CPU scheduler:
+ * Reductions based on time consumed by
+ * the dirty NIF.
+ */
+ Sint64 treds;
+ treds = erts_time2reds(start_time,
+ erts_get_monotonic_time(esdp));
+ treds += esdp->virtual_reds;
+ reds_used = treds > INT_MAX ? INT_MAX : (int) treds;
+ }
+
+ PROCESS_MAIN_CHK_LOCKS(c_p);
+ ERTS_SMP_UNREQ_PROC_MAIN_LOCK(c_p);
+ ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
+ c_p = erts_schedule(esdp, c_p, reds_used);
+
+ if (start_time >= 0) {
+ start_time = erts_get_monotonic_time(esdp);
+ ASSERT(start_time >= 0);
+ }
+ }
+
+ ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
+#ifdef DEBUG
+ pid = c_p->common.id; /* Save for debugging purposes */
+#endif
+ ERTS_SMP_REQ_PROC_MAIN_LOCK(c_p);
+ PROCESS_MAIN_CHK_LOCKS(c_p);
+
+ ASSERT(!(c_p->flags & F_HIPE_MODE));
+ ERTS_MSACC_UPDATE_CACHE_X();
+
+ reg = esdp->x_reg_array;
+ {
+ Eterm* argp;
+ int i;
+
+ argp = c_p->arg_reg;
+ for (i = c_p->arity - 1; i >= 0; i--) {
+ reg[i] = argp[i];
+ CHECK_TERM(reg[i]);
+ }
+
+ /*
+ * We put the original reduction count in the process structure, to reduce
+ * the code size (referencing a field in a struct through a pointer stored
+ * in a register gives smaller code than referencing a global variable).
+ */
+
+ I = c_p->i;
+
+ ASSERT(BeamOp(op_call_nif) == (BeamInstr *) *I);
+
+ /*
+ * Set fcalls even though we ignore it, so we don't
+ * confuse code accessing it...
+ */
+ if (ERTS_PROC_GET_SAVED_CALLS_BUF(c_p))
+ c_p->fcalls = 0;
+ else
+ c_p->fcalls = CONTEXT_REDS;
+
+ SWAPIN;
+
+#ifdef USE_VM_PROBES
+ if (DTRACE_ENABLED(process_scheduled)) {
+ DTRACE_CHARBUF(process_buf, DTRACE_TERM_BUF_SIZE);
+ DTRACE_CHARBUF(fun_buf, DTRACE_TERM_BUF_SIZE);
+ dtrace_proc_str(c_p, process_buf);
+
+ if (ERTS_PROC_IS_EXITING(c_p)) {
+ strcpy(fun_buf, "<exiting>");
+ } else {
+ BeamInstr *fptr = find_function_from_pc(c_p->i);
+ if (fptr) {
+ dtrace_fun_decode(c_p, (Eterm)fptr[0],
+ (Eterm)fptr[1], (Uint)fptr[2],
+ NULL, fun_buf);
+ } else {
+ erts_snprintf(fun_buf, sizeof(DTRACE_CHARBUF_NAME(fun_buf)),
+ "<unknown/%p>", *I);
+ }
+ }
+
+ DTRACE2(process_scheduled, process_buf, fun_buf);
+ }
+#endif
+ }
+
+ {
+#ifdef DEBUG
+ Eterm result;
+#endif
+ Eterm arity;
+
+ {
+ /*
+ * call_nif is always first instruction in function:
+ *
+ * I[-3]: Module
+ * I[-2]: Function
+ * I[-1]: Arity
+ * I[0]: &&call_nif
+ * I[1]: Function pointer to NIF function
+ * I[2]: Pointer to erl_module_nif
+ * I[3]: Function pointer to dirty NIF
+ */
+ BifFunction vbf;
+
+ ERTS_MSACC_SET_STATE_CACHED_M_X(ERTS_MSACC_STATE_NIF);
+
+ DTRACE_NIF_ENTRY(c_p, (Eterm)I[-3], (Eterm)I[-2], (Uint)I[-1]);
+ c_p->current = I-3; /* current and vbf set to please handle_error */
+ SWAPOUT;
+ PROCESS_MAIN_CHK_LOCKS(c_p);
+ arity = I[-1];
+ ERTS_SMP_UNREQ_PROC_MAIN_LOCK(c_p);
+
+ ASSERT(!ERTS_PROC_IS_EXITING(c_p));
+ {
+ typedef Eterm NifF(struct enif_environment_t*, int argc, Eterm argv[]);
+ NifF* fp = vbf = (NifF*) I[1];
+ struct enif_environment_t env;
+ ASSERT(!c_p->scheduler_data);
+
+ erts_pre_dirty_nif(esdp, &env, c_p,
+ (struct erl_module_nif*)I[2]);
+
+#ifdef DEBUG
+ result =
+#else
+ (void)
+#endif
+ (*fp)(&env, arity, reg);
+
+ erts_post_dirty_nif(&env);
+
+ ASSERT(!is_value(result));
+ ASSERT(c_p->freason == TRAP);
+ ASSERT(!(c_p->flags & F_HIBERNATE_SCHED));
+
+ PROCESS_MAIN_CHK_LOCKS(c_p);
+ ERTS_SMP_REQ_PROC_MAIN_LOCK(c_p);
+ ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
+ ERTS_MSACC_SET_STATE_CACHED_M_X(ERTS_MSACC_STATE_EMULATOR);
+ if (env.exiting)
+ goto do_dirty_schedule;
+ ASSERT(!ERTS_PROC_IS_EXITING(c_p));
+ }
+
+ DTRACE_NIF_RETURN(c_p, (Eterm)I[-3], (Eterm)I[-2], (Uint)I[-1]);
+ ERTS_HOLE_CHECK(c_p);
+ SWAPIN;
+ I = c_p->i;
+ goto context_switch;
+ }
+ }
+#endif /* ERTS_DIRTY_SCHEDULERS */
+}
+
static BifFunction
translate_gc_bif(void* gcf)
{
@@ -6272,34 +6544,49 @@ call_fun(Process* p, /* Current process. */
* representation (the module has never been loaded),
* or the module defining the fun has been unloaded.
*/
+
module = fe->module;
- if ((modp = erts_get_module(module, code_ix)) != NULL
- && modp->curr.code_hdr != NULL) {
+
+ ERTS_SMP_READ_MEMORY_BARRIER;
+ if (fe->pend_purge_address) {
/*
- * There is a module loaded, but obviously the fun is not
- * defined in it. We must not call the error_handler
- * (or we will get into an infinite loop).
+ * The system is currently trying to purge the
+ * module containing this fun. Suspend the process
+ * and let it try again when the purge operation is
+ * done (may succeed or not).
*/
- goto badfun;
+ ep = erts_suspend_process_on_pending_purge_lambda(p);
+ ASSERT(ep);
}
+ else {
+ if ((modp = erts_get_module(module, code_ix)) != NULL
+ && modp->curr.code_hdr != NULL) {
+ /*
+ * There is a module loaded, but obviously the fun is not
+ * defined in it. We must not call the error_handler
+ * (or we will get into an infinite loop).
+ */
+ goto badfun;
+ }
- /*
- * No current code for this module. Call the error_handler module
- * to attempt loading the module.
- */
+ /*
+ * No current code for this module. Call the error_handler module
+ * to attempt loading the module.
+ */
- ep = erts_find_function(erts_proc_get_error_handler(p),
- am_undefined_lambda, 3, code_ix);
- if (ep == NULL) { /* No error handler */
- p->current = NULL;
- p->freason = EXC_UNDEF;
- return NULL;
+ ep = erts_find_function(erts_proc_get_error_handler(p),
+ am_undefined_lambda, 3, code_ix);
+ if (ep == NULL) { /* No error handler */
+ p->current = NULL;
+ p->freason = EXC_UNDEF;
+ return NULL;
+ }
}
reg[0] = module;
reg[1] = fun;
reg[2] = args;
reg[3] = NIL;
- return ep->addressv[erts_active_code_ix()];
+ return ep->addressv[code_ix];
}
}
} else if (is_export_header(hdr)) {
@@ -6754,7 +7041,11 @@ update_map_assoc(Process* p, Eterm* reg, Eterm map, BeamInstr* I)
/* The expensive case, need to build a hashmap */
if (n > MAP_SMALL_MAP_LIMIT) {
- res = erts_hashmap_from_ks_and_vs(p,flatmap_get_keys(mp),flatmap_get_values(mp),n);
+ ErtsHeapFactory factory;
+ erts_factory_proc_init(&factory, p);
+ res = erts_hashmap_from_ks_and_vs(&factory,flatmap_get_keys(mp),
+ flatmap_get_values(mp),n);
+ erts_factory_close(&factory);
}
return res;
}
diff --git a/erts/emulator/beam/beam_load.c b/erts/emulator/beam/beam_load.c
index 95489d9a63..f63addb309 100644
--- a/erts/emulator/beam/beam_load.c
+++ b/erts/emulator/beam/beam_load.c
@@ -105,7 +105,7 @@ typedef struct {
*/
typedef struct genop {
- int op; /* Opcode. */
+ unsigned int op; /* Opcode. */
int arity; /* Number of arguments. */
GenOpArg def_args[MAX_OPARGS]; /* Default buffer for arguments. */
GenOpArg* a; /* The arguments. */
@@ -283,8 +283,8 @@ typedef struct LoaderState {
byte* code_start; /* Start of code file. */
unsigned code_size; /* Size of code file. */
int specific_op; /* Specific opcode (-1 if not found). */
- int num_functions; /* Number of functions in module. */
- int num_labels; /* Number of labels. */
+ unsigned int num_functions; /* Number of functions in module. */
+ unsigned int num_labels; /* Number of labels. */
BeamCodeHeader* hdr; /* Loaded code header */
BeamInstr* codev; /* Loaded code buffer */
int codev_size; /* Size of code buffer in words. */
@@ -303,13 +303,13 @@ typedef struct LoaderState {
* Atom table.
*/
- int num_atoms; /* Number of atoms in atom table. */
+ unsigned int num_atoms; /* Number of atoms in atom table. */
Eterm* atom; /* Atom table. */
- int num_exps; /* Number of exports. */
+ unsigned int num_exps; /* Number of exports. */
ExportEntry* export; /* Pointer to export table. */
- int num_imports; /* Number of imports. */
+ unsigned int num_imports; /* Number of imports. */
ImportEntry* import; /* Import entry (translated information). */
/*
@@ -323,8 +323,8 @@ typedef struct LoaderState {
* Lambda table.
*/
- int num_lambdas; /* Number of lambdas in table. */
- int lambdas_allocated; /* Size of allocated lambda table. */
+ unsigned int num_lambdas; /* Number of lambdas in table. */
+ unsigned int lambdas_allocated; /* Size of allocated lambda table. */
Lambda* lambdas; /* Pointer to lambdas. */
Lambda def_lambdas[16]; /* Default storage for lambda table. */
char* lambda_error; /* Delayed missing 'FunT' error. */
@@ -333,8 +333,8 @@ typedef struct LoaderState {
* Literals (constant pool).
*/
- int num_literals; /* Number of literals in table. */
- int allocated_literals; /* Number of literal entries allocated. */
+ unsigned int num_literals; /* Number of literals in table. */
+ unsigned int allocated_literals; /* Number of literal entries allocated. */
Literal* literals; /* Array of literals. */
LiteralPatch* literal_patches; /* Operands that need to be patched. */
Uint total_literal_size; /* Total heap size for all literals. */
@@ -343,13 +343,13 @@ typedef struct LoaderState {
* Line table.
*/
BeamInstr* line_item; /* Line items from the BEAM file. */
- int num_line_items; /* Number of line items. */
+ unsigned int num_line_items;/* Number of line items. */
LineInstr* line_instr; /* Line instructions */
- int num_line_instrs; /* Maximum number of line instructions */
- int current_li; /* Current line instruction */
- int* func_line; /* Mapping from function to first line instr */
+ unsigned int num_line_instrs; /* Maximum number of line instructions */
+ unsigned int current_li; /* Current line instruction */
+ unsigned int* func_line; /* Mapping from function to first line instr */
Eterm* fname; /* List of file names */
- int num_fnames; /* Number of filenames in fname table */
+ unsigned int num_fnames; /* Number of filenames in fname table */
int loc_size; /* Size of location info in bytes (2/4) */
} LoaderState;
@@ -663,7 +663,7 @@ erts_prepare_loading(Binary* magic, Process *c_p, Eterm group_leader,
stp->hdr->compile_ptr = NULL;
stp->hdr->compile_size = 0;
stp->hdr->compile_size_on_heap = 0;
- stp->hdr->literals_start = NULL;
+ stp->hdr->literal_area = NULL;
stp->hdr->md5_ptr = NULL;
/*
@@ -1005,8 +1005,9 @@ loader_state_dtor(Binary* magic)
stp->bin = 0;
}
if (stp->hdr != 0) {
- if (stp->hdr->literals_start) {
- erts_free(ERTS_ALC_T_LITERAL, stp->hdr->literals_start);
+ if (stp->hdr->literal_area) {
+ erts_release_literal_area(stp->hdr->literal_area);
+ stp->hdr->literal_area = NULL;
}
erts_free(ERTS_ALC_T_CODE, stp->hdr);
stp->hdr = 0;
@@ -1330,7 +1331,7 @@ verify_chunks(LoaderState* stp)
static int
load_atom_table(LoaderState* stp)
{
- int i;
+ unsigned int i;
GetInt(stp, 4, stp->num_atoms);
stp->num_atoms++;
@@ -1375,13 +1376,13 @@ load_atom_table(LoaderState* stp)
static int
load_import_table(LoaderState* stp)
{
- int i;
+ unsigned int i;
GetInt(stp, 4, stp->num_imports);
stp->import = erts_alloc(ERTS_ALC_T_PREPARED_CODE,
stp->num_imports * sizeof(ImportEntry));
for (i = 0; i < stp->num_imports; i++) {
- int n;
+ unsigned int n;
Eterm mod;
Eterm func;
Uint arity;
@@ -1389,17 +1390,17 @@ load_import_table(LoaderState* stp)
GetInt(stp, 4, n);
if (n >= stp->num_atoms) {
- LoadError2(stp, "import entry %d: invalid atom number %d", i, n);
+ LoadError2(stp, "import entry %u: invalid atom number %u", i, n);
}
mod = stp->import[i].module = stp->atom[n];
GetInt(stp, 4, n);
if (n >= stp->num_atoms) {
- LoadError2(stp, "import entry %d: invalid atom number %d", i, n);
+ LoadError2(stp, "import entry %u: invalid atom number %u", i, n);
}
func = stp->import[i].function = stp->atom[n];
GetInt(stp, 4, arity);
if (arity > MAX_REG) {
- LoadError2(stp, "import entry %d: invalid arity %d", i, arity);
+ LoadError2(stp, "import entry %u: invalid arity %d", i, arity);
}
stp->import[i].arity = arity;
stp->import[i].patches = 0;
@@ -1427,12 +1428,12 @@ load_import_table(LoaderState* stp)
static int
read_export_table(LoaderState* stp)
{
- int i;
+ unsigned int i;
BeamInstr* address;
GetInt(stp, 4, stp->num_exps);
if (stp->num_exps > stp->num_functions) {
- LoadError2(stp, "%d functions exported; only %d functions defined",
+ LoadError2(stp, "%u functions exported; only %u functions defined",
stp->num_exps, stp->num_functions);
}
stp->export
@@ -1450,16 +1451,16 @@ read_export_table(LoaderState* stp)
stp->export[i].function = func;
GetInt(stp, 4, arity);
if (arity > MAX_REG) {
- LoadError2(stp, "export table entry %d: absurdly high arity %d", i, arity);
+ LoadError2(stp, "export table entry %u: absurdly high arity %u", i, arity);
}
stp->export[i].arity = arity;
GetInt(stp, 4, n);
if (n >= stp->num_labels) {
- LoadError3(stp, "export table entry %d: invalid label %d (highest defined label is %d)", i, n, stp->num_labels);
+ LoadError3(stp, "export table entry %u: invalid label %u (highest defined label is %u)", i, n, stp->num_labels);
}
value = stp->labels[n].value;
if (value == 0) {
- LoadError2(stp, "export table entry %d: label %d not resolved", i, n);
+ LoadError2(stp, "export table entry %u: label %u not resolved", i, n);
}
stp->export[i].address = address = stp->codev + value;
@@ -1520,7 +1521,7 @@ is_bif(Eterm mod, Eterm func, unsigned arity)
static int
read_lambda_table(LoaderState* stp)
{
- int i;
+ unsigned int i;
GetInt(stp, 4, stp->num_lambdas);
if (stp->num_lambdas > stp->lambdas_allocated) {
@@ -1540,12 +1541,12 @@ read_lambda_table(LoaderState* stp)
GetAtom(stp, n, stp->lambdas[i].function);
GetInt(stp, 4, arity);
if (arity > MAX_REG) {
- LoadError2(stp, "lambda entry %d: absurdly high arity %d", i, arity);
+ LoadError2(stp, "lambda entry %u: absurdly high arity %u", i, arity);
}
stp->lambdas[i].arity = arity;
GetInt(stp, 4, n);
if (n >= stp->num_labels) {
- LoadError3(stp, "lambda entry %d: invalid label %d (highest defined label is %d)",
+ LoadError3(stp, "lambda entry %u: invalid label %u (highest defined label is %u)",
i, n, stp->num_labels);
}
stp->lambdas[i].label = n;
@@ -1566,7 +1567,7 @@ read_lambda_table(LoaderState* stp)
static int
read_literal_table(LoaderState* stp)
{
- int i;
+ unsigned int i;
uLongf uncompressed_sz;
byte* uncompressed = 0;
@@ -1588,7 +1589,7 @@ read_literal_table(LoaderState* stp)
}
for (i = 0; i < stp->num_literals; i++) {
- int sz;
+ Uint sz;
Sint heap_size;
byte* p;
Eterm val;
@@ -1597,7 +1598,7 @@ read_literal_table(LoaderState* stp)
GetInt(stp, 4, sz); /* Size of external term format. */
GetString(stp, p, sz);
if ((heap_size = erts_decode_ext_size(p, sz)) < 0) {
- LoadError1(stp, "literal %d: bad external format", i);
+ LoadError1(stp, "literal %u: bad external format", i);
}
if (heap_size > 0) {
@@ -1607,7 +1608,7 @@ read_literal_table(LoaderState* stp)
val = erts_decode_ext(&factory, &p, 0);
if (is_non_value(val)) {
- LoadError1(stp, "literal %d: bad external format", i);
+ LoadError1(stp, "literal %u: bad external format", i);
}
erts_factory_close(&factory);
stp->literals[i].heap_frags = factory.heap_frags;
@@ -1617,7 +1618,7 @@ read_literal_table(LoaderState* stp)
erts_factory_dummy_init(&factory);
val = erts_decode_ext(&factory, &p, 0);
if (is_non_value(val)) {
- LoadError1(stp, "literal %d: bad external format", i);
+ LoadError1(stp, "literal %u: bad external format", i);
}
ASSERT(is_immed(val));
stp->literals[i].heap_frags = NULL;
@@ -1640,9 +1641,9 @@ read_line_table(LoaderState* stp)
{
unsigned version;
ERTS_DECLARE_DUMMY(unsigned flags);
- int num_line_items;
+ unsigned int num_line_items;
BeamInstr* lp;
- int i;
+ unsigned int i;
BeamInstr fname_index;
BeamInstr tag;
@@ -1721,7 +1722,7 @@ read_line_table(LoaderState* stp)
}
} else if (tag == TAG_a) {
if (val > stp->num_fnames) {
- LoadError2(stp, "file index overflow (%d/%d)",
+ LoadError2(stp, "file index overflow (%u/%u)",
val, stp->num_fnames);
}
fname_index = val;
@@ -1757,9 +1758,9 @@ read_line_table(LoaderState* stp)
stp->num_line_instrs *
sizeof(LineInstr));
stp->current_li = 0;
- stp->func_line = (int *) erts_alloc(ERTS_ALC_T_PREPARED_CODE,
- stp->num_functions *
- sizeof(int));
+ stp->func_line = (unsigned int *) erts_alloc(ERTS_ALC_T_PREPARED_CODE,
+ stp->num_functions *
+ sizeof(int));
return 1;
@@ -1783,6 +1784,10 @@ read_code_header(LoaderState* stp)
*/
GetInt(stp, 4, head_size);
+ if (head_size > stp->file_left) {
+ LoadError2(stp, "invalid code header size %u; bytes left %u",
+ head_size, stp->file_left);
+ }
stp->code_start = stp->file_p + head_size;
stp->code_size = stp->file_left - head_size;
stp->file_left = head_size;
@@ -1887,7 +1892,7 @@ load_code(LoaderState* stp)
ci = stp->ci;
for (;;) {
- int new_op;
+ unsigned int new_op;
GenOp* tmp_op;
ASSERT(ci <= codev_size);
@@ -1895,10 +1900,10 @@ load_code(LoaderState* stp)
get_next_instr:
GetByte(stp, new_op);
if (new_op >= NUM_GENERIC_OPS) {
- LoadError1(stp, "invalid opcode %d", new_op);
+ LoadError1(stp, "invalid opcode %u", new_op);
}
if (gen_opc[new_op].name[0] == '\0') {
- LoadError1(stp, "invalid opcode %d", new_op);
+ LoadError1(stp, "invalid opcode %u", new_op);
}
@@ -2368,7 +2373,7 @@ load_code(LoaderState* stp)
VerifyTag(stp, tag, TAG_u);
last_label = tmp_op->a[arg].val;
if (!(0 < last_label && last_label < stp->num_labels)) {
- LoadError2(stp, "invalid label num %d (0 < label < %d)",
+ LoadError2(stp, "invalid label num %u (0 < label < %u)",
tmp_op->a[arg].val, stp->num_labels);
}
if (stp->labels[last_label].value != 0) {
@@ -2512,7 +2517,7 @@ load_code(LoaderState* stp)
{
Sint offset;
if (function_number >= stp->num_functions) {
- LoadError1(stp, "too many functions in module (header said %d)",
+ LoadError1(stp, "too many functions in module (header said %u)",
stp->num_functions);
}
@@ -2591,14 +2596,14 @@ load_code(LoaderState* stp)
if (stp->line_item) {
BeamInstr item = code[ci-1];
BeamInstr loc;
- int li;
+ unsigned int li;
if (item >= stp->num_line_items) {
- LoadError2(stp, "line instruction index overflow (%d/%d)",
+ LoadError2(stp, "line instruction index overflow (%u/%u)",
item, stp->num_line_items);
}
li = stp->current_li;
if (li >= stp->num_line_instrs) {
- LoadError2(stp, "line instruction table overflow (%d/%d)",
+ LoadError2(stp, "line instruction table overflow (%u/%u)",
li, stp->num_line_instrs);
}
loc = stp->line_item[item];
@@ -2630,6 +2635,10 @@ load_code(LoaderState* stp)
* End of code found.
*/
case op_int_code_end:
+ if (function_number != stp->num_functions) {
+ LoadError2(stp, "too few functions (%u) in module (header said %u)",
+ function_number, stp->num_functions);
+ }
stp->codev_size = codev_size;
stp->ci = ci;
stp->function = THE_NON_VALUE;
@@ -4424,6 +4433,7 @@ gen_get_map_elements(LoaderState* stp, GenOpArg Fail, GenOpArg Src,
int good_hash;
#endif
+ ERTS_UNDEF(hx, 0);
ASSERT(Size.type == TAG_u);
NEW_GENOP(stp, op);
@@ -4559,13 +4569,16 @@ freeze_code(LoaderState* stp)
Eterm* ptr;
LiteralPatch* lp;
ErlOffHeap code_off_heap;
+ ErtsLiteralArea *literal_area;
+ Uint lit_asize;
ERTS_INIT_OFF_HEAP(&code_off_heap);
- ptr = (Eterm*)erts_alloc(ERTS_ALC_T_LITERAL,
- stp->total_literal_size*sizeof(Eterm));
- code_hdr->literals_start = ptr;
- code_hdr->literals_end = ptr + stp->total_literal_size;
+ lit_asize = ERTS_LITERAL_AREA_ALLOC_SIZE(stp->total_literal_size);
+ literal_area = erts_alloc(ERTS_ALC_T_LITERAL, lit_asize);
+ ptr = &literal_area->start[0];
+ literal_area->end = ptr + stp->total_literal_size;
+
for (i = 0; i < stp->num_literals; i++) {
if (is_not_immed(stp->literals[i].term)) {
erts_move_multi_frags(&ptr, &code_off_heap,
@@ -4575,7 +4588,7 @@ freeze_code(LoaderState* stp)
ptr_val(stp->literals[i].term)));
}
}
- code_hdr->literals_off_heap = code_off_heap.first;
+ literal_area->off_heap = code_off_heap.first;
lp = stp->literal_patches;
while (lp != 0) {
BeamInstr* op_ptr;
@@ -4586,6 +4599,7 @@ freeze_code(LoaderState* stp)
op_ptr[0] = lit->term;
lp = lp->next;
}
+ code_hdr->literal_area = literal_area;
}
CHKBLK(ERTS_ALC_T_CODE,code);
@@ -4597,8 +4611,8 @@ freeze_code(LoaderState* stp)
str_table = (byte *) (codev + stp->ci);
} else {
BeamCodeLineTab* const line_tab = (BeamCodeLineTab *) (codev+stp->ci);
- const int ftab_size = stp->num_functions;
- const int num_instrs = stp->current_li;
+ const unsigned int ftab_size = stp->num_functions;
+ const unsigned int num_instrs = stp->current_li;
const BeamInstr** const line_items =
(const BeamInstr**) &line_tab->func_tab[ftab_size + 1];
@@ -4758,7 +4772,7 @@ freeze_code(LoaderState* stp)
static void
final_touch(LoaderState* stp, struct erl_module_instance* inst_p)
{
- int i;
+ unsigned int i;
int on_load = stp->on_load;
unsigned catches;
Uint index;
@@ -5430,7 +5444,7 @@ new_genop(LoaderState* stp)
static int
new_label(LoaderState* stp)
{
- int num = stp->num_labels;
+ unsigned int num = stp->num_labels;
stp->num_labels++;
stp->labels = (Label *) erts_realloc(ERTS_ALC_T_PREPARED_CODE,
@@ -5641,6 +5655,28 @@ has_native(BeamCodeHeader *code_hdr)
return result;
}
+void
+erts_release_literal_area(ErtsLiteralArea* literal_area)
+{
+ struct erl_off_heap_header* oh;
+
+ if (!literal_area)
+ return;
+
+ oh = literal_area->off_heap;
+
+ while (oh) {
+ Binary* bptr;
+ ASSERT(thing_subtag(oh->thing_word) == REFC_BINARY_SUBTAG);
+ bptr = ((ProcBin*)oh)->val;
+ if (erts_refc_dectest(&bptr->refc, 0) == 0) {
+ erts_bin_free(bptr);
+ }
+ oh = oh->next;
+ }
+ erts_free(ERTS_ALC_T_LITERAL, literal_area);
+}
+
int
erts_is_module_native(BeamCodeHeader* code_hdr)
{
@@ -6028,11 +6064,11 @@ stub_copy_info(LoaderState* stp,
static int
stub_read_export_table(LoaderState* stp)
{
- int i;
+ unsigned int i;
GetInt(stp, 4, stp->num_exps);
if (stp->num_exps > stp->num_functions) {
- LoadError2(stp, "%d functions exported; only %d functions defined",
+ LoadError2(stp, "%u functions exported; only %u functions defined",
stp->num_exps, stp->num_functions);
}
stp->export
@@ -6046,7 +6082,7 @@ stub_read_export_table(LoaderState* stp)
GetAtom(stp, n, stp->export[i].function);
GetInt(stp, 4, n);
if (n > MAX_REG) {
- LoadError2(stp, "export table entry %d: absurdly high arity %d", i, n);
+ LoadError2(stp, "export table entry %u: absurdly high arity %u", i, n);
}
stp->export[i].arity = n;
GetInt(stp, 4, n); /* Ignore label */
@@ -6060,8 +6096,8 @@ stub_read_export_table(LoaderState* stp)
static void
stub_final_touch(LoaderState* stp, BeamInstr* fp)
{
- int i;
- int n = stp->num_exps;
+ unsigned int i;
+ unsigned int n = stp->num_exps;
Eterm mod = fp[2];
Eterm function = fp[3];
int arity = fp[4];
@@ -6372,9 +6408,7 @@ erts_make_stub_module(Process* p, Eterm Mod, Eterm Beam, Eterm Info)
code_hdr->compile_ptr = NULL;
code_hdr->compile_size = 0;
code_hdr->compile_size_on_heap = 0;
- code_hdr->literals_start = NULL;
- code_hdr->literals_end = NULL;
- code_hdr->literals_off_heap = 0;
+ code_hdr->literal_area = NULL;
code_hdr->on_load_function_ptr = NULL;
code_hdr->line_table = NULL;
code_hdr->md5_ptr = NULL;
diff --git a/erts/emulator/beam/beam_load.h b/erts/emulator/beam/beam_load.h
index fd2dd97fee..1200bb9c6f 100644
--- a/erts/emulator/beam/beam_load.h
+++ b/erts/emulator/beam/beam_load.h
@@ -50,6 +50,7 @@ extern BeamInstr* em_call_error_handler;
extern BeamInstr* em_apply_bif;
extern BeamInstr* em_call_nif;
+struct ErtsLiteralArea_;
/*
* The following variables keep a sorted list of address ranges for
@@ -89,9 +90,7 @@ typedef struct beam_code_header {
/*
* Literal area (constant pool).
*/
- Eterm* literals_start;
- Eterm* literals_end;
- struct erl_off_heap_header* literals_off_heap;
+ struct ErtsLiteralArea_ *literal_area;
/*
* Pointer to the on_load function (or NULL if none).
@@ -120,7 +119,12 @@ typedef struct beam_code_header {
}BeamCodeHeader;
+void erts_release_literal_area(struct ErtsLiteralArea_* literal_area);
int erts_is_module_native(BeamCodeHeader* code);
+void erts_beam_bif_load_init(void);
+struct erl_fun_entry;
+void erts_purge_state_add_fun(struct erl_fun_entry *fe);
+Export *erts_suspend_process_on_pending_purge_lambda(Process *c_p);
/*
* Layout of the line table.
diff --git a/erts/emulator/beam/benchmark.c b/erts/emulator/beam/benchmark.c
deleted file mode 100644
index c8409784ef..0000000000
--- a/erts/emulator/beam/benchmark.c
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * %CopyrightBegin%
- *
- * Copyright Ericsson AB 2002-2016. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * %CopyrightEnd%
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "sys.h"
-#include "global.h"
-#include "benchmark.h"
-
-#ifdef BM_COUNTERS
-unsigned long long processes_busy;
-unsigned long long processes_spawned;
-unsigned long long messages_sent;
-unsigned long long messages_copied;
-unsigned long long messages_ego;
-unsigned long long minor_gc;
-unsigned long long major_gc;
-#endif /* BM_COUNTERS */
-
-#ifdef BM_TIMERS
-
-/* assuming Solaris */
-#include <time.h>
-BM_TIMER_T system_clock;
-
-unsigned long local_pause_times[MAX_PAUSE_TIME];
-unsigned long pause_times[MAX_PAUSE_TIME];
-unsigned long pause_times_old[MAX_PAUSE_TIME];
-
-BM_TIMER_T mmu;
-BM_TIMER_T mmu_counter;
-
-BM_NEW_TIMER(timer);
-BM_NEW_TIMER(system);
-BM_NEW_TIMER(gc);
-BM_NEW_TIMER(minor_gc);
-BM_NEW_TIMER(major_gc);
-BM_NEW_TIMER(minor_global_gc);
-BM_NEW_TIMER(major_global_gc);
-BM_NEW_TIMER(send);
-BM_NEW_TIMER(copy);
-BM_NEW_TIMER(size);
-BM_NEW_TIMER(max_minor);
-BM_NEW_TIMER(max_major);
-BM_NEW_TIMER(max_global_minor);
-BM_NEW_TIMER(max_global_major);
-BM_NEW_TIMER(misc0);
-BM_NEW_TIMER(misc1);
-BM_NEW_TIMER(misc2);
-#endif /* BM_TIMERS */
-
-#ifdef BM_HEAP_SIZES
-unsigned long long max_used_heap;
-unsigned long long max_allocated_heap;
-unsigned long long max_used_global_heap;
-unsigned long long max_allocated_global_heap;
-#endif /* BM_HEAP_SIZES */
-
-#ifdef BM_MESSAGE_SIZES
-unsigned long long words_sent;
-unsigned long long words_copied;
-unsigned long long words_prealloc;
-unsigned long long message_sizes[1000];
-#endif /* BM_MESSAGE_SIZES */
-
-/*****
- * The following functions have to be defined, but they only have contents
- * if certain keywords are defined.
- */
-
-void init_benchmarking()
-{
-#ifdef BM_TIMERS
- int i;
- for (i = 0; i < 1000; i++)
- {
- BM_START_TIMER(system);
- BM_STOP_TIMER(system);
- }
- timer_time = system_time / 1000;
-
- for (i = 0; i < MAX_PAUSE_TIME; i++) {
- local_pause_times[i] = 0;
- pause_times[i] = 0;
- pause_times_old[i] = 0;
- }
-
- mmu = 0;
- mmu_counter = 0;
-
- BM_MMU_INIT();
-#endif /* BM_TIMERS */
-
-#ifdef BM_COUNTERS
- processes_busy = 0;
- processes_spawned = 0;
- messages_sent = 0;
- messages_copied = 0;
- messages_ego = 0;
- minor_gc = 0;
- major_gc = 0;
-#endif /* BM_COUNTERS */
-
-#ifdef BM_HEAP_SIZES
- max_used_heap = 0;
- max_allocated_heap = 0;
- max_used_global_heap = 0;
- max_allocated_global_heap = 0;
-#endif /* BM_HEAP_SIZES */
-
-#ifdef BM_MESSAGE_SIZES
- words_sent = 0;
- words_copied = 0;
- words_prealloc = 0;
- {
- int i;
- for (i = 0; i < 1000; i++)
- message_sizes[i] = 0;
- }
-#endif /* BM_MESSAGE_SIZES */
-}
-
-void save_statistics()
-{
-#ifdef BM_STATISTICS
- FILE *file = fopen(BM_STATISTICS_FILE,"a");
- long i = 0;
-
- if (file)
- {
- erts_fprintf(file,"-------------------------------------------------------------------------\n");
- erts_fprintf(file,"The counters are reset at system start and are sums over the entire node.\n");
- erts_fprintf(file,"You may reset them manually using the BIFs in the module hipe_bifs.\n");
- erts_fprintf(file,"All times are given in milliseconds.\n");
- erts_fprintf(file,"-------------------------------------------------------------------------\n");
-
- erts_fprintf(file,"Node: %T\n",erts_this_node->sysname);
-
-#ifdef BM_COUNTERS
- erts_fprintf(file,"Number of processes spawned: %lld\n",processes_spawned);
- erts_fprintf(file,"Number of local minor GCs: %lld\n",minor_gc);
- erts_fprintf(file,"Number of local major GCs: %lld\n",major_gc);
- erts_fprintf(file,"Number of messages sent: %lld\n",messages_sent);
- erts_fprintf(file,"Number of messages copied: %lld\n",messages_copied);
- erts_fprintf(file,"Number of messages sent to self: %lld\n",messages_ego);
-#endif /* BM_COUNTERS */
-
-#ifdef BM_MESSAGE_SIZES
- erts_fprintf(file,"Number of words sent: %lld\n",words_sent);
- erts_fprintf(file,"Number of words copied: %lld\n",words_copied);
- erts_fprintf(file,"Number of words preallocated: %lld\n",words_prealloc);
-#endif /* BM_MESSAGE_SIZES */
-
-#ifdef BM_HEAP_SIZES
- erts_fprintf(file,"Biggest local heap used (in words): %lld\n",max_used_heap);
- erts_fprintf(file,"Biggest local heap allocated (in words): %lld\n",max_allocated_heap);
- erts_fprintf(file,"Biggest global heap used (in words): %lld\n",max_used_global_heap);
- erts_fprintf(file,"Biggest global heap allocated (in words): %lld\n",max_allocated_global_heap);
-#endif /* BM_HEAP_SIZES */
-
-#ifdef BM_TIMERS
- erts_fprintf(file,"--- The total active system time is the sum of all times below ---\n");
- BM_TIME_PRINTER("Mutator time",system_time);
- BM_TIME_PRINTER("Time spent in send (excluding size & copy)",send_time);
- BM_TIME_PRINTER("Time spent in size",size_time);
- BM_TIME_PRINTER("Time spent in copy",copy_time);
- BM_TIME_PRINTER("Time spent in local minor GC",minor_gc_time);
- BM_TIME_PRINTER("Time spent in local major GC",major_gc_time);
- BM_TIME_PRINTER("Time spent in global minor GC",minor_global_gc_time);
- BM_TIME_PRINTER("Time spent in global major GC",major_global_gc_time);
- erts_fprintf(file,"---\n");
- BM_TIME_PRINTER("Maximum time spent in one separate local minor GC",max_minor_time);
- BM_TIME_PRINTER("Maximum time spent in one separate local major GC",max_major_time);
- BM_TIME_PRINTER("Maximum time spent in one separate global minor GC",max_global_minor_time);
- BM_TIME_PRINTER("Maximum time spent in one separate global major GC",max_global_major_time);
-#endif /* BM_TIMERS */
-
-#if 0
- /* Save a log file for import into excel */
-
- long long total_time, n;
- long left, right, mid;
-
-#ifdef BM_COUNTERS
- erts_fprintf(file,"Spawns\tLocalGC\tMAGC\tMessages\tMutator_t\tLocalGC_t\tMAGC_t\tLocMaxP\tLocMeanP\tLocGeoMP\tMAMaxP\tMAMeanP\tMAGeoMP\t\tCMAGC\tCMAGC_t\n");
- erts_fprintf(file,"%lld\t%lld\t%lld\t%lld\t",
- processes_spawned,
- minor_garbage_cols + major_garbage_cols,
- minor_global_garbage_cols + major_global_garbage_cols,
- messages_sent);
-#endif /* BM_COUNTERS */
-
-#ifdef BM_TIMERS
- erts_fprintf(file,"%lld\t%lld\t%lld\t",
- (long long)(system_time + send_time + size_time + copy_time),
- (long long)(minor_gc_time + major_gc_time),
- (long long)(minor_global_gc_time + major_global_gc_time));
-
- total_time = 0; n = 0;
- left = 0; right = 0; mid = 0;
- for (i = 0; i < MAX_PAUSE_TIME; i++) {
- total_time += local_pause_times[i] * i;
- n += local_pause_times[i];
- if (i > mid)
- right += local_pause_times[i];
- while(right > left) {
- left += local_pause_times[mid++];
- right -= local_pause_times[mid];
- }
- }
- erts_fprintf(file,"%lld\t%lld\t%ld\t",
- (long long)((max_minor_time > max_major_time ?
- max_minor_time :
- max_major_time)*1000),
- total_time / n,
- mid);
-
- total_time = 0; n = 0;
- left = 0; right = 0; mid = 0;
- for (i = 0; i < MAX_PAUSE_TIME; i++) {
- if (pause_times[i] > 0) {
- total_time += pause_times[i] * i;
- n += pause_times[i];
- if (i > mid)
- right += pause_times[i];
- while(right > left) {
- left += pause_times[mid++];
- right -= pause_times[mid];
- }
- }
- }
- erts_fprintf(file,"%lld\t%lld\t%ld\t",
- (long long)((max_global_minor_time > max_global_major_time ?
- max_global_minor_time :
- max_global_major_time)*1000),
- (n > 0 ? total_time / n : 0),
- mid);
-
- erts_fprintf(file,"\t%lld\t%lld\n",n,total_time);
-
- erts_fprintf(file,"\nMinor:\n");
- for (i = 0; i < MAX_PAUSE_TIME; i++) {
- if (i < 1000 || pause_times[i] > 0) {
- erts_fprintf(file,"%d\t%ld\n",i,pause_times[i]);
- }
- }
-
- fprintf(file,"Major:\n");
- for (i = 0; i < MAX_PAUSE_TIME; i++) {
- if (pause_times_old[i] > 0) {
- fprintf(file,"%d\t%ld\n",i,pause_times_old[i]);
- }
- }
-#endif /* BM_TIMERS */
-
-#ifdef BM_TIMERS
- total_time = 0; n = 0;
- left = 0; right = 0; mid = 0;
- fprintf(file,"\nLocal:\n");
- for (i = 0; i < MAX_PAUSE_TIME; i++) {
- if (local_pause_times[i] > 0) {
- erts_fprintf(file,"%d\t%ld\n",i,local_pause_times[i]);
- total_time += local_pause_times[i] * i;
- n += local_pause_times[i];
- if (i > mid)
- right += local_pause_times[i];
- while(right > left) {
- left += local_pause_times[mid++];
- right -= local_pause_times[mid];
- }
- }
- }
- erts_fprintf(file,"Mid: %ld Mean: %ld\n",(long)mid,
- (long)(n > 0 ? total_time / n : 0));
-#endif
-#endif /* 0 */
- fclose(file);
- }
- else
- fprintf(stderr,"Sorry... Can not write to %s!\n\r",BM_STATISTICS_FILE);
-#endif /* BM_STATISTICS */
-}
diff --git a/erts/emulator/beam/benchmark.h b/erts/emulator/beam/benchmark.h
deleted file mode 100644
index 0272896f4f..0000000000
--- a/erts/emulator/beam/benchmark.h
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * %CopyrightBegin%
- *
- * Copyright Ericsson AB 2002-2016. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * %CopyrightEnd%
- */
-
-#ifndef __BENCHMARK_H__
-#define __BENCHMARK_H__
-
-/* The define __BENCHMARK__ is the master switch to turn on and off
- * benchmarking. This will enable the benchmark-BIFs in hipe_bif1.c.
- * Documentation for the BIFs is in hipe_bif1.c, and that is where you
- * will find the information about how to accually get some data out
- * from these timers and counters.
- */
-/* #define __BENCHMARK__ */
-
-#ifdef __BENCHMARK__
-/*
- * The defines below enables different parts of the benchmaring.
- * Counters and timers that are disabled, always report zero in
- * the BIFs.
- */
-
-/* BM_TIMERS keeps track of the time spent in diferent parts of the
- * system. It only measures accual active time, not time spent in idle
- * mode. Currently, the Solaris hrtime_t will be used.
- * To add new timers look below.
- */
-#define BM_TIMERS
-
-/* BM_COUNTERS count all kinds of events that occurs in the system.
- * Among other things it counts the number of messages, then number of
- * garbage collections, the number of processes spawned etc.
- * To add new counters look below.
- */
-#define BM_COUNTERS
-
-/* BM_MESSAGE_SIZES keeps a log of the size of all messages sent in
- * the system. This introduce an overhead in time for the shared heap
- * system since all message sizes have to be calculated at send.
- */
-/* #define BM_MESSAGE_SIZES */
-
-/* BM_HEAP_SIZES goes through all processes at garbage collection time
- * to sum their allocated and used heap sizes. In anything else than a
- * shared heap system, this will cost.
- */
-/* #define BM_HEAP_SIZES */
-
-/* BM_STATISTICS saves an entry in the file BM_STATISTICS_FILE. This
- * is done for each erlang node at exit time.
- */
-/* #define BM_STATISTICS */
-
-#endif /* __BENCHMARK__ */
-
-
-#ifdef BM_STATISTICS
-# define BM_STATISTICS_FILE "/tmp/erlang_statistics.joppe.log"
-#endif /* BM_STATISTICS */
-
-
-/************ There are no more settings below this line *************/
-
-/*
- * Maintenance and how to add new stuff is documented by the code
- * below ;-)
- */
-
-#ifdef BM_COUNTERS
-/*********************************************************************
- * To add new counters:
- *
- * Add the variable here AND in benchmark.c. Use the macro
- * BM_COUNT(var) in the code where you want to increase it.
- *
- */
-extern unsigned long long processes_busy;
-extern unsigned long long processes_spawned;
-extern unsigned long long messages_sent;
-extern unsigned long long messages_copied;
-extern unsigned long long messages_ego;
-extern unsigned long long minor_gc;
-extern unsigned long long major_gc;
-
-#define BM_COUNT(var) (var)++;
-
-#define BM_EGO_COUNT(send,rec) { \
- if ((send) == (rec)) \
- BM_COUNT(messages_ego); }
-
-#define BM_LAZY_COPY_START long long gcs = minor_global_gc + major_global_gc;
-#define BM_LAZY_COPY_STOP { gcs = (minor_global_gc + major_global_gc) - gcs; \
- if (gcs > gc_in_copy) gc_in_copy = gcs; }
-
-#else /* !BM_COUNTERS */
-# define BM_COUNT(var)
-# define BM_EGO_COUNT(send,rec)
-# define BM_LAZY_COPY_START
-# define BM_LAZY_COPY_STOP
-#endif /* BM_COUNTERS */
-
-
-#ifdef BM_TIMERS
-/*********************************************************************
- * To add new timers:
- *
- * Add the variable below using the form extern BM_TIMER_T blah_time.
- * Also add them in benchmark.c using the macro NEW_TIMER(blah). Use
- * the macro BM_SWAP_TIMER(from,blah) ... BM_SWAP_TIMER(blah,to) to
- * start and stop the new timer. Note, that you have to know what
- * timer is running at the place where you want to insert your new
- * timer to be able to stop and start (from,to) it.
- *
- * You can use the macros BM_STOP_TIMER(blah) and BM_START_TIMER(blah)
- * around code that should not be timed at all. As above, you have to
- * know what timer to start and stop. The system timer is running at
- * most places in the emulator. Only the garbage collector and the
- * message sending has its own timers at the moment.
- *
- * The timer_time used when stopping timers is the time it takes to
- * start and stop the timers, calculated in init_benchmarking(). If it
- * is not there, the time it takes to do this will accually be
- * substantial compared to some small times in the system we want to
- * meassure (send time in shared heap for instance).
- */
-
-/* (Assuming Solaris) */
-
-#define BM_TIMER_T ErtsMonotonicTime
-#define BM_START_TIMER(t) system_clock = ERTS_MONOTONIC_TO_NSEC(erts_os_monotonic_time())
-#define BM_STOP_TIMER(t) do { \
- BM_TIMER_T tmp = (ERTS_MONOTONIC_TO_NSEC(erts_os_monotonic_time()) - system_clock) - timer_time; \
- t##_time += (tmp > 0 ? tmp : 0); \
-} while(0)
-
-#define BM_TIME_PRINTER(str,time) do { \
- int min,sec,milli,micro; \
- BM_TIMER_T tmp; \
- tmp = (time) / 1000; \
- micro = tmp % 1000; \
- tmp /= 1000; \
- milli = tmp % 1000; \
- tmp /= 1000; \
- sec = tmp % 60; \
- min = tmp / 60; \
- erts_fprintf(file,str": %d:%02d.%03d %03d\n",min,sec,milli,micro); \
-} while(0)
-
-extern BM_TIMER_T system_clock;
-
-extern BM_TIMER_T timer_time;
-extern BM_TIMER_T system_time;
-extern BM_TIMER_T gc_time;
-extern BM_TIMER_T minor_gc_time;
-extern BM_TIMER_T major_gc_time;
-extern BM_TIMER_T minor_global_gc_time;
-extern BM_TIMER_T major_global_gc_time;
-extern BM_TIMER_T send_time;
-extern BM_TIMER_T copy_time;
-extern BM_TIMER_T size_time;
-extern BM_TIMER_T max_minor_time;
-extern BM_TIMER_T max_major_time;
-extern BM_TIMER_T max_global_minor_time;
-extern BM_TIMER_T max_global_major_time;
-extern BM_TIMER_T misc0_time;
-extern BM_TIMER_T misc1_time;
-extern BM_TIMER_T misc2_time;
-
-#define MAX_PAUSE_TIME 500000
-extern unsigned long local_pause_times[MAX_PAUSE_TIME];
-extern unsigned long pause_times[MAX_PAUSE_TIME];
-extern unsigned long pause_times_old[MAX_PAUSE_TIME];
-
-#define MMU_INTERVAL 5 /* milli seconds */
-extern BM_TIMER_T mmu_counter;
-extern BM_TIMER_T mmu;
-
-#define BM_NEW_TIMER(t) BM_TIMER_T t##_time = 0;
-#define BM_RESET_TIMER(t) t##_time = 0;
-#define BM_SWAP_TIMER(t1,t2) do { BM_STOP_TIMER(t1); BM_START_TIMER(t2); } while(0)
-#define BM_MMU_INIT() do { \
- BM_TIMER_T gc = gc_time; \
- while (gc > 0) { \
- if (gc > MMU_INTERVAL) { \
- gc -= MMU_INTERVAL - mmu_counter; \
- erts_printf("%d\n",(int)((mmu / MMU_INTERVAL) * 100)); \
- mmu_counter = 0; mmu = 0; \
- } else { \
- mmu_counter += gc; \
- if (mmu_counter >= MMU_INTERVAL) { \
- mmu_counter -= MMU_INTERVAL; \
- erts_printf("%d\n",(int)((mmu / MMU_INTERVAL) * 100)); \
- mmu = 0; \
- } \
- gc = 0; \
- } \
- } \
- BM_RESET_TIMER(system); \
- BM_RESET_TIMER(send); \
- BM_RESET_TIMER(copy); \
- BM_RESET_TIMER(size); \
-} while(0)
-
-#define BM_MMU_READ() do { \
- BM_TIMER_T mut = system_time + send_time + copy_time + size_time; \
- while (mut > 0) { \
- if (mut > MMU_INTERVAL) { \
- BM_TIMER_T tmp = MMU_INTERVAL - mmu_counter; \
- mmu += tmp; mut -= tmp; \
- erts_printf("%d\n",(int)((mmu / MMU_INTERVAL) * 100)); \
- mmu_counter = 0; mmu = 0; \
- } else { \
- mmu_counter += mut; mmu += mut; \
- if (mmu_counter >= MMU_INTERVAL) { \
- mmu_counter -= MMU_INTERVAL; \
- mmu -= mmu_counter; \
- erts_printf("%d\n",(int)((mmu / MMU_INTERVAL) * 100)); \
- mmu = mmu_counter; \
- } \
- mut = 0; \
- } \
- } \
-} while(0)
-
-#else /* !BM_TIMERS */
-# define BM_NEW_TIMER(t)
-# define BM_START_TIMER(t)
-# define BM_STOP_TIMER(t)
-# define BM_RESET_TIMER(t)
-# define BM_SWAP_TIMER(t1,t2)
-# define BM_TIME_PRINTER(str,time)
-# define BM_MMU_INIT()
-# define BM_MMU_READ()
-#endif /* BM_TIMERS */
-
-#ifdef BM_HEAP_SIZES
-extern unsigned long long max_used_heap;
-extern unsigned long long max_allocated_heap;
-extern unsigned long long max_used_global_heap;
-extern unsigned long long max_allocated_global_heap;
-#endif /* BM_HEAP_SIZES */
-
-#ifdef BM_MESSAGE_SIZES
-extern unsigned long long words_sent;
-extern unsigned long long words_copied;
-extern unsigned long long words_prealloc;
-extern unsigned long long message_sizes[1000];
-
-#define BM_MESSAGE_COPIED(size) { \
- words_copied += size; \
- BM_COUNT(messages_copied); }
-
-#define BM_PREALLOC_DATA(size) { \
- words_prealloc += size; }
-
-#define BM_MESSAGE(mess,send,rec) { \
- Uint msize = size_object(mess); \
- words_sent += msize; \
- if (msize < 1000) \
- message_sizes[msize]++; \
- else \
- message_sizes[999]++; \
- BM_EGO_COUNT(send,rec); \
- BM_COUNT(messages_sent); }
-
-#else /* !BM_MESSAGE_SIZES */
-
-#define BM_MESSAGE_COPIED(size) BM_COUNT(messages_copied);
-#define BM_PREALLOC_DATA(size)
-#define BM_MESSAGE(mess,send,rec) { \
- BM_EGO_COUNT(send,rec); \
- BM_COUNT(messages_sent); }
-
-#endif /* BM_MESSAGE_SIZES */
-
-void init_benchmarking(void);
-void save_statistics(void);
-
-#endif /* _BENCHMARK_H_ */
diff --git a/erts/emulator/beam/bif.c b/erts/emulator/beam/bif.c
index 2a3bd4afe5..d9048065c8 100644
--- a/erts/emulator/beam/bif.c
+++ b/erts/emulator/beam/bif.c
@@ -282,20 +282,17 @@ res_no_proc: {
}
}
-#define ERTS_DEMONITOR_FALSE 2
-#define ERTS_DEMONITOR_TRUE 1
-#define ERTS_DEMONITOR_BADARG 0
-#define ERTS_DEMONITOR_YIELD_TRUE -1
-#define ERTS_DEMONITOR_INTERNAL_ERROR -2
-
-static int
+/* This function is allowed to return range of values handled by demonitor/1-2
+ * Namely: atoms true, false, yield, internal_error, badarg or THE_NON_VALUE
+ */
+static Eterm
remote_demonitor(Process *c_p, DistEntry *dep, Eterm ref, Eterm to)
{
ErtsDSigData dsd;
ErtsMonitor *dmon;
ErtsMonitor *mon;
int code;
- int res;
+ Eterm res = am_false;
#ifndef ERTS_SMP
int stale_mon = 0;
#endif
@@ -328,7 +325,7 @@ remote_demonitor(Process *c_p, DistEntry *dep, Eterm ref, Eterm to)
mon = erts_remove_monitor(&ERTS_P_MONITORS(c_p), ref);
erts_smp_proc_unlock(c_p, ERTS_PROC_LOCK_LINK);
- res = ERTS_DEMONITOR_TRUE;
+ res = am_true;
break;
case ERTS_DSIG_PREP_CONNECTED:
@@ -352,7 +349,7 @@ remote_demonitor(Process *c_p, DistEntry *dep, Eterm ref, Eterm to)
* This is possible when smp support is enabled.
* 'DOWN' message just arrived.
*/
- res = ERTS_DEMONITOR_TRUE;
+ res = am_true;
}
else {
/*
@@ -367,16 +364,13 @@ remote_demonitor(Process *c_p, DistEntry *dep, Eterm ref, Eterm to)
: mon->pid),
ref,
0);
- res = (code == ERTS_DSIG_SEND_YIELD
- ? ERTS_DEMONITOR_YIELD_TRUE
- : ERTS_DEMONITOR_TRUE);
+ res = (code == ERTS_DSIG_SEND_YIELD ? am_yield : am_true);
erts_destroy_monitor(dmon);
-
}
break;
default:
ASSERT(! "Invalid dsig prepare result");
- return ERTS_DEMONITOR_INTERNAL_ERROR;
+ return am_internal_error;
}
#ifndef ERTS_SMP
@@ -404,27 +398,96 @@ remote_demonitor(Process *c_p, DistEntry *dep, Eterm ref, Eterm to)
return res;
}
-static int demonitor(Process *c_p, Eterm ref, Eterm *multip)
+static ERTS_INLINE void
+demonitor_local_process(Process *c_p, Eterm ref, Eterm to, Eterm *res)
+{
+ Process *rp = erts_pid2proc_opt(c_p,
+ ERTS_PROC_LOCK_MAIN|ERTS_PROC_LOCK_LINK,
+ to,
+ ERTS_PROC_LOCK_LINK,
+ ERTS_P2P_FLG_ALLOW_OTHER_X);
+ ErtsMonitor *mon = erts_remove_monitor(&ERTS_P_MONITORS(c_p), ref);
+
+#ifndef ERTS_SMP
+ ASSERT(mon);
+#else
+ if (!mon)
+ *res = am_false;
+ else
+#endif
+ {
+ *res = am_true;
+ erts_destroy_monitor(mon);
+ }
+ if (rp) {
+ ErtsMonitor *rmon;
+ rmon = erts_remove_monitor(&ERTS_P_MONITORS(rp), ref);
+ if (rp != c_p)
+ erts_smp_proc_unlock(rp, ERTS_PROC_LOCK_LINK);
+ if (rmon != NULL)
+ erts_destroy_monitor(rmon);
+ }
+ else {
+ ERTS_SMP_ASSERT_IS_NOT_EXITING(c_p);
+ }
+}
+
+static ERTS_INLINE BIF_RETTYPE
+demonitor_local_port(Process *origin, Eterm ref, Eterm target)
{
- ErtsMonitor *mon = NULL; /* The monitor entry to delete */
- Process *rp; /* Local target process */
- Eterm to = NIL; /* Monitor link traget */
- DistEntry *dep = NULL; /* Target's distribution entry */
- int deref_de = 0;
- int res;
- int unlock_link = 1;
+ BIF_RETTYPE res = am_false;
+ Port *port = erts_port_lookup_raw(target);
+
+ if (!port) {
+ BIF_ERROR(origin, BADARG);
+ }
+ erts_smp_proc_unlock(origin, ERTS_PROC_LOCK_LINK);
+
+ if (port) {
+ Eterm trap_ref;
+ switch (erts_port_demonitor(origin, ERTS_PORT_DEMONITOR_NORMAL,
+ port, ref, &trap_ref)) {
+ case ERTS_PORT_OP_DROPPED:
+ case ERTS_PORT_OP_BADARG:
+ break;
+ case ERTS_PORT_OP_SCHEDULED:
+ BIF_TRAP3(await_port_send_result_trap, origin, trap_ref,
+ am_busy_port, am_true);
+ /* the busy_port atom will never be returned, because it cannot be
+ * returned from erts_port_(de)monitor, but just in case if in future
+ * internal API changes - you may see this atom */
+ default:
+ break;
+ }
+ }
+ else {
+ ERTS_SMP_ASSERT_IS_NOT_EXITING(origin);
+ }
+ BIF_RET(res);
+}
+/* Can return atom true, false, yield, internal_error, badarg or
+ * THE_NON_VALUE if error occured or trap has been set up
+ */
+static
+BIF_RETTYPE demonitor(Process *c_p, Eterm ref, Eterm *multip)
+{
+ ErtsMonitor *mon = NULL; /* The monitor entry to delete */
+ Eterm to = NIL; /* Monitor link traget */
+ DistEntry *dep = NULL; /* Target's distribution entry */
+ int deref_de = 0;
+ BIF_RETTYPE res = am_false;
+ int unlock_link = 1;
erts_smp_proc_lock(c_p, ERTS_PROC_LOCK_LINK);
if (is_not_internal_ref(ref)) {
- res = ERTS_DEMONITOR_BADARG;
+ res = am_badarg;
goto done; /* Cannot be this monitor's ref */
}
mon = erts_lookup_monitor(ERTS_P_MONITORS(c_p), ref);
if (!mon) {
- res = ERTS_DEMONITOR_FALSE;
goto done;
}
@@ -432,70 +495,50 @@ static int demonitor(Process *c_p, Eterm ref, Eterm *multip)
case MON_TIME_OFFSET:
*multip = am_true;
erts_demonitor_time_offset(ref);
- res = ERTS_DEMONITOR_TRUE;
+ res = am_true;
break;
case MON_ORIGIN:
to = mon->pid;
*multip = am_false;
if (is_atom(to)) {
- /* Monitoring a name at node to */
- ASSERT(is_node_name_atom(to));
- dep = erts_sysname_to_connected_dist_entry(to);
- ASSERT(dep != erts_this_dist_entry);
- if (dep)
- deref_de = 1;
+ /* Monitoring a name at node to */
+ ASSERT(is_node_name_atom(to));
+ dep = erts_sysname_to_connected_dist_entry(to);
+ ASSERT(dep != erts_this_dist_entry);
+ if (dep)
+ deref_de = 1;
+ } else if (is_port(to)) {
+ if (port_dist_entry(to) != erts_this_dist_entry) {
+ goto badarg;
+ }
+ res = demonitor_local_port(c_p, ref, to);
+ unlock_link = 0;
+ goto done;
} else {
- ASSERT(is_pid(to));
- dep = pid_dist_entry(to);
+ ASSERT(is_pid(to));
+ dep = pid_dist_entry(to);
}
if (dep != erts_this_dist_entry) {
- res = remote_demonitor(c_p, dep, ref, to);
- /* remote_demonitor() unlocks link lock on c_p */
- unlock_link = 0;
+ res = remote_demonitor(c_p, dep, ref, to);
+ /* remote_demonitor() unlocks link lock on c_p */
+ unlock_link = 0;
}
else { /* Local monitor */
- if (deref_de) {
- deref_de = 0;
- erts_deref_dist_entry(dep);
- }
- dep = NULL;
- rp = erts_pid2proc_opt(c_p,
- ERTS_PROC_LOCK_MAIN|ERTS_PROC_LOCK_LINK,
- to,
- ERTS_PROC_LOCK_LINK,
- ERTS_P2P_FLG_ALLOW_OTHER_X);
- mon = erts_remove_monitor(&ERTS_P_MONITORS(c_p), ref);
-#ifndef ERTS_SMP
- ASSERT(mon);
-#else
- if (!mon)
- res = ERTS_DEMONITOR_FALSE;
- else
-#endif
- {
- res = ERTS_DEMONITOR_TRUE;
- erts_destroy_monitor(mon);
- }
- if (rp) {
- ErtsMonitor *rmon;
- rmon = erts_remove_monitor(&ERTS_P_MONITORS(rp), ref);
- if (rp != c_p)
- erts_smp_proc_unlock(rp, ERTS_PROC_LOCK_LINK);
- if (rmon != NULL)
- erts_destroy_monitor(rmon);
- }
- else {
- ERTS_SMP_ASSERT_IS_NOT_EXITING(c_p);
- }
-
+ if (deref_de) {
+ deref_de = 0;
+ erts_deref_dist_entry(dep);
+ }
+ dep = NULL;
+ demonitor_local_process(c_p, ref, to, &res);
}
break;
- default:
- res = ERTS_DEMONITOR_BADARG;
+ default /* case */ :
+badarg:
+ res = am_badarg; /* will be converted to error by caller */
*multip = am_false;
break;
}
- done:
+done:
if (unlock_link)
erts_smp_proc_unlock(c_p, ERTS_PROC_LOCK_LINK);
@@ -506,21 +549,20 @@ static int demonitor(Process *c_p, Eterm ref, Eterm *multip)
}
ERTS_SMP_LC_ASSERT(ERTS_PROC_LOCK_MAIN == erts_proc_lc_my_proc_locks(c_p));
- return res;
+ BIF_RET(res);
}
BIF_RETTYPE demonitor_1(BIF_ALIST_1)
{
Eterm multi;
switch (demonitor(BIF_P, BIF_ARG_1, &multi)) {
- case ERTS_DEMONITOR_FALSE:
- case ERTS_DEMONITOR_TRUE:
- BIF_RET(am_true);
- case ERTS_DEMONITOR_YIELD_TRUE:
- ERTS_BIF_YIELD_RETURN(BIF_P, am_true);
- case ERTS_DEMONITOR_BADARG:
- BIF_ERROR(BIF_P, BADARG);
- case ERTS_DEMONITOR_INTERNAL_ERROR:
+ case am_false:
+ case am_true: BIF_RET(am_true);
+ case THE_NON_VALUE: BIF_RET(THE_NON_VALUE);
+ case am_yield: ERTS_BIF_YIELD_RETURN(BIF_P, am_true);
+ case am_badarg: BIF_ERROR(BIF_P, BADARG);
+
+ case am_internal_error:
default:
ASSERT(! "demonitor(): internal error");
BIF_ERROR(BIF_P, EXC_INTERNAL_ERROR);
@@ -529,11 +571,11 @@ BIF_RETTYPE demonitor_1(BIF_ALIST_1)
BIF_RETTYPE demonitor_2(BIF_ALIST_2)
{
- Eterm res = am_true;
- Eterm multi = am_false;
- int info = 0;
- int flush = 0;
- Eterm list = BIF_ARG_2;
+ BIF_RETTYPE res = am_true;
+ Eterm multi = am_false;
+ int info = 0;
+ int flush = 0;
+ Eterm list = BIF_ARG_2;
while (is_list(list)) {
Eterm* consp = list_val(list);
@@ -554,24 +596,27 @@ BIF_RETTYPE demonitor_2(BIF_ALIST_2)
goto badarg;
switch (demonitor(BIF_P, BIF_ARG_1, &multi)) {
- case ERTS_DEMONITOR_FALSE:
+ case THE_NON_VALUE:
+ /* If other error occured or trap has been set up - pass through */
+ BIF_RET(THE_NON_VALUE);
+ case am_false:
if (info)
res = am_false;
if (flush) {
- flush_messages:
+flush_messages:
BIF_TRAP3(flush_monitor_messages_trap, BIF_P,
BIF_ARG_1, multi, res);
}
- case ERTS_DEMONITOR_TRUE:
+ case am_true:
if (multi == am_true && flush)
goto flush_messages;
BIF_RET(res);
- case ERTS_DEMONITOR_YIELD_TRUE:
+ case am_yield:
ERTS_BIF_YIELD_RETURN(BIF_P, am_true);
- case ERTS_DEMONITOR_BADARG:
- badarg:
+ case am_badarg:
+badarg:
BIF_ERROR(BIF_P, BADARG);
- case ERTS_DEMONITOR_INTERNAL_ERROR:
+ case am_internal_error:
default:
ASSERT(! "demonitor(): internal error");
BIF_ERROR(BIF_P, EXC_INTERNAL_ERROR);
@@ -615,14 +660,13 @@ erts_queue_monitor_message(Process *p,
erts_queue_message(p, *p_locksp, msgp, tup, am_system);
}
-static BIF_RETTYPE
+static Eterm
local_pid_monitor(Process *p, Eterm target, Eterm mon_ref, int boolean)
{
- BIF_RETTYPE ret;
- Process *rp;
+ Eterm ret = mon_ref;
+ Process *rp;
ErtsProcLocks p_locks = ERTS_PROC_LOCK_MAIN|ERTS_PROC_LOCK_LINK;
- ERTS_BIF_PREP_RET(ret, mon_ref);
if (target == p->common.id) {
return ret;
}
@@ -658,40 +702,112 @@ local_pid_monitor(Process *p, Eterm target, Eterm mon_ref, int boolean)
}
static BIF_RETTYPE
-local_name_monitor(Process *p, Eterm target_name)
+local_port_monitor(Process *origin, Eterm target)
{
- BIF_RETTYPE ret;
- Eterm mon_ref;
- ErtsProcLocks p_locks = ERTS_PROC_LOCK_MAIN|ERTS_PROC_LOCK_LINK;
- Process *rp;
+ BIF_RETTYPE ref = erts_make_ref(origin);
+ Port *port = erts_sig_lookup_port(origin, target);
+ ErtsProcLocks p_locks = ERTS_PROC_LOCK_MAIN;
- mon_ref = erts_make_ref(p);
- ERTS_BIF_PREP_RET(ret, mon_ref);
- erts_smp_proc_lock(p, ERTS_PROC_LOCK_LINK);
- rp = erts_whereis_process(p, p_locks, target_name, ERTS_PROC_LOCK_LINK,
- ERTS_P2P_FLG_ALLOW_OTHER_X);
- if (!rp) {
- DeclareTmpHeap(lhp,3,p);
+ if (!port) {
+res_no_proc:
+ /* Send the DOWN message immediately. Ref is made on the fly because
+ * caller has never seen it yet. */
+ erts_queue_monitor_message(origin, &p_locks, ref,
+ am_port, target, am_noproc);
+ }
+ else {
+ switch (erts_port_monitor(origin, port, target, &ref)) {
+ case ERTS_PORT_OP_DROPPED:
+ case ERTS_PORT_OP_BADARG:
+ goto res_no_proc;
+ case ERTS_PORT_OP_SCHEDULED:
+ BIF_TRAP3(await_port_send_result_trap, origin, ref,
+ am_busy_port, ref);
+ /* the busy_port atom will never be returned, because it cannot be
+ * returned from erts_port_monitor, but just in case if in future
+ * internal API changes - you may see this atom */
+ default:
+ break;
+ }
+ }
+ erts_smp_proc_unlock(origin, p_locks & ~ERTS_PROC_LOCK_MAIN);
+ BIF_RET(ref);
+}
+
+/* Type = process | port :: atom(), 1st argument passed to erlang:monitor/2
+ */
+static BIF_RETTYPE
+local_name_monitor(Process *self, Eterm type, Eterm target_name)
+{
+ BIF_RETTYPE ret = erts_make_ref(self);
+
+ ErtsProcLocks p_locks = ERTS_PROC_LOCK_MAIN | ERTS_PROC_LOCK_LINK;
+ Process *proc = NULL;
+ Port *port = NULL;
+
+ erts_smp_proc_lock(self, ERTS_PROC_LOCK_LINK);
+
+ erts_whereis_name(self, p_locks, target_name,
+ &proc, ERTS_PROC_LOCK_LINK,
+ ERTS_P2P_FLG_ALLOW_OTHER_X,
+ &port, 0);
+
+ /* If the name is not registered,
+ * or if we asked for proc and got a port,
+ * or if we asked for port and got a proc,
+ * we just send the 'DOWN' message.
+ */
+ if ((!proc && !port) ||
+ (type == am_process && port) ||
+ (type == am_port && proc)) {
+ DeclareTmpHeap(lhp,3,self);
Eterm item;
- UseTmpHeap(3,p);
- erts_smp_proc_unlock(p, ERTS_PROC_LOCK_LINK);
+ UseTmpHeap(3,self);
+
+ erts_smp_proc_unlock(self, ERTS_PROC_LOCK_LINK);
p_locks &= ~ERTS_PROC_LOCK_LINK;
+
item = TUPLE2(lhp, target_name, erts_this_dist_entry->sysname);
- erts_queue_monitor_message(p, &p_locks,
- mon_ref, am_process, item, am_noproc);
- UnUseTmpHeap(3,p);
- }
- else if (rp != p) {
- erts_add_monitor(&ERTS_P_MONITORS(p), MON_ORIGIN, mon_ref, rp->common.id,
- target_name);
- erts_add_monitor(&ERTS_P_MONITORS(rp), MON_TARGET, mon_ref, p->common.id,
- target_name);
- erts_smp_proc_unlock(rp, ERTS_PROC_LOCK_LINK);
+ erts_queue_monitor_message(self, &p_locks,
+ ret,
+ type, /* = process|port :: atom() */
+ item, am_noproc);
+ UnUseTmpHeap(3,self);
+ }
+ else if (port) {
+ erts_smp_proc_unlock(self, p_locks & ~ERTS_PROC_LOCK_MAIN);
+ p_locks &= ~ERTS_PROC_LOCK_MAIN;
+
+ switch (erts_port_monitor(self, port, target_name, &ret)) {
+ case ERTS_PORT_OP_DONE:
+ return ret;
+ case ERTS_PORT_OP_SCHEDULED: { /* Scheduled a signal */
+ ASSERT(is_internal_ref(ret));
+ BIF_TRAP3(await_port_send_result_trap, self,
+ ret, am_true, ret);
+ /* bif_trap returns */
+ } break;
+ default:
+ goto badarg;
+ }
+ }
+ else if (proc != self) {
+ erts_add_monitor(&ERTS_P_MONITORS(self), MON_ORIGIN, ret,
+ proc->common.id, target_name);
+ erts_add_monitor(&ERTS_P_MONITORS(proc), MON_TARGET, ret,
+ self->common.id, target_name);
+ erts_smp_proc_unlock(proc, ERTS_PROC_LOCK_LINK);
}
- erts_smp_proc_unlock(p, p_locks & ~ERTS_PROC_LOCK_MAIN);
-
- return ret;
+ if (p_locks) {
+ erts_smp_proc_unlock(self, p_locks & ~ERTS_PROC_LOCK_MAIN);
+ }
+ BIF_RET(ret);
+badarg:
+ if (p_locks) {
+ erts_smp_proc_unlock(self, p_locks & ~ERTS_PROC_LOCK_MAIN);
+ }
+ BIF_ERROR(self, BADARG);
}
static BIF_RETTYPE
@@ -758,7 +874,7 @@ remote_monitor(Process *p, Eterm bifarg1, Eterm bifarg2,
break;
}
- return ret;
+ BIF_RET(ret);
}
BIF_RETTYPE monitor_2(BIF_ALIST_2)
@@ -772,8 +888,9 @@ BIF_RETTYPE monitor_2(BIF_ALIST_2)
switch (BIF_ARG_1) {
case am_time_offset: {
Eterm ref;
- if (BIF_ARG_2 != am_clock_service)
- goto error;
+ if (BIF_ARG_2 != am_clock_service) {
+ goto badarg;
+ }
ref = erts_make_ref(BIF_P);
erts_smp_proc_lock(BIF_P, ERTS_PROC_LOCK_LINK);
erts_add_monitor(&ERTS_P_MONITORS(BIF_P), MON_TIME_OFFSET,
@@ -783,46 +900,57 @@ BIF_RETTYPE monitor_2(BIF_ALIST_2)
BIF_RET(ref);
}
case am_process:
+ case am_port:
break;
default:
- goto error;
+ goto badarg;
}
- if (is_internal_pid(target)) {
- local_pid:
- ret = local_pid_monitor(BIF_P, target, erts_make_ref(BIF_P), 0);
- } else if (is_external_pid(target)) {
+ if (is_internal_pid(target) && BIF_ARG_1 == am_process) {
+local_pid:
+ ret = local_pid_monitor(BIF_P, target, erts_make_ref(BIF_P), 0);
+ } else if (is_external_pid(target) && BIF_ARG_1 == am_process) {
dep = external_pid_dist_entry(target);
if (dep == erts_this_dist_entry)
goto local_pid;
ret = remote_monitor(BIF_P, BIF_ARG_1, BIF_ARG_2, dep, target, 0);
+ } else if (is_internal_port(target) && BIF_ARG_1 == am_port) {
+local_port:
+ ret = local_port_monitor(BIF_P, target);
+ } else if (is_external_port(target) && BIF_ARG_1 == am_port) {
+ dep = external_port_dist_entry(target);
+ if (dep == erts_this_dist_entry) {
+ goto local_port;
+ }
+ goto badarg; /* No want remote port */
} else if (is_atom(target)) {
- ret = local_name_monitor(BIF_P, target);
+ ret = local_name_monitor(BIF_P, BIF_ARG_1, target);
} else if (is_tuple(target)) {
Eterm *tp = tuple_val(target);
Eterm remote_node;
Eterm name;
- if (arityval(*tp) != 2)
- goto error;
+ if (arityval(*tp) != 2) {
+ goto badarg;
+ }
remote_node = tp[2];
name = tp[1];
if (!is_atom(remote_node) || !is_atom(name)) {
- goto error;
+ goto badarg;
}
if (!erts_is_alive && remote_node != am_Noname) {
- goto error; /* Remote monitor from (this) undistributed node */
+ goto badarg; /* Remote monitor from (this) undistributed node */
}
dep = erts_sysname_to_connected_dist_entry(remote_node);
if (dep == erts_this_dist_entry) {
deref_de = 1;
- ret = local_name_monitor(BIF_P, name);
+ ret = local_name_monitor(BIF_P, BIF_ARG_1, name);
} else {
if (dep)
deref_de = 1;
ret = remote_monitor(BIF_P, BIF_ARG_1, BIF_ARG_2, dep, name, 1);
}
} else {
- error:
+badarg:
ERTS_BIF_PREP_ERROR(ret, BIF_P, BADARG);
}
if (deref_de) {
@@ -917,9 +1045,6 @@ BIF_RETTYPE spawn_opt_1(BIF_ALIST_1)
goto error;
} else if (arg == am_message_queue_data) {
switch (val) {
- case am_mixed:
- so.flags &= ~(SPO_OFF_HEAP_MSGQ|SPO_ON_HEAP_MSGQ);
- break;
case am_on_heap:
so.flags &= ~SPO_OFF_HEAP_MSGQ;
so.flags |= SPO_ON_HEAP_MSGQ;
@@ -3836,59 +3961,11 @@ BIF_RETTYPE display_nl_0(BIF_ALIST_0)
/**********************************************************************/
-/* stop the system */
-/* ARGSUSED */
-BIF_RETTYPE halt_0(BIF_ALIST_0)
-{
- VERBOSE(DEBUG_SYSTEM,("System halted by BIF halt()\n"));
- erts_halt(0);
- ERTS_BIF_YIELD1(bif_export[BIF_halt_1], BIF_P, am_undefined);
-}
-
-/**********************************************************************/
#define HALT_MSG_SIZE 200
-static char halt_msg[HALT_MSG_SIZE];
-
-/* stop the system with exit code */
-/* ARGSUSED */
-BIF_RETTYPE halt_1(BIF_ALIST_1)
-{
- Uint code;
-
- if (term_to_Uint_mask(BIF_ARG_1, &code)) {
- int pos_int_code = (int) (code & INT_MAX);
- VERBOSE(DEBUG_SYSTEM,("System halted by BIF halt(%T)\n", BIF_ARG_1));
- erts_halt(pos_int_code);
- ERTS_BIF_YIELD1(bif_export[BIF_halt_1], BIF_P, am_undefined);
- }
- else if (ERTS_IS_ATOM_STR("abort", BIF_ARG_1)) {
- VERBOSE(DEBUG_SYSTEM,("System halted by BIF halt(%T)\n", BIF_ARG_1));
- erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_MAIN);
- erts_exit(ERTS_ABORT_EXIT, "");
- }
- else if (is_string(BIF_ARG_1) || BIF_ARG_1 == NIL) {
- Sint i;
-
- if ((i = intlist_to_buf(BIF_ARG_1, halt_msg, HALT_MSG_SIZE-1)) < 0) {
- goto error;
- }
- halt_msg[i] = '\0';
- VERBOSE(DEBUG_SYSTEM,("System halted by BIF halt(%T)\n", BIF_ARG_1));
- erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_MAIN);
- erts_exit(ERTS_DUMP_EXIT, "%s\n", halt_msg);
- }
- else
- goto error;
- return NIL; /* Pedantic (lint does not know about erts_exit) */
- error:
- BIF_ERROR(BIF_P, BADARG);
-}
-
-/**********************************************************************/
+static char halt_msg[HALT_MSG_SIZE+1];
/* stop the system with exit code and flags */
-/* ARGSUSED */
BIF_RETTYPE halt_2(BIF_ALIST_2)
{
Uint code;
@@ -3924,7 +4001,7 @@ BIF_RETTYPE halt_2(BIF_ALIST_2)
("System halted by BIF halt(%T, %T)\n", BIF_ARG_1, BIF_ARG_2));
if (flush) {
erts_halt(pos_int_code);
- ERTS_BIF_YIELD1(bif_export[BIF_halt_1], BIF_P, am_undefined);
+ ERTS_BIF_YIELD2(bif_export[BIF_halt_2], BIF_P, am_undefined, am_undefined);
}
else {
erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_MAIN);
@@ -3940,9 +4017,12 @@ BIF_RETTYPE halt_2(BIF_ALIST_2)
else if (is_string(BIF_ARG_1) || BIF_ARG_1 == NIL) {
Sint i;
- if ((i = intlist_to_buf(BIF_ARG_1, halt_msg, HALT_MSG_SIZE-1)) < 0) {
- goto error;
- }
+ if ((i = intlist_to_buf(BIF_ARG_1, halt_msg, HALT_MSG_SIZE)) == -1) {
+ goto error;
+ }
+ if (i == -2) /* truncated string */
+ i = HALT_MSG_SIZE;
+ ASSERT(i >= 0 && i <= HALT_MSG_SIZE);
halt_msg[i] = '\0';
VERBOSE(DEBUG_SYSTEM,
("System halted by BIF halt(%T, %T)\n", BIF_ARG_1, BIF_ARG_2));
@@ -4225,8 +4305,9 @@ BIF_RETTYPE group_leader_2(BIF_ALIST_2)
else {
locks &= ~ERTS_PROC_LOCK_STATUS;
erts_smp_proc_unlock(new_member, ERTS_PROC_LOCK_STATUS);
- if (erts_smp_atomic32_read_nob(&new_member->state)
- & !(ERTS_PSFLG_DIRTY_RUNNING|ERTS_PSFLG_DIRTY_RUNNING_SYS)) {
+ if (new_member == BIF_P
+ || !(erts_smp_atomic32_read_nob(&new_member->state)
+ & (ERTS_PSFLG_DIRTY_RUNNING|ERTS_PSFLG_DIRTY_RUNNING_SYS))) {
new_member->group_leader = STORE_NC_IN_PROC(new_member,
BIF_ARG_1);
}
@@ -4246,6 +4327,7 @@ BIF_RETTYPE group_leader_2(BIF_ALIST_2)
BIF_ARG_1);
bp->next = new_member->mbuf;
new_member->mbuf = bp;
+ new_member->mbuf_sz += bp->used_size;
}
}
}
diff --git a/erts/emulator/beam/bif.tab b/erts/emulator/beam/bif.tab
index 872f0f9b2a..80db4eb6ff 100644
--- a/erts/emulator/beam/bif.tab
+++ b/erts/emulator/beam/bif.tab
@@ -72,8 +72,6 @@ bif erlang:get/1
bif erlang:get_keys/1
bif erlang:group_leader/0
bif erlang:group_leader/2
-bif erlang:halt/0
-bif erlang:halt/1
bif erlang:halt/2
bif erlang:phash/2
bif erlang:phash2/1
@@ -163,6 +161,7 @@ bif erts_internal:port_close/1
bif erts_internal:port_connect/2
bif erts_internal:request_system_task/3
+bif erts_internal:request_system_task/4
bif erts_internal:check_process_code/2
bif erts_internal:map_to_tuple_keys/1
@@ -176,6 +175,8 @@ bif erts_internal:is_system_process/1
bif erts_internal:system_check/1
+bif erts_internal:release_literal_area_switch/0
+
# inet_db support
bif erlang:port_set_data/2
bif erlang:port_get_data/1
@@ -644,8 +645,9 @@ bif erts_debug:map_info/1
# New in 19.0
#
-bif erts_internal:copy_literals/2
-bif erts_internal:purge_module/1
+bif erts_internal:is_process_executing_dirty/1
+bif erts_internal:check_dirty_process_code/2
+bif erts_internal:purge_module/2
bif binary:split/2
bif binary:split/3
bif erts_debug:size_shared/1
diff --git a/erts/emulator/beam/big.h b/erts/emulator/beam/big.h
index 464acd67f6..4a96d971c3 100644
--- a/erts/emulator/beam/big.h
+++ b/erts/emulator/beam/big.h
@@ -21,17 +21,8 @@
#ifndef __BIG_H__
#define __BIG_H__
-#ifndef __SYS_H__
#include "sys.h"
-#endif
-
-#ifndef __CONFIG_H__
-#include "erl_vm.h"
-#endif
-
-#ifndef __GLOBAL_H__
#include "global.h"
-#endif
typedef Uint ErtsDigit;
diff --git a/erts/emulator/beam/binary.c b/erts/emulator/beam/binary.c
index cfd8fbe2f5..071a356260 100644
--- a/erts/emulator/beam/binary.c
+++ b/erts/emulator/beam/binary.c
@@ -117,7 +117,7 @@ new_binary(Process *p, byte *buf, Uint len)
* When heap binary is not desired...
*/
-Eterm erts_new_mso_binary(Process *p, byte *buf, int len)
+Eterm erts_new_mso_binary(Process *p, byte *buf, Uint len)
{
ProcBin* pb;
Binary* bptr;
diff --git a/erts/emulator/beam/erl_alloc.c b/erts/emulator/beam/erl_alloc.c
index c367d4162c..3c2c9def3b 100644
--- a/erts/emulator/beam/erl_alloc.c
+++ b/erts/emulator/beam/erl_alloc.c
@@ -137,10 +137,13 @@ static ErtsAllocatorState_t exec_alloc_state;
#endif
static ErtsAllocatorState_t test_alloc_state;
-#define ERTS_ALC_INFO_A_ALLOC_UTIL (ERTS_ALC_A_MAX + 1)
-#define ERTS_ALC_INFO_A_MSEG_ALLOC (ERTS_ALC_A_MAX + 2)
-#define ERTS_ALC_INFO_A_ERTS_MMAP (ERTS_ALC_A_MAX + 3)
-#define ERTS_ALC_INFO_A_MAX ERTS_ALC_INFO_A_ERTS_MMAP
+enum {
+ ERTS_ALC_INFO_A_ALLOC_UTIL = ERTS_ALC_A_MAX + 1,
+ ERTS_ALC_INFO_A_MSEG_ALLOC,
+ ERTS_ALC_INFO_A_ERTS_MMAP,
+ ERTS_ALC_INFO_A_DISABLED_EXEC, /* fake a disabled "exec_alloc" */
+ ERTS_ALC_INFO_A_END
+};
typedef struct {
erts_smp_atomic32_t refc;
@@ -150,7 +153,7 @@ typedef struct {
Process *proc;
Eterm ref;
Eterm ref_heap[REF_THING_SIZE];
- int allocs[ERTS_ALC_INFO_A_MAX - ERTS_ALC_A_MIN + 1 + 1];
+ int allocs[ERTS_ALC_INFO_A_END - ERTS_ALC_A_MIN + 1];
} ErtsAllocInfoReq;
ERTS_SCHED_PREF_QUICK_ALLOC_IMPL(aireq,
@@ -3260,6 +3263,12 @@ reply_alloc_info(void *vair)
am_false);
#endif
break;
+#ifndef ERTS_ALC_A_EXEC
+ case ERTS_ALC_INFO_A_DISABLED_EXEC:
+ alloc_atom = erts_bld_atom(hpp, szp, "exec_alloc");
+ ainfo = erts_bld_tuple2(hpp, szp, alloc_atom, am_false);
+ break;
+#endif
default:
alloc_atom = erts_bld_atom(hpp, szp,
(char *) ERTS_ALC_A2AD(ai));
@@ -3287,7 +3296,8 @@ reply_alloc_info(void *vair)
switch (ai) {
case ERTS_ALC_A_SYSTEM:
case ERTS_ALC_INFO_A_ALLOC_UTIL:
- case ERTS_ALC_INFO_A_ERTS_MMAP:
+ case ERTS_ALC_INFO_A_ERTS_MMAP:
+ case ERTS_ALC_INFO_A_DISABLED_EXEC:
break;
case ERTS_ALC_INFO_A_MSEG_ALLOC:
#if HAVE_ERTS_MSEG && defined(ERTS_SMP)
@@ -3359,7 +3369,7 @@ erts_request_alloc_info(struct process *c_p,
int internal)
{
ErtsAllocInfoReq *air = aireq_alloc();
- Eterm req_ai[ERTS_ALC_INFO_A_MAX+1] = {0};
+ Eterm req_ai[ERTS_ALC_INFO_A_END] = {0};
Eterm alist;
Eterm *hp;
int airix = 0, ai;
@@ -3399,6 +3409,12 @@ erts_request_alloc_info(struct process *c_p,
ai = ERTS_ALC_INFO_A_ERTS_MMAP;
goto save_alloc;
}
+#ifndef ERTS_ALC_A_EXEC
+ if (erts_is_atom_str("exec_alloc", alloc, 0)) {
+ ai = ERTS_ALC_INFO_A_DISABLED_EXEC;
+ goto save_alloc;
+ }
+#endif
if (erts_is_atom_str("alloc_util", alloc, 0)) {
ai = ERTS_ALC_INFO_A_ALLOC_UTIL;
save_alloc:
diff --git a/erts/emulator/beam/erl_alloc.types b/erts/emulator/beam/erl_alloc.types
index 227fedfb69..6e8710eb8a 100644
--- a/erts/emulator/beam/erl_alloc.types
+++ b/erts/emulator/beam/erl_alloc.types
@@ -279,6 +279,7 @@ type TRACER_NIF LONG_LIVED SYSTEM tracer_nif
type TRACE_MSG_QUEUE SHORT_LIVED SYSTEM trace_message_queue
type SCHED_ASYNC_JOB SHORT_LIVED SYSTEM async_calls
type DIRTY_START STANDARD PROCESSES dirty_start
+type DIRTY_SL SHORT_LIVED SYSTEM dirty_short_lived
+if threads_no_smp
# Need thread safe allocs, but std_alloc and fix_alloc are not;
@@ -313,6 +314,7 @@ type RUNQ_BLNS LONG_LIVED SYSTEM run_queue_balancing
type THR_PRGR_IDATA LONG_LIVED SYSTEM thr_prgr_internal_data
type THR_PRGR_DATA LONG_LIVED SYSTEM thr_prgr_data
type T_THR_PRGR_DATA SHORT_LIVED SYSTEM temp_thr_prgr_data
+type RELEASE_LAREA SHORT_LIVED SYSTEM release_literal_area
+endif
#
@@ -367,6 +369,8 @@ type MONITOR_LH STANDARD PROCESSES monitor_lh
type NLINK_LH STANDARD PROCESSES nlink_lh
type CODE LONG_LIVED CODE code
type LITERAL LITERAL CODE literal
+type LITERAL_REF SHORT_LIVED CODE literal_area_ref
+type PURGE_DATA SHORT_LIVED CODE purge_data
type DB_HEIR_DATA STANDARD ETS db_heir_data
type DB_MS_PSDO_PROC LONG_LIVED ETS db_match_pseudo_proc
type SCHDLR_DATA LONG_LIVED SYSTEM scheduler_data
diff --git a/erts/emulator/beam/erl_ao_firstfit_alloc.c b/erts/emulator/beam/erl_ao_firstfit_alloc.c
index fbe4724047..7e239d1f5d 100644
--- a/erts/emulator/beam/erl_ao_firstfit_alloc.c
+++ b/erts/emulator/beam/erl_ao_firstfit_alloc.c
@@ -123,7 +123,7 @@ struct AOFF_Carrier_t_ {
AOFF_RBTree_t rbt_node; /* My node in the carrier tree */
AOFF_RBTree_t* root; /* Root of my block tree */
};
-#define RBT_NODE_TO_MBC(PTR) ((AOFF_Carrier_t*)((char*)(PTR) - offsetof(AOFF_Carrier_t, rbt_node)))
+#define RBT_NODE_TO_MBC(PTR) ErtsContainerStruct((PTR), AOFF_Carrier_t, rbt_node)
/*
To support carrier migration we keep two kinds of rb-trees:
diff --git a/erts/emulator/beam/erl_bif_info.c b/erts/emulator/beam/erl_bif_info.c
index 2e195db0ee..29ba12dfdb 100644
--- a/erts/emulator/beam/erl_bif_info.c
+++ b/erts/emulator/beam/erl_bif_info.c
@@ -361,8 +361,13 @@ erts_print_system_version(int to, void *arg, Process *c_p)
}
typedef struct {
+ /* {Entity,Node} = {monitor.Name,monitor.Pid} for external by name
+ * {Entity,Node} = {monitor.Pid,NIL} for external/external by pid
+ * {Entity,Node} = {monitor.Name,erlang:node()} for internal by name */
Eterm entity;
Eterm node;
+ /* pid is actual target being monitored, no matter pid/port or name */
+ Eterm pid;
} MonitorInfo;
typedef struct {
@@ -420,21 +425,27 @@ static void collect_one_origin_monitor(ErtsMonitor *mon, void *vmicp)
EXTEND_MONITOR_INFOS(micp);
if (is_atom(mon->pid)) { /* external by name */
micp->mi[micp->mi_i].entity = mon->name;
- micp->mi[micp->mi_i].node = mon->pid;
- micp->sz += 3; /* need one 2-tuple */
+ micp->mi[micp->mi_i].node = mon->pid;
+ micp->sz += 3; /* need one 2-tuple */
} else if (is_external_pid(mon->pid)) { /* external by pid */
micp->mi[micp->mi_i].entity = mon->pid;
- micp->mi[micp->mi_i].node = NIL;
- micp->sz += NC_HEAP_SIZE(mon->pid);
+ micp->mi[micp->mi_i].node = NIL;
+ micp->sz += NC_HEAP_SIZE(mon->pid);
} else if (!is_nil(mon->name)) { /* internal by name */
micp->mi[micp->mi_i].entity = mon->name;
- micp->mi[micp->mi_i].node = erts_this_dist_entry->sysname;
- micp->sz += 3; /* need one 2-tuple */
+ micp->mi[micp->mi_i].node = erts_this_dist_entry->sysname;
+ micp->sz += 3; /* need one 2-tuple */
} else { /* internal by pid */
micp->mi[micp->mi_i].entity = mon->pid;
- micp->mi[micp->mi_i].node = NIL;
+ micp->mi[micp->mi_i].node = NIL;
/* no additional heap space needed */
}
+
+ /* have always pid at hand, to assist with figuring out if its a port or
+ * a process, when we monitored by name and process_info is requested.
+ * See: erl_bif_info.c:process_info_aux section for am_monitors */
+ micp->mi[micp->mi_i].pid = mon->pid;
+
micp->mi_i++;
micp->sz += 2 + 3; /* For a cons cell and a 2-tuple */
}
@@ -1190,37 +1201,49 @@ process_info_aux(Process *BIF_P,
case am_monitors: {
MonitorInfoCollection mic;
- int i;
+ int i;
INIT_MONITOR_INFOS(mic);
- erts_doforall_monitors(ERTS_P_MONITORS(rp),&collect_one_origin_monitor,&mic);
- hp = HAlloc(BIF_P, 3 + mic.sz);
+ erts_doforall_monitors(ERTS_P_MONITORS(rp),
+ &collect_one_origin_monitor, &mic);
+ hp = HAlloc(BIF_P, 3 + mic.sz);
res = NIL;
for (i = 0; i < mic.mi_i; i++) {
if (is_atom(mic.mi[i].entity)) {
/* Monitor by name.
- * Build {process, {Name, Node}} and cons it.
+ * Build {process|port, {Name, Node}} and cons it.
*/
Eterm t1, t2;
+ /* If pid is an atom, then it is a remote named monitor, which
+ has to be a process */
+ Eterm m_type = is_port(mic.mi[i].pid) ? am_port : am_process;
+ ASSERT(is_pid(mic.mi[i].pid)
+ || is_port(mic.mi[i].pid)
+ || is_atom(mic.mi[i].pid));
t1 = TUPLE2(hp, mic.mi[i].entity, mic.mi[i].node);
hp += 3;
- t2 = TUPLE2(hp, am_process, t1);
+ t2 = TUPLE2(hp, m_type, t1);
hp += 3;
res = CONS(hp, t2, res);
- hp += 2;
+ hp += 2;
}
else {
- /* Monitor by pid. Build {process, Pid} and cons it. */
+ /* Monitor by pid. Build {process|port, Pid} and cons it. */
Eterm t;
Eterm pid = STORE_NC(&hp, &MSO(BIF_P), mic.mi[i].entity);
- t = TUPLE2(hp, am_process, pid);
+
+ Eterm m_type = is_port(mic.mi[i].pid) ? am_port : am_process;
+ ASSERT(is_pid(mic.mi[i].pid)
+ || is_port(mic.mi[i].pid));
+
+ t = TUPLE2(hp, m_type, pid);
hp += 3;
res = CONS(hp, t, res);
- hp += 2;
+ hp += 2;
}
}
- DESTROY_MONITOR_INFOS(mic);
+ DESTROY_MONITOR_INFOS(mic);
break;
}
@@ -1565,9 +1588,6 @@ process_info_aux(Process *BIF_P,
case F_ON_HEAP_MSGQ:
res = am_on_heap;
break;
- case 0:
- res = am_mixed;
- break;
default:
res = am_error;
ERTS_INTERNAL_ERROR("Inconsistent message queue management state");
@@ -2264,9 +2284,7 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
} else if (ERTS_IS_ATOM_STR("dist_ctrl", BIF_ARG_1)) {
DistEntry *dep;
i = 0;
- /* Need to be the only thread running... */
- erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_MAIN);
- erts_smp_thr_progress_block();
+ erts_smp_rwmtx_rlock(&erts_dist_table_rwmtx);
for (dep = erts_visible_dist_entries; dep; dep = dep->next)
++i;
for (dep = erts_hidden_dist_entries; dep; dep = dep->next)
@@ -2289,8 +2307,7 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
res = CONS(hp, tpl, res);
hp += 2;
}
- erts_smp_thr_progress_unblock();
- erts_smp_proc_lock(BIF_P, ERTS_PROC_LOCK_MAIN);
+ erts_smp_rwmtx_runlock(&erts_dist_table_rwmtx);
BIF_RET(res);
} else if (BIF_ARG_1 == am_system_version) {
erts_dsprintf_buf_t *dsbufp = erts_create_tmp_dsbuf(0);
@@ -2809,8 +2826,6 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
BIF_RET(am_off_heap);
case SPO_ON_HEAP_MSGQ:
BIF_RET(am_on_heap);
- case 0:
- BIF_RET(am_mixed);
default:
ERTS_INTERNAL_ERROR("Inconsistent message queue management state");
BIF_RET(am_error);
@@ -2868,6 +2883,27 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
BIF_RET(AM_tag);
#endif
}
+ else if (ERTS_IS_ATOM_STR("check_process_code",BIF_ARG_1)) {
+ Eterm terms[3];
+ Sint length = 1;
+ Uint sz = 0;
+ Eterm *hp, res;
+ DECL_AM(direct_references);
+
+ terms[0] = AM_direct_references;
+#if !defined(ERTS_NEW_PURGE_STRATEGY)
+ {
+ DECL_AM(indirect_references);
+ terms[1] = AM_indirect_references;
+ terms[2] = am_copy_literals;
+ length = 3;
+ }
+#endif
+ erts_bld_list(NULL, &sz, length, terms);
+ hp = HAlloc(BIF_P, sz);
+ res = erts_bld_list(&hp, NULL, length, terms);
+ BIF_RET(res);
+ }
BIF_ERROR(BIF_P, BADARG);
}
@@ -2885,7 +2921,8 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
*/
Eterm
-erts_bld_port_info(Eterm **hpp, ErlOffHeap *ohp, Uint *szp, Port *prt, Eterm item)
+erts_bld_port_info(Eterm **hpp, ErlOffHeap *ohp, Uint *szp, Port *prt,
+ Eterm item)
{
Eterm res = THE_NON_VALUE;
@@ -2933,8 +2970,8 @@ erts_bld_port_info(Eterm **hpp, ErlOffHeap *ohp, Uint *szp, Port *prt, Eterm ite
Eterm item;
INIT_MONITOR_INFOS(mic);
-
- erts_doforall_monitors(ERTS_P_MONITORS(prt), &collect_one_origin_monitor, &mic);
+ erts_doforall_monitors(ERTS_P_MONITORS(prt),
+ &collect_one_origin_monitor, &mic);
if (szp)
*szp += mic.sz;
@@ -2943,14 +2980,16 @@ erts_bld_port_info(Eterm **hpp, ErlOffHeap *ohp, Uint *szp, Port *prt, Eterm ite
res = NIL;
for (i = 0; i < mic.mi_i; i++) {
Eterm t;
- item = STORE_NC(hpp, ohp, mic.mi[i].entity);
- t = TUPLE2(*hpp, am_process, item);
+ Eterm m_type;
+
+ item = STORE_NC(hpp, ohp, mic.mi[i].entity);
+ m_type = is_port(item) ? am_port : am_process;
+ t = TUPLE2(*hpp, m_type, item);
*hpp += 3;
res = CONS(*hpp, t, res);
*hpp += 2;
}
- }
-
+ } // hpp
DESTROY_MONITOR_INFOS(mic);
if (szp) {
@@ -2958,6 +2997,32 @@ erts_bld_port_info(Eterm **hpp, ErlOffHeap *ohp, Uint *szp, Port *prt, Eterm ite
goto done;
}
}
+ else if (item == am_monitored_by) {
+ MonitorInfoCollection mic;
+ int i;
+ Eterm item;
+
+ INIT_MONITOR_INFOS(mic);
+ erts_doforall_monitors(ERTS_P_MONITORS(prt),
+ &collect_one_target_monitor, &mic);
+ if (szp)
+ *szp += mic.sz;
+
+ if (hpp) {
+ res = NIL;
+ for (i = 0; i < mic.mi_i; ++i) {
+ item = STORE_NC(hpp, ohp, mic.mi[i].entity);
+ res = CONS(*hpp, item, res);
+ *hpp += 2;
+ }
+ } // hpp
+ DESTROY_MONITOR_INFOS(mic);
+
+ if (szp) {
+ res = am_true;
+ goto done;
+ }
+ }
else if (item == am_name) {
int count = sys_strlen(prt->name);
diff --git a/erts/emulator/beam/erl_bif_port.c b/erts/emulator/beam/erl_bif_port.c
index 37f4e1de49..90e78a9b0b 100644
--- a/erts/emulator/beam/erl_bif_port.c
+++ b/erts/emulator/beam/erl_bif_port.c
@@ -139,6 +139,12 @@ sig_lookup_port(Process *c_p, Eterm id_or_name)
return lookup_port(c_p, id_or_name, ERTS_PORT_SFLGS_INVALID_DRIVER_LOOKUP);
}
+/* Non-inline copy of sig_lookup_port to be exported */
+Port *erts_sig_lookup_port(Process *c_p, Eterm id_or_name)
+{
+ return lookup_port(c_p, id_or_name, ERTS_PORT_SFLGS_INVALID_DRIVER_LOOKUP);
+}
+
static ERTS_INLINE Port *
data_lookup_port(Process *c_p, Eterm id_or_name)
{
@@ -1411,7 +1417,7 @@ BIF_RETTYPE decode_packet_3(BIF_ALIST_3)
trunc_len = val;
goto next_option;
case am_line_delimiter:
- if (type == TCP_PB_LINE_LF && val >= 0 && val <= 255) {
+ if (type == TCP_PB_LINE_LF && val <= 255) {
delimiter = (char)val;
goto next_option;
}
diff --git a/erts/emulator/beam/erl_bif_re.c b/erts/emulator/beam/erl_bif_re.c
index f4daecd2a4..ff7746ce1d 100644
--- a/erts/emulator/beam/erl_bif_re.c
+++ b/erts/emulator/beam/erl_bif_re.c
@@ -630,9 +630,15 @@ static Eterm build_exec_return(Process *p, int rc, RestartContext *restartp, Ete
}
} else {
ReturnInfo *ri;
- ReturnInfo defri = {RetIndex,0,{0}};
+ ReturnInfo defri;
if (restartp->ret_info == NULL) {
+ /* OpenBSD 5.8 gcc compiler for some reason creates
+ bad code if the above initialization is done
+ inline with the struct. So don't do that. */
+ defri.type = RetIndex;
+ defri.num_spec = 0;
+ defri.v[0] = 0;
ri = &defri;
} else {
ri = restartp->ret_info;
diff --git a/erts/emulator/beam/erl_db.c b/erts/emulator/beam/erl_db.c
index bad34211a5..128a7b3865 100644
--- a/erts/emulator/beam/erl_db.c
+++ b/erts/emulator/beam/erl_db.c
@@ -1094,7 +1094,7 @@ BIF_RETTYPE ets_insert_2(BIF_ALIST_2)
CHECK_TABLES();
- /* Write lock table if more than one object to keep atomicy */
+ /* Write lock table if more than one object to keep atomicity */
kind = ((is_list(BIF_ARG_2) && CDR(list_val(BIF_ARG_2)) != NIL)
? LCK_WRITE : LCK_WRITE_REC);
@@ -1164,7 +1164,7 @@ BIF_RETTYPE ets_insert_new_2(BIF_ALIST_2)
Eterm lookup_ret;
DbTableMethod* meth;
- /* More than one object, use LCK_WRITE to keep atomicy */
+ /* More than one object, use LCK_WRITE to keep atomicity */
kind = LCK_WRITE;
tb = db_get_table(BIF_P, BIF_ARG_1, DB_WRITE, kind);
if (tb == NULL) {
diff --git a/erts/emulator/beam/erl_db_hash.c b/erts/emulator/beam/erl_db_hash.c
index 74979f984a..5e6fe4f460 100644
--- a/erts/emulator/beam/erl_db_hash.c
+++ b/erts/emulator/beam/erl_db_hash.c
@@ -40,7 +40,7 @@
** DB_FINE_LOCKED set. The table variable is_thread_safe will then indicate
** if operations need to obtain fine grained locks or not. Some operations
** will for example always use exclusive table lock to guarantee
-** a higher level of atomicy.
+** a higher level of atomicity.
*/
/* FIXATION:
@@ -2866,15 +2866,7 @@ db_lookup_dbterm_hash(Process *p, DbTable *tbl, Eterm key, Eterm obj,
q->hvalue = hval;
q->next = NULL;
*bp = b = q;
-
- {
- int nitems = erts_smp_atomic_inc_read_nob(&tb->common.nitems);
- int nactive = NACTIVE(tb);
-
- if (nitems > nactive * (CHAIN_LEN + 1) && !IS_FIXED(tb)) {
- grow(tb, nactive);
- }
- }
+ flags |= DB_INC_TRY_GROW;
} else {
HashDbTerm *q, *next = b->next;
@@ -2910,6 +2902,7 @@ db_finalize_dbterm_hash(int cret, DbUpdateHandle* handle)
HashDbTerm **bp = (HashDbTerm **) handle->bp;
HashDbTerm *b = *bp;
erts_smp_rwmtx_t* lck = (erts_smp_rwmtx_t*) handle->lck;
+ HashDbTerm* free_me = NULL;
ERTS_SMP_LC_ASSERT(IS_HASH_WLOCKED(tb, lck)); /* locked by db_lookup_dbterm_hash */
@@ -2921,21 +2914,34 @@ db_finalize_dbterm_hash(int cret, DbUpdateHandle* handle)
b->hvalue = INVALID_HASH;
} else {
*bp = b->next;
- free_term(tb, b);
+ free_me = b;
}
WUNLOCK_HASH(lck);
erts_smp_atomic_dec_nob(&tb->common.nitems);
try_shrink(tb);
- } else if (handle->flags & DB_MUST_RESIZE) {
- db_finalize_resize(handle, offsetof(HashDbTerm,dbterm));
- WUNLOCK_HASH(lck);
-
- free_term(tb, b);
- }
- else {
- WUNLOCK_HASH(lck);
+ } else {
+ if (handle->flags & DB_MUST_RESIZE) {
+ db_finalize_resize(handle, offsetof(HashDbTerm,dbterm));
+ free_me = b;
+ }
+ if (handle->flags & DB_INC_TRY_GROW) {
+ int nactive;
+ int nitems = erts_smp_atomic_inc_read_nob(&tb->common.nitems);
+ WUNLOCK_HASH(lck);
+ nactive = NACTIVE(tb);
+
+ if (nitems > nactive * (CHAIN_LEN + 1) && !IS_FIXED(tb)) {
+ grow(tb, nactive);
+ }
+ } else {
+ WUNLOCK_HASH(lck);
+ }
}
+
+ if (free_me)
+ free_term(tb, free_me);
+
#ifdef DEBUG
handle->dbterm = 0;
#endif
diff --git a/erts/emulator/beam/erl_db_util.h b/erts/emulator/beam/erl_db_util.h
index 60f7067d70..4acedbfed0 100644
--- a/erts/emulator/beam/erl_db_util.h
+++ b/erts/emulator/beam/erl_db_util.h
@@ -79,6 +79,7 @@ typedef union db_table DbTable;
#define DB_MUST_RESIZE 1
#define DB_NEW_OBJECT 2
+#define DB_INC_TRY_GROW 4
/* Info about a database entry while it's being updated
* (by update_counter or update_element)
diff --git a/erts/emulator/beam/erl_fun.c b/erts/emulator/beam/erl_fun.c
index 6ce1376c81..c639ba623f 100644
--- a/erts/emulator/beam/erl_fun.c
+++ b/erts/emulator/beam/erl_fun.c
@@ -199,14 +199,13 @@ erts_erase_fun_entry(ErlFunEntry* fe)
}
void
-erts_cleanup_funs_on_purge(BeamInstr* start, BeamInstr* end)
+erts_fun_purge_prepare(BeamInstr* start, BeamInstr* end)
{
int limit;
HashBucket** bucket;
- ErlFunEntry* to_delete = NULL;
int i;
- erts_fun_write_lock();
+ erts_fun_read_lock();
limit = erts_fun_table.size;
bucket = erts_fun_table.bucket;
for (i = 0; i < limit; i++) {
@@ -217,22 +216,51 @@ erts_cleanup_funs_on_purge(BeamInstr* start, BeamInstr* end)
BeamInstr* addr = fe->address;
if (start <= addr && addr < end) {
+ fe->pend_purge_address = addr;
+ ERTS_SMP_WRITE_MEMORY_BARRIER;
fe->address = unloaded_fun;
- if (erts_refc_dectest(&fe->refc, 0) == 0) {
- fe->address = (void *) to_delete;
- to_delete = fe;
- }
+ erts_purge_state_add_fun(fe);
}
b = b->next;
}
}
+ erts_fun_read_unlock();
+}
+
+void
+erts_fun_purge_abort_prepare(ErlFunEntry **funs, Uint no)
+{
+ Uint ix;
- while (to_delete != NULL) {
- ErlFunEntry* next = (ErlFunEntry *) to_delete->address;
- erts_erase_fun_entry_unlocked(to_delete);
- to_delete = next;
+ for (ix = 0; ix < no; ix++) {
+ ErlFunEntry *fe = funs[ix];
+ if (fe->address == unloaded_fun)
+ fe->address = fe->pend_purge_address;
+ fe->pend_purge_address = NULL;
}
- erts_fun_write_unlock();
+}
+
+void
+erts_fun_purge_abort_finalize(ErlFunEntry **funs, Uint no)
+{
+ Uint ix;
+
+ for (ix = 0; ix < no; ix++)
+ funs[ix]->pend_purge_address = NULL;
+}
+
+void
+erts_fun_purge_complete(ErlFunEntry **funs, Uint no)
+{
+ Uint ix;
+
+ for (ix = 0; ix < no; ix++) {
+ ErlFunEntry *fe = funs[ix];
+ fe->pend_purge_address = NULL;
+ if (erts_refc_dectest(&fe->refc, 0) == 0)
+ erts_erase_fun_entry(fe);
+ }
+ ERTS_SMP_WRITE_MEMORY_BARRIER;
}
void
@@ -294,6 +322,7 @@ fun_alloc(ErlFunEntry* template)
obj->module = template->module;
erts_refc_init(&obj->refc, -1);
obj->address = unloaded_fun;
+ obj->pend_purge_address = NULL;
#ifdef HIPE
obj->native_address = NULL;
#endif
diff --git a/erts/emulator/beam/erl_fun.h b/erts/emulator/beam/erl_fun.h
index 8c4deea7a0..73c3e19c1c 100644
--- a/erts/emulator/beam/erl_fun.h
+++ b/erts/emulator/beam/erl_fun.h
@@ -44,6 +44,7 @@ typedef struct erl_fun_entry {
Eterm module; /* Tagged atom for module. */
erts_refc_t refc; /* Reference count: One for code + one for each
fun object in each process. */
+ BeamInstr *pend_purge_address; /* address stored during a pending purge */
} ErlFunEntry;
/*
@@ -81,7 +82,10 @@ ErlFunEntry* erts_put_fun_entry2(Eterm mod, int old_uniq, int old_index,
void erts_erase_fun_entry(ErlFunEntry* fe);
void erts_cleanup_funs(ErlFunThing* funp);
-void erts_cleanup_funs_on_purge(BeamInstr* start, BeamInstr* end);
+void erts_fun_purge_prepare(BeamInstr* start, BeamInstr* end);
+void erts_fun_purge_abort_prepare(ErlFunEntry **funs, Uint no);
+void erts_fun_purge_abort_finalize(ErlFunEntry **funs, Uint no);
+void erts_fun_purge_complete(ErlFunEntry **funs, Uint no);
void erts_dump_fun_entries(int, void *);
#endif
diff --git a/erts/emulator/beam/erl_gc.c b/erts/emulator/beam/erl_gc.c
index d740b2baec..75f8ebefbd 100644
--- a/erts/emulator/beam/erl_gc.c
+++ b/erts/emulator/beam/erl_gc.c
@@ -517,6 +517,8 @@ delay_garbage_collection(Process *p, ErlHeapFragment *live_hf_end, int need, int
erts_proc_sched_data((p))->virtual_reds += vreds;
}
+ ERTS_CHK_MBUF_SZ(p);
+
ASSERT(CONTEXT_REDS >= erts_proc_sched_data(p)->virtual_reds);
return reds_left;
}
@@ -527,6 +529,8 @@ young_gen_usage(Process *p)
Uint hsz;
Eterm *aheap;
+ ERTS_CHK_MBUF_SZ(p);
+
hsz = p->mbuf_sz;
if (p->flags & F_ON_HEAP_MSGQ) {
@@ -590,6 +594,8 @@ garbage_collect(Process* p, ErlHeapFragment *live_hf_end,
DTRACE_CHARBUF(pidbuf, DTRACE_TERM_BUF_SIZE);
#endif
+ ERTS_CHK_MBUF_SZ(p);
+
ASSERT(CONTEXT_REDS - ERTS_REDS_LEFT(p, fcalls)
>= erts_proc_sched_data(p)->virtual_reds);
@@ -672,6 +678,7 @@ do_major_collection:
killed before a GC could be done. */
if (reds == -2) {
ErtsProcLocks locks = ERTS_PROC_LOCKS_ALL;
+ int res;
erts_smp_proc_lock(p, ERTS_PROC_LOCKS_ALL_MINOR);
erts_send_exit_signal(p, p->common.id, p, &locks,
@@ -683,7 +690,9 @@ do_major_collection:
erts_smp_atomic32_read_band_nob(&p->state, ~ERTS_PSFLG_GC);
/* We have to make sure that we have space for need on the heap */
- return delay_garbage_collection(p, live_hf_end, need, fcalls);
+ res = delay_garbage_collection(p, live_hf_end, need, fcalls);
+ ERTS_MSACC_POP_STATE_M();
+ return res;
}
erts_smp_atomic32_read_band_nob(&p->state, ~ERTS_PSFLG_GC);
@@ -882,6 +891,58 @@ erts_garbage_collect_hibernate(Process* p)
}
+/*
+ * HiPE native code stack scanning procedures:
+ * - fullsweep_nstack()
+ * - gensweep_nstack()
+ * - offset_nstack()
+ * - sweep_literals_nstack()
+ */
+#if defined(HIPE)
+
+#define GENSWEEP_NSTACK(p,old_htop,n_htop) \
+ do { \
+ Eterm *tmp_old_htop = old_htop; \
+ Eterm *tmp_n_htop = n_htop; \
+ gensweep_nstack((p), &tmp_old_htop, &tmp_n_htop); \
+ old_htop = tmp_old_htop; \
+ n_htop = tmp_n_htop; \
+ } while(0)
+
+/*
+ * offset_nstack() can ignore the descriptor-based traversal the other
+ * nstack procedures use and simply call offset_heap_ptr() instead.
+ * This relies on two facts:
+ * 1. The only live non-Erlang terms on an nstack are return addresses,
+ * and they will be skipped thanks to the low/high range check.
+ * 2. Dead values, even if mistaken for pointers into the low/high area,
+ * can be offset safely since they won't be dereferenced.
+ *
+ * XXX: WARNING: If HiPE starts storing other non-Erlang values on the
+ * nstack, such as floats, then this will have to be changed.
+ */
+static ERTS_INLINE void offset_nstack(Process* p, Sint offs,
+ char* area, Uint area_size)
+{
+ if (p->hipe.nstack) {
+ ASSERT(p->hipe.nsp && p->hipe.nstend);
+ offset_heap_ptr(hipe_nstack_start(p), hipe_nstack_used(p),
+ offs, area, area_size);
+ }
+ else {
+ ASSERT(!p->hipe.nsp && !p->hipe.nstend);
+ }
+}
+
+#else /* !HIPE */
+
+#define fullsweep_nstack(p,n_htop) (n_htop)
+#define GENSWEEP_NSTACK(p,old_htop,n_htop) do{}while(0)
+#define offset_nstack(p,offs,area,area_size) do{}while(0)
+#define sweep_literals_nstack(p,old_htop,area,area_size) (old_htop)
+
+#endif /* HIPE */
+
void
erts_garbage_collect_literals(Process* p, Eterm* literals,
Uint byte_lit_size,
@@ -944,7 +1005,7 @@ erts_garbage_collect_literals(Process* p, Eterm* literals,
area_size = byte_lit_size;
n = setup_rootset(p, p->arg_reg, p->arity, &rootset);
roots = rootset.roots;
- old_htop = p->old_htop;
+ old_htop = sweep_literals_nstack(p, p->old_htop, area, area_size);
while (n--) {
Eterm* g_ptr = roots->v;
Uint g_sz = roots->sz;
@@ -1183,22 +1244,14 @@ minor_collection(Process* p, ErlHeapFragment *live_hf_end,
adjust_size = p->htop - p->heap;
}
- goto done;
}
+ else if (need_after > HEAP_SIZE(p)) {
+ grow_new_heap(p, next_heap_size(p, need_after, 0), objv, nobj);
+ adjust_size = p->htop - p->heap;
+ }
+ /*else: The heap size turned out to be just right. We are done. */
- if (HEAP_SIZE(p) >= need_after) {
- /*
- * The heap size turned out to be just right. We are done.
- */
- goto done;
- }
-
- grow_new_heap(p, next_heap_size(p, need_after, 0), objv, nobj);
- adjust_size = p->htop - p->heap;
-
- done:
ASSERT(HEAP_SIZE(p) == next_heap_size(p, HEAP_SIZE(p), 0));
- ASSERT(MBUF(p) == NULL);
/* The heap usage during GC should be larger than what we end up
after a GC, even if we grow it. If this assertion is not true
@@ -1219,56 +1272,6 @@ minor_collection(Process* p, ErlHeapFragment *live_hf_end,
return -1;
}
-/*
- * HiPE native code stack scanning procedures:
- * - fullsweep_nstack()
- * - gensweep_nstack()
- * - offset_nstack()
- */
-#if defined(HIPE)
-
-#define GENSWEEP_NSTACK(p,old_htop,n_htop) \
- do { \
- Eterm *tmp_old_htop = old_htop; \
- Eterm *tmp_n_htop = n_htop; \
- gensweep_nstack((p), &tmp_old_htop, &tmp_n_htop); \
- old_htop = tmp_old_htop; \
- n_htop = tmp_n_htop; \
- } while(0)
-
-/*
- * offset_nstack() can ignore the descriptor-based traversal the other
- * nstack procedures use and simply call offset_heap_ptr() instead.
- * This relies on two facts:
- * 1. The only live non-Erlang terms on an nstack are return addresses,
- * and they will be skipped thanks to the low/high range check.
- * 2. Dead values, even if mistaken for pointers into the low/high area,
- * can be offset safely since they won't be dereferenced.
- *
- * XXX: WARNING: If HiPE starts storing other non-Erlang values on the
- * nstack, such as floats, then this will have to be changed.
- */
-static ERTS_INLINE void offset_nstack(Process* p, Sint offs,
- char* area, Uint area_size)
-{
- if (p->hipe.nstack) {
- ASSERT(p->hipe.nsp && p->hipe.nstend);
- offset_heap_ptr(hipe_nstack_start(p), hipe_nstack_used(p),
- offs, area, area_size);
- }
- else {
- ASSERT(!p->hipe.nsp && !p->hipe.nstend);
- }
-}
-
-#else /* !HIPE */
-
-#define fullsweep_nstack(p,n_htop) (n_htop)
-#define GENSWEEP_NSTACK(p,old_htop,n_htop) do{}while(0)
-#define offset_nstack(p,offs,area,area_size) do{}while(0)
-
-#endif /* HIPE */
-
static void
do_minor(Process *p, ErlHeapFragment *live_hf_end,
char *mature, Uint mature_size,
@@ -1591,6 +1594,9 @@ major_collection(Process* p, ErlHeapFragment *live_hf_end,
HIGH_WATER(p) = HEAP_TOP(p);
+#ifdef HARDDEBUG
+ disallow_heap_frag_ref_in_heap(p);
+#endif
remove_message_buffers(p);
if (p->flags & F_ON_HEAP_MSGQ)
@@ -1603,9 +1609,6 @@ major_collection(Process* p, ErlHeapFragment *live_hf_end,
adjusted = adjust_after_fullsweep(p, need, objv, nobj);
-#ifdef HARDDEBUG
- disallow_heap_frag_ref_in_heap(p);
-#endif
ErtsGcQuickSanityCheck(p);
return gc_cost(size_after, adjusted ? size_after : 0);
@@ -2279,10 +2282,7 @@ move_msgq_to_heap(Process *p)
}
else {
- if (mp->data.attached == ERTS_MSG_COMBINED_HFRAG)
- bp = &mp->hfrag;
- else
- bp = mp->data.heap_frag;
+ bp = erts_message_to_heap_frag(mp);
if (bp->next)
erts_move_multi_frags(&factory.hp, factory.off_heap, bp,
@@ -2296,18 +2296,13 @@ move_msgq_to_heap(Process *p)
free_message_buffer(bp);
}
else {
- ErtsMessage *tmp = erts_alloc_message(0, NULL);
- sys_memcpy((void *) tmp->m, (void *) mp->m,
- sizeof(Eterm)*ERL_MESSAGE_REF_ARRAY_SZ);
- tmp->next = mp->next;
- if (p->msg.save == &mp->next)
- p->msg.save = &tmp->next;
- if (p->msg.last == &mp->next)
- p->msg.last = &tmp->next;
- *mpp = tmp;
+ ErtsMessage *new_mp = erts_alloc_message(0, NULL);
+ sys_memcpy((void *) new_mp->m, (void *) mp->m,
+ sizeof(Eterm)*ERL_MESSAGE_REF_ARRAY_SZ);
+ erts_msgq_replace_msg_ref(&p->msg, new_mp, mpp);
mp->next = NULL;
erts_cleanup_messages(mp);
- mp = tmp;
+ mp = new_mp;
}
}
@@ -3304,11 +3299,7 @@ within2(Eterm *ptr, Process *p, Eterm *real_htop)
while (mp) {
- if (mp->data.attached == ERTS_MSG_COMBINED_HFRAG)
- bp = &mp->hfrag;
- else
- bp = mp->data.heap_frag;
-
+ bp = erts_message_to_heap_frag(mp);
mp = mp->next;
search_heap_frags:
diff --git a/erts/emulator/beam/erl_hl_timer.c b/erts/emulator/beam/erl_hl_timer.c
index ebeff51aac..f1bef28186 100644
--- a/erts/emulator/beam/erl_hl_timer.c
+++ b/erts/emulator/beam/erl_hl_timer.c
@@ -735,7 +735,10 @@ proc_timeout_common(Process *proc, void *tmr)
if (tmr == (void *) erts_smp_atomic_cmpxchg_mb(&proc->common.timer,
ERTS_PTMR_TIMEDOUT,
(erts_aint_t) tmr)) {
- erts_aint32_t state = erts_smp_atomic32_read_acqb(&proc->state);
+ erts_aint32_t state;
+ erts_smp_proc_lock(proc, ERTS_PROC_LOCKS_MSG_RECEIVE);
+ state = erts_smp_atomic32_read_acqb(&proc->state);
+ erts_smp_proc_unlock(proc, ERTS_PROC_LOCKS_MSG_RECEIVE);
if (!(state & (ERTS_PSFLG_ACTIVE|ERTS_PSFLG_EXITING)))
erts_schedule_process(proc, state, 0);
return 1;
diff --git a/erts/emulator/beam/erl_init.c b/erts/emulator/beam/erl_init.c
index 0649fb68de..781bf024dd 100644
--- a/erts/emulator/beam/erl_init.c
+++ b/erts/emulator/beam/erl_init.c
@@ -332,8 +332,6 @@ erl_init(int ncpu,
int node_tab_delete_delay,
ErtsDbSpinCount db_spin_count)
{
- init_benchmarking();
-
erts_bif_unique_init();
erts_init_monitors();
erts_init_time(time_correction, time_warp_mode);
@@ -384,6 +382,7 @@ erl_init(int ncpu,
erts_init_unicode(); /* after RE to get access to PCRE unicode */
erts_init_external();
erts_init_map();
+ erts_beam_bif_load_init();
erts_delay_trap = erts_export_put(am_erlang, am_delay_trap, 2);
erts_late_init_process();
#if HAVE_ERTS_MSEG
@@ -585,7 +584,7 @@ void erts_usage(void)
erts_fprintf(stderr, "-hpds size initial process dictionary size (default %d)\n",
erts_pd_initial_size);
erts_fprintf(stderr, "-hmqd val set default message queue data flag for processes,\n");
- erts_fprintf(stderr, " valid values are: off_heap | on_heap | mixed\n");
+ erts_fprintf(stderr, " valid values are: off_heap | on_heap\n");
/* erts_fprintf(stderr, "-i module set the boot module (default init)\n"); */
@@ -1526,9 +1525,7 @@ erl_start(int argc, char **argv)
erts_pd_initial_size));
} else if (has_prefix("mqd", sub_param)) {
arg = get_arg(sub_param+3, argv[i+1], &i);
- if (sys_strcmp(arg, "mixed") == 0)
- erts_default_spo_flags &= ~(SPO_ON_HEAP_MSGQ|SPO_OFF_HEAP_MSGQ);
- else if (sys_strcmp(arg, "on_heap") == 0) {
+ if (sys_strcmp(arg, "on_heap") == 0) {
erts_default_spo_flags &= ~SPO_OFF_HEAP_MSGQ;
erts_default_spo_flags |= SPO_ON_HEAP_MSGQ;
}
@@ -2252,7 +2249,42 @@ erl_start(int argc, char **argv)
otp_ring0_pid = erl_first_process_otp("otp_ring0", NULL, 0,
boot_argc, boot_argv);
- (void) erl_system_process_otp(otp_ring0_pid, "erts_code_purger");
+ {
+ /*
+ * The erts_code_purger and the erts_literal_area_collector
+ * system processes are *always* alive. If they terminate
+ * they bring the whole VM down.
+ */
+ Eterm pid;
+
+ pid = erl_system_process_otp(otp_ring0_pid, "erts_code_purger");
+ erts_code_purger
+ = (Process *) erts_ptab_pix2intptr_ddrb(&erts_proc,
+ internal_pid_index(pid));
+ ASSERT(erts_code_purger && erts_code_purger->common.id == pid);
+ erts_proc_inc_refc(erts_code_purger);
+
+#ifdef ERTS_NEW_PURGE_STRATEGY
+ pid = erl_system_process_otp(otp_ring0_pid, "erts_literal_area_collector");
+ erts_literal_area_collector
+ = (Process *) erts_ptab_pix2intptr_ddrb(&erts_proc,
+ internal_pid_index(pid));
+ ASSERT(erts_literal_area_collector
+ && erts_literal_area_collector->common.id == pid);
+ erts_proc_inc_refc(erts_literal_area_collector);
+#endif
+
+#ifdef ERTS_DIRTY_SCHEDULERS
+ pid = erl_system_process_otp(otp_ring0_pid, "erts_dirty_process_code_checker");
+ erts_dirty_process_code_checker
+ = (Process *) erts_ptab_pix2intptr_ddrb(&erts_proc,
+ internal_pid_index(pid));
+ ASSERT(erts_dirty_process_code_checker
+ && erts_dirty_process_code_checker->common.id == pid);
+ erts_proc_inc_refc(erts_dirty_process_code_checker);
+#endif
+
+ }
#ifdef ERTS_SMP
erts_start_schedulers();
@@ -2347,19 +2379,18 @@ erts_exit_vv(int n, int flush_async, char *fmt, va_list args1, va_list args2)
{
system_cleanup(flush_async);
- save_statistics();
-
if (erts_mtrace_enabled)
erts_mtrace_exit((Uint32) n);
+ if (fmt != NULL && *fmt != '\0')
+ erl_error(fmt, args2); /* Print error message. */
+
/* Produce an Erlang core dump if error */
if (((n == ERTS_ERROR_EXIT && erts_no_crash_dump == 0) || n == ERTS_DUMP_EXIT)
&& erts_initialized) {
erl_crash_dump_v((char*) NULL, 0, fmt, args1);
}
- if (fmt != NULL && *fmt != '\0')
- erl_error(fmt, args2); /* Print error message. */
sys_tty_reset(n);
if (n == ERTS_INTR_EXIT)
diff --git a/erts/emulator/beam/erl_lock_check.c b/erts/emulator/beam/erl_lock_check.c
index 39c0617143..06266363b5 100644
--- a/erts/emulator/beam/erl_lock_check.c
+++ b/erts/emulator/beam/erl_lock_check.c
@@ -96,6 +96,7 @@ static erts_lc_lock_order_t erts_lock_order[] = {
{ "dist_entry", "address" },
{ "dist_entry_links", "address" },
{ "code_write_permission", NULL },
+ { "purge_state", NULL },
{ "proc_status", "pid" },
{ "proc_trace", "pid" },
{ "ports_snapshot", NULL },
@@ -112,6 +113,9 @@ static erts_lc_lock_order_t erts_lock_order[] = {
{ "export_tab", NULL },
{ "fun_tab", NULL },
{ "environ", NULL },
+#ifdef ERTS_NEW_PURGE_STRATEGY
+ { "release_literal_areas", NULL },
+#endif
#endif
{ "efile_drv", "address" },
{ "drv_ev_state_grow", NULL, },
diff --git a/erts/emulator/beam/erl_map.c b/erts/emulator/beam/erl_map.c
index 8efc983f04..979a0040b0 100644
--- a/erts/emulator/beam/erl_map.c
+++ b/erts/emulator/beam/erl_map.c
@@ -497,18 +497,50 @@ Eterm erts_hashmap_from_array(ErtsHeapFactory* factory, Eterm *leafs, Uint n,
return res;
}
+Eterm erts_map_from_ks_and_vs(ErtsHeapFactory *factory, Eterm *ks0, Eterm *vs0, Uint n)
+{
+ if (n < MAP_SMALL_MAP_LIMIT) {
+ Eterm *ks, *vs, *hp;
+ flatmap_t *mp;
+ Eterm keys;
-Eterm erts_hashmap_from_ks_and_vs_extra(Process *p, Eterm *ks, Eterm *vs, Uint n,
+ hp = erts_produce_heap(factory, 3 + 1 + (2 * n), 0);
+ keys = make_tuple(hp);
+ *hp++ = make_arityval(n);
+ ks = hp;
+ hp += n;
+ mp = (flatmap_t*)hp;
+ hp += MAP_HEADER_FLATMAP_SZ;
+ vs = hp;
+
+ mp->thing_word = MAP_HEADER_FLATMAP;
+ mp->size = n;
+ mp->keys = keys;
+
+ sys_memcpy(ks, ks0, n * sizeof(Eterm));
+ sys_memcpy(vs, vs0, n * sizeof(Eterm));
+
+ erts_validate_and_sort_flatmap(mp);
+
+ return make_flatmap(mp);
+ } else {
+ return erts_hashmap_from_ks_and_vs(factory, ks0, vs0, n);
+ }
+ return THE_NON_VALUE;
+}
+
+
+Eterm erts_hashmap_from_ks_and_vs_extra(ErtsHeapFactory *factory,
+ Eterm *ks, Eterm *vs, Uint n,
Eterm key, Eterm value) {
Uint32 sw, hx;
Uint i,sz;
hxnode_t *hxns;
- ErtsHeapFactory factory;
Eterm *hp, res;
sz = (key == THE_NON_VALUE) ? n : (n + 1);
ASSERT(sz > MAP_SMALL_MAP_LIMIT);
- hp = HAlloc(p, 2 * sz);
+ hp = erts_produce_heap(factory, 2 * sz, 0);
/* create tmp hx values and leaf ptrs */
hxns = (hxnode_t *)erts_alloc(ERTS_ALC_T_TMP, sz * sizeof(hxnode_t));
@@ -531,12 +563,9 @@ Eterm erts_hashmap_from_ks_and_vs_extra(Process *p, Eterm *ks, Eterm *vs, Uint n
hxns[i].i = i;
}
- erts_factory_proc_init(&factory, p);
- res = hashmap_from_unsorted_array(&factory, hxns, sz, 0);
- erts_factory_close(&factory);
+ res = hashmap_from_unsorted_array(factory, hxns, sz, 0);
erts_free(ERTS_ALC_T_TMP, (void *) hxns);
- ERTS_VERIFY_UNUSED_TEMP_ALLOC(p);
return res;
}
@@ -1780,11 +1809,14 @@ Eterm erts_maps_put(Process *p, Eterm key, Eterm value, Eterm map) {
/* the map will grow */
if (n >= MAP_SMALL_MAP_LIMIT) {
+ ErtsHeapFactory factory;
HRelease(p, shp + MAP_HEADER_FLATMAP_SZ + n, shp);
ks = flatmap_get_keys(mp);
vs = flatmap_get_values(mp);
- res = erts_hashmap_from_ks_and_vs_extra(p,ks,vs,n,key,value);
+ erts_factory_proc_init(&factory, p);
+ res = erts_hashmap_from_ks_and_vs_extra(&factory,ks,vs,n,key,value);
+ erts_factory_close(&factory);
return res;
}
diff --git a/erts/emulator/beam/erl_map.h b/erts/emulator/beam/erl_map.h
index 8b5c9582ba..61a841f7f0 100644
--- a/erts/emulator/beam/erl_map.h
+++ b/erts/emulator/beam/erl_map.h
@@ -98,10 +98,12 @@ Eterm* hashmap_iterator_prev(struct ErtsWStack_* s);
int hashmap_key_hash_cmp(Eterm* ap, Eterm* bp);
Eterm erts_hashmap_from_array(ErtsHeapFactory*, Eterm *leafs, Uint n, int reject_dupkeys);
-#define erts_hashmap_from_ks_and_vs(P, KS, VS, N) \
- erts_hashmap_from_ks_and_vs_extra((P), (KS), (VS), (N), THE_NON_VALUE, THE_NON_VALUE);
+#define erts_hashmap_from_ks_and_vs(F, KS, VS, N) \
+ erts_hashmap_from_ks_and_vs_extra((F), (KS), (VS), (N), THE_NON_VALUE, THE_NON_VALUE);
-Eterm erts_hashmap_from_ks_and_vs_extra(Process *p, Eterm *ks, Eterm *vs, Uint n,
+Eterm erts_map_from_ks_and_vs(ErtsHeapFactory *factory, Eterm *ks, Eterm *vs, Uint n);
+Eterm erts_hashmap_from_ks_and_vs_extra(ErtsHeapFactory *factory,
+ Eterm *ks, Eterm *vs, Uint n,
Eterm k, Eterm v);
const Eterm *erts_maps_get(Eterm key, Eterm map);
diff --git a/erts/emulator/beam/erl_message.c b/erts/emulator/beam/erl_message.c
index 579f6e427d..e4c696ae3b 100644
--- a/erts/emulator/beam/erl_message.c
+++ b/erts/emulator/beam/erl_message.c
@@ -697,9 +697,6 @@ erts_send_message(Process* sender,
#ifdef SHCOPY_SEND
erts_shcopy_t info;
#endif
- BM_STOP_TIMER(system);
- BM_MESSAGE(message,sender,receiver);
- BM_START_TIMER(send);
#ifdef USE_VM_PROBES
*sender_name = *receiver_name = '\0';
@@ -720,7 +717,6 @@ erts_send_message(Process* sender,
#ifdef USE_VM_PROBES
Uint dt_utag_size = 0;
#endif
- BM_SWAP_TIMER(send,size);
/* SHCOPY corrupts the heap between
* copy_shared_calculate, and
@@ -747,8 +743,6 @@ erts_send_message(Process* sender,
#else
msize = size_object(message);
#endif
- BM_SWAP_TIMER(size,send);
-
mp = erts_alloc_message_heap_state(receiver,
&receiver_state,
receiver_locks,
@@ -760,8 +754,6 @@ erts_send_message(Process* sender,
&hp,
&ohp);
- BM_SWAP_TIMER(send,copy);
-
#ifdef SHCOPY_SEND
if (is_not_immed(message))
message = copy_shared_perform(message, msize, &info, &hp, ohp);
@@ -792,9 +784,6 @@ erts_send_message(Process* sender,
msize, tok_label, tok_lastcnt, tok_serial);
}
#endif
- BM_MESSAGE_COPIED(msize);
- BM_SWAP_TIMER(copy,send);
-
} else {
Eterm *hp;
@@ -803,22 +792,18 @@ erts_send_message(Process* sender,
msize = 0;
}
else {
- BM_SWAP_TIMER(send,size);
#ifdef SHCOPY_SEND
INITIALIZE_SHCOPY(info);
msize = copy_shared_calculate(message, &info);
#else
msize = size_object(message);
#endif
- BM_SWAP_TIMER(size,send);
-
mp = erts_alloc_message_heap_state(receiver,
&receiver_state,
receiver_locks,
msize,
&hp,
&ohp);
- BM_SWAP_TIMER(send,copy);
#ifdef SHCOPY_SEND
if (is_not_immed(message))
message = copy_shared_perform(message, msize, &info, &hp, ohp);
@@ -827,8 +812,6 @@ erts_send_message(Process* sender,
if (is_not_immed(message))
message = copy_struct(message, msize, &hp, ohp);
#endif
- BM_MESSAGE_COPIED(msz);
- BM_SWAP_TIMER(copy,send);
}
#ifdef USE_VM_PROBES
DTRACE6(message_send, sender_name, receiver_name,
@@ -846,8 +829,6 @@ erts_send_message(Process* sender,
mp, message,
sender->common.id);
- BM_SWAP_TIMER(send,system);
-
return res;
}
@@ -1123,11 +1104,9 @@ erts_change_message_queue_management(Process *c_p, Eterm new_state)
break;
case am_on_heap:
c_p->flags |= F_ON_HEAP_MSGQ;
+ c_p->flags &= ~F_OFF_HEAP_MSGQ;
erts_smp_atomic32_read_bor_nob(&c_p->state,
ERTS_PSFLG_ON_HEAP_MSGQ);
- /* fall through */
- case am_mixed:
- c_p->flags &= ~F_OFF_HEAP_MSGQ;
/*
* We are not allowed to clear ERTS_PSFLG_OFF_HEAP_MSGQ
* if a off heap change is ongoing. It will be adjusted
@@ -1151,11 +1130,6 @@ erts_change_message_queue_management(Process *c_p, Eterm new_state)
switch (new_state) {
case am_on_heap:
break;
- case am_mixed:
- c_p->flags &= ~F_ON_HEAP_MSGQ;
- erts_smp_atomic32_read_band_nob(&c_p->state,
- ~ERTS_PSFLG_ON_HEAP_MSGQ);
- break;
case am_off_heap:
c_p->flags &= ~F_ON_HEAP_MSGQ;
erts_smp_atomic32_read_band_nob(&c_p->state,
@@ -1167,25 +1141,6 @@ erts_change_message_queue_management(Process *c_p, Eterm new_state)
}
break;
- case 0:
- res = am_mixed;
-
- switch (new_state) {
- case am_mixed:
- break;
- case am_on_heap:
- c_p->flags |= F_ON_HEAP_MSGQ;
- erts_smp_atomic32_read_bor_nob(&c_p->state,
- ERTS_PSFLG_ON_HEAP_MSGQ);
- break;
- case am_off_heap:
- goto change_to_off_heap;
- default:
- res = THE_NON_VALUE; /* badarg */
- break;
- }
- break;
-
default:
res = am_error;
ERTS_INTERNAL_ERROR("Inconsistent message queue management state");
@@ -1371,10 +1326,10 @@ erts_prep_msgq_for_inspection(Process *c_p, Process *rp,
mpp = i == 0 ? &rp->msg.first : &mip[i-1].msgp->next;
- if (rp->msg.save == &bad_mp->next)
- rp->msg.save = mpp;
- if (rp->msg.last == &bad_mp->next)
- rp->msg.last = mpp;
+ ASSERT(*mpp == bad_mp);
+
+ erts_msgq_update_internal_pointers(&rp->msg, mpp, &bad_mp->next);
+
mp = mp->next;
*mpp = mp;
rp->msg.len--;
@@ -1411,12 +1366,7 @@ erts_prep_msgq_for_inspection(Process *c_p, Process *rp,
sys_memcpy((void *) tmp->m, (void *) mp->m,
sizeof(Eterm)*ERL_MESSAGE_REF_ARRAY_SZ);
mpp = i == 0 ? &rp->msg.first : &mip[i-1].msgp->next;
- tmp->next = mp->next;
- if (rp->msg.save == &mp->next)
- rp->msg.save = &tmp->next;
- if (rp->msg.last == &mp->next)
- rp->msg.last = &tmp->next;
- *mpp = tmp;
+ erts_msgq_replace_msg_ref(&rp->msg, tmp, mpp);
erts_save_message_in_proc(rp, mp);
mp = tmp;
}
@@ -1756,7 +1706,7 @@ void erts_factory_trim_and_close(ErtsHeapFactory* factory,
case FACTORY_MESSAGE: {
ErtsMessage *mp = factory->message;
if (mp->data.attached == ERTS_MSG_COMBINED_HFRAG) {
- if (!mp->hfrag.next) {
+ if (!factory->heap_frags) {
Uint sz = factory->hp - factory->hp_start;
mp = erts_shrink_message(mp, sz, brefs, brefs_size);
factory->message = mp;
@@ -1892,3 +1842,20 @@ void erts_factory_undo(ErtsHeapFactory* factory)
factory->heap_frags = NULL;
#endif
}
+
+Uint
+erts_mbuf_size(Process *p)
+{
+ Uint sz = 0;
+ ErlHeapFragment* bp;
+ ErtsMessage* mp;
+
+ for (bp = p->mbuf; bp; bp = bp->next)
+ sz += bp->used_size;
+
+ for (mp = p->msg_frag; mp; mp = mp->next)
+ for (bp = erts_message_to_heap_frag(mp); bp; bp = bp->next)
+ sz += bp->used_size;
+
+ return sz;
+}
diff --git a/erts/emulator/beam/erl_message.h b/erts/emulator/beam/erl_message.h
index 851ac37fda..42ed14e69c 100644
--- a/erts/emulator/beam/erl_message.h
+++ b/erts/emulator/beam/erl_message.h
@@ -112,8 +112,8 @@ typedef struct erl_heap_fragment ErlHeapFragment;
struct erl_heap_fragment {
ErlHeapFragment* next; /* Next heap fragment */
ErlOffHeap off_heap; /* Offset heap data. */
- unsigned alloc_size; /* Size in (half)words of mem */
- unsigned used_size; /* With terms to be moved to heap by GC */
+ Uint alloc_size; /* Size in (half)words of mem */
+ Uint used_size; /* With terms to be moved to heap by GC */
Eterm mem[1]; /* Data */
};
@@ -366,9 +366,19 @@ ERTS_GLB_FORCE_INLINE ErtsMessage *erts_shrink_message(ErtsMessage *mp, Uint sz,
ERTS_GLB_FORCE_INLINE void erts_free_message(ErtsMessage *mp);
ERTS_GLB_INLINE Uint erts_used_frag_sz(const ErlHeapFragment*);
ERTS_GLB_INLINE Uint erts_msg_attached_data_size(ErtsMessage *msg);
+ERTS_GLB_INLINE void erts_msgq_update_internal_pointers(ErlMessageQueue *msgq,
+ ErtsMessage **newpp,
+ ErtsMessage **oldpp);
+ERTS_GLB_INLINE void erts_msgq_replace_msg_ref(ErlMessageQueue *msgq,
+ ErtsMessage *newp,
+ ErtsMessage **oldpp);
#define ERTS_MSG_COMBINED_HFRAG ((void *) 0x1)
+#define erts_message_to_heap_frag(MP) \
+ (((MP)->data.attached == ERTS_MSG_COMBINED_HFRAG) ? \
+ &(MP)->hfrag : (MP)->data.heap_frag)
+
#if ERTS_GLB_INLINE_INCL_FUNC_DEF
ERTS_GLB_FORCE_INLINE ErtsMessage *erts_alloc_message(Uint sz, Eterm **hpp)
@@ -449,10 +459,7 @@ ERTS_GLB_INLINE Uint erts_msg_attached_data_size(ErtsMessage *msg)
ASSERT(msg->data.attached);
if (is_value(ERL_MESSAGE_TERM(msg))) {
ErlHeapFragment *bp;
- if (msg->data.attached == ERTS_MSG_COMBINED_HFRAG)
- bp = &msg->hfrag;
- else
- bp = msg->data.heap_frag;
+ bp = erts_message_to_heap_frag(msg);
return erts_used_frag_sz(bp);
}
else if (msg->data.dist_ext->heap_size < 0)
@@ -467,6 +474,40 @@ ERTS_GLB_INLINE Uint erts_msg_attached_data_size(ErtsMessage *msg)
return sz;
}
}
+
+ERTS_GLB_INLINE void
+erts_msgq_update_internal_pointers(ErlMessageQueue *msgq,
+ ErtsMessage **newpp,
+ ErtsMessage **oldpp)
+{
+ if (msgq->save == oldpp)
+ msgq->save = newpp;
+ if (msgq->last == oldpp)
+ msgq->last = newpp;
+ if (msgq->saved_last == oldpp)
+ msgq->saved_last = newpp;
+}
+
+ERTS_GLB_INLINE void
+erts_msgq_replace_msg_ref(ErlMessageQueue *msgq, ErtsMessage *newp, ErtsMessage **oldpp)
+{
+ ErtsMessage *oldp = *oldpp;
+ newp->next = oldp->next;
+ erts_msgq_update_internal_pointers(msgq, &newp->next, &oldp->next);
+ *oldpp = newp;
+}
+
+#endif
+
+Uint erts_mbuf_size(Process *p);
+#if defined(DEBUG) || 0
+# define ERTS_CHK_MBUF_SZ(P) \
+ do { \
+ Uint actual_mbuf_sz__ = erts_mbuf_size((P)); \
+ ERTS_ASSERT((P)->mbuf_sz >= actual_mbuf_sz__); \
+ } while (0)
+#else
+# define ERTS_CHK_MBUF_SZ(P) ((void) 1)
#endif
#endif
diff --git a/erts/emulator/beam/erl_msacc.c b/erts/emulator/beam/erl_msacc.c
index 544bc8b983..421445fbad 100644
--- a/erts/emulator/beam/erl_msacc.c
+++ b/erts/emulator/beam/erl_msacc.c
@@ -40,10 +40,11 @@
#include "erl_bif_unique.h"
#include "erl_map.h"
#include "erl_msacc.h"
+#include "erl_bif_table.h"
#if ERTS_ENABLE_MSACC
-static Eterm erts_msacc_gather_stats(ErtsMsAcc *msacc, Eterm **hpp, Uint *szp);
+static Eterm erts_msacc_gather_stats(ErtsMsAcc *msacc, ErtsHeapFactory *factory);
static void erts_msacc_reset(ErtsMsAcc *msacc);
static ErtsMsAcc* get_msacc(void);
@@ -52,7 +53,9 @@ erts_tsd_key_t ERTS_WRITE_UNLIKELY(erts_msacc_key);
#else
ErtsMsAcc *ERTS_WRITE_UNLIKELY(erts_msacc) = NULL;
#endif
+#ifndef ERTS_MSACC_ALWAYS_ON
int ERTS_WRITE_UNLIKELY(erts_msacc_enabled);
+#endif
static Eterm *erts_msacc_state_atoms = NULL;
static erts_rwmtx_t msacc_mutex;
@@ -62,6 +65,12 @@ static ErtsMsAcc *msacc_unmanaged = NULL;
static Uint msacc_unmanaged_count = 0;
#endif
+#if ERTS_MSACC_STATE_COUNT < MAP_SMALL_MAP_LIMIT
+#define DEFAULT_MSACC_MSG_SIZE (3 + 1 + ERTS_MSACC_STATE_COUNT * 2 + 3 + REF_THING_SIZE)
+#else
+#define DEFAULT_MSACC_MSG_SIZE (3 + ERTS_MSACC_STATE_COUNT * 3 + 3 + REF_THING_SIZE)
+#endif
+
/* we have to split initiation as atoms are not inited in early init */
void erts_msacc_early_init(void) {
#ifndef ERTS_MSACC_ALWAYS_ON
@@ -88,7 +97,8 @@ void erts_msacc_init(void) {
void erts_msacc_init_thread(char *type, int id, int managed) {
ErtsMsAcc *msacc;
- msacc = erts_alloc(ERTS_ALC_T_MSACC, sizeof(ErtsMsAcc));
+ msacc = erts_alloc(ERTS_ALC_T_MSACC, sizeof(ErtsMsAcc) +
+ sizeof(ErtsMsAccPerfCntr) * ERTS_MSACC_STATE_COUNT);
msacc->type = strdup(type);
msacc->id = make_small(id);
@@ -122,79 +132,80 @@ void erts_msacc_init_thread(char *type, int id, int managed) {
#endif
}
+#ifdef ERTS_MSACC_EXTENDED_STATES
+
+void erts_msacc_set_bif_state(ErtsMsAcc *__erts_msacc_cache, Eterm mod, void *fn) {
+
+#ifdef ERTS_MSACC_EXTENDED_BIFS
+#define BIF_LIST(Mod,Func,Arity,FuncAddr,Num) \
+ if (fn == &FuncAddr) { \
+ ERTS_MSACC_SET_STATE_CACHED_M_X(ERTS_MSACC_STATIC_STATE_COUNT + Num); \
+ } else
+#include "erl_bif_list.h"
+#undef BIF_LIST
+ { /* The last else in the macro expansion,
+ this happens for internal bifs, i.e. traps etc */
+ ERTS_MSACC_SET_STATE_CACHED_M_X(ERTS_MSACC_STATE_BIF);
+ }
+#else
+ if (mod == am_ets) {
+ ERTS_MSACC_SET_STATE_CACHED_M_X(ERTS_MSACC_STATE_ETS);
+ } else {
+ ERTS_MSACC_SET_STATE_CACHED_M_X(ERTS_MSACC_STATE_BIF);
+ }
+#endif
+}
+
+#endif
+
/*
* Creates a structure looking like this
* #{ type => scheduler, id => 1, counters => #{ State1 => Counter1 ... StateN => CounterN}}
*/
static
-Eterm erts_msacc_gather_stats(ErtsMsAcc *msacc, Eterm **hpp, Uint *szp) {
+Eterm erts_msacc_gather_stats(ErtsMsAcc *msacc, ErtsHeapFactory *factory) {
+ Uint sz = 0;
+ Eterm *hp, cvs[ERTS_MSACC_STATE_COUNT];
+ Eterm key, state_map;
int i;
- Eterm *hp;
- Eterm key, state_key, state_map;
- Eterm res = THE_NON_VALUE;
- flatmap_t *map;
-
- if (szp) {
- *szp += MAP_HEADER_FLATMAP_SZ + 1 + 2*(3);
- *szp += MAP_HEADER_FLATMAP_SZ + 1 + 2*(ERTS_MSACC_STATE_COUNT);
- for (i = 0; i < ERTS_MSACC_STATE_COUNT; i++) {
- (void)erts_bld_sint64(NULL,szp,(Sint64)msacc->perf_counters[i]);
+ flatmap_t *map;
+
+ hp = erts_produce_heap(factory, 4, 0);
+ key = TUPLE3(hp,am_counters,am_id,am_type);
+
+ for (i = 0; i < ERTS_MSACC_STATE_COUNT; i++) {
+ cvs[i] = erts_bld_sint64(NULL, &sz,(Sint64)msacc->counters[i].pc);
#ifdef ERTS_MSACC_STATE_COUNTERS
- (void)erts_bld_uint64(NULL,szp,msacc->state_counters[i]);
- *szp += 3; /* tuple to put state+perf counter in */
+ erts_bld_uint64(NULL,&sz,msacc->counters[i].sc);
+ sz += 3;
#endif
- }
}
- if (hpp) {
- Eterm counters[ERTS_MSACC_STATE_COUNT];
- hp = *hpp;
- for (i = 0; i < ERTS_MSACC_STATE_COUNT; i++) {
- Eterm counter = erts_bld_sint64(&hp,NULL,(Sint64)msacc->perf_counters[i]);
+ hp = erts_produce_heap(factory, sz, 0);
+
+ for (i = 0; i < ERTS_MSACC_STATE_COUNT; i++) {
+ cvs[i] = erts_bld_sint64(&hp,NULL,(Sint64)msacc->counters[i].pc);
#ifdef ERTS_MSACC_STATE_COUNTERS
- Eterm counter__ = erts_bld_uint64(&hp,NULL,msacc->state_counters[i]);
- counters[i] = TUPLE2(hp,counter,counter__);
- hp += 3;
-#else
- counters[i] = counter;
+ Eterm counter__ = erts_bld_uint64(&hp,NULL,msacc->counters[i].sc);
+ cvs[i] = TUPLE2(hp,cvs[i],counter__);
+ hp += 3;
#endif
- }
-
- key = TUPLE3(hp,am_counters,am_id,am_type);
- hp += 4;
-
- state_key = make_tuple(hp);
- hp[0] = make_arityval(ERTS_MSACC_STATE_COUNT);
-
- for (i = 0; i < ERTS_MSACC_STATE_COUNT; i++)
- hp[1+i] = erts_msacc_state_atoms[i];
- hp += 1 + ERTS_MSACC_STATE_COUNT;
-
- map = (flatmap_t*)hp;
- hp += MAP_HEADER_FLATMAP_SZ;
- map->thing_word = MAP_HEADER_FLATMAP;
- map->size = ERTS_MSACC_STATE_COUNT;
- map->keys = state_key;
- for (i = 0; i < ERTS_MSACC_STATE_COUNT; i++)
- hp[i] = counters[i];
- hp += ERTS_MSACC_STATE_COUNT;
- state_map = make_flatmap(map);
-
- map = (flatmap_t*)hp;
- hp += MAP_HEADER_FLATMAP_SZ;
- map->thing_word = MAP_HEADER_FLATMAP;
- map->size = 3;
- map->keys = key;
- hp[0] = state_map;
- hp[1] = msacc->id;
- hp[2] = am_atom_put(msacc->type,strlen(msacc->type));
- hp += 3;
-
- *hpp = hp;
- res = make_flatmap(map);
}
- return res;
+ state_map = erts_map_from_ks_and_vs(factory, erts_msacc_state_atoms, cvs,
+ ERTS_MSACC_STATE_COUNT);
+
+ hp = erts_produce_heap(factory, MAP_HEADER_FLATMAP_SZ + 3, 0);
+ map = (flatmap_t*)hp;
+ hp += MAP_HEADER_FLATMAP_SZ;
+ map->thing_word = MAP_HEADER_FLATMAP;
+ map->size = 3;
+ map->keys = key;
+ hp[0] = state_map;
+ hp[1] = msacc->id;
+ hp[2] = am_atom_put(msacc->type,strlen(msacc->type));
+
+ return make_flatmap(map);
}
typedef struct {
@@ -222,40 +233,31 @@ static void send_reply(ErtsMsAcc *msacc, ErtsMSAccReq *msaccrp) {
ErtsSchedulerData *esdp = erts_get_scheduler_data();
Process *rp = msaccrp->proc;
ErtsMessage *msgp = NULL;
- Eterm **hpp, *hp;
+ Eterm *hp;
Eterm ref_copy = NIL, msg;
- Uint sz, *szp;
- ErlOffHeap *ohp = NULL;
ErtsProcLocks rp_locks = (esdp && msaccrp->req_sched == esdp->no
? ERTS_PROC_LOCK_MAIN : 0);
+ ErtsHeapFactory factory;
- sz = 0;
- hpp = NULL;
- szp = &sz;
-
- if (msacc->unmanaged) erts_mtx_lock(&msacc->mtx);
-
- while (1) {
- if (hpp)
- ref_copy = STORE_NC(hpp, ohp, msaccrp->ref);
- else
- *szp += REF_THING_SIZE;
-
- if (msaccrp->action != ERTS_MSACC_GATHER)
- msg = ref_copy;
- else {
- msg = erts_msacc_gather_stats(msacc, hpp, szp);
- msg = erts_bld_tuple(hpp, szp, 2, ref_copy, msg);
- }
- if (hpp)
- break;
-
- msgp = erts_alloc_message_heap(rp, &rp_locks, sz, &hp, &ohp);
- hpp = &hp;
- szp = NULL;
- }
+ if (msaccrp->action == ERTS_MSACC_GATHER) {
+
+ msgp = erts_factory_message_create(&factory, rp, &rp_locks, DEFAULT_MSACC_MSG_SIZE);
+
+ if (msacc->unmanaged) erts_mtx_lock(&msacc->mtx);
- if (msacc->unmanaged) erts_mtx_unlock(&msacc->mtx);
+ hp = erts_produce_heap(&factory, REF_THING_SIZE + 3 /* tuple */, 0);
+ ref_copy = STORE_NC(&hp, &msgp->hfrag.off_heap, msaccrp->ref);
+ msg = erts_msacc_gather_stats(msacc, &factory);
+ msg = TUPLE2(hp, ref_copy, msg);
+
+ if (msacc->unmanaged) erts_mtx_unlock(&msacc->mtx);
+
+ erts_factory_close(&factory);
+ } else {
+ ErlOffHeap *ohp = NULL;
+ msgp = erts_alloc_message_heap(rp, &rp_locks, REF_THING_SIZE, &hp, &ohp);
+ msg = STORE_NC(&hp, &msgp->hfrag.off_heap, msaccrp->ref);
+ }
erts_queue_message(rp, rp_locks, msgp, msg, am_system);
@@ -308,9 +310,9 @@ static void erts_msacc_reset(ErtsMsAcc *msacc) {
if (msacc->unmanaged) erts_mtx_lock(&msacc->mtx);
for (i = 0; i < ERTS_MSACC_STATE_COUNT; i++) {
- msacc->perf_counters[i] = 0;
+ msacc->counters[i].pc = 0;
#ifdef ERTS_MSACC_STATE_COUNTERS
- msacc->state_counters[i] = 0;
+ msacc->counters[i].sc = 0;
#endif
}
@@ -415,7 +417,7 @@ erts_msacc_request(Process *c_p, int action, Eterm *threads)
ErtsSysPerfCounter perf_counter;
/* if enabled update stats */
perf_counter = erts_sys_perf_counter();
- unmanaged[i]->perf_counters[unmanaged[i]->state] +=
+ unmanaged[i]->counters[unmanaged[i]->state].pc +=
perf_counter - unmanaged[i]->perf_counter;
unmanaged[i]->perf_counter = perf_counter;
}
@@ -454,7 +456,7 @@ erts_msacc_request(Process *c_p, int action, Eterm *threads)
for (msacc = msacc_unmanaged; msacc != NULL; msacc = msacc->next) {
erts_mtx_lock(&msacc->mtx);
perf_counter = erts_sys_perf_counter();
- msacc->perf_counters[msacc->state] += perf_counter - msacc->perf_counter;
+ msacc->counters[msacc->state].pc += perf_counter - msacc->perf_counter;
msacc->perf_counter = 0;
erts_mtx_unlock(&msacc->mtx);
}
diff --git a/erts/emulator/beam/erl_msacc.h b/erts/emulator/beam/erl_msacc.h
index 284388f7aa..ad7c8c5eee 100644
--- a/erts/emulator/beam/erl_msacc.h
+++ b/erts/emulator/beam/erl_msacc.h
@@ -35,6 +35,10 @@
this reduces overhead a little bit when profiling */
/* #define ERTS_MSACC_ALWAYS_ON 1 */
+/* Uncomment this to keep individual stats for all
+ of the bifs when extended states is enabled */
+/* #define ERTS_MSACC_EXTENDED_BIFS 1 */
+
#define ERTS_MSACC_DISABLE 0
#define ERTS_MSACC_ENABLE 1
#define ERTS_MSACC_RESET 2
@@ -92,7 +96,13 @@ static char *erts_msacc_states[] = {
#define ERTS_MSACC_STATE_SLEEP 13
#define ERTS_MSACC_STATE_TIMERS 14
-#define ERTS_MSACC_STATE_COUNT 15
+#define ERTS_MSACC_STATIC_STATE_COUNT 15
+
+#ifdef ERTS_MSACC_EXTENDED_BIFS
+#define ERTS_MSACC_STATE_COUNT (ERTS_MSACC_STATIC_STATE_COUNT + BIF_SIZE)
+#else
+#define ERTS_MSACC_STATE_COUNT ERTS_MSACC_STATIC_STATE_COUNT
+#endif
#if ERTS_MSACC_STATE_STRINGS
static char *erts_msacc_states[] = {
@@ -111,22 +121,26 @@ static char *erts_msacc_states[] = {
"send",
"sleep",
"timers"
+#ifdef ERTS_MSACC_EXTENDED_BIFS
+#define BIF_LIST(Mod,Func,Arity,FuncAddr,Num) \
+ ,"bif_" #Mod "_" #Func "_" #Arity
+#include "erl_bif_list.h"
+#undef BIF_LIST
+#endif
};
#endif
#endif
typedef struct erl_msacc_t_ ErtsMsAcc;
-
-struct erl_msacc_t_ {
-
- /* the the values below are protected by mtx iff unmanaged = 1 */
- ErtsSysPerfCounter perf_counter;
- ErtsSysPerfCounter perf_counters[ERTS_MSACC_STATE_COUNT];
+typedef struct erl_msacc_p_cnt_t_ {
+ ErtsSysPerfCounter pc;
#ifdef ERTS_MSACC_STATE_COUNTERS
- Uint64 state_counters[ERTS_MSACC_STATE_COUNT];
+ Uint64 sc;
#endif
- Uint state;
+} ErtsMsAccPerfCntr;
+
+struct erl_msacc_t_ {
/* protected by msacc_mutex in erl_msacc.c, and should be constant */
int unmanaged;
@@ -135,12 +149,16 @@ struct erl_msacc_t_ {
erts_tid_t tid;
Eterm id;
char *type;
+
+ /* the the values below are protected by mtx iff unmanaged = 1 */
+ ErtsSysPerfCounter perf_counter;
+ Uint state;
+ ErtsMsAccPerfCntr counters[];
+
};
#if ERTS_ENABLE_MSACC
-#define ERTS_MSACC_INLINE ERTS_GLB_INLINE
-
#ifdef USE_THREADS
extern erts_tsd_key_t erts_msacc_key;
#else
@@ -276,20 +294,20 @@ void erts_msacc_init_thread(char *type, int id, int liberty);
#define ERTS_MSACC_PUSH_AND_SET_STATE_M(state) \
ERTS_MSACC_PUSH_STATE_M(); ERTS_MSACC_SET_STATE_CACHED_M(state)
-ERTS_MSACC_INLINE
+ERTS_GLB_INLINE
void erts_msacc_set_state_um__(ErtsMsAcc *msacc,Uint state,int increment);
-ERTS_MSACC_INLINE
+ERTS_GLB_INLINE
void erts_msacc_set_state_m__(ErtsMsAcc *msacc,Uint state,int increment);
-ERTS_MSACC_INLINE
+ERTS_GLB_INLINE
Uint erts_msacc_get_state_um__(ErtsMsAcc *msacc);
-ERTS_MSACC_INLINE
+ERTS_GLB_INLINE
Uint erts_msacc_get_state_m__(ErtsMsAcc *msacc);
#if ERTS_GLB_INLINE_INCL_FUNC_DEF
-ERTS_MSACC_INLINE
+ERTS_GLB_INLINE
Uint erts_msacc_get_state_um__(ErtsMsAcc *msacc) {
Uint state;
if (msacc->unmanaged)
@@ -300,12 +318,12 @@ Uint erts_msacc_get_state_um__(ErtsMsAcc *msacc) {
return state;
}
-ERTS_MSACC_INLINE
+ERTS_GLB_INLINE
Uint erts_msacc_get_state_m__(ErtsMsAcc *msacc) {
return msacc->state;
}
-ERTS_MSACC_INLINE
+ERTS_GLB_INLINE
void erts_msacc_set_state_um__(ErtsMsAcc *msacc, Uint new_state, int increment) {
if (ERTS_UNLIKELY(msacc->unmanaged)) {
erts_mtx_lock(&msacc->mtx);
@@ -322,7 +340,7 @@ void erts_msacc_set_state_um__(ErtsMsAcc *msacc, Uint new_state, int increment)
erts_mtx_unlock(&msacc->mtx);
}
-ERTS_MSACC_INLINE
+ERTS_GLB_INLINE
void erts_msacc_set_state_m__(ErtsMsAcc *msacc, Uint new_state, int increment) {
ErtsSysPerfCounter prev_perf_counter;
Sint64 diff;
@@ -334,9 +352,9 @@ void erts_msacc_set_state_m__(ErtsMsAcc *msacc, Uint new_state, int increment) {
msacc->perf_counter = erts_sys_perf_counter();
diff = msacc->perf_counter - prev_perf_counter;
ASSERT(diff >= 0);
- msacc->perf_counters[msacc->state] += diff;
+ msacc->counters[msacc->state].pc += diff;
#ifdef ERTS_MSACC_STATE_COUNTERS
- msacc->state_counters[new_state] += increment;
+ msacc->counters[new_state].sc += increment;
#endif
msacc->state = new_state;
}
@@ -364,7 +382,7 @@ void erts_msacc_set_state_m__(ErtsMsAcc *msacc, Uint new_state, int increment) {
#define ERTS_MSACC_SET_STATE_CACHED_M(state)
#define ERTS_MSACC_POP_STATE_M()
#define ERTS_MSACC_PUSH_AND_SET_STATE_M(state)
-
+#define ERTS_MSACC_SET_BIF_STATE_CACHED_X(Mod,Addr)
#endif /* ERTS_ENABLE_MSACC */
@@ -385,9 +403,13 @@ void erts_msacc_set_state_m__(ErtsMsAcc *msacc, Uint new_state, int increment) {
#define ERTS_MSACC_SET_STATE_CACHED_M_X(state)
#define ERTS_MSACC_POP_STATE_M_X()
#define ERTS_MSACC_PUSH_AND_SET_STATE_M_X(state)
+#define ERTS_MSACC_PUSH_AND_SET_STATE_CACHED_M_X(state)
+#define ERTS_MSACC_SET_BIF_STATE_CACHED_X(Mod,Addr)
#else
+void erts_msacc_set_bif_state(ErtsMsAcc *msacc, Eterm mod, void *addr);
+
#define ERTS_MSACC_PUSH_STATE_X() ERTS_MSACC_PUSH_STATE()
#define ERTS_MSACC_POP_STATE_X() ERTS_MSACC_POP_STATE()
#define ERTS_MSACC_SET_STATE_X(state) ERTS_MSACC_SET_STATE(state)
@@ -403,6 +425,9 @@ void erts_msacc_set_state_m__(ErtsMsAcc *msacc, Uint new_state, int increment) {
#define ERTS_MSACC_SET_STATE_CACHED_M_X(state) ERTS_MSACC_SET_STATE_CACHED_M(state)
#define ERTS_MSACC_POP_STATE_M_X() ERTS_MSACC_POP_STATE_M()
#define ERTS_MSACC_PUSH_AND_SET_STATE_M_X(state) ERTS_MSACC_PUSH_AND_SET_STATE_M(state)
+#define ERTS_MSACC_SET_BIF_STATE_CACHED_X(Mod,Addr) \
+ if (ERTS_MSACC_IS_ENABLED_CACHED_X()) \
+ erts_msacc_set_bif_state(__erts_msacc_cache, Mod, Addr)
#endif /* !ERTS_MSACC_EXTENDED_STATES */
diff --git a/erts/emulator/beam/erl_nif.c b/erts/emulator/beam/erl_nif.c
index 8a3007d52a..559b4017e7 100644
--- a/erts/emulator/beam/erl_nif.c
+++ b/erts/emulator/beam/erl_nif.c
@@ -96,7 +96,7 @@ void dtrace_nifenv_str(ErlNifEnv *, char *);
#endif
#define MIN_HEAP_FRAG_SZ 200
-static Eterm* alloc_heap_heavy(ErlNifEnv* env, unsigned need, Eterm* hp);
+static Eterm* alloc_heap_heavy(ErlNifEnv* env, size_t need, Eterm* hp);
static ERTS_INLINE int
is_scheduler(void)
@@ -120,8 +120,10 @@ execution_state(ErlNifEnv *env, Process **c_pp, int *schedp)
else {
Process *c_p = env->proc;
- if (!(c_p->static_flags & ERTS_STC_FLG_SHADOW_PROC))
- ASSERT(is_scheduler() > 0);
+ if (!(c_p->static_flags & ERTS_STC_FLG_SHADOW_PROC)) {
+ ERTS_SMP_LC_ASSERT(erts_proc_lc_my_proc_locks(c_p)
+ & ERTS_PROC_LOCK_MAIN);
+ }
else {
c_p = env->proc->next;
ASSERT(is_scheduler() < 0);
@@ -135,7 +137,7 @@ execution_state(ErlNifEnv *env, Process **c_pp, int *schedp)
}
}
-static ERTS_INLINE Eterm* alloc_heap(ErlNifEnv* env, unsigned need)
+static ERTS_INLINE Eterm* alloc_heap(ErlNifEnv* env, size_t need)
{
Eterm* hp = env->hp;
env->hp += need;
@@ -145,7 +147,7 @@ static ERTS_INLINE Eterm* alloc_heap(ErlNifEnv* env, unsigned need)
return alloc_heap_heavy(env, need, hp);
}
-static Eterm* alloc_heap_heavy(ErlNifEnv* env, unsigned need, Eterm* hp)
+static Eterm* alloc_heap_heavy(ErlNifEnv* env, size_t need, Eterm* hp)
{
env->hp = hp;
if (env->heap_frag == NULL) {
@@ -154,7 +156,9 @@ static Eterm* alloc_heap_heavy(ErlNifEnv* env, unsigned need, Eterm* hp)
HEAP_TOP(env->proc) = env->hp;
}
else {
- env->heap_frag->used_size = hp - env->heap_frag->mem;
+ Uint usz = env->hp - env->heap_frag->mem;
+ env->proc->mbuf_sz += usz - env->heap_frag->used_size;
+ env->heap_frag->used_size = usz;
ASSERT(env->heap_frag->used_size <= env->heap_frag->alloc_size);
}
hp = erts_heap_alloc(env->proc, need, MIN_HEAP_FRAG_SZ);
@@ -166,7 +170,7 @@ static Eterm* alloc_heap_heavy(ErlNifEnv* env, unsigned need, Eterm* hp)
}
#if SIZEOF_LONG != ERTS_SIZEOF_ETERM
-static ERTS_INLINE void ensure_heap(ErlNifEnv* env, unsigned may_need)
+static ERTS_INLINE void ensure_heap(ErlNifEnv* env, size_t may_need)
{
if (env->hp + may_need > env->hp_end) {
alloc_heap_heavy(env, may_need, env->hp);
@@ -178,9 +182,6 @@ static ERTS_INLINE void ensure_heap(ErlNifEnv* env, unsigned may_need)
void erts_pre_nif(ErlNifEnv* env, Process* p, struct erl_module_nif* mod_nif,
Process* tracee)
{
-#ifdef ERTS_DIRTY_SCHEDULERS
- ErtsSchedulerData *esdp;
-#endif
env->mod_nif = mod_nif;
env->proc = p;
env->hp = HEAP_TOP(p);
@@ -193,59 +194,60 @@ void erts_pre_nif(ErlNifEnv* env, Process* p, struct erl_module_nif* mod_nif,
ASSERT(p->common.id != ERTS_INVALID_PID);
-#ifdef ERTS_DIRTY_SCHEDULERS
- esdp = erts_get_scheduler_data();
- ASSERT(esdp);
+#if defined(DEBUG) && defined(ERTS_DIRTY_SCHEDULERS)
+ {
+ ErtsSchedulerData *esdp = erts_get_scheduler_data();
+ ASSERT(esdp);
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) {
-#ifdef DEBUG
- erts_aint32_t state = erts_smp_atomic32_read_nob(&p->state);
+ if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) {
+ erts_aint32_t state = erts_smp_atomic32_read_nob(&p->state);
- ASSERT(p->scheduler_data == esdp);
- ASSERT((state & (ERTS_PSFLG_RUNNING
- | ERTS_PSFLG_RUNNING_SYS))
- && !(state & (ERTS_PSFLG_DIRTY_RUNNING
- | ERTS_PSFLG_DIRTY_RUNNING_SYS)));
+ ASSERT(p->scheduler_data == esdp);
+ ASSERT((state & (ERTS_PSFLG_RUNNING
+ | ERTS_PSFLG_RUNNING_SYS))
+ && !(state & (ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS)));
+ }
+ }
#endif
+}
- }
- else {
- Process *sproc;
+static void full_cache_env(ErlNifEnv *env);
+static void cache_env(ErlNifEnv* env);
+static void full_flush_env(ErlNifEnv *env);
+static void flush_env(ErlNifEnv* env);
+
+#ifdef ERTS_DIRTY_SCHEDULERS
+void erts_pre_dirty_nif(ErtsSchedulerData *esdp,
+ ErlNifEnv* env, Process* p,
+ struct erl_module_nif* mod_nif)
+{
+ Process *sproc;
#ifdef DEBUG
- erts_aint32_t state = erts_smp_atomic32_read_nob(&p->state);
+ erts_aint32_t state = erts_smp_atomic32_read_nob(&p->state);
- ASSERT(!p->scheduler_data);
- ASSERT((state & ERTS_PSFLG_DIRTY_RUNNING)
- && !(state & (ERTS_PSFLG_RUNNING|ERTS_PSFLG_RUNNING_SYS)));
+ ASSERT(!p->scheduler_data);
+ ASSERT((state & ERTS_PSFLG_DIRTY_RUNNING)
+ && !(state & (ERTS_PSFLG_RUNNING|ERTS_PSFLG_RUNNING_SYS)));
+ ASSERT(esdp);
#endif
- sproc = esdp->dirty_shadow_process;
- ASSERT(sproc);
- ASSERT(sproc->static_flags & ERTS_STC_FLG_SHADOW_PROC);
- ASSERT(erts_smp_atomic32_read_nob(&sproc->state)
- == (ERTS_PSFLG_ACTIVE
- | ERTS_PSFLG_DIRTY_RUNNING
- | ERTS_PSFLG_PROXY));
-
- sproc->next = p;
- sproc->common.id = p->common.id;
- sproc->htop = p->htop;
- sproc->stop = p->stop;
- sproc->hend = p->hend;
- sproc->heap = p->heap;
- sproc->abandoned_heap = p->abandoned_heap;
- sproc->heap_sz = p->heap_sz;
- sproc->high_water = p->high_water;
- sproc->old_hend = p->old_hend;
- sproc->old_htop = p->old_htop;
- sproc->old_heap = p->old_heap;
- sproc->mbuf = NULL;
- sproc->mbuf_sz = 0;
- ERTS_INIT_OFF_HEAP(&sproc->off_heap);
- env->proc = sproc;
- }
-#endif
+ erts_pre_nif(env, p, mod_nif, NULL);
+
+ sproc = esdp->dirty_shadow_process;
+ ASSERT(sproc);
+ ASSERT(sproc->static_flags & ERTS_STC_FLG_SHADOW_PROC);
+ ASSERT(erts_smp_atomic32_read_nob(&sproc->state)
+ == (ERTS_PSFLG_ACTIVE
+ | ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_PROXY));
+
+ sproc->next = p;
+ sproc->common.id = p->common.id;
+ env->proc = sproc;
+ full_cache_env(env);
}
+#endif
/* Temporary object header, auto-deallocated when NIF returns
* or when independent environment is cleared.
@@ -269,32 +271,37 @@ static ERTS_INLINE void free_tmp_objs(ErlNifEnv* env)
void erts_post_nif(ErlNifEnv* env)
{
erts_unblock_fpe(env->fpe_was_unmasked);
+ full_flush_env(env);
+ free_tmp_objs(env);
+ env->exiting = ERTS_PROC_IS_EXITING(env->proc);
+}
#ifdef ERTS_DIRTY_SCHEDULERS
- if (!(env->proc->static_flags & ERTS_STC_FLG_SHADOW_PROC))
+void erts_post_dirty_nif(ErlNifEnv* env)
+{
+ Process *c_p;
+ ASSERT(env->proc->static_flags & ERTS_STC_FLG_SHADOW_PROC);
+ ASSERT(env->proc->next);
+ erts_unblock_fpe(env->fpe_was_unmasked);
+ full_flush_env(env);
+ free_tmp_objs(env);
+ c_p = env->proc->next;
+ env->exiting = ERTS_PROC_IS_EXITING(c_p);
+ ERTS_VBUMP_ALL_REDS(c_p);
+}
#endif
- {
- ASSERT(is_scheduler() > 0);
- if (env->heap_frag == NULL) {
- ASSERT(env->hp_end == HEAP_LIMIT(env->proc));
- ASSERT(env->hp >= HEAP_TOP(env->proc));
- ASSERT(env->hp <= HEAP_LIMIT(env->proc));
- HEAP_TOP(env->proc) = env->hp;
- }
- else {
- ASSERT(env->hp_end != HEAP_LIMIT(env->proc));
- ASSERT(env->hp_end - env->hp <= env->heap_frag->alloc_size);
- env->heap_frag->used_size = env->hp - env->heap_frag->mem;
- ASSERT(env->heap_frag->used_size <= env->heap_frag->alloc_size);
- }
- env->exiting = ERTS_PROC_IS_EXITING(env->proc);
- }
+
+static void full_flush_env(ErlNifEnv* env)
+{
#ifdef ERTS_DIRTY_SCHEDULERS
- else { /* Dirty nif call using shadow process struct */
+ if (env->proc->static_flags & ERTS_STC_FLG_SHADOW_PROC) {
+ /* Dirty nif call using shadow process struct */
Process *c_p = env->proc->next;
ASSERT(is_scheduler() < 0);
ASSERT(env->proc->common.id == c_p->common.id);
+ ERTS_SMP_LC_ASSERT(erts_proc_lc_my_proc_locks(c_p)
+ & ERTS_PROC_LOCK_MAIN);
if (!env->heap_frag) {
ASSERT(env->hp_end == HEAP_LIMIT(c_p));
@@ -303,11 +310,14 @@ void erts_post_nif(ErlNifEnv* env)
HEAP_TOP(c_p) = env->hp;
}
else {
+ Uint usz;
ASSERT(env->hp_end != HEAP_LIMIT(c_p));
ASSERT(env->hp_end - env->hp <= env->heap_frag->alloc_size);
HEAP_TOP(c_p) = HEAP_TOP(env->proc);
- env->heap_frag->used_size = env->hp - env->heap_frag->mem;
+ usz = env->hp - env->heap_frag->mem;
+ env->proc->mbuf_sz += usz - env->heap_frag->used_size;
+ env->heap_frag->used_size = usz;
ASSERT(env->heap_frag->used_size <= env->heap_frag->alloc_size);
@@ -334,11 +344,48 @@ void erts_post_nif(ErlNifEnv* env)
}
c_p->off_heap.overhead += env->proc->off_heap.overhead;
- env->exiting = ERTS_PROC_IS_EXITING(c_p);
- BUMP_ALL_REDS(c_p);
+ return;
}
#endif
- free_tmp_objs(env);
+
+ flush_env(env);
+}
+
+static void full_cache_env(ErlNifEnv* env)
+{
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (env->proc->static_flags & ERTS_STC_FLG_SHADOW_PROC) {
+ /* Dirty nif call using shadow process struct */
+ Process *sproc = env->proc;
+ Process *c_p = sproc->next;
+ ASSERT(c_p);
+ ASSERT(is_scheduler() < 0);
+ ASSERT(env->proc->common.id == c_p->common.id);
+ ERTS_SMP_LC_ASSERT(erts_proc_lc_my_proc_locks(c_p)
+ & ERTS_PROC_LOCK_MAIN);
+
+ sproc->htop = c_p->htop;
+ sproc->stop = c_p->stop;
+ sproc->hend = c_p->hend;
+ sproc->heap = c_p->heap;
+ sproc->abandoned_heap = c_p->abandoned_heap;
+ sproc->heap_sz = c_p->heap_sz;
+ sproc->high_water = c_p->high_water;
+ sproc->old_hend = c_p->old_hend;
+ sproc->old_htop = c_p->old_htop;
+ sproc->old_heap = c_p->old_heap;
+ sproc->mbuf = NULL;
+ sproc->mbuf_sz = 0;
+ ERTS_INIT_OFF_HEAP(&sproc->off_heap);
+
+ env->hp_end = HEAP_LIMIT(c_p);
+ env->hp = HEAP_TOP(c_p);
+ env->heap_frag = NULL;
+ return;
+ }
+#endif
+
+ cache_env(env);
}
/* Flush out our cached heap pointers to allow an ordinary HAlloc
@@ -352,9 +399,12 @@ static void flush_env(ErlNifEnv* env)
HEAP_TOP(env->proc) = env->hp;
}
else {
+ Uint usz;
ASSERT(env->hp_end != HEAP_LIMIT(env->proc));
ASSERT(env->hp_end - env->hp <= env->heap_frag->alloc_size);
- env->heap_frag->used_size = env->hp - env->heap_frag->mem;
+ usz = env->hp - env->heap_frag->mem;
+ env->proc->mbuf_sz += usz - env->heap_frag->used_size;
+ env->heap_frag->used_size = usz;
ASSERT(env->heap_frag->used_size <= env->heap_frag->alloc_size);
}
}
@@ -595,17 +645,32 @@ int enif_send(ErlNifEnv* env, const ErlNifPid* to_pid,
if (scheduler > 0) { /* Normal scheduler */
rp = erts_proc_lookup(receiver);
- if (c_p == rp)
- rp_locks = ERTS_PROC_LOCK_MAIN;
+ if (!rp)
+ return 0;
}
else {
- if (c_p && ERTS_PROC_IS_EXITING(c_p))
- return 0;
- rp = erts_pid2proc_opt(c_p, 0, receiver, rp_locks,
+ if (c_p) {
+ ASSERT(scheduler < 0); /* Dirty scheduler */
+ if (ERTS_PROC_IS_EXITING(c_p))
+ return 0;
+
+ if (env->proc->static_flags & ERTS_STC_FLG_SHADOW_PROC) {
+ erts_smp_proc_lock(c_p, ERTS_PROC_LOCK_MAIN);
+ }
+ }
+
+ rp = erts_pid2proc_opt(c_p, ERTS_PROC_LOCK_MAIN,
+ receiver, rp_locks,
ERTS_P2P_FLG_INC_REFC);
+ if (!rp) {
+ if (c_p && (env->proc->static_flags & ERTS_STC_FLG_SHADOW_PROC))
+ erts_smp_proc_unlock(c_p, ERTS_PROC_LOCK_MAIN);
+ return 0;
+ }
}
- if (rp == NULL)
- return 0;
+
+ if (c_p == rp)
+ rp_locks = ERTS_PROC_LOCK_MAIN;
if (menv) {
flush_env(msg_env);
@@ -623,18 +688,39 @@ int enif_send(ErlNifEnv* env, const ErlNifPid* to_pid,
}
} else {
Uint sz = size_object(msg);
+ ErlOffHeap *ohp;
Eterm *hp;
- mp = erts_alloc_message(sz, &hp);
- msg = copy_struct(msg, sz, &hp, &mp->hfrag.off_heap);
- ASSERT(hp == mp->hfrag.mem+mp->hfrag.used_size);
+ if (env && !env->tracee) {
+ full_flush_env(env);
+ mp = erts_alloc_message_heap(rp, &rp_locks, sz, &hp, &ohp);
+ full_cache_env(env);
+ }
+ else {
+ erts_aint_t state = erts_smp_atomic32_read_nob(&rp->state);
+ if (state & ERTS_PSFLG_OFF_HEAP_MSGQ) {
+ mp = erts_alloc_message(sz, &hp);
+ ohp = sz == 0 ? NULL : &mp->hfrag.off_heap;
+ }
+ else {
+ ErlHeapFragment *bp = new_message_buffer(sz);
+ mp = erts_alloc_message(0, NULL);
+ mp->data.heap_frag = bp;
+ hp = bp->mem;
+ ohp = &bp->off_heap;
+ }
+ }
+ msg = copy_struct(msg, sz, &hp, ohp);
}
ERL_MESSAGE_TERM(mp) = msg;
if (!env || !env->tracee) {
- if (c_p && IS_TRACED_FL(c_p, F_TRACE_SEND))
+ if (c_p && IS_TRACED_FL(c_p, F_TRACE_SEND)) {
+ full_flush_env(env);
trace_send(c_p, receiver, msg);
+ full_cache_env(env);
+ }
}
#ifdef ERTS_SMP
else {
@@ -667,7 +753,6 @@ int enif_send(ErlNifEnv* env, const ErlNifPid* to_pid,
erts_smp_proc_trylock(rp, ERTS_PROC_LOCK_MSGQ) == EBUSY) {
if (!msgq) {
-
msgq = erts_alloc(ERTS_ALC_T_TRACE_MSG_QUEUE,
sizeof(ErlTraceMessageQueue));
msgq->receiver = receiver;
@@ -681,8 +766,7 @@ int enif_send(ErlNifEnv* env, const ErlNifPid* to_pid,
erts_smp_proc_unlock(t_p, ERTS_PROC_LOCK_TRACE);
- erts_schedule_flush_trace_messages(t_p->common.id);
-
+ erts_schedule_flush_trace_messages(t_p, 0);
} else {
msgq->len++;
*msgq->last = mp;
@@ -707,6 +791,8 @@ done:
rp_locks &= ~ERTS_PROC_LOCK_MAIN;
if (rp_locks & ~lc_locks)
erts_smp_proc_unlock(rp, rp_locks & ~lc_locks);
+ if (c_p && (env->proc->static_flags & ERTS_STC_FLG_SHADOW_PROC))
+ erts_smp_proc_unlock(c_p, ERTS_PROC_LOCK_MAIN);
#endif
if (scheduler <= 0)
erts_proc_dec_refc(rp);
@@ -736,32 +822,25 @@ enif_port_command(ErlNifEnv *env, const ErlNifPort* to_port,
if (scheduler > 0)
prt = erts_port_lookup(to_port->port_id, iflags);
-#ifdef ERTS_DIRTY_SCHEDULERS
- else if (scheduler < 0) {
+ else {
+#ifdef ERTS_SMP
if (ERTS_PROC_IS_EXITING(c_p))
return 0;
prt = erts_thr_port_lookup(to_port->port_id, iflags);
- }
+#else
+ erts_exit(ERTS_ABORT_EXIT,
+ "enif_port_command: called from non-scheduler "
+ "thread on non-SMP VM");
#endif
- else {
- erts_exit(ERTS_ABORT_EXIT, "enif_port_command: "
- "called from non-scheduler thread");
}
if (!prt)
res = 0;
- else {
-
- if (IS_TRACED_FL(prt, F_TRACE_RECEIVE))
- trace_port_receive(prt, c_p->common.id, am_command, msg);
-
- res = erts_port_output_async(prt, c_p->common.id, msg);
- }
+ else
+ res = erts_port_output_async(prt, c_p->common.id, msg);
-#ifdef ERTS_DIRTY_SCHEDULERS
- if (scheduler < 0)
+ if (scheduler <= 0)
erts_port_dec_refc(prt);
-#endif
return res;
}
@@ -770,19 +849,13 @@ ERL_NIF_TERM enif_make_copy(ErlNifEnv* dst_env, ERL_NIF_TERM src_term)
{
Uint sz;
Eterm* hp;
-#ifdef SHCOPY
- erts_shcopy_t info;
- INITIALIZE_SHCOPY(info);
- sz = copy_shared_calculate(src_term, &info);
- hp = alloc_heap(dst_env, sz);
- src_term = copy_shared_perform(src_term, sz, &info, &hp, &MSO(dst_env->proc));
- DESTROY_SHCOPY(info);
- return src_term;
-#else
+ /*
+ * No preserved sharing allowed as long as literals are also preserved.
+ * Process independent environment can not be reached by purge.
+ */
sz = size_object(src_term);
hp = alloc_heap(dst_env, sz);
return copy_struct(src_term, sz, &hp, &MSO(dst_env->proc));
-#endif
}
@@ -1197,7 +1270,7 @@ Eterm enif_make_sub_binary(ErlNifEnv* env, ERL_NIF_TERM bin_term,
Eterm orig;
Uint offset, bit_offset, bit_size;
#ifdef DEBUG
- unsigned src_size;
+ size_t src_size;
ASSERT(is_binary(bin_term));
src_size = binary_size(bin_term);
@@ -1669,7 +1742,8 @@ int enif_is_process_alive(ErlNifEnv* env, ErlNifPid *proc)
return !!rp;
#else
erts_exit(ERTS_ABORT_EXIT, "enif_is_process_alive: "
- "called from non-scheduler thread");
+ "called from non-scheduler thread "
+ "in non-smp emulator");
return 0;
#endif
}
@@ -1694,7 +1768,8 @@ int enif_is_port_alive(ErlNifEnv *env, ErlNifPort *port)
return !!prt;
#else
erts_exit(ERTS_ABORT_EXIT, "enif_is_port_alive: "
- "called from non-scheduler thread");
+ "called from non-scheduler thread "
+ "in non-smp emulator");
return 0;
#endif
}
@@ -1810,6 +1885,16 @@ int enif_fprintf(void* filep, const char* format, ...)
return ret;
}
+int enif_snprintf(char *buffer, size_t size, const char* format, ...)
+{
+ int ret;
+ va_list arglist;
+ va_start(arglist, format);
+ ret = erts_vsnprintf(buffer, size, format, arglist);
+ va_end(arglist);
+ return ret;
+}
+
/***********************************************************
** Memory managed (GC'ed) "resource" objects **
***********************************************************/
@@ -2183,7 +2268,7 @@ int enif_consume_timeslice(ErlNifEnv* env, int percent)
* NIF exports need a few more items than the Export struct provides,
* including the erl_module_nif* and a NIF function pointer, so the
* NifExport below adds those. The Export member must be first in the
- * struct. The saved_mfa, exception_thrown, saved_argc, rootset_extra, and
+ * struct. The saved_current, exception_thrown, saved_argc, rootset_extra, and
* rootset members are used to track the MFA, any pending exception, and
* arguments of the top NIF in case a chain of one or more
* enif_schedule_nif() calls results in an exception, since in that case
@@ -2197,7 +2282,7 @@ typedef struct {
Export exp;
struct erl_module_nif* m;
NativeFunPtr fp;
- Eterm saved_mfa[3];
+ BeamInstr *saved_current;
int exception_thrown;
int saved_argc;
int rootset_extra;
@@ -2308,9 +2393,8 @@ init_nif_sched_data(ErlNifEnv* env, NativeFunPtr direct_fp, NativeFunPtr indirec
reg[i] = (Eterm) argv[i];
}
if (need_save) {
- ep->saved_mfa[0] = proc->current[0];
- ep->saved_mfa[1] = proc->current[1];
- ep->saved_mfa[2] = proc->current[2];
+ ASSERT(proc->current);
+ ep->saved_current = proc->current;
ep->saved_argc = argc;
}
proc->i = (BeamInstr*) ep->exp.addressv[0];
@@ -2333,21 +2417,21 @@ static void
restore_nif_mfa(Process* proc, NifExport* ep, int exception)
{
int i;
- Eterm* reg = erts_proc_sched_data(proc)->x_reg_array;
ERTS_SMP_LC_ASSERT(!(proc->static_flags
& ERTS_STC_FLG_SHADOW_PROC));
ERTS_SMP_LC_ASSERT(erts_proc_lc_my_proc_locks(proc)
& ERTS_PROC_LOCK_MAIN);
- proc->current[0] = ep->saved_mfa[0];
- proc->current[1] = ep->saved_mfa[1];
- proc->current[2] = ep->saved_mfa[2];
- if (exception)
+ ASSERT(ep->saved_current != &ep->exp.code[0]);
+ proc->current = ep->saved_current;
+ ep->saved_current = NULL;
+ if (exception) {
+ Eterm* reg = erts_proc_sched_data(proc)->x_reg_array;
for (i = 0; i < ep->saved_argc; i++)
reg[i] = ep->rootset[i+1];
+ }
ep->saved_argc = 0;
- ep->saved_mfa[0] = THE_NON_VALUE;
}
#ifdef ERTS_DIRTY_SCHEDULERS
@@ -2422,6 +2506,7 @@ execute_dirty_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
*/
ep = (NifExport*) ERTS_PROC_GET_NIF_TRAP_EXPORT(proc);
ASSERT(ep && fp);
+
ep->fp = NULL;
erts_smp_atomic32_read_band_mb(&proc->state, ~(ERTS_PSFLG_DIRTY_CPU_PROC
| ERTS_PSFLG_DIRTY_IO_PROC));
@@ -2506,7 +2591,7 @@ schedule_dirty_nif(ErlNifEnv* env, int flags, int argc, const ERL_NIF_TERM argv[
}
ep = (NifExport*) ERTS_PROC_GET_NIF_TRAP_EXPORT(proc);
- need_save = (ep == NULL || is_non_value(ep->saved_mfa[0]));
+ need_save = (ep == NULL || !ep->saved_current);
result = init_nif_sched_data(env, execute_dirty_nif, fp, need_save, argc, argv);
if (scheduler <= 0)
erts_smp_proc_unlock(proc, ERTS_PROC_LOCK_MAIN);
@@ -2584,7 +2669,7 @@ enif_schedule_nif(ErlNifEnv* env, const char* fun_name, int flags,
}
ep = (NifExport*) ERTS_PROC_GET_NIF_TRAP_EXPORT(proc);
- need_save = (ep == NULL || is_non_value(ep->saved_mfa[0]));
+ need_save = (ep == NULL || !ep->saved_current);
if (flags) {
#ifdef ERTS_DIRTY_SCHEDULERS
@@ -2619,18 +2704,21 @@ done:
}
int
-enif_is_on_dirty_scheduler(ErlNifEnv* env)
+enif_thread_type(void)
{
- int scheduler;
- Process *c_p;
+ ErtsSchedulerData *esdp = erts_get_scheduler_data();
- execution_state(env, &c_p, &scheduler);
+ if (!esdp)
+ return ERL_NIF_THR_UNDEFINED;
+
+ if (!ERTS_SCHEDULER_IS_DIRTY(esdp))
+ return ERL_NIF_THR_NORMAL_SCHEDULER;
- if (!c_p || !scheduler)
- erts_exit(ERTS_ABORT_EXIT, "enif_is_on_dirty_scheduler: "
- "Invalid env");
+ if (ERTS_SCHEDULER_IS_DIRTY_CPU(esdp))
+ return ERL_NIF_THR_DIRTY_CPU_SCHEDULER;
- return scheduler < 0;
+ ASSERT(ERTS_SCHEDULER_IS_DIRTY_IO(esdp));
+ return ERL_NIF_THR_DIRTY_IO_SCHEDULER;
}
/* Maps */
@@ -3467,6 +3555,7 @@ Eterm erts_nif_call_function(Process *p, Process *tracee,
struct enif_environment_t env;
ErlHeapFragment *orig_hf = MBUF(p);
ErlOffHeap orig_oh = MSO(p);
+ Eterm *orig_htop = HEAP_TOP(p);
ASSERT(is_internal_pid(p->common.id));
MBUF(p) = NULL;
clear_offheap(&MSO(p));
@@ -3488,6 +3577,7 @@ Eterm erts_nif_call_function(Process *p, Process *tracee,
/* restore original heap fragment list */
MBUF(p) = orig_hf;
MSO(p) = orig_oh;
+ HEAP_TOP(p) = orig_htop;
} else {
/* Nif call was done without a process context,
so we create a phony one. */
diff --git a/erts/emulator/beam/erl_nif.h b/erts/emulator/beam/erl_nif.h
index 02c82415fd..494971e118 100644
--- a/erts/emulator/beam/erl_nif.h
+++ b/erts/emulator/beam/erl_nif.h
@@ -49,9 +49,10 @@
** 2.8: 18.0 add enif_has_pending_exception
** 2.9: 18.2 enif_getenv
** 2.10: Time API
+** 2.11: 19.0 enif_snprintf
*/
#define ERL_NIF_MAJOR_VERSION 2
-#define ERL_NIF_MINOR_VERSION 10
+#define ERL_NIF_MINOR_VERSION 11
/*
* The emulator will refuse to load a nif-lib with a major version
@@ -208,6 +209,17 @@ typedef enum {
ERL_NIF_BIN2TERM_SAFE = 0x20000000
} ErlNifBinaryToTerm;
+/*
+ * Return values from enif_thread_type(). Negative values
+ * reserved for specific types of non-scheduler threads.
+ * Positive values reserved for scheduler thread types.
+ */
+
+#define ERL_NIF_THR_UNDEFINED 0
+#define ERL_NIF_THR_NORMAL_SCHEDULER 1
+#define ERL_NIF_THR_DIRTY_CPU_SCHEDULER 2
+#define ERL_NIF_THR_DIRTY_IO_SCHEDULER 3
+
#if (defined(__WIN32__) || defined(_WIN32) || defined(_WIN32_))
# define ERL_NIF_API_FUNC_DECL(RET_TYPE, NAME, ARGS) RET_TYPE (*NAME) ARGS
typedef struct {
diff --git a/erts/emulator/beam/erl_nif_api_funcs.h b/erts/emulator/beam/erl_nif_api_funcs.h
index 1bdac51d1f..9a8f216773 100644
--- a/erts/emulator/beam/erl_nif_api_funcs.h
+++ b/erts/emulator/beam/erl_nif_api_funcs.h
@@ -173,7 +173,8 @@ ERL_NIF_API_FUNC_DECL(int, enif_get_local_port, (ErlNifEnv* env, ERL_NIF_TERM, E
ERL_NIF_API_FUNC_DECL(int, enif_term_to_binary, (ErlNifEnv *env, ERL_NIF_TERM term, ErlNifBinary *bin));
ERL_NIF_API_FUNC_DECL(size_t, enif_binary_to_term, (ErlNifEnv *env, const unsigned char* data, size_t sz, ERL_NIF_TERM *term, unsigned int opts));
ERL_NIF_API_FUNC_DECL(int, enif_port_command, (ErlNifEnv *env, const ErlNifPort* to_port, ErlNifEnv *msg_env, ERL_NIF_TERM msg));
-ERL_NIF_API_FUNC_DECL(int,enif_is_on_dirty_scheduler,(ErlNifEnv*));
+ERL_NIF_API_FUNC_DECL(int,enif_thread_type,(void));
+ERL_NIF_API_FUNC_DECL(int,enif_snprintf,(char * buffer, size_t size, const char *format, ...));
/*
** ADD NEW ENTRIES HERE (before this comment) !!!
@@ -329,7 +330,8 @@ ERL_NIF_API_FUNC_DECL(int,enif_is_on_dirty_scheduler,(ErlNifEnv*));
# define enif_term_to_binary ERL_NIF_API_FUNC_MACRO(enif_term_to_binary)
# define enif_binary_to_term ERL_NIF_API_FUNC_MACRO(enif_binary_to_term)
# define enif_port_command ERL_NIF_API_FUNC_MACRO(enif_port_command)
-# define enif_is_on_dirty_scheduler ERL_NIF_API_FUNC_MACRO(enif_is_on_dirty_scheduler)
+# define enif_thread_type ERL_NIF_API_FUNC_MACRO(enif_thread_type)
+# define enif_snprintf ERL_NIF_API_FUNC_MACRO(enif_snprintf)
/*
** ADD NEW ENTRIES HERE (before this comment)
diff --git a/erts/emulator/beam/erl_port.h b/erts/emulator/beam/erl_port.h
index f0075ca2b9..f90844ccc8 100644
--- a/erts/emulator/beam/erl_port.h
+++ b/erts/emulator/beam/erl_port.h
@@ -361,6 +361,8 @@ Eterm erts_request_io_bytes(Process *c_p);
#define ERTS_PORT_REDS_CONNECT (CONTEXT_REDS/200)
#define ERTS_PORT_REDS_UNLINK (CONTEXT_REDS/200)
#define ERTS_PORT_REDS_LINK (CONTEXT_REDS/200)
+#define ERTS_PORT_REDS_MONITOR (CONTEXT_REDS/200)
+#define ERTS_PORT_REDS_DEMONITOR (CONTEXT_REDS/200)
#define ERTS_PORT_REDS_BADSIG (CONTEXT_REDS/200)
#define ERTS_PORT_REDS_CONTROL (CONTEXT_REDS/100)
#define ERTS_PORT_REDS_CALL (CONTEXT_REDS/50)
@@ -850,16 +852,20 @@ void erts_port_resume_procs(Port *);
struct binary;
-#define ERTS_P2P_SIG_TYPE_BAD 0
-#define ERTS_P2P_SIG_TYPE_OUTPUT 1
-#define ERTS_P2P_SIG_TYPE_OUTPUTV 2
-#define ERTS_P2P_SIG_TYPE_CONNECT 3
-#define ERTS_P2P_SIG_TYPE_EXIT 4
-#define ERTS_P2P_SIG_TYPE_CONTROL 5
-#define ERTS_P2P_SIG_TYPE_CALL 6
-#define ERTS_P2P_SIG_TYPE_INFO 7
-#define ERTS_P2P_SIG_TYPE_LINK 8
-#define ERTS_P2P_SIG_TYPE_UNLINK 9
+enum {
+ ERTS_P2P_SIG_TYPE_BAD = 0,
+ ERTS_P2P_SIG_TYPE_OUTPUT = 1,
+ ERTS_P2P_SIG_TYPE_OUTPUTV = 2,
+ ERTS_P2P_SIG_TYPE_CONNECT = 3,
+ ERTS_P2P_SIG_TYPE_EXIT = 4,
+ ERTS_P2P_SIG_TYPE_CONTROL = 5,
+ ERTS_P2P_SIG_TYPE_CALL = 6,
+ ERTS_P2P_SIG_TYPE_INFO = 7,
+ ERTS_P2P_SIG_TYPE_LINK = 8,
+ ERTS_P2P_SIG_TYPE_UNLINK = 9,
+ ERTS_P2P_SIG_TYPE_MONITOR = 10,
+ ERTS_P2P_SIG_TYPE_DEMONITOR = 11
+};
#define ERTS_P2P_SIG_TYPE_BITS 4
#define ERTS_P2P_SIG_TYPE_MASK \
@@ -921,6 +927,15 @@ struct ErtsProc2PortSigData_ {
struct {
Eterm from;
} unlink;
+ struct {
+ Eterm origin; /* who receives monitor event, pid */
+ Eterm name; /* either name for named monitor, or port id */
+ } monitor;
+ struct {
+ Eterm origin; /* who is at the other end of the monitor, pid */
+ Eterm name; /* port id */
+ Uint32 ref[ERTS_MAX_REF_NUMBERS]; /* box contents of a ref */
+ } demonitor;
} u;
} ;
@@ -1017,6 +1032,29 @@ ErtsPortOpResult erts_port_control(Process *, Port *, unsigned int, Eterm, Eterm
ErtsPortOpResult erts_port_call(Process *, Port *, unsigned int, Eterm, Eterm *);
ErtsPortOpResult erts_port_info(Process *, Port *, Eterm, Eterm *);
+/* Creates monitor between Origin and Target. Ref must be initialized to
+ * a reference (ref may be rewritten to be used to serve additionally as a
+ * signal id). Name is atom if user monitors port by name or NIL */
+ErtsPortOpResult erts_port_monitor(Process *origin, Port *target, Eterm name,
+ Eterm *ref);
+
+typedef enum {
+ /* Normal demonitor rules apply with locking and reductions bump */
+ ERTS_PORT_DEMONITOR_NORMAL = 1,
+ /* Relaxed demonitor rules when process is about to die, which means that
+ * pid lookup won't work, locks won't work, no reductions bump. */
+ ERTS_PORT_DEMONITOR_ORIGIN_ON_DEATHBED = 2,
+} ErtsDemonitorMode;
+
+/* Removes monitor between origin and target, identified by ref.
+ * origin_is_dying can be 0 (false, normal locking rules and reductions bump
+ * apply) or 1 (true, in case when we avoid origin locking) */
+ErtsPortOpResult erts_port_demonitor(Process *origin, ErtsDemonitorMode mode,
+ Port *target, Eterm ref,
+ Eterm *trap_ref);
+/* defined in erl_bif_port.c */
+Port *erts_sig_lookup_port(Process *c_p, Eterm id_or_name);
+
int erts_port_output_async(Port *, Eterm, Eterm);
/*
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c
index a853ec585b..bc59147c6c 100644
--- a/erts/emulator/beam/erl_process.c
+++ b/erts/emulator/beam/erl_process.c
@@ -149,7 +149,7 @@ extern BeamInstr beam_apply[];
extern BeamInstr beam_exit[];
extern BeamInstr beam_continue_exit[];
-int ERTS_WRITE_UNLIKELY(erts_default_spo_flags) = 0;
+int ERTS_WRITE_UNLIKELY(erts_default_spo_flags) = SPO_ON_HEAP_MSGQ;
int ERTS_WRITE_UNLIKELY(erts_eager_check_io) = 1;
int ERTS_WRITE_UNLIKELY(erts_sched_compact_load);
int ERTS_WRITE_UNLIKELY(erts_sched_balance_util) = 0;
@@ -448,6 +448,9 @@ int erts_system_profile_ts_type = ERTS_TRACE_FLG_NOW_TIMESTAMP;
typedef enum {
ERTS_PSTT_GC, /* Garbage Collect */
ERTS_PSTT_CPC, /* Check Process Code */
+#ifdef ERTS_NEW_PURGE_STRATEGY
+ ERTS_PSTT_CLA, /* Copy Literal Area */
+#endif
ERTS_PSTT_COHMQ, /* Change off heap message queue */
ERTS_PSTT_FTMQ /* Flush trace msg queue */
} ErtsProcSysTaskType;
@@ -3509,7 +3512,7 @@ wake_dirty_schedulers(ErtsRunQueue *rq, int one)
#endif
#define ERTS_NO_USED_RUNQS_SHIFT 16
-#define ERTS_NO_RUNQS_MASK 0xffff
+#define ERTS_NO_RUNQS_MASK 0xffffU
#if ERTS_MAX_NO_OF_SCHEDULERS > ERTS_NO_RUNQS_MASK
# error "Too large amount of schedulers allowed"
@@ -6671,14 +6674,24 @@ erts_schedule_process(Process *p, erts_aint32_t state, ErtsProcLocks locks)
}
static int
-schedule_process_sys_task(Process *p, erts_aint32_t prio, ErtsProcSysTask *st)
+schedule_process_sys_task(Process *p, erts_aint32_t prio, ErtsProcSysTask *st,
+ erts_aint32_t *fail_state_p)
{
int res;
int locked;
ErtsProcSysTaskQs *stqs, *free_stqs;
- erts_aint32_t state, a, n, enq_prio;
+ erts_aint32_t fail_state, state, a, n, enq_prio;
int enqueue; /* < 0 -> use proxy */
unsigned int prof_runnable_procs;
+ int strict_fail_state;
+
+ fail_state = *fail_state_p;
+ /*
+ * If fail state something other than just exiting process,
+ * ensure that the task wont be scheduled when the
+ * receiver is in the failure state.
+ */
+ strict_fail_state = fail_state != ERTS_PSFLG_EXITING;
res = 1; /* prepare for success */
st->next = st->prev = st; /* Prep for empty prio queue */
@@ -6705,7 +6718,8 @@ schedule_process_sys_task(Process *p, erts_aint32_t prio, ErtsProcSysTask *st)
erts_smp_proc_lock(p, ERTS_PROC_LOCK_STATUS);
state = erts_smp_atomic32_read_nob(&p->state);
- if (state & ERTS_PSFLG_EXITING) {
+ if (state & fail_state) {
+ *fail_state_p = (state & fail_state);
free_stqs = stqs;
res = 0;
goto cleanup;
@@ -6759,7 +6773,7 @@ schedule_process_sys_task(Process *p, erts_aint32_t prio, ErtsProcSysTask *st)
/* Status lock prevents out of order "runnable proc" trace msgs */
ERTS_SMP_LC_ASSERT(ERTS_PROC_LOCK_STATUS & erts_proc_lc_my_proc_locks(p));
- if (!prof_runnable_procs) {
+ if (!prof_runnable_procs && !strict_fail_state) {
erts_smp_proc_unlock(p, ERTS_PROC_LOCK_STATUS);
locked = 0;
}
@@ -6770,6 +6784,11 @@ schedule_process_sys_task(Process *p, erts_aint32_t prio, ErtsProcSysTask *st)
erts_aint32_t e;
n = e = a;
+ if (strict_fail_state && (a & fail_state)) {
+ *fail_state_p = (a & fail_state);
+ goto cleanup;
+ }
+
if (a & ERTS_PSFLG_FREE)
goto cleanup; /* We don't want to schedule free processes... */
@@ -8177,6 +8196,8 @@ sched_dirty_cpu_thread_func(void *vesdp)
esdp->thr_id += erts_no_schedulers;
+ erts_msacc_init_thread("dirty_cpu_scheduler", no, 0);
+
erts_thr_progress_register_unmanaged_thread(&callbacks);
#ifdef ERTS_ENABLE_LOCK_CHECK
{
@@ -8197,7 +8218,7 @@ sched_dirty_cpu_thread_func(void *vesdp)
#endif
erts_thread_init_float();
- process_main();
+ erts_dirty_process_main(esdp);
/* No schedulers should *ever* terminate */
erts_exit(ERTS_ABORT_EXIT,
"Dirty CPU scheduler thread number %beu terminated\n",
@@ -8222,6 +8243,8 @@ sched_dirty_io_thread_func(void *vesdp)
esdp->thr_id += erts_no_schedulers + erts_no_dirty_cpu_schedulers;
+ erts_msacc_init_thread("dirty_io_scheduler", no, 0);
+
erts_thr_progress_register_unmanaged_thread(&callbacks);
#ifdef ERTS_ENABLE_LOCK_CHECK
{
@@ -8242,7 +8265,7 @@ sched_dirty_io_thread_func(void *vesdp)
#endif
erts_thread_init_float();
- process_main();
+ erts_dirty_process_main(esdp);
/* No schedulers should *ever* terminate */
erts_exit(ERTS_ABORT_EXIT,
"Dirty I/O scheduler thread number %beu terminated\n",
@@ -9088,6 +9111,27 @@ resume_process_1(BIF_ALIST_1)
BIF_ERROR(BIF_P, BADARG);
}
+BIF_RETTYPE
+erts_internal_is_process_executing_dirty_1(BIF_ALIST_1)
+{
+ if (is_not_internal_pid(BIF_ARG_1))
+ BIF_ERROR(BIF_P, BADARG);
+#ifdef ERTS_DIRTY_SCHEDULERS
+ else {
+ Process *rp = erts_proc_lookup(BIF_ARG_1);
+ if (rp) {
+ erts_aint32_t state = erts_smp_atomic32_read_nob(&rp->state);
+ if (state & (ERTS_PSFLG_DIRTY_RUNNING
+ |ERTS_PSFLG_DIRTY_RUNNING_SYS)) {
+ BIF_RET(am_true);
+ }
+ }
+ }
+#endif
+ BIF_RET(am_false);
+}
+
+
Uint
erts_run_queues_len(Uint *qlen, int atomic_queues_read, int incl_active_sched)
{
@@ -9364,6 +9408,14 @@ erts_set_process_priority(Process *p, Eterm value)
}
}
+#ifdef __WIN32__
+Sint64
+erts_time2reds(ErtsMonotonicTime start, ErtsMonotonicTime end)
+{
+ return ERTS_TIME2REDS_IMPL__(start, end);
+}
+#endif
+
static int
scheduler_gc_proc(Process *c_p, int reds_left)
{
@@ -9377,77 +9429,6 @@ scheduler_gc_proc(Process *c_p, int reds_left)
return reds;
}
-static ERTS_INLINE void
-clean_dirty_start(Process *p)
-{
-#if defined(ERTS_DIRTY_SCHEDULERS) && !defined(ARCH_64)
- void *ptr = ERTS_PROC_SET_DIRTY_CPU_START(p, NULL);
- if (ptr)
- erts_free(ERTS_ALC_T_DIRTY_START, ptr);
-#endif
-}
-
-static ERTS_INLINE void
-save_dirty_start(ErtsSchedulerData *esdp, Process *c_p)
-{
-#ifdef ERTS_DIRTY_SCHEDULERS
- if (ERTS_RUNQ_IS_DIRTY_CPU_RUNQ(esdp->run_queue)) {
- ErtsMonotonicTime time = erts_get_monotonic_time(esdp);
-#ifdef ARCH_64
- ERTS_PROC_SET_DIRTY_CPU_START(c_p, (void *) time);
-#else
- ErtsMonotonicTime *stimep;
-
- stimep = (ErtsMonotonicTime *) ERTS_PROC_GET_DIRTY_CPU_START(c_p);
- if (!stimep) {
- stimep = erts_alloc(ERTS_ALC_T_DIRTY_START,
- sizeof(ErtsMonotonicTime));
- ERTS_PROC_SET_DIRTY_CPU_START(c_p, (void *) stimep);
- }
- *stimep = time;
-#endif
- }
-#endif
-}
-
-static ERTS_INLINE int
-get_dirty_reds(ErtsSchedulerData *esdp, Process *c_p)
-{
-
-#ifndef ERTS_DIRTY_SCHEDULERS
- return -1;
-#else
- ErtsMonotonicTime stime, time;
-
- if (!ERTS_RUNQ_IS_DIRTY_CPU_RUNQ(esdp->run_queue))
- return 1;
-
-#ifdef ARCH_64
- stime = (ErtsMonotonicTime) ERTS_PROC_GET_DIRTY_CPU_START(c_p);
-#else
- {
- ErtsMonotonicTime *stimep;
- stimep = (ErtsMonotonicTime *) ERTS_PROC_GET_DIRTY_CPU_START(c_p);
- ASSERT(stimep);
- stime = *stimep;
- }
-#endif
-
- time = erts_get_monotonic_time(esdp);
-
- ASSERT(stime && stime < time);
-
- time -= stime;
- time = ERTS_MONOTONIC_TO_USEC(time);
- time *= 2;
-
- if (time > INT_MAX)
- return INT_MAX;
- return (int) time;
-#endif
-
-}
-
/*
* schedule() is called from BEAM (process_main()) or HiPE
* (hipe_mode_switch()) when the current process is to be
@@ -9466,11 +9447,10 @@ get_dirty_reds(ErtsSchedulerData *esdp, Process *c_p)
* so that normal processes get to run more frequently.
*/
-Process *schedule(Process *p, int calls)
+Process *erts_schedule(ErtsSchedulerData *esdp, Process *p, int calls)
{
Process *proxy_p = NULL;
ErtsRunQueue *rq;
- ErtsSchedulerData *esdp;
int context_reds;
int fcalls;
int input_reductions;
@@ -9507,8 +9487,19 @@ Process *schedule(Process *p, int calls)
* Clean up after the process being scheduled out.
*/
if (!p) { /* NULL in the very first schedule() call */
+#ifdef ERTS_DIRTY_SCHEDULERS
+ is_normal_sched = !esdp;
+ if (is_normal_sched) {
+ esdp = erts_get_scheduler_data();
+ ASSERT(!ERTS_SCHEDULER_IS_DIRTY(esdp));
+ }
+ else {
+ ASSERT(ERTS_SCHEDULER_IS_DIRTY(esdp));
+ }
+#else
esdp = erts_get_scheduler_data();
- is_normal_sched = !ERTS_SCHEDULER_IS_DIRTY(esdp);
+ is_normal_sched = 1;
+#endif
rq = erts_get_runq_current(esdp);
ASSERT(esdp);
fcalls = (int) erts_smp_atomic32_read_acqb(&function_calls);
@@ -9517,12 +9508,12 @@ Process *schedule(Process *p, int calls)
} else {
#ifdef ERTS_SMP
#ifdef ERTS_DIRTY_SCHEDULERS
- esdp = p->scheduler_data;
- is_normal_sched = esdp != NULL;
- if (is_normal_sched)
+ is_normal_sched = !esdp;
+ if (is_normal_sched) {
+ esdp = p->scheduler_data;
ASSERT(!ERTS_SCHEDULER_IS_DIRTY(esdp));
+ }
else {
- esdp = erts_get_scheduler_data();
ASSERT(ERTS_SCHEDULER_IS_DIRTY(esdp));
}
#else
@@ -9541,10 +9532,7 @@ Process *schedule(Process *p, int calls)
ERTS_SMP_CHK_HAVE_ONLY_MAIN_PROC_LOCK(p);
- if (is_normal_sched)
- reds = actual_reds = calls - esdp->virtual_reds;
- else
- reds = actual_reds = get_dirty_reds(esdp, p);
+ reds = actual_reds = calls - esdp->virtual_reds;
ASSERT(actual_reds >= 0);
if (reds < ERTS_PROC_MIN_CONTEXT_SWITCH_REDS_COST)
@@ -9558,15 +9546,6 @@ Process *schedule(Process *p, int calls)
p->reds += actual_reds;
-#ifdef ERTS_SMP
- erts_smp_proc_lock(p, ERTS_PROC_LOCK_TRACE);
- if (p->trace_msg_q) {
- erts_smp_proc_unlock(p, ERTS_PROC_LOCK_TRACE);
- erts_schedule_flush_trace_messages(p->common.id);
- } else
- erts_smp_proc_unlock(p, ERTS_PROC_LOCK_TRACE);
-#endif
-
state = erts_smp_atomic32_read_nob(&p->state);
if (IS_TRACED(p)) {
@@ -9586,7 +9565,15 @@ Process *schedule(Process *p, int calls)
}
}
- erts_smp_proc_lock(p, ERTS_PROC_LOCK_STATUS);
+ erts_smp_proc_lock(p, ERTS_PROC_LOCK_STATUS|ERTS_PROC_LOCK_TRACE);
+
+#ifdef ERTS_SMP
+ if (p->trace_msg_q) {
+ erts_smp_proc_unlock(p, ERTS_PROC_LOCK_STATUS|ERTS_PROC_LOCK_TRACE);
+ erts_schedule_flush_trace_messages(p, 1);
+ erts_smp_proc_lock(p, ERTS_PROC_LOCK_STATUS|ERTS_PROC_LOCK_TRACE);
+ }
+#endif
/* have to re-read state after taking lock */
state = erts_smp_atomic32_read_nob(&p->state);
@@ -9594,9 +9581,11 @@ Process *schedule(Process *p, int calls)
#ifdef ERTS_SMP
if (is_normal_sched && (state & ERTS_PSFLG_PENDING_EXIT))
erts_handle_pending_exit(p, (ERTS_PROC_LOCK_MAIN
+ | ERTS_PROC_LOCK_TRACE
| ERTS_PROC_LOCK_STATUS));
if (p->pending_suspenders)
handle_pending_suspend(p, (ERTS_PROC_LOCK_MAIN
+ | ERTS_PROC_LOCK_TRACE
| ERTS_PROC_LOCK_STATUS));
#endif
@@ -9616,7 +9605,9 @@ Process *schedule(Process *p, int calls)
p->scheduler_data = NULL;
#endif
- erts_smp_proc_unlock(p, ERTS_PROC_LOCK_MAIN|ERTS_PROC_LOCK_STATUS);
+ erts_smp_proc_unlock(p, (ERTS_PROC_LOCK_MAIN
+ | ERTS_PROC_LOCK_STATUS
+ | ERTS_PROC_LOCK_TRACE));
ERTS_MSACC_SET_STATE_CACHED_M(ERTS_MSACC_STATE_OTHER);
@@ -9652,8 +9643,6 @@ Process *schedule(Process *p, int calls)
erts_smp_runq_lock(rq);
}
}
- BM_STOP_TIMER(system);
-
}
ERTS_SMP_LC_ASSERT(!is_normal_sched || !erts_thr_progress_is_blocking());
@@ -9889,10 +9878,6 @@ Process *schedule(Process *p, int calls)
goto check_activities_to_run;
}
- ERTS_MSACC_SET_STATE_CACHED_M(ERTS_MSACC_STATE_EMULATOR);
-
- BM_START_TIMER(system);
-
/*
* Take the chosen process out of the queue.
*/
@@ -9994,16 +9979,11 @@ Process *schedule(Process *p, int calls)
calls = 0;
reds = context_reds;
-#ifdef ERTS_SMP
-
erts_smp_runq_unlock(rq);
-#endif /* ERTS_SMP */
-
}
- if (!is_normal_sched)
- save_dirty_start(esdp, p);
+ ERTS_MSACC_SET_STATE_CACHED_M(ERTS_MSACC_STATE_EMULATOR);
#ifdef ERTS_SMP
@@ -10055,6 +10035,11 @@ Process *schedule(Process *p, int calls)
if (state & (ERTS_PSFLG_ACTIVE_SYS
| ERTS_PSFLG_PENDING_EXIT
| ERTS_PSFLG_EXITING)) {
+ /*
+ * IMPORTANT! We need to take care of
+ * scheduled check-process-code requests
+ * before continuing with dirty execution!
+ */
/* Migrate to normal scheduler... */
goto sunlock_sched_out_proc;
}
@@ -10153,7 +10138,7 @@ Process *schedule(Process *p, int calls)
}
}
- if (ERTS_IS_GC_DESIRED(p)) {
+ if (ERTS_IS_GC_DESIRED(p) && !ERTS_SCHEDULER_IS_DIRTY_IO(esdp)) {
if (!(state & ERTS_PSFLG_EXITING) && !(p->flags & (F_DELAY_GC|F_DISABLE_GC))) {
int cost = scheduler_gc_proc(p, reds);
calls += cost;
@@ -10464,6 +10449,27 @@ execute_sys_tasks(Process *c_p, erts_aint32_t *statep, int in_reds)
}
break;
}
+#ifdef ERTS_NEW_PURGE_STRATEGY
+ case ERTS_PSTT_CLA: {
+ int fcalls;
+ int cla_reds = 0;
+ if (!ERTS_PROC_GET_SAVED_CALLS_BUF(c_p))
+ fcalls = reds;
+ else
+ fcalls = reds - CONTEXT_REDS;
+ st_res = erts_proc_copy_literal_area(c_p,
+ &cla_reds,
+ fcalls,
+ st->arg[0] == am_true);
+ reds -= cla_reds;
+ if (is_non_value(st_res)) {
+ /* Needed gc, but gc was disabled */
+ save_gc_task(c_p, st, st_prio);
+ st = NULL;
+ }
+ break;
+ }
+#endif
case ERTS_PSTT_COHMQ:
reds -= erts_complete_off_heap_message_queue_change(c_p);
st_res = am_true;
@@ -10514,14 +10520,15 @@ cleanup_sys_tasks(Process *c_p, erts_aint32_t in_state, int in_reds)
switch (st->type) {
case ERTS_PSTT_GC:
- st_res = am_false;
- break;
case ERTS_PSTT_CPC:
- st_res = am_false;
- break;
case ERTS_PSTT_COHMQ:
st_res = am_false;
break;
+#ifdef ERTS_NEW_PURGE_STRATEGY
+ case ERTS_PSTT_CLA:
+ st_res = am_ok;
+ break;
+#endif
#ifdef ERTS_SMP
case ERTS_PSTT_FTMQ:
reds -= erts_flush_trace_messages(c_p, ERTS_PROC_LOCK_MAIN);
@@ -10542,22 +10549,83 @@ cleanup_sys_tasks(Process *c_p, erts_aint32_t in_state, int in_reds)
return reds;
}
-BIF_RETTYPE
-erts_internal_request_system_task_3(BIF_ALIST_3)
+#ifdef ERTS_DIRTY_SCHEDULERS
+
+static BIF_RETTYPE
+dispatch_system_task(Process *c_p, erts_aint_t fail_state,
+ ErtsProcSysTask *st, Eterm target,
+ Eterm prio, Eterm operation)
{
- Process *rp = erts_proc_lookup(BIF_ARG_1);
+ Process *rp;
+ ErtsProcLocks rp_locks = 0;
+ ErlOffHeap *ohp;
+ ErtsMessage *mp;
+ Eterm *hp, msg;
+ Uint hsz, osz;
+ BIF_RETTYPE ret;
+
+ switch (st->type) {
+ case ERTS_PSTT_CPC:
+ rp = erts_dirty_process_code_checker;
+ ASSERT(fail_state & (ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS));
+ if (c_p == rp) {
+ ERTS_BIF_PREP_RET(ret, am_dirty_execution);
+ return ret;
+ }
+ break;
+ default:
+ rp = NULL;
+ ERTS_INTERNAL_ERROR("Non-dispatchable system task");
+ break;
+ }
+
+ ERTS_BIF_PREP_RET(ret, am_ok);
+
+ /*
+ * Send message on the form: {Requester, Target, Operation}
+ */
+
+ ASSERT(is_immed(st->requester));
+ ASSERT(is_immed(target));
+ ASSERT(is_immed(prio));
+
+ osz = size_object(operation);
+ hsz = 5 /* 4-tuple */ + osz;
+
+ mp = erts_alloc_message_heap(rp, &rp_locks, hsz, &hp, &ohp);
+
+ msg = copy_struct(operation, osz, &hp, ohp);
+ msg = TUPLE4(hp, st->requester, target, prio, msg);
+
+ erts_queue_message(rp, rp_locks, mp, msg, st->requester);
+
+ if (rp_locks)
+ erts_smp_proc_unlock(rp, rp_locks);
+
+ return ret;
+}
+
+#endif
+
+static BIF_RETTYPE
+request_system_task(Process *c_p, Eterm requester, Eterm target,
+ Eterm priority, Eterm operation)
+{
+ BIF_RETTYPE ret;
+ Process *rp = erts_proc_lookup(target);
ErtsProcSysTask *st = NULL;
- erts_aint32_t prio;
+ erts_aint32_t prio, fail_state = ERTS_PSFLG_EXITING;
Eterm noproc_res, req_type;
- if (!rp && !is_internal_pid(BIF_ARG_1)) {
- if (!is_external_pid(BIF_ARG_1))
+ if (!rp && !is_internal_pid(target)) {
+ if (!is_external_pid(target))
goto badarg;
- if (external_pid_dist_entry(BIF_ARG_1) != erts_this_dist_entry)
+ if (external_pid_dist_entry(target) != erts_this_dist_entry)
goto badarg;
}
- switch (BIF_ARG_2) {
+ switch (priority) {
case am_max: prio = PRIORITY_MAX; break;
case am_high: prio = PRIORITY_HIGH; break;
case am_normal: prio = PRIORITY_NORMAL; break;
@@ -10565,11 +10633,11 @@ erts_internal_request_system_task_3(BIF_ALIST_3)
default: goto badarg;
}
- if (is_not_tuple(BIF_ARG_3))
+ if (is_not_tuple(operation))
goto badarg;
else {
int i;
- Eterm *tp = tuple_val(BIF_ARG_3);
+ Eterm *tp = tuple_val(operation);
Uint arity = arityval(*tp);
Eterm req_id;
Uint req_id_sz;
@@ -10607,7 +10675,7 @@ erts_internal_request_system_task_3(BIF_ALIST_3)
ERTS_INIT_OFF_HEAP(&st->off_heap);
hp = &st->heap[0];
- st->requester = BIF_P->common.id;
+ st->requester = requester;
st->reply_tag = req_type;
st->req_id_sz = req_id_sz;
st->req_id = req_id_sz == 0 ? req_id : copy_struct(req_id,
@@ -10641,26 +10709,85 @@ erts_internal_request_system_task_3(BIF_ALIST_3)
st->type = ERTS_PSTT_CPC;
if (!rp)
goto noproc;
+#ifdef ERTS_DIRTY_SCHEDULERS
+ /*
+ * If the process should start executing dirty
+ * code it is important that this task is
+ * aborted. Therefore this strict fail state...
+ */
+ fail_state |= (ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS);
+#endif
break;
+#ifdef ERTS_NEW_PURGE_STRATEGY
+ case am_copy_literals:
+ if (st->arg[0] != am_true && st->arg[0] != am_false)
+ goto badarg;
+ st->type = ERTS_PSTT_CLA;
+ noproc_res = am_ok;
+ if (!rp)
+ goto noproc;
+ break;
+#endif
+
default:
goto badarg;
}
- if (!schedule_process_sys_task(rp, prio, st)) {
- noproc:
- notify_sys_task_executed(BIF_P, st, noproc_res);
+ if (!schedule_process_sys_task(rp, prio, st, &fail_state)) {
+ Eterm failure;
+ if (fail_state & ERTS_PSFLG_EXITING) {
+ noproc:
+ failure = noproc_res;
+ }
+#ifdef ERTS_DIRTY_SCHEDULERS
+ else if (fail_state & (ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS)) {
+ ret = dispatch_system_task(c_p, fail_state, st,
+ target, priority, operation);
+ goto cleanup_return;
+ }
+#endif
+ else {
+ ERTS_INTERNAL_ERROR("Unknown failure schedule_process_sys_task()");
+ failure = am_internal_error;
+ }
+ notify_sys_task_executed(c_p, st, failure);
}
- BIF_RET(am_ok);
+ ERTS_BIF_PREP_RET(ret, am_ok);
+
+ return ret;
badarg:
+ ERTS_BIF_PREP_ERROR(ret, c_p, BADARG);
+
+#ifdef ERTS_DIRTY_SCHEDULERS
+cleanup_return:
+#endif
+
if (st) {
erts_cleanup_offheap(&st->off_heap);
erts_free(ERTS_ALC_T_PROC_SYS_TSK, st);
}
- BIF_ERROR(BIF_P, BADARG);
+
+ return ret;
+}
+
+BIF_RETTYPE
+erts_internal_request_system_task_3(BIF_ALIST_3)
+{
+ return request_system_task(BIF_P, BIF_P->common.id,
+ BIF_ARG_1, BIF_ARG_2, BIF_ARG_3);
+}
+
+BIF_RETTYPE
+erts_internal_request_system_task_4(BIF_ALIST_4)
+{
+ return request_system_task(BIF_P, BIF_ARG_1,
+ BIF_ARG_2, BIF_ARG_3, BIF_ARG_4);
}
static void
@@ -10669,7 +10796,7 @@ erts_schedule_generic_sys_task(Eterm pid, ErtsProcSysTaskType type)
Process *rp = erts_proc_lookup(pid);
if (rp) {
ErtsProcSysTask *st;
- erts_aint32_t state;
+ erts_aint32_t state, fail_state;
int i;
st = erts_alloc(ERTS_ALC_T_PROC_SYS_TSK,
@@ -10684,21 +10811,103 @@ erts_schedule_generic_sys_task(Eterm pid, ErtsProcSysTaskType type)
ERTS_INIT_OFF_HEAP(&st->off_heap);
state = erts_smp_atomic32_read_nob(&rp->state);
- if (!schedule_process_sys_task(rp, ERTS_PSFLGS_GET_USR_PRIO(state), st))
+ fail_state = ERTS_PSFLG_EXITING;
+
+ if (!schedule_process_sys_task(rp, ERTS_PSFLGS_GET_USR_PRIO(state),
+ st, &fail_state))
erts_free(ERTS_ALC_T_PROC_SYS_TSK, st);
}
}
+
void
erts_schedule_complete_off_heap_message_queue_change(Eterm pid)
{
erts_schedule_generic_sys_task(pid, ERTS_PSTT_COHMQ);
}
+#ifdef ERTS_DIRTY_SCHEDULERS
+
+static void
+flush_dirty_trace_messages(void *vpid)
+{
+ Process *proc;
+ Eterm pid;
+#ifdef ARCH_64
+ pid = (Eterm) vpid;
+#else
+ pid = *((Eterm *) vpid);
+ erts_free(ERTS_ALC_T_DIRTY_SL, vpid);
+#endif
+
+ proc = erts_proc_lookup(pid);
+ if (proc)
+ (void) erts_flush_trace_messages(proc, 0);
+}
+
+#endif /* ERTS_DIRTY_SCHEDULERS */
+
void
-erts_schedule_flush_trace_messages(Eterm pid)
+erts_schedule_flush_trace_messages(Process *proc, int force_on_proc)
{
+#ifdef ERTS_SMP
+ ErtsThrPrgrDelayHandle dhndl;
+#endif
+ Eterm pid = proc->common.id;
+
+#ifdef ERTS_DIRTY_SCHEDULERS
+ erts_aint32_t state;
+
+ if (!force_on_proc) {
+ state = erts_smp_atomic32_read_nob(&proc->state);
+ if (state & (ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS)) {
+ goto sched_flush_dirty;
+ }
+ }
+#endif
+
+#ifdef ERTS_SMP
+ dhndl = erts_thr_progress_unmanaged_delay();
+#endif
+
erts_schedule_generic_sys_task(pid, ERTS_PSTT_FTMQ);
+
+#ifdef ERTS_SMP
+ erts_thr_progress_unmanaged_continue(dhndl);
+#endif
+
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (!force_on_proc) {
+ state = erts_smp_atomic32_read_mb(&proc->state);
+ if (state & (ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS)) {
+ void *vargp;
+
+ sched_flush_dirty:
+ /*
+ * We traced 'proc' from another thread than
+ * it is executing on, and it is executing
+ * on a dirty scheduler. It might take a
+ * significant amount of time before it is
+ * scheduled out (where it gets opportunity
+ * to flush messages). We therefore schedule
+ * the flush on the first ordinary scheduler.
+ */
+
+#ifdef ARCH_64
+ vargp = (void *) pid;
+#else
+ {
+ Eterm *argp = erts_alloc(ERTS_ALC_T_DIRTY_SL, sizeof(Eterm));
+ *argp = pid;
+ vargp = (void *) argp;
+ }
+#endif
+ erts_schedule_misc_aux_work(1, flush_dirty_trace_messages, vargp);
+ }
+ }
+#endif
}
static void
@@ -11206,6 +11415,8 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
flags |= F_ON_HEAP_MSGQ;
}
+ ASSERT((flags & F_ON_HEAP_MSGQ) || (flags & F_OFF_HEAP_MSGQ));
+
if (!rq)
rq = erts_get_runq_proc(parent);
@@ -11218,18 +11429,16 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
goto error;
}
-#ifdef BM_COUNTERS
- processes_busy++;
-#endif
- BM_COUNT(processes_spawned);
+ ASSERT((erts_smp_atomic32_read_nob(&p->state)
+ & ERTS_PSFLG_ON_HEAP_MSGQ)
+ || (erts_smp_atomic32_read_nob(&p->state)
+ & ERTS_PSFLG_OFF_HEAP_MSGQ));
- BM_SWAP_TIMER(system,size);
#ifdef SHCOPY_SPAWN
arg_size = copy_shared_calculate(args, &info);
#else
arg_size = size_object(args);
#endif
- BM_SWAP_TIMER(size,system);
heap_need = arg_size;
p->flags = flags;
@@ -11306,18 +11515,12 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
p->max_arg_reg = sizeof(p->def_arg_reg)/sizeof(p->def_arg_reg[0]);
p->arg_reg[0] = mod;
p->arg_reg[1] = func;
- BM_STOP_TIMER(system);
- BM_MESSAGE(args,p,parent);
- BM_START_TIMER(system);
- BM_SWAP_TIMER(system,copy);
#ifdef SHCOPY_SPAWN
p->arg_reg[2] = copy_shared_perform(args, arg_size, &info, &p->htop, &p->off_heap);
DESTROY_SHCOPY(info);
#else
p->arg_reg[2] = copy_struct(args, arg_size, &p->htop, &p->off_heap);
#endif
- BM_MESSAGE_COPIED(arg_size);
- BM_SWAP_TIMER(copy,system);
p->arity = 3;
p->fvalue = NIL;
@@ -11738,8 +11941,6 @@ delete_process(Process* p)
if (nif_export)
erts_destroy_nif_export(nif_export);
- clean_dirty_start(p);
-
/* Cleanup psd */
psd = (ErtsPSD *) erts_smp_atomic_read_nob(&p->psd);
@@ -12305,7 +12506,6 @@ static void doit_exit_monitor(ErtsMonitor *mon, void *vpcontext)
ExitMonitorContext *pcontext = vpcontext;
DistEntry *dep;
ErtsMonitor *rmon;
- Process *rp;
switch (mon->type) {
case MON_ORIGIN:
@@ -12334,9 +12534,10 @@ static void doit_exit_monitor(ErtsMonitor *mon, void *vpcontext)
erts_deref_dist_entry(dep);
}
} else {
- ASSERT(is_pid(mon->pid));
- if (is_internal_pid(mon->pid)) { /* local by pid or name */
- rp = erts_pid2proc(NULL, 0, mon->pid, ERTS_PROC_LOCK_LINK);
+ ASSERT(is_pid(mon->pid) || is_port(mon->pid));
+ /* if is local by pid or name */
+ if (is_internal_pid(mon->pid)) {
+ Process *rp = erts_pid2proc(NULL, 0, mon->pid, ERTS_PROC_LOCK_LINK);
if (!rp) {
goto done;
}
@@ -12346,7 +12547,16 @@ static void doit_exit_monitor(ErtsMonitor *mon, void *vpcontext)
goto done;
}
erts_destroy_monitor(rmon);
- } else { /* remote by pid */
+ } else if (is_internal_port(mon->pid)) {
+ /* Is a local port */
+ Port *prt = erts_port_lookup_raw(mon->pid);
+ if (!prt) {
+ goto done;
+ }
+ erts_port_demonitor(pcontext->p,
+ ERTS_PORT_DEMONITOR_ORIGIN_ON_DEATHBED,
+ prt, mon->ref, NULL);
+ } else { /* remote by pid */
ASSERT(is_external_pid(mon->pid));
dep = external_pid_dist_entry(mon->pid);
ASSERT(dep != NULL);
@@ -12384,6 +12594,7 @@ static void doit_exit_monitor(ErtsMonitor *mon, void *vpcontext)
erts_port_release(prt);
} else if (is_internal_pid(mon->pid)) {/* local by name or pid */
Eterm watched;
+ Process *rp;
DeclareTmpHeapNoproc(lhp,3);
ErtsProcLocks rp_locks = (ERTS_PROC_LOCK_LINK
| ERTS_PROC_LOCKS_MSG_SEND);
@@ -12881,9 +13092,6 @@ erts_continue_exit_process(Process *p)
dep = (p->flags & F_DISTRIBUTION) ? erts_this_dist_entry : NULL;
erts_smp_proc_unlock(p, ERTS_PROC_LOCKS_ALL);
-#ifdef BM_COUNTERS
- processes_busy--;
-#endif
if (dep) {
erts_do_net_exits(dep, reason);
diff --git a/erts/emulator/beam/erl_process.h b/erts/emulator/beam/erl_process.h
index 2801947613..3347a7a60e 100644
--- a/erts/emulator/beam/erl_process.h
+++ b/erts/emulator/beam/erl_process.h
@@ -810,25 +810,13 @@ erts_smp_reset_max_len(ErtsRunQueue *rq, ErtsRunQueueInfo *rqi)
#define ERTS_PSD_DELAYED_GC_TASK_QS 4
#define ERTS_PSD_NIF_TRAP_EXPORT 5
#define ERTS_PSD_SUSPENDED_SAVED_CALLS_BUF 6
-#define ERTS_PSD_DIRTY_CPU_START 7
-#define ERTS_PSD_SIZE 8
+#define ERTS_PSD_SIZE 7
-#if !defined(HIPE) && !defined(ERTS_DIRTY_SCHEDULERS)
+#if !defined(HIPE)
# undef ERTS_PSD_SUSPENDED_SAVED_CALLS_BUF
-# undef ERTS_PSD_DIRTY_CPU_START
# undef ERTS_PSD_SIZE
# define ERTS_PSD_SIZE 6
-#elif !defined(HIPE)
-# undef ERTS_PSD_SUSPENDED_SAVED_CALLS_BUF
-# undef ERTS_PSD_DIRTY_CPU_START
-# undef ERTS_PSD_SIZE
-# define ERTS_PSD_DIRTY_CPU_START 6
-# define ERTS_PSD_SIZE 7
-#elif !defined(ERTS_DIRTY_SCHEDULERS)
-# undef ERTS_PSD_DIRTY_CPU_START
-# undef ERTS_PSD_SIZE
-# define ERTS_PSD_SIZE 7
#endif
typedef struct {
@@ -960,7 +948,6 @@ struct process {
Uint heap_sz; /* Size of heap in words */
Uint min_heap_size; /* Minimum size of heap (in words). */
Uint min_vheap_size; /* Minimum size of virtual heap (in words). */
- Uint max_heap_size; /* Maximum size of heap (in words). */
#if !defined(NO_FPE_SIGNALS) || defined(HIPE)
volatile unsigned long fp_exception;
@@ -1002,8 +989,7 @@ struct process {
Uint32 rcount; /* suspend count */
int schedule_count; /* Times left to reschedule a low prio process */
Uint reds; /* No of reductions for this process */
- Eterm group_leader; /* Pid in charge
- (can be boxed) */
+ Eterm group_leader; /* Pid in charge (can be boxed) */
Uint flags; /* Trap exit, etc (no trace flags anymore) */
Eterm fvalue; /* Exit & Throw value (failure reason) */
Uint freason; /* Reason for detected failure */
@@ -1061,6 +1047,7 @@ struct process {
Eterm *old_hend; /* Heap pointers for generational GC. */
Eterm *old_htop;
Eterm *old_heap;
+ Uint max_heap_size; /* Maximum size of heap (in words). */
Uint16 gen_gcs; /* Number of (minor) generational GCs. */
Uint16 max_gen_gcs; /* Max minor gen GCs before fullsweep. */
ErlOffHeap off_heap; /* Off-heap data updated by copy_struct(). */
@@ -1179,6 +1166,9 @@ void erts_check_for_holes(Process* p);
* USR_PRIO -> User prio. i.e., prio the user has set.
* PRQ_PRIO -> Prio queue prio, i.e., prio queue currently
* enqueued in.
+ *
+ * Update etp-proc-state-int in $ERL_TOP/erts/etc/unix/etp-commands.in
+ * when changing ERTS_PSFLG_*.
*/
#define ERTS_PSFLGS_ACT_PRIO_MASK \
(ERTS_PSFLGS_PRIO_MASK << ERTS_PSFLGS_ACT_PRIO_OFFSET)
@@ -1338,10 +1328,13 @@ ERTS_GLB_INLINE void erts_heap_frag_shrink(Process* p, Eterm* hp);
ERTS_GLB_INLINE void erts_heap_frag_shrink(Process* p, Eterm* hp)
{
ErlHeapFragment* hf = MBUF(p);
+ Uint sz;
- ASSERT(hf!=NULL && (hp - hf->mem < (unsigned long)hf->alloc_size));
+ ASSERT(hf!=NULL && (hp - hf->mem < hf->alloc_size));
- hf->used_size = hp - hf->mem;
+ sz = hp - hf->mem;
+ p->mbuf_sz -= hf->used_size - sz;
+ hf->used_size = sz;
}
#endif /* inline */
@@ -1559,9 +1552,9 @@ extern int erts_system_profile_ts_type;
#define ERTS_SCHEDULER_IS_DIRTY(ESDP) \
((ESDP)->dirty_no.s.num != 0)
#define ERTS_SCHEDULER_IS_DIRTY_CPU(ESDP) \
- ((ESDP)->dirty_no.s.type == 0)
+ (ERTS_SCHEDULER_IS_DIRTY((ESDP)) & ((ESDP)->dirty_no.s.type == 0))
#define ERTS_SCHEDULER_IS_DIRTY_IO(ESDP) \
- ((ESDP)->dirty_no.s.type == 1)
+ (ERTS_SCHEDULER_IS_DIRTY((ESDP)) & ((ESDP)->dirty_no.s.type == 1))
#else
#define ERTS_SCHEDULER_IS_DIRTY(ESDP) 0
#define ERTS_SCHEDULER_IS_DIRTY_CPU(ESDP) 0
@@ -1777,7 +1770,7 @@ void erts_schedule_thr_prgr_later_cleanup_op(void (*)(void *),
ErtsThrPrgrLaterOp *,
UWord);
void erts_schedule_complete_off_heap_message_queue_change(Eterm pid);
-void erts_schedule_flush_trace_messages(Eterm pid);
+void erts_schedule_flush_trace_messages(Process *proc, int force_on_proc);
int erts_flush_trace_messages(Process *c_p, ErtsProcLocks locks);
#if defined(ERTS_SMP) && defined(ERTS_ENABLE_LOCK_CHECK)
@@ -1831,7 +1824,7 @@ Eterm erts_get_schedulers_binds(Process *c_p);
Eterm erts_set_cpu_topology(Process *c_p, Eterm term);
Eterm erts_bind_schedulers(Process *c_p, Eterm how);
ErtsRunQueue *erts_schedid2runq(Uint);
-Process *schedule(Process*, int);
+Process *erts_schedule(ErtsSchedulerData *, Process*, int);
void erts_schedule_misc_op(void (*)(void *), void *);
Eterm erl_create_process(Process*, Eterm, Eterm, Eterm, ErlSpawnOpts*);
void erts_do_exit_process(Process*, Eterm);
@@ -2061,13 +2054,6 @@ erts_psd_set(Process *p, int ix, void *data)
((struct saved_calls *) erts_psd_set((P), ERTS_PSD_SUSPENDED_SAVED_CALLS_BUF, (void *) (SCB)))
#endif
-#ifdef ERTS_DIRTY_SCHEDULERS
-#define ERTS_PROC_GET_DIRTY_CPU_START(P) \
- ((void *) erts_psd_get((P), ERTS_PSD_DIRTY_CPU_START))
-#define ERTS_PROC_SET_DIRTY_CPU_START(P, DCS) \
- ((void *) erts_psd_set((P), ERTS_PSD_DIRTY_CPU_START, (void *) (DCS)))
-#endif
-
ERTS_GLB_INLINE Eterm erts_proc_get_error_handler(Process *p);
ERTS_GLB_INLINE Eterm erts_proc_set_error_handler(Process *p, Eterm handler);
@@ -2490,6 +2476,35 @@ erts_get_atom_cache_map(Process *c_p)
}
#endif
+#ifdef __WIN32__
+/*
+ * Don't want erts_time2reds() inlined in beam_emu.c on windows since
+ * it is compiled with gcc which fails on it. Implementation is in
+ * erl_process.c on windows.
+ */
+# define ERTS_TIME2REDS_IMPL__ erts_time2reds__
+#else
+# define ERTS_TIME2REDS_IMPL__ erts_time2reds
+#endif
+
+ERTS_GLB_INLINE Sint64 ERTS_TIME2REDS_IMPL__(ErtsMonotonicTime start,
+ ErtsMonotonicTime end);
+
+#if ERTS_GLB_INLINE_INCL_FUNC_DEF
+ERTS_GLB_INLINE Sint64
+ERTS_TIME2REDS_IMPL__(ErtsMonotonicTime start, ErtsMonotonicTime end)
+{
+ ErtsMonotonicTime time = end - start;
+ ASSERT(time >= 0);
+ time = ERTS_MONOTONIC_TO_USEC(time);
+ if (time == 0)
+ return (Sint64) 1; /* At least one reduction */
+ /* Currently two reductions per micro second */
+ time *= (CONTEXT_REDS-1)/1000 + 1;
+ return (Sint64) time;
+}
+#endif
+
Process *erts_pid2proc_suspend(Process *,
ErtsProcLocks,
Eterm,
diff --git a/erts/emulator/beam/erl_process_dump.c b/erts/emulator/beam/erl_process_dump.c
index eeaa9a569c..a70dfb8e73 100644
--- a/erts/emulator/beam/erl_process_dump.c
+++ b/erts/emulator/beam/erl_process_dump.c
@@ -560,6 +560,11 @@ dump_externally(int to, void *to_arg, Eterm term)
}
}
+ /* Do not handle maps */
+ if (is_map(term)) {
+ term = am_undefined;
+ }
+
s = p = sbuf;
erts_encode_ext(term, &p);
erts_print(to, to_arg, "E%X:", p-s);
diff --git a/erts/emulator/beam/erl_ptab.h b/erts/emulator/beam/erl_ptab.h
index a5931ffc25..fecfd96ab0 100644
--- a/erts/emulator/beam/erl_ptab.h
+++ b/erts/emulator/beam/erl_ptab.h
@@ -168,7 +168,7 @@ typedef struct {
#define ERTS_PTAB_INVALID_ID(TAG) \
((Eterm) \
- ((((1 << ERTS_PTAB_ID_DATA_SIZE) - 1) << ERTS_PTAB_ID_DATA_SHIFT) \
+ ((((1U << ERTS_PTAB_ID_DATA_SIZE) - 1) << ERTS_PTAB_ID_DATA_SHIFT) \
| (TAG)))
#define erts_ptab_is_valid_id(ID) \
diff --git a/erts/emulator/beam/erl_thr_progress.c b/erts/emulator/beam/erl_thr_progress.c
index 542541165b..700ed90def 100644
--- a/erts/emulator/beam/erl_thr_progress.c
+++ b/erts/emulator/beam/erl_thr_progress.c
@@ -95,9 +95,9 @@
#define ERTS_THR_PRGR_FTL_ERR_BLCK_POLL_INTERVAL 100
-#define ERTS_THR_PRGR_LFLG_BLOCK (((erts_aint32_t) 1) << 31)
-#define ERTS_THR_PRGR_LFLG_NO_LEADER (((erts_aint32_t) 1) << 30)
-#define ERTS_THR_PRGR_LFLG_WAITING_UM (((erts_aint32_t) 1) << 29)
+#define ERTS_THR_PRGR_LFLG_BLOCK ((erts_aint32_t) (1U << 31))
+#define ERTS_THR_PRGR_LFLG_NO_LEADER ((erts_aint32_t) (1U << 30))
+#define ERTS_THR_PRGR_LFLG_WAITING_UM ((erts_aint32_t) (1U << 29))
#define ERTS_THR_PRGR_LFLG_ACTIVE_MASK (~(ERTS_THR_PRGR_LFLG_NO_LEADER \
| ERTS_THR_PRGR_LFLG_BLOCK \
| ERTS_THR_PRGR_LFLG_WAITING_UM))
@@ -142,8 +142,8 @@ init_nob(ERTS_THR_PRGR_ATOMIC *atmc, ErtsThrPrgrVal val)
#warning "Thread progress state debug is on"
#endif
-#define ERTS_THR_PROGRESS_STATE_DEBUG_LEADER (((erts_aint32_t) 1) << 0)
-#define ERTS_THR_PROGRESS_STATE_DEBUG_ACTIVE (((erts_aint32_t) 1) << 1)
+#define ERTS_THR_PROGRESS_STATE_DEBUG_LEADER ((erts_aint32_t) (1U << 0))
+#define ERTS_THR_PROGRESS_STATE_DEBUG_ACTIVE ((erts_aint32_t) (1U << 1))
#define ERTS_THR_PROGRESS_STATE_DEBUG_INIT(ID) \
erts_atomic32_init_nob(&intrnl->thr[(ID)].data.state_debug, \
@@ -179,10 +179,10 @@ do { \
#endif /* ERTS_THR_PROGRESS_STATE_DEBUG */
-#define ERTS_THR_PRGR_BLCKR_INVALID (~((erts_aint32_t) 0))
-#define ERTS_THR_PRGR_BLCKR_UNMANAGED (((erts_aint32_t) 1) << 31)
+#define ERTS_THR_PRGR_BLCKR_INVALID ((erts_aint32_t) (~0U))
+#define ERTS_THR_PRGR_BLCKR_UNMANAGED ((erts_aint32_t) (1U << 31))
-#define ERTS_THR_PRGR_BC_FLG_NOT_BLOCKING (((erts_aint32_t) 1) << 31)
+#define ERTS_THR_PRGR_BC_FLG_NOT_BLOCKING ((erts_aint32_t) (1U << 31))
#define ERTS_THR_PRGR_BM_BITS 32
#define ERTS_THR_PRGR_BM_SHIFT 5
@@ -700,6 +700,7 @@ leader_update(ErtsThrPrgrData *tpd)
tpd->leader_state.chk_next_ix = no_managed;
erts_atomic32_set_nob(&intrnl->misc.data.umrefc_ix.current,
(erts_aint32_t) new_umrefc_ix);
+ tpd->leader_state.umrefc_ix.current = new_umrefc_ix;
ETHR_MEMBAR(ETHR_StoreLoad);
refc = erts_atomic_read_nob(&intrnl->umrefc[umrefc_ix].refc);
ASSERT(refc >= 0);
@@ -969,8 +970,10 @@ erts_thr_progress_unmanaged_continue__(ErtsThrPrgrDelayHandle handle)
#ifdef ERTS_ENABLE_LOCK_CHECK
ErtsThrPrgrData *tpd = perhaps_thr_prgr_data(NULL);
ERTS_LC_ASSERT(tpd && tpd->is_delaying);
- tpd->is_delaying = 0;
- return_tmp_thr_prgr_data(tpd);
+ tpd->is_delaying--;
+ ASSERT(tpd->is_delaying >= 0);
+ if (!tpd->is_delaying)
+ return_tmp_thr_prgr_data(tpd);
#endif
ASSERT(!erts_thr_progress_is_managed_thread());
@@ -995,7 +998,7 @@ erts_thr_progress_unmanaged_delay__(void)
#ifdef ERTS_ENABLE_LOCK_CHECK
{
ErtsThrPrgrData *tpd = tmp_thr_prgr_data(NULL);
- tpd->is_delaying = 1;
+ tpd->is_delaying++;
}
#endif
return (ErtsThrPrgrDelayHandle) umrefc_ix;
@@ -1186,7 +1189,7 @@ wakeup_unmanaged_threads(ErtsThrPrgrUnmanagedWakeupData *umwd)
int hbase = hix << ERTS_THR_PRGR_BM_SHIFT;
int hbit;
for (hbit = 0; hbit < ERTS_THR_PRGR_BM_BITS; hbit++) {
- if (hmask & (1 << hbit)) {
+ if (hmask & (1U << hbit)) {
erts_aint_t lmask;
int lix = hbase + hbit;
ASSERT(0 <= lix && lix < umwd->low_sz);
@@ -1195,7 +1198,7 @@ wakeup_unmanaged_threads(ErtsThrPrgrUnmanagedWakeupData *umwd)
int lbase = lix << ERTS_THR_PRGR_BM_SHIFT;
int lbit;
for (lbit = 0; lbit < ERTS_THR_PRGR_BM_BITS; lbit++) {
- if (lmask & (1 << lbit)) {
+ if (lmask & (1U << lbit)) {
int id = lbase + lbit;
wakeup_unmanaged(id);
}
diff --git a/erts/emulator/beam/erl_time_sup.c b/erts/emulator/beam/erl_time_sup.c
index 9e37106b88..6aa2a7500f 100644
--- a/erts/emulator/beam/erl_time_sup.c
+++ b/erts/emulator/beam/erl_time_sup.c
@@ -2133,22 +2133,26 @@ time_unit_conversion(Process *c_p, Eterm term, ErtsMonotonicTime val, ErtsMonoto
/* Convert to common user specified time units */
switch (term) {
+ case am_second:
case am_seconds:
case make_small(1):
result = ERTS_MONOTONIC_TO_SEC(val) + muloff*ERTS_MONOTONIC_OFFSET_SEC;
ERTS_BIF_PREP_RET(ret, make_time_val(c_p, result));
break;
+ case am_millisecond:
case am_milli_seconds:
case make_small(1000):
result = ERTS_MONOTONIC_TO_MSEC(val) + muloff*ERTS_MONOTONIC_OFFSET_MSEC;
ERTS_BIF_PREP_RET(ret, make_time_val(c_p, result));
break;
+ case am_microsecond:
case am_micro_seconds:
case make_small(1000*1000):
result = ERTS_MONOTONIC_TO_USEC(val) + muloff*ERTS_MONOTONIC_OFFSET_USEC;
ERTS_BIF_PREP_RET(ret, make_time_val(c_p, result));
break;
#ifdef ARCH_64
+ case am_nanosecond:
case am_nano_seconds:
case make_small(1000*1000*1000):
result = ERTS_MONOTONIC_TO_NSEC(val) + muloff*ERTS_MONOTONIC_OFFSET_NSEC;
@@ -2159,7 +2163,7 @@ time_unit_conversion(Process *c_p, Eterm term, ErtsMonotonicTime val, ErtsMonoto
Eterm value, native_res;
#ifndef ARCH_64
Sint user_res;
- if (term == am_nano_seconds)
+ if (term == am_nanosecond || term == am_nano_seconds)
goto to_nano_seconds;
if (term_to_Sint(term, &user_res)) {
if (user_res == 1000*1000*1000) {
diff --git a/erts/emulator/beam/erl_trace.c b/erts/emulator/beam/erl_trace.c
index ca001fc156..8c84303997 100644
--- a/erts/emulator/beam/erl_trace.c
+++ b/erts/emulator/beam/erl_trace.c
@@ -493,8 +493,8 @@ erts_get_system_seq_tracer(void)
if (st != erts_tracer_nil &&
call_enabled_tracer(st, NULL, TRACE_FUN_ENABLED,
am_trace_status, am_undefined) == am_remove) {
- erts_set_system_seq_tracer(NULL, 0, erts_tracer_nil);
- st = erts_tracer_nil;
+ st = erts_set_system_seq_tracer(NULL, 0, erts_tracer_nil);
+ ERTS_TRACER_CLEAR(&st);
}
return st;
@@ -813,6 +813,9 @@ trace_send(Process *p, Eterm to, Eterm msg)
ErtsTracerNif *tnif = NULL;
ErtsTracingEvent* te;
Eterm pam_result;
+#ifdef ERTS_SMP
+ ErtsThrPrgrDelayHandle dhndl;
+#endif
ASSERT(ARE_TRACE_FLAGS_ON(p, F_TRACE_SEND));
@@ -837,6 +840,10 @@ trace_send(Process *p, Eterm to, Eterm msg)
} else
pam_result = am_true;
+#ifdef ERTS_SMP
+ dhndl = erts_thr_progress_unmanaged_delay();
+#endif
+
if (is_internal_pid(to)) {
if (!erts_proc_lookup(to))
goto send_to_non_existing_process;
@@ -852,6 +859,11 @@ trace_send(Process *p, Eterm to, Eterm msg)
send_to_tracer_nif(p, &p->common, p->common.id, tnif, TRACE_FUN_T_SEND,
operation, msg, to, pam_result);
}
+
+#ifdef ERTS_SMP
+ erts_thr_progress_unmanaged_continue(dhndl);
+#endif
+
erts_match_set_release_result_trace(p, pam_result);
}
@@ -1167,6 +1179,8 @@ erts_call_trace(Process* p, BeamInstr mfa[3], Binary *match_spec,
Eterm transformed_args[MAX_ARG];
ErtsTracer pre_ms_tracer = erts_tracer_nil;
+ ERTS_SMP_LC_ASSERT(erts_proc_lc_my_proc_locks(p) & ERTS_PROC_LOCK_MAIN);
+
ASSERT(tracer);
if (ERTS_TRACER_COMPARE(*tracer, erts_tracer_true)) {
/* Breakpoint trace enabled without specifying tracer =>
@@ -2115,32 +2129,36 @@ profile_runnable_proc(Process *p, Eterm status){
Eterm *hp, msg;
Eterm where = am_undefined;
ErlHeapFragment *bp = NULL;
- int use_current = 1;
+ BeamInstr *current = NULL;
#ifndef ERTS_SMP
#define LOCAL_HEAP_SIZE (4 + 6 + ERTS_TRACE_PATCH_TS_MAX_SIZE)
-
DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE);
UseTmpHeapNoproc(LOCAL_HEAP_SIZE);
hp = local_heap;
#else
+ ErtsThrPrgrDelayHandle dhndl;
Uint hsz = 4 + 6 + patch_ts_size(erts_system_profile_ts_type)-1;
#endif
-
- if (ERTS_PROC_IS_EXITING(p)) {
- use_current = 0;
- /* could probably set 'where' to 'exiting' here,
- * though it's not documented as such */
- } else {
- if (!p->current) {
- p->current = find_function_from_pc(p->i);
+ /* Assumptions:
+ * We possibly don't have the MAIN_LOCK for the process p here.
+ * We assume that we can read from p->current and p->i atomically
+ */
+#ifdef ERTS_SMP
+ dhndl = erts_thr_progress_unmanaged_delay(); /* suspend purge operations */
+#endif
+
+ if (!ERTS_PROC_IS_EXITING(p)) {
+ if (p->current) {
+ current = p->current;
+ } else {
+ current = find_function_from_pc(p->i);
}
- use_current = p->current != NULL;
}
#ifdef ERTS_SMP
- if (!use_current) {
+ if (!current) {
hsz -= 4;
}
@@ -2148,11 +2166,15 @@ profile_runnable_proc(Process *p, Eterm status){
hp = bp->mem;
#endif
- if (use_current) {
- where = TUPLE3(hp, p->current[0], p->current[1], make_small(p->current[2])); hp += 4;
+ if (current) {
+ where = TUPLE3(hp, current[0], current[1], make_small(current[2])); hp += 4;
} else {
where = make_small(0);
}
+
+#ifdef ERTS_SMP
+ erts_thr_progress_unmanaged_continue(dhndl);
+#endif
erts_smp_mtx_lock(&smq_mtx);
@@ -2625,7 +2647,7 @@ static void init_tracer_template(ErtsTracerNif *tnif) {
/* default tracer functions */
tnif->tracers[TRACE_FUN_DEFAULT].name = "trace";
- tnif->tracers[TRACE_FUN_DEFAULT].arity = 6;
+ tnif->tracers[TRACE_FUN_DEFAULT].arity = 5;
tnif->tracers[TRACE_FUN_DEFAULT].cb = NULL;
tnif->tracers[TRACE_FUN_ENABLED].name = "enabled";
@@ -2634,35 +2656,35 @@ static void init_tracer_template(ErtsTracerNif *tnif) {
/* specific tracer functions */
tnif->tracers[TRACE_FUN_T_SEND].name = "trace_send";
- tnif->tracers[TRACE_FUN_T_SEND].arity = 6;
+ tnif->tracers[TRACE_FUN_T_SEND].arity = 5;
tnif->tracers[TRACE_FUN_T_SEND].cb = NULL;
tnif->tracers[TRACE_FUN_T_RECEIVE].name = "trace_receive";
- tnif->tracers[TRACE_FUN_T_RECEIVE].arity = 6;
+ tnif->tracers[TRACE_FUN_T_RECEIVE].arity = 5;
tnif->tracers[TRACE_FUN_T_RECEIVE].cb = NULL;
tnif->tracers[TRACE_FUN_T_CALL].name = "trace_call";
- tnif->tracers[TRACE_FUN_T_CALL].arity = 6;
+ tnif->tracers[TRACE_FUN_T_CALL].arity = 5;
tnif->tracers[TRACE_FUN_T_CALL].cb = NULL;
tnif->tracers[TRACE_FUN_T_SCHED_PROC].name = "trace_running_procs";
- tnif->tracers[TRACE_FUN_T_SCHED_PROC].arity = 6;
+ tnif->tracers[TRACE_FUN_T_SCHED_PROC].arity = 5;
tnif->tracers[TRACE_FUN_T_SCHED_PROC].cb = NULL;
tnif->tracers[TRACE_FUN_T_SCHED_PORT].name = "trace_running_ports";
- tnif->tracers[TRACE_FUN_T_SCHED_PORT].arity = 6;
+ tnif->tracers[TRACE_FUN_T_SCHED_PORT].arity = 5;
tnif->tracers[TRACE_FUN_T_SCHED_PORT].cb = NULL;
tnif->tracers[TRACE_FUN_T_GC].name = "trace_garbage_collection";
- tnif->tracers[TRACE_FUN_T_GC].arity = 6;
+ tnif->tracers[TRACE_FUN_T_GC].arity = 5;
tnif->tracers[TRACE_FUN_T_GC].cb = NULL;
tnif->tracers[TRACE_FUN_T_PROCS].name = "trace_procs";
- tnif->tracers[TRACE_FUN_T_PROCS].arity = 6;
+ tnif->tracers[TRACE_FUN_T_PROCS].arity = 5;
tnif->tracers[TRACE_FUN_T_PROCS].cb = NULL;
tnif->tracers[TRACE_FUN_T_PORTS].name = "trace_ports";
- tnif->tracers[TRACE_FUN_T_PORTS].arity = 6;
+ tnif->tracers[TRACE_FUN_T_PORTS].arity = 5;
tnif->tracers[TRACE_FUN_T_PORTS].cb = NULL;
/* specific enabled functions */
@@ -2834,10 +2856,12 @@ send_to_tracer_nif_raw(Process *c_p, Process *tracee,
Eterm tag, Eterm msg, Eterm extra, Eterm pam_result)
{
if (tnif || (tnif = lookup_tracer_nif(tracer)) != NULL) {
-#define MAP_SIZE 3
- Eterm argv[6], local_heap[3+MAP_SIZE /* values */ + (MAP_SIZE+1 /* keys */)];
+#define MAP_SIZE 4
+ Eterm argv[5], local_heap[3+MAP_SIZE /* values */ + (MAP_SIZE+1 /* keys */)];
flatmap_t *map = (flatmap_t*)(local_heap+(MAP_SIZE+1));
Eterm *map_values = flatmap_get_values(map);
+ Eterm *map_keys = local_heap + 1;
+ Uint map_elem_count = 0;
topt = (tnif->tracers[topt].cb) ? topt : TRACE_FUN_DEFAULT;
ASSERT(topt < NIF_TRACER_TYPES);
@@ -2846,31 +2870,40 @@ send_to_tracer_nif_raw(Process *c_p, Process *tracee,
argv[1] = ERTS_TRACER_STATE(tracer);
argv[2] = t_p_id;
argv[3] = msg;
- argv[4] = extra == THE_NON_VALUE ? am_undefined : extra;
- argv[5] = make_flatmap(map);
+ argv[4] = make_flatmap(map);
map->thing_word = MAP_HEADER_FLATMAP;
- map->size = MAP_SIZE;
- map->keys = TUPLE3(local_heap, am_match_spec_result, am_scheduler_id, am_timestamp);
-
- *map_values++ = pam_result;
- if (tracee_flags & F_TRACE_SCHED_NO)
- *map_values++ = make_small(erts_get_scheduler_id());
- else
- *map_values++ = am_undefined;
+
+ if (extra != THE_NON_VALUE) {
+ map_keys[map_elem_count] = am_extra;
+ map_values[map_elem_count++] = extra;
+ }
+
+ if (pam_result != am_true) {
+ map_keys[map_elem_count] = am_match_spec_result;
+ map_values[map_elem_count++] = pam_result;
+ }
+
+ if (tracee_flags & F_TRACE_SCHED_NO) {
+ map_keys[map_elem_count] = am_scheduler_id;
+ map_values[map_elem_count++] = make_small(erts_get_scheduler_id());
+ }
+ map_keys[map_elem_count] = am_timestamp;
if (tracee_flags & F_NOW_TS)
#ifdef HAVE_ERTS_NOW_CPU
if (erts_cpu_timestamp)
- *map_values++ = am_cpu_timestamp;
+ map_values[map_elem_count++] = am_cpu_timestamp;
else
#endif
- *map_values++ = am_timestamp;
+ map_values[map_elem_count++] = am_timestamp;
else if (tracee_flags & F_STRICT_MON_TS)
- *map_values++ = am_strict_monotonic;
+ map_values[map_elem_count++] = am_strict_monotonic;
else if (tracee_flags & F_MON_TS)
- *map_values++ = am_monotonic;
- else
- *map_values++ = am_undefined;
+ map_values[map_elem_count++] = am_monotonic;
+
+ map->size = map_elem_count;
+ map->keys = make_tuple(local_heap);
+ local_heap[0] = make_arityval(map_elem_count);
#undef MAP_SIZE
erts_nif_call_function(c_p, tracee ? tracee : c_p,
@@ -3089,6 +3122,7 @@ erts_tracer_update(ErtsTracer *tracer, const ErtsTracer new_tracer)
if (is_not_nil(*tracer)) {
Uint offs = 2;
UWord size = 2 * sizeof(Eterm) + sizeof(ErtsThrPrgrLaterOp);
+ ErtsThrPrgrLaterOp *lop;
ASSERT(is_list(*tracer));
if (is_not_immed(ERTS_TRACER_STATE(*tracer))) {
hf = (void*)(((char*)(ptr_val(*tracer)) - offsetof(ErlHeapFragment, mem)));
@@ -3096,6 +3130,16 @@ erts_tracer_update(ErtsTracer *tracer, const ErtsTracer new_tracer)
size = hf->alloc_size * sizeof(Eterm) + sizeof(ErlHeapFragment);
ASSERT(offs == size_object(*tracer));
}
+
+ /* sparc assumes that all structs are double word aligned, so we
+ have to align the ErtsThrPrgrLaterOp struct otherwise it may
+ segfault.*/
+ if ((UWord)(ptr_val(*tracer) + offs) % (sizeof(UWord)*2) == sizeof(UWord))
+ offs += 1;
+
+ lop = (ErtsThrPrgrLaterOp*)(ptr_val(*tracer) + offs);
+ ASSERT((UWord)lop % (sizeof(UWord)*2) == 0);
+
/* We schedule the free:ing of the tracer until after a thread progress
has been made so that we know that no schedulers have any references
to it. Because we do this, it is possible to release all locks of a
@@ -3103,9 +3147,7 @@ erts_tracer_update(ErtsTracer *tracer, const ErtsTracer new_tracer)
without having to worry if it is free'd.
*/
erts_schedule_thr_prgr_later_cleanup_op(
- free_tracer, (void*)(*tracer),
- (ErtsThrPrgrLaterOp*)(ptr_val(*tracer) + offs),
- size);
+ free_tracer, (void*)(*tracer), lop, size);
}
if (is_nil(new_tracer)) {
@@ -3115,16 +3157,17 @@ erts_tracer_update(ErtsTracer *tracer, const ErtsTracer new_tracer)
Not sure if it is worth it, we save 4 words (sizeof(ErlHeapFragment))
per tracer. */
Eterm *hp = erts_alloc(ERTS_ALC_T_HEAP_FRAG,
- 2*sizeof(Eterm) + sizeof(ErtsThrPrgrLaterOp));
+ 3*sizeof(Eterm) + sizeof(ErtsThrPrgrLaterOp));
*tracer = CONS(hp, ERTS_TRACER_MODULE(new_tracer),
ERTS_TRACER_STATE(new_tracer));
} else {
Eterm *hp, tracer_state = ERTS_TRACER_STATE(new_tracer),
tracer_module = ERTS_TRACER_MODULE(new_tracer);
Uint sz = size_object(tracer_state);
- hf = new_message_buffer(sz + 2 /* cons cell */ + (sizeof(ErtsThrPrgrLaterOp)+sizeof(Eterm)-1)/sizeof(Eterm));
+ hf = new_message_buffer(sz + 2 /* cons cell */ +
+ (sizeof(ErtsThrPrgrLaterOp)+sizeof(Eterm)-1)/sizeof(Eterm) + 1);
hp = hf->mem + 2;
- hf->used_size -= (sizeof(ErtsThrPrgrLaterOp)+sizeof(Eterm)-1)/sizeof(Eterm);
+ hf->used_size -= (sizeof(ErtsThrPrgrLaterOp)+sizeof(Eterm)-1)/sizeof(Eterm) + 1;
*tracer = copy_struct(tracer_state, sz, &hp, &hf->off_heap);
*tracer = CONS(hf->mem, tracer_module, *tracer);
ASSERT((void*)(((char*)(ptr_val(*tracer)) - offsetof(ErlHeapFragment, mem))) == hf);
diff --git a/erts/emulator/beam/erl_unicode.c b/erts/emulator/beam/erl_unicode.c
index 3c3536c021..bd5e1482fb 100644
--- a/erts/emulator/beam/erl_unicode.c
+++ b/erts/emulator/beam/erl_unicode.c
@@ -55,7 +55,7 @@ static BIF_RETTYPE finalize_list_to_list(Process *p,
Uint num_processed_bytes,
Uint num_bytes_to_process,
Uint num_resulting_chars,
- int state, int left,
+ int state, Sint left,
Eterm tail);
static BIF_RETTYPE characters_to_utf8_trap(BIF_ALIST_3);
static BIF_RETTYPE characters_to_list_trap_1(BIF_ALIST_3);
@@ -173,12 +173,13 @@ static ERTS_INLINE int allowed_iterations(Process *p)
else
return tmp;
}
-static ERTS_INLINE int cost_to_proc(Process *p, int cost)
+
+static ERTS_INLINE void cost_to_proc(Process *p, Sint cost)
{
- int x = (cost / LOOP_FACTOR);
+ Sint x = (cost / LOOP_FACTOR);
BUMP_REDS(p,x);
- return x;
}
+
static ERTS_INLINE int simple_loops_to_common(int cost)
{
int factor = (LOOP_FACTOR_SIMPLE / LOOP_FACTOR);
@@ -243,14 +244,15 @@ static int utf8_len(byte first)
return -1;
}
-static int copy_utf8_bin(byte *target, byte *source, Uint size,
- byte *leftover, int *num_leftovers,
- byte **err_pos, Uint *characters) {
- int copied = 0;
+static Uint copy_utf8_bin(byte *target, byte *source, Uint size,
+ byte *leftover, int *num_leftovers,
+ byte **err_pos, Uint *characters)
+{
+ Uint copied = 0;
if (leftover != NULL && *num_leftovers) {
int need = utf8_len(leftover[0]);
int from_source = need - (*num_leftovers);
- int c;
+ Uint c;
byte *tmp_err_pos = NULL;
ASSERT(need > 0);
ASSERT(from_source > 0);
@@ -502,8 +504,8 @@ L_Again: /* Restart with sublist, old listend was pushed on stack */
}
-static Eterm do_build_utf8(Process *p, Eterm ioterm, int *left, int latin1,
- byte *target, int *pos, Uint *characters, int *err,
+static Eterm do_build_utf8(Process *p, Eterm ioterm, Sint *left, int latin1,
+ byte *target, Uint *pos, Uint *characters, int *err,
byte *leftover, int *num_leftovers)
{
int c;
@@ -573,7 +575,7 @@ static Eterm do_build_utf8(Process *p, Eterm ioterm, int *left, int latin1,
}
if (!latin1) {
- int num;
+ Uint num;
byte *err_pos = NULL;
num = copy_utf8_bin(target + (*pos), bytes,
size, leftover, num_leftovers,&err_pos,characters);
@@ -804,7 +806,7 @@ static int check_leftovers(byte *source, int size)
-static BIF_RETTYPE build_utf8_return(Process *p,Eterm bin,int pos,
+static BIF_RETTYPE build_utf8_return(Process *p,Eterm bin,Uint pos,
Eterm rest_term,int err,
byte *leftover,int num_leftovers,Eterm latin1)
{
@@ -859,8 +861,8 @@ static BIF_RETTYPE characters_to_utf8_trap(BIF_ALIST_3)
#endif
byte* bytes;
Eterm rest_term;
- int left, sleft;
- int pos;
+ Sint left, sleft;
+ Uint pos;
int err;
byte leftover[4]; /* used for temp buffer too,
otherwise 3 bytes would have been enough */
@@ -874,7 +876,7 @@ static BIF_RETTYPE characters_to_utf8_trap(BIF_ALIST_3)
real_bin = binary_val(BIF_ARG_1);
ASSERT(*real_bin == HEADER_PROC_BIN);
#endif
- pos = (int) binary_size(BIF_ARG_1);
+ pos = binary_size(BIF_ARG_1);
bytes = binary_bytes(BIF_ARG_1);
sleft = left = allowed_iterations(BIF_P);
err = 0;
@@ -934,9 +936,9 @@ BIF_RETTYPE unicode_characters_to_binary_2(BIF_ALIST_2)
int latin1;
Eterm bin;
byte *bytes;
- int pos;
+ Uint pos;
int err;
- int left, sleft;
+ Sint left, sleft;
Eterm rest_term, subject;
byte leftover[4]; /* used for temp buffer too, o
therwise 3 bytes would have been enough */
@@ -999,7 +1001,7 @@ BIF_RETTYPE unicode_characters_to_binary_2(BIF_ALIST_2)
byte *t = NULL;
Uint sz = binary_size(bin);
byte *by = erts_get_aligned_binary_bytes(bin,&t);
- int i;
+ Uint i;
erts_printf("<<");
for (i = 0;i < sz; ++i) {
erts_printf((i == sz -1) ? "0x%X" : "0x%X, ", (unsigned) by[i]);
@@ -1007,7 +1009,7 @@ BIF_RETTYPE unicode_characters_to_binary_2(BIF_ALIST_2)
erts_printf(">>: ");
erts_free_aligned_binary_bytes(t);
}
- erts_printf("%d - %d = %d\n",sleft,left,sleft - left);
+ erts_printf("%ld - %ld = %ld\n", sleft, left, sleft - left);
}
#endif
cost_to_proc(BIF_P, sleft - left);
@@ -1015,10 +1017,10 @@ BIF_RETTYPE unicode_characters_to_binary_2(BIF_ALIST_2)
leftover,num_leftovers,BIF_ARG_2);
}
-static BIF_RETTYPE build_list_return(Process *p, byte *bytes, int pos, Uint characters,
+static BIF_RETTYPE build_list_return(Process *p, byte *bytes, Uint pos, Uint characters,
Eterm rest_term, int err,
byte *leftover, int num_leftovers,
- Eterm latin1, int left)
+ Eterm latin1, Sint left)
{
Eterm *hp;
@@ -1070,11 +1072,11 @@ static BIF_RETTYPE characters_to_list_trap_1(BIF_ALIST_3)
{
RestartContext *rc;
byte* bytes;
- int pos;
+ Uint pos;
Uint characters;
int err;
Eterm rest_term;
- int left, sleft;
+ Sint left, sleft;
int latin1 = 0;
byte leftover[4]; /* used for temp buffer too,
@@ -1107,9 +1109,9 @@ BIF_RETTYPE unicode_characters_to_list_2(BIF_ALIST_2)
int latin1;
Uint characters = 0;
byte *bytes;
- int pos;
+ Uint pos;
int err;
- int left, sleft;
+ Sint left, sleft;
Eterm rest_term;
byte leftover[4]; /* used for temp buffer too, o
therwise 3 bytes would have been enough */
@@ -1541,7 +1543,7 @@ static BIF_RETTYPE finalize_list_to_list(Process *p,
Uint num_processed_bytes,
Uint num_bytes_to_process,
Uint num_resulting_chars,
- int state, int left,
+ int state, Sint left,
Eterm tail)
{
Uint num_built; /* characters */
@@ -2016,7 +2018,7 @@ char *erts_convert_filename_to_encoding(Eterm name, char *statbuf, size_t statbu
++need;
}
if (used)
- *used = (Sint) need;
+ *used = need;
if (need+extra > statbuf_size) {
name_buf = (char *) erts_alloc(alloc_type, need+extra);
} else {
diff --git a/erts/emulator/beam/erlang_lttng.h b/erts/emulator/beam/erlang_lttng.h
index 12f68e477b..4e869671f7 100644
--- a/erts/emulator/beam/erlang_lttng.h
+++ b/erts/emulator/beam/erlang_lttng.h
@@ -20,7 +20,7 @@
#ifdef USE_LTTNG
#undef TRACEPOINT_PROVIDER
-#define TRACEPOINT_PROVIDER com_ericsson_otp
+#define TRACEPOINT_PROVIDER org_erlang_otp
#undef TRACEPOINT_INCLUDE
#define TRACEPOINT_INCLUDE "erlang_lttng.h"
@@ -33,7 +33,7 @@
/* Schedulers */
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
scheduler_poll,
TP_ARGS(
int, id,
@@ -62,7 +62,7 @@ typedef struct {
/* Port and Driver Scheduling */
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
driver_start,
TP_ARGS(
char*, pid,
@@ -77,7 +77,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
driver_init,
TP_ARGS(
char*, driver,
@@ -94,7 +94,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
driver_outputv,
TP_ARGS(
char*, pid,
@@ -111,7 +111,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
driver_output,
TP_ARGS(
char*, pid,
@@ -128,7 +128,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
driver_ready_input,
TP_ARGS(
char*, pid,
@@ -143,7 +143,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
driver_ready_output,
TP_ARGS(
char*, pid,
@@ -158,7 +158,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
driver_event,
TP_ARGS(
char*, pid,
@@ -173,7 +173,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
driver_timeout,
TP_ARGS(
char*, pid,
@@ -188,7 +188,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
driver_stop_select,
TP_ARGS(
char*, driver
@@ -199,7 +199,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
driver_flush,
TP_ARGS(
char*, pid,
@@ -214,7 +214,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
driver_stop,
TP_ARGS(
char*, pid,
@@ -229,7 +229,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
driver_process_exit,
TP_ARGS(
char*, pid,
@@ -244,7 +244,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
driver_ready_async,
TP_ARGS(
char*, pid,
@@ -259,7 +259,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
driver_finish,
TP_ARGS(
char*, driver
@@ -270,7 +270,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
driver_call,
TP_ARGS(
char*, pid,
@@ -289,7 +289,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
driver_control,
TP_ARGS(
char*, pid,
@@ -310,7 +310,7 @@ TRACEPOINT_EVENT(
/* Async pool */
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
aio_pool_get,
TP_ARGS(
char*, port,
@@ -323,7 +323,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
aio_pool_put,
TP_ARGS(
char*, port,
@@ -339,7 +339,7 @@ TRACEPOINT_EVENT(
/* Memory Allocator */
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
carrier_create,
TP_ARGS(
const char*, type,
@@ -365,7 +365,7 @@ TRACEPOINT_EVENT(
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
carrier_destroy,
TP_ARGS(
const char*, type,
@@ -390,7 +390,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
carrier_pool_put,
TP_ARGS(
const char*, name,
@@ -405,7 +405,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_otp,
+ org_erlang_otp,
carrier_pool_get,
TP_ARGS(
const char*, name,
diff --git a/erts/emulator/beam/export.c b/erts/emulator/beam/export.c
index 02c24557c1..2a19211987 100644
--- a/erts/emulator/beam/export.c
+++ b/erts/emulator/beam/export.c
@@ -31,7 +31,7 @@
#define EXPORT_INITIAL_SIZE 4000
#define EXPORT_LIMIT (512*1024)
-#define EXPORT_HASH(m,f,a) ((m)*(f)+(a))
+#define EXPORT_HASH(m,f,a) ((atom_val(m) * atom_val(f)) ^ (a))
#ifdef DEBUG
# define IF_DEBUG(x) x
@@ -79,8 +79,7 @@ struct export_templ
static struct export_blob* entry_to_blob(struct export_entry* ee)
{
- return (struct export_blob*)
- ((char*)ee->ep - offsetof(struct export_blob,exp));
+ return ErtsContainerStruct(ee->ep, struct export_blob, exp);
}
void
diff --git a/erts/emulator/beam/export.h b/erts/emulator/beam/export.h
index 8c81cbd410..1e7bb8514b 100644
--- a/erts/emulator/beam/export.h
+++ b/erts/emulator/beam/export.h
@@ -21,14 +21,8 @@
#ifndef __EXPORT_H__
#define __EXPORT_H__
-#ifndef __SYS_H__
#include "sys.h"
-#endif
-
-#ifndef __INDEX_H__
#include "index.h"
-#endif
-
#include "code_ix.h"
/*
diff --git a/erts/emulator/beam/external.c b/erts/emulator/beam/external.c
index 3c002d43a7..beed847578 100644
--- a/erts/emulator/beam/external.c
+++ b/erts/emulator/beam/external.c
@@ -2159,12 +2159,23 @@ enc_atom(ErtsAtomCacheMap *acmp, Eterm atom, byte *ep, Uint32 dflags)
return ep;
}
+/*
+ * We use this atom as sysname in local pid/port/refs
+ * for the ETS compressed format (DFLAG_INTERNAL_TAGS).
+ *
+ * We used atom '' earlier but that turned out to cause problems
+ * for buggy erl_interface/ic usage of c-nodes with empty node names.
+ * A long atom reduces risk of nodes actually called this and the length
+ * does not matter anyway as it's encoded with atom index (ATOM_INTERNAL_REF2).
+ */
+#define INTERNAL_LOCAL_SYSNAME am_await_microstate_accounting_modifications
+
static byte*
enc_pid(ErtsAtomCacheMap *acmp, Eterm pid, byte* ep, Uint32 dflags)
{
Uint on, os;
Eterm sysname = ((is_internal_pid(pid) && (dflags & DFLAG_INTERNAL_TAGS))
- ? am_Empty : pid_node_name(pid));
+ ? INTERNAL_LOCAL_SYSNAME : pid_node_name(pid));
Uint32 creation = pid_creation(pid);
byte* tagp = ep++;
@@ -2268,7 +2279,7 @@ dec_atom(ErtsDistExternal *edep, byte* ep, Eterm* objp)
static ERTS_INLINE ErlNode* dec_get_node(Eterm sysname, Uint32 creation)
{
- if (sysname == am_Empty) /* && DFLAG_INTERNAL_TAGS */
+ if (sysname == INTERNAL_LOCAL_SYSNAME) /* && DFLAG_INTERNAL_TAGS */
return erts_this_node;
if (sysname == erts_this_node->sysname
@@ -2555,7 +2566,7 @@ enc_term_int(TTBEncodeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj, byte* ep,
case EXTERNAL_REF_DEF: {
Uint32 *ref_num;
Eterm sysname = (((dflags & DFLAG_INTERNAL_TAGS) && is_internal_ref(obj))
- ? am_Empty : ref_node_name(obj));
+ ? INTERNAL_LOCAL_SYSNAME : ref_node_name(obj));
Uint32 creation = ref_creation(obj);
byte* tagp = ep++;
@@ -2584,7 +2595,7 @@ enc_term_int(TTBEncodeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj, byte* ep,
case PORT_DEF:
case EXTERNAL_PORT_DEF: {
Eterm sysname = (((dflags & DFLAG_INTERNAL_TAGS) && is_internal_port(obj))
- ? am_Empty : port_node_name(obj));
+ ? INTERNAL_LOCAL_SYSNAME : port_node_name(obj));
Uint32 creation = port_creation(obj);
byte* tagp = ep++;
diff --git a/erts/emulator/beam/global.h b/erts/emulator/beam/global.h
index 1abcc6cbf4..b2c76aa605 100644
--- a/erts/emulator/beam/global.h
+++ b/erts/emulator/beam/global.h
@@ -35,7 +35,6 @@
#include "register.h"
#include "erl_fun.h"
#include "erl_node_tables.h"
-#include "benchmark.h"
#include "erl_process.h"
#include "erl_sys_driver.h"
#include "erl_debug.h"
@@ -62,6 +61,12 @@ struct enif_environment_t /* ErlNifEnv */
extern void erts_pre_nif(struct enif_environment_t*, Process*,
struct erl_module_nif*, Process* tracee);
extern void erts_post_nif(struct enif_environment_t* env);
+#ifdef ERTS_DIRTY_SCHEDULERS
+extern void erts_pre_dirty_nif(ErtsSchedulerData *,
+ struct enif_environment_t*, Process*,
+ struct erl_module_nif*);
+extern void erts_post_dirty_nif(struct enif_environment_t* env);
+#endif
extern Eterm erts_nif_taints(Process* p);
extern void erts_print_nif_taints(int to, void* to_arg);
void erts_unload_nif(struct erl_module_nif* nif);
@@ -947,7 +952,7 @@ ERTS_GLB_INLINE Eterm erts_equeue_get(ErtsEQueue *q) {
void erts_emasculate_writable_binary(ProcBin* pb);
Eterm erts_new_heap_binary(Process *p, byte *buf, int len, byte** datap);
-Eterm erts_new_mso_binary(Process*, byte*, int);
+Eterm erts_new_mso_binary(Process*, byte*, Uint);
Eterm new_binary(Process*, byte*, Uint);
Eterm erts_realloc_binary(Eterm bin, size_t size);
@@ -996,17 +1001,33 @@ Eterm erl_is_function(Process* p, Eterm arg1, Eterm arg2);
/* beam_bif_load.c */
#define ERTS_CPC_ALLOW_GC (1 << 0)
-#define ERTS_CPC_COPY_LITERALS (1 << 1)
-#define ERTS_CPC_ALL (ERTS_CPC_ALLOW_GC | ERTS_CPC_COPY_LITERALS)
+#define ERTS_CPC_ALL ERTS_CPC_ALLOW_GC
Eterm erts_check_process_code(Process *c_p, Eterm module, Uint flags, int *redsp, int fcalls);
+#ifdef ERTS_NEW_PURGE_STRATEGY
+Eterm erts_proc_copy_literal_area(Process *c_p, int *redsp, int fcalls, int gc_allowed);
+#endif
-typedef struct {
- Eterm *ptr;
- Uint sz;
- Eterm pid;
-} copy_literals_t;
+typedef struct ErtsLiteralArea_ {
+ struct erl_off_heap_header *off_heap;
+ Eterm *end;
+ Eterm start[1]; /* beginning of area */
+} ErtsLiteralArea;
+
+#define ERTS_LITERAL_AREA_ALLOC_SIZE(N) \
+ (sizeof(ErtsLiteralArea) + sizeof(Eterm)*((N) - 1))
+
+extern erts_smp_atomic_t erts_copy_literal_area__;
+#define ERTS_COPY_LITERAL_AREA() \
+ ((ErtsLiteralArea *) erts_smp_atomic_read_nob(&erts_copy_literal_area__))
-extern copy_literals_t erts_clrange;
+#ifdef ERTS_NEW_PURGE_STRATEGY
+extern Process *erts_literal_area_collector;
+#endif
+#ifdef ERTS_DIRTY_SCHEDULERS
+extern Process *erts_dirty_process_code_checker;
+#endif
+
+extern Process *erts_code_purger;
/* beam_load.c */
typedef struct {
@@ -1089,12 +1110,19 @@ typedef struct {
#define INITIALIZE_SHCOPY(info) \
do { \
+ ErtsLiteralArea *larea__ = ERTS_COPY_LITERAL_AREA();\
info.queue_start = info.queue_default; \
info.bitstore_start = info.bitstore_default; \
info.shtable_start = info.shtable_default; \
info.literal_size = 0; \
- info.range_ptr = erts_clrange.ptr; \
- info.range_sz = erts_clrange.sz; \
+ if (larea__) { \
+ info.range_ptr = &larea__->start[0]; \
+ info.range_sz = larea__->end - info.range_ptr; \
+ } \
+ else { \
+ info.range_ptr = NULL; \
+ info.range_sz = 0; \
+ } \
} while(0)
#define DESTROY_SHCOPY(info) \
@@ -1152,6 +1180,7 @@ void print_pass_through(int, byte*, int);
int catchlevel(Process*);
void init_emulator(void);
void process_main(void);
+void erts_dirty_process_main(ErtsSchedulerData *);
Eterm build_stacktrace(Process* c_p, Eterm exc);
Eterm expand_error_value(Process* c_p, Uint freason, Eterm Value);
void erts_save_stacktrace(Process* p, struct StackTrace* s, int depth);
diff --git a/erts/emulator/beam/hash.c b/erts/emulator/beam/hash.c
index e255b961f1..cd038d100b 100644
--- a/erts/emulator/beam/hash.c
+++ b/erts/emulator/beam/hash.c
@@ -35,9 +35,9 @@
static const int h_size_table[] = {
2, 5, 11, 23, 47, 97, 197, 397, 797, /* double upto here */
1201, 1597,
- 2411, 3203,
+ 2411, 3203,
4813, 6421,
- 9643, 12853,
+ 9643, 12853,
19289, 25717,
51437,
102877,
@@ -49,8 +49,8 @@ static const int h_size_table[] = {
6584983,
13169977,
26339969,
- 52679969,
- -1
+ 52679969,
+ -1
};
/*
@@ -69,7 +69,7 @@ void hash_get_info(HashInfo *hi, Hash *h)
for (i = 0; i < size; i++) {
int depth = 0;
HashBucket* b = h->bucket[i];
-
+
while (b != (HashBucket*) 0) {
objects++;
depth++;
@@ -112,7 +112,7 @@ void hash_info(int to, void *arg, Hash* h)
/*
* Returns size of table in bytes. Stored objects not included.
*/
-int
+int
hash_table_sz(Hash *h)
{
int i;
@@ -190,7 +190,7 @@ void hash_delete(Hash* h)
HashBucket* b = h->bucket[i];
while (b != (HashBucket*) 0) {
HashBucket* b_next = b->next;
-
+
h->fun.free((void*) b);
b = b_next;
}
@@ -250,7 +250,7 @@ void* hash_get(Hash* h, void* tmpl)
HashValue hval = h->fun.hash(tmpl);
int ix = hval % h->size;
HashBucket* b = h->bucket[ix];
-
+
while(b != (HashBucket*) 0) {
if ((b->hvalue == hval) && (h->fun.cmp(tmpl, (void*)b) == 0))
return (void*) b;
@@ -294,7 +294,7 @@ void* hash_erase(Hash* h, void* tmpl)
int ix = hval % h->size;
HashBucket* b = h->bucket[ix];
HashBucket* prev = 0;
-
+
while(b != 0) {
if ((b->hvalue == hval) && (h->fun.cmp(tmpl, (void*)b) == 0)) {
if (prev != 0)
@@ -326,7 +326,7 @@ hash_remove(Hash *h, void *tmpl)
int ix = hval % h->size;
HashBucket *b = h->bucket[ix];
HashBucket *prev = NULL;
-
+
while (b) {
if ((b->hvalue == hval) && (h->fun.cmp(tmpl, (void*)b) == 0)) {
if (prev)
@@ -355,4 +355,3 @@ void hash_foreach(Hash* h, void (*func)(void *, void *), void *func_arg2)
}
}
}
-
diff --git a/erts/emulator/beam/hash.h b/erts/emulator/beam/hash.h
index 9f773d8faa..4e769c0119 100644
--- a/erts/emulator/beam/hash.h
+++ b/erts/emulator/beam/hash.h
@@ -25,9 +25,7 @@
#ifndef __HASH_H__
#define __HASH_H__
-#ifndef __SYS_H__
#include "sys.h"
-#endif
typedef unsigned long HashValue;
typedef struct hash Hash;
diff --git a/erts/emulator/beam/index.h b/erts/emulator/beam/index.h
index 218779c33b..0a109d8699 100644
--- a/erts/emulator/beam/index.h
+++ b/erts/emulator/beam/index.h
@@ -26,13 +26,8 @@
#ifndef __INDEX_H__
#define __INDEX_H__
-#ifndef __HASH_H__
#include "hash.h"
-#endif
-
-#ifndef ERL_ALLOC_H__
#include "erl_alloc.h"
-#endif
typedef struct index_slot
{
diff --git a/erts/emulator/beam/io.c b/erts/emulator/beam/io.c
index 0377f6cb5e..77dbe92241 100644
--- a/erts/emulator/beam/io.c
+++ b/erts/emulator/beam/io.c
@@ -938,18 +938,32 @@ int erts_port_handle_xports(Port *prt)
** -2 on type error
*/
-#define SET_VEC(iov, bv, bin, ptr, len, vlen) do { \
- (iov)->iov_base = (ptr); \
- (iov)->iov_len = (len); \
- if (sizeof((iov)->iov_len) < sizeof(len) \
- /* Check if (len) overflowed (iov)->iov_len */ \
- && (iov)->iov_len != (len)) { \
- goto L_overflow; \
- } \
- *(bv)++ = (bin); \
- (iov)++; \
- (vlen)++; \
-} while(0)
+#ifdef DEBUG
+#define MAX_SYSIOVEC_IOVLEN (1ull << (32 - 1))
+#else
+#define MAX_SYSIOVEC_IOVLEN (1ull << (sizeof(((SysIOVec*)0)->iov_len) * 8 - 1))
+#endif
+
+static ERTS_INLINE void
+io_list_to_vec_set_vec(SysIOVec **iov, ErlDrvBinary ***binv,
+ ErlDrvBinary *bin, byte *ptr, Uint len,
+ int *vlen)
+{
+ while (len > MAX_SYSIOVEC_IOVLEN) {
+ (*iov)->iov_base = ptr;
+ (*iov)->iov_len = MAX_SYSIOVEC_IOVLEN;
+ ptr += MAX_SYSIOVEC_IOVLEN;
+ len -= MAX_SYSIOVEC_IOVLEN;
+ (*iov)++;
+ (*vlen)++;
+ *(*binv)++ = bin;
+ }
+ (*iov)->iov_base = ptr;
+ (*iov)->iov_len = len;
+ *(*binv)++ = bin;
+ (*iov)++;
+ (*vlen)++;
+}
static int
io_list_to_vec(Eterm obj, /* io-list */
@@ -960,11 +974,11 @@ io_list_to_vec(Eterm obj, /* io-list */
{
DECLARE_ESTACK(s);
Eterm* objp;
- char *buf = cbin->orig_bytes;
+ byte *buf = (byte*)cbin->orig_bytes;
Uint len = cbin->orig_size;
Uint csize = 0;
int vlen = 0;
- char* cptr = buf;
+ byte* cptr = buf;
goto L_jump_start; /* avoid push */
@@ -1032,15 +1046,17 @@ io_list_to_vec(Eterm obj, /* io-list */
len -= size;
} else {
if (csize != 0) {
- SET_VEC(iov, binv, cbin, cptr, csize, vlen);
+ io_list_to_vec_set_vec(&iov, &binv, cbin,
+ cptr, csize, &vlen);
cptr = buf;
csize = 0;
}
if (pb->flags) {
erts_emasculate_writable_binary(pb);
}
- SET_VEC(iov, binv, Binary2ErlDrvBinary(pb->val),
- pb->bytes+offset, size, vlen);
+ io_list_to_vec_set_vec(
+ &iov, &binv, Binary2ErlDrvBinary(pb->val),
+ pb->bytes+offset, size, &vlen);
}
} else {
ErlHeapBin* hb = (ErlHeapBin *) bptr;
@@ -1060,7 +1076,7 @@ io_list_to_vec(Eterm obj, /* io-list */
}
if (csize != 0) {
- SET_VEC(iov, binv, cbin, cptr, csize, vlen);
+ io_list_to_vec_set_vec(&iov, &binv, cbin, cptr, csize, &vlen);
}
DESTROY_ESTACK(s);
@@ -1086,10 +1102,13 @@ do { \
if (_bitsize != 0) goto L_type_error; \
if (thing_subtag(*binary_val(_real)) == REFC_BINARY_SUBTAG && \
_bitoffs == 0) { \
- b_size += _size; \
+ b_size += _size; \
if (b_size < _size) goto L_overflow_error; \
in_clist = 0; \
- v_size++; \
+ v_size++; \
+ /* If iov_len is smaller then Uint we split the binary into*/ \
+ /* multiple smaller (2GB) elements in the iolist.*/ \
+ v_size += _size / MAX_SYSIOVEC_IOVLEN; \
if (_size >= ERL_SMALL_IO_BIN_LIMIT) { \
p_in_clist = 0; \
p_v_size++; \
@@ -1241,7 +1260,7 @@ typedef struct {
/*
* Try doing an immediate driver callback call from a process. If
* this fail, the operation should be scheduled in the normal case...
- *
+ * Returns: ok to do the call, or error (lock busy, does not exist, etc)
*/
static ERTS_INLINE ErtsTryImmDrvCallResult
try_imm_drv_call(ErtsTryImmDrvCallState *sp)
@@ -3055,6 +3074,250 @@ erts_port_link(Process *c_p, Port *prt, Eterm to, Eterm *refp)
}
static void
+port_monitor_failure(Eterm port_id, Eterm origin, Eterm ref_DOWN)
+{
+ Process *origin_p;
+ ErtsProcLocks p_locks = ERTS_PROC_LOCK_LINK;
+ ASSERT(is_internal_pid(origin));
+
+ origin_p = erts_pid2proc(NULL, 0, origin, p_locks);
+ if (! origin_p) { return; }
+
+ /* Send the DOWN message immediately. Ref is made on the fly because
+ * caller has never seen it yet. */
+ erts_queue_monitor_message(origin_p, &p_locks, ref_DOWN,
+ am_port, port_id, am_noproc);
+ erts_smp_proc_unlock(origin_p, p_locks);
+}
+
+/* Origin wants to monitor port Prt. State contains possible error, which has
+ * happened just before. Name is either NIL or an atom, if user monitors
+ * a port by name. Ref is premade reference that will be returned to user */
+static void
+port_monitor(Port *prt, erts_aint32_t state, Eterm origin,
+ Eterm name, Eterm ref)
+{
+ Eterm name_or_nil = is_atom(name) ? name : NIL;
+
+ ASSERT(is_pid(origin));
+ ASSERT(is_atom(name) || is_port(name) || name == NIL);
+ ASSERT(is_internal_ref(ref));
+
+ if (!(state & ERTS_PORT_SFLGS_INVALID_LOOKUP)) {
+ ErtsProcLocks p_locks = ERTS_PROC_LOCK_LINK;
+
+ Process *origin_p = erts_pid2proc(NULL, 0, origin, p_locks);
+ if (! origin_p) {
+ goto failure;
+ }
+ erts_add_monitor(&ERTS_P_MONITORS(origin_p), MON_ORIGIN, ref,
+ prt->common.id, name_or_nil);
+ erts_add_monitor(&ERTS_P_MONITORS(prt), MON_TARGET, ref,
+ origin, name_or_nil);
+
+ erts_smp_proc_unlock(origin_p, p_locks);
+ } else {
+failure:
+ port_monitor_failure(prt->common.id, origin, ref);
+ }
+}
+
+static int
+port_sig_monitor(Port *prt, erts_aint32_t state, int op,
+ ErtsProc2PortSigData *sigdp)
+{
+ Eterm hp[REF_THING_SIZE];
+ Eterm ref = make_internal_ref(&hp);
+ write_ref_thing(hp, sigdp->ref[0], sigdp->ref[1], sigdp->ref[2]);
+
+ if (op == ERTS_PROC2PORT_SIG_EXEC) {
+ /* erts_add_monitor call inside port_monitor will copy ref from hp */
+ port_monitor(prt, state,
+ sigdp->u.monitor.origin,
+ sigdp->u.monitor.name,
+ ref);
+ } else {
+ port_monitor_failure(sigdp->u.monitor.name,
+ sigdp->u.monitor.origin,
+ ref);
+ }
+ if (sigdp->flags & ERTS_P2P_SIG_DATA_FLG_REPLY) {
+ port_sched_op_reply(sigdp->caller, sigdp->ref, am_true, prt);
+ }
+ return ERTS_PORT_REDS_MONITOR;
+}
+
+/* Creates monitor between Origin and Target. Ref must be initialized to
+ * a reference (ref may be rewritten to be used to serve additionally as a
+ * signal id). Name is atom if user monitors port by name or NIL */
+ErtsPortOpResult
+erts_port_monitor(Process *origin, Port *port, Eterm name, Eterm *refp)
+{
+ ErtsProc2PortSigData *sigdp;
+ ErtsTryImmDrvCallState try_call_state
+ = ERTS_INIT_TRY_IMM_DRV_CALL_STATE(
+ origin, port, ERTS_PORT_SFLGS_INVALID_LOOKUP,
+ 0,
+ 0, /* trap_ref is always set so !trap_ref always is false */
+ am_monitor);
+
+ ASSERT(origin);
+ ASSERT(port);
+ ASSERT(is_atom(name) || is_port(name));
+ ASSERT(refp);
+
+ switch (try_imm_drv_call(&try_call_state)) {
+ case ERTS_TRY_IMM_DRV_CALL_OK:
+ port_monitor(port, try_call_state.state, origin->common.id, name, *refp);
+ finalize_imm_drv_call(&try_call_state);
+ BUMP_REDS(origin, ERTS_PORT_REDS_MONITOR);
+ return ERTS_PORT_OP_DONE;
+ case ERTS_TRY_IMM_DRV_CALL_INVALID_PORT:
+ return ERTS_PORT_OP_BADARG;
+ default:
+ break; /* Schedule call instead... */
+ }
+
+ sigdp = erts_port_task_alloc_p2p_sig_data();
+ sigdp->flags = ERTS_P2P_SIG_TYPE_MONITOR;
+ sigdp->u.monitor.origin = origin->common.id;
+ sigdp->u.monitor.name = name; /* either named monitor, or port id */
+
+ /* Ref contents will be initialized here */
+ return erts_schedule_proc2port_signal(origin, port, origin->common.id,
+ refp, sigdp, 0, NULL,
+ port_sig_monitor);
+}
+
+static void
+port_demonitor_failure(Eterm port_id, Eterm origin, Eterm ref)
+{
+ Process *origin_p;
+ ErtsProcLocks rp_locks = ERTS_PROC_LOCK_LINK;
+ ErtsMonitor *mon1;
+ ASSERT(is_internal_pid(origin));
+
+ origin_p = erts_pid2proc(NULL, 0, origin, rp_locks);
+ if (! origin_p) { return; }
+
+ /* do not send any DOWN messages, drop monitors on process */
+ mon1 = erts_remove_monitor(&ERTS_P_MONITORS(origin_p), ref);
+ if (mon1 != NULL) {
+ erts_destroy_monitor(mon1);
+ }
+
+ erts_smp_proc_unlock(origin_p, rp_locks);
+}
+
+/* Origin wants to demonitor port Prt. State contains possible error, which has
+ * happened just before. Ref is reference to monitor */
+static void
+port_demonitor(Port *port, erts_aint32_t state, Eterm origin, Eterm ref)
+{
+ ASSERT(port);
+ ASSERT(is_pid(origin));
+ ASSERT(is_internal_ref(ref));
+
+ if (!(state & ERTS_PORT_SFLGS_INVALID_LOOKUP)) {
+ ErtsProcLocks p_locks = ERTS_PROC_LOCK_LINK;
+ Process *origin_p = erts_pid2proc(NULL, 0, origin, p_locks);
+ if (origin_p) {
+ ErtsMonitor *mon1 = erts_remove_monitor(&ERTS_P_MONITORS(origin_p),
+ ref);
+ if (mon1 != NULL) {
+ erts_destroy_monitor(mon1);
+ }
+ }
+ if (1) {
+ ErtsMonitor *mon2 = erts_remove_monitor(&ERTS_P_MONITORS(port),
+ ref);
+ if (mon2 != NULL) {
+ erts_destroy_monitor(mon2);
+ }
+ }
+ if (origin_p) { /* when origin is dying, it won't be found */
+ erts_smp_proc_unlock(origin_p, p_locks);
+ }
+ } else {
+ port_demonitor_failure(port->common.id, origin, ref);
+ }
+}
+
+static int
+port_sig_demonitor(Port *prt, erts_aint32_t state, int op,
+ ErtsProc2PortSigData *sigdp)
+{
+ Eterm hp[REF_THING_SIZE];
+ Eterm ref = make_internal_ref(&hp);
+ write_ref_thing(hp, sigdp->u.demonitor.ref[0],
+ sigdp->u.demonitor.ref[1],
+ sigdp->u.demonitor.ref[2]);
+ if (op == ERTS_PROC2PORT_SIG_EXEC) {
+ port_demonitor(prt, state, sigdp->u.demonitor.origin, ref);
+ } else {
+ port_demonitor_failure(sigdp->u.demonitor.name,
+ sigdp->u.demonitor.origin,
+ ref);
+ }
+ if (sigdp->flags & ERTS_P2P_SIG_DATA_FLG_REPLY) {
+ port_sched_op_reply(sigdp->caller, sigdp->ref, am_true, prt);
+ }
+ return ERTS_PORT_REDS_DEMONITOR;
+}
+
+/* Removes monitor between origin and target, identified by ref.
+ * Mode defines normal or relaxed demonitor rules (process is at death) */
+ErtsPortOpResult erts_port_demonitor(Process *origin, ErtsDemonitorMode mode,
+ Port *target, Eterm ref,
+ Eterm *trap_ref)
+{
+ Process *c_p = mode == ERTS_PORT_DEMONITOR_NORMAL ? origin : NULL;
+ ErtsProc2PortSigData *sigdp;
+ ErtsTryImmDrvCallState try_call_state
+ = ERTS_INIT_TRY_IMM_DRV_CALL_STATE(
+ c_p,
+ target, ERTS_PORT_SFLGS_INVALID_LOOKUP,
+ 0,
+ !trap_ref,
+ am_demonitor);
+
+ ASSERT(origin);
+ ASSERT(target);
+ ASSERT(is_internal_ref(ref));
+
+ switch (try_imm_drv_call(&try_call_state)) {
+ case ERTS_TRY_IMM_DRV_CALL_OK:
+ port_demonitor(target, try_call_state.state, origin->common.id, ref);
+ finalize_imm_drv_call(&try_call_state);
+ if (mode == ERTS_PORT_DEMONITOR_NORMAL) {
+ BUMP_REDS(origin, ERTS_PORT_REDS_DEMONITOR);
+ }
+ return ERTS_PORT_OP_DONE;
+ case ERTS_TRY_IMM_DRV_CALL_INVALID_PORT:
+ return ERTS_PORT_OP_BADARG;
+ default:
+ break; /* Schedule call instead... */
+ }
+
+ sigdp = erts_port_task_alloc_p2p_sig_data();
+ sigdp->flags = ERTS_P2P_SIG_TYPE_DEMONITOR;
+ sigdp->u.demonitor.origin = origin->common.id;
+ sigdp->u.demonitor.name = target->common.id;
+ {
+ RefThing *reft = ref_thing_ptr(ref);
+ /* Start from 1 skip ref arity */
+ sys_memcpy(sigdp->u.demonitor.ref,
+ internal_thing_ref_numbers(reft),
+ sizeof(sigdp->u.demonitor.ref));
+ }
+
+ /* Ref contents will be initialized here */
+ return erts_schedule_proc2port_signal(c_p, target, origin->common.id,
+ trap_ref, sigdp, 0, NULL,
+ port_sig_demonitor);
+}
+
+static void
init_ack_send_reply(Port *port, Eterm resp)
{
@@ -3923,23 +4186,30 @@ erts_terminate_port(Port *pp)
terminate_port(pp);
}
+static void port_fire_one_monitor(ErtsMonitor *mon, void *ctx0);
static void sweep_one_monitor(ErtsMonitor *mon, void *vpsc)
{
- ErtsMonitor *rmon;
- Process *rp;
+ switch (mon->type) {
+ case MON_ORIGIN: {
+ ErtsMonitor *rmon;
+ Process *rp;
- ASSERT(mon->type == MON_ORIGIN);
- ASSERT(is_internal_pid(mon->pid));
- rp = erts_pid2proc(NULL, 0, mon->pid, ERTS_PROC_LOCK_LINK);
- if (!rp) {
- goto done;
- }
- rmon = erts_remove_monitor(&ERTS_P_MONITORS(rp), mon->ref);
- erts_smp_proc_unlock(rp, ERTS_PROC_LOCK_LINK);
- if (rmon == NULL) {
- goto done;
+ ASSERT(is_internal_pid(mon->pid));
+ rp = erts_pid2proc(NULL, 0, mon->pid, ERTS_PROC_LOCK_LINK);
+ if (!rp) {
+ goto done;
+ }
+ rmon = erts_remove_monitor(&ERTS_P_MONITORS(rp), mon->ref);
+ erts_smp_proc_unlock(rp, ERTS_PROC_LOCK_LINK);
+ if (rmon == NULL) {
+ goto done;
+ }
+ erts_destroy_monitor(rmon);
+ } break;
+ case MON_TARGET: {
+ port_fire_one_monitor(mon, vpsc); /* forward call */
+ } break;
}
- erts_destroy_monitor(rmon);
done:
erts_destroy_monitor(mon);
}
@@ -4020,6 +4290,43 @@ static void sweep_one_link(ErtsLink *lnk, void *vpsc)
erts_destroy_link(lnk);
}
+static void
+port_fire_one_monitor(ErtsMonitor *mon, void *ctx0)
+{
+ Process *origin;
+ ErtsProcLocks origin_locks;
+
+ if (mon->type != MON_TARGET || ! is_pid(mon->pid)) {
+ return;
+ }
+ /*
+ * Proceed here if someone monitors us, we (port) are the target and
+ * origin is some process
+ */
+ origin_locks = ERTS_PROC_LOCKS_MSG_SEND | ERTS_PROC_LOCK_LINK;
+
+ origin = erts_pid2proc(NULL, 0, mon->pid, origin_locks);
+ if (origin) {
+ DeclareTmpHeapNoproc(lhp,3);
+ SweepContext *ctx = (SweepContext *)ctx0;
+ ErtsMonitor *rmon;
+ Eterm watched = (is_atom(mon->name)
+ ? TUPLE2(lhp, mon->name, erts_this_dist_entry->sysname)
+ : ctx->port->common.id);
+
+ erts_queue_monitor_message(origin, &origin_locks, mon->ref, am_port,
+ watched, ctx->reason);
+ UnUseTmpHeapNoproc(3);
+
+ rmon = erts_remove_monitor(&ERTS_P_MONITORS(origin), mon->ref);
+ erts_smp_proc_unlock(origin, origin_locks);
+
+ if (rmon) {
+ erts_destroy_monitor(rmon);
+ }
+ }
+}
+
/* 'from' is sending 'this_port' an exit signal, (this_port must be internal).
* If reason is normal we don't do anything, *unless* from is our connected
* process in which case we close the port. Any other reason kills the port.
@@ -4031,39 +4338,40 @@ static void sweep_one_link(ErtsLink *lnk, void *vpsc)
*/
int
-erts_deliver_port_exit(Port *p, Eterm from, Eterm reason, int send_closed,
+erts_deliver_port_exit(Port *prt, Eterm from, Eterm reason, int send_closed,
int drop_normal)
{
ErtsLink *lnk;
- Eterm rreason;
+ Eterm modified_reason;
erts_aint32_t state, set_state_flags;
ERTS_SMP_CHK_NO_PROC_LOCKS;
- ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(p));
+ ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(prt));
- rreason = (reason == am_kill) ? am_killed : reason;
+ modified_reason = (reason == am_kill) ? am_killed : reason;
#ifdef USE_VM_PROBES
if (DTRACE_ENABLED(port_exit)) {
DTRACE_CHARBUF(from_str, DTRACE_TERM_BUF_SIZE);
DTRACE_CHARBUF(port_str, DTRACE_TERM_BUF_SIZE);
- DTRACE_CHARBUF(rreason_str, 64);
+ DTRACE_CHARBUF(reason_str, 64);
erts_snprintf(from_str, sizeof(DTRACE_CHARBUF_NAME(from_str)), "%T", from);
- dtrace_port_str(p, port_str);
- erts_snprintf(rreason_str, sizeof(DTRACE_CHARBUF_NAME(rreason_str)), "%T", rreason);
- DTRACE4(port_exit, from_str, port_str, p->name, rreason_str);
+ dtrace_port_str(prt, port_str);
+ erts_snprintf(reason_str, sizeof(DTRACE_CHARBUF_NAME(reason_str)), "%T",
+ modified_reason);
+ DTRACE4(port_exit, from_str, port_str, prt->name, reason_str);
}
#endif
- state = erts_atomic32_read_nob(&p->state);
+ state = erts_atomic32_read_nob(&prt->state);
if (state & (ERTS_PORT_SFLGS_DEAD
| ERTS_PORT_SFLG_EXITING
| ERTS_PORT_SFLG_CLOSING))
return 0;
- if (reason == am_normal && from != ERTS_PORT_GET_CONNECTED(p)
- && from != p->common.id && drop_normal) {
+ if (reason == am_normal && from != ERTS_PORT_GET_CONNECTED(prt)
+ && from != prt->common.id && drop_normal) {
return 0;
}
@@ -4071,53 +4379,54 @@ erts_deliver_port_exit(Port *p, Eterm from, Eterm reason, int send_closed,
if (send_closed)
set_state_flags |= ERTS_PORT_SFLG_SEND_CLOSED;
- erts_port_task_sched_enter_exiting_state(&p->sched);
+ erts_port_task_sched_enter_exiting_state(&prt->sched);
- state = erts_atomic32_read_bor_mb(&p->state, set_state_flags);
+ state = erts_atomic32_read_bor_mb(&prt->state, set_state_flags);
state |= set_state_flags;
- if (IS_TRACED_FL(p, F_TRACE_PORTS))
- trace_port(p, am_closed, reason);
+ if (IS_TRACED_FL(prt, F_TRACE_PORTS))
+ trace_port(prt, am_closed, reason);
- erts_trace_check_exiting(p->common.id);
+ erts_trace_check_exiting(prt->common.id);
- set_busy_port(ERTS_Port2ErlDrvPort(p), 0);
+ set_busy_port(ERTS_Port2ErlDrvPort(prt), 0);
- if (p->common.u.alive.reg != NULL)
- (void) erts_unregister_name(NULL, 0, p, p->common.u.alive.reg->name);
+ if (prt->common.u.alive.reg != NULL)
+ (void) erts_unregister_name(NULL, 0, prt, prt->common.u.alive.reg->name);
{
- SweepContext sc = {p, rreason};
- lnk = ERTS_P_LINKS(p);
- ERTS_P_LINKS(p) = NULL;
+ SweepContext sc = {prt, modified_reason};
+ lnk = ERTS_P_LINKS(prt);
+ ERTS_P_LINKS(prt) = NULL;
erts_sweep_links(lnk, &sweep_one_link, &sc);
}
- DRV_MONITOR_LOCK_PDL(p);
+ DRV_MONITOR_LOCK_PDL(prt);
{
- ErtsMonitor *moni = ERTS_P_MONITORS(p);
- ERTS_P_MONITORS(p) = NULL;
- erts_sweep_monitors(moni, &sweep_one_monitor, NULL);
+ SweepContext ctx = {prt, modified_reason};
+ ErtsMonitor *moni = ERTS_P_MONITORS(prt);
+ ERTS_P_MONITORS(prt) = NULL;
+ erts_sweep_monitors(moni, &sweep_one_monitor, &ctx);
}
- DRV_MONITOR_UNLOCK_PDL(p);
+ DRV_MONITOR_UNLOCK_PDL(prt);
- if ((state & ERTS_PORT_SFLG_DISTRIBUTION) && p->dist_entry) {
- erts_do_net_exits(p->dist_entry, rreason);
- erts_deref_dist_entry(p->dist_entry);
- p->dist_entry = NULL;
- erts_atomic32_read_band_relb(&p->state,
+ if ((state & ERTS_PORT_SFLG_DISTRIBUTION) && prt->dist_entry) {
+ erts_do_net_exits(prt->dist_entry, modified_reason);
+ erts_deref_dist_entry(prt->dist_entry);
+ prt->dist_entry = NULL;
+ erts_atomic32_read_band_relb(&prt->state,
~ERTS_PORT_SFLG_DISTRIBUTION);
}
- if ((reason != am_kill) && !is_port_ioq_empty(p)) {
+ if ((reason != am_kill) && !is_port_ioq_empty(prt)) {
/* must turn exiting flag off */
- erts_atomic32_read_bset_relb(&p->state,
+ erts_atomic32_read_bset_relb(&prt->state,
(ERTS_PORT_SFLG_EXITING
| ERTS_PORT_SFLG_CLOSING),
ERTS_PORT_SFLG_CLOSING);
- flush_port(p);
+ flush_port(prt);
}
else {
- terminate_port(p);
+ terminate_port(prt);
}
return 1;
@@ -6282,16 +6591,20 @@ deliver_term_check_port(ErlDrvTermData port_id, Eterm *connected_p,
ErtsThrPrgrDelayHandle dhndl = erts_thr_progress_unmanaged_delay();
#endif
erts_aint32_t state;
+ int res = 1;
Port *prt = erts_port_lookup_raw((Eterm) port_id);
- if (!prt)
- return -1;
+ if (!prt) {
+ res = -1;
+ goto done;
+ }
state = erts_atomic32_read_nob(&prt->state);
if (state & (ERTS_PORT_SFLGS_INVALID_DRIVER_LOOKUP
| ERTS_PORT_SFLG_CLOSING)) {
if (state & ERTS_PORT_SFLGS_INVALID_DRIVER_LOOKUP)
- return -1;
+ res = -1;
else
- return 0;
+ res = 0;
+ goto done;
}
if (connected_p) {
#ifdef ERTS_SMP
@@ -6300,25 +6613,27 @@ deliver_term_check_port(ErlDrvTermData port_id, Eterm *connected_p,
#endif
*connected_p = ERTS_PORT_GET_CONNECTED(prt);
}
+
+done:
+
#ifdef ERTS_SMP
if (dhndl != ERTS_THR_PRGR_DHANDLE_MANAGED) {
+ ERTS_SMP_LC_ASSERT(!prt || !erts_lc_is_port_locked(prt));
erts_thr_progress_unmanaged_continue(dhndl);
ETHR_MEMBAR(ETHR_LoadLoad|ETHR_LoadStore);
} else
#endif
- {
+ if (res == 1) {
+ ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(prt));
*trace_prt = prt;
}
- ERTS_SMP_LC_ASSERT(dhndl == ERTS_THR_PRGR_DHANDLE_MANAGED
- ? erts_lc_is_port_locked(prt)
- : !erts_lc_is_port_locked(prt));
- return 1;
+ return res;
}
int erl_drv_output_term(ErlDrvTermData port_id, ErlDrvTermData* data, int len)
{
/* May be called from arbitrary thread */
- Eterm connected;
+ Eterm connected = NIL; /* Shut up faulty warning... */
Port *prt = NULL;
int res = deliver_term_check_port(port_id, &connected, &prt);
if (res <= 0)
diff --git a/erts/emulator/beam/lttng-wrapper.h b/erts/emulator/beam/lttng-wrapper.h
index 294872c365..0bc75c1552 100644
--- a/erts/emulator/beam/lttng-wrapper.h
+++ b/erts/emulator/beam/lttng-wrapper.h
@@ -77,23 +77,23 @@
(RQ)->scheduler->no
#define LTTNG_ENABLED(Name) \
- tracepoint_enabled(com_ericsson_otp, Name)
+ tracepoint_enabled(org_erlang_otp, Name)
/* include a special LTTNG_DO for do_tracepoint ? */
#define LTTNG1(Name, Arg1) \
- tracepoint(com_ericsson_otp, Name, (Arg1))
+ tracepoint(org_erlang_otp, Name, (Arg1))
#define LTTNG2(Name, Arg1, Arg2) \
- tracepoint(com_ericsson_otp, Name, (Arg1), (Arg2))
+ tracepoint(org_erlang_otp, Name, (Arg1), (Arg2))
#define LTTNG3(Name, Arg1, Arg2, Arg3) \
- tracepoint(com_ericsson_otp, Name, (Arg1), (Arg2), (Arg3))
+ tracepoint(org_erlang_otp, Name, (Arg1), (Arg2), (Arg3))
#define LTTNG4(Name, Arg1, Arg2, Arg3, Arg4) \
- tracepoint(com_ericsson_otp, Name, (Arg1), (Arg2), (Arg3), (Arg4))
+ tracepoint(org_erlang_otp, Name, (Arg1), (Arg2), (Arg3), (Arg4))
#define LTTNG5(Name, Arg1, Arg2, Arg3, Arg4, Arg5) \
- tracepoint(com_ericsson_otp, Name, (Arg1), (Arg2), (Arg3), (Arg4), (Arg5))
+ tracepoint(org_erlang_otp, Name, (Arg1), (Arg2), (Arg3), (Arg4), (Arg5))
#else /* USE_LTTNG */
diff --git a/erts/emulator/beam/module.h b/erts/emulator/beam/module.h
index 4e12731d85..5a60bc90d9 100644
--- a/erts/emulator/beam/module.h
+++ b/erts/emulator/beam/module.h
@@ -21,9 +21,7 @@
#ifndef __MODULE_H__
#define __MODULE_H__
-#ifndef __INDEX_H__
#include "index.h"
-#endif
struct erl_module_instance {
BeamCodeHeader* code_hdr;
diff --git a/erts/emulator/beam/register.c b/erts/emulator/beam/register.c
index 77f79fcea4..ac7096745e 100644
--- a/erts/emulator/beam/register.c
+++ b/erts/emulator/beam/register.c
@@ -323,7 +323,8 @@ erts_whereis_name(Process *c_p,
Process** proc,
ErtsProcLocks need_locks,
int flags,
- Port** port)
+ Port** port,
+ int lock_port)
{
RegProc* rp = NULL;
HashValue hval;
@@ -406,31 +407,33 @@ erts_whereis_name(Process *c_p,
*port = NULL;
else {
#ifdef ERTS_SMP
- if (pending_port == rp->pt)
- pending_port = NULL;
- else {
- if (pending_port) {
- /* Ahh! Registered port changed while reg lock
- was unlocked... */
- erts_port_release(pending_port);
- pending_port = NULL;
- }
+ if (lock_port) {
+ if (pending_port == rp->pt)
+ pending_port = NULL;
+ else {
+ if (pending_port) {
+ /* Ahh! Registered port changed while reg lock
+ was unlocked... */
+ erts_port_release(pending_port);
+ pending_port = NULL;
+ }
- if (erts_smp_port_trylock(rp->pt) == EBUSY) {
- Eterm id = rp->pt->common.id; /* id read only... */
- /* Unlock all locks, acquire port lock, and restart... */
- if (current_c_p_locks) {
- erts_smp_proc_unlock(c_p, current_c_p_locks);
- current_c_p_locks = 0;
- }
- reg_read_unlock();
- pending_port = erts_id2port(id);
- goto restart;
- }
- }
+ if (erts_smp_port_trylock(rp->pt) == EBUSY) {
+ Eterm id = rp->pt->common.id; /* id read only... */
+ /* Unlock all locks, acquire port lock, and restart... */
+ if (current_c_p_locks) {
+ erts_smp_proc_unlock(c_p, current_c_p_locks);
+ current_c_p_locks = 0;
+ }
+ reg_read_unlock();
+ pending_port = erts_id2port(id);
+ goto restart;
+ }
+ }
+ ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(rp->pt));
+ }
#endif
*port = rp->pt;
- ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(*port));
}
}
@@ -452,7 +455,7 @@ erts_whereis_process(Process *c_p,
int flags)
{
Process *proc;
- erts_whereis_name(c_p, c_p_locks, name, &proc, need_locks, flags, NULL);
+ erts_whereis_name(c_p, c_p_locks, name, &proc, need_locks, flags, NULL, 0);
return proc;
}
diff --git a/erts/emulator/beam/register.h b/erts/emulator/beam/register.h
index 88ab7b7bf1..d839f55d6b 100644
--- a/erts/emulator/beam/register.h
+++ b/erts/emulator/beam/register.h
@@ -49,7 +49,7 @@ int erts_register_name(Process *, Eterm, Eterm);
Eterm erts_whereis_name_to_id(Process *, Eterm);
void erts_whereis_name(Process *, ErtsProcLocks,
Eterm, Process**, ErtsProcLocks, int,
- Port**);
+ Port**, int);
Process *erts_whereis_process(Process *,
ErtsProcLocks,
Eterm,
diff --git a/erts/emulator/beam/safe_hash.h b/erts/emulator/beam/safe_hash.h
index 6910b33004..285103cb17 100644
--- a/erts/emulator/beam/safe_hash.h
+++ b/erts/emulator/beam/safe_hash.h
@@ -26,14 +26,9 @@
#ifndef __SAFE_HASH_H__
#define __SAFE_HASH_H__
-
-#ifndef __SYS_H__
#include "sys.h"
-#endif
-
#include "erl_alloc.h"
-
typedef unsigned long SafeHashValue;
typedef int (*SHCMP_FUN)(void*, void*);
diff --git a/erts/emulator/beam/sys.h b/erts/emulator/beam/sys.h
index f303d4f167..dfe82cab44 100644
--- a/erts/emulator/beam/sys.h
+++ b/erts/emulator/beam/sys.h
@@ -97,7 +97,7 @@
((UWord)((char*)(ptr) - (char*)(start)) < (nbytes))
#define ErtsContainerStruct(ptr, type, member) \
- (type *)((char *)(1 ? (ptr) : &((type *)0)->member) - offsetof(type, member))
+ ((type *)((char *)(1 ? (ptr) : &((type *)0)->member) - offsetof(type, member)))
#if defined (__WIN32__)
# include "erl_win_sys.h"
@@ -154,8 +154,9 @@ typedef ERTS_SYS_FD_TYPE ErtsSysFdType;
# define ERTS_WRITE_UNLIKELY(X) X
#endif
+/* clang may have too low __GNUC__ versions but can handle it */
#ifdef __GNUC__
-# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 5)
+# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 5) || defined(__clang__)
# define ERTS_DECLARE_DUMMY(X) X __attribute__ ((unused))
# else
# define ERTS_DECLARE_DUMMY(X) X
diff --git a/erts/emulator/beam/utils.c b/erts/emulator/beam/utils.c
index cedc88e5fe..6786657faf 100644
--- a/erts/emulator/beam/utils.c
+++ b/erts/emulator/beam/utils.c
@@ -85,7 +85,7 @@ erts_heap_alloc(Process* p, Uint need, Uint xtra)
&& HEAP_TOP(p) >= p->space_verified_from
&& HEAP_TOP(p) + need <= p->space_verified_from + p->space_verified
&& HEAP_LIMIT(p) - HEAP_TOP(p) >= need) {
-
+
Uint consumed = need + (HEAP_TOP(p) - p->space_verified_from);
ASSERT(consumed <= p->space_verified);
p->space_verified -= consumed;
@@ -102,6 +102,7 @@ erts_heap_alloc(Process* p, Uint need, Uint xtra)
if (bp != NULL && need <= (bp->alloc_size - bp->used_size)) {
Eterm* ret = bp->mem + bp->used_size;
bp->used_size += need;
+ p->mbuf_sz += need;
return ret;
}
#ifdef DEBUG
@@ -124,7 +125,7 @@ erts_heap_alloc(Process* p, Uint need, Uint xtra)
MBUF(p) = bp;
bp->alloc_size = n;
bp->used_size = need;
- MBUF_SIZE(p) += n;
+ MBUF_SIZE(p) += need;
bp->off_heap.first = NULL;
bp->off_heap.overhead = 0;
return bp->mem;
@@ -638,7 +639,7 @@ erts_bld_atom_uword_2tup_list(Uint **hpp, Uint *szp,
ui = uint_to_big(uints[i], *hpp);
*hpp += BIG_UINT_HEAP_SIZE;
}
-
+
res = CONS(*hpp+3, TUPLE2(*hpp, atoms[i], ui), res);
*hpp += 5;
}
@@ -676,14 +677,14 @@ erts_bld_atom_2uint_3tup_list(Uint **hpp, Uint *szp, Sint length,
ui1 = uint_to_big(uints1[i], *hpp);
*hpp += BIG_UINT_HEAP_SIZE;
}
-
+
if (IS_USMALL(0, uints2[i]))
ui2 = make_small(uints2[i]);
else {
ui2 = uint_to_big(uints2[i], *hpp);
*hpp += BIG_UINT_HEAP_SIZE;
}
-
+
res = CONS(*hpp+4, TUPLE3(*hpp, atoms[i], ui1, ui2), res);
*hpp += 6;
}
@@ -794,7 +795,7 @@ hash_binary_bytes(Eterm bin, Uint sz, Uint32 hash)
Uint b;
Uint lshift = bitoffs;
Uint rshift = 8 - lshift;
-
+
while (sz--) {
b = (previous << lshift) & 0xFF;
previous = *ptr++;
@@ -805,7 +806,7 @@ hash_binary_bytes(Eterm bin, Uint sz, Uint32 hash)
b = (previous << lshift) & 0xFF;
previous = *ptr++;
b |= previous >> rshift;
-
+
b >>= 8 - bitsize;
hash = (hash*FUNNY_NUMBER1 + b) * FUNNY_NUMBER12 + bitsize;
}
@@ -835,21 +836,21 @@ Uint32 make_hash(Eterm term_arg)
do { \
Uint32 x = (Uint32) (Expr); \
hash = \
- (((((hash)*(Prime1) + (x & 0xFF)) * (Prime1) + \
- ((x >> 8) & 0xFF)) * (Prime1) + \
- ((x >> 16) & 0xFF)) * (Prime1) + \
+ (((((hash)*(Prime1) + (x & 0xFF)) * (Prime1) + \
+ ((x >> 8) & 0xFF)) * (Prime1) + \
+ ((x >> 16) & 0xFF)) * (Prime1) + \
(x >> 24)); \
} while(0)
-#define UINT32_HASH_RET(Expr, Prime1, Prime2) \
+#define UINT32_HASH_RET(Expr, Prime1, Prime2) \
UINT32_HASH_STEP(Expr, Prime1); \
hash = hash * (Prime2); \
- break
-
-
+ break
+
+
/*
* Significant additions needed for real 64 bit port with larger fixnums.
- */
+ */
/*
* Note, for the simple 64bit port, not utilizing the
@@ -864,7 +865,7 @@ tail_recur:
hash = hash*FUNNY_NUMBER3 + 1;
break;
case ATOM_DEF:
- hash = hash*FUNNY_NUMBER1 +
+ hash = hash*FUNNY_NUMBER1 +
(atom_tab(atom_val(term))->slot.bucket.hvalue);
break;
case SMALL_DEF:
@@ -893,9 +894,9 @@ tail_recur:
Export* ep = *((Export **) (export_val(term) + 1));
hash = hash * FUNNY_NUMBER11 + ep->code[2];
- hash = hash*FUNNY_NUMBER1 +
+ hash = hash*FUNNY_NUMBER1 +
(atom_tab(atom_val(ep->code[0]))->slot.bucket.hvalue);
- hash = hash*FUNNY_NUMBER1 +
+ hash = hash*FUNNY_NUMBER1 +
(atom_tab(atom_val(ep->code[1]))->slot.bucket.hvalue);
break;
}
@@ -906,7 +907,7 @@ tail_recur:
Uint num_free = funp->num_free;
hash = hash * FUNNY_NUMBER10 + num_free;
- hash = hash*FUNNY_NUMBER1 +
+ hash = hash*FUNNY_NUMBER1 +
(atom_tab(atom_val(funp->fe->module))->slot.bucket.hvalue);
hash = hash*FUNNY_NUMBER2 + funp->fe->old_index;
hash = hash*FUNNY_NUMBER2 + funp->fe->old_uniq;
@@ -931,7 +932,7 @@ tail_recur:
UINT32_HASH_RET(internal_ref_numbers(term)[0],FUNNY_NUMBER9,FUNNY_NUMBER10);
case EXTERNAL_REF_DEF:
UINT32_HASH_RET(external_ref_numbers(term)[0],FUNNY_NUMBER9,FUNNY_NUMBER10);
- case FLOAT_DEF:
+ case FLOAT_DEF:
{
FloatDef ff;
GET_DOUBLE(term, ff);
@@ -958,12 +959,12 @@ tail_recur:
** as multiplications on a Sparc is so slow.
*/
hash = hash*FUNNY_NUMBER2 + unsigned_val(*list);
-
+
if (is_not_list(CDR(list))) {
WSTACK_PUSH(stack, MAKE_HASH_CDR_POST_OP);
term = CDR(list);
goto tail_recur;
- }
+ }
list = list_val(CDR(list));
}
WSTACK_PUSH2(stack, CDR(list), MAKE_HASH_CDR_PRE_OP);
@@ -1004,17 +1005,17 @@ tail_recur:
}
hash *= is_neg ? FUNNY_NUMBER4 : FUNNY_NUMBER3;
break;
- }
+ }
case MAP_DEF:
hash = hash*FUNNY_NUMBER13 + FUNNY_NUMBER14 + make_hash2(term);
break;
- case TUPLE_DEF:
+ case TUPLE_DEF:
{
Eterm* ptr = tuple_val(term);
Uint arity = arityval(*ptr);
WSTACK_PUSH3(stack, (UWord) arity, (UWord)(ptr+1), (UWord) arity);
- op = MAKE_HASH_TUPLE_OP;
+ op = MAKE_HASH_TUPLE_OP;
}/*fall through*/
case MAKE_HASH_TUPLE_OP:
case MAKE_HASH_TERM_ARRAY_OP:
@@ -1031,8 +1032,8 @@ tail_recur:
hash = hash*FUNNY_NUMBER9 + arity;
}
break;
- }
-
+ }
+
default:
erts_exit(ERTS_ERROR_EXIT, "Invalid tag in make_hash(0x%X,0x%X)\n", term, op);
return 0;
@@ -1159,8 +1160,8 @@ make_hash2(Eterm term)
if (y < 0) { \
UINT32_HASH(-y, AConst); \
/* Negative numbers are unnecessarily mixed twice. */ \
- } \
- UINT32_HASH(y, AConst); \
+ } \
+ UINT32_HASH(y, AConst); \
} while(0)
#define IS_SSMALL28(x) (((Uint) (((x) >> (28-1)) + 1)) < 2)
@@ -1242,7 +1243,7 @@ make_hash2(Eterm term)
int arity = header_arity(hdr);
Eterm* elem = tuple_val(term);
UINT32_HASH(arity, HCONST_9);
- if (arity == 0) /* Empty tuple */
+ if (arity == 0) /* Empty tuple */
goto hash2_common;
for (i = arity; ; i--) {
term = elem[i];
@@ -1329,7 +1330,7 @@ make_hash2(Eterm term)
{
Export* ep = *((Export **) (export_val(term) + 1));
UINT32_HASH_2
- (ep->code[2],
+ (ep->code[2],
atom_tab(atom_val(ep->code[0]))->slot.bucket.hvalue,
HCONST);
UINT32_HASH
@@ -1343,7 +1344,7 @@ make_hash2(Eterm term)
ErlFunThing* funp = (ErlFunThing *) fun_val(term);
Uint num_free = funp->num_free;
UINT32_HASH_2
- (num_free,
+ (num_free,
atom_tab(atom_val(funp->fe->module))->slot.bucket.hvalue,
HCONST);
UINT32_HASH_2
@@ -1468,7 +1469,7 @@ make_hash2(Eterm term)
goto hash2_common;
}
break;
-
+
default:
erts_exit(ERTS_ERROR_EXIT, "Invalid tag in make_hash2(0x%X)\n", term);
}
@@ -1541,7 +1542,7 @@ make_hash2(Eterm term)
}
case HASH_MAP_PAIR:
hash_xor_pairs ^= hash;
- hash = 0;
+ hash = 0;
goto hash2_common;
default:
break;
@@ -1678,17 +1679,22 @@ make_internal_hash(Eterm term)
* the order in which keys and values are encountered.
* We therefore calculate context independent hashes for all .
* key-value pairs and then xor them together.
+ *
+ * We *do* need to use an initial seed for each pair, i.e. the
+ * hash value, so the hash value is reset for each pair with 'hash'.
+ * If we don't, no additional entropy is given to the system and the
+ * hash collision resolution in maps:from_list/1 would fail.
*/
ESTACK_PUSH(s, hash_xor_pairs);
ESTACK_PUSH(s, hash);
ESTACK_PUSH(s, HASH_MAP_TAIL);
- hash = 0;
- hash_xor_pairs = 0;
for (i = size - 1; i >= 0; i--) {
+ ESTACK_PUSH(s, hash); /* initial seed for all pairs */
ESTACK_PUSH(s, HASH_MAP_PAIR);
ESTACK_PUSH(s, vs[i]);
ESTACK_PUSH(s, ks[i]);
}
+ hash_xor_pairs = 0;
goto pop_next;
}
case HAMT_SUBTAG_HEAD_ARRAY:
@@ -1700,7 +1706,6 @@ make_internal_hash(Eterm term)
ESTACK_PUSH(s, hash_xor_pairs);
ESTACK_PUSH(s, hash);
ESTACK_PUSH(s, HASH_MAP_TAIL);
- hash = 0;
hash_xor_pairs = 0;
}
switch (hdr & _HEADER_MAP_SUBTAG_MASK) {
@@ -1717,6 +1722,7 @@ make_internal_hash(Eterm term)
while (i) {
if (is_list(*ptr)) {
Eterm* cons = list_val(*ptr);
+ ESTACK_PUSH(s, hash); /* initial seed for all pairs */
ESTACK_PUSH(s, HASH_MAP_PAIR);
ESTACK_PUSH(s, CDR(cons));
ESTACK_PUSH(s, CAR(cons));
@@ -1906,6 +1912,7 @@ make_internal_hash(Eterm term)
pop_next:
if (ESTACK_ISEMPTY(s)) {
DESTROY_ESTACK(s);
+
return hash;
}
@@ -1920,7 +1927,7 @@ make_internal_hash(Eterm term)
}
case HASH_MAP_PAIR:
hash_xor_pairs ^= hash;
- hash = 0;
+ hash = (Uint32) ESTACK_POP(s); /* initial seed for all pairs */
goto pop_next;
case HASH_CDR:
@@ -1953,8 +1960,8 @@ Uint32 make_broken_hash(Eterm term)
DECLARE_WSTACK(stack);
unsigned op;
tail_recur:
- op = tag_val_def(term);
- for (;;) {
+ op = tag_val_def(term);
+ for (;;) {
switch (op) {
case NIL_DEF:
hash = hash*FUNNY_NUMBER3 + 1;
@@ -1976,8 +1983,7 @@ tail_recur:
{ /* like a bignum */
Uint32 y4 = (Uint32) y2;
hash = hash*FUNNY_NUMBER2 + ((y4 << 16) | (y4 >> 16));
- if (y3)
- {
+ if (y3) {
hash = hash*FUNNY_NUMBER2 + ((y3 << 16) | (y3 >> 16));
arity++;
}
@@ -2020,9 +2026,9 @@ tail_recur:
Export* ep = *((Export **) (export_val(term) + 1));
hash = hash * FUNNY_NUMBER11 + ep->code[2];
- hash = hash*FUNNY_NUMBER1 +
+ hash = hash*FUNNY_NUMBER1 +
(atom_tab(atom_val(ep->code[0]))->slot.bucket.hvalue);
- hash = hash*FUNNY_NUMBER1 +
+ hash = hash*FUNNY_NUMBER1 +
(atom_tab(atom_val(ep->code[1]))->slot.bucket.hvalue);
break;
}
@@ -2033,7 +2039,7 @@ tail_recur:
Uint num_free = funp->num_free;
hash = hash * FUNNY_NUMBER10 + num_free;
- hash = hash*FUNNY_NUMBER1 +
+ hash = hash*FUNNY_NUMBER1 +
(atom_tab(atom_val(funp->fe->module))->slot.bucket.hvalue);
hash = hash*FUNNY_NUMBER2 + funp->fe->old_index;
hash = hash*FUNNY_NUMBER2 + funp->fe->old_uniq;
@@ -2065,7 +2071,7 @@ tail_recur:
case EXTERNAL_REF_DEF:
hash = hash*FUNNY_NUMBER9 + external_ref_numbers(term)[0];
break;
- case FLOAT_DEF:
+ case FLOAT_DEF:
{
FloatDef ff;
GET_DOUBLE(term, ff);
@@ -2149,7 +2155,7 @@ tail_recur:
}
#else
-#error "unsupported D_EXP size"
+#error "unsupported D_EXP size"
#endif
hash = hash * (is_neg ? FUNNY_NUMBER3 : FUNNY_NUMBER2) + arity;
}
@@ -2158,14 +2164,14 @@ tail_recur:
case MAP_DEF:
hash = hash*FUNNY_NUMBER13 + FUNNY_NUMBER14 + make_hash2(term);
break;
- case TUPLE_DEF:
+ case TUPLE_DEF:
{
Eterm* ptr = tuple_val(term);
Uint arity = arityval(*ptr);
WSTACK_PUSH3(stack, (UWord) arity, (UWord) (ptr+1), (UWord) arity);
op = MAKE_HASH_TUPLE_OP;
- }/*fall through*/
+ }/*fall through*/
case MAKE_HASH_TUPLE_OP:
case MAKE_HASH_TERM_ARRAY_OP:
{
@@ -2193,7 +2199,7 @@ tail_recur:
DESTROY_WSTACK(stack);
return hash;
-
+
#undef MAKE_HASH_TUPLE_OP
#undef MAKE_HASH_TERM_ARRAY_OP
#undef MAKE_HASH_CDR_PRE_OP
@@ -2210,7 +2216,9 @@ do_allocate_logger_message(Eterm gleader, Eterm **hp, ErlOffHeap **ohp,
#ifndef ERTS_SMP
#ifdef USE_THREADS
- if (erts_get_scheduler_data()) /* Must be scheduler thread */
+ if (!erts_get_scheduler_data()) /* Must be scheduler thread */
+ *p = NULL;
+ else
#endif
{
*p = erts_whereis_process(NULL, 0, am_error_logger, 0, 0);
@@ -2226,18 +2234,10 @@ do_allocate_logger_message(Eterm gleader, Eterm **hp, ErlOffHeap **ohp,
}
/* So we have an error logger, lets build the message */
- if (sz <= HeapWordsLeft(*p)) {
- *ohp = &MSO(*p);
- *hp = HEAP_TOP(*p);
- HEAP_TOP(*p) += sz;
- } else {
-#endif
- *bp = new_message_buffer(sz);
- *ohp = &(*bp)->off_heap;
- *hp = (*bp)->mem;
-#ifndef ERTS_SMP
- }
#endif
+ *bp = new_message_buffer(sz);
+ *ohp = &(*bp)->off_heap;
+ *hp = (*bp)->mem;
return (is_nil(gleader)
? am_noproc
@@ -2359,13 +2359,13 @@ static int do_send_term_to_logger(Eterm tag, Eterm gleader,
}
static ERTS_INLINE int
-send_info_to_logger(Eterm gleader, char *buf, int len)
+send_info_to_logger(Eterm gleader, char *buf, int len)
{
return do_send_to_logger(am_info_msg, gleader, buf, len);
}
static ERTS_INLINE int
-send_warning_to_logger(Eterm gleader, char *buf, int len)
+send_warning_to_logger(Eterm gleader, char *buf, int len)
{
Eterm tag;
switch (erts_error_logger_warnings) {
@@ -2377,7 +2377,7 @@ send_warning_to_logger(Eterm gleader, char *buf, int len)
}
static ERTS_INLINE int
-send_error_to_logger(Eterm gleader, char *buf, int len)
+send_error_to_logger(Eterm gleader, char *buf, int len)
{
return do_send_to_logger(am_error, gleader, buf, len);
}
@@ -2619,7 +2619,7 @@ tailrecur_ne:
break; /* not equal */
case TAG_PRIMARY_BOXED:
- {
+ {
Eterm hdr = *boxed_val(a);
switch (hdr & _TAG_HEADER_MASK) {
case ARITYVAL_SUBTAG:
@@ -2645,7 +2645,7 @@ tailrecur_ne:
Uint b_bitsize;
Uint a_bitoffs;
Uint b_bitoffs;
-
+
if (!is_binary(b)) {
goto not_equal;
}
@@ -2677,7 +2677,7 @@ tailrecur_ne:
{
ErlFunThing* f1;
ErlFunThing* f2;
-
+
if (!is_fun(b))
goto not_equal;
f1 = (ErlFunThing *) fun_val(a);
@@ -2708,7 +2708,7 @@ tailrecur_ne:
if(ap->header == bp->header && ap->node == bp->node) {
ASSERT(1 == external_data_words(a));
ASSERT(1 == external_data_words(b));
-
+
if (ap->data.ui[0] == bp->data.ui[0]) goto pop_next;
}
break; /* not equal */
@@ -2765,7 +2765,7 @@ tailrecur_ne:
if (alen == 3 && blen == 3) {
/* Most refs are of length 3 */
if (anum[1] == bnum[1] && anum[2] == bnum[2]) {
- goto pop_next;
+ goto pop_next;
} else {
goto not_equal;
}
@@ -2790,7 +2790,7 @@ tailrecur_ne:
for (i = common_len; i < blen; i++)
if (bnum[i] != 0)
goto not_equal;
- }
+ }
}
goto pop_next;
}
@@ -2798,7 +2798,7 @@ tailrecur_ne:
case NEG_BIG_SUBTAG:
{
int i;
-
+
if (!is_big(b))
goto not_equal;
aa = big_val(a);
@@ -2816,7 +2816,7 @@ tailrecur_ne:
{
FloatDef af;
FloatDef bf;
-
+
if (is_float(b)) {
GET_DOUBLE(a, af);
GET_DOUBLE(b, bf);
@@ -2895,7 +2895,7 @@ term_array: /* arrays in 'aa' and 'bb', length in 'sz' */
}
goto tailrecur_ne;
}
-
+
pop_next:
if (!WSTACK_ISEMPTY(stack)) {
UWord something = WSTACK_POP(stack);
@@ -3099,7 +3099,7 @@ tailrecur_ne:
}
anode = erts_this_node;
adata = internal_port_data(a);
-
+
port_common:
CMP_NODES(anode, bnode);
ON_CMP_GOTO((Sint)(adata - bdata));
@@ -3117,7 +3117,7 @@ tailrecur_ne:
}
anode = erts_this_node;
adata = internal_pid_data(a);
-
+
pid_common:
if (adata != bdata) {
RETURN_NEQ(adata < bdata ? -1 : 1);
@@ -3342,7 +3342,7 @@ tailrecur_ne:
diff = f1->num_free - f2->num_free;
if (diff != 0) {
RETURN_NEQ(diff);
- }
+ }
i = f1->num_free;
if (i == 0) goto pop_next;
aa = f1->env;
@@ -3403,10 +3403,10 @@ tailrecur_ne:
anum = internal_thing_ref_numbers(athing);
alen = internal_thing_ref_no_of_numbers(athing);
}
-
+
ref_common:
CMP_NODES(anode, bnode);
-
+
ASSERT(alen > 0 && blen > 0);
if (alen != blen) {
if (alen > blen) {
@@ -3424,7 +3424,7 @@ tailrecur_ne:
} while (alen < blen);
}
}
-
+
ASSERT(alen == blen);
for (i = (Sint) alen - 1; i >= 0; i--)
if (anum[i] != bnum[i])
@@ -3639,8 +3639,8 @@ term_array: /* arrays in 'aa' and 'bb', length in 'i' */
}
a = *aa;
b = *bb;
- goto tailrecur;
-
+ goto tailrecur;
+
pop_next:
if (!WSTACK_ISEMPTY(stack)) {
UWord something = WSTACK_POP(stack);
@@ -3893,31 +3893,33 @@ void bin_write(int to, void *to_arg, byte* buf, size_t sz)
}
/* Fill buf with the contents of bytelist list
- return number of chars in list or -1 for error */
-
+ * return number of chars in list
+ * or -1 for type error
+ * or -2 for not enough buffer space (buffer contains truncated result)
+ */
Sint
intlist_to_buf(Eterm list, char *buf, Sint len)
{
Eterm* listptr;
Sint sz = 0;
- if (is_nil(list))
+ if (is_nil(list))
return 0;
if (is_not_list(list))
return -1;
listptr = list_val(list);
while (sz < len) {
- if (!is_byte(*listptr))
+ if (!is_byte(*listptr))
return -1;
buf[sz++] = unsigned_val(*listptr);
if (is_nil(*(listptr + 1)))
return(sz);
- if (is_not_list(*(listptr + 1)))
+ if (is_not_list(*(listptr + 1)))
return -1;
listptr = list_val(*(listptr + 1));
}
- return -1; /* not enough space */
+ return -2; /* not enough space */
}
/*
@@ -4161,10 +4163,10 @@ do { \
} else if (yield_support && --yield_count <= 0)
goto L_yield;
}
-
+
res = len;
- L_return:
+ L_return:
DESTROY_ESTACK(s);
@@ -5057,7 +5059,7 @@ Process *p;
if(p)
print_process_info(ERTS_PRINT_STDERR, NULL, p);
}
-
+
void ppi(Eterm pid)
{
pp(erts_proc_lookup(pid));
@@ -5083,5 +5085,3 @@ ps(Process* p, Eterm* stop)
}
}
#endif
-
-
diff --git a/erts/emulator/drivers/common/inet_drv.c b/erts/emulator/drivers/common/inet_drv.c
index e87d141ddb..254d3baeb1 100644
--- a/erts/emulator/drivers/common/inet_drv.c
+++ b/erts/emulator/drivers/common/inet_drv.c
@@ -34,6 +34,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include <stddef.h>
#include <ctype.h>
#include <sys/types.h>
#include <errno.h>
@@ -58,6 +59,9 @@
#ifdef HAVE_NETPACKET_PACKET_H
#include <netpacket/packet.h>
#endif
+#ifdef HAVE_SYS_UN_H
+#include <sys/un.h>
+#endif
/* All platforms fail on malloc errors. */
#define FATAL_MALLOC
@@ -573,7 +577,7 @@ static int my_strncasecmp(const char *s1, const char *s2, size_t n)
#ifdef HAVE_SOCKLEN_T
# define SOCKLEN_T socklen_t
#else
-# define SOCKLEN_T int
+# define SOCKLEN_T size_t
#endif
#include "packet_parser.h"
@@ -587,6 +591,26 @@ static int my_strncasecmp(const char *s1, const char *s2, size_t n)
(((unsigned char*) (s))[1] << 8) | \
(((unsigned char*) (s))[0]))
+#ifdef HAVE_SYS_UN_H
+
+/* strnlen doesn't exist everywhere */
+static size_t my_strnlen(const char *s, size_t maxlen)
+{
+ size_t i = 0;
+ while (i < maxlen && s[i] != '\0')
+ i++;
+ return i;
+}
+
+/* Check that some character in the buffer != '\0' */
+static int is_nonzero(const char *s, size_t n)
+{
+ size_t i;
+ for (i = 0; i < n; i++) if (s[i] != '\0') return !0;
+ return 0;
+}
+
+#endif
#ifdef VALGRIND
# include <valgrind/memcheck.h>
@@ -607,10 +631,13 @@ static int my_strncasecmp(const char *s1, const char *s2, size_t n)
*/
/* general address encode/decode tag */
+#define INET_AF_UNSPEC 0
#define INET_AF_INET 1
#define INET_AF_INET6 2
#define INET_AF_ANY 3 /* INADDR_ANY or IN6ADDR_ANY_INIT */
#define INET_AF_LOOPBACK 4 /* INADDR_LOOPBACK or IN6ADDR_LOOPBACK_INIT */
+#define INET_AF_LOCAL 5
+#define INET_AF_UNDEFINED 6 /* Unknown */
/* open and INET_REQ_GETTYPE enumeration */
#define INET_TYPE_STREAM 1
@@ -633,7 +660,7 @@ static int my_strncasecmp(const char *s1, const char *s2, size_t n)
/* INET_REQ_GETSTATUS enumeration */
#define INET_F_OPEN 0x0001
-#define INET_F_BOUND 0x0002
+/* INET_F_BOUND removed - renumber when there comes a bigger rewrite */
#define INET_F_ACTIVE 0x0004
#define INET_F_LISTEN 0x0008
#define INET_F_CON 0x0010
@@ -831,19 +858,15 @@ static int my_strncasecmp(const char *s1, const char *s2, size_t n)
#define INET_STATE_CLOSED (0)
#define INET_STATE_OPEN (INET_F_OPEN)
-#define INET_STATE_BOUND (INET_STATE_OPEN | INET_F_BOUND)
-#define INET_STATE_CONNECTED (INET_STATE_BOUND | INET_F_ACTIVE)
-#define INET_STATE_LISTENING (INET_STATE_BOUND | INET_F_LISTEN)
-#define INET_STATE_CONNECTING (INET_STATE_BOUND | INET_F_CON)
+#define INET_STATE_CONNECTED (INET_STATE_OPEN | INET_F_ACTIVE)
+#define INET_STATE_LISTENING (INET_STATE_OPEN | INET_F_LISTEN)
+#define INET_STATE_CONNECTING (INET_STATE_OPEN | INET_F_CON)
#define INET_STATE_ACCEPTING (INET_STATE_LISTENING | INET_F_ACC)
#define INET_STATE_MULTI_ACCEPTING (INET_STATE_ACCEPTING | INET_F_MULTI_CLIENT)
#define IS_OPEN(d) \
(((d)->state & INET_F_OPEN) == INET_F_OPEN)
-#define IS_BOUND(d) \
- (((d)->state & INET_F_BOUND) == INET_F_BOUND)
-
#define IS_CONNECTED(d) \
(((d)->state & INET_STATE_CONNECTED) == INET_STATE_CONNECTED)
@@ -896,19 +919,35 @@ typedef union {
#ifdef HAVE_IN6
struct sockaddr_in6 sai6;
#endif
+#ifdef HAVE_SYS_UN_H
+ struct sockaddr_un sal;
+#endif
} inet_address;
-/* for AF_INET & AF_INET6 */
-#define inet_address_port(x) ((x)->sai.sin_port)
+#define inet_address_port(x) \
+ ((((x)->sai.sin_family == AF_INET) || \
+ ((x)->sai.sin_family == AF_INET6)) ? \
+ ((x)->sai.sin_port) : -1)
+
+#ifdef HAVE_SYS_UN_H
+#define localaddrlen(data) \
+ ((((unsigned char*)(data))[0] == INET_AF_LOCAL) ? \
+ (1 + 1 + ((unsigned char*)(data))[1]) : 1)
+#else
+#define localaddrlen(data) (1)
+#endif
#if defined(HAVE_IN6) && defined(AF_INET6)
-#define addrlen(family) \
- ((family == AF_INET) ? sizeof(struct in_addr) : \
- ((family == AF_INET6) ? sizeof(struct in6_addr) : 0))
+#define addrlen(data) \
+ ((((unsigned char*)(data))[0] == INET_AF_INET) ? \
+ (1 + 2 + 4) : \
+ ((((unsigned char*)(data))[0] == INET_AF_INET6) ? \
+ (1 + 2 + 16) : localaddrlen(data)))
#else
-#define addrlen(family) \
- ((family == AF_INET) ? sizeof(struct in_addr) : 0)
+#define addrlen(data) \
+ ((((unsigned char*)(data))[0] == INET_AF_INET) ? \
+ (1 + 2 + 4) : localaddrlen(data))
#endif
typedef struct _multi_timer_data {
@@ -999,8 +1038,10 @@ typedef struct {
inet_address peer_addr; /* fake peer address */
inet_address name_addr; /* fake local address */
- inet_address* peer_ptr; /* fake peername or NULL */
- inet_address* name_ptr; /* fake sockname or NULL */
+ inet_address* peer_ptr; /* fake peername or NULL */
+ inet_address* name_ptr; /* fake sockname or NULL */
+ SOCKLEN_T peer_addr_len; /* fake peername size */
+ SOCKLEN_T name_addr_len; /* fake sockname size */
int bufsz; /* minimum buffer constraint */
unsigned int hsz; /* the list header size, -1 is large !!! */
@@ -1246,6 +1287,8 @@ static int async_ref = 0; /* async reference id generator */
} while (0)
static ErlDrvTermData am_ok;
+static ErlDrvTermData am_undefined;
+static ErlDrvTermData am_unspec;
static ErlDrvTermData am_tcp;
static ErlDrvTermData am_error;
static ErlDrvTermData am_einval;
@@ -1263,6 +1306,9 @@ static ErlDrvTermData am_udp;
static ErlDrvTermData am_udp_passive;
static ErlDrvTermData am_udp_error;
#endif
+#ifdef HAVE_SYS_UN_H
+static ErlDrvTermData am_local;
+#endif
#ifdef HAVE_SCTP
static ErlDrvTermData am_sctp;
static ErlDrvTermData am_sctp_passive;
@@ -1288,7 +1334,10 @@ static ErlDrvTermData am_ipv6_v6only;
static ErlDrvTermData am_netns;
#endif
-/* speical errors for bad ports and sequences */
+static char str_eafnosupport[] = "eafnosupport";
+static char str_einval[] = "einval";
+
+/* special errors for bad ports and sequences */
#define EXBADPORT "exbadport"
#define EXBADSEQ "exbadseq"
@@ -1471,40 +1520,67 @@ static void *realloc_wrapper(void *current, ErlDrvSizeT size){
#endif
#ifdef HAVE_UDP
-static int load_ip_port(ErlDrvTermData* spec, int i, char* buf)
-{
- spec[i++] = ERL_DRV_INT;
- spec[i++] = (ErlDrvTermData) get_int16(buf);
- return i;
-}
-
-static int load_ip_address(ErlDrvTermData* spec, int i, int family, char* buf)
+static int load_address(ErlDrvTermData* spec, int i, char* buf)
{
int n;
- if (family == AF_INET) {
- for (n = 0; n < 4; n++) {
+ switch (*buf++) { /* Family */
+ case INET_AF_INET: {
+ for (n = 2; n < 2+4; n++) {
spec[i++] = ERL_DRV_INT;
spec[i++] = (ErlDrvTermData) ((unsigned char)buf[n]);
}
spec[i++] = ERL_DRV_TUPLE;
spec[i++] = 4;
+ spec[i++] = ERL_DRV_INT;
+ spec[i++] = (ErlDrvTermData) get_int16(buf);
+ break;
}
#if defined(HAVE_IN6) && defined(AF_INET6)
- else if (family == AF_INET6) {
- for (n = 0; n < 16; n += 2) {
+ case INET_AF_INET6: {
+ for (n = 2; n < 2+16; n += 2) {
spec[i++] = ERL_DRV_INT;
spec[i++] = (ErlDrvTermData) get_int16(buf+n);
}
spec[i++] = ERL_DRV_TUPLE;
spec[i++] = 8;
+ spec[i++] = ERL_DRV_INT;
+ spec[i++] = (ErlDrvTermData) get_int16(buf);
+ break;
}
#endif
- else {
+#ifdef HAVE_SYS_UN_H
+ case INET_AF_LOCAL: {
+ int len = *(unsigned char*)buf++;
+ i = LOAD_ATOM(spec, i, am_local);
+ i = LOAD_BUF2BINARY(spec, i, buf, len);
+ spec[i++] = ERL_DRV_TUPLE;
+ spec[i++] = 2;
+ spec[i++] = ERL_DRV_INT;
+ spec[i++] = 0;
+ break;
+ }
+#endif
+ case INET_AF_UNSPEC: {
+ i = LOAD_ATOM(spec, i, am_unspec);
+ i = LOAD_BUF2BINARY(spec, i, buf, 0);
+ spec[i++] = ERL_DRV_TUPLE;
+ spec[i++] = 2;
+ spec[i++] = ERL_DRV_INT;
+ spec[i++] = 0;
+ break;
+ }
+ default: { /* INET_AF_UNDEFINED */
+ i = LOAD_ATOM(spec, i, am_undefined);
+ i = LOAD_BUF2BINARY(spec, i, buf, 0);
spec[i++] = ERL_DRV_TUPLE;
+ spec[i++] = 2;
+ spec[i++] = ERL_DRV_INT;
spec[i++] = 0;
+ break;
+ }
}
return i;
-}
+ }
#endif
@@ -1512,10 +1588,13 @@ static int load_ip_address(ErlDrvTermData* spec, int i, int family, char* buf)
/* For SCTP, we often need to return {IP, Port} tuples: */
static int inet_get_address(char* dst, inet_address* src, unsigned int* len);
-#define LOAD_IP_AND_PORT_CNT \
+/* Max of {{int()*8},int()} | {{int()*4},int()} |
+ * {{'local',binary()},int()}
+ */
+#define LOAD_INET_GET_ADDRESS_CNT \
(8*LOAD_INT_CNT + LOAD_TUPLE_CNT + LOAD_INT_CNT + LOAD_TUPLE_CNT)
-static int load_ip_and_port
+static int load_inet_get_address
(ErlDrvTermData* spec, int i, inet_descriptor* desc,
struct sockaddr_storage* addr)
{
@@ -1533,8 +1612,7 @@ static int load_ip_and_port
/* NB: the following functions are safe to use, as they create tuples
of copied Ints on the "spec", and do not install any String pts --
a ptr to "abuf" would be dangling upon exiting this function: */
- i = load_ip_address(spec, i, desc->sfamily, abuf+3);
- i = load_ip_port (spec, i, abuf+1);
+ i = load_address(spec, i, abuf); /* IP,Port | Family,Addr */
i = LOAD_TUPLE (spec, i, 2);
return i;
}
@@ -2226,7 +2304,6 @@ static ErlDrvTermData am_http_error;
static ErlDrvTermData am_abs_path;
static ErlDrvTermData am_absoluteURI;
static ErlDrvTermData am_star;
-static ErlDrvTermData am_undefined;
static ErlDrvTermData am_http;
static ErlDrvTermData am_https;
static ErlDrvTermData am_scheme;
@@ -2917,7 +2994,7 @@ static int sctp_parse_async_event
ASSERT(sptr->spc_length <= sz); /* No buffer overrun */
i = LOAD_ATOM (spec, i, am_sctp_paddr_change);
- i = load_ip_and_port(spec, i, desc, &sptr->spc_aaddr);
+ i = load_inet_get_address(spec, i, desc, &sptr->spc_aaddr);
switch (sptr->spc_state)
{
@@ -3344,10 +3421,11 @@ static int tcp_error_message(tcp_descriptor* desc, int err)
#ifdef HAVE_UDP
/*
** active mode message:
-** {udp, S, IP, Port, [H1,...Hsz | Data]} or
-** {sctp, S, IP, Port, {[AncilData], Event_or_Data}}
+** {udp, S, IP, Port, [H1,...Hsz | Data]} or
+** {sctp, S, IP, Port, {[AncilData], Event_or_Data}}
** where
** [H1,...,HSz] are msg headers (without IP/Port, UDP only),
+** [AddrLen, H2,...,HSz] are msg headers for UDP AF_UNIX only
** Data : List() | Binary()
*/
static int packet_binary_message
@@ -3357,6 +3435,7 @@ static int packet_binary_message
ErlDrvTermData spec [PACKET_ERL_DRV_TERM_DATA_LEN];
int i = 0;
int alen;
+ char* data = bin->orig_bytes+offs;
DEBUGF(("packet_binary_message(%ld): len = %d\r\n",
(long)desc->port, len));
@@ -3366,13 +3445,12 @@ static int packet_binary_message
i = LOAD_ATOM(spec, i, am_udp ); /* UDP only */
# endif
i = LOAD_PORT(spec, i, desc->dport); /* S */
-
- alen = addrlen(desc->sfamily);
- i = load_ip_address(spec, i, desc->sfamily, bin->orig_bytes+offs+3);
- i = load_ip_port(spec, i, bin->orig_bytes+offs+1); /* IP, Port */
-
- offs += (alen + 3);
- len -= (alen + 3);
+
+ alen = addrlen(data);
+ i = load_address(spec, i, data); /* IP,Port | Family,Addr */
+
+ offs += alen;
+ len -= alen;
# ifdef HAVE_SCTP
if (!IS_SCTP(desc))
@@ -3759,6 +3837,8 @@ static int inet_init()
# endif
INIT_ATOM(ok);
+ INIT_ATOM(undefined);
+ INIT_ATOM(unspec);
INIT_ATOM(tcp);
#ifdef HAVE_UDP
INIT_ATOM(udp);
@@ -3776,6 +3856,9 @@ static int inet_init()
INIT_ATOM(udp_passive);
INIT_ATOM(udp_error);
#endif
+#ifdef HAVE_SYS_UN_H
+ INIT_ATOM(local);
+#endif
INIT_ATOM(empty_out_q);
INIT_ATOM(ssl_tls);
@@ -3787,7 +3870,6 @@ static int inet_init()
INIT_ATOM(abs_path);
INIT_ATOM(absoluteURI);
am_star = driver_mk_atom("*");
- INIT_ATOM(undefined);
INIT_ATOM(http);
INIT_ATOM(https);
INIT_ATOM(scheme);
@@ -3883,63 +3965,89 @@ static int inet_init()
/*
-** Set a inaddr structure:
-** src = [P1,P0,X1,X2,.....]
+** Set an inaddr structure:
+** *src = [P1,P0,X1,X2,.....]
** dst points to a structure large enugh to keep any kind
** of inaddr.
** *len is set to length of src on call
** and is set to actual length of dst on return
-** return NULL on error and ptr after port address on success
+** return NULL if ok or ptr to errno string for error
*/
static char* inet_set_address(int family, inet_address* dst,
- char* src, ErlDrvSizeT* len)
+ char* *src, ErlDrvSizeT* len)
{
short port;
- if ((family == AF_INET) && (*len >= 2+4)) {
+ switch (family) {
+ case AF_INET: {
+ if (*len < 2+4) return str_einval;
sys_memzero((char*)dst, sizeof(struct sockaddr_in));
- port = get_int16(src);
+ port = get_int16(*src);
#ifndef NO_SA_LEN
dst->sai.sin_len = sizeof(struct sockaddr_in);
#endif
dst->sai.sin_family = family;
dst->sai.sin_port = sock_htons(port);
- sys_memcpy(&dst->sai.sin_addr, src+2, 4);
+ sys_memcpy(&dst->sai.sin_addr, (*src)+2, 4);
*len = sizeof(struct sockaddr_in);
- return src + 2+4;
+ *src += 2 + 4;
+ return NULL;
}
#if defined(HAVE_IN6) && defined(AF_INET6)
- else if ((family == AF_INET6) && (*len >= 2+16)) {
+ case AF_INET6: {
+ if (*len < 2+16) return str_einval;
sys_memzero((char*)dst, sizeof(struct sockaddr_in6));
- port = get_int16(src);
+ port = get_int16(*src);
#ifndef NO_SA_LEN
dst->sai6.sin6_len = sizeof(struct sockaddr_in6);
#endif
dst->sai6.sin6_family = family;
dst->sai6.sin6_port = sock_htons(port);
dst->sai6.sin6_flowinfo = 0; /* XXX this may be set as well ?? */
- sys_memcpy(&dst->sai6.sin6_addr, src+2, 16);
- *len = sizeof(struct sockaddr_in6);
- return src + 2+16;
+ sys_memcpy(&dst->sai6.sin6_addr, (*src)+2, 16);
+ *len = sizeof(struct sockaddr_in6);
+ *src += 2 + 16;
+ return NULL;
}
#endif
- return NULL;
+#ifdef HAVE_SYS_UN_H
+ case AF_UNIX: {
+ int n;
+ if (*len == 0) return str_einval;
+ n = *((unsigned char*)(*src)); /* Length field */
+ if ((*len < 1+n) || (sizeof(dst->sal.sun_path) < n+1)) {
+ return str_einval;
+ }
+ sys_memzero((char*)dst, sizeof(struct sockaddr_un));
+ dst->sal.sun_family = family;
+ sys_memcpy(dst->sal.sun_path, (*src)+1, n);
+ *len = offsetof(struct sockaddr_un, sun_path) + n;
+ *src += 1 + n;
+ return NULL;
+ }
+#endif
+ }
+ return str_eafnosupport;
}
/*
** Set an inaddr structure, address family comes from source data,
** or from argument if source data specifies constant address.
**
-** src = [TAG,P1,P0] when TAG = INET_AF_ANY | INET_AF_LOOPBACK
-** src = [TAG,P1,P0,X1,X2,...] when TAG = INET_AF_INET | INET_AF_INET6
+** *src = [TAG,P1,P0]
+** when TAG = INET_AF_ANY | INET_AF_LOOPBACK
+** *src = [TAG,P1,P0,X1,X2,...]
+** when TAG = INET_AF_INET | INET_AF_INET6 | INET_AF_LOCAL
+** *src = [TAG,Len,...]
+** when TAG = INET_AF_LOCAL
*/
static char *inet_set_faddress(int family, inet_address* dst,
- char *src, ErlDrvSizeT* len) {
+ char* *src, ErlDrvSizeT* len) {
int tag;
- if (*len < 1) return NULL;
+ if (*len < 1) return str_einval;
(*len) --;
- tag = *(src ++);
+ tag = *((*src) ++);
switch (tag) {
case INET_AF_INET:
family = AF_INET;
@@ -3949,12 +4057,18 @@ static char *inet_set_faddress(int family, inet_address* dst,
family = AF_INET6;
break;
# endif
+# ifdef HAVE_SYS_UN_H
+ case INET_AF_LOCAL: {
+ family = AF_UNIX;
+ break;
+ }
+# endif
case INET_AF_ANY:
case INET_AF_LOOPBACK: {
int port;
- if (*len < 2) return NULL;
- port = get_int16(src);
+ if (*len < 2) return str_einval;
+ port = get_int16(*src);
switch (family) {
case AF_INET: {
struct in_addr addr;
@@ -3966,7 +4080,7 @@ static char *inet_set_faddress(int family, inet_address* dst,
addr.s_addr = sock_htonl(INADDR_LOOPBACK);
break;
default:
- return NULL;
+ return str_einval;
}
sys_memzero((char*)dst, sizeof(struct sockaddr_in));
#ifndef NO_SA_LEN
@@ -3988,7 +4102,7 @@ static char *inet_set_faddress(int family, inet_address* dst,
paddr = &in6addr_loopback;
break;
default:
- return NULL;
+ return str_einval;
}
sys_memzero((char*)dst, sizeof(struct sockaddr_in6));
#ifndef NO_SA_LEN
@@ -4002,17 +4116,17 @@ static char *inet_set_faddress(int family, inet_address* dst,
} break;
# endif
default:
- return NULL;
+ return str_einval;
}
- return src + 2;
+ *src += 2;
+ return NULL;
} break;
default:
- return NULL;
+ return str_eafnosupport;
}
return inet_set_address(family, dst, src, len);
}
-
/* Get a inaddr structure
** src = inaddr structure
** *len is the lenght of structure
@@ -4023,6 +4137,7 @@ static char *inet_set_faddress(int family, inet_address* dst,
*/
static int inet_get_address(char* dst, inet_address* src, unsigned int* len)
{
+ /* Compare the code with inet_address_to_erlang() */
int family;
short port;
@@ -4045,6 +4160,36 @@ static int inet_get_address(char* dst, inet_address* src, unsigned int* len)
return 0;
}
#endif
+#ifdef HAVE_SYS_UN_H
+ else if (family == AF_UNIX) {
+ size_t n, m;
+ if (*len < offsetof(struct sockaddr_un, sun_path)) return -1;
+ n = *len - offsetof(struct sockaddr_un, sun_path);
+ if (255 < n) return -1;
+ /* Portability fix: Assume that the address is a zero terminated
+ * string, except when the first byte is \0 i.e the
+ * string length is 0. Then use the reported length instead.
+ * This fix handles Linux's abstract socket address
+ * nonportable extension.
+ */
+ m = my_strnlen(src->sal.sun_path, n);
+ if ((m == 0) && is_nonzero(src->sal.sun_path, n))
+ m = n;
+ dst[0] = INET_AF_LOCAL;
+ dst[1] = (char) ((unsigned char) m);
+ sys_memcpy(dst+2, src->sal.sun_path, m);
+ *len = 1 + 1 + m;
+ return 0;
+ }
+#endif
+ else if (family == AF_UNSPEC) {
+ dst[0] = INET_AF_UNSPEC;
+ *len = 1;
+ }
+ else {
+ dst[0] = INET_AF_UNDEFINED;
+ *len = 1;
+ }
return -1;
}
@@ -4053,7 +4198,9 @@ static int inet_get_address(char* dst, inet_address* src, unsigned int* len)
** according to the size of the current,
** and return the resulting encoded size
*/
-static int inet_address_to_erlang(char *dst, inet_address **src) {
+static int
+inet_address_to_erlang(char *dst, inet_address **src, SOCKLEN_T sz) {
+ /* Compare the code with inet_get_address() */
short port;
switch ((*src)->sa.sa_family) {
@@ -4078,6 +4225,30 @@ static int inet_address_to_erlang(char *dst, inet_address **src) {
(*src) = (inet_address *) (&(*src)->sai6 + 1);
return 1 + 2 + 16;
#endif
+#ifdef HAVE_SYS_UN_H
+ case AF_UNIX: {
+ size_t n, m;
+ if (sz < offsetof(struct sockaddr_un, sun_path)) return -1;
+ n = sz - offsetof(struct sockaddr_un, sun_path);
+ if (255 < n) return -1;
+ /* Portability fix: Assume that the address is a zero terminated
+ * string, except when the first byte is \0 i.e the
+ * string length is 0. Then use the reported length instead.
+ * This fix handles Linux's abstract socket address
+ * nonportable extension.
+ */
+ m = my_strnlen((*src)->sal.sun_path, n);
+ if ((m == 0) && is_nonzero((*src)->sal.sun_path, n))
+ m = n;
+ if (dst) {
+ dst[0] = INET_AF_LOCAL;
+ dst[1] = (char) ((unsigned char) m);
+ sys_memcpy(dst+2, (*src)->sal.sun_path, m);
+ }
+ (*src) = (inet_address *) (&(*src)->sal + 1);
+ return 1 + 1 + m;
+ }
+#endif
default:
return -1;
}
@@ -4086,7 +4257,7 @@ static int inet_address_to_erlang(char *dst, inet_address **src) {
/* Encode n encoded addresses from addrs in the result buffer
*/
static ErlDrvSizeT reply_inet_addrs
-(int n, inet_address *addrs, char **rbuf, ErlDrvSizeT rsize) {
+(int n, inet_address *addrs, char **rbuf, ErlDrvSizeT rsize, SOCKLEN_T sz) {
inet_address *ia;
int i, s;
ErlDrvSizeT rlen;
@@ -4094,11 +4265,19 @@ static ErlDrvSizeT reply_inet_addrs
if (IS_SOCKET_ERROR(n)) return ctl_error(sock_errno(), rbuf, rsize);
if (n == 0) return ctl_reply(INET_REP_OK, NULL, 0, rbuf, rsize);
+ /* The sz argument is only used when we have got an actual size
+ * of addrs[0] from e.g getsockname() and then n == 1
+ * so we will loop over 1 element below. Otherwise sz
+ * would be expected to differ between addresses but that
+ * can only happen for AF_UNIX and we will only be called with
+ * n > 1 for SCTP and that will never (?) happen with AF_UNIX
+ */
+
/* Calculate result length */
rlen = 1;
ia = addrs;
for (i = 0; i < n; i++) {
- s = inet_address_to_erlang(NULL, &ia);
+ s = inet_address_to_erlang(NULL, &ia, sz);
if (s < 0) break;
rlen += s;
}
@@ -4109,7 +4288,7 @@ static ErlDrvSizeT reply_inet_addrs
rlen = 1;
ia = addrs;
for (i = 0; i < n; i++) {
- s = inet_address_to_erlang((*rbuf)+rlen, &ia);
+ s = inet_address_to_erlang((*rbuf)+rlen, &ia, sz);
if (s < 0) break;
rlen += s;
}
@@ -4180,6 +4359,7 @@ static ErlDrvSSizeT inet_ctl_open(inet_descriptor* desc, int domain, int type,
char** rbuf, ErlDrvSizeT rsize)
{
int save_errno;
+ int protocol;
#ifdef HAVE_SETNS
int current_ns, new_ns;
current_ns = new_ns = 0;
@@ -4218,7 +4398,11 @@ static ErlDrvSSizeT inet_ctl_open(inet_descriptor* desc, int domain, int type,
}
}
#endif
- if ((desc->s = sock_open(domain, type, desc->sprotocol)) == INVALID_SOCKET)
+ protocol = desc->sprotocol;
+#ifdef HAVE_SYS_UN_H
+ if (domain == AF_UNIX) protocol = 0;
+#endif
+ if ((desc->s = sock_open(domain, type, protocol)) == INVALID_SOCKET)
save_errno = sock_errno();
#ifdef HAVE_SETNS
if (desc->netns != NULL) {
@@ -4272,10 +4456,12 @@ static ErlDrvSSizeT inet_ctl_fdopen(inet_descriptor* desc, int domain, int type,
char** rbuf, ErlDrvSizeT rsize)
{
inet_address name;
- unsigned int sz = sizeof(name);
+ unsigned int sz;
if (bound) {
/* check that it is a socket and that the socket is bound */
+ sz = sizeof(name);
+ sys_memzero((char *) &name, sz);
if (IS_SOCKET_ERROR(sock_name(s, (struct sockaddr*) &name, &sz)))
return ctl_error(sock_errno(), rbuf, rsize);
if (name.sa.sa_family != domain)
@@ -4290,10 +4476,7 @@ static ErlDrvSSizeT inet_ctl_fdopen(inet_descriptor* desc, int domain, int type,
driver_select(desc->port, desc->event, ERL_DRV_READ, 1);
#endif
- if (bound)
- desc->state = INET_STATE_BOUND;
- else
- desc->state = INET_STATE_OPEN;
+ desc->state = INET_STATE_OPEN;
if (type == SOCK_STREAM) { /* check if connected */
sz = sizeof(name);
@@ -6534,7 +6717,6 @@ static int sctp_set_opts(inet_descriptor* desc, char* ptr, int len)
case SCTP_OPT_SET_PEER_PRIMARY_ADDR:
{
ErlDrvSizeT alen;
- char *after;
CHKLEN(curr, ASSOC_ID_LEN);
/* XXX: These 2 opts have isomorphic value data structures,
@@ -6545,12 +6727,9 @@ static int sctp_set_opts(inet_descriptor* desc, char* ptr, int len)
/* Fill in "arg.prim.sspp_addr": */
alen = ptr + len - curr;
- after = inet_set_faddress(desc->sfamily,
- (inet_address*) (&arg.prim.sspp_addr),
- curr, &alen);
- if (after == NULL)
- return -1;
- curr = after;
+ if (inet_set_faddress
+ (desc->sfamily, (inet_address*) (&arg.prim.sspp_addr),
+ &curr, &alen) != NULL) return -1;
proto = IPPROTO_SCTP;
if (eopt == SCTP_OPT_PRIMARY_ADDR)
@@ -6576,7 +6755,6 @@ static int sctp_set_opts(inet_descriptor* desc, char* ptr, int len)
case SCTP_OPT_PEER_ADDR_PARAMS:
{
ErlDrvSizeT alen;
- char *after;
# ifdef HAVE_STRUCT_SCTP_PADDRPARAMS_SPP_FLAGS
int eflags, cflags, hb_enable, hb_disable,
pmtud_enable, pmtud_disable;
@@ -6591,12 +6769,9 @@ static int sctp_set_opts(inet_descriptor* desc, char* ptr, int len)
/* Fill in "pap.spp_address": */
alen = ptr + len - curr;
- after = inet_set_faddress(desc->sfamily,
- (inet_address*) (&arg.pap.spp_address),
- curr, &alen);
- if (after == NULL)
- return -1;
- curr = after;
+ if (inet_set_faddress
+ (desc->sfamily, (inet_address*) (&arg.pap.spp_address),
+ &curr, &alen) != NULL) return -1;
CHKLEN(curr, 4 + 2 + 3*4);
@@ -7119,14 +7294,14 @@ static ErlDrvSSizeT inet_fill_opts(inet_descriptor* desc,
#ifdef HAVE_SCTP
#define LOAD_PADDRINFO_CNT \
- (2*LOAD_ATOM_CNT + LOAD_ASSOC_ID_CNT + LOAD_IP_AND_PORT_CNT + \
+ (2*LOAD_ATOM_CNT + LOAD_ASSOC_ID_CNT + LOAD_INET_GET_ADDRESS_CNT + \
4*LOAD_INT_CNT + LOAD_TUPLE_CNT)
static int load_paddrinfo (ErlDrvTermData * spec, int i,
inet_descriptor* desc, struct sctp_paddrinfo* pai)
{
i = LOAD_ATOM (spec, i, am_sctp_paddrinfo);
i = LOAD_ASSOC_ID (spec, i, pai->spinfo_assoc_id);
- i = load_ip_and_port(spec, i, desc, &pai->spinfo_address);
+ i = load_inet_get_address(spec, i, desc, &pai->spinfo_address);
switch(pai->spinfo_state)
{
case SCTP_ACTIVE:
@@ -7542,7 +7717,7 @@ static ErlDrvSSizeT sctp_fill_opts(inet_descriptor* desc,
/* Fill in the response: */
PLACE_FOR(spec, i,
2*LOAD_ATOM_CNT + LOAD_ASSOC_ID_CNT +
- LOAD_IP_AND_PORT_CNT + 2*LOAD_TUPLE_CNT);
+ LOAD_INET_GET_ADDRESS_CNT + 2*LOAD_TUPLE_CNT);
switch (eopt) {
case SCTP_OPT_PRIMARY_ADDR:
i = LOAD_ATOM(spec, i, am_sctp_primary_addr);
@@ -7556,7 +7731,7 @@ static ErlDrvSSizeT sctp_fill_opts(inet_descriptor* desc,
ASSERT(0);
}
i = LOAD_ASSOC_ID (spec, i, sp.sspp_assoc_id);
- i = load_ip_and_port(spec, i, desc, &sp.sspp_addr);
+ i = load_inet_get_address(spec, i, desc, &sp.sspp_addr);
i = LOAD_TUPLE (spec, i, 3);
i = LOAD_TUPLE (spec, i, 2);
break;
@@ -7583,7 +7758,7 @@ static ErlDrvSSizeT sctp_fill_opts(inet_descriptor* desc,
struct sctp_paddrparams ap;
unsigned int sz = sizeof(ap);
int n;
- char *after;
+ char *before, *xerror;
ErlDrvSizeT alen;
if (buflen < ASSOC_ID_LEN) RETURN_ERROR(spec, -EINVAL);
@@ -7591,23 +7766,32 @@ static ErlDrvSSizeT sctp_fill_opts(inet_descriptor* desc,
buf += ASSOC_ID_LEN;
buflen -= ASSOC_ID_LEN;
alen = buflen;
- after = inet_set_faddress(desc->sfamily,
- (inet_address*) (&ap.spp_address),
- buf, &alen);
- if (after == NULL) RETURN_ERROR(spec, -EINVAL);
- buflen -= after - buf;
- buf = after;
-
+ before = buf;
+ xerror =
+ inet_set_faddress
+ (desc->sfamily, (inet_address*) (&ap.spp_address),
+ &buf, &alen);
+ if (xerror != NULL) {
+#ifdef EAFNOSUPPORT
+ if (xerror == str_eafnosupport) {
+ RETURN_ERROR(spec, -EAFNOSUPPORT);
+ }
+#else
+ RETURN_ERROR(spec, -EINVAL);
+#endif
+ }
+ buflen -= buf - before;
+
if (sock_getopt(desc->s, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS,
&ap, &sz) < 0) continue;
/* Fill in the response: */
PLACE_FOR(spec, i,
2*LOAD_ATOM_CNT + LOAD_ASSOC_ID_CNT +
- LOAD_IP_AND_PORT_CNT + 4*LOAD_INT_CNT);
+ LOAD_INET_GET_ADDRESS_CNT + 4*LOAD_INT_CNT);
i = LOAD_ATOM (spec, i, am_sctp_peer_addr_params);
i = LOAD_ATOM (spec, i, am_sctp_paddrparams);
i = LOAD_ASSOC_ID (spec, i, ap.spp_assoc_id);
- i = load_ip_and_port(spec, i, desc, &ap.spp_address);
+ i = load_inet_get_address(spec, i, desc, &ap.spp_address);
i = LOAD_INT (spec, i, ap.spp_hbinterval);
i = LOAD_INT (spec, i, ap.spp_pathmaxrxt);
@@ -7823,7 +8007,7 @@ static ErlDrvSSizeT sctp_fill_opts(inet_descriptor* desc,
{
struct sctp_paddrinfo pai;
unsigned int sz = sizeof(pai);
- char *after;
+ char *before, *xerror;
ErlDrvSizeT alen;
if (buflen < ASSOC_ID_LEN) RETURN_ERROR(spec, -EINVAL);
@@ -7831,13 +8015,22 @@ static ErlDrvSSizeT sctp_fill_opts(inet_descriptor* desc,
buf += ASSOC_ID_LEN;
buflen -= ASSOC_ID_LEN;
alen = buflen;
- after = inet_set_faddress(desc->sfamily,
- (inet_address*) (&pai.spinfo_address),
- buf, &alen);
- if (after == NULL) RETURN_ERROR(spec, -EINVAL);
- buflen -= after - buf;
- buf = after;
-
+ before = buf;
+ xerror =
+ inet_set_faddress
+ (desc->sfamily, (inet_address*) (&pai.spinfo_address),
+ &buf, &alen);
+ if (xerror != NULL) {
+#ifdef EAFNOSUPPORT
+ if (xerror == str_eafnosupport) {
+ RETURN_ERROR(spec, -EAFNOSUPPORT);
+ }
+#else
+ RETURN_ERROR(spec, -EINVAL);
+#endif
+ }
+ buflen -= buf - before;
+
if (sock_getopt(desc->s, IPPROTO_SCTP, SCTP_GET_PEER_ADDR_INFO,
&pai, &sz) < 0) continue;
/* Fill in the response: */
@@ -8248,6 +8441,11 @@ static ErlDrvSSizeT inet_ctl(inet_descriptor* desc, int cmd, char* buf,
put_int32(INET_AF_INET6, &tbuf[0]);
}
#endif
+#ifdef HAVE_SYS_UN_H
+ else if (desc->sfamily == AF_UNIX) {
+ put_int32(INET_AF_LOCAL, &tbuf[0]);
+ }
+#endif
else
return ctl_error(EINVAL, rbuf, rsize);
@@ -8296,7 +8494,6 @@ static ErlDrvSSizeT inet_ctl(inet_descriptor* desc, int cmd, char* buf,
if (len != 4) return ctl_error(EINVAL, rbuf, rsize);
if (! IS_OPEN(desc)) return ctl_xerror(EXBADPORT, rbuf, rsize);
- if (! IS_BOUND(desc)) return ctl_xerror(EXBADSEQ, rbuf, rsize);
#ifdef HAVE_SCTP
if (IS_SCTP(desc) && p_sctp_getpaddrs) {
@@ -8307,19 +8504,19 @@ static ErlDrvSSizeT inet_ctl(inet_descriptor* desc, int cmd, char* buf,
assoc_id = get_int32(buf);
n = p_sctp_getpaddrs(desc->s, assoc_id, &sa);
- rlen = reply_inet_addrs(n, (inet_address *) sa, rbuf, rsize);
+ rlen = reply_inet_addrs(n, (inet_address *) sa, rbuf, rsize, 0);
if (n > 0) p_sctp_freepaddrs(sa);
return rlen;
}
#endif
{ /* Fallback to sock_peer */
inet_address addr;
- unsigned int sz;
+ SOCKLEN_T sz;
int i;
sz = sizeof(addr);
i = sock_peer(desc->s, (struct sockaddr *) &addr, &sz);
- return reply_inet_addrs(i >= 0 ? 1 : i, &addr, rbuf, rsize);
+ return reply_inet_addrs(i >= 0 ? 1 : i, &addr, rbuf, rsize, sz);
}
}
@@ -8327,15 +8524,21 @@ static ErlDrvSSizeT inet_ctl(inet_descriptor* desc, int cmd, char* buf,
char tbuf[sizeof(inet_address)];
inet_address peer;
inet_address* ptr;
- unsigned int sz = sizeof(peer);
+ unsigned int sz;
DEBUGF(("inet_ctl(%ld): PEER\r\n", (long)desc->port));
if (!(desc->state & INET_F_ACTIVE))
return ctl_error(ENOTCONN, rbuf, rsize);
- if ((ptr = desc->peer_ptr) == NULL) {
+ if ((ptr = desc->peer_ptr) != NULL) {
+ sz = desc->peer_addr_len;
+ }
+ else {
ptr = &peer;
- if (IS_SOCKET_ERROR(sock_peer(desc->s, (struct sockaddr*)ptr,&sz)))
+ sz = sizeof(peer);
+ if (IS_SOCKET_ERROR
+ (sock_peer
+ (desc->s, (struct sockaddr*)ptr, &sz)))
return ctl_error(sock_errno(), rbuf, rsize);
}
if (inet_get_address(tbuf, ptr, &sz) < 0)
@@ -8344,17 +8547,19 @@ static ErlDrvSSizeT inet_ctl(inet_descriptor* desc, int cmd, char* buf,
}
case INET_REQ_SETPEER: { /* set fake peername Port Address */
+ char *xerror;
if (len == 0) {
desc->peer_ptr = NULL;
return ctl_reply(INET_REP_OK, NULL, 0, rbuf, rsize);
}
else if (len < 2)
return ctl_error(EINVAL, rbuf, rsize);
- else if (inet_set_address(desc->sfamily, &desc->peer_addr,
- buf, &len) == NULL)
- return ctl_error(EINVAL, rbuf, rsize);
+ else if ((xerror = inet_set_faddress
+ (desc->sfamily, &desc->peer_addr, &buf, &len)) != NULL)
+ return ctl_xerror(xerror, rbuf, rsize);
else {
desc->peer_ptr = &desc->peer_addr;
+ desc->peer_addr_len = (SOCKLEN_T) len;
return ctl_reply(INET_REP_OK, NULL, 0, rbuf, rsize);
}
}
@@ -8365,7 +8570,6 @@ static ErlDrvSSizeT inet_ctl(inet_descriptor* desc, int cmd, char* buf,
if (len != 4) return ctl_error(EINVAL, rbuf, rsize);
if (! IS_OPEN(desc)) return ctl_xerror(EXBADPORT, rbuf, rsize);
- if (! IS_BOUND(desc)) return ctl_xerror(EXBADSEQ, rbuf, rsize);
#ifdef HAVE_SCTP
if (IS_SCTP(desc) && p_sctp_getladdrs) {
@@ -8376,19 +8580,20 @@ static ErlDrvSSizeT inet_ctl(inet_descriptor* desc, int cmd, char* buf,
assoc_id = get_int32(buf);
n = p_sctp_getladdrs(desc->s, assoc_id, &sa);
- rlen = reply_inet_addrs(n, (inet_address *) sa, rbuf, rsize);
+ rlen = reply_inet_addrs(n, (inet_address *) sa, rbuf, rsize, 0);
if (n > 0) p_sctp_freeladdrs(sa);
return rlen;
}
#endif
{ /* Fallback to sock_name */
inet_address addr;
- unsigned int sz;
+ SOCKLEN_T sz;
int i;
sz = sizeof(addr);
+ sys_memzero((char *) &addr, sz);
i = sock_name(desc->s, (struct sockaddr *) &addr, &sz);
- return reply_inet_addrs(i >= 0 ? 1 : i, &addr, rbuf, rsize);
+ return reply_inet_addrs(i >= 0 ? 1 : i, &addr, rbuf, rsize, sz);
}
}
@@ -8396,16 +8601,19 @@ static ErlDrvSSizeT inet_ctl(inet_descriptor* desc, int cmd, char* buf,
char tbuf[sizeof(inet_address)];
inet_address name;
inet_address* ptr;
- unsigned int sz = sizeof(name);
+ unsigned int sz;
DEBUGF(("inet_ctl(%ld): NAME\r\n", (long)desc->port));
- if (!IS_BOUND(desc))
- return ctl_error(EINVAL, rbuf, rsize); /* address is not valid */
-
- if ((ptr = desc->name_ptr) == NULL) {
+ if ((ptr = desc->name_ptr) != NULL) {
+ sz = desc->name_addr_len;
+ }
+ else {
ptr = &name;
- if (IS_SOCKET_ERROR(sock_name(desc->s, (struct sockaddr*)ptr, &sz)))
+ sz = sizeof(name);
+ sys_memzero((char *) &name, sz);
+ if (IS_SOCKET_ERROR
+ (sock_name(desc->s, (struct sockaddr*)ptr, &sz)))
return ctl_error(sock_errno(), rbuf, rsize);
}
if (inet_get_address(tbuf, ptr, &sz) < 0)
@@ -8413,26 +8621,28 @@ static ErlDrvSSizeT inet_ctl(inet_descriptor* desc, int cmd, char* buf,
return ctl_reply(INET_REP_OK, tbuf, sz, rbuf, rsize);
}
- case INET_REQ_SETNAME: { /* set fake peername Port Address */
+ case INET_REQ_SETNAME: { /* set fake sockname Port Address */
+ char *xerror;
if (len == 0) {
desc->name_ptr = NULL;
return ctl_reply(INET_REP_OK, NULL, 0, rbuf, rsize);
}
else if (len < 2)
return ctl_error(EINVAL, rbuf, rsize);
- else if (inet_set_address(desc->sfamily, &desc->name_addr,
- buf, &len) == NULL)
- return ctl_error(EINVAL, rbuf, rsize);
+ else if ((xerror = inet_set_faddress
+ (desc->sfamily, &desc->name_addr, &buf, &len)) != NULL)
+ return ctl_xerror(xerror, rbuf, rsize);
else {
desc->name_ptr = &desc->name_addr;
+ desc->name_addr_len = (SOCKLEN_T) len;
return ctl_reply(INET_REP_OK, NULL, 0, rbuf, rsize);
}
}
case INET_REQ_BIND: { /* bind socket */
- char tbuf[2];
+ char tbuf[2], *xerror;
inet_address local;
- short port;
+ int port;
DEBUGF(("inet_ctl(%ld): BIND\r\n", (long)desc->port));
@@ -8441,21 +8651,24 @@ static ErlDrvSSizeT inet_ctl(inet_descriptor* desc, int cmd, char* buf,
if (desc->state != INET_STATE_OPEN)
return ctl_xerror(EXBADPORT, rbuf, rsize);
- if (inet_set_faddress(desc->sfamily, &local, buf, &len) == NULL)
- return ctl_error(EINVAL, rbuf, rsize);
+ if ((xerror = inet_set_faddress
+ (desc->sfamily, &local, &buf, &len)) != NULL)
+ return ctl_xerror(xerror, rbuf, rsize);
if (IS_SOCKET_ERROR(sock_bind(desc->s,(struct sockaddr*) &local, len)))
return ctl_error(sock_errno(), rbuf, rsize);
- desc->state = INET_STATE_BOUND;
+ desc->state = INET_STATE_OPEN;
- if ((port = inet_address_port(&local)) == 0) {
+ port = inet_address_port(&local);
+ if (port == 0) {
SOCKLEN_T adrlen = sizeof(local);
+ sys_memzero((char *) &local, adrlen);
sock_name(desc->s, &local.sa, &adrlen);
port = inet_address_port(&local);
}
- port = sock_ntohs(port);
- put_int16(port, tbuf);
+ else if (port == -1) port = 0;
+ put_int16(sock_ntohs((Uint16) port), tbuf);
return ctl_reply(INET_REP_OK, tbuf, 2, rbuf, rsize);
}
@@ -8907,13 +9120,14 @@ static ErlDrvSSizeT tcp_inet_ctl(ErlDrvData e, unsigned int cmd,
case INET_AF_INET6:
domain = AF_INET6;
break;
-#else
- case INET_AF_INET6:
- return ctl_xerror("eafnosupport", rbuf, rsize);
+#endif
+#ifdef HAVE_SYS_UN_H
+ case INET_AF_LOCAL:
+ domain = AF_UNIX;
break;
#endif
default:
- return ctl_error(EINVAL, rbuf, rsize);
+ return ctl_xerror(str_eafnosupport, rbuf, rsize);
}
if (buf[1] != INET_TYPE_STREAM) return ctl_error(EINVAL, rbuf, rsize);
return inet_ctl_open(INETP(desc), domain, SOCK_STREAM, rbuf, rsize);
@@ -8933,13 +9147,14 @@ static ErlDrvSSizeT tcp_inet_ctl(ErlDrvData e, unsigned int cmd,
case INET_AF_INET6:
domain = AF_INET6;
break;
-#else
- case INET_AF_INET6:
- return ctl_xerror("eafnosupport", rbuf, rsize);
+#endif
+#ifdef HAVE_SYS_UN_H
+ case INET_AF_LOCAL:
+ domain = AF_UNIX;
break;
#endif
default:
- return ctl_error(EINVAL, rbuf, rsize);
+ return ctl_xerror(str_eafnosupport, rbuf, rsize);
}
if (buf[1] != INET_TYPE_STREAM) return ctl_error(EINVAL, rbuf, rsize);
@@ -8960,8 +9175,6 @@ static ErlDrvSSizeT tcp_inet_ctl(ErlDrvData e, unsigned int cmd,
return ctl_xerror(EXBADPORT, rbuf, rsize);
if (!IS_OPEN(INETP(desc)))
return ctl_xerror(EXBADPORT, rbuf, rsize);
- if (!IS_BOUND(INETP(desc)))
- return ctl_xerror(EXBADSEQ, rbuf, rsize);
if (len != 2)
return ctl_error(EINVAL, rbuf, rsize);
backlog = get_int16(buf);
@@ -8974,7 +9187,7 @@ static ErlDrvSSizeT tcp_inet_ctl(ErlDrvData e, unsigned int cmd,
case INET_REQ_CONNECT: { /* do async connect */
int code;
- char tbuf[2];
+ char tbuf[2], *xerror;
unsigned timeout;
DEBUGF(("tcp_inet_ctl(%ld): CONNECT\r\n", (long)desc->inet.port));
@@ -8984,8 +9197,6 @@ static ErlDrvSSizeT tcp_inet_ctl(ErlDrvData e, unsigned int cmd,
return ctl_xerror(EXBADPORT, rbuf, rsize);
if (IS_CONNECTED(INETP(desc)))
return ctl_error(EISCONN, rbuf, rsize);
- if (!IS_BOUND(INETP(desc)))
- return ctl_xerror(EXBADSEQ, rbuf, rsize);
if (IS_CONNECTING(INETP(desc)))
return ctl_error(EINVAL, rbuf, rsize);
if (len < 6)
@@ -8993,9 +9204,9 @@ static ErlDrvSSizeT tcp_inet_ctl(ErlDrvData e, unsigned int cmd,
timeout = get_int32(buf);
buf += 4;
len -= 4;
- if (inet_set_address(desc->inet.sfamily, &desc->inet.remote,
- buf, &len) == NULL)
- return ctl_error(EINVAL, rbuf, rsize);
+ if ((xerror = inet_set_faddress
+ (desc->inet.sfamily, &desc->inet.remote, &buf, &len)) != NULL)
+ return ctl_xerror(xerror, rbuf, rsize);
code = sock_connect(desc->inet.s,
(struct sockaddr*) &desc->inet.remote, len);
@@ -9086,6 +9297,7 @@ static ErlDrvSSizeT tcp_inet_ctl(ErlDrvData e, unsigned int cmd,
return ctl_reply(INET_REP_OK, tbuf, 2, rbuf, rsize);
} else {
n = sizeof(desc->inet.remote);
+ sys_memzero((char *) &remote, n);
s = sock_accept(desc->inet.s, (struct sockaddr*) &remote, &n);
if (s == INVALID_SOCKET) {
if (sock_errno() == ERRNO_BLOCK) {
@@ -9971,6 +10183,7 @@ static int tcp_inet_input(tcp_descriptor* desc, HANDLE event)
inet_async_op *this_op = desc->inet.opt;
len = sizeof(desc->inet.remote);
+ sys_memzero((char *) &remote, len);
s = sock_accept(desc->inet.s, (struct sockaddr*) &remote, &len);
if (s == INVALID_SOCKET && sock_errno() == ERRNO_BLOCK) {
/* Just try again, no real error, just a ghost trigger from poll,
@@ -10037,6 +10250,7 @@ static int tcp_inet_input(tcp_descriptor* desc, HANDLE event)
while (desc->inet.state == INET_STATE_MULTI_ACCEPTING) {
len = sizeof(desc->inet.remote);
+ sys_memzero((char *) &remote, len);
s = sock_accept(desc->inet.s, (struct sockaddr*) &remote, &len);
if (s == INVALID_SOCKET && sock_errno() == ERRNO_BLOCK) {
/* Just try again, no real error, keep the last return code */
@@ -10477,7 +10691,7 @@ static int tcp_inet_output(tcp_descriptor* desc, HANDLE event)
(struct sockaddr*) &desc->inet.remote, &sz);
if (IS_SOCKET_ERROR(code)) {
- desc->inet.state = INET_STATE_BOUND; /* restore state */
+ desc->inet.state = INET_STATE_OPEN; /* restore state */
ret = async_error(INETP(desc), sock_errno());
goto done;
}
@@ -10490,7 +10704,7 @@ static int tcp_inet_output(tcp_descriptor* desc, HANDLE event)
(void *)&error, &sz);
if ((code < 0) || error) {
- desc->inet.state = INET_STATE_BOUND; /* restore state */
+ desc->inet.state = INET_STATE_OPEN; /* restore state */
ret = async_error(INETP(desc), error);
goto done;
}
@@ -10772,13 +10986,12 @@ static ErlDrvSSizeT packet_inet_ctl(ErlDrvData e, unsigned int cmd, char* buf,
case INET_AF_INET: af = AF_INET; break;
#if defined(HAVE_IN6) && defined(AF_INET6)
case INET_AF_INET6: af = AF_INET6; break;
-#else
- case INET_AF_INET6:
- return ctl_xerror("eafnosupport", rbuf, rsize);
- break;
+#endif
+#ifdef HAVE_SYS_UN_H
+ case INET_AF_LOCAL: af = AF_UNIX; break;
#endif
default:
- return ctl_error(EINVAL, rbuf, rsize);
+ return ctl_xerror(str_eafnosupport, rbuf, rsize);
}
switch (buf[1]) {
case INET_TYPE_STREAM: type = SOCK_STREAM; break;
@@ -10822,13 +11035,12 @@ static ErlDrvSSizeT packet_inet_ctl(ErlDrvData e, unsigned int cmd, char* buf,
case INET_AF_INET: af = AF_INET; break;
#if defined(HAVE_IN6) && defined(AF_INET6)
case INET_AF_INET6: af = AF_INET6; break;
-#else
- case INET_AF_INET6:
- return ctl_xerror("eafnosupport", rbuf, rsize);
- break;
+#endif
+#ifdef HAVE_SYS_UN_H
+ case INET_AF_LOCAL: af = AF_UNIX; break;
#endif
default:
- return ctl_error(EINVAL, rbuf, rsize);
+ return ctl_xerror(str_eafnosupport, rbuf, rsize);
}
switch (buf[1]) {
case INET_TYPE_STREAM: type = SOCK_STREAM; break;
@@ -10893,11 +11105,10 @@ static ErlDrvSSizeT packet_inet_ctl(ErlDrvData e, unsigned int cmd, char* buf,
if (!IS_OPEN(desc))
return ctl_xerror(EXBADPORT, rbuf, rsize);
- if (!IS_BOUND(desc))
- return ctl_xerror(EXBADSEQ, rbuf, rsize);
#ifdef HAVE_SCTP
if (IS_SCTP(desc)) {
inet_address remote;
+ char *xerror;
if (IS_CONNECTING(desc))
return ctl_error(EINVAL, rbuf, rsize);
@@ -10909,8 +11120,9 @@ static ErlDrvSSizeT packet_inet_ctl(ErlDrvData e, unsigned int cmd, char* buf,
/* For SCTP, we do not set the peer's addr in desc->remote, as
multiple peers are possible: */
- if (inet_set_address(desc->sfamily, &remote, buf, &len) == NULL)
- return ctl_error(EINVAL, rbuf, rsize);
+ if ((xerror = inet_set_faddress
+ (desc->sfamily, &remote, &buf, &len)) != NULL)
+ return ctl_xerror(xerror, rbuf, rsize);
sock_select(desc, FD_CONNECT, 1);
code = sock_connect(desc->s, &remote.sa, len);
@@ -10946,12 +11158,13 @@ static ErlDrvSSizeT packet_inet_ctl(ErlDrvData e, unsigned int cmd, char* buf,
else if (len < 6)
return ctl_error(EINVAL, rbuf, rsize);
else {
+ char *xerror;
/* Ignore timeout */
buf += 4;
len -= 4;
- if (inet_set_address(desc->sfamily,
- &desc->remote, buf, &len) == NULL)
- return ctl_error(EINVAL, rbuf, rsize);
+ if ((xerror = inet_set_faddress
+ (desc->sfamily, &desc->remote, &buf, &len)) != NULL)
+ return ctl_xerror(xerror, rbuf, rsize);
code = sock_connect(desc->s,
(struct sockaddr*) &desc->remote, len);
@@ -10981,8 +11194,6 @@ static ErlDrvSSizeT packet_inet_ctl(ErlDrvData e, unsigned int cmd, char* buf,
return ctl_xerror(EXBADPORT, rbuf, rsize);
if (!IS_OPEN(desc))
return ctl_xerror(EXBADPORT, rbuf, rsize);
- if (!IS_BOUND(desc))
- return ctl_xerror(EXBADSEQ, rbuf, rsize);
if (len != 2)
return ctl_error(EINVAL, rbuf, rsize);
@@ -11017,11 +11228,13 @@ static ErlDrvSSizeT packet_inet_ctl(ErlDrvData e, unsigned int cmd, char* buf,
while (curr < buf+len)
{
+ char *xerror;
/* List item format: see "inet_set_faddress": */
ErlDrvSizeT alen = buf + len - curr;
- curr = inet_set_faddress(desc->sfamily, &addr, curr, &alen);
- if (curr == NULL)
- return ctl_error(EINVAL, rbuf, rsize);
+ xerror = inet_set_faddress
+ (desc->sfamily, &addr, &curr, &alen);
+ if (xerror != NULL)
+ return ctl_xerror(xerror, rbuf, rsize);
/* Invoke the call: */
if (p_sctp_bindx(desc->s, (struct sockaddr *)&addr, 1,
@@ -11029,7 +11242,7 @@ static ErlDrvSSizeT packet_inet_ctl(ErlDrvData e, unsigned int cmd, char* buf,
return ctl_error(sock_errno(), rbuf, rsize);
}
- desc->state = INET_STATE_BOUND;
+ desc->state = INET_STATE_OPEN;
return ctl_reply(INET_REP_OK, NULL, 0, rbuf, rsize);
}
@@ -11046,8 +11259,6 @@ static ErlDrvSSizeT packet_inet_ctl(ErlDrvData e, unsigned int cmd, char* buf,
return ctl_xerror(EXBADPORT, rbuf, rsize);
if (!IS_OPEN(desc))
return ctl_xerror(EXBADPORT, rbuf, rsize);
- if (!IS_BOUND(desc))
- return ctl_xerror(EXBADSEQ, rbuf, rsize);
if (! p_sctp_peeloff)
return ctl_error(ENOTSUP, rbuf, rsize);
@@ -11088,8 +11299,6 @@ static ErlDrvSSizeT packet_inet_ctl(ErlDrvData e, unsigned int cmd, char* buf,
/* INPUT: Timeout(4), Length(4) */
if (!IS_OPEN(desc))
return ctl_xerror(EXBADPORT, rbuf, rsize);
- if (!IS_BOUND(desc))
- return ctl_error(EINVAL, rbuf, rsize);
if (desc->active || (len != 8))
return ctl_error(EINVAL, rbuf, rsize);
timeout = get_int32(buf);
@@ -11130,12 +11339,12 @@ static void packet_inet_timeout(ErlDrvData e)
/* THIS IS A "send*" REQUEST; on the Erlang side: "port_command".
-** input should be: P1 P0 Address buffer .
+** input should be: Family Address buffer .
** For UDP, buffer (after Address) is just data to be sent.
** For SCTP, buffer contains a list representing 2 items:
** (1) 6 parms for sctp_sndrcvinfo, as in sctp_get_sendparams();
** (2) 0+ real data bytes.
-** There is no destination address -- SCTYP send is performed over
+** There is no destination address -- SCTP send is performed over
** an existing association, using "sctp_sndrcvinfo" specified.
*/
static void packet_inet_command(ErlDrvData e, char* buf, ErlDrvSizeT len)
@@ -11144,6 +11353,7 @@ static void packet_inet_command(ErlDrvData e, char* buf, ErlDrvSizeT len)
inet_descriptor* desc = INETP(udesc);
char* ptr = buf;
char* qtr;
+ char* xerror;
ErlDrvSizeT sz;
int code;
inet_address other;
@@ -11154,10 +11364,6 @@ static void packet_inet_command(ErlDrvData e, char* buf, ErlDrvSizeT len)
inet_reply_error(desc, EINVAL);
return;
}
- if (!IS_BOUND(desc)) {
- inet_reply_error(desc, EINVAL);
- return;
- }
#ifdef HAVE_SCTP
if (IS_SCTP(desc))
@@ -11201,6 +11407,7 @@ static void packet_inet_command(ErlDrvData e, char* buf, ErlDrvSizeT len)
VALGRIND_MAKE_MEM_DEFINED(mhdr.msg_control, mhdr.msg_controllen); /*suppress "uninitialised bytes"*/
mhdr.msg_flags = 0; /* Not used with "sendmsg" */
+ inet_output_count(desc, data_len);
/* Now do the actual sending. NB: "flags" in "sendmsg" itself are NOT
used: */
code = sock_sendmsg(desc->s, &mhdr, 0);
@@ -11210,9 +11417,10 @@ static void packet_inet_command(ErlDrvData e, char* buf, ErlDrvSizeT len)
/* UDP socket. Even if it is connected, there is an address prefix
here -- ignored for connected sockets: */
sz = len;
- qtr = inet_set_address(desc->sfamily, &other, ptr, &sz);
- if (qtr == NULL) {
- inet_reply_error(desc, EINVAL);
+ qtr = ptr;
+ xerror = inet_set_faddress(desc->sfamily, &other, &qtr, &sz);
+ if (xerror != NULL) {
+ inet_reply_error_am(desc, driver_mk_atom(xerror));
return;
}
len -= (qtr - ptr);
@@ -11288,6 +11496,8 @@ static int packet_inet_input(udp_descriptor* udesc, HANDLE event)
while(packet_count--) {
unsigned int len = sizeof(other);
+ sys_memzero((char *) &other, sizeof(other));
+
/* udesc->i_buf is only kept between SCTP fragments */
if (udesc->i_buf == NULL) {
udesc->i_bufsz = desc->bufsz + len;
@@ -11483,7 +11693,7 @@ static int packet_inet_output(udp_descriptor* udesc, HANDLE event)
(struct sockaddr*) &desc->remote, &sz);
if (IS_SOCKET_ERROR(code)) {
- desc->state = INET_STATE_BOUND; /* restore state */
+ desc->state = INET_STATE_OPEN; /* restore state */
ret = async_error(desc, sock_errno());
goto done;
}
@@ -11496,7 +11706,7 @@ static int packet_inet_output(udp_descriptor* udesc, HANDLE event)
(void *)&error, &sz);
if ((code < 0) || error) {
- desc->state = INET_STATE_BOUND; /* restore state */
+ desc->state = INET_STATE_OPEN; /* restore state */
ret = async_error(desc, error);
goto done;
}
@@ -11796,7 +12006,7 @@ void erts_sock_close(erts_sock_t socket)
int erts_sock_connect(erts_sock_t socket, byte *ip_addr, int len, Uint16 port)
{
SOCKET s = (SOCKET) socket;
- char buf[2 + 4];
+ char buf[2 + 4], *p;
ErlDrvSizeT blen = 6;
inet_address addr;
@@ -11806,12 +12016,12 @@ int erts_sock_connect(erts_sock_t socket, byte *ip_addr, int len, Uint16 port)
put_int16(port, buf);
memcpy((void *) (buf + 2), (void *) ip_addr, 4);
- if (!inet_set_address(AF_INET, &addr, buf, &blen))
+ p = buf;
+ if (inet_set_address(AF_INET, &addr, &p, &blen) != NULL)
return 0;
- if (IS_SOCKET_ERROR(sock_connect(s,
- (struct sockaddr *) &addr,
- sizeof(struct sockaddr_in))))
+ if (IS_SOCKET_ERROR
+ (sock_connect(s, (struct sockaddr *) &addr, blen)))
return 0;
return 1;
}
diff --git a/erts/emulator/hipe/hipe_amd64_asm.m4 b/erts/emulator/hipe/hipe_amd64_asm.m4
index 2c0fbbee2d..409fd0ef89 100644
--- a/erts/emulator/hipe/hipe_amd64_asm.m4
+++ b/erts/emulator/hipe/hipe_amd64_asm.m4
@@ -121,6 +121,22 @@ define(NSP,%rsp)dnl
/*
+ * Debugging macros
+ *
+ * Keeps track of whether context has been saved in the debug build, allowing us
+ * to detect when the garbage collector is called when it shouldn't.
+ */
+`#ifdef DEBUG
+# define SET_GC_UNSAFE \
+ movq $1, P_GCUNSAFE(P)
+# define SET_GC_SAFE \
+ movq $0, P_GCUNSAFE(P)
+#else
+# define SET_GC_UNSAFE
+# define SET_GC_SAFE
+#endif'
+
+/*
* Context switching macros.
*/
`#define SWITCH_C_TO_ERLANG_QUICK \
@@ -133,12 +149,14 @@ define(NSP,%rsp)dnl
`#define SAVE_CACHED_STATE \
SAVE_HP; \
- SAVE_FCALLS'
+ SAVE_FCALLS; \
+ SET_GC_SAFE'
`#define RESTORE_CACHED_STATE \
RESTORE_HP; \
RESTORE_HEAP_LIMIT; \
- RESTORE_FCALLS'
+ RESTORE_FCALLS; \
+ SET_GC_UNSAFE'
`#define SWITCH_C_TO_ERLANG \
RESTORE_CACHED_STATE; \
diff --git a/erts/emulator/hipe/hipe_amd64_bifs.m4 b/erts/emulator/hipe/hipe_amd64_bifs.m4
index 9cf3bf74fd..21739726bb 100644
--- a/erts/emulator/hipe/hipe_amd64_bifs.m4
+++ b/erts/emulator/hipe/hipe_amd64_bifs.m4
@@ -600,10 +600,11 @@ noproc_primop_interface_0(nbif_handle_fp_exception, erts_restore_fpu)
define(gc_bif_interface_0,`nofail_primop_interface_0($1, $2)')
/*
- * Implement gc_bif_interface_N as standard_bif_interface_N (N=1,2).
+ * Implement gc_bif_interface_N as standard_bif_interface_N (N=1,2,3).
*/
define(gc_bif_interface_1,`standard_bif_interface_1($1, $2)')
define(gc_bif_interface_2,`standard_bif_interface_2($1, $2)')
+define(gc_bif_interface_3,`standard_bif_interface_3($1, $2)')
/*
* Implement gc_nofail_primop_interface_1 as nofail_primop_interface_1.
diff --git a/erts/emulator/hipe/hipe_amd64_glue.S b/erts/emulator/hipe/hipe_amd64_glue.S
index b37ed3c68a..f3404888d5 100644
--- a/erts/emulator/hipe/hipe_amd64_glue.S
+++ b/erts/emulator/hipe/hipe_amd64_glue.S
@@ -94,6 +94,7 @@ ASYM(nbif_return):
.nosave_exit:
/* switch to C stack */
SWITCH_ERLANG_TO_C_QUICK
+ SET_GC_SAFE
/* restore C callee-save registers, drop frame, return */
movq (%rsp), %rbp # kills P
movq 8(%rsp), %rbx
@@ -398,6 +399,7 @@ nbif_4_simple_exception:
movl %eax, P_NARITY(P) # Note: narity is a 32-bit field
/* find and prepare to invoke the handler */
SWITCH_ERLANG_TO_C_QUICK # The cached state is clean and need not be saved.
+ SET_GC_SAFE
movq P, %rdi
call CSYM(hipe_handle_exception) # Note: hipe_handle_exception() conses
SWITCH_C_TO_ERLANG # %rsp updated by hipe_find_handler()
diff --git a/erts/emulator/hipe/hipe_arm_asm.m4 b/erts/emulator/hipe/hipe_arm_asm.m4
index ae9ec752bb..68a6faa70b 100644
--- a/erts/emulator/hipe/hipe_arm_asm.m4
+++ b/erts/emulator/hipe/hipe_arm_asm.m4
@@ -48,6 +48,24 @@ define(NR_ARG_REGS,3)dnl admissible values are 0 to 6, inclusive
`#define TEMP_LR r8'
/*
+ * Debugging macros
+ *
+ * Keeps track of whether context has been saved in the debug build, allowing us
+ * to detect when the garbage collector is called when it shouldn't.
+ */
+`#ifdef DEBUG
+# define SET_GC_UNSAFE(SCRATCH) \
+ mov SCRATCH, #1; \
+ str SCRATCH, [P, #P_GCUNSAFE]
+# define SET_GC_SAFE(SCRATCH) \
+ mov SCRATCH, #0; \
+ str SCRATCH, [P, #P_GCUNSAFE]
+#else
+# define SET_GC_UNSAFE(SCRATCH)
+# define SET_GC_SAFE(SCRATCH)
+#endif'
+
+/*
* Context switching macros.
*
* RESTORE_CONTEXT and RESTORE_CONTEXT_QUICK do not affect
@@ -59,12 +77,14 @@ define(NR_ARG_REGS,3)dnl admissible values are 0 to 6, inclusive
`#define RESTORE_CONTEXT_QUICK \
mov lr, TEMP_LR'
-`#define SAVE_CACHED_STATE \
- str HP, [P, #P_HP]; \
- str NSP, [P, #P_NSP]'
+`#define SAVE_CACHED_STATE \
+ str HP, [P, #P_HP]; \
+ str NSP, [P, #P_NSP]; \
+ SET_GC_SAFE(HP)'
-`#define RESTORE_CACHED_STATE \
- ldr HP, [P, #P_HP]; \
+`#define RESTORE_CACHED_STATE \
+ SET_GC_UNSAFE(HP); \
+ ldr HP, [P, #P_HP]; \
ldr NSP, [P, #P_NSP]'
`#define SAVE_CONTEXT_BIF \
@@ -75,12 +95,14 @@ define(NR_ARG_REGS,3)dnl admissible values are 0 to 6, inclusive
ldr HP, [P, #P_HP]'
`#define SAVE_CONTEXT_GC \
+ SET_GC_SAFE(TEMP_LR); \
mov TEMP_LR, lr; \
str lr, [P, #P_NRA]; \
str NSP, [P, #P_NSP]; \
str HP, [P, #P_HP]'
`#define RESTORE_CONTEXT_GC \
+ SET_GC_UNSAFE(HP); \
ldr HP, [P, #P_HP]'
/*
diff --git a/erts/emulator/hipe/hipe_arm_bifs.m4 b/erts/emulator/hipe/hipe_arm_bifs.m4
index d9c9952dbf..d7a2fec04a 100644
--- a/erts/emulator/hipe/hipe_arm_bifs.m4
+++ b/erts/emulator/hipe/hipe_arm_bifs.m4
@@ -198,8 +198,9 @@ $1:
* gc_bif_interface_0(nbif_name, cbif_name)
* gc_bif_interface_1(nbif_name, cbif_name)
* gc_bif_interface_2(nbif_name, cbif_name)
+ * gc_bif_interface_3(nbif_name, cbif_name)
*
- * Generate native interface for a BIF with 0-2 parameters and
+ * Generate native interface for a BIF with 0-3 parameters and
* standard failure mode.
* The BIF may do a GC.
*/
@@ -279,6 +280,36 @@ $1:
.type $1, %function
#endif')
+define(gc_bif_interface_3,
+`
+#ifndef HAVE_$1
+#`define' HAVE_$1
+ .global $1
+$1:
+ /* Set up C argument registers. */
+ mov r0, P
+ NBIF_ARG(r1,3,0)
+ NBIF_ARG(r2,3,1)
+ NBIF_ARG(r3,3,2)
+
+ /* Save caller-save registers and call the C function. */
+ SAVE_CONTEXT_GC
+ str r1, [r0, #P_ARG0] /* Store BIF__ARGS in def_arg_reg[] */
+ str r2, [r0, #P_ARG1]
+ str r3, [r0, #P_ARG2]
+ add r1, r0, #P_ARG0
+ CALL_BIF($2)
+ TEST_GOT_MBUF(3)
+
+ /* Restore registers. Check for exception. */
+ cmp r0, #THE_NON_VALUE
+ RESTORE_CONTEXT_GC
+ beq nbif_3_simple_exception
+ NBIF_RET(3)
+ .size $1, .-$1
+ .type $1, %function
+#endif')
+
/*
* gc_nofail_primop_interface_1(nbif_name, cbif_name)
*
diff --git a/erts/emulator/hipe/hipe_arm_glue.S b/erts/emulator/hipe/hipe_arm_glue.S
index 49ffa8b1d8..5b7f8ad52d 100644
--- a/erts/emulator/hipe/hipe_arm_glue.S
+++ b/erts/emulator/hipe/hipe_arm_glue.S
@@ -342,6 +342,7 @@ nbif_4_gc_after_bif:
str r1, [P, #P_NARITY]
str TEMP_LR, [P, #P_NRA]
str NSP, [P, #P_NSP]
+ SET_GC_SAFE(TEMP_LR)
mov TEMP_LR, lr
mov r3, #0 /* Pass 0 in arity */
mov r2, #0 /* Pass NULL in regs */
@@ -349,6 +350,7 @@ nbif_4_gc_after_bif:
mov r0, P
bl erts_gc_after_bif_call
mov lr, TEMP_LR
+ SET_GC_UNSAFE(TEMP_LR)
ldr TEMP_LR, [P, #P_NRA]
mov r1, #0
str r1, [P, #P_NARITY]
@@ -404,6 +406,7 @@ nbif_4_simple_exception:
str NSP, [P, #P_NSP]
str TEMP_LR, [P, #P_NRA]
str r1, [P, #P_NARITY]
+ SET_GC_SAFE(r0)
/* find and prepare to invoke the handler */
mov r0, P
bl hipe_handle_exception /* Note: hipe_handle_exception() conses */
@@ -423,6 +426,7 @@ nbif_4_simple_exception:
str NSP, [P, #P_NSP]
str r1, [P, #P_NARITY]
str TEMP_LR, [P, #P_NRA]
+ SET_GC_SAFE(NSP)
b .nosave_exit
/*
diff --git a/erts/emulator/hipe/hipe_bif0.c b/erts/emulator/hipe/hipe_bif0.c
index 4063cbf306..3336fded7a 100644
--- a/erts/emulator/hipe/hipe_bif0.c
+++ b/erts/emulator/hipe/hipe_bif0.c
@@ -418,6 +418,8 @@ BIF_RETTYPE hipe_bifs_enter_code_2(BIF_ALIST_2)
BIF_RET(make_tuple(hp));
}
+#define IS_POWER_OF_TWO(Val) (((Val) > 0) && (((Val) & ((Val)-1)) == 0))
+
/*
* Allocate memory for arbitrary non-Erlang data.
*/
@@ -427,16 +429,18 @@ BIF_RETTYPE hipe_bifs_alloc_data_2(BIF_ALIST_2)
void *block;
if (is_not_small(BIF_ARG_1) || is_not_small(BIF_ARG_2) ||
- (align = unsigned_val(BIF_ARG_1),
- align != sizeof(long) && align != sizeof(double)))
+ (align = unsigned_val(BIF_ARG_1), !IS_POWER_OF_TWO(align)))
BIF_ERROR(BIF_P, BADARG);
nrbytes = unsigned_val(BIF_ARG_2);
if (nrbytes == 0)
BIF_RET(make_small(0));
block = erts_alloc(ERTS_ALC_T_HIPE, nrbytes);
- if ((unsigned long)block & (align-1))
+ if ((unsigned long)block & (align-1)) {
fprintf(stderr, "%s: erts_alloc(%lu) returned %p which is not %lu-byte aligned\r\n",
__FUNCTION__, (unsigned long)nrbytes, block, (unsigned long)align);
+ erts_free(ERTS_ALC_T_HIPE, block);
+ BIF_ERROR(BIF_P, EXC_NOTSUP);
+ }
BIF_RET(address_to_term(block, BIF_P));
}
@@ -693,7 +697,7 @@ static struct nbif nbifs[BIF_SIZE] = {
#undef BIF_LIST
};
-#define NBIF_HASH(m,f,a) ((m)*(f)+(a))
+#define NBIF_HASH(m,f,a) (atom_val(m) ^ atom_val(f) ^ (a))
static Hash nbif_table;
static HashValue nbif_hash(struct nbif *x)
@@ -1059,7 +1063,7 @@ static inline void hipe_mfa_info_table_rwunlock(void)
erts_smp_rwmtx_rwunlock(&hipe_mfa_info_table.lock);
}
-#define HIPE_MFA_HASH(M,F,A) ((M) * (F) + (A))
+#define HIPE_MFA_HASH(M,F,A) (atom_val(M) ^ atom_val(F) ^ (A))
static struct hipe_mfa_info **hipe_mfa_info_table_alloc_bucket(unsigned int size)
{
@@ -1140,10 +1144,13 @@ static inline struct hipe_mfa_info *hipe_mfa_info_table_get_locked(Eterm m, Eter
h = HIPE_MFA_HASH(m, f, arity);
i = h & hipe_mfa_info_table.mask;
p = hipe_mfa_info_table.bucket[i];
- for (; p; p = p->bucket.next)
- /* XXX: do we want to compare p->bucket.hvalue as well? */
- if (p->m == m && p->f == f && p->a == arity)
- return p;
+ for (; p; p = p->bucket.next) {
+ if (p->bucket.hvalue == h) {
+ if (p->m == m && p->f == f && p->a == arity)
+ return p;
+ }
+ else ASSERT(!(p->m == m && p->f == f && p->a == arity));
+ }
return NULL;
}
@@ -1167,10 +1174,13 @@ static struct hipe_mfa_info *hipe_mfa_info_table_put_rwlocked(Eterm m, Eterm f,
h = HIPE_MFA_HASH(m, f, arity);
i = h & hipe_mfa_info_table.mask;
p = hipe_mfa_info_table.bucket[i];
- for (; p; p = p->bucket.next)
- /* XXX: do we want to compare p->bucket.hvalue as well? */
- if (p->m == m && p->f == f && p->a == arity)
- return p;
+ for (; p; p = p->bucket.next) {
+ if (p->bucket.hvalue == h) {
+ if (p->m == m && p->f == f && p->a == arity)
+ return p;
+ }
+ else ASSERT(!(p->m == m && p->f == f && p->a == arity));
+ }
p = hipe_mfa_info_table_alloc(m, f, arity);
p->bucket.hvalue = h;
p->bucket.next = hipe_mfa_info_table.bucket[i];
diff --git a/erts/emulator/hipe/hipe_bif1.c b/erts/emulator/hipe/hipe_bif1.c
index 08adbd474e..5e127755c6 100644
--- a/erts/emulator/hipe/hipe_bif1.c
+++ b/erts/emulator/hipe/hipe_bif1.c
@@ -124,757 +124,3 @@ BIF_RETTYPE hipe_bifs_trap_count_clear_0(BIF_ALIST_0)
hipe_trap_count = 0;
BIF_RET(make_small(count));
}
-
-/*****************************************************************************
- * BIFs for benchmarking. These only do useful things if
- * __BENCHMARK__ is defined in beam/benchmark.h. For documentation
- * about how to add new counters or maintain the existing counters,
- * see benchmark.h.
- *
- * If benchmarking is not enabled all BIFs will return false. If the
- * required benchmark feature is not enabled, the counter will remain
- * zero.
- *
- * process_info/0 -> { Number of live processes,
- * Processes spawned in total }
- *
- * Live processes are increased when a new process is created, and
- * decreased when a process dies. Processes spawned is increased
- * when a process is created.
- *
- *
- * process_info_clear/0 -> true
- *
- * Will reset the processes spawned-counters to zero. If this is
- * done at some improper time, live processes may become a negative
- * value. This is not a problem in itself, just as long as you know
- * about it.
- *
- *
- * message_info/0 -> { Messages sent,
- * Messages copied,
- * Ego messages (sender = receiver),
- * Words sent,
- * Words copied,
- * Words preallocated }
- *
- * Counting the words sent in a shared heap system will affect
- * runtime performance since it means that we have to calculate the
- * size of the mesage. With private heaps, this is done anyway and
- * will not affect performance.
- *
- *
- * message_info_clear/0 -> true
- *
- * Reset the message counters to zero.
- *
- *
- * message_sizes/0 -> true
- *
- * Displays a text-mode bar diagram with message sizes. There are no
- * guaranties that this is printed in a way the Erlang system is
- * supposed to print things.
- *
- *
- * gc_info/0 -> { Minor collections,
- * Major collections,
- * Used heap,
- * Allocated heap,
- * Max used heap,
- * Max allocated heap }
- *
- * Information about private heap garbage collections. Number of
- * minor and major collections, how much heap is used and allocated
- * and how much heap has been in use and allocated at most since the
- * counters were reset.
- *
- *
- * shared_gc_info/0 -> { Minor collections of the shared heap,
- * Major collections of the shared heap,
- * Used shared heap,
- * Allocated shared heap,
- * Max used shared heap,
- * Max allocated shared heap }
- *
- * The same as above, but for the shared heap / message area. Note,
- * that in a shared heap system the max used heap and max allocated
- * heap are mostly the same, since the heap allways is filled before
- * a garbage collection, and most garbage collections do not enlarge
- * the heap. The private heap numbers are much more interesting.
- *
- *
- * incremental_gc_info/0 -> { Complete minor GC cycles,
- * Complete major GC cycles,
- * Minor GC stages,
- * Major GC stages }
- *
- *
- * gc_info_clear/0 -> true
- *
- * Reset counters for both private and shared garbage collection.
- *
- *
- * BM Timers
- * ---------
- *
- * All timers returns tuples of the kind: { Minutes, Seconds, Milliseconds }
- * except for the max times in garbage collection where times are normally
- * small. The tuple is therefor: { Seconds, Milliseconds, Microseconds }
- *
- * system_timer/0 -> Mutator time
- *
- * This timer is not a real-time clock, it only runs when a process
- * is scheduled to run. You can not find out the accual time a
- * program has taken to run using this timer.
- *
- *
- * system_timer_clear/0 -> true
- *
- * Reset system timer to zero.
- *
- *
- * send_timer/0 -> { Send time,
- * Copy time,
- * Size time }
- *
- * Time spent in sending messages. The copy time and size time are
- * only active if the copying is needed in send. Copying of data
- * into ETS-tables etc is not timed with this timer.
- *
- *
- * send_timer_clear/0 -> true
- *
- * Reset send timers to zero.
- *
- *
- * gc_timer/0 -> { Time in minor collection,
- * Time in major collection,
- * Max time in minor collection (�s),
- * Max time in major collection (�s) }
- *
- * Total time spent in garbage collection of the private heaps. The
- * max times are for one separate collection.
- *
- *
- * shared_gc_timer/0 -> { Time in minor collection,
- * Time in major collection,
- * Max time in minor collection (�s),
- * Max time in major collection (�s) }
- *
- * Total time spent in garbage collection of the shared heap /
- * message area. The max times are for one separate collection.
- *
- *
- * gc_timer_clear/0 -> true
- *
- * Reset private and shared garbage collection timers to zero. Note,
- * that the max-times are also reset.
- *
- *
- * misc_timer/0 -> { Misc 0, Misc 1, Misc 2 }
- *
- * Timers for debug purposes. In a normal system, these timers are
- * never used. Add these timers at places where you want to time
- * something not covered here. Use BM_SWAP_TIMER(from,to) to start
- * one of the misc timers.
- *
- * ... code timed by the system timer ...
- * BM_SWAP_TIMER(system,misc1);
- * ... code we want to time ...
- * BM_SWAP_TIMER(misc1,system);
- * ... back on system time ...
- *
- *
- * misc_timer_clear/0 -> true
- *
- * Reset misc timers to zero.
- */
-
-BIF_RETTYPE hipe_bifs_process_info_0(BIF_ALIST_0)
-{
-#ifdef __BENCHMARK__
-#ifndef BM_COUNTERS
- Uint processes_busy = 0;
- Uint processes_spawned = 0;
-#endif
- Eterm *hp;
-
- hp = HAlloc(BIF_P, 3);
- BIF_RET(TUPLE2(hp,
- make_small(processes_busy),
- make_small(processes_spawned)));
-#else
- BIF_RET(am_false);
-#endif
-}
-
-BIF_RETTYPE hipe_bifs_process_info_clear_0(BIF_ALIST_0)
-{
-#ifdef __BENCHMARK__
-#ifdef BM_COUNTERS
- processes_spawned = 0;
-#endif
- BIF_RET(am_true);
-#else
- BIF_RET(am_false);
-#endif
-}
-
-BIF_RETTYPE hipe_bifs_message_info_0(BIF_ALIST_0)
-{
-#ifdef __BENCHMARK__
- Eterm *hp;
-#ifndef BM_COUNTERS
- unsigned long messages_sent = 0;
- unsigned long messages_copied = 0;
- unsigned long messages_ego = 0;
-#endif
-#ifndef BM_MESSAGE_SIZES
- unsigned long words_sent = 0;
- unsigned long words_copied = 0;
- unsigned long words_prealloc = 0;
-#endif
-
- hp = HAlloc(BIF_P, 7);
- BIF_RET(TUPLE6(hp,
- make_small(messages_sent),
- make_small(messages_copied),
- make_small(messages_ego),
- make_small(words_sent),
- make_small(words_copied),
- make_small(words_prealloc)));
-#else
- BIF_RET(am_false);
-#endif
-}
-
-BIF_RETTYPE hipe_bifs_message_info_clear_0(BIF_ALIST_0)
-{
-#ifdef __BENCHMARK__
-#ifdef BM_COUNTERS
- messages_sent = 0;
- messages_copied = 0;
- messages_ego = 0;
-#endif
-#ifdef BM_MESSAGE_SIZES
- words_sent = 0;
- words_copied = 0;
- words_prealloc = 0;
- {
- int i;
- for (i = 0; i < 1000; i++)
- message_sizes[i] = 0;
- }
-#endif
- BIF_RET(am_true);
-#else
- BIF_RET(am_false);
-#endif
-}
-
-BIF_RETTYPE hipe_bifs_message_sizes_0(BIF_ALIST_0)
-{
-#ifdef BM_MESSAGE_SIZES
- int i, j, max = 0;
- int tmp[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
-
- for (i = 0; i < 65; i++) {
- tmp[0] += message_sizes[i];
- if (tmp[0] > max)
- max = tmp[0];
- }
- for (i = 65; i < 999; i++) {
- tmp[i / 100 + 1] += message_sizes[i];
- if (tmp[i / 100 + 1] > max)
- max = tmp[i / 100 + 1];
- }
- tmp[11] = message_sizes[999];
- if (tmp[11] > max)
- max = tmp[11];
- for (i = -1; i < 11; i++) {
- int num = (tmp[i + 1] * 50) / max;
- if (i == -1)
- printf("\n\r 0 - 64: (%6d) |", tmp[0]);
- else if (i == 0)
- printf("\n\r 65 - 99: (%6d) |", tmp[1]);
- else if (i == 10)
- printf("\n\r >= 1000: (%6d) |", tmp[11]);
- else
- printf("\n\r%3d - %3d: (%6d) |", i * 100, i * 100 + 99,
- tmp[i + 1]);
-
- for (j = 0; j < num; j++)
- printf(".");
- }
- printf("\n\r");
-
- BIF_RET(am_true);
-#else
- BIF_RET(am_false);
-#endif
-}
-
-BIF_RETTYPE hipe_bifs_gc_info_0(BIF_ALIST_0)
-{
-#ifdef __BENCHMARK__
-#ifndef BM_COUNTERS
- Uint minor_gc = 0;
- Uint major_gc = 0;
-#endif
-#ifndef BM_HEAP_SIZES
- Uint max_used_heap = 0;
- Uint max_allocated_heap = 0;
-#endif
- Eterm *hp;
- Uint used_heap = (BIF_P->htop - BIF_P->heap) +
- (OLD_HTOP(BIF_P) - OLD_HEAP(BIF_P)) +
- MBUF_SIZE(BIF_P);
-
- Uint alloc_heap = (BIF_P->hend - BIF_P->heap) +
- (OLD_HEND(BIF_P) - OLD_HEAP(BIF_P)) +
- MBUF_SIZE(BIF_P);
-
- hp = HAlloc(BIF_P, 7);
- BIF_RET(TUPLE6(hp,
- make_small((Uint)minor_gc),
- make_small((Uint)major_gc),
- make_small((Uint)used_heap),
- make_small((Uint)alloc_heap),
- make_small(max_used_heap),
- make_small(max_allocated_heap)));
-#else
- BIF_RET(am_false);
-#endif
-}
-
-BIF_RETTYPE hipe_bifs_shared_gc_info_0(BIF_ALIST_0)
-{
-#ifdef __BENCHMARK__
-#if !(defined(BM_COUNTERS))
- Uint minor_global_gc = 0;
- Uint major_global_gc = 0;
-#endif
-#ifndef BM_HEAP_SIZES
- Uint max_used_global_heap = 0;
- Uint max_allocated_global_heap = 0;
-#endif
- Eterm *hp;
-
- Uint tmp_used_heap = 0;
- Uint tmp_allocated_heap = 0;
-
- hp = HAlloc(BIF_P, 7);
- BIF_RET(TUPLE6(hp,
- make_small((uint)minor_global_gc),
- make_small((uint)major_global_gc),
- make_small(tmp_used_heap),
- make_small(tmp_allocated_heap),
- make_small(max_used_global_heap),
- make_small(max_allocated_global_heap)));
-#else
- BIF_RET(am_false);
-#endif
-}
-
-BIF_RETTYPE hipe_bifs_incremental_gc_info_0(BIF_ALIST_0)
-{
-#ifdef __BENCHMARK__
-#if !defined(BM_COUNTERS)
- Uint minor_gc_cycles = 0;
- Uint major_gc_cycles = 0;
- Uint minor_gc_stages = 0;
- Uint major_gc_stages = 0;
-#endif
- Eterm *hp;
-
- hp = HAlloc(BIF_P, 5);
- BIF_RET(TUPLE4(hp,
- make_small(minor_gc_cycles),
- make_small(major_gc_cycles),
- make_small(minor_gc_stages),
- make_small(major_gc_stages)));
-#else
- BIF_RET(am_false);
-#endif
-}
-
-BIF_RETTYPE hipe_bifs_gc_info_clear_0(BIF_ALIST_0)
-{
-#ifdef __BENCHMARK__
-
-#ifdef BM_COUNTERS
- minor_gc = 0;
- major_gc = 0;
-#endif
-
-#ifdef BM_HEAP_SIZES
- max_used_heap = 0;
- max_allocated_heap = 0;
- max_used_global_heap = 0;
- max_allocated_global_heap = 0;
-#endif
-
- BIF_RET(am_true);
-#else
- BIF_RET(am_false);
-#endif
-}
-
-BIF_RETTYPE hipe_bifs_pause_times_0(BIF_ALIST_0)
-{
-#ifdef BM_TIMERS
- int i;
- int total_time = 0, n = 0;
- int left = 0, right = 0, mid = 0;
-
- printf("Pause times in minor collection:\r\n");
- for (i = 0; i < MAX_PAUSE_TIME; i++) {
- if (pause_times[i] > 0) {
- printf("%d: %ld\r\n", i, pause_times[i]);
- total_time += pause_times[i] * i;
- n += pause_times[i];
-
- if (i > mid)
- right += pause_times[i];
-
- while (right > left) {
- left += pause_times[mid++];
- right -= pause_times[mid];
- }
- }
- }
-
- printf("Number of collections: %d\r\n", n);
- printf("Total collection time: %d\r\n", total_time);
- if (n > 0)
- printf("Mean pause time: %d\r\n", total_time / n);
-
- printf("Geometrical mean: %d\r\n", mid);
-
- total_time = 0; n = 0;
- left = 0; right = 0; mid = 0;
- printf("Pause times in major collection:\r\n");
- for (i = 0; i < MAX_PAUSE_TIME; i++) {
- if (pause_times_old[i] > 0) {
- printf("%d: %ld\r\n", i, pause_times_old[i]);
- total_time += pause_times_old[i] * i;
- n += pause_times_old[i];
- }
- }
-
- printf("Number of collections: %d\r\n", n);
- printf("Total collection time: %d\r\n", total_time);
- if (n > 0)
- printf("Mean pause time: %d\r\n", total_time / n);
-
- BIF_RET(am_true);
-#else
- BIF_RET(am_false);
-#endif
-}
-
-/* XXX: these macros have free variables */
-#ifdef BM_TIMERS
-#define MAKE_TIME(_timer_) { \
- BM_TIMER_T tmp = _timer_##_time / 1000000; \
- milli = tmp % 1000; \
- tmp /= 1000; \
- sec = tmp % 60; \
- min = tmp / 60; }
-
-#define MAKE_MICRO_TIME(_timer_) { \
- BM_TIMER_T tmp = _timer_##_time / 1000; \
- micro = tmp % 1000; \
- tmp /= 1000; \
- milli = tmp % 1000; \
- sec = tmp / 1000; }
-
-#else
-#define MAKE_TIME(_timer_)
-#define MAKE_MICRO_TIME(_timer_)
-#endif
-
-BIF_RETTYPE hipe_bifs_system_timer_0(BIF_ALIST_0)
-{
-#ifdef __BENCHMARK__
- uint min = 0;
- uint sec = 0;
- uint milli = 0;
- Eterm *hp;
-
- hp = HAlloc(BIF_P, 4);
- MAKE_TIME(system);
- BIF_RET(TUPLE3(hp,
- make_small(min),
- make_small(sec),
- make_small(milli)));
-#else
- BIF_RET(am_false);
-#endif
-}
-
-BIF_RETTYPE hipe_bifs_system_timer_clear_0(BIF_ALIST_0)
-{
-#ifdef BM_TIMERS
- system_time = 0;
- BIF_RET(am_true);
-#else
- BIF_RET(am_false);
-#endif
-}
-
-BIF_RETTYPE hipe_bifs_send_timer_0(BIF_ALIST_0)
-{
-#ifdef __BENCHMARK__
- uint min = 0;
- uint sec = 0;
- uint milli = 0;
- Eterm *hp;
- Eterm sendtime, copytime, sizetime;
-
- hp = HAlloc(BIF_P, 4 * 4);
-
- MAKE_TIME(send);
- sendtime = TUPLE3(hp,
- make_small(min),
- make_small(sec),
- make_small(milli));
- hp += 4;
-
- MAKE_TIME(copy);
- copytime = TUPLE3(hp,
- make_small(min),
- make_small(sec),
- make_small(milli));
- hp += 4;
-
- MAKE_TIME(size);
- sizetime = TUPLE3(hp,
- make_small(min),
- make_small(sec),
- make_small(milli));
- hp += 4;
- BIF_RET(TUPLE3(hp, sendtime, copytime, sizetime));
-#else
- BIF_RET(am_false);
-#endif
-}
-
-BIF_RETTYPE hipe_bifs_send_timer_clear_0(BIF_ALIST_0)
-{
-#ifdef BM_TIMERS
- send_time = 0;
- copy_time = 0;
- size_time = 0;
- BIF_RET(am_true);
-#else
- BIF_RET(am_false);
-#endif
-}
-
-BIF_RETTYPE hipe_bifs_gc_timer_0(BIF_ALIST_0)
-{
-#ifdef __BENCHMARK__
- Eterm *hp;
- uint min = 0;
- uint sec = 0;
- uint milli = 0;
- uint micro = 0;
- Eterm minor, major, max_min, max_maj;
-
- hp = HAlloc(BIF_P, 4 * 4 + 5);
-
- MAKE_TIME(minor_gc);
- minor = TUPLE3(hp,
- make_small(min),
- make_small(sec),
- make_small(milli));
- hp += 4;
-
- MAKE_TIME(major_gc);
- major = TUPLE3(hp,
- make_small(min),
- make_small(sec),
- make_small(milli));
- hp += 4;
-
- MAKE_MICRO_TIME(max_minor);
- max_min = TUPLE3(hp,
- make_small(sec),
- make_small(milli),
- make_small(micro));
- hp += 4;
-
- MAKE_MICRO_TIME(max_major);
- max_maj = TUPLE3(hp,
- make_small(sec),
- make_small(milli),
- make_small(micro));
- hp += 4;
-
- BIF_RET(TUPLE4(hp, minor, major, max_min, max_maj));
-#else
- BIF_RET(am_false);
-#endif
-}
-
-BIF_RETTYPE hipe_bifs_shared_gc_timer_0(BIF_ALIST_0)
-{
-#ifdef __BENCHMARK__
- Eterm *hp;
- uint min = 0;
- uint sec = 0;
- uint milli = 0;
- uint micro = 0;
- Eterm minor, major, max_min, max_maj;
-
- hp = HAlloc(BIF_P, 4 * 4 + 5);
-
- MAKE_TIME(minor_global_gc);
- minor = TUPLE3(hp,
- make_small(min),
- make_small(sec),
- make_small(milli));
- hp += 4;
-
- MAKE_TIME(major_global_gc);
- major = TUPLE3(hp,
- make_small(min),
- make_small(sec),
- make_small(milli));
- hp += 4;
-
- MAKE_MICRO_TIME(max_global_minor);
- max_min = TUPLE3(hp,
- make_small(sec),
- make_small(milli),
- make_small(micro));
- hp += 4;
-
- MAKE_MICRO_TIME(max_global_major);
- max_maj = TUPLE3(hp,
- make_small(sec),
- make_small(milli),
- make_small(micro));
- hp += 4;
-
- BIF_RET(TUPLE4(hp, minor, major, max_min, max_maj));
-#else
- BIF_RET(am_false);
-#endif
-}
-
-BIF_RETTYPE hipe_bifs_gc_timer_clear_0(BIF_ALIST_0)
-{
-#ifdef BM_TIMERS
- minor_gc_time = 0;
- major_gc_time = 0;
- max_minor_time = 0;
- max_major_time = 0;
- minor_global_gc_time = 0;
- major_global_gc_time = 0;
- max_global_minor_time = 0;
- max_global_major_time = 0;
- BIF_RET(am_true);
-#else
- BIF_RET(am_false);
-#endif
-}
-
-BIF_RETTYPE hipe_bifs_misc_timer_0(BIF_ALIST_0)
-{
-#ifdef __BENCHMARK__
- uint min = 0;
- uint sec = 0;
- uint milli = 0;
- Eterm *hp;
- Eterm misctime1, misctime2, misctime3;
-
- hp = HAlloc(BIF_P, 4 * 4);
-
- MAKE_TIME(misc0);
- misctime1 = TUPLE3(hp,
- make_small(min),
- make_small(sec),
- make_small(milli));
- hp += 4;
-
- MAKE_TIME(misc1);
- misctime2 = TUPLE3(hp,
- make_small(min),
- make_small(sec),
- make_small(milli));
- hp += 4;
-
- MAKE_TIME(misc2);
- misctime3 = TUPLE3(hp,
- make_small(min),
- make_small(sec),
- make_small(milli));
- hp += 4;
- BIF_RET(TUPLE3(hp, misctime1, misctime2, misctime3));
-#else
- BIF_RET(am_false);
-#endif
-}
-
-BIF_RETTYPE hipe_bifs_misc_timer_clear_0(BIF_ALIST_0)
-{
-#ifdef BM_TIMERS
- misc0_time = 0;
- misc1_time = 0;
- misc2_time = 0;
- BIF_RET(am_true);
-#else
- BIF_RET(am_false);
-#endif
-}
-
-#undef MAKE_TIME
-#undef MAKE_MICRO_TIME
-
-/*
- * HiPE hrvtime().
- * These implementations are currently available:
- * + The fallback, which is the same as {X,_} = runtime(statistics).
- */
-
-static double fallback_get_hrvtime(void)
-{
- unsigned long ms_user;
-
- elapsed_time_both(&ms_user, NULL, NULL, NULL);
- return (double)ms_user;
-}
-
-/*
- * Fallback, if nothing better exists.
- * This is the same as {X,_} = statistics(runtime), which uses
- * times(2) on Unix systems.
- */
-
-#define hrvtime_is_started() 1
-#define start_hrvtime() do{}while(0)
-#define stop_hrvtime() do{}while(0)
-#define get_hrvtime() fallback_get_hrvtime()
-
-BIF_RETTYPE hipe_bifs_get_hrvtime_0(BIF_ALIST_0)
-{
- Eterm *hp;
- Eterm res;
- FloatDef f;
-
- if (!hrvtime_is_started())
- start_hrvtime();
- f.fd = get_hrvtime();
- hp = HAlloc(BIF_P, FLOAT_SIZE_OBJECT);
- res = make_float(hp);
- PUT_DOUBLE(f, hp);
- BIF_RET(res);
-}
-
-BIF_RETTYPE hipe_bifs_stop_hrvtime_0(BIF_ALIST_0)
-{
- stop_hrvtime();
- BIF_RET(am_true);
-}
diff --git a/erts/emulator/hipe/hipe_bif1.tab b/erts/emulator/hipe/hipe_bif1.tab
index c5b452f199..4be0ad0e9c 100644
--- a/erts/emulator/hipe/hipe_bif1.tab
+++ b/erts/emulator/hipe/hipe_bif1.tab
@@ -27,24 +27,3 @@ bif hipe_bifs:call_count_get/1
bif hipe_bifs:call_count_clear/1
bif hipe_bifs:trap_count_get/0
bif hipe_bifs:trap_count_clear/0
-bif hipe_bifs:process_info/0
-bif hipe_bifs:process_info_clear/0
-bif hipe_bifs:message_info/0
-bif hipe_bifs:message_info_clear/0
-bif hipe_bifs:message_sizes/0
-bif hipe_bifs:gc_info/0
-bif hipe_bifs:shared_gc_info/0
-bif hipe_bifs:incremental_gc_info/0
-bif hipe_bifs:gc_info_clear/0
-bif hipe_bifs:pause_times/0
-bif hipe_bifs:system_timer/0
-bif hipe_bifs:system_timer_clear/0
-bif hipe_bifs:send_timer/0
-bif hipe_bifs:send_timer_clear/0
-bif hipe_bifs:gc_timer/0
-bif hipe_bifs:shared_gc_timer/0
-bif hipe_bifs:gc_timer_clear/0
-bif hipe_bifs:misc_timer/0
-bif hipe_bifs:misc_timer_clear/0
-bif hipe_bifs:get_hrvtime/0
-bif hipe_bifs:stop_hrvtime/0
diff --git a/erts/emulator/hipe/hipe_bif_list.m4 b/erts/emulator/hipe/hipe_bif_list.m4
index 29095a5389..dcf3447af9 100644
--- a/erts/emulator/hipe/hipe_bif_list.m4
+++ b/erts/emulator/hipe/hipe_bif_list.m4
@@ -96,6 +96,7 @@
* gc_bif_interface_0(nbif_name, cbif_name)
* gc_bif_interface_1(nbif_name, cbif_name)
* gc_bif_interface_2(nbif_name, cbif_name)
+ * gc_bif_interface_3(nbif_name, cbif_name)
*
* A BIF which may do a GC or walk the native stack.
* May read NSP, NSP_LIMIT, NRA, HP, HP_LIMIT, and FCALLS.
@@ -263,32 +264,34 @@ noproc_primop_interface_1(nbif_atomic_inc, hipe_atomic_inc)
',)dnl
/*
- * Standard BIFs.
- * BIF_LIST(ModuleAtom,FunctionAtom,Arity,CFun,Index)
+ * BIFs that disable GC while trapping are called via a wrapper
+ * to reserve stack space for the "trap frame".
+ * They occasionally need to call the garbage collector in order to make room
+ * for the trap frame on the BEAM stack.
*/
+gc_bif_interface_1(nbif_term_to_binary_1, hipe_wrapper_term_to_binary_1)
+gc_bif_interface_2(nbif_term_to_binary_2, hipe_wrapper_term_to_binary_2)
+gc_bif_interface_1(nbif_binary_to_term_1, hipe_wrapper_binary_to_term_1)
+gc_bif_interface_2(nbif_binary_to_term_2, hipe_wrapper_binary_to_term_2)
+gc_bif_interface_1(nbif_binary_to_list_1, hipe_wrapper_binary_to_list_1)
+gc_bif_interface_3(nbif_binary_to_list_3, hipe_wrapper_binary_to_list_3)
+gc_bif_interface_1(nbif_bitstring_to_list_1, hipe_wrapper_bitstring_to_list_1)
+gc_bif_interface_1(nbif_list_to_binary_1, hipe_wrapper_list_to_binary_1)
+gc_bif_interface_1(nbif_iolist_to_binary_1, hipe_wrapper_iolist_to_binary_1)
+gc_bif_interface_1(nbif_binary_list_to_bin_1, hipe_wrapper_binary_list_to_bin_1)
+gc_bif_interface_1(nbif_list_to_bitstring_1, hipe_wrapper_list_to_bitstring_1)
+gc_bif_interface_2(nbif_send_2, hipe_wrapper_send_2)
+gc_bif_interface_3(nbif_send_3, hipe_wrapper_send_3)
+gc_bif_interface_2(nbif_ebif_bang_2, hipe_wrapper_ebif_bang_2)
+gc_bif_interface_2(nbif_maps_merge_2, hipe_wrapper_maps_merge_2)
-/* BIFs that disable GC while trapping are called via a wrapper
- * to reserve stack space for the "trap frame".
+
+/*
+ * Standard BIFs.
+ * BIF_LIST(ModuleAtom,FunctionAtom,Arity,CFun,Index)
*/
-define(CFUN,`ifelse(
-$1, term_to_binary_1, hipe_wrapper_$1,
-$1, term_to_binary_2, hipe_wrapper_$1,
-$1, binary_to_term_1, hipe_wrapper_$1,
-$1, binary_to_term_2, hipe_wrapper_$1,
-$1, binary_to_list_1, hipe_wrapper_$1,
-$1, binary_to_list_3, hipe_wrapper_$1,
-$1, bitstring_to_list_1, hipe_wrapper_$1,
-$1, list_to_binary_1, hipe_wrapper_$1,
-$1, iolist_to_binary_1, hipe_wrapper_$1,
-$1, binary_list_to_bin_1, hipe_wrapper_$1,
-$1, list_to_bitstring_1, hipe_wrapper_$1,
-$1, send_2, hipe_wrapper_$1,
-$1, send_3, hipe_wrapper_$1,
-$1, ebif_bang_2, hipe_wrapper_$1,
-$1, maps_merge_2, hipe_wrapper_$1,
-$1)')
-define(BIF_LIST,`standard_bif_interface_$3(nbif_$4, CFUN($4))')
+define(BIF_LIST,`standard_bif_interface_$3(nbif_$4, $4)')
include(TARGET/`erl_bif_list.h')
/*
diff --git a/erts/emulator/hipe/hipe_gc.c b/erts/emulator/hipe/hipe_gc.c
index d0619a0609..68c65dea27 100644
--- a/erts/emulator/hipe/hipe_gc.c
+++ b/erts/emulator/hipe/hipe_gc.c
@@ -46,6 +46,8 @@ Eterm *fullsweep_nstack(Process *p, Eterm *n_htop)
/* arch-specific nstack walk state */
struct nstack_walk_state walk_state;
+ ASSERT(!p->hipe.gc_is_unsafe);
+
if (!p->hipe.nstack) {
ASSERT(!p->hipe.nsp && !p->hipe.nstend);
return n_htop;
@@ -136,6 +138,8 @@ void gensweep_nstack(Process *p, Eterm **ptr_old_htop, Eterm **ptr_n_htop)
char *mature;
Uint mature_size;
+ ASSERT(!p->hipe.gc_is_unsafe);
+
if (!p->hipe.nstack) {
ASSERT(!p->hipe.nsp && !p->hipe.nstend);
return;
@@ -233,3 +237,122 @@ void gensweep_nstack(Process *p, Eterm **ptr_old_htop, Eterm **ptr_n_htop)
}
abort();
}
+
+Eterm *sweep_literals_nstack(Process *p, Eterm *old_htop, char *area,
+ Uint area_size)
+{
+ /* known nstack walk state */
+ Eterm *nsp;
+ Eterm *nsp_end;
+ const struct sdesc *sdesc;
+ /* arch-specific nstack walk state */
+ struct nstack_walk_state walk_state;
+
+ ASSERT(!p->hipe.gc_is_unsafe);
+
+ if (!p->hipe.nstack) {
+ ASSERT(!p->hipe.nsp && !p->hipe.nstend);
+ return old_htop;
+ }
+ if (!nstack_walk_init_check(p))
+ return old_htop;
+
+ ASSERT(p->hipe.nsp && p->hipe.nstend);
+ nsp = nstack_walk_nsp_begin(p);
+ nsp_end = nstack_walk_nsp_end(p);
+ sdesc = nstack_walk_init_sdesc_ignore_trap(p, &walk_state);
+
+ while (!nstack_walk_nsp_reached_end(nsp, nsp_end)) {
+ unsigned long ra;
+ unsigned sdesc_size = nstack_walk_frame_size(sdesc);
+ unsigned i = 0;
+ unsigned mask = sdesc->livebits[0];
+ for (;;) {
+ if (mask & 1) {
+ Eterm *nsp_i = nstack_walk_frame_index(nsp, i);
+ Eterm gval = *nsp_i;
+ if (is_boxed(gval)) {
+ Eterm *ptr = boxed_val(gval);
+ Eterm val = *ptr;
+ if (IS_MOVED_BOXED(val)) {
+ ASSERT(is_boxed(val));
+ *nsp_i = val;
+ } else if (ErtsInArea(ptr, area, area_size)) {
+ MOVE_BOXED(ptr, val, old_htop, nsp_i);
+ }
+ } else if (is_list(gval)) {
+ Eterm *ptr = list_val(gval);
+ Eterm val = *ptr;
+ if (IS_MOVED_CONS(val)) {
+ *nsp_i = ptr[1];
+ } else if (ErtsInArea(ptr, area, area_size)) {
+ MOVE_CONS(ptr, val, old_htop, nsp_i);
+ }
+ }
+ }
+ if (++i >= sdesc_size)
+ break;
+ if (i & 31)
+ mask >>= 1;
+ else
+ mask = sdesc->livebits[i >> 5];
+ }
+ ra = nstack_walk_frame_ra(nsp, sdesc);
+ if (ra == (unsigned long)nbif_stack_trap_ra)
+ ra = (unsigned long)p->hipe.ngra;
+ sdesc = hipe_find_sdesc(ra);
+ nsp = nstack_walk_next_frame(nsp, sdesc_size);
+ }
+ return old_htop;
+}
+
+int
+nstack_any_heap_ref_ptrs(Process *rp, char* mod_start, Uint mod_size)
+{
+ Eterm *nsp;
+ Eterm *nsp_end;
+ const struct sdesc *sdesc;
+ /* arch-specific nstack walk state */
+ struct nstack_walk_state walk_state;
+
+ ASSERT(!rp->hipe.gc_is_unsafe);
+
+ if (!rp->hipe.nstack || !nstack_walk_init_check(rp)) return 0;
+ ASSERT(rp->hipe.nsp && rp->hipe.nstend);
+ nsp = nstack_walk_nsp_begin(rp);
+ nsp_end = nstack_walk_nsp_end(rp);
+ sdesc = nstack_walk_init_sdesc_ignore_trap(rp, &walk_state);
+
+ while (!nstack_walk_nsp_reached_end(nsp, nsp_end)) {
+ unsigned long ra;
+ unsigned sdesc_size = nstack_walk_frame_size(sdesc);
+ unsigned i = 0;
+ unsigned mask = sdesc->livebits[0];
+ for (;;) {
+ if (mask & 1) {
+ Eterm *nsp_i = nstack_walk_frame_index(nsp, i);
+ Eterm val = *nsp_i;
+ switch (primary_tag(val)) {
+ case TAG_PRIMARY_BOXED:
+ case TAG_PRIMARY_LIST:
+ if (ErtsInArea(val, mod_start, mod_size)) {
+ return 1;
+ }
+ break;
+ }
+ }
+ if (++i >= sdesc_size)
+ break;
+ if (i & 31)
+ mask >>= 1;
+ else
+ mask = sdesc->livebits[i >> 5];
+ }
+ ra = nstack_walk_frame_ra(nsp, sdesc);
+ if (ra == (unsigned long)nbif_stack_trap_ra)
+ ra = (unsigned long)rp->hipe.ngra;
+ sdesc = hipe_find_sdesc(ra);
+ nsp = nstack_walk_next_frame(nsp, sdesc_size);
+ }
+ return 0;
+}
diff --git a/erts/emulator/hipe/hipe_mkliterals.c b/erts/emulator/hipe/hipe_mkliterals.c
index 0d3493ec6c..b9d4226705 100644
--- a/erts/emulator/hipe/hipe_mkliterals.c
+++ b/erts/emulator/hipe/hipe_mkliterals.c
@@ -525,6 +525,12 @@ static const struct rts_param rts_params[] = {
{ 51, "P_CALLEE_EXP", 1, offsetof(struct process, hipe.u.callee_exp) },
{ 52, "THE_NON_VALUE", 1, (int)THE_NON_VALUE },
+
+ { 53, "P_GCUNSAFE",
+#ifdef DEBUG
+ 1, offsetof(struct process, hipe.gc_is_unsafe)
+#endif
+ },
};
#define NR_PARAMS ARRAY_SIZE(rts_params)
diff --git a/erts/emulator/hipe/hipe_mode_switch.c b/erts/emulator/hipe/hipe_mode_switch.c
index f532d3151f..ed95045292 100644
--- a/erts/emulator/hipe/hipe_mode_switch.c
+++ b/erts/emulator/hipe/hipe_mode_switch.c
@@ -174,6 +174,33 @@ void hipe_mode_switch_init(void)
make_catch(beam_catches_cons(hipe_beam_pc_throw, BEAM_CATCHES_NIL));
hipe_mfa_info_table_init();
+
+#if (defined(__i386__) || defined(__x86_64__)) && defined(__linux__)
+ /* Verify that the offset of c-p->hipe does not change.
+ The ErLLVM hipe backend depends on it being in a specific
+ position. Kostis et al has promised to fix this in upstream
+ llvm by OTP 20, so it should be possible to remove these asserts
+ after that. */
+ ERTS_CT_ASSERT(sizeof(ErtsPTabElementCommon) ==
+ (sizeof(Eterm) + /* id */
+ sizeof(((ErtsPTabElementCommon*)0)->refc) +
+ sizeof(ErtsTracer) + /* tracer */
+ sizeof(Uint) + /* trace_flags */
+ sizeof(erts_smp_atomic_t) + /* timer */
+ sizeof(((ErtsPTabElementCommon*)0)->u)));
+
+ ERTS_CT_ASSERT(offsetof(Process, hipe) ==
+ (sizeof(ErtsPTabElementCommon) + /* common */
+ sizeof(Eterm*) + /* htop */
+ sizeof(Eterm*) + /* stop */
+ sizeof(Eterm*) + /* heap */
+ sizeof(Eterm*) + /* hend */
+ sizeof(Uint) + /* heap_sz */
+ sizeof(Uint) + /* min_heap_size */
+ sizeof(Uint) + /* min_vheap_size */
+ sizeof(volatile unsigned long))); /* fp_exception */
+#endif
+
}
void hipe_set_call_trap(Uint *bfun, void *nfun, int is_closure)
@@ -520,7 +547,7 @@ Process *hipe_mode_switch(Process *p, unsigned cmd, Eterm reg[])
p->flags &= ~F_HIPE_MODE;
ERTS_SMP_UNREQ_PROC_MAIN_LOCK(p);
- p = schedule(p, reds_in - p->fcalls);
+ p = erts_schedule(NULL, p, reds_in - p->fcalls);
ERTS_SMP_REQ_PROC_MAIN_LOCK(p);
ASSERT(!(p->flags & F_HIPE_MODE));
#ifdef ERTS_SMP
diff --git a/erts/emulator/hipe/hipe_ppc_bifs.m4 b/erts/emulator/hipe/hipe_ppc_bifs.m4
index 57b4208bee..b540562185 100644
--- a/erts/emulator/hipe/hipe_ppc_bifs.m4
+++ b/erts/emulator/hipe/hipe_ppc_bifs.m4
@@ -212,8 +212,9 @@ ASYM($1):
* gc_bif_interface_0(nbif_name, cbif_name)
* gc_bif_interface_1(nbif_name, cbif_name)
* gc_bif_interface_2(nbif_name, cbif_name)
+ * gc_bif_interface_3(nbif_name, cbif_name)
*
- * Generate native interface for a BIF with 0-2 parameters and
+ * Generate native interface for a BIF with 0-3 parameters and
* standard failure mode.
* The BIF may do a GC.
*/
@@ -300,6 +301,39 @@ ASYM($1):
TYPE_FUNCTION(ASYM($1))
#endif')
+define(gc_bif_interface_3,
+`
+#ifndef HAVE_$1
+#`define' HAVE_$1
+ GLOBAL(ASYM($1))
+ASYM($1):
+ /* Set up C argument registers. */
+ mr r3, P
+ NBIF_ARG(r4,3,0)
+ NBIF_ARG(r5,3,1)
+ NBIF_ARG(r6,3,2)
+
+ /* Save caller-save registers and call the C function. */
+ SAVE_CONTEXT_GC
+ STORE r4, P_ARG0(r3) /* Store BIF__ARGS in def_arg_reg[] */
+ STORE r5, P_ARG1(r3)
+ STORE r6, P_ARG2(r3)
+ addi r4, r3, P_ARG0
+ CALL_BIF($2)
+ TEST_GOT_MBUF
+
+ /* Restore registers. Check for exception. */
+ CMPI r3, THE_NON_VALUE
+ RESTORE_CONTEXT_GC
+ beq- 1f
+ NBIF_RET(3)
+1: /* workaround for bc:s small offset operand */
+ b CSYM(nbif_3_simple_exception)
+ HANDLE_GOT_MBUF(3)
+ SET_SIZE(ASYM($1))
+ TYPE_FUNCTION(ASYM($1))
+#endif')
+
/*
* gc_nofail_primop_interface_1(nbif_name, cbif_name)
*
diff --git a/erts/emulator/hipe/hipe_process.h b/erts/emulator/hipe/hipe_process.h
index 21c4239753..a8d5972280 100644
--- a/erts/emulator/hipe/hipe_process.h
+++ b/erts/emulator/hipe/hipe_process.h
@@ -52,6 +52,9 @@ struct hipe_process_state {
#if defined(ERTS_ENABLE_LOCK_CHECK) && defined(ERTS_SMP)
void (*bif_callee)(void); /* When calling BIF's via debug wrapper */
#endif
+#ifdef DEBUG
+ UWord gc_is_unsafe; /* Nonzero when GC-required state is on stack */
+#endif
};
extern void hipe_arch_print_pcb(struct hipe_process_state *p);
@@ -68,6 +71,9 @@ static __inline__ void hipe_init_process(struct hipe_process_state *p)
p->nra = NULL;
#endif
p->narity = 0;
+#ifdef DEBUG
+ p->gc_is_unsafe = 0;
+#endif
}
static __inline__ void hipe_delete_process(struct hipe_process_state *p)
diff --git a/erts/emulator/hipe/hipe_risc_gc.h b/erts/emulator/hipe/hipe_risc_gc.h
index 315f8e7f9f..09568c140e 100644
--- a/erts/emulator/hipe/hipe_risc_gc.h
+++ b/erts/emulator/hipe/hipe_risc_gc.h
@@ -51,6 +51,19 @@ nstack_walk_init_sdesc(const Process *p, struct nstack_walk_state *state)
return sdesc;
}
+static inline const struct sdesc*
+nstack_walk_init_sdesc_ignore_trap(const Process *p,
+ struct nstack_walk_state *state)
+{
+ unsigned long ra = (unsigned long)p->hipe.nra;
+ const struct sdesc *sdesc;
+ if (ra == (unsigned long)&nbif_stack_trap_ra)
+ ra = (unsigned long)p->hipe.ngra;
+ sdesc = hipe_find_sdesc(ra);
+ state->sdesc0 = sdesc;
+ return sdesc;
+}
+
static inline void nstack_walk_update_trap(Process *p, const struct sdesc *sdesc0)
{
Eterm *nsp = p->hipe.nsp;
diff --git a/erts/emulator/hipe/hipe_sparc_bifs.m4 b/erts/emulator/hipe/hipe_sparc_bifs.m4
index 2e886ec1d1..1389beaa61 100644
--- a/erts/emulator/hipe/hipe_sparc_bifs.m4
+++ b/erts/emulator/hipe/hipe_sparc_bifs.m4
@@ -210,8 +210,9 @@ $1:
* gc_bif_interface_0(nbif_name, cbif_name)
* gc_bif_interface_1(nbif_name, cbif_name)
* gc_bif_interface_2(nbif_name, cbif_name)
+ * gc_bif_interface_3(nbif_name, cbif_name)
*
- * Generate native interface for a BIF with 0-2 parameters and
+ * Generate native interface for a BIF with 0-3 parameters and
* standard failure mode.
* The BIF may do a GC.
*/
@@ -295,6 +296,37 @@ $1:
.type $1, #function
#endif')
+define(gc_bif_interface_3,
+`
+#ifndef HAVE_$1
+#`define' HAVE_$1
+ .global $1
+$1:
+ /* Set up C argument registers. */
+ mov P, %o0
+ NBIF_ARG(%o1,3,0)
+ NBIF_ARG(%o2,3,1)
+ NBIF_ARG(%o3,3,2)
+
+ /* Save caller-save registers and call the C function. */
+ SAVE_CONTEXT_GC
+ st %o1, [%o0+P_ARG0] ! Store BIF__ARGS in def_arg_reg
+ st %o2, [%o0+P_ARG1]
+ st %o3, [%o0+P_ARG2]
+ add %o0, P_ARG0, %o1
+ CALL_BIF($2)
+ nop
+ TEST_GOT_MBUF
+
+ /* Restore registers. Check for exception. */
+ TEST_GOT_EXN(3)
+ RESTORE_CONTEXT_GC
+ NBIF_RET(3)
+ HANDLE_GOT_MBUF(3)
+ .size $1, .-$1
+ .type $1, #function
+#endif')
+
/*
* gc_nofail_primop_interface_1(nbif_name, cbif_name)
*
diff --git a/erts/emulator/hipe/hipe_stack.h b/erts/emulator/hipe/hipe_stack.h
index 4ea7d5c031..afa0ed4256 100644
--- a/erts/emulator/hipe/hipe_stack.h
+++ b/erts/emulator/hipe/hipe_stack.h
@@ -131,5 +131,8 @@ static __inline__ void hipe_check_nstack(Process *p, unsigned nwords)
*/
extern Eterm *fullsweep_nstack(Process *p, Eterm *n_htop);
extern void gensweep_nstack(Process *p, Eterm **ptr_old_htop, Eterm **ptr_n_htop);
+extern Eterm *sweep_literals_nstack(Process *p, Eterm *n_htop, char *area,
+ Uint area_size);
+extern int nstack_any_heap_ref_ptrs(Process *, char* mod_start, Uint mod_size);
#endif /* HIPE_STACK_H */
diff --git a/erts/emulator/hipe/hipe_x86.c b/erts/emulator/hipe/hipe_x86.c
index 3d25646231..5f6c8c200e 100644
--- a/erts/emulator/hipe/hipe_x86.c
+++ b/erts/emulator/hipe/hipe_x86.c
@@ -37,7 +37,7 @@
void hipe_patch_load_fe(Uint32 *address, Uint32 value)
{
/* address points to a disp32 or imm32 operand */
- *address = value;
+ *address += value;
}
int hipe_patch_insn(void *address, Uint32 value, Eterm type)
@@ -54,7 +54,7 @@ int hipe_patch_insn(void *address, Uint32 value, Eterm type)
default:
return -1;
}
- *(Uint32*)address = value;
+ *(Uint32*)address += value;
return 0;
}
diff --git a/erts/emulator/hipe/hipe_x86_bifs.m4 b/erts/emulator/hipe/hipe_x86_bifs.m4
index b8ac5046d5..c0c149733c 100644
--- a/erts/emulator/hipe/hipe_x86_bifs.m4
+++ b/erts/emulator/hipe/hipe_x86_bifs.m4
@@ -671,10 +671,11 @@ noproc_primop_interface_0(nbif_handle_fp_exception, erts_restore_fpu)
define(gc_bif_interface_0,`nofail_primop_interface_0($1, $2)')
/*
- * Implement gc_bif_interface_N as standard_bif_interface_N (N=1,2).
+ * Implement gc_bif_interface_N as standard_bif_interface_N (N=1,2,3).
*/
define(gc_bif_interface_1,`standard_bif_interface_1($1, $2)')
define(gc_bif_interface_2,`standard_bif_interface_2($1, $2)')
+define(gc_bif_interface_3,`standard_bif_interface_3($1, $2)')
/*
* Implement gc_nofail_primop_interface_1 as nofail_primop_interface_1.
diff --git a/erts/emulator/hipe/hipe_x86_gc.h b/erts/emulator/hipe/hipe_x86_gc.h
index c22b28c2d5..00fe03d8f9 100644
--- a/erts/emulator/hipe/hipe_x86_gc.h
+++ b/erts/emulator/hipe/hipe_x86_gc.h
@@ -81,6 +81,23 @@ nstack_walk_init_sdesc(const Process *p, struct nstack_walk_state *state)
#endif
}
+static inline const struct sdesc*
+nstack_walk_init_sdesc_ignore_trap(const Process *p,
+ struct nstack_walk_state *state)
+{
+#ifdef SKIP_YOUNGEST_FRAME
+ unsigned long ra = p->hipe.nsp[0];
+ const struct sdesc *sdesc;
+ if (ra == (unsigned long)nbif_stack_trap_ra)
+ ra = (unsigned long)p->hipe.ngra;
+ sdesc = hipe_find_sdesc(ra);
+ state->sdesc0 = sdesc;
+ return sdesc;
+#else
+ return nstack_walk_init_sdesc(p, state);
+#endif
+}
+
static inline void nstack_walk_update_trap(Process *p, const struct sdesc *sdesc0)
{
#ifdef SKIP_YOUNGEST_FRAME
diff --git a/erts/emulator/internal_doc/Tracing.md b/erts/emulator/internal_doc/Tracing.md
index 30bc5327a7..728f315263 100644
--- a/erts/emulator/internal_doc/Tracing.md
+++ b/erts/emulator/internal_doc/Tracing.md
@@ -57,7 +57,7 @@ generations of breakpoints are kept and indentified by index of 0 and
1. The global atomic variables `erts_active_bp_index` will determine
which generation of breakpoints running code will use.
-### Atomicy Without Atomic Operations
+### Atomicity Without Atomic Operations
Not using the code loading generations (or any other code duplication)
means that `trace_pattern` must at some point write to the active beam
diff --git a/erts/emulator/nifs/common/erl_tracer_nif.c b/erts/emulator/nifs/common/erl_tracer_nif.c
index 6dddc80607..c0cc48ff42 100644
--- a/erts/emulator/nifs/common/erl_tracer_nif.c
+++ b/erts/emulator/nifs/common/erl_tracer_nif.c
@@ -45,7 +45,7 @@ static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ErlNifFunc nif_funcs[] = {
{"enabled", 3, enabled},
- {"trace", 6, trace}
+ {"trace", 5, trace}
};
@@ -57,6 +57,7 @@ ERL_NIF_INIT(erl_tracer, nif_funcs, load, NULL, upgrade, unload)
ATOM_DECL(cpu_timestamp); \
ATOM_DECL(discard); \
ATOM_DECL(exception_from); \
+ ATOM_DECL(extra); \
ATOM_DECL(match_spec_result); \
ATOM_DECL(monotonic); \
ATOM_DECL(ok); \
@@ -76,8 +77,7 @@ ERL_NIF_INIT(erl_tracer, nif_funcs, load, NULL, upgrade, unload)
ATOM_DECL(gc_minor_start); \
ATOM_DECL(gc_minor_end); \
ATOM_DECL(gc_major_start); \
- ATOM_DECL(gc_major_end); \
- ATOM_DECL(undefined);
+ ATOM_DECL(gc_major_end);
#define ATOM_DECL(A) static ERL_NIF_TERM atom_##A
ATOMS
@@ -154,11 +154,6 @@ static ERL_NIF_TERM enabled(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
Tracee :: pid() || port() || undefined,
Msg :: term(),
Opts :: map()) -> ignored().
- -spec trace(Tag :: atom(), TracerState :: pid() | port(),
- Tracee :: pid() || port() || undefined,
- Msg :: term(),
- Extra :: term(),
- Opts :: map()) -> ignored().
*/
static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
@@ -167,7 +162,8 @@ static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
ErlNifPort to_port;
size_t tt_sz = 0;
int is_port = 0;
- ASSERT(argc == 6);
+ size_t opts_sz = 0;
+ ASSERT(argc == 5);
if (!enif_get_local_pid(env, argv[1], &to_pid)) {
if (!enif_get_local_port(env, argv[1], &to_port)) {
@@ -179,12 +175,17 @@ static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
is_port = 1;
}
- if (!enif_is_identical(argv[4], atom_undefined)) {
+ opts = argv[4];
+
+ if (!enif_get_map_size(env, opts, &opts_sz))
+ opts_sz = 0;
+
+ if (opts_sz && enif_get_map_value(env, opts, atom_extra, &value)) {
tt[tt_sz++] = atom_trace;
tt[tt_sz++] = argv[2];
tt[tt_sz++] = argv[0];
tt[tt_sz++] = argv[3];
- tt[tt_sz++] = argv[4];
+ tt[tt_sz++] = value;
} else {
if (enif_is_identical(argv[0], atom_seq_trace)) {
tt[tt_sz++] = atom_seq_trace;
@@ -198,21 +199,16 @@ static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
}
}
- opts = argv[5];
- if (enif_get_map_value(env, opts, atom_match_spec_result,
- &value)
- && !enif_is_identical(value, atom_true)) {
+ if (opts_sz && enif_get_map_value(env, opts, atom_match_spec_result, &value)) {
tt[tt_sz++] = value;
}
- if (enif_get_map_value(env, opts, atom_scheduler_id, &value)
- && !enif_is_identical(value, atom_undefined)) {
+ if (opts_sz && enif_get_map_value(env, opts, atom_scheduler_id, &value)) {
tt[tt_sz++] = value;
}
- if (enif_get_map_value(env, opts, atom_timestamp, &value)
- && !enif_is_identical(value, atom_undefined)) {
+ if (opts_sz && enif_get_map_value(env, opts, atom_timestamp, &value)) {
ERL_NIF_TERM ts;
if (enif_is_identical(value, atom_monotonic)) {
ErlNifTime mon = enif_monotonic_time(ERL_NIF_NSEC);
diff --git a/erts/emulator/sys/common/erl_mmap.c b/erts/emulator/sys/common/erl_mmap.c
index 53009a1481..7bbb406f29 100644
--- a/erts/emulator/sys/common/erl_mmap.c
+++ b/erts/emulator/sys/common/erl_mmap.c
@@ -1334,9 +1334,17 @@ os_mremap(void *ptr, UWord old_size, UWord new_size, int try_superalign)
#define ERTS_MMAP_RESERVE_PROT_EXEC (ERTS_MMAP_PROT_EXEC)
#define ERTS_MMAP_RESERVE_FLAGS (ERTS_MMAP_FLAGS|MAP_FIXED)
#define ERTS_MMAP_UNRESERVE_PROT (PROT_NONE)
+#if defined(__FreeBSD__)
+#define ERTS_MMAP_UNRESERVE_FLAGS (ERTS_MMAP_FLAGS|MAP_FIXED)
+#else
#define ERTS_MMAP_UNRESERVE_FLAGS (ERTS_MMAP_FLAGS|MAP_NORESERVE|MAP_FIXED)
+#endif /* __FreeBSD__ */
#define ERTS_MMAP_VIRTUAL_PROT (PROT_NONE)
+#if defined(__FreeBSD__)
+#define ERTS_MMAP_VIRTUAL_FLAGS (ERTS_MMAP_FLAGS)
+#else
#define ERTS_MMAP_VIRTUAL_FLAGS (ERTS_MMAP_FLAGS|MAP_NORESERVE)
+#endif /* __FreeBSD__ */
static int
os_reserve_physical(char *ptr, UWord size, int exec)
diff --git a/erts/emulator/sys/common/erl_mmap.h b/erts/emulator/sys/common/erl_mmap.h
index 7ac61a82c1..fa51b663fa 100644
--- a/erts/emulator/sys/common/erl_mmap.h
+++ b/erts/emulator/sys/common/erl_mmap.h
@@ -38,7 +38,17 @@
# if HAVE_MREMAP
# define ERTS_HAVE_OS_MREMAP 1
# endif
-# if defined(MAP_FIXED) && defined(MAP_NORESERVE)
+/*
+ * MAP_NORESERVE is undefined in FreeBSD 10.x and later.
+ * This is to enable 64bit HiPE experimentally on FreeBSD.
+ * Note that on FreeBSD MAP_NORESERVE was "never implemented"
+ * even before 11.x (and the flag does not exist in /usr/src/sys/vm/mmap.c
+ * of 10.3-STABLE r301478 either), and HiPE was working on OTP 18.3.3,
+ * so mandating MAP_NORESERVE on FreeBSD might not be needed.
+ * See the following message on how MAP_NORESERVE was treated on FreeBSD:
+ * <http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20150202/122958.html>
+ */
+# if defined(MAP_FIXED) && (defined(MAP_NORESERVE) || defined(__FreeBSD__))
# define ERTS_HAVE_OS_PHYSICAL_MEMORY_RESERVATION 1
# endif
#endif
diff --git a/erts/emulator/sys/common/erl_poll.c b/erts/emulator/sys/common/erl_poll.c
index e394d84f73..b8a28bcc18 100644
--- a/erts/emulator/sys/common/erl_poll.c
+++ b/erts/emulator/sys/common/erl_poll.c
@@ -75,6 +75,7 @@
#include "erl_driver.h"
#include "erl_alloc.h"
#include "erl_msacc.h"
+#include "erl_misc_utils.h"
#if !defined(ERTS_POLL_USE_EPOLL) \
&& !defined(ERTS_POLL_USE_DEVPOLL) \
@@ -2132,16 +2133,19 @@ get_timeout(ErtsPollSet ps,
if (timeout > (ErtsMonotonicTime) INT_MAX)
timeout = (ErtsMonotonicTime) INT_MAX;
save_timeout_time += ERTS_MSEC_TO_MONOTONIC(timeout);
+ timeout -= ERTS_PREMATURE_TIMEOUT(timeout, 1000);
break;
case 1000000:
/* Round up to nearest even micro second */
timeout = ERTS_MONOTONIC_TO_USEC(diff_time - 1) + 1;
save_timeout_time += ERTS_USEC_TO_MONOTONIC(timeout);
+ timeout -= ERTS_PREMATURE_TIMEOUT(timeout, 1000*1000);
break;
case 1000000000:
/* Round up to nearest even nano second */
timeout = ERTS_MONOTONIC_TO_NSEC(diff_time - 1) + 1;
save_timeout_time += ERTS_NSEC_TO_MONOTONIC(timeout);
+ timeout -= ERTS_PREMATURE_TIMEOUT(timeout, 1000*1000*1000);
break;
default:
ERTS_INTERNAL_ERROR("Invalid resolution");
@@ -2452,7 +2456,15 @@ ERTS_POLL_EXPORT(erts_poll_wait)(ErtsPollSet ps,
}
#endif
- res = check_fd_events(ps, to, no_fds);
+ while (1) {
+ res = check_fd_events(ps, to, no_fds);
+ if (res != 0)
+ break;
+ if (to == ERTS_POLL_NO_TIMEOUT)
+ break;
+ if (erts_get_monotonic_time(NULL) >= timeout_time)
+ break;
+ }
woke_up(ps);
diff --git a/erts/emulator/sys/unix/erl_child_setup.c b/erts/emulator/sys/unix/erl_child_setup.c
index 6beb316350..69fc6c2879 100644
--- a/erts/emulator/sys/unix/erl_child_setup.c
+++ b/erts/emulator/sys/unix/erl_child_setup.c
@@ -54,6 +54,7 @@
#include <stdlib.h>
#include <stdio.h>
+#include <stdarg.h>
#include <sys/wait.h>
#define WANT_NONBLOCKING
@@ -74,15 +75,22 @@
//#define HARD_DEBUG
#ifdef HARD_DEBUG
-#define DEBUG_PRINT(fmt, ...) fprintf(stderr, fmt "\r\n", ##__VA_ARGS__)
+#define DEBUG_PRINT(fmt, ...) fprintf(stderr, "%d:" fmt "\r\n", getpid(), ##__VA_ARGS__)
#else
#define DEBUG_PRINT(fmt, ...)
#endif
-#define ABORT(fmt, ...) do { \
- fprintf(stderr, "erl_child_setup: " fmt "\r\n", ##__VA_ARGS__); \
- abort(); \
- } while(0)
+static char abort_reason[200]; /* for core dump inspection */
+
+static void ABORT(const char* fmt, ...)
+{
+ va_list arglist;
+ va_start(arglist, fmt);
+ vsprintf(abort_reason, fmt, arglist);
+ fprintf(stderr, "erl_child_setup: %s\r\n", abort_reason);
+ va_end(arglist);
+ abort();
+}
#ifdef DEBUG
void
@@ -123,12 +131,13 @@ static int sigchld_pipe[2];
static int
start_new_child(int pipes[])
{
+ int errln = -1;
int size, res, i, pos = 0;
char *buff, *o_buff;
- char *cmd, *wd, **new_environ, **args = NULL;
+ char *cmd, *cwd, *wd, **new_environ, **args = NULL;
- Sint cnt, flags;
+ Sint32 cnt, flags;
/* only child executes here */
@@ -137,6 +146,7 @@ start_new_child(int pipes[])
} while(res < 0 && (errno == EINTR || errno == ERRNO_BLOCK));
if (res <= 0) {
+ errln = __LINE__;
goto child_error;
}
@@ -148,10 +158,12 @@ start_new_child(int pipes[])
if ((res = read(pipes[0], buff + pos, size - pos)) < 0) {
if (errno == ERRNO_BLOCK || errno == EINTR)
continue;
+ errln = __LINE__;
goto child_error;
}
if (res == 0) {
errno = EPIPE;
+ errln = __LINE__;
goto child_error;
}
pos += res;
@@ -160,12 +172,16 @@ start_new_child(int pipes[])
o_buff = buff;
flags = get_int32(buff);
- buff += sizeof(Sint32);
+ buff += sizeof(flags);
DEBUG_PRINT("flags = %d", flags);
cmd = buff;
buff += strlen(buff) + 1;
+
+ cwd = buff;
+ buff += strlen(buff) + 1;
+
if (*buff == '\0') {
wd = NULL;
} else {
@@ -177,10 +193,10 @@ start_new_child(int pipes[])
DEBUG_PRINT("wd = %s", wd);
cnt = get_int32(buff);
- buff += sizeof(Sint32);
+ buff += sizeof(cnt);
new_environ = malloc(sizeof(char*)*(cnt + 1));
- DEBUG_PRINT("env_len = %ld", cnt);
+ DEBUG_PRINT("env_len = %d", cnt);
for (i = 0; i < cnt; i++, buff++) {
new_environ[i] = buff;
while(*buff != '\0') buff++;
@@ -190,7 +206,7 @@ start_new_child(int pipes[])
if (o_buff + size != buff) {
/* This is a spawn executable call */
cnt = get_int32(buff);
- buff += sizeof(Sint32);
+ buff += sizeof(cnt);
args = malloc(sizeof(char*)*(cnt + 1));
for (i = 0; i < cnt; i++, buff++) {
args[i] = buff;
@@ -201,7 +217,12 @@ start_new_child(int pipes[])
if (o_buff + size != buff) {
errno = EINVAL;
- goto child_error;
+ errln = __LINE__;
+ fprintf(stderr,"erl_child_setup: failed with protocol "
+ "error %d on line %d", errno, errln);
+ /* we abort here as it is most likely a symptom of an
+ emulator/erl_child_setup bug */
+ abort();
}
DEBUG_PRINT("read ack");
@@ -213,12 +234,32 @@ start_new_child(int pipes[])
ASSERT(res == sizeof(proto));
}
} while(res < 0 && (errno == EINTR || errno == ERRNO_BLOCK));
+
if (res < 1) {
errno = EPIPE;
+ errln = __LINE__;
goto child_error;
}
- DEBUG_PRINT("Do that forking business: '%s'\n",cmd);
+ DEBUG_PRINT("Set cwd to: '%s'",cwd);
+
+ if (chdir(cwd) < 0) {
+ /* This is not good, it probably means that the cwd of
+ beam is invalid. We ignore it and try anyways as
+ the child might now need a cwd or the chdir below
+ could take us to a valid directory.
+ */
+ }
+
+ DEBUG_PRINT("Set wd to: '%s'",wd);
+
+ if (wd && chdir(wd) < 0) {
+ int err = errno;
+ fprintf(stderr,"spawn: Could not cd to %s\r\n", wd);
+ _exit(err);
+ }
+
+ DEBUG_PRINT("Do that forking business: '%s'",cmd);
/* When the dup2'ing below is done, only
fd's 0, 1, 2 and maybe 3, 4 should survive the
@@ -228,25 +269,34 @@ start_new_child(int pipes[])
if (flags & FORKER_FLAG_USE_STDIO) {
/* stdin for process */
if (flags & FORKER_FLAG_DO_WRITE &&
- dup2(pipes[0], 0) < 0)
+ dup2(pipes[0], 0) < 0) {
+ errln = __LINE__;
goto child_error;
+ }
/* stdout for process */
if (flags & FORKER_FLAG_DO_READ &&
- dup2(pipes[1], 1) < 0)
+ dup2(pipes[1], 1) < 0) {
+ errln = __LINE__;
goto child_error;
+ }
}
else { /* XXX will fail if pipes[0] == 4 (unlikely..) */
- if (flags & FORKER_FLAG_DO_READ && dup2(pipes[1], 4) < 0)
+ if (flags & FORKER_FLAG_DO_READ && dup2(pipes[1], 4) < 0) {
+ errln = __LINE__;
goto child_error;
- if (flags & FORKER_FLAG_DO_WRITE && dup2(pipes[0], 3) < 0)
+ }
+ if (flags & FORKER_FLAG_DO_WRITE && dup2(pipes[0], 3) < 0) {
+ errln = __LINE__;
goto child_error;
+ }
}
- if (dup2(pipes[2], 2) < 0)
- goto child_error;
-
- if (wd && chdir(wd) < 0)
+ /* we do the dup2 of stderr last so that errors
+ in child_error will be printed to stderr */
+ if (dup2(pipes[2], 2) < 0) {
+ errln = __LINE__;
goto child_error;
+ }
#if defined(USE_SETPGRP_NOARGS) /* SysV */
(void) setpgrp();
@@ -268,9 +318,14 @@ start_new_child(int pipes[])
} else {
execle(SHELL, "sh", "-c", cmd, (char *) NULL, new_environ);
}
+
+ DEBUG_PRINT("exec error: %d",errno);
+ _exit(errno);
+
child_error:
- DEBUG_PRINT("exec error: %d\r\n",errno);
- _exit(128 + errno);
+ fprintf(stderr,"erl_child_setup: failed with error %d on line %d\r\n",
+ errno, errln);
+ _exit(errno);
}
@@ -293,7 +348,7 @@ child_error:
* for posterity. */
static void handle_sigchld(int sig) {
- int buff[2], res;
+ int buff[2], res, __preverrno = errno;
sys_sigblock(SIGCHLD);
@@ -307,6 +362,16 @@ static void handle_sigchld(int sig) {
}
sys_sigrelease(SIGCHLD);
+
+ /* We save and restore the original errno as otherwise
+ the thread we are running in may end up with an
+ unexpected errno. An example of when this happened
+ was when the select in main had gotten an EINTR but
+ before the errno was checked the signal handler
+ was called and set errno to ECHILD from waitpid
+ which caused erl_child_setup to abort as it does
+ not expect ECHILD to be set after select */
+ errno = __preverrno;
}
#if defined(__ANDROID__)
@@ -368,7 +433,7 @@ main(int argc, char *argv[])
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART | SA_NOCLDSTOP;
if (sigaction(SIGCHLD, &sa, 0) == -1) {
- perror(0);
+ perror(NULL);
exit(1);
}
@@ -461,7 +526,7 @@ main(int argc, char *argv[])
proto.action = ErtsSysForkerProtoAction_SigChld;
proto.u.sigchld.error_number = ibuff[1];
- DEBUG_PRINT("send %s to %d", buff, uds_fd);
+ DEBUG_PRINT("send sigchld to %d (errno = %d)", uds_fd, ibuff[1]);
if (write(uds_fd, &proto, sizeof(proto)) < 0) {
if (errno == EINTR)
continue;
diff --git a/erts/emulator/sys/unix/erl_unix_sys.h b/erts/emulator/sys/unix/erl_unix_sys.h
index 241540b894..b64b0d87f6 100644
--- a/erts/emulator/sys/unix/erl_unix_sys.h
+++ b/erts/emulator/sys/unix/erl_unix_sys.h
@@ -163,7 +163,7 @@ typedef long long ErtsSysHrTime;
typedef ErtsMonotonicTime ErtsSystemTime;
typedef ErtsSysHrTime ErtsSysPerfCounter;
-#define ERTS_MONOTONIC_TIME_MIN (((ErtsMonotonicTime) 1) << 63)
+#define ERTS_MONOTONIC_TIME_MIN ((ErtsMonotonicTime) (1ULL << 63))
#define ERTS_MONOTONIC_TIME_MAX (~ERTS_MONOTONIC_TIME_MIN)
/*
@@ -282,7 +282,7 @@ ERTS_GLB_INLINE ErtsSysPerfCounter erts_sys_perf_counter(void);
#if ERTS_GLB_INLINE_INCL_FUNC_DEF
-ERTS_GLB_INLINE ErtsSysPerfCounter
+ERTS_GLB_FORCE_INLINE ErtsSysPerfCounter
erts_sys_perf_counter()
{
return (*erts_sys_time_data__.r.o.perf_counter)();
diff --git a/erts/emulator/sys/unix/sys.c b/erts/emulator/sys/unix/sys.c
index 6fb86f6dda..089efec3e8 100644
--- a/erts/emulator/sys/unix/sys.c
+++ b/erts/emulator/sys/unix/sys.c
@@ -715,11 +715,13 @@ static RETSIGTYPE suspend_signal(void)
static RETSIGTYPE suspend_signal(int signum)
#endif
{
- int res;
- int buf[1];
- do {
- res = read(sig_suspend_fds[0], buf, sizeof(int));
- } while (res < 0 && errno == EINTR);
+ int res, buf[1], __errno = errno;
+ do {
+ res = read(sig_suspend_fds[0], buf, sizeof(int));
+ } while (res < 0 && errno == EINTR);
+
+ /* restore previous errno in case read changed it */
+ errno = __errno;
}
#endif /* #ifdef ERTS_SYS_SUSPEND_SIGNAL */
diff --git a/erts/emulator/sys/unix/sys_drivers.c b/erts/emulator/sys/unix/sys_drivers.c
index ac39b8a389..400f163652 100644
--- a/erts/emulator/sys/unix/sys_drivers.c
+++ b/erts/emulator/sys/unix/sys_drivers.c
@@ -554,7 +554,7 @@ static ErlDrvData spawn_start(ErlDrvPort port_num, char* name,
ErtsSysDriverData *dd;
char *cmd_line;
char wd_buff[MAXPATHLEN+1];
- char *wd;
+ char *wd, *cwd;
int ifd[2], ofd[2], stderrfd;
if (pipe(ifd) < 0) return ERL_DRV_ERROR_ERRNO;
@@ -631,24 +631,22 @@ static ErlDrvData spawn_start(ErlDrvPort port_num, char* name,
return ERL_DRV_ERROR_ERRNO;
}
- if (opts->wd == NULL) {
- if ((wd = getcwd(wd_buff, MAXPATHLEN+1)) == NULL) {
- /* on some OSs this call opens a fd in the
- background which means that this can
- return EMFILE */
- int err = errno;
- close_pipes(ifd, ofd);
- erts_free(ERTS_ALC_T_TMP, (void *) cmd_line);
- if (new_environ != environ)
- erts_free(ERTS_ALC_T_ENVIRONMENT, (void *) new_environ);
- erts_smp_rwmtx_runlock(&environ_rwmtx);
- errno = err;
- return ERL_DRV_ERROR_ERRNO;
- }
- } else {
- wd = opts->wd;
+ if ((cwd = getcwd(wd_buff, MAXPATHLEN+1)) == NULL) {
+ /* on some OSs this call opens a fd in the
+ background which means that this can
+ return EMFILE */
+ int err = errno;
+ close_pipes(ifd, ofd);
+ erts_free(ERTS_ALC_T_TMP, (void *) cmd_line);
+ if (new_environ != environ)
+ erts_free(ERTS_ALC_T_ENVIRONMENT, (void *) new_environ);
+ erts_smp_rwmtx_runlock(&environ_rwmtx);
+ errno = err;
+ return ERL_DRV_ERROR_ERRNO;
}
+ wd = opts->wd;
+
{
struct iovec *io_vector;
int iov_len = 5;
@@ -660,6 +658,8 @@ static ErlDrvData spawn_start(ErlDrvPort port_num, char* name,
| (opts->read_write & DO_READ ? FORKER_FLAG_DO_READ : 0)
| (opts->read_write & DO_WRITE ? FORKER_FLAG_DO_WRITE : 0);
+ if (wd) iov_len++;
+
/* count number of elements in environment */
while(new_environ[env_len] != NULL)
env_len++;
@@ -688,6 +688,10 @@ static ErlDrvData spawn_start(ErlDrvPort port_num, char* name,
return ERL_DRV_ERROR_ERRNO;
}
+ /*
+ * Whitebox test port_SUITE:pipe_limit_env
+ * assumes this command payload format.
+ */
io_vector[i].iov_base = (void*)&buffsz;
io_vector[i++].iov_len = sizeof(buffsz);
@@ -700,10 +704,16 @@ static ErlDrvData spawn_start(ErlDrvPort port_num, char* name,
io_vector[i++].iov_len = len;
buffsz += len;
- io_vector[i].iov_base = wd;
+ io_vector[i].iov_base = cwd;
io_vector[i].iov_len = strlen(io_vector[i].iov_base) + 1;
buffsz += io_vector[i++].iov_len;
+ if (wd) {
+ io_vector[i].iov_base = wd;
+ io_vector[i].iov_len = strlen(io_vector[i].iov_base) + 1;
+ buffsz += io_vector[i++].iov_len;
+ }
+
io_vector[i].iov_base = nullbuff;
io_vector[i++].iov_len = 1;
buffsz += io_vector[i-1].iov_len;
@@ -762,12 +772,17 @@ static ErlDrvData spawn_start(ErlDrvPort port_num, char* name,
}
}
- if (res < buffsz) {
+ if (res < (buffsz + sizeof(buffsz))) {
/* we only wrote part of the command payload. Enqueue the rest. */
for (i = 0; i < iov_len; i++) {
- driver_enq(port_num, io_vector[i].iov_base, io_vector[i].iov_len);
+ if (res >= io_vector[i].iov_len)
+ res -= io_vector[i].iov_len;
+ else {
+ driver_enq(port_num, io_vector[i].iov_base + res,
+ io_vector[i].iov_len - res);
+ res = 0;
+ }
}
- driver_deq(port_num, res);
driver_select(port_num, ofd[1], ERL_DRV_WRITE|ERL_DRV_USE, 1);
}
diff --git a/erts/emulator/sys/unix/sys_time.c b/erts/emulator/sys/unix/sys_time.c
index 60f8decd96..4f26639703 100644
--- a/erts/emulator/sys/unix/sys_time.c
+++ b/erts/emulator/sys/unix/sys_time.c
@@ -219,7 +219,10 @@ sys_init_time(ErtsSysInitTimeResult *init_resp)
#endif
init_resp->os_monotonic_time_info.resolution = (Uint64) 1000*1000*1000;
-#if defined(HAVE_CLOCK_GETRES) && defined(MONOTONIC_CLOCK_ID)
+#if defined(ERTS_HAVE_MACH_CLOCK_GETRES) && defined(MONOTONIC_CLOCK_ID)
+ init_resp->os_monotonic_time_info.resolution
+ = mach_clock_getres(&internal_state.r.o.mach.clock.monotonic);
+#elif defined(HAVE_CLOCK_GETRES) && defined(MONOTONIC_CLOCK_ID)
{
struct timespec ts;
if (clock_getres(MONOTONIC_CLOCK_ID, &ts) == 0) {
@@ -229,9 +232,6 @@ sys_init_time(ErtsSysInitTimeResult *init_resp)
init_resp->os_monotonic_time_info.resolution = 1;
}
}
-#elif defined(ERTS_HAVE_MACH_CLOCK_GETRES) && defined(MONOTONIC_CLOCK_ID)
- init_resp->os_monotonic_time_info.resolution
- = mach_clock_getres(&internal_state.r.o.mach.clock.monotonic);
#endif
#ifdef MONOTONIC_CLOCK_ID_STR
@@ -379,7 +379,10 @@ sys_init_time(ErtsSysInitTimeResult *init_resp)
init_resp->os_system_time_info.locked_use = 0;
init_resp->os_system_time_info.resolution = (Uint64) 1000*1000*1000;
-#if defined(HAVE_CLOCK_GETRES) && defined(WALL_CLOCK_ID)
+#if defined(ERTS_HAVE_MACH_CLOCK_GETRES) && defined(WALL_CLOCK_ID)
+ init_resp->os_system_time_info.resolution
+ = mach_clock_getres(&internal_state.r.o.mach.clock.wall);
+#elif defined(HAVE_CLOCK_GETRES) && defined(WALL_CLOCK_ID)
{
struct timespec ts;
if (clock_getres(WALL_CLOCK_ID, &ts) == 0) {
@@ -389,9 +392,6 @@ sys_init_time(ErtsSysInitTimeResult *init_resp)
init_resp->os_system_time_info.resolution = 1;
}
}
-#elif defined(ERTS_HAVE_MACH_CLOCK_GETRES) && defined(WALL_CLOCK_ID)
- init_resp->os_system_time_info.resolution
- = mach_clock_getres(&internal_state.r.o.mach.clock.wall);
#endif
#if defined(OS_SYSTEM_TIME_USING_CLOCK_GETTIME)
diff --git a/erts/emulator/sys/win32/erl_poll.c b/erts/emulator/sys/win32/erl_poll.c
index 94f3840b5f..f23c7ab03d 100644
--- a/erts/emulator/sys/win32/erl_poll.c
+++ b/erts/emulator/sys/win32/erl_poll.c
@@ -424,7 +424,7 @@ static ERTS_INLINE int
wakeup_cause(ErtsPollSet ps)
{
int res;
- erts_aint32_t wakeup_state = erts_atomic32_read_nob(&ps->wakeup_state);
+ erts_aint32_t wakeup_state = erts_atomic32_read_acqb(&ps->wakeup_state);
switch (wakeup_state) {
case ERTS_POLL_WOKEN_IO_READY:
res = 0;
@@ -487,9 +487,8 @@ wake_poller(ErtsPollSet ps, int io_ready)
{
erts_aint32_t wakeup_state;
if (io_ready) {
- /* We may set the event multiple times. This is, however, harmless. */
- wakeup_state = erts_atomic32_read_nob(&ps->wakeup_state);
- erts_atomic32_set_relb(&ps->wakeup_state, ERTS_POLL_WOKEN_IO_READY);
+ wakeup_state = erts_atomic32_xchg_relb(&ps->wakeup_state,
+ ERTS_POLL_WOKEN_IO_READY);
}
else {
ERTS_THR_MEMORY_BARRIER;
diff --git a/erts/emulator/sys/win32/erl_win_sys.h b/erts/emulator/sys/win32/erl_win_sys.h
index 7bdfac168b..04fbf23109 100644
--- a/erts/emulator/sys/win32/erl_win_sys.h
+++ b/erts/emulator/sys/win32/erl_win_sys.h
@@ -187,7 +187,7 @@ typedef ErtsMonotonicTime ErtsSysPerfCounter;
ErtsSystemTime erts_os_system_time(void);
-#define ERTS_MONOTONIC_TIME_MIN (((ErtsMonotonicTime) 1) << 63)
+#define ERTS_MONOTONIC_TIME_MIN ((ErtsMonotonicTime) (1ULL << 63))
#define ERTS_MONOTONIC_TIME_MAX (~ERTS_MONOTONIC_TIME_MIN)
#define ERTS_HAVE_OS_MONOTONIC_TIME_SUPPORT 1
diff --git a/erts/emulator/test/Makefile b/erts/emulator/test/Makefile
index b580211eff..2e48c475d5 100644
--- a/erts/emulator/test/Makefile
+++ b/erts/emulator/test/Makefile
@@ -70,6 +70,7 @@ MODULES= \
guard_SUITE \
hash_SUITE \
hibernate_SUITE \
+ hipe_SUITE \
list_bif_SUITE \
lttng_SUITE \
map_SUITE \
diff --git a/erts/emulator/test/after_SUITE.erl b/erts/emulator/test/after_SUITE.erl
index 4f20ad3656..b1f7e06bf5 100644
--- a/erts/emulator/test/after_SUITE.erl
+++ b/erts/emulator/test/after_SUITE.erl
@@ -223,7 +223,7 @@ recv_after_32bit(_, _) ->
blaster() ->
receive
{go, TimeoutTime} ->
- Tmo = TimeoutTime - erlang:monotonic_time(milli_seconds),
+ Tmo = TimeoutTime - erlang:monotonic_time(millisecond),
receive after Tmo -> ok end
end.
@@ -234,7 +234,7 @@ spawn_blasters(N) ->
receive_after_blast(Config) when is_list(Config) ->
PMs = spawn_blasters(10000),
- TimeoutTime = erlang:monotonic_time(milli_seconds) + 5000,
+ TimeoutTime = erlang:monotonic_time(millisecond) + 5000,
lists:foreach(fun ({P, _}) -> P ! {go, TimeoutTime} end, PMs),
lists:foreach(fun ({P, M}) ->
receive
diff --git a/erts/emulator/test/alloc_SUITE.erl b/erts/emulator/test/alloc_SUITE.erl
index 1f7b499dcb..3a721095e2 100644
--- a/erts/emulator/test/alloc_SUITE.erl
+++ b/erts/emulator/test/alloc_SUITE.erl
@@ -73,16 +73,32 @@ migration(Cfg) ->
end.
erts_mmap(Config) when is_list(Config) ->
- case os:type() of
- {unix, _} ->
+ case {os:type(), mmsc_flags()} of
+ {{unix,_}, false} ->
[erts_mmap_do(Config, SCO, SCRPM, SCRFSD)
|| SCO <-[true,false], SCRFSD <-[1234,0], SCRPM <- [true,false]];
- {SkipOs,_} ->
+ {{unix,_}, Flags} ->
+ {skipped, Flags};
+ {{SkipOs,_},_} ->
{skipped,
lists:flatten(["Not run on "
| io_lib:format("~p",[SkipOs])])}
end.
+%% Check if there are ERL_FLAGS set that will mess up this test case
+mmsc_flags() ->
+ case mmsc_flags("ERL_FLAGS") of
+ false -> mmsc_flags("ERL_ZFLAGS");
+ Flags -> Flags
+ end.
+mmsc_flags(Env) ->
+ case os:getenv(Env) of
+ false -> false;
+ V -> case string:str(V, "+MMsc") of
+ 0 -> false;
+ P -> Env ++ "=" ++ string:substr(V, P)
+ end
+ end.
erts_mmap_do(Config, SCO, SCRPM, SCRFSD) ->
%% We use the number of schedulers + 1 * approx main carriers size
@@ -326,7 +342,7 @@ start_node_1(Config, Opts) ->
++ "-"
++ atom_to_list(proplists:get_value(testcase, Config))
++ "-"
- ++ integer_to_list(erlang:system_time(seconds))
+ ++ integer_to_list(erlang:system_time(second))
++ "-"
++ integer_to_list(erlang:unique_integer([positive]))),
test_server:start_node(Name, slave, [{args, Opts++" -pa "++Pa}]).
diff --git a/erts/emulator/test/bif_SUITE.erl b/erts/emulator/test/bif_SUITE.erl
index 26bb416bf0..d31399e4af 100644
--- a/erts/emulator/test/bif_SUITE.erl
+++ b/erts/emulator/test/bif_SUITE.erl
@@ -141,9 +141,11 @@ guard_bifs_in_erl_bif_types(_Config) ->
shadow_comments(_Config) ->
ensure_erl_bif_types_compiled(),
+ ErlangList = [{erlang,F,A} || {F,A} <- erlang:module_info(exports),
+ not is_operator(F,A)],
List0 = erlang:system_info(snifs),
- List1 = [MFA || {M,_,_}=MFA <- List0, M =/= hipe_bifs],
- List = [MFA || MFA <- List1, not is_operator(MFA)],
+ List1 = [MFA || {M,_,_}=MFA <- List0, M =/= hipe_bifs, M =/= erlang],
+ List = List1 ++ ErlangList,
HasTypes = [MFA || {M,F,A}=MFA <- List,
erl_bif_types:is_known(M, F, A)],
Path = get_code_path(),
@@ -253,12 +255,15 @@ specs(_) ->
end.
is_operator({erlang,F,A}) ->
+ is_operator(F,A);
+is_operator(_) -> false.
+
+is_operator(F,A) ->
erl_internal:arith_op(F, A) orelse
erl_internal:bool_op(F, A) orelse
erl_internal:comp_op(F, A) orelse
erl_internal:list_op(F, A) orelse
- erl_internal:send_op(F, A);
-is_operator(_) -> false.
+ erl_internal:send_op(F, A).
extract_specs(M, Abstr) ->
[{make_mfa(M, Name),Spec} || {attribute,_,spec,{Name,Spec}} <- Abstr].
@@ -646,6 +651,8 @@ erlang_halt(Config) when is_list(Config) ->
{badrpc,nodedown} = rpc:call(N2, erlang, halt, [0]),
{ok,N3} = slave:start(H, halt_node3),
{badrpc,nodedown} = rpc:call(N3, erlang, halt, [0,[]]),
+ {ok,N4} = slave:start(H, halt_node4),
+ {badrpc,nodedown} = rpc:call(N4, erlang, halt, [lists:duplicate(300,$x)]),
% This test triggers a segfault when dumping a crash dump
% to make sure that we can handle it properly.
diff --git a/erts/emulator/test/bs_construct_SUITE.erl b/erts/emulator/test/bs_construct_SUITE.erl
index 941cb435f7..95042ac802 100644
--- a/erts/emulator/test/bs_construct_SUITE.erl
+++ b/erts/emulator/test/bs_construct_SUITE.erl
@@ -23,6 +23,7 @@
-module(bs_construct_SUITE).
-export([all/0, suite/0,
+ init_per_suite/1, end_per_suite/1,
test1/1, test2/1, test3/1, test4/1, test5/1, testf/1,
not_used/1, in_guard/1,
mem_leak/1, coerce_to_float/1, bjorn/1,
@@ -43,6 +44,12 @@ all() ->
copy_writable_binary, kostis, dynamic, bs_add, otp_7422, zero_width,
bad_append, bs_add_overflow].
+init_per_suite(Config) ->
+ Config.
+
+end_per_suite(_Config) ->
+ application:stop(os_mon).
+
big(1) ->
57285702734876389752897683.
@@ -527,7 +534,7 @@ huge_float_check({'EXIT',{system_limit,_}}) -> ok;
huge_float_check({'EXIT',{badarg,_}}) -> ok.
huge_binary(Config) when is_list(Config) ->
- ct:timetrap({seconds, 30}),
+ ct:timetrap({seconds, 60}),
16777216 = size(<<0:(id(1 bsl 26)),(-1):(id(1 bsl 26))>>),
garbage_collect(),
{Shift,Return} = case free_mem() of
@@ -561,30 +568,13 @@ huge_binary(Config) when is_list(Config) ->
end.
free_mem() ->
- Cmd = "uname; free",
- Output = string:tokens(os:cmd(Cmd), "\n"),
- io:format("Output from command ~p\n~p\n",[Cmd,Output]),
- case Output of
- [OS, ColumnNames, Values | _] ->
- case string:str(OS,"Linux") of
- 0 ->
- io:format("Unknown OS\n",[]),
- undefined;
- _ ->
- case {string:tokens(ColumnNames, " \t"),
- string:tokens(Values, " \t")} of
- {[_,_,"free"|_],["Mem:",_,_,FreeKb|_]} ->
- list_to_integer(FreeKb) div 1024;
- _ ->
- io:format("Failed to parse output from 'free':\n",[]),
- undefined
- end
- end;
- _ ->
- io:format("Too few lines in output\n",[]),
- undefined
+ {ok,Apps} = application:ensure_all_started(os_mon),
+ Mem = memsup:get_system_memory_data(),
+ [ok = application:stop(App)||App <- Apps],
+ case proplists:get_value(free_memory,Mem) of
+ undefined -> undefined;
+ Val -> Val div 1024
end.
-
system_limit(Config) when is_list(Config) ->
WordSize = erlang:system_info(wordsize),
@@ -614,8 +604,7 @@ system_limit_32() ->
{'EXIT',{system_limit,_}} = (catch <<42:536870912/unit:8>>),
{'EXIT',{system_limit,_}} = (catch <<42:(id(536870912))/unit:8>>),
{'EXIT',{system_limit,_}} = (catch <<0:(id(8)),42:536870912/unit:8>>),
- {'EXIT',{system_limit,_}} =
- (catch <<0:(id(8)),42:(id(536870912))/unit:8>>),
+ {'EXIT',{system_limit,_}} = (catch <<0:(id(8)),42:(id(536870912))/unit:8>>),
%% The size would be silently truncated, resulting in a crash.
{'EXIT',{system_limit,_}} = (catch <<0:(1 bsl 35)>>),
@@ -627,16 +616,10 @@ system_limit_32() ->
ok.
badarg(Config) when is_list(Config) ->
- {'EXIT',{badarg,_}} =
- (catch <<0:(id(1 bsl 100)),0:(id(-1))>>),
- {'EXIT',{badarg,_}} =
- (catch <<0:(id(1 bsl 100)),0:(id(-(1 bsl 70)))>>),
- {'EXIT',{badarg,_}} =
- (catch <<0:(id(-(1 bsl 70))),0:(id(1 bsl 100))>>),
-
- {'EXIT',{badarg,_}} =
- (catch <<(id(<<>>))/binary,0:(id(-(1 bsl 100)))>>),
-
+ {'EXIT',{badarg,_}} = (catch <<0:(id(1 bsl 100)),0:(id(-1))>>),
+ {'EXIT',{badarg,_}} = (catch <<0:(id(1 bsl 100)),0:(id(-(1 bsl 70)))>>),
+ {'EXIT',{badarg,_}} = (catch <<0:(id(-(1 bsl 70))),0:(id(1 bsl 100))>>),
+ {'EXIT',{badarg,_}} = (catch <<(id(<<>>))/binary,0:(id(-(1 bsl 100)))>>),
ok.
copy_writable_binary(Config) when is_list(Config) ->
@@ -906,10 +889,14 @@ append_unit_16(Bin) ->
%% Produce a large result of bs_add that, if cast to signed int, would overflow
%% into a negative number that fits a smallnum.
-bs_add_overflow(Config) ->
+bs_add_overflow(_Config) ->
+ Memsize = memsize(),
+ io:format("Memsize = ~w Bytes~n", [Memsize]),
case erlang:system_info(wordsize) of
8 ->
{skip, "64-bit architecture"};
+ _ when Memsize < (2 bsl 30) ->
+ {skip, "Less then 2 GB of memory"};
4 ->
Large = <<0:((1 bsl 30)-1)>>,
{'EXIT',{system_limit,_}} =
@@ -918,5 +905,10 @@ bs_add_overflow(Config) ->
Large/bits>>),
ok
end.
-
+
id(I) -> I.
+
+memsize() ->
+ application:ensure_all_started(os_mon),
+ {Tot,_Used,_} = memsup:get_memory_data(),
+ Tot.
diff --git a/erts/emulator/test/busy_port_SUITE.erl b/erts/emulator/test/busy_port_SUITE.erl
index bb0632ae08..7094cee992 100644
--- a/erts/emulator/test/busy_port_SUITE.erl
+++ b/erts/emulator/test/busy_port_SUITE.erl
@@ -469,12 +469,12 @@ hs_busy_pcmd(Prt, Opts, StartFun, EndFun) ->
P = spawn_link(fun () ->
erlang:yield(),
Tester ! {self(), doing_port_command},
- Start = erlang:monotonic_time(micro_seconds),
+ Start = erlang:monotonic_time(microsecond),
Res = try {return,
port_command(Prt, [], Opts)}
catch Exception:Error -> {Exception, Error}
end,
- End = erlang:monotonic_time(micro_seconds),
+ End = erlang:monotonic_time(microsecond),
Time = round((End - Start)/1000),
Tester ! {self(), port_command_result, Res, Time}
end),
@@ -717,7 +717,7 @@ run_command(_M,spawn,{Args,Opts}) ->
run_command(M,spawn,Args) ->
run_command(M,spawn,{Args,[]});
run_command(Mod,Func,Args) ->
- erlang:display({{Mod,Func,Args}, erlang:system_time(micro_seconds)}),
+ erlang:display({{Mod,Func,Args}, erlang:system_time(microsecond)}),
apply(Mod,Func,Args).
validate_scenario(Data,[{print,Var}|T]) ->
diff --git a/erts/emulator/test/code_SUITE.erl b/erts/emulator/test/code_SUITE.erl
index 29b95ef674..34515efa3d 100644
--- a/erts/emulator/test/code_SUITE.erl
+++ b/erts/emulator/test/code_SUITE.erl
@@ -20,13 +20,14 @@
-module(code_SUITE).
-export([all/0, suite/0, init_per_suite/1, end_per_suite/1,
- versions/1,new_binary_types/1,
+ versions/1,new_binary_types/1, call_purged_fun_code_gone/1,
+ call_purged_fun_code_reload/1, call_purged_fun_code_there/1,
t_check_process_code/1,t_check_old_code/1,
t_check_process_code_ets/1,
external_fun/1,get_chunk/1,module_md5/1,make_stub/1,
make_stub_many_funs/1,constant_pools/1,constant_refc_binaries/1,
false_dependency/1,coverage/1,fun_confusion/1,
- t_copy_literals/1]).
+ t_copy_literals/1, t_copy_literals_frags/1]).
-define(line_trace, 1).
-include_lib("common_test/include/ct.hrl").
@@ -34,11 +35,12 @@
suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
- [versions, new_binary_types, t_check_process_code,
+ [versions, new_binary_types, call_purged_fun_code_gone,
+ call_purged_fun_code_reload, call_purged_fun_code_there, t_check_process_code,
t_check_process_code_ets, t_check_old_code, external_fun, get_chunk,
module_md5, make_stub, make_stub_many_funs,
constant_pools, constant_refc_binaries, false_dependency,
- coverage, fun_confusion, t_copy_literals].
+ coverage, fun_confusion, t_copy_literals, t_copy_literals_frags].
init_per_suite(Config) ->
erts_debug:set_internal_state(available_internal_state, true),
@@ -127,12 +129,169 @@ new_binary_types(Config) when is_list(Config) ->
bit_sized_binary(Bin))),
ok.
+call_purged_fun_code_gone(Config) when is_list(Config) ->
+ Priv = proplists:get_value(priv_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
+ call_purged_fun_test(Priv, Data, code_gone),
+ ok.
+
+call_purged_fun_code_reload(Config) when is_list(Config) ->
+ Priv = proplists:get_value(priv_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
+ Path = code:get_path(),
+ true = code:add_path(Priv),
+ try
+ call_purged_fun_test(Priv, Data, code_reload)
+ after
+ code:set_path(Path)
+ end,
+ ok.
+
+call_purged_fun_code_there(Config) when is_list(Config) ->
+ Priv = proplists:get_value(priv_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
+ call_purged_fun_test(Priv, Data, code_there),
+ ok.
+
+call_purged_fun_test(Priv, Data, Type) ->
+ File = filename:join(Data, "my_code_test2"),
+ Code = filename:join(Priv, "my_code_test2"),
+
+ catch erlang:purge_module(my_code_test2),
+ catch erlang:delete_module(my_code_test2),
+ catch erlang:purge_module(my_code_test2),
+
+ {ok,my_code_test2} = c:c(File, [{outdir,Priv}]),
+
+ T = ets:new(my_code_test2_fun_table, []),
+ ets:insert(T, {my_fun,my_code_test2:make_fun(4711)}),
+ ets:insert(T, {my_fun2,my_code_test2:make_fun2()}),
+
+ spawn(fun () ->
+ [{my_fun2,F2}] = ets:lookup(T, my_fun2),
+ F2(fun () ->
+ receive after infinity -> ok end
+ end,
+ fun () -> ok end),
+ exit(completed)
+ end),
+
+ PurgeType = case Type of
+ code_gone ->
+ ok = file:delete(Code++".beam"),
+ true;
+ code_reload ->
+ true;
+ code_there ->
+ false
+ end,
+
+ true = erlang:delete_module(my_code_test2),
+
+ Purge = start_purge(my_code_test2, PurgeType),
+
+ {P0, M0} = spawn_monitor(fun () ->
+ [{my_fun,F}] = ets:lookup(T, my_fun),
+ 4712 = F(1),
+ exit(completed)
+ end),
+
+ wait_until(fun () ->
+ {status, suspended}
+ == process_info(P0, status)
+ end),
+
+ ok = continue_purge(Purge),
+
+ {P1, M1} = spawn_monitor(fun () ->
+ [{my_fun,F}] = ets:lookup(T, my_fun),
+ 4713 = F(2),
+ exit(completed)
+ end),
+ {P2, M2} = spawn_monitor(fun () ->
+ [{my_fun,F}] = ets:lookup(T, my_fun),
+ 4714 = F(3),
+ exit(completed)
+ end),
+
+ wait_until(fun () ->
+ {status, suspended}
+ == process_info(P1, status)
+ end),
+ wait_until(fun () ->
+ {status, suspended}
+ == process_info(P2, status)
+ end),
+
+ {current_function,
+ {erts_code_purger,
+ pending_purge_lambda,
+ 3}} = process_info(P0, current_function),
+ {current_function,
+ {erts_code_purger,
+ pending_purge_lambda,
+ 3}} = process_info(P1, current_function),
+ {current_function,
+ {erts_code_purger,
+ pending_purge_lambda,
+ 3}} = process_info(P2, current_function),
+
+ case Type of
+ code_there ->
+ false = complete_purge(Purge);
+ _ ->
+ {true, true} = complete_purge(Purge)
+ end,
+
+ case Type of
+ code_gone ->
+ receive
+ {'DOWN', M0, process, P0, Reason0} ->
+ {undef, _} = Reason0
+ end,
+ receive
+ {'DOWN', M1, process, P1, Reason1} ->
+ {undef, _} = Reason1
+ end,
+ receive
+ {'DOWN', M2, process, P2, Reason2} ->
+ {undef, _} = Reason2
+ end;
+ _ ->
+ receive
+ {'DOWN', M0, process, P0, Reason0} ->
+ completed = Reason0
+ end,
+ receive
+ {'DOWN', M1, process, P1, Reason1} ->
+ completed = Reason1
+ end,
+ receive
+ {'DOWN', M2, process, P2, Reason2} ->
+ completed = Reason2
+ end,
+ catch erlang:purge_module(my_code_test2),
+ catch erlang:delete_module(my_code_test2),
+ catch erlang:purge_module(my_code_test2)
+ end,
+ ok.
+
t_check_process_code(Config) when is_list(Config) ->
+ case check_process_code_handle(indirect_references) of
+ false -> {skipped, "check_process_code() ignores funs"};
+ true -> t_check_process_code_test(Config)
+ end.
+
+t_check_process_code_test(Config) ->
Priv = proplists:get_value(priv_dir, Config),
Data = proplists:get_value(data_dir, Config),
File = filename:join(Data, "my_code_test"),
Code = filename:join(Priv, "my_code_test"),
+ catch erlang:purge_module(my_code_test),
+ catch erlang:delete_module(my_code_test),
+ catch erlang:purge_module(my_code_test),
+
{ok,my_code_test} = c:c(File, [{outdir,Priv}]),
MyFun = fun(X, Y) -> X + Y end, %Confuse things.
@@ -231,11 +390,16 @@ gc1() -> ok.
%% Test check_process_code/2 in combination with a fun obtained from an ets table.
t_check_process_code_ets(Config) when is_list(Config) ->
- case test_server:is_native(?MODULE) of
- true ->
- {skip,"Native code"};
- false ->
- do_check_process_code_ets(Config)
+ case check_process_code_handle(indirect_references) of
+ false ->
+ {skipped, "check_process_code() ignores funs"};
+ true ->
+ case test_server:is_native(?MODULE) of
+ true ->
+ {skip,"Native code"};
+ false ->
+ do_check_process_code_ets(Config)
+ end
end.
do_check_process_code_ets(Config) ->
@@ -243,8 +407,9 @@ do_check_process_code_ets(Config) ->
Data = proplists:get_value(data_dir, Config),
File = filename:join(Data, "my_code_test"),
- erlang:purge_module(my_code_test),
- erlang:delete_module(my_code_test),
+ catch erlang:purge_module(my_code_test),
+ catch erlang:delete_module(my_code_test),
+ catch erlang:purge_module(my_code_test),
{ok,my_code_test} = c:c(File, [{outdir,Priv}]),
T = ets:new(my_code_test, []),
@@ -295,8 +460,8 @@ t_check_old_code(Config) when is_list(Config) ->
Data = proplists:get_value(data_dir, Config),
File = filename:join(Data, "my_code_test"),
- erlang:purge_module(my_code_test),
- erlang:delete_module(my_code_test),
+ catch erlang:purge_module(my_code_test),
+ catch erlang:delete_module(my_code_test),
catch erlang:purge_module(my_code_test),
false = erlang:check_old_code(my_code_test),
@@ -766,6 +931,134 @@ t_copy_literals(Config) when is_list(Config) ->
ok = flush(),
ok.
+-define(mod, t_copy_literals_frags).
+t_copy_literals_frags(Config) when is_list(Config) ->
+ Bin = gen_lit(?mod,[{a,{1,2,3,4,5,6,7}},
+ {b,"hello world"},
+ {c, <<"hello world">>},
+ {d, {"hello world", {1.0, 2.0, <<"some">>, "string"}}},
+ {e, <<"off heap", 0, 1, 2, 3, 4, 5, 6, 7,
+ 8, 9,10,11,12,13,14,15,
+ 0, 1, 2, 3, 4, 5, 6, 7,
+ 8, 9,10,11,12,13,14,15,
+ 0, 1, 2, 3, 4, 5, 6, 7,
+ 8, 9,10,11,12,13,14,15,
+ 0, 1, 2, 3, 4, 5, 6, 7,
+ 8, 9,10,11,12,13,14,15>>}]),
+
+ {module, ?mod} = erlang:load_module(?mod, Bin),
+ N = 6000,
+ Recv = spawn_opt(fun() -> receive
+ read ->
+ io:format("reading"),
+ literal_receiver()
+ end
+ end, [link,{min_heap_size, 10000}]),
+ Switcher = spawn_link(fun() -> literal_switcher() end),
+ Pids = [spawn_opt(fun() -> receive
+ {Pid, go, Recv, N} ->
+ io:format("sender batch (~w) start ~w~n",[N,self()]),
+ literal_sender(N,Recv),
+ Pid ! {self(), ok}
+ end
+ end, [link,{min_heap_size,800}]) || _ <- lists:seq(1,100)],
+ _ = [Pid ! {self(), go, Recv, N} || Pid <- Pids],
+ %% don't read immediately
+ timer:sleep(5),
+ Recv ! read,
+ Switcher ! {switch,?mod,Bin,[Recv|Pids],200},
+ _ = [receive {Pid, ok} -> ok end || Pid <- Pids],
+ Switcher ! {self(), done},
+ receive {Switcher, ok} -> ok end,
+ Recv ! {self(), done},
+ receive {Recv, ok} -> ok end,
+ ok.
+
+literal_receiver() ->
+ receive
+ {Pid, done} ->
+ io:format("reader_done~n"),
+ Pid ! {self(), ok};
+ {_Pid, msg, [A,B,C,D,E]} ->
+ A = ?mod:a(),
+ B = ?mod:b(),
+ C = ?mod:c(),
+ D = ?mod:d(),
+ E = ?mod:e(),
+ literal_receiver();
+ {Pid, sender_confirm} ->
+ io:format("sender confirm ~w~n", [Pid]),
+ Pid ! {self(), ok},
+ literal_receiver()
+ end.
+
+literal_sender(0, Recv) ->
+ Recv ! {self(), sender_confirm},
+ receive {Recv, ok} -> ok end;
+literal_sender(N, Recv) ->
+ Recv ! {self(), msg, [?mod:a(),
+ ?mod:b(),
+ ?mod:c(),
+ ?mod:d(),
+ ?mod:e()]},
+ literal_sender(N - 1, Recv).
+
+literal_switcher() ->
+ receive
+ {switch,Mod,Bin,Pids,Tmo} ->
+ literal_switcher(Mod,Bin,Pids,Tmo)
+ end.
+literal_switcher(Mod,Bin,Pids,Tmo) ->
+ receive
+ {Pid,done} ->
+ Pid ! {self(),ok}
+ after Tmo ->
+ io:format("load module ~w~n", [Mod]),
+ {module, Mod} = erlang:load_module(Mod,Bin),
+ ok = check_and_purge(Pids,Mod),
+ io:format("purge complete ~w~n", [Mod]),
+ literal_switcher(Mod,Bin,Pids,Tmo+Tmo)
+ end.
+
+check_and_purge([],Mod) ->
+ erlang:purge_module(Mod),
+ ok;
+check_and_purge(Pids,Mod) ->
+ io:format("purge ~w~n", [Mod]),
+ Tag = make_ref(),
+ _ = [begin
+ erlang:check_process_code(Pid,Mod,[{async,{Tag,Pid}}])
+ end || Pid <- Pids],
+ Retry = check_and_purge_receive(Pids,Tag,[]),
+ check_and_purge(Retry,Mod).
+
+check_and_purge_receive([Pid|Pids],Tag,Retry) ->
+ receive
+ {check_process_code, {Tag, Pid}, false} ->
+ check_and_purge_receive(Pids,Tag,Retry);
+ {check_process_code, {Tag, Pid}, true} ->
+ check_and_purge_receive(Pids,Tag,[Pid|Retry])
+ end;
+check_and_purge_receive([],_,Retry) ->
+ Retry.
+
+
+gen_lit(Module,Terms) ->
+ FunStrings = [lists:flatten(io_lib:format("~w() -> ~w.~n", [F,Term]))||{F,Term}<-Terms],
+ FunForms = function_forms(FunStrings),
+ Forms = [{attribute,erl_anno:new(1),module,Module},
+ {attribute,erl_anno:new(2),export,[FA || {FA,_} <- FunForms]}] ++
+ [Function || {_, Function} <- FunForms],
+ {ok, Module, Bin} = compile:forms(Forms),
+ Bin.
+
+function_forms([]) -> [];
+function_forms([S|Ss]) ->
+ {ok, Ts,_} = erl_scan:string(S),
+ {ok, Form} = erl_parse:parse_form(Ts),
+ Fun = element(3, Form),
+ Arity = element(4, Form),
+ [{{Fun,Arity}, Form}|function_forms(Ss)].
chase_msg(0, Pid) ->
chase_loop(Pid);
@@ -843,3 +1136,39 @@ flush() ->
receive _ -> flush() after 0 -> ok end.
id(I) -> I.
+
+check_process_code_handle(What) ->
+ lists:member(What, erlang:system_info(check_process_code)).
+
+wait_until(Fun) ->
+ case Fun() of
+ true ->
+ ok;
+ false ->
+ receive after 100 -> ok end,
+ wait_until(Fun)
+ end.
+
+start_purge(Mod, Type) when is_atom(Mod)
+ andalso ((Type == true)
+ orelse (Type == false)) ->
+ Ref = make_ref(),
+ erts_code_purger ! {test_purge, Mod, self(), Type, Ref},
+ receive
+ {started, Ref} ->
+ Ref
+ end.
+
+continue_purge(Ref) when is_reference(Ref) ->
+ erts_code_purger ! {continue, Ref},
+ receive
+ {continued, Ref} ->
+ ok
+ end.
+
+complete_purge(Ref) when is_reference(Ref) ->
+ erts_code_purger ! {complete, Ref},
+ receive
+ {test_purge, Res, Ref} ->
+ Res
+ end.
diff --git a/erts/emulator/test/code_SUITE_data/my_code_test.erl b/erts/emulator/test/code_SUITE_data/my_code_test.erl
index d2386157d6..9d12aa9897 100644
--- a/erts/emulator/test/code_SUITE_data/my_code_test.erl
+++ b/erts/emulator/test/code_SUITE_data/my_code_test.erl
@@ -24,5 +24,3 @@
make_fun(A) ->
fun(X) -> A + X end.
-
-
diff --git a/erts/emulator/test/code_SUITE_data/my_code_test2.erl b/erts/emulator/test/code_SUITE_data/my_code_test2.erl
new file mode 100644
index 0000000000..57973535d4
--- /dev/null
+++ b/erts/emulator/test/code_SUITE_data/my_code_test2.erl
@@ -0,0 +1,32 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+-module(my_code_test2).
+
+-export([make_fun/1, make_fun2/0]).
+
+make_fun(A) ->
+ fun(X) -> A + X end.
+
+make_fun2() ->
+ fun (F1,F2) ->
+ F1(),
+ F2()
+ end.
diff --git a/erts/emulator/test/dirty_nif_SUITE.erl b/erts/emulator/test/dirty_nif_SUITE.erl
index c3afbc0803..658bdc41b6 100644
--- a/erts/emulator/test/dirty_nif_SUITE.erl
+++ b/erts/emulator/test/dirty_nif_SUITE.erl
@@ -32,19 +32,26 @@
dirty_nif/1, dirty_nif_send/1,
dirty_nif_exception/1, call_dirty_nif_exception/1,
dirty_scheduler_exit/1, dirty_call_while_terminated/1,
- dirty_heap_access/1]).
+ dirty_heap_access/1, dirty_process_info/1,
+ dirty_process_register/1, dirty_process_trace/1,
+ code_purge/1, dirty_nif_send_traced/1]).
-define(nif_stub,nif_stub_error(?LINE)).
suite() -> [{ct_hooks,[ts_install_cth]}].
-all() ->
+all() ->
[dirty_nif,
dirty_nif_send,
dirty_nif_exception,
dirty_scheduler_exit,
dirty_call_while_terminated,
- dirty_heap_access].
+ dirty_heap_access,
+ dirty_process_info,
+ dirty_process_register,
+ dirty_process_trace,
+ code_purge,
+ dirty_nif_send_traced].
init_per_suite(Config) ->
try erlang:system_info(dirty_cpu_schedulers) of
@@ -141,9 +148,9 @@ dirty_scheduler_exit(Config) when is_list(Config) ->
[ok] = mcall(Node,
[fun() ->
ok = erlang:load_nif(NifLib, []),
- Start = erlang:monotonic_time(milli_seconds),
+ Start = erlang:monotonic_time(millisecond),
ok = test_dirty_scheduler_exit(),
- End = erlang:monotonic_time(milli_seconds),
+ End = erlang:monotonic_time(millisecond),
io:format("Time=~p ms~n", [End-Start]),
ok
end]),
@@ -187,7 +194,7 @@ dirty_call_while_terminated(Config) when is_list(Config) ->
blipp:blupp(Bin)
end,
[monitor,link]),
- receive {dirty_alive, Pid} -> ok end,
+ receive {dirty_alive, _Pid} -> ok end,
{value, {BinAddr, 4711, 2}} = lists:keysearch(4711, 2,
element(2,
process_info(self(),
@@ -226,7 +233,11 @@ dirty_call_while_terminated(Config) when is_list(Config) ->
process_info(self(),
binary))),
process_flag(trap_exit, OT),
- ok.
+ try
+ blipp:blupp(Bin)
+ catch
+ _ : _ -> ok
+ end.
dirty_heap_access(Config) when is_list(Config) ->
{ok, Node} = start_node(Config),
@@ -241,7 +252,7 @@ dirty_heap_access(Config) when is_list(Config) ->
end),
{N, R} = access_dirty_heap(Dirty, RGL, 0, 0),
receive
- {Pid, Res} ->
+ {_Pid, Res} ->
1000 = length(Res),
lists:foreach(fun (X) -> Ref = X end, Res)
end,
@@ -269,12 +280,220 @@ access_dirty_heap(Dirty, RGL, N, R) ->
end)
end.
+%% These tests verify that processes that access a process executing a
+%% dirty NIF where the main lock is needed for that access do not get
+%% blocked. Each test passes its pid to dirty_sleeper, which sends a
+%% 'ready' message when it's running on a dirty scheduler and just before
+%% it starts a 6 second sleep. When it receives the message, it verifies
+%% that access to the dirty process is as it expects. After the dirty
+%% process finishes its 6 second sleep but before it returns from the dirty
+%% scheduler, it sends a 'done' message. If the tester already received
+%% that message, the test fails because it means attempting to access the
+%% dirty process waited for that process to return to a regular scheduler,
+%% so verify that we haven't received that message, and also verify that
+%% the dirty process is still alive immediately after accessing it.
+dirty_process_info(Config) when is_list(Config) ->
+ access_dirty_process(
+ Config,
+ fun() -> ok end,
+ fun(NifPid) ->
+ PI = process_info(NifPid),
+ {current_function,{?MODULE,dirty_sleeper,1}} =
+ lists:keyfind(current_function, 1, PI),
+ ok
+ end,
+ fun(_) -> ok end).
+
+dirty_process_register(Config) when is_list(Config) ->
+ access_dirty_process(
+ Config,
+ fun() -> ok end,
+ fun(NifPid) ->
+ register(test_dirty_process_register, NifPid),
+ NifPid = whereis(test_dirty_process_register),
+ unregister(test_dirty_process_register),
+ false = lists:member(test_dirty_process_register,
+ registered()),
+ ok
+ end,
+ fun(_) -> ok end).
+
+dirty_process_trace(Config) when is_list(Config) ->
+ access_dirty_process(
+ Config,
+ fun() ->
+ erlang:trace_pattern({?MODULE,dirty_sleeper,1},
+ [{'_',[],[{return_trace}]}],
+ [local,meta]),
+ ok
+ end,
+ fun(NifPid) ->
+ erlang:trace(NifPid, true, [call,timestamp]),
+ ok
+ end,
+ fun(NifPid) ->
+ receive
+ done ->
+ receive
+ {trace_ts,NifPid,call,{?MODULE,dirty_sleeper,_},_} ->
+ ok
+ after
+ 0 ->
+ error(missing_trace_call_message)
+ end,
+ receive
+ {trace_ts,NifPid,return_from,{?MODULE,dirty_sleeper,1},
+ ok,_} ->
+ ok
+ after
+ 100 ->
+ error(missing_trace_return_message)
+ end
+ after
+ 6500 ->
+ error(missing_done_message)
+ end,
+ ok
+ end).
+
+dirty_code_test_code() ->
+ "
+-module(dirty_code_test).
+
+-export([func/1]).
+
+func(Fun) ->
+ Fun(),
+ blipp:blapp().
+
+".
+
+code_purge(Config) when is_list(Config) ->
+ Path = ?config(data_dir, Config),
+ File = filename:join(Path, "dirty_code_test.erl"),
+ ok = file:write_file(File, dirty_code_test_code()),
+ {ok, dirty_code_test, Bin} = compile:file(File, [binary]),
+ {module, dirty_code_test} = erlang:load_module(dirty_code_test, Bin),
+ Start = erlang:monotonic_time(),
+ {Pid1, Mon1} = spawn_monitor(fun () ->
+ dirty_code_test:func(fun () ->
+ %% Sleep for 6 seconds
+ %% in dirty nif...
+ dirty_sleeper()
+ end)
+ end),
+ {module, dirty_code_test} = erlang:load_module(dirty_code_test, Bin),
+ {Pid2, Mon2} = spawn_monitor(fun () ->
+ dirty_code_test:func(fun () ->
+ %% Sleep for 6 seconds
+ %% in dirty nif...
+ dirty_sleeper()
+ end)
+ end),
+ receive
+ {'DOWN', Mon1, process, Pid1, _} ->
+ ct:fail(premature_death)
+ after 100 ->
+ ok
+ end,
+ true = erlang:purge_module(dirty_code_test),
+ receive
+ {'DOWN', Mon1, process, Pid1, Reason1} ->
+ killed = Reason1
+ end,
+ receive
+ {'DOWN', Mon2, process, Pid2, _} ->
+ ct:fail(premature_death)
+ after 100 ->
+ ok
+ end,
+ true = erlang:delete_module(dirty_code_test),
+ receive
+ {'DOWN', Mon2, process, Pid2, _} ->
+ ct:fail(premature_death)
+ after 100 ->
+ ok
+ end,
+ true = erlang:purge_module(dirty_code_test),
+ receive
+ {'DOWN', Mon2, process, Pid2, Reason2} ->
+ killed = Reason2
+ end,
+ End = erlang:monotonic_time(),
+ Time = erlang:convert_time_unit(End-Start, native, milli_seconds),
+ io:format("Time=~p~n", [Time]),
+ true = Time =< 1000,
+ ok.
+
+dirty_nif_send_traced(Config) when is_list(Config) ->
+ Parent = self(),
+ Rcvr = spawn_link(fun() ->
+ Self = self(),
+ receive {ok, Self} -> ok end,
+ Parent ! {Self, received}
+ end),
+ Sndr = spawn_link(fun () ->
+ receive {Parent, go} -> ok end,
+ {ok, Rcvr} = send_wait_from_dirty_nif(Rcvr),
+ Parent ! {self(), sent}
+ end),
+ 1 = erlang:trace(Sndr, true, [send]),
+ Start = erlang:monotonic_time(),
+ Sndr ! {self(), go},
+ receive {trace, Sndr, send, {ok, Rcvr}, Rcvr} -> ok end,
+ receive {Rcvr, received} -> ok end,
+ End1 = erlang:monotonic_time(),
+ Time1 = erlang:convert_time_unit(End1-Start, native, 1000),
+ io:format("Time1: ~p milliseconds~n", [Time1]),
+ true = Time1 < 500,
+ receive {Sndr, sent} -> ok end,
+ End2 = erlang:monotonic_time(),
+ Time2 = erlang:convert_time_unit(End2-Start, native, 1000),
+ io:format("Time2: ~p milliseconds~n", [Time2]),
+ true = Time2 >= 1900,
+ ok.
+
%%
%% Internal...
%%
+access_dirty_process(Config, Start, Test, Finish) ->
+ {ok, Node} = start_node(Config, ""),
+ [ok] = mcall(Node,
+ [fun() ->
+ Path = ?config(data_dir, Config),
+ Lib = atom_to_list(?MODULE),
+ ok = erlang:load_nif(filename:join(Path,Lib), []),
+ ok = test_dirty_process_access(Start, Test, Finish)
+ end]),
+ stop_node(Node),
+ ok.
+
+test_dirty_process_access(Start, Test, Finish) ->
+ ok = Start(),
+ Self = self(),
+ NifPid = spawn_link(fun() ->
+ ok = dirty_sleeper(Self)
+ end),
+ ok = receive
+ ready ->
+ ok = Test(NifPid),
+ receive
+ done ->
+ error(dirty_process_info_blocked)
+ after
+ 0 ->
+ true = erlang:is_process_alive(NifPid),
+ ok
+ end
+ after
+ 3000 ->
+ error(timeout)
+ end,
+ ok = Finish(NifPid).
+
receive_any() ->
- receive M -> M end.
+ receive M -> M end.
start_node(Config) ->
start_node(Config, "").
@@ -285,7 +504,7 @@ start_node(Config, Args) when is_list(Config) ->
++ "-"
++ atom_to_list(proplists:get_value(testcase, Config))
++ "-"
- ++ integer_to_list(erlang:system_time(seconds))
+ ++ integer_to_list(erlang:system_time(second))
++ "-"
++ integer_to_list(erlang:unique_integer([positive]))),
test_server:start_node(Name, slave, [{args, "-pa "++Pa++" "++Args}]).
@@ -314,13 +533,14 @@ mcall(Node, Funs) ->
%% The NIFs:
lib_loaded() -> false.
-call_nif_schedule(_,_) -> ?nif_stub.
call_dirty_nif(_,_,_) -> ?nif_stub.
send_from_dirty_nif(_) -> ?nif_stub.
+send_wait_from_dirty_nif(_) -> ?nif_stub.
call_dirty_nif_exception(_) -> ?nif_stub.
call_dirty_nif_zero_args() -> ?nif_stub.
dirty_call_while_terminated_nif(_) -> ?nif_stub.
dirty_sleeper() -> ?nif_stub.
+dirty_sleeper(_) -> ?nif_stub.
dirty_heap_access_nif(_) -> ?nif_stub.
nif_stub_error(Line) ->
diff --git a/erts/emulator/test/dirty_nif_SUITE_data/dirty_nif_SUITE.c b/erts/emulator/test/dirty_nif_SUITE_data/dirty_nif_SUITE.c
index 2013c88167..a0019e5d95 100644
--- a/erts/emulator/test/dirty_nif_SUITE_data/dirty_nif_SUITE.c
+++ b/erts/emulator/test/dirty_nif_SUITE_data/dirty_nif_SUITE.c
@@ -19,7 +19,9 @@
*/
#include "erl_nif.h"
#include <assert.h>
-#ifndef __WIN32__
+#ifdef __WIN32__
+#include <windows.h>
+#else
#include <unistd.h>
#endif
@@ -46,7 +48,8 @@ static ERL_NIF_TERM dirty_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[
char s[10];
ErlNifBinary b;
if (have_dirty_schedulers()) {
- assert(enif_is_on_dirty_scheduler(env));
+ assert(ERL_NIF_THR_DIRTY_CPU_SCHEDULER == enif_thread_type()
+ || ERL_NIF_THR_DIRTY_IO_SCHEDULER == enif_thread_type());
}
assert(argc == 3);
enif_get_int(env, argv[0], &n);
@@ -63,7 +66,7 @@ static ERL_NIF_TERM call_dirty_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM
int n;
char s[10];
ErlNifBinary b;
- assert(!enif_is_on_dirty_scheduler(env));
+ assert(ERL_NIF_THR_NORMAL_SCHEDULER == enif_thread_type());
if (argc != 3)
return enif_make_badarg(env);
if (have_dirty_schedulers()) {
@@ -97,6 +100,32 @@ static ERL_NIF_TERM send_from_dirty_nif(ErlNifEnv* env, int argc, const ERL_NIF_
return result;
}
+static ERL_NIF_TERM send_wait_from_dirty_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ ERL_NIF_TERM result;
+ ErlNifPid pid;
+ ErlNifEnv* menv;
+ int res;
+
+ if (!enif_get_local_pid(env, argv[0], &pid))
+ return enif_make_badarg(env);
+ result = enif_make_tuple2(env, enif_make_atom(env, "ok"), enif_make_pid(env, &pid));
+ menv = enif_alloc_env();
+ res = enif_send(env, &pid, menv, result);
+ enif_free_env(menv);
+
+#ifdef __WIN32__
+ Sleep(2000);
+#else
+ sleep(2);
+#endif
+
+ if (!res)
+ return enif_make_badarg(env);
+ else
+ return result;
+}
+
static ERL_NIF_TERM call_dirty_nif_exception(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
switch (argc) {
@@ -146,12 +175,32 @@ static ERL_NIF_TERM call_dirty_nif_zero_args(ErlNifEnv* env, int argc, const ERL
static ERL_NIF_TERM
dirty_sleeper(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
- assert(enif_is_on_dirty_scheduler(env));
+ ErlNifPid pid;
+ ErlNifEnv* msg_env = NULL;
+
+ assert(ERL_NIF_THR_DIRTY_CPU_SCHEDULER == enif_thread_type()
+ || ERL_NIF_THR_DIRTY_IO_SCHEDULER == enif_thread_type());
+
+ /* If we get a pid argument, it indicates a process involved in the
+ test wants a message from us. Prior to the sleep we send a 'ready'
+ message, and then after the sleep, send a 'done' message. */
+ if (argc == 1 && enif_get_local_pid(env, argv[0], &pid)) {
+ msg_env = enif_alloc_env();
+ enif_send(env, &pid, msg_env, enif_make_atom(msg_env, "ready"));
+ }
+
#ifdef __WIN32__
Sleep(6000);
#else
sleep(6);
#endif
+
+ if (argc == 1) {
+ assert(msg_env != NULL);
+ enif_send(env, &pid, msg_env, enif_make_atom(msg_env, "done"));
+ enif_free_env(msg_env);
+ }
+
return enif_make_atom(env, "ok");
}
@@ -200,7 +249,8 @@ static ERL_NIF_TERM dirty_heap_access_nif(ErlNifEnv* env, int argc, const ERL_NI
{
ERL_NIF_TERM res = enif_make_list(env, 0);
int i;
- assert(enif_is_on_dirty_scheduler(env));
+ assert(ERL_NIF_THR_DIRTY_CPU_SCHEDULER == enif_thread_type()
+ || ERL_NIF_THR_DIRTY_IO_SCHEDULER == enif_thread_type());
for (i = 0; i < 1000; i++)
res = enif_make_list_cell(env, enif_make_copy(env, argv[0]), res);
@@ -213,9 +263,11 @@ static ErlNifFunc nif_funcs[] =
{"lib_loaded", 0, lib_loaded},
{"call_dirty_nif", 3, call_dirty_nif},
{"send_from_dirty_nif", 1, send_from_dirty_nif, ERL_NIF_DIRTY_JOB_CPU_BOUND},
+ {"send_wait_from_dirty_nif", 1, send_wait_from_dirty_nif, ERL_NIF_DIRTY_JOB_IO_BOUND},
{"call_dirty_nif_exception", 1, call_dirty_nif_exception, ERL_NIF_DIRTY_JOB_IO_BOUND},
{"call_dirty_nif_zero_args", 0, call_dirty_nif_zero_args, ERL_NIF_DIRTY_JOB_CPU_BOUND},
{"dirty_sleeper", 0, dirty_sleeper, ERL_NIF_DIRTY_JOB_IO_BOUND},
+ {"dirty_sleeper", 1, dirty_sleeper, ERL_NIF_DIRTY_JOB_CPU_BOUND},
{"dirty_call_while_terminated_nif", 1, dirty_call_while_terminated_nif, ERL_NIF_DIRTY_JOB_CPU_BOUND},
{"dirty_heap_access_nif", 1, dirty_heap_access_nif, ERL_NIF_DIRTY_JOB_CPU_BOUND}
};
diff --git a/erts/emulator/test/distribution_SUITE.erl b/erts/emulator/test/distribution_SUITE.erl
index d0096fb1bc..6994bfef83 100644
--- a/erts/emulator/test/distribution_SUITE.erl
+++ b/erts/emulator/test/distribution_SUITE.erl
@@ -43,7 +43,7 @@
lost_exit/1, link_to_dead/1, link_to_dead_new_node/1,
applied_monitor_node/1, ref_port_roundtrip/1, nil_roundtrip/1,
trap_bif_1/1, trap_bif_2/1, trap_bif_3/1,
- stop_dist/1,
+ stop_dist/1,
dist_auto_connect_never/1, dist_auto_connect_once/1,
dist_parallel_send/1,
atom_roundtrip/1,
@@ -55,7 +55,8 @@
bad_dist_ext_receive/1,
bad_dist_ext_process_info/1,
bad_dist_ext_control/1,
- bad_dist_ext_connection_id/1]).
+ bad_dist_ext_connection_id/1,
+ start_epmd_false/1, epmd_module/1]).
%% Internal exports.
-export([sender/3, receiver2/2, dummy_waiter/0, dead_process/0,
@@ -64,11 +65,14 @@
dist_evil_parallel_receiver/0,
sendersender/4, sendersender2/4]).
+%% epmd_module exports
+-export([start_link/0, register_node/2, register_node/3, port_please/2]).
+
suite() ->
[{ct_hooks,[ts_install_cth]},
{timetrap, {minutes, 4}}].
-all() ->
+all() ->
[ping, {group, bulk_send}, {group, local_send},
link_to_busy, exit_to_busy, lost_exit, link_to_dead,
link_to_dead_new_node, applied_monitor_node,
@@ -76,9 +80,10 @@ all() ->
{group, trap_bif}, {group, dist_auto_connect},
dist_parallel_send, atom_roundtrip, unicode_atom_roundtrip, atom_roundtrip_r15b,
contended_atom_cache_entry, contended_unicode_atom_cache_entry,
- bad_dist_structure, {group, bad_dist_ext}].
+ bad_dist_structure, {group, bad_dist_ext},
+ start_epmd_false, epmd_module].
-groups() ->
+groups() ->
[{bulk_send, [], [bulk_send_small, bulk_send_big, bulk_send_bigbig]},
{local_send, [],
[local_send_small, local_send_big, local_send_legal]},
@@ -182,8 +187,13 @@ bulk_sendsend2(Terms, BinSize, BusyBufSize) ->
{ok, NodeSend} = start_node(bulk_sender, "+zdbbl " ++ integer_to_list(BusyBufSize)),
_Send = spawn(NodeSend, erlang, apply, [fun sendersender/4, [self(), Recv, Bin, Terms]]),
{Elapsed, {_TermsN, SizeN}, MonitorCount} =
- receive {sendersender, BigRes} ->
- BigRes
+ receive
+ %% On some platforms (windows), the time taken is 0 so we
+ %% simulate that some little time has passed.
+ {sendersender, {0.0,T,MC}} ->
+ {0.0015, T, MC};
+ {sendersender, BigRes} ->
+ BigRes
end,
stop_node(NodeRecv),
stop_node(NodeSend),
@@ -834,59 +844,50 @@ dist_auto_connect_once(Config) when is_list(Config) ->
%% Result is sent here through relay node.
dist_auto_connect_never(Config) when is_list(Config) ->
Self = self(),
- {ok, RelayNode} =
- start_node(dist_auto_connect_relay),
- spawn(RelayNode,
+ {ok, RelayNode} = start_node(dist_auto_connect_relay),
+ spawn(RelayNode,
fun() ->
register(dist_auto_connect_relay, self()),
- dist_auto_connect_relay(Self)
+ dist_auto_connect_relay(Self)
end),
{ok, Handle} = dist_auto_connect_start(dist_auto_connect, never),
- Result =
- receive
- {do_dist_auto_connect, ok} ->
- ok;
- {do_dist_auto_connect, Error} ->
- {error, Error};
- Other ->
- {error, Other}
- after 32000 ->
- timeout
- end,
+ Result = receive
+ {do_dist_auto_connect, ok} ->
+ ok;
+ {do_dist_auto_connect, Error} ->
+ {error, Error};
+ Other ->
+ {error, Other}
+ after 32000 ->
+ timeout
+ end,
stop_node(RelayNode),
- Stopped = dist_auto_connect_stop(Handle),
- Junk =
- receive
- {do_dist_auto_connect, _} = J ->
- J
- after 0 ->
- ok
- end,
+ Stopped = dist_auto_connect_stop(Handle),
+ Junk = receive
+ {do_dist_auto_connect, _} = J -> J
+ after 0 -> ok
+ end,
{ok, ok, ok} = {Result, Stopped, Junk},
ok.
do_dist_auto_connect([never]) ->
Node = list_to_atom("dist_auto_connect_relay@" ++ hostname()),
- io:format("~p:do_dist_auto_connect([false]) Node=~p~n",
- [?MODULE, Node]),
+ io:format("~p:do_dist_auto_connect([false]) Node=~p~n", [?MODULE, Node]),
Ping = net_adm:ping(Node),
- io:format("~p:do_dist_auto_connect([false]) Ping=~p~n",
- [?MODULE, Ping]),
+ io:format("~p:do_dist_auto_connect([false]) Ping=~p~n", [?MODULE, Ping]),
Result = case Ping of
pang -> ok;
_ -> {error, Ping}
end,
- io:format("~p:do_dist_auto_connect([false]) Result=~p~n",
- [?MODULE, Result]),
+ io:format("~p:do_dist_auto_connect([false]) Result=~p~n", [?MODULE, Result]),
net_kernel:connect_node(Node),
catch {dist_auto_connect_relay, Node} ! {do_dist_auto_connect, Result};
% receive after 1000 -> ok end,
% halt();
do_dist_auto_connect(Arg) ->
- io:format("~p:do_dist_auto_connect(~p)~n",
- [?MODULE, Arg]),
+ io:format("~p:do_dist_auto_connect(~p)~n", [?MODULE, Arg]),
receive after 10000 -> ok end,
halt().
@@ -902,11 +903,11 @@ dist_auto_connect_start(Name, Value) when is_list(Name), is_atom(Value) ->
[%"xterm -e ",
atom_to_list(lib:progname()),
% " -noinput ",
- " -detached ",
+ " -detached ",
long_or_short(), " ", Name,
" -setcookie ", Cookie,
" -pa ", ModuleDir,
- " -s ", atom_to_list(?MODULE),
+ " -s ", atom_to_list(?MODULE),
" do_dist_auto_connect ", ValueStr,
" -kernel dist_auto_connect ", ValueStr]),
io:format("~p:dist_auto_connect_start() cmd: ~p~n", [?MODULE, Cmd]),
@@ -937,7 +938,7 @@ dist_auto_connect_stop(Port, Node, Pid, N) when is_integer(N) ->
end.
-dist_auto_connect_relay(Parent) ->
+dist_auto_connect_relay(Parent) ->
receive X ->
catch Parent ! X
end,
@@ -1037,10 +1038,13 @@ atom_roundtrip_r15b(Config) when is_list(Config) ->
ct:timetrap({minutes, 6}),
AtomData = atom_data(),
verify_atom_data(AtomData),
- {ok, Node} = start_node(Config, [], "r15b"),
- do_atom_roundtrip(Node, AtomData),
- stop_node(Node),
- ok;
+ case start_node(Config, [], "r15b") of
+ {ok, Node} ->
+ do_atom_roundtrip(Node, AtomData),
+ stop_node(Node);
+ {error, timeout} ->
+ {skip,"Unable to start OTP R15B release"}
+ end;
false ->
{skip,"No OTP R15B available"}
end.
@@ -1308,7 +1312,7 @@ get_conflicting_unicode_atoms(CIX, N) ->
start_monitor(Offender,P) ->
Parent = self(),
Q = spawn(Offender,
- fun () ->
+ fun () ->
Ref = erlang:monitor(process,P),
Parent ! {self(),ref,Ref},
receive
@@ -1445,8 +1449,8 @@ bad_dist_structure(Config) when is_list(Config) ->
pong = rpc:call(Victim, net_adm, ping, [Offender]),
P ! two,
P ! check_msgs,
- receive
- {P, messages_checked} -> ok
+ receive
+ {P, messages_checked} -> ok
after 5000 ->
exit(victim_is_dead)
end,
@@ -1752,7 +1756,7 @@ send_bad_structure(Offender,Victim,Bad,WhereToPutSelf,PayLoad) ->
pong = net_adm:ping(Node),
DPrt = dport(Node),
Bad1 = case WhereToPutSelf of
- 0 ->
+ 0 ->
Bad;
N when N > 0 ->
setelement(N,Bad,self())
@@ -1766,8 +1770,8 @@ send_bad_structure(Offender,Victim,Bad,WhereToPutSelf,PayLoad) ->
port_command(DPrt, DData),
Parent ! {DData,Done}
end),
- receive
- {WhatSent,Done} ->
+ receive
+ {WhatSent,Done} ->
io:format("Offender sent ~p~n",[WhatSent]),
ok
after 5000 ->
@@ -1874,17 +1878,79 @@ dmsg_fake_hdr2() ->
1, size(A2), A2,
2, size(A3), A3].
-dmsg_ext(Term) ->
+dmsg_ext(Term) ->
<<131, Res/binary>> = term_to_binary(Term),
Res.
dmsg_bad_atom_cache_ref() ->
[$R, 137].
+start_epmd_false(Config) when is_list(Config) ->
+ %% Start a node with the option -start_epmd false.
+ {ok, OtherNode} = start_node(start_epmd_false, "-start_epmd false"),
+ %% We should be able to ping it, as epmd was started by us:
+ pong = net_adm:ping(OtherNode),
+ stop_node(OtherNode),
+
+ ok.
+
+epmd_module(Config) when is_list(Config) ->
+ %% We need a relay node to test this, since the test node uses the
+ %% standard epmd module.
+ Sock1 = start_relay_node(epmd_module_node1, "-epmd_module " ++ ?MODULE_STRING),
+ Node1 = inet_rpc_nodename(Sock1),
+ %% Ask what port it's listening on - it won't have registered with
+ %% epmd.
+ {ok, {ok, Port1}} = do_inet_rpc(Sock1, application, get_env, [kernel, dist_listen_port]),
+
+ %% Start a second node, passing the port number as a secret
+ %% argument.
+ Sock2 = start_relay_node(epmd_module_node2, "-epmd_module " ++ ?MODULE_STRING
+ ++ " -other_node_port " ++ integer_to_list(Port1)),
+ Node2 = inet_rpc_nodename(Sock2),
+ %% Node 1 can't ping node 2
+ {ok, pang} = do_inet_rpc(Sock1, net_adm, ping, [Node2]),
+ {ok, []} = do_inet_rpc(Sock1, erlang, nodes, []),
+ {ok, []} = do_inet_rpc(Sock2, erlang, nodes, []),
+ %% But node 2 can ping node 1
+ {ok, pong} = do_inet_rpc(Sock2, net_adm, ping, [Node1]),
+ {ok, [Node2]} = do_inet_rpc(Sock1, erlang, nodes, []),
+ {ok, [Node1]} = do_inet_rpc(Sock2, erlang, nodes, []),
+
+ stop_relay_node(Sock2),
+ stop_relay_node(Sock1).
+
+%% epmd_module functions:
+
+start_link() ->
+ ignore.
+
+register_node(Name, Port) ->
+ register_node(Name, Port, inet_tcp).
+register_node(_Name, Port, _Driver) ->
+ %% Save the port number we're listening on.
+ application:set_env(kernel, dist_listen_port, Port),
+ Creation = rand:uniform(3),
+ {ok, Creation}.
+
+port_please(_Name, _Ip) ->
+ case init:get_argument(other_node_port) of
+ error ->
+ %% None specified. Default to 42.
+ Port = 42,
+ Version = 5,
+ {port, Port, Version};
+ {ok, [[PortS]]} ->
+ %% Port number given on command line.
+ Port = list_to_integer(PortS),
+ Version = 5,
+ {port, Port, Version}
+ end.
+
%%% Utilities
timestamp() ->
- erlang:monotonic_time(milli_seconds).
+ erlang:monotonic_time(millisecond).
start_node(X) ->
start_node(X, [], []).
@@ -1899,7 +1965,7 @@ start_node(Name, Args, Rel) when is_atom(Name), is_list(Rel) ->
[] -> [];
_ -> [{erl,[{release,Rel}]}]
end,
- test_server:start_node(Name, slave,
+ test_server:start_node(Name, slave,
[{args,
Args++" -setcookie "++Cookie++" -pa \""++Pa++"\""}
| RelArg]);
@@ -1908,7 +1974,7 @@ start_node(Config, Args, Rel) when is_list(Config), is_list(Rel) ->
++ "-"
++ atom_to_list(proplists:get_value(testcase, Config))
++ "-"
- ++ integer_to_list(erlang:system_time(seconds))
+ ++ integer_to_list(erlang:system_time(second))
++ "-"
++ integer_to_list(erlang:unique_integer([positive])))),
start_node(Name, Args, Rel).
@@ -1967,17 +2033,15 @@ inet_rpc_server_loop(Sock) ->
start_relay_node(Node, Args) ->
Pa = filename:dirname(code:which(?MODULE)),
Cookie = "NOT"++atom_to_list(erlang:get_cookie()),
- {ok, LSock} = gen_tcp:listen(0, [binary, {packet, 4},
- {active, false}]),
+ {ok, LSock} = gen_tcp:listen(0, [binary, {packet, 4}, {active, false}]),
{ok, Port} = inet:port(LSock),
{ok, Host} = inet:gethostname(),
RunArg = "-run " ++ atom_to_list(?MODULE) ++ " inet_rpc_server " ++
Host ++ " " ++ integer_to_list(Port),
- {ok, NN} =
- test_server:start_node(Node, peer,
- [{args, Args ++
- " -setcookie "++Cookie++" -pa "++Pa++" "++
- RunArg}]),
+ {ok, NN} = test_server:start_node(Node, peer,
+ [{args, Args ++
+ " -setcookie "++Cookie++" -pa "++Pa++" "++
+ RunArg}]),
[N,H] = string:tokens(atom_to_list(NN),"@"),
{ok, Sock} = gen_tcp:accept(LSock),
pang = net_adm:ping(NN),
@@ -1993,7 +2057,7 @@ wait_dead(N,H,0) ->
wait_dead(N,H,X) ->
case erl_epmd:port_please(N,H) of
{port,_,_} ->
- receive
+ receive
after 1000 ->
ok
end,
@@ -2027,7 +2091,7 @@ node_monitor(Master) ->
Master ! {nodeup, node(), Node}
end,
Nodes0),
- io:format("~p ~p: ~p~n", [node(), erlang:system_time(micro_seconds), Nodes0]),
+ io:format("~p ~p: ~p~n", [node(), erlang:system_time(microsecond), Nodes0]),
node_monitor_loop(Master);
false ->
net_kernel:monitor_nodes(false, Opts),
@@ -2048,7 +2112,7 @@ node_monitor_loop(Master) ->
receive
{nodeup, Node, _InfoList} = Msg ->
Master ! {nodeup, node(), Node},
- io:format("~p ~p: ~p~n", [node(), erlang:system_time(micro_seconds), Msg]),
+ io:format("~p ~p: ~p~n", [node(), erlang:system_time(microsecond), Msg]),
node_monitor_loop(Master);
{nodedown, Node, InfoList} = Msg ->
Reason = case lists:keysearch(nodedown_reason, 1, InfoList) of
@@ -2056,7 +2120,7 @@ node_monitor_loop(Master) ->
_ -> undefined
end,
Master ! {nodedown, node(), Node, Reason},
- io:format("~p ~p: ~p~n", [node(), erlang:system_time(micro_seconds), Msg]),
+ io:format("~p ~p: ~p~n", [node(), erlang:system_time(microsecond), Msg]),
node_monitor_loop(Master)
end.
diff --git a/erts/emulator/test/driver_SUITE.erl b/erts/emulator/test/driver_SUITE.erl
index f134a197aa..1df72193a6 100644
--- a/erts/emulator/test/driver_SUITE.erl
+++ b/erts/emulator/test/driver_SUITE.erl
@@ -114,7 +114,7 @@
-define(MAX_DATA_SIZE, 16384).
% This is the allowed delay when testing the driver timer functionality
--define(delay, 100).
+-define(delay, 400).
-define(heap_binary_size, 64).
@@ -401,7 +401,7 @@ try_timeouts(Port, Timeout) ->
true ->
try_timeouts(Port, Timeout div 2)
end
- after Timeout + ?delay ->
+ after Timeout + 100*?delay ->
ct:fail("driver failed to timeout")
end.
@@ -437,7 +437,7 @@ try_cancel(Port, Timeout) ->
Timeout == 0 -> ok;
true -> try_cancel(Port, Timeout div 2)
end
- after ?delay ->
+ after 100*?delay ->
ct:fail("No message from driver")
end
end.
@@ -505,7 +505,7 @@ try_change_timer(Port, Timeout) ->
true ->
try_timeouts(Port, Timeout div 2)
end
- after Timeout + ?delay ->
+ after Timeout + 100*?delay ->
ct:fail("driver failed to timeout")
end.
@@ -2427,7 +2427,7 @@ erl_millisecs() ->
erl_millisecs(erlang:monotonic_time()).
erl_millisecs(MonotonicTime) ->
- (1000*MonotonicTime)/erlang:convert_time_unit(1,seconds,native).
+ (1000*MonotonicTime)/erlang:convert_time_unit(1,second,native).
%% Start/stop drivers.
start_driver(Config, Name, Binary) ->
@@ -2481,7 +2481,7 @@ start_node(Config) when is_list(Config) ->
++ "-"
++ atom_to_list(proplists:get_value(testcase, Config))
++ "-"
- ++ integer_to_list(erlang:system_time(seconds))
+ ++ integer_to_list(erlang:system_time(second))
++ "-"
++ integer_to_list(erlang:unique_integer([positive]))),
test_server:start_node(Name, slave, [{args, "-pa "++Pa}]).
diff --git a/erts/emulator/test/erl_link_SUITE.erl b/erts/emulator/test/erl_link_SUITE.erl
index 93d2065ba3..89e1aefb50 100644
--- a/erts/emulator/test/erl_link_SUITE.erl
+++ b/erts/emulator/test/erl_link_SUITE.erl
@@ -1011,7 +1011,7 @@ get_names(N, T, Acc) ->
++ "-"
++ atom_to_list(T)
++ "-"
- ++ integer_to_list(erlang:system_time(seconds))
+ ++ integer_to_list(erlang:system_time(second))
++ "-"
++ integer_to_list(erlang:unique_integer([positive]))) | Acc]).
diff --git a/erts/emulator/test/estone_SUITE.erl b/erts/emulator/test/estone_SUITE.erl
index 1180a45585..3ce849b88e 100644
--- a/erts/emulator/test/estone_SUITE.erl
+++ b/erts/emulator/test/estone_SUITE.erl
@@ -364,7 +364,7 @@ monotonic_time() ->
try erlang:monotonic_time() catch error:undef -> erlang:now() end.
subtr(Before, After) when is_integer(Before), is_integer(After) ->
- erlang:convert_time_unit(After-Before, native, micro_seconds);
+ erlang:convert_time_unit(After-Before, native, microsecond);
subtr({_,_,_}=Before, {_,_,_}=After) ->
timer:now_diff(After, Before).
diff --git a/erts/emulator/test/float_SUITE.erl b/erts/emulator/test/float_SUITE.erl
index e85addae3a..36b1f9179f 100644
--- a/erts/emulator/test/float_SUITE.erl
+++ b/erts/emulator/test/float_SUITE.erl
@@ -276,7 +276,7 @@ start_node(Config) when is_list(Config) ->
++ "-"
++ atom_to_list(proplists:get_value(testcase, Config))
++ "-"
- ++ integer_to_list(erlang:system_time(seconds))
+ ++ integer_to_list(erlang:system_time(second))
++ "-"
++ integer_to_list(erlang:unique_integer([positive]))),
test_server:start_node(Name, slave, [{args, "-pa "++Pa}]).
diff --git a/erts/emulator/test/hipe_SUITE.erl b/erts/emulator/test/hipe_SUITE.erl
new file mode 100644
index 0000000000..a556b4ddc0
--- /dev/null
+++ b/erts/emulator/test/hipe_SUITE.erl
@@ -0,0 +1,67 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+-module(hipe_SUITE).
+-export([all/0, t_copy_literals/1]).
+
+all() ->
+ case erlang:system_info(hipe_architecture) of
+ undefined -> {skip, "HiPE is disabled"};
+ _ -> [t_copy_literals]
+ end.
+
+t_copy_literals(doc) ->
+ "Check that BEAM literals referenced from HiPE stack are copied by"
+ " check_process_code";
+t_copy_literals(Config) when is_list(Config) ->
+ %% Compile the the ref_cell and literals modules.
+ Data = proplists:get_value(data_dir, Config),
+ Priv = proplists:get_value(priv_dir, Config),
+ RefFile = filename:join(Data, "ref_cell"),
+ {ok,ref_cell} = c:c(RefFile, [{outdir,Priv},native]),
+ true = code:is_module_native(ref_cell),
+ LitFile = filename:join(Data, "literals"),
+ {ok,literals} = c:c(LitFile, [{outdir,Priv}]),
+
+ %% store references to literals on HiPE stacks
+ PA = ref_cell:start_link(),
+ ref_cell:call(PA, {put_res_of, fun literals:a/0}),
+ PB = ref_cell:start_link_deep(),
+ ref_cell:call(PB, {put_res_of, fun literals:b/0}),
+
+ %% purge the literals
+ _ = (catch erlang:purge_module(literals)),
+ true = erlang:delete_module(literals),
+ true = erlang:purge_module(literals),
+
+ %% Give the literal collector some time to work...
+ receive after 2000 -> ok end,
+
+ %% check that the ex-literals are ok
+ [a,b,c] = ref_cell:call(PA, get),
+ {a,b,c} = ref_cell:call(PB, get),
+
+ %% cleanup
+ ref_cell:call(PA, done),
+ ref_cell:call(PB, done),
+ _ = (catch erlang:purge_module(ref_cell)),
+ true = erlang:delete_module(ref_cell),
+ true = erlang:purge_module(ref_cell),
+ ok.
diff --git a/erts/emulator/test/hipe_SUITE_data/literals.erl b/erts/emulator/test/hipe_SUITE_data/literals.erl
new file mode 100644
index 0000000000..31e443970f
--- /dev/null
+++ b/erts/emulator/test/hipe_SUITE_data/literals.erl
@@ -0,0 +1,26 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+-module(literals).
+
+-export([a/0, b/0]).
+
+a() -> [a,b,c].
+b() -> {a,b,c}.
diff --git a/erts/emulator/test/hipe_SUITE_data/ref_cell.erl b/erts/emulator/test/hipe_SUITE_data/ref_cell.erl
new file mode 100644
index 0000000000..2654e4077b
--- /dev/null
+++ b/erts/emulator/test/hipe_SUITE_data/ref_cell.erl
@@ -0,0 +1,64 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+-module(ref_cell).
+
+-export([start_link/0, start_link_deep/0, call/2]).
+
+-compile(native).
+
+-define(DEPTH, 100).
+-define(ALLOCS, 500).
+
+start_link() ->
+ spawn_link(fun() -> loop(undefined) end).
+
+start_link_deep() ->
+ spawn_link(fun() -> go_deep(?DEPTH) end).
+
+%% Create a stack large enough to get a graylimit trap placed next time there's
+%% a minor gc.
+go_deep(0) ->
+ alloc_some(?ALLOCS),
+ loop(undefined),
+ 0;
+go_deep(Depth) ->
+ go_deep(Depth-1)+1.
+
+%% Do some allocation to trigger a minor gc
+alloc_some(Amount) ->
+ Check = (Amount * (Amount + 1)) div 2,
+ Check = lists:sum(lists:seq(1, Amount)).
+
+call(Pid, Call) ->
+ Pid ! {Call, self()},
+ receive {Pid, Res} -> Res end.
+
+loop(Thing) ->
+ receive
+ {done, Pid} -> Pid ! {self(), done};
+ {{put_res_of, Fun}, Pid} ->
+ NewThing = Fun(),
+ Pid ! {self(), put},
+ loop(NewThing);
+ {get, Pid} ->
+ Pid ! {self(), Thing},
+ loop(Thing)
+ end.
diff --git a/erts/emulator/test/long_timers_test.erl b/erts/emulator/test/long_timers_test.erl
index 7c055a31f9..c9a380a229 100644
--- a/erts/emulator/test/long_timers_test.erl
+++ b/erts/emulator/test/long_timers_test.erl
@@ -27,11 +27,16 @@
%%% Created : 21 Aug 2006 by Rickard Green <[email protected]>
%%%-------------------------------------------------------------------
+-define(HIGH_CPU_INFO, "Ignored due to high CPU utilization.").
+-define(MISSING_CPU_INFO, "Ignored due to missing CPU utilization information.").
-define(MAX_TIMEOUT, 60). % Minutes
--define(MAX_LATE_MS, 15*1000). % Milliseconds
+-define(MAX_LATE_MS, 1000). % Milliseconds
-define(REG_NAME, '___LONG___TIMERS___TEST___SERVER___').
+-define(HIGH_UTIL, 96.0).
+-define(UTIL_INTERVAL, 10000).
+
-define(DRV_NAME, timer_driver).
% First byte in communication with the timer driver
@@ -72,52 +77,149 @@ check_result() ->
receive
{'DOWN', Mon, process, _, Reason} ->
{?REG_NAME, 'DOWN', Reason};
- {result, ?REG_NAME, TORs, Start, End} ->
+ {result, ?REG_NAME, TORs, Start, End, UtilData} ->
erlang:demonitor(Mon),
receive {'DOWN', Mon, _, _, _} -> ok after 0 -> ok end,
stop_node(Node),
- check(TORs, ms((End - Start) - max_late()), ok)
+ Res = check(TORs, Start, End, UtilData, ms((End - Start) - max_late()), ok),
+ io:format("Start = ~p~n End = ~p~n UtilData = ~p~n", [Start, End, UtilData]),
+ Res
end.
+res(New, Old) when New == failed; Old == failed ->
+ failed;
+res(New, Old) when New == missing_cpu_info; Old == missing_cpu_info ->
+ missing_cpu_info;
+res(New, Old) when New == high_cpu; Old == high_cpu ->
+ high_cpu;
+res(New, _Old) ->
+ New.
+
check([#timeout_rec{timeout = Timeout,
type = Type,
timeout_diff = undefined} | TORs],
+ Start,
+ End,
+ UtilData,
NeedRes,
- _Ok) when Timeout < NeedRes ->
- io:format("~p timeout = ~p ms failed! No timeout.~n",
- [Type, Timeout]),
- check(TORs, NeedRes, failed);
+ Ok) when Timeout < NeedRes ->
+ {NewOk, HCPU} = case had_high_cpu_util(Start,
+ Timeout,
+ End - Timeout*1000,
+ UtilData) of
+ yes -> {res(high_cpu, Ok), ?HIGH_CPU_INFO};
+ no -> {res(failed, Ok), ""};
+ missing -> {res(missing_cpu_info, Ok), "FAILED", ?MISSING_CPU_INFO}
+ end,
+ io:format("~p timeout = ~p ms FAILED! No timeout. ~s~n",
+ [Type, Timeout, HCPU]),
+ check(TORs, Start, End, UtilData, NeedRes, NewOk);
check([#timeout_rec{timeout_diff = undefined} | TORs],
+ Start,
+ End,
+ UtilData,
NeedRes,
Ok) ->
- check(TORs, NeedRes, Ok);
+ check(TORs, Start, End, UtilData, NeedRes, Ok);
check([#timeout_rec{timeout = Timeout,
type = Type,
timeout_diff = {error, Reason}} | TORs],
+ Start,
+ End,
+ UtilData,
NeedRes,
_Ok) ->
- io:format("~p timeout = ~p ms failed! exit reason ~p~n",
+ io:format("~p timeout = ~p ms FAILED! exit reason ~p~n",
[Type, Timeout, Reason]),
- check(TORs, NeedRes, failed);
+ check(TORs, Start, End, UtilData, NeedRes, failed);
check([#timeout_rec{timeout = Timeout,
type = Type,
timeout_diff = TimeoutDiff} | TORs],
+ Start,
+ End,
+ UtilData,
NeedRes,
Ok) ->
- {NewOk, SuccessStr} = case ((0 =< TimeoutDiff)
- andalso (TimeoutDiff =< max_late())) of
- true -> {Ok, "succeeded"};
- false -> {failed, "FAILED"}
+ {NewOk, SuccessStr, HCPU} = case {(0 =< TimeoutDiff),
+ (TimeoutDiff =< max_late())} of
+ {true, true} ->
+ {res(ok, Ok), "succeeded", ""};
+ {false, _} ->
+ {res(failed, Ok), "FAILED", ""};
+ _ ->
+ case had_high_cpu_util(Start,
+ Timeout,
+ TimeoutDiff,
+ UtilData) of
+ yes -> {res(high_cpu, Ok), "FAILED", ?HIGH_CPU_INFO};
+ no -> {res(failed, Ok), "FAILED", ""};
+ missing -> {res(missing_cpu_info, Ok), "FAILED", ?MISSING_CPU_INFO}
+ end
end,
- io:format("~s timeout = ~s ms ~s! timeout diff = ~s.~n",
+ io:format("~s timeout = ~s ms ~s! timeout diff = ~s. ~s~n",
[type_str(Type),
time_str(Timeout),
SuccessStr,
- time_str(TimeoutDiff, erlang:convert_time_unit(1, seconds, native))]),
- check(TORs, NeedRes, NewOk);
-check([], _NeedRes, Ok) ->
+ time_str(TimeoutDiff, 1000000),
+ HCPU]),
+ check(TORs, Start, End, UtilData, NeedRes, NewOk);
+check([],_Start,_End,_UtilData,_NeedRes, Ok) ->
Ok.
+% TargetTimeout in ms, other in us.
+had_high_cpu_util(StartTime,
+ TargetTimeout,
+ TimeoutDiff,
+ UtilData) ->
+ TargetTo = StartTime + TargetTimeout*1000,
+ ActTo = TargetTo + TimeoutDiff,
+ hcpu(ActTo, TargetTo, UtilData).
+
+hcpu(_ActTo, _TargetTo, [{UT, 0} | _] = UD) ->
+ missing; %% Util is the integer zero when not supported...
+%% UT2 =:= UT1
+hcpu(ActTo, TargetTo, [{UT, _}, {UT, _} | _] = UD) ->
+ hcpu(ActTo, TargetTo, tl(UD));
+%% UT2 > UT1 > ActTo > TargetTo
+hcpu(ActTo, TargetTo, [{_UT2, _}, {UT1, _} | _] = UD) when UT1 > ActTo ->
+ hcpu(ActTo, TargetTo, tl(UD));
+%% UT2 >= ActTo > TargetTo >= UT1
+hcpu(ActTo, TargetTo,
+ [{UT2, U}, {UT1, _} | _]) when UT2 >= ActTo,
+ TargetTo >= UT1 ->
+ case U >= (((ActTo - TargetTo) / (UT2 - UT1))
+ * (?HIGH_UTIL/100.0)) of
+ true -> yes;
+ false -> no
+ end;
+%% UT2 >= ActTo >= UT1 > TargetTo
+hcpu(ActTo, TargetTo,
+ [{UT2, U}, {UT1, _} | _] = UD) when UT2 >= ActTo,
+ ActTo >= UT1,
+ UT1 > TargetTo ->
+ case U >= (((ActTo - UT1) / (UT2 - UT1))
+ * (?HIGH_UTIL/100.0)) of
+ true -> hcpu(ActTo, TargetTo, tl(UD));
+ false -> no
+ end;
+%% ActTo > UT2 >= TargetTo >= UT1
+hcpu(ActTo, TargetTo,
+ [{UT2, U}, {UT1, _} | _]) when ActTo > UT2,
+ TargetTo >= UT1 ->
+ case U >= (((UT2 - TargetTo) / (UT2 - UT1))
+ * (?HIGH_UTIL/100.0)) of
+ true -> yes;
+ false -> no
+ end;
+%% ActTo > UT2 > UT1 > TargetTo
+hcpu(ActTo, TargetTo,
+ [{UT2, U}, {UT1, _} | _] = UD) when ActTo > UT2,
+ UT1 > TargetTo ->
+ case U >= ?HIGH_UTIL of
+ true -> hcpu(ActTo, TargetTo, tl(UD));
+ false -> no
+ end.
+
type_str(receive_after) -> "receive ... after";
type_str(bif_timer) -> "BIF timer";
type_str(driver) -> "driver".
@@ -142,24 +244,24 @@ unit_str(Res) -> Res.
to_diff(Timeout, Start, Stop) ->
%% 'Timeout' in milli seconds
- %% 'Start', 'Stop', and result in native unit
- (Stop - Start) - erlang:convert_time_unit(Timeout, milli_seconds, native).
+ %% 'Start', 'Stop', and result in micro seconds
+ (Stop - Start) - Timeout*1000.
ms(Time) ->
- erlang:convert_time_unit(Time, native, milli_seconds).
+ erlang:convert_time_unit(Time, microsecond, millisecond).
max_late() ->
- erlang:convert_time_unit(?MAX_LATE_MS, milli_seconds, native).
+ erlang:convert_time_unit(?MAX_LATE_MS, millisecond, microsecond).
receive_after(Timeout) ->
- Start = erlang:monotonic_time(),
+ Start = erlang:monotonic_time(microsecond),
receive
{get_result, ?REG_NAME} ->
?REG_NAME ! #timeout_rec{pid = self(),
type = receive_after,
timeout = Timeout}
after Timeout ->
- Stop = erlang:monotonic_time(),
+ Stop = erlang:monotonic_time(microsecond),
receive
{get_result, ?REG_NAME} ->
?REG_NAME ! #timeout_rec{pid = self(),
@@ -174,7 +276,7 @@ receive_after(Timeout) ->
driver(Timeout) ->
Port = open_port({spawn, ?DRV_NAME},[]),
link(Port),
- Start = erlang:monotonic_time(),
+ Start = erlang:monotonic_time(microsecond),
erlang:port_command(Port, <<?START_TIMER, Timeout:32>>),
receive
{get_result, ?REG_NAME} ->
@@ -182,7 +284,7 @@ driver(Timeout) ->
type = driver,
timeout = Timeout};
{Port,{data,[?TIMER]}} ->
- Stop = erlang:monotonic_time(),
+ Stop = erlang:monotonic_time(microsecond),
unlink(Port),
true = erlang:port_close(Port),
receive
@@ -197,7 +299,7 @@ driver(Timeout) ->
end.
bif_timer(Timeout) ->
- Start = erlang:monotonic_time(),
+ Start = erlang:monotonic_time(microsecond),
Tmr = erlang:start_timer(Timeout, self(), ok),
receive
{get_result, ?REG_NAME} ->
@@ -205,7 +307,7 @@ bif_timer(Timeout) ->
type = bif_timer,
timeout = Timeout};
{timeout, Tmr, ok} ->
- Stop = erlang:monotonic_time(),
+ Stop = erlang:monotonic_time(microsecond),
receive
{get_result, ?REG_NAME} ->
?REG_NAME ! #timeout_rec{pid = self(),
@@ -218,13 +320,22 @@ bif_timer(Timeout) ->
end.
test(Starter, DrvDir, StartDone) ->
+ process_flag(priority, high),
erl_ddll:start(),
ok = load_driver(DrvDir, ?DRV_NAME),
process_flag(trap_exit, true),
register(?REG_NAME, self()),
{group_leader, GL} = process_info(whereis(net_kernel),group_leader),
group_leader(GL, self()),
- Start = erlang:monotonic_time(),
+ try
+ application:start(sasl),
+ application:start(os_mon)
+ catch
+ _ : _ ->
+ ok
+ end,
+ UtilData = new_util(),
+ Start = erlang:monotonic_time(microsecond),
TORs = lists:map(fun (Min) ->
TO = Min*60*1000,
[#timeout_rec{pid = spawn_opt(
@@ -252,16 +363,27 @@ test(Starter, DrvDir, StartDone) ->
lists:seq(1, ?MAX_TIMEOUT)),
FlatTORs = lists:flatten(TORs),
Starter ! StartDone,
- test_loop(FlatTORs, Start).
+ test_loop(FlatTORs, Start, UtilData).
+
+new_util() ->
+ new_util([]).
+
+new_util(UtilData) ->
+ Util = cpu_sup:util(),
+ Time = erlang:monotonic_time(microsecond),
+ [{Time, Util} | UtilData].
-test_loop(TORs, Start) ->
+test_loop(TORs, Start, UtilData) ->
receive
{get_result, ?REG_NAME, Pid} ->
- End = erlang:monotonic_time(),
- Pid ! {result, ?REG_NAME, get_test_results(TORs), Start, End},
+ End = erlang:monotonic_time(microsecond),
+ EndUtilData = new_util(UtilData),
+ Pid ! {result, ?REG_NAME, get_test_results(TORs), Start, End, EndUtilData},
erl_ddll:unload_driver(?DRV_NAME),
erl_ddll:stop(),
exit(bye)
+ after ?UTIL_INTERVAL ->
+ test_loop(TORs, Start, new_util(UtilData))
end.
get_test_results(TORs) ->
diff --git a/erts/emulator/test/lttng_SUITE.erl b/erts/emulator/test/lttng_SUITE.erl
index efc79f42ed..6b7ad836f5 100644
--- a/erts/emulator/test/lttng_SUITE.erl
+++ b/erts/emulator/test/lttng_SUITE.erl
@@ -44,6 +44,7 @@ suite() ->
all() ->
[t_lttng_list,
+ t_memory_carrier,
t_carrier_pool,
t_async_io_pool,
t_driver_start_stop,
@@ -52,8 +53,7 @@ all() ->
t_driver_timeout,
t_driver_caller,
t_driver_flush,
- t_scheduler_poll,
- t_memory_carrier].
+ t_scheduler_poll].
init_per_suite(Config) ->
@@ -80,34 +80,34 @@ end_per_testcase(Case, _Config) ->
ok.
%% Not tested yet
-%% com_ericsson_otp:driver_process_exit
-%% com_ericsson_otp:driver_event
+%% org_erlang_otp:driver_process_exit
+%% org_erlang_otp:driver_event
%% tracepoints
%%
-%% com_ericsson_otp:carrier_pool_get
-%% com_ericsson_otp:carrier_pool_put
-%% com_ericsson_otp:carrier_destroy
-%% com_ericsson_otp:carrier_create
-%% com_ericsson_otp:aio_pool_put
-%% com_ericsson_otp:aio_pool_get
-%% com_ericsson_otp:driver_control
-%% com_ericsson_otp:driver_call
-%% com_ericsson_otp:driver_finish
-%% com_ericsson_otp:driver_ready_async
-%% com_ericsson_otp:driver_process_exit
-%% com_ericsson_otp:driver_stop
-%% com_ericsson_otp:driver_flush
-%% com_ericsson_otp:driver_stop_select
-%% com_ericsson_otp:driver_timeout
-%% com_ericsson_otp:driver_event
-%% com_ericsson_otp:driver_ready_output
-%% com_ericsson_otp:driver_ready_input
-%% com_ericsson_otp:driver_output
-%% com_ericsson_otp:driver_outputv
-%% com_ericsson_otp:driver_init
-%% com_ericsson_otp:driver_start
-%% com_ericsson_otp:scheduler_poll
+%% org_erlang_otp:carrier_pool_get
+%% org_erlang_otp:carrier_pool_put
+%% org_erlang_otp:carrier_destroy
+%% org_erlang_otp:carrier_create
+%% org_erlang_otp:aio_pool_put
+%% org_erlang_otp:aio_pool_get
+%% org_erlang_otp:driver_control
+%% org_erlang_otp:driver_call
+%% org_erlang_otp:driver_finish
+%% org_erlang_otp:driver_ready_async
+%% org_erlang_otp:driver_process_exit
+%% org_erlang_otp:driver_stop
+%% org_erlang_otp:driver_flush
+%% org_erlang_otp:driver_stop_select
+%% org_erlang_otp:driver_timeout
+%% org_erlang_otp:driver_event
+%% org_erlang_otp:driver_ready_output
+%% org_erlang_otp:driver_ready_input
+%% org_erlang_otp:driver_output
+%% org_erlang_otp:driver_outputv
+%% org_erlang_otp:driver_init
+%% org_erlang_otp:driver_start
+%% org_erlang_otp:scheduler_poll
%%
%% Testcases
@@ -117,48 +117,48 @@ t_lttng_list(_Config) ->
{ok, _} = cmd("lttng list -u"),
ok.
-%% com_ericsson_otp:carrier_pool_get
-%% com_ericsson_otp:carrier_pool_put
+%% org_erlang_otp:carrier_pool_get
+%% org_erlang_otp:carrier_pool_put
t_carrier_pool(Config) ->
- case have_carriers() of
+ case have_carriers(ets_alloc) of
false ->
{skip, "No Memory Carriers configured on system."};
true ->
- ok = lttng_start_event("com_ericsson_otp:carrier_pool*", Config),
+ ok = lttng_start_event("org_erlang_otp:carrier_pool*", Config),
ok = ets_load(),
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_otp:carrier_pool_get", Res),
- ok = check_tracepoint("com_ericsson_otp:carrier_pool_put", Res),
+ ok = check_tracepoint("org_erlang_otp:carrier_pool_get", Res),
+ ok = check_tracepoint("org_erlang_otp:carrier_pool_put", Res),
ok
end.
-%% com_ericsson_otp:carrier_destroy
-%% com_ericsson_otp:carrier_create
+%% org_erlang_otp:carrier_destroy
+%% org_erlang_otp:carrier_create
t_memory_carrier(Config) ->
- case have_carriers() of
+ case have_carriers(ets_alloc) of
false ->
{skip, "No Memory Carriers configured on system."};
true ->
- ok = lttng_start_event("com_ericsson_otp:carrier_*", Config),
+ ok = lttng_start_event("org_erlang_otp:carrier_*", Config),
ok = ets_load(),
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_otp:carrier_destroy", Res),
- ok = check_tracepoint("com_ericsson_otp:carrier_create", Res),
+ ok = check_tracepoint("org_erlang_otp:carrier_destroy", Res),
+ ok = check_tracepoint("org_erlang_otp:carrier_create", Res),
ok
end.
-%% com_ericsson_otp:aio_pool_put
-%% com_ericsson_otp:aio_pool_get
+%% org_erlang_otp:aio_pool_put
+%% org_erlang_otp:aio_pool_get
t_async_io_pool(Config) ->
case have_async_threads() of
false ->
{skip, "No Async Threads configured on system."};
true ->
- ok = lttng_start_event("com_ericsson_otp:aio_pool_*", Config),
+ ok = lttng_start_event("org_erlang_otp:aio_pool_*", Config),
Path1 = proplists:get_value(priv_dir, Config),
{ok, [[Path2]]} = init:get_argument(home),
@@ -168,51 +168,54 @@ t_async_io_pool(Config) ->
{ok, _} = file:list_dir(Path2),
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_otp:aio_pool_put", Res),
- ok = check_tracepoint("com_ericsson_otp:aio_pool_get", Res),
+ ok = check_tracepoint("org_erlang_otp:aio_pool_put", Res),
+ ok = check_tracepoint("org_erlang_otp:aio_pool_get", Res),
ok
end.
-%% com_ericsson_otp:driver_start
-%% com_ericsson_otp:driver_stop
+%% org_erlang_otp:driver_start
+%% org_erlang_otp:driver_stop
t_driver_start_stop(Config) ->
- ok = lttng_start_event("com_ericsson_otp:driver_*", Config),
+ ok = lttng_start_event("org_erlang_otp:driver_*", Config),
+ timer:sleep(500),
Path = proplists:get_value(priv_dir, Config),
Name = filename:join(Path, "sometext.txt"),
Bin = txt(),
ok = file:write_file(Name, Bin),
{ok, Bin} = file:read_file(Name),
+ timer:sleep(500),
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_otp:driver_start", Res),
- ok = check_tracepoint("com_ericsson_otp:driver_stop", Res),
- ok = check_tracepoint("com_ericsson_otp:driver_control", Res),
- ok = check_tracepoint("com_ericsson_otp:driver_outputv", Res),
- ok = check_tracepoint("com_ericsson_otp:driver_ready_async", Res),
+ ok = check_tracepoint("org_erlang_otp:driver_start", Res),
+ ok = check_tracepoint("org_erlang_otp:driver_stop", Res),
+ ok = check_tracepoint("org_erlang_otp:driver_control", Res),
+ ok = check_tracepoint("org_erlang_otp:driver_outputv", Res),
+ ok = check_tracepoint("org_erlang_otp:driver_ready_async", Res),
ok.
-%% com_ericsson_otp:driver_control
-%% com_ericsson_otp:driver_outputv
-%% com_ericsson_otp:driver_ready_async
+%% org_erlang_otp:driver_control
+%% org_erlang_otp:driver_outputv
+%% org_erlang_otp:driver_ready_async
t_driver_control_ready_async(Config) ->
- ok = lttng_start_event("com_ericsson_otp:driver_control", Config),
- ok = lttng_start_event("com_ericsson_otp:driver_outputv", Config),
- ok = lttng_start_event("com_ericsson_otp:driver_ready_async", Config),
+ ok = lttng_start_event("org_erlang_otp:driver_control", Config),
+ ok = lttng_start_event("org_erlang_otp:driver_outputv", Config),
+ ok = lttng_start_event("org_erlang_otp:driver_ready_async", Config),
Path = proplists:get_value(priv_dir, Config),
Name = filename:join(Path, "sometext.txt"),
Bin = txt(),
ok = file:write_file(Name, Bin),
{ok, Bin} = file:read_file(Name),
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_otp:driver_control", Res),
- ok = check_tracepoint("com_ericsson_otp:driver_outputv", Res),
- ok = check_tracepoint("com_ericsson_otp:driver_ready_async", Res),
+ ok = check_tracepoint("org_erlang_otp:driver_control", Res),
+ ok = check_tracepoint("org_erlang_otp:driver_outputv", Res),
+ ok = check_tracepoint("org_erlang_otp:driver_ready_async", Res),
ok.
-%% com_ericsson_otp:driver_ready_input
-%% com_ericsson_otp:driver_ready_output
+%% org_erlang_otp:driver_ready_input
+%% org_erlang_otp:driver_ready_output
t_driver_ready_input_output(Config) ->
- ok = lttng_start_event("com_ericsson_otp:driver_ready_*", Config),
+ ok = lttng_start_event("org_erlang_otp:driver_ready_*", Config),
+ timer:sleep(500),
Me = self(),
Pid = spawn_link(fun() -> tcp_server(Me, active) end),
receive {Pid, accept} -> ok end,
@@ -225,16 +228,17 @@ t_driver_ready_input_output(Config) ->
ok = gen_tcp:close(Sock),
receive {Pid, done} -> ok end,
+ timer:sleep(500),
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_otp:driver_ready_input", Res),
- ok = check_tracepoint("com_ericsson_otp:driver_ready_output", Res),
+ ok = check_tracepoint("org_erlang_otp:driver_ready_input", Res),
+ ok = check_tracepoint("org_erlang_otp:driver_ready_output", Res),
ok.
-%% com_ericsson_otp:driver_stop_select
-%% com_ericsson_otp:driver_timeout
+%% org_erlang_otp:driver_stop_select
+%% org_erlang_otp:driver_timeout
t_driver_timeout(Config) ->
- ok = lttng_start_event("com_ericsson_otp:driver_*", Config),
+ ok = lttng_start_event("org_erlang_otp:driver_*", Config),
Me = self(),
Pid = spawn_link(fun() -> tcp_server(Me, timeout) end),
receive {Pid, accept} -> ok end,
@@ -243,16 +247,16 @@ t_driver_timeout(Config) ->
receive {Pid, done} -> ok end,
ok = gen_tcp:close(Sock),
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_otp:driver_timeout", Res),
- ok = check_tracepoint("com_ericsson_otp:driver_stop_select", Res),
+ ok = check_tracepoint("org_erlang_otp:driver_timeout", Res),
+ ok = check_tracepoint("org_erlang_otp:driver_stop_select", Res),
ok.
-%% com_ericsson_otp:driver_call
-%% com_ericsson_otp:driver_output
-%% com_ericsson_otp:driver_init
-%% com_ericsson_otp:driver_finish
+%% org_erlang_otp:driver_call
+%% org_erlang_otp:driver_output
+%% org_erlang_otp:driver_init
+%% org_erlang_otp:driver_finish
t_driver_caller(Config) ->
- ok = lttng_start_event("com_ericsson_otp:driver_*", Config),
+ ok = lttng_start_event("org_erlang_otp:driver_*", Config),
Drv = 'caller_drv',
os:putenv("CALLER_DRV_USE_OUTPUTV", "false"),
@@ -278,25 +282,25 @@ t_driver_caller(Config) ->
erl_ddll:unload_driver(Drv),
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_otp:driver_call", Res),
- ok = check_tracepoint("com_ericsson_otp:driver_output", Res),
- ok = check_tracepoint("com_ericsson_otp:driver_init", Res),
- ok = check_tracepoint("com_ericsson_otp:driver_finish", Res),
+ ok = check_tracepoint("org_erlang_otp:driver_call", Res),
+ ok = check_tracepoint("org_erlang_otp:driver_output", Res),
+ ok = check_tracepoint("org_erlang_otp:driver_init", Res),
+ ok = check_tracepoint("org_erlang_otp:driver_finish", Res),
ok.
-%% com_ericsson_otp:scheduler_poll
+%% org_erlang_otp:scheduler_poll
t_scheduler_poll(Config) ->
- ok = lttng_start_event("com_ericsson_otp:scheduler_poll", Config),
+ ok = lttng_start_event("org_erlang_otp:scheduler_poll", Config),
ok = memory_load(),
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_otp:scheduler_poll", Res),
+ ok = check_tracepoint("org_erlang_otp:scheduler_poll", Res),
ok.
-%% com_ericsson_otp:driver_flush
+%% org_erlang_otp:driver_flush
t_driver_flush(Config) ->
- ok = lttng_start_event("com_ericsson_otp:driver_flush", Config),
+ ok = lttng_start_event("org_erlang_otp:driver_flush", Config),
Me = self(),
Pid = spawn_link(fun() -> tcp_server(Me, passive_no_read) end),
@@ -320,7 +324,7 @@ t_driver_flush(Config) ->
receive {Pid, done} -> ok end,
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_otp:driver_flush", Res),
+ ok = check_tracepoint("org_erlang_otp:driver_flush", Res),
ok.
%%
@@ -412,29 +416,29 @@ tcp_server(Pid, Type) ->
txt() ->
<<"%% tracepoints\n"
"%%\n"
- "%% com_ericsson_otp:carrier_pool_get\n"
- "%% com_ericsson_otp:carrier_pool_put\n"
- "%% com_ericsson_otp:carrier_destroy\n"
- "%% com_ericsson_otp:carrier_create\n"
- "%% com_ericsson_otp:aio_pool_put\n"
- "%% com_ericsson_otp:aio_pool_get\n"
- "%% com_ericsson_otp:driver_control\n"
- "%% com_ericsson_otp:driver_call\n"
- "%% com_ericsson_otp:driver_finish\n"
- "%% com_ericsson_otp:driver_ready_async\n"
- "%% com_ericsson_otp:driver_process_exit\n"
- "%% com_ericsson_otp:driver_stop\n"
- "%% com_ericsson_otp:driver_flush\n"
- "%% com_ericsson_otp:driver_stop_select\n"
- "%% com_ericsson_otp:driver_timeout\n"
- "%% com_ericsson_otp:driver_event\n"
- "%% com_ericsson_otp:driver_ready_output\n"
- "%% com_ericsson_otp:driver_ready_input\n"
- "%% com_ericsson_otp:driver_output\n"
- "%% com_ericsson_otp:driver_outputv\n"
- "%% com_ericsson_otp:driver_init\n"
- "%% com_ericsson_otp:driver_start\n"
- "%% com_ericsson_otp:scheduler_poll">>.
+ "%% org_erlang_otp:carrier_pool_get\n"
+ "%% org_erlang_otp:carrier_pool_put\n"
+ "%% org_erlang_otp:carrier_destroy\n"
+ "%% org_erlang_otp:carrier_create\n"
+ "%% org_erlang_otp:aio_pool_put\n"
+ "%% org_erlang_otp:aio_pool_get\n"
+ "%% org_erlang_otp:driver_control\n"
+ "%% org_erlang_otp:driver_call\n"
+ "%% org_erlang_otp:driver_finish\n"
+ "%% org_erlang_otp:driver_ready_async\n"
+ "%% org_erlang_otp:driver_process_exit\n"
+ "%% org_erlang_otp:driver_stop\n"
+ "%% org_erlang_otp:driver_flush\n"
+ "%% org_erlang_otp:driver_stop_select\n"
+ "%% org_erlang_otp:driver_timeout\n"
+ "%% org_erlang_otp:driver_event\n"
+ "%% org_erlang_otp:driver_ready_output\n"
+ "%% org_erlang_otp:driver_ready_input\n"
+ "%% org_erlang_otp:driver_output\n"
+ "%% org_erlang_otp:driver_outputv\n"
+ "%% org_erlang_otp:driver_init\n"
+ "%% org_erlang_otp:driver_start\n"
+ "%% org_erlang_otp:scheduler_poll">>.
load_driver(Dir, Driver) ->
case erl_ddll:load_driver(Dir, Driver) of
@@ -446,11 +450,10 @@ load_driver(Dir, Driver) ->
%% check
-have_carriers() ->
- Cap = element(3,erlang:system_info(allocator)),
- case Cap -- [sys_alloc,sys_aligned_alloc] of
- [] -> false;
- _ -> true
+have_carriers(Alloc) ->
+ case erlang:system_info({allocator,Alloc}) of
+ false -> false;
+ _ -> true
end.
have_async_threads() ->
diff --git a/erts/emulator/test/map_SUITE.erl b/erts/emulator/test/map_SUITE.erl
index b3870f0313..5af676c409 100644
--- a/erts/emulator/test/map_SUITE.erl
+++ b/erts/emulator/test/map_SUITE.erl
@@ -77,6 +77,7 @@
t_ets/1,
t_dets/1,
t_tracing/1,
+ t_hash_entropy/1,
%% instruction-level tests
t_has_map_fields/1,
@@ -140,6 +141,7 @@ all() -> [t_build_and_match_literals, t_build_and_match_literals_large,
t_pdict,
t_ets,
t_tracing,
+ t_hash_entropy,
%% instruction-level tests
t_has_map_fields,
@@ -3020,6 +3022,39 @@ do_badmap_17(Config) ->
id(I) -> I.
+%% OTP-13763
+t_hash_entropy(Config) when is_list(Config) ->
+ %% entropy bug in 18.3, 19.0
+ M1 = maps:from_list([{#{"id" => I}, ok}||I <- lists:seq(1,50000)]),
+
+ #{ #{"id" => 100} := ok,
+ #{"id" => 200} := ok,
+ #{"id" => 300} := ok,
+ #{"id" => 400} := ok,
+ #{"id" => 500} := ok,
+ #{"id" => 600} := ok,
+ #{"id" => 700} := ok,
+ #{"id" => 800} := ok,
+ #{"id" => 900} := ok,
+ #{"id" => 25061} := ok,
+ #{"id" => 39766} := ok } = M1,
+
+ M0 = maps:from_list([{I,ok}||I <- lists:seq(1,33)]),
+ M2 = maps:from_list([{M0#{"id" => I}, ok}||I <- lists:seq(1,50000)]),
+
+ ok = maps:get(M0#{"id" => 100}, M2),
+ ok = maps:get(M0#{"id" => 200}, M2),
+ ok = maps:get(M0#{"id" => 300}, M2),
+ ok = maps:get(M0#{"id" => 400}, M2),
+ ok = maps:get(M0#{"id" => 500}, M2),
+ ok = maps:get(M0#{"id" => 600}, M2),
+ ok = maps:get(M0#{"id" => 700}, M2),
+ ok = maps:get(M0#{"id" => 800}, M2),
+ ok = maps:get(M0#{"id" => 900}, M2),
+ ok = maps:get(M0#{"id" => 25061}, M2),
+ ok = maps:get(M0#{"id" => 39766}, M2),
+ ok.
+
%% OTP-13146
%% Provoke major GC with a lot of "fat" maps on external format in msg queue
%% causing heap fragments to be allocated.
diff --git a/erts/emulator/test/message_queue_data_SUITE.erl b/erts/emulator/test/message_queue_data_SUITE.erl
index 226462676c..e084b9482d 100644
--- a/erts/emulator/test/message_queue_data_SUITE.erl
+++ b/erts/emulator/test/message_queue_data_SUITE.erl
@@ -52,18 +52,12 @@ basic(Config) when is_list(Config) ->
ok = rpc:call(Node2, ?MODULE, basic_test, [on_heap]),
stop_node(Node2),
- {ok, Node3} = start_node(Config, "+hmqd mixed"),
- ok = rpc:call(Node3, ?MODULE, basic_test, [mixed]),
- stop_node(Node3),
-
ok.
is_valid_mqd_value(off_heap) ->
true;
is_valid_mqd_value(on_heap) ->
true;
-is_valid_mqd_value(mixed) ->
- true;
is_valid_mqd_value(_) ->
false.
@@ -78,9 +72,6 @@ basic_test(Default) ->
{message_queue_data, off_heap} = process_info(self(), message_queue_data),
off_heap = process_flag(message_queue_data, on_heap),
{message_queue_data, on_heap} = process_info(self(), message_queue_data),
- on_heap = process_flag(message_queue_data, mixed),
- {message_queue_data, mixed} = process_info(self(), message_queue_data),
- mixed = process_flag(message_queue_data, Default),
{'EXIT', _} = (catch process_flag(message_queue_data, blupp)),
P1 = spawn_opt(fun () -> receive after infinity -> ok end end,
@@ -101,12 +92,6 @@ basic_test(Default) ->
unlink(P3),
exit(P3, bye),
- P4 = spawn_opt(fun () -> receive after infinity -> ok end end,
- [link, {message_queue_data, mixed}]),
- {message_queue_data, mixed} = process_info(P4, message_queue_data),
- unlink(P4),
- exit(P4, bye),
-
{'EXIT', _} = (catch spawn_opt(fun () -> receive after infinity -> ok end end,
[link, {message_queue_data, blapp}])),
@@ -116,21 +101,18 @@ process_info_messages(Config) when is_list(Config) ->
Tester = self(),
P1 = spawn_opt(fun () ->
receive after 500 -> ok end,
- mixed = process_flag(message_queue_data, off_heap),
+ on_heap = process_flag(message_queue_data, off_heap),
Tester ! first,
receive after 500 -> ok end,
off_heap = process_flag(message_queue_data, on_heap),
Tester ! second,
receive after 500 -> ok end,
- on_heap = process_flag(message_queue_data, mixed),
+ on_heap = process_flag(message_queue_data, off_heap),
Tester ! third,
- receive after 500 -> ok end,
- mixed = process_flag(message_queue_data, off_heap),
- Tester ! fourth,
receive after infinity -> ok end
end,
- [link, {message_queue_data, mixed}]),
+ [link, {message_queue_data, on_heap}]),
P1 ! "A",
receive first -> ok end,
@@ -139,25 +121,20 @@ process_info_messages(Config) when is_list(Config) ->
P1 ! "C",
receive third -> ok end,
P1 ! "D",
- receive fourth -> ok end,
- P1 ! "E",
- {messages, ["A", "B", "C", "D", "E"]} = process_info(P1, messages),
+ {messages, ["A", "B", "C", "D"]} = process_info(P1, messages),
P2 = spawn_opt(fun () ->
receive after 500 -> ok end,
- mixed = process_flag(message_queue_data, off_heap),
+ on_heap = process_flag(message_queue_data, off_heap),
Tester ! first,
receive after 500 -> ok end,
off_heap = process_flag(message_queue_data, on_heap),
Tester ! second,
receive after 500 -> ok end,
- on_heap = process_flag(message_queue_data, mixed),
+ on_heap = process_flag(message_queue_data, off_heap),
Tester ! third,
receive after 500 -> ok end,
- mixed = process_flag(message_queue_data, off_heap),
- Tester ! fourth,
- receive after 500 -> ok end,
Tester ! process_info(self(), messages),
@@ -165,11 +142,10 @@ process_info_messages(Config) when is_list(Config) ->
receive M2 -> M2 = "B" end,
receive M3 -> M3 = "C" end,
receive M4 -> M4 = "D" end,
- receive M5 -> M5 = "E" end,
Tester ! self()
end,
- [link, {message_queue_data, mixed}]),
+ [link, {message_queue_data, on_heap}]),
P2 ! "A",
receive first -> ok end,
@@ -178,12 +154,10 @@ process_info_messages(Config) when is_list(Config) ->
P2 ! "C",
receive third -> ok end,
P2 ! "D",
- receive fourth -> ok end,
- P2 ! "E",
receive
Msg ->
- {messages, ["A", "B", "C", "D", "E"]} = Msg
+ {messages, ["A", "B", "C", "D"]} = Msg
end,
receive P2 -> ok end,
@@ -226,7 +200,7 @@ start_node(Config, Opts) when is_list(Config), is_list(Opts) ->
++ "-"
++ atom_to_list(proplists:get_value(testcase, Config))
++ "-"
- ++ integer_to_list(erlang:system_time(seconds))
+ ++ integer_to_list(erlang:system_time(second))
++ "-"
++ integer_to_list(erlang:unique_integer([positive]))),
test_server:start_node(Name, slave, [{args, Opts++" -pa "++Pa}]).
diff --git a/erts/emulator/test/monitor_SUITE.erl b/erts/emulator/test/monitor_SUITE.erl
index 8955e62df5..827ed817cc 100644
--- a/erts/emulator/test/monitor_SUITE.erl
+++ b/erts/emulator/test/monitor_SUITE.erl
@@ -21,6 +21,7 @@
-module(monitor_SUITE).
-include_lib("common_test/include/ct.hrl").
+-include_lib("eunit/include/eunit.hrl").
-export([all/0, suite/0, groups/0,
case_1/1, case_1a/1, case_2/1, case_2a/1, mon_e_1/1, demon_e_1/1, demon_1/1,
@@ -696,7 +697,7 @@ mixer(Config) when is_list(Config) ->
named_down(Config) when is_list(Config) ->
Name = list_to_atom(atom_to_list(?MODULE)
++ "-named_down-"
- ++ integer_to_list(erlang:system_time(seconds))
+ ++ integer_to_list(erlang:system_time(second))
++ "-" ++ integer_to_list(erlang:unique_integer([positive]))),
Prio = process_flag(priority,high),
%% Spawn a bunch of high prio cpu bound processes to prevent
@@ -706,7 +707,7 @@ named_down(Config) when is_list(Config) ->
spawn_opt(fun () ->
WFun = fun
(F, hej) -> F(F, hopp);
-(F, hopp) -> F(F, hej)
+ (F, hopp) -> F(F, hej)
end,
NoSchedulers = erlang:system_info(schedulers_online),
lists:foreach(fun (_) ->
@@ -726,13 +727,14 @@ named_down(Config) when is_list(Config) ->
NamedProc = spawn_link(fun () ->
receive after infinity -> ok end
end),
- true = register(Name, NamedProc),
+ ?assertEqual(true, register(Name, NamedProc)),
unlink(NamedProc),
exit(NamedProc, bang),
Mon = erlang:monitor(process, Name),
- receive {'DOWN',Mon, _, _, _} -> ok end,
- true = register(Name, self()),
- true = unregister(Name),
+ receive {'DOWN',Mon, _, _, bang} -> ok
+ after 3000 -> ?assert(false) end,
+ ?assertEqual(true, register(Name, self())),
+ ?assertEqual(true, unregister(Name)),
process_flag(priority,Prio),
ok.
diff --git a/erts/emulator/test/mtx_SUITE.erl b/erts/emulator/test/mtx_SUITE.erl
index 1493e52655..12928ed6d8 100644
--- a/erts/emulator/test/mtx_SUITE.erl
+++ b/erts/emulator/test/mtx_SUITE.erl
@@ -443,7 +443,7 @@ hammer_ets_rwlock_test(XOpts, UW, C, N, NP, SC) ->
{'DOWN', M, process, P, _} -> ok
end
end, Ps),
- Res = (Stop-Start)/erlang:convert_time_unit(1,seconds,native),
+ Res = (Stop-Start)/erlang:convert_time_unit(1,second,native),
Caller ! {?MODULE, self(), Res}
end,
TP = spawn_link(T),
diff --git a/erts/emulator/test/nif_SUITE.erl b/erts/emulator/test/nif_SUITE.erl
index a1e1495480..8df2733fac 100644
--- a/erts/emulator/test/nif_SUITE.erl
+++ b/erts/emulator/test/nif_SUITE.erl
@@ -45,7 +45,8 @@
nif_now_time/1, nif_cpu_time/1, nif_unique_integer/1,
nif_is_process_alive/1, nif_is_port_alive/1,
nif_term_to_binary/1, nif_binary_to_term/1,
- nif_port_command/1
+ nif_port_command/1,
+ nif_snprintf/1
]).
-export([many_args_100/100]).
@@ -79,8 +80,8 @@ all() ->
nif_now_time, nif_cpu_time, nif_unique_integer,
nif_is_process_alive, nif_is_port_alive,
nif_term_to_binary, nif_binary_to_term,
- nif_port_command
- ].
+ nif_port_command,
+ nif_snprintf].
init_per_testcase(_Case, Config) ->
Config.
@@ -1442,6 +1443,17 @@ otp_9828_loop(Bin, Val) ->
consume_timeslice(Config) when is_list(Config) ->
+ case {erlang:system_info(debug_compiled),
+ erlang:system_info(lock_checking)} of
+ {false, false} ->
+ consume_timeslice_test(Config);
+ {false, true} ->
+ {skipped, "Lock checking enabled"};
+ _ ->
+ {skipped, "Debug compiled"}
+ end.
+
+consume_timeslice_test(Config) when is_list(Config) ->
CONTEXT_REDS = 2000,
Me = self(),
Go = make_ref(),
@@ -1691,7 +1703,7 @@ nif_raise_exceptions(NifFunc) ->
end, ok, ExcTerms).
-define(ERL_NIF_TIME_ERROR, -9223372036854775808).
--define(TIME_UNITS, [seconds, milli_seconds, micro_seconds, nano_seconds]).
+-define(TIME_UNITS, [second, millisecond, microsecond, nanosecond]).
nif_monotonic_time(Config) ->
?ERL_NIF_TIME_ERROR = monotonic_time(invalid_time_unit),
@@ -1757,8 +1769,8 @@ chk_toffs([TU|TUs]) ->
chk_toffs(TUs).
nif_convert_time_unit(Config) ->
- ?ERL_NIF_TIME_ERROR = convert_time_unit(0, seconds, invalid_time_unit),
- ?ERL_NIF_TIME_ERROR = convert_time_unit(0, invalid_time_unit, seconds),
+ ?ERL_NIF_TIME_ERROR = convert_time_unit(0, second, invalid_time_unit),
+ ?ERL_NIF_TIME_ERROR = convert_time_unit(0, invalid_time_unit, second),
?ERL_NIF_TIME_ERROR = convert_time_unit(0, invalid_time_unit, invalid_time_unit),
lists:foreach(fun (Offset) ->
lists:foreach(fun (Diff) ->
@@ -1807,7 +1819,7 @@ nif_convert_time_unit(Config) ->
ctu_loop(0) ->
ok;
ctu_loop(N) ->
- chk_ctu(erlang:monotonic_time(nano_seconds)),
+ chk_ctu(erlang:monotonic_time(nanosecond)),
ctu_loop(N-1).
chk_ctu(Time) ->
@@ -1822,7 +1834,7 @@ chk_ctu(Time, [FromTU|FromTUs]) ->
chk_ctu(_Time, _FromTU, []) ->
ok;
chk_ctu(Time, FromTU, [ToTU|ToTUs]) ->
- T = erlang:convert_time_unit(Time, nano_seconds, FromTU),
+ T = erlang:convert_time_unit(Time, nanosecond, FromTU),
TE = erlang:convert_time_unit(T, FromTU, ToTU),
TN = convert_time_unit(T, FromTU, ToTU),
case TE =:= TN of
@@ -1952,9 +1964,18 @@ nif_port_command(Config) ->
port_close(Port),
{'EXIT', {badarg, _}} = (catch port_command_nif(Port, "hello\n")),
+ ok.
+nif_snprintf(Config) ->
+ ensure_lib_loaded(Config),
+ <<"ok",0>> = format_term_nif(3,ok),
+ <<"o",0>> = format_term_nif(2,ok),
+ <<"\"hello world\"",0>> = format_term_nif(14,"hello world"),
+ <<"{{hello,world,-33},3.14",_/binary>> = format_term_nif(50,{{hello,world, -33}, 3.14, self()}),
+ <<"{{hello,world,-33},",0>> = format_term_nif(20,{{hello,world, -33}, 3.14, self()}),
ok.
+
%% The NIFs:
lib_version() -> undefined.
call_history() -> ?nif_stub.
@@ -2015,6 +2036,7 @@ is_port_alive_nif(_) -> ?nif_stub.
term_to_binary_nif(_, _) -> ?nif_stub.
binary_to_term_nif(_, _, _) -> ?nif_stub.
port_command_nif(_, _) -> ?nif_stub.
+format_term_nif(_,_) -> ?nif_stub.
%% maps
is_map_nif(_) -> ?nif_stub.
diff --git a/erts/emulator/test/nif_SUITE_data/nif_SUITE.c b/erts/emulator/test/nif_SUITE_data/nif_SUITE.c
index 73073ad59f..f2b1ef9d24 100644
--- a/erts/emulator/test/nif_SUITE_data/nif_SUITE.c
+++ b/erts/emulator/test/nif_SUITE_data/nif_SUITE.c
@@ -38,10 +38,10 @@ static ERL_NIF_TERM atom_self;
static ERL_NIF_TERM atom_ok;
static ERL_NIF_TERM atom_join;
static ERL_NIF_TERM atom_binary_resource_type;
-static ERL_NIF_TERM atom_seconds;
-static ERL_NIF_TERM atom_milli_seconds;
-static ERL_NIF_TERM atom_micro_seconds;
-static ERL_NIF_TERM atom_nano_seconds;
+static ERL_NIF_TERM atom_second;
+static ERL_NIF_TERM atom_millisecond;
+static ERL_NIF_TERM atom_microsecond;
+static ERL_NIF_TERM atom_nanosecond;
typedef struct
@@ -147,10 +147,10 @@ static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)
atom_ok = enif_make_atom(env,"ok");
atom_join = enif_make_atom(env,"join");
atom_binary_resource_type = enif_make_atom(env,"binary_resource_type");
- atom_seconds = enif_make_atom(env,"seconds");
- atom_milli_seconds = enif_make_atom(env,"milli_seconds");
- atom_micro_seconds = enif_make_atom(env,"micro_seconds");
- atom_nano_seconds = enif_make_atom(env,"nano_seconds");
+ atom_second = enif_make_atom(env,"second");
+ atom_millisecond = enif_make_atom(env,"millisecond");
+ atom_microsecond = enif_make_atom(env,"microsecond");
+ atom_nanosecond = enif_make_atom(env,"nanosecond");
*priv_data = data;
return 0;
@@ -1808,13 +1808,13 @@ static ERL_NIF_TERM monotonic_time(ErlNifEnv* env, int argc, const ERL_NIF_TERM
if (argc != 1)
return atom_false;
- if (enif_compare(argv[0], atom_seconds) == 0)
+ if (enif_compare(argv[0], atom_second) == 0)
time_unit = ERL_NIF_SEC;
- else if (enif_compare(argv[0], atom_milli_seconds) == 0)
+ else if (enif_compare(argv[0], atom_millisecond) == 0)
time_unit = ERL_NIF_MSEC;
- else if (enif_compare(argv[0], atom_micro_seconds) == 0)
+ else if (enif_compare(argv[0], atom_microsecond) == 0)
time_unit = ERL_NIF_USEC;
- else if (enif_compare(argv[0], atom_nano_seconds) == 0)
+ else if (enif_compare(argv[0], atom_nanosecond) == 0)
time_unit = ERL_NIF_NSEC;
else
time_unit = 4711; /* invalid time unit */
@@ -1829,13 +1829,13 @@ static ERL_NIF_TERM time_offset(ErlNifEnv* env, int argc, const ERL_NIF_TERM arg
if (argc != 1)
return atom_false;
- if (enif_compare(argv[0], atom_seconds) == 0)
+ if (enif_compare(argv[0], atom_second) == 0)
time_unit = ERL_NIF_SEC;
- else if (enif_compare(argv[0], atom_milli_seconds) == 0)
+ else if (enif_compare(argv[0], atom_millisecond) == 0)
time_unit = ERL_NIF_MSEC;
- else if (enif_compare(argv[0], atom_micro_seconds) == 0)
+ else if (enif_compare(argv[0], atom_microsecond) == 0)
time_unit = ERL_NIF_USEC;
- else if (enif_compare(argv[0], atom_nano_seconds) == 0)
+ else if (enif_compare(argv[0], atom_nanosecond) == 0)
time_unit = ERL_NIF_NSEC;
else
time_unit = 4711; /* invalid time unit */
@@ -1856,24 +1856,24 @@ static ERL_NIF_TERM convert_time_unit(ErlNifEnv* env, int argc, const ERL_NIF_TE
val = (ErlNifTime) i64;
- if (enif_compare(argv[1], atom_seconds) == 0)
+ if (enif_compare(argv[1], atom_second) == 0)
from = ERL_NIF_SEC;
- else if (enif_compare(argv[1], atom_milli_seconds) == 0)
+ else if (enif_compare(argv[1], atom_millisecond) == 0)
from = ERL_NIF_MSEC;
- else if (enif_compare(argv[1], atom_micro_seconds) == 0)
+ else if (enif_compare(argv[1], atom_microsecond) == 0)
from = ERL_NIF_USEC;
- else if (enif_compare(argv[1], atom_nano_seconds) == 0)
+ else if (enif_compare(argv[1], atom_nanosecond) == 0)
from = ERL_NIF_NSEC;
else
from = 4711; /* invalid time unit */
- if (enif_compare(argv[2], atom_seconds) == 0)
+ if (enif_compare(argv[2], atom_second) == 0)
to = ERL_NIF_SEC;
- else if (enif_compare(argv[2], atom_milli_seconds) == 0)
+ else if (enif_compare(argv[2], atom_millisecond) == 0)
to = ERL_NIF_MSEC;
- else if (enif_compare(argv[2], atom_micro_seconds) == 0)
+ else if (enif_compare(argv[2], atom_microsecond) == 0)
to = ERL_NIF_USEC;
- else if (enif_compare(argv[2], atom_nano_seconds) == 0)
+ else if (enif_compare(argv[2], atom_nanosecond) == 0)
to = ERL_NIF_NSEC;
else
to = 4711; /* invalid time unit */
@@ -1998,6 +1998,23 @@ static ERL_NIF_TERM port_command(ErlNifEnv* env, int argc, const ERL_NIF_TERM ar
return atom_true;
}
+static ERL_NIF_TERM format_term(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ ErlNifBinary obin;
+ unsigned int size;
+
+ if (!enif_get_uint(env, argv[0], &size))
+ return enif_make_badarg(env);
+ if (!enif_alloc_binary(size,&obin))
+ return enif_make_badarg(env);
+
+ if (enif_snprintf((char*)obin.data, (size_t)size, "%T", argv[1]) < 0)
+ return atom_false;
+
+ return enif_make_binary(env,&obin);
+}
+
+
static ErlNifFunc nif_funcs[] =
{
{"lib_version", 0, lib_version},
@@ -2073,7 +2090,8 @@ static ErlNifFunc nif_funcs[] =
{"is_port_alive_nif", 1, is_port_alive},
{"term_to_binary_nif", 2, term_to_binary},
{"binary_to_term_nif", 3, binary_to_term},
- {"port_command_nif", 2, port_command}
+ {"port_command_nif", 2, port_command},
+ {"format_term_nif", 2, format_term}
};
ERL_NIF_INIT(nif_SUITE,nif_funcs,load,reload,upgrade,unload)
diff --git a/erts/emulator/test/node_container_SUITE.erl b/erts/emulator/test/node_container_SUITE.erl
index 536c91d4ae..af18545bff 100644
--- a/erts/emulator/test/node_container_SUITE.erl
+++ b/erts/emulator/test/node_container_SUITE.erl
@@ -1092,7 +1092,7 @@ wait_until(Pred) ->
get_nodefirstname_string() ->
atom_to_list(?MODULE)
++ "-"
- ++ integer_to_list(erlang:system_time(seconds))
+ ++ integer_to_list(erlang:system_time(second))
++ "-"
++ integer_to_list(erlang:unique_integer([positive])).
diff --git a/erts/emulator/test/old_scheduler_SUITE.erl b/erts/emulator/test/old_scheduler_SUITE.erl
index f91d84beea..ffe7d40139 100644
--- a/erts/emulator/test/old_scheduler_SUITE.erl
+++ b/erts/emulator/test/old_scheduler_SUITE.erl
@@ -309,13 +309,13 @@ receiver(T0, TimeSec, Main, {P1,P1N}, {P2,P2N}) ->
%% uncomment lines below to get life sign (debug)
receiver(T0, Time, Main, P1,P1N,P1Rs, P2,P2N,P2Rs, 0) ->
- % T = erlang:convert_time_unit(erlang:monotonic_time() - T0, native, milli_seconds),
+ % T = erlang:convert_time_unit(erlang:monotonic_time() - T0, native, millisecond),
% erlang:display({round(T/1000),P1Rs,P2Rs}),
receiver(T0, Time, Main, P1,P1N,P1Rs, P2,P2N,P2Rs, 100000);
receiver(T0, Time, Main, P1,P1N,P1Rs, P2,P2N,P2Rs, C) ->
Remain = Time - erlang:convert_time_unit(erlang:monotonic_time() - T0,
- native, milli_seconds), % test time remaining
+ native, millisecond), % test time remaining
Remain1 = if Remain < 0 ->
0;
true ->
diff --git a/erts/emulator/test/port_SUITE.erl b/erts/emulator/test/port_SUITE.erl
index 79abcbde5f..4323849465 100644
--- a/erts/emulator/test/port_SUITE.erl
+++ b/erts/emulator/test/port_SUITE.erl
@@ -74,29 +74,73 @@
%%
--export([all/0, suite/0, groups/0,
- init_per_testcase/2, end_per_testcase/2,
- init_per_suite/1, end_per_suite/1,
- stream_small/1, stream_big/1,
- basic_ping/1, slow_writes/1, bad_packet/1, bad_port_messages/1,
- mul_basic/1, mul_slow_writes/1,
- dying_port/1, port_program_with_path/1,
- open_input_file_port/1, open_output_file_port/1,
- count_fds/1,
- iter_max_ports/1, eof/1, input_only/1, output_only/1,
- name1/1,
- t_binary/1, parallell/1, t_exit/1,
- env/1, huge_env/1, bad_env/1, cd/1, exit_status/1,
- bad_args/1,
- tps_16_bytes/1, tps_1K/1, line/1, stderr_to_stdout/1,
- otp_3906/1, otp_4389/1, win_massive/1, win_massive_client/1,
- mix_up_ports/1, otp_5112/1, otp_5119/1, otp_6224/1,
- exit_status_multi_scheduling_block/1, ports/1,
- spawn_driver/1, spawn_executable/1, close_deaf_port/1,
- port_setget_data/1,
- unregister_name/1, parallelism_option/1]).
-
--export([do_iter_max_ports/2]).
+-export([all/0, suite/0, groups/0, init_per_testcase/2, end_per_testcase/2,
+ init_per_suite/1, end_per_suite/1]).
+-export([
+ bad_args/1,
+ bad_env/1,
+ bad_packet/1,
+ bad_port_messages/1,
+ basic_ping/1,
+ cd/1,
+ cd_relative/1,
+ close_deaf_port/1,
+ count_fds/1,
+ dying_port/1,
+ env/1,
+ eof/1,
+ exit_status/1,
+ exit_status_multi_scheduling_block/1,
+ huge_env/1,
+ pipe_limit_env/1,
+ input_only/1,
+ iter_max_ports/1,
+ line/1,
+ mix_up_ports/1,
+ mon_port_invalid_type/1,
+ mon_port_bad_named/1,
+ mon_port_bad_remote_on_local/1,
+ mon_port_local/1,
+ mon_port_name_demonitor/1,
+ mon_port_named/1,
+ mon_port_origin_dies/1,
+ mon_port_owner_dies/1,
+ mon_port_pid_demonitor/1,
+ mon_port_remote_on_remote/1,
+ mon_port_driver_die/1,
+ mon_port_driver_die_demonitor/1,
+ mul_basic/1,
+ mul_slow_writes/1,
+ name1/1,
+ open_input_file_port/1,
+ open_output_file_port/1,
+ otp_3906/1,
+ otp_4389/1,
+ otp_5112/1,
+ otp_5119/1,
+ otp_6224/1,
+ output_only/1,
+ parallelism_option/1,
+ parallell/1,
+ port_program_with_path/1,
+ port_setget_data/1,
+ ports/1,
+ slow_writes/1,
+ spawn_driver/1,
+ spawn_executable/1,
+ stderr_to_stdout/1,
+ stream_big/1,
+ stream_small/1,
+ t_binary/1,
+ t_exit/1,
+ tps_16_bytes/1,
+ tps_1K/1,
+ unregister_name/1,
+ win_massive/1,
+ win_massive_client/1
+]).
+
+-export([do_iter_max_ports/2, relative_cd/0]).
%% Internal exports.
-export([tps/3]).
@@ -105,32 +149,52 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
+-include_lib("eunit/include/eunit.hrl").
suite() ->
[{ct_hooks,[ts_install_cth]},
{timetrap, {seconds, 10}}].
-all() ->
+all() ->
[otp_6224, {group, stream}, basic_ping, slow_writes,
bad_packet, bad_port_messages, {group, options},
{group, multiple_packets}, parallell, dying_port,
port_program_with_path, open_input_file_port,
open_output_file_port, name1, env, huge_env, bad_env, cd,
- bad_args,
+ cd_relative, pipe_limit_env, bad_args,
exit_status, iter_max_ports, count_fds, t_exit, {group, tps}, line,
stderr_to_stdout, otp_3906, otp_4389, win_massive,
mix_up_ports, otp_5112, otp_5119,
exit_status_multi_scheduling_block, ports, spawn_driver,
spawn_executable, close_deaf_port, unregister_name,
port_setget_data,
- parallelism_option].
-
-groups() ->
+ parallelism_option,
+ mon_port_invalid_type,
+ mon_port_local,
+ mon_port_remote_on_remote,
+ mon_port_bad_remote_on_local,
+ mon_port_origin_dies,
+ mon_port_owner_dies,
+ mon_port_named,
+ mon_port_bad_named,
+ mon_port_pid_demonitor,
+ mon_port_name_demonitor,
+ mon_port_driver_die,
+ mon_port_driver_die_demonitor
+ ].
+
+groups() ->
[{stream, [], [stream_small, stream_big]},
{options, [], [t_binary, eof, input_only, output_only]},
{multiple_packets, [], [mul_basic, mul_slow_writes]},
{tps, [], [tps_16_bytes, tps_1K]}].
+init_per_testcase(Case, Config) when Case =:= mon_port_driver_die;
+ Case =:= mon_port_driver_die_demonitor ->
+ case erlang:system_info(schedulers_online) of
+ 1 -> {skip, "Need 2 schedulers to run testcase"};
+ _ -> Config
+ end;
init_per_testcase(Case, Config) ->
[{testcase, Case} |Config].
@@ -160,7 +224,7 @@ do_win_massive() ->
ct:timetrap({minutes, 6}),
SuiteDir = filename:dirname(code:which(?MODULE)),
Ports = " +Q 8192",
- {ok, Node} =
+ {ok, Node} =
test_server:start_node(win_massive,
slave,
[{args, " -pa " ++ SuiteDir ++ Ports}]),
@@ -169,7 +233,7 @@ do_win_massive() ->
ok.
win_massive_client(N) ->
- {ok,P}=gen_tcp:listen(?WIN_MASSIVE_PORT,[{reuseaddr,true}]),
+ {ok,P}=gen_tcp:listen(?WIN_MASSIVE_PORT,[{reuseaddr,true}]),
L = win_massive_loop(P,N),
Len = length(L),
lists:foreach(fun(E) ->
@@ -278,7 +342,7 @@ bad_port_messages(Config) when is_list(Config) ->
bad_message(PortTest, {self(),{connect,no_pid}}),
ok.
-bad_message(PortTest, Message) ->
+bad_message(PortTest, Message) ->
P = open_port({spawn,PortTest}, []),
P ! Message,
receive
@@ -773,7 +837,7 @@ line(Config) when is_list(Config) ->
S1 = lists:flatten(io_lib:format("-l~w", [length(L1)])),
io:format("S1 = ~w, L1 = ~w~n", [S1,L1]),
port_expect(Config,[{L1,
- [{eol, Packet1}, {noeol, Packet2}, eof]}], 0,
+ [{eol, Packet1}, {noeol, Packet2}, eof]}], 0,
S1, [{line,Siz},eof]),
%% Test that lonely <CR> Don't get treated as newlines
port_expect(Config,[{lists:append([Packet1, [13], Packet2,
@@ -844,9 +908,9 @@ env(Config) when is_list(Config) ->
{"glurf","a glorfy string"}]),
%% A lot of non existing variables (mingled with existing)
- NotExistingList = [{lists:flatten(io_lib:format("V~p_not_existing",[X])),false}
+ NotExistingList = [{lists:flatten(io_lib:format("V~p_not_existing",[X])),false}
|| X <- lists:seq(1,150)],
- ExistingList = [{lists:flatten(io_lib:format("V~p_existing",[X])),"a_value"}
+ ExistingList = [{lists:flatten(io_lib:format("V~p_existing",[X])),"a_value"}
|| X <- lists:seq(1,150)],
env_slave(Temp, lists:sort(ExistingList ++ NotExistingList)),
ok.
@@ -942,6 +1006,55 @@ huge_env(Config) when is_list(Config) ->
ct:fail("Open port failed ~p:~p",[E,R])
end.
+%% Test to spawn program with command payload buffer
+%% just around pipe capacity (9f779819f6bda734c5953468f7798)
+pipe_limit_env(Config) when is_list(Config) ->
+ Cmd = "true",
+ CmdSize = command_payload_size(Cmd),
+ Limits = [4096, 16384, 65536], % Try a couple of common pipe buffer sizes
+
+ lists:foreach(fun(Lim) ->
+ lists:foreach(fun(L) -> pipe_limit_env_do(L, Cmd, CmdSize)
+ end, lists:seq(Lim-5, Lim+5))
+ end, Limits),
+ ok.
+
+pipe_limit_env_do(Bytes, Cmd, CmdSize) ->
+ case env_of_bytes(Bytes-CmdSize) of
+ [] -> skip;
+ Env ->
+ try erlang:open_port({spawn,Cmd},[exit_status, {env, Env}]) of
+ P ->
+ receive
+ {P, {exit_status,N}} = M ->
+ %% Bug caused exit_status 150 (EINVAL+128)
+ 0 = N
+ end
+ catch E:R ->
+ %% Have to catch the error here, as printing the stackdump
+ %% in the ct log is way to heavy for some test machines.
+ ct:fail("Open port failed ~p:~p",[E,R])
+ end
+ end.
+
+%% environ format: KEY=VALUE\0
+env_of_bytes(Bytes) when Bytes > 3 ->
+ Env = [{"X",lists:duplicate(Bytes-3, $x)}];
+env_of_bytes(_) -> [].
+
+%% White box assumption about payload written to pipe
+%% for Cmd and current environment (see spawn_start in sys_driver.c)
+command_payload_size(Cmd) ->
+ EnvSize = lists:foldl(fun(E,Acc) -> length(E) + 1 + Acc end,
+ 0, os:getenv()),
+ {ok, PWD} = file:get_cwd(),
+ (4 % buffsz
+ + 4 % flags
+ + 5 + length(Cmd) + 1 % "exec $Cmd"
+ + length(PWD) + 1 % $PWD
+ + 1 % nullbuff
+ + 4 % env_len
+ + EnvSize).
%% Test bad 'args' options.
bad_args(Config) when is_list(Config) ->
@@ -976,8 +1089,7 @@ cd(Config) when is_list(Config) ->
Cmd = Program ++ " -pz " ++ DataDir ++
" -noshell -s port_test pwd -s erlang halt",
_ = open_port({spawn, Cmd},
- [{cd, TestDir},
- {line, 256}]),
+ [{cd, TestDir}, {line, 256}]),
receive
{_, {data, {eol, String}}} ->
case filename_equal(String, TestDir) of
@@ -1003,7 +1115,74 @@ cd(Config) when is_list(Config) ->
Other3 ->
ct:fail({env, Other3})
end,
- ok.
+
+ InvalidDir = filename:join(DataDir, "invaliddir"),
+ try open_port({spawn, Cmd},
+ [{cd, InvalidDir}, exit_status, {line, 256}]) of
+ _ ->
+ receive
+ {_, {exit_status, _}} ->
+ ok;
+ Other4 ->
+ ct:fail({env, Other4})
+ end
+ catch error:eacces ->
+ %% This happens on Windows
+ ok
+ end,
+
+ %% Check that there are no lingering messages
+ receive
+ Other5 ->
+ ct:fail({env, Other5})
+ after 10 ->
+ ok
+ end.
+
+%% Test that an emulator that has set it's cwd to
+%% something other then when it started, can use
+%% relative {cd,"./"} to open port and that cd will
+%% be relative the new cwd and not the original
+cd_relative(Config) ->
+
+ Program = atom_to_list(lib:progname()),
+ DataDir = proplists:get_value(data_dir, Config),
+ TestDir = filename:join(DataDir, "dir"),
+
+ Cmd = Program ++ " -pz " ++ filename:dirname(code:where_is_file("port_SUITE.beam")) ++
+ " -noshell -s port_SUITE relative_cd -s erlang halt",
+
+ _ = open_port({spawn, Cmd}, [{line, 256}, {cd, TestDir}]),
+
+ receive
+ {_, {data, {eol, String}}} ->
+ case filename_equal(String, TestDir) of
+ true ->
+ ok;
+ false ->
+ ct:fail({cd_relative, String})
+ end;
+ Other ->
+ ct:fail(Other)
+ end.
+
+relative_cd() ->
+
+ Program = atom_to_list(lib:progname()),
+ ok = file:set_cwd(".."),
+ {ok, Cwd} = file:get_cwd(),
+
+ Cmd = Program ++ " -pz " ++ Cwd ++
+ " -noshell -s port_test pwd -s erlang halt",
+
+ _ = open_port({spawn, Cmd}, [{line, 256}, {cd, "./dir"}, exit_status]),
+
+ receive
+ {_, {data, {eol, String}}} ->
+ io:format("~s~n",[String]);
+ Other ->
+ io:format("ERROR: ~p~n",[Other])
+ end.
filename_equal(A, B) ->
case os:type() of
@@ -1320,22 +1499,22 @@ spawn_driver(Config) when is_list(Config) ->
ok = load_driver(Path, "echo_drv"),
Port = erlang:open_port({spawn_driver, "echo_drv"}, []),
Port ! {self(), {command, "Hello port!"}},
- receive
- {Port, {data, "Hello port!"}} = Msg1 ->
+ receive
+ {Port, {data, "Hello port!"}} = Msg1 ->
io:format("~p~n", [Msg1]),
- ok;
+ ok;
Other ->
ct:fail({unexpected, Other})
end,
Port ! {self(), close},
receive {Port, closed} -> ok end,
- Port2 = erlang:open_port({spawn_driver, "echo_drv -Hello port?"},
+ Port2 = erlang:open_port({spawn_driver, "echo_drv -Hello port?"},
[]),
- receive
- {Port2, {data, "Hello port?"}} = Msg2 ->
+ receive
+ {Port2, {data, "Hello port?"}} = Msg2 ->
io:format("~p~n", [Msg2]),
- ok;
+ ok;
Other2 ->
ct:fail({unexpected2, Other2})
end,
@@ -1354,23 +1533,23 @@ parallelism_option(Config) when is_list(Config) ->
[{parallelism, true}]),
{parallelism, true} = erlang:port_info(Port, parallelism),
Port ! {self(), {command, "Hello port!"}},
- receive
- {Port, {data, "Hello port!"}} = Msg1 ->
+ receive
+ {Port, {data, "Hello port!"}} = Msg1 ->
io:format("~p~n", [Msg1]),
- ok;
+ ok;
Other ->
ct:fail({unexpected, Other})
end,
Port ! {self(), close},
receive {Port, closed} -> ok end,
- Port2 = erlang:open_port({spawn_driver, "echo_drv -Hello port?"},
+ Port2 = erlang:open_port({spawn_driver, "echo_drv -Hello port?"},
[{parallelism, false}]),
{parallelism, false} = erlang:port_info(Port2, parallelism),
- receive
- {Port2, {data, "Hello port?"}} = Msg2 ->
+ receive
+ {Port2, {data, "Hello port?"}} = Msg2 ->
io:format("~p~n", [Msg2]),
- ok;
+ ok;
Other2 ->
ct:fail({unexpected2, Other2})
end,
@@ -1389,20 +1568,20 @@ spawn_executable(Config) when is_list(Config) ->
["echo_args"] = run_echo_args(DataDir,[binary, "echo_args"]),
["echo_arguments"] = run_echo_args(DataDir,["echo_arguments"]),
["echo_arguments"] = run_echo_args(DataDir,[binary, "echo_arguments"]),
- [ExactFile1,"hello world","dlrow olleh"] =
+ [ExactFile1,"hello world","dlrow olleh"] =
run_echo_args(DataDir,[ExactFile1,"hello world","dlrow olleh"]),
[ExactFile1] = run_echo_args(DataDir,[default]),
[ExactFile1] = run_echo_args(DataDir,[binary, default]),
- [ExactFile1,"hello world","dlrow olleh"] =
+ [ExactFile1,"hello world","dlrow olleh"] =
run_echo_args(DataDir,[switch_order,ExactFile1,"hello world",
"dlrow olleh"]),
- [ExactFile1,"hello world","dlrow olleh"] =
+ [ExactFile1,"hello world","dlrow olleh"] =
run_echo_args(DataDir,[binary,switch_order,ExactFile1,"hello world",
"dlrow olleh"]),
[ExactFile1,"hello world","dlrow olleh"] =
run_echo_args(DataDir,[default,"hello world","dlrow olleh"]),
- [ExactFile1,"hello world","dlrow olleh"] =
+ [ExactFile1,"hello world","dlrow olleh"] =
run_echo_args_2("\""++ExactFile1++"\" "++"\"hello world\" \"dlrow olleh\""),
[ExactFile1,"hello world","dlrow olleh"] =
run_echo_args_2(unicode:characters_to_binary("\""++ExactFile1++"\" "++"\"hello world\" \"dlrow olleh\"")),
@@ -1418,7 +1597,7 @@ spawn_executable(Config) when is_list(Config) ->
[ExactFile2] = run_echo_args(SpaceDir,[]),
["echo_args"] = run_echo_args(SpaceDir,["echo_args"]),
["echo_arguments"] = run_echo_args(SpaceDir,["echo_arguments"]),
- [ExactFile2,"hello world","dlrow olleh"] =
+ [ExactFile2,"hello world","dlrow olleh"] =
run_echo_args(SpaceDir,[ExactFile2,"hello world","dlrow olleh"]),
[ExactFile2,"hello world","dlrow olleh"] =
run_echo_args(SpaceDir,[binary, ExactFile2,"hello world","dlrow olleh"]),
@@ -1429,16 +1608,16 @@ spawn_executable(Config) when is_list(Config) ->
run_echo_args(SpaceDir,[binary, ExactFile2,"hello \"world\"","\"dlrow\" olleh"]),
[ExactFile2] = run_echo_args(SpaceDir,[default]),
- [ExactFile2,"hello world","dlrow olleh"] =
+ [ExactFile2,"hello world","dlrow olleh"] =
run_echo_args(SpaceDir,[switch_order,ExactFile2,"hello world", "dlrow olleh"]),
- [ExactFile2,"hello world","dlrow olleh"] =
+ [ExactFile2,"hello world","dlrow olleh"] =
run_echo_args(SpaceDir,[default,"hello world","dlrow olleh"]),
- [ExactFile2,"hello world","dlrow olleh"] =
+ [ExactFile2,"hello world","dlrow olleh"] =
run_echo_args_2("\""++ExactFile2++"\" "++"\"hello world\" \"dlrow olleh\""),
[ExactFile2,"hello world","dlrow olleh"] =
run_echo_args_2(unicode:characters_to_binary("\""++ExactFile2++"\" "++"\"hello world\" \"dlrow olleh\"")),
- ExeExt =
+ ExeExt =
case string:to_lower(lists:last(string:tokens(ExactFile2,"."))) of
"exe" ->
".exe";
@@ -1452,17 +1631,17 @@ spawn_executable(Config) when is_list(Config) ->
[ExactFile3] = run_echo_args(SpaceDir,Executable2,[]),
["echo_args"] = run_echo_args(SpaceDir,Executable2,["echo_args"]),
["echo_arguments"] = run_echo_args(SpaceDir,Executable2,["echo_arguments"]),
- [ExactFile3,"hello world","dlrow olleh"] =
+ [ExactFile3,"hello world","dlrow olleh"] =
run_echo_args(SpaceDir,Executable2,[ExactFile3,"hello world","dlrow olleh"]),
[ExactFile3] = run_echo_args(SpaceDir,Executable2,[default]),
- [ExactFile3,"hello world","dlrow olleh"] =
+ [ExactFile3,"hello world","dlrow olleh"] =
run_echo_args(SpaceDir,Executable2,
[switch_order,ExactFile3,"hello world",
"dlrow olleh"]),
- [ExactFile3,"hello world","dlrow olleh"] =
+ [ExactFile3,"hello world","dlrow olleh"] =
run_echo_args(SpaceDir,Executable2,
[default,"hello world","dlrow olleh"]),
- [ExactFile3,"hello world","dlrow olleh"] =
+ [ExactFile3,"hello world","dlrow olleh"] =
run_echo_args_2("\""++ExactFile3++"\" "++"\"hello world\" \"dlrow olleh\""),
[ExactFile3,"hello world","dlrow olleh"] =
run_echo_args_2(unicode:characters_to_binary("\""++ExactFile3++"\" "++"\"hello world\" \"dlrow olleh\"")),
@@ -1510,11 +1689,11 @@ test_bat_file(Dir) ->
<<"\r\n">>],
file:write_file(Full,list_to_binary(D)),
EF = filename:basename(FN),
- [DN,"hello","world"] =
+ [DN,"hello","world"] =
run_echo_args(Dir,FN,
[default,"hello","world"]),
%% The arg0 argumant should be ignored when running batch files
- [DN,"hello","world"] =
+ [DN,"hello","world"] =
run_echo_args(Dir,FN,
["knaskurt","hello","world"]),
EF = filename:basename(DN),
@@ -1533,10 +1712,10 @@ test_sh_file(Dir) ->
<<"done\n">>],
file:write_file(Full,list_to_binary(D)),
chmodplusx(Full),
- [Full,"hello","world"] =
+ [Full,"hello","world"] =
run_echo_args(Dir,FN,
[default,"hello","world"]),
- [Full,"hello","world of spaces"] =
+ [Full,"hello","world of spaces"] =
run_echo_args(Dir,FN,
[default,"hello","world of spaces"]),
file:write_file(filename:join([Dir,"testfile1"]),<<"testdata1">>),
@@ -1544,7 +1723,7 @@ test_sh_file(Dir) ->
Pattern = filename:join([Dir,"testfile*"]),
L = filelib:wildcard(Pattern),
2 = length(L),
- [Full,"hello",Pattern] =
+ [Full,"hello",Pattern] =
run_echo_args(Dir,FN,
[default,"hello",Pattern]),
ok.
@@ -1620,10 +1799,10 @@ mix_up_ports(Config) when is_list(Config) ->
ok = load_driver(Path, "echo_drv"),
Port = erlang:open_port({spawn, "echo_drv"}, []),
Port ! {self(), {command, "Hello port!"}},
- receive
- {Port, {data, "Hello port!"}} = Msg1 ->
+ receive
+ {Port, {data, "Hello port!"}} = Msg1 ->
io:format("~p~n", [Msg1]),
- ok;
+ ok;
Other ->
ct:fail({unexpected, Other})
end,
@@ -1631,7 +1810,7 @@ mix_up_ports(Config) when is_list(Config) ->
receive {Port, closed} -> ok end,
loop(start, done,
fun(P) ->
- Q =
+ Q =
(catch erlang:open_port({spawn, "echo_drv"}, [])),
%% io:format("~p ", [Q]),
if is_port(Q) ->
@@ -1642,7 +1821,7 @@ mix_up_ports(Config) when is_list(Config) ->
end
end),
Port ! {self(), {command, "Hello again port!"}},
- receive
+ receive
Msg2 ->
ct:fail({unexpected, Msg2})
after 1000 ->
@@ -1802,12 +1981,12 @@ exit_status_msb_test(Config, SleepSecs) when is_list(Config) ->
%% We want to start port programs from as many schedulers as possible
%% and we want these port programs to terminate while multi-scheduling
%% is blocked.
- %%
+ %%
NoSchedsOnln = erlang:system_info(schedulers_online),
Parent = self(),
io:format("SleepSecs = ~p~n", [SleepSecs]),
PortProg = "sleep " ++ integer_to_list(SleepSecs),
- Start = erlang:monotonic_time(micro_seconds),
+ Start = erlang:monotonic_time(microsecond),
NoProcs = case NoSchedsOnln of
NProcs when NProcs < ?EXIT_STATUS_MSB_MAX_PROCS ->
NProcs;
@@ -1881,12 +2060,12 @@ exit_status_msb_test(Config, SleepSecs) when is_list(Config) ->
receive {P, started, SIds} -> SIds end
end,
Procs),
- StartedTime = (erlang:monotonic_time(micro_seconds) - Start)/1000000,
+ StartedTime = (erlang:monotonic_time(microsecond) - Start)/1000000,
io:format("StartedTime = ~p~n", [StartedTime]),
true = StartedTime < SleepSecs,
erlang:system_flag(multi_scheduling, block),
lists:foreach(fun (P) -> receive {P, done} -> ok end end, Procs),
- DoneTime = (erlang:monotonic_time(micro_seconds) - Start)/1000000,
+ DoneTime = (erlang:monotonic_time(microsecond) - Start)/1000000,
io:format("DoneTime = ~p~n", [DoneTime]),
true = DoneTime > SleepSecs,
ok = verify_multi_scheduling_blocked(),
@@ -2214,7 +2393,7 @@ ports_snapshots(0, _, _) ->
ok;
ports_snapshots(Iter, TrafficPid, OtherPorts) ->
- TrafficPid ! start,
+ TrafficPid ! start,
receive after 1 -> ok end,
Snapshot = erlang:ports(),
@@ -2243,7 +2422,7 @@ ports_traffic_stopped(MaxPorts, {PortList, PortCnt}) ->
end.
ports_traffic_started(MaxPorts, {PortList, PortCnt}, EventList) ->
- receive
+ receive
{Pid, stop} ->
%%io:format("Traffic stopped in ~p\n",[self()]),
Pid ! {self(), EventList, PortList},
@@ -2256,7 +2435,7 @@ ports_traffic_started(MaxPorts, {PortList, PortCnt}, EventList) ->
ports_traffic_do(MaxPorts, {PortList, PortCnt}, EventList) ->
N = uniform(MaxPorts),
case N > PortCnt of
- true -> % Open port
+ true -> % Open port
P = open_port({spawn, "exit_drv"}, []),
%%io:format("Created port ~p\n",[P]),
ports_traffic_started(MaxPorts, {[P|PortList], PortCnt+1},
@@ -2270,7 +2449,7 @@ ports_traffic_do(MaxPorts, {PortList, PortCnt}, EventList) ->
[{close,P}|EventList])
end.
-ports_verify(Ports, PortsAfter, EventList) ->
+ports_verify(Ports, PortsAfter, EventList) ->
%%io:format("Candidate=~p\nEvents=~p\n", [PortsAfter, EventList]),
case lists:sort(Ports) =:= lists:sort(PortsAfter) of
true ->
@@ -2280,10 +2459,10 @@ ports_verify(Ports, PortsAfter, EventList) ->
%% Note that we track the event list "backwards", undoing open/close:
case EventList of
[{open,P} | Tail] ->
- ports_verify(Ports, lists:delete(P,PortsAfter), Tail);
+ ports_verify(Ports, lists:delete(P,PortsAfter), Tail);
[{close,P} | Tail] ->
- ports_verify(Ports, [P | PortsAfter], Tail);
+ ports_verify(Ports, [P | PortsAfter], Tail);
[] ->
ct:fail("Inconsistent snapshot from erlang:ports()")
@@ -2391,3 +2570,250 @@ wait_until(Fun) ->
receive after 100 -> ok end,
wait_until(Fun)
end.
+
+%% Attempt to monitor pid as port, and port as pid
+mon_port_invalid_type(_Config) ->
+ Port = hd(erlang:ports()),
+ ?assertError(badarg, erlang:monitor(port, self())),
+ ?assertError(badarg, erlang:monitor(process, Port)),
+ ok.
+
+%% With local port
+mon_port_local(Config) ->
+ Port1 = create_port(Config, ["-h1", "-q"]), % will close after we send 1 byte
+ Ref1 = erlang:monitor(port, Port1),
+ ?assertMatch({proc_monitors, true, port_monitored_by, true},
+ port_is_monitored(self(), Port1)),
+ Port1 ! {self(), {command, <<"1">>}}, % port test will close self immediately
+ receive ExitP1 -> ?assertMatch({'DOWN', Ref1, port, Port1, _}, ExitP1)
+ after 1000 -> ?assert(false) end,
+ ?assertMatch({proc_monitors, false, port_monitored_by, false},
+ port_is_monitored(self(), Port1)),
+
+ %% Trying to re-monitor a port which exists but is not healthy will
+ %% succeed but then will immediately send DOWN
+ Ref2 = erlang:monitor(port, Port1),
+ receive ExitP2 -> ?assertMatch({'DOWN', Ref2, port, Port1, _}, ExitP2)
+ after 1000 -> ?assert(false) end,
+ ok.
+
+%% With remote port on remote node (should fail)
+mon_port_remote_on_remote(_Config) ->
+ Port3 = binary_to_term(<<131, 102, % Ext term format: PORT_EXT
+ 100, 0, 13, "fgsfds@fgsfds", % Node :: ATOM_EXT
+ 1:32/big, % Id
+ 0>>), % Creation
+ ?assertError(badarg, erlang:monitor(port, Port3)),
+ ok.
+
+%% Remote port belongs to this node and does not exist
+%% Port4 produces #Port<0.167772160> which should not exist in a test run
+mon_port_bad_remote_on_local(_Config) ->
+ Port4 = binary_to_term(<<131, 102, % Ext term format: PORT_EXT
+ 100, 0, 13, "nonode@nohost", % Node
+ 167772160:32/big, % Id
+ 0>>), % Creation
+ ?assertError(badarg, erlang:monitor(port, Port4)),
+ ok.
+
+%% Monitor owner (origin) dies before port is closed
+mon_port_origin_dies(Config) ->
+ Port5 = create_port(Config, ["-h1", "-q"]), % will close after we send 1 byte
+ Self5 = self(),
+ Proc5 = spawn(fun() ->
+ Self5 ! test5_started,
+ erlang:monitor(port, Port5),
+ receive stop -> ok end
+ end),
+ erlang:monitor(process, Proc5), % we want to sync with its death
+ receive test5_started -> ok
+ after 1000 -> ?assert(false) end,
+ ?assertMatch({proc_monitors, true, port_monitored_by, true},
+ port_is_monitored(Proc5, Port5)),
+ Proc5 ! stop,
+ % receive from monitor (removing race condition)
+ receive ExitP5 -> ?assertMatch({'DOWN', _, process, Proc5, _}, ExitP5)
+ after 1000 -> ?assert(false) end,
+ ?assertMatch({proc_monitors, false, port_monitored_by, false},
+ port_is_monitored(Proc5, Port5)),
+ Port5 ! {self(), {command, <<"1">>}}, % make port quit
+ ok.
+
+%% Port and Monitor owner dies before port is closed
+%% This testcase checks for a regression memory leak in erts
+%% when the controlling and monitoring process is the same process
+%% and the process dies
+mon_port_owner_dies(Config) ->
+ Self = self(),
+ Proc = spawn(fun() ->
+ Port = create_port(Config, ["-h1", "-q"]),
+ Self ! {test_started, Port},
+ erlang:monitor(port, Port),
+ receive stop -> ok end
+ end),
+ erlang:monitor(process, Proc), % we want to sync with its death
+ Port = receive {test_started,P} -> P
+ after 1000 -> ?assert(false) end,
+ ?assertMatch({proc_monitors, true, port_monitored_by, true},
+ port_is_monitored(Proc, Port)),
+ Proc ! stop,
+ %% receive from monitor
+ receive ExitP5 -> ?assertMatch({'DOWN', _, process, Proc, _}, ExitP5)
+ after 1000 -> ?assert(false) end,
+ ok.
+
+%% Monitor a named port
+mon_port_named(Config) ->
+ Name6 = test_port6,
+ Port6 = create_port(Config, ["-h1", "-q"]), % will close after we send 1 byte
+ erlang:register(Name6, Port6),
+ erlang:monitor(port, Name6),
+ ?assertMatch({proc_monitors, true, port_monitored_by, true},
+ port_is_monitored(self(), Name6)),
+ Port6 ! {self(), {command, <<"1">>}}, % port test will close self immediately
+ receive ExitP6 -> ?assertMatch({'DOWN', _, port, {Name6, _}, _}, ExitP6)
+ after 1000 -> ?assert(false) end,
+ ?assertMatch({proc_monitors, false, port_monitored_by, false},
+ port_is_monitored(self(), Name6)),
+ ok.
+
+%% Named does not exist: Should succeed but immediately send 'DOWN'
+mon_port_bad_named(_Config) ->
+ Name7 = test_port7,
+ erlang:monitor(port, Name7),
+ receive {'DOWN', _, port, {Name7, _}, noproc} -> ok
+ after 1000 -> ?assert(false) end,
+ ok.
+
+%% Monitor a pid and demonitor by ref
+mon_port_pid_demonitor(Config) ->
+ Port8 = create_port(Config, ["-h1", "-q"]), % will close after we send 1 byte
+ Ref8 = erlang:monitor(port, Port8),
+ ?assertMatch({proc_monitors, true, port_monitored_by, true},
+ port_is_monitored(self(), Port8)),
+ erlang:demonitor(Ref8),
+ ?assertMatch({proc_monitors, false, port_monitored_by, false},
+ port_is_monitored(self(), Port8)),
+ Port8 ! {self(), {command, <<"1">>}}, % port test will close self immediately
+ ok.
+
+%% Monitor by name and demonitor by ref
+mon_port_name_demonitor(Config) ->
+ Name9 = test_port9,
+ Port9 = create_port(Config, ["-h1", "-q"]), % will close after we send 1 byte
+ erlang:register(Name9, Port9),
+ Ref9 = erlang:monitor(port, Name9),
+ ?assertMatch({proc_monitors, true, port_monitored_by, true},
+ port_is_monitored(self(), Name9)),
+ erlang:demonitor(Ref9),
+ ?assertMatch({proc_monitors, false, port_monitored_by, false},
+ port_is_monitored(self(), Name9)),
+ Port9 ! {self(), {command, <<"1">>}}, % port test will close self immediately
+ ok.
+
+%% 1. Spawn a port which will sleep 3 seconds
+%% 2. Port driver and dies horribly (via C driver_failure call). This should
+%% mark port as exiting or something.
+%% 3. While the command happens, a monitor is requested on the port
+mon_port_driver_die(Config) ->
+ erlang:process_flag(scheduler, 1),
+
+ Path = proplists:get_value(data_dir, Config),
+ ok = load_driver(Path, "sleep_failure_drv"),
+ Port = open_port({spawn, "sleep_failure_drv"}, []),
+
+ Self = self(),
+ erlang:spawn_opt(fun() ->
+ timer:sleep(250),
+ Ref = erlang:monitor(port, Port),
+ %% Now check that msg actually arrives
+ receive
+ {'DOWN', Ref, _Port2, _, _} = M -> Self ! M
+ after 3000 -> Self ! no_down_message
+ end
+ end,[{scheduler, 2}]),
+ Port ! {self(), {command, "Fail, please!"}},
+ receive
+ A when is_atom(A) -> ?assertEqual(A, 'A_should_be_printed');
+ {'DOWN', _R, port, Port, noproc} -> ok;
+ {'DOWN', _R, _P, _, _} = M -> ct:fail({got_wrong_down,M})
+ after 5000 -> ?assert(false)
+ end,
+ ok.
+
+
+%% 1. Spawn a port which will sleep 3 seconds
+%% 2. Monitor port
+%% 3. Port driver and dies horribly (via C driver_failure call). This should
+%% mark port as exiting or something.
+%% 4. While the command happens, a demonitor is requested on the port
+mon_port_driver_die_demonitor(Config) ->
+ erlang:process_flag(scheduler, 1),
+
+ Path = proplists:get_value(data_dir, Config),
+ ok = load_driver(Path, "sleep_failure_drv"),
+ Port = open_port({spawn, "sleep_failure_drv"}, []),
+
+ Self = self(),
+ erlang:spawn_opt(
+ fun() ->
+ Ref = erlang:monitor(port, Port),
+ Self ! Ref,
+ timer:sleep(250),
+ erlang:demonitor(Ref),
+ %% Now check that msg still arrives,
+ %% the demon should have arrived after
+ %% the port exited
+ receive
+ {'DOWN', Ref, _Port2, _, _} = M -> Self ! M
+ after 3000 -> Self ! no_down_message
+ end
+ end,[{scheduler, 2}]),
+ Ref = receive R -> R end,
+ Port ! {self(), {command, "Fail, please!"}},
+ receive
+ {'DOWN', Ref, port, Port, normal} -> ok;
+ {'DOWN', _R, _P, _, _} = M -> ct:fail({got_wrong_down,M})
+ after 5000 -> ?assert(false)
+ end,
+ ok.
+
+%% @doc Makes a controllable port for testing. Underlying mechanism of this
+%% port is not important, only important is our ability to close/kill it or
+%% have it monitored.
+create_port(Config, Args) ->
+ DataDir = ?config(data_dir, Config),
+ %% Borrow port test utility from port SUITE
+ Program = filename:join([DataDir, "port_test"]),
+ erlang:open_port({spawn_executable, Program}, [{args, Args}]).
+
+%% @doc Checks if process Pid exists, and if so, if its monitoring (or not)
+%% the Port (or if port doesn't exist, we assume answer is no).
+port_is_monitored(Pid, Port) when is_pid(Pid), is_port(Port) ->
+ %% Variant for when port is a port id (port())
+ A = case erlang:process_info(Pid, monitors) of
+ undefined -> false;
+ {monitors, ProcMTargets} -> lists:member({port, Port}, ProcMTargets)
+ end,
+ B = case erlang:port_info(Port, monitored_by) of
+ undefined -> false;
+ {monitored_by, PortMonitors} -> lists:member(Pid, PortMonitors)
+ end,
+ {proc_monitors, A, port_monitored_by, B};
+port_is_monitored(Pid, PortName) when is_pid(Pid), is_atom(PortName) ->
+ %% Variant for when port is an atom
+ A = case erlang:process_info(Pid, monitors) of
+ undefined -> false;
+ {monitors, ProcMTargets} ->
+ lists:member({port, {PortName, node()}}, ProcMTargets)
+ end,
+ B = case erlang:whereis(PortName) of
+ undefined -> false; % name is not registered or is dead
+ PortId ->
+ case erlang:port_info(PortId, monitored_by) of
+ undefined -> false; % is dead
+ {monitored_by, PortMonitors} ->
+ lists:member(Pid, PortMonitors)
+ end
+ end,
+ {proc_monitors, A, port_monitored_by, B}.
diff --git a/erts/emulator/test/port_SUITE_data/Makefile.src b/erts/emulator/test/port_SUITE_data/Makefile.src
index ff822ae720..fb7685c4b6 100644
--- a/erts/emulator/test/port_SUITE_data/Makefile.src
+++ b/erts/emulator/test/port_SUITE_data/Makefile.src
@@ -4,7 +4,7 @@ CFLAGS = @CFLAGS@ -I@erl_include@ @DEFS@
CROSSLDFLAGS = @CROSSLDFLAGS@
PROGS = port_test@exe@ echo_args@exe@ dead_port@exe@
-DRIVERS = echo_drv@dll@ exit_drv@dll@ failure_drv@dll@
+DRIVERS = echo_drv@dll@ exit_drv@dll@ failure_drv@dll@ sleep_failure_drv@dll@
all: $(PROGS) $(DRIVERS) port_test.@EMULATOR@
diff --git a/erts/emulator/test/port_SUITE_data/sleep_failure_drv.c b/erts/emulator/test/port_SUITE_data/sleep_failure_drv.c
new file mode 100644
index 0000000000..1f52646572
--- /dev/null
+++ b/erts/emulator/test/port_SUITE_data/sleep_failure_drv.c
@@ -0,0 +1,76 @@
+#include <stdio.h>
+#include "erl_driver.h"
+#ifdef __WIN32__
+# include <windows.h>
+#else
+# include <unistd.h>
+#endif
+
+typedef struct _erl_drv_data FailureDrvData;
+
+static FailureDrvData *failure_drv_start(ErlDrvPort, char *);
+static void failure_drv_stop(FailureDrvData *);
+static void failure_drv_output(ErlDrvData, char *, ErlDrvSizeT);
+static void failure_drv_finish(void);
+
+static ErlDrvEntry failure_drv_entry = {
+ NULL, /* init */
+ failure_drv_start,
+ failure_drv_stop,
+ failure_drv_output,
+ NULL, /* ready_input */
+ NULL, /* ready_output */
+ "sleep_failure_drv",
+ NULL, /* finish */
+ NULL, /* handle */
+ NULL, /* control */
+ NULL, /* timeout */
+ NULL, /* outputv */
+ NULL, /* ready_async */
+ NULL,
+ NULL,
+ NULL,
+ ERL_DRV_EXTENDED_MARKER,
+ ERL_DRV_EXTENDED_MAJOR_VERSION,
+ ERL_DRV_EXTENDED_MINOR_VERSION,
+ 0,
+ NULL,
+ NULL,
+ NULL,
+};
+
+
+
+/* -------------------------------------------------------------------------
+** Entry functions
+**/
+
+DRIVER_INIT(failure_drv)
+{
+ return &failure_drv_entry;
+}
+
+static FailureDrvData *failure_drv_start(ErlDrvPort port, char *command) {
+ void *void_ptr;
+
+ return void_ptr = port;
+}
+
+static void failure_drv_stop(FailureDrvData *data_p) {
+}
+
+static void failure_drv_output(ErlDrvData drv_data, char *buf, ErlDrvSizeT len) {
+ FailureDrvData *data_p = (FailureDrvData *) drv_data;
+ void *void_ptr;
+ ErlDrvPort port = void_ptr = data_p;
+
+#ifdef __WIN32__
+ Sleep(3000);
+#else
+ sleep(3);
+#endif
+ driver_failure(port, 0);
+}
+
+static void failure_drv_finish() {
+}
diff --git a/erts/emulator/test/port_trace_SUITE.erl b/erts/emulator/test/port_trace_SUITE.erl
index bfdea0761b..5d9a75bcd3 100644
--- a/erts/emulator/test/port_trace_SUITE.erl
+++ b/erts/emulator/test/port_trace_SUITE.erl
@@ -31,7 +31,8 @@
failure_atom/1, failure_posix/1,
failure/1, output_term/1,
driver_output_term/1,
- send_term/1, driver_send_term/1]).
+ send_term/1, driver_send_term/1,
+ driver_remote_send_term/1]).
-define(ECHO_DRV_NOOP, 0).
-define(ECHO_DRV_OUTPUT, 1).
@@ -48,6 +49,7 @@
-define(ECHO_DRV_SEND_TERM, 12).
-define(ECHO_DRV_DRIVER_SEND_TERM, 13).
-define(ECHO_DRV_SAVE_CALLER, 14).
+-define(ECHO_DRV_REMOTE_SEND_TERM, 15).
suite() -> [{ct_hooks,[ts_install_cth]},
{timetrap, {seconds, 30}}].
@@ -60,7 +62,8 @@ all() ->
failure_atom, failure_posix,
failure, output_term,
driver_output_term,
- send_term, driver_send_term].
+ send_term, driver_send_term,
+ driver_remote_send_term].
init_per_suite(Config) ->
Config.
@@ -75,6 +78,13 @@ end_per_group(_GroupName, Config) ->
Config.
+init_per_testcase(driver_remote_send_term, Config) ->
+ case erlang:system_info(smp_support) of
+ false ->
+ {skip,"Only supported on smp systems"};
+ true ->
+ init_per_testcase(driver_remote_send_term_smp, Config)
+ end;
init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
erlang:trace(all, false, [all]),
os:unsetenv("OUTPUTV"),
@@ -543,6 +553,34 @@ driver_send_term(_Config) ->
ok.
+%% Test that driver_send_term from non-scheduler thread does not
+%% generate trace messages.
+driver_remote_send_term(_Config) ->
+
+ Flags = [send],
+ {Prt, S} = trace_and_open(Flags,[binary]),
+
+ erlang:port_command(Prt, <<?ECHO_DRV_REMOTE_SEND_TERM, 123456:32>>),
+ recv({echo, Prt, <<123456:32>>}),
+ [] = flush(),
+
+ Pid = spawn_link(
+ fun() ->
+ erlang:port_command(Prt, <<?ECHO_DRV_SAVE_CALLER>>),
+ S ! ok,
+ receive M -> S ! M end
+ end),
+ recv(ok),
+ erlang:trace(Pid, true, ['receive']),
+
+ erlang:port_command(Prt, <<?ECHO_DRV_REMOTE_SEND_TERM, 123456:32>>),
+ recv({echo, Prt, <<123456:32>>}),
+ [{trace, Pid, 'receive', {echo, Prt, <<123456:32>>}}] = flush(),
+
+ close(Prt, Flags),
+
+ ok.
+
%%%%%%%%%%%%%%%%%%%
%% Helper functions
%%%%%%%%%%%%%%%%%%%
@@ -598,7 +636,7 @@ f(From) ->
end.
recv(Msg) ->
- receive Msg -> ok after 100 -> ct:fail({did_not_get_data,Msg,flush()}) end.
+ receive Msg -> ok after 1000 -> ct:fail({did_not_get_data,Msg,flush()}) end.
load_drv(Config) ->
Path = proplists:get_value(data_dir, Config),
diff --git a/erts/emulator/test/port_trace_SUITE_data/echo_drv.c b/erts/emulator/test/port_trace_SUITE_data/echo_drv.c
index b5ae9389b4..b545523192 100644
--- a/erts/emulator/test/port_trace_SUITE_data/echo_drv.c
+++ b/erts/emulator/test/port_trace_SUITE_data/echo_drv.c
@@ -14,6 +14,13 @@ typedef struct _erl_drv_data {
ErlDrvTermData caller;
} EchoDrvData;
+struct remote_send_term {
+ char *buf;
+ int len;
+ ErlDrvTermData port;
+ ErlDrvTermData caller;
+};
+
#define ECHO_DRV_NOOP 0
#define ECHO_DRV_OUTPUT 1
#define ECHO_DRV_OUTPUT2 2
@@ -29,6 +36,7 @@ typedef struct _erl_drv_data {
#define ECHO_DRV_SEND_TERM 12
#define ECHO_DRV_DRIVER_SEND_TERM 13
#define ECHO_DRV_SAVE_CALLER 14
+#define ECHO_DRV_REMOTE_SEND_TERM 15
/* -------------------------------------------------------------------------
@@ -78,6 +86,8 @@ static ErlDrvEntry echo_drv_entry = {
NULL
};
+static void send_term_thread(void *);
+
/* -------------------------------------------------------------------------
** Entry functions
**/
@@ -200,6 +210,18 @@ static void echo_drv_output(ErlDrvData drv_data, char *buf, ErlDrvSizeT len) {
}
break;
}
+ case ECHO_DRV_REMOTE_SEND_TERM:
+ {
+ ErlDrvTid tid;
+ struct remote_send_term *t = malloc(sizeof(struct remote_send_term));
+ t->len = len-1;
+ t->buf = malloc(len-1);
+ t->port = driver_mk_port(port);
+ t->caller = data_p->caller;
+ memcpy(t->buf, buf+1, t->len);
+ erl_drv_thread_create("tmp_thread", &tid, send_term_thread, t, NULL);
+ break;
+ }
case ECHO_DRV_SAVE_CALLER:
data_p->caller = driver_caller(port);
break;
@@ -239,3 +261,17 @@ static ErlDrvSSizeT echo_drv_call(ErlDrvData drv_data,
memcpy(*rbuf, buf+command, len-command);
return len-command;
}
+
+static void send_term_thread(void *a)
+{
+ struct remote_send_term *t = (struct remote_send_term*)a;
+ ErlDrvTermData term[] = {
+ ERL_DRV_ATOM, driver_mk_atom("echo"),
+ ERL_DRV_PORT, t->port,
+ ERL_DRV_BUF2BINARY, (ErlDrvTermData)(t->buf),
+ (ErlDrvTermData)(t->len),
+ ERL_DRV_TUPLE, 3};
+ erl_drv_send_term(t->port, t->caller,
+ term, sizeof(term) / sizeof(ErlDrvTermData));
+ return;
+}
diff --git a/erts/emulator/test/process_SUITE.erl b/erts/emulator/test/process_SUITE.erl
index eaa4026a8a..0f999e0efe 100644
--- a/erts/emulator/test/process_SUITE.erl
+++ b/erts/emulator/test/process_SUITE.erl
@@ -147,11 +147,7 @@ spawn_with_binaries(Config) when is_list(Config) ->
TwoMeg = lists:duplicate(1024, L),
Fun = fun() -> spawn(?MODULE, binary_owner, [list_to_binary(TwoMeg)]),
receive after 1 -> ok end end,
- Iter = case test_server:purify_is_running() of
- true -> 10;
- false -> 150
- end,
- test_server:do_times(Iter, Fun),
+ test_server:do_times(150, Fun),
ok.
binary_owner(Bin) when is_binary(Bin) ->
@@ -376,7 +372,7 @@ eat_high(Low) ->
process_flag(priority, high),
receive after 1000 -> ok end,
exit(Low, {you, are, dead}),
- loop(erlang:monotonic_time() + erlang:convert_time_unit(5,seconds,native)).
+ loop(erlang:monotonic_time() + erlang:convert_time_unit(5,second,native)).
%% Busy loop for 5 seconds.
@@ -2380,7 +2376,7 @@ no_priority_inversion2(Config) when is_list(Config) ->
[{priority, max}, monitor, link])
end,
lists:seq(1, 2*erlang:system_info(schedulers))),
- receive after 500 -> ok end,
+ receive after 2000 -> ok end,
{PL, ML} = spawn_opt(fun () ->
tok_loop()
end,
@@ -2571,7 +2567,7 @@ start_node(Config, Args) when is_list(Config) ->
++ "-"
++ atom_to_list(proplists:get_value(testcase, Config))
++ "-"
- ++ integer_to_list(erlang:system_time(seconds))
+ ++ integer_to_list(erlang:system_time(second))
++ "-"
++ integer_to_list(erlang:unique_integer([positive]))),
test_server:start_node(Name, slave, [{args, "-pa "++Pa++" "++Args}]).
@@ -2585,7 +2581,10 @@ enable_internal_state() ->
_ -> erts_debug:set_internal_state(available_internal_state, true)
end.
-sys_mem_cond_run(ReqSizeMB, TestFun) when is_integer(ReqSizeMB) ->
+sys_mem_cond_run(OrigReqSizeMB, TestFun) when is_integer(OrigReqSizeMB) ->
+ %% Debug normally needs more memory, so double the requirement
+ Debug = erlang:system_info(debug_compiled),
+ ReqSizeMB = if Debug -> OrigReqSizeMB * 2; true -> OrigReqSizeMB end,
case total_memory() of
TotMem when is_integer(TotMem), TotMem >= ReqSizeMB ->
TestFun();
diff --git a/erts/emulator/test/scheduler_SUITE.erl b/erts/emulator/test/scheduler_SUITE.erl
index f18d79d770..3aee15a8fc 100644
--- a/erts/emulator/test/scheduler_SUITE.erl
+++ b/erts/emulator/test/scheduler_SUITE.erl
@@ -793,13 +793,13 @@ update_cpu_info(Config) when is_list(Config) ->
io:format("START - Affinity mask: ~p - Schedulers online: ~p - Scheduler bindings: ~p~n",
[OldAff, OldOnline, erlang:system_info(scheduler_bindings)]),
case {erlang:system_info(logical_processors_available), OldAff} of
- {Avail, _} when Avail == unknown; OldAff == unknown ->
+ {Avail, _} when Avail == unknown; OldAff == unknown; OldAff == 1 ->
%% Nothing much to test; just a smoke test
case erlang:system_info(update_cpu_info) of
unchanged -> ok;
changed -> ok
end;
- _ ->
+ {Avail, _} ->
try
adjust_schedulers_online(),
case erlang:system_info(schedulers_online) of
@@ -810,7 +810,7 @@ update_cpu_info(Config) when is_list(Config) ->
%% unset least significant bit
Aff = (OldAff band (OldAff - 1)),
set_affinity_mask(Aff),
- Onln1 = Onln0 - 1,
+ Onln1 = Avail - 1,
case adjust_schedulers_online() of
{Onln0, Onln1} ->
Onln1 = erlang:system_info(schedulers_online),
@@ -1072,20 +1072,27 @@ scheduler_threads(Config) when is_list(Config) ->
{Sched, HalfSchedOnln, _} = get_sstate(Config, "+SP:50"),
%% Configure 2x scheduler threads only
{TwiceSched, SchedOnln, _} = get_sstate(Config, "+SP 200"),
- %% Test resetting the scheduler counts
- ResetCmd = "+S "++FourSched++":"++FourSchedOnln++" +S 0:0",
- {Sched, SchedOnln, _} = get_sstate(Config, ResetCmd),
- %% Test negative +S settings, but only for SMP-enabled emulators
- case SmpSupport of
- false -> ok;
- true ->
- SchedMinus1 = Sched-1,
- SchedOnlnMinus1 = SchedOnln-1,
- {SchedMinus1, SchedOnlnMinus1, _} = get_sstate(Config, "+S -1"),
- {Sched, SchedOnlnMinus1, _} = get_sstate(Config, "+S :-1"),
- {SchedMinus1, SchedOnlnMinus1, _} = get_sstate(Config, "+S -1:-1")
- end,
- ok.
+ case {erlang:system_info(logical_processors),
+ erlang:system_info(logical_processors_available)} of
+ {LProc, LProcAvail} when is_integer(LProc), is_integer(LProcAvail) ->
+ %% Test resetting the scheduler counts
+ ResetCmd = "+S "++FourSched++":"++FourSchedOnln++" +S 0:0",
+ {LProc, LProcAvail, _} = get_sstate(Config, ResetCmd),
+ %% Test negative +S settings, but only for SMP-enabled emulators
+ case {SmpSupport, LProc > 1, LProcAvail > 1} of
+ {true, true, true} ->
+ SchedMinus1 = LProc-1,
+ SchedOnlnMinus1 = LProcAvail-1,
+ {SchedMinus1, SchedOnlnMinus1, _} = get_sstate(Config, "+S -1"),
+ {LProc, SchedOnlnMinus1, _} = get_sstate(Config, "+S :-1"),
+ {SchedMinus1, SchedOnlnMinus1, _} = get_sstate(Config, "+S -1:-1"),
+ ok;
+ _ ->
+ {comment, "Skipped reduced amount of schedulers test due to too few logical processors"}
+ end;
+ _ -> %% Skipped when missing info about logical processors...
+ {comment, "Skipped reset amount of schedulers test, and reduced amount of schedulers test due to too unknown amount of logical processors"}
+ end.
dirty_scheduler_threads(Config) when is_list(Config) ->
SmpSupport = erlang:system_info(smp_support),
@@ -1312,11 +1319,33 @@ scheduler_suspend_test(Config, Schedulers) ->
true ->
ok
end,
- erlang:system_info(schedulers_state)
+ until(fun () ->
+ {_A, B, C} = erlang:system_info(
+ schedulers_state),
+ B == C
+ end,
+ erlang:monotonic_time()
+ + erlang:convert_time_unit(1,
+ seconds,
+ native)),
+ erlang:system_info(schedulers_state)
end]),
stop_node(Node),
ok.
-
+
+until(Pred, MaxTime) ->
+ case Pred() of
+ true ->
+ true;
+ false ->
+ case erlang:monotonic_time() > MaxTime of
+ true ->
+ false;
+ false ->
+ receive after 100 -> ok end,
+ until(Pred, MaxTime)
+ end
+ end.
sst0_loop(0) ->
ok;
@@ -1978,10 +2007,10 @@ do_it(Tracer, Low, Normal, High, Max) ->
do_it(Tracer, Low, Normal, High, Max, RedsPerSchedLimit) ->
OldPrio = process_flag(priority, max),
go_work(Low, Normal, High, Max),
- StartWait = erlang:monotonic_time(milli_seconds),
+ StartWait = erlang:monotonic_time(millisecond),
%% Give the emulator a chance to balance the load...
wait_balance(5),
- EndWait = erlang:monotonic_time(milli_seconds),
+ EndWait = erlang:monotonic_time(millisecond),
BalanceWait = EndWait-StartWait,
erlang:display({balance_wait, BalanceWait}),
Timeout = (15 - 4)*60*1000 - BalanceWait,
@@ -2181,7 +2210,7 @@ start_node(Config, Args) when is_list(Config) ->
++ "-"
++ atom_to_list(proplists:get_value(testcase, Config))
++ "-"
- ++ integer_to_list(erlang:system_time(seconds))
+ ++ integer_to_list(erlang:system_time(second))
++ "-"
++ integer_to_list(erlang:unique_integer([positive]))),
test_server:start_node(Name, slave, [{args, "-pa "++Pa++" "++Args}]).
diff --git a/erts/emulator/test/signal_SUITE.erl b/erts/emulator/test/signal_SUITE.erl
index 0b11fa13f5..7e516176f7 100644
--- a/erts/emulator/test/signal_SUITE.erl
+++ b/erts/emulator/test/signal_SUITE.erl
@@ -484,7 +484,7 @@ repeat(Fun, N) when is_integer(N) ->
start_node(Config) ->
Name = list_to_atom(atom_to_list(?MODULE)
++ "-" ++ atom_to_list(proplists:get_value(testcase, Config))
- ++ "-" ++ integer_to_list(erlang:system_time(seconds))
+ ++ "-" ++ integer_to_list(erlang:system_time(second))
++ "-" ++ integer_to_list(erlang:unique_integer([positive]))),
Pa = filename:dirname(code:which(?MODULE)),
test_server:start_node(Name, slave, [{args, "-pa " ++ Pa}]).
diff --git a/erts/emulator/test/smoke_test_SUITE.erl b/erts/emulator/test/smoke_test_SUITE.erl
index 042c7225d5..5eccdc562b 100644
--- a/erts/emulator/test/smoke_test_SUITE.erl
+++ b/erts/emulator/test/smoke_test_SUITE.erl
@@ -152,7 +152,7 @@ start_node(Config, Args) when is_list(Config) ->
++ "-"
++ atom_to_list(proplists:get_value(testcase, Config))
++ "-"
- ++ integer_to_list(erlang:system_time(seconds))
+ ++ integer_to_list(erlang:system_time(second))
++ "-"
++ integer_to_list(erlang:unique_integer([positive]))),
Opts = [{args, "-pa "++Pa++" "++Args}],
diff --git a/erts/emulator/test/statistics_SUITE.erl b/erts/emulator/test/statistics_SUITE.erl
index 71ef003b25..a1f12ba93c 100644
--- a/erts/emulator/test/statistics_SUITE.erl
+++ b/erts/emulator/test/statistics_SUITE.erl
@@ -129,11 +129,15 @@ do_runtime_update(0) ->
{comment,"Never close enough"};
do_runtime_update(N) ->
{T1,Diff0} = statistics(runtime),
- spawn_link(fun cpu_heavy/0),
+ {CPUHog, CPUHogMon} = spawn_opt(fun cpu_heavy/0,[link,monitor]),
receive after 1000 -> ok end,
{T2,Diff} = statistics(runtime),
+ unlink(CPUHog),
+ exit(CPUHog, kill),
+
true = is_integer(T1+T2+Diff0+Diff),
io:format("T1 = ~p, T2 = ~p, Diff = ~p, T2-T1 = ~p", [T1,T2,Diff,T2-T1]),
+ receive {'DOWN',CPUHogMon,process,CPUHog,_} -> ok end,
if
T2 - T1 =:= Diff, 900 =< Diff, Diff =< 1500 -> ok;
true -> do_runtime_update(N-1)
@@ -311,8 +315,17 @@ scheduler_wall_time(Config) when is_list(Config) ->
true -> exit({fullload, FullLoad})
end,
- [exit(Pid, kill) || Pid <- [P1|HalfHogs++LastHogs]],
+ KillHog = fun (HP) ->
+ HPM = erlang:monitor(process, HP),
+ exit(HP, kill),
+ receive
+ {'DOWN', HPM, process, HP, killed} ->
+ ok
+ end
+ end,
+ [KillHog(Pid) || Pid <- [P1|HalfHogs++LastHogs]],
AfterLoad = get_load(),
+ io:format("AfterLoad=~p~n", [AfterLoad]),
{false,_} = {lists:any(fun(Load) -> Load > 25 end, AfterLoad),AfterLoad},
true = erlang:system_flag(scheduler_wall_time, false)
after
diff --git a/erts/emulator/test/system_info_SUITE.erl b/erts/emulator/test/system_info_SUITE.erl
index f31d474c20..a4aedb31f6 100644
--- a/erts/emulator/test/system_info_SUITE.erl
+++ b/erts/emulator/test/system_info_SUITE.erl
@@ -508,7 +508,7 @@ start_node(Config, Envs) when is_list(Config) ->
++ "-"
++ atom_to_list(proplists:get_value(testcase, Config))
++ "-"
- ++ integer_to_list(erlang:system_time(seconds))
+ ++ integer_to_list(erlang:system_time(second))
++ "-"
++ integer_to_list(erlang:unique_integer([positive]))),
test_server:start_node(Name, peer, [{args, "-pa "++Pa}, {env, Envs}]).
diff --git a/erts/emulator/test/time_SUITE.erl b/erts/emulator/test/time_SUITE.erl
index 76d440529f..9501569814 100644
--- a/erts/emulator/test/time_SUITE.erl
+++ b/erts/emulator/test/time_SUITE.erl
@@ -209,23 +209,17 @@ test_seconds_to_univ([]) ->
%% Test that the the different time functions return
-%% consistent results. (See the test case for assumptions
-%% and limitations.)
-consistency(Config) when is_list(Config) ->
- %% Test the following equations:
- %% date() & time() == erlang:localtime()
- %% erlang:universaltime() + timezone == erlang:localtime()
+%% consistent results.
+consistency(_Config) ->
+ %% Test that:
+ %% * date() & time() gives the same time as erlang:localtime()
%%
- %% Assumptions:
- %% Middle-European time zone, EU rules for daylight-saving time.
- %%
- %% Limitations:
- %% Localtime and universaltime must be in the same month.
- %% Daylight-saving calculations are incorrect from the last
- %% Sunday of March and October to the end of the month.
+ %% * the difference between erlang:universaltime() and
+ %% erlang:localtime() is reasonable (with assuming any
+ %% particular timezone)
ok = compare_date_time_and_localtime(16),
- ok = compare_local_and_universal(16).
+ compare_local_and_universal(16).
compare_date_time_and_localtime(Times) when Times > 0 ->
{Year, Mon, Day} = date(),
@@ -238,22 +232,18 @@ compare_date_time_and_localtime(0) ->
error.
compare_local_and_universal(Times) when Times > 0 ->
- case compare(erlang:universaltime(), erlang:localtime()) of
- true -> ok;
- false -> compare_local_and_universal(Times-1)
- end;
-compare_local_and_universal(0) ->
- error.
+ Utc = erlang:universaltime(),
+ Local = erlang:localtime(),
+ io:format("local = ~p, utc = ~p", [Local,Utc]),
-compare(Utc0, Local) ->
- io:format("local = ~p, utc = ~p", [Local, Utc0]),
- Utc = linear_time(Utc0)+effective_timezone(Utc0)*3600,
- case linear_time(Local) of
- Utc -> true;
- Other ->
- io:format("Failed: local = ~p, utc = ~p~n",
- [Other, Utc]),
- false
+ AcceptableDiff = 14*3600,
+ case linear_time(Utc) - linear_time(Local) of
+ Diff when abs(Diff) < AcceptableDiff ->
+ ok;
+ Diff ->
+ io:format("More than ~p seconds difference betwen "
+ "local and universal time", [Diff]),
+ ct:fail(huge_diff)
end.
%% This function converts a date and time to a linear time.
@@ -280,35 +270,6 @@ days_in_february(Year) ->
_ -> 28
end.
-%% This functions returns either the normal timezone or the
-%% the DST timezone, depending on the given UTC time.
-%%
-%% XXX This function uses an approximation of the EU rule for
-%% daylight saving time. This function will fail in the
-%% following intervals: After the last Sunday in March upto
-%% the end of March, and after the last Sunday in October
-%% upto the end of October.
-
-effective_timezone(Time) ->
- case os:type() of
- {unix,_} ->
- case os:cmd("date '+%Z'") of
- "SAST"++_ ->
- 2;
- _ ->
- effective_timezone1(Time)
- end;
- _ ->
- effective_timezone1(Time)
- end.
-
-effective_timezone1({{_Year,Mon,_Day}, _}) when Mon < 4 ->
- ?timezone;
-effective_timezone1({{_Year,Mon,_Day}, _}) when Mon > 10 ->
- ?timezone;
-effective_timezone1(_) ->
- ?dst_timezone.
-
%% Test (the bif) os:timestamp/0, which is something quite like, but not
%% similar to erlang:now...
@@ -334,7 +295,7 @@ timestamp(Config) when is_list(Config) ->
os_system_time_offset() ->
erlang:convert_time_unit(os:system_time() - erlang:monotonic_time(),
- native, micro_seconds).
+ native, microsecond).
had_time_warp(Secs) ->
had_time_warp(os_system_time_offset(), Secs).
@@ -527,12 +488,12 @@ check_time_warp_mode(Config, TimeCorrection, TimeWarpMode) ->
MonotonicTimeUnit = rpc:call(Node,
erlang,
convert_time_unit,
- [1, seconds, native]),
+ [1, second, native]),
UpMilliSeconds = erlang:convert_time_unit(MonotonicTime - StartTime,
MonotonicTimeUnit,
- milli_seconds),
+ millisecond),
io:format("UpMilliSeconds=~p~n", [UpMilliSeconds]),
- End = erlang:monotonic_time(milli_seconds),
+ End = erlang:monotonic_time(millisecond),
stop_node(Node),
try
true = (UpMilliSeconds > (98*MonotonicityTimeout) div 100),
@@ -849,10 +810,10 @@ do_check_erlang_timestamp(Done, Mon, TO) ->
MaxMon = erlang:monotonic_time(),
TsMin = erlang:convert_time_unit(MinMon+TO,
native,
- micro_seconds),
+ microsecond),
TsMax = erlang:convert_time_unit(MaxMon+TO,
native,
- micro_seconds),
+ microsecond),
TsTime = (MegaSec*1000000+Sec)*1000000+MicroSec,
case (TsMin =< TsTime) andalso (TsTime =< TsMax) of
true ->
diff --git a/erts/emulator/test/timer_bif_SUITE.erl b/erts/emulator/test/timer_bif_SUITE.erl
index a5f11bd959..7cbd93a0f3 100644
--- a/erts/emulator/test/timer_bif_SUITE.erl
+++ b/erts/emulator/test/timer_bif_SUITE.erl
@@ -74,7 +74,7 @@ all() ->
%% Basic start_timer/3 functionality
start_timer_1(Config) when is_list(Config) ->
Ref1 = erlang:start_timer(1000, self(), plopp),
- ok = get(1100, {timeout, Ref1, plopp}),
+ ok = get(1400, {timeout, Ref1, plopp}),
false = erlang:read_timer(Ref1),
false = erlang:cancel_timer(Ref1),
@@ -83,12 +83,12 @@ start_timer_1(Config) when is_list(Config) ->
Ref2 = erlang:start_timer(1000, self(), plapp),
Left2 = erlang:cancel_timer(Ref2),
UpperLimit = 1000,
- true = (Left2 > 900) and (Left2 =< UpperLimit),
+ true = (Left2 > 600) and (Left2 =< UpperLimit),
empty = get_msg(),
false = erlang:cancel_timer(Ref2),
Ref3 = erlang:start_timer(1000, self(), plopp),
- no_message = get(900, {timeout, Ref3, plopp}),
+ no_message = get(600, {timeout, Ref3, plopp}),
ok.
%% Basic send_after/3 functionality
@@ -489,7 +489,7 @@ registered_process(Config) when is_list(Config) ->
same_time_yielding(Config) when is_list(Config) ->
Mem = mem(),
SchdlrsOnln = erlang:system_info(schedulers_online),
- Tmo = erlang:monotonic_time(milli_seconds) + 3000,
+ Tmo = erlang:monotonic_time(millisecond) + 3000,
Tmrs = lists:map(fun (I) ->
process_flag(scheduler, (I rem SchdlrsOnln) + 1),
erlang:start_timer(Tmo, self(), hej, [{abs, true}])
@@ -497,7 +497,7 @@ same_time_yielding(Config) when is_list(Config) ->
lists:seq(1, (?TIMEOUT_YIELD_LIMIT*3+1)*SchdlrsOnln)),
true = mem_larger_than(Mem),
lists:foreach(fun (Tmr) -> receive {timeout, Tmr, hej} -> ok end end, Tmrs),
- Done = erlang:monotonic_time(milli_seconds),
+ Done = erlang:monotonic_time(millisecond),
true = Done >= Tmo,
case erlang:system_info(build_type) of
opt -> true = Done < Tmo + 200;
@@ -517,10 +517,10 @@ same_time_yielding_with_cancel_other(Config) when is_list(Config) ->
do_cancel_tmrs(Tmo, Tmrs, Tester) ->
BeginCancel = erlang:convert_time_unit(Tmo,
- milli_seconds,
- micro_seconds) - 100,
+ millisecond,
+ microsecond) - 100,
busy_wait_until(fun () ->
- erlang:monotonic_time(micro_seconds) >= BeginCancel
+ erlang:monotonic_time(microsecond) >= BeginCancel
end),
lists:foreach(fun (Tmr) ->
erlang:cancel_timer(Tmr,
@@ -535,7 +535,7 @@ do_cancel_tmrs(Tmo, Tmrs, Tester) ->
same_time_yielding_with_cancel_test(Other, Accessor) ->
Mem = mem(),
SchdlrsOnln = erlang:system_info(schedulers_online),
- Tmo = erlang:monotonic_time(milli_seconds) + 3000,
+ Tmo = erlang:monotonic_time(millisecond) + 3000,
Tester = self(),
Cancelor = case Other of
false ->
@@ -656,7 +656,7 @@ get_msg() ->
start_slave() ->
Pa = filename:dirname(code:which(?MODULE)),
Name = atom_to_list(?MODULE)
- ++ "-" ++ integer_to_list(erlang:system_time(seconds))
+ ++ "-" ++ integer_to_list(erlang:system_time(second))
++ "-" ++ integer_to_list(erlang:unique_integer([positive])),
{ok, Node} = test_server:start_node(Name, slave, [{args, "-pa " ++ Pa}]),
Node.
diff --git a/erts/emulator/test/trace_bif_SUITE.erl b/erts/emulator/test/trace_bif_SUITE.erl
index 491b37ae46..f60c777ba1 100644
--- a/erts/emulator/test/trace_bif_SUITE.erl
+++ b/erts/emulator/test/trace_bif_SUITE.erl
@@ -289,9 +289,9 @@ receive_trace_msg_ts_return_to({trace_ts, Pid, return_to, {M,F,A}}, PrevTs, TsTy
make_ts(timestamp) ->
erlang:now();
make_ts(monotonic_timestamp) ->
- erlang:monotonic_time(nano_seconds);
+ erlang:monotonic_time(nanosecond);
make_ts(strict_monotonic_timestamp) ->
- MT = erlang:monotonic_time(nano_seconds),
+ MT = erlang:monotonic_time(nanosecond),
UMI = erlang:unique_integer([monotonic]),
{MT, UMI}.
diff --git a/erts/emulator/test/trace_call_time_SUITE.erl b/erts/emulator/test/trace_call_time_SUITE.erl
index 40c8bc4340..26f96a1766 100644
--- a/erts/emulator/test/trace_call_time_SUITE.erl
+++ b/erts/emulator/test/trace_call_time_SUITE.erl
@@ -294,7 +294,7 @@ combo(Config) when is_list(Config) ->
T0 = erlang:monotonic_time(),
with_bif(Nbc),
T1 = erlang:monotonic_time(),
- TimeB = erlang:convert_time_unit(T1-T0, native, micro_seconds),
+ TimeB = erlang:convert_time_unit(T1-T0, native, microsecond),
%%
List = collect(100),
@@ -351,7 +351,7 @@ combo(Config) when is_list(Config) ->
%% Tests tracing of bifs
bif(Config) when is_list(Config) ->
P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
- M = 1000000,
+ M = 5000000,
%%
2 = erlang:trace_pattern({erlang, binary_to_term, '_'}, true, [call_time]),
2 = erlang:trace_pattern({erlang, term_to_binary, '_'}, true, [call_time]),
@@ -381,7 +381,7 @@ bif(Config) when is_list(Config) ->
nif(Config) when is_list(Config) ->
load_nif(Config),
P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
- M = 1000000,
+ M = 5000000,
%%
1 = erlang:trace_pattern({?MODULE, nif_dec, '_'}, true, [call_time]),
1 = erlang:trace_pattern({?MODULE, with_nif, '_'}, true, [call_time]),
@@ -655,13 +655,13 @@ execute(Pids, Mfa) when is_list(Pids) ->
[P ! {self(), execute, Mfa} || P <- Pids],
As = [receive {P, answer, Answer} -> Answer end || P <- Pids],
T1 = erlang:monotonic_time(),
- {As, erlang:convert_time_unit(T1-T0, native, micro_seconds)};
+ {As, erlang:convert_time_unit(T1-T0, native, microsecond)};
execute(P, Mfa) ->
T0 = erlang:monotonic_time(),
P ! {self(), execute, Mfa},
A = receive {P, answer, Answer} -> Answer end,
T1 = erlang:monotonic_time(),
- {A, erlang:convert_time_unit(T1-T0, native, micro_seconds)}.
+ {A, erlang:convert_time_unit(T1-T0, native, microsecond)}.
diff --git a/erts/emulator/test/trace_local_SUITE.erl b/erts/emulator/test/trace_local_SUITE.erl
index 74c05f24e0..c297acd78b 100644
--- a/erts/emulator/test/trace_local_SUITE.erl
+++ b/erts/emulator/test/trace_local_SUITE.erl
@@ -439,6 +439,14 @@ return_test() ->
?RT(?MODULE,slave,2),
shutdown(),
?NM,
+
+ %% Test a regression where turning off return_to tracing
+ %% on yourself would cause a segfault.
+ Pid = setup([call,return_to]),
+ erlang:trace_pattern({'_','_','_'},[],[local]),
+ apply_slave(erlang,trace,[Pid, false, [all]]),
+ shutdown(),
+
ok.
on_and_off_test() ->
diff --git a/erts/emulator/test/trace_port_SUITE.erl b/erts/emulator/test/trace_port_SUITE.erl
index a66563d15b..e4db368ea1 100644
--- a/erts/emulator/test/trace_port_SUITE.erl
+++ b/erts/emulator/test/trace_port_SUITE.erl
@@ -26,6 +26,7 @@
return_trace/1,
send/1,
receive_trace/1,
+ receive_trace_non_scheduler/1,
process_events/1,
schedule/1,
gc/1,
@@ -40,6 +41,7 @@ suite() ->
all() ->
[call_trace, return_trace, send, receive_trace,
+ receive_trace_non_scheduler,
process_events, schedule, gc,
default_tracer, tracer_port_crash].
@@ -184,6 +186,26 @@ receive_trace(Config) when is_list(Config) ->
expect({trace_ts,Receiver,'receive',Huge,ts}),
ok.
+%% Test sending receive traces to a port.
+receive_trace_non_scheduler(Config) when is_list(Config) ->
+ start_tracer(Config),
+ S = self(),
+ Receiver = spawn(
+ fun() ->
+ receive
+ go ->
+ Ref = S ! erlang:trace_delivered(all),
+ receive {trace_delivered, Ref, all} -> ok end
+ end
+ end),
+ trac(Receiver, true, ['receive']),
+ Receiver ! go,
+ Ref = receive R -> R end,
+ expect({trace,Receiver,'receive',go}),
+ expect({trace,Receiver,'receive',{trace_delivered, all, Ref}}),
+
+ ok.
+
%% Tests a few process events (like getting linked).
process_events(Config) when is_list(Config) ->
start_tracer(Config),
diff --git a/erts/emulator/test/tracer_SUITE.erl b/erts/emulator/test/tracer_SUITE.erl
index 20fb7e475e..9eb55c9af3 100644
--- a/erts/emulator/test/tracer_SUITE.erl
+++ b/erts/emulator/test/tracer_SUITE.erl
@@ -28,9 +28,9 @@
init_per_group/2,end_per_group/2, init_per_testcase/2,
end_per_testcase/2]).
-export([load/1, unload/1, reload/1, invalid_tracers/1]).
--export([send/1, recv/1, spawn/1, exit/1, link/1, unlink/1,
- getting_linked/1, getting_unlinked/1, register/1, unregister/1,
- in/1, out/1, gc_start/1, gc_end/1]).
+-export([send/1, recv/1, call/1, call_return/1, spawn/1, exit/1,
+ link/1, unlink/1, getting_linked/1, getting_unlinked/1,
+ register/1, unregister/1, in/1, out/1, gc_start/1, gc_end/1]).
suite() -> [{ct_hooks,[ts_install_cth]},
{timetrap, {minutes, 1}}].
@@ -39,9 +39,9 @@ all() ->
[load, unload, reload, invalid_tracers, {group, basic}].
groups() ->
- [{ basic, [], [send, recv, spawn, exit, link, unlink, getting_linked,
- getting_unlinked, register, unregister, in, out,
- gc_start, gc_end]}].
+ [{ basic, [], [send, recv, call, call_return, spawn, exit,
+ link, unlink, getting_linked, getting_unlinked,
+ register, unregister, in, out, gc_start, gc_end]}].
init_per_suite(Config) ->
erlang:trace_pattern({'_','_','_'}, false, [local]),
@@ -223,8 +223,8 @@ send(_Config) ->
Expect = fun(Pid, State, EOpts) ->
receive
Msg ->
- {send, State, Pid, ok, Self, Opts} = Msg,
- check_opts(EOpts, Opts)
+ {send, State, Pid, ok, Opts} = Msg,
+ check_opts(EOpts, Opts, Self)
end
end,
test(send, Tc, Expect).
@@ -239,13 +239,59 @@ recv(_Config) ->
Expect = fun(Pid, State, EOpts) ->
receive
Msg ->
- {'receive', State, Pid, ok, undefined, Opts} = Msg,
+ {'receive', State, Pid, ok, Opts} = Msg,
check_opts(EOpts, Opts)
end
end,
test('receive', Tc, Expect, false).
+call(_Config) ->
+
+ Self = self(),
+ Tc = fun(Pid) ->
+ Pid ! fun() -> call_test(Self), Self ! ok end,
+ receive ok -> ok after 100 -> ct:fail(timeout) end
+ end,
+
+ erlang:trace_pattern({?MODULE, call_test, 1}, [], [local]),
+
+ Expect = fun(Pid, State, EOpts) ->
+ receive
+ Msg ->
+ {call, State, Pid, {?MODULE, call_test, [Self]}, Opts} = Msg,
+ check_opts(EOpts, Opts)
+ end
+ end,
+ test(call, Tc, Expect).
+
+call_return(_Config) ->
+
+ Self = self(),
+ Tc = fun(Pid) ->
+ Pid ! fun() -> call_test(undefined), Self ! ok end,
+ receive ok -> ok after 100 -> ct:fail(timeout) end
+ end,
+
+ 1 = erlang:trace_pattern({?MODULE, call_test, 1}, [{'_',[],[{return_trace}]}], [local]),
+
+ Expect = fun(Pid, State, EOpts) ->
+ receive
+ CallMsg ->
+ {call, State, Pid, {?MODULE, call_test, [undefined]}, COpts} = CallMsg,
+ check_opts(EOpts, COpts)
+ end,
+ receive
+ RetMsg ->
+ {return_from, State, Pid, {?MODULE, call_test, 1}, ROpts} = RetMsg,
+ check_opts(EOpts, ROpts, undefined)
+ end
+ end,
+ test(call, Tc, Expect).
+
+call_test(Arg) ->
+ Arg.
+
spawn(_Config) ->
Tc = fun(Pid) ->
@@ -256,9 +302,8 @@ spawn(_Config) ->
fun(Pid, State, EOpts) ->
receive
Msg ->
- {spawn, State, Pid, NewPid,
- {lists,seq,[1,10]}, Opts} = Msg,
- check_opts(EOpts, Opts),
+ {spawn, State, Pid, NewPid, Opts} = Msg,
+ check_opts(EOpts, Opts, {lists,seq,[1,10]}),
true = is_pid(NewPid) andalso NewPid /= Pid
end
end,
@@ -274,7 +319,7 @@ exit(_Config) ->
fun(Pid, State, EOpts) ->
receive
Msg ->
- {exit, State, Pid, normal, undefined, Opts} = Msg,
+ {exit, State, Pid, normal, Opts} = Msg,
check_opts(EOpts, Opts)
end
end,
@@ -295,7 +340,7 @@ link(_Config) ->
fun(Pid, State, EOpts) ->
receive
Msg ->
- {link, State, Pid, NewPid, undefined, Opts} = Msg,
+ {link, State, Pid, NewPid, Opts} = Msg,
check_opts(EOpts, Opts),
true = is_pid(NewPid) andalso NewPid /= Pid
end
@@ -318,7 +363,7 @@ unlink(_Config) ->
fun(Pid, State, EOpts) ->
receive
Msg ->
- {unlink, State, Pid, NewPid, undefined, Opts} = Msg,
+ {unlink, State, Pid, NewPid, Opts} = Msg,
check_opts(EOpts, Opts),
true = is_pid(NewPid) andalso NewPid /= Pid
end
@@ -340,7 +385,7 @@ getting_linked(_Config) ->
fun(Pid, State, EOpts) ->
receive
Msg ->
- {getting_linked, State, Pid, NewPid, undefined, Opts} = Msg,
+ {getting_linked, State, Pid, NewPid, Opts} = Msg,
check_opts(EOpts, Opts),
true = is_pid(NewPid) andalso NewPid /= Pid
end
@@ -364,7 +409,7 @@ getting_unlinked(_Config) ->
fun(Pid, State, EOpts) ->
receive
Msg ->
- {getting_unlinked, State, Pid, NewPid, undefined, Opts} = Msg,
+ {getting_unlinked, State, Pid, NewPid, Opts} = Msg,
check_opts(EOpts, Opts),
true = is_pid(NewPid) andalso NewPid /= Pid
end
@@ -386,7 +431,7 @@ register(_Config) ->
fun(Pid, State, EOpts) ->
receive
Msg ->
- {register, State, Pid, ?MODULE, undefined, Opts} = Msg,
+ {register, State, Pid, ?MODULE, Opts} = Msg,
check_opts(EOpts, Opts)
end
end,
@@ -407,7 +452,7 @@ unregister(_Config) ->
fun(Pid, State, EOpts) ->
receive
Msg ->
- {unregister, State, Pid, ?MODULE, undefined, Opts} = Msg,
+ {unregister, State, Pid, ?MODULE, Opts} = Msg,
check_opts(EOpts, Opts)
end
end,
@@ -427,8 +472,7 @@ in(_Config) ->
N = (fun F(N) ->
receive
Msg ->
- {in, State, Pid, _,
- undefined, Opts} = Msg,
+ {in, State, Pid, _, Opts} = Msg,
check_opts(EOpts, Opts),
F(N+1)
after 0 -> N
@@ -452,8 +496,7 @@ out(_Config) ->
N = (fun F(N) ->
receive
Msg ->
- {out, State, Pid, _,
- undefined, Opts} = Msg,
+ {out, State, Pid, _, Opts} = Msg,
check_opts(EOpts, Opts),
F(N+1)
after 0 -> N
@@ -477,7 +520,7 @@ gc_start(_Config) ->
fun(Pid, State, EOpts) ->
receive
Msg ->
- {gc_major_start, State, Pid, _, undefined, Opts} = Msg,
+ {gc_major_start, State, Pid, _, Opts} = Msg,
check_opts(EOpts, Opts)
end
end,
@@ -497,7 +540,7 @@ gc_end(_Config) ->
fun(Pid, State, EOpts) ->
receive
Msg ->
- {gc_major_end, State, Pid, _, undefined, Opts} = Msg,
+ {gc_major_end, State, Pid, _, Opts} = Msg,
check_opts(EOpts, Opts)
end
end,
@@ -513,9 +556,7 @@ test(Event, TraceFlag, Tc, Expect, Removes) ->
test(Event, TraceFlag, Tc, Expect, _Removes, Dies) ->
ComplexState = {fun() -> ok end, <<0:(128*8)>>},
- Opts = #{ timestamp => undefined,
- scheduler_id => undefined,
- match_spec_result => true },
+ Opts = #{ },
%% Test that trace works
State1 = {#{ Event => trace }, self(), ComplexState},
@@ -540,8 +581,8 @@ test(Event, TraceFlag, Tc, Expect, _Removes, Dies) ->
Tc(Pid1T),
ok = trace_delivered(Pid1T),
- Expect(Pid1T, State1, Opts#{ scheduler_id := number,
- timestamp := timestamp}),
+ Expect(Pid1T, State1, Opts#{ scheduler_id => number,
+ timestamp => timestamp}),
receive M11T -> ct:fail({unexpected, M11T}) after 0 -> ok end,
if not Dies ->
{flags, [scheduler_id, TraceFlag, timestamp]}
@@ -568,6 +609,8 @@ test(Event, TraceFlag, Tc, Expect, _Removes, Dies) ->
ok.
+check_opts(E, O, Extra) ->
+ check_opts(E#{ extra => Extra }, O).
check_opts(#{ scheduler_id := number } = E, #{ scheduler_id := N } = O)
when is_integer(N) ->
E1 = maps:remove(scheduler_id, E),
diff --git a/erts/emulator/test/tracer_SUITE_data/tracer_test.c b/erts/emulator/test/tracer_SUITE_data/tracer_test.c
index 908f35da9c..a26bb33600 100644
--- a/erts/emulator/test/tracer_SUITE_data/tracer_test.c
+++ b/erts/emulator/test/tracer_SUITE_data/tracer_test.c
@@ -36,7 +36,7 @@ static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ErlNifFunc nif_funcs[] = {
{"enabled", 3, enabled},
- {"trace", 6, trace}
+ {"trace", 5, trace}
};
ERL_NIF_INIT(tracer_test, nif_funcs, load, NULL, upgrade, unload)
@@ -100,7 +100,7 @@ static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
ErlNifPid self, to;
ERL_NIF_TERM *tuple, msg;
const ERL_NIF_TERM *state_tuple;
- ASSERT(argc == 6);
+ ASSERT(argc == 5);
enif_get_tuple(env, argv[1], &state_arity, &state_tuple);
diff --git a/erts/emulator/test/tracer_test.erl b/erts/emulator/test/tracer_test.erl
index d4778f4531..1da80bfe31 100644
--- a/erts/emulator/test/tracer_test.erl
+++ b/erts/emulator/test/tracer_test.erl
@@ -24,14 +24,14 @@
%%% Test tracer
%%%
--export([enabled/3, trace/6]).
+-export([enabled/3, trace/5]).
-export([load/1, load/2]).
-on_load(load/0).
enabled(_, _, _) ->
erlang:nif_error(nif_not_loaded).
-trace(_, _, _, _, _, _) ->
+trace(_, _, _, _, _) ->
erlang:nif_error(nif_not_loaded).
load() ->
diff --git a/erts/emulator/test/z_SUITE.erl b/erts/emulator/test/z_SUITE.erl
index d1085c1958..ab56018373 100644
--- a/erts/emulator/test/z_SUITE.erl
+++ b/erts/emulator/test/z_SUITE.erl
@@ -191,7 +191,13 @@ node_container_refc_check(Config) when is_list(Config) ->
ok.
long_timers(Config) when is_list(Config) ->
- ok = long_timers_test:check_result().
+ case long_timers_test:check_result() of
+ ok -> ok;
+ high_cpu -> {comment, "Ignored failures due to high CPU utilization"};
+ missing_cpu_info -> {comment, "Ignored failures due to missing CPU utilization information"};
+ Fail -> ct:fail(Fail)
+ end.
+
pollset_size(Config) when is_list(Config) ->
Name = pollset_size_testcase_initial_state_holder,
diff --git a/erts/epmd/test/epmd_SUITE.erl b/erts/epmd/test/epmd_SUITE.erl
index 763984267a..0f0a5acde7 100644
--- a/erts/epmd/test/epmd_SUITE.erl
+++ b/erts/epmd/test/epmd_SUITE.erl
@@ -23,64 +23,58 @@
% Timeout for test cases (rather long to work on slow machines)
--define(SHORT_TEST_TIMEOUT, ?t:seconds(30)). % Default
--define(MEDIUM_TEST_TIMEOUT, ?t:minutes(3)).
--define(LONG_TEST_TIMEOUT, ?t:minutes(10)).
+-define(MEDIUM_TEST_TIMEOUT, {minutes,3}).
+-define(LONG_TEST_TIMEOUT, {minutes,10}).
% Delay inserted into code
-define(SHORT_PAUSE, 100).
--define(MEDIUM_PAUSE, ?t:seconds(1)).
--define(LONG_PAUSE, ?t:seconds(5)).
+-define(MEDIUM_PAUSE, 1000).
+-define(LONG_PAUSE, 5000).
% Information about nodes
-record(node_info, {port, node_type, prot, lvsn, hvsn, node_name, extra}).
% Test server specific exports
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- init_per_testcase/2, end_per_testcase/2]).
-
--export(
- [
- register_name/1,
- register_name_ipv6/1,
- register_names_1/1,
- register_names_2/1,
- register_duplicate_name/1,
- unicode_name/1,
- long_unicode_name/1,
- get_port_nr/1,
- slow_get_port_nr/1,
- unregister_others_name_1/1,
- unregister_others_name_2/1,
- register_overflow/1,
- name_with_null_inside/1,
- name_null_terminated/1,
- stupid_names_req/1,
-
- no_data/1,
- one_byte/1,
- two_bytes/1,
- partial_packet/1,
- zero_length/1,
- too_large/1,
- alive_req_too_small_1/1,
- alive_req_too_small_2/1,
- alive_req_too_large/1,
-
- returns_valid_empty_extra/1,
- returns_valid_populated_extra_with_nulls/1,
-
- names_stdout/1,
-
- buffer_overrun_1/1,
- buffer_overrun_2/1,
- no_nonlocal_register/1,
- no_nonlocal_kill/1,
- no_live_killing/1,
-
- socket_reset_before_alive2_reply_is_written/1
- ]).
+-export([all/0, suite/0, groups/0, init_per_testcase/2, end_per_testcase/2]).
+
+-export([register_name/1,
+ register_name_ipv6/1,
+ register_names_1/1,
+ register_names_2/1,
+ register_duplicate_name/1,
+ unicode_name/1,
+ long_unicode_name/1,
+ get_port_nr/1,
+ slow_get_port_nr/1,
+ unregister_others_name_1/1,
+ unregister_others_name_2/1,
+ register_overflow/1,
+ name_with_null_inside/1,
+ name_null_terminated/1,
+ stupid_names_req/1,
+
+ no_data/1,
+ one_byte/1,
+ two_bytes/1,
+ partial_packet/1,
+ zero_length/1,
+ too_large/1,
+ alive_req_too_small_1/1,
+ alive_req_too_small_2/1,
+ alive_req_too_large/1,
+
+ returns_valid_empty_extra/1,
+ returns_valid_populated_extra_with_nulls/1,
+
+ names_stdout/1,
+
+ buffer_overrun_1/1,
+ buffer_overrun_2/1,
+ no_nonlocal_register/1,
+ no_nonlocal_kill/1,
+ no_live_killing/1,
+
+ socket_reset_before_alive2_reply_is_written/1]).
% Port we use for testing
@@ -88,7 +82,7 @@
-define(EPMDARGS,"-packet_timeout 1").
-define(DUMMY_PORT, 1000). % Port number to register
- % not in real use.
+% not in real use.
% Timeouts etc inside test cases. Time is in milliseconds.
-define(CONN_RETRY, 4). % Times to retry connecting
@@ -111,7 +105,9 @@
%% all/1
%%
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, ?MEDIUM_TEST_TIMEOUT}].
all() ->
[register_name, register_name_ipv6,
@@ -134,105 +130,71 @@ groups() ->
[{buffer_overrun, [],
[buffer_overrun_1, buffer_overrun_2]}].
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
%%
%% Run before and after each test case
%%
init_per_testcase(_Func, Config) ->
- Dog = test_server:timetrap(?MEDIUM_TEST_TIMEOUT),
cleanup(),
- [{watchdog, Dog} | Config].
+ Config.
-end_per_testcase(_Func, Config) ->
+end_per_testcase(_Func, _Config) ->
cleanup(),
- Dog = ?config(watchdog, Config),
- catch test_server:timetrap_cancel(Dog), % We may have canceled already
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-register_name(doc) ->
- ["Register a name"];
-register_name(suite) ->
- [];
+%% Register a name
register_name(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = register_node("foobar"),
- ?line ok = close(Sock), % Unregister
+ ok = epmdrun(),
+ {ok,Sock} = register_node("foobar"),
+ ok = close(Sock), % Unregister
ok.
-register_name_ipv6(doc) ->
- ["Register a name over IPv6"];
-register_name_ipv6(suite) ->
- [];
+%% Register a name over IPv6
register_name_ipv6(Config) when is_list(Config) ->
% Test if the host has an IPv6 loopback address
Res = gen_tcp:listen(0, [inet6, {ip, {0,0,0,0,0,0,0,1}}]),
case Res of
- {ok,LSock} ->
- gen_tcp:close(LSock),
- ?line ok = epmdrun(),
- ?line {ok,Sock} = register_node6("foobar6"),
- ?line ok = close(Sock), % Unregister
- ok;
- _Error ->
- {skip, "Host does not have an IPv6 loopback address"}
+ {ok,LSock} ->
+ gen_tcp:close(LSock),
+ ok = epmdrun(),
+ {ok,Sock} = register_node6("foobar6"),
+ ok = close(Sock), % Unregister
+ ok;
+ _Error ->
+ {skip, "Host does not have an IPv6 loopback address"}
end.
-register_names_1(doc) ->
- ["Register and unregister two nodes"];
-register_names_1(suite) ->
- [];
+%% Register and unregister two nodes
register_names_1(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock1} = register_node("foobar"),
- ?line {ok,Sock2} = register_node("foozap"),
- ?line ok = close(Sock1), % Unregister
- ?line ok = close(Sock2), % Unregister
+ ok = epmdrun(),
+ {ok,Sock1} = register_node("foobar"),
+ {ok,Sock2} = register_node("foozap"),
+ ok = close(Sock1), % Unregister
+ ok = close(Sock2), % Unregister
ok.
-register_names_2(doc) ->
- ["Register and unregister two nodes"];
-register_names_2(suite) ->
- [];
+%% Register and unregister two nodes
register_names_2(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock1} = register_node("foobar"),
- ?line {ok,Sock2} = register_node("foozap"),
- ?line ok = close(Sock2), % Unregister
- ?line ok = close(Sock1), % Unregister
+ ok = epmdrun(),
+ {ok,Sock1} = register_node("foobar"),
+ {ok,Sock2} = register_node("foozap"),
+ ok = close(Sock2), % Unregister
+ ok = close(Sock1), % Unregister
ok.
-register_duplicate_name(doc) ->
- ["Two nodes with the same name"];
-register_duplicate_name(suite) ->
- [];
+%% Two nodes with the same name
register_duplicate_name(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = register_node("foobar"),
- ?line error = register_node("foobar"),
- ?line ok = close(Sock), % Unregister
+ ok = epmdrun(),
+ {ok,Sock} = register_node("foobar"),
+ error = register_node("foobar"),
+ ok = close(Sock), % Unregister
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-unicode_name(doc) ->
- ["Check that we can register and lookup a unicode name"];
-unicode_name(suite) ->
- [];
+%% Check that we can register and lookup a unicode name
unicode_name(Config) when is_list(Config) ->
ok = epmdrun(),
NodeName = [16#1f608],
@@ -244,10 +206,7 @@ unicode_name(Config) when is_list(Config) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-long_unicode_name(doc) ->
- ["Check that we can register and lookup a long unicode name"];
-long_unicode_name(suite) ->
- [];
+%% Check that we can register and lookup a long unicode name
long_unicode_name(Config) when is_list(Config) ->
ok = epmdrun(),
BaseChar = 16#1f600,
@@ -273,101 +232,85 @@ register_node_v2(Port, NodeType, Prot, HVsn, LVsn, Name, Extra) ->
register_node_v2(Addr, Port, NodeType, Prot, HVsn, LVsn, Name, Extra) ->
Req = alive2_req(Port, NodeType, Prot, HVsn, LVsn, Name, Extra),
case send_req(Req, Addr) of
- {ok,Sock} ->
- case recv(Sock,4) of
- {ok, [?EPMD_ALIVE2_RESP,_Res=0,_C0,_C1]} ->
- {ok,Sock};
- Other ->
- test_server:format("recv on sock ~w: ~p~n",
- [Sock,Other]),
- error
- end;
- error ->
- error
+ {ok,Sock} ->
+ case recv(Sock,4) of
+ {ok, [?EPMD_ALIVE2_RESP,_Res=0,_C0,_C1]} ->
+ {ok,Sock};
+ Other ->
+ io:format("recv on sock ~w: ~p~n", [Sock,Other]),
+ error
+ end;
+ error ->
+ error
end.
% Internal function to fetch information about a node
port_please_v2(Name) ->
case send_req([?EPMD_PORT_PLEASE2_REQ,
- binary_to_list(unicode:characters_to_binary(Name))]) of
- {ok,Sock} ->
- case recv_until_sock_closes(Sock) of
- {ok, Resp} ->
- parse_port2_resp(Resp);
- Other ->
- test_server:format("recv on sock ~w: ~p~n",
- [Sock,Other]),
- error
- end;
- error ->
- error
+ binary_to_list(unicode:characters_to_binary(Name))]) of
+ {ok,Sock} ->
+ case recv_until_sock_closes(Sock) of
+ {ok, Resp} ->
+ parse_port2_resp(Resp);
+ Other ->
+ io:format("recv on sock ~w: ~p~n", [Sock,Other]),
+ error
+ end;
+ error ->
+ error
end.
parse_port2_resp(Resp) ->
case list_to_binary(Resp) of
- <<?EPMD_PORT2_RESP,Res,Port:16,NodeType,Prot,HVsn:16,LVsn:16,
- NLen:16,NodeName:NLen/binary,
- ELen:16,Extra:ELen/binary>> when Res =:= 0 ->
- {ok, #node_info{port=Port,node_type=NodeType,prot=Prot,
- hvsn=HVsn,lvsn=LVsn,
- node_name=unicode:characters_to_list(NodeName),
- extra=binary_to_list(Extra)}};
- _Other ->
- test_server:format("invalid port2 resp: ~p~n",
- [Resp]),
- error
+ <<?EPMD_PORT2_RESP,Res,Port:16,NodeType,Prot,HVsn:16,LVsn:16,
+ NLen:16,NodeName:NLen/binary,
+ ELen:16,Extra:ELen/binary>> when Res =:= 0 ->
+ {ok, #node_info{port=Port,node_type=NodeType,prot=Prot,
+ hvsn=HVsn,lvsn=LVsn,
+ node_name=unicode:characters_to_list(NodeName),
+ extra=binary_to_list(Extra)}};
+ _Other ->
+ io:format("invalid port2 resp: ~p~n", [Resp]),
+ error
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-name_with_null_inside(doc) ->
- ["Register a name with a null char in it"];
-name_with_null_inside(suite) ->
- [];
+%% Register a name with a null char in it
name_with_null_inside(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line error = register_node("foo\000bar"),
+ ok = epmdrun(),
+ error = register_node("foo\000bar"),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-name_null_terminated(doc) ->
- ["Register a name with terminating null byte"];
-name_null_terminated(suite) ->
- [];
+%% Register a name with terminating null byte
name_null_terminated(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line error = register_node("foobar\000"),
+ ok = epmdrun(),
+ error = register_node("foobar\000"),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-stupid_names_req(doc) ->
- ["Read names from epmd in a stupid way"];
-stupid_names_req(suite) ->
- [];
+%% Read names from epmd in a stupid way
stupid_names_req(Config) when is_list(Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- LongDog = test_server:timetrap(?MEDIUM_TEST_TIMEOUT),
- ?line ok = epmdrun(),
- ?line [FirstConn | Conn] = register_many(1, ?REG_REPEAT_LIM, "foo"),
- ?line unregister_many([FirstConn]),
+ ok = epmdrun(),
+ [FirstConn | Conn] = register_many(1, ?REG_REPEAT_LIM, "foo"),
+ unregister_many([FirstConn]),
sleep(?MEDIUM_PAUSE),
- ?line ok = check_names(Conn),
- ?line ok = unregister_many(Conn),
- test_server:timetrap_cancel(LongDog),
+ ok = check_names(Conn),
+ ok = unregister_many(Conn),
ok.
check_names(Conn) ->
- ?line {ok,Sock} = connect_active(),
- ?line {ok,Reply} = do_get_names(Sock),
- ?line SortConn = lists:sort(Conn),
- ?line SortReply = lists:sort(Reply),
- ?line ok = check_names_cmp(SortConn, SortReply),
+ {ok,Sock} = connect_active(),
+ {ok,Reply} = do_get_names(Sock),
+ SortConn = lists:sort(Conn),
+ SortReply = lists:sort(Reply),
+ ok = check_names_cmp(SortConn, SortReply),
ok.
-
+
% Compare if the result was the same as was registered
@@ -381,43 +324,43 @@ check_names_cmp([{Name,Port,_Sock} | Conn], [{Name,Port} | Reply]) ->
-define(int16(X), [(X bsr 8) band 16#ff, X band 16#ff]).
-define(u32(X1,X2,X3,X4),
- (((X1) bsl 24) bor ((X2) bsl 16) bor ((X3) bsl 8) bor X4)).
+ (((X1) bsl 24) bor ((X2) bsl 16) bor ((X3) bsl 8) bor X4)).
do_get_names(Socket) ->
inet_tcp:send(Socket, [?int16(1),?EPMD_NAMES_REQ]),
receive
- {tcp, Socket, [P0,P1,P2,P3 | T]} ->
- EpmdPort = ?u32(P0,P1,P2,P3),
- if EpmdPort == ?PORT ->
- names_loop(Socket, T, []);
- true ->
- close(Socket),
- {error, address}
- end;
- {tcp_closed, Socket} ->
- {ok, []}
+ {tcp, Socket, [P0,P1,P2,P3 | T]} ->
+ EpmdPort = ?u32(P0,P1,P2,P3),
+ if EpmdPort == ?PORT ->
+ names_loop(Socket, T, []);
+ true ->
+ close(Socket),
+ {error, address}
+ end;
+ {tcp_closed, Socket} ->
+ {ok, []}
end.
names_loop(Socket, Acc, Ps) ->
receive
- {tcp, Socket, Bytes} ->
- {NAcc, NPs} = scan_names(Acc ++ Bytes, Ps),
- names_loop(Socket, NAcc, NPs);
- {tcp_closed, Socket} ->
- {_, NPs} = scan_names(Acc, Ps), % Really needed?
- {ok, NPs}
+ {tcp, Socket, Bytes} ->
+ {NAcc, NPs} = scan_names(Acc ++ Bytes, Ps),
+ names_loop(Socket, NAcc, NPs);
+ {tcp_closed, Socket} ->
+ {_, NPs} = scan_names(Acc, Ps), % Really needed?
+ {ok, NPs}
end.
scan_names(Buf, Ps) ->
case scan_line(Buf, []) of
- {Line, NBuf} ->
- case parse_line(Line) of
- {ok, Entry} ->
- scan_names(NBuf, [Entry | Ps]);
- error ->
- scan_names(NBuf, Ps)
- end;
- [] -> {Buf, Ps}
+ {Line, NBuf} ->
+ case parse_line(Line) of
+ {ok, Entry} ->
+ scan_names(NBuf, [Entry | Ps]);
+ error ->
+ scan_names(NBuf, Ps)
+ end;
+ [] -> {Buf, Ps}
end.
scan_line([$\n | Buf], Line) -> {lists:reverse(Line), Buf};
@@ -426,16 +369,16 @@ scan_line([], _) -> [].
parse_line([$n,$a,$m,$e,$ | Buf0]) ->
case parse_name(Buf0, []) of
- {Name, Buf1} ->
- case Buf1 of
- [$a,$t,$ ,$p,$o,$r,$t,$ | Buf2] ->
- case catch list_to_integer(Buf2) of
- {'EXIT', _} -> error;
- Port -> {ok, {Name, Port}}
- end;
- _ -> error
- end;
- error -> error
+ {Name, Buf1} ->
+ case Buf1 of
+ [$a,$t,$ ,$p,$o,$r,$t,$ | Buf2] ->
+ case catch list_to_integer(Buf2) of
+ {'EXIT', _} -> error;
+ Port -> {ok, {Name, Port}}
+ end;
+ _ -> error
+ end;
+ error -> error
end;
parse_line(_) -> error.
@@ -447,17 +390,11 @@ parse_name([], _Name) -> error.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-get_port_nr(doc) ->
- ["Register a name on a port and ask about port nr"];
-get_port_nr(suite) ->
- [];
+%% Register a name on a port and ask about port nr
get_port_nr(Config) when is_list(Config) ->
port_request([?EPMD_PORT_PLEASE2_REQ,"foo"]).
-slow_get_port_nr(doc) ->
- ["Register with slow write and ask about port nr"];
-slow_get_port_nr(suite) ->
- [];
+%% Register with slow write and ask about port nr
slow_get_port_nr(Config) when is_list(Config) ->
port_request([?EPMD_PORT_PLEASE2_REQ,d,$f,d,$o,d,$o]).
@@ -465,142 +402,127 @@ slow_get_port_nr(Config) when is_list(Config) ->
% Internal function used above
port_request(M) ->
- ?line ok = epmdrun(),
+ ok = epmdrun(),
Port = 1042,
- ?line {ok,RSock} = register_node("foo", Port),
- ?line {ok,Sock} = connect(),
- ?line ok = send(Sock,[size16(M),M]),
- ?line case recv_until_sock_closes(Sock) of
- {ok, Resp} ->
- ?line close(RSock),
- ?line {ok,Rec} = parse_port2_resp(Resp),
- ?line Port = Rec#node_info.port,
- ok;
- Other ->
- ?line close(RSock),
- ?line test_server:format("recv on sock ~w: ~p~n",
- [Sock,Other]),
- ?line throw({error,Other})
- end,
+ {ok,RSock} = register_node("foo", Port),
+ {ok,Sock} = connect(),
+ ok = send(Sock,[size16(M),M]),
+ case recv_until_sock_closes(Sock) of
+ {ok, Resp} ->
+ close(RSock),
+ {ok,Rec} = parse_port2_resp(Resp),
+ Port = Rec#node_info.port,
+ ok;
+ Other ->
+ close(RSock),
+ io:format("recv on sock ~w: ~p~n", [Sock,Other]),
+ throw({error,Other})
+ end,
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-unregister_others_name_1(doc) ->
- ["Unregister name of other node"];
-unregister_others_name_1(suite) ->
- [];
+%% Unregister name of other node
unregister_others_name_1(Config) when is_list(Config) ->
- ?line ok = epmdrun("-relaxed_command_check"),
- ?line {ok,RSock} = register_node("foo"),
- ?line {ok,Sock} = connect(),
+ ok = epmdrun("-relaxed_command_check"),
+ {ok,RSock} = register_node("foo"),
+ {ok,Sock} = connect(),
M = [?EPMD_STOP_REQ,"foo"],
- ?line ok = send(Sock,[size16(M),M]),
+ ok = send(Sock,[size16(M),M]),
R = "STOPPED",
- ?line {ok,R} = recv(Sock,length(R)),
- ?line ok = close(RSock),
+ {ok,R} = recv(Sock,length(R)),
+ ok = close(RSock),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-unregister_others_name_2(doc) ->
- ["Unregister name of other node"];
-unregister_others_name_2(suite) ->
- [];
+%% Unregister name of other node
unregister_others_name_2(Config) when is_list(Config) ->
- ?line ok = epmdrun("-relaxed_command_check"),
- ?line {ok,Sock} = connect(),
+ ok = epmdrun("-relaxed_command_check"),
+ {ok,Sock} = connect(),
M = [?EPMD_STOP_REQ,"xxx42"],
- ?line ok = send(Sock,[size16(M),M]),
+ ok = send(Sock,[size16(M),M]),
R = "NOEXIST",
- ?line {ok,R} = recv(Sock,length(R)),
+ {ok,R} = recv(Sock,length(R)),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-register_overflow(doc) ->
- ["Register too many, clean and redo 10 times"];
-register_overflow(suite) ->
- [];
+%% Register too many, clean and redo 10 times
register_overflow(Config) when is_list(Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- LongDog = test_server:timetrap(?LONG_TEST_TIMEOUT),
- ?line ok = epmdrun(),
- ?line Conn = register_many(1, ?REG_REPEAT_LIM, "foo"),
+ ct:timetrap(?LONG_TEST_TIMEOUT),
+ ok = epmdrun(),
+ Conn = register_many(1, ?REG_REPEAT_LIM, "foo"),
Count = length(Conn),
- ?line ok = unregister_many(Conn),
+ ok = unregister_many(Conn),
sleep(?MEDIUM_PAUSE),
- test_server:format("Limit was ~w names, now reg/unreg all 10 times~n",
- [Count]),
- ?line ok = register_repeat(Count),
+ io:format("Limit was ~w names, now reg/unreg all 10 times~n", [Count]),
+ ok = register_repeat(Count),
sleep(?MEDIUM_PAUSE),
- ?line ok = rregister_repeat(Count),
+ ok = rregister_repeat(Count),
sleep(?MEDIUM_PAUSE),
- ?line ok = register_repeat(Count),
+ ok = register_repeat(Count),
sleep(?MEDIUM_PAUSE),
- ?line ok = rregister_repeat(Count),
+ ok = rregister_repeat(Count),
sleep(?MEDIUM_PAUSE),
- ?line ok = register_repeat(Count),
+ ok = register_repeat(Count),
sleep(?MEDIUM_PAUSE),
- ?line ok = rregister_repeat(Count),
+ ok = rregister_repeat(Count),
sleep(?MEDIUM_PAUSE),
- ?line ok = register_repeat(Count),
+ ok = register_repeat(Count),
sleep(?MEDIUM_PAUSE),
- ?line ok = rregister_repeat(Count),
+ ok = rregister_repeat(Count),
sleep(?MEDIUM_PAUSE),
- ?line ok = register_repeat(Count),
+ ok = register_repeat(Count),
sleep(?MEDIUM_PAUSE),
- ?line ok = rregister_repeat(Count),
- test_server:timetrap_cancel(LongDog),
+ ok = rregister_repeat(Count),
ok.
register_repeat(Count) ->
Conn = register_many(1, ?REG_REPEAT_LIM, "foo"),
ok = unregister_many(Conn),
if
- length(Conn) == Count ->
- ok;
- true ->
- error
+ length(Conn) == Count ->
+ ok;
+ true ->
+ error
end.
rregister_repeat(Count) ->
Conn = register_many(1, ?REG_REPEAT_LIM, "foo"),
ok = unregister_many(lists:reverse(Conn)),
if
- length(Conn) == Count ->
- ok;
- true ->
- error
+ length(Conn) == Count ->
+ ok;
+ true ->
+ error
end.
% Return count of successful registrations
register_many(I, N, _Prefix) when I > N ->
- test_server:format("Done with all ~n", []),
+ io:format("Done with all ~n", []),
[];
register_many(I, N, Prefix) ->
Name = gen_name(Prefix, I),
Port = ?DUMMY_PORT + I, % Just make it up
case register_node(Name, Port) of
- {ok,Sock} ->
- [{Name,Port,Sock} | register_many(I + 1, N, Prefix)];
- Any ->
- test_server:format("Can't register: ~w of 1..~w ~w~n",
- [Name,N,Any]),
- []
+ {ok,Sock} ->
+ [{Name,Port,Sock} | register_many(I + 1, N, Prefix)];
+ Any ->
+ test_server:format("Can't register: ~w of 1..~w ~w~n", [Name,N,Any]),
+ []
end.
unregister_many([]) ->
ok;
unregister_many([{Name,_Port,Sock} | Socks]) ->
case close(Sock) of
- ok ->
- unregister_many(Socks);
- Any ->
- test_server:format("Can't unregister: ~w reason ~w~n", [Name,Any]),
- error
+ ok ->
+ unregister_many(Socks);
+ Any ->
+ test_server:format("Can't unregister: ~w reason ~w~n", [Name,Any]),
+ error
end.
gen_name(Str,Int) ->
@@ -608,246 +530,203 @@ gen_name(Str,Int) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-no_data(doc) ->
- ["Open but send no data"];
-no_data(suite) ->
- [];
+%% Open but send no data
no_data(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = connect(),
+ ok = epmdrun(),
+ {ok,Sock} = connect(),
sleep(?LONG_PAUSE),
- ?line closed = recv(Sock,1),
+ closed = recv(Sock,1),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-one_byte(doc) ->
- ["Send one byte only"];
-one_byte(suite) ->
- [];
+%% Send one byte only
one_byte(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = connect(),
- ?line ok = send(Sock,[0]),
+ ok = epmdrun(),
+ {ok,Sock} = connect(),
+ ok = send(Sock,[0]),
sleep(?LONG_PAUSE),
- ?line closed = recv(Sock,1),
+ closed = recv(Sock,1),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-two_bytes(doc) ->
- ["Send packet size only"];
-two_bytes(suite) ->
- [];
+%% Send packet size only
two_bytes(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = connect(),
- ?line ok = send(Sock,[put16(3)]),
+ ok = epmdrun(),
+ {ok,Sock} = connect(),
+ ok = send(Sock,[put16(3)]),
sleep(?LONG_PAUSE),
- ?line closed = recv(Sock,1),
+ closed = recv(Sock,1),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-partial_packet(doc) ->
- ["Got only part of a packet"];
-partial_packet(suite) ->
- [];
+%% Got only part of a packet
partial_packet(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = connect(),
- ?line ok = send(Sock,[put16(100),"only a few bytes"]),
+ ok = epmdrun(),
+ {ok,Sock} = connect(),
+ ok = send(Sock,[put16(100),"only a few bytes"]),
sleep(?LONG_PAUSE),
- ?line closed = recv(Sock,1),
+ closed = recv(Sock,1),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-zero_length(doc) ->
- ["Invalid zero packet size"];
-zero_length(suite) ->
- [];
+%% Invalid zero packet size
zero_length(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = connect(),
- ?line ok = send(Sock,[0,0,0,0,0,0,0,0,0,0]),
+ ok = epmdrun(),
+ {ok,Sock} = connect(),
+ ok = send(Sock,[0,0,0,0,0,0,0,0,0,0]),
sleep(?MEDIUM_PAUSE),
- ?line closed = recv(Sock,1),
+ closed = recv(Sock,1),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-too_large(doc) ->
- ["Invalid large packet"];
-too_large(suite) ->
- [];
+%% Invalid large packet
too_large(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = connect(),
+ ok = epmdrun(),
+ {ok,Sock} = connect(),
Size = 63000,
M = lists:duplicate(Size, $z),
- ?line ok = send(Sock,[put16(Size),M]),
+ ok = send(Sock,[put16(Size),M]),
sleep(?MEDIUM_PAUSE),
% With such a large packet, even the writes can fail as the
% daemon closes before everything is delivered -> econnaborted
case recv(Sock,1) of
- closed -> ok;
- {error,econnaborted} -> ok;
- Other -> exit({unexpected,Other})
+ closed -> ok;
+ {error,econnaborted} -> ok;
+ Other -> exit({unexpected,Other})
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-alive_req_too_small_1(doc) ->
- ["Try to register but not enough data"];
-alive_req_too_small_1(suite) ->
- [];
+%% Try to register but not enough data
alive_req_too_small_1(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = connect(),
+ ok = epmdrun(),
+ {ok,Sock} = connect(),
M = [?EPMD_ALIVE2_REQ, put16(?DUMMY_PORT),$M,0, put16(5),
- put16(5),put16(0)],
- ?line ok = send(Sock, [size16(M), M]),
+ put16(5),put16(0)],
+ ok = send(Sock, [size16(M), M]),
sleep(?MEDIUM_PAUSE),
- ?line closed = recv(Sock,1),
+ closed = recv(Sock,1),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-alive_req_too_small_2(doc) ->
- ["Try to register but not enough data"];
-alive_req_too_small_2(suite) ->
- [];
+%% Try to register but not enough data
alive_req_too_small_2(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = connect(),
+ ok = epmdrun(),
+ {ok,Sock} = connect(),
M = [?EPMD_ALIVE2_REQ, put16(?DUMMY_PORT),$M,0, put16(5),
- put16(5)],
- ?line ok = send(Sock, [size16(M), M]),
+ put16(5)],
+ ok = send(Sock, [size16(M), M]),
sleep(?MEDIUM_PAUSE),
- ?line closed = recv(Sock,1),
+ closed = recv(Sock,1),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-alive_req_too_large(doc) ->
- ["Try to register but node name too large"];
-alive_req_too_large(suite) ->
- [];
+%% Try to register but node name too large
alive_req_too_large(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = connect(),
- L = [
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- ],
+ ok = epmdrun(),
+ {ok,Sock} = connect(),
+ L = ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
S = length(lists:flatten(L)),
M = [?EPMD_ALIVE2_REQ, put16(?DUMMY_PORT),$M,0, put16(5),
- put16(5), put16(S),L,put16(0)],
- ?line ok = send(Sock, [size16(M), M]),
+ put16(5), put16(S),L,put16(0)],
+ ok = send(Sock, [size16(M), M]),
sleep(?MEDIUM_PAUSE),
- ?line {ok,[?EPMD_ALIVE2_RESP,1]} = recv(Sock,2),
+ {ok,[?EPMD_ALIVE2_RESP,1]} = recv(Sock,2),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-returns_valid_empty_extra(doc) ->
- ["Check that an empty extra is prefixed by a two byte length"];
-returns_valid_empty_extra(suite) ->
- [];
+%% Check that an empty extra is prefixed by a two byte length
returns_valid_empty_extra(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = register_node_v2(4711, 72, 0, 5, 5, "foo", []),
- ?line {ok,#node_info{extra=[]}} = port_please_v2("foo"),
- ?line ok = close(Sock),
+ ok = epmdrun(),
+ {ok,Sock} = register_node_v2(4711, 72, 0, 5, 5, "foo", []),
+ {ok,#node_info{extra=[]}} = port_please_v2("foo"),
+ ok = close(Sock),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-returns_valid_populated_extra_with_nulls(doc) ->
- ["Check a populated extra with embedded null characters"];
-returns_valid_populated_extra_with_nulls(suite) ->
- [];
+%% Check a populated extra with embedded null characters
returns_valid_populated_extra_with_nulls(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = register_node_v2(4711, 72, 0, 5, 5, "foo", "ABC\000\000"),
- ?line {ok,#node_info{extra="ABC\000\000"}} = port_please_v2("foo"),
- ?line ok = close(Sock),
+ ok = epmdrun(),
+ {ok,Sock} = register_node_v2(4711, 72, 0, 5, 5, "foo", "ABC\000\000"),
+ {ok,#node_info{extra="ABC\000\000"}} = port_please_v2("foo"),
+ ok = close(Sock),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-names_stdout(doc) ->
- ["Test that epmd -names prints registered nodes to stdout"];
-names_stdout(suite) ->
- [];
+%% Test that epmd -names prints registered nodes to stdout
names_stdout(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = register_node("foobar"),
- ?line ok = epmdrun("-names"),
- ?line {ok, Data} = receive {_Port, {data, D}} -> {ok, D}
- after 10000 -> {error, timeout}
- end,
- ?line {match,_} = re:run(Data, "^epmd: up and running", [multiline]),
- ?line {match,_} = re:run(Data, "^name foobar at port", [multiline]),
- ?line ok = close(Sock),
+ ok = epmdrun(),
+ {ok,Sock} = register_node("foobar"),
+ ok = epmdrun("-names"),
+ {ok, Data} = receive {_Port, {data, D}} -> {ok, D}
+ after 10000 -> {error, timeout}
+ end,
+ {match,_} = re:run(Data, "^epmd: up and running", [multiline]),
+ {match,_} = re:run(Data, "^name foobar at port", [multiline]),
+ ok = close(Sock),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-buffer_overrun_1(suite) ->
- [];
-buffer_overrun_1(doc) ->
- ["Test security vulnerability in fake extra lengths in alive2_req"];
+%% Test security vulnerability in fake extra lengths in alive2_req
buffer_overrun_1(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line true = alltrue([hostile(N) || N <- lists:seq(1,10000)]),
+ ok = epmdrun(),
+ true = alltrue([hostile(N) || N <- lists:seq(1,10000)]),
ok.
-buffer_overrun_2(suite) ->
- [];
-buffer_overrun_2(doc) ->
- ["Test security vulnerability in fake extra lengths in alive2_req"];
+
+%% Test security vulnerability in fake extra lengths in alive2_req
buffer_overrun_2(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line [false | Rest] = [hostile2(N) || N <- lists:seq(255*4,10000)],
- ?line true = alltrue(Rest),
+ ok = epmdrun(),
+ [false | Rest] = [hostile2(N) || N <- lists:seq(255*4,10000)],
+ true = alltrue(Rest),
ok.
hostile(N) ->
try
- Bin= <<$x:8,4747:16,$M:8,0:8,5:16,5:16,5:16,"gurka",N:16>>,
- S = size(Bin),
- {ok,E}=connect_sturdy(),
- gen_tcp:send(E,[<<S:16>>,Bin]),
- closed = recv(E,1),
- gen_tcp:close(E),
- true
+ Bin= <<$x:8,4747:16,$M:8,0:8,5:16,5:16,5:16,"gurka",N:16>>,
+ S = size(Bin),
+ {ok,E}=connect_sturdy(),
+ gen_tcp:send(E,[<<S:16>>,Bin]),
+ closed = recv(E,1),
+ gen_tcp:close(E),
+ true
catch
- _:_ ->
- false
+ _:_ ->
+ false
end.
hostile2(N) ->
try
- B2 = list_to_binary(lists:duplicate(N,255)),
- Bin= <<$x:8,4747:16,$M:8,0:8,5:16,5:16,5:16,"gurka",N:16,B2/binary>>,
- S = size(Bin),
- {ok,E}=connect_sturdy(),
- gen_tcp:send(E,[<<S:16>>,Bin]),
- Z = recv(E,2),
- gen_tcp:close(E),
- (Z =:= closed) or (Z =:= {ok, [$y,1]})
+ B2 = list_to_binary(lists:duplicate(N,255)),
+ Bin= <<$x:8,4747:16,$M:8,0:8,5:16,5:16,5:16,"gurka",N:16,B2/binary>>,
+ S = size(Bin),
+ {ok,E}=connect_sturdy(),
+ gen_tcp:send(E,[<<S:16>>,Bin]),
+ Z = recv(E,2),
+ gen_tcp:close(E),
+ (Z =:= closed) or (Z =:= {ok, [$y,1]})
catch
- _A:_B ->
- false
+ _A:_B ->
+ false
end.
alltrue([]) ->
@@ -857,134 +736,124 @@ alltrue([true|T]) ->
alltrue([_|_]) ->
false.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-no_nonlocal_register(suite) ->
- [];
-no_nonlocal_register(doc) ->
- ["Ensure that we cannot register throug a nonlocal connection"];
+
+%% Ensure that we cannot register throug a nonlocal connection
no_nonlocal_register(Config) when is_list(Config) ->
- ?line case {os:find_executable("ssh"),ct:get_config(ssh_proxy_host)} of
- {SSH,Name} when is_list(Name), is_list(SSH) ->
- do_no_nonlocal_register(Config,Name);
- {false,_} ->
- {skip, "No ssh command found to create proxy"};
- _ ->
- {skip, "No ssh_proxy_host configured in ts.config"}
- end.
+ case {os:find_executable("ssh"),ct:get_config(ssh_proxy_host)} of
+ {SSH,Name} when is_list(Name), is_list(SSH) ->
+ do_no_nonlocal_register(Config,Name);
+ {false,_} ->
+ {skip, "No ssh command found to create proxy"};
+ _ ->
+ {skip, "No ssh_proxy_host configured in ts.config"}
+ end.
do_no_nonlocal_register(Config,SSHHost) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line ProxyPort = proxy_port(),
- ?line ok = ssh_proxy(SSHHost,ProxyPort),
+ ok = epmdrun(),
+ ProxyPort = proxy_port(),
+ ok = ssh_proxy(SSHHost,ProxyPort),
Res = try
- ?line Name = "gurka_"
- %++
- %integer_to_list(A1)++"_"++
- %integer_to_list(A2)++"_"++
- %integer_to_list(A3)++"_"++
- %integer_to_list(A4)
- ,
- ?line Bname = list_to_binary(Name),
- ?line NameS = byte_size(Bname),
- ?line Bin= <<$x:8,4747:16,$M:8,0:8,5:16,
- 5:16,NameS:16,Bname/binary,
- 0:16>>,
- ?line S = size(Bin),
- ?line {ok, E} = connect("localhost",ProxyPort,passive),
- ?line gen_tcp:send(E,[<<S:16>>,Bin]),
- ?line closed = recv(E,1),
- ?line gen_tcp:close(E),
- true
- catch
- _:_ ->
- false
- end,
+ Name = "gurka_"
+ %++
+ %integer_to_list(A1)++"_"++
+ %integer_to_list(A2)++"_"++
+ %integer_to_list(A3)++"_"++
+ %integer_to_list(A4)
+ ,
+ Bname = list_to_binary(Name),
+ NameS = byte_size(Bname),
+ Bin= <<$x:8,4747:16,$M:8,0:8,5:16,
+ 5:16,NameS:16,Bname/binary,
+ 0:16>>,
+ S = size(Bin),
+ {ok, E} = connect("localhost",ProxyPort,passive),
+ gen_tcp:send(E,[<<S:16>>,Bin]),
+ closed = recv(E,1),
+ gen_tcp:close(E),
+ true
+ catch
+ _:_ ->
+ false
+ end,
%erlang:display(Res),
true = Res,
ok.
-no_nonlocal_kill(suite) ->
- [];
-no_nonlocal_kill(doc) ->
- ["Ensure that we cannot kill through nonlocal connection"];
+%% Ensure that we cannot kill through nonlocal connection
no_nonlocal_kill(Config) when is_list(Config) ->
- ?line case {os:find_executable("ssh"),ct:get_config(ssh_proxy_host)} of
- {SSH,Name} when is_list(Name), is_list(SSH) ->
- do_no_nonlocal_kill(Config,Name);
- {false,_} ->
- {skip, "No ssh command found to create proxy"};
- _ ->
- {skip, "No ssh_proxy_host configured in ts.config"}
- end.
+ case {os:find_executable("ssh"),ct:get_config(ssh_proxy_host)} of
+ {SSH,Name} when is_list(Name), is_list(SSH) ->
+ do_no_nonlocal_kill(Config,Name);
+ {false,_} ->
+ {skip, "No ssh command found to create proxy"};
+ _ ->
+ {skip, "No ssh_proxy_host configured in ts.config"}
+ end.
do_no_nonlocal_kill(Config,SSHHost) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line ProxyPort = proxy_port(),
- ?line ok = ssh_proxy(SSHHost,ProxyPort),
+ ok = epmdrun(),
+ ProxyPort = proxy_port(),
+ ok = ssh_proxy(SSHHost,ProxyPort),
Res = try
- {ok, E} = connect("localhost",ProxyPort,passive),
- M = [?EPMD_KILL_REQ],
- send(E, [size16(M), M]),
- closed = recv(E,2),
- gen_tcp:close(E),
- sleep(?MEDIUM_PAUSE),
- {ok, E2} = connect("localhost",ProxyPort,passive),
- gen_tcp:close(E2),
- true
- catch
- _:_ ->
- false
- end,
+ {ok, E} = connect("localhost",ProxyPort,passive),
+ M = [?EPMD_KILL_REQ],
+ send(E, [size16(M), M]),
+ closed = recv(E,2),
+ gen_tcp:close(E),
+ sleep(?MEDIUM_PAUSE),
+ {ok, E2} = connect("localhost",ProxyPort,passive),
+ gen_tcp:close(E2),
+ true
+ catch
+ _:_ ->
+ false
+ end,
%erlang:display(Res),
true = Res,
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-no_live_killing(doc) ->
- ["Dont allow killing with live nodes or any unregistering w/o -relaxed_command_check"];
-no_live_killing(suite) ->
- [];
+
+%% Dont allow killing with live nodes or any unregistering w/o -relaxed_command_check
no_live_killing(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,RSock} = register_node("foo"),
- ?line {ok,Sock} = connect(),
- ?line M = [?EPMD_KILL_REQ],
- ?line ok = send(Sock,[size16(M),M]),
- ?line {ok,"NO"} = recv(Sock,2),
- ?line close(Sock),
- ?line {ok,Sock2} = connect(),
- ?line M2 = [?EPMD_STOP_REQ,"foo"],
- ?line ok = send(Sock2,[size16(M2),M2]),
- ?line closed = recv(Sock2,1),
- ?line close(Sock2),
- ?line close(RSock),
- ?line sleep(?MEDIUM_PAUSE),
- ?line {ok,Sock3} = connect(),
- ?line M3 = [?EPMD_KILL_REQ],
- ?line ok = send(Sock3,[size16(M3),M3]),
- ?line {ok,"OK"} = recv(Sock3,2),
- ?line close(Sock3),
+ ok = epmdrun(),
+ {ok,RSock} = register_node("foo"),
+ {ok,Sock} = connect(),
+ M = [?EPMD_KILL_REQ],
+ ok = send(Sock,[size16(M),M]),
+ {ok,"NO"} = recv(Sock,2),
+ close(Sock),
+ {ok,Sock2} = connect(),
+ M2 = [?EPMD_STOP_REQ,"foo"],
+ ok = send(Sock2,[size16(M2),M2]),
+ closed = recv(Sock2,1),
+ close(Sock2),
+ close(RSock),
+ sleep(?MEDIUM_PAUSE),
+ {ok,Sock3} = connect(),
+ M3 = [?EPMD_KILL_REQ],
+ ok = send(Sock3,[size16(M3),M3]),
+ {ok,"OK"} = recv(Sock3,2),
+ close(Sock3),
ok.
-socket_reset_before_alive2_reply_is_written(doc) ->
- ["Check for regression - don't make zombie from node which "
- "sends TCP RST at wrong time"];
-socket_reset_before_alive2_reply_is_written(suite) ->
- [];
+%% Check for regression - don't make zombie from node which
+%% sends TCP RST at wrong time
socket_reset_before_alive2_reply_is_written(Config) when is_list(Config) ->
%% - delay_write for easier triggering of race condition
%% - relaxed_command_check for gracefull shutdown of epmd even if there
%% is stuck node.
- ?line ok = epmdrun("-delay_write 1 -relaxed_command_check"),
+ ok = epmdrun("-delay_write 1 -relaxed_command_check"),
%% We can't use send_req/1 directly as we want to do inet:setopts/2
%% on our socket.
- ?line {ok, Sock} = connect(),
+ {ok, Sock} = connect(),
%% Issuing close/1 on such socket will result in immediate RST packet.
- ?line ok = inet:setopts(Sock, [{linger, {true, 0}}]),
+ ok = inet:setopts(Sock, [{linger, {true, 0}}]),
Req = alive2_req(4711, 77, 0, 5, 5, "test", []),
- ?line ok = send(Sock, [size16(Req), Req]),
+ ok = send(Sock, [size16(Req), Req]),
timer:sleep(500), %% Wait for the first 1/2 of delay_write before closing
- ?line ok = close(Sock),
+ ok = close(Sock),
timer:sleep(500 + ?SHORT_PAUSE), %% Wait for the other 1/2 of delay_write
@@ -992,11 +861,11 @@ socket_reset_before_alive2_reply_is_written(Config) when is_list(Config) ->
%% Should be removed when this is issue is fixed there.
timer:sleep(1000),
- ?line {ok, SockForNames} = connect_active(),
+ {ok, SockForNames} = connect_active(),
%% And there should be no stuck nodes
- ?line {ok, []} = do_get_names(SockForNames),
- ?line ok = close(SockForNames),
+ {ok, []} = do_get_names(SockForNames),
+ ok = close(SockForNames),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1005,14 +874,14 @@ socket_reset_before_alive2_reply_is_written(Config) when is_list(Config) ->
cleanup() ->
sleep(?MEDIUM_PAUSE),
case connect() of
- {ok,Sock} ->
- M = [?EPMD_KILL_REQ],
- send(Sock, [size16(M), M]),
- recv(Sock,length("OK")),
- close(Sock),
- sleep(?MEDIUM_PAUSE);
- _ ->
- true
+ {ok,Sock} ->
+ M = [?EPMD_KILL_REQ],
+ send(Sock, [size16(M), M]),
+ recv(Sock,length("OK")),
+ close(Sock),
+ sleep(?MEDIUM_PAUSE);
+ _ ->
+ true
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1022,11 +891,11 @@ proxy_port() ->
?PORT+1.
ssh_proxy(SSHHost,ProxyPort) ->
- ?line Host = lists:nth(2,string:tokens(atom_to_list(node()),"@")),
+ Host = lists:nth(2,string:tokens(atom_to_list(node()),"@")),
% Requires proxy to be a unix host with the command 'read' accessible
- ?line osrun("ssh -L "++integer_to_list(ProxyPort)++":"++Host++":"
- ++integer_to_list(?PORT)++" "++SSHHost++" read").
-
+ osrun("ssh -L "++integer_to_list(ProxyPort)++":"++Host++":"
+ ++integer_to_list(?PORT)++" "++SSHHost++" read").
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1036,21 +905,21 @@ epmdrun() ->
epmdrun([]).
epmdrun(Args) ->
case os:find_executable(epmd) of
- false ->
- {error, {could_not_find_epmd_in_path}};
- Path ->
- epmdrun(Path,Args)
+ false ->
+ {error, {could_not_find_epmd_in_path}};
+ Path ->
+ epmdrun(Path,Args)
end.
epmdrun(Epmd,Args0) ->
- %% test_server:format("epmdrun() => Epmd = ~p",[Epmd]),
+ %% test_server:format("epmdrun() => Epmd = ~p",[Epmd]),
Args = case Args0 of
- [] ->
- [];
- O ->
- " "++O
- end,
- osrun("\"" ++ Epmd ++ "\"" ++ " " ?EPMDARGS " -port " ++ integer_to_list(?PORT) ++ Args).
+ [] ->
+ [];
+ O ->
+ " "++O
+ end,
+ osrun("\"" ++ Epmd ++ "\"" ++ " " ?EPMDARGS " -port " ++ integer_to_list(?PORT) ++ Args).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1059,7 +928,7 @@ epmdrun(Epmd,Args0) ->
osrun(Cmd) ->
_ = open_port({spawn, Cmd}, []),
ok.
-
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Wrappers of TCP functions
@@ -1084,16 +953,16 @@ connect(Addr, Port, Mode) ->
connect(Addr, Port, Mode, ?CONN_SLEEP, ?CONN_RETRY).
connect(Addr, Port, Mode, Sleep, Retry) ->
case connect_repeat(Addr, Retry, Port, Mode, Sleep) of
- {ok,Sock} ->
- {ok,Sock};
- {error,timeout} ->
- timeout;
- {error,Reason} ->
- test_server:format("connect: error: ~w~n",[Reason]),
- error;
- Any ->
- test_server:format("connect: unknown message: ~w~n",[Any]),
- exit(1)
+ {ok,Sock} ->
+ {ok,Sock};
+ {error,timeout} ->
+ timeout;
+ {error,Reason} ->
+ test_server:format("connect: error: ~w~n",[Reason]),
+ error;
+ Any ->
+ test_server:format("connect: unknown message: ~w~n",[Any]),
+ exit(1)
end.
@@ -1104,33 +973,33 @@ connect_repeat(Addr, 1, Port, Mode, _Sleep) ->
connect_mode(Addr,Port, Mode);
connect_repeat(Addr,Retry, Port, Mode, Sleep) ->
case connect_mode(Addr,Port, Mode) of
- {ok,Sock} ->
- {ok,Sock};
- {error,Reason} ->
- test_server:format("connect: error: ~w~n",[Reason]),
- timer:sleep(Sleep),
- connect_repeat(Addr, Retry - 1, Port, Mode, Sleep);
- Any ->
- test_server:format("connect: unknown message: ~w~n",[Any]),
- exit(1)
+ {ok,Sock} ->
+ {ok,Sock};
+ {error,Reason} ->
+ test_server:format("connect: error: ~w~n",[Reason]),
+ timer:sleep(Sleep),
+ connect_repeat(Addr, Retry - 1, Port, Mode, Sleep);
+ Any ->
+ test_server:format("connect: unknown message: ~w~n",[Any]),
+ exit(1)
end.
connect_mode(Addr,Port, active) ->
gen_tcp:connect(Addr, Port, [{packet, 0}], ?CONN_TIMEOUT);
connect_mode(Addr, Port, passive) ->
gen_tcp:connect(Addr, Port, [{packet, 0}, {active, false}],
- ?CONN_TIMEOUT).
+ ?CONN_TIMEOUT).
close(Sock) ->
case gen_tcp:close(Sock) of
- {error,_} ->
- error;
- ok ->
- ok;
- Any ->
- test_server:format("unknown message: ~w~n",[Any]),
- exit(1)
+ {error,_} ->
+ error;
+ ok ->
+ ok;
+ Any ->
+ test_server:format("unknown message: ~w~n",[Any]),
+ exit(1)
end.
recv(Sock, Len) ->
@@ -1138,19 +1007,19 @@ recv(Sock, Len) ->
recv(Sock, Len, Timeout) ->
case gen_tcp:recv(Sock, Len, Timeout) of
- {ok,[]} -> % Should not be the case
- recv(Sock, 1, 1); % any longer
- {ok,Data} ->
- {ok,Data};
- {error,timeout} ->
- timeout;
- {error,closed} ->
- closed;
- {error,_}=Error ->
- Error;
- Any ->
- test_server:format("unknown message: ~w~n",[Any]),
- exit(1)
+ {ok,[]} -> % Should not be the case
+ recv(Sock, 1, 1); % any longer
+ {ok,Data} ->
+ {ok,Data};
+ {error,timeout} ->
+ timeout;
+ {error,closed} ->
+ closed;
+ {error,_}=Error ->
+ Error;
+ Any ->
+ test_server:format("unknown message: ~w~n",[Any]),
+ exit(1)
end.
%% Send data to socket. The list can be non flat and contain
@@ -1159,12 +1028,12 @@ recv(Sock, Len, Timeout) ->
send(Sock, SendSpec) ->
case send(SendSpec, [], Sock) of
- {ok,[]} ->
- ok;
- {ok,RevBytes} ->
- send_direct(Sock, lists:reverse(RevBytes));
- Any ->
- Any
+ {ok,[]} ->
+ ok;
+ {ok,RevBytes} ->
+ send_direct(Sock, lists:reverse(RevBytes));
+ Any ->
+ Any
end.
@@ -1179,54 +1048,54 @@ send([Byte | Spec], RevBytes, Sock) when is_integer(Byte) ->
send(Spec, [Byte | RevBytes], Sock);
send([List | Spec], RevBytes, Sock) when is_list(List) ->
case send(List, RevBytes, Sock) of
- {ok,Left} ->
- send(Spec, Left, Sock);
- Other ->
- Other
+ {ok,Left} ->
+ send(Spec, Left, Sock);
+ Other ->
+ Other
end;
send([d | Spec], RevBytes, Sock) ->
send([{d,1000} | Spec], RevBytes, Sock);
send([{d,S} | Spec], RevBytes, Sock) ->
case send_direct(Sock, lists:reverse(RevBytes)) of
- ok ->
- timer:sleep(S),
- send(Spec, [], Sock);
- Any ->
- Any
+ ok ->
+ timer:sleep(S),
+ send(Spec, [], Sock);
+ Any ->
+ Any
end.
%%%%
send_direct(Sock, Bytes) ->
case gen_tcp:send(Sock, Bytes) of
- ok ->
- ok;
- {error, closed} ->
- closed;
- {error, _Reason} ->
- error;
- Any ->
- test_server:format("unknown message: ~w~n",[Any]),
- Any
+ ok ->
+ ok;
+ {error, closed} ->
+ closed;
+ {error, _Reason} ->
+ error;
+ Any ->
+ test_server:format("unknown message: ~w~n",[Any]),
+ Any
end.
send_req(Req) ->
send_req(Req, "localhost").
send_req(Req, Addr) ->
case connect(Addr) of
- {ok,Sock} ->
- case send(Sock, [size16(Req), Req]) of
- ok ->
- {ok,Sock};
- Other ->
- test_server:format("Failed to send ~w on sock ~w: ~w~n",
- [Req,Sock,Other]),
- error
- end;
- Other ->
- test_server:format("Connect failed when sending ~w: ~p~n",
- [Req, Other]),
- error
+ {ok,Sock} ->
+ case send(Sock, [size16(Req), Req]) of
+ ok ->
+ {ok,Sock};
+ Other ->
+ test_server:format("Failed to send ~w on sock ~w: ~w~n",
+ [Req,Sock,Other]),
+ error
+ end;
+ Other ->
+ test_server:format("Connect failed when sending ~w: ~p~n",
+ [Req, Other]),
+ error
end.
recv_until_sock_closes(Sock) ->
@@ -1234,12 +1103,12 @@ recv_until_sock_closes(Sock) ->
recv_until_sock_closes_2(Sock,AccData) ->
case recv(Sock,0) of
- {ok,Data} ->
- recv_until_sock_closes_2(Sock,AccData++Data);
- closed ->
- {ok,AccData};
- Other ->
- Other
+ {ok,Data} ->
+ recv_until_sock_closes_2(Sock,AccData++Data);
+ closed ->
+ {ok,AccData};
+ Other ->
+ Other
end.
sleep(MilliSeconds) ->
@@ -1261,7 +1130,7 @@ flat_count([H|T], N) when is_list(H) ->
flat_count([_|T], N) ->
flat_count(T, N);
flat_count([], N) -> N.
-
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/erts/etc/common/erlexec.c b/erts/etc/common/erlexec.c
index 42da05b1f7..2b2e0e480a 100644
--- a/erts/etc/common/erlexec.c
+++ b/erts/etc/common/erlexec.c
@@ -195,6 +195,7 @@ static char *plusz_val_switches[] = {
#endif
void usage(const char *switchname);
+static void usage_format(char *format, ...);
void start_epmd(char *epmd);
void error(char* format, ...);
@@ -795,6 +796,24 @@ int main(int argc, char **argv)
get_start_erl_data((char *) NULL);
}
#endif
+ else if (strcmp(argv[i], "-start_epmd") == 0) {
+ if (i+1 >= argc)
+ usage("-start_epmd");
+
+ if (strcmp(argv[i+1], "true") == 0) {
+ /* The default */
+ no_epmd = 0;
+ }
+ else if (strcmp(argv[i+1], "false") == 0) {
+ no_epmd = 1;
+ }
+ else
+ usage_format("Expected boolean argument for \'-start_epmd\'.\n");
+
+ add_arg(argv[i]);
+ add_arg(argv[i+1]);
+ i++;
+ }
else
add_arg(argv[i]);
@@ -1173,7 +1192,7 @@ usage_aux(void)
"]"
#endif
"] "
- "[-make] [-man [manopts] MANPAGE] [-x] [-emu_args] "
+ "[-make] [-man [manopts] MANPAGE] [-x] [-emu_args] [-start_epmd BOOLEAN] "
"[-args_file FILENAME] [+A THREADS] [+a SIZE] [+B[c|d|i]] [+c [BOOLEAN]] "
"[+C MODE] [+h HEAP_SIZE_OPTION] [+K BOOLEAN] "
"[+l] [+M<SUBSWITCH> <ARGUMENT>] [+P MAX_PROCS] [+Q MAX_PORTS] "
diff --git a/erts/etc/common/heart.c b/erts/etc/common/heart.c
index e931ae4641..d67b997d6d 100644
--- a/erts/etc/common/heart.c
+++ b/erts/etc/common/heart.c
@@ -119,6 +119,8 @@
#define HEART_COMMAND_ENV "HEART_COMMAND"
#define ERL_CRASH_DUMP_SECONDS_ENV "ERL_CRASH_DUMP_SECONDS"
#define HEART_KILL_SIGNAL "HEART_KILL_SIGNAL"
+#define HEART_NO_KILL "HEART_NO_KILL"
+
#define MSG_HDR_SIZE (2)
#define MSG_HDR_PLUS_OP_SIZE (3)
@@ -524,6 +526,12 @@ static void
kill_old_erlang(void){
HANDLE erlh;
DWORD exit_code;
+ char* envvar = NULL;
+
+ envvar = get_env(HEART_NO_KILL);
+ if (envvar && strcmp(envvar, "TRUE") == 0)
+ return;
+
if(heart_beat_kill_pid != 0){
if((erlh = OpenProcess(PROCESS_TERMINATE |
SYNCHRONIZE |
@@ -555,10 +563,14 @@ kill_old_erlang(void){
pid_t pid;
int i, res;
int sig = SIGKILL;
- char *sigenv = NULL;
+ char *envvar = NULL;
+
+ envvar = get_env(HEART_NO_KILL);
+ if (envvar && strcmp(envvar, "TRUE") == 0)
+ return;
- sigenv = get_env(HEART_KILL_SIGNAL);
- if (sigenv && strcmp(sigenv, "SIGABRT") == 0) {
+ envvar = get_env(HEART_KILL_SIGNAL);
+ if (envvar && strcmp(envvar, "SIGABRT") == 0) {
print_error("kill signal SIGABRT requested");
sig = SIGABRT;
}
diff --git a/erts/etc/unix/etp-commands.in b/erts/etc/unix/etp-commands.in
index 4dc24d68b4..e2bf302cca 100644
--- a/erts/etc/unix/etp-commands.in
+++ b/erts/etc/unix/etp-commands.in
@@ -1657,8 +1657,29 @@ end
define etp-proc-state-int
# Args: int
#
- if ($arg0 & 0xff000000)
- printf "GARBAGE | "
+ if ($arg0 & 0x80000000)
+ printf "GARBAGE<0x80000000> | "
+ end
+ if ($arg0 & 0x40000000)
+ printf "dirty-running-sys | "
+ end
+ if ($arg0 & 0x20000000)
+ printf "dirty-running | "
+ end
+ if ($arg0 & 0x10000000)
+ printf "dirty-active-sys | "
+ end
+ if ($arg0 & 0x8000000)
+ printf "dirty-io-proc | "
+ end
+ if ($arg0 & 0x4000000)
+ printf "dirty-cpu-proc | "
+ end
+ if ($arg0 & 0x2000000)
+ printf "on-heap-msgq | "
+ end
+ if ($arg0 & 0x1000000)
+ printf "off-heap-msgq | "
end
if ($arg0 & 0x800000)
printf "delayed-sys | "
@@ -1786,52 +1807,53 @@ define etp-process-info
# Args: Process*
#
printf " Pid: "
- etp-1 ($arg0)->common.id
+ set $etp_proc = ((Process*)$arg0)
+ etp-1 $etp_proc->common.id
printf "\n State: "
- etp-proc-state $arg0
+ etp-proc-state $etp_proc
if $proxy_process != 0
- printf " Pointer: (Process *) %p\n", $arg0
+ printf " Pointer: (Process *) %p\n", $etp_proc
printf " *** PROXY process struct *** refer to: \n"
- etp-pid2proc-1 $arg0->common.id
+ etp-pid2proc-1 $etp_proc->common.id
etp-process-info $proc
else
- if (*(((Uint32 *) &(((Process *) $arg0)->state))) & 0x4) == 0
- if ($arg0->common.u.alive.reg)
+ if (*(((Uint32 *) &($etp_proc->state))) & 0x4) == 0
+ if ($etp_proc->common.u.alive.reg)
printf " Registered name: "
- etp-1 $arg0->common.u.alive.reg->name
+ etp-1 $etp_proc->common.u.alive.reg->name
printf "\n"
end
end
- if ($arg0->current)
+ if ($etp_proc->current)
printf " Current function: "
- etp-1 $arg0->current[0]
+ etp-1 $etp_proc->current[0]
printf ":"
- etp-1 $arg0->current[1]
- printf "/%d\n", $arg0->current[2]
+ etp-1 $etp_proc->current[1]
+ printf "/%d\n", $etp_proc->current[2]
end
- if ($arg0->cp)
+ if ($etp_proc->cp)
printf " CP: "
- etp-cp-1 $arg0->cp
+ etp-cp-1 $etp_proc->cp
printf "\n"
end
- if ($arg0->i)
+ if ($etp_proc->i)
printf " I: "
- etp-cp-1 $arg0->i
+ etp-cp-1 $etp_proc->i
printf "\n"
end
- printf " Heap size: %ld\n", $arg0->heap_sz
- if ($arg0->old_heap)
- printf " Old-heap size: %ld\n", $arg0->old_hend - $arg0->old_heap
+ printf " Heap size: %ld\n", $etp_proc->heap_sz
+ if ($etp_proc->old_heap)
+ printf " Old-heap size: %ld\n", $etp_proc->old_hend - $etp_proc->old_heap
end
- printf " Mbuf size: %ld\n", $arg0->mbuf_sz
+ printf " Mbuf size: %ld\n", $etp_proc->mbuf_sz
if (etp_smp_compiled)
- printf " Msgq len: %ld (inner=%ld, outer=%ld)\n", ($arg0->msg.len + $arg0->msg_inq.len), $arg0->msg.len, $arg0->msg_inq.len
+ printf " Msgq len: %ld (inner=%ld, outer=%ld)\n", ($etp_proc->msg.len + $etp_proc->msg_inq.len), $etp_proc->msg.len, $etp_proc->msg_inq.len
else
- printf " Msgq len: %d\n", $arg0->msg.len
+ printf " Msgq len: %d\n", $etp_proc->msg.len
end
printf " Parent: "
- etp-1 $arg0->parent
- printf "\n Pointer: (Process *) %p\n", $arg0
+ etp-1 $etp_proc->parent
+ printf "\n Pointer: (Process *) %p\n", $etp_proc
end
end
@@ -1897,57 +1919,58 @@ end
define etp-process-memory-info
# Args: Process*
#
- if ((*(((Uint32 *) &(((Process *) $arg0)->state)))) & 0x400000)
+ set $etp_pmem_proc = ((Process *) $arg0)
+ if ((*(((Uint32 *) &($etp_pmem_proc->state)))) & 0x400000)
set $proxy_process = 1
else
set $proxy_process = 0
end
printf " "
- etp-1 $arg0->common.id
- printf ": (Process *) %p ", $arg0
+ etp-1 $etp_pmem_proc->common.id
+ printf ": (Process *) %p ", $etp_pmem_proc
if $proxy_process != 0
- printf "(Process *) %p ", $arg0
+ printf "(Process *) %p ", $etp_pmem_proc
printf " *** PROXY process struct *** refer to next: \n"
- etp-pid2proc-1 $arg0->common.id
+ etp-pid2proc-1 $etp_pmem_proc->common.id
printf " -"
etp-process-memory-info $proc
else
- printf " [Heap: %5ld", $arg0->heap_sz
- if ($arg0->old_heap)
- printf " | %5ld", $arg0->old_hend - $arg0->old_heap
+ printf " [Heap: %5ld", $etp_pmem_proc->heap_sz
+ if ($etp_pmem_proc->old_heap)
+ printf " | %5ld", $etp_pmem_proc->old_hend - $etp_pmem_proc->old_heap
else
printf " | none "
end
- printf "] [Mbuf: %5ld", $arg0->mbuf_sz
+ printf "] [Mbuf: %5ld", $etp_pmem_proc->mbuf_sz
if (etp_smp_compiled)
- printf " | %3ld (%3ld | %3ld)", ($arg0->msg.len + $arg0->msg_inq.len), $arg0->msg.len, $arg0->msg_inq.len
+ printf " | %3ld (%3ld | %3ld)", ($etp_pmem_proc->msg.len + $etp_pmem_proc->msg_inq.len), $etp_pmem_proc->msg.len, $etp_pmem_proc->msg_inq.len
else
- printf " | %3ld", $arg0->msg.len
+ printf " | %3ld", $etp_pmem_proc->msg.len
end
printf "] "
- if ($arg0->i)
+ if ($etp_pmem_proc->i)
printf " I: "
- etp-cp-1 $arg0->i
+ etp-cp-1 $etp_pmem_proc->i
printf " "
end
- if ($arg0->current)
- etp-1 $arg0->current[0]
+ if ($etp_pmem_proc->current)
+ etp-1 $etp_pmem_proc->current[0]
printf ":"
- etp-1 $arg0->current[1]
- printf "/%d ", $arg0->current[2]
+ etp-1 $etp_pmem_proc->current[1]
+ printf "/%d ", $etp_pmem_proc->current[2]
end
- if (*(((Uint32 *) &(((Process *) $arg0)->state))) & 0x4) == 0
- if ($arg0->common.u.alive.reg)
- etp-1 $arg0->common.u.alive.reg->name
+ if (*(((Uint32 *) &(((Process *) $etp_pmem_proc)->state))) & 0x4) == 0
+ if ($etp_pmem_proc->common.u.alive.reg)
+ etp-1 $etp_pmem_proc->common.u.alive.reg->name
printf " "
end
end
- if ($arg0->cp)
+ if ($etp_pmem_proc->cp)
printf " CP: "
- etp-cp-1 $arg0->cp
+ etp-cp-1 $etp_pmem_proc->cp
printf " "
end
printf "\n"
@@ -2145,23 +2168,24 @@ define etp-port-info
# Args: Port*
#
printf " Port: "
- etp-1 $arg0->common.id
- printf "\n Name: %s\n", $arg0->name
+ set $etp_pinfo_port = ((Port*)$arg0)
+ etp-1 $etp_pinfo_port->common.id
+ printf "\n Name: %s\n", $etp_pinfo_port->name
printf " State:"
- etp-port-state $arg0
+ etp-port-state $etp_pinfo_port
printf " Scheduler flags:"
- etp-port-sched-flags $arg0
- if (*(((Uint32 *) &(((Port *) $arg0)->state))) & 0x5C00) == 0
- if ($arg0->common.u.alive.reg)
+ etp-port-sched-flags $etp_pinfo_port
+ if (*(((Uint32 *) &($etp_pinfo_port->state))) & 0x5C00) == 0
+ if ($etp_pinfo_port->common.u.alive.reg)
printf " Registered name: "
- etp-1 $arg0->common.u.alive.reg->name
+ etp-1 $etp_pinfo_port->common.u.alive.reg->name
printf "\n"
end
end
printf " Connected: "
- set $connected = *(((Eterm *) &(((Port *) $arg0)->connected)))
+ set $connected = *(((Eterm *) &(((Port *) $etp_pinfo_port)->connected)))
etp-1 $connected
- printf "\n Pointer: (Port *) %p\n", $arg0
+ printf "\n Pointer: (Port *) %p\n", $etp_pinfo_port
end
document etp-port-info
@@ -3557,9 +3581,24 @@ document etp-block
%---------------------------------------------------------------------------
end
+define etp-smp-atomic
+ if (etp_smp_compiled)
+ set $arg1 = (($arg0).counter)
+ else
+ set $arg1 = ($arg0)
+ end
+end
+
+document etp-smp-atomic
+%---------------------------------------------------------------------------
+% Read an erts_smp_atomic_t value from $arg0 into $arg1
+%---------------------------------------------------------------------------
+end
+
define etp-carrier-blocks
set $etp_crr = (Carrier_t*) $arg0
- set $etp_alc = (Allctr_t*)($etp_crr->allctr.counter & ~7)
+ etp-smp-atomic $etp_crr->allctr $etp_alc
+ set $etp_alc = (Allctr_t*)($etp_alc & ~7)
set $etp_crr_end = ((char*)$etp_crr + ($etp_crr->chdr & ~7) - (sizeof(void*) & ~8))
set $etp_blk = (Block_t*) ((char*)$etp_crr + $etp_alc->mbc_header_size)
set $etp_prev_blk = 0
@@ -3673,6 +3712,26 @@ document etp-address-to-beam-opcode
%---------------------------------------------------------------------------
end
+define etp-compile-debug
+ shell (cd $ERL_TOP && make emulator FLAVOR=smp TYPE=debug)
+end
+
+document etp-compile-debug
+%---------------------------------------------------------------------------
+% Re-compile the debug erlang emulator
+%---------------------------------------------------------------------------
+end
+
+define etp-compile
+ shell (cd $ERL_TOP && make emulator)
+end
+
+document etp-compile
+%---------------------------------------------------------------------------
+% Re-compile the erlang emulator
+%---------------------------------------------------------------------------
+end
+
############################################################################
# Toolbox parameter handling
diff --git a/erts/etc/unix/format_man_pages b/erts/etc/unix/format_man_pages
index 54f2d90c28..0afff13571 100644
--- a/erts/etc/unix/format_man_pages
+++ b/erts/etc/unix/format_man_pages
@@ -107,7 +107,7 @@ case :"$TARGET" in
if [ -f $file ]; then
name=`echo $file | sed 's/\.[^.]*$//'`
sec=`echo $file | sed 's/.*\.//'`
- /usr/bin/groff -Tascii -mandoc $ERL_ROOT/man/man$sec/$file \
+ /usr/bin/groff -Tutf8 -mandoc $ERL_ROOT/man/man$sec/$file \
> $ERL_ROOT/man/cat$sec/$file
fi
done
diff --git a/erts/etc/unix/run_erl.c b/erts/etc/unix/run_erl.c
index 30210ac172..6a92e18648 100644
--- a/erts/etc/unix/run_erl.c
+++ b/erts/etc/unix/run_erl.c
@@ -240,6 +240,7 @@ int main(int argc, char **argv)
int off_argv;
int calculated_pipename = 0;
int highest_pipe_num = 0;
+ int sleepy_child = 0;
program_name = argv[0];
@@ -250,6 +251,11 @@ int main(int argc, char **argv)
init_outbuf();
+ if (!strcmp(argv[1],"-sleepy-child")) { /* For test purpose only */
+ sleepy_child = 1;
+ ++i;
+ }
+
if (!strcmp(argv[1],"-daemon")) {
daemon_init();
++i;
@@ -392,6 +398,9 @@ int main(int argc, char **argv)
exit(1);
}
if (childpid == 0) {
+ if (sleepy_child)
+ sleep(1);
+
/* Child */
sf_close(mfd);
/* disassociate from control terminal */
@@ -904,20 +913,32 @@ static int create_fifo(char *name, int perm)
* Find a master device, open and return fd and slave device name.
*/
+#ifdef HAVE_WORKING_POSIX_OPENPT
+ /*
+ * Use openpty() on OpenBSD even if we have posix_openpt()
+ * as there is a race when read from master pty returns 0
+ * if child has not yet opened slave pty.
+ * (maybe other BSD's have the same problem?)
+ */
+# if !(defined(__OpenBSD__) && defined(HAVE_OPENPTY))
+# define TRY_POSIX_OPENPT
+# endif
+#endif
+
static int open_pty_master(char **ptyslave, int *sfdp)
{
int mfd;
/* Use the posix_openpt if working, as this guarantees creation of the
slave device properly. */
-#if defined(HAVE_WORKING_POSIX_OPENPT) || (defined(__sun) && defined(__SVR4))
-# ifdef HAVE_WORKING_POSIX_OPENPT
- if ((mfd = posix_openpt(O_RDWR)) >= 0) {
+#if defined(TRY_POSIX_OPENPT) || (defined(__sun) && defined(__SVR4))
+# ifdef TRY_POSIX_OPENPT
+ mfd = posix_openpt(O_RDWR);
# elif defined(__sun) && defined(__SVR4)
mfd = sf_open("/dev/ptmx", O_RDWR, 0);
+# endif
if (mfd >= 0) {
-# endif
if ((*ptyslave = ptsname(mfd)) != NULL &&
grantpt(mfd) == 0 &&
unlockpt(mfd) == 0) {
diff --git a/erts/example/time_compat.erl b/erts/example/time_compat.erl
index b87c6cc550..589781c8e8 100644
--- a/erts/example/time_compat.erl
+++ b/erts/example/time_compat.erl
@@ -272,6 +272,10 @@ system_flag(Flag, Value) ->
%%
integer_time_unit(native) -> 1000*1000;
+integer_time_unit(nanosecond) -> 1000*1000*1000;
+integer_time_unit(microsecond) -> 1000*1000;
+integer_time_unit(millisecond) -> 1000;
+integer_time_unit(second) -> 1;
integer_time_unit(nano_seconds) -> 1000*1000*1000;
integer_time_unit(micro_seconds) -> 1000*1000;
integer_time_unit(milli_seconds) -> 1000;
diff --git a/erts/include/internal/erl_misc_utils.h b/erts/include/internal/erl_misc_utils.h
index a4a5d1d510..55566ddf74 100644
--- a/erts/include/internal/erl_misc_utils.h
+++ b/erts/include/internal/erl_misc_utils.h
@@ -56,4 +56,33 @@ int erts_map_win_error_to_errno(DWORD win_error);
int erts_get_last_win_errno(void);
#endif
+#if defined(__APPLE__) && defined(__MACH__) && !defined(__DARWIN__)
+#define __DARWIN__ 1
+#endif
+
+/*
+ * ERTS_PREMATURE_TIMEOUT() expects time units
+ * 1000 (millisec), 1000000 (microsec), or
+ * 1000000000 (nanosec). Might not work properly
+ * otherwise.
+ */
+#undef ERTS_USE_PREMATURE_TIMEOUT
+#undef ERTS_PREMATURE_TIMEOUT
+
+#if defined(__DARWIN__)
+#define ERTS_USE_PREMATURE_TIMEOUT 1
+#define ERTS_PREMATURE_TIMEOUT(TMO, TU) \
+ ((TMO) >= 1 * ((TU) / 1000) \
+ ? ((TMO) >= 20 * ((TU) / 1000) \
+ ? 15 * ((TU) / 1000) \
+ : ((TMO) >= 5 * ((TU) / 1000) \
+ ? 3 * ((TU) / 1000) \
+ : 5 * ((TU) / 10000))) \
+ : 0)
+
+#else
+#define ERTS_USE_PREMATURE_TIMEOUT 0
+#define ERTS_PREMATURE_TIMEOUT(TMO, TU) (0)
+#endif
+
#endif /* #ifndef ERL_MISC_UTILS_H_ */
diff --git a/erts/include/internal/ethr_mutex.h b/erts/include/internal/ethr_mutex.h
index a510a2c97f..8ef3b1e40b 100644
--- a/erts/include/internal/ethr_mutex.h
+++ b/erts/include/internal/ethr_mutex.h
@@ -108,13 +108,13 @@ void LeaveCriticalSection(CRITICAL_SECTION *);
# error Need a qlock implementation
#endif
-#define ETHR_RWMTX_W_FLG__ (((ethr_sint32_t) 1) << 31)
-#define ETHR_RWMTX_W_WAIT_FLG__ (((ethr_sint32_t) 1) << 30)
-#define ETHR_RWMTX_R_WAIT_FLG__ (((ethr_sint32_t) 1) << 29)
+#define ETHR_RWMTX_W_FLG__ ((ethr_sint32_t) (1U << 31))
+#define ETHR_RWMTX_W_WAIT_FLG__ ((ethr_sint32_t) (1U << 30))
+#define ETHR_RWMTX_R_WAIT_FLG__ ((ethr_sint32_t) (1U << 29))
/* frequent read kind */
-#define ETHR_RWMTX_R_FLG__ (((ethr_sint32_t) 1) << 28)
-#define ETHR_RWMTX_R_ABRT_UNLCK_FLG__ (((ethr_sint32_t) 1) << 27)
+#define ETHR_RWMTX_R_FLG__ ((ethr_sint32_t) (1U << 28))
+#define ETHR_RWMTX_R_ABRT_UNLCK_FLG__ ((ethr_sint32_t) (1U << 27))
#define ETHR_RWMTX_R_PEND_UNLCK_MASK__ (ETHR_RWMTX_R_ABRT_UNLCK_FLG__ - 1)
/* normal kind */
diff --git a/erts/lib_src/pthread/ethr_event.c b/erts/lib_src/pthread/ethr_event.c
index eef88d5002..464875570a 100644
--- a/erts/lib_src/pthread/ethr_event.c
+++ b/erts/lib_src/pthread/ethr_event.c
@@ -184,6 +184,8 @@ return_event_on:
#include <errno.h>
#include <string.h>
+#include "erl_misc_utils.h"
+
#ifdef __DARWIN__
struct ethr_event_fdsets___ {
@@ -346,12 +348,9 @@ wait__(ethr_event *e, int spincount, ethr_sint64_t timeout)
ethr_sint32_t val;
int res, ulres;
int until_yield = ETHR_YIELD_AFTER_BUSY_LOOPS;
- ethr_sint64_t time = 0; /* SHUT UP annoying faulty warning... */
+ ethr_sint64_t time = 0;
#ifdef ETHR_HAVE_ETHR_GET_MONOTONIC_TIME
- ethr_sint64_t start = 0; /* SHUT UP annoying faulty warning... */
-#endif
-#ifdef ETHR_HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC
- struct timespec cond_timeout;
+ ethr_sint64_t timeout_time = 0; /* SHUT UP annoying faulty warning... */
#endif
val = ethr_atomic32_read(&e->state);
@@ -365,30 +364,27 @@ wait__(ethr_event *e, int spincount, ethr_sint64_t timeout)
if (timeout == 0)
return ETIMEDOUT;
else {
- time = timeout;
- switch (e->fd[0]) {
- case ETHR_EVENT_INVALID_FD__:
#ifdef ETHR_HAVE_ETHR_GET_MONOTONIC_TIME
- start = ethr_get_monotonic_time();
+ timeout_time = ethr_get_monotonic_time();
+ timeout_time += timeout;
#endif
+ switch (e->fd[0]) {
+ case ETHR_EVENT_INVALID_FD__:
+ time = timeout;
setup_nonblocking_pipe(e);
break;
#ifdef ETHR_HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC
case ETHR_EVENT_COND_TIMEDWAIT__:
- time += ethr_get_monotonic_time();
- cond_timeout.tv_sec = time / (1000*1000*1000);
- cond_timeout.tv_nsec = time % (1000*1000*1000);
+ time = -1;
if (spincount == 0)
goto set_event_off_waiter;
break;
#endif
default:
+ time = timeout;
/* Already initialized pipe... */
if (spincount == 0)
goto set_select_timeout;
-#ifdef ETHR_HAVE_ETHR_GET_MONOTONIC_TIME
- start = ethr_get_monotonic_time();
-#endif
break;
}
}
@@ -418,6 +414,9 @@ wait__(ethr_event *e, int spincount, ethr_sint64_t timeout)
|| e->fd[0] == ETHR_EVENT_COND_TIMEDWAIT__
#endif
) {
+#ifdef ETHR_HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC
+ struct timespec cond_timeout;
+#endif
set_event_off_waiter:
@@ -446,9 +445,35 @@ wait__(ethr_event *e, int spincount, ethr_sint64_t timeout)
#ifdef ETHR_HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC
if (timeout > 0) {
+ if (time != timeout_time) {
+ time = timeout_time;
+
+#if ERTS_USE_PREMATURE_TIMEOUT
+ {
+ ethr_sint64_t rtmo;
+
+ rtmo = timeout_time - ethr_get_monotonic_time();
+ if (rtmo <= 0) {
+ res = ETIMEDOUT;
+ break;
+ }
+ time = timeout_time;
+ time -= ERTS_PREMATURE_TIMEOUT(rtmo, 1000*1000*1000);
+ }
+#endif
+
+ cond_timeout.tv_sec = time / (1000*1000*1000);
+ cond_timeout.tv_nsec = time % (1000*1000*1000);
+ }
res = pthread_cond_timedwait(&e->cnd, &e->mtx, &cond_timeout);
- if (res == EINTR || res == ETIMEDOUT)
+ if (res == EINTR
+ || (res == ETIMEDOUT
+#if ERTS_USE_PREMATURE_TIMEOUT
+ && time == timeout_time
+#endif
+ )) {
break;
+ }
}
else
#endif
@@ -477,7 +502,11 @@ wait__(ethr_event *e, int spincount, ethr_sint64_t timeout)
struct timeval select_timeout;
#ifdef ETHR_HAVE_ETHR_GET_MONOTONIC_TIME
- time -= ethr_get_monotonic_time() - start;
+#if ERTS_USE_PREMATURE_TIMEOUT
+ restart_select:
+#endif
+
+ time = timeout_time - ethr_get_monotonic_time();
if (time <= 0)
return ETIMEDOUT;
#endif
@@ -492,6 +521,11 @@ wait__(ethr_event *e, int spincount, ethr_sint64_t timeout)
*/
time = ((time - 1) / 1000) + 1;
+#if defined(ETHR_HAVE_ETHR_GET_MONOTONIC_TIME) \
+ && ERTS_USE_PREMATURE_TIMEOUT
+ time -= ERTS_PREMATURE_TIMEOUT(time, 1000*1000);
+#endif
+
select_timeout.tv_sec = time / (1000*1000);
select_timeout.tv_usec = time % (1000*1000);
@@ -559,7 +593,11 @@ wait__(ethr_event *e, int spincount, ethr_sint64_t timeout)
val = ethr_atomic32_read(&e->state);
if (val == ETHR_EVENT_ON__)
goto return_event_on;
-
+#if defined(ETHR_HAVE_ETHR_GET_MONOTONIC_TIME) \
+ && ERTS_USE_PREMATURE_TIMEOUT
+ if (res == ETIMEDOUT)
+ goto restart_select; /* Verify timeout */
+#endif
}
return res;
diff --git a/erts/preloaded/ebin/erl_prim_loader.beam b/erts/preloaded/ebin/erl_prim_loader.beam
index de2693472a..796cbd74c5 100644
--- a/erts/preloaded/ebin/erl_prim_loader.beam
+++ b/erts/preloaded/ebin/erl_prim_loader.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erl_tracer.beam b/erts/preloaded/ebin/erl_tracer.beam
index 69804540c9..4406a82a36 100644
--- a/erts/preloaded/ebin/erl_tracer.beam
+++ b/erts/preloaded/ebin/erl_tracer.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erlang.beam b/erts/preloaded/ebin/erlang.beam
index 8379bf1768..c68debeabc 100644
--- a/erts/preloaded/ebin/erlang.beam
+++ b/erts/preloaded/ebin/erlang.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erts_code_purger.beam b/erts/preloaded/ebin/erts_code_purger.beam
index b1da0aa861..a1eb126098 100644
--- a/erts/preloaded/ebin/erts_code_purger.beam
+++ b/erts/preloaded/ebin/erts_code_purger.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erts_dirty_process_code_checker.beam b/erts/preloaded/ebin/erts_dirty_process_code_checker.beam
new file mode 100644
index 0000000000..a7ac116c05
--- /dev/null
+++ b/erts/preloaded/ebin/erts_dirty_process_code_checker.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erts_internal.beam b/erts/preloaded/ebin/erts_internal.beam
index cc4f3dbdaf..22817be8f4 100644
--- a/erts/preloaded/ebin/erts_internal.beam
+++ b/erts/preloaded/ebin/erts_internal.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erts_literal_area_collector.beam b/erts/preloaded/ebin/erts_literal_area_collector.beam
new file mode 100644
index 0000000000..71f3c2ec8c
--- /dev/null
+++ b/erts/preloaded/ebin/erts_literal_area_collector.beam
Binary files differ
diff --git a/erts/preloaded/ebin/init.beam b/erts/preloaded/ebin/init.beam
index 7b5797e90a..849273f746 100644
--- a/erts/preloaded/ebin/init.beam
+++ b/erts/preloaded/ebin/init.beam
Binary files differ
diff --git a/erts/preloaded/ebin/otp_ring0.beam b/erts/preloaded/ebin/otp_ring0.beam
index f893b9c181..b601c048b3 100644
--- a/erts/preloaded/ebin/otp_ring0.beam
+++ b/erts/preloaded/ebin/otp_ring0.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_eval.beam b/erts/preloaded/ebin/prim_eval.beam
index e4ce601c03..77909b01f0 100644
--- a/erts/preloaded/ebin/prim_eval.beam
+++ b/erts/preloaded/ebin/prim_eval.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_file.beam b/erts/preloaded/ebin/prim_file.beam
index babba3081f..5bbbaf14d5 100644
--- a/erts/preloaded/ebin/prim_file.beam
+++ b/erts/preloaded/ebin/prim_file.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_inet.beam b/erts/preloaded/ebin/prim_inet.beam
index 0521060e34..ae4861c336 100644
--- a/erts/preloaded/ebin/prim_inet.beam
+++ b/erts/preloaded/ebin/prim_inet.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_zip.beam b/erts/preloaded/ebin/prim_zip.beam
index e1faca7d96..6afeb454d6 100644
--- a/erts/preloaded/ebin/prim_zip.beam
+++ b/erts/preloaded/ebin/prim_zip.beam
Binary files differ
diff --git a/erts/preloaded/ebin/zlib.beam b/erts/preloaded/ebin/zlib.beam
index 5d3cbc1b36..4c48742344 100644
--- a/erts/preloaded/ebin/zlib.beam
+++ b/erts/preloaded/ebin/zlib.beam
Binary files differ
diff --git a/erts/preloaded/src/Makefile b/erts/preloaded/src/Makefile
index 4a447d3a09..2ab9edaf5e 100644
--- a/erts/preloaded/src/Makefile
+++ b/erts/preloaded/src/Makefile
@@ -44,7 +44,9 @@ PRE_LOADED_ERL_MODULES = \
erts_code_purger \
erlang \
erts_internal \
- erl_tracer
+ erl_tracer \
+ erts_literal_area_collector \
+ erts_dirty_process_code_checker
PRE_LOADED_BEAM_MODULES = \
prim_eval
diff --git a/erts/preloaded/src/erl_prim_loader.erl b/erts/preloaded/src/erl_prim_loader.erl
index e18e187cb7..b3ec73a60e 100644
--- a/erts/preloaded/src/erl_prim_loader.erl
+++ b/erts/preloaded/src/erl_prim_loader.erl
@@ -558,11 +558,9 @@ efile_gm_get_1([P|Ps], File0, Mod, {Parent,Ref}=PR, Process) ->
Res = try prim_file:read_file(File) of
{ok,Bin} ->
gm_process(Mod, File, Bin, Process);
- {error,enoent} ->
- efile_gm_get_1(Ps, File0, Mod, PR, Process);
Error ->
- check_file_result(get_modules, File, Error),
- Error
+ _ = check_file_result(get_modules, File, Error),
+ efile_gm_get_1(Ps, File0, Mod, PR, Process)
catch
_:Reason ->
{error,{crash,Reason}}
diff --git a/erts/preloaded/src/erl_tracer.erl b/erts/preloaded/src/erl_tracer.erl
index fe15812535..c810069d17 100644
--- a/erts/preloaded/src/erl_tracer.erl
+++ b/erts/preloaded/src/erl_tracer.erl
@@ -1,6 +1,6 @@
-module(erl_tracer).
--export([enabled/3, trace/6, on_load/0]).
+-export([enabled/3, trace/5, on_load/0]).
-type tracee() :: port() | pid() | undefined.
@@ -26,9 +26,9 @@
| trace_tag_running_ports()
| trace_tag_gc().
--type trace_opts() :: #{ match_spec_result => true | term(),
- scheduler_id => undefined | non_neg_integer(),
- timestamp => undefined | timestamp | cpu_timestamp |
+-type trace_opts() :: #{ extra => term(), match_spec_result => term(),
+ scheduler_id => non_neg_integer(),
+ timestamp => timestamp | cpu_timestamp |
monotonic | strict_monotonic }.
-type tracer_state() :: term().
@@ -41,6 +41,9 @@ on_load() ->
%%% NIF placeholders
%%%
+%% This suppression is needed as trace_tag gets collapsed to atom()
+-dialyzer({no_contracts, enabled/3}).
+
-spec enabled(Tag :: trace_status,
TracerState :: tracer_state(),
Tracee :: tracee()) ->
@@ -56,8 +59,7 @@ enabled(_, _, _) ->
TracerState :: tracer_state(),
Tracee :: tracee(),
Msg :: term(),
- Extra :: term(),
Opts :: trace_opts()) -> any().
-trace(_, _, _, _, _, _) ->
+trace(_, _, _, _, _) ->
erlang:nif_error(nif_not_loaded).
diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl
index 3d152c4e92..652a954807 100644
--- a/erts/preloaded/src/erlang.erl
+++ b/erts/preloaded/src/erlang.erl
@@ -59,6 +59,7 @@
-export_type([timestamp/0]).
-export_type([time_unit/0]).
+-export_type([deprecated_time_unit/0]).
-type ext_binary() :: binary().
-type timestamp() :: {MegaSecs :: non_neg_integer(),
@@ -67,12 +68,20 @@
-type time_unit() ::
pos_integer()
- | 'seconds'
+ | 'second'
+ | 'millisecond'
+ | 'microsecond'
+ | 'nanosecond'
+ | 'native'
+ | 'perf_counter'
+ | deprecated_time_unit().
+
+%% Deprecated symbolic units...
+-type deprecated_time_unit() ::
+ 'seconds'
| 'milli_seconds'
| 'micro_seconds'
- | 'nano_seconds'
- | 'native'
- | 'perf_counter'.
+ | 'nano_seconds'.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Native code BIF stubs and their types
@@ -980,14 +989,14 @@ group_leader(_GroupLeader, _Pid) ->
%% Shadowed by erl_bif_types: erlang:halt/0
-spec halt() -> no_return().
halt() ->
- erlang:nif_error(undefined).
+ erlang:halt(0, []).
%% halt/1
%% Shadowed by erl_bif_types: erlang:halt/1
-spec halt(Status) -> no_return() when
Status :: non_neg_integer() | 'abort' | string().
-halt(_Status) ->
- erlang:nif_error(undefined).
+halt(Status) ->
+ erlang:halt(Status, []).
%% halt/2
%% Shadowed by erl_bif_types: erlang:halt/2
@@ -1206,16 +1215,18 @@ module_loaded(_Module) ->
erlang:nif_error(undefined).
-type registered_name() :: atom().
-
-type registered_process_identifier() :: registered_name() | {registered_name(), node()}.
-
-type monitor_process_identifier() :: pid() | registered_process_identifier().
+-type monitor_port_identifier() :: port() | registered_name().
%% monitor/2
--spec monitor(process, monitor_process_identifier()) -> MonitorRef when
- MonitorRef :: reference();
- (time_offset, clock_service) -> MonitorRef when
- MonitorRef :: reference().
+-spec monitor
+ (process, monitor_process_identifier()) -> MonitorRef
+ when MonitorRef :: reference();
+ (port, monitor_port_identifier()) -> MonitorRef
+ when MonitorRef :: reference();
+ (time_offset, clock_service) -> MonitorRef
+ when MonitorRef :: reference().
monitor(_Type, _Item) ->
erlang:nif_error(undefined).
@@ -1363,19 +1374,33 @@ convert_time_unit(Time, FromUnit, ToUnit) ->
FU = case FromUnit of
native -> erts_internal:time_unit();
perf_counter -> erts_internal:perf_counter_unit();
+ nanosecond -> 1000*1000*1000;
+ microsecond -> 1000*1000;
+ millisecond -> 1000;
+ second -> 1;
+
+ %% Deprecated symbolic units...
nano_seconds -> 1000*1000*1000;
micro_seconds -> 1000*1000;
milli_seconds -> 1000;
seconds -> 1;
+
_ when FromUnit > 0 -> FromUnit
end,
TU = case ToUnit of
native -> erts_internal:time_unit();
perf_counter -> erts_internal:perf_counter_unit();
+ nanosecond -> 1000*1000*1000;
+ microsecond -> 1000*1000;
+ millisecond -> 1000;
+ second -> 1;
+
+ %% Deprecated symbolic units...
nano_seconds -> 1000*1000*1000;
micro_seconds -> 1000*1000;
milli_seconds -> 1000;
seconds -> 1;
+
_ when ToUnit > 0 -> ToUnit
end,
case Time < 0 of
@@ -2059,7 +2084,7 @@ open_port(PortName, PortSettings) ->
low | normal | high | max.
-type message_queue_data() ::
- off_heap | on_heap | mixed.
+ off_heap | on_heap.
-spec process_flag(trap_exit, Boolean) -> OldBoolean when
Boolean :: boolean(),
@@ -2160,7 +2185,7 @@ process_flag(_Flag, _Value) ->
{max_heap_size, MaxHeapSize :: max_heap_size()} |
{monitored_by, Pids :: [pid()]} |
{monitors,
- Monitors :: [{process, Pid :: pid() |
+ Monitors :: [{process | port, Pid :: pid() | port() |
{RegName :: atom(), Node :: node()}}]} |
{message_queue_data, MQD :: message_queue_data()} |
{priority, Level :: priority_level()} |
@@ -2578,6 +2603,7 @@ universaltime_to_localtime(_Universaltime) ->
%%--------------------------------------------------------------------------
+%% Shadowed by erl_bif_types: erlang:apply/2
-spec apply(Fun, Args) -> term() when
Fun :: function(),
Args :: [term()].
@@ -3086,6 +3112,9 @@ port_info(Port) ->
(Port, monitors) -> {monitors, Monitors} | 'undefined' when
Port :: port() | atom(),
Monitors :: [{process, pid()}];
+ (Port, monitored_by) -> {monitored_by, MonitoredBy} | 'undefined' when
+ Port :: port() | atom(),
+ MonitoredBy :: [pid()];
(Port, name) -> {name, Name} | 'undefined' when
Port :: port() | atom(),
Name :: string();
diff --git a/erts/preloaded/src/erts.app.src b/erts/preloaded/src/erts.app.src
index 98e0224a5f..7ab06164b4 100644
--- a/erts/preloaded/src/erts.app.src
+++ b/erts/preloaded/src/erts.app.src
@@ -37,7 +37,7 @@
{registered, []},
{applications, []},
{env, []},
- {runtime_dependencies, ["stdlib-2.5", "kernel-4.0", "sasl-2.4"]}
+ {runtime_dependencies, ["stdlib-3.0", "kernel-5.0", "sasl-3.0.1"]}
]}.
%% vim: ft=erlang
diff --git a/erts/preloaded/src/erts_code_purger.erl b/erts/preloaded/src/erts_code_purger.erl
index d1e64342e0..ee4fcedd2d 100644
--- a/erts/preloaded/src/erts_code_purger.erl
+++ b/erts/preloaded/src/erts_code_purger.erl
@@ -22,7 +22,7 @@
%% Purpose : Implement system process erts_code_purger
%% to handle code module purging.
--export([start/0, purge/1, soft_purge/1]).
+-export([start/0, purge/1, soft_purge/1, pending_purge_lambda/3]).
-spec start() -> term().
start() ->
@@ -40,10 +40,43 @@ loop() ->
Res = do_soft_purge(Mod),
From ! {reply, soft_purge, Res, Ref};
+ {test_purge, Mod, From, Type, Ref} when is_atom(Mod), is_pid(From) ->
+ do_test_purge(Mod, From, Type, Ref);
+
_Other -> ignore
end,
loop().
+%%
+%% Processes that tries to call a fun that belongs to
+%% a module that currently is being purged will end
+%% up here (pending_purge_lambda) in a suspended state.
+%% When the purge operation completes or aborts (soft
+%% purge that failed) these processes will be resumed.
+%%
+pending_purge_lambda(_Module, Fun, Args) ->
+ %%
+ %% When the process is resumed, the following
+ %% scenarios exist:
+ %% * The code that the fun refers to is still
+ %% there due to a failed soft purge. The
+ %% call to the fun will succeed via apply/2.
+ %% * The code was purged, and a current version
+ %% of the module is loaded which does not
+ %% contain this fun. The call will result
+ %% in an exception being raised.
+ %% * The code was purged, and no current
+ %% version of the module is loaded. An attempt
+ %% to load the module (via the error_handler)
+ %% will be made. This may or may not succeed.
+ %% If the module is loaded, it may or may
+ %% not contain the fun. The call will
+ %% succeed if the error_handler was able
+ %% to load the module and loaded module
+ %% contains this fun; otherwise, an exception
+ %% will be raised.
+ %%
+ apply(Fun, Args).
%% purge(Module)
%% Kill all processes running code from *old* Module, and then purge the
@@ -60,16 +93,14 @@ purge(Mod) when is_atom(Mod) ->
Result
end.
-
do_purge(Mod) ->
- case erts_internal:copy_literals(Mod, true) of
- false ->
- {false, false};
- true ->
- DidKill = check_proc_code(erlang:processes(), Mod, true),
- true = erts_internal:copy_literals(Mod, false),
- WasPurged = erts_internal:purge_module(Mod),
- {WasPurged, DidKill}
+ case erts_internal:purge_module(Mod, prepare) of
+ false ->
+ {false, false};
+ true ->
+ DidKill = check_proc_code(erlang:processes(), Mod, true),
+ true = erts_internal:purge_module(Mod, complete),
+ {true, DidKill}
end.
%% soft_purge(Module)
@@ -85,21 +116,17 @@ soft_purge(Mod) ->
Result
end.
-
do_soft_purge(Mod) ->
- case erts_internal:copy_literals(Mod, true) of
+ case erts_internal:purge_module(Mod, prepare) of
false ->
true;
true ->
- DoPurge = check_proc_code(erlang:processes(), Mod, false),
- true = erts_internal:copy_literals(Mod, false),
- case DoPurge of
- false ->
- false;
- true ->
- erts_internal:purge_module(Mod),
- true
- end
+ Res = check_proc_code(erlang:processes(), Mod, false),
+ erts_internal:purge_module(Mod,
+ case Res of
+ false -> abort;
+ true -> complete
+ end)
end.
%%
@@ -283,8 +310,7 @@ cpc_sched_kill(Pid,
cpc_request(#cpc_static{tag = Tag, module = Mod}, Pid, AllowGc) ->
erts_internal:check_process_code(Pid, Mod, [{async, {Tag, Pid, AllowGc}},
- {allow_gc, AllowGc},
- {copy_literals, true}]).
+ {allow_gc, AllowGc}]).
cpc_request_gc(CpcS, [Pid|Pids]) ->
cpc_request(CpcS, Pid, true),
@@ -297,3 +323,72 @@ cpc_init(CpcS, [Pid|Pids], NoReqs) ->
cpc_init(CpcS, Pids, NoReqs+1).
% end of check_proc_code() implementation.
+
+%%
+%% FOR TESTING ONLY
+%%
+%% do_test_purge() is for testing only. The purge is done
+%% as usual, but the tester can control when to enter the
+%% specific phases.
+%%
+do_test_purge(Mod, From, Type, Ref) when Type == true; Type == false ->
+ Mon = erlang:monitor(process, From),
+ Res = case Type of
+ true -> do_test_hard_purge(Mod, From, Ref, Mon);
+ false -> do_test_soft_purge(Mod, From, Ref, Mon)
+ end,
+ From ! {test_purge, Res, Ref},
+ erlang:demonitor(Mon, [flush]),
+ ok;
+do_test_purge(_, _, _, _) ->
+ ok.
+
+do_test_soft_purge(Mod, From, Ref, Mon) ->
+ PrepRes = erts_internal:purge_module(Mod, prepare),
+ TestRes = test_progress(started, From, Mon, Ref, ok),
+ case PrepRes of
+ false ->
+ _ = test_progress(continued, From, Mon, Ref, TestRes),
+ true;
+ true ->
+ Res = check_proc_code(erlang:processes(), Mod, false),
+ _ = test_progress(continued, From, Mon, Ref, TestRes),
+ erts_internal:purge_module(Mod,
+ case Res of
+ false -> abort;
+ true -> complete
+ end)
+ end.
+
+do_test_hard_purge(Mod, From, Ref, Mon) ->
+ PrepRes = erts_internal:purge_module(Mod, prepare),
+ TestRes = test_progress(started, From, Mon, Ref, ok),
+ case PrepRes of
+ false ->
+ _ = test_progress(continued, From, Mon, Ref, TestRes),
+ {false, false};
+ true ->
+ DidKill = check_proc_code(erlang:processes(), Mod, true),
+ _ = test_progress(continued, From, Mon, Ref, TestRes),
+ true = erts_internal:purge_module(Mod, complete),
+ {true, DidKill}
+ end.
+
+test_progress(_State, _From, _Mon, _Ref, died) ->
+ %% Test process died; continue so we wont
+ %% leave the system in an inconsistent
+ %% state...
+ died;
+test_progress(started, From, Mon, Ref, ok) ->
+ From ! {started, Ref},
+ receive
+ {'DOWN', Mon, process, From, _} -> died;
+ {continue, Ref} -> ok
+ end;
+test_progress(continued, From, Mon, Ref, ok) ->
+ From ! {continued, Ref},
+ receive
+ {'DOWN', Mon, process, From, _} -> died;
+ {complete, Ref} -> ok
+ end.
+
diff --git a/erts/preloaded/src/erts_dirty_process_code_checker.erl b/erts/preloaded/src/erts_dirty_process_code_checker.erl
new file mode 100644
index 0000000000..911642082c
--- /dev/null
+++ b/erts/preloaded/src/erts_dirty_process_code_checker.erl
@@ -0,0 +1,82 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+-module(erts_dirty_process_code_checker).
+
+-export([start/0]).
+
+%%
+%% The erts_dirty_process_code_checker is started at
+%% VM boot by the VM. It is a spawned as a system
+%% process, i.e, the whole VM will terminate if
+%% this process terminates.
+%%
+start() ->
+ process_flag(trap_exit, true),
+ msg_loop().
+
+msg_loop() ->
+ _ = receive
+ Request ->
+ handle_request(Request)
+ end,
+ msg_loop().
+
+check_process(Requester, Target, ReqId, Module) ->
+ Result = erts_internal:check_dirty_process_code(Target, Module),
+ Requester ! {check_process_code, ReqId, Result}.
+
+handle_request({Requester,
+ Target,
+ Prio,
+ {check_process_code,
+ ReqId,
+ Module,
+ _Flags} = Op}) ->
+ %%
+ %% Target may have stopped executing dirty since the
+ %% initial request was made. Check its current state
+ %% and try to send the request if possible; otherwise,
+ %% check the dirty executing process and send the result...
+ %%
+ try
+ case erts_internal:is_process_executing_dirty(Target) of
+ true ->
+ check_process(Requester, Target, ReqId, Module);
+ false ->
+ case erts_internal:request_system_task(Requester,
+ Target,
+ Prio,
+ Op) of
+ ok ->
+ ok;
+ dirty_execution ->
+ check_process(Requester, Target, ReqId, Module)
+ end
+ end
+ catch
+ _ : _ ->
+ ok %% Ignore all failures; someone passed us garbage...
+ end;
+handle_request(_Garbage) ->
+ ignore.
+
+
+
diff --git a/erts/preloaded/src/erts_internal.erl b/erts/preloaded/src/erts_internal.erl
index 2459ea2a2c..6229754c8c 100644
--- a/erts/preloaded/src/erts_internal.erl
+++ b/erts/preloaded/src/erts_internal.erl
@@ -38,11 +38,13 @@
-export([system_check/1,
gather_system_check_result/1]).
--export([request_system_task/3]).
+-export([request_system_task/3, request_system_task/4]).
-export([check_process_code/3]).
--export([copy_literals/2]).
--export([purge_module/1]).
+-export([check_dirty_process_code/2]).
+-export([is_process_executing_dirty/1]).
+-export([release_literal_area_switch/0]).
+-export([purge_module/2]).
-export([flush_monitor_messages/3]).
@@ -204,14 +206,25 @@ port_info(_Result, _Item) ->
-spec request_system_task(Pid, Prio, Request) -> 'ok' when
Prio :: 'max' | 'high' | 'normal' | 'low',
Request :: {'garbage_collect', term()}
- | {'check_process_code', term(), module(), non_neg_integer()},
+ | {'check_process_code', term(), module(), non_neg_integer()}
+ | {'copy_literals', term(), boolean()},
Pid :: pid().
request_system_task(_Pid, _Prio, _Request) ->
erlang:nif_error(undefined).
+-spec request_system_task(RequesterPid, TargetPid, Prio, Request) -> 'ok' | 'dirty_execution' when
+ Prio :: 'max' | 'high' | 'normal' | 'low',
+ Request :: {'garbage_collect', term()}
+ | {'check_process_code', term(), module(), non_neg_integer()}
+ | {'copy_literals', term(), boolean()},
+ RequesterPid :: pid(),
+ TargetPid :: pid().
+
+request_system_task(_RequesterPid, _TargetPid, _Prio, _Request) ->
+ erlang:nif_error(undefined).
+
-define(ERTS_CPC_ALLOW_GC, (1 bsl 0)).
--define(ERTS_CPC_COPY_LITERALS, (1 bsl 1)).
-spec check_process_code(Module, Flags) -> boolean() when
Module :: module(),
@@ -223,7 +236,7 @@ check_process_code(_Module, _Flags) ->
Pid :: pid(),
Module :: module(),
RequestId :: term(),
- Option :: {async, RequestId} | {allow_gc, boolean()} | {copy_literals, boolean()},
+ Option :: {async, RequestId} | {allow_gc, boolean()},
OptionList :: [Option],
CheckResult :: boolean() | aborted.
check_process_code(Pid, Module, OptionList) ->
@@ -265,8 +278,6 @@ get_cpc_opts([{async, _ReqId} = AsyncTuple | Options], _OldAsync, Flags) ->
get_cpc_opts(Options, AsyncTuple, Flags);
get_cpc_opts([{allow_gc, AllowGC} | Options], Async, Flags) ->
get_cpc_opts(Options, Async, cpc_flags(Flags, ?ERTS_CPC_ALLOW_GC, AllowGC));
-get_cpc_opts([{copy_literals, CopyLit} | Options], Async, Flags) ->
- get_cpc_opts(Options, Async, cpc_flags(Flags, ?ERTS_CPC_COPY_LITERALS, CopyLit));
get_cpc_opts([], Async, Flags) ->
{Async, Flags}.
@@ -275,15 +286,26 @@ cpc_flags(OldFlags, Bit, true) ->
cpc_flags(OldFlags, Bit, false) ->
OldFlags band (bnot Bit).
--spec copy_literals(Module,Bool) -> 'true' | 'false' | 'aborted' when
- Module :: module(),
- Bool :: boolean().
-copy_literals(_Mod, _Bool) ->
+-spec check_dirty_process_code(Pid,Module) -> 'true' | 'false' when
+ Pid :: pid(),
+ Module :: module().
+check_dirty_process_code(_Pid,_Module) ->
erlang:nif_error(undefined).
--spec purge_module(Module) -> boolean() when
- Module :: module().
-purge_module(_Module) ->
+-spec is_process_executing_dirty(Pid) -> 'true' | 'false' when
+ Pid :: pid().
+is_process_executing_dirty(_Pid) ->
+ erlang:nif_error(undefined).
+
+-spec release_literal_area_switch() -> 'true' | 'false'.
+
+release_literal_area_switch() ->
+ erlang:nif_error(undefined).
+
+-spec purge_module(Module, Op) -> boolean() when
+ Module :: module(),
+ Op :: 'prepare' | 'abort' | 'complete'.
+purge_module(_Module, _Op) ->
erlang:nif_error(undefined).
-spec system_check(Type) -> 'ok' when
diff --git a/erts/preloaded/src/erts_literal_area_collector.erl b/erts/preloaded/src/erts_literal_area_collector.erl
new file mode 100644
index 0000000000..3befad8dfb
--- /dev/null
+++ b/erts/preloaded/src/erts_literal_area_collector.erl
@@ -0,0 +1,113 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(erts_literal_area_collector).
+
+-export([start/0]).
+
+%% Currently we only allow two outstanding literal
+%% copying jobs that garbage collect in order to
+%% copy the literals. Maybe we could allow more
+%% than two outstanding processes, but for now we
+%% play it safe...
+-define(MAX_GC_OUTSTND, 2).
+
+%%
+%% The erts_literal_area_collector is started at
+%% VM boot by the VM. It is a spawned as a system
+%% process, i.e, the whole VM will terminate if
+%% this process terminates.
+%%
+start() ->
+ process_flag(trap_exit, true),
+ msg_loop(undefined, 0, 0, []).
+
+%%
+%% The VM will send us a 'copy_literals' message
+%% when it has a new literal area that needs to
+%% be handled is added. We will also be informed
+%% about more areas when we call
+%% erts_internal:release_literal_area_switch().
+%%
+msg_loop(Area, Outstnd, GcOutstnd, NeedGC) ->
+ receive
+
+ %% A new area to handle has arrived...
+ copy_literals when Outstnd == 0 ->
+ switch_area();
+
+ %% Process (_Pid) has completed the request...
+ {copy_literals, {Area, _GcAllowed, _Pid}, ok} when Outstnd == 1 ->
+ switch_area(); %% Last process completed...
+ {copy_literals, {Area, false, _Pid}, ok} ->
+ msg_loop(Area, Outstnd-1, GcOutstnd, NeedGC);
+ {copy_literals, {Area, true, _Pid}, ok} when NeedGC == [] ->
+ msg_loop(Area, Outstnd-1, GcOutstnd-1, []);
+ {copy_literals, {Area, true, _Pid}, ok} ->
+ send_copy_req(hd(NeedGC), Area, true),
+ msg_loop(Area, Outstnd-1, GcOutstnd, tl(NeedGC));
+
+ %% Process (Pid) failed to complete the request
+ %% since it needs to garbage collect in order to
+ %% complete the request...
+ {copy_literals, {Area, false, Pid}, need_gc} when GcOutstnd < ?MAX_GC_OUTSTND ->
+ send_copy_req(Pid, Area, true),
+ msg_loop(Area, Outstnd, GcOutstnd+1, NeedGC);
+ {copy_literals, {Area, false, Pid}, need_gc} ->
+ msg_loop(Area, Outstnd, GcOutstnd, [Pid|NeedGC]);
+
+ %% Not handled message regarding the area that we
+ %% currently are working with. Crash the VM so
+ %% we notice this bug...
+ {copy_literals, {Area, _, _}, _} = Msg when erlang:is_reference(Area) ->
+ exit({not_handled_message, Msg});
+
+ %% Unexpected garbage message. Get rid of it...
+ _Ignore ->
+ msg_loop(Area, Outstnd, GcOutstnd, NeedGC)
+
+ end.
+
+switch_area() ->
+ Res = erts_internal:release_literal_area_switch(),
+ erlang:garbage_collect(), %% Almost no live data now...
+ case Res of
+ false ->
+ %% No more areas to handle...
+ msg_loop(undefined, 0, 0, []);
+ true ->
+ %% Send requests to all processes to copy
+ %% all live data they have referring to the
+ %% literal area that is to be released...
+ Area = make_ref(),
+ Outstnd = send_copy_reqs(erlang:processes(), Area, false),
+ msg_loop(Area, Outstnd, 0, [])
+ end.
+
+send_copy_reqs(Ps, Area, GC) ->
+ send_copy_reqs(Ps, Area, GC, 0).
+
+send_copy_reqs([], _Area, _GC, N) ->
+ N;
+send_copy_reqs([P|Ps], Area, GC, N) ->
+ send_copy_req(P, Area, GC),
+ send_copy_reqs(Ps, Area, GC, N+1).
+
+send_copy_req(P, Area, GC) ->
+ erts_internal:request_system_task(P, normal, {copy_literals, {Area, GC, P}, GC}).
diff --git a/erts/preloaded/src/init.erl b/erts/preloaded/src/init.erl
index 618b53f6bb..962528f7ab 100644
--- a/erts/preloaded/src/init.erl
+++ b/erts/preloaded/src/init.erl
@@ -90,6 +90,7 @@
-define(ON_LOAD_HANDLER, init__boot__on_load_handler).
+
debug(false, _) -> ok;
debug(_, T) -> erlang:display(T).
@@ -173,7 +174,25 @@ stop() -> init ! {stop,stop}, ok.
-spec stop(Status) -> 'ok' when
Status :: non_neg_integer() | string().
-stop(Status) -> init ! {stop,{stop,Status}}, ok.
+stop(Status) when is_integer(Status), Status >= 0 ->
+ stop_1(Status);
+stop(Status) when is_list(Status) ->
+ case is_bytelist(Status) of
+ true ->
+ stop_1(Status);
+ false ->
+ erlang:error(badarg)
+ end;
+stop(_) ->
+ erlang:error(badarg).
+
+is_bytelist([B|Bs]) when is_integer(B), B >= 0, B < 256 -> is_bytelist(Bs);
+is_bytelist([]) -> true;
+is_bytelist(_) -> false.
+
+%% Note that we check the type of Status beforehand to ensure that
+%% the call to halt(Status) by the init process cannot fail
+stop_1(Status) -> init ! {stop,{stop,Status}}, ok.
-spec boot(BootArgs) -> no_return() when
BootArgs :: [binary()].
@@ -285,21 +304,13 @@ things_to_string([]) ->
"".
halt_string(String, List) ->
- HaltString = String ++ things_to_string(List),
- if
- length(HaltString)<199 -> HaltString;
- true -> first198(HaltString, 198)
- end.
-
-first198([H|T], N) when N>0 ->
- [H|first198(T, N-1)];
-first198(_, 0) ->
- [].
+ String ++ things_to_string(List).
%% String = string()
%% List = [string() | atom() | pid() | number()]
%% Any other items in List, such as tuples, are ignored when creating
%% the string used as argument to erlang:halt/1.
+-spec crash(_, _) -> no_return().
crash(String, List) ->
halt(halt_string(String, List)).
@@ -412,9 +423,6 @@ loop(State) ->
Loaded = State#state.loaded, %% boot_loop but is handled here
From ! {init,Loaded}, %% anyway.
loop(State);
- {From, {ensure_loaded, _}} ->
- From ! {init, not_allowed},
- loop(State);
Msg ->
loop(handle_msg(Msg,State))
end.
@@ -454,6 +462,8 @@ do_handle_msg(Msg,State) ->
From ! {init,ok},
{new_state,State#state{subscribed = [Pid|Subscribed]}}
end;
+ {From, {ensure_loaded, _}} ->
+ From ! {init, not_allowed};
X ->
case whereis(user) of
undefined ->
@@ -659,9 +669,9 @@ unload(_) ->
do_unload(sub([heart|erlang:pre_loaded()],erlang:loaded())).
do_unload([M|Mods]) ->
- catch erts_internal:purge_module(M),
+ catch erlang:purge_module(M),
catch erlang:delete_module(M),
- catch erts_internal:purge_module(M),
+ catch erlang:purge_module(M),
do_unload(Mods);
do_unload([]) ->
purge_all_hipe_refs(),
diff --git a/erts/preloaded/src/prim_inet.erl b/erts/preloaded/src/prim_inet.erl
index 4872ffd00c..bcf16402b0 100644
--- a/erts/preloaded/src/prim_inet.erl
+++ b/erts/preloaded/src/prim_inet.erl
@@ -70,11 +70,13 @@ open(Protocol, Family, Type) ->
open(Protocol, Family, Type, Opts) ->
open(Protocol, Family, Type, Opts, ?INET_REQ_OPEN, []).
+%% FDOPEN(tcp|udp|sctp, inet|inet6|local, stream|dgram|seqpacket, integer())
+
fdopen(Protocol, Family, Type, Fd) when is_integer(Fd) ->
fdopen(Protocol, Family, Type, Fd, true).
fdopen(Protocol, Family, Type, Fd, Bound)
- when is_integer(Fd), Bound == true orelse Bound == false ->
+ when is_integer(Fd), is_boolean(Bound) ->
open(Protocol, Family, Type, [], ?INET_REQ_FDOPEN,
[?int32(Fd), enc_value_2(bool, Bound)]).
@@ -104,8 +106,9 @@ open(Protocol, Family, Type, Opts, Req, Data) ->
error:system_limit -> {error, system_limit}
end.
-enc_family(inet) -> ?INET_AF_INET;
-enc_family(inet6) -> ?INET_AF_INET6.
+enc_family(inet) -> ?INET_AF_INET;
+enc_family(inet6) -> ?INET_AF_INET6;
+enc_family(local) -> ?INET_AF_LOCAL.
enc_type(stream) -> ?INET_TYPE_STREAM;
enc_type(dgram) -> ?INET_TYPE_DGRAM;
@@ -189,41 +192,52 @@ close_port(S) ->
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-bind(S,IP,Port) when is_port(S), is_integer(Port), Port >= 0, Port =< 65535 ->
- case ctl_cmd(S,?INET_REQ_BIND,enc_value(set, addr, {IP,Port})) of
- {ok, [P1,P0]} -> {ok, ?u16(P1, P0)};
- {error,_}=Error -> Error
- end;
-
%% Multi-homed "bind": sctp_bindx(). The Op is 'add' or 'remove'.
%% If no addrs are specified, it just does nothing.
%% Function returns {ok, S} on success, unlike TCP/UDP "bind":
-bind(S, Op, Addrs) when is_port(S), is_list(Addrs) ->
- case Op of
- add ->
- bindx(S, 1, Addrs);
- remove ->
- bindx(S, 0, Addrs);
- _ -> {error, einval}
+bind(S, add, Addrs) when is_port(S), is_list(Addrs) ->
+ bindx(S, 1, Addrs);
+bind(S, remove, Addrs) when is_port(S), is_list(Addrs) ->
+ bindx(S, 0, Addrs);
+bind(S, Addr, _) when is_port(S), tuple_size(Addr) =:= 2 ->
+ case type_value(set, addr, Addr) of
+ true ->
+ case ctl_cmd(S,?INET_REQ_BIND,enc_value(set, addr, Addr)) of
+ {ok, [P1,P0]} -> {ok, ?u16(P1, P0)};
+ {error, _} = Error -> Error
+ end;
+ false ->
+ {error, einval}
end;
-bind(_, _, _) -> {error, einval}.
+bind(S, IP, Port) ->
+ bind(S, {IP, Port}, 0).
bindx(S, AddFlag, Addrs) ->
case getprotocol(S) of
sctp ->
- %% Really multi-homed "bindx". Stringified args:
- %% [AddFlag, (AddrBytes see enc_value_2(addr,X))+]:
- Args =
- [?int8(AddFlag)|
- [enc_value(set, addr, {IP,Port}) ||
- {IP, Port} <- Addrs]],
- case ctl_cmd(S, ?SCTP_REQ_BINDX, Args) of
- {ok,_} -> {ok, S};
- {error,_}=Error -> Error
+ case bindx_check_addrs(Addrs) of
+ true ->
+ %% Really multi-homed "bindx". Stringified args:
+ %% [AddFlag, (AddrBytes see enc_value_2(addr,X))+]:
+ Args =
+ [?int8(AddFlag)|
+ [enc_value(set, addr, Addr) || Addr <- Addrs]],
+ case ctl_cmd(S, ?SCTP_REQ_BINDX, Args) of
+ {ok, _} -> {ok, S};
+ {error, _}=Error -> Error
+ end;
+ false ->
+ {error, einval}
end;
- _ -> {error, einval}
+ _ ->
+ {error, einval}
end.
+bindx_check_addrs([Addr|Addrs]) ->
+ type_value(set, addr, Addr) andalso bindx_check_addrs(Addrs);
+bindx_check_addrs([]) ->
+ true.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% CONNECT(insock(), IP, Port [,Timeout]) -> ok | {error, Reason}
@@ -242,14 +256,24 @@ bindx(S, AddFlag, Addrs) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% For TCP, UDP or SCTP sockets.
%%
-connect(S, IP, Port) -> connect0(S, IP, Port, -1).
-connect(S, IP, Port, infinity) -> connect0(S, IP, Port, -1);
-connect(S, IP, Port, Time) -> connect0(S, IP, Port, Time).
+connect(S, IP, Port) ->
+ connect(S, IP, Port, infinity).
+%%
+connect(S, Addr, _, Time) when is_port(S), tuple_size(Addr) =:= 2 ->
+ case type_value(set, addr, Addr) of
+ true when Time =:= infinity ->
+ connect0(S, Addr, -1);
+ true when is_integer(Time) ->
+ connect0(S, Addr, Time);
+ false ->
+ {error, einval}
+ end;
+connect(S, IP, Port, Time) ->
+ connect(S, {IP, Port}, 0, Time).
-connect0(S, IP, Port, Time) when is_port(S), Port > 0, Port =< 65535,
- is_integer(Time) ->
- case async_connect(S, IP, Port, Time) of
+connect0(S, Addr, Time) ->
+ case async_connect0(S, Addr, Time) of
{ok, S, Ref} ->
receive
{inet_async, S, Ref, Status} ->
@@ -258,11 +282,27 @@ connect0(S, IP, Port, Time) when is_port(S), Port > 0, Port =< 65535,
Error -> Error
end.
+
+async_connect(S, Addr, _, Time) when is_port(S), tuple_size(Addr) =:= 2 ->
+ case type_value(set, addr, Addr) of
+ true when Time =:= infinity ->
+ async_connect0(S, Addr, -1);
+ true when is_integer(Time) ->
+ async_connect0(S, Addr, Time);
+ false ->
+ {error, einval}
+ end;
+%%
async_connect(S, IP, Port, Time) ->
- case ctl_cmd(S, ?INET_REQ_CONNECT,
- [enc_time(Time),?int16(Port),ip_to_bytes(IP)]) of
+ async_connect(S, {IP, Port}, 0, Time).
+
+async_connect0(S, Addr, Time) ->
+ case ctl_cmd(
+ S, ?INET_REQ_CONNECT,
+ [enc_time(Time),enc_value(set, addr, Addr)])
+ of
{ok, [R1,R0]} -> {ok, S, ?u16(R1,R0)};
- {error,_}=Error -> Error
+ {error, _}=Error -> Error
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -400,20 +440,34 @@ send(S, Data) ->
%% "sendto" is for UDP. IP and Port are set by the caller to 0 if the socket
%% is known to be connected.
-sendto(S, IP, Port, Data) when is_port(S), Port >= 0, Port =< 65535 ->
- ?DBG_FORMAT("prim_inet:sendto(~p, ~p, ~p, ~p)~n", [S,IP,Port,Data]),
- try erlang:port_command(S, [?int16(Port),ip_to_bytes(IP),Data]) of
- true ->
- receive
- {inet_reply,S,Reply} ->
- ?DBG_FORMAT("prim_inet:sendto() -> ~p~n", [Reply]),
- Reply
- end
- catch
- error:_ ->
- ?DBG_FORMAT("prim_inet:sendto() -> {error,einval}~n", []),
- {error,einval}
- end.
+sendto(S, Addr, _, Data) when is_port(S), tuple_size(Addr) =:= 2 ->
+ case type_value(set, addr, Addr) of
+ true ->
+ ?DBG_FORMAT("prim_inet:sendto(~p, ~p, ~p)~n", [S,Addr,Data]),
+ try
+ erlang:port_command(S, [enc_value(set, addr, Addr),Data])
+ of
+ true ->
+ receive
+ {inet_reply,S,Reply} ->
+ ?DBG_FORMAT(
+ "prim_inet:sendto() -> ~p~n", [Reply]),
+ Reply
+ end
+ catch
+ error:_ ->
+ ?DBG_FORMAT(
+ "prim_inet:sendto() -> {error,einval}~n", []),
+ {error,einval}
+ end;
+ false ->
+ ?DBG_FORMAT(
+ "prim_inet:sendto() -> {error,einval}~n", []),
+ {error,einval}
+ end;
+sendto(S, IP, Port, Data) ->
+ sendto(S, {IP, Port}, 0, Data).
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
@@ -484,29 +538,37 @@ async_recv(S, Length, Time) ->
%% oriented: preserved here only for API compatibility.
%%
recvfrom(S, Length) ->
- recvfrom0(S, Length, -1).
+ recvfrom(S, Length, infinity).
-recvfrom(S, Length, infinity) ->
+recvfrom(S, Length, infinity) when is_port(S) ->
recvfrom0(S, Length, -1);
-recvfrom(S, Length, Time) when is_integer(Time), Time < 16#ffffffff ->
- recvfrom0(S, Length, Time);
-recvfrom(_, _, _) -> {error,einval}.
+recvfrom(S, Length, Time) when is_port(S) ->
+ if
+ is_integer(Time), 0 =< Time, Time < 16#ffffffff ->
+ recvfrom0(S, Length, Time);
+ true ->
+ {error, einval}
+ end.
recvfrom0(S, Length, Time)
- when is_port(S), is_integer(Length), Length >= 0, Length =< 16#ffffffff ->
+ when is_integer(Length), 0 =< Length, Length =< 16#ffffffff ->
case ctl_cmd(S, ?PACKET_REQ_RECV,[enc_time(Time),?int32(Length)]) of
{ok,[R1,R0]} ->
Ref = ?u16(R1,R0),
receive
% Success, UDP:
- {inet_async, S, Ref, {ok, [F,P1,P0 | AddrData]}} ->
- {IP,Data} = get_ip(F, AddrData),
- {ok, {IP, ?u16(P1,P0), Data}};
+ {inet_async, S, Ref, {ok, [F | AddrData]}} ->
+ case get_addr(F, AddrData) of
+ {{Family, _} = Addr, Data} when is_atom(Family) ->
+ {ok, {Addr, 0, Data}};
+ {{IP, Port}, Data} ->
+ {ok, {IP, Port, Data}}
+ end;
% Success, SCTP:
{inet_async, S, Ref, {ok, {[F,P1,P0 | Addr], AncData, DE}}} ->
- {IP, _} = get_ip(F, Addr),
- {ok, {IP, ?u16(P1,P0), AncData, DE}};
+ {IP, _} = get_ip(F, Addr),
+ {ok, {IP, ?u16(P1, P0), AncData, DE}};
% Back-end error:
{inet_async, S, Ref, Error={error, _}} ->
@@ -525,21 +587,26 @@ recvfrom0(_, _, _) -> {error,einval}.
peername(S) when is_port(S) ->
case ctl_cmd(S, ?INET_REQ_PEER, []) of
- {ok, [F, P1,P0 | Addr]} ->
- {IP, _} = get_ip(F, Addr),
- {ok, { IP, ?u16(P1, P0) }};
- {error,_}=Error -> Error
+ {ok, [F | Addr]} ->
+ {A, _} = get_addr(F, Addr),
+ {ok, A};
+ {error, _} = Error -> Error
end.
-setpeername(S, {IP,Port}) when is_port(S) ->
- case ctl_cmd(S, ?INET_REQ_SETPEER, [?int16(Port),ip_to_bytes(IP)]) of
- {ok,[]} -> ok;
- {error,_}=Error -> Error
- end;
setpeername(S, undefined) when is_port(S) ->
case ctl_cmd(S, ?INET_REQ_SETPEER, []) of
- {ok,[]} -> ok;
- {error,_}=Error -> Error
+ {ok, []} -> ok;
+ {error, _} = Error -> Error
+ end;
+setpeername(S, Addr) when is_port(S) ->
+ case type_value(set, addr, Addr) of
+ true ->
+ case ctl_cmd(S, ?INET_REQ_SETPEER, enc_value(set, addr, Addr)) of
+ {ok, []} -> ok;
+ {error, _} = Error -> Error
+ end;
+ false ->
+ {error, einval}
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -580,21 +647,28 @@ peernames(S, AssocId)
sockname(S) when is_port(S) ->
case ctl_cmd(S, ?INET_REQ_NAME, []) of
- {ok, [F, P1, P0 | Addr]} ->
- {IP, _} = get_ip(F, Addr),
- {ok, { IP, ?u16(P1, P0) }};
- {error,_}=Error -> Error
+ {ok, [F | Addr]} ->
+ {A, _} = get_addr(F, Addr),
+ {ok, A};
+ {error, _} = Error -> Error
end.
-setsockname(S, {IP,Port}) when is_port(S) ->
- case ctl_cmd(S, ?INET_REQ_SETNAME, [?int16(Port),ip_to_bytes(IP)]) of
- {ok,[]} -> ok;
- {error,_}=Error -> Error
- end;
setsockname(S, undefined) when is_port(S) ->
case ctl_cmd(S, ?INET_REQ_SETNAME, []) of
- {ok,[]} -> ok;
- {error,_}=Error -> Error
+ {ok, []} -> ok;
+ {error, _} = Error -> Error
+ end;
+setsockname(S, Addr) when is_port(S) ->
+ case type_value(set, addr, Addr) of
+ true ->
+ case
+ ctl_cmd(S, ?INET_REQ_SETNAME, enc_value(set, addr, Addr))
+ of
+ {ok, []} -> ok;
+ {error, _} = Error -> Error
+ end;
+ false ->
+ {error, einval}
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1496,14 +1570,49 @@ type_value_2(uint8, X) when X band 16#ff =:= X -> true;
type_value_2(time, infinity) -> true;
type_value_2(time, X) when is_integer(X), X >= 0 -> true;
type_value_2(ip,{A,B,C,D}) when ?ip(A,B,C,D) -> true;
+%%
type_value_2(addr, {any,Port}) ->
type_value_2(uint16, Port);
type_value_2(addr, {loopback,Port}) ->
type_value_2(uint16, Port);
-type_value_2(addr, {{A,B,C,D},Port}) when ?ip(A,B,C,D) ->
+type_value_2(addr, {IP,_} = Addr) when tuple_size(IP) =:= 4 ->
+ type_value_2(addr, {inet,Addr});
+type_value_2(addr, {IP,_} = Addr) when tuple_size(IP) =:= 8 ->
+ type_value_2(addr, {inet6,Addr});
+type_value_2(addr, {Local,_}) when is_list(Local); is_binary(Local) ->
+ type_value_2(addr, {local,Local});
+%%
+type_value_2(addr, {Family,{Tag,Port}})
+ when (Family =:= inet orelse Family =:= inet6) andalso
+ (Tag =:= any orelse Tag =:= loopback) ->
+ type_value_2(uint16, Port);
+type_value_2(addr, {inet,{{A,B,C,D},Port}})
+ when ?ip(A,B,C,D) ->
type_value_2(uint16, Port);
-type_value_2(addr, {{A,B,C,D,E,F,G,H},Port}) when ?ip6(A,B,C,D,E,F,G,H) ->
+type_value_2(addr, {inet6,{{A,B,C,D,E,F,G,H},Port}})
+ when ?ip6(A,B,C,D,E,F,G,H) ->
type_value_2(uint16, Port);
+type_value_2(addr, {local,Addr}) ->
+ if
+ is_binary(Addr) ->
+ byte_size(Addr) =< 255;
+ true ->
+ try
+ %% We either get a badarg from byte_size
+ %% or from characters_to_binary
+ byte_size(
+ unicode:characters_to_binary(
+ Addr, file:native_name_encoding()))
+ of
+ N when N =< 255 ->
+ true;
+ _ ->
+ false
+ catch error:badarg ->
+ false
+ end
+ end;
+%%
type_value_2(ether,[X1,X2,X3,X4,X5,X6])
when ?ether(X1,X2,X3,X4,X5,X6) -> true;
type_value_2({enum,List}, Enum) ->
@@ -1611,6 +1720,7 @@ enc_value_2(time, Val) -> ?int32(Val);
enc_value_2(ip,{A,B,C,D}) -> [A,B,C,D];
enc_value_2(ip, any) -> [0,0,0,0];
enc_value_2(ip, loopback) -> [127,0,0,1];
+%%
enc_value_2(addr, {any,Port}) ->
[?INET_AF_ANY|?int16(Port)];
enc_value_2(addr, {loopback,Port}) ->
@@ -1619,6 +1729,35 @@ enc_value_2(addr, {IP,Port}) when tuple_size(IP) =:= 4 ->
[?INET_AF_INET,?int16(Port)|ip4_to_bytes(IP)];
enc_value_2(addr, {IP,Port}) when tuple_size(IP) =:= 8 ->
[?INET_AF_INET6,?int16(Port)|ip6_to_bytes(IP)];
+enc_value_2(addr, {File,_}) when is_list(File); is_binary(File) ->
+ [?INET_AF_LOCAL,iolist_size(File)|File];
+%%
+enc_value_2(addr, {inet,{any,Port}}) ->
+ [?INET_AF_INET,?int16(Port),0,0,0,0];
+enc_value_2(addr, {inet,{loopback,Port}}) ->
+ [?INET_AF_INET,?int16(Port),127,0,0,1];
+enc_value_2(addr, {inet,{IP,Port}}) ->
+ [?INET_AF_INET,?int16(Port)|ip4_to_bytes(IP)];
+enc_value_2(addr, {inet6,{any,Port}}) ->
+ [?INET_AF_INET6,?int16(Port),0,0,0,0,0,0,0,0];
+enc_value_2(addr, {inet6,{loopback,Port}}) ->
+ [?INET_AF_INET6,?int16(Port),0,0,0,0,0,0,0,1];
+enc_value_2(addr, {inet6,{IP,Port}}) ->
+ [?INET_AF_INET6,?int16(Port)|ip6_to_bytes(IP)];
+enc_value_2(addr, {local,Addr}) ->
+ %% A binary is passed as is, but anything else will be
+ %% regarded as a filename and therefore encoded according to
+ %% the current system filename encoding mode.
+ Bin =
+ if
+ is_binary(Addr) ->
+ Addr;
+ true ->
+ unicode:characters_to_binary(
+ Addr, file:native_name_encoding())
+ end,
+ [?INET_AF_LOCAL,byte_size(Bin),Bin];
+%%
enc_value_2(ether, [_,_,_,_,_,_]=Xs) -> Xs;
enc_value_2(sockaddr, any) ->
[?INET_AF_ANY];
@@ -2249,9 +2388,6 @@ utf8_to_characters(Bs, U, 0) ->
utf8_to_characters([B|Bs], U, N) when ((B band 16#3F) bor 16#80) =:= B ->
utf8_to_characters(Bs, (U bsl 6) bor (B band 16#3F), N-1).
-ip_to_bytes(IP) when tuple_size(IP) =:= 4 -> ip4_to_bytes(IP);
-ip_to_bytes(IP) when tuple_size(IP) =:= 8 -> ip6_to_bytes(IP).
-
ip4_to_bytes({A,B,C,D}) ->
[A band 16#ff, B band 16#ff, C band 16#ff, D band 16#ff].
@@ -2261,18 +2397,32 @@ ip6_to_bytes({A,B,C,D,E,F,G,H}) ->
get_addrs([]) ->
[];
-get_addrs([F,P1,P0|Addr]) ->
- {IP,Addrs} = get_ip(F, Addr),
- [{IP,?u16(P1, P0)}|get_addrs(Addrs)].
-
-get_ip(?INET_AF_INET, Addr) -> get_ip4(Addr);
-get_ip(?INET_AF_INET6, Addr) -> get_ip6(Addr).
+get_addrs([F|Addrs]) ->
+ {Addr,Rest} = get_addr(F, Addrs),
+ [Addr|get_addrs(Rest)].
+
+get_addr(?INET_AF_LOCAL, [N|Addr]) ->
+ {A,Rest} = lists:split(N, Addr),
+ {{local,iolist_to_binary(A)},Rest};
+get_addr(?INET_AF_UNSPEC, Rest) ->
+ {{unspec,<<>>},Rest};
+get_addr(?INET_AF_UNDEFINED, Rest) ->
+ {{undefined,<<>>},Rest};
+get_addr(Family, [P1,P0|Addr]) ->
+ {IP,Rest} = get_ip(Family, Addr),
+ {{IP,?u16(P1, P0)},Rest}.
+
+get_ip(?INET_AF_INET, Addr) ->
+ get_ip4(Addr);
+get_ip(?INET_AF_INET6, Addr) ->
+ get_ip6(Addr).
get_ip4([A,B,C,D | T]) -> {{A,B,C,D},T}.
get_ip6([X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,X12,X13,X14,X15,X16 | T]) ->
{ { ?u16(X1,X2),?u16(X3,X4),?u16(X5,X6),?u16(X7,X8),
- ?u16(X9,X10),?u16(X11,X12),?u16(X13,X14),?u16(X15,X16)}, T}.
+ ?u16(X9,X10),?u16(X11,X12),?u16(X13,X14),?u16(X15,X16)},
+ T }.
%% Control command
diff --git a/erts/start_scripts/Makefile b/erts/start_scripts/Makefile
index dfd8153f32..dd7e2ea530 100644
--- a/erts/start_scripts/Makefile
+++ b/erts/start_scripts/Makefile
@@ -69,7 +69,7 @@ debug opt script: rel $(INSTALL_SCRIPTS) $(RELEASES_SRC)
rel: $(REL_SCRIPTS)
-RELEASES.src:
+RELEASES.src: $(SS_ROOT)/start_sasl.rel
$(gen_verbose)$(INSTALL_DIR) $(SS_TMP)
$(V_at)( cd $(SS_TMP) && \
$(ERL) -noinput +B -eval 'release_handler:create_RELEASES("%ERL_ROOT%", "$(SS_ROOT)", "$(SS_ROOT)/start_sasl.rel", []), halt()')
diff --git a/erts/test/run_erl_SUITE.erl b/erts/test/run_erl_SUITE.erl
index 47d38bde7c..fe1ccba1e2 100644
--- a/erts/test/run_erl_SUITE.erl
+++ b/erts/test/run_erl_SUITE.erl
@@ -22,6 +22,7 @@
-export([all/0, suite/0]).
-export([basic/1,heavy/1,heavier/1,defunct/1]).
+-export([sleepy_child/1]).
-export([ping_me_back/1]).
-include_lib("common_test/include/ct.hrl").
@@ -31,17 +32,17 @@ suite() ->
{timetrap, {minutes, 2}}].
all() ->
- [basic, heavy, heavier, defunct].
+ [basic, sleepy_child, heavy, heavier, defunct].
basic(Config) when is_list(Config) ->
case os:type() of
- {unix,_} -> basic_1(Config);
+ {unix,_} -> basic_1(Config, "basic", "");
_ -> {skip,"Not Unix"}
end.
-basic_1(Config) ->
- {Node,Pipe} = do_run_erl(Config, "basic"),
+basic_1(Config, Case, Opt) ->
+ {Node,Pipe} = do_run_erl(Config, Case, Opt),
ToErl = open_port({spawn,"to_erl "++Pipe}, []),
erlang:port_command(ToErl, "halt().\r\n"),
@@ -55,6 +56,12 @@ basic_1(Config) ->
ok.
+sleepy_child(Config) when is_list(Config) ->
+ case os:type() of
+ {unix,_} -> basic_1(Config, "sleepy_child", "-sleepy-child ");
+ _ -> {skip,"Not Unix"}
+ end.
+
heavy(Config) when is_list(Config) ->
case os:type() of
{unix,_} -> heavy_1(Config);
@@ -233,12 +240,14 @@ defunct_2(Config, Perl) ->
%%% Utilities.
do_run_erl(Config, Case) ->
+ do_run_erl(Config, Case, "").
+do_run_erl(Config, Case, Opt) ->
Priv = proplists:get_value(priv_dir, Config),
LogDir = filename:join(Priv, Case),
ok = file:make_dir(LogDir),
Pipe = LogDir ++ "/",
NodeName = "run_erl_node_" ++ Case,
- Cmd = "run_erl "++Pipe++" "++LogDir++" \"erl -sname " ++ NodeName ++
+ Cmd = "run_erl "++Opt++Pipe++" "++LogDir++" \"erl -sname " ++ NodeName ++
" -pa " ++ filename:dirname(code:which(?MODULE)) ++
" -s " ++ ?MODULE_STRING ++ " ping_me_back " ++
atom_to_list(node()) ++ "\"",
diff --git a/erts/test/z_SUITE.erl b/erts/test/z_SUITE.erl
index 281a47134f..d474c71c4f 100644
--- a/erts/test/z_SUITE.erl
+++ b/erts/test/z_SUITE.erl
@@ -214,7 +214,19 @@ dump_core(#core_search_conf{ cerl = Cerl }, Core) ->
format_core(Conf, {ignore, Core}) ->
format_core(Conf, Core, "[ignored] ");
format_core(Conf, Core) ->
- format_core(Conf, Core, "").
+ format_core(Conf, Core, ""),
+
+ %% Try print (log dir) name of offending application
+ CoreDir = filename:dirname(Core),
+ lists:foreach(fun(TestDir) ->
+ case filelib:is_dir(filename:join(CoreDir,TestDir)) of
+ true ->
+ io:format(" from ~s~n", [TestDir]);
+ false ->
+ no
+ end
+ end,
+ filelib:wildcard("*.logs", CoreDir)).
format_core(#core_search_conf{file = false}, Core, Ignore) ->
io:format(" ~s~s " ++ time_fstr() ++ "~s~n",
diff --git a/erts/vsn.mk b/erts/vsn.mk
index 6ad3680213..acd4509304 100644
--- a/erts/vsn.mk
+++ b/erts/vsn.mk
@@ -18,7 +18,7 @@
# %CopyrightEnd%
#
-VSN = 8.0
+VSN = 8.0.3
# Port number 4365 in 4.2
# Port number 4366 in 4.3
diff --git a/lib/asn1/doc/src/asn1_getting_started.xml b/lib/asn1/doc/src/asn1_getting_started.xml
index 3c8ec24723..d40b294c39 100644
--- a/lib/asn1/doc/src/asn1_getting_started.xml
+++ b/lib/asn1/doc/src/asn1_getting_started.xml
@@ -678,7 +678,7 @@ ok
1081,32,1043,1085,1086,1084]</pre>
<p>For details, see the <seealso marker="stdlib:unicode">unicode</seealso>
- module in <c>stdlib</c>.</p>
+ module in STDLIB.</p>
<p>In the following example, this ASN.1 specification is used:</p>
<pre>
diff --git a/lib/asn1/doc/src/asn1_introduction.xml b/lib/asn1/doc/src/asn1_introduction.xml
index d8b81aa467..e4f406364d 100644
--- a/lib/asn1/doc/src/asn1_introduction.xml
+++ b/lib/asn1/doc/src/asn1_introduction.xml
@@ -30,7 +30,7 @@
<file>asn1_introduction.xml</file>
</header>
- <p>The <c>ASN.1</c> application provides the following:</p>
+ <p>The ASN.1 application provides the following:</p>
<list type="bulleted">
<item>An ASN.1 compiler for Erlang, which generates encode and
diff --git a/lib/asn1/doc/src/notes.xml b/lib/asn1/doc/src/notes.xml
index 68d335f451..ac3d9c828e 100644
--- a/lib/asn1/doc/src/notes.xml
+++ b/lib/asn1/doc/src/notes.xml
@@ -329,7 +329,7 @@
</item>
<item>
<p>
- The <c>asn1</c> application would fail to build if the
+ The ASN.1 application would fail to build if the
<c>.erlang</c> file printed something to standard output.</p>
<p>
Own Id: OTP-11360</p>
@@ -997,7 +997,7 @@
also been extended. </item><item> The <c>configure</c>
scripts of <c>erl_interface</c> and <c>odbc</c> now
search for thread libraries and thread library quirks the
- same way as <c>erts</c> do. </item><item> The
+ same way as ERTS do. </item><item> The
<c>configure</c> script of the <c>odbc</c> application
now also looks for odbc libraries in <c>lib64</c> and
<c>lib/64</c> directories when building on a 64-bit
diff --git a/lib/asn1/src/asn1_db.erl b/lib/asn1/src/asn1_db.erl
index 557eca0ffd..869ea310aa 100644
--- a/lib/asn1/src/asn1_db.erl
+++ b/lib/asn1/src/asn1_db.erl
@@ -106,7 +106,9 @@ loop(#state{parent = Parent, monitor = MRef, table = Table,
loop(State);
{save, OutFile, Mod} ->
[{_,Mtab}] = ets:lookup(Table, Mod),
- ok = ets:tab2file(Mtab, OutFile),
+ TempFile = OutFile ++ ".#temp",
+ ok = ets:tab2file(Mtab, TempFile),
+ ok = file:rename(TempFile, OutFile),
loop(State);
{From, {new, Mod, Erule}} ->
[] = ets:lookup(Table, Mod), %Assertion.
diff --git a/lib/asn1/src/asn1ct.erl b/lib/asn1/src/asn1ct.erl
index dd269f095d..8783b5418d 100644
--- a/lib/asn1/src/asn1ct.erl
+++ b/lib/asn1/src/asn1ct.erl
@@ -221,9 +221,8 @@ check_pass(#st{code=M,file=File,includes=Includes,
{error,St#st{error=Reason}}
end.
-save_pass(#st{code=M,erule=Erule,dbfile=DbFile}=St) ->
+save_pass(#st{code=M,erule=Erule}=St) ->
ok = asn1ct_check:storeindb(#state{erule=Erule}, M),
- asn1_db:dbsave(DbFile,M#module.name),
{ok,St}.
parse_listing(#st{code=Code,outfile=OutFile0}=St) ->
diff --git a/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl b/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl
index 8f4cf2b9ec..325bea5879 100644
--- a/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl
+++ b/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl
@@ -500,9 +500,7 @@ gen_decode_sof(Erules,TypeName,_InnerTypeName,D) when is_record(D,type) ->
Atom when is_atom(Atom) -> Atom;
_ -> TypeNameSuffix
end,
- ObjFun = false,
- gen_dec_line(Erules,TypeName,ContName,[],Cont,mandatory,ObjFun),
- %% gen_dec_line_sof(Erules,Typename,ContName,Cont,ObjFun),
+ gen_dec_line(Erules,TypeName,ContName,[],Cont,mandatory),
emit([" || ",{curr,v}," <- ",{curr,tlv},"].",nl,nl,nl]).
@@ -869,7 +867,7 @@ gen_dec_choice_cases(Erules,TopType, [H|T]) ->
(?ASN1CT_GEN_BER:decode_class(T1class) bsl 10) +
T1number,",_} -> ",nl]),
emit([indent(8),"{",{asis,Cname},", "]),
- gen_dec_line(Erules,TopType,Cname,[],Type,Prop,false),
+ gen_dec_line(Erules,TopType,Cname,[],Type,Prop),
emit(["};",nl,nl]),
Fun(Tail,Fun);
([],_) ->
@@ -896,7 +894,7 @@ gen_dec_choice_cases(Erules,TopType, [H|T]) ->
(?ASN1CT_GEN_BER:decode_class(FirstT#tag.class) bsl 10) +
FirstT#tag.number,", ",{curr,v},"} -> ",nl]),
emit([indent(8),"{",{asis,Cname},", "]),
- gen_dec_line(Erules,TopType,Cname,[],Type#type{tag=RestT},Prop,false),
+ gen_dec_line(Erules,TopType,Cname,[],Type#type{tag=RestT},Prop),
emit(["};",nl,nl])
end,
gen_dec_choice_cases(Erules,TopType, T).
@@ -1060,8 +1058,14 @@ gen_optormand_case({'DEFAULT',DefaultValue}, Erules, _TopType,
end,
emit([indent(9),"_ ->",nl,indent(12)])
end.
-
+%% Use for SEQUENCE OF and CHOICE.
+gen_dec_line(Erules,TopType,Cname,CTags,Type,OptOrMand) ->
+ %% The matching on the next line is an assertion.
+ {[],[]} = gen_dec_line(Erules,TopType,Cname,CTags,Type,OptOrMand,false),
+ ok.
+
+%% Use for SEQUENCE.
gen_dec_line(Erules,TopType,Cname,CTags,Type,OptOrMand,DecObjInf) ->
BytesVar = asn1ct_gen:mk_var(asn1ct_name:curr(v)),
Tag =
diff --git a/lib/asn1/test/asn1_test_lib.erl b/lib/asn1/test/asn1_test_lib.erl
index 1b4c3b3c77..dc614db4f2 100644
--- a/lib/asn1/test/asn1_test_lib.erl
+++ b/lib/asn1/test/asn1_test_lib.erl
@@ -34,12 +34,16 @@ run_dialyzer() ->
compile(File, Config, Options) -> compile_all([File], Config, Options).
-compile_all(Files, Config, Options) ->
+compile_all(Files, Config, Options0) ->
DataDir = proplists:get_value(data_dir, Config),
CaseDir = proplists:get_value(case_dir, Config),
- [compile_file(filename:join(DataDir, F), [{outdir, CaseDir},
- debug_info|Options])
- || F <- Files],
+ Options = [{outdir,CaseDir},debug_info|Options0],
+
+ Comp = fun(F) ->
+ compile_file(filename:join(DataDir, F), Options)
+ end,
+ p_run(Comp, Files),
+
dialyze(Files, Options),
ok.
@@ -94,9 +98,9 @@ compile_file(File, Options) ->
try
ok = asn1ct:compile(File, [warnings_as_errors|Options])
catch
- Class:Reason ->
- ct:print("Failed to compile ~s\n", [File]),
- erlang:error({compile_failed, {File, Options}, {Class, Reason}})
+ _:Reason ->
+ ct:print("Failed to compile ~s\n~p", [File,Reason]),
+ error
end.
compile_erlang(Mod, Config, Options) ->
@@ -219,3 +223,38 @@ ber_get_len(<<0:1,L:7,T/binary>>) ->
ber_get_len(<<1:1,Octets:7,T0/binary>>) ->
<<L:Octets/unit:8,T/binary>> = T0,
{L,T}.
+
+%% p_run(fun(Data) -> ok|error, List) -> ok
+%% Will fail the test case if there were any errors.
+
+p_run(Test, List) ->
+ S = erlang:system_info(schedulers),
+ N = case test_server:is_cover() of
+ false ->
+ S + 1;
+ true ->
+ %% Cover is running. Using too many processes
+ %% could slow us down.
+ min(S, 4)
+ end,
+ %%io:format("p_run: ~p parallel processes\n", [N]),
+ p_run_loop(Test, List, N, [], 0).
+
+p_run_loop(_, [], _, [], Errors) ->
+ case Errors of
+ 0 -> ok;
+ N -> ct:fail({N,errors})
+ end;
+p_run_loop(Test, [H|T], N, Refs, Errors) when length(Refs) < N ->
+ {_,Ref} = erlang:spawn_monitor(fun() -> exit(Test(H)) end),
+ p_run_loop(Test, T, N, [Ref|Refs], Errors);
+p_run_loop(Test, List, N, Refs0, Errors0) ->
+ receive
+ {'DOWN',Ref,process,_,Res} ->
+ Errors = case Res of
+ ok -> Errors0;
+ error -> Errors0+1
+ end,
+ Refs = Refs0 -- [Ref],
+ p_run_loop(Test, List, N, Refs, Errors)
+ end.
diff --git a/lib/common_test/doc/src/common_test_app.xml b/lib/common_test/doc/src/common_test_app.xml
index 3f83747485..48ffe653e4 100644
--- a/lib/common_test/doc/src/common_test_app.xml
+++ b/lib/common_test/doc/src/common_test_app.xml
@@ -566,7 +566,7 @@
(which also causes the test case process to terminate).</p>
<p>Elements from the <c>Config</c> list can, for example, be read
- with <c>proplists:get_value/2</c> in <c>STDLIB</c>
+ with <c>proplists:get_value/2</c> in STDLIB
(or the macro <c>?config</c> defined in <c>ct.hrl</c>).</p>
<p>If you decide not to run the test case after all, return
diff --git a/lib/common_test/doc/src/ct.xml b/lib/common_test/doc/src/ct.xml
index 5231ef24a4..ffc64cba67 100644
--- a/lib/common_test/doc/src/ct.xml
+++ b/lib/common_test/doc/src/ct.xml
@@ -777,7 +777,7 @@
caught by any installed event manager.</p>
<p>See also
- <seealso marker="stdlib:gen_event"><c>stdlib:gen_event(3)</c></seealso>.</p>
+ <seealso marker="stdlib:gen_event"><c>gen_event(3)</c></seealso>.</p>
</desc>
</func>
@@ -935,7 +935,7 @@
</func>
<func>
- <name>reload_config(Required) -&gt; ValueOrElement</name>
+ <name>reload_config(Required) -&gt; ValueOrElement | {error, Reason}</name>
<fsummary>Reloads configuration file containing specified configuration
key.</fsummary>
<type>
@@ -1236,7 +1236,7 @@
<v>Millisecs = integer() | float()</v>
</type>
<desc><marker id="sleep-1"/>
- <p>This function, similar to <c>timer:sleep/1</c> in <c>STDLIB</c>,
+ <p>This function, similar to <c>timer:sleep/1</c> in STDLIB,
suspends the test case for a specified time.
However, this function also multiplies <c>Time</c> with the
<c>multiply_timetraps</c> value (if set) and under certain
@@ -1330,7 +1330,7 @@
caught by any installed event manager.</p>
<p>See also
- <seealso marker="stdlib:gen_event"><c>stdlib:gen_event(3)</c></seealso>.
+ <seealso marker="stdlib:gen_event"><c>gen_event(3)</c></seealso>.
</p>
</desc>
</func>
diff --git a/lib/common_test/doc/src/ct_hooks.xml b/lib/common_test/doc/src/ct_hooks.xml
index 3b1e564b66..c2cf29c530 100644
--- a/lib/common_test/doc/src/ct_hooks.xml
+++ b/lib/common_test/doc/src/ct_hooks.xml
@@ -94,7 +94,7 @@
<seealso marker="#Module:id-1"><c>ct_hooks:id/1</c></seealso>,
or a <c>reference</c> (created using
<seealso marker="erts:erlang#make_ref-0">erlang:make_ref/0</seealso>
- in <c>ERTS</c>) if
+ in ERTS) if
<seealso marker="#Module:id-1"><c>ct_hooks:id/1</c></seealso>
is not implemented.</p>
diff --git a/lib/common_test/doc/src/ct_hooks_chapter.xml b/lib/common_test/doc/src/ct_hooks_chapter.xml
index 1998f15697..0e4c35e11f 100644
--- a/lib/common_test/doc/src/ct_hooks_chapter.xml
+++ b/lib/common_test/doc/src/ct_hooks_chapter.xml
@@ -374,7 +374,7 @@
<title>Example CTH</title>
<p>The following CTH logs information about a test run into a format
parseable by <seealso marker="kernel:file#consult-1">file:consult/1</seealso>
- (in <c>Kernel</c>):
+ (in Kernel):
</p>
<code>
%%% @doc Common Test Example Common Test Hook module.
@@ -499,13 +499,13 @@
<tag><c>cth_log_redirect</c></tag>
<item>
<p>Built-in</p>
- <p>Captures all <c>error_logger</c> and <c>SASL</c> logging
+ <p>Captures all <c>error_logger</c> and SASL logging
events and prints them to the current test case log. If an event cannot be
associated with a test case, it is printed in the <c>Common Test</c> framework log.
This happens for test cases running in parallel and events occuring
in-between test cases. You can configure the level of
- <seealso marker="sasl:sasl_app"><c>SASL</c></seealso> events report
- using the normal <c>SASL</c> mechanisms.</p>
+ <seealso marker="sasl:sasl_app">SASL</seealso> events report
+ using the normal SASL mechanisms.</p>
</item>
<tag><c>cth_surefire</c></tag>
<item>
diff --git a/lib/common_test/doc/src/ct_netconfc.xml b/lib/common_test/doc/src/ct_netconfc.xml
index 9d1ff25a3a..e6930b30d5 100644
--- a/lib/common_test/doc/src/ct_netconfc.xml
+++ b/lib/common_test/doc/src/ct_netconfc.xml
@@ -201,7 +201,8 @@
information, see module <seealso marker="ct"><c>ct</c></seealso>.</p>
</item>
- <tag><c>host() = <seealso marker="kernel:inet#type-hostname"><c>inet:hostname()</c></seealso> | <seealso marker="kernel:inet#type-ip_address"><c>inet:ip_address()</c></seealso></c></tag>
+ <tag><c>host() = </c><seealso marker="kernel:inet#type-hostname"><c>inet:hostname()</c></seealso>
+ <c> | </c><seealso marker="kernel:inet#type-ip_address"><c>inet:ip_address()</c></seealso></tag>
<item><marker id="type-host"/></item>
<tag><c>key_or_name() = server_id() | target_name()</c></tag>
@@ -218,7 +219,9 @@
<tag><c>notification_content() = [event_time() | simple_xml()]</c></tag>
<item><marker id="type-notification_content"/> </item>
- <tag><c>option() = {ssh, host()} | {port, <seealso marker="kernel:inet#type-port_number"><c>inet:port_number()</c></seealso>} | {timeout, timeout()} | SshConnectOption</c></tag>
+ <tag><c>option() = {ssh, host()} | {port, </c>
+ <seealso marker="kernel:inet#type-port_number"><c>inet:port_number()</c></seealso>
+ <c>} | {timeout, timeout()} | SshConnectOption</c></tag>
<item><marker id="type-option"/>
<p><c>SshConnectOption</c> is any valid option to
diff --git a/lib/common_test/doc/src/ct_ssh.xml b/lib/common_test/doc/src/ct_ssh.xml
index d00737aa5a..137e4c3f1d 100644
--- a/lib/common_test/doc/src/ct_ssh.xml
+++ b/lib/common_test/doc/src/ct_ssh.xml
@@ -64,7 +64,7 @@
<p><c>ConnType = ssh | sftp</c>.</p>
<p>For other types, see
- <seealso marker="ssh:ssh"><c>ssh:ssh(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh"><c>ssh(3)</c></seealso>.</p>
<p>All time-out parameters in <c>ct_ssh</c> functions are values in
milliseconds.</p>
@@ -88,7 +88,7 @@
<tag><c>ssh_sftp_return() = term()</c></tag>
<item><marker id="type-ssh_sftp_return"/>
<p>Return value from an
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp</c></seealso>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp</c></seealso>
function.</p></item>
</taglist>
</section>
@@ -104,7 +104,7 @@
</type>
<desc><marker id="apread-4"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -118,7 +118,7 @@
</type>
<desc><marker id="apread-5"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -132,7 +132,7 @@
</type>
<desc><marker id="apwrite-4"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -146,7 +146,7 @@
</type>
<desc><marker id="apwrite-5"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -160,7 +160,7 @@
</type>
<desc><marker id="aread-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -174,7 +174,7 @@
</type>
<desc><marker id="aread-4"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -188,7 +188,7 @@
</type>
<desc><marker id="awrite-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -202,7 +202,7 @@
</type>
<desc><marker id="awrite-4"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -216,7 +216,7 @@
</type>
<desc><marker id="close-2"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -230,7 +230,7 @@
</type>
<desc><marker id="close-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -310,7 +310,7 @@
</type>
<desc><marker id="del_dir-2"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -324,7 +324,7 @@
</type>
<desc><marker id="del_dir-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -338,7 +338,7 @@
</type>
<desc><marker id="delete-2"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -352,7 +352,7 @@
</type>
<desc><marker id="delete-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -423,7 +423,7 @@
</type>
<desc><marker id="get_file_info-2"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -437,7 +437,7 @@
</type>
<desc><marker id="get_file_info-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -451,7 +451,7 @@
</type>
<desc><marker id="list_dir-2"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -465,7 +465,7 @@
</type>
<desc><marker id="list_dir-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -479,7 +479,7 @@
</type>
<desc><marker id="make_dir-2"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -493,7 +493,7 @@
</type>
<desc><marker id="make_dir-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -507,7 +507,7 @@
</type>
<desc><marker id="make_symlink-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -521,7 +521,7 @@
</type>
<desc><marker id="make_symlink-4"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -535,7 +535,7 @@
</type>
<desc><marker id="open-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -549,7 +549,7 @@
</type>
<desc><marker id="open-4"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -563,7 +563,7 @@
</type>
<desc><marker id="opendir-2"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -577,7 +577,7 @@
</type>
<desc><marker id="opendir-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -591,7 +591,7 @@
</type>
<desc><marker id="position-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -605,7 +605,7 @@
</type>
<desc><marker id="position-4"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -619,7 +619,7 @@
</type>
<desc><marker id="pread-4"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -633,7 +633,7 @@
</type>
<desc><marker id="pread-5"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -647,7 +647,7 @@
</type>
<desc><marker id="pwrite-4"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -661,7 +661,7 @@
</type>
<desc><marker id="pwrite-5"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -675,7 +675,7 @@
</type>
<desc><marker id="read-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -689,7 +689,7 @@
</type>
<desc><marker id="read-4"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -703,7 +703,7 @@
</type>
<desc><marker id="read_file-2"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -717,7 +717,7 @@
</type>
<desc><marker id="read_file-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -731,7 +731,7 @@
</type>
<desc><marker id="read_file_info-2"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -745,7 +745,7 @@
</type>
<desc><marker id="read_file_info-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -759,7 +759,7 @@
</type>
<desc><marker id="read_link-2"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -773,7 +773,7 @@
</type>
<desc><marker id="read_link-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -787,7 +787,7 @@
</type>
<desc><marker id="read_link_info-2"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -801,7 +801,7 @@
</type>
<desc><marker id="read_link_info-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -853,7 +853,7 @@ ChannelId, End, DefaultTimeout)</c></seealso>.</p>
<p>If <c>End</c> is a fun, this fun is called with one argument, the
data value in a received <c>ssh_cm</c> message (see
- <seealso marker="ssh:ssh_connection"><c>ssh:ssh_connection(3)</c></seealso>.
+ <seealso marker="ssh:ssh_connection"><c>ssh_connection(3)</c></seealso>.
The fun is to return either <c>true</c> to end the receiving
operation (and have the so far collected data returned) or
<c>false</c> to wait for more data from the server. Even if a fun
@@ -872,7 +872,7 @@ ChannelId, End, DefaultTimeout)</c></seealso>.</p>
</type>
<desc><marker id="rename-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -886,7 +886,7 @@ ChannelId, End, DefaultTimeout)</c></seealso>.</p>
</type>
<desc><marker id="rename-4"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -1070,7 +1070,7 @@ ChannelId, 0, Data, End, Timeout)</c></seealso>.</p>
</type>
<desc><marker id="write-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -1084,7 +1084,7 @@ ChannelId, 0, Data, End, Timeout)</c></seealso>.</p>
</type>
<desc><marker id="write-4"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -1098,7 +1098,7 @@ ChannelId, 0, Data, End, Timeout)</c></seealso>.</p>
</type>
<desc><marker id="write_file-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -1112,7 +1112,7 @@ ChannelId, 0, Data, End, Timeout)</c></seealso>.</p>
</type>
<desc><marker id="write_file-4"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -1126,7 +1126,7 @@ ChannelId, 0, Data, End, Timeout)</c></seealso>.</p>
</type>
<desc><marker id="write_file_info-3"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
@@ -1140,7 +1140,7 @@ ChannelId, 0, Data, End, Timeout)</c></seealso>.</p>
</type>
<desc><marker id="write_file_info-4"/>
<p>For information and other types, see
- <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ <seealso marker="ssh:ssh_sftp"><c>ssh_sftp(3)</c></seealso>.</p>
</desc>
</func>
</funcs>
diff --git a/lib/common_test/doc/src/ct_telnet.xml b/lib/common_test/doc/src/ct_telnet.xml
index e2a45e894b..eba3c3030d 100644
--- a/lib/common_test/doc/src/ct_telnet.xml
+++ b/lib/common_test/doc/src/ct_telnet.xml
@@ -198,7 +198,7 @@
<item><marker id="type-prompt_regexp"/>
<p>Regular expression matching all possible prompts for a specific
target type. <c>regexp</c> must not have any groups, that is, when
- matching, <c>re:run/3</c> (in <c>STDLIB</c>) must return a list with
+ matching, <c>re:run/3</c> (in STDLIB) must return a list with
one single element.</p></item>
</taglist>
</section>
diff --git a/lib/common_test/doc/src/event_handler_chapter.xml b/lib/common_test/doc/src/event_handler_chapter.xml
index 2978226a19..bd9ed21cb4 100644
--- a/lib/common_test/doc/src/event_handler_chapter.xml
+++ b/lib/common_test/doc/src/event_handler_chapter.xml
@@ -50,7 +50,7 @@
pass the information on. The event handlers are Erlang modules
implemented by the <c>Common Test</c> user according to the <c>gen_event</c>
behavior (for details, see module
- <seealso marker="stdlib:gen_event"><c>stdlib:gen_event</c></seealso> and
+ <seealso marker="stdlib:gen_event"><c>gen_event</c></seealso> and
section
<seealso marker="doc/design_principles:events"><c>gen_event Behaviour</c></seealso>
in OTP Design Principles in the System Documentation).
@@ -69,8 +69,8 @@
manager, either by telling <c>Common Test</c> to install them before the test
run (described later), or by adding the handlers dynamically during the test
run using
- <seealso marker="stdlib:gen_event#add_handler-3"><c>stdlib:gen_event:add_handler/3</c></seealso> or
- <seealso marker="stdlib:gen_event#add_sup_handler-3"><c>stdlib:gen_event:add_sup_handler/3</c></seealso>.
+ <seealso marker="stdlib:gen_event#add_handler-3"><c>gen_event:add_handler/3</c></seealso> or
+ <seealso marker="stdlib:gen_event#add_sup_handler-3"><c>gen_event:add_sup_handler/3</c></seealso>.
In the latter scenario, the reference of the <c>Common Test</c> event manager is
required. To get it, call
<seealso marker="ct#get_event_mgr_ref-0"><c>ct:get_event_mgr_ref/0</c></seealso>
diff --git a/lib/common_test/doc/src/introduction.xml b/lib/common_test/doc/src/introduction.xml
index 40724f24e9..df12bea6dd 100644
--- a/lib/common_test/doc/src/introduction.xml
+++ b/lib/common_test/doc/src/introduction.xml
@@ -45,7 +45,7 @@
</list>
<p><c>Common Test</c> also integrates use of the OTP
<seealso marker="tools:cover">cover</seealso> tool in application
- <c>Tools</c> for code coverage analysis of Erlang/OTP programs.</p>
+ Tools for code coverage analysis of Erlang/OTP programs.</p>
<p><c>Common Test</c> executes test suite programs automatically,
without operator interaction. Test progress and results are
diff --git a/lib/common_test/doc/src/notes.xml b/lib/common_test/doc/src/notes.xml
index 0a8433c8c4..32ae699c7a 100644
--- a/lib/common_test/doc/src/notes.xml
+++ b/lib/common_test/doc/src/notes.xml
@@ -46,6 +46,13 @@
<p>
Own Id: OTP-13475</p>
</item>
+ <item>
+ <p>
+ Common Test printed incorrect timestamps for received
+ error reports.</p>
+ <p>
+ Own Id: OTP-13615 Aux Id: seq13124 </p>
+ </item>
</list>
</section>
diff --git a/lib/common_test/doc/src/run_test_chapter.xml b/lib/common_test/doc/src/run_test_chapter.xml
index 43e36adfb6..76e306c4ed 100644
--- a/lib/common_test/doc/src/run_test_chapter.xml
+++ b/lib/common_test/doc/src/run_test_chapter.xml
@@ -274,7 +274,7 @@
<note><p>Directories passed to <c>Common Test</c> can have either relative or absolute paths.</p></note>
- <note><p>Any start flags to the Erlang runtime system (application <c>ERTS</c>) can also be passed as
+ <note><p>Any start flags to the Erlang runtime system (application ERTS) can also be passed as
parameters to <c>ct_run</c>. It is, for example, useful to be able to
pass directories to be added to the Erlang code server search path
with flag <c>-pa</c> or <c>-pz</c>. If you have common help- or library
@@ -286,7 +286,7 @@
<p>The absolute path of directory <c>chat_server/ebin</c>
is here passed to the code server. This is essential because relative
paths are stored by the code server as relative, and <c>Common Test</c> changes
- the current working directory of <c>ERTS</c> during the test run.</p>
+ the current working directory of ERTS during the test run.</p>
</note>
<p>The <c>ct_run</c> program sets the exit status before shutting down. The following values
@@ -1258,7 +1258,7 @@
<p>The minor log files contain full details of every single test
case, each in a separate file. This way, it is
straightforward to compare the latest results to that of previous
- test runs, even if the set of test cases changes. If application <c>SASL</c>
+ test runs, even if the set of test cases changes. If application SASL
is running, its logs are also printed to the current minor log file by the
<seealso marker="common_test:ct_hooks_chapter#builtin_cths">
cth_log_redirect built-in hook</seealso>.
diff --git a/lib/common_test/doc/src/write_test_chapter.xml b/lib/common_test/doc/src/write_test_chapter.xml
index 83daf771a6..7bd2ccf588 100644
--- a/lib/common_test/doc/src/write_test_chapter.xml
+++ b/lib/common_test/doc/src/write_test_chapter.xml
@@ -269,10 +269,10 @@
<p>As parameter <c>Config</c> is a list of key-value tuples, that is,
a data type called a property list, it can be handled by the
- <seealso marker="stdlib:proplists"><c>stdlib:proplists</c></seealso> module.
+ <seealso marker="stdlib:proplists"><c>proplists</c></seealso> module.
A value can, for example, be searched for and returned with function
<seealso marker="stdlib:proplists#get_value-2"><c>proplists:get_value/2</c></seealso>.
- Also, or alternatively, the general <seealso marker="stdlib:lists"><c>stdlib:lists</c></seealso>
+ Also, or alternatively, the general <seealso marker="stdlib:lists"><c>lists</c></seealso>
module contains useful functions. Normally, the only operations
performed on <c>Config</c> is insert (adding a tuple to the head of the list)
and lookup. <c>Common Test</c> provides a simple macro named <c>?config</c>,
@@ -652,7 +652,7 @@
<title>Parallel Test Cases and I/O</title>
<p>A parallel test case has a private I/O server as its group leader.
(For a description of the group leader concept, see
- <seealso marker="erts:index"><c>ERTS</c></seealso>).
+ <seealso marker="erts:index">ERTS</seealso>).
The central I/O server process, which handles the output from
regular test cases and configuration functions, does not respond to I/O messages
during execution of parallel groups. This is important to understand
@@ -1032,8 +1032,8 @@
6. Categorized error, importance = 99</pre>
<p>The arguments <c>Format</c> and <c>FormatArgs</c> in <c>ct:log/print/pal</c> are
- always passed on to the <c>stdlib</c> function <c>io:format/3</c> (For details,
- see the <seealso marker="stdlib:io"><c>stdlib:io</c></seealso> manual page).</p>
+ always passed on to the STDLIB function <c>io:format/3</c> (For details,
+ see the <seealso marker="stdlib:io"><c>io</c></seealso> manual page).</p>
<p><c>ct:pal/4</c> and <c>ct:log/5</c> add headers to strings being printed to the
log file. The strings are also wrapped in div tags with a CSS class
diff --git a/lib/common_test/src/ct.erl b/lib/common_test/src/ct.erl
index cae7bea406..d7ae81a5ce 100644
--- a/lib/common_test/src/ct.erl
+++ b/lib/common_test/src/ct.erl
@@ -282,7 +282,7 @@ step(TestDir,Suite,Case,Opts) ->
%%% <c>&gt; ct_telnet:cmd(unix_telnet, "ls .").</c><br/>
%%% <c>{ok,["ls","file1 ...",...]}</c></p>
start_interactive() ->
- ct_util:start(interactive),
+ _ = ct_util:start(interactive),
ok.
%%%-----------------------------------------------------------------
diff --git a/lib/common_test/src/ct_config.erl b/lib/common_test/src/ct_config.erl
index b499bc8b05..99de311570 100644
--- a/lib/common_test/src/ct_config.erl
+++ b/lib/common_test/src/ct_config.erl
@@ -119,7 +119,8 @@ call(Msg) ->
end.
return({To,Ref},Result) ->
- To ! {Ref, Result}.
+ To ! {Ref, Result},
+ ok.
loop(StartDir) ->
receive
@@ -128,11 +129,11 @@ loop(StartDir) ->
return(From,Result),
loop(StartDir);
{{set_default_config,{Config,Scope}},From} ->
- set_config(Config,{true,Scope}),
+ _ = set_config(Config,{true,Scope}),
return(From,ok),
loop(StartDir);
{{set_default_config,{Name,Config,Scope}},From} ->
- set_config(Name,Config,{true,Scope}),
+ _ = set_config(Name,Config,{true,Scope}),
return(From,ok),
loop(StartDir);
{{delete_default_config,Scope},From} ->
@@ -149,7 +150,7 @@ loop(StartDir) ->
loop(StartDir);
{{stop},From} ->
ets:delete(?attr_table),
- file:set_cwd(StartDir),
+ ok = file:set_cwd(StartDir),
return(From,ok)
end.
@@ -257,7 +258,7 @@ read_config_files(Opts) ->
read_config_files_int([{Callback, File}|Files], FunToSave) ->
case Callback:read_config(File) of
{ok, Config} ->
- FunToSave(Config, Callback, File),
+ _ = FunToSave(Config, Callback, File),
read_config_files_int(Files, FunToSave);
{error, {ErrorName, ErrorDetail}} ->
{user_error, {ErrorName, File, ErrorDetail}};
@@ -267,6 +268,15 @@ read_config_files_int([{Callback, File}|Files], FunToSave) ->
read_config_files_int([], _FunToSave) ->
ok.
+
+read_config_files(ConfigFiles, FunToSave) ->
+ case read_config_files_int(ConfigFiles, FunToSave) of
+ {user_error, Error} ->
+ {error, Error};
+ ok ->
+ ok
+ end.
+
store_config(Config, Callback, File) when is_tuple(Config) ->
store_config([Config], Callback, File);
@@ -455,8 +465,12 @@ reload_conf(KeyOrName) ->
undefined;
HandlerList ->
HandlerList2 = lists:usort(HandlerList),
- read_config_files_int(HandlerList2, fun rewrite_config/3),
- get_config(KeyOrName)
+ case read_config_files(HandlerList2, fun rewrite_config/3) of
+ ok ->
+ get_config(KeyOrName);
+ Error ->
+ Error
+ end
end.
release_allocated() ->
@@ -490,16 +504,16 @@ associate(Name,_Key,Configs) ->
associate_int(Name,Configs,os:getenv("COMMON_TEST_ALIAS_TOP")).
associate_int(Name,Configs,"true") ->
- lists:map(fun({K,_Config}) ->
+ lists:foreach(fun({K,_Config}) ->
Cs = ets:match_object(
?attr_table,
#ct_conf{key=element(1,K),
name='_UNDEF',_='_'}),
[ets:insert(?attr_table,C#ct_conf{name=Name})
|| C <- Cs]
- end,Configs);
+ end,Configs);
associate_int(Name,Configs,_) ->
- lists:map(fun({K,Config}) ->
+ lists:foreach(fun({K,Config}) ->
Key = if is_tuple(K) -> element(1,K);
is_atom(K) -> K
end,
@@ -511,7 +525,7 @@ associate_int(Name,Configs,_) ->
[ets:insert(?attr_table,C#ct_conf{name=Name,
value=Config})
|| C <- Cs]
- end,Configs).
+ end,Configs).
@@ -576,7 +590,7 @@ encrypt_config_file(SrcFileName, EncryptFileName, {file,KeyFile}) ->
end;
encrypt_config_file(SrcFileName, EncryptFileName, {key,Key}) ->
- crypto:start(),
+ _ = crypto:start(),
{Key,IVec} = make_crypto_key(Key),
case file:read_file(SrcFileName) of
{ok,Bin0} ->
@@ -615,7 +629,7 @@ decrypt_config_file(EncryptFileName, TargetFileName, {file,KeyFile}) ->
end;
decrypt_config_file(EncryptFileName, TargetFileName, {key,Key}) ->
- crypto:start(),
+ _ = crypto:start(),
{Key,IVec} = make_crypto_key(Key),
case file:read_file(EncryptFileName) of
{ok,Bin} ->
@@ -778,14 +792,13 @@ prepare_config_list(Args) ->
% TODO: add logging of the loaded configuration file to the CT FW log!!!
add_config(Callback, []) ->
- read_config_files_int([{Callback, []}], fun store_config/3);
+ read_config_files([{Callback, []}], fun store_config/3);
add_config(Callback, [File|_Files]=Config) when is_list(File) ->
lists:foreach(fun(CfgStr) ->
- read_config_files_int([{Callback, CfgStr}], fun store_config/3) end,
+ read_config_files([{Callback, CfgStr}], fun store_config/3) end,
Config);
add_config(Callback, [C|_]=Config) when is_integer(C) ->
- read_config_files_int([{Callback, Config}], fun store_config/3),
- ok.
+ read_config_files([{Callback, Config}], fun store_config/3).
remove_config(Callback, Config) ->
ets:match_delete(?attr_table,
diff --git a/lib/common_test/src/ct_framework.erl b/lib/common_test/src/ct_framework.erl
index eb32f7f3fc..104515e57e 100644
--- a/lib/common_test/src/ct_framework.erl
+++ b/lib/common_test/src/ct_framework.erl
@@ -128,7 +128,7 @@ init_tc1(?MODULE,_,error_in_suite,_,[Config0]) when is_list(Config0) ->
ct_event:notify(#event{name=tc_start,
node=node(),
data={?MODULE,error_in_suite}}),
- ct_suite_init(?MODULE,error_in_suite,[],Config0),
+ _ = ct_suite_init(?MODULE,error_in_suite,[],Config0),
case ?val(error,Config0) of
undefined ->
{fail,"unknown_error_in_suite"};
@@ -212,7 +212,7 @@ init_tc2(Mod,Suite,Func,HookFunc,SuiteInfo,MergeResult,Config) ->
%% timetrap must be handled before require
MergedInfo = timetrap_first(MergeResult, [], []),
%% tell logger to use specified style sheet
- case lists:keysearch(stylesheet,1,MergeResult++Config) of
+ _ = case lists:keysearch(stylesheet,1,MergeResult++Config) of
{value,{stylesheet,SSFile}} ->
ct_logs:set_stylesheet(Func,add_data_dir(SSFile,Config));
_ ->
@@ -632,10 +632,10 @@ try_set_default(Name,Key,Info,Where) ->
{_,[]} ->
no_default;
{'_UNDEF',_} ->
- [ct_config:set_default_config([CfgVal],Where) || CfgVal <- CfgElems],
+ _ = [ct_config:set_default_config([CfgVal],Where) || CfgVal <- CfgElems],
ok;
_ ->
- [ct_config:set_default_config(Name,[CfgVal],Where) || CfgVal <- CfgElems],
+ _ = [ct_config:set_default_config(Name,[CfgVal],Where) || CfgVal <- CfgElems],
ok
end.
@@ -1315,7 +1315,7 @@ report(What,Data) ->
%% top level test index page needs to be refreshed
TestName = filename:basename(?val(topdir, Data), ".logs"),
RunDir = ?val(rundir, Data),
- ct_logs:make_all_suites_index({TestName,RunDir}),
+ _ = ct_logs:make_all_suites_index({TestName,RunDir}),
ok;
tests_start ->
ok;
diff --git a/lib/common_test/src/ct_ftp.erl b/lib/common_test/src/ct_ftp.erl
index 48914864e4..84e664b387 100644
--- a/lib/common_test/src/ct_ftp.erl
+++ b/lib/common_test/src/ct_ftp.erl
@@ -292,7 +292,7 @@ init(KeyOrName,{IP,Port},{Username,Password}) ->
end.
ftp_connect(IP,Port,Username,Password) ->
- inets:start(),
+ _ = inets:start(),
case inets:start(ftpc,[{host,IP},{port,Port}]) of
{ok,FtpPid} ->
case ftp:user(FtpPid,Username,Password) of
diff --git a/lib/common_test/src/ct_gen_conn.erl b/lib/common_test/src/ct_gen_conn.erl
index 23ba1ab981..8b59d3ab23 100644
--- a/lib/common_test/src/ct_gen_conn.erl
+++ b/lib/common_test/src/ct_gen_conn.erl
@@ -27,7 +27,7 @@
-export([start/4, stop/1, get_conn_pid/1, check_opts/1]).
-export([call/2, call/3, return/2, do_within_time/2]).
--export([log/3, start_log/1, cont_log/2, end_log/0]).
+-export([log/3, start_log/1, cont_log/2, cont_log_no_timestamp/2, end_log/0]).
%%----------------------------------------------------------------------
%% Exported types
@@ -175,6 +175,14 @@ cont_log(Format,Args) ->
log(cont_log,[Format,Args]).
%%%-----------------------------------------------------------------
+%%% @spec cont_log_no_timestamp(Format,Args) -> ok
+%%%
+%%% @doc Log activities on the current connection (tool-internal use only).
+%%% @see ct_logs:cont_log/2
+cont_log_no_timestamp(Format,Args) ->
+ log(cont_log_no_timestamp,[Format,Args]).
+
+%%%-----------------------------------------------------------------
%%% @spec end_log() -> ok
%%%
%%% @doc Log activities on the current connection (tool-internal use only).
diff --git a/lib/common_test/src/ct_groups.erl b/lib/common_test/src/ct_groups.erl
index dd04c5410a..1375e7dcc7 100644
--- a/lib/common_test/src/ct_groups.erl
+++ b/lib/common_test/src/ct_groups.erl
@@ -402,12 +402,7 @@ expand(Mod, Name, Defs) ->
end.
make_all_conf(Dir, Mod, Props, TestSpec) ->
- case code:is_loaded(Mod) of
- false ->
- code:load_abs(filename:join(Dir,atom_to_list(Mod)));
- _ ->
- ok
- end,
+ _ = load_abs(Dir, Mod),
make_all_conf(Mod, Props, TestSpec).
make_all_conf(Mod, Props, TestSpec) ->
@@ -428,16 +423,19 @@ make_all_conf(Mod, Props, TestSpec) ->
end.
make_conf(Dir, Mod, Name, Props, TestSpec) ->
+ _ = load_abs(Dir, Mod),
+ make_conf(Mod, Name, Props, TestSpec).
+
+load_abs(Dir, Mod) ->
case code:is_loaded(Mod) of
false ->
code:load_abs(filename:join(Dir,atom_to_list(Mod)));
_ ->
ok
- end,
- make_conf(Mod, Name, Props, TestSpec).
+ end.
make_conf(Mod, Name, Props, TestSpec) ->
- case code:is_loaded(Mod) of
+ _ = case code:is_loaded(Mod) of
false ->
code:load_file(Mod);
_ ->
diff --git a/lib/common_test/src/ct_hooks.erl b/lib/common_test/src/ct_hooks.erl
index 5422d449fd..c9a4abb5ee 100644
--- a/lib/common_test/src/ct_hooks.erl
+++ b/lib/common_test/src/ct_hooks.erl
@@ -408,7 +408,8 @@ catch_apply(M,F,A, Default) ->
maybe_start_locker(Mod,GroupName,Opts) ->
case lists:member(parallel,Opts) of
true ->
- {ok, _Pid} = ct_hooks_lock:start({Mod,GroupName});
+ {ok, _Pid} = ct_hooks_lock:start({Mod,GroupName}),
+ ok;
false ->
ok
end.
diff --git a/lib/common_test/src/ct_hooks_lock.erl b/lib/common_test/src/ct_hooks_lock.erl
index f41f259f7b..fea298e535 100644
--- a/lib/common_test/src/ct_hooks_lock.erl
+++ b/lib/common_test/src/ct_hooks_lock.erl
@@ -82,7 +82,7 @@ init(Id) ->
%% @doc Handling call messages
handle_call({stop,Id}, _From, #state{ id = Id, requests = Reqs } = State) ->
- [gen_server:reply(Req, locker_stopped) || {Req,_ReqId} <- Reqs],
+ _ = [gen_server:reply(Req, locker_stopped) || {Req,_ReqId} <- Reqs],
{stop, normal, stopped, State};
handle_call({stop,_Id}, _From, State) ->
{reply, stopped, State};
diff --git a/lib/common_test/src/ct_logs.erl b/lib/common_test/src/ct_logs.erl
index 29b38e9748..9282a9f81d 100644
--- a/lib/common_test/src/ct_logs.erl
+++ b/lib/common_test/src/ct_logs.erl
@@ -32,7 +32,7 @@
-export([init/2, close/2, init_tc/1, end_tc/1]).
-export([register_groupleader/2, unregister_groupleader/1]).
-export([get_log_dir/0, get_log_dir/1]).
--export([log/3, start_log/1, cont_log/2, end_log/0]).
+-export([log/3, start_log/1, cont_log/2, cont_log_no_timestamp/2, end_log/0]).
-export([set_stylesheet/2, clear_stylesheet/1]).
-export([add_external_logs/1, add_link/3]).
-export([make_last_run_index/0]).
@@ -137,7 +137,8 @@ close(Info, StartDir) ->
%% so we need to use a local copy of the log cache data
LogCacheBin =
case make_last_run_index() of
- {error,_} -> % log server not responding
+ {error, Reason} -> % log server not responding
+ io:format("Warning! ct_logs not responding: ~p~n", [Reason]),
undefined;
LCB ->
LCB
@@ -149,7 +150,7 @@ close(Info, StartDir) ->
ok;
CacheBin ->
%% save final version of the log cache to file
- file:write_file(?log_cache_name,CacheBin),
+ _ = file:write_file(?log_cache_name,CacheBin),
put(ct_log_cache,undefined)
end
end,
@@ -175,12 +176,12 @@ close(Info, StartDir) ->
Error ->
io:format("Warning! Cleanup failed: ~p~n", [Error])
end,
- make_all_suites_index(stop),
+ _ = make_all_suites_index(stop),
make_all_runs_index(stop),
Cache2File();
true ->
- file:set_cwd(".."),
- make_all_suites_index(stop),
+ ok = file:set_cwd(".."),
+ _ = make_all_suites_index(stop),
make_all_runs_index(stop),
Cache2File(),
case ct_util:get_profile_data(browser, StartDir) of
@@ -240,7 +241,7 @@ call(Msg) ->
Pid ->
MRef = erlang:monitor(process,Pid),
Ref = make_ref(),
- ?MODULE ! {Msg,{self(),Ref}},
+ Pid ! {Msg,{self(),Ref}},
receive
{Ref, Result} ->
erlang:demonitor(MRef, [flush]),
@@ -251,16 +252,30 @@ call(Msg) ->
end.
return({To,Ref},Result) ->
- To ! {Ref, Result}.
+ To ! {Ref, Result},
+ ok.
cast(Msg) ->
case whereis(?MODULE) of
undefined ->
- {error,does_not_exist};
+ io:format("Warning: ct_logs not started~n"),
+ {_,_,_,_,_,_,Content,_} = Msg,
+ FormatArgs = get_format_args(Content),
+ _ = [io:format(Format, Args) || {Format, Args} <- FormatArgs],
+ ok;
_Pid ->
- ?MODULE ! Msg
+ ?MODULE ! Msg,
+ ok
end.
+get_format_args(Content) ->
+ lists:map(fun(C) ->
+ case C of
+ {_, FA, _} -> FA;
+ {_, _} -> C
+ end
+ end, Content).
+
%%%-----------------------------------------------------------------
%%% @spec init_tc(RefreshLog) -> ok
%%%
@@ -269,7 +284,7 @@ cast(Msg) ->
%%% <p>This function is called by ct_framework:init_tc/3</p>
init_tc(RefreshLog) ->
call({init_tc,self(),group_leader(),RefreshLog}),
- io:format(["$tc_html",xhtml("", "<br />")]),
+ tc_io_format(group_leader(), xhtml("", "<br />"), []),
ok.
%%%-----------------------------------------------------------------
@@ -358,6 +373,20 @@ cont_log(Format,Args) ->
ok.
%%%-----------------------------------------------------------------
+%%% @spec cont_log_no_timestamp(Format,Args) -> ok
+%%%
+%%% @doc Adds information about an activity (tool-internal use only).
+%%%
+%%% @see start_log/1
+%%% @see end_log/0
+cont_log_no_timestamp([],[]) ->
+ ok;
+cont_log_no_timestamp(Format,Args) ->
+ cast({log,sync,self(),group_leader(),ct_internal,?MAX_IMPORTANCE,
+ [{Format,Args}],true}),
+ ok.
+
+%%%-----------------------------------------------------------------
%%% @spec end_log() -> ok
%%%
%%% @doc Ends the logging of an activity (tool-internal use only).
@@ -580,7 +609,6 @@ div_header(Class,Printer) ->
div_footer() ->
"</pre></div>\n<pre>".
-
maybe_log_timestamp() ->
{MS,S,US} = ?now,
case get(log_timestamp) of
@@ -631,7 +659,7 @@ logger(Parent, Mode, Verbosity) ->
end,
%%! <---
- file:make_dir(Dir),
+ _ = file:make_dir(Dir),
AbsDir = ?abs(Dir),
put(ct_run_dir, AbsDir),
@@ -671,7 +699,7 @@ logger(Parent, Mode, Verbosity) ->
end
end,
- test_server_io:start_link(),
+ _ = test_server_io:start_link(),
MiscIoName = filename:join(Dir, ?misc_io_log),
{ok,MiscIoFd} = file:open(MiscIoName,
[write,{encoding,utf8}]),
@@ -701,13 +729,13 @@ logger(Parent, Mode, Verbosity) ->
ct_event:notify(#event{name=start_logging,node=node(),
data=AbsDir}),
make_all_runs_index(start),
- make_all_suites_index(start),
+ _ = make_all_suites_index(start),
case Mode of
interactive -> interactive_link();
_ -> ok
end,
- file:set_cwd(Dir),
- make_last_run_index(Time),
+ ok = file:set_cwd(Dir),
+ _ = make_last_run_index(Time),
CtLogFd = open_ctlog(?misc_io_log),
io:format(CtLogFd,int_header()++int_footer(),
[log_timestamp(?now),"Common Test Logger started"]),
@@ -721,13 +749,13 @@ logger(Parent, Mode, Verbosity) ->
GenLvl -> io:format(CtLogFd, "~-25s~3w~n",
["general level",GenLvl])
end,
- [begin put({verbosity,Cat},VLvl),
- if Cat == '$unspecified' ->
+ _ = [begin put({verbosity,Cat},VLvl),
+ if Cat == '$unspecified' ->
ok;
- true ->
+ true ->
io:format(CtLogFd, "~-25w~3w~n", [Cat,VLvl])
- end
- end || {Cat,VLvl} <- Verbosity],
+ end
+ end || {Cat,VLvl} <- Verbosity],
io:nl(CtLogFd),
TcEscChars = case application:get_env(common_test, esc_chars) of
{ok,ECBool} -> ECBool;
@@ -800,10 +828,11 @@ logger_loop(State) ->
%% make sure no IO for this test case from the
%% CT logger gets rejected
test_server:permit_io(GL, self()),
- print_style(GL,GL,State#logger_state.stylesheet),
+ IoFormat = fun tc_io_format/3,
+ print_style(GL, IoFormat, State#logger_state.stylesheet),
set_evmgr_gl(GL),
TCGLs = add_tc_gl(TCPid,GL,State),
- if not RefreshLog ->
+ _ = if not RefreshLog ->
ok;
true ->
make_last_run_index(State#logger_state.start_time)
@@ -830,7 +859,7 @@ logger_loop(State) ->
return(From,{ok,filename:basename(State#logger_state.log_dir)}),
logger_loop(State);
{make_last_run_index,From} ->
- make_last_run_index(State#logger_state.start_time),
+ _ = make_last_run_index(State#logger_state.start_time),
return(From,get(ct_log_cache)),
logger_loop(State);
{set_stylesheet,_,SSFile} when State#logger_state.stylesheet ==
@@ -931,7 +960,7 @@ print_to_log(sync, FromPid, Category, TCGL, Content, EscChars, State) ->
if FromPid /= TCGL ->
IoFun = create_io_fun(FromPid, CtLogFd, EscChars),
IoList = lists:foldl(IoFun, [], Content),
- try io:format(TCGL,["$tc_html","~ts"], [IoList]) of
+ try tc_io_format(TCGL, "~ts", [IoList]) of
ok -> ok
catch
_:_ ->
@@ -962,7 +991,7 @@ print_to_log(async, FromPid, Category, TCGL, Content, EscChars, State) ->
case erlang:is_process_alive(TCGL) of
true ->
- try io:format(TCGL, ["$tc_html","~ts"],
+ try tc_io_format(TCGL, "~ts",
[lists:foldl(IoFun,[],Content)]) of
_ -> ok
catch
@@ -1113,27 +1142,25 @@ open_ctlog(MiscIoName) ->
"View I/O logged after the test run</a></li>\n</ul>\n",
[MiscIoName,MiscIoName]),
- print_style(Fd,group_leader(),undefined),
+ print_style(Fd, fun io:format/3, undefined),
io:format(Fd,
xhtml("<br><h2>Progress Log</h2>\n<pre>\n",
"<br />\n<h4>PROGRESS LOG</h4>\n<pre>\n"), []),
Fd.
-print_style(Fd,GL,undefined) ->
+print_style(Fd, IoFormat, undefined) ->
case basic_html() of
true ->
Style = "<style>\n
div.ct_internal { background:lightgrey; color:black; }\n
div.default { background:lightgreen; color:black; }\n
</style>\n",
- if Fd == GL -> io:format(["$tc_html",Style], []);
- true -> io:format(Fd, Style, [])
- end;
+ IoFormat(Fd, Style, []);
_ ->
ok
end;
-print_style(Fd,GL,StyleSheet) ->
+print_style(Fd, IoFormat, StyleSheet) ->
case file:read_file(StyleSheet) of
{ok,Bin} ->
Str = b2s(Bin,encoding(StyleSheet)),
@@ -1146,35 +1173,54 @@ print_style(Fd,GL,StyleSheet) ->
N1 -> N1
end,
if (Pos0 == 0) and (Pos1 /= 0) ->
- print_style_error(Fd,GL,StyleSheet,missing_style_start_tag);
+ print_style_error(Fd, IoFormat,
+ StyleSheet, missing_style_start_tag);
(Pos0 /= 0) and (Pos1 == 0) ->
- print_style_error(Fd,GL,StyleSheet,missing_style_end_tag);
+ print_style_error(Fd, IoFormat,
+ StyleSheet,missing_style_end_tag);
Pos0 /= 0 ->
Style = string:sub_string(Str,Pos0,Pos1+7),
- if Fd == GL -> io:format(Fd,["$tc_html","~ts\n"],[Style]);
- true -> io:format(Fd,"~ts\n",[Style])
- end;
+ IoFormat(Fd,"~ts\n",[Style]);
Pos0 == 0 ->
- if Fd == GL -> io:format(Fd,["$tc_html","<style>\n~ts</style>\n"],[Str]);
- true -> io:format(Fd,"<style>\n~ts</style>\n",[Str])
- end
+ IoFormat(Fd,"<style>\n~ts</style>\n",[Str])
end;
{error,Reason} ->
- print_style_error(Fd,GL,StyleSheet,Reason)
+ print_style_error(Fd,IoFormat,StyleSheet,Reason)
end.
-print_style_error(Fd,GL,StyleSheet,Reason) ->
+print_style_error(Fd, IoFormat, StyleSheet, Reason) ->
IO = io_lib:format("\n<!-- Failed to load stylesheet ~ts: ~p -->\n",
[StyleSheet,Reason]),
- if Fd == GL -> io:format(Fd,["$tc_html",IO],[]);
- true -> io:format(Fd,IO,[])
- end,
- print_style(Fd,GL,undefined).
+ IoFormat(Fd, IO, []),
+ print_style(Fd, IoFormat, undefined).
close_ctlog(Fd) ->
io:format(Fd, "\n</pre>\n", []),
io:format(Fd, [xhtml("<br><br>\n", "<br /><br />\n") | footer()], []),
- file:close(Fd).
+ ok = file:close(Fd).
+
+%%%-----------------------------------------------------------------
+%%% tc_io_format/3
+%%% Tell common_test's IO server (group leader) not to escape
+%%% HTML characters.
+
+-spec tc_io_format(io:device(), io:format(), [term()]) -> 'ok'.
+
+tc_io_format(Fd, Format0, Args) ->
+ %% We know that the specially wrapped format string is handled
+ %% by our IO server, but Dialyzer does not and would tell us
+ %% that the call to io:format/3 would fail. Therefore, we must
+ %% fool dialyzer.
+
+ Format = case cloaked_true() of
+ true -> ["$tc_html",Format0];
+ false -> Format0 %Never happens.
+ end,
+ io:format(Fd, Format, Args).
+
+%% Return 'true', but let dialyzer think that a boolean is returned.
+cloaked_true() ->
+ is_process_alive(self()).
%%%-----------------------------------------------------------------
@@ -1755,7 +1801,7 @@ count_cases(Dir) ->
%% file yet.
{0,0,0,0};
Summary ->
- write_summary(SumFile, Summary),
+ _ = write_summary(SumFile, Summary),
Summary
end;
{error, Reason} ->
@@ -2070,7 +2116,7 @@ interactive_link() ->
"</body>\n",
"</html>\n"
],
- file:write_file("last_interactive.html",unicode:characters_to_binary(Body)),
+ _ = file:write_file("last_interactive.html",unicode:characters_to_binary(Body)),
io:format("~n~nUpdated ~ts\n"
"Any CT activities will be logged here\n",
[?abs("last_interactive.html")]).
@@ -2201,9 +2247,9 @@ runentry(Dir, _, _) ->
write_totals_file(Name,Label,Logs,Totals) ->
AbsName = ?abs(Name),
notify_and_lock_file(AbsName),
- force_write_file(AbsName,
- term_to_binary({atom_to_list(node()),
- Label,Logs,Totals})),
+ _ = force_write_file(AbsName,
+ term_to_binary({atom_to_list(node()),
+ Label,Logs,Totals})),
notify_and_unlock_file(AbsName).
%% this function needs to convert from old formats to new so that old
@@ -2248,7 +2294,7 @@ read_totals_file(Name) ->
Result.
force_write_file(Name,Contents) ->
- force_delete(Name),
+ _ = force_delete(Name),
file:write_file(Name,Contents).
force_delete(Name) ->
@@ -2799,18 +2845,18 @@ get_cache_data({ok,CacheBin}) ->
true ->
{ok,CacheRec};
false ->
- file:delete(?log_cache_name),
+ _ = file:delete(?log_cache_name),
{error,old_cache_file}
end;
_ ->
- file:delete(?log_cache_name),
+ _ = file:delete(?log_cache_name),
{error,invalid_cache_file}
end;
get_cache_data(NoCache) ->
NoCache.
cache_vsn() ->
- application:load(common_test),
+ _ = application:load(common_test),
case application:get_key(common_test,vsn) of
{ok,VSN} ->
VSN;
diff --git a/lib/common_test/src/ct_make.erl b/lib/common_test/src/ct_make.erl
index e7a9cfa843..f22959d457 100644
--- a/lib/common_test/src/ct_make.erl
+++ b/lib/common_test/src/ct_make.erl
@@ -342,5 +342,7 @@ check_includes2(Epp, File, ObjMTime) ->
epp:close(Epp),
false;
{error, _Error} ->
+ check_includes2(Epp, File, ObjMTime);
+ {warning, _Warning} ->
check_includes2(Epp, File, ObjMTime)
end.
diff --git a/lib/common_test/src/ct_master.erl b/lib/common_test/src/ct_master.erl
index c4905b316f..4eef27d2a5 100644
--- a/lib/common_test/src/ct_master.erl
+++ b/lib/common_test/src/ct_master.erl
@@ -376,7 +376,7 @@ init_master(Parent,NodeOptsList,EvHandlers,MasterLogDir,LogDirs,
end,
%% start master event manager and add default handler
- ct_master_event:start_link(),
+ {ok, _} = start_ct_master_event(),
ct_master_event:add_handler(),
%% add user handlers for master event manager
Add = fun({H,Args}) ->
@@ -398,6 +398,14 @@ init_master(Parent,NodeOptsList,EvHandlers,MasterLogDir,LogDirs,
end,
init_master1(Parent,NodeOptsList,InitOptions,LogDirs).
+start_ct_master_event() ->
+ case ct_master_event:start_link() of
+ {error, {already_started, Pid}} ->
+ {ok, Pid};
+ Else ->
+ Else
+ end.
+
init_master1(Parent,NodeOptsList,InitOptions,LogDirs) ->
{Inaccessible,NodeOptsList1,InitOptions1} = init_nodes(NodeOptsList,
InitOptions),
@@ -658,7 +666,7 @@ refresh_logs([D|Dirs],Refreshed) ->
{ok,Cwd} = file:get_cwd(),
case catch ct_run:refresh_logs(D) of
{'EXIT',Reason} ->
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
refresh_logs(Dirs,[{D,{error,Reason}}|Refreshed]);
Result ->
refresh_logs(Dirs,[{D,Result}|Refreshed])
@@ -701,7 +709,7 @@ init_node_ctrl(MasterPid,Cookie,Opts) ->
end,
%% start a local event manager
- ct_event:start_link(),
+ {ok, _} = start_ct_event(),
ct_event:add_handler([{master,MasterPid}]),
%% log("Running test with options: ~p~n", [Opts]),
@@ -721,6 +729,14 @@ init_node_ctrl(MasterPid,Cookie,Opts) ->
"Can't report result!~n~n", [MasterNode])
end.
+start_ct_event() ->
+ case ct_event:start_link() of
+ {error, {already_started, Pid}} ->
+ {ok, Pid};
+ Else ->
+ Else
+ end.
+
%%%-----------------------------------------------------------------
%%% Event handling
%%%-----------------------------------------------------------------
@@ -778,7 +794,7 @@ reply(Result,To) ->
ok.
init_nodes(NodeOptions, InitOptions)->
- ping_nodes(NodeOptions),
+ _ = ping_nodes(NodeOptions),
start_nodes(InitOptions),
eval_on_nodes(InitOptions),
{Inaccessible, NodeOptions1}=ping_nodes(NodeOptions),
diff --git a/lib/common_test/src/ct_master_logs.erl b/lib/common_test/src/ct_master_logs.erl
index 39f87a7f09..52003f752d 100644
--- a/lib/common_test/src/ct_master_logs.erl
+++ b/lib/common_test/src/ct_master_logs.erl
@@ -91,8 +91,8 @@ init(Parent,LogDir,Nodes) ->
Time = calendar:local_time(),
RunDir = make_dirname(Time),
RunDirAbs = filename:join(LogDir,RunDir),
- file:make_dir(RunDirAbs),
- write_details_file(RunDirAbs,{node(),Nodes}),
+ ok = make_dir(RunDirAbs),
+ _ = write_details_file(RunDirAbs,{node(),Nodes}),
case basic_html() of
true ->
@@ -128,7 +128,7 @@ init(Parent,LogDir,Nodes) ->
end
end,
- make_all_runs_index(LogDir),
+ _ = make_all_runs_index(LogDir),
CtLogFd = open_ct_master_log(RunDirAbs),
NodeStr =
lists:flatten(lists:map(fun(N) ->
@@ -181,7 +181,7 @@ loop(State) ->
lists:foreach(Fun,List),
loop(State);
{make_all_runs_index,From} ->
- make_all_runs_index(State#state.logdir),
+ _ = make_all_runs_index(State#state.logdir),
return(From,State#state.logdir),
loop(State);
{{nodedir,Node,RunDir},From} ->
@@ -189,12 +189,12 @@ loop(State) ->
return(From,ok),
loop(State);
stop ->
- make_all_runs_index(State#state.logdir),
+ _ = make_all_runs_index(State#state.logdir),
io:format(State#state.log_fd,
int_header()++int_footer(),
[log_timestamp(?now),"Finished!"]),
- close_ct_master_log(State#state.log_fd),
- close_nodedir_index(State#state.nodedir_ix_fd),
+ _ = close_ct_master_log(State#state.log_fd),
+ _ = close_nodedir_index(State#state.nodedir_ix_fd),
ok
end.
@@ -496,7 +496,7 @@ make_relative(Dir) ->
ct_logs:make_relative(Dir).
force_write_file(Name,Contents) ->
- force_delete(Name),
+ _ = force_delete(Name),
file:write_file(Name,Contents).
force_delete(Name) ->
@@ -534,13 +534,34 @@ call(Msg) ->
end.
return({To,Ref},Result) ->
- To ! {Ref, Result}.
+ To ! {Ref, Result},
+ ok.
cast(Msg) ->
case whereis(?MODULE) of
undefined ->
- {error,does_not_exist};
+ io:format("Warning: ct_master_logs not started~n"),
+ {_,_,Content} = Msg,
+ FormatArgs = get_format_args(Content),
+ _ = [io:format(Format, Args) || {Format, Args} <- FormatArgs],
+ ok;
_Pid ->
- ?MODULE ! Msg
+ ?MODULE ! Msg,
+ ok
end.
+get_format_args(Content) ->
+ lists:map(fun(C) ->
+ case C of
+ {_, FA, _} -> FA;
+ _ -> C
+ end
+ end, Content).
+
+make_dir(Dir) ->
+ case file:make_dir(Dir) of
+ {error, eexist} ->
+ ok;
+ Else ->
+ Else
+ end.
diff --git a/lib/common_test/src/ct_property_test.erl b/lib/common_test/src/ct_property_test.erl
index 7dc78e949a..12c3d726d3 100644
--- a/lib/common_test/src/ct_property_test.erl
+++ b/lib/common_test/src/ct_property_test.erl
@@ -161,7 +161,9 @@ property_tests_path(Dir, Config) ->
add_code_pathz(Dir) ->
case lists:member(Dir, code:get_path()) of
true -> ok;
- false -> code:add_pathz(Dir)
+ false ->
+ true = code:add_pathz(Dir),
+ ok
end.
compile_tests(Path, ToolModule) ->
@@ -171,10 +173,10 @@ compile_tests(Path, ToolModule) ->
{ok,FileNames} = file:list_dir("."),
BeamFiles = [F || F<-FileNames,
filename:extension(F) == ".beam"],
- [file:delete(F) || F<-BeamFiles],
+ _ = [file:delete(F) || F<-BeamFiles],
ct:pal("Compiling in ~p:~n Deleted ~p~n MacroDefs=~p",[Path,BeamFiles,MacroDefs]),
Result = make:all([load|MacroDefs]),
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
Result.
diff --git a/lib/common_test/src/ct_release_test.erl b/lib/common_test/src/ct_release_test.erl
index 4e0f88cf5f..d783f8d04e 100644
--- a/lib/common_test/src/ct_release_test.erl
+++ b/lib/common_test/src/ct_release_test.erl
@@ -342,7 +342,7 @@ cleanup(Config) ->
end
end,
AllNodes),
- [rpc:call(Node,erlang,halt,[]) || Node <- Nodes],
+ _ = [rpc:call(Node,erlang,halt,[]) || Node <- Nodes],
Config.
%%-----------------------------------------------------------------
@@ -552,14 +552,14 @@ target_system(Apps,CreateDir,InstallDir,{FromVsn,_,AllAppsVsns,Path}) ->
%% Add bin and log dirs
BinDir = filename:join([InstallDir, "bin"]),
- file:make_dir(BinDir),
- file:make_dir(filename:join(InstallDir,"log")),
+ ok = make_dir(BinDir),
+ ok = make_dir(filename:join(InstallDir,"log")),
%% Delete start scripts - they will be added later
ErtsBinDir = filename:join([InstallDir, "erts-" ++ ErtsVsn, "bin"]),
- file:delete(filename:join([ErtsBinDir, "erl"])),
- file:delete(filename:join([ErtsBinDir, "start"])),
- file:delete(filename:join([ErtsBinDir, "start_erl"])),
+ ok = delete_file(filename:join([ErtsBinDir, "erl"])),
+ ok = delete_file(filename:join([ErtsBinDir, "start"])),
+ ok = delete_file(filename:join([ErtsBinDir, "start_erl"])),
%% Copy .boot to bin/start.boot
copy_file(RelName++".boot",filename:join([BinDir, "start.boot"])),
@@ -680,7 +680,7 @@ do_upgrade({Cb,InitState},FromVsn,FromAppsVsns,ToRel,ToAppsVsns,InstallDir) ->
%% even if install_release returned {ok,...} there might be an
%% emulator restart (instruction restart_emulator), so we must
%% always make sure the node is running.
- wait_node_up(current,ToVsn,ToAppsVsns),
+ {ok, _} = wait_node_up(current,ToVsn,ToAppsVsns),
[{"OTP upgrade test",ToVsn,_,current},
{"OTP upgrade test",FromVsn,_,permanent}] =
@@ -703,7 +703,7 @@ do_upgrade({Cb,InitState},FromVsn,FromAppsVsns,ToRel,ToAppsVsns,InstallDir) ->
%% even if install_release returned {ok,...} there might be an
%% emulator restart (instruction restart_emulator), so we must
%% always make sure the node is running.
- wait_node_up(current,FromVsn,FromAppsVsns),
+ {ok, _} = wait_node_up(current,FromVsn,FromAppsVsns),
[{"OTP upgrade test",ToVsn,_,permanent},
{"OTP upgrade test",FromVsn,_,current}] =
@@ -854,7 +854,7 @@ copy_file(Src, Dest, Opts) ->
case lists:member(preserve, Opts) of
true ->
{ok, FileInfo} = file:read_file_info(Src),
- file:write_file_info(Dest, FileInfo);
+ ok = file:write_file_info(Dest, FileInfo);
false ->
ok
end.
@@ -862,8 +862,8 @@ copy_file(Src, Dest, Opts) ->
write_file(FName, Conts) ->
Enc = file:native_name_encoding(),
{ok, Fd} = file:open(FName, [write]),
- file:write(Fd, unicode:characters_to_binary(Conts,Enc,Enc)),
- file:close(Fd).
+ ok = file:write(Fd, unicode:characters_to_binary(Conts,Enc,Enc)),
+ ok = file:close(Fd).
%% Substitute all occurrences of %Var% for Val in the given scripts
subst_src_scripts(Scripts, SrcDir, DestDir, Vars, Opts) ->
@@ -944,3 +944,19 @@ rm_rf(Dir) ->
_ ->
ok
end.
+
+delete_file(FileName) ->
+ case file:delete(FileName) of
+ {error, enoent} ->
+ ok;
+ Else ->
+ Else
+ end.
+
+make_dir(Dir) ->
+ case file:make_dir(Dir) of
+ {error, eexist} ->
+ ok;
+ Else ->
+ Else
+ end.
diff --git a/lib/common_test/src/ct_repeat.erl b/lib/common_test/src/ct_repeat.erl
index 31c5755c7e..dac596a135 100644
--- a/lib/common_test/src/ct_repeat.erl
+++ b/lib/common_test/src/ct_repeat.erl
@@ -44,13 +44,13 @@ loop_test(If,Args) when is_list(Args) ->
false;
E = {error,_} ->
io:format("Common Test error: ~p\n\n",[E]),
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
E;
{repeat,N} ->
io:format("\nCommon Test: Will repeat tests ~w times.\n\n",[N]),
Args1 = [{loop_info,[{repeat,1,N}]} | Args],
Result = loop(If,repeat,0,N,undefined,Args1,undefined,[]),
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
Result;
{stop_time,StopTime} ->
Result =
@@ -76,7 +76,7 @@ loop_test(If,Args) when is_list(Args) ->
Args1 = [{loop_info,[{stop_time,Secs,StopTime,1}]} | Args],
loop(If,stop_time,0,Secs,StopTime,Args1,TPid,[])
end,
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
Result
end.
diff --git a/lib/common_test/src/ct_rpc.erl b/lib/common_test/src/ct_rpc.erl
index cbcc212bb8..b4a0bc9d74 100644
--- a/lib/common_test/src/ct_rpc.erl
+++ b/lib/common_test/src/ct_rpc.erl
@@ -81,7 +81,7 @@ app_node(App, [], _, _) ->
app_node(App, _Candidates = [CandidateNode | Nodes], FailOnBadRPC, Cookie) ->
Cookie0 = set_the_cookie(Cookie),
Result = rpc:call(CandidateNode, application, which_applications, []),
- set_the_cookie(Cookie0),
+ _ = set_the_cookie(Cookie0),
case Result of
{badrpc,Reason} when FailOnBadRPC == true ->
ct:fail({Reason,CandidateNode});
@@ -145,7 +145,7 @@ call({Fun, FunArgs}, Module, Function, Args, TimeOut, Cookie) ->
call(Node, Module, Function, Args, TimeOut, Cookie) when is_atom(Node) ->
Cookie0 = set_the_cookie(Cookie),
Result = rpc:call(Node, Module, Function, Args, TimeOut),
- set_the_cookie(Cookie0),
+ _ = set_the_cookie(Cookie0),
Result.
%%% @spec cast(Node, Module, Function, Args) -> ok
@@ -190,7 +190,7 @@ cast({Fun, FunArgs}, Module, Function, Args, Cookie) ->
cast(Node, Module, Function, Args, Cookie) when is_atom(Node) ->
Cookie0 = set_the_cookie(Cookie),
true = rpc:cast(Node, Module, Function, Args),
- set_the_cookie(Cookie0),
+ _ = set_the_cookie(Cookie0),
ok.
diff --git a/lib/common_test/src/ct_run.erl b/lib/common_test/src/ct_run.erl
index 1e5f935198..fbb9c7ab60 100644
--- a/lib/common_test/src/ct_run.erl
+++ b/lib/common_test/src/ct_run.erl
@@ -400,21 +400,21 @@ run_or_refresh(Opts = #opts{logdir = LogDir}, Args) ->
[RefreshDir] -> ?abs(RefreshDir)
end,
{ok,Cwd} = file:get_cwd(),
- file:set_cwd(LogDir1),
+ ok = file:set_cwd(LogDir1),
%% give the shell time to print version etc
timer:sleep(500),
io:nl(),
case catch ct_logs:make_all_runs_index(refresh) of
{'EXIT',ARReason} ->
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
{error,{all_runs_index,ARReason}};
_ ->
case catch ct_logs:make_all_suites_index(refresh) of
{'EXIT',ASReason} ->
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
{error,{all_suites_index,ASReason}};
_ ->
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
io:format("Logs in ~ts refreshed!~n~n",
[LogDir1]),
timer:sleep(500), % time to flush io before quitting
@@ -756,8 +756,8 @@ script_start4(#opts{label = Label, profile = Profile,
{ct_hooks, CTHooks},
{enable_builtin_hooks,EnableBuiltinHooks}]) of
ok ->
- ct_util:start(interactive, LogDir,
- add_verbosity_defaults(Verbosity)),
+ _ = ct_util:start(interactive, LogDir,
+ add_verbosity_defaults(Verbosity)),
ct_util:set_testdata({logopts, LogOpts}),
log_ts_names(Specs),
io:nl(),
@@ -901,9 +901,8 @@ install(Opts, LogDir) ->
VarFile = variables_file_name(LogDir),
case file:open(VarFile, [write]) of
{ok,Fd} ->
- [io:format(Fd, "~p.\n", [Opt]) || Opt <- ConfOpts ],
- file:close(Fd),
- ok;
+ _ = [io:format(Fd, "~p.\n", [Opt]) || Opt <- ConfOpts],
+ ok = file:close(Fd);
{error,Reason} ->
io:format("CT failed to install configuration data. Please "
"verify that the log directory exists and that "
@@ -960,7 +959,7 @@ run_test1(StartOpts) when is_list(StartOpts) ->
false ->
case catch run_test2(StartOpts) of
{'EXIT',Reason} ->
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
{error,Reason};
Result ->
Result
@@ -971,7 +970,7 @@ run_test1(StartOpts) when is_list(StartOpts) ->
stop_trace(Tracing),
exit(Res);
RefreshDir ->
- refresh_logs(?abs(RefreshDir)),
+ ok = refresh_logs(?abs(RefreshDir)),
exit(done)
end.
@@ -1209,7 +1208,6 @@ run_all_specs([], _, _, TotResult) ->
end;
run_all_specs([{Specs,TS} | TSs], Opts, StartOpts, TotResult) ->
- log_ts_names(Specs),
Combined = #opts{config = TSConfig} = combine_test_opts(TS, Specs, Opts),
AllConfig = merge_vals([Opts#opts.config, TSConfig]),
try run_one_spec(TS,
@@ -1430,7 +1428,7 @@ run_testspec1(TestSpec) ->
io:format("~nCommon Test starting (cwd is ~ts)~n~n", [Cwd]),
case catch run_testspec2(TestSpec) of
{'EXIT',Reason} ->
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
exit({error,Reason});
Result ->
exit(Result)
@@ -1562,15 +1560,15 @@ refresh_logs(LogDir) ->
_ ->
case catch ct_logs:make_all_suites_index(refresh) of
{'EXIT',ASReason} ->
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
{error,{all_suites_index,ASReason}};
_ ->
case catch ct_logs:make_all_runs_index(refresh) of
{'EXIT',ARReason} ->
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
{error,{all_runs_index,ARReason}};
_ ->
- file:set_cwd(Cwd),
+ ok = file:set_cwd(Cwd),
io:format("Logs in ~ts refreshed!~n",[LogDir]),
ok
end
@@ -1610,22 +1608,34 @@ delistify(E) -> E.
%%% @hidden
%%% @equiv ct:run/3
run(TestDir, Suite, Cases) ->
- install([]),
- reformat_result(catch do_run(tests(TestDir, Suite, Cases), [])).
+ case install([]) of
+ ok ->
+ reformat_result(catch do_run(tests(TestDir, Suite, Cases), []));
+ Error ->
+ Error
+ end.
%%%-----------------------------------------------------------------
%%% @hidden
%%% @equiv ct:run/2
run(TestDir, Suite) when is_list(TestDir), is_integer(hd(TestDir)) ->
- install([]),
- reformat_result(catch do_run(tests(TestDir, Suite), [])).
+ case install([]) of
+ ok ->
+ reformat_result(catch do_run(tests(TestDir, Suite), []));
+ Error ->
+ Error
+ end.
%%%-----------------------------------------------------------------
%%% @hidden
%%% @equiv ct:run/1
run(TestDirs) ->
- install([]),
- reformat_result(catch do_run(tests(TestDirs), [])).
+ case install([]) of
+ ok ->
+ reformat_result(catch do_run(tests(TestDirs), []));
+ Error ->
+ Error
+ end.
reformat_result({'EXIT',{user_error,Reason}}) ->
{error,Reason};
@@ -2017,7 +2027,7 @@ save_make_errors(Errors) ->
"Error compiling or locating the "
"following suites: ~n~p",[Suites]),
%% save the info for logger
- file:write_file(?missing_suites_info,term_to_binary(Errors)),
+ ok = file:write_file(?missing_suites_info,term_to_binary(Errors)),
Errors.
get_bad_suites([{{_TestDir,_Suite},Failed}|Errors], BadSuites) ->
@@ -2234,7 +2244,7 @@ do_run_test(Tests, Skip, Opts0) ->
end,
application:set_env(test_server, esc_chars, EscChars),
- test_server_ctrl:start_link(local),
+ {ok, _} = test_server_ctrl:start_link(local),
%% let test_server expand the test tuples and count no of cases
{Suites,NoOfCases} = count_test_cases(Tests, Skip),
@@ -2295,7 +2305,7 @@ do_run_test(Tests, Skip, Opts0) ->
lists:foreach(fun(Suite) ->
maybe_cleanup_interpret(Suite, Opts#opts.step)
end, CleanUp),
- [code:del_path(Dir) || Dir <- AddedToPath],
+ _ = [code:del_path(Dir) || Dir <- AddedToPath],
%% If a severe error has occurred in the test_server,
%% we will generate an exception here.
@@ -2422,7 +2432,7 @@ count_test_cases(Tests, Skip) ->
SendResult = fun(Me, Result) -> Me ! {no_of_cases,Result} end,
TSPid = test_server_ctrl:start_get_totals(SendResult),
Ref = erlang:monitor(process, TSPid),
- add_jobs(Tests, Skip, #opts{}, []),
+ _ = add_jobs(Tests, Skip, #opts{}, []),
Counted = (catch count_test_cases1(length(Tests), 0, [], Ref)),
erlang:demonitor(Ref, [flush]),
case Counted of
@@ -2776,14 +2786,14 @@ maybe_interpret1(Suite, Cases, StepOpts) when is_list(Cases) ->
maybe_interpret2(Suite, Cases, StepOpts) ->
set_break_on_config(Suite, StepOpts),
- [begin try i:ib(Suite, Case, 1) of
+ _ = [begin try i:ib(Suite, Case, 1) of
_ -> ok
catch
_:_Error ->
io:format(user, "Invalid breakpoint: ~w:~w/1~n",
[Suite,Case])
end
- end || Case <- Cases, is_atom(Case)],
+ end || Case <- Cases, is_atom(Case)],
test_server_ctrl:multiply_timetraps(infinity),
WinOp = case lists:member(keep_inactive, ensure_atom(StepOpts)) of
true -> no_kill;
@@ -2802,12 +2812,12 @@ set_break_on_config(Suite, StepOpts) ->
false -> ok
end
end,
- SetBPIfExists(init_per_suite, 1),
- SetBPIfExists(init_per_group, 2),
- SetBPIfExists(init_per_testcase, 2),
- SetBPIfExists(end_per_testcase, 2),
- SetBPIfExists(end_per_group, 2),
- SetBPIfExists(end_per_suite, 1);
+ ok = SetBPIfExists(init_per_suite, 1),
+ ok = SetBPIfExists(init_per_group, 2),
+ ok = SetBPIfExists(init_per_testcase, 2),
+ ok = SetBPIfExists(end_per_testcase, 2),
+ ok = SetBPIfExists(end_per_group, 2),
+ ok = SetBPIfExists(end_per_suite, 1);
false ->
ok
end.
@@ -2984,31 +2994,31 @@ add_verbosity_defaults(VLvls) ->
%% relative dirs "post run_test erl_args" is not kept!
rel_to_abs(CtArgs) ->
{PA,PZ} = get_pa_pz(CtArgs, [], []),
- [begin
+ _ = [begin
Dir = rm_trailing_slash(D),
Abs = make_abs(Dir),
- if Dir /= Abs ->
- code:del_path(Dir),
- code:del_path(Abs),
+ _ = if Dir /= Abs ->
+ _ = code:del_path(Dir),
+ _ = code:del_path(Abs),
io:format(user, "Converting ~p to ~p and re-inserting "
"with add_pathz/1~n",
[Dir, Abs]);
true ->
- code:del_path(Dir)
+ _ = code:del_path(Dir)
end,
code:add_pathz(Abs)
end || D <- PZ],
- [begin
+ _ = [begin
Dir = rm_trailing_slash(D),
Abs = make_abs(Dir),
- if Dir /= Abs ->
- code:del_path(Dir),
- code:del_path(Abs),
+ _ = if Dir /= Abs ->
+ _ = code:del_path(Dir),
+ _ = code:del_path(Abs),
io:format(user, "Converting ~p to ~p and re-inserting "
"with add_patha/1~n",
[Dir, Abs]);
true ->
- code:del_path(Dir)
+ _ = code:del_path(Dir)
end,
code:add_patha(Abs)
end || D <- PA],
diff --git a/lib/common_test/src/ct_slave.erl b/lib/common_test/src/ct_slave.erl
index 3ad3937548..571958ca03 100644
--- a/lib/common_test/src/ct_slave.erl
+++ b/lib/common_test/src/ct_slave.erl
@@ -325,7 +325,7 @@ do_start(Host, Node, Options) ->
Functions
end,
MasterHost = gethostname(),
- if
+ _ = if
MasterHost == Host ->
spawn_local_node(Node, Options);
true->
@@ -359,7 +359,7 @@ do_start(Host, Node, Options) ->
pang->
{error, boot_timeout, ENode}
end,
- case Result of
+ _ = case Result of
{ok, ENode}->
ok;
{error, Timeout, ENode}
@@ -422,7 +422,7 @@ spawn_remote_node(Host, Node, Options) ->
{_, _}->
[{user, Username}, {password, Password}]
end ++ [{silently_accept_hosts, true}] ++ SSHOpts,
- application:ensure_all_started(ssh),
+ {ok, _} = application:ensure_all_started(ssh),
{ok, SSHConnRef} = ssh:connect(atom_to_list(Host), SSHPort, SSHOptions),
{ok, SSHChannelId} = ssh_connection:session_channel(SSHConnRef, infinity),
ssh_setenv(SSHConnRef, SSHChannelId, Env),
diff --git a/lib/common_test/src/ct_snmp.erl b/lib/common_test/src/ct_snmp.erl
index bb0167eb22..2c59b19196 100644
--- a/lib/common_test/src/ct_snmp.erl
+++ b/lib/common_test/src/ct_snmp.erl
@@ -221,9 +221,17 @@ start(Config, MgrAgentConfName, SnmpAppConfName) ->
Config, SysName, AgentManagerIP, IP),
setup_manager(StartManager, MgrAgentConfName, SnmpAppConfName,
Config, AgentManagerIP),
- application:start(snmp),
+ ok = start_application(snmp),
manager_register(StartManager, MgrAgentConfName).
+
+start_application(App) ->
+ case application:start(App) of
+ {error, {already_started, App}} ->
+ ok;
+ Else ->
+ Else
+ end.
%%% @spec stop(Config) -> ok
%%% Config = [{Key, Value}]
@@ -233,8 +241,8 @@ start(Config, MgrAgentConfName, SnmpAppConfName) ->
%%% @doc Stops the snmp manager and/or agent removes all files created.
stop(Config) ->
PrivDir = ?config(priv_dir, Config),
- application:stop(snmp),
- application:stop(mnesia),
+ ok = application:stop(snmp),
+ ok = application:stop(mnesia),
MgrDir = filename:join(PrivDir,"mgr"),
ConfDir = filename:join(PrivDir, "conf"),
DbDir = filename:join(PrivDir,"db"),
@@ -311,7 +319,7 @@ set_info(Config) ->
SetLogFile = filename:join(PrivDir, ?CT_SNMP_LOG_FILE),
case file:consult(SetLogFile) of
{ok, SetInfo} ->
- file:delete(SetLogFile),
+ ok = delete_file(SetLogFile),
lists:reverse(SetInfo);
_ ->
[]
@@ -513,7 +521,7 @@ unload_mibs(Mibs) ->
prepare_snmp_env() ->
%% To make sure application:set_env is not overwritten by any
%% app-file settings.
- application:load(snmp),
+ _ = application:load(snmp),
%% Fix for older versions of snmp where there are some
%% inappropriate default values for alway starting an
@@ -533,7 +541,7 @@ setup_manager(true, MgrConfName, SnmpConfName, Config, IP) ->
Users = [],
Agents = [],
Usms = [],
- file:make_dir(MgrDir),
+ ok = make_dir(MgrDir),
snmp_config:write_manager_snmp_files(MgrDir, IP, Port, MaxMsgSize,
EngineID, Users, Agents, Usms),
@@ -549,7 +557,7 @@ setup_agent(false,_, _, _, _, _, _) ->
ok;
setup_agent(true, AgentConfName, SnmpConfName,
Config, SysName, ManagerIP, AgentIP) ->
- application:start(mnesia),
+ ok = start_application(mnesia),
PrivDir = ?config(priv_dir, Config),
Vsns = ct:get_config({AgentConfName, agent_vsns}, ?CONF_FILE_VER),
TrapUdp = ct:get_config({AgentConfName, agent_trap_udp}, ?TRAP_UDP),
@@ -565,8 +573,8 @@ setup_agent(true, AgentConfName, SnmpConfName,
ConfDir = filename:join(PrivDir, "conf"),
DbDir = filename:join(PrivDir,"db"),
- file:make_dir(ConfDir),
- file:make_dir(DbDir),
+ ok = make_dir(ConfDir),
+ ok = make_dir(DbDir),
snmp_config:write_agent_snmp_files(ConfDir, Vsns, ManagerIP, TrapUdp,
AgentIP, AgentUdp, SysName,
NotifType, SecType, Passwd,
@@ -684,7 +692,7 @@ log(PrivDir, Agent, {_, _, Varbinds}, NewVarsAndVals) ->
File = filename:join(PrivDir, ?CT_SNMP_LOG_FILE),
{ok, Fd} = file:open(File, [write, append]),
io:format(Fd, "~p.~n", [{Agent, OldVarsAndVals, NewVarsAndVals}]),
- file:close(Fd),
+ ok = file:close(Fd),
ok.
%%%---------------------------------------------------------------------------
del_dir(Dir) ->
@@ -692,7 +700,7 @@ del_dir(Dir) ->
FullPathFiles = lists:map(fun(File) -> filename:join(Dir, File) end,
Files),
lists:foreach(fun file:delete/1, FullPathFiles),
- file:del_dir(Dir),
+ ok = delete_dir(Dir),
ok.
%%%---------------------------------------------------------------------------
agent_conf(Agent, MgrAgentConfName) ->
@@ -738,8 +746,8 @@ override_contexts(Config, {data_dir_file, File}) ->
override_contexts(Config, Contexts) ->
Dir = filename:join(?config(priv_dir, Config),"conf"),
File = filename:join(Dir,"context.conf"),
- file:delete(File),
- snmp_config:write_agent_context_config(Dir, "", Contexts).
+ ok = delete_file(File),
+ ok = snmp_config:write_agent_context_config(Dir, "", Contexts).
%%%---------------------------------------------------------------------------
override_sysinfo(_, undefined) ->
@@ -754,8 +762,8 @@ override_sysinfo(Config, {data_dir_file, File}) ->
override_sysinfo(Config, SysInfo) ->
Dir = filename:join(?config(priv_dir, Config),"conf"),
File = filename:join(Dir,"standard.conf"),
- file:delete(File),
- snmp_config:write_agent_standard_config(Dir, "", SysInfo).
+ ok = delete_file(File),
+ ok = snmp_config:write_agent_standard_config(Dir, "", SysInfo).
%%%---------------------------------------------------------------------------
override_target_address(_, undefined) ->
@@ -769,8 +777,8 @@ override_target_address(Config, {data_dir_file, File}) ->
override_target_address(Config, TargetAddressConf) ->
Dir = filename:join(?config(priv_dir, Config),"conf"),
File = filename:join(Dir,"target_addr.conf"),
- file:delete(File),
- snmp_config:write_agent_target_addr_config(Dir, "", TargetAddressConf).
+ ok = delete_file(File),
+ ok = snmp_config:write_agent_target_addr_config(Dir, "", TargetAddressConf).
%%%---------------------------------------------------------------------------
@@ -785,8 +793,8 @@ override_target_params(Config, {data_dir_file, File}) ->
override_target_params(Config, TargetParamsConf) ->
Dir = filename:join(?config(priv_dir, Config),"conf"),
File = filename:join(Dir,"target_params.conf"),
- file:delete(File),
- snmp_config:write_agent_target_params_config(Dir, "", TargetParamsConf).
+ ok = delete_file(File),
+ ok = snmp_config:write_agent_target_params_config(Dir, "", TargetParamsConf).
%%%---------------------------------------------------------------------------
override_notify(_, undefined) ->
@@ -800,8 +808,8 @@ override_notify(Config, {data_dir_file, File}) ->
override_notify(Config, NotifyConf) ->
Dir = filename:join(?config(priv_dir, Config),"conf"),
File = filename:join(Dir,"notify.conf"),
- file:delete(File),
- snmp_config:write_agent_notify_config(Dir, "", NotifyConf).
+ ok = delete_file(File),
+ ok = snmp_config:write_agent_notify_config(Dir, "", NotifyConf).
%%%---------------------------------------------------------------------------
override_usm(_, undefined) ->
@@ -815,8 +823,8 @@ override_usm(Config, {data_dir_file, File}) ->
override_usm(Config, UsmConf) ->
Dir = filename:join(?config(priv_dir, Config),"conf"),
File = filename:join(Dir,"usm.conf"),
- file:delete(File),
- snmp_config:write_agent_usm_config(Dir, "", UsmConf).
+ ok = delete_file(File),
+ ok = snmp_config:write_agent_usm_config(Dir, "", UsmConf).
%%%--------------------------------------------------------------------------
override_community(_, undefined) ->
@@ -830,8 +838,8 @@ override_community(Config, {data_dir_file, File}) ->
override_community(Config, CommunityConf) ->
Dir = filename:join(?config(priv_dir, Config),"conf"),
File = filename:join(Dir,"community.conf"),
- file:delete(File),
- snmp_config:write_agent_community_config(Dir, "", CommunityConf).
+ ok = delete_file(File),
+ ok = snmp_config:write_agent_community_config(Dir, "", CommunityConf).
%%%---------------------------------------------------------------------------
@@ -846,8 +854,8 @@ override_vacm(Config, {data_dir_file, File}) ->
override_vacm(Config, VacmConf) ->
Dir = filename:join(?config(priv_dir, Config),"conf"),
File = filename:join(Dir,"vacm.conf"),
- file:delete(File),
- snmp_config:write_agent_vacm_config(Dir, "", VacmConf).
+ ok = delete_file(File),
+ ok = snmp_config:write_agent_vacm_config(Dir, "", VacmConf).
%%%---------------------------------------------------------------------------
@@ -861,3 +869,21 @@ while_ok(Fun,[H|T]) ->
end;
while_ok(_Fun,[]) ->
ok.
+
+delete_file(FileName) ->
+ case file:delete(FileName) of
+ {error, enoent} -> ok;
+ Else -> Else
+ end.
+
+make_dir(Dir) ->
+ case file:make_dir(Dir) of
+ {error, eexist} -> ok;
+ Else -> Else
+ end.
+
+delete_dir(Dir) ->
+ case file:del_dir(Dir) of
+ {error, enoent} -> ok;
+ Else -> Else
+ end.
diff --git a/lib/common_test/src/ct_ssh.erl b/lib/common_test/src/ct_ssh.erl
index 92d912052e..6ab3bf036c 100644
--- a/lib/common_test/src/ct_ssh.erl
+++ b/lib/common_test/src/ct_ssh.erl
@@ -962,8 +962,8 @@ init(KeyOrName, {ConnType,Addr,Port}, AllOpts) ->
end, [], AllOpts1),
FinalOptions = [{silently_accept_hosts,true},
{user_interaction,false} | Options],
- crypto:start(),
- ssh:start(),
+ _ = crypto:start(),
+ _ = ssh:start(),
Result = case ConnType of
ssh ->
ssh:connect(Addr, Port, FinalOptions);
diff --git a/lib/common_test/src/ct_telnet.erl b/lib/common_test/src/ct_telnet.erl
index f5f4f648f4..34d27ed5f4 100644
--- a/lib/common_test/src/ct_telnet.erl
+++ b/lib/common_test/src/ct_telnet.erl
@@ -605,7 +605,7 @@ init(Name,{Ip,Port,Type},{TargetMod,KeepAlive,Extra}) ->
set_telnet_defaults(Settings,#state{})
end,
%% Handle old user versions of TargetMod
- code:ensure_loaded(TargetMod),
+ _ = code:ensure_loaded(TargetMod),
try
case erlang:function_exported(TargetMod,connect,7) of
true ->
@@ -688,7 +688,7 @@ handle_msg({cmd,Cmd,Opts},State) ->
debug_cont_gen_log("Throwing Buffer:",[]),
debug_log_lines(State#state.buffer),
- case {State#state.type,State#state.prompt} of
+ _ = case {State#state.type,State#state.prompt} of
{ts,_} ->
silent_teln_expect(State#state.name,
State#state.teln_pid,
@@ -735,7 +735,7 @@ handle_msg({send,Cmd,Opts},State) ->
debug_cont_gen_log("Throwing Buffer:",[]),
debug_log_lines(State#state.buffer),
- case {State#state.type,State#state.prompt} of
+ _ = case {State#state.type,State#state.prompt} of
{ts,_} ->
silent_teln_expect(State#state.name,
State#state.teln_pid,
@@ -954,7 +954,7 @@ log(#state{name=Name,teln_pid=TelnPid,host=Host,port=Port},
true ->
ok;
false ->
- ct_gen_conn:cont_log(String,Args)
+ ct_gen_conn:cont_log_no_timestamp(String,Args)
end;
ForcePrint == true ->
@@ -965,7 +965,7 @@ log(#state{name=Name,teln_pid=TelnPid,host=Host,port=Port},
%% called
ct_gen_conn:log(heading(Action,Name1),String,Args);
false ->
- ct_gen_conn:cont_log(String,Args)
+ ct_gen_conn:cont_log_no_timestamp(String,Args)
end
end
end.
@@ -1224,7 +1224,6 @@ teln_expect1(Name,Pid,Data,Pattern,Acc,EO=#eo{idle_timeout=IdleTO,
EOMod = if TotalTO /= infinity -> EO#eo{total_timeout=trunc(TotalTO)};
true -> EO
end,
-
ExpectFun = case EOMod#eo.seq of
true -> fun() ->
seq_expect(Name,Pid,Data,Pattern,Acc,EOMod)
@@ -1247,38 +1246,34 @@ teln_expect1(Name,Pid,Data,Pattern,Acc,EO=#eo{idle_timeout=IdleTO,
true ->
IdleTO
end,
+ {PatOrPats1,Acc1,Rest1} = case NotFinished of
+ {nomatch,Rest0} ->
+ %% one expect
+ {Pattern,[],Rest0};
+ {continue,Pats0,Acc0,Rest0} ->
+ %% sequence
+ {Pats0,Acc0,Rest0}
+ end,
case timer:tc(ct_gen_conn, do_within_time, [Fun,BreakAfter]) of
- {_,{error,Reason}} ->
+ {_,{error,Reason}} ->
%% A timeout will occur when the telnet connection
%% is idle for EO#eo.idle_timeout milliseconds.
+ if Rest1 /= [] ->
+ log(name_or_pid(Name,Pid)," ~ts",[Rest1]);
+ true ->
+ ok
+ end,
{error,Reason};
{_,{ok,Data1}} when TotalTO == infinity ->
- case NotFinished of
- {nomatch,Rest} ->
- %% One expect
- teln_expect1(Name,Pid,Rest++Data1,
- Pattern,[],EOMod);
- {continue,Patterns1,Acc1,Rest} ->
- %% Sequence
- teln_expect1(Name,Pid,Rest++Data1,
- Patterns1,Acc1,EOMod)
- end;
+ teln_expect1(Name,Pid,Rest1++Data1,PatOrPats1,Acc1,EOMod);
{Elapsed,{ok,Data1}} ->
TVal = TotalTO - (Elapsed/1000),
if TVal =< 0 ->
{error,timeout};
true ->
EO1 = EO#eo{total_timeout = TVal},
- case NotFinished of
- {nomatch,Rest} ->
- %% One expect
- teln_expect1(Name,Pid,Rest++Data1,
- Pattern,[],EO1);
- {continue,Patterns1,Acc1,Rest} ->
- %% Sequence
- teln_expect1(Name,Pid,Rest++Data1,
- Patterns1,Acc1,EO1)
- end
+ teln_expect1(Name,Pid,Rest1++Data1,
+ PatOrPats1,Acc1,EO1)
end
end
end.
@@ -1416,14 +1411,14 @@ match_lines(Name,Pid,Data,Patterns,EO) ->
case one_line(Data,[]) of
{noline,Rest} when FoundPrompt=/=false ->
%% This is the line including the prompt
- case match_line(Name,Pid,Rest,Patterns,FoundPrompt,EO) of
+ case match_line(Name,Pid,Rest,Patterns,FoundPrompt,false,EO) of
nomatch ->
{nomatch,prompt};
{Tag,Match} ->
{Tag,Match,[]}
end;
{noline,Rest} when EO#eo.prompt_check==false ->
- case match_line(Name,Pid,Rest,Patterns,false,EO) of
+ case match_line(Name,Pid,Rest,Patterns,false,false,EO) of
nomatch ->
{nomatch,Rest};
{Tag,Match} ->
@@ -1432,7 +1427,7 @@ match_lines(Name,Pid,Data,Patterns,EO) ->
{noline,Rest} ->
{nomatch,Rest};
{Line,Rest} ->
- case match_line(Name,Pid,Line,Patterns,false,EO) of
+ case match_line(Name,Pid,Line,Patterns,false,true,EO) of
nomatch ->
match_lines(Name,Pid,Rest,Patterns,EO);
{Tag,Match} ->
@@ -1440,45 +1435,50 @@ match_lines(Name,Pid,Data,Patterns,EO) ->
end
end.
-
%% For one line, match each pattern
-match_line(Name,Pid,Line,Patterns,FoundPrompt,EO) ->
- match_line(Name,Pid,Line,Patterns,FoundPrompt,EO,match).
+match_line(Name,Pid,Line,Patterns,FoundPrompt,Terminated,EO) ->
+ match_line(Name,Pid,Line,Patterns,FoundPrompt,Terminated,EO,match).
-match_line(Name,Pid,Line,[prompt|Patterns],false,EO,RetTag) ->
- match_line(Name,Pid,Line,Patterns,false,EO,RetTag);
-match_line(Name,Pid,Line,[prompt|_Patterns],FoundPrompt,_EO,RetTag) ->
+match_line(Name,Pid,Line,[prompt|Patterns],false,Term,EO,RetTag) ->
+ match_line(Name,Pid,Line,Patterns,false,Term,EO,RetTag);
+match_line(Name,Pid,Line,[prompt|_Patterns],FoundPrompt,_Term,_EO,RetTag) ->
log(name_or_pid(Name,Pid)," ~ts",[Line]),
log(name_or_pid(Name,Pid),"PROMPT: ~ts",[FoundPrompt]),
{RetTag,{prompt,FoundPrompt}};
-match_line(Name,Pid,Line,[{prompt,PromptType}|_Patterns],FoundPrompt,_EO,RetTag)
- when PromptType==FoundPrompt ->
+match_line(Name,Pid,Line,[{prompt,PromptType}|_Patterns],FoundPrompt,_Term,
+ _EO,RetTag) when PromptType==FoundPrompt ->
log(name_or_pid(Name,Pid)," ~ts",[Line]),
log(name_or_pid(Name,Pid),"PROMPT: ~ts",[FoundPrompt]),
{RetTag,{prompt,FoundPrompt}};
-match_line(Name,Pid,Line,[{prompt,PromptType}|Patterns],FoundPrompt,EO,RetTag)
+match_line(Name,Pid,Line,[{prompt,PromptType}|Patterns],FoundPrompt,Term,
+ EO,RetTag)
when PromptType=/=FoundPrompt ->
- match_line(Name,Pid,Line,Patterns,FoundPrompt,EO,RetTag);
-match_line(Name,Pid,Line,[{Tag,Pattern}|Patterns],FoundPrompt,EO,RetTag) ->
+ match_line(Name,Pid,Line,Patterns,FoundPrompt,Term,EO,RetTag);
+match_line(Name,Pid,Line,[{Tag,Pattern}|Patterns],FoundPrompt,Term,EO,RetTag) ->
case re:run(Line,Pattern,[{capture,all,list}]) of
nomatch ->
- match_line(Name,Pid,Line,Patterns,FoundPrompt,EO,RetTag);
+ match_line(Name,Pid,Line,Patterns,FoundPrompt,Term,EO,RetTag);
{match,Match} ->
log(name_or_pid(Name,Pid),"MATCH: ~ts",[Line]),
{RetTag,{Tag,Match}}
end;
-match_line(Name,Pid,Line,[Pattern|Patterns],FoundPrompt,EO,RetTag) ->
+match_line(Name,Pid,Line,[Pattern|Patterns],FoundPrompt,Term,EO,RetTag) ->
case re:run(Line,Pattern,[{capture,all,list}]) of
nomatch ->
- match_line(Name,Pid,Line,Patterns,FoundPrompt,EO,RetTag);
+ match_line(Name,Pid,Line,Patterns,FoundPrompt,Term,EO,RetTag);
{match,Match} ->
log(name_or_pid(Name,Pid),"MATCH: ~ts",[Line]),
{RetTag,Match}
end;
-match_line(Name,Pid,Line,[],FoundPrompt,EO,match) ->
- match_line(Name,Pid,Line,EO#eo.haltpatterns,FoundPrompt,EO,halt);
-match_line(Name,Pid,Line,[],_FoundPrompt,_EO,halt) ->
+match_line(Name,Pid,Line,[],FoundPrompt,Term,EO,match) ->
+ match_line(Name,Pid,Line,EO#eo.haltpatterns,FoundPrompt,Term,EO,halt);
+%% print any terminated line that can not be matched
+match_line(Name,Pid,Line,[],_FoundPrompt,true,_EO,halt) ->
log(name_or_pid(Name,Pid)," ~ts",[Line]),
+ nomatch;
+%% if there's no line termination, Line is saved as Rest (above) and will
+%% be printed later
+match_line(_Name,_Pid,_Line,[],_FoundPrompt,false,_EO,halt) ->
nomatch.
one_line([$\n|Rest],Line) ->
diff --git a/lib/common_test/src/ct_telnet_client.erl b/lib/common_test/src/ct_telnet_client.erl
index 1f1311776f..5df7e279ac 100644
--- a/lib/common_test/src/ct_telnet_client.erl
+++ b/lib/common_test/src/ct_telnet_client.erl
@@ -272,7 +272,7 @@ send(Data, Sock, ConnName) ->
_:_ -> ok
end
end,
- gen_tcp:send(Sock, Data),
+ ok = gen_tcp:send(Sock, Data),
ok.
%% [IAC,IAC] = buffer data value 255
@@ -284,7 +284,7 @@ check_msg(Sock, [?IAC | Cs], Acc) ->
case get_cmd(Cs) of
{Cmd,Cs1} ->
cmd_dbg("Got",Cmd),
- respond_cmd(Cmd, Sock),
+ ok = respond_cmd(Cmd, Sock),
check_msg(Sock, Cs1, Acc);
error ->
Acc
diff --git a/lib/common_test/src/ct_util.erl b/lib/common_test/src/ct_util.erl
index d5a8e3fbc0..82a8743cf0 100644
--- a/lib/common_test/src/ct_util.erl
+++ b/lib/common_test/src/ct_util.erl
@@ -131,14 +131,14 @@ do_start(Parent, Mode, LogDir, Verbosity) ->
create_table(?suite_table,#suite_data.key),
create_table(?verbosity_table,1),
- [ets:insert(?verbosity_table,{Cat,Lvl}) || {Cat,Lvl} <- Verbosity],
+ _ = [ets:insert(?verbosity_table,{Cat,Lvl}) || {Cat,Lvl} <- Verbosity],
{ok,StartDir} = file:get_cwd(),
case file:set_cwd(LogDir) of
ok -> ok;
E -> exit(E)
end,
- DoExit = fun(Reason) -> file:set_cwd(StartDir), exit(Reason) end,
+ DoExit = fun(Reason) -> ok = file:set_cwd(StartDir), exit(Reason) end,
Opts = case read_opts() of
{ok,Opts1} ->
Opts1;
@@ -169,7 +169,7 @@ do_start(Parent, Mode, LogDir, Verbosity) ->
end,
%% add user event handlers
- case lists:keysearch(event_handler,1,Opts) of
+ _ = case lists:keysearch(event_handler,1,Opts) of
{value,{_,Handlers}} ->
Add = fun({H,Args}) ->
case catch gen_event:add_handler(?CT_EVMGR_REF,H,Args) of
@@ -195,7 +195,7 @@ do_start(Parent, Mode, LogDir, Verbosity) ->
data={StartTime,
lists:flatten(TestLogDir)}}),
%% Initialize ct_hooks
- try ct_hooks:init(Opts) of
+ _ = try ct_hooks:init(Opts) of
ok ->
Parent ! {self(),started};
{fail,CTHReason} ->
@@ -228,7 +228,8 @@ create_table(TableName,KeyPos) ->
create_table(TableName,set,KeyPos).
create_table(TableName,Type,KeyPos) ->
catch ets:delete(TableName),
- ets:new(TableName,[Type,named_table,public,{keypos,KeyPos}]).
+ _ = ets:new(TableName,[Type,named_table,public,{keypos,KeyPos}]),
+ ok.
read_opts() ->
case file:consult(ct_run:variables_file_name("./")) of
@@ -473,7 +474,7 @@ loop(Mode,TestData,StartDir) ->
ct_logs:close(Info, StartDir),
ct_event:stop(),
ct_config:stop(),
- file:set_cwd(StartDir),
+ ok = file:set_cwd(StartDir),
return(From, Info);
{Ref, _Msg} when is_reference(Ref) ->
%% This clause is used when doing cast operations.
@@ -505,7 +506,7 @@ loop(Mode,TestData,StartDir) ->
%% Let process crash in case of error, this shouldn't happen!
io:format("\n\nct_util_server got EXIT "
"from ~w: ~p\n\n", [Pid,Reason]),
- file:set_cwd(StartDir),
+ ok = file:set_cwd(StartDir),
exit(Reason)
end
end.
@@ -1035,10 +1036,12 @@ call(Msg, Timeout) ->
end.
return({To,Ref},Result) ->
- To ! {Ref, Result}.
+ To ! {Ref, Result},
+ ok.
cast(Msg) ->
- ct_util_server ! {Msg, {ct_util_server, make_ref()}}.
+ ct_util_server ! {Msg, {ct_util_server, make_ref()}},
+ ok.
seconds(T) ->
test_server:seconds(T).
@@ -1074,7 +1077,7 @@ abs_name2([],Acc) ->
open_url(iexplore, Args, URL) ->
{ok,R} = win32reg:open([read]),
ok = win32reg:change_key(R,"applications\\iexplore.exe\\shell\\open\\command"),
- case win32reg:values(R) of
+ _ = case win32reg:values(R) of
{ok, Paths} ->
Path = proplists:get_value(default, Paths),
[Cmd | _] = string:tokens(Path, "%"),
diff --git a/lib/common_test/src/ct_webtool.erl b/lib/common_test/src/ct_webtool.erl
index 6cbcd98cc3..87af442fd3 100644
--- a/lib/common_test/src/ct_webtool.erl
+++ b/lib/common_test/src/ct_webtool.erl
@@ -84,27 +84,27 @@
%% Function = {FunctionName,Arity} | FunctionName |
%% {Module, FunctionName, Arity} | {Module,FunctionName}
debug(F) ->
- ttb:tracer(all,[{file,"webtool.trc"}]), % tracing all nodes
- ttb:p(all,[call,timestamp]),
+ {ok, _} = ttb:tracer(all,[{file,"webtool.trc"}]), % tracing all nodes
+ {ok, _} = ttb:p(all,[call,timestamp]),
MS = [{'_',[],[{return_trace},{message,{caller}}]}],
- tp(F,MS),
- ttb:ctp(?MODULE,stop_debug), % don't want tracing of the stop_debug func
+ _ = tp(F,MS),
+ {ok, _} = ttb:ctp(?MODULE,stop_debug), % don't want tracing of the stop_debug func
ok.
tp(local,MS) -> % all functions
ttb:tpl(?MODULE,MS);
tp(global,MS) -> % all exported functions
ttb:tp(?MODULE,MS);
tp([{M,F,A}|T],MS) -> % Other module
- ttb:tpl(M,F,A,MS),
+ {ok, _} = ttb:tpl(M,F,A,MS),
tp(T,MS);
tp([{M,F}|T],MS) when is_atom(F) -> % Other module
- ttb:tpl(M,F,MS),
+ {ok, _} = ttb:tpl(M,F,MS),
tp(T,MS);
tp([{F,A}|T],MS) -> % function/arity
- ttb:tpl(?MODULE,F,A,MS),
+ {ok, _} = ttb:tpl(?MODULE,F,A,MS),
tp(T,MS);
tp([F|T],MS) -> % function
- ttb:tpl(?MODULE,F,MS),
+ {ok, _} = ttb:tpl(?MODULE,F,MS),
tp(T,MS);
tp([],_MS) ->
ok.
@@ -112,10 +112,10 @@ stop_debug() ->
ttb:stop([format]).
debug_app(Mod) ->
- ttb:tracer(all,[{file,"webtool_app.trc"},{handler,{fun out/4,true}}]),
- ttb:p(all,[call,timestamp]),
+ {ok, _} = ttb:tracer(all,[{file,"webtool_app.trc"},{handler,{fun out/4,true}}]),
+ {ok, _} = ttb:p(all,[call,timestamp]),
MS = [{'_',[],[{return_trace},{message,{caller}}]}],
- ttb:tp(Mod,MS),
+ {ok, _} = ttb:tp(Mod,MS),
ok.
out(_,{trace_ts,Pid,call,MFA={M,F,A},{W,_,_},TS},_,S)
@@ -145,7 +145,7 @@ script_start([App]) ->
script_start([App,DefaultBrowser]);
script_start([App,Browser]) ->
io:format("Starting webtool...\n"),
- start(),
+ {ok, _} = start(),
AvailableApps = get_applications(),
{OSType,_} = os:type(),
case lists:keysearch(App,1,AvailableApps) of
@@ -159,14 +159,14 @@ script_start([App,Browser]) ->
_ ->
"http://localhost:" ++ PortStr ++ "/" ++ StartPage
end,
- case Browser of
+ _ = case Browser of
none ->
ok;
iexplore when OSType == win32->
io:format("Starting internet explorer...\n"),
{ok,R} = win32reg:open(""),
Key="\\local_machine\\SOFTWARE\\Microsoft\\IE Setup\\Setup",
- win32reg:change_key(R,Key),
+ ok = win32reg:change_key(R,Key),
{ok,Val} = win32reg:value(R,"Path"),
IExplore=filename:join(win32reg:expand(Val),"iexplore.exe"),
os:cmd("\"" ++ IExplore ++ "\" " ++ Url);
@@ -186,7 +186,7 @@ script_start([App,Browser]) ->
{Port,{exit_status,_Error}} ->
io:format(" not running, starting ~w...\n",
[Browser]),
- os:cmd(BStr ++ " " ++ Url),
+ _ = os:cmd(BStr ++ " " ++ Url),
ok
after ?SEND_URL_TIMEOUT ->
io:format(" failed, starting ~w...\n",[Browser]),
@@ -206,7 +206,7 @@ script_start([App,Browser]) ->
usage() ->
io:format("Starting webtool...\n"),
- start(),
+ {ok, _} = start(),
Apps = lists:map(fun({A,_}) -> A end,get_applications()),
io:format(
"\nUsage: start_webtool application [ browser ]\n"
@@ -254,7 +254,12 @@ start(Path,Port) when is_integer(Port)->
start(Path,Data0)->
Data = Data0 ++ rest_of_standard_data(),
- gen_server:start({local,ct_web_tool},ct_webtool,{Path,Data},[]).
+ case gen_server:start({local,ct_web_tool},ct_webtool,{Path,Data},[]) of
+ {error, {already_started, Pid}} ->
+ {ok, Pid};
+ Else ->
+ Else
+ end.
stop()->
gen_server:call(ct_web_tool,stoppit).
diff --git a/lib/common_test/src/cth_conn_log.erl b/lib/common_test/src/cth_conn_log.erl
index 0501c6ed1c..883da0da0a 100644
--- a/lib/common_test/src/cth_conn_log.erl
+++ b/lib/common_test/src/cth_conn_log.erl
@@ -170,7 +170,7 @@ post_end_per_testcase(TestCase,_Config,Return,CthState) ->
end,
case ct_util:update_testdata(?MODULE, Update) of
deleted ->
- [ct_util:delete_testdata({?MODULE,ConnMod}) ||
+ _ = [ct_util:delete_testdata({?MODULE,ConnMod}) ||
{ConnMod,_} <- CthState],
error_logger:delete_report_handler(ct_conn_log_h);
{error,no_response} ->
diff --git a/lib/common_test/src/cth_log_redirect.erl b/lib/common_test/src/cth_log_redirect.erl
index 33a3813a16..6d77d7ee9e 100644
--- a/lib/common_test/src/cth_log_redirect.erl
+++ b/lib/common_test/src/cth_log_redirect.erl
@@ -127,7 +127,7 @@ handle_event(Event, #eh_state{log_func = LogFunc} = State) ->
_Else ->
{ok, ErrLogType} = application:get_env(sasl, errlog_type),
SReport = sasl_report:format_report(group_leader(), ErrLogType,
- tag_event(Event)),
+ tag_event(Event, local)),
if is_list(SReport) ->
SaslHeader = format_header(State),
case LogFunc of
@@ -142,8 +142,9 @@ handle_event(Event, #eh_state{log_func = LogFunc} = State) ->
ignore
end
end,
+ %% note that error_logger (unlike sasl) expects UTC time
EReport = error_logger_tty_h:write_event(
- tag_event(Event),io_lib),
+ tag_event(Event, utc), io_lib),
if is_list(EReport) ->
ErrHeader = format_header(State),
case LogFunc of
@@ -220,7 +221,9 @@ terminate(_) ->
terminate(_Arg, _State) ->
ok.
-tag_event(Event) ->
+tag_event(Event, utc) ->
+ {calendar:universal_time(), Event};
+tag_event(Event, _) ->
{calendar:local_time(), Event}.
set_curr_func(CurrFunc, Config) ->
diff --git a/lib/common_test/src/erl2html2.erl b/lib/common_test/src/erl2html2.erl
index a1e0bf3879..7f3eb699de 100644
--- a/lib/common_test/src/erl2html2.erl
+++ b/lib/common_test/src/erl2html2.erl
@@ -62,15 +62,15 @@ convert(File, Dest, InclPath, Header) ->
{ok,SFd} ->
case file:open(Dest,[write,raw]) of
{ok,DFd} ->
- file:write(DFd,[Header,"<pre>\n"]),
+ ok = file:write(DFd,[Header,"<pre>\n"]),
_Lines = build_html(SFd,DFd,encoding(File),Functions),
- file:write(DFd,["</pre>\n",footer(),
+ ok = file:write(DFd,["</pre>\n",footer(),
"</body>\n</html>\n"]),
%% {_, Time2} = statistics(runtime),
%% io:format("Converted ~p lines in ~.2f Seconds.~n",
%% [_Lines, Time2/1000]),
- file:close(SFd),
- file:close(DFd),
+ ok = file:close(SFd),
+ ok = file:close(DFd),
ok;
Error ->
Error
@@ -130,6 +130,8 @@ parse_preprocessed_file(Epp, File, InCorrectFile) ->
throw({error,Reason,InCorrectFile});
{error,_Reason} ->
parse_preprocessed_file(Epp, File, InCorrectFile);
+ {warning,_} ->
+ parse_preprocessed_file(Epp, File, InCorrectFile);
{eof,_Location} ->
[]
end.
@@ -138,7 +140,7 @@ parse_non_preprocessed_file(File) ->
case file:open(File, []) of
{ok,Epp} ->
Forms = parse_non_preprocessed_file(Epp, File, 1),
- file:close(Epp),
+ ok = file:close(Epp),
{ok,Forms};
Error = {error,_E} ->
Error
@@ -205,14 +207,14 @@ build_html(SFd,DFd,Encoding,FuncsAndCs) ->
%% line of last expression in function found
build_html(SFd,DFd,Enc,{ok,Str},LastL,FuncsAndCs,_IsFuncDef,{F,LastL}) ->
LastLineLink = test_server_ctrl:uri_encode(F++"-last_expr",utf8),
- file:write(DFd,["<a name=\"",
- to_raw_list(LastLineLink,Enc),"\"/>"]),
+ ok = file:write(DFd,["<a name=\"",
+ to_raw_list(LastLineLink,Enc),"\"/>"]),
build_html(SFd,DFd,Enc,{ok,Str},LastL,FuncsAndCs,true,undefined);
%% function start line found
build_html(SFd,DFd,Enc,{ok,Str},L0,[{F,A,L0,LastL}|FuncsAndCs],
_IsFuncDef,_FAndLastL) ->
FALink = test_server_ctrl:uri_encode(F++"-"++integer_to_list(A),utf8),
- file:write(DFd,["<a name=\"",to_raw_list(FALink,Enc),"\"/>"]),
+ ok = file:write(DFd,["<a name=\"",to_raw_list(FALink,Enc),"\"/>"]),
build_html(SFd,DFd,Enc,{ok,Str},L0,FuncsAndCs,true,{F,LastL});
build_html(SFd,DFd,Enc,{ok,Str},L,[{clause,L}|FuncsAndCs],
_IsFuncDef,FAndLastL) ->
@@ -220,7 +222,7 @@ build_html(SFd,DFd,Enc,{ok,Str},L,[{clause,L}|FuncsAndCs],
build_html(SFd,DFd,Enc,{ok,Str},L,FuncsAndCs,IsFuncDef,FAndLastL) ->
LStr = line_number(L),
Str1 = line(Str,IsFuncDef),
- file:write(DFd,[LStr,Str1]),
+ ok = file:write(DFd,[LStr,Str1]),
build_html(SFd,DFd,Enc,file:read_line(SFd),L+1,FuncsAndCs,false,FAndLastL);
build_html(_SFd,_DFd,_Enc,eof,L,_FuncsAndCs,_IsFuncDef,_FAndLastL) ->
L.
diff --git a/lib/common_test/src/test_server.erl b/lib/common_test/src/test_server.erl
index 919526c5d7..924086f2bd 100644
--- a/lib/common_test/src/test_server.erl
+++ b/lib/common_test/src/test_server.erl
@@ -21,7 +21,7 @@
-define(DEFAULT_TIMETRAP_SECS, 60).
%%% TEST_SERVER_CTRL INTERFACE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export([run_test_case_apply/1,init_target_info/0,init_purify/0]).
+-export([run_test_case_apply/1,init_target_info/0]).
-export([cover_compile/1,cover_analyse/2]).
%%% TEST_SERVER_SUP INTERFACE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -49,10 +49,6 @@
-export([break/1,break/2,break/3,continue/0,continue/1]).
-%%% DEBUGGER INTERFACE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export([purify_new_leaks/0, purify_format/2, purify_new_fds_inuse/0,
- purify_is_running/0]).
-
%%% PRIVATE EXPORTED %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-export([]).
@@ -73,10 +69,6 @@ init_target_info() ->
username=test_server_sup:get_username(),
cookie=atom_to_list(erlang:get_cookie())}.
-init_purify() ->
- purify_new_leaks().
-
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% cover_compile(#cover{app=App,incl=Include,excl=Exclude,cross=Cross}) ->
%% {ok,#cover{mods=AnalyseModules}} | {error,Reason}
@@ -100,7 +92,7 @@ cover_compile(CoverInfo=#cover{app=none,incl=Include,cross=Cross}) ->
case length(CompileMods) of
0 ->
io:fwrite("WARNING: No modules to cover compile!\n\n",[]),
- cover:start(), % start cover server anyway
+ {ok, _} = start_cover(), % start cover server anyway
{ok,CoverInfo#cover{mods=[]}};
N ->
io:fwrite("Cover compiling ~w modules - "
@@ -115,7 +107,7 @@ cover_compile(CoverInfo=#cover{app=App,excl=all,incl=Include,cross=Cross}) ->
case length(CompileMods) of
0 ->
io:fwrite("WARNING: No modules to cover compile!\n\n",[]),
- cover:start(), % start cover server anyway
+ {ok, _} = start_cover(), % start cover server anyway
{ok,CoverInfo#cover{mods=[]}};
N ->
io:fwrite("Cover compiling '~w' (~w files) - "
@@ -158,7 +150,7 @@ cover_compile(CoverInfo=#cover{app=App,excl=Exclude,
case length(CompileMods) of
0 ->
io:fwrite("WARNING: No modules to cover compile!\n\n",[]),
- cover:start(), % start cover server anyway
+ {ok, _} = start_cover(), % start cover server anyway
{ok,CoverInfo#cover{mods=[]}};
N ->
io:fwrite("Cover compiling '~w' (~w files) - "
@@ -175,11 +167,11 @@ module_names(Beams) ->
do_cover_compile(Modules) ->
- cover:start(),
+ {ok, _} = start_cover(),
Sticky = prepare_cover_compile(Modules,[]),
R = cover:compile_beam(Modules),
- [warn_compile(Error) || Error <- R,element(1,Error)=/=ok],
- [code:stick_mod(M) || M <- Sticky],
+ _ = [warn_compile(Error) || Error <- R,element(1,Error)=/=ok],
+ _ = [code:stick_mod(M) || M <- Sticky],
ok.
warn_compile({error,{Reason,Module}}) ->
@@ -366,9 +358,7 @@ stick_all_sticky(Node,Sticky) ->
%% compensate timetraps for runtime delays introduced by e.g. tools like
%% cover.
-run_test_case_apply({CaseNum,Mod,Func,Args,Name,
- RunInit,TimetrapData}) ->
- purify_format("Test case #~w ~w:~w/1", [CaseNum, Mod, Func]),
+run_test_case_apply({Mod,Func,Args,Name,RunInit,TimetrapData}) ->
case os:getenv("TS_RUN_VALGRIND") of
false ->
ok;
@@ -380,7 +370,6 @@ run_test_case_apply({CaseNum,Mod,Func,Args,Name,
Result = run_test_case_apply(Mod, Func, Args, Name, RunInit,
TimetrapData),
ProcAft = erlang:system_info(process_count),
- purify_new_leaks(),
DetFail = get(test_server_detected_fail),
{Result,DetFail,ProcBef,ProcAft}.
@@ -585,7 +574,8 @@ run_test_case_msgloop(#st{ref=Ref,pid=Pid,end_conf_pid=EndConfPid0}=St0) ->
{user_timetrap,Pid,_TrapTime,StartTime,E={user_timetrap_error,_},_} ->
case update_user_timetraps(Pid, StartTime) of
proceed ->
- self() ! {abort_current_testcase,E,Pid};
+ self() ! {abort_current_testcase,E,Pid},
+ ok;
ignore ->
ok
end,
@@ -600,7 +590,8 @@ run_test_case_msgloop(#st{ref=Ref,pid=Pid,end_conf_pid=EndConfPid0}=St0) ->
true ->
TrapTime
end,
- timetrap(TrapTime, TotalTime, Pid, Scale);
+ _ = timetrap(TrapTime, TotalTime, Pid, Scale),
+ ok;
ignore ->
ok
end,
@@ -724,7 +715,7 @@ do_call_end_conf(Starter,Mod,Func,Data,TCExitReason,Conf,TVal) ->
Supervisor = self(),
EndConfApply =
fun() ->
- timetrap(TVal),
+ _ = timetrap(TVal),
%% We can't handle fails or skips here
%% (neither input nor output). The error can
%% be read from Conf though (tc_status).
@@ -775,7 +766,8 @@ print_end_conf_result(Mod,Func,Conf,Cause,Error) ->
" ~s!\n\tReason: ~ts\n",
[Mod,Func,Conf,Cause,ErrorStr])
end,
- group_leader() ! {printout,12,Str2Print}.
+ group_leader() ! {printout,12,Str2Print},
+ ok.
spawn_fw_call(Mod,IPTC={init_per_testcase,Func},CurrConf,Pid,
@@ -1287,7 +1279,9 @@ user_callback({CBMod,CBFunc}, Mod, Func, InitOrEnd, Args) ->
init_per_testcase(Mod, Func, Args) ->
case code:is_loaded(Mod) of
- false -> code:load_file(Mod);
+ false ->
+ _ = code:load_file(Mod),
+ ok;
_ -> ok
end,
case erlang:function_exported(Mod, init_per_testcase, 2) of
@@ -1355,7 +1349,8 @@ print_init_conf_result(Line,Cause,Reason) ->
"\tLocation: ~ts\n\tReason: ~ts\n",
[Cause,FormattedLoc,ReasonStr])
end,
- group_leader() ! {printout,12,Str2Print}.
+ group_leader() ! {printout,12,Str2Print},
+ ok.
end_per_testcase(Mod, Func, Conf) ->
@@ -1426,7 +1421,8 @@ print_end_tc_warning(EndFunc,Reason,Cause,Loc) ->
"Reason: ~ts\nLine: ~ts\n",
[EndFunc,Cause,ReasonStr,FormattedLoc])
end,
- group_leader() ! {printout,12,Str2Print}.
+ group_leader() ! {printout,12,Str2Print},
+ ok.
get_loc() ->
get(test_server_loc).
@@ -1657,7 +1653,8 @@ messages_get() ->
%%
%% Make sure proceeding IO from FromPid won't get rejected
permit_io(GroupLeader, FromPid) ->
- GroupLeader ! {permit_io,FromPid}.
+ GroupLeader ! {permit_io,FromPid},
+ ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% sleep(Time) -> ok
@@ -1829,7 +1826,6 @@ timetrap_scale_factor() ->
timetrap_scale_factor([
{ 2, fun() -> has_lock_checking() end},
{ 3, fun() -> has_superfluous_schedulers() end},
- { 5, fun() -> purify_is_running() end},
{ 6, fun() -> is_debug() end},
{10, fun() -> is_cover() end}
]).
@@ -2129,7 +2125,8 @@ timetrap_cancel_all(TCPid, SendToServer) ->
ok;
Timers ->
[timetrap_cancel_one(Handle, false) ||
- {Handle,Pid,_} <- Timers, Pid == TCPid]
+ {Handle,Pid,_} <- Timers, Pid == TCPid],
+ ok
end,
case get(test_server_user_timetrap) of
undefined ->
@@ -2139,13 +2136,15 @@ timetrap_cancel_all(TCPid, SendToServer) ->
{UserTTSup,_StartTime} ->
remove_user_timetrap(UserTTSup),
put(test_server_user_timetrap,
- proplists:delete(TCPid, UserTTs));
+ proplists:delete(TCPid, UserTTs)),
+ ok;
undefined ->
ok
end
end,
if SendToServer == true ->
- group_leader() ! {timetrap_cancel_all,TCPid,self()};
+ group_leader() ! {timetrap_cancel_all,TCPid,self()},
+ ok;
true ->
ok
end,
@@ -2560,10 +2559,11 @@ run_on_shielded_node(Fun, CArgs) when is_function(Fun), is_list(CArgs) ->
-spec start_job_proxy_fun(_, _) -> fun(() -> no_return()).
start_job_proxy_fun(Master, Fun) ->
fun () ->
- start_job_proxy(),
+ _ = start_job_proxy(),
receive
Ref ->
- Master ! {Ref, Fun()}
+ Master ! {Ref, Fun()},
+ ok
end,
receive after infinity -> infinity end
end.
@@ -2729,64 +2729,25 @@ is_commercial() ->
_ -> true
end.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% DEBUGGER INTERFACE %%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% purify_is_running() -> false|true
-%%
-%% Tests if Purify is currently running.
-
-purify_is_running() ->
- case catch erlang:system_info({error_checker, running}) of
- {'EXIT', _} -> false;
- Res -> Res
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% purify_new_leaks() -> false|BytesLeaked
-%% BytesLeaked = integer()
-%%
-%% Checks for new memory leaks if Purify is active.
-%% Returns the number of bytes leaked, or false if Purify
-%% is not running.
-purify_new_leaks() ->
- case catch erlang:system_info({error_checker, memory}) of
- {'EXIT', _} -> false;
- Leaked when is_integer(Leaked) -> Leaked
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% purify_new_fds_inuse() -> false|FdsInuse
-%% FdsInuse = integer()
-%%
-%% Checks for new file descriptors in use.
-%% Returns the number of new file descriptors in use, or false
-%% if Purify is not running.
-purify_new_fds_inuse() ->
- case catch erlang:system_info({error_checker, fd}) of
- {'EXIT', _} -> false;
- Inuse when is_integer(Inuse) -> Inuse
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% purify_format(Format, Args) -> ok
-%% Format = string()
-%% Args = lists()
-%%
-%% Outputs the formatted string to Purify's logfile,if Purify is active.
-purify_format(Format, Args) ->
- (catch erlang:system_info({error_checker, io_lib:format(Format, Args)})),
- ok.
-
-
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% Apply given function and reply to caller or proxy.
%%
do_sync_apply(Proxy, From, {M,F,A}) ->
Result = apply(M, F, A),
- if is_pid(Proxy) -> Proxy ! {sync_result_proxy,From,Result};
- true -> From ! {sync_result,Result}
+ if is_pid(Proxy) ->
+ Proxy ! {sync_result_proxy,From,Result},
+ ok;
+ true ->
+ From ! {sync_result,Result},
+ ok
end.
+
+start_cover() ->
+ case cover:start() of
+ {error, {already_started, Pid}} ->
+ {ok, Pid};
+ Else ->
+ Else
+ end.
+
diff --git a/lib/common_test/src/test_server_ctrl.erl b/lib/common_test/src/test_server_ctrl.erl
index ff960c22a5..b52e4bef9b 100644
--- a/lib/common_test/src/test_server_ctrl.erl
+++ b/lib/common_test/src/test_server_ctrl.erl
@@ -294,7 +294,7 @@ start_link(_) ->
start() ->
case gen_server:start({local,?MODULE}, ?MODULE, [], []) of
- {ok, Pid} ->
+ {error, {already_started, Pid}} ->
{ok, Pid};
Other ->
Other
@@ -302,7 +302,7 @@ start() ->
start_link() ->
case gen_server:start_link({local,?MODULE}, ?MODULE, [], []) of
- {ok, Pid} ->
+ {error, {already_started, Pid}} ->
{ok, Pid};
Other ->
Other
@@ -512,7 +512,7 @@ init([]) ->
TI = TI0#target_info{host=TargetHost,
naming=naming(),
master=TargetHost},
- ets:new(slave_tab, [named_table,set,public,{keypos,2}]),
+ _ = ets:new(slave_tab, [named_table,set,public,{keypos,2}]),
set_hosts([TI#target_info.host]),
{ok,State#state{target_info=TI}}.
@@ -867,7 +867,7 @@ handle_call({create_priv_dir,Value}, _From, State) ->
handle_call({testcase_callback,ModFunc}, _From, State) ->
case ModFunc of
{Mod,Func} ->
- case code:is_loaded(Mod) of
+ _ = case code:is_loaded(Mod) of
{file,_} ->
ok;
false ->
@@ -1079,8 +1079,8 @@ terminate(_Reason, State) ->
false -> ok;
Sock -> test_server_node:stop_tracer_node(Sock)
end,
- kill_all_jobs(State#state.jobs),
- test_server_node:kill_nodes(),
+ ok = kill_all_jobs(State#state.jobs),
+ _ = test_server_node:kill_nodes(),
ok.
kill_all_jobs([{_Name,JobPid}|Jobs]) ->
@@ -1125,7 +1125,7 @@ spawn_tester(Mod, Func, Args, Dir, Name, Levels, RejectIoReqs,
init_tester(Mod, Func, Args, Dir, Name, {_,_,MinLev}=Levels,
RejectIoReqs, CreatePrivDir, TCCallback, ExtraTools) ->
process_flag(trap_exit, true),
- test_server_io:start_link(),
+ _ = test_server_io:start_link(),
put(test_server_name, Name),
put(test_server_dir, Dir),
put(test_server_total_time, 0),
@@ -1199,8 +1199,7 @@ init_tester(Mod, Func, Args, Dir, Name, {_,_,MinLev}=Levels,
{UnexpectedIoName,UnexpectedIoFooter} = get(test_server_unexpected_footer),
{ok,UnexpectedIoFd} = open_html_file(UnexpectedIoName, [append]),
io:put_chars(UnexpectedIoFd, "\n</pre>\n"++UnexpectedIoFooter),
- file:close(UnexpectedIoFd),
- ok.
+ ok = file:close(UnexpectedIoFd).
report_severe_error(Reason) ->
test_server_sup:framework_call(report, [severe_error,Reason]).
@@ -1927,7 +1926,7 @@ html_convert_modules([Mod|Mods]) ->
Name = atom_to_list(Mod),
DestFile = filename:join(DestDir,
downcase(Name)++?src_listing_ext),
- html_possibly_convert(SrcFile1, SrcFileInfo, DestFile),
+ _ = html_possibly_convert(SrcFile1, SrcFileInfo, DestFile),
html_convert_modules(Mods)
end;
_Other ->
@@ -2066,7 +2065,7 @@ add_init_and_end_per_suite([], LastMod, LastRef, FwMod) ->
end.
do_add_init_and_end_per_suite(LastMod, LastRef, Mod, FwMod) ->
- case code:is_loaded(Mod) of
+ _ = case code:is_loaded(Mod) of
false -> code:load_file(Mod);
_ -> ok
end,
@@ -2140,7 +2139,6 @@ do_add_end_per_suite_and_skip(LastMod, LastRef, Mod, FwMod) ->
%% Runs the specified tests, then displays/logs the summary.
run_test_cases(TestSpec, Config, TimetrapData) ->
- test_server:init_purify(),
case lists:member(no_src, get(test_server_logopts)) of
true ->
ok;
@@ -2323,7 +2321,7 @@ run_test_cases_loop([{SkipTag,{Type,Ref,Case,Comment},SkipMode}|Cases],
Config, TimetrapData, Mode, Status) when
((SkipTag==auto_skip_case) or (SkipTag==skip_case)) and
((Type==conf) or (Type==make)) ->
- file:set_cwd(filename:dirname(get(test_server_dir))),
+ ok = file:set_cwd(filename:dirname(get(test_server_dir))),
CurrIOHandler = get(test_server_common_io_handler),
ParentMode = tl(Mode),
@@ -2339,7 +2337,7 @@ run_test_cases_loop([{SkipTag,{Type,Ref,Case,Comment},SkipMode}|Cases],
false ->
%% this is a skipped end conf for a top level parallel
%% group, buffered io can be flushed
- handle_test_case_io_and_status(),
+ _ = handle_test_case_io_and_status(),
set_io_buffering(undefined),
{Mod,Func} = skip_case(AutoOrUser, Ref, 0, Case, Comment,
false, SkipMode),
@@ -2351,7 +2349,7 @@ run_test_cases_loop([{SkipTag,{Type,Ref,Case,Comment},SkipMode}|Cases],
_ ->
%% this is a skipped end conf for a parallel group nested
%% under a parallel group (io buffering is active)
- wait_for_cases(Ref),
+ _ = wait_for_cases(Ref),
{Mod,Func} = skip_case(AutoOrUser, Ref, 0, Case, Comment,
true, SkipMode),
ConfData = {Mod,{Func,get_name(SkipMode)},Comment},
@@ -2459,7 +2457,7 @@ run_test_cases_loop([{auto_skip_case,{Case,Comment},SkipMode}|Cases],
run_test_cases_loop([{skip_case,{{Mod,all}=Case,Comment},SkipMode}|Cases],
Config, TimetrapData, Mode, Status) ->
- skip_case(user, undefined, 0, Case, Comment, false, SkipMode),
+ _ = skip_case(user, undefined, 0, Case, Comment, false, SkipMode),
test_server_sup:framework_call(report, [tc_user_skip,
{Mod,{all,get_name(SkipMode)},
Comment}]),
@@ -2489,7 +2487,7 @@ run_test_cases_loop([{conf,Ref,Props,{Mod,Func}}|_Cases]=Cs0,
%% collect results from the test case processes
%% and calc total time
OkSkipFail = handle_test_case_io_and_status(),
- file:set_cwd(filename:dirname(get(test_server_dir))),
+ ok = file:set_cwd(filename:dirname(get(test_server_dir))),
After = ?now,
Before = get(test_server_parallel_start_time),
Elapsed = timer:now_diff(After, Before)/1000000,
@@ -3582,7 +3580,7 @@ handle_io_and_exit_loop([], [{undefined,CurrPid,CaseNum,Mod,Func}|Ps] = Cases, O
handle_io_and_exit_loop(Refs, [{Ref,CurrPid,CaseNum,Mod,Func}|Ps] = Cases, Ok,Skip,Fail) ->
receive
{started,_,CurrPid,CaseNum,Mod,Func} ->
- handle_io_and_exits(self(), CurrPid, CaseNum, Mod, Func, Cases),
+ _ = handle_io_and_exits(self(), CurrPid, CaseNum, Mod, Func, Cases),
Refs1 =
case Refs of
[Ref|Rs] -> % must be end conf case for subgroup
@@ -3658,7 +3656,7 @@ handle_io_and_exits(Main, CurrPid, CaseNum, Mod, Func, Cases) ->
%% about the execution time and the return value of the test case function.
run_test_case(Ref, Num, Mod, Func, Args, RunInit, TimetrapData) ->
- file:set_cwd(filename:dirname(get(test_server_dir))),
+ ok = file:set_cwd(filename:dirname(get(test_server_dir))),
run_test_case1(Ref, Num, Mod, Func, Args, RunInit,
TimetrapData, [], self()).
@@ -3668,7 +3666,7 @@ run_test_case(Ref, Num, Mod, Func, Args, skip_init, TimetrapData, Mode) ->
TimetrapData, Mode, self());
run_test_case(Ref, Num, Mod, Func, Args, RunInit, TimetrapData, Mode) ->
- file:set_cwd(filename:dirname(get(test_server_dir))),
+ ok = file:set_cwd(filename:dirname(get(test_server_dir))),
Main = self(),
case check_prop(parallel, Mode) of
false ->
@@ -3682,7 +3680,7 @@ run_test_case(Ref, Num, Mod, Func, Args, RunInit, TimetrapData, Mode) ->
spawn_link(
fun() ->
process_flag(trap_exit, true),
- [put(Key, Val) || {Key,Val} <- Dictionary],
+ _ = [put(Key, Val) || {Key,Val} <- Dictionary],
set_io_buffering({tc,Main}),
run_test_case1(Ref, Num, Mod, Func, Args, RunInit,
TimetrapData, Mode, Main)
@@ -3699,7 +3697,8 @@ run_test_case1(Ref, Num, Mod, Func, Args, RunInit,
false -> ok;
true ->
test_server_io:start_transaction(),
- Main ! {started,Ref,self(),Num,Mod,Func}
+ Main ! {started,Ref,self(),Num,Mod,Func},
+ ok
end,
TSDir = get(test_server_dir),
@@ -3774,7 +3773,7 @@ run_test_case1(Ref, Num, Mod, Func, Args, RunInit,
%% run the test case
{Result,DetectedFail,ProcsBefore,ProcsAfter} =
- run_test_case_apply(Num, Mod, Func, [UpdatedArgs], GrName,
+ run_test_case_apply(Mod, Func, [UpdatedArgs], GrName,
RunInit, TimetrapData),
{Time,RetVal,Loc,Opts,Comment} =
case Result of
@@ -3906,7 +3905,8 @@ run_test_case1(Ref, Num, Mod, Func, Args, RunInit,
true ->
test_server_io:end_transaction(),
Main ! {finished,Ref,self(),Num,Mod,Func,
- ?mod_result(Status),{Time,RetVal,Opts}}
+ ?mod_result(Status),{Time,RetVal,Opts}},
+ ok
end,
{Time,RetVal,Opts}.
@@ -4329,7 +4329,7 @@ do_format_exception(Reason={Error,Stack}) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% run_test_case_apply(CaseNum, Mod, Func, Args, Name, RunInit,
+%% run_test_case_apply(Mod, Func, Args, Name, RunInit,
%% TimetrapData) ->
%% {{Time,RetVal,Loc,Opts,Comment},DetectedFail,ProcessesBefore,ProcessesAfter} |
%% {{died,Reason,unknown,Comment},DetectedFail,ProcessesBefore,ProcessesAfter}
@@ -4343,9 +4343,9 @@ do_format_exception(Reason={Error,Stack}) ->
%% ProcessesBefore = ProcessesAfter = integer()
%%
-run_test_case_apply(CaseNum, Mod, Func, Args, Name, RunInit,
+run_test_case_apply(Mod, Func, Args, Name, RunInit,
TimetrapData) ->
- test_server:run_test_case_apply({CaseNum,Mod,Func,Args,Name,RunInit,
+ test_server:run_test_case_apply({Mod,Func,Args,Name,RunInit,
TimetrapData}).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -5276,7 +5276,8 @@ check_cross([]) ->
%% This per application analysis writes the file cover.html in the
%% application's run.<timestamp> directory.
stop_cover(#cover{}=CoverInfo, TestDir) ->
- cover_analyse(CoverInfo, TestDir);
+ cover_analyse(CoverInfo, TestDir),
+ ok;
stop_cover(_CoverInfo, _TestDir) ->
%% Cover is probably controlled by the framework
ok.
@@ -5315,7 +5316,7 @@ cover_analyse(CoverInfo, TestDir) ->
[?cross_coverlog_name]),
io:fwrite(CoverLog, "<p>CoverFile: <code>~tp</code>\n", [CoverFile]),
- write_cross_cover_info(TestDir,Cross),
+ ok = write_cross_cover_info(TestDir,Cross),
case length(cover:imported_modules()) of
Imps when Imps > 0 ->
@@ -5329,7 +5330,7 @@ cover_analyse(CoverInfo, TestDir) ->
io:fwrite(CoverLog, "<p>Excluded module(s): <code>~tp</code>\n", [Excluded]),
Coverage = test_server:cover_analyse(TestDir, CoverInfo),
- write_binary_file(filename:join(TestDir,?raw_coverlog_name),
+ ok = write_binary_file(filename:join(TestDir,?raw_coverlog_name),
term_to_binary(Coverage)),
case lists:filter(fun({_M,{_,_,_}}) -> false;
@@ -5344,8 +5345,8 @@ cover_analyse(CoverInfo, TestDir) ->
end,
TotPercent = write_cover_result_table(CoverLog, Coverage),
- write_binary_file(filename:join(TestDir, ?cover_total),
- term_to_binary(TotPercent)).
+ ok = write_binary_file(filename:join(TestDir, ?cover_total),
+ term_to_binary(TotPercent)).
%% Cover analysis - accumulated over multiple tests
%% This can be executed on any node after all tests are finished.
@@ -5395,7 +5396,7 @@ write_cross_cover_info(Dir,Cross) ->
write_cross_cover_logs([{Tag,Coverage}|T],TagDirMods) ->
case lists:keyfind(Tag,1,TagDirMods) of
{_,Dir,Mods} when Mods=/=[] ->
- write_binary_file(filename:join(Dir,?raw_cross_coverlog_name),
+ ok = write_binary_file(filename:join(Dir,?raw_cross_coverlog_name),
term_to_binary(Coverage)),
CoverLogName = filename:join(Dir,?cross_coverlog_name),
{ok,CoverLog} = open_html_file(CoverLogName),
diff --git a/lib/common_test/src/test_server_gl.erl b/lib/common_test/src/test_server_gl.erl
index 333c8fc06e..7d6fe64b92 100644
--- a/lib/common_test/src/test_server_gl.erl
+++ b/lib/common_test/src/test_server_gl.erl
@@ -185,7 +185,7 @@ handle_info({capture,Cap0}, St) ->
end,
{noreply,St#st{capture=Cap}};
handle_info({io_request,From,ReplyAs,Req}=IoReq, St) ->
- try io_req(Req, From, St) of
+ _ = try io_req(Req, From, St) of
passthrough ->
group_leader() ! IoReq;
{EscapeHtml,Data} ->
@@ -197,7 +197,8 @@ handle_info({io_request,From,ReplyAs,Req}=IoReq, St) ->
#st{capture=none} ->
ok;
#st{capture=CapturePid} ->
- CapturePid ! {captured,Data}
+ CapturePid ! {captured,Data},
+ ok
end,
case EscapeHtml andalso St#st.escape_chars of
true ->
diff --git a/lib/common_test/src/test_server_io.erl b/lib/common_test/src/test_server_io.erl
index 8c5c0aef35..3d5238052b 100644
--- a/lib/common_test/src/test_server_io.erl
+++ b/lib/common_test/src/test_server_io.erl
@@ -215,7 +215,7 @@ handle_call({set_fd,Tag,Fd}, _From, #st{fds=Fds0,tags=Tags0,
true ->
%% Fd ready, print anything buffered for associated Tag
lists:filtermap(fun({T,From,Str}) when T == Tag ->
- output(From, Tag, Str, St1),
+ _ = output(From, Tag, Str, St1),
false;
(_) ->
true
@@ -274,14 +274,15 @@ handle_call(reset_state, _From, #st{fds=Fds,tags=Tags,gls=Gls,
end
end, Tags),
GlList = gb_sets:to_list(Gls),
- [test_server_gl:stop(GL) || GL <- GlList],
+ _ = [test_server_gl:stop(GL) || GL <- GlList],
timer:sleep(100),
case lists:filter(fun(GlPid) -> is_process_alive(GlPid) end, GlList) of
[] ->
ok;
_ ->
timer:sleep(2000),
- [exit(GL, kill) || GL <- GlList]
+ [exit(GL, kill) || GL <- GlList],
+ ok
end,
Empty = gb_trees:empty(),
{ok,Shared} = test_server_gl:start_link(),
@@ -304,7 +305,7 @@ handle_call({stop,FdTags}, From, #st{fds=Fds0,tags=Tags0,
none ->
{Fds,Tags};
{value,Fd} ->
- file:close(Fd),
+ _ = file:close(Fd),
{gb_trees:delete(Tag, Fds),
lists:delete(Tag, Tags)}
end
@@ -333,7 +334,7 @@ handle_info({'EXIT',_Pid,Reason}, _St) ->
handle_info(stop_group_leaders, #st{gls=Gls}=St) ->
%% Stop the remaining group leaders.
GlPids = gb_sets:to_list(Gls),
- [test_server_gl:stop(GL) || GL <- GlPids],
+ _ = [test_server_gl:stop(GL) || GL <- GlPids],
timer:sleep(100),
Wait =
case lists:filter(fun(GlPid) -> is_process_alive(GlPid) end, GlPids) of
@@ -344,7 +345,7 @@ handle_info(stop_group_leaders, #st{gls=Gls}=St) ->
{noreply,St};
handle_info(kill_group_leaders, #st{gls=Gls,stopping=From,
pending_ops=Ops}=St) ->
- [exit(GL, kill) || GL <- gb_sets:to_list(Gls)],
+ _ = [exit(GL, kill) || GL <- gb_sets:to_list(Gls)],
if From /= undefined ->
gen_server:reply(From, ok);
true -> % reply has been sent already
@@ -434,7 +435,7 @@ do_print_buffered(Q0, St) ->
eot ->
Q;
{Tag,Str} ->
- do_output(Tag, Str, undefined, St),
+ _ = do_output(Tag, Str, undefined, St),
do_print_buffered(Q, St)
end.
@@ -448,5 +449,5 @@ gc(#st{gls=Gls0}) ->
InUse = ordsets:from_list(InUse0),
Gls = gb_sets:to_list(Gls0),
NotUsed = ordsets:subtract(Gls, InUse),
- [test_server_gl:stop(Pid) || Pid <- NotUsed],
+ _ = [test_server_gl:stop(Pid) || Pid <- NotUsed],
ok.
diff --git a/lib/common_test/src/test_server_node.erl b/lib/common_test/src/test_server_node.erl
index c64399e485..0b406c54cc 100644
--- a/lib/common_test/src/test_server_node.erl
+++ b/lib/common_test/src/test_server_node.erl
@@ -198,9 +198,9 @@ trc_loop(Sock,Patterns,Type) ->
gen_tcp:close(Sock)
end.
add_nodes(Nodes,Patterns,_Type) ->
- ttb:tracer(Nodes,[{file,{local, test_server}},
- {handler, {{?MODULE,handle_debug},initial}}]),
- ttb:p(all,[call,timestamp]),
+ {ok, _} = ttb:tracer(Nodes,[{file,{local, test_server}},
+ {handler, {{?MODULE,handle_debug},initial}}]),
+ {ok, _} = ttb:p(all,[call,timestamp]),
lists:foreach(fun({TP,M,F,A,Pat}) -> ttb:TP(M,F,A,Pat);
({CTP,M,F,A}) -> ttb:CTP(M,F,A)
end,
@@ -360,8 +360,8 @@ start_node_peer(SlaveName, OptList, From, TI) ->
-spec wait_for_node_started_fun(_, _, _, _, _) -> fun(() -> no_return()).
wait_for_node_started_fun(LSock, Tmo, Cleanup, TI, Self) ->
fun() ->
- wait_for_node_started(LSock,Tmo,undefined,
- Cleanup,TI,Self),
+ {{ok, _}, _} = wait_for_node_started(LSock,Tmo,undefined,
+ Cleanup,TI,Self),
receive after infinity -> ok end
end.
@@ -432,7 +432,7 @@ wait_for_node_started(LSock,Timeout,Client,Cleanup,TI,CtrlPid) ->
client=Client});
false -> ok
end,
- gen_tcp:controlling_process(Sock,CtrlPid),
+ ok = gen_tcp:controlling_process(Sock,CtrlPid),
test_server_ctrl:node_started(Nodename),
{{ok,Nodename},W}
end;
diff --git a/lib/common_test/src/test_server_sup.erl b/lib/common_test/src/test_server_sup.erl
index fa2bb33c2d..6922e01fcc 100644
--- a/lib/common_test/src/test_server_sup.erl
+++ b/lib/common_test/src/test_server_sup.erl
@@ -755,7 +755,7 @@ framework_call(FW,_Func,_Args,DefaultReturn)
DefaultReturn;
framework_call(Callback,Func,Args,DefaultReturn) ->
Mod = list_to_atom(Callback),
- case code:is_loaded(Mod) of
+ _ = case code:is_loaded(Mod) of
false -> code:load_file(Mod);
_ -> ok
end,
@@ -851,7 +851,8 @@ util_start() ->
spawn_link(fun() ->
register(?MODULE, self()),
util_loop(#util_state{starter=Starter})
- end);
+ end),
+ ok;
_Pid ->
ok
end.
diff --git a/lib/common_test/src/vts.erl b/lib/common_test/src/vts.erl
index e1c16fbda4..f1c5051164 100644
--- a/lib/common_test/src/vts.erl
+++ b/lib/common_test/src/vts.erl
@@ -64,7 +64,7 @@
%%%-----------------------------------------------------------------
%%% User API
start() ->
- ct_webtool:start(),
+ {ok, _} = ct_webtool:start(),
ct_webtool:start_tools([],"app=vts").
init_data(ConfigFiles,EvHandlers,LogDir,LogOpts,Tests) ->
@@ -169,7 +169,7 @@ loop(State) ->
NewState = State#state{config=Config,event_handler=EvHandlers,
current_log_dir=LogDir,
logopts=LogOpts,tests=Tests},
- ct_install(NewState),
+ _ = ct_install(NewState),
return(From,ok),
loop(NewState);
{start_page,From} ->
@@ -192,12 +192,12 @@ loop(State) ->
loop(State);
{{add_config_file,Input},From} ->
{Return,State1} = add_config_file1(Input,State),
- ct_install(State1),
+ _ = ct_install(State1),
return(From,Return),
loop(State1);
{{remove_config_file,Input},From} ->
{Return,State1} = remove_config_file1(Input,State),
- ct_install(State1),
+ _ = ct_install(State1),
return(From,Return),
loop(State1);
{run_frame,From} ->
@@ -233,7 +233,7 @@ loop(State) ->
return(From,result_summary_frame1(State)),
loop(State);
stop_reload_results ->
- file:set_cwd(State#state.start_dir),
+ ok = file:set_cwd(State#state.start_dir),
loop(State#state{reload_results=false});
{no_result_log_frame,From} ->
return(From,no_result_log_frame1()),
@@ -277,8 +277,8 @@ call(Msg) ->
end.
return({To,Ref},Result) ->
- To ! {Ref, Result}.
-
+ To ! {Ref, Result},
+ ok.
run_test1(State=#state{tests=Tests,current_log_dir=LogDir,
logopts=LogOpts}) ->
@@ -311,7 +311,6 @@ run_test1(State=#state{tests=Tests,current_log_dir=LogDir,
ct_install(#state{config=Config,event_handler=EvHandlers,
current_log_dir=LogDir}) ->
ct_run:install([{config,Config},{event_handler,EvHandlers}],LogDir).
-
%%%-----------------------------------------------------------------
%%% HTML
start_page1() ->
@@ -549,7 +548,7 @@ case_select(Dir,Suite,Case,N) ->
end,
case MakeResult of
ok ->
- code:add_pathz(Dir),
+ true = code:add_pathz(Dir),
case catch apply(Suite,all,[]) of
{'EXIT',Reason} ->
io:format("\n~p\n",[Reason]),
@@ -755,7 +754,7 @@ report1(tests_start,{TestName,_N},State) ->
end,
State#state{testruns=TestRuns};
report1(tests_done,{_Ok,_Fail,_Skip},State) ->
- timer:send_after(5000, self(),stop_reload_results),
+ {ok, _} = timer:send_after(5000, self(),stop_reload_results),
State#state{running=State#state.running-1,reload_results=true};
report1(tc_start,{_Suite,_Case},State) ->
State;
diff --git a/lib/common_test/test/Makefile b/lib/common_test/test/Makefile
index 1532b6c1f7..b1eddfedd7 100644
--- a/lib/common_test/test/Makefile
+++ b/lib/common_test/test/Makefile
@@ -69,7 +69,8 @@ MODULES= \
erl2html2_SUITE \
test_server_SUITE \
test_server_test_lib \
- ct_release_test_SUITE
+ ct_release_test_SUITE \
+ ct_log_SUITE
ERL_FILES= $(MODULES:%=%.erl)
HRL_FILES= test_server_test_lib.hrl
diff --git a/lib/common_test/test/ct_auto_compile_SUITE.erl b/lib/common_test/test/ct_auto_compile_SUITE.erl
index e6939d23c0..dface99b8f 100644
--- a/lib/common_test/test/ct_auto_compile_SUITE.erl
+++ b/lib/common_test/test/ct_auto_compile_SUITE.erl
@@ -27,6 +27,7 @@
%%% The suites used for the test are located in the data directory.
%%%-------------------------------------------------------------------
-module(ct_auto_compile_SUITE).
+-warning("Ignore me -- testing that the debugger can handle warnings").
-compile(export_all).
diff --git a/lib/common_test/test/ct_config_SUITE.erl b/lib/common_test/test/ct_config_SUITE.erl
index 9879e0f20d..cbbfe408a8 100644
--- a/lib/common_test/test/ct_config_SUITE.erl
+++ b/lib/common_test/test/ct_config_SUITE.erl
@@ -113,10 +113,14 @@ userconfig_static(Config) when is_list(Config) ->
["config_static_SUITE"]).
userconfig_dynamic(Config) when is_list(Config) ->
- run_test(config_dynamic_SUITE,
- Config,
- {userconfig, {config_driver, "config_server"}},
- ["config_dynamic_SUITE"]).
+ case skip_dynamic() of
+ true -> {skip,"TimeWarpingOS"};
+ false ->
+ run_test(config_dynamic_SUITE,
+ Config,
+ {userconfig, {config_driver, "config_server"}},
+ ["config_dynamic_SUITE"])
+ end.
testspec_legacy(Config) when is_list(Config) ->
DataDir = ?config(data_dir, Config),
@@ -147,16 +151,20 @@ testspec_static(Config) when is_list(Config) ->
file:delete(filename:join(ConfigDir, "spec_static.spec")).
testspec_dynamic(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
- ConfigDir = ?config(config_dir, Config),
- make_spec(DataDir, ConfigDir, "spec_dynamic.spec",
- [config_dynamic_SUITE],
- [{userconfig, {config_driver, "config_server"}}]),
- run_test(config_dynamic_SUITE,
- Config,
- {spec, filename:join(ConfigDir, "spec_dynamic.spec")},
- []),
- file:delete(filename:join(ConfigDir, "spec_dynamic.spec")).
+ case skip_dynamic() of
+ true -> {skip,"TimeWarpingOS"};
+ false ->
+ DataDir = ?config(data_dir, Config),
+ ConfigDir = ?config(config_dir, Config),
+ make_spec(DataDir, ConfigDir, "spec_dynamic.spec",
+ [config_dynamic_SUITE],
+ [{userconfig, {config_driver, "config_server"}}]),
+ run_test(config_dynamic_SUITE,
+ Config,
+ {spec, filename:join(ConfigDir, "spec_dynamic.spec")},
+ []),
+ file:delete(filename:join(ConfigDir, "spec_dynamic.spec"))
+ end.
@@ -198,6 +206,23 @@ setup_env(Test, Config, CTConfig) ->
reformat_events(Events, EH) ->
ct_test_support:reformat(Events, EH).
+
+%%%-----------------------------------------------------------------
+%%% Test related to 'localtime' will often fail if the test host is
+%%% time warping, so let's just skip the 'dynamic' tests then.
+skip_dynamic() ->
+ case os:getenv("TS_EXTRA_PLATFORM_LABEL") of
+ TSExtraPlatformLabel when is_list(TSExtraPlatformLabel) ->
+ case string:str(TSExtraPlatformLabel,"TimeWarpingOS") of
+ 0 -> false;
+ _ -> true
+ end;
+ _ ->
+ false
+ end.
+
+
+
%%%-----------------------------------------------------------------
%%% TEST EVENTS
%%%-----------------------------------------------------------------
diff --git a/lib/common_test/test/ct_config_SUITE_data/config/test/config_dynamic_SUITE.erl b/lib/common_test/test/ct_config_SUITE_data/config/test/config_dynamic_SUITE.erl
index c64774cd4f..20fdf1034b 100644
--- a/lib/common_test/test/ct_config_SUITE_data/config/test/config_dynamic_SUITE.erl
+++ b/lib/common_test/test/ct_config_SUITE_data/config/test/config_dynamic_SUITE.erl
@@ -73,8 +73,8 @@ test_get_known_variable(_)->
% localtime will be updated in 5 seconds, check that
test_localtime_update(_)->
Seconds = 5,
- LT1 = ct:get_config(localtime),
- ct:sleep(Seconds*1000),
+ LT1 = ct:reload_config(localtime),
+ timer:sleep(Seconds*1000), % don't want scaling of this timer
LT2 = ct:reload_config(localtime),
case is_diff_ok(LT1, LT2, Seconds) of
{false, Actual, Exp}->
@@ -137,6 +137,11 @@ my_dt_to_datetime([{date, D},{time, T}])->
is_diff_ok(DT1, DT2, Seconds)->
GS1 = calendar:datetime_to_gregorian_seconds(my_dt_to_datetime(DT1)),
GS2 = calendar:datetime_to_gregorian_seconds(my_dt_to_datetime(DT2)),
+ ct:log("Checking diff~n"
+ "DT1: ~p, gregorian seconds: ~p~n"
+ "DT2: ~p, gregorian seconds: ~p~n"
+ "Diff: ~p",
+ [DT1,GS1,DT2,GS2,GS2-GS1]),
if
GS2-GS1 > Seconds+Seconds/2;
GS2-GS1 < Seconds-Seconds/2->
diff --git a/lib/common_test/test/ct_gen_conn_SUITE_data/conn_SUITE.erl b/lib/common_test/test/ct_gen_conn_SUITE_data/conn_SUITE.erl
index 1404df6410..19eb1211fa 100644
--- a/lib/common_test/test/ct_gen_conn_SUITE_data/conn_SUITE.erl
+++ b/lib/common_test/test/ct_gen_conn_SUITE_data/conn_SUITE.erl
@@ -73,24 +73,28 @@ handles_to_multi_conn_pids(_Config) ->
ConnPid3 = ct_gen_conn:get_conn_pid(Handle3),
{true,true} = {is_process_alive(Handle3),is_process_alive(ConnPid3)},
+ monitor_procs([Handle1,ConnPid1,Handle2,ConnPid2,Handle3,ConnPid3]),
+
ok = proto:close(Handle1),
- ct:sleep(100),
+ ok = wait_procs_down([Handle1,ConnPid1]),
{false,false} = {is_process_alive(Handle1),is_process_alive(ConnPid1)},
{true,true} = {is_process_alive(Handle2),is_process_alive(ConnPid2)},
ok = proto:kill_conn_proc(Handle2),
- ct:sleep(100),
+ ok = wait_procs_down([ConnPid2]),
{true,false} = {is_process_alive(Handle2),is_process_alive(ConnPid2)},
ConnPid2x = ct_gen_conn:get_conn_pid(Handle2),
true = is_process_alive(ConnPid2x),
+ monitor_procs([ConnPid2x]),
+
ok = proto:close(Handle2),
- ct:sleep(100),
+ ok = wait_procs_down([Handle2,ConnPid2x]),
{false,false} = {is_process_alive(Handle2),is_process_alive(ConnPid2x)},
application:set_env(ct_test, reconnect, false),
ok = proto:kill_conn_proc(Handle3),
- ct:sleep(100),
+ ok = wait_procs_down([Handle3,ConnPid3]),
{false,false} = {is_process_alive(Handle3),is_process_alive(ConnPid3)},
ok.
@@ -116,24 +120,28 @@ handles_to_single_conn_pids(_Config) ->
{undefined,Handle3,_,_}] = lists:sort(ct_util:get_connections(ConnPid)),
ct:pal("CONNS = ~n~p", [Conns]),
+ monitor_procs([Handle1,Handle2,Handle3,ConnPid]),
ok = proto:close(Handle1),
- ct:sleep(100),
+ ok = wait_procs_down([Handle1]),
{false,true} = {is_process_alive(Handle1),is_process_alive(ConnPid)},
ok = proto:kill_conn_proc(Handle2),
- ct:sleep(100),
+ ok = wait_procs_down([ConnPid]),
NewConnPid = ct_gen_conn:get_conn_pid(Handle2),
NewConnPid = ct_gen_conn:get_conn_pid(Handle3),
true = is_process_alive(Handle2),
true = is_process_alive(Handle3),
+ false = is_process_alive(ConnPid),
+
+ monitor_procs([NewConnPid]),
ok = proto:close(Handle2),
- ct:sleep(100),
+ ok = wait_procs_down([Handle2]),
{false,true} = {is_process_alive(Handle2),is_process_alive(NewConnPid)},
application:set_env(ct_test, reconnect, false),
ok = proto:kill_conn_proc(Handle3),
- ct:sleep(100),
+ ok = wait_procs_down([Handle3,NewConnPid]),
{false,false} = {is_process_alive(Handle3),is_process_alive(NewConnPid)},
ok.
@@ -158,30 +166,37 @@ names_to_multi_conn_pids(_Config) ->
Handle1 = proto:open(mconn1),
+ monitor_procs([Handle1,ConnPid1,Handle2,ConnPid2,Handle3,ConnPid3]),
+
ok = proto:close(mconn1),
- ct:sleep(100),
+ ok = wait_procs_down([Handle1,ConnPid1]),
{false,false} = {is_process_alive(Handle1),is_process_alive(ConnPid1)},
ok = proto:kill_conn_proc(Handle2),
- ct:sleep(100),
+ ok = wait_procs_down([ConnPid2]),
Handle2 = proto:open(mconn2), % should've been reconnected already
{true,false} = {is_process_alive(Handle2),is_process_alive(ConnPid2)},
ConnPid2x = ct_gen_conn:get_conn_pid(Handle2),
true = is_process_alive(ConnPid2x),
+ monitor_procs([ConnPid2x]),
+
ok = proto:close(mconn2),
- ct:sleep(100),
+ ok = wait_procs_down([Handle2,ConnPid2x]),
{false,false} = {is_process_alive(Handle2),is_process_alive(ConnPid2x)},
Handle2y = proto:open(mconn2),
ConnPid2y = ct_gen_conn:get_conn_pid(Handle2y),
{true,true} = {is_process_alive(Handle2y),is_process_alive(ConnPid2y)},
+
+ monitor_procs([Handle2y,ConnPid2y]),
+
ok = proto:close(mconn2),
- ct:sleep(100),
+ ok = wait_procs_down([Handle2y,ConnPid2y]),
{false,false} = {is_process_alive(Handle2y),is_process_alive(ConnPid2y)},
application:set_env(ct_test, reconnect, false),
ok = proto:kill_conn_proc(Handle3),
- ct:sleep(100),
+ ok = wait_procs_down([Handle3,ConnPid3]),
{false,false} = {is_process_alive(Handle3),is_process_alive(ConnPid3)},
ok.
@@ -211,16 +226,20 @@ names_to_single_conn_pids(_Config) ->
{sconn3,Handle3,_,_}] = lists:sort(ct_util:get_connections(ConnPid)),
ct:pal("CONNS on ~p = ~n~p", [ConnPid,Conns]),
+ monitor_procs([Handle1,Handle2,Handle3,ConnPid]),
+
ok = proto:close(sconn1),
- ct:sleep(100),
+ ok = wait_procs_down([Handle1]),
{false,true} = {is_process_alive(Handle1),is_process_alive(ConnPid)},
ok = proto:kill_conn_proc(Handle2),
- ct:sleep(100),
+ ok = wait_procs_down([ConnPid]),
{true,false} = {is_process_alive(Handle2),is_process_alive(ConnPid)},
Handle2 = proto:open(sconn2), % should've been reconnected already
NewConnPid = ct_gen_conn:get_conn_pid(Handle2),
true = is_process_alive(NewConnPid),
+
+ monitor_procs([NewConnPid]),
Conns1 = [{sconn2,Handle2,_,_},
{sconn3,Handle3,_,_}] =
@@ -228,14 +247,29 @@ names_to_single_conn_pids(_Config) ->
ct:pal("CONNS on ~p = ~n~p", [NewConnPid,Conns1]),
ok = proto:close(sconn2),
- ct:sleep(100),
+ ok = wait_procs_down([Handle2]),
{false,true} = {is_process_alive(Handle2),is_process_alive(NewConnPid)},
application:set_env(ct_test, reconnect, false),
ok = proto:kill_conn_proc(Handle3),
- ct:sleep(100),
+ ok = wait_procs_down([Handle3,NewConnPid]),
{false,false} = {is_process_alive(Handle3),is_process_alive(NewConnPid)},
ok.
+%%%-----------------------------------------------------------------
+monitor_procs(Pids) ->
+ [erlang:monitor(process,Pid) || Pid <- Pids],
+ ok.
+
+wait_procs_down([]) ->
+ ok;
+wait_procs_down(Pids) ->
+ receive
+ {'DOWN',_,process,Pid,_} ->
+ wait_procs_down(lists:delete(Pid,Pids))
+ after 2000 ->
+ timeout
+ end.
+
diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/cth_log_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/cth_log_SUITE.erl
index 7b9b5687e5..bd1ac54781 100644
--- a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/cth_log_SUITE.erl
+++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/cth_log_SUITE.erl
@@ -40,6 +40,7 @@ suite() ->
%% @end
%%--------------------------------------------------------------------
init_per_suite(Config) ->
+ application:start(sasl),
Gen = spawn(fun() -> gen() end),
[{gen,Gen}|Config].
@@ -52,6 +53,7 @@ end_per_suite(Config) ->
Gen = proplists:get_value(gen, Config),
exit(Gen, kill),
ct:sleep(100),
+ application:stop(sasl),
ok.
%%--------------------------------------------------------------------
@@ -90,7 +92,8 @@ end_per_testcase(_TestCase, _Config) ->
%% @end
%%--------------------------------------------------------------------
groups() ->
- [{g1,[parallel,{repeat,10}],[tc1,tc2,tc3]}].
+ [{g1,[parallel,{repeat,10}],[tc1,tc2,tc3]},
+ {g2,[{repeat,10}],[tc1,tc2,tc3]}].
%%--------------------------------------------------------------------
%% @spec all() -> GroupsAndTestCases | {skip,Reason}
@@ -101,7 +104,7 @@ groups() ->
%% @end
%%--------------------------------------------------------------------
all() ->
- [{group,g1}].
+ [{group,g1},{group,g2}].
tc1(_) ->
ct:sleep(100),
@@ -121,5 +124,6 @@ gen() ->
gen_loop(N) ->
ct:log("Logger iteration: ~p", [N]),
error_logger:error_report(N),
- ct:sleep(200),
+ error_logger:info_report(progress, N),
+ ct:sleep(150),
gen_loop(N+1).
diff --git a/lib/common_test/test/ct_log_SUITE.erl b/lib/common_test/test/ct_log_SUITE.erl
new file mode 100644
index 0000000000..9bdd44cbdf
--- /dev/null
+++ b/lib/common_test/test/ct_log_SUITE.erl
@@ -0,0 +1,328 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+%%%-------------------------------------------------------------------
+%%% File: ct_log_SUITE
+%%%
+%%% Description: Test that ct:log, ct:pal and io:format print to
+%%% the test case log file as expected, with or without special HTML
+%%% characters being escaped.
+%%%
+%%%-------------------------------------------------------------------
+-module(ct_log_SUITE).
+
+-compile(export_all).
+
+-include_lib("common_test/include/ct.hrl").
+-include_lib("common_test/include/ct_event.hrl").
+
+-define(eh, ct_test_support_eh).
+
+%%--------------------------------------------------------------------
+%% TEST SERVER CALLBACK FUNCTIONS
+%%--------------------------------------------------------------------
+init_per_suite(Config) ->
+ Config.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_testcase(_TestCase, Config) ->
+ Config.
+
+end_per_testcase(_TestCase, _Config) ->
+ ok.
+
+suite() -> [{ct_hooks,[ts_install_cth]}].
+
+all() ->
+ [{group,print_and_verify}].
+
+groups() ->
+ [{print_and_verify,[sequence],[print,verify]}].
+
+init_per_group(_GroupName, Config) ->
+ Config.
+
+end_per_group(_GroupName, Config) ->
+ Config.
+
+%%--------------------------------------------------------------------
+%% TEST CASES
+%%--------------------------------------------------------------------
+
+%%%-----------------------------------------------------------------
+%%%
+print(Config) ->
+ TcLogFile = proplists:get_value(tc_logfile, Config),
+ Pid = self(),
+ String = atom_to_list(?MODULE),
+
+ %% START mark
+ io:format("LOGGING START~n"),
+
+ %% io:format
+ io:format("1. Printing nothing~n", []),
+ io:format("2. Printing a string: ~s~n", [String]),
+ io:format("3. Printing a string: ~p~n", [String]),
+ io:format("4. Printing a tuple: ~w~n", [{module,?MODULE}]),
+ io:format("5. Printing a pid: ~w~n", [Pid]),
+ io:format("6. Printing HTML: <pre>~s</pre>~n", [String]),
+
+ %% --- API ---
+ %% pal(Format) ->
+ %% = ct:pal(default, 50, Format, []).
+ %% pal(X1, X2) -> ok
+ %% X1 = Category | Importance | Format
+ %% X2 = Format | FormatArgs
+ %% pal(X1, X2, X3) -> ok
+ %% X1 = Category | Importance
+ %% X2 = Importance | Format
+ %% X3 = Format | FormatArgs
+ %% pal(Category, Importance, Format, FormatArgs) -> ok
+ %% ------
+ ct:pal("1. Printing nothing"),
+ ct:pal("2. Printing nothing", []),
+ ct:pal("3. Printing a string: ~s", [String]),
+ ct:pal("4. Printing a string: ~p", [String]),
+ ct:pal("5. Printing a tuple: ~w", [{module,?MODULE}]),
+ ct:pal("6. Printing a pid: ~w", [Pid]),
+ ct:pal("7. Printing HTML: <pre>~s</pre>", [String]),
+ ct:pal(ct_internal, "8. Printing with category"),
+ ct:pal(ct_internal, "9. Printing with ~s", ["category"]),
+ ct:pal(50, "10. Printing with importance"),
+ ct:pal(50, "11. Printing with ~s", ["importance"]),
+ ct:pal(ct_internal, 50, "12. Printing with ~s", ["category and importance"]),
+
+ %% --- API ---
+ %% log(Format) -> ok
+ %% = ct:log(default, 50, Format, [], []).
+ %% log(X1, X2) -> ok
+ %% X1 = Category | Importance | Format
+ %% X2 = Format | FormatArgs
+ %% log(X1, X2, X3) -> ok
+ %% X1 = Category | Importance
+ %% X2 = Importance | Format
+ %% X3 = Format | FormatArgs | Opts
+ %% log(X1, X2, X3, X4) -> ok
+ %% X1 = Category | Importance
+ %% X2 = Importance | Format
+ %% X3 = Format | FormatArgs
+ %% X4 = FormatArgs | Opts
+ %% log(Category, Importance, Format, FormatArgs, Opts) -> ok
+ %% ------
+ ct:log("1. Printing nothing"),
+ ct:log("2. Printing nothing", []),
+ ct:log("3. Printing a string: ~s", [String]),
+ ct:log("4. Printing a string: ~p", [String]),
+ ct:log("5. Printing a tuple: ~w", [{module,?MODULE}]),
+ ct:log("6. Printing a pid: ~w", [Pid]),
+ ct:log("7. Printing HTML: <pre>~s</pre>", [String]),
+ ct:log("8. Printing a pid escaped: ~w", [Pid], [esc_chars]),
+ ct:log("9. Printing a string escaped: ~p", [String], [esc_chars]),
+ ct:log("10. Printing HTML escaped: <pre>~s</pre>", [String], [esc_chars]),
+ ct:log("11. Printing a string, no css: ~s", [String], [no_css]),
+ ct:log("12. Printing a pid escaped, no css: ~w", [Pid],
+ [esc_chars, no_css]),
+ ct:log(ct_internal, "13. Printing with category"),
+ ct:log(ct_internal, "14. Printing with ~s", ["category"]),
+ ct:log(ct_internal, "15. Printing with ~s, no_css", ["category"],
+ [no_css]),
+ ct:log(50, "16. Printing with importance"),
+ ct:log(50, "17. Printing with ~s", ["importance"]),
+ ct:log(50, "18. Printing with ~s, no_css", ["importance"], [no_css]),
+ ct:log(ct_internal, 50, "19. Printing with category and importance"),
+ ct:log(ct_internal, 50, "20. Printing with ~s", ["category and importance"]),
+ ct:log(ct_internal, 50, "21. Printing a pid escaped with ~s, no_css: ~w",
+ ["category and importance",Pid], [esc_chars,no_css]),
+
+ %% END mark
+ ct:log("LOGGING END", [], [no_css]),
+ {save_config,[{the_logfile,TcLogFile},{the_pid,Pid},{the_string,String}]}.
+
+
+verify(Config) ->
+ {print,SavedCfg} = proplists:get_value(saved_config, Config),
+ TcLogFile = proplists:get_value(the_logfile, SavedCfg),
+ Pid = proplists:get_value(the_pid, SavedCfg),
+ StrPid = lists:flatten(io_lib:format("~p",[Pid])),
+ EscPid = "&lt;" ++ string:substr(StrPid, 2, length(StrPid)-2) ++ "&gt;",
+ String = proplists:get_value(the_string, SavedCfg),
+ ct:log("Read from prev testcase: ~p & ~p", [TcLogFile,Pid]),
+ {ok,Dev} = file:open(TcLogFile, [read]),
+ ok = read_until(Dev, "LOGGING START\n"),
+
+ %% io:format
+ match_line(Dev, "1. Printing nothing", []),
+ read_nl(Dev),
+ match_line(Dev, "2. Printing a string: ~s", [String]),
+ read_nl(Dev),
+ match_line(Dev, "3. Printing a string: ~p", [String]),
+ read_nl(Dev),
+ match_line(Dev, "4. Printing a tuple: ~w", [{module,?MODULE}]),
+ read_nl(Dev),
+ match_line(Dev, "5. Printing a pid: ~s", [EscPid]),
+ read_nl(Dev),
+ match_line(Dev, "6. Printing HTML: &lt;pre&gt;~s&lt;/pre&gt;", [String]),
+ read_nl(Dev),
+ %% ct:pal
+ read_header(Dev),
+ match_line(Dev, "1. Printing nothing", []),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "2. Printing nothing", []),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "3. Printing a string: ~s", [String]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "4. Printing a string: ~p", [String]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "5. Printing a tuple: ~w", [{module,?MODULE}]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "6. Printing a pid: ~s", [EscPid]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "7. Printing HTML: &lt;pre&gt;~s&lt;/pre&gt;", [String]),
+ read_footer(Dev),
+ read_header(Dev, "\"ct_internal\""),
+ match_line(Dev, "8. Printing with category", []),
+ read_footer(Dev),
+ read_header(Dev, "\"ct_internal\""),
+ match_line(Dev, "9. Printing with ~s", ["category"]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "10. Printing with importance", []),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "11. Printing with ~s", ["importance"]),
+ read_footer(Dev),
+ read_header(Dev, "\"ct_internal\""),
+ match_line(Dev, "12. Printing with ~s", ["category and importance"]),
+ read_footer(Dev),
+ %% ct:log
+ read_header(Dev),
+ match_line(Dev, "1. Printing nothing", []),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "2. Printing nothing", []),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "3. Printing a string: ~s", [String]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "4. Printing a string: ~p", [String]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "5. Printing a tuple: ~w", [{module,?MODULE}]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "6. Printing a pid: ~w", [Pid]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "7. Printing HTML: <pre>~s</pre>", [String]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "8. Printing a pid escaped: ~s", [EscPid]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "9. Printing a string escaped: ~p", [String]),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "10. Printing HTML escaped: &lt;pre&gt;~s&lt;/pre&gt;",
+ [String]),
+ read_footer(Dev),
+ match_line(Dev, "11. Printing a string, no css: ~s", [String]),
+ match_line(Dev, "12. Printing a pid escaped, no css: ~s", [EscPid]),
+ read_header(Dev, "\"ct_internal\""),
+ match_line(Dev, "13. Printing with category", []),
+ read_footer(Dev),
+ read_header(Dev, "\"ct_internal\""),
+ match_line(Dev, "14. Printing with ~s", ["category"]),
+ read_footer(Dev),
+ match_line(Dev, "15. Printing with ~s, no_css", ["category"]),
+ read_header(Dev),
+ match_line(Dev, "16. Printing with importance", []),
+ read_footer(Dev),
+ read_header(Dev),
+ match_line(Dev, "17. Printing with ~s", ["importance"]),
+ read_footer(Dev),
+ match_line(Dev, "18. Printing with ~s, no_css", ["importance"]),
+ read_header(Dev, "\"ct_internal\""),
+ match_line(Dev, "19. Printing with category and importance", []),
+ read_footer(Dev),
+ read_header(Dev, "\"ct_internal\""),
+ match_line(Dev, "20. Printing with ~s", ["category and importance"]),
+ read_footer(Dev),
+ match_line(Dev, "21. Printing a pid escaped with ~s, no_css: ~s",
+ ["category and importance",EscPid]),
+
+ file:close(Dev),
+ ok.
+
+%%%-----------------------------------------------------------------
+%%% HELP FUNCTIONS
+%%%-----------------------------------------------------------------
+
+read_until(Dev, Pat) ->
+ case file:read_line(Dev) of
+ {ok,Pat} ->
+ file:read_line(Dev), % \n
+ ok;
+ eof ->
+ file:close(Dev),
+ {error,{not_found,Pat}};
+ _ ->
+ read_until(Dev, Pat)
+ end.
+
+match_line(Dev, Format, Args) ->
+ Pat = lists:flatten(io_lib:format(Format, Args)),
+ Line = element(2, file:read_line(Dev)),
+ case re:run(Line, Pat) of
+ {match,_} ->
+ ok;
+ nomatch ->
+ ct:pal("ERROR! No match for ~p.\nLine = ~p", [Pat,Line]),
+ file:close(Dev),
+ ct:fail({mismatch,Pat,Line})
+ end.
+
+read_header(Dev) ->
+ read_header(Dev, "\"default\"").
+
+read_header(Dev, Cat) ->
+ file:read_line(Dev), % \n
+ "</pre>\n" = element(2, file:read_line(Dev)),
+ {match,_} =
+ re:run(element(2, file:read_line(Dev)), "<div class="++Cat++"><pre><b>"
+ "\\*\\*\\* User \\d{4}-\\d{2}-\\d{2} "
+ "\\d{2}:\\d{2}:\\d{2}.\\d{1,} \\*\\*\\*</b>").
+
+read_footer(Dev) ->
+ "</pre></div>\n" = element(2, file:read_line(Dev)),
+ "<pre>\n" = element(2, file:read_line(Dev)).
+
+read_nl(Dev) ->
+ file:read_line(Dev).
+
+
diff --git a/lib/common_test/test/ct_netconfc_SUITE.erl b/lib/common_test/test/ct_netconfc_SUITE.erl
index 03fbc17bd2..8932f930d1 100644
--- a/lib/common_test/test/ct_netconfc_SUITE.erl
+++ b/lib/common_test/test/ct_netconfc_SUITE.erl
@@ -44,16 +44,28 @@
%% there will be clashes with logging processes etc).
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- case application:load(crypto) of
- {error,Reason} when Reason=/={already_loaded,crypto} ->
- {skip, Reason};
- _ ->
- case application:load(ssh) of
- {error,Reason} when Reason=/={already_loaded,ssh} ->
- {skip, Reason};
- _ ->
- ct_test_support:init_per_suite(Config)
- end
+ case check_crypto_and_ssh() of
+ ok ->
+ ct_test_support:init_per_suite(Config);
+ Skip ->
+ Skip
+ end.
+
+check_crypto_and_ssh() ->
+ (catch code:load_file(crypto)),
+ case code:is_loaded(crypto) of
+ {file,_} ->
+ case catch ssh:start() of
+ Ok when Ok==ok; Ok=={error,{already_started,ssh}} ->
+ ct:log("ssh started",[]),
+ ok;
+ Other ->
+ ct:log("could not start ssh: ~p",[Other]),
+ {skip, "SSH could not be started!"}
+ end;
+ Other ->
+ ct:log("could not load crypto: ~p",[Other]),
+ {skip, "crypto could not be loaded!"}
end.
end_per_suite(Config) ->
diff --git a/lib/common_test/test/ct_netconfc_SUITE_data/netconfc1_SUITE.erl b/lib/common_test/test/ct_netconfc_SUITE_data/netconfc1_SUITE.erl
index 065639dd36..2aa6c4d354 100644
--- a/lib/common_test/test/ct_netconfc_SUITE_data/netconfc1_SUITE.erl
+++ b/lib/common_test/test/ct_netconfc_SUITE_data/netconfc1_SUITE.erl
@@ -123,41 +123,38 @@ init_per_testcase(_Case, Config) ->
end_per_testcase(_Case, _Config) ->
ok.
-init_per_suite() ->
- [{timetrap,2*?default_timeout}]. % making dsa files can be slow
init_per_suite(Config) ->
- case catch ssh:start() of
- Ok when Ok==ok; Ok=={error,{already_started,ssh}} ->
+ (catch code:load_file(crypto)),
+ case {ssh:start(),code:is_loaded(crypto)} of
+ {Ok,{file,_}} when Ok==ok; Ok=={error,{already_started,ssh}} ->
ct:log("ssh started",[]),
- {ok, _} = netconfc_test_lib:get_id_keys(Config),
- netconfc_test_lib:make_dsa_files(Config),
- ct:log("dsa files created",[]),
- Server = ?NS:start(?config(data_dir,Config)),
+ SshDir = filename:join(filename:dirname(code:which(?MODULE)),
+ "ssh_dir"),
+ Server = ?NS:start(SshDir),
ct:log("netconf server started",[]),
- [{server,Server}|Config];
+ [{netconf_server,Server},{ssh_dir,SshDir}|Config];
Other ->
- ct:log("could not start ssh: ~p",[Other]),
+ ct:log("could not start ssh or load crypto: ~p",[Other]),
{skip, "SSH could not be started!"}
end.
end_per_suite(Config) ->
- ?NS:stop(?config(server,Config)),
+ ?NS:stop(?config(netconf_server,Config)),
ssh:stop(),
crypto:stop(),
- netconfc_test_lib:remove_id_keys(Config),
Config.
hello(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client),
ok.
hello_from_server_first(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
?NS:hello(1),
- {ok,Client} = ct_netconfc:only_open(?DEFAULT_SSH_OPTS(DataDir)),
+ {ok,Client} = ct_netconfc:only_open(?DEFAULT_SSH_OPTS(SshDir)),
ct:sleep(500),
?NS:expect(hello),
?ok = ct_netconfc:hello(Client, [{capability, ["urn:com:ericsson:ebase:1.1.0"]}], infinity),
@@ -166,8 +163,8 @@ hello_from_server_first(Config) ->
ok.
hello_named(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(any_name,DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(any_name,SshDir),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client),
ok.
@@ -175,8 +172,8 @@ hello_named(Config) ->
hello_configured() ->
[{require, netconf1}].
hello_configured(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_configured_success(netconf1,DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_configured_success(netconf1,SshDir),
?NS:expect_do_reply('close-session',close,ok),
{error, {no_such_name,netconf1}} = ct_netconfc:close_session(netconf1),
?ok = ct_netconfc:close_session(Client),
@@ -185,10 +182,10 @@ hello_configured(Config) ->
hello_configured_extraopts() ->
[{require, netconf1}].
hello_configured_extraopts(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
%% Test that the cofiguration overwrites the ExtraOpts parameter
%% to ct_netconfc:open/2.
- {ok,Client} = open_configured_success(netconf1,DataDir,[{password,"faulty"}]),
+ {ok,Client} = open_configured_success(netconf1,SshDir,[{password,"faulty"}]),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client),
ok.
@@ -196,8 +193,8 @@ hello_configured_extraopts(Config) ->
hello_required() ->
[{require, my_named_connection, netconf1}].
hello_required(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,_Client} = open_configured_success(my_named_connection,DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,_Client} = open_configured_success(my_named_connection,SshDir),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(my_named_connection),
ok.
@@ -205,69 +202,69 @@ hello_required(Config) ->
hello_required_exists() ->
[{require, my_named_connection, netconf1}].
hello_required_exists(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,_Client1} = open_configured_success(my_named_connection,DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,_Client1} = open_configured_success(my_named_connection,SshDir),
%% Check that same name can not be used twice
{error,{connection_exists,_Client1}} =
- ct_netconfc:open(my_named_connection,[{user_dir,DataDir}]),
+ ct_netconfc:open(my_named_connection,[{user_dir,SshDir}]),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(my_named_connection),
ct:sleep(500),
%% Then check that it can be used again after the first is closed
- {ok,_Client2} = open_configured_success(my_named_connection,DataDir),
+ {ok,_Client2} = open_configured_success(my_named_connection,SshDir),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(my_named_connection),
ok.
hello_global_pwd(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir,[{user,"any-user"},
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir,[{user,"any-user"},
{password,"global-xxx"}]),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client),
ok.
hello_no_session_id(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
?NS:hello(no_session_id),
?NS:expect(no_session_id,hello),
- {error,{incorrect_hello,no_session_id_found}} = open(DataDir),
+ {error,{incorrect_hello,no_session_id_found}} = open(SshDir),
ok.
hello_incomp_base_vsn(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
?NS:hello(1,{base,"1.1"}),
?NS:expect(hello),
- {error,{incompatible_base_capability_vsn,"1.1"}} = open(DataDir),
+ {error,{incompatible_base_capability_vsn,"1.1"}} = open(SshDir),
ok.
hello_no_base_cap(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
?NS:hello(1,no_base),
?NS:expect(hello),
- {error,{incorrect_hello,no_base_capability_found}} = open(DataDir),
+ {error,{incorrect_hello,no_base_capability_found}} = open(SshDir),
ok.
hello_no_caps(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
?NS:hello(1,no_caps),
?NS:expect(hello),
- {error,{incorrect_hello,capabilities_not_found}} = open(DataDir),
+ {error,{incorrect_hello,capabilities_not_found}} = open(SshDir),
ok.
no_server_hello(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
?NS:expect(undefined,hello),
- {error,{hello_session_failed,timeout}} = open(DataDir,[{timeout,2000}]),
+ {error,{hello_session_failed,timeout}} = open(SshDir,[{timeout,2000}]),
ok.
no_client_hello(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
?NS:hello(1),
- {ok,Client} = ct_netconfc:only_open(?DEFAULT_SSH_OPTS(DataDir)),
+ {ok,Client} = ct_netconfc:only_open(?DEFAULT_SSH_OPTS(SshDir)),
%% Allow server hello to arrive
ct:sleep(500),
@@ -280,8 +277,8 @@ no_client_hello(Config) ->
ok.
get_session_id(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
1 = ct_netconfc:get_session_id(Client),
@@ -290,8 +287,8 @@ get_session_id(Config) ->
ok.
get_capabilities(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
Caps = ct_netconfc:get_capabilities(Client),
BaseCap = ?NETCONF_BASE_CAP ++ ?NETCONF_BASE_CAP_VSN,
@@ -302,49 +299,49 @@ get_capabilities(Config) ->
ok.
faulty_user(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
{error,{ssh,could_not_connect_to_server,
"Unable to connect using the available authentication methods"}} =
- open(DataDir,[{user,"yyy"}]),
+ open(SshDir,[{user,"yyy"}]),
ok.
faulty_passwd(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
{error,{ssh,could_not_connect_to_server,
"Unable to connect using the available authentication methods"}} =
- open(DataDir,[{password,"yyy"}]),
+ open(SshDir,[{password,"yyy"}]),
ok.
faulty_port(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
{error,{ssh,could_not_connect_to_server,econnrefused}} =
- open(DataDir,[{port,2062}]),
+ open(SshDir,[{port,2062}]),
ok.
no_host(Config) ->
- DataDir = ?config(data_dir,Config),
- Opts = lists:keydelete(ssh,1,?DEFAULT_SSH_OPTS(DataDir)),
+ SshDir = ?config(ssh_dir,Config),
+ Opts = lists:keydelete(ssh,1,?DEFAULT_SSH_OPTS(SshDir)),
{error,no_host_address} = ct_netconfc:open(Opts),
ok.
no_port(Config) ->
- DataDir = ?config(data_dir,Config),
- Opts = lists:keydelete(port,1,?DEFAULT_SSH_OPTS(DataDir)),
+ SshDir = ?config(ssh_dir,Config),
+ Opts = lists:keydelete(port,1,?DEFAULT_SSH_OPTS(SshDir)),
{error,no_port} = ct_netconfc:open(Opts),
ok.
invalid_opt(Config) ->
- DataDir = ?config(data_dir,Config),
- Opts1 = ?DEFAULT_SSH_OPTS(DataDir) ++ [{timeout,invalidvalue}],
+ SshDir = ?config(ssh_dir,Config),
+ Opts1 = ?DEFAULT_SSH_OPTS(SshDir) ++ [{timeout,invalidvalue}],
{error,{invalid_option,{timeout,invalidvalue}}} = ct_netconfc:open(Opts1),
- Opts2 = ?DEFAULT_SSH_OPTS(DataDir) ++ [{some_other_opt,true}],
+ Opts2 = ?DEFAULT_SSH_OPTS(SshDir) ++ [{some_other_opt,true}],
{error,{ssh,could_not_connect_to_server,{options,_}}} =
ct_netconfc:open(Opts2),
ok.
timeout_close_session(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect('close-session'),
true = erlang:is_process_alive(Client),
{error,timeout} = ct_netconfc:close_session(Client,1000),
@@ -352,8 +349,8 @@ timeout_close_session(Config) ->
ok.
get(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
Data = [{server,[{xmlns,"myns"}],[{name,[],["myserver"]}]}],
?NS:expect_reply('get',{data,Data}),
{ok,Data} = ct_netconfc:get(Client,{server,[{xmlns,"myns"}],[]}),
@@ -362,9 +359,9 @@ get(Config) ->
ok.
get_a_lot(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
- Descr = lists:append(lists:duplicate(1000,"Description of myserver! ")),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
+ Descr = lists:append(lists:duplicate(100,"Description of myserver! ")),
Server = {server,[{xmlns,"myns"}],[{name,[],["myserver"]},
{description,[],[Descr]}]},
Data = lists:duplicate(100,Server),
@@ -375,8 +372,8 @@ get_a_lot(Config) ->
ok.
timeout_get(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect('get'),
{error,timeout} = ct_netconfc:get(Client,{server,[{xmlns,"myns"}],[]},1000),
?NS:expect_do_reply('close-session',close,ok),
@@ -392,8 +389,8 @@ timeout_get(Config) ->
%% Note that we can only hope that the test case triggers the problem
%% every now and then, as it is very timing dependent...
flush_timeout_get(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
Data = [{server,[{xmlns,"myns"}],[{name,[],["myserver"]}]}],
?NS:expect_reply('get',{data,Data}),
timer:sleep(1000),
@@ -406,8 +403,8 @@ flush_timeout_get(Config) ->
ok.
get_xpath(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
Data = [{server,[{xmlns,"myns"}],[{name,[],["myserver"]}]}],
?NS:expect_reply({'get',xpath},{data,Data}),
{ok,Data} = ct_netconfc:get(Client,{xpath,"/server"}),
@@ -416,8 +413,8 @@ get_xpath(Config) ->
ok.
get_config(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
Data = [{server,[{xmlns,"myns"}],[{name,[],["myserver"]}]}],
?NS:expect_reply('get-config',{data,Data}),
{ok,Data} = ct_netconfc:get_config(Client,running,
@@ -427,8 +424,8 @@ get_config(Config) ->
ok.
get_config_xpath(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
Data = [{server,[{xmlns,"myns"}],[{name,[],["myserver"]}]}],
?NS:expect_reply({'get-config',xpath},{data,Data}),
{ok,Data} = ct_netconfc:get_config(Client,running,{xpath,"/server"}),
@@ -437,8 +434,8 @@ get_config_xpath(Config) ->
ok.
edit_config(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply('edit-config',ok),
?ok = ct_netconfc:edit_config(Client,running,
{server,[{xmlns,"myns"}],
@@ -448,8 +445,8 @@ edit_config(Config) ->
ok.
edit_config_opt_params(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply({'edit-config',{'default-operation',"none"}},ok),
?ok = ct_netconfc:edit_config(Client,running,
{server,[{xmlns,"myns"}],
@@ -460,8 +457,8 @@ edit_config_opt_params(Config) ->
ok.
copy_config(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply('copy-config',ok),
?ok = ct_netconfc:copy_config(Client,startup,running),
?NS:expect_do_reply('close-session',close,ok),
@@ -469,8 +466,8 @@ copy_config(Config) ->
ok.
delete_config(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply('delete-config',ok),
?ok = ct_netconfc:delete_config(Client,startup),
?NS:expect_do_reply('close-session',close,ok),
@@ -478,8 +475,8 @@ delete_config(Config) ->
ok.
lock(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply('lock',ok),
?ok = ct_netconfc:lock(Client,running),
?NS:expect_do_reply('close-session',close,ok),
@@ -487,8 +484,8 @@ lock(Config) ->
ok.
unlock(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply('unlock',ok),
?ok = ct_netconfc:unlock(Client,running),
?NS:expect_do_reply('close-session',close,ok),
@@ -496,12 +493,12 @@ unlock(Config) ->
ok.
kill_session(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:hello(2),
?NS:expect(2,hello),
- {ok,_OtherClient} = open(DataDir),
+ {ok,_OtherClient} = open(SshDir),
?NS:expect_do_reply('kill-session',{kill,2},ok),
?ok = ct_netconfc:kill_session(Client,2),
@@ -512,8 +509,8 @@ kill_session(Config) ->
ok.
get_no_such_client(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client),
@@ -529,8 +526,8 @@ get_no_such_client(Config) ->
ok.
action(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
Data = [{myactionreturn,[{xmlns,"myns"}],["value"]}],
%% test either to receive {data,Data} or {ok,Data},
%% both need to be handled
@@ -549,8 +546,8 @@ action(Config) ->
ok.
send_any_rpc(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
Data = [{server,[{xmlns,"myns"}],[{name,[],["myserver"]}]}],
GetConf = {'get-config',
[{source,["running"]},
@@ -571,8 +568,8 @@ send_any_rpc(Config) ->
ok.
send_any(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
%% Correct get-config rpc
Data = [{server,[{xmlns,"myns"}],[{name,[],["myserver"]}]}],
@@ -604,8 +601,8 @@ send_any(Config) ->
ok.
hide_password(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
Password = "my_very_secret_password",
Data = [{passwords,[{xmlns,"myns"}],
[{password,[{xmlns,"pwdns"}],[Password]},
@@ -633,8 +630,8 @@ hide_password(Config) ->
ok.
not_proper_xml(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
NS = list_to_binary(?NETCONF_NAMESPACE),
NotProper = <<"<rpc-reply message-id=\"1\" xmlns=\"",
NS/binary,"\"><data></rpc-reply>">>,
@@ -646,8 +643,8 @@ not_proper_xml(Config) ->
ok.
prefixed_namespace(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
NS = list_to_binary(?NETCONF_NAMESPACE),
%% Test that data element can be properly decoded and that
@@ -679,8 +676,8 @@ prefixed_namespace(Config) ->
%% i.e. when the complete rpc-reply is not contained in one single ssh
%% data message.
receive_chunked_data(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
%% Construct the data to return from netconf server
Data = [{servers,[{xmlns,"myns"}],
@@ -727,8 +724,8 @@ receive_chunked_data(Config) ->
%% Same as receive_chunked_data, but timeout waiting for last part.
timeout_receive_chunked_data(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
%% Construct the data to return from netconf server
Data = [{servers,[{xmlns,"myns"}],
@@ -773,8 +770,8 @@ timeout_receive_chunked_data(Config) ->
%% Same as receive_chunked_data, but close while waiting for last part.
close_while_waiting_for_chunked_data(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
%% Construct the data to return from netconf server
Data = [{servers,[{xmlns,"myns"}],
@@ -816,8 +813,8 @@ close_while_waiting_for_chunked_data(Config) ->
ok.
connection_crash(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
%% Test that if the test survives killing the connection
%% process. Earlier this caused ct_util_server to terminate, and
@@ -828,8 +825,8 @@ connection_crash(Config) ->
ok.
get_event_streams(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
StreamNames = ["NETCONF","stream1","stream2"],
Streams = [{N,[{description,"descr of " ++ N}]} || N <- StreamNames],
StreamsXml = [{stream,[{name,[N]}|[{Tag,[Value]} || {Tag,Value} <- Data]]}
@@ -849,31 +846,31 @@ get_event_streams(Config) ->
ok.
create_subscription(Config) ->
- DataDir = ?config(data_dir,Config),
+ SshDir = ?config(ssh_dir,Config),
%% All defaults
- {ok,Client1} = open_success(DataDir),
+ {ok,Client1} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream]},ok),
?ok = ct_netconfc:create_subscription(Client1),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client1),
%% All defaults with timeout
- {ok,Client1a} = open_success(DataDir),
+ {ok,Client1a} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream]},ok),
?ok = ct_netconfc:create_subscription(Client1a,5000),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client1a),
%% All defaults timing out
- {ok,Client1b} = open_success(DataDir),
+ {ok,Client1b} = open_success(SshDir),
?NS:expect({'create-subscription',[stream]}),
{error,timeout} = ct_netconfc:create_subscription(Client1b,100),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client1b),
%% Stream
- {ok,Client2} = open_success(DataDir),
+ {ok,Client2} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream]},ok),
Stream = "some_stream",
?ok = ct_netconfc:create_subscription(Client2,Stream),
@@ -881,7 +878,7 @@ create_subscription(Config) ->
?ok = ct_netconfc:close_session(Client2),
%% Filter
- {ok,Client3} = open_success(DataDir),
+ {ok,Client3} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream,filter]},ok),
Filter = {notification,?NETMOD_NOTIF_NAMESPACE_ATTR,
[eventTime]},
@@ -890,28 +887,28 @@ create_subscription(Config) ->
?ok = ct_netconfc:close_session(Client3),
%% Filter with timeout
- {ok,Client3a} = open_success(DataDir),
+ {ok,Client3a} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream,filter]},ok),
?ok = ct_netconfc:create_subscription(Client3a,Filter,5000),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client3a),
%% Filter timing out
- {ok,Client3b} = open_success(DataDir),
+ {ok,Client3b} = open_success(SshDir),
?NS:expect({'create-subscription',[stream,filter]}),
{error,timeout}=ct_netconfc:create_subscription(Client3b,Filter,100),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client3b),
%% Stream and filter
- {ok,Client4} = open_success(DataDir),
+ {ok,Client4} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream,filter]},ok),
?ok = ct_netconfc:create_subscription(Client4,Stream,Filter),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client4),
%% Start/stop time
- {ok,Client5} = open_success(DataDir),
+ {ok,Client5} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream,startTime,stopTime]},ok),
StartTime = xs_datetime({D,{H,M,S}}= calendar:local_time()),
StopTime = xs_datetime({D,{H+2,M,S}}),
@@ -920,14 +917,14 @@ create_subscription(Config) ->
?ok = ct_netconfc:close_session(Client5),
%% Start/stop time with timeout
- {ok,Client5a} = open_success(DataDir),
+ {ok,Client5a} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream,startTime,stopTime]},ok),
?ok = ct_netconfc:create_subscription(Client5a,StartTime,StopTime,5000),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client5a),
%% Start/stop time timing out
- {ok,Client5b} = open_success(DataDir),
+ {ok,Client5b} = open_success(SshDir),
?NS:expect({'create-subscription',[stream,startTime,stopTime]}),
{error,timeout} =
ct_netconfc:create_subscription(Client5b,StartTime,StopTime,100),
@@ -935,14 +932,14 @@ create_subscription(Config) ->
?ok = ct_netconfc:close_session(Client5b),
%% Stream and start/stop time
- {ok,Client6} = open_success(DataDir),
+ {ok,Client6} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream,startTime,stopTime]},ok),
?ok = ct_netconfc:create_subscription(Client6,Stream,StartTime,StopTime),
?NS:expect_do_reply('close-session',close,ok),
?ok = ct_netconfc:close_session(Client6),
%% Filter and start/stop time
- {ok,Client7} = open_success(DataDir),
+ {ok,Client7} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream,filter,startTime,stopTime]},
ok),
?ok = ct_netconfc:create_subscription(Client7,Filter,
@@ -951,7 +948,7 @@ create_subscription(Config) ->
?ok = ct_netconfc:close_session(Client7),
%% Stream, filter and start/stop time
- {ok,Client8} = open_success(DataDir),
+ {ok,Client8} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream,filter,startTime,stopTime]},
ok),
?ok = ct_netconfc:create_subscription(Client8,Stream,Filter,
@@ -960,7 +957,7 @@ create_subscription(Config) ->
?ok = ct_netconfc:close_session(Client8),
%% Multiple filters
- {ok,Client9} = open_success(DataDir),
+ {ok,Client9} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream,filter]},ok),
MultiFilters = [{event,[{xmlns,"http://my.namespaces.com/event"}],
[{eventClass,["fault"]},
@@ -975,8 +972,8 @@ create_subscription(Config) ->
ok.
receive_one_event(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream]},ok),
?ok = ct_netconfc:create_subscription(Client),
@@ -1002,8 +999,8 @@ receive_one_event(Config) ->
ok.
receive_multiple_events(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream]},ok),
?ok = ct_netconfc:create_subscription(Client),
@@ -1043,8 +1040,8 @@ receive_multiple_events(Config) ->
ok.
receive_event_and_rpc(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream]},ok),
?ok = ct_netconfc:create_subscription(Client),
@@ -1103,8 +1100,8 @@ receive_event_and_rpc(Config) ->
receive_event_and_rpc_in_chunks(Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(DataDir),
+ SshDir = ?config(ssh_dir,Config),
+ {ok,Client} = open_success(SshDir),
?NS:expect_reply({'create-subscription',[stream]},ok),
?ok = ct_netconfc:create_subscription(Client),
diff --git a/lib/common_test/test/ct_netconfc_SUITE_data/netconfc_remote_SUITE.erl b/lib/common_test/test/ct_netconfc_SUITE_data/netconfc_remote_SUITE.erl
index 04bfe75187..f2580ad8e9 100644
--- a/lib/common_test/test/ct_netconfc_SUITE_data/netconfc_remote_SUITE.erl
+++ b/lib/common_test/test/ct_netconfc_SUITE_data/netconfc_remote_SUITE.erl
@@ -51,7 +51,7 @@ init_per_testcase(Case, Config) ->
stop_node(Case),
Config.
-end_per_testcase(Case, Config) ->
+end_per_testcase(Case, _Config) ->
stop_node(Case),
ok.
@@ -61,49 +61,47 @@ stop_node(Case) ->
rpc:call(Node,erlang,halt,[]).
-init_per_suite() ->
- [{timetrap,2*?default_timeout}]. % making dsa files can be slow
init_per_suite(Config) ->
- case ssh:start() of
- Ok when Ok==ok; Ok=={error,{already_started,ssh}} ->
+ (catch code:load_file(crypto)),
+ case {ssh:start(),code:is_loaded(crypto)} of
+ {Ok,{file,_}} when Ok==ok; Ok=={error,{already_started,ssh}} ->
ct:log("SSH started locally",[]),
- {ok, _} = netconfc_test_lib:get_id_keys(Config),
- netconfc_test_lib:make_dsa_files(Config),
- ct:log("dsa files created",[]),
- Config;
+ SshDir = filename:join(filename:dirname(code:which(?MODULE)),
+ "ssh_dir"),
+ [{ssh_dir,SshDir}|Config];
Other ->
- ct:log("could not start ssh locally: ~p",[Other]),
+ ct:log("could not start ssh or load crypto locally: ~p",[Other]),
{skip, "SSH could not be started locally!"}
end.
end_per_suite(Config) ->
ssh:stop(),
crypto:stop(),
- netconfc_test_lib:remove_id_keys(Config),
Config.
%% This test case is related to seq12645
%% Running the netconf server in a remote node, test that the client
%% process terminates if the remote node goes down.
remote_crash(Config) ->
- {ok,Node} = ct_slave:start(nc_remote_crash),
+ {ok,Node} = ct_slave:start(nc_remote_crash,[{boot_timeout,15},
+ {init_timeout,15},
+ {startup_timeout,15}]),
Pa = filename:dirname(code:which(?NS)),
true = rpc:call(Node,code,add_patha,[Pa]),
-
- case rpc:call(Node,ssh,start,[]) of
- Ok when Ok==ok; Ok=={error,{already_started,ssh}} ->
+ rpc:call(Node,code,load_file,[crypto]),
+ case {rpc:call(Node,ssh,start,[]),rpc:call(Node,code,is_loaded,[crypto])} of
+ {Ok,{file,_}} when Ok==ok; Ok=={error,{already_started,ssh}} ->
ct:log("SSH started remote",[]),
- Server = rpc:call(Node,?NS,start,[?config(data_dir,Config)]),
+ ns(Node,start,[?config(ssh_dir,Config)]),
ct:log("netconf server started remote",[]),
remote_crash(Node,Config);
Other ->
- ct:log("could not start ssh remote: ~p",[Other]),
+ ct:log("could not start ssh or load crypto remote: ~p",[Other]),
{skip, "SSH could not be started remote!"}
end.
remote_crash(Node,Config) ->
- DataDir = ?config(data_dir,Config),
- {ok,Client} = open_success(Node,DataDir),
+ {ok,Client} = open_success(Node,?config(ssh_dir,Config)),
ns(Node,expect_reply,[{'create-subscription',[stream]},ok]),
?ok = ct_netconfc:create_subscription(Client),
diff --git a/lib/common_test/test/ct_netconfc_SUITE_data/netconfc_test_lib.erl b/lib/common_test/test/ct_netconfc_SUITE_data/netconfc_test_lib.erl
deleted file mode 100644
index e058bc7600..0000000000
--- a/lib/common_test/test/ct_netconfc_SUITE_data/netconfc_test_lib.erl
+++ /dev/null
@@ -1,166 +0,0 @@
--module(netconfc_test_lib).
-
--export([get_id_keys/1, remove_id_keys/1, make_dsa_files/1]).
--include_lib("common_test/include/ct.hrl").
--include_lib("public_key/include/public_key.hrl").
-
-%%%-----------------------------------------------------------------
-%%% BEGIN SSH key management
-%% copy private keys to given dir from ~/.ssh
-get_id_keys(Config) ->
- DstDir = ?config(priv_dir, Config),
- SrcDir = filename:join(os:getenv("HOME"), ".ssh"),
- RsaOk = copyfile(SrcDir, DstDir, "id_rsa"),
- DsaOk = copyfile(SrcDir, DstDir, "id_dsa"),
- case {RsaOk, DsaOk} of
- {{ok, _}, {ok, _}} -> {ok, both};
- {{ok, _}, _} -> {ok, rsa};
- {_, {ok, _}} -> {ok, dsa};
- {Error, _} -> Error
- end.
-
-%% Remove later on. Use make_dsa_files instead.
-remove_id_keys(Config) ->
- Dir = ?config(priv_dir, Config),
- file:delete(filename:join(Dir, "id_rsa")),
- file:delete(filename:join(Dir, "id_dsa")).
-
-
-make_dsa_files(Config) ->
- make_dsa_files(Config, rfc4716_public_key).
-make_dsa_files(Config, Type) ->
- {DSA, EncodedKey} = gen_dsa(128, 20),
- PKey = DSA#'DSAPrivateKey'.y,
- P = DSA#'DSAPrivateKey'.p,
- Q = DSA#'DSAPrivateKey'.q,
- G = DSA#'DSAPrivateKey'.g,
- Dss = #'Dss-Parms'{p=P, q=Q, g=G},
- {ok, Hostname} = inet:gethostname(),
- {ok, {A, B, C, D}} = inet:getaddr(Hostname, inet),
- IP = lists:concat([A, ".", B, ".", C, ".", D]),
- Attributes = [], % Could be [{comment,"user@" ++ Hostname}],
- HostNames = [{hostnames,[IP, IP]}],
- PublicKey = [{{PKey, Dss}, Attributes}],
- KnownHosts = [{{PKey, Dss}, HostNames}],
-
- KnownHostsEnc = public_key:ssh_encode(KnownHosts, known_hosts),
- KnownHosts = public_key:ssh_decode(KnownHostsEnc, known_hosts),
-
- PublicKeyEnc = public_key:ssh_encode(PublicKey, Type),
-
- SystemTmpDir = ?config(data_dir, Config),
- filelib:ensure_dir(SystemTmpDir),
- file:make_dir(SystemTmpDir),
-
- DSAFile = filename:join(SystemTmpDir, "ssh_host_dsa_key.pub"),
- file:delete(DSAFile),
-
- DSAPrivateFile = filename:join(SystemTmpDir, "ssh_host_dsa_key"),
- file:delete(DSAPrivateFile),
-
- KHFile = filename:join(SystemTmpDir, "known_hosts"),
- file:delete(KHFile),
-
- PemBin = public_key:pem_encode([EncodedKey]),
-
- file:write_file(DSAFile, PublicKeyEnc),
- file:write_file(KHFile, KnownHostsEnc),
- file:write_file(DSAPrivateFile, PemBin),
- ok.
-
-
-%%--------------------------------------------------------------------
-%% @doc Creates a dsa key (OBS: for testing only)
-%% the sizes are in bytes
-%% @spec (::integer()) -> {::atom(), ::binary(), ::opaque()}
-%% @end
-%%--------------------------------------------------------------------
-gen_dsa(LSize,NSize) when is_integer(LSize), is_integer(NSize) ->
- Key = gen_dsa2(LSize, NSize),
- {Key, encode_key(Key)}.
-
-encode_key(Key = #'DSAPrivateKey'{}) ->
- Der = public_key:der_encode('DSAPrivateKey', Key),
- {'DSAPrivateKey', Der, not_encrypted}.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% DSA key generation (OBS: for testing only)
-%% See http://en.wikipedia.org/wiki/Digital_Signature_Algorithm
-%% and the fips_186-3.pdf
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-gen_dsa2(LSize, NSize) ->
- Q = prime(NSize), %% Choose N-bit prime Q
- X0 = prime(LSize),
- P0 = prime((LSize div 2) +1),
-
- %% Choose L-bit prime modulus P such that p-1 is a multiple of q.
- case dsa_search(X0 div (2*Q*P0), P0, Q, 1000) of
- error ->
- gen_dsa2(LSize, NSize);
- P ->
- G = crypto:mod_pow(2, (P-1) div Q, P), % Choose G a number whose multiplicative order modulo p is q.
- %% such that This may be done by setting g = h^(p-1)/q mod p, commonly h=2 is used.
-
- X = prime(20), %% Choose x by some random method, where 0 < x < q.
- Y = crypto:mod_pow(G, X, P), %% Calculate y = g^x mod p.
-
- #'DSAPrivateKey'{version=0, p = P, q = Q,
- g = crypto:bytes_to_integer(G), y = crypto:bytes_to_integer(Y), x = X}
- end.
-
-%% See fips_186-3.pdf
-dsa_search(T, P0, Q, Iter) when Iter > 0 ->
- P = 2*T*Q*P0 + 1,
- case is_prime(P, 50) of
- true -> P;
- false -> dsa_search(T+1, P0, Q, Iter-1)
- end;
-dsa_search(_,_,_,_) ->
- error.
-
-
-%%%%%%% Crypto Math %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-prime(ByteSize) ->
- Rand = odd_rand(ByteSize),
- prime_odd(Rand, 0).
-
-prime_odd(Rand, N) ->
- case is_prime(Rand, 50) of
- true ->
- Rand;
- false ->
- prime_odd(Rand+2, N+1)
- end.
-
-%% see http://en.wikipedia.org/wiki/Fermat_primality_test
-is_prime(_, 0) -> true;
-is_prime(Candidate, Test) ->
- CoPrime = odd_rand(10000, Candidate),
- Result = crypto:mod_pow(CoPrime, Candidate, Candidate) ,
- is_prime(CoPrime, crypto:bytes_to_integer(Result), Candidate, Test).
-
-is_prime(CoPrime, CoPrime, Candidate, Test) ->
- is_prime(Candidate, Test-1);
-is_prime(_,_,_,_) ->
- false.
-
-odd_rand(Size) ->
- Min = 1 bsl (Size*8-1),
- Max = (1 bsl (Size*8))-1,
- odd_rand(Min, Max).
-
-odd_rand(Min,Max) ->
- Rand = crypto:rand_uniform(Min,Max),
- case Rand rem 2 of
- 0 ->
- Rand + 1;
- _ ->
- Rand
- end.
-
-copyfile(SrcDir, DstDir, Fn) ->
- file:copy(filename:join(SrcDir, Fn),
- filename:join(DstDir, Fn)).
-
-%%% END SSH key management
-%%%-----------------------------------------------------------------
diff --git a/lib/common_test/test/ct_netconfc_SUITE_data/ns.erl b/lib/common_test/test/ct_netconfc_SUITE_data/ns.erl
index 9fb1fb6547..2412ea6aba 100644
--- a/lib/common_test/test/ct_netconfc_SUITE_data/ns.erl
+++ b/lib/common_test/test/ct_netconfc_SUITE_data/ns.erl
@@ -279,7 +279,7 @@ send({CM,Ch},Data) ->
%%% Split into many small parts and send to client
send_frag({CM,Ch},Data) ->
- Sz = rand:uniform(2000),
+ Sz = rand:uniform(1000),
case Data of
<<Chunk:Sz/binary,Rest/binary>> ->
ssh_connection:send(CM, Ch, Chunk),
@@ -302,10 +302,14 @@ table_trans(Fun,Args) ->
S ->
apply(Fun,Args);
Pid ->
+ Ref = erlang:monitor(process,Pid),
Pid ! {table_trans,Fun,Args,self()},
receive
{table_trans_done,Result} ->
- Result
+ erlang:demonitor(Ref,[flush]),
+ Result;
+ {'DOWN',Ref,process,Pid,Reason} ->
+ exit({main_ns_proc_died,Reason})
after 20000 ->
exit(table_trans_timeout)
end
diff --git a/lib/common_test/test/ct_netconfc_SUITE_data/ssh_dir/ssh_host_dsa_key b/lib/common_test/test/ct_netconfc_SUITE_data/ssh_dir/ssh_host_dsa_key
new file mode 100644
index 0000000000..4ee0b8657e
--- /dev/null
+++ b/lib/common_test/test/ct_netconfc_SUITE_data/ssh_dir/ssh_host_dsa_key
@@ -0,0 +1,13 @@
+-----BEGIN DSA PRIVATE KEY-----
+MIIBvQIBAAKBgQDuGhXsDoUC/x98Q1KEgdf+pQjzBXFu0gMf6C2P47FILALVjvzt
+HvpXarT8Y0XZb4/i5XndcKazmRArEVmPzRT0Pp7gSJpOclY/f1YrplvtMjeQaZ/Y
+eD5JoQFpgIUduiifdRRt0r5gXYejCfACa+ZSFiXTvI+ZXpHC7rH+qRCRdwIVAL6Z
+VUd15Rm/C4NrLD/nIL8tnnE3AoGBAOo9qlMBtN1MdmvJZ+Pa/x8O5+VxQvAVNysb
+DDIZQtT58ko5r3sRA783zHtUft80FA8pUAhkrnRKnqn+bK42Xrm/IMXJd8Wi9LBy
+pN5Pg37B/k6pXs2qzLDYnCCBEW9EBBUn6fyZMK7DDs/BTU7Rf0dCh1/YsxRrm0yJ
+reFOd+1gAoGBAJTq0lPrrUB62NXllTbVNAusIQX870BHBHuo3K3OFYGYD85z1gwy
+e495snKyYOT9QfkBiuH/VGxP2BgIQH+cr5hTWsFZ/09mdhEC5sj/bVDrhwexklVx
+ZeHxpIVmpB97jXomdXVR2ZoP92Gco+qU8tXcBdopQQcybk5j4fUxa+KQAhUAmGWZ
+bHhbiRb/ip5oN6edhUe47TU=
+-----END DSA PRIVATE KEY-----
+
diff --git a/lib/common_test/test/ct_netconfc_SUITE_data/ssh_dir/ssh_host_dsa_key.pub b/lib/common_test/test/ct_netconfc_SUITE_data/ssh_dir/ssh_host_dsa_key.pub
new file mode 100644
index 0000000000..bca37299b0
--- /dev/null
+++ b/lib/common_test/test/ct_netconfc_SUITE_data/ssh_dir/ssh_host_dsa_key.pub
@@ -0,0 +1,11 @@
+---- BEGIN SSH2 PUBLIC KEY ----
+AAAAB3NzaC1kc3MAAACBAO4aFewOhQL/H3xDUoSB1/6lCPMFcW7SAx/oLY/jsUgsAtWO
+/O0e+ldqtPxjRdlvj+Lled1wprOZECsRWY/NFPQ+nuBImk5yVj9/ViumW+0yN5Bpn9h4
+PkmhAWmAhR26KJ91FG3SvmBdh6MJ8AJr5lIWJdO8j5lekcLusf6pEJF3AAAAFQC+mVVH
+deUZvwuDayw/5yC/LZ5xNwAAAIEA6j2qUwG03Ux2a8ln49r/Hw7n5XFC8BU3KxsMMhlC
+1PnySjmvexEDvzfMe1R+3zQUDylQCGSudEqeqf5srjZeub8gxcl3xaL0sHKk3k+DfsH+
+TqlezarMsNicIIERb0QEFSfp/JkwrsMOz8FNTtF/R0KHX9izFGubTImt4U537WAAAACB
+AJTq0lPrrUB62NXllTbVNAusIQX870BHBHuo3K3OFYGYD85z1gwye495snKyYOT9QfkB
+iuH/VGxP2BgIQH+cr5hTWsFZ/09mdhEC5sj/bVDrhwexklVxZeHxpIVmpB97jXomdXVR
+2ZoP92Gco+qU8tXcBdopQQcybk5j4fUxa+KQ
+---- END SSH2 PUBLIC KEY ----
diff --git a/lib/common_test/test/ct_repeat_testrun_SUITE.erl b/lib/common_test/test/ct_repeat_testrun_SUITE.erl
index 632597c214..f8b6a379f6 100644
--- a/lib/common_test/test/ct_repeat_testrun_SUITE.erl
+++ b/lib/common_test/test/ct_repeat_testrun_SUITE.erl
@@ -66,25 +66,47 @@
%% there will be clashes with logging processes etc).
%%--------------------------------------------------------------------
init_per_suite(Config0) ->
- Config = ct_test_support:init_per_suite(Config0),
- DataDir = ?config(data_dir, Config),
- Suite1 = filename:join([DataDir,"a_test","r1_SUITE"]),
- Suite2 = filename:join([DataDir,"b_test","r2_SUITE"]),
- Opts0 = ct_test_support:get_opts(Config),
- Opts1 = Opts0 ++ [{suite,Suite1},{testcase,tc2},{label,timing1}],
- Opts2 = Opts0 ++ [{suite,Suite2},{testcase,tc2},{label,timing2}],
-
- %% Make sure both suites are compiled
- {1,0,{0,0}} = ct_test_support:run(ct,run_test,[Opts1],Config),
- {1,0,{0,0}} = ct_test_support:run(ct,run_test,[Opts2],Config),
-
- %% Time the shortest testcase to use for offset
- {_T0,{1,0,{0,0}}} = timer:tc(ct_test_support,run,[ct,run_test,[Opts1],Config]),
-
- %% -2 is to ensure we hit inside the target test case and not after
-% T = round(T0/1000000)-2,
- T=0,
- [{offset,T}|Config].
+ TTInfo = {_T,{_Scaled,ScaleVal}} = ct:get_timetrap_info(),
+ ct:pal("Timetrap info = ~w", [TTInfo]),
+ if ScaleVal > 1 ->
+ {skip,"Skip on systems running e.g. cover or debug!"};
+ ScaleVal =< 1 ->
+ Config = ct_test_support:init_per_suite(Config0),
+ DataDir = ?config(data_dir, Config),
+ Suite1 = filename:join([DataDir,"a_test","r1_SUITE"]),
+ Suite2 = filename:join([DataDir,"b_test","r2_SUITE"]),
+ Opts0 = ct_test_support:get_opts(Config),
+ Opts1 = Opts0 ++ [{suite,Suite1},{testcase,tc2},{label,timing1}],
+ Opts2 = Opts0 ++ [{suite,Suite2},{testcase,tc2},{label,timing2}],
+
+ %% Make sure both suites are compiled
+ {1,0,{0,0}} = ct_test_support:run(ct,run_test,[Opts1],Config),
+ {1,0,{0,0}} = ct_test_support:run(ct,run_test,[Opts2],Config),
+
+ %% Check if file i/o is too slow for correct measurements
+ Opts3 = Opts0 ++ [{suite,Suite1},{testcase,tc1},{label,timing3}],
+ {T,_} =
+ timer:tc(
+ fun() ->
+ {1,0,{0,0}} = ct_test_support:run(ct,run_test,
+ [Opts3],Config),
+ {1,0,{0,0}} = ct_test_support:run(ct,run_test,
+ [Opts3],Config)
+ end),
+ %% The time to compare with here must match the timeout value
+ %% in the test suite. Accept 30% logging overhead (26 sec total).
+ if T > 26000000 ->
+ ct:pal("Timing test took ~w sec (< 27 sec expected). "
+ "Skipping the suite!",
+ [trunc(T/1000000)]),
+ ct_test_support:end_per_suite(Config),
+ {skip,"File I/O too slow for this suite"};
+ true ->
+ ct:pal("Timing test took ~w sec. Proceeding...",
+ [trunc(T/1000000)]),
+ [{offset,0}|Config]
+ end
+ end.
end_per_suite(Config) ->
ct_test_support:end_per_suite(Config).
diff --git a/lib/common_test/test/ct_telnet_SUITE_data/ct_telnet_own_server_SUITE.erl b/lib/common_test/test/ct_telnet_SUITE_data/ct_telnet_own_server_SUITE.erl
index 9dc9095f47..985fa40ad2 100644
--- a/lib/common_test/test/ct_telnet_SUITE_data/ct_telnet_own_server_SUITE.erl
+++ b/lib/common_test/test/ct_telnet_SUITE_data/ct_telnet_own_server_SUITE.erl
@@ -308,8 +308,19 @@ large_string(_) ->
VerifyStr = [C || C <- lists:flatten(Data1), C/=$ , C/=$\r, C/=$\n, C/=$>],
ok = ct_telnet:send(Handle, "echo_sep "++BigString),
- ct:sleep(50),
- {ok,Data2} = ct_telnet:get_data(Handle),
+ %% On some slow machines, 50 ms might not be enough to get the
+ %% first packet of data. We will therefore keep trying for a
+ %% second before we give up this...
+ F = fun RepeatUntilData(N) ->
+ ct:sleep(50),
+ case ct_telnet:get_data(Handle) of
+ {ok,[]} when N>1 ->
+ RepeatUntilData(N-1);
+ Other ->
+ Other
+ end
+ end,
+ {ok,Data2} = F(20),
ct:log("[GET DATA #2] Received ~w chars: ~s", [length(lists:flatten(Data2)),Data2]),
VerifyStr = [C || C <- lists:flatten(Data2), C/=$ , C/=$\r, C/=$\n, C/=$>],
diff --git a/lib/common_test/test/ct_test_support.erl b/lib/common_test/test/ct_test_support.erl
index 477fcb8a26..e926abd885 100644
--- a/lib/common_test/test/ct_test_support.erl
+++ b/lib/common_test/test/ct_test_support.erl
@@ -484,7 +484,8 @@ get_events(_, Config) ->
{event_receiver,CTNode} ! {self(),get_events},
Events = receive {event_receiver,Evs} -> Evs end,
test_server:format(Level, "Stopping event receiver!~n", []),
- {event_receiver,CTNode} ! stop,
+ {event_receiver,CTNode} ! {self(),stop},
+ receive {event_receiver,stopped} -> ok end,
Events.
er() ->
@@ -499,8 +500,9 @@ er_loop(Evs) ->
{From,get_events} ->
From ! {event_receiver,lists:reverse(Evs)},
er_loop(Evs);
- stop ->
+ {From,stop} ->
unregister(event_receiver),
+ From ! {event_receiver,stopped},
ok
end.
diff --git a/lib/common_test/test/telnet_server.erl b/lib/common_test/test/telnet_server.erl
index 107d98d72c..65300b0bdf 100644
--- a/lib/common_test/test/telnet_server.erl
+++ b/lib/common_test/test/telnet_server.erl
@@ -59,7 +59,7 @@ init(Opts) ->
accept(State),
ok = gen_tcp:close(LSock),
dbg("telnet_server closed the listen socket ~p\n", [LSock]),
- ct:sleep(1000),
+ timer:sleep(1000),
ok.
listen(0, _Port, _Opts) ->
@@ -68,7 +68,7 @@ listen(Retries, Port, Opts) ->
case gen_tcp:listen(Port, Opts) of
{error,eaddrinuse} ->
dbg("Listen port not released, trying again..."),
- ct:sleep(5000),
+ timer:sleep(5000),
listen(Retries-1, Port, Opts);
Ok = {ok,_LSock} ->
Ok;
@@ -117,38 +117,64 @@ init_client(#state{client=Sock}=State) ->
dbg("Server sending: ~p~n",["login: "]),
R = case gen_tcp:send(Sock,"login: ") of
ok ->
- loop(State, 1);
+ loop(State);
Error ->
Error
end,
_ = gen_tcp:close(Sock),
R.
-loop(State, N) ->
+loop(State=#state{client=Sock}) ->
receive
- {tcp,_,Data} ->
+ {tcp,Sock,Data} ->
try handle_data(Data,State) of
{ok,State1} ->
- loop(State1, N);
+ loop(State1);
closed ->
+ _ = flush(State),
closed
catch
throw:Error ->
+ _ = flush(State),
Error
end;
- {tcp_closed, _} ->
+ {tcp_closed,Sock} ->
closed;
- {tcp_error,_,Error} ->
+ {tcp_error,Sock,Error} ->
{error,tcp,Error};
disconnect ->
- Sock = State#state.client,
dbg("Server closing connection on socket ~p~n", [Sock]),
+ timer:sleep(1000),
ok = gen_tcp:close(Sock),
- closed;
+ _ = flush(State);
stop ->
+ _ = flush(State),
stopped
end.
+flush(State=#state{client=Sock}) ->
+ receive
+ {tcp,Sock,Data} = M->
+ dbg("Message flushed after close or error: ~p~n", [M]),
+ try handle_data(Data,State) of
+ {ok,State1} ->
+ flush(State1);
+ closed ->
+ flush(State)
+ catch
+ throw:Error ->
+ Error
+ end;
+ {tcp_closed,Sock} = M ->
+ dbg("Message flushed after close or error: ~p~n", [M]),
+ ok;
+ {tcp_error,Sock,Error} = M ->
+ dbg("Message flushed after close or error: ~p~n", [M]),
+ {error,tcp,Error}
+ after 100 ->
+ ok
+ end.
+
handle_data(Cmd,#state{break=true}=State) ->
dbg("Server got data when in break mode: ~p~n",[Cmd]),
handle_break_cmd(Cmd,State);
@@ -193,6 +219,9 @@ handle_cmd([?AYT|T],State) ->
%% Used when testing 'newline' option in ct_telnet:send and ct_telnet:cmd.
send("yes\r\n> ",State),
handle_data(T,State);
+handle_cmd([?NOP|T],State) ->
+ %% Used for 'keep alive'
+ handle_data(T,State);
handle_cmd([_H|T],State) ->
%% Not responding to this command
handle_cmd(T,State);
@@ -203,6 +232,9 @@ handle_break_cmd([$q|T],State) ->
%% Dummy cmd allowed in break mode - quit break mode
send("\r\n> ",State),
handle_data(T,State#state{break=false});
+handle_break_cmd([_H|T],State) ->
+ %% Unknown command i break mode - ignore
+ handle_break_cmd(T,State);
handle_break_cmd([],State) ->
{ok,State}.
@@ -220,7 +252,7 @@ do_handle_data("echo_sep " ++ Data,State) ->
Msgs = string:tokens(Data," "),
lists:foreach(fun(Msg) ->
send(Msg,State),
- ct:sleep(10)
+ timer:sleep(10)
end, Msgs),
send("\r\n> ",State),
{ok,State};
@@ -245,7 +277,7 @@ do_handle_data("echo_loop " ++ Data,State) ->
do_handle_data("echo_delayed_prompt "++Data,State) ->
[MsStr|EchoData] = string:tokens(Data, " "),
send(string:join(EchoData,"\n"),State),
- ct:sleep(list_to_integer(MsStr)),
+ timer:sleep(list_to_integer(MsStr)),
send("\r\n> ",State),
{ok,State};
do_handle_data("disconnect_after " ++WaitStr,State) ->
@@ -298,7 +330,7 @@ send_loop(T0,T,Data,State) ->
ok;
true ->
send(Data,State),
- ct:sleep(500),
+ timer:sleep(500),
send_loop(T0,T,Data,State)
end.
diff --git a/lib/common_test/test_server/ts_install.erl b/lib/common_test/test_server/ts_install.erl
index b906eb21f5..5734bd0787 100644
--- a/lib/common_test/test_server/ts_install.erl
+++ b/lib/common_test/test_server/ts_install.erl
@@ -332,11 +332,12 @@ platform(Vars) ->
LC = lock_checking(),
MT = modified_timing(),
AsyncThreads = async_threads(),
+ OffHeapMsgQ = off_heap_msgq(),
Debug = debug(),
CpuBits = word_size(),
Common = lists:concat([Hostname,"/",OsType,"/",CpuType,CpuBits,LinuxDist,
Schedulers,BindType,KP,IOTHR,LC,MT,AsyncThreads,
- Debug,ExtraLabel]),
+ OffHeapMsgQ,Debug,ExtraLabel]),
PlatformId = lists:concat([ErlType, " ", Version, Common]),
PlatformLabel = ErlType ++ Common,
PlatformFilename = platform_as_filename(PlatformId),
@@ -400,6 +401,12 @@ async_threads() ->
_ -> ""
end.
+off_heap_msgq() ->
+ case catch erlang:system_info(message_queue_data) of
+ off_heap -> "/OffHeapMsgQ";
+ _ -> ""
+ end.
+
schedulers() ->
case catch erlang:system_info(smp_support) of
true ->
diff --git a/lib/common_test/test_server/ts_run.erl b/lib/common_test/test_server/ts_run.erl
index 66db1ff9a7..82ae44ec06 100644
--- a/lib/common_test/test_server/ts_run.erl
+++ b/lib/common_test/test_server/ts_run.erl
@@ -258,7 +258,7 @@ make_command(Vars, Spec, State) ->
run_batch(Vars, _Spec, State) ->
process_flag(trap_exit, true),
- Command = State#state.command ++ " -noinput -s erlang halt",
+ Command = State#state.command ++ " -noinput -eval \"erlang:halt(0,[{flush,false}]).\"",
ts_lib:progress(Vars, 1, "Command: ~ts~n", [Command]),
io:format(user, "Command: ~ts~n",[Command]),
Port = open_port({spawn, Command}, [stream, in, eof, exit_status]),
diff --git a/lib/compiler/doc/src/compile.xml b/lib/compiler/doc/src/compile.xml
index 954750fcdd..3ce37b98e9 100644
--- a/lib/compiler/doc/src/compile.xml
+++ b/lib/compiler/doc/src/compile.xml
@@ -40,6 +40,19 @@
<funcs>
<func>
+ <name>env_compiler_options()</name>
+ <fsummary>
+ Compiler options defined via the environment variable
+ <c>ERL_COMPILER_OPTIONS</c>
+ </fsummary>
+ <desc>
+ <p>Return compiler options given via the environment variable
+ <c>ERL_COMPILER_OPTIONS</c>. If the value is a list, it is
+ returned as is. If it is not a list, it is put into a list.
+ </p>
+ </desc>
+ </func>
+ <func>
<name>file(File)</name>
<fsummary>Compiles a file.</fsummary>
<desc>
@@ -123,7 +136,7 @@
(see
<seealso marker="erts:absform">The Abstract Format</seealso>
in ERTS User's Guide) in the compiled beam module. Tools
- such as <c>Debugger</c>, <c>Xref</c>, and <c>Cover</c> require
+ such as Debugger, Xref, and Cover require
the debug information to be included.</p>
<p><em>Warning</em>: Source code can be reconstructed from
@@ -531,7 +544,7 @@ module.beam: module.erl \
compiler to be deprecated. Notice that the compiler does not know
about attribute <c>-deprecated()</c>, but uses an
assembled list of deprecated functions in Erlang/OTP. To
- do a more general check, the <c>Xref</c> tool can be used.
+ do a more general check, the Xref tool can be used.
See also
<seealso marker="tools:xref#deprecated_function">xref(3)</seealso>
and the function
@@ -768,6 +781,9 @@ module.beam: module.erl \
if you do not want the environment variable to be consulted,
for example, if you are calling the compiler recursively from
inside a parse transform.</p>
+
+ <p>The list can be retrieved with
+ <seealso marker="#env_compiler_options/0">env_compiler_options/0</seealso>.</p>
</section>
<section>
@@ -830,7 +846,7 @@ pi() -> 3.1416.
<section>
<title>Inlining of List Functions</title>
<p>The compiler can also inline various list manipulation functions
- from the module <c>list</c> in <c>STDLIB</c>.</p>
+ from the module <c>list</c> in STDLIB.</p>
<p>This feature must be explicitly enabled with a compiler option or a
<c>-compile()</c> attribute in the source module.</p>
diff --git a/lib/compiler/doc/src/notes.xml b/lib/compiler/doc/src/notes.xml
index dede5aa0fd..dd6b132a92 100644
--- a/lib/compiler/doc/src/notes.xml
+++ b/lib/compiler/doc/src/notes.xml
@@ -32,18 +32,42 @@
<p>This document describes the changes made to the Compiler
application.</p>
+<section><title>Compiler 7.0.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ A literal binary matching regression was introduced in
+ 19.0 where a match could fail to resolve to the right
+ clause. This has now been fixed.</p>
+ <p>
+ Own Id: OTP-13738</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Compiler 7.0</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p><c>compile:forms/1,2</c> would crash when used in a
- working directory thad had been deleted by another
- process. (Thanks to Adam Lindberg for reporting this
- bug.)</p>
+ working directory that had been deleted by another
+ process.</p>
<p>
Own Id: OTP-13430 Aux Id: ERL-113 </p>
</item>
+ <item>
+ <p>Dialyzer no longer crashes when there is an invalid
+ function call such as <c>42(7)</c> in a module being
+ analyzed. The compiler will now warn for invalid function
+ calls such as <c>X = 42, x(7)</c>.</p>
+ <p>
+ Own Id: OTP-13552 Aux Id: ERL-138 </p>
+ </item>
</list>
</section>
@@ -107,6 +131,13 @@
<p>
Own Id: OTP-13504</p>
</item>
+ <item>
+ <p>The function <c>compile:env_compiler_options/0</c> has
+ been added to allow tools to pick up the same default
+ compiler options as the compiler itself.</p>
+ <p>
+ Own Id: OTP-13654</p>
+ </item>
</list>
</section>
@@ -249,7 +280,7 @@
<item>
<p>
The <c>cerl</c> and <c>cerl_trees</c> modules in the
- <c>compiler</c> application are now documented.</p>
+ Compiler application are now documented.</p>
<p>
Own Id: OTP-11978</p>
</item>
@@ -1951,7 +1982,7 @@
<c>RightExpr</c> or vice versa. The evaluation order is
only important if the expressions contains and/or depends
on operations with side-effects, such as message passing
- or <c>ets</c> operations.</p>
+ or ETS operations.</p>
<p>
Own Id: OTP-7206</p>
</item>
diff --git a/lib/compiler/doc/src/ref_man.xml b/lib/compiler/doc/src/ref_man.xml
index f5466553c0..c32c499008 100644
--- a/lib/compiler/doc/src/ref_man.xml
+++ b/lib/compiler/doc/src/ref_man.xml
@@ -30,7 +30,7 @@
<file>application.sgml</file>
</header>
<description>
- <p>The <c>Compiler</c> application compiles Erlang
+ <p>The Compiler application compiles Erlang
code to byte-code. The highly compact byte-code is executed by
the Erlang emulator.</p>
</description>
diff --git a/lib/compiler/src/beam_block.erl b/lib/compiler/src/beam_block.erl
index a8cfdffdf3..ec41925beb 100644
--- a/lib/compiler/src/beam_block.erl
+++ b/lib/compiler/src/beam_block.erl
@@ -159,14 +159,43 @@ find_fixpoint(OptFun, Is0) ->
end.
%% move_allocates(Is0) -> Is
-%% Move allocate instructions upwards in the instruction stream, in the
-%% hope of getting more possibilities for optimizing away moves later.
+%% Move allocate instructions upwards in the instruction stream
+%% (within the same block), in the hope of getting more possibilities
+%% for optimizing away moves later.
%%
-%% NOTE: Moving allocation instructions is only safe because it is done
-%% immediately after code generation so that we KNOW that if {x,X} is
-%% initialized, all x registers with lower numbers are also initialized.
-%% That assumption may not be true after other optimizations, such as
-%% the beam_utils:live_opt/1 optimization.
+%% For example, we can transform the following instructions:
+%%
+%% get_tuple_element x(1) Element => x(2)
+%% allocate_zero StackSize 3 %% x(0), x(1), x(2) are live
+%%
+%% to the following instructions:
+%%
+%% allocate_zero StackSize 2 %% x(0) and x(1) are live
+%% get_tuple_element x(1) Element => x(2)
+%%
+%% NOTE: Since the beam_reorder pass has been run, it is no longer
+%% safe to assume that if x(N) is initialized, then all lower-numbered
+%% x registers are also initialized.
+%%
+%% For example, in general it is not safe to transform the following
+%% instructions:
+%%
+%% get_tuple_element x(0) Element => x(1)
+%% allocate_zero StackSize 3 %x(0), x(1), x(2) are live
+%%
+%% to the following instructions:
+%%
+%% allocate_zero StackSize 3
+%% get_tuple_element x(0) Element => x(1)
+%%
+%% The transformation is safe if and only if x(1) has been
+%% initialized previously. Unfortunately, beam_reorder may have moved
+%% a get_tuple_element instruction so that x(1) is not always
+%% initialized when this code is reached. To find whether or not x(1)
+%% is initialized, we would need to analyze all code preceding these
+%% two instructions (across branches). Since we currently don't have
+%% any practical mechanism for doing that, we will have to
+%% conservatively assume that the transformation is unsafe.
move_allocates([{block,Bl0}|Is]) ->
Bl = move_allocates_1(reverse(Bl0), []),
@@ -175,27 +204,19 @@ move_allocates([I|Is]) ->
[I|move_allocates(Is)];
move_allocates([]) -> [].
-move_allocates_1([{set,[],[],{alloc,_,_}=Alloc}|Is0], Acc0) ->
- {Is,Acc} = move_allocates_2(Alloc, Is0, Acc0),
- move_allocates_1(Is, Acc);
+move_allocates_1([I|Is], [{set,[],[],{alloc,Live0,Info}}|Acc]=Acc0) ->
+ case {alloc_may_pass(I),alloc_live_regs(I, Live0)} of
+ {false,_} ->
+ move_allocates_1(Is, [I|Acc0]);
+ {true,not_possible} ->
+ move_allocates_1(Is, [I|Acc0]);
+ {true,Live} when is_integer(Live) ->
+ A = {set,[],[],{alloc,Live,Info}},
+ move_allocates_1(Is, [A,I|Acc])
+ end;
move_allocates_1([I|Is], Acc) ->
move_allocates_1(Is, [I|Acc]);
-move_allocates_1([], Is) -> Is.
-
-move_allocates_2({alloc,Live,Info}, [{set,[],[],{alloc,Live0,Info0}}|Is], Acc) ->
- Live = Live0, % Assertion.
- Alloc = {alloc,Live,combine_alloc(Info0, Info)},
- move_allocates_2(Alloc, Is, Acc);
-move_allocates_2({alloc,Live,Info}=Alloc0, [I|Is]=Is0, Acc) ->
- case alloc_may_pass(I) of
- false ->
- {Is0,[{set,[],[],Alloc0}|Acc]};
- true ->
- Alloc = {alloc,alloc_live_regs(I, Live),Info},
- move_allocates_2(Alloc, Is, [I|Acc])
- end;
-move_allocates_2(Alloc, [], Acc) ->
- {[],[{set,[],[],Alloc}|Acc]}.
+move_allocates_1([], Acc) -> Acc.
alloc_may_pass({set,_,_,{alloc,_,_}}) -> false;
alloc_may_pass({set,_,_,{set_tuple_element,_}}) -> false;
@@ -204,9 +225,6 @@ alloc_may_pass({set,_,_,put_list}) -> false;
alloc_may_pass({set,_,_,put}) -> false;
alloc_may_pass({set,_,_,_}) -> true.
-combine_alloc({_,Ns,Nh1,Init}, {_,nostack,Nh2,[]}) ->
- {zero,Ns,beam_utils:combine_heap_needs(Nh1, Nh2),Init}.
-
%% opt([Instruction]) -> [Instruction]
%% Optimize the instruction stream inside a basic block.
@@ -262,12 +280,17 @@ opt_move_1(R, [{set,[D],[R],move}|Is0], Acc) ->
{yes,Is} -> opt_move_rev(D, Acc, Is);
no -> not_possible
end;
-opt_move_1({x,_}, [{set,_,_,{alloc,_,_}}|_], _) ->
- %% The optimization is not possible. If the X register is not
- %% killed by allocation, the optimization would not be safe.
- %% If the X register is killed, it means that there cannot
- %% follow a 'move' instruction with this X register as the
- %% source.
+opt_move_1(_R, [{set,_,_,{alloc,_,_}}|_], _) ->
+ %% The optimization is either not possible or not safe.
+ %%
+ %% If R is an X register killed by allocation, the optimization is
+ %% not safe. On the other hand, if the X register is killed, there
+ %% will not follow a 'move' instruction with this X register as
+ %% the source.
+ %%
+ %% If R is a Y register, the optimization is still not safe
+ %% because the new target register is an X register that cannot
+ %% safely pass the alloc instruction.
not_possible;
opt_move_1(R, [{set,_,_,_}=I|Is], Acc) ->
%% If the source register is either killed or used by this
@@ -388,10 +411,19 @@ eliminate_use_of_from_reg([I]=Is, From, _To, Acc) ->
%% opt_alloc(Instructions) -> Instructions'
%% Optimises all allocate instructions.
+opt_alloc([{set,[],[],{alloc,Live0,Info0}},
+ {set,[],[],{alloc,Live,Info}}|Is]) ->
+ Live = Live0, %Assertion.
+ Alloc = combine_alloc(Info0, Info),
+ I = {set,[],[],{alloc,Live,Alloc}},
+ opt_alloc([I|Is]);
opt_alloc([{set,[],[],{alloc,R,{_,Ns,Nh,[]}}}|Is]) ->
[{set,[],[],opt_alloc(Is, Ns, Nh, R)}|Is];
opt_alloc([I|Is]) -> [I|opt_alloc(Is)];
opt_alloc([]) -> [].
+
+combine_alloc({_,Ns,Nh1,Init}, {_,nostack,Nh2,[]}) ->
+ {zero,Ns,beam_utils:combine_heap_needs(Nh1, Nh2),Init}.
%% opt_alloc(Instructions, FrameSize, HeapNeed, LivingRegs) -> [Instr]
%% Generates the optimal sequence of instructions for
@@ -440,13 +472,14 @@ count_ones(Bits, Acc) ->
alloc_live_regs({set,Ds,Ss,_}, Regs0) ->
Rset = x_live(Ss, x_dead(Ds, (1 bsl Regs0)-1)),
- live_regs(Rset).
+ live_regs(0, Rset).
-live_regs(Regs) ->
- live_regs_1(0, Regs).
-
-live_regs_1(N, 0) -> N;
-live_regs_1(N, Regs) -> live_regs_1(N+1, Regs bsr 1).
+live_regs(N, 0) ->
+ N;
+live_regs(N, Regs) when Regs band 1 =:= 1 ->
+ live_regs(N+1, Regs bsr 1);
+live_regs(_, _) ->
+ not_possible.
x_dead([{x,N}|Rs], Regs) -> x_dead(Rs, Regs band (bnot (1 bsl N)));
x_dead([_|Rs], Regs) -> x_dead(Rs, Regs);
diff --git a/lib/compiler/src/beam_bool.erl b/lib/compiler/src/beam_bool.erl
index f9a08f8718..99e4ccb1e9 100644
--- a/lib/compiler/src/beam_bool.erl
+++ b/lib/compiler/src/beam_bool.erl
@@ -238,9 +238,9 @@ extend_block(BlAcc0, Fail, [{block,Is0}|OldAcc]) ->
end;
extend_block(BlAcc, _, OldAcc) -> {BlAcc,OldAcc}.
-extend_block_1([{set,[_],_,{bif,_,{f,Fail}}}=I|Is], Fail, Acc) ->
+extend_block_1([{set,[{x,_}],_,{bif,_,{f,Fail}}}=I|Is], Fail, Acc) ->
extend_block_1(Is, Fail, [I|Acc]);
-extend_block_1([{set,[_],As,{bif,Bif,_}}=I|Is]=Is0, Fail, Acc) ->
+extend_block_1([{set,[{x,_}],As,{bif,Bif,_}}=I|Is]=Is0, Fail, Acc) ->
case safe_bool_op(Bif, length(As)) of
false -> {Acc,reverse(Is0)};
true -> extend_block_1(Is, Fail, [I|Acc])
@@ -311,6 +311,8 @@ dst_regs([{set,[D],_,{bif,_,{f,_}}}|Is], Acc) ->
dst_regs(Is, [D|Acc]);
dst_regs([{set,[D],_,{alloc,_,{gc_bif,_,{f,_}}}}|Is], Acc) ->
dst_regs(Is, [D|Acc]);
+dst_regs([{protected,_,Bl,_}|Is], Acc) ->
+ dst_regs(Bl, dst_regs(Is, Acc));
dst_regs([_|Is], Acc) ->
dst_regs(Is, Acc);
dst_regs([], Acc) -> ordsets:from_list(Acc).
diff --git a/lib/compiler/src/beam_dead.erl b/lib/compiler/src/beam_dead.erl
index dd42add433..6f6d742293 100644
--- a/lib/compiler/src/beam_dead.erl
+++ b/lib/compiler/src/beam_dead.erl
@@ -262,7 +262,7 @@ backward([{select,select_val,Reg,{f,Fail0},List0}|Is], D, Acc) ->
backward([{jump,{f,To0}},{move,Src,Reg}=Move|Is], D, Acc) ->
To = shortcut_select_label(To0, Reg, Src, D),
Jump = {jump,{f,To}},
- case beam_utils:is_killed_at(Reg, To, D) of
+ case is_killed_at(Reg, To, D) of
false -> backward([Move|Is], D, [Jump|Acc]);
true -> backward([Jump|Is], D, Acc)
end;
@@ -272,17 +272,14 @@ backward([{jump,{f,To}}=J|[{bif,Op,_,Ops,Reg}|Is]=Is0], D, Acc) ->
catch
throw:not_possible -> backward(Is0, D, [J|Acc])
end;
-backward([{test,bs_start_match2,F,Live,[R,_]=Args,Ctxt}|Is], D,
+backward([{test,bs_start_match2,F,_,[R,_],Ctxt}=I|Is], D,
[{test,bs_match_string,F,[Ctxt,Bs]},
{test,bs_test_tail2,F,[Ctxt,0]}|Acc0]=Acc) ->
- {f,To0} = F,
- To = shortcut_bs_start_match(To0, R, D),
case beam_utils:is_killed(Ctxt, Acc0, D) of
true ->
- Eq = {test,is_eq_exact,{f,To},[R,{literal,Bs}]},
+ Eq = {test,is_eq_exact,F,[R,{literal,Bs}]},
backward(Is, D, [Eq|Acc0]);
false ->
- I = {test,bs_start_match2,{f,To},Live,Args,Ctxt},
backward(Is, D, [I|Acc])
end;
backward([{test,bs_start_match2,{f,To0},Live,[Src|_]=Info,Dst}|Is], D, Acc) ->
@@ -420,7 +417,7 @@ comp_op_find_shortcut(To0, Reg, Val, D) ->
To0 ->
not_possible();
To ->
- case beam_utils:is_killed_at(Reg, To, D) of
+ case is_killed_at(Reg, To, D) of
false -> not_possible();
true -> To
end
@@ -863,3 +860,17 @@ get_literal(nil) ->
get_literal({literal,_}=Lit) ->
Lit;
get_literal({_,_}) -> error.
+
+
+%%%
+%%% Removing stores to Y registers is not always safe
+%%% if there is an instruction that causes an exception
+%%% within a catch. In practice, there are few or no
+%%% opportunities for removing stores to Y registers anyway
+%%% if sys_core_fold has been run.
+%%%
+
+is_killed_at({x,_}=Reg, Lbl, D) ->
+ beam_utils:is_killed_at(Reg, Lbl, D);
+is_killed_at({y,_}, _, _) ->
+ false.
diff --git a/lib/compiler/src/beam_disasm.erl b/lib/compiler/src/beam_disasm.erl
index 5badcce696..c699672db1 100644
--- a/lib/compiler/src/beam_disasm.erl
+++ b/lib/compiler/src/beam_disasm.erl
@@ -314,10 +314,7 @@ get_funs({LsR0,[{func_info,[{atom,M}=AtomM,{atom,F}=AtomF,ArityArg]}|Code0]})
when is_atom(M), is_atom(F) ->
Arity = resolve_arg_unsigned(ArityArg),
{LsR,Code,RestCode} = get_fun(Code0, []),
- Entry = case Code of
- [{label,[{u,E}]}|_] -> E;
- _ -> undefined
- end,
+ [{label,[{u,Entry}]}|_] = Code,
[#function{name=F,
arity=Arity,
entry=Entry,
diff --git a/lib/compiler/src/beam_disasm.hrl b/lib/compiler/src/beam_disasm.hrl
index e18214644f..d968cd9587 100644
--- a/lib/compiler/src/beam_disasm.hrl
+++ b/lib/compiler/src/beam_disasm.hrl
@@ -22,7 +22,9 @@
%% the system (e.g. in the translation from Beam to Icode).
%%
-%% XXX: THE FOLLOWING TYPE DECLARATION DOES NOT BELONG HERE...
+%% XXX: THE FOLLOWING TYPE DECLARATION DOES NOT BELONG HERE.
+%% IT SHOULD BE MOVED TO A FILE THAT DEFINES (AND EXPORTS)
+%% PROPER TYPES FOR THE SET OF BEAM INSTRUCTIONS.
%%
-type beam_instr() :: 'bs_init_writable' | 'fclearerror' | 'if_end'
| 'remove_message' | 'return' | 'send' | 'timeout'
@@ -34,7 +36,7 @@
-record(function, {name :: atom(),
arity :: byte(),
- entry, %% unused ??
+ entry :: beam_lib:label(), %% unnecessary ?
code = [] :: [beam_instr()]}).
-record(beam_file, {module :: module(),
diff --git a/lib/compiler/src/beam_except.erl b/lib/compiler/src/beam_except.erl
index cb3a6b79de..4a181c1923 100644
--- a/lib/compiler/src/beam_except.erl
+++ b/lib/compiler/src/beam_except.erl
@@ -133,10 +133,12 @@ translate_exception(_, _, _, _) -> no.
fix_block(Is, 0) ->
reverse(Is);
fix_block(Is, Words) ->
- fix_block_1(reverse(Is), Words).
+ reverse(fix_block_1(Is, Words)).
-fix_block_1([{set,[],[],{alloc,Live,{F1,F2,Needed,F3}}}|Is], Words) ->
- [{set,[],[],{alloc,Live,{F1,F2,Needed-Words,F3}}}|Is];
+fix_block_1([{set,[],[],{alloc,Live,{F1,F2,Needed0,F3}}}|Is], Words) ->
+ Needed = Needed0 - Words,
+ true = Needed >= 0, %Assertion.
+ [{set,[],[],{alloc,Live,{F1,F2,Needed,F3}}}|Is];
fix_block_1([I|Is], Words) ->
[I|fix_block_1(Is, Words)].
diff --git a/lib/compiler/src/beam_jump.erl b/lib/compiler/src/beam_jump.erl
index 359248c6af..48b5a32814 100644
--- a/lib/compiler/src/beam_jump.erl
+++ b/lib/compiler/src/beam_jump.erl
@@ -167,12 +167,18 @@ share_1([{label,L}=Lbl|Is], Dict0, Seq, Acc) ->
end;
share_1([{func_info,_,_,_}=I|Is], _, [], Acc) ->
reverse(Is, [I|Acc]);
+share_1([{'catch',_,_}=I|Is], Dict0, Seq, Acc) ->
+ Dict = clean_non_sharable(Dict0),
+ share_1(Is, Dict, [I|Seq], Acc);
share_1([{'try',_,_}=I|Is], Dict0, Seq, Acc) ->
Dict = clean_non_sharable(Dict0),
share_1(Is, Dict, [I|Seq], Acc);
share_1([{try_case,_}=I|Is], Dict0, Seq, Acc) ->
Dict = clean_non_sharable(Dict0),
share_1(Is, Dict, [I|Seq], Acc);
+share_1([{catch_end,_}=I|Is], Dict0, Seq, Acc) ->
+ Dict = clean_non_sharable(Dict0),
+ share_1(Is, Dict, [I|Seq], Acc);
share_1([I|Is], Dict, Seq, Acc) ->
case is_unreachable_after(I) of
false ->
@@ -182,18 +188,18 @@ share_1([I|Is], Dict, Seq, Acc) ->
end.
clean_non_sharable(Dict) ->
- %% We are passing in or out of a 'try' block. Remove
- %% sequences that should not shared over the boundaries
- %% of a 'try' block. Since the end of the sequence must match,
- %% the only possible match between a sequence outside and
- %% a sequence inside the 'try' block is a sequence that ends
- %% with an instruction that causes an exception. Any sequence
- %% that causes an exception must contain a line/1 instruction.
+ %% We are passing in or out of a 'catch' or 'try' block. Remove
+ %% sequences that should not be shared over the boundaries of the
+ %% block. Since the end of the sequence must match, the only
+ %% possible match between a sequence outside and a sequence inside
+ %% the 'catch'/'try' block is a sequence that ends with an
+ %% instruction that causes an exception. Any sequence that causes
+ %% an exception must contain a line/1 instruction.
maps:filter(fun(K, _V) -> sharable_with_try(K) end, Dict).
sharable_with_try([{line,_}|_]) ->
%% This sequence may cause an exception and may potentially
- %% match a sequence on the other side of the 'try' block
+ %% match a sequence on the other side of the 'catch'/'try' block
%% boundary.
false;
sharable_with_try([_|Is]) ->
@@ -266,17 +272,17 @@ extract_seq_1(_, _) -> no.
%%% (3) (4) (5) (6) Jump and unreachable code optimizations.
%%%
--record(st, {fc, %Label for function class errors.
- entry, %Entry label (must not be moved).
- mlbl, %Moved labels.
- labels :: cerl_sets:set() %Set of referenced labels.
- }).
+-record(st,
+ {
+ entry, %Entry label (must not be moved).
+ mlbl, %Moved labels.
+ labels :: cerl_sets:set() %Set of referenced labels.
+ }).
-opt([{label,Fc}|_]=Is0, CLabel) ->
- Lbls = initial_labels(Is0),
+opt(Is0, CLabel) ->
find_fixpoint(fun(Is) ->
- St = #st{fc=Fc,entry=CLabel,mlbl=#{},
- labels=Lbls},
+ Lbls = initial_labels(Is),
+ St = #st{entry=CLabel,mlbl=#{},labels=Lbls},
opt(Is, [], St)
end, Is0).
@@ -327,7 +333,8 @@ opt([{label,Lbl}=I|Is], Acc, #st{mlbl=Mlbl}=St0) ->
%% since we will rescan the inserted labels. We MUST rescan.
St = St0#st{mlbl=maps:remove(Lbl, Mlbl)},
insert_labels([Lbl|Lbls], Is, Acc, St);
- error -> opt(Is, [I|Acc], St0)
+ error ->
+ opt(Is, [I|Acc], St0)
end;
opt([{jump,{f,_}=X}|[{label,_},{jump,X}|_]=Is], Acc, St) ->
opt(Is, Acc, St);
@@ -362,12 +369,19 @@ opt([I|Is], Acc, #st{labels=Used0}=St0) ->
true -> skip_unreachable(Is, [I|Acc], St);
false -> opt(Is, [I|Acc], St)
end;
-opt([], Acc, #st{fc=Fc,mlbl=Mlbl}) ->
+opt([], Acc, #st{mlbl=Mlbl}) ->
Code = reverse(Acc),
- case maps:find(Fc, Mlbl) of
- {ok,Lbls} -> insert_fc_labels(Lbls, Mlbl, Code);
- error -> Code
- end.
+ insert_fc_labels(Code, Mlbl).
+
+insert_fc_labels([{label,L}=I|Is0], Mlbl) ->
+ case maps:find(L, Mlbl) of
+ error ->
+ [I|insert_fc_labels(Is0, Mlbl)];
+ {ok,Lbls} ->
+ Is = [{label,Lb} || Lb <- Lbls] ++ Is0,
+ [I|insert_fc_labels(Is, maps:remove(L, Mlbl))]
+ end;
+insert_fc_labels([_|_]=Is, _) -> Is.
maps_append_list(K,Vs,M) ->
case M of
@@ -375,16 +389,6 @@ maps_append_list(K,Vs,M) ->
_ -> M#{K => Vs}
end.
-insert_fc_labels([L|Ls], Mlbl, Acc0) ->
- Acc = [{label,L}|Acc0],
- case maps:find(L, Mlbl) of
- error ->
- insert_fc_labels(Ls, Mlbl, Acc);
- {ok,Lbls} ->
- insert_fc_labels(Lbls++Ls, Mlbl, Acc)
- end;
-insert_fc_labels([], _, Acc) -> Acc.
-
collect_labels(Is, #st{entry=Entry}) ->
collect_labels_1(Is, Entry, []).
diff --git a/lib/compiler/src/beam_receive.erl b/lib/compiler/src/beam_receive.erl
index c593184746..89cafe27ce 100644
--- a/lib/compiler/src/beam_receive.erl
+++ b/lib/compiler/src/beam_receive.erl
@@ -177,7 +177,8 @@ opt_recv([I|Is], D, R0, L0, Acc) ->
no;
false ->
opt_recv(Is, D, R, L, [I|Acc])
- end.
+ end;
+opt_recv([], _, _, _, _) -> no.
opt_update_regs({block,Bl}, R, L) ->
{opt_update_regs_bl(Bl, R),L};
diff --git a/lib/compiler/src/beam_reorder.erl b/lib/compiler/src/beam_reorder.erl
index f1c0b3ef91..6a7c033ec6 100644
--- a/lib/compiler/src/beam_reorder.erl
+++ b/lib/compiler/src/beam_reorder.erl
@@ -87,6 +87,15 @@ reorder_1([{test,_,_,_}=I,
%% instruction between the test instruction and the select
%% instruction.
reorder_1(Is, D, [S,I|Acc]);
+reorder_1([{test,_,{f,_},[Src|_]}=I|Is], D,
+ [{get_tuple_element,Src,_,_}|_]=Acc) ->
+ %% We want to avoid code that can confuse beam_validator such as:
+ %% is_tuple Fail Src
+ %% test_arity Fail Src Arity
+ %% is_map Fail Src
+ %% get_tuple_element Src Pos Dst
+ %% Therefore, don't reorder the instructions in such cases.
+ reorder_1(Is, D, [I|Acc]);
reorder_1([{test,_,{f,L},Ss}=I|Is0], D0,
[{get_tuple_element,_,_,El}=G|Acc0]=Acc) ->
case member(El, Ss) of
diff --git a/lib/compiler/src/beam_type.erl b/lib/compiler/src/beam_type.erl
index 5076c5eb96..acaf3ede66 100644
--- a/lib/compiler/src/beam_type.erl
+++ b/lib/compiler/src/beam_type.erl
@@ -513,12 +513,23 @@ update({call_ext,Ar,{extfunc,math,Math,Ar}}, Ts) ->
false -> tdb_kill_xregs(Ts)
end;
update({call_ext,3,{extfunc,erlang,setelement,3}}, Ts0) ->
- Op = case tdb_find({x,1}, Ts0) of
- error -> kill;
- Info -> Info
- end,
- Ts1 = tdb_kill_xregs(Ts0),
- tdb_update([{{x,0},Op}], Ts1);
+ Ts = tdb_kill_xregs(Ts0),
+ case tdb_find({x,1}, Ts0) of
+ {tuple,Sz,_}=T0 ->
+ T = case tdb_find({x,0}, Ts0) of
+ {integer,{I,I}} when I > 1 ->
+ %% First element is not changed. The result
+ %% will have the same type.
+ T0;
+ _ ->
+ %% Position is 1 or unknown. May change the
+ %% first element of the tuple.
+ {tuple,Sz,[]}
+ end,
+ tdb_update([{{x,0},T}], Ts);
+ _ ->
+ Ts
+ end;
update({call,_Arity,_Func}, Ts) -> tdb_kill_xregs(Ts);
update({call_ext,_Arity,_Func}, Ts) -> tdb_kill_xregs(Ts);
update({make_fun2,_,_,_,_}, Ts) -> tdb_kill_xregs(Ts);
@@ -748,7 +759,7 @@ checkerror_2(OrigIs) -> [{set,[],[],fcheckerror}|OrigIs].
%%%
%%% {tuple,Size,First} means that the corresponding register contains a
%%% tuple with *at least* Size elements. An tuple with unknown
-%%% size is represented as {tuple,0}. First is either [] (meaning that
+%%% size is represented as {tuple,0,[]}. First is either [] (meaning that
%%% the tuple's first element is unknown) or [FirstElement] (the contents
%%% of the first element).
%%%
@@ -785,21 +796,45 @@ tdb_copy({Tag,_}=S, D, Ts) when Tag =:= x; Tag =:= y ->
error -> orddict:erase(D, Ts);
Type -> orddict:store(D, Type, Ts)
end;
-tdb_copy(Literal, D, Ts) -> orddict:store(D, Literal, Ts).
+tdb_copy(Literal, D, Ts) ->
+ Type = case Literal of
+ {atom,_} -> Literal;
+ {float,_} -> float;
+ {integer,Int} -> {integer,{Int,Int}};
+ {literal,[_|_]} -> nonempty_list;
+ {literal,#{}} -> map;
+ {literal,Tuple} when tuple_size(Tuple) >= 1 ->
+ Lit = tag_literal(element(1, Tuple)),
+ {tuple,tuple_size(Tuple),[Lit]};
+ _ -> term
+ end,
+ if
+ Type =:= term ->
+ orddict:erase(D, Ts);
+ true ->
+ verify_type(Type),
+ orddict:store(D, Type, Ts)
+ end.
+
+tag_literal(A) when is_atom(A) -> {atom,A};
+tag_literal(F) when is_float(F) -> {float,F};
+tag_literal(I) when is_integer(I) -> {integer,I};
+tag_literal([]) -> nil;
+tag_literal(Lit) -> {literal,Lit}.
%% tdb_update([UpdateOp], Db) -> NewDb
%% UpdateOp = {Register,kill}|{Register,NewInfo}
%% Updates a type database. If a 'kill' operation is given, the type
%% information for that register will be removed from the database.
%% A kill operation takes precedence over other operations for the same
-%% register (i.e. [{{x,0},kill},{{x,0},{tuple,5}}] means that the
+%% register (i.e. [{{x,0},kill},{{x,0},{tuple,5,[]}}] means that the
%% the existing type information, if any, will be discarded, and the
-%% the '{tuple,5}' information ignored.
+%% the '{tuple,5,[]}' information ignored.
%%
%% If NewInfo information is given and there exists information about
%% the register, the old and new type information will be merged.
-%% For instance, {tuple,5} and {tuple,10} will be merged to produce
-%% {tuple,10}.
+%% For instance, {tuple,5,_} and {tuple,10,_} will be merged to produce
+%% {tuple,10,_}.
tdb_update(Uis0, Ts0) ->
Uis1 = filter(fun ({{x,_},_Op}) -> true;
@@ -810,7 +845,8 @@ tdb_update(Uis0, Ts0) ->
tdb_update1([{Key,kill}|Ops], [{K,_Old}|_]=Db) when Key < K ->
tdb_update1(remove_key(Key, Ops), Db);
-tdb_update1([{Key,_New}=New|Ops], [{K,_Old}|_]=Db) when Key < K ->
+tdb_update1([{Key,Type}=New|Ops], [{K,_Old}|_]=Db) when Key < K ->
+ verify_type(Type),
[New|tdb_update1(Ops, Db)];
tdb_update1([{Key,kill}|Ops], [{Key,_}|Db]) ->
tdb_update1(remove_key(Key, Ops), Db);
@@ -820,7 +856,8 @@ tdb_update1([{_,_}|_]=Ops, [Old|Db]) ->
[Old|tdb_update1(Ops, Db)];
tdb_update1([{Key,kill}|Ops], []) ->
tdb_update1(remove_key(Key, Ops), []);
-tdb_update1([{_,_}=New|Ops], []) ->
+tdb_update1([{_,Type}=New|Ops], []) ->
+ verify_type(Type),
[New|tdb_update1(Ops, [])];
tdb_update1([], Db) -> Db.
@@ -855,6 +892,7 @@ merge_type_info(NewType, _) ->
verify_type(NewType),
NewType.
+verify_type({atom,_}) -> ok;
verify_type(boolean) -> ok;
verify_type(integer) -> ok;
verify_type({integer,{Min,Max}})
diff --git a/lib/compiler/src/beam_utils.erl b/lib/compiler/src/beam_utils.erl
index 37f89dd677..a15ecf633e 100644
--- a/lib/compiler/src/beam_utils.erl
+++ b/lib/compiler/src/beam_utils.erl
@@ -25,9 +25,8 @@
is_not_used/3,is_not_used_at/3,
empty_label_index/0,index_label/3,index_labels/1,
code_at/2,bif_to_test/3,is_pure_test/1,
- live_opt/1,delete_live_annos/1,combine_heap_needs/2]).
-
--export([join_even/2,split_even/1]).
+ live_opt/1,delete_live_annos/1,combine_heap_needs/2,
+ join_even/2,split_even/1]).
-import(lists, [member/2,sort/1,reverse/1,splitwith/2]).
@@ -67,8 +66,7 @@ is_killed(R, Is, D) ->
St = #live{bl=check_killed_block_fun(),lbl=D,res=gb_trees:empty()},
case check_liveness(R, Is, St) of
{killed,_} -> true;
- {used,_} -> false;
- {unknown,_} -> false
+ {used,_} -> false
end.
%% is_killed_at(Reg, Lbl, State) -> true|false
@@ -78,8 +76,7 @@ is_killed_at(R, Lbl, D) when is_integer(Lbl) ->
St0 = #live{bl=check_killed_block_fun(),lbl=D,res=gb_trees:empty()},
case check_liveness_at(R, Lbl, St0) of
{killed,_} -> true;
- {used,_} -> false;
- {unknown,_} -> false
+ {used,_} -> false
end.
%% is_not_used(Register, [Instruction], State) -> true|false
@@ -93,8 +90,7 @@ is_not_used(R, Is, D) ->
St = #live{bl=fun check_used_block/3,lbl=D,res=gb_trees:empty()},
case check_liveness(R, Is, St) of
{killed,_} -> true;
- {used,_} -> false;
- {unknown,_} -> false
+ {used,_} -> false
end.
%% is_not_used(Register, [Instruction], State) -> true|false
@@ -108,8 +104,7 @@ is_not_used_at(R, Lbl, D) ->
St = #live{bl=fun check_used_block/3,lbl=D,res=gb_trees:empty()},
case check_liveness_at(R, Lbl, St) of
{killed,_} -> true;
- {used,_} -> false;
- {unknown,_} -> false
+ {used,_} -> false
end.
%% index_labels(FunctionIs) -> State
@@ -137,10 +132,7 @@ index_label(Lbl, Is0, Acc) ->
%% Retrieve the code at the given label.
code_at(L, Ll) ->
- case gb_trees:lookup(L, Ll) of
- {value,Code} -> Code;
- none -> none
- end.
+ gb_trees:get(L, Ll).
%% bif_to_test(Bif, [Op], Fail) -> {test,Test,Fail,[Op]}
%% Convert a BIF to a test. Fail if not possible.
@@ -164,10 +156,10 @@ bif_to_test('=<', [A,B], Fail) -> {test,is_ge,Fail,[B,A]};
bif_to_test('>', [A,B], Fail) -> {test,is_lt,Fail,[B,A]};
bif_to_test('<', [_,_]=Ops, Fail) -> {test,is_lt,Fail,Ops};
bif_to_test('>=', [_,_]=Ops, Fail) -> {test,is_ge,Fail,Ops};
-bif_to_test('==', [A,[]], Fail) -> {test,is_nil,Fail,[A]};
+bif_to_test('==', [A,nil], Fail) -> {test,is_nil,Fail,[A]};
bif_to_test('==', [_,_]=Ops, Fail) -> {test,is_eq,Fail,Ops};
bif_to_test('/=', [_,_]=Ops, Fail) -> {test,is_ne,Fail,Ops};
-bif_to_test('=:=', [A,[]], Fail) -> {test,is_nil,Fail,[A]};
+bif_to_test('=:=', [A,nil], Fail) -> {test,is_nil,Fail,[A]};
bif_to_test('=:=', [_,_]=Ops, Fail) -> {test,is_eq_exact,Fail,Ops};
bif_to_test('=/=', [_,_]=Ops, Fail) -> {test,is_ne_exact,Fail,Ops};
bif_to_test(is_record, [_,_,_]=Ops, Fail) -> {test,is_record,Fail,Ops}.
@@ -175,8 +167,7 @@ bif_to_test(is_record, [_,_,_]=Ops, Fail) -> {test,is_record,Fail,Ops}.
%% is_pure_test({test,Op,Fail,Ops}) -> true|false.
%% Return 'true' if the test instruction does not modify any
-%% registers and/or bit syntax matching state, nor modifies
-%% any bit syntax matching state.
+%% registers and/or bit syntax matching state.
%%
is_pure_test({test,is_eq,_,[_,_]}) -> true;
is_pure_test({test,is_ne,_,[_,_]}) -> true;
@@ -188,6 +179,8 @@ is_pure_test({test,is_nil,_,[_]}) -> true;
is_pure_test({test,is_nonempty_list,_,[_]}) -> true;
is_pure_test({test,test_arity,_,[_,_]}) -> true;
is_pure_test({test,has_map_fields,_,[_|_]}) -> true;
+is_pure_test({test,is_bitstr,_,[_]}) -> true;
+is_pure_test({test,is_function2,_,[_,_]}) -> true;
is_pure_test({test,Op,_,Ops}) ->
erl_internal:new_type_test(Op, length(Ops)).
@@ -235,21 +228,28 @@ combine_heap_needs(Words, {alloc,Alloc}) when is_integer(Words) ->
combine_heap_needs(H1, H2) when is_integer(H1), is_integer(H2) ->
H1+H2.
+%% split_even/1
+%% [1,2,3,4,5,6] -> {[1,3,5],[2,4,6]}
+
+split_even(Rs) -> split_even(Rs, [], []).
+
+%% join_even/1
+%% {[1,3,5],[2,4,6]} -> [1,2,3,4,5,6]
+
+join_even([], []) -> [];
+join_even([S|Ss], [D|Ds]) -> [S,D|join_even(Ss, Ds)].
+
%%%
%%% Local functions.
%%%
-%% check_liveness(Reg, [Instruction], {State,BlockCheckFun}) ->
-%% {killed | used | unknown,UpdateState}
-%% Finds out how Reg is used in the instruction sequence. Returns one of:
-%% killed - Reg is assigned a new value or killed by an allocation instruction
-%% used - Reg is used (or possibly referenced by an allocation instruction)
-%% unknown - not possible to determine (perhaps because of an instruction
-%% that we don't recognize)
+%% check_liveness(Reg, [Instruction], #live{}) ->
+%% {killed | used, #live{}}
+%% Find out whether Reg is used or killed in instruction sequence.
+%% 'killed' means that Reg is assigned a new value or killed by an
+%% allocation instruction. 'used' means that Reg is used in some way.
-check_liveness(R, [{set,_,_,_}=I|_], St) ->
- erlang:error(only_allowed_in_blocks, [R,I,St]);
check_liveness(R, [{block,Blk}|Is], #live{bl=BlockCheck}=St0) ->
case BlockCheck(R, Blk, St0) of
{transparent,St} -> check_liveness(R, Is, St);
@@ -325,8 +325,11 @@ check_liveness(R, [{deallocate,_}|Is], St) ->
{y,_} -> {killed,St};
_ -> check_liveness(R, Is, St)
end;
-check_liveness(R, [return|_], St) ->
- check_liveness_live_ret(R, 1, St);
+check_liveness({x,_}=R, [return|_], St) ->
+ case R of
+ {x,0} -> {used,St};
+ {x,_} -> {killed,St}
+ end;
check_liveness(R, [{call,Live,_}|Is], St) ->
case R of
{x,X} when X < Live -> {used,St};
@@ -461,8 +464,9 @@ check_liveness(R, [{loop_rec,{f,_},{x,0}}|_], St) ->
{x,_} ->
{killed,St};
_ ->
- %% y register. Rarely happens. Be very conversative.
- {unknown,St}
+ %% y register. Rarely happens. Be very conversative and
+ %% assume it's used.
+ {used,St}
end;
check_liveness(R, [{loop_rec_end,{f,Fail}}|_], St) ->
check_liveness_at(R, Fail, St);
@@ -493,7 +497,8 @@ check_liveness(R, [{put_map,{f,_},_,Src,_D,Live,{list,_}}|_], St0) ->
{x,_} ->
{killed,St0};
{y,_} ->
- {unknown,St0}
+ %% Conservatively mark it as used.
+ {used,St0}
end;
check_liveness(R, [{test_heap,N,Live}|Is], St) ->
I = {block,[{set,[],[],{alloc,Live,{nozero,nostack,N,[]}}}]},
@@ -505,12 +510,8 @@ check_liveness(R, [{get_list,S,D1,D2}|Is], St) ->
I = {block,[{set,[D1,D2],[S],get_list}]},
check_liveness(R, [I|Is], St);
check_liveness(_R, Is, St) when is_list(Is) ->
-%% case Is of
-%% [I|_] ->
-%% io:format("~p ~p\n", [_R,I]);
-%% _ -> ok
-%% end,
- {unknown,St}.
+ %% Not implemented. Conservatively assume that the register is used.
+ {used,St}.
check_liveness_everywhere(R, [{f,Lbl}|T], St0) ->
case check_liveness_at(R, Lbl, St0) of
@@ -529,7 +530,7 @@ check_liveness_at(R, Lbl, #live{lbl=Ll,res=ResMemorized}=St0) ->
none ->
{Res,St} = case gb_trees:lookup(Lbl, Ll) of
{value,Is} -> check_liveness(R, Is, St0);
- none -> {unknown,St0}
+ none -> {used,St0}
end,
{Res,St#live{res=gb_trees:insert(Lbl, Res, St#live.res)}}
end.
@@ -537,14 +538,6 @@ check_liveness_at(R, Lbl, #live{lbl=Ll,res=ResMemorized}=St0) ->
check_liveness_ret(R, R, St) -> {used,St};
check_liveness_ret(_, _, St) -> {killed,St}.
-check_liveness_live_ret({x,R}, Live, St) ->
- if
- R < Live -> {used,St};
- true -> {killed,St}
- end;
-check_liveness_live_ret({y,_}, _, St) ->
- {killed,St}.
-
check_liveness_fail(_, _, _, 0, St) ->
{killed,St};
check_liveness_fail(R, Op, Args, Fail, St) ->
@@ -594,8 +587,10 @@ check_killed_block(_, []) -> transparent.
%% killed - Reg is assigned a new value or killed by an allocation instruction
%% transparent - Reg is neither used nor killed
%% used - Reg is explicitly used by an instruction
-%%
-%% (Unknown instructions will cause an exception.)
+%%
+%% '%live' annotations are not allowed.
+%%
+%% (Unknown instructions will cause an exception.)
check_used_block({x,X}=R, [{set,Ds,Ss,{alloc,Live,Op}}|Is], St) ->
if
@@ -604,11 +599,6 @@ check_used_block({x,X}=R, [{set,Ds,Ss,{alloc,Live,Op}}|Is], St) ->
end;
check_used_block(R, [{set,Ds,Ss,Op}|Is], St) ->
check_used_block_1(R, Ss, Ds, Op, Is, St);
-check_used_block(R, [{'%live',Live,_}|Is], St) ->
- case R of
- {x,X} when X >= Live -> {killed,St};
- _ -> check_used_block(R, Is, St)
- end;
check_used_block(_, [], St) -> {transparent,St}.
check_used_block_1(R, Ss, Ds, Op, Is, St0) ->
@@ -639,8 +629,7 @@ is_reg_used_at_1(_, 0, St) ->
is_reg_used_at_1(R, Lbl, St0) ->
case check_liveness_at(R, Lbl, St0) of
{killed,St} -> {false,St};
- {used,St} -> {true,St};
- {unknown,St} -> {true,St}
+ {used,St} -> {true,St}
end.
index_labels_1([{label,Lbl}|Is0], Acc) ->
@@ -756,11 +745,6 @@ live_opt([{select,_,Src,Fail,List}=I|Is], Regs0, D, Acc) ->
Regs1 = x_live([Src], Regs0),
Regs = live_join_labels([Fail|List], D, Regs1),
live_opt(Is, Regs, D, [I|Acc]);
-live_opt([{'try',_,_}=I|Is], Regs, D, Acc) ->
- %% If an exeption happens, all x registers will be killed.
- %% Therefore, we should only base liveness of the code inside
- %% the try.
- live_opt(Is, Regs, D, [I|Acc]);
live_opt([{try_case,_}=I|Is], _, D, Acc) ->
live_opt(Is, live_call(1), D, [I|Acc]);
live_opt([{loop_rec,_Fail,_Dst}=I|Is], _, D, Acc) ->
@@ -860,14 +844,7 @@ x_live([], Regs) -> Regs.
is_live(X, Regs) -> ((Regs bsr X) band 1) =:= 1.
-%% split_even/1
-%% [1,2,3,4,5,6] -> {[1,3,5],[2,4,6]}
-split_even(Rs) -> split_even(Rs,[],[]).
-split_even([],Ss,Ds) -> {reverse(Ss),reverse(Ds)};
-split_even([S,D|Rs],Ss,Ds) ->
- split_even(Rs,[S|Ss],[D|Ds]).
-
-%% join_even/1
-%% {[1,3,5],[2,4,6]} -> [1,2,3,4,5,6]
-join_even([],[]) -> [];
-join_even([S|Ss],[D|Ds]) -> [S,D|join_even(Ss,Ds)].
+split_even([], Ss, Ds) ->
+ {reverse(Ss),reverse(Ds)};
+split_even([S,D|Rs], Ss, Ds) ->
+ split_even(Rs, [S|Ss], [D|Ds]).
diff --git a/lib/compiler/src/beam_validator.erl b/lib/compiler/src/beam_validator.erl
index 6877141885..4c0cb6780a 100644
--- a/lib/compiler/src/beam_validator.erl
+++ b/lib/compiler/src/beam_validator.erl
@@ -161,6 +161,13 @@ validate_0(Module, [{function,Name,Ar,Entry,Code}|Fs], Ft) ->
% in the module (those that start with bs_start_match2).
}).
+%% Match context type.
+-record(ms,
+ {id=make_ref() :: reference(), %Unique ID.
+ valid=0 :: non_neg_integer(), %Valid slots
+ slots=0 :: non_neg_integer() %Number of slots
+ }).
+
validate_1(Is, Name, Arity, Entry, Ft) ->
validate_2(labels(Is), Name, Arity, Entry, Ft).
@@ -274,7 +281,7 @@ valfun_1({bs_context_to_binary,Ctx}, #vst{current=#st{x=Xs}}=Vst) ->
case Ctx of
{Tag,X} when Tag =:= x; Tag =:= y ->
Type = case gb_trees:lookup(X, Xs) of
- {value,{match_context,_,_}} -> term;
+ {value,#ms{}} -> term;
_ -> get_term_type(Ctx, Vst)
end,
set_type_reg(Type, Ctx, Vst);
@@ -575,7 +582,7 @@ valfun_4({test,bs_start_match2,{f,Fail},Live,[Ctx,NeedSlots],Ctx}, Vst0) ->
verify_live(Live, Vst0),
Vst1 = prune_x_regs(Live, Vst0),
BranchVst = case CtxType of
- {match_context,_,_} ->
+ #ms{} ->
%% The failure branch will never be taken when Ctx
%% is a match context. Therefore, the type for Ctx
%% at the failure label must not be match_context
@@ -651,8 +658,10 @@ valfun_4({test,is_map,{f,Lbl},[Src]}, Vst0) ->
case Src of
{Tag,_} when Tag =:= x; Tag =:= y ->
set_type_reg(map, Src, Vst);
+ {literal,Map} when is_map(Map) ->
+ Vst;
_ ->
- Vst
+ kill_state(Vst)
end;
valfun_4({test,_Op,{f,Lbl},Src}, Vst) ->
validate_src(Src, Vst),
@@ -828,7 +837,7 @@ kill_state_1(Vst) ->
%% The stackframe must be initialized.
%% The instruction will return to the instruction following the call.
call(Name, Live, #vst{current=St}=Vst) ->
- verify_live(Live, Vst),
+ verify_call_args(Name, Live, Vst),
verify_y_init(Vst),
case return_type(Name, Vst) of
Type when Type =/= exception ->
@@ -840,44 +849,74 @@ call(Name, Live, #vst{current=St}=Vst) ->
%% Tail call.
%% The stackframe must have a known size and be initialized.
%% Does not return to the instruction following the call.
-tail_call(Name, Live, Vst) ->
+tail_call(Name, Live, Vst0) ->
+ verify_y_init(Vst0),
+ Vst = deallocate(Vst0),
verify_call_args(Name, Live, Vst),
- verify_y_init(Vst),
verify_no_ct(Vst),
kill_state(Vst).
verify_call_args(_, 0, #vst{}) ->
ok;
verify_call_args({f,Lbl}, Live, Vst) when is_integer(Live)->
- Verify = fun(R) ->
- case get_move_term_type(R, Vst) of
- {match_context,_,_} ->
- verify_call_match_context(Lbl, Vst);
- _ ->
- ok
- end
- end,
- verify_call_args_1(Live, Verify, Vst);
+ verify_local_call(Lbl, Live, Vst);
verify_call_args(_, Live, Vst) when is_integer(Live)->
- Verify = fun(R) -> get_term_type(R, Vst) end,
- verify_call_args_1(Live, Verify, Vst);
+ verify_call_args_1(Live, Vst);
verify_call_args(_, Live, _) ->
error({bad_number_of_live_regs,Live}).
-verify_call_args_1(0, _, _) -> ok;
-verify_call_args_1(N, Verify, Vst) ->
+verify_call_args_1(0, _) -> ok;
+verify_call_args_1(N, Vst) ->
X = N - 1,
- Verify({x,X}),
- verify_call_args_1(X, Verify, Vst).
+ get_term_type({x,X}, Vst),
+ verify_call_args_1(X, Vst).
+
+verify_local_call(Lbl, Live, Vst) ->
+ case all_ms_in_x_regs(Live, Vst) of
+ [{R,Ctx}] ->
+ %% Verify that there is a suitable bs_start_match2 instruction.
+ verify_call_match_context(Lbl, R, Vst),
+
+ %% Since the callee has consumed the match context,
+ %% there must be no additional copies in Y registers.
+ #ms{id=Id} = Ctx,
+ case ms_in_y_regs(Id, Vst) of
+ [] ->
+ ok;
+ [_|_]=Ys ->
+ error({multiple_match_contexts,[R|Ys]})
+ end;
+ [_,_|_]=Xs0 ->
+ Xs = [R || {R,_} <- Xs0],
+ error({multiple_match_contexts,Xs});
+ [] ->
+ ok
+ end.
+
+all_ms_in_x_regs(0, _Vst) ->
+ [];
+all_ms_in_x_regs(Live0, Vst) ->
+ Live = Live0 - 1,
+ R = {x,Live},
+ case get_move_term_type(R, Vst) of
+ #ms{}=M ->
+ [{R,M}|all_ms_in_x_regs(Live, Vst)];
+ _ ->
+ all_ms_in_x_regs(Live, Vst)
+ end.
-verify_call_match_context(Lbl, #vst{ft=Ft}) ->
+ms_in_y_regs(Id, #vst{current=#st{y=Ys0}}) ->
+ Ys = gb_trees:to_list(Ys0),
+ [Y || {Y,#ms{id=OtherId}} <- Ys, OtherId =:= Id].
+
+verify_call_match_context(Lbl, Ctx, #vst{ft=Ft}) ->
case gb_trees:lookup(Lbl, Ft) of
none ->
error(no_bs_start_match2);
{value,[{test,bs_start_match2,_,_,[Ctx,_],Ctx}|_]} ->
ok;
- {value,[{test,bs_start_match2,_,_,[Bin,_,_],Ctx}|_]} ->
- error({binary_and_context_regs_different,Bin,Ctx})
+ {value,[{test,bs_start_match2,_,_,_,_}=I|_]} ->
+ error({unsuitable_bs_start_match2,I})
end.
allocate(Zero, Stk, Heap, Live, #vst{current=#st{numy=none}=St}=Vst0) ->
@@ -1009,7 +1048,7 @@ assert_unique_map_keys([_,_|_]=Ls) ->
%%%
bsm_match_state(Slots) ->
- {match_context,0,Slots}.
+ #ms{slots=Slots}.
bsm_validate_context(Reg, Vst) ->
_ = bsm_get_context(Reg, Vst),
@@ -1017,7 +1056,7 @@ bsm_validate_context(Reg, Vst) ->
bsm_get_context({x,X}=Reg, #vst{current=#st{x=Xs}}=_Vst) when is_integer(X) ->
case gb_trees:lookup(X, Xs) of
- {value,{match_context,_,_}=Ctx} -> Ctx;
+ {value,#ms{}=Ctx} -> Ctx;
_ -> error({no_bsm_context,Reg})
end;
bsm_get_context(Reg, _) -> error({bad_source,Reg}).
@@ -1029,8 +1068,8 @@ bsm_save(Reg, {atom,start}, Vst) ->
Vst;
bsm_save(Reg, SavePoint, Vst) ->
case bsm_get_context(Reg, Vst) of
- {match_context,Bits,Slots} when SavePoint < Slots ->
- Ctx = {match_context,Bits bor (1 bsl SavePoint),Slots},
+ #ms{valid=Bits,slots=Slots}=Ctxt0 when SavePoint < Slots ->
+ Ctx = Ctxt0#ms{valid=Bits bor (1 bsl SavePoint),slots=Slots},
set_type_reg(Ctx, Reg, Vst);
_ -> error({illegal_save,SavePoint})
end.
@@ -1042,7 +1081,7 @@ bsm_restore(Reg, {atom,start}, Vst) ->
Vst;
bsm_restore(Reg, SavePoint, Vst) ->
case bsm_get_context(Reg, Vst) of
- {match_context,Bits,Slots} when SavePoint < Slots ->
+ #ms{valid=Bits,slots=Slots} when SavePoint < Slots ->
case Bits band (1 bsl SavePoint) of
0 -> error({illegal_restore,SavePoint,not_set});
_ -> Vst
@@ -1123,7 +1162,7 @@ assert_term(Src, Vst) ->
%% Thus 'exception' is never stored as type descriptor
%% for a register.
%%
-%% {match_context,_,_} A matching context for bit syntax matching. We do allow
+%% #ms{} A match context for bit syntax matching. We do allow
%% it to moved/to from stack, but otherwise it must only
%% be accessed by bit syntax matching instructions.
%%
@@ -1165,12 +1204,17 @@ assert_type(WantedType, Term, Vst) ->
assert_type(Correct, Correct) -> ok;
assert_type(float, {float,_}) -> ok;
assert_type(tuple, {tuple,_}) -> ok;
+assert_type(tuple, {literal,Tuple}) when is_tuple(Tuple) -> ok;
assert_type({tuple_element,I}, {tuple,[Sz]})
when 1 =< I, I =< Sz ->
ok;
assert_type({tuple_element,I}, {tuple,Sz})
when is_integer(Sz), 1 =< I, I =< Sz ->
ok;
+assert_type({tuple_element,I}, {literal,Lit}) when I =< tuple_size(Lit) ->
+ ok;
+assert_type(cons, {literal,[_|_]}) ->
+ ok;
assert_type(Needed, Actual) ->
error({bad_type,{needed,Needed},{actual,Actual}}).
@@ -1225,7 +1269,7 @@ get_term_type(Src, Vst) ->
initialized -> error({unassigned,Src});
{catchtag,_} -> error({catchtag,Src});
{trytag,_} -> error({trytag,Src});
- {match_context,_,_} -> error({match_context,Src});
+ #ms{} -> error({match_context,Src});
Type -> Type
end.
@@ -1377,11 +1421,12 @@ merge_types(bool, {atom,A}) ->
merge_bool(A);
merge_types({atom,A}, bool) ->
merge_bool(A);
-merge_types({match_context,B0,Slots},{match_context,B1,Slots}) ->
- {match_context,B0 bor B1,Slots};
-merge_types({match_context,_,_}=M, _) ->
+merge_types(#ms{id=Id,valid=B0,slots=Slots}=M,
+ #ms{id=Id,valid=B1,slots=Slots}) ->
+ M#ms{valid=B0 bor B1,slots=Slots};
+merge_types(#ms{}=M, _) ->
M;
-merge_types(_, {match_context,_,_}=M) ->
+merge_types(_, #ms{}=M) ->
M;
merge_types(T1, T2) when T1 =/= T2 ->
%% Too different. All we know is that the type is a 'term'.
@@ -1505,7 +1550,6 @@ bif_type(node, [_], _) -> {atom,[]};
bif_type(hd, [_], _) -> term;
bif_type(tl, [_], _) -> term;
bif_type(get, [_], _) -> term;
-bif_type(raise, [_,_], _) -> exception;
bif_type(Bif, _, _) when is_atom(Bif) -> term.
is_bif_safe('/=', 2) -> true;
@@ -1519,6 +1563,7 @@ is_bif_safe('>=', 2) -> true;
is_bif_safe(is_atom, 1) -> true;
is_bif_safe(is_boolean, 1) -> true;
is_bif_safe(is_binary, 1) -> true;
+is_bif_safe(is_bitstring, 1) -> true;
is_bif_safe(is_float, 1) -> true;
is_bif_safe(is_function, 1) -> true;
is_bif_safe(is_integer, 1) -> true;
@@ -1549,8 +1594,12 @@ return_type_1(erlang, setelement, 3, Vst) ->
Tuple = {x,1},
TupleType =
case get_term_type(Tuple, Vst) of
- {tuple,_}=TT -> TT;
- _ -> {tuple,[0]}
+ {tuple,_}=TT ->
+ TT;
+ {literal,Lit} when is_tuple(Lit) ->
+ {tuple,tuple_size(Lit)};
+ _ ->
+ {tuple,[0]}
end,
case get_term_type({x,0}, Vst) of
{integer,[]} -> TupleType;
diff --git a/lib/compiler/src/cerl.erl b/lib/compiler/src/cerl.erl
index 6dc162db40..61abae344c 100644
--- a/lib/compiler/src/cerl.erl
+++ b/lib/compiler/src/cerl.erl
@@ -1955,7 +1955,7 @@ is_c_var(_) ->
false.
-%% @spec c_fname(Name::atom(), Arity::integer()) -> cerl()
+%% @spec c_fname(Name::atom(), Arity::arity()) -> cerl()
%% @equiv c_var({Name, Arity})
%% @see fname_id/1
%% @see fname_arity/1
@@ -1963,18 +1963,18 @@ is_c_var(_) ->
%% @see ann_c_fname/3
%% @see update_c_fname/3
--spec c_fname(atom(), non_neg_integer()) -> c_var().
+-spec c_fname(atom(), arity()) -> c_var().
c_fname(Atom, Arity) ->
c_var({Atom, Arity}).
-%% @spec ann_c_fname(As::[term()], Name::atom(), Arity::integer()) ->
+%% @spec ann_c_fname(As::[term()], Name::atom(), Arity::arity()) ->
%% cerl()
%% @equiv ann_c_var(As, {Atom, Arity})
%% @see c_fname/2
--spec ann_c_fname([term()], atom(), non_neg_integer()) -> c_var().
+-spec ann_c_fname([term()], atom(), arity()) -> c_var().
ann_c_fname(As, Atom, Arity) ->
ann_c_var(As, {Atom, Arity}).
@@ -1992,13 +1992,13 @@ update_c_fname(#c_var{name = {_, Arity}, anno = As}, Atom) ->
#c_var{name = {Atom, Arity}, anno = As}.
-%% @spec update_c_fname(Old::cerl(), Name::atom(), Arity::integer()) ->
+%% @spec update_c_fname(Old::cerl(), Name::atom(), Arity::arity()) ->
%% cerl()
%% @equiv update_c_var(Old, {Atom, Arity})
%% @see update_c_fname/2
%% @see c_fname/2
--spec update_c_fname(c_var(), atom(), integer()) -> c_var().
+-spec update_c_fname(c_var(), atom(), arity()) -> c_var().
update_c_fname(Node, Atom, Arity) ->
update_c_var(Node, {Atom, Arity}).
@@ -2047,14 +2047,14 @@ fname_id(#c_var{name={A,_}}) ->
A.
-%% @spec fname_arity(cerl()) -> byte()
+%% @spec fname_arity(cerl()) -> arity()
%%
%% @doc Returns the arity part of an abstract function name variable.
%%
%% @see fname_id/1
%% @see c_fname/2
--spec fname_arity(c_var()) -> byte().
+-spec fname_arity(c_var()) -> arity().
fname_arity(#c_var{name={_,N}}) ->
N.
@@ -2500,7 +2500,7 @@ fun_body(Node) ->
Node#c_fun.body.
-%% @spec fun_arity(Node::cerl()) -> integer()
+%% @spec fun_arity(Node::cerl()) -> arity()
%%
%% @doc Returns the number of parameter subtrees of an abstract
%% fun-expression.
@@ -2511,7 +2511,7 @@ fun_body(Node) ->
%% @see c_fun/2
%% @see fun_vars/1
--spec fun_arity(c_fun()) -> non_neg_integer().
+-spec fun_arity(c_fun()) -> arity().
fun_arity(Node) ->
length(fun_vars(Node)).
@@ -3418,7 +3418,7 @@ apply_args(Node) ->
Node#c_apply.args.
-%% @spec apply_arity(Node::cerl()) -> integer()
+%% @spec apply_arity(Node::cerl()) -> arity()
%%
%% @doc Returns the number of argument subtrees of an abstract
%% function application.
@@ -3430,7 +3430,7 @@ apply_args(Node) ->
%% @see c_apply/2
%% @see apply_args/1
--spec apply_arity(c_apply()) -> non_neg_integer().
+-spec apply_arity(c_apply()) -> arity().
apply_arity(Node) ->
length(apply_args(Node)).
@@ -3536,7 +3536,7 @@ call_args(Node) ->
Node#c_call.args.
-%% @spec call_arity(Node::cerl()) -> integer()
+%% @spec call_arity(Node::cerl()) -> arity()
%%
%% @doc Returns the number of argument subtrees of an abstract
%% inter-module call.
@@ -3548,7 +3548,7 @@ call_args(Node) ->
%% @see c_call/3
%% @see call_args/1
--spec call_arity(c_call()) -> non_neg_integer().
+-spec call_arity(c_call()) -> arity().
call_arity(Node) ->
length(call_args(Node)).
@@ -3640,7 +3640,7 @@ primop_args(Node) ->
Node#c_primop.args.
-%% @spec primop_arity(Node::cerl()) -> integer()
+%% @spec primop_arity(Node::cerl()) -> arity()
%%
%% @doc Returns the number of argument subtrees of an abstract
%% primitive operation call.
@@ -3652,7 +3652,7 @@ primop_args(Node) ->
%% @see c_primop/2
%% @see primop_args/1
--spec primop_arity(c_primop()) -> non_neg_integer().
+-spec primop_arity(c_primop()) -> arity().
primop_arity(Node) ->
length(primop_args(Node)).
diff --git a/lib/compiler/src/compile.erl b/lib/compiler/src/compile.erl
index 149086152a..e951a25e04 100644
--- a/lib/compiler/src/compile.erl
+++ b/lib/compiler/src/compile.erl
@@ -26,6 +26,7 @@
-export([forms/1,forms/2,noenv_forms/2]).
-export([output_generated/1,noenv_output_generated/1]).
-export([options/0]).
+-export([env_compiler_options/0]).
%% Erlc interface.
-export([compile/3,compile_beam/3,compile_asm/3,compile_core/3]).
@@ -42,6 +43,10 @@
-type abstract_code() :: [erl_parse:abstract_form()].
+%% Internal representations used for 'from_asm' and 'from_beam' compilation can
+%% also be valid, but have no relevant types defined.
+-type forms() :: abstract_code() | cerl:c_module().
+
-type option() :: atom() | {atom(), term()} | {'d', atom(), term()}.
-type err_info() :: {erl_anno:line() | 'none',
@@ -87,7 +92,7 @@ file(File, Opt) ->
forms(Forms) -> forms(Forms, ?DEFAULT_OPTIONS).
--spec forms(abstract_code(), [option()] | option()) -> comp_ret().
+-spec forms(forms(), [option()] | option()) -> comp_ret().
forms(Forms, Opts) when is_list(Opts) ->
do_compile({forms,Forms}, [binary|Opts++env_default_opts()]);
@@ -115,7 +120,7 @@ noenv_file(File, Opts) when is_list(Opts) ->
noenv_file(File, Opt) ->
noenv_file(File, [Opt|?DEFAULT_OPTIONS]).
--spec noenv_forms(abstract_code(), [option()] | option()) -> comp_ret().
+-spec noenv_forms(forms(), [option()] | option()) -> comp_ret().
noenv_forms(Forms, Opts) when is_list(Opts) ->
do_compile({forms,Forms}, [binary|Opts]);
@@ -131,6 +136,14 @@ noenv_output_generated(Opts) ->
end, Passes).
%%
+%% Retrieve ERL_COMPILER_OPTIONS as a list of terms
+%%
+
+-spec env_compiler_options() -> [term()].
+
+env_compiler_options() -> env_default_opts().
+
+%%
%% Local functions
%%
@@ -227,6 +240,8 @@ format_error({epp,E}) ->
epp:format_error(E);
format_error(write_error) ->
"error writing file";
+format_error({write_error, Error}) ->
+ io_lib:format("error writing file: ~ts", [file:format_error(Error)]);
format_error({rename,From,To,Error}) ->
io_lib:format("failed to rename ~ts to ~ts: ~ts",
[From,To,file:format_error(Error)]);
@@ -1197,7 +1212,7 @@ makedep_output(#compile{code=Code,options=Opts,ofile=Ofile}=St) ->
end,
{ok,St}
catch
- exit:_ ->
+ error:_ ->
%% Couldn't write to output Makefile.
Err = {St#compile.ifile,[{none,?MODULE,write_error}]},
{error,St#compile{errors=St#compile.errors++[Err]}}
@@ -1470,8 +1485,8 @@ save_binary_1(St) ->
end,
{error,St#compile{errors=St#compile.errors ++ Es}}
end;
- {error,_Error} ->
- Es = [{Tfile,[{none,compile,write_error}]}],
+ {error,Error} ->
+ Es = [{Tfile,[{none,compile,{write_error,Error}}]}],
{error,St#compile{errors=St#compile.errors ++ Es}}
end.
@@ -1619,8 +1634,8 @@ listing(LFun, Ext, St) ->
LFun(Lf, Code),
ok = file:close(Lf),
{ok,St};
- {error,_Error} ->
- Es = [{Lfile,[{none,compile,write_error}]}],
+ {error,Error} ->
+ Es = [{Lfile,[{none,compile,{write_error,Error}}]}],
{error,St#compile{errors=St#compile.errors ++ Es}}
end.
diff --git a/lib/compiler/src/core_pp.erl b/lib/compiler/src/core_pp.erl
index f34a5c034f..67209d06be 100644
--- a/lib/compiler/src/core_pp.erl
+++ b/lib/compiler/src/core_pp.erl
@@ -33,8 +33,7 @@
%% Prettyprint-formats (naively) an abstract Core Erlang syntax
%% tree.
--record(ctxt, {class = term :: 'clause' | 'def' | 'expr' | 'term',
- indent = 0 :: integer(),
+-record(ctxt, {indent = 0 :: integer(),
item_indent = 2 :: integer(),
body_indent = 4 :: integer(),
line = 0 :: integer(),
@@ -132,14 +131,11 @@ format_1(#c_literal{anno=A,val=Bitstring}, Ctxt) when is_bitstring(Bitstring) ->
format_1(#c_binary{anno=A,segments=Segs}, Ctxt);
format_1(#c_literal{anno=A,val=M},Ctxt) when is_map(M) ->
Pairs = maps:to_list(M),
- Op = case Ctxt of
- #ctxt{ class = clause } -> exact;
- _ -> assoc
- end,
- Cpairs = [#c_map_pair{op=#c_literal{val=Op},
+ Op = #c_literal{val=assoc},
+ Cpairs = [#c_map_pair{op=Op,
key=#c_literal{val=K},
val=#c_literal{val=V}} || {K,V} <- Pairs],
- format_1(#c_map{anno=A,arg=#c_literal{val=#{}},es=Cpairs},Ctxt);
+ format_1(#c_map{anno=A,arg=#c_literal{val=#{}},es=Cpairs},Ctxt);
format_1(#c_var{name={I,A}}, _) ->
[core_atom(I),$/,integer_to_list(A)];
format_1(#c_var{name=V}, _) ->
@@ -340,35 +336,30 @@ format_1(#c_module{name=N,exports=Es,attrs=As,defs=Ds}, Ctxt) ->
[Mod," [",
format_vseq(Es,
"", ",",
- add_indent(set_class(Ctxt, term), width(Mod, Ctxt)+2),
+ add_indent(Ctxt, width(Mod, Ctxt)+2),
fun format/2),
"]",
nl_indent(Ctxt),
" attributes [",
format_vseq(As,
"", ",",
- add_indent(set_class(Ctxt, def), 16),
+ add_indent(Ctxt, 16),
fun format_def/2),
"]",
nl_indent(Ctxt),
format_funcs(Ds, Ctxt),
nl_indent(Ctxt)
| "end"
- ];
-format_1(Type, _) ->
- ["** Unsupported type: ",
- io_lib:write(Type)
- | " **"
].
format_funcs(Fs, Ctxt) ->
format_vseq(Fs,
"", "",
- set_class(Ctxt, def),
+ Ctxt,
fun format_def/2).
format_def({N,V}, Ctxt0) ->
- Ctxt1 = add_indent(set_class(Ctxt0, expr), Ctxt0#ctxt.body_indent),
+ Ctxt1 = add_indent(Ctxt0, Ctxt0#ctxt.body_indent),
[format(N, Ctxt0),
" =",
nl_indent(Ctxt1)
@@ -392,8 +383,7 @@ do_format_bitstr(#c_bitstr{val=V,size=S,unit=U,type=T,flags=Fs}, Ctxt0) ->
["#<", Val, ">(", format_hseq(Vs,",", Ctxt2, fun format/2), $)].
format_clauses(Cs, Ctxt) ->
- format_vseq(Cs, "", "", set_class(Ctxt, clause),
- fun format_clause/2).
+ format_vseq(Cs, "", "", Ctxt, fun format_clause/2).
format_clause(Node, Ctxt) ->
maybe_anno(Node, fun format_clause_1/2, Ctxt).
@@ -405,15 +395,13 @@ format_clause_1(#c_clause{pats=Ps,guard=G,body=B}, Ctxt) ->
case is_trivial_guard(G) of
true ->
[" when ",
- format_guard(G, add_indent(set_class(Ctxt, expr),
- width(Ptxt, Ctxt) + 6))];
+ format_guard(G, add_indent(Ctxt, width(Ptxt, Ctxt) + 6))];
false ->
[nl_indent(Ctxt2), "when ",
- format_guard(G, add_indent(set_class(Ctxt2, expr), 2))]
+ format_guard(G, add_indent(Ctxt2, 2))]
end++
" ->",
- nl_indent(Ctxt2)
- | format(B, set_class(Ctxt2, expr))
+ nl_indent(Ctxt2) | format(B, Ctxt2)
].
is_trivial_guard(#c_literal{val=Val}) when is_atom(Val) -> true;
@@ -467,7 +455,7 @@ format_list_tail(Tail, Ctxt) ->
format_map_pair(Op, K, V, Ctxt0) ->
Ctxt1 = add_indent(Ctxt0, 1),
- Txt = format(K, set_class(Ctxt1, expr)),
+ Txt = format(K, Ctxt1),
Ctxt2 = add_indent(Ctxt0, width(Txt, Ctxt1)),
[Txt,Op,format(V, Ctxt2)].
@@ -490,6 +478,7 @@ spaces(5) -> " ";
spaces(6) -> " ";
spaces(7) -> " ".
+%% Undo indentation done by nl_indent/1.
unindent(T, Ctxt) ->
unindent(T, Ctxt#ctxt.indent, []).
@@ -505,18 +494,11 @@ unindent([$\t|T], N, C) ->
unindent([spaces(Tab - N)|T], 0, C)
end;
unindent([L|T], N, C) when is_list(L) ->
- unindent(L, N, [T|C]);
-unindent([H|T], _, C) ->
- [H|[T|C]];
-unindent([], N, [H|T]) ->
- unindent(H, N, T);
-unindent([], _, []) -> [].
+ unindent(L, N, [T|C]).
width(Txt, Ctxt) ->
- try width(Txt, 0, Ctxt, [])
- catch error:_ -> exit({bad_text,Txt})
- end.
+ width(Txt, 0, Ctxt, []).
width([$\t|T], A, Ctxt, C) ->
width(T, A + ?TAB_WIDTH, Ctxt, C);
@@ -533,14 +515,9 @@ width([], A, _, []) -> A.
add_indent(Ctxt, Dx) ->
Ctxt#ctxt{indent = Ctxt#ctxt.indent + Dx}.
-set_class(Ctxt, Class) ->
- Ctxt#ctxt{class = Class}.
-
core_atom(A) -> io_lib:write_string(atom_to_list(A), $').
-is_simple_term(#c_values{es=Es}) ->
- length(Es) < 3 andalso lists:all(fun is_simple_term/1, Es);
is_simple_term(#c_tuple{es=Es}) ->
length(Es) < 4 andalso lists:all(fun is_simple_term/1, Es);
is_simple_term(#c_var{}) -> true;
diff --git a/lib/compiler/src/rec_env.erl b/lib/compiler/src/rec_env.erl
index 936c5f6106..cdc513e57c 100644
--- a/lib/compiler/src/rec_env.erl
+++ b/lib/compiler/src/rec_env.erl
@@ -22,8 +22,7 @@
%% @doc Abstract environments, supporting self-referential bindings and
%% automatic new-key generation.
-%% The current implementation is based on Erlang standard library
-%% dictionaries.
+%% The current implementation is based on Erlang standard library maps.
%%% -define(DEBUG, true).
@@ -62,7 +61,7 @@ test_0(Type, N) ->
io:fwrite("\ncalls: ~w.\n", [get(new_key_calls)]),
io:fwrite("\nretries: ~w.\n", [get(new_key_retries)]),
io:fwrite("\nmax: ~w.\n", [get(new_key_max)]),
- dict:to_list(element(1,Env)).
+ maps:to_list(element(1,Env)).
test_1(integer = Type, N, Env) when is_integer(N), N > 0 ->
Key = new_key(Env),
@@ -80,14 +79,13 @@ test_1(_,0, Env) ->
%%
%% environment() = [Mapping]
%%
-%% Mapping = {map, Dict} | {rec, Dict, Dict}
-%% Dict = dict:dictionary()
+%% Mapping = {map, map()} | {rec, map(), map()}
%%
-%% An empty environment is a list containing a single `{map, Dict}'
+%% An empty environment is a list containing a single `{map, map()}'
%% element - empty lists are not valid environments. To find a key in an
%% environment, it is searched for in each mapping in the list, in
%% order, until it the key is found in some mapping, or the end of the
-%% list is reached. In a 'rec' mapping, we keep the original dictionary
+%% list is reached. In a 'rec' mapping, we keep the original map
%% together with a version where entries may have been deleted - this
%% makes it possible to garbage collect the entire 'rec' mapping when
%% all its entries are unused (for example, by being shadowed by later
@@ -97,7 +95,7 @@ test_1(_,0, Env) ->
%% =====================================================================
%% @type environment(). An abstract environment.
--type mapping() :: {'map', dict:dict()} | {'rec', dict:dict(), dict:dict()}.
+-type mapping() :: {'map', map()} | {'rec', map(), map()}.
-type environment() :: [mapping(),...].
%% =====================================================================
@@ -108,7 +106,7 @@ test_1(_,0, Env) ->
-spec empty() -> environment().
empty() ->
- [{map, dict:new()}].
+ [{map, #{}}].
%% =====================================================================
@@ -119,14 +117,14 @@ empty() ->
-spec is_empty(environment()) -> boolean().
-is_empty([{map, Dict} | Es]) ->
- N = dict:size(Dict),
+is_empty([{map, Map} | Es]) ->
+ N = map_size(Map),
if N =/= 0 -> false;
Es =:= [] -> true;
true -> is_empty(Es)
end;
-is_empty([{rec, Dict, _} | Es]) ->
- N = dict:size(Dict),
+is_empty([{rec, Map, _} | Es]) ->
+ N = map_size(Map),
if N =/= 0 -> false;
Es =:= [] -> true;
true -> is_empty(Es)
@@ -146,12 +144,12 @@ is_empty([{rec, Dict, _} | Es]) ->
size(Env) ->
env_size(Env).
-env_size([{map, Dict}]) ->
- dict:size(Dict);
-env_size([{map, Dict} | Env]) ->
- dict:size(Dict) + env_size(Env);
-env_size([{rec, Dict, _Dict0} | Env]) ->
- dict:size(Dict) + env_size(Env).
+env_size([{map, Map}]) ->
+ map_size(Map);
+env_size([{map, Map} | Env]) ->
+ map_size(Map) + env_size(Env);
+env_size([{rec, Map, _Map0} | Env]) ->
+ map_size(Map) + env_size(Env).
%% =====================================================================
@@ -165,8 +163,8 @@ env_size([{rec, Dict, _Dict0} | Env]) ->
-spec is_defined(term(), environment()) -> boolean().
-is_defined(Key, [{map, Dict} | Env]) ->
- case dict:is_key(Key, Dict) of
+is_defined(Key, [{map, Map} | Env]) ->
+ case maps:is_key(Key, Map) of
true ->
true;
false when Env =:= [] ->
@@ -174,8 +172,8 @@ is_defined(Key, [{map, Dict} | Env]) ->
false ->
is_defined(Key, Env)
end;
-is_defined(Key, [{rec, Dict, _Dict0} | Env]) ->
- dict:is_key(Key, Dict) orelse is_defined(Key, Env).
+is_defined(Key, [{rec, Map, _Map0} | Env]) ->
+ maps:is_key(Key, Map) orelse is_defined(Key, Env).
%% =====================================================================
@@ -188,12 +186,12 @@ is_defined(Key, [{rec, Dict, _Dict0} | Env]) ->
keys(Env) ->
lists:sort(keys(Env, [])).
-keys([{map, Dict}], S) ->
- dict:fetch_keys(Dict) ++ S;
-keys([{map, Dict} | Env], S) ->
- keys(Env, dict:fetch_keys(Dict) ++ S);
-keys([{rec, Dict, _Dict0} | Env], S) ->
- keys(Env, dict:fetch_keys(Dict) ++ S).
+keys([{map, Map}], S) ->
+ maps:keys(Map) ++ S;
+keys([{map, Map} | Env], S) ->
+ keys(Env, maps:keys(Map) ++ S);
+keys([{rec, Map, _Map0} | Env], S) ->
+ keys(Env, maps:keys(Map) ++ S).
%% =====================================================================
@@ -212,12 +210,12 @@ keys([{rec, Dict, _Dict0} | Env], S) ->
to_list(Env) ->
lists:sort(to_list(Env, [])).
-to_list([{map, Dict}], S) ->
- dict:to_list(Dict) ++ S;
-to_list([{map, Dict} | Env], S) ->
- to_list(Env, dict:to_list(Dict) ++ S);
-to_list([{rec, Dict, _Dict0} | Env], S) ->
- to_list(Env, dict:to_list(Dict) ++ S).
+to_list([{map, Map}], S) ->
+ maps:to_list(Map) ++ S;
+to_list([{map, Map} | Env], S) ->
+ to_list(Env, maps:to_list(Map) ++ S);
+to_list([{rec, Map, _Map0} | Env], S) ->
+ to_list(Env, maps:to_list(Map) ++ S).
%% =====================================================================
@@ -236,12 +234,12 @@ to_list([{rec, Dict, _Dict0} | Env], S) ->
-spec bind(term(), term(), environment()) -> environment().
-bind(Key, Value, [{map, Dict}]) ->
- [{map, dict:store(Key, Value, Dict)}];
-bind(Key, Value, [{map, Dict} | Env]) ->
- [{map, dict:store(Key, Value, Dict)} | delete_any(Key, Env)];
+bind(Key, Value, [{map, Map}]) ->
+ [{map, maps:put(Key, Value, Map)}];
+bind(Key, Value, [{map, Map} | Env]) ->
+ [{map, maps:put(Key, Value, Map)} | delete_any(Key, Env)];
bind(Key, Value, Env) ->
- [{map, dict:store(Key, Value, dict:new())} | delete_any(Key, Env)].
+ [{map, maps:put(Key, Value, #{})} | delete_any(Key, Env)].
%% =====================================================================
@@ -259,17 +257,17 @@ bind(Key, Value, Env) ->
-spec bind_list([term()], [term()], environment()) -> environment().
-bind_list(Ks, Vs, [{map, Dict}]) ->
- [{map, store_list(Ks, Vs, Dict)}];
-bind_list(Ks, Vs, [{map, Dict} | Env]) ->
- [{map, store_list(Ks, Vs, Dict)} | delete_list(Ks, Env)];
+bind_list(Ks, Vs, [{map, Map}]) ->
+ [{map, store_list(Ks, Vs, Map)}];
+bind_list(Ks, Vs, [{map, Map} | Env]) ->
+ [{map, store_list(Ks, Vs, Map)} | delete_list(Ks, Env)];
bind_list(Ks, Vs, Env) ->
- [{map, store_list(Ks, Vs, dict:new())} | delete_list(Ks, Env)].
+ [{map, store_list(Ks, Vs, #{})} | delete_list(Ks, Env)].
-store_list([K | Ks], [V | Vs], Dict) ->
- store_list(Ks, Vs, dict:store(K, V, Dict));
-store_list([], _, Dict) ->
- Dict.
+store_list([K | Ks], [V | Vs], Map) ->
+ store_list(Ks, Vs, maps:put(K, V, Map));
+store_list([], _, Map) ->
+ Map.
delete_list([K | Ks], Env) ->
delete_list(Ks, delete_any(K, Env));
@@ -298,48 +296,40 @@ delete_any(Key, Env) ->
-spec delete(term(), environment()) -> environment().
-delete(Key, [{map, Dict} = E | Env]) ->
- case dict:is_key(Key, Dict) of
- true ->
- [{map, dict:erase(Key, Dict)} | Env];
- false ->
+delete(Key, [{map, Map} = E | Env]) ->
+ case maps:take(Key, Map) of
+ {_, Map1} ->
+ [{map, Map1} | Env];
+ error ->
delete_1(Key, Env, E)
end;
-delete(Key, [{rec, Dict, Dict0} = E | Env]) ->
- case dict:is_key(Key, Dict) of
- true ->
- %% The Dict0 component must be preserved as it is until all
- %% keys in Dict have been deleted.
- Dict1 = dict:erase(Key, Dict),
- case dict:size(Dict1) of
- 0 ->
- Env; % the whole {rec,...} is now garbage
- _ ->
- [{rec, Dict1, Dict0} | Env]
- end;
- false ->
+delete(Key, [{rec, Map, Map0} = E | Env]) ->
+ case maps:take(Key, Map) of
+ {_, Map1} when map_size(Map1) =:= 0 ->
+ Env; % the whole {rec,...} is now garbage
+ %% The Map0 component must be preserved as it is until all
+ %% keys in Map have been deleted.
+ {_, Map1} ->
+ [{rec, Map1, Map0} | Env];
+ error ->
[E | delete(Key, Env)]
end.
%% This is just like above, except we pass on the preceding 'map'
%% mapping in the list to enable merging when removing 'rec' mappings.
-delete_1(Key, [{rec, Dict, Dict0} = E | Env], E1) ->
- case dict:is_key(Key, Dict) of
- true ->
- Dict1 = dict:erase(Key, Dict),
- case dict:size(Dict1) of
- 0 ->
- concat(E1, Env);
- _ ->
- [E1, {rec, Dict1, Dict0} | Env]
- end;
- false ->
+delete_1(Key, [{rec, Map, Map0} = E | Env], E1) ->
+ case maps:take(Key, Map) of
+ {_, Map1} when map_size(Map1) =:= 0 ->
+ concat(E1, Env);
+ {_, Map1} ->
+ [E1, {rec, Map1, Map0} | Env];
+ error ->
[E1, E | delete(Key, Env)]
end.
-concat({map, D1}, [{map, D2} | Env]) ->
- [dict:merge(fun (_K, V1, _V2) -> V1 end, D1, D2) | Env];
+concat({map, M1}, [{map, M2} | Env]) ->
+ [maps:merge(M2, M1) | Env];
concat(E1, Env) ->
[E1 | Env].
@@ -392,15 +382,15 @@ bind_recursive([], [], _, Env) ->
Env;
bind_recursive(Ks, Vs, F, Env) ->
F1 = fun (V) ->
- fun (Dict) -> F(V, [{rec, Dict, Dict} | Env]) end
+ fun (Map) -> F(V, [{rec, Map, Map} | Env]) end
end,
- Dict = bind_recursive_1(Ks, Vs, F1, dict:new()),
- [{rec, Dict, Dict} | Env].
+ Map = bind_recursive_1(Ks, Vs, F1, #{}),
+ [{rec, Map, Map} | Env].
-bind_recursive_1([K | Ks], [V | Vs], F, Dict) ->
- bind_recursive_1(Ks, Vs, F, dict:store(K, F(V), Dict));
-bind_recursive_1([], [], _, Dict) ->
- Dict.
+bind_recursive_1([K | Ks], [V | Vs], F, Map) ->
+ bind_recursive_1(Ks, Vs, F, maps:put(K, F(V), Map));
+bind_recursive_1([], [], _, Map) ->
+ Map.
%% =====================================================================
@@ -416,8 +406,8 @@ bind_recursive_1([], [], _, Dict) ->
-spec lookup(term(), environment()) -> 'error' | {'ok', term()}.
-lookup(Key, [{map, Dict} | Env]) ->
- case dict:find(Key, Dict) of
+lookup(Key, [{map, Map} | Env]) ->
+ case maps:find(Key, Map) of
{ok, _}=Value ->
Value;
error when Env =:= [] ->
@@ -425,10 +415,10 @@ lookup(Key, [{map, Dict} | Env]) ->
error ->
lookup(Key, Env)
end;
-lookup(Key, [{rec, Dict, Dict0} | Env]) ->
- case dict:find(Key, Dict) of
+lookup(Key, [{rec, Map, Map0} | Env]) ->
+ case maps:find(Key, Map) of
{ok, F} ->
- {ok, F(Dict0)};
+ {ok, F(Map0)};
error ->
lookup(Key, Env)
end.
diff --git a/lib/compiler/src/sys_core_fold.erl b/lib/compiler/src/sys_core_fold.erl
index b5b8d8a8ec..08b02101a6 100644
--- a/lib/compiler/src/sys_core_fold.erl
+++ b/lib/compiler/src/sys_core_fold.erl
@@ -374,10 +374,21 @@ expr(#c_receive{clauses=Cs0,timeout=T0,action=A0}=Recv, Ctxt, Sub) ->
T1 = expr(T0, value, Sub),
A1 = body(A0, Ctxt, Sub),
Recv#c_receive{clauses=Cs1,timeout=T1,action=A1};
-expr(#c_apply{op=Op0,args=As0}=App, _, Sub) ->
+expr(#c_apply{anno=Anno,op=Op0,args=As0}=App, _, Sub) ->
Op1 = expr(Op0, value, Sub),
As1 = expr_list(As0, value, Sub),
- App#c_apply{op=Op1,args=As1};
+ case Op1 of
+ #c_var{} ->
+ App#c_apply{op=Op1,args=As1};
+ _ ->
+ add_warning(App, invalid_call),
+ Err = #c_call{anno=Anno,
+ module=#c_literal{val=erlang},
+ name=#c_literal{val=error},
+ args=[#c_tuple{es=[#c_literal{val='badfun'},
+ Op1]}]},
+ make_effect_seq(As1++[Err], Sub)
+ end;
expr(#c_call{module=M0,name=N0}=Call0, Ctxt, Sub) ->
M1 = expr(M0, value, Sub),
N1 = expr(N0, value, Sub),
@@ -457,7 +468,8 @@ bitstr(#c_bitstr{val=Val,size=Size}=BinSeg, Sub) ->
%% Currently, we don't attempt to check binaries because they
%% are difficult to check.
-is_safe_simple(#c_var{}, _) -> true;
+is_safe_simple(#c_var{}=Var, _) ->
+ not cerl:is_c_fname(Var);
is_safe_simple(#c_cons{hd=H,tl=T}, Sub) ->
is_safe_simple(H, Sub) andalso is_safe_simple(T, Sub);
is_safe_simple(#c_tuple{es=Es}, Sub) -> is_safe_simple_list(Es, Sub);
@@ -775,7 +787,7 @@ fold_lit_args(Call, Module, Name, Args0) ->
Val ->
case cerl:is_literal_term(Val) of
true ->
- cerl:abstract(Val);
+ cerl:ann_abstract(cerl:get_ann(Call), Val);
false ->
%% Successful evaluation, but it was not possible
%% to express the computed value as a literal.
@@ -2165,24 +2177,22 @@ opt_not_in_let_1(V, Call, Body) ->
#c_call{module=#c_literal{val=erlang},
name=#c_literal{val='not'},
args=[#c_var{name=V}]} ->
- opt_not_in_let_2(Body);
+ opt_not_in_let_2(Body, Call);
_ ->
no
end.
-opt_not_in_let_2(#c_case{clauses=Cs0}=Case) ->
+opt_not_in_let_2(#c_case{clauses=Cs0}=Case, NotCall) ->
Vars = make_vars([], 1),
- Body = #c_call{module=#c_literal{val=erlang},
- name=#c_literal{val='not'},
- args=Vars},
+ Body = NotCall#c_call{args=Vars},
Cs = [begin
Let = #c_let{vars=Vars,arg=B,body=Body},
C#c_clause{body=opt_not_in_let(Let)}
end || #c_clause{body=B}=C <- Cs0],
{yes,Case#c_case{clauses=Cs}};
-opt_not_in_let_2(#c_call{}=Call0) ->
+opt_not_in_let_2(#c_call{}=Call0, _NotCall) ->
invert_call(Call0);
-opt_not_in_let_2(_) -> no.
+opt_not_in_let_2(_, _) -> no.
invert_call(#c_call{module=#c_literal{val=erlang},
name=#c_literal{val=Name0},
@@ -3395,6 +3405,8 @@ format_error({no_effect,{erlang,F,A}}) ->
format_error(result_ignored) ->
"the result of the expression is ignored "
"(suppress the warning by assigning the expression to the _ variable)";
+format_error(invalid_call) ->
+ "invalid function call";
format_error(useless_building) ->
"a term is constructed, but never used";
format_error(bin_opt_alias) ->
diff --git a/lib/compiler/src/v3_codegen.erl b/lib/compiler/src/v3_codegen.erl
index f531056591..4df1aadd0a 100644
--- a/lib/compiler/src/v3_codegen.erl
+++ b/lib/compiler/src/v3_codegen.erl
@@ -1089,6 +1089,23 @@ protected_cg(Ts, Rs, _Fail, I, Vdb, Bef, St0) ->
%% test_cg(TestName, Args, Fail, I, Vdb, Bef, St) -> {[Ainstr],Aft,St}.
%% Generate test instruction. Use explicit fail label here.
+test_cg(is_map, [A], Fail, I, Vdb, Bef, St) ->
+ %% We must avoid creating code like this:
+ %%
+ %% move x(0) y(0)
+ %% is_map Fail [x(0)]
+ %% make_fun => x(0) %% Overwrite x(0)
+ %% put_map_assoc y(0) ...
+ %%
+ %% The code is safe, but beam_validator does not understand that.
+ %% Extending beam_validator to handle such (rare) code as the
+ %% above would make it slower for all programs. Instead, change
+ %% the code generator to always prefer the Y register for is_map()
+ %% and put_map_assoc() instructions, ensuring that they use the
+ %% same register.
+ Arg = cg_reg_arg_prefer_y(A, Bef),
+ Aft = clear_dead(Bef, I, Vdb),
+ {[{test,is_map,{f,Fail},[Arg]}],Aft,St};
test_cg(Test, As, Fail, I, Vdb, Bef, St) ->
Args = cg_reg_args(As, Bef),
Aft = clear_dead(Bef, I, Vdb),
@@ -1155,19 +1172,15 @@ call_cg(Func, As, Rs, Le, Vdb, Bef, St0) ->
%% Inside a guard. The only allowed function call is to
%% erlang:error/1,2. We will generate the following code:
%%
- %% jump FailureLabel
%% move {atom,ok} DestReg
- %%
- %% The 'move' instruction will never be executed, but we
- %% generate it anyway in case the beam_validator is run
- %% on unoptimized code.
+ %% jump FailureLabel
{remote,{atom,erlang},{atom,error}} = Func, %Assertion.
[{var,DestVar}] = Rs,
Int0 = clear_dead(Bef, Le#l.i, Vdb),
Reg = put_reg(DestVar, Int0#sr.reg),
Int = Int0#sr{reg=Reg},
Dst = fetch_reg(DestVar, Reg),
- {[{jump,{f,Fail}},{move,{atom,ok},Dst}],
+ {[{move,{atom,ok},Dst},{jump,{f,Fail}}],
clear_dead(Int, Le#l.i, Vdb),St0};
#cg{} ->
%% Ordinary function call in a function body.
@@ -1538,14 +1551,12 @@ set_cg([{var,R}], {binary,Segs}, Le, Vdb, Bef, #cg{bfail=Bfail}=St) ->
%% Now generate the complete code for constructing the binary.
Code = cg_binary(PutCode, Target, Temp, Fail, MaxRegs, Le#l.a),
{Sis++Code,Aft,St};
-% Map single variable key
-set_cg([{var,R}], {map,Op,Map,[{map_pair,{var,_}=K,V}]}, Le, Vdb, Bef,
- #cg{bfail=Bfail}=St) ->
- Fail = {f,Bfail},
- {Sis,Int0} = maybe_adjust_stack(Bef, Le#l.i, Le#l.i+1, Vdb, St),
+%% Map: single variable key.
+set_cg([{var,R}], {map,Op,Map,[{map_pair,{var,_}=K,V}]}, Le, Vdb, Bef, St0) ->
+ {Sis,Int0} = maybe_adjust_stack(Bef, Le#l.i, Le#l.i+1, Vdb, St0),
- SrcReg = cg_reg_arg(Map,Int0),
+ SrcReg = cg_reg_arg_prefer_y(Map, Int0),
Line = line(Le#l.a),
List = [cg_reg_arg(K,Int0),cg_reg_arg(V,Int0)],
@@ -1557,22 +1568,17 @@ set_cg([{var,R}], {map,Op,Map,[{map_pair,{var,_}=K,V}]}, Le, Vdb, Bef,
Aft = Aft0#sr{reg=put_reg(R, Aft0#sr.reg)},
Target = fetch_reg(R, Aft#sr.reg),
- I = case Op of
- assoc -> put_map_assoc;
- exact -> put_map_exact
- end,
- {Sis++[Line]++[{I,Fail,SrcReg,Target,Live,{list,List}}],Aft,St};
+ {Is,St1} = set_cg_map(Line, Op, SrcReg, Target, Live, List, St0),
+ {Sis++Is,Aft,St1};
-% Map (possibly) multiple literal keys
-set_cg([{var,R}], {map,Op,Map,Es}, Le, Vdb, Bef,
- #cg{bfail=Bfail}=St) ->
+%% Map: (possibly) multiple literal keys.
+set_cg([{var,R}], {map,Op,Map,Es}, Le, Vdb, Bef, St0) ->
%% assert key literals
[] = [Var||{map_pair,{var,_}=Var,_} <- Es],
- Fail = {f,Bfail},
- {Sis,Int0} = maybe_adjust_stack(Bef, Le#l.i, Le#l.i+1, Vdb, St),
- SrcReg = cg_reg_arg(Map,Int0),
+ {Sis,Int0} = maybe_adjust_stack(Bef, Le#l.i, Le#l.i+1, Vdb, St0),
+ SrcReg = cg_reg_arg_prefer_y(Map, Int0),
Line = line(Le#l.a),
%% fetch registers for values to be put into the map
@@ -1586,11 +1592,10 @@ set_cg([{var,R}], {map,Op,Map,Es}, Le, Vdb, Bef,
Aft = Aft0#sr{reg=put_reg(R, Aft0#sr.reg)},
Target = fetch_reg(R, Aft#sr.reg),
- I = case Op of
- assoc -> put_map_assoc;
- exact -> put_map_exact
- end,
- {Sis++[Line]++[{I,Fail,SrcReg,Target,Live,{list,List}}],Aft,St};
+ {Is,St1} = set_cg_map(Line, Op, SrcReg, Target, Live, List, St0),
+ {Sis++Is,Aft,St1};
+
+%% Everything else.
set_cg([{var,R}], Con, Le, Vdb, Bef, St) ->
%% Find a place for the return register first.
Int = Bef#sr{reg=put_reg(R, Bef#sr.reg)},
@@ -1603,6 +1608,34 @@ set_cg([{var,R}], Con, Le, Vdb, Bef, St) ->
end,
{Ais,clear_dead(Int, Le#l.i, Vdb),St}.
+
+set_cg_map(Line, Op0, SrcReg, Target, Live, List, St0) ->
+ Bfail = St0#cg.bfail,
+ Fail = {f,St0#cg.bfail},
+ Op = case Op0 of
+ assoc -> put_map_assoc;
+ exact -> put_map_exact
+ end,
+ {OkLbl,St1} = new_label(St0),
+ {BadLbl,St2} = new_label(St1),
+ Is = if
+ Bfail =:= 0 orelse Op =:= put_map_assoc ->
+ [Line,{Op,{f,0},SrcReg,Target,Live,{list,List}}];
+ true ->
+ %% Ensure that Target is always set, even if
+ %% the map update operation fails. That is necessary
+ %% because Target may be included in a test_heap
+ %% instruction.
+ [Line,
+ {Op,{f,BadLbl},SrcReg,Target,Live,{list,List}},
+ {jump,{f,OkLbl}},
+ {label,BadLbl},
+ {move,{atom,ok},Target},
+ {jump,Fail},
+ {label,OkLbl}]
+ end,
+ {Is,St2}.
+
%%%
%%% Code generation for constructing binaries.
%%%
@@ -1845,6 +1878,9 @@ cg_reg_args(As, Bef) -> [cg_reg_arg(A, Bef) || A <- As].
cg_reg_arg({var,V}, Bef) -> fetch_var(V, Bef);
cg_reg_arg(Literal, _) -> Literal.
+cg_reg_arg_prefer_y({var,V}, Bef) -> fetch_var_prefer_y(V, Bef);
+cg_reg_arg_prefer_y(Literal, _) -> Literal.
+
%% cg_setup_call([Arg], Bef, Cur, Vdb) -> {[Instr],Aft}.
%% Do the complete setup for a call/enter.
@@ -2086,6 +2122,12 @@ fetch_var(V, Sr) ->
error -> fetch_stack(V, Sr#sr.stk)
end.
+fetch_var_prefer_y(V, #sr{reg=Reg,stk=Stk}) ->
+ case find_stack(V, Stk) of
+ {ok,R} -> R;
+ error -> fetch_reg(V, Reg)
+ end.
+
load_vars(Vs, Regs) ->
foldl(fun ({var,V}, Rs) -> put_reg(V, Rs) end, Regs, Vs).
@@ -2159,11 +2201,11 @@ fetch_stack(Var, Stk) -> fetch_stack(Var, Stk, 0).
fetch_stack(V, [{V}|_], I) -> {yy,I};
fetch_stack(V, [_|Stk], I) -> fetch_stack(V, Stk, I+1).
-% find_stack(Var, Stk) -> find_stack(Var, Stk, 0).
+find_stack(Var, Stk) -> find_stack(Var, Stk, 0).
-% find_stack(V, [{V}|Stk], I) -> {ok,{yy,I}};
-% find_stack(V, [O|Stk], I) -> find_stack(V, Stk, I+1);
-% find_stack(V, [], I) -> error.
+find_stack(V, [{V}|_], I) -> {ok,{yy,I}};
+find_stack(V, [_|Stk], I) -> find_stack(V, Stk, I+1);
+find_stack(_, [], _) -> error.
on_stack(V, Stk) -> keymember(V, 1, Stk).
diff --git a/lib/compiler/src/v3_core.erl b/lib/compiler/src/v3_core.erl
index 83b3650180..d71411de80 100644
--- a/lib/compiler/src/v3_core.erl
+++ b/lib/compiler/src/v3_core.erl
@@ -510,16 +510,8 @@ unforce(_, Vs) -> Vs.
exprs([E0|Es0], St0) ->
{E1,Eps,St1} = expr(E0, St0),
- case E1 of
- #iprimop{name=#c_literal{val=match_fail}} ->
- %% Must discard the rest of the body, because it
- %% may refer to variables that have not been bound.
- %% Example: {ok={error,E}} = foo(), E.
- {Eps ++ [E1],St1};
- _ ->
- {Es1,St2} = exprs(Es0, St1),
- {Eps ++ [E1] ++ Es1,St2}
- end;
+ {Es1,St2} = exprs(Es0, St1),
+ {Eps ++ [E1] ++ Es1,St2};
exprs([], St) -> {[],St}.
%% expr(Expr, State) -> {Cexpr,[PreExp],State}.
@@ -689,14 +681,36 @@ expr({match,L,P0,E0}, St0) ->
Fc = fail_clause([Fpat], Lanno, c_tuple([#c_literal{val=badmatch},Fpat])),
case P2 of
nomatch ->
+ %% The pattern will not match. We must take care here to
+ %% bind all variables that the pattern would have bound
+ %% so that subsequent expressions do not refer to unbound
+ %% variables.
+ %%
+ %% As an example, this code:
+ %%
+ %% [X] = {Y} = E,
+ %% X + Y.
+ %%
+ %% will be rewritten to:
+ %%
+ %% error({badmatch,E}),
+ %% case E of
+ %% {[X],{Y}} ->
+ %% X + Y;
+ %% Other ->
+ %% error({badmatch,Other})
+ %% end.
+ %%
St6 = add_warning(L, nomatch, St5),
- {Expr,Eps3,St} = safe(E1, St6),
- Eps = Eps1 ++ Eps2 ++ Eps3,
+ {Expr,Eps3,St7} = safe(E1, St6),
+ SanPat0 = sanitize(P1),
+ {SanPat,Eps4,St} = pattern(SanPat0, St7),
Badmatch = c_tuple([#c_literal{val=badmatch},Expr]),
Fail = #iprimop{anno=#a{anno=Lanno},
name=#c_literal{val=match_fail},
args=[Badmatch]},
- {Fail,Eps,St};
+ Eps = Eps3 ++ Eps4 ++ [Fail],
+ {#imatch{anno=#a{anno=Lanno},pat=SanPat,arg=Expr,fc=Fc},Eps,St};
Other when not is_atom(Other) ->
{#imatch{anno=#a{anno=Lanno},pat=P2,arg=E2,fc=Fc},Eps1++Eps2,St5}
end;
@@ -738,6 +752,32 @@ expr({op,L,Op,L0,R0}, St0) ->
module=#c_literal{anno=LineAnno,val=erlang},
name=#c_literal{anno=LineAnno,val=Op},args=As},Aps,St1}.
+
+%% sanitize(Pat) -> SanitizedPattern
+%% Rewrite Pat so that it will be accepted by pattern/2 and will
+%% bind the same variables as the original pattern.
+%%
+%% Here is an example of a pattern that would cause a pattern/2
+%% to generate a 'nomatch' exception:
+%%
+%% #{k:=X,k:=Y} = [Z]
+%%
+%% The sanitized pattern will look like:
+%%
+%% {{X,Y},[Z]}
+
+sanitize({match,L,P1,P2}) ->
+ {tuple,L,[sanitize(P1),sanitize(P2)]};
+sanitize({cons,L,H,T}) ->
+ {cons,L,sanitize(H),sanitize(T)};
+sanitize({tuple,L,Ps0}) ->
+ Ps = [sanitize(P) || P <- Ps0],
+ {tuple,L,Ps};
+sanitize({map,L,Ps0}) ->
+ Ps = [sanitize(V) || {map_field_exact,_,_,V} <- Ps0],
+ {tuple,L,Ps};
+sanitize(P) -> P.
+
make_bool_switch(L, E, V, T, F, #core{in_guard=true}) ->
make_bool_switch_guard(L, E, V, T, F);
make_bool_switch(L, E, V, T, F, #core{}) ->
@@ -828,12 +868,16 @@ try_exception(Ecs0, St0) ->
{Evs,St1} = new_vars(3, St0), % Tag, Value, Info
{Ecs1,Ceps,St2} = clauses(Ecs0, St1),
[_,Value,Info] = Evs,
- Ec = #iclause{anno=#a{anno=[compiler_generated]},
+ LA = case Ecs1 of
+ [] -> [];
+ [C|_] -> get_lineno_anno(C)
+ end,
+ Ec = #iclause{anno=#a{anno=[compiler_generated|LA]},
pats=[c_tuple(Evs)],guard=[#c_literal{val=true}],
body=[#iprimop{anno=#a{}, %Must have an #a{}
name=#c_literal{val=raise},
args=[Info,Value]}]},
- Hs = [#icase{anno=#a{},args=[c_tuple(Evs)],clauses=Ecs1,fc=Ec}],
+ Hs = [#icase{anno=#a{anno=LA},args=[c_tuple(Evs)],clauses=Ecs1,fc=Ec}],
{Evs,Ceps++Hs,St2}.
try_after(As, St0) ->
@@ -2058,7 +2102,8 @@ upattern(#c_var{name=V}=Var, Ks, St0) ->
true ->
{N,St1} = new_var_name(St0),
New = #c_var{name=N},
- Test = #icall{anno=#a{us=add_element(N, [V])},
+ LA = get_lineno_anno(Var),
+ Test = #icall{anno=#a{anno=LA,us=add_element(N, [V])},
module=#c_literal{val=erlang},
name=#c_literal{val='=:='},
args=[New,Var]},
diff --git a/lib/compiler/src/v3_kernel.erl b/lib/compiler/src/v3_kernel.erl
index 402e3c4912..b4bbc5e739 100644
--- a/lib/compiler/src/v3_kernel.erl
+++ b/lib/compiler/src/v3_kernel.erl
@@ -242,7 +242,7 @@ gexpr_test_add(Ke, St0) ->
expr(#c_var{anno=A,name={_Name,Arity}}=Fname, Sub, St) ->
%% A local in an expression.
%% For now, these are wrapped into a fun by reverse
- %% etha-conversion, but really, there should be exactly one
+ %% eta-conversion, but really, there should be exactly one
%% such "lambda function" for each escaping local name,
%% instead of one for each occurrence as done now.
Vs = [#c_var{name=list_to_atom("V" ++ integer_to_list(V))} ||
diff --git a/lib/compiler/test/Makefile b/lib/compiler/test/Makefile
index 85118502e3..f0185acbc7 100644
--- a/lib/compiler/test/Makefile
+++ b/lib/compiler/test/Makefile
@@ -9,12 +9,15 @@ MODULES= \
andor_SUITE \
apply_SUITE \
beam_block_SUITE \
+ beam_bool_SUITE \
beam_validator_SUITE \
beam_disasm_SUITE \
beam_except_SUITE \
+ beam_jump_SUITE \
beam_reorder_SUITE \
beam_type_SUITE \
beam_utils_SUITE \
+ bif_SUITE \
bs_bincomp_SUITE \
bs_bit_binaries_SUITE \
bs_construct_SUITE \
@@ -46,10 +49,13 @@ NO_OPT= \
andor \
apply \
beam_block \
+ beam_bool \
beam_except \
+ beam_jump \
beam_reorder \
beam_type \
beam_utils \
+ bif \
bs_construct \
bs_match \
bs_utf \
@@ -70,6 +76,7 @@ INLINE= \
andor \
apply \
beam_block \
+ beam_bool \
beam_utils \
bs_bincomp \
bs_bit_binaries \
diff --git a/lib/compiler/test/andor_SUITE.erl b/lib/compiler/test/andor_SUITE.erl
index f6e7b09010..05c087104d 100644
--- a/lib/compiler/test/andor_SUITE.erl
+++ b/lib/compiler/test/andor_SUITE.erl
@@ -22,8 +22,7 @@
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
t_case/1,t_and_or/1,t_andalso/1,t_orelse/1,inside/1,overlap/1,
- combined/1,in_case/1,before_and_inside_if/1,
- slow_compilation/1]).
+ combined/1,in_case/1,slow_compilation/1]).
-include_lib("common_test/include/ct.hrl").
@@ -36,7 +35,7 @@ all() ->
groups() ->
[{p,[parallel],
[t_case,t_and_or,t_andalso,t_orelse,inside,overlap,
- combined,in_case,before_and_inside_if]}].
+ combined,in_case,slow_compilation]}].
init_per_suite(Config) ->
Config.
@@ -450,64 +449,6 @@ in_case_1_guard(LenUp, LenDw, LenN, Rotation, Count) ->
false -> loop
end.
-before_and_inside_if(Config) when is_list(Config) ->
- no = before_and_inside_if([a], [b], delete),
- no = before_and_inside_if([a], [b], x),
- no = before_and_inside_if([a], [], delete),
- no = before_and_inside_if([a], [], x),
- no = before_and_inside_if([], [], delete),
- yes = before_and_inside_if([], [], x),
- yes = before_and_inside_if([], [b], delete),
- yes = before_and_inside_if([], [b], x),
-
- {ch1,ch2} = before_and_inside_if_2([a], [b], blah),
- {ch1,ch2} = before_and_inside_if_2([a], [b], xx),
- {ch1,ch2} = before_and_inside_if_2([a], [], blah),
- {ch1,ch2} = before_and_inside_if_2([a], [], xx),
- {no,no} = before_and_inside_if_2([], [b], blah),
- {no,no} = before_and_inside_if_2([], [b], xx),
- {ch1,no} = before_and_inside_if_2([], [], blah),
- {no,ch2} = before_and_inside_if_2([], [], xx),
- ok.
-
-%% Thanks to Simon Cornish and Kostis Sagonas.
-%% Used to crash beam_bool.
-before_and_inside_if(XDo1, XDo2, Do3) ->
- Do1 = (XDo1 =/= []),
- Do2 = (XDo2 =/= []),
- if
- %% This expression occurs in a try/catch (protected)
- %% block, which cannot refer to variables outside of
- %% the block that are boolean expressions.
- Do1 =:= true;
- Do1 =:= false, Do2 =:= false, Do3 =:= delete ->
- no;
- true ->
- yes
- end.
-
-%% Thanks to Simon Cornish.
-%% Used to generate code that would not set {y,0} on
-%% all paths before its use (and therefore fail
-%% validation by the beam_validator).
-before_and_inside_if_2(XDo1, XDo2, Do3) ->
- Do1 = (XDo1 =/= []),
- Do2 = (XDo2 =/= []),
- CH1 = if Do1 == true;
- Do1 == false,Do2==false,Do3 == blah ->
- ch1;
- true ->
- no
- end,
- CH2 = if Do1 == true;
- Do1 == false,Do2==false,Do3 == xx ->
- ch2;
- true ->
- no
- end,
- {CH1,CH2}.
-
-
-record(state, {stack = []}).
slow_compilation(_) ->
diff --git a/lib/compiler/test/beam_block_SUITE.erl b/lib/compiler/test/beam_block_SUITE.erl
index 81f8d10687..9fcb6e497d 100644
--- a/lib/compiler/test/beam_block_SUITE.erl
+++ b/lib/compiler/test/beam_block_SUITE.erl
@@ -21,7 +21,8 @@
-export([all/0,suite/0,groups/0,init_per_suite/1,end_per_suite/1,
init_per_group/2,end_per_group/2,
- get_map_elements/1,otp_7345/1]).
+ get_map_elements/1,otp_7345/1,move_opt_across_gc_bif/1,
+ erl_202/1]).
%% The only test for the following functions is that
%% the code compiles and is accepted by beam_validator.
@@ -35,7 +36,10 @@ all() ->
groups() ->
[{p,[parallel],
- [get_map_elements
+ [get_map_elements,
+ otp_7345,
+ move_opt_across_gc_bif,
+ erl_202
]}].
init_per_suite(Config) ->
@@ -117,6 +121,43 @@ otp_7345(ObjRef, _RdEnv, Args) ->
10},
id(LlUnitdataReq).
+
+%% Doing move optimizations across GC bifs are in general not safe.
+move_opt_across_gc_bif(_Config) ->
+ [0,true,1] = positive(speaking),
+ ok.
+
+positive(speaking) ->
+ try
+ Positive = 0,
+ [+Positive, case Positive of _ -> true end, paris([], Positive)]
+ after
+ mailing
+ end.
+
+paris([], P) -> P + 1.
+
+
+%% See https://bugs.erlang.org/browse/ERL-202.
+%% Test that move_allocates/1 in beam_block doesn't move allocate
+%% when it would not be safe.
+
+-record(erl_202_r1, {y}).
+-record(erl_202_r2, {x}).
+
+erl_202(_Config) ->
+ Ref = make_ref(),
+ Ref = erl_202({{1,2},Ref}, 42),
+
+ {Ref} = erl_202({7,8}, #erl_202_r1{y=#erl_202_r2{x=Ref}}),
+
+ ok.
+
+erl_202({{_, _},X}, _) ->
+ X;
+erl_202({_, _}, #erl_202_r1{y=R2}) ->
+ {R2#erl_202_r2.x}.
+
%%%
%%% The only test of the following code is that it compiles.
%%%
diff --git a/lib/compiler/test/beam_bool_SUITE.erl b/lib/compiler/test/beam_bool_SUITE.erl
new file mode 100644
index 0000000000..e585eaedb5
--- /dev/null
+++ b/lib/compiler/test/beam_bool_SUITE.erl
@@ -0,0 +1,197 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2015-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(beam_bool_SUITE).
+
+-export([all/0,suite/0,groups/0,init_per_suite/1,end_per_suite/1,
+ init_per_group/2,end_per_group/2,
+ before_and_inside_if/1,
+ scotland/1,y_registers/1,protected/1,
+ maps/1]).
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
+
+all() ->
+ test_lib:recompile(?MODULE),
+ [{group,p}].
+
+groups() ->
+ [{p,[parallel],
+ [before_and_inside_if,
+ scotland,
+ y_registers,
+ protected,
+ maps
+ ]}].
+
+init_per_suite(Config) ->
+ Config.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_group(_GroupName, Config) ->
+ Config.
+
+end_per_group(_GroupName, Config) ->
+ Config.
+
+before_and_inside_if(_Config) ->
+ no = before_and_inside_if([a], [b], delete),
+ no = before_and_inside_if([a], [b], x),
+ no = before_and_inside_if([a], [], delete),
+ no = before_and_inside_if([a], [], x),
+ no = before_and_inside_if([], [], delete),
+ yes = before_and_inside_if([], [], x),
+ yes = before_and_inside_if([], [b], delete),
+ yes = before_and_inside_if([], [b], x),
+
+ {ch1,ch2} = before_and_inside_if_2([a], [b], blah),
+ {ch1,ch2} = before_and_inside_if_2([a], [b], xx),
+ {ch1,ch2} = before_and_inside_if_2([a], [], blah),
+ {ch1,ch2} = before_and_inside_if_2([a], [], xx),
+ {no,no} = before_and_inside_if_2([], [b], blah),
+ {no,no} = before_and_inside_if_2([], [b], xx),
+ {ch1,no} = before_and_inside_if_2([], [], blah),
+ {no,ch2} = before_and_inside_if_2([], [], xx),
+ ok.
+
+%% Thanks to Simon Cornish and Kostis Sagonas.
+%% Used to crash beam_bool.
+before_and_inside_if(XDo1, XDo2, Do3) ->
+ Do1 = (XDo1 =/= []),
+ Do2 = (XDo2 =/= []),
+ if
+ %% This expression occurs in a try/catch (protected)
+ %% block, which cannot refer to variables outside of
+ %% the block that are boolean expressions.
+ Do1 =:= true;
+ Do1 =:= false, Do2 =:= false, Do3 =:= delete ->
+ no;
+ true ->
+ yes
+ end.
+
+%% Thanks to Simon Cornish.
+%% Used to generate code that would not set {y,0} on
+%% all paths before its use (and therefore fail
+%% validation by the beam_validator).
+before_and_inside_if_2(XDo1, XDo2, Do3) ->
+ Do1 = (XDo1 =/= []),
+ Do2 = (XDo2 =/= []),
+ CH1 = if Do1 == true;
+ Do1 == false,Do2==false,Do3 == blah ->
+ ch1;
+ true ->
+ no
+ end,
+ CH2 = if Do1 == true;
+ Do1 == false,Do2==false,Do3 == xx ->
+ ch2;
+ true ->
+ no
+ end,
+ {CH1,CH2}.
+
+
+%% beam_bool would remove the initialization of {y,0}.
+%% (Thanks to Thomas Arts and QuickCheck.)
+
+scotland(_Config) ->
+ million = do_scotland(placed),
+ {'EXIT',{{badmatch,placed},_}} = (catch do_scotland(false)),
+ {'EXIT',{{badmatch,placed},_}} = (catch do_scotland(true)),
+ {'EXIT',{{badmatch,placed},_}} = (catch do_scotland(echo)),
+ ok.
+
+do_scotland(Echo) ->
+ found(case Echo of
+ Echo when true; Echo, Echo, Echo ->
+ Echo;
+ echo ->
+ []
+ end,
+ Echo = placed).
+
+found(_, _) -> million.
+
+
+%% ERL-143: beam_bool could not handle Y registers as a destination.
+y_registers(_Config) ->
+ {'EXIT',{badarith,[_|_]}} = (catch baker(valentine)),
+ {'EXIT',{badarith,[_|_]}} = (catch baker(clementine)),
+
+ {not_ok,true} = potter([]),
+ {ok,false} = potter([{encoding,any}]),
+
+ ok.
+
+%% Thanks to Quickcheck.
+baker(Baker) ->
+ (valentine == Baker) +
+ case Baker of
+ Baker when Baker; Baker ->
+ Baker;
+ Baker ->
+ []
+ end.
+
+%% Thanks to Jose Valim.
+potter(Modes) ->
+ Raw = lists:keyfind(encoding, 1, Modes) == false,
+ Final = case Raw of
+ X when X == false; X == nil -> ok;
+ _ -> not_ok
+ end,
+ {Final,Raw}.
+
+protected(_Config) ->
+ {'EXIT',{if_clause,_}} = (catch photographs({1, surprise, true}, opinions)),
+
+ {{true}} = welcome({perfect, true}),
+ {'EXIT',{if_clause,_}} = (catch welcome({perfect, false})),
+ ok.
+
+photographs({_Violation, surprise, Deep}, opinions) ->
+ {if
+ 0; "here", Deep ->
+ Deep = Deep
+ end}.
+
+welcome({perfect, Profit}) ->
+ if
+ Profit, Profit, Profit; 0 ->
+ {id({Profit})}
+ end.
+
+maps(_Config) ->
+ ok = evidence(#{0 => 42}).
+
+%% Cover handling of put_map in in split_block_label_used/2.
+evidence(#{0 := Charge}) when 0; #{[] => Charge} == #{[] => 42} ->
+ ok.
+
+
+%%%
+%%% Common utilities.
+%%%
+
+id(I) ->
+ I.
diff --git a/lib/compiler/test/beam_except_SUITE.erl b/lib/compiler/test/beam_except_SUITE.erl
index 8746e62fb9..47367d6eab 100644
--- a/lib/compiler/test/beam_except_SUITE.erl
+++ b/lib/compiler/test/beam_except_SUITE.erl
@@ -21,15 +21,18 @@
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
- coverage/1]).
+ multiple_allocs/1,coverage/1]).
suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
- [coverage].
+ test_lib:recompile(?MODULE),
+ [{group,p}].
groups() ->
- [].
+ [{p,[parallel],
+ [multiple_allocs,
+ coverage]}].
init_per_suite(Config) ->
Config.
@@ -43,6 +46,23 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
+multiple_allocs(_Config) ->
+ {'EXIT',{{badmatch,#{true:=[p]}},_}} =
+ (catch could(pda, 0.0, {false,true}, {p})),
+ {'EXIT',{function_clause,_}} = (catch place(lee)),
+ {'EXIT',{{badmatch,wanted},_}} = (catch conditions()),
+
+ ok.
+
+could(Coupons = pda, Favorite = _pleasure = 0.0, {_, true}, {Presents}) ->
+ (0 = true) = #{true => [Presents]}.
+
+place(lee) ->
+ (pregnancy = presentations) = [hours | [purchase || _ <- 0]] + wine.
+
+conditions() ->
+ (talking = going) = storage + [large = wanted].
+
coverage(_) ->
File = {file,"fake.erl"},
ok = fc(a),
diff --git a/lib/compiler/test/beam_jump_SUITE.erl b/lib/compiler/test/beam_jump_SUITE.erl
new file mode 100644
index 0000000000..088f63606c
--- /dev/null
+++ b/lib/compiler/test/beam_jump_SUITE.erl
@@ -0,0 +1,74 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(beam_jump_SUITE).
+
+-export([all/0,suite/0,groups/0,init_per_suite/1,end_per_suite/1,
+ init_per_group/2,end_per_group/2,
+ undefined_label/1,ambiguous_catch_try_state/1]).
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
+
+all() ->
+ test_lib:recompile(?MODULE),
+ [{group,p}].
+
+groups() ->
+ [{p,[parallel],
+ [undefined_label,
+ ambiguous_catch_try_state
+ ]}].
+
+init_per_suite(Config) ->
+ Config.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_group(_GroupName, Config) ->
+ Config.
+
+end_per_group(_GroupName, Config) ->
+ Config.
+
+undefined_label(_Config) ->
+ {'EXIT',{function_clause,_}} = (catch flights(0, [], [])),
+ ok.
+
+%% Would lose a label when compiled with no_copt.
+
+flights(0, [], []) when [], 0; 0.0, [], false ->
+ clark;
+flights(_, Reproduction, introduction) when false, Reproduction ->
+ responsible.
+
+%% [ERL-209] beam_jump would share 'catch' blocks, causing an
+%% ambiguous_catch_try_state error in beam_validator.
+
+ambiguous_catch_try_state(_Config) ->
+ {{'EXIT',{{case_clause,song},_}},{'EXIT',{{case_clause,song},_}}} =
+ checks(42),
+ ok.
+
+river() -> song.
+
+checks(Wanted) ->
+ %% Must be one line to cause the unsafe optimization.
+ {catch case river() of sheet -> begin +Wanted, if "da" -> Wanted end end end, catch case river() of sheet -> begin + Wanted, if "da" -> Wanted end end end}.
diff --git a/lib/compiler/test/beam_reorder_SUITE.erl b/lib/compiler/test/beam_reorder_SUITE.erl
index 4b2262f65b..ff31f2d3bd 100644
--- a/lib/compiler/test/beam_reorder_SUITE.erl
+++ b/lib/compiler/test/beam_reorder_SUITE.erl
@@ -21,7 +21,7 @@
-export([all/0,suite/0,groups/0,init_per_suite/1,end_per_suite/1,
init_per_group/2,end_per_group/2,
- alloc/1]).
+ alloc/1,confused_beam_validator/1]).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -31,7 +31,8 @@ all() ->
groups() ->
[{p,[parallel],
- [alloc
+ [alloc,
+ confused_beam_validator
]}].
init_per_suite(Config) ->
@@ -65,5 +66,16 @@ alloc_b(_U1, _U2, R) ->
_ = id(0),
Res.
+confused_beam_validator(_Config) ->
+ {'EXIT',{{badmap,{any}},_}} = (catch efficient({any})),
+ ok.
+
+efficient({Var}=God) ->
+ id(God#{}),
+ catch
+ receive _ ->
+ Var
+ end.
+
id(I) ->
I.
diff --git a/lib/compiler/test/beam_type_SUITE.erl b/lib/compiler/test/beam_type_SUITE.erl
index 8d5c0190ed..69e2f1838d 100644
--- a/lib/compiler/test/beam_type_SUITE.erl
+++ b/lib/compiler/test/beam_type_SUITE.erl
@@ -21,7 +21,8 @@
-export([all/0,suite/0,groups/0,init_per_suite/1,end_per_suite/1,
init_per_group/2,end_per_group/2,
- integers/1,coverage/1,booleans/1]).
+ integers/1,coverage/1,booleans/1,setelement/1,cons/1,
+ tuple/1]).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -33,7 +34,10 @@ groups() ->
[{p,[parallel],
[integers,
coverage,
- booleans
+ booleans,
+ setelement,
+ cons,
+ tuple
]}].
init_per_suite(Config) ->
@@ -55,6 +59,8 @@ integers(_Config) ->
a = do_integers_2(<<0:1>>),
{'EXIT',{{case_clause,-1},_}} = (catch do_integers_2(<<1:1>>)),
+ college = do_integers_3(),
+
ok.
do_integers_1(B0) ->
@@ -71,6 +77,12 @@ do_integers_2(Bin) ->
1 -> b
end.
+do_integers_3() ->
+ case try 0 after [] end of
+ 0 -> college;
+ 1 -> 0
+ end.
+
coverage(_Config) ->
{'EXIT',{badarith,_}} = (catch id(1) bsl 0.5),
{'EXIT',{badarith,_}} = (catch id(2.0) bsl 2),
@@ -94,5 +106,25 @@ do_booleans(B) ->
no -> no
end.
+setelement(_Config) ->
+ T0 = id({a,42}),
+ {a,_} = T0,
+ {b,_} = setelement(1, T0, b),
+ ok.
+
+cons(_Config) ->
+ [did] = cons(assigned, did),
+ ok.
+
+cons(assigned, Instrument) ->
+ [Instrument] = [did].
+
+tuple(_Config) ->
+ {'EXIT',{{badmatch,{necessary}},_}} = (catch do_tuple()),
+ ok.
+
+do_tuple() ->
+ {0, _} = {necessary}.
+
id(I) ->
I.
diff --git a/lib/compiler/test/beam_utils_SUITE.erl b/lib/compiler/test/beam_utils_SUITE.erl
index 6353ed3242..f6d4a311bb 100644
--- a/lib/compiler/test/beam_utils_SUITE.erl
+++ b/lib/compiler/test/beam_utils_SUITE.erl
@@ -23,7 +23,8 @@
init_per_group/2,end_per_group/2,
apply_fun/1,apply_mf/1,bs_init/1,bs_save/1,
is_not_killed/1,is_not_used_at/1,
- select/1,y_catch/1,otp_8949_b/1,liveopt/1]).
+ select/1,y_catch/1,otp_8949_b/1,liveopt/1,coverage/1,
+ y_registers/1]).
-export([id/1]).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -43,7 +44,9 @@ groups() ->
select,
y_catch,
otp_8949_b,
- liveopt
+ liveopt,
+ coverage,
+ y_registers
]}].
init_per_suite(Config) ->
@@ -268,6 +271,87 @@ liveopt_fun(Peer, Cause, Origin) ->
void
end.
+%% Thanks to QuickCheck.
+coverage(_Config) ->
+ 42+7 = merchant([[],7,false]),
+
+ {'EXIT',{{try_clause,0},_}} = (catch resulting([0], stone)),
+ 0.0 = resulting([true], stone),
+
+ {'EXIT',{if_clause,_}} = (catch clinic(false)),
+ {'EXIT',{{try_clause,"trials"},_}} = (catch clinic(true)),
+
+ {'EXIT',{function_clause,_}} = (catch town(overall, {{abc},alcohol})),
+
+ ok.
+
+%% Cover check_liveness/3.
+merchant([Merchant, Laws, Electric]) ->
+ id(42),
+ oklahoma([[] || 0 <- Merchant],
+ if true; Electric -> Laws end) + 42.
+oklahoma([], Int) -> Int.
+
+town(overall, {{If}, Healing = alcohol})
+ when Healing#{[] => Healing}; include ->
+ [If || Healing <- awareness].
+
+%% Cover is_reg_used_at/3.
+resulting([Conservation], stone) ->
+ try 0 of
+ Conservation when Conservation -> Conservation;
+ _ when Conservation; 0 -> 0.0
+ after
+ Conservation
+ end.
+
+%% Cover is_reg_used_at_1/3.
+clinic(Damage) ->
+ if
+ Damage ->
+ try "trials" of Damage when Damage -> Damage catch true -> [] end
+ end,
+ carefully.
+
+y_registers(_Config) ->
+ {'EXIT',{{badfun,0},_}} = (catch economic(0.0, jim)),
+ {'EXIT',{{badmatch,apartments},_}} = (catch louisiana()),
+ {a,b} = (boxes(true))({a,b}),
+ {'EXIT',{{case_clause,webmaster},_}} = (catch yellow(true)),
+ ok.
+
+economic(0.0 = Serves, Existence) ->
+ case Serves of
+ Serves -> 0
+ end,
+ Existence = jim,
+ 0(),
+ Serves,
+ Existence.
+
+louisiana() ->
+ {catch necessarily,
+ try
+ [] == reg,
+ true = apartments
+ catch [] -> barbara
+ end}.
+
+boxes(Call) ->
+ case Call of
+ Call -> approval
+ end,
+ Call,
+ fun id/1.
+
+yellow(Hill) ->
+ case webmaster of
+ station -> eyes; Hill ->
+ "under"
+ end,
+ Hill,
+ id(42).
+
%% The identity function.
id(I) -> I.
diff --git a/lib/compiler/test/beam_validator_SUITE.erl b/lib/compiler/test/beam_validator_SUITE.erl
index 7c4e88ca3e..263fd2ca7e 100644
--- a/lib/compiler/test/beam_validator_SUITE.erl
+++ b/lib/compiler/test/beam_validator_SUITE.erl
@@ -32,7 +32,7 @@
bad_bin_match/1,bad_dsetel/1,
state_after_fault_in_catch/1,no_exception_in_catch/1,
undef_label/1,illegal_instruction/1,failing_gc_guard_bif/1,
- map_field_lists/1]).
+ map_field_lists/1,cover_bin_opt/1]).
-include_lib("common_test/include/ct.hrl").
@@ -60,7 +60,7 @@ groups() ->
freg_state,bad_bin_match,bad_dsetel,
state_after_fault_in_catch,no_exception_in_catch,
undef_label,illegal_instruction,failing_gc_guard_bif,
- map_field_lists]}].
+ map_field_lists,cover_bin_opt]}].
init_per_suite(Config) ->
Config.
@@ -406,8 +406,124 @@ map_field_lists(Config) ->
empty_field_list}}
] = Errors.
+%% Coverage and smoke test of beam_validator.
+cover_bin_opt(_Config) ->
+ Ms = [beam_utils_SUITE,
+ bs_match_SUITE,
+ bs_bincomp_SUITE,
+ bs_bit_binaries_SUITE,
+ bs_utf_SUITE],
+ test_lib:p_run(fun try_bin_opt/1, Ms),
+ ok.
+
+try_bin_opt(Mod) ->
+ try
+ do_bin_opt(Mod)
+ catch
+ Class:Error ->
+ io:format("~p: ~p ~p\n~p\n",
+ [Mod,Class,Error,erlang:get_stacktrace()]),
+ error
+ end.
+
+do_bin_opt(Mod) ->
+ Beam = code:which(Mod),
+ {ok,{Mod,[{abstract_code,
+ {raw_abstract_v1,Abstr}}]}} =
+ beam_lib:chunks(Beam, [abstract_code]),
+ {ok,Mod,Asm} = compile:forms(Abstr, ['S']),
+ do_bin_opt(Mod, Asm).
+
+do_bin_opt(Mod, Asm) ->
+ do_bin_opt(fun enable_bin_opt/1, Mod, Asm),
+ do_bin_opt(fun remove_bs_start_match/1, Mod, Asm),
+ do_bin_opt(fun remove_bs_save/1, Mod, Asm),
+ do_bin_opt(fun destroy_ctxt/1, Mod, Asm),
+ do_bin_opt(fun destroy_save_point/1, Mod, Asm),
+ ok.
+
+do_bin_opt(Transform, Mod, Asm0) ->
+ Asm = Transform(Asm0),
+ case compile:forms(Asm, [from_asm,no_postopt,return]) of
+ {ok,[],Code,_Warnings} when is_binary(Code) ->
+ ok;
+ {error,Errors0,_} ->
+ %% beam_validator must return errors, not simply crash,
+ %% when illegal code is found.
+ ModString = atom_to_list(Mod),
+ [{ModString,Errors}] = Errors0,
+ _ = [verify_bin_opt_error(E) || E <- Errors],
+ ok
+ end.
+
+verify_bin_opt_error({beam_validator,_}) ->
+ ok.
+
+enable_bin_opt(Module) ->
+ transform_is(fun enable_bin_opt_body/1, Module).
+
+enable_bin_opt_body([_,{'%',{no_bin_opt,_Reason,_Anno}}|Is]) ->
+ enable_bin_opt_body(Is);
+enable_bin_opt_body([I|Is]) ->
+ [I|enable_bin_opt_body(Is)];
+enable_bin_opt_body([]) ->
+ [].
+
+remove_bs_start_match(Module) ->
+ transform_remove(fun({test,bs_start_match2,_,_,_,_}) -> true;
+ (_) -> false
+ end, Module).
+
+remove_bs_save(Module) ->
+ transform_remove(fun({bs_save2,_,_}) -> true;
+ (_) -> false
+ end, Module).
+
+destroy_save_point(Module) ->
+ transform_i(fun do_destroy_save_point/1, Module).
+
+do_destroy_save_point({I,Ctx,_Point})
+ when I =:= bs_save2; I =:= bs_restore2 ->
+ {I,Ctx,42};
+do_destroy_save_point(I) ->
+ I.
+
+destroy_ctxt(Module) ->
+ transform_i(fun do_destroy_ctxt/1, Module).
+
+do_destroy_ctxt({bs_save2=I,Ctx,Point}) ->
+ {I,destroy_reg(Ctx),Point};
+do_destroy_ctxt({bs_restore2=I,Ctx,Point}) ->
+ {I,destroy_reg(Ctx),Point};
+do_destroy_ctxt({bs_context_to_binary=I,Ctx}) ->
+ {I,destroy_reg(Ctx)};
+do_destroy_ctxt(I) ->
+ I.
+
+destroy_reg({Tag,N}) ->
+ case rand:uniform() of
+ R when R < 0.6 ->
+ {Tag,N+1};
+ _ ->
+ {y,N+1}
+ end.
+
%%%-------------------------------------------------------------------------
+transform_remove(Remove, Module) ->
+ transform_is(fun(Is) -> [I || I <- Is, not Remove(I)] end, Module).
+
+transform_i(Transform, Module) ->
+ transform_is(fun(Is) -> [Transform(I) || I <- Is] end, Module).
+
+transform_is(Transform, {Mod,Exp,Imp,Fs0,Lc}) ->
+ Fs = [transform_is_1(Transform, F) || F <- Fs0],
+ {Mod,Exp,Imp,Fs,Lc}.
+
+transform_is_1(Transform, {function,N,A,E,Is0}) ->
+ Is = Transform(Is0),
+ {function,N,A,E,Is}.
+
do_val(Mod, Config) ->
Data = proplists:get_value(data_dir, Config),
Base = atom_to_list(Mod),
diff --git a/lib/compiler/test/bif_SUITE.erl b/lib/compiler/test/bif_SUITE.erl
new file mode 100644
index 0000000000..51bc71da81
--- /dev/null
+++ b/lib/compiler/test/bif_SUITE.erl
@@ -0,0 +1,65 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(bif_SUITE).
+
+-export([all/0,suite/0,groups/0,init_per_suite/1,end_per_suite/1,
+ init_per_group/2,end_per_group/2,
+ beam_validator/1]).
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
+
+all() ->
+ test_lib:recompile(?MODULE),
+ [{group,p}].
+
+groups() ->
+ [{p,[parallel],
+ [beam_validator
+ ]}].
+
+init_per_suite(Config) ->
+ Config.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_group(_GroupName, Config) ->
+ Config.
+
+end_per_group(_GroupName, Config) ->
+ Config.
+
+%% Cover code in beam_validator.
+
+beam_validator(Config) ->
+ [false,Config] = food(Config),
+
+ true = is_number(42.0),
+ false = is_port(Config),
+
+ ok.
+
+food(Curriculum) ->
+ [try
+ is_bitstring(functions)
+ catch _ ->
+ 0
+ end, Curriculum].
diff --git a/lib/compiler/test/compile_SUITE.erl b/lib/compiler/test/compile_SUITE.erl
index e634f0fcc2..b0148f7103 100644
--- a/lib/compiler/test/compile_SUITE.erl
+++ b/lib/compiler/test/compile_SUITE.erl
@@ -34,7 +34,7 @@
cover/1, env/1, core/1,
core_roundtrip/1, asm/1,
sys_pre_attributes/1, dialyzer/1,
- warnings/1, pre_load_check/1
+ warnings/1, pre_load_check/1, env_compiler_options/1
]).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -50,7 +50,8 @@ all() ->
other_output, encrypted_abstr,
strict_record,
cover, env, core, core_roundtrip, asm,
- sys_pre_attributes, dialyzer, warnings, pre_load_check].
+ sys_pre_attributes, dialyzer, warnings, pre_load_check,
+ env_compiler_options].
groups() ->
[].
@@ -693,8 +694,7 @@ core(Config) when is_list(Config) ->
Outdir = filename:join(PrivDir, "core"),
ok = file:make_dir(Outdir),
- Wc = filename:join(filename:dirname(code:which(?MODULE)), "*.beam"),
- TestBeams = filelib:wildcard(Wc),
+ TestBeams = get_unique_beam_files(),
Abstr = [begin {ok,{Mod,[{abstract_code,
{raw_abstract_v1,Abstr}}]}} =
beam_lib:chunks(Beam, [abstract_code]),
@@ -755,8 +755,7 @@ core_roundtrip(Config) ->
Outdir = filename:join(PrivDir, atom_to_list(?FUNCTION_NAME)),
ok = file:make_dir(Outdir),
- Wc = filename:join(filename:dirname(code:which(?MODULE)), "*.beam"),
- TestBeams = filelib:wildcard(Wc),
+ TestBeams = get_unique_beam_files(),
test_lib:p_run(fun(F) -> do_core_roundtrip(F, Outdir) end, TestBeams).
do_core_roundtrip(Beam, Outdir) ->
@@ -781,8 +780,13 @@ do_core_roundtrip_1(Mod, Abstr, Outdir) ->
%% Primarily, test that annotations are accepted for all
%% constructs. Secondarily, smoke test cerl_trees:label/1.
- {Core,_} = cerl_trees:label(Core0),
- do_core_roundtrip_2(Mod, Core, Outdir).
+ {Core1,_} = cerl_trees:label(Core0),
+ do_core_roundtrip_2(Mod, Core1, Outdir),
+
+ %% Run the inliner to force generation of variables
+ %% with numeric names.
+ {ok,Mod,Core2} = compile:forms(Abstr, [inline,to_core]),
+ do_core_roundtrip_2(Mod, Core2, Outdir).
do_core_roundtrip_2(M, Core0, Outdir) ->
CoreFile = filename:join(Outdir, atom_to_list(M)++".core"),
@@ -870,8 +874,7 @@ asm(Config) when is_list(Config) ->
Outdir = filename:join(PrivDir, "asm"),
ok = file:make_dir(Outdir),
- Wc = filename:join(filename:dirname(code:which(?MODULE)), "*.beam"),
- TestBeams = filelib:wildcard(Wc),
+ TestBeams = get_unique_beam_files(),
Res = test_lib:p_run(fun(F) -> do_asm(F, Outdir) end, TestBeams),
Res.
@@ -947,8 +950,7 @@ dialyzer(Config) ->
%% Test that warnings contain filenames and line numbers.
warnings(_Config) ->
- TestDir = filename:dirname(code:which(?MODULE)),
- Files = filelib:wildcard(filename:join(TestDir, "*.erl")),
+ Files = get_unique_files(".erl"),
test_lib:p_run(fun do_warnings/1, Files).
do_warnings(F) ->
@@ -1091,6 +1093,23 @@ compiler_modules() ->
FN = filename,
[list_to_atom(FN:rootname(FN:basename(M), ".beam")) || M <- Ms].
+%% Test that ERL_COMPILER_OPTIONS are correctly retrieved
+%% by env_compiler_options/0
+
+env_compiler_options(_Config) ->
+ Cases = [
+ {"bin_opt_info", [bin_opt_info]},
+ {"'S'", ['S']},
+ {"{source, \"test.erl\"}", [{source, "test.erl"}]},
+ {"[{d,macro_one,1},{d,macro_two}]", [{d, macro_one, 1}, {d, macro_two}]},
+ {"[warn_export_all, warn_export_vars]", [warn_export_all, warn_export_vars]}
+ ],
+ F = fun({Env, Expected}) ->
+ true = os:putenv("ERL_COMPILER_OPTIONS", Env),
+ Expected = compile:env_compiler_options()
+ end,
+ lists:foreach(F, Cases).
+
%%%
%%% Utilities.
%%%
@@ -1102,3 +1121,14 @@ compile_and_verify(Name, Target, Opts) ->
beam_lib:chunks(Target, [compile_info]),
{options,BeamOpts} = lists:keyfind(options, 1, CInfo),
Opts = BeamOpts.
+
+get_unique_beam_files() ->
+ get_unique_files(".beam").
+
+get_unique_files(Ext) ->
+ Wc = filename:join(filename:dirname(code:which(?MODULE)), "*"++Ext),
+ [F || F <- filelib:wildcard(Wc), not is_cloned(F, Ext)].
+
+is_cloned(File, Ext) ->
+ Mod = list_to_atom(filename:basename(File, Ext)),
+ test_lib:is_cloned_mod(Mod).
diff --git a/lib/compiler/test/core_fold_SUITE.erl b/lib/compiler/test/core_fold_SUITE.erl
index 442b2d424c..ced0e39d06 100644
--- a/lib/compiler/test/core_fold_SUITE.erl
+++ b/lib/compiler/test/core_fold_SUITE.erl
@@ -25,7 +25,8 @@
eq/1,nested_call_in_case/1,guard_try_catch/1,coverage/1,
unused_multiple_values_error/1,unused_multiple_values/1,
multiple_aliases/1,redundant_boolean_clauses/1,
- mixed_matching_clauses/1,unnecessary_building/1]).
+ mixed_matching_clauses/1,unnecessary_building/1,
+ no_no_file/1,configuration/1]).
-export([foo/0,foo/1,foo/2,foo/3]).
@@ -43,7 +44,8 @@ groups() ->
eq,nested_call_in_case,guard_try_catch,coverage,
unused_multiple_values_error,unused_multiple_values,
multiple_aliases,redundant_boolean_clauses,
- mixed_matching_clauses,unnecessary_building]}].
+ mixed_matching_clauses,unnecessary_building,
+ no_no_file,configuration]}].
init_per_suite(Config) ->
@@ -454,4 +456,59 @@ do_unnecessary_building_2({a,_,_}=T) ->
[_,_] = [T,none],
x}.
+%% This test tests that v3_core has provided annotations and that
+%% sys_core_fold retains them, so that warnings produced by
+%% sys_core_fold will have proper filenames and line numbers. Thus, no
+%% "no_file" warnings.
+no_no_file(_Config) ->
+ {'EXIT',{{case_clause,0},_}} = (catch source(true, any)),
+ surgery = (tim(#{reduction => any}))(),
+
+ false = soul(#{[] => true}),
+ {'EXIT',{{case_clause,true},_}} = (catch soul(#{[] => false})),
+
+ ok = experiment(),
+ ok.
+
+source(true, Activities) ->
+ case 0 of
+ Activities when [] ->
+ Activities
+ end.
+
+tim(#{reduction := Emergency}) ->
+ try
+ fun() -> surgery end
+ catch
+ _ when [] ->
+ planet
+ end.
+
+soul(#{[] := Properly}) ->
+ not case true of
+ Properly -> true;
+ Properly -> 0
+ end.
+
+experiment() ->
+ case kingdom of
+ _ ->
+ +case "map" of
+ _ -> 0.0
+ end
+ end,
+ ok.
+
+
+%% Make sure we don't try to move a fun into a guard.
+configuration(_Config) ->
+ {'EXIT',_} = (catch configuration()),
+ ok.
+
+configuration() ->
+ [forgotten || Components <- enemy, is_tuple(fun art/0)].
+
+art() ->
+ creating.
+
id(I) -> I.
diff --git a/lib/compiler/test/fun_SUITE.erl b/lib/compiler/test/fun_SUITE.erl
index 17ff8601d9..16474adf5b 100644
--- a/lib/compiler/test/fun_SUITE.erl
+++ b/lib/compiler/test/fun_SUITE.erl
@@ -22,7 +22,7 @@
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
test1/1,overwritten_fun/1,otp_7202/1,bif_fun/1,
- external/1,eep37/1,eep37_dup/1,badarity/1]).
+ external/1,eep37/1,eep37_dup/1,badarity/1,badfun/1]).
%% Internal exports.
-export([call_me/1,dup1/0,dup2/0]).
@@ -33,10 +33,12 @@ suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
test_lib:recompile(?MODULE),
- [test1,overwritten_fun,otp_7202,bif_fun,external,eep37,eep37_dup,badarity].
+ [{group,p}].
-groups() ->
- [].
+groups() ->
+ [{p,[parallel],
+ [test1,overwritten_fun,otp_7202,bif_fun,external,eep37,
+ eep37_dup,badarity,badfun]}].
init_per_suite(Config) ->
Config.
@@ -221,5 +223,25 @@ badarity(Config) when is_list(Config) ->
{'EXIT',{{badarity,{_,[]}},_}} = (catch (fun badarity/1)()),
ok.
+badfun(_Config) ->
+ X = not_a_fun,
+ expect_badfun(42, catch 42()),
+ expect_badfun(42.0, catch 42.0(1)),
+ expect_badfun(X, catch X()),
+ expect_badfun(X, catch X(1)),
+ Len = length(atom_to_list(X)),
+ expect_badfun(Len, catch begin length(atom_to_list(X)) end(1)),
+
+ expect_badfun(42, catch 42(put(?FUNCTION_NAME, yes))),
+ yes = erase(?FUNCTION_NAME),
+
+ expect_badfun(X, catch X(put(?FUNCTION_NAME, of_course))),
+ of_course = erase(?FUNCTION_NAME),
+
+ ok.
+
+expect_badfun(Term, Exit) ->
+ {'EXIT',{{badfun,Term},_}} = Exit.
+
id(I) ->
I.
diff --git a/lib/compiler/test/guard_SUITE.erl b/lib/compiler/test/guard_SUITE.erl
index 13d274d98a..6302f82f29 100644
--- a/lib/compiler/test/guard_SUITE.erl
+++ b/lib/compiler/test/guard_SUITE.erl
@@ -34,7 +34,7 @@
tricky/1,rel_ops/1,rel_op_combinations/1,literal_type_tests/1,
basic_andalso_orelse/1,traverse_dcd/1,
check_qlc_hrl/1,andalso_semi/1,t_tuple_size/1,binary_part/1,
- bad_constants/1,bad_guards/1,scotland/1,
+ bad_constants/1,bad_guards/1,
guard_in_catch/1]).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -54,7 +54,7 @@ groups() ->
rel_ops,rel_op_combinations,
literal_type_tests,basic_andalso_orelse,traverse_dcd,
check_qlc_hrl,andalso_semi,t_tuple_size,binary_part,
- bad_constants,bad_guards,scotland,guard_in_catch]}].
+ bad_constants,bad_guards,guard_in_catch]}].
init_per_suite(Config) ->
Config.
@@ -1835,6 +1835,8 @@ bad_guards(Config) when is_list(Config) ->
fc(catch bad_guards_3(not_a_map, [x])),
fc(catch bad_guards_3(42, [x])),
+ fc(catch bad_guards_4()),
+
ok.
%% beam_bool used to produce GC BIF instructions whose
@@ -1852,26 +1854,11 @@ bad_guards_2(M, [_]) when M#{a := 0, b => 0}, map_size(M) ->
bad_guards_3(M, [_]) when is_map(M) andalso M#{a := 0, b => 0}, length(M) ->
ok.
-%% beam_bool would remove the initialization of {y,0}.
-%% (Thanks to Thomas Arts and QuickCheck.)
-
-scotland(_Config) ->
- million = do_scotland(placed),
- {'EXIT',{{badmatch,placed},_}} = (catch do_scotland(false)),
- {'EXIT',{{badmatch,placed},_}} = (catch do_scotland(true)),
- {'EXIT',{{badmatch,placed},_}} = (catch do_scotland(echo)),
- ok.
-
-do_scotland(Echo) ->
- found(case Echo of
- Echo when true; Echo, Echo, Echo ->
- Echo;
- echo ->
- []
- end,
- Echo = placed).
+%% v3_codegen would generate a jump to the failure label, but
+%% without initializing x(0). The code at the failure label expected
+%% x(0) to be initialized.
-found(_, _) -> million.
+bad_guards_4() when not (error#{}); {not 0.0} -> freedom.
%% Building maps in a guard in a 'catch' would crash v3_codegen.
diff --git a/lib/compiler/test/map_SUITE.erl b/lib/compiler/test/map_SUITE.erl
index 14d175b92c..36e82c1459 100644
--- a/lib/compiler/test/map_SUITE.erl
+++ b/lib/compiler/test/map_SUITE.erl
@@ -66,7 +66,9 @@
t_export/1,
%% errors in 18
- t_register_corruption/1
+ t_register_corruption/1,
+ t_bad_update/1
+
]).
suite() -> [].
@@ -117,7 +119,8 @@ all() ->
t_export,
%% errors in 18
- t_register_corruption
+ t_register_corruption,
+ t_bad_update
].
groups() -> [].
@@ -1284,6 +1287,7 @@ t_guard_update(Config) when is_list(Config) ->
first = map_guard_update(#{}, #{x=>first}),
second = map_guard_update(#{y=>old}, #{x=>second,y=>old}),
third = map_guard_update(#{x=>old,y=>old}, #{x=>third,y=>old}),
+ bad_map_guard_update(),
ok.
t_guard_update_large(Config) when is_list(Config) ->
@@ -1350,6 +1354,29 @@ map_guard_update(M1, M2) when M1#{x=>second} =:= M2 -> second;
map_guard_update(M1, M2) when M1#{x:=third} =:= M2 -> third;
map_guard_update(_, _) -> error.
+bad_map_guard_update() ->
+ do_bad_map_guard_update(fun burns/1),
+ do_bad_map_guard_update(fun turns/1),
+ ok.
+
+do_bad_map_guard_update(Fun) ->
+ do_bad_map_guard_update_1(Fun, #{}),
+ do_bad_map_guard_update_1(Fun, #{true=>1}),
+ ok.
+
+do_bad_map_guard_update_1(Fun, Value) ->
+ %% Note: The business with the seemingly redundant fun
+ %% disables inlining, which would otherwise change the
+ %% EXIT reason.
+ {'EXIT',{function_clause,_}} = (catch Fun(Value)),
+ ok.
+
+burns(Richmond) when not (Richmond#{true := 0}); [Richmond] ->
+ specification.
+
+turns(Richmond) when not (Richmond#{true => 0}); [Richmond] ->
+ specification.
+
t_guard_receive(Config) when is_list(Config) ->
M0 = #{ id => 0 },
Pid = spawn_link(fun() -> guard_receive_loop() end),
@@ -1922,6 +1949,19 @@ validate_frequency([{T,C}|Fs],Tf) ->
validate_frequency([], _) -> ok.
+t_bad_update(_Config) ->
+ {#{0.0:=Id},#{}} = properly(#{}),
+ 42 = Id(42),
+ {'EXIT',{{badmap,_},_}} = (catch increase(0)),
+ ok.
+
+properly(Item) ->
+ {Item#{0.0 => fun id/1},Item}.
+
+increase(Allows) ->
+ catch fun() -> Allows end#{[] => +Allows, "warranty" => fun id/1}.
+
+
%% aux
rand_terms(0) -> [];
diff --git a/lib/compiler/test/match_SUITE.erl b/lib/compiler/test/match_SUITE.erl
index 92a9802cad..127679ba69 100644
--- a/lib/compiler/test/match_SUITE.erl
+++ b/lib/compiler/test/match_SUITE.erl
@@ -21,10 +21,10 @@
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
- pmatch/1,mixed/1,aliases/1,match_in_call/1,
- untuplify/1,shortcut_boolean/1,letify_guard/1,
+ pmatch/1,mixed/1,aliases/1,non_matching_aliases/1,
+ match_in_call/1,untuplify/1,shortcut_boolean/1,letify_guard/1,
selectify/1,underscore/1,match_map/1,map_vars_used/1,
- coverage/1,grab_bag/1]).
+ coverage/1,grab_bag/1,literal_binary/1]).
-include_lib("common_test/include/ct.hrl").
@@ -36,10 +36,11 @@ all() ->
groups() ->
[{p,[parallel],
- [pmatch,mixed,aliases,match_in_call,untuplify,
+ [pmatch,mixed,aliases,non_matching_aliases,
+ match_in_call,untuplify,
shortcut_boolean,letify_guard,selectify,
underscore,match_map,map_vars_used,coverage,
- grab_bag]}].
+ grab_bag,literal_binary]}].
init_per_suite(Config) ->
@@ -143,16 +144,6 @@ aliases(Config) when is_list(Config) ->
{a,b} = list_alias2([a,b]),
{a,b} = list_alias3([a,b]),
- %% Non-matching aliases.
- none = mixed_aliases(<<42>>),
- none = mixed_aliases([b]),
- none = mixed_aliases([d]),
- none = mixed_aliases({a,42}),
- none = mixed_aliases(42),
-
- %% Non-matching aliases.
- {'EXIT',{{badmatch,42},_}} = (catch nomatch_alias(42)),
-
ok.
str_alias(V) ->
@@ -256,6 +247,33 @@ list_alias2([X,Y]=[a,b]) ->
list_alias3([X,b]=[a,Y]) ->
{X,Y}.
+non_matching_aliases(_Config) ->
+ none = mixed_aliases(<<42>>),
+ none = mixed_aliases([b]),
+ none = mixed_aliases([d]),
+ none = mixed_aliases({a,42}),
+ none = mixed_aliases(42),
+
+ {'EXIT',{{badmatch,42},_}} = (catch nomatch_alias(42)),
+ {'EXIT',{{badmatch,job},_}} = (catch entirely()),
+ {'EXIT',{{badmatch,associates},_}} = (catch printer()),
+ {'EXIT',{{badmatch,borogoves},_}} = (catch tench()),
+
+ put(perch, 0),
+ {'EXIT',{{badmatch,{spine,42}},_}} = (catch perch(42)),
+ 1 = erase(perch),
+
+ put(salmon, 0),
+ {'EXIT',{{badmatch,mimsy},_}} = (catch salmon()),
+ 1 = erase(salmon),
+
+ put(shark, 0),
+ {'EXIT',{{badmatch,_},_}} = (catch shark()),
+ 1 = erase(shark),
+
+ {'EXIT',{{badmatch,_},_}} = (catch radio(research)),
+ ok.
+
mixed_aliases(<<X:8>> = x) -> {a,X};
mixed_aliases([b] = <<X:8>>) -> {b,X};
mixed_aliases(<<X:8>> = {a,X}) -> {c,X};
@@ -266,6 +284,42 @@ nomatch_alias(I) ->
{ok={A,B}} = id(I),
{A,B}.
+entirely() ->
+ 0(((Voice = true) = cool) = job),
+ [receive _ -> Voice end || banking <- printer].
+
+printer() ->
+ {[Indoor] = [] = associates},
+ [ireland || Indoor <- Indoor].
+
+tench() ->
+ E = begin
+ [A] = [] = borogoves,
+ A + 1
+ end,
+ E + 7 * A.
+
+perch(X) ->
+ begin
+ put(perch, get(perch)+1),
+ [A] = [] = {spine,X}
+ end.
+
+salmon() ->
+ {put(salmon, get(salmon)+1),#{key:=([A]=[])}=mimsy,exit(fail)},
+ A + 10.
+
+shark() ->
+ (hello = there) = (catch shark(put(shark, get(shark)+1), a = b)).
+
+shark(_, _) ->
+ ok.
+
+radio(research) ->
+ (connection = proof) =
+ (catch erlang:trace_pattern(catch mechanisms + assist,
+ summary = mechanisms)).
+
%% OTP-7018.
match_in_call(Config) when is_list(Config) ->
@@ -520,6 +574,15 @@ grab_bag_remove_failure([{stretch,_,Mi}=Stretch | Specs], Unit, _MaxFailure) ->
ok
end.
+%% Regression in 19.0, reported by Alexei Sholik
+literal_binary(_Config) ->
+ 3 = literal_binary_match(bar,<<"y">>),
+ ok.
+
+literal_binary_match(bar, <<"x">>) -> 1;
+literal_binary_match(_, <<"x">>) -> 2;
+literal_binary_match(_, <<"y">>) -> 3;
+literal_binary_match(_, _) -> fail.
id(I) -> I.
diff --git a/lib/compiler/test/misc_SUITE.erl b/lib/compiler/test/misc_SUITE.erl
index f05fe6c943..f543f0d4de 100644
--- a/lib/compiler/test/misc_SUITE.erl
+++ b/lib/compiler/test/misc_SUITE.erl
@@ -256,12 +256,15 @@ silly_coverage(Config) when is_list(Config) ->
{jump,{f,42}}]}],99},
expect_error(fun() -> beam_clean:module(CleanInput, []) end),
- %% beam_peep
+ %% beam_peep. This is tricky. Use a select instruction with
+ %% an odd number of elements in the list to crash
+ %% prune_redundant_values/2 but not beam_clean:clean_labels/1.
PeepInput = {?MODULE,[{foo,0}],[],
[{function,foo,0,2,
[{label,1},
{func_info,{atom,?MODULE},{atom,foo},0},
- {label,2}|non_proper_list]}],99},
+ {label,2},{select,op,r,{f,2},[{f,2}]}]}],
+ 2},
expect_error(fun() -> beam_peep:module(PeepInput, []) end),
%% beam_bsm. This is tricky. Our function must be sane enough to not crash
diff --git a/lib/compiler/test/receive_SUITE.erl b/lib/compiler/test/receive_SUITE.erl
index 3c397561fc..8304672558 100644
--- a/lib/compiler/test/receive_SUITE.erl
+++ b/lib/compiler/test/receive_SUITE.erl
@@ -118,8 +118,14 @@ coverage(Config) when is_list(Config) ->
59 = tuple_to_values(infinity, x),
61 = tuple_to_values(999999, x),
0 = tuple_to_values(1, x),
+
+ {'EXIT',{{badmap,[]},_}} = (catch monitor_plus_badmap(self())),
+
ok.
+monitor_plus_badmap(Pid) ->
+ monitor(process, Pid) + []#{}.
+
receive_all() ->
receive
Any ->
diff --git a/lib/compiler/test/test_lib.erl b/lib/compiler/test/test_lib.erl
index d141d86021..d5b79e2357 100644
--- a/lib/compiler/test/test_lib.erl
+++ b/lib/compiler/test/test_lib.erl
@@ -22,7 +22,7 @@
-include_lib("common_test/include/ct.hrl").
-compile({no_auto_import,[binary_part/2]}).
-export([id/1,recompile/1,parallel/0,uniq/0,opt_opts/1,get_data_dir/1,
- smoke_disasm/1,p_run/2,binary_part/2]).
+ is_cloned_mod/1,smoke_disasm/1,p_run/2,binary_part/2]).
id(I) -> I.
@@ -91,6 +91,17 @@ get_data_dir(Config) ->
Data = re:replace(Data1, "_post_opt_SUITE", "_SUITE", Opts),
re:replace(Data, "_inline_SUITE", "_SUITE", Opts).
+is_cloned_mod(Mod) ->
+ is_cloned_mod_1(atom_to_list(Mod)).
+
+%% Test whether Mod is a cloned module.
+
+is_cloned_mod_1("no_opt_SUITE") -> true;
+is_cloned_mod_1("post_opt_SUITE") -> true;
+is_cloned_mod_1("inline_SUITE") -> true;
+is_cloned_mod_1([_|T]) -> is_cloned_mod_1(T);
+is_cloned_mod_1([]) -> false.
+
%% p_run(fun(Data) -> ok|error, List) -> ok
%% Will fail the test case if there were any errors.
@@ -106,8 +117,9 @@ p_run(Test, List) ->
%% slightly faster than using 3. Using more than
%% 4 would not buy us much and could actually be
%% slower.
- max(S, 4)
+ min(S, 4)
end,
+ io:format("p_run: ~p parallel processes\n", [N]),
p_run_loop(Test, List, N, [], 0, 0).
p_run_loop(_, [], _, [], Errors, Ws) ->
diff --git a/lib/compiler/test/trycatch_SUITE.erl b/lib/compiler/test/trycatch_SUITE.erl
index f7ad78cb8d..a591d6cc93 100644
--- a/lib/compiler/test/trycatch_SUITE.erl
+++ b/lib/compiler/test/trycatch_SUITE.erl
@@ -1034,6 +1034,9 @@ grab_bag(_Config) ->
end
end,
+ %% Unnecessary catch.
+ 22 = (catch 22),
+
ok.
diff --git a/lib/compiler/vsn.mk b/lib/compiler/vsn.mk
index 23dd4bd4b1..334784657e 100644
--- a/lib/compiler/vsn.mk
+++ b/lib/compiler/vsn.mk
@@ -1 +1 @@
-COMPILER_VSN = 7.0
+COMPILER_VSN = 7.0.1
diff --git a/lib/cosEvent/test/event_channel_SUITE.erl b/lib/cosEvent/test/event_channel_SUITE.erl
index d237db8e9b..bbae8d782a 100644
--- a/lib/cosEvent/test/event_channel_SUITE.erl
+++ b/lib/cosEvent/test/event_channel_SUITE.erl
@@ -32,7 +32,7 @@
%% Macros
%%-----------------------------------------------------------------
--define(default_timeout, ?t:minutes(5)).
+-define(default_timeout, test_server:minutes(5)).
-define(match(ExpectedRes, Expr),
@@ -46,7 +46,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -87,12 +87,12 @@ cases() ->
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -131,8 +131,7 @@ app_test(_Config) ->
-event_objects_api(doc) -> ["Testing the CosEvent API to setup a complete service", ""];
-event_objects_api(suite) -> [];
+%% Testing the CosEvent API to setup a complete service
event_objects_api(_Config) ->
Ch = ?match({_,key,_,_,_,_}, cosEventApp:start_channel([{typecheck, true},
@@ -234,8 +233,7 @@ event_objects_api(_Config) ->
ok.
-events_api(doc) -> ["Testing the CosEvent API for sending events asynchronous", ""];
-events_api(suite) -> [];
+%% Testing the CosEvent API for sending events asynchronous
events_api(_Config) ->
Ch = ?match({_,key,_,_,_,_}, cosEventApp:start_channel([{typecheck, true},
@@ -244,8 +242,7 @@ events_api(_Config) ->
event_sender(Ch).
-events_sync_api(doc) -> ["Testing the CosEvent API for sending events synchronous", ""];
-events_sync_api(suite) -> [];
+%% Testing the CosEvent API for sending events synchronous
events_sync_api(_Config) ->
Ch = ?match({_,key,_,_,_,_}, cosEventApp:start_channel([{typecheck, true},
diff --git a/lib/cosEvent/test/generated_SUITE.erl b/lib/cosEvent/test/generated_SUITE.erl
index 2fa15c3a96..86794023af 100644
--- a/lib/cosEvent/test/generated_SUITE.erl
+++ b/lib/cosEvent/test/generated_SUITE.erl
@@ -29,7 +29,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -40,7 +40,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -51,7 +51,7 @@
Not ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS);
+ exit(AcTuAlReS);
_ ->
AcTuAlReS
end
@@ -63,7 +63,7 @@
case orber_tc:check_tc(TC) of
false ->
io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
- ?line exit(TC);
+ exit(TC);
true ->
true
end
@@ -125,12 +125,12 @@ end_per_group(_GroupName, Config) ->
%% Init and cleanup functions.
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -139,8 +139,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventChannelAdmin_AlreadyConnected'
%% Description:
%%-----------------------------------------------------------------
-'CosEventChannelAdmin_AlreadyConnected'(doc) -> [""];
-'CosEventChannelAdmin_AlreadyConnected'(suite) -> [];
'CosEventChannelAdmin_AlreadyConnected'(_) ->
?match(true, orber_tc:check_tc('CosEventChannelAdmin_AlreadyConnected':tc())),
?match("IDL:omg.org/CosEventChannelAdmin/AlreadyConnected:1.0",
@@ -154,8 +152,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventChannelAdmin_TypeError'
%% Description:
%%-----------------------------------------------------------------
-'CosEventChannelAdmin_TypeError'(doc) -> [""];
-'CosEventChannelAdmin_TypeError'(suite) -> [];
'CosEventChannelAdmin_TypeError'(_) ->
?match(true, orber_tc:check_tc('CosEventChannelAdmin_TypeError':tc())),
?match("IDL:omg.org/CosEventChannelAdmin/TypeError:1.0",
@@ -169,8 +165,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventComm_Disconnected'
%% Description:
%%-----------------------------------------------------------------
-'CosEventComm_Disconnected'(doc) -> [""];
-'CosEventComm_Disconnected'(suite) -> [];
'CosEventComm_Disconnected'(_) ->
?match(true, orber_tc:check_tc('CosEventComm_Disconnected':tc())),
?match("IDL:omg.org/CosEventComm/Disconnected:1.0",
@@ -183,8 +177,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventChannelAdmin_ConsumerAdmin'
%% Description:
%%-----------------------------------------------------------------
-'CosEventChannelAdmin_ConsumerAdmin'(doc) -> [""];
-'CosEventChannelAdmin_ConsumerAdmin'(suite) -> [];
'CosEventChannelAdmin_ConsumerAdmin'(_) ->
?nomatch(undefined, 'CosEventChannelAdmin_ConsumerAdmin':oe_tc(obtain_push_supplier)),
?nomatch(undefined, 'CosEventChannelAdmin_ConsumerAdmin':oe_tc(obtain_pull_supplier)),
@@ -201,8 +193,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventChannelAdmin_EventChannel'
%% Description:
%%-----------------------------------------------------------------
-'CosEventChannelAdmin_EventChannel'(doc) -> [""];
-'CosEventChannelAdmin_EventChannel'(suite) -> [];
'CosEventChannelAdmin_EventChannel'(_) ->
?nomatch(undefined, 'CosEventChannelAdmin_EventChannel':oe_tc(for_consumers)),
?nomatch(undefined, 'CosEventChannelAdmin_EventChannel':oe_tc(for_suppliers)),
@@ -220,8 +210,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventChannelAdmin_ProxyPullConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosEventChannelAdmin_ProxyPullConsumer'(doc) -> [""];
-'CosEventChannelAdmin_ProxyPullConsumer'(suite) -> [];
'CosEventChannelAdmin_ProxyPullConsumer'(_) ->
?nomatch(undefined, 'CosEventChannelAdmin_ProxyPullConsumer':oe_tc(connect_pull_supplier)),
?nomatch(undefined, 'CosEventChannelAdmin_ProxyPullConsumer':oe_tc(disconnect_pull_consumer)),
@@ -239,8 +227,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventChannelAdmin_ProxyPullSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosEventChannelAdmin_ProxyPullSupplier'(doc) -> [""];
-'CosEventChannelAdmin_ProxyPullSupplier'(suite) -> [];
'CosEventChannelAdmin_ProxyPullSupplier'(_) ->
?nomatch(undefined, 'CosEventChannelAdmin_ProxyPullSupplier':oe_tc(connect_pull_consumer)),
?nomatch(undefined, 'CosEventChannelAdmin_ProxyPullSupplier':oe_tc(pull)),
@@ -260,8 +246,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventChannelAdmin_ProxyPushConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosEventChannelAdmin_ProxyPushConsumer'(doc) -> [""];
-'CosEventChannelAdmin_ProxyPushConsumer'(suite) -> [];
'CosEventChannelAdmin_ProxyPushConsumer'(_) ->
?nomatch(undefined, 'CosEventChannelAdmin_ProxyPushConsumer':oe_tc(connect_push_supplier)),
?nomatch(undefined, 'CosEventChannelAdmin_ProxyPushConsumer':oe_tc(push)),
@@ -280,8 +264,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventChannelAdmin_ProxyPushSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosEventChannelAdmin_ProxyPushSupplier'(doc) -> [""];
-'CosEventChannelAdmin_ProxyPushSupplier'(suite) -> [];
'CosEventChannelAdmin_ProxyPushSupplier'(_) ->
?nomatch(undefined, 'CosEventChannelAdmin_ProxyPushSupplier':oe_tc(connect_push_consumer)),
?nomatch(undefined, 'CosEventChannelAdmin_ProxyPushSupplier':oe_tc(disconnect_push_supplier)),
@@ -299,8 +281,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventChannelAdmin_SupplierAdmin'
%% Description:
%%-----------------------------------------------------------------
-'CosEventChannelAdmin_SupplierAdmin'(doc) -> [""];
-'CosEventChannelAdmin_SupplierAdmin'(suite) -> [];
'CosEventChannelAdmin_SupplierAdmin'(_) ->
?nomatch(undefined, 'CosEventChannelAdmin_SupplierAdmin':oe_tc(obtain_push_consumer)),
?nomatch(undefined, 'CosEventChannelAdmin_SupplierAdmin':oe_tc(obtain_pull_consumer)),
@@ -317,8 +297,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'oe_CosEventComm_CAdmin'
%% Description:
%%-----------------------------------------------------------------
-'oe_CosEventComm_CAdmin'(doc) -> [""];
-'oe_CosEventComm_CAdmin'(suite) -> [];
'oe_CosEventComm_CAdmin'(_) ->
?nomatch(undefined, 'oe_CosEventComm_CAdmin':oe_tc(obtain_push_supplier)),
?nomatch(undefined, 'oe_CosEventComm_CAdmin':oe_tc(obtain_pull_supplier)),
@@ -339,8 +317,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'oe_CosEventComm_Channel'
%% Description:
%%-----------------------------------------------------------------
-'oe_CosEventComm_Channel'(doc) -> [""];
-'oe_CosEventComm_Channel'(suite) -> [];
'oe_CosEventComm_Channel'(_) ->
?nomatch(undefined, 'oe_CosEventComm_Channel':oe_tc(for_consumers)),
?nomatch(undefined, 'oe_CosEventComm_Channel':oe_tc(for_suppliers)),
@@ -362,8 +338,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'oe_CosEventComm_Event'
%% Description:
%%-----------------------------------------------------------------
-'oe_CosEventComm_Event'(doc) -> [""];
-'oe_CosEventComm_Event'(suite) -> [];
'oe_CosEventComm_Event'(_) ->
?nomatch(undefined, 'oe_CosEventComm_Event':oe_tc(send)),
?nomatch(undefined, 'oe_CosEventComm_Event':oe_tc(send_sync)),
@@ -380,8 +354,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'oe_CosEventComm_PullerS'
%% Description:
%%-----------------------------------------------------------------
-'oe_CosEventComm_PullerS'(doc) -> [""];
-'oe_CosEventComm_PullerS'(suite) -> [];
'oe_CosEventComm_PullerS'(_) ->
?nomatch(undefined, 'oe_CosEventComm_PullerS':oe_tc(connect_pull_consumer)),
?nomatch(undefined, 'oe_CosEventComm_PullerS':oe_tc(pull)),
@@ -405,8 +377,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'oe_CosEventComm_PusherS'
%% Description:
%%-----------------------------------------------------------------
-'oe_CosEventComm_PusherS'(doc) -> [""];
-'oe_CosEventComm_PusherS'(suite) -> [];
'oe_CosEventComm_PusherS'(_) ->
?nomatch(undefined, 'oe_CosEventComm_PusherS':oe_tc(connect_push_consumer)),
?nomatch(undefined, 'oe_CosEventComm_PusherS':oe_tc(disconnect_push_supplier)),
@@ -428,8 +398,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventComm_PullConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosEventComm_PullConsumer'(doc) -> [""];
-'CosEventComm_PullConsumer'(suite) -> [];
'CosEventComm_PullConsumer'(_) ->
?nomatch(undefined, 'CosEventComm_PullConsumer':oe_tc(disconnect_pull_consumer)),
?match(undefined, 'CosEventComm_PullConsumer':oe_tc(undefined)),
@@ -445,8 +413,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventComm_PullSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosEventComm_PullSupplier'(doc) -> [""];
-'CosEventComm_PullSupplier'(suite) -> [];
'CosEventComm_PullSupplier'(_) ->
?nomatch(undefined, 'CosEventComm_PullSupplier':oe_tc(pull)),
?nomatch(undefined, 'CosEventComm_PullSupplier':oe_tc(try_pull)),
@@ -464,8 +430,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventComm_PushConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosEventComm_PushConsumer'(doc) -> [""];
-'CosEventComm_PushConsumer'(suite) -> [];
'CosEventComm_PushConsumer'(_) ->
?nomatch(undefined, 'CosEventComm_PushConsumer':oe_tc(push)),
?nomatch(undefined, 'CosEventComm_PushConsumer':oe_tc(disconnect_push_consumer)),
@@ -482,8 +446,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventComm_PushSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosEventComm_PushSupplier'(doc) -> [""];
-'CosEventComm_PushSupplier'(suite) -> [];
'CosEventComm_PushSupplier'(_) ->
?nomatch(undefined, 'CosEventComm_PushSupplier':oe_tc(disconnect_push_supplier)),
?match(undefined, 'CosEventComm_PushSupplier':oe_tc(undefined)),
diff --git a/lib/cosEventDomain/test/event_domain_SUITE.erl b/lib/cosEventDomain/test/event_domain_SUITE.erl
index b80b16ae6f..031b7726c5 100644
--- a/lib/cosEventDomain/test/event_domain_SUITE.erl
+++ b/lib/cosEventDomain/test/event_domain_SUITE.erl
@@ -35,7 +35,7 @@
%% Macros
%%-----------------------------------------------------------------
--define(default_timeout, ?t:minutes(5)).
+-define(default_timeout, test_server:minutes(5)).
-define(match(ExpectedRes, Expr),
@@ -49,7 +49,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -89,12 +89,12 @@ cases() ->
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -129,15 +129,12 @@ end_per_suite(Config) when is_list(Config) ->
%%-----------------------------------------------------------------
%% Tests app file
%%-----------------------------------------------------------------
-app_test(doc) -> [];
-app_test(suite) -> [];
app_test(_Config) ->
ok=test_server:app_test(cosEventDomain),
ok.
-event_domain_api(doc) -> ["Testing the CosEventDomain Domain API", ""];
-event_domain_api(suite) -> [];
+%% Testing the CosEventDomain Domain API
event_domain_api(_Config) ->
%% We will setup a cluster looking like:
@@ -418,8 +415,7 @@ event_domain_api(_Config) ->
ok.
-event_domain_factory_api(doc) -> ["Testing the CosEventDomain Factory API", ""];
-event_domain_factory_api(suite) -> [];
+%% Testing the CosEventDomain Factory API
event_domain_factory_api(_Config) ->
Cyclic = #'CosNotification_Property'{name=?CycleDetection,
diff --git a/lib/cosEventDomain/test/generated_SUITE.erl b/lib/cosEventDomain/test/generated_SUITE.erl
index 51b627f0d6..172465da2f 100644
--- a/lib/cosEventDomain/test/generated_SUITE.erl
+++ b/lib/cosEventDomain/test/generated_SUITE.erl
@@ -29,7 +29,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -40,7 +40,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -51,7 +51,7 @@
Not ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS);
+ exit(AcTuAlReS);
_ ->
AcTuAlReS
end
@@ -63,7 +63,7 @@
case orber_tc:check_tc(TC) of
false ->
io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
- ?line exit(TC);
+ exit(TC);
true ->
true
end
@@ -123,12 +123,12 @@ end_per_group(_GroupName, Config) ->
%% Init and cleanup functions.
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -137,8 +137,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin'(doc) -> ["CosEventDomainAdmin"];
-'CosEventDomainAdmin'(suite) -> [];
'CosEventDomainAdmin'(_) ->
?match("CycleDetection", 'CosEventDomainAdmin':'CycleDetection'()),
?match(0, 'CosEventDomainAdmin':'AuthorizeCycles'()),
@@ -152,8 +150,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_DiamondSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_DiamondSeq'(doc) -> ["CosEventDomainAdmin_DiamondSeq"];
-'CosEventDomainAdmin_DiamondSeq'(suite) -> [];
'CosEventDomainAdmin_DiamondSeq'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_DiamondSeq':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/DiamondSeq:1.0",
@@ -166,8 +162,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_AlreadyExists'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_AlreadyExists'(doc) -> ["CosEventDomainAdmin_AlreadyExists"];
-'CosEventDomainAdmin_AlreadyExists'(suite) -> [];
'CosEventDomainAdmin_AlreadyExists'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_AlreadyExists':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/AlreadyExists:1.0",
@@ -180,8 +174,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_DomainIDSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_DomainIDSeq'(doc) -> ["CosEventDomainAdmin_DomainIDSeq"];
-'CosEventDomainAdmin_DomainIDSeq'(suite) -> [];
'CosEventDomainAdmin_DomainIDSeq'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_DomainIDSeq':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/DomainIDSeq:1.0",
@@ -194,8 +186,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_Connection'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_Connection'(doc) -> ["CosEventDomainAdmin_Connection"];
-'CosEventDomainAdmin_Connection'(suite) -> [];
'CosEventDomainAdmin_Connection'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_Connection':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/Connection:1.0",
@@ -208,8 +198,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_ConnectionIDSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_ConnectionIDSeq'(doc) -> ["CosEventDomainAdmin_ConnectionIDSeq"];
-'CosEventDomainAdmin_ConnectionIDSeq'(suite) -> [];
'CosEventDomainAdmin_ConnectionIDSeq'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_ConnectionIDSeq':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/ConnectionIDSeq:1.0",
@@ -222,8 +210,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_ConnectionNotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_ConnectionNotFound'(doc) -> ["CosEventDomainAdmin_ConnectionNotFound"];
-'CosEventDomainAdmin_ConnectionNotFound'(suite) -> [];
'CosEventDomainAdmin_ConnectionNotFound'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_ConnectionNotFound':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/ConnectionNotFound:1.0",
@@ -236,8 +222,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_CycleCreationForbidden'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_CycleCreationForbidden'(doc) -> ["CosEventDomainAdmin_CycleCreationForbidden"];
-'CosEventDomainAdmin_CycleCreationForbidden'(suite) -> [];
'CosEventDomainAdmin_CycleCreationForbidden'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_CycleCreationForbidden':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/CycleCreationForbidden:1.0",
@@ -250,8 +234,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_CycleSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_CycleSeq'(doc) -> ["CosEventDomainAdmin_CycleSeq"];
-'CosEventDomainAdmin_CycleSeq'(suite) -> [];
'CosEventDomainAdmin_CycleSeq'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_CycleSeq':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/CycleSeq:1.0",
@@ -264,8 +246,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_DiamondCreationForbidden'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_DiamondCreationForbidden'(doc) -> ["CosEventDomainAdmin_DiamondCreationForbidden"];
-'CosEventDomainAdmin_DiamondCreationForbidden'(suite) -> [];
'CosEventDomainAdmin_DiamondCreationForbidden'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_DiamondCreationForbidden':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/DiamondCreationForbidden:1.0",
@@ -278,8 +258,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_DomainNotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_DomainNotFound'(doc) -> ["CosEventDomainAdmin_DomainNotFound"];
-'CosEventDomainAdmin_DomainNotFound'(suite) -> [];
'CosEventDomainAdmin_DomainNotFound'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_DomainNotFound':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/DomainNotFound:1.0",
@@ -292,8 +270,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_MemberIDSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_MemberIDSeq'(doc) -> ["CosEventDomainAdmin_MemberIDSeq"];
-'CosEventDomainAdmin_MemberIDSeq'(suite) -> [];
'CosEventDomainAdmin_MemberIDSeq'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_MemberIDSeq':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/MemberIDSeq:1.0",
@@ -306,8 +282,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_RouteSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_RouteSeq'(doc) -> ["CosEventDomainAdmin_RouteSeq"];
-'CosEventDomainAdmin_RouteSeq'(suite) -> [];
'CosEventDomainAdmin_RouteSeq'(_) ->
?match(true, orber_tc:check_tc('CosEventDomainAdmin_RouteSeq':tc())),
?match("IDL:omg.org/CosEventDomainAdmin/RouteSeq:1.0",
@@ -320,8 +294,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_EventDomainFactory'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_EventDomainFactory'(doc) -> ["CosEventDomainAdmin_EventDomainFactory"];
-'CosEventDomainAdmin_EventDomainFactory'(suite) -> [];
'CosEventDomainAdmin_EventDomainFactory'(_) ->
?nomatch(undefined, 'CosEventDomainAdmin_EventDomainFactory':oe_tc(create_event_domain)),
?nomatch(undefined, 'CosEventDomainAdmin_EventDomainFactory':oe_tc(get_all_domains)),
@@ -340,8 +312,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosEventDomainAdmin_EventDomain'
%% Description:
%%-----------------------------------------------------------------
-'CosEventDomainAdmin_EventDomain'(doc) -> ["CosEventDomainAdmin_EventDomain"];
-'CosEventDomainAdmin_EventDomain'(suite) -> [];
'CosEventDomainAdmin_EventDomain'(_) ->
?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(add_channel)),
?nomatch(undefined, 'CosEventDomainAdmin_EventDomain':oe_tc(get_all_channels)),
diff --git a/lib/cosFileTransfer/test/fileTransfer_SUITE.erl b/lib/cosFileTransfer/test/fileTransfer_SUITE.erl
index 7ca6eaf7b3..12aef2913a 100644
--- a/lib/cosFileTransfer/test/fileTransfer_SUITE.erl
+++ b/lib/cosFileTransfer/test/fileTransfer_SUITE.erl
@@ -32,7 +32,7 @@
-include_lib("common_test/include/ct.hrl").
%%--------------- DEFINES ------------------------------------
--define(default_timeout, ?t:minutes(20)).
+-define(default_timeout, test_server:minutes(20)).
-define(match(ExpectedRes, Expr),
fun() ->
AcTuAlReS = (catch (Expr)),
@@ -122,12 +122,12 @@ cases() ->
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -192,7 +192,6 @@ end_per_suite(Config) ->
-define(FTP_PASS, "fileTransfer_SUITE@localhost").
-define(TEST_DIR,["/", "incoming"]).
-
-define(FTP_PORT, 21).
-define(FTP_ACC, "anonymous").
@@ -203,53 +202,48 @@ end_per_suite(Config) ->
-define(TEST_FILE_DATA, "If this file exists after a completed test an error occurred.").
-define(TEST_FILE_DATA2, "1234567890123").
-
%%-----------------------------------------------------------------
%% aoo-file test
%%-----------------------------------------------------------------
-app_test(doc) -> [];
-app_test(suite) -> [];
app_test(_Config) ->
- ?line ok=?t:app_test(cosFileTransfer),
+ ok=?t:app_test(cosFileTransfer),
ok.
%%-----------------------------------------------------------------
%% FileIterator API tests
%%-----------------------------------------------------------------
-fileIterator_api(doc) -> ["CosFileTransfer FileIterator API tests.", ""];
-fileIterator_api(suite) -> [];
fileIterator_api(Config) ->
case ftp_host(Config) of
{skipped, SkippedReason} ->
{skipped, SkippedReason};
Host ->
- ?line {ok, Node} = create_node("fileIterator_api", 4008, normal),
- ?line ?match(ok, remote_apply(Node, ?MODULE, install_data,
+ {ok, Node} = create_node("fileIterator_api", 4008, normal),
+ ?match(ok, remote_apply(Node, ?MODULE, install_data,
[tcp, {{'NATIVE',
'cosFileTransferNATIVE_file'}, Host,
"fileIterator_api"}])),
%% Create a Virtual File System.
-%% ?line VFS = ?match({_,_,_,_,_,_},
+%% VFS = ?match({_,_,_,_,_,_},
%% cosFileTransferApp:create_VFS({'NATIVE',
%% 'cosFileTransferNATIVE_file'},
%% [], Host, ?FTP_PORT)),
- ?line VFS = ?matchnopr({'IOP_IOR',"IDL:omg.org/CosFileTransfer/VirtualFileSystem:1.0",_},
+ VFS = ?matchnopr({'IOP_IOR',"IDL:omg.org/CosFileTransfer/VirtualFileSystem:1.0",_},
corba:string_to_object("corbaname::1.2@localhost:4008/NameService#fileIterator_api")),
%% Start two File Transfer Sessions (Source and Target).
- ?line {FS, Dir} = ?matchnopr({{_,_,_},{_,_,_}},
+ {FS, Dir} = ?matchnopr({{_,_,_},{_,_,_}},
'CosFileTransfer_VirtualFileSystem':login(VFS,
?FTP_USER,
?FTP_PASS,
?FTP_ACC)),
%% Do some basic test on one of the Directories attributes.
- ?line ?match([_H|_], 'CosFileTransfer_Directory':'_get_name'(Dir)),
- ?line ?match([_H|_], 'CosFileTransfer_Directory':'_get_complete_file_name'(Dir)),
- ?line ?match({'IOP_IOR',[],[]}, 'CosFileTransfer_Directory':'_get_parent'(Dir)),
- ?line ?matchnopr(FS, 'CosFileTransfer_Directory':'_get_associated_session'(Dir)),
+ ?match([_H|_], 'CosFileTransfer_Directory':'_get_name'(Dir)),
+ ?match([_H|_], 'CosFileTransfer_Directory':'_get_complete_file_name'(Dir)),
+ ?match({'IOP_IOR',[],[]}, 'CosFileTransfer_Directory':'_get_parent'(Dir)),
+ ?matchnopr(FS, 'CosFileTransfer_Directory':'_get_associated_session'(Dir)),
{ok,[],FileIter} = ?match({ok,[],_}, 'CosFileTransfer_Directory':list(Dir, 0)),
%% Usually the working directory for the test is not empty so no need for
%% creating files of our own?!
@@ -259,23 +253,23 @@ fileIterator_api(Config) ->
if
Children > 5 ->
- ?line ?matchnopr({true, _}, 'CosFileTransfer_FileIterator':next_one(FileIter)),
- ?line ?matchnopr({true, _}, 'CosFileTransfer_FileIterator':next_n(FileIter, 3)),
- ?line ?matchnopr({true, _}, 'CosFileTransfer_FileIterator':next_n(FileIter,
+ ?matchnopr({true, _}, 'CosFileTransfer_FileIterator':next_one(FileIter)),
+ ?matchnopr({true, _}, 'CosFileTransfer_FileIterator':next_n(FileIter, 3)),
+ ?matchnopr({true, _}, 'CosFileTransfer_FileIterator':next_n(FileIter,
Children)),
- ?line ?matchnopr({false, _}, 'CosFileTransfer_FileIterator':next_one(FileIter)),
- ?line ?match({false, []}, 'CosFileTransfer_FileIterator':next_n(FileIter, 1)),
+ ?matchnopr({false, _}, 'CosFileTransfer_FileIterator':next_one(FileIter)),
+ ?match({false, []}, 'CosFileTransfer_FileIterator':next_n(FileIter, 1)),
ok;
true ->
ok
end,
- ?line ?match(ok, 'CosFileTransfer_FileIterator':destroy(FileIter)),
- ?line ?match(false, corba_object:non_existent(FS)),
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FS)),
+ ?match(ok, 'CosFileTransfer_FileIterator':destroy(FileIter)),
+ ?match(false, corba_object:non_existent(FS)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FS)),
%% To make sure Orber can remove it from mnesia.
timer:sleep(1000),
- ?line ?match(true, corba_object:non_existent(FS)),
- ?line ?match(ok, remote_apply(Node, ?MODULE, uninstall_data, ["fileIterator_api"])),
+ ?match(true, corba_object:non_existent(FS)),
+ ?match(ok, remote_apply(Node, ?MODULE, uninstall_data, ["fileIterator_api"])),
stop_orber_remote(Node, normal),
ok
end.
@@ -284,36 +278,27 @@ fileIterator_api(Config) ->
%%-----------------------------------------------------------------
%% FileTransferSession API tests
%%-----------------------------------------------------------------
-fts_ftp_file_api(doc) -> ["CosFileTransfer FTP FileTransferSession API tests.", ""];
-fts_ftp_file_api(suite) -> [];
fts_ftp_file_api(Config) ->
- ?line {ok, Node} = create_node("ftp_file_api", 4004, normal),
+ {ok, Node} = create_node("ftp_file_api", 4004, normal),
file_helper(Config, 'FTP', ?TEST_DIR, Node, 4004, "ftp_file_api", tcp).
-fts_ftp_file_ssl_api(doc) -> ["CosFileTransfer FTP FileTransferSession API tests.", ""];
-fts_ftp_file_ssl_api(suite) -> [];
fts_ftp_file_ssl_api(Config) ->
- ?line {ok, Node} = create_node("ftp_file_api_ssl", {4005, 1}, ssl),
+ {ok, Node} = create_node("ftp_file_api_ssl", {4005, 1}, ssl),
file_helper(Config, 'FTP', ?TEST_DIR, Node, 4005, "ftp_file_api_ssl", ssl).
-fts_native_file_api(doc) -> ["CosFileTransfer NATIVE FileTransferSession API tests.", ""];
-fts_native_file_api(suite) -> [];
fts_native_file_api(Config) ->
- ?line {ok, Node} = create_node("native_file_api", 4006, normal),
+ {ok, Node} = create_node("native_file_api", 4006, normal),
{ok, Pwd} = file:get_cwd(),
file_helper(Config,{'NATIVE', 'cosFileTransferNATIVE_file'},filename:split(Pwd),
Node, 4006, "native_file_api", tcp).
-fts_native_file_ssl_api(doc) -> ["CosFileTransfer NATIVE FileTransferSession API tests.", ""];
-fts_native_file_ssl_api(suite) -> [];
fts_native_file_ssl_api(Config) ->
- ?line {ok, Node} = create_node("native_file_ssl_api", {4007, 1}, ssl),
+ {ok, Node} = create_node("native_file_ssl_api", {4007, 1}, ssl),
{ok, Pwd} = file:get_cwd(),
file_helper(Config,{'NATIVE', 'cosFileTransferNATIVE_file'},filename:split(Pwd),
Node, 4007, "native_file_ssl_api", ssl).
-
file_helper(Config, WhichType, TEST_DIR, Node, Port, Name, Type) ->
case ftp_host(Config) of
{skipped, SkippedReason} ->
@@ -326,47 +311,47 @@ file_helper(Config, WhichType, TEST_DIR, Node, Port, Name, Type) ->
io:format("<<<<<< CosFileTransfer Testing Configuration >>>>>>~n",[]),
io:format("Source: ~p~nTarget: ~p~n", [TEST_SOURCE, TEST_TARGET]),
- ?line ?match(ok, remote_apply(Node, ?MODULE, install_data,
+ ?match(ok, remote_apply(Node, ?MODULE, install_data,
[Type, {WhichType, Host, Name}])),
- ?line VFST = ?match({'IOP_IOR',"IDL:omg.org/CosFileTransfer/VirtualFileSystem:1.0",_},
+ VFST = ?match({'IOP_IOR',"IDL:omg.org/CosFileTransfer/VirtualFileSystem:1.0",_},
corba:string_to_object("corbaname::1.2@localhost:"++integer_to_list(Port)++"/NameService#"++Name)),
%% Create a Virtual File System.
- ?line VFS = ?match({_,_,_,_,_,_},
+ VFS = ?match({_,_,_,_,_,_},
cosFileTransferApp:create_VFS(WhichType, [], Host, ?FTP_PORT,
[{protocol, Type}])),
%% Start two File Transfer Sessions (Source and Target).
- ?line {FST, _DirT} = ?match({{_,_,_},{_,_,_}},
+ {FST, _DirT} = ?match({{_,_,_},{_,_,_}},
'CosFileTransfer_VirtualFileSystem':login(VFST,
?FTP_USER,
?FTP_PASS,
?FTP_ACC)),
- ?line {FSS, DirS} = ?match({{_,_,_,_,_,_},{_,_,_,_,_,_}},
+ {FSS, DirS} = ?match({{_,_,_,_,_,_},{_,_,_,_,_,_}},
'CosFileTransfer_VirtualFileSystem':login(VFS,
?FTP_USER,
?FTP_PASS,
?FTP_ACC)),
%% Do some basic test on one of the Directories attributes.
- ?line ?match([_H|_], 'CosFileTransfer_Directory':'_get_name'(DirS)),
- ?line ?match([_H|_], 'CosFileTransfer_Directory':'_get_complete_file_name'(DirS)),
- ?line ?match({'IOP_IOR',[],[]}, 'CosFileTransfer_Directory':'_get_parent'(DirS)),
- ?line ?match(FSS, 'CosFileTransfer_Directory':'_get_associated_session'(DirS)),
+ ?match([_H|_], 'CosFileTransfer_Directory':'_get_name'(DirS)),
+ ?match([_H|_], 'CosFileTransfer_Directory':'_get_complete_file_name'(DirS)),
+ ?match({'IOP_IOR',[],[]}, 'CosFileTransfer_Directory':'_get_parent'(DirS)),
+ ?match(FSS, 'CosFileTransfer_Directory':'_get_associated_session'(DirS)),
%% Get a FileList before we create any new Files
- ?line #'CosFileTransfer_FileWrapper'{the_file = Dir} =
+ #'CosFileTransfer_FileWrapper'{the_file = Dir} =
?match({'CosFileTransfer_FileWrapper', _, ndirectory},
'CosFileTransfer_FileTransferSession':get_file(FSS, TEST_DIR)),
- ?line {ok,FileList, Iter1} = ?match({ok,_,_}, 'CosFileTransfer_Directory':list(Dir, 10)),
- ?line loop_files(FileList),
+ {ok,FileList, Iter1} = ?match({ok,_,_}, 'CosFileTransfer_Directory':list(Dir, 10)),
+ loop_files(FileList),
case Iter1 of
{'IOP_IOR',[],[]} ->
ok;
_->
- ?line ?match(ok, 'CosFileTransfer_FileIterator':destroy(Iter1))
+ ?match(ok, 'CosFileTransfer_FileIterator':destroy(Iter1))
end,
#any{value=Count1} = ?match({any, _, _}, 'CosPropertyService_PropertySet':
@@ -374,17 +359,17 @@ file_helper(Config, WhichType, TEST_DIR, Node, Port, Name, Type) ->
%% Now we want to transfer a file from source to target. First, we'll create
%% a a file to work with.
- ?line create_file_on_source_node(WhichType, Config, Host,
+ create_file_on_source_node(WhichType, Config, Host,
filename:join(TEST_SOURCE), TEST_DIR,
?TEST_FILE_DATA),
- ?line create_file_on_source_node(WhichType, Config, Host,
+ create_file_on_source_node(WhichType, Config, Host,
filename:join(TEST_SOURCE2), TEST_DIR,
?TEST_FILE_DATA2),
- ?line #'CosFileTransfer_FileWrapper'{the_file = FileS} =
+ #'CosFileTransfer_FileWrapper'{the_file = FileS} =
?matchnopr({'CosFileTransfer_FileWrapper', _, nfile},
'CosFileTransfer_FileTransferSession':get_file(FSS, TEST_SOURCE)),
- ?line #'CosFileTransfer_FileWrapper'{the_file = FileS2} =
+ #'CosFileTransfer_FileWrapper'{the_file = FileS2} =
?matchnopr({'CosFileTransfer_FileWrapper', _, nfile},
'CosFileTransfer_FileTransferSession':get_file(FSS, TEST_SOURCE2)),
@@ -394,27 +379,27 @@ file_helper(Config, WhichType, TEST_DIR, Node, Port, Name, Type) ->
?match(true, (Count1+2 == Count2)),
%% Create a target File
- ?line FileT = ?matchnopr({_,_,_},
+ FileT = ?matchnopr({_,_,_},
'CosFileTransfer_FileTransferSession':create_file(FST, TEST_TARGET)),
%% Try to delete the non-existing file.
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_FileTransferSession':delete(FST, FileT)),
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':transfer(FSS, FileS, FileT)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':transfer(FSS, FileS, FileT)),
%% Remove this test when ftp supports append.
case WhichType of
{'NATIVE', 'cosFileTransferNATIVE_file'} ->
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':append(FSS, FileS, FileT)),
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':insert(FSS, FileS2, FileT, 7));
+ ?match(ok, 'CosFileTransfer_FileTransferSession':append(FSS, FileS, FileT)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':insert(FSS, FileS2, FileT, 7));
_->
ok
end,
%% Delete source and target files
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FSS, FileS)),
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FSS, FileS2)),
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FST, FileT)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FSS, FileS)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FSS, FileS2)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FST, FileT)),
%% Should be back where we started.
timer:sleep(2000),
@@ -423,15 +408,15 @@ file_helper(Config, WhichType, TEST_DIR, Node, Port, Name, Type) ->
?match(true, (Count1 == Count3)),
- ?line ?match(false, corba_object:non_existent(FSS)),
- ?line ?match(false, corba_object:non_existent(FST)),
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FSS)),
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FST)),
+ ?match(false, corba_object:non_existent(FSS)),
+ ?match(false, corba_object:non_existent(FST)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FSS)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FST)),
%% To make sure Orber can remove it from mnesia.
timer:sleep(2000),
- ?line ?match(true, corba_object:non_existent(FSS)),
- ?line ?match(true, corba_object:non_existent(FST)),
- ?line ?match(ok, remote_apply(Node, ?MODULE, uninstall_data, [Name])),
+ ?match(true, corba_object:non_existent(FSS)),
+ ?match(true, corba_object:non_existent(FST)),
+ ?match(ok, remote_apply(Node, ?MODULE, uninstall_data, [Name])),
stop_orber_remote(Node, normal),
ok
end.
@@ -439,17 +424,12 @@ file_helper(Config, WhichType, TEST_DIR, Node, Port, Name, Type) ->
%%-----------------------------------------------------------------
%% FileTransferSession API tests
%%-----------------------------------------------------------------
-fts_ftp_dir_api(doc) -> ["CosFileTransfer FTP FileTransferSession API tests.", ""];
-fts_ftp_dir_api(suite) -> [];
fts_ftp_dir_api(Config) ->
- ?line {ok, Node} = create_node("ftp_dir_api", 4009, normal),
+ {ok, Node} = create_node("ftp_dir_api", 4009, normal),
dir_helper(Config, 'FTP', ?TEST_DIR, Node, 4009, "ftp_dir_api").
-
-fts_native_dir_api(doc) -> ["CosFileTransfer NATIVE FileTransferSession API tests.", ""];
-fts_native_dir_api(suite) -> [];
fts_native_dir_api(Config) ->
- ?line {ok, Node} = create_node("native_dir_api", 4010, normal),
+ {ok, Node} = create_node("native_dir_api", 4010, normal),
{ok, Pwd} = file:get_cwd(),
dir_helper(Config, {'NATIVE', 'cosFileTransferNATIVE_file'},
filename:split(Pwd), Node, 4010, "native_dir_api").
@@ -465,235 +445,235 @@ dir_helper(Config, WhichType, TEST_DIR, Node, Port, Name) ->
io:format("<<<<<< CosFileTransfer Testing Configuration >>>>>>~n",[]),
io:format("Top Dir: ~p~nLevel2 Dir: ~p~n", [TEST_DIR_LEVEL1, TEST_DIR_LEVEL2]),
- ?line ?match(ok, remote_apply(Node, ?MODULE, install_data,
+ ?match(ok, remote_apply(Node, ?MODULE, install_data,
[tcp, {WhichType, Host, Name}])),
- ?line VFS = ?matchnopr({'IOP_IOR',"IDL:omg.org/CosFileTransfer/VirtualFileSystem:1.0",_},
+ VFS = ?matchnopr({'IOP_IOR',"IDL:omg.org/CosFileTransfer/VirtualFileSystem:1.0",_},
corba:string_to_object("corbaname::1.2@localhost:"++integer_to_list(Port)++"/NameService#"++Name)),
%% Start two File Transfer Sessions (Source and Target).
- ?line {FS, DirS} = ?matchnopr({{'IOP_IOR',_,_}, _},
+ {FS, DirS} = ?matchnopr({{'IOP_IOR',_,_}, _},
'CosFileTransfer_VirtualFileSystem':login(VFS,
?FTP_USER,
?FTP_PASS,
?FTP_ACC)),
%% Do some basic test on one of the Directories attributes.
- ?line ?match([_H|_], 'CosFileTransfer_Directory':'_get_name'(DirS)),
- ?line ?match([_H|_], 'CosFileTransfer_Directory':'_get_complete_file_name'(DirS)),
- ?line ?match({'IOP_IOR',[],[]}, 'CosFileTransfer_Directory':'_get_parent'(DirS)),
- ?line ?matchnopr(FS, 'CosFileTransfer_Directory':'_get_associated_session'(DirS)),
+ ?match([_H|_], 'CosFileTransfer_Directory':'_get_name'(DirS)),
+ ?match([_H|_], 'CosFileTransfer_Directory':'_get_complete_file_name'(DirS)),
+ ?match({'IOP_IOR',[],[]}, 'CosFileTransfer_Directory':'_get_parent'(DirS)),
+ ?matchnopr(FS, 'CosFileTransfer_Directory':'_get_associated_session'(DirS)),
%% Create a Root Directory. Currently we only need to create one but
%% later on, when supporting other protocols than FTP it's not enough.
- ?line Dir1 = 'CosFileTransfer_FileTransferSession':create_directory(FS,
+ Dir1 = 'CosFileTransfer_FileTransferSession':create_directory(FS,
TEST_DIR_LEVEL1),
io:format("<<<<<< CosFileTransfer Testing Properties >>>>>>~n",[]),
- ?line ?match({ok, [tk_long, tk_boolean]},
+ ?match({ok, [tk_long, tk_boolean]},
'CosFileTransfer_Directory':get_allowed_property_types(Dir1)),
- ?line ?match({ok, [_,_]},
+ ?match({ok, [_,_]},
'CosFileTransfer_Directory':get_allowed_properties(Dir1)),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':define_property_with_mode(Dir1,
"num_children",
#any{typecode=tk_long, value=0},
fixed_readonly)),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':define_property_with_mode(Dir1,
"wrong",
#any{typecode=tk_long, value=0},
fixed_readonly)),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':define_property_with_mode(Dir1,
"num_children",
#any{typecode=tk_short, value=0},
fixed_readonly)),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':define_property_with_mode(Dir1,
"num_children",
#any{typecode=tk_long, value=0},
fixed_normal)),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':define_properties_with_modes(Dir1,
[#'CosPropertyService_PropertyDef'
{property_name = "num_children",
property_value = #any{typecode=tk_long, value=0},
property_mode = fixed_readonly}])),
- ?line ?match(fixed_readonly,
+ ?match(fixed_readonly,
'CosFileTransfer_Directory':get_property_mode(Dir1, "num_children")),
- ?line ?match({true,
+ ?match({true,
[#'CosPropertyService_PropertyMode'{property_name = "num_children",
property_mode = fixed_readonly}]},
'CosFileTransfer_Directory':get_property_modes(Dir1, ["num_children"])),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':set_property_mode(Dir1, "num_children", fixed_readonly)),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':
set_property_modes(Dir1,
[#'CosPropertyService_PropertyMode'
{property_name = "num_children",
property_mode = fixed_readonly}])),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':
set_property_modes(Dir1,
[#'CosPropertyService_PropertyMode'
{property_name = "wrong",
property_mode = fixed_readonly}])),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':
set_property_modes(Dir1,
[#'CosPropertyService_PropertyMode'
{property_name = "num_children",
property_mode = fixed_normal}])),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':define_property(Dir1,
"num_children",
#any{typecode=tk_long, value=0})),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':define_property(Dir1,
"wrong",
#any{typecode=tk_long, value=0})),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':define_property(Dir1,
"num_children",
#any{typecode=tk_short, value=0})),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':define_property(Dir1,
"num_children",
#any{typecode=tk_long, value=0})),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':
define_properties(Dir1,
[#'CosPropertyService_Property'
{property_name = "num_children",
property_value = #any{typecode=tk_long,
value=0}}])),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':
define_properties(Dir1,
[#'CosPropertyService_Property'
{property_name = "wrong",
property_value = #any{typecode=tk_long,
value=0}}])),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':
define_properties(Dir1,
[#'CosPropertyService_Property'
{property_name = "num_children",
property_value = #any{typecode=tk_short,
value=0}}])),
- ?line ?match(2, 'CosFileTransfer_Directory':get_number_of_properties(Dir1)),
+ ?match(2, 'CosFileTransfer_Directory':get_number_of_properties(Dir1)),
- ?line ?match({ok, ["num_children", "is_directory"], {'IOP_IOR',[],[]}},
+ ?match({ok, ["num_children", "is_directory"], {'IOP_IOR',[],[]}},
'CosFileTransfer_Directory':get_all_property_names(Dir1, 2)),
- ?line ?match({ok, ["is_directory"], _},
+ ?match({ok, ["is_directory"], _},
'CosFileTransfer_Directory':get_all_property_names(Dir1, 1)),
- ?line ?match(#any{},
+ ?match(#any{},
'CosFileTransfer_Directory':get_property_value(Dir1, "num_children")),
- ?line ?match(#any{},
+ ?match(#any{},
'CosFileTransfer_Directory':get_property_value(Dir1, "is_directory")),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':get_property_value(Dir1, "wrong")),
- ?line ?match({true,
+ ?match({true,
[#'CosPropertyService_Property'{property_name = "num_children"}]},
'CosFileTransfer_Directory':get_properties(Dir1, ["num_children"])),
- ?line ?match({false,
+ ?match({false,
[#'CosPropertyService_Property'{property_name = "wrong"}]},
'CosFileTransfer_Directory':get_properties(Dir1, ["wrong"])),
- ?line ?match({ok, [_],_},
+ ?match({ok, [_],_},
'CosFileTransfer_Directory':get_all_properties(Dir1, 1)),
- ?line ?match({ok, [_,_], {'IOP_IOR',[],[]}},
+ ?match({ok, [_,_], {'IOP_IOR',[],[]}},
'CosFileTransfer_Directory':get_all_properties(Dir1, 2)),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':delete_property(Dir1, "num_children")),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':delete_property(Dir1, "wrong")),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':delete_properties(Dir1, ["num_children"])),
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_Directory':delete_properties(Dir1, ["wrong"])),
- ?line ?match(false, 'CosFileTransfer_Directory':delete_all_properties(Dir1)),
- ?line ?match(true,
+ ?match(false, 'CosFileTransfer_Directory':delete_all_properties(Dir1)),
+ ?match(true,
'CosFileTransfer_Directory':is_property_defined(Dir1, "num_children")),
- ?line ?match(false,
+ ?match(false,
'CosFileTransfer_Directory':is_property_defined(Dir1, "wrong")),
%% The Top Dir should be empty and ...
- ?line ?match({ok,[],_}, 'CosFileTransfer_Directory':list(Dir1, 1000)),
- ?line ?match( #any{value=0},
+ ?match({ok,[],_}, 'CosFileTransfer_Directory':list(Dir1, 1000)),
+ ?match( #any{value=0},
'CosPropertyService_PropertySet':get_property_value(Dir1, "num_children")),
%% Create a sub-directory.
- ?line Dir2 = 'CosFileTransfer_FileTransferSession':create_directory(FS,
+ Dir2 = 'CosFileTransfer_FileTransferSession':create_directory(FS,
TEST_DIR_LEVEL2),
- ?line ?match( #any{value=1},
+ ?match( #any{value=1},
'CosPropertyService_PropertySet':get_property_value(Dir1, "num_children")),
- ?line ?match({ok, [_,_], {'IOP_IOR',[],[]}},
+ ?match({ok, [_,_], {'IOP_IOR',[],[]}},
'CosFileTransfer_Directory':get_all_properties(Dir1, 2)),
- ?line {_,_,Iterator1} = ?match({ok, [_], _},
+ {_,_,Iterator1} = ?match({ok, [_], _},
'CosFileTransfer_Directory':get_all_properties(Dir1, 1)),
- ?line ?match({false, [_]},
+ ?match({false, [_]},
'CosPropertyService_PropertiesIterator':next_n(Iterator1,4)),
- ?line {_,_,Iterator0} = ?match({ok, [], _},
+ {_,_,Iterator0} = ?match({ok, [], _},
'CosFileTransfer_Directory':get_all_properties(Dir1, 0)),
- ?line ?match({false, [_, {'CosPropertyService_Property',
+ ?match({false, [_, {'CosPropertyService_Property',
"num_children",{any,tk_long,1}}]},
'CosPropertyService_PropertiesIterator':next_n(Iterator0,4)),
- ?line ?match({true,
+ ?match({true,
[#'CosPropertyService_Property'{property_name = "num_children"}]},
'CosFileTransfer_Directory':get_properties(Dir1, ["num_children"])),
%% The Top Directory is not emtpy any more and ...
- ?line {ok,[#'CosFileTransfer_FileWrapper'{the_file = DirRef}],_} =
+ {ok,[#'CosFileTransfer_FileWrapper'{the_file = DirRef}],_} =
?matchnopr({ok,[{'CosFileTransfer_FileWrapper', _, ndirectory}],_},
'CosFileTransfer_Directory':list(Dir1, 1000)),
%% ... its name eq. to 'TEST_DIR_LEVEL2'
- ?line ?match(TEST_DIR_LEVEL2,
+ ?match(TEST_DIR_LEVEL2,
'CosFileTransfer_Directory':'_get_complete_file_name'(DirRef)),
- ?line #'CosFileTransfer_FileWrapper'{the_file = Dir3} =
+ #'CosFileTransfer_FileWrapper'{the_file = Dir3} =
?matchnopr({'CosFileTransfer_FileWrapper', _, ndirectory},
'CosFileTransfer_FileTransferSession':get_file(FS, TEST_DIR_LEVEL1)),
%% Must get the same result for the 'get_file' operation.
- ?line {ok,[#'CosFileTransfer_FileWrapper'{the_file = DirRef2}],_} =
+ {ok,[#'CosFileTransfer_FileWrapper'{the_file = DirRef2}],_} =
?matchnopr({ok,[{'CosFileTransfer_FileWrapper', _, ndirectory}],_},
'CosFileTransfer_Directory':list(Dir3,1000)),
- ?line ?match(TEST_DIR_LEVEL2,
+ ?match(TEST_DIR_LEVEL2,
'CosFileTransfer_Directory':'_get_complete_file_name'(DirRef2)),
%% Since the top directory isn't empty deleting it must fail.
- ?line ?match({'EXCEPTION', _},
+ ?match({'EXCEPTION', _},
'CosFileTransfer_FileTransferSession':delete(FS, Dir1)),
%% Delete the sub-directory and ...
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FS, Dir2)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FS, Dir2)),
%% ... see if the top directory realyy is empty.
- ?line ?match({ok,[],_}, 'CosFileTransfer_Directory':list(Dir1, 1000)),
+ ?match({ok,[],_}, 'CosFileTransfer_Directory':list(Dir1, 1000)),
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FS, Dir1)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':delete(FS, Dir1)),
%% Test if the top directory been removed as intended.
- ?line ?match({'EXCEPTION', {'CosFileTransfer_FileNotFoundException', _, _}},
+ ?match({'EXCEPTION', {'CosFileTransfer_FileNotFoundException', _, _}},
'CosFileTransfer_FileTransferSession':get_file(FS, TEST_DIR_LEVEL1)),
- ?line ?match(false, corba_object:non_existent(FS)),
- ?line ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FS)),
+ ?match(false, corba_object:non_existent(FS)),
+ ?match(ok, 'CosFileTransfer_FileTransferSession':logout(FS)),
%% To make sure Orber can remove it from mnesia.
timer:sleep(1000),
- ?line ?match(true, corba_object:non_existent(FS)),
- ?line ?match(ok, remote_apply(Node, ?MODULE, uninstall_data, [Name])),
+ ?match(true, corba_object:non_existent(FS)),
+ ?match(ok, remote_apply(Node, ?MODULE, uninstall_data, [Name])),
stop_orber_remote(Node, normal),
ok
end.
@@ -790,10 +770,10 @@ create_node(Name, Port, Retries, Type, Args, Options) ->
[_, Host] = ?match([_,_],string:tokens(atom_to_list(node()), [$@])),
case starter(Host, Name, Args) of
{ok, NewNode} ->
- ?line ?match(pong, net_adm:ping(NewNode)),
+ ?match(pong, net_adm:ping(NewNode)),
{ok, Cwd} = file:get_cwd(),
Path = code:get_path(),
- ?line ?match(ok, rpc:call(NewNode, file, set_cwd, [Cwd])),
+ ?match(ok, rpc:call(NewNode, file, set_cwd, [Cwd])),
true = rpc:call(NewNode, code, set_path, [Path]),
?match(ok, start_orber_remote(NewNode, Type, Options, Port)),
spawn_link(NewNode, ?MODULE, slave_sup, []),
@@ -939,7 +919,7 @@ install_data(Protocol, {WhichType, Host, Name}) ->
io:format("<<<<<< Starting ~p/~p VFS at ~p/~p>>>>>>~n",
[Protocol, WhichType, Host, Name]),
%% Create a Virtual File System.
- ?line VFS = ?match({_,_,_,_,_,_},
+ VFS = ?match({_,_,_,_,_,_},
cosFileTransferApp:create_VFS(WhichType, [], Host, ?FTP_PORT,
[{protocol, Protocol}])),
NS = corba:resolve_initial_references("NameService"),
@@ -948,9 +928,9 @@ install_data(Protocol, {WhichType, Host, Name}) ->
'CosNaming_NamingContext':rebind(NS, N, VFS).
uninstall_data(Name) ->
- ?line VFS = ?match({_,_,_,_,_,_},
+ VFS = ?match({_,_,_,_,_,_},
corba:string_to_object("corbaname:rir:/NameService#"++Name)),
- ?line ?match(ok, corba:dispose(VFS)),
+ ?match(ok, corba:dispose(VFS)),
ok.
diff --git a/lib/cosNotification/test/eventDB_SUITE.erl b/lib/cosNotification/test/eventDB_SUITE.erl
index 337c7effed..a0c47ad4c7 100644
--- a/lib/cosNotification/test/eventDB_SUITE.erl
+++ b/lib/cosNotification/test/eventDB_SUITE.erl
@@ -45,7 +45,7 @@
-include_lib("common_test/include/ct.hrl").
%%--------------- DEFINES ------------------------------------
--define(default_timeout, ?t:minutes(20)).
+-define(default_timeout, test_server:minutes(20)).
-define(match(ExpectedRes, Expr),
fun() ->
AcTuAlReS = (catch (Expr)),
@@ -57,7 +57,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -297,14 +297,13 @@ cases() ->
%%-----------------------------------------------------------------
%% Init and cleanup functions.
%%-----------------------------------------------------------------
-
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -333,12 +332,10 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% cosNotification_eventDB lookup API tests
%%-----------------------------------------------------------------
-mapping_filter_api(doc) -> ["The event DB is used to store events which cannot be",
- "delivered at once. This case is supposed to test",
- "that the events are delivered in the correct order",
- "if a MappingFilter have benn associated.",
- ""];
-mapping_filter_api(suite) -> [];
+%% The event DB is used to store events which cannot be
+%% delivered at once. This case is supposed to test
+%% that the events are delivered in the correct order
+%% if a MappingFilter have benn associated.
mapping_filter_api(_Config) ->
InitQoS = ?not_CreateInitQoS(),
InitQoS2 = ?not_SetMaxEventsPerConsumer(InitQoS,100),
@@ -405,12 +402,10 @@ do_lookup(QoS, Events, Return, Txt, DLFilter, PrioFilter, Timeout) ->
%%-----------------------------------------------------------------
%% cosNotification_eventDB discard API tests
%%-----------------------------------------------------------------
-discard_api(doc) -> ["The event DB is used to store events which cannot be",
- "delivered at once. If MaxEvents limit is reached there",
- "different ways we can discard the. This case will test",
- "all permutations of order and discard policies.",
- ""];
-discard_api(suite) -> [];
+%% The event DB is used to store events which cannot be
+%% delivered at once. If MaxEvents limit is reached there
+%% different ways we can discard the. This case will test
+%% all permutations of order and discard policies.
discard_api(_Config) ->
InitQoS1 = ?not_CreateInitQoS(),
InitQoS2 = ?not_SetPriority(InitQoS1, 10),
@@ -523,11 +518,9 @@ do_discard(Events, QoS, Reply, Txt) ->
%%-----------------------------------------------------------------
%% cosNotification_eventDB lookup API tests
%%-----------------------------------------------------------------
-lookup_api(doc) -> ["The event DB is used to store events which cannot be",
- "delivered at once. This case is supposed to test",
- "that the events are delivered in the correct order.",
- ""];
-lookup_api(suite) -> [];
+%% The event DB is used to store events which cannot be
+%% delivered at once. This case is supposed to test
+%% that the events are delivered in the correct order.
lookup_api(_Config) ->
InitQoS = ?not_CreateInitQoS(),
InitQoS2 = ?not_SetMaxEventsPerConsumer(InitQoS,100),
@@ -562,11 +555,9 @@ do_lookup(QoS, Events, Return, Txt) ->
%%-----------------------------------------------------------------
%% cosNotification_eventDB max events API tests
%%-----------------------------------------------------------------
-max_events_api(doc) -> ["The event DB is used to store events which cannot be",
- "delivered at once. If the MaxEvents QoS is updated we must be",
- "able to reduce the amount of stored events.",
- ""];
-max_events_api(suite) -> [];
+%% The event DB is used to store events which cannot be
+%% delivered at once. If the MaxEvents QoS is updated we must be
+%% able to reduce the amount of stored events.
max_events_api(_Config) ->
QoS1 = ?not_CreateInitQoS(),
@@ -602,10 +593,8 @@ max_events_api(_Config) ->
%%-----------------------------------------------------------------
%% cosNotification_eventDB persisten events API tests
%%-----------------------------------------------------------------
-persisten_event_api(doc) -> ["The event DB is used to store events which cannot be",
- "delivered at once.",
- ""];
-persisten_event_api(suite) -> [];
+%% The event DB is used to store events which cannot be
+%% delivered at once.
persisten_event_api(_Config) ->
QoS1 = ?not_CreateInitQoS(),
@@ -639,11 +628,9 @@ persisten_event_api(_Config) ->
%%-----------------------------------------------------------------
%% cosNotification_eventDB gc API tests
%%-----------------------------------------------------------------
-gc_api(doc) -> ["The event DB is used to store events which cannot be",
- "delivered at once. If Deadline defined the events that",
- "are older must be discarded.",
- ""];
-gc_api(suite) -> [];
+%% The event DB is used to store events which cannot be
+%% delivered at once. If Deadline defined the events that
+%% are older must be discarded.
gc_api(_Config) ->
QoS1 = ?not_CreateInitQoS(),
@@ -680,11 +667,9 @@ gc_api(_Config) ->
%%-----------------------------------------------------------------
%% cosNotification_eventDB gc API tests
%%-----------------------------------------------------------------
-auto_gc_api(doc) -> ["The event DB is used to store events which cannot be",
- "delivered at once. If Deadline defined the events that",
- "are older must be discarded.",
- ""];
-auto_gc_api(suite) -> [];
+%% The event DB is used to store events which cannot be
+%% delivered at once. If Deadline defined the events that
+%% are older must be discarded.
auto_gc_api(_Config) ->
QoS1 = ?not_CreateInitQoS(),
@@ -717,11 +702,9 @@ auto_gc_api(_Config) ->
%%-----------------------------------------------------------------
%% cosNotification_eventDB start- and stop-time API tests
%%-----------------------------------------------------------------
-start_stop_time_api(doc) -> ["The event DB is used to store events which cannot be",
- "delivered at once. If Deadline defined the events that",
- "are older must be discarded.",
- ""];
-start_stop_time_api(suite) -> [];
+%% The event DB is used to store events which cannot be
+%% delivered at once. If Deadline defined the events that
+%% are older must be discarded.
start_stop_time_api(_Config) ->
QoS1 = ?not_CreateInitQoS(),
@@ -823,12 +806,10 @@ start_stop_time_api(_Config) ->
%%-----------------------------------------------------------------
%% cosNotification_eventDB order API tests
%%-----------------------------------------------------------------
-reorder_api(doc) -> ["The event DB is used to store events which cannot be",
- "delivered at once. If the QoS is updated we must be",
- "able to change the ordering of events as the discard",
- "and order policies tells us.",
- ""];
-reorder_api(suite) -> [];
+%% The event DB is used to store events which cannot be
+%% delivered at once. If the QoS is updated we must be
+%% able to change the ordering of events as the discard
+%% and order policies tells us.
reorder_api(_Config) ->
%% We need to test switching between:
%% * Priority -> Fifo
diff --git a/lib/cosNotification/test/generated_SUITE.erl b/lib/cosNotification/test/generated_SUITE.erl
index 810a007672..8e3ccbd90e 100644
--- a/lib/cosNotification/test/generated_SUITE.erl
+++ b/lib/cosNotification/test/generated_SUITE.erl
@@ -29,7 +29,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -40,7 +40,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -51,7 +51,7 @@
Not ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS);
+ exit(AcTuAlReS);
_ ->
AcTuAlReS
end
@@ -63,7 +63,7 @@
case orber_tc:check_tc(TC) of
false ->
io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
- ?line exit(TC);
+ exit(TC);
true ->
true
end
@@ -193,12 +193,12 @@ end_per_group(_GroupName, Config) ->
%% Init and cleanup functions.
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -206,8 +206,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification'(doc) -> ["CosNotification"];
-'CosNotification'(suite) -> [];
'CosNotification'(_) ->
?match("EventReliability", 'CosNotification':'EventReliability'()),
?match(0, 'CosNotification':'BestEffort'()),
@@ -242,8 +240,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_EventHeader'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_EventHeader'(doc) -> ["CosNotification_EventHeader"];
-'CosNotification_EventHeader'(suite) -> [];
'CosNotification_EventHeader'(_) ->
?match(true, orber_tc:check_tc('CosNotification_EventHeader':tc())),
?match("IDL:omg.org/CosNotification/EventHeader:1.0",
@@ -257,8 +253,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_EventType'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_EventType'(doc) -> ["CosNotification_EventType"];
-'CosNotification_EventType'(suite) -> [];
'CosNotification_EventType'(_) ->
?match(true, orber_tc:check_tc('CosNotification_EventType':tc())),
?match("IDL:omg.org/CosNotification/EventType:1.0",
@@ -272,8 +266,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_FixedEventHeader'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_FixedEventHeader'(doc) -> ["CosNotification_FixedEventHeader"];
-'CosNotification_FixedEventHeader'(suite) -> [];
'CosNotification_FixedEventHeader'(_) ->
?match(true, orber_tc:check_tc('CosNotification_FixedEventHeader':tc())),
?match("IDL:omg.org/CosNotification/FixedEventHeader:1.0",
@@ -287,8 +279,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_NamedPropertyRange'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_NamedPropertyRange'(doc) -> ["CosNotification_NamedPropertyRange"];
-'CosNotification_NamedPropertyRange'(suite) -> [];
'CosNotification_NamedPropertyRange'(_) ->
?match(true, orber_tc:check_tc('CosNotification_NamedPropertyRange':tc())),
?match("IDL:omg.org/CosNotification/NamedPropertyRange:1.0",
@@ -302,8 +292,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_Property'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_Property'(doc) -> ["CosNotification_Property"];
-'CosNotification_Property'(suite) -> [];
'CosNotification_Property'(_) ->
?match(true, orber_tc:check_tc('CosNotification_Property':tc())),
?match("IDL:omg.org/CosNotification/Property:1.0",
@@ -317,8 +305,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_PropertyError'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_PropertyError'(doc) -> ["CosNotification_PropertyError"];
-'CosNotification_PropertyError'(suite) -> [];
'CosNotification_PropertyError'(_) ->
?match(true, orber_tc:check_tc('CosNotification_PropertyError':tc())),
?match("IDL:omg.org/CosNotification/PropertyError:1.0",
@@ -332,8 +318,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_PropertyRange'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_PropertyRange'(doc) -> [""];
-'CosNotification_PropertyRange'(suite) -> [];
'CosNotification_PropertyRange'(_) ->
?match(true, orber_tc:check_tc('CosNotification_PropertyRange':tc())),
?match("IDL:omg.org/CosNotification/PropertyRange:1.0",
@@ -347,8 +331,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_StructuredEvent'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_StructuredEvent'(doc) -> ["CosNotification_StructuredEvent"];
-'CosNotification_StructuredEvent'(suite) -> [];
'CosNotification_StructuredEvent'(_) ->
?match(true, orber_tc:check_tc('CosNotification_StructuredEvent':tc())),
?match("IDL:omg.org/CosNotification/StructuredEvent:1.0",
@@ -362,8 +344,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_UnsupportedAdmin'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_UnsupportedAdmin'(doc) -> ["CosNotification_UnsupportedAdmin"];
-'CosNotification_UnsupportedAdmin'(suite) -> [];
'CosNotification_UnsupportedAdmin'(_) ->
?match(true, orber_tc:check_tc('CosNotification_UnsupportedAdmin':tc())),
?match("IDL:omg.org/CosNotification/UnsupportedAdmin:1.0",
@@ -377,8 +357,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_UnsupportedQoS'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_UnsupportedQoS'(doc) -> ["CosNotification_UnsupportedQoS"];
-'CosNotification_UnsupportedQoS'(suite) -> [];
'CosNotification_UnsupportedQoS'(_) ->
?match(true, orber_tc:check_tc('CosNotification_UnsupportedQoS':tc())),
?match("IDL:omg.org/CosNotification/UnsupportedQoS:1.0",
@@ -392,8 +370,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_EventBatch'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_EventBatch'(doc) -> ["CosNotification_EventBatch"];
-'CosNotification_EventBatch'(suite) -> [];
'CosNotification_EventBatch'(_) ->
?match(true, orber_tc:check_tc('CosNotification_EventBatch':tc())),
?match("IDL:omg.org/CosNotification/EventBatch:1.0",
@@ -407,8 +383,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_EventTypeSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_EventTypeSeq'(doc) -> ["CosNotification_EventTypeSeq"];
-'CosNotification_EventTypeSeq'(suite) -> [];
'CosNotification_EventTypeSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotification_EventTypeSeq':tc())),
?match("IDL:omg.org/CosNotification/EventTypeSeq:1.0",
@@ -422,8 +396,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_NamedPropertyRangeSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_NamedPropertyRangeSeq'(doc) -> ["CosNotification_NamedPropertyRangeSeq"];
-'CosNotification_NamedPropertyRangeSeq'(suite) -> [];
'CosNotification_NamedPropertyRangeSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotification_NamedPropertyRangeSeq':tc())),
?match("IDL:omg.org/CosNotification/NamedPropertyRangeSeq:1.0",
@@ -437,8 +409,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_PropertyErrorSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_PropertyErrorSeq'(doc) -> ["CosNotification_PropertyErrorSeq"];
-'CosNotification_PropertyErrorSeq'(suite) -> [];
'CosNotification_PropertyErrorSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotification_PropertyErrorSeq':tc())),
?match("IDL:omg.org/CosNotification/PropertyErrorSeq:1.0",
@@ -452,8 +422,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_PropertySeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_PropertySeq'(doc) -> ["CosNotification_PropertySeq"];
-'CosNotification_PropertySeq'(suite) -> [];
'CosNotification_PropertySeq'(_) ->
?match(true, orber_tc:check_tc('CosNotification_PropertySeq':tc())),
?match("IDL:omg.org/CosNotification/PropertySeq:1.0",
@@ -467,8 +435,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_AdminLimit'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_AdminLimit'(doc) -> ["CosNotifyChannelAdmin_AdminLimit"];
-'CosNotifyChannelAdmin_AdminLimit'(suite) -> [];
'CosNotifyChannelAdmin_AdminLimit'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_AdminLimit':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/AdminLimit:1.0",
@@ -482,8 +448,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_AdminLimitExceeded'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_AdminLimitExceeded'(doc) -> ["CosNotifyChannelAdmin_AdminLimitExceeded"];
-'CosNotifyChannelAdmin_AdminLimitExceeded'(suite) -> [];
'CosNotifyChannelAdmin_AdminLimitExceeded'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_AdminLimitExceeded':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/AdminLimitExceeded:1.0",
@@ -497,8 +461,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_AdminNotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_AdminNotFound'(doc) -> ["CosNotifyChannelAdmin_AdminNotFound"];
-'CosNotifyChannelAdmin_AdminNotFound'(suite) -> [];
'CosNotifyChannelAdmin_AdminNotFound'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_AdminNotFound':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/AdminNotFound:1.0",
@@ -512,8 +474,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ChannelNotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ChannelNotFound'(doc) -> ["CosNotifyChannelAdmin_ChannelNotFound"];
-'CosNotifyChannelAdmin_ChannelNotFound'(suite) -> [];
'CosNotifyChannelAdmin_ChannelNotFound'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_ChannelNotFound':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/ChannelNotFound:1.0",
@@ -527,8 +487,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ConnectionAlreadyActive'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ConnectionAlreadyActive'(doc) -> ["CosNotifyChannelAdmin_ConnectionAlreadyActive"];
-'CosNotifyChannelAdmin_ConnectionAlreadyActive'(suite) -> [];
'CosNotifyChannelAdmin_ConnectionAlreadyActive'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_ConnectionAlreadyActive':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/ConnectionAlreadyActive:1.0",
@@ -537,13 +495,10 @@ end_per_testcase(_Case, Config) ->
'CosNotifyChannelAdmin_ConnectionAlreadyActive':name()),
ok.
-
%%-----------------------------------------------------------------
%% Test Case: 'CosNotifyChannelAdmin_ConnectionAlreadyInactive'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ConnectionAlreadyInactive'(doc) -> ["CosNotifyChannelAdmin_ConnectionAlreadyInactive"];
-'CosNotifyChannelAdmin_ConnectionAlreadyInactive'(suite) -> [];
'CosNotifyChannelAdmin_ConnectionAlreadyInactive'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_ConnectionAlreadyInactive':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/ConnectionAlreadyInactive:1.0",
@@ -556,8 +511,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_NotConnected'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_NotConnected'(doc) -> ["CosNotifyChannelAdmin_NotConnected"];
-'CosNotifyChannelAdmin_NotConnected'(suite) -> [];
'CosNotifyChannelAdmin_NotConnected'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_NotConnected':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/NotConnected:1.0",
@@ -570,8 +523,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_AdminIDSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_AdminIDSeq'(doc) -> ["CosNotifyChannelAdmin_AdminIDSeq"];
-'CosNotifyChannelAdmin_AdminIDSeq'(suite) -> [];
'CosNotifyChannelAdmin_AdminIDSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_AdminIDSeq':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/AdminIDSeq:1.0",
@@ -584,8 +535,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ChannelIDSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ChannelIDSeq'(doc) -> ["CosNotifyChannelAdmin_ChannelIDSeq"];
-'CosNotifyChannelAdmin_ChannelIDSeq'(suite) -> [];
'CosNotifyChannelAdmin_ChannelIDSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_ChannelIDSeq':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/ChannelIDSeq:1.0",
@@ -598,8 +547,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ProxyIDSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ProxyIDSeq'(doc) -> ["CosNotifyChannelAdmin_ProxyIDSeq"];
-'CosNotifyChannelAdmin_ProxyIDSeq'(suite) -> [];
'CosNotifyChannelAdmin_ProxyIDSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_ProxyIDSeq':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/ProxyIDSeq:1.0",
@@ -612,8 +559,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_CallbackNotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_CallbackNotFound'(doc) -> ["CosNotifyFilter_CallbackNotFound"];
-'CosNotifyFilter_CallbackNotFound'(suite) -> [];
'CosNotifyFilter_CallbackNotFound'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_CallbackNotFound':tc())),
?match("IDL:omg.org/CosNotifyFilter/CallbackNotFound:1.0",
@@ -626,8 +571,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_ConstraintExp'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_ConstraintExp'(doc) -> ["CosNotifyFilter_ConstraintExp"];
-'CosNotifyFilter_ConstraintExp'(suite) -> [];
'CosNotifyFilter_ConstraintExp'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_ConstraintExp':tc())),
?match("IDL:omg.org/CosNotifyFilter/ConstraintExp:1.0",
@@ -640,8 +583,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_ConstraintInfo'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_ConstraintInfo'(doc) -> ["CosNotifyFilter_ConstraintInfo"];
-'CosNotifyFilter_ConstraintInfo'(suite) -> [];
'CosNotifyFilter_ConstraintInfo'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_ConstraintInfo':tc())),
?match("IDL:omg.org/CosNotifyFilter/ConstraintInfo:1.0",
@@ -654,8 +595,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_ConstraintNotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_ConstraintNotFound'(doc) -> ["CosNotifyFilter_ConstraintNotFound"];
-'CosNotifyFilter_ConstraintNotFound'(suite) -> [];
'CosNotifyFilter_ConstraintNotFound'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_ConstraintNotFound':tc())),
?match("IDL:omg.org/CosNotifyFilter/ConstraintNotFound:1.0",
@@ -668,8 +607,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_DuplicateConstraintID'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_DuplicateConstraintID'(doc) -> ["CosNotifyFilter_DuplicateConstraintID"];
-'CosNotifyFilter_DuplicateConstraintID'(suite) -> [];
'CosNotifyFilter_DuplicateConstraintID'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_DuplicateConstraintID':tc())),
?match("IDL:omg.org/CosNotifyFilter/DuplicateConstraintID:1.0",
@@ -682,8 +619,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_FilterNotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_FilterNotFound'(doc) -> ["CosNotifyFilter_FilterNotFound"];
-'CosNotifyFilter_FilterNotFound'(suite) -> [];
'CosNotifyFilter_FilterNotFound'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_FilterNotFound':tc())),
?match("IDL:omg.org/CosNotifyFilter/FilterNotFound:1.0",
@@ -696,8 +631,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_InvalidConstraint'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_InvalidConstraint'(doc) -> ["CosNotifyFilter_InvalidConstraint"];
-'CosNotifyFilter_InvalidConstraint'(suite) -> [];
'CosNotifyFilter_InvalidConstraint'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_InvalidConstraint':tc())),
?match("IDL:omg.org/CosNotifyFilter/InvalidConstraint:1.0",
@@ -710,8 +643,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_InvalidGrammar'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_InvalidGrammar'(doc) -> ["CosNotifyFilter_InvalidGrammar"];
-'CosNotifyFilter_InvalidGrammar'(suite) -> [];
'CosNotifyFilter_InvalidGrammar'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_InvalidGrammar':tc())),
?match("IDL:omg.org/CosNotifyFilter/InvalidGrammar:1.0",
@@ -724,8 +655,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_InvalidValue'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_InvalidValue'(doc) -> ["CosNotifyFilter_InvalidValue"];
-'CosNotifyFilter_InvalidValue'(suite) -> [];
'CosNotifyFilter_InvalidValue'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_InvalidValue':tc())),
?match("IDL:omg.org/CosNotifyFilter/InvalidValue:1.0",
@@ -738,8 +667,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_MappingConstraintInfo'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_MappingConstraintInfo'(doc) -> ["CosNotifyFilter_MappingConstraintInfo"];
-'CosNotifyFilter_MappingConstraintInfo'(suite) -> [];
'CosNotifyFilter_MappingConstraintInfo'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_MappingConstraintInfo':tc())),
?match("IDL:omg.org/CosNotifyFilter/MappingConstraintInfo:1.0",
@@ -752,8 +679,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_MappingConstraintPair'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_MappingConstraintPair'(doc) -> ["CosNotifyFilter_MappingConstraintPair"];
-'CosNotifyFilter_MappingConstraintPair'(suite) -> [];
'CosNotifyFilter_MappingConstraintPair'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_MappingConstraintPair':tc())),
?match("IDL:omg.org/CosNotifyFilter/MappingConstraintPair:1.0",
@@ -766,8 +691,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_UnsupportedFilterableData'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_UnsupportedFilterableData'(doc) -> ["CosNotifyFilter_UnsupportedFilterableData"];
-'CosNotifyFilter_UnsupportedFilterableData'(suite) -> [];
'CosNotifyFilter_UnsupportedFilterableData'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_UnsupportedFilterableData':tc())),
?match("IDL:omg.org/CosNotifyFilter/UnsupportedFilterableData:1.0",
@@ -780,8 +703,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_CallbackIDSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_CallbackIDSeq'(doc) -> ["CosNotifyFilter_CallbackIDSeq"];
-'CosNotifyFilter_CallbackIDSeq'(suite) -> [];
'CosNotifyFilter_CallbackIDSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_CallbackIDSeq':tc())),
?match("IDL:omg.org/CosNotifyFilter/CallbackIDSeq:1.0",
@@ -795,8 +716,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_ConstraintExpSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_ConstraintExpSeq'(doc) -> ["CosNotifyFilter_ConstraintExpSeq"];
-'CosNotifyFilter_ConstraintExpSeq'(suite) -> [];
'CosNotifyFilter_ConstraintExpSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_ConstraintExpSeq':tc())),
?match("IDL:omg.org/CosNotifyFilter/ConstraintExpSeq:1.0",
@@ -810,8 +729,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_ConstraintIDSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_ConstraintIDSeq'(doc) -> ["CosNotifyFilter_ConstraintIDSeq"];
-'CosNotifyFilter_ConstraintIDSeq'(suite) -> [];
'CosNotifyFilter_ConstraintIDSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_ConstraintIDSeq':tc())),
?match("IDL:omg.org/CosNotifyFilter/ConstraintIDSeq:1.0",
@@ -825,8 +742,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_ConstraintInfoSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_ConstraintInfoSeq'(doc) -> ["CosNotifyFilter_ConstraintInfoSeq"];
-'CosNotifyFilter_ConstraintInfoSeq'(suite) -> [];
'CosNotifyFilter_ConstraintInfoSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_ConstraintInfoSeq':tc())),
?match("IDL:omg.org/CosNotifyFilter/ConstraintInfoSeq:1.0",
@@ -840,8 +755,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_FilterIDSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_FilterIDSeq'(doc) -> ["CosNotifyFilter_FilterIDSeq"];
-'CosNotifyFilter_FilterIDSeq'(suite) -> [];
'CosNotifyFilter_FilterIDSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_FilterIDSeq':tc())),
?match("IDL:omg.org/CosNotifyFilter/FilterIDSeq:1.0",
@@ -855,8 +768,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_MappingConstraintInfoSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_MappingConstraintInfoSeq'(doc) -> ["CosNotifyFilter_MappingConstraintInfoSeq"];
-'CosNotifyFilter_MappingConstraintInfoSeq'(suite) -> [];
'CosNotifyFilter_MappingConstraintInfoSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_MappingConstraintInfoSeq':tc())),
?match("IDL:omg.org/CosNotifyFilter/MappingConstraintInfoSeq:1.0",
@@ -870,8 +781,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_MappingConstraintPairSeq'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_MappingConstraintPairSeq'(doc) -> ["CosNotifyFilter_MappingConstraintPairSeq"];
-'CosNotifyFilter_MappingConstraintPairSeq'(suite) -> [];
'CosNotifyFilter_MappingConstraintPairSeq'(_) ->
?match(true, orber_tc:check_tc('CosNotifyFilter_MappingConstraintPairSeq':tc())),
?match("IDL:omg.org/CosNotifyFilter/MappingConstraintPairSeq:1.0",
@@ -885,8 +794,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_InvalidEventType'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_InvalidEventType'(doc) -> ["CosNotifyComm_InvalidEventType"];
-'CosNotifyComm_InvalidEventType'(suite) -> [];
'CosNotifyComm_InvalidEventType'(_) ->
?match(true, orber_tc:check_tc('CosNotifyComm_InvalidEventType':tc())),
?match("IDL:omg.org/CosNotifyComm/InvalidEventType:1.0",
@@ -900,8 +807,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ProxyNotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ProxyNotFound'(doc) -> ["CosNotifyChannelAdmin_ProxyNotFound"];
-'CosNotifyChannelAdmin_ProxyNotFound'(suite) -> [];
'CosNotifyChannelAdmin_ProxyNotFound'(_) ->
?match(true, orber_tc:check_tc('CosNotifyChannelAdmin_ProxyNotFound':tc())),
?match("IDL:omg.org/CosNotifyChannelAdmin/ProxyNotFound:1.0",
@@ -915,8 +820,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_AdminPropertiesAdmin'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_AdminPropertiesAdmin'(doc) -> ["CosNotification_AdminPropertiesAdmin"];
-'CosNotification_AdminPropertiesAdmin'(suite) -> [];
'CosNotification_AdminPropertiesAdmin'(_) ->
?nomatch(undefined, 'CosNotification_AdminPropertiesAdmin':oe_tc(get_admin)),
?nomatch(undefined, 'CosNotification_AdminPropertiesAdmin':oe_tc(set_admin)),
@@ -933,8 +836,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotification_QoSAdmin'
%% Description:
%%-----------------------------------------------------------------
-'CosNotification_QoSAdmin'(doc) -> ["CosNotification_QoSAdmin"];
-'CosNotification_QoSAdmin'(suite) -> [];
'CosNotification_QoSAdmin'(_) ->
?nomatch(undefined, 'CosNotification_QoSAdmin':oe_tc(get_qos)),
?nomatch(undefined, 'CosNotification_QoSAdmin':oe_tc(set_qos)),
@@ -952,8 +853,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ConsumerAdmin'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ConsumerAdmin'(doc) -> ["CosNotifyChannelAdmin_ConsumerAdmin"];
-'CosNotifyChannelAdmin_ConsumerAdmin'(suite) -> [];
'CosNotifyChannelAdmin_ConsumerAdmin'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc('_get_MyID')),
?nomatch(undefined, 'CosNotifyChannelAdmin_ConsumerAdmin':oe_tc('_get_MyChannel')),
@@ -999,8 +898,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_EventChannel'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_EventChannel'(doc) -> ["CosNotifyChannelAdmin_EventChannel"];
-'CosNotifyChannelAdmin_EventChannel'(suite) -> [];
'CosNotifyChannelAdmin_EventChannel'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc('_get_MyFactory')),
?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannel':oe_tc('_get_default_consumer_admin')),
@@ -1039,8 +936,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_EventChannelFactory'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_EventChannelFactory'(doc) -> ["CosNotifyChannelAdmin_EventChannelFactory"];
-'CosNotifyChannelAdmin_EventChannelFactory'(suite) -> [];
'CosNotifyChannelAdmin_EventChannelFactory'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannelFactory':oe_tc(create_channel)),
?nomatch(undefined, 'CosNotifyChannelAdmin_EventChannelFactory':oe_tc(get_all_channels)),
@@ -1058,8 +953,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ProxyConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ProxyConsumer'(doc) -> ["CosNotifyChannelAdmin_ProxyConsumer"];
-'CosNotifyChannelAdmin_ProxyConsumer'(suite) -> [];
'CosNotifyChannelAdmin_ProxyConsumer'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyConsumer':oe_tc('_get_MyType')),
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyConsumer':oe_tc('_get_MyAdmin')),
@@ -1088,8 +981,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ProxyPullConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ProxyPullConsumer'(doc) -> ["CosNotifyChannelAdmin_ProxyPullConsumer"];
-'CosNotifyChannelAdmin_ProxyPullConsumer'(suite) -> [];
'CosNotifyChannelAdmin_ProxyPullConsumer'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(connect_any_pull_supplier)),
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullConsumer':oe_tc(suspend_connection)),
@@ -1129,8 +1020,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ProxyPullSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ProxyPullSupplier'(doc) -> ["CosNotifyChannelAdmin_ProxyPullSupplier"];
-'CosNotifyChannelAdmin_ProxyPullSupplier'(suite) -> [];
'CosNotifyChannelAdmin_ProxyPullSupplier'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc('_get_MyType')),
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPullSupplier':oe_tc('_get_MyAdmin')),
@@ -1176,8 +1065,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ProxyPushConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ProxyPushConsumer'(doc) -> ["CosNotifyChannelAdmin_ProxyPushConsumer"];
-'CosNotifyChannelAdmin_ProxyPushConsumer'(suite) -> [];
'CosNotifyChannelAdmin_ProxyPushConsumer'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc(connect_any_push_supplier)),
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushConsumer':oe_tc('_get_MyType')),
@@ -1216,8 +1103,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ProxyPushSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ProxyPushSupplier'(doc) -> ["CosNotifyChannelAdmin_ProxyPushSupplier"];
-'CosNotifyChannelAdmin_ProxyPushSupplier'(suite) -> [];
'CosNotifyChannelAdmin_ProxyPushSupplier'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(connect_any_push_consumer)),
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxyPushSupplier':oe_tc(suspend_connection)),
@@ -1264,8 +1149,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_ProxySupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_ProxySupplier'(doc) -> ["CosNotifyChannelAdmin_ProxySupplier"];
-'CosNotifyChannelAdmin_ProxySupplier'(suite) -> [];
'CosNotifyChannelAdmin_ProxySupplier'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc('_get_MyType')),
?nomatch(undefined, 'CosNotifyChannelAdmin_ProxySupplier':oe_tc('_get_MyAdmin')),
@@ -1299,8 +1182,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_SequenceProxyPullConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_SequenceProxyPullConsumer'(doc) -> ["CosNotifyChannelAdmin_SequenceProxyPullConsumer"];
-'CosNotifyChannelAdmin_SequenceProxyPullConsumer'(suite) -> [];
'CosNotifyChannelAdmin_SequenceProxyPullConsumer'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(connect_sequence_pull_supplier)),
?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullConsumer':oe_tc(suspend_connection)),
@@ -1338,8 +1219,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_SequenceProxyPullSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_SequenceProxyPullSupplier'(doc) -> ["CosNotifyChannelAdmin_SequenceProxyPullSupplier"];
-'CosNotifyChannelAdmin_SequenceProxyPullSupplier'(suite) -> [];
'CosNotifyChannelAdmin_SequenceProxyPullSupplier'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc(connect_sequence_pull_consumer)),
?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPullSupplier':oe_tc('_get_MyType')),
@@ -1384,8 +1263,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_SequenceProxyPushConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_SequenceProxyPushConsumer'(doc) -> ["CosNotifyChannelAdmin_SequenceProxyPushConsumer"];
-'CosNotifyChannelAdmin_SequenceProxyPushConsumer'(suite) -> [];
'CosNotifyChannelAdmin_SequenceProxyPushConsumer'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc(connect_sequence_push_supplier)),
?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushConsumer':oe_tc('_get_MyType')),
@@ -1422,8 +1299,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_SequenceProxyPushSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_SequenceProxyPushSupplier'(doc) -> ["CosNotifyChannelAdmin_SequenceProxyPushSupplier"];
-'CosNotifyChannelAdmin_SequenceProxyPushSupplier'(suite) -> [];
'CosNotifyChannelAdmin_SequenceProxyPushSupplier'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(connect_sequence_push_consumer)),
?nomatch(undefined, 'CosNotifyChannelAdmin_SequenceProxyPushSupplier':oe_tc(suspend_connection)),
@@ -1468,8 +1343,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_StructuredProxyPullConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_StructuredProxyPullConsumer'(doc) -> ["CosNotifyChannelAdmin_StructuredProxyPullConsumer"];
-'CosNotifyChannelAdmin_StructuredProxyPullConsumer'(suite) -> [];
'CosNotifyChannelAdmin_StructuredProxyPullConsumer'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(connect_structured_pull_supplier)),
?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullConsumer':oe_tc(suspend_connection)),
@@ -1507,8 +1380,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_StructuredProxyPullSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_StructuredProxyPullSupplier'(doc) -> ["CosNotifyChannelAdmin_StructuredProxyPullSupplier"];
-'CosNotifyChannelAdmin_StructuredProxyPullSupplier'(suite) -> [];
'CosNotifyChannelAdmin_StructuredProxyPullSupplier'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc(connect_structured_pull_consumer)),
?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPullSupplier':oe_tc('_get_MyType')),
@@ -1553,8 +1424,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_StructuredProxyPushConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_StructuredProxyPushConsumer'(doc) -> ["CosNotifyChannelAdmin_StructuredProxyPushConsumer"];
-'CosNotifyChannelAdmin_StructuredProxyPushConsumer'(suite) -> [];
'CosNotifyChannelAdmin_StructuredProxyPushConsumer'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc(connect_structured_push_supplier)),
?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushConsumer':oe_tc('_get_MyType')),
@@ -1591,8 +1460,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_StructuredProxyPushSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_StructuredProxyPushSupplier'(doc) -> ["CosNotifyChannelAdmin_StructuredProxyPushSupplier"];
-'CosNotifyChannelAdmin_StructuredProxyPushSupplier'(suite) -> [];
'CosNotifyChannelAdmin_StructuredProxyPushSupplier'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(connect_structured_push_consumer)),
?nomatch(undefined, 'CosNotifyChannelAdmin_StructuredProxyPushSupplier':oe_tc(suspend_connection)),
@@ -1637,8 +1504,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyChannelAdmin_SupplierAdmin'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyChannelAdmin_SupplierAdmin'(doc) -> ["CosNotifyChannelAdmin_SupplierAdmin"];
-'CosNotifyChannelAdmin_SupplierAdmin'(suite) -> [];
'CosNotifyChannelAdmin_SupplierAdmin'(_) ->
?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc('_get_MyID')),
?nomatch(undefined, 'CosNotifyChannelAdmin_SupplierAdmin':oe_tc('_get_MyChannel')),
@@ -1681,8 +1546,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_Filter'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_Filter'(doc) -> ["CosNotifyFilter_Filter"];
-'CosNotifyFilter_Filter'(suite) -> [];
'CosNotifyFilter_Filter'(_) ->
?nomatch(undefined, 'CosNotifyFilter_Filter':oe_tc('_get_constraint_grammar')),
?nomatch(undefined, 'CosNotifyFilter_Filter':oe_tc(add_constraints)),
@@ -1711,8 +1574,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_FilterAdmin'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_FilterAdmin'(doc) -> ["CosNotifyFilter_FilterAdmin"];
-'CosNotifyFilter_FilterAdmin'(suite) -> [];
'CosNotifyFilter_FilterAdmin'(_) ->
?nomatch(undefined, 'CosNotifyFilter_FilterAdmin':oe_tc(add_filter)),
?nomatch(undefined, 'CosNotifyFilter_FilterAdmin':oe_tc(remove_filter)),
@@ -1733,8 +1594,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_FilterFactory'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_FilterFactory'(doc) -> ["CosNotifyFilter_FilterFactory"];
-'CosNotifyFilter_FilterFactory'(suite) -> [];
'CosNotifyFilter_FilterFactory'(_) ->
?nomatch(undefined, 'CosNotifyFilter_FilterFactory':oe_tc(create_filter)),
?nomatch(undefined, 'CosNotifyFilter_FilterFactory':oe_tc(create_mapping_filter)),
@@ -1752,8 +1611,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyFilter_MappingFilter'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyFilter_MappingFilter'(doc) -> ["CosNotifyFilter_MappingFilter"];
-'CosNotifyFilter_MappingFilter'(suite) -> [];
'CosNotifyFilter_MappingFilter'(_) ->
?nomatch(undefined, 'CosNotifyFilter_MappingFilter':oe_tc('_get_constraint_grammar')),
?nomatch(undefined, 'CosNotifyFilter_MappingFilter':oe_tc('_get_value_type')),
@@ -1781,8 +1638,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_NotifyPublish'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_NotifyPublish'(doc) -> ["CosNotifyComm_NotifyPublish"];
-'CosNotifyComm_NotifyPublish'(suite) -> [];
'CosNotifyComm_NotifyPublish'(_) ->
?nomatch(undefined, 'CosNotifyComm_NotifyPublish':oe_tc(offer_change)),
?match(undefined, 'CosNotifyComm_NotifyPublish':oe_tc(undefined)),
@@ -1799,8 +1654,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_NotifySubscribe'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_NotifySubscribe'(doc) -> ["CosNotifyComm_NotifySubscribe"];
-'CosNotifyComm_NotifySubscribe'(suite) -> [];
'CosNotifyComm_NotifySubscribe'(_) ->
?nomatch(undefined, 'CosNotifyComm_NotifySubscribe':oe_tc(subscription_change)),
?match(undefined, 'CosNotifyComm_NotifySubscribe':oe_tc(undefined)),
@@ -1817,8 +1670,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_PullConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_PullConsumer'(doc) -> ["CosNotifyComm_PullConsumer"];
-'CosNotifyComm_PullConsumer'(suite) -> [];
'CosNotifyComm_PullConsumer'(_) ->
?nomatch(undefined, 'CosNotifyComm_PullConsumer':oe_tc(offer_change)),
?nomatch(undefined, 'CosNotifyComm_PullConsumer':oe_tc(disconnect_pull_consumer)),
@@ -1838,8 +1689,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_PullSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_PullSupplier'(doc) -> ["CosNotifyComm_PullSupplier"];
-'CosNotifyComm_PullSupplier'(suite) -> [];
'CosNotifyComm_PullSupplier'(_) ->
?nomatch(undefined, 'CosNotifyComm_PullSupplier':oe_tc(subscription_change)),
?nomatch(undefined, 'CosNotifyComm_PullSupplier':oe_tc(pull)),
@@ -1861,8 +1710,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_PushConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_PushConsumer'(doc) -> ["CosNotifyComm_PushConsumer"];
-'CosNotifyComm_PushConsumer'(suite) -> [];
'CosNotifyComm_PushConsumer'(_) ->
?nomatch(undefined, 'CosNotifyComm_PushConsumer':oe_tc(offer_change)),
?nomatch(undefined, 'CosNotifyComm_PushConsumer':oe_tc(push)),
@@ -1883,8 +1730,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_PushSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_PushSupplier'(doc) -> ["CosNotifyComm_PushSupplier"];
-'CosNotifyComm_PushSupplier'(suite) -> [];
'CosNotifyComm_PushSupplier'(_) ->
?nomatch(undefined, 'CosNotifyComm_PushSupplier':oe_tc(subscription_change)),
?nomatch(undefined, 'CosNotifyComm_PushSupplier':oe_tc(disconnect_push_supplier)),
@@ -1904,8 +1749,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_SequencePullConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_SequencePullConsumer'(doc) -> ["CosNotifyComm_SequencePullConsumer"];
-'CosNotifyComm_SequencePullConsumer'(suite) -> [];
'CosNotifyComm_SequencePullConsumer'(_) ->
?nomatch(undefined, 'CosNotifyComm_SequencePullConsumer':oe_tc(disconnect_sequence_pull_consumer)),
?nomatch(undefined, 'CosNotifyComm_SequencePullConsumer':oe_tc(offer_change)),
@@ -1924,8 +1767,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_SequencePullSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_SequencePullSupplier'(doc) -> ["CosNotifyComm_SequencePullSupplier"];
-'CosNotifyComm_SequencePullSupplier'(suite) -> [];
'CosNotifyComm_SequencePullSupplier'(_) ->
?nomatch(undefined, 'CosNotifyComm_SequencePullSupplier':oe_tc(pull_structured_events)),
?nomatch(undefined, 'CosNotifyComm_SequencePullSupplier':oe_tc(try_pull_structured_events)),
@@ -1946,8 +1787,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_SequencePushConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_SequencePushConsumer'(doc) -> ["CosNotifyComm_SequencePushConsumer"];
-'CosNotifyComm_SequencePushConsumer'(suite) -> [];
'CosNotifyComm_SequencePushConsumer'(_) ->
?nomatch(undefined, 'CosNotifyComm_SequencePushConsumer':oe_tc(push_structured_events)),
?nomatch(undefined, 'CosNotifyComm_SequencePushConsumer':oe_tc(disconnect_sequence_push_consumer)),
@@ -1967,8 +1806,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_SequencePushSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_SequencePushSupplier'(doc) -> ["CosNotifyComm_SequencePushSupplier"];
-'CosNotifyComm_SequencePushSupplier'(suite) -> [];
'CosNotifyComm_SequencePushSupplier'(_) ->
?nomatch(undefined, 'CosNotifyComm_SequencePushSupplier':oe_tc(disconnect_sequence_push_supplier)),
?nomatch(undefined, 'CosNotifyComm_SequencePushSupplier':oe_tc(subscription_change)),
@@ -1987,8 +1824,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_StructuredPullConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_StructuredPullConsumer'(doc) -> ["CosNotifyComm_StructuredPullConsumer"];
-'CosNotifyComm_StructuredPullConsumer'(suite) -> [];
'CosNotifyComm_StructuredPullConsumer'(_) ->
?nomatch(undefined, 'CosNotifyComm_StructuredPullConsumer':oe_tc(disconnect_structured_pull_consumer)),
?nomatch(undefined, 'CosNotifyComm_StructuredPullConsumer':oe_tc(offer_change)),
@@ -2007,8 +1842,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_StructuredPullSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_StructuredPullSupplier'(doc) -> ["CosNotifyComm_StructuredPullSupplier"];
-'CosNotifyComm_StructuredPullSupplier'(suite) -> [];
'CosNotifyComm_StructuredPullSupplier'(_) ->
?nomatch(undefined, 'CosNotifyComm_StructuredPullSupplier':oe_tc(pull_structured_event)),
?nomatch(undefined, 'CosNotifyComm_StructuredPullSupplier':oe_tc(try_pull_structured_event)),
@@ -2029,8 +1862,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_StructuredPushConsumer'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_StructuredPushConsumer'(doc) -> ["CosNotifyComm_StructuredPushConsumer"];
-'CosNotifyComm_StructuredPushConsumer'(suite) -> [];
'CosNotifyComm_StructuredPushConsumer'(_) ->
?nomatch(undefined, 'CosNotifyComm_StructuredPushConsumer':oe_tc(push_structured_event)),
?nomatch(undefined, 'CosNotifyComm_StructuredPushConsumer':oe_tc(disconnect_structured_push_consumer)),
@@ -2050,8 +1881,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosNotifyComm_StructuredPushSupplier'
%% Description:
%%-----------------------------------------------------------------
-'CosNotifyComm_StructuredPushSupplier'(doc) -> ["CosNotifyComm_StructuredPushSupplier"];
-'CosNotifyComm_StructuredPushSupplier'(suite) -> [];
'CosNotifyComm_StructuredPushSupplier'(_) ->
?nomatch(undefined, 'CosNotifyComm_StructuredPushSupplier':oe_tc(disconnect_structured_push_supplier)),
?nomatch(undefined, 'CosNotifyComm_StructuredPushSupplier':oe_tc(subscription_change)),
@@ -2070,8 +1899,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'oe_CosNotificationComm_Event'
%% Description:
%%-----------------------------------------------------------------
-'oe_CosNotificationComm_Event'(doc) -> ["oe_CosNotificationComm_Event"];
-'oe_CosNotificationComm_Event'(suite) -> [];
'oe_CosNotificationComm_Event'(_) ->
?nomatch(undefined, 'oe_CosNotificationComm_Event':oe_tc(callSeq)),
?nomatch(undefined, 'oe_CosNotificationComm_Event':oe_tc(callAny)),
diff --git a/lib/cosNotification/test/grammar_SUITE.erl b/lib/cosNotification/test/grammar_SUITE.erl
index 34b832327d..536292fdee 100644
--- a/lib/cosNotification/test/grammar_SUITE.erl
+++ b/lib/cosNotification/test/grammar_SUITE.erl
@@ -26,8 +26,6 @@
-module(grammar_SUITE).
-
-
%%--------------- INCLUDES -----------------------------------
-include_lib("orber/include/corba.hrl").
-include_lib("orber/include/ifr_types.hrl").
@@ -46,7 +44,7 @@
-include_lib("common_test/include/ct.hrl").
%%--------------- DEFINES ------------------------------------
--define(default_timeout, ?t:minutes(20)).
+-define(default_timeout, test_server:minutes(20)).
-define(match(ExpectedRes, Expr),
fun() ->
AcTuAlReS = (catch (Expr)),
@@ -58,7 +56,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -100,18 +98,17 @@ cases() ->
%%-----------------------------------------------------------------
%% Init and cleanup functions.
%%-----------------------------------------------------------------
-
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -134,8 +131,6 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% simple types grammar tests
%%-----------------------------------------------------------------
-simple_types_api(doc) -> ["CosNotification simple types grammar tests", ""];
-simple_types_api(suite) -> [];
simple_types_api(_Config) ->
%% Will always be true, no matter what kind of event we receive.
{ok,T1} = ?match({ok, _}, create_filter("2==2 and 3<4")),
@@ -208,8 +203,6 @@ simple_types_api(_Config) ->
%%-----------------------------------------------------------------
%% enum grammar tests
%%-----------------------------------------------------------------
-enum_api(doc) -> ["CosNotification enum grammar tests", ""];
-enum_api(suite) -> [];
enum_api(_Config) ->
%% Accept events whose 'in' enum is set to the value 'HOUSE' or 'CAR'.
{ok,T1} = ?match({ok, _}, create_filter("$.\\in == HOUSE or $.\\in == CAR")),
@@ -221,13 +214,11 @@ enum_api(_Config) ->
any:create({tk_enum, "IFRId", "in", ["HOUSE", "CAR"]},
'GARAGE')))),
ok.
-
+
%%-----------------------------------------------------------------
%% Union grammar tests
%%-----------------------------------------------------------------
-union_api(doc) -> ["CosNotification union grammar tests", ""];
-union_api(suite) -> [];
union_api(_Config) ->
{ok,T1} = ?match({ok, _}, create_filter("exist $.uni1._d and $.uni1._d == 1 and $.uni1.(1) == 10")),
{ok,T2} = ?match({ok, _}, create_filter("default $.uni1._d and $.uni1.() == 10")),
@@ -541,8 +532,6 @@ union_api(_Config) ->
%%-----------------------------------------------------------------
%% Variables grammar tests
%%-----------------------------------------------------------------
-variable_api(doc) -> ["CosNotification variables grammar tests", ""];
-variable_api(suite) -> [];
variable_api(_Config) ->
%% Accept all "CommunicationsAlarm" events
{ok,T0} = ?match({ok, _}, create_filter("$type_name == 'CommunicationsAlarm'")),
@@ -873,8 +862,6 @@ variable_api(_Config) ->
%%-----------------------------------------------------------------
%% Misc grammar tests
%%-----------------------------------------------------------------
-positional_api(doc) -> ["CosNotification positional notation grammar tests", ""];
-positional_api(suite) -> [];
positional_api(_Config) ->
{ok,T1} = ?match({ok, _}, create_filter("$.3 < 80 or $.1(midterm) > $.1(final) or $.2[3] < 10")),
@@ -929,8 +916,6 @@ positional_api(_Config) ->
%%-----------------------------------------------------------------
%% Components grammar tests
%%-----------------------------------------------------------------
-components_api(doc) -> ["CosNotification components grammar tests", ""];
-components_api(suite) -> [];
components_api(_Config) ->
{ok,T1} = ?match({ok, _}, create_filter("$ == 2")),
?match(true, eval(T1, ?not_CreateSE("DomainName","TypeName","EventName",
diff --git a/lib/cosNotification/test/notification_SUITE.erl b/lib/cosNotification/test/notification_SUITE.erl
index f23dacce4f..624a76c64a 100644
--- a/lib/cosNotification/test/notification_SUITE.erl
+++ b/lib/cosNotification/test/notification_SUITE.erl
@@ -44,7 +44,7 @@
-include_lib("common_test/include/ct.hrl").
%%--------------- DEFINES ------------------------------------
--define(default_timeout, ?t:minutes(20)).
+-define(default_timeout, test_server:minutes(20)).
-define(match(ExpectedRes, Expr),
fun() ->
AcTuAlReS = (catch (Expr)),
@@ -56,7 +56,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -164,18 +164,16 @@ cases() ->
%%-----------------------------------------------------------------
%% Init and cleanup functions.
%%-----------------------------------------------------------------
-
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
-
end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -209,8 +207,6 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Tests app file
%%-----------------------------------------------------------------
-app_test(doc) -> [];
-app_test(suite) -> [];
app_test(_Config) ->
ok=test_server:app_test(cosNotification),
ok.
@@ -219,9 +215,6 @@ app_test(_Config) ->
%%-----------------------------------------------------------------
%% Persistent events max limit
%%-----------------------------------------------------------------
-persistent_max_events_api(doc) -> ["CosNotification QoS EventReliability Persistent",
- ""];
-persistent_max_events_api(suite) -> [];
persistent_max_events_api(_Config) ->
QoSPersistent =
[#'CosNotification_Property'{name='CosNotification':'ConnectionReliability'(),
@@ -309,10 +302,6 @@ terminated(Items) ->
%%-----------------------------------------------------------------
%% Persistent events timeout
%%-----------------------------------------------------------------
-persistent_timeout_events_api(doc) ->
- ["CosNotification QoS EventReliability Persistent",
- ""];
-persistent_timeout_events_api(suite) -> [];
persistent_timeout_events_api(_Config) ->
QoSPersistent =
[#'CosNotification_Property'{name='CosNotification':'ConnectionReliability'(),
@@ -394,10 +383,6 @@ persistent_timeout_events_api(_Config) ->
%%-----------------------------------------------------------------
%% Persistent events max limit
%%-----------------------------------------------------------------
-persistent_recover_events_api(doc) ->
- ["CosNotification QoS EventReliability Persistent",
- ""];
-persistent_recover_events_api(suite) -> [];
persistent_recover_events_api(_Config) ->
QoSPersistent =
[#'CosNotification_Property'{name='CosNotification':'ConnectionReliability'(),
@@ -484,8 +469,6 @@ persistent_recover_events_api(_Config) ->
%%-----------------------------------------------------------------
%% CosNotifyFilter::Filter API tests
%%-----------------------------------------------------------------
-mapping_filter_api(doc) -> ["CosNotifyFilter::MappingFilter API tests.", ""];
-mapping_filter_api(suite) -> [];
mapping_filter_api(_Config) ->
FiFac = 'CosNotifyFilter_FilterFactory':oe_create(),
?match({_,key,_,_,_,_}, FiFac),
@@ -514,7 +497,7 @@ mapping_filter_api(_Config) ->
constraint_expr = "2==2 and 3<"},
result_to_set = any:create(orber_tc:short(), 10)}])),
%% Try adding two correct constraint_expr
- ?line[{_,_,CID1,_},{_,_,CID2,_}]=
+ [{_,_,CID1,_},{_,_,CID2,_}]=
?match([{'CosNotifyFilter_MappingConstraintInfo',_,_,_}, {'CosNotifyFilter_MappingConstraintInfo',_,_,_}],
'CosNotifyFilter_MappingFilter':add_mapping_constraints(Filter,
[#'CosNotifyFilter_MappingConstraintPair'
@@ -685,8 +668,6 @@ mapping_filter_api(_Config) ->
%%-----------------------------------------------------------------
%% CosNotifyFilter::Filter API tests
%%-----------------------------------------------------------------
-filter_api(doc) -> ["CosNotifyFilter::Filter API tests.", ""];
-filter_api(suite) -> [];
filter_api(_Config) ->
Fac = cosNotificationApp:start_global_factory(?FAC_OPT),
?match({_,key,_,_,_,_}, Fac),
@@ -730,7 +711,7 @@ filter_api(_Config) ->
type_name = "type"}],
constraint_expr = "2==2 and 3<"}])),
%% Try adding two correct constraint_expr
- ?line[{_,_,CID1},{_,_,CID2}]=
+ [{_,_,CID1},{_,_,CID2}]=
?match([{'CosNotifyFilter_ConstraintInfo',_,_}, {'CosNotifyFilter_ConstraintInfo',_,_}],
'CosNotifyFilter_Filter':add_constraints(Filter,
[#'CosNotifyFilter_ConstraintExp'{event_types =
@@ -870,8 +851,6 @@ filter_api(_Config) ->
%%-----------------------------------------------------------------
%% Subscription handling API tests
%%-----------------------------------------------------------------
-subscription_api(doc) -> ["CosNotification subscription handling", ""];
-subscription_api(suite) -> [];
subscription_api(_Config) ->
%% Initialize the application.
Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
@@ -1090,8 +1069,6 @@ subscription_api(_Config) ->
%%-----------------------------------------------------------------
%% Filter admin API tests
%%-----------------------------------------------------------------
-filter_adm_api(doc) -> ["CosNotification filter admin tests", ""];
-filter_adm_api(suite) -> [];
filter_adm_api(_Config) ->
Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
?match({_,key,_,_,_,_}, Fac),
@@ -1166,8 +1143,6 @@ filter_tests(Mod, Obj, Filter, Ch) ->
%%-----------------------------------------------------------------
%% Creating different event pushing and pulling API tests
%%-----------------------------------------------------------------
-events_api(doc) -> ["CosNotification event pushing and pulling tests", ""];
-events_api(suite) -> [];
events_api(_Config) ->
%% Initialize the application.
Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
@@ -1550,7 +1525,7 @@ events_api_helper(Fac, Ch, _Id1) ->
FiFac = 'CosNotifyFilter_FilterFactory':oe_create(),
Filter = 'CosNotifyFilter_FilterFactory':create_filter(FiFac,"EXTENDED_TCL"),
%% Add constraints to the Filter
- ?line[{_,_,CID1},{_,_,CID2}]=
+ [{_,_,CID1},{_,_,CID2}]=
?match([{'CosNotifyFilter_ConstraintInfo',_,_}, {'CosNotifyFilter_ConstraintInfo',_,_}],
'CosNotifyFilter_Filter':add_constraints(Filter,
[#'CosNotifyFilter_ConstraintExp'{event_types =
@@ -1728,8 +1703,6 @@ event_filtering(_FiFac, _Filter, _AdminConsumer, StructuredProxyPushConsumer, Pu
%%-----------------------------------------------------------------
%% Creating different cosEvent API tests
%%-----------------------------------------------------------------
-cosevent_api(doc) -> ["CosNotification Objects tested with CosEvent API", ""];
-cosevent_api(suite) -> [];
cosevent_api(_Config) ->
Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
?match({_,key,_,_,_,_}, Fac),
@@ -1844,8 +1817,6 @@ cosevent_api(_Config) ->
%%-----------------------------------------------------------------
%% AdminPropertiesAdmin API tests
%%-----------------------------------------------------------------
-adm_api(doc) -> ["CosNotification AdminPropertiesAdmin tests", ""];
-adm_api(suite) -> [];
adm_api(_Config) ->
Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
?match({_,key,_,_,_,_}, Fac),
@@ -1892,8 +1863,6 @@ adm_api(_Config) ->
%%-----------------------------------------------------------------
%% QoSAdm API tests
%%-----------------------------------------------------------------
-qos_api(doc) -> ["CosNotification QoSAdmin tests", ""];
-qos_api(suite) -> [];
qos_api(_Config) ->
Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
?match({_,key,_,_,_,_}, Fac),
@@ -2060,8 +2029,6 @@ qos_api(_Config) ->
%%-----------------------------------------------------------------
%% QoSAdm API tests
%%-----------------------------------------------------------------
-event_qos_api(doc) -> ["CosNotification QoSAdmin tests", ""];
-event_qos_api(suite) -> [];
event_qos_api(_Config) ->
Fac = (catch cosNotificationApp:start_global_factory(?FAC_OPT)),
?match({_,key,_,_,_,_}, Fac),
diff --git a/lib/cosProperty/test/generated_SUITE.erl b/lib/cosProperty/test/generated_SUITE.erl
index 8eb794bd8f..313f5bf8f9 100644
--- a/lib/cosProperty/test/generated_SUITE.erl
+++ b/lib/cosProperty/test/generated_SUITE.erl
@@ -29,7 +29,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -40,7 +40,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -51,7 +51,7 @@
Not ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS);
+ exit(AcTuAlReS);
_ ->
AcTuAlReS
end
@@ -63,7 +63,7 @@
case orber_tc:check_tc(TC) of
false ->
io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
- ?line exit(TC);
+ exit(TC);
true ->
true
end
@@ -136,24 +136,18 @@ end_per_group(_GroupName, Config) ->
%% Init and cleanup functions.
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
-
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
-
-
-
%%-----------------------------------------------------------------
%% Test Case: 'CosPropertyService_ConflictingProperty'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_ConflictingProperty'(doc) -> ["CosPropertyService_ConflictingProperty"];
-'CosPropertyService_ConflictingProperty'(suite) -> [];
'CosPropertyService_ConflictingProperty'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_ConflictingProperty':tc())),
?match("IDL:omg.org/CosPropertyService/ConflictingProperty:1.0",
@@ -167,8 +161,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_ConstraintNotSupported'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_ConstraintNotSupported'(doc) -> ["CosPropertyService_ConstraintNotSupported"];
-'CosPropertyService_ConstraintNotSupported'(suite) -> [];
'CosPropertyService_ConstraintNotSupported'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_ConstraintNotSupported':tc())),
?match("IDL:omg.org/CosPropertyService/ConstraintNotSupported:1.0",
@@ -182,8 +174,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_FixedProperty'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_FixedProperty'(doc) -> ["CosPropertyService_FixedProperty"];
-'CosPropertyService_FixedProperty'(suite) -> [];
'CosPropertyService_FixedProperty'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_FixedProperty':tc())),
?match("IDL:omg.org/CosPropertyService/FixedProperty:1.0",
@@ -197,8 +187,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_InvalidPropertyName'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_InvalidPropertyName'(doc) -> ["CosPropertyService_InvalidPropertyName"];
-'CosPropertyService_InvalidPropertyName'(suite) -> [];
'CosPropertyService_InvalidPropertyName'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_InvalidPropertyName':tc())),
?match("IDL:omg.org/CosPropertyService/InvalidPropertyName:1.0",
@@ -212,8 +200,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_MultipleExceptions'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_MultipleExceptions'(doc) -> ["CosPropertyService_MultipleExceptions"];
-'CosPropertyService_MultipleExceptions'(suite) -> [];
'CosPropertyService_MultipleExceptions'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_MultipleExceptions':tc())),
?match("IDL:omg.org/CosPropertyService/MultipleExceptions:1.0",
@@ -227,8 +213,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_Properties'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_Properties'(doc) -> ["CosPropertyService_Properties"];
-'CosPropertyService_Properties'(suite) -> [];
'CosPropertyService_Properties'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_Properties':tc())),
?match("IDL:omg.org/CosPropertyService/Properties:1.0",
@@ -242,8 +226,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_Property'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_Property'(doc) -> ["CosPropertyService_Property"];
-'CosPropertyService_Property'(suite) -> [];
'CosPropertyService_Property'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_Property':tc())),
?match("IDL:omg.org/CosPropertyService/Property:1.0",
@@ -257,8 +239,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyDef'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyDef'(doc) -> ["CosPropertyService_PropertyDef"];
-'CosPropertyService_PropertyDef'(suite) -> [];
'CosPropertyService_PropertyDef'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_PropertyDef':tc())),
?match("IDL:omg.org/CosPropertyService/PropertyDef:1.0",
@@ -272,8 +252,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyDefs'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyDefs'(doc) -> ["CosPropertyService_PropertyDefs"];
-'CosPropertyService_PropertyDefs'(suite) -> [];
'CosPropertyService_PropertyDefs'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_PropertyDefs':tc())),
?match("IDL:omg.org/CosPropertyService/PropertyDefs:1.0",
@@ -287,8 +265,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyException'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyException'(doc) -> ["CosPropertyService_PropertyException"];
-'CosPropertyService_PropertyException'(suite) -> [];
'CosPropertyService_PropertyException'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_PropertyException':tc())),
?match("IDL:omg.org/CosPropertyService/PropertyException:1.0",
@@ -302,8 +278,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyExceptions'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyExceptions'(doc) -> ["CosPropertyService_PropertyExceptions"];
-'CosPropertyService_PropertyExceptions'(suite) -> [];
'CosPropertyService_PropertyExceptions'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_PropertyExceptions':tc())),
?match("IDL:omg.org/CosPropertyService/PropertyExceptions:1.0",
@@ -317,8 +291,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyMode'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyMode'(doc) -> ["CosPropertyService_PropertyMode"];
-'CosPropertyService_PropertyMode'(suite) -> [];
'CosPropertyService_PropertyMode'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_PropertyMode':tc())),
?match("IDL:omg.org/CosPropertyService/PropertyMode:1.0",
@@ -332,8 +304,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyModes'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyModes'(doc) -> ["CosPropertyService_PropertyModes"];
-'CosPropertyService_PropertyModes'(suite) -> [];
'CosPropertyService_PropertyModes'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_PropertyModes':tc())),
?match("IDL:omg.org/CosPropertyService/PropertyModes:1.0",
@@ -347,8 +317,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyNames'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyNames'(doc) -> ["CosPropertyService_PropertyNames"];
-'CosPropertyService_PropertyNames'(suite) -> [];
'CosPropertyService_PropertyNames'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_PropertyNames':tc())),
?match("IDL:omg.org/CosPropertyService/PropertyNames:1.0",
@@ -361,8 +329,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyNotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyNotFound'(doc) -> ["CosPropertyService_PropertyNotFound"];
-'CosPropertyService_PropertyNotFound'(suite) -> [];
'CosPropertyService_PropertyNotFound'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_PropertyNotFound':tc())),
?match("IDL:omg.org/CosPropertyService/PropertyNotFound:1.0",
@@ -375,8 +341,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyTypes'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyTypes'(doc) -> ["CosPropertyService_PropertyTypes"];
-'CosPropertyService_PropertyTypes'(suite) -> [];
'CosPropertyService_PropertyTypes'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_PropertyTypes':tc())),
?match("IDL:omg.org/CosPropertyService/PropertyTypes:1.0",
@@ -389,8 +353,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_ReadOnlyProperty'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_ReadOnlyProperty'(doc) -> ["CosPropertyService_ReadOnlyProperty"];
-'CosPropertyService_ReadOnlyProperty'(suite) -> [];
'CosPropertyService_ReadOnlyProperty'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_ReadOnlyProperty':tc())),
?match("IDL:omg.org/CosPropertyService/ReadOnlyProperty:1.0",
@@ -403,8 +365,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_UnsupportedMode'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_UnsupportedMode'(doc) -> ["CosPropertyService_UnsupportedMode"];
-'CosPropertyService_UnsupportedMode'(suite) -> [];
'CosPropertyService_UnsupportedMode'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_UnsupportedMode':tc())),
?match("IDL:omg.org/CosPropertyService/UnsupportedMode:1.0",
@@ -417,8 +377,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_UnsupportedProperty'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_UnsupportedProperty'(doc) -> ["CosPropertyService_UnsupportedProperty"];
-'CosPropertyService_UnsupportedProperty'(suite) -> [];
'CosPropertyService_UnsupportedProperty'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_UnsupportedProperty':tc())),
?match("IDL:omg.org/CosPropertyService/UnsupportedProperty:1.0",
@@ -431,8 +389,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_UnsupportedTypeCode'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_UnsupportedTypeCode'(doc) -> ["CosPropertyService_UnsupportedTypeCode"];
-'CosPropertyService_UnsupportedTypeCode'(suite) -> [];
'CosPropertyService_UnsupportedTypeCode'(_) ->
?match(true, orber_tc:check_tc('CosPropertyService_UnsupportedTypeCode':tc())),
?match("IDL:omg.org/CosPropertyService/UnsupportedTypeCode:1.0",
@@ -445,8 +401,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertyNamesIterator'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertyNamesIterator'(doc) -> ["CosPropertyService_PropertyNamesIterator"];
-'CosPropertyService_PropertyNamesIterator'(suite) -> [];
'CosPropertyService_PropertyNamesIterator'(_) ->
?nomatch(undefined, 'CosPropertyService_PropertyNamesIterator':oe_tc(reset)),
?nomatch(undefined, 'CosPropertyService_PropertyNamesIterator':oe_tc(next_one)),
@@ -465,8 +419,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertiesIterator'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertiesIterator'(doc) -> ["CosPropertyService_PropertiesIterator"];
-'CosPropertyService_PropertiesIterator'(suite) -> [];
'CosPropertyService_PropertiesIterator'(_) ->
?nomatch(undefined, 'CosPropertyService_PropertiesIterator':oe_tc(reset)),
?nomatch(undefined, 'CosPropertyService_PropertiesIterator':oe_tc(next_one)),
@@ -486,8 +438,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertySet'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertySet'(doc) -> ["CosPropertyService_PropertySet"];
-'CosPropertyService_PropertySet'(suite) -> [];
'CosPropertyService_PropertySet'(_) ->
?nomatch(undefined, 'CosPropertyService_PropertySet':oe_tc(define_property)),
?nomatch(undefined, 'CosPropertyService_PropertySet':oe_tc(define_properties)),
@@ -514,8 +464,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertySetDef'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertySetDef'(doc) -> ["CosPropertyService_PropertySetDef"];
-'CosPropertyService_PropertySetDef'(suite) -> [];
'CosPropertyService_PropertySetDef'(_) ->
?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(get_allowed_property_types)),
?nomatch(undefined, 'CosPropertyService_PropertySetDef':oe_tc(get_allowed_properties)),
@@ -551,8 +499,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertySetDefFactory'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertySetDefFactory'(doc) -> ["CosPropertyService_PropertySetDefFactory"];
-'CosPropertyService_PropertySetDefFactory'(suite) -> [];
'CosPropertyService_PropertySetDefFactory'(_) ->
?nomatch(undefined, 'CosPropertyService_PropertySetDefFactory':oe_tc(create_propertysetdef)),
?nomatch(undefined, 'CosPropertyService_PropertySetDefFactory':oe_tc(create_constrained_propertysetdef)),
@@ -571,8 +517,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosPropertyService_PropertySetFactory'
%% Description:
%%-----------------------------------------------------------------
-'CosPropertyService_PropertySetFactory'(doc) -> ["CosPropertyService_PropertySetFactory"];
-'CosPropertyService_PropertySetFactory'(suite) -> [];
'CosPropertyService_PropertySetFactory'(_) ->
?nomatch(undefined, 'CosPropertyService_PropertySetFactory':oe_tc(create_propertyset)),
?nomatch(undefined, 'CosPropertyService_PropertySetFactory':oe_tc(create_constrained_propertyset)),
diff --git a/lib/cosProperty/test/property_SUITE.erl b/lib/cosProperty/test/property_SUITE.erl
index 42ddf04038..77f35c319a 100644
--- a/lib/cosProperty/test/property_SUITE.erl
+++ b/lib/cosProperty/test/property_SUITE.erl
@@ -36,7 +36,7 @@
-include_lib("common_test/include/ct.hrl").
%%--------------- DEFINES ------------------------------------
--define(default_timeout, ?t:minutes(20)).
+-define(default_timeout, test_server:minutes(20)).
-define(match(ExpectedRes, Expr),
fun() ->
AcTuAlReS = (catch (Expr)),
@@ -122,18 +122,17 @@ cases() ->
%%-----------------------------------------------------------------
%% Init and cleanup functions.
%%-----------------------------------------------------------------
-
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -143,7 +142,7 @@ init_per_suite(Config) ->
orber:jump_start(),
cosProperty:install(),
cosProperty:install_db(),
- ?line ?match(ok, application:start(cosProperty)),
+ ?match(ok, application:start(cosProperty)),
if
is_list(Config) ->
Config;
@@ -163,8 +162,6 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Tests app file
%%-----------------------------------------------------------------
-app_test(doc) -> [];
-app_test(suite) -> [];
app_test(_Config) ->
ok=test_server:app_test(cosProperty),
ok.
@@ -173,9 +170,6 @@ app_test(_Config) ->
%%-----------------------------------------------------------------
%% CosPropertyService_PropertySetDefFactory API tests
%%-----------------------------------------------------------------
-create_setdef_api(doc) -> ["CosPropertyService_PropertySetDefFactory API tests.",
- ""];
-create_setdef_api(suite) -> [];
create_setdef_api(_Config) ->
ValidDefs = [#'CosPropertyService_PropertyDef'
@@ -239,9 +233,6 @@ create_setdef_api(_Config) ->
%%-----------------------------------------------------------------
%% CosPropertyService_PropertySetFactory API tests
%%-----------------------------------------------------------------
-create_set_api(doc) -> ["CosPropertyService_PropertySetFactory API tests.",
- ""];
-create_set_api(suite) -> [];
create_set_api(_Config) ->
Valid = [#'CosPropertyService_Property'
{property_name = ?id1,
@@ -296,9 +287,6 @@ create_set_api(_Config) ->
%%-----------------------------------------------------------------
%% CosPropertyService_PropertySetDef API tests
%%-----------------------------------------------------------------
-define_api(doc) -> ["CosPropertyService_PropertySet API tests.",
- ""];
-define_api(suite) -> [];
define_api(_Config) ->
ValidDefs = [#'CosPropertyService_Property'
{property_name = ?id1,
@@ -466,9 +454,6 @@ define_api(_Config) ->
%%-----------------------------------------------------------------
%% CosPropertyService_PropertySetDef API tests
%%-----------------------------------------------------------------
-define_with_mode_api(doc) -> ["CosPropertyService_PropertySetDef API tests.",
- ""];
-define_with_mode_api(suite) -> [];
define_with_mode_api(_Config) ->
ValidDefs = [#'CosPropertyService_PropertyDef'
{property_name = ?id1,
@@ -684,9 +669,6 @@ define_with_mode_api(_Config) ->
%%-----------------------------------------------------------------
%% CosPropertyService_PropertyNamesIterator API tests
%%-----------------------------------------------------------------
-names_iterator_api(doc) -> ["CosPropertyService_PropertyNamesIterator API tests.",
- ""];
-names_iterator_api(suite) -> [];
names_iterator_api(_Config) ->
Fac = ?match({_,pseudo,_,_,_,_}, cosProperty:start_SetFactory()),
Obj = ?match({_,pseudo,_,_,_,_}, 'CosPropertyService_PropertySetFactory':
@@ -717,9 +699,6 @@ names_iterator_api(_Config) ->
%%-----------------------------------------------------------------
%% CosPropertyService_PropertiesIterator API tests
%%-----------------------------------------------------------------
-properties_iterator_api(doc) -> ["CosPropertyService_PropertiesIterator API tests.",
- ""];
-properties_iterator_api(suite) -> [];
properties_iterator_api(_Config) ->
Fac = ?match({_,pseudo,_,_,_,_}, cosProperty:start_SetFactory()),
Obj = ?match({_,pseudo,_,_,_,_}, 'CosPropertyService_PropertySetFactory':
diff --git a/lib/cosTime/test/generated_SUITE.erl b/lib/cosTime/test/generated_SUITE.erl
index ea1362adef..b030155340 100644
--- a/lib/cosTime/test/generated_SUITE.erl
+++ b/lib/cosTime/test/generated_SUITE.erl
@@ -29,7 +29,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -40,7 +40,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -51,7 +51,7 @@
Not ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS);
+ exit(AcTuAlReS);
_ ->
AcTuAlReS
end
@@ -63,7 +63,7 @@
case orber_tc:check_tc(TC) of
false ->
io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
- ?line exit(TC);
+ exit(TC);
true ->
true
end
@@ -114,12 +114,12 @@ end_per_group(_GroupName, Config) ->
%% Init and cleanup functions.
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -127,8 +127,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'TimeBase_IntervalT'
%% Description:
%%-----------------------------------------------------------------
-'TimeBase_IntervalT'(doc) -> ["TimeBase_IntervalT"];
-'TimeBase_IntervalT'(suite) -> [];
'TimeBase_IntervalT'(_) ->
?match(true, orber_tc:check_tc('TimeBase_IntervalT':tc())),
?match("IDL:omg.org/TimeBase/IntervalT:1.0",
@@ -142,8 +140,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'TimeBase_UtcT'
%% Description:
%%-----------------------------------------------------------------
-'TimeBase_UtcT'(doc) -> ["TimeBase_UtcT"];
-'TimeBase_UtcT'(suite) -> [];
'TimeBase_UtcT'(_) ->
?match(true, orber_tc:check_tc('TimeBase_UtcT':tc())),
?match("IDL:omg.org/TimeBase/UtcT:1.0",
@@ -157,8 +153,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTime_TimeUnavailable'
%% Description:
%%-----------------------------------------------------------------
-'CosTime_TimeUnavailable'(doc) -> ["CosTime_TimeUnavailable"];
-'CosTime_TimeUnavailable'(suite) -> [];
'CosTime_TimeUnavailable'(_) ->
?match(true, orber_tc:check_tc('CosTime_TimeUnavailable':tc())),
?match("IDL:omg.org/CosTime/TimeUnavailable:1.0",
@@ -172,8 +166,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTimerEvent_TimerEventT'
%% Description:
%%-----------------------------------------------------------------
-'CosTimerEvent_TimerEventT'(doc) -> ["CosTimerEvent_TimerEventT"];
-'CosTimerEvent_TimerEventT'(suite) -> [];
'CosTimerEvent_TimerEventT'(_) ->
?match(true, orber_tc:check_tc('CosTimerEvent_TimerEventT':tc())),
?match("IDL:omg.org/CosTimerEvent/TimerEventT:1.0",
@@ -187,8 +179,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTime_TIO'
%% Description:
%%-----------------------------------------------------------------
-'CosTime_TIO'(doc) -> ["CosTime_TIO"];
-'CosTime_TIO'(suite) -> [];
'CosTime_TIO'(_) ->
?nomatch(undefined, 'CosTime_TIO':oe_tc('_get_time_interval')),
?nomatch(undefined, 'CosTime_TIO':oe_tc(spans)),
@@ -207,8 +197,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTime_TimeService'
%% Description:
%%-----------------------------------------------------------------
-'CosTime_TimeService'(doc) -> ["CosTime_TimeService"];
-'CosTime_TimeService'(suite) -> [];
'CosTime_TimeService'(_) ->
?nomatch(undefined, 'CosTime_TimeService':oe_tc(universal_time)),
?nomatch(undefined, 'CosTime_TimeService':oe_tc(secure_universal_time)),
@@ -229,8 +217,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTime_UTO'
%% Description:
%%-----------------------------------------------------------------
-'CosTime_UTO'(doc) -> ["CosTime_UTO"];
-'CosTime_UTO'(suite) -> [];
'CosTime_UTO'(_) ->
?nomatch(undefined, 'CosTime_UTO':oe_tc('_get_time')),
?nomatch(undefined, 'CosTime_UTO':oe_tc('_get_inaccuracy')),
@@ -253,8 +239,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTimerEvent_TimerEventHandler'
%% Description:
%%-----------------------------------------------------------------
-'CosTimerEvent_TimerEventHandler'(doc) -> ["CosTimerEvent_TimerEventHandler"];
-'CosTimerEvent_TimerEventHandler'(suite) -> [];
'CosTimerEvent_TimerEventHandler'(_) ->
?nomatch(undefined, 'CosTimerEvent_TimerEventHandler':oe_tc('_get_status')),
?nomatch(undefined, 'CosTimerEvent_TimerEventHandler':oe_tc(time_set)),
@@ -275,8 +259,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTimerEvent_TimerEventService'
%% Description:
%%-----------------------------------------------------------------
-'CosTimerEvent_TimerEventService'(doc) -> ["CosTimerEvent_TimerEventService"];
-'CosTimerEvent_TimerEventService'(suite) -> [];
'CosTimerEvent_TimerEventService'(_) ->
?nomatch(undefined, 'CosTimerEvent_TimerEventService':oe_tc(register)),
?nomatch(undefined, 'CosTimerEvent_TimerEventService':oe_tc(unregister)),
diff --git a/lib/cosTime/test/time_SUITE.erl b/lib/cosTime/test/time_SUITE.erl
index 431b1d2d8a..f85f13badb 100644
--- a/lib/cosTime/test/time_SUITE.erl
+++ b/lib/cosTime/test/time_SUITE.erl
@@ -33,7 +33,7 @@
-include_lib("common_test/include/ct.hrl").
%%--------------- DEFINES ------------------------------------
--define(default_timeout, ?t:minutes(20)).
+-define(default_timeout, test_server:minutes(20)).
-define(match(ExpectedRes, Expr),
fun() ->
AcTuAlReS = (catch (Expr)),
@@ -105,14 +105,14 @@ cases() ->
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -150,8 +150,6 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Tests app file
%%-----------------------------------------------------------------
-app_test(doc) -> [];
-app_test(suite) -> [];
app_test(_Config) ->
ok=test_server:app_test(cosTime),
ok.
@@ -159,27 +157,25 @@ app_test(_Config) ->
%%-----------------------------------------------------------------
%% CosTime API tests
%%-----------------------------------------------------------------
-time_api(doc) -> ["CosTime API tests.", ""];
-time_api(suite) -> [];
time_api(_Config) ->
- ?line ?match(ok, application:start(cosTime)),
+ ?match(ok, application:start(cosTime)),
TS=cosTime:start_time_service(0, 500),
Time=calendar:datetime_to_gregorian_seconds({{1582,1,1},{0,0,0}}),
Inaccuracy = 1000,
Tdf =1,
Utc = #'TimeBase_UtcT'{time=Time, inacclo = ?low_TimeT(Inaccuracy),
inacchi = ?high_TimeT(Inaccuracy), tdf = Tdf},
- ?line UTO1='CosTime_TimeService':new_universal_time(TS, Time, Inaccuracy, Tdf),
- ?line UTO2='CosTime_TimeService':uto_from_utc(TS, Utc),
- ?line ?match(Time, 'CosTime_UTO':'_get_time'(UTO1)),
- ?line ?match(Inaccuracy, 'CosTime_UTO':'_get_inaccuracy'(UTO1)),
- ?line ?match(Tdf, 'CosTime_UTO':'_get_tdf'(UTO1)),
- ?line ?match(Utc, 'CosTime_UTO':'_get_utc_time'(UTO1)),
-
- ?line ?match(Time, 'CosTime_UTO':'_get_time'(UTO2)),
- ?line ?match(Inaccuracy, 'CosTime_UTO':'_get_inaccuracy'(UTO2)),
- ?line ?match(Tdf, 'CosTime_UTO':'_get_tdf'(UTO2)),
- ?line ?match(Utc, 'CosTime_UTO':'_get_utc_time'(UTO2)),
+ UTO1='CosTime_TimeService':new_universal_time(TS, Time, Inaccuracy, Tdf),
+ UTO2='CosTime_TimeService':uto_from_utc(TS, Utc),
+ ?match(Time, 'CosTime_UTO':'_get_time'(UTO1)),
+ ?match(Inaccuracy, 'CosTime_UTO':'_get_inaccuracy'(UTO1)),
+ ?match(Tdf, 'CosTime_UTO':'_get_tdf'(UTO1)),
+ ?match(Utc, 'CosTime_UTO':'_get_utc_time'(UTO1)),
+
+ ?match(Time, 'CosTime_UTO':'_get_time'(UTO2)),
+ ?match(Inaccuracy, 'CosTime_UTO':'_get_inaccuracy'(UTO2)),
+ ?match(Tdf, 'CosTime_UTO':'_get_tdf'(UTO2)),
+ ?match(Utc, 'CosTime_UTO':'_get_utc_time'(UTO2)),
TIO1='CosTime_TimeService':new_interval(TS, 2, 5),
_TIO2='CosTime_TimeService':new_interval(TS, 3, 6),
@@ -189,40 +185,40 @@ time_api(_Config) ->
TIO6='CosTime_TimeService':new_interval(TS, 2, 6),
TIO7='CosTime_TimeService':new_interval(TS, 3, 7),
- ?line {_,TIO8} = ?match({'OTContained', _}, 'CosTime_TIO':overlaps(TIO1, TIO6)),
- ?line {_,TIO9} = ?match({'OTContainer', _}, 'CosTime_TIO':overlaps(TIO1, TIO1)),
- ?line {_,TIO10} = ?match({'OTContainer', _}, 'CosTime_TIO':overlaps(TIO1, TIO4)),
- ?line {_,TIO11} = ?match({'OTOverlap', _}, 'CosTime_TIO':overlaps(TIO1, TIO3)),
- ?line {_,TIO12} = ?match({'OTOverlap', _}, 'CosTime_TIO':overlaps(TIO1, TIO7)),
- ?line {_,TIO13} = ?match({'OTNoOverlap', _}, 'CosTime_TIO':overlaps(TIO1, TIO5)),
+ {_,TIO8} = ?match({'OTContained', _}, 'CosTime_TIO':overlaps(TIO1, TIO6)),
+ {_,TIO9} = ?match({'OTContainer', _}, 'CosTime_TIO':overlaps(TIO1, TIO1)),
+ {_,TIO10} = ?match({'OTContainer', _}, 'CosTime_TIO':overlaps(TIO1, TIO4)),
+ {_,TIO11} = ?match({'OTOverlap', _}, 'CosTime_TIO':overlaps(TIO1, TIO3)),
+ {_,TIO12} = ?match({'OTOverlap', _}, 'CosTime_TIO':overlaps(TIO1, TIO7)),
+ {_,TIO13} = ?match({'OTNoOverlap', _}, 'CosTime_TIO':overlaps(TIO1, TIO5)),
- ?line ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO8)),
- ?line ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO9)),
- ?line ?match({'TimeBase_IntervalT',3,4},'CosTime_TIO':'_get_time_interval'(TIO10)),
- ?line ?match({'TimeBase_IntervalT',2,3},'CosTime_TIO':'_get_time_interval'(TIO11)),
- ?line ?match({'TimeBase_IntervalT',3,5},'CosTime_TIO':'_get_time_interval'(TIO12)),
- ?line ?match({'TimeBase_IntervalT',5,7},'CosTime_TIO':'_get_time_interval'(TIO13)),
+ ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO8)),
+ ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO9)),
+ ?match({'TimeBase_IntervalT',3,4},'CosTime_TIO':'_get_time_interval'(TIO10)),
+ ?match({'TimeBase_IntervalT',2,3},'CosTime_TIO':'_get_time_interval'(TIO11)),
+ ?match({'TimeBase_IntervalT',3,5},'CosTime_TIO':'_get_time_interval'(TIO12)),
+ ?match({'TimeBase_IntervalT',5,7},'CosTime_TIO':'_get_time_interval'(TIO13)),
- ?line UTO3='CosTime_TimeService':new_universal_time(TS, 4, 2, 0), %% 2-6
- ?line UTO4='CosTime_TimeService':new_universal_time(TS, 2, 1, 0), %% 1-3
- ?line UTO5='CosTime_TimeService':new_universal_time(TS, 3, 0, 0), %% 3-3
- ?line UTO6='CosTime_TimeService':new_universal_time(TS, 9, 1, 0), %% 8-10
- ?line UTO7='CosTime_TimeService':new_universal_time(TS, 4, 3, 0), %% 1-7
- ?line UTO8='CosTime_TimeService':new_universal_time(TS, 5, 2, 0), %% 3-7
-
- ?line {_,TIO14} = ?match({'OTContained', _}, 'CosTime_TIO':spans(TIO1, UTO7)),
- ?line {_,TIO15} = ?match({'OTContainer', _}, 'CosTime_TIO':spans(TIO1, UTO5)),
- ?line {_,TIO16} = ?match({'OTOverlap', _}, 'CosTime_TIO':spans(TIO1, UTO4)),
- ?line {_,TIO17} = ?match({'OTOverlap', _}, 'CosTime_TIO':spans(TIO1, UTO8)),
- ?line {_,TIO18} = ?match({'OTNoOverlap', _}, 'CosTime_TIO':spans(TIO1, UTO6)),
- ?line {_,TIO19} = ?match({'OTContained', _}, 'CosTime_TIO':spans(TIO1, UTO3)),
-
- ?line ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO14)),
- ?line ?match({'TimeBase_IntervalT',3,3},'CosTime_TIO':'_get_time_interval'(TIO15)),
- ?line ?match({'TimeBase_IntervalT',2,3},'CosTime_TIO':'_get_time_interval'(TIO16)),
- ?line ?match({'TimeBase_IntervalT',3,5},'CosTime_TIO':'_get_time_interval'(TIO17)),
- ?line ?match({'TimeBase_IntervalT',5,8},'CosTime_TIO':'_get_time_interval'(TIO18)),
- ?line ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO19)),
+ UTO3='CosTime_TimeService':new_universal_time(TS, 4, 2, 0), %% 2-6
+ UTO4='CosTime_TimeService':new_universal_time(TS, 2, 1, 0), %% 1-3
+ UTO5='CosTime_TimeService':new_universal_time(TS, 3, 0, 0), %% 3-3
+ UTO6='CosTime_TimeService':new_universal_time(TS, 9, 1, 0), %% 8-10
+ UTO7='CosTime_TimeService':new_universal_time(TS, 4, 3, 0), %% 1-7
+ UTO8='CosTime_TimeService':new_universal_time(TS, 5, 2, 0), %% 3-7
+
+ {_,TIO14} = ?match({'OTContained', _}, 'CosTime_TIO':spans(TIO1, UTO7)),
+ {_,TIO15} = ?match({'OTContainer', _}, 'CosTime_TIO':spans(TIO1, UTO5)),
+ {_,TIO16} = ?match({'OTOverlap', _}, 'CosTime_TIO':spans(TIO1, UTO4)),
+ {_,TIO17} = ?match({'OTOverlap', _}, 'CosTime_TIO':spans(TIO1, UTO8)),
+ {_,TIO18} = ?match({'OTNoOverlap', _}, 'CosTime_TIO':spans(TIO1, UTO6)),
+ {_,TIO19} = ?match({'OTContained', _}, 'CosTime_TIO':spans(TIO1, UTO3)),
+
+ ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO14)),
+ ?match({'TimeBase_IntervalT',3,3},'CosTime_TIO':'_get_time_interval'(TIO15)),
+ ?match({'TimeBase_IntervalT',2,3},'CosTime_TIO':'_get_time_interval'(TIO16)),
+ ?match({'TimeBase_IntervalT',3,5},'CosTime_TIO':'_get_time_interval'(TIO17)),
+ ?match({'TimeBase_IntervalT',5,8},'CosTime_TIO':'_get_time_interval'(TIO18)),
+ ?match({'TimeBase_IntervalT',2,5},'CosTime_TIO':'_get_time_interval'(TIO19)),
cosTime:stop_time_service(TS),
@@ -233,66 +229,64 @@ time_api(_Config) ->
%%-----------------------------------------------------------------
%% CosTimerEvent API tests
%%-----------------------------------------------------------------
-timerevent_api(doc) -> ["CosTimerEvent API tests.", ""];
-timerevent_api(suite) -> [];
timerevent_api(_Config) ->
%% Init cosTime apps.
- ?line ?match(ok, application:start(cosTime)),
- ?line TS=cosTime:start_time_service(0, 500),
- ?line TES=cosTime:start_timerevent_service(TS),
+ ?match(ok, application:start(cosTime)),
+ TS=cosTime:start_time_service(0, 500),
+ TES=cosTime:start_timerevent_service(TS),
%%----- Initialize the cosNotification application. -----
- ?line cosNotificationApp:start(),
- ?line Fac = (catch cosNotificationApp:start_factory([])),
- ?line {Ch, _Id1} = (catch 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(Fac, [], [])),
+ cosNotificationApp:start(),
+ Fac = (catch cosNotificationApp:start_factory([])),
+ {Ch, _Id1} = (catch 'CosNotifyChannelAdmin_EventChannelFactory':create_channel(Fac, [], [])),
%% Create the Admin objects
- ?line {AdminSupplier, _ASID}= ?match({{_,key,_,_,_,_},_},
+ {AdminSupplier, _ASID}= ?match({{_,key,_,_,_,_},_},
'CosNotifyChannelAdmin_EventChannel':new_for_suppliers(Ch,'OR_OP')),
- ?line {AdminConsumer, _ACID}= ?match({{_,key,_,_,_,_},_},
+ {AdminConsumer, _ACID}= ?match({{_,key,_,_,_,_},_},
'CosNotifyChannelAdmin_EventChannel':new_for_consumers(Ch,'OR_OP')),
%% Create a push consumer TimerEventService will push events to.
- ?line {ProxyPushConsumer,_ID10}= ?match({{_,key,_,_,_,_},_},
+ {ProxyPushConsumer,_ID10}= ?match({{_,key,_,_,_,_},_},
'CosNotifyChannelAdmin_SupplierAdmin':obtain_notification_push_consumer(AdminSupplier, 'ANY_EVENT')),
%% Create a pull suppliers so we can check we actually got the event.
- ?line {ProxyPullSupplier,_ID1} = ?match({{_,key,_,_,_,_},_},
+ {ProxyPullSupplier,_ID1} = ?match({{_,key,_,_,_,_},_},
'CosNotifyChannelAdmin_ConsumerAdmin':obtain_notification_pull_supplier(AdminConsumer, 'ANY_EVENT')),
AnyEvent = any:create(orber_tc:long(), 100),
- ?line UTO=?match({_,pseudo,_,_,_,_}, 'CosTime_TimeService':new_universal_time(TS, 10*10000000,1,1)),
- ?line EH=?match({_,key,_,_,_,_}, 'CosTimerEvent_TimerEventService':register(TES, ProxyPushConsumer, AnyEvent)),
-
- ?line ?match('ESTimeCleared','CosTimerEvent_TimerEventHandler':'_get_status'(EH)),
- ?line ?match({false,_},'CosTimerEvent_TimerEventHandler':time_set(EH)),
- ?line ?match(ok,'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTRelative', UTO)),
- ?line ?match({true,_},'CosTimerEvent_TimerEventHandler':time_set(EH)),
- ?line ?match('ESTimeSet','CosTimerEvent_TimerEventHandler':'_get_status'(EH)),
+ UTO=?match({_,pseudo,_,_,_,_}, 'CosTime_TimeService':new_universal_time(TS, 10*10000000,1,1)),
+ EH=?match({_,key,_,_,_,_}, 'CosTimerEvent_TimerEventService':register(TES, ProxyPushConsumer, AnyEvent)),
+
+ ?match('ESTimeCleared','CosTimerEvent_TimerEventHandler':'_get_status'(EH)),
+ ?match({false,_},'CosTimerEvent_TimerEventHandler':time_set(EH)),
+ ?match(ok,'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTRelative', UTO)),
+ ?match({true,_},'CosTimerEvent_TimerEventHandler':time_set(EH)),
+ ?match('ESTimeSet','CosTimerEvent_TimerEventHandler':'_get_status'(EH)),
- ?line ?match({{any,tk_null,null}, false},
+ ?match({{any,tk_null,null}, false},
'CosNotifyChannelAdmin_ProxyPullSupplier':try_pull(ProxyPullSupplier)),
- ?line ?match(AnyEvent, 'CosNotifyChannelAdmin_ProxyPullSupplier':pull(ProxyPullSupplier)),
- ?line ?match('ESTriggered','CosTimerEvent_TimerEventHandler':'_get_status'(EH)),
+ ?match(AnyEvent, 'CosNotifyChannelAdmin_ProxyPullSupplier':pull(ProxyPullSupplier)),
+ ?match('ESTriggered','CosTimerEvent_TimerEventHandler':'_get_status'(EH)),
%% It's allowed to send an UTO with time eq. to 0 if the server is TTRelative.
%% When TTAbsolute BAD_PARAM is raised.
- ?line UTO2=?match({_,pseudo,_,_,_,_}, 'CosTime_TimeService':new_universal_time(TS, 0,1,1)),
- ?line ?match({'EXCEPTION',_},'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTAbsolute', UTO2)),
- ?line ?match(ok,'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTRelative', UTO2)),
- ?line ?match(AnyEvent, 'CosNotifyChannelAdmin_ProxyPullSupplier':pull(ProxyPullSupplier)),
+ UTO2=?match({_,pseudo,_,_,_,_}, 'CosTime_TimeService':new_universal_time(TS, 0,1,1)),
+ ?match({'EXCEPTION',_},'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTAbsolute', UTO2)),
+ ?match(ok,'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTRelative', UTO2)),
+ ?match(AnyEvent, 'CosNotifyChannelAdmin_ProxyPullSupplier':pull(ProxyPullSupplier)),
%% TTPeriodic is defined to be relative, i.e., we can use the tactic as above.
- ?line ?match(ok,'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTPeriodic', UTO2)),
+ ?match(ok,'CosTimerEvent_TimerEventHandler':set_timer(EH, 'TTPeriodic', UTO2)),
%% Sleep for UTO*2+4 secs. At this point the Timer should have delivered 2 events.
timer:sleep(24000),
%% Cancel the timer so no more events will be delivered.
- ?line ?match(true,'CosTimerEvent_TimerEventHandler':cancel_timer(EH)),
+ ?match(true,'CosTimerEvent_TimerEventHandler':cancel_timer(EH)),
- ?line ?match({AnyEvent, true}, 'CosNotifyChannelAdmin_ProxyPullSupplier':try_pull(ProxyPullSupplier)),
- ?line ?match({AnyEvent, true}, 'CosNotifyChannelAdmin_ProxyPullSupplier':try_pull(ProxyPullSupplier)),
- ?line ?match({{any,tk_null,null}, false},
+ ?match({AnyEvent, true}, 'CosNotifyChannelAdmin_ProxyPullSupplier':try_pull(ProxyPullSupplier)),
+ ?match({AnyEvent, true}, 'CosNotifyChannelAdmin_ProxyPullSupplier':try_pull(ProxyPullSupplier)),
+ ?match({{any,tk_null,null}, false},
'CosNotifyChannelAdmin_ProxyPullSupplier':try_pull(ProxyPullSupplier)),
diff --git a/lib/cosTransactions/test/generated_SUITE.erl b/lib/cosTransactions/test/generated_SUITE.erl
index e4a7a5bf27..52b850b189 100644
--- a/lib/cosTransactions/test/generated_SUITE.erl
+++ b/lib/cosTransactions/test/generated_SUITE.erl
@@ -30,7 +30,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -41,7 +41,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -52,7 +52,7 @@
Not ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS);
+ exit(AcTuAlReS);
_ ->
AcTuAlReS
end
@@ -64,7 +64,7 @@
case orber_tc:check_tc(TC) of
false ->
io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
- ?line exit(TC);
+ exit(TC);
true ->
true
end
@@ -133,22 +133,18 @@ end_per_group(_GroupName, Config) ->
%% Init and cleanup functions.
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
-
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
-
%%-----------------------------------------------------------------
%% Test Case: 'CosTransactions_HeuristicCommit'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_HeuristicCommit'(doc) -> ["CosTransactions_HeuristicCommit"];
-'CosTransactions_HeuristicCommit'(suite) -> [];
'CosTransactions_HeuristicCommit'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_HeuristicCommit':tc())),
?match("IDL:omg.org/CosTransactions/HeuristicCommit:1.0",
@@ -162,8 +158,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_HeuristicHazard'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_HeuristicHazard'(doc) -> ["CosTransactions_HeuristicHazard"];
-'CosTransactions_HeuristicHazard'(suite) -> [];
'CosTransactions_HeuristicHazard'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_HeuristicHazard':tc())),
?match("IDL:omg.org/CosTransactions/HeuristicHazard:1.0",
@@ -177,8 +171,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_HeuristicMixed'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_HeuristicMixed'(doc) -> ["CosTransactions_HeuristicMixed"];
-'CosTransactions_HeuristicMixed'(suite) -> [];
'CosTransactions_HeuristicMixed'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_HeuristicMixed':tc())),
?match("IDL:omg.org/CosTransactions/HeuristicMixed:1.0",
@@ -192,8 +184,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_HeuristicRollback'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_HeuristicRollback'(doc) -> ["CosTransactions_HeuristicRollback"];
-'CosTransactions_HeuristicRollback'(suite) -> [];
'CosTransactions_HeuristicRollback'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_HeuristicRollback':tc())),
?match("IDL:omg.org/CosTransactions/HeuristicRollback:1.0",
@@ -207,8 +197,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_Inactive'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_Inactive'(doc) -> ["CosTransactions_Inactive"];
-'CosTransactions_Inactive'(suite) -> [];
'CosTransactions_Inactive'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_Inactive':tc())),
?match("IDL:omg.org/CosTransactions/Inactive:1.0",
@@ -222,8 +210,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_InvalidControl'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_InvalidControl'(doc) -> ["CosTransactions_InvalidControl"];
-'CosTransactions_InvalidControl'(suite) -> [];
'CosTransactions_InvalidControl'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_InvalidControl':tc())),
?match("IDL:omg.org/CosTransactions/InvalidControl:1.0",
@@ -237,8 +223,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_NoTransaction'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_NoTransaction'(doc) -> ["CosTransactions_NoTransaction"];
-'CosTransactions_NoTransaction'(suite) -> [];
'CosTransactions_NoTransaction'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_NoTransaction':tc())),
?match("IDL:omg.org/CosTransactions/NoTransaction:1.0",
@@ -252,8 +236,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_NotPrepared'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_NotPrepared'(doc) -> ["CosTransactions_NotPrepared"];
-'CosTransactions_NotPrepared'(suite) -> [];
'CosTransactions_NotPrepared'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_NotPrepared':tc())),
?match("IDL:omg.org/CosTransactions/NotPrepared:1.0",
@@ -267,8 +249,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_NotSubtransaction'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_NotSubtransaction'(doc) -> ["CosTransactions_NotSubtransaction"];
-'CosTransactions_NotSubtransaction'(suite) -> [];
'CosTransactions_NotSubtransaction'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_NotSubtransaction':tc())),
?match("IDL:omg.org/CosTransactions/NotSubtransaction:1.0",
@@ -282,8 +262,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_SubtransactionsUnavailable'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_SubtransactionsUnavailable'(doc) -> ["CosTransactions_SubtransactionsUnavailable"];
-'CosTransactions_SubtransactionsUnavailable'(suite) -> [];
'CosTransactions_SubtransactionsUnavailable'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_SubtransactionsUnavailable':tc())),
?match("IDL:omg.org/CosTransactions/SubtransactionsUnavailable:1.0",
@@ -297,8 +275,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_Unavailable'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_Unavailable'(doc) -> ["CosTransactions_Unavailable"];
-'CosTransactions_Unavailable'(suite) -> [];
'CosTransactions_Unavailable'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_Unavailable':tc())),
?match("IDL:omg.org/CosTransactions/Unavailable:1.0",
@@ -312,8 +288,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_SynchronizationUnavailable'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_SynchronizationUnavailable'(doc) -> ["CosTransactions_SynchronizationUnavailable"];
-'CosTransactions_SynchronizationUnavailable'(suite) -> [];
'CosTransactions_SynchronizationUnavailable'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_SynchronizationUnavailable':tc())),
?match("IDL:omg.org/CosTransactions/SynchronizationUnavailable:1.0",
@@ -326,8 +300,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_TransIdentity'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_TransIdentity'(doc) -> ["CosTransactions_TransIdentity"];
-'CosTransactions_TransIdentity'(suite) -> [];
'CosTransactions_TransIdentity'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_TransIdentity':tc())),
?match("IDL:omg.org/CosTransactions/TransIdentity:1.0",
@@ -340,8 +312,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_PropagationContext'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_PropagationContext'(doc) -> ["CosTransactions_PropagationContext"];
-'CosTransactions_PropagationContext'(suite) -> [];
'CosTransactions_PropagationContext'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_PropagationContext':tc())),
?match("IDL:omg.org/CosTransactions/PropagationContext:1.0",
@@ -354,8 +324,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_otid_t'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_otid_t'(doc) -> ["CosTransactions_otid_t"];
-'CosTransactions_otid_t'(suite) -> [];
'CosTransactions_otid_t'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_otid_t':tc())),
?match("IDL:omg.org/CosTransactions/otid_t:1.0",
@@ -368,8 +336,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_WrongTransaction'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_WrongTransaction'(doc) -> ["CosTransactions_WrongTransaction"];
-'CosTransactions_WrongTransaction'(suite) -> [];
'CosTransactions_WrongTransaction'(_) ->
?match(true, orber_tc:check_tc('CosTransactions_WrongTransaction':tc())),
?match("IDL:omg.org/CosTransactions/WrongTransaction:1.0",
@@ -383,8 +349,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_Control'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_Control'(doc) -> ["CosTransactions_Control"];
-'CosTransactions_Control'(suite) -> [];
'CosTransactions_Control'(_) ->
?nomatch(undefined, 'CosTransactions_Control':oe_tc(get_terminator)),
?nomatch(undefined, 'CosTransactions_Control':oe_tc(get_coordinator)),
@@ -402,8 +366,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_Coordinator'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_Coordinator'(doc) -> ["CosTransactions_Coordinator"];
-'CosTransactions_Coordinator'(suite) -> [];
'CosTransactions_Coordinator'(_) ->
?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(get_status)),
?nomatch(undefined, 'CosTransactions_Coordinator':oe_tc(get_parent_status)),
@@ -435,8 +397,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_RecoveryCoordinator'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_RecoveryCoordinator'(doc) -> ["CosTransactions_RecoveryCoordinator"];
-'CosTransactions_RecoveryCoordinator'(suite) -> [];
'CosTransactions_RecoveryCoordinator'(_) ->
?nomatch(undefined, 'CosTransactions_RecoveryCoordinator':oe_tc(replay_completion)),
?match(undefined, 'CosTransactions_RecoveryCoordinator':oe_tc(undefined)),
@@ -453,8 +413,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_Resource'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_Resource'(doc) -> ["CosTransactions_Resource"];
-'CosTransactions_Resource'(suite) -> [];
'CosTransactions_Resource'(_) ->
?nomatch(undefined, 'CosTransactions_Resource':oe_tc(prepare)),
?nomatch(undefined, 'CosTransactions_Resource':oe_tc(rollback)),
@@ -475,8 +433,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_SubtransactionAwareResource'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_SubtransactionAwareResource'(doc) -> ["CosTransactions_SubtransactionAwareResource"];
-'CosTransactions_SubtransactionAwareResource'(suite) -> [];
'CosTransactions_SubtransactionAwareResource'(_) ->
?nomatch(undefined, 'CosTransactions_SubtransactionAwareResource':oe_tc(commit_subtransaction)),
?nomatch(undefined, 'CosTransactions_SubtransactionAwareResource':oe_tc(rollback_subtransaction)),
@@ -500,8 +456,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_Terminator'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_Terminator'(doc) -> ["CosTransactions_Terminator"];
-'CosTransactions_Terminator'(suite) -> [];
'CosTransactions_Terminator'(_) ->
?nomatch(undefined, 'CosTransactions_Terminator':oe_tc(commit)),
?nomatch(undefined, 'CosTransactions_Terminator':oe_tc(rollback)),
@@ -519,8 +473,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'CosTransactions_TransactionFactory'
%% Description:
%%-----------------------------------------------------------------
-'CosTransactions_TransactionFactory'(doc) -> ["CosTransactions_TransactionFactory"];
-'CosTransactions_TransactionFactory'(suite) -> [];
'CosTransactions_TransactionFactory'(_) ->
?nomatch(undefined, 'CosTransactions_TransactionFactory':oe_tc(create)),
?nomatch(undefined, 'CosTransactions_TransactionFactory':oe_tc(recreate)),
@@ -538,8 +490,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: 'ETraP_Server'
%% Description:
%%-----------------------------------------------------------------
-'ETraP_Server'(doc) -> ["ETraP_Server"];
-'ETraP_Server'(suite) -> [];
'ETraP_Server'(_) ->
?nomatch(undefined, 'ETraP_Server':oe_tc(get_status)),
?nomatch(undefined, 'ETraP_Server':oe_tc(get_parent_status)),
diff --git a/lib/cosTransactions/test/transactions_SUITE.erl b/lib/cosTransactions/test/transactions_SUITE.erl
index 0d270c1f07..00753a4e6e 100644
--- a/lib/cosTransactions/test/transactions_SUITE.erl
+++ b/lib/cosTransactions/test/transactions_SUITE.erl
@@ -31,7 +31,7 @@
-include_lib("common_test/include/ct.hrl").
--define(default_timeout, ?t:minutes(20)).
+-define(default_timeout, test_server:minutes(20)).
%%-----------------------------------------------------------------
@@ -63,19 +63,16 @@ end_per_group(_GroupName, Config) ->
cases() ->
[etrap_api, resource_api, app_test].
-
-
%%-----------------------------------------------------------------
%% Init and cleanup functions.
%%-----------------------------------------------------------------
-
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
'oe_CosTransactions':'oe_register'(),
'oe_etrap_test':'oe_register'(),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
@@ -84,7 +81,7 @@ end_per_testcase(_Case, Config) ->
'oe_CosTransactions':'oe_unregister'(),
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -110,8 +107,6 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Tests app file
%%-----------------------------------------------------------------
-app_test(doc) -> [];
-app_test(suite) -> [];
app_test(_Config) ->
ok=test_server:app_test(cosTransactions),
ok.
@@ -119,12 +114,10 @@ app_test(_Config) ->
%%-----------------------------------------------------------------
%% API tests
%%-----------------------------------------------------------------
-etrap_api(doc) -> ["ETraP_Server tests", ""];
-etrap_api(suite) -> [];
etrap_api(_Config) ->
- ?line ?match(ok, application:start(cosTransactions),
+ ?match(ok, application:start(cosTransactions),
"Starting the cosTransactions application"),
- ?line TrFac = cosTransactions:start_factory(),
+ TrFac = cosTransactions:start_factory(),
%% Start a new transaction:
%% RootCoord
%% / \
@@ -139,28 +132,28 @@ etrap_api(_Config) ->
%%------ Test CosTransactions::Coordinator ------
- ?line ?match(true,
+ ?match(true,
'CosTransactions_Coordinator':is_same_transaction(Coord, Coord),
"'CosTransactions_Coordinator':is_same_transaction"),
- ?line ?match(false,
+ ?match(false,
'CosTransactions_Coordinator':is_same_transaction(Coord, SubCoord1),
"'CosTransactions_Coordinator':is_same_transaction"),
- ?line ?match(true,
+ ?match(true,
'CosTransactions_Coordinator':is_descendant_transaction(Coord, Coord),
"'CosTransactions_Coordinator':is_descendant_transaction"),
- ?line ?match(false,
+ ?match(false,
'CosTransactions_Coordinator':is_descendant_transaction(Coord, SubCoord1),
"'CosTransactions_Coordinator':is_descendant_transaction"),
- ?line ?match(true,
+ ?match(true,
'CosTransactions_Coordinator':is_descendant_transaction(SubCoord1, Coord),
"'CosTransactions_Coordinator':is_descendant_transaction"),
- ?line ?match(false,
+ ?match(false,
'CosTransactions_Coordinator':is_descendant_transaction(SubCoord1, SubCoord2),
"'CosTransactions_Coordinator':is_descendant_transaction"),
- ?line ?match(true,
+ ?match(true,
'CosTransactions_Coordinator':is_top_level_transaction(Coord),
"'CosTransactions_Coordinator':is_top_level_transaction"),
- ?line ?match(false,
+ ?match(false,
'CosTransactions_Coordinator':is_top_level_transaction(SubCoord2),
"'CosTransactions_Coordinator':is_top_level_transaction"),
@@ -169,31 +162,31 @@ etrap_api(_Config) ->
RootHash2 = 'CosTransactions_Coordinator':hash_top_level_tran(SubCoord1),
RootHash3 = 'CosTransactions_Coordinator':hash_top_level_tran(Coord),
_SubHash = 'CosTransactions_Coordinator':hash_transaction(SubCoord2),
- ?line ?match(RootHash, RepeatHash,
+ ?match(RootHash, RepeatHash,
"'CosTransactions_Coordinator':hash_transaction"),
- ?line ?match(RootHash, RootHash2,
+ ?match(RootHash, RootHash2,
"'CosTransactions_Coordinator':hash_top_level_tran"),
- ?line ?match(RootHash, RootHash3,
+ ?match(RootHash, RootHash3,
"'CosTransactions_Coordinator':hash_top_level_tran"),
-% ?line ?match_inverse(RootHash, SubHash,
+% ?match_inverse(RootHash, SubHash,
% "'CosTransactions_Coordinator':hash_transaction"),
- ?line ?match('StatusActive',
+ ?match('StatusActive',
'CosTransactions_Coordinator':get_status(Coord),
"'CosTransactions_Coordinator':get_status"),
- ?line ?match('StatusActive',
+ ?match('StatusActive',
'CosTransactions_Coordinator':get_status(SubCoord1),
"'CosTransactions_Coordinator':get_status"),
- ?line ?match('StatusActive',
+ ?match('StatusActive',
'CosTransactions_Coordinator':get_parent_status(Coord),
"'CosTransactions_Coordinator':get_parent_status"),
- ?line ?match('StatusActive',
+ ?match('StatusActive',
'CosTransactions_Coordinator':get_parent_status(SubCoord1),
"'CosTransactions_Coordinator':get_parent_status"),
- ?line ?match('StatusActive',
+ ?match('StatusActive',
'CosTransactions_Coordinator':get_top_level_status(Coord),
"'CosTransactions_Coordinator':get_top_level_status"),
- ?line ?match('StatusActive',
+ ?match('StatusActive',
'CosTransactions_Coordinator':get_top_level_status(SubCoord1),
"'CosTransactions_Coordinator':get_top_level_status"),
@@ -209,21 +202,21 @@ etrap_api(_Config) ->
_RC1 = 'CosTransactions_Coordinator':register_resource(SubCoord1, O1),
% 'CosTransactions_Coordinator':register_synchronization(SubCoord1, O1),
- ?line ?match('VoteCommit',
+ ?match('VoteCommit',
'CosTransactions_Resource':prepare(SubCoord1),
"'CosTransactions_Coordinator':prepare"),
%% The Transaction are no longer in 'StatusActive' state. No new
%% "members" allowed.
- ?line ?match('StatusPrepared',
+ ?match('StatusPrepared',
'CosTransactions_Coordinator':get_status(SubCoord1),
"'CosTransactions_Coordinator':get_status"),
-% ?line ?match({'EXCEPTION', ?tr_inactive},
+% ?match({'EXCEPTION', ?tr_inactive},
% 'CosTransactions_Coordinator':register_synchronization(SubCoord1, O1),
% "'CosTransactions_Coordinator':register_synchronization"),
- ?line ?match({'EXCEPTION', ?tr_inactive},
+ ?match({'EXCEPTION', ?tr_inactive},
'CosTransactions_Coordinator':register_resource(SubCoord1, O1),
"'CosTransactions_Coordinator':register_resource"),
- ?line ?match({'EXCEPTION', ?tr_inactive},
+ ?match({'EXCEPTION', ?tr_inactive},
'CosTransactions_Coordinator':create_subtransaction(SubCoord1),
"'CosTransactions_Coordinator':create_subtransaction"),
@@ -236,108 +229,106 @@ etrap_api(_Config) ->
catch corba:dispose(Coord),
catch corba:dispose(O1),
- ?line cosTransactions:stop_factory(TrFac),
- ?line application:stop(cosTransactions),
+ cosTransactions:stop_factory(TrFac),
+ application:stop(cosTransactions),
ok.
%%-----------------------------------------------------------------
%% API tests
%%-----------------------------------------------------------------
-resource_api(doc) -> ["cosTransactions API tests", ""];
-resource_api(suite) -> [];
resource_api(_Config) ->
- ?line ?match(ok, application:start(cosTransactions),
+ ?match(ok, application:start(cosTransactions),
"Starting the cosTransactions application"),
- ?line TrFac = cosTransactions:start_factory([{typecheck, true}]),
+ TrFac = cosTransactions:start_factory([{typecheck, true}]),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
run(TrFac, 0, {?nop, ?nop, ?nop, ?prepare_rollback}),
"TESTCASE #1: Prepare rollback Resource 4"),
- ?line ?match({'EXCEPTION', ?tr_mixed},
+ ?match({'EXCEPTION', ?tr_mixed},
run(TrFac, 0, {?nop, ?nop, ?commit_mix, ?nop}),
"TESTCASE #2: Heuristic Mixed exception Resource 3"),
- ?line ?match(ok,
+ ?match(ok,
run(TrFac, 0, {?nop, ?nop, ?nop, ?nop}),
"TESTCASE #3: Normal completion. No errors."),
- ?line ?match(ok,
+ ?match(ok,
run(TrFac, 0, {?nop, ?nop, ?nop, ?commit_cm}),
"TESTCASE #4: Heuristic Commit Exception Resource 4"),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
run(TrFac, 0, {?nop, ?rollback_rb, ?nop, ?prepare_rollback}),
"TESTCASE #5: Heuristic Rollbac Resource 2, Resource 4 reply 'VoteRollback'"),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
run(TrFac, 0, {?nop, ?nop, ?prepare_rollback, ?rollback_rb}),
"TESTCASE #6: Heuristic Rollbac Resource 4, Resource 3 reply 'VoteRollback'"),
- ?line ?match(ok,
+ ?match(ok,
run(TrFac, 0, {?nop, ?nop, ?commit_delay, ?nop}),
"TESTCASE #7: Resource 3 delay during commit. No timeout."),
- ?line ?match(ok,
+ ?match(ok,
run(TrFac, 0, {?nop, ?nop, ?prepare_delay, ?nop}),
"TESTCASE #8: Resource 3 delay during prepare. No timeout."),
- ?line ?match(ok,
+ ?match(ok,
run(TrFac, ?TIMEOUT, {?nop, ?commit_delay, ?nop, ?nop}),
"TESTCASE #9: Resource 3 delay during commit. Timeout."),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
run(TrFac, ?TIMEOUT, {?nop, ?prepare_delay, ?nop, ?nop}),
"TESTCASE #10: Resource 3 delay during prepare. Timeout."),
case ?is_debug_compiled of
true ->
%% Testing the Coordinators (root and sub).
- ?line ?match(ok,
+ ?match(ok,
run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?nop, ?nop,?crash_transient(commit), ?nop]}),
"TESTCASE #11: SubCoord 3 crash transient during commit."),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?nop, ?nop,?crash_transient(send_prepare), ?nop]}),
"TESTCASE #12: SubCoord 3 crash transient during send prepare."),
- ?line ?match({'EXCEPTION', ?tr_hazard},
+ ?match({'EXCEPTION', ?tr_hazard},
run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?nop, ?nop,?crash_permanent(commit), ?nop]}),
"TESTCASE #13: SubCoord 3 crash permanent during commit."),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?nop, ?nop,?crash_permanent(send_prepare), ?nop]}),
"TESTCASE #14: SubCoord 3 crash permanent during prepare."),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?nop, ?crash_transient(send_prepare), ?crash_transient(commit), ?nop]}),
"TESTCASE #15: SubCoord 2 crash transient during prepare. SubCoord 3 crash transient during commit"),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?crash_transient(send_prepare), ?nop, ?nop, ?nop]}),
"TESTCASE #16: RootCoord crash transient during send prepare."),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{}},
run(TrFac, 0, {?nop, ?nop, ?nop, ?nop, [?nop, ?crash_transient(prepare1), ?nop, ?nop]}),
"TESTCASE #17: SubCoord 1 crash transient during prepare1."),
- ?line ?match({'EXCEPTION', ?tr_mixed},
+ ?match({'EXCEPTION', ?tr_mixed},
run(TrFac, 0, {?nop, ?prepare_mix, ?nop, ?nop, [?nop, ?nop, ?crash_transient(prepare2), ?nop]}),
"TESTCASE #18: SubCoord 3 crash transient during prepare2. Resource 2 raise Heuristic Mixed during prepare"),
- ?line ?match({'EXCEPTION', ?tr_mixed},
+ ?match({'EXCEPTION', ?tr_mixed},
run(TrFac, 0, {?nop, ?commit_mix, ?nop, ?nop, [?nop, ?nop, ?crash_transient(commit2), ?nop]}),
"TESTCASE #19: Resource 2 raise Heurist mixed during commit. SubCoord crash transient commit2"),
- ?line ?match({'EXCEPTION', ?tr_mixed},
+ ?match({'EXCEPTION', ?tr_mixed},
run(TrFac, 0, {?nop, ?rollback_cm, ?nop, ?prepare_rollback, [?nop, ?crash_transient(rollback2), ?nop, ?nop]}),
"TESTCASE #20: Resource 2 raise Heuristic Commit during rollback. Resource 4 'VoteRollback'. SubCoord 2 crash transient rollback2."),
- ?line ?match({'EXCEPTION', ?tr_mixed},
+ ?match({'EXCEPTION', ?tr_mixed},
run(TrFac, 0, {?nop, ?nop, ?nop, ?commit_mix, [?nop, ?nop, ?crash_transient(send_forget1), ?nop]}),
"TESTCASE #21: Resource 4 raise Heuristic Mixed during commit. SubCoord 2 crash transient send_forget1."),
- ?line ?match({'EXCEPTION', ?tr_mixed},
+ ?match({'EXCEPTION', ?tr_mixed},
run(TrFac, 0, {?nop, ?nop, ?nop, ?commit_mix, [?crash_transient(send_forget1), ?nop, ?nop, ?nop]}),
"TESTCASE #22: Resource 4 raise Heuristic Mixed during commit. Root Coord crash transient send_forget1."),
- ?line ?match({'EXCEPTION', ?tr_mixed},
+ ?match({'EXCEPTION', ?tr_mixed},
run(TrFac, 0, {?nop, ?nop, ?nop, ?commit_mix, [?crash_transient(send_forget3), ?nop, ?crash_transient(send_forget1), ?nop]}),
"TESTCASE #23: Resource 4 raise Heuristic Mixed during commit. Root Coord crash transient send_forget3. SubCoord 3 crash transient send_forget1."),
- ?line ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
+ ?match({'EXCEPTION', #'TRANSACTION_ROLLEDBACK'{completion_status=?COMPLETED_YES}},
run(TrFac, ?TIMEOUT, {?nop, ?nop, ?nop, ?nop, [?delay_transient(root_delay, ?TIMEOUT*2), ?nop, ?nop, ?nop]}),
"TESTCASE #24: Delay RootCoord. Timeout."),
%% Testing the Terminator.
- ?line ?match({'EXCEPTION', ?tr_mixed},
+ ?match({'EXCEPTION', ?tr_mixed},
run(TrFac, ?TIMEOUT, {?nop, ?prepare_mix, ?nop, ?nop, [?nop, ?nop, ?nop, ?crash_transient(commit_heuristic1)]}),
"TESTCASE #25: Terminator crash transient after received and logged Heuristic mix."),
- ?line ?match(ok,
+ ?match(ok,
run(TrFac, ?TIMEOUT, {?nop, ?nop, ?nop, ?nop, [?nop, ?nop, ?nop, ?crash_transient(commit_ok2)]}),
"TESTCASE #26: Terminator crash transient after received and logged 'ok'.");
_ ->
ok
end,
- ?line cosTransactions:stop_factory(TrFac),
- ?line application:stop(cosTransactions),
+ cosTransactions:stop_factory(TrFac),
+ application:stop(cosTransactions),
ok.
%%-----------------------------------------------------------------
@@ -390,8 +381,6 @@ run(TrFac, Time, Spec) ->
catch corba:dispose(O4),
Reply.
-
-
start_resources({A1, A2, A3, A4})->
start_resources({A1, A2, A3, A4, ?no_context});
start_resources({A1, A2, A3, A4, Ctx})->
diff --git a/lib/crypto/c_src/crypto.c b/lib/crypto/c_src/crypto.c
index 067e220863..eee1a88723 100644
--- a/lib/crypto/c_src/crypto.c
+++ b/lib/crypto/c_src/crypto.c
@@ -37,7 +37,9 @@
#include <openssl/opensslconf.h>
#include <openssl/crypto.h>
+#ifndef OPENSSL_NO_DES
#include <openssl/des.h>
+#endif /* #ifndef OPENSSL_NO_DES */
/* #include <openssl/idea.h> This is not supported on the openssl OTP requires */
#include <openssl/dsa.h>
#include <openssl/rsa.h>
@@ -55,51 +57,69 @@
#include <openssl/evp.h>
#include <openssl/hmac.h>
-#if OPENSSL_VERSION_NUMBER >= 0x1000000fL
+
+/* Helper macro to construct a OPENSSL_VERSION_NUMBER.
+ * See openssl/opensslv.h
+ */
+#define OpenSSL_version(MAJ, MIN, FIX, P) \
+ ((((((((MAJ << 8) | MIN) << 8 ) | FIX) << 8) | (P-'a'+1)) << 4) | 0xf)
+
+#define OpenSSL_version_plain(MAJ, MIN, FIX) \
+ OpenSSL_version(MAJ,MIN,FIX,('a'-1))
+
+
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0)
#include <openssl/modes.h>
#endif
#include "crypto_callback.h"
-#if OPENSSL_VERSION_NUMBER >= 0x00908000L && !defined(OPENSSL_NO_SHA224) && defined(NID_sha224)\
- && !defined(OPENSSL_NO_SHA256) /* disabled like this in my sha.h (?) */
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(0,9,8) \
+ && !defined(OPENSSL_NO_SHA224) && defined(NID_sha224) \
+ && !defined(OPENSSL_NO_SHA256) /* disabled like this in my sha.h (?) */
# define HAVE_SHA224
#endif
-#if OPENSSL_VERSION_NUMBER >= 0x00908000L && !defined(OPENSSL_NO_SHA256) && defined(NID_sha256)
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(0,9,8) \
+ && !defined(OPENSSL_NO_SHA256) && defined(NID_sha256)
# define HAVE_SHA256
#endif
-#if OPENSSL_VERSION_NUMBER >= 0x00908000L && !defined(OPENSSL_NO_SHA384) && defined(NID_sha384)\
- && !defined(OPENSSL_NO_SHA512) /* disabled like this in my sha.h (?) */
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(0,9,8) \
+ && !defined(OPENSSL_NO_SHA384) && defined(NID_sha384)\
+ && !defined(OPENSSL_NO_SHA512) /* disabled like this in my sha.h (?) */
# define HAVE_SHA384
#endif
-#if OPENSSL_VERSION_NUMBER >= 0x00908000L && !defined(OPENSSL_NO_SHA512) && defined(NID_sha512)
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(0,9,8) \
+ && !defined(OPENSSL_NO_SHA512) && defined(NID_sha512)
# define HAVE_SHA512
#endif
-#if OPENSSL_VERSION_NUMBER >= 0x0090705FL
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version(0,9,7,'e')
# define HAVE_DES_ede3_cfb_encrypt
#endif
-#if OPENSSL_VERSION_NUMBER >= 0x009080ffL \
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version(0,9,8,'o') \
&& !defined(OPENSSL_NO_EC) \
&& !defined(OPENSSL_NO_ECDH) \
&& !defined(OPENSSL_NO_ECDSA)
# define HAVE_EC
#endif
-#if OPENSSL_VERSION_NUMBER >= 0x0090803fL
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version(0,9,8,'c')
# define HAVE_AES_IGE
#endif
-#if OPENSSL_VERSION_NUMBER >= 0x1000100fL
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,1)
# define HAVE_EVP_AES_CTR
# define HAVE_GCM
+# if OPENSSL_VERSION_NUMBER < OpenSSL_version(1,0,1,'d')
+# define HAVE_GCM_EVP_DECRYPT_BUG
+# endif
#endif
#if defined(NID_chacha20) && !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
# define HAVE_CHACHA20_POLY1305
#endif
-#if OPENSSL_VERSION_NUMBER <= 0x009080cfL
+#if OPENSSL_VERSION_NUMBER <= OpenSSL_version(0,9,8,'l')
# define HAVE_ECB_IVEC_BUG
#endif
@@ -244,6 +264,9 @@ static ERL_NIF_TERM rand_seed_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM a
static ERL_NIF_TERM aes_gcm_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM aes_gcm_decrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+#ifdef HAVE_GCM_EVP_DECRYPT_BUG
+static ERL_NIF_TERM aes_gcm_decrypt_NO_EVP(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
+#endif
static ERL_NIF_TERM chacha20_poly1305_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ERL_NIF_TERM chacha20_poly1305_decrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
@@ -437,16 +460,29 @@ struct cipher_type_t {
const size_t key_len; /* != 0 to also match on key_len */
};
+#ifdef OPENSSL_NO_DES
+#define COND_NO_DES_PTR(Ptr) (NULL)
+#else
+#define COND_NO_DES_PTR(Ptr) (Ptr)
+#endif
+
struct cipher_type_t cipher_types[] =
{
{{"rc2_cbc"}, {&EVP_rc2_cbc}},
- {{"des_cbc"}, {&EVP_des_cbc}},
- {{"des_cfb"}, {&EVP_des_cfb8}},
- {{"des_ecb"}, {&EVP_des_ecb}},
- {{"des_ede3_cbc"}, {&EVP_des_ede3_cbc}},
- {{"des_ede3_cbf"},
+ {{"des_cbc"}, {COND_NO_DES_PTR(&EVP_des_cbc)}},
+ {{"des_cfb"}, {COND_NO_DES_PTR(&EVP_des_cfb8)}},
+ {{"des_ecb"}, {COND_NO_DES_PTR(&EVP_des_ecb)}},
+ {{"des_ede3_cbc"}, {COND_NO_DES_PTR(&EVP_des_ede3_cbc)}},
+ {{"des_ede3_cbf"}, /* Misspelled, retained */
+#ifdef HAVE_DES_ede3_cfb_encrypt
+ {COND_NO_DES_PTR(&EVP_des_ede3_cfb8)}
+#else
+ {NULL}
+#endif
+ },
+ {{"des_ede3_cfb"},
#ifdef HAVE_DES_ede3_cfb_encrypt
- {&EVP_des_ede3_cfb8}
+ {COND_NO_DES_PTR(&EVP_des_ede3_cfb8)}
#else
{NULL}
#endif
@@ -479,7 +515,7 @@ static struct cipher_type_t* get_cipher_type(ERL_NIF_TERM type, size_t key_len);
#define PRINTF_ERR1(FMT,A1)
#define PRINTF_ERR2(FMT,A1,A2)
-#if OPENSSL_VERSION_NUMBER >= 0x1000000fL
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0)
/* Define resource types for OpenSSL context structures. */
static ErlNifResourceType* evp_md_ctx_rtype;
static void evp_md_ctx_dtor(ErlNifEnv* env, EVP_MD_CTX* ctx) {
@@ -578,7 +614,7 @@ static int init(ErlNifEnv* env, ERL_NIF_TERM load_info)
PRINTF_ERR0("CRYPTO: Could not open resource type 'hmac_context'");
return 0;
}
-#if OPENSSL_VERSION_NUMBER >= 0x1000000fL
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0)
evp_md_ctx_rtype = enif_open_resource_type(env, NULL, "EVP_MD_CTX",
(ErlNifResourceDtor*) evp_md_ctx_dtor,
ERL_NIF_RT_CREATE|ERL_NIF_RT_TAKEOVER,
@@ -728,7 +764,7 @@ static ERL_NIF_TERM algo_hash[8]; /* increase when extending the list */
static int algo_pubkey_cnt;
static ERL_NIF_TERM algo_pubkey[7]; /* increase when extending the list */
static int algo_cipher_cnt;
-static ERL_NIF_TERM algo_cipher[20]; /* increase when extending the list */
+static ERL_NIF_TERM algo_cipher[23]; /* increase when extending the list */
static void init_algorithms_types(ErlNifEnv* env)
{
@@ -764,10 +800,13 @@ static void init_algorithms_types(ErlNifEnv* env)
algo_pubkey[algo_pubkey_cnt++] = enif_make_atom(env, "srp");
algo_cipher_cnt = 0;
+#ifndef OPENSSL_NO_DES
algo_cipher[algo_cipher_cnt++] = enif_make_atom(env, "des3_cbc");
algo_cipher[algo_cipher_cnt++] = enif_make_atom(env, "des_ede3");
#ifdef HAVE_DES_ede3_cfb_encrypt
algo_cipher[algo_cipher_cnt++] = enif_make_atom(env, "des3_cbf");
+ algo_cipher[algo_cipher_cnt++] = enif_make_atom(env, "des3_cfb");
+#endif
#endif
algo_cipher[algo_cipher_cnt++] = enif_make_atom(env, "aes_cbc");
algo_cipher[algo_cipher_cnt++] = enif_make_atom(env, "aes_cbc128");
@@ -779,8 +818,11 @@ static void init_algorithms_types(ErlNifEnv* env)
#ifdef HAVE_AES_IGE
algo_cipher[algo_cipher_cnt++] = enif_make_atom(env,"aes_ige256");
#endif
+#ifndef OPENSSL_NO_DES
algo_cipher[algo_cipher_cnt++] = enif_make_atom(env,"des_cbc");
algo_cipher[algo_cipher_cnt++] = enif_make_atom(env,"des_cfb");
+ algo_cipher[algo_cipher_cnt++] = enif_make_atom(env,"des_ecb");
+#endif
algo_cipher[algo_cipher_cnt++] = enif_make_atom(env,"blowfish_cbc");
algo_cipher[algo_cipher_cnt++] = enif_make_atom(env,"blowfish_cfb64");
algo_cipher[algo_cipher_cnt++] = enif_make_atom(env,"blowfish_ofb64");
@@ -877,7 +919,7 @@ static ERL_NIF_TERM hash_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]
return ret;
}
-#if OPENSSL_VERSION_NUMBER >= 0x1000000fL
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0)
static ERL_NIF_TERM hash_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{/* (Type) */
@@ -1253,7 +1295,7 @@ static ERL_NIF_TERM hmac_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM a
obj = enif_alloc_resource(hmac_context_rtype, sizeof(struct hmac_context));
obj->mtx = enif_mutex_create("crypto.hmac");
obj->alive = 1;
-#if OPENSSL_VERSION_NUMBER >= 0x1000000fL
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0)
// Check the return value of HMAC_Init: it may fail in FIPS mode
// for disabled algorithms
if (!HMAC_Init(&obj->ctx, key.data, key.size, digp->md.p)) {
@@ -1710,7 +1752,9 @@ out_err:
static ERL_NIF_TERM aes_gcm_decrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{/* (Key,Iv,AAD,In,Tag) */
-#if defined(HAVE_GCM)
+#if defined(HAVE_GCM_EVP_DECRYPT_BUG)
+ return aes_gcm_decrypt_NO_EVP(env, argc, argv);
+#elif defined(HAVE_GCM)
EVP_CIPHER_CTX ctx;
const EVP_CIPHER *cipher = NULL;
ErlNifBinary key, iv, aad, in, tag;
@@ -1763,12 +1807,58 @@ static ERL_NIF_TERM aes_gcm_decrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM
out_err:
EVP_CIPHER_CTX_cleanup(&ctx);
return atom_error;
-
#else
return enif_raise_exception(env, atom_notsup);
#endif
}
+#ifdef HAVE_GCM_EVP_DECRYPT_BUG
+static ERL_NIF_TERM aes_gcm_decrypt_NO_EVP(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ GCM128_CONTEXT *ctx;
+ ErlNifBinary key, iv, aad, in, tag;
+ AES_KEY aes_key;
+ unsigned char *outp;
+ ERL_NIF_TERM out;
+
+ if (!enif_inspect_iolist_as_binary(env, argv[0], &key)
+ || AES_set_encrypt_key(key.data, key.size*8, &aes_key) != 0
+ || !enif_inspect_binary(env, argv[1], &iv) || iv.size == 0
+ || !enif_inspect_iolist_as_binary(env, argv[2], &aad)
+ || !enif_inspect_iolist_as_binary(env, argv[3], &in)
+ || !enif_inspect_iolist_as_binary(env, argv[4], &tag)) {
+ return enif_make_badarg(env);
+ }
+
+ if (!(ctx = CRYPTO_gcm128_new(&aes_key, (block128_f)AES_encrypt)))
+ return atom_error;
+
+ CRYPTO_gcm128_setiv(ctx, iv.data, iv.size);
+
+ if (CRYPTO_gcm128_aad(ctx, aad.data, aad.size))
+ goto out_err;
+
+ outp = enif_make_new_binary(env, in.size, &out);
+
+ /* decrypt */
+ if (CRYPTO_gcm128_decrypt(ctx, in.data, outp, in.size))
+ goto out_err;
+
+ /* calculate and check the tag */
+ if (CRYPTO_gcm128_finish(ctx, tag.data, tag.size))
+ goto out_err;
+
+ CRYPTO_gcm128_release(ctx);
+ CONSUME_REDS(env, in);
+
+ return out;
+
+out_err:
+ CRYPTO_gcm128_release(ctx);
+ return atom_error;
+}
+#endif /* HAVE_GCM_EVP_DECRYPT_BUG */
+
#if defined(HAVE_CHACHA20_POLY1305)
static void
poly1305_update_with_length(poly1305_state *poly1305,
@@ -2157,7 +2247,7 @@ static ERL_NIF_TERM rsa_verify_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM
ERL_NIF_TERM head, tail, ret;
int i;
RSA *rsa;
-#if OPENSSL_VERSION_NUMBER >= 0x1000000fL
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0)
EVP_PKEY *pkey;
EVP_PKEY_CTX *ctx;
#endif
@@ -2189,7 +2279,7 @@ static ERL_NIF_TERM rsa_verify_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM
goto done;
}
-#if OPENSSL_VERSION_NUMBER >= 0x1000000fL
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0)
pkey = EVP_PKEY_new();
EVP_PKEY_set1_RSA(pkey, rsa);
@@ -2316,7 +2406,7 @@ static int get_rsa_private_key(ErlNifEnv* env, ERL_NIF_TERM key, RSA *rsa)
static ERL_NIF_TERM rsa_sign_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{/* (Type, Digest, Key=[E,N,D]|[E,N,D,P1,P2,E1,E2,C]) */
ErlNifBinary digest_bin, ret_bin;
-#if OPENSSL_VERSION_NUMBER >= 0x1000000fL
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0)
EVP_PKEY *pkey;
EVP_PKEY_CTX *ctx;
size_t rsa_s_len;
@@ -2349,7 +2439,7 @@ static ERL_NIF_TERM rsa_sign_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM ar
}
-#if OPENSSL_VERSION_NUMBER >= 0x1000000fL
+#if OPENSSL_VERSION_NUMBER >= OpenSSL_version_plain(1,0,0)
pkey = EVP_PKEY_new();
EVP_PKEY_set1_RSA(pkey, rsa);
rsa_s_len=(size_t)EVP_PKEY_size(pkey);
diff --git a/lib/crypto/doc/src/crypto.xml b/lib/crypto/doc/src/crypto.xml
index 5a5627747c..eda0f7af51 100644
--- a/lib/crypto/doc/src/crypto.xml
+++ b/lib/crypto/doc/src/crypto.xml
@@ -136,7 +136,7 @@
<code>stream_cipher() = rc4 | aes_ctr </code>
<code>block_cipher() = aes_cbc | aes_cfb8 | aes_cfb128 | aes_ige256 | blowfish_cbc |
- blowfish_cfb64 | des_cbc | des_cfb | des3_cbc | des3_cbf | des_ede3 | rc2_cbc </code>
+ blowfish_cfb64 | des_cbc | des_cfb | des3_cbc | des3_cfb | des_ede3 | rc2_cbc </code>
<code>aead_cipher() = aes_gcm | chacha20_poly1305 </code>
@@ -161,7 +161,7 @@
</p>
<code> cipher_algorithms() = aes_cbc | aes_cfb8 | aes_cfb128 | aes_ctr | aes_gcm |
aes_ige256 | blowfish_cbc | blowfish_cfb64 | chacha20_poly1305 | des_cbc | des_cfb |
- des3_cbc | des3_cbf | des_ede3 | rc2_cbc | rc4 </code>
+ des3_cbc | des3_cfb | des_ede3 | rc2_cbc | rc4 </code>
<code> public_key_algorithms() = rsa |dss | ecdsa | dh | ecdh | ec_gf2m</code>
<p>Note that ec_gf2m is not strictly a public key algorithm, but a restriction on what curves are supported
with ecdsa and ecdh.
diff --git a/lib/crypto/doc/src/notes.xml b/lib/crypto/doc/src/notes.xml
index cbca2a8030..56e165a1d1 100644
--- a/lib/crypto/doc/src/notes.xml
+++ b/lib/crypto/doc/src/notes.xml
@@ -59,9 +59,9 @@
</item>
<item>
<p>
- Deprecate the function crypto:rand_bytes and make sure
- that crypto:strong_rand_bytes is used in all places that
- are cryptographically significant.</p>
+ Deprecate the function <c>crypto:rand_bytes</c> and make
+ sure that <c>crypto:strong_rand_bytes</c> is used in all
+ places that are cryptographically significant.</p>
<p>
Own Id: OTP-13214</p>
</item>
@@ -815,7 +815,7 @@
also been extended. </item><item> The <c>configure</c>
scripts of <c>erl_interface</c> and <c>odbc</c> now
search for thread libraries and thread library quirks the
- same way as <c>erts</c> do. </item><item> The
+ same way as ERTS do. </item><item> The
<c>configure</c> script of the <c>odbc</c> application
now also looks for odbc libraries in <c>lib64</c> and
<c>lib/64</c> directories when building on a 64-bit
diff --git a/lib/crypto/src/crypto.erl b/lib/crypto/src/crypto.erl
index 025d57e9c5..da8626e38a 100644
--- a/lib/crypto/src/crypto.erl
+++ b/lib/crypto/src/crypto.erl
@@ -274,7 +274,7 @@ hmac_final_n(Context, HashLen) ->
%% Ecrypt/decrypt %%%
-spec block_encrypt(des_cbc | des_cfb |
- des3_cbc | des3_cbf | des_ede3 |
+ des3_cbc | des3_cbf | des3_cfb | des_ede3 |
blowfish_cbc | blowfish_cfb64 | blowfish_ofb64 |
aes_cbc128 | aes_cfb8 | aes_cfb128 | aes_cbc256 | aes_ige256 |
aes_cbc |
@@ -301,6 +301,9 @@ block_encrypt(Type, Key0, Ivec, Data) when Type =:= des3_cbc;
block_encrypt(des3_cbf, Key0, Ivec, Data) ->
Key = check_des3_key(Key0),
block_crypt_nif(des_ede3_cbf, Key, Ivec, Data, true);
+block_encrypt(des3_cfb, Key0, Ivec, Data) ->
+ Key = check_des3_key(Key0),
+ block_crypt_nif(des_ede3_cfb, Key, Ivec, Data, true);
block_encrypt(aes_ige256, Key, Ivec, Data) ->
aes_ige_crypt_nif(Key, Ivec, Data, true);
block_encrypt(aes_gcm, Key, Ivec, {AAD, Data}) ->
@@ -311,7 +314,7 @@ block_encrypt(chacha20_poly1305, Key, Ivec, {AAD, Data}) ->
chacha20_poly1305_encrypt(Key, Ivec, AAD, Data).
-spec block_decrypt(des_cbc | des_cfb |
- des3_cbc | des3_cbf | des_ede3 |
+ des3_cbc | des3_cbf | des3_cfb | des_ede3 |
blowfish_cbc | blowfish_cfb64 | blowfish_ofb64 |
aes_cbc128 | aes_cfb8 | aes_cfb128 | aes_cbc256 | aes_ige256 |
aes_cbc |
@@ -338,6 +341,9 @@ block_decrypt(Type, Key0, Ivec, Data) when Type =:= des3_cbc;
block_decrypt(des3_cbf, Key0, Ivec, Data) ->
Key = check_des3_key(Key0),
block_crypt_nif(des_ede3_cbf, Key, Ivec, Data, false);
+block_decrypt(des3_cfb, Key0, Ivec, Data) ->
+ Key = check_des3_key(Key0),
+ block_crypt_nif(des_ede3_cfb, Key, Ivec, Data, false);
block_decrypt(aes_ige256, Key, Ivec, Data) ->
notsup_to_error(aes_ige_crypt_nif(Key, Ivec, Data, false));
block_decrypt(aes_gcm, Key, Ivec, {AAD, Data, Tag}) ->
@@ -857,10 +863,10 @@ des_ede3_cbc_decrypt(Key1, Key2, Key3, IVec, Data) ->
binary().
des3_cfb_encrypt(Key1, Key2, Key3, IVec, Data) ->
- block_encrypt(des3_cbf, [Key1, Key2, Key3], IVec, Data).
+ block_encrypt(des3_cfb, [Key1, Key2, Key3], IVec, Data).
des3_cfb_decrypt(Key1, Key2, Key3, IVec, Data) ->
- block_decrypt(des3_cbf, [Key1, Key2, Key3], IVec, Data).
+ block_decrypt(des3_cfb, [Key1, Key2, Key3], IVec, Data).
%%
%% Blowfish
diff --git a/lib/crypto/test/crypto_SUITE.erl b/lib/crypto/test/crypto_SUITE.erl
index 6732f27824..7b07cef33f 100644
--- a/lib/crypto/test/crypto_SUITE.erl
+++ b/lib/crypto/test/crypto_SUITE.erl
@@ -50,6 +50,7 @@ all() ->
{group, des_cfb},
{group, des3_cbc},
{group, des3_cbf},
+ {group, des3_cfb},
{group, des_ede3},
{group, blowfish_cbc},
{group, blowfish_ecb},
@@ -94,6 +95,7 @@ groups() ->
{des3_cbc,[], [block]},
{des_ede3,[], [block]},
{des3_cbf,[], [block]},
+ {des3_cfb,[], [block]},
{rc2_cbc,[], [block]},
{aes_cbc128,[], [block]},
{aes_cfb8,[], [block]},
@@ -381,11 +383,8 @@ block_cipher({Type, Key, IV, PlainText, CipherText}) ->
ct:fail({{crypto, block_decrypt, [Type, Key, IV, CipherText]}, {expected, Plain}, {got, Other1}})
end.
-block_cipher_increment({Type, Key, IV, PlainTexts}) when Type == des_cbc;
- Type == des3_cbc;
- Type == aes_cbc;
- Type == des_cbf
- ->
+block_cipher_increment({Type, Key, IV, PlainTexts})
+ when Type == des_cbc; Type == aes_cbc; Type == des3_cbc ->
block_cipher_increment(Type, Key, IV, IV, PlainTexts, iolist_to_binary(PlainTexts), []);
block_cipher_increment({Type, Key, IV, PlainTexts, _CipherText}) when Type == aes_cbc ->
Plain = iolist_to_binary(PlainTexts),
@@ -582,6 +581,8 @@ do_block_iolistify({des3_cbc = Type, Key, IV, PlainText}) ->
{Type, Key, IV, des_iolistify(PlainText)};
do_block_iolistify({des3_cbf = Type, Key, IV, PlainText}) ->
{Type, Key, IV, des_iolistify(PlainText)};
+do_block_iolistify({des3_cfb = Type, Key, IV, PlainText}) ->
+ {Type, Key, IV, des_iolistify(PlainText)};
do_block_iolistify({des_ede3 = Type, Key, IV, PlainText}) ->
{Type, Key, IV, des_iolistify(PlainText)};
do_block_iolistify({Type, Key, PlainText}) ->
@@ -792,6 +793,9 @@ group_config(des3_cbc, Config) ->
group_config(des3_cbf, Config) ->
Block = des3_cbf(),
[{block, Block} | Config];
+group_config(des3_cfb, Config) ->
+ Block = des3_cfb(),
+ [{block, Block} | Config];
group_config(des_ede3, Config) ->
Block = des_ede3(),
[{block, Block} | Config];
@@ -1193,7 +1197,16 @@ des_ede3() ->
des3_cbf() ->
[{des3_cbf,
- [hexstr2bin("0123456789abcdef"),
+ [hexstr2bin("0123456789abcdef"),
+ hexstr2bin("fedcba9876543210"),
+ hexstr2bin("0f2d4b6987a5c3e1")],
+ hexstr2bin("1234567890abcdef"),
+ <<"Now is the time for all ">>
+ }].
+
+des3_cfb() ->
+ [{des3_cfb,
+ [hexstr2bin("0123456789abcdef"),
hexstr2bin("fedcba9876543210"),
hexstr2bin("0f2d4b6987a5c3e1")],
hexstr2bin("1234567890abcdef"),
diff --git a/lib/crypto/test/old_crypto_SUITE.erl b/lib/crypto/test/old_crypto_SUITE.erl
index 0d97290d10..4a6753b2ed 100644
--- a/lib/crypto/test/old_crypto_SUITE.erl
+++ b/lib/crypto/test/old_crypto_SUITE.erl
@@ -58,6 +58,7 @@
des_cfb_iter/1,
des_ecb/1,
des3_cbc/1,
+ des3_cbf/1,
des3_cfb/1,
rc2_cbc/1,
aes_cfb/1,
@@ -102,7 +103,7 @@ groups() ->
hmac_rfc2202, hmac_rfc4231_sha224, hmac_rfc4231_sha256,
hmac_rfc4231_sha384, hmac_rfc4231_sha512,
des_cbc, aes_cfb, aes_cbc,
- des_cfb, des_cfb_iter, des3_cbc, des3_cfb, rc2_cbc,
+ des_cfb, des_cfb_iter, des3_cbc, des3_cbf, des3_cfb, rc2_cbc,
aes_cbc_iter, aes_ctr, aes_ctr_stream, des_cbc_iter, des_ecb,
rand_uniform_test, strong_rand_test,
rsa_verify_test, dsa_verify_test, rsa_sign_test,
@@ -969,6 +970,9 @@ des_cbc(doc) ->
des_cbc(suite) ->
[];
des_cbc(Config) when is_list(Config) ->
+ if_supported(des_cbc, fun des_cbc_do/0).
+
+des_cbc_do() ->
?line Key = hexstr2bin("0123456789abcdef"),
?line IVec = hexstr2bin("1234567890abcdef"),
?line Plain = "Now is the time for all ",
@@ -992,6 +996,9 @@ des_cbc_iter(doc) ->
des_cbc_iter(suite) ->
[];
des_cbc_iter(Config) when is_list(Config) ->
+ if_supported(des_cbc, fun des_cbc_iter_do/0).
+
+des_cbc_iter_do() ->
?line Key = hexstr2bin("0123456789abcdef"),
?line IVec = hexstr2bin("1234567890abcdef"),
?line Plain1 = "Now is the time ",
@@ -1011,6 +1018,9 @@ des_cfb(doc) ->
des_cfb(suite) ->
[];
des_cfb(Config) when is_list(Config) ->
+ if_supported(des_cfb, fun des_cfb_do/0).
+
+des_cfb_do() ->
?line Key = hexstr2bin("0123456789abcdef"),
?line IVec = hexstr2bin("1234567890abcdef"),
?line Plain = "Now is the",
@@ -1027,6 +1037,9 @@ des_cfb_iter(doc) ->
des_cfb_iter(suite) ->
[];
des_cfb_iter(Config) when is_list(Config) ->
+ if_supported(des_cfb, fun des_cfb_iter_do/0).
+
+des_cfb_iter_do() ->
?line Key = hexstr2bin("0123456789abcdef"),
?line IVec = hexstr2bin("1234567890abcdef"),
?line Plain1 = "Now i",
@@ -1045,6 +1058,9 @@ des_ecb(doc) ->
des_ecb(suite) ->
[];
des_ecb(Config) when is_list(Config) ->
+ if_supported(des_ecb, fun des_ecb_do/0).
+
+des_ecb_do() ->
?line Key = hexstr2bin("0123456789abcdef"),
?line Cipher1 = crypto:des_ecb_encrypt(Key, "Now is t"),
?line m(Cipher1, hexstr2bin("3fa40e8a984d4815")),
@@ -1081,6 +1097,9 @@ des3_cbc(doc) ->
des3_cbc(suite) ->
[];
des3_cbc(Config) when is_list(Config) ->
+ if_supported(des3_cbc, fun des3_cbc_do/0).
+
+des3_cbc_do() ->
?line Key1 = hexstr2bin("0123456789abcdef"),
?line Key2 = hexstr2bin("fedcba9876543210"),
?line Key3 = hexstr2bin("0f2d4b6987a5c3e1"),
@@ -1112,6 +1131,19 @@ des3_cbc(Config) when is_list(Config) ->
%%
%%
+des3_cbf(doc) ->
+ "Encrypt and decrypt according to CFB 3DES, and check the result.";
+des3_cbf(suite) ->
+ [];
+des3_cbf(Config) when is_list(Config) ->
+ case openssl_version() of
+ V when V < 16#90705F -> {skipped,"OpenSSL version too old"};
+ _ ->
+ if_supported(des3_cbf, fun des3_cfb_do/0)
+ end.
+
+%%
+%%
des3_cfb(doc) ->
"Encrypt and decrypt according to CFB 3DES, and check the result.";
des3_cfb(suite) ->
@@ -1119,7 +1151,8 @@ des3_cfb(suite) ->
des3_cfb(Config) when is_list(Config) ->
case openssl_version() of
V when V < 16#90705F -> {skipped,"OpenSSL version too old"};
- _ -> des3_cfb_do()
+ _ ->
+ if_supported(des3_cfb, fun des3_cfb_do/0)
end.
des3_cfb_do() ->
diff --git a/lib/debugger/doc/src/Makefile b/lib/debugger/doc/src/Makefile
index 6c9617ca69..0f724b6f17 100644
--- a/lib/debugger/doc/src/Makefile
+++ b/lib/debugger/doc/src/Makefile
@@ -114,7 +114,7 @@ release_docs_spec: docs
$(INSTALL_DIR) "$(RELSYSDIR)/doc/pdf"
$(INSTALL_DATA) $(TOP_PDF_FILE) "$(RELSYSDIR)/doc/pdf"
$(INSTALL_DIR) "$(RELSYSDIR)/doc/html"
- (/bin/cp -rf $(HTMLDIR) "$(RELSYSDIR)/doc")
+ ($(CP) -rf $(HTMLDIR) "$(RELSYSDIR)/doc")
$(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)"
$(INSTALL_DIR) "$(RELEASE_PATH)/man/man3"
$(INSTALL_DATA) $(MAN3DIR)/* "$(RELEASE_PATH)/man/man3"
diff --git a/lib/debugger/doc/src/i.xml b/lib/debugger/doc/src/i.xml
index db89f23494..628b91e9e4 100644
--- a/lib/debugger/doc/src/i.xml
+++ b/lib/debugger/doc/src/i.xml
@@ -45,7 +45,7 @@
attached manually or automatically.</p>
<p>By preference, these functions can be included in module
- <seealso marker="stdlib:shell_default"><c>stdlib:shell_default</c></seealso>.
+ <seealso marker="stdlib:shell_default"><c>shell_default</c></seealso>.
By default, they are included in that module.</p>
</description>
@@ -372,7 +372,7 @@
</fsummary>
<desc>
<p>Returns the current version number of the interpreter.
- Same as the version number of the <c>Debugger</c> application.</p>
+ Same as the version number of the Debugger application.</p>
</desc>
</func>
diff --git a/lib/debugger/src/dbg_debugged.erl b/lib/debugger/src/dbg_debugged.erl
index 5b1469a10e..e142af4ae0 100644
--- a/lib/debugger/src/dbg_debugged.erl
+++ b/lib/debugger/src/dbg_debugged.erl
@@ -70,7 +70,10 @@ msg_loop(Meta, Mref, SaveStacktrace) ->
%% Meta is evaluating a receive, must be done within context
%% of real (=this) process
{sys, Meta, {'receive',Msg}} ->
- receive Msg -> Meta ! {self(), rec_acked} end,
+ receive Msg ->
+ Meta ! {self(), rec_acked},
+ ok
+ end,
msg_loop(Meta, Mref, SaveStacktrace);
%% Meta needs something evaluated within context of real process
diff --git a/lib/debugger/src/dbg_icmd.erl b/lib/debugger/src/dbg_icmd.erl
index 1b274e20ae..57a3719a50 100644
--- a/lib/debugger/src/dbg_icmd.erl
+++ b/lib/debugger/src/dbg_icmd.erl
@@ -171,10 +171,10 @@ handle_cmd(Bs, Status, Ieval) ->
%% User control of process execution and settings
%%====================================================================
-step(Meta) -> Meta ! {user, {cmd, step}}.
-next(Meta) -> Meta ! {user, {cmd, next}}.
-continue(Meta) -> Meta ! {user, {cmd, continue}}.
-finish(Meta) -> Meta ! {user, {cmd, finish}}.
+step(Meta) -> Meta ! {user, {cmd, step}}, ok.
+next(Meta) -> Meta ! {user, {cmd, next}}, ok.
+continue(Meta) -> Meta ! {user, {cmd, continue}}, ok.
+finish(Meta) -> Meta ! {user, {cmd, finish}}, ok.
skip(Meta) -> Meta ! {user, {cmd, skip}}.
timeout(Meta) -> Meta ! {user, timeout}.
diff --git a/lib/debugger/src/dbg_iserver.erl b/lib/debugger/src/dbg_iserver.erl
index 0ad303d8d9..3e959e8e30 100644
--- a/lib/debugger/src/dbg_iserver.erl
+++ b/lib/debugger/src/dbg_iserver.erl
@@ -72,17 +72,17 @@ cast(Int, Request) ->
gen_server:cast(Int, Request).
safe_call(Request) ->
- ensure_started(),
+ {ok, _} = ensure_started(),
call(Request).
safe_cast(Request) ->
- ensure_started(),
+ {ok, _} = ensure_started(),
cast(Request).
ensure_started() ->
case whereis(?MODULE) of
undefined -> start();
- _Pid -> ignore
+ Pid -> {ok, Pid}
end.
%%--Module database---------------------------------------------------
@@ -214,7 +214,6 @@ handle_call({new_process, Pid, Meta, Function}, _From, State) ->
%% Code loading
handle_call({load, Mod, Src, Bin}, _From, State) ->
-
%% Create an ETS table for storing information about the module
Db = State#state.db,
ModDb = ets:new(Mod, [ordered_set, public]),
@@ -285,23 +284,28 @@ handle_call({contents, Mod, Pid}, _From, State) ->
{reply, {ok, Bin}, State};
handle_call({raw_contents, Mod, Pid}, _From, State) ->
Db = State#state.db,
- [{{Mod, refs}, ModDbs}] = ets:lookup(Db, {Mod, refs}),
- ModDb = if
- Pid =:= any -> hd(ModDbs);
- true ->
- lists:foldl(fun(T, not_found) ->
- [{T, Pids}] = ets:lookup(Db, T),
- case lists:member(Pid, Pids) of
- true -> T;
- false -> not_found
- end;
- (_T, T) -> T
- end,
- not_found,
- ModDbs)
- end,
- [{mod_raw, Bin}] = ets:lookup(ModDb, mod_raw),
- {reply, {ok, Bin}, State};
+ case ets:lookup(Db, {Mod, refs}) of
+ [{{Mod, refs}, ModDbs}] ->
+ ModDb =
+ if
+ Pid =:= any -> hd(ModDbs);
+ true ->
+ lists:foldl(fun(T, not_found) ->
+ [{T, Pids}] = ets:lookup(Db, T),
+ case lists:member(Pid, Pids) of
+ true -> T;
+ false -> not_found
+ end;
+ (_T, T) -> T
+ end,
+ not_found,
+ ModDbs)
+ end,
+ [{mod_raw, Bin}] = ets:lookup(ModDb, mod_raw),
+ {reply, {ok, Bin}, State};
+ [] -> % code not interpreted
+ {reply, not_found, State}
+ end;
handle_call({is_interpreted, Mod, Name, Arity}, _From, State) ->
Db = State#state.db,
Reply = case ets:lookup(Db, {Mod, refs}) of
@@ -402,8 +406,10 @@ handle_cast({set_status, Meta, Status, Info}, State) ->
send_all(subscriber, {new_status, Proc#proc.pid, Status, Info}, State),
if
Status =:= break ->
- auto_attach(break, State#state.auto, Proc);
- true -> ignore
+ _ = auto_attach(break, State#state.auto, Proc),
+ ok;
+ true ->
+ ok
end,
Proc2 = Proc#proc{status=Status, info=Info},
{noreply, State#state{procs=lists:keyreplace(Meta, #proc.meta,
@@ -470,7 +476,7 @@ handle_info({'EXIT',Who,Why}, State) ->
[self(),AttPid,Pid,Why,ExitInfo]);
undefined ->
%% Otherwise, auto attach if necessary
- auto_attach(exit, State#state.auto, Pid),
+ _ = auto_attach(exit, State#state.auto, Pid),
Who
end,
send_all(subscriber, {new_status,Pid,exit,Why}, State),
@@ -583,7 +589,8 @@ send_all(Pids, Msg) ->
lists:foreach(fun(Pid) -> send(Pid, Msg) end, Pids).
send(Pid, Msg) ->
- Pid ! {int, Msg}.
+ Pid ! {int, Msg},
+ ok.
get_proc({Type, Pid}, Procs) ->
Index = case Type of
diff --git a/lib/debugger/src/dbg_wx_break_win.erl b/lib/debugger/src/dbg_wx_break_win.erl
index cd1e81456f..770681510d 100644
--- a/lib/debugger/src/dbg_wx_break_win.erl
+++ b/lib/debugger/src/dbg_wx_break_win.erl
@@ -65,18 +65,18 @@ create_win(Parent, Pos, function, Mod, _Line) ->
{choices, IntStrs}]),
Expand = [{border, 5}, {flag,?wxLEFT bor ?wxRIGHT bor ?wxEXPAND}],
- wxSizer:add(MainS, Label, [{border,5},
+ _ = wxSizer:add(MainS, Label, [{border,5},
{flag,?wxTOP bor ?wxLEFT bor ?wxRIGHT}]),
- wxSizer:add(MainS, Text, Expand),
+ _ = wxSizer:add(MainS, Text, Expand),
FunLabel = wxStaticText:new(Win, ?wxID_ANY, "Function:"),
LB = wxListBox:new(Win, ?wxID_ANY, [{size,{-1, 100}},{style,?wxLB_MULTIPLE}]),
- wxSizer:add(MainS, FunLabel, Expand),
- wxSizer:add(MainS, LB, [{proportion,1}|Expand]),
+ _ = wxSizer:add(MainS, FunLabel, Expand),
+ _ = wxSizer:add(MainS, LB, [{proportion,1}|Expand]),
wxSizer:setMinSize(MainS, 300, 400),
OK = wxDialog:createStdDialogButtonSizer(Win, ?wxOK bor ?wxCANCEL),
- wxSizer:add(MainS, OK, [{border,5},{flag,?wxALL}]),
+ _ = wxSizer:add(MainS, OK, [{border,5},{flag,?wxALL}]),
wxDialog:setSizer(Win,MainS),
- wxSizer:fit(MainS, Win),
+ _ = wxSizer:fit(MainS, Win),
wxSizer:setSizeHints(MainS,Win),
wxComboBox:setFocus(Text),
wxDialog:connect(Win, command_button_clicked),
@@ -110,11 +110,11 @@ create_win(Parent, Pos, Type, Mod, Line) ->
IntStrs = [atom_to_list(M) || M <- Int],
ModT = wxComboBox:new(Win, ?wxID_ANY, [{choices,IntStrs}]),
ModSz = create_label_of_control(Win, "Module:", ModT, Mod),
- wxSizer:add(MainS,ModSz,[{flag, ?wxEXPAND}]),
+ _ = wxSizer:add(MainS,ModSz,[{flag, ?wxEXPAND}]),
%% Create rest of text input fields
Add = fun({IType, Label, Def}) ->
{Sz, Text} = create_sizer_with_text(Win, Label, Def),
- wxSizer:add(MainS, Sz, [{flag, ?wxEXPAND}]),
+ _ = wxSizer:add(MainS, Sz, [{flag, ?wxEXPAND}]),
{Text, IType}
end,
Inputs = case Type of
@@ -129,15 +129,15 @@ create_win(Parent, Pos, Type, Mod, Line) ->
Entries = wx:map(Add, Inputs),
%% Create and add radio box
{TriggerBox,Trigger} = create_trigger_box(Win),
- wxSizer:add(MainS, TriggerBox, [{border,5},{flag,?wxALL bor ?wxEXPAND}]),
+ _ = wxSizer:add(MainS, TriggerBox, [{border,5},{flag,?wxALL bor ?wxEXPAND}]),
- wxSizer:addStretchSpacer(MainS),
+ _ = wxSizer:addStretchSpacer(MainS),
%% Put it together
OK = wxDialog:createStdDialogButtonSizer(Win, ?wxOK bor ?wxCANCEL),
- wxSizer:add(MainS, OK, [{border,5},{flag,?wxALL}]),
+ _ = wxSizer:add(MainS, OK, [{border,5},{flag,?wxALL}]),
wxSizer:setMinSize(MainS, 300, -1),
wxDialog:setSizer(Win,MainS),
- wxSizer:fit(MainS, Win),
+ _ = wxSizer:fit(MainS, Win),
wxSizer:setSizeHints(MainS,Win),
wxComboBox:setFocus(ModT),
wxDialog:connect(Win, command_button_clicked),
@@ -243,8 +243,8 @@ create_label_of_control(Parent, Label, Control, Def) ->
Text = wxStaticText:new(Parent, ?wxID_ANY, Label),
Border = {border, 5},
Flag = ?wxRIGHT bor ?wxLEFT bor ?wxALIGN_CENTRE_VERTICAL,
- wxSizer:add(Sizer, Text, [{proportion,1}, {flag,Flag}, Border]),
- wxSizer:add(Sizer, Control, [{proportion,3}, {flag,Flag bor ?wxEXPAND}, Border]),
+ _ = wxSizer:add(Sizer, Text, [{proportion,1}, {flag,Flag}, Border]),
+ _ = wxSizer:add(Sizer, Control, [{proportion,3}, {flag,Flag bor ?wxEXPAND}, Border]),
wxControl:setLabel(Control, dbg_wx_win:to_string(Def)),
Sizer.
@@ -252,11 +252,11 @@ create_trigger_box(Win) ->
SBox = wxStaticBox:new(Win, ?wxID_ANY, "Trigger Action:"),
SBS = wxStaticBoxSizer:new(SBox, ?wxVERTICAL),
Ebtn = wxRadioButton:new(Win, ?wxID_ANY, "Enable"),
- wxSizer:add(SBS,Ebtn),
+ _ = wxSizer:add(SBS,Ebtn),
Dibtn = wxRadioButton:new(Win, ?wxID_ANY, "Disable"),
- wxSizer:add(SBS,Dibtn),
+ _ = wxSizer:add(SBS,Dibtn),
Debtn = wxRadioButton:new(Win, ?wxID_ANY, "Delete"),
- wxSizer:add(SBS,Debtn),
+ _ = wxSizer:add(SBS,Debtn),
wxRadioButton:setValue(Ebtn, true),
{SBS, [{Ebtn,enable},{Dibtn,disable},{Debtn,delete}]}.
diff --git a/lib/debugger/src/dbg_wx_code.erl b/lib/debugger/src/dbg_wx_code.erl
index f8fc331a81..473963500a 100644
--- a/lib/debugger/src/dbg_wx_code.erl
+++ b/lib/debugger/src/dbg_wx_code.erl
@@ -127,20 +127,22 @@ load_code(Ed, Code) ->
%%io:format("~p ~p ~p~n", [Lines, Sz, LW]),
?stc:setMarginWidth(Ed, 0, LW+5),
?stc:setReadOnly(Ed, true),
- Ed.
+ ok.
unload_code(Ed) ->
?stc:setReadOnly(Ed, false),
?stc:setTextRaw(Ed, <<0:8>>),
?stc:setReadOnly(Ed, true),
- Ed.
+ ok.
add_break_to_code(Ed, Line, active) ->
?stc:markerDelete(Ed, Line-1, 1),
- ?stc:markerAdd(Ed, Line-1, 0);
+ ?stc:markerAdd(Ed, Line-1, 0),
+ ok;
add_break_to_code(Ed, Line, inactive) ->
?stc:markerDelete(Ed, Line-1, 0),
- ?stc:markerAdd(Ed, Line-1, 1).
+ ?stc:markerAdd(Ed, Line-1, 1),
+ ok.
del_break_from_code(Ed,Line) ->
?stc:markerDelete(Ed, Line-1, 0),
diff --git a/lib/debugger/src/dbg_wx_filedialog_win.erl b/lib/debugger/src/dbg_wx_filedialog_win.erl
index 2103536a04..f7b031dc28 100644
--- a/lib/debugger/src/dbg_wx_filedialog_win.erl
+++ b/lib/debugger/src/dbg_wx_filedialog_win.erl
@@ -118,9 +118,9 @@ init([Parent, Id, Options0]) ->
wxTextCtrl:connect(Dir, char, [{callback, IsTab}]),
Top = wxBoxSizer:new(?wxHORIZONTAL),
- wxSizer:add(Top, Back, [{border, 2},{flag,?wxALL bor ?wxEXPAND}]),
- wxSizer:add(Top, Forw, [{border, 2},{flag,?wxALL bor ?wxEXPAND}]),
- wxSizer:add(Top, Up, [{border, 2},{flag,?wxALL bor ?wxEXPAND}]),
+ _ = wxSizer:add(Top, Back, [{border, 2},{flag,?wxALL bor ?wxEXPAND}]),
+ _ = wxSizer:add(Top, Forw, [{border, 2},{flag,?wxALL bor ?wxEXPAND}]),
+ _ = wxSizer:add(Top, Up, [{border, 2},{flag,?wxALL bor ?wxEXPAND}]),
%% List Ctrl
{Art, IconMap} = create_icons(ExtraIcons),
@@ -154,13 +154,13 @@ init([Parent, Id, Options0]) ->
%% OK done
Box = wxBoxSizer:new(?wxVERTICAL),
- wxSizer:add(Box, Top, [{border, 2}, {flag,?wxALL bor ?wxEXPAND}]),
- wxSizer:add(Box, Dir, [{border, 2}, {flag,?wxALL bor ?wxEXPAND}]),
- wxSizer:add(Box, LC, [{border, 2}, {flag,?wxALL bor ?wxEXPAND}, {proportion, 1}]),
- wxSizer:add(Box, Bott, [{border, 2}, {flag,?wxALL bor ?wxEXPAND}]),
+ _ = wxSizer:add(Box, Top, [{border, 2}, {flag,?wxALL bor ?wxEXPAND}]),
+ _ = wxSizer:add(Box, Dir, [{border, 2}, {flag,?wxALL bor ?wxEXPAND}]),
+ _ = wxSizer:add(Box, LC, [{border, 2}, {flag,?wxALL bor ?wxEXPAND}, {proportion, 1}]),
+ _ = wxSizer:add(Box, Bott, [{border, 2}, {flag,?wxALL bor ?wxEXPAND}]),
wxWindow:setSizer(Dlg, Box),
- wxSizer:fit(Box, Dlg),
+ _ = wxSizer:fit(Box, Dlg),
wxSizer:setSizeHints(Box,Dlg),
State = #state{win=Dlg,
back=Back, forward=Forw, up=Up,
diff --git a/lib/debugger/src/dbg_wx_mon.erl b/lib/debugger/src/dbg_wx_mon.erl
index 345367a911..a32a6894b8 100644
--- a/lib/debugger/src/dbg_wx_mon.erl
+++ b/lib/debugger/src/dbg_wx_mon.erl
@@ -135,7 +135,7 @@ init2(CallingPid, Mode, SFile, GS) ->
%% Start other necessary stuff
dbg_wx_win:init(),
- dbg_wx_winman:start(), % Debugger window manager
+ _ = dbg_wx_winman:start(), % Debugger window manager
%% Create monitor window
Title = "Monitor",
@@ -339,7 +339,7 @@ gui_cmd('Delete All Modules', State) ->
lists:foreach(fun(Mod) -> int:nn(Mod) end, int:interpreted()),
State;
gui_cmd({module, Mod, What}, State) ->
- case What of
+ _ = case What of
delete -> int:nn(Mod);
view ->
Window = dbg_wx_mon_win:get_window(State#state.win),
diff --git a/lib/debugger/src/dbg_wx_mon_win.erl b/lib/debugger/src/dbg_wx_mon_win.erl
index 2e48210f55..9737c9e67f 100644
--- a/lib/debugger/src/dbg_wx_mon_win.erl
+++ b/lib/debugger/src/dbg_wx_mon_win.erl
@@ -107,31 +107,31 @@ create_win_batch(Title, Menus) ->
Hlb = 200,
Listbox = wxListBox:new(Panel, ?wxID_ANY, [{size,{?Wf,Hlb}},
{style,?wxLB_SINGLE}]),
- wxSizer:add(LeftSz,Listbox,[{proportion,1},{border,3},{flag,?wxEXPAND}]),
+ _ = wxSizer:add(LeftSz,Listbox,[{proportion,1},{border,3},{flag,?wxEXPAND}]),
wxListBox:connect(Listbox, command_listbox_doubleclicked),
wxListBox:connect(Listbox, right_down),
SBox = wxStaticBox:new(Panel, ?wxID_ANY, "Auto Attach:"),
SBS = wxStaticBoxSizer:new(SBox, ?wxVERTICAL),
Fbtn = wxCheckBox:new(Panel, ?autoId, "First Call"),
- wxSizer:add(SBS,Fbtn),
+ _ = wxSizer:add(SBS,Fbtn),
Bbtn = wxCheckBox:new(Panel, ?autoId, "On Break"),
- wxSizer:add(SBS,Bbtn),
+ _ = wxSizer:add(SBS,Bbtn),
Ebtn = wxCheckBox:new(Panel, ?autoId, "On Exit"),
- wxSizer:add(SBS,Ebtn),
+ _ = wxSizer:add(SBS,Ebtn),
wxFrame:connect(Panel, command_checkbox_clicked),
- wxSizer:add(LeftSz,SBS, [{flag,?wxEXPAND}]),
+ _ = wxSizer:add(LeftSz,SBS, [{flag,?wxEXPAND}]),
SLabel = wxStaticText:new(Panel, ?wxID_ANY, "Stack Trace:\n On (with tail)"),
- wxSizer:add(LeftSz,SLabel),
+ _ = wxSizer:add(LeftSz,SLabel),
BLabel = wxStaticText:new(Panel, ?wxID_ANY, "Back Trace Size:\n 50000"),
- wxSizer:add(LeftSz,BLabel),
+ _ = wxSizer:add(LeftSz,BLabel),
StringsBox = wxStaticBox:new(Panel, ?wxID_ANY, "Strings:"),
StringsBS = wxStaticBoxSizer:new(StringsBox, ?wxVERTICAL),
Stringsbtn = wxCheckBox:new(Panel, ?stringsId, ?STRTEXT),
- wxSizer:add(StringsBS,Stringsbtn),
- wxSizer:add(LeftSz,StringsBS, [{flag,?wxEXPAND}]),
+ _ = wxSizer:add(StringsBS,Stringsbtn),
+ _ = wxSizer:add(LeftSz,StringsBS, [{flag,?wxEXPAND}]),
%% Create list_crtl / grid
Grid = wxListCtrl:new(Panel, [{winid, ?GRID},
@@ -169,12 +169,12 @@ create_win_batch(Title, Menus) ->
wxWindow:setFocus(Grid),
%% Put it in the window
- wxSizer:add(MainSz, LeftSz, [{border, 3}, {flag,?wxALL bor ?wxEXPAND}]),
- wxSizer:add(MainSz, Grid, [{border, 3}, {flag,?wxALL bor ?wxEXPAND},
+ _ = wxSizer:add(MainSz, LeftSz, [{border, 3}, {flag,?wxALL bor ?wxEXPAND}]),
+ _ = wxSizer:add(MainSz, Grid, [{border, 3}, {flag,?wxALL bor ?wxEXPAND},
{proportion, 1}]),
wxWindow:setSizer(Panel,MainSz),
- wxSizer:fit(MainSz, Win),
+ _ = wxSizer:fit(MainSz, Win),
wxSizer:setSizeHints(MainSz,Win),
IconFile = dbg_wx_win:find_icon("erlang_bug.png"),
diff --git a/lib/debugger/src/dbg_wx_src_view.erl b/lib/debugger/src/dbg_wx_src_view.erl
index 571c6b01bb..207c407fbc 100644
--- a/lib/debugger/src/dbg_wx_src_view.erl
+++ b/lib/debugger/src/dbg_wx_src_view.erl
@@ -56,7 +56,7 @@ code_area(Parent, Sizer) ->
end,
[SetStyle(Style) || Style <- Styles],
?stc:setKeyWords(Ed, 0, keyWords()),
- wxSizer:add(Sizer, Ed, [{proportion,1}, {flag, ?wxEXPAND}]),
+ _ = wxSizer:add(Sizer, Ed, [{proportion,1}, {flag, ?wxEXPAND}]),
Ed.
diff --git a/lib/debugger/src/dbg_wx_trace.erl b/lib/debugger/src/dbg_wx_trace.erl
index f9c60f9b72..29c8e8cefb 100644
--- a/lib/debugger/src/dbg_wx_trace.erl
+++ b/lib/debugger/src/dbg_wx_trace.erl
@@ -321,7 +321,7 @@ gui_cmd('Kill', State) ->
exit(State#state.pid, kill),
State;
gui_cmd('Messages', State) ->
- case int:meta(State#state.meta, messages) of
+ _ = case int:meta(State#state.meta, messages) of
[] ->
dbg_wx_trace_win:eval_output(State#state.win,"< No Messages!\n", bold);
Messages ->
@@ -818,11 +818,14 @@ gui_show_module(Win, Mod, Line, _Cm, Pid, How) ->
gui_load_module(Win, Mod, _Pid) ->
dbg_wx_trace_win:display(Win,{text, "Loading module..."}),
- %% Contents = int:contents(Mod, Pid),
- {ok, Contents} = dbg_iserver:call({raw_contents, Mod, any}),
- Win2 = dbg_wx_trace_win:show_code(Win, Mod, Contents),
- dbg_wx_trace_win:display(Win,{text, ""}),
- Win2.
+ case dbg_iserver:call({raw_contents, Mod, any}) of
+ {ok, Contents} ->
+ Win2 = dbg_wx_trace_win:show_code(Win, Mod, Contents),
+ dbg_wx_trace_win:display(Win,{text, ""}),
+ Win2;
+ not_found ->
+ dbg_wx_trace_win:show_no_code(Win)
+ end.
gui_update_bindings(Win,Meta) ->
Bs = int:meta(Meta, bindings, nostack),
diff --git a/lib/debugger/src/dbg_wx_trace_win.erl b/lib/debugger/src/dbg_wx_trace_win.erl
index 51687ad4e9..972a917728 100644
--- a/lib/debugger/src/dbg_wx_trace_win.erl
+++ b/lib/debugger/src/dbg_wx_trace_win.erl
@@ -123,7 +123,8 @@
%% GS = term()
%%--------------------------------------------------------------------
init() ->
- dbg_wx_win:init().
+ _ = dbg_wx_win:init(),
+ ok.
stop(#winInfo{window=Win}) ->
(catch wxFrame:destroy(Win)),
@@ -149,29 +150,29 @@ create_win(Parent, Title, Windows, Menus) ->
Sizer = wxBoxSizer:new(?wxVERTICAL),
Code = code_area(Panel),
- wxSizer:add(Sizer, Code#sub.win,
+ _ = wxSizer:add(Sizer, Code#sub.win,
[{proportion,1}, {border, 2},
{flag, ?wxEXPAND bor ?wxDOWN}]),
wxSizer:setVirtualSizeHints(Sizer, Code#sub.win),
ExpandWithBorder = [{border, 3},{flag,?wxEXPAND bor ?wxALL}],
Search = search_area(Panel),
- wxSizer:add(Sizer, Search#sub.win, ExpandWithBorder),
+ _ = wxSizer:add(Sizer, Search#sub.win, ExpandWithBorder),
Bs = button_area(Panel),
- wxSizer:add(Sizer, Bs#sub.win, ExpandWithBorder),
+ _ = wxSizer:add(Sizer, Bs#sub.win, ExpandWithBorder),
InfoArea = wxBoxSizer:new(?wxHORIZONTAL),
wxSizer:setMinSize(InfoArea, {100, ?EVAL_H}),
Eval = eval_area(Panel),
- wxSizer:add(InfoArea, Eval#sub.win, [{proportion,1},{flag,?wxEXPAND}]),
+ _ = wxSizer:add(InfoArea, Eval#sub.win, [{proportion,1},{flag,?wxEXPAND}]),
Bind = bind_area(Panel),
- wxSizer:add(InfoArea, Bind#sub.win,
+ _ = wxSizer:add(InfoArea, Bind#sub.win,
[{proportion,1},{border, 2},
{flag,?wxEXPAND bor ?wxLEFT}]),
- wxSizer:add(Sizer, InfoArea, ExpandWithBorder),
+ _ = wxSizer:add(Sizer, InfoArea, ExpandWithBorder),
Trace = trace_area(Panel),
- wxSizer:add(Sizer, Trace#sub.win, ExpandWithBorder),
+ _ = wxSizer:add(Sizer, Trace#sub.win, ExpandWithBorder),
SB = wxFrame:createStatusBar(Win,[]),
%% Note id and lastId to get the event when it dragged is complete
@@ -192,7 +193,7 @@ create_win(Parent, Title, Windows, Menus) ->
Wi = show_windows(enable_windows(Wi0,Windows)),
wxWindow:setSizer(Panel, Sizer),
- wxSizer:fit(Sizer, Win),
+ _ = wxSizer:fit(Sizer, Win),
wxSizer:setSizeHints(Sizer,Win),
IconFile = dbg_wx_win:find_icon("erlang_bug.png"),
@@ -230,11 +231,11 @@ get_window(WinInfo) ->
%%--------------------------------------------------------------------
configure(Wi=#winInfo{window=Win,m_szr={Panel,Sizer}}) ->
wx:batch(fun() ->
- show_windows(Wi),
+ _ = show_windows(Wi),
wxSizer:layout(Sizer),
%%wxWindow:setSizerAndFit(Panel,Sizer),
wxWindow:setSizer(Panel, Sizer),
- wxSizer:fit(Sizer, Win),
+ _ = wxSizer:fit(Sizer, Win),
wxSizer:setSizeHints(Sizer,Win),
Wi
end).
@@ -242,10 +243,10 @@ configure(Wi=#winInfo{window=Win,m_szr={Panel,Sizer}}) ->
configure(Wi0=#winInfo{window=Win,m_szr={Panel,Sizer}}, Windows) ->
wx:batch(fun() ->
Wi = enable_windows(Wi0, Windows),
- show_windows(Wi),
+ _ = show_windows(Wi),
wxSizer:layout(Sizer),
wxWindow:setSizer(Panel, Sizer),
- wxSizer:fit(Sizer, Win),
+ _ = wxSizer:fit(Sizer, Win),
wxSizer:setSizeHints(Sizer,Win),
Wi
end).
@@ -348,7 +349,7 @@ add_break(WinInfo, Menu, {{Mod,Line},[Status|_Options]}=Break) ->
case WinInfo#winInfo.editor of
{Mod, Editor} ->
dbg_wx_code:add_break_to_code(Editor, Line, Status);
- _ -> ignore
+ _ -> ok
end,
add_break_to_menu(WinInfo, Menu, Break).
@@ -372,7 +373,7 @@ update_break(WinInfo, {{Mod,Line},[Status|_Options]}=Break) ->
case WinInfo#winInfo.editor of
{Mod, Editor} ->
dbg_wx_code:add_break_to_code(Editor, Line, Status);
- _ -> ignore
+ _ -> ok
end,
update_break_in_menu(WinInfo, Break).
@@ -929,7 +930,7 @@ button_area(Parent) ->
B=wxButton:new(Parent, Button,
[{label,dbg_wx_win:to_string(Name)}]),
Id = wxWindow:getId(B),
- wxSizer:add(Sz,B, []),
+ _ = wxSizer:add(Sz,B, []),
wxButton:connect(B, command_button_clicked, [{id,Id}])
end, buttons()),
#sub{name='Button Area', win=Sz}.
@@ -938,22 +939,22 @@ button_area(Parent) ->
search_area(Parent) ->
HSz = wxBoxSizer:new(?wxHORIZONTAL),
- wxSizer:add(HSz, wxStaticText:new(Parent, ?wxID_ANY, "Find:"),
+ _ = wxSizer:add(HSz, wxStaticText:new(Parent, ?wxID_ANY, "Find:"),
[{flag,?wxALIGN_CENTER_VERTICAL}]),
TC1 = wxTextCtrl:new(Parent, ?SEARCH_ENTRY, [{style, ?wxTE_PROCESS_ENTER}]),
- wxSizer:add(HSz, TC1, [{proportion,3}, {flag, ?wxEXPAND}]),
+ _ = wxSizer:add(HSz, TC1, [{proportion,3}, {flag, ?wxEXPAND}]),
Nbtn = wxRadioButton:new(Parent, ?wxID_ANY, "Next"),
wxRadioButton:setValue(Nbtn, true),
- wxSizer:add(HSz,Nbtn,[{flag,?wxALIGN_CENTER_VERTICAL}]),
+ _ = wxSizer:add(HSz,Nbtn,[{flag,?wxALIGN_CENTER_VERTICAL}]),
Pbtn = wxRadioButton:new(Parent, ?wxID_ANY, "Previous"),
- wxSizer:add(HSz,Pbtn,[{flag,?wxALIGN_CENTER_VERTICAL}]),
+ _ = wxSizer:add(HSz,Pbtn,[{flag,?wxALIGN_CENTER_VERTICAL}]),
Cbtn = wxCheckBox:new(Parent, ?wxID_ANY, "Match Case"),
- wxSizer:add(HSz,Cbtn,[{flag,?wxALIGN_CENTER_VERTICAL}]),
- wxSizer:add(HSz, 15,15, [{proportion,1}, {flag, ?wxEXPAND}]),
- wxSizer:add(HSz, wxStaticText:new(Parent, ?wxID_ANY, "Goto Line:"),
+ _ = wxSizer:add(HSz,Cbtn,[{flag,?wxALIGN_CENTER_VERTICAL}]),
+ _ = wxSizer:add(HSz, 15,15, [{proportion,1}, {flag, ?wxEXPAND}]),
+ _ = wxSizer:add(HSz, wxStaticText:new(Parent, ?wxID_ANY, "Goto Line:"),
[{flag,?wxALIGN_CENTER_VERTICAL}]),
TC2 = wxTextCtrl:new(Parent, ?GOTO_ENTRY, [{style, ?wxTE_PROCESS_ENTER}]),
- wxSizer:add(HSz, TC2, [{proportion,0}, {flag, ?wxEXPAND}]),
+ _ = wxSizer:add(HSz, TC2, [{proportion,0}, {flag, ?wxEXPAND}]),
wxTextCtrl:connect(TC1, command_text_updated),
wxTextCtrl:connect(TC1, command_text_enter),
wxTextCtrl:connect(TC1, kill_focus),
@@ -969,14 +970,14 @@ eval_area(Parent) ->
VSz = wxBoxSizer:new(?wxVERTICAL),
HSz = wxBoxSizer:new(?wxHORIZONTAL),
- wxSizer:add(HSz, wxStaticText:new(Parent, ?wxID_ANY, "Evaluator:"),
+ _ = wxSizer:add(HSz, wxStaticText:new(Parent, ?wxID_ANY, "Evaluator:"),
[{flag,?wxALIGN_CENTER_VERTICAL}]),
TC = wxTextCtrl:new(Parent, ?EVAL_ENTRY, [{style, ?wxTE_PROCESS_ENTER}]),
- wxSizer:add(HSz, TC, [{proportion,1}, {flag, ?wxEXPAND}]),
- wxSizer:add(VSz, HSz, [{flag, ?wxEXPAND}]),
+ _ = wxSizer:add(HSz, TC, [{proportion,1}, {flag, ?wxEXPAND}]),
+ _ = wxSizer:add(VSz, HSz, [{flag, ?wxEXPAND}]),
TL = wxTextCtrl:new(Parent, ?EVAL_LOG, [{style, ?wxTE_DONTWRAP bor
?wxTE_MULTILINE bor ?wxTE_READONLY}]),
- wxSizer:add(VSz, TL, [{proportion,5}, {flag, ?wxEXPAND}]),
+ _ = wxSizer:add(VSz, TL, [{proportion,5}, {flag, ?wxEXPAND}]),
wxTextCtrl:connect(TC, command_text_enter),
#sub{name='Evaluator Area', win=VSz, in=TC, out=TL}.
diff --git a/lib/debugger/src/dbg_wx_view.erl b/lib/debugger/src/dbg_wx_view.erl
index 91fc0d08cb..86d009238f 100644
--- a/lib/debugger/src/dbg_wx_view.erl
+++ b/lib/debugger/src/dbg_wx_view.erl
@@ -263,7 +263,11 @@ shortcut(_) -> false.
gui_load_module(Win, Mod) ->
dbg_wx_trace_win:display(Win,{text, "Loading module..."}),
- {ok, Contents} = dbg_iserver:call({raw_contents, Mod, any}),
- Win2 = dbg_wx_trace_win:show_code(Win, Mod, Contents),
- dbg_wx_trace_win:display(Win,{text, ""}),
- Win2.
+ case dbg_iserver:call({raw_contents, Mod, any}) of
+ {ok, Contents} ->
+ Win2 = dbg_wx_trace_win:show_code(Win, Mod, Contents),
+ dbg_wx_trace_win:display(Win,{text, ""}),
+ Win2;
+ not_found ->
+ dbg_wx_trace_win:show_no_code(Win)
+ end.
diff --git a/lib/debugger/src/dbg_wx_win.erl b/lib/debugger/src/dbg_wx_win.erl
index 1ff8818bbe..25ffc5054c 100644
--- a/lib/debugger/src/dbg_wx_win.erl
+++ b/lib/debugger/src/dbg_wx_win.erl
@@ -43,7 +43,8 @@
%% GS = term()
%%--------------------------------------------------------------------
init() ->
- wx:new().
+ _ = wx:new(),
+ ok.
%%--------------------------------------------------------------------
%% create_menus(MenuBar, [Menu])
@@ -80,12 +81,12 @@ create_menus(_MB,[], _Win,Id) ->
Id.
create_menu_item(Menu, [separator|Is], Win, Id,Connect) ->
- wxMenu:appendSeparator(Menu),
+ _ = wxMenu:appendSeparator(Menu),
create_menu_item(Menu,Is,Win,Id+1,Connect);
create_menu_item(Menu, [{Name, _N, cascade, Items}|Is], Win, Id0,Connect) ->
Sub = wxMenu:new([]),
Id = create_menu_item(Sub, Items, Win, Id0, false),
- wxMenu:append(Menu, ?wxID_ANY, menu_name(Name,ignore), Sub),
+ _ = wxMenu:append(Menu, ?wxID_ANY, menu_name(Name,ignore), Sub),
%% Simulate GS sub checkBox/RadioBox behaviour
Self = self(),
Butts = [{MI,get(MI)} || {MI,_,_} <- Items],
@@ -99,8 +100,8 @@ create_menu_item(Menu, [{Name, _N, cascade, Items}|Is], Win, Id0,Connect) ->
Enabled = lists:foldl(IsChecked, [], Butts),
Self ! Ev#wx{userData={Name, Enabled}}
end,
- wxMenu:connect(Win, command_menu_selected,
- [{id,Id0},{lastId, Id-1},{callback,Filter}]),
+ _ = wxMenu:connect(Win, command_menu_selected,
+ [{id,Id0},{lastId, Id-1},{callback,Filter}]),
create_menu_item(Menu, Is, Win, Id, Connect);
create_menu_item(Menu, [{Name,Pos}|Is], Win, Id, Connect) ->
MenuId = case lists:member(Name, ['Debugger']) of
@@ -168,7 +169,7 @@ add_break(Win, MenuName, Point) ->
Delete = wxMenu:appendRadioItem(Trigger, ?wxID_ANY,"Delete"),
Add(Delete, {break,Point,{trigger,delete}}),
- wxMenu:append(Sub, ?wxID_ANY, "Trigger Action", Trigger),
+ _ = wxMenu:append(Sub, ?wxID_ANY, "Trigger Action", Trigger),
MenuBtn = wxMenu:append(Menu,?wxID_ANY, Label, Sub),
#break{mb={Menu,MenuBtn},
diff --git a/lib/debugger/src/dbg_wx_winman.erl b/lib/debugger/src/dbg_wx_winman.erl
index efa58ae325..ca858fa4bb 100644
--- a/lib/debugger/src/dbg_wx_winman.erl
+++ b/lib/debugger/src/dbg_wx_winman.erl
@@ -100,11 +100,11 @@ update_windows_menu(Win, [MonInfo|Infos]) ->
OldItems = wxMenu:getMenuItems(Menu),
[wxMenu:delete(Menu, Item) || Item <- OldItems],
menuitem(Win, Menu,MonInfo, 700),
- wxMenu:appendSeparator(Menu),
+ _ = wxMenu:appendSeparator(Menu),
wx:foldl(fun(Info,Acc) -> menuitem(Win,Menu,Info,Acc) end, 701, Infos).
menuitem(Window, Menu, {Title, Win}, Id) ->
- wxMenu:append(Menu, Id, Title),
+ _ = wxMenu:append(Menu, Id, Title),
wxWindow:connect(Window, command_menu_selected,
[{id,Id},{userData,{dbg_ui_winman,Win}}]),
Id+1.
diff --git a/lib/debugger/src/i.erl b/lib/debugger/src/i.erl
index 4ed5265bdf..2da3e77618 100644
--- a/lib/debugger/src/i.erl
+++ b/lib/debugger/src/i.erl
@@ -108,7 +108,7 @@ ib(Module,Function,Arity) ->
ib(Module,Function,Arity,Cond) ->
Breaks1 = int:all_breaks(Module),
- int:break_in(Module,Function,Arity),
+ ok = int:break_in(Module,Function,Arity),
Breaks2 = int:all_breaks(Module),
lists:foreach(fun({Mod,Line}) -> int:test_at_break(Mod,Line,Cond) end,
Breaks2--Breaks1).
diff --git a/lib/debugger/src/int.erl b/lib/debugger/src/int.erl
index 3906c22afd..e5bade9abe 100644
--- a/lib/debugger/src/int.erl
+++ b/lib/debugger/src/int.erl
@@ -352,10 +352,10 @@ start() -> dbg_iserver:start().
stop() ->
lists:foreach(
fun(Mod) ->
- everywhere(distributed,
- fun() ->
+ _ = everywhere(distributed,
+ fun() ->
erts_debug:breakpoint({Mod,'_','_'}, false)
- end)
+ end)
end,
interpreted()),
dbg_iserver:stop().
@@ -524,21 +524,21 @@ check(Mod) when is_atom(Mod) -> catch check_module(Mod);
check(File) when is_list(File) -> catch check_file(File).
load({Mod, Src, Beam, BeamBin, Exp, Abst}, Dist) ->
- everywhere(Dist,
- fun() ->
+ _ = everywhere(Dist,
+ fun() ->
code:purge(Mod),
erts_debug:breakpoint({Mod,'_','_'}, false),
{module,Mod} = code:load_binary(Mod, Beam, BeamBin)
- end),
+ end),
case erl_prim_loader:get_file(filename:absname(Src)) of
{ok, SrcBin, _} ->
MD5 = code:module_md5(BeamBin),
Bin = term_to_binary({interpreter_module,Exp,Abst,SrcBin,MD5}),
{module, Mod} = dbg_iserver:safe_call({load, Mod, Src, Bin}),
- everywhere(Dist,
- fun() ->
+ _ = everywhere(Dist,
+ fun() ->
true = erts_debug:breakpoint({Mod,'_','_'}, true) > 0
- end),
+ end),
{module, Mod};
error ->
error
@@ -738,9 +738,9 @@ del_mod(AbsMod, Dist) ->
list_to_atom(filename:basename(AbsMod,".erl"))
end,
dbg_iserver:safe_cast({delete, Mod}),
- everywhere(Dist,
- fun() ->
+ _ = everywhere(Dist,
+ fun() ->
erts_debug:breakpoint({Mod,'_','_'}, false),
erlang:yield()
- end),
+ end),
ok.
diff --git a/lib/dialyzer/doc/src/notes.xml b/lib/dialyzer/doc/src/notes.xml
index 9fff460b7a..6400072b1f 100644
--- a/lib/dialyzer/doc/src/notes.xml
+++ b/lib/dialyzer/doc/src/notes.xml
@@ -32,6 +32,20 @@
<p>This document describes the changes made to the Dialyzer
application.</p>
+<section><title>Dialyzer 3.0.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>Fix a map related bug.</p>
+ <p>
+ Own Id: OTP-13709 Aux Id: ERL-177, PR-1115 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Dialyzer 3.0</title>
<section><title>Fixed Bugs and Malfunctions</title>
@@ -42,11 +56,31 @@
Own Id: OTP-13520</p>
</item>
<item>
- <p>Correct mispelling in Dialyzer's acronym definition.
+ <p>Correct misspelling in Dialyzer's acronym definition.
</p>
<p>
Own Id: OTP-13544 Aux Id: PR-1007 </p>
</item>
+ <item>
+ <p>Dialyzer no longer crashes when there is an invalid
+ function call such as <c>42(7)</c> in a module being
+ analyzed. The compiler will now warn for invalid function
+ calls such as <c>X = 42, x(7)</c>.</p>
+ <p>
+ Own Id: OTP-13552 Aux Id: ERL-138 </p>
+ </item>
+ <item>
+ <p> Fix a bug that caused Dialyzer to go into an infinite
+ loop. </p>
+ <p>
+ Own Id: OTP-13653 Aux Id: ERL-157 </p>
+ </item>
+ <item>
+ <p>Fix a bug in Dialyzer related to call-site
+ analysis.</p>
+ <p>
+ Own Id: OTP-13655 Aux Id: PR-1092 </p>
+ </item>
</list>
</section>
@@ -56,7 +90,7 @@
<item>
<p> The evaluation of SCCs in <c>dialyzer_typesig</c> is
optimized. </p> <p> Maps are used instead of Dicts to
- further optimize the evalutation. </p>
+ further optimize the evaluation. </p>
<p>
Own Id: OTP-10349</p>
</item>
@@ -84,6 +118,11 @@
<p>
Own Id: OTP-13542 Aux Id: PR-1014 </p>
</item>
+ <item>
+ <p>The translation of forms to types is improved. </p>
+ <p>
+ Own Id: OTP-13547</p>
+ </item>
</list>
</section>
diff --git a/lib/dialyzer/src/dialyzer.erl b/lib/dialyzer/src/dialyzer.erl
index bcac8afe64..7f86520c06 100644
--- a/lib/dialyzer/src/dialyzer.erl
+++ b/lib/dialyzer/src/dialyzer.erl
@@ -282,7 +282,7 @@ cl_check_log(none) ->
cl_check_log(Output) ->
io:format(" Check output file `~s' for details\n", [Output]).
--spec format_warning(raw_warning()) -> string().
+-spec format_warning(raw_warning() | dial_warning()) -> string().
format_warning(W) ->
format_warning(W, basename).
diff --git a/lib/dialyzer/src/dialyzer_contracts.erl b/lib/dialyzer/src/dialyzer_contracts.erl
index 116260778c..a72368f9f8 100644
--- a/lib/dialyzer/src/dialyzer_contracts.erl
+++ b/lib/dialyzer/src/dialyzer_contracts.erl
@@ -53,7 +53,9 @@
%% to expand records and/or remote types that they might contain.
%%-----------------------------------------------------------------------
--type tmp_contract_fun() :: fun((sets:set(mfa()), types()) -> contract_pair()).
+-type cache() :: ets:tid().
+-type tmp_contract_fun() ::
+ fun((sets:set(mfa()), types(), cache()) -> contract_pair()).
-record(tmp_contract, {contract_funs = [] :: [tmp_contract_fun()],
forms = [] :: [{_, _}]}).
@@ -153,19 +155,30 @@ process_contract_remote_types(CodeServer) ->
ExpTypes = dialyzer_codeserver:get_exported_types(CodeServer),
RecordDict = dialyzer_codeserver:get_records(CodeServer),
ContractFun =
- fun({_M, _F, _A}, {File, #tmp_contract{contract_funs = CFuns, forms = Forms}, Xtra}) ->
- NewCs = [CFun(ExpTypes, RecordDict) || CFun <- CFuns],
- Args = general_domain(NewCs),
- {File, #contract{contracts = NewCs, args = Args, forms = Forms}, Xtra}
+ fun({{_M, _F, _A}=MFA, {File, TmpContract, Xtra}}, C0) ->
+ #tmp_contract{contract_funs = CFuns, forms = Forms} = TmpContract,
+ {NewCs, C2} = lists:mapfoldl(fun(CFun, C1) ->
+ CFun(ExpTypes, RecordDict, C1)
+ end, C0, CFuns),
+ Args = general_domain(NewCs),
+ Contract = #contract{contracts = NewCs, args = Args, forms = Forms},
+ {{MFA, {File, Contract, Xtra}}, C2}
end,
ModuleFun =
- fun(_ModuleName, ContractDict) ->
- dict:map(ContractFun, ContractDict)
+ fun({ModuleName, ContractDict}, C3) ->
+ {NewContractList, C4} =
+ lists:mapfoldl(ContractFun, C3, dict:to_list(ContractDict)),
+ {{ModuleName, dict:from_list(NewContractList)}, C4}
end,
- NewContractDict = dict:map(ModuleFun, TmpContractDict),
- NewCallbackDict = dict:map(ModuleFun, TmpCallbackDict),
+ Cache = erl_types:cache__new(),
+ {NewContractList, C5} =
+ lists:mapfoldl(ModuleFun, Cache, dict:to_list(TmpContractDict)),
+ {NewCallbackList, _C6} =
+ lists:mapfoldl(ModuleFun, C5, dict:to_list(TmpCallbackDict)),
+ NewContractDict = dict:from_list(NewContractList),
+ NewCallbackDict = dict:from_list(NewCallbackList),
dialyzer_codeserver:finalize_contracts(NewContractDict, NewCallbackDict,
- CodeServer).
+ CodeServer).
-type opaques_fun() :: fun((module()) -> [erl_types:erl_type()]).
@@ -431,19 +444,19 @@ contract_from_form(Forms, MFA, RecDict, FileLine) ->
contract_from_form([{type, _, 'fun', [_, _]} = Form | Left], MFA, RecDict,
FileLine, TypeAcc, FormAcc) ->
TypeFun =
- fun(ExpTypes, AllRecords) ->
- NewType =
+ fun(ExpTypes, AllRecords, Cache) ->
+ {NewType, NewCache} =
try
- from_form_with_check(Form, ExpTypes, MFA, AllRecords)
+ from_form_with_check(Form, ExpTypes, MFA, AllRecords, Cache)
catch
throw:{error, Msg} ->
{File, Line} = FileLine,
NewMsg = io_lib:format("~s:~p: ~s", [filename:basename(File),
- Line, Msg]),
+ Line, Msg]),
throw({error, NewMsg})
end,
NewTypeNoVars = erl_types:subst_all_vars_to_any(NewType),
- {NewTypeNoVars, []}
+ {{NewTypeNoVars, []}, NewCache}
end,
NewTypeAcc = [TypeFun | TypeAcc],
NewFormAcc = [{Form, []} | FormAcc],
@@ -452,13 +465,15 @@ contract_from_form([{type, _L1, bounded_fun,
[{type, _L2, 'fun', [_, _]} = Form, Constr]}| Left],
MFA, RecDict, FileLine, TypeAcc, FormAcc) ->
TypeFun =
- fun(ExpTypes, AllRecords) ->
- {Constr1, VarDict} =
- process_constraints(Constr, MFA, RecDict, ExpTypes, AllRecords),
- NewType = from_form_with_check(Form, ExpTypes, MFA, AllRecords,
- VarDict),
+ fun(ExpTypes, AllRecords, Cache) ->
+ {Constr1, VarTable, Cache1} =
+ process_constraints(Constr, MFA, RecDict, ExpTypes, AllRecords,
+ Cache),
+ {NewType, NewCache} =
+ from_form_with_check(Form, ExpTypes, MFA, AllRecords,
+ VarTable, Cache1),
NewTypeNoVars = erl_types:subst_all_vars_to_any(NewType),
- {NewTypeNoVars, Constr1}
+ {{NewTypeNoVars, Constr1}, NewCache}
end,
NewTypeAcc = [TypeFun | TypeAcc],
NewFormAcc = [{Form, Constr} | FormAcc],
@@ -466,72 +481,91 @@ contract_from_form([{type, _L1, bounded_fun,
contract_from_form([], _MFA, _RecDict, _FileLine, TypeAcc, FormAcc) ->
{lists:reverse(TypeAcc), lists:reverse(FormAcc)}.
-process_constraints(Constrs, MFA, RecDict, ExpTypes, AllRecords) ->
- Init0 = initialize_constraints(Constrs, MFA, RecDict, ExpTypes, AllRecords),
+process_constraints(Constrs, MFA, RecDict, ExpTypes, AllRecords, Cache) ->
+ {Init0, NewCache} = initialize_constraints(Constrs, MFA, RecDict, ExpTypes,
+ AllRecords, Cache),
Init = remove_cycles(Init0),
- constraints_fixpoint(Init, MFA, RecDict, ExpTypes, AllRecords).
+ constraints_fixpoint(Init, MFA, RecDict, ExpTypes, AllRecords, NewCache).
-initialize_constraints(Constrs, MFA, RecDict, ExpTypes, AllRecords) ->
- initialize_constraints(Constrs, MFA, RecDict, ExpTypes, AllRecords, []).
+initialize_constraints(Constrs, MFA, RecDict, ExpTypes, AllRecords, Cache) ->
+ initialize_constraints(Constrs, MFA, RecDict, ExpTypes, AllRecords,
+ Cache, []).
-initialize_constraints([], _MFA, _RecDict, _ExpTypes, _AllRecords, Acc) ->
- Acc;
-initialize_constraints([Constr|Rest], MFA, RecDict, ExpTypes, AllRecords, Acc) ->
+initialize_constraints([], _MFA, _RecDict, _ExpTypes, _AllRecords,
+ Cache, Acc) ->
+ {Acc, Cache};
+initialize_constraints([Constr|Rest], MFA, RecDict, ExpTypes, AllRecords,
+ Cache, Acc) ->
case Constr of
{type, _, constraint, [{atom, _, is_subtype}, [Type1, Type2]]} ->
- T1 = final_form(Type1, ExpTypes, MFA, AllRecords, maps:new()),
+ VarTable = erl_types:var_table__new(),
+ {T1, NewCache} =
+ final_form(Type1, ExpTypes, MFA, AllRecords, VarTable, Cache),
Entry = {T1, Type2},
- initialize_constraints(Rest, MFA, RecDict, ExpTypes, AllRecords, [Entry|Acc]);
+ initialize_constraints(Rest, MFA, RecDict, ExpTypes, AllRecords,
+ NewCache, [Entry|Acc]);
{type, _, constraint, [{atom,_,Name}, List]} ->
N = length(List),
throw({error,
io_lib:format("Unsupported type guard ~w/~w\n", [Name, N])})
end.
-constraints_fixpoint(Constrs, MFA, RecDict, ExpTypes, AllRecords) ->
- VarDict =
- constraints_to_dict(Constrs, MFA, RecDict, ExpTypes, AllRecords, maps:new()),
- constraints_fixpoint(VarDict, MFA, Constrs, RecDict, ExpTypes, AllRecords).
-
-constraints_fixpoint(OldVarDict, MFA, Constrs, RecDict, ExpTypes, AllRecords) ->
- NewVarDict =
- constraints_to_dict(Constrs, MFA, RecDict, ExpTypes, AllRecords, OldVarDict),
- case NewVarDict of
- OldVarDict ->
- DictFold =
+constraints_fixpoint(Constrs, MFA, RecDict, ExpTypes, AllRecords, Cache) ->
+ VarTable = erl_types:var_table__new(),
+ {VarTab, NewCache} =
+ constraints_to_dict(Constrs, MFA, RecDict, ExpTypes, AllRecords,
+ VarTable, Cache),
+ constraints_fixpoint(VarTab, MFA, Constrs, RecDict, ExpTypes,
+ AllRecords, NewCache).
+
+constraints_fixpoint(OldVarTab, MFA, Constrs, RecDict, ExpTypes,
+ AllRecords, Cache) ->
+ {NewVarTab, NewCache} =
+ constraints_to_dict(Constrs, MFA, RecDict, ExpTypes, AllRecords,
+ OldVarTab, Cache),
+ case NewVarTab of
+ OldVarTab ->
+ Fun =
fun(Key, Value, Acc) ->
[{subtype, erl_types:t_var(Key), Value}|Acc]
end,
- FinalConstrs = maps:fold(DictFold, [], NewVarDict),
- {FinalConstrs, NewVarDict};
+ FinalConstrs = maps:fold(Fun, [], NewVarTab),
+ {FinalConstrs, NewVarTab, NewCache};
_Other ->
- constraints_fixpoint(NewVarDict, MFA, Constrs, RecDict, ExpTypes, AllRecords)
+ constraints_fixpoint(NewVarTab, MFA, Constrs, RecDict, ExpTypes,
+ AllRecords, NewCache)
end.
-final_form(Form, ExpTypes, MFA, AllRecords, VarDict) ->
- from_form_with_check(Form, ExpTypes, MFA, AllRecords, VarDict).
+final_form(Form, ExpTypes, MFA, AllRecords, VarTable, Cache) ->
+ from_form_with_check(Form, ExpTypes, MFA, AllRecords, VarTable, Cache).
-from_form_with_check(Form, ExpTypes, MFA, AllRecords) ->
- from_form_with_check(Form, ExpTypes, MFA, AllRecords, maps:new()).
+from_form_with_check(Form, ExpTypes, MFA, AllRecords, Cache) ->
+ VarTable = erl_types:var_table__new(),
+ from_form_with_check(Form, ExpTypes, MFA, AllRecords, VarTable, Cache).
-from_form_with_check(Form, ExpTypes, MFA, AllRecords, VarDict) ->
+from_form_with_check(Form, ExpTypes, MFA, AllRecords, VarTable, Cache) ->
Site = {spec, MFA},
- erl_types:t_check_record_fields(Form, ExpTypes, Site, AllRecords,
- VarDict),
- erl_types:t_from_form(Form, ExpTypes, Site, AllRecords, VarDict).
-
-constraints_to_dict(Constrs, MFA, RecDict, ExpTypes, AllRecords, VarDict) ->
- Subtypes =
- constraints_to_subs(Constrs, MFA, RecDict, ExpTypes, AllRecords, VarDict, []),
- insert_constraints(Subtypes).
-
-constraints_to_subs([], _MFA, _RecDict, _ExpTypes, _AllRecords, _VarDict, Acc) ->
- Acc;
-constraints_to_subs([C|Rest], MFA, RecDict, ExpTypes, AllRecords, VarDict, Acc) ->
- {T1, Form2} = C,
- T2 = final_form(Form2, ExpTypes, MFA, AllRecords, VarDict),
+ C1 = erl_types:t_check_record_fields(Form, ExpTypes, Site, AllRecords,
+ VarTable, Cache),
+ erl_types:t_from_form(Form, ExpTypes, Site, AllRecords, VarTable, C1).
+
+constraints_to_dict(Constrs, MFA, RecDict, ExpTypes, AllRecords,
+ VarTab, Cache) ->
+ {Subtypes, NewCache} =
+ constraints_to_subs(Constrs, MFA, RecDict, ExpTypes, AllRecords,
+ VarTab, Cache, []),
+ {insert_constraints(Subtypes), NewCache}.
+
+constraints_to_subs([], _MFA, _RecDict, _ExpTypes, _AllRecords,
+ _VarTab, Cache, Acc) ->
+ {Acc, Cache};
+constraints_to_subs([{T1, Form2}|Rest], MFA, RecDict, ExpTypes, AllRecords,
+ VarTab, Cache, Acc) ->
+ {T2, NewCache} =
+ final_form(Form2, ExpTypes, MFA, AllRecords, VarTab, Cache),
NewAcc = [{subtype, T1, T2}|Acc],
- constraints_to_subs(Rest, MFA, RecDict, ExpTypes, AllRecords, VarDict, NewAcc).
+ constraints_to_subs(Rest, MFA, RecDict, ExpTypes, AllRecords,
+ VarTab, NewCache, NewAcc).
%% Replaces variables with '_' when necessary to break up cycles among
%% the constraints.
@@ -589,10 +623,13 @@ remove_uses([{Var, Use}|ToRemove], Constrs0) ->
remove_uses(_Var, _Use, []) -> [];
remove_uses(Var, Use, [Constr|Constrs]) ->
{V, Form} = Constr,
- case erl_types:t_var_name(V) =:= Var of
- true -> [{V, remove_use(Form, Use)}|Constrs];
- false -> [Constr|remove_uses(Var, Use, Constrs)]
- end.
+ NewConstr = case erl_types:t_var_name(V) =:= Var of
+ true ->
+ {V, remove_use(Form, Use)};
+ false ->
+ Constr
+ end,
+ [NewConstr|remove_uses(Var, Use, Constrs)].
remove_use({var, L, V}, V) -> {var, L, '_'};
remove_use(T, V) when is_tuple(T) ->
@@ -642,6 +679,7 @@ get_invalid_contract_warnings_funs([{MFA, {FileLine, Contract, _Xtra}}|Left],
{value, {Ret, Args}} ->
Sig = erl_types:t_fun(Args, Ret),
{M, _F, _A} = MFA,
+ %% io:format("MFA ~p~n", [MFA]),
Opaques = FindOpaques(M),
{File, Line} = FileLine,
WarningInfo = {File, Line, MFA},
@@ -730,19 +768,9 @@ picky_contract_check(CSig0, Sig0, MFA, WarningInfo, Contract, RecDict, Acc) ->
end.
extra_contract_warning(MFA, WarningInfo, Contract, CSig, Sig, RecDict) ->
- %% We do not want to depend upon erl_types:t_to_string() possibly
- %% hiding the contents of opaque types.
- SigUnopaque = erl_types:t_unopaque(Sig),
- CSigUnopaque = erl_types:t_unopaque(CSig),
- SigString0 =
- lists:flatten(dialyzer_utils:format_sig(SigUnopaque, RecDict)),
- ContractString0 =
- lists:flatten(dialyzer_utils:format_sig(CSigUnopaque, RecDict)),
- %% The only difference is in record fields containing 'undefined' or not.
- IsUndefRecordFieldsRelated = SigString0 =:= ContractString0,
{IsRemoteTypesRelated, SubtypeRelation} =
is_remote_types_related(Contract, CSig, Sig, MFA, RecDict),
- case IsUndefRecordFieldsRelated orelse IsRemoteTypesRelated of
+ case IsRemoteTypesRelated of
true ->
no_warning;
false ->
@@ -790,7 +818,7 @@ is_remote_types_related(Contract, CSig, Sig, MFA, RecDict) ->
t_from_forms_without_remote([{FType, []}], MFA, RecDict) ->
Site = {spec, MFA},
- Type1 = erl_types:t_from_form_without_remote(FType, Site, RecDict),
+ {Type1, _} = erl_types:t_from_form_without_remote(FType, Site, RecDict),
{ok, erl_types:subst_all_vars_to_any(Type1)};
t_from_forms_without_remote([{_FType, _Constrs}], _MFA, _RecDict) ->
%% 'When' constraints
diff --git a/lib/dialyzer/src/dialyzer_dataflow.erl b/lib/dialyzer/src/dialyzer_dataflow.erl
index 5ab0c39c04..963c953447 100644
--- a/lib/dialyzer/src/dialyzer_dataflow.erl
+++ b/lib/dialyzer/src/dialyzer_dataflow.erl
@@ -430,17 +430,35 @@ handle_apply(Tree, Map, State) ->
handle_apply_or_call(FunInfoList, Args, ArgTypes, Map, Tree, State) ->
None = t_none(),
+ %% Call-site analysis may be inaccurate and consider more funs than those that
+ %% are actually possible. If all of them are incorrect, then warnings can be
+ %% emitted. If at least one fun is ok, however, then no warning is emitted,
+ %% just in case the bad ones are not really possible. The last argument is
+ %% used for this, with the following encoding:
+ %% Initial value: {none, []}
+ %% First fun checked: {one, <List of warns>}
+ %% More funs checked: {many, <List of warns>}
+ %% A '{one, []}' can only become '{many, []}'.
+ %% If at any point an fun does not add warnings, then the list is also
+ %% replaced with an empty list.
handle_apply_or_call(FunInfoList, Args, ArgTypes, Map, Tree, State,
- [None || _ <- ArgTypes], None, false).
+ [None || _ <- ArgTypes], None, false, {none, []}).
handle_apply_or_call([{local, external}|Left], Args, ArgTypes, Map, Tree, State,
- _AccArgTypes, _AccRet, _HadExternal) ->
+ _AccArgTypes, _AccRet, _HadExternal, Warns) ->
+ {HowMany, _} = Warns,
+ NewHowMany =
+ case HowMany of
+ none -> one;
+ _ -> many
+ end,
+ NewWarns = {NewHowMany, []},
handle_apply_or_call(Left, Args, ArgTypes, Map, Tree, State,
- ArgTypes, t_any(), true);
+ ArgTypes, t_any(), true, NewWarns);
handle_apply_or_call([{TypeOfApply, {Fun, Sig, Contr, LocalRet}}|Left],
Args, ArgTypes, Map, Tree,
#state{opaques = Opaques} = State,
- AccArgTypes, AccRet, HadExternal) ->
+ AccArgTypes, AccRet, HadExternal, Warns) ->
Any = t_any(),
AnyArgs = [Any || _ <- Args],
GenSig = {AnyArgs, fun(_) -> t_any() end},
@@ -504,7 +522,7 @@ handle_apply_or_call([{TypeOfApply, {Fun, Sig, Contr, LocalRet}}|Left],
?debug("RetWithoutLocal: ~s\n", [erl_types:t_to_string(RetWithoutLocal)]),
?debug("BifRet: ~s\n", [erl_types:t_to_string(BifRange(NewArgTypes))]),
?debug("SigRange: ~s\n", [erl_types:t_to_string(SigRange)]),
- ?debug("ContrRet: ~s\n", [erl_types:t_to_string(CRange(NewArgTypes))]),
+ ?debug("ContrRet: ~s\n", [erl_types:t_to_string(ContrRet)]),
?debug("LocalRet: ~s\n", [erl_types:t_to_string(LocalRet)]),
State1 =
@@ -586,16 +604,32 @@ handle_apply_or_call([{TypeOfApply, {Fun, Sig, Contr, LocalRet}}|Left],
end,
NewAccRet = t_sup(AccRet, TotalRet),
?debug("NewAccRet: ~s\n", [t_to_string(NewAccRet)]),
+ {NewWarnings, State4} = state__remove_added_warnings(State, State3),
+ {HowMany, OldWarnings} = Warns,
+ NewWarns =
+ case HowMany of
+ none -> {one, NewWarnings};
+ _ ->
+ case OldWarnings =:= [] of
+ true -> {many, []};
+ false ->
+ case NewWarnings =:= [] of
+ true -> {many, []};
+ false -> {many, NewWarnings ++ OldWarnings}
+ end
+ end
+ end,
handle_apply_or_call(Left, Args, ArgTypes, Map, Tree,
- State3, NewAccArgTypes, NewAccRet, HadExternal);
+ State4, NewAccArgTypes, NewAccRet, HadExternal, NewWarns);
handle_apply_or_call([], Args, _ArgTypes, Map, _Tree, State,
- AccArgTypes, AccRet, HadExternal) ->
+ AccArgTypes, AccRet, HadExternal, {_, Warnings}) ->
+ State1 = state__add_warnings(Warnings, State),
case HadExternal of
false ->
NewMap = enter_type_lists(Args, AccArgTypes, Map),
- {State, NewMap, AccRet};
+ {State1, NewMap, AccRet};
true ->
- {had_external, State}
+ {had_external, State1}
end.
apply_fail_reason(FailedSig, FailedBif, FailedContract) ->
@@ -944,12 +978,21 @@ handle_case(Tree, Map, State) ->
false -> State1
end,
Map2 = join_maps_begin(Map1),
- {MapList, State3, Type} =
+ {MapList, State3, Type, Warns} =
handle_clauses(Clauses, Arg, ArgType, ArgType, State2,
- [], Map2, [], []),
+ [], Map2, [], [], []),
+ %% Non-Erlang BEAM languages, such as Elixir, expand language constructs
+ %% into case statements. In that case, we do not want to warn on
+ %% individual clauses not matching unless none of them can.
+ SupressForced = is_compiler_generated(cerl:get_ann(Tree))
+ andalso not (t_is_none(Type)),
+ State4 = lists:foldl(fun({T,R,M,F}, S) ->
+ state__add_warning(
+ S,T,R,M,F andalso (not SupressForced))
+ end, State3, Warns),
Map3 = join_maps_end(MapList, Map2),
debug_pp_map(Map3),
- {State3, Map3, Type}
+ {State4, Map3, Type}
end.
%%----------------------------------------
@@ -1048,22 +1091,24 @@ handle_receive(Tree, Map, State) ->
RaceListSize + 1, State);
false -> State
end,
- {MapList, State2, ReceiveType} =
+ {MapList, State2, ReceiveType, Warns} =
handle_clauses(Clauses, ?no_arg, t_any(), t_any(), State1, [], Map,
- [], []),
+ [], [], []),
+ State3 = lists:foldl(fun({T,R,M,F}, S) -> state__add_warning(S,T,R,M,F) end,
+ State2, Warns),
Map1 = join_maps(MapList, Map),
- {State3, Map2, TimeoutType} = traverse(Timeout, Map1, State2),
- Opaques = State3#state.opaques,
+ {State4, Map2, TimeoutType} = traverse(Timeout, Map1, State3),
+ Opaques = State4#state.opaques,
case (t_is_atom(TimeoutType, Opaques) andalso
(t_atom_vals(TimeoutType, Opaques) =:= ['infinity'])) of
true ->
- {State3, Map2, ReceiveType};
+ {State4, Map2, ReceiveType};
false ->
Action = cerl:receive_action(Tree),
- {State4, Map3, ActionType} = traverse(Action, Map, State3),
+ {State5, Map3, ActionType} = traverse(Action, Map, State4),
Map4 = join_maps([Map3, Map1], Map),
Type = t_sup(ReceiveType, ActionType),
- {State4, Map4, Type}
+ {State5, Map4, Type}
end.
%%----------------------------------------
@@ -1211,7 +1256,7 @@ handle_tuple(Tree, Map, State) ->
%% Clauses
%%
handle_clauses([C|Left], Arg, ArgType, OrigArgType, State, CaseTypes, MapIn,
- Acc, ClauseAcc) ->
+ Acc, ClauseAcc, WarnAcc0) ->
IsRaceAnalysisEnabled = is_race_analysis_enabled(State),
State1 =
case IsRaceAnalysisEnabled of
@@ -1224,8 +1269,8 @@ handle_clauses([C|Left], Arg, ArgType, OrigArgType, State, CaseTypes, MapIn,
State);
false -> State
end,
- {State2, ClauseMap, BodyType, NewArgType} =
- do_clause(C, Arg, ArgType, OrigArgType, MapIn, State1),
+ {State2, ClauseMap, BodyType, NewArgType, WarnAcc} =
+ do_clause(C, Arg, ArgType, OrigArgType, MapIn, State1, WarnAcc0),
{NewClauseAcc, State3} =
case IsRaceAnalysisEnabled of
true ->
@@ -1243,9 +1288,9 @@ handle_clauses([C|Left], Arg, ArgType, OrigArgType, State, CaseTypes, MapIn,
false -> {[BodyType|CaseTypes], [ClauseMap|Acc]}
end,
handle_clauses(Left, Arg, NewArgType, OrigArgType, State3,
- NewCaseTypes, MapIn, NewAcc, NewClauseAcc);
+ NewCaseTypes, MapIn, NewAcc, NewClauseAcc, WarnAcc);
handle_clauses([], _Arg, _ArgType, _OrigArgType, State, CaseTypes, _MapIn, Acc,
- ClauseAcc) ->
+ ClauseAcc, WarnAcc) ->
State1 =
case is_race_analysis_enabled(State) of
true ->
@@ -1255,9 +1300,9 @@ handle_clauses([], _Arg, _ArgType, _OrigArgType, State, CaseTypes, _MapIn, Acc,
RaceListSize + 1, State);
false -> State
end,
- {lists:reverse(Acc), State1, t_sup(CaseTypes)}.
+ {lists:reverse(Acc), State1, t_sup(CaseTypes), WarnAcc}.
-do_clause(C, Arg, ArgType0, OrigArgType, Map, State) ->
+do_clause(C, Arg, ArgType0, OrigArgType, Map, State, Warns) ->
Pats = cerl:clause_pats(C),
Guard = cerl:clause_guard(C),
Body = cerl:clause_body(C),
@@ -1289,7 +1334,7 @@ do_clause(C, Arg, ArgType0, OrigArgType, Map, State) ->
[cerl_prettypr:format(C), format_type(ArgType0, State1)]),
case state__warning_mode(State1) of
false ->
- {State1, Map, t_none(), ArgType0};
+ {State1, Map, t_none(), ArgType0, Warns};
true ->
{Msg, Force} =
case t_is_none(ArgType0) of
@@ -1369,8 +1414,7 @@ do_clause(C, Arg, ArgType0, OrigArgType, Map, State) ->
{record_match, _} -> ?WARN_MATCHING;
{pattern_match_cov, _} -> ?WARN_MATCHING
end,
- {state__add_warning(State1, WarnType, C, Msg, Force),
- Map, t_none(), ArgType0}
+ {State1, Map, t_none(), ArgType0, [{WarnType, C, Msg, Force}|Warns]}
end;
{Map2, PatTypes} ->
Map3 =
@@ -1403,9 +1447,9 @@ do_clause(C, Arg, ArgType0, OrigArgType, Map, State) ->
false ->
{guard_fail_pat, [PatString, format_type(ArgType0, State1)]}
end,
- State2 =
+ Warn =
case Reason of
- none -> state__add_warning(State1, ?WARN_MATCHING, C, DefaultMsg);
+ none -> {?WARN_MATCHING, C, DefaultMsg, false};
{FailGuard, Msg} ->
case is_compiler_generated(cerl:get_ann(FailGuard)) of
false ->
@@ -1414,15 +1458,15 @@ do_clause(C, Arg, ArgType0, OrigArgType, Map, State) ->
{neg_guard_fail, _} -> ?WARN_MATCHING;
{opaque_guard, _} -> ?WARN_OPAQUE
end,
- state__add_warning(State1, WarnType, FailGuard, Msg);
+ {WarnType, FailGuard, Msg, false};
true ->
- state__add_warning(State1, ?WARN_MATCHING, C, Msg)
+ {?WARN_MATCHING, C, Msg, false}
end
end,
- {State2, Map, t_none(), NewArgType};
+ {State1, Map, t_none(), NewArgType, [Warn|Warns]};
Map4 ->
{RetState, RetMap, BodyType} = traverse(Body, Map4, State1),
- {RetState, RetMap, BodyType, NewArgType}
+ {RetState, RetMap, BodyType, NewArgType, Warns}
end
end.
@@ -2920,11 +2964,15 @@ is_call_to_send(Tree) ->
Arity = cerl:call_arity(Tree),
cerl:is_c_atom(Mod)
andalso cerl:is_c_atom(Name)
- andalso (cerl:atom_val(Name) =:= '!')
+ andalso is_send(cerl:atom_val(Name))
andalso (cerl:atom_val(Mod) =:= erlang)
andalso (Arity =:= 2)
end.
+is_send('!') -> true;
+is_send(send) -> true;
+is_send(_) -> false.
+
is_lc_simple_list(Tree, TreeType, State) ->
Opaques = State#state.opaques,
Ann = cerl:get_ann(Tree),
@@ -3033,11 +3081,22 @@ state__add_warning(#state{warnings = Warnings, warning_mode = true} = State,
false ->
WarningInfo = {get_file(Ann), get_line(Ann), State#state.curr_fun},
Warn = {Tag, WarningInfo, Msg},
- ?debug("MSG ~s\n", [dialyzer:format_warning(Warn)]),
+ case Tag of
+ ?WARN_CONTRACT_RANGE -> ok;
+ _ -> ?debug("MSG ~s\n", [dialyzer:format_warning(Warn)])
+ end,
State#state{warnings = [Warn|Warnings]}
end
end.
+state__remove_added_warnings(OldState, NewState) ->
+ #state{warnings = OldWarnings} = OldState,
+ #state{warnings = NewWarnings} = NewState,
+ {NewWarnings -- OldWarnings, NewState#state{warnings = OldWarnings}}.
+
+state__add_warnings(Warns, #state{warnings = Warnings} = State) ->
+ State#state{warnings = Warns ++ Warnings}.
+
-spec state__set_curr_fun(curr_fun(), state()) -> state().
state__set_curr_fun(undefined, State) ->
diff --git a/lib/dialyzer/src/dialyzer_dep.erl b/lib/dialyzer/src/dialyzer_dep.erl
index 6678037bc0..273c05c54c 100644
--- a/lib/dialyzer/src/dialyzer_dep.erl
+++ b/lib/dialyzer/src/dialyzer_dep.erl
@@ -59,8 +59,14 @@
%% separately.
%%
--spec analyze(cerl:c_module()) ->
- {dict:dict(), ordsets:ordset('external' | label()), dict:dict(), dict:dict()}.
+-type dep_ordset() :: ordsets:ordset(label() | 'external').
+
+-type deps() :: dict:dict(label() | 'external' | 'top', dep_ordset()).
+-type esc() :: dep_ordset().
+-type calls() :: dict:dict(label(), ordsets:ordset(label())).
+-type letrecs() :: dict:dict(label(), label()).
+
+-spec analyze(cerl:c_module()) -> {deps(), esc(), calls(), letrecs()}.
analyze(Tree) ->
%% io:format("Handling ~w\n", [cerl:atom_val(cerl:module_name(Tree))]),
@@ -79,22 +85,26 @@ traverse(Tree, Out, State, CurrentFun) ->
apply ->
Op = cerl:apply_op(Tree),
Args = cerl:apply_args(Tree),
- %% Op is always a variable and should not be marked as escaping
- %% based on its use.
case var =:= cerl:type(Op) of
- false -> erlang:error({apply_op_not_a_variable, cerl:type(Op)});
- true -> ok
- end,
- OpFuns = case map__lookup(cerl_trees:get_label(Op), Out) of
- none -> output(none);
- {value, OF} -> OF
- end,
- {ArgFuns, State2} = traverse_list(Args, Out, State, CurrentFun),
- State3 = state__add_esc(merge_outs(ArgFuns), State2),
- State4 = state__add_deps(CurrentFun, OpFuns, State3),
- State5 = state__store_callsite(cerl_trees:get_label(Tree),
- OpFuns, length(Args), State4),
- {output(set__singleton(external)), State5};
+ false ->
+ %% We have discovered an error here, but we ignore it and let
+ %% later passes handle it; we do not modify the dependencies.
+ %% erlang:error({apply_op_not_a_variable, cerl:type(Op)});
+ {output(none), State};
+ true ->
+ %% Op is a variable and should not be marked as escaping
+ %% based on its use.
+ OpFuns = case map__lookup(cerl_trees:get_label(Op), Out) of
+ none -> output(none);
+ {value, OF} -> OF
+ end,
+ {ArgFuns, State2} = traverse_list(Args, Out, State, CurrentFun),
+ State3 = state__add_esc(merge_outs(ArgFuns), State2),
+ State4 = state__add_deps(CurrentFun, OpFuns, State3),
+ State5 = state__store_callsite(cerl_trees:get_label(Tree),
+ OpFuns, length(Args), State4),
+ {output(set__singleton(external)), State5}
+ end;
binary ->
{output(none), State};
'case' ->
@@ -481,11 +491,11 @@ all_vars(Tree, AccIn) ->
-type local_set() :: 'none' | #set{}.
--record(state, {deps :: dict:dict(),
+-record(state, {deps :: deps(),
esc :: local_set(),
- call :: dict:dict(),
- arities :: dict:dict(),
- letrecs :: dict:dict()}).
+ calls :: calls(),
+ arities :: dict:dict(label() | 'top', arity()),
+ letrecs :: letrecs()}).
state__new(Tree) ->
Exports = set__from_list([X || X <- cerl:module_exports(Tree)]),
@@ -503,7 +513,7 @@ state__new(Tree) ->
%% init the escaping function labels to exported + called from on_load
InitEsc = set__from_list(OnLoadLs ++ ExpLs),
Arities = cerl_trees:fold(fun find_arities/2, dict:new(), Tree),
- #state{deps = map__new(), esc = InitEsc, call = map__new(),
+ #state{deps = map__new(), esc = InitEsc, calls = map__new(),
arities = Arities, letrecs = map__new()}.
find_arities(Tree, AccMap) ->
@@ -518,7 +528,7 @@ find_arities(Tree, AccMap) ->
state__add_deps(_From, #output{content = none}, State) ->
State;
-state__add_deps(From, #output{type = single, content=To},
+state__add_deps(From, #output{type = single, content = To},
#state{deps = Map} = State) ->
%% io:format("Adding deps from ~w to ~w\n", [From, set__to_ordsets(To)]),
State#state{deps = map__add(From, To, Map)}.
@@ -544,16 +554,16 @@ state__esc(#state{esc = Esc}) ->
state__store_callsite(_From, #output{content = none}, _CallArity, State) ->
State;
state__store_callsite(From, To, CallArity,
- #state{call = Calls, arities = Arities} = State) ->
+ #state{calls = Calls, arities = Arities} = State) ->
Filter = fun(external) -> true;
(Fun) -> CallArity =:= dict:fetch(Fun, Arities)
end,
case filter_outs(To, Filter) of
#output{content = none} -> State;
- To1 -> State#state{call = map__store(From, To1, Calls)}
+ To1 -> State#state{calls = map__store(From, To1, Calls)}
end.
-state__calls(#state{call = Calls}) ->
+state__calls(#state{calls = Calls}) ->
Calls.
%%------------------------------------------------------------
diff --git a/lib/dialyzer/src/dialyzer_utils.erl b/lib/dialyzer/src/dialyzer_utils.erl
index d37701f03b..76a5cf3d0b 100644
--- a/lib/dialyzer/src/dialyzer_utils.erl
+++ b/lib/dialyzer/src/dialyzer_utils.erl
@@ -194,15 +194,18 @@ get_core_from_abstract_code(AbstrCode, Opts) ->
%%
%% ============================================================================
+-type type_table() :: erl_types:type_table().
+-type mod_records() :: dict:dict(module(), type_table()).
+
-spec get_record_and_type_info(abstract_code()) ->
- {'ok', dict:dict()} | {'error', string()}.
+ {'ok', type_table()} | {'error', string()}.
get_record_and_type_info(AbstractCode) ->
Module = get_module(AbstractCode),
get_record_and_type_info(AbstractCode, Module, dict:new()).
--spec get_record_and_type_info(abstract_code(), module(), dict:dict()) ->
- {'ok', dict:dict()} | {'error', string()}.
+-spec get_record_and_type_info(abstract_code(), module(), type_table()) ->
+ {'ok', type_table()} | {'error', string()}.
get_record_and_type_info(AbstractCode, Module, RecDict) ->
get_record_and_type_info(AbstractCode, Module, RecDict, "nofile").
@@ -299,92 +302,117 @@ get_record_fields([], _RecDict, Acc) ->
process_record_remote_types(CServer) ->
TempRecords = dialyzer_codeserver:get_temp_records(CServer),
ExpTypes = dialyzer_codeserver:get_exported_types(CServer),
- TempRecords1 = process_opaque_types0(TempRecords, ExpTypes),
+ Cache = erl_types:cache__new(),
+ {TempRecords1, Cache1} =
+ process_opaque_types0(TempRecords, ExpTypes, Cache),
+ %% A cache (not the field type cache) is used for speeding things up a bit.
+ VarTable = erl_types:var_table__new(),
ModuleFun =
- fun(Module, Record) ->
+ fun({Module, Record}, C0) ->
RecordFun =
- fun(Key, Value) ->
+ fun({Key, Value}, C2) ->
case Key of
{record, Name} ->
FieldFun =
- fun(Arity, Fields) ->
+ fun({Arity, Fields}, C4) ->
Site = {record, {Module, Name, Arity}},
- [{FieldName, Field,
- erl_types:t_from_form(Field,
- ExpTypes,
- Site,
- TempRecords1)}
- || {FieldName, Field, _} <- Fields]
+ {Fields1, C7} =
+ lists:mapfoldl(fun({FieldName, Field, _}, C5) ->
+ {FieldT, C6} =
+ erl_types:t_from_form
+ (Field, ExpTypes, Site,
+ TempRecords1, VarTable,
+ C5),
+ {{FieldName, Field, FieldT}, C6}
+ end, C4, Fields),
+ {{Arity, Fields1}, C7}
end,
{FileLine, Fields} = Value,
- {FileLine, orddict:map(FieldFun, Fields)};
- _Other -> Value
+ {FieldsList, C3} =
+ lists:mapfoldl(FieldFun, C2, orddict:to_list(Fields)),
+ {{Key, {FileLine, orddict:from_list(FieldsList)}}, C3};
+ _Other -> {{Key, Value}, C2}
end
end,
- dict:map(RecordFun, Record)
+ {RecordList, C1} =
+ lists:mapfoldl(RecordFun, C0, dict:to_list(Record)),
+ {{Module, dict:from_list(RecordList)}, C1}
end,
- NewRecords = dict:map(ModuleFun, TempRecords1),
- ok = check_record_fields(NewRecords, ExpTypes),
+ {NewRecordsList, C1} =
+ lists:mapfoldl(ModuleFun, Cache1, dict:to_list(TempRecords1)),
+ NewRecords = dict:from_list(NewRecordsList),
+ _C8 = check_record_fields(NewRecords, ExpTypes, C1),
dialyzer_codeserver:finalize_records(NewRecords, CServer).
%% erl_types:t_from_form() substitutes the declaration of opaque types
%% for the expanded type in some cases. To make sure the initial type,
%% any(), is not used, the expansion is done twice.
%% XXX: Recursive opaque types are not handled well.
-process_opaque_types0(TempRecords0, TempExpTypes) ->
- TempRecords1 = process_opaque_types(TempRecords0, TempExpTypes),
- process_opaque_types(TempRecords1, TempExpTypes).
+process_opaque_types0(TempRecords0, TempExpTypes, Cache) ->
+ {TempRecords1, NewCache} =
+ process_opaque_types(TempRecords0, TempExpTypes, Cache),
+ process_opaque_types(TempRecords1, TempExpTypes, NewCache).
-process_opaque_types(TempRecords, TempExpTypes) ->
+process_opaque_types(TempRecords, TempExpTypes, Cache) ->
+ VarTable = erl_types:var_table__new(),
ModuleFun =
- fun(Module, Record) ->
+ fun({Module, Record}, C0) ->
RecordFun =
- fun(Key, Value) ->
+ fun({Key, Value}, C2) ->
case Key of
{opaque, Name, NArgs} ->
{{_Module, _FileLine, Form, _ArgNames}=F, _Type} = Value,
Site = {type, {Module, Name, NArgs}},
- Type = erl_types:t_from_form(Form, TempExpTypes, Site,
- TempRecords),
- {F, Type};
- _Other -> Value
+ {Type, C3} =
+ erl_types:t_from_form(Form, TempExpTypes, Site,
+ TempRecords, VarTable, C2),
+ {{Key, {F, Type}}, C3};
+ _Other -> {{Key, Value}, C2}
end
end,
- dict:map(RecordFun, Record)
+ {RecordList, C1} =
+ lists:mapfoldl(RecordFun, C0, dict:to_list(Record)),
+ {{Module, dict:from_list(RecordList)}, C1}
+ %% dict:map(RecordFun, Record)
end,
- dict:map(ModuleFun, TempRecords).
+ {TempRecordList, NewCache} =
+ lists:mapfoldl(ModuleFun, Cache, dict:to_list(TempRecords)),
+ {dict:from_list(TempRecordList), NewCache}.
+ %% dict:map(ModuleFun, TempRecords).
-check_record_fields(Records, TempExpTypes) ->
+check_record_fields(Records, TempExpTypes, Cache) ->
+ VarTable = erl_types:var_table__new(),
CheckFun =
- fun({Module, Element}) ->
- CheckForm = fun(Form, Site) ->
- erl_types:t_check_record_fields(Form, TempExpTypes,
- Site, Records)
+ fun({Module, Element}, C0) ->
+ CheckForm = fun(Form, Site, C1) ->
+ erl_types:t_check_record_fields(Form, TempExpTypes,
+ Site, Records,
+ VarTable, C1)
end,
ElemFun =
- fun({Key, Value}) ->
+ fun({Key, Value}, C2) ->
case Key of
{record, Name} ->
FieldFun =
- fun({Arity, Fields}) ->
+ fun({Arity, Fields}, C3) ->
Site = {record, {Module, Name, Arity}},
- _ = [ok = CheckForm(Field, Site) ||
- {_, Field, _} <- Fields],
- ok
+ lists:foldl(fun({_, Field, _}, C4) ->
+ CheckForm(Field, Site, C4)
+ end, C3, Fields)
end,
{FileLine, Fields} = Value,
- Fun = fun() -> lists:foreach(FieldFun, Fields) end,
+ Fun = fun() -> lists:foldl(FieldFun, C2, Fields) end,
msg_with_position(Fun, FileLine);
{_OpaqueOrType, Name, NArgs} ->
Site = {type, {Module, Name, NArgs}},
{{_Module, FileLine, Form, _ArgNames}, _Type} = Value,
- Fun = fun() -> ok = CheckForm(Form, Site) end,
+ Fun = fun() -> CheckForm(Form, Site, C2) end,
msg_with_position(Fun, FileLine)
end
end,
- lists:foreach(ElemFun, dict:to_list(Element))
+ lists:foldl(ElemFun, C0, dict:to_list(Element))
end,
- lists:foreach(CheckFun, dict:to_list(Records)).
+ lists:foldl(CheckFun, Cache, dict:to_list(Records)).
msg_with_position(Fun, FileLine) ->
try Fun()
@@ -396,7 +424,7 @@ msg_with_position(Fun, FileLine) ->
throw({error, NewMsg})
end.
--spec merge_records(dict:dict(), dict:dict()) -> dict:dict().
+-spec merge_records(mod_records(), mod_records()) -> mod_records().
merge_records(NewRecords, OldRecords) ->
dict:merge(fun(_Key, NewVal, _OldVal) -> NewVal end, NewRecords, OldRecords).
@@ -410,7 +438,7 @@ merge_records(NewRecords, OldRecords) ->
-type spec_dict() :: dict:dict().
-type callback_dict() :: dict:dict().
--spec get_spec_info(module(), abstract_code(), dict:dict()) ->
+-spec get_spec_info(module(), abstract_code(), type_table()) ->
{'ok', spec_dict(), callback_dict()} | {'error', string()}.
get_spec_info(ModName, AbstractCode, RecordsDict) ->
@@ -676,7 +704,7 @@ format_errors([]) ->
format_sig(Type) ->
format_sig(Type, dict:new()).
--spec format_sig(erl_types:erl_type(), dict:dict()) -> string().
+-spec format_sig(erl_types:erl_type(), type_table()) -> string().
format_sig(Type, RecDict) ->
"fun(" ++ Sig = lists:flatten(erl_types:t_to_string(Type, RecDict)),
diff --git a/lib/dialyzer/test/Makefile b/lib/dialyzer/test/Makefile
index f43e04dd59..0d8fba438c 100644
--- a/lib/dialyzer/test/Makefile
+++ b/lib/dialyzer/test/Makefile
@@ -12,6 +12,7 @@ AUXILIARY_FILES=\
dialyzer_common.erl\
file_utils.erl\
dialyzer_SUITE.erl\
+ abstract_SUITE.erl\
plt_SUITE.erl
# ----------------------------------------------------
diff --git a/lib/dialyzer/test/abstract_SUITE.erl b/lib/dialyzer/test/abstract_SUITE.erl
new file mode 100644
index 0000000000..269db3e836
--- /dev/null
+++ b/lib/dialyzer/test/abstract_SUITE.erl
@@ -0,0 +1,102 @@
+%% This suite contains cases that cannot be written
+%% in Erlang itself and must be done via the abstract
+%% format.
+
+-module(abstract_SUITE).
+
+-include_lib("common_test/include/ct.hrl").
+-include("dialyzer_test_constants.hrl").
+
+-export([suite/0, all/0, init_per_suite/0, init_per_suite/1]).
+-export([generated_case/1]).
+
+suite() ->
+ [{timetrap, {minutes, 1}}].
+all() ->
+ [generated_case].
+
+init_per_suite() ->
+ [{timetrap, ?plt_timeout}].
+init_per_suite(Config) ->
+ OutDir = ?config(priv_dir, Config),
+ case dialyzer_common:check_plt(OutDir) of
+ fail -> {skip, "Plt creation/check failed."};
+ ok -> [{dialyzer_options, []}|Config]
+ end.
+
+generated_case(Config) when is_list(Config) ->
+ %% Equivalent to:
+ %%
+ %% -module(foo).
+ %% -export(bar).
+ %% bar() ->
+ %% Arg = sample,
+ %% case Arg of
+ %% #{} -> map;
+ %% _ -> Arg:fn()
+ %% end.
+ %%
+ %% Except the case statement and its clauses are marked as autogenerated.
+ [] =
+ test([{attribute,1,module,foo},
+ {attribute,2,export,[{bar,0}]},
+ {function,3,bar,0,
+ [{clause,3,[],[],
+ [{match,4,{var,4,'Arg'},{atom,4,sample}},
+ {'case',[{location,5},{generated,true}],{var,5,'Arg'},
+ [{clause,[{location,6},{generated,true}],[{map,6,[]}],[],
+ [{atom,6,map}]},
+ {clause,[{location,7},{generated,true}],[{var,7,'_'}],[],
+ [{call,7,{remote,7,{var,7,'Arg'},{atom,7,fn}},[]}]}]}]}]}],
+ Config, [], []),
+ %% With the first clause not auto-generated
+ [{warn_matching,{_,6},_}] =
+ test([{attribute,1,module,foo},
+ {attribute,2,export,[{bar,0}]},
+ {function,3,bar,0,
+ [{clause,3,[],[],
+ [{match,4,{var,4,'Arg'},{atom,4,sample}},
+ {'case',[{location,5},{generated,true}],{var,5,'Arg'},
+ [{clause,6,[{map,6,[]}],[],
+ [{atom,6,map}]},
+ {clause,[{location,7},{generated,true}],[{var,7,'_'}],[],
+ [{call,7,{remote,7,{var,7,'Arg'},{atom,7,fn}},[]}]}]}]}]}],
+ Config, [], []),
+ %% With Arg set to [] so neither clause matches
+ [{warn_return_no_exit,{_,3},_},
+ {warn_matching,{_,6},_},
+ {warn_failing_call,{_,7},_}] =
+ test([{attribute,1,module,foo},
+ {attribute,2,export,[{bar,0}]},
+ {function,3,bar,0,
+ [{clause,3,[],[],
+ [{match,4,{var,4,'Arg'},{nil,4}},
+ {'case',[{location,5},{generated,true}],{var,5,'Arg'},
+ [{clause,[{location,6},{generated,true}],[{map,6,[]}],[],
+ [{atom,6,map}]},
+ {clause,[{location,7},{generated,true}],[{var,7,'_'}],[],
+ [{call,7,{remote,7,{var,7,'Arg'},{atom,7,fn}},[]}]}]}]}]}],
+ Config, [], []),
+ ok.
+
+test(Prog, Config, COpts, DOpts) ->
+ {ok, BeamFile} = compile(Config, Prog, COpts),
+ run_dialyzer(Config, succ_typings, [BeamFile], DOpts).
+
+compile(Config, Prog, CompileOpts) ->
+ OutDir = ?config(priv_dir, Config),
+ Opts = [{outdir, OutDir}, debug_info, return_errors | CompileOpts],
+ {ok, Module, Source} = compile:forms(Prog, Opts),
+ BeamFile = filename:join([OutDir, lists:concat([Module, ".beam"])]),
+ ok = file:write_file(BeamFile, Source),
+ {ok, BeamFile}.
+
+run_dialyzer(Config, Analysis, Files, Opts) ->
+ OutDir = ?config(priv_dir, Config),
+ PltFilename = dialyzer_common:plt_file(OutDir),
+ dialyzer:run([{analysis_type, Analysis},
+ {files, Files},
+ {init_plt, PltFilename},
+ {check_plt, false},
+ {from, byte_code} |
+ Opts]).
diff --git a/lib/dialyzer/test/behaviour_SUITE_data/dialyzer_options b/lib/dialyzer/test/behaviour_SUITE_data/dialyzer_options
index 50991c9bc5..cb6a88786e 100644
--- a/lib/dialyzer/test/behaviour_SUITE_data/dialyzer_options
+++ b/lib/dialyzer/test/behaviour_SUITE_data/dialyzer_options
@@ -1 +1,2 @@
{dialyzer_options, []}.
+{time_limit, 2}.
diff --git a/lib/dialyzer/test/dialyzer_common.erl b/lib/dialyzer/test/dialyzer_common.erl
index d2b1026c06..48083a2731 100644
--- a/lib/dialyzer/test/dialyzer_common.erl
+++ b/lib/dialyzer/test/dialyzer_common.erl
@@ -7,7 +7,7 @@
-module(dialyzer_common).
--export([check_plt/1, check/4, create_all_suites/0, new_tests/2]).
+-export([check_plt/1, check/4, create_all_suites/0, new_tests/2, plt_file/1]).
-include_lib("kernel/include/file.hrl").
@@ -39,7 +39,7 @@
check_plt(OutDir) ->
io:format("Checking plt:"),
- PltFilename = filename:join(OutDir, ?plt_filename),
+ PltFilename = plt_file(OutDir),
case file:read_file_info(PltFilename) of
{ok, _} -> dialyzer_check_plt(PltFilename);
{error, _ } ->
@@ -63,6 +63,11 @@ check_plt(OutDir) ->
end
end.
+-spec plt_file(string()) -> string().
+
+plt_file(OutDir) ->
+ filename:join(OutDir, ?plt_filename).
+
dialyzer_check_plt(PltFilename) ->
try dialyzer:run([{analysis_type, plt_check},
{init_plt, PltFilename}]) of
@@ -119,7 +124,7 @@ build_plt(PltFilename) ->
'same' | {differ, [term()]}.
check(TestCase, Opts, Dir, OutDir) ->
- PltFilename = filename:join(OutDir, ?plt_filename),
+ PltFilename = plt_file(OutDir),
SrcDir = filename:join(Dir, ?input_files_directory),
ResDir = filename:join(Dir, ?result_files_directory),
Filename = filename:join(SrcDir, atom_to_list(TestCase)),
diff --git a/lib/dialyzer/test/map_SUITE_data/results/exact b/lib/dialyzer/test/map_SUITE_data/results/exact
index 374ada8869..ea00e61330 100644
--- a/lib/dialyzer/test/map_SUITE_data/results/exact
+++ b/lib/dialyzer/test/map_SUITE_data/results/exact
@@ -1,3 +1,3 @@
exact.erl:15: Function t2/1 has no local return
-exact.erl:19: The variable _ can never match since previous clauses completely covered the type #{'a':=_, ...}
+exact.erl:19: The variable _ can never match since previous clauses completely covered the type #{'a':=_, _=>_}
diff --git a/lib/dialyzer/test/map_SUITE_data/results/guard_update b/lib/dialyzer/test/map_SUITE_data/results/guard_update
index e4bc892195..98df23907f 100644
--- a/lib/dialyzer/test/map_SUITE_data/results/guard_update
+++ b/lib/dialyzer/test/map_SUITE_data/results/guard_update
@@ -1,5 +1,5 @@
guard_update.erl:5: Function t/0 has no local return
-guard_update.erl:6: The call guard_update:f(#{'a':=2}) will never return since it differs in the 1st argument from the success typing arguments: (#{'b':=_, ...})
+guard_update.erl:6: The call guard_update:f(#{'a':=2}) will never return since it differs in the 1st argument from the success typing arguments: (#{'b':=_, _=>_})
guard_update.erl:8: Clause guard cannot succeed. The variable M was matched against the type #{'a':=2}
guard_update.erl:8: Function f/1 has no local return
diff --git a/lib/dialyzer/test/map_SUITE_data/results/map_in_guard2 b/lib/dialyzer/test/map_SUITE_data/results/map_in_guard2
index 6bc0c010d7..f6fb98a863 100644
--- a/lib/dialyzer/test/map_SUITE_data/results/map_in_guard2
+++ b/lib/dialyzer/test/map_SUITE_data/results/map_in_guard2
@@ -1,7 +1,7 @@
map_in_guard2.erl:10: The call map_in_guard2:assoc_guard_clause('not_a_map') will never return since it differs in the 1st argument from the success typing arguments: (map())
map_in_guard2.erl:12: The pattern 'true' can never match the type 'false'
-map_in_guard2.erl:14: The call map_in_guard2:exact_guard_clause(#{}) will never return since it differs in the 1st argument from the success typing arguments: (#{'a':=_, ...})
+map_in_guard2.erl:14: The call map_in_guard2:exact_guard_clause(#{}) will never return since it differs in the 1st argument from the success typing arguments: (#{'a':=_, _=>_})
map_in_guard2.erl:17: Clause guard cannot succeed. The variable M was matched against the type 'not_a_map'
map_in_guard2.erl:20: Function assoc_update/1 has no local return
map_in_guard2.erl:20: Guard test is_map(M::'not_a_map') can never succeed
diff --git a/lib/dialyzer/test/map_SUITE_data/results/typeflow b/lib/dialyzer/test/map_SUITE_data/results/typeflow
index e3378a24bb..acfb7f551e 100644
--- a/lib/dialyzer/test/map_SUITE_data/results/typeflow
+++ b/lib/dialyzer/test/map_SUITE_data/results/typeflow
@@ -1,4 +1,4 @@
typeflow.erl:14: Function t2/1 has no local return
typeflow.erl:16: The call lists:sort(integer()) will never return since it differs in the 1st argument from the success typing arguments: ([any()])
-typeflow.erl:9: The variable _ can never match since previous clauses completely covered the type #{'a':=integer(), ...}
+typeflow.erl:9: The variable _ can never match since previous clauses completely covered the type #{'a':=integer(), _=>_}
diff --git a/lib/dialyzer/test/map_SUITE_data/results/typesig b/lib/dialyzer/test/map_SUITE_data/results/typesig
index 3049402860..fb2f851a7d 100644
--- a/lib/dialyzer/test/map_SUITE_data/results/typesig
+++ b/lib/dialyzer/test/map_SUITE_data/results/typesig
@@ -1,5 +1,5 @@
typesig.erl:5: Function t1/0 has no local return
-typesig.erl:5: The call typesig:test(#{'a':=1}) will never return since it differs in the 1st argument from the success typing arguments: (#{'a':={number()}, ...})
+typesig.erl:5: The call typesig:test(#{'a':=1}) will never return since it differs in the 1st argument from the success typing arguments: (#{'a':={number()}, _=>_})
typesig.erl:6: Function t2/0 has no local return
-typesig.erl:6: The call typesig:test(#{'a':={'b'}}) will never return since it differs in the 1st argument from the success typing arguments: (#{'a':={number()}, ...})
+typesig.erl:6: The call typesig:test(#{'a':={'b'}}) will never return since it differs in the 1st argument from the success typing arguments: (#{'a':={number()}, _=>_})
diff --git a/lib/dialyzer/test/map_SUITE_data/src/mand_remote_val/a.erl b/lib/dialyzer/test/map_SUITE_data/src/mand_remote_val/a.erl
new file mode 100644
index 0000000000..827984b20b
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/mand_remote_val/a.erl
@@ -0,0 +1,9 @@
+-module(a).
+-export([to_map/1, to_map/2]).
+-type t() :: #{type := b:t()}.
+
+-spec to_map(t()) -> map().
+to_map(Resource) -> to_map(Resource, #{}).
+
+-spec to_map(t(), map()) -> map().
+to_map(_, Map) when is_map(Map) -> #{}.
diff --git a/lib/dialyzer/test/map_SUITE_data/src/mand_remote_val/b.erl b/lib/dialyzer/test/map_SUITE_data/src/mand_remote_val/b.erl
new file mode 100644
index 0000000000..31f9bb6b3e
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/mand_remote_val/b.erl
@@ -0,0 +1,3 @@
+-module(b).
+-export_type([t/0]).
+-type t() :: binary().
diff --git a/lib/dialyzer/test/map_SUITE_data/src/opaque_bif.erl b/lib/dialyzer/test/map_SUITE_data/src/opaque_bif.erl
new file mode 100644
index 0000000000..40214a1887
--- /dev/null
+++ b/lib/dialyzer/test/map_SUITE_data/src/opaque_bif.erl
@@ -0,0 +1,13 @@
+-module(opaque_bif).
+-export([o1/1]).
+-export_type([opaque_any_map/0]).
+-opaque opaque_any_map() :: map().
+
+%% ERL-249: A bug with opaque arguments to maps:merge/2
+%% Reported by Felipe Ripoll on 6/9/2016
+-spec o1(opaque_any_map()) -> opaque_any_map().
+o1(Map) ->
+ maps:merge(o1_c(), Map).
+
+-spec o1_c() -> opaque_any_map().
+o1_c() -> #{}.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/dialyzer_options b/lib/dialyzer/test/opaque_SUITE_data/dialyzer_options
index 3ff26b87db..ffdf8270c8 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/dialyzer_options
+++ b/lib/dialyzer/test/opaque_SUITE_data/dialyzer_options
@@ -1 +1,2 @@
{dialyzer_options, [{warnings, [no_unused, no_return]}]}.
+{time_limit, 2}.
diff --git a/lib/dialyzer/test/small_SUITE_data/results/higher_order_discrepancy b/lib/dialyzer/test/small_SUITE_data/results/higher_order_discrepancy
index 7ce440a60d..11b9ecade6 100644
--- a/lib/dialyzer/test/small_SUITE_data/results/higher_order_discrepancy
+++ b/lib/dialyzer/test/small_SUITE_data/results/higher_order_discrepancy
@@ -1,4 +1,3 @@
-higher_order_discrepancy.erl:11: The call higher_order_discrepancy:g('foo') will never return since it differs in the 1st argument from the success typing arguments: ('bar')
-higher_order_discrepancy.erl:14: Function g/1 has no local return
-higher_order_discrepancy.erl:14: The pattern 'bar' can never match the type 'foo'
+higher_order_discrepancy.erl:19: Function g/1 has no local return
+higher_order_discrepancy.erl:19: The pattern 'bar' can never match the type 'foo'
diff --git a/lib/dialyzer/test/small_SUITE_data/results/maps1 b/lib/dialyzer/test/small_SUITE_data/results/maps1
index a178e96b20..f36f7f4926 100644
--- a/lib/dialyzer/test/small_SUITE_data/results/maps1
+++ b/lib/dialyzer/test/small_SUITE_data/results/maps1
@@ -1,4 +1,4 @@
maps1.erl:43: Function t3/0 has no local return
-maps1.erl:44: The call maps1:foo(#{'greger'=>3, #{'arne'=>'anka'}=>45},1) will never return since it differs in the 1st and 2nd argument from the success typing arguments: (#{'beta':=_, ...},'b')
+maps1.erl:44: The call maps1:foo(#{'greger'=>3, #{'arne'=>'anka'}=>45},1) will never return since it differs in the 1st and 2nd argument from the success typing arguments: (#{'beta':=_, _=>_},'b')
maps1.erl:52: The variable Mod can never match since previous clauses completely covered the type #{}
diff --git a/lib/dialyzer/test/small_SUITE_data/src/higher_order_discrepancy.erl b/lib/dialyzer/test/small_SUITE_data/src/higher_order_discrepancy.erl
index ff5ee6bac4..f9547d4929 100644
--- a/lib/dialyzer/test/small_SUITE_data/src/higher_order_discrepancy.erl
+++ b/lib/dialyzer/test/small_SUITE_data/src/higher_order_discrepancy.erl
@@ -1,3 +1,8 @@
+%% With the patch introduced to avoid false warnings in
+%% user_SUITE_data/src/wpc_hlines.erl we can unfortunately no longer precisely
+%% catch problems like this one... The refinement procedure is still enough to
+%% keep some of the details, nevertheless.
+
-module(higher_order_discrepancy).
-export([test/1]).
diff --git a/lib/dialyzer/test/small_SUITE_data/src/loopy.erl b/lib/dialyzer/test/small_SUITE_data/src/loopy.erl
new file mode 100644
index 0000000000..28125ec3d9
--- /dev/null
+++ b/lib/dialyzer/test/small_SUITE_data/src/loopy.erl
@@ -0,0 +1,17 @@
+%% ERL-157, OTP-13653.
+%% Would cause Dialyzer to go into an infinite loop.
+
+-module(loopy).
+
+-export([loop/1]).
+
+
+-spec loop(Args) -> ok when
+ Args :: [{Module, Args}],
+ Module :: module(),
+ Args :: any().
+loop([{Module, Args} | Rest]) ->
+ Module:init(Args),
+ loop(Rest);
+loop([]) ->
+ ok.
diff --git a/lib/dialyzer/test/unmatched_returns_SUITE_data/src/send.erl b/lib/dialyzer/test/unmatched_returns_SUITE_data/src/send.erl
new file mode 100644
index 0000000000..4d681b5cc7
--- /dev/null
+++ b/lib/dialyzer/test/unmatched_returns_SUITE_data/src/send.erl
@@ -0,0 +1,11 @@
+-module(send).
+
+-export([s/0]).
+
+s() ->
+ self() ! n(), % no warning
+ erlang:send(self(), n()), % no warning
+ ok.
+
+n() ->
+ {1, 1}.
diff --git a/lib/dialyzer/test/user_SUITE_data/results/wpc_hlines b/lib/dialyzer/test/user_SUITE_data/results/wpc_hlines
new file mode 100644
index 0000000000..d6e3f29ab9
--- /dev/null
+++ b/lib/dialyzer/test/user_SUITE_data/results/wpc_hlines
@@ -0,0 +1,3 @@
+
+wpc_hlines.erl:22: Function bad/1 has no local return
+wpc_hlines.erl:22: The pattern 'false' can never match the type 'true'
diff --git a/lib/dialyzer/test/user_SUITE_data/src/wpc_hlines.erl b/lib/dialyzer/test/user_SUITE_data/src/wpc_hlines.erl
new file mode 100644
index 0000000000..8c205a8247
--- /dev/null
+++ b/lib/dialyzer/test/user_SUITE_data/src/wpc_hlines.erl
@@ -0,0 +1,22 @@
+%% Bug reported by Dan Gudmundsson, test shrunk down by Magnus Lång.
+
+%% The problem is that dialyzer_dep generates edges from the fun
+%% application to both of the functions, and then during the warning pass
+%% dialyzer_dataflow:handle_apply_or_call generates warnings for any such
+%% edge that won't return.
+
+%% Since dialyzer_dep is currently supposed to overapproximate rather than
+%% underapproximate, the fix was to modify handle_apply_or_call to not generate
+%% warnings if some of the possible funs can succeed.
+
+-module(wpc_hlines).
+
+-export([do_export/0]).
+
+do_export() ->
+ {Proj, _} = % The culprit seems to be putting the funs in a tuple
+ {fun good/1, fun bad/1},
+ Proj(true).
+
+good(_) -> ok.
+bad(false) -> ok.
diff --git a/lib/dialyzer/vsn.mk b/lib/dialyzer/vsn.mk
index 077fe01e85..b9a28afdd9 100644
--- a/lib/dialyzer/vsn.mk
+++ b/lib/dialyzer/vsn.mk
@@ -1 +1 @@
-DIALYZER_VSN = 3.0
+DIALYZER_VSN = 3.0.1
diff --git a/lib/diameter/doc/src/notes.xml b/lib/diameter/doc/src/notes.xml
index 5ae43661fc..b1be7bdcf7 100644
--- a/lib/diameter/doc/src/notes.xml
+++ b/lib/diameter/doc/src/notes.xml
@@ -45,14 +45,30 @@ first.</p>
<section><title>diameter 1.12</title>
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Ensure listening socket is closed at transport removal.</p>
+ <p>
+ Transport removal did not immediately close a
+ <c>diameter_tcp/sctp</c> listening socket, and a
+ subsequent peer connection caused it to remain open.</p>
+ <p>
+ Own Id: OTP-13611</p>
+ </item>
+ </list>
+ </section>
+
+
<section><title>Improvements and New Features</title>
<list>
<item>
<p>
- Add diameter:peer_info/1.</p>
+ Add <c>diameter:peer_info/1</c>.</p>
<p>
That retrieves information in the style of
- diameter:service_info/2, but for a single peer
+ <c>diameter:service_info/2</c>, but for a single peer
connection.</p>
<p>
Own Id: OTP-13508</p>
diff --git a/lib/diameter/src/Makefile b/lib/diameter/src/Makefile
index 7f61620fc1..6bf748a727 100644
--- a/lib/diameter/src/Makefile
+++ b/lib/diameter/src/Makefile
@@ -123,7 +123,7 @@ ERL_COMPILE_FLAGS += \
# erl/hrl from dictionary file.
gen/diameter_gen_%.erl gen/diameter_gen_%.hrl: dict/%.dia
$(dia_verbose) \
- ../bin/diameterc -o gen -i $(EBIN) $<
+ escript ../bin/diameterc -o gen -i $(EBIN) $<
opt: $(TARGET_FILES)
diff --git a/lib/diameter/src/base/diameter_lib.erl b/lib/diameter/src/base/diameter_lib.erl
index 43b0ca24ab..b835e87967 100644
--- a/lib/diameter/src/base/diameter_lib.erl
+++ b/lib/diameter/src/base/diameter_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -20,18 +20,17 @@
-module(diameter_lib).
-compile({no_auto_import, [now/0]}).
--compile({nowarn_deprecated_function, [{erlang, now, 0}]}).
-export([info_report/2,
error_report/2,
warning_report/2,
now/0,
+ timestamp/0,
timestamp/1,
now_diff/1,
micro_diff/1,
micro_diff/2,
time/1,
- seed/0,
eval/1,
eval_name/1,
get_stacktrace/0,
@@ -110,6 +109,16 @@ now() ->
erlang:monotonic_time().
%% ---------------------------------------------------------------------------
+%% # timestamp/0
+%% ---------------------------------------------------------------------------
+
+-spec timestamp()
+ -> erlang:timestamp().
+
+timestamp() ->
+ timestamp(now()).
+
+%% ---------------------------------------------------------------------------
%% # timestamp/1
%% ---------------------------------------------------------------------------
@@ -184,24 +193,6 @@ time(Micro) -> %% elapsed time
{H, M, S, Micro rem 1000000}.
%% ---------------------------------------------------------------------------
-%% # seed/0
-%% ---------------------------------------------------------------------------
-
--spec seed()
- -> {erlang:timestamp(), {integer(), integer(), integer()}}.
-
-%% Return an argument for random:seed/1.
-
-seed() ->
- T = now(),
- {timestamp(T), seed(T)}.
-
-%% seed/1
-
-seed(T) -> %% monotonic time
- {erlang:phash2(node()), T, erlang:unique_integer()}.
-
-%% ---------------------------------------------------------------------------
%% # eval/1
%%
%% Evaluate a function in various forms.
diff --git a/lib/diameter/src/base/diameter_session.erl b/lib/diameter/src/base/diameter_session.erl
index 53973649fd..d854bc36a5 100644
--- a/lib/diameter/src/base/diameter_session.erl
+++ b/lib/diameter/src/base/diameter_session.erl
@@ -158,10 +158,9 @@ session_id(Host) ->
%% ---------------------------------------------------------------------------
init() ->
- {Now, Seed} = diameter_lib:seed(),
- random:seed(Seed),
+ Now = diameter_lib:timestamp(),
Time = time32(Now),
- Seq = (?INT32 band (Time bsl 20)) bor (random:uniform(1 bsl 20) - 1),
+ Seq = (?INT32 band (Time bsl 20)) bor (rand:uniform(1 bsl 20) - 1),
ets:insert(diameter_sequence, [{origin_state_id, Time},
{session_base, Time bsl 32},
{sequence, Seq}]),
diff --git a/lib/diameter/src/base/diameter_watchdog.erl b/lib/diameter/src/base/diameter_watchdog.erl
index 3fd87b223e..2ba60a65fb 100644
--- a/lib/diameter/src/base/diameter_watchdog.erl
+++ b/lib/diameter/src/base/diameter_watchdog.erl
@@ -125,8 +125,6 @@ i({Ack, T, Pid, {RecvData,
= Svc}}) ->
monitor(process, Pid),
wait(Ack, Pid),
- {_, Seed} = diameter_lib:seed(),
- random:seed(Seed),
putr(restart, {T, Opts, Svc, SvcOpts}), %% save seeing it in trace
putr(dwr, dwr(Caps)), %%
{_,_} = Mask = proplists:get_value(sequence, SvcOpts),
@@ -565,7 +563,7 @@ tw(TwInit, Ms) ->
tw(T)
when is_integer(T), T >= 6000 ->
- T - 2000 + (random:uniform(4001) - 1); %% RFC3539 jitter of +/- 2 sec.
+ T - 2000 + (rand:uniform(4001) - 1); %% RFC3539 jitter of +/- 2 sec.
tw({M,F,A}) ->
apply(M,F,A).
diff --git a/lib/diameter/test/diameter_codec_test.erl b/lib/diameter/test/diameter_codec_test.erl
index 78308856ac..37c41a1761 100644
--- a/lib/diameter/test/diameter_codec_test.erl
+++ b/lib/diameter/test/diameter_codec_test.erl
@@ -230,13 +230,12 @@ v(Max, Ord, E)
when Ord =< Max ->
diameter_enum:to_list(E);
v(Max, Ord, E) ->
- random:seed(diameter_util:seed()),
v(Max, Ord, E, []).
v(0, _, _, Acc) ->
Acc;
v(N, Ord, E, Acc) ->
- v(N-1, Ord, E, [E(random:uniform(Ord)) | Acc]).
+ v(N-1, Ord, E, [E(rand:uniform(Ord)) | Acc]).
%% arity/3
@@ -518,15 +517,7 @@ random(M) ->
random(0,M).
random(Mn,Mx) ->
- seed(get({?MODULE, seed})),
- Mn + random:uniform(Mx - Mn + 1) - 1.
-
-seed(undefined) ->
- put({?MODULE, seed}, true),
- random:seed(diameter_util:seed());
-
-seed(true) ->
- ok.
+ Mn + rand:uniform(Mx - Mn + 1) - 1.
%% run/1
%%
diff --git a/lib/diameter/test/diameter_transport_SUITE.erl b/lib/diameter/test/diameter_transport_SUITE.erl
index f2884eacb4..c94f46b7a5 100644
--- a/lib/diameter/test/diameter_transport_SUITE.erl
+++ b/lib/diameter/test/diameter_transport_SUITE.erl
@@ -338,13 +338,12 @@ make_msg() ->
%% crypto:rand_bytes/1 isn't available on all platforms (since openssl
%% isn't) so roll our own.
rand_bytes(N) ->
- random:seed(diameter_util:seed()),
rand_bytes(N, <<>>).
rand_bytes(0, Bin) ->
Bin;
rand_bytes(N, Bin) ->
- Oct = random:uniform(256) - 1,
+ Oct = rand:uniform(256) - 1,
rand_bytes(N-1, <<Oct, Bin/binary>>).
%% ===========================================================================
diff --git a/lib/diameter/test/diameter_util.erl b/lib/diameter/test/diameter_util.erl
index f26f1e999a..cca28dd23c 100644
--- a/lib/diameter/test/diameter_util.erl
+++ b/lib/diameter/test/diameter_util.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -31,7 +31,6 @@
fold/3,
foldl/3,
scramble/1,
- seed/0,
unique_string/0,
have_sctp/0]).
@@ -178,23 +177,15 @@ scramble(L) ->
[[fun s/1, L]]).
s(L) ->
- random:seed(seed()),
s([], L).
s(Acc, []) ->
Acc;
s(Acc, L) ->
- {H, [T|Rest]} = lists:split(random:uniform(length(L)) - 1, L),
+ {H, [T|Rest]} = lists:split(rand:uniform(length(L)) - 1, L),
s([T|Acc], H ++ Rest).
%% ---------------------------------------------------------------------------
-%% seed/0
-
-seed() ->
- {_,T} = diameter_lib:seed(),
- T.
-
-%% ---------------------------------------------------------------------------
%% unique_string/0
unique_string() ->
@@ -204,13 +195,21 @@ unique_string() ->
%% have_sctp/0
have_sctp() ->
- case gen_sctp:open() of
- {ok, Sock} ->
- gen_sctp:close(Sock),
- true;
- {error, E} when E == eprotonosupport;
- E == esocktnosupport -> %% fail on any other reason
- false
+ case erlang:system_info(system_architecture) of
+ %% We do not support the sctp version present in solaris
+ %% version "sparc-sun-solaris2.10", that behaves differently
+ %% from later versions and linux
+ "sparc-sun-solaris2.10" ->
+ false;
+ _->
+ case gen_sctp:open() of
+ {ok, Sock} ->
+ gen_sctp:close(Sock),
+ true;
+ {error, E} when E == eprotonosupport;
+ E == esocktnosupport -> %% fail on any other reason
+ false
+ end
end.
%% ---------------------------------------------------------------------------
diff --git a/lib/edoc/priv/edoc.dtd b/lib/edoc/priv/edoc.dtd
index 4278a9e643..89058f5d85 100644
--- a/lib/edoc/priv/edoc.dtd
+++ b/lib/edoc/priv/edoc.dtd
@@ -103,7 +103,7 @@
<!ATTLIST type name CDATA #IMPLIED>
<!ELEMENT union (typevar | atom | integer | float | nil | list | tuple |
- fun | record | abstype)+>
+ fun | record | map | abstype)+>
<!ELEMENT typevar EMPTY>
<!ATTLIST typevar name CDATA #REQUIRED>
@@ -129,6 +129,10 @@
<!ELEMENT field (atom, type)>
+<!ELEMENT map (map_field)*>
+
+<!ELEMENT map_field (type, type)>
+
<!ELEMENT abstype (erlangName, type*)>
<!ATTLIST abstype
href CDATA #IMPLIED>
diff --git a/lib/edoc/src/edoc_extract.erl b/lib/edoc/src/edoc_extract.erl
index e7a4c36ca4..2d6cb04a6d 100644
--- a/lib/edoc/src/edoc_extract.erl
+++ b/lib/edoc/src/edoc_extract.erl
@@ -32,9 +32,9 @@
%% %% @headerfile "edoc.hrl" (disabled until it can be made private)
-include("edoc.hrl").
-%% @type filename() = file:filename().
-%% @type proplist() = proplists:property().
-%% @type syntaxTree() = erl_syntax:syntaxTree().
+%% @type filename() = //kernel/file:filename().
+%% @type proplist() = //stdlib/proplists:property().
+%% @type syntaxTree() = //syntax_tools/erl_syntax:syntaxTree().
%% @spec source(File::filename(), Env::edoc_env(), Options::proplist())
%% -> {ModuleName, edoc:edoc_module()}
@@ -639,11 +639,11 @@ file_macros(_Context, Env) ->
%%
%% The idea is to mimic how the @type tag works.
%% Using @type:
-%% @type t() = t1(). Some docs of t/0;
-%% Further docs of t/0.
+%%```@type t() = t1(). Some docs of t/0;
+%% Further docs of t/0.'''
%% The same thing using -type:
-%% -type t() :: t1(). % Some docs of t/0;
-%% Further docs of t/0.
+%%```-type t() :: t1(). % Some docs of t/0;
+%% Further docs of t/0.'''
find_type_docs(Forms0, Comments, Env, File) ->
Tree = erl_recomment:recomment_forms(Forms0, Comments),
Forms = preprocess_forms(Tree),
diff --git a/lib/edoc/src/edoc_layout.erl b/lib/edoc/src/edoc_layout.erl
index f723cd8373..ef57b7b084 100644
--- a/lib/edoc/src/edoc_layout.erl
+++ b/lib/edoc/src/edoc_layout.erl
@@ -898,8 +898,14 @@ t_map(Es) ->
Fs = get_elem(map_field, Es),
["#{"] ++ seq(fun t_map_field/1, Fs, ["}"]).
-t_map_field(#xmlElement{content = [K,V]}) ->
- t_utype_elem(K) ++ [" => "] ++ t_utype_elem(V).
+t_map_field(#xmlElement{content = [K,V]}=E) ->
+ KElem = t_utype_elem(K),
+ VElem = t_utype_elem(V),
+ AS = case get_attrval(assoc_type, E) of
+ "assoc" -> " => ";
+ "exact" -> " := "
+ end,
+ KElem ++ [AS] ++ VElem.
t_record(E, Es) ->
Name = ["#"] ++ t_type(get_elem(atom, Es)),
@@ -1133,8 +1139,12 @@ ot_tuple(Es) ->
ot_map(Es) ->
{type,0,map,[ot_map_field(E) || E <- get_elem(map_field,Es)]}.
-ot_map_field(#xmlElement{content=[K,V]}) ->
- {type,0,map_field_assoc,ot_utype_elem(K), ot_utype_elem(V)}.
+ot_map_field(#xmlElement{content=[K,V]}=E) ->
+ A = case get_attrval(assoc_type, E) of
+ "assoc" -> map_field_assoc;
+ "exact" -> map_field_exact
+ end,
+ {type,0,A,[ot_utype_elem(K), ot_utype_elem(V)]}.
ot_fun(Es) ->
Range = ot_utype(get_elem(type, Es)),
diff --git a/lib/edoc/src/edoc_lib.erl b/lib/edoc/src/edoc_lib.erl
index dcc239f6b4..cc0a8d0b94 100644
--- a/lib/edoc/src/edoc_lib.erl
+++ b/lib/edoc/src/edoc_lib.erl
@@ -935,7 +935,7 @@ get_doc_env(Opts) ->
%% Modules = [atom()]
%% proplist() = [term()]
%%
-%% @type proplist() = proplists:property().
+%% @type proplist() = //stdlib/proplists:property().
%% @type edoc_env(). Environment information needed by EDoc for
%% generating references. The data representation is not documented.
%%
diff --git a/lib/edoc/src/edoc_parser.yrl b/lib/edoc/src/edoc_parser.yrl
index 835e7ccaa6..68a3439f10 100644
--- a/lib/edoc/src/edoc_parser.yrl
+++ b/lib/edoc/src/edoc_parser.yrl
@@ -36,8 +36,8 @@ Terminals
atom float integer var an_var string start_spec start_typedef start_throws
start_ref
-'(' ')' ',' '.' '=>' '->' '{' '}' '[' ']' '|' '+' ':' '::' '=' '/' '//' '*'
-'#' 'where' '<<' '>>' '..' '...'.
+'(' ')' ',' '.' '=>' ':=' '->' '{' '}' '[' ']' '|' '+' ':' '::' '=' '/' '//'
+'*' '#' 'where' '<<' '>>' '..' '...'.
Rootsymbol start.
@@ -76,7 +76,12 @@ utype_map_fields -> '$empty' : [].
utype_map_fields -> utype_map_field : ['$1'].
utype_map_fields -> utype_map_fields ',' utype_map_field : ['$3' | '$1'].
-utype_map_field -> utype '=>' utype : #t_map_field{ k_type = '$1', v_type = '$3'}.
+utype_map_field -> utype '=>' utype : #t_map_field{assoc_type = assoc,
+ k_type = '$1',
+ v_type = '$3'}.
+utype_map_field -> utype ':=' utype : #t_map_field{assoc_type = exact,
+ k_type = '$1',
+ v_type = '$3'}.
utype_tuple -> '{' utypes '}' : lists:reverse('$2').
diff --git a/lib/edoc/src/edoc_run.erl b/lib/edoc/src/edoc_run.erl
index 9a569d0879..261a649c70 100644
--- a/lib/edoc/src/edoc_run.erl
+++ b/lib/edoc/src/edoc_run.erl
@@ -44,6 +44,8 @@
-import(edoc_report, [report/2, error/1]).
+-type args() :: [string()].
+
%% @spec application([string()]) -> none()
%%
@@ -58,6 +60,7 @@
%% automatically terminated when the call has completed, signalling
%% success or failure to the operating system.
+-spec application(args()) -> no_return().
application(Args) ->
F = fun () ->
case parse_args(Args) of
@@ -81,6 +84,7 @@ application(Args) ->
%% automatically terminated when the call has completed, signalling
%% success or failure to the operating system.
+-spec files(args()) -> no_return().
files(Args) ->
F = fun () ->
case parse_args(Args) of
@@ -93,6 +97,7 @@ files(Args) ->
run(F).
%% @hidden Not official yet
+-spec toc(args()) -> no_return().
toc(Args) ->
F = fun () ->
case parse_args(Args) of
@@ -126,6 +131,7 @@ toc(Args) ->
%% automatically terminated when the call has completed, signalling
%% success or failure to the operating system.
+-spec file(args()) -> no_return().
file(Args) ->
F = fun () ->
case parse_args(Args) of
@@ -137,8 +143,7 @@ file(Args) ->
end,
run(F).
--spec invalid_args(string(), list()) -> no_return().
-
+-spec invalid_args(string(), args()) -> no_return().
invalid_args(Where, Args) ->
report("invalid arguments to ~ts: ~w.", [Where, Args]),
shutdown_error().
@@ -169,10 +174,12 @@ wait_init() ->
%% When and if a function init:stop/1 becomes generally available, we
%% can use that instead of delay-and-pray when there is an error.
+-spec shutdown_ok() -> no_return().
shutdown_ok() ->
%% shut down emulator nicely, signalling "normal termination"
init:stop().
+-spec shutdown_error() -> no_return().
shutdown_error() ->
%% delay 1 second to allow I/O to finish
receive after 1000 -> ok end,
diff --git a/lib/edoc/src/edoc_scanner.erl b/lib/edoc/src/edoc_scanner.erl
index 36423d63f8..f1d5e1d4b9 100644
--- a/lib/edoc/src/edoc_scanner.erl
+++ b/lib/edoc/src/edoc_scanner.erl
@@ -146,6 +146,8 @@ scan1([$>,$>|Cs], Toks, Pos) ->
scan1(Cs, [{'>>',Pos}|Toks], Pos);
scan1([$-,$>|Cs], Toks, Pos) ->
scan1(Cs, [{'->',Pos}|Toks], Pos);
+scan1([$:,$=|Cs], Toks, Pos) ->
+ scan1(Cs, [{':=',Pos}|Toks], Pos);
scan1([$:,$:|Cs], Toks, Pos) ->
scan1(Cs, [{'::',Pos}|Toks], Pos);
scan1([$/,$/|Cs], Toks, Pos) ->
diff --git a/lib/edoc/src/edoc_specs.erl b/lib/edoc/src/edoc_specs.erl
index faee8adf7b..c15dfd328f 100644
--- a/lib/edoc/src/edoc_specs.erl
+++ b/lib/edoc/src/edoc_specs.erl
@@ -369,11 +369,11 @@ d2e({type,_,map,any}, _Prec) ->
d2e({type,_,map,Es}, _Prec) ->
#t_map{types = d2e(Es) };
d2e({type,_,map_field_assoc,[K,V]}, Prec) ->
- T = #t_map_field{k_type = d2e(K), v_type=d2e(V) },
+ T = #t_map_field{assoc_type = assoc, k_type = d2e(K), v_type=d2e(V) },
{P,_R} = erl_parse:type_preop_prec('#'),
maybe_paren(P, Prec, T);
-d2e({type,_,map_field_exact,K,V}, Prec) ->
- T = #t_map_field{k_type = d2e(K), v_type=d2e(V) },
+d2e({type,_,map_field_exact,[K,V]}, Prec) ->
+ T = #t_map_field{assoc_type = exact, k_type = d2e(K), v_type=d2e(V) },
{P,_R} = erl_parse:type_preop_prec('#'),
maybe_paren(P, Prec, T);
d2e({type,_,tuple,Ts0}, _Prec) ->
diff --git a/lib/edoc/src/edoc_tags.erl b/lib/edoc/src/edoc_tags.erl
index 9e2e41e902..93f423b906 100644
--- a/lib/edoc/src/edoc_tags.erl
+++ b/lib/edoc/src/edoc_tags.erl
@@ -213,8 +213,10 @@ filter_tags([#tag{name = N, line = L} = T | Ts], Tags, Where, Ts1) ->
true ->
filter_tags(Ts, Tags, Where, [T | Ts1]);
false ->
- [warning(L, Where, "tag @~s not recognized.", [N]) ||
- Where =/= no],
+ case Where of
+ no -> ok;
+ _ -> warning(L, Where, "tag @~s not recognized.", [N])
+ end,
filter_tags(Ts, Tags, Where, Ts1)
end;
filter_tags([], _, _, Ts) ->
@@ -451,7 +453,7 @@ check_type(#tag{line = L, data = Data}, P0, Ls, Ts) ->
check_type(#t_def{type = Type}, P, Ls, Ts) ->
check_type(Type, P, Ls, Ts);
check_type(#t_type{name = Name, args = Args}, P, Ls, Ts) ->
- _ = check_used_type(Name, Args, P, Ls),
+ check_used_type(Name, Args, P, Ls),
check_types3(Args++Ts, P, Ls);
check_type(#t_var{}, P, Ls, Ts) ->
check_types3(Ts, P, Ls);
@@ -503,7 +505,8 @@ check_used_type(#t_name{name = N, module = Mod}=Name, Args, P, LocalTypes) ->
false ->
#parms{warn = W, line = L, file = File} = P,
%% true = ets:insert(DT, TypeName),
- [type_warning(L, File, "missing type", N, NArgs) || W]
+ _ = [type_warning(L, File, "missing type", N, NArgs) || W],
+ ok
end.
type_warning(Line, File, S, N, NArgs) ->
diff --git a/lib/edoc/src/edoc_types.erl b/lib/edoc/src/edoc_types.erl
index 65fba61a72..5bb68e79fb 100644
--- a/lib/edoc/src/edoc_types.erl
+++ b/lib/edoc/src/edoc_types.erl
@@ -89,8 +89,8 @@ to_xml(#t_fun{args = As, range = T}, Env) ->
wrap_utype(T, Env)]};
to_xml(#t_map{ types = Ts}, Env) ->
{map, map(fun to_xml/2, Ts, Env)};
-to_xml(#t_map_field{ k_type=K, v_type=V}, Env) ->
- {map_field, [wrap_utype(K,Env), wrap_utype(V, Env)]};
+to_xml(#t_map_field{assoc_type = AT, k_type=K, v_type=V}, Env) ->
+ {map_field, [{assoc_type, AT}], [wrap_utype(K,Env), wrap_utype(V, Env)]};
to_xml(#t_tuple{types = Ts}, Env) ->
{tuple, map(fun wrap_utype/2, Ts, Env)};
to_xml(#t_list{type = T}, Env) ->
diff --git a/lib/edoc/src/edoc_types.hrl b/lib/edoc/src/edoc_types.hrl
index 7fec10d936..3e5e91484f 100644
--- a/lib/edoc/src/edoc_types.hrl
+++ b/lib/edoc/src/edoc_types.hrl
@@ -157,5 +157,5 @@
-record(t_paren, {a=[], type}). % parentheses
-record(t_map, {a=[], types=[]}).
--record(t_map_field, {a=[], k_type, v_type}).
+-record(t_map_field, {a=[], assoc_type, k_type, v_type}).
diff --git a/lib/eldap/doc/src/notes.xml b/lib/eldap/doc/src/notes.xml
index ff2ed89829..7aad745f67 100644
--- a/lib/eldap/doc/src/notes.xml
+++ b/lib/eldap/doc/src/notes.xml
@@ -33,13 +33,31 @@
<section><title>Eldap 1.2.2</title>
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ If the underlying tcp connection is closed and an LDAP
+ operation returned tcp_error, the client applications
+ tend to close the ldap handle with eldap:close. This will
+ cause a <c>{nocatch, {gen_tcp_error, ...}}</c> exception.</p>
+ <p>
+ Such errors are now ignored during close, because the
+ socket will be closed anyway.</p>
+ <p>
+ Own Id: OTP-13590 Aux Id: PR-1048 </p>
+ </item>
+ </list>
+ </section>
+
+
<section><title>Improvements and New Features</title>
<list>
<item>
<p>
- Internal changes</p>
+ Modernize test suites</p>
<p>
- Own Id: OTP-13551</p>
+ Own Id: OTP-13566</p>
</item>
</list>
</section>
diff --git a/lib/eldap/src/eldap.erl b/lib/eldap/src/eldap.erl
index dc236f8a44..625309271b 100644
--- a/lib/eldap/src/eldap.erl
+++ b/lib/eldap/src/eldap.erl
@@ -564,7 +564,12 @@ loop(Cpid, Data) ->
?MODULE:loop(Cpid, NewData);
{_From, close} ->
- {no_reply,_NewData} = do_unbind(Data),
+ % Ignore tcp error if connection is already closed.
+ try do_unbind(Data) of
+ {no_reply,_NewData} -> ok
+ catch
+ throw:{gen_tcp_error, _TcpErr} -> ok
+ end,
unlink(Cpid),
exit(closed);
diff --git a/lib/eldap/test/eldap_basic_SUITE.erl b/lib/eldap/test/eldap_basic_SUITE.erl
index 9a23f74e22..ac3447cfe6 100644
--- a/lib/eldap/test/eldap_basic_SUITE.erl
+++ b/lib/eldap/test/eldap_basic_SUITE.erl
@@ -28,12 +28,11 @@
-include_lib("eldap/ebin/ELDAPv3.hrl").
--define(TIMEOUT, 120000). % 2 min
-
-
%% Control to delete a referral object:
-define(manageDsaIT, {control,"2.16.840.1.113730.3.4.2",false,asn1_NOVALUE}).
+suite() ->
+ [{timetrap,{seconds,360}}].
all() ->
[app,
@@ -94,7 +93,8 @@ connection_tests() ->
client_side_start_tls_timeout,
client_side_bind_timeout,
client_side_add_timeout,
- client_side_search_timeout
+ client_side_search_timeout,
+ close_after_tcp_error
].
@@ -123,7 +123,7 @@ end_per_suite(_Config) ->
init_per_group(return_values, Config) ->
- case ?config(ldap_server,Config) of
+ case proplists:get_value(ldap_server,Config) of
undefined ->
{skip, "LDAP server not availble"};
{Host,Port} ->
@@ -131,7 +131,7 @@ init_per_group(return_values, Config) ->
Config
end;
init_per_group(plain_api, Config0) ->
- case ?config(ldap_server,Config0) of
+ case proplists:get_value(ldap_server,Config0) of
undefined ->
{skip, "LDAP server not availble"};
Server = {Host,Port} ->
@@ -139,7 +139,7 @@ init_per_group(plain_api, Config0) ->
initialize_db([{server,Server}, {ssl_flag,false}, {start_tls,false} | Config0])
end;
init_per_group(ssl_api, Config0) ->
- case ?config(ldaps_server,Config0) of
+ case proplists:get_value(ldaps_server,Config0) of
undefined ->
{skip, "LDAPS server not availble"};
Server = {Host,Port} ->
@@ -147,7 +147,7 @@ init_per_group(ssl_api, Config0) ->
initialize_db([{server,Server}, {ssl_flag,true}, {start_tls,false} | Config0])
end;
init_per_group(start_tls_api, Config0) ->
- case {?config(ldap_server,Config0), ?config(ssl_available,Config0)} of
+ case {proplists:get_value(ldap_server,Config0), proplists:get_value(ssl_available,Config0)} of
{undefined,true} ->
{skip, "LDAP server not availble"};
{_,false} ->
@@ -186,18 +186,18 @@ end_per_group(_Group, Config) -> Config.
init_per_testcase(ssl_connection, Config) ->
- case ?config(ssl_available,Config) of
+ case proplists:get_value(ssl_available,Config) of
true ->
SSL_Port = 9999,
- CertFile = filename:join(?config(data_dir,Config), "certs/server/cert.pem"),
- KeyFile = filename:join(?config(data_dir,Config), "certs/server/key.pem"),
+ CertFile = filename:join(proplists:get_value(data_dir,Config), "certs/server/cert.pem"),
+ KeyFile = filename:join(proplists:get_value(data_dir,Config), "certs/server/key.pem"),
Parent = self(),
Listener = spawn_link(
fun() ->
case ssl:listen(SSL_Port, [{certfile, CertFile},
{keyfile, KeyFile}
- | ?config(tcp_listen_opts,Config)
+ | proplists:get_value(tcp_listen_opts,Config)
]) of
{ok,SSL_LSock} ->
Parent ! {ok,self()},
@@ -244,7 +244,7 @@ init_per_testcase(TC, Config) ->
end;
false ->
- case proplists:get_value(name,?config(tc_group_properties, Config)) of
+ case proplists:get_value(name,proplists:get_value(tc_group_properties, Config)) of
api_not_bound ->
{ok,H} = open(Config),
[{handle,H} | Config];
@@ -281,7 +281,7 @@ appup(Config) when is_list(Config) ->
%%%----------------------------------------------------------------
open_ret_val_success(Config) ->
- {Host,Port} = ?config(ldap_server,Config),
+ {Host,Port} = proplists:get_value(ldap_server,Config),
{ok,H} = eldap:open([Host], [{port,Port}]),
catch eldap:close(H).
@@ -291,7 +291,7 @@ open_ret_val_error(_Config) ->
%%%----------------------------------------------------------------
close_ret_val(Config) ->
- {Host,Port} = ?config(ldap_server,Config),
+ {Host,Port} = proplists:get_value(ldap_server,Config),
{ok,H} = eldap:open([Host], [{port,Port}]),
ok = eldap:close(H).
@@ -312,6 +312,29 @@ tcp_connection(Config) ->
end.
%%%----------------------------------------------------------------
+close_after_tcp_error(Config) ->
+ Host = proplists:get_value(listen_host, Config),
+ Port = proplists:get_value(listen_port, Config),
+ Opts = proplists:get_value(tcp_connect_opts, Config),
+ T = 1000,
+ case eldap:open([Host], [{timeout,T},{port,Port}|Opts]) of
+ {ok,H} ->
+ Sl = proplists:get_value(listen_socket, Config),
+ gen_tcp:close(Sl),
+ {error,{gen_tcp_error,closed}} = eldap:simple_bind(H, anon, anon),
+ ok = eldap:close(H),
+ wait_for_close(H);
+ Other -> ct:fail("eldap:open failed: ~p",[Other])
+ end.
+
+wait_for_close(H) ->
+ case erlang:is_process_alive(H) of
+ true -> timer:sleep(100),
+ wait_for_close(H);
+ false -> ok
+ end.
+
+%%%----------------------------------------------------------------
ssl_connection(Config) ->
Host = proplists:get_value(listen_host, Config),
Port = proplists:get_value(ssl_listen_port, Config),
@@ -411,37 +434,37 @@ tcp_connection_option(Config) ->
%%%----------------------------------------------------------------
elementary_search(Config) ->
{ok, #eldap_search_result{entries=[_]}} =
- eldap:search(?config(handle,Config),
- #eldap_search{base = ?config(eldap_path, Config),
+ eldap:search(proplists:get_value(handle,Config),
+ #eldap_search{base = proplists:get_value(eldap_path, Config),
filter= eldap:present("objectclass"),
scope = eldap:wholeSubtree()}).
%%%----------------------------------------------------------------
search_non_existant(Config) ->
{error, noSuchObject} =
- eldap:search(?config(handle,Config),
- #eldap_search{base = "cn=Bar," ++ ?config(eldap_path, Config),
+ eldap:search(proplists:get_value(handle,Config),
+ #eldap_search{base = "cn=Bar," ++ proplists:get_value(eldap_path, Config),
filter= eldap:present("objectclass"),
scope = eldap:wholeSubtree()}).
%%%----------------------------------------------------------------
add_when_not_bound(Config) ->
- {error, _} = eldap:add(?config(handle,Config),
- "cn=Jonas Jonsson," ++ ?config(eldap_path, Config),
+ {error, _} = eldap:add(proplists:get_value(handle,Config),
+ "cn=Jonas Jonsson," ++ proplists:get_value(eldap_path, Config),
[{"objectclass", ["person"]},
{"cn", ["Jonas Jonsson"]},
{"sn", ["Jonsson"]}]).
%%%----------------------------------------------------------------
bind(Config) ->
- ok = eldap:simple_bind(?config(handle,Config),
+ ok = eldap:simple_bind(proplists:get_value(handle,Config),
"cn=Manager,dc=ericsson,dc=se",
"hejsan").
%%%----------------------------------------------------------------
add_when_bound(Config) ->
- ok = eldap:add(?config(handle, Config),
- "cn=Jonas Jonsson," ++ ?config(eldap_path, Config),
+ ok = eldap:add(proplists:get_value(handle, Config),
+ "cn=Jonas Jonsson," ++ proplists:get_value(eldap_path, Config),
[{"objectclass", ["person"]},
{"cn", ["Jonas Jonsson"]},
{"sn", ["Jonsson"]}]).
@@ -449,16 +472,16 @@ add_when_bound(Config) ->
%%%----------------------------------------------------------------
add_already_exists(Config) ->
{error, entryAlreadyExists} =
- eldap:add(?config(handle, Config),
- "cn=Jonas Jonsson," ++ ?config(eldap_path, Config),
+ eldap:add(proplists:get_value(handle, Config),
+ "cn=Jonas Jonsson," ++ proplists:get_value(eldap_path, Config),
[{"objectclass", ["person"]},
{"cn", ["Jonas Jonsson"]},
{"sn", ["Jonsson"]}]).
%%%----------------------------------------------------------------
more_add(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
ok = eldap:add(H, "cn=Foo Bar," ++ BasePath,
[{"objectclass", ["person"]},
{"cn", ["Foo Bar"]},
@@ -470,8 +493,8 @@ more_add(Config) ->
%%%----------------------------------------------------------------
add_referral(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
{ok,{referral,["ldap://nowhere.example.com"++_]}} =
eldap:add(H, "cn=Foo Bar,dc=notHere," ++ BasePath,
[{"objectclass", ["person"]},
@@ -481,28 +504,28 @@ add_referral(Config) ->
%%%----------------------------------------------------------------
search_filter_equalityMatch(Config) ->
- BasePath = ?config(eldap_path, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
ExpectedDN = "cn=Jonas Jonsson," ++ BasePath,
{ok, #eldap_search_result{entries=[#eldap_entry{object_name=ExpectedDN}]}} =
- eldap:search(?config(handle, Config),
+ eldap:search(proplists:get_value(handle, Config),
#eldap_search{base = BasePath,
filter = eldap:equalityMatch("sn", "Jonsson"),
scope=eldap:singleLevel()}).
%%%----------------------------------------------------------------
search_filter_substring_any(Config) ->
- BasePath = ?config(eldap_path, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
ExpectedDN = "cn=Jonas Jonsson," ++ BasePath,
{ok, #eldap_search_result{entries=[#eldap_entry{object_name=ExpectedDN}]}} =
- eldap:search(?config(handle, Config),
+ eldap:search(proplists:get_value(handle, Config),
#eldap_search{base = BasePath,
filter = eldap:substrings("sn", [{any, "ss"}]),
scope=eldap:singleLevel()}).
%%%----------------------------------------------------------------
search_filter_initial(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
ExpectedDN = "cn=Foo Bar," ++ BasePath,
{ok, #eldap_search_result{entries=[#eldap_entry{object_name=ExpectedDN}]}} =
eldap:search(H,
@@ -512,8 +535,8 @@ search_filter_initial(Config) ->
%%%----------------------------------------------------------------
search_filter_final(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
ExpectedDN = "cn=Foo Bar," ++ BasePath,
{ok, #eldap_search_result{entries=[#eldap_entry{object_name=ExpectedDN}]}} =
eldap:search(H,
@@ -523,8 +546,8 @@ search_filter_final(Config) ->
%%%----------------------------------------------------------------
search_filter_and(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
ExpectedDN = "cn=Foo Bar," ++ BasePath,
{ok, #eldap_search_result{entries=[#eldap_entry{object_name=ExpectedDN}]}} =
eldap:search(H,
@@ -535,8 +558,8 @@ search_filter_and(Config) ->
%%%----------------------------------------------------------------
search_filter_or(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
ExpectedDNs = lists:sort(["cn=Foo Bar," ++ BasePath,
"ou=Team," ++ BasePath]),
{ok, #eldap_search_result{entries=Es}} =
@@ -549,8 +572,8 @@ search_filter_or(Config) ->
%%%----------------------------------------------------------------
search_filter_and_not(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
{ok, #eldap_search_result{entries=[]}} =
eldap:search(H,
#eldap_search{base = BasePath,
@@ -562,8 +585,8 @@ search_filter_and_not(Config) ->
%%%----------------------------------------------------------------
search_two_hits(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
DN1 = "cn=Santa Claus," ++ BasePath,
DN2 = "cn=Jultomten," ++ BasePath,
%% Add two objects:
@@ -594,8 +617,8 @@ search_two_hits(Config) ->
%%%----------------------------------------------------------------
search_referral(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
DN = "cn=Santa Claus,dc=notHere," ++ BasePath,
{ok,{referral,["ldap://nowhere.example.com"++_]}} =
eldap:search(H, #eldap_search{base = DN,
@@ -604,8 +627,8 @@ search_referral(Config) ->
%%%----------------------------------------------------------------
modify(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
%% The object to modify
DN = "cn=Foo Bar," ++ BasePath,
@@ -637,8 +660,8 @@ modify(Config) ->
%%%----------------------------------------------------------------
modify_referral(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
%% The object to modify
DN = "cn=Foo Bar,dc=notHere," ++ BasePath,
@@ -650,8 +673,8 @@ modify_referral(Config) ->
%%%----------------------------------------------------------------
delete(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
%% The element to play with:
DN = "cn=Jonas Jonsson," ++ BasePath,
@@ -668,16 +691,16 @@ delete(Config) ->
%%%----------------------------------------------------------------
delete_referral(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
%% The element to play with:
DN = "cn=Jonas Jonsson,dc=notHere," ++ BasePath,
{ok,{referral,["ldap://nowhere.example.com"++_]}} = eldap:delete(H, DN).
%%%----------------------------------------------------------------
modify_dn_delete_old(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
OrigCN = "Foo Bar",
OriginalRDN = "cn="++OrigCN,
DN = OriginalRDN ++ "," ++ BasePath,
@@ -722,8 +745,8 @@ modify_dn_delete_old(Config) ->
%%%----------------------------------------------------------------
modify_dn_keep_old(Config) ->
- H = ?config(handle, Config),
- BasePath = ?config(eldap_path, Config),
+ H = proplists:get_value(handle, Config),
+ BasePath = proplists:get_value(eldap_path, Config),
OriginalRDN = "cn=Foo Bar",
DN = OriginalRDN ++ "," ++ BasePath,
NewCN = "Niclas Andre",
@@ -862,7 +885,7 @@ initialize_db(Config) ->
clear_db(Config) ->
{ok,H} = open_bind(Config),
- Path = ?config(eldap_path, Config),
+ Path = proplists:get_value(eldap_path, Config),
delete_old_contents(H, Path),
eldap:close(H),
Config.
@@ -914,20 +937,20 @@ ok(MODULE, LINE, X) ->
cond_start_tls(H, Config) ->
- case ?config(start_tls,Config) of
+ case proplists:get_value(start_tls,Config) of
true -> start_tls(H,Config);
_ -> Config
end.
start_tls(H, Config) ->
- KeyFile = filename:join([?config(data_dir,Config),
+ KeyFile = filename:join([proplists:get_value(data_dir,Config),
"certs/client/key.pem"
]),
case eldap:start_tls(H, [{keyfile, KeyFile}]) of
ok ->
[{start_tls_success,true} | Config];
Error ->
- ct:log("Start_tls on ~p failed: ~p",[?config(url,Config) ,Error]),
+ ct:log("Start_tls on ~p failed: ~p",[proplists:get_value(url,Config) ,Error]),
ct:fail("start_tls failed")
end.
@@ -939,8 +962,8 @@ open_bind(Config) ->
{ok,H}.
open(Config) ->
- {Host,Port} = ?config(server,Config),
- SSLflag = ?config(ssl_flag,Config),
+ {Host,Port} = proplists:get_value(server,Config),
+ SSLflag = proplists:get_value(ssl_flag,Config),
{ok,H} = eldap:open([Host], [{port,Port},{ssl,SSLflag}]),
cond_start_tls(H, Config),
{ok,H}.
@@ -998,7 +1021,7 @@ init_ssl_certs_et_al(Config) ->
of
R when R==ok ; R=={error,{already_started,ssl}} ->
try make_certs:all("/dev/null",
- filename:join(?config(data_dir,Config), "certs"))
+ filename:join(proplists:get_value(data_dir,Config), "certs"))
of
{ok,_} -> true;
Other ->
diff --git a/lib/erl_docgen/doc/src/notes.xml b/lib/erl_docgen/doc/src/notes.xml
index e6245cc7d0..21dc617d55 100644
--- a/lib/erl_docgen/doc/src/notes.xml
+++ b/lib/erl_docgen/doc/src/notes.xml
@@ -31,15 +31,45 @@
</header>
<p>This document describes the changes made to the <em>erl_docgen</em> application.</p>
- <section><title>Erl_Docgen 0.4.3</title>
+ <section><title>Erl_Docgen 0.5</title>
- <section><title>Improvements and New Features</title>
+ <section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
+ <p> Generate HTML anchors for data types without
+ <c>name</c> attribute. </p>
+ <p>
+ Own Id: OTP-13600 Aux Id: Jira: ERL-141 </p>
+ </item>
+ <item>
+ <p> Updated make rules so it's possible to use the
+ xmllint target for checking the system
+ documentation.<br/> Removed usage of non defined DTD tag
+ (output) from the system documentation and corrected a
+ number of xml faults. </p> <p> Added support for quote
+ tag and a new level of header formatting in erl_docgen.
+ </p> <p> A fault when generating html for manual set
+ markers for section headings is corrected so now is the
+ title visible after hyperlink jump. </p>
+ <p>
+ Own Id: OTP-13638</p>
+ </item>
+ <item>
+ <p> Corrected the space handling for the seealso tag.
+ </p>
<p>
- Internal changes</p>
+ Own Id: OTP-13639</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p> Sort the modules function index alphabetically. </p>
<p>
- Own Id: OTP-13551</p>
+ Own Id: OTP-13668 Aux Id: PR-543 </p>
</item>
</list>
</section>
diff --git a/lib/erl_docgen/priv/bin/xref_mod_app.escript b/lib/erl_docgen/priv/bin/xref_mod_app.escript
index ac4278bf22..4a418fe144 100755
--- a/lib/erl_docgen/priv/bin/xref_mod_app.escript
+++ b/lib/erl_docgen/priv/bin/xref_mod_app.escript
@@ -84,7 +84,7 @@ preloaded(TopDir) ->
%% It's OK if too much data is generated as long as all applications
%% and all modules are mentioned.
appmods(D) ->
- ErlFiles = filelib:wildcard(filename:join([D,"src","*.erl"])),
+ ErlFiles = filelib:wildcard(filename:join([D,"src","**","*.erl"])),
AppV = filename:basename(D),
App = case string:rstr(AppV, "-") of
0 -> AppV;
diff --git a/lib/erl_docgen/priv/css/otp_doc.css b/lib/erl_docgen/priv/css/otp_doc.css
index 347782eb1e..219740a557 100644
--- a/lib/erl_docgen/priv/css/otp_doc.css
+++ b/lib/erl_docgen/priv/css/otp_doc.css
@@ -122,6 +122,11 @@ span.code { font-family: Courier, monospace; font-weight: normal }
font-size: 90%;
padding: 5px 10px;
}
+
+.quote {
+ font-style: italic
+}
+
.example {
background-color:#eeeeff;
padding: 0px 10px;
diff --git a/lib/erl_docgen/priv/dtd/common.dtd b/lib/erl_docgen/priv/dtd/common.dtd
index 961bcd3fc2..b1578ad9d4 100644
--- a/lib/erl_docgen/priv/dtd/common.dtd
+++ b/lib/erl_docgen/priv/dtd/common.dtd
@@ -12,7 +12,7 @@
limitations under the License.
The Initial Developer of the Original Code is Ericsson AB.
- Portions created by Ericsson are Copyright 1999-2007, Ericsson AB.
+ Portions created by Ericsson are Copyright 1999-2016, Ericsson AB.
All Rights Reserved.''
$Id$
@@ -24,7 +24,7 @@
<!ENTITY % block "p|pre|code|list|taglist|codeinclude|
erleval" >
-<!ENTITY % inline "#PCDATA|c|i|em|term|cite|br|path|seealso|
+<!ENTITY % inline "#PCDATA|c|i|em|strong|term|cite|br|path|seealso|
url|marker|anno" >
<!-- XXX -->
<!ELEMENT p (%inline;)* >
@@ -40,6 +40,7 @@
<!ELEMENT c (#PCDATA|anno)* >
<!ELEMENT i (#PCDATA|c|anno)* >
<!ELEMENT em (#PCDATA|c|anno)* >
+<!ELEMENT strong (#PCDATA|c|anno)* >
<!ELEMENT anno (#PCDATA) >
<!-- XXX -->
@@ -68,7 +69,7 @@
<!ATTLIST list type (ordered|bulleted) "bulleted" >
<!ELEMENT taglist (tag,item+)+ >
<!ELEMENT tag (#PCDATA|c|i|em|br|seealso|url|marker|anno)* >
-<!ELEMENT item (%inline;|%block;|warning|note|dont|do)* >
+<!ELEMENT item (%inline;|%block;|warning|note|dont|do|quote)* >
<!-- References -->
diff --git a/lib/erl_docgen/priv/dtd/erlref.dtd b/lib/erl_docgen/priv/dtd/erlref.dtd
index 835407520a..615b88b61a 100644
--- a/lib/erl_docgen/priv/dtd/erlref.dtd
+++ b/lib/erl_docgen/priv/dtd/erlref.dtd
@@ -29,7 +29,7 @@
<!-- `name' is used in common.refs.dtd and must therefore
be defined in each *ref. dtd -->
-<!ELEMENT name (#PCDATA) >
+<!ELEMENT name (#PCDATA|seealso)* >
<!ATTLIST name name CDATA #IMPLIED
arity CDATA #IMPLIED
clause_i CDATA #IMPLIED
diff --git a/lib/erl_docgen/priv/xsl/db_html.xsl b/lib/erl_docgen/priv/xsl/db_html.xsl
index a3c71fea15..edab8e1c7e 100644
--- a/lib/erl_docgen/priv/xsl/db_html.xsl
+++ b/lib/erl_docgen/priv/xsl/db_html.xsl
@@ -24,11 +24,76 @@
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
- extension-element-prefixes="exsl"
+ xmlns:func="http://exslt.org/functions"
+ xmlns:erl="http://erlang.org"
+ extension-element-prefixes="exsl func"
xmlns:fn="http://www.w3.org/2005/02/xpath-functions">
<xsl:include href="db_html_params.xsl"/>
+ <func:function name="erl:flip_first_char">
+ <xsl:param name="in"/>
+
+ <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
+ <xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'"/>
+
+ <xsl:variable name="first-char" select="substring($in, 1, 1)"/>
+
+ <xsl:variable name="result">
+ <xsl:choose>
+ <xsl:when test="contains($uppercase, $first-char)">
+ <xsl:value-of select="concat(translate($first-char, $uppercase, $lowercase), substring($in, 2))"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="concat(translate($first-char, $lowercase, $uppercase), substring($in, 2))"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <func:result select="$result"/>
+ </func:function>
+
+ <!-- Used from template menu.funcs to sort a module's functions for the lefthand index list,
+ from the module's .xml file. Returns a value on which to sort the entity in question
+ (a <name> element).
+
+ Some functions are listed with the name as an attribute, as in string.xml:
+ <name name="join" arity="2"/>
+
+ Others use the element value for the name, as in gen_server.xml:
+ <name>start_link(Module, Args, Options) -> Result</name>
+
+ Additionally, callbacks may be included, as in gen_server.xml:
+ <name>Module:handle_call(Request, From, State) -> Result</name>
+
+ So first, get the name from either the attribute or the element value.
+ Then, reverse the case of the first character. This is because xsltproc, used for processing,
+ orders uppercase before lowercase (even when the 'case-order="lower-first"' option
+ is given). But we want the Module callback functions listed after a module's regular
+ functions, as they are now. This doesn't affect the actual value used in the output, but
+ just the value used as a sort key. To then ensure that uppercase is indeed sorted before
+ lower, as we now want it to be, the 'case-order="upper-first"' option is used.
+
+ This processing only affect the lefthand index list- the body of the doc page is not
+ affected.
+ -->
+ <func:function name="erl:get_sort_field">
+ <xsl:param name="elem"/>
+
+ <xsl:variable name="base">
+ <xsl:choose>
+ <xsl:when test="string-length($elem/@name) > 0">
+ <xsl:value-of select="$elem/@name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$elem"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <func:result select="erl:flip_first_char($base)"/>
+ </func:function>
+
<!-- Start of Dialyzer type/spec tags.
See also the templates matching "name" and "seealso" as well as
the template "menu.funcs"
@@ -383,9 +448,7 @@
</xsl:choose>
</xsl:when>
<xsl:otherwise> <!-- <datatype> with <name> -->
- <span class="bold_code">
- <xsl:apply-templates/>
- </span>
+ <xsl:call-template name="name"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
@@ -787,39 +850,36 @@
<!-- Book -->
<xsl:template match="/book">
-
- <xsl:apply-templates name="parts"/>
- <xsl:apply-templates name="applications"/>
-
+ <xsl:apply-templates select="parts"/>
+ <xsl:apply-templates select="applications"/>
+ <xsl:apply-templates select="releasenotes"/>
</xsl:template>
<!-- Parts -->
<xsl:template match="parts">
- <xsl:apply-templates name="part"/>
+ <xsl:apply-templates select="part"/>
</xsl:template>
<!-- Applications -->
<xsl:template match="applications">
- <xsl:apply-templates name="application"/>
+ <xsl:apply-templates select="application"/>
</xsl:template>
-
<!-- Header -->
- <xsl:template match="header">
- </xsl:template>
-
- <!-- Section/Title -->
- <xsl:template match="section/title">
- </xsl:template>
-
- <xsl:template match="pagetext">
- </xsl:template>
+ <xsl:template match="header"/>
+
+ <!-- Section/Title -->
+ <xsl:template match="section/title"/>
+ <xsl:template match="pagetext"/>
- <!-- Chapter/Section -->
+ <!-- Chapter/Section, subsection level 1-->
<xsl:template match="chapter/section">
<xsl:param name="chapnum"/>
<h3>
+ <xsl:for-each select="marker">
+ <xsl:call-template name="marker-before-title"/>
+ </xsl:for-each>
<a name="{generate-id(title)}">
<xsl:value-of select="$chapnum"/>.<xsl:number/>&#160;
<xsl:value-of select="title"/>
@@ -831,11 +891,14 @@
</xsl:apply-templates>
</xsl:template>
- <!-- Subsections lvl 3 and ... -->
+ <!-- Subsections lvl 2 -->
<xsl:template match="section/section">
<xsl:param name="chapnum"/>
<xsl:param name="sectnum"/>
<h4>
+ <xsl:for-each select="marker">
+ <xsl:call-template name="marker-before-title"/>
+ </xsl:for-each>
<!-- xsl:value-of select="$partnum"/>.<xsl:value-of select="$chapnum"/>.<xsl:value-of select="$sectnum"/>.<xsl:number/ -->
<xsl:value-of select="title"/>
</h4>
@@ -844,10 +907,29 @@
</xsl:apply-templates>
</xsl:template>
+ <!-- Subsections lvl 3 and ... -->
+ <xsl:template match="section/section/section">
+ <xsl:param name="chapnum"/>
+ <xsl:param name="sectnum"/>
+ <h5>
+ <xsl:for-each select="marker">
+ <xsl:call-template name="marker-before-title"/>
+ </xsl:for-each>
+ <!-- xsl:value-of select="$partnum"/>.<xsl:value-of select="$chapnum"/>.<xsl:value-of select="$sectnum"/>.<xsl:number/ -->
+ <xsl:value-of select="title"/>
+ </h5>
+ <xsl:apply-templates>
+ <xsl:with-param name="chapnum" select="$chapnum"/>
+ </xsl:apply-templates>
+ </xsl:template>
+
<!-- *ref/Section -->
<xsl:template match="erlref/section|cref/section|comref/section|fileref/section|appref/section">
<xsl:param name="chapnum"/>
<h3>
+ <xsl:for-each select="marker">
+ <xsl:call-template name="marker-before-title"/>
+ </xsl:for-each>
<a name="{generate-id(title)}">
<xsl:value-of select="title"/>
</a>
@@ -875,7 +957,6 @@
<!-- Lists -->
-
<xsl:template match="list">
<xsl:param name="chapnum"/>
<ul>
@@ -983,6 +1064,18 @@
</div>
</xsl:template>
+ <!-- Quote -->
+ <xsl:template match="quote">
+ <xsl:param name="chapnum"/>
+ <div class="quote">
+ <p>
+ <xsl:apply-templates>
+ <xsl:with-param name="chapnum" select="$chapnum"/>
+ </xsl:apply-templates>
+ </p>
+ </div>
+ </xsl:template>
+
<!-- Paragraph -->
<xsl:template match="p">
<p>
@@ -991,10 +1084,6 @@
</xsl:template>
<!-- Inline elements -->
- <xsl:template match="b">
- <strong><xsl:apply-templates/></strong>
- </xsl:template>
-
<xsl:template match="i">
<i><xsl:apply-templates/></i>
</xsl:template>
@@ -1011,6 +1100,10 @@
<strong><xsl:apply-templates/></strong>
</xsl:template>
+ <xsl:template match="strong">
+ <strong><xsl:apply-templates/></strong>
+ </xsl:template>
+
<!-- Code -->
<xsl:template match="code">
<xsl:param name="chapnum"/>
@@ -1097,11 +1190,11 @@
<xsl:param name="chapnum"/>
<xsl:param name="fignum"/>
- <em>Figure
+ <p><em>Figure
<xsl:value-of select="$chapnum"/>.<xsl:value-of select="$fignum"/>:
&#160;
<xsl:apply-templates/>
- </em>
+ </em></p>
</xsl:template>
@@ -1288,9 +1381,7 @@
<xsl:with-param name="type">ref_man</xsl:with-param>
</xsl:call-template-->
-
<xsl:document href="{$outdir}/index.html" method="html" encoding="UTF-8" indent="yes" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN">
-
<xsl:call-template name="pagelayout"/>
</xsl:document>
</xsl:template>
@@ -1460,6 +1551,8 @@
<xsl:param name="cval"/>
<xsl:for-each select="$entries">
+ <!-- Sort on function name, so the index list in lefthand frame is ordered. -->
+ <xsl:sort select="erl:get_sort_field(.)" data-type="text" case-order="upper-first"/>
<xsl:choose>
<xsl:when test="ancestor::cref">
@@ -1855,6 +1948,7 @@
</xsl:choose>
</xsl:template>
+ <!-- Used both in <datatype> and in <func>! -->
<xsl:template name="name">
<xsl:variable name="tmpstring">
@@ -1911,7 +2005,14 @@
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
- <a name="{$fname}-{$arity}"><span class="bold_code"><xsl:value-of select="."/></span></a><br/>
+ <xsl:choose>
+ <xsl:when test="ancestor::datatype">
+ <a name="type-{$fname}"></a><span class="bold_code"><xsl:apply-templates/></span><br/>
+ </xsl:when>
+ <xsl:otherwise>
+ <a name="{$fname}-{$arity}"></a><span class="bold_code"><xsl:apply-templates/></span><br/>
+ </xsl:otherwise>
+ </xsl:choose>
</xsl:when>
<xsl:otherwise>
<span class="bold_code"><xsl:value-of select="."/></span>
@@ -1997,7 +2098,7 @@
</xsl:template>
<xsl:template match="seealso">
- <xsl:call-template name="seealso"/>
+ <xsl:call-template name="seealso"/>
</xsl:template>
<xsl:template name="seealso">
@@ -2079,16 +2180,27 @@
</xsl:template>
-
<xsl:template match="url">
<span class="bold_code"><a href="{@href}"><xsl:apply-templates/></a></span>
</xsl:template>
-
<xsl:template match="marker">
- <a name="{@id}"><xsl:apply-templates/></a>
+ <xsl:choose>
+ <xsl:when test="not(parent::section and following-sibling::title)">
+ <a name="{@id}"><xsl:apply-templates/></a>
+ </xsl:when>
+ </xsl:choose>
</xsl:template>
+ <xsl:template name="marker-before-title">
+ <xsl:choose>
+ <xsl:when test="self::marker and parent::section and following-sibling::title">
+ <a name="{@id}"><xsl:apply-templates/></a>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+
<xsl:template match="term">
<xsl:value-of select="@id"/>
<!-- xsl:choose>
@@ -2367,7 +2479,11 @@
<xsl:template name="nl">
<xsl:text>
-</xsl:text>
+ </xsl:text>
+ </xsl:template>
+
+ <xsl:template match="seealso//text()">
+ <xsl:value-of select="normalize-space(.)"/>
</xsl:template>
</xsl:stylesheet>
diff --git a/lib/erl_docgen/priv/xsl/db_man.xsl b/lib/erl_docgen/priv/xsl/db_man.xsl
index f75615c105..03b6b0691d 100644
--- a/lib/erl_docgen/priv/xsl/db_man.xsl
+++ b/lib/erl_docgen/priv/xsl/db_man.xsl
@@ -589,12 +589,6 @@
</xsl:template>
<!-- Inline elements -->
- <xsl:template match="b">
- <xsl:text>\fB</xsl:text>
- <xsl:apply-templates/>
- <xsl:text>\fR\&amp; </xsl:text>
- </xsl:template>
-
<xsl:template match="i">
<xsl:text>\fI</xsl:text>
<xsl:apply-templates/>
@@ -622,6 +616,12 @@
<xsl:text>\fI</xsl:text> <xsl:apply-templates/><xsl:text>\fR\&amp;</xsl:text>
</xsl:template>
+ <xsl:template match="strong">
+ <xsl:text>\fB</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>\fR\&amp; </xsl:text>
+ </xsl:template>
+
<xsl:template match="seealso">
<xsl:choose>
<xsl:when test="ancestor::head">
diff --git a/lib/erl_docgen/priv/xsl/db_pdf.xsl b/lib/erl_docgen/priv/xsl/db_pdf.xsl
index e5e624ac4c..99263847fb 100644
--- a/lib/erl_docgen/priv/xsl/db_pdf.xsl
+++ b/lib/erl_docgen/priv/xsl/db_pdf.xsl
@@ -1171,6 +1171,16 @@
</fo:block>
</xsl:template>
+ <!-- Quote -->
+ <xsl:template match="quote">
+ <xsl:param name="chapnum"/>
+ <fo:block font-style="italic">
+ <xsl:apply-templates>
+ <xsl:with-param name="chapnum" select="$chapnum"/>
+ </xsl:apply-templates>
+ </fo:block>
+ </xsl:template>
+
<!-- Paragraph -->
<xsl:template match="p">
<fo:block xsl:use-attribute-sets="p">
@@ -1180,14 +1190,8 @@
<!-- Inline elements -->
- <xsl:template match="b">
- <fo:inline font-weight="bold">
- <xsl:apply-templates/>
- </fo:inline>
- </xsl:template>
-
<xsl:template match="i">
- <fo:inline font-weight="italic">
+ <fo:inline font-style="italic">
<xsl:apply-templates/>
</fo:inline>
</xsl:template>
@@ -1203,7 +1207,13 @@
</xsl:template>
<xsl:template match="em">
- <fo:inline font-style="italic">
+ <fo:inline font-weight="bold">
+ <xsl:apply-templates/>
+ </fo:inline>
+ </xsl:template>
+
+ <xsl:template match="strong">
+ <fo:inline font-weight="bold">
<xsl:apply-templates/>
</fo:inline>
</xsl:template>
diff --git a/lib/erl_docgen/src/docgen_edoc_xml_cb.erl b/lib/erl_docgen/src/docgen_edoc_xml_cb.erl
index 0ac7985a48..4f3af1f767 100644
--- a/lib/erl_docgen/src/docgen_edoc_xml_cb.erl
+++ b/lib/erl_docgen/src/docgen_edoc_xml_cb.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -563,7 +563,14 @@ otp_xmlify_a_fileref(FileRef1, AppS) ->
true ->
case split(Marker0, "-") of
[Func,Arity] ->
- Func++"/"++Arity;
+ try list_to_integer(Arity) of
+ _ ->
+ Func++"/"++Arity
+ catch
+ _:_ ->
+ %% This is "type-"<a-type>.
+ Marker0
+ end;
_ ->
Marker0
end
@@ -831,19 +838,49 @@ local_types([]) -> [];
local_types(Es) ->
local_defs2(get_elem(localdef, Es)).
+-define(LOCAL_TYPES, edoc_local_defs).
+
local_defs2([]) -> [];
local_defs2(Es) ->
+ case collect_local_types(Es) of
+ [] -> local_defs3(Es);
+ LocalTypes ->
+ ?LOCAL_TYPES = ets:new(?LOCAL_TYPES, [named_table]),
+ true = ets:insert(?LOCAL_TYPES, LocalTypes),
+ try
+ local_defs3(Es)
+ after
+ ets:delete(?LOCAL_TYPES)
+ end
+ end.
+
+local_defs3(Es) ->
{type,[?NL | [{v, localdef2(E)} || E <- Es]]}.
+%% Does not work well for parametrized types.
+collect_local_types(Es) ->
+ lists:append([collect_local_type(E) || E <- Es]).
+
+collect_local_type(#xmlElement{content = Es}) ->
+ case get_elem(typevar, Es) of
+ [] ->
+ [{t_abstype(get_content(abstype, Es))}];
+ [_] ->
+ []
+ end.
+
%% Like localdef/1, but does not use label_anchor/2 -- we don't want any
%% markers or em tags in <v> tag, plain text only!
+%% When used stand-alone, EDoc generates links to local types. An ETS
+%% table holds local types, to avoid generating links to them.
localdef2(#xmlElement{content = Es}) ->
- case get_elem(typevar, Es) of
- [] ->
- t_utype(get_elem(type, Es));
- [V] ->
- t_var(V) ++ [" = "] ++ t_utype(get_elem(type, Es))
- end.
+ Var = case get_elem(typevar, Es) of
+ [] ->
+ [t_abstype(get_content(abstype, Es))];
+ [V] ->
+ t_var(V)
+ end,
+ Var ++ [" = "] ++ t_utype(get_elem(type, Es)).
type_name(#xmlElement{content = Es}) ->
t_name(get_elem(erlangName, get_content(typedef, Es))).
@@ -855,10 +892,9 @@ types(Ts) ->
typedecl(Name, #xmlElement{content = Es}) ->
TypedefEs = get_content(typedef, Es),
Id = "type-"++Name,
- [{tag, typedef(TypedefEs)},
+ [{tag, [{marker,[{id,Id}],[]}] ++ typedef(TypedefEs)},
?NL,
- {item, [{marker,[{id,Id}],[]} |
- local_defs(get_elem(localdef, TypedefEs)) ++ fulldesc(Es)]},
+ {item, local_defs(get_elem(localdef, TypedefEs)) ++ fulldesc(Es)},
?NL].
typedef(Es) ->
@@ -866,14 +902,14 @@ typedef(Es) ->
++ seq(fun t_utype_elem/1, get_content(argtypes, Es), [")"])),
case get_elem(type, Es) of
[] ->
- [{tt, Name}];
+ Name;
Type ->
- [{tt, Name ++ [" = "] ++ t_utype(Type)}]
+ Name ++ [" = "] ++ t_utype(Type)
end.
-local_defs([]) -> [];
+local_defs([]) -> [{p,[]}];
local_defs(Es) ->
- [?NL, {ul, [{li, [{tt, localdef(E)}]} || E <- Es]}].
+ [?NL, {ul, [{li, [{p, localdef(E)}]} || E <- Es]}].
localdef(E = #xmlElement{content = Es}) ->
Var = case get_elem(typevar, Es) of
@@ -917,6 +953,7 @@ seealso_module(Es) ->
Es1 ->
{section,[{title,["See also"]},{p,seq(fun see/1, Es1, [])}]}
end.
+
seealso_function(Es) ->
case get_elem(see, Es) of
[] -> [];
@@ -988,7 +1025,14 @@ t_name([E]) ->
end.
t_utype([E]) ->
- t_utype_elem(E).
+ flatten_type(t_utype_elem(E)).
+
+%% Make sure see also are top elements of lists.
+flatten_type(T) ->
+ [case is_integer(E) of
+ true -> [E];
+ false -> E
+ end || E <- lists:flatten(T)].
t_utype_elem(E=#xmlElement{content = Es}) ->
case get_attrval(name, E) of
@@ -1021,16 +1065,14 @@ t_type([#xmlElement{name = tuple, content = Es}]) ->
t_tuple(Es);
t_type([#xmlElement{name = 'fun', content = Es}]) ->
t_fun(Es);
-t_type([#xmlElement{name = abstype, content = Es}]) ->
- t_abstype(Es);
+t_type([E = #xmlElement{name = abstype, content = Es}]) ->
+ t_abstype(E, Es);
t_type([#xmlElement{name = union, content = Es}]) ->
t_union(Es);
t_type([#xmlElement{name = record, content = Es}]) ->
t_record(Es);
t_type([#xmlElement{name = map, content = Es}]) ->
- t_map(Es);
-t_type([#xmlElement{name = map_field, content = Es}]) ->
- t_map_field(Es).
+ t_map(Es).
t_var(E) ->
[get_attrval(name, E)].
@@ -1065,35 +1107,53 @@ t_fun(Es) ->
t_record([E|Es]) ->
["#", get_attrval(value, E), "{"++ seq(fun t_field/1, Es) ++"}"].
+
t_field(#xmlElement{name=field, content=[Atom,Type]}) ->
[get_attrval(value, Atom), "="] ++ t_utype_elem(Type).
t_map(Es) ->
- ["#{"] ++ seq(fun t_utype_elem/1, Es, ["}"]).
+ ["#{"] ++ seq(fun t_map_field/1, Es, ["}"]).
+
+t_map_field(E = #xmlElement{name = map_field, content = [K,V]}) ->
+ KElem = t_utype_elem(K),
+ VElem = t_utype_elem(V),
+ AS = case get_attrval(assoc_type, E) of
+ "assoc" -> " => ";
+ "exact" -> " := "
+ end,
+ [KElem ++ AS ++ VElem].
-t_map_field([K,V]) ->
- [t_utype_elem(K) ++ " => " ++ t_utype_elem(V)].
+t_abstype(E, Es) ->
+ see_type(E, t_abstype(Es)).
t_abstype(Es) ->
- case split_at_colon(t_name(get_elem(erlangName, Es)),[]) of
- {Mod,Type} ->
- [Type, "("] ++
- seq(fun t_utype_elem/1, get_elem(type, Es), [")"]) ++
- [" (see module ", Mod, ")"];
- Type ->
- [Type, "("] ++
- seq(fun t_utype_elem/1, get_elem(type, Es), [")"])
+ Name = t_name(get_elem(erlangName, Es)),
+ [Name, "("] ++ seq(fun t_utype_elem/1, get_elem(type, Es), [")"]).
+
+see_type(E, Es0) ->
+ case get_attrval(href, E) of
+ [] -> Es0;
+ Href0 ->
+ try
+ false = is_local_type(Es0),
+ %% Fails for parametrized types:
+ Text = #xmlText{value = lists:append(Es0)},
+ {Href, Es} = otp_xmlify_a_href(Href0, [Text]),
+ [{seealso, [{marker, Href}], Es}]
+ catch
+ _:_ ->
+ Es0
+ end
end.
-%% Split at one colon, but not at two (or more)
-split_at_colon([$:,$:|_]=Rest,Acc) ->
- lists:reverse(Acc)++Rest;
-split_at_colon([$:|Type],Acc) ->
- {lists:reverse(Acc),Type};
-split_at_colon([Char|Rest],Acc) ->
- split_at_colon(Rest,[Char|Acc]);
-split_at_colon([],Acc) ->
- lists:reverse(Acc).
+is_local_type(Es) ->
+ try
+ [_] = ets:lookup(?LOCAL_TYPES, Es),
+ true
+ catch
+ _:_->
+ false
+ end.
t_union(Es) ->
seq(fun t_utype_elem/1, Es, " | ", []).
diff --git a/lib/erl_docgen/src/docgen_otp_specs.erl b/lib/erl_docgen/src/docgen_otp_specs.erl
index e154323f07..6c41147e27 100644
--- a/lib/erl_docgen/src/docgen_otp_specs.erl
+++ b/lib/erl_docgen/src/docgen_otp_specs.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -389,10 +389,10 @@ t_type([#xmlElement{name = list, content = Es}]) ->
t_list(Es);
t_type([#xmlElement{name = nonempty_list, content = Es}]) ->
t_nonempty_list(Es);
-t_type([#xmlElement{name = tuple, content = Es}]) ->
- t_tuple(Es);
t_type([#xmlElement{name = map, content = Es}]) ->
t_map(Es);
+t_type([#xmlElement{name = tuple, content = Es}]) ->
+ t_tuple(Es);
t_type([#xmlElement{name = 'fun', content = Es}]) ->
["fun("] ++ t_fun(Es) ++ [")"];
t_type([E = #xmlElement{name = record, content = Es}]) ->
@@ -435,16 +435,22 @@ t_nonempty_list(Es) ->
t_tuple(Es) ->
["{"] ++ seq(fun t_utype_elem/1, Es, ["}"]).
+t_fun(Es) ->
+ ["("] ++ seq(fun t_utype_elem/1, get_content(argtypes, Es),
+ [") -> "] ++ t_utype(get_elem(type, Es))).
+
t_map(Es) ->
Fs = get_elem(map_field, Es),
["#{"] ++ seq(fun t_map_field/1, Fs, ["}"]).
-t_map_field(#xmlElement{content = [K,V]}) ->
- [t_utype_elem(K) ++ " => " ++ t_utype_elem(V)].
-
-t_fun(Es) ->
- ["("] ++ seq(fun t_utype_elem/1, get_content(argtypes, Es),
- [") -> "] ++ t_utype(get_elem(type, Es))).
+t_map_field(#xmlElement{content = [K,V]}=E) ->
+ KElem = t_utype_elem(K),
+ VElem = t_utype_elem(V),
+ AS = case get_attrval(assoc_type, E) of
+ "assoc" -> " => ";
+ "exact" -> " := "
+ end,
+ KElem ++ [AS] ++ VElem.
t_record(E, Es) ->
Name = ["#"] ++ t_type(get_elem(atom, Es)),
@@ -618,8 +624,12 @@ ot_tuple(Es) ->
ot_map(Es) ->
{type,0,map,[ot_map_field(E) || E <- get_elem(map_field,Es)]}.
-ot_map_field(#xmlElement{content=[K,V]}) ->
- {type,0,map_field_assoc,[ot_utype_elem(K),ot_utype_elem(V)]}.
+ot_map_field(#xmlElement{content=[K,V]}=E) ->
+ A = case get_attrval(assoc_type, E) of
+ "assoc" -> map_field_assoc;
+ "exact" -> map_field_exact
+ end,
+ {type,0,A,[ot_utype_elem(K), ot_utype_elem(V)]}.
ot_fun(Es) ->
Range = ot_utype(get_elem(type, Es)),
diff --git a/lib/erl_docgen/test/erl_docgen_SUITE.erl b/lib/erl_docgen/test/erl_docgen_SUITE.erl
index a202fefa9d..972fda5762 100644
--- a/lib/erl_docgen/test/erl_docgen_SUITE.erl
+++ b/lib/erl_docgen/test/erl_docgen_SUITE.erl
@@ -40,12 +40,10 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
-app() ->
- [{doc, "Test that the erl_docgen app file is ok"}].
+%% Test that the erl_docgen app file is ok
app(Config) when is_list(Config) ->
- ok = ?t:app_test(erl_docgen).
+ ok = test_server:app_test(erl_docgen).
-appup() ->
- [{doc, "Test that the erl_docgen appup file is ok"}].
+%% Test that the erl_docgen appup file is ok
appup(Config) when is_list(Config) ->
- ok = ?t:appup_test(erl_docgen).
+ ok = test_server:appup_test(erl_docgen).
diff --git a/lib/erl_docgen/vsn.mk b/lib/erl_docgen/vsn.mk
index 62e6d034ad..98d1c3f7be 100644
--- a/lib/erl_docgen/vsn.mk
+++ b/lib/erl_docgen/vsn.mk
@@ -1 +1 @@
-ERL_DOCGEN_VSN = 0.4.3
+ERL_DOCGEN_VSN = 0.5
diff --git a/lib/erl_interface/configure.in b/lib/erl_interface/configure.in
index 9e52a2adcf..0a8fbf513c 100644
--- a/lib/erl_interface/configure.in
+++ b/lib/erl_interface/configure.in
@@ -100,7 +100,9 @@ AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(void *)
AC_CHECK_SIZEOF(long long)
-if test $ac_cv_sizeof_void_p = 8; then
+dnl We set EI_64BIT mode when long is 8 bytes, this makes things
+dnl work on windows and unix correctly
+if test $ac_cv_sizeof_long = 8; then
CFLAGS="$CFLAGS -DEI_64BIT"
fi
diff --git a/lib/erl_interface/doc/src/notes.xml b/lib/erl_interface/doc/src/notes.xml
index fb7474435c..a69c5aac11 100644
--- a/lib/erl_interface/doc/src/notes.xml
+++ b/lib/erl_interface/doc/src/notes.xml
@@ -33,6 +33,28 @@
<section><title>Erl_Interface 3.9</title>
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix decoding of LLONG_MIN in erl_decode</p>
+ <p>
+ Own Id: OTP-13666 Aux Id: ERL-158 </p>
+ </item>
+ <item>
+ <p>
+ On windows <c>ei_decode_ulong</c> and
+ <c>ei_decode_long</c> now correctly returns an error when
+ trying to decode a number that does not fit in a long.
+ Fixed a bug on windows where enabling ei tracing would
+ cause a segmentation fault.</p>
+ <p>
+ Own Id: OTP-13673</p>
+ </item>
+ </list>
+ </section>
+
+
<section><title>Improvements and New Features</title>
<list>
<item>
diff --git a/lib/erl_interface/src/connect/ei_connect.c b/lib/erl_interface/src/connect/ei_connect.c
index 6dc51adee1..624100ad49 100644
--- a/lib/erl_interface/src/connect/ei_connect.c
+++ b/lib/erl_interface/src/connect/ei_connect.c
@@ -1708,28 +1708,36 @@ error:
static int get_home(char *buf, int size)
{
- char* homedrive;
- char* homepath;
-
#ifdef __WIN32__
- homedrive = getenv("HOMEDRIVE");
- homepath = getenv("HOMEPATH");
-#else
- homedrive = "";
- homepath = getenv("HOME");
-#endif
+ char* homedrive = getenv("HOMEDRIVE");
+ char* homepath = getenv("HOMEPATH");
- if (!homedrive || !homepath) {
- buf[0] = '.';
- buf[1] = '\0';
- return 1;
- } else if (strlen(homedrive)+strlen(homepath) < size-1) {
+ if (homedrive && homepath) {
+ if (strlen(homedrive)+strlen(homepath) >= size)
+ return 0;
strcpy(buf, homedrive);
strcat(buf, homepath);
return 1;
}
-
- return 0;
+ else {
+ int len = GetWindowsDirectory(buf, size);
+ if (len) {
+ return (len < size);
+ }
+ }
+#else
+ char* homepath = getenv("HOME");
+ if (homepath) {
+ if (strlen(homepath) >= size)
+ return 0;
+ strcpy(buf, homepath);
+ return 1;
+ }
+#endif
+
+ buf[0] = '.';
+ buf[1] = '\0';
+ return 1;
}
diff --git a/lib/erl_interface/src/legacy/erl_marshal.c b/lib/erl_interface/src/legacy/erl_marshal.c
index 3c212bf177..2bdf5f2134 100644
--- a/lib/erl_interface/src/legacy/erl_marshal.c
+++ b/lib/erl_interface/src/legacy/erl_marshal.c
@@ -767,6 +767,13 @@ static ETERM *erl_decode_it(unsigned char **ext)
((*ext)[2]) << 8 |((*ext)[3]);
*ext += 4;
big_cont:
+
+#ifdef _MSC_VER
+#define MAX_TO_NEGATE 0x8000000000000000Ui64
+#else
+#define MAX_TO_NEGATE 0x8000000000000000ULL
+#endif
+
sign = *(*ext)++;
if (arity > 8)
goto big_truncate;
@@ -803,23 +810,28 @@ static ETERM *erl_decode_it(unsigned char **ext)
*ext += arity;
return ep;
} else {
- /* Fits in a long long */
- int x;
- long long l = 0LL;
+ /* Fits in a signed long long */
+ int x;
+ unsigned long long l = 0LL;
+ long long sl;
- for(x = 0 ; x < arity ; x++) {
- l |= ((long long)(*ext)[x]) << ((long long)(8*x));
- }
- if (sign) {
- l = -l;
- if (l > 0) goto big_truncate;
- }
+ for(x = 0 ; x < arity ; x++) {
+ l |= ((unsigned long long)(*ext)[x]) << ((unsigned long long)(8*x));
+ }
- ERL_TYPE(ep) = ERL_LONGLONG;
- ep->uval.llval.i = l;
- *ext += arity;
- return ep;
+ sl = (long long)l;
+
+ if (sign && l != MAX_TO_NEGATE) {
+ sl = -sl;
+ if (sl > 0) goto big_truncate;
+ }
+
+ ERL_TYPE(ep) = ERL_LONGLONG;
+ ep->uval.llval.i = sl;
+ *ext += arity;
+ return ep;
}
+#undef MAX_TO_NEGATE
big_truncate:
/* truncate to: (+/-) 1 */
#ifdef DEBUG
diff --git a/lib/erl_interface/src/misc/ei_portio.h b/lib/erl_interface/src/misc/ei_portio.h
index a14fdbd7d1..bded811a35 100644
--- a/lib/erl_interface/src/misc/ei_portio.h
+++ b/lib/erl_interface/src/misc/ei_portio.h
@@ -21,6 +21,12 @@
*/
#ifndef _EI_PORTIO_H
#define _EI_PORTIO_H
+#if !defined(__WIN32__) && !defined(VXWORKS)
+#ifdef HAVE_WRITEV
+/* Declaration of struct iovec *iov should be visible in this scope. */
+#include <sys/uio.h>
+#endif
+#endif
int ei_accept_t(int fd, void *addr, void *addrlen, unsigned ms);
int ei_connect_t(int fd, void *sinp, int sin_siz, unsigned ms);
@@ -29,8 +35,7 @@ int ei_write_fill(int fd, const char *buf, int len);
int ei_read_fill_t(int fd, char* buf, int len, unsigned ms);
int ei_write_fill_t(int fd, const char *buf, int len, unsigned ms);
#ifdef HAVE_WRITEV
-int ei_writev_fill_t(int fd, const struct iovec *iov, int iovcnt,
- unsigned ms);
+int ei_writev_fill_t(int fd, const struct iovec *iov, int iovcnt, unsigned ms);
#endif
#endif /* _EI_PORTIO_H */
diff --git a/lib/erl_interface/src/misc/show_msg.c b/lib/erl_interface/src/misc/show_msg.c
index 81accab4b6..5868cccba6 100644
--- a/lib/erl_interface/src/misc/show_msg.c
+++ b/lib/erl_interface/src/misc/show_msg.c
@@ -40,6 +40,8 @@
# include <time.h>
# endif
# endif
+#else
+# include <time.h>
#endif
#include "eiext.h"
diff --git a/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.src b/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.src
index 5b82f0bfcf..c2d8261dd8 100644
--- a/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.src
+++ b/lib/erl_interface/test/ei_connect_SUITE_data/Makefile.src
@@ -23,9 +23,10 @@ include @erl_interface_mk_include@
CC0 = @CC@
CC = ..@DS@all_SUITE_data@DS@gccifier@exe@ -CC"$(CC0)"
LD = @LD@
+LIBERL = @erl_interface_lib@
LIBEI = @erl_interface_eilib@
LIBFLAGS = ../all_SUITE_data/ei_runner@obj@ \
- $(LIBEI) @LIBS@ @erl_interface_sock_libs@ \
+ $(LIBERL) $(LIBEI) @LIBS@ @erl_interface_sock_libs@ \
@erl_interface_threadlib@
CFLAGS = @EI_CFLAGS@ $(THR_DEFS) -I@erl_interface_include@ -I../all_SUITE_data
EI_CONNECT_OBJS = ei_connect_test@obj@ ei_connect_test_decl@obj@
diff --git a/lib/erl_interface/test/ei_connect_SUITE_data/einode.c b/lib/erl_interface/test/ei_connect_SUITE_data/einode.c
index e1d46ae59a..bb71575740 100644
--- a/lib/erl_interface/test/ei_connect_SUITE_data/einode.c
+++ b/lib/erl_interface/test/ei_connect_SUITE_data/einode.c
@@ -35,6 +35,7 @@
#endif
#include "ei.h"
+#include "erl_interface.h"
#ifdef VXWORKS
#define MAIN cnode
@@ -115,6 +116,8 @@ MAIN(int argc, char *argv[])
if (argc < 3)
exit(1);
+ erl_init(NULL, 0);
+
cookie = argv[1];
n = atoi(argv[2]);
if (n > 100)
diff --git a/lib/erl_interface/test/ei_decode_SUITE_data/ei_decode_test.c b/lib/erl_interface/test/ei_decode_SUITE_data/ei_decode_test.c
index 30f5fe33a0..cfe9083065 100644
--- a/lib/erl_interface/test/ei_decode_SUITE_data/ei_decode_test.c
+++ b/lib/erl_interface/test/ei_decode_SUITE_data/ei_decode_test.c
@@ -377,8 +377,14 @@ TESTCASE(test_ei_decode_ulong)
EI_DECODE_2 (decode_ulong, 11, unsigned long, ll(0x8000000000000000));
EI_DECODE_2 (decode_ulong, 11, unsigned long, ll(0xffffffffffffffff));
} else {
- EI_DECODE_2 (decode_ulong, 7, unsigned long, 0x80000000);
- EI_DECODE_2 (decode_ulong, 7, unsigned long, 0xffffffff);
+ if (sizeof(void*) > 4) {
+ /* Windows */
+ EI_DECODE_2_FAIL(decode_ulong, 11, unsigned long, ll(0x8000000000000000));
+ EI_DECODE_2_FAIL(decode_ulong, 11, unsigned long, ll(0xffffffffffffffff));
+ } else {
+ EI_DECODE_2 (decode_ulong, 7, unsigned long, 0x80000000);
+ EI_DECODE_2 (decode_ulong, 7, unsigned long, 0xffffffff);
+ }
}
EI_DECODE_2_FAIL(decode_ulong, 9, unsigned long, ll(0x7fffffffffff));
diff --git a/lib/erl_interface/test/erl_eterm_SUITE_data/eterm_test.c b/lib/erl_interface/test/erl_eterm_SUITE_data/eterm_test.c
index 687a45bbab..d97f218a26 100644
--- a/lib/erl_interface/test/erl_eterm_SUITE_data/eterm_test.c
+++ b/lib/erl_interface/test/erl_eterm_SUITE_data/eterm_test.c
@@ -149,7 +149,7 @@ TESTCASE(round_trip_conversion)
{
int v;
- for (v = 8; v; v <<= 1) {
+ for (v = 8, n = 0; n < (sizeof(v)*8-4-1); v <<= 1, n++) {
for (i=-4; i<4; i++) {
encode_decode(erl_mk_int(v+i), "INT");
encode_decode(erl_mk_int(-(v+i)), "NEG INT");
@@ -166,7 +166,7 @@ TESTCASE(round_trip_conversion)
}
{
long long v;
- for (v = 8; v; v <<= 1) {
+ for (v = 8, n = 0; n < (sizeof(v)*8-4-1); v <<= 1, n++) {
for (i=-4; i<4; i++) {
encode_decode(erl_mk_longlong(v+i), "LONGLONG");
encode_decode(erl_mk_longlong(-(v+i)), "NEG LONGLONG");
diff --git a/lib/erl_interface/test/runner.erl b/lib/erl_interface/test/runner.erl
index 9a27eda038..1084eec2a3 100644
--- a/lib/erl_interface/test/runner.erl
+++ b/lib/erl_interface/test/runner.erl
@@ -55,7 +55,7 @@ test(Tc, Timeout) ->
%% Returns: {ok, Port}
start({Prog, Tc}) when is_list(Prog), is_integer(Tc) ->
- Port = open_port({spawn, Prog}, [{packet, 4}]),
+ Port = open_port({spawn, Prog}, [{packet, 4}, exit_status]),
Command = [Tc div 256, Tc rem 256],
Port ! {self(), {command, Command}},
Port.
@@ -125,7 +125,9 @@ get_term(Port, Timeout) ->
get_reply(Port, Timeout) when is_port(Port) ->
receive
{Port, {data, Reply}} ->
- Reply
+ Reply;
+ Fail when element(1, Fail) == Port ->
+ ct:fail("Got unexpected message from port: ~p",[Fail])
after Timeout ->
ct:fail("No response from C program")
end.
diff --git a/lib/et/doc/src/et_desc.xmlsrc b/lib/et/doc/src/et_desc.xmlsrc
index 96a4a9df31..29e0ab1fe3 100644
--- a/lib/et/doc/src/et_desc.xmlsrc
+++ b/lib/et/doc/src/et_desc.xmlsrc
@@ -55,13 +55,12 @@
<p></p>
<code type="none"><![CDATA[
- % erl -pa et/examples
- Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4]
- [async-threads:0] [kernel-poll:false]
+% erl -pa et/examples
+Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4] [async-threads:0] [kernel-poll:false]
- Eshell V5.7.4 (abort with ^G)
- 1> {ok, Viewer} = et_viewer:start([]).
- {ok,<0.40.0>}]]></code>
+Eshell V5.7.4 (abort with ^G)
+1> {ok, Viewer} = et_viewer:start([]).
+{ok,<0.40.0>}]]></code>
<p>A <c>Viewer</c> gets trace <c>Events</c> from its
<c>Collector</c> by polling it regularly for more <c>Events</c> to
@@ -69,40 +68,38 @@
<c>Collector</c> with <c>et_collector:report_event/6</c>:</p>
<code type="none"><![CDATA[
- 2> Collector = et_viewer:get_collector_pid(Viewer).
- <0.39.0>
- 3> et_collector:report_event(Collector, 60, my_shell, mnesia_tm, start_outer,
- 3> "Start outer transaction"),
- 3> et_collector:report_event(Collector, 40, mnesia_tm, my_shell, new_tid,
- 3> "New transaction id is 4711"),
- 3> et_collector:report_event(Collector, 20, my_shell, mnesia_locker, try_write_lock,
- 3> "Acquire write lock for {my_tab, key}"),
- 3> et_collector:report_event(Collector, 10, mnesia_locker, my_shell, granted,
- 3> "You got the write lock for {my_tab, key}"),
- 3> et_collector:report_event(Collector, 60, my_shell, do_commit,
- 3> "Perform transaction commit"),
- 3> et_collector:report_event(Collector, 40, my_shell, mnesia_locker, release_tid,
- 3> "Release all locks for transaction 4711"),
- 3> et_collector:report_event(Collector, 60, my_shell, mnesia_tm, delete_transaction,
- 3> "End of outer transaction"),
- 3> et_collector:report_event(Collector, 20, my_shell, end_outer,
- 3> "Transaction returned {atomic, ok}").
- {ok,{table_handle,<0.39.0>,16402,trace_ts,
- #Fun<et_collector.0.62831470>}}]]></code>
+2> Collector = et_viewer:get_collector_pid(Viewer).
+<0.39.0>
+3> et_collector:report_event(Collector, 60, my_shell, mnesia_tm, start_outer,
+3> "Start outer transaction"),
+3> et_collector:report_event(Collector, 40, mnesia_tm, my_shell, new_tid,
+3> "New transaction id is 4711"),
+3> et_collector:report_event(Collector, 20, my_shell, mnesia_locker, try_write_lock,
+3> "Acquire write lock for {my_tab, key}"),
+3> et_collector:report_event(Collector, 10, mnesia_locker, my_shell, granted,
+3> "You got the write lock for {my_tab, key}"),
+3> et_collector:report_event(Collector, 60, my_shell, do_commit,
+3> "Perform transaction commit"),
+3> et_collector:report_event(Collector, 40, my_shell, mnesia_locker, release_tid,
+3> "Release all locks for transaction 4711"),
+3> et_collector:report_event(Collector, 60, my_shell, mnesia_tm, delete_transaction,
+3> "End of outer transaction"),
+3> et_collector:report_event(Collector, 20, my_shell, end_outer,
+3> "Transaction returned {atomic, ok}").
+{ok,{table_handle,<0.39.0>,16402,trace_ts,
+ #Fun<et_collector.0.62831470>}}]]></code>
<p>This actually is a simulation of the process <c>Events</c>
caused by a <c>Mnesia</c> transaction that writes a record in a local
table:</p>
<code type="none"><![CDATA[
- mnesia:transaction(fun() -> mnesia:write({my_tab, key, val}) end).]]></code>
+mnesia:transaction(fun() -> mnesia:write({my_tab, key, val}) end).]]></code>
<p>At this stage when we have a couple of <c>Events</c>, it is time to
show how it looks like in the graphical interface of
<c>et_viewer</c>:</p>
- <p></p>
-
<image file="sim_trans.png">
<icaption>A simulated Mnesia transaction which writes one record</icaption>
</image>
@@ -144,11 +141,11 @@
<p></p>
<code type="none"><![CDATA[
- filter(TraceData) -> false | true | {true, NewEvent}
+filter(TraceData) -> false | true | {true, NewEvent}
- TraceData = Event | erlang_trace_data()
- Event = #event{}
- NewEvent = #event{}]]></code>
+TraceData = Event | erlang_trace_data()
+Event = #event{}
+NewEvent = #event{}]]></code>
<p>The interface of the filter function is the same as the the
filter functions for the good old <c>lists:filtermap/2</c>. If the filter
@@ -204,10 +201,10 @@
<p></p>
<code type="none"><![CDATA[
- 4> Fun = fun(E) -> et_demo:mgr_actors(E) end.
- #Fun<erl_eval.6.13229925>
- 5> et_collector:dict_insert(Collector, {filter, mgr_actors}, Fun).
- ok]]></code>
+4> Fun = fun(E) -> et_demo:mgr_actors(E) end.
+#Fun<erl_eval.6.13229925>
+5> et_collector:dict_insert(Collector, {filter, mgr_actors}, Fun).
+ok]]></code>
<p>you will see that the <c>Filter</c> menu in all viewers have
got a new entry called <c>mgr_actors</c>. Select it, and a new
@@ -228,21 +225,16 @@
<c>Contents Viewer</c> window to pop up, showing the <c>Event</c>
in the <c>mgr_actors</c> view:</p>
- <p></p>
-
<image file="sim_trans_contents_viewer_mgr_actors.png">
- <icaption>The trace <c>Event</c> in the mgr_actors view</icaption>
+ <icaption>The trace Event in the mgr_actors view</icaption>
</image>
<p>Select the <c>all</c> entry in the <c>Filters</c> menu
and a new <c>Contents Viewer window</c> will pop up showing the
same trace <c>Event</c> in the collectors view:</p>
- <p></p>
-
<image file="sim_trans_contents_viewer_collector.png">
- <icaption>The same trace <c>Event</c> in the collectors
- view</icaption>
+ <icaption>The same trace Event in the collectors view</icaption>
</image>
</section>
@@ -311,7 +303,7 @@
<c>et_collector</c> or <c>et_viewer</c> in order to activate the
global tracing. There is no restriction on how many concurrent
(anonymous) collectors you can have, but you can only have one
- <b>global</b> <c>Collector</c> as its name is registered in
+ <em>global</em> <c>Collector</c> as its name is registered in
<c>global</c>.</p>
<p>In order to further simplify the tracing, you can make use of
diff --git a/lib/et/doc/src/et_examples.xmlsrc b/lib/et/doc/src/et_examples.xmlsrc
index 6f143a397e..f4d94f7cb0 100644
--- a/lib/et/doc/src/et_examples.xmlsrc
+++ b/lib/et/doc/src/et_examples.xmlsrc
@@ -55,34 +55,32 @@
<p></p>
<code type="none"><![CDATA[
- mnesia:transaction(fun() -> mnesia:write({my_tab, key, val}) end).]]></code>
+mnesia:transaction(fun() -> mnesia:write({my_tab, key, val}) end).]]></code>
<p>And the viewer window will look like:</p>
<p></p>
<code type="none"><![CDATA[
- Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4]
- [async-threads:0] [kernel-poll:false]
+Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4] [async-threads:0] [kernel-poll:false]
- Eshell V5.7.4 (abort with ^G)
- 1> {ok, Viewer} = et_viewer:start([]).
- {ok,<0.40.0>;}
- 2> et_demo:sim_trans().
- {ok,{table_handle,<0.45.0>,24596,trace_ts,
- #Fun<et_collector.0.62831470>}}]]></code>
+Eshell V5.7.4 (abort with ^G)
+1> {ok, Viewer} = et_viewer:start([]).
+{ok,<0.40.0>;}
+2> et_demo:sim_trans().
+{ok,{table_handle,<0.45.0>,24596,trace_ts,
+ #Fun<et_collector.0.62831470>}}]]></code>
<p></p>
<image file="sim_trans.png">
- <icaption>A simulated <c>Mnesia</c> transaction which writes one
- record</icaption>
+ <icaption>A simulated Mnesia transaction which writes one record</icaption>
</image>
</section>
<section>
- <title>Some convenient functions used in the <c>Mnesia</c> transaction
+ <title>Some convenient functions used in the Mnesia transaction
example</title>
<p>The <c>module_as_actor</c> filter converts the <c>Event
@@ -173,21 +171,19 @@
<p></p>
<code type="none"><![CDATA[
- erl -pa ../examples
- Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4]
- [async-threads:0] [kernel-poll:false]
+erl -pa ../examples
+Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4]
+ [async-threads:0] [kernel-poll:false]
- Eshell V5.7.4 (abort with ^G)
- 1> et_demo:live_trans().
- {atomic,ok}]]></code>
+Eshell V5.7.4 (abort with ^G)
+1> et_demo:live_trans().
+{atomic,ok}]]></code>
<p>Please, explore the different filters in order to see how the traced
transaction can be seen from different point of views:</p>
- <p></p>
-
<image file="live_trans.png">
- <icaption>A real <c>Mnesia</c> transaction which writes one record</icaption>
+ <icaption>A real Mnesia transaction which writes one record</icaption>
</image>
</section>
@@ -215,20 +211,20 @@
<p></p>
<code type="none"><![CDATA[
- -module(megaco_filter).
- -export([start/0]).
-
- start() ->
- Options =
- [{event_order, event_ts},
- {scale, 3},
- {max_actors, infinity},
- {trace_pattern, {megaco, max}},
- {trace_global, true},
- {dict_insert, {filter, megaco_filter}, fun filter/1},
- {active_filter, megaco_filter},
- {title, "Megaco tracer - Erlang/OTP"}],
- et_viewer:start(Options).]]></code>
+-module(megaco_filter).
+-export([start/0]).
+
+start() ->
+ Options =
+ [{event_order, event_ts},
+ {scale, 3},
+ {max_actors, infinity},
+ {trace_pattern, {megaco, max}},
+ {trace_global, true},
+ {dict_insert, {filter, megaco_filter}, fun filter/1},
+ {active_filter, megaco_filter},
+ {title, "Megaco tracer - Erlang/OTP"}],
+ et_viewer:start(Options).]]></code>
<p>First we start an Erlang node with a global <c>Collector</c>
and its <c>Viewer</c>.</p>
@@ -236,13 +232,12 @@
<p></p>
<code type="none"><![CDATA[
- erl -sname observer
- Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4]
- [async-threads:0] [kernel-poll:false]
+erl -sname observer
+Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4] [async-threads:0] [kernel-poll:false]
- Eshell V5.7.4 (abort with ^G)
- (observer@falco)1> megaco_filter:start().
- {ok,<0.48.0>}]]></code>
+Eshell V5.7.4 (abort with ^G)
+(observer@falco)1> megaco_filter:start().
+{ok,<0.48.0>}]]></code>
<p>Secondly we start another Erlang node which we connect the
observer node, before we start the application that we want to
@@ -253,28 +248,27 @@
<p></p>
<code type="none"><![CDATA[
- erl -sname mgc -pa ../../megaco/examples/simple
- Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4]
- [async-threads:0] [kernel-poll:false]
-
- Eshell V5.7.4 (abort with ^G)
- (mgc@falco)1> net:ping(observer@falco).
- pong
- (mgc@falco)2> megaco:start().
- ok
- (mgc@falco)3> megaco_simple_mgc:start().
- {ok,[{ok,2944,
- {megaco_receive_handle,{deviceName,"controller"},
- megaco_pretty_text_encoder,[],megaco_tcp,dynamic}},
- {ok,2944,
- {megaco_receive_handle,{deviceName,"controller"},
- megaco_pretty_text_encoder,[],megaco_udp,dynamic}},
- {ok,2945,
- {megaco_receive_handle,{deviceName,"controller"},
- megaco_binary_encoder,[],megaco_tcp,dynamic}},
- {ok,2945,
- {megaco_receive_handle,{deviceName,"controller"},
- megaco_binary_encoder,[],megaco_udp,dynamic}}]}]]></code>
+erl -sname mgc -pa ../../megaco/examples/simple
+Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4] [async-threads:0] [kernel-poll:false]
+
+Eshell V5.7.4 (abort with ^G)
+(mgc@falco)1> net:ping(observer@falco).
+pong
+(mgc@falco)2> megaco:start().
+ok
+(mgc@falco)3> megaco_simple_mgc:start().
+{ok,[{ok,2944,
+ {megaco_receive_handle,{deviceName,"controller"},
+ megaco_pretty_text_encoder,[],megaco_tcp,dynamic}},
+ {ok,2944,
+ {megaco_receive_handle,{deviceName,"controller"},
+ megaco_pretty_text_encoder,[],megaco_udp,dynamic}},
+ {ok,2945,
+ {megaco_receive_handle,{deviceName,"controller"},
+ megaco_binary_encoder,[],megaco_tcp,dynamic}},
+ {ok,2945,
+ {megaco_receive_handle,{deviceName,"controller"},
+ megaco_binary_encoder,[],megaco_udp,dynamic}}]}]]></code>
<p>And finally we start an Erlang node for the Media Gateways and
connect to the observer node. Each Media Gateway connects to the
@@ -288,94 +282,87 @@
<p></p>
<code type="none"><![CDATA[
- Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4]
- [async-threads:0] [kernel-poll:false]
-
- Eshell V5.7.4 (abort with ^G)
- (mg@falco)1> net:ping(observer@falco).
- pong
- (mg@falco)2> megaco_simple_mg:start().
- [{{deviceName,"gateway_tt"},
- {error,{start_user,megaco_not_started}}},
- {{deviceName,"gateway_tb"},
- {error,{start_user,megaco_not_started}}},
- {{deviceName,"gateway_ut"},
- {error,{start_user,megaco_not_started}}},
- {{deviceName,"gateway_ub"},
- {error,{start_user,megaco_not_started}}}]
- (mg@falco)3> megaco:start().
- ok
- (mg@falco)4> megaco_simple_mg:start().
- [{{deviceName,"gateway_tt"},
- {1,
- {ok,[{'ActionReply',0,asn1_NOVALUE,asn1_NOVALUE,
- [{serviceChangeReply,
- {'ServiceChangeReply',
- [{megaco_term_id,false,["root"]}],
- {serviceChangeResParms,
- {'ServiceChangeResParm',
- {deviceName,"controller"},
- asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
- asn1_NOVALUE}}}}]}]}}},
- {{deviceName,"gateway_tb"},
- {1,
- {ok,[{'ActionReply',0,asn1_NOVALUE,asn1_NOVALUE,
- [{serviceChangeReply,
- {'ServiceChangeReply',
- [{megaco_term_id,false,["root"]}],
- {serviceChangeResParms,
- {'ServiceChangeResParm',
- {deviceName,"controller"},
- asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
- asn1_NOVALUE}}}}]}]}}},
- {{deviceName,"gateway_ut"},
- {1,
- {ok,[{'ActionReply',0,asn1_NOVALUE,asn1_NOVALUE,
- [{serviceChangeReply,
- {'ServiceChangeReply',
- [{megaco_term_id,false,["root"]}],
- {serviceChangeResParms,
- {'ServiceChangeResParm',
- {deviceName,"controller"},
- asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
- asn1_NOVALUE}}}}]}]}}},
- {{deviceName,"gateway_ub"},
- {1,
- {ok,[{'ActionReply',0,asn1_NOVALUE,asn1_NOVALUE,
- [{serviceChangeReply,
- {'ServiceChangeReply',
- [{megaco_term_id,false,["root"]}],
- {serviceChangeResParms,
- {'ServiceChangeResParm',
- {deviceName,"controller"},
- asn1_NOVALUE,asn1_NOVALUE,
- asn1_NOVALUE,...}}}}]}]}}}]]]></code>
+Erlang R13B03 (erts-5.7.4) [64-bit] [smp:4:4] [rq:4] [async-threads:0] [kernel-poll:false]
+
+Eshell V5.7.4 (abort with ^G)
+(mg@falco)1> net:ping(observer@falco).
+pong
+(mg@falco)2> megaco_simple_mg:start().
+[{{deviceName,"gateway_tt"},
+ {error,{start_user,megaco_not_started}}},
+ {{deviceName,"gateway_tb"},
+ {error,{start_user,megaco_not_started}}},
+ {{deviceName,"gateway_ut"},
+ {error,{start_user,megaco_not_started}}},
+ {{deviceName,"gateway_ub"},
+ {error,{start_user,megaco_not_started}}}]
+(mg@falco)3> megaco:start().
+ok
+(mg@falco)4> megaco_simple_mg:start().
+[{{deviceName,"gateway_tt"},
+ {1,
+ {ok,[{'ActionReply',0,asn1_NOVALUE,asn1_NOVALUE,
+ [{serviceChangeReply,
+ {'ServiceChangeReply',
+ [{megaco_term_id,false,["root"]}],
+ {serviceChangeResParms,
+ {'ServiceChangeResParm',
+ {deviceName,"controller"},
+ asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
+ asn1_NOVALUE}}}}]}]}}},
+ {{deviceName,"gateway_tb"},
+ {1,
+ {ok,[{'ActionReply',0,asn1_NOVALUE,asn1_NOVALUE,
+ [{serviceChangeReply,
+ {'ServiceChangeReply',
+ [{megaco_term_id,false,["root"]}],
+ {serviceChangeResParms,
+ {'ServiceChangeResParm',
+ {deviceName,"controller"},
+ asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
+ asn1_NOVALUE}}}}]}]}}},
+ {{deviceName,"gateway_ut"},
+ {1,
+ {ok,[{'ActionReply',0,asn1_NOVALUE,asn1_NOVALUE,
+ [{serviceChangeReply,
+ {'ServiceChangeReply',
+ [{megaco_term_id,false,["root"]}],
+ {serviceChangeResParms,
+ {'ServiceChangeResParm',
+ {deviceName,"controller"},
+ asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
+ asn1_NOVALUE}}}}]}]}}},
+ {{deviceName,"gateway_ub"},
+ {1,
+ {ok,[{'ActionReply',0,asn1_NOVALUE,asn1_NOVALUE,
+ [{serviceChangeReply,
+ {'ServiceChangeReply',
+ [{megaco_term_id,false,["root"]}],
+ {serviceChangeResParms,
+ {'ServiceChangeResParm',
+ {deviceName,"controller"},
+ asn1_NOVALUE,asn1_NOVALUE,
+ asn1_NOVALUE,...}}}}]}]}}}]]]></code>
<p>The <c>Megaco</c> adopted viewer looks like this, when we have clicked
- on the <b>[gateway_tt]</b> actor name in order to only display the events
+ on the <em>[gateway_tt]</em> actor name in order to only display the events
regarding that actor:</p>
- <p></p>
-
<image file="megaco_tracer.png">
<icaption>The viewer adopted for Megaco</icaption>
</image>
<p>A pretty printed <c>Megaco</c> message looks like this:</p>
- <p></p>
-
<image file="megaco_filter.png">
- <icaption>A textual <c>Megaco</c> message</icaption>
+ <icaption>A textual Megaco message</icaption>
</image>
<p>And the corresponding internal form for the same <c>Megaco</c> message
looks like this:</p>
- <p></p>
-
<image file="megaco_collector.png">
- <icaption>The internal form of a <c>Megaco</c> message</icaption>
+ <icaption>The internal form of a Megaco message</icaption>
</image>
</section>
diff --git a/lib/et/doc/src/et_tutorial.xmlsrc b/lib/et/doc/src/et_tutorial.xmlsrc
index b5d1b815be..b6e1ca141c 100644
--- a/lib/et/doc/src/et_tutorial.xmlsrc
+++ b/lib/et/doc/src/et_tutorial.xmlsrc
@@ -75,12 +75,10 @@
<codeinclude file="../../examples/et_display_demo.erl" tag="%module" type="erl"></codeinclude>
<p>When you run the <c>et_display_demo:test().</c> function in the
- example above, the <c>Viewer</c> window will look like this:</p>.
-
- <p></p>
+ example above, the <c>Viewer</c> window will look like this:</p>
<image file="coffee_order.png">
- <icaption>Screenshot of the <c>Viewer</c> window</icaption>
+ <icaption>Screenshot of the Viewer window</icaption>
</image>
</section>
@@ -262,14 +260,11 @@
</list>
<p>When you run the <c>et_trace_demo:test()</c> function above, the
- <c>Viewer</c> window will look like this screenshot:</p>.
+ <c>Viewer</c> window will look like this screenshot:</p>
- <p></p>
-
<image file="coffee_order.png">
- <icaption>Screenshot of the <c>Viewer</c> window</icaption>
+ <icaption>Screenshot of the Viewer window</icaption>
</image>
</section>
-
</chapter>
diff --git a/lib/et/src/et_collector.erl b/lib/et/src/et_collector.erl
index b8916c0eb9..aba90b0be1 100644
--- a/lib/et/src/et_collector.erl
+++ b/lib/et/src/et_collector.erl
@@ -27,8 +27,7 @@
-behaviour(gen_server).
%% External exports
--export([
- start_link/1,
+-export([start_link/1,
stop/1,
report/2,
@@ -55,8 +54,7 @@
dict_delete/2,
dict_lookup/2,
dict_match/2,
- multicast/2
- ]).
+ multicast/2]).
%% Internal export
-export([monitor_trace_port/2]).
@@ -258,7 +256,7 @@ parse_opt(BadList, _S, _Dict, _Clients) ->
{error, {bad_option_list, BadList}}.
start_clients(CollectorPid, [{Type, Parameters} | T]) ->
- start_trace_client(CollectorPid, Type, Parameters),
+ _ = start_trace_client(CollectorPid, Type, Parameters),
start_clients(CollectorPid, T);
start_clients(CollectorPid, []) ->
{ok, CollectorPid}.
@@ -892,7 +890,7 @@ init([InitialS, Dict]) ->
process_flag(trap_exit, true),
case InitialS#state.parent_pid of
undefined ->
- ignore;
+ ok;
Pid when is_pid(Pid) ->
link(Pid)
end,
@@ -914,7 +912,7 @@ init_global(S) ->
Spec = trace_spec_wrapper(EventFun, EndFun, {ok, self()}),
dbg:tracer(process, Spec),
et_selector:change_pattern(S#state.trace_pattern),
- net_kernel:monitor_nodes(true),
+ ok = net_kernel:monitor_nodes(true),
lists:foreach(fun(N) -> self() ! {nodeup, N} end, nodes()),
S#state{trace_nodes = [node()]};
false ->
@@ -1001,7 +999,7 @@ handle_call({save_event_file, FileName, Options}, _From, S) ->
%% insert() ->
%% case S2#state.file of
%% undefined ->
- %% ignore;
+ %% ok;
%% F ->
%% Fd = F#file.desc,
%% ok = disk_log:log(Fd, Event)
@@ -1010,7 +1008,7 @@ handle_call({save_event_file, FileName, Options}, _From, S) ->
Fun = fun({_, E}, A) -> ok = disk_log:log(Fd, E), A end,
Tab = S#state.event_tab,
Reply = tab_iterate(Fun, Tab, ets:first(Tab), ok),
- disk_log:close(Fd),
+ ok = disk_log:close(Fd),
{Reply, S}
%% all ->
%% Reply = tab_iterate(WriteFun, Tab, ok),
@@ -1033,7 +1031,7 @@ handle_call({save_event_file, FileName, Options}, _From, S) ->
handle_call({change_pattern, Pattern}, _From, S) ->
Ns = S#state.trace_nodes,
- rpc:multicall(Ns, et_selector, change_pattern, [Pattern]),
+ {_,[]} = rpc:multicall(Ns, et_selector, change_pattern, [Pattern]),
Reply = {old_pattern, S#state.trace_pattern},
S2 = S#state{trace_pattern = Pattern},
reply(Reply, S2);
@@ -1045,8 +1043,9 @@ handle_call(clear_table, _From, S) ->
handle_call(stop, _From, S) ->
do_multicast(S#state.subscribers, close),
case S#state.trace_global of
- true -> rpc:multicall(S#state.trace_nodes, dbg, stop_clear, []);
- false -> ignore
+ true -> {_,[]} = rpc:multicall(S#state.trace_nodes, dbg, stop_clear, []),
+ ok;
+ false -> ok
end,
{stop, shutdown, ok, S};
handle_call(Request, From, S) ->
@@ -1239,8 +1238,8 @@ tab_iterate(Fun, Tab, Key, Acc) ->
file_open(F) ->
Fd = make_ref(),
case F#file.file_opt of
- write -> file:rename(F#file.name, F#file.name ++ ".OLD");
- append -> ignore
+ write -> ok = file:rename(F#file.name, F#file.name ++ ".OLD");
+ append -> ok
end,
Args = [{file, F#file.name}, {name, Fd},
{repair, true}, {mode, read_write}],
@@ -1278,7 +1277,7 @@ do_multicast([], _Msg) ->
opt_unlink(Pid) ->
if
Pid =:= undefined ->
- ignore;
+ ok;
true ->
unlink(Pid)
end.
diff --git a/lib/et/src/et_wx_contents_viewer.erl b/lib/et/src/et_wx_contents_viewer.erl
index d5347a43db..247dd4c7ba 100644
--- a/lib/et/src/et_wx_contents_viewer.erl
+++ b/lib/et/src/et_wx_contents_viewer.erl
@@ -89,7 +89,7 @@ start_link(Options) ->
S#state.parent_pid =/= self() ->
unlink(Pid);
true ->
- ignore
+ ok
end,
{ok, Pid}
catch
@@ -242,11 +242,12 @@ handle_event(#wx{id = Id,
S) ->
case proplists:get_value(Id, S#state.menu_data) of
undefined ->
- ignore;
+ ok;
Data when is_record(Data, filter) ->
F = Data,
- ChildState= S#state{active_filter = F#filter.name},
- wx_object:start_link(?MODULE, [ChildState], []);
+ ChildState = S#state{active_filter = F#filter.name},
+ _ = wx_object:start_link(?MODULE, [ChildState], []),
+ ok;
{hide, Actors} ->
send_viewer_event(S, {delete_actors, Actors});
{show, Actors} ->
@@ -267,7 +268,7 @@ handle_event(#wx{id = Id,
TimeStamp =
case S#state.event_order of
trace_ts -> Event#event.trace_ts;
- event_ts -> Event#event.event_ts
+ event_ts -> Event#event.event_ts
end,
FileName = lists:flatten(["et_contents_viewer_", now_to_string(TimeStamp), ".txt"]),
Style = ?wxFD_SAVE bor ?wxFD_OVERWRITE_PROMPT,
@@ -275,7 +276,7 @@ handle_event(#wx{id = Id,
case select_file(S#state.frame, Msg, filename:absname(FileName), Style) of
{ok, FileName2} ->
Bin = list_to_binary(event_to_string(Event, S#state.event_order)),
- file:write_file(FileName2, Bin);
+ ok = file:write_file(FileName2, Bin);
cancel ->
ok
end,
@@ -351,19 +352,21 @@ handle_event(#wx{event = #wxKey{rawCode = KeyCode}}, S) ->
$0 ->
case lists:keysearch(?DEFAULT_FILTER_NAME, #filter.name, S#state.filters) of
{value, F} when is_record(F, filter) ->
- ChildState= S#state{active_filter = F#filter.name},
- wx_object:start_link(?MODULE, [ChildState], []);
+ ChildState = S#state{active_filter = F#filter.name},
+ _ = wx_object:start_link(?MODULE, [ChildState], []),
+ ok;
false ->
- ignore
+ ok
end,
{noreply, S};
Int when is_integer(Int), Int > $0, Int =< $9 ->
case catch lists:nth(Int-$0, S#state.filters) of
F when is_record(F, filter) ->
- ChildState= S#state{active_filter = F#filter.name},
- wx_object:start_link(?MODULE, [ChildState], []);
+ ChildState = S#state{active_filter = F#filter.name},
+ _ = wx_object:start_link(?MODULE, [ChildState], []),
+ ok;
{'EXIT', _} ->
- ignore
+ ok
end,
{noreply, S};
@@ -443,11 +446,11 @@ create_window(S) ->
Title = lists:concat([?MODULE, " (filter: ", Name, ")"]),
WinOpt = [{size, {W,H}}],
Frame = wxFrame:new(wx:null(), ?wxID_ANY, Title, WinOpt),
- wxFrame:createStatusBar(Frame),
+ _ = wxFrame:createStatusBar(Frame),
Panel = wxPanel:new(Frame, []),
Bar = wxMenuBar:new(),
- wxFrame:setMenuBar(Frame,Bar),
+ _ = wxFrame:setMenuBar(Frame,Bar),
create_file_menu(Bar),
Editor = wxTextCtrl:new(Panel, ?wxID_ANY, [{style, 0
bor ?wxDEFAULT
@@ -457,21 +460,21 @@ create_window(S) ->
bor ?wxTE_DONTWRAP}]),
Font = wxFont:new(10, ?wxFONTFAMILY_TELETYPE, ?wxNORMAL, ?wxNORMAL,[]),
TextAttr = wxTextAttr:new(?wxBLACK, [{font, Font}]),
- wxTextCtrl:setDefaultStyle(Editor, TextAttr),
+ _ = wxTextCtrl:setDefaultStyle(Editor, TextAttr),
Sizer = wxBoxSizer:new(?wxHORIZONTAL),
- wxSizer:add(Sizer, Editor, [{flag, ?wxEXPAND}, {proportion, 1}]),
+ _ = wxSizer:add(Sizer, Editor, [{flag, ?wxEXPAND}, {proportion, 1}]),
FilteredEvent = config_editor(Editor, S),
S2 = S#state{win = Frame, panel = Panel, filtered_event = FilteredEvent},
HideData = create_hide_menu(Bar, S2),
SearchData = create_search_menu(Bar, S2),
FilterData = create_filter_menu(Bar, S#state.filters),
- wxFrame:connect(Frame, command_menu_selected, []),
- wxFrame:connect(Frame, key_up),
- wxFrame:connect(Frame, close_window, [{skip,true}]),
- wxFrame:setFocus(Frame),
- wxPanel:setSizer(Panel, Sizer),
- wxSizer:fit(Sizer, Panel),
- wxFrame:show(Frame),
+ _ = wxFrame:connect(Frame, command_menu_selected, []),
+ _ = wxFrame:connect(Frame, key_up),
+ _ = wxFrame:connect(Frame, close_window, [{skip,true}]),
+ _ = wxFrame:setFocus(Frame),
+ _ = wxPanel:setSizer(Panel, Sizer),
+ _ = wxSizer:fit(Sizer, Panel),
+ _ = wxFrame:show(Frame),
S2#state{menu_data = HideData++SearchData++FilterData, editor = Editor, frame = Frame}.
menuitem(Menu, Id, Text, UserData) ->
@@ -480,16 +483,17 @@ menuitem(Menu, Id, Text, UserData) ->
create_file_menu(Bar) ->
Menu = wxMenu:new([]),
- wxMenu:append(Menu, ?wxID_SAVE, "Save"),
- wxMenu:append(Menu, ?wxID_PRINT,"Print"),
- wxMenu:appendSeparator(Menu),
- wxMenu:append(Menu, ?wxID_EXIT, "Close"),
- wxMenuBar:append(Bar, Menu, "File").
+ _ = wxMenu:append(Menu, ?wxID_SAVE, "Save"),
+ _ = wxMenu:append(Menu, ?wxID_PRINT,"Print"),
+ _ = wxMenu:appendSeparator(Menu),
+ _ = wxMenu:append(Menu, ?wxID_EXIT, "Close"),
+ _ = wxMenuBar:append(Bar, Menu, "File"),
+ ok.
create_filter_menu(Bar, Filters) ->
Menu = wxMenu:new([]),
- wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Select Filter"), [{enable, false}]),
- wxMenu:appendSeparator(Menu),
+ _ = wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Select Filter"), [{enable, false}]),
+ _ = wxMenu:appendSeparator(Menu),
Item = fun(F, {N,Acc}) when F#filter.name =:= ?DEFAULT_FILTER_NAME->
Label = lists:concat([pad_string(F#filter.name, 20, $\ , right), "(0)"]),
MenuItem = menuitem(Menu, ?wxID_ANY, Label, F),
@@ -502,7 +506,7 @@ create_filter_menu(Bar, Filters) ->
end,
Filters2 = lists:keysort(#filter.name, Filters),
{_,MenuData} = lists:foldl(Item, {1, []}, Filters2),
- wxMenuBar:append(Bar, Menu, "Filters"),
+ _ = wxMenuBar:append(Bar, Menu, "Filters"),
MenuData.
create_hide_menu(Bar, S) ->
@@ -515,33 +519,33 @@ create_hide_menu(Bar, S) ->
S#state.viewer_pid =:= undefined ->
ignore;
From =:= To ->
- wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Hide actor in Viewer "),
- [{enable, false}]),
- wxMenu:appendSeparator(Menu),
+ _ = wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Hide actor in Viewer "),
+ [{enable, false}]),
+ _ = wxMenu:appendSeparator(Menu),
Hide = menuitem(Menu, ?wxID_ANY, "From=To (f|t|b)", {hide, [From]}),
- wxMenu:appendSeparator(Menu),
- wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Show actor in Viewer "),
- [{enable, false}]),
- wxMenu:appendSeparator(Menu),
+ _ = wxMenu:appendSeparator(Menu),
+ _ = wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Show actor in Viewer "),
+ [{enable, false}]),
+ _ = wxMenu:appendSeparator(Menu),
Show = menuitem(Menu, ?wxID_ANY, "From=To (F|T|B)", {show, [From]}),
[Show,Hide];
true ->
- wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Hide actor in Viewer "),
- [{enable, false}]),
- wxMenu:appendSeparator(Menu),
+ _ = wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Hide actor in Viewer "),
+ [{enable, false}]),
+ _ = wxMenu:appendSeparator(Menu),
Hide = [menuitem(Menu, ?wxID_ANY, "From (f)", {hide, [From]}),
menuitem(Menu, ?wxID_ANY, "To (t)", {hide, [To]}),
menuitem(Menu, ?wxID_ANY, "Both (b)", {hide, [From, To]})],
- wxMenu:appendSeparator(Menu),
- wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Show actor in Viewer "),
- [{enable, false}]),
- wxMenu:appendSeparator(Menu),
+ _ = wxMenu:appendSeparator(Menu),
+ _ = wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Show actor in Viewer "),
+ [{enable, false}]),
+ _ = wxMenu:appendSeparator(Menu),
Show = [menuitem(Menu, ?wxID_ANY, "From (F)", {show, [From]}),
menuitem(Menu, ?wxID_ANY, "To (T)", {show, [To]}),
menuitem(Menu, ?wxID_ANY, "Both (B)", {show, [From, To]})],
Show++Hide
end,
- wxMenuBar:append(Bar, Menu, "Hide"),
+ _ = wxMenuBar:append(Bar, Menu, "Hide"),
MenuData.
create_search_menu(Bar, S) ->
@@ -549,9 +553,9 @@ create_search_menu(Bar, S) ->
E = S#state.filtered_event,
From = E#event.from,
To = E#event.to,
- wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Search in Viewer "),
- [{enable, false}]),
- wxMenu:appendSeparator(Menu),
+ _ = wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Search in Viewer "),
+ [{enable, false}]),
+ _ = wxMenu:appendSeparator(Menu),
MenuData =
if
S#state.viewer_pid =:= undefined ->
@@ -571,7 +575,7 @@ create_search_menu(Bar, S) ->
menuitem(Menu, ?wxID_ANY, "Reverse from this event (r)", {mode, ModeR}),
menuitem(Menu, ?wxID_ANY, "Abort search. Display all (a)", {mode, all})]
end,
- wxMenuBar:append(Bar, Menu, "Search"),
+ _ = wxMenuBar:append(Bar, Menu, "Search"),
MenuData.
config_editor(Editor, S) ->
@@ -668,9 +672,10 @@ pad_string(String, MinLen, Char, Dir) when is_integer(MinLen), MinLen >= 0 ->
send_viewer_event(S, Event) ->
case S#state.viewer_pid of
ViewerPid when is_pid(ViewerPid) ->
- ViewerPid ! {et, Event};
+ ViewerPid ! {et, Event},
+ ok;
undefined ->
- ignore
+ ok
end.
select_file(Frame, Message, DefaultFile, Style) ->
diff --git a/lib/et/src/et_wx_viewer.erl b/lib/et/src/et_wx_viewer.erl
index 0fc10cb37b..9613299e6b 100644
--- a/lib/et/src/et_wx_viewer.erl
+++ b/lib/et/src/et_wx_viewer.erl
@@ -320,8 +320,8 @@ init([S]) when is_record(S, state) ->
undefined -> ok;
ParentPid -> link(ParentPid)
end,
- wx:new(),
- wx:debug(S#state.wx_debug),
+ _ = wx:new(),
+ _ = wx:debug(S#state.wx_debug),
et_collector:dict_insert(S#state.collector_pid,
{subscriber, self()},
?MODULE),
@@ -532,26 +532,25 @@ handle_info(#wx{id=Id, event = #wxCommand{type = command_menu_selected}}, S=#sta
load_all ->
Style = ?wxFD_OPEN bor ?wxFD_OVERWRITE_PROMPT,
Msg = "Select a file to load events from",
- S2 =
- case select_file(S#state.frame, Msg, S#state.event_file, Style) of
- {ok, NewFile} ->
- et_collector:start_trace_client(CollectorPid, event_file, NewFile),
- S#state{event_file = NewFile};
- cancel ->
- S
- end,
+ S2 = case select_file(S#state.frame, Msg, S#state.event_file, Style) of
+ {ok, NewFile} ->
+ _ = et_collector:start_trace_client(CollectorPid, event_file, NewFile),
+ S#state{event_file = NewFile};
+ cancel ->
+ S
+ end,
noreply(S2);
save_all ->
Style = ?wxFD_SAVE bor ?wxFD_OVERWRITE_PROMPT,
Msg = "Select a file to save events to",
- S2 =
- case select_file(S#state.frame, Msg, S#state.event_file, Style) of
- {ok, NewFile} ->
- et_collector:save_event_file(CollectorPid, NewFile, [existing, write, keep]),
- S#state{event_file = NewFile};
- cancel ->
- S
- end,
+ S2 = case select_file(S#state.frame, Msg, S#state.event_file, Style) of
+ {ok, NewFile} ->
+ ok = et_collector:save_event_file(CollectorPid, NewFile,
+ [existing, write, keep]),
+ S#state{event_file = NewFile};
+ cancel ->
+ S
+ end,
noreply(S2);
print_setup ->
S2 = print_setup(S),
@@ -787,7 +786,7 @@ handle_info(#wx{event = #wxKey{keyCode = KeyCode, shiftDown = SD}}, S) ->
noreply(S)
end;
handle_info(#wx{event = #wxScroll{type = scroll_changed}} = Wx, S) ->
- get_latest_scroll(Wx),
+ _ = get_latest_scroll(Wx),
Pos = wxScrollBar:getThumbPosition(S#state.scroll_bar),
{_, LineTopY, LineBotY} = calc_y(S),
Range = LineBotY - LineTopY,
@@ -1107,7 +1106,7 @@ pick_n([Head | Tail], N, Acc) when N > 0 ->
pick_n(Tail, N - 1, [Head | Acc]).
close_all(S) ->
- close_all_others(S),
+ _ = close_all_others(S),
wxFrame:destroy(S#state.frame),
opt_unlink(S#state.parent_pid),
{stop, shutdown, S}.
@@ -1115,12 +1114,12 @@ close_all(S) ->
close_all_others(S) ->
Fun =
fun({{subscriber, Pid}, _}) ->
- if
- Pid =:= self() ->
- ignore;
+ if Pid =:= self() ->
+ ok;
true ->
unlink(Pid),
- Pid ! {et, close}
+ Pid ! {et, close},
+ ok
end
end,
All = et_collector:dict_match(S#state.collector_pid,
@@ -1208,9 +1207,9 @@ create_main_window(S) ->
CheckBoxData = [{wxCheckBox:getId(HideActions), hide_actions},
{wxCheckBox:getId(HideActors), hide_actors}],
wxPanel:connect(Panel, command_checkbox_clicked),
- wxSizer:add(CheckSizer, HideActions),
- wxSizer:add(CheckSizer,HideActors),
- wxSizer:add(OptSizer, CheckSizer, [{border, 10}, {flag, ?wxALL}]),
+ _ = wxSizer:add(CheckSizer, HideActions),
+ _ = wxSizer:add(CheckSizer,HideActors),
+ _ = wxSizer:add(OptSizer, CheckSizer, [{border, 10}, {flag, ?wxALL}]),
DetailLevelBox = wxStaticBoxSizer:new(?wxHORIZONTAL,
Panel,
[{label, "Detail level"}]),
@@ -1222,22 +1221,21 @@ create_main_window(S) ->
{size, {200,-1}}]),
wxStatusBar:setStatusText(StatusBar, where_text(S)),
wxFrame:connect(Frame, command_slider_updated),
- wxSizer:add(DetailLevelBox, DetailLevel),
- wxSizer:add(OptSizer, DetailLevelBox, [{border, 10}, {flag, ?wxALL}]),
- wxSizer:addStretchSpacer(OptSizer),
- wxSizer:add(MainSizer, OptSizer),
- wxSizer:add(MainSizer,
- wxStaticLine:new(Panel, [{style, ?wxLI_HORIZONTAL}]),
- [{flag, ?wxEXPAND}]),
+ _ = wxSizer:add(DetailLevelBox, DetailLevel),
+ _ = wxSizer:add(OptSizer, DetailLevelBox, [{border, 10}, {flag, ?wxALL}]),
+ _ = wxSizer:addStretchSpacer(OptSizer),
+ _ = wxSizer:add(MainSizer, OptSizer),
+ _ = wxSizer:add(MainSizer, wxStaticLine:new(Panel, [{style, ?wxLI_HORIZONTAL}]),
+ [{flag, ?wxEXPAND}]),
CanvasSizer = wxBoxSizer:new(?wxHORIZONTAL),
Canvas = wxPanel:new(Panel, [{style, ?wxFULL_REPAINT_ON_RESIZE}]),
{CanvasW,CanvasH} = wxPanel:getSize(Canvas),
ScrollBar = wxScrollBar:new(Panel, ?wxID_ANY, [{style, ?wxSB_VERTICAL}]),
- wxSizer:add(CanvasSizer, Canvas, [{flag, ?wxEXPAND}, {proportion, 1}]),
- wxSizer:add(CanvasSizer, ScrollBar, [{flag, ?wxEXPAND}]),
- wxSizer:add(MainSizer, CanvasSizer, [{flag, ?wxEXPAND}, {proportion, 1}]),
+ _ = wxSizer:add(CanvasSizer, Canvas, [{flag, ?wxEXPAND}, {proportion, 1}]),
+ _ = wxSizer:add(CanvasSizer, ScrollBar, [{flag, ?wxEXPAND}]),
+ _ = wxSizer:add(MainSizer, CanvasSizer, [{flag, ?wxEXPAND}, {proportion, 1}]),
wxPanel:connect(Canvas, left_down),
wxPanel:connect(Canvas, left_up),
wxPanel:connect(Canvas, right_up),
@@ -1337,8 +1335,7 @@ menuitem(Menu, Id, Text, UserData) ->
create_file_menu(Bar) ->
Menu = wxMenu:new([]),
- Data = [
- menuitem(Menu, ?wxID_ANY, "Clear all events in the Collector", clear_all),
+ Data = [menuitem(Menu, ?wxID_ANY, "Clear all events in the Collector", clear_all),
menuitem(Menu, ?wxID_ANY, "Load events to the Collector from file", load_all),
menuitem(Menu, ?wxID_ANY, "Save all events in the Collector to file", save_all),
@@ -1348,51 +1345,44 @@ create_file_menu(Bar) ->
menuitem(Menu, ?wxID_ANY, "Close this Viewer", close),
menuitem(Menu, ?wxID_ANY, "Close all other Viewers, but this (c)", close_all_others),
- menuitem(Menu, ?wxID_ANY, "Close all Viewers and the Collector) (C) ", close_all)
- ],
- wxMenu:insertSeparator(Menu, 3),
- wxMenu:insertSeparator(Menu, 7),
+ menuitem(Menu, ?wxID_ANY, "Close all Viewers and the Collector) (C) ", close_all)],
+ _ = wxMenu:insertSeparator(Menu, 3),
+ _ = wxMenu:insertSeparator(Menu, 7),
wxMenuBar:append(Bar, Menu, "File"),
Data.
create_viewer_menu(Bar) ->
Menu = wxMenu:new([]),
- wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Scroll this Viewer"),
- [{enable, false}]),
- wxMenu:appendSeparator(Menu),
- D1 = [
- menuitem(Menu, ?wxID_ANY, "First (f)", first),
+ _ = wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Scroll this Viewer"),
+ [{enable, false}]),
+ _ = wxMenu:appendSeparator(Menu),
+ D1 = [menuitem(Menu, ?wxID_ANY, "First (f)", first),
menuitem(Menu, ?wxID_ANY, "Last (l)", last),
menuitem(Menu, ?wxID_ANY, "Prev (p)", prev),
menuitem(Menu, ?wxID_ANY, "Next (n)", next),
- menuitem(Menu, ?wxID_ANY, "Refresh (r)", refresh)
- ],
- wxMenu:appendSeparator(Menu),
- D2 = [
- menuitem(Menu, ?wxID_ANY, "Up 5 (Up)", up),
- menuitem(Menu, ?wxID_ANY, "Down 5 (Down)", down)
- ],
- wxMenu:appendSeparator(Menu),
- wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Actor visibility in this Viewer"),
- [{enable, false}]),
- wxMenu:appendSeparator(Menu),
+ menuitem(Menu, ?wxID_ANY, "Refresh (r)", refresh)],
+ _ = wxMenu:appendSeparator(Menu),
+ D2 = [menuitem(Menu, ?wxID_ANY, "Up 5 (Up)", up),
+ menuitem(Menu, ?wxID_ANY, "Down 5 (Down)", down)],
+ _ = wxMenu:appendSeparator(Menu),
+ _ = wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Actor visibility in this Viewer"),
+ [{enable, false}]),
+ _ = wxMenu:appendSeparator(Menu),
D3 = [menuitem(Menu, ?wxID_ANY, "Display all actors (a)", display_all)],
- wxMenuBar:append(Bar, Menu, "Viewer"),
+ _ = wxMenuBar:append(Bar, Menu, "Viewer"),
[D1,D2,D3].
create_collector_menu(Bar) ->
Menu = wxMenu:new([]),
- wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Scroll all Viewers"),
- [{enable, false}]),
- wxMenu:appendSeparator(Menu),
- Data = [
- menuitem(Menu, ?wxID_ANY, "First (F)", first_all),
+ _ = wxMenuItem:enable(wxMenu:append(Menu, ?wxID_ANY, "Scroll all Viewers"),
+ [{enable, false}]),
+ _ = wxMenu:appendSeparator(Menu),
+ Data = [menuitem(Menu, ?wxID_ANY, "First (F)", first_all),
menuitem(Menu, ?wxID_ANY, "Last (L)", last_all),
menuitem(Menu, ?wxID_ANY, "Prev (P)", prev_all),
menuitem(Menu, ?wxID_ANY, "Next (N)", next_all),
- menuitem(Menu, ?wxID_ANY, "Refresh (R)", refresh_all)
- ],
- wxMenuBar:append(Bar, Menu, "Collector"),
+ menuitem(Menu, ?wxID_ANY, "Refresh (R)", refresh_all)],
+ _ = wxMenuBar:append(Bar, Menu, "Collector"),
Data.
create_filter_menu(S=#state{filter_menu = {Menu,Data}}, ActiveFilterName, Filters) ->
@@ -1421,21 +1411,19 @@ create_filter_menu(S=#state{filter_menu = {Menu,Data}}, ActiveFilterName, Filter
Same = lists:concat([pad_string(ActiveFilterName, 20), "(=) same scale"]),
Larger = lists:concat([pad_string(ActiveFilterName, 20), "(+) bigger scale"]),
Smaller = lists:concat([pad_string(ActiveFilterName, 20), "(-) smaller scale"]),
- D2 = [
- menuitem(Menu, ?wxID_ANY, Same, {data, Filter, 0}),
+ D2 = [menuitem(Menu, ?wxID_ANY, Same, {data, Filter, 0}),
menuitem(Menu, ?wxID_ANY, Smaller, {data, Filter, -1}),
menuitem(Menu, ?wxID_ANY, Larger, {data, Filter, 1}),
wxMenu:appendSeparator(Menu),
I2 = wxMenu:append(Menu, ?wxID_ANY, "New Filter Same Scale"),
- wxMenu:appendSeparator(Menu)
- ],
- wxMenuItem:enable(I2, [{enable,false}]),
+ wxMenu:appendSeparator(Menu)],
+ _ = wxMenuItem:enable(I2, [{enable,false}]),
{_,D3} = lists:foldl(Item, {1,[]}, Filters),
S#state{filter_menu = {Menu, lists:flatten([D1,D2,D3])}}.
create_help_menu(Bar) ->
Menu = wxMenu:new([]),
- menuitem(Menu, ?wxID_HELP, "Info", help),
+ _ = menuitem(Menu, ?wxID_HELP, "Info", help),
wxMenuBar:append(Bar, Menu, "Help").
clear_canvas(S) ->
diff --git a/lib/eunit/doc/overview.edoc b/lib/eunit/doc/overview.edoc
index 12ea02f442..3a46e991cb 100644
--- a/lib/eunit/doc/overview.edoc
+++ b/lib/eunit/doc/overview.edoc
@@ -690,9 +690,12 @@ it like `debugMsg'. The result is always `ok'.</dd>
<dt>`debugVal(Expr)'</dt>
<dd>Prints both the source code for `Expr' and its current value. E.g.,
`?debugVal(f(X))' might be displayed as "`f(X) = 42'". (Large terms are
-shown truncated.) The result is always the value of `Expr', so this
-macro can be wrapped around any expression to display its value when
-the code is compiled with debugging enabled.</dd>
+truncated to the depth given by the macro `EUNIT_DEBUG_VAL_DEPTH', which
+defaults to 15 but can be overridden by the user.) The result is always the
+value of `Expr', so this macro can be wrapped around any expression to
+display its value when the code is compiled with debugging enabled.</dd>
+<dt>`debugVal(Expr, Depth)'</dt>
+<dd>Like `debugVal(Expr)', but prints terms truncated to the given depth.</dd>
<dt>`debugTime(Text,Expr)'</dt>
<dd>Prints `Text' and the wall clock time for evaluation of `Expr'. The
result is always the value of `Expr', so this macro can be wrapped
diff --git a/lib/eunit/doc/src/notes.xml b/lib/eunit/doc/src/notes.xml
index eef815952d..88602e8222 100644
--- a/lib/eunit/doc/src/notes.xml
+++ b/lib/eunit/doc/src/notes.xml
@@ -33,15 +33,15 @@
</header>
<p>This document describes the changes made to the EUnit application.</p>
-<section><title>Eunit 2.2.14</title>
+<section><title>Eunit 2.3</title>
- <section><title>Fixed Bugs and Malfunctions</title>
+ <section><title>Improvements and New Features</title>
<list>
<item>
+ <p>There is a new <c>debugVal/2</c> that gives control
+ over the truncation depth.</p>
<p>
- Small documentation fixes</p>
- <p>
- Own Id: OTP-13017</p>
+ Own Id: OTP-13612</p>
</item>
</list>
</section>
diff --git a/lib/eunit/include/eunit.hrl b/lib/eunit/include/eunit.hrl
index 8f678b0290..7fd6c206a4 100644
--- a/lib/eunit/include/eunit.hrl
+++ b/lib/eunit/include/eunit.hrl
@@ -212,6 +212,7 @@
-define(debugHere, ok).
-define(debugFmt(S, As), ok).
-define(debugVal(E), (E)).
+-define(debugValAll(E), (E)).
-define(debugTime(S, E), (E)).
-else.
-define(debugMsg(S),
@@ -222,13 +223,18 @@
end).
-define(debugHere, (?debugMsg("<-"))).
-define(debugFmt(S, As), (?debugMsg(io_lib:format((S), (As))))).
--define(debugVal(E),
+-define(debugVal(E, D),
begin
((fun (__V) ->
- ?debugFmt(<<"~ts = ~tP">>, [(??E), __V, 15]),
+ ?debugFmt(<<"~ts = ~tP">>,
+ [(??E), __V, D]),
__V
end)(E))
end).
+-ifndef(EUNIT_DEBUG_VAL_DEPTH).
+-define(EUNIT_DEBUG_VAL_DEPTH, 15).
+-endif.
+-define(debugVal(E), ?debugVal(E, ?EUNIT_DEBUG_VAL_DEPTH)).
-define(debugTime(S, E),
begin
((fun () ->
diff --git a/lib/eunit/vsn.mk b/lib/eunit/vsn.mk
index b8af87872d..b551ee6eb6 100644
--- a/lib/eunit/vsn.mk
+++ b/lib/eunit/vsn.mk
@@ -1 +1 @@
-EUNIT_VSN = 2.2.14
+EUNIT_VSN = 2.3
diff --git a/lib/gs/doc/src/Makefile b/lib/gs/doc/src/Makefile
index b270bc84fe..a24ec77e31 100644
--- a/lib/gs/doc/src/Makefile
+++ b/lib/gs/doc/src/Makefile
@@ -148,7 +148,7 @@ release_docs_spec: docs
$(INSTALL_DIR) "$(RELSYSDIR)/doc/pdf"
$(INSTALL_DATA) $(TOP_PDF_FILE) "$(RELSYSDIR)/doc/pdf"
$(INSTALL_DIR) "$(RELSYSDIR)/doc/html"
- (/bin/cp -rf $(HTMLDIR) "$(RELSYSDIR)/doc")
+ ($(CP) -rf $(HTMLDIR) "$(RELSYSDIR)/doc")
$(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)"
$(INSTALL_DIR) "$(RELEASE_PATH)/man/man3"
$(INSTALL_DATA) $(MAN3DIR)/* "$(RELEASE_PATH)/man/man3"
diff --git a/lib/hipe/amd64/Makefile b/lib/hipe/amd64/Makefile
index 0d81ff4d72..8dc2af2679 100644
--- a/lib/hipe/amd64/Makefile
+++ b/lib/hipe/amd64/Makefile
@@ -73,7 +73,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += -DHIPE_AMD64 +warn_exported_vars
+ERL_COMPILE_FLAGS += -DHIPE_AMD64 -Werror +warn_export_vars
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/amd64/hipe_amd64_ra_sse2_postconditions.erl b/lib/hipe/amd64/hipe_amd64_ra_sse2_postconditions.erl
index 5451f1fe7d..b1f7bd7572 100644
--- a/lib/hipe/amd64/hipe_amd64_ra_sse2_postconditions.erl
+++ b/lib/hipe/amd64/hipe_amd64_ra_sse2_postconditions.erl
@@ -87,22 +87,29 @@ do_fp_unop(I, TempMap) ->
%%% Fix an fmove op.
do_fmove(I, TempMap) ->
#fmove{src=Src,dst=Dst} = I,
- case is_mem_opnd(Dst, TempMap) and is_mem_opnd(Src, TempMap) of
+ case
+ (is_mem_opnd(Src, TempMap) andalso is_mem_opnd(Dst, TempMap))
+ orelse (is_mem_opnd(Src, TempMap) andalso (not is_float_temp(Dst)))
+ orelse ((not is_float_temp(Src)) andalso is_mem_opnd(Dst, TempMap))
+ of
true ->
- Tmp = clone(Src),
+ Tmp = spill_temp(double),
{[#fmove{src=Src, dst=Tmp},I#fmove{src=Tmp,dst=Dst}],
true};
false ->
{[I], false}
end.
+is_float_temp(#x86_temp{type=Type}) -> Type =:= double;
+is_float_temp(#x86_mem{}) -> false.
+
%%% Check if an operand denotes a memory cell (mem or pseudo).
is_mem_opnd(Opnd, TempMap) ->
R =
case Opnd of
#x86_mem{} -> true;
- #x86_temp{} ->
+ #x86_temp{type=double} ->
Reg = hipe_x86:temp_reg(Opnd),
case hipe_x86:temp_is_allocatable(Opnd) of
true ->
@@ -176,6 +183,9 @@ clone(Dst) ->
#x86_mem{} -> hipe_x86:mem_type(Dst);
#x86_temp{} -> hipe_x86:temp_type(Dst)
end,
+ spill_temp(Type).
+
+spill_temp(Type) ->
hipe_x86:mk_new_temp(Type).
%%% Make a certain reg into a clone of Dst
diff --git a/lib/hipe/arm/Makefile b/lib/hipe/arm/Makefile
index 6622680ee1..00b6732afa 100644
--- a/lib/hipe/arm/Makefile
+++ b/lib/hipe/arm/Makefile
@@ -74,7 +74,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/arm/hipe_arm_registers.erl b/lib/hipe/arm/hipe_arm_registers.erl
index 24cd929d41..dcf039676b 100644
--- a/lib/hipe/arm/hipe_arm_registers.erl
+++ b/lib/hipe/arm/hipe_arm_registers.erl
@@ -67,6 +67,8 @@
-define(R15, 15).
-define(LAST_PRECOLOURED, 15). % must handle both GPR and FPR ranges
+-define(LR, ?R14).
+
-define(ARG0, ?R1).
-define(ARG1, ?R2).
-define(ARG2, ?R3).
@@ -114,7 +116,7 @@ stack_pointer() -> ?STACK_POINTER.
proc_pointer() -> ?PROC_POINTER.
-lr() -> ?R14.
+lr() -> ?LR.
pc() -> ?R15.
@@ -198,7 +200,9 @@ call_clobbered() -> % does the RA strip the type or not?
].
tailcall_clobbered() -> % tailcall crapola needs one temp
- [{?TEMP1,tagged},{?TEMP1,untagged}].
+ [{?TEMP1,tagged},{?TEMP1,untagged}
+ ,{?LR,tagged},{?LR,untagged}
+ ].
live_at_return() ->
[%%{?LR,untagged},
diff --git a/lib/hipe/arm/hipe_rtl_to_arm.erl b/lib/hipe/arm/hipe_rtl_to_arm.erl
index ad5a559995..93342aba33 100644
--- a/lib/hipe/arm/hipe_rtl_to_arm.erl
+++ b/lib/hipe/arm/hipe_rtl_to_arm.erl
@@ -148,10 +148,11 @@ mk_shift_ir(S, Dst, Src1, ShiftOp, Src2) ->
mk_li(Tmp, Src1,
mk_shift_rr(S, Dst, Tmp, ShiftOp, Src2)).
-mk_shift_ri(S, Dst, Src1, ShiftOp, Src2) when is_integer(Src2) ->
- if Src2 >= 0, Src2 < 32 -> ok;
- true -> io:format("~w: excessive immediate shift ~w\n", [?MODULE,Src2])
- end,
+mk_shift_ri(S, Dst, Src1, ShiftOp, 0)
+ when ShiftOp =:= lsl; ShiftOp =:= lsr; ShiftOp =:= asr ->
+ [hipe_arm:mk_move(S, Dst, Src1)];
+mk_shift_ri(S, Dst, Src1, ShiftOp, Src2)
+ when is_integer(Src2), Src2 > 0, Src2 < 32 ->
Am1 = {Src1,ShiftOp,Src2},
[hipe_arm:mk_move(S, Dst, Am1)].
diff --git a/lib/hipe/cerl/Makefile b/lib/hipe/cerl/Makefile
index 78930154a9..9f50d6bf91 100644
--- a/lib/hipe/cerl/Makefile
+++ b/lib/hipe/cerl/Makefile
@@ -66,7 +66,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += -Werror +inline +warn_exported_vars +warn_unused_import +warn_missing_spec #+warn_untyped_record
+ERL_COMPILE_FLAGS += +inline -Werror +warn_export_vars +warn_unused_import +warn_missing_spec #+warn_untyped_record
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/cerl/cerl_pmatch.erl b/lib/hipe/cerl/cerl_pmatch.erl
index 594f2bf81c..ca27fff1dd 100644
--- a/lib/hipe/cerl/cerl_pmatch.erl
+++ b/lib/hipe/cerl/cerl_pmatch.erl
@@ -231,12 +231,9 @@ match_typegroup(T, V, Vs, Gs, Else, Env) ->
Else, Env),
typetest_clause(T, V, Body, Env).
-match_congroup({?binary_id, Segs}, Vs, Cs, _Else, Env) ->
- Ref = get_unique(),
- Guard = cerl:c_primop(cerl:c_atom(set_label), [cerl:c_int(Ref)]),
- NewElse = cerl:c_primop(cerl:c_atom(goto_label), [cerl:c_int(Ref)]),
- Body = match(Vs, Cs, NewElse, Env),
- cerl:c_clause([make_pat(?binary_id, Segs)], Guard, Body);
+match_congroup({?binary_id, Segs}, Vs, Cs, Else, Env) ->
+ Body = match(Vs, Cs, Else, Env),
+ cerl:c_clause([make_pat(?binary_id, Segs)], Body);
match_congroup({D, A}, Vs, Cs, Else, Env) ->
Vs1 = new_vars(A, Env),
@@ -415,6 +412,15 @@ make_let(Vs, A, B) ->
expr(E, Env) ->
case cerl:type(E) of
+ binary ->
+ Es = expr_list(cerl:binary_segments(E), Env),
+ cerl:update_c_binary(E, Es);
+ bitstr ->
+ V = expr(cerl:bitstr_val(E), Env),
+ Sz = expr(cerl:bitstr_size(E), Env),
+ Unit = expr(cerl:bitstr_unit(E), Env),
+ Type = expr(cerl:bitstr_type(E), Env),
+ cerl:update_c_bitstr(E, V, Sz, Unit, Type, cerl:bitstr_flags(E));
literal ->
E;
var ->
@@ -584,16 +590,6 @@ is_simple(E) ->
end.
-get_unique() ->
- case get(unique_label) of
- undefined ->
- put(unique_label, 1),
- 0;
- N ->
- put(unique_label, N+1),
- N
- end.
-
%% ---------------------------------------------------------------------
%% Abstract datatype: environment()
diff --git a/lib/hipe/cerl/erl_bif_types.erl b/lib/hipe/cerl/erl_bif_types.erl
index 9453ca6c6f..230fce2e68 100644
--- a/lib/hipe/cerl/erl_bif_types.erl
+++ b/lib/hipe/cerl/erl_bif_types.erl
@@ -124,7 +124,7 @@
t_map_entries/2,
t_map_put/3,
t_map_update/3,
- map_pairwise_merge/3
+ t_map_pairwise_merge/4
]).
-ifdef(DO_ERL_BIF_TYPES_TEST).
@@ -1689,10 +1689,10 @@ type(maps, merge, 2, Xs, Opaques) ->
BDefK = t_map_def_key(MapB, Opaques),
ADefV = t_map_def_val(MapA, Opaques),
BDefV = t_map_def_val(MapB, Opaques),
- t_map(map_pairwise_merge(
+ t_map(t_map_pairwise_merge(
fun(K, _, _, mandatory, V) -> {K, mandatory, V};
(K, MNess, VA, optional, VB) -> {K, MNess, t_sup(VA,VB)}
- end, MapA, MapB),
+ end, MapA, MapB, Opaques),
t_sup(ADefK, BDefK), t_sup(ADefV, BDefV))
end, Opaques);
type(maps, put, 3, Xs, Opaques) ->
diff --git a/lib/hipe/cerl/erl_types.erl b/lib/hipe/cerl/erl_types.erl
index 84addcc105..15f7b793a1 100644
--- a/lib/hipe/cerl/erl_types.erl
+++ b/lib/hipe/cerl/erl_types.erl
@@ -80,11 +80,9 @@
t_float/0,
t_var_names/1,
t_form_to_string/1,
- t_from_form/4,
- t_from_form/5,
+ t_from_form/6,
t_from_form_without_remote/3,
- t_check_record_fields/4,
- t_check_record_fields/5,
+ t_check_record_fields/6,
t_from_range/2,
t_from_range_unsafe/2,
t_from_term/1,
@@ -161,6 +159,7 @@
t_map_get/2, t_map_get/3,
t_map_is_key/2, t_map_is_key/3,
t_map_update/2, t_map_update/3,
+ t_map_pairwise_merge/4,
t_map_put/2, t_map_put/3,
t_matchstate/0,
t_matchstate/2,
@@ -220,7 +219,8 @@
is_opaque_type/2,
is_erl_type/1,
atom_to_string/1,
- map_pairwise_merge/3
+ var_table__new/0,
+ cache__new/0
]).
%%-define(DO_ERL_TYPES_TEST, true).
@@ -236,7 +236,7 @@
-export([t_is_identifier/1]).
-endif.
--export_type([erl_type/0, opaques/0, type_table/0]).
+-export_type([erl_type/0, opaques/0, type_table/0, var_table/0, cache/0]).
%%-define(DEBUG, true).
@@ -327,7 +327,7 @@
%% Auxiliary types and convenient macros
%%
--type parse_form() :: erl_parse:abstract_expr().
+-type parse_form() :: erl_parse:abstract_type().
-type rng_elem() :: 'pos_inf' | 'neg_inf' | integer().
-record(int_set, {set :: [integer()]}).
@@ -374,13 +374,15 @@
-type opaques() :: [erl_type()] | 'universe'.
-type record_key() :: {'record', atom()}.
--type type_key() :: {'type' | 'opaque', atom(), arity()}.
+-type type_key() :: {'type' | 'opaque', mfa()}.
-type record_value() :: [{atom(), erl_parse:abstract_expr(), erl_type()}].
--type type_value() :: {module(), erl_type(), atom()}.
+-type type_value() :: {{module(), {file:name(), erl_anno:line()},
+ erl_parse:abstract_type(), ArgNames :: [atom()]},
+ erl_type()}.
-type type_table() :: dict:dict(record_key() | type_key(),
record_value() | type_value()).
--type var_table() :: #{atom() => erl_type()}.
+-opaque var_table() :: #{atom() => erl_type()}.
%%-----------------------------------------------------------------------------
%% Unions
@@ -492,9 +494,9 @@ t_contains_opaque(?function(Domain, Range), Opaques) ->
t_contains_opaque(Domain, Opaques)
orelse t_contains_opaque(Range, Opaques);
t_contains_opaque(?identifier(_Types), _Opaques) -> false;
-t_contains_opaque(?integer(_Types), _Opaques) -> false;
t_contains_opaque(?int_range(_From, _To), _Opaques) -> false;
t_contains_opaque(?int_set(_Set), _Opaques) -> false;
+t_contains_opaque(?integer(_Types), _Opaques) -> false;
t_contains_opaque(?list(Type, Tail, _), Opaques) ->
t_contains_opaque(Type, Opaques) orelse t_contains_opaque(Tail, Opaques);
t_contains_opaque(?map(_, _, _) = Map, Opaques) ->
@@ -756,8 +758,8 @@ t_opaque_from_records(RecDict) ->
{{Module, _FileLine, _Form, ArgNames}, _Type}) ->
%% Args = args_to_types(ArgNames),
%% List = lists:zip(ArgNames, Args),
- %% TmpVarDict = dict:from_list(List),
- %% Rep = t_from_form(Type, RecDict, TmpVarDict),
+ %% TmpVarTab = maps:to_list(List),
+ %% Rep = t_from_form(Type, RecDict, TmpVarTab),
Rep = t_any(), % not used for anything right now
Args = [t_any() || _ <- ArgNames],
t_opaque(Module, Name, Args, Rep)
@@ -1662,10 +1664,12 @@ t_map(Pairs0, DefK0, DefV0) ->
%% define(DEBUG, true).
try
validate_map_elements(Pairs)
- catch error:badarg -> error(badarg, [Pairs0,DefK0,DefV0]);
- error:{badarg, E} -> error({badarg, E}, [Pairs0,DefK0,DefV0])
+ catch error:badarg -> error(badarg, [Pairs0,DefK0,DefV0])
end,
- ?map(Pairs, DefK, DefV).
+ case map_pairs_are_none(Pairs) of
+ true -> ?none;
+ false -> ?map(Pairs, DefK, DefV)
+ end.
normalise_map_optionals([], _, _) -> [];
normalise_map_optionals([E={K,?opt,?none}|T], DefK, DefV) ->
@@ -1682,7 +1686,6 @@ normalise_map_optionals([E={K,?opt,V}|T], DefK, DefV) ->
normalise_map_optionals([E|T], DefK, DefV) ->
[E|normalise_map_optionals(T, DefK, DefV)].
-validate_map_elements([{_,?mand,?none}|_]) -> error({badarg, none_in_mand});
validate_map_elements([{K1,_,_}|Rest=[{K2,_,_}|_]]) ->
case is_singleton_type(K1) andalso K1 < K2 of
false -> error(badarg);
@@ -1695,6 +1698,10 @@ validate_map_elements([{K,_,_}]) ->
end;
validate_map_elements([]) -> true.
+map_pairs_are_none([]) -> false;
+map_pairs_are_none([{_,?mand,?none}|_]) -> true;
+map_pairs_are_none([_|Ps]) -> map_pairs_are_none(Ps).
+
-spec t_is_map(erl_type()) -> boolean().
t_is_map(Type) ->
@@ -1750,43 +1757,58 @@ map_def_val(?map(_,_,DefV)) ->
-spec mapdict_store(t_map_pair(), t_map_dict()) -> t_map_dict().
mapdict_store(E={K,_,_}, [{K,_,_}|T]) -> [E|T];
-mapdict_store(E1={K1,_,_}, [E2={K2,_,_}|T]) when K1 > K2->
+mapdict_store(E1={K1,_,_}, [E2={K2,_,_}|T]) when K1 > K2 ->
[E2|mapdict_store(E1, T)];
mapdict_store(E={_,_,_}, T) -> [E|T].
-spec mapdict_insert(t_map_pair(), t_map_dict()) -> t_map_dict().
mapdict_insert(E={K,_,_}, D=[{K,_,_}|_]) -> error(badarg, [E, D]);
-mapdict_insert(E1={K1,_,_}, [E2={K2,_,_}|T]) when K1 > K2->
+mapdict_insert(E1={K1,_,_}, [E2={K2,_,_}|T]) when K1 > K2 ->
[E2|mapdict_insert(E1, T)];
mapdict_insert(E={_,_,_}, T) -> [E|T].
+-type map_pairwise_merge_fun() :: fun((erl_type(),
+ t_map_mandatoriness(), erl_type(),
+ t_map_mandatoriness(), erl_type())
+ -> t_map_pair() | false).
+
+-spec t_map_pairwise_merge(map_pairwise_merge_fun(), erl_type(), erl_type(),
+ opaques()) -> t_map_dict().
+t_map_pairwise_merge(F, MapA, MapB, Opaques) ->
+ do_opaque(MapA, Opaques,
+ fun(UMapA) ->
+ do_opaque(MapB, Opaques,
+ fun(UMapB) ->
+ map_pairwise_merge(F, UMapA, UMapB)
+ end)
+ end).
+
%% Merges the pairs of two maps together. Missing pairs become (?opt, DefV) or
%% (?opt, ?none), depending on whether K \in DefK.
--spec map_pairwise_merge(fun((erl_type(),
- t_map_mandatoriness(), erl_type(),
- t_map_mandatoriness(), erl_type())
- -> t_map_pair() | false),
- erl_type(), erl_type()) -> t_map_dict().
+-spec map_pairwise_merge(map_pairwise_merge_fun(), erl_type(), erl_type())
+ -> t_map_dict().
map_pairwise_merge(F, ?map(APairs, ADefK, ADefV),
?map(BPairs, BDefK, BDefV)) ->
map_pairwise_merge(F, APairs, ADefK, ADefV, BPairs, BDefK, BDefV).
map_pairwise_merge(_, [], _, _, [], _, _) -> [];
map_pairwise_merge(F, As0, ADefK, ADefV, Bs0, BDefK, BDefV) ->
- case {As0, Bs0} of
- {[{K,AMNess,AV}|As], [{K, BMNess,BV}|Bs]} -> ok;
- {[{K,AMNess,AV}|As], [{BK,_, _ }|_]=Bs} when K < BK ->
- {BMNess, BV} = {?opt, mapmerge_otherv(K, BDefK, BDefV)};
- {As, [{K, BMNess,BV}|Bs]} ->
- {AMNess, AV} = {?opt, mapmerge_otherv(K, ADefK, ADefV)};
- {[{K,AMNess,AV}|As], []=Bs} ->
- {BMNess, BV} = {?opt, mapmerge_otherv(K, BDefK, BDefV)}
- end,
- MK = K, %% Rename to make clear that we are matching below
- case F(K, AMNess, AV, BMNess, BV) of
- false -> map_pairwise_merge(F,As,ADefK,ADefV,Bs,BDefK,BDefV);
- M={MK,_,_} -> [M|map_pairwise_merge(F,As,ADefK,ADefV,Bs,BDefK,BDefV)]
+ {K1, AMNess1, AV1, As1, BMNess1, BV1, Bs1} =
+ case {As0, Bs0} of
+ {[{K,AMNess,AV}|As], [{K, BMNess,BV}|Bs]} ->
+ {K, AMNess, AV, As, BMNess, BV, Bs};
+ {[{K,AMNess,AV}|As], [{BK,_, _ }|_]=Bs} when K < BK ->
+ {K, AMNess, AV, As, ?opt, mapmerge_otherv(K, BDefK, BDefV), Bs};
+ {As, [{K, BMNess,BV}|Bs]} ->
+ {K, ?opt, mapmerge_otherv(K, ADefK, ADefV), As, BMNess, BV, Bs};
+ {[{K,AMNess,AV}|As], []=Bs} ->
+ {K, AMNess, AV, As, ?opt, mapmerge_otherv(K, BDefK, BDefV), Bs}
+ end,
+ MK = K1, %% Rename to make clear that we are matching below
+ case F(K1, AMNess1, AV1, BMNess1, BV1) of
+ false -> map_pairwise_merge(F,As1,ADefK,ADefV,Bs1,BDefK,BDefV);
+ {MK,_,_}=M -> [M|map_pairwise_merge(F,As1,ADefK,ADefV,Bs1,BDefK,BDefV)]
end.
%% Folds over the pairs in two maps simultaneously in reverse key order. Missing
@@ -1803,17 +1825,19 @@ map_pairwise_merge_foldr(F, AccIn, ?map(APairs, ADefK, ADefV),
map_pairwise_merge_foldr(_, Acc, [], _, _, [], _, _) -> Acc;
map_pairwise_merge_foldr(F, AccIn, As0, ADefK, ADefV, Bs0, BDefK, BDefV) ->
- case {As0, Bs0} of
- {[{K,AMNess,AV}|As], [{K, BMNess,BV}|Bs]} -> ok;
- {[{K,AMNess,AV}|As], [{BK,_, _ }|_]=Bs} when K < BK ->
- {BMNess, BV} = {?opt, mapmerge_otherv(K, BDefK, BDefV)};
- {As, [{K, BMNess,BV}|Bs]} ->
- {AMNess, AV} = {?opt, mapmerge_otherv(K, ADefK, ADefV)};
- {[{K,AMNess,AV}|As], []=Bs} ->
- {BMNess, BV} = {?opt, mapmerge_otherv(K, BDefK, BDefV)}
- end,
- F(K, AMNess, AV, BMNess, BV,
- map_pairwise_merge_foldr(F,AccIn,As,ADefK,ADefV,Bs,BDefK,BDefV)).
+ {K1, AMNess1, AV1, As1, BMNess1, BV1, Bs1} =
+ case {As0, Bs0} of
+ {[{K,AMNess,AV}|As], [{K,BMNess,BV}|Bs]} ->
+ {K, AMNess, AV, As, BMNess, BV, Bs};
+ {[{K,AMNess,AV}|As], [{BK,_, _ }|_]=Bs} when K < BK ->
+ {K, AMNess, AV, As, ?opt, mapmerge_otherv(K, BDefK, BDefV), Bs};
+ {As, [{K,BMNess,BV}|Bs]} ->
+ {K, ?opt, mapmerge_otherv(K, ADefK, ADefV), As, BMNess, BV, Bs};
+ {[{K,AMNess,AV}|As], []=Bs} ->
+ {K, AMNess, AV, As, ?opt, mapmerge_otherv(K, BDefK, BDefV), Bs}
+ end,
+ F(K1, AMNess1, AV1, BMNess1, BV1,
+ map_pairwise_merge_foldr(F,AccIn,As1,ADefK,ADefV,Bs1,BDefK,BDefV)).
%% By observing that a missing pair in a map is equivalent to an optional pair,
%% with ?none or DefV value, depending on whether K \in DefK, we can simplify
@@ -2827,12 +2851,7 @@ t_inf(?map(_, ADefK, ADefV) = A, ?map(_, BDefK, BDefV) = B, _Opaques) ->
%% becomes mandatory in the infinumum
(K, _, V1, _, V2) -> {K, ?mand, t_inf(V1, V2)}
end, A, B),
- %% If the infinimum of any mandatory values is ?none, the entire map infinimum
- %% is ?none.
- case lists:any(fun({_,?mand,?none})->true; ({_,_,_}) -> false end, Pairs) of
- true -> t_none();
- false -> t_map(Pairs, t_inf(ADefK, BDefK), t_inf(ADefV, BDefV))
- end;
+ t_map(Pairs, t_inf(ADefK, BDefK), t_inf(ADefV, BDefV));
t_inf(?matchstate(Pres1, Slots1), ?matchstate(Pres2, Slots2), _Opaques) ->
?matchstate(t_inf(Pres1, Pres2), t_inf(Slots1, Slots2));
t_inf(?nil, ?nil, _Opaques) -> ?nil;
@@ -4298,7 +4317,6 @@ t_to_string(?map(Pairs0,DefK,DefV), RecDict) ->
{Pairs, ExtraEl} =
case {DefK, DefV} of
{?none, ?none} -> {Pairs0, []};
- {?any, ?any} -> {Pairs0, ["..."]};
_ -> {Pairs0 ++ [{DefK,?opt,DefV}], []}
end,
Tos = fun(T) -> case T of
@@ -4410,33 +4428,30 @@ mod_name(Mod, Name) ->
-type type_names() :: [type_key() | record_key()].
--type mta() :: {module(), atom(), arity()}.
--type mra() :: {module(), atom(), arity()}.
--type site() :: {'type', mta()} | {'spec', mfa()} | {'record', mra()}.
+-type mta() :: {module(), atom(), arity()}.
+-type mra() :: {module(), atom(), arity()}.
+-type site() :: {'type', mta()} | {'spec', mfa()} | {'record', mra()}.
+-type cache_key() :: {module(), atom(), expand_depth(),
+ [erl_type()], type_names()}.
+-opaque cache() :: #{cache_key() => {erl_type(), expand_limit()}}.
--spec t_from_form(parse_form(), sets:set(mfa()),
- site(), mod_records()) -> erl_type().
+-spec t_from_form(parse_form(), sets:set(mfa()), site(), mod_records(),
+ var_table(), cache()) -> {erl_type(), cache()}.
-t_from_form(Form, ExpTypes, Site, RecDict) ->
- t_from_form(Form, ExpTypes, Site, RecDict, maps:new()).
-
--spec t_from_form(parse_form(), sets:set(mfa()),
- site(), mod_records(), var_table()) -> erl_type().
-
-t_from_form(Form, ExpTypes, Site, RecDict, VarDict) ->
- {T, _} = t_from_form1(Form, ExpTypes, Site, RecDict, VarDict),
- T.
+t_from_form(Form, ExpTypes, Site, RecDict, VarTab, Cache) ->
+ t_from_form1(Form, ExpTypes, Site, RecDict, VarTab, Cache).
%% Replace external types with with none().
-spec t_from_form_without_remote(parse_form(), site(), type_table()) ->
- erl_type().
+ {erl_type(), cache()}.
t_from_form_without_remote(Form, Site, TypeTable) ->
Module = site_module(Site),
RecDict = dict:from_list([{Module, TypeTable}]),
ExpTypes = replace_by_none,
- {T, _} = t_from_form1(Form, ExpTypes, Site, RecDict, maps:new()),
- T.
+ VarTab = var_table__new(),
+ Cache = cache__new(),
+ t_from_form1(Form, ExpTypes, Site, RecDict, VarTab, Cache).
%% REC_TYPE_LIMIT is used for limiting the depth of recursive types.
%% EXPAND_LIMIT is used for limiting the size of types by
@@ -4449,34 +4464,53 @@ t_from_form_without_remote(Form, Site, TypeTable) ->
-type expand_depth() :: integer().
+-record(from_form, {site :: site(),
+ xtypes :: sets:set(mfa()) | 'replace_by_none',
+ mrecs :: mod_records(),
+ vtab :: var_table(),
+ tnames :: type_names()}).
+
-spec t_from_form1(parse_form(), sets:set(mfa()) | 'replace_by_none',
- site(), mod_records(), var_table()) ->
- {erl_type(), expand_limit()}.
+ site(), mod_records(), var_table(), cache()) ->
+ {erl_type(), cache()}.
-t_from_form1(Form, ET, Site, MR, V) ->
+t_from_form1(Form, ET, Site, MR, V, C) ->
TypeNames = initial_typenames(Site),
- t_from_form1(Form, TypeNames, ET, Site, MR, V, ?EXPAND_DEPTH).
+ State = #from_form{site = Site,
+ xtypes = ET,
+ mrecs = MR,
+ vtab = V,
+ tnames = TypeNames},
+ L = ?EXPAND_LIMIT,
+ {T1, L1, C1} = from_form(Form, State, ?EXPAND_DEPTH, L, C),
+ if
+ L1 =< 0 ->
+ from_form_loop(Form, State, 1, L, C1);
+ true ->
+ {T1, C1}
+ end.
initial_typenames({type, _MTA}=Site) -> [Site];
initial_typenames({spec, _MFA}) -> [];
initial_typenames({record, _MRA}) -> [].
-t_from_form1(Form, TypeNames, ET, Site, MR, V, D) ->
- L = ?EXPAND_LIMIT,
- {T, L1} = t_from_form(Form, TypeNames, ET, Site, MR, V, D, L),
+from_form_loop(Form, State, D, Limit, C) ->
+ {T1, L1, C1} = from_form(Form, State, D, Limit, C),
+ Delta = Limit - L1,
if
- L1 =< 0, D > 1 ->
- D1 = D div 2,
- t_from_form1(Form, TypeNames, ET, Site, MR, V, D1);
+ %% Save some time by assuming next depth will exceed the limit.
+ Delta * 8 > Limit ->
+ {T1, C1};
true ->
- {T, L1}
+ D1 = D + 1,
+ from_form_loop(Form, State, D1, Limit, C1)
end.
--spec t_from_form(parse_form(), type_names(),
- sets:set(mfa()) | 'replace_by_none',
- site(), mod_records(), var_table(),
- expand_depth(), expand_limit())
- -> {erl_type(), expand_limit()}.
+-spec from_form(parse_form(),
+ #from_form{},
+ expand_depth(),
+ expand_limit(),
+ cache()) -> {erl_type(), expand_limit(), cache()}.
%% If there is something wrong with parse_form()
%% throw({error, io_lib:chars()} is called;
@@ -4486,330 +4520,336 @@ t_from_form1(Form, TypeNames, ET, Site, MR, V, D) ->
%%
%% It is assumed that site_module(S) can be found in MR.
-t_from_form(_, _TypeNames, _ET, _S, _MR, _V, D, L) when D =< 0 ; L =< 0 ->
- {t_any(), L};
-t_from_form({var, _L, '_'}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_any(), L};
-t_from_form({var, _L, Name}, _TypeNames, _ET, _S, _MR, V, _D, L) ->
+from_form(_, _S, D, L, C) when D =< 0 ; L =< 0 ->
+ {t_any(), L, C};
+from_form({var, _L, '_'}, _S, _D, L, C) ->
+ {t_any(), L, C};
+from_form({var, _L, Name}, S, _D, L, C) ->
+ V = S#from_form.vtab,
case maps:find(Name, V) of
- error -> {t_var(Name), L};
- {ok, Val} -> {Val, L}
+ error -> {t_var(Name), L, C};
+ {ok, Val} -> {Val, L, C}
end;
-t_from_form({ann_type, _L, [_Var, Type]}, TypeNames, ET, S, MR, V, D, L) ->
- t_from_form(Type, TypeNames, ET, S, MR, V, D, L);
-t_from_form({paren_type, _L, [Type]}, TypeNames, ET, S, MR, V, D, L) ->
- t_from_form(Type, TypeNames, ET, S, MR, V, D, L);
-t_from_form({remote_type, _L, [{atom, _, Module}, {atom, _, Type}, Args]},
- TypeNames, ET, S, MR, V, D, L) ->
- remote_from_form(Module, Type, Args, TypeNames, ET, S, MR, V, D, L);
-t_from_form({atom, _L, Atom}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_atom(Atom), L};
-t_from_form({integer, _L, Int}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_integer(Int), L};
-t_from_form({op, _L, _Op, _Arg} = Op, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
+from_form({ann_type, _L, [_Var, Type]}, S, D, L, C) ->
+ from_form(Type, S, D, L, C);
+from_form({paren_type, _L, [Type]}, S, D, L, C) ->
+ from_form(Type, S, D, L, C);
+from_form({remote_type, _L, [{atom, _, Module}, {atom, _, Type}, Args]},
+ S, D, L, C) ->
+ remote_from_form(Module, Type, Args, S, D, L, C);
+from_form({atom, _L, Atom}, _S, _D, L, C) ->
+ {t_atom(Atom), L, C};
+from_form({integer, _L, Int}, _S, _D, L, C) ->
+ {t_integer(Int), L, C};
+from_form({op, _L, _Op, _Arg} = Op, _S, _D, L, C) ->
case erl_eval:partial_eval(Op) of
{integer, _, Val} ->
- {t_integer(Val), L};
+ {t_integer(Val), L, C};
_ -> throw({error, io_lib:format("Unable to evaluate type ~w\n", [Op])})
end;
-t_from_form({op, _L, _Op, _Arg1, _Arg2} = Op, _TypeNames,
- _ET, _S, _MR, _V, _D, L) ->
+from_form({op, _L, _Op, _Arg1, _Arg2} = Op, _S, _D, L, C) ->
case erl_eval:partial_eval(Op) of
{integer, _, Val} ->
- {t_integer(Val), L};
+ {t_integer(Val), L, C};
_ -> throw({error, io_lib:format("Unable to evaluate type ~w\n", [Op])})
end;
-t_from_form({type, _L, any, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_any(), L};
-t_from_form({type, _L, arity, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_arity(), L};
-t_from_form({type, _L, atom, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_atom(), L};
-t_from_form({type, _L, binary, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_binary(), L};
-t_from_form({type, _L, binary, [Base, Unit]} = Type,
- _TypeNames, _ET, _S, _MR, _V, _D, L) ->
+from_form({type, _L, any, []}, _S, _D, L, C) ->
+ {t_any(), L, C};
+from_form({type, _L, arity, []}, _S, _D, L, C) ->
+ {t_arity(), L, C};
+from_form({type, _L, atom, []}, _S, _D, L, C) ->
+ {t_atom(), L, C};
+from_form({type, _L, binary, []}, _S, _D, L, C) ->
+ {t_binary(), L, C};
+from_form({type, _L, binary, [Base, Unit]} = Type, _S, _D, L, C) ->
case {erl_eval:partial_eval(Base), erl_eval:partial_eval(Unit)} of
{{integer, _, B}, {integer, _, U}} when B >= 0, U >= 0 ->
- {t_bitstr(U, B), L};
+ {t_bitstr(U, B), L, C};
_ -> throw({error, io_lib:format("Unable to evaluate type ~w\n", [Type])})
end;
-t_from_form({type, _L, bitstring, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_bitstr(), L};
-t_from_form({type, _L, bool, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_boolean(), L}; % XXX: Temporarily
-t_from_form({type, _L, boolean, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_boolean(), L};
-t_from_form({type, _L, byte, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_byte(), L};
-t_from_form({type, _L, char, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_char(), L};
-t_from_form({type, _L, float, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_float(), L};
-t_from_form({type, _L, function, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_fun(), L};
-t_from_form({type, _L, 'fun', []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_fun(), L};
-t_from_form({type, _L, 'fun', [{type, _, any}, Range]}, TypeNames,
- ET, S, MR, V, D, L) ->
- {T, L1} = t_from_form(Range, TypeNames, ET, S, MR, V, D - 1, L - 1),
- {t_fun(T), L1};
-t_from_form({type, _L, 'fun', [{type, _, product, Domain}, Range]},
- TypeNames, ET, S, MR, V, D, L) ->
- {Dom1, L1} = list_from_form(Domain, TypeNames, ET, S, MR, V, D, L),
- {Ran1, L2} = t_from_form(Range, TypeNames, ET, S, MR, V, D, L1),
- {t_fun(Dom1, Ran1), L2};
-t_from_form({type, _L, identifier, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_identifier(), L};
-t_from_form({type, _L, integer, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_integer(), L};
-t_from_form({type, _L, iodata, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_iodata(), L};
-t_from_form({type, _L, iolist, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_iolist(), L};
-t_from_form({type, _L, list, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_list(), L};
-t_from_form({type, _L, list, [Type]}, TypeNames, ET, S, MR, V, D, L) ->
- {T, L1} = t_from_form(Type, TypeNames, ET, S, MR, V, D - 1, L - 1),
- {t_list(T), L1};
-t_from_form({type, _L, map, any}, TypeNames, ET, S, MR, V, D, L) ->
- builtin_type(map, t_map(), TypeNames, ET, S, MR, V, D, L);
-t_from_form({type, _L, map, List}, TypeNames, ET, S, MR, V, D, L) ->
- {Pairs1, L5} =
- fun PairsFromForm(_, L1) when L1 =< 0 -> {[{?any,?opt,?any}], L1};
- PairsFromForm([], L1) -> {[], L1};
- PairsFromForm([{type, _, Oper, [KF, VF]}|T], L1) ->
- {Key, L2} = t_from_form(KF, TypeNames, ET, S, MR, V, D - 1, L1),
- {Val, L3} = t_from_form(VF, TypeNames, ET, S, MR, V, D - 1, L2),
- {Pairs0, L4} = PairsFromForm(T, L3 - 1),
+from_form({type, _L, bitstring, []}, _S, _D, L, C) ->
+ {t_bitstr(), L, C};
+from_form({type, _L, bool, []}, _S, _D, L, C) ->
+ {t_boolean(), L, C}; % XXX: Temporarily
+from_form({type, _L, boolean, []}, _S, _D, L, C) ->
+ {t_boolean(), L, C};
+from_form({type, _L, byte, []}, _S, _D, L, C) ->
+ {t_byte(), L, C};
+from_form({type, _L, char, []}, _S, _D, L, C) ->
+ {t_char(), L, C};
+from_form({type, _L, float, []}, _S, _D, L, C) ->
+ {t_float(), L, C};
+from_form({type, _L, function, []}, _S, _D, L, C) ->
+ {t_fun(), L, C};
+from_form({type, _L, 'fun', []}, _S, _D, L, C) ->
+ {t_fun(), L, C};
+from_form({type, _L, 'fun', [{type, _, any}, Range]}, S, D, L, C) ->
+ {T, L1, C1} = from_form(Range, S, D - 1, L - 1, C),
+ {t_fun(T), L1, C1};
+from_form({type, _L, 'fun', [{type, _, product, Domain}, Range]},
+ S, D, L, C) ->
+ {Dom1, L1, C1} = list_from_form(Domain, S, D, L, C),
+ {Ran1, L2, C2} = from_form(Range, S, D, L1, C1),
+ {t_fun(Dom1, Ran1), L2, C2};
+from_form({type, _L, identifier, []}, _S, _D, L, C) ->
+ {t_identifier(), L, C};
+from_form({type, _L, integer, []}, _S, _D, L, C) ->
+ {t_integer(), L, C};
+from_form({type, _L, iodata, []}, _S, _D, L, C) ->
+ {t_iodata(), L, C};
+from_form({type, _L, iolist, []}, _S, _D, L, C) ->
+ {t_iolist(), L, C};
+from_form({type, _L, list, []}, _S, _D, L, C) ->
+ {t_list(), L, C};
+from_form({type, _L, list, [Type]}, S, D, L, C) ->
+ {T, L1, C1} = from_form(Type, S, D - 1, L - 1, C),
+ {t_list(T), L1, C1};
+from_form({type, _L, map, any}, S, D, L, C) ->
+ builtin_type(map, t_map(), S, D, L, C);
+from_form({type, _L, map, List}, S, D0, L, C) ->
+ {Pairs1, L5, C5} =
+ fun PairsFromForm(_, L1, C1) when L1 =< 0 -> {[{?any,?opt,?any}], L1, C1};
+ PairsFromForm([], L1, C1) -> {[], L1, C1};
+ PairsFromForm([{type, _, Oper, [KF, VF]}|T], L1, C1) ->
+ D = D0 - 1,
+ {Key, L2, C2} = from_form(KF, S, D, L1, C1),
+ {Val, L3, C3} = from_form(VF, S, D, L2, C2),
+ {Pairs0, L4, C4} = PairsFromForm(T, L3 - 1, C3),
case Oper of
- map_field_assoc -> {[{Key,?opt, Val}|Pairs0], L4};
- map_field_exact -> {[{Key,?mand,Val}|Pairs0], L4}
+ map_field_assoc -> {[{Key,?opt, Val}|Pairs0], L4, C4};
+ map_field_exact -> {[{Key,?mand,Val}|Pairs0], L4, C4}
end
- end(List, L),
+ end(List, L, C),
try
{Pairs, DefK, DefV} = map_from_form(Pairs1, [], [], [], ?none, ?none),
- {t_map(Pairs, DefK, DefV), L5}
- catch none -> {t_none(), L5}
+ {t_map(Pairs, DefK, DefV), L5, C5}
+ catch none -> {t_none(), L5, C5}
end;
-t_from_form({type, _L, mfa, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_mfa(), L};
-t_from_form({type, _L, module, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_module(), L};
-t_from_form({type, _L, nil, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_nil(), L};
-t_from_form({type, _L, neg_integer, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_neg_integer(), L};
-t_from_form({type, _L, non_neg_integer, []}, _TypeNames, _ET, _S, _MR,
- _V, _D, L) ->
- {t_non_neg_integer(), L};
-t_from_form({type, _L, no_return, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_unit(), L};
-t_from_form({type, _L, node, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_node(), L};
-t_from_form({type, _L, none, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_none(), L};
-t_from_form({type, _L, nonempty_list, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_nonempty_list(), L};
-t_from_form({type, _L, nonempty_list, [Type]}, TypeNames, ET, S, MR, V, D, L) ->
- {T, L1} = t_from_form(Type, TypeNames, ET, S, MR, V, D, L - 1),
- {t_nonempty_list(T), L1};
-t_from_form({type, _L, nonempty_improper_list, [Cont, Term]}, TypeNames,
- ET, S, MR, V, D, L) ->
- {T1, L1} = t_from_form(Cont, TypeNames, ET, S, MR, V, D, L - 1),
- {T2, L2} = t_from_form(Term, TypeNames, ET, S, MR, V, D, L1),
- {t_cons(T1, T2), L2};
-t_from_form({type, _L, nonempty_maybe_improper_list, []}, _TypeNames,
- _ET, _S, _MR, _V, _D, L) ->
- {t_cons(?any, ?any), L};
-t_from_form({type, _L, nonempty_maybe_improper_list, [Cont, Term]},
- TypeNames, ET, S, MR, V, D, L) ->
- {T1, L1} = t_from_form(Cont, TypeNames, ET, S, MR, V, D, L - 1),
- {T2, L2} = t_from_form(Term, TypeNames, ET, S, MR, V, D, L1),
- {t_cons(T1, T2), L2};
-t_from_form({type, _L, nonempty_string, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_nonempty_string(), L};
-t_from_form({type, _L, number, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_number(), L};
-t_from_form({type, _L, pid, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_pid(), L};
-t_from_form({type, _L, port, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_port(), L};
-t_from_form({type, _L, pos_integer, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_pos_integer(), L};
-t_from_form({type, _L, maybe_improper_list, []}, _TypeNames,
- _ET, _S, _MR, _V, _D, L) ->
- {t_maybe_improper_list(), L};
-t_from_form({type, _L, maybe_improper_list, [Content, Termination]},
- TypeNames, ET, S, MR, V, D, L) ->
- {T1, L1} = t_from_form(Content, TypeNames, ET, S, MR, V, D, L - 1),
- {T2, L2} = t_from_form(Termination, TypeNames, ET, S, MR, V, D, L1),
- {t_maybe_improper_list(T1, T2), L2};
-t_from_form({type, _L, product, Elements}, TypeNames, ET, S, MR, V, D, L) ->
- {Lst, L1} = list_from_form(Elements, TypeNames, ET, S, MR, V, D - 1, L),
- {t_product(Lst), L1};
-t_from_form({type, _L, range, [From, To]} = Type,
- _TypeNames, _ET, _S, _MR, _V, _D, L) ->
+from_form({type, _L, mfa, []}, _S, _D, L, C) ->
+ {t_mfa(), L, C};
+from_form({type, _L, module, []}, _S, _D, L, C) ->
+ {t_module(), L, C};
+from_form({type, _L, nil, []}, _S, _D, L, C) ->
+ {t_nil(), L, C};
+from_form({type, _L, neg_integer, []}, _S, _D, L, C) ->
+ {t_neg_integer(), L, C};
+from_form({type, _L, non_neg_integer, []}, _S, _D, L, C) ->
+ {t_non_neg_integer(), L, C};
+from_form({type, _L, no_return, []}, _S, _D, L, C) ->
+ {t_unit(), L, C};
+from_form({type, _L, node, []}, _S, _D, L, C) ->
+ {t_node(), L, C};
+from_form({type, _L, none, []}, _S, _D, L, C) ->
+ {t_none(), L, C};
+from_form({type, _L, nonempty_list, []}, _S, _D, L, C) ->
+ {t_nonempty_list(), L, C};
+from_form({type, _L, nonempty_list, [Type]}, S, D, L, C) ->
+ {T, L1, C1} = from_form(Type, S, D, L - 1, C),
+ {t_nonempty_list(T), L1, C1};
+from_form({type, _L, nonempty_improper_list, [Cont, Term]}, S, D, L, C) ->
+ {T1, L1, C1} = from_form(Cont, S, D, L - 1, C),
+ {T2, L2, C2} = from_form(Term, S, D, L1, C1),
+ {t_cons(T1, T2), L2, C2};
+from_form({type, _L, nonempty_maybe_improper_list, []}, _S, _D, L, C) ->
+ {t_cons(?any, ?any), L, C};
+from_form({type, _L, nonempty_maybe_improper_list, [Cont, Term]},
+ S, D, L, C) ->
+ {T1, L1, C1} = from_form(Cont, S, D, L - 1, C),
+ {T2, L2, C2} = from_form(Term, S, D, L1, C1),
+ {t_cons(T1, T2), L2, C2};
+from_form({type, _L, nonempty_string, []}, _S, _D, L, C) ->
+ {t_nonempty_string(), L, C};
+from_form({type, _L, number, []}, _S, _D, L, C) ->
+ {t_number(), L, C};
+from_form({type, _L, pid, []}, _S, _D, L, C) ->
+ {t_pid(), L, C};
+from_form({type, _L, port, []}, _S, _D, L, C) ->
+ {t_port(), L, C};
+from_form({type, _L, pos_integer, []}, _S, _D, L, C) ->
+ {t_pos_integer(), L, C};
+from_form({type, _L, maybe_improper_list, []}, _S, _D, L, C) ->
+ {t_maybe_improper_list(), L, C};
+from_form({type, _L, maybe_improper_list, [Content, Termination]},
+ S, D, L, C) ->
+ {T1, L1, C1} = from_form(Content, S, D, L - 1, C),
+ {T2, L2, C2} = from_form(Termination, S, D, L1, C1),
+ {t_maybe_improper_list(T1, T2), L2, C2};
+from_form({type, _L, product, Elements}, S, D, L, C) ->
+ {Lst, L1, C1} = list_from_form(Elements, S, D - 1, L, C),
+ {t_product(Lst), L1, C1};
+from_form({type, _L, range, [From, To]} = Type, _S, _D, L, C) ->
case {erl_eval:partial_eval(From), erl_eval:partial_eval(To)} of
{{integer, _, FromVal}, {integer, _, ToVal}} ->
- {t_from_range(FromVal, ToVal), L};
+ {t_from_range(FromVal, ToVal), L, C};
_ -> throw({error, io_lib:format("Unable to evaluate type ~w\n", [Type])})
end;
-t_from_form({type, _L, record, [Name|Fields]}, TypeNames, ET, S, MR, V, D, L) ->
- record_from_form(Name, Fields, TypeNames, ET, S, MR, V, D, L);
-t_from_form({type, _L, reference, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_reference(), L};
-t_from_form({type, _L, string, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_string(), L};
-t_from_form({type, _L, term, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_any(), L};
-t_from_form({type, _L, timeout, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_timeout(), L};
-t_from_form({type, _L, tuple, any}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {t_tuple(), L};
-t_from_form({type, _L, tuple, Args}, TypeNames, ET, S, MR, V, D, L) ->
- {Lst, L1} = list_from_form(Args, TypeNames, ET, S, MR, V, D - 1, L),
- {t_tuple(Lst), L1};
-t_from_form({type, _L, union, Args}, TypeNames, ET, S, MR, V, D, L) ->
- {Lst, L1} = list_from_form(Args, TypeNames, ET, S, MR, V, D, L),
- {t_sup(Lst), L1};
-t_from_form({user_type, _L, Name, Args}, TypeNames, ET, S, MR, V, D, L) ->
- type_from_form(Name, Args, TypeNames, ET, S, MR, V, D, L);
-t_from_form({type, _L, Name, Args}, TypeNames, ET, S, MR, V, D, L) ->
+from_form({type, _L, record, [Name|Fields]}, S, D, L, C) ->
+ record_from_form(Name, Fields, S, D, L, C);
+from_form({type, _L, reference, []}, _S, _D, L, C) ->
+ {t_reference(), L, C};
+from_form({type, _L, string, []}, _S, _D, L, C) ->
+ {t_string(), L, C};
+from_form({type, _L, term, []}, _S, _D, L, C) ->
+ {t_any(), L, C};
+from_form({type, _L, timeout, []}, _S, _D, L, C) ->
+ {t_timeout(), L, C};
+from_form({type, _L, tuple, any}, _S, _D, L, C) ->
+ {t_tuple(), L, C};
+from_form({type, _L, tuple, Args}, S, D, L, C) ->
+ {Lst, L1, C1} = list_from_form(Args, S, D - 1, L, C),
+ {t_tuple(Lst), L1, C1};
+from_form({type, _L, union, Args}, S, D, L, C) ->
+ {Lst, L1, C1} = list_from_form(Args, S, D, L, C),
+ {t_sup(Lst), L1, C1};
+from_form({user_type, _L, Name, Args}, S, D, L, C) ->
+ type_from_form(Name, Args, S, D, L, C);
+from_form({type, _L, Name, Args}, S, D, L, C) ->
%% Compatibility: modules compiled before Erlang/OTP 18.0.
- type_from_form(Name, Args, TypeNames, ET, S, MR, V, D, L);
-t_from_form({opaque, _L, Name, {Mod, Args, Rep}}, _TypeNames,
- _ET, _S, _MR, _V, _D, L) ->
+ type_from_form(Name, Args, S, D, L, C);
+from_form({opaque, _L, Name, {Mod, Args, Rep}}, _S, _D, L, C) ->
%% XXX. To be removed.
- {t_opaque(Mod, Name, Args, Rep), L}.
+ {t_opaque(Mod, Name, Args, Rep), L, C}.
-builtin_type(Name, Type, TypeNames, ET, Site, MR, V, D, L) ->
+builtin_type(Name, Type, S, D, L, C) ->
+ #from_form{site = Site, mrecs = MR} = S,
M = site_module(Site),
case dict:find(M, MR) of
{ok, R} ->
case lookup_type(Name, 0, R) of
{_, {{_M, _FL, _F, _A}, _T}} ->
- type_from_form(Name, [], TypeNames, ET, Site, MR, V, D, L);
+ type_from_form(Name, [], S, D, L, C);
error ->
- {Type, L}
+ {Type, L, C}
end;
error ->
- {Type, L}
+ {Type, L, C}
end.
-type_from_form(Name, Args, TypeNames, ET, Site0, MR, V, D, L) ->
+type_from_form(Name, Args, S, D, L, C) ->
+ #from_form{site = Site, mrecs = MR, tnames = TypeNames} = S,
ArgsLen = length(Args),
- Module = site_module(Site0),
- {ok, R} = dict:find(Module, MR),
+ Module = site_module(Site),
TypeName = {type, {Module, Name, ArgsLen}},
+ case can_unfold_more(TypeName, TypeNames) of
+ true ->
+ {ok, R} = dict:find(Module, MR),
+ type_from_form1(Name, Args, ArgsLen, R, TypeName, TypeNames,
+ S, D, L, C);
+ false ->
+ {t_any(), L, C}
+ end.
+
+type_from_form1(Name, Args, ArgsLen, R, TypeName, TypeNames, S, D, L, C) ->
case lookup_type(Name, ArgsLen, R) of
- {type, {{Module, _FileName, Form, ArgNames}, _Type}} ->
- case can_unfold_more(TypeName, TypeNames) of
- true ->
- NewTypeNames = [TypeName|TypeNames],
- {ArgTypes, L1} =
- list_from_form(Args, TypeNames, ET, Site0, MR, V, D, L),
- List = lists:zip(ArgNames, ArgTypes),
- TmpV = maps:from_list(List),
- Site = TypeName,
- t_from_form(Form, NewTypeNames, ET, Site, MR, TmpV, D, L1);
- false ->
- {t_any(), L}
- end;
- {opaque, {{Module, _FileName, Form, ArgNames}, Type}} ->
- case can_unfold_more(TypeName, TypeNames) of
- true ->
- NewTypeNames = [TypeName|TypeNames],
- {ArgTypes, L1} =
- list_from_form(Args, NewTypeNames, ET, Site0, MR, V, D, L),
+ {Tag, {{Module, _FileName, Form, ArgNames}, Type}} ->
+ NewTypeNames = [TypeName|TypeNames],
+ S1 = S#from_form{tnames = NewTypeNames},
+ {ArgTypes, L1, C1} = list_from_form(Args, S1, D, L, C),
+ CKey = cache_key(Module, Name, ArgTypes, TypeNames, D),
+ case cache_find(CKey, C) of
+ {CachedType, DeltaL} ->
+ {CachedType, L1 - DeltaL, C};
+ error ->
List = lists:zip(ArgNames, ArgTypes),
TmpV = maps:from_list(List),
- Site = TypeName,
- {Rep, L2} =
- t_from_form(Form, NewTypeNames, ET, Site, MR, TmpV, D, L1),
- Rep1 = choose_opaque_type(Rep, Type),
- Rep2 = case cannot_have_opaque(Rep1, TypeName, TypeNames) of
- true -> Rep1;
- false ->
- ArgTypes2 = subst_all_vars_to_any_list(ArgTypes),
- t_opaque(Module, Name, ArgTypes2, Rep1)
- end,
- {Rep2, L2};
- false -> {t_any(), L}
+ S2 = S1#from_form{site = TypeName, vtab = TmpV},
+ Fun = fun(DD, LL) -> from_form(Form, S2, DD, LL, C1) end,
+ {NewType, L3, C3} =
+ case Tag of
+ type ->
+ recur_limit(Fun, D, L1, TypeName, TypeNames);
+ opaque ->
+ {Rep, L2, C2} = recur_limit(Fun, D, L1, TypeName, TypeNames),
+ Rep1 = choose_opaque_type(Rep, Type),
+ Rep2 = case cannot_have_opaque(Rep1, TypeName, TypeNames) of
+ true -> Rep;
+ false ->
+ ArgTypes2 = subst_all_vars_to_any_list(ArgTypes),
+ t_opaque(Module, Name, ArgTypes2, Rep1)
+ end,
+ {Rep2, L2, C2}
+ end,
+ C4 = cache_put(CKey, NewType, L1 - L3, C3),
+ {NewType, L3, C4}
end;
error ->
- Msg = io_lib:format("Unable to find type ~w/~w\n", [Name, ArgsLen]),
+ Msg = io_lib:format("Unable to find type ~w/~w\n",
+ [Name, ArgsLen]),
throw({error, Msg})
end.
-remote_from_form(RemMod, Name, Args, TypeNames, ET, S, MR, V, D, L) ->
+remote_from_form(RemMod, Name, Args, S, D, L, C) ->
+ #from_form{xtypes = ET, mrecs = MR, tnames = TypeNames} = S,
if
ET =:= replace_by_none ->
- {t_none(), L};
+ {t_none(), L, C};
true ->
ArgsLen = length(Args),
MFA = {RemMod, Name, ArgsLen},
case dict:find(RemMod, MR) of
error ->
self() ! {self(), ext_types, MFA},
- {t_any(), L};
+ {t_any(), L, C};
{ok, RemDict} ->
- RemType = {type, MFA},
case sets:is_element(MFA, ET) of
true ->
- case lookup_type(Name, ArgsLen, RemDict) of
- {type, {{_Mod, _FileLine, Form, ArgNames}, _Type}} ->
- case can_unfold_more(RemType, TypeNames) of
- true ->
- NewTypeNames = [RemType|TypeNames],
- {ArgTypes, L1} = list_from_form(Args, TypeNames,
- ET, S, MR, V, D, L),
- List = lists:zip(ArgNames, ArgTypes),
- TmpVarDict = maps:from_list(List),
- Site = RemType,
- t_from_form(Form, NewTypeNames, ET,
- Site, MR, TmpVarDict, D, L1);
- false ->
- {t_any(), L}
- end;
- {opaque, {{Mod, _FileLine, Form, ArgNames}, Type}} ->
- case can_unfold_more(RemType, TypeNames) of
- true ->
- NewTypeNames = [RemType|TypeNames],
- {ArgTypes, L1} = list_from_form(Args, NewTypeNames,
- ET, S, MR, V, D, L),
- List = lists:zip(ArgNames, ArgTypes),
- TmpVarDict = maps:from_list(List),
- Site = RemType,
- {NewRep, L2} =
- t_from_form(Form, NewTypeNames, ET, Site, MR,
- TmpVarDict, D, L1),
- NewRep1 = choose_opaque_type(NewRep, Type),
- NewRep2 =
- case
- cannot_have_opaque(NewRep1, RemType, TypeNames)
- of
- true -> NewRep1;
- false ->
- ArgTypes2 = subst_all_vars_to_any_list(ArgTypes),
- t_opaque(Mod, Name, ArgTypes2, NewRep1)
- end,
- {NewRep2, L2};
- false ->
- {t_any(), L}
- end;
- error ->
- Msg = io_lib:format("Unable to find remote type ~w:~w()\n",
- [RemMod, Name]),
- throw({error, Msg})
+ RemType = {type, MFA},
+ case can_unfold_more(RemType, TypeNames) of
+ true ->
+ remote_from_form1(RemMod, Name, Args, ArgsLen, RemDict,
+ RemType, TypeNames, S, D, L, C);
+ false ->
+ {t_any(), L, C}
end;
false ->
self() ! {self(), ext_types, {RemMod, Name, ArgsLen}},
- {t_any(), L}
+ {t_any(), L, C}
end
end
end.
+remote_from_form1(RemMod, Name, Args, ArgsLen, RemDict, RemType, TypeNames,
+ S, D, L, C) ->
+ case lookup_type(Name, ArgsLen, RemDict) of
+ {Tag, {{Mod, _FileLine, Form, ArgNames}, Type}} ->
+ NewTypeNames = [RemType|TypeNames],
+ S1 = S#from_form{tnames = NewTypeNames},
+ {ArgTypes, L1, C1} = list_from_form(Args, S1, D, L, C),
+ CKey = cache_key(RemMod, Name, ArgTypes, TypeNames, D),
+ %% case error of
+ case cache_find(CKey, C) of
+ {CachedType, DeltaL} ->
+ {CachedType, L - DeltaL, C};
+ error ->
+ List = lists:zip(ArgNames, ArgTypes),
+ TmpVarTab = maps:from_list(List),
+ S2 = S1#from_form{site = RemType, vtab = TmpVarTab},
+ Fun = fun(DD, LL) -> from_form(Form, S2, DD, LL, C1) end,
+ {NewType, L3, C3} =
+ case Tag of
+ type ->
+ recur_limit(Fun, D, L1, RemType, TypeNames);
+ opaque ->
+ {NewRep, L2, C2} = recur_limit(Fun, D, L1, RemType, TypeNames),
+ NewRep1 = choose_opaque_type(NewRep, Type),
+ NewRep2 =
+ case cannot_have_opaque(NewRep1, RemType, TypeNames) of
+ true -> NewRep;
+ false ->
+ ArgTypes2 = subst_all_vars_to_any_list(ArgTypes),
+ t_opaque(Mod, Name, ArgTypes2, NewRep1)
+ end,
+ {NewRep2, L2, C2}
+ end,
+ C4 = cache_put(CKey, NewType, L1 - L3, C3),
+ {NewType, L3, C4}
+ end;
+ error ->
+ Msg = io_lib:format("Unable to find remote type ~w:~w()\n",
+ [RemMod, Name]),
+ throw({error, Msg})
+ end.
+
subst_all_vars_to_any_list(Types) ->
[subst_all_vars_to_any(Type) || Type <- Types].
@@ -4832,63 +4872,67 @@ choose_opaque_type(Type, DeclType) ->
false -> DeclType
end.
-record_from_form({atom, _, Name}, ModFields, TypeNames, ET, S, MR, V, D, L) ->
- case can_unfold_more({record, Name}, TypeNames) of
+record_from_form({atom, _, Name}, ModFields, S, D0, L0, C) ->
+ #from_form{site = Site, mrecs = MR, tnames = TypeNames} = S,
+ RecordType = {record, Name},
+ case can_unfold_more(RecordType, TypeNames) of
true ->
- M = site_module(S),
+ M = site_module(Site),
{ok, R} = dict:find(M, MR),
case lookup_record(Name, R) of
{ok, DeclFields} ->
- NewTypeNames = [{record, Name}|TypeNames],
- S1 = {record, {M, Name, length(DeclFields)}},
- {GetModRec, L1} = get_mod_record(ModFields, DeclFields,
- NewTypeNames, ET, S1, MR, V, D, L),
- case GetModRec of
- {error, FieldName} ->
- throw({error, io_lib:format("Illegal declaration of #~w{~w}\n",
- [Name, FieldName])});
- {ok, NewFields} ->
- {NewFields1, L2} =
- fields_from_form(NewFields, NewTypeNames, ET, S1, MR,
- maps:new(), D, L1),
- Rec = t_tuple(
- [t_atom(Name)|[Type
- || {_FieldName, Type} <- NewFields1]]),
- {Rec, L2}
- end;
+ NewTypeNames = [RecordType|TypeNames],
+ Site1 = {record, {M, Name, length(DeclFields)}},
+ S1 = S#from_form{site = Site1, tnames = NewTypeNames},
+ Fun = fun(D, L) ->
+ {GetModRec, L1, C1} =
+ get_mod_record(ModFields, DeclFields, S1, D, L, C),
+ case GetModRec of
+ {error, FieldName} ->
+ throw({error,
+ io_lib:format("Illegal declaration of #~w{~w}\n",
+ [Name, FieldName])});
+ {ok, NewFields} ->
+ S2 = S1#from_form{vtab = var_table__new()},
+ {NewFields1, L2, C2} =
+ fields_from_form(NewFields, S2, D, L1, C1),
+ Rec = t_tuple(
+ [t_atom(Name)|[Type
+ || {_FieldName, Type} <- NewFields1]]),
+ {Rec, L2, C2}
+ end
+ end,
+ recur_limit(Fun, D0, L0, RecordType, TypeNames);
error ->
throw({error, io_lib:format("Unknown record #~w{}\n", [Name])})
end;
false ->
- {t_any(), L}
+ {t_any(), L0, C}
end.
-get_mod_record([], DeclFields, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {{ok, DeclFields}, L};
-get_mod_record(ModFields, DeclFields, TypeNames, ET, S, MR, V, D, L) ->
+get_mod_record([], DeclFields, _S, _D, L, C) ->
+ {{ok, DeclFields}, L, C};
+get_mod_record(ModFields, DeclFields, S, D, L, C) ->
DeclFieldsDict = lists:keysort(1, DeclFields),
- {ModFieldsDict, L1} =
- build_field_dict(ModFields, TypeNames, ET, S, MR, V, D, L),
+ {ModFieldsDict, L1, C1} = build_field_dict(ModFields, S, D, L, C),
case get_mod_record_types(DeclFieldsDict, ModFieldsDict, []) of
- {error, _FieldName} = Error -> {Error, L1};
+ {error, _FieldName} = Error -> {Error, L1, C1};
{ok, FinalKeyDict} ->
Fields = [lists:keyfind(FieldName, 1, FinalKeyDict)
|| {FieldName, _, _} <- DeclFields],
- {{ok, Fields}, L1}
+ {{ok, Fields}, L1, C1}
end.
-build_field_dict(FieldTypes, TypeNames, ET, S, MR, V, D, L) ->
- build_field_dict(FieldTypes, TypeNames, ET, S, MR, V, D, L, []).
+build_field_dict(FieldTypes, S, D, L, C) ->
+ build_field_dict(FieldTypes, S, D, L, C, []).
build_field_dict([{type, _, field_type, [{atom, _, Name}, Type]}|Left],
- TypeNames, ET, S, MR, V, D, L, Acc) ->
- {T, L1} = t_from_form(Type, TypeNames, ET, S, MR, V, D, L - 1),
+ S, D, L, C, Acc) ->
+ {T, L1, C1} = from_form(Type, S, D, L - 1, C),
NewAcc = [{Name, Type, T}|Acc],
- {Dict, L2} =
- build_field_dict(Left, TypeNames, ET, S, MR, V, D, L1, NewAcc),
- {Dict, L2};
-build_field_dict([], _TypeNames, _ET, _S, _MR, _V, _D, L, Acc) ->
- {lists:keysort(1, Acc), L}.
+ build_field_dict(Left, S, D, L1, C1, NewAcc);
+build_field_dict([], _S, _D, L, C, Acc) ->
+ {lists:keysort(1, Acc), L, C}.
get_mod_record_types([{FieldName, _Abstr, _DeclType}|Left1],
[{FieldName, TypeForm, ModType}|Left2],
@@ -4906,20 +4950,19 @@ get_mod_record_types(_, [{FieldName2, _FormType, _ModType}|_], _Acc) ->
%% It is important to create a limited version of the record type
%% since nested record types can otherwise easily result in huge
%% terms.
-fields_from_form([], _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {[], L};
-fields_from_form([{Name, Abstr, _Type}|Tail], TypeNames, ET, S, MR,
- V, D, L) ->
- {T, L1} = t_from_form(Abstr, TypeNames, ET, S, MR, V, D, L),
- {F, L2} = fields_from_form(Tail, TypeNames, ET, S, MR, V, D, L1),
- {[{Name, T}|F], L2}.
-
-list_from_form([], _TypeNames, _ET, _S, _MR, _V, _D, L) ->
- {[], L};
-list_from_form([H|Tail], TypeNames, ET, S, MR, V, D, L) ->
- {H1, L1} = t_from_form(H, TypeNames, ET, S, MR, V, D, L - 1),
- {T1, L2} = list_from_form(Tail, TypeNames, ET, S, MR, V, D, L1),
- {[H1|T1], L2}.
+fields_from_form([], _S, _D, L, C) ->
+ {[], L, C};
+fields_from_form([{Name, Abstr, _Type}|Tail], S, D, L, C) ->
+ {T, L1, C1} = from_form(Abstr, S, D, L, C),
+ {F, L2, C2} = fields_from_form(Tail, S, D, L1, C1),
+ {[{Name, T}|F], L2, C2}.
+
+list_from_form([], _S, _D, L, C) ->
+ {[], L, C};
+list_from_form([H|Tail], S, D, L, C) ->
+ {H1, L1, C1} = from_form(H, S, D, L - 1, C),
+ {T1, L2, C2} = list_from_form(Tail, S, D, L1, C1),
+ {[H1|T1], L2, C2}.
%% Sorts, combines non-singleton pairs, and applies precendence and
%% mandatoriness rules.
@@ -4965,80 +5008,140 @@ promote_to_mand(MKs, [E={K,_,V}|T]) ->
false -> E
end|promote_to_mand(MKs, T)].
--spec t_check_record_fields(parse_form(), sets:set(mfa()), site(),
- mod_records()) -> ok.
+-define(RECUR_EXPAND_LIMIT, 10).
+-define(RECUR_EXPAND_DEPTH, 2).
-t_check_record_fields(Form, ExpTypes, Site, RecDict) ->
- t_check_record_fields(Form, ExpTypes, Site, RecDict, maps:new()).
+%% If more of the limited resources is spent on the non-recursive
+%% forms, more warnings are found. And the analysis is also a bit
+%% faster.
+%%
+%% Setting REC_TYPE_LIMIT to 1 would work also work well.
+
+recur_limit(Fun, D, L, _, _) when L =< ?RECUR_EXPAND_DEPTH,
+ D =< ?RECUR_EXPAND_LIMIT ->
+ Fun(D, L);
+recur_limit(Fun, D, L, TypeName, TypeNames) ->
+ case is_recursive(TypeName, TypeNames) of
+ true ->
+ {T, L1, C1} = Fun(?RECUR_EXPAND_DEPTH, ?RECUR_EXPAND_LIMIT),
+ {T, L - L1, C1};
+ false ->
+ Fun(D, L)
+ end.
-spec t_check_record_fields(parse_form(), sets:set(mfa()), site(),
- mod_records(), var_table()) -> ok.
+ mod_records(), var_table(), cache()) -> cache().
+
+t_check_record_fields(Form, ExpTypes, Site, RecDict, VarTable, Cache) ->
+ State = #from_form{site = Site,
+ xtypes = ExpTypes,
+ mrecs = RecDict,
+ vtab = VarTable,
+ tnames = []},
+ check_record_fields(Form, State, Cache).
+
+-spec check_record_fields(parse_form(), #from_form{}, cache()) -> cache().
%% If there is something wrong with parse_form()
%% throw({error, io_lib:chars()} is called.
-t_check_record_fields({var, _L, _}, _ET, _S, _MR, _V) -> ok;
-t_check_record_fields({ann_type, _L, [_Var, Type]}, ET, S, MR, V) ->
- t_check_record_fields(Type, ET, S, MR, V);
-t_check_record_fields({paren_type, _L, [Type]}, ET, S, MR, V) ->
- t_check_record_fields(Type, ET, S, MR, V);
-t_check_record_fields({remote_type, _L, [{atom, _, _}, {atom, _, _}, Args]},
- ET, S, MR, V) ->
- list_check_record_fields(Args, ET, S, MR, V);
-t_check_record_fields({atom, _L, _}, _ET, _S, _MR, _V) -> ok;
-t_check_record_fields({integer, _L, _}, _ET, _S, _MR, _V) -> ok;
-t_check_record_fields({op, _L, _Op, _Arg}, _ET, _S, _MR, _V) -> ok;
-t_check_record_fields({op, _L, _Op, _Arg1, _Arg2}, _ET, _S, _MR, _V) -> ok;
-t_check_record_fields({type, _L, tuple, any}, _ET, _S, _MR, _V) -> ok;
-t_check_record_fields({type, _L, map, any}, _ET, _S, _MR, _V) -> ok;
-t_check_record_fields({type, _L, binary, [_Base, _Unit]}, _ET, _S, _MR, _V) ->
- ok;
-t_check_record_fields({type, _L, 'fun', [{type, _, any}, Range]},
- ET, S, MR, V) ->
- t_check_record_fields(Range, ET, S, MR, V);
-t_check_record_fields({type, _L, range, [_From, _To]}, _ET, _S, _MR, _V) ->
- ok;
-t_check_record_fields({type, _L, record, [Name|Fields]}, ET, S, MR, V) ->
- check_record(Name, Fields, ET, S, MR, V);
-t_check_record_fields({type, _L, _, Args}, ET, S, MR, V) ->
- list_check_record_fields(Args, ET, S, MR, V);
-t_check_record_fields({user_type, _L, _Name, Args}, ET, S, MR, V) ->
- list_check_record_fields(Args, ET, S, MR, V).
-
-check_record({atom, _, Name}, ModFields, ET, Site, MR, V) ->
+check_record_fields({var, _L, _}, _S, C) -> C;
+check_record_fields({ann_type, _L, [_Var, Type]}, S, C) ->
+ check_record_fields(Type, S, C);
+check_record_fields({paren_type, _L, [Type]}, S, C) ->
+ check_record_fields(Type, S, C);
+check_record_fields({remote_type, _L, [{atom, _, _}, {atom, _, _}, Args]},
+ S, C) ->
+ list_check_record_fields(Args, S, C);
+check_record_fields({atom, _L, _}, _S, C) -> C;
+check_record_fields({integer, _L, _}, _S, C) -> C;
+check_record_fields({op, _L, _Op, _Arg}, _S, C) -> C;
+check_record_fields({op, _L, _Op, _Arg1, _Arg2}, _S, C) -> C;
+check_record_fields({type, _L, tuple, any}, _S, C) -> C;
+check_record_fields({type, _L, map, any}, _S, C) -> C;
+check_record_fields({type, _L, binary, [_Base, _Unit]}, _S, C) -> C;
+check_record_fields({type, _L, 'fun', [{type, _, any}, Range]}, S, C) ->
+ check_record_fields(Range, S, C);
+check_record_fields({type, _L, range, [_From, _To]}, _S, C) -> C;
+check_record_fields({type, _L, record, [Name|Fields]}, S, C) ->
+ check_record(Name, Fields, S, C);
+check_record_fields({type, _L, _, Args}, S, C) ->
+ list_check_record_fields(Args, S, C);
+check_record_fields({user_type, _L, _Name, Args}, S, C) ->
+ list_check_record_fields(Args, S, C).
+
+check_record({atom, _, Name}, ModFields, S, C) ->
+ #from_form{site = Site, mrecs = MR} = S,
M = site_module(Site),
{ok, R} = dict:find(M, MR),
{ok, DeclFields} = lookup_record(Name, R),
- case check_fields(Name, ModFields, DeclFields, ET, Site, MR, V) of
+ case check_fields(Name, ModFields, DeclFields, S, C) of
{error, FieldName} ->
throw({error, io_lib:format("Illegal declaration of #~w{~w}\n",
[Name, FieldName])});
- ok -> ok
+ C1 -> C1
end.
check_fields(RecName, [{type, _, field_type, [{atom, _, Name}, Abstr]}|Left],
- DeclFields, ET, Site0, MR, V) ->
+ DeclFields, S, C) ->
+ #from_form{site = Site0, xtypes = ET, mrecs = MR, vtab = V} = S,
M = site_module(Site0),
Site = {record, {M, RecName, length(DeclFields)}},
- Type = t_from_form(Abstr, ET, Site, MR, V),
+ {Type, C1} = t_from_form(Abstr, ET, Site, MR, V, C),
{Name, _, DeclType} = lists:keyfind(Name, 1, DeclFields),
TypeNoVars = subst_all_vars_to_any(Type),
case t_is_subtype(TypeNoVars, DeclType) of
false -> {error, Name};
- true -> check_fields(RecName, Left, DeclFields, ET, Site0, MR, V)
+ true -> check_fields(RecName, Left, DeclFields, S, C1)
end;
-check_fields(_RecName, [], _Decl, _ET, _Site, _MR, _V) ->
- ok.
+check_fields(_RecName, [], _Decl, _S, C) ->
+ C.
-list_check_record_fields([], _ET, _S, _MR, _V) ->
- ok;
-list_check_record_fields([H|Tail], ET, S, MR, V) ->
- ok = t_check_record_fields(H, ET, S, MR, V),
- list_check_record_fields(Tail, ET, S, MR, V).
+list_check_record_fields([], _S, C) ->
+ C;
+list_check_record_fields([H|Tail], S, C) ->
+ C1 = check_record_fields(H, S, C),
+ list_check_record_fields(Tail, S, C1).
site_module({_, {Module, _, _}}) ->
Module.
+-spec cache__new() -> cache().
+
+cache__new() ->
+ maps:new().
+
+-spec cache_key(module(), atom(), [erl_type()],
+ type_names(), expand_depth()) -> cache_key().
+
+%% If TypeNames is left out from the key, the cache is smaller, and
+%% the form-to-type translation is faster. But it would be a shame if,
+%% for example, any() is used, where a more complex type should be
+%% used. There is also a slight risk of creating unnecessarily big
+%% types.
+
+cache_key(Module, Name, ArgTypes, TypeNames, D) ->
+ {Module, Name, D, ArgTypes, TypeNames}.
+
+-spec cache_find(cache_key(), cache()) ->
+ {erl_type(), expand_limit()} | 'error'.
+
+cache_find(Key, Cache) ->
+ case maps:find(Key, Cache) of
+ {ok, Value} ->
+ Value;
+ error ->
+ error
+ end.
+
+-spec cache_put(cache_key(), erl_type(), expand_limit(), cache()) -> cache().
+
+cache_put(_Key, _Type, DeltaL, Cache) when DeltaL < 0 ->
+ %% The type is truncated; do not reuse it.
+ Cache;
+cache_put(Key, Type, DeltaL, Cache) ->
+ maps:put(Key, {Type, DeltaL}, Cache).
+
-spec t_var_names([erl_type()]) -> [atom()].
t_var_names([{var, _, Name}|L]) when L =/= '_' ->
@@ -5137,10 +5240,15 @@ t_form_to_string({type, _L, Name, []} = T) ->
M = mod,
D0 = dict:new(),
MR = dict:from_list([{M, D0}]),
- S = {type, {M,Name,0}},
- V = #{},
- {T1, _} =
- t_from_form(T, [], sets:new(), S, MR, V, _Deep=1000, _ALot=100000),
+ Site = {type, {M,Name,0}},
+ V = var_table__new(),
+ C = cache__new(),
+ State = #from_form{site = Site,
+ xtypes = sets:new(),
+ mrecs = MR,
+ vtab = V,
+ tnames = []},
+ {T1, _, _} = from_form(T, State, _Deep=1000, _ALot=1000000, C),
t_to_string(T1)
catch throw:{error, _} -> atom_to_string(Name) ++ "()"
end;
@@ -5216,6 +5324,7 @@ lookup_record(Tag, Arity, RecDict) when is_atom(Tag) ->
error -> error
end.
+-spec lookup_type(_, _, _) -> {'type' | 'opaque', type_value()} | 'error'.
lookup_type(Name, Arity, RecDict) ->
case dict:find({type, Name, Arity}, RecDict) of
error ->
@@ -5464,6 +5573,17 @@ family(L) ->
sofs:to_external(F).
%%=============================================================================
+%%
+%% Interface functions for abstract data types defined in this module
+%%
+%%=============================================================================
+
+-spec var_table__new() -> var_table().
+
+var_table__new() ->
+ maps:new().
+
+%%=============================================================================
%% Consistency-testing function(s) below
%%=============================================================================
diff --git a/lib/hipe/doc/src/notes.xml b/lib/hipe/doc/src/notes.xml
index 81f9052f6f..e2a1524be6 100644
--- a/lib/hipe/doc/src/notes.xml
+++ b/lib/hipe/doc/src/notes.xml
@@ -43,6 +43,29 @@
<p>
Own Id: OTP-13407 Aux Id: PR-984 </p>
</item>
+ <item>
+ <p>
+ Various fixes and improvements to the HiPE LLVM backend.
+ <list> <item>Add support for LLVM 3.7 and 3.8 in the
+ HiPE/LLVM x86_64 backend</item> <item>Reinstate support
+ for the LLVM backend on x86 (works OK for LLVM 3.5 to 3.7
+ -- LLVM 3.8 has a bug that prevents it from generating
+ correct native code on x86)</item> </list></p>
+ <p>
+ Own Id: OTP-13626</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Elimination of <c>maps:is_key/2</c> calls to HiPE</p>
+ <p>
+ Own Id: OTP-13625 Aux Id: PR-1069 </p>
+ </item>
</list>
</section>
diff --git a/lib/hipe/flow/Makefile b/lib/hipe/flow/Makefile
index fe1675b7dd..d883eecf36 100644
--- a/lib/hipe/flow/Makefile
+++ b/lib/hipe/flow/Makefile
@@ -66,7 +66,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars +warn_missing_spec # +warn_untyped_record
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars +warn_missing_spec +warn_untyped_record
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/flow/cfg.hrl b/lib/hipe/flow/cfg.hrl
index 641ec102db..2575b9e38a 100644
--- a/lib/hipe/flow/cfg.hrl
+++ b/lib/hipe/flow/cfg.hrl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -38,8 +38,8 @@
is_closure :: boolean(),
closure_arity = none :: 'none' | arity(),
is_leaf :: boolean(),
- params, % :: list()
- info = []}). %% this field seems not needed; take out??
+ params :: list(), %% XXX: refine
+ info = [] :: list()}). %% seems not needed; take out??
-type cfg_info() :: #cfg_info{}.
%%
diff --git a/lib/hipe/flow/hipe_dominators.erl b/lib/hipe/flow/hipe_dominators.erl
index 1b147607c7..72c16b5688 100644
--- a/lib/hipe/flow/hipe_dominators.erl
+++ b/lib/hipe/flow/hipe_dominators.erl
@@ -59,7 +59,7 @@
-record(domTree, {root :: cfg_lbl(),
size = 0 :: non_neg_integer(),
nodes = gb_trees:empty() :: gb_trees:tree()}).
--type domTree() :: #domTree{}.
+-opaque domTree() :: #domTree{}.
%%>----------------------------------------------------------------------<
%% Procedure : domTree_create/1
diff --git a/lib/hipe/icode/Makefile b/lib/hipe/icode/Makefile
index a5edb10d90..b220bc16a0 100644
--- a/lib/hipe/icode/Makefile
+++ b/lib/hipe/icode/Makefile
@@ -59,7 +59,7 @@ DOC_MODULES = hipe_beam_to_icode \
hipe_icode_pp hipe_icode_primops \
hipe_icode_range \
hipe_icode_split_arith \
- hipe_icode_ssa hipe_icode_ssa_const_prop \
+ hipe_icode_ssa hipe_icode_ssa_const_prop hipe_icode_call_elim \
hipe_icode_ssa_copy_prop hipe_icode_ssa_struct_reuse \
hipe_icode_type $(HIPE_MODULES)
@@ -84,7 +84,7 @@ DOC_FILES= $(DOC_MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_unused_import +warn_exported_vars +warn_missing_spec # +warn_untyped_record
+ERL_COMPILE_FLAGS += -Werror +warn_unused_import +warn_export_vars +warn_missing_spec # +warn_untyped_record
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/icode/hipe_icode.erl b/lib/hipe/icode/hipe_icode.erl
index 07d230491d..78508dff22 100644
--- a/lib/hipe/icode/hipe_icode.erl
+++ b/lib/hipe/icode/hipe_icode.erl
@@ -610,7 +610,9 @@
%% Exported types
%%
--export_type([icode/0]).
+-export_type([icode/0, params/0]).
+
+-type params() :: [icode_var()].
%%---------------------------------------------------------------------
%%
@@ -618,7 +620,7 @@
%%
%%---------------------------------------------------------------------
--spec mk_icode(mfa(), [icode_var()], boolean(), boolean(), [icode_instr()],
+-spec mk_icode(mfa(), params(), boolean(), boolean(), [icode_instr()],
{non_neg_integer(),non_neg_integer()},
{icode_lbl(),icode_lbl()}) -> icode().
mk_icode(Fun, Params, IsClosure, IsLeaf, Code, VarRange, LabelRange) ->
@@ -629,7 +631,7 @@ mk_icode(Fun, Params, IsClosure, IsLeaf, Code, VarRange, LabelRange) ->
var_range=VarRange,
label_range=LabelRange}.
--spec mk_icode(mfa(), [icode_var()], boolean(), boolean(), [icode_instr()],
+-spec mk_icode(mfa(), params(), boolean(), boolean(), [icode_instr()],
hipe_consttab(), {non_neg_integer(),non_neg_integer()},
{icode_lbl(),icode_lbl()}) -> icode().
mk_icode(Fun, Params, IsClosure, IsLeaf, Code, Data, VarRange, LabelRange) ->
@@ -640,11 +642,11 @@ mk_icode(Fun, Params, IsClosure, IsLeaf, Code, Data, VarRange, LabelRange) ->
-spec icode_fun(icode()) -> mfa().
icode_fun(#icode{'fun' = MFA}) -> MFA.
--spec icode_params(icode()) -> [icode_var()].
+-spec icode_params(icode()) -> params().
icode_params(#icode{params = Params}) -> Params.
--spec icode_params_update(icode(), [icode_var()]) -> icode().
-icode_params_update(Icode, Params) ->
+-spec icode_params_update(icode(), params()) -> icode().
+icode_params_update(Icode, Params) ->
Icode#icode{params = Params}.
-spec icode_is_closure(icode()) -> boolean().
diff --git a/lib/hipe/icode/hipe_icode.hrl b/lib/hipe/icode/hipe_icode.hrl
index 999c54732b..b2e0d86b28 100644
--- a/lib/hipe/icode/hipe_icode.hrl
+++ b/lib/hipe/icode/hipe_icode.hrl
@@ -169,7 +169,7 @@
%%---------------------------------------------------------------------
-record(icode, {'fun' :: mfa(),
- params :: [icode_var()],
+ params :: hipe_icode:params(),
%% TODO: merge is_closure and closure_arity into one field
is_closure :: boolean(),
closure_arity = none :: 'none' | arity(),
diff --git a/lib/hipe/icode/hipe_icode_call_elim.erl b/lib/hipe/icode/hipe_icode_call_elim.erl
new file mode 100644
index 0000000000..6a22133962
--- /dev/null
+++ b/lib/hipe/icode/hipe_icode_call_elim.erl
@@ -0,0 +1,78 @@
+%% -*- erlang-indent-level: 2 -*-
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+%%----------------------------------------------------------------------
+%% File : hipe_icode_call_elim.erl
+%% Authors : Daniel S. McCain <[email protected]>,
+%% Magnus Lång <[email protected]>
+%% Created : 14 Apr 2014 by Magnus Lång <[email protected]>
+%% Purpose : Eliminate calls to BIFs that are side-effect free only when
+%% executed on some argument types.
+%%----------------------------------------------------------------------
+-module(hipe_icode_call_elim).
+-export([cfg/1]).
+
+-include("hipe_icode.hrl").
+-include("../flow/cfg.hrl").
+
+-spec cfg(cfg()) -> cfg().
+
+cfg(IcodeSSA) ->
+ lists:foldl(fun (Lbl, CFG1) ->
+ BB1 = hipe_icode_cfg:bb(CFG1, Lbl),
+ Code1 = hipe_bb:code(BB1),
+ Code2 = lists:map(fun elim_insn/1, Code1),
+ BB2 = hipe_bb:code_update(BB1, Code2),
+ hipe_icode_cfg:bb_add(CFG1, Lbl, BB2)
+ end, IcodeSSA, hipe_icode_cfg:labels(IcodeSSA)).
+
+-spec elim_insn(icode_instr()) -> icode_instr().
+elim_insn(Insn=#icode_call{'fun'={_,_,_}=MFA, args=Args, type=remote,
+ dstlist=[Dst=#icode_variable{
+ annotation={type_anno, RetType, _}}]}) ->
+ Opaques = 'universe',
+ case erl_types:t_is_singleton(RetType, Opaques) of
+ true ->
+ ArgTypes = [case Arg of
+ #icode_variable{annotation={type_anno, Type, _}} -> Type;
+ #icode_const{} ->
+ erl_types:t_from_term(hipe_icode:const_value(Arg))
+ end || Arg <- Args],
+ case can_be_eliminated(MFA, ArgTypes) of
+ true ->
+ Const = hipe_icode:mk_const(
+ erl_types:t_singleton_to_term(RetType, Opaques)),
+ #icode_move{dst=Dst, src=Const};
+ false -> Insn
+ end;
+ false -> Insn
+ end;
+elim_insn(Insn) -> Insn.
+
+
+%% A function can be eliminated for some argument types if it has no side
+%% effects when run on arguments of those types.
+
+-spec can_be_eliminated(mfa(), [erl_types:erl_type()]) -> boolean().
+
+can_be_eliminated({maps, is_key, 2}, [_K, M]) ->
+ erl_types:t_is_map(M);
+can_be_eliminated(_, _) ->
+ false.
diff --git a/lib/hipe/icode/hipe_icode_cfg.erl b/lib/hipe/icode/hipe_icode_cfg.erl
index b9969fa69d..9a602c0283 100644
--- a/lib/hipe/icode/hipe_icode_cfg.erl
+++ b/lib/hipe/icode/hipe_icode_cfg.erl
@@ -55,6 +55,9 @@
-spec postorder(cfg()) -> [icode_lbl()].
-spec reverse_postorder(cfg()) -> [icode_lbl()].
+-spec params(cfg()) -> hipe_icode:params().
+-spec params_update(cfg(), hipe_icode:params()) -> cfg().
+
-spec is_visited(icode_lbl(), gb_sets:set()) -> boolean().
-spec visit(icode_lbl(), gb_sets:set()) -> gb_sets:set().
diff --git a/lib/hipe/icode/hipe_icode_range.erl b/lib/hipe/icode/hipe_icode_range.erl
index 24ffc71237..12ed796690 100644
--- a/lib/hipe/icode/hipe_icode_range.erl
+++ b/lib/hipe/icode/hipe_icode_range.erl
@@ -89,6 +89,7 @@
ret_type :: range(),
lookup_fun :: call_fun(),
result_action :: final_fun()}).
+-type state() :: #state{}.
-define(WIDEN, 1).
@@ -172,7 +173,7 @@ analyse(Cfg, Data) ->
catch throw:no_input -> ok
end.
--spec safe_analyse(cfg(), data()) -> #state{}.
+-spec safe_analyse(cfg(), data()) -> state().
safe_analyse(CFG, Data={MFA,_,_,_}) ->
State = state__init(CFG, Data),
@@ -181,14 +182,14 @@ safe_analyse(CFG, Data={MFA,_,_,_}) ->
(state__result_action(NewState))(MFA, [state__ret_type(NewState)]),
NewState.
--spec rewrite_blocks(#state{}) -> #state{}.
+-spec rewrite_blocks(state()) -> state().
rewrite_blocks(State) ->
CFG = state__cfg(State),
Start = hipe_icode_cfg:start_label(CFG),
rewrite_blocks([Start], State, [Start]).
--spec rewrite_blocks([label()], #state{}, [label()]) -> #state{}.
+-spec rewrite_blocks([label()], state(), [label()]) -> state().
rewrite_blocks([Next|Rest], State, Visited) ->
Info = state__info_in(State, Next),
@@ -201,7 +202,7 @@ rewrite_blocks([Next|Rest], State, Visited) ->
rewrite_blocks([], State, _) ->
State.
--spec analyse_blocks(#state{}, work_list()) -> #state{}.
+-spec analyse_blocks(state(), work_list()) -> state().
analyse_blocks(State, Work) ->
case get_work(Work) of
@@ -218,7 +219,7 @@ analyse_blocks(State, Work) ->
analyse_blocks(NewState, NewWork2)
end.
--spec analyse_block(label(), info(), #state{}, boolean()) -> {#state{}, [label()]}.
+-spec analyse_block(label(), info(), state(), boolean()) -> {state(), [label()]}.
analyse_block(Label, Info, State, Rewrite) ->
BB = state__bb(State, Label),
@@ -612,36 +613,32 @@ analyse_if(If, Info, Rewrite) ->
{#icode_goto{} | #icode_if{}, [{label(), info()}]}.
analyse_sane_if(If, Info, [Arg1, Arg2], [Range1, Range2], Rewrite) ->
- case normalize_name(hipe_icode:if_op(If)) of
- '>' ->
- {TrueRange2, TrueRange1, FalseRange2, FalseRange1} =
- range_inequality_propagation(Range2, Range1);
- '<' ->
- {TrueRange1, TrueRange2, FalseRange1, FalseRange2} =
+ {TrueRange1, TrueRange2, FalseRange1, FalseRange2} =
+ case normalize_name(hipe_icode:if_op(If)) of
+ '>' ->
+ {TR2, TR1, FR2, FR1} = range_inequality_propagation(Range2, Range1),
+ {TR1, TR2, FR1, FR2};
+ '<' ->
range_inequality_propagation(Range1, Range2);
- '>=' ->
- {FalseRange1, FalseRange2, TrueRange1, TrueRange2} =
- range_inequality_propagation(Range1, Range2);
- '=<' ->
- {FalseRange2, FalseRange1, TrueRange2, TrueRange1} =
- range_inequality_propagation(Range2, Range1);
- '=:=' ->
- {TrueRange1, TrueRange2, FalseRange1, FalseRange2} =
- range_equality_propagation(Range1, Range2);
- '=/=' ->
- {FalseRange1, FalseRange2, TrueRange1, TrueRange2} =
- range_equality_propagation(Range1, Range2);
- '==' ->
- {TempTrueRange1, TempTrueRange2, FalseRange1, FalseRange2} =
- range_equality_propagation(Range1, Range2),
- TrueRange1 = set_other(TempTrueRange1, other(Range1)),
- TrueRange2 = set_other(TempTrueRange2, other(Range2));
- '/=' ->
- {TempFalseRange1, TempFalseRange2, TrueRange1, TrueRange2} =
- range_equality_propagation(Range1, Range2),
- FalseRange1 = set_other(TempFalseRange1, other(Range1)),
- FalseRange2 = set_other(TempFalseRange2, other(Range2))
- end,
+ '>=' ->
+ {FR1, FR2, TR1, TR2} = range_inequality_propagation(Range1, Range2),
+ {TR1, TR2, FR1, FR2};
+ '=<' ->
+ {FR2, FR1, TR2, TR1} = range_inequality_propagation(Range2, Range1),
+ {TR1, TR2, FR1, FR2};
+ '=:=' ->
+ {TR1, TR2, FR1, FR2} = range_equality_propagation(Range1, Range2),
+ {TR1, TR2, FR1, FR2};
+ '=/=' ->
+ {FR1, FR2, TR1, TR2} = range_equality_propagation(Range1, Range2),
+ {TR1, TR2, FR1, FR2};
+ '==' ->
+ {TR1, TR2, FR1, FR2} = range_equality_propagation(Range1, Range2),
+ {set_other(TR1,other(Range1)), set_other(TR2,other(Range2)), FR1, FR2};
+ '/=' ->
+ {FR1, FR2, TR1, TR2} = range_equality_propagation(Range1, Range2),
+ {TR1, TR2, set_other(FR1,other(Range1)), set_other(FR2,other(Range2))}
+ end,
%% io:format("TR1 = ~w\nTR2 = ~w\n", [TrueRange1, TrueRange2]),
True =
case lists:all(fun range__is_none/1, [TrueRange1, TrueRange2]) of
@@ -694,26 +691,24 @@ normalize_name(Name) ->
-spec range_equality_propagation(range(), range()) ->
{range(), range(), range(), range()}.
-range_equality_propagation(Range_1, Range_2) ->
- True_range = inf(Range_1, Range_2),
- case {range(Range_1), range(Range_2)} of
- {{N,N}, {N,N}} ->
- False_range_1 = none_range(),
- False_range_2 = none_range();
- {{N1,N1}, {N2,N2}} ->
- False_range_1 = Range_1,
- False_range_2 = Range_2;
- {{N,N}, _} ->
- False_range_1 = Range_1,
- {_,False_range_2} = compare_with_integer(N, Range_2);
- {_, {N,N}} ->
- False_range_2 = Range_2,
- {_,False_range_1} = compare_with_integer(N, Range_1);
- {_, _} ->
- False_range_1 = Range_1,
- False_range_2 = Range_2
- end,
- {True_range, True_range, False_range_1, False_range_2}.
+range_equality_propagation(Range1, Range2) ->
+ TrueRange = inf(Range1, Range2),
+ {FalseRange1, FalseRange2} =
+ case {range(Range1), range(Range2)} of
+ {{N,N}, {N,N}} ->
+ {none_range(), none_range()};
+ {{N1,N1}, {N2,N2}} ->
+ {Range1, Range2};
+ {{N,N}, _} ->
+ {_,FR2} = compare_with_integer(N, Range2),
+ {Range1, FR2};
+ {_, {N,N}} ->
+ {_,FR1} = compare_with_integer(N, Range1),
+ {FR1, Range2};
+ {_, _} ->
+ {Range1, Range2}
+ end,
+ {TrueRange, TrueRange, FalseRange1, FalseRange2}.
-spec range_inequality_propagation(range(), range()) ->
{range(), range(), range(), range()}.
@@ -779,18 +774,17 @@ analyse_type(Type, Info, Rewrite) ->
TypeTest = hipe_icode:type_test(Type),
[Arg|_] = hipe_icode:type_args(Type),
OldVarRange = get_range_from_arg(Arg),
- case TypeTest of
- {integer, N} ->
- {TrueRange,FalseRange} = compare_with_integer(N,OldVarRange);
- integer ->
- TrueRange = inf(any_range(), OldVarRange),
- FalseRange = inf(none_range(), OldVarRange);
- number ->
- TrueRange = FalseRange = OldVarRange;
- _ ->
- TrueRange = inf(none_range(), OldVarRange),
- FalseRange = OldVarRange
- end,
+ {TrueRange, FalseRange} =
+ case TypeTest of
+ {integer, N} ->
+ compare_with_integer(N, OldVarRange);
+ integer ->
+ {inf(any_range(), OldVarRange), inf(none_range(), OldVarRange)};
+ number ->
+ {OldVarRange, OldVarRange};
+ _ ->
+ {inf(none_range(), OldVarRange), OldVarRange}
+ end,
TrueLabel = hipe_icode:type_true_label(Type),
FalseLabel = hipe_icode:type_false_label(Type),
TrueInfo = enter_define({Arg, TrueRange}, Info),
@@ -1201,14 +1195,12 @@ basic_type(#unsafe_update_element{}) -> not_analysed.
analyse_bs_get_integer(Size, Flags, true) ->
Signed = Flags band 4,
- if Signed =:= 0 ->
- Max = inf_add(inf_bsl(1, Size), -1),
- Min = 0;
- true ->
- Max = inf_add(inf_bsl(1, Size-1), -1),
- Min = inf_inv(inf_bsl(1, Size-1))
- end,
- {Min, Max};
+ case Signed =:= 0 of
+ true ->
+ {0, inf_add(inf_bsl(1, Size), -1)}; % return {Min, Max}
+ false ->
+ {inf_inv(inf_bsl(1, Size-1)), inf_add(inf_bsl(1, Size-1), -1)}
+ end;
analyse_bs_get_integer(Size, Flags, false) when is_integer(Size),
is_integer(Flags) ->
any_r().
@@ -1653,7 +1645,7 @@ inf_bsl(Number1, Number2) when is_integer(Number1), is_integer(Number2) ->
%% State
--spec state__init(cfg(), data()) -> #state{}.
+-spec state__init(cfg(), data()) -> state().
state__init(Cfg, {MFA, ArgsFun, CallFun, FinalFun}) ->
Start = hipe_icode_cfg:start_label(Cfg),
@@ -1676,19 +1668,19 @@ state__init(Cfg, {MFA, ArgsFun, CallFun, FinalFun}) ->
lookup_fun=CallFun, result_action=FinalFun}
end.
--spec state__cfg(#state{}) -> cfg().
+-spec state__cfg(state()) -> cfg().
state__cfg(#state{cfg=Cfg}) ->
Cfg.
--spec state__bb(#state{}, label()) -> bb().
+-spec state__bb(state(), label()) -> bb().
state__bb(#state{cfg=Cfg}, Label) ->
BB = hipe_icode_cfg:bb(Cfg, Label),
true = hipe_bb:is_bb(BB), % Just an assert
BB.
--spec state__bb_add(#state{}, label(), bb()) -> #state{}.
+-spec state__bb_add(state(), label(), bb()) -> state().
state__bb_add(S=#state{cfg=Cfg}, Label, BB) ->
NewCfg = hipe_icode_cfg:bb_add(Cfg, Label, BB),
@@ -1774,14 +1766,12 @@ join_info_in([Var|Left], Info1, Info2, Acc, Changed) ->
NewTree = gb_trees:insert(Var, Val, Acc),
join_info_in(Left, Info1, Info2, NewTree, Changed);
{{value, Val1}, {value, Val2}} ->
- NewVal =
+ {NewChanged, NewVal} =
case sup(Val1, Val2) of
Val1 ->
- NewChanged = Changed,
- Val1;
+ {Changed, Val1};
Val ->
- NewChanged = true,
- Val
+ {true, Val}
end,
NewTree = gb_trees:insert(Var, NewVal, Acc),
join_info_in(Left, Info1, Info2, NewTree, NewChanged)
diff --git a/lib/hipe/icode/hipe_icode_type.erl b/lib/hipe/icode/hipe_icode_type.erl
index e3ba00c5e9..794c27ebcc 100644
--- a/lib/hipe/icode/hipe_icode_type.erl
+++ b/lib/hipe/icode/hipe_icode_type.erl
@@ -105,6 +105,7 @@
ret_type = [t_none()] :: [erl_types:erl_type()],
lookupfun :: call_fun(),
resultaction :: final_fun()}).
+-type state() :: #state{}.
%%-----------------------------------------------------------------------
%% The main exported function
@@ -193,7 +194,7 @@ analyse(Cfg, Data) ->
catch throw:no_input -> ok % No need to do anything since we have no input
end.
--spec safe_analyse(cfg(), data()) -> #state{}.
+-spec safe_analyse(cfg(), data()) -> state().
safe_analyse(Cfg, {MFA,_,_,_}=Data) ->
State = new_state(Cfg, Data),
@@ -363,6 +364,7 @@ call_always_fails(#icode_call{} = I, Info) ->
%% These can actually be calls too.
{erlang, halt, 0} -> false;
{erlang, halt, 1} -> false;
+ {erlang, halt, 2} -> false;
{erlang, exit, 1} -> false;
{erlang, error, 1} -> false;
{erlang, error, 2} -> false;
@@ -460,24 +462,24 @@ integer_range_inequality_propagation(Op, A1, A2, TrueLab, FalseLab, Info) ->
NonIntArg1 = t_subtract(Arg1, t_integer()),
NonIntArg2 = t_subtract(Arg2, t_integer()),
?ineq_debug("nonintargs", [NonIntArg1,NonIntArg2]),
- case t_is_none(IntArg1) or t_is_none(IntArg2) of
+ case t_is_none(IntArg1) orelse t_is_none(IntArg2) of
true ->
?ineq_debug("one is none", [IntArg1,IntArg2]),
[{TrueLab, Info}, {FalseLab, Info}];
false ->
- case Op of
- '>=' ->
- {FalseArg1, FalseArg2, TrueArg1, TrueArg2} =
- integer_range_less_then_propagator(IntArg1, IntArg2);
- '>' ->
- {TrueArg2, TrueArg1, FalseArg2, FalseArg1} =
- integer_range_less_then_propagator(IntArg2, IntArg1);
- '<' ->
- {TrueArg1, TrueArg2, FalseArg1, FalseArg2} =
- integer_range_less_then_propagator(IntArg1, IntArg2);
- '=<' ->
- {FalseArg2, FalseArg1, TrueArg2, TrueArg1} =
- integer_range_less_then_propagator(IntArg2, IntArg1)
+ {TrueArg1, TrueArg2, FalseArg1, FalseArg2} =
+ case Op of
+ '>=' ->
+ {FA1, FA2, TA1, TA2} = int_range_lt_propagator(IntArg1, IntArg2),
+ {TA1, TA2, FA1, FA2};
+ '>' ->
+ {TA2, TA1, FA2, FA1} = int_range_lt_propagator(IntArg2, IntArg1),
+ {TA1, TA2, FA1, FA2};
+ '<' ->
+ int_range_lt_propagator(IntArg1, IntArg2);
+ '=<' ->
+ {FA2, FA1, TA2, TA1} = int_range_lt_propagator(IntArg2, IntArg1),
+ {TA1, TA2, FA1, FA2}
end,
?ineq_debug("int res", [TrueArg1, TrueArg2, FalseArg1, FalseArg2]),
False = {FalseLab, enter(A1, t_sup(FalseArg1, NonIntArg1),
@@ -487,7 +489,7 @@ integer_range_inequality_propagation(Op, A1, A2, TrueLab, FalseLab, Info) ->
[True, False]
end.
-integer_range_less_then_propagator(IntArg1, IntArg2) ->
+int_range_lt_propagator(IntArg1, IntArg2) ->
Min1 = number_min(IntArg1),
Max1 = number_max(IntArg1),
Min2 = number_min(IntArg2),
diff --git a/lib/hipe/llvm/Makefile b/lib/hipe/llvm/Makefile
index d2d39fb9e3..88016a7d8b 100644
--- a/lib/hipe/llvm/Makefile
+++ b/lib/hipe/llvm/Makefile
@@ -40,20 +40,19 @@ RELSYSDIR = $(RELEASE_PATH)/lib/hipe-$(VSN)
# Target Specs
# ----------------------------------------------------
ifdef HIPE_ENABLED
-HIPE_MODULES = hipe_rtl_to_llvm \
+HIPE_MODULES = elf_format \
hipe_llvm \
- elf_format \
+ hipe_llvm_liveness \
hipe_llvm_main \
hipe_llvm_merge \
- hipe_llvm_liveness
+ hipe_rtl_to_llvm
else
HIPE_MODULES =
endif
MODULES = $(HIPE_MODULES)
-HRL_FILES= elf_format.hrl elf32_format.hrl elf64_format.hrl \
- hipe_llvm_arch.hrl
+HRL_FILES= elf_format.hrl elf32_format.hrl elf64_format.hrl hipe_llvm_arch.hrl
ERL_FILES= $(MODULES:%=%.erl)
TARGET_FILES= $(MODULES:%=$(EBIN)/%.$(EMULATOR))
@@ -71,7 +70,7 @@ TARGET_FILES= $(MODULES:%=$(EBIN)/%.$(EMULATOR))
include ../native.mk
-ERL_COMPILE_FLAGS += +inline #+warn_missing_spec
+ERL_COMPILE_FLAGS += -Werror +inline +warn_export_vars #+warn_missing_spec
# if in 32 bit backend define BIT32 symbol
ARCH = $(shell echo $(TARGET) | sed 's/^\(x86_64\)-.*/64bit/')
@@ -108,3 +107,11 @@ release_spec: opt
$(INSTALL_DATA) $(TARGET_FILES) $(RELSYSDIR)/ebin
release_docs_spec:
+
+$(EBIN)/elf_format.beam: elf_format.hrl elf32_format.hrl elf64_format.hrl
+$(EBIN)/hipe_llvm_main.beam: ../../kernel/src/hipe_ext_format.hrl \
+ hipe_llvm_arch.hrl elf_format.hrl elf32_format.hrl elf64_format.hrl
+$(EBIN)/hipe_llvm_merge.beam: ../../kernel/src/hipe_ext_format.hrl \
+ hipe_llvm_arch.hrl ../rtl/hipe_literals.hrl ../main/hipe.hrl
+$(EBIN)/hipe_rtl_to_llvm.beam: ../rtl/hipe_rtl.hrl ../rtl/hipe_literals.hrl \
+ hipe_llvm_arch.hrl
diff --git a/lib/hipe/llvm/elf_format.erl b/lib/hipe/llvm/elf_format.erl
index 260da9b5e6..8cf6ea6250 100644
--- a/lib/hipe/llvm/elf_format.erl
+++ b/lib/hipe/llvm/elf_format.erl
@@ -13,21 +13,20 @@
-module(elf_format).
--export([get_tab_entries/1,
- %% Relocations
- get_rodata_relocs/1,
- get_text_relocs/1,
+-export([%% Relocations
extract_rela/2,
- get_rela_addends/1,
%% Note
extract_note/2,
%% Executable code
extract_text/1,
%% GCC Exception Table
- get_exn_handlers/1,
- %% Misc.
- set_architecture_flag/1,
- is64bit/0
+ get_exn_handlers/1,
+ %% Symbols
+ elf_symbols/1,
+ %% Sections
+ section_contents/2,
+ %% Main interface
+ read/1
]).
-include("elf_format.hrl").
@@ -36,27 +35,57 @@
%% Types
%%------------------------------------------------------------------------------
--type elf() :: binary().
-
--type lp() :: non_neg_integer(). % landing pad
--type num() :: non_neg_integer().
--type index() :: non_neg_integer().
--type offset() :: non_neg_integer().
--type size() :: non_neg_integer().
--type start() :: non_neg_integer().
-
--type info() :: index().
--type nameoff() :: offset().
--type valueoff() :: offset().
-
--type name() :: string().
--type name_size() :: {name(), size()}.
--type name_sizes() :: [name_size()].
+-export_type([elf/0
+ ,addend/0
+ ,bitflags/0
+ ,name/0
+ ,offset/0
+ ,reloc_type/0
+ ,shdr_type/0
+ ,size/0
+ ,sym_bind/0
+ ,sym_type/0
+ ,valueoff/0
+ ]).
+
+-type bitflags() :: non_neg_integer().
+-type index() :: non_neg_integer().
+-type lp() :: non_neg_integer(). % landing pad
+-type num() :: non_neg_integer().
+-type offset() :: non_neg_integer().
+-type size() :: non_neg_integer().
+-type start() :: non_neg_integer().
+
+-type addend() :: integer() | undefined.
+-type name() :: string().
+-type shdr_type() :: 'null' | 'progbits' | 'symtab' | 'strtab' | 'rela'
+ | 'hash' | 'dynamic' | 'note' | 'nobits' | 'rel' | 'shlib'
+ | 'dynsym' | {os, ?SHT_LOOS..?SHT_HIOS}
+ | {proc, ?SHT_LOPROC..?SHT_HIPROC}.
+-type sym_bind() :: 'local' | 'global' | 'weak' | {os, ?STB_LOOS..?STB_HIOS}
+ | {proc, ?STB_LOPROC..?STB_HIPROC}.
+-type sym_type() :: 'notype' | 'object' | 'func' | 'section' | 'file'
+ | {os, ?STT_LOOS..?STT_HIOS}
+ | {proc, ?STT_LOPROC..?STT_HIPROC}.
+-type valueoff() :: offset().
+
+-ifdef(BIT32). % 386
+-type reloc_type() :: '32' | 'pc32'.
+-else. % X86_64
+-type reloc_type() :: '64' | 'pc32' | '32'.
+-endif.
%%------------------------------------------------------------------------------
%% Abstract Data Types and Accessors for ELF Structures.
%%------------------------------------------------------------------------------
+-record(elf, {file :: binary()
+ ,sections :: [elf_shdr()]
+ ,sec_nam :: #{string() => elf_shdr()}
+ ,symbols :: undefined | [elf_sym()]
+ }).
+-opaque elf() :: #elf{}.
+
%% File header
-record(elf_ehdr, {ident, % ELF identification
type, % Object file type
@@ -85,42 +114,6 @@
}).
%% -type elf_ehdr_ident() :: #elf_ehdr_ident{}.
-%% Section header entries
--record(elf_shdr, {name, % Section name
- type, % Section type
- flags, % Section attributes
- addr, % Virtual address in memory
- offset :: offset(), % Offset in file
- size :: size(), % Size of section
- link, % Link to other section
- info, % Miscellaneous information
- addralign, % Address align boundary
- entsize % Size of entries, if section has table
- }).
-%% -type elf_shdr() :: #elf_shdr{}.
-
-%% Symbol table entries
--record(elf_sym, {name :: nameoff(), % Symbol name
- info, % Type and Binding attributes
- other, % Reserved
- shndx, % Section table index
- value :: valueoff(), % Symbol value
- size :: size() % Size of object
- }).
--type elf_sym() :: #elf_sym{}.
-
-%% Relocations
--record(elf_rel, {r_offset :: offset(), % Address of reference
- r_info :: info() % Symbol index and type of relocation
- }).
--type elf_rel() :: #elf_rel{}.
-
--record(elf_rela, {r_offset :: offset(), % Address of reference
- r_info :: info(), % Symbol index and type of relocation
- r_addend :: offset() % Constant part of expression
- }).
--type elf_rela() :: #elf_rela{}.
-
%% %% Program header table
%% -record(elf_phdr, {type, % Type of segment
%% flags, % Segment attributes
@@ -199,44 +192,19 @@ mk_shdr(Name, Type, Flags, Addr, Offset, Size, Link, Info, AddrAlign, EntSize) -
%%%-------------------------
%%% Symbol Table Entries
%%%-------------------------
-mk_sym(Name, Info, Other, Shndx, Value, Size) ->
- #elf_sym{name = Name, info = Info, other = Other,
- shndx = Shndx, value = Value, size = Size}.
-
--spec sym_name(elf_sym()) -> nameoff().
-sym_name(#elf_sym{name = Name}) -> Name.
+mk_sym(Name, Bind, Type, Section, Value, Size) ->
+ #elf_sym{name = Name, bind = Bind, type = Type,
+ section = Section, value = Value, size = Size}.
+%% -spec sym_name(elf_sym()) -> string().
+%% sym_name(#elf_sym{name = Name}) -> Name.
+%%
%% -spec sym_value(elf_sym()) -> valueoff().
%% sym_value(#elf_sym{value = Value}) -> Value.
%%
%% -spec sym_size(elf_sym()) -> size().
%% sym_size(#elf_sym{size = Size}) -> Size.
-%%%-------------------------
-%%% Relocations
-%%%-------------------------
--spec mk_rel(offset(), info()) -> elf_rel().
-mk_rel(Offset, Info) ->
- #elf_rel{r_offset = Offset, r_info = Info}.
-
-%% The following two functions capitalize on the fact that the two kinds of
-%% relocation records (for 32- and 64-bit architectures have similar structure.
-
--spec r_offset(elf_rel() | elf_rela()) -> offset().
-r_offset(#elf_rel{r_offset = Offset}) -> Offset;
-r_offset(#elf_rela{r_offset = Offset}) -> Offset.
-
--spec r_info(elf_rel() | elf_rela()) -> info().
-r_info(#elf_rel{r_info = Info}) -> Info;
-r_info(#elf_rela{r_info = Info}) -> Info.
-
--spec mk_rela(offset(), info(), offset()) -> elf_rela().
-mk_rela(Offset, Info, Addend) ->
- #elf_rela{r_offset = Offset, r_info = Info, r_addend = Addend}.
-
--spec rela_addend(elf_rela()) -> offset().
-rela_addend(#elf_rela{r_addend = Addend}) -> Addend.
-
%% %%%-------------------------
%% %%% GCC exception table
%% %%%-------------------------
@@ -263,15 +231,30 @@ mk_gccexntab_callsite(Start, Size, LP, Action) ->
%% gccexntab_callsite_lp(#elf_gccexntab_callsite{lp = LP}) -> LP.
%%------------------------------------------------------------------------------
+%% Main interface function
+%%------------------------------------------------------------------------------
+
+%% @doc Parses an ELF file.
+-spec read(binary()) -> elf().
+read(ElfBin) ->
+ Header = extract_header(ElfBin),
+ [_UndefinedSec|Sections] = extract_shdrtab(ElfBin, Header),
+ SecNam = maps:from_list(
+ [{Name, Sec} || Sec = #elf_shdr{name=Name} <- Sections]),
+ Elf0 = #elf{file=ElfBin, sections=Sections, sec_nam=SecNam},
+ [_UndefinedSym|Symbols] = extract_symtab(Elf0, extract_strtab(Elf0)),
+ Elf0#elf{symbols=Symbols}.
+
+%%------------------------------------------------------------------------------
%% Functions to manipulate the ELF File Header
%%------------------------------------------------------------------------------
%% @doc Extracts the File Header from an ELF formatted object file. Also sets
%% the ELF class variable in the process dictionary (used by many functions
%% in this and hipe_llvm_main modules).
--spec extract_header(elf()) -> elf_ehdr().
-extract_header(Elf) ->
- Ehdr_bin = get_binary_segment(Elf, 0, ?ELF_EHDR_SIZE),
+-spec extract_header(binary()) -> elf_ehdr().
+extract_header(ElfBin) ->
+ Ehdr_bin = get_binary_segment(ElfBin, 0, ?ELF_EHDR_SIZE),
<< %% Structural pattern matching on fields.
Ident_bin:?E_IDENT_SIZE/binary,
Type:?bits(?E_TYPE_SIZE)/integer-little,
@@ -300,19 +283,28 @@ extract_header(Elf) ->
%% Functions to manipulate Section Header Entries
%%------------------------------------------------------------------------------
+-type shdrtab() :: [elf_shdr()].
+
%% @doc Extracts the Section Header Table from an ELF formated Object File.
-extract_shdrtab(Elf) ->
- %% Extract File Header to get info about Section Header Offset (in bytes),
- %% Entry Size (in bytes) and Number of entries
- #elf_ehdr{shoff = ShOff, shentsize = ShEntsize, shnum = ShNum} =
- extract_header(Elf),
+-spec extract_shdrtab(binary(), elf_ehdr()) -> shdrtab().
+extract_shdrtab(ElfBin, #elf_ehdr{shoff=ShOff, shentsize=?ELF_SHDRENTRY_SIZE,
+ shnum=ShNum, shstrndx=ShStrNdx}) ->
%% Get actual Section header table (binary)
- ShdrBin = get_binary_segment(Elf, ShOff, ShNum * ShEntsize),
- get_shdrtab_entries(ShdrBin, []).
-
-get_shdrtab_entries(<<>>, Acc) ->
- lists:reverse(Acc);
-get_shdrtab_entries(ShdrBin, Acc) ->
+ ShdrBin = get_binary_segment(ElfBin, ShOff, ShNum * ?ELF_SHDRENTRY_SIZE),
+ %% We need to lookup the offset and size of the section header string table
+ %% before we can fully parse the section table. We compute its offset and
+ %% extract the fields we need here.
+ ShStrEntryOffset = ShStrNdx * ?ELF_SHDRENTRY_SIZE,
+ <<_:ShStrEntryOffset/binary, _:?SH_NAME_SIZE/binary,
+ _:?SH_TYPE_SIZE/binary, _:?SH_FLAGS_SIZE/binary, _:?SH_ADDR_SIZE/binary,
+ ShStrOffset:?bits(?SH_OFFSET_SIZE)/little,
+ ShStrSize:?bits(?SH_SIZE_SIZE)/little,
+ _/binary>> = ShdrBin,
+ ShStrTab = parse_strtab(get_binary_segment(ElfBin, ShStrOffset, ShStrSize)),
+ get_shdrtab_entries(ShdrBin, ShStrTab).
+
+get_shdrtab_entries(<<>>, _ShStrTab) -> [];
+get_shdrtab_entries(ShdrTab, ShStrTab) ->
<<%% Structural pattern matching on fields.
Name:?bits(?SH_NAME_SIZE)/integer-little,
Type:?bits(?SH_TYPE_SIZE)/integer-little,
@@ -324,205 +316,166 @@ get_shdrtab_entries(ShdrBin, Acc) ->
Info:?bits(?SH_INFO_SIZE)/integer-little,
Addralign:?bits(?SH_ADDRALIGN_SIZE)/integer-little,
Entsize:?bits(?SH_ENTSIZE_SIZE)/integer-little,
- MoreShdrE/binary
- >> = ShdrBin,
- ShdrE = mk_shdr(Name, Type, Flags, Addr, Offset,
- Size, Link, Info, Addralign, Entsize),
- get_shdrtab_entries(MoreShdrE, [ShdrE | Acc]).
-
-%% @doc Extracts a specific Entry of a Section Header Table. This function
-%% takes as argument the Section Header Table (`SHdrTab') and the entry's
-%% serial number (`EntryNum') and returns the entry (`shdr').
-get_shdrtab_entry(SHdrTab, EntryNum) ->
- lists:nth(EntryNum + 1, SHdrTab).
-
-%%------------------------------------------------------------------------------
-%% Functions to manipulate Section Header String Table
-%%------------------------------------------------------------------------------
-
-%% @doc Extracts the Section Header String Table. This section is not a known
-%% ELF Object File section. It is just a "hidden" table storing the
-%% names of all sections that exist in current object file.
--spec extract_shstrtab(elf()) -> [name()].
-extract_shstrtab(Elf) ->
- %% Extract Section Name String Table Index
- #elf_ehdr{shstrndx = ShStrNdx} = extract_header(Elf),
- ShHdrTab = extract_shdrtab(Elf),
- %% Extract Section header entry and get actual Section-header String Table
- #elf_shdr{offset = ShStrOffset, size = ShStrSize} =
- get_shdrtab_entry(ShHdrTab, ShStrNdx),
- case get_binary_segment(Elf, ShStrOffset, ShStrSize) of
- <<>> -> %% Segment empty
- [];
- ShStrTab -> %% Convert to string table
- [Name || {Name, _Size} <- get_names(ShStrTab)]
- end.
-
-%%------------------------------------------------------------------------------
-
--spec get_tab_entries(elf()) -> [{name(), valueoff(), size()}].
-get_tab_entries(Elf) ->
- SymTab = extract_symtab(Elf),
- Ts = [{Name, Value, Size div ?ELF_XWORD_SIZE}
- || #elf_sym{name = Name, value = Value, size = Size} <- SymTab,
- Name =/= 0],
- {NameIndices, ValueOffs, Sizes} = lists:unzip3(Ts),
- %% Find the names of the symbols.
- %% Get string table entries ([{Name, Offset in strtab section}]). Keep only
- %% relevant entries:
- StrTab = extract_strtab(Elf),
- Relevant = [get_strtab_entry(StrTab, Off) || Off <- NameIndices],
- %% Zip back to {Name, ValueOff, Size}
- lists:zip3(Relevant, ValueOffs, Sizes).
+ Rest/binary
+ >> = ShdrTab,
+ Entry = mk_shdr(get_strtab_entry(Name, ShStrTab), decode_shdr_type(Type),
+ Flags, Addr, Offset, Size, Link, Info, Addralign, Entsize),
+ [Entry | get_shdrtab_entries(Rest, ShStrTab)].
+
+decode_shdr_type(?SHT_NULL) -> 'null';
+decode_shdr_type(?SHT_PROGBITS) -> 'progbits';
+decode_shdr_type(?SHT_SYMTAB) -> 'symtab';
+decode_shdr_type(?SHT_STRTAB) -> 'strtab';
+decode_shdr_type(?SHT_RELA) -> 'rela';
+decode_shdr_type(?SHT_HASH) -> 'hash'; %unused
+decode_shdr_type(?SHT_DYNAMIC) -> 'dynamic'; %unused
+decode_shdr_type(?SHT_NOTE) -> 'note'; %unused
+decode_shdr_type(?SHT_NOBITS) -> 'nobits';
+decode_shdr_type(?SHT_REL) -> 'rel';
+decode_shdr_type(?SHT_SHLIB) -> 'shlib'; %unused
+decode_shdr_type(?SHT_DYNSYM) -> 'dynsym'; %unused
+decode_shdr_type(OS) when ?SHT_LOOS =< OS, OS =< ?SHT_HIOS -> {os, OS};
+decode_shdr_type(Proc) when ?SHT_LOPROC =< Proc, Proc =< ?SHT_HIPROC ->
+ {proc, Proc}.
+
+-spec elf_section(non_neg_integer(), elf()) -> undefined | abs | elf_shdr().
+elf_section(0, #elf{}) -> undefined;
+elf_section(?SHN_ABS, #elf{}) -> abs;
+elf_section(Index, #elf{sections=SecIdx}) ->
+ lists:nth(Index, SecIdx).
+
+%% Reads the contents of a section from an object
+-spec section_contents(elf_shdr(), elf()) -> binary().
+section_contents(#elf_shdr{offset=Offset, size=Size}, #elf{file=ElfBin}) ->
+ get_binary_segment(ElfBin, Offset, Size).
%%------------------------------------------------------------------------------
%% Functions to manipulate Symbol Table
%%------------------------------------------------------------------------------
%% @doc Function that extracts Symbol Table from an ELF Object file.
-extract_symtab(Elf) ->
- Symtab_bin = extract_segment_by_name(Elf, ?SYMTAB),
- get_symtab_entries(Symtab_bin, []).
-
-get_symtab_entries(<<>>, Acc) ->
- lists:reverse(Acc);
-get_symtab_entries(Symtab_bin, Acc) ->
- <<SymE_bin:?ELF_SYM_SIZE/binary, MoreSymE/binary>> = Symtab_bin,
- case is64bit() of
- true ->
- <<%% Structural pattern matching on fields.
- Name:?bits(?ST_NAME_SIZE)/integer-little,
- Info:?bits(?ST_INFO_SIZE)/integer-little,
- Other:?bits(?ST_OTHER_SIZE)/integer-little,
- Shndx:?bits(?ST_SHNDX_SIZE)/integer-little,
- Value:?bits(?ST_VALUE_SIZE)/integer-little,
- Size:?bits(?ST_SIZE_SIZE)/integer-little
- >> = SymE_bin;
- false ->
- << %% Same fields in different order:
- Name:?bits(?ST_NAME_SIZE)/integer-little,
- Value:?bits(?ST_VALUE_SIZE)/integer-little,
- Size:?bits(?ST_SIZE_SIZE)/integer-little,
- Info:?bits(?ST_INFO_SIZE)/integer-little,
- Other:?bits(?ST_OTHER_SIZE)/integer-little,
- Shndx:?bits(?ST_SHNDX_SIZE)/integer-little
- >> = SymE_bin
- end,
- SymE = mk_sym(Name, Info, Other, Shndx, Value, Size),
- get_symtab_entries(MoreSymE, [SymE | Acc]).
-
-%% @doc Extracts a specific entry from the Symbol Table (as binary).
-%% This function takes as arguments the Symbol Table (`SymTab')
-%% and the entry's serial number and returns that entry (`sym').
-get_symtab_entry(SymTab, EntryNum) ->
- lists:nth(EntryNum + 1, SymTab).
+extract_symtab(Elf, StrTab) ->
+ Symtab = extract_segment_by_name(Elf, ?SYMTAB),
+ [parse_sym(Sym, Elf, StrTab) || <<Sym:?ELF_SYM_SIZE/binary>> <= Symtab].
+
+-ifdef(BIT32).
+parse_sym(<<%% Structural pattern matching on fields.
+ Name:?bits(?ST_NAME_SIZE)/integer-little,
+ Value:?bits(?ST_VALUE_SIZE)/integer-little,
+ Size:?bits(?ST_SIZE_SIZE)/integer-little,
+ Info:?bits(?ST_INFO_SIZE)/integer-little,
+ _Other:?bits(?ST_OTHER_SIZE)/integer-little,
+ Shndx:?bits(?ST_SHNDX_SIZE)/integer-little>>,
+ Elf, StrTab) ->
+ mk_sym(get_strtab_entry(Name, StrTab), decode_symbol_bind(?ELF_ST_BIND(Info)),
+ decode_symbol_type(?ELF_ST_TYPE(Info)), elf_section(Shndx, Elf), Value,
+ Size).
+-else.
+parse_sym(<<%% Same fields in different order:
+ Name:?bits(?ST_NAME_SIZE)/integer-little,
+ Info:?bits(?ST_INFO_SIZE)/integer-little,
+ _Other:?bits(?ST_OTHER_SIZE)/integer-little,
+ Shndx:?bits(?ST_SHNDX_SIZE)/integer-little,
+ Value:?bits(?ST_VALUE_SIZE)/integer-little,
+ Size:?bits(?ST_SIZE_SIZE)/integer-little>>,
+ Elf, StrTab) ->
+ mk_sym(get_strtab_entry(Name, StrTab), decode_symbol_bind(?ELF_ST_BIND(Info)),
+ decode_symbol_type(?ELF_ST_TYPE(Info)), elf_section(Shndx, Elf), Value,
+ Size).
+-endif.
+
+decode_symbol_bind(?STB_LOCAL) -> 'local';
+decode_symbol_bind(?STB_GLOBAL) -> 'global';
+decode_symbol_bind(?STB_WEAK) -> 'weak'; %unused
+decode_symbol_bind(OS) when ?STB_LOOS =< OS, OS =< ?STB_HIOS -> {os, OS};
+decode_symbol_bind(Proc) when ?STB_LOPROC =< Proc, Proc =< ?STB_HIPROC ->
+ {proc, Proc}.
+
+decode_symbol_type(?STT_NOTYPE) -> 'notype';
+decode_symbol_type(?STT_OBJECT) -> 'object';
+decode_symbol_type(?STT_FUNC) -> 'func';
+decode_symbol_type(?STT_SECTION) -> 'section';
+decode_symbol_type(?STT_FILE) -> 'file';
+decode_symbol_type(OS) when ?STT_LOOS =< OS, OS =< ?STT_HIOS -> {os, OS};
+decode_symbol_type(Proc) when ?STT_LOPROC =< Proc, Proc =< ?STT_HIPROC ->
+ {proc, Proc}.
+
+%% @doc Extracts a specific entry from the Symbol Table.
+-spec elf_symbol(0, elf()) -> undefined;
+ (pos_integer(), elf()) -> elf_sym().
+elf_symbol(0, #elf{}) -> undefined;
+elf_symbol(Index, #elf{symbols=Symbols}) -> lists:nth(Index, Symbols).
+
+-spec elf_symbols(elf()) -> [elf_sym()].
+elf_symbols(#elf{symbols=Symbols}) -> Symbols.
%%------------------------------------------------------------------------------
%% Functions to manipulate String Table
%%------------------------------------------------------------------------------
+%% ADT: get_strtab_entry/1 must be used to consume this type.
+-type strtab() :: binary().
+
%% @doc Extracts String Table from an ELF formated Object File.
--spec extract_strtab(elf()) -> [{string(), offset()}].
+-spec extract_strtab(elf()) -> strtab().
extract_strtab(Elf) ->
- Strtab_bin = extract_segment_by_name(Elf, ?STRTAB),
- NamesSizes = get_names(Strtab_bin),
- make_offsets(NamesSizes).
-
-%% @doc Returns the name of the symbol at the given offset. The string table
-%% contains entries of the form {Name, Offset}. If no such offset exists
-%% returns the empty string (`""').
-%% XXX: There might be a bug here because of the "compact" saving the ELF
-%% format uses: e.g. only stores ".rela.text" for ".rela.text" and ".text".
-get_strtab_entry(Strtab, Offset) ->
- case lists:keyfind(Offset, 2, Strtab) of
- {Name, Offset} -> Name;
- false -> ""
- end.
+ parse_strtab(extract_segment_by_name(Elf, ?STRTAB)).
+
+-spec parse_strtab(binary()) -> strtab().
+parse_strtab(StrTabSectionBin) -> StrTabSectionBin.
+
+%% @doc Returns the name of the symbol at the given offset.
+-spec get_strtab_entry(non_neg_integer(), strtab()) -> string().
+get_strtab_entry(Offset, StrTab) ->
+ <<_:Offset/binary, StrBin/binary>> = StrTab,
+ bin_get_string(StrBin).
+
+%% @doc Extracts a null-terminated string from a binary.
+-spec bin_get_string(binary()) -> string().
+%% FIXME: No regard for encoding (just happens to work for ASCII and Latin-1)
+bin_get_string(<<0, _/binary>>) -> [];
+bin_get_string(<<Char, Rest/binary>>) -> [Char|bin_get_string(Rest)].
%%------------------------------------------------------------------------------
%% Functions to manipulate Relocations
%%------------------------------------------------------------------------------
-%% @doc This function gets as argument an ELF binary file and returns a list
-%% with all .rela.rodata labels (i.e. constants and literals in code)
-%% or an empty list if no ".rela.rodata" section exists in code.
--spec get_rodata_relocs(elf()) -> [offset()].
-get_rodata_relocs(Elf) ->
- case is64bit() of
- true ->
- %% Only care about the addends (== offsets):
- get_rela_addends(extract_rela(Elf, ?RODATA));
- false ->
- %% Find offsets hardcoded in ".rodata" entry
- %%XXX: Treat all 0s as padding and skip them!
- [SkipPadding || SkipPadding <- extract_rodata(Elf), SkipPadding =/= 0]
- end.
-
--spec get_rela_addends([elf_rela()]) -> [offset()].
-get_rela_addends(RelaEntries) ->
- [rela_addend(E) || E <- RelaEntries].
-
-%% @doc Extract a list of the form `[{SymbolName, Offset}]' with all relocatable
-%% symbols and their offsets in the code from the ".text" section.
--spec get_text_relocs(elf()) -> [{name(), offset()}].
-get_text_relocs(Elf) ->
- %% Only care about the symbol table index and the offset:
- NameOffsetTemp = [{?ELF_R_SYM(r_info(E)), r_offset(E)}
- || E <- extract_rela(Elf, ?TEXT)],
- {NameIndices, ActualOffsets} = lists:unzip(NameOffsetTemp),
- %% Find the names of the symbols:
- %%
- %% Get those symbol table entries that are related to Text relocs:
- Symtab = extract_symtab(Elf),
- SymtabEs = [get_symtab_entry(Symtab, Index) || Index <- NameIndices],
- %XXX: not zero-indexed!
- %% Symbol table entries contain the offset of the name of the symbol in
- %% String Table:
- SymtabEs2 = [sym_name(E) || E <- SymtabEs], %XXX: Do we need to sort SymtabE?
- %% Get string table entries ([{Name, Offset in strtab section}]). Keep only
- %% relevant entries:
- Strtab = extract_strtab(Elf),
- Relevant = [get_strtab_entry(Strtab, Off) || Off <- SymtabEs2],
- %% Zip back with actual offsets:
- lists:zip(Relevant, ActualOffsets).
-
%% @doc Extract the Relocations segment for section `Name' (that is passed
%% as second argument) from an ELF formated Object file binary.
--spec extract_rela(elf(), name()) -> [elf_rel() | elf_rela()].
+-spec extract_rela(elf(), name()) -> [elf_rel()].
+
+-ifdef(BIT32).
extract_rela(Elf, Name) ->
- SegName =
- case is64bit() of
- true -> ?RELA(Name); % ELF-64 uses ".rela"
- false -> ?REL(Name) % ...while ELF-32 uses ".rel"
- end,
- Rela_bin = extract_segment_by_name(Elf, SegName),
- get_rela_entries(Rela_bin, []).
-
-get_rela_entries(<<>>, Acc) ->
- lists:reverse(Acc);
-get_rela_entries(Bin, Acc) ->
- E = case is64bit() of
- true ->
- <<%% Structural pattern matching on fields of a Rela Entry.
- Offset:?bits(?R_OFFSET_SIZE)/integer-little,
- Info:?bits(?R_INFO_SIZE)/integer-little,
- Addend:?bits(?R_ADDEND_SIZE)/integer-little,
- Rest/binary
- >> = Bin,
- mk_rela(Offset, Info, Addend);
- false ->
- <<%% Structural pattern matching on fields of a Rel Entry.
- Offset:?bits(?R_OFFSET_SIZE)/integer-little,
- Info:?bits(?R_INFO_SIZE)/integer-little,
- Rest/binary
- >> = Bin,
- mk_rel(Offset, Info)
- end,
- get_rela_entries(Rest, [E | Acc]).
-
-%% %% @doc Extract the `EntryNum' (serial number) Relocation Entry.
-%% get_rela_entry(Rela, EntryNum) ->
-%% lists:nth(EntryNum + 1, Rela).
+ SecData = extract_segment_by_name(Elf, Name),
+ [#elf_rel{offset=Offset, symbol=elf_symbol(?ELF_R_SYM(Info), Elf),
+ type=decode_reloc_type(?ELF_R_TYPE(Info)),
+ addend=read_implicit_addend(Offset, SecData)}
+ || <<Offset:?bits(?R_OFFSET_SIZE)/little,
+ Info:?bits(?R_INFO_SIZE)/little % 386 uses ".rel"
+ >> <= extract_segment_by_name(Elf, ?REL(Name))].
+
+%% The only types HiPE knows how to patch
+decode_reloc_type(1) -> '32';
+decode_reloc_type(2) -> 'pc32'.
+
+read_implicit_addend(Offset, Section) ->
+ %% All x86 relocation types uses 'word32' relocation fields; i.e. 32-bit LE.
+ <<_:Offset/binary, Addend:32/signed-little, _/binary>> = Section,
+ Addend.
+
+-else. %% BIT32
+extract_rela(Elf, Name) ->
+ [#elf_rel{offset=Offset, symbol=elf_symbol(?ELF_R_SYM(Info), Elf),
+ type=decode_reloc_type(?ELF_R_TYPE(Info)), addend=Addend}
+ || <<Offset:?bits(?R_OFFSET_SIZE)/little,
+ Info:?bits(?R_INFO_SIZE)/little,
+ Addend:?bits(?R_ADDEND_SIZE)/signed-little % X86_64 uses ".rela"
+ >> <= extract_segment_by_name(Elf, ?RELA(Name))].
+
+decode_reloc_type(1) -> '64';
+decode_reloc_type(2) -> 'pc32';
+decode_reloc_type(10) -> '32'.
+-endif. %% BIT32
%%------------------------------------------------------------------------------
%% Functions to manipulate Executable Code segment
@@ -615,19 +568,6 @@ get_gccexntab_callsites(CSTab, Acc) ->
get_gccexntab_callsites(More, [GccCS | Acc]).
%%------------------------------------------------------------------------------
-%% Functions to manipulate Read-only Data (.rodata)
-%%------------------------------------------------------------------------------
-extract_rodata(Elf) ->
- Rodata_bin = extract_segment_by_name(Elf, ?RODATA),
- get_rodata_entries(Rodata_bin, []).
-
-get_rodata_entries(<<>>, Acc) ->
- lists:reverse(Acc);
-get_rodata_entries(Rodata_bin, Acc) ->
- <<Num:?bits(?ELF_ADDR_SIZE)/integer-little, More/binary>> = Rodata_bin,
- get_rodata_entries(More, [Num | Acc]).
-
-%%------------------------------------------------------------------------------
%% Helper functions
%%------------------------------------------------------------------------------
@@ -647,107 +587,15 @@ get_binary_segment(Bin, Offset, Size) ->
%% There are handy macros defined in elf_format.hrl for all Standard
%% Section Names.
-spec extract_segment_by_name(elf(), string()) -> binary().
-extract_segment_by_name(Elf, SectionName) ->
- %% Extract Section Header Table and Section Header String Table from binary
- SHdrTable = extract_shdrtab(Elf),
- Names = extract_shstrtab(Elf),
- %% Zip to a list of (Name,ShdrE)
- [_Zero | ShdrEs] = lists:keysort(2, SHdrTable), % Skip first entry (zeros).
- L = lists:zip(Names, ShdrEs),
+extract_segment_by_name(#elf{file=ElfBin, sec_nam=SecNam}, SectionName) ->
%% Find Section Header Table entry by name
- case lists:keyfind(SectionName, 1, L) of
- {SectionName, ShdrE} -> %% Note: Same name.
- #elf_shdr{offset = Offset, size = Size} = ShdrE,
- get_binary_segment(Elf, Offset, Size);
- false -> %% Not found.
+ case SecNam of
+ #{SectionName := #elf_shdr{offset=Offset, size=Size}} ->
+ get_binary_segment(ElfBin, Offset, Size);
+ #{} -> %% Not found.
<<>>
end.
-%% @doc Extracts a list of strings with (zero-separated) names from a binary.
-%% Returns tuples of `{Name, Size}'.
-%% XXX: Skip trailing 0.
--spec get_names(<<_:8,_:_*8>>) -> name_sizes().
-get_names(<<0, Bin/binary>>) ->
- NamesSizes = get_names(Bin, []),
- fix_names(NamesSizes, []).
-
-get_names(<<>>, Acc) ->
- lists:reverse(Acc);
-get_names(Bin, Acc) ->
- {Name, MoreNames} = bin_get_string(Bin),
- get_names(MoreNames, [{Name, length(Name)} | Acc]).
-
-%% @doc Fix names:
-%% e.g. If ".rela.text" exists, ".text" does not. Same goes for
-%% ".rel.text". In that way, the Section Header String Table is more
-%% compact. Add ".text" just *before* the corresponding rela-field,
-%% etc.
--spec fix_names(name_sizes(), name_sizes()) -> name_sizes().
-fix_names([], Acc) ->
- lists:reverse(Acc);
-fix_names([{Name, Size}=T | Names], Acc) ->
- case is64bit() of
- true ->
- case string:str(Name, ".rela") =:= 1 of
- true -> %% Name starts with ".rela":
- Section = string:substr(Name, 6),
- fix_names(Names, [{Section, Size - 5}
- | [T | Acc]]); % XXX: Is order ok? (".text"
- % always before ".rela.text")
- false -> %% Name does not start with ".rela":
- fix_names(Names, [T | Acc])
- end;
- false ->
- case string:str(Name, ".rel") =:= 1 of
- true -> %% Name starts with ".rel":
- Section = string:substr(Name, 5),
- fix_names(Names, [{Section, Size - 4}
- | [T | Acc]]); % XXX: Is order ok? (".text"
- % always before ".rela.text")
- false -> %% Name does not start with ".rel":
- fix_names(Names, [T | Acc])
- end
- end.
-
-
-%% @doc A function that byte-reverses a binary. This might be needed because of
-%% little (fucking!) endianess.
--spec bin_reverse(binary()) -> binary().
-bin_reverse(Bin) when is_binary(Bin) ->
- bin_reverse(Bin, <<>>).
-
--spec bin_reverse(binary(), binary()) -> binary().
-bin_reverse(<<>>, Acc) ->
- Acc;
-bin_reverse(<<Head, More/binary>>, Acc) ->
- bin_reverse(More, <<Head, Acc/binary>>).
-
-%% @doc A function that extracts a null-terminated string from a binary. It
-%% returns the found string along with the rest of the binary.
--spec bin_get_string(binary()) -> {string(), binary()}.
-bin_get_string(Bin) ->
- bin_get_string(Bin, <<>>).
-
-bin_get_string(<<>>, BinAcc) ->
- Bin = bin_reverse(BinAcc), % little endian!
- {binary_to_list(Bin), <<>>};
-bin_get_string(<<0, MoreBin/binary>>, BinAcc) ->
- Bin = bin_reverse(BinAcc), % little endian!
- {binary_to_list(Bin), MoreBin};
-bin_get_string(<<Letter, Tail/binary>>, BinAcc) ->
- bin_get_string(Tail, <<Letter, BinAcc/binary>>).
-
-%% @doc
-make_offsets(NamesSizes) ->
- {Names, Sizes} = lists:unzip(NamesSizes),
- Offsets = make_offsets_from_sizes(Sizes, 1, []),
- lists:zip(Names, Offsets).
-
-make_offsets_from_sizes([], _, Acc) ->
- lists:reverse(Acc);
-make_offsets_from_sizes([Size | Sizes], Cur, Acc) ->
- make_offsets_from_sizes(Sizes, Size+Cur+1, [Cur | Acc]). % For the "."!
-
%% @doc Little-Endian Base 128 (LEB128) Decoder
%% This function extracts the <b>first</b> LEB128-encoded integer in a
%% binary and returns that integer along with the remaining binary. This is
@@ -770,21 +618,3 @@ leb128_decode(LebNum, NoOfBits, Acc) ->
<<Num:Size/integer>> = <<NextBundle:7/bits, Acc/bits>>,
{Num, MoreLebNums}
end.
-
-%% @doc Extract ELF Class from ELF header and export symbol to process
-%% dictionary.
--spec set_architecture_flag(elf()) -> 'ok'.
-set_architecture_flag(Elf) ->
- %% Extract information about ELF Class from ELF Header
- <<16#7f, $E, $L, $F, EI_Class, _MoreHeader/binary>>
- = get_binary_segment(Elf, 0, ?ELF_EHDR_SIZE),
- put(elf_class, EI_Class),
- ok.
-
-%% @doc Read from object file header if the file class is ELF32 or ELF64.
--spec is64bit() -> boolean().
-is64bit() ->
- case get(elf_class) of
- ?ELFCLASS64 -> true;
- ?ELFCLASS32 -> false
- end.
diff --git a/lib/hipe/llvm/elf_format.hrl b/lib/hipe/llvm/elf_format.hrl
index 7a3cdfead6..57a36f0c3e 100644
--- a/lib/hipe/llvm/elf_format.hrl
+++ b/lib/hipe/llvm/elf_format.hrl
@@ -486,3 +486,43 @@
%% Misc.
%%------------------------------------------------------------------------------
-define(bits(Bytes), ((Bytes) bsl 3)).
+
+%%------------------------------------------------------------------------------
+%% Exported record and type declarations for 'elf_format' module
+%%------------------------------------------------------------------------------
+
+%% Section header entries
+-record(elf_shdr,
+ {name :: elf_format:name() % Section name
+ ,type :: elf_format:shdr_type() % Section type
+ ,flags :: elf_format:bitflags() % Section attributes
+ ,addr :: elf_format:offset() % Virtual address in memory
+ ,offset :: elf_format:offset() % Offset in file
+ ,size :: elf_format:size() % Size of section
+ ,link :: non_neg_integer() % Link to other section
+ ,info :: non_neg_integer() % Miscellaneous information
+ ,addralign :: elf_format:size() % Address align boundary
+ ,entsize :: elf_format:size() % Size of entries, if section has
+ % table
+ }).
+-type elf_shdr() :: #elf_shdr{}.
+
+%% Symbol table entries
+-record(elf_sym,
+ {name :: elf_format:name() % Symbol name
+ ,bind :: elf_format:sym_bind() % Symbol binding
+ ,type :: elf_format:sym_type() % Symbol type
+ ,value :: elf_format:valueoff() % Symbol value
+ ,size :: elf_format:size() % Size of object
+ ,section :: undefined | abs | elf_shdr()
+ }).
+-type elf_sym() :: #elf_sym{}.
+
+%% Relocations
+-record(elf_rel,
+ {offset :: elf_format:offset()
+ ,type :: elf_format:reloc_type()
+ ,addend :: elf_format:addend()
+ ,symbol :: elf_sym()
+ }).
+-type elf_rel() :: #elf_rel{}.
diff --git a/lib/hipe/llvm/hipe_llvm.erl b/lib/hipe/llvm/hipe_llvm.erl
index 5e33731a2b..b22f8fb320 100644
--- a/lib/hipe/llvm/hipe_llvm.erl
+++ b/lib/hipe/llvm/hipe_llvm.erl
@@ -199,10 +199,9 @@
adj_stack_register/1,
adj_stack_type/1,
- mk_branch_meta/3,
- branch_meta_id/1,
- branch_meta_true_weight/1,
- branch_meta_false_weight/1
+ mk_meta/2,
+ meta_id/1,
+ meta_operands/1
]).
-export([
@@ -234,7 +233,7 @@
function_arg_type_list/1
]).
--export([pp_ins_list/2, pp_ins/2]).
+-export([pp_ins_list/3, pp_ins/3]).
%%-----------------------------------------------------------------------------
@@ -343,8 +342,9 @@
-record(llvm_adj_stack, {offset, 'register', type}).
-type llvm_adj_stack() :: #llvm_adj_stack{}.
--record(llvm_branch_meta, {id, true_weight, false_weight}).
--type llvm_branch_meta() :: #llvm_branch_meta{}.
+-record(llvm_meta, {id :: string(),
+ operands :: [string() | integer() | llvm_meta()]}).
+-type llvm_meta() :: #llvm_meta{}.
%% A type for any LLVM instruction
-type llvm_instr() :: llvm_ret() | llvm_br() | llvm_br_cond()
@@ -357,7 +357,7 @@
| llvm_call() | llvm_fun_def() | llvm_fun_decl()
| llvm_landingpad() | llvm_comment() | llvm_label()
| llvm_const_decl() | llvm_asm() | llvm_adj_stack()
- | llvm_branch_meta().
+ | llvm_meta().
%% Types
-record(llvm_void, {}).
@@ -701,7 +701,7 @@ is_label(#llvm_comment{}) -> false;
is_label(#llvm_const_decl{}) -> false;
is_label(#llvm_asm{}) -> false;
is_label(#llvm_adj_stack{}) -> false;
-is_label(#llvm_branch_meta{}) -> false.
+is_label(#llvm_meta{}) -> false.
%% const_decl
mk_const_decl(Dst, Decl_type, Type, Value) ->
@@ -722,14 +722,11 @@ adj_stack_offset(#llvm_adj_stack{offset=Offset}) -> Offset.
adj_stack_register(#llvm_adj_stack{'register'=Register}) -> Register.
adj_stack_type(#llvm_adj_stack{type=Type}) -> Type.
-%% branch meta-data
-mk_branch_meta(Id, True_weight, False_weight) ->
- #llvm_branch_meta{id=Id, true_weight=True_weight, false_weight=False_weight}.
-branch_meta_id(#llvm_branch_meta{id=Id}) -> Id.
-branch_meta_true_weight(#llvm_branch_meta{true_weight=True_weight}) ->
- True_weight.
-branch_meta_false_weight(#llvm_branch_meta{false_weight=False_weight}) ->
- False_weight.
+%% meta-data
+mk_meta(Id, Operands) ->
+ #llvm_meta{id=Id, operands=Operands}.
+meta_id(#llvm_meta{id=Id}) -> Id.
+meta_operands(#llvm_meta{operands=Operands}) -> Operands.
%% types
mk_void() -> #llvm_void{}.
@@ -765,13 +762,17 @@ function_arg_type_list(#llvm_fun{arg_type_list=Arg_type_list}) ->
%% Pretty-printer Functions
%%----------------------------------------------------------------------------
-%% @doc Pretty-print a list of LLVM instructions to a Device.
-pp_ins_list(_Dev, []) -> ok;
-pp_ins_list(Dev, [I|Is]) ->
- pp_ins(Dev, I),
- pp_ins_list(Dev, Is).
+-type llvm_version() :: {Major :: integer(), Minor :: integer()}.
-pp_ins(Dev, I) ->
+%% @doc Pretty-print a list of LLVM instructions to a Device, using syntax
+%% compatible with LLVM v. Major.Minor
+-spec pp_ins_list(file:io_device(), llvm_version(), [llvm_instr()]) -> ok.
+pp_ins_list(_Dev, _Ver, []) -> ok;
+pp_ins_list(Dev, Ver={_,_}, [I|Is]) ->
+ pp_ins(Dev, Ver, I),
+ pp_ins_list(Dev, Ver, Is).
+
+pp_ins(Dev, Ver, I) ->
case indent(I) of
true -> write(Dev, " ");
false -> ok
@@ -861,7 +862,7 @@ pp_ins(Dev, I) ->
true -> write(Dev, "volatile ");
false -> ok
end,
- pp_type(Dev, load_p_type(I)),
+ pp_dereference_type(Dev, Ver, load_p_type(I)),
write(Dev, [" ", load_pointer(I), " "]),
case load_alignment(I) of
[] -> ok;
@@ -897,7 +898,7 @@ pp_ins(Dev, I) ->
true -> write(Dev, "inbounds ");
false -> ok
end,
- pp_type(Dev, getelementptr_p_type(I)),
+ pp_dereference_type(Dev, Ver, getelementptr_p_type(I)),
write(Dev, [" ", getelementptr_value(I)]),
pp_typed_idxs(Dev, getelementptr_typed_idxs(I)),
write(Dev, "\n");
@@ -958,12 +959,16 @@ pp_ins(Dev, I) ->
pp_args(Dev, fun_def_arglist(I)),
write(Dev, ") "),
pp_options(Dev, fun_def_fn_attrs(I)),
+ case Ver >= {3,7} of false -> ok; true ->
+ write(Dev, "personality i32 (i32, i64, i8*,i8*)* "
+ "@__gcc_personality_v0 ")
+ end,
case fun_def_align(I) of
[] -> ok;
N -> write(Dev, ["align ", N])
end,
write(Dev, "{\n"),
- pp_ins_list(Dev, fun_def_body(I)),
+ pp_ins_list(Dev, Ver, fun_def_body(I)),
write(Dev, "}\n");
#llvm_fun_decl{} ->
write(Dev, "declare "),
@@ -992,8 +997,12 @@ pp_ins(Dev, I) ->
pp_type(Dev, const_decl_type(I)),
write(Dev, [" ", const_decl_value(I), "\n"]);
#llvm_landingpad{} ->
- write(Dev, "landingpad { i8*, i32 } personality i32 (i32, i64, i8*,i8*)*
- @__gcc_personality_v0 cleanup\n");
+ write(Dev, "landingpad { i8*, i32 } "),
+ case Ver < {3,7} of false -> ok; true ->
+ write(Dev, "personality i32 (i32, i64, i8*,i8*)* "
+ "@__gcc_personality_v0 ")
+ end,
+ write(Dev, "cleanup\n");
#llvm_asm{} ->
write(Dev, [asm_instruction(I), "\n"]);
#llvm_adj_stack{} ->
@@ -1001,14 +1010,37 @@ pp_ins(Dev, I) ->
adj_stack_register(I), "\", \"r\"("]),
pp_type(Dev, adj_stack_type(I)),
write(Dev, [" ", adj_stack_offset(I),")\n"]);
- #llvm_branch_meta{} ->
- write(Dev, ["!", branch_meta_id(I), " = metadata !{metadata !\"branch_weights\",
- i32 ", branch_meta_true_weight(I), ", i32 ",
- branch_meta_false_weight(I), "}\n"]);
+ #llvm_meta{} ->
+ write(Dev, ["!", meta_id(I), " = "]),
+ Named = case string:to_integer(meta_id(I)) of
+ {_, ""} -> false;
+ _ -> true
+ end,
+ case Ver < {3,6} andalso not Named of
+ true -> write(Dev, "metadata !{metadata ");
+ false -> write(Dev, "!{ ")
+ end,
+ write(Dev, string:join([if is_list(Op) -> ["!\"", Op, "\""];
+ is_integer(Op) -> ["i32 ", integer_to_list(Op)];
+ is_record(Op, llvm_meta) ->
+ ["!", meta_id(Op)]
+ end || Op <- meta_operands(I)], ", ")),
+ write(Dev, " }\n");
Other ->
exit({?MODULE, pp_ins, {"Unknown LLVM instruction", Other}})
end.
+%% @doc Print the type of a dereference in an LLVM instruction using syntax
+%% parsable by the specified LLVM version.
+pp_dereference_type(Dev, Ver, Type) ->
+ case Ver >= {3,7} of
+ false -> ok;
+ true ->
+ pp_type(Dev, pointer_type(Type)),
+ write(Dev, ", ")
+ end,
+ pp_type(Dev, Type).
+
%% @doc Pretty-print a list of types
pp_type_list(_Dev, []) -> ok;
pp_type_list(Dev, [T]) ->
@@ -1114,7 +1146,7 @@ indent(I) ->
#llvm_fun_def{} -> false;
#llvm_fun_decl{} -> false;
#llvm_const_decl{} -> false;
- #llvm_branch_meta{} -> false;
+ #llvm_meta{} -> false;
_ -> true
end.
diff --git a/lib/hipe/llvm/hipe_llvm_main.erl b/lib/hipe/llvm/hipe_llvm_main.erl
index 3c24425828..476d6fb49c 100644
--- a/lib/hipe/llvm/hipe_llvm_main.erl
+++ b/lib/hipe/llvm/hipe_llvm_main.erl
@@ -13,7 +13,7 @@
%% chain is invoked in order to produce an object file.
rtl_to_native(MFA, RTL, Roots, Options) ->
%% Compile to LLVM and get Instruction List (along with infos)
- {LLVMCode, RelocsDict, ConstTab} =
+ {LLVMCode, RelocsDict0, ConstTab0} =
hipe_rtl_to_llvm:translate(RTL, Roots),
%% Fix function name to an acceptable LLVM identifier (needed for closures)
{_Module, Fun, Arity} = hipe_rtl_to_llvm:fix_mfa_name(MFA),
@@ -24,34 +24,33 @@ rtl_to_native(MFA, RTL, Roots, Options) ->
%% Extract information from object file
%%
ObjBin = open_object_file(ObjectFile),
- %% Read and set the ELF class
- elf_format:set_architecture_flag(ObjBin),
+ Obj = elf_format:read(ObjBin),
%% Get labels info (for switches and jump tables)
- Labels = elf_format:get_rodata_relocs(ObjBin),
- {Switches, Closures} = get_tables(ObjBin),
+ Labels = elf_format:extract_rela(Obj, ?RODATA),
+ Tables = get_tables(Obj),
%% Associate Labels with Switches and Closures with stack args
- {SwitchInfos, ExposedClosures} =
- correlate_labels(Switches ++ Closures, Labels),
+ {SwitchInfos, ExposedClosures} = correlate_labels(Tables, Labels),
%% SwitchInfos: [{"table_50", [Labels]}]
%% ExposedClosures: [{"table_closures", [Labels]}]
-
+
%% Labelmap contains the offsets of the labels in the code that are
%% used for switch's jump tables
- LabelMap = create_labelmap(MFA, SwitchInfos, RelocsDict),
+ LabelMap = create_labelmap(MFA, SwitchInfos, RelocsDict0),
+ {RelocsDict, ConstTab} = extract_constants(RelocsDict0, ConstTab0, Obj),
%% Get relocation info
- TextRelocs = elf_format:get_text_relocs(ObjBin),
+ TextRelocs = elf_format:extract_rela(Obj, ?TEXT),
%% AccRefs contains the offsets of all references to relocatable symbols in
%% the code:
AccRefs = fix_relocations(TextRelocs, RelocsDict, MFA),
%% Get stack descriptors
- SDescs = get_sdescs(ObjBin),
+ SDescs = get_sdescs(Obj),
%% FixedSDescs are the stack descriptors after correcting calls that have
%% arguments in the stack
FixedSDescs =
fix_stack_descriptors(RelocsDict, AccRefs, SDescs, ExposedClosures),
Refs = AccRefs ++ FixedSDescs,
%% Get binary code from object file
- BinCode = elf_format:extract_text(ObjBin),
+ BinCode = elf_format:extract_text(Obj),
%% Remove temp files (if needed)
ok = remove_temp_folder(Dir, Options),
%% Return the code together with information that will be used in the
@@ -78,7 +77,8 @@ compile_with_llvm(FunName, Arity, LLVMCode, Options, UseBuffer) ->
false -> []
end,
{ok, File_llvm} = file:open(Dir ++ Filename ++ ".ll", OpenOpts),
- hipe_llvm:pp_ins_list(File_llvm, LLVMCode),
+ Ver = hipe:get_llvm_version(), %% Should probably cache this
+ hipe_llvm:pp_ins_list(File_llvm, Ver, LLVMCode),
%% delayed_write can cause file:close not to do a close, hence the two calls
ok = file:close(File_llvm),
__ = file:close(File_llvm),
@@ -158,12 +158,10 @@ trans_optlev_flag(Tool, Options) ->
%%------------------------------------------------------------------------------
%% @doc Get switch table and closure table.
+-spec get_tables(elf_format:elf()) -> [elf_sym()].
get_tables(Elf) ->
- %% Search Symbol Table for an entry with name prefixed with "table_":
- Triples = elf_format:get_tab_entries(Elf),
- Switches = [T || T={"table_" ++ _, _, _} <- Triples],
- Closures = [T || T={"table_closures" ++ _, _, _} <- Switches],
- {Switches, Closures}.
+ %% Search Symbol Table for entries where name is prefixed with "table_":
+ [S || S=#elf_sym{name="table_" ++ _} <- elf_format:elf_symbols(Elf)].
%% @doc This function associates symbols who point to some table of labels with
%% the corresponding offsets of the labels in the code. These tables can
@@ -171,14 +169,12 @@ get_tables(Elf) ->
%% of blocks that contain closure calls with more than ?NR_ARG_REGS.
correlate_labels([], _L) -> {[], []};
correlate_labels(Tables, Labels) ->
- %% Sort "Tables" based on "ValueOffsets"
- OffsetSortedTb = lists:ukeysort(2, Tables),
- %% Unzip offset-sorted list of "Switches"
- {Names, _Offsets, TablesSizeList} = lists:unzip3(OffsetSortedTb),
- %% Associate switch names with labels
- L = split_list(Labels, TablesSizeList),
- %% Zip back! (to [{SwitchName, Values}])
- NamesValues = lists:zip(Names, L),
+ %% Assumes that the relocations are sorted
+ RelocTree = gb_trees:from_orddict(
+ [{Rel#elf_rel.offset, Rel#elf_rel.addend} || Rel <- Labels]),
+ %% Lookup all relocations pertaining to each symbol
+ NamesValues = [{Name, lookup_range(Value, Value+Size, RelocTree)}
+ || #elf_sym{name=Name, value=Value, size=Size} <- Tables],
case lists:keytake("table_closures", 1, NamesValues) of
false -> %% No closures in the code, no closure table
{NamesValues, []};
@@ -186,6 +182,17 @@ correlate_labels(Tables, Labels) ->
{SwitchesNV, ClosureTableNV}
end.
+%% Fetches all values with a key in [Low, Hi)
+-spec lookup_range(_::K, _::K, gb_trees:tree(K,V)) -> [_::V].
+lookup_range(Low, Hi, Tree) ->
+ lookup_range_1(Hi, gb_trees:iterator_from(Low, Tree)).
+
+lookup_range_1(Hi, Iter0) ->
+ case gb_trees:next(Iter0) of
+ {Key, Value, Iter} when Key < Hi -> [Value | lookup_range_1(Hi, Iter)];
+ _ -> []
+ end.
+
%% @doc Create a gb_tree which contains information about the labels that used
%% for switch's jump tables. The keys of the gb_tree are of the form
%% {MFA, Label} and the values are the actual Offsets.
@@ -213,40 +220,80 @@ insert_to_labelmap([{Key, Value}|Rest], LabelMap) ->
insert_to_labelmap(Rest, LabelMap)
end.
+%% Find any LLVM-generated constants and add them to the constant table
+extract_constants(RelocsDict0, ConstTab0, Obj) ->
+ TextRelocs = elf_format:extract_rela(Obj, ?TEXT),
+ AnonConstSections =
+ lists:usort([{Sec, Offset}
+ || #elf_rel{symbol=#elf_sym{type=section, section=Sec},
+ addend=Offset} <- TextRelocs]),
+ lists:foldl(
+ fun({#elf_shdr{name=Name, type=progbits, addralign=Align, entsize=EntSize,
+ size=Size} = Section, Offset}, {RelocsDict1, ConstTab1})
+ when EntSize > 0, 0 =:= Size rem EntSize, 0 =:= Offset rem EntSize ->
+ SectionBin = elf_format:section_contents(Section, Obj),
+ Constant = binary:part(SectionBin, Offset, EntSize),
+ {ConstTab, ConstLbl} =
+ hipe_consttab:insert_binary_const(ConstTab1, Align, Constant),
+ {dict:store({anon, Name, Offset}, {constant, ConstLbl}, RelocsDict1),
+ ConstTab}
+ end, {RelocsDict0, ConstTab0}, AnonConstSections).
+
%% @doc Correlate object file relocation symbols with info from translation to
%% llvm code.
fix_relocations(Relocs, RelocsDict, MFA) ->
- fix_relocs(Relocs, RelocsDict, MFA, []).
-
-fix_relocs([], _, _, RelocAcc) -> RelocAcc;
-fix_relocs([{Name, Offset}|Rs], RelocsDict, {ModName,_,_}=MFA, RelocAcc) ->
+ lists:map(fun(Reloc) -> fix_reloc(Reloc, RelocsDict, MFA) end, Relocs).
+
+%% Relocation types and expected addends for x86 and amd64
+-define(PCREL_T, 'pc32').
+-define(PCREL_A, -4). %% Hard-coded in hipe_x86.c and hipe_amd64.c
+-ifdef(BIT32).
+-define(ABS_T, '32').
+-define(ABS_A, _). %% We support any addend
+-else.
+-define(ABS_T, '64').
+-define(ABS_A, 0).
+-endif.
+
+fix_reloc(#elf_rel{symbol=#elf_sym{name=Name, section=undefined, type=notype},
+ offset=Offset, type=?PCREL_T, addend=?PCREL_A},
+ RelocsDict, {ModName,_,_}) when Name =/= "" ->
case dict:fetch(Name, RelocsDict) of
- {atom, AtomName} ->
- fix_relocs(Rs, RelocsDict, MFA,
- [{?LOAD_ATOM, Offset, AtomName}|RelocAcc]);
- {constant, Label} ->
- fix_relocs(Rs, RelocsDict, MFA,
- [{?LOAD_ADDRESS, Offset, {constant, Label}}|RelocAcc]);
- {switch, _, JTabLab} -> %% Treat switch exactly as constant
- fix_relocs(Rs, RelocsDict, MFA,
- [{?LOAD_ADDRESS, Offset, {constant, JTabLab}}|RelocAcc]);
- {closure, _}=Closure ->
- fix_relocs(Rs, RelocsDict, MFA,
- [{?LOAD_ADDRESS, Offset, Closure}|RelocAcc]);
- {call, {bif, BifName, _}} ->
- fix_relocs(Rs, RelocsDict, MFA,
- [{?CALL_LOCAL, Offset, BifName}|RelocAcc]);
+ {call, {bif, BifName, _}} -> {?CALL_LOCAL, Offset, BifName};
%% MFA calls to functions in the same module are of type 3, while all
%% other MFA calls are of type 2.
- {call, {ModName,_F,_A}=CallMFA} ->
- fix_relocs(Rs, RelocsDict, MFA,
- [{?CALL_LOCAL, Offset, CallMFA}|RelocAcc]);
- {call, CallMFA} ->
- fix_relocs(Rs, RelocsDict, MFA,
- [{?CALL_REMOTE, Offset, CallMFA}|RelocAcc]);
- Other ->
- exit({?MODULE, fix_relocs,
- {"Relocation not in relocation dictionary", Other}})
+ %% XXX: Does this code break hot code loading (by transforming external
+ %% calls into local calls?)
+ {call, {ModName,_F,_A}=CallMFA} -> {?CALL_LOCAL, Offset, CallMFA};
+ {call, CallMFA} -> {?CALL_REMOTE, Offset, CallMFA}
+ end;
+fix_reloc(#elf_rel{symbol=#elf_sym{name=Name, section=undefined, type=notype},
+ offset=Offset, type=?ABS_T, addend=?ABS_A},
+ RelocsDict, _) when Name =/= "" ->
+ case dict:fetch(Name, RelocsDict) of
+ {atom, AtomName} -> {?LOAD_ATOM, Offset, AtomName};
+ {constant, Label} -> {?LOAD_ADDRESS, Offset, {constant, Label}};
+ {closure, _}=Closure -> {?LOAD_ADDRESS, Offset, Closure}
+ end;
+fix_reloc(#elf_rel{symbol=#elf_sym{name=Name, section=#elf_shdr{name=?TEXT},
+ type=func},
+ offset=Offset, type=?PCREL_T, addend=?PCREL_A},
+ RelocsDict, MFA) when Name =/= "" ->
+ case dict:fetch(Name, RelocsDict) of
+ {call, MFA} -> {?CALL_LOCAL, Offset, MFA}
+ end;
+fix_reloc(#elf_rel{symbol=#elf_sym{name=Name, section=#elf_shdr{name=?RODATA},
+ type=object},
+ offset=Offset, type=?ABS_T, addend=?ABS_A},
+ RelocsDict, _) when Name =/= "" ->
+ case dict:fetch(Name, RelocsDict) of
+ {switch, _, JTabLab} -> %% Treat switch exactly as constant
+ {?LOAD_ADDRESS, Offset, {constant, JTabLab}}
+ end;
+fix_reloc(#elf_rel{symbol=#elf_sym{type=section, section=#elf_shdr{name=Name}},
+ offset=Offset, type=?ABS_T, addend=Addend}, RelocsDict, _) ->
+ case dict:fetch({anon, Name, Addend}, RelocsDict) of
+ {constant, Label} -> {?LOAD_ADDRESS, Offset, {constant, Label}}
end.
%%------------------------------------------------------------------------------
@@ -271,20 +318,14 @@ get_sdescs(Elf) ->
T = SPCount * ?SP_ADDR_SIZE,
%% Pattern match fields of ".note.gc":
<<SPCount:(?bits(?SP_COUNT_SIZE))/integer-little, % Sanity check!
- SPAddrs:T/binary, % NOTE: In 64bit they are relocs!
+ _SPAddrs:T/binary, % NOTE: In 64bit they are relocs!
StkFrameSize:(?bits(?SP_STKFRAME_SIZE))/integer-little,
StkArity:(?bits(?SP_STKARITY_SIZE))/integer-little,
_LiveRootCount:(?bits(?SP_LIVEROOTCNT_SIZE))/integer-little, % Skip
Roots/binary>> = NoteGC_bin,
LiveRoots = get_liveroots(Roots, []),
- %% Extract information about the safe point addresses:
- SPOffs =
- case elf_format:is64bit() of
- true -> %% Find offsets in ".rela.note.gc":
- elf_format:get_rela_addends(RelaNoteGC);
- false -> %% Find offsets in SPAddrs (in ".note.gc"):
- get_spoffs(SPAddrs, [])
- end,
+ %% Extract the safe point offsets:
+ SPOffs = [A || #elf_rel{addend=A} <- RelaNoteGC],
%% Extract Exception Handler labels:
ExnHandlers = elf_format:get_exn_handlers(Elf),
%% Combine ExnHandlers and Safe point addresses (return addresses):
@@ -300,13 +341,6 @@ get_liveroots(<<Root:?bits(?LR_STKINDEX_SIZE)/integer-little,
MoreRoots/binary>>, Acc) ->
get_liveroots(MoreRoots, [Root | Acc]).
-%% @doc Extracts a bunch of integers (safepoint offsets) from a binary. Returns
-%% a tuple as need for stack descriptors.
-get_spoffs(<<>>, Acc) ->
- lists:reverse(Acc);
-get_spoffs(<<SPOff:?bits(?SP_ADDR_SIZE)/integer-little, More/binary>>, Acc) ->
- get_spoffs(More, [SPOff | Acc]).
-
combine_ras_and_exns(_, [], Acc) ->
lists:reverse(Acc);
combine_ras_and_exns(ExnHandlers, [RA | MoreRAs], Acc) ->
@@ -489,18 +523,3 @@ unique_folder(FunName, Arity, Options) ->
dir_exists(Filename) ->
{Flag, Info} = file:read_file_info(Filename),
(Flag =:= ok) andalso (element(3, Info) =:= directory).
-
-%% @doc Function that takes as arguments a list of integers and a list with
-%% numbers indicating how many items should each tuple have and splits
-%% the original list to a list of lists of integers (with the specified
-%% number of elements), i.e. [ [...], [...] ].
--spec split_list([integer()], [integer()]) -> [ [integer()] ].
-split_list(List, ElemsPerTuple) ->
- split_list(List, ElemsPerTuple, []).
-
--spec split_list([integer()], [integer()], [ [integer()] ]) -> [ [integer()] ].
-split_list([], [], Acc) ->
- lists:reverse(Acc);
-split_list(List, [NumOfElems | MoreNums], Acc) ->
- {L1, L2} = lists:split(NumOfElems, List),
- split_list(L2, MoreNums, [ L1 | Acc]).
diff --git a/lib/hipe/llvm/hipe_rtl_to_llvm.erl b/lib/hipe/llvm/hipe_rtl_to_llvm.erl
index d7d8d1b049..66b2e10fb8 100644
--- a/lib/hipe/llvm/hipe_rtl_to_llvm.erl
+++ b/lib/hipe/llvm/hipe_rtl_to_llvm.erl
@@ -13,6 +13,8 @@
-define(WORD_WIDTH, (?bytes_to_bits(hipe_rtl_arch:word_size()))).
-define(BRANCH_META_TAKEN, "0").
-define(BRANCH_META_NOT_TAKEN, "1").
+-define(FIRST_FREE_META_NO, 2).
+-define(HIPE_LITERALS_META, "hipe.literals").
%%------------------------------------------------------------------------------
%% @doc Main function for translating an RTL function to LLVM Assembly. Takes as
@@ -51,8 +53,9 @@ translate(RTL, Roots) ->
translate_instr_list(Code1, [], Relocs, Data),
%% Create LLVM code to declare relocation symbols as external symbols along
%% with local variables in order to use them as just any other variable
- {FinalRelocs, ExternalDecl, LocalVars} =
+ {FinalRelocs, ExternalDecl0, LocalVars} =
handle_relocations(Relocs1, Data, Fun),
+ ExternalDecl = add_literals_metadata(ExternalDecl0),
%% Pass on LLVM code in order to create Fail blocks and a landingpad
%% instruction to each one
LLVM_Code2 = add_landingpads(LLVM_Code1, FailLabels),
@@ -266,17 +269,18 @@ trans_alub_overflow(I, Sign, Relocs) ->
T2 = mk_temp(),
%% T1{1}: Boolean variable indicating overflow
I6 = hipe_llvm:mk_extractvalue(T2, ReturnType, T1, "1", []),
- case hipe_rtl:alub_cond(I) of
- Op when Op =:= overflow orelse Op =:= ltu ->
- True_label = mk_jump_label(hipe_rtl:alub_true_label(I)),
- False_label = mk_jump_label(hipe_rtl:alub_false_label(I)),
- MetaData = branch_metadata(hipe_rtl:alub_pred(I));
- not_overflow ->
- True_label = mk_jump_label(hipe_rtl:alub_false_label(I)),
- False_label = mk_jump_label(hipe_rtl:alub_true_label(I)),
- MetaData = branch_metadata(1 - hipe_rtl:alub_pred(I))
- end,
- I7 = hipe_llvm:mk_br_cond(T2, True_label, False_label, MetaData),
+ {TrueLabel, FalseLabel, MetaData} =
+ case hipe_rtl:alub_cond(I) of
+ Op when Op =:= overflow orelse Op =:= ltu ->
+ {mk_jump_label(hipe_rtl:alub_true_label(I)),
+ mk_jump_label(hipe_rtl:alub_false_label(I)),
+ branch_metadata(hipe_rtl:alub_pred(I))};
+ not_overflow ->
+ {mk_jump_label(hipe_rtl:alub_false_label(I)),
+ mk_jump_label(hipe_rtl:alub_true_label(I)),
+ branch_metadata(1 - hipe_rtl:alub_pred(I))}
+ end,
+ I7 = hipe_llvm:mk_br_cond(T2, TrueLabel, FalseLabel, MetaData),
{[I7, I6, I5, I4, I3, I2, I1], NewRelocs}.
trans_alub_op(I, Sign) ->
@@ -1457,8 +1461,8 @@ handle_relocations(Relocs, Data, Fun) ->
Relocs4 = dict:store("hipe_bifs.llvm_fix_pinned_regs.0",
{call, {hipe_bifs, llvm_fix_pinned_regs, 0}}, Relocs3),
BranchMetaData = [
- hipe_llvm:mk_branch_meta(?BRANCH_META_TAKEN, "99", "1")
- , hipe_llvm:mk_branch_meta(?BRANCH_META_NOT_TAKEN, "1", "99")
+ hipe_llvm:mk_meta(?BRANCH_META_TAKEN, ["branch_weights", 99, 1])
+ , hipe_llvm:mk_meta(?BRANCH_META_NOT_TAKEN, ["branch_weights", 1, 99])
],
ExternalDeclarations = AtomDecl ++ ClosureDecl ++ ConstDecl ++ FunDecl ++
ClosureLabelDecl ++ SwitchDecl ++ BranchMetaData,
@@ -1611,3 +1615,16 @@ load_constant(Label) ->
const_to_dict(Elem, Dict) ->
Name = "DL" ++ integer_to_list(Elem),
dict:store(Name, {'constant', Elem}, Dict).
+
+%% @doc Export the hipe literals that LLVM needs to generate the prologue as
+%% metadata.
+add_literals_metadata(ExternalDecls) ->
+ Pairs = [hipe_llvm:mk_meta(integer_to_list(?FIRST_FREE_META_NO),
+ ["P_NSP_LIMIT", ?P_NSP_LIMIT])
+ ,hipe_llvm:mk_meta(integer_to_list(?FIRST_FREE_META_NO + 1),
+ ["X86_LEAF_WORDS", ?X86_LEAF_WORDS])
+ ,hipe_llvm:mk_meta(integer_to_list(?FIRST_FREE_META_NO + 2),
+ ["AMD64_LEAF_WORDS", ?AMD64_LEAF_WORDS])
+ ],
+ [hipe_llvm:mk_meta(?HIPE_LITERALS_META, Pairs) |
+ Pairs ++ ExternalDecls].
diff --git a/lib/hipe/main/Makefile b/lib/hipe/main/Makefile
index 6b6cad3ed3..8ef31dbb46 100644
--- a/lib/hipe/main/Makefile
+++ b/lib/hipe/main/Makefile
@@ -70,7 +70,7 @@ APPUP_TARGET= $(EBIN)/$(APPUP_FILE)
include ../native.mk
-ERL_COMPILE_FLAGS += +nowarn_shadow_vars +warn_missing_spec +warn_untyped_record
+ERL_COMPILE_FLAGS += -Werror +nowarn_shadow_vars +warn_export_vars +warn_missing_spec +warn_untyped_record
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/main/hipe.app.src b/lib/hipe/main/hipe.app.src
index aa86b6dc5b..f8487151d7 100644
--- a/lib/hipe/main/hipe.app.src
+++ b/lib/hipe/main/hipe.app.src
@@ -88,6 +88,7 @@
hipe_icode2rtl,
hipe_icode_bincomp,
hipe_icode_callgraph,
+ hipe_icode_call_elim,
hipe_icode_cfg,
hipe_icode_coordinator,
hipe_icode_ebb,
diff --git a/lib/hipe/main/hipe.erl b/lib/hipe/main/hipe.erl
index 0e32da1d36..6c525dd143 100644
--- a/lib/hipe/main/hipe.erl
+++ b/lib/hipe/main/hipe.erl
@@ -200,8 +200,9 @@
compile/4,
compile_core/4,
file/1,
- file/2,
- llvm_support_available/0,
+ file/2,
+ get_llvm_version/0,
+ llvm_support_available/0,
load/1,
help/0,
help_hiper/0,
@@ -448,16 +449,16 @@ compile(Name, File, Opts0) when is_atom(Name) ->
true ->
case filename:find_src(filename:rootname(File, ".beam")) of
{error, _} ->
- ?error_msg("Cannot find source code for ~p.",[File]),
+ ?error_msg("Cannot find source code for ~p.", [File]),
?EXIT({cant_find_source_code});
{Source, CompOpts} ->
CoreOpts = [X || X = {core_transform, _} <- Opts],
- %%io:format("Using: ~w\n", [CoreOpts]),
+ %% io:format("Using: ~w\n", [CoreOpts]),
case compile:file(Source, CoreOpts ++ [to_core, binary|CompOpts]) of
{ok, _, Core} ->
compile_core(Name, Core, File, Opts);
Error ->
- ?error_msg("Error compiling ~p:\n~p.",[File, Error]),
+ ?error_msg("Error compiling ~p:\n~p.", [File, Error]),
?EXIT({cant_compile_source_code})
end
end;
@@ -469,7 +470,7 @@ compile(Name, File, Opts0) when is_atom(Name) ->
{ok, _, Core} ->
compile_core(Name, Core, File, Opts);
Error ->
- ?error_msg("Error compiling ~p:\n~p\n",[Source, Error]),
+ ?error_msg("Error compiling ~p:\n~p\n", [Source, Error]),
?EXIT({cant_compile_source_code, Error})
end;
Other when Other =:= false; Other =:= undefined ->
@@ -572,8 +573,7 @@ file(File, Options) when is_atom(File) ->
disasm(File) ->
case beam_disasm:file(File) of
#beam_file{labeled_exports = LabeledExports,
- compile_info = CompInfo,
- code = BeamCode} ->
+ compile_info = CompInfo, code = BeamCode} ->
CompOpts = proplists:get_value(options, CompInfo, []),
HCompOpts = case lists:keyfind(hipe, 1, CompOpts) of
{hipe, L} when is_list(L) -> L;
@@ -596,16 +596,16 @@ fix_beam_exports([], Exports) ->
Exports.
get_beam_icode(Mod, {BeamCode, Exports}, File, Options) ->
- ?option_time({ok, Icode} =
- (catch {ok, hipe_beam_to_icode:module(BeamCode, Options)}),
- "BEAM-to-Icode", Options),
+ {ok, Icode} =
+ ?option_time((catch {ok, hipe_beam_to_icode:module(BeamCode, Options)}),
+ "BEAM-to-Icode", Options),
BeamBin = get_beam_code(File),
{{Mod, Exports, Icode}, BeamBin}.
get_core_icode(Mod, Core, File, Options) ->
- ?option_time({ok, Icode} =
- (catch {ok, cerl_to_icode:module(Core, Options)}),
- "BEAM-to-Icode", Options),
+ {ok, Icode} =
+ ?option_time((catch {ok, cerl_to_icode:module(Core, Options)}),
+ "BEAM-to-Icode", Options),
NeedBeamCode = not proplists:get_bool(load, Options),
BeamBin =
case NeedBeamCode of
@@ -618,7 +618,7 @@ get_core_icode(Mod, Core, File, Options) ->
get_beam_code(Bin) when is_binary(Bin) -> Bin;
get_beam_code(FileName) ->
case erl_prim_loader:get_file(FileName) of
- {ok,Bin,_} ->
+ {ok, Bin, _} ->
Bin;
error ->
?EXIT(no_beam_file)
@@ -1165,6 +1165,9 @@ option_text(caller_save_spill_restore) ->
"Activates caller save register spills and restores";
option_text(debug) ->
"Outputs internal debugging information during compilation";
+option_text(icode_call_elim) ->
+ "Performs call elimination of BIFs that are side-effect free\n" ++
+ "only on some argument types";
option_text(icode_range) ->
"Performs integer range analysis on the Icode level";
option_text(icode_ssa_check) ->
@@ -1318,6 +1321,7 @@ opt_keys() ->
get_called_modules,
split_arith,
split_arith_unsafe,
+ icode_call_elim,
icode_inline_bifs,
icode_ssa_check,
icode_ssa_copy_prop,
@@ -1399,7 +1403,7 @@ o1_opts(TargetArch) ->
o2_opts(TargetArch) ->
Common = [icode_ssa_const_prop, icode_ssa_copy_prop, % icode_ssa_struct_reuse,
- icode_type, icode_inline_bifs, rtl_lcm,
+ icode_type, icode_inline_bifs, icode_call_elim, rtl_lcm,
rtl_ssa, rtl_ssa_const_prop,
spillmin_color, use_indexing, remove_comments,
concurrent_comp, binary_opt | o1_opts(TargetArch)],
@@ -1429,6 +1433,7 @@ opt_negations() ->
{no_icode_inline_bifs, icode_inline_bifs},
{no_icode_range, icode_range},
{no_icode_split_arith, icode_split_arith},
+ {no_icode_call_elim, icode_call_elim},
{no_icode_ssa_check, icode_ssa_check},
{no_icode_ssa_copy_prop, icode_ssa_copy_prop},
{no_icode_ssa_const_prop, icode_ssa_const_prop},
@@ -1479,18 +1484,25 @@ opt_expansions(TargetArch) ->
[{o1, o1_opts(TargetArch)},
{o2, o2_opts(TargetArch)},
{o3, o3_opts(TargetArch)},
- {to_llvm, llvm_opts(o3)},
- {{to_llvm, o0}, llvm_opts(o0)},
- {{to_llvm, o1}, llvm_opts(o1)},
- {{to_llvm, o2}, llvm_opts(o2)},
- {{to_llvm, o3}, llvm_opts(o3)},
+ {to_llvm, llvm_opts(o3, TargetArch)},
+ {{to_llvm, o0}, llvm_opts(o0, TargetArch)},
+ {{to_llvm, o1}, llvm_opts(o1, TargetArch)},
+ {{to_llvm, o2}, llvm_opts(o2, TargetArch)},
+ {{to_llvm, o3}, llvm_opts(o3, TargetArch)},
{x87, [x87, inline_fp]},
{inline_fp, case TargetArch of %% XXX: Temporary until x86 has sse2
x86 -> [x87, inline_fp];
_ -> [inline_fp] end}].
-llvm_opts(O) ->
- [to_llvm, {llvm_opt, O}, {llvm_llc, O}].
+llvm_opts(O, TargetArch) ->
+ Base = [to_llvm, {llvm_opt, O}, {llvm_llc, O}],
+ case TargetArch of
+ %% A llvm bug present in 3.4 through (at least) 3.8 miscompiles x86
+ %% functions that have floats are spilled to stack by clobbering the process
+ %% pointer (ebp) trying to realign the stack pointer.
+ x86 -> [no_inline_fp | Base];
+ _ -> Base
+ end.
%% This expands "basic" options, which may be tested early and cannot be
%% in conflict with options found in the source code.
@@ -1520,7 +1532,8 @@ expand_options(Opts, TargetArch) ->
proplists:normalize(Opts, [{negations, opt_negations()},
{aliases, opt_aliases()},
{expand, opt_basic_expansions()},
- {expand, opt_expansions(TargetArch)}]).
+ {expand, opt_expansions(TargetArch)},
+ {negations, opt_negations()}]).
-spec check_options(comp_options()) -> 'ok'.
@@ -1538,18 +1551,27 @@ check_options(Opts) ->
-spec llvm_support_available() -> boolean().
llvm_support_available() ->
- get_llvm_version() >= 3.4.
+ get_llvm_version() >= {3,4}.
+
+-type llvm_version() :: {Major :: integer(), Minor :: integer()}.
+-spec get_llvm_version() -> llvm_version() | {0, 0}.
get_llvm_version() ->
OptStr = os:cmd("opt -version"),
SubStr = "LLVM version ", N = length(SubStr),
case string:str(OptStr, SubStr) of
0 -> % No opt available
- 0.0;
+ {0, 0};
S ->
- case string:to_float(string:sub_string(OptStr, S + N)) of
- {error, _} -> 0.0; %XXX: Assumes no revision numbers in versioning
- {Float, _} -> Float
+ case string:tokens(string:sub_string(OptStr, S + N), ".") of
+ [MajorS, MinorS | _] ->
+ case {string:to_integer(MajorS), string:to_integer(MinorS)} of
+ {{Major, ""}, {Minor, _}}
+ when is_integer(Major), is_integer(Minor) ->
+ {Major, Minor};
+ _ -> {0, 0}
+ end;
+ _ -> {0, 0} %XXX: Assumes no revision numbers in versioning
end
end.
diff --git a/lib/hipe/main/hipe.hrl.src b/lib/hipe/main/hipe.hrl.src
index 3be824ac34..53b59f88f0 100644
--- a/lib/hipe/main/hipe.hrl.src
+++ b/lib/hipe/main/hipe.hrl.src
@@ -152,7 +152,7 @@
STMNT,
?untagged_msg(Msg ++ "~.2f s\n",[hipe_timing:stop_timer(Timer)/1000])).
-else.
--define(TIME_STMNT(STMNT,Msg,Timer),STMNT).
+-define(TIME_STMNT(STMNT,Msg,Timer), STMNT).
-endif.
-define(start_timer(Text), hipe_timing:start(Text, ?MODULE)).
@@ -162,22 +162,24 @@
-define(get_hipe_timer_val(Timer), get(Timer)).
-define(set_hipe_timer_val(Timer, Val), put(Timer, Val)).
-define(option_time(Stmnt, Text, Options),
- if true -> ?when_option(time, Options, ?start_timer(Text)),
- fun(R) ->
- ?when_option(time, Options, ?stop_timer(Text)),
- R
- end(Stmnt)end).
+ begin
+ ?when_option(time, Options, ?start_timer(Text)),
+ fun(R) ->
+ ?when_option(time, Options, ?stop_timer(Text)),
+ R
+ end(Stmnt)
+ end).
--define(option_start_time(Text,Options),
+-define(option_start_time(Text, Options),
?when_option(time, Options, ?start_timer(Text))).
--define(option_stop_time(Text,Options),
+-define(option_stop_time(Text, Options),
?when_option(time, Options, ?stop_timer(Text))).
-define(opt_start_timer(Text),
- hipe_timing:start_optional_timer(Text,?MODULE)).
+ hipe_timing:start_optional_timer(Text, ?MODULE)).
-define(opt_stop_timer(Text),
- hipe_timing:stop_optional_timer(Text,?MODULE)).
+ hipe_timing:stop_optional_timer(Text, ?MODULE)).
%%
%% Turn on instrumentation of the compiler.
@@ -187,15 +189,15 @@
-define(count_pre_ra_instructions(Options, NoInstrs),
?when_option(count_instrs, Options,
put(pre_ra_instrs,
- get(pre_ra_instrs)+ NoInstrs))).
+ get(pre_ra_instrs) + NoInstrs))).
-define(count_post_ra_instructions(Options, NoInstrs),
?when_option(count_instrs, Options,
put(post_ra_instrs,
- get(post_ra_instrs)+ NoInstrs))).
+ get(post_ra_instrs) + NoInstrs))).
-define(start_time_regalloc(Options),
?when_option(timeregalloc, Options,
- put(regalloctime1,erlang:statistics(runtime)))).
+ put(regalloctime1, erlang:statistics(runtime)))).
-define(stop_time_regalloc(Options),
?when_option(timeregalloc, Options,
put(regalloctime,
@@ -215,11 +217,11 @@
-define(count_pre_ra_temps(Options, NoTemps),
?when_option(count_temps, Options,
put(pre_ra_temps,
- get(pre_ra_temps)+ NoTemps))).
+ get(pre_ra_temps) + NoTemps))).
-define(count_post_ra_temps(Options, NoTemps),
?when_option(count_temps, Options,
put(post_ra_temps,
- get(post_ra_temps)+ NoTemps))).
+ get(post_ra_temps) + NoTemps))).
-define(inc_counter(Counter, Val),
case get(Counter) of
@@ -255,7 +257,7 @@
?count_post_ra_instructions(Options, NoInstrs),
?cons_counter(counter_mem_temps, get(counter_mfa_mem_temps)),
?cons_counter(ra_all_iterations_counter, get(ra_iteration_counter)),
- put(ra_iteration_counter,0),
+ put(ra_iteration_counter, 0),
?count_post_ra_temps(Options, NoTemps)
end).
@@ -264,12 +266,12 @@
put(spilledtemps, get(spilledtemps) + NoSpills))).
-define(optional_start_timer(Timer, Options),
- case lists:member(Timer, proplists:get_value(timers,Options++[{timers,[]}])) of
+ case lists:member(Timer, proplists:get_value(timers, Options++[{timers,[]}])) of
true -> ?start_hipe_timer(Timer);
false -> true
end).
-define(optional_stop_timer(Timer, Options),
- case lists:member(Timer, proplists:get_value(timers,Options++[{timers,[]}])) of
+ case lists:member(Timer, proplists:get_value(timers, Options++[{timers,[]}])) of
true -> ?stop_hipe_timer(Timer);
false -> true
end).
@@ -316,4 +318,4 @@
'unknown' | {'reg' | 'fp_reg' | 'spill',
non_neg_integer()}}].
-type hipe_temp_map() :: tuple().
--type hipe_spill_map() :: [{non_neg_integer(), {'spill',non_neg_integer()}}].
+-type hipe_spill_map() :: [{non_neg_integer(), {'spill', non_neg_integer()}}].
diff --git a/lib/hipe/main/hipe_main.erl b/lib/hipe/main/hipe_main.erl
index be5050e155..4b89feb48a 100644
--- a/lib/hipe/main/hipe_main.erl
+++ b/lib/hipe/main/hipe_main.erl
@@ -284,8 +284,9 @@ icode_ssa_type(IcodeSSA, MFA, Options, Servers) ->
false -> AnnIcode1
end,
AnnIcode3 = icode_range_analysis(AnnIcode2, MFA, Options, Servers),
- pp(AnnIcode3, MFA, icode, pp_range_icode, Options, Servers),
- hipe_icode_type:unannotate_cfg(AnnIcode3)
+ AnnIcode4 = icode_eliminate_safe_calls(AnnIcode3, Options),
+ pp(AnnIcode4, MFA, icode, pp_range_icode, Options, Servers),
+ hipe_icode_type:unannotate_cfg(AnnIcode4)
end.
icode_ssa_convert(IcodeCfg, Options) ->
@@ -295,7 +296,7 @@ icode_ssa_convert(IcodeCfg, Options) ->
icode_ssa_const_prop(IcodeSSA, Options) ->
case proplists:get_bool(icode_ssa_const_prop, Options) of
true ->
- ?option_time(Tmp=hipe_icode_ssa_const_prop:propagate(IcodeSSA),
+ Tmp = ?option_time(hipe_icode_ssa_const_prop:propagate(IcodeSSA),
"Icode SSA sparse conditional constant propagation", Options),
?option_time(hipe_icode_ssa:remove_dead_code(Tmp),
"Icode SSA dead code elimination pass 1", Options);
@@ -334,6 +335,15 @@ icode_range_analysis(IcodeSSA, MFA, Options, Servers) ->
IcodeSSA
end.
+icode_eliminate_safe_calls(IcodeSSA, Options) ->
+ case proplists:get_bool(icode_call_elim, Options) of
+ true ->
+ ?option_time(hipe_icode_call_elim:cfg(IcodeSSA),
+ "Icode SSA safe call elimination", Options);
+ false ->
+ IcodeSSA
+ end.
+
icode_ssa_dead_code_elimination(IcodeSSA, Options) ->
IcodeSSA1 = ?option_time(hipe_icode_ssa:remove_dead_code(IcodeSSA),
"Icode SSA dead code elimination pass 2",
diff --git a/lib/hipe/misc/Makefile b/lib/hipe/misc/Makefile
index 60d2861c62..72cfff21a8 100644
--- a/lib/hipe/misc/Makefile
+++ b/lib/hipe/misc/Makefile
@@ -69,7 +69,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars +warn_missing_spec +warn_untyped_record
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars +warn_missing_spec +warn_untyped_record
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/misc/hipe_consttab.erl b/lib/hipe/misc/hipe_consttab.erl
index f361edc79c..226b20fa46 100644
--- a/lib/hipe/misc/hipe_consttab.erl
+++ b/lib/hipe/misc/hipe_consttab.erl
@@ -87,7 +87,8 @@
% {NewTab, Lbl}
insert_sorted_block/4,
insert_block/3,
- %% insert_global_word/2,
+ insert_binary_const/3,
+ %% insert_global_word/2,
%% insert_global_block/4,
%% update_word/3, % update_word(ConstTab, Value) -> {NewTab, Lbl}
%% update_block/5,
@@ -196,6 +197,16 @@ insert_block({ConstTab, RefToLabels, NextLabel}, ElementType, InitList) ->
{ElementType,InitList}),
{insert_backrefs(NewTa, Id, ReferredLabels), Id}.
+%% @doc Inserts a binary constant literal into the const table.
+-spec insert_binary_const(hipe_consttab(), ct_alignment(), binary()) ->
+ {hipe_consttab(), hipe_constlbl()}.
+insert_binary_const(ConstTab, Alignment, Binary)
+ when (Alignment =:= 4 orelse Alignment =:= 8 orelse Alignment =:= 16
+ orelse Alignment =:= 32), is_binary(Binary),
+ size(Binary) rem Alignment =:= 0 ->
+ insert_const(ConstTab, block, Alignment, false,
+ {byte, binary_to_list(Binary)}).
+
%% @spec (ConstTab::hipe_consttab(), ElementType::element_type(),
%% InitList::block(), SortOrder) -> {hipe_consttab(), hipe_constlbl()}
diff --git a/lib/hipe/misc/hipe_consttab.hrl b/lib/hipe/misc/hipe_consttab.hrl
index d2dbbe509c..550da0455c 100644
--- a/lib/hipe/misc/hipe_consttab.hrl
+++ b/lib/hipe/misc/hipe_consttab.hrl
@@ -20,7 +20,7 @@
%%
%%-----------------------------------------------------------------------------
--type ct_alignment() :: 4 | 8.
+-type ct_alignment() :: 4 | 8 | 16 | 32.
-type hipe_constlbl() :: non_neg_integer().
-type hipe_consttab() :: {dict:dict(), [hipe_constlbl()], hipe_constlbl()}.
diff --git a/lib/hipe/opt/Makefile b/lib/hipe/opt/Makefile
index ec0d01b42e..684d6f45b4 100644
--- a/lib/hipe/opt/Makefile
+++ b/lib/hipe/opt/Makefile
@@ -64,7 +64,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars +warn_missing_spec # +warn_untyped_record
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars +warn_missing_spec # +warn_untyped_record
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/ppc/Makefile b/lib/hipe/ppc/Makefile
index 576c089f15..1901dfa671 100644
--- a/lib/hipe/ppc/Makefile
+++ b/lib/hipe/ppc/Makefile
@@ -76,7 +76,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/ppc/hipe_ppc.erl b/lib/hipe/ppc/hipe_ppc.erl
index 0fa96162f6..380e791bc1 100644
--- a/lib/hipe/ppc/hipe_ppc.erl
+++ b/lib/hipe/ppc/hipe_ppc.erl
@@ -167,8 +167,10 @@ temp_is_precoloured(#ppc_temp{reg=Reg,type=Type}) ->
_ -> hipe_ppc_registers:is_precoloured_gpr(Reg)
end.
-mk_simm16(Value) -> #ppc_simm16{value=Value}.
-mk_uimm16(Value) -> #ppc_uimm16{value=Value}.
+mk_simm16(Value) when Value >= -(1 bsl 15), Value < (1 bsl 15) ->
+ #ppc_simm16{value=Value}.
+mk_uimm16(Value) when Value >= 0, Value < (1 bsl 16) ->
+ #ppc_uimm16{value=Value}.
mk_mfa(M, F, A) -> #ppc_mfa{m=M, f=F, a=A}.
@@ -240,7 +242,11 @@ mk_li(Dst, Value, Tail) -> % Dst can be R0
Value =< 16#7FFFFFFF ->
mk_li32(Dst, R0, Value, Tail);
true ->
- Highest = (Value bsr 48), % Value@highest
+ Highest = case (Value bsr 48) of % Value@highest
+ TopBitSet when TopBitSet >= (1 bsl 15) ->
+ TopBitSet - (1 bsl 16); % encoder needs it to be negative
+ FitsSimm16 -> FitsSimm16
+ end,
Higher = (Value bsr 32) band 16#FFFF, % Value@higher
High = (Value bsr 16) band 16#FFFF, % Value@h
Low = Value band 16#FFFF, % Value@l
diff --git a/lib/hipe/ppc/hipe_ppc_assemble.erl b/lib/hipe/ppc/hipe_ppc_assemble.erl
index ff9da01b11..d89ff6235c 100644
--- a/lib/hipe/ppc/hipe_ppc_assemble.erl
+++ b/lib/hipe/ppc/hipe_ppc_assemble.erl
@@ -175,7 +175,8 @@ do_slwi_opnds(Dst, Src1, {uimm,N}) when is_integer(N), 0 =< N, N < 32 ->
{Dst, Src1, {sh,N}, {mb,0}, {me,31-N}}.
do_srwi_opnds(Dst, Src1, {uimm,N}) when is_integer(N), 0 =< N, N < 32 ->
- {Dst, Src1, {sh,32-N}, {mb,N}, {me,31}}.
+ %% SH should be 0 (not 32) when N is 0
+ {Dst, Src1, {sh,(32-N) band 31}, {mb,N}, {me,31}}.
do_srawi_src2({uimm,N}) when is_integer(N), 0 =< N, N < 32 -> {sh,N}.
@@ -184,7 +185,8 @@ do_sldi_opnds(Dst, Src1, {uimm,N}) when is_integer(N), 0 =< N, N < 64 ->
{Dst, Src1, {sh6,N}, {me6,63-N}}.
do_srdi_opnds(Dst, Src1, {uimm,N}) when is_integer(N), 0 =< N, N < 64 ->
- {Dst, Src1, {sh6,64-N}, {mb6,N}}.
+ %% SH should be 0 (not 64) when N is 0
+ {Dst, Src1, {sh6,(64-N) band 63}, {mb6,N}}.
do_sradi_src2({uimm,N}) when is_integer(N), 0 =< N, N < 64 -> {sh6,N}.
@@ -246,6 +248,7 @@ do_load(I) ->
case LdOp of
'ld' -> do_disp_ds(Disp);
'ldu' -> do_disp_ds(Disp);
+ 'lwa' -> do_disp_ds(Disp);
_ -> do_disp(Disp)
end,
NewBase = do_reg(Base),
diff --git a/lib/hipe/regalloc/Makefile b/lib/hipe/regalloc/Makefile
index 2b94f5ecfe..aaa4418f37 100644
--- a/lib/hipe/regalloc/Makefile
+++ b/lib/hipe/regalloc/Makefile
@@ -77,7 +77,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars# +warn_missing_spec +warn_untyped_record
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars #+warn_missing_spec +warn_untyped_record
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/rtl/Makefile b/lib/hipe/rtl/Makefile
index e0ff225a25..b4cdf8b1f2 100644
--- a/lib/hipe/rtl/Makefile
+++ b/lib/hipe/rtl/Makefile
@@ -75,7 +75,7 @@ TARGET_FILES= $(MODULES:%=$(EBIN)/%.$(EMULATOR))
include ../native.mk
-ERL_COMPILE_FLAGS += -Werror +inline +warn_unused_import +warn_exported_vars
+ERL_COMPILE_FLAGS += -Werror +inline +warn_unused_import +warn_export_vars
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/rtl/hipe_rtl.erl b/lib/hipe/rtl/hipe_rtl.erl
index 1d627ed024..0726827299 100644
--- a/lib/hipe/rtl/hipe_rtl.erl
+++ b/lib/hipe/rtl/hipe_rtl.erl
@@ -366,7 +366,7 @@
-export([subst_uses_llvm/2]).
--export_type([alub_cond/0]).
+-export_type([alub_cond/0, rtl/0]).
%%
%% RTL
@@ -384,6 +384,7 @@
label_range, %% {Min,Max} First and last name used for labels
info=[] %% A keylist with arbitrary information.
}).
+-opaque rtl() :: #rtl{}.
mk_rtl(Fun, ArgList, Closure, Leaf, Code, Data, VarRange, LabelRange) ->
#rtl{'fun'=Fun, arglist=ArgList, code=Code,
@@ -414,7 +415,9 @@ rtl_info_update(Rtl, Info) -> Rtl#rtl{info=Info}.
%% move
%%
-mk_move(Dst, Src) -> false = is_fpreg(Dst), false = is_fpreg(Src), #move{dst=Dst, src=Src}.
+mk_move(Dst, Src) ->
+ false = is_fpreg(Dst), false = is_fpreg(Src),
+ #move{dst=Dst, src=Src}.
move_dst(#move{dst=Dst}) -> Dst.
move_dst_update(M, NewDst) -> false = is_fpreg(NewDst), M#move{dst=NewDst}.
move_src(#move{src=Src}) -> Src.
diff --git a/lib/hipe/rtl/hipe_rtl_arith.inc b/lib/hipe/rtl/hipe_rtl_arith.inc
index 645bc83f9f..0c396c8e76 100644
--- a/lib/hipe/rtl/hipe_rtl_arith.inc
+++ b/lib/hipe/rtl/hipe_rtl_arith.inc
@@ -47,73 +47,80 @@ eval_alu(Op, Arg1, Arg2)
Res = (Arg1 - Arg2) band ?WORDMASK,
N = sign_bit(Res),
Z = zero(Res),
- V = (Sign1 and (not Sign2) and (not N))
+ V = (Sign1 andalso (not Sign2) andalso (not N))
or
- ((not Sign1) and Sign2 and N),
- C = ((not Sign1) and Sign2)
+ ((not Sign1) andalso Sign2 andalso N),
+ C = ((not Sign1) andalso Sign2)
or
- (N and ((not Sign1) or Sign2));
+ (N andalso ((not Sign1) orelse Sign2)),
+ {Res, N, Z, V, C};
'add' ->
Res = (Arg1 + Arg2) band ?WORDMASK,
N = sign_bit(Res),
Z = zero(Res),
- V = (Sign1 and Sign2 and (not N))
+ V = (Sign1 andalso Sign2 andalso (not N))
or
- ((not Sign1) and (not Sign2) and N),
- C = (Sign1 and Sign2)
+ ((not Sign1) andalso (not Sign2) andalso N),
+ C = (Sign1 andalso Sign2)
or
- ((not N) and (Sign1 or Sign2));
+ ((not N) andalso (Sign1 orelse Sign2)),
+ {Res, N, Z, V, C};
'mul' ->
FullRes = Arg1 * Arg2,
Res = FullRes band ?WORDMASK,
ResHi = FullRes bsr ?BITS,
N = sign_bit(Res),
Z = zero(Res),
- V = (N and (ResHi =/= -1)) or ((not N) and (ResHi =/= 0)),
- C = V;
+ V = (N andalso (ResHi =/= -1)) orelse ((not N) andalso (ResHi =/= 0)),
+ C = V,
+ {Res, N, Z, V, C};
'sra' ->
Res = (Arg1 bsr Arg2) band ?WORDMASK,
N = sign_bit(Res),
Z = zero(Res),
V = 0,
- C = 0;
+ C = 0,
+ {Res, N, Z, V, C};
'srl' ->
Res = (Arg1 bsr Arg2) band shiftmask(Arg2),
N = sign_bit(Res),
Z = zero(Res),
V = 0,
- C = 0;
+ C = 0,
+ {Res, N, Z, V, C};
'sll' ->
Res = (Arg1 bsl Arg2) band ?WORDMASK,
N = sign_bit(Res),
Z = zero(Res),
V = 0,
- C = 0;
+ C = 0,
+ {Res, N, Z, V, C};
'or' ->
Res = (Arg1 bor Arg2) band ?WORDMASK,
N = sign_bit(Res),
Z = zero(Res),
V = 0,
- C = 0;
+ C = 0,
+ {Res, N, Z, V, C};
'and' ->
Res = (Arg1 band Arg2) band ?WORDMASK,
N = sign_bit(Res),
Z = zero(Res),
V = 0,
- C = 0;
+ C = 0,
+ {Res, N, Z, V, C};
'xor' ->
Res = (Arg1 bxor Arg2) band ?WORDMASK,
N = sign_bit(Res),
Z = zero(Res),
V = 0,
- C = 0;
+ C = 0,
+ {Res, N, Z, V, C};
Op ->
- Res = N = Z = V = C = 0,
?EXIT({"unknown alu op", Op})
- end,
- {Res, N, Z, V, C};
+ end;
eval_alu(Op, Arg1, Arg2) ->
- ?EXIT({argument_overflow,Op,Arg1,Arg2}).
+ ?EXIT({argument_overflow, Op, Arg1, Arg2}).
%% Björn & Bjarni:
%% We need to be able to do evaluations based only on the bits, since
@@ -130,9 +137,9 @@ eval_cond_bits(Cond, N, Z, V, C) ->
'ne' ->
not Z;
'gt' ->
- not (Z or (N xor V));
+ not (Z orelse (N xor V));
'gtu' ->
- not (C or Z);
+ not (C orelse Z);
'ge' ->
not (N xor V);
'geu'->
@@ -142,9 +149,9 @@ eval_cond_bits(Cond, N, Z, V, C) ->
'ltu'->
C;
'le' ->
- Z or (N xor V);
+ Z orelse (N xor V);
'leu'->
- C or Z;
+ C orelse Z;
'overflow' ->
V;
'not_overflow' ->
diff --git a/lib/hipe/rtl/hipe_rtl_binary_construct.erl b/lib/hipe/rtl/hipe_rtl_binary_construct.erl
index 4403aa552f..367d76b24d 100644
--- a/lib/hipe/rtl/hipe_rtl_binary_construct.erl
+++ b/lib/hipe/rtl/hipe_rtl_binary_construct.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -19,25 +19,21 @@
%% %CopyrightEnd%
%%
%% ====================================================================
-%% Module : hipe_rtl_inline_bs_ops
+%% Module : hipe_rtl_binary_construct
%% Purpose :
%% Notes :
-%% History : * 2001-06-14 Erik Johansson ([email protected]): Created.
+%% History : Written mostly by Per Gustafsson
%% ====================================================================
%% Exports :
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-module(hipe_rtl_binary_construct).
+
-export([gen_rtl/7]).
--import(hipe_tagscheme, [set_field_from_term/3,
- get_field_from_term/3,
- set_field_from_pointer/3,
- get_field_from_pointer/3]).
-
--import(hipe_rtl_binary, [floorlog2/1,
- get_word_integer/4,
- make_size/4]).
+
+-import(hipe_rtl_binary, [get_word_integer/4]).
+
%%-------------------------------------------------------------------------
-include("../main/hipe.hrl").
@@ -50,7 +46,6 @@
-define(BYTE_SIZE, 8).
-define(MAX_BINSIZE, ((1 bsl ((hipe_rtl_arch:word_size()*?BYTE_SIZE)-3)) - 1)).
-
%% -------------------------------------------------------------------------
%% The code is generated as a list of lists, it will be flattened later.
%%
@@ -61,12 +56,12 @@ gen_rtl(BsOP, Dst, Args, TrueLblName, FalseLblName, SystemLimitLblName, ConstTab
{bs_put_string, String, SizeInBytes} ->
[NewOffset] = get_real(Dst),
[Base, Offset] = Args,
- put_string(NewOffset, ConstTab, String, SizeInBytes, Base, Offset,
+ put_string(NewOffset, ConstTab, String, SizeInBytes, Base, Offset,
TrueLblName);
- _ ->
- Code =
+ _ ->
+ Code =
case BsOP of
- {bs_init, Size, _Flags} ->
+ {bs_init, Size, _Flags} ->
[] = Args,
[Dst0, Base, Offset] = Dst,
case is_illegal_const(Size bsl 3) of
@@ -75,14 +70,14 @@ gen_rtl(BsOP, Dst, Args, TrueLblName, FalseLblName, SystemLimitLblName, ConstTab
false ->
const_init2(Size, Dst0, Base, Offset, TrueLblName)
end;
-
- {bs_init, _Flags} ->
+
+ {bs_init, _Flags} ->
[Size] = Args,
[Dst0, Base, Offset] = Dst,
- var_init2(Size, Dst0, Base, Offset, TrueLblName,
+ var_init2(Size, Dst0, Base, Offset, TrueLblName,
SystemLimitLblName, FalseLblName);
- {bs_init_bits, Size, _Flags} ->
+ {bs_init_bits, Size, _Flags} ->
[] = Args,
[Dst0, Base, Offset] = Dst,
case is_illegal_const(Size) of
@@ -91,19 +86,19 @@ gen_rtl(BsOP, Dst, Args, TrueLblName, FalseLblName, SystemLimitLblName, ConstTab
false ->
const_init_bits(Size, Dst0, Base, Offset, TrueLblName)
end;
-
- {bs_init_bits, _Flags} ->
+
+ {bs_init_bits, _Flags} ->
[Size] = Args,
[Dst0, Base, Offset] = Dst,
- var_init_bits(Size, Dst0, Base, Offset, TrueLblName,
+ var_init_bits(Size, Dst0, Base, Offset, TrueLblName,
SystemLimitLblName, FalseLblName);
-
+
{bs_put_binary_all, Unit, _Flags} ->
[Src, Base, Offset] = Args,
[NewOffset] = get_real(Dst),
put_binary_all(NewOffset, Src, Base, Offset, Unit,
TrueLblName, FalseLblName);
-
+
{bs_put_binary, Size, _Flags} ->
case is_illegal_const(Size) of
true ->
@@ -112,19 +107,19 @@ gen_rtl(BsOP, Dst, Args, TrueLblName, FalseLblName, SystemLimitLblName, ConstTab
[NewOffset] = get_real(Dst),
case Args of
[Src, Base, Offset] ->
- put_static_binary(NewOffset, Src, Size, Base, Offset,
+ put_static_binary(NewOffset, Src, Size, Base, Offset,
TrueLblName, FalseLblName);
[Src, Bits, Base, Offset] ->
- {SizeCode, SizeReg} = make_size(Size, Bits,
- SystemLimitLblName,
- FalseLblName),
- InCode = put_dynamic_binary(NewOffset, Src, SizeReg, Base,
+ {SizeCode, SizeReg} =
+ hipe_rtl_binary:make_size(Size, Bits, SystemLimitLblName,
+ FalseLblName),
+ InCode = put_dynamic_binary(NewOffset, Src, SizeReg, Base,
Offset, TrueLblName, FalseLblName),
SizeCode ++ InCode
end
end;
-
- {bs_put_float, Size, Flags, ConstInfo} ->
+
+ {bs_put_float, Size, Flags, ConstInfo} ->
[NewOffset] = get_real(Dst),
Aligned = aligned(Flags),
LittleEndian = littleendian(Flags),
@@ -134,106 +129,108 @@ gen_rtl(BsOP, Dst, Args, TrueLblName, FalseLblName, SystemLimitLblName, ConstTab
false ->
case Args of
[Src, Base, Offset] ->
- CCode = static_float_c_code(NewOffset, Src, Base, Offset, Size, Flags,
+ CCode = static_float_c_code(NewOffset, Src, Base, Offset, Size, Flags,
TrueLblName, FalseLblName),
- put_float(NewOffset, Src, Base, Offset, Size, CCode, Aligned,
+ put_float(NewOffset, Src, Base, Offset, Size, CCode, Aligned,
LittleEndian, ConstInfo, TrueLblName);
[Src, Bits, Base, Offset] ->
- {SizeCode, SizeReg} = make_size(Size, Bits,
- SystemLimitLblName,
- FalseLblName),
- InCode = float_c_code(NewOffset, Src, Base, Offset, SizeReg,
+ {SizeCode, SizeReg} =
+ hipe_rtl_binary:make_size(Size, Bits, SystemLimitLblName,
+ FalseLblName),
+ InCode = float_c_code(NewOffset, Src, Base, Offset, SizeReg,
Flags, TrueLblName, FalseLblName),
SizeCode ++ InCode
end
end;
- {bs_put_integer, Size, Flags, ConstInfo} ->
- Aligned = aligned(Flags),
+ {bs_put_integer, Size, Flags, ConstInfo} ->
+ Aligned = aligned(Flags),
LittleEndian = littleendian(Flags),
[NewOffset] = get_real(Dst),
case is_illegal_const(Size) of
true ->
[hipe_rtl:mk_goto(FalseLblName)];
false ->
- case ConstInfo of
+ case ConstInfo of
fail ->
[hipe_rtl:mk_goto(FalseLblName)];
- _ ->
- case Args of
- [Src, Base, Offset] ->
+ _ ->
+ case Args of
+ [Src, Base, Offset] ->
CCode = static_int_c_code(NewOffset, Src,
- Base, Offset, Size,
- Flags, TrueLblName,
+ Base, Offset, Size,
+ Flags, TrueLblName,
FalseLblName),
- put_static_int(NewOffset, Src, Base, Offset, Size,
- CCode, Aligned, LittleEndian, TrueLblName);
- [Src, Bits, Base, Offset] ->
- {SizeCode, SizeReg} = make_size(Size, Bits,
+ put_static_int(NewOffset, Src, Base, Offset, Size,
+ CCode, Aligned, LittleEndian, TrueLblName);
+ [Src, Bits, Base, Offset] ->
+ {SizeCode, SizeReg} =
+ hipe_rtl_binary:make_size(Size, Bits,
SystemLimitLblName,
FalseLblName),
CCode = int_c_code(NewOffset, Src, Base,
- Offset, SizeReg, Flags,
- TrueLblName, FalseLblName),
+ Offset, SizeReg, Flags,
+ TrueLblName, FalseLblName),
InCode =
- put_dynamic_int(NewOffset, Src, Base, Offset,
+ put_dynamic_int(NewOffset, Src, Base, Offset,
SizeReg, CCode, Aligned,
- LittleEndian, TrueLblName),
- SizeCode ++ InCode
- end
- end
+ LittleEndian, TrueLblName),
+ SizeCode ++ InCode
+ end
+ end
end;
-
- {unsafe_bs_put_integer, 0, _Flags, _ConstInfo} ->
- [NewOffset] = get_real(Dst),
+
+ {unsafe_bs_put_integer, 0, _Flags, _ConstInfo} ->
+ [NewOffset] = get_real(Dst),
case Args of
[_Src, _Base, Offset] ->
[hipe_rtl:mk_move(NewOffset,Offset),
- hipe_rtl:mk_goto(TrueLblName)];
- [_Src, _Bits, _Base, Offset] ->
+ hipe_rtl:mk_goto(TrueLblName)];
+ [_Src, _Bits, _Base, Offset] ->
[hipe_rtl:mk_move(NewOffset,Offset),
- hipe_rtl:mk_goto(TrueLblName)]
- end;
-
- {unsafe_bs_put_integer, Size, Flags, ConstInfo} ->
+ hipe_rtl:mk_goto(TrueLblName)]
+ end;
+
+ {unsafe_bs_put_integer, Size, Flags, ConstInfo} ->
case is_illegal_const(Size) of
true ->
[hipe_rtl:mk_goto(FalseLblName)];
false ->
Aligned = aligned(Flags),
- LittleEndian = littleendian(Flags),
- [NewOffset] = get_real(Dst),
- case ConstInfo of
+ LittleEndian = littleendian(Flags),
+ [NewOffset] = get_real(Dst),
+ case ConstInfo of
fail ->
- [hipe_rtl:mk_goto(FalseLblName)];
- _ ->
- case Args of
- [Src, Base, Offset] ->
+ [hipe_rtl:mk_goto(FalseLblName)];
+ _ ->
+ case Args of
+ [Src, Base, Offset] ->
CCode = static_int_c_code(NewOffset, Src,
- Base, Offset, Size,
- Flags, TrueLblName,
+ Base, Offset, Size,
+ Flags, TrueLblName,
FalseLblName),
- put_unsafe_static_int(NewOffset, Src, Base,
+ put_unsafe_static_int(NewOffset, Src, Base,
Offset, Size,
- CCode, Aligned, LittleEndian,
- TrueLblName);
- [Src, Bits, Base, Offset] ->
- {SizeCode, SizeReg} = make_size(Size, Bits,
- SystemLimitLblName,
- FalseLblName),
+ CCode, Aligned, LittleEndian,
+ TrueLblName);
+ [Src, Bits, Base, Offset] ->
+ {SizeCode, SizeReg} =
+ hipe_rtl_binary:make_size(Size, Bits,
+ SystemLimitLblName,
+ FalseLblName),
CCode = int_c_code(NewOffset, Src, Base,
- Offset, SizeReg, Flags,
- TrueLblName, FalseLblName),
+ Offset, SizeReg, Flags,
+ TrueLblName, FalseLblName),
InCode =
- put_unsafe_dynamic_int(NewOffset, Src, Base,
- Offset, SizeReg, CCode,
- Aligned, LittleEndian,
+ put_unsafe_dynamic_int(NewOffset, Src, Base,
+ Offset, SizeReg, CCode,
+ Aligned, LittleEndian,
TrueLblName),
- SizeCode ++ InCode
- end
+ SizeCode ++ InCode
+ end
end
- end;
-
+ end;
+
bs_utf8_size ->
case Dst of
[_DstVar] ->
@@ -276,13 +273,13 @@ gen_rtl(BsOP, Dst, Args, TrueLblName, FalseLblName, SystemLimitLblName, ConstTab
[hipe_rtl:mk_call([], bs_validate_unicode, Args,
TrueLblName, FalseLblName, not_remote)];
- bs_final ->
+ bs_final ->
Zero = hipe_rtl:mk_imm(0),
- [Src, Offset] = Args,
+ [Src, Offset] = Args,
[BitSize, ByteSize] = create_regs(2),
[ShortLbl, LongLbl] = create_lbls(2),
- case Dst of
- [DstVar] ->
+ case Dst of
+ [DstVar] ->
[hipe_rtl:mk_alub(BitSize, Offset, 'and', ?LOW_BITS, eq,
hipe_rtl:label_name(ShortLbl),
hipe_rtl:label_name(LongLbl)), ShortLbl,
@@ -292,11 +289,11 @@ gen_rtl(BsOP, Dst, Args, TrueLblName, FalseLblName, SystemLimitLblName, ConstTab
hipe_rtl:mk_alu(ByteSize, Offset, 'srl', ?BYTE_SHIFT),
hipe_tagscheme:mk_sub_binary(DstVar, ByteSize,
Zero, BitSize, Zero, Src),
- hipe_rtl:mk_goto(TrueLblName)];
+ hipe_rtl:mk_goto(TrueLblName)];
[] ->
- [hipe_rtl:mk_goto(TrueLblName)]
- end;
-
+ [hipe_rtl:mk_goto(TrueLblName)]
+ end;
+
bs_init_writable ->
Zero = hipe_rtl:mk_imm(0),
[Size] = Args,
@@ -306,29 +303,29 @@ gen_rtl(BsOP, Dst, Args, TrueLblName, FalseLblName, SystemLimitLblName, ConstTab
[hipe_rtl:mk_gctest(?PROC_BIN_WORDSIZE + ?SUB_BIN_WORDSIZE),
get_word_integer(Size, SizeReg, SystemLimitLblName, FalseLblName),
allocate_writable(DstVar, Base, SizeReg, Zero, Zero),
- hipe_rtl:mk_goto(TrueLblName)];
-
+ hipe_rtl:mk_goto(TrueLblName)];
+
{bs_private_append, _U, _F} ->
- [Size, Bin] = Args,
+ [Size, Bin] = Args,
[DstVar, Base, Offset] = Dst,
[ProcBin] = create_vars(1),
[SubSize, SizeReg, EndSubSize, EndSubBitSize] = create_regs(4),
SubBinSize = {sub_binary, binsize},
- [get_field_from_term({sub_binary, orig}, Bin, ProcBin),
- get_field_from_term(SubBinSize, Bin, SubSize),
+ [hipe_tagscheme:get_field_from_term({sub_binary, orig}, Bin, ProcBin),
+ hipe_tagscheme:get_field_from_term(SubBinSize, Bin, SubSize),
get_word_integer(Size, SizeReg, SystemLimitLblName, FalseLblName),
realloc_binary(SizeReg, ProcBin, Base),
calculate_sizes(Bin, SizeReg, Offset, EndSubSize, EndSubBitSize),
- set_field_from_term(SubBinSize, Bin, EndSubSize),
- set_field_from_term({sub_binary, bitsize}, Bin, EndSubBitSize),
+ hipe_tagscheme:set_field_from_term(SubBinSize, Bin, EndSubSize),
+ hipe_tagscheme:set_field_from_term({sub_binary, bitsize}, Bin, EndSubBitSize),
hipe_rtl:mk_move(DstVar, Bin),
hipe_rtl:mk_goto(TrueLblName)];
{bs_append, _U, _F, Unit, _Bla} ->
- [Size, Bin] = Args,
- [DstVar, Base, Offset] = Dst,
+ [Size, Bin] = Args,
+ [DstVar, Base, Offset] = Dst,
[ProcBin] = create_vars(1),
- [Flags, SizeReg, IsWritable, EndSubSize, EndSubBitSize] =
+ [Flags, SizeReg, IsWritable, EndSubSize, EndSubBitSize] =
create_regs(5),
[ContLbl,ContLbl2,ContLbl3,ContLbl4,WritableLbl,NotWritableLbl] =
Lbls = create_lbls(6),
@@ -339,24 +336,24 @@ gen_rtl(BsOP, Dst, Args, TrueLblName, FalseLblName, SystemLimitLblName, ConstTab
SubIsWritable = {sub_binary, is_writable},
[hipe_rtl:mk_gctest(?SUB_BIN_WORDSIZE + ?PROC_BIN_WORDSIZE),
get_word_integer(Size, SizeReg, SystemLimitLblName, FalseLblName),
- hipe_tagscheme:test_bitstr(Bin, ContLblName, FalseLblName, 0.99),
- ContLbl,
- hipe_tagscheme:test_subbinary(Bin,ContLbl2Name, NotWritable),
+ hipe_tagscheme:test_bitstr(Bin, ContLblName, FalseLblName, 0.99),
+ ContLbl,
+ hipe_tagscheme:test_subbinary(Bin,ContLbl2Name, NotWritable),
ContLbl2,
- get_field_from_term(SubIsWritable, Bin, IsWritable),
+ hipe_tagscheme:get_field_from_term(SubIsWritable, Bin, IsWritable),
hipe_rtl:mk_branch(IsWritable, 'ne', Zero,
ContLbl3Name, NotWritable),
ContLbl3,
- get_field_from_term({sub_binary, orig}, Bin, ProcBin),
- get_field_from_term({proc_bin, flags}, ProcBin, Flags),
+ hipe_tagscheme:get_field_from_term({sub_binary, orig}, Bin, ProcBin),
+ hipe_tagscheme:get_field_from_term({proc_bin, flags}, ProcBin, Flags),
hipe_rtl:mk_alub(Flags, Flags, 'and',
- hipe_rtl:mk_imm(?PB_IS_WRITABLE),
+ hipe_rtl:mk_imm(?PB_IS_WRITABLE),
eq, NotWritable, ContLbl4Name, 0.01),
ContLbl4,
calculate_sizes(Bin, SizeReg, Offset, EndSubSize, EndSubBitSize),
is_divisible(Offset, Unit, Writable, FalseLblName),
WritableLbl,
- set_field_from_term(SubIsWritable, Bin, Zero),
+ hipe_tagscheme:set_field_from_term(SubIsWritable, Bin, Zero),
realloc_binary(SizeReg, ProcBin, Base),
hipe_tagscheme:mk_sub_binary(DstVar, EndSubSize, Zero,
EndSubBitSize, Zero,
@@ -394,7 +391,7 @@ not_writable_code(Bin, SizeReg, Dst, Base, Offset, Unit,
allocate_writable(Dst, Base, UsedBytes, TotBytes, TotSize),
put_binary_all(Offset, Bin, Base, hipe_rtl:mk_imm(0), Unit,
TrueLblName, FalseLblName)].
-
+
allocate_writable(Dst, Base, UsedBytes, TotBytes, TotSize) ->
Zero = hipe_rtl:mk_imm(0),
[NextLbl] = create_lbls(1),
@@ -411,7 +408,7 @@ allocate_writable(Dst, Base, UsedBytes, TotBytes, TotSize) ->
hipe_tagscheme:mk_sub_binary(Dst, EndSubSize, Zero, EndSubBitSize,
Zero, hipe_rtl:mk_imm(1), ProcBin)].
-realloc_binary(SizeReg, ProcBin, Base) ->
+realloc_binary(SizeReg, ProcBin, Base) ->
[NoReallocLbl, ReallocLbl, NextLbl, ContLbl] = Lbls = create_lbls(4),
[NoReallocLblName, ReallocLblName, NextLblName, ContLblName] =
[hipe_rtl:label_name(Lbl) || Lbl <- Lbls],
@@ -422,36 +419,36 @@ realloc_binary(SizeReg, ProcBin, Base) ->
ProcBinValTag = {proc_bin, val},
ProcBinBytesTag = {proc_bin, bytes},
BinOrigSizeTag = {binary, orig_size},
- [get_field_from_term(ProcBinSizeTag, ProcBin, PBSize),
+ [hipe_tagscheme:get_field_from_term(ProcBinSizeTag, ProcBin, PBSize),
hipe_rtl:mk_alu(Tmp, SizeReg, 'add', ?LOW_BITS),
hipe_rtl:mk_alu(ByteSize, Tmp, 'srl', ?BYTE_SHIFT),
hipe_rtl:mk_alu(ResultingSize, ByteSize, 'add', PBSize),
- set_field_from_term(ProcBinSizeTag, ProcBin, ResultingSize),
- get_field_from_term(ProcBinFlagsTag, ProcBin, Flags),
+ hipe_tagscheme:set_field_from_term(ProcBinSizeTag, ProcBin, ResultingSize),
+ hipe_tagscheme:get_field_from_term(ProcBinFlagsTag, ProcBin, Flags),
hipe_rtl:mk_alu(Flags, Flags, 'or', hipe_rtl:mk_imm(?PB_ACTIVE_WRITER)),
- set_field_from_term(ProcBinFlagsTag, ProcBin, Flags),
- get_field_from_term(ProcBinValTag, ProcBin, BinPointer),
- get_field_from_pointer(BinOrigSizeTag, BinPointer, OrigSize),
+ hipe_tagscheme:set_field_from_term(ProcBinFlagsTag, ProcBin, Flags),
+ hipe_tagscheme:get_field_from_term(ProcBinValTag, ProcBin, BinPointer),
+ hipe_tagscheme:get_field_from_pointer(BinOrigSizeTag, BinPointer, OrigSize),
hipe_rtl:mk_branch(OrigSize, 'ltu', ResultingSize,
ReallocLblName, NoReallocLblName),
NoReallocLbl,
- get_field_from_term(ProcBinBytesTag, ProcBin, Base),
+ hipe_tagscheme:get_field_from_term(ProcBinBytesTag, ProcBin, Base),
hipe_rtl:mk_goto(ContLblName),
ReallocLbl,
hipe_rtl:mk_alu(NewSize, ResultingSize, 'sll', hipe_rtl:mk_imm(1)),
- hipe_rtl:mk_call([BinPointer], bs_reallocate, [BinPointer, NewSize],
+ hipe_rtl:mk_call([BinPointer], bs_reallocate, [BinPointer, NewSize],
NextLblName, [], not_remote),
NextLbl,
- set_field_from_pointer(BinOrigSizeTag, BinPointer, NewSize),
- set_field_from_term(ProcBinValTag, ProcBin, BinPointer),
+ hipe_tagscheme:set_field_from_pointer(BinOrigSizeTag, BinPointer, NewSize),
+ hipe_tagscheme:set_field_from_term(ProcBinValTag, ProcBin, BinPointer),
hipe_tagscheme:extract_binary_bytes(BinPointer, Base),
- set_field_from_term(ProcBinBytesTag, ProcBin, Base),
+ hipe_tagscheme:set_field_from_term(ProcBinBytesTag, ProcBin, Base),
ContLbl].
calculate_sizes(Bin, SizeReg, Offset, EndSubSize, EndSubBitSize) ->
[SubSize, SubBitSize, EndSize] = create_regs(3),
- [get_field_from_term({sub_binary, binsize}, Bin, SubSize),
- get_field_from_term({sub_binary, bitsize}, Bin, SubBitSize),
+ [hipe_tagscheme:get_field_from_term({sub_binary, binsize}, Bin, SubSize),
+ hipe_tagscheme:get_field_from_term({sub_binary, bitsize}, Bin, SubBitSize),
hipe_rtl:mk_alu(Offset, SubSize, 'sll', ?BYTE_SHIFT),
hipe_rtl:mk_alu(Offset, Offset, 'add', SubBitSize),
hipe_rtl:mk_alu(EndSize, Offset, 'add', SizeReg),
@@ -492,7 +489,7 @@ static_int_c_code(NewOffset, Src, Base, Offset, Size, Flags,
int_c_code(NewOffset, Src, Base, Offset, SizeReg, Flags,
TrueLblName, FalseLblName) ->
- put_c_code(bs_put_big_integer, NewOffset, Src, Base, Offset, SizeReg,
+ put_c_code(bs_put_big_integer, NewOffset, Src, Base, Offset, SizeReg,
Flags, TrueLblName, FalseLblName).
binary_c_code(NewOffset, Src, Base, Offset, Size, TrueLblName) ->
@@ -500,8 +497,8 @@ binary_c_code(NewOffset, Src, Base, Offset, Size, TrueLblName) ->
[SizeReg, FlagsReg] = create_regs(2),
[hipe_rtl:mk_move(FlagsReg, hipe_rtl:mk_imm(0)),
hipe_rtl:mk_move(SizeReg, Size),
- hipe_rtl:mk_call([], bs_put_bits, [Src, SizeReg, Base, Offset, FlagsReg],
- hipe_rtl:label_name(PassedLbl),[],not_remote),
+ hipe_rtl:mk_call([], bs_put_bits, [Src, SizeReg, Base, Offset, FlagsReg],
+ hipe_rtl:label_name(PassedLbl), [], not_remote),
PassedLbl,
hipe_rtl:mk_alu(NewOffset, Offset, add, SizeReg),
hipe_rtl:mk_goto(TrueLblName)].
@@ -511,7 +508,7 @@ put_c_code(Func, NewOffset, Src, Base, Offset, SizeReg, Flags,
PassedLbl = hipe_rtl:mk_new_label(),
[FlagsReg] = create_regs(1),
[hipe_rtl:mk_move(FlagsReg, hipe_rtl:mk_imm(Flags)),
- gen_test_sideffect_bs_call(Func, [Src, SizeReg, Base, Offset, FlagsReg],
+ gen_test_sideffect_bs_call(Func, [Src, SizeReg, Base, Offset, FlagsReg],
hipe_rtl:label_name(PassedLbl), FalseLblName),
PassedLbl,
hipe_rtl:mk_alu(NewOffset, Offset, add, SizeReg),
@@ -523,7 +520,7 @@ gen_test_sideffect_bs_call(Name, Args, TrueLblName, FalseLblName) ->
[hipe_rtl:mk_call([Tmp1], Name, Args,
hipe_rtl:label_name(RetLbl), [], not_remote),
RetLbl,
- hipe_rtl:mk_branch(Tmp1, eq, hipe_rtl:mk_imm(0),
+ hipe_rtl:mk_branch(Tmp1, eq, hipe_rtl:mk_imm(0),
FalseLblName, TrueLblName, 0.01)].
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -544,7 +541,7 @@ create_unsafe_regs(0) ->
create_vars(X) when X > 0 ->
[hipe_rtl:mk_new_var()|create_vars(X-1)];
-create_vars(0) ->
+create_vars(0) ->
[].
create_lbls(X) when X > 0 ->
@@ -582,7 +579,7 @@ get_real(Dst) ->
%% The following functions are called from the translation switch:
%%
%% - put_string/7 creates code to copy a string to a binary
-%% starting at base+offset and ending at base+newoffset
+%% starting at base+offset and ending at base+newoffset
%%
%% - const_init2/6 initializes the creation of a binary of constant size
%%
@@ -609,10 +606,9 @@ put_string(NewOffset, ConstTab, String, SizeInBytes, Base, Offset, TLName) ->
[StringBase] = create_regs(1),
{NewTab, Lbl} = hipe_consttab:insert_block(ConstTab, byte, String),
{[hipe_rtl:mk_load_address(StringBase, Lbl, constant)|
- copy_string(StringBase, SizeInBytes, Base, Offset,
- NewOffset, TLName)],
+ copy_string(StringBase, SizeInBytes, Base, Offset, NewOffset, TLName)],
NewTab}.
-
+
const_init2(Size, Dst, Base, Offset, TrueLblName) ->
Log2WordSize = hipe_rtl_arch:log2_word_size(),
WordSize = hipe_rtl_arch:word_size(),
@@ -642,27 +638,29 @@ const_init_bits(Size, Dst, Base, Offset, TrueLblName) ->
TmpDst = hipe_rtl:mk_new_var(),
Zero = hipe_rtl:mk_imm(0),
{ExtraSpace, SubBinCode} =
- if (Size rem ?BYTE_SIZE) =:= 0 ->
- {0,[hipe_rtl:mk_move(Dst, TmpDst)]};
- true ->
+ case (Size rem ?BYTE_SIZE) =:= 0 of
+ true ->
+ {0, [hipe_rtl:mk_move(Dst, TmpDst)]};
+ false ->
{?SUB_BIN_WORDSIZE,
- hipe_tagscheme:mk_sub_binary(Dst, hipe_rtl:mk_imm(Size bsr 3), Zero,
+ hipe_tagscheme:mk_sub_binary(Dst, hipe_rtl:mk_imm(Size bsr 3), Zero,
hipe_rtl:mk_imm(Size band ?LOW_BITS_INT),
Zero, TmpDst)}
end,
BaseBinCode =
- if Size =< (?MAX_HEAP_BIN_SIZE * 8) ->
- ByteSize = (Size + 7) div 8,
- [hipe_rtl:mk_gctest(((ByteSize+ 3*WordSize-1) bsr Log2WordSize)+ ExtraSpace),
+ case Size =< (?MAX_HEAP_BIN_SIZE * 8) of
+ true ->
+ ByteSize = (Size + 7) div 8,
+ [hipe_rtl:mk_gctest(((ByteSize + 3*WordSize-1) bsr Log2WordSize) + ExtraSpace),
hipe_tagscheme:create_heap_binary(Base, ByteSize, TmpDst),
hipe_rtl:mk_move(Offset, Zero)];
- true ->
+ false ->
ByteSize = hipe_rtl:mk_new_reg(),
[hipe_rtl:mk_gctest(?PROC_BIN_WORDSIZE+ExtraSpace),
hipe_rtl:mk_move(Offset, Zero),
hipe_rtl:mk_move(ByteSize, hipe_rtl:mk_imm((Size+7) bsr 3)),
hipe_rtl:mk_call([Base], bs_allocate, [ByteSize],
- hipe_rtl:label_name(NextLbl),[],not_remote),
+ hipe_rtl:label_name(NextLbl), [], not_remote),
NextLbl,
hipe_tagscheme:create_refc_binary(Base, ByteSize, TmpDst)]
end,
@@ -671,12 +669,12 @@ const_init_bits(Size, Dst, Base, Offset, TrueLblName) ->
var_init2(Size, Dst, Base, Offset, TrueLblName, SystemLimitLblName, FalseLblName) ->
Log2WordSize = hipe_rtl_arch:log2_word_size(),
WordSize = hipe_rtl_arch:word_size(),
- [ContLbl,HeapLbl,REFCLbl,NextLbl] = create_lbls(4),
- [USize,Tmp] = create_unsafe_regs(2),
+ [ContLbl, HeapLbl, REFCLbl, NextLbl] = create_lbls(4),
+ [USize, Tmp] = create_unsafe_regs(2),
[get_word_integer(Size, USize, SystemLimitLblName, FalseLblName),
hipe_rtl:mk_branch(USize, leu, hipe_rtl:mk_imm(?MAX_BINSIZE),
- hipe_rtl:label_name(ContLbl),
- SystemLimitLblName),
+ hipe_rtl:label_name(ContLbl),
+ SystemLimitLblName),
ContLbl,
hipe_rtl:mk_move(Offset, hipe_rtl:mk_imm(0)),
hipe_rtl:mk_branch(USize, leu, hipe_rtl:mk_imm(?MAX_HEAP_BIN_SIZE),
@@ -698,20 +696,20 @@ var_init2(Size, Dst, Base, Offset, TrueLblName, SystemLimitLblName, FalseLblName
hipe_rtl:mk_goto(TrueLblName)].
var_init_bits(Size, Dst, Base, Offset, TrueLblName, SystemLimitLblName, FalseLblName) ->
- [HeapLbl,REFCLbl,NextLbl,NoSubLbl,SubLbl,
+ [HeapLbl, REFCLbl, NextLbl, NoSubLbl, SubLbl,
NoCreateSubBin, CreateSubBin, JoinLbl, JoinLbl2] = create_lbls(9),
- [USize,ByteSize,TotByteSize,OffsetBits] = create_regs(4),
+ [USize, ByteSize, TotByteSize, OffsetBits] = create_regs(4),
[TmpDst] = create_unsafe_regs(1),
Log2WordSize = hipe_rtl_arch:log2_word_size(),
WordSize = hipe_rtl_arch:word_size(),
- MaximumWords =
+ MaximumWords =
erlang:max((?MAX_HEAP_BIN_SIZE + 3*WordSize) bsr Log2WordSize,
?PROC_BIN_WORDSIZE) + ?SUB_BIN_WORDSIZE,
Zero = hipe_rtl:mk_imm(0),
[hipe_rtl:mk_gctest(MaximumWords),
get_word_integer(Size, USize, SystemLimitLblName, FalseLblName),
hipe_rtl:mk_alu(ByteSize, USize, srl, ?BYTE_SHIFT),
- hipe_rtl:mk_alub(OffsetBits, USize, 'and', ?LOW_BITS, eq,
+ hipe_rtl:mk_alub(OffsetBits, USize, 'and', ?LOW_BITS, eq,
hipe_rtl:label_name(NoSubLbl),
hipe_rtl:label_name(SubLbl)),
NoSubLbl,
@@ -721,20 +719,20 @@ var_init_bits(Size, Dst, Base, Offset, TrueLblName, SystemLimitLblName, FalseLbl
hipe_rtl:mk_alu(TotByteSize, ByteSize, 'add', hipe_rtl:mk_imm(1)),
JoinLbl,
hipe_rtl:mk_branch(TotByteSize, 'leu', hipe_rtl:mk_imm(?MAX_HEAP_BIN_SIZE),
- hipe_rtl:label_name(HeapLbl),
+ hipe_rtl:label_name(HeapLbl),
hipe_rtl:label_name(REFCLbl)),
HeapLbl,
hipe_tagscheme:create_heap_binary(Base, TotByteSize, TmpDst),
hipe_rtl:mk_goto(hipe_rtl:label_name(JoinLbl2)),
REFCLbl,
hipe_rtl:mk_call([Base], bs_allocate, [TotByteSize],
- hipe_rtl:label_name(NextLbl),[],not_remote),
+ hipe_rtl:label_name(NextLbl), [], not_remote),
NextLbl,
hipe_tagscheme:create_refc_binary(Base, TotByteSize, TmpDst),
JoinLbl2,
hipe_rtl:mk_move(Offset, Zero),
hipe_rtl:mk_branch(OffsetBits, 'eq', Zero,
- hipe_rtl:label_name(NoCreateSubBin),
+ hipe_rtl:label_name(NoCreateSubBin),
hipe_rtl:label_name(CreateSubBin)),
CreateSubBin,
hipe_tagscheme:mk_sub_binary(Dst, ByteSize, Zero, OffsetBits, Zero, TmpDst),
@@ -744,10 +742,10 @@ var_init_bits(Size, Dst, Base, Offset, TrueLblName, SystemLimitLblName, FalseLbl
hipe_rtl:mk_goto(TrueLblName)].
put_binary_all(NewOffset, Src, Base, Offset, Unit, TLName, FLName) ->
- [SrcBase,SrcOffset,NumBits] = create_regs(3),
+ [SrcBase, SrcOffset, NumBits] = create_regs(3),
[ContLbl] = create_lbls(1),
CCode = binary_c_code(NewOffset, Src, Base, Offset, NumBits, TLName),
- AlignedCode = copy_aligned_bytes(SrcBase, SrcOffset, NumBits, Base, Offset,
+ AlignedCode = copy_aligned_bytes(SrcBase, SrcOffset, NumBits, Base, Offset,
NewOffset, TLName),
[get_base_offset_size(Src, SrcBase, SrcOffset, NumBits,FLName),
is_divisible(NumBits, Unit, hipe_rtl:label_name(ContLbl), FLName),
@@ -755,11 +753,11 @@ put_binary_all(NewOffset, Src, Base, Offset, Unit, TLName, FLName) ->
|test_alignment(SrcOffset, NumBits, Offset, AlignedCode, CCode)].
test_alignment(SrcOffset, NumBits, Offset, AlignedCode, CCode) ->
- [Tmp] = create_regs(1),
- [AlignedLbl,CLbl] = create_lbls(2),
+ [Tmp] = create_regs(1),
+ [AlignedLbl, CLbl] = create_lbls(2),
[hipe_rtl:mk_alu(Tmp, SrcOffset, 'or', NumBits),
hipe_rtl:mk_alu(Tmp, Tmp, 'or', Offset),
- hipe_rtl:mk_alub(Tmp, Tmp, 'and', ?LOW_BITS, 'eq',
+ hipe_rtl:mk_alub(Tmp, Tmp, 'and', ?LOW_BITS, 'eq',
hipe_rtl:label_name(AlignedLbl),
hipe_rtl:label_name(CLbl)),
AlignedLbl,
@@ -768,12 +766,12 @@ test_alignment(SrcOffset, NumBits, Offset, AlignedCode, CCode) ->
CCode].
put_static_binary(NewOffset, Src, Size, Base, Offset, TLName, FLName) ->
- [SrcBase] = create_unsafe_regs(1),
+ [SrcBase] = create_unsafe_regs(1),
[SrcOffset, SrcSize] = create_regs(2),
case Size of
0 ->
get_base_offset_size(Src, SrcBase, SrcOffset, SrcSize, FLName) ++
- [hipe_rtl:mk_move(NewOffset, Offset),
+ [hipe_rtl:mk_move(NewOffset, Offset),
hipe_rtl:mk_goto(TLName)];
_ ->
SizeImm = hipe_rtl:mk_imm(Size),
@@ -789,13 +787,13 @@ put_dynamic_binary(NewOffset, Src, SizeReg, Base, Offset, TLName, FLName) ->
[SrcBase] = create_unsafe_regs(1),
[SrcOffset, SrcSize] = create_regs(2),
CCode = binary_c_code(NewOffset, Src, Base, Offset, SizeReg, TLName),
- AlignedCode = copy_aligned_bytes(SrcBase, SrcOffset, SizeReg, Base, Offset,
+ AlignedCode = copy_aligned_bytes(SrcBase, SrcOffset, SizeReg, Base, Offset,
NewOffset, TLName),
get_base_offset_size(Src, SrcBase, SrcOffset, SrcSize, FLName) ++
small_check(SizeReg, SrcSize, FLName) ++
test_alignment(SrcOffset, SizeReg, Offset, AlignedCode, CCode).
-put_float(NewOffset, Src, Base, Offset, 64, CCode, Aligned, LittleEndian,
+put_float(NewOffset, Src, Base, Offset, 64, CCode, Aligned, LittleEndian,
ConstInfo, TrueLblName) ->
[CLbl] = create_lbls(1),
case {Aligned, LittleEndian} of
@@ -829,12 +827,12 @@ put_static_int(NewOffset, Src, Base, Offset, Size, CCode, Aligned,
{false, true} ->
CCode;
{false, false} ->
- Init ++
+ Init ++
copy_offset_int_big(Base, Offset, NewOffset, Size, UntaggedSrc) ++
End
end.
-put_unsafe_static_int(NewOffset, Src, Base, Offset, Size, CCode, Aligned,
+put_unsafe_static_int(NewOffset, Src, Base, Offset, Size, CCode, Aligned,
LittleEndian, TrueLblName) ->
{Init, End, UntaggedSrc} = make_init_end(Src, TrueLblName),
case {Aligned, LittleEndian} of
@@ -849,7 +847,7 @@ put_unsafe_static_int(NewOffset, Src, Base, Offset, Size, CCode, Aligned,
{false, true} ->
CCode;
{false, false} ->
- Init ++
+ Init ++
copy_offset_int_big(Base, Offset, NewOffset, Size, UntaggedSrc) ++
End
end.
@@ -861,7 +859,7 @@ put_dynamic_int(NewOffset, Src, Base, Offset, SizeReg, CCode, Aligned,
true ->
case LittleEndian of
true ->
- Init ++
+ Init ++
copy_int_little(Base, Offset, NewOffset, SizeReg, UntaggedSrc) ++
End;
false ->
@@ -880,7 +878,7 @@ put_unsafe_dynamic_int(NewOffset, Src, Base, Offset, SizeReg, CCode, Aligned,
true ->
case LittleEndian of
true ->
- Init ++
+ Init ++
copy_int_little(Base, Offset, NewOffset, SizeReg, UntaggedSrc) ++
End;
false ->
@@ -891,7 +889,7 @@ put_unsafe_dynamic_int(NewOffset, Src, Base, Offset, SizeReg, CCode, Aligned,
false ->
CCode
end.
-
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
@@ -902,7 +900,7 @@ put_unsafe_dynamic_int(NewOffset, Src, Base, Offset, SizeReg, CCode, Aligned,
make_init_end(Src, CCode, TrueLblName) ->
[CLbl, SuccessLbl] = create_lbls(2),
[UntaggedSrc] = create_regs(1),
- Init = [hipe_tagscheme:test_fixnum(Src, hipe_rtl:label_name(SuccessLbl),
+ Init = [hipe_tagscheme:test_fixnum(Src, hipe_rtl:label_name(SuccessLbl),
hipe_rtl:label_name(CLbl), 0.99),
SuccessLbl,
hipe_tagscheme:untag_fixnum(UntaggedSrc,Src)],
@@ -915,28 +913,28 @@ make_init_end(Src, TrueLblName) ->
End = [hipe_rtl:mk_goto(TrueLblName)],
{Init, End, UntaggedSrc}.
-get_base_offset_size(Binary, SrcBase, SrcOffset, SrcSize, FLName) ->
+get_base_offset_size(Binary, SrcBase, SrcOffset, SrcSize, FLName) ->
[JoinLbl, EndLbl, SuccessLbl, SubLbl, OtherLbl, HeapLbl, REFCLbl] =
Lbls = create_lbls(7),
- [JoinLblName, EndLblName, SuccessLblName, SubLblName,
+ [JoinLblName, EndLblName, SuccessLblName, SubLblName,
OtherLblName, HeapLblName, REFCLblName] = get_label_names(Lbls),
- [BitSize,BitOffset] = create_regs(2),
+ [BitSize, BitOffset] = create_regs(2),
[Orig] = create_vars(1),
[hipe_tagscheme:test_bitstr(Binary, SuccessLblName, FLName, 0.99),
SuccessLbl,
- get_field_from_term({sub_binary,binsize}, Binary, SrcSize),
+ hipe_tagscheme:get_field_from_term({sub_binary,binsize}, Binary, SrcSize),
hipe_rtl:mk_alu(SrcSize, SrcSize, sll, ?BYTE_SHIFT),
hipe_tagscheme:test_subbinary(Binary, SubLblName, OtherLblName),
SubLbl,
- get_field_from_term({sub_binary,bitsize}, Binary, BitSize),
- get_field_from_term({sub_binary,offset}, Binary, SrcOffset),
+ hipe_tagscheme:get_field_from_term({sub_binary,bitsize}, Binary, BitSize),
+ hipe_tagscheme:get_field_from_term({sub_binary,offset}, Binary, SrcOffset),
hipe_rtl:mk_alu(SrcSize, SrcSize, add, BitSize),
- get_field_from_term({sub_binary,bitoffset}, Binary, BitOffset),
+ hipe_tagscheme:get_field_from_term({sub_binary,bitoffset}, Binary, BitOffset),
hipe_rtl:mk_alu(SrcOffset, SrcOffset, sll, ?BYTE_SHIFT),
hipe_rtl:mk_alu(SrcOffset, SrcOffset, add, BitOffset),
- get_field_from_term({sub_binary,orig}, Binary, Orig),
+ hipe_tagscheme:get_field_from_term({sub_binary,orig}, Binary, Orig),
hipe_rtl:mk_goto(JoinLblName),
- OtherLbl,
+ OtherLbl,
hipe_rtl:mk_move(SrcOffset, hipe_rtl:mk_imm(0)),
hipe_rtl:mk_move(Orig, Binary),
JoinLbl,
@@ -945,29 +943,29 @@ get_base_offset_size(Binary, SrcBase, SrcOffset, SrcSize, FLName) ->
hipe_rtl:mk_alu(SrcBase, Orig, add, hipe_rtl:mk_imm(?HEAP_BIN_DATA-2)),
hipe_rtl:mk_goto(EndLblName),
REFCLbl,
- get_field_from_term({proc_bin,bytes}, Orig, SrcBase),
+ hipe_tagscheme:get_field_from_term({proc_bin,bytes}, Orig, SrcBase),
EndLbl].
copy_aligned_bytes(CopyBase, CopyOffset, Size, Base, Offset, NewOffset, TrueLblName) ->
[BaseDst, BaseSrc] = create_unsafe_regs(2),
[Iter, Extra, BothOffset] = create_regs(3),
initializations(BaseSrc, BaseDst, BothOffset, CopyOffset, Offset, CopyBase, Base) ++
- [hipe_rtl:mk_alu(Extra, Size, 'and', ?LOW_BITS),
- hipe_rtl:mk_alu(Iter, Size, srl, ?BYTE_SHIFT),
+ [hipe_rtl:mk_alu(Extra, Size, 'and', ?LOW_BITS),
+ hipe_rtl:mk_alu(Iter, Size, srl, ?BYTE_SHIFT),
hipe_rtl:mk_alu(NewOffset, Offset, 'add', Size)] ++
easy_loop(BaseSrc, BaseDst, BothOffset, Iter, Extra, TrueLblName).
copy_string(StringBase, StringSize, BinBase, BinOffset, NewOffset, TrueLblName) ->
[TmpOffset,BothOffset,InitOffs] = create_regs(3),
[NewBinBase] = create_unsafe_regs(1),
- [EasyLbl,HardLbl] = create_lbls(2),
+ [EasyLbl, HardLbl] = create_lbls(2),
[hipe_rtl:mk_alu(TmpOffset, BinOffset, srl, ?BYTE_SHIFT),
hipe_rtl:mk_alu(NewBinBase, BinBase, add, TmpOffset),
hipe_rtl:mk_move(BothOffset, hipe_rtl:mk_imm(0)),
hipe_rtl:mk_alub(InitOffs, BinOffset, 'and', ?LOW_BITS, eq,
hipe_rtl:label_name(EasyLbl), hipe_rtl:label_name(HardLbl)),
EasyLbl,
- hipe_rtl:mk_alu(NewOffset, BinOffset, add,
+ hipe_rtl:mk_alu(NewOffset, BinOffset, add,
hipe_rtl:mk_imm(?bytes_to_bits(StringSize)))] ++
easy_loop(StringBase, NewBinBase, BothOffset,
hipe_rtl:mk_imm(StringSize), hipe_rtl:mk_imm(0), TrueLblName) ++
@@ -983,9 +981,9 @@ small_check(SizeVar, CopySize, FalseLblName) ->
hipe_rtl:label_name(SuccessLbl), FalseLblName),
SuccessLbl].
-easy_loop(BaseSrc, BaseDst, BothOffset, Iterations, Extra, TrueLblName) ->
- [Tmp1,Shift] = create_regs(2),
- [LoopLbl,TopLbl,EndLbl,ExtraLbl] = create_lbls(4),
+easy_loop(BaseSrc, BaseDst, BothOffset, Iterations, Extra, TrueLblName) ->
+ [Tmp1, Shift] = create_regs(2),
+ [LoopLbl, TopLbl, EndLbl, ExtraLbl] = create_lbls(4),
[TopLbl,
hipe_rtl:mk_branch(BothOffset, ne, Iterations, hipe_rtl:label_name(LoopLbl),
hipe_rtl:label_name(EndLbl), 0.99),
@@ -1005,17 +1003,17 @@ easy_loop(BaseSrc, BaseDst, BothOffset, Iterations, Extra, TrueLblName) ->
hipe_rtl:mk_store(BaseDst, BothOffset, Tmp1, byte),
hipe_rtl:mk_goto(TrueLblName)].
-hard_loop(BaseSrc, BaseDst, BothOffset, Iterations,
+hard_loop(BaseSrc, BaseDst, BothOffset, Iterations,
InitOffset, TrueLblName) ->
[Tmp1, Tmp2, OldByte, NewByte, SaveByte] = create_regs(5),
- [LoopLbl,EndLbl,TopLbl] = create_lbls(3),
+ [LoopLbl, EndLbl, TopLbl] = create_lbls(3),
[hipe_rtl:mk_load(OldByte, BaseDst, BothOffset, byte, unsigned),
- hipe_rtl:mk_alu(Tmp1, hipe_rtl:mk_imm(?BYTE_SIZE), sub, InitOffset),
+ hipe_rtl:mk_alu(Tmp1, hipe_rtl:mk_imm(?BYTE_SIZE), sub, InitOffset),
TopLbl,
- hipe_rtl:mk_branch(BothOffset, ne, Iterations,
- hipe_rtl:label_name(LoopLbl),
+ hipe_rtl:mk_branch(BothOffset, ne, Iterations,
+ hipe_rtl:label_name(LoopLbl),
hipe_rtl:label_name(EndLbl)),
- LoopLbl,
+ LoopLbl,
hipe_rtl:mk_load(NewByte, BaseSrc, BothOffset, byte, unsigned),
hipe_rtl:mk_alu(Tmp2, NewByte, srl, InitOffset),
hipe_rtl:mk_alu(SaveByte, OldByte, 'or', Tmp2),
@@ -1037,12 +1035,12 @@ initializations(BaseTmp1, BaseTmp2, BothOffset, CopyOffset, Offset, CopyBase, Ba
copy_int_little(Base, Offset, NewOffset, Size, Tmp1) when is_integer(Size) ->
[Tmp2,TmpOffset] = create_regs(2),
- ByteSize = Size div ?BYTE_SIZE,
- [hipe_rtl:mk_alu(TmpOffset, Offset, srl, ?BYTE_SHIFT),
- hipe_rtl:mk_alu(Tmp2, hipe_rtl:mk_imm(ByteSize), 'add', TmpOffset)] ++
-
+ ByteSize = Size div ?BYTE_SIZE,
+ [hipe_rtl:mk_alu(TmpOffset, Offset, srl, ?BYTE_SHIFT),
+ hipe_rtl:mk_alu(Tmp2, hipe_rtl:mk_imm(ByteSize), 'add', TmpOffset)] ++
+
little_loop(Tmp1, Tmp2, TmpOffset, Base) ++
-
+
case Size band 7 of
0 ->
[hipe_rtl:mk_alu(NewOffset, Offset, 'add', hipe_rtl:mk_imm(Size))];
@@ -1051,18 +1049,16 @@ copy_int_little(Base, Offset, NewOffset, Size, Tmp1) when is_integer(Size) ->
hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
hipe_rtl:mk_alu(NewOffset, Offset, 'add', hipe_rtl:mk_imm(Size))]
end;
-
copy_int_little(Base, Offset, NewOffset, Size, Tmp1) ->
[Tmp2, Tmp3, Tmp4, TmpOffset] = create_regs(4),
-
[hipe_rtl:mk_alu(Tmp2, Size, srl, ?BYTE_SHIFT),
hipe_rtl:mk_alu(TmpOffset, Offset, srl, ?BYTE_SHIFT),
hipe_rtl:mk_alu(Tmp3, Tmp2, 'add', TmpOffset)] ++
-
+
little_loop(Tmp1, Tmp3, TmpOffset, Base) ++
-
+
[hipe_rtl:mk_alu(Tmp4, Size, 'and', ?LOW_BITS),
- hipe_rtl:mk_alu(Tmp4, hipe_rtl:mk_imm(?BYTE_SIZE), 'sub', Tmp4),
+ hipe_rtl:mk_alu(Tmp4, hipe_rtl:mk_imm(?BYTE_SIZE), 'sub', Tmp4),
hipe_rtl:mk_alu(Tmp1, Tmp1, sll, Tmp4),
hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
hipe_rtl:mk_alu(NewOffset, Offset, 'add', Size)].
@@ -1097,37 +1093,37 @@ copy_int_big(_Base, Offset, NewOffset, 0, _Tmp1) ->
[hipe_rtl:mk_move(NewOffset, Offset)];
copy_int_big(Base, Offset, NewOffset, ?BYTE_SIZE, Tmp1) ->
TmpOffset = hipe_rtl:mk_new_reg(),
- [hipe_rtl:mk_alu(TmpOffset, Offset, 'srl', hipe_rtl:mk_imm(3)),
- hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
- hipe_rtl:mk_alu(NewOffset, Offset, 'add', hipe_rtl:mk_imm(8))];
+ [hipe_rtl:mk_alu(TmpOffset, Offset, 'srl', hipe_rtl:mk_imm(3)),
+ hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
+ hipe_rtl:mk_alu(NewOffset, Offset, 'add', hipe_rtl:mk_imm(8))];
copy_int_big(Base, Offset, NewOffset, 2*?BYTE_SIZE, Tmp1) ->
TmpOffset = hipe_rtl:mk_new_reg(),
- [hipe_rtl:mk_alu(TmpOffset, Offset, 'srl', hipe_rtl:mk_imm(3)),
- hipe_rtl:mk_alu(TmpOffset, TmpOffset, 'add', hipe_rtl:mk_imm(1)),
- hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
- hipe_rtl:mk_alu(TmpOffset, TmpOffset, sub, hipe_rtl:mk_imm(1)),
- hipe_rtl:mk_alu(Tmp1, Tmp1, 'sra', hipe_rtl:mk_imm(8)),
- hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
- hipe_rtl:mk_alu(NewOffset, Offset, 'add', hipe_rtl:mk_imm(16))];
+ [hipe_rtl:mk_alu(TmpOffset, Offset, 'srl', hipe_rtl:mk_imm(3)),
+ hipe_rtl:mk_alu(TmpOffset, TmpOffset, 'add', hipe_rtl:mk_imm(1)),
+ hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
+ hipe_rtl:mk_alu(TmpOffset, TmpOffset, sub, hipe_rtl:mk_imm(1)),
+ hipe_rtl:mk_alu(Tmp1, Tmp1, 'sra', hipe_rtl:mk_imm(8)),
+ hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
+ hipe_rtl:mk_alu(NewOffset, Offset, 'add', hipe_rtl:mk_imm(16))];
copy_int_big(Base, Offset, NewOffset, 3*?BYTE_SIZE, Tmp1) ->
- TmpOffset = hipe_rtl:mk_new_reg(),
- [hipe_rtl:mk_alu(TmpOffset, Offset, srl, hipe_rtl:mk_imm(3)),
- hipe_rtl:mk_alu(TmpOffset, TmpOffset, add, hipe_rtl:mk_imm(2)),
- hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
- hipe_rtl:mk_alu(TmpOffset, TmpOffset, sub, hipe_rtl:mk_imm(1)),
- hipe_rtl:mk_alu(Tmp1, Tmp1, sra, hipe_rtl:mk_imm(8)),
- hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
- hipe_rtl:mk_alu(TmpOffset, TmpOffset, sub, hipe_rtl:mk_imm(1)),
- hipe_rtl:mk_alu(Tmp1, Tmp1, sra, hipe_rtl:mk_imm(8)),
- hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
- hipe_rtl:mk_alu(NewOffset, Offset, add, hipe_rtl:mk_imm(24))];
+ TmpOffset = hipe_rtl:mk_new_reg(),
+ [hipe_rtl:mk_alu(TmpOffset, Offset, srl, hipe_rtl:mk_imm(3)),
+ hipe_rtl:mk_alu(TmpOffset, TmpOffset, add, hipe_rtl:mk_imm(2)),
+ hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
+ hipe_rtl:mk_alu(TmpOffset, TmpOffset, sub, hipe_rtl:mk_imm(1)),
+ hipe_rtl:mk_alu(Tmp1, Tmp1, sra, hipe_rtl:mk_imm(8)),
+ hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
+ hipe_rtl:mk_alu(TmpOffset, TmpOffset, sub, hipe_rtl:mk_imm(1)),
+ hipe_rtl:mk_alu(Tmp1, Tmp1, sra, hipe_rtl:mk_imm(8)),
+ hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
+ hipe_rtl:mk_alu(NewOffset, Offset, add, hipe_rtl:mk_imm(24))];
copy_int_big(Base, Offset,NewOffset, 4*?BYTE_SIZE, Tmp1) ->
copy_big_word(Base, Offset, NewOffset, Tmp1);
copy_int_big(Base, Offset, NewOffset, Size, Tmp1) when is_integer(Size) ->
[OldOffset, TmpOffset, Bits] = create_regs(3),
ByteSize = (Size + 7) div ?BYTE_SIZE,
- case Size band 7 of
- 0 ->
+ case Size band 7 of
+ 0 ->
[hipe_rtl:mk_alu(OldOffset, Offset, sra, hipe_rtl:mk_imm(3)),
hipe_rtl:mk_alu(TmpOffset, OldOffset, add, hipe_rtl:mk_imm(ByteSize))];
Rest ->
@@ -1138,7 +1134,7 @@ copy_int_big(Base, Offset, NewOffset, Size, Tmp1) when is_integer(Size) ->
hipe_rtl:mk_alu(Tmp1, Tmp1, sra, hipe_rtl:mk_imm(Rest))]
end ++
big_loop(Tmp1, OldOffset, TmpOffset, Base) ++
- [hipe_rtl:mk_alu(NewOffset, Offset, 'add', hipe_rtl:mk_imm(Size))];
+ [hipe_rtl:mk_alu(NewOffset, Offset, 'add', hipe_rtl:mk_imm(Size))];
copy_int_big(Base, Offset, NewOffset, Size, Tmp1) ->
Tmp2 = hipe_rtl:mk_new_reg(),
Tmp3 = hipe_rtl:mk_new_reg(),
@@ -1151,7 +1147,7 @@ copy_int_big(Base, Offset, NewOffset, Size, Tmp1) ->
[hipe_rtl:mk_alu(Tmp2, Size, 'srl', hipe_rtl:mk_imm(3)),
hipe_rtl:mk_alu(Tmp3, Offset, 'srl', hipe_rtl:mk_imm(3)),
hipe_rtl:mk_alu(TmpOffset, Tmp2, 'add', Tmp3),
- hipe_rtl:mk_alub(Tmp4, Size, 'and', hipe_rtl:mk_imm(7), 'eq',
+ hipe_rtl:mk_alub(Tmp4, Size, 'and', hipe_rtl:mk_imm(7), 'eq',
hipe_rtl:label_name(EvenLbl), hipe_rtl:label_name(OddLbl)),
OddLbl,
hipe_rtl:mk_alu(Tmp6, hipe_rtl:mk_imm(8), 'sub', Tmp4),
@@ -1159,9 +1155,7 @@ copy_int_big(Base, Offset, NewOffset, Size, Tmp1) ->
hipe_rtl:mk_store(Base, TmpOffset, Tmp5, byte),
EvenLbl,
hipe_rtl:mk_alu(Tmp1, Tmp1, srl, Tmp4)] ++
-
big_loop(Tmp1, Tmp3, TmpOffset, Base) ++
-
[hipe_rtl:mk_alu(NewOffset, Offset, 'add', Size)].
copy_big_word(Base, Offset, NewOffset, Word) ->
@@ -1224,8 +1218,8 @@ copy_offset_int_big(Base, Offset, NewOffset, Size, Tmp1)
hipe_rtl:mk_alu(Tmp6, Tmp6, 'and', ?LOW_BITS),
hipe_rtl:mk_alu(Tmp4, hipe_rtl:mk_imm(?BYTE_SIZE), 'sub', Tmp6),
hipe_rtl:mk_move(Tmp5, Tmp1),
- hipe_rtl:mk_alu(Tmp1, Tmp1, 'sll', Tmp6),
- hipe_rtl:mk_branch(TmpOffset, 'ne', Tmp3, hipe_rtl:label_name(NextLbl),
+ hipe_rtl:mk_alu(Tmp1, Tmp1, 'sll', Tmp6),
+ hipe_rtl:mk_branch(TmpOffset, 'ne', Tmp3, hipe_rtl:label_name(NextLbl),
hipe_rtl:label_name(EndLbl)),
NextLbl,
hipe_rtl:mk_store(Base, TmpOffset, Tmp1, byte),
@@ -1272,7 +1266,7 @@ copy_float_big(_Base, _Offset, _NewOffset, _Src, FalseLblName, _TrueLblName, fai
copy_float_big(Base, Offset, NewOffset, Src, _FalseLblName, TrueLblName,pass) ->
FloatLo = hipe_rtl:mk_new_reg(),
FloatHi = hipe_rtl:mk_new_reg(),
- TmpOffset =hipe_rtl:mk_new_reg(),
+ TmpOffset = hipe_rtl:mk_new_reg(),
hipe_tagscheme:unsafe_load_float(FloatLo, FloatHi, Src) ++
copy_big_word(Base, Offset, TmpOffset, FloatHi) ++
copy_big_word(Base, TmpOffset, NewOffset, FloatLo) ++
@@ -1285,7 +1279,7 @@ copy_float_big(Base, Offset, NewOffset, Src, FalseLblName, TrueLblName, var) ->
is_divisible(_Dividend, 1, SuccLbl, _FailLbl) ->
[hipe_rtl:mk_goto(SuccLbl)];
is_divisible(Dividend, Divisor, SuccLbl, FailLbl) ->
- Log2 = floorlog2(Divisor),
+ Log2 = hipe_rtl_binary:floorlog2(Divisor),
case Divisor =:= 1 bsl Log2 of
true -> %% Divisor is a power of 2
%% Test that the Log2-1 lowest bits are clear
diff --git a/lib/hipe/rtl/hipe_rtl_lcm.erl b/lib/hipe/rtl/hipe_rtl_lcm.erl
index ef866d0843..71bd06c0df 100644
--- a/lib/hipe/rtl/hipe_rtl_lcm.erl
+++ b/lib/hipe/rtl/hipe_rtl_lcm.erl
@@ -63,10 +63,10 @@ rtl_lcm(CFG, Options) ->
pp_debug("-------------------------------------------------~n",[]),
%% pp_debug( "~w~n", [MFA]),
-
+
%% A check if we should pretty print the result.
case proplists:get_bool(pp_rtl_lcm, Options) of
- true->
+ true ->
pp_debug("-------------------------------------------------~n",[]),
%% pp_debug("AllExpr: ~w~n", [AllExpr]),
pp_debug("AllExpr:~n", []),
@@ -76,21 +76,21 @@ rtl_lcm(CFG, Options) ->
_ ->
ok
end,
-
+
pp_debug("-------------------------------------------------~n",[]),
- ?option_time({CFG1, MoveSet} = perform_lcm(CFG, NodeInfo, EdgeInfo, ExprMap,
- IdMap, AllExpr, mk_edge_bb_map(),
+ {CFG1, MoveSet} = ?option_time(perform_lcm(CFG, NodeInfo, EdgeInfo, ExprMap,
+ IdMap, AllExpr, mk_edge_bb_map(),
?SETS:new(), Labels),
- "RTL LCM perform_lcm", Options),
+ "RTL LCM perform_lcm", Options),
%% Scan through list of moved expressions and replace their
%% assignments with the new temporary created for that expression
MoveList = ?SETS:to_list(MoveSet),
- ?option_time(CFG2 = moved_expr_replace_assignments(CFG1, ExprMap, IdMap,
+ CFG2 = ?option_time(moved_expr_replace_assignments(CFG1, ExprMap, IdMap,
MoveList),
- "RTL LCM moved_expr_replace_assignments", Options),
+ "RTL LCM moved_expr_replace_assignments", Options),
pp_debug("-------------------------------------------------~n~n",[]),
-
+
CFG2.
%%=============================================================================
@@ -466,10 +466,10 @@ expr_clear_dst(I) ->
%% easy access later.
lcm_precalc(CFG, Options) ->
%% Calculate use map and expression map.
- ?option_time({ExprMap, IdMap} = mk_expr_map(CFG),
- "RTL LCM mk_expr_map", Options),
- ?option_time(UseMap = mk_use_map(CFG, ExprMap),
- "RTL LCM mk_use_map", Options),
+ {ExprMap, IdMap} = ?option_time(mk_expr_map(CFG),
+ "RTL LCM mk_expr_map", Options),
+ UseMap = ?option_time(mk_use_map(CFG, ExprMap),
+ "RTL LCM mk_use_map", Options),
%% Labels = hipe_rtl_cfg:reverse_postorder(CFG),
Labels = hipe_rtl_cfg:labels(CFG),
%% StartLabel = hipe_rtl_cfg:start_label(CFG),
@@ -477,28 +477,28 @@ lcm_precalc(CFG, Options) ->
AllExpr = ?SETS:from_list(gb_trees:keys(IdMap)),
%% Calculate the data sets.
- ?option_time(NodeInfo0 = mk_node_info(Labels), "RTL LCM mk_node_info",
- Options),
+ NodeInfo0 = ?option_time(mk_node_info(Labels),
+ "RTL LCM mk_node_info", Options),
%% ?option_time(EdgeInfo0 = mk_edge_info(), "RTL LCM mk_edge_info",
%% Options),
EdgeInfo0 = mk_edge_info(),
- ?option_time(NodeInfo1 = calc_up_exp(CFG, ExprMap, NodeInfo0, Labels),
- "RTL LCM calc_up_exp", Options),
- ?option_time(NodeInfo2 = calc_down_exp(CFG, ExprMap, NodeInfo1, Labels),
- "RTL LCM calc_down_exp", Options),
- ?option_time(NodeInfo3 = calc_killed_expr(CFG, NodeInfo2, UseMap, AllExpr,
+ NodeInfo1 = ?option_time(calc_up_exp(CFG, ExprMap, NodeInfo0, Labels),
+ "RTL LCM calc_up_exp", Options),
+ NodeInfo2 = ?option_time(calc_down_exp(CFG, ExprMap, NodeInfo1, Labels),
+ "RTL LCM calc_down_exp", Options),
+ NodeInfo3 = ?option_time(calc_killed_expr(CFG, NodeInfo2, UseMap, AllExpr,
IdMap, Labels),
- "RTL LCM calc_killed_exp", Options),
- ?option_time(NodeInfo4 = calc_avail(CFG, NodeInfo3),
- "RTL LCM calc_avail", Options),
- ?option_time(NodeInfo5 = calc_antic(CFG, NodeInfo4, AllExpr),
- "RTL LCM calc_antic", Options),
- ?option_time(EdgeInfo1 = calc_earliest(CFG, NodeInfo5, EdgeInfo0, Labels),
- "RTL LCM calc_earliest", Options),
- ?option_time({NodeInfo6, EdgeInfo2} = calc_later(CFG, NodeInfo5, EdgeInfo1),
- "RTL LCM calc_later", Options),
- ?option_time(NodeInfo7 = calc_delete(CFG, NodeInfo6, Labels),
- "RTL LCM calc_delete", Options),
+ "RTL LCM calc_killed_exp", Options),
+ NodeInfo4 = ?option_time(calc_avail(CFG, NodeInfo3),
+ "RTL LCM calc_avail", Options),
+ NodeInfo5 = ?option_time(calc_antic(CFG, NodeInfo4, AllExpr),
+ "RTL LCM calc_antic", Options),
+ EdgeInfo1 = ?option_time(calc_earliest(CFG, NodeInfo5, EdgeInfo0, Labels),
+ "RTL LCM calc_earliest", Options),
+ {NodeInfo6, EdgeInfo2} = ?option_time(calc_later(CFG, NodeInfo5, EdgeInfo1),
+ "RTL LCM calc_later", Options),
+ NodeInfo7 = ?option_time(calc_delete(CFG, NodeInfo6, Labels),
+ "RTL LCM calc_delete", Options),
{NodeInfo7, EdgeInfo2, AllExpr, ExprMap, IdMap, Labels}.
%%%%%%%%%%%%%%%%%%% AVAILABLE IN/OUT FLOW ANALYSIS %%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -941,15 +941,16 @@ calc_insert_edge(NodeInfo, EdgeInfo, From, To) ->
calc_delete(_, NodeInfo, []) ->
NodeInfo;
calc_delete(CFG, NodeInfo, [Label|Labels]) ->
- case Label =:= hipe_rtl_cfg:start_label(CFG) of
- true ->
- NewNodeInfo = set_delete(NodeInfo, Label, ?SETS:new());
- false ->
- UpExp = up_exp(NodeInfo, Label),
- LaterIn = later_in(NodeInfo, Label),
- Delete = ?SETS:subtract(UpExp, LaterIn),
- NewNodeInfo = set_delete(NodeInfo, Label, Delete)
- end,
+ NewNodeInfo =
+ case Label =:= hipe_rtl_cfg:start_label(CFG) of
+ true ->
+ set_delete(NodeInfo, Label, ?SETS:new());
+ false ->
+ UpExp = up_exp(NodeInfo, Label),
+ LaterIn = later_in(NodeInfo, Label),
+ Delete = ?SETS:subtract(UpExp, LaterIn),
+ set_delete(NodeInfo, Label, Delete)
+ end,
calc_delete(CFG, NewNodeInfo, Labels).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/lib/hipe/rtl/hipe_rtl_ssapre.erl b/lib/hipe/rtl/hipe_rtl_ssapre.erl
index e248457806..df1a4b9376 100644
--- a/lib/hipe/rtl/hipe_rtl_ssapre.erl
+++ b/lib/hipe/rtl/hipe_rtl_ssapre.erl
@@ -107,7 +107,7 @@ rtl_ssapre(RtlSSACfg, Options) ->
case XsiList of
[] ->
%% No Xsi
- ?option_time(?pp_debug("~n~n################ No Xsi Inserted ################~n",[]),"RTL A-SSAPRE No Xsi inserted (skip Downsafety and Will Be Available)",Options),
+ ?pp_debug("~n~n################ No Xsi Inserted ################~n",[]),
ok;
_ ->
?pp_debug("~n############ Downsafety ##########~n",[]),
@@ -126,7 +126,7 @@ rtl_ssapre(RtlSSACfg, Options) ->
?pp_debug("~n~n################ Xsi CFG ################~n",[]),pp_cfg(CFG2,XsiGraph),
init_redundancy_count(),
- ?option_time(FinalCFG=perform_code_motion(Labels,CFG2,XsiGraph),"RTL A-SSAPRE Code Motion",Options),
+ FinalCFG = ?option_time(perform_code_motion(Labels,CFG2,XsiGraph),"RTL A-SSAPRE Code Motion",Options),
?pp_debug("\n############ No more need for the Xsi Graph....Deleting...",[]),?GRAPH:delete(XsiGraph),
@@ -146,7 +146,7 @@ perform_Xsi_insertion(Cfg, Options) ->
init_counters(), %% Init counters for Bottoms and Temps
DigraphOpts = [cyclic, private],
XsiGraph = digraph:new(DigraphOpts),
- %% Be carefull, the digraph component is NOT garbage collected,
+ %% Be careful, the digraph component is NOT garbage collected,
%% so don't create 20 millions of instances!
%% finds the longest depth
%% Depth-first, preorder traversal over Basic Blocks.
@@ -154,13 +154,13 @@ perform_Xsi_insertion(Cfg, Options) ->
Labels = ?CFG:preorder(Cfg),
?pp_debug("~n~n############# Finding definitions for computation~n~n",[]),
- ?option_time({Cfg2,XsiGraph} = find_definition_for_computations(Labels,Cfg,XsiGraph),"RTL A-SSAPRE Xsi Insertion, searching from instructions",Options),
+ {Cfg2,XsiGraph} = ?option_time(find_definition_for_computations(Labels,Cfg,XsiGraph),"RTL A-SSAPRE Xsi Insertion, searching from instructions",Options),
%% Active List creation
GeneratorXsiList = lists:sort(?GRAPH:vertices(XsiGraph)),
?pp_debug("~n~n############# Inserted Xsis ~w",[GeneratorXsiList]),
?pp_debug("~n~n############# Finding operands~n",[]),
- ?option_time({Cfg3,XsiGraph} = find_operands(Cfg2,XsiGraph,GeneratorXsiList,0),"RTL A-SSAPRE Xsi Insertion, finding operands",Options),
+ {Cfg3,XsiGraph} = ?option_time(find_operands(Cfg2,XsiGraph,GeneratorXsiList,0),"RTL A-SSAPRE Xsi Insertion, finding operands",Options),
%% Creating the CFGGraph
?pp_debug("~n~n############# Creating CFG Graph",[]),
@@ -170,9 +170,9 @@ perform_Xsi_insertion(Cfg, Options) ->
?pp_debug("~nAdding a vertex for the start label: ~w",[StartLabel]),
?GRAPH:add_vertex(CFGGraph, StartLabel, #block{type = top}),
% Doing the others
- ?option_time(MPs=create_cfggraph(Others,Cfg3,CFGGraph,[],[],[],XsiGraph),"RTL A-SSAPRE Xsi Insertion, creating intermediate 'SSAPRE Graph'",Options),
+ MPs = ?option_time(create_cfggraph(Others,Cfg3,CFGGraph,[],[],[],XsiGraph),"RTL A-SSAPRE Xsi Insertion, creating intermediate 'SSAPRE Graph'",Options),
- %% Return the bloody collected information
+ %% Return the collected information
{Cfg3,XsiGraph,CFGGraph,MPs}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -221,22 +221,21 @@ find_definition_for_computations_in_block(BlockLabel,[Inst|Rest],Cfg,
?pp_debug(" Inserting Xsi: ",[]),pp_xsi(Xsi),
Label = Xsi#xsi.label,
- case BlockLabel =:= Label of
- false ->
- %% Insert the Xsi in the appropriate block
- Code = hipe_bb:code(?CFG:bb(Cfg,Label)),
- {BeforeCode,AfterCode} = split_for_xsi(lists:reverse(Code),[]),
- NewCode = BeforeCode++[XsiLink|AfterCode],
- NewBB = hipe_bb:mk_bb(NewCode),
- NewCfg = ?CFG:bb_add(Cfg,Label,NewBB),
- NewVisited = [NewInst|VisitedInstructions];
- _->
- {BeforeCode,AfterCode} = split_for_xsi(VisitedInstructions,[]),
- TempVisited = BeforeCode++[XsiLink|AfterCode],
- TempVisited2 = lists:reverse(TempVisited),
- NewVisited = [NewInst|TempVisited2],
- NewCfg = Cfg
- end,
+ {NewCfg, NewVisited} =
+ case BlockLabel =:= Label of
+ false ->
+ %% Insert the Xsi in the appropriate block
+ Code = hipe_bb:code(?CFG:bb(Cfg,Label)),
+ {BeforeCode,AfterCode} = split_for_xsi(lists:reverse(Code),[]),
+ NewCode = BeforeCode++[XsiLink|AfterCode],
+ NewBB = hipe_bb:mk_bb(NewCode),
+ {?CFG:bb_add(Cfg,Label,NewBB), [NewInst|VisitedInstructions]};
+ _->
+ {BeforeCode,AfterCode} = split_for_xsi(VisitedInstructions,[]),
+ TempVisited = BeforeCode++[XsiLink|AfterCode],
+ TempVisited2 = lists:reverse(TempVisited),
+ {Cfg, [NewInst|TempVisited2]}
+ end,
find_definition_for_computations_in_block(BlockLabel, Rest, NewCfg,
NewVisited, XsiGraph)
end;
@@ -787,14 +786,15 @@ create_cfggraph([Label|Ls],Cfg,CFGGraph,ToBeFactorizedAcc,MPAcc,LateEdges,XsiGra
Defs = get_defs_in_non_merge_block(Code, []),
?pp_debug("~nAdding a vertex for ~w", [Label]),
Succs = ?CFG:succ(Cfg, Label),
- case Succs of
- [] -> %% Exit point
- ?GRAPH:add_vertex(CFGGraph, Label, #block{type = exit}),
- NewToBeFactorizedAcc = ToBeFactorizedAcc;
- _ -> %% Split point
- ?GRAPH:add_vertex(CFGGraph,Label,#block{type=not_mp,attributes={P,Succs}}),
- NewToBeFactorizedAcc = [Label|ToBeFactorizedAcc]
- end,
+ NewToBeFactorizedAcc =
+ case Succs of
+ [] -> %% Exit point
+ ?GRAPH:add_vertex(CFGGraph, Label, #block{type = exit}),
+ ToBeFactorizedAcc;
+ _ -> %% Split point
+ ?GRAPH:add_vertex(CFGGraph,Label,#block{type=not_mp,attributes={P,Succs}}),
+ [Label|ToBeFactorizedAcc]
+ end,
?pp_debug("~nAdding an edge ~w -> ~w (~w)",[P,Label,Defs]),
case ?GRAPH:add_edge(CFGGraph,P,Label,Defs) of
{error,Reason} ->
@@ -862,56 +862,53 @@ add_edges_for_mp([P|Ps], Label, LateEdges) ->
%% Doesn't do anything so far
add_map_and_uses([], _Key, Maps, Uses) ->
- {Maps,Uses};
+ {Maps, Uses};
add_map_and_uses([XsiOp|Ops], Key, Maps, Uses) ->
- case XsiOp#xsi_op.op of
- #bottom{} ->
- Set = case gb_trees:lookup(XsiOp,Maps) of
- {value, V} ->
- ?SETS:add_element(Key,V);
- none ->
- ?SETS:from_list([Key])
- end,
- NewMaps = gb_trees:enter(XsiOp,Set,Maps),
- NewUses = Uses;
- #temp{} ->
- Set = case gb_trees:lookup(XsiOp,Maps) of
- {value, V} ->
- ?SETS:add_element(Key,V);
- none ->
- ?SETS:from_list([Key])
- end,
- NewMaps = gb_trees:enter(XsiOp,Set,Maps),
- Pred = XsiOp#xsi_op.pred,
- OOP = XsiOp#xsi_op.op,
- SSet = case gb_trees:lookup(Pred,Uses) of
- {value, VV} ->
- ?SETS:add_element(OOP#temp.key,VV);
- none ->
- ?SETS:from_list([OOP#temp.key])
- end,
- NewUses = gb_trees:enter(Pred,SSet,Uses);
- #eop{} ->
- Set = case gb_trees:lookup(XsiOp,Maps) of
- {value, V} ->
- ?SETS:add_element(Key,V);
- none ->
- ?SETS:from_list([Key])
- end,
- NewMaps = gb_trees:enter(XsiOp,Set,Maps),
- Pred = XsiOp#xsi_op.pred,
- Op = XsiOp#xsi_op.op,
- SSet = case gb_trees:lookup(Pred,Uses) of
- {value, VV} ->
- ?SETS:add_element(Op#eop.stopped_by,VV);
- none ->
- ?SETS:from_list([Op#eop.stopped_by])
- end,
- NewUses = gb_trees:enter(Pred,SSet,Uses);
- _->
- NewMaps = Maps,
- NewUses = Uses
- end,
+ {NewMaps, NewUses} =
+ case XsiOp#xsi_op.op of
+ #bottom{} ->
+ Set = case gb_trees:lookup(XsiOp, Maps) of
+ {value, V} ->
+ ?SETS:add_element(Key, V);
+ none ->
+ ?SETS:from_list([Key])
+ end,
+ {gb_trees:enter(XsiOp, Set, Maps), Uses};
+ #temp{} ->
+ Set = case gb_trees:lookup(XsiOp, Maps) of
+ {value, V} ->
+ ?SETS:add_element(Key, V);
+ none ->
+ ?SETS:from_list([Key])
+ end,
+ Pred = XsiOp#xsi_op.pred,
+ OOP = XsiOp#xsi_op.op,
+ SSet = case gb_trees:lookup(Pred, Uses) of
+ {value, VV} ->
+ ?SETS:add_element(OOP#temp.key, VV);
+ none ->
+ ?SETS:from_list([OOP#temp.key])
+ end,
+ {gb_trees:enter(XsiOp, Set, Maps), gb_trees:enter(Pred, SSet, Uses)};
+ #eop{} ->
+ Set = case gb_trees:lookup(XsiOp, Maps) of
+ {value, V} ->
+ ?SETS:add_element(Key, V);
+ none ->
+ ?SETS:from_list([Key])
+ end,
+ Pred = XsiOp#xsi_op.pred,
+ Op = XsiOp#xsi_op.op,
+ SSet = case gb_trees:lookup(Pred, Uses) of
+ {value, VV} ->
+ ?SETS:add_element(Op#eop.stopped_by, VV);
+ none ->
+ ?SETS:from_list([Op#eop.stopped_by])
+ end,
+ {gb_trees:enter(XsiOp, Set, Maps), gb_trees:enter(Pred, SSet, Uses)};
+ _->
+ {Maps, Uses}
+ end,
add_map_and_uses(Ops, Key, NewMaps, NewUses).
post_process([], _CFGGraph) -> ok;
@@ -1162,37 +1159,38 @@ code_motion_in_block(L,[Inst|Insts],Cfg,XsiG,Visited,InsertionsAcc) ->
#pre_candidate{} ->
Def = Inst#pre_candidate.def,
Alu = Inst#pre_candidate.alu,
- case Def of
- bottom ->
- InstToAdd = Alu;
- #temp{} ->
- Key = Def#temp.key,
- {_V,Xsi} = ?GRAPH:vertex(XsiG,Key),
- case Xsi#xsi.wba of
- true ->
- %% Turn into a move
- Dst = ?RTL:alu_dst(Alu),
- Move = ?RTL:mk_move(Dst,Def#temp.var),
- pp_instr(Inst#pre_candidate.alu,nil), ?pp_debug(" ==> ",[]), pp_instr(Move,nil),
- %% Counting redundancies
- redundancy_add(),
- InstToAdd = Move;
- _ ->
- InstToAdd = Alu
- end;
- _ -> %% Def is a real variable
- %% Turn into a move
- Dst = ?RTL:alu_dst(Alu),
- Move = ?RTL:mk_move(Dst,Def),
- pp_instr(Alu,nil), ?pp_debug(" ==> ",[]), pp_instr(Move,nil),
- %% Counting redundancies
- redundancy_add(),
- InstToAdd = Move
- end,
+ InstToAdd =
+ case Def of
+ bottom ->
+ Alu;
+ #temp{} ->
+ Key = Def#temp.key,
+ {_V,Xsi} = ?GRAPH:vertex(XsiG,Key),
+ case Xsi#xsi.wba of
+ true ->
+ %% Turn into a move
+ Dst = ?RTL:alu_dst(Alu),
+ Move = ?RTL:mk_move(Dst,Def#temp.var),
+ pp_instr(Inst#pre_candidate.alu,nil), ?pp_debug(" ==> ",[]), pp_instr(Move,nil),
+ %% Counting redundancies
+ redundancy_add(),
+ Move;
+ _ ->
+ Alu
+ end;
+ _ -> %% Def is a real variable
+ %% Turn into a move
+ Dst = ?RTL:alu_dst(Alu),
+ Move = ?RTL:mk_move(Dst,Def),
+ pp_instr(Alu,nil), ?pp_debug(" ==> ",[]), pp_instr(Move,nil),
+ %% Counting redundancies
+ redundancy_add(),
+ Move
+ end,
code_motion_in_block(L,Insts,Cfg,XsiG,[InstToAdd|Visited],InsertionsAcc);
#xsi_link{} ->
Key = Inst#xsi_link.num,
- {_V,Xsi} = ?GRAPH:vertex(XsiG,Key),
+ {_V,Xsi} = ?GRAPH:vertex(XsiG,Key),
case Xsi#xsi.wba of
true ->
%% Xsi is a WBA, it might trigger insertions
@@ -1235,139 +1233,133 @@ get_insertions([],OpAcc,InsertionsAcc,_Visited,_Expr,_XsiG) ->
get_insertions([XsiOp|Ops],OpAcc,InsertionsAcc,Visited,Expr,XsiG) ->
Pred = XsiOp#xsi_op.pred,
Op = XsiOp#xsi_op.op,
- case Op of
- #bottom{} ->
- case gb_trees:lookup(Pred,InsertionsAcc) of
- {value,Insertion} ->
- From = Insertion#insertion.from,
- case lists:keyfind(Op, 1, From) of
- false ->
- ?pp_debug("~nThere has been insertions along the edge L~w already, but not for that operand | Op=",[Pred]),pp_arg(Op),
- Dst = Op#bottom.var,
- Expr2 = ?RTL:alu_dst_update(Expr,Dst),
- Inst = manufacture_computation(Pred,Expr2,Visited),
- Code = Insertion#insertion.code,
- NewInsertion = Insertion#insertion{from=[{Op,Dst}|From],code=[Inst|Code]},
- NewInsertionsAcc = gb_trees:update(Pred,NewInsertion,InsertionsAcc);
- {_, Val} ->
- ?pp_debug("~nThere has been insertions along the edge L~w already, and for that operand too | Op=",[Pred]),pp_arg(Op),
- Dst = Val,
- NewInsertionsAcc = InsertionsAcc
- end;
- none ->
- ?pp_debug("~nThere has been no insertion along the edge L~w, (and not for that operand, of course)| Op=",[Pred]),pp_arg(Op),
- Dst = Op#bottom.var,
- Expr2 = ?RTL:alu_dst_update(Expr,Dst),
- Inst = manufacture_computation(Pred,Expr2,Visited),
- NewInsertion = #insertion{from=[{Op,Dst}],code=[Inst]},
- NewInsertionsAcc = gb_trees:insert(Pred,NewInsertion,InsertionsAcc)
- end;
- #const_expr{} ->
- case gb_trees:lookup(Pred,InsertionsAcc) of
- {value,Insertion} ->
- From = Insertion#insertion.from,
- case lists:keyfind(Op, 1, From) of
- false ->
- ?pp_debug("~nThere have been insertions along the edge L~w already, but not for that operand | Op=",[Pred]),pp_arg(Op),
- Dst = Op#const_expr.var,
- Val = Op#const_expr.value,
- Inst = ?RTL:mk_move(Dst,Val),
- Code = Insertion#insertion.code,
- NewInsertion = Insertion#insertion{from=[{Op,Dst}|From],code=[Inst|Code]},
- NewInsertionsAcc = gb_trees:update(Pred,NewInsertion,InsertionsAcc);
- {_, Val} ->
- ?pp_debug("~nThere have been insertions along the edge L~w already, and for that operand too | Op=",[Pred]),pp_arg(Op),
- Dst = Val,
- NewInsertionsAcc = InsertionsAcc
- end;
- none ->
- ?pp_debug("~nThere has been no insertion along the edge L~w, (and not for that operand, of course)| Op=",[Pred]),pp_arg(Op),
- Dst = Op#const_expr.var,
- Val = Op#const_expr.value,
- Inst = ?RTL:mk_move(Dst,Val),
- NewInsertion = #insertion{from=[{Op,Dst}],code=[Inst]},
- NewInsertionsAcc = gb_trees:insert(Pred,NewInsertion,InsertionsAcc)
- end;
- #eop{} ->
- %% We treat expressions like bottoms
- %% The value must be recomputed, and therefore not available...
- case gb_trees:lookup(Pred,InsertionsAcc) of
- {value,Insertion} ->
- From = Insertion#insertion.from,
- case lists:keyfind(Op, 1, From) of
- false ->
- ?pp_debug("~nThere has been insertions along the edge L~w already, but not for that operand | Op=",[Pred]),pp_arg(Op),
- Dst = Op#eop.var,
- Expr2 = ?RTL:alu_dst_update(Expr,Dst),
- Inst = manufacture_computation(Pred,Expr2,Visited),
- Code = Insertion#insertion.code,
- NewInsertion = Insertion#insertion{from=[{Op,Dst}|From],code=[Inst|Code]},
- NewInsertionsAcc = gb_trees:update(Pred,NewInsertion,InsertionsAcc);
- {_, Val} ->
- ?pp_debug("~nThere has been insertions along the edge L~w already, and for that operand too | Op=",[Pred]),pp_arg(Op),
- Dst = Val,
- NewInsertionsAcc = InsertionsAcc
- end;
- none ->
- ?pp_debug("~nThere has been no insertion along the edge L~w, (and not for that operand, of course)| Op=",[Pred]),pp_arg(Op),
- Dst = Op#eop.var,
- Expr2 = ?RTL:alu_dst_update(Expr,Dst),
- Inst = manufacture_computation(Pred,Expr2,Visited),
- NewInsertion = #insertion{from=[{Op,Dst}],code=[Inst]},
- NewInsertionsAcc = gb_trees:insert(Pred,NewInsertion,InsertionsAcc)
- end;
- #temp{} ->
- case gb_trees:lookup(Pred,InsertionsAcc) of
- {value,Insertion} ->
- From = Insertion#insertion.from,
- case lists:keyfind(Op, 1, From) of
- false ->
- ?pp_debug("~nThere has been insertions along the edge L~w already, but not for that operand | Op=",[Pred]),pp_arg(Op),
- Key = Op#temp.key,
- {_V,Xsi} = ?GRAPH:vertex(XsiG,Key),
- case Xsi#xsi.wba of
- true ->
- ?pp_debug("~nBut the operand is a WBA Xsi: no need for insertion",[]),
- Dst = Op#temp.var,
- NewInsertionsAcc = InsertionsAcc;
- _ ->
- ?pp_debug("~nBut the operand is a NOT WBA Xsi: we must make an insertion",[]),
- Dst = ?RTL:mk_new_var(),
- Expr2 = ?RTL:alu_dst_update(Expr,Dst),
- Inst = manufacture_computation(Pred,Expr2,Visited),
- Code = Insertion#insertion.code,
- NewInsertion = Insertion#insertion{from=[{Op,Dst}|From],code=[Inst|Code]},
- NewInsertionsAcc = gb_trees:update(Pred,NewInsertion,InsertionsAcc)
- end;
- {_, Val} ->
- ?pp_debug("~nThere has been insertions along the edge L~w already, and for that operand too (Op=~w)",[Pred,Op]),
- ?pp_debug("~nThis means, this temp is a WBA Xsi's definition",[]),
- Dst = Val,
- NewInsertionsAcc = InsertionsAcc
- end;
- none ->
- ?pp_debug("~nThere has been no insertion along the edge L~w, (and not for that operand, of course | Op=",[Pred]),pp_arg(Op),
- Key = Op#temp.key,
- {_V,Xsi} = ?GRAPH:vertex(XsiG,Key),
- case Xsi#xsi.wba of
- true ->
- ?pp_debug("~nBut the operand is a WBA Xsi: no need for insertion",[]),
- Dst = Op#temp.var,
- NewInsertionsAcc = InsertionsAcc;
- _ ->
- ?pp_debug("~nBut the operand is a NOT WBA Xsi: we must make an insertion",[]),
- Dst = ?RTL:mk_new_var(),
- Expr2 = ?RTL:alu_dst_update(Expr,Dst),
- Inst = manufacture_computation(Pred,Expr2,Visited),
- NewInsertion = #insertion{from=[{Op,Dst}],code=[Inst]},
- NewInsertionsAcc = gb_trees:insert(Pred,NewInsertion,InsertionsAcc)
- end
- end;
- _ ->
- ?pp_debug("~nThe operand (Op=",[]),pp_arg(Op),?pp_debug(") is a real variable, no need for insertion along L~w",[Pred]),
- Dst = Op,
- NewInsertionsAcc = InsertionsAcc
- end,
+ {Dst, NewInsertionsAcc} =
+ case Op of
+ #bottom{} ->
+ case gb_trees:lookup(Pred,InsertionsAcc) of
+ {value,Insertion} ->
+ From = Insertion#insertion.from,
+ case lists:keyfind(Op, 1, From) of
+ false ->
+ ?pp_debug("~nThere has been insertions along the edge L~w already, but not for that operand | Op=",[Pred]),pp_arg(Op),
+ D = Op#bottom.var,
+ Expr2 = ?RTL:alu_dst_update(Expr,D),
+ Inst = manufacture_computation(Pred,Expr2,Visited),
+ Code = Insertion#insertion.code,
+ NewInsertion = Insertion#insertion{from=[{Op,D}|From],code=[Inst|Code]},
+ {D, gb_trees:update(Pred, NewInsertion, InsertionsAcc)};
+ {_, Val} ->
+ ?pp_debug("~nThere has been insertions along the edge L~w already, and for that operand too | Op=",[Pred]),pp_arg(Op),
+ {Val, InsertionsAcc}
+ end;
+ none ->
+ ?pp_debug("~nThere has been no insertion along the edge L~w, (and not for that operand, of course)| Op=",[Pred]),pp_arg(Op),
+ D = Op#bottom.var,
+ Expr2 = ?RTL:alu_dst_update(Expr, D),
+ Inst = manufacture_computation(Pred,Expr2,Visited),
+ NewInsertion = #insertion{from=[{Op,D}],code=[Inst]},
+ {D, gb_trees:insert(Pred,NewInsertion, InsertionsAcc)}
+ end;
+ #const_expr{} ->
+ case gb_trees:lookup(Pred,InsertionsAcc) of
+ {value,Insertion} ->
+ From = Insertion#insertion.from,
+ case lists:keyfind(Op, 1, From) of
+ false ->
+ ?pp_debug("~nThere have been insertions along the edge L~w already, but not for that operand | Op=",[Pred]),pp_arg(Op),
+ D = Op#const_expr.var,
+ Val = Op#const_expr.value,
+ Inst = ?RTL:mk_move(D, Val),
+ Code = Insertion#insertion.code,
+ NewInsertion = Insertion#insertion{from=[{Op,D}|From],code=[Inst|Code]},
+ {D, gb_trees:update(Pred,NewInsertion,InsertionsAcc)};
+ {_, Val} ->
+ ?pp_debug("~nThere have been insertions along the edge L~w already, and for that operand too | Op=",[Pred]),pp_arg(Op),
+ {Val, InsertionsAcc}
+ end;
+ none ->
+ ?pp_debug("~nThere has been no insertion along the edge L~w, (and not for that operand, of course)| Op=",[Pred]),pp_arg(Op),
+ D = Op#const_expr.var,
+ Val = Op#const_expr.value,
+ Inst = ?RTL:mk_move(D, Val),
+ NewInsertion = #insertion{from=[{Op,D}],code=[Inst]},
+ {D, gb_trees:insert(Pred,NewInsertion, InsertionsAcc)}
+ end;
+ #eop{} ->
+ %% We treat expressions like bottoms
+ %% The value must be recomputed, and therefore not available...
+ case gb_trees:lookup(Pred,InsertionsAcc) of
+ {value,Insertion} ->
+ From = Insertion#insertion.from,
+ case lists:keyfind(Op, 1, From) of
+ false ->
+ ?pp_debug("~nThere has been insertions along the edge L~w already, but not for that operand | Op=",[Pred]),pp_arg(Op),
+ D = Op#eop.var,
+ Expr2 = ?RTL:alu_dst_update(Expr, D),
+ Inst = manufacture_computation(Pred,Expr2,Visited),
+ Code = Insertion#insertion.code,
+ NewInsertion = Insertion#insertion{from=[{Op,D}|From],code=[Inst|Code]},
+ {D, gb_trees:update(Pred,NewInsertion, InsertionsAcc)};
+ {_, Val} ->
+ ?pp_debug("~nThere has been insertions along the edge L~w already, and for that operand too | Op=",[Pred]),pp_arg(Op),
+ {Val, InsertionsAcc}
+ end;
+ none ->
+ ?pp_debug("~nThere has been no insertion along the edge L~w, (and not for that operand, of course)| Op=",[Pred]),pp_arg(Op),
+ D = Op#eop.var,
+ Expr2 = ?RTL:alu_dst_update(Expr, D),
+ Inst = manufacture_computation(Pred,Expr2,Visited),
+ NewInsertion = #insertion{from=[{Op,D}],code=[Inst]},
+ {D, gb_trees:insert(Pred, NewInsertion, InsertionsAcc)}
+ end;
+ #temp{} ->
+ case gb_trees:lookup(Pred,InsertionsAcc) of
+ {value,Insertion} ->
+ From = Insertion#insertion.from,
+ case lists:keyfind(Op, 1, From) of
+ false ->
+ ?pp_debug("~nThere has been insertions along the edge L~w already, but not for that operand | Op=",[Pred]),pp_arg(Op),
+ Key = Op#temp.key,
+ {_V,Xsi} = ?GRAPH:vertex(XsiG,Key),
+ case Xsi#xsi.wba of
+ true ->
+ ?pp_debug("~nBut the operand is a WBA Xsi: no need for insertion",[]),
+ {Op#temp.var, InsertionsAcc};
+ _ ->
+ ?pp_debug("~nBut the operand is a NOT WBA Xsi: we must make an insertion",[]),
+ D = ?RTL:mk_new_var(),
+ Expr2 = ?RTL:alu_dst_update(Expr, D),
+ Inst = manufacture_computation(Pred,Expr2,Visited),
+ Code = Insertion#insertion.code,
+ NewInsertion = Insertion#insertion{from=[{Op,D}|From],code=[Inst|Code]},
+ {D, gb_trees:update(Pred, NewInsertion, InsertionsAcc)}
+ end;
+ {_, Val} ->
+ ?pp_debug("~nThere has been insertions along the edge L~w already, and for that operand too (Op=~w)",[Pred,Op]),
+ ?pp_debug("~nThis means, this temp is a WBA Xsi's definition",[]),
+ {Val, InsertionsAcc}
+ end;
+ none ->
+ ?pp_debug("~nThere has been no insertion along the edge L~w, (and not for that operand, of course | Op=",[Pred]),pp_arg(Op),
+ Key = Op#temp.key,
+ {_V,Xsi} = ?GRAPH:vertex(XsiG,Key),
+ case Xsi#xsi.wba of
+ true ->
+ ?pp_debug("~nBut the operand is a WBA Xsi: no need for insertion",[]),
+ {Op#temp.var, InsertionsAcc};
+ _ ->
+ ?pp_debug("~nBut the operand is a NOT WBA Xsi: we must make an insertion",[]),
+ D = ?RTL:mk_new_var(),
+ Expr2 = ?RTL:alu_dst_update(Expr, D),
+ Inst = manufacture_computation(Pred,Expr2,Visited),
+ NewInsertion = #insertion{from=[{Op,D}],code=[Inst]},
+ {D, gb_trees:insert(Pred, NewInsertion, InsertionsAcc)}
+ end
+ end;
+ _ ->
+ ?pp_debug("~nThe operand (Op=",[]),pp_arg(Op),?pp_debug(") is a real variable, no need for insertion along L~w",[Pred]),
+ {Op, InsertionsAcc}
+ end,
NewXsiOp = XsiOp#xsi_op{op=Dst},
get_insertions(Ops, [NewXsiOp|OpAcc], NewInsertionsAcc, Visited, Expr, XsiG).
diff --git a/lib/hipe/sparc/Makefile b/lib/hipe/sparc/Makefile
index 9fea887ebd..0e36a43d8e 100644
--- a/lib/hipe/sparc/Makefile
+++ b/lib/hipe/sparc/Makefile
@@ -76,7 +76,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/sparc/hipe_rtl_to_sparc.erl b/lib/hipe/sparc/hipe_rtl_to_sparc.erl
index eef5ba8d96..f9c043eafe 100644
--- a/lib/hipe/sparc/hipe_rtl_to_sparc.erl
+++ b/lib/hipe/sparc/hipe_rtl_to_sparc.erl
@@ -750,13 +750,25 @@ xaluop_commutes(XAluOp) ->
xaluop_is_shift(XAluOp) ->
case XAluOp of
+ 'add' -> false;
+ 'addcc' -> false;
+ 'and' -> false;
+ 'andcc' -> false;
+ 'cmpcc' -> false;
+ 'ldsb' -> false;
+ 'ldub' -> false;
+ 'lduw' -> false;
+ 'or' -> false;
'sll' -> true;
- 'srl' -> true;
+ %% 'sllx' -> true;
+ 'smul' -> false;
'sra' -> true;
- 'sllx' -> true;
- 'srlx' -> true;
- 'srax' -> true;
- _ -> false
+ %% 'srax' -> true;
+ 'srl' -> true;
+ %% 'srlx' -> true;
+ 'sub' -> false;
+ 'subcc' -> false;
+ 'xor' -> false
end.
%%% Convert an extended SPARC AluOp back to a plain AluOp.
@@ -764,9 +776,23 @@ xaluop_is_shift(XAluOp) ->
xaluop_normalise(XAluOp) ->
case XAluOp of
- 'cmp' -> 'sub';
+ 'add' -> 'add';
+ 'addcc' -> 'addcc';
+ 'and' -> 'and';
+ 'andcc' -> 'andcc';
+ %% 'cmp' -> 'sub';
'cmpcc' -> 'subcc';
- _ -> XAluOp
+ 'ldsb' -> 'ldsb';
+ 'ldub' -> 'ldub';
+ 'lduw' -> 'lduw';
+ 'or' -> 'or';
+ 'sll' -> 'sll';
+ 'smul' -> 'smul';
+ 'sra' -> 'sra';
+ 'srl' -> 'srl';
+ 'sub' -> 'sub';
+ 'subcc' -> 'subcc';
+ 'xor' -> 'xor'
end.
%%% Convert an RTL condition code.
diff --git a/lib/hipe/sparc/hipe_sparc_registers.erl b/lib/hipe/sparc/hipe_sparc_registers.erl
index 884215702b..6681a10070 100644
--- a/lib/hipe/sparc/hipe_sparc_registers.erl
+++ b/lib/hipe/sparc/hipe_sparc_registers.erl
@@ -86,6 +86,8 @@
-define(I7, 31).
-define(LAST_PRECOLOURED,31). % must handle both GRP and FPR ranges
+-define(RA, ?O7).
+
-define(ARG0, ?O1).
-define(ARG1, ?O2).
-define(ARG2, ?O3).
@@ -174,7 +176,7 @@ stack_pointer() -> ?STACK_POINTER.
proc_pointer() -> ?PROC_POINTER.
-return_address() -> ?O7.
+return_address() -> ?RA.
g0() -> ?G0.
@@ -283,7 +285,9 @@ call_clobbered() -> % does the RA strip the type or not?
].
tailcall_clobbered() -> % tailcall crapola needs one temp
- [{?TEMP1,tagged},{?TEMP1,untagged}].
+ [{?TEMP1,tagged},{?TEMP1,untagged}
+ ,{?RA,tagged},{?RA,untagged}
+ ].
live_at_return() ->
[{?HEAP_POINTER,untagged},
diff --git a/lib/hipe/test/Makefile b/lib/hipe/test/Makefile
index 09f4fd2129..544888719f 100644
--- a/lib/hipe/test/Makefile
+++ b/lib/hipe/test/Makefile
@@ -6,7 +6,8 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
# ----------------------------------------------------
MODULES= \
- hipe_SUITE
+ hipe_SUITE \
+ opt_verify_SUITE
# .erl files for these modules are automatically generated
GEN_MODULES= \
@@ -79,4 +80,4 @@ release_tests_spec: make_emakefile
@tar cf - *_SUITE_data | (cd "$(RELSYSDIR)"; tar xf -)
cd "$(RELSYSDIR)";\
erlc hipe_testsuite_driver.erl;\
- erl -noshell -run hipe_testsuite_driver create_all_suites -s erlang halt
+ erl -noshell -run hipe_testsuite_driver create_all_suites $(GEN_MODULES) -s erlang halt
diff --git a/lib/hipe/test/hipe_testsuite_driver.erl b/lib/hipe/test/hipe_testsuite_driver.erl
index 64c5c0a7c9..a3048d907e 100644
--- a/lib/hipe/test/hipe_testsuite_driver.erl
+++ b/lib/hipe/test/hipe_testsuite_driver.erl
@@ -1,6 +1,6 @@
-module(hipe_testsuite_driver).
--export([create_all_suites/0, run/3]).
+-export([create_all_suites/1, run/3]).
-include_lib("kernel/include/file.hrl").
@@ -16,25 +16,17 @@
outputfile :: file:io_device(),
testcases :: [testcase()]}).
--spec create_all_suites() -> 'ok'.
+-spec create_all_suites([string()]) -> 'ok'.
-create_all_suites() ->
- {ok, Cwd} = file:get_cwd(),
- Suites = get_suites(Cwd),
+create_all_suites(SuitesWithSuiteSuffix) ->
+ Suites = get_suites(SuitesWithSuiteSuffix),
lists:foreach(fun create_suite/1, Suites).
--spec get_suites(file:filename()) -> [string()].
+-spec get_suites([string()]) -> [string()].
-get_suites(Dir) ->
- case file:list_dir(Dir) of
- {error, _} -> [];
- {ok, Filenames} ->
- FullFilenames = [filename:join(Dir, F) || F <- Filenames],
- Dirs = [suffix(filename:basename(F), ?suite_data) ||
- F <- FullFilenames,
- file_type(F) =:= {ok, 'directory'}],
- [S || {yes, S} <- Dirs]
- end.
+get_suites(SuitesWithSuiteSuffix) ->
+ Prefixes = [suffix(F, ?suite_suffix) || F <- SuitesWithSuiteSuffix],
+ [S || {yes, S} <- Prefixes].
suffix(String, Suffix) ->
case string:rstr(String, Suffix) of
@@ -107,7 +99,7 @@ write_suite(Suite) ->
write_header(#suite{suitename = SuiteName, outputfile = OutputFile,
testcases = TestCases}) ->
Exports = format_export(TestCases),
- TimeLimit = 3, %% with 1 or 2 it fails on some slow machines...
+ TimeLimit = 5, %% with 1 or 2 it fails on some slow machines...
io:format(OutputFile,
"%% ATTENTION!\n"
"%% This is an automatically generated file. Do not edit.\n\n"
diff --git a/lib/hipe/test/opt_verify_SUITE.erl b/lib/hipe/test/opt_verify_SUITE.erl
new file mode 100644
index 0000000000..61952e81d7
--- /dev/null
+++ b/lib/hipe/test/opt_verify_SUITE.erl
@@ -0,0 +1,62 @@
+-module(opt_verify_SUITE).
+
+-compile([export_all]).
+
+all() ->
+ [call_elim].
+
+groups() ->
+ [].
+
+init_per_suite(Config) ->
+ case erlang:system_info(hipe_architecture) of
+ undefined -> {skip, "HiPE not available or enabled"};
+ _ -> Config
+ end.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_group(_GroupName, Config) ->
+ Config.
+
+end_per_group(_GroupName, Config) ->
+ Config.
+
+call_elim_test_file(Config, FileName, Option) ->
+ PrivDir = test_server:lookup_config(priv_dir, Config),
+ TempOut = test_server:temp_name(filename:join(PrivDir, "call_elim_out")),
+ {ok, TestCase} = compile:file(FileName),
+ {ok, TestCase} = hipe:c(TestCase, [Option, {pp_range_icode, {file, TempOut}}]),
+ {ok, Icode} = file:read_file(TempOut),
+ ok = file:delete(TempOut),
+ Icode.
+
+substring_count(Icode, Substring) ->
+ substring_count(Icode, Substring, 0).
+substring_count(Icode, Substring, N) ->
+ case string:str(Icode, Substring) of
+ 0 -> N;
+ I -> substring_count(lists:nthtail(I, Icode), Substring, N+1)
+ end.
+
+call_elim() ->
+ [{doc, "Test that the call elimination optimization pass is ok"}].
+call_elim(Config) ->
+ DataDir = test_server:lookup_config(data_dir, Config),
+ F1 = filename:join(DataDir, "call_elim_test.erl"),
+ Icode1 = call_elim_test_file(Config, F1, icode_call_elim),
+ 0 = substring_count(binary:bin_to_list(Icode1), "is_key"),
+ Icode2 = call_elim_test_file(Config, F1, no_icode_call_elim),
+ true = (0 /= substring_count(binary:bin_to_list(Icode2), "is_key")),
+ F2 = filename:join(DataDir, "call_elim_test_branches_no_opt_poss.erl"),
+ Icode3 = call_elim_test_file(Config, F2, icode_call_elim),
+ 3 = substring_count(binary:bin_to_list(Icode3), "is_key"),
+ Icode4 = call_elim_test_file(Config, F2, no_icode_call_elim),
+ 3 = substring_count(binary:bin_to_list(Icode4), "is_key"),
+ F3 = filename:join(DataDir, "call_elim_test_branches_opt_poss.erl"),
+ Icode5 = call_elim_test_file(Config, F3, icode_call_elim),
+ 0 = substring_count(binary:bin_to_list(Icode5), "is_key"),
+ Icode6 = call_elim_test_file(Config, F3, no_icode_call_elim),
+ 3 = substring_count(binary:bin_to_list(Icode6), "is_key"),
+ ok.
diff --git a/lib/hipe/test/opt_verify_SUITE_data/call_elim_test.erl b/lib/hipe/test/opt_verify_SUITE_data/call_elim_test.erl
new file mode 100644
index 0000000000..8b725f8ffe
--- /dev/null
+++ b/lib/hipe/test/opt_verify_SUITE_data/call_elim_test.erl
@@ -0,0 +1,12 @@
+-module(call_elim_test).
+
+-export([test/0]).
+
+test() ->
+ true = has_1_field(#{1=>true}),
+ true = has_1_field(#{1=>"hej", b=>2}),
+ true = has_1_field(#{b=>3, 1=>4}),
+ ok.
+
+has_1_field(#{1:=_}) -> true;
+has_1_field(#{}) -> false.
diff --git a/lib/hipe/test/opt_verify_SUITE_data/call_elim_test_branches_no_opt_poss.erl b/lib/hipe/test/opt_verify_SUITE_data/call_elim_test_branches_no_opt_poss.erl
new file mode 100644
index 0000000000..7ffae86797
--- /dev/null
+++ b/lib/hipe/test/opt_verify_SUITE_data/call_elim_test_branches_no_opt_poss.erl
@@ -0,0 +1,32 @@
+-module(call_elim_test_branches_no_opt_poss).
+
+-export([test/1]).
+
+test(A) ->
+ if A > 0 ->
+ false = has_a_field(#{b=>true}),
+ true = has_a_field(#{b=>1, a=>"2"}),
+ false = has_a_field(#{b=>5, c=>4}),
+ false = has_tuple_field(#{{ab, 2}=><<"qq">>, 1 =>0}),
+ false = has_tuple_field(#{up =>down, {ab, 2}=>[]}),
+ false = has_tuple_field(#{{ab, 2}=>42});
+ A =< 0 ->
+ true = has_a_field(#{a=>q, 'A' =>nej}),
+ true = has_a_field(#{a=>"hej", false=>true}),
+ true = has_a_field(#{a=>3}),
+ true = has_tuple_field(#{{ab, 1}=>q, 'A' =>nej}),
+ true = has_tuple_field(#{{ab, 1}=>"hej", false=>true}),
+ true = has_tuple_field(#{{ab, 1}=>3})
+ end,
+ true = has_nil_field(#{[] =>3, b=>"seven"}),
+ true = has_nil_field(#{"seventeen"=>17}),
+ ok.
+
+has_tuple_field(#{{ab, 1}:=_}) -> true;
+has_tuple_field(#{}) -> false.
+
+has_a_field(#{a:=_}) -> true;
+has_a_field(#{}) -> false.
+
+has_nil_field(#{[]:=_}) -> true;
+has_nil_field(#{}) -> false.
diff --git a/lib/hipe/test/opt_verify_SUITE_data/call_elim_test_branches_opt_poss.erl b/lib/hipe/test/opt_verify_SUITE_data/call_elim_test_branches_opt_poss.erl
new file mode 100644
index 0000000000..c8ddfa1e75
--- /dev/null
+++ b/lib/hipe/test/opt_verify_SUITE_data/call_elim_test_branches_opt_poss.erl
@@ -0,0 +1,32 @@
+-module(call_elim_test_branches_opt_poss).
+
+-export([test/1]).
+
+test(A) ->
+ if A > 0 ->
+ true = has_a_field(#{a=>true}),
+ true = has_a_field(#{b=>1, a=>"2"}),
+ true = has_a_field(#{a=>5, c=>4}),
+ true = has_tuple_field(#{{ab, 1}=><<"qq">>, 1 =>0}),
+ true = has_tuple_field(#{up =>down, {ab, 1}=>[]}),
+ true = has_tuple_field(#{{ab, 1}=>42});
+ A =< 0 ->
+ true = has_a_field(#{a=>q, 'A' =>nej}),
+ true = has_a_field(#{a=>"hej", false=>true}),
+ true = has_a_field(#{a=>3}),
+ true = has_tuple_field(#{{ab, 1}=>q, 'A' =>nej}),
+ true = has_tuple_field(#{{ab, 1}=>"hej", false=>true}),
+ true = has_tuple_field(#{{ab, 1}=>3})
+ end,
+ true = has_nil_field(#{[] =>3, b =>"seven"}),
+ true = has_nil_field(#{"seventeen"=>17, []=>nil}),
+ ok.
+
+has_tuple_field(#{{ab, 1}:=_}) -> true;
+has_tuple_field(#{}) -> false.
+
+has_a_field(#{a:=_}) -> true;
+has_a_field(#{}) -> false.
+
+has_nil_field(#{[]:=_}) -> true;
+has_nil_field(#{}) -> false.
diff --git a/lib/hipe/tools/Makefile b/lib/hipe/tools/Makefile
index 4e3b93d464..7a62896c31 100644
--- a/lib/hipe/tools/Makefile
+++ b/lib/hipe/tools/Makefile
@@ -65,7 +65,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars +warn_missing_spec +warn_untyped_record
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars +warn_missing_spec +warn_untyped_record
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/util/Makefile b/lib/hipe/util/Makefile
index 32135d60dd..66e9421c25 100644
--- a/lib/hipe/util/Makefile
+++ b/lib/hipe/util/Makefile
@@ -69,7 +69,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars +warn_missing_spec +warn_untyped_record
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars +warn_missing_spec +warn_untyped_record
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/x86/Makefile b/lib/hipe/x86/Makefile
index e8a73bbc42..93f8b955dd 100644
--- a/lib/hipe/x86/Makefile
+++ b/lib/hipe/x86/Makefile
@@ -84,7 +84,7 @@ DOC_FILES= $(MODULES:%=$(DOCS)/%.html)
include ../native.mk
-ERL_COMPILE_FLAGS += +warn_exported_vars
+ERL_COMPILE_FLAGS += -Werror +warn_export_vars
# ----------------------------------------------------
# Targets
diff --git a/lib/hipe/x86/hipe_x86_postpass.erl b/lib/hipe/x86/hipe_x86_postpass.erl
index 939baeccec..4515822a34 100644
--- a/lib/hipe/x86/hipe_x86_postpass.erl
+++ b/lib/hipe/x86/hipe_x86_postpass.erl
@@ -95,7 +95,8 @@ peep([I=#move{src=#x86_temp{reg=Src}, dst=#x86_temp{reg=Dst}},
%% ElimBinALMDouble
%% ----------------
-peep([Move=#move{src=Src, dst=Dst}, Alu=#alu{src=Src, dst=Dst}|Insns], Res, Lst) ->
+peep([Move=#move{src=Src, dst=Dst}, Alu=#alu{src=Src, dst=Dst}|Insns], Res, Lst)
+ when not is_record(Dst, x86_mem) ->
peep([Alu#alu{src=Dst}|Insns], [Move|Res], [elimBinALMDouble|Lst]);
diff --git a/lib/ic/doc/src/Makefile b/lib/ic/doc/src/Makefile
index c9691df7af..19f12ac6b9 100644
--- a/lib/ic/doc/src/Makefile
+++ b/lib/ic/doc/src/Makefile
@@ -225,7 +225,7 @@ release_docs_spec: docs
$(INSTALL_DATA) $(TOP_PDF_FILE) "$(RELSYSDIR)/doc/pdf"
$(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)"
$(INSTALL_DIR) "$(RELSYSDIR)/doc/html"
- (/bin/cp -rf $(HTMLDIR) "$(RELSYSDIR)/doc")
+ ($(CP) -rf $(HTMLDIR) "$(RELSYSDIR)/doc")
$(INSTALL_DIR) "$(RELEASE_PATH)/man/man3"
$(INSTALL_DATA) $(MAN3_FILES) "$(RELEASE_PATH)/man/man3"
diff --git a/lib/ic/src/ic_codegen.erl b/lib/ic/src/ic_codegen.erl
index adad021da1..a3f141f606 100644
--- a/lib/ic/src/ic_codegen.erl
+++ b/lib/ic/src/ic_codegen.erl
@@ -245,8 +245,8 @@ emit_stub_head(G, F1, Name, java) ->
stub_header(G, Name) ->
["Implementation stub file",
"",
- io_lib:format("Target: ~s", [Name]),
- io_lib:format("Source: ~s", [ic_genobj:idlfile(G)]),
+ io_lib:format("Target: ~ts", [Name]),
+ io_lib:format("Source: ~ts", [ic_genobj:idlfile(G)]),
io_lib:format("IC vsn: ~s", [?COMPILERVSN]),
"",
"This file is automatically generated. DO NOT EDIT IT."].
@@ -298,8 +298,8 @@ emit_hrl_head(G, Fd, Name, c_server) ->
hrl_header(G, Name) ->
["",
- io_lib:format("Target: ~s", [Name]),
- io_lib:format("Source: ~s", [ic_genobj:idlfile(G)]),
+ io_lib:format("Target: ~ts", [Name]),
+ io_lib:format("Source: ~ts", [ic_genobj:idlfile(G)]),
io_lib:format("IC vsn: ~s", [?COMPILERVSN]),
"",
"This file is automatically generated. DO NOT EDIT IT."].
diff --git a/lib/ic/test/c_client_erl_server_SUITE.erl b/lib/ic/test/c_client_erl_server_SUITE.erl
index 7668300b58..b6e100e102 100644
--- a/lib/ic/test/c_client_erl_server_SUITE.erl
+++ b/lib/ic/test/c_client_erl_server_SUITE.erl
@@ -49,7 +49,7 @@
%% Add/remove code path and watchdog before/after each test case.
%%
init_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:add_patha(DataDir),
%% Since other test suites use the module m_i, we have
@@ -61,9 +61,9 @@ init_per_testcase(_Case, Config) ->
[{watchdog, WatchDog}| Config].
end_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:del_path(DataDir),
- WatchDog = ?config(watchdog, Config),
+ WatchDog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(WatchDog).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -95,173 +95,105 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
-array1_test(doc) -> "";
-array1_test(suite) -> [];
array1_test(Config) ->
do_test(array1_test, Config).
-array2_test(doc) -> "";
-array2_test(suite) -> [];
array2_test(Config) ->
do_test(array2_test, Config).
-bool_test(doc) -> "";
-bool_test(suite) -> [];
bool_test(Config) ->
do_test(bool_test, Config).
-char_test(doc) -> "";
-char_test(suite) -> [];
char_test(Config) ->
do_test(char_test, Config).
-double_test(doc) -> "";
-double_test(suite) -> [];
double_test(Config) ->
do_test(double_test, Config).
-enum_test(doc) -> "";
-enum_test(suite) -> [];
enum_test(Config) ->
do_test(enum_test, Config).
-inline_sequence_test(doc) -> "";
-inline_sequence_test(suite) -> [];
inline_sequence_test(Config) ->
do_test(inline_sequence_test, Config).
-long_long_test(doc) -> "";
-long_long_test(suite) -> [];
long_long_test(Config) ->
do_test(long_long_test, Config).
-long_test(doc) -> "";
-long_test(suite) -> [];
long_test(Config) ->
do_test(long_test, Config).
-octet_test(doc) -> "";
-octet_test(suite) -> [];
octet_test(Config) ->
do_test(octet_test, Config).
-pid_test(doc) -> "";
-pid_test(suite) -> [];
pid_test(Config) ->
do_test(pid_test, Config).
-port_test(doc) -> "";
-port_test(suite) -> [];
port_test(Config) ->
do_test(port_test, Config).
-ref_test(doc) -> "";
-ref_test(suite) -> [];
ref_test(Config) ->
do_test(ref_test, Config).
-seq1_test(doc) -> "";
-seq1_test(suite) -> [];
seq1_test(Config) ->
do_test(seq1_test, Config).
-seq2_test(doc) -> "";
-seq2_test(suite) -> [];
seq2_test(Config) ->
do_test(seq2_test, Config).
-seq3_test(doc) -> "";
-seq3_test(suite) -> [];
seq3_test(Config) ->
do_test(seq3_test, Config).
-seq4_test(doc) -> "";
-seq4_test(suite) -> [];
seq4_test(Config) ->
do_test(seq4_test, Config).
-seq5_test(doc) -> "";
-seq5_test(suite) -> [];
seq5_test(Config) ->
do_test(seq5_test, Config).
-string1_test(doc) -> "";
-string1_test(suite) -> [];
string1_test(Config) ->
do_test(string1_test, Config).
-string2_test(doc) -> "";
-string2_test(suite) -> [];
string2_test(Config) ->
do_test(string2_test, Config).
-string3_test(doc) -> "";
-string3_test(suite) -> [];
string3_test(Config) ->
do_test(string3_test, Config).
-string4_test(doc) -> "";
-string4_test(suite) -> [];
string4_test(Config) ->
do_test(string4_test, Config).
-struct2_test(doc) -> "";
-struct2_test(suite) -> [];
struct2_test(Config) ->
do_test(struct2_test, Config).
-struct_test(doc) -> "";
-struct_test(suite) -> [];
struct_test(Config) ->
do_test(struct_test, Config).
-term_sequence_test(doc) -> "";
-term_sequence_test(suite) -> [];
term_sequence_test(Config) ->
do_test(term_sequence_test, Config).
-term_struct_test(doc) -> "";
-term_struct_test(suite) -> [];
term_struct_test(Config) ->
do_test(term_struct_test, Config).
-term_test(doc) -> "";
-term_test(suite) -> [];
term_test(Config) ->
do_test(term_test, Config).
-typedef_test(doc) -> "";
-typedef_test(suite) -> [];
typedef_test(Config) ->
do_test(typedef_test, Config).
-unsigned_long_long_test(doc) -> "";
-unsigned_long_long_test(suite) -> [];
unsigned_long_long_test(Config) ->
do_test(unsigned_long_long_test, Config).
-unsigned_long_test(doc) -> "";
-unsigned_long_test(suite) -> [];
unsigned_long_test(Config) ->
do_test(unsigned_long_test, Config).
-unsigned_short_test(doc) -> "";
-unsigned_short_test(suite) -> [];
unsigned_short_test(Config) ->
do_test(unsigned_short_test, Config).
-void_test(doc) -> "";
-void_test(suite) -> [];
void_test(Config) ->
do_test(void_test, Config).
-wchar_test(doc) -> "";
-wchar_test(suite) -> [];
wchar_test(Config) ->
do_test(wchar_test, Config).
-wstring1_test(doc) -> "";
-wstring1_test(suite) -> [];
wstring1_test(Config) ->
do_test(wstring1_test, Config).
@@ -275,7 +207,7 @@ do_test(Case, Config) ->
%% Start the server
{ok, _Pid} = m_i:oe_create_link([], {local, ?ERLANG_SERVER_NAME}),
Node = atom_to_list(node()),
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
%% io:format("~p: data directory: ~p~n", [?MODULE, DataDir]),
Cookie = atom_to_list(erlang:get_cookie()),
%% Start C-client node as a port program.
diff --git a/lib/ic/test/c_client_erl_server_SUITE_data/c_client.c b/lib/ic/test/c_client_erl_server_SUITE_data/c_client.c
index 6953227824..af189a74f7 100644
--- a/lib/ic/test/c_client_erl_server_SUITE_data/c_client.c
+++ b/lib/ic/test/c_client_erl_server_SUITE_data/c_client.c
@@ -854,7 +854,6 @@ static int array1_test(IC_Env *env)
print_arr1(alr);
fprintf(stdout, "\n");
}
- free(alo);
free(alr);
return -1;
}
diff --git a/lib/ic/test/c_client_erl_server_proto_SUITE.erl b/lib/ic/test/c_client_erl_server_proto_SUITE.erl
index 2336a8417c..c15617ea3f 100644
--- a/lib/ic/test/c_client_erl_server_proto_SUITE.erl
+++ b/lib/ic/test/c_client_erl_server_proto_SUITE.erl
@@ -48,7 +48,7 @@
%% Add/remove code path and watchdog before/after each test case.
%%
init_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:add_patha(DataDir),
%% Since other test suites use the module m_i, we have
@@ -60,9 +60,9 @@ init_per_testcase(_Case, Config) ->
[{watchdog, WatchDog}| Config].
end_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:del_path(DataDir),
- WatchDog = ?config(watchdog, Config),
+ WatchDog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(WatchDog).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -94,173 +94,105 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
-array1_test(doc) -> "";
-array1_test(suite) -> [];
array1_test(Config) ->
do_test(array1_test, Config).
-array2_test(doc) -> "";
-array2_test(suite) -> [];
array2_test(Config) ->
do_test(array2_test, Config).
-bool_test(doc) -> "";
-bool_test(suite) -> [];
bool_test(Config) ->
do_test(bool_test, Config).
-char_test(doc) -> "";
-char_test(suite) -> [];
char_test(Config) ->
do_test(char_test, Config).
-double_test(doc) -> "";
-double_test(suite) -> [];
double_test(Config) ->
do_test(double_test, Config).
-enum_test(doc) -> "";
-enum_test(suite) -> [];
enum_test(Config) ->
do_test(enum_test, Config).
-inline_sequence_test(doc) -> "";
-inline_sequence_test(suite) -> [];
inline_sequence_test(Config) ->
do_test(inline_sequence_test, Config).
-long_long_test(doc) -> "";
-long_long_test(suite) -> [];
long_long_test(Config) ->
do_test(long_long_test, Config).
-long_test(doc) -> "";
-long_test(suite) -> [];
long_test(Config) ->
do_test(long_test, Config).
-octet_test(doc) -> "";
-octet_test(suite) -> [];
octet_test(Config) ->
do_test(octet_test, Config).
-pid_test(doc) -> "";
-pid_test(suite) -> [];
pid_test(Config) ->
do_test(pid_test, Config).
-port_test(doc) -> "";
-port_test(suite) -> [];
port_test(Config) ->
do_test(port_test, Config).
-ref_test(doc) -> "";
-ref_test(suite) -> [];
ref_test(Config) ->
do_test(ref_test, Config).
-seq1_test(doc) -> "";
-seq1_test(suite) -> [];
seq1_test(Config) ->
do_test(seq1_test, Config).
-seq2_test(doc) -> "";
-seq2_test(suite) -> [];
seq2_test(Config) ->
do_test(seq2_test, Config).
-seq3_test(doc) -> "";
-seq3_test(suite) -> [];
seq3_test(Config) ->
do_test(seq3_test, Config).
-seq4_test(doc) -> "";
-seq4_test(suite) -> [];
seq4_test(Config) ->
do_test(seq4_test, Config).
-seq5_test(doc) -> "";
-seq5_test(suite) -> [];
seq5_test(Config) ->
do_test(seq5_test, Config).
-string1_test(doc) -> "";
-string1_test(suite) -> [];
string1_test(Config) ->
do_test(string1_test, Config).
-string2_test(doc) -> "";
-string2_test(suite) -> [];
string2_test(Config) ->
do_test(string2_test, Config).
-string3_test(doc) -> "";
-string3_test(suite) -> [];
string3_test(Config) ->
do_test(string3_test, Config).
-string4_test(doc) -> "";
-string4_test(suite) -> [];
string4_test(Config) ->
do_test(string4_test, Config).
-struct2_test(doc) -> "";
-struct2_test(suite) -> [];
struct2_test(Config) ->
do_test(struct2_test, Config).
-struct_test(doc) -> "";
-struct_test(suite) -> [];
struct_test(Config) ->
do_test(struct_test, Config).
-term_sequence_test(doc) -> "";
-term_sequence_test(suite) -> [];
term_sequence_test(Config) ->
do_test(term_sequence_test, Config).
-term_struct_test(doc) -> "";
-term_struct_test(suite) -> [];
term_struct_test(Config) ->
do_test(term_struct_test, Config).
-term_test(doc) -> "";
-term_test(suite) -> [];
term_test(Config) ->
do_test(term_test, Config).
-typedef_test(doc) -> "";
-typedef_test(suite) -> [];
typedef_test(Config) ->
do_test(typedef_test, Config).
-unsigned_long_long_test(doc) -> "";
-unsigned_long_long_test(suite) -> [];
unsigned_long_long_test(Config) ->
do_test(unsigned_long_long_test, Config).
-unsigned_long_test(doc) -> "";
-unsigned_long_test(suite) -> [];
unsigned_long_test(Config) ->
do_test(unsigned_long_test, Config).
-unsigned_short_test(doc) -> "";
-unsigned_short_test(suite) -> [];
unsigned_short_test(Config) ->
do_test(unsigned_short_test, Config).
-void_test(doc) -> "";
-void_test(suite) -> [];
void_test(Config) ->
do_test(void_test, Config).
-wchar_test(doc) -> "";
-wchar_test(suite) -> [];
wchar_test(Config) ->
do_test(wchar_test, Config).
-wstring1_test(doc) -> "";
-wstring1_test(suite) -> [];
wstring1_test(Config) ->
do_test(wstring1_test, Config).
@@ -275,7 +207,7 @@ do_test(Case, Config) ->
{ok, _Pid} = m_i:oe_create_link([], {local, ?ERLANG_SERVER_NAME}),
Node = atom_to_list(node()),
%% [NodeName, HostName] = string:tokens(Node, "@"),
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
%% io:format("~p: data directory: ~p~n", [?MODULE, DataDir]),
Cookie = atom_to_list(erlang:get_cookie()),
%% Start C-client node as a port program.
diff --git a/lib/ic/test/c_client_erl_server_proto_tmo_SUITE.erl b/lib/ic/test/c_client_erl_server_proto_tmo_SUITE.erl
index ed45b7fd82..334db7c1da 100644
--- a/lib/ic/test/c_client_erl_server_proto_tmo_SUITE.erl
+++ b/lib/ic/test/c_client_erl_server_proto_tmo_SUITE.erl
@@ -48,7 +48,7 @@
%% Add/remove code path and watchdog before/after each test case.
%%
init_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:add_patha(DataDir),
%% Since other test suites use the module m_i, we have
@@ -60,9 +60,9 @@ init_per_testcase(_Case, Config) ->
[{watchdog, WatchDog}| Config].
end_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:del_path(DataDir),
- WatchDog = ?config(watchdog, Config),
+ WatchDog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(WatchDog).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -94,175 +94,105 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
-
-
-array1_test(doc) -> "";
-array1_test(suite) -> [];
array1_test(Config) ->
do_test(array1_test, Config).
-array2_test(doc) -> "";
-array2_test(suite) -> [];
array2_test(Config) ->
do_test(array2_test, Config).
-bool_test(doc) -> "";
-bool_test(suite) -> [];
bool_test(Config) ->
do_test(bool_test, Config).
-char_test(doc) -> "";
-char_test(suite) -> [];
char_test(Config) ->
do_test(char_test, Config).
-double_test(doc) -> "";
-double_test(suite) -> [];
double_test(Config) ->
do_test(double_test, Config).
-enum_test(doc) -> "";
-enum_test(suite) -> [];
enum_test(Config) ->
do_test(enum_test, Config).
-inline_sequence_test(doc) -> "";
-inline_sequence_test(suite) -> [];
inline_sequence_test(Config) ->
do_test(inline_sequence_test, Config).
-long_long_test(doc) -> "";
-long_long_test(suite) -> [];
long_long_test(Config) ->
do_test(long_long_test, Config).
-long_test(doc) -> "";
-long_test(suite) -> [];
long_test(Config) ->
do_test(long_test, Config).
-octet_test(doc) -> "";
-octet_test(suite) -> [];
octet_test(Config) ->
do_test(octet_test, Config).
-pid_test(doc) -> "";
-pid_test(suite) -> [];
pid_test(Config) ->
do_test(pid_test, Config).
-port_test(doc) -> "";
-port_test(suite) -> [];
port_test(Config) ->
do_test(port_test, Config).
-ref_test(doc) -> "";
-ref_test(suite) -> [];
ref_test(Config) ->
do_test(ref_test, Config).
-seq1_test(doc) -> "";
-seq1_test(suite) -> [];
seq1_test(Config) ->
do_test(seq1_test, Config).
-seq2_test(doc) -> "";
-seq2_test(suite) -> [];
seq2_test(Config) ->
do_test(seq2_test, Config).
-seq3_test(doc) -> "";
-seq3_test(suite) -> [];
seq3_test(Config) ->
do_test(seq3_test, Config).
-seq4_test(doc) -> "";
-seq4_test(suite) -> [];
seq4_test(Config) ->
do_test(seq4_test, Config).
-seq5_test(doc) -> "";
-seq5_test(suite) -> [];
seq5_test(Config) ->
do_test(seq5_test, Config).
-string1_test(doc) -> "";
-string1_test(suite) -> [];
string1_test(Config) ->
do_test(string1_test, Config).
-string2_test(doc) -> "";
-string2_test(suite) -> [];
string2_test(Config) ->
do_test(string2_test, Config).
-string3_test(doc) -> "";
-string3_test(suite) -> [];
string3_test(Config) ->
do_test(string3_test, Config).
-string4_test(doc) -> "";
-string4_test(suite) -> [];
string4_test(Config) ->
do_test(string4_test, Config).
-struct2_test(doc) -> "";
-struct2_test(suite) -> [];
struct2_test(Config) ->
do_test(struct2_test, Config).
-struct_test(doc) -> "";
-struct_test(suite) -> [];
struct_test(Config) ->
do_test(struct_test, Config).
-term_sequence_test(doc) -> "";
-term_sequence_test(suite) -> [];
term_sequence_test(Config) ->
do_test(term_sequence_test, Config).
-term_struct_test(doc) -> "";
-term_struct_test(suite) -> [];
term_struct_test(Config) ->
do_test(term_struct_test, Config).
-term_test(doc) -> "";
-term_test(suite) -> [];
term_test(Config) ->
do_test(term_test, Config).
-typedef_test(doc) -> "";
-typedef_test(suite) -> [];
typedef_test(Config) ->
do_test(typedef_test, Config).
-unsigned_long_long_test(doc) -> "";
-unsigned_long_long_test(suite) -> [];
unsigned_long_long_test(Config) ->
do_test(unsigned_long_long_test, Config).
-unsigned_long_test(doc) -> "";
-unsigned_long_test(suite) -> [];
unsigned_long_test(Config) ->
do_test(unsigned_long_test, Config).
-unsigned_short_test(doc) -> "";
-unsigned_short_test(suite) -> [];
unsigned_short_test(Config) ->
do_test(unsigned_short_test, Config).
-void_test(doc) -> "";
-void_test(suite) -> [];
void_test(Config) ->
do_test(void_test, Config).
-wchar_test(doc) -> "";
-wchar_test(suite) -> [];
wchar_test(Config) ->
do_test(wchar_test, Config).
-wstring1_test(doc) -> "";
-wstring1_test(suite) -> [];
wstring1_test(Config) ->
do_test(wstring1_test, Config).
@@ -277,7 +207,7 @@ do_test(Case, Config) ->
{ok, _Pid} = m_i:oe_create_link([], {local, ?ERLANG_SERVER_NAME}),
Node = atom_to_list(node()),
%% [NodeName, HostName] = string:tokens(Node, "@"),
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
%% io:format("~p: data directory: ~p~n", [?MODULE, DataDir]),
Cookie = atom_to_list(erlang:get_cookie()),
%% Start C-client node as a port program.
diff --git a/lib/ic/test/erl_client_c_server_SUITE.erl b/lib/ic/test/erl_client_c_server_SUITE.erl
index cc0dbfda74..d592a611f7 100644
--- a/lib/ic/test/erl_client_c_server_SUITE.erl
+++ b/lib/ic/test/erl_client_c_server_SUITE.erl
@@ -47,7 +47,7 @@
%% Add/remove code path and watchdog before/after each test case.
%%
init_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:add_patha(DataDir),
%% Since other test suites use the module m_i, we have
@@ -59,9 +59,9 @@ init_per_testcase(_Case, Config) ->
[{watchdog, WatchDog}| Config].
end_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:del_path(DataDir),
- WatchDog = ?config(watchdog, Config),
+ WatchDog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(WatchDog).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -93,174 +93,105 @@ end_per_group(_GroupName, Config) ->
Config.
-
-array1_test(doc) -> "";
-array1_test(suite) -> [];
array1_test(Config) ->
do_test(array1_test, Config).
-array2_test(doc) -> "";
-array2_test(suite) -> [];
array2_test(Config) ->
do_test(array2_test, Config).
-bool_test(doc) -> "";
-bool_test(suite) -> [];
bool_test(Config) ->
do_test(bool_test, Config).
-char_test(doc) -> "";
-char_test(suite) -> [];
char_test(Config) ->
do_test(char_test, Config).
-double_test(doc) -> "";
-double_test(suite) -> [];
double_test(Config) ->
do_test(double_test, Config).
-enum_test(doc) -> "";
-enum_test(suite) -> [];
enum_test(Config) ->
do_test(enum_test, Config).
-inline_sequence_test(doc) -> "";
-inline_sequence_test(suite) -> [];
inline_sequence_test(Config) ->
do_test(inline_sequence_test, Config).
-longlong_test(doc) -> "";
-longlong_test(suite) -> [];
longlong_test(Config) ->
do_test(longlong_test, Config).
-long_test(doc) -> "";
-long_test(suite) -> [];
long_test(Config) ->
do_test(long_test, Config).
-octet_test(doc) -> "";
-octet_test(suite) -> [];
octet_test(Config) ->
do_test(octet_test, Config).
-pid_test(doc) -> "";
-pid_test(suite) -> [];
pid_test(Config) ->
do_test(pid_test, Config).
-port_test(doc) -> "";
-port_test(suite) -> [];
port_test(Config) ->
do_test(port_test, Config).
-ref_test(doc) -> "";
-ref_test(suite) -> [];
ref_test(Config) ->
do_test(ref_test, Config).
-seq1_test(doc) -> "";
-seq1_test(suite) -> [];
seq1_test(Config) ->
do_test(seq1_test, Config).
-seq2_test(doc) -> "";
-seq2_test(suite) -> [];
seq2_test(Config) ->
do_test(seq2_test, Config).
-seq3_test(doc) -> "";
-seq3_test(suite) -> [];
seq3_test(Config) ->
do_test(seq3_test, Config).
-seq4_test(doc) -> "";
-seq4_test(suite) -> [];
seq4_test(Config) ->
do_test(seq4_test, Config).
-seq5_test(doc) -> "";
-seq5_test(suite) -> [];
seq5_test(Config) ->
do_test(seq5_test, Config).
-string1_test(doc) -> "";
-string1_test(suite) -> [];
string1_test(Config) ->
do_test(string1_test, Config).
-string2_test(doc) -> "";
-string2_test(suite) -> [];
string2_test(Config) ->
do_test(string2_test, Config).
-string3_test(doc) -> "";
-string3_test(suite) -> [];
string3_test(Config) ->
do_test(string3_test, Config).
-string4_test(doc) -> "";
-string4_test(suite) -> [];
string4_test(Config) ->
do_test(string4_test, Config).
-struct2_test(doc) -> "";
-struct2_test(suite) -> [];
struct2_test(Config) ->
do_test(struct2_test, Config).
-struct_test(doc) -> "";
-struct_test(suite) -> [];
struct_test(Config) ->
do_test(struct_test, Config).
-term_sequence_test(doc) -> "";
-term_sequence_test(suite) -> [];
term_sequence_test(Config) ->
do_test(term_sequence_test, Config).
-term_struct_test(doc) -> "";
-term_struct_test(suite) -> [];
term_struct_test(Config) ->
do_test(term_struct_test, Config).
-term_test(doc) -> "";
-term_test(suite) -> [];
term_test(Config) ->
do_test(term_test, Config).
-typedef_test(doc) -> "";
-typedef_test(suite) -> [];
typedef_test(Config) ->
do_test(typedef_test, Config).
-ulonglong_test(doc) -> "";
-ulonglong_test(suite) -> [];
ulonglong_test(Config) ->
do_test(ulonglong_test, Config).
-ulong_test(doc) -> "";
-ulong_test(suite) -> [];
ulong_test(Config) ->
do_test(ulong_test, Config).
-ushort_test(doc) -> "";
-ushort_test(suite) -> [];
ushort_test(Config) ->
do_test(ushort_test, Config).
-void_test(doc) -> "";
-void_test(suite) -> [];
void_test(Config) ->
do_test(void_test, Config).
-wchar_test(doc) -> "";
-wchar_test(suite) -> [];
wchar_test(Config) ->
do_test(wchar_test, Config).
-wstring1_test(doc) -> "";
-wstring1_test(suite) -> [];
wstring1_test(Config) ->
do_test(wstring1_test, Config).
@@ -270,7 +201,7 @@ do_test(Case, Config) ->
process_flag(trap_exit, true),
Node = atom_to_list(node()),
[_NodeName, HostName] = string:tokens(Node, "@"),
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
%% io:format("~p: data directory: ~p~n", [?MODULE, DataDir]),
Cookie = atom_to_list(erlang:get_cookie()),
ServerNodeName = atom_to_list(?C_SERVER_NODE_NAME),
diff --git a/lib/ic/test/erl_client_c_server_proto_SUITE.erl b/lib/ic/test/erl_client_c_server_proto_SUITE.erl
index 48330b95a8..99eeed01ad 100644
--- a/lib/ic/test/erl_client_c_server_proto_SUITE.erl
+++ b/lib/ic/test/erl_client_c_server_proto_SUITE.erl
@@ -47,7 +47,7 @@
%% Add/remove code path and watchdog before/after each test case.
%%
init_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:add_patha(DataDir),
%% Since other test suites use the module m_i, we have
@@ -59,9 +59,9 @@ init_per_testcase(_Case, Config) ->
[{watchdog, WatchDog}| Config].
end_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:del_path(DataDir),
- WatchDog = ?config(watchdog, Config),
+ WatchDog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(WatchDog).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -93,174 +93,105 @@ end_per_group(_GroupName, Config) ->
Config.
-
-array1_test(doc) -> "";
-array1_test(suite) -> [];
array1_test(Config) ->
do_test(array1_test, Config).
-array2_test(doc) -> "";
-array2_test(suite) -> [];
array2_test(Config) ->
do_test(array2_test, Config).
-bool_test(doc) -> "";
-bool_test(suite) -> [];
bool_test(Config) ->
do_test(bool_test, Config).
-char_test(doc) -> "";
-char_test(suite) -> [];
char_test(Config) ->
do_test(char_test, Config).
-double_test(doc) -> "";
-double_test(suite) -> [];
double_test(Config) ->
do_test(double_test, Config).
-enum_test(doc) -> "";
-enum_test(suite) -> [];
enum_test(Config) ->
do_test(enum_test, Config).
-inline_sequence_test(doc) -> "";
-inline_sequence_test(suite) -> [];
inline_sequence_test(Config) ->
do_test(inline_sequence_test, Config).
-longlong_test(doc) -> "";
-longlong_test(suite) -> [];
longlong_test(Config) ->
do_test(longlong_test, Config).
-long_test(doc) -> "";
-long_test(suite) -> [];
long_test(Config) ->
do_test(long_test, Config).
-octet_test(doc) -> "";
-octet_test(suite) -> [];
octet_test(Config) ->
do_test(octet_test, Config).
-pid_test(doc) -> "";
-pid_test(suite) -> [];
pid_test(Config) ->
do_test(pid_test, Config).
-port_test(doc) -> "";
-port_test(suite) -> [];
port_test(Config) ->
do_test(port_test, Config).
-ref_test(doc) -> "";
-ref_test(suite) -> [];
ref_test(Config) ->
do_test(ref_test, Config).
-seq1_test(doc) -> "";
-seq1_test(suite) -> [];
seq1_test(Config) ->
do_test(seq1_test, Config).
-seq2_test(doc) -> "";
-seq2_test(suite) -> [];
seq2_test(Config) ->
do_test(seq2_test, Config).
-seq3_test(doc) -> "";
-seq3_test(suite) -> [];
seq3_test(Config) ->
do_test(seq3_test, Config).
-seq4_test(doc) -> "";
-seq4_test(suite) -> [];
seq4_test(Config) ->
do_test(seq4_test, Config).
-seq5_test(doc) -> "";
-seq5_test(suite) -> [];
seq5_test(Config) ->
do_test(seq5_test, Config).
-string1_test(doc) -> "";
-string1_test(suite) -> [];
string1_test(Config) ->
do_test(string1_test, Config).
-string2_test(doc) -> "";
-string2_test(suite) -> [];
string2_test(Config) ->
do_test(string2_test, Config).
-string3_test(doc) -> "";
-string3_test(suite) -> [];
string3_test(Config) ->
do_test(string3_test, Config).
-string4_test(doc) -> "";
-string4_test(suite) -> [];
string4_test(Config) ->
do_test(string4_test, Config).
-struct2_test(doc) -> "";
-struct2_test(suite) -> [];
struct2_test(Config) ->
do_test(struct2_test, Config).
-struct_test(doc) -> "";
-struct_test(suite) -> [];
struct_test(Config) ->
do_test(struct_test, Config).
-term_sequence_test(doc) -> "";
-term_sequence_test(suite) -> [];
term_sequence_test(Config) ->
do_test(term_sequence_test, Config).
-term_struct_test(doc) -> "";
-term_struct_test(suite) -> [];
term_struct_test(Config) ->
do_test(term_struct_test, Config).
-term_test(doc) -> "";
-term_test(suite) -> [];
term_test(Config) ->
do_test(term_test, Config).
-typedef_test(doc) -> "";
-typedef_test(suite) -> [];
typedef_test(Config) ->
do_test(typedef_test, Config).
-ulonglong_test(doc) -> "";
-ulonglong_test(suite) -> [];
ulonglong_test(Config) ->
do_test(ulonglong_test, Config).
-ulong_test(doc) -> "";
-ulong_test(suite) -> [];
ulong_test(Config) ->
do_test(ulong_test, Config).
-ushort_test(doc) -> "";
-ushort_test(suite) -> [];
ushort_test(Config) ->
do_test(ushort_test, Config).
-void_test(doc) -> "";
-void_test(suite) -> [];
void_test(Config) ->
do_test(void_test, Config).
-wchar_test(doc) -> "";
-wchar_test(suite) -> [];
wchar_test(Config) ->
do_test(wchar_test, Config).
-wstring1_test(doc) -> "";
-wstring1_test(suite) -> [];
wstring1_test(Config) ->
do_test(wstring1_test, Config).
@@ -270,7 +201,7 @@ do_test(Case, Config) ->
process_flag(trap_exit, true),
Node = atom_to_list(node()),
[_NodeName, HostName] = string:tokens(Node, "@"),
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
%% io:format("~p: data directory: ~p~n", [?MODULE, DataDir]),
Cookie = atom_to_list(erlang:get_cookie()),
ServerNodeName = atom_to_list(?C_SERVER_NODE_NAME),
diff --git a/lib/ic/test/ic_SUITE.erl b/lib/ic/test/ic_SUITE.erl
index 1d436eda2b..42c1dbb415 100644
--- a/lib/ic/test/ic_SUITE.erl
+++ b/lib/ic/test/ic_SUITE.erl
@@ -83,7 +83,7 @@
%% Standard options to the ic compiler, NOTE unholy use of OutDir
--define(OUT(X), filename:join([?config(priv_dir, Config), gen, to_list(X)])).
+-define(OUT(X), filename:join([proplists:get_value(priv_dir, Config), gen, to_list(X)])).
%% Top of cases
@@ -129,9 +129,6 @@ end_per_group(_GroupName, Config) ->
Config.
-
-app_test(doc) -> [];
-app_test(suite) -> [];
app_test(_Config) ->
ok=test_server:app_test(ic),
ok.
@@ -141,89 +138,72 @@ app_test(_Config) ->
%% Test of constant expressions.
%%
-
-
-const_norm(doc) ->
- ["Checks normal constant types and values"];
-const_norm(suite) -> [];
+%% Checks normal constant types and values
const_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(const_norm),
File = filename:join(DataDir, c_norm),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, const_norm_files()),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, const_norm_files()),
ok.
-const_bad_tk(doc) ->
- ["Checks when the constant value doesn't match the declared type"];
-const_bad_tk(suite) -> [];
+%% Checks when the constant value doesn't match the declared type
const_bad_tk(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, c_err1),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(18, bad_tk_match, R),
ok.
-const_bad_type(doc) ->
- ["Checks operands of ops are of correct type"];
-const_bad_type(suite) -> [];
+%% Checks operands of ops are of correct type
const_bad_type(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, c_err2),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(4, bad_type, R),
ok.
-const_bad_comb(doc) ->
- ["Checks operands of ops are of conflicting types"];
-const_bad_comb(suite) -> [];
+%% Checks operands of ops are of conflicting types
const_bad_comb(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, c_err3),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(3, bad_type_combination, R),
ok.
-
-
-
-union_norm(doc) ->
- ["Checks that normal union declarations works."];
-union_norm(suite) -> [];
+%% Checks that normal union declarations works.
union_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(union_norm),
File = filename:join(DataDir, u_norm),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, union_norm_files()),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, union_norm_files()),
ok.
%% Checks OTP-2007
-union_default(doc) ->
- ["Checks that default cases are correct in type code."];
-union_default(suite) -> [];
+%% Checks that default cases are correct in type code.
union_default(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(union_default),
File = filename:join(DataDir, u_default),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, union_default_files(), [load]),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, union_default_files(), [load]),
TkList = i1:oe_get_interface(),
check_label("op0", 0, TkList),
check_label("op1", 1, TkList),
@@ -256,50 +236,41 @@ check_label(Id, N, List) ->
test_server:fail({'no_such_op!', Id, List})
end.
-union_type(doc) ->
- ["Checks that errors are detected. Check that mismatch between case ",
- "value and declared discriminator type is detected."];
-union_type(suite) -> [];
+%% Checks that errors are detected. Check that mismatch between case
+%% value and declared discriminator type is detected.
union_type(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, u_type),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(28, bad_case_type, R),
ok.
-union_mult_err(doc) ->
- ["Check that multiple declared declarators are caught.",
- "Also check that if the discriminator is an enum, then the enum name",
- "must not be used as a declarator in the union switch (declarator",
- "as opposed to label)."];
-union_mult_err(suite) -> [];
+%% Check that multiple declared declarators are caught.
+%% Also check that if the discriminator is an enum, then the enum name
+%% must not be used as a declarator in the union switch (declarator
+%% as opposed to label).
union_mult_err(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, u_mult),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(8, multiply_defined, R),
ok.
-%% Checking mult cases. Now check that other errors are found in the
-%% correct order XXXX
-
-
-union_case_mult(doc) ->
- ["Check that multiply defined case labels are found and reported."];
-union_case_mult(suite) -> [];
+%% Check that multiply defined case labels are found in the
+%% correct order
union_case_mult(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, u_case_mult),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(7, multiple_cases, R),
ok.
@@ -309,19 +280,15 @@ union_case_mult(Config) when is_list(Config) ->
%%
%% Enum cases
%%
-
-
-enum_norm(doc) ->
- ["Checks that normal enum declarations works."];
-enum_norm(suite) -> [];
+%%Checks that normal enum declarations works.
enum_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(enum_norm),
File = filename:join(DataDir, enum),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, enum_norm_files()),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, enum_norm_files()),
ok.
@@ -329,27 +296,23 @@ enum_norm(Config) when is_list(Config) ->
%%
%% Struct cases
%%
-
-
-struct_norm(doc) ->
- ["Checks that normal struct declarations works."];
-struct_norm(suite) -> [];
+%% Checks that normal struct declarations works.
struct_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(struct_norm),
File = filename:join(DataDir, struct),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, struct_norm_files()),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, struct_norm_files()),
Mod = ridiculous_name_to_avoid_clash_svenne,
TestFile = filename:join(OutDir, Mod),
- ?line ok = gen_struct_file(TestFile, Mod),
- ?line ok = compile(OutDir, [Mod], [load]),
-%% ?line {ok, Mod, []} = compile:file(TestFile,
+ ok = gen_struct_file(TestFile, Mod),
+ ok = compile(OutDir, [Mod], [load]),
+%% {ok, Mod, []} = compile:file(TestFile,
%% [{i, OutDir}, {outdir, OutDir},
%% return, load]),
- ?line ok = Mod:test(),
+ ok = Mod:test(),
ok.
@@ -359,36 +322,30 @@ struct_norm(Config) when is_list(Config) ->
%%
%% coss (add sometimes, takes 440 seconds!)
-
-typeid(doc) ->
- ["Check that type id's are generated correctly"];
-typeid(suite) -> [];
+%% Check that type id's are generated correctly
typeid(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(typeid),
File = filename:join(DataDir, typeid),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, typeid_files(), [load]),
- ?line "IDL:I1:1.0" = 'I1':'typeID'(),
- ?line "IDL:M1/I1:1.0" = 'M1_I1':'typeID'(),
- ?line "IDL:M2/M1/I1:1.0" = 'M2_M1_I1':'typeID'(),
- ?line "IDL:M3/M2/M1/I1:1.0" = 'M3_M2_M1_I1':'typeID'(),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, typeid_files(), [load]),
+ "IDL:I1:1.0" = 'I1':'typeID'(),
+ "IDL:M1/I1:1.0" = 'M1_I1':'typeID'(),
+ "IDL:M2/M1/I1:1.0" = 'M2_M1_I1':'typeID'(),
+ "IDL:M3/M2/M1/I1:1.0" = 'M3_M2_M1_I1':'typeID'(),
ok.
%%% This test case is removed because there's no way to test this from
%%% an automated test suite.
-dir(doc) ->
- ["Check that relative directories work, absolute is used in",
- "all other cases in the suite."];
-%%% xxxxxx
-dir(suite) -> [];
+%% Check that relative directories work, absolute is used in
+%% all other cases in the suite.
dir(Config) when is_list(Config) ->
-ok;
+ ok;
dir(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
%% Needs a unique directory (any better way?)
OutDir = mk_unique("oe_the_dir"),
@@ -402,94 +359,82 @@ dir(Config) ->
%% Generate a unique IDL file with a single constant
gen_file(File, Const),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line ok = compile(OutDir, [load]),
- ?line 19955 = Mod:Func(),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, [load]),
- ?line 19955 = Mod:Func(),
+ ok = ic:gen(File, stdopts(OutDir)),
+ ok = compile(OutDir, [load]),
+ 19955 = Mod:Func(),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, [load]),
+ 19955 = Mod:Func(),
- ?line ok = ic:gen(File),
-%%% ?line ok = compile(".", [load]),
+ ok = ic:gen(File),
+%%% ok = compile(".", [load]),
ok.
-undef_id(doc) ->
- ["Check that various undefied id's are detected correctly"];
-undef_id(suite) -> [];
+%% Check that various undefied id's are detected correctly
undef_id(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, undef_id),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(16, tk_not_found, R),
ok.
-mult_ids(doc) ->
- ["Check that multiply defined ids are caught."];
-mult_ids(suite) -> [];
+%% Check that multiply defined ids are caught.
mult_ids(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, mult_ids),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(22, multiply_defined, R),
ok.
-nasty_names(doc) ->
- ["Check that various nasty names can be generated.",
- "Try to provoke name clashes and name conflicts with",
- "Erlang and IDL"];
-nasty_names(suite) -> [];
+%% Check that various nasty names can be generated.
+%% Try to provoke name clashes and name conflicts with
+%% Erlang and IDL
nasty_names(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(nasty_names),
File = filename:join(DataDir, nasty),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, nasty_names_files(), [load]),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, nasty_names_files(), [load]),
ok.
-coss(doc) ->
- ["Check that the Coss standard specification works."];
-coss(suite) -> [];
+%% Check that the Coss standard specification works.
coss(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(coss),
File = filename:join(DataDir, 'Coss'),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, [_W1]} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, []),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, [_W1]} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, []),
ok.
-forward(doc) ->
- ["Check that forward declaratios work."];
-forward(suite) -> [];
+%% Check that forward declaratios work.
forward(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(forward),
File = filename:join(DataDir, forward),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, forward_files(), [load]),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, forward_files(), [load]),
ok.
-include(doc) ->
- ["Check that various undefied id's are detected correctly"];
-include(suite) -> [];
+%% Check that various undefied id's are detected correctly
include(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, include),
- ?line error = ic:gen(File, stdopts(OutDir)++[{preproc_flags,"-I" ++ DataDir}]),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)++[{preproc_flags,"-I" ++ DataDir}]),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[{preproc_flags,"-I" ++ DataDir},silent2]),
case lists:map(fun(D) ->
filename:rootname(filename:basename(element(3, D)))
@@ -513,228 +458,198 @@ include(Config) when is_list(Config) ->
%% Inhertit cases
%%
-
-inherit_norm(doc) ->
- ["Checks that normal inheritance works."];
-inherit_norm(suite) -> [];
+%% Checks that normal inheritance works.
inherit_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(inherit_norm),
File = filename:join(DataDir, inherit),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, _Ws} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, inherit_norm_files(), [load]),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, _Ws} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, inherit_norm_files(), [load]),
%% Now check constant values:
- ?line 9 = m1_I1:c1(),
+ 9 = m1_I1:c1(),
- ?line 9 = m1_I2:c1(),
- ?line 14 = m1_I2:c2(),
- ?line 27 = m1_I2:c3(),
+ 9 = m1_I2:c1(),
+ 14 = m1_I2:c2(),
+ 27 = m1_I2:c3(),
- ?line 50 = m1_I3:c1(),
- ?line 14 = m1_I3:c2(),
- ?line 27 = m1_I3:c3(),
- ?line 91 = m1_I3:c4(),
- ?line 100 = m1_I3:c5(),
+ 50 = m1_I3:c1(),
+ 14 = m1_I3:c2(),
+ 27 = m1_I3:c3(),
+ 91 = m1_I3:c4(),
+ 100 = m1_I3:c5(),
ok.
-inherit_warn(doc) ->
- ["Check that various inheritance shadowing is detected"];
-inherit_warn(suite) -> [];
+%% Check that various inheritance shadowing is detected
inherit_warn(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, inherit_warn),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, R} =
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(7, inherit_name_shadow, R),
ok.
-inherit_err(doc) ->
- ["Check that various inheritance errors is detected"];
-inherit_err(suite) -> [];
+%% Check that various inheritance errors is detected
inherit_err(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, inherit_err),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, _Ws, R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, _Ws, R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(21, inherit_name_collision, R),
ok.
-
-oneway_norm(doc) ->
- ["Checks that normal oneway operations works."];
-oneway_norm(suite) -> [];
+%% Checks that normal oneway operations works.
oneway_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(oneway_norm),
File = filename:join(DataDir, one),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line ok = compile(OutDir, oneway_norm_files(), [load]),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, oneway_norm_files(), [load]),
+ ok = ic:gen(File, stdopts(OutDir)),
+ ok = compile(OutDir, oneway_norm_files(), [load]),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, oneway_norm_files(), [load]),
ok.
-oneway_void(doc) ->
- ["Check that non-void oneways are detected."];
-oneway_void(suite) -> [];
+%% Check that non-void oneways are detected.
oneway_void(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, one_void),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(2, bad_oneway_type, R),
ok.
-oneway_raises(doc) ->
- ["Check that oneways cannot raise exceptions."];
-oneway_raises(suite) -> [];
+%% Check that oneways cannot raise exceptions.
oneway_raises(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, one_raises),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(3, oneway_raises, R),
ok.
-oneway_out(doc) ->
- ["Check that illegal out parameters are detected"];
-oneway_out(suite) -> [];
+%% Check that illegal out parameters are detected
oneway_out(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, one_out),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(2, oneway_outparams, R),
ok.
-oneway_followed(doc) ->
- ["Checks that normal oneways, followed by other operations."];
-oneway_followed(suite) -> [];
+%% Checks that normal oneways, followed by other operations.
oneway_followed(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(oneway_followed),
File = filename:join(DataDir, one_followed),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line ok = compile(OutDir, oneway_followed_files(), [load]),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, oneway_followed_files(), [load]),
+ ok = ic:gen(File, stdopts(OutDir)),
+ ok = compile(OutDir, oneway_followed_files(), [load]),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, oneway_followed_files(), [load]),
ok.
-attr_norm(doc) ->
- ["Checks that normal attr operations works."];
-attr_norm(suite) -> [];
+%% Checks that normal attr operations works.
attr_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(attr_norm),
File = filename:join(DataDir, attr),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line ok = compile(OutDir, attr_norm_files(), [load]),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, attr_norm_files(), [load]),
+ ok = ic:gen(File, stdopts(OutDir)),
+ ok = compile(OutDir, attr_norm_files(), [load]),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, attr_norm_files(), [load]),
ok.
-type_norm(doc) ->
- ["Checks all types are handled."];
-type_norm(suite) -> [];
+%% Checks all types are handled.
type_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(type_norm),
File = filename:join(DataDir, type),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line ok = compile(OutDir, type_norm_files(), [load]),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, type_norm_files(), [load]),
+ ok = ic:gen(File, stdopts(OutDir)),
+ ok = compile(OutDir, type_norm_files(), [load]),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, type_norm_files(), [load]),
ok.
-
-
-syntax1(suite) -> [];
syntax1(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, syntax1),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(1, parse_error, R),
ok.
-syntax2(suite) -> [];
syntax2(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, syntax2),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(1, parse_error, R),
ok.
-syntax3(suite) -> [];
syntax3(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, syntax3),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(1, parse_error, R),
ok.
-syntax4(suite) -> [];
syntax4(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, syntax4),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(1, parse_error, R),
ok.
-syntax5(suite) -> [];
syntax5(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, syntax5),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(1, parse_error, R),
ok.
-syntax6(suite) -> [];
syntax6(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, syntax6),
- ?line error = ic:gen(File, stdopts(OutDir)),
- ?line {error, [], R} =
+ error = ic:gen(File, stdopts(OutDir)),
+ {error, [], R} =
ic:gen(File, stdopts(OutDir)++[silent2]),
check_errors(1, parse_error, R),
ok.
@@ -747,17 +662,15 @@ syntax6(Config) when is_list(Config) ->
%% ( OTP-2102 )
%%
-raises_reg(doc) ->
- ["Check that exceptions are really registered to operations."];
-raises_reg(suite) -> [];
+%% Check that exceptions are really registered to operations.
raises_reg(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(raises_reg_check),
File = filename:join(DataDir, raises_reg),
- ?line ok = ic:gen(File, stdopts(OutDir)),
- ?line {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
- ?line ok = compile(OutDir, raises_reg_files(), [load]),
+ ok = ic:gen(File, stdopts(OutDir)),
+ {ok, []} = ic:gen(File, stdopts(OutDir)++[silent2]),
+ ok = compile(OutDir, raises_reg_files(), [load]),
set_up('oe_raises_reg'),
@@ -924,7 +837,7 @@ to_list(X) -> X.
%% File must be an atom
gen_struct_file(File, Mod) ->
- ?line {ok, Fd} = file:open(to_list(File)++".erl", [write]),
+ {ok, Fd} = file:open(to_list(File)++".erl", [write]),
io:format(Fd, "~n", []),
io:format(Fd, "-module(~p).~n", [Mod]),
io:format(Fd, "-export([test/0]).~n", []),
diff --git a/lib/ic/test/ic_be_SUITE.erl b/lib/ic/test/ic_be_SUITE.erl
index 2fa28fc103..d5d3038a6e 100644
--- a/lib/ic/test/ic_be_SUITE.erl
+++ b/lib/ic/test/ic_be_SUITE.erl
@@ -30,7 +30,7 @@
init_per_group/2,end_per_group/2,plain/1]).
--define(OUT(X), filename:join([?config(priv_dir, Config), gen, to_list(X)])).
+-define(OUT(X), filename:join([proplists:get_value(priv_dir, Config), gen, to_list(X)])).
%% Top of cases
@@ -56,35 +56,20 @@ end_per_group(_GroupName, Config) ->
Config.
-
-
-plain(doc) ->
- ["Checking code for the plain backend."];
-plain(suite) -> [];
+%% Checking code for the plain backend.
plain(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(slask),
File = filename:join(DataDir, plain),
-
- ?line ok = ic:gen(File,stdopts(OutDir)++[{be,erl_plain}]),
-
+ ok = ic:gen(File,stdopts(OutDir)++[{be,erl_plain}]),
ok.
-
-
-
%%--------------------------------------------------------------------
%%
%% Utilities
-
-
stdopts(OutDir) ->
[{outdir, OutDir}, {maxerrs, infinity}].
-
-
-
-
to_list(X) when is_atom(X) -> atom_to_list(X);
to_list(X) -> X.
diff --git a/lib/ic/test/ic_pp_SUITE.erl b/lib/ic/test/ic_pp_SUITE.erl
index 38e936f9bc..be37953126 100644
--- a/lib/ic/test/ic_pp_SUITE.erl
+++ b/lib/ic/test/ic_pp_SUITE.erl
@@ -29,7 +29,7 @@
%% Standard options to the ic compiler, NOTE unholy use of OutDir
--define(OUT(X), filename:join([?config(priv_dir, Config), gen, to_list(X)])).
+-define(OUT(X), filename:join([proplists:get_value(priv_dir, Config), gen, to_list(X)])).
-define(GCC, "g++").
-define(GCC_VER, "2.95.3").
@@ -146,121 +146,100 @@ cases() ->
%%--------------------------------------------------------------------
%% arg
%%--------------------------------------------------------------------
-
-
-arg_norm(doc) -> ["Checks arguments for #define."];
-arg_norm(suite) -> [];
+%% Checks arguments for #define.
arg_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(arg_norm),
File = filename:join(DataDir, arg),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% cascade
%%--------------------------------------------------------------------
-
-
-cascade_norm(doc) -> ["Check cascade #define."];
-cascade_norm(suite) -> [];
+%% Check cascade #define.
cascade_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(cascade_norm),
File = filename:join(DataDir, cascade),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% comment
%%--------------------------------------------------------------------
-
-
-comment_norm(doc) -> ["Check comments."];
-comment_norm(suite) -> [];
+%% Check comments.
comment_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(comment_norm),
File = filename:join(DataDir, comment),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% concat
%%--------------------------------------------------------------------
-
-
-concat_norm(doc) -> ["Check concatinations, i.e ## ."];
-concat_norm(suite) -> [];
+%% Check concatinations, i.e ## .
concat_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(concat_norm),
File = filename:join(DataDir, concat),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% define
%%--------------------------------------------------------------------
-
-
-define_norm(doc) -> ["Check misceleaneous #define."];
-define_norm(suite) -> [];
+%% Check misceleaneous #define.
define_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(define_norm),
File = filename:join(DataDir, define),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% if
%%--------------------------------------------------------------------
-
-if_norm(doc) -> ["Check #if, #elif, and #endif. ."];
-if_norm(suite) -> [];
+%% Check #if, #elif, and #endif.
if_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(if_norm),
File = filename:join(DataDir, 'if'),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
-if_zero(doc) -> ["Check #if 0"];
-if_zero(suite) -> [];
+%% Check #if 0
if_zero(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(if_zero),
File = filename:join(DataDir, if_zero),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% inc
%%--------------------------------------------------------------------
-
-
-inc_norm(doc) -> ["Check #include."];
-inc_norm(suite) -> [];
+%% Check #include.
inc_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(inc_norm),
File = filename:join(DataDir, inc),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
@@ -268,166 +247,133 @@ inc_norm(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
%% improp_nest_constr
%%--------------------------------------------------------------------
-
-
-improp_nest_constr_norm(doc) -> ["Check improperly nested constructs."];
-improp_nest_constr_norm(suite) -> [];
+%% Check improperly nested constructs.
improp_nest_constr_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(improp_nest_constr_norm),
File = filename:join(DataDir, improp_nest_constr),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% misc
%%--------------------------------------------------------------------
-
-
-misc_norm(doc) -> ["Misceleaneous checks."];
-misc_norm(suite) -> [];
+%% Misceleaneous checks.
misc_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(misc_norm),
File = filename:join(DataDir, misc),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% line
%%--------------------------------------------------------------------
-
-
-line_norm(doc) -> ["Checks #line."];
-line_norm(suite) -> [];
+%% Checks #line.
line_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(line_norm),
File = filename:join(DataDir, line),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% nopara
%%--------------------------------------------------------------------
-
-
-nopara_norm(doc) -> ["Checks #define with no parameters."];
-nopara_norm(suite) -> [];
+%% Checks #define with no parameters.
nopara_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(nopara_norm),
File = filename:join(DataDir, nopara),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% predef
%%--------------------------------------------------------------------
-
-
-predef_norm(doc) -> ["Checks predefined macros. Note: not __TIME__ and __DATE__."];
-predef_norm(suite) -> [];
+%% Checks predefined macros. Note: not __TIME__ and __DATE__.
predef_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(predef_norm),
File = filename:join(DataDir, predef),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% predef_time
%%--------------------------------------------------------------------
-
-
-predef_time_norm(doc) -> ["Checks the predefined macros __TIME__ and __DATE__."];
-predef_time_norm(suite) -> [];
+%% Checks the predefined macros __TIME__ and __DATE__.
predef_time_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(predef_time_norm),
File = filename:join(DataDir, predef_time),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% self_ref
%%--------------------------------------------------------------------
-
-
-self_ref_norm(doc) -> ["Checks self referring macros."];
-self_ref_norm(suite) -> [];
+%% Checks self referring macros.
self_ref_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(self_ref_norm),
File = filename:join(DataDir, self_ref),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% separate
%%--------------------------------------------------------------------
-
-
-separate_norm(doc) -> ["Checks separete expansion of macro arguments."];
-separate_norm(suite) -> [];
+%% Checks separete expansion of macro arguments.
separate_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(separate_norm),
File = filename:join(DataDir, separate),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% swallow_sc
%%--------------------------------------------------------------------
-
-
-swallow_sc_norm(doc) -> ["Checks swallowing an undesirable semicolon."];
-swallow_sc_norm(suite) -> [];
+%% Checks swallowing an undesirable semicolon.
swallow_sc_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(swallow_sc_norm),
File = filename:join(DataDir, swallow_sc),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
%%--------------------------------------------------------------------
%% unintended_grp
%%--------------------------------------------------------------------
-
-
-unintended_grp_norm(doc) -> ["Checks unintended grouping of arithmetic."];
-unintended_grp_norm(suite) -> [];
+%% Checks unintended grouping of arithmetic.
unintended_grp_norm(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
_OutDir = ?OUT(unintended_grp_norm),
File = filename:join(DataDir, unintended_grp),
- ?line ok = test_file(File, DataDir),
+ ok = test_file(File, DataDir),
ok.
-
-
-
test_file(FileT, DataDir) ->
case test_file_1(FileT, DataDir) of
ok -> ok;
@@ -441,39 +387,39 @@ test_file_1(FileT, DataDir) ->
FileName = lists:last(Tok),
File = FileT++".idl",
- ?line test_server:format("File ~p~n",[File]),
- ?line test_server:format("FileName ~p~n",[FileName]),
+ test_server:format("File ~p~n",[File]),
+ test_server:format("FileName ~p~n",[FileName]),
Flags = "-I"++DataDir,
- ?line test_server:format("Flags ~p~n",[Flags]),
+ test_server:format("Flags ~p~n",[Flags]),
- ?line Erl = pp_erl(File, Flags),
- ?line Gcc = pp_gcc(File, Flags),
+ Erl = pp_erl(File, Flags),
+ Gcc = pp_gcc(File, Flags),
- ?line case Erl of
+ case Erl of
{error,_ErlError} ->
- ?line test_server:format("Internal_pp Result ~n==================~n~p~n~n",[Erl]);
+ test_server:format("Internal_pp Result ~n==================~n~p~n~n",[Erl]);
{warning, _ErlWar} ->
- ?line test_server:format("Internal_pp Result ~n==================~n~p~n~n",[Erl]);
+ test_server:format("Internal_pp Result ~n==================~n~p~n~n",[Erl]);
_ ->
- ?line test_server:format("Internal_pp Result ~n==================~n~s~n~n",[Erl])
+ test_server:format("Internal_pp Result ~n==================~n~s~n~n",[Erl])
end,
- ?line case Gcc of
+ case Gcc of
{error,GccError} ->
Error = string:tokens(GccError, "\n"),
- ?line test_server:format(?GCC" Result ~n==========~n~p~n~n",
+ test_server:format(?GCC" Result ~n==========~n~p~n~n",
[Error]);
_ ->
- ?line test_server:format(?GCC" Result ~n==========~n~s~n~n",[Gcc])
+ test_server:format(?GCC" Result ~n==========~n~s~n~n",[Gcc])
end,
- ?line case {Erl,Gcc} of
+ case {Erl,Gcc} of
{{warning,W}, {error,X}} ->
- ?line case is_ok(W,X) of
+ case is_ok(W,X) of
yes ->
ok;
no ->
@@ -487,7 +433,7 @@ test_file_1(FileT, DataDir) ->
"Internal_pp found the following Warning = ~p~n",[W]);
{{error,E}, {error,X}} ->
- ?line case is_ok(E,X) of
+ case is_ok(E,X) of
yes ->
ok;
no ->
@@ -496,9 +442,9 @@ test_file_1(FileT, DataDir) ->
end;
{{error,E}, _} ->
- ?line case FileName of
+ case FileName of
"if" ->
- ?line case if_res(E) of
+ case if_res(E) of
ok ->
ok;
_ ->
@@ -516,18 +462,18 @@ test_file_1(FileT, DataDir) ->
_ ->
- ?line file:write_file("/tmp/Erl.pp",list_to_binary(Erl)),
- ?line file:write_file("/tmp/Gcc.pp",list_to_binary(Gcc)),
+ file:write_file("/tmp/Erl.pp",list_to_binary(Erl)),
+ file:write_file("/tmp/Gcc.pp",list_to_binary(Gcc)),
- ?line Res = os:cmd("diff -b -w /tmp/Erl.pp /tmp/Gcc.pp"),
- ?line test_server:format("///////////{error,E} E ~p FileName~p~n",[Res,FileName]),
- ?line case {Res, FileName} of
+ Res = os:cmd("diff -b -w /tmp/Erl.pp /tmp/Gcc.pp"),
+ test_server:format("///////////{error,E} E ~p FileName~p~n",[Res,FileName]),
+ case {Res, FileName} of
{[], _} ->
- ?line test_server:format("Diff = [] OK!!!!!!~n"),
+ test_server:format("Diff = [] OK!!!!!!~n"),
ok;
{_, "predef_time"} ->
Tokens = string:tokens(Res,"\n"),
- ?line test_server:format("///////////{error,E} Tokens~p~n",[Tokens]),
+ test_server:format("///////////{error,E} Tokens~p~n",[Tokens]),
case Tokens of
["3c3",_,"---",_,"5c5",_,"---",_,"9c9",_,"---",_] ->
ok;
diff --git a/lib/ic/test/ic_pragma_SUITE.erl b/lib/ic/test/ic_pragma_SUITE.erl
index 61becf74bf..bb95e59109 100644
--- a/lib/ic/test/ic_pragma_SUITE.erl
+++ b/lib/ic/test/ic_pragma_SUITE.erl
@@ -47,7 +47,7 @@
end).
%% Standard options to the ic compiler, NOTE unholy use of OutDir
--define(OUT(X), filename:join([?config(priv_dir, Config), gen, to_list(X)])).
+-define(OUT(X), filename:join([proplists:get_value(priv_dir, Config), gen, to_list(X)])).
%%-----------------------------------------------------------------
@@ -105,23 +105,21 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Test Case: IFR registration with pragmas
%%-----------------------------------------------------------------
-ifr_pragma_reg(doc) ->
- ["Checks that IFR object is correctly registered under pragma engagement."];
-ifr_pragma_reg(suite) -> [];
+%% Checks that IFR object is correctly registered under pragma engagement.
ifr_pragma_reg(Config) when is_list(Config) ->
?REMAP_EXCEPT(ifr_pragma_reg_run(Config)).
ifr_pragma_reg_run(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(ifr_pragma_reg),
File0 = filename:join(DataDir, reg_m0),
- ?line ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = compile(OutDir, ifr_pragma_files()),
+ ok = compile(OutDir, ifr_pragma_files()),
code:add_pathz(OutDir),
%% OE_register for all files
- ?line ok = 'oe_reg_m0':'oe_register'(),
+ ok = 'oe_reg_m0':'oe_register'(),
%% Pragma registration test
OE_IFR = orber_ifr:find_repository(),
@@ -132,7 +130,7 @@ ifr_pragma_reg_run(Config) ->
check_pragma_effect(OE_IFR,"IDL:P1/M2/T4:2.4"),
%% OE_unregister for all files
- ?line ok = 'oe_reg_m0':'oe_unregister'(),
+ ok = 'oe_reg_m0':'oe_unregister'(),
code:del_path(OutDir),
ok.
@@ -157,14 +155,12 @@ check_pragma_effect(OE_IFR,ID) ->
%%-----------------------------------------------------------------
%% Test Case: Syntactical / Semantical error pragma definitions
%%-----------------------------------------------------------------
-pragma_error(doc) ->
- ["Finds errornous pragma definitions under compilation."];
-pragma_error(suite) -> [];
+%% Finds errornous pragma definitions under compilation.
pragma_error(Config) when is_list(Config) ->
?REMAP_EXCEPT(pragma_error_run(Config)).
pragma_error_run(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(pragma_error),
File1 = filename:join(DataDir, reg_m1),
File2 = filename:join(DataDir, reg_m2),
@@ -173,22 +169,22 @@ pragma_error_run(Config) ->
File5 = filename:join(DataDir, reg_m5),
File6 = filename:join(DataDir, reg_m6),
- ?line error = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
+ error = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line error = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
+ error = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line error = ic:gen(File3, stdopts(OutDir)++[{preproc_flags,
+ error = ic:gen(File3, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line ok = ic:gen(File4, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File4, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line error = ic:gen(File5, stdopts(OutDir)++[{preproc_flags,
+ error = ic:gen(File5, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line error = ic:gen(File6, stdopts(OutDir)++[{preproc_flags,
+ error = ic:gen(File6, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
ok.
@@ -198,25 +194,23 @@ pragma_error_run(Config) ->
%%-----------------------------------------------------------------
%% Test Case: IFR registration with realy uggly placed pragmas
%%-----------------------------------------------------------------
-uggly_pragmas(doc) ->
- ["Checks that IFR object is correctly registered under really uggly pragma engagement."];
-uggly_pragmas(suite) -> [];
+%% Checks that IFR object is correctly registered under really uggly pragma engagement.
uggly_pragmas(Config) when is_list(Config) ->
?REMAP_EXCEPT(uggly_pragmas_run(Config)).
uggly_pragmas_run(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(ifr_pragma_reg),
File0 = filename:join(DataDir, uggly),
- ?line ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = compile(OutDir, uggly_pragma_files()),
+ ok = compile(OutDir, uggly_pragma_files()),
code:add_pathz(OutDir),
%% OE_register for all files
- ?line ok = 'oe_uggly':'oe_register'(),
+ ok = 'oe_uggly':'oe_register'(),
%% Pragma registration test
OE_IFR = orber_ifr:find_repository(),
@@ -234,7 +228,7 @@ uggly_pragmas_run(Config) ->
check_pragma_effect(OE_IFR, "LOCAL:SomeLocalId:23"),
%% OE_unregister for all files
- ?line ok = 'oe_uggly':'oe_unregister'(),
+ ok = 'oe_uggly':'oe_unregister'(),
code:del_path(OutDir),
ok.
diff --git a/lib/ic/test/ic_register_SUITE.erl b/lib/ic/test/ic_register_SUITE.erl
index 5eb50202d7..69eb923f85 100644
--- a/lib/ic/test/ic_register_SUITE.erl
+++ b/lib/ic/test/ic_register_SUITE.erl
@@ -51,7 +51,7 @@
end).
%% Standard options to the ic compiler, NOTE unholy use of OutDir
--define(OUT(X), filename:join([?config(priv_dir, Config), gen, to_list(X)])).
+-define(OUT(X), filename:join([proplists:get_value(priv_dir, Config), gen, to_list(X)])).
%%-----------------------------------------------------------------
@@ -111,39 +111,37 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Test Case: IFR type registration
%%-----------------------------------------------------------------
-ifr_reg_unreg(doc) ->
- ["Checks that the generated register/unregister "
- "code for the IFR is correct."];
-ifr_reg_unreg(suite) -> [];
+%% Checks that the generated register/unregister
+%% code for the IFR is correct.
ifr_reg_unreg(Config) when is_list(Config) ->
?REMAP_EXCEPT(ifr_reg_unregt_run(Config)).
ifr_reg_unregt_run(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(ifr_reg_unreg),
File0 = filename:join(DataDir, reg_m8),
File1 = filename:join(DataDir, reg_m9),
File2 = filename:join(DataDir, reg_m10),
- ?line ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File0, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File0, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File1, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File1, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File2, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File2, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = compile(OutDir, ifr_reg_unreg_files()),
+ ok = compile(OutDir, ifr_reg_unreg_files()),
code:add_pathz(OutDir),
- ?line ok = 'oe_reg_m8':'oe_register'(),
- ?line ok = 'oe_reg_m9':'oe_register'(),
- ?line ok = 'oe_reg_m10':'oe_register'(),
- ?line ok = 'oe_reg_m10':'oe_unregister'(),
- ?line ok = 'oe_reg_m9':'oe_unregister'(),
- ?line ok = 'oe_reg_m8':'oe_unregister'(),
+ ok = 'oe_reg_m8':'oe_register'(),
+ ok = 'oe_reg_m9':'oe_register'(),
+ ok = 'oe_reg_m10':'oe_register'(),
+ ok = 'oe_reg_m10':'oe_unregister'(),
+ ok = 'oe_reg_m9':'oe_unregister'(),
+ ok = 'oe_reg_m8':'oe_unregister'(),
code:del_path(OutDir),
ok.
@@ -155,58 +153,56 @@ ifr_reg_unreg_files() -> ['oe_reg_m8', 'oe_reg_m9', 'oe_reg_m10'].
%% Test Case: IFR registration when object inheritence
%% is applied and registered.
%%-----------------------------------------------------------------
-ifr_reg_unreg_with_inheritence(doc) ->
- ["Checks that the generated register/unregister "
- "code for the IFR is correct, and works even when"
- "the object inheritence is registered. This fixes"
- "two bugs in ifr that caused crash when trying to"
- "use OE_register/OE_unregister in a sequence of"
- "compiled files that contained interfaces who"
- "inherited others in sequence."];
-ifr_reg_unreg_with_inheritence(suite) -> [];
+%% Checks that the generated register/unregister
+%% code for the IFR is correct, and works even when
+%% the object inheritence is registered. This fixes
+%% two bugs in ifr that caused crash when trying to
+%% use OE_register/OE_unregister in a sequence of
+%% compiled files that contained interfaces who
+%% inherited others in sequence.
ifr_reg_unreg_with_inheritence(Config) when is_list(Config) ->
?REMAP_EXCEPT(ifr_reg_unreg_with_inheritence_run(Config)).
ifr_reg_unreg_with_inheritence_run(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(ifr_reg_unreg),
File0 = filename:join(DataDir, reg_m8),
File1 = filename:join(DataDir, reg_m9),
File2 = filename:join(DataDir, reg_m10),
File3 = filename:join(DataDir, reg_m11),
File4 = filename:join(DataDir, reg_m12),
- ?line ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File0, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File0, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File1, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File1, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File2, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File2, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File3, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File3, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File3, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File3, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File4, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File4, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File4, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File4, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = compile(OutDir, ifr_reg_unreg_with_inheritence_files()),
+ ok = compile(OutDir, ifr_reg_unreg_with_inheritence_files()),
code:add_pathz(OutDir),
- ?line ok = 'oe_reg_m8':'oe_register'(),
- ?line ok = 'oe_reg_m9':'oe_register'(),
- ?line ok = 'oe_reg_m10':'oe_register'(),
- ?line ok = 'oe_reg_m11':'oe_register'(),
- ?line ok = 'oe_reg_m12':'oe_register'(),
- ?line ok = 'oe_reg_m8':'oe_unregister'(),
- ?line ok = 'oe_reg_m9':'oe_unregister'(),
- ?line ok = 'oe_reg_m10':'oe_unregister'(),
- ?line ok = 'oe_reg_m11':'oe_unregister'(),
- ?line ok = 'oe_reg_m12':'oe_unregister'(),
+ ok = 'oe_reg_m8':'oe_register'(),
+ ok = 'oe_reg_m9':'oe_register'(),
+ ok = 'oe_reg_m10':'oe_register'(),
+ ok = 'oe_reg_m11':'oe_register'(),
+ ok = 'oe_reg_m12':'oe_register'(),
+ ok = 'oe_reg_m8':'oe_unregister'(),
+ ok = 'oe_reg_m9':'oe_unregister'(),
+ ok = 'oe_reg_m10':'oe_unregister'(),
+ ok = 'oe_reg_m11':'oe_unregister'(),
+ ok = 'oe_reg_m12':'oe_unregister'(),
code:del_path(OutDir),
ok.
@@ -224,35 +220,28 @@ ifr_reg_unreg_with_inheritence_files() ->
%% are not allready registered when the current
%% object is getting registered.
%%-----------------------------------------------------------------
-ifr_reg_unreg_with_inheritence_bad_order(doc) ->
- ["This tests that ifr registration is done with
- the right write order."
- "Modules included and used from an ifr object"
- "are tested if allready registered when the "
- "current object is getting registered."];
-ifr_reg_unreg_with_inheritence_bad_order(suite) -> [];
ifr_reg_unreg_with_inheritence_bad_order(Config) when is_list(Config) ->
?REMAP_EXCEPT(ifr_reg_unreg_with_inheritence_bad_order_run(Config)).
ifr_reg_unreg_with_inheritence_bad_order_run(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(ifr_reg_unreg),
File1 = filename:join(DataDir, reg_m9),
File2 = filename:join(DataDir, reg_m10),
File4 = filename:join(DataDir, reg_m12),
- ?line ok = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File1, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File1, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File2, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File2, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File4, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File4, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File4, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File4, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = compile(OutDir, ifr_reg_unreg_with_inheritence_files()),
+ ok = compile(OutDir, ifr_reg_unreg_with_inheritence_files()),
code:add_pathz(OutDir),
case catch 'oe_reg_m12':'oe_register'() of
{'EXIT',Reason1} ->
@@ -261,7 +250,7 @@ ifr_reg_unreg_with_inheritence_bad_order_run(Config) ->
_ ->
test_server:fail("Failed to detect object missing : IDL:M1:1.0~n")
end,
- ?line ok = 'oe_reg_m9':'oe_register'(),
+ ok = 'oe_reg_m9':'oe_register'(),
case catch 'oe_reg_m10':'oe_register'() of
{'EXIT',Reason2} ->
io:format("IFR object missing detected : ~p~n",[Reason2]),
@@ -269,75 +258,70 @@ ifr_reg_unreg_with_inheritence_bad_order_run(Config) ->
_ ->
test_server:fail("Failed to detect object missing : IDL:M0:1.0~n")
end,
- ?line ok = 'oe_reg_m9':'oe_unregister'(),
+ ok = 'oe_reg_m9':'oe_unregister'(),
code:del_path(OutDir),
ok.
-
-
%%-----------------------------------------------------------------
-%% Test Case: IFR registration with inheritence
+%% Test Case: IFR registration with inheritence is correctly registered
%%-----------------------------------------------------------------
-ifr_inheritence_reg(doc) ->
- ["Checks that IFR object inheritence is correctly registered."];
-ifr_inheritence_reg(suite) -> [];
ifr_inheritence_reg(Config) when is_list(Config) ->
?REMAP_EXCEPT(ifr_inh_reg_run(Config)).
ifr_inh_reg_run(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
OutDir = ?OUT(ifr_reg_unreg),
File0 = filename:join(DataDir, reg_m8),
File1 = filename:join(DataDir, reg_m9),
File2 = filename:join(DataDir, reg_m10),
File3 = filename:join(DataDir, reg_m11),
File4 = filename:join(DataDir, reg_m12),
- ?line ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File0, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File0, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File0, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File1, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File1, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File1, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File2, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File2, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File2, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File3, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File3, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File3, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File3, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = ic:gen(File4, stdopts(OutDir)++[{preproc_flags,
+ ok = ic:gen(File4, stdopts(OutDir)++[{preproc_flags,
"-I" ++ DataDir}] ),
- ?line {ok, []} = ic:gen(File4, stdopts(OutDir)++[silent2, {preproc_flags,
+ {ok, []} = ic:gen(File4, stdopts(OutDir)++[silent2, {preproc_flags,
"-I" ++ DataDir}]),
- ?line ok = compile(OutDir, ifr_reg_unreg_with_inheritence_files()),
+ ok = compile(OutDir, ifr_reg_unreg_with_inheritence_files()),
code:add_pathz(OutDir),
%% OE_register for all files
- ?line ok = 'oe_reg_m8':'oe_register'(),
- ?line ok = 'oe_reg_m9':'oe_register'(),
- ?line ok = 'oe_reg_m10':'oe_register'(),
- ?line ok = 'oe_reg_m11':'oe_register'(),
- ?line ok = 'oe_reg_m12':'oe_register'(),
+ ok = 'oe_reg_m8':'oe_register'(),
+ ok = 'oe_reg_m9':'oe_register'(),
+ ok = 'oe_reg_m10':'oe_register'(),
+ ok = 'oe_reg_m11':'oe_register'(),
+ ok = 'oe_reg_m12':'oe_register'(),
%% Inheritence registration test
OE_IFR = orber_ifr:find_repository(),
%% Interfaces that not inherit from other interfaces
- ?line [] = get_inh(OE_IFR, "IDL:m0/i0:1.0"),
- ?line [] = get_inh(OE_IFR, "IDL:m1/i1:1.0"),
- ?line [] = get_inh(OE_IFR, "IDL:m3/i3:1.0"),
+ [] = get_inh(OE_IFR, "IDL:m0/i0:1.0"),
+ [] = get_inh(OE_IFR, "IDL:m1/i1:1.0"),
+ [] = get_inh(OE_IFR, "IDL:m3/i3:1.0"),
%% Interfaces that inherit from other interfaces
- ?line ["IDL:m1/i1:1.0"] = get_inh(OE_IFR, "IDL:m2/i2:1.0"),
- ?line ["IDL:m1/i1:1.0","IDL:m2/i2:1.0"] = get_inh(OE_IFR, "IDL:m4/i4:1.0"),
- ?line ["IDL:m3/i3:1.0"] = get_inh(OE_IFR, "IDL:m4/i5:1.0"),
+ ["IDL:m1/i1:1.0"] = get_inh(OE_IFR, "IDL:m2/i2:1.0"),
+ ["IDL:m1/i1:1.0","IDL:m2/i2:1.0"] = get_inh(OE_IFR, "IDL:m4/i4:1.0"),
+ ["IDL:m3/i3:1.0"] = get_inh(OE_IFR, "IDL:m4/i5:1.0"),
%% OE_unregister for all files
- ?line ok = 'oe_reg_m8':'oe_unregister'(),
- ?line ok = 'oe_reg_m9':'oe_unregister'(),
- ?line ok = 'oe_reg_m10':'oe_unregister'(),
- ?line ok = 'oe_reg_m11':'oe_unregister'(),
- ?line ok = 'oe_reg_m12':'oe_unregister'(),
+ ok = 'oe_reg_m8':'oe_unregister'(),
+ ok = 'oe_reg_m9':'oe_unregister'(),
+ ok = 'oe_reg_m10':'oe_unregister'(),
+ ok = 'oe_reg_m11':'oe_unregister'(),
+ ok = 'oe_reg_m12':'oe_unregister'(),
code:del_path(OutDir),
ok.
diff --git a/lib/ic/test/java_client_erl_server_SUITE.erl b/lib/ic/test/java_client_erl_server_SUITE.erl
index 50ea3f43ca..9fe52249ba 100644
--- a/lib/ic/test/java_client_erl_server_SUITE.erl
+++ b/lib/ic/test/java_client_erl_server_SUITE.erl
@@ -99,7 +99,7 @@ end_per_suite(Config) -> Config.
%% Add/remove code path and watchdog before/after each test case.
%%
init_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:add_patha(DataDir),
%% Since other test suites use the module m_i et,al, we have
@@ -115,9 +115,9 @@ init_per_testcase(_Case, Config) ->
[{watchdog, WatchDog}| Config].
end_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
code:del_path(DataDir),
- WatchDog = ?config(watchdog, Config),
+ WatchDog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(WatchDog).
@@ -126,127 +126,104 @@ end_per_testcase(_Case, Config) ->
%%
%% Test cases
-marshal_ll(doc) ->
- ["Testing marshalling of IDL long long"];
-marshal_ll(suite) -> [];
+%% Testing marshalling of IDL long long
marshal_ll(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_ll}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_ll}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_ll]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_ull(doc) ->
- ["Testing marshalling of IDL unsigned long long"];
-marshal_ull(suite) -> [];
+%% Testing marshalling of IDL unsigned long long
marshal_ull(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_ull}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_ull}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_ull]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_l(doc) ->
- ["Testing marshalling of IDL long"];
-marshal_l(suite) -> [];
+%% Testing marshalling of IDL long
marshal_l(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_l}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_l}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_l]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_ul(doc) ->
- ["Testing marshalling of IDL unsigned long"];
-marshal_ul(suite) -> [];
+%% Testing marshalling of IDL unsigned long
marshal_ul(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_ul}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_ul}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_ul]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_s(doc) ->
- ["Testing marshalling of IDL short"];
-marshal_s(suite) -> [];
+%% Testing marshalling of IDL short
marshal_s(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_s}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_s}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_s]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_us(doc) ->
- ["Testing marshalling of IDL unsigned short"];
-marshal_us(suite) -> [];
+%% Testing marshalling of IDL unsigned short
marshal_us(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_us}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_us}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_us]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_c(doc) ->
- ["Testing marshalling of IDL char"];
-marshal_c(suite) -> [];
+%% Testing marshalling of IDL char
marshal_c(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_c}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_c}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_c]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_wc(doc) ->
- ["Testing marshalling of IDL char"];
-marshal_wc(suite) -> [];
+%% Testing marshalling of IDL char
marshal_wc(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_wc}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_wc}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_wc]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_str(doc) ->
- ["Testing marshalling of IDL string"];
-marshal_str(suite) -> [];
+%% Testing marshalling of IDL string
marshal_str(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_str}),
- ?line ok = java(?config(java, Config), DataDir,
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_str}),
+ ok = java(proplists:get_value(java, Config), DataDir,
%%% "-DOtpConnection.trace=4 "
"JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_str]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_any_3(doc) ->
- ["Testing marshalling of IDL any"];
-marshal_any_3(suite) -> [];
+%% Testing marshalling of IDL any
marshal_any_3(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_any_3}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_any_3}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_any_3]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
-marshal_any_2(doc) ->
- ["Testing marshalling of IDL any"];
-marshal_any_2(suite) -> [];
marshal_any_2(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line {ok,Server} = m_i:oe_create_link([], {local,marshal_any_2}),
- ?line ok = java(?config(java, Config), DataDir, "JavaClient",
+ DataDir = proplists:get_value(data_dir, Config),
+ {ok,Server} = m_i:oe_create_link([], {local,marshal_any_2}),
+ ok = java(proplists:get_value(java, Config), DataDir, "JavaClient",
["JavaClient",node(),erlang:get_cookie(),marshal_any_2]),
- ?line ok = m_i:stop(Server),
+ ok = m_i:stop(Server),
ok.
%%--------------------------------------------------------------------
diff --git a/lib/inets/doc/src/http_server.xml b/lib/inets/doc/src/http_server.xml
index aeda961714..65b3dcde95 100644
--- a/lib/inets/doc/src/http_server.xml
+++ b/lib/inets/doc/src/http_server.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2015</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -40,8 +40,8 @@
<item>Secure Sockets Layer (SSL)</item>
<item>Erlang Scripting Interface (ESI)</item>
<item>Common Gateway Interface (CGI)</item>
- <item>User Authentication (using <c>Mnesia</c>,
- <c>Dets</c> or plain text database)</item>
+ <item>User Authentication (using Mnesia,
+ Dets or plain text database)</item>
<item>Common Logfile Format (with or without disk_log(3) support)</item>
<item>URL Aliasing</item>
<item>Action Mappings</item>
@@ -563,7 +563,7 @@ http://your.server.org/eval?httpd_example:print(atom_to_list(apply(erlang,halt,[
<title>mod_auth - User Authentication</title>
<p>The <seealso marker="mod_auth">mod_auth(3)</seealso>
module provides for basic user authentication using
- textual files, <c>Dets</c> databases as well as <c>Mnesia</c> databases.</p>
+ textual files, Dets databases as well as Mnesia databases.</p>
<p>Uses the following Erlang Web Server API interaction data:
</p>
<list type="bulleted">
@@ -580,15 +580,15 @@ http://your.server.org/eval?httpd_example:print(atom_to_list(apply(erlang,halt,[
<section>
<title>Mnesia As Authentication Database</title>
- <p>If <c>Mnesia</c> is used as storage method, <c>Mnesia</c> must be
- started before the HTTP server. The first time <c>Mnesia</c> is
+ <p>If Mnesia is used as storage method, Mnesia must be
+ started before the HTTP server. The first time Mnesia is
started, the schema and the tables must be created before
- <c>Mnesia</c> is started. A simple example of a module with two
- functions that creates and start <c>Mnesia</c> is provided
+ Mnesia is started. A simple example of a module with two
+ functions that creates and start Mnesia is provided
here. Function <c>first_start/0</c> is to be used the first
time. It creates the schema and the tables.
<c>start/0</c> is to be used in consecutive startups.
- <c>start/0</c> starts <c>Mnesia</c> and waits for the tables to
+ <c>start/0</c> starts Mnesia and waits for the tables to
be initiated. This function must only be used when the
schema and the tables are already created.</p>
@@ -616,25 +616,25 @@ start() ->
mnesia:start(),
mnesia:wait_for_tables([httpd_user, httpd_group], 60000). </code>
- <p>To create the <c>Mnesia</c> tables, we use two records defined in
+ <p>To create the Mnesia tables, we use two records defined in
<c>mod_auth.hrl</c>, so that file must be included. <c>first_start/0</c>
creates a schema that specifies on which nodes the database is to reside.
- Then it starts <c>Mnesia</c> and creates the tables. The first argument
+ Then it starts Mnesia and creates the tables. The first argument
is the name of the tables, the second argument is a list of options of
how to create the table, see
- <seealso marker="mnesia:mnesia"><c>mnesia</c></seealso>, documentation for
+ <seealso marker="mnesia:mnesia"><c>mnesia(3)</c></seealso>, documentation for
more information. As the implementation of the <c>mod_auth_mnesia</c>
saves one row for each user, the type must be <c>bag</c>.
When the schema and the tables are created, function
<seealso marker="mnesia:mnesia#start-0">mnesia:start/0</seealso>
- is used to start <c>Mnesia</c> and
- waits for the tables to be loaded. <c>Mnesia</c> uses the
+ is used to start Mnesia and
+ waits for the tables to be loaded. Mnesia uses the
directory specified as <c>mnesia_dir</c> at startup if specified,
- otherwise <c>Mnesia</c> uses the current directory. For security
- reasons, ensure that the <c>Mnesia</c> tables are stored outside
+ otherwise Mnesia uses the current directory. For security
+ reasons, ensure that the Mnesia tables are stored outside
the document tree of the HTTP server. If they are placed in the
directory which it protects, clients can download the tables.
- Only the <c>Dets</c> and <c>Mnesia</c> storage
+ Only the Dets and Mnesia storage
methods allow writing of dynamic user data to disk. <c>plain</c> is
a read only method.</p>
</section>
@@ -669,7 +669,7 @@ start() ->
<section>
<title>mod_disk_log - Logging Using Disk_Log.</title>
<p>Standard logging using the "Common Logfile Format" and
- <seealso marker="kernel:disk_log">kernel:disk_log(3)</seealso>.</p>
+ <seealso marker="kernel:disk_log">disk_log(3)</seealso>.</p>
<p>Uses the following Erlang Web Server API interaction data:
</p>
<list type="bulleted">
diff --git a/lib/inets/doc/src/httpc.xml b/lib/inets/doc/src/httpc.xml
index ca9b268a03..13471aab2c 100644
--- a/lib/inets/doc/src/httpc.xml
+++ b/lib/inets/doc/src/httpc.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2004</year><year>2015</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -72,7 +72,7 @@
<p><c>profile() = atom()</c></p>
<p><c>path() = string()</c> representing a file path or directory path</p>
<p><c>ip_address()</c> = See the
- <seealso marker="kernel:inet">inet(3)</seealso> manual page in <c>Kernel</c>.</p>
+ <seealso marker="kernel:inet">inet(3)</seealso> manual page in Kernel.</p>
<p><c>socket_opt()</c> = See the options used by
<seealso marker="kernel:gen_tcp">gen_tcp(3)</seealso> <c>gen_tcp(3)</c> and
<seealso marker="ssl:ssl">ssl(3)</seealso> connect(s)</p>
diff --git a/lib/inets/doc/src/httpd.xml b/lib/inets/doc/src/httpd.xml
index 62b92b8356..d74635fc01 100644
--- a/lib/inets/doc/src/httpd.xml
+++ b/lib/inets/doc/src/httpd.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2015</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -455,7 +455,7 @@ text/plain asc txt</pre>
directory. Several files can be given, in which case the server
returns the first it finds, for example:</p>
- <code>{directory_index, ["index.hml", "welcome.html"]}</code>
+ <code>{directory_index, ["index.html", "welcome.html"]}</code>
<p>Access to http://your.server.org/docs/ would return
http://your.server.org/docs/index.html or
@@ -711,7 +711,7 @@ text/plain asc txt</pre>
<item>
<p>Sets the type of authentication database that is used for the
directory. The key difference between the different methods is
- that dynamic data can be saved when <c>Mnesia</c> and <c>Dets</c>
+ that dynamic data can be saved when Mnesia and Dets
are used.
This property is called <c>AuthDbType</c> in the Apache-like
configuration files.</p>
@@ -731,10 +731,10 @@ text/plain asc txt</pre>
<code> ragnar:s7Xxv7
edward:wwjau8 </code>
- <p>If the <c>Dets</c> storage method is used, the user database is
- maintained by <c>Dets</c> and must not be edited by hand. Use the
+ <p>If the Dets storage method is used, the user database is
+ maintained by Dets and must not be edited by hand. Use the
API functions in module <c>mod_auth</c> to create/edit the user
- database. This directive is ignored if the <c>Mnesia</c>
+ database. This directive is ignored if the Mnesia
storage method is used. For security reasons, ensure that
<c>auth_user_file</c> is stored outside the document tree of the web
server. If it is placed in the directory that it protects,
@@ -753,10 +753,10 @@ text/plain asc txt</pre>
<code>group1: bob joe ante</code>
- <p>If the <c>Dets</c> storage method is used, the group database is
- maintained by <c>Dets</c> and must not be edited by hand. Use the
+ <p>If the Dets storage method is used, the group database is
+ maintained by Dets and must not be edited by hand. Use the
API for module <c>mod_auth</c> to create/edit the group database.
- This directive is ignored if the <c>Mnesia</c> storage method is used.
+ This directive is ignored if the Mnesia storage method is used.
For security reasons, ensure that the <c>auth_group_file</c> is
stored outside the document tree of the web server. If it is
placed in the directory that it protects, clients
diff --git a/lib/inets/doc/src/mod_auth.xml b/lib/inets/doc/src/mod_auth.xml
index 4b7088b2c5..c4f844622b 100644
--- a/lib/inets/doc/src/mod_auth.xml
+++ b/lib/inets/doc/src/mod_auth.xml
@@ -33,7 +33,7 @@
<modulesummary>User authentication using text files, Dets, or Mnesia database.</modulesummary>
<description>
<p>This module provides for basic user authentication using
- textual files, <c>Dets</c> databases, or <c>Mnesia</c> databases.</p>
+ textual files, Dets databases, or Mnesia databases.</p>
</description>
<funcs>
diff --git a/lib/inets/doc/src/mod_esi.xml b/lib/inets/doc/src/mod_esi.xml
index deef010e54..006fca1bdf 100644
--- a/lib/inets/doc/src/mod_esi.xml
+++ b/lib/inets/doc/src/mod_esi.xml
@@ -42,8 +42,7 @@
<taglist>
<tag><c>env() = </c></tag>
<item> <p><c>{EnvKey()::atom(), Value::term()}</c></p>
- </item>
-
+
<p>Currently supported key value pairs</p>
<taglist>
@@ -59,11 +58,12 @@
<tag><c>{server_protocol, string()}</c></tag>
<item><p> HTTP version, currently "HTTP/1.1"</p></item>
- <tag>{server_port, integer()}</tag>
+ <tag><c>{server_port, integer()}</c></tag>
<item><p>Servers port number.</p></item>
- <tag><c>{request_method, "GET | "PUT" | "DELETE | "POST" | "PATCH"}</c></tag>
-
+ <tag><c>{request_method, "GET | "PUT" | "DELETE" | "POST" | "PATCH"}</c></tag>
+ <item><p>HTTP request method.</p></item>
+
<tag><c>{remote_adress, inet:ip_address()} </c></tag>
<item><p>The clients ip address.</p></item>
@@ -81,94 +81,97 @@
<tag><c>{http_LowerCaseHTTPHeaderName, string()}</c></tag>
<item><p>example: {http_content_type, "text/html"}</p></item>
- </taglist>
-
+ </taglist>
+ </item>
</taglist>
+ </section>
- <funcs>
- <func>
- <name>deliver(SessionID, Data) -> ok | {error, Reason}</name>
- <fsummary>Sends <c>Data</c> back to client.</fsummary>
- <type>
+ <funcs>
+ <func>
+ <name>deliver(SessionID, Data) -> ok | {error, Reason}</name>
+ <fsummary>Sends <c>Data</c> back to client.</fsummary>
+ <type>
<v>SessionID = term()</v>
<v>Data = string() | io_list() | binary()</v>
<v>Reason = term()</v>
- </type>
- <desc>
- <marker id="deliver"></marker>
- <p>This function is <em>only</em> intended to be used from
- functions called by the Erl Scheme interface to deliver
- parts of the content to the user.</p>
- <p>Sends data from an Erl Scheme script back to the client.</p>
+ </type>
+ <desc>
+ <marker id="deliver"></marker>
+ <p>This function is <em>only</em> intended to be used from
+ functions called by the Erl Scheme interface to deliver
+ parts of the content to the user.</p>
+ <p>Sends data from an Erl Scheme script back to the client.</p>
- <note>
- <p>If any HTTP header fields are added by the
- script, they must be in the first call to <c>deliver/2</c>,
- and the data in the call must be a string. Calls after the headers
- are complete can contain binary data to reduce copying
- overhead. Do not assume anything about the data type of
- <c>SessionID</c>. <c>SessionID</c> must be the value given
- as input to the ESI callback function that you implemented.</p>
- </note>
- </desc>
- </func>
- </funcs>
- </section>
- <section>
- <title>ESI Callback Functions</title>
- </section>
- <funcs>
- <func>
- <name>Module:Function(SessionID, Env, Input)-> _ </name>
- <fsummary>Creates a dynamic web page and returns it chunk by chunk
- to the server process by calling <c>mod_esi:deliver/2</c>.</fsummary>
- <type>
- <v>SessionID = term()</v>
- <v>Env = env()</v>
- <v>Input = string()</v>
- </type>
+ <note>
+ <p>If any HTTP header fields are added by the
+ script, they must be in the first call to <c>deliver/2</c>,
+ and the data in the call must be a string. Calls after the headers
+ are complete can contain binary data to reduce copying
+ overhead. Do not assume anything about the data type of
+ <c>SessionID</c>. <c>SessionID</c> must be the value given
+ as input to the ESI callback function that you implemented.</p>
+ </note>
+ </desc>
+ </func>
+ </funcs>
+
+ <section>
+ <title>ESI Callback Functions</title>
+ </section>
+
+ <funcs>
+ <func>
+ <name>Module:Function(SessionID, Env, Input)-> _ </name>
+ <fsummary>Creates a dynamic web page and returns it chunk by chunk
+ to the server process by calling <c>mod_esi:deliver/2</c>.</fsummary>
+ <type>
+ <v>SessionID = term()</v>
+ <v>Env = env()</v>
+ <v>Input = string()</v>
+ </type>
<desc>
<p><c>Module</c> must be found in the code path and export
- <c>Function</c> with an arity of three. An <c>erlScriptAlias</c> must
- also be set up in the configuration file for the web server.</p>
+ <c>Function</c> with an arity of three. An <c>erlScriptAlias</c> must
+ also be set up in the configuration file for the web server.</p>
<p>If the HTTP request is a 'post' request and a body is sent,
- <c>content_length</c> is the length of the posted
- data. If 'get' is used, <c>query_string</c> is the data after
- <em>?</em> in the URL.</p>
+ <c>content_length</c> is the length of the posted
+ data. If 'get' is used, <c>query_string</c> is the data after
+ <em>?</em> in the URL.</p>
<p><c>ParsedHeader</c> is the HTTP request as a key-value tuple
- list. The keys in <c>ParsedHeader</c> are in lower case.</p>
+ list. The keys in <c>ParsedHeader</c> are in lower case.</p>
<p><c>SessionID</c> is an identifier
- the server uses when <c>deliver/2</c> is called. Do not
- assume anything about the datatype.</p>
+ the server uses when <c>deliver/2</c> is called. Do not
+ assume anything about the datatype.</p>
<p>Use this callback function to generate dynamic web
- content dynamically. When a part of the page is generated, send the
- data back to the client through <c>deliver/2</c>. Notice
- that the first chunk of data sent to the client must at
- least contain all HTTP header fields that the response
- will generate. If the first chunk does not contain the
- <em>end of HTTP header</em>, that is, <c>"\r\n\r\n",</c>
- the server assumes that no HTTP header fields will be generated.</p>
+ content dynamically. When a part of the page is generated, send the
+ data back to the client through <c>deliver/2</c>. Notice
+ that the first chunk of data sent to the client must at
+ least contain all HTTP header fields that the response
+ will generate. If the first chunk does not contain the
+ <em>end of HTTP header</em>, that is, <c>"\r\n\r\n",</c>
+ the server assumes that no HTTP header fields will be generated.</p>
</desc>
- </func>
- <func>
- <name>Module:Function(Env, Input)-> Response </name>
- <fsummary>Creates a dynamic web page and returns it as a list.
- This function is deprecated and is only kept for backwards compatibility.</fsummary>
- <type>
- <v>Env = env()</v>
- <v>Input = string()</v>
- <v>Response = string()</v>
- </type>
+ </func>
+
+ <func>
+ <name>Module:Function(Env, Input)-> Response </name>
+ <fsummary>Creates a dynamic web page and returns it as a list.
+ This function is deprecated and is only kept for backwards compatibility.</fsummary>
+ <type>
+ <v>Env = env()</v>
+ <v>Input = string()</v>
+ <v>Response = string()</v>
+ </type>
<desc>
<p>This callback format consumes much memory, as the
- whole response must be generated before it is sent to the
- user. This function is deprecated and is only kept for backwards
- compatibility.
- For new development, use <c>Module:Function/3</c>.</p>
+ whole response must be generated before it is sent to the
+ user. This function is deprecated and is only kept for backwards
+ compatibility.
+ For new development, use <c>Module:Function/3</c>.</p>
</desc>
- </func>
- </funcs>
-
+ </func>
+ </funcs>
+
</erlref>
diff --git a/lib/inets/doc/src/notes.xml b/lib/inets/doc/src/notes.xml
index bbfb7947fd..caa5a083a3 100644
--- a/lib/inets/doc/src/notes.xml
+++ b/lib/inets/doc/src/notes.xml
@@ -33,11 +33,64 @@
<file>notes.xml</file>
</header>
- <section><title>Inets 6.3</title>
+ <section><title>Inets 6.3.2</title>
<section><title>Improvements and New Features</title>
<list>
<item>
+ <p>
+ PUT and DELETE support has been added to mod_esi</p>
+ <p>
+ Own Id: OTP-13688 Aux Id: seq13149 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Inets 6.3.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ A debug message was accidently left enabled in the ftp
+ client.</p>
+ <p>
+ Own Id: OTP-13712 Aux Id: seq13143 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Inets 6.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Ftp client fixes: 1) Corrected a bug that the ftp client
+ gen_server crashed if the listening data socket was
+ closed.</p>
+ <p>
+ 2) Corrections of ftp client error codes so they are as
+ defined in the reference manual</p>
+ <p>
+ Own Id: OTP-13644</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p> Remove usage of erlang:now(). </p>
+ <p>
+ Own Id: OTP-12441</p>
+ </item>
+ <item>
<p> Add handling of DELETE Body to http client. </p>
<p>
Own Id: OTP-13383 Aux Id: PR-972 </p>
@@ -47,8 +100,6 @@
Removed references to mod_include and webtool from
examples and tests.</p>
<p>
- Thanks to waisbrot</p>
- <p>
Own Id: OTP-13445 Aux Id: PR-988 </p>
</item>
<item>
@@ -65,6 +116,21 @@
</section>
+<section><title>Inets 6.2.4</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Handle multiple \t in mime types file</p>
+ <p>
+ Own Id: OTP-13663 Aux Id: seq13132 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Inets 6.2.3</title>
<section><title>Improvements and New Features</title>
diff --git a/lib/inets/src/ftp/ftp.erl b/lib/inets/src/ftp/ftp.erl
index db6260c7af..8bad91bf98 100644
--- a/lib/inets/src/ftp/ftp.erl
+++ b/lib/inets/src/ftp/ftp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -1383,12 +1383,18 @@ handle_call({_, {transfer_chunk, Bin}}, _, #state{chunk = true} = State) ->
send_data_message(State, Bin),
{reply, ok, State};
+handle_call({_, {transfer_chunk, _}}, _, #state{chunk = false} = State) ->
+ {reply, {error, echunk}, State};
+
handle_call({_, chunk_end}, From, #state{chunk = true} = State) ->
close_data_connection(State),
activate_ctrl_connection(State),
{noreply, State#state{client = From, dsock = undefined,
caller = end_chunk_transfer, chunk = false}};
+handle_call({_, chunk_end}, _, #state{chunk = false} = State) ->
+ {reply, {error, echunk}, State};
+
handle_call({_, {quote, Cmd}}, From, #state{chunk = false} = State) ->
send_ctrl_message(State, mk_cmd(Cmd, [])),
activate_ctrl_connection(State),
@@ -1769,12 +1775,12 @@ handle_ctrl_result({pos_compl, _Lines},
{LSock, Caller}}} = State) ->
handle_caller(State#state{caller = Caller, dsock = {lsock, LSock}});
-handle_ctrl_result({Status, Lines},
+handle_ctrl_result({Status, _Lines},
#state{mode = active,
caller = {setup_data_connection, {LSock, _}}}
= State) ->
- close_connection(LSock),
- ctrl_result_response(Status, State, {error, Lines});
+ close_connection({tcp,LSock}),
+ ctrl_result_response(Status, State, {error, Status});
%% Data connection setup passive mode
handle_ctrl_result({pos_compl, Lines},
@@ -1965,7 +1971,7 @@ handle_ctrl_result(_, #state{caller = {handle_dir_data_third_phase, DirData},
{noreply, State#state{client = undefined, caller = undefined}};
handle_ctrl_result({Status, _}, #state{caller = cd} = State) ->
- ctrl_result_response(Status, State, {error, epath});
+ ctrl_result_response(Status, State, {error, Status});
handle_ctrl_result(Status={epath, _}, #state{caller = {dir,_}} = State) ->
ctrl_result_response(Status, State, {error, epath});
@@ -1980,11 +1986,11 @@ handle_ctrl_result({pos_interm, _}, #state{caller = {rename, NewFile}}
handle_ctrl_result({Status, _},
#state{caller = {rename, _}} = State) ->
- ctrl_result_response(Status, State, {error, epath});
+ ctrl_result_response(Status, State, {error, Status});
handle_ctrl_result({Status, _},
#state{caller = rename_second_phase} = State) ->
- ctrl_result_response(Status, State, {error, epath});
+ ctrl_result_response(Status, State, {error, Status});
%%--------------------------------------------------------------------------
%% File handling - recv_bin
@@ -2093,9 +2099,9 @@ handle_ctrl_result({pos_prel, _}, #state{caller = {transfer_data, Bin}}
%%--------------------------------------------------------------------------
%% Default
-handle_ctrl_result({Status, Lines}, #state{client = From} = State)
+handle_ctrl_result({Status, _Lines}, #state{client = From} = State)
when From =/= undefined ->
- ctrl_result_response(Status, State, {error, Lines}).
+ ctrl_result_response(Status, State, {error, Status}).
%%--------------------------------------------------------------------------
%% Help functions to handle_ctrl_result
@@ -2113,7 +2119,6 @@ ctrl_result_response(Status, #state{client = From} = State, _)
(Status =:= epnospc) orelse
(Status =:= efnamena) orelse
(Status =:= econn) ->
-%Status == etnospc; Status == epnospc; Status == econn ->
gen_server:reply(From, {error, Status}),
%% {stop, normal, {error, Status}, State#state{client = undefined}};
{stop, normal, State#state{client = undefined}};
@@ -2177,7 +2182,7 @@ handle_caller(#state{caller = {transfer_data, {Cmd, Bin, RemoteFile}}} =
%% Connect to FTP server at Host (default is TCP port 21)
%% in order to establish a control connection.
setup_ctrl_connection(Host, Port, Timeout, State) ->
- MsTime = inets_time_compat:monotonic_time(),
+ MsTime = erlang:monotonic_time(),
case connect(Host, Port, Timeout, State) of
{ok, IpFam, CSock} ->
NewState = State#state{csock = {tcp, CSock}, ipfamily = IpFam},
@@ -2378,6 +2383,7 @@ close_ctrl_connection(#state{csock = Socket}) -> close_connection(Socket).
close_data_connection(#state{dsock = undefined}) -> ok;
close_data_connection(#state{dsock = Socket}) -> close_connection(Socket).
+close_connection({lsock,Socket}) -> gen_tcp:close(Socket);
close_connection({tcp, Socket}) -> gen_tcp:close(Socket);
close_connection({ssl, Socket}) -> ssl:close(Socket).
diff --git a/lib/inets/src/ftp/ftp_response.erl b/lib/inets/src/ftp/ftp_response.erl
index 32db2dfe66..7533bc4550 100644
--- a/lib/inets/src/ftp/ftp_response.erl
+++ b/lib/inets/src/ftp/ftp_response.erl
@@ -194,5 +194,6 @@ interpret_status(?TRANS_NEG_COMPL,_,_) -> trans_neg_compl;
interpret_status(?PERM_NEG_COMPL,?FILE_SYSTEM,0) -> epath;
interpret_status(?PERM_NEG_COMPL,?FILE_SYSTEM,2) -> epnospc;
interpret_status(?PERM_NEG_COMPL,?FILE_SYSTEM,3) -> efnamena;
+interpret_status(?PERM_NEG_COMPL,?AUTH_ACC,0) -> elogin;
interpret_status(?PERM_NEG_COMPL,_,_) -> perm_neg_compl.
diff --git a/lib/inets/src/http_server/httpd_conf.erl b/lib/inets/src/http_server/httpd_conf.erl
index 6a801c973d..9e54f2b2c5 100644
--- a/lib/inets/src/http_server/httpd_conf.erl
+++ b/lib/inets/src/http_server/httpd_conf.erl
@@ -395,7 +395,8 @@ validate_properties(Properties) ->
%% That is, if property A depends on property B.
%% The only sunch preperty at this time is bind_address that depends
%% on ipfamily.
-validate_properties2(Properties) ->
+validate_properties2(Properties0) ->
+ Properties = fix_ipfamily(Properties0),
case proplists:get_value(bind_address, Properties) of
undefined ->
case proplists:get_value(sock_type, Properties, ip_comm) of
@@ -422,6 +423,15 @@ validate_properties2(Properties) ->
end
end.
+fix_ipfamily(Properties) ->
+ case proplists:get_value(ipfamily, Properties) of
+ undefined ->
+ Properties;
+ IpFamily ->
+ NewProps = proplists:delete(ipfamily, Properties),
+ [{ipfamily, validate_ipfamily(IpFamily)} | NewProps]
+ end.
+
add_inet_defaults(Properties) ->
case proplists:get_value(ipfamily, Properties) of
undefined ->
@@ -1004,7 +1014,8 @@ read_config_file(Stream, SoFar) ->
%% Ignore commented lines for efficiency later ..
read_config_file(Stream, SoFar);
Line ->
- NewLine = re:replace(clean(Line),"[\t\r\f ]"," ", [{return,list}]),
+ NewLine = re:replace(white_space_clean(Line),
+ "[\t\r\f ]"," ", [{return,list}, global]),
case NewLine of
[] ->
%% Also ignore empty lines ..
@@ -1020,7 +1031,7 @@ parse_mime_types(Stream,MimeTypesList) ->
eof ->
eof;
String ->
- white_space_clean(String)
+ re:replace(white_space_clean(String), "[\t\r\f ]"," ", [{return,list}, global])
end,
parse_mime_types(Stream, MimeTypesList, Line).
parse_mime_types(Stream, MimeTypesList, eof) ->
@@ -1042,6 +1053,8 @@ parse_mime_types(Stream, MimeTypesList, Line) ->
suffixes(_MimeType,[]) ->
[];
+suffixes(MimeType,[""|Rest]) ->
+ suffixes(MimeType, Rest);
suffixes(MimeType,[Suffix|Rest]) ->
[{Suffix,MimeType}|suffixes(MimeType,Rest)].
diff --git a/lib/inets/src/http_server/httpd_example.erl b/lib/inets/src/http_server/httpd_example.erl
index 424d269859..c893b10dca 100644
--- a/lib/inets/src/http_server/httpd_example.erl
+++ b/lib/inets/src/http_server/httpd_example.erl
@@ -20,7 +20,7 @@
%%
-module(httpd_example).
-export([print/1]).
--export([get/2, post/2, yahoo/2, test1/2, get_bin/2, peer/2]).
+-export([get/2, put/2, post/2, yahoo/2, test1/2, get_bin/2, peer/2]).
-export([newformat/3]).
%% These are used by the inets test-suite
@@ -59,6 +59,11 @@ get(_Env,[]) ->
get(Env,Input) ->
default(Env,Input).
+put(Env,{Input,_Body}) ->
+ default(Env,Input);
+put(Env,Input) ->
+ default(Env,Input).
+
get_bin(_Env,_Input) ->
[list_to_binary(header()),
list_to_binary(top("GET Example")),
@@ -94,7 +99,7 @@ default(Env,Input) ->
io_lib:format("~p",[httpd:parse_query(Input)]),"\n",
footer()].
-peer(Env, Input) ->
+peer(Env, _Input) ->
Header =
case proplists:get_value(peer_cert, Env) of
undefined ->
@@ -161,7 +166,7 @@ sleep(T) -> receive after T -> ok end.
%% ------------------------------------------------------
-chunk_timeout(SessionID, _, StrInt) ->
+chunk_timeout(SessionID, _, _StrInt) ->
mod_esi:deliver(SessionID, "Tranfer-Encoding:chunked/html\r\n\r\n"),
mod_esi:deliver(SessionID, top("Test chunk encoding timeout")),
timer:sleep(20000),
diff --git a/lib/inets/src/http_server/httpd_response.erl b/lib/inets/src/http_server/httpd_response.erl
index c0b5f09faf..1374b7e85e 100644
--- a/lib/inets/src/http_server/httpd_response.erl
+++ b/lib/inets/src/http_server/httpd_response.erl
@@ -390,8 +390,7 @@ send_response_old(#mod{socket_type = Type,
send_header(ModData, StatusCode, [{content_length,
content_length(NewResponse)}]),
httpd_socket:deliver(Type, Sock, NewResponse);
-
- {error, _Reason} ->
+ _ ->
send_status(ModData, 500, "Internal Server Error")
end.
diff --git a/lib/inets/src/http_server/mod_esi.erl b/lib/inets/src/http_server/mod_esi.erl
index 2800250727..b21af1418c 100644
--- a/lib/inets/src/http_server/mod_esi.erl
+++ b/lib/inets/src/http_server/mod_esi.erl
@@ -241,7 +241,7 @@ alias_match_str(Alias, eval_script_alias) ->
%%------------------------ Erl mechanism --------------------------------
erl(#mod{method = Method} = ModData, ESIBody, Modules)
- when (Method =:= "GET") orelse (Method =:= "HEAD") ->
+ when (Method =:= "GET") orelse (Method =:= "HEAD") orelse (Method =:= "DELETE") ->
?hdrt("erl", [{method, Method}]),
case httpd_util:split(ESIBody,":|%3A|/",2) of
{ok, [ModuleName, FuncAndInput]} ->
@@ -264,35 +264,32 @@ erl(#mod{method = Method} = ModData, ESIBody, Modules)
{proceed, [{status,{400, none, BadRequest}} | ModData#mod.data]}
end;
-erl(#mod{request_uri = ReqUri,
- method = "PUT",
- http_version = Version,
- data = Data}, _ESIBody, _Modules) ->
- ?hdrt("erl", [{method, put}]),
- {proceed, [{status,{501,{"PUT", ReqUri, Version},
- ?NICE("Erl mechanism doesn't support method PUT")}}|
- Data]};
-
-erl(#mod{request_uri = ReqUri,
- method = "DELETE",
- http_version = Version,
- data = Data}, _ESIBody, _Modules) ->
- ?hdrt("erl", [{method, delete}]),
- {proceed,[{status,{501,{"DELETE", ReqUri, Version},
- ?NICE("Erl mechanism doesn't support method DELETE")}}|
- Data]};
-
-erl(#mod{request_uri = ReqUri,
- method = "PATCH",
- http_version = Version,
- data = Data}, _ESIBody, _Modules) ->
- ?hdrt("erl", [{method, patch}]),
- {proceed, [{status,{501,{"PATCH", ReqUri, Version},
- ?NICE("Erl mechanism doesn't support method PATCH")}}|
- Data]};
+erl(#mod{method = "PUT", entity_body = Body} = ModData,
+ ESIBody, Modules) ->
+ case httpd_util:split(ESIBody,":|%3A|/",2) of
+ {ok, [ModuleName, FuncAndInput]} ->
+ case httpd_util:split(FuncAndInput,"[\?/]",2) of
+ {ok, [FunctionName, Input]} ->
+ generate_webpage(ModData, ESIBody, Modules,
+ list_to_atom(ModuleName),
+ FunctionName, {Input,Body},
+ [{entity_body, Body} |
+ script_elements(FuncAndInput, Input)]);
+ {ok, [FunctionName]} ->
+ generate_webpage(ModData, ESIBody, Modules,
+ list_to_atom(ModuleName),
+ FunctionName, {undefined,Body},
+ [{entity_body, Body} |
+ script_elements(FuncAndInput, "")]);
+ {ok, BadRequest} ->
+ {proceed,[{status,{400,none, BadRequest}} |
+ ModData#mod.data]}
+ end;
+ {ok, BadRequest} ->
+ {proceed, [{status,{400, none, BadRequest}} | ModData#mod.data]}
+ end;
-erl(#mod{method = "POST",
- entity_body = Body} = ModData, ESIBody, Modules) ->
+erl(#mod{method = "POST", entity_body = Body} = ModData, ESIBody, Modules) ->
?hdrt("erl", [{method, post}]),
case httpd_util:split(ESIBody,":|%3A|/",2) of
{ok,[ModuleName, Function]} ->
@@ -301,7 +298,16 @@ erl(#mod{method = "POST",
Function, Body, [{entity_body, Body}]);
{ok, BadRequest} ->
{proceed,[{status, {400, none, BadRequest}} | ModData#mod.data]}
- end.
+ end;
+
+erl(#mod{request_uri = ReqUri,
+ method = "PATCH",
+ http_version = Version,
+ data = Data}, _ESIBody, _Modules) ->
+ ?hdrt("erl", [{method, patch}]),
+ {proceed, [{status,{501,{"PATCH", ReqUri, Version},
+ ?NICE("Erl mechanism doesn't support method PATCH")}}|
+ Data]}.
generate_webpage(ModData, ESIBody, [all], Module, FunctionName,
Input, ScriptElements) ->
diff --git a/lib/inets/src/http_server/mod_htaccess.erl b/lib/inets/src/http_server/mod_htaccess.erl
index 2bc0d79218..7b742bba24 100644
--- a/lib/inets/src/http_server/mod_htaccess.erl
+++ b/lib/inets/src/http_server/mod_htaccess.erl
@@ -412,8 +412,8 @@ getAuthenticatingDataFromHeader(Info)->
case httpd_util:split(UnCodedString,":",2) of
{ok,[User,PassWord]}->
{user,User,PassWord};
- {error,Error}->
- {error,Error}
+ Other ->
+ {error, Other}
end
end;
BadCredentials ->
diff --git a/lib/inets/src/inets_app/Makefile b/lib/inets/src/inets_app/Makefile
index 1d870c14e8..eb0098dbee 100644
--- a/lib/inets/src/inets_app/Makefile
+++ b/lib/inets/src/inets_app/Makefile
@@ -48,8 +48,7 @@ MODULES = \
inets_app \
inets_sup \
inets_trace \
- inets_lib \
- inets_time_compat
+ inets_lib
INTERNAL_HRL_FILES = inets_internal.hrl
EXTERNAL_HRL_FILES = ../../include/httpd.hrl \
diff --git a/lib/inets/src/inets_app/inets.app.src b/lib/inets/src/inets_app/inets.app.src
index 5706a335d7..eb4be932ac 100644
--- a/lib/inets/src/inets_app/inets.app.src
+++ b/lib/inets/src/inets_app/inets.app.src
@@ -28,7 +28,6 @@
inets_service,
inets_trace,
inets_lib,
- inets_time_compat,
%% FTP
ftp,
diff --git a/lib/inets/src/inets_app/inets_lib.erl b/lib/inets/src/inets_app/inets_lib.erl
index 6e16f5ef6e..8993be29e4 100644
--- a/lib/inets/src/inets_app/inets_lib.erl
+++ b/lib/inets/src/inets_app/inets_lib.erl
@@ -27,7 +27,7 @@
%% Help function, elapsed milliseconds since T0
millisec_passed({_,_,_} = T0 ) ->
%% OTP 17 and earlier
- timer:now_diff(inets_time_compat:timestamp(), T0) div 1000;
+ timer:now_diff(erlang:timestamp(), T0) div 1000;
millisec_passed(T0) ->
%% OTP 18
diff --git a/lib/inets/src/inets_app/inets_time_compat.erl b/lib/inets/src/inets_app/inets_time_compat.erl
deleted file mode 100644
index 475f0685dc..0000000000
--- a/lib/inets/src/inets_app/inets_time_compat.erl
+++ /dev/null
@@ -1,72 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2015-2015. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%% This module is created to be able to execute on ERTS versions both
-%% earlier and later than 7.0.
-
--module(inets_time_compat).
-
-%% We don't want warnings about the use of erlang:now/0 in
-%% this module.
--compile(nowarn_deprecated_function).
-
--export([monotonic_time/0,
- timestamp/0,
- unique_integer/0,
- unique_integer/1]).
-
-monotonic_time() ->
- try
- erlang:monotonic_time()
- catch
- error:undef ->
- %% Use Erlang system time as monotonic time
- erlang_system_time_fallback()
- end.
-
-timestamp() ->
- try
- erlang:timestamp()
- catch
- error:undef ->
- erlang:now()
- end.
-
-unique_integer() ->
- try
- erlang:unique_integer()
- catch
- error:undef ->
- erlang_system_time_fallback()
- end.
-
-unique_integer(Modifiers) ->
- try
- erlang:unique_integer(Modifiers)
- catch
- error:badarg ->
- erlang:error(badarg, [Modifiers]);
- error:undef ->
- erlang_system_time_fallback()
- end.
-
-erlang_system_time_fallback() ->
- {MS, S, US} = erlang:now(),
- (MS*1000000+S)*1000000+US.
diff --git a/lib/inets/src/tftp/tftp_logger.erl b/lib/inets/src/tftp/tftp_logger.erl
index 5e5d1d56c7..a869958484 100644
--- a/lib/inets/src/tftp/tftp_logger.erl
+++ b/lib/inets/src/tftp/tftp_logger.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -85,7 +85,7 @@ info_msg(Format, Data) ->
%%-------------------------------------------------------------------
add_timestamp(Format, Data) ->
- Time = inets_time_compat:timestamp(),
+ Time = erlang:timestamp(),
{{_Y, _Mo, _D}, {H, Mi, S}} = calendar:now_to_universal_time(Time),
%% {"~p-~s-~sT~s:~s:~sZ,~6.6.0w tftp: " ++ Format ++ "\n",
%% [Y, t(Mo), t(D), t(H), t(Mi), t(S), MicroSecs | Data]}.
diff --git a/lib/inets/src/tftp/tftp_sup.erl b/lib/inets/src/tftp/tftp_sup.erl
index 98b92cc87c..40b67c499c 100644
--- a/lib/inets/src/tftp/tftp_sup.erl
+++ b/lib/inets/src/tftp/tftp_sup.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -94,7 +94,7 @@ unique_name(Options) ->
{value, {_, Port}} when is_integer(Port), Port > 0 ->
{tftpd, Port};
_ ->
- {tftpd, inets_time_compat:unique_integer([positive])}
+ {tftpd, erlang:unique_integer([positive])}
end.
default_kill_after() ->
diff --git a/lib/inets/test/Makefile b/lib/inets/test/Makefile
index 65983c528d..ffc512050a 100644
--- a/lib/inets/test/Makefile
+++ b/lib/inets/test/Makefile
@@ -151,7 +151,6 @@ MODULES = \
inets_test_lib \
erl_make_certs \
ftp_SUITE \
- ftp_suite_lib \
ftp_format_SUITE \
http_format_SUITE \
httpc_SUITE \
@@ -169,8 +168,6 @@ MODULES = \
httpd_test_lib \
inets_sup_SUITE \
inets_SUITE \
- inets_app_test \
- inets_appup_test \
tftp_test_lib \
tftp_SUITE \
uri_SUITE \
diff --git a/lib/inets/test/ftp_SUITE.erl b/lib/inets/test/ftp_SUITE.erl
index cc40377ebf..e2dec0c42a 100644
--- a/lib/inets/test/ftp_SUITE.erl
+++ b/lib/inets/test/ftp_SUITE.erl
@@ -42,18 +42,25 @@
-define(BAD_USER, "baduser").
-define(BAD_DIR, "baddirectory").
-go() -> ct:run_test([{suite,"ftp_SUITE"}, {logdir,"LOG"}]).
-gos() -> ct:run_test([{suite,"ftp_SUITE"}, {group,ftps_passive}, {logdir,"LOG"}]).
+-record(progress, {
+ current = 0,
+ total
+ }).
%%--------------------------------------------------------------------
%% Common Test interface functions -----------------------------------
%%--------------------------------------------------------------------
+suite() ->
+ [{timetrap,{seconds,20}}].
+
all() ->
[
{group, ftp_passive},
{group, ftp_active},
{group, ftps_passive},
- {group, ftps_active}
+ {group, ftps_active},
+ error_ehost,
+ clean_shutdown
].
groups() ->
@@ -90,7 +97,13 @@ ftp_tests()->
recv_chunk,
type,
quote,
- ip_v6_disabled
+ error_elogin,
+ progress_report_send,
+ progress_report_recv,
+ not_owner,
+ unexpected_call,
+ unexpected_cast,
+ unexpected_bang
].
%%--------------------------------------------------------------------
@@ -101,6 +114,7 @@ ftp_tests()->
%%% ftpservers list of servers to check if they are available
%%% The element is:
%%% {Name, % string(). The os command name
+%%% Path, % string(). The os PATH syntax, e.g "/bin:/usr/bin"
%%% StartCommand, % fun()->{ok,start_result()} | {error,string()}.
%%% % The command to start the daemon with.
%%% ChkUp, % fun(start_result()) -> string(). Os command to check
@@ -116,12 +130,13 @@ ftp_tests()->
-define(default_ftp_servers,
[{"vsftpd",
- fun(__CONF__) ->
- DataDir = ?config(data_dir,__CONF__),
+ "/sbin:/usr/sbin:/usr/local/sbin",
+ fun(__CONF__, AbsName) ->
+ DataDir = proplists:get_value(data_dir,__CONF__),
ConfFile = filename:join(DataDir, "vsftpd.conf"),
- PrivDir = ?config(priv_dir,__CONF__),
+ PrivDir = proplists:get_value(priv_dir,__CONF__),
AnonRoot = PrivDir,
- Cmd = ["vsftpd "++filename:join(DataDir,"vsftpd.conf"),
+ Cmd = [AbsName ++" "++filename:join(DataDir,"vsftpd.conf"),
" -oftpd_banner=erlang_otp_testing",
" -oanon_root=\"",AnonRoot,"\"",
" -orsa_cert_file=\"",filename:join(DataDir,"server-cert.pem"),"\"",
@@ -145,7 +160,7 @@ ftp_tests()->
fun(_StartResult) -> os:cmd("kill `ps ax | grep erlang_otp_testing | awk '/vsftpd/{print $1}'`")
end,
fun(__CONF__) ->
- AnonRoot = ?config(priv_dir,__CONF__),
+ AnonRoot = proplists:get_value(priv_dir,__CONF__),
[{id2ftp, fun(Id) -> filename:join(AnonRoot,Id) end},
{id2ftp_result,fun(Id) -> filename:join(AnonRoot,Id) end} | __CONF__]
end,
@@ -161,9 +176,9 @@ init_per_suite(Config) ->
false ->
{skip, "No ftp server found"};
{ok,Data} ->
- TstDir = filename:join(?config(priv_dir,Config), "test"),
+ TstDir = filename:join(proplists:get_value(priv_dir,Config), "test"),
file:make_dir(TstDir),
- make_cert_files(dsa, rsa, "server-", ?config(data_dir,Config)),
+ make_cert_files(dsa, rsa, "server-", proplists:get_value(data_dir,Config)),
start_ftpd([{test_dir,TstDir},
{ftpd_data,Data}
| Config])
@@ -181,42 +196,49 @@ init_per_group(_Group, Config) -> Config.
end_per_group(_Group, Config) -> Config.
%%--------------------------------------------------------------------
-init_per_testcase(Case, Config0) ->
- Group = proplists:get_value(name,?config(tc_group_properties,Config0)),
- try ?MODULE:Case(doc) of
- Msg -> ct:comment(Msg)
- catch
- _:_-> ok
- end,
+init_per_testcase(Case, Config0) ->
+ Group = proplists:get_value(name, proplists:get_value(tc_group_properties,Config0)),
TLS = [{tls,[{reuse_sessions,true}]}],
ACTIVE = [{mode,active}],
PASSIVE = [{mode,passive}],
- ExtraOpts = [verbose],
+ CaseOpts = case Case of
+ progress_report_send -> [{progress, {?MODULE,progress,#progress{}}}];
+ progress_report_recv -> [{progress, {?MODULE,progress,#progress{}}}];
+ _ -> []
+ end,
+ ExtraOpts = [verbose | CaseOpts],
Config =
case Group of
- ftp_active -> ftp__open(Config0, ACTIVE ++ExtraOpts);
- ftps_active -> ftp__open(Config0, TLS++ ACTIVE ++ExtraOpts);
- ftp_passive -> ftp__open(Config0, PASSIVE ++ExtraOpts);
- ftps_passive -> ftp__open(Config0, TLS++PASSIVE ++ExtraOpts)
+ ftp_active -> ftp__open(Config0, ACTIVE ++ ExtraOpts);
+ ftps_active -> ftp__open(Config0, TLS++ ACTIVE ++ ExtraOpts);
+ ftp_passive -> ftp__open(Config0, PASSIVE ++ ExtraOpts);
+ ftps_passive -> ftp__open(Config0, TLS++PASSIVE ++ ExtraOpts);
+ undefined -> Config0
end,
case Case of
- user -> Config;
- bad_user -> Config;
+ user -> Config;
+ bad_user -> Config;
+ error_elogin -> Config;
+ error_ehost -> Config;
+ clean_shutdown -> Config;
_ ->
- Pid = ?config(ftp,Config),
+ Pid = proplists:get_value(ftp,Config),
ok = ftp:user(Pid, ?FTP_USER, ?FTP_PASS(atom_to_list(Group)++"-"++atom_to_list(Case)) ),
- ok = ftp:cd(Pid, ?config(priv_dir,Config)),
+ ok = ftp:cd(Pid, proplists:get_value(priv_dir,Config)),
Config
end.
end_per_testcase(user, _Config) -> ok;
end_per_testcase(bad_user, _Config) -> ok;
+end_per_testcase(error_elogin, _Config) -> ok;
+end_per_testcase(error_ehost, _Config) -> ok;
+end_per_testcase(clean_shutdown, _Config) -> ok;
end_per_testcase(_Case, Config) ->
- case ?config(tc_status,Config) of
+ case proplists:get_value(tc_status,Config) of
ok -> ok;
_ ->
- try ftp:latest_ctrl_response(?config(ftp,Config))
+ try ftp:latest_ctrl_response(proplists:get_value(ftp,Config))
of
{ok,S} -> ct:log("***~n*** Latest ctrl channel response:~n*** ~p~n***",[S])
catch
@@ -228,51 +250,57 @@ end_per_testcase(_Case, Config) ->
%%--------------------------------------------------------------------
%% Test Cases --------------------------------------------------------
%%--------------------------------------------------------------------
-user(doc) -> ["Open an ftp connection to a host, and logon as anonymous ftp, then logoff"];
+user() -> [
+ {doc, "Open an ftp connection to a host, and logon as anonymous ftp,"
+ " then logoff"}].
user(Config) ->
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:user(Pid, ?FTP_USER, ?FTP_PASS("")),% logon
ok = ftp:close(Pid), % logoff
{error,eclosed} = ftp:pwd(Pid), % check logoff result
ok.
%%-------------------------------------------------------------------------
-bad_user(doc) -> ["Open an ftp connection to a host, and logon with bad user."];
+bad_user() ->
+ [{doc, "Open an ftp connection to a host, and logon with bad user."}].
bad_user(Config) ->
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
{error, euser} = ftp:user(Pid, ?BAD_USER, ?FTP_PASS("")),
ok.
%%-------------------------------------------------------------------------
-pwd(doc) -> ["Test ftp:pwd/1 & ftp:lpwd/1"];
+pwd() ->
+ [{doc, "Test ftp:pwd/1 & ftp:lpwd/1"}].
pwd(Config0) ->
Config = set_state([reset], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
{ok, PWD} = ftp:pwd(Pid),
{ok, PathLpwd} = ftp:lpwd(Pid),
PWD = id2ftp_result("", Config),
PathLpwd = id2ftp_result("", Config).
%%-------------------------------------------------------------------------
-cd(doc) -> ["Open an ftp connection, log on as anonymous ftp, and cd to a"
- "directory and to a non-existent directory."];
+cd() ->
+ ["Open an ftp connection, log on as anonymous ftp, and cd to a"
+ "directory and to a non-existent directory."].
cd(Config0) ->
Dir = "test",
Config = set_state([reset,{mkdir,Dir}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:cd(Pid, id2ftp(Dir,Config)),
{ok, PWD} = ftp:pwd(Pid),
ExpectedPWD = id2ftp_result(Dir, Config),
PWD = ExpectedPWD,
- {error, epath} = ftp:cd(Pid, ?BAD_DIR).
+ {error, epath} = ftp:cd(Pid, ?BAD_DIR),
+ ok.
%%-------------------------------------------------------------------------
-lcd(doc) ->
- ["Test api function ftp:lcd/2"];
+lcd() ->
+ [{doc, "Test api function ftp:lcd/2"}].
lcd(Config0) ->
Dir = "test",
Config = set_state([reset,{mkdir,Dir}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:lcd(Pid, id2ftp(Dir,Config)),
{ok, PWD} = ftp:lpwd(Pid),
ExpectedPWD = id2ftp_result(Dir, Config),
@@ -280,19 +308,20 @@ lcd(Config0) ->
{error, epath} = ftp:lcd(Pid, ?BAD_DIR).
%%-------------------------------------------------------------------------
-ls(doc) -> ["Open an ftp connection; ls the current directory, and the "
- "\"test\" directory. We assume that ls never fails, since "
- "it's output is meant to be read by humans. "];
+ls() ->
+ [{doc, "Open an ftp connection; ls the current directory, and the "
+ "\"test\" directory. We assume that ls never fails, since "
+ "it's output is meant to be read by humans. "}].
ls(Config0) ->
Config = set_state([reset,{mkdir,"test"}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
{ok, _R1} = ftp:ls(Pid),
{ok, _R2} = ftp:ls(Pid, id2ftp("test",Config)),
%% neither nlist nor ls operates on a directory
%% they operate on a pathname, which *can* be a
%% directory, but can also be a filename or a group
%% of files (including wildcards).
- case ?config(wildcard_support, Config) of
+ case proplists:get_value(wildcard_support, Config) of
true ->
{ok, _R3} = ftp:ls(Pid, id2ftp("te*",Config));
_ ->
@@ -300,20 +329,21 @@ ls(Config0) ->
end.
%%-------------------------------------------------------------------------
-nlist(doc) -> ["Open an ftp connection; nlist the current directory, and the "
+nlist() ->
+ [{doc,"Open an ftp connection; nlist the current directory, and the "
"\"test\" directory. Nlist does not behave consistenly over "
"operating systems. On some it is an error to have an empty "
- "directory."];
+ "directory."}].
nlist(Config0) ->
Config = set_state([reset,{mkdir,"test"}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
{ok, _R1} = ftp:nlist(Pid),
{ok, _R2} = ftp:nlist(Pid, id2ftp("test",Config)),
%% neither nlist nor ls operates on a directory
%% they operate on a pathname, which *can* be a
%% directory, but can also be a filename or a group
%% of files (including wildcards).
- case ?config(wildcard_support, Config) of
+ case proplists:get_value(wildcard_support, Config) of
true ->
{ok, _R3} = ftp:nlist(Pid, id2ftp("te*",Config));
_ ->
@@ -321,141 +351,176 @@ nlist(Config0) ->
end.
%%-------------------------------------------------------------------------
-rename(doc) -> ["Rename a file."];
+rename() ->
+ [{doc, "Rename a file."}].
rename(Config0) ->
Contents = <<"ftp_SUITE test ...">>,
OldFile = "old.txt",
NewFile = "new.txt",
Config = set_state([reset,{mkfile,OldFile,Contents}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:rename(Pid,
id2ftp(OldFile,Config),
id2ftp(NewFile,Config)),
true = (chk_file(NewFile,Contents,Config)
- and chk_no_file([OldFile],Config)).
-
+ and chk_no_file([OldFile],Config)),
+ {error,epath} = ftp:rename(Pid,
+ id2ftp("non_existing_file",Config),
+ id2ftp(NewFile,Config)),
+ ok.
%%-------------------------------------------------------------------------
-send(doc) -> ["Transfer a file with ftp using send/2."];
+send() ->
+ [{doc, "Transfer a file with ftp using send/2."}].
send(Config0) ->
Contents = <<"ftp_SUITE test ...">>,
SrcDir = "data",
File = "file.txt",
Config = set_state([reset,{mkfile,[SrcDir,File],Contents}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
-chk_no_file([File],Config),
-chk_file([SrcDir,File],Contents,Config),
+ chk_no_file([File],Config),
+ chk_file([SrcDir,File],Contents,Config),
ok = ftp:lcd(Pid, id2ftp(SrcDir,Config)),
ok = ftp:cd(Pid, id2ftp("",Config)),
ok = ftp:send(Pid, File),
+ chk_file(File, Contents, Config),
- chk_file(File, Contents, Config).
+ {error,epath} = ftp:send(Pid, "non_existing_file"),
+ ok.
%%-------------------------------------------------------------------------
-send_3(doc) -> ["Transfer a file with ftp using send/3."];
+send_3() ->
+ [{doc, "Transfer a file with ftp using send/3."}].
send_3(Config0) ->
Contents = <<"ftp_SUITE test ...">>,
Dir = "incoming",
File = "file.txt",
RemoteFile = "remfile.txt",
Config = set_state([reset,{mkfile,File,Contents},{mkdir,Dir}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:cd(Pid, id2ftp(Dir,Config)),
ok = ftp:lcd(Pid, id2ftp("",Config)),
ok = ftp:send(Pid, File, RemoteFile),
+ chk_file([Dir,RemoteFile], Contents, Config),
- chk_file([Dir,RemoteFile], Contents, Config).
+ {error,epath} = ftp:send(Pid, "non_existing_file", RemoteFile),
+ ok.
%%-------------------------------------------------------------------------
-send_bin(doc) -> ["Send a binary."];
+send_bin() ->
+ [{doc, "Send a binary."}].
send_bin(Config0) ->
BinContents = <<"ftp_SUITE test ...">>,
File = "file.txt",
Config = set_state([reset], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
{error, enotbinary} = ftp:send_bin(Pid, "some string", id2ftp(File,Config)),
ok = ftp:send_bin(Pid, BinContents, id2ftp(File,Config)),
- chk_file(File, BinContents, Config).
+ chk_file(File, BinContents, Config),
+ {error, efnamena} = ftp:send_bin(Pid, BinContents, "/nothere"),
+ ok.
%%-------------------------------------------------------------------------
-send_chunk(doc) -> ["Send a binary using chunks."];
+send_chunk() ->
+ [{doc, "Send a binary using chunks."}].
send_chunk(Config0) ->
- Contents = <<"ftp_SUITE test ...">>,
+ Contents1 = <<"1: ftp_SUITE test ...">>,
+ Contents2 = <<"2: ftp_SUITE test ...">>,
File = "file.txt",
Config = set_state([reset,{mkdir,"incoming"}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:send_chunk_start(Pid, id2ftp(File,Config)),
+ {error, echunk} = ftp:send_chunk_start(Pid, id2ftp(File,Config)),
{error, echunk} = ftp:cd(Pid, "incoming"),
{error, enotbinary} = ftp:send_chunk(Pid, "some string"),
- ok = ftp:send_chunk(Pid, Contents),
- ok = ftp:send_chunk(Pid, Contents),
+ ok = ftp:send_chunk(Pid, Contents1),
+ ok = ftp:send_chunk(Pid, Contents2),
ok = ftp:send_chunk_end(Pid),
- chk_file(File, <<Contents/binary,Contents/binary>>, Config).
+ chk_file(File, <<Contents1/binary,Contents2/binary>>, Config),
+
+ {error, echunk} = ftp:send_chunk(Pid, Contents1),
+ {error, echunk} = ftp:send_chunk_end(Pid),
+ {error, efnamena} = ftp:send_chunk_start(Pid, "/"),
+ ok.
%%-------------------------------------------------------------------------
-delete(doc) -> ["Delete a file."];
+delete() ->
+ [{doc, "Delete a file."}].
delete(Config0) ->
Contents = <<"ftp_SUITE test ...">>,
File = "file.txt",
Config = set_state([reset,{mkfile,File,Contents}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:delete(Pid, id2ftp(File,Config)),
- chk_no_file([File], Config).
+ chk_no_file([File], Config),
+ {error,epath} = ftp:delete(Pid, id2ftp(File,Config)),
+ ok.
%%-------------------------------------------------------------------------
-mkdir(doc) -> ["Make a remote directory."];
+mkdir() ->
+ [{doc, "Make a remote directory."}].
mkdir(Config0) ->
NewDir = "new_dir",
Config = set_state([reset], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:mkdir(Pid, id2ftp(NewDir,Config)),
- chk_dir([NewDir], Config).
+ chk_dir([NewDir], Config),
+ {error,epath} = ftp:mkdir(Pid, id2ftp(NewDir,Config)),
+ ok.
%%-------------------------------------------------------------------------
-rmdir(doc) -> ["Remove a directory."];
+rmdir() ->
+ [{doc, "Remove a directory."}].
rmdir(Config0) ->
Dir = "dir",
Config = set_state([reset,{mkdir,Dir}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:rmdir(Pid, id2ftp(Dir,Config)),
- chk_no_dir([Dir], Config).
+ chk_no_dir([Dir], Config),
+ {error,epath} = ftp:rmdir(Pid, id2ftp(Dir,Config)),
+ ok.
%%-------------------------------------------------------------------------
-append(doc) -> ["Append a local file twice to a remote file"];
+append() ->
+ [{doc, "Append a local file twice to a remote file"}].
append(Config0) ->
SrcFile = "f_src.txt",
DstFile = "f_dst.txt",
Contents = <<"ftp_SUITE test ...">>,
Config = set_state([reset,{mkfile,SrcFile,Contents}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:append(Pid, id2ftp(SrcFile,Config), id2ftp(DstFile,Config)),
ok = ftp:append(Pid, id2ftp(SrcFile,Config), id2ftp(DstFile,Config)),
- chk_file(DstFile, <<Contents/binary,Contents/binary>>, Config).
+ chk_file(DstFile, <<Contents/binary,Contents/binary>>, Config),
+ {error,epath} = ftp:append(Pid, id2ftp("non_existing_file",Config), id2ftp(DstFile,Config)),
+ ok.
%%-------------------------------------------------------------------------
-append_bin(doc) -> ["Append a local file twice to a remote file using append_bin"];
+append_bin() ->
+ [{doc, "Append a local file twice to a remote file using append_bin"}].
append_bin(Config0) ->
DstFile = "f_dst.txt",
Contents = <<"ftp_SUITE test ...">>,
Config = set_state([reset], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:append_bin(Pid, Contents, id2ftp(DstFile,Config)),
ok = ftp:append_bin(Pid, Contents, id2ftp(DstFile,Config)),
chk_file(DstFile, <<Contents/binary,Contents/binary>>, Config).
%%-------------------------------------------------------------------------
-append_chunk(doc) -> ["Append chunks."];
+append_chunk() ->
+ [{doc, "Append chunks."}].
append_chunk(Config0) ->
File = "f_dst.txt",
Contents = [<<"ER">>,<<"LE">>,<<"RL">>],
Config = set_state([reset], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:append_chunk_start(Pid, id2ftp(File,Config)),
{error, enotbinary} = ftp:append_chunk(Pid, binary_to_list(lists:nth(1,Contents))),
ok = ftp:append_chunk(Pid,lists:nth(1,Contents)),
@@ -465,53 +530,62 @@ append_chunk(Config0) ->
chk_file(File, <<"ERLERL">>, Config).
%%-------------------------------------------------------------------------
-recv(doc) -> ["Receive a file using recv/2"];
+recv() ->
+ [{doc, "Receive a file using recv/2"}].
recv(Config0) ->
File = "f_dst.txt",
SrcDir = "a_dir",
Contents = <<"ftp_SUITE test ...">>,
Config = set_state([reset, {mkfile,[SrcDir,File],Contents}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:cd(Pid, id2ftp(SrcDir,Config)),
ok = ftp:lcd(Pid, id2ftp("",Config)),
ok = ftp:recv(Pid, File),
- chk_file(File, Contents, Config).
+ chk_file(File, Contents, Config),
+ {error,epath} = ftp:recv(Pid, "non_existing_file"),
+ ok.
%%-------------------------------------------------------------------------
-recv_3(doc) -> ["Receive a file using recv/3"];
+recv_3() ->
+ [{doc,"Receive a file using recv/3"}].
recv_3(Config0) ->
DstFile = "f_src.txt",
SrcFile = "f_dst.txt",
Contents = <<"ftp_SUITE test ...">>,
Config = set_state([reset, {mkfile,SrcFile,Contents}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:cd(Pid, id2ftp("",Config)),
ok = ftp:recv(Pid, SrcFile, id2abs(DstFile,Config)),
chk_file(DstFile, Contents, Config).
%%-------------------------------------------------------------------------
-recv_bin(doc) -> ["Receive a file as a binary."];
+recv_bin() ->
+ [{doc, "Receive a file as a binary."}].
recv_bin(Config0) ->
File = "f_dst.txt",
Contents = <<"ftp_SUITE test ...">>,
Config = set_state([reset, {mkfile,File,Contents}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
{ok,Received} = ftp:recv_bin(Pid, id2ftp(File,Config)),
- find_diff(Received, Contents).
+ find_diff(Received, Contents),
+ {error,epath} = ftp:recv_bin(Pid, id2ftp("non_existing_file",Config)),
+ ok.
%%-------------------------------------------------------------------------
-recv_chunk(doc) -> ["Receive a file using chunk-wise."];
+recv_chunk() ->
+ [{doc, "Receive a file using chunk-wise."}].
recv_chunk(Config0) ->
File = "big_file.txt",
Contents = list_to_binary( lists:duplicate(1000, lists:seq(0,255)) ),
Config = set_state([reset, {mkfile,File,Contents}], Config0),
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
{{error, "ftp:recv_chunk_start/2 not called"},_} = recv_chunk(Pid, <<>>),
ok = ftp:recv_chunk_start(Pid, id2ftp(File,Config)),
{ok, ReceivedContents, _Ncunks} = recv_chunk(Pid, <<>>),
find_diff(ReceivedContents, Contents).
-recv_chunk(Pid, Acc) -> recv_chunk(Pid, Acc, 0).
+recv_chunk(Pid, Acc) ->
+ recv_chunk(Pid, Acc, 0).
recv_chunk(Pid, Acc, N) ->
case ftp:recv_chunk(Pid) of
@@ -521,18 +595,18 @@ recv_chunk(Pid, Acc, N) ->
end.
%%-------------------------------------------------------------------------
-type(doc) -> ["Test that we can change btween ASCCI and binary transfer mode"];
+type() ->
+ [{doc,"Test that we can change btween ASCCI and binary transfer mode"}].
type(Config) ->
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
ok = ftp:type(Pid, ascii),
ok = ftp:type(Pid, binary),
ok = ftp:type(Pid, ascii),
{error, etype} = ftp:type(Pid, foobar).
%%-------------------------------------------------------------------------
-quote(doc) -> [""];
quote(Config) ->
- Pid = ?config(ftp, Config),
+ Pid = proplists:get_value(ftp, Config),
["257 \""++_Rest] = ftp:quote(Pid, "pwd"), %% 257
[_| _] = ftp:quote(Pid, "help"),
%% This negativ test causes some ftp servers to hang. This test
@@ -541,48 +615,154 @@ quote(Config) ->
%% = ftp:quote(Pid, "list"),
ok.
+%%-------------------------------------------------------------------------
+progress_report_send() ->
+ [{doc, "Test the option progress for ftp:send/[2,3]"}].
+progress_report_send(Config) when is_list(Config) ->
+ ReportPid =
+ spawn_link(?MODULE, progress_report_receiver_init, [self(), 1]),
+ send(Config),
+ receive
+ {ReportPid, ok} ->
+ ok
+ end.
%%-------------------------------------------------------------------------
-ip_v6_disabled(doc) -> ["Test ipv4 command PORT"];
-ip_v6_disabled(_Config) ->
- %%% FIXME!!!! What is this???
- ok.%% send(Config).
+progress_report_recv() ->
+ [{doc, "Test the option progress for ftp:recv/[2,3]"}].
+progress_report_recv(Config) when is_list(Config) ->
+ ReportPid =
+ spawn_link(?MODULE, progress_report_receiver_init, [self(), 3]),
+ recv(Config),
+ receive
+ {ReportPid, ok} ->
+ ok
+ end.
%%-------------------------------------------------------------------------
-%% big_one(doc) ->
-%% ["Create a local file and transfer it to the remote host into the "
-%% "the \"incoming\" directory, remove "
-%% "the local file. Then open a new connection; cd to \"incoming\", "
-%% "lcd to the private directory; receive the file; delete the "
-%% "remote file; close connection; check that received file is in "
-%% "the correct directory; cleanup." ];
-%% big_one(Config) ->
-%% Pid = ?config(ftp, Config),
-%% do_recv(Pid, Config).
+
+not_owner() ->
+ [{doc, "Test what happens if a process that not owns the connection tries "
+ "to use it"}].
+not_owner(Config) when is_list(Config) ->
+ Pid = proplists:get_value(ftp, Config),
+
+ Parent = self(),
+ OtherPid = spawn_link(
+ fun() ->
+ {error, not_connection_owner} = ftp:pwd(Pid),
+ ftp:close(Pid),
+ Parent ! {self(), ok}
+ end),
+ receive
+ {OtherPid, ok} ->
+ {ok, _} = ftp:pwd(Pid)
+ end.
+
+
+%%-------------------------------------------------------------------------
+
+
+unexpected_call()->
+ [{doc, "Test that behaviour of the ftp process if the api is abused"}].
+unexpected_call(Config) when is_list(Config) ->
+ Flag = process_flag(trap_exit, true),
+ Pid = proplists:get_value(ftp, Config),
+
+ %% Serious programming fault, connetion will be shut down
+ case (catch gen_server:call(Pid, {self(), foobar, 10}, infinity)) of
+ {error, {connection_terminated, 'API_violation'}} ->
+ ok;
+ Unexpected1 ->
+ exit({unexpected_result, Unexpected1})
+ end,
+ ct:sleep(500),
+ undefined = process_info(Pid, status),
+ process_flag(trap_exit, Flag).
+%%-------------------------------------------------------------------------
+
+unexpected_cast()->
+ [{doc, "Test that behaviour of the ftp process if the api is abused"}].
+unexpected_cast(Config) when is_list(Config) ->
+ Flag = process_flag(trap_exit, true),
+ Pid = proplists:get_value(ftp, Config),
+ %% Serious programming fault, connetion will be shut down
+ gen_server:cast(Pid, {self(), foobar, 10}),
+ ct:sleep(500),
+ undefined = process_info(Pid, status),
+ process_flag(trap_exit, Flag).
+%%-------------------------------------------------------------------------
-%% do_recv(Pid, Config) ->
-%% PrivDir = ?config(priv_dir, Config),
-%% File = ?config(file, Config),
-%% Newfile = ?config(new_file, Config),
-%% AbsFile = filename:absname(File, PrivDir),
-%% Contents = "ftp_SUITE:recv test ...",
-%% ok = file:write_file(AbsFile, list_to_binary(Contents)),
-%% ok = ftp:cd(Pid, "incoming"),
-%% ftp:delete(Pid, File), % reset
-%% ftp:lcd(Pid, PrivDir),
-%% ok = ftp:send(Pid, File),
-%% ok = file:delete(AbsFile), % cleanup
-%% test_server:sleep(100),
-%% ok = ftp:lcd(Pid, PrivDir),
-%% ok = ftp:recv(Pid, File),
-%% {ok, Files} = file:list_dir(PrivDir),
-%% true = lists:member(File, Files),
-%% ok = file:delete(AbsFile), % cleanup
-%% ok = ftp:recv(Pid, File, Newfile),
-%% ok = ftp:delete(Pid, File), % cleanup
-%% ok.
+unexpected_bang()->
+ [{doc, "Test that connection ignores unexpected bang"}].
+unexpected_bang(Config) when is_list(Config) ->
+ Flag = process_flag(trap_exit, true),
+ Pid = proplists:get_value(ftp, Config),
+ %% Could be an innocent misstake the connection lives.
+ Pid ! foobar,
+ ct:sleep(500),
+ {status, _} = process_info(Pid, status),
+ process_flag(trap_exit, Flag).
+
+%%-------------------------------------------------------------------------
+
+clean_shutdown() ->
+ [{doc, "Test that owning process that exits with reason "
+ "'shutdown' does not cause an error message. OTP 6035"}].
+
+clean_shutdown(Config) ->
+ Parent = self(),
+ HelperPid = spawn(
+ fun() ->
+ ftp__open(Config, [verbose]),
+ Parent ! ok,
+ receive
+ nothing -> ok
+ end
+ end),
+ receive
+ ok ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ LogFile = filename:join([PrivDir,"ticket_6035.log"]),
+ error_logger:logfile({open, LogFile}),
+ exit(HelperPid, shutdown),
+ timer:sleep(2000),
+ error_logger:logfile(close),
+ case is_error_report_6035(LogFile) of
+ true -> ok;
+ false -> {fail, "Bad logfile"}
+ end
+ end.
+
+%%%----------------------------------------------------------------
+%%% Error codes not tested elsewhere
+error_elogin(Config0) ->
+ Dir = "test",
+ OldFile = "old.txt",
+ NewFile = "new.txt",
+ SrcDir = "data",
+ File = "file.txt",
+ Config = set_state([reset,
+ {mkdir,Dir},
+ {mkfile,OldFile,<<"Contents..">>},
+ {mkfile,[SrcDir,File],<<"Contents..">>}], Config0),
+ Pid = proplists:get_value(ftp, Config),
+ ok = ftp:lcd(Pid, id2ftp(SrcDir,Config)),
+ {error,elogin} = ftp:send(Pid, File),
+ ok = ftp:lcd(Pid, id2ftp("",Config)),
+ {error,elogin} = ftp:pwd(Pid),
+ {error,elogin} = ftp:cd(Pid, id2ftp(Dir,Config)),
+ {error,elogin} = ftp:rename(Pid,
+ id2ftp(OldFile,Config),
+ id2ftp(NewFile,Config)),
+ ok.
+
+error_ehost(_Config) ->
+ {error, ehost} = ftp:open("nohost.nodomain"),
+ ok.
+
%%--------------------------------------------------------------------
%% Internal functions -----------------------------------------------
%%--------------------------------------------------------------------
@@ -676,71 +856,81 @@ chk_no_dir(PathList, Config) ->
ct:fail("Unexpected error for ~p: ~p",[Path,Error])
end.
-
-%%--------------------------------------------------------------------
%%--------------------------------------------------------------------
-%% find a suitable ftpd
-%%
find_executable(Config) ->
- FTPservers = case ?config(ftpservers,Config) of
- undefined -> ?default_ftp_servers;
- L -> L
- end,
- case lists:dropwhile(fun not_available/1, FTPservers) of
- [] -> false;
- [FTPD_data|_] -> {ok, FTPD_data}
+ search_executable(proplists:get_value(ftpservers, Config, ?default_ftp_servers)).
+
+
+search_executable([{Name,Paths,_StartCmd,_ChkUp,_StopCommand,_ConfigUpd,_Host,_Port}|Srvrs]) ->
+ case os_find(Name,Paths) of
+ false ->
+ ct:log("~p not found",[Name]),
+ search_executable(Srvrs);
+ AbsName ->
+ ct:comment("Found ~p",[AbsName]),
+ {ok, {AbsName,_StartCmd,_ChkUp,_StopCommand,_ConfigUpd,_Host,_Port}}
+ end;
+search_executable([]) ->
+ false.
+
+
+os_find(Name, Paths) ->
+ case os:find_executable(Name, Paths) of
+ false -> os:find_executable(Name);
+ AbsName -> AbsName
end.
-not_available({Name,_StartCmd,_ChkUp,_StopCommand,_ConfigUpd,_Host,_Port}) ->
- os:find_executable(Name) == false.
-
-%%--------------------------------------------------------------------
-%% start/stop of ftpd
-%%
-start_ftpd(Config) ->
- {Name,StartCmd,_ChkUp,_StopCommand,ConfigRewrite,Host,Port} = ?config(ftpd_data, Config),
- case StartCmd(Config) of
+%%%----------------------------------------------------------------
+start_ftpd(Config0) ->
+ {AbsName,StartCmd,_ChkUp,_StopCommand,ConfigRewrite,Host,Port} =
+ proplists:get_value(ftpd_data, Config0),
+ case StartCmd(Config0, AbsName) of
{ok,StartResult} ->
- [{ftpd_host,Host},
- {ftpd_port,Port},
- {ftpd_start_result,StartResult} | ConfigRewrite(Config)];
+ Config = [{ftpd_host,Host},
+ {ftpd_port,Port},
+ {ftpd_start_result,StartResult} | ConfigRewrite(Config0)],
+ try
+ ftp__close(ftp__open(Config,[verbose]))
+ of
+ Config1 when is_list(Config1) ->
+ ct:log("Usuable ftp server ~p started on ~p:~p",[AbsName,Host,Port]),
+ Config
+ catch
+ Class:Exception ->
+ ct:log("Ftp server ~p started on ~p:~p but is unusable:~n~p:~p",
+ [AbsName,Host,Port,Class,Exception]),
+ {skip, [AbsName," started but unusuable"]}
+ end;
{error,Msg} ->
- {skip, [Name," not started: ",Msg]}
+ {skip, [AbsName," not started: ",Msg]}
end.
stop_ftpd(Config) ->
- {_Name,_StartCmd,_ChkUp,StopCommand,_ConfigUpd,_Host,_Port} = ?config(ftpd_data, Config),
- StopCommand(?config(ftpd_start_result,Config)).
+ {_Name,_StartCmd,_ChkUp,StopCommand,_ConfigUpd,_Host,_Port} = proplists:get_value(ftpd_data, Config),
+ StopCommand(proplists:get_value(ftpd_start_result,Config)).
ps_ftpd(Config) ->
- {_Name,_StartCmd,ChkUp,_StopCommand,_ConfigUpd,_Host,_Port} = ?config(ftpd_data, Config),
- ct:log( ChkUp(?config(ftpd_start_result,Config)) ).
+ {_Name,_StartCmd,ChkUp,_StopCommand,_ConfigUpd,_Host,_Port} = proplists:get_value(ftpd_data, Config),
+ ct:log( ChkUp(proplists:get_value(ftpd_start_result,Config)) ).
ftpd_running(Config) ->
- {_Name,_StartCmd,ChkUp,_StopCommand,_ConfigUpd,_Host,_Port} = ?config(ftpd_data, Config),
- ChkUp(?config(ftpd_start_result,Config)).
+ {_Name,_StartCmd,ChkUp,_StopCommand,_ConfigUpd,_Host,_Port} = proplists:get_value(ftpd_data, Config),
+ ChkUp(proplists:get_value(ftpd_start_result,Config)).
-%%--------------------------------------------------------------------
-%% start/stop of ftpc
-%%
ftp__open(Config, Options) ->
- Host = ?config(ftpd_host,Config),
- Port = ?config(ftpd_port,Config),
+ Host = proplists:get_value(ftpd_host,Config),
+ Port = proplists:get_value(ftpd_port,Config),
ct:log("Host=~p, Port=~p",[Host,Port]),
{ok,Pid} = ftp:open(Host, [{port,Port} | Options]),
[{ftp,Pid}|Config].
ftp__close(Config) ->
- ok = ftp:close(?config(ftp,Config)),
+ ok = ftp:close(proplists:get_value(ftp,Config)),
Config.
-%%--------------------------------------------------------------------
-%%
split(Cs) -> string:tokens(Cs, "\r\n").
-%%--------------------------------------------------------------------
-%%
find_diff(Bin1, Bin2) ->
case find_diff(Bin1, Bin2, 1) of
{error, {diff,Pos,RC,LC}} ->
@@ -753,15 +943,14 @@ find_diff(Bin1, Bin2) ->
find_diff(A, A, _) -> true;
find_diff(<<H,T1/binary>>, <<H,T2/binary>>, Pos) -> find_diff(T1, T2, Pos+1);
find_diff(RC, LC, Pos) -> {error, {diff, Pos, RC, LC}}.
-%%--------------------------------------------------------------------
-%%
+
set_state(Ops, Config) when is_list(Ops) -> lists:foldl(fun set_state/2, Config, Ops);
set_state(reset, Config) ->
rm('*', id2abs("",Config)),
- PrivDir = ?config(priv_dir,Config),
+ PrivDir = proplists:get_value(priv_dir,Config),
file:set_cwd(PrivDir),
- ftp:lcd(?config(ftp,Config),PrivDir),
+ ftp:lcd(proplists:get_value(ftp,Config),PrivDir),
set_state({mkdir,""},Config);
set_state({mkdir,Id}, Config) ->
Abs = id2abs(Id, Config),
@@ -787,7 +976,6 @@ mk_path(F, Pfx) ->
AbsName
end.
-
rm('*', Pfx) ->
{ok,Fs} = file:list_dir(Pfx),
lists:foreach(fun(F) -> rm(F, Pfx) end, Fs);
@@ -805,17 +993,88 @@ rm(F, Pfx) ->
ok
end.
-%%--------------------------------------------------------------------
-%%
-
-id2abs(Id, Conf) -> filename:join(?config(priv_dir,Conf),ids(Id)).
-id2ftp(Id, Conf) -> (?config(id2ftp,Conf))(ids(Id)).
-id2ftp_result(Id, Conf) -> (?config(id2ftp_result,Conf))(ids(Id)).
+id2abs(Id, Conf) -> filename:join(proplists:get_value(priv_dir,Conf),ids(Id)).
+id2ftp(Id, Conf) -> (proplists:get_value(id2ftp,Conf))(ids(Id)).
+id2ftp_result(Id, Conf) -> (proplists:get_value(id2ftp_result,Conf))(ids(Id)).
ids([[_|_]|_]=Ids) -> filename:join(Ids);
ids(Id) -> Id.
-is_expected_absName(Id, File, Conf) -> File = (?config(id2abs,Conf))(Id).
-is_expected_ftpInName(Id, File, Conf) -> File = (?config(id2ftp,Conf))(Id).
-is_expected_ftpOutName(Id, File, Conf) -> File = (?config(id2ftp_result,Conf))(Id).
+is_expected_absName(Id, File, Conf) -> File = (proplists:get_value(id2abs,Conf))(Id).
+is_expected_ftpInName(Id, File, Conf) -> File = (proplists:get_value(id2ftp,Conf))(Id).
+is_expected_ftpOutName(Id, File, Conf) -> File = (proplists:get_value(id2ftp_result,Conf))(Id).
+
+
+%%%----------------------------------------------------------------
+%%% Help functions for the option '{progress,Progress}'
+%%%
+
+%%%----------------
+%%% Callback:
+
+progress(#progress{} = P, _File, {file_size, Total} = M) ->
+ ct:pal("Progress: ~p",[M]),
+ progress_report_receiver ! start,
+ P#progress{total = Total};
+
+progress(#progress{current = Current} = P, _File, {transfer_size, 0} = M) ->
+ ct:pal("Progress: ~p",[M]),
+ progress_report_receiver ! finish,
+ case P#progress.total of
+ unknown -> P;
+ Current -> P;
+ Total -> ct:fail({error, {progress, {total,Total}, {current,Current}}}),
+ P
+ end;
+
+progress(#progress{current = Current} = P, _File, {transfer_size, Size} = M) ->
+ ct:pal("Progress: ~p",[M]),
+ progress_report_receiver ! update,
+ P#progress{current = Current + Size};
+
+progress(P, _File, M) ->
+ ct:pal("Progress **** Strange: ~p",[M]),
+ P.
+
+
+%%%----------------
+%%% Help process that counts the files transferred:
+
+progress_report_receiver_init(Parent, N) ->
+ register(progress_report_receiver, self()),
+ progress_report_receiver_expect_N_files(Parent, N).
+
+progress_report_receiver_expect_N_files(_Parent, 0) ->
+ ct:pal("progress_report got all files!", []);
+progress_report_receiver_expect_N_files(Parent, N) ->
+ ct:pal("progress_report expects ~p more files",[N]),
+ receive
+ start -> ok
+ end,
+ progress_report_receiver_loop(Parent, N-1).
+
+
+progress_report_receiver_loop(Parent, N) ->
+ ct:pal("progress_report expect update | finish. N = ~p",[N]),
+ receive
+ update ->
+ ct:pal("progress_report got update",[]),
+ progress_report_receiver_loop(Parent, N);
+ finish ->
+ ct:pal("progress_report got finish, send ~p to ~p",[{self(),ok}, Parent]),
+ Parent ! {self(), ok},
+ progress_report_receiver_expect_N_files(Parent, N)
+ end.
+
+%%%----------------------------------------------------------------
+%%% Help functions for bug OTP-6035
+
+is_error_report_6035(LogFile) ->
+ case file:read_file(LogFile) of
+ {ok, Bin} ->
+ nomatch =/= binary:match(Bin, <<"=ERROR REPORT====">>);
+ _ ->
+ false
+ end.
+
diff --git a/lib/inets/test/ftp_format_SUITE.erl b/lib/inets/test/ftp_format_SUITE.erl
index cbe12e566b..a33b31f46f 100644
--- a/lib/inets/test/ftp_format_SUITE.erl
+++ b/lib/inets/test/ftp_format_SUITE.erl
@@ -24,18 +24,13 @@
-include_lib("common_test/include/ct.hrl").
-include("ftp_internal.hrl").
-%% Test server specific exports
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- init_per_testcase/2, end_per_testcase/2]).
+%% Note: This directive should only be used in test suites.
+-compile(export_all).
-%% Test cases must be exported.
--export([ ftp_150/1,
- ftp_200/1, ftp_220/1, ftp_226/1, ftp_257/1, ftp_331/1, ftp_425/1,
- ftp_other_status_codes/1, ftp_multiple_lines/1,
- ftp_multipel_ctrl_messages/1, format_error/1]).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{seconds,5}}
+ ].
all() ->
[{group, ftp_response}, format_error].
@@ -60,23 +55,16 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_, Config) ->
- Dog = test_server:timetrap(?t:minutes(1)),
- NewConfig = lists:keydelete(watchdog, 1, Config),
- [{watchdog, Dog} | NewConfig].
-
-end_per_testcase(_, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+ Config.
+end_per_testcase(_, _) ->
ok.
%%-------------------------------------------------------------------------
%% Test cases starts here.
%%-------------------------------------------------------------------------
-ftp_150(doc) ->
- ["Especially check that respons can be devided in a random place."];
-ftp_150(suite) ->
- [];
+ftp_150() ->
+ [{doc, "Especially check that respons can be devided in a random place."}].
ftp_150(Config) when is_list(Config) ->
FtpResponse = ["150 ASCII data conn", "ection for /bin/ls ",
"(134.138.177", ".89,50434) (0 bytes).\r\n"],
@@ -84,14 +72,11 @@ ftp_150(Config) when is_list(Config) ->
"150 ASCII data connection for /bin/ls "
"(134.138.177.89,50434) (0 bytes).\r\n" = Msg =
parse(ftp_response, parse_lines, [[], start], FtpResponse),
- {pos_prel, _} = ftp_response:interpret(Msg),
- ok.
-
-ftp_200(doc) ->
- ["Especially check that respons can be devided after the first status "
- "code character and in the end delimiter."];
-ftp_200(suite) ->
- [];
+ {pos_prel, _} = ftp_response:interpret(Msg).
+
+ftp_200() ->
+ [{doc, "Especially check that respons can be devided after the first status "
+ "code character and in the end delimiter."}].
ftp_200(Config) when is_list(Config) ->
FtpResponse = ["2", "00 PORT command successful.", [?CR], [?LF]],
@@ -100,11 +85,9 @@ ftp_200(Config) when is_list(Config) ->
{pos_compl, _} = ftp_response:interpret(Msg),
ok.
-ftp_220(doc) ->
- ["Especially check that respons can be devided after the "
- "first with space "];
-ftp_220(suite) ->
- [];
+ftp_220() ->
+ [{doc, "Especially check that respons can be devided after the "
+ "first with space "}].
ftp_220(Config) when is_list(Config) ->
FtpResponse = ["220 ","fingon FTP server (SunOS 5.8) ready.\r\n"],
@@ -113,11 +96,9 @@ ftp_220(Config) when is_list(Config) ->
{pos_compl, _} = ftp_response:interpret(Msg),
ok.
-ftp_226(doc) ->
- ["Especially check that respons can be devided after second status code"
- " character and in the end delimiter."];
-ftp_226(suite) ->
- [];
+ftp_226() ->
+ [{doc, "Especially check that respons can be devided after second status code"
+ " character and in the end delimiter."}].
ftp_226(Config) when is_list(Config) ->
FtpResponse = ["22" "6 Transfer complete.\r", [?LF]],
@@ -126,10 +107,8 @@ ftp_226(Config) when is_list(Config) ->
{pos_compl, _} = ftp_response:interpret(Msg),
ok.
-ftp_257(doc) ->
- ["Especially check that quoted chars do not cause a problem."];
-ftp_257(suite) ->
- [];
+ftp_257() ->
+ [{doc, "Especially check that quoted chars do not cause a problem."}].
ftp_257(Config) when is_list(Config) ->
FtpResponse = ["257 \"/\" is current directory.\r\n"],
@@ -138,11 +117,9 @@ ftp_257(Config) when is_list(Config) ->
{pos_compl, _} = ftp_response:interpret(Msg),
ok.
-ftp_331(doc) ->
- ["Especially check that respons can be devided after the third status "
- " status code character."];
-ftp_331(suite) ->
- [];
+ftp_331() ->
+ [{doc, "Especially check that respons can be devided after the third status "
+ " status code character."}].
ftp_331(Config) when is_list(Config) ->
%% Brake before white space after code
FtpResponse =
@@ -153,10 +130,8 @@ ftp_331(Config) when is_list(Config) ->
{pos_interm, _} = ftp_response:interpret(Msg),
ok.
-ftp_425(doc) ->
- ["Especially check a message that was received in only one part."];
-ftp_425(suite) ->
- [];
+ftp_425() ->
+ [{doc, "Especially check a message that was received in only one part."}].
ftp_425(Config) when is_list(Config) ->
FtpResponse =
["425 Can't build data connection: Connection refused.\r\n"],
@@ -166,10 +141,8 @@ ftp_425(Config) when is_list(Config) ->
{trans_neg_compl, _} = ftp_response:interpret(Msg),
ok.
-ftp_multiple_lines(doc) ->
- ["Especially check multiple lines devided in significant places"];
-ftp_multiple_lines(suite) ->
- [];
+ftp_multiple_lines() ->
+ [{doc, "Especially check multiple lines devided in significant places"}].
ftp_multiple_lines(Config) when is_list(Config) ->
FtpResponse = ["21", "4","-The",
" following commands are recognized:\r\n"
@@ -247,13 +220,11 @@ ftp_multiple_lines(Config) when is_list(Config) ->
FtpResponse2),
ok.
-ftp_other_status_codes(doc) ->
- ["Check that other valid status codes, than the ones above, are handled"
+ftp_other_status_codes() ->
+ [{doc, "Check that other valid status codes, than the ones above, are handled"
"by ftp_response:interpret/1. Note there are som ftp status codes"
"that will not be received with the current ftp instruction support,"
- "they are not included here."];
-ftp_other_status_codes(suite) ->
- [];
+ "they are not included here."}].
ftp_other_status_codes(Config) when is_list(Config) ->
%% 1XX
@@ -282,18 +253,16 @@ ftp_other_status_codes(Config) when is_list(Config) ->
{perm_neg_compl, _ } = ftp_response:interpret("501 Foobar\r\n"),
{perm_neg_compl, _ } = ftp_response:interpret("503 Foobar\r\n"),
{perm_neg_compl, _ } = ftp_response:interpret("504 Foobar\r\n"),
- {perm_neg_compl, _ } = ftp_response:interpret("530 Foobar\r\n"),
+ {elogin, _ } = ftp_response:interpret("530 Foobar\r\n"),
{perm_neg_compl, _ } = ftp_response:interpret("532 Foobar\r\n"),
{epath, _ } = ftp_response:interpret("550 Foobar\r\n"),
{epnospc, _ } = ftp_response:interpret("552 Foobar\r\n"),
{efnamena, _ } = ftp_response:interpret("553 Foobar\r\n"),
ok.
-ftp_multipel_ctrl_messages(doc) ->
- ["The ftp server may send more than one control message as a reply,"
- "check that they are handled one at the time."];
-ftp_multipel_ctrl_messages(suite) ->
- [];
+ftp_multipel_ctrl_messages() ->
+ [{doc, "The ftp server may send more than one control message as a reply,"
+ "check that they are handled one at the time."}].
ftp_multipel_ctrl_messages(Config) when is_list(Config) ->
FtpResponse = ["200 PORT command successful.\r\n200 Foobar\r\n"],
@@ -306,10 +275,6 @@ ftp_multipel_ctrl_messages(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-format_error(doc) ->
- [""];
-format_error(suite) ->
- [];
format_error(Config) when is_list(Config) ->
"Synchronisation error during chunk sending." =
ftp:formaterror(echunk),
@@ -346,7 +311,7 @@ parse(Module, Function, [AccLines, StatusCode], [Data | Rest]) ->
{continue, {NewData, NewAccLines, NewStatusCode}} ->
case Rest of
[] ->
- test_server:fail({wrong_input, Data, Rest});
+ ct:fail({wrong_input, Data, Rest});
[_ | _] ->
parse(Module, Function, [NewAccLines, NewStatusCode],
[binary_to_list(NewData) ++ hd(Rest) | tl(Rest)])
diff --git a/lib/inets/test/ftp_suite_lib.erl b/lib/inets/test/ftp_suite_lib.erl
deleted file mode 100644
index 71985df877..0000000000
--- a/lib/inets/test/ftp_suite_lib.erl
+++ /dev/null
@@ -1,1695 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%
-
--module(ftp_suite_lib).
-
-
--include_lib("common_test/include/ct.hrl").
--include("inets_test_lib.hrl").
-
-%% Test server specific exports
-% -export([init_per_testcase/2, end_per_testcase/2]).
-
--compile(export_all).
-
-
--record(progress, {
- current = 0,
- total
- }).
-
-
-
--define(FTP_USER, "anonymous").
--define(FTP_PASS, passwd()).
--define(FTP_PORT, 21).
-
--define(BAD_HOST, "badhostname").
--define(BAD_USER, "baduser").
--define(BAD_DIR, "baddirectory").
-
--ifdef(ftp_debug_client).
--define(ftp_open(Host, Flags),
- do_ftp_open(Host, [{debug, debug},
- {timeout, timer:seconds(15)} | Flags])).
--else.
--ifdef(ftp_trace_client).
--define(ftp_open(Host, Flags),
- do_ftp_open(Host, [{debug, trace},
- {timeout, timer:seconds(15)} | Flags])).
--else.
--define(ftp_open(Host, Flags),
- do_ftp_open(Host, [{verbose, true},
- {timeout, timer:seconds(15)} | Flags])).
--endif.
--endif.
-
-%% -- Tickets --
-
-tickets(doc) ->
- "Test cases for reported bugs";
-tickets(suite) ->
- [ticket_6035].
-
-%% --
-
-ftpd_init(FtpdTag, Config) ->
- %% Get the host name(s) of FTP server
- Hosts =
- case ct:get_config(ftpd_hosts) of
- undefined ->
- ftpd_hosts(data_dir(Config));
- H ->
- H
- end,
- p("ftpd_init -> "
- "~n Hosts: ~p"
- "~n Config: ~p"
- "~n FtpdTag: ~p", [Hosts, Config, FtpdTag]),
- %% Get the first host that actually have a running FTP server
- case lists:keysearch(FtpdTag, 1, Hosts) of
- {value, {_, TagHosts}} when is_list(TagHosts) ->
- inets:start(),
- case (catch get_ftpd_host(TagHosts)) of
- {ok, Host} ->
- inets:stop(),
- [{ftp_remote_host, Host}|Config];
- _ ->
- inets:stop(),
- Reason = lists:flatten(
- io_lib:format("Could not find a valid "
- "FTP server for ~p (~p)",
- [FtpdTag, TagHosts])),
- {skip, Reason}
- end;
- _ ->
- Reason = lists:flatten(
- io_lib:format("No host(s) running FTPD server "
- "for ~p", [FtpdTag])),
- {skip, Reason}
- end.
-
-ftpd_fin(Config) ->
- lists:keydelete(ftp_remote_host, 1, Config).
-
-get_ftpd_host([]) ->
- {error, no_host};
-get_ftpd_host([Host|Hosts]) ->
- p("get_ftpd_host -> entry with"
- "~n Host: ~p"
- "~n", [Host]),
- case (catch ftp:open(Host, [{port, ?FTP_PORT}, {timeout, 20000}])) of
- {ok, Pid} ->
- (catch ftp:close(Pid)),
- {ok, Host};
- _ ->
- get_ftpd_host(Hosts)
- end.
-
-
-%%--------------------------------------------------------------------
-
-dirty_select_ftpd_host(Config) ->
- Hosts =
- case ct:get_config(ftpd_hosts) of
- undefined ->
- ftpd_hosts(data_dir(Config));
- H ->
- H
- end,
- dirty_select_ftpd_host2(Hosts).
-
-dirty_select_ftpd_host2([]) ->
- throw({error, not_found});
-dirty_select_ftpd_host2([{PlatformTag, Hosts} | PlatformHosts]) ->
- case dirty_select_ftpd_host3(Hosts) of
- none ->
- dirty_select_ftpd_host2(PlatformHosts);
- {ok, Host} ->
- {PlatformTag, Host}
- end.
-
-dirty_select_ftpd_host3([]) ->
- none;
-dirty_select_ftpd_host3([Host|Hosts]) when is_list(Host) ->
- case dirty_select_ftpd_host4(Host) of
- true ->
- {ok, Host};
- false ->
- dirty_select_ftpd_host3(Hosts)
- end;
-dirty_select_ftpd_host3([_|Hosts]) ->
- dirty_select_ftpd_host3(Hosts).
-
-%% This is a very simple and dirty test that there is a
-%% (FTP) deamon on the other end.
-dirty_select_ftpd_host4(Host) ->
- Port = 21,
- IpFam = inet,
- Opts = [IpFam, binary, {packet, 0}, {active, false}],
- Timeout = ?SECS(5),
- case gen_tcp:connect(Host, Port, Opts, Timeout) of
- {ok, Sock} ->
- gen_tcp:close(Sock),
- true;
- _Error ->
- false
- end.
-
-
-%%--------------------------------------------------------------------
-
-test_filenames() ->
- {ok, Host} = inet:gethostname(),
- File = Host ++ "_ftp_test.txt",
- NewFile = "new_" ++ File,
- {File, NewFile}.
-
-%%--------------------------------------------------------------------
-%% Function: init_per_testcase(Case, Config) -> Config
-%% Case - atom()
-%% Name of the test case that is about to be run.
-%% Config - [tuple()]
-%% A list of key/value pairs, holding the test case configuration.
-%%
-%% Description: Initiation before each test case
-%%
-%% Note: This function is free to add any key/value pairs to the Config
-%% variable, but should NOT alter/remove any existing entries.
-%%--------------------------------------------------------------------
-init_per_testcase(Case, Config)
- when (Case =:= open) orelse
- (Case =:= open_port) ->
- put(ftp_testcase, Case),
- io:format(user, "~n~n*** INIT ~w:~w ***~n~n", [?MODULE, Case]),
- inets:start(),
- NewConfig = data_dir(Config),
- watch_dog(NewConfig);
-
-init_per_testcase(Case, Config) ->
- put(ftp_testcase, Case),
- do_init_per_testcase(Case, Config).
-
-do_init_per_testcase(Case, Config)
- when (Case =:= passive_user) ->
- io:format(user, "~n~n*** INIT ~w:~w ***~n~n", [?MODULE,Case]),
- inets:start(),
- NewConfig = close_connection(watch_dog(Config)),
- Host = ftp_host(Config),
- case (catch ?ftp_open(Host, [{mode, passive}])) of
- {ok, Pid} ->
- [{ftp, Pid} | data_dir(NewConfig)];
- {skip, _} = SKIP ->
- SKIP
- end;
-
-do_init_per_testcase(Case, Config)
- when (Case =:= active_user) ->
- io:format(user, "~n~n*** INIT ~w:~w ***~n~n", [?MODULE, Case]),
- inets:start(),
- NewConfig = close_connection(watch_dog(Config)),
- Host = ftp_host(Config),
- case (catch ?ftp_open(Host, [{mode, active}])) of
- {ok, Pid} ->
- [{ftp, Pid} | data_dir(NewConfig)];
- {skip, _} = SKIP ->
- SKIP
- end;
-
-do_init_per_testcase(Case, Config)
- when (Case =:= progress_report_send) orelse
- (Case =:= progress_report_recv) ->
- inets:start(),
- io:format(user, "~n~n*** INIT ~w:~w ***~n~n", [?MODULE, Case]),
- NewConfig = close_connection(watch_dog(Config)),
- Host = ftp_host(Config),
- Opts = [{port, ?FTP_PORT},
- {verbose, true},
- {progress, {?MODULE, progress, #progress{}}}],
- case ftp:open(Host, Opts) of
- {ok, Pid} ->
- ok = ftp:user(Pid, ?FTP_USER, ?FTP_PASS),
- [{ftp, Pid} | data_dir(NewConfig)];
- {skip, _} = SKIP ->
- SKIP
- end;
-
-do_init_per_testcase(Case, Config) ->
- io:format(user,"~n~n*** INIT ~w:~w ***~n~n", [?MODULE, Case]),
- inets:start(),
- NewConfig = close_connection(watch_dog(Config)),
- Host = ftp_host(Config),
- Opts1 =
- if
- ((Case =:= passive_ip_v6_disabled) orelse
- (Case =:= active_ip_v6_disabled)) ->
- [{ipfamily, inet}];
- true ->
- []
- end,
- Opts2 =
- case string:tokens(atom_to_list(Case), [$_]) of
- ["active" | _] ->
- [{mode, active} | Opts1];
- _ ->
- [{mode, passive} | Opts1]
- end,
- case (catch ?ftp_open(Host, Opts2)) of
- {ok, Pid} ->
- ok = ftp:user(Pid, ?FTP_USER, ?FTP_PASS),
- [{ftp, Pid} | data_dir(NewConfig)];
- {skip, _} = SKIP ->
- SKIP
- end.
-
-
-%%--------------------------------------------------------------------
-%% Function: end_per_testcase(Case, Config) -> _
-%% Case - atom()
-%% Name of the test case that is about to be run.
-%% Config - [tuple()]
-%% A list of key/value pairs, holding the test case configuration.
-%% Description: Cleanup after each test case
-%%--------------------------------------------------------------------
-end_per_testcase(_, Config) ->
- NewConfig = close_connection(Config),
- Dog = ?config(watchdog, NewConfig),
- inets:stop(),
- test_server:timetrap_cancel(Dog),
- ok.
-
-
-%%-------------------------------------------------------------------------
-%% Suites similar for all hosts.
-%%-------------------------------------------------------------------------
-
-passive(suite) ->
- [
- passive_user,
- passive_pwd,
- passive_cd,
- passive_lcd,
- passive_ls,
- passive_nlist,
- passive_rename,
- passive_delete,
- passive_mkdir,
- passive_send,
- passive_send_bin,
- passive_send_chunk,
- passive_append,
- passive_append_bin,
- passive_append_chunk,
- passive_recv,
- passive_recv_bin,
- passive_recv_chunk,
- passive_type,
- passive_quote,
- passive_ip_v6_disabled
- ].
-
-active(suite) ->
- [
- active_user,
- active_pwd,
- active_cd,
- active_lcd,
- active_ls,
- active_nlist,
- active_rename,
- active_delete,
- active_mkdir,
- active_send,
- active_send_bin,
- active_send_chunk,
- active_append,
- active_append_bin,
- active_append_chunk,
- active_recv,
- active_recv_bin,
- active_recv_chunk,
- active_type,
- active_quote,
- active_ip_v6_disabled
- ].
-
-
-
-%%-------------------------------------------------------------------------
-%% Test cases starts here.
-%%-------------------------------------------------------------------------
-
-open(doc) ->
- ["Open an ftp connection to a host and close the connection."
- "Also check that !-messages does not disturbe the connection"];
-open(suite) ->
- [];
-open(Config) when is_list(Config) ->
- Host = ftp_host(Config),
- (catch tc_open(Host)).
-
-
-tc_open(Host) ->
- p("tc_open -> entry with"
- "~n Host: ~p", [Host]),
- {ok, Pid} = ?ftp_open(Host, []),
- ok = ftp:close(Pid),
- p("tc_open -> try (ok) open 1"),
- {ok, Pid1} =
- ftp:open({option_list, [{host,Host},
- {port, ?FTP_PORT},
- {flags, [verbose]},
- {timeout, 30000}]}),
- ok = ftp:close(Pid1),
-
- p("tc_open -> try (fail) open 2"),
- {error, ehost} =
- ftp:open({option_list, [{port, ?FTP_PORT}, {flags, [verbose]}]}),
- {ok, Pid2} = ftp:open(Host),
- ok = ftp:close(Pid2),
-
- p("tc_open -> try (ok) open 3"),
- {ok, NewHost} = inet:getaddr(Host, inet),
- {ok, Pid3} = ftp:open(NewHost),
- ftp:user(Pid3, ?FTP_USER, ?FTP_PASS),
- Pid3 ! foobar,
- test_server:sleep(5000),
- {message_queue_len, 0} = process_info(self(), message_queue_len),
- ["200" ++ _] = ftp:quote(Pid3, "NOOP"),
- ok = ftp:close(Pid3),
-
- %% Bad input that has default values are ignored and the defult
- %% is used.
- p("tc_open -> try (ok) open 4"),
- {ok, Pid4} =
- ftp:open({option_list, [{host, Host},
- {port, badarg},
- {flags, [verbose]},
- {timeout, 30000}]}),
- test_server:sleep(100),
- ok = ftp:close(Pid4),
-
- p("tc_open -> try (ok) open 5"),
- {ok, Pid5} =
- ftp:open({option_list, [{host, Host},
- {port, ?FTP_PORT},
- {flags, [verbose]},
- {timeout, -42}]}),
- test_server:sleep(100),
- ok = ftp:close(Pid5),
-
- p("tc_open -> try (ok) open 6"),
- {ok, Pid6} =
- ftp:open({option_list, [{host, Host},
- {port, ?FTP_PORT},
- {flags, [verbose]},
- {mode, cool}]}),
- test_server:sleep(100),
- ok = ftp:close(Pid6),
-
- p("tc_open -> try (ok) open 7"),
- {ok, Pid7} =
- ftp:open(Host, [{port, ?FTP_PORT}, {verbose, true}, {timeout, 30000}]),
- ok = ftp:close(Pid7),
-
- p("tc_open -> try (ok) open 8"),
- {ok, Pid8} =
- ftp:open(Host, ?FTP_PORT),
- ok = ftp:close(Pid8),
-
- p("tc_open -> try (ok) open 9"),
- {ok, Pid9} =
- ftp:open(Host, [{port, ?FTP_PORT},
- {verbose, true},
- {timeout, 30000},
- {dtimeout, -99}]),
- ok = ftp:close(Pid9),
-
- p("tc_open -> try (ok) open 10"),
- {ok, Pid10} =
- ftp:open(Host, [{port, ?FTP_PORT},
- {verbose, true},
- {timeout, 30000},
- {dtimeout, "foobar"}]),
- ok = ftp:close(Pid10),
-
- p("tc_open -> try (ok) open 11"),
- {ok, Pid11} =
- ftp:open(Host, [{port, ?FTP_PORT},
- {verbose, true},
- {timeout, 30000},
- {dtimeout, 1}]),
- ok = ftp:close(Pid11),
-
- p("tc_open -> done"),
- ok.
-
-
-%%-------------------------------------------------------------------------
-
-open_port(doc) ->
- ["Open an ftp connection to a host with given port number "
- "and close the connection."]; % See also OTP-3892
-open_port(suite) ->
- [];
-open_port(Config) when is_list(Config) ->
- Host = ftp_host(Config),
- {ok, Pid} = ftp:open(Host, [{port, ?FTP_PORT}]),
- ok = ftp:close(Pid),
- {error, ehost} = ftp:open(?BAD_HOST, []),
- ok.
-
-
-%%-------------------------------------------------------------------------
-
-passive_user(doc) ->
- ["Open an ftp connection to a host, and logon as anonymous ftp."];
-passive_user(suite) ->
- [];
-passive_user(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- p("Pid: ~p",[Pid]),
- do_user(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-passive_pwd(doc) ->
- ["Test ftp:pwd/1 & ftp:lpwd/1"];
-passive_pwd(suite) ->
- [];
-passive_pwd(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_pwd(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-passive_cd(doc) ->
- ["Open an ftp connection, log on as anonymous ftp, and cd to the"
- "directory \"/pub\" and the to the non-existent directory."];
-passive_cd(suite) ->
- [];
-passive_cd(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_cd(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-passive_lcd(doc) ->
- ["Test api function ftp:lcd/2"];
-passive_lcd(suite) ->
- [];
-passive_lcd(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- PrivDir = ?config(priv_dir, Config),
- do_lcd(Pid, PrivDir).
-
-
-%%-------------------------------------------------------------------------
-
-passive_ls(doc) ->
- ["Open an ftp connection; ls the current directory, and the "
- "\"incoming\" directory. We assume that ls never fails, since "
- "it's output is meant to be read by humans. "];
-passive_ls(suite) ->
- [];
-passive_ls(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_ls(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-passive_nlist(doc) ->
- ["Open an ftp connection; nlist the current directory, and the "
- "\"incoming\" directory. Nlist does not behave consistenly over "
- "operating systems. On some it is an error to have an empty "
- "directory."];
-passive_nlist(suite) ->
- [];
-passive_nlist(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- WildcardSupport = ?config(wildcard_support, Config),
- do_nlist(Pid, WildcardSupport).
-
-
-%%-------------------------------------------------------------------------
-
-passive_rename(doc) ->
- ["Transfer a file to the server, and rename it; then remove it."];
-passive_rename(suite) ->
- [];
-passive_rename(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_rename(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_delete(doc) ->
- ["Transfer a file to the server, and then delete it"];
-passive_delete(suite) ->
- [];
-passive_delete(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_delete(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_mkdir(doc) ->
- ["Make a remote directory, cd to it, go to parent directory, and "
- "remove the directory."];
-passive_mkdir(suite) ->
- [];
-passive_mkdir(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_mkdir(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-passive_send(doc) ->
- ["Create a local file in priv_dir; open an ftp connection to a host; "
- "logon as anonymous ftp; cd to the directory \"incoming\"; lcd to "
- "priv_dir; send the file; get a directory listing and check that "
- "the file is on the list;, delete the remote file; get another listing "
- "and check that the file is not on the list; close the session; "
- "delete the local file."];
-passive_send(suite) ->
- [];
-passive_send(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_send(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_append(doc) ->
- ["Create a local file in priv_dir; open an ftp connection to a host; "
- "logon as anonymous ftp; cd to the directory \"incoming\"; lcd to "
- "priv_dir; append the file to a file at the remote side that not exits"
- "this will create the file at the remote side. Then it append the file "
- "again. When this is done it recive the remote file and control that"
- "the content is doubled in it.After that it will remove the files"];
-passive_append(suite) ->
- [];
-passive_append(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_append(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_send_bin(doc) ->
- ["Open a connection to a host; cd to the directory \"incoming\"; "
- "send a binary; remove file; close the connection."];
-passive_send_bin(suite) ->
- [];
-passive_send_bin(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_send_bin(Pid, Config).
-
-%%-------------------------------------------------------------------------
-
-passive_append_bin(doc) ->
- ["Open a connection to a host; cd to the directory \"incoming\"; "
- "append a binary twice; get the file and compare the content"
- "remove file; close the connection."];
-passive_append_bin(suite) ->
- [];
-passive_append_bin(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_append_bin(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_send_chunk(doc) ->
- ["Open a connection to a host; cd to the directory \"incoming\"; "
- "send chunks; remove file; close the connection."];
-passive_send_chunk(suite) ->
- [];
-passive_send_chunk(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_send_chunk(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_append_chunk(doc) ->
- ["Open a connection to a host; cd to the directory \"incoming\"; "
- "append chunks;control content remove file; close the connection."];
-passive_append_chunk(suite) ->
- [];
-passive_append_chunk(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_append_chunk(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_recv(doc) ->
- ["Create a local file and transfer it to the remote host into the "
- "the \"incoming\" directory, remove "
- "the local file. Then open a new connection; cd to \"incoming\", "
- "lcd to the private directory; receive the file; delete the "
- "remote file; close connection; check that received file is in "
- "the correct directory; cleanup." ];
-passive_recv(suite) ->
- [];
-passive_recv(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_recv(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_recv_bin(doc) ->
- ["Send a binary to the remote host; and retreive "
- "the file; then remove the file."];
-passive_recv_bin(suite) ->
- [];
-passive_recv_bin(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_recv_bin(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_recv_chunk(doc) ->
- ["Send a binary to the remote host; Connect again, and retreive "
- "the file; then remove the file."];
-passive_recv_chunk(suite) ->
- [];
-passive_recv_chunk(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_recv_chunk(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-passive_type(doc) ->
- ["Test that we can change btween ASCCI and binary transfer mode"];
-passive_type(suite) ->
- [];
-passive_type(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_type(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-passive_quote(doc) ->
- [""];
-passive_quote(suite) ->
- [];
-passive_quote(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_quote(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-passive_ip_v6_disabled(doc) ->
- ["Test ipv4 command PASV"];
-passive_ip_v6_disabled(suite) ->
- [];
-passive_ip_v6_disabled(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_send(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_user(doc) ->
- ["Open an ftp connection to a host, and logon as anonymous ftp."];
-active_user(suite) ->
- [];
-active_user(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_user(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-active_pwd(doc) ->
- ["Test ftp:pwd/1 & ftp:lpwd/1"];
-active_pwd(suite) ->
- [];
-active_pwd(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_pwd(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-active_cd(doc) ->
- ["Open an ftp connection, log on as anonymous ftp, and cd to the"
- "directory \"/pub\" and to a non-existent directory."];
-active_cd(suite) ->
- [];
-active_cd(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_cd(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-active_lcd(doc) ->
- ["Test api function ftp:lcd/2"];
-active_lcd(suite) ->
- [];
-active_lcd(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- PrivDir = ?config(priv_dir, Config),
- do_lcd(Pid, PrivDir).
-
-
-%%-------------------------------------------------------------------------
-
-active_ls(doc) ->
- ["Open an ftp connection; ls the current directory, and the "
- "\"incoming\" directory. We assume that ls never fails, since "
- "it's output is meant to be read by humans. "];
-active_ls(suite) ->
- [];
-active_ls(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_ls(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-active_nlist(doc) ->
- ["Open an ftp connection; nlist the current directory, and the "
- "\"incoming\" directory. Nlist does not behave consistenly over "
- "operating systems. On some it is an error to have an empty "
- "directory."];
-active_nlist(suite) ->
- [];
-active_nlist(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- WildcardSupport = ?config(wildcard_support, Config),
- do_nlist(Pid, WildcardSupport).
-
-
-%%-------------------------------------------------------------------------
-
-active_rename(doc) ->
- ["Transfer a file to the server, and rename it; then remove it."];
-active_rename(suite) ->
- [];
-active_rename(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_rename(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_delete(doc) ->
- ["Transfer a file to the server, and then delete it"];
-active_delete(suite) ->
- [];
-active_delete(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_delete(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_mkdir(doc) ->
- ["Make a remote directory, cd to it, go to parent directory, and "
- "remove the directory."];
-active_mkdir(suite) ->
- [];
-active_mkdir(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_mkdir(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-active_send(doc) ->
- ["Create a local file in priv_dir; open an ftp connection to a host; "
- "logon as anonymous ftp; cd to the directory \"incoming\"; lcd to "
- "priv_dir; send the file; get a directory listing and check that "
- "the file is on the list;, delete the remote file; get another listing "
- "and check that the file is not on the list; close the session; "
- "delete the local file."];
-active_send(suite) ->
- [];
-active_send(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_send(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_append(doc) ->
- ["Create a local file in priv_dir; open an ftp connection to a host; "
- "logon as anonymous ftp; cd to the directory \"incoming\"; lcd to "
- "priv_dir; append the file to a file at the remote side that not exits"
- "this will create the file at the remote side. Then it append the file "
- "again. When this is done it recive the remote file and control that"
- "the content is doubled in it.After that it will remove the files"];
-active_append(suite) ->
- [];
-active_append(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_append(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_send_bin(doc) ->
- ["Open a connection to a host; cd to the directory \"incoming\"; "
- "send a binary; remove file; close the connection."];
-active_send_bin(suite) ->
- [];
-active_send_bin(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_send_bin(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_append_bin(doc) ->
- ["Open a connection to a host; cd to the directory \"incoming\"; "
- "append a binary twice; get the file and compare the content"
- "remove file; close the connection."];
-active_append_bin(suite) ->
- [];
-active_append_bin(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_append_bin(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_send_chunk(doc) ->
- ["Open a connection to a host; cd to the directory \"incoming\"; "
- "send chunks; remove file; close the connection."];
-active_send_chunk(suite) ->
- [];
-active_send_chunk(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_send_chunk(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_append_chunk(doc) ->
- ["Open a connection to a host; cd to the directory \"incoming\"; "
- "append chunks;control content remove file; close the connection."];
-active_append_chunk(suite) ->
- [];
-active_append_chunk(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_append_chunk(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_recv(doc) ->
- ["Create a local file and transfer it to the remote host into the "
- "the \"incoming\" directory, remove "
- "the local file. Then open a new connection; cd to \"incoming\", "
- "lcd to the private directory; receive the file; delete the "
- "remote file; close connection; check that received file is in "
- "the correct directory; cleanup." ];
-active_recv(suite) ->
- [];
-active_recv(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_recv(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_recv_bin(doc) ->
- ["Send a binary to the remote host; and retreive "
- "the file; then remove the file."];
-active_recv_bin(suite) ->
- [];
-active_recv_bin(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_recv_bin(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_recv_chunk(doc) ->
- ["Send a binary to the remote host; Connect again, and retreive "
- "the file; then remove the file."];
-active_recv_chunk(suite) ->
- [];
-active_recv_chunk(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_recv_chunk(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-active_type(doc) ->
- ["Test that we can change btween ASCCI and binary transfer mode"];
-active_type(suite) ->
- [];
-active_type(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_type(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-active_quote(doc) ->
- [""];
-active_quote(suite) ->
- [];
-active_quote(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_quote(Pid).
-
-
-%%-------------------------------------------------------------------------
-
-active_ip_v6_disabled(doc) ->
- ["Test ipv4 command PORT"];
-active_ip_v6_disabled(suite) ->
- [];
-active_ip_v6_disabled(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- do_send(Pid, Config).
-
-
-%%-------------------------------------------------------------------------
-
-api_missuse(doc)->
- ["Test that behaviour of the ftp process if the api is abused"];
-api_missuse(suite) -> [];
-api_missuse(Config) when is_list(Config) ->
- p("api_missuse -> entry"),
- Flag = process_flag(trap_exit, true),
- Pid = ?config(ftp, Config),
- Host = ftp_host(Config),
-
- %% Serious programming fault, connetion will be shut down
- p("api_missuse -> verify bad call termination (~p)", [Pid]),
- case (catch gen_server:call(Pid, {self(), foobar, 10}, infinity)) of
- {error, {connection_terminated, 'API_violation'}} ->
- ok;
- Unexpected1 ->
- exit({unexpected_result, Unexpected1})
- end,
- test_server:sleep(500),
- undefined = process_info(Pid, status),
-
- p("api_missuse -> start new client"),
- {ok, Pid2} = ?ftp_open(Host, []),
- %% Serious programming fault, connetion will be shut down
- p("api_missuse -> verify bad cast termination"),
- gen_server:cast(Pid2, {self(), foobar, 10}),
- test_server:sleep(500),
- undefined = process_info(Pid2, status),
-
- p("api_missuse -> start new client"),
- {ok, Pid3} = ?ftp_open(Host, []),
- %% Could be an innocent misstake the connection lives.
- p("api_missuse -> verify bad bang"),
- Pid3 ! foobar,
- test_server:sleep(500),
- {status, _} = process_info(Pid3, status),
- process_flag(trap_exit, Flag),
- p("api_missuse -> done"),
- ok.
-
-
-%%-------------------------------------------------------------------------
-
-not_owner(doc) ->
- ["Test what happens if a process that not owns the connection tries "
- "to use it"];
-not_owner(suite) ->
- [];
-not_owner(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- OtherPid = spawn_link(?MODULE, not_owner, [Pid, self()]),
-
- receive
- {OtherPid, ok} ->
- {ok, _} = ftp:pwd(Pid)
- end,
- ok.
-
-not_owner(FtpPid, Pid) ->
- {error, not_connection_owner} = ftp:pwd(FtpPid),
- ftp:close(FtpPid),
- test_server:sleep(100),
- Pid ! {self(), ok}.
-
-
-%%-------------------------------------------------------------------------
-
-
-progress_report(doc) ->
- ["Solaris 8 sparc test the option progress."];
-progress_report(suite) ->
- [progress_report_send, progress_report_recv].
-
-
-%% --
-
-progress_report_send(doc) ->
- ["Test the option progress for ftp:send/[2,3]"];
-progress_report_send(suite) ->
- [];
-progress_report_send(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- ReportPid =
- spawn_link(?MODULE, progress_report_receiver_init, [self(), 1]),
- do_send(Pid, Config),
- receive
- {ReportPid, ok} ->
- ok
- end.
-
-
-%% --
-
-progress_report_recv(doc) ->
- ["Test the option progress for ftp:recv/[2,3]"];
-progress_report_recv(suite) ->
- [];
-progress_report_recv(Config) when is_list(Config) ->
- Pid = ?config(ftp, Config),
- ReportPid =
- spawn_link(?MODULE, progress_report_receiver_init, [self(), 3]),
- do_recv(Pid, Config),
- receive
- {ReportPid, ok} ->
- ok
- end,
- ok.
-
-progress(#progress{} = Progress , _File, {file_size, Total}) ->
- progress_report_receiver ! start,
- Progress#progress{total = Total};
-progress(#progress{total = Total, current = Current}
- = Progress, _File, {transfer_size, 0}) ->
- progress_report_receiver ! finish,
- case Total of
- unknown ->
- ok;
- Current ->
- ok;
- _ ->
- test_server:fail({error, {progress, {total, Total},
- {current, Current}}})
- end,
- Progress;
-progress(#progress{current = Current} = Progress, _File,
- {transfer_size, Size}) ->
- progress_report_receiver ! update,
- Progress#progress{current = Current + Size}.
-
-progress_report_receiver_init(Pid, N) ->
- register(progress_report_receiver, self()),
- receive
- start ->
- ok
- end,
- progress_report_receiver_loop(Pid, N-1).
-
-progress_report_receiver_loop(Pid, N) ->
- receive
- update ->
- progress_report_receiver_loop(Pid, N);
- finish when N =:= 0 ->
- Pid ! {self(), ok};
- finish ->
- Pid ! {self(), ok},
- receive
- start ->
- ok
- end,
- progress_report_receiver_loop(Pid, N-1)
- end.
-
-
-%%-------------------------------------------------------------------------
-%% Ticket test cases
-%%-------------------------------------------------------------------------
-
-ticket_6035(doc) -> ["Test that owning process that exits with reason "
- "'shutdown' does not cause an error message."];
-ticket_6035(suite) -> [];
-ticket_6035(Config) ->
- p("ticket_6035 -> entry with"
- "~n Config: ~p", [Config]),
- PrivDir = ?config(priv_dir, Config),
- LogFile = filename:join([PrivDir,"ticket_6035.log"]),
- try
- begin
- p("ticket_6035 -> select ftpd host"),
- Host = dirty_select_ftpd_host(Config),
- p("ticket_6035 -> ftpd host selected (~p) => now spawn ftp owner", [Host]),
- Pid = spawn(?MODULE, open_wait_6035, [Host, self()]),
- p("ticket_6035 -> waiter spawned: ~p => now open error logfile (~p)",
- [Pid, LogFile]),
- error_logger:logfile({open, LogFile}),
- p("ticket_6035 -> error logfile open => now kill waiter process"),
- true = kill_ftp_proc_6035(Pid, LogFile),
- p("ticket_6035 -> waiter process killed => now close error logfile"),
- error_logger:logfile(close),
- p("ticket_6035 -> done", []),
- ok
- end
- catch
- throw:{error, not_found} ->
- {skip, "No available FTP servers"}
- end.
-
-kill_ftp_proc_6035(Pid, LogFile) ->
- p("kill_ftp_proc_6035 -> entry"),
- receive
- open ->
- p("kill_ftp_proc_6035 -> received open => now issue shutdown"),
- exit(Pid, shutdown),
- kill_ftp_proc_6035(Pid, LogFile);
- {open_failed, Reason} ->
- p("kill_ftp_proc_6035 -> received open_failed"
- "~n Reason: ~p", [Reason]),
- exit({skip, {failed_openening_server_connection, Reason}})
- after
- 5000 ->
- p("kill_ftp_proc_6035 -> timeout"),
- is_error_report_6035(LogFile)
- end.
-
-open_wait_6035({Tag, FtpServer}, From) ->
- p("open_wait_6035 -> try connect to [~p] ~s for ~p", [Tag, FtpServer, From]),
- case ftp:open(FtpServer, [{timeout, timer:seconds(15)}]) of
- {ok, Pid} ->
- p("open_wait_6035 -> connected (~p), now login", [Pid]),
- LoginResult = ftp:user(Pid,"anonymous","kldjf"),
- p("open_wait_6035 -> login result: ~p", [LoginResult]),
- From ! open,
- receive
- dummy ->
- p("open_wait_6035 -> received dummy"),
- ok
- after
- 10000 ->
- p("open_wait_6035 -> timeout"),
- ok
- end,
- p("open_wait_6035 -> done(ok)"),
- ok;
- {error, Reason} ->
- p("open_wait_6035 -> open failed"
- "~n Reason: ~p", [Reason]),
- From ! {open_failed, {Reason, FtpServer}},
- p("open_wait_6035 -> done(error)"),
- ok
- end.
-
-is_error_report_6035(LogFile) ->
- p("is_error_report_6035 -> entry"),
- Res =
- case file:read_file(LogFile) of
- {ok, Bin} ->
- Txt = binary_to_list(Bin),
- p("is_error_report_6035 -> logfile read: ~n~p", [Txt]),
- read_log_6035(Txt);
- _ ->
- false
- end,
- p("is_error_report_6035 -> logfile read result: "
- "~n ~p", [Res]),
- %% file:delete(LogFile),
- Res.
-
-read_log_6035("=ERROR REPORT===="++_Rest) ->
- p("read_log_6035 -> ERROR REPORT detected"),
- true;
-read_log_6035([H|T]) ->
- p("read_log_6035 -> OTHER: "
- "~p", [H]),
- read_log_6035(T);
-read_log_6035([]) ->
- p("read_log_6035 -> done"),
- false.
-
-
-%%--------------------------------------------------------------------
-%% Internal functions
-%%--------------------------------------------------------------------
-do_user(Pid) ->
- {error, euser} = ftp:user(Pid, ?BAD_USER, ?FTP_PASS),
- {error, euser} = ftp:user(Pid, ?FTP_USER++"\r\nPASS "++?FTP_PASS, ?FTP_PASS),
- {error, euser} = ftp:user(Pid, ?FTP_USER, ?FTP_PASS++"\r\nCWD ."),
- ok = ftp:user(Pid, ?FTP_USER, ?FTP_PASS),
- ok.
-
-do_pwd(Pid) ->
- {ok, "/"} = ftp:pwd(Pid),
- {ok, Path} = ftp:lpwd(Pid),
- {ok, Path} = file:get_cwd(),
- ok.
-
-do_cd(Pid) ->
- ok = ftp:cd(Pid, "/pub"),
- {error, epath} = ftp:cd(Pid, ?BAD_DIR),
- {error, efnamena} = ftp:cd(Pid, "/pub\r\nCWD ."),
- ok.
-
-do_lcd(Pid, Dir) ->
- ok = ftp:lcd(Pid, Dir),
- {error, epath} = ftp:lcd(Pid, ?BAD_DIR),
- ok.
-
-
-do_ls(Pid) ->
- {ok, _} = ftp:ls(Pid),
- {ok, _} = ftp:ls(Pid, "incoming"),
- %% neither nlist nor ls operates on a directory
- %% they operate on a pathname, which *can* be a
- %% directory, but can also be a filename or a group
- %% of files (including wildcards).
- {ok, _} = ftp:ls(Pid, "incom*"),
- %% but \r\n can't be in the wildcard
- {error, efnamena} = ftp:ls(Pid, "incoming\r\nCWD ."),
- ok.
-
-do_nlist(Pid, WildcardSupport) ->
- {ok, _} = ftp:nlist(Pid),
- {ok, _} = ftp:nlist(Pid, "incoming"),
- {error, efnamena} = ftp:ls(Pid, "incoming\r\nCWD ."),
- %% neither nlist nor ls operates on a directory
- %% they operate on a pathname, which *can* be a
- %% directory, but can also be a filename or a group
- %% of files (including wildcards).
- case WildcardSupport of
- true ->
- {ok, _} = ftp:nlist(Pid, "incom*"),
- ok;
- _ ->
- ok
- end.
-
-do_rename(Pid, Config) ->
- PrivDir = ?config(priv_dir, Config),
- LFile = ?config(file, Config),
- NewLFile = ?config(new_file, Config),
- AbsLFile = filename:absname(LFile, PrivDir),
- Contents = "ftp_SUITE test ...",
- ok = file:write_file(AbsLFile, list_to_binary(Contents)),
- ok = ftp:cd(Pid, "incoming"),
- ok = ftp:lcd(Pid, PrivDir),
- ftp:delete(Pid, LFile), % reset
- ftp:delete(Pid, NewLFile), % reset
- ok = ftp:send(Pid, LFile),
- {error, epath} = ftp:rename(Pid, NewLFile, LFile),
- {error, efnamena} = ftp:rename(Pid, NewLFile++"\r\nRNTO "++LFile++"\r\nRNFR "++NewLFile, LFile),
- {error, efnamena} = ftp:rename(Pid, NewLFile, LFile++"\r\nCWD ."),
- ok = ftp:rename(Pid, LFile, NewLFile),
- ftp:delete(Pid, LFile), % cleanup
- ftp:delete(Pid, NewLFile), % cleanup
- ok.
-
-do_delete(Pid, Config) ->
- PrivDir = ?config(priv_dir, Config),
- LFile = ?config(file, Config),
- AbsLFile = filename:absname(LFile, PrivDir),
- Contents = "ftp_SUITE test ...",
- ok = file:write_file(AbsLFile, list_to_binary(Contents)),
- ok = ftp:cd(Pid, "incoming"),
- ok = ftp:lcd(Pid, PrivDir),
- ftp:delete(Pid,LFile), % reset
- {error, efnamena} = ftp:delete(Pid,LFile++"\r\nCWD ."),
- ok = ftp:send(Pid, LFile),
- ok = ftp:delete(Pid,LFile),
- ok.
-
-do_mkdir(Pid) ->
- NewDir = "earl_" ++
- integer_to_list(inets_time_compat:unique_integer([positive])),
-
- ok = ftp:cd(Pid, "incoming"),
- {ok, CurrDir} = ftp:pwd(Pid),
- {error, efnamena} = ftp:mkdir(Pid, NewDir++"\r\nCWD ."),
- {error, efnamena} = ftp:rmdir(Pid, NewDir++"\r\nCWD ."),
- ok = ftp:mkdir(Pid, NewDir),
- ok = ftp:cd(Pid, NewDir),
- ok = ftp:cd(Pid, CurrDir),
- ok = ftp:rmdir(Pid, NewDir),
- ok.
-
-do_send(Pid, Config) ->
- PrivDir = ?config(priv_dir, Config),
- LFile = ?config(file, Config),
- RFile = LFile ++ ".remote",
- AbsLFile = filename:absname(LFile, PrivDir),
- Contents = "ftp_SUITE test ...",
- ok = file:write_file(AbsLFile, list_to_binary(Contents)),
- ok = ftp:cd(Pid, "incoming"),
- ok = ftp:lcd(Pid, PrivDir),
- {error, efnamena} = ftp:send(Pid, LFile, RFile++"1\r\nCWD ."),
- ok = ftp:send(Pid, LFile, RFile),
- {ok, RFilesString} = ftp:nlist(Pid),
- RFiles = split(RFilesString),
- true = lists:member(RFile, RFiles),
- ok = ftp:delete(Pid, RFile),
- case ftp:nlist(Pid) of
- {error, epath} ->
- ok; % No files
- {ok, RFilesString1} ->
- RFiles1 = split(RFilesString1),
- false = lists:member(RFile, RFiles1)
- end,
- ok = file:delete(AbsLFile).
-
-do_append(Pid, Config) ->
- PrivDir = ?config(priv_dir, Config),
- LFile = ?config(file, Config),
- RFile = ?config(new_file, Config),
- AbsLFile = filename:absname(LFile, PrivDir),
- Contents = "ftp_SUITE test:appending\r\n",
-
- ok = file:write_file(AbsLFile, list_to_binary(Contents)),
- ok = ftp:cd(Pid, "incoming"),
- ok = ftp:lcd(Pid, PrivDir),
-
- %% remove files from earlier failed test case
- ftp:delete(Pid, RFile),
- ftp:delete(Pid, LFile),
-
- {error, efnamena} = ftp:append(Pid, LFile, RFile++"1\r\nCWD ."),
- ok = ftp:append(Pid, LFile, RFile),
- ok = ftp:append(Pid, LFile, RFile),
- ok = ftp:append(Pid, LFile),
-
- %% Control the contents of the file
- {ok, Bin1} = ftp:recv_bin(Pid, RFile),
- ok = ftp:delete(Pid, RFile),
- ok = file:delete(AbsLFile),
- ok = check_content(binary_to_list(Bin1), Contents, double),
-
- {ok, Bin2} = ftp:recv_bin(Pid, LFile),
- ok = ftp:delete(Pid, LFile),
- ok = check_content(binary_to_list(Bin2), Contents, singel),
- ok.
-
-do_send_bin(Pid, Config) ->
- File = ?config(file, Config),
- Contents = "ftp_SUITE test ...",
- Bin = list_to_binary(Contents),
- ok = ftp:cd(Pid, "incoming"),
- {error, enotbinary} = ftp:send_bin(Pid, Contents, File),
- {error, efnamena} = ftp:send_bin(Pid, Bin, File++"1\r\nCWD ."),
- ok = ftp:send_bin(Pid, Bin, File),
- {ok, RFilesString} = ftp:nlist(Pid),
- RFiles = split(RFilesString),
- true = lists:member(File, RFiles),
- ok = ftp:delete(Pid, File),
- ok.
-
-do_append_bin(Pid, Config) ->
- File = ?config(file, Config),
- Contents = "ftp_SUITE test ...",
- Bin = list_to_binary(Contents),
- ok = ftp:cd(Pid, "incoming"),
- {error, enotbinary} = ftp:append_bin(Pid, Contents, File),
- {error, efnamena} = ftp:append_bin(Pid, Bin, File++"1\r\nCWD ."),
- ok = ftp:append_bin(Pid, Bin, File),
- ok = ftp:append_bin(Pid, Bin, File),
- %% Control the contents of the file
- {ok, Bin2} = ftp:recv_bin(Pid, File),
- ok = ftp:delete(Pid,File),
- ok = check_content(binary_to_list(Bin2),binary_to_list(Bin), double).
-
-do_send_chunk(Pid, Config) ->
- File = ?config(file, Config),
- Contents = "ftp_SUITE test ...",
- Bin = list_to_binary(Contents),
- ok = ftp:cd(Pid, "incoming"),
- {error, efnamena} = ftp:send_chunk_start(Pid, File++"1\r\nCWD ."),
- ok = ftp:send_chunk_start(Pid, File),
- {error, echunk} = ftp:cd(Pid, "incoming"),
- {error, enotbinary} = ftp:send_chunk(Pid, Contents),
- ok = ftp:send_chunk(Pid, Bin),
- ok = ftp:send_chunk(Pid, Bin),
- ok = ftp:send_chunk_end(Pid),
- {ok, RFilesString} = ftp:nlist(Pid),
- RFiles = split(RFilesString),
- true = lists:member(File, RFiles),
- ok = ftp:delete(Pid, File),
- ok.
-
-do_append_chunk(Pid, Config) ->
- File = ?config(file, Config),
- Contents = ["ER","LE","RL"],
- ok = ftp:cd(Pid, "incoming"),
- {error, efnamena} = ftp:append_chunk_start(Pid, File++"1\r\nCWD ."),
- ok = ftp:append_chunk_start(Pid, File),
- {error, enotbinary} = ftp:append_chunk(Pid, lists:nth(1,Contents)),
- ok = ftp:append_chunk(Pid,list_to_binary(lists:nth(1,Contents))),
- ok = ftp:append_chunk(Pid,list_to_binary(lists:nth(2,Contents))),
- ok = ftp:append_chunk(Pid,list_to_binary(lists:nth(3,Contents))),
- ok = ftp:append_chunk_end(Pid),
- %%Control the contents of the file
- {ok, Bin2} = ftp:recv_bin(Pid, File),
- ok = check_content(binary_to_list(Bin2),"ERL", double),
- ok = ftp:delete(Pid, File),
- ok.
-
-do_recv(Pid, Config) ->
- PrivDir = ?config(priv_dir, Config),
- File = ?config(file, Config),
- Newfile = ?config(new_file, Config),
- AbsFile = filename:absname(File, PrivDir),
- Contents = "ftp_SUITE:recv test ...",
- ok = file:write_file(AbsFile, list_to_binary(Contents)),
- ok = ftp:cd(Pid, "incoming"),
- ftp:delete(Pid, File), % reset
- ftp:lcd(Pid, PrivDir),
- ok = ftp:send(Pid, File),
- ok = file:delete(AbsFile), % cleanup
- test_server:sleep(100),
- ok = ftp:lcd(Pid, PrivDir),
- {error, efnamena} = ftp:recv(Pid, File++"\r\nCWD ."),
- ok = ftp:recv(Pid, File),
- {ok, Files} = file:list_dir(PrivDir),
- true = lists:member(File, Files),
- ok = file:delete(AbsFile), % cleanup
- ok = ftp:recv(Pid, File, Newfile),
- ok = ftp:delete(Pid, File), % cleanup
- ok.
-
-do_recv_bin(Pid, Config) ->
- File = ?config(file, Config),
- Contents1 = "ftp_SUITE test ...",
- Bin1 = list_to_binary(Contents1),
- ok = ftp:cd(Pid, "incoming"),
- ok = ftp:send_bin(Pid, Bin1, File),
- test_server:sleep(100),
- {error, efnamena} = ftp:recv_bin(Pid, File++"\r\nCWD ."),
- {ok, Bin2} = ftp:recv_bin(Pid, File),
- ok = ftp:delete(Pid, File), % cleanup
- Contents2 = binary_to_list(Bin2),
- Contents1 = Contents2,
- ok.
-
-do_recv_chunk(Pid, Config) ->
- File = ?config(file, Config),
- Data = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
- "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
- "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
- "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
- "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
- "GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG"
- "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH"
- "IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
-
- Contents1 = lists:flatten(lists:duplicate(10, Data)),
- Bin1 = list_to_binary(Contents1),
- ok = ftp:cd(Pid, "incoming"),
- ok = ftp:type(Pid, binary),
- ok = ftp:send_bin(Pid, Bin1, File),
- test_server:sleep(100),
- {error, "ftp:recv_chunk_start/2 not called"} = recv_chunk(Pid, <<>>),
- {error, efnamena} = ftp:recv_chunk_start(Pid, File++"\r\nCWD ."),
- ok = ftp:recv_chunk_start(Pid, File),
- {ok, Contents2} = recv_chunk(Pid, <<>>),
- ok = ftp:delete(Pid, File), % cleanup
- ok = find_diff(Contents2, Contents1, 1),
- ok.
-
-do_type(Pid) ->
- ok = ftp:type(Pid, ascii),
- ok = ftp:type(Pid, binary),
- ok = ftp:type(Pid, ascii),
- {error, etype} = ftp:type(Pid, foobar),
- ok.
-
-do_quote(Pid) ->
- ["257 \"/\""++_Rest] = ftp:quote(Pid, "pwd"), %% 257
- [_| _] = ftp:quote(Pid, "help"),
- %% This negativ test causes some ftp servers to hang. This test
- %% is not important for the client, so we skip it for now.
- %%["425 Can't build data connection: Connection refused."]
- %% = ftp:quote(Pid, "list"),
- ok.
-
- watch_dog(Config) ->
- Dog = test_server:timetrap(inets_test_lib:minutes(1)),
- NewConfig = lists:keydelete(watchdog, 1, Config),
- [{watchdog, Dog} | NewConfig].
-
- close_connection(Config) ->
- case ?config(ftp, Config) of
- Pid when is_pid(Pid) ->
- ok = ftp:close(Pid),
- lists:delete({ftp, Pid}, Config);
- _ ->
- Config
- end.
-
-ftp_host(Config) ->
- case ?config(ftp_remote_host, Config) of
- undefined ->
- exit({skip, "No host specified"});
- Host ->
- Host
- end.
-
-check_content(RContent, LContent, Amount) ->
- LContent2 = case Amount of
- double ->
- LContent ++ LContent;
- singel ->
- LContent
- end,
- case string:equal(RContent, LContent2) of
- true ->
- ok;
- false ->
- %% Find where the diff is
- Where = find_diff(RContent, LContent2, 1),
- Where
- end.
-
-find_diff(A, A, _) ->
- ok;
-find_diff([H|T1], [H|T2], Pos) ->
- find_diff(T1, T2, Pos+1);
-find_diff(RC, LC, Pos) ->
- {error, {diff, Pos, RC, LC}}.
-
-recv_chunk(Pid, Acc) ->
- case ftp:recv_chunk(Pid) of
- ok ->
- {ok, binary_to_list(Acc)};
- {ok, Bin} ->
- recv_chunk(Pid, <<Acc/binary, Bin/binary>>);
- Error ->
- Error
- end.
-
-split(Cs) ->
- split(Cs, [], []).
-
-split([$\r, $\n| Cs], I, Is) ->
- split(Cs, [], [lists:reverse(I)| Is]);
-split([C| Cs], I, Is) ->
- split(Cs, [C| I], Is);
-split([], I, Is) ->
- lists:reverse([lists:reverse(I)| Is]).
-
-do_ftp_open(Host, Opts) ->
- p("do_ftp_open -> entry with"
- "~n Host: ~p"
- "~n Opts: ~p", [Host, Opts]),
- case ftp:open(Host, Opts) of
- {ok, _} = OK ->
- OK;
- {error, Reason} ->
- Str =
- lists:flatten(
- io_lib:format("Unable to reach test FTP server ~p (~p)",
- [Host, Reason])),
- throw({skip, Str})
- end.
-
-
-passwd() ->
- Host =
- case inet:gethostname() of
- {ok, H} ->
- H;
- _ ->
- "localhost"
- end,
- "ftp_SUITE@" ++ Host.
-
-ftpd_hosts(Config) ->
- DataDir = ?config(data_dir, Config),
- FileName = filename:join([DataDir, "../ftp_SUITE_data/", ftpd_hosts]),
- p("FileName: ~p", [FileName]),
- case file:consult(FileName) of
- {ok, [Hosts]} when is_list(Hosts) ->
- Hosts;
- _ ->
- []
- end.
-
-wrapper(Prefix,doc,Func) ->
- Prefix++Func(doc);
-wrapper(_,X,Func) ->
- Func(X).
-
-data_dir(Config) ->
- case ?config(data_dir, Config) of
- List when (length(List) > 0) ->
- PathList = filename:split(List),
- {NewPathList,_} = lists:split((length(PathList)-1), PathList),
- DataDir = filename:join(NewPathList ++ [ftp_SUITE_data]),
- NewConfig =
- lists:keyreplace(data_dir,1,Config, {data_dir,DataDir}),
- NewConfig;
- _ -> Config
- end.
-
-
-
-p(F) ->
- p(F, []).
-
-p(F, A) ->
- case get(ftp_testcase) of
- undefined ->
- io:format("~w [~w] " ++ F ++ "~n", [?MODULE, self() | A]);
- TC when is_atom(TC) ->
- io:format("~w [~w] ~w:" ++ F ++ "~n", [?MODULE, self(), TC | A])
- end.
diff --git a/lib/inets/test/http_format_SUITE.erl b/lib/inets/test/http_format_SUITE.erl
index e977bd1b9b..a2b463e98c 100644
--- a/lib/inets/test/http_format_SUITE.erl
+++ b/lib/inets/test/http_format_SUITE.erl
@@ -55,13 +55,9 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_, Config) ->
- Dog = test_server:timetrap(?t:minutes(1)),
- NewConfig = lists:keydelete(watchdog, 1, Config),
- [{watchdog, Dog} | NewConfig].
+ Config.
-end_per_testcase(_, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_, _) ->
ok.
%%-------------------------------------------------------------------------
diff --git a/lib/inets/test/httpc_SUITE.erl b/lib/inets/test/httpc_SUITE.erl
index f9b3aa5b59..932567ec55 100644
--- a/lib/inets/test/httpc_SUITE.erl
+++ b/lib/inets/test/httpc_SUITE.erl
@@ -42,7 +42,8 @@
%% Common Test interface functions -----------------------------------
%%--------------------------------------------------------------------
suite() ->
- [{ct_hooks,[ts_install_cth]}].
+ [{ct_hooks,[ts_install_cth]}
+ ].
all() ->
[
@@ -137,8 +138,9 @@ misc() ->
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- PrivDir = ?config(priv_dir, Config),
- DataDir = ?config(data_dir, Config),
+ ct:timetrap({seconds, 30}),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
inets_test_lib:start_apps([inets]),
ServerRoot = filename:join(PrivDir, "server_root"),
DocRoot = filename:join(ServerRoot, "htdocs"),
@@ -147,7 +149,7 @@ init_per_suite(Config) ->
end_per_suite(Config) ->
inets_test_lib:stop_apps([inets]),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
inets_test_lib:del_dirs(PrivDir),
ok.
@@ -159,6 +161,7 @@ init_per_group(misc = Group, Config) ->
Config;
init_per_group(Group, Config0) when Group =:= sim_https; Group =:= https->
+ ct:timetrap({seconds, 30}),
start_apps(Group),
StartSsl = try ssl:start()
catch
@@ -199,7 +202,15 @@ init_per_testcase(persistent_connection, Config) ->
{max_keep_alive_length, 3}], persistent_connection),
Config;
-
+init_per_testcase(wait_for_whole_response, Config) ->
+ ct:timetrap({seconds, 60*3}),
+ Config;
+init_per_testcase(Case, Config) when Case == post;
+ Case == delete;
+ Case == post_delete;
+ Case == post_stream ->
+ ct:timetrap({seconds, 30}),
+ Config;
init_per_testcase(_Case, Config) ->
Config.
@@ -356,7 +367,7 @@ pipeline(Config) when is_list(Config) ->
{ok, _} = httpc:request(get, Request, [], [], pipeline),
%% Make sure pipeline session is registerd
- test_server:sleep(4000),
+ ct:sleep(4000),
keep_alive_requests(Request, pipeline).
%%--------------------------------------------------------------------
@@ -366,7 +377,7 @@ persistent_connection(Config) when is_list(Config) ->
{ok, _} = httpc:request(get, Request, [], [], persistent),
%% Make sure pipeline session is registerd
- test_server:sleep(4000),
+ ct:sleep(4000),
keep_alive_requests(Request, persistent).
%%-------------------------------------------------------------------------
@@ -394,7 +405,7 @@ async(Config) when is_list(Config) ->
save_to_file() ->
[{doc, "Test to save the http body to a file"}].
save_to_file(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FilePath = filename:join(PrivDir, "dummy.html"),
URL = url(group_name(Config), "/dummy.html", Config),
Request = {URL, []},
@@ -408,7 +419,7 @@ save_to_file(Config) when is_list(Config) ->
save_to_file_async() ->
[{doc,"Test to save the http body to a file"}].
save_to_file_async(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FilePath = filename:join(PrivDir, "dummy.html"),
URL = url(group_name(Config), "/dummy.html", Config),
Request = {URL, []},
@@ -868,7 +879,7 @@ headers() ->
headers(Config) when is_list(Config) ->
URL = url(group_name(Config), "/dummy.html", Config),
- DocRoot = ?config(doc_root, Config),
+ DocRoot = proplists:get_value(doc_root, Config),
{ok, FileInfo} =
file:read_file_info(filename:join([DocRoot,"dummy.html"])),
@@ -1212,11 +1223,11 @@ not_streamed_test(Request, To) ->
end.
url(http, End, Config) ->
- Port = ?config(port, Config),
+ Port = proplists:get_value(port, Config),
{ok,Host} = inet:gethostname(),
?URL_START ++ Host ++ ":" ++ integer_to_list(Port) ++ End;
url(https, End, Config) ->
- Port = ?config(port, Config),
+ Port = proplists:get_value(port, Config),
{ok,Host} = inet:gethostname(),
?TLS_URL_START ++ Host ++ ":" ++ integer_to_list(Port) ++ End;
url(sim_http, End, Config) ->
@@ -1224,10 +1235,10 @@ url(sim_http, End, Config) ->
url(sim_https, End, Config) ->
url(https, End, Config).
url(http, UserInfo, End, Config) ->
- Port = ?config(port, Config),
+ Port = proplists:get_value(port, Config),
?URL_START ++ UserInfo ++ integer_to_list(Port) ++ End;
url(https, UserInfo, End, Config) ->
- Port = ?config(port, Config),
+ Port = proplists:get_value(port, Config),
?TLS_URL_START ++ UserInfo ++ integer_to_list(Port) ++ End;
url(sim_http, UserInfo, End, Config) ->
url(http, UserInfo, End, Config);
@@ -1235,7 +1246,7 @@ url(sim_https, UserInfo, End, Config) ->
url(https, UserInfo, End, Config).
group_name(Config) ->
- GroupProp = ?config(tc_group_properties, Config),
+ GroupProp = proplists:get_value(tc_group_properties, Config),
proplists:get_value(name, GroupProp).
server_start(sim_http, _) ->
@@ -1257,11 +1268,11 @@ server_start(_, HttpdConfig) ->
proplists:get_value(port, Info).
server_config(http, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
[{port, 0},
{server_name,"httpc_test"},
{server_root, ServerRoot},
- {document_root, ?config(doc_root, Config)},
+ {document_root, proplists:get_value(doc_root, Config)},
{bind_address, any},
{ipfamily, inet_version()},
{mime_type, "text/plain"},
@@ -1283,7 +1294,7 @@ start_apps(_) ->
ok.
ssl_config(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
[{certfile, filename:join(DataDir, "ssl_server_cert.pem")},
{verify, verify_none}
].
@@ -1931,9 +1942,9 @@ handle_uri(_,"/once.html",_,_,Socket,_) ->
"Content-Length:32\r\n\r\n",
send(Socket, Head),
send(Socket, "<HTML><BODY>fo"),
- test_server:sleep(1000),
+ ct:sleep(1000),
send(Socket, "ob"),
- test_server:sleep(1000),
+ ct:sleep(1000),
send(Socket, "ar</BODY></HTML>");
handle_uri(_,"/invalid_http.html",_,_,_,_) ->
@@ -2069,7 +2080,7 @@ run_clients(NumClients, ServerPort, SeqNumServer) ->
end
end),
MRef = erlang:monitor(process, Pid),
- timer:sleep(10 + random:uniform(1334)),
+ timer:sleep(10 + rand:uniform(1334)),
{Id, Pid, MRef}
end,
lists:seq(1, NumClients)).
@@ -2077,7 +2088,7 @@ run_clients(NumClients, ServerPort, SeqNumServer) ->
wait4clients([], _Timeout) ->
ok;
wait4clients(Clients, Timeout) when Timeout > 0 ->
- Time = inets_time_compat:monotonic_time(),
+ Time = erlang:monotonic_time(),
receive
{'DOWN', _MRef, process, Pid, normal} ->
@@ -2158,7 +2169,7 @@ slowly_send_response(CSock, Answer) ->
[length(Answer), Answer])),
lists:foreach(
fun(Char) ->
- timer:sleep(random:uniform(500)),
+ timer:sleep(rand:uniform(500)),
gen_tcp:send(CSock, <<Char>>)
end,
Response).
@@ -2177,10 +2188,9 @@ parse_connection_type(Request) ->
end.
set_random_seed() ->
- Unique = inets_time_compat:unique_integer(),
-
+ Unique = erlang:unique_integer(),
A = erlang:phash2([make_ref(), self(), Unique]),
- random:seed(A, A, A).
+ rand:seed(exsplus, {A, A, A}).
otp_8739(doc) ->
diff --git a/lib/inets/test/httpc_cookie_SUITE.erl b/lib/inets/test/httpc_cookie_SUITE.erl
index 0eca3edae2..8140967bca 100644
--- a/lib/inets/test/httpc_cookie_SUITE.erl
+++ b/lib/inets/test/httpc_cookie_SUITE.erl
@@ -23,14 +23,8 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("stdlib/include/ms_transform.hrl").
-%% Test server specific exports
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, init_per_group/2,end_per_group/2, init_per_testcase/2, end_per_testcase/2]).
-
-%% Test cases must be exported.
--export([session_cookies_only/1, netscape_cookies/1,
- cookie_cancel/1, cookie_expires/1, persistent_cookie/1,
- domain_cookie/1, secure_cookie/1, update_cookie/1,
- update_cookie_session/1, cookie_attributes/1]).
+%% Note: This directive should only be used in test suites.
+-compile(export_all).
-define(URL, "http://myhost.cookie.test.org").
-define(URL_DOMAIN, "http://myhost2.cookie.test.org").
@@ -38,86 +32,10 @@
%% Test server callback functions
-%%--------------------------------------------------------------------
-%% Function: init_per_testcase(TestCase, Config) -> Config
-%% Case - atom()
-%% Name of the test case that is about to be run.
-%% Config - [tuple()]
-%% A list of key/value pairs, holding the test case configuration.
-%%
-%% Description: Initiation before each test case
-%%
-%% Note: This function is free to add any key/value pairs to the Config
-%% variable, but should NOT alter/remove any existing entries.
-%% Description: Initiation before each test case
-%%--------------------------------------------------------------------
-init_per_testcase(session_cookies_only = Case, Config0) ->
- tsp("init_per_testcase(~p) -> entry with"
- "~n Config0: ~p", [Case, Config0]),
- Config = init_workdir(Case, Config0),
- application:start(inets),
- httpc:set_options([{cookies, verify}]),
- watch_dog(Config);
-
-init_per_testcase(Case, Config0) ->
- tsp("init_per_testcase(~p) -> entry with"
- "~n Config0: ~p", [Case, Config0]),
- Config = init_workdir(Case, Config0),
- CaseDir = ?config(case_top_dir, Config),
- application:load(inets),
- application:set_env(inets, services, [{httpc, {default, CaseDir}}]),
- application:start(inets),
- httpc:set_options([{cookies, verify}]),
- watch_dog(Config).
-
-watch_dog(Config) ->
- Dog = test_server:timetrap(inets_test_lib:minutes(10)),
- NewConfig = lists:keydelete(watchdog, 1, Config),
- [{watchdog, Dog} | NewConfig].
-
-init_workdir(Case, Config) ->
- PrivDir = ?config(priv_dir, Config),
- SuiteTopDir = filename:join(PrivDir, ?MODULE),
- case file:make_dir(SuiteTopDir) of
- ok ->
- ok;
- {error, eexist} ->
- ok;
- Error ->
- tsf({failed_creating_subsuite_top_dir, Error})
- end,
-
- CaseTopDir = filename:join(SuiteTopDir, Case),
- ?line ok = file:make_dir(CaseTopDir),
- [{suite_top_dir, SuiteTopDir},
- {case_top_dir, CaseTopDir} | Config].
-
-
-%%--------------------------------------------------------------------
-%% Function: end_per_testcase(TestCase, Config) -> _
-%% Case - atom()
-%% Name of the test case that is about to be run.
-%% Config - [tuple()]
-%% A list of key/value pairs, holding the test case configuration.
-%% Description: Cleanup after each test case
-%%--------------------------------------------------------------------
-end_per_testcase(Case, Config) ->
- tsp("end_per_testcase(~p) -> entry with"
- "~n Config: ~p", [Case, Config]),
- application:stop(inets),
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
-
-%%--------------------------------------------------------------------
-%% Function: all(Clause) -> TestCases
-%% Clause - atom() - suite | doc
-%% TestCases - [Case]
-%% Case - atom()
-%% Name of a test case.
-%% Description: Returns a list of all test cases in this test suite
-%%--------------------------------------------------------------------
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{seconds,15}}
+ ].
all() ->
[
@@ -148,17 +66,55 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
+init_per_testcase(session_cookies_only = Case, Config0) ->
+ Config = init_workdir(Case, Config0),
+ application:start(inets),
+ httpc:set_options([{cookies, verify}]),
+ Config;
+init_per_testcase(cookie_expires = Case, Config0) ->
+ Config = init_workdir(Case, Config0),
+ CaseDir = proplists:get_value(case_top_dir, Config),
+ application:start(inets),
+ application:set_env(inets, services, [{httpc, {default, CaseDir}}]),
+ application:start(inets),
+ httpc:set_options([{cookies, verify}]),
+ Config;
+init_per_testcase(Case, Config0) ->
+ Config = init_workdir(Case, Config0),
+ CaseDir = proplists:get_value(case_top_dir, Config),
+ application:load(inets),
+ application:set_env(inets, services, [{httpc, {default, CaseDir}}]),
+ application:start(inets),
+ httpc:set_options([{cookies, verify}]),
+ Config.
+
+init_workdir(Case, Config) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ SuiteTopDir = filename:join(PrivDir, ?MODULE),
+ case file:make_dir(SuiteTopDir) of
+ ok ->
+ ok;
+ {error, eexist} ->
+ ok;
+ Error ->
+ ct:fail({failed_creating_subsuite_top_dir, Error})
+ end,
+
+ CaseTopDir = filename:join(SuiteTopDir, Case),
+ ok = file:make_dir(CaseTopDir),
+ [{suite_top_dir, SuiteTopDir},
+ {case_top_dir, CaseTopDir} | Config].
+
+end_per_testcase(_, _) ->
+ application:stop(inets).
+
%% Test cases starts here.
%%--------------------------------------------------------------------
-session_cookies_only(doc) ->
- ["Test that all cookies are handled as session cookies if there"
- "does not exist a directory to save presitent cookies in."];
-session_cookies_only(suite) ->
- [];
+session_cookies_only() ->
+ [{doc, "Test that all cookies are handled as session cookies if there"
+ "does not exist a directory to save presitent cookies in."}].
session_cookies_only(Config) when is_list(Config) ->
- tsp("session_cookies_only -> Cookies 1: ~p", [httpc:which_cookies()]),
-
SetCookieHeaders = [{"set-cookie", "test_cookie=true; path=/;"
";max-age=60000"}],
httpc:store_cookies(SetCookieHeaders, ?URL),
@@ -166,36 +122,22 @@ session_cookies_only(Config) when is_list(Config) ->
httpc:cookie_header(?URL),
application:stop(inets),
application:start(inets),
- {"cookie", ""} = httpc:cookie_header(?URL),
-
- tsp("session_cookies_only -> Cookies 2: ~p", [httpc:which_cookies()]),
- ok.
+ {"cookie", ""} = httpc:cookie_header(?URL).
-netscape_cookies(doc) ->
- ["Test that the old (original) format of cookies are accepted."];
-netscape_cookies(suite) ->
- [];
+netscape_cookies() ->
+ [{doc, "Test that the old (original) format of cookies are accepted."}].
netscape_cookies(Config) when is_list(Config) ->
- tsp("netscape_cookies -> Cookies 1: ~p", [httpc:which_cookies()]),
-
Expires = future_netscape_date(),
SetCookieHeaders = [{"set-cookie", "test_cookie=true; path=/; "
"expires=" ++ Expires}],
httpc:store_cookies(SetCookieHeaders, ?URL),
{"cookie", "$Version=0; test_cookie=true; $Path=/"} =
- httpc:cookie_header(?URL),
+ httpc:cookie_header(?URL).
- tsp("netscape_cookies -> Cookies 2: ~p", [httpc:which_cookies()]),
- ok.
-
-cookie_cancel(doc) ->
- ["A cookie can be canceld by sending the same cookie with max-age=0 "
- "this test cheks that cookie is canceled."];
-cookie_cancel(suite) ->
- [];
+cookie_cancel() ->
+ [{doc, "A cookie can be canceld by sending the same cookie with max-age=0 "
+ "this test cheks that cookie is canceled."}].
cookie_cancel(Config) when is_list(Config) ->
- tsp("cookie_cancel -> Cookies 1: ~p", [httpc:which_cookies()]),
-
SetCookieHeaders = [{"set-cookie", "test_cookie=true; path=/;"
"max-age=60000"}],
httpc:store_cookies(SetCookieHeaders, ?URL),
@@ -204,155 +146,60 @@ cookie_cancel(Config) when is_list(Config) ->
NewSetCookieHeaders =
[{"set-cookie", "test_cookie=true; path=/;max-age=0"}],
httpc:store_cookies(NewSetCookieHeaders, ?URL),
- {"cookie", ""} = httpc:cookie_header(?URL),
+ {"cookie", ""} = httpc:cookie_header(?URL).
- tsp("cookie_cancel -> Cookies 2: ~p", [httpc:which_cookies()]),
- ok.
-
-cookie_expires(doc) ->
- ["Test that a cookie is not used when it has expired"];
-cookie_expires(suite) ->
- [];
+cookie_expires() ->
+ [{doc, "Test that a cookie is not used when it has expired"}].
cookie_expires(Config) when is_list(Config) ->
- tsp("cookie_expires -> Cookies 1: ~p", [httpc:which_cookies()]),
-
SetCookieHeaders = [{"set-cookie", "test_cookie=true; path=/;"
"max-age=5"}],
httpc:store_cookies(SetCookieHeaders, ?URL),
{"cookie", "$Version=0; test_cookie=true; $Path=/"} =
httpc:cookie_header(?URL),
- test_server:sleep(10000),
- {"cookie", ""} = httpc:cookie_header(?URL),
+ timer:sleep(10000),
+ {"cookie", ""} = httpc:cookie_header(?URL).
- tsp("cookie_expires -> Cookies 2: ~p", [httpc:which_cookies()]),
- ok.
-
-persistent_cookie(doc) ->
- ["Test domian cookie attribute"];
-persistent_cookie(suite) ->
- [];
+persistent_cookie() ->
+ [{doc, "Test domian cookie attribute"}].
persistent_cookie(Config) when is_list(Config)->
- tsp("persistent_cookie -> Cookies 1: ~p", [httpc:which_cookies()]),
-
SetCookieHeaders = [{"set-cookie", "test_cookie=true; path=/;"
"max-age=60000"}],
httpc:store_cookies(SetCookieHeaders, ?URL),
{"cookie", "$Version=0; test_cookie=true; $Path=/"} =
httpc:cookie_header(?URL),
- CaseDir = ?config(case_top_dir, Config),
+ CaseDir = proplists:get_value(case_top_dir, Config),
application:stop(inets),
application:load(inets),
application:set_env(inets, services, [{httpc, {default, CaseDir}}]),
application:start(inets),
httpc:set_options([{cookies, enabled}]),
- {"cookie","$Version=0; test_cookie=true; $Path=/"} = httpc:cookie_header(?URL),
+ {"cookie","$Version=0; test_cookie=true; $Path=/"} = httpc:cookie_header(?URL).
- tsp("persistent_cookie -> Cookies 2: ~p", [httpc:which_cookies()]),
- ok.
-
-
-domain_cookie(doc) ->
- ["Test the domian cookie attribute"];
-domain_cookie(suite) ->
- [];
+domain_cookie() ->
+ [{doc, "Test the domian cookie attribute"}].
domain_cookie(Config) when is_list(Config) ->
- tsp("domain_cookie -> Cookies 1: ~p", [httpc:which_cookies()]),
-
SetCookieHeaders = [{"set-cookie", "test_cookie=true; path=/;"
"domain=.cookie.test.org"}],
httpc:store_cookies(SetCookieHeaders, ?URL),
{"cookie","$Version=0; test_cookie=true; $Path=/; "
"$Domain=.cookie.test.org"} =
- httpc:cookie_header(?URL_DOMAIN),
+ httpc:cookie_header(?URL_DOMAIN).
- tsp("domain_cookie -> Cookies 2: ~p", [httpc:which_cookies()]),
- ok.
-
-
-secure_cookie(doc) ->
- ["Test the secure cookie attribute"];
-secure_cookie(suite) ->
- [];
+secure_cookie() ->
+ [{doc, "Test the secure cookie attribute"}].
secure_cookie(Config) when is_list(Config) ->
- tsp("secure_cookie -> entry with"
- "~n Config: ~p", [Config]),
-
- %% httpc:reset_cookies(),
-
- tsp("secure_cookie -> Cookies 1: ~p", [httpc:which_cookies()]),
-
SetCookieHeaders = [{"set-cookie", "test_cookie=true; path=/; secure"}],
- tsp("secure_cookie -> store cookies (1)"),
ok = httpc:store_cookies(SetCookieHeaders, ?URL),
-
- tsp("secure_cookie -> Cookies 2: ~p", [httpc:which_cookies()]),
-
- tsp("secure_cookie -> check cookie (secure)"),
check_cookie("$Version=0; test_cookie=true; $Path=/", ?URL_SECURE),
-
- tsp("secure_cookie -> check cookie (plain)"),
check_cookie("", ?URL),
-
- tsp("secure_cookie -> store cookies (2)"),
SetCookieHeaders1 = [{"set-cookie", "test1_cookie=true; path=/; secure"}],
ok = httpc:store_cookies(SetCookieHeaders1, ?URL),
-
- tsp("secure_cookie -> Cookies 3: ~p", [httpc:which_cookies()]),
-
- tsp("secure_cookie -> cookie header (3)"),
check_cookie("$Version=0; test_cookie=true; $Path=/; "
"test1_cookie=true; $Path=/",
- ?URL_SECURE),
-%% {"cookie","$Version=0; test_cookie=true; $Path=/; "
-%% "test1_cookie=true; $Path=/"} = httpc:cookie_header(?URL_SECURE),
-
- tsp("secure_cookie -> Cookies 4: ~p", [httpc:which_cookies()]),
-
- tsp("secure_cookie -> done"),
- ok.
+ ?URL_SECURE).
-expect_cookie_header(No, ExpectedCookie) ->
- case httpc:cookie_header(?URL) of
- {"cookie", ExpectedCookie} ->
- ok;
- {"cookie", BadCookie} ->
- io:format("Bad Cookie ~w: "
- "~n Expected: ~s"
- "~n Received: ~s"
- "~n", [No, ExpectedCookie, BadCookie]),
- exit({bad_cookie_header, No, ExpectedCookie, BadCookie})
- end.
-
-print_cookies(Pre) ->
- io:format("~s: ", [Pre]),
- print_cookies2(httpc:which_cookies()).
-
-print_cookies2([]) ->
- ok;
-print_cookies2([{cookies, Cookies}|Rest]) ->
- print_cookies3("Cookies", Cookies),
- print_cookies2(Rest);
-print_cookies2([{session_cookies, Cookies}|Rest]) ->
- print_cookies3("Session Cookies", Cookies),
- print_cookies2(Rest);
-print_cookies2([_|Rest]) ->
- print_cookies2(Rest).
-
-print_cookies3(Header, []) ->
- io:format(" ~s: []", [Header]);
-print_cookies3(Header, Cookies) ->
- io:format(" ~s: ", [Header]),
- Prefix = " ",
- PrintCookie =
- fun(Cookie) ->
- io:format("~s", [httpc_cookie:image_of(Prefix, Cookie)])
- end,
- lists:foreach(PrintCookie, Cookies).
-
-update_cookie(doc)->
- ["Test that a (plain) cookie can be updated."];
-update_cookie(suite) ->
- [];
+update_cookie()->
+ [{doc, "Test that a (plain) cookie can be updated."}].
update_cookie(Config) when is_list(Config) ->
print_cookies("Cookies before store"),
@@ -377,10 +224,8 @@ update_cookie(Config) when is_list(Config) ->
"test_cookie=false; $Path=/",
expect_cookie_header(2, ExpectCookie2).
-update_cookie_session(doc)->
- ["Test that a session cookie can be updated."];
-update_cookie_session(suite) ->
- [];
+update_cookie_session()->
+ [{doc, "Test that a session cookie can be updated."}].
update_cookie_session(Config) when is_list(Config)->
print_cookies("Cookies before store"),
@@ -400,23 +245,57 @@ update_cookie_session(Config) when is_list(Config)->
expect_cookie_header(2, ExpectedCookie2).
-cookie_attributes(doc) ->
- ["Test attribute not covered by the other test cases"];
-cookie_attributes(suite) ->
- [];
+cookie_attributes() ->
+ [{doc, "Test attribute not covered by the other test cases"}].
cookie_attributes(Config) when is_list(Config) ->
SetCookieHeaders = [{"set-cookie", "test_cookie=true;version=1;"
"comment=foobar; "%% Comment
"foo=bar;" %% Nonsense should be ignored
"max-age=60000"}],
httpc:store_cookies(SetCookieHeaders, ?URL),
- {"cookie","$Version=1; test_cookie=true"} = httpc:cookie_header(?URL),
- ok.
+ {"cookie","$Version=1; test_cookie=true"} = httpc:cookie_header(?URL).
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
+print_cookies(Pre) ->
+ io:format("~s: ", [Pre]),
+ print_cookies2(httpc:which_cookies()).
+
+print_cookies2([]) ->
+ ok;
+print_cookies2([{cookies, Cookies}|Rest]) ->
+ print_cookies3("Cookies", Cookies),
+ print_cookies2(Rest);
+print_cookies2([{session_cookies, Cookies}|Rest]) ->
+ print_cookies3("Session Cookies", Cookies),
+ print_cookies2(Rest);
+print_cookies2([_|Rest]) ->
+ print_cookies2(Rest).
+
+print_cookies3(Header, []) ->
+ io:format(" ~s: []", [Header]);
+print_cookies3(Header, Cookies) ->
+ io:format(" ~s: ", [Header]),
+ Prefix = " ",
+ PrintCookie =
+ fun(Cookie) ->
+ io:format("~s", [httpc_cookie:image_of(Prefix, Cookie)])
+ end,
+ lists:foreach(PrintCookie, Cookies).
+
+expect_cookie_header(No, ExpectedCookie) ->
+ case httpc:cookie_header(?URL) of
+ {"cookie", ExpectedCookie} ->
+ ok;
+ {"cookie", BadCookie} ->
+ io:format("Bad Cookie ~w: "
+ "~n Expected: ~s"
+ "~n Received: ~s"
+ "~n", [No, ExpectedCookie, BadCookie]),
+ exit({bad_cookie_header, No, ExpectedCookie, BadCookie})
+ end.
check_cookie(Expect, URL) ->
case httpc:cookie_header(URL) of
@@ -426,12 +305,12 @@ check_cookie(Expect, URL) ->
case lists:prefix(Expect, Unexpected) of
true ->
Extra = Unexpected -- Expect,
- tsf({extra_cookie_info, Extra});
+ ct:fail({extra_cookie_info, Extra});
false ->
- tsf({unknown_cookie, Expect, Unexpected})
+ ct:fail({unknown_cookie, Expect, Unexpected})
end;
Bad ->
- tsf({bad_cookies, Bad})
+ ct:fail({bad_cookies, Bad})
end.
@@ -509,11 +388,3 @@ month_str(11) ->"Nov";
month_str(12) ->"Dec".
-tsp(F) ->
- tsp(F, []).
-tsp(F, A) ->
- test_server:format("~p ~p:" ++ F ++ "~n", [self(), ?MODULE | A]).
-
-tsf(Reason) ->
- test_server:fail(Reason).
-
diff --git a/lib/inets/test/httpc_proxy_SUITE.erl b/lib/inets/test/httpc_proxy_SUITE.erl
index 2f6f0bc26f..198b245399 100644
--- a/lib/inets/test/httpc_proxy_SUITE.erl
+++ b/lib/inets/test/httpc_proxy_SUITE.erl
@@ -141,7 +141,7 @@ end_per_testcase(_Case, Config) ->
%% internal functions
apps(_Case, Config) ->
- case ?config(protocol, Config) of
+ case proplists:get_value(protocol, Config) of
https ->
[ssl];
_ ->
@@ -438,7 +438,7 @@ header_value(Name, [{HeaderName,HeaderValue}|Headers]) ->
https_connect_error(doc) ->
["Error from CONNECT tunnel should be returned"];
https_connect_error(Config) when is_list(Config) ->
- {HttpServer,HttpPort} = ?config(http, Config),
+ {HttpServer,HttpPort} = proplists:get_value(http, Config),
Method = get,
%% using HTTPS scheme with HTTP port to trigger connection error
URL = "https://" ++ HttpServer ++ ":" ++
@@ -477,7 +477,7 @@ app_start(App, Config) ->
inets ->
application:stop(App),
ok = application:start(App),
- case ?config(proxy, Config) of
+ case proplists:get_value(proxy, Config) of
undefined -> ok;
{_,ProxySpec} ->
ok = httpc:set_options([{proxy,ProxySpec}])
@@ -495,7 +495,7 @@ app_stop(App) ->
application:stop(App).
make_cert_files(Alg, Prefix, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
CaInfo = {CaCert,_} = erl_make_certs:make_cert([{key,Alg}]),
{Cert,CertKey} = erl_make_certs:make_cert([{key,Alg},{issuer,CaInfo}]),
CaCertFile = filename:join(PrivDir, Prefix++"cacerts.pem"),
@@ -513,8 +513,8 @@ der_to_pem(File, Entries) ->
url(AbsPath, Config) ->
- Protocol = ?config(protocol, Config),
- {ServerName,ServerPort} = ?config(Protocol, Config),
+ Protocol = proplists:get_value(protocol, Config),
+ {ServerName,ServerPort} = proplists:get_value(Protocol, Config),
atom_to_list(Protocol) ++ "://" ++
ServerName ++ ":" ++ integer_to_list(ServerPort) ++
AbsPath.
@@ -548,8 +548,8 @@ init_local_proxy_string(String, Config) ->
|Config].
rcmd_local_proxy(Args, Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Script = filename:join(DataDir, ?LOCAL_PROXY_SCRIPT),
rcmd(Script, Args, [{cd,PrivDir}]).
diff --git a/lib/inets/test/httpd_SUITE.erl b/lib/inets/test/httpd_SUITE.erl
index 93520c1cb4..28e77151f2 100644
--- a/lib/inets/test/httpd_SUITE.erl
+++ b/lib/inets/test/httpd_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -46,7 +46,9 @@
%% Common Test interface functions -----------------------------------
%%--------------------------------------------------------------------
suite() ->
- [{ct_hooks,[ts_install_cth]}].
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{seconds, 120}}
+ ].
all() ->
[
@@ -70,7 +72,8 @@ all() ->
{group, https_security},
{group, http_reload},
{group, https_reload},
- {group, http_mime_types}
+ {group, http_mime_types},
+ mime_types_format
].
groups() ->
@@ -116,8 +119,10 @@ groups() ->
]},
{htaccess, [], [htaccess_1_1, htaccess_1_0, htaccess_0_9]},
{security, [], [security_1_1, security_1_0]}, %% Skip 0.9 as causes timing issus in test code
- {http_1_1, [], [host, chunked, expect, cgi, cgi_chunked_encoding_test,
- trace, range, if_modified_since, mod_esi_chunk_timeout] ++ http_head() ++ http_get() ++ load()},
+ {http_1_1, [],
+ [host, chunked, expect, cgi, cgi_chunked_encoding_test,
+ trace, range, if_modified_since, mod_esi_chunk_timeout,
+ esi_put] ++ http_head() ++ http_get() ++ load()},
{http_1_0, [], [host, cgi, trace] ++ http_head() ++ http_get() ++ load()},
{http_0_9, [], http_head() ++ http_get() ++ load()}
].
@@ -149,8 +154,8 @@ load() ->
].
init_per_suite(Config) ->
- PrivDir = ?config(priv_dir, Config),
- DataDir = ?config(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
inets_test_lib:stop_apps([inets]),
ServerRoot = filename:join(PrivDir, "server_root"),
inets_test_lib:del_dirs(ServerRoot),
@@ -218,22 +223,22 @@ init_per_group(http_0_9, Config) ->
[{http_version, "HTTP/0.9"} | Config]
end;
init_per_group(http_htaccess = Group, Config) ->
- Path = ?config(doc_root, Config),
+ Path = proplists:get_value(doc_root, Config),
catch remove_htaccess(Path),
- create_htaccess_data(Path, ?config(address, Config)),
+ create_htaccess_data(Path, proplists:get_value(address, Config)),
ok = start_apps(Group),
init_httpd(Group, [{type, ip_comm} | Config]);
init_per_group(https_htaccess = Group, Config) ->
- Path = ?config(doc_root, Config),
+ Path = proplists:get_value(doc_root, Config),
catch remove_htaccess(Path),
- create_htaccess_data(Path, ?config(address, Config)),
+ create_htaccess_data(Path, proplists:get_value(address, Config)),
init_ssl(Group, Config);
init_per_group(auth_api, Config) ->
[{auth_prefix, ""} | Config];
init_per_group(auth_api_dets, Config) ->
[{auth_prefix, "dets_"} | Config];
init_per_group(auth_api_mnesia, Config) ->
- start_mnesia(?config(node, Config)),
+ start_mnesia(proplists:get_value(node, Config)),
[{auth_prefix, "mnesia_"} | Config];
init_per_group(_, Config) ->
Config.
@@ -271,7 +276,8 @@ end_per_group(_, _) ->
%%--------------------------------------------------------------------
init_per_testcase(Case, Config) when Case == host; Case == trace ->
- Prop = ?config(tc_group_properties, Config),
+ ct:timetrap({seconds, 20}),
+ Prop = proplists:get_value(tc_group_properties, Config),
Name = proplists:get_value(name, Prop),
Cb = case Name of
http_1_0 ->
@@ -279,18 +285,50 @@ init_per_testcase(Case, Config) when Case == host; Case == trace ->
http_1_1 ->
httpd_1_1
end,
- [{version_cb, Cb} | proplists:delete(version_cb, Config)];
+ dbg(
+ Case,
+ [{version_cb, Cb} | proplists:delete(version_cb, Config)],
+ init);
init_per_testcase(range, Config) ->
- DocRoot = ?config(doc_root, Config),
+ ct:timetrap({seconds, 20}),
+ DocRoot = proplists:get_value(doc_root, Config),
create_range_data(DocRoot),
- Config;
-
-init_per_testcase(_, Config) ->
- Config.
-
-end_per_testcase(_Case, _Config) ->
- ok.
+ dbg(range, Config, init);
+
+init_per_testcase(Case, Config) ->
+ ct:timetrap({seconds, 20}),
+ dbg(Case, Config, init).
+
+end_per_testcase(Case, Config) ->
+ dbg(Case, Config, 'end').
+
+
+dbg(Case, Config, Status) ->
+ Cases = [esi_put],
+ case lists:member(Case, Cases) of
+ true ->
+ case Status of
+ init ->
+ dbg:tracer(),
+ dbg:p(all, c),
+ dbg:tpl(httpd_example, cx),
+ dbg:tpl(mod_esi, generate_webpage, cx),
+ io:format("dbg: started~n"),
+ Config;
+ 'end' ->
+ io:format("dbg: stopped~n"),
+ dbg:stop_clear(),
+ ok
+ end;
+ false ->
+ case Status of
+ init ->
+ Config;
+ 'end' ->
+ ok
+ end
+ end.
%%-------------------------------------------------------------------------
%% Test cases starts here.
@@ -300,10 +338,10 @@ head() ->
[{doc, "HTTP HEAD request for static page"}].
head(Config) when is_list(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config), ?config(node, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ ok = httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config), proplists:get_value(node, Config),
http_request("HEAD /index.html ", Version, Host),
[{statuscode, head_status(Version)},
{version, Version}]).
@@ -312,13 +350,13 @@ get() ->
[{doc, "HTTP GET request for static page"}].
get(Config) when is_list(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Type = ?config(type, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Type = proplists:get_value(type, Config),
+ ok = httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config),
transport_opts(Type, Config),
- ?config(node, Config),
+ proplists:get_value(node, Config),
http_request("GET /index.html ", Version, Host),
[{statuscode, 200},
{header, "Content-Type", "text/html"},
@@ -339,8 +377,8 @@ basic_auth() ->
[{doc, "Test Basic authentication with WWW-Authenticate header"}].
basic_auth(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
basic_auth_requiered(Config),
%% Authentication OK! ["one:OnePassword" user first in user list]
ok = auth_status(auth_request("/open/dummy.html", "one", "onePassword", Version, Host), Config,
@@ -380,15 +418,15 @@ auth_api() ->
[{doc, "Test mod_auth API"}].
auth_api(Config) when is_list(Config) ->
- Prefix = ?config(auth_prefix, Config),
+ Prefix = proplists:get_value(auth_prefix, Config),
do_auth_api(Prefix, Config).
do_auth_api(AuthPrefix, Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- Node = ?config(node, Config),
- ServerRoot = ?config(server_root, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Port = proplists:get_value(port, Config),
+ Node = proplists:get_value(node, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
ok = http_status("GET / ", Config,
[{statuscode, 200}]),
ok = auth_status(auth_request("/", "one", "WrongPassword", Version, Host), Config,
@@ -550,12 +588,12 @@ ipv6(Config) when is_list(Config) ->
{ok, Hostname0} = inet:gethostname(),
case lists:member(list_to_atom(Hostname0), ct:get_config(ipv6_hosts)) of
true ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
URI = http_request("GET / ", Version, Host),
- httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config), [inet6],
- ?config(code, Config),
+ httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config), [inet6],
+ proplists:get_value(code, Config),
URI,
[{statuscode, 200}, {version, Version}]);
false ->
@@ -576,11 +614,11 @@ htaccess() ->
[{doc, "Test mod_auth API"}].
htaccess(Config) when is_list(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Type = ?config(type, Config),
- Port = ?config(port, Config),
- Node = ?config(node, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Type = proplists:get_value(type, Config),
+ Port = proplists:get_value(port, Config),
+ Node = proplists:get_value(node, Config),
%% Control that authentication required!
%% Control that the pages that shall be
%% authenticated really need authenticatin
@@ -691,23 +729,23 @@ host() ->
[{doc, "Test host header"}].
host(Config) when is_list(Config) ->
- Cb = ?config(version_cb, Config),
- Cb:host(?config(type, Config), ?config(port, Config),
- ?config(host, Config), ?config(node, Config)).
+ Cb = proplists:get_value(version_cb, Config),
+ Cb:host(proplists:get_value(type, Config), proplists:get_value(port, Config),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)).
%%-------------------------------------------------------------------------
chunked() ->
[{doc, "Check that the server accepts chunked requests."}].
chunked(Config) when is_list(Config) ->
- httpd_1_1:chunked(?config(type, Config), ?config(port, Config),
- ?config(host, Config), ?config(node, Config)).
+ httpd_1_1:chunked(proplists:get_value(type, Config), proplists:get_value(port, Config),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)).
%%-------------------------------------------------------------------------
expect() ->
["Check that the server handles request with the expect header "
"field appropiate"].
expect(Config) when is_list(Config) ->
- httpd_1_1:expect(?config(type, Config), ?config(port, Config),
- ?config(host, Config), ?config(node, Config)).
+ httpd_1_1:expect(proplists:get_value(type, Config), proplists:get_value(port, Config),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)).
%%-------------------------------------------------------------------------
max_clients_1_1() ->
[{doc, "Test max clients limit"}].
@@ -759,13 +797,21 @@ esi(Config) when is_list(Config) ->
ok = http_status("GET /cgi-bin/erl/httpd_example:peer ",
Config, [{statuscode, 200},
{header, "peer-cert-exist", peer(Config)}]).
+
+%%-------------------------------------------------------------------------
+esi_put() ->
+ [{doc, "Test mod_esi PUT"}].
+
+esi_put(Config) when is_list(Config) ->
+ ok = http_status("PUT /cgi-bin/erl/httpd_example/put/123342234123 ",
+ Config, [{statuscode, 200}]).
%%-------------------------------------------------------------------------
mod_esi_chunk_timeout(Config) when is_list(Config) ->
- ok = httpd_1_1:mod_esi_chunk_timeout(?config(type, Config),
- ?config(port, Config),
- ?config(host, Config),
- ?config(node, Config)).
+ ok = httpd_1_1:mod_esi_chunk_timeout(proplists:get_value(type, Config),
+ proplists:get_value(port, Config),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)).
%%-------------------------------------------------------------------------
cgi() ->
@@ -846,7 +892,7 @@ cgi(Config) when is_list(Config) ->
cgi_chunked_encoding_test() ->
[{doc, "Test chunked encoding together with mod_cgi "}].
cgi_chunked_encoding_test(Config) when is_list(Config) ->
- Host = ?config(host, Config),
+ Host = proplists:get_value(host, Config),
Script =
case test_server:os_type() of
{win32, _} ->
@@ -858,9 +904,9 @@ cgi_chunked_encoding_test(Config) when is_list(Config) ->
["GET " ++ Script ++ " HTTP/1.1\r\nHost:"++ Host ++"\r\n\r\n",
"GET /cgi-bin/erl/httpd_example/newformat HTTP/1.1\r\nHost:"
++ Host ++"\r\n\r\n"],
- httpd_1_1:mod_cgi_chunked_encoding_test(?config(type, Config), ?config(port, Config),
+ httpd_1_1:mod_cgi_chunked_encoding_test(proplists:get_value(type, Config), proplists:get_value(port, Config),
Host,
- ?config(node, Config),
+ proplists:get_value(node, Config),
Requests).
%%-------------------------------------------------------------------------
alias_1_1() ->
@@ -920,52 +966,52 @@ range() ->
[{doc, "Test Range header"}].
range(Config) when is_list(Config) ->
- httpd_1_1:range(?config(type, Config), ?config(port, Config),
- ?config(host, Config), ?config(node, Config)).
+ httpd_1_1:range(proplists:get_value(type, Config), proplists:get_value(port, Config),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)).
%%-------------------------------------------------------------------------
if_modified_since() ->
[{doc, "Test If-Modified-Since header"}].
if_modified_since(Config) when is_list(Config) ->
- httpd_1_1:if_test(?config(type, Config), ?config(port, Config),
- ?config(host, Config), ?config(node, Config),
- ?config(doc_root, Config)).
+ httpd_1_1:if_test(proplists:get_value(type, Config), proplists:get_value(port, Config),
+ proplists:get_value(host, Config), proplists:get_value(node, Config),
+ proplists:get_value(doc_root, Config)).
%%-------------------------------------------------------------------------
trace() ->
[{doc, "Test TRACE method"}].
trace(Config) when is_list(Config) ->
- Cb = ?config(version_cb, Config),
- Cb:trace(?config(type, Config), ?config(port, Config),
- ?config(host, Config), ?config(node, Config)).
+ Cb = proplists:get_value(version_cb, Config),
+ Cb:trace(proplists:get_value(type, Config), proplists:get_value(port, Config),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)).
%%-------------------------------------------------------------------------
light() ->
["Test light load"].
light(Config) when is_list(Config) ->
- httpd_load:load_test(?config(type, Config), ?config(port, Config), ?config(host, Config),
- ?config(node, Config), 10).
+ httpd_load:load_test(proplists:get_value(type, Config), proplists:get_value(port, Config), proplists:get_value(host, Config),
+ proplists:get_value(node, Config), 10).
%%-------------------------------------------------------------------------
medium() ->
["Test medium load"].
medium(Config) when is_list(Config) ->
- httpd_load:load_test(?config(type, Config), ?config(port, Config), ?config(host, Config),
- ?config(node, Config), 100).
+ httpd_load:load_test(proplists:get_value(type, Config), proplists:get_value(port, Config), proplists:get_value(host, Config),
+ proplists:get_value(node, Config), 100).
%%-------------------------------------------------------------------------
heavy() ->
["Test heavy load"].
heavy(Config) when is_list(Config) ->
- httpd_load:load_test(?config(type, Config), ?config(port, Config), ?config(host, Config),
- ?config(node, Config),
+ httpd_load:load_test(proplists:get_value(type, Config), proplists:get_value(port, Config), proplists:get_value(host, Config),
+ proplists:get_value(node, Config),
1000).
%%-------------------------------------------------------------------------
content_length() ->
["Tests that content-length is correct OTP-5775"].
content_length(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config), ?config(node, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ ok = httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config), proplists:get_value(node, Config),
http_request("GET /cgi-bin/erl/httpd_example:get_bin ",
Version, Host),
[{statuscode, 200},
@@ -975,10 +1021,10 @@ content_length(Config) ->
bad_hex() ->
["Tests that a URI with a bad hexadecimal code is handled OTP-6003"].
bad_hex(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config), ?config(node, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ ok = httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config), proplists:get_value(node, Config),
http_request("GET http://www.erlang.org/%skalle ",
Version, Host),
[{statuscode, 400},
@@ -987,10 +1033,10 @@ bad_hex(Config) ->
missing_CR() ->
["Tests missing CR in delimiter OTP-7304"].
missing_CR(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config), ?config(node, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ ok = httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config), proplists:get_value(node, Config),
http_request_missing_CR("GET /index.html ", Version, Host),
[{statuscode, 200},
{version, Version}]).
@@ -1001,12 +1047,12 @@ customize() ->
customize(Config) when is_list(Config) ->
Version = "HTTP/1.1",
- Host = ?config(host, Config),
- Type = ?config(type, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config),
+ Host = proplists:get_value(host, Config),
+ Type = proplists:get_value(type, Config),
+ ok = httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config),
transport_opts(Type, Config),
- ?config(node, Config),
+ proplists:get_value(node, Config),
http_request("GET /index.html ", Version, Host),
[{statuscode, 200},
{header, "Content-Type", "text/html"},
@@ -1019,12 +1065,12 @@ add_default() ->
add_default(Config) when is_list(Config) ->
Version = "HTTP/1.1",
- Host = ?config(host, Config),
- Type = ?config(type, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config),
+ Host = proplists:get_value(host, Config),
+ Type = proplists:get_value(type, Config),
+ ok = httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config),
transport_opts(Type, Config),
- ?config(node, Config),
+ proplists:get_value(node, Config),
http_request("GET /index.html ", Version, Host),
[{statuscode, 200},
{header, "Content-Type", "text/html"},
@@ -1036,24 +1082,24 @@ add_default(Config) when is_list(Config) ->
max_header() ->
["Denial Of Service (DOS) attack, prevented by max_header"].
max_header(Config) when is_list(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
case Version of
"HTTP/0.9" ->
{skip, not_implemented};
_ ->
- dos_hostname(?config(type, Config), ?config(port, Config), Host,
- ?config(node, Config), Version, ?MAX_HEADER_SIZE)
+ dos_hostname(proplists:get_value(type, Config), proplists:get_value(port, Config), Host,
+ proplists:get_value(node, Config), Version, ?MAX_HEADER_SIZE)
end.
%%-------------------------------------------------------------------------
max_content_length() ->
["Denial Of Service (DOS) attack, prevented by max_content_length"].
max_content_length(Config) when is_list(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- garbage_content_length(?config(type, Config), ?config(port, Config), Host,
- ?config(node, Config), Version).
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ garbage_content_length(proplists:get_value(type, Config), proplists:get_value(port, Config), Host,
+ proplists:get_value(node, Config), Version).
%%-------------------------------------------------------------------------
security_1_1(Config) when is_list(Config) ->
@@ -1065,15 +1111,15 @@ security_1_0(Config) when is_list(Config) ->
security() ->
["Test mod_security"].
security(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- Node = ?config(node, Config),
- ServerRoot = ?config(server_root, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Port = proplists:get_value(port, Config),
+ Node = proplists:get_value(node, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
global:register_name(mod_security_test, self()), % Receive events
- test_server:sleep(5000),
+ ct:sleep(5000),
OpenDir = filename:join([ServerRoot, "htdocs", "open"]),
@@ -1171,7 +1217,7 @@ security(Config) ->
["one"] = list_auth_users(Node, Port, OpenDir),
%% Wait for successful auth to timeout.
- test_server:sleep(?AUTH_TIMEOUT*1001),
+ ct:sleep(?AUTH_TIMEOUT*1001),
[] = list_auth_users(Node, Port),
@@ -1200,11 +1246,11 @@ disturbing_reconfiger_dies(Config) when is_list(Config) ->
do_reconfiger_dies([{http_version, "HTTP/1.1"} | Config], disturbing).
do_reconfiger_dies(Config, DisturbingType) ->
- Server = ?config(server_pid, Config),
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- Type = ?config(type, Config),
+ Server = proplists:get_value(server_pid, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Port = proplists:get_value(port, Config),
+ Type = proplists:get_value(type, Config),
HttpdConfig = httpd:info(Server),
BlockRequest = http_request("GET /eval?httpd_example:delay(2000) ", Version, Host),
@@ -1235,11 +1281,11 @@ disturbing_0_9(Config) when is_list(Config) ->
disturbing([{http_version, "HTTP/0.9"} | Config]).
disturbing(Config) when is_list(Config)->
- Server = ?config(server_pid, Config),
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- Type = ?config(type, Config),
+ Server = proplists:get_value(server_pid, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Port = proplists:get_value(port, Config),
+ Type = proplists:get_value(type, Config),
HttpdConfig = httpd:info(Server),
BlockRequest = http_request("GET /eval?httpd_example:delay(2000) ", Version, Host),
{ok, Socket} = inets_test_lib:connect_bin(Type, Host, Port, transport_opts(Type, Config)),
@@ -1267,11 +1313,11 @@ non_disturbing_0_9(Config) when is_list(Config) ->
non_disturbing([{http_version, "HTTP/0.9"} | Config]).
non_disturbing(Config) when is_list(Config)->
- Server = ?config(server_pid, Config),
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- Type = ?config(type, Config),
+ Server = proplists:get_value(server_pid, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Port = proplists:get_value(port, Config),
+ Type = proplists:get_value(type, Config),
HttpdConfig = httpd:info(Server),
BlockRequest = http_request("GET /eval?httpd_example:delay(2000) ", Version, Host),
@@ -1291,20 +1337,129 @@ non_disturbing(Config) when is_list(Config)->
inets_test_lib:close(Type, Socket),
[{server_name, "httpd_non_disturbing_" ++ Version}] = httpd:info(Server, [server_name]).
+%%-------------------------------------------------------------------------
+mime_types_format(Config) when is_list(Config) ->
+ DataDir = proplists:get_value(data_dir, Config),
+ MimeTypes = filename:join(DataDir, "mime_types.txt"),
+ {ok,[{"wrl","x-world/x-vrml"},
+ {"vrml","x-world/x-vrml"},
+ {"ice","x-conference/x-cooltalk"},
+ {"movie","video/x-sgi-movie"},
+ {"avi","video/x-msvideo"},
+ {"qt","video/quicktime"},
+ {"mov","video/quicktime"},
+ {"mpeg","video/mpeg"},
+ {"mpg","video/mpeg"},
+ {"mpe","video/mpeg"},
+ {"sgml","text/x-sgml"},
+ {"sgm","text/x-sgml"},
+ {"etx","text/x-setext"},
+ {"tsv","text/tab-separated-values"},
+ {"rtx","text/richtext"},
+ {"txt","text/plain"},
+ {"html","text/html"},
+ {"htm","text/html"},
+ {"css","text/css"},
+ {"xwd","image/x-xwindowdump"},
+ {"xpm","image/x-xpixmap"},
+ {"xbm","image/x-xbitmap"},
+ {"rgb","image/x-rgb"},
+ {"ppm","image/x-portable-pixmap"},
+ {"pgm","image/x-portable-graymap"},
+ {"pbm","image/x-portable-bitmap"},
+ {"pnm","image/x-portable-anymap"},
+ {"ras","image/x-cmu-raster"},
+ {"tiff","image/tiff"},
+ {"tif","image/tiff"},
+ {"png","image/png"},
+ {"jpeg","image/jpeg"},
+ {"jpg","image/jpeg"},
+ {"jpe","image/jpeg"},
+ {"ief","image/ief"},
+ {"gif","image/gif"},
+ {"pdb","chemical/x-pdb"},
+ {"xyz","chemical/x-pdb"},
+ {"wav","audio/x-wav"},
+ {"ra","audio/x-realaudio"},
+ {"rpm","audio/x-pn-realaudio-plugin"},
+ {"ram","audio/x-pn-realaudio"},
+ {"aif","audio/x-aiff"},
+ {"aiff","audio/x-aiff"},
+ {"aifc","audio/x-aiff"},
+ {"mpga","audio/mpeg"},
+ {"mp2","audio/mpeg"},
+ {"au","audio/basic"},
+ {"snd","audio/basic"},
+ {"zip","application/zip"},
+ {"src","application/x-wais-source"},
+ {"ustar","application/x-ustar"},
+ {"ms","application/x-troff-ms"},
+ {"me","application/x-troff-me"},
+ {"man","application/x-troff-man"},
+ {"t","application/x-troff"},
+ {"tr","application/x-troff"},
+ {"roff","application/x-troff"},
+ {"texinfo","application/x-texinfo"},
+ {"texi","application/x-texinfo"},
+ {"tex","application/x-tex"},
+ {"tcl","application/x-tcl"},
+ {"tar","application/x-tar"},
+ {"sv4crc","application/x-sv4crc"},
+ {"sv4cpio","application/x-sv4cpio"},
+ {"sit","application/x-stuffit"},
+ {"shar","application/x-shar"},
+ {"sh","application/x-sh"},
+ {"nc","application/x-netcdf"},
+ {"cdf","application/x-netcdf"},
+ {"mif","application/x-mif"},
+ {"latex","application/x-latex"},
+ {"skp","application/x-koan"},
+ {"skd","application/x-koan"},
+ {"skt","application/x-koan"},
+ {"skm","application/x-koan"},
+ {"cgi","application/x-httpd-cgi"},
+ {"hdf","application/x-hdf"},
+ {"gz","application/x-gzip"},
+ {"gtar","application/x-gtar"},
+ {"dvi","application/x-dvi"},
+ {"dcr","application/x-director"},
+ {"dir","application/x-director"},
+ {"dxr","application/x-director"},
+ {"csh","application/x-csh"},
+ {"cpio","application/x-cpio"},
+ {"Z","application/x-compress"},
+ {"vcd","application/x-cdlink"},
+ {"bcpio","application/x-bcpio"},
+ {"rtf","application/rtf"},
+ {"ppt","application/powerpoint"},
+ {"ai","application/postscript"},
+ {"eps","application/postscript"},
+ {"ps","application/postscript"},
+ {"pdf","application/pdf"},
+ {"oda","application/oda"},
+ {"bin","application/octet-stream"},
+ {"dms","application/octet-stream"},
+ {"lha","application/octet-stream"},
+ {"lzh","application/octet-stream"},
+ {"exe","application/octet-stream"},
+ {"class","application/octet-stream"},
+ {"doc","application/msword"},
+ {"cpt","application/mac-compactpro"},
+ {"hqx","application/mac-binhex40"}]} = httpd_conf:load_mime_types(MimeTypes).
%%--------------------------------------------------------------------
%% Internal functions -----------------------------------
%%--------------------------------------------------------------------
url(http, End, Config) ->
- Port = ?config(port, Config),
+ Port = proplists:get_value(port, Config),
{ok,Host} = inet:gethostname(),
?URL_START ++ Host ++ ":" ++ integer_to_list(Port) ++ End.
do_max_clients(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- Type = ?config(type, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Port = proplists:get_value(port, Config),
+ Type = proplists:get_value(type, Config),
Request = http_request("GET /index.html ", Version, Host),
BlockRequest = http_request("GET /eval?httpd_example:delay(2000) ", Version, Host),
@@ -1314,7 +1469,7 @@ do_max_clients(Config) ->
ok = httpd_test_lib:verify_request(Type, Host,
Port,
transport_opts(Type, Config),
- ?config(node, Config),
+ proplists:get_value(node, Config),
Request,
[{statuscode, 503},
{version, Version}]),
@@ -1327,7 +1482,7 @@ do_max_clients(Config) ->
ok = httpd_test_lib:verify_request(Type, Host,
Port,
transport_opts(Type, Config),
- ?config(node, Config),
+ proplists:get_value(node, Config),
Request,
[{statuscode, 200},
{version, Version}]).
@@ -1406,7 +1561,7 @@ server_start(_, HttpdConfig) ->
{Pid, proplists:get_value(port, Info)}.
init_ssl(Group, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
CaKey = {_Trusted,_} =
erl_make_certs:make_cert([{key, dsa},
{subject,
@@ -1457,54 +1612,54 @@ server_config(https_custom, Config) ->
server_config(https_limit, Config) ->
[{max_clients, 1}] ++ server_config(https, Config);
server_config(http_basic_auth, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
auth_conf(ServerRoot) ++ server_config(http, Config);
server_config(https_basic_auth, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
auth_conf(ServerRoot) ++ server_config(https, Config);
server_config(http_auth_api, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
auth_api_conf(ServerRoot, plain) ++ server_config(http, Config);
server_config(https_auth_api, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
auth_api_conf(ServerRoot, plain) ++ server_config(https, Config);
server_config(http_auth_api_dets, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
auth_api_conf(ServerRoot, dets) ++ server_config(http, Config);
server_config(https_auth_api_dets, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
auth_api_conf(ServerRoot, dets) ++ server_config(https, Config);
server_config(http_auth_api_mnesia, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
auth_api_conf(ServerRoot, mnesia) ++ server_config(http, Config);
server_config(https_auth_api_mnesia, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
auth_api_conf(ServerRoot, mnesia) ++ server_config(https, Config);
server_config(http_htaccess, Config) ->
auth_access_conf() ++ server_config(http, Config);
server_config(https_htaccess, Config) ->
auth_access_conf() ++ server_config(https, Config);
server_config(http_security, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
tl(auth_conf(ServerRoot)) ++ security_conf(ServerRoot) ++ server_config(http, Config);
server_config(https_security, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
tl(auth_conf(ServerRoot)) ++ security_conf(ServerRoot) ++ server_config(https, Config);
server_config(http_mime_types, Config0) ->
Config1 = basic_conf() ++ server_config(http, Config0),
- ServerRoot = ?config(server_root, Config0),
+ ServerRoot = proplists:get_value(server_root, Config0),
MimeTypesFile = filename:join([ServerRoot,"config", "mime.types"]),
[{mime_types, MimeTypesFile} | proplists:delete(mime_types, Config1)];
server_config(http, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
[{port, 0},
{socket_type, {ip_comm, [{nodelay, true}]}},
{server_name,"httpd_test"},
{server_root, ServerRoot},
- {document_root, ?config(doc_root, Config)},
+ {document_root, proplists:get_value(doc_root, Config)},
{bind_address, any},
- {ipfamily, ?config(ipfamily, Config)},
+ {ipfamily, proplists:get_value(ipfamily, Config)},
{max_header_size, 256},
{max_header_action, close},
{directory_index, ["index.html", "welcome.html"]},
@@ -1519,7 +1674,7 @@ server_config(http, Config) ->
];
server_config(https, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
[{socket_type, {essl,
[{nodelay, true},
{cacertfile,
@@ -1693,35 +1848,35 @@ mod_security_conf(SecFile, Dir) ->
http_status(Request, Config, Expected) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Type = ?config(type, Config),
- httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Type = proplists:get_value(type, Config),
+ httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config),
transport_opts(Type, Config),
- ?config(node, Config),
+ proplists:get_value(node, Config),
http_request(Request, Version, Host),
Expected ++ [{version, Version}]).
http_status(Request, HeadersAndBody, Config, Expected) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Type = ?config(type, Config),
- httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Type = proplists:get_value(type, Config),
+ httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config),
transport_opts(Type, Config),
- ?config(node, Config),
+ proplists:get_value(node, Config),
http_request(Request, Version, Host, HeadersAndBody),
Expected ++ [{version, Version}]).
auth_status(AuthRequest, Config, Expected) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Type = ?config(type, Config),
- httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config),
+ Version = proplists:get_value(http_version, Config),
+ Host = proplists:get_value(host, Config),
+ Type = proplists:get_value(type, Config),
+ httpd_test_lib:verify_request(proplists:get_value(type, Config), Host,
+ proplists:get_value(port, Config),
transport_opts(Type, Config),
- ?config(node, Config),
+ proplists:get_value(node, Config),
AuthRequest,
Expected ++ [{version, Version}]).
@@ -1773,11 +1928,11 @@ cleanup_mnesia() ->
ok.
transport_opts(ssl, Config) ->
- PrivDir = ?config(priv_dir, Config),
- [?config(ipfamily, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ [proplists:get_value(ipfamily, Config),
{cacertfile, filename:join(PrivDir, "public_key_cacert.pem")}];
transport_opts(_, Config) ->
- [?config(ipfamily, Config)].
+ [proplists:get_value(ipfamily, Config)].
%%% mod_range
@@ -2076,4 +2231,4 @@ peer(Config) ->
"true";
_ ->
"false"
- end. \ No newline at end of file
+ end.
diff --git a/lib/inets/test/httpd_SUITE_data/mime_types.txt b/lib/inets/test/httpd_SUITE_data/mime_types.txt
new file mode 100644
index 0000000000..3149a119d5
--- /dev/null
+++ b/lib/inets/test/httpd_SUITE_data/mime_types.txt
@@ -0,0 +1,100 @@
+# This is a comment. I love comments.
+
+
+application/activemessage
+application/andrew-inset
+application/applefile
+application/atomicmail
+application/dca-rft
+application/dec-dx
+application/mac-binhex40 hqx
+application/mac-compactpro cpt
+application/macwriteii
+application/msword doc
+application/news-message-id
+application/news-transmission
+application/octet-stream bin dms lha lzh exe class
+application/oda oda
+application/pdf pdf
+application/postscript ai eps ps
+application/powerpoint ppt
+application/remote-printing
+application/rtf rtf
+application/slate
+application/wita
+application/wordperfect5.1
+application/x-bcpio bcpio
+application/x-cdlink vcd
+application/x-compress Z
+application/x-cpio cpio
+application/x-csh csh
+application/x-director dcr dir dxr
+application/x-dvi dvi
+application/x-gtar gtar
+application/x-gzip gz
+application/x-hdf hdf
+application/x-httpd-cgi cgi
+application/x-koan skp skd skt skm
+application/x-latex latex
+application/x-mif mif
+application/x-netcdf nc cdf
+application/x-sh sh
+application/x-shar shar
+application/x-stuffit sit
+application/x-sv4cpio sv4cpio
+application/x-sv4crc sv4crc
+application/x-tar tar
+application/x-tcl tcl
+application/x-tex tex
+application/x-texinfo texinfo texi
+application/x-troff t tr roff
+application/x-troff-man man
+application/x-troff-me me
+application/x-troff-ms ms
+application/x-ustar ustar
+application/x-wais-source src
+application/zip zip
+audio/basic au snd
+audio/mpeg mpga mp2
+audio/x-aiff aif aiff aifc
+audio/x-pn-realaudio ram
+audio/x-pn-realaudio-plugin rpm
+audio/x-realaudio ra
+audio/x-wav wav
+chemical/x-pdb pdb xyz
+image/gif gif
+image/ief ief
+image/jpeg jpeg jpg jpe
+image/png png
+image/tiff tiff tif
+image/x-cmu-raster ras
+image/x-portable-anymap pnm
+image/x-portable-bitmap pbm
+image/x-portable-graymap pgm
+image/x-portable-pixmap ppm
+image/x-rgb rgb
+image/x-xbitmap xbm
+image/x-xpixmap xpm
+image/x-xwindowdump xwd
+message/external-body
+message/news
+message/partial
+message/rfc822
+multipart/alternative
+multipart/appledouble
+multipart/digest
+multipart/mixed
+multipart/parallel
+text/css css
+text/html html htm
+text/plain txt
+text/richtext rtx
+text/tab-separated-values tsv
+text/x-setext etx
+text/x-sgml sgml sgm
+video/mpeg mpeg mpg mpe
+video/quicktime qt mov
+video/x-msvideo avi
+video/x-sgi-movie movie
+x-conference/x-cooltalk ice
+x-world/x-vrml wrl vrml
diff --git a/lib/inets/test/httpd_basic_SUITE.erl b/lib/inets/test/httpd_basic_SUITE.erl
index 352ff3b1ae..f413248092 100644
--- a/lib/inets/test/httpd_basic_SUITE.erl
+++ b/lib/inets/test/httpd_basic_SUITE.erl
@@ -30,7 +30,8 @@
-define(URL_START, "http://localhost:").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() -> [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 30}}].
all() ->
[uri_too_long_414,
@@ -66,8 +67,8 @@ end_per_group(_GroupName, Config) ->
init_per_suite(Config) ->
inets_test_lib:stop_apps([inets]),
inets_test_lib:start_apps([inets]),
- PrivDir = ?config(priv_dir, Config),
- DataDir = ?config(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
Dummy =
"<HTML>
@@ -152,7 +153,7 @@ end_per_testcase(_Case, Config) ->
uri_too_long_414() ->
[{doc, "Test that too long uri's get 414 HTTP code"}].
uri_too_long_414(Config) when is_list(Config) ->
- HttpdConf = ?config(httpd_conf, Config),
+ HttpdConf = proplists:get_value(httpd_conf, Config),
{ok, Pid} = inets:start(httpd, [{max_uri_size, 10}
| HttpdConf]),
Info = httpd:info(Pid),
@@ -173,7 +174,7 @@ uri_too_long_414(Config) when is_list(Config) ->
header_too_long_413() ->
[{doc,"Test that too long headers's get 413 HTTP code"}].
header_too_long_413(Config) when is_list(Config) ->
- HttpdConf = ?config(httpd_conf, Config),
+ HttpdConf = proplists:get_value(httpd_conf, Config),
{ok, Pid} = inets:start(httpd, [{max_header_size, 10}
| HttpdConf]),
Info = httpd:info(Pid),
@@ -192,7 +193,7 @@ header_too_long_413(Config) when is_list(Config) ->
entity_too_long() ->
[{doc, "Test that too long versions and method strings are rejected"}].
entity_too_long(Config) when is_list(Config) ->
- HttpdConf = ?config(httpd_conf, Config),
+ HttpdConf = proplists:get_value(httpd_conf, Config),
{ok, Pid} = inets:start(httpd, HttpdConf),
Info = httpd:info(Pid),
Port = proplists:get_value(port, Info),
@@ -259,7 +260,7 @@ erl_script_nocache_opt(doc) ->
erl_script_nocache_opt(suite) ->
[];
erl_script_nocache_opt(Config) when is_list(Config) ->
- HttpdConf = ?config(httpd_conf, Config),
+ HttpdConf = proplists:get_value(httpd_conf, Config),
{ok, Pid} = inets:start(httpd, [{port, 0}, {erl_script_nocache, true} | HttpdConf]),
Info = httpd:info(Pid),
Port = proplists:get_value(port, Info),
@@ -282,7 +283,7 @@ erl_script_nocache_opt(Config) when is_list(Config) ->
escaped_url_in_error_body() ->
[{doc, "Test Url-encoding see OTP-8940"}].
escaped_url_in_error_body(Config) when is_list(Config) ->
- HttpdConf = ?config(httpd_conf, Config),
+ HttpdConf = proplists:get_value(httpd_conf, Config),
{ok, Pid} = inets:start(httpd, [{port, 0} | HttpdConf]),
Info = httpd:info(Pid),
Port = proplists:get_value(port, Info),
@@ -324,7 +325,7 @@ keep_alive_timeout(doc) ->
keep_alive_timeout(suite) ->
[];
keep_alive_timeout(Config) when is_list(Config) ->
- HttpdConf = ?config(httpd_conf, Config),
+ HttpdConf = proplists:get_value(httpd_conf, Config),
{ok, Pid} = inets:start(httpd, [{port, 0}, {keep_alive, true}, {keep_alive_timeout, 2} | HttpdConf]),
Info = httpd:info(Pid),
Port = proplists:get_value(port, Info),
@@ -348,9 +349,9 @@ script_timeout(Config) when is_list(Config) ->
ok.
verify_script_timeout(Config, ScriptTimeout, StatusCode) ->
- HttpdConf = ?config(httpd_conf, Config),
- CgiScript = ?config(cgi_sleep, Config),
- CgiDir = ?config(cgi_dir, Config),
+ HttpdConf = proplists:get_value(httpd_conf, Config),
+ CgiScript = proplists:get_value(cgi_sleep, Config),
+ CgiDir = proplists:get_value(cgi_dir, Config),
{ok, Pid} = inets:start(httpd, [{port, 0},
{script_alias,
{"/cgi-bin/", CgiDir ++ "/"}},
@@ -371,7 +372,7 @@ verify_script_timeout(Config, ScriptTimeout, StatusCode) ->
slowdose() ->
[{doc, "Testing minimum bytes per second option"}].
slowdose(Config) when is_list(Config) ->
- HttpdConf = ?config(httpd_conf, Config),
+ HttpdConf = proplists:get_value(httpd_conf, Config),
{ok, Pid} = inets:start(httpd, [{port, 0}, {minimum_bytes_per_second, 200}|HttpdConf]),
Info = httpd:info(Pid),
Port = proplists:get_value(port, Info),
@@ -386,9 +387,9 @@ slowdose(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
verify_script_nocache(Config, CgiNoCache, EsiNoCache, CgiOption, EsiOption) ->
- HttpdConf = ?config(httpd_conf, Config),
- CgiScript = ?config(cgi_printenv, Config),
- CgiDir = ?config(cgi_dir, Config),
+ HttpdConf = proplists:get_value(httpd_conf, Config),
+ CgiScript = proplists:get_value(cgi_printenv, Config),
+ CgiDir = proplists:get_value(cgi_dir, Config),
{ok, Pid} = inets:start(httpd, [{port, 0},
{script_alias,
{"/cgi-bin/", CgiDir ++ "/"}},
diff --git a/lib/inets/test/httpd_block.erl b/lib/inets/test/httpd_block.erl
index 44f6f644ad..45547e6d4e 100644
--- a/lib/inets/test/httpd_block.erl
+++ b/lib/inets/test/httpd_block.erl
@@ -133,7 +133,7 @@ block_disturbing_active_timeout_released(Type, Port, Host, Node) ->
block_non_disturbing_active_timeout_not_released(Type, Port, Host, Node) ->
process_flag(trap_exit, true),
Poller = long_poll(Type, Host, Port, Node, 200, 60000),
- test_server:sleep(5000),
+ ct:sleep(5000),
ok = block_nd_server(Node, Host, Port, 40000),
await_normal_process_exit(Poller, "poller", 60000),
blocked = get_admin_state(Node, Host, Port),
diff --git a/lib/inets/test/httpd_load.erl b/lib/inets/test/httpd_load.erl
index 37ebc4fc90..7f4d16139f 100644
--- a/lib/inets/test/httpd_load.erl
+++ b/lib/inets/test/httpd_load.erl
@@ -63,7 +63,7 @@ load_test(Fun, URIs, Type, Host, Port, Node, 0, List) ->
{'EXIT', Pid, Reason} ->
Str = lists:flatten(io_lib:format("client ~p exited: ~p",
[Pid,Reason])),
- test_server:fail(Str);
+ ct:fail(Str);
_ ->
load_test(Fun, URIs, Type, Host, Port, Node, 0, List)
end;
@@ -86,12 +86,11 @@ load_test_client(Fun, [URI|URIs], Type, Host, Port, Node, Boss, Timeout) ->
{'EXIT', {suite_failed, connection_closed, _, _}} ->
%% Some platforms seems to handle heavy load badly.
%% So, back off and see if this helps
- %%?LOG("load_test_client->requestfailed:connection_closed"[]),
2 * Timeout;
_ ->
Timeout
end,
- test_server:sleep(Timeout1),
+ ct:sleep(Timeout1),
load_test_client(Fun, URIs, Type, Host, Port, Node, Boss, Timeout1).
load_test_client_done(Boss) ->
diff --git a/lib/inets/test/httpd_mod.erl b/lib/inets/test/httpd_mod.erl
index 7a1250cb29..d9118aa1a4 100644
--- a/lib/inets/test/httpd_mod.erl
+++ b/lib/inets/test/httpd_mod.erl
@@ -86,240 +86,116 @@ actions(Type, Port, Host, Node) ->
security(ServerRoot, Type, Port, Host, Node) ->
global:register_name(mod_security_test, self()), % Receive events
-
- tsp("security -> "
- "sleep"),
- test_server:sleep(5000),
+
+ ct:sleep(5000),
OpenDir = filename:join([ServerRoot, "htdocs", "open"]),
%% Test blocking / unblocking of users.
%% /open, require user one Aladdin
- tsp("security -> "
- "blocking and unblocking of users - "
- "remove all existing users"),
+
remove_users(Node, ServerRoot, Host, Port, "open"),
- tsp("security -> "
- "blocking and unblocking of users - "
- "auth request for nonex user 'one' - expect 401"),
auth_request(Type, Host, Port, Node, "/open/", "one", "onePassword",
[{statuscode, 401}]),
- tsp("security -> "
- "blocking and unblocking of users - "
- "await fail security event"),
receive_security_event({event, auth_fail, Port, OpenDir,
[{user, "one"}, {password, "onePassword"}]},
Node, Port),
- tsp("security -> "
- "blocking and unblocking of users - "
- "auth request for nonex user 'two' - expect 401"),
auth_request(Type,Host,Port,Node,"/open/", "two", "twoPassword",
[{statuscode, 401}]),
- tsp("security -> "
- "blocking and unblocking of users - "
- "await fail security event"),
receive_security_event({event, auth_fail, Port, OpenDir,
[{user, "two"}, {password, "twoPassword"}]},
Node, Port),
-
- tsp("security -> "
- "blocking and unblocking of users - "
- "auth request for nonex user 'Alladin' - expect 401"),
auth_request(Type, Host, Port, Node,"/open/", "Aladdin",
"AladdinPassword", [{statuscode, 401}]),
- tsp("security -> "
- "blocking and unblocking of users - "
- "await fail security event"),
receive_security_event({event, auth_fail, Port, OpenDir,
[{user, "Aladdin"},
{password, "AladdinPassword"}]},
Node, Port),
-
- tsp("security -> "
- "blocking and unblocking of users - "
- "add user 'one'"),
add_user(Node, ServerRoot, Port, "open", "one", "onePassword", []),
- tsp("security -> "
- "blocking and unblocking of users - "
- "add user 'two'"),
add_user(Node, ServerRoot, Port, "open", "two", "twoPassword", []),
- tsp("security -> "
- "blocking and unblocking of users - "
- "auth request 1 for user 'one' with wrong password - expect 401"),
auth_request(Type, Host, Port, Node,"/open/", "one", "WrongPassword",
[{statuscode, 401}]),
-
- tsp("security -> "
- "blocking and unblocking of users - "
- "await fail security event"),
receive_security_event({event, auth_fail, Port, OpenDir,
[{user, "one"}, {password, "WrongPassword"}]},
Node, Port),
-
- tsp("security -> "
- "blocking and unblocking of users - "
- "auth request 2 for user 'one' with wrong password - expect 401"),
auth_request(Type, Host, Port, Node,"/open/", "one", "WrongPassword",
[{statuscode, 401}]),
- tsp("security -> "
- "blocking and unblocking of users - "
- "await fail security event"),
receive_security_event({event, auth_fail, Port, OpenDir,
[{user, "one"}, {password, "WrongPassword"}]},
Node, Port),
-
- tsp("security -> "
- "blocking and unblocking of users - "
- "await block security event (two failed attempts)"),
- receive_security_event({event, user_block, Port, OpenDir,
+ receive_security_event({event, user_block, Port, OpenDir,
[{user, "one"}]}, Node, Port),
- tsp("security -> "
- "blocking and unblocking of users - "
- "unregister - no more security events"),
global:unregister_name(mod_security_test), % No more events.
- tsp("security -> "
- "blocking and unblocking of users - "
- "auth request for user 'one' with wrong password - expect 401"),
auth_request(Type, Host, Port, Node,"/open/", "one", "WrongPassword",
[{statuscode, 401}]),
- tsp("security -> "
- "blocking and unblocking of users - "
- "auth request for user 'one' with correct password - expect 403"),
auth_request(Type, Host, Port, Node,"/open/", "one", "onePassword",
[{statuscode, 403}]),
%% User "one" should be blocked now..
- tsp("security -> "
- "blocking and unblocking of users - "
- "list blocked users - 'one' should be the only one"),
case list_blocked_users(Node, Port) of
[{"one",_, Port, OpenDir,_}] ->
ok;
Blocked ->
- tsp(" *** unexpected blocked users ***"
- "~n Blocked: ~p", [Blocked]),
exit({unexpected_blocked, Blocked})
end,
- tsp("security -> "
- "blocking and unblocking of users - "
- "list users blocked for dir '~p' - "
- "user 'one' should be the only one", [OpenDir]),
[{"one",_, Port, OpenDir,_}] = list_blocked_users(Node, Port, OpenDir),
- tsp("security -> "
- "blocking and unblocking of users - "
- "unblock user 'one' for dir '~p'", [OpenDir]),
true = unblock_user(Node, "one", Port, OpenDir),
%% User "one" should not be blocked any more.
- tsp("security -> "
- "blocking and unblocking of users - "
- "ensure user 'one' is no longer blocked"),
[] = list_blocked_users(Node, Port),
-
- tsp("security -> "
- "blocking and unblocking of users - "
- "auth request for user 'one' with correct password - expect 200"),
auth_request(Type, Host, Port, Node,"/open/", "one", "onePassword",
[{statuscode, 200}]),
%% Test list_auth_users & auth_timeout
-
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "list auth users - expect user 'one'"),
["one"] = list_auth_users(Node, Port),
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "auth request for user 'two' with wrong password - expect 401"),
auth_request(Type, Host, Port, Node,"/open/", "two", "onePassword",
[{statuscode, 401}]),
-
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "list auth users - expect user 'one'"),
["one"] = list_auth_users(Node, Port),
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "list auth users for dir '~p' - expect user 'one'", [OpenDir]),
["one"] = list_auth_users(Node, Port, OpenDir),
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "auth request for user 'two' with correct password - expect 401"),
auth_request(Type, Host, Port, Node,"/open/", "two", "twoPassword",
[{statuscode, 401}]),
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "list auth users - expect user 'one'"),
["one"] = list_auth_users(Node, Port),
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "list auth users for dir '~p' - expect user 'one'", [OpenDir]),
["one"] = list_auth_users(Node, Port, OpenDir),
%% Wait for successful auth to timeout.
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "wait for successful auth to timeout"),
- test_server:sleep(?AUTH_TIMEOUT*1001),
-
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "list auth users - expect none"),
+ ct:sleep(?AUTH_TIMEOUT*1001),
+
[] = list_auth_users(Node, Port),
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "list auth users for dir '~p'~n - expect none", [OpenDir]),
+
[] = list_auth_users(Node, Port, OpenDir),
%% "two" is blocked.
- tsp("security -> "
- "list-auth-users and auth-timeout - "
- "unblock user 'two' for dir '~p'", [OpenDir]),
true = unblock_user(Node, "two", Port, OpenDir),
-
-
%% Test explicit blocking. Block user 'two'.
- tsp("security -> "
- "explicit blocking - list blocked users - should be none"),
[] = list_blocked_users(Node,Port,OpenDir),
- tsp("security -> "
- "explicit blocking - "
- "block user 'two' for dir '~p'", [OpenDir]),
true = block_user(Node, "two", Port, OpenDir, 10),
-
- tsp("security -> "
- "explicit blocking - "
- "auth request for user 'two' with correct password - expect 401"),
auth_request(Type, Host, Port, Node,"/open/", "two", "twoPassword",
- [{statuscode, 401}]),
- tsp("security -> "
- "done").
-
+ [{statuscode, 401}]).
%%-------------------------------------------------------------------------
auth(Type, Port, Host, Node) ->
@@ -743,7 +619,6 @@ cgi(Type, Port, Host, Node) ->
end,
%% The length (> 100) is intentional
-%% tsp("cgi -> request 01 with length > 100"),
ok = httpd_test_lib:
verify_request(Type, Host, Port, Node,
"POST /cgi-bin/" ++ Script3 ++
@@ -771,55 +646,51 @@ cgi(Type, Port, Host, Node) ->
{version, "HTTP/1.0"},
{header, "content-type", "text/plain"}]),
-%% tsp("cgi -> request 02"),
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"GET /cgi-bin/"++ Script ++
" HTTP/1.0\r\n\r\n",
[{statuscode, 200},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> request 03"),
+
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"GET /cgi-bin/not_there "
"HTTP/1.0\r\n\r\n",
[{statuscode, 404},{statuscode, 500},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> request 04"),
+
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"GET /cgi-bin/"++ Script ++
"?Nisse:kkk?sss/lll HTTP/1.0\r\n\r\n",
[{statuscode, 200},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> request 04"),
+
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"POST /cgi-bin/"++ Script ++
" HTTP/1.0\r\n\r\n",
[{statuscode, 200},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> request 05"),
+
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"GET /htbin/"++ Script ++
" HTTP/1.0\r\n\r\n",
[{statuscode, 200},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> request 06"),
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"GET /htbin/not_there "
"HTTP/1.0\r\n\r\n",
[{statuscode, 404},{statuscode, 500},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> request 07"),
+
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"GET /htbin/"++ Script ++
"?Nisse:kkk?sss/lll HTTP/1.0\r\n\r\n",
[{statuscode, 200},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> request 08"),
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"POST /htbin/"++ Script ++
" HTTP/1.0\r\n\r\n",
[{statuscode, 200},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> request 09"),
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"POST /htbin/"++ Script ++
" HTTP/1.0\r\n\r\n",
@@ -827,31 +698,25 @@ cgi(Type, Port, Host, Node) ->
{version, "HTTP/1.0"}]),
%% Execute an existing, but bad CGI script..
-%% tsp("cgi -> request 10 - bad script"),
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"POST /htbin/"++ Script2 ++
" HTTP/1.0\r\n\r\n",
[{statuscode, 404},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> request 11 - bad script"),
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"POST /cgi-bin/"++ Script2 ++
" HTTP/1.0\r\n\r\n",
[{statuscode, 404},
{version, "HTTP/1.0"}]),
-%% tsp("cgi -> done"),
-
%% Check "ScriptNoCache" directive (default: false)
ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
"GET /cgi-bin/" ++ Script ++
" HTTP/1.0\r\n\r\n",
[{statuscode, 200},
{no_header, "cache-control"},
- {version, "HTTP/1.0"}]),
- ok.
-
+ {version, "HTTP/1.0"}]).
%%--------------------------------------------------------------------
esi(Type, Port, Host, Node) ->
@@ -1018,18 +883,15 @@ list_users(Node, Root, _Host, Port, Dir) ->
receive_security_event(Event, Node, Port) ->
- tsp("receive_security_event -> await ~w event", [element(2, Event)]),
receive
Event ->
- tsp("receive_security_event -> "
- "received expected ~w event", [element(2, Event)]),
ok;
{'EXIT', _, _} ->
receive_security_event(Event, Node, Port)
after 5000 ->
%% Flush the message queue, to see if we got something...
Msgs = inets_test_lib:flush(),
- tsf({expected_event_not_received, Msgs})
+ ct:fail({expected_event_not_received, Msgs})
end.
@@ -1045,10 +907,10 @@ receive_security_event(Event, Node, Port) ->
%% {'EXIT', _, _} ->
%% receive_security_event(Event, Node, Port);
%% Other ->
-%% test_server:fail({unexpected_event,
+%% ct:fail({unexpected_event,
%% {expected, Event}, {received, Other}})
%% after 5000 ->
-%% test_server:fail(no_event_recived)
+%% ct:fail(no_event_recived)
%% end.
@@ -1130,17 +992,4 @@ check_lists_members1(L1,L2) ->
{error,{lists_not_equal,L1,L2}}.
-%% p(F) ->
-%% p(F, []).
-
-%% p(F, A) ->
-%% io:format(user, "~w:" ++ F ++ "~n", [?MODULE|A]).
-
-tsp(F) ->
- inets_test_lib:tsp(F).
-tsp(F, A) ->
- inets_test_lib:tsp(F, A).
-
-tsf(Reason) ->
- test_server:fail(Reason).
diff --git a/lib/inets/test/httpd_time_test.erl b/lib/inets/test/httpd_time_test.erl
index fddc0003cd..e858ddf4f6 100644
--- a/lib/inets/test/httpd_time_test.erl
+++ b/lib/inets/test/httpd_time_test.erl
@@ -117,7 +117,7 @@ main(N, SocketType, Host, Port, Time)
loop(Pollers, Timeout) ->
d("loop -> entry when"
"~n Timeout: ~p", [Timeout]),
- Start = inets_time_compat:monotonic_time(),
+ Start = erlang:monotonic_time(),
receive
{'EXIT', Pid, {poller_stat_failure, SocketType, Host, Port, Time, Reason}} ->
diff --git a/lib/inets/test/inets_SUITE.erl b/lib/inets/test/inets_SUITE.erl
index 928d9dc391..38b8229389 100644
--- a/lib/inets/test/inets_SUITE.erl
+++ b/lib/inets/test/inets_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -28,10 +28,13 @@
-define(NUM_DEFAULT_SERVICES, 1).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{seconds,5}}
+ ].
all() ->
- [{group, app_test}, {group, appup_test},
+ [{group, app_test},
{group, services_test}, httpd_reload].
groups() ->
@@ -42,8 +45,7 @@ groups() ->
start_ftpc,
start_tftpd
]},
- {app_test, [], [{inets_app_test, all}]},
- {appup_test, [], [{inets_appup_test, all}]}].
+ {app_test, [], [app, appup]}].
init_per_group(_GroupName, Config) ->
Config.
@@ -84,6 +86,10 @@ end_per_suite(_Config) ->
%% Note: This function is free to add any key/value pairs to the Config
%% variable, but should NOT alter/remove any existing entries.
%%--------------------------------------------------------------------
+init_per_testcase(httpd_reload, Config) ->
+ inets:stop(),
+ ct:timetrap({seconds, 40}),
+ Config;
init_per_testcase(_Case, Config) ->
inets:stop(),
Config.
@@ -102,6 +108,15 @@ end_per_testcase(_, Config) ->
%%-------------------------------------------------------------------------
%% Test cases starts here.
%%-------------------------------------------------------------------------
+app() ->
+ [{doc, "Test that the inets app file is ok"}].
+app(Config) when is_list(Config) ->
+ ok = ?t:app_test(inets).
+%%--------------------------------------------------------------------
+appup() ->
+ [{doc, "Test that the inets appup file is ok"}].
+appup(Config) when is_list(Config) ->
+ ok = ?t:appup_test(inets).
start_inets() ->
[{doc, "Test inets API functions"}].
@@ -134,7 +149,7 @@ start_httpc() ->
[{doc, "Start/stop of httpc service"}].
start_httpc(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ok = inets:start(),
{ok, Pid0} = inets:start(httpc, [{profile, foo}]),
@@ -145,7 +160,7 @@ start_httpc(Config) when is_list(Config) ->
inets:stop(httpc, Pid0),
- test_server:sleep(100),
+ ct:sleep(100),
Pids1 = [ServicePid || {_, ServicePid} <- inets:services()],
false = lists:member(Pid0, Pids1),
@@ -188,7 +203,7 @@ start_httpd() ->
[{doc, "Start/stop of httpd service"}].
start_httpd(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
HttpdConf = [{server_name, "httpd_test"}, {server_root, PrivDir},
{document_root, PrivDir}, {bind_address, any}],
@@ -197,11 +212,19 @@ start_httpd(Config) when is_list(Config) ->
Pids0 = [ServicePid || {_, ServicePid} <- inets:services()],
true = lists:member(Pid0, Pids0),
[_|_] = inets:services_info(),
-
inets:stop(httpd, Pid0),
- test_server:sleep(500),
+ ct:sleep(500),
+ Pids1 = [ServicePid || {_, ServicePid} <- inets:services()],
+ false = lists:member(Pid0, Pids1),
+ {ok, Pid0b} =
+ inets:start(httpd, [{port, 0}, {ipfamily, inet6fb4} | HttpdConf]),
+ Pids0b = [ServicePid || {_, ServicePid} <- inets:services()],
+ true = lists:member(Pid0b, Pids0b),
+ [_|_] = inets:services_info(),
+ inets:stop(httpd, Pid0b),
+ ct:sleep(500),
Pids1 = [ServicePid || {_, ServicePid} <- inets:services()],
- false = lists:member(Pid0, Pids1),
+ false = lists:member(Pid0b, Pids1),
{ok, Pid1} =
inets:start(httpd, [{port, 0}, {ipfamily, inet} | HttpdConf],
stand_alone),
@@ -212,7 +235,7 @@ start_httpd(Config) when is_list(Config) ->
{'EXIT', Pid1, shutdown} ->
ok
after 100 ->
- test_server:fail(stand_alone_not_shutdown)
+ ct:fail(stand_alone_not_shutdown)
end,
ok = inets:stop(),
File0 = filename:join(PrivDir, "httpd.conf"),
@@ -279,44 +302,38 @@ start_httpd(Config) when is_list(Config) ->
start_ftpc(doc) ->
[{doc, "Start/stop of ftpc service"}];
-start_ftpc(Config) when is_list(Config) ->
+start_ftpc(Config0) when is_list(Config0) ->
process_flag(trap_exit, true),
ok = inets:start(),
- try
- begin
- {_Tag, FtpdHost} = ftp_suite_lib:dirty_select_ftpd_host(Config),
- case inets:start(ftpc, [{host, FtpdHost}]) of
- {ok, Pid0} ->
- Pids0 = [ServicePid || {_, ServicePid} <-
- inets:services()],
- true = lists:member(Pid0, Pids0),
- [_|_] = inets:services_info(),
- inets:stop(ftpc, Pid0),
- test_server:sleep(100),
- Pids1 = [ServicePid || {_, ServicePid} <-
- inets:services()],
- false = lists:member(Pid0, Pids1),
- {ok, Pid1} =
- inets:start(ftpc, [{host, FtpdHost}], stand_alone),
- Pids2 = [ServicePid || {_, ServicePid} <-
- inets:services()],
- false = lists:member(Pid1, Pids2),
- ok = inets:stop(stand_alone, Pid1),
- receive
- {'EXIT', Pid1, shutdown} ->
- ok
- after 100 ->
- ct:fail(stand_alone_not_shutdown)
- end,
- ok = inets:stop(),
- ok;
- _ ->
- {skip, "Unable to reach selected FTP server " ++ FtpdHost}
- end
- end
- catch
- throw:{error, not_found} ->
- {skip, "No available FTP servers"}
+ case ftp_SUITE:init_per_suite(Config0) of
+ {skip, _} = Skip ->
+ Skip;
+ Config ->
+ FtpdHost = proplists:get_value(ftpd_host,Config),
+ {ok, Pid0} = inets:start(ftpc, [{host, FtpdHost}]),
+ Pids0 = [ServicePid || {_, ServicePid} <-
+ inets:services()],
+ true = lists:member(Pid0, Pids0),
+ [_|_] = inets:services_info(),
+ inets:stop(ftpc, Pid0),
+ ct:sleep(100),
+ Pids1 = [ServicePid || {_, ServicePid} <-
+ inets:services()],
+ false = lists:member(Pid0, Pids1),
+ {ok, Pid1} =
+ inets:start(ftpc, [{host, FtpdHost}], stand_alone),
+ Pids2 = [ServicePid || {_, ServicePid} <-
+ inets:services()],
+ false = lists:member(Pid1, Pids2),
+ ok = inets:stop(stand_alone, Pid1),
+ receive
+ {'EXIT', Pid1, shutdown} ->
+ ok
+ after 100 ->
+ ct:fail(stand_alone_not_shutdown)
+ end,
+ ok = inets:stop(),
+ catch ftp_SUITE:end_per_SUITE(Config)
end.
%%-------------------------------------------------------------------------
@@ -331,7 +348,7 @@ start_tftpd(Config) when is_list(Config) ->
true = lists:member(Pid0, Pids0),
[_|_] = inets:services_info(),
inets:stop(tftpd, Pid0),
- test_server:sleep(100),
+ ct:sleep(100),
Pids1 = [ServicePid || {_, ServicePid} <- inets:services()],
false = lists:member(Pid0, Pids1),
{ok, Pid1} =
@@ -343,7 +360,7 @@ start_tftpd(Config) when is_list(Config) ->
{'EXIT', Pid1, shutdown} ->
ok
after 100 ->
- test_server:fail(stand_alone_not_shutdown)
+ ct:fail(stand_alone_not_shutdown)
end,
ok = inets:stop(),
application:load(inets),
@@ -360,34 +377,34 @@ httpd_reload() ->
[{doc, "Reload httpd configuration without restarting service"}].
httpd_reload(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- PrivDir = ?config(priv_dir, Config),
- DataDir = ?config(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
HttpdConf = [{server_name, "httpd_test"},
{server_root, PrivDir},
{document_root, PrivDir},
{bind_address, "localhost"}],
ok = inets:start(),
- test_server:sleep(5000),
+ ct:sleep(5000),
{ok, Pid0} = inets:start(httpd, [{port, 0},
{ipfamily, inet} | HttpdConf]),
- test_server:sleep(5000),
+ ct:sleep(5000),
[{port, Port0}] = httpd:info(Pid0, [port]),
- test_server:sleep(5000),
+ ct:sleep(5000),
[{document_root, PrivDir}] = httpd:info(Pid0, [document_root]),
- test_server:sleep(5000),
+ ct:sleep(5000),
ok = httpd:reload_config([{port, Port0}, {ipfamily, inet},
{server_name, "httpd_test"},
{server_root, PrivDir},
{document_root, DataDir},
{bind_address, "localhost"}], non_disturbing),
- test_server:sleep(5000),
+ ct:sleep(5000),
[{document_root, DataDir}] = httpd:info(Pid0, [document_root]),
- test_server:sleep(5000),
+ ct:sleep(5000),
ok = httpd:reload_config([{port, Port0}, {ipfamily, inet},
{server_name, "httpd_test"},
diff --git a/lib/inets/test/inets_app_test.erl b/lib/inets/test/inets_app_test.erl
deleted file mode 100644
index c6d0715e1f..0000000000
--- a/lib/inets/test/inets_app_test.erl
+++ /dev/null
@@ -1,245 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2015. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%
-%%----------------------------------------------------------------------
-%% Purpose: Verify the application specifics of the inets application
-%%----------------------------------------------------------------------
--module(inets_app_test).
-
--compile(export_all).
-
--include("inets_test_lib.hrl").
-
-
-% t() -> megaco_test_lib:t(?MODULE).
-% t(Case) -> megaco_test_lib:t({?MODULE, Case}).
-
-
-%% Test server callbacks
-init_per_testcase(_, Config) ->
- Config.
-
-end_per_testcase(_Case, Config) ->
- Config.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-all() ->
- [fields, modules, exportall, app_depend].
-
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-init_per_suite(suite) -> [];
-init_per_suite(doc) -> [];
-init_per_suite(Config) when is_list(Config) ->
- case is_app(inets) of
- {ok, AppFile} ->
- io:format("AppFile: ~n~p~n", [AppFile]),
- inets:print_version_info(),
- [{app_file, AppFile}|Config];
- {error, Reason} ->
- fail(Reason)
- end.
-
-is_app(App) ->
- LibDir = code:lib_dir(App),
- File = filename:join([LibDir, "ebin", atom_to_list(App) ++ ".app"]),
- case file:consult(File) of
- {ok, [{application, App, AppFile}]} ->
- {ok, AppFile};
- Error ->
- {error, {invalid_format, Error}}
- end.
-
-
-end_per_suite(suite) -> [];
-end_per_suite(doc) -> [];
-end_per_suite(Config) when is_list(Config) ->
- Config.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-fields(suite) ->
- [];
-fields(doc) ->
- [];
-fields(Config) when is_list(Config) ->
- AppFile = key1search(app_file, Config),
- Fields = [vsn, description, modules, registered, applications],
- case check_fields(Fields, AppFile, []) of
- [] ->
- ok;
- Missing ->
- fail({missing_fields, Missing})
- end.
-
-check_fields([], _AppFile, Missing) ->
- Missing;
-check_fields([Field|Fields], AppFile, Missing) ->
- check_fields(Fields, AppFile, check_field(Field, AppFile, Missing)).
-
-check_field(Name, AppFile, Missing) ->
- io:format("checking field: ~p~n", [Name]),
- case lists:keymember(Name, 1, AppFile) of
- true ->
- Missing;
- false ->
- [Name|Missing]
- end.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-modules(suite) ->
- [];
-modules(doc) ->
- [];
-modules(Config) when is_list(Config) ->
- AppFile = key1search(app_file, Config),
- Mods = key1search(modules, AppFile),
- EbinList = get_ebin_mods(inets),
- case missing_modules(Mods, EbinList, []) of
- [] ->
- ok;
- Missing ->
- throw({error, {missing_modules, Missing}})
- end,
- case extra_modules(Mods, EbinList, []) of
- [] ->
- ok;
- Extra ->
- throw({error, {extra_modules, Extra}})
- end,
- {ok, Mods}.
-
-get_ebin_mods(App) ->
- LibDir = code:lib_dir(App),
- EbinDir = filename:join([LibDir,"ebin"]),
- {ok, Files0} = file:list_dir(EbinDir),
- Files1 = [lists:reverse(File) || File <- Files0],
- [list_to_atom(lists:reverse(Name)) || [$m,$a,$e,$b,$.|Name] <- Files1].
-
-
-missing_modules([], _Ebins, Missing) ->
- Missing;
-missing_modules([Mod|Mods], Ebins, Missing) ->
- case lists:member(Mod, Ebins) of
- true ->
- missing_modules(Mods, Ebins, Missing);
- false ->
- io:format("missing module: ~p~n", [Mod]),
- missing_modules(Mods, Ebins, [Mod|Missing])
- end.
-
-
-extra_modules(_Mods, [], Extra) ->
- Extra;
-extra_modules(Mods, [Mod|Ebins], Extra) ->
- case lists:member(Mod, Mods) of
- true ->
- extra_modules(Mods, Ebins, Extra);
- false ->
- io:format("supefluous module: ~p~n", [Mod]),
- extra_modules(Mods, Ebins, [Mod|Extra])
- end.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-exportall(suite) ->
- [];
-exportall(doc) ->
- [];
-exportall(Config) when is_list(Config) ->
- AppFile = key1search(app_file, Config),
- Mods = key1search(modules, AppFile),
- check_export_all(Mods).
-
-
-check_export_all([]) ->
- ok;
-check_export_all([Mod|Mods]) ->
- case (catch apply(Mod, module_info, [compile])) of
- {'EXIT', {undef, _}} ->
- check_export_all(Mods);
- O ->
- case lists:keysearch(options, 1, O) of
- false ->
- check_export_all(Mods);
- {value, {options, List}} ->
- case lists:member(export_all, List) of
- true ->
- throw({error, {export_all, Mod}});
- false ->
- check_export_all(Mods)
- end
- end
- end.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-app_depend(suite) ->
- [];
-app_depend(doc) ->
- [];
-app_depend(Config) when is_list(Config) ->
- AppFile = key1search(app_file, Config),
- Apps = key1search(applications, AppFile),
- check_apps(Apps).
-
-
-check_apps([]) ->
- ok;
-check_apps([App|Apps]) ->
- case is_app(App) of
- {ok, _} ->
- check_apps(Apps);
- Error ->
- throw({error, {missing_app, {App, Error}}})
- end.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-fail(Reason) ->
- exit({suite_failed, Reason}).
-
-key1search(Key, L) ->
- case lists:keysearch(Key, 1, L) of
- undefined ->
- fail({not_found, Key, L});
- {value, {Key, Value}} ->
- Value
- end.
diff --git a/lib/inets/test/inets_appup_test.erl b/lib/inets/test/inets_appup_test.erl
deleted file mode 100644
index b76cd59141..0000000000
--- a/lib/inets/test/inets_appup_test.erl
+++ /dev/null
@@ -1,71 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
-%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
-%% you may not use this file except in compliance with the License.
-%% You may obtain a copy of the License at
-%%
-%% http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%
-%%----------------------------------------------------------------------
-%% Purpose: Verify the application specifics of the Inets application
-%%----------------------------------------------------------------------
--module(inets_appup_test).
-
--compile(export_all).
--include_lib("common_test/include/ct.hrl").
-
-
-%% Test server callbacks
-init_per_testcase(_Case, Config) ->
- Config.
-
-end_per_testcase(_Case, Config) ->
- Config.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-all() ->
- [appup].
-
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-init_per_suite(suite) -> [];
-init_per_suite(doc) -> [];
-init_per_suite(Config) when is_list(Config) ->
- Config.
-
-
-end_per_suite(suite) -> [];
-end_per_suite(doc) -> [];
-end_per_suite(Config) when is_list(Config) ->
- Config.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-appup() ->
- [{doc, "Perform a simple check of the inets appup file"}].
-appup(Config) when is_list(Config) ->
- ok = ?t:appup_test(inets).
diff --git a/lib/inets/test/inets_socketwrap_SUITE.erl b/lib/inets/test/inets_socketwrap_SUITE.erl
index cfbda3ccf5..18df995215 100644
--- a/lib/inets/test/inets_socketwrap_SUITE.erl
+++ b/lib/inets/test/inets_socketwrap_SUITE.erl
@@ -61,8 +61,8 @@ end_per_testcase(_, Config) ->
start_httpd_fd() ->
[{doc, "Start/stop of httpd service with socket wrapper"}].
start_httpd_fd(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
- DataDir = ?config(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
HttpdConf = [{port, 80}, {ipfamily, inet},
{server_name, "httpd_fd_test"}, {server_root, PrivDir},
{document_root, PrivDir}, {bind_address, any}],
@@ -94,7 +94,7 @@ start_httpd_fd(Config) when is_list(Config) ->
start_tftpd_fd() ->
[{doc, "Start/stop of tfpd service with socket wrapper"}].
start_tftpd_fd(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
case setup_node_info(node()) of
{skip, _} = Skip ->
Skip;
diff --git a/lib/inets/test/inets_sup_SUITE.erl b/lib/inets/test/inets_sup_SUITE.erl
index 9836cd76e0..1e664337e6 100644
--- a/lib/inets/test/inets_sup_SUITE.erl
+++ b/lib/inets/test/inets_sup_SUITE.erl
@@ -26,11 +26,14 @@
%% Note: This directive should only be used in test suites.
-compile(export_all).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{seconds, 10}}
+ ].
all() ->
[default_tree, ftpc_worker, tftpd_worker,
- httpd_subtree, httpd_subtree_profile,
+ httpd_config, httpd_subtree, httpd_subtree_profile,
httpc_subtree].
groups() ->
@@ -49,11 +52,32 @@ end_per_suite(_) ->
inets:stop(),
ok.
-init_per_testcase(httpd_subtree, Config) ->
- Dog = test_server:timetrap(?t:minutes(1)),
- NewConfig = lists:keydelete(watchdog, 1, Config),
- PrivDir = ?config(priv_dir, Config),
- Dir = filename:join(PrivDir, "root"),
+init_per_testcase(httpd_config = TC, Config) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Dir = filename:join(PrivDir, TC),
+ ok = file:make_dir(Dir),
+
+ FallbackConfig = [{port, 0},
+ {server_name,"www.test"},
+ {modules, [mod_get]},
+ {server_root, Dir},
+ {document_root, Dir},
+ {bind_address, any},
+ {ipfamily, inet6fb4}],
+ try
+ inets:stop(),
+ inets:start(),
+ inets:start(httpd, FallbackConfig),
+ Config
+ catch
+ _:Reason ->
+ inets:stop(),
+ exit({failed_starting_inets, Reason})
+ end;
+
+init_per_testcase(httpd_subtree = TC, Config) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Dir = filename:join(PrivDir, TC),
ok = file:make_dir(Dir),
SimpleConfig = [{port, 0},
@@ -67,18 +91,16 @@ init_per_testcase(httpd_subtree, Config) ->
inets:stop(),
inets:start(),
inets:start(httpd, SimpleConfig),
- [{watchdog, Dog} | NewConfig]
+ Config
catch
_:Reason ->
inets:stop(),
exit({failed_starting_inets, Reason})
end;
-init_per_testcase(httpd_subtree_profile, Config) ->
- Dog = test_server:timetrap(?t:minutes(1)),
- NewConfig = lists:keydelete(watchdog, 1, Config),
- PrivDir = ?config(priv_dir, Config),
- Dir = filename:join(PrivDir, "root"),
+init_per_testcase(httpd_subtree_profile = TC, Config) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Dir = filename:join(PrivDir, TC),
ok = file:make_dir(Dir),
SimpleConfig = [{port, 0},
@@ -93,7 +115,7 @@ init_per_testcase(httpd_subtree_profile, Config) ->
inets:stop(),
inets:start(),
{ok, _} = inets:start(httpd, SimpleConfig),
- [{watchdog, Dog} | NewConfig]
+ Config
catch
_:Reason ->
inets:stop(),
@@ -102,24 +124,18 @@ init_per_testcase(httpd_subtree_profile, Config) ->
init_per_testcase(_Case, Config) ->
- Dog = test_server:timetrap(?t:minutes(5)),
- NewConfig = lists:keydelete(watchdog, 1, Config),
inets:stop(),
ok = inets:start(),
- [{watchdog, Dog} | NewConfig].
+ Config.
end_per_testcase(Case, Config) when Case == httpd_subtree;
Case == httpd_subtree_profile ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
Dir = filename:join(PrivDir, "root"),
inets_test_lib:del_dirs(Dir),
ok;
-end_per_testcase(_, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_, _) ->
inets:stop(),
ok.
@@ -164,29 +180,25 @@ default_tree(Config) when is_list(Config) ->
ftpc_worker() ->
[{doc, "Makes sure the ftp worker processes are added and removed "
"appropriatly to/from the supervison tree."}].
-ftpc_worker(Config) when is_list(Config) ->
+ftpc_worker(Config0) when is_list(Config0) ->
[] = supervisor:which_children(ftp_sup),
- try
- begin
- {_Tag, FtpdHost} = ftp_suite_lib:dirty_select_ftpd_host(Config),
- case inets:start(ftpc, [{host, FtpdHost}]) of
- {ok, Pid} ->
- case supervisor:which_children(ftp_sup) of
- [{_,_, worker, [ftp]}] ->
- inets:stop(ftpc, Pid),
- test_server:sleep(5000),
- [] = supervisor:which_children(ftp_sup),
- ok;
- Children ->
- exit({unexpected_children, Children})
- end;
- _ ->
- {skip, "Unable to reach test FTP server"}
+ case ftp_SUITE:init_per_suite(Config0) of
+ {skip, _} = Skip ->
+ Skip;
+ Config ->
+ FtpdHost = proplists:get_value(ftpd_host,Config),
+ {ok, Pid} = inets:start(ftpc, [{host, FtpdHost}]),
+ case supervisor:which_children(ftp_sup) of
+ [{_,_, worker, [ftp]}] ->
+ inets:stop(ftpc, Pid),
+ ct:sleep(5000),
+ [] = supervisor:which_children(ftp_sup),
+ catch ftp_SUITE:end_per_SUITE(Config),
+ ok;
+ Children ->
+ catch ftp_SUITE:end_per_SUITE(Config),
+ exit({unexpected_children, Children})
end
- end
- catch
- throw:{error, not_found} ->
- {skip, "No available FTP servers"}
end.
tftpd_worker() ->
@@ -200,10 +212,15 @@ tftpd_worker(Config) when is_list(Config) ->
[{_,Pid0, worker, _}] = supervisor:which_children(tftp_sup),
inets:stop(tftpd, Pid0),
- test_server:sleep(5000),
+ ct:sleep(5000),
[] = supervisor:which_children(tftp_sup),
ok.
+httpd_config() ->
+ [{doc, "Makes sure the httpd config works for inet6fb4."}].
+httpd_config(Config) when is_list(Config) ->
+ do_httpd_subtree(Config, default).
+
httpd_subtree() ->
[{doc, "Makes sure the httpd sub tree is correct."}].
httpd_subtree(Config) when is_list(Config) ->
diff --git a/lib/inets/test/inets_test_lib.hrl b/lib/inets/test/inets_test_lib.hrl
index a36ab0b1cf..d436395290 100644
--- a/lib/inets/test/inets_test_lib.hrl
+++ b/lib/inets/test/inets_test_lib.hrl
@@ -21,96 +21,8 @@
%%----------------------------------------------------------------------
%% Purpose: Define common macros for testing
%%----------------------------------------------------------------------
-
-%% - Print macros -
-
--ifdef(inets_debug).
--define(DEBUG(F,A), inets_test_lib:debug(F, A, ?MODULE, ?LINE)).
--else.
--define(DEBUG(F,A),ok).
--endif.
-
--ifdef(inets_log).
--define(LOG(F,A), inets_test_lib:log(F, A, ?MODULE, ?LINE)).
--else.
--define(LOG(F,A),ok).
--endif.
-
--define(INFO(F,A), inets_test_lib:info(F, A, ?MODULE, ?LINE)).
--define(PRINT(F,A), inets_test_lib:print(F, A, ?MODULE, ?LINE)).
-
-
-%% - Macros stolen from the test server -
-
--ifndef(line).
--define(line,put(test_server_loc,{?MODULE,?LINE}),).
--endif.
-
-
-%% - OS Command and stuff
-
--define(OSCMD(Cmd), inets_test_lib:oscmd(Cmd)).
-
--define(PRINT_SYSTEM_INFO(P), inets_test_lib:print_system_info(P)).
-
--define(RUN_ON_OS(OS, FUN), inets_test_lib:run_on_os(OS, FUN)).
--define(RUN_ON_WINDOWS(FUN), inets_test_lib:run_on_windows(FUN)).
-
-
-%% - Test case macros -
-
--define(EXPANDABLE(I, C, F), inets_test_lib:expandable(I, C, F)).
--define(OS_BASED_SKIP(Skippable),
- inets_test_lib:os_based_skip(Skippable)).
-
--define(NON_PC_TC_MAYBE_SKIP(Config, Condition),
- inets_test_lib:non_pc_tc_maybe_skip(Config, Condition, ?MODULE, ?LINE)).
-
-
-
%% - Misc macros -
-define(ENSURE_STARTED(A), inets_test_lib:ensure_started(A)).
--define(UPDATE(K,V,C), inets_test_lib:update_config(K,V,C)).
--define(CONFIG(K,C), inets_test_lib:get_config(K,C)).
--define(HOSTNAME(), inets_test_lib:hostname()).
--define(SZ(X), inets_test_lib:sz(X)).
-
-
-%% - Test case macros -
-
--define(SKIP(Reason), inets_test_lib:skip(Reason, ?MODULE, ?LINE)).
--define(FAIL(Reason), inets_test_lib:fail(Reason, ?MODULE, ?LINE)).
-
-
-%% - Socket macros -
-
--define(CONNECT(M,H,P), inets_test_lib:connect(M,H,P)).
--define(SEND(M,S,D), inets_test_lib:send(M,S,D)).
--define(CSEND(M,S,D,C,T), inets_test_lib:csend(M,S,D,C,T)).
--define(CLOSE(M,S), inets_test_lib:close(M,S)).
-
-
-%% - Time macros -
-
--define(HOURS(N), inets_test_lib:hours(N)).
--define(MINS(N), inets_test_lib:minutes(N)).
--define(SECS(N), inets_test_lib:seconds(N)).
-
--define(WD_START(T), inets_test_lib:watchdog_start(T)).
--define(WD_STOP(P), inets_test_lib:watchdog_stop(P)).
-
--define(SLEEP(MSEC), inets_test_lib:sleep(MSEC)).
--define(M(), inets_test_lib:millis()).
--define(MDIFF(A,B), inets_test_lib:millis_diff(A,B)).
-
-
-%% - Process utility macros -
-
--define(FLUSH(), inets_test_lib:flush_mqueue()).
--define(ETRAP_GET(), inets_test_lib:trap_exit()).
--define(ETRAP_SET(O), inets_test_lib:trap_exit(O)).
-
-
diff --git a/lib/inets/test/old_httpd_SUITE.erl b/lib/inets/test/old_httpd_SUITE.erl
index 9902c1459e..172db53844 100644
--- a/lib/inets/test/old_httpd_SUITE.erl
+++ b/lib/inets/test/old_httpd_SUITE.erl
@@ -286,9 +286,7 @@ init_per_suite(Config) ->
"~n Config: ~p"
"~n", [Config]),
- ?PRINT_SYSTEM_INFO([]),
-
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
SuiteTopDir = filename:join(PrivDir, ?MODULE),
case file:make_dir(SuiteTopDir) of
ok ->
@@ -314,7 +312,7 @@ init_per_suite(Config) ->
%%--------------------------------------------------------------------
end_per_suite(_Config) ->
- %% SuiteTopDir = ?config(suite_top_dir, Config),
+ %% SuiteTopDir = proplists:get_value(suite_top_dir, Config),
%% inets_test_lib:del_dirs(SuiteTopDir),
ok.
@@ -346,8 +344,8 @@ init_per_testcase2(Case, Config) ->
SslNormal = integer_to_list(?SSL_PORT) ++ ".conf",
SslHtaccess = integer_to_list(?SSL_PORT) ++ "htaccess.conf",
- DataDir = ?config(data_dir, Config),
- SuiteTopDir = ?config(suite_top_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ SuiteTopDir = proplists:get_value(suite_top_dir, Config),
%% tsp("init_per_testcase2 -> "
%% "~n SuiteDir: ~p"
@@ -499,7 +497,7 @@ init_per_testcase3(Case, Config) ->
Dog = test_server:timetrap(inets_test_lib:minutes(10)),
NewConfig = lists:keydelete(watchdog, 1, Config),
- TcTopDir = ?config(tc_top_dir, Config),
+ TcTopDir = proplists:get_value(tc_top_dir, Config),
CaseRest =
case atom_to_list(Case) of
@@ -581,16 +579,16 @@ init_per_testcase3(Case, Config) ->
{skip, _} = Skip ->
Skip;
"mod_auth_" ++ _ ->
- start_mnesia(?config(node, Config)),
+ start_mnesia(proplists:get_value(node, Config)),
[{watchdog, Dog} | NewConfig];
"mod_htaccess" ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
Path = filename:join([ServerRoot, "htdocs"]),
catch remove_htaccess(Path),
- create_htaccess_data(Path, ?config(address, Config)),
+ create_htaccess_data(Path, proplists:get_value(address, Config)),
[{watchdog, Dog} | NewConfig];
"range" ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
Path = filename:join([ServerRoot, "htdocs"]),
create_range_data(Path),
[{watchdog, Dog} | NewConfig];
@@ -613,7 +611,7 @@ init_per_testcase3(Case, Config) ->
%% Description: Cleanup after each test case
%%--------------------------------------------------------------------
end_per_testcase(Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
end_per_testcase2(Case, lists:keydelete(watchdog, 1, Config)),
ok.
@@ -641,7 +639,7 @@ ip_mod_alias(suite) ->
[];
ip_mod_alias(Config) when is_list(Config) ->
httpd_mod:alias(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -651,7 +649,7 @@ ip_mod_actions(suite) ->
[];
ip_mod_actions(Config) when is_list(Config) ->
httpd_mod:actions(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -660,9 +658,9 @@ ip_mod_security(doc) ->
ip_mod_security(suite) ->
[];
ip_mod_security(Config) when is_list(Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
httpd_mod:security(ServerRoot, ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -672,7 +670,7 @@ ip_mod_auth(suite) ->
[];
ip_mod_auth(Config) when is_list(Config) ->
httpd_mod:auth(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -681,9 +679,9 @@ ip_mod_auth_api(doc) ->
ip_mod_auth_api(suite) ->
[];
ip_mod_auth_api(Config) when is_list(Config) ->
- ServerRoot = ?config(server_root, Config),
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
httpd_mod:auth_api(ServerRoot, "", ip_comm, ?IP_PORT, Host, Node),
httpd_mod:auth_api(ServerRoot, "dets_", ip_comm, ?IP_PORT, Host, Node),
httpd_mod:auth_api(ServerRoot, "mnesia_", ip_comm, ?IP_PORT, Host, Node),
@@ -695,7 +693,7 @@ ip_mod_auth_mnesia_api(suite) ->
[];
ip_mod_auth_mnesia_api(Config) when is_list(Config) ->
httpd_mod:auth_mnesia_api(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_mod_htaccess(doc) ->
@@ -704,7 +702,7 @@ ip_mod_htaccess(suite) ->
[];
ip_mod_htaccess(Config) when is_list(Config) ->
httpd_mod:htaccess(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_mod_cgi(doc) ->
@@ -713,7 +711,7 @@ ip_mod_cgi(suite) ->
[];
ip_mod_cgi(Config) when is_list(Config) ->
httpd_mod:cgi(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_mod_esi(doc) ->
@@ -722,7 +720,7 @@ ip_mod_esi(suite) ->
[];
ip_mod_esi(Config) when is_list(Config) ->
httpd_mod:esi(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -732,7 +730,7 @@ ip_mod_get(suite) ->
[];
ip_mod_get(Config) when is_list(Config) ->
httpd_mod:get(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -742,7 +740,7 @@ ip_mod_head(suite) ->
[];
ip_mod_head(Config) when is_list(Config) ->
httpd_mod:head(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_mod_all(doc) ->
@@ -751,7 +749,7 @@ ip_mod_all(suite) ->
[];
ip_mod_all(Config) when is_list(Config) ->
httpd_mod:all(ip_comm, ?IP_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_load_light(doc) ->
@@ -759,8 +757,8 @@ ip_load_light(doc) ->
ip_load_light(suite) ->
[];
ip_load_light(Config) when is_list(Config) ->
- httpd_load:load_test(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config),
+ httpd_load:load_test(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config),
get_nof_clients(ip_comm, light)),
ok.
%%-------------------------------------------------------------------------
@@ -769,8 +767,8 @@ ip_load_medium(doc) ->
ip_load_medium(suite) ->
[];
ip_load_medium(Config) when is_list(Config) ->
- httpd_load:load_test(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config),
+ httpd_load:load_test(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config),
get_nof_clients(ip_comm, medium)),
ok.
%%-------------------------------------------------------------------------
@@ -779,8 +777,8 @@ ip_load_heavy(doc) ->
ip_load_heavy(suite) ->
[];
ip_load_heavy(Config) when is_list(Config) ->
- httpd_load:load_test(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config),
+ httpd_load:load_test(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config),
get_nof_clients(ip_comm, heavy)),
ok.
@@ -791,8 +789,8 @@ ip_dos_hostname(doc) ->
ip_dos_hostname(suite) ->
[];
ip_dos_hostname(Config) when is_list(Config) ->
- dos_hostname(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config), ?MAX_HEADER_SIZE),
+ dos_hostname(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config), ?MAX_HEADER_SIZE),
ok.
@@ -802,13 +800,7 @@ ip_time_test(doc) ->
ip_time_test(suite) ->
[];
ip_time_test(Config) when is_list(Config) ->
- %% <CONDITIONAL-SKIP>
- Skippable = [win32],
- Condition = fun() -> ?OS_BASED_SKIP(Skippable) end,
- ?NON_PC_TC_MAYBE_SKIP(Config, Condition),
- %% </CONDITIONAL-SKIP>
-
- httpd_time_test:t(ip_comm, ?config(host, Config), ?IP_PORT),
+ httpd_time_test:t(ip_comm, proplists:get_value(host, Config), ?IP_PORT),
ok.
%%-------------------------------------------------------------------------
@@ -818,8 +810,8 @@ ip_block_503(doc) ->
ip_block_503(suite) ->
[];
ip_block_503(Config) when is_list(Config) ->
- httpd_block:block_503(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config)),
+ httpd_block:block_503(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_block_disturbing_idle(doc) ->
@@ -829,8 +821,8 @@ ip_block_disturbing_idle(suite) ->
[];
ip_block_disturbing_idle(Config) when is_list(Config) ->
httpd_block:block_disturbing_idle(ip_comm, ?IP_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_block_non_disturbing_idle(doc) ->
@@ -840,8 +832,8 @@ ip_block_non_disturbing_idle(suite) ->
[];
ip_block_non_disturbing_idle(Config) when is_list(Config) ->
httpd_block:block_non_disturbing_idle(ip_comm, ?IP_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_block_disturbing_active(doc) ->
@@ -851,8 +843,8 @@ ip_block_disturbing_active(suite) ->
[];
ip_block_disturbing_active(Config) when is_list(Config) ->
httpd_block:block_disturbing_active(ip_comm, ?IP_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_block_non_disturbing_active(doc) ->
@@ -862,8 +854,8 @@ ip_block_non_disturbing_active(suite) ->
[];
ip_block_non_disturbing_active(Config) when is_list(Config) ->
httpd_block:block_non_disturbing_idle(ip_comm, ?IP_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -877,9 +869,9 @@ ip_block_disturbing_active_timeout_not_released(Config)
when is_list(Config) ->
httpd_block:block_disturbing_active_timeout_not_released(ip_comm,
?IP_PORT,
- ?config(host,
+ proplists:get_value(host,
Config),
- ?config(node,
+ proplists:get_value(node,
Config)),
ok.
%%-------------------------------------------------------------------------
@@ -893,9 +885,9 @@ ip_block_disturbing_active_timeout_released(Config)
when is_list(Config) ->
httpd_block:block_disturbing_active_timeout_released(ip_comm,
?IP_PORT,
- ?config(host,
+ proplists:get_value(host,
Config),
- ?config(node,
+ proplists:get_value(node,
Config)),
ok.
@@ -910,9 +902,9 @@ ip_block_non_disturbing_active_timeout_not_released(Config)
httpd_block:
block_non_disturbing_active_timeout_not_released(ip_comm,
?IP_PORT,
- ?config(host,
+ proplists:get_value(host,
Config),
- ?config(node,
+ proplists:get_value(node,
Config)),
ok.
%%-------------------------------------------------------------------------
@@ -927,9 +919,9 @@ ip_block_non_disturbing_active_timeout_released(Config)
httpd_block:
block_non_disturbing_active_timeout_released(ip_comm,
?IP_PORT,
- ?config(host,
+ proplists:get_value(host,
Config),
- ?config(node,
+ proplists:get_value(node,
Config)),
ok.
%%-------------------------------------------------------------------------
@@ -939,8 +931,8 @@ ip_block_disturbing_blocker_dies(suite) ->
[];
ip_block_disturbing_blocker_dies(Config) when is_list(Config) ->
httpd_block:disturbing_blocker_dies(ip_comm, ?IP_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_block_non_disturbing_blocker_dies(doc) ->
@@ -949,8 +941,8 @@ ip_block_non_disturbing_blocker_dies(suite) ->
[];
ip_block_non_disturbing_blocker_dies(Config) when is_list(Config) ->
httpd_block:non_disturbing_blocker_dies(ip_comm, ?IP_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_restart_no_block(doc) ->
@@ -958,8 +950,8 @@ ip_restart_no_block(doc) ->
ip_restart_no_block(suite) ->
[];
ip_restart_no_block(Config) when is_list(Config) ->
- httpd_block:restart_no_block(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config)),
+ httpd_block:restart_no_block(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_restart_disturbing_block(doc) ->
@@ -967,33 +959,9 @@ ip_restart_disturbing_block(doc) ->
ip_restart_disturbing_block(suite) ->
[];
ip_restart_disturbing_block(Config) when is_list(Config) ->
- %% <CONDITIONAL-SKIP>
- Condition =
- fun() ->
- case os:type() of
- {unix, linux} ->
- HW = string:strip(os:cmd("uname -m"), right, $\n),
- case HW of
- "ppc" ->
- case inet:gethostname() of
- {ok, "peach"} ->
- true;
- _ ->
- false
- end;
- _ ->
- false
- end;
- _ ->
- false
- end
- end,
- ?NON_PC_TC_MAYBE_SKIP(Config, Condition),
- %% </CONDITIONAL-SKIP>
-
httpd_block:restart_disturbing_block(ip_comm, ?IP_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -1002,33 +970,9 @@ ip_restart_non_disturbing_block(doc) ->
ip_restart_non_disturbing_block(suite) ->
[];
ip_restart_non_disturbing_block(Config) when is_list(Config) ->
- %% <CONDITIONAL-SKIP>
- Condition =
- fun() ->
- case os:type() of
- {unix, linux} ->
- HW = string:strip(os:cmd("uname -m"), right, $\n),
- case HW of
- "ppc" ->
- case inet:gethostname() of
- {ok, "peach"} ->
- true;
- _ ->
- false
- end;
- _ ->
- false
- end;
- _ ->
- false
- end
- end,
- ?NON_PC_TC_MAYBE_SKIP(Config, Condition),
- %% </CONDITIONAL-SKIP>
-
httpd_block:restart_non_disturbing_block(ip_comm, ?IP_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -1043,7 +987,7 @@ essl_mod_alias(Config) when is_list(Config) ->
ssl_mod_alias(Tag, Config) ->
httpd_mod:alias(Tag, ?SSL_PORT,
- ?config(host, Config), ?config(node, Config)),
+ proplists:get_value(host, Config), proplists:get_value(node, Config)),
ok.
@@ -1060,8 +1004,8 @@ essl_mod_actions(Config) when is_list(Config) ->
ssl_mod_actions(Tag, Config) ->
httpd_mod:actions(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1075,12 +1019,12 @@ essl_mod_security(Config) when is_list(Config) ->
ssl_mod_security(essl, Config).
ssl_mod_security(Tag, Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
httpd_mod:security(ServerRoot,
Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1096,8 +1040,8 @@ essl_mod_auth(Config) when is_list(Config) ->
ssl_mod_auth(Tag, Config) ->
httpd_mod:auth(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1112,9 +1056,9 @@ essl_mod_auth_api(Config) when is_list(Config) ->
ssl_mod_auth_api(essl, Config).
ssl_mod_auth_api(Tag, Config) ->
- ServerRoot = ?config(server_root, Config),
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
httpd_mod:auth_api(ServerRoot, "", Tag, ?SSL_PORT, Host, Node),
httpd_mod:auth_api(ServerRoot, "dets_", Tag, ?SSL_PORT, Host, Node),
httpd_mod:auth_api(ServerRoot, "mnesia_", Tag, ?SSL_PORT, Host, Node),
@@ -1134,8 +1078,8 @@ essl_mod_auth_mnesia_api(Config) when is_list(Config) ->
ssl_mod_auth_mnesia_api(Tag, Config) ->
httpd_mod:auth_mnesia_api(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1151,8 +1095,8 @@ essl_mod_htaccess(Config) when is_list(Config) ->
ssl_mod_htaccess(Tag, Config) ->
httpd_mod:htaccess(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1168,8 +1112,8 @@ essl_mod_cgi(Config) when is_list(Config) ->
ssl_mod_cgi(Tag, Config) ->
httpd_mod:cgi(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1185,8 +1129,8 @@ essl_mod_esi(Config) when is_list(Config) ->
ssl_mod_esi(Tag, Config) ->
httpd_mod:esi(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1202,8 +1146,8 @@ essl_mod_get(Config) when is_list(Config) ->
ssl_mod_get(Tag, Config) ->
httpd_mod:get(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1219,8 +1163,8 @@ essl_mod_head(Config) when is_list(Config) ->
ssl_mod_head(Tag, Config) ->
httpd_mod:head(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1236,8 +1180,8 @@ essl_mod_all(Config) when is_list(Config) ->
ssl_mod_all(Tag, Config) ->
httpd_mod:all(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1253,8 +1197,8 @@ essl_load_light(Config) when is_list(Config) ->
ssl_load_light(Tag, Config) ->
httpd_load:load_test(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config),
get_nof_clients(ssl, light)),
ok.
@@ -1269,16 +1213,10 @@ essl_load_medium(Config) when is_list(Config) ->
ssl_load_medium(essl, Config).
ssl_load_medium(Tag, Config) ->
- %% <CONDITIONAL-SKIP>
- Skippable = [win32],
- Condition = fun() -> ?OS_BASED_SKIP(Skippable) end,
- ?NON_PC_TC_MAYBE_SKIP(Config, Condition),
- %% </CONDITIONAL-SKIP>
-
httpd_load:load_test(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config),
get_nof_clients(ssl, medium)),
ok.
@@ -1293,16 +1231,10 @@ essl_load_heavy(Config) when is_list(Config) ->
ssl_load_heavy(essl, Config).
ssl_load_heavy(Tag, Config) ->
- %% <CONDITIONAL-SKIP>
- Skippable = [win32],
- Condition = fun() -> ?OS_BASED_SKIP(Skippable) end,
- ?NON_PC_TC_MAYBE_SKIP(Config, Condition),
- %% </CONDITIONAL-SKIP>
-
httpd_load:load_test(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config),
get_nof_clients(ssl, heavy)),
ok.
@@ -1320,8 +1252,8 @@ essl_dos_hostname(Config) when is_list(Config) ->
ssl_dos_hostname(Tag, Config) ->
dos_hostname(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config),
?MAX_HEADER_SIZE),
ok.
@@ -1337,23 +1269,8 @@ essl_time_test(Config) when is_list(Config) ->
ssl_time_test(essl, Config).
ssl_time_test(Tag, Config) when is_list(Config) ->
- %% <CONDITIONAL-SKIP>
- FreeBSDVersionVerify =
- fun() ->
- case os:version() of
- {7, 1, _} -> % We only have one such machine, so...
- true;
- _ ->
- false
- end
- end,
- Skippable = [win32, {unix, [{freebsd, FreeBSDVersionVerify}]}],
- Condition = fun() -> ?OS_BASED_SKIP(Skippable) end,
- ?NON_PC_TC_MAYBE_SKIP(Config, Condition),
- %% </CONDITIONAL-SKIP>
-
httpd_time_test:t(Tag,
- ?config(host, Config),
+ proplists:get_value(host, Config),
?SSL_PORT),
ok.
@@ -1372,8 +1289,8 @@ essl_block_503(Config) when is_list(Config) ->
ssl_block_503(Tag, Config) ->
httpd_block:block_503(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1391,8 +1308,8 @@ essl_block_disturbing_idle(Config) when is_list(Config) ->
ssl_block_disturbing_idle(Tag, Config) ->
httpd_block:block_disturbing_idle(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1410,8 +1327,8 @@ essl_block_non_disturbing_idle(Config) when is_list(Config) ->
ssl_block_non_disturbing_idle(Tag, Config) ->
httpd_block:block_non_disturbing_idle(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1429,8 +1346,8 @@ essl_block_disturbing_active(Config) when is_list(Config) ->
ssl_block_disturbing_active(Tag, Config) ->
httpd_block:block_disturbing_active(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1448,8 +1365,8 @@ essl_block_non_disturbing_active(Config) when is_list(Config) ->
ssl_block_non_disturbing_active(Tag, Config) ->
httpd_block:block_non_disturbing_idle(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1468,8 +1385,8 @@ essl_block_disturbing_active_timeout_not_released(Config)
ssl_block_disturbing_active_timeout_not_released(Tag, Config) ->
Port = ?SSL_PORT,
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
httpd_block:block_disturbing_active_timeout_not_released(Tag,
Port, Host, Node),
ok.
@@ -1490,8 +1407,8 @@ essl_block_disturbing_active_timeout_released(Config)
ssl_block_disturbing_active_timeout_released(Tag, Config) ->
Port = ?SSL_PORT,
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
httpd_block:block_disturbing_active_timeout_released(Tag,
Port,
Host,
@@ -1513,8 +1430,8 @@ essl_block_non_disturbing_active_timeout_not_released(Config)
ssl_block_non_disturbing_active_timeout_not_released(Tag, Config) ->
Port = ?SSL_PORT,
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
httpd_block:block_non_disturbing_active_timeout_not_released(Tag,
Port,
Host,
@@ -1539,8 +1456,8 @@ essl_block_non_disturbing_active_timeout_released(Config)
ssl_block_non_disturbing_active_timeout_released(Tag, Config)
when is_list(Config) ->
Port = ?SSL_PORT,
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
httpd_block:block_non_disturbing_active_timeout_released(Tag,
Port,
Host,
@@ -1562,8 +1479,8 @@ essl_block_disturbing_blocker_dies(Config) when is_list(Config) ->
ssl_block_disturbing_blocker_dies(Tag, Config) ->
httpd_block:disturbing_blocker_dies(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1579,8 +1496,8 @@ essl_block_non_disturbing_blocker_dies(Config) when is_list(Config) ->
ssl_block_non_disturbing_blocker_dies(Tag, Config) ->
httpd_block:non_disturbing_blocker_dies(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1597,8 +1514,8 @@ essl_restart_no_block(Config) when is_list(Config) ->
ssl_restart_no_block(Tag, Config) ->
httpd_block:restart_no_block(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1613,43 +1530,9 @@ essl_restart_disturbing_block(Config) when is_list(Config) ->
ssl_restart_disturbing_block(essl, Config).
ssl_restart_disturbing_block(Tag, Config) ->
- %% <CONDITIONAL-SKIP>
- Condition =
- fun() ->
- case os:type() of
- {unix, linux} ->
- case ?OSCMD("uname -m") of
- "ppc" ->
- case file:read_file_info("/etc/fedora-release") of
- {ok, _} ->
- case ?OSCMD("awk '{print $2}' /etc/fedora-release") of
- "release" ->
- %% Fedora 7 and later
- case ?OSCMD("awk '{print $3}' /etc/fedora-release") of
- "7" ->
- true;
- _ ->
- false
- end;
- _ ->
- false
- end;
- _ ->
- false
- end;
- _ ->
- false
- end;
- _ ->
- false
- end
- end,
- ?NON_PC_TC_MAYBE_SKIP(Config, Condition),
- %% </CONDITIONAL-SKIP>
-
httpd_block:restart_disturbing_block(Tag, ?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1664,34 +1547,10 @@ essl_restart_non_disturbing_block(Config) when is_list(Config) ->
ssl_restart_non_disturbing_block(essl, Config).
ssl_restart_non_disturbing_block(Tag, Config) ->
- %% <CONDITIONAL-SKIP>
- Condition =
- fun() ->
- case os:type() of
- {unix, linux} ->
- HW = string:strip(os:cmd("uname -m"), right, $\n),
- case HW of
- "ppc" ->
- case inet:gethostname() of
- {ok, "peach"} ->
- true;
- _ ->
- false
- end;
- _ ->
- false
- end;
- _ ->
- false
- end
- end,
- ?NON_PC_TC_MAYBE_SKIP(Config, Condition),
- %% </CONDITIONAL-SKIP>
-
httpd_block:restart_non_disturbing_block(Tag,
?SSL_PORT,
- ?config(host, Config),
- ?config(node, Config)),
+ proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
@@ -1701,8 +1560,8 @@ ip_host(doc) ->
ip_host(suite)->
[];
ip_host(Config) when is_list(Config) ->
- httpd_1_1:host(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config)),
+ httpd_1_1:host(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_chunked(doc) ->
@@ -1710,8 +1569,8 @@ ip_chunked(doc) ->
ip_chunked(suite) ->
[];
ip_chunked(Config) when is_list(Config) ->
- httpd_1_1:chunked(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config)),
+ httpd_1_1:chunked(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_expect(doc) ->
@@ -1720,8 +1579,8 @@ ip_expect(doc) ->
ip_expect(suite)->
[];
ip_expect(Config) when is_list(Config) ->
- httpd_1_1:expect(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config)),
+ httpd_1_1:expect(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_range(doc) ->
@@ -1729,8 +1588,8 @@ ip_range(doc) ->
ip_range(suite)->
[];
ip_range(Config) when is_list(Config) ->
- httpd_1_1:range(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config)),
+ httpd_1_1:range(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_if_test(doc) ->
@@ -1738,10 +1597,10 @@ ip_if_test(doc) ->
ip_if_test(suite) ->
[];
ip_if_test(Config) when is_list(Config) ->
- ServerRoot = ?config(server_root, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
DocRoot = filename:join([ServerRoot, "htdocs"]),
- httpd_1_1:if_test(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config), DocRoot),
+ httpd_1_1:if_test(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config), DocRoot),
ok.
%%-------------------------------------------------------------------------
ip_http_trace(doc) ->
@@ -1749,8 +1608,8 @@ ip_http_trace(doc) ->
ip_http_trace(suite) ->
[];
ip_http_trace(Config) when is_list(Config) ->
- httpd_1_1:http_trace(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config)),
+ httpd_1_1:http_trace(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
ip_http1_1_head(doc) ->
@@ -1758,8 +1617,8 @@ ip_http1_1_head(doc) ->
ip_http1_1_head(suite)->
[];
ip_http1_1_head(Config) when is_list(Config) ->
- httpd_1_1:head(ip_comm, ?IP_PORT, ?config(host, Config),
- ?config(node, Config)),
+ httpd_1_1:head(ip_comm, ?IP_PORT, proplists:get_value(host, Config),
+ proplists:get_value(node, Config)),
ok.
%%-------------------------------------------------------------------------
@@ -1768,8 +1627,8 @@ ip_get_0_9(doc) ->
ip_get_0_9(suite)->
[];
ip_get_0_9(Config) when is_list(Config) ->
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
ok = httpd_test_lib:verify_request(ip_comm, Host, ?IP_PORT, Node,
"GET / \r\n\r\n",
[{statuscode, 200},
@@ -1791,8 +1650,8 @@ ip_head_1_0(doc) ->
ip_head_1_0(suite)->
[];
ip_head_1_0(Config) when is_list(Config) ->
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
ok = httpd_test_lib:verify_request(ip_comm, Host, ?IP_PORT, Node,
"HEAD / HTTP/1.0\r\n\r\n", [{statuscode, 200},
{version, "HTTP/1.0"}]),
@@ -1804,8 +1663,8 @@ ip_get_1_0(doc) ->
ip_get_1_0(suite)->
[];
ip_get_1_0(Config) when is_list(Config) ->
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
ok = httpd_test_lib:verify_request(ip_comm, Host, ?IP_PORT, Node,
"GET / HTTP/1.0\r\n\r\n", [{statuscode, 200},
{version, "HTTP/1.0"}]),
@@ -1817,8 +1676,8 @@ ip_post_1_0(doc) ->
ip_post_1_0(suite)->
[];
ip_post_1_0(Config) when is_list(Config) ->
- Host = ?config(host, Config),
- Node = ?config(node, Config),
+ Host = proplists:get_value(host, Config),
+ Node = proplists:get_value(node, Config),
%% Test the post message formatin 1.0! Real post are testes elsewhere
ok = httpd_test_lib:verify_request(ip_comm, Host, ?IP_PORT, Node,
"POST / HTTP/1.0\r\n\r\n "
@@ -1832,7 +1691,7 @@ ip_mod_cgi_chunked_encoding_test(doc) ->
ip_mod_cgi_chunked_encoding_test(suite)->
[];
ip_mod_cgi_chunked_encoding_test(Config) when is_list(Config) ->
- Host = ?config(host, Config),
+ Host = proplists:get_value(host, Config),
Script =
case test_server:os_type() of
{win32, _} ->
@@ -1846,7 +1705,7 @@ ip_mod_cgi_chunked_encoding_test(Config) when is_list(Config) ->
++ Host ++"\r\n\r\n"],
httpd_1_1:mod_cgi_chunked_encoding_test(ip_comm, ?IP_PORT,
Host,
- ?config(node, Config),
+ proplists:get_value(node, Config),
Requests),
ok.
@@ -1875,7 +1734,7 @@ ipv6_hostname(SocketType, Port, Config) when is_list(Config) ->
"~n SocketType: ~p"
"~n Port: ~p"
"~n Config: ~p", [SocketType, Port, Config]),
- Host = ?config(host, Config),
+ Host = proplists:get_value(host, Config),
URI = "GET HTTP://" ++
Host ++ ":" ++ integer_to_list(Port) ++ "/ HTTP/1.1\r\n\r\n",
tsp("ipv6_hostname -> Host: ~p", [Host]),
@@ -1910,7 +1769,7 @@ ipv6_address(SocketType, Port, Config) when is_list(Config) ->
"~n SocketType: ~p"
"~n Port: ~p"
"~n Config: ~p", [SocketType, Port, Config]),
- Host = ?config(host, Config),
+ Host = proplists:get_value(host, Config),
tsp("ipv6_address -> Host: ~p", [Host]),
URI = "GET HTTP://" ++
Host ++ ":" ++ integer_to_list(Port) ++ "/ HTTP/1.1\r\n\r\n",
@@ -1927,8 +1786,8 @@ ticket_5775(doc) ->
ticket_5775(suite) ->
[];
ticket_5775(Config) ->
- ok=httpd_test_lib:verify_request(ip_comm, ?config(host, Config),
- ?IP_PORT, ?config(node, Config),
+ ok=httpd_test_lib:verify_request(ip_comm, proplists:get_value(host, Config),
+ ?IP_PORT, proplists:get_value(node, Config),
"GET /cgi-bin/erl/httpd_example:get_bin "
"HTTP/1.0\r\n\r\n",
[{statuscode, 200},
@@ -1939,9 +1798,9 @@ ticket_5865(doc) ->
ticket_5865(suite) ->
[];
ticket_5865(Config) ->
- ?SKIP(as_of_r15_behaviour_of_calendar_has_changed),
- Host = ?config(host,Config),
- ServerRoot = ?config(server_root, Config),
+ ct:skip(as_of_r15_behaviour_of_calendar_has_changed),
+ Host = proplists:get_value(host,Config),
+ ServerRoot = proplists:get_value(server_root, Config),
DocRoot = filename:join([ServerRoot, "htdocs"]),
File = filename:join([DocRoot,"last_modified.html"]),
@@ -1957,7 +1816,7 @@ ticket_5865(Config) ->
case file:write_file_info(File,FI#file_info{mtime=Bad_mtime}) of
ok ->
ok = httpd_test_lib:verify_request(ip_comm, Host,
- ?IP_PORT, ?config(node, Config),
+ ?IP_PORT, proplists:get_value(node, Config),
"GET /last_modified.html"
" HTTP/1.1\r\nHost:"
++Host++"\r\n\r\n",
@@ -1977,8 +1836,8 @@ ticket_5913(doc) ->
["Tests that a header without last-modified is handled"];
ticket_5913(suite) -> [];
ticket_5913(Config) ->
- ok = httpd_test_lib:verify_request(ip_comm, ?config(host, Config),
- ?IP_PORT, ?config(node, Config),
+ ok = httpd_test_lib:verify_request(ip_comm, proplists:get_value(host, Config),
+ ?IP_PORT, proplists:get_value(node, Config),
"GET /cgi-bin/erl/httpd_example:get_bin "
"HTTP/1.0\r\n\r\n",
[{statuscode, 200},
@@ -1989,8 +1848,8 @@ ticket_6003(doc) ->
["Tests that a URI with a bad hexadecimal code is handled"];
ticket_6003(suite) -> [];
ticket_6003(Config) ->
- ok = httpd_test_lib:verify_request(ip_comm, ?config(host, Config),
- ?IP_PORT, ?config(node, Config),
+ ok = httpd_test_lib:verify_request(ip_comm, proplists:get_value(host, Config),
+ ?IP_PORT, proplists:get_value(node, Config),
"GET http://www.erlang.org/%skalle "
"HTTP/1.0\r\n\r\n",
[{statuscode, 400},
@@ -2002,8 +1861,8 @@ ticket_7304(doc) ->
ticket_7304(suite) ->
[];
ticket_7304(Config) ->
- ok = httpd_test_lib:verify_request(ip_comm, ?config(host, Config),
- ?IP_PORT, ?config(node, Config),
+ ok = httpd_test_lib:verify_request(ip_comm, proplists:get_value(host, Config),
+ ?IP_PORT, proplists:get_value(node, Config),
"GET / HTTP/1.0\r\n\n",
[{statuscode, 200},
{version, "HTTP/1.0"}]),
@@ -2030,11 +1889,11 @@ dos_hostname(Type, Port, Host, Node, Max) ->
%%--------------------------------------------------------------------
%% Other help functions
create_config(Config, Access, FileName) ->
- ServerRoot = ?config(server_root, Config),
- TcTopDir = ?config(tc_top_dir, Config),
- Port = ?config(port, Config),
- Type = ?config(sock_type, Config),
- Host = ?config(host, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
+ TcTopDir = proplists:get_value(tc_top_dir, Config),
+ Port = proplists:get_value(port, Config),
+ Type = proplists:get_value(sock_type, Config),
+ Host = proplists:get_value(host, Config),
Mods = io_lib:format("~p", [httpd_mod]),
Funcs = io_lib:format("~p", [ssl_password_cb]),
MaxHdrSz = io_lib:format("~p", [256]),
@@ -2424,13 +2283,13 @@ create_range_data(Path) ->
"12345678901234567890"])).
create_ipv6_config(Config, FileName, Ipv6Address) ->
- ServerRoot = ?config(server_root, Config),
- TcTopDir = ?config(tc_top_dir, Config),
- Port = ?config(port, Config),
- SockType = ?config(sock_type, Config),
+ ServerRoot = proplists:get_value(server_root, Config),
+ TcTopDir = proplists:get_value(tc_top_dir, Config),
+ Port = proplists:get_value(port, Config),
+ SockType = proplists:get_value(sock_type, Config),
Mods = io_lib:format("~p", [httpd_mod]),
Funcs = io_lib:format("~p", [ssl_password_cb]),
- Host = ?config(ipv6_host, Config),
+ Host = proplists:get_value(ipv6_host, Config),
MaxHdrSz = io_lib:format("~p", [256]),
MaxHdrAct = io_lib:format("~p", [close]),
diff --git a/lib/inets/vsn.mk b/lib/inets/vsn.mk
index 543e0d44fd..f668ef106c 100644
--- a/lib/inets/vsn.mk
+++ b/lib/inets/vsn.mk
@@ -19,6 +19,6 @@
# %CopyrightEnd%
APPLICATION = inets
-INETS_VSN = 6.3
+INETS_VSN = 6.3.3
PRE_VSN =
APP_VSN = "$(APPLICATION)-$(INETS_VSN)$(PRE_VSN)"
diff --git a/lib/jinterface/doc/src/Makefile b/lib/jinterface/doc/src/Makefile
index cd1e61a795..508c8e01b5 100644
--- a/lib/jinterface/doc/src/Makefile
+++ b/lib/jinterface/doc/src/Makefile
@@ -166,7 +166,7 @@ release_docs_spec: docs
$(INSTALL_DIR) "$(RELSYSDIR)/doc/html"
$(INSTALL_DIR) "$(RELSYSDIR)/doc/html/java/$(JAVA_PKG_PATH)"
$(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)"
- (/bin/cp -rf ../html "$(RELSYSDIR)/doc")
+ ($(CP) -rf ../html "$(RELSYSDIR)/doc")
# $(INSTALL_DATA) $(GIF_FILES) $(EXTRA_FILES) $(HTML_FILES) \
# "$(RELSYSDIR)/doc/html"
diff --git a/lib/jinterface/doc/src/notes.xml b/lib/jinterface/doc/src/notes.xml
index 0cbb911327..3151fc4b5e 100644
--- a/lib/jinterface/doc/src/notes.xml
+++ b/lib/jinterface/doc/src/notes.xml
@@ -33,6 +33,18 @@
<section><title>Jinterface 1.7</title>
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix Jinterface build on Maven</p>
+ <p>
+ Own Id: OTP-13482</p>
+ </item>
+ </list>
+ </section>
+
+
<section><title>Improvements and New Features</title>
<list>
<item>
diff --git a/lib/kernel/doc/src/app.xml b/lib/kernel/doc/src/app.xml
index 5e0da409a3..d2e9390d7e 100644
--- a/lib/kernel/doc/src/app.xml
+++ b/lib/kernel/doc/src/app.xml
@@ -151,7 +151,7 @@ ApplicationVersion = string()</code>
application is allowed to be started. <c>systools</c> uses
this list to generate correct start scripts. Defaults to
the empty list, but notice that all applications have
- dependencies to (at least) <c>Kernel</c> and <c>STDLIB</c>.</p>
+ dependencies to (at least) Kernel and STDLIB.</p>
</item>
<tag><c>env</c></tag>
<item>
@@ -171,7 +171,7 @@ ApplicationVersion = string()</code>
implemented as a supervision tree, otherwise the application
controller does not know how to start it. <c>mod</c>
can be omitted for applications without processes, typically
- code libraries, for example, <c>STDLIB</c>.</p>
+ code libraries, for example, STDLIB.</p>
</item>
<tag><c>start_phases</c></tag>
<item>
@@ -236,7 +236,7 @@ ApplicationVersion = string()</code>
<section>
<title>See Also</title>
<p><seealso marker="application"><c>application(3)</c></seealso>,
- <seealso marker="sasl:systools"><c>sasl:systools(3)</c></seealso></p>
+ <seealso marker="sasl:systools"><c>systools(3)</c></seealso></p>
</section>
</fileref>
diff --git a/lib/kernel/doc/src/application.xml b/lib/kernel/doc/src/application.xml
index 3928078932..886286b76d 100644
--- a/lib/kernel/doc/src/application.xml
+++ b/lib/kernel/doc/src/application.xml
@@ -62,8 +62,7 @@
</datatype>
<datatype>
<name>tuple_of(T)</name>
- <desc><p><marker id="type-tuple_of"/>
- A tuple where the elements are of type <c>T</c>.</p></desc>
+ <desc><p>A tuple where the elements are of type <c>T</c>.</p></desc>
</datatype>
</datatypes>
<funcs>
@@ -201,7 +200,7 @@
<seealso marker="app"><c>app(4)</c></seealso>.</p>
<p>If <c><anno>Distributed</anno> == {<anno>Application</anno>,[<anno>Time</anno>,]<anno>Nodes</anno>}</c>,
the application becomes distributed. The argument overrides
- the value for the application in the <c>Kernel</c> configuration
+ the value for the application in the Kernel configuration
parameter <c>distributed</c>. <c><anno>Application</anno></c> must be
the application name (same as in the first argument).
If a node crashes and <c><anno>Time</anno></c> is specified,
@@ -222,7 +221,7 @@ Nodes = [cp1@cave, {cp2@cave, cp3@cave}]</code>
the application is to be started at <c>cp2@cave</c>
or <c>cp3@cave</c>.</p>
<p>If <c>Distributed == default</c>, the value for
- the application in the <c>Kernel</c> configuration parameter
+ the application in the Kernel configuration parameter
<c>distributed</c> is used.</p>
</desc>
</func>
@@ -268,7 +267,7 @@ Nodes = [cp1@cave, {cp2@cave, cp3@cave}]</code>
started, <c>Application</c> is started as well.</p>
<p>By default, all applications are loaded with permission
<c>true</c> on all nodes. The permission can be configured
- using the <c>Kernel</c> configuration parameter <c>permissions</c>.</p>
+ using the Kernel configuration parameter <c>permissions</c>.</p>
</desc>
</func>
<func>
diff --git a/lib/kernel/doc/src/auth.xml b/lib/kernel/doc/src/auth.xml
index 03f983b96d..5901446960 100644
--- a/lib/kernel/doc/src/auth.xml
+++ b/lib/kernel/doc/src/auth.xml
@@ -47,7 +47,7 @@
<desc>
<p>Use
<seealso marker="erts:erlang#erlang:get_cookie/0"><c>erlang:get_cookie()</c></seealso>
- in <c>ERTS</c> instead.</p>
+ in ERTS instead.</p>
</desc>
</func>
<func>
@@ -59,7 +59,7 @@
<desc>
<p>Use
<seealso marker="erts:erlang#erlang:set_cookie/2"><c>erlang:set_cookie(node(), <anno>Cookie</anno>)</c>
- in <c>ERTS</c></seealso> instead.</p>
+ in ERTS</seealso> instead.</p>
</desc>
</func>
<func>
diff --git a/lib/kernel/doc/src/code.xml b/lib/kernel/doc/src/code.xml
index d3611d6a03..4db377bcde 100644
--- a/lib/kernel/doc/src/code.xml
+++ b/lib/kernel/doc/src/code.xml
@@ -86,11 +86,11 @@
an <c>ebin</c> directory are ignored.</p>
<p>All application directories found in the additional directories
appears before the standard OTP applications, except for the
- <c>Kernel</c> and <c>STDLIB</c> applications, which are placed before
+ Kernel and STDLIB applications, which are placed before
any additional applications. In other words, modules found in any
of the additional library directories override modules with
- the same name in OTP, except for modules in <c>Kernel</c> and
- <c>STDLIB</c>.</p>
+ the same name in OTP, except for modules in Kernel and
+ STDLIB.</p>
<p>Environment variable <c>ERL_LIBS</c> (if defined) is to contain
a colon-separated (for Unix-like systems) or semicolon-separated
(for Windows) list of additional libraries.</p>
@@ -151,7 +151,7 @@ zip:create("mnesia-4.4.7.ez",
<c>$OTPROOT/lib/mnesia.ez/mnesia/ebin</c> or
<c>$OTPROOT/lib/mnesia-4.4.7.ez/mnesia-4.4.7/ebin</c>.</p>
- <p>The code server uses module <c>erl_prim_loader</c> in <c>ERTS</c>
+ <p>The code server uses module <c>erl_prim_loader</c> in ERTS
(possibly through <c>erl_boot_server</c>) to read code files from
archives. However, the functions in <c>erl_prim_loader</c> can also be
used by other applications to read files from archives. For
@@ -651,6 +651,11 @@ ok = code:finish_loading(Prepared),
<p>Purges the code for <c><anno>Module</anno></c>, that is, removes code
marked as old. If some processes still linger in the old code,
these processes are killed before the code is removed.</p>
+ <note><p>As of ERTS version 9.0, a process is only considered
+ to be lingering in the code if it has direct references to the code.
+ For more information see documentation of
+ <seealso marker="erts:erlang#check_process_code/3"><c>erlang:check_process_code/3</c></seealso>,
+ which is used in order to determine this.</p></note>
<p>Returns <c>true</c> if successful and any process is needed to
be killed, otherwise <c>false</c>.</p>
</desc>
@@ -661,6 +666,11 @@ ok = code:finish_loading(Prepared),
<desc>
<p>Purges the code for <c><anno>Module</anno></c>, that is, removes code
marked as old, but only if no processes linger in it.</p>
+ <note><p>As of ERTS version 9.0, a process is only considered
+ to be lingering in the code if it has direct references to the code.
+ For more information see documentation of
+ <seealso marker="erts:erlang#check_process_code/3"><c>erlang:check_process_code/3</c></seealso>,
+ which is used in order to determine this.</p></note>
<p>Returns <c>false</c> if the module cannot be purged because
of processes lingering in old code, otherwise <c>true</c>.</p>
</desc>
@@ -678,9 +688,9 @@ ok = code:finish_loading(Prepared),
<p>Normally, <c><anno>Loaded</anno></c> is the absolute filename
<c>Filename</c> from which the code is obtained. If the module
is preloaded (see
- <seealso marker="sasl:script"><c>sasl:script(4)</c></seealso>),
+ <seealso marker="sasl:script"><c>script(4)</c></seealso>),
<c>Loaded==preloaded</c>. If the module is Cover-compiled (see
- <seealso marker="tools:cover"><c>tools:cover(3)</c></seealso>),
+ <seealso marker="tools:cover"><c>cover(3)</c></seealso>),
<c>Loaded==cover_compiled</c>.</p>
</desc>
</func>
diff --git a/lib/kernel/doc/src/erl_boot_server.xml b/lib/kernel/doc/src/erl_boot_server.xml
index 897365f9b9..4109251387 100644
--- a/lib/kernel/doc/src/erl_boot_server.xml
+++ b/lib/kernel/doc/src/erl_boot_server.xml
@@ -38,13 +38,13 @@
command-line flag <c>-loader inet</c>. All hosts specified
with command-line flag <c>-hosts Host</c> must have one
instance of this server running.</p>
- <p>This server can be started with the <c>Kernel</c> configuration
+ <p>This server can be started with the Kernel configuration
parameter <c>start_boot_server</c>.</p>
<p>The <c>erl_boot_server</c> can read regular files and
files in archives. See <seealso marker="code"><c>code(3)</c></seealso>
and
<seealso marker="erts:erl_prim_loader"><c>erl_prim_loader(3)</c></seealso>
- in <c>ERTS</c>.</p>
+ in ERTS.</p>
<warning><p>The support for loading code from archive files is
experimental. It is released before it is ready
to obtain early feedback. The file format, semantics,
diff --git a/lib/kernel/doc/src/erl_ddll.xml b/lib/kernel/doc/src/erl_ddll.xml
index a5ce58ef3e..75114e015c 100644
--- a/lib/kernel/doc/src/erl_ddll.xml
+++ b/lib/kernel/doc/src/erl_ddll.xml
@@ -201,7 +201,7 @@
<desc>
<p>Removes a driver monitor in much the same way as
<seealso marker="erts:erlang#erlang:demonitor/1"><c>erlang:demonitor/1</c></seealso>
- in <c>ERTS</c>
+ in ERTS
does with process monitors. For details about how to create
driver monitors, see
<seealso marker="#monitor/2"><c>monitor/2</c></seealso>,
@@ -431,7 +431,7 @@
<p>Creates a driver monitor and works in many
ways as
<seealso marker="erts:erlang#erlang:monitor/2"><c>erlang:monitor/2</c></seealso>
- in <c>ERTS</c>,
+ in ERTS,
does for processes. When a driver changes state, the monitor
results in a monitor message that is sent to the calling
process. <c><anno>MonitorRef</anno></c> returned by this function is
@@ -745,7 +745,7 @@
<p>This parameter is the name of the driver
to be used in subsequent calls to function
<seealso marker="erts:erlang#open_port/2"><c>erlang:open_port</c></seealso>
- in <c>ERTS</c>.
+ in ERTS.
The name can be specified as an <c>iolist()</c> or
an <c>atom()</c>. The name specified when loading is used
to find the object file (with the help of <c><anno>Path</anno></c>
diff --git a/lib/kernel/doc/src/error_logger.xml b/lib/kernel/doc/src/error_logger.xml
index a8273e59e2..814e8eac46 100644
--- a/lib/kernel/doc/src/error_logger.xml
+++ b/lib/kernel/doc/src/error_logger.xml
@@ -33,7 +33,7 @@
<description>
<p>The Erlang <em>error logger</em> is an event manager (see
<seealso marker="doc/design_principles:des_princ">OTP Design Principles</seealso> and
- <seealso marker="stdlib:gen_event"><c>stdlib:gen_event(3)</c></seealso>),
+ <seealso marker="stdlib:gen_event"><c>gen_event(3)</c></seealso>),
registered as <c>error_logger</c>. Errors, warnings, and info events
are sent to the error logger from the Erlang runtime system and
the different Erlang/OTP applications. The events are, by default,
@@ -44,12 +44,12 @@
executing.</p>
<p>Initially, <c>error_logger</c> has only a primitive event
handler, which buffers and prints the raw event messages. During
- system startup, the <c>Kernel</c> application replaces this with a
+ system startup, the Kernel application replaces this with a
<em>standard event handler</em>, by default one that writes
- nicely formatted output to the terminal. <c>Kernel</c> can also be
+ nicely formatted output to the terminal. Kernel can also be
configured so that events are logged to a file instead, or not logged at all,
see <seealso marker="kernel_app"><c>kernel(6)</c></seealso>.</p>
- <p>Also the <c>SASL</c> application, if started, adds its own event
+ <p>Also the SASL application, if started, adds its own event
handler, which by default writes supervisor, crash, and progress
reports to the terminal. See
<seealso marker="sasl:sasl_app"><c>sasl(6)</c></seealso>.</p>
@@ -58,9 +58,9 @@
User-defined event handlers can be added to handle application-specific
events, see
<seealso marker="#add_report_handler/1"><c>add_report_handler/1,2</c></seealso>.
- Also, a useful event handler is provided in <c>STDLIB</c> for multi-file
+ Also, a useful event handler is provided in STDLIB for multi-file
logging of events, see
- <seealso marker="stdlib:log_mf_h"><c>stdlib:log_mf_h(3)</c></seealso>.</p>
+ <seealso marker="stdlib:log_mf_h"><c>log_mf_h(3)</c></seealso>.</p>
<p>Warning events were introduced in Erlang/OTP R9C and are enabled
by default as from Erlang/OTP 18.0. To retain backwards compatibility
with existing user-defined event handlers, the warning events can be
@@ -82,7 +82,7 @@
<p>Adds a new event handler to the error logger. The event
handler must be implemented as a <c>gen_event</c> callback
module, see
- <seealso marker="stdlib:gen_event"><c>stdlib:gen_event(3)</c></seealso>.</p>
+ <seealso marker="stdlib:gen_event"><c>gen_event(3)</c></seealso>.</p>
<p><c><anno>Handler</anno></c> is typically the name of the callback module
and <c><anno>Args</anno></c> is an optional term (defaults to []) passed
to the initialization callback function <c><anno>Handler</anno>:init/1</c>.
@@ -97,7 +97,7 @@
<desc>
<p>Deletes an event handler from the error logger by calling
<c>gen_event:delete_handler(error_logger, <anno>Handler</anno>, [])</c>,
- see <seealso marker="stdlib:gen_event"><c>stdlib:gen_event(3)</c></seealso>.</p>
+ see <seealso marker="stdlib:gen_event"><c>gen_event(3)</c></seealso>.</p>
</desc>
</func>
<func>
@@ -110,7 +110,7 @@
The <c><anno>Format</anno></c> and <c><anno>Data</anno></c> arguments
are the same as the arguments of
<seealso marker="stdlib:io#format/2"><c>io:format/2</c></seealso>
- in <c>STDLIB</c>.
+ in STDLIB.
The event is handled by the standard event handler.</p>
<p><em>Example:</em></p>
<pre>
@@ -171,7 +171,7 @@ ok</pre>
The <c><anno>Format</anno></c> and <c><anno>Data</anno></c> arguments
are the same as the arguments of
<seealso marker="stdlib:io#format/2"><c>io:format/2</c></seealso>
- in <c>STDLIB</c>. The event is handled by the standard event handler.</p>
+ in STDLIB. The event is handled by the standard event handler.</p>
<p><em>Example:</em></p>
<pre>
1> <input>error_logger:info_msg("Something happened in ~p~n", [a_module]).</input>
@@ -235,7 +235,7 @@ ok</pre>
<p>Enables or disables printout of standard events to a file.</p>
<p>This is done by adding or deleting the standard event handler
for output to file. Thus, calling this function overrides
- the value of the <c>Kernel</c> <c>error_logger</c> configuration
+ the value of the Kernel <c>error_logger</c> configuration
parameter.</p>
<p>Enabling file logging can be used together with calling
<c>tty(false)</c>, to have a silent system where
@@ -274,7 +274,7 @@ ok</pre>
to the terminal.</p>
<p>This is done by adding or deleting the standard event handler
for output to the terminal. Thus, calling this function overrides
- the value of the <c>Kernel</c> <c>error_logger</c> configuration parameter.</p>
+ the value of the Kernel <c>error_logger</c> configuration parameter.</p>
</desc>
</func>
<func>
@@ -323,7 +323,7 @@ ok</pre>
The <c><anno>Format</anno></c> and <c><anno>Data</anno></c> arguments
are the same as the arguments of
<seealso marker="stdlib:io#format/2"><c>io:format/2</c></seealso>
- in <c>STDLIB</c>.
+ in STDLIB.
The event is handled by the standard event handler. It is tagged
as an error, warning, or info, see
<seealso marker="#warning_map/0"><c>warning_map/0</c></seealso>.</p>
@@ -416,8 +416,8 @@ ok</pre>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="stdlib:gen_event"><c>stdlib:gen_event(3)</c></seealso>,
- <seealso marker="stdlib:log_mf_h"><c>stdlib:log_mf_h(3)</c></seealso>
+ <p><seealso marker="stdlib:gen_event"><c>gen_event(3)</c></seealso>,
+ <seealso marker="stdlib:log_mf_h"><c>log_mf_h(3)</c></seealso>
<seealso marker="kernel_app"><c>kernel(6)</c></seealso>
<seealso marker="sasl:sasl_app"><c>sasl(6)</c></seealso></p>
</section>
diff --git a/lib/kernel/doc/src/file.xml b/lib/kernel/doc/src/file.xml
index a73038ac58..09497482cf 100644
--- a/lib/kernel/doc/src/file.xml
+++ b/lib/kernel/doc/src/file.xml
@@ -79,7 +79,7 @@
<seealso marker="#list_dir_all"><c>list_dir_all/1</c></seealso> and
<seealso marker="#read_link_all"><c>read_link_all/1</c></seealso>.</p>
- <p>See also section <seealso marker="stdlib:unicode_usage#notes-about-raw-filenames">Notes About Raw Filenames</seealso> in the <c>STDLIB</c> User´s Giude.</p>
+ <p>See also section <seealso marker="stdlib:unicode_usage#notes-about-raw-filenames">Notes About Raw Filenames</seealso> in the STDLIB User's Guide.</p>
</description>
@@ -90,8 +90,7 @@
<datatype>
<name>fd()</name>
<desc>
- <p><marker id="type-fd"/>
- A file descriptor representing a file opened in
+ <p>A file descriptor representing a file opened in
<seealso marker="#raw"><c>raw</c></seealso> mode.</p>
</desc>
</datatype>
@@ -278,7 +277,7 @@ f.txt: {person, "kalle", 25}.
{ok,[{person,"kalle",25},{person,"pelle",30}]}</pre>
<p>The encoding of <c><anno>Filename</anno></c> can be set
by a comment, as described in
- <seealso marker="stdlib:epp#encoding"><c>stdlib:epp(3)</c></seealso>.</p>
+ <seealso marker="stdlib:epp#encoding"><c>epp(3)</c></seealso>.</p>
</desc>
</func>
<func>
@@ -446,7 +445,7 @@ f.txt: {person, "kalle", 25}.
</taglist>
<p>The encoding of <c><anno>Filename</anno></c> can be set
by a comment, as described in
- <seealso marker="stdlib:epp#encoding"><c>stdlib:epp(3)</c></seealso>.</p>
+ <seealso marker="stdlib:epp#encoding"><c>epp(3)</c></seealso>.</p>
</desc>
</func>
<func>
@@ -456,7 +455,7 @@ f.txt: {person, "kalle", 25}.
<p>The same as <c>eval/1</c>, but the variable bindings
<c><anno>Bindings</anno></c> are used in the evaluation. For information
about the variable bindings, see
- <seealso marker="stdlib:erl_eval"><c>stdlib:erl_eval(3)</c></seealso>.</p>
+ <seealso marker="stdlib:erl_eval"><c>erl_eval(3)</c></seealso>.</p>
</desc>
</func>
<func>
@@ -831,7 +830,7 @@ f.txt: {person, "kalle", 25}.
this module (<c>file</c>) for reading and writing data as the interfaces
provided here work with byte-oriented data. Using other (Unicode)
encodings makes the
- <seealso marker="stdlib:io"><c>stdlib:io(3)</c></seealso> functions
+ <seealso marker="stdlib:io"><c>io(3)</c></seealso> functions
<c>get_chars</c>, <c>get_line</c>, and <c>put_chars</c> more suitable,
as they can work with the full Unicode range.</p>
<p>If data is sent to an <c>io_device()</c> in a format that cannot be
@@ -848,7 +847,7 @@ f.txt: {person, "kalle", 25}.
that is,
<seealso marker="#read/2"><c>read/2</c></seealso> are
returned "as is". If module
- <seealso marker="stdlib:io"><c>stdlib:io(3)</c></seealso> is used for
+ <seealso marker="stdlib:io"><c>io(3)</c></seealso> is used for
writing, the file can only cope with Unicode characters up to code point
255 (the ISO Latin-1 range).</p>
</item>
@@ -862,7 +861,7 @@ f.txt: {person, "kalle", 25}.
the file lies beyond the ISO Latin-1 range (0..255), but failure occurs
if the data contains Unicode code points beyond that range. The file is
best read with the functions in the Unicode aware module
- <seealso marker="stdlib:io"><c>stdlib:io(3)</c></seealso>.</p>
+ <seealso marker="stdlib:io"><c>io(3)</c></seealso>.</p>
<p>Bytes written to the file by any means are translated to UTF-8 encoding
before being stored on the disk file.</p>
</item>
@@ -892,7 +891,7 @@ f.txt: {person, "kalle", 25}.
So a file can be analyzed in latin1 encoding for, for example, a BOM,
positioned beyond the BOM and then be set for the right encoding before
further reading. For functions identifying BOMs, see module
- <seealso marker="stdlib:unicode"><c>stdlib:unicode(3)</c></seealso>. </p>
+ <seealso marker="stdlib:unicode"><c>unicode(3)</c></seealso>. </p>
<p>This option is not allowed on <c>raw</c> files.</p>
</item>
<tag><c>ram</c></tag>
@@ -933,7 +932,7 @@ f.txt: {person, "kalle", 25}.
closed and the process itself is terminated.
An <c><anno>IoDevice</anno></c> returned from this call can be used
as an argument to the I/O functions (see
- <seealso marker="stdlib:io"><c>stdlib:io(3)</c></seealso>).</p>
+ <seealso marker="stdlib:io"><c>io(3)</c></seealso>).</p>
<note>
<p>In previous versions of <c>file</c>, modes were specified
as one of the atoms <c>read</c>, <c>write</c>, or
@@ -1056,7 +1055,7 @@ f.txt: {person, "kalle", 25}.
</taglist>
<p>The encoding of <c><anno>Filename</anno></c> can be set
by a comment as described in
- <seealso marker="stdlib:epp#encoding"><c>stdlib:epp(3)</c></seealso>.</p>
+ <seealso marker="stdlib:epp#encoding"><c>epp(3)</c></seealso>.</p>
</desc>
</func>
<func>
@@ -1129,7 +1128,7 @@ f.txt: {person, "kalle", 25}.
</taglist>
<p>The encoding of <c><anno>Filename</anno></c> can be set
by a comment as described in
- <seealso marker="stdlib:epp#encoding"><c>stdlib:epp(3)</c></seealso>.</p>
+ <seealso marker="stdlib:epp#encoding"><c>epp(3)</c></seealso>.</p>
</desc>
</func>
<func>
@@ -1390,7 +1389,7 @@ f.txt: {person, "kalle", 25}.
<c>{ok, <anno>FileInfo</anno>}</c> if successful, otherwise
<c>{error, <anno>Reason</anno>}</c>. <c><anno>FileInfo</anno></c>
is a record
- <c>file_info</c>, defined in the <c>Kernel</c> include file
+ <c>file_info</c>, defined in the Kernel include file
<c>file.hrl</c>. Include the following directive in the module
from which the function is called:</p>
<code type="none">
@@ -1553,7 +1552,7 @@ f.txt: {person, "kalle", 25}.
raw line-oriented reading.</p>
<p>If <c>encoding</c> is set to something else than <c>latin1</c>, the
<c>read_line/1</c> call fails if the data contains characters larger than 255,
- why module <seealso marker="stdlib:io"><c>stdlib:io(3)</c></seealso> is to be
+ why module <seealso marker="stdlib:io"><c>io(3)</c></seealso> is to be
preferred when reading such a file.</p>
<p>The function returns:</p>
<taglist>
@@ -1971,7 +1970,7 @@ f.txt: {person, "kalle", 25}.
<p>Changes file information. Returns <c>ok</c> if successful,
otherwise <c>{error, <anno>Reason</anno>}</c>.
<c><anno>FileInfo</anno></c> is a record
- <c>file_info</c>, defined in the <c>Kernel</c> include file
+ <c>file_info</c>, defined in the Kernel include file
<c>file.hrl</c>. Include the following directive in the module
from which the function is called:</p>
<code type="none">
diff --git a/lib/kernel/doc/src/gen_sctp.xml b/lib/kernel/doc/src/gen_sctp.xml
index 57307cd594..737800c6b1 100644
--- a/lib/kernel/doc/src/gen_sctp.xml
+++ b/lib/kernel/doc/src/gen_sctp.xml
@@ -72,8 +72,7 @@
<datatype>
<name>assoc_id()</name>
<desc>
- <p><marker id="type-assoc_id"/>
- An opaque term returned in, for example, <c>#sctp_paddr_change{}</c>,
+ <p>An opaque term returned in, for example, <c>#sctp_paddr_change{}</c>,
which identifies an association for an SCTP socket. The term
is opaque except for the special value <c>0</c>, which has a
meaning such as "the whole endpoint" or "all future associations".</p>
@@ -88,12 +87,11 @@
</datatype>
<datatype>
<name name="option_name"/>
- <desc><marker id="type-sctp_socket"></marker></desc>
</datatype>
<datatype>
<name>sctp_socket()</name>
<desc>
- <p><marker id="type-sctp_socket"/>Socket identifier returned from
+ <p>Socket identifier returned from
<seealso marker="#open/0"><c>open/*</c></seealso>.</p>
<marker id="exports"></marker>
</desc>
diff --git a/lib/kernel/doc/src/gen_tcp.xml b/lib/kernel/doc/src/gen_tcp.xml
index 919178195f..08454b9832 100644
--- a/lib/kernel/doc/src/gen_tcp.xml
+++ b/lib/kernel/doc/src/gen_tcp.xml
@@ -79,8 +79,7 @@ do_recv(Sock, Bs) ->
</datatype>
<datatype>
<name>socket()</name>
- <desc><p><marker id="type-socket"/>
- As returned by
+ <desc><p>As returned by
<seealso marker="#accept/1"><c>accept/1,2</c></seealso> and
<seealso marker="#connect/3"><c>connect/3,4</c></seealso>.</p>
<marker id="connect"></marker>
@@ -154,17 +153,17 @@ do_recv(Sock, Bs) ->
<c><anno>Address</anno></c> can be a hostname or an IP address.</p>
<p>The following options are available:</p>
<taglist>
- <tag><c>{ip, ip_address()}</c></tag>
+ <tag><c>{ip, Address}</c></tag>
<item><p>If the host has many network interfaces, this option
specifies which one to use.</p></item>
- <tag><c>{ifaddr, ip_address()}</c></tag>
- <item><p>Same as <c>{ip, ip_address()}</c>. If the host has many
+ <tag><c>{ifaddr, Address}</c></tag>
+ <item><p>Same as <c>{ip, Address}</c>. If the host has many
network interfaces, this option specifies which one to use.</p>
</item>
<tag><c>{fd, integer() >= 0}</c></tag>
<item><p>If a socket has somehow been connected without using
<c>gen_tcp</c>, use this option to pass the file descriptor
- for it. If <c>{ip, ip_address()}</c> and/or
+ for it. If <c>{ip, Address}</c> and/or
<c>{port, port_number()}</c> is combined with this option, the
<c>fd</c> is bound to the specified interface and port before
connecting. If these options are not specified, it is assumed that
@@ -173,6 +172,15 @@ do_recv(Sock, Bs) ->
<item><p>Sets up the socket for IPv4.</p></item>
<tag><c>inet6</c></tag>
<item><p>Sets up the socket for IPv6.</p></item>
+ <tag><c>local</c></tag>
+ <item>
+ <p>
+ Sets up a Unix Domain Socket. See
+ <seealso marker="inet#type-local_address">
+ <c>inet:local_address()</c>
+ </seealso>
+ </p>
+ </item>
<tag><c>{port, Port}</c></tag>
<item><p>Specifies which local port number to use.</p></item>
<tag><c>{tcp_module, module()}</c></tag>
@@ -208,7 +216,7 @@ do_recv(Sock, Bs) ->
time-out in milliseconds. Defaults to <c>infinity</c>.</p>
<note>
<p>The default values for options specified to <c>connect</c> can
- be affected by the <c>Kernel</c> configuration parameter
+ be affected by the Kernel configuration parameter
<c>inet_default_connect_options</c>. For details, see
<seealso marker="inet"><c>inet(3)</c></seealso>.</p>
</note>
@@ -224,6 +232,14 @@ do_recv(Sock, Bs) ->
that receives messages from the socket. If called by any other
process than the current controlling process,
<c>{error, not_owner}</c> is returned.</p>
+ <p>If the socket is set in active mode, this function
+ will transfer any messages in the mailbox of the caller
+ to the new controlling process.
+ If any other process is interacting with the socket while
+ the transfer is happening, the transfer may not work correctly
+ and messages may remain in the caller's mailbox. For instance
+ changing the sockets active mode before the transfere is complete
+ may cause this.</p>
</desc>
</func>
@@ -247,7 +263,7 @@ do_recv(Sock, Bs) ->
<item><p><c>B</c> is an integer &gt;= <c>0</c>. The backlog value
defines the maximum length that the queue of pending connections
can grow to. Defaults to <c>5</c>.</p></item>
- <tag><c>{ip, ip_address()}</c></tag>
+ <tag><c>{ip, Address}</c></tag>
<item><p>If the host has many network interfaces, this option
specifies which one to listen on.</p></item>
<tag><c>{port, Port}</c></tag>
@@ -256,8 +272,8 @@ do_recv(Sock, Bs) ->
<item><p>If a socket has somehow been connected without using
<c>gen_tcp</c>, use this option to pass the file
descriptor for it.</p></item>
- <tag><c>{ifaddr, ip_address()}</c></tag>
- <item><p>Same as <c>{ip, ip_address()}</c>. If the host has many
+ <tag><c>{ifaddr, Address}</c></tag>
+ <item><p>Same as <c>{ip, Address}</c>. If the host has many
network interfaces, this option specifies which one to use.</p>
</item>
<tag><c>inet6</c></tag>
@@ -277,7 +293,7 @@ do_recv(Sock, Bs) ->
<seealso marker="#accept/1"><c>accept/1,2</c></seealso>.</p>
<note>
<p>The default values for options specified to <c>listen</c> can
- be affected by the <c>Kernel</c> configuration parameter
+ be affected by the Kernel configuration parameter
<c>inet_default_listen_options</c>. For details, see
<seealso marker="inet"><c>inet(3)</c></seealso>.</p>
</note>
@@ -291,7 +307,7 @@ do_recv(Sock, Bs) ->
<type_desc variable="HttpPacket">See the description of
<c>HttpPacket</c> in
<seealso marker="erts:erlang#decode_packet/3"><c>erlang:decode_packet/3</c></seealso>
- in <c>ERTS</c>.
+ in ERTS.
</type_desc>
<desc>
<p>Receives a packet from a socket in passive
diff --git a/lib/kernel/doc/src/gen_udp.xml b/lib/kernel/doc/src/gen_udp.xml
index 906883ed34..3f88a0272d 100644
--- a/lib/kernel/doc/src/gen_udp.xml
+++ b/lib/kernel/doc/src/gen_udp.xml
@@ -45,7 +45,6 @@
<datatype>
<name>socket()</name>
<desc>
- <marker id="type-socket"/>
<p>As returned by
<seealso marker="#open/1"><c>open/1,2</c></seealso>.</p>
</desc>
@@ -86,11 +85,11 @@
<item><p>Received <c>Packet</c> is delivered as a list.</p></item>
<tag><c>binary</c></tag>
<item><p>Received <c>Packet</c> is delivered as a binary.</p></item>
- <tag><c>{ip, ip_address()}</c></tag>
+ <tag><c>{ip, Address}</c></tag>
<item><p>If the host has many network interfaces, this option
specifies which one to use.</p></item>
- <tag><c>{ifaddr, ip_address()}</c></tag>
- <item><p>Same as <c>{ip, ip_address()}</c>. If the host has many
+ <tag><c>{ifaddr, Address}</c></tag>
+ <item><p>Same as <c>{ip, Address}</c>. If the host has many
network interfaces, this option specifies which one to
use.</p></item>
<tag><c>{fd, integer() >= 0}</c></tag>
@@ -105,6 +104,15 @@
<item><p>Sets up the socket for IPv6.</p></item>
<tag><c>inet</c></tag>
<item><p>Sets up the socket for IPv4.</p></item>
+ <tag><c>local</c></tag>
+ <item>
+ <p>
+ Sets up a Unix Domain Socket. See
+ <seealso marker="inet#type-local_address">
+ <c>inet:local_address()</c>
+ </seealso>
+ </p>
+ </item>
<tag><c>{udp_module, module()}</c></tag>
<item><p>Overrides which callback module is used. Defaults to
<c>inet_udp</c> for IPv4 and <c>inet6_udp</c> for IPv6.</p></item>
@@ -177,8 +185,10 @@
<name name="send" arity="4"/>
<fsummary>Send a packet.</fsummary>
<desc>
- <p>Sends a packet to the specified address and port. Argument
- <c><anno>Address</anno></c> can be a hostname or an IP address.</p>
+ <p>
+ Sends a packet to the specified address and port. Argument
+ <c><anno>Address</anno></c> can be a hostname or a socket address.
+ </p>
</desc>
</func>
</funcs>
diff --git a/lib/kernel/doc/src/heart.xml b/lib/kernel/doc/src/heart.xml
index c587e39345..59a046bf4d 100644
--- a/lib/kernel/doc/src/heart.xml
+++ b/lib/kernel/doc/src/heart.xml
@@ -83,6 +83,17 @@
<c><![CDATA[SIGKILL]]></c>:</p>
<pre>
% <input>erl -heart -env HEART_KILL_SIGNAL SIGABRT ...</input></pre>
+ <p> If heart should <em>not</em> kill the Erlang runtime system, this can be indicated
+ using the environment variable <c><![CDATA[HEART_NO_KILL=TRUE]]></c>.
+ This can be useful if the command executed by heart takes care of this,
+ for example as part of a specific cleanup sequence.
+ If unset, or not set to <c><![CDATA[TRUE]]></c>, the default behaviour
+ will be to kill as described above.
+ </p>
+
+ <pre>
+% <input>erl -heart -env HEART_NO_KILL 1 ...</input></pre>
+
<p>Furthermore, <c><![CDATA[ERL_CRASH_DUMP_SECONDS]]></c> has the
following behavior on <c>heart</c>:</p>
<taglist>
diff --git a/lib/kernel/doc/src/inet.xml b/lib/kernel/doc/src/inet.xml
index cfff393b8c..3f4e3684f4 100644
--- a/lib/kernel/doc/src/inet.xml
+++ b/lib/kernel/doc/src/inet.xml
@@ -4,14 +4,14 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2015</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
-
+
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
@@ -36,7 +36,7 @@
<seealso marker="erts:inet_cfg">ERTS User's Guide:
Inet Configuration</seealso> for more information about how to
configure an Erlang runtime system for IP communication.</p>
- <p>The following two <c>Kernel</c> configuration parameters affect the
+ <p>The following two Kernel configuration parameters affect the
behavior of all sockets opened on an Erlang node:</p>
<list type="bulleted">
<item><p><c>inet_default_connect_options</c> can contain a list of
@@ -48,7 +48,7 @@
<p>When <c>accept</c> is issued, the values of the listening socket options
are inherited. No such application variable is therefore needed for
<c>accept</c>.</p>
- <p>Using the <c>Kernel</c> configuration parameters above, one
+ <p>Using the Kernel configuration parameters above, one
can set default options for all TCP sockets on a node, but use this
with care. Options such as <c>{delay_send,true}</c> can be
specified in this way. The following is an example of starting an Erlang
@@ -95,7 +95,7 @@ fe80::204:acff:fe17:bf38
<datatype>
<name name="hostent"/>
<desc>
- <p>The record is defined in the <c>Kernel</c> include file
+ <p>The record is defined in the Kernel include file
<c>"inet.hrl"</c>.</p>
<p>Add the following directive to the module:</p>
<code>
@@ -118,6 +118,65 @@ fe80::204:acff:fe17:bf38
<name name="port_number"/>
</datatype>
<datatype>
+ <name name="local_address"/>
+ <desc>
+ <p>
+ This address family only works on Unix-like systems.
+ </p>
+ <p>
+ <c><anno>File</anno></c> is normally a file pathname
+ in a local filesystem. It is limited in length by the
+ operating system, traditionally to 108 bytes.
+ </p>
+ <p>
+ A <c>binary()</c> is passed as is to the operating system,
+ but a <c>string()</c> is encoded according to the
+ <seealso marker="file#native_name_encoding/0">
+ system filename encoding mode.
+ </seealso>
+ </p>
+ <p>
+ Other addresses are possible, for example Linux implements
+ "Abstract Addresses". See the documentation for
+ Unix Domain Sockets on your system,
+ normally <c>unix</c> in manual section 7.
+ </p>
+ <p>
+ In most API functions where you can use
+ this address family the port number must be <c>0</c>.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="socket_address"/>
+ </datatype>
+ <datatype>
+ <name name="socket_getopt"/>
+ </datatype>
+ <datatype>
+ <name name="socket_setopt"/>
+ </datatype>
+ <datatype>
+ <name name="returned_non_ip_address"/>
+ <desc>
+ <p>
+ Addresses besides
+ <seealso marker="#type-ip_address">
+ <c>ip_address()</c>
+ </seealso>
+ ones that are returned from socket API functions.
+ See in particular
+ <seealso marker="#type-local_address">
+ <c>local_address()</c>.
+ </seealso>
+ The <c>unspec</c> family corresponds to AF_UNSPEC and can
+ occur if the other side has no socket address.
+ The <c>undefined</c> family can only occur in the unlikely
+ event of an address family that the VM does not recognize.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
<name name="posix"/>
<desc>
<p>An atom that is named from the POSIX error codes used in Unix,
@@ -128,7 +187,7 @@ fe80::204:acff:fe17:bf38
<datatype>
<name>socket()</name>
<desc>
- <p><marker id="type-socket"></marker>See
+ <p>See
<seealso marker="gen_tcp#type-socket"><c>gen_tcp:type-socket</c></seealso>
and
<seealso marker="gen_udp#type-socket"><c>gen_udp:type-socket</c></seealso>.
@@ -207,6 +266,10 @@ fe80::204:acff:fe17:bf38
<desc>
<p>Returns a <c>hostent</c> record for the host with the specified
hostname.</p>
+ <p>If resolver option <c>inet6</c> is <c>true</c>,
+ an IPv6 address is looked up. If that fails,
+ the IPv4 address is looked up and returned on
+ IPv6-mapped IPv4 format.</p>
</desc>
</func>
@@ -270,8 +333,6 @@ fe80::204:acff:fe17:bf38
<func>
<name name="getopts" arity="2"/>
<fsummary>Get one or more options for a socket.</fsummary>
- <type name="socket_getopt"/>
- <type name="socket_setopt"/>
<desc>
<p>Gets one or more options for a socket. For a list of available
options, see
@@ -330,7 +391,7 @@ get_tcpi_sacked(Sock) ->
<<_:28/binary,TcpiSacked:32/native,_/binary>> = Info,
TcpiSacked.]]></code>
<p>Preferably, you would check the machine type, the operating system,
- and the <c>Kernel</c> version before executing anything similar to
+ and the Kernel version before executing anything similar to
this code.</p>
</desc>
</func>
@@ -523,7 +584,6 @@ get_tcpi_sacked(Sock) ->
<func>
<name name="setopts" arity="2"/>
<fsummary>Set one or more options for a socket.</fsummary>
- <type name="socket_setopt"/>
<desc>
<p>Sets one or more options for a socket.</p>
<p>The following options are available:</p>
@@ -601,7 +661,7 @@ get_tcpi_sacked(Sock) ->
<p>The size of the user-level software buffer used by
the driver. Not to be confused with options <c>sndbuf</c>
and <c>recbuf</c>, which correspond to the
- <c>Kernel</c> socket buffers. It is recommended
+ Kernel socket buffers. It is recommended
to have <c>val(buffer) &gt;= max(val(sndbuf),val(recbuf))</c> to
avoid performance issues because of unnecessary copying.
<c>val(buffer)</c> is automatically set to the above
@@ -660,7 +720,7 @@ get_tcpi_sacked(Sock) ->
<p>The socket message queue is set to a busy
state when the amount of data on the message
queue reaches this limit. Notice that this limit only
- concerns data that has not yet reached the <c>ERTS</c> internal
+ concerns data that has not yet reached the ERTS internal
socket implementation. Defaults to 8 kB.</p>
<p>Senders of data to the socket are suspended if
either the socket message queue is busy or the socket
@@ -676,7 +736,7 @@ get_tcpi_sacked(Sock) ->
<tag><c>{high_watermark, Size}</c> (TCP/IP sockets)</tag>
<item>
<p>The socket is set to a busy state when the amount
- of data queued internally by the <c>ERTS</c> socket implementation
+ of data queued internally by the ERTS socket implementation
reaches this limit. Defaults to 8 kB.</p>
<p>Senders of data to the socket are suspended if
either the socket message queue is busy or the socket
@@ -756,7 +816,7 @@ get_tcpi_sacked(Sock) ->
socket message queue is set in a not busy state when
the amount of data queued in the message queue falls
below this limit. Notice that this limit only concerns data
- that has not yet reached the <c>ERTS</c> internal socket
+ that has not yet reached the ERTS internal socket
implementation. Defaults to 4 kB.</p>
<p>Senders that are suspended because of either a
busy message queue or a busy socket are resumed
@@ -774,7 +834,7 @@ get_tcpi_sacked(Sock) ->
<item>
<p>If the socket is in a busy state, the socket is
set in a not busy state when the amount of data
- queued internally by the <c>ERTS</c> socket implementation
+ queued internally by the ERTS socket implementation
falls below this limit. Defaults to 4 kB.</p>
<p>Senders that are suspended because of a
busy message queue or a busy socket are resumed
@@ -894,7 +954,7 @@ setcap cap_sys_admin,cap_sys_ptrace,cap_dac_read_search+epi beam.smp</code>
are returned with the format according to <c>HttpPacket</c>
described in
<seealso marker="erts:erlang#decode_packet/3">
- <c>erlang:decode_packet/3</c></seealso> in <c>ERTS</c>.
+ <c>erlang:decode_packet/3</c></seealso> in ERTS.
A socket in passive
mode returns <c>{ok, HttpPacket}</c> from <c>gen_tcp:recv</c>
while an active socket sends messages like
@@ -1070,7 +1130,7 @@ inet:setopts(Sock,[{raw,6,8,<<30:32/native>>}]),]]></code>
can respond differently to this kind of option
manipulation. Use with care.</p>
<p>Notice that the default options for TCP/IP sockets can be
- changed with the <c>Kernel</c> configuration parameters mentioned in
+ changed with the Kernel configuration parameters mentioned in
the beginning of this manual page.</p>
</desc>
</func>
@@ -1267,4 +1327,3 @@ inet:setopts(Sock,[{raw,6,8,<<30:32/native>>}]),]]></code>
</list>
</section>
</erlref>
-
diff --git a/lib/kernel/doc/src/init_stub.xml b/lib/kernel/doc/src/init_stub.xml
index df89b174ca..1297c8264d 100644
--- a/lib/kernel/doc/src/init_stub.xml
+++ b/lib/kernel/doc/src/init_stub.xml
@@ -34,6 +34,6 @@
<modulesummary>Coordination of system startup.</modulesummary>
<description>
<p>This module is moved to the
- <seealso marker="erts:init"><c>ERTS</c></seealso> application.</p>
+ <seealso marker="erts:init">ERTS</seealso> application.</p>
</description>
</erlref>
diff --git a/lib/kernel/doc/src/kernel_app.xml b/lib/kernel/doc/src/kernel_app.xml
index 9e6fb60bb7..df681a505f 100644
--- a/lib/kernel/doc/src/kernel_app.xml
+++ b/lib/kernel/doc/src/kernel_app.xml
@@ -31,12 +31,12 @@
<app>kernel</app>
<appsummary>The Kernel application.</appsummary>
<description>
- <p>The <c>Kernel</c> application has all the code necessary to run
+ <p>The Kernel application has all the code necessary to run
the Erlang runtime system: file servers, code servers,
and so on.</p>
- <p>The <c>Kernel</c> application is the first application started. It is
+ <p>The Kernel application is the first application started. It is
mandatory in the sense that the minimal system based on
- Erlang/OTP consists of <c>Kernel</c> and <c>STDLIB</c>. <c>Kernel</c>
+ Erlang/OTP consists of Kernel and STDLIB. Kernel
contains the following functional areas:</p>
<list type="bulleted">
<item>Start, stop, supervision, configuration, and distribution of applications</item>
@@ -53,13 +53,13 @@
<section>
<title>Error Logger Event Handlers</title>
<p>Two standard error logger event handlers are defined in
- the <c>Kernel</c> application. These are described in
+ the Kernel application. These are described in
<seealso marker="error_logger"><c>error_logger(3)</c></seealso>.</p>
</section>
<section>
<title>Configuration</title>
- <p>The following configuration parameters are defined for the <c>Kernel</c>
+ <p>The following configuration parameters are defined for the Kernel
application. For more information about configuration parameters,
see file <seealso marker="app"><c>app(4)</c></seealso>.</p>
<taglist>
@@ -162,8 +162,8 @@
depth to which terms are printed by the error logger event
handlers included in OTP. This
configuration parameter is used by the two event handlers
- defined by the <c>Kernel</c> application and the two event
- handlers in the <c>SASL</c> application.
+ defined by the Kernel application and the two event
+ handlers in the SASL application.
(If you have implemented your own error handlers, this configuration
parameter has no effect on them.)</p>
@@ -173,7 +173,7 @@
<c>~P</c> and <c>~W</c>, respectively, and <c>Depth</c> is
used as the depth parameter. For details, see
<seealso marker="stdlib:io#format/2"><c>io:format/2</c></seealso>
- in <c>STDLIB</c>.</p>
+ in STDLIB.</p>
<note><p>A reasonable starting value for <c>Depth</c> is
<c>30</c>. We recommend to test crashing various processes in your
@@ -217,12 +217,14 @@
</item>
<tag><c>{inet_dist_listen_options, Opts}</c></tag>
<item>
+ <marker id="inet_dist_listen_options"></marker>
<p>Defines a list of extra socket options to be used when opening the
listening socket for a distributed Erlang node.
See <seealso marker="gen_tcp#listen/2"><c>gen_tcp:listen/2</c></seealso>.</p>
</item>
<tag><c>{inet_dist_connect_options, Opts}</c></tag>
<item>
+ <marker id="inet_dist_connect_options"></marker>
<p>Defines a list of extra socket options to be used when connecting to
other distributed Erlang nodes.
See <seealso marker="gen_tcp#connect/4"><c>gen_tcp:connect/4</c></seealso>.</p>
@@ -239,7 +241,7 @@
<p>The name (string) of an Inet user configuration file. For details,
see section
<seealso marker="erts:inet_cfg"><c>Inet Configuration</c></seealso>
- in the <c>ERTS</c> User's Guide.</p>
+ in the ERTS User's Guide.</p>
</item>
<tag><c>net_setuptime = SetupTime</c></tag>
<item>
@@ -358,7 +360,7 @@ MaxT = TickTime + TickTime / 4</code>
<tag><c>start_timer = true | false</c></tag>
<item>
<p>Starts the <c>timer_server</c> if the parameter is
- <c>true</c> (see <seealso marker="stdlib:timer"><c>stdlib:timer(3)</c></seealso>).
+ <c>true</c> (see <seealso marker="stdlib:timer"><c>timer(3)</c></seealso>).
This parameter is to be set to <c>true</c> in an embedded system
using this service.</p>
<p>Defaults to <c>false</c>.</p>
diff --git a/lib/kernel/doc/src/net_kernel.xml b/lib/kernel/doc/src/net_kernel.xml
index f48a534d4f..4e2b0c69db 100644
--- a/lib/kernel/doc/src/net_kernel.xml
+++ b/lib/kernel/doc/src/net_kernel.xml
@@ -55,7 +55,7 @@ $ <input>erl -sname foobar</input></pre>
<seealso marker="erts:erl"><c>erl</c></seealso>.</p>
<p>Normally, connections are established automatically when
another node is referenced. This functionality can be disabled
- by setting <c>Kernel</c> configuration parameter
+ by setting Kernel configuration parameter
<c>dist_auto_connect</c> to <c>false</c>, see
<seealso marker="kernel_app"><c>kernel(6)</c></seealso>. In this case,
connections must be established explicitly by calling
@@ -116,6 +116,21 @@ $ <input>erl -sname foobar</input></pre>
</func>
<func>
+ <name name="getopts" arity="2"/>
+ <fsummary>Get distribution socket options.</fsummary>
+ <desc>
+ <p>Get one or more options for the distribution socket
+ connected to <c><anno>Node</anno></c>.</p>
+ <p>If <c><anno>Node</anno></c> is a connected node
+ the return value is the same as from
+ <seealso marker="inet#getopts/2"><c>inet:getopts(Sock, Options)</c></seealso>
+ where <c>Sock</c> is the distribution socket for <c><anno>Node</anno></c>.</p>
+ <p>Returns <c>ignored</c> if the local node is not alive or
+ <c>{error, noconnection}</c> if <c><anno>Node</anno></c> is not connected.</p>
+ </desc>
+ </func>
+
+ <func>
<name name="monitor_nodes" arity="1"/>
<name name="monitor_nodes" arity="2"/>
<fsummary>Subscribe to node status change messages.</fsummary>
@@ -131,7 +146,7 @@ $ <input>erl -sname foobar</input></pre>
are stopped. Two
option lists are considered the same if they contain the same
set of options.</p>
- <p>As from <c>Kernel</c> version 2.11.4, and <c>ERTS</c> version
+ <p>As from Kernel version 2.11.4, and ERTS version
5.5.4, the following is guaranteed:</p>
<list type="bulleted">
<item><p><c>nodeup</c> messages are delivered before delivery
@@ -141,13 +156,13 @@ $ <input>erl -sname foobar</input></pre>
messages from the remote node that have been passed
through the connection have been delivered.</p></item>
</list>
- <p>Notice that this is <em>not</em> guaranteed for <c>Kernel</c>
+ <p>Notice that this is <em>not</em> guaranteed for Kernel
versions before 2.11.4.</p>
- <p>As from <c>Kernel</c> version 2.11.4, subscriptions can also be
+ <p>As from Kernel version 2.11.4, subscriptions can also be
made before the <c>net_kernel</c> server is started, that is,
<c>net_kernel:monitor_nodes/[1,2]</c> does not return
<c>ignored</c>.</p>
- <p>As from <c>Kernel</c> version 2.13, and <c>ERTS</c> version
+ <p>As from Kernel version 2.13, and ERTS version
5.7, the following is guaranteed:</p>
<list type="bulleted">
<item><p><c>nodeup</c> messages are delivered after the
@@ -157,7 +172,7 @@ $ <input>erl -sname foobar</input></pre>
corresponding node has disappeared in results from
<c>erlang:nodes/X</c>.</p></item>
</list>
- <p>Notice that this is <em>not</em> guaranteed for <c>Kernel</c>
+ <p>Notice that this is <em>not</em> guaranteed for Kernel
versions before 2.13.</p>
<p>The format of the node status change messages depends on
<c><anno>Options</anno></c>. If <c><anno>Options</anno></c> is
@@ -289,6 +304,27 @@ $ <input>erl -sname foobar</input></pre>
</func>
<func>
+ <name name="setopts" arity="2"/>
+ <fsummary>Set distribution socket options.</fsummary>
+ <desc>
+ <p>Set one or more options for distribution sockets.
+ Argument <c><anno>Node</anno></c> can be either one node name
+ or the atom <c>new</c> to affect the distribution sockets of all
+ future connected nodes.</p>
+ <p>The return value is the same as from
+ <seealso marker="inet#setopts/2"><c>inet:setopts/2</c></seealso>
+ or <c>{error, noconnection}</c> if <c><anno>Node</anno></c> is not
+ a connected node or <c>new</c>.</p>
+ <p>If <c><anno>Node</anno></c> is <c>new</c> the <c><anno>Options</anno></c>
+ will then also be added to kernel configration parameters
+ <seealso marker="kernel:kernel_app#inet_dist_listen_options">inet_dist_listen_options</seealso>
+ and
+ <seealso marker="kernel:kernel_app#inet_dist_connect_options">inet_dist_connect_options</seealso>.</p>
+ <p>Returns <c>ignored</c> if the local node is not alive.</p>
+ </desc>
+ </func>
+
+ <func>
<name>start([Name]) -> {ok, pid()} | {error, Reason}</name>
<name>start([Name, NameType]) -> {ok, pid()} | {error, Reason}</name>
<name>start([Name, NameType, Ticktime]) -> {ok, pid()} | {error, Reason}</name>
diff --git a/lib/kernel/doc/src/notes.xml b/lib/kernel/doc/src/notes.xml
index b90a6dc3c2..9e9be3f661 100644
--- a/lib/kernel/doc/src/notes.xml
+++ b/lib/kernel/doc/src/notes.xml
@@ -31,6 +31,41 @@
</header>
<p>This document describes the changes made to the Kernel application.</p>
+<section><title>Kernel 5.0.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ When calling os:cmd from a process that has set trap_exit
+ to true an 'EXIT' message would be left in the message
+ queue. This bug was introduced in kernel vsn 5.0.1.</p>
+ <p>
+ Own Id: OTP-13813</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Kernel 5.0.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix a os:cmd bug where creating a background job using
+ &amp; would cause os:cmd to hang until the background job
+ terminated or closed its stdout and stderr file
+ descriptors. This bug has existed from kernel 5.0.</p>
+ <p>
+ Own Id: OTP-13741</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Kernel 5.0</title>
<section><title>Fixed Bugs and Malfunctions</title>
@@ -63,7 +98,8 @@
</item>
<item>
<p>
- Use fsync instead of fdatasync on Mac OSX.</p>
+ Make file:datasync use fsync instead of fdatasync on Mac
+ OSX.</p>
<p>
Own Id: OTP-13411</p>
</item>
@@ -78,7 +114,7 @@
</item>
<item>
<p>
- Huges writes (2Gb or more) could fail on some Unix
+ Large file writes (2Gb or more) could fail on some Unix
platforms (for example, OS X and FreeBSD).</p>
<p>
Own Id: OTP-13461</p>
@@ -95,11 +131,28 @@
</item>
<item>
<p>
- Fix process leak from global_group. Thanks to Xuming who
- reported and fixed this!</p>
+ Fix process leak from global_group.</p>
<p>
Own Id: OTP-13516 Aux Id: PR-1008 </p>
</item>
+ <item>
+ <p>
+ The function <c>inet:gethostbyname/1</c> now honors the
+ resolver option <c>inet6</c> instead of always looking up
+ IPv4 addresses.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-13622 Aux Id: PR-1065 </p>
+ </item>
+ <item>
+ <p>
+ The <c>Status</c> argument to <c>init:stop/1</c> is now
+ sanity checked to make sure <c>erlang:halt</c> does not
+ fail.</p>
+ <p>
+ Own Id: OTP-13631 Aux Id: PR-911 </p>
+ </item>
</list>
</section>
@@ -108,6 +161,13 @@
<list>
<item>
<p>
+ Add {line_delim, byte()} option to inet:setopts/2 and
+ decode_packet/3</p>
+ <p>
+ Own Id: OTP-12837</p>
+ </item>
+ <item>
+ <p>
Added <seealso
marker="kernel:os#perf_counter/1">os:perf_counter/1</seealso>.</p>
<p>
@@ -121,12 +181,12 @@
<item>
<p>
The os:cmd call has been optimized on unix platforms to
- be more performant as the number of schedulers increase.</p>
+ be scale better with the number of schedulers.</p>
<p>
Own Id: OTP-13089</p>
</item>
<item>
- <p>New functions that can load multiple functions at once
+ <p>New functions that can load multiple modules at once
have been added to the '<c>code</c>' module. The
functions are <c>code:atomic_load/1</c>,
<c>code:prepare_loading/1</c>,
@@ -159,7 +219,7 @@
<p>
The output of the default error logger is somewhat
prettier and easier to read. The default error logger is
- used during startup of the OTP system. If the start-up
+ used during start-up of the OTP system. If the start-up
fails, the output will be easier to read.</p>
<p>
Own Id: OTP-13325</p>
@@ -179,6 +239,25 @@
<p>
Own Id: OTP-13458</p>
</item>
+ <item>
+ <p>
+ Experimental support for Unix Domain Sockets has been
+ implemented. Read the sources if you want to try it out.
+ Example: <c>gen_udp:open(0,
+ [{ifaddr,{local,"/tmp/socket"}}])</c>. Documentation will
+ be written after user feedback on the experimental API.</p>
+ <p>
+ Own Id: OTP-13572 Aux Id: PR-612 </p>
+ </item>
+ <item>
+ <p>
+ Allow heart to be configured to not kill the previous
+ emulator before calling the HEART_COMMAND. This is done
+ by setting the environment variable HEART_NO_KILL to
+ TRUE.</p>
+ <p>
+ Own Id: OTP-13650</p>
+ </item>
</list>
</section>
@@ -3403,7 +3482,7 @@
types (for instance, <c>ensure_loaded/1</c> now only
accepts an atom as documented; it used to accept a string
too).</p>
- <p><c>Dialyzer</c> will generally emit warnings for any
+ <p>Dialyzer will generally emit warnings for any
calls that use undocumented argument types. Even if the
call happens to still work in R12B, you should correct
your code. A future release will adhere to the
diff --git a/lib/kernel/doc/src/rpc.xml b/lib/kernel/doc/src/rpc.xml
index 8cad9fe4fc..5944e9321a 100644
--- a/lib/kernel/doc/src/rpc.xml
+++ b/lib/kernel/doc/src/rpc.xml
@@ -320,7 +320,7 @@
<fsummary>Information about a process.</fsummary>
<desc>
<p>Location transparent version of the BIF
- <seealso marker="erts:erlang#process_info/1"><c>erlang:process_info/1</c></seealso> in <c>ERTS</c>.</p>
+ <seealso marker="erts:erlang#process_info/1"><c>erlang:process_info/1</c></seealso> in ERTS.</p>
</desc>
</func>
@@ -330,7 +330,7 @@
<fsummary>Information about a process.</fsummary>
<desc>
<p>Location transparent version of the BIF
- <seealso marker="erts:erlang#process_info/2"><c>erlang:process_info/2</c></seealso> in <c>ERTS</c>.</p>
+ <seealso marker="erts:erlang#process_info/2"><c>erlang:process_info/2</c></seealso> in ERTS.</p>
</desc>
</func>
diff --git a/lib/kernel/doc/src/zlib_stub.xml b/lib/kernel/doc/src/zlib_stub.xml
index b111581b10..9ab9c4eb62 100644
--- a/lib/kernel/doc/src/zlib_stub.xml
+++ b/lib/kernel/doc/src/zlib_stub.xml
@@ -34,6 +34,6 @@
<modulesummary>Zlib compression interface.</modulesummary>
<description>
<p>This module is moved to the
- <seealso marker="erts:zlib"><c>ERTS</c></seealso> application.</p>
+ <seealso marker="erts:zlib">ERTS</seealso> application.</p>
</description>
</erlref>
diff --git a/lib/kernel/include/dist_util.hrl b/lib/kernel/include/dist_util.hrl
index 43e50d4325..320e916c04 100644
--- a/lib/kernel/include/dist_util.hrl
+++ b/lib/kernel/include/dist_util.hrl
@@ -63,7 +63,7 @@
f_getll, %% Get low level port or pid.
f_address, %% The address of the "socket",
%% generated from Socket,Node
- %% These two are used in the tick loop,
+ %% These three are used in the tick loop,
%% so they are not fun's to avoid holding old code.
mf_tick, %% Takes the socket as parameters and
%% sends a tick, this is no fun, it
@@ -74,7 +74,11 @@
%% {ok, RecvCnt, SendCnt, SendPend} for
%% a given socket. This is a {M,F},
%% returning {error, Reason on failure}
- request_type = normal
+ request_type = normal,
+
+ %% New in kernel-5.1 (OTP 19.1):
+ mf_setopts, %% netkernel:setopts on active connection
+ mf_getopts %% netkernel:getopts on active connection
}).
diff --git a/lib/kernel/src/Makefile b/lib/kernel/src/Makefile
index 8bf02afec9..2b72f78dcf 100644
--- a/lib/kernel/src/Makefile
+++ b/lib/kernel/src/Makefile
@@ -104,6 +104,8 @@ MODULES = \
inet_sctp \
kernel \
kernel_config \
+ local_udp \
+ local_tcp \
net \
net_adm \
net_kernel \
@@ -244,6 +246,8 @@ $(EBIN)/inet_tcp.beam: inet_int.hrl
$(EBIN)/inet_udp_dist.beam: ../include/net_address.hrl ../include/dist.hrl ../include/dist_util.hrl
$(EBIN)/inet_udp.beam: inet_int.hrl
$(EBIN)/inet_sctp.beam: inet_int.hrl ../include/inet_sctp.hrl
+$(EBIN)/local_udp.beam: inet_int.hrl
+$(EBIN)/local_tcp.beam: inet_int.hrl
$(EBIN)/net_kernel.beam: ../include/net_address.hrl
$(EBIN)/os.beam: ../include/file.hrl
$(EBIN)/ram_file.beam: ../include/file.hrl
diff --git a/lib/kernel/src/code_server.erl b/lib/kernel/src/code_server.erl
index 6174136507..48541ec500 100644
--- a/lib/kernel/src/code_server.erl
+++ b/lib/kernel/src/code_server.erl
@@ -135,10 +135,14 @@ split_paths([], _S, Path, Paths) ->
-spec call(term()) -> term().
call(Req) ->
+ Ref = erlang:monitor(process, ?MODULE),
?MODULE ! {code_call, self(), Req},
receive
{?MODULE, Reply} ->
- Reply
+ erlang:demonitor(Ref,[flush]),
+ Reply;
+ {'DOWN',Ref,process,_,_} ->
+ exit({'DOWN',code_server,Req})
end.
reply(Pid, Res) ->
@@ -933,14 +937,20 @@ del_ebin(Dir) ->
filename:join(del_ebin_1(filename:split(Dir))).
del_ebin_1([Parent,App,"ebin"]) ->
- Ext = archive_extension(),
- case filename:basename(Parent, Ext) of
- Parent ->
- %% Plain directory.
+ case filename:basename(Parent) of
+ [] ->
+ %% Parent is the root directory
[Parent,App];
- Archive ->
- %% Archive.
- [Archive]
+ _ ->
+ Ext = archive_extension(),
+ case filename:basename(Parent, Ext) of
+ Parent ->
+ %% Plain directory.
+ [Parent,App];
+ Archive ->
+ %% Archive.
+ [Archive]
+ end
end;
del_ebin_1([H|T]) ->
[H|del_ebin_1(T)];
diff --git a/lib/kernel/src/dist_util.erl b/lib/kernel/src/dist_util.erl
index 47d0c1b861..8d2fc4d4b7 100644
--- a/lib/kernel/src/dist_util.erl
+++ b/lib/kernel/src/dist_util.erl
@@ -143,7 +143,11 @@ handshake_other_started(#hs_data{request_type=ReqType}=HSData0) ->
ChallengeB = recv_challenge_reply(HSData, ChallengeA, MyCookie),
send_challenge_ack(HSData, gen_digest(ChallengeB, HisCookie)),
?debug({dist_util, self(), accept_connection, Node}),
- connection(HSData).
+ connection(HSData);
+
+handshake_other_started(OldHsData) when element(1,OldHsData) =:= hs_data ->
+ handshake_other_started(convert_old_hsdata(OldHsData)).
+
%%
%% check if connecting node is allowed to connect
@@ -330,7 +334,20 @@ handshake_we_started(#hs_data{request_type=ReqType,
gen_digest(ChallengeA,HisCookie)),
reset_timer(NewHSData#hs_data.timer),
recv_challenge_ack(NewHSData, MyChallenge, MyCookie),
- connection(NewHSData).
+ connection(NewHSData);
+
+handshake_we_started(OldHsData) when element(1,OldHsData) =:= hs_data ->
+ handshake_we_started(convert_old_hsdata(OldHsData)).
+
+convert_old_hsdata({hs_data, KP, ON, TN, S, T, TF, A, OV, OF, OS, FS, FR,
+ FS_PRE, FS_POST, FG, FA, MFT, MFG, RT}) ->
+ #hs_data{
+ kernel_pid = KP, other_node = ON, this_node = TN, socket = S, timer = T,
+ this_flags = TF, allowed = A, other_version = OV, other_flags = OF,
+ other_started = OS, f_send = FS, f_recv = FR, f_setopts_pre_nodeup = FS_PRE,
+ f_setopts_post_nodeup = FS_POST, f_getll = FG, f_address = FA,
+ mf_tick = MFT, mf_getstat = MFG, request_type = RT}.
+
%% --------------------------------------------------------------
%% The connection has been established.
@@ -350,15 +367,15 @@ connection(#hs_data{other_node = Node,
mark_nodeup(HSData,Address),
case FPostNodeup(Socket) of
ok ->
- con_loop(HSData#hs_data.kernel_pid,
- Node,
- Socket,
- Address,
- HSData#hs_data.this_node,
- PType,
- #tick{},
- HSData#hs_data.mf_tick,
- HSData#hs_data.mf_getstat);
+ con_loop({HSData#hs_data.kernel_pid,
+ Node,
+ Socket,
+ PType,
+ HSData#hs_data.mf_tick,
+ HSData#hs_data.mf_getstat,
+ HSData#hs_data.mf_setopts,
+ HSData#hs_data.mf_getopts},
+ #tick{});
_ ->
?shutdown2(Node, connection_setup_failed)
end;
@@ -454,8 +471,8 @@ mark_nodeup(#hs_data{kernel_pid = Kernel,
?shutdown(Node)
end.
-con_loop(Kernel, Node, Socket, TcpAddress,
- MyNode, Type, Tick, MFTick, MFGetstat) ->
+con_loop({Kernel, Node, Socket, Type, MFTick, MFGetstat, MFSetOpts, MFGetOpts}=ConData,
+ Tick) ->
receive
{tcp_closed, Socket} ->
?shutdown2(Node, connection_closed);
@@ -468,15 +485,12 @@ con_loop(Kernel, Node, Socket, TcpAddress,
_ ->
ignore_it
end,
- con_loop(Kernel, Node, Socket, TcpAddress, MyNode, Type,
- Tick, MFTick, MFGetstat);
+ con_loop(ConData, Tick);
{Kernel, tick} ->
case send_tick(Socket, Tick, Type,
MFTick, MFGetstat) of
{ok, NewTick} ->
- con_loop(Kernel, Node, Socket, TcpAddress,
- MyNode, Type, NewTick, MFTick,
- MFGetstat);
+ con_loop(ConData, NewTick);
{error, not_responding} ->
error_msg("** Node ~p not responding **~n"
"** Removing (timedout) connection **~n",
@@ -489,13 +503,24 @@ con_loop(Kernel, Node, Socket, TcpAddress,
case MFGetstat(Socket) of
{ok, Read, Write, _} ->
From ! {self(), get_status, {ok, Read, Write}},
- con_loop(Kernel, Node, Socket, TcpAddress,
- MyNode,
- Type, Tick,
- MFTick, MFGetstat);
+ con_loop(ConData, Tick);
_ ->
?shutdown2(Node, get_status_failed)
- end
+ end;
+ {From, Ref, {setopts, Opts}} ->
+ Ret = case MFSetOpts of
+ undefined -> {error, enotsup};
+ _ -> MFSetOpts(Socket, Opts)
+ end,
+ From ! {Ref, Ret},
+ con_loop(ConData, Tick);
+ {From, Ref, {getopts, Opts}} ->
+ Ret = case MFGetOpts of
+ undefined -> {error, enotsup};
+ _ -> MFGetOpts(Socket, Opts)
+ end,
+ From ! {Ref, Ret},
+ con_loop(ConData, Tick)
end.
diff --git a/lib/kernel/src/erl_epmd.erl b/lib/kernel/src/erl_epmd.erl
index f8ef4a475d..7bc9e2ede3 100644
--- a/lib/kernel/src/erl_epmd.erl
+++ b/lib/kernel/src/erl_epmd.erl
@@ -103,6 +103,10 @@ names(EpmdAddr) ->
register_node(Name, PortNo) ->
register_node(Name, PortNo, inet).
+register_node(Name, PortNo, inet_tcp) ->
+ register_node(Name, PortNo, inet);
+register_node(Name, PortNo, inet6_tcp) ->
+ register_node(Name, PortNo, inet6);
register_node(Name, PortNo, Family) ->
gen_server:call(erl_epmd, {register, Name, PortNo, Family}, infinity).
@@ -403,8 +407,6 @@ select_best_version(L1, _H1, _L2, H2) when L1 > H2 ->
0;
select_best_version(_L1, H1, L2, _H2) when L2 > H1 ->
0;
-select_best_version(_L1, H1, L2, _H2) when L2 > H1 ->
- 0;
select_best_version(_L1, H1, _L2, H2) ->
erlang:min(H1, H2).
diff --git a/lib/kernel/src/gen_sctp.erl b/lib/kernel/src/gen_sctp.erl
index d00ed828a7..b133e6fed4 100644
--- a/lib/kernel/src/gen_sctp.erl
+++ b/lib/kernel/src/gen_sctp.erl
@@ -124,8 +124,8 @@ open() ->
SockType :: seqpacket | stream,
Socket :: sctp_socket().
-open(Opts) when is_list(Opts) ->
- Mod = mod(Opts, undefined),
+open(Opts0) when is_list(Opts0) ->
+ {Mod, Opts} = inet:sctp_module(Opts0),
case Mod:open(Opts) of
{error,badarg} ->
erlang:error(badarg, [Opts]);
@@ -445,32 +445,3 @@ controlling_process(S, Pid) when is_port(S), is_pid(Pid) ->
inet:udp_controlling_process(S, Pid);
controlling_process(S, Pid) ->
erlang:error(badarg, [S,Pid]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% Utilites
-%%
-
-%% Get the SCTP module, but IPv6 address overrides default IPv4
-mod(Address) ->
- case inet_db:sctp_module() of
- inet_sctp when tuple_size(Address) =:= 8 ->
- inet6_sctp;
- Mod ->
- Mod
- end.
-
-%% Get the SCTP module, but option sctp_module|inet|inet6 overrides
-mod([{sctp_module,Mod}|_], _Address) ->
- Mod;
-mod([inet|_], _Address) ->
- inet_sctp;
-mod([inet6|_], _Address) ->
- inet6_sctp;
-mod([{ip, Address}|Opts], _) ->
- mod(Opts, Address);
-mod([{ifaddr, Address}|Opts], _) ->
- mod(Opts, Address);
-mod([_|Opts], Address) ->
- mod(Opts, Address);
-mod([], Address) ->
- mod(Address).
diff --git a/lib/kernel/src/gen_tcp.erl b/lib/kernel/src/gen_tcp.erl
index 1f0d44b8e1..1a21541b7c 100644
--- a/lib/kernel/src/gen_tcp.erl
+++ b/lib/kernel/src/gen_tcp.erl
@@ -96,17 +96,17 @@
tos |
ipv6_v6only.
-type connect_option() ::
- {ip, inet:ip_address()} |
+ {ip, inet:socket_address()} |
{fd, Fd :: non_neg_integer()} |
- {ifaddr, inet:ip_address()} |
+ {ifaddr, inet:socket_address()} |
inet:address_family() |
{port, inet:port_number()} |
{tcp_module, module()} |
option().
-type listen_option() ::
- {ip, inet:ip_address()} |
+ {ip, inet:socket_address()} |
{fd, Fd :: non_neg_integer()} |
- {ifaddr, inet:ip_address()} |
+ {ifaddr, inet:socket_address()} |
inet:address_family() |
{port, inet:port_number()} |
{backlog, B :: non_neg_integer()} |
@@ -122,7 +122,7 @@
%%
-spec connect(Address, Port, Options) -> {ok, Socket} | {error, Reason} when
- Address :: inet:ip_address() | inet:hostname(),
+ Address :: inet:socket_address() | inet:hostname(),
Port :: inet:port_number(),
Options :: [connect_option()],
Socket :: socket(),
@@ -133,7 +133,7 @@ connect(Address, Port, Opts) ->
-spec connect(Address, Port, Options, Timeout) ->
{ok, Socket} | {error, Reason} when
- Address :: inet:ip_address() | inet:hostname(),
+ Address :: inet:socket_address() | inet:hostname(),
Port :: inet:port_number(),
Options :: [connect_option()],
Timeout :: timeout(),
@@ -151,8 +151,8 @@ connect(Address, Port, Opts, Time) ->
Error -> Error
end.
-connect1(Address,Port,Opts,Timer) ->
- Mod = mod(Opts, Address),
+connect1(Address, Port, Opts0, Timer) ->
+ {Mod, Opts} = inet:tcp_module(Opts0, Address),
case Mod:getaddrs(Address,Timer) of
{ok,IPs} ->
case Mod:getserv(Port) of
@@ -185,8 +185,8 @@ try_connect([], _Port, _Opts, _Timer, _Mod, Err) ->
ListenSocket :: socket(),
Reason :: system_limit | inet:posix().
-listen(Port, Opts) ->
- Mod = mod(Opts, undefined),
+listen(Port, Opts0) ->
+ {Mod, Opts} = inet:tcp_module(Opts0),
case Mod:getserv(Port) of
{ok,TP} ->
Mod:listen(TP, Opts);
@@ -335,32 +335,6 @@ controlling_process(S, NewOwner) ->
%%
%% Create a port/socket from a file descriptor
%%
-fdopen(Fd, Opts) ->
- Mod = mod(Opts, undefined),
+fdopen(Fd, Opts0) ->
+ {Mod, Opts} = inet:tcp_module(Opts0),
Mod:fdopen(Fd, Opts).
-
-%% Get the tcp_module, but IPv6 address overrides default IPv4
-mod(Address) ->
- case inet_db:tcp_module() of
- inet_tcp when tuple_size(Address) =:= 8 ->
- inet6_tcp;
- Mod ->
- Mod
- end.
-
-%% Get the tcp_module, but option tcp_module|inet|inet6 overrides
-mod([{tcp_module,Mod}|_], _Address) ->
- Mod;
-mod([inet|_], _Address) ->
- inet_tcp;
-mod([inet6|_], _Address) ->
- inet6_tcp;
-mod([{ip, Address}|Opts], _) ->
- mod(Opts, Address);
-mod([{ifaddr, Address}|Opts], _) ->
- mod(Opts, Address);
-mod([_|Opts], Address) ->
- mod(Opts, Address);
-mod([], Address) ->
- mod(Address).
-
diff --git a/lib/kernel/src/gen_udp.erl b/lib/kernel/src/gen_udp.erl
index 5e85c61dd9..98d2f0bcfb 100644
--- a/lib/kernel/src/gen_udp.erl
+++ b/lib/kernel/src/gen_udp.erl
@@ -92,18 +92,18 @@ open(Port) ->
-spec open(Port, Opts) -> {ok, Socket} | {error, Reason} when
Port :: inet:port_number(),
Opts :: [Option],
- Option :: {ip, inet:ip_address()}
+ Option :: {ip, inet:socket_address()}
| {fd, non_neg_integer()}
- | {ifaddr, inet:ip_address()}
+ | {ifaddr, inet:socket_address()}
| inet:address_family()
| {port, inet:port_number()}
| option(),
Socket :: socket(),
Reason :: inet:posix().
-open(Port, Opts) ->
- Mod = mod(Opts, undefined),
- {ok,UP} = Mod:getserv(Port),
+open(Port, Opts0) ->
+ {Mod, Opts} = inet:udp_module(Opts0),
+ {ok, UP} = Mod:getserv(Port),
Mod:open(UP, Opts).
-spec close(Socket) -> ok when
@@ -114,7 +114,7 @@ close(S) ->
-spec send(Socket, Address, Port, Packet) -> ok | {error, Reason} when
Socket :: socket(),
- Address :: inet:ip_address() | inet:hostname(),
+ Address :: inet:socket_address() | inet:hostname(),
Port :: inet:port_number(),
Packet :: iodata(),
Reason :: not_owner | inet:posix().
@@ -148,7 +148,7 @@ send(S, Packet) when is_port(S) ->
{ok, {Address, Port, Packet}} | {error, Reason} when
Socket :: socket(),
Length :: non_neg_integer(),
- Address :: inet:ip_address(),
+ Address :: inet:ip_address() | inet:returned_non_ip_address(),
Port :: inet:port_number(),
Packet :: string() | binary(),
Reason :: not_owner | inet:posix().
@@ -166,7 +166,7 @@ recv(S,Len) when is_port(S), is_integer(Len) ->
Socket :: socket(),
Length :: non_neg_integer(),
Timeout :: timeout(),
- Address :: inet:ip_address(),
+ Address :: inet:ip_address() | inet:returned_non_ip_address(),
Port :: inet:port_number(),
Packet :: string() | binary(),
Reason :: not_owner | inet:posix().
@@ -203,32 +203,6 @@ controlling_process(S, NewOwner) ->
%%
%% Create a port/socket from a file descriptor
%%
-fdopen(Fd, Opts) ->
- Mod = mod(Opts, undefined),
+fdopen(Fd, Opts0) ->
+ {Mod,Opts} = inet:udp_module(Opts0),
Mod:fdopen(Fd, Opts).
-
-
-%% Get the udp_module, but IPv6 address overrides default IPv4
-mod(Address) ->
- case inet_db:udp_module() of
- inet_udp when tuple_size(Address) =:= 8 ->
- inet6_udp;
- Mod ->
- Mod
- end.
-
-%% Get the udp_module, but option udp_module|inet|inet6 overrides
-mod([{udp_module,Mod}|_], _Address) ->
- Mod;
-mod([inet|_], _Address) ->
- inet_udp;
-mod([inet6|_], _Address) ->
- inet6_udp;
-mod([{ip, Address}|Opts], _) ->
- mod(Opts, Address);
-mod([{ifaddr, Address}|Opts], _) ->
- mod(Opts, Address);
-mod([_|Opts], Address) ->
- mod(Opts, Address);
-mod([], Address) ->
- mod(Address).
diff --git a/lib/kernel/src/inet.erl b/lib/kernel/src/inet.erl
index c1ae99ea24..75dd800c6b 100644
--- a/lib/kernel/src/inet.erl
+++ b/lib/kernel/src/inet.erl
@@ -37,6 +37,7 @@
parse_ipv6strict_address/1, parse_address/1, parse_strict_address/1, ntoa/1]).
-export([connect_options/2, listen_options/2, udp_options/2, sctp_options/2]).
+-export([udp_module/1, tcp_module/1, tcp_module/2, sctp_module/1]).
-export([i/0, i/1, i/2]).
@@ -72,9 +73,10 @@
-export([start_timer/1, timeout/1, timeout/2, stop_timer/1]).
-export_type([address_family/0, hostent/0, hostname/0, ip4_address/0,
- ip6_address/0, ip_address/0, posix/0, socket/0,
- port_number/0]).
-
+ ip6_address/0, ip_address/0, port_number/0,
+ local_address/0, socket_address/0, returned_non_ip_address/0,
+ socket_setopt/0, socket_getopt/0,
+ posix/0, socket/0, stat_option/0]).
%% imports
-import(lists, [append/1, duplicate/2, filter/2, foldl/3]).
@@ -97,6 +99,11 @@
0..65535,0..65535,0..65535,0..65535}.
-type ip_address() :: ip4_address() | ip6_address().
-type port_number() :: 0..65535.
+-type local_address() :: {local, File :: binary() | string()}.
+-type returned_non_ip_address() ::
+ {local, binary()} |
+ {unspec, <<>>} |
+ {undefined, any()}.
-type posix() :: exbadport | exbadseq | file:posix().
-type socket() :: port().
@@ -133,9 +140,11 @@
'running' | 'multicast' | 'loopback']} |
{'hwaddr', ether_address()}.
--type address_family() :: 'inet' | 'inet6'.
+-type address_family() :: 'inet' | 'inet6' | 'local'.
-type socket_protocol() :: 'tcp' | 'udp' | 'sctp'.
-type socket_type() :: 'stream' | 'dgram' | 'seqpacket'.
+-type socket_address() ::
+ ip_address() | 'any' | 'loopback' | local_address().
-type stat_option() ::
'recv_cnt' | 'recv_max' | 'recv_avg' | 'recv_oct' | 'recv_dvi' |
'send_cnt' | 'send_max' | 'send_avg' | 'send_oct' | 'send_pend'.
@@ -160,26 +169,33 @@ close(Socket) ->
end.
--spec peername(Socket) -> {ok, {Address, Port}} | {error, posix()} when
- Socket :: socket(),
- Address :: ip_address(),
- Port :: non_neg_integer().
+-spec peername(Socket :: socket()) ->
+ {ok,
+ {ip_address(), port_number()} |
+ returned_non_ip_address()} |
+ {error, posix()}.
peername(Socket) ->
prim_inet:peername(Socket).
--spec setpeername(Socket :: socket(), Address :: {ip_address(), port_number()}) ->
- 'ok' | {'error', any()}.
+-spec setpeername(
+ Socket :: socket(),
+ Address ::
+ {ip_address() | 'any' | 'loopback',
+ port_number()} |
+ socket_address()) ->
+ 'ok' | {'error', any()}.
setpeername(Socket, {IP,Port}) ->
prim_inet:setpeername(Socket, {IP,Port});
setpeername(Socket, undefined) ->
prim_inet:setpeername(Socket, undefined).
--spec peernames(Socket) -> {ok, [{Address, Port}]} | {error, posix()} when
- Socket :: socket(),
- Address :: ip_address(),
- Port :: non_neg_integer().
+-spec peernames(Socket :: socket()) ->
+ {ok,
+ [{ip_address(), port_number()} |
+ returned_non_ip_address()]} |
+ {error, posix()}.
peernames(Socket) ->
prim_inet:peernames(Socket).
@@ -195,15 +211,21 @@ peernames(Socket, Assoc) ->
prim_inet:peernames(Socket, Assoc).
--spec sockname(Socket) -> {ok, {Address, Port}} | {error, posix()} when
- Socket :: socket(),
- Address :: ip_address(),
- Port :: non_neg_integer().
+-spec sockname(Socket :: socket()) ->
+ {ok,
+ {ip_address(), port_number()} |
+ returned_non_ip_address()} |
+ {error, posix()}.
sockname(Socket) ->
prim_inet:sockname(Socket).
--spec setsockname(Socket :: socket(), Address :: {ip_address(), port_number()}) ->
+-spec setsockname(
+ Socket :: socket(),
+ Address ::
+ {ip_address() | 'any' | 'loopback',
+ port_number()} |
+ socket_address()) ->
'ok' | {'error', any()}.
setsockname(Socket, {IP,Port}) ->
@@ -211,10 +233,11 @@ setsockname(Socket, {IP,Port}) ->
setsockname(Socket, undefined) ->
prim_inet:setsockname(Socket, undefined).
--spec socknames(Socket) -> {ok, [{Address, Port}]} | {error, posix()} when
- Socket :: socket(),
- Address :: ip_address(),
- Port :: non_neg_integer().
+-spec socknames(Socket :: socket()) ->
+ {ok,
+ [{ip_address(), port_number()} |
+ returned_non_ip_address()]} |
+ {error, posix()}.
socknames(Socket) ->
prim_inet:socknames(Socket).
@@ -439,7 +462,12 @@ getstat(Socket,What) ->
Hostent :: hostent().
gethostbyname(Name) ->
- gethostbyname_tm(Name, inet, false).
+ case inet_db:res_option(inet6) of
+ true ->
+ gethostbyname_tm(Name, inet6, false);
+ false ->
+ gethostbyname_tm(Name, inet, false)
+ end.
-spec gethostbyname(Hostname, Family) ->
{ok, Hostent} | {error, posix()} when
@@ -676,7 +704,7 @@ connect_options() ->
low_msgq_watermark, send_timeout, send_timeout_close, delay_send, raw,
show_econnreset].
-connect_options(Opts, Family) ->
+connect_options(Opts, Mod) ->
BaseOpts =
case application:get_env(kernel, inet_default_connect_options) of
{ok,List} when is_list(List) ->
@@ -693,7 +721,7 @@ connect_options(Opts, Family) ->
{ok, R} ->
{ok, R#connect_opts {
opts = lists:reverse(R#connect_opts.opts),
- ifaddr = translate_ip(R#connect_opts.ifaddr, Family)
+ ifaddr = Mod:translate_ip(R#connect_opts.ifaddr)
}};
Error -> Error
end.
@@ -708,9 +736,6 @@ con_opt([Opt | Opts], #connect_opts{} = R, As) ->
{fd,Fd} -> con_opt(Opts, R#connect_opts { fd = Fd }, As);
binary -> con_add(mode, binary, R, Opts, As);
list -> con_add(mode, list, R, Opts, As);
- {tcp_module,_} -> con_opt(Opts, R, As);
- inet -> con_opt(Opts, R, As);
- inet6 -> con_opt(Opts, R, As);
{netns,NS} ->
BinNS = filename2binary(NS),
case prim_inet:is_sockopt_val(netns, BinNS) of
@@ -747,7 +772,7 @@ listen_options() ->
low_msgq_watermark, send_timeout, send_timeout_close, delay_send,
packet_size, raw, show_econnreset].
-listen_options(Opts, Family) ->
+listen_options(Opts, Mod) ->
BaseOpts =
case application:get_env(kernel, inet_default_listen_options) of
{ok,List} when is_list(List) ->
@@ -764,7 +789,7 @@ listen_options(Opts, Family) ->
{ok, R} ->
{ok, R#listen_opts {
opts = lists:reverse(R#listen_opts.opts),
- ifaddr = translate_ip(R#listen_opts.ifaddr, Family)
+ ifaddr = Mod:translate_ip(R#listen_opts.ifaddr)
}};
Error -> Error
end.
@@ -780,9 +805,6 @@ list_opt([Opt | Opts], #listen_opts{} = R, As) ->
{backlog,BL} -> list_opt(Opts, R#listen_opts { backlog = BL }, As);
binary -> list_add(mode, binary, R, Opts, As);
list -> list_add(mode, list, R, Opts, As);
- {tcp_module,_} -> list_opt(Opts, R, As);
- inet -> list_opt(Opts, R, As);
- inet6 -> list_opt(Opts, R, As);
{netns,NS} ->
BinNS = filename2binary(NS),
case prim_inet:is_sockopt_val(netns, BinNS) of
@@ -807,6 +829,19 @@ list_add(Name, Val, #listen_opts{} = R, Opts, As) ->
Error -> Error
end.
+tcp_module(Opts) ->
+ tcp_module_1(Opts, undefined).
+
+tcp_module(Opts, Addr) ->
+ Address = {undefined,Addr},
+ %% Address has to be a 2-tuple but the first element is ignored
+ tcp_module_1(Opts, Address).
+
+tcp_module_1(Opts, Address) ->
+ mod(
+ Opts, tcp_module, Address,
+ #{inet => inet_tcp, inet6 => inet6_tcp, local => local_tcp}).
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Available options for udp:open
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -818,12 +853,12 @@ udp_options() ->
high_msgq_watermark, low_msgq_watermark].
-udp_options(Opts, Family) ->
+udp_options(Opts, Mod) ->
case udp_opt(Opts, #udp_opts { }, udp_options()) of
{ok, R} ->
{ok, R#udp_opts {
opts = lists:reverse(R#udp_opts.opts),
- ifaddr = translate_ip(R#udp_opts.ifaddr, Family)
+ ifaddr = Mod:translate_ip(R#udp_opts.ifaddr)
}};
Error -> Error
end.
@@ -838,9 +873,6 @@ udp_opt([Opt | Opts], #udp_opts{} = R, As) ->
{fd,Fd} -> udp_opt(Opts, R#udp_opts { fd = Fd }, As);
binary -> udp_add(mode, binary, R, Opts, As);
list -> udp_add(mode, list, R, Opts, As);
- {udp_module,_} -> udp_opt(Opts, R, As);
- inet -> udp_opt(Opts, R, As);
- inet6 -> udp_opt(Opts, R, As);
{netns,NS} ->
BinNS = filename2binary(NS),
case prim_inet:is_sockopt_val(netns, BinNS) of
@@ -865,6 +897,11 @@ udp_add(Name, Val, #udp_opts{} = R, Opts, As) ->
Error -> Error
end.
+udp_module(Opts) ->
+ mod(
+ Opts, udp_module, undefined,
+ #{inet => inet_udp, inet6 => inet6_udp, local => local_udp}).
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Available options for sctp:open
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -921,9 +958,6 @@ sctp_opt([Opt|Opts], Mod, #sctp_opts{} = R, As) ->
sctp_opt(Opts, Mod, R#sctp_opts{type=Type}, As);
binary -> sctp_opt (Opts, Mod, R, As, mode, binary);
list -> sctp_opt (Opts, Mod, R, As, mode, list);
- {sctp_module,_} -> sctp_opt (Opts, Mod, R, As); % Done with
- inet -> sctp_opt (Opts, Mod, R, As); % Done with
- inet6 -> sctp_opt (Opts, Mod, R, As); % Done with
{netns,NS} ->
BinNS = filename2binary(NS),
case prim_inet:is_sockopt_val(netns, BinNS) of
@@ -965,6 +999,11 @@ sctp_opt_ifaddr(Opts, Mod, #sctp_opts{ifaddr=IfAddr}=R, As, Addr) ->
_ -> [IP,IfAddr]
end}, As).
+sctp_module(Opts) ->
+ mod(
+ Opts, sctp_module, undefined,
+ #{inet => inet_sctp, inet6 => inet6_sctp}).
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Util to check and insert option in option list
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1023,6 +1062,53 @@ translate_ip(any, inet6) -> {0,0,0,0,0,0,0,0};
translate_ip(loopback, inet6) -> {0,0,0,0,0,0,0,1};
translate_ip(IP, _) -> IP.
+mod(Opts, Tag, Address, Map) ->
+ mod(Opts, Tag, Address, Map, undefined, []).
+%%
+mod([{Tag, M}|Opts], Tag, Address, Map, Mod, Acc) ->
+ mod(Opts, Tag, Address, Map, Mod, Acc, M);
+mod([{T, _} = Opt|Opts], Tag, _Address, Map, Mod, Acc)
+ when T =:= ip; T =:= ifaddr->
+ mod(Opts, Tag, Opt, Map, Mod, [Opt|Acc]);
+mod([Family|Opts], Tag, Address, Map, Mod, Acc) when is_atom(Family) ->
+ case Map of
+ #{Family := M} ->
+ mod(Opts, Tag, Address, Map, Mod, Acc, M);
+ #{} ->
+ mod(Opts, Tag, Address, Map, Mod, [Family|Acc])
+ end;
+mod([Opt|Opts], Tag, Address, Map, Mod, Acc) ->
+ mod(Opts, Tag, Address, Map, Mod, [Opt|Acc]);
+mod([], Tag, Address, Map, undefined, Acc) ->
+ {case Address of
+ {_, {local, _}} ->
+ case Map of
+ #{local := Mod} ->
+ Mod;
+ #{} ->
+ inet_db:Tag()
+ end;
+ {_, IP} when tuple_size(IP) =:= 8 ->
+ #{inet := IPv4Mod} = Map,
+ %% Get the mod, but IPv6 address overrides default IPv4
+ case inet_db:Tag() of
+ IPv4Mod ->
+ #{inet6 := IPv6Mod} = Map,
+ IPv6Mod;
+ Mod ->
+ Mod
+ end;
+ _ ->
+ inet_db:Tag()
+ end, lists:reverse(Acc)};
+mod([], _Tag, _Address, _Map, Mod, Acc) ->
+ {Mod, lists:reverse(Acc)}.
+%%
+mod(Opts, Tag, Address, Map, undefined, Acc, M) ->
+ mod(Opts, Tag, Address, Map, M, Acc);
+mod(Opts, Tag, Address, Map, Mod, Acc, _M) ->
+ mod(Opts, Tag, Address, Map, Mod, Acc).
+
getaddrs_tm({A,B,C,D} = IP, Fam, _) ->
%% Only "syntactic" validation and check of family.
@@ -1230,7 +1316,17 @@ gethostbyaddr_tm_native(Addr, Timer, Opts) ->
end.
-spec open(Fd_or_OpenOpts :: integer() | list(),
- Addr :: ip_address(),
+ Addr ::
+ socket_address() |
+ {ip_address() | 'any' | 'loopback', % Unofficial
+ port_number()} |
+ {inet, % Unofficial
+ {ip4_address() | 'any' | 'loopback',
+ port_number()}} |
+ {inet6, % Unofficial
+ {ip6_address() | 'any' | 'loopback',
+ port_number()}} |
+ undefined, % Internal - no bind()
Port :: port_number(),
Opts :: [socket_setopt()],
Protocol :: socket_protocol(),
@@ -1249,13 +1345,12 @@ open(FdO, Addr, Port, Opts, Protocol, Family, Type, Module)
case prim_inet:open(Protocol, Family, Type, OpenOpts) of
{ok,S} ->
case prim_inet:setopts(S, Opts) of
+ ok when Addr =:= undefined ->
+ inet_db:register_socket(S, Module),
+ {ok,S};
ok ->
- case if is_list(Addr) ->
- bindx(S, Addr, Port);
- true ->
- prim_inet:bind(S, Addr, Port)
- end of
- {ok, _} ->
+ case bind(S, Addr, Port) of
+ {ok, _} ->
inet_db:register_socket(S, Module),
{ok,S};
Error ->
@@ -1273,6 +1368,11 @@ open(Fd, Addr, Port, Opts, Protocol, Family, Type, Module)
when is_integer(Fd) ->
fdopen(Fd, Addr, Port, Opts, Protocol, Family, Type, Module).
+bind(S, Addr, Port) when is_list(Addr) ->
+ bindx(S, Addr, Port);
+bind(S, Addr, Port) ->
+ prim_inet:bind(S, Addr, Port).
+
bindx(S, [Addr], Port0) ->
{IP, Port} = set_bindx_port(Addr, Port0),
prim_inet:bind(S, IP, Port);
@@ -1313,34 +1413,36 @@ fdopen(Fd, Opts, Protocol, Family, Type, Module) ->
fdopen(Fd, any, 0, Opts, Protocol, Family, Type, Module).
fdopen(Fd, Addr, Port, Opts, Protocol, Family, Type, Module) ->
- IsAnyAddr = (Addr == {0,0,0,0} orelse Addr == {0,0,0,0,0,0,0,0}
- orelse Addr == any),
- Bound = Port == 0 andalso IsAnyAddr,
+ Bound =
+ %% We do not do any binding if default port+addr options
+ %% were given, in order to keep backwards compatability
+ %% with pre Erlang/OTP 17
+ case Addr of
+ {0,0,0,0} when Port =:= 0 -> true;
+ {0,0,0,0,0,0,0,0} when Port =:= 0 -> true;
+ any when Port =:= 0 -> true;
+ _ -> false
+ end,
case prim_inet:fdopen(Protocol, Family, Type, Fd, Bound) of
{ok, S} ->
case prim_inet:setopts(S, Opts) of
+ ok
+ when Addr =:= undefined;
+ Bound ->
+ inet_db:register_socket(S, Module),
+ {ok, S};
ok ->
- case if
- Bound ->
- %% We do not do any binding if default
- %% port+addr options where given in order
- %% to keep backwards compatability with
- %% pre Erlang/TOP 17
- {ok, ok};
- is_list(Addr) ->
- bindx(S, Addr, Port);
- true ->
- prim_inet:bind(S, Addr, Port)
- end of
- {ok, _} ->
- inet_db:register_socket(S, Module),
- {ok, S};
- Error ->
- prim_inet:close(S),
- Error
+ case bind(S, Addr, Port) of
+ {ok, _} ->
+ inet_db:register_socket(S, Module),
+ {ok, S};
+ Error ->
+ prim_inet:close(S),
+ Error
end;
Error ->
- prim_inet:close(S), Error
+ prim_inet:close(S),
+ Error
end;
Error -> Error
end.
diff --git a/lib/kernel/src/inet6_sctp.erl b/lib/kernel/src/inet6_sctp.erl
index cc98bc0ccb..a5503f6f54 100644
--- a/lib/kernel/src/inet6_sctp.erl
+++ b/lib/kernel/src/inet6_sctp.erl
@@ -1,8 +1,8 @@
%%
%% %CopyrightBegin%
-%%
+%%
%% Copyright Ericsson AB 2007-2016. All Rights Reserved.
-%%
+%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
@@ -14,13 +14,12 @@
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
-%%
+%%
%% %CopyrightEnd%
%%
%% SCTP protocol contribution by Leonid Timochouk and Serge Aleynikov.
%% See also: $ERL_TOP/lib/kernel/AUTHORS
%%
-%%
-module(inet6_sctp).
%% This module provides functions for communicating with
@@ -31,6 +30,7 @@
-include("inet_sctp.hrl").
-include("inet_int.hrl").
+-define(PROTO, sctp).
-define(FAMILY, inet6).
-export([getserv/1,getaddr/1,getaddr/2,translate_ip/1]).
-export([open/1,close/1,listen/2,peeloff/2,connect/5]).
@@ -39,25 +39,19 @@
getserv(Port) when is_integer(Port) -> {ok, Port};
-getserv(Name) when is_atom(Name) ->
- inet:getservbyname(Name, sctp);
-getserv(_) ->
- {error,einval}.
-
-getaddr(Address) ->
- inet:getaddr(Address, ?FAMILY).
-getaddr(Address, Timer) ->
- inet:getaddr_tm(Address, ?FAMILY, Timer).
+getserv(Name) when is_atom(Name) -> inet:getservbyname(Name, ?PROTO);
+getserv(_) -> {error,einval}.
-translate_ip(IP) ->
- inet:translate_ip(IP, ?FAMILY).
+getaddr(Address) -> inet:getaddr(Address, ?FAMILY).
+getaddr(Address, Timer) -> inet:getaddr_tm(Address, ?FAMILY, Timer).
+translate_ip(IP) -> inet:translate_ip(IP, ?FAMILY).
open(Opts) ->
case inet:sctp_options(Opts, ?MODULE) of
{ok,#sctp_opts{fd=Fd,ifaddr=Addr,port=Port,type=Type,opts=SOs}} ->
- inet:open(Fd, Addr, Port, SOs, sctp, ?FAMILY, Type, ?MODULE);
+ inet:open(Fd, Addr, Port, SOs, ?PROTO, ?FAMILY, Type, ?MODULE);
Error -> Error
end.
diff --git a/lib/kernel/src/inet6_tcp.erl b/lib/kernel/src/inet6_tcp.erl
index 3dfe5dfc86..a0d5d3df70 100644
--- a/lib/kernel/src/inet6_tcp.erl
+++ b/lib/kernel/src/inet6_tcp.erl
@@ -25,13 +25,18 @@
-export([controlling_process/2]).
-export([fdopen/2]).
--export([family/0, mask/2, parse_address/1]).
+-export([family/0, mask/2, parse_address/1]). % inet_tcp_dist
-export([getserv/1, getaddr/1, getaddr/2, getaddrs/1, getaddrs/2]).
+-export([translate_ip/1]).
-include("inet_int.hrl").
+-define(FAMILY, inet6).
+-define(PROTO, tcp).
+-define(TYPE, stream).
+
%% my address family
-family() -> inet6.
+family() -> ?FAMILY.
%% Apply netmask on address
mask({M1,M2,M3,M4,M5,M6,M7,M8}, {IP1,IP2,IP3,IP4,IP5,IP6,IP7,IP8}) ->
@@ -50,15 +55,18 @@ parse_address(Host) ->
%% inet_tcp port lookup
getserv(Port) when is_integer(Port) -> {ok, Port};
-getserv(Name) when is_atom(Name) -> inet:getservbyname(Name,tcp).
+getserv(Name) when is_atom(Name) -> inet:getservbyname(Name, ?PROTO).
%% inet_tcp address lookup
-getaddr(Address) -> inet:getaddr(Address, inet6).
-getaddr(Address,Timer) -> inet:getaddr_tm(Address, inet6, Timer).
+getaddr(Address) -> inet:getaddr(Address, ?FAMILY).
+getaddr(Address, Timer) -> inet:getaddr_tm(Address, ?FAMILY, Timer).
%% inet_tcp address lookup
-getaddrs(Address) -> inet:getaddrs(Address, inet6).
-getaddrs(Address,Timer) -> inet:getaddrs_tm(Address,inet6,Timer).
+getaddrs(Address) -> inet:getaddrs(Address, ?FAMILY).
+getaddrs(Address, Timer) -> inet:getaddrs_tm(Address, ?FAMILY, Timer).
+
+%% inet_udp special this side addresses
+translate_ip(IP) -> inet:translate_ip(IP, ?FAMILY).
%%
%% Send data on a socket
@@ -73,11 +81,6 @@ recv(Socket, Length) -> prim_inet:recv(Socket, Length).
recv(Socket, Length, Timeout) -> prim_inet:recv(Socket, Length, Timeout).
unrecv(Socket, Data) -> prim_inet:unrecv(Socket, Data).
-%%
-%% Close a socket (async)
-%%
-close(Socket) ->
- inet:tcp_close(Socket).
%%
%% Shutdown one end of a socket
@@ -86,6 +89,12 @@ shutdown(Socket, How) ->
prim_inet:shutdown(Socket, How).
%%
+%% Close a socket (async)
+%%
+close(Socket) ->
+ inet:tcp_close(Socket).
+
+%%
%% Set controlling process
%% FIXME: move messages to new owner!!!
%%
@@ -100,24 +109,28 @@ connect(Address, Port, Opts) ->
connect(Address, Port, Opts, infinity) ->
do_connect(Address, Port, Opts, infinity);
-connect(Address, Port, Opts, Timeout) when is_integer(Timeout),
- Timeout >= 0 ->
+connect(Address, Port, Opts, Timeout)
+ when is_integer(Timeout), Timeout >= 0 ->
do_connect(Address, Port, Opts, Timeout).
-do_connect(Addr = {A,B,C,D,E,F,G,H}, Port, Opts, Time) when
- ?ip6(A,B,C,D,E,F,G,H), ?port(Port) ->
- case inet:connect_options(Opts, inet6) of
+do_connect(Addr = {A,B,C,D,E,F,G,H}, Port, Opts, Time)
+ when ?ip6(A,B,C,D,E,F,G,H), ?port(Port) ->
+ case inet:connect_options(Opts, ?MODULE) of
{error, Reason} -> exit(Reason);
- {ok, #connect_opts{fd=Fd,
- ifaddr=BAddr={Ab,Bb,Cb,Db,Eb,Fb,Gb,Hb},
- port=BPort,
- opts=SockOpts}}
+ {ok,
+ #connect_opts{
+ fd = Fd,
+ ifaddr = BAddr = {Ab,Bb,Cb,Db,Eb,Fb,Gb,Hb},
+ port = BPort,
+ opts = SockOpts}}
when ?ip6(Ab,Bb,Cb,Db,Eb,Fb,Gb,Hb), ?port(BPort) ->
- case inet:open(Fd,BAddr,BPort,SockOpts,tcp,inet6,stream,?MODULE) of
+ case inet:open(
+ Fd, BAddr, BPort, SockOpts,
+ ?PROTO, ?FAMILY, ?TYPE, ?MODULE) of
{ok, S} ->
case prim_inet:connect(S, Addr, Port, Time) of
- ok -> {ok,S};
- Error -> prim_inet:close(S), Error
+ ok -> {ok,S};
+ Error -> prim_inet:close(S), Error
end;
Error -> Error
end;
@@ -128,14 +141,18 @@ do_connect(Addr = {A,B,C,D,E,F,G,H}, Port, Opts, Time) when
%% Listen
%%
listen(Port, Opts) ->
- case inet:listen_options([{port,Port} | Opts], inet6) of
+ case inet:listen_options([{port,Port} | Opts], ?MODULE) of
{error, Reason} -> exit(Reason);
- {ok, #listen_opts{fd=Fd,
- ifaddr=BAddr={A,B,C,D,E,F,G,H},
- port=BPort,
- opts=SockOpts}=R}
+ {ok,
+ #listen_opts{
+ fd = Fd,
+ ifaddr = BAddr = {A,B,C,D,E,F,G,H},
+ port = BPort,
+ opts = SockOpts} = R}
when ?ip6(A,B,C,D,E,F,G,H), ?port(BPort) ->
- case inet:open(Fd,BAddr,BPort,SockOpts,tcp,inet6,stream,?MODULE) of
+ case inet:open(
+ Fd, BAddr, BPort, SockOpts,
+ ?PROTO, ?FAMILY, ?TYPE, ?MODULE) of
{ok, S} ->
case prim_inet:listen(S, R#listen_opts.backlog) of
ok -> {ok, S};
@@ -156,18 +173,17 @@ accept(L) ->
{ok,S};
Error -> Error
end.
-
-accept(L,Timeout) ->
- case prim_inet:accept(L,Timeout) of
+
+accept(L, Timeout) ->
+ case prim_inet:accept(L, Timeout) of
{ok, S} ->
inet_db:register_socket(S, ?MODULE),
{ok,S};
Error -> Error
end.
-
+
%%
%% Create a port/socket from a file descriptor
%%
fdopen(Fd, Opts) ->
- inet:fdopen(Fd, Opts, tcp, inet6, stream, ?MODULE).
-
+ inet:fdopen(Fd, Opts, ?PROTO, ?FAMILY, ?TYPE, ?MODULE).
diff --git a/lib/kernel/src/inet6_tcp_dist.erl b/lib/kernel/src/inet6_tcp_dist.erl
index 3aa61973af..9b6c2745d5 100644
--- a/lib/kernel/src/inet6_tcp_dist.erl
+++ b/lib/kernel/src/inet6_tcp_dist.erl
@@ -24,6 +24,7 @@
-export([listen/1, accept/1, accept_connection/5,
setup/5, close/1, select/1, is_node_name/1]).
+-export([setopts/2, getopts/2]).
%% ------------------------------------------------------------
%% Select this protocol based on node name
@@ -72,3 +73,9 @@ close(Socket) ->
is_node_name(Node) when is_atom(Node) ->
inet_tcp_dist:is_node_name(Node).
+
+setopts(S, Opts) ->
+ inet_tcp_dist:setopts(S, Opts).
+
+getopts(S, Opts) ->
+ inet_tcp_dist:getopts(S, Opts).
diff --git a/lib/kernel/src/inet6_udp.erl b/lib/kernel/src/inet6_udp.erl
index eb6945f60a..71db0357cd 100644
--- a/lib/kernel/src/inet6_udp.erl
+++ b/lib/kernel/src/inet6_udp.erl
@@ -24,29 +24,44 @@
-export([controlling_process/2]).
-export([fdopen/2]).
--export([getserv/1, getaddr/1, getaddr/2]).
+-export([getserv/1, getaddr/1, getaddr/2, translate_ip/1]).
-include("inet_int.hrl").
+-define(FAMILY, inet6).
+-define(PROTO, udp).
+-define(TYPE, dgram).
+
+
%% inet_udp port lookup
getserv(Port) when is_integer(Port) -> {ok, Port};
-getserv(Name) when is_atom(Name) -> inet:getservbyname(Name,udp).
+getserv(Name) when is_atom(Name) -> inet:getservbyname(Name, ?PROTO).
%% inet_udp address lookup
-getaddr(Address) -> inet:getaddr(Address, inet6).
-getaddr(Address,Timer) -> inet:getaddr(Address, inet6, Timer).
+getaddr(Address) -> inet:getaddr(Address, ?FAMILY).
+getaddr(Address, Timer) -> inet:getaddr(Address, ?FAMILY, Timer).
+
+%% inet_udp special this side addresses
+translate_ip(IP) -> inet:translate_ip(IP, ?FAMILY).
+-spec open(_) -> {ok, inet:socket()} | {error, atom()}.
open(Port) -> open(Port, []).
+-spec open(_, _) -> {ok, inet:socket()} | {error, atom()}.
open(Port, Opts) ->
- case inet:udp_options([{port,Port} | Opts], inet6) of
+ case inet:udp_options(
+ [{port,Port} | Opts],
+ ?MODULE) of
{error, Reason} -> exit(Reason);
- {ok, #udp_opts{fd=Fd,
- ifaddr=BAddr={A,B,C,D,E,F,G,H},
- port=BPort,
- opts=SockOpts}}
+ {ok,
+ #udp_opts{
+ fd = Fd,
+ ifaddr = BAddr = {A,B,C,D,E,F,G,H},
+ port = BPort,
+ opts = SockOpts}}
when ?ip6(A,B,C,D,E,F,G,H), ?port(BPort) ->
- inet:open(Fd,BAddr,BPort,SockOpts,udp,inet6,dgram,?MODULE);
+ inet:open(
+ Fd, BAddr, BPort, SockOpts, ?PROTO, ?FAMILY, ?TYPE, ?MODULE);
{ok, _} -> exit(badarg)
end.
@@ -61,12 +76,13 @@ connect(S, Addr = {A,B,C,D,E,F,G,H}, P)
when ?ip6(A,B,C,D,E,F,G,H), ?port(P) ->
prim_inet:connect(S, Addr, P).
-recv(S,Len) ->
+recv(S, Len) ->
prim_inet:recvfrom(S, Len).
-recv(S,Len,Time) ->
+recv(S, Len, Time) ->
prim_inet:recvfrom(S, Len, Time).
+-spec close(inet:socket()) -> ok.
close(S) ->
inet:udp_close(S).
@@ -85,4 +101,4 @@ controlling_process(Socket, NewOwner) ->
%% Create a port/socket from a file descriptor
%%
fdopen(Fd, Opts) ->
- inet:fdopen(Fd, Opts, udp, inet6, dgram, ?MODULE).
+ inet:fdopen(Fd, Opts, ?PROTO, ?FAMILY, ?TYPE, ?MODULE).
diff --git a/lib/kernel/src/inet_int.hrl b/lib/kernel/src/inet_int.hrl
index 65d78b66c9..c8a8962e78 100644
--- a/lib/kernel/src/inet_int.hrl
+++ b/lib/kernel/src/inet_int.hrl
@@ -25,10 +25,13 @@
%%
%% family codes to open
+-define(INET_AF_UNSPEC, 0).
-define(INET_AF_INET, 1).
-define(INET_AF_INET6, 2).
-define(INET_AF_ANY, 3). % Fake for ANY in any address family
-define(INET_AF_LOOPBACK, 4). % Fake for LOOPBACK in any address family
+-define(INET_AF_LOCAL, 5). % For Unix Domain address family
+-define(INET_AF_UNDEFINED, 6). % For any unknown address family
%% type codes to open and gettype - INET_REQ_GETTYPE
-define(INET_TYPE_STREAM, 1).
@@ -378,7 +381,7 @@
{
ifaddr = any, %% bind to interface address
port = 0, %% bind to port (default is dynamic port)
- fd = -1, %% fd >= 0 => already bound
+ fd = -1, %% fd >= 0 => already bound
opts = [] %% [{active,true}] added in inet:connect_options
}).
diff --git a/lib/kernel/src/inet_sctp.erl b/lib/kernel/src/inet_sctp.erl
index 60677cb7de..8569cacb29 100644
--- a/lib/kernel/src/inet_sctp.erl
+++ b/lib/kernel/src/inet_sctp.erl
@@ -30,6 +30,7 @@
-include("inet_sctp.hrl").
-include("inet_int.hrl").
+-define(PROTO, sctp).
-define(FAMILY, inet).
-export([getserv/1,getaddr/1,getaddr/2,translate_ip/1]).
-export([open/1,close/1,listen/2,peeloff/2,connect/5]).
@@ -38,25 +39,19 @@
getserv(Port) when is_integer(Port) -> {ok, Port};
-getserv(Name) when is_atom(Name) ->
- inet:getservbyname(Name, sctp);
-getserv(_) ->
- {error,einval}.
+getserv(Name) when is_atom(Name) -> inet:getservbyname(Name, ?PROTO);
+getserv(_) -> {error,einval}.
-getaddr(Address) ->
- inet:getaddr(Address, ?FAMILY).
-getaddr(Address, Timer) ->
- inet:getaddr_tm(Address, ?FAMILY, Timer).
-
-translate_ip(IP) ->
- inet:translate_ip(IP, ?FAMILY).
+getaddr(Address) -> inet:getaddr(Address, ?FAMILY).
+getaddr(Address, Timer) -> inet:getaddr_tm(Address, ?FAMILY, Timer).
+translate_ip(IP) -> inet:translate_ip(IP, ?FAMILY).
open(Opts) ->
case inet:sctp_options(Opts, ?MODULE) of
{ok,#sctp_opts{fd=Fd,ifaddr=Addr,port=Port,type=Type,opts=SOs}} ->
- inet:open(Fd, Addr, Port, SOs, sctp, ?FAMILY, Type, ?MODULE);
+ inet:open(Fd, Addr, Port, SOs, ?PROTO, ?FAMILY, Type, ?MODULE);
Error -> Error
end.
diff --git a/lib/kernel/src/inet_tcp.erl b/lib/kernel/src/inet_tcp.erl
index ee885af3b0..dac6b3119d 100644
--- a/lib/kernel/src/inet_tcp.erl
+++ b/lib/kernel/src/inet_tcp.erl
@@ -27,13 +27,18 @@
-export([controlling_process/2]).
-export([fdopen/2]).
--export([family/0, mask/2, parse_address/1]).
+-export([family/0, mask/2, parse_address/1]). % inet_tcp_dist
-export([getserv/1, getaddr/1, getaddr/2, getaddrs/1, getaddrs/2]).
+-export([translate_ip/1]).
-include("inet_int.hrl").
+-define(FAMILY, inet).
+-define(PROTO, tcp).
+-define(TYPE, stream).
+
%% my address family
-family() -> inet.
+family() -> ?FAMILY.
%% Apply netmask on address
mask({M1,M2,M3,M4}, {IP1,IP2,IP3,IP4}) ->
@@ -48,16 +53,19 @@ parse_address(Host) ->
%% inet_tcp port lookup
getserv(Port) when is_integer(Port) -> {ok, Port};
-getserv(Name) when is_atom(Name) -> inet:getservbyname(Name,tcp).
+getserv(Name) when is_atom(Name) -> inet:getservbyname(Name, ?PROTO).
%% inet_tcp address lookup
-getaddr(Address) -> inet:getaddr(Address, inet).
-getaddr(Address,Timer) -> inet:getaddr_tm(Address, inet, Timer).
+getaddr(Address) -> inet:getaddr(Address, ?FAMILY).
+getaddr(Address, Timer) -> inet:getaddr_tm(Address, ?FAMILY, Timer).
%% inet_tcp address lookup
-getaddrs(Address) -> inet:getaddrs(Address, inet).
-getaddrs(Address,Timer) -> inet:getaddrs_tm(Address,inet,Timer).
-
+getaddrs(Address) -> inet:getaddrs(Address, ?FAMILY).
+getaddrs(Address, Timer) -> inet:getaddrs_tm(Address, ?FAMILY, Timer).
+
+%% inet_udp special this side addresses
+translate_ip(IP) -> inet:translate_ip(IP, ?FAMILY).
+
%%
%% Send data on a socket
%%
@@ -77,7 +85,7 @@ unrecv(Socket, Data) -> prim_inet:unrecv(Socket, Data).
%%
shutdown(Socket, How) ->
prim_inet:shutdown(Socket, How).
-
+
%%
%% Close a socket (async)
%%
@@ -88,7 +96,7 @@ close(Socket) ->
%% Set controlling process
%%
controlling_process(Socket, NewOwner) ->
- inet:tcp_controlling_process(Socket, NewOwner).
+ inet:tcp_controlling_process(Socket, NewOwner).
%%
%% Connect
@@ -98,23 +106,28 @@ connect(Address, Port, Opts) ->
connect(Address, Port, Opts, infinity) ->
do_connect(Address, Port, Opts, infinity);
-connect(Address, Port, Opts, Timeout) when is_integer(Timeout),
- Timeout >= 0 ->
+connect(Address, Port, Opts, Timeout)
+ when is_integer(Timeout), Timeout >= 0 ->
do_connect(Address, Port, Opts, Timeout).
-do_connect({A,B,C,D}, Port, Opts, Time) when ?ip(A,B,C,D), ?port(Port) ->
- case inet:connect_options(Opts, inet) of
+do_connect(Addr = {A,B,C,D}, Port, Opts, Time)
+ when ?ip(A,B,C,D), ?port(Port) ->
+ case inet:connect_options(Opts, ?MODULE) of
{error, Reason} -> exit(Reason);
- {ok, #connect_opts{fd=Fd,
- ifaddr=BAddr={Ab,Bb,Cb,Db},
- port=BPort,
- opts=SockOpts}}
+ {ok,
+ #connect_opts{
+ fd = Fd,
+ ifaddr = BAddr = {Ab,Bb,Cb,Db},
+ port = BPort,
+ opts = SockOpts}}
when ?ip(Ab,Bb,Cb,Db), ?port(BPort) ->
- case inet:open(Fd,BAddr,BPort,SockOpts,tcp,inet,stream,?MODULE) of
+ case inet:open(
+ Fd, BAddr, BPort, SockOpts,
+ ?PROTO, ?FAMILY, ?TYPE, ?MODULE) of
{ok, S} ->
- case prim_inet:connect(S, {A,B,C,D}, Port, Time) of
- ok -> {ok,S};
- Error -> prim_inet:close(S), Error
+ case prim_inet:connect(S, Addr, Port, Time) of
+ ok -> {ok,S};
+ Error -> prim_inet:close(S), Error
end;
Error -> Error
end;
@@ -125,14 +138,18 @@ do_connect({A,B,C,D}, Port, Opts, Time) when ?ip(A,B,C,D), ?port(Port) ->
%% Listen
%%
listen(Port, Opts) ->
- case inet:listen_options([{port,Port} | Opts], inet) of
- {error,Reason} -> exit(Reason);
- {ok, #listen_opts{fd=Fd,
- ifaddr=BAddr={A,B,C,D},
- port=BPort,
- opts=SockOpts}=R}
+ case inet:listen_options([{port,Port} | Opts], ?MODULE) of
+ {error, Reason} -> exit(Reason);
+ {ok,
+ #listen_opts{
+ fd = Fd,
+ ifaddr = BAddr = {A,B,C,D},
+ port = BPort,
+ opts = SockOpts} = R}
when ?ip(A,B,C,D), ?port(BPort) ->
- case inet:open(Fd,BAddr,BPort,SockOpts,tcp,inet,stream,?MODULE) of
+ case inet:open(
+ Fd, BAddr, BPort, SockOpts,
+ ?PROTO, ?FAMILY, ?TYPE, ?MODULE) of
{ok, S} ->
case prim_inet:listen(S, R#listen_opts.backlog) of
ok -> {ok, S};
@@ -146,23 +163,24 @@ listen(Port, Opts) ->
%%
%% Accept
%%
-accept(L) ->
+accept(L) ->
case prim_inet:accept(L) of
{ok, S} ->
inet_db:register_socket(S, ?MODULE),
{ok,S};
Error -> Error
end.
-
-accept(L,Timeout) ->
- case prim_inet:accept(L,Timeout) of
+
+accept(L, Timeout) ->
+ case prim_inet:accept(L, Timeout) of
{ok, S} ->
inet_db:register_socket(S, ?MODULE),
{ok,S};
Error -> Error
end.
+
%%
%% Create a port/socket from a file descriptor
%%
fdopen(Fd, Opts) ->
- inet:fdopen(Fd, Opts, tcp, inet, stream, ?MODULE).
+ inet:fdopen(Fd, Opts, ?PROTO, ?FAMILY, ?TYPE, ?MODULE).
diff --git a/lib/kernel/src/inet_tcp_dist.erl b/lib/kernel/src/inet_tcp_dist.erl
index 64b28bb49b..3084bd599a 100644
--- a/lib/kernel/src/inet_tcp_dist.erl
+++ b/lib/kernel/src/inet_tcp_dist.erl
@@ -24,13 +24,16 @@
-export([listen/1, accept/1, accept_connection/5,
setup/5, close/1, select/1, is_node_name/1]).
+%% Optional
+-export([setopts/2, getopts/2]).
+
%% Generalized dist API
-export([gen_listen/2, gen_accept/2, gen_accept_connection/6,
gen_setup/6, gen_select/2]).
%% internal exports
--export([accept_loop/3,do_accept/7,do_setup/7,getstat/1]).
+-export([accept_loop/3,do_accept/7,do_setup/7,getstat/1,tick/2]).
-import(error_logger,[error_msg/2]).
@@ -73,7 +76,8 @@ gen_listen(Driver, Name) ->
{ok, Socket} ->
TcpAddress = get_tcp_address(Driver, Socket),
{_,Port} = TcpAddress#net_address.address,
- case erl_epmd:register_node(Name, Port) of
+ ErlEpmd = net_kernel:epmd_module(),
+ case ErlEpmd:register_node(Name, Port, Driver) of
{ok, Creation} ->
{ok, {Socket, TcpAddress, Creation}};
Error ->
@@ -214,8 +218,10 @@ do_accept(Driver, Kernel, AcceptPid, Socket, MyNode, Allowed, SetupTime) ->
inet:getll(S)
end,
f_address = fun(S, Node) -> get_remote_id(Driver, S, Node) end,
- mf_tick = fun(S) -> tick(Driver, S) end,
- mf_getstat = fun ?MODULE:getstat/1
+ mf_tick = fun(S) -> ?MODULE:tick(Driver, S) end,
+ mf_getstat = fun ?MODULE:getstat/1,
+ mf_setopts = fun ?MODULE:setopts/2,
+ mf_getopts = fun ?MODULE:getopts/2
},
dist_util:handshake_other_started(HSData);
{false,IP} ->
@@ -280,7 +286,8 @@ do_setup(Driver, Kernel, Node, Type, MyNode, LongOrShortNames, SetupTime) ->
case inet:getaddr(Address, AddressFamily) of
{ok, Ip} ->
Timer = dist_util:start_timer(SetupTime),
- case erl_epmd:port_please(Name, Ip) of
+ ErlEpmd = net_kernel:epmd_module(),
+ case ErlEpmd:port_please(Name, Ip) of
{port, TcpPort, Version} ->
?trace("port_please(~p) -> version ~p~n",
[Node,Version]),
@@ -318,6 +325,7 @@ do_setup(Driver, Kernel, Node, Type, MyNode, LongOrShortNames, SetupTime) ->
{packet, 4},
nodelay()])
end,
+
f_getll = fun inet:getll/1,
f_address =
fun(_,_) ->
@@ -327,9 +335,11 @@ do_setup(Driver, Kernel, Node, Type, MyNode, LongOrShortNames, SetupTime) ->
protocol = tcp,
family = AddressFamily}
end,
- mf_tick = fun(S) -> tick(Driver, S) end,
+ mf_tick = fun(S) -> ?MODULE:tick(Driver, S) end,
mf_getstat = fun ?MODULE:getstat/1,
- request_type = Type
+ request_type = Type,
+ mf_setopts = fun ?MODULE:setopts/2,
+ mf_getopts = fun ?MODULE:getopts/2
},
dist_util:handshake_we_started(HSData);
_ ->
@@ -490,3 +500,12 @@ split_stat([], R, W, P) ->
{ok, R, W, P}.
+setopts(S, Opts) ->
+ case [Opt || {K,_}=Opt <- Opts,
+ K =:= active orelse K =:= deliver orelse K =:= packet] of
+ [] -> inet:setopts(S,Opts);
+ Opts1 -> {error, {badopts,Opts1}}
+ end.
+
+getopts(S, Opts) ->
+ inet:getopts(S, Opts).
diff --git a/lib/kernel/src/inet_udp.erl b/lib/kernel/src/inet_udp.erl
index 7e8d9cdb72..8a8aa8ecca 100644
--- a/lib/kernel/src/inet_udp.erl
+++ b/lib/kernel/src/inet_udp.erl
@@ -24,21 +24,26 @@
-export([controlling_process/2]).
-export([fdopen/2]).
--export([getserv/1, getaddr/1, getaddr/2]).
+-export([getserv/1, getaddr/1, getaddr/2, translate_ip/1]).
-include("inet_int.hrl").
+-define(FAMILY, inet).
+-define(PROTO, udp).
+-define(TYPE, dgram).
-define(RECBUF, (8*1024)).
-
%% inet_udp port lookup
getserv(Port) when is_integer(Port) -> {ok, Port};
-getserv(Name) when is_atom(Name) -> inet:getservbyname(Name,udp).
+getserv(Name) when is_atom(Name) -> inet:getservbyname(Name, ?PROTO).
%% inet_udp address lookup
-getaddr(Address) -> inet:getaddr(Address, inet).
-getaddr(Address,Timer) -> inet:getaddr_tm(Address, inet, Timer).
+getaddr(Address) -> inet:getaddr(Address, ?FAMILY).
+getaddr(Address, Timer) -> inet:getaddr(Address, ?FAMILY, Timer).
+
+%% inet_udp special this side addresses
+translate_ip(IP) -> inet:translate_ip(IP, ?FAMILY).
-spec open(_) -> {ok, inet:socket()} | {error, atom()}.
open(Port) -> open(Port, []).
@@ -47,33 +52,38 @@ open(Port) -> open(Port, []).
open(Port, Opts) ->
case inet:udp_options(
[{port,Port}, {recbuf, ?RECBUF} | Opts],
- inet) of
+ ?MODULE) of
{error, Reason} -> exit(Reason);
- {ok, #udp_opts{fd=Fd,
- ifaddr=BAddr={A,B,C,D},
- port=BPort,
- opts=SockOpts}} when ?ip(A,B,C,D), ?port(BPort) ->
- inet:open(Fd,BAddr,BPort,SockOpts,udp,inet,dgram,?MODULE);
+ {ok,
+ #udp_opts{
+ fd = Fd,
+ ifaddr = BAddr = {A,B,C,D},
+ port = BPort,
+ opts = SockOpts}}
+ when ?ip(A,B,C,D), ?port(BPort) ->
+ inet:open(
+ Fd, BAddr, BPort, SockOpts, ?PROTO, ?FAMILY, ?TYPE, ?MODULE);
{ok, _} -> exit(badarg)
end.
-send(S,{A,B,C,D},P,Data) when ?ip(A,B,C,D), ?port(P) ->
- prim_inet:sendto(S, {A,B,C,D}, P, Data).
+send(S, {A,B,C,D} = Addr, P, Data)
+ when ?ip(A,B,C,D), ?port(P) ->
+ prim_inet:sendto(S, Addr, P, Data).
send(S, Data) ->
prim_inet:sendto(S, {0,0,0,0}, 0, Data).
-connect(S, {A,B,C,D}, P) when ?ip(A,B,C,D), ?port(P) ->
- prim_inet:connect(S, {A,B,C,D}, P).
+connect(S, Addr = {A,B,C,D}, P)
+ when ?ip(A,B,C,D), ?port(P) ->
+ prim_inet:connect(S, Addr, P).
-recv(S,Len) ->
+recv(S, Len) ->
prim_inet:recvfrom(S, Len).
-recv(S,Len,Time) ->
+recv(S, Len, Time) ->
prim_inet:recvfrom(S, Len, Time).
-spec close(inet:socket()) -> ok.
-
close(S) ->
inet:udp_close(S).
@@ -92,9 +102,9 @@ controlling_process(Socket, NewOwner) ->
%% Create a port/socket from a file descriptor
%%
fdopen(Fd, Opts) ->
- inet:fdopen(Fd,
- optuniquify([{recbuf, ?RECBUF} | Opts]),
- udp, inet, dgram, ?MODULE).
+ inet:fdopen(
+ Fd, optuniquify([{recbuf, ?RECBUF} | Opts]),
+ ?PROTO, ?FAMILY, ?TYPE, ?MODULE).
%% Remove all duplicate options from an option list.
diff --git a/lib/kernel/src/kernel.app.src b/lib/kernel/src/kernel.app.src
index 15e0ec02a9..56d1699656 100644
--- a/lib/kernel/src/kernel.app.src
+++ b/lib/kernel/src/kernel.app.src
@@ -55,6 +55,8 @@
inet_tcp_dist,
kernel,
kernel_config,
+ local_tcp,
+ local_udp,
net,
net_adm,
net_kernel,
@@ -116,6 +118,6 @@
{applications, []},
{env, [{error_logger, tty}]},
{mod, {kernel, []}},
- {runtime_dependencies, ["erts-8.0", "stdlib-2.6", "sasl-2.6"]}
+ {runtime_dependencies, ["erts-8.0", "stdlib-3.0", "sasl-3.0"]}
]
}.
diff --git a/lib/kernel/src/local_tcp.erl b/lib/kernel/src/local_tcp.erl
new file mode 100644
index 0000000000..90e0fa2162
--- /dev/null
+++ b/lib/kernel/src/local_tcp.erl
@@ -0,0 +1,178 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(local_tcp).
+
+%% Socket server for TCP/IP
+
+-export([connect/3, connect/4, listen/2, accept/1, accept/2, close/1]).
+-export([send/2, send/3, recv/2, recv/3, unrecv/2]).
+-export([shutdown/2]).
+-export([controlling_process/2]).
+-export([fdopen/2]).
+
+-export([getserv/1, getaddr/1, getaddr/2, getaddrs/1, getaddrs/2]).
+-export([translate_ip/1]).
+
+-include("inet_int.hrl").
+
+-define(FAMILY, local).
+-define(PROTO, tcp).
+-define(TYPE, stream).
+
+%% port lookup
+getserv(0) -> {ok, 0}.
+
+%% no address lookup
+getaddr({?FAMILY, _} = Address) -> {ok, Address}.
+getaddr({?FAMILY, _} = Address, _Timer) -> {ok, Address}.
+
+%% no address lookup
+getaddrs({?FAMILY, _} = Address) -> {ok, [Address]}.
+getaddrs({?FAMILY, _} = Address, _Timer) -> {ok, [Address]}.
+
+%% special this side addresses
+translate_ip(IP) -> IP.
+
+%%
+%% Send data on a socket
+%%
+send(Socket, Packet, Opts) -> prim_inet:send(Socket, Packet, Opts).
+send(Socket, Packet) -> prim_inet:send(Socket, Packet, []).
+
+%%
+%% Receive data from a socket (inactive only)
+%%
+recv(Socket, Length) -> prim_inet:recv(Socket, Length).
+recv(Socket, Length, Timeout) -> prim_inet:recv(Socket, Length, Timeout).
+
+unrecv(Socket, Data) -> prim_inet:unrecv(Socket, Data).
+
+%%
+%% Shutdown one end of a socket
+%%
+shutdown(Socket, How) ->
+ prim_inet:shutdown(Socket, How).
+
+%%
+%% Close a socket (async)
+%%
+close(Socket) ->
+ inet:tcp_close(Socket).
+
+%%
+%% Set controlling process
+%% FIXME: move messages to new owner!!!
+%%
+controlling_process(Socket, NewOwner) ->
+ inet:tcp_controlling_process(Socket, NewOwner).
+
+%%
+%% Connect
+%%
+connect(Address, Port, Opts) ->
+ do_connect(Address, Port, Opts, infinity).
+%%
+connect(Address, Port, Opts, infinity) ->
+ do_connect(Address, Port, Opts, infinity);
+connect(Address, Port, Opts, Timeout)
+ when is_integer(Timeout), Timeout >= 0 ->
+ do_connect(Address, Port, Opts, Timeout).
+
+do_connect(Addr = {?FAMILY, _}, 0, Opts, Time) ->
+ case inet:connect_options(Opts, ?MODULE) of
+ {error, Reason} -> exit(Reason);
+ {ok,
+ #connect_opts{
+ fd = Fd,
+ ifaddr = BAddr,
+ port = 0,
+ opts = SockOpts}}
+ when tuple_size(BAddr) =:= 2, element(1, BAddr) =:= ?FAMILY;
+ BAddr =:= any ->
+ case inet:open(
+ Fd,
+ case BAddr of
+ any ->
+ undefined;
+ _ ->
+ BAddr
+ end,
+ 0, SockOpts, ?PROTO, ?FAMILY, ?TYPE, ?MODULE) of
+ {ok, S} ->
+ case prim_inet:connect(S, Addr, 0, Time) of
+ ok -> {ok,S};
+ Error -> prim_inet:close(S), Error
+ end;
+ Error -> Error
+ end;
+ {ok, _} -> exit(badarg)
+ end.
+
+%%
+%% Listen
+%%
+listen(0, Opts) ->
+ case inet:listen_options([{port,0} | Opts], ?MODULE) of
+ {error, Reason} -> exit(Reason);
+ {ok,
+ #listen_opts{
+ fd = Fd,
+ ifaddr = BAddr,
+ port = 0,
+ opts = SockOpts} = R}
+ when tuple_size(BAddr) =:= 2, element(1, BAddr) =:= ?FAMILY;
+ BAddr =:= any ->
+ case inet:open(
+ Fd, BAddr, 0, SockOpts,
+ ?PROTO, ?FAMILY, ?TYPE, ?MODULE) of
+ {ok, S} ->
+ case prim_inet:listen(S, R#listen_opts.backlog) of
+ ok -> {ok, S};
+ Error -> prim_inet:close(S), Error
+ end;
+ Error -> Error
+ end;
+ {ok, _} -> exit(badarg)
+ end.
+
+%%
+%% Accept
+%%
+accept(L) ->
+ case prim_inet:accept(L) of
+ {ok, S} ->
+ inet_db:register_socket(S, ?MODULE),
+ {ok,S};
+ Error -> Error
+ end.
+%%
+accept(L, Timeout) ->
+ case prim_inet:accept(L, Timeout) of
+ {ok, S} ->
+ inet_db:register_socket(S, ?MODULE),
+ {ok,S};
+ Error -> Error
+ end.
+
+%%
+%% Create a port/socket from a file descriptor
+%%
+fdopen(Fd, Opts) ->
+ inet:open(Fd, undefined, 0, Opts, ?PROTO, ?FAMILY, ?TYPE, ?MODULE).
diff --git a/lib/kernel/src/local_udp.erl b/lib/kernel/src/local_udp.erl
new file mode 100644
index 0000000000..481a8c4910
--- /dev/null
+++ b/lib/kernel/src/local_udp.erl
@@ -0,0 +1,106 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(local_udp).
+
+-export([open/1, open/2, close/1]).
+-export([send/2, send/4, recv/2, recv/3, connect/3]).
+-export([controlling_process/2]).
+-export([fdopen/2]).
+
+-export([getserv/1, getaddr/1, getaddr/2, translate_ip/1]).
+
+-include("inet_int.hrl").
+
+-define(FAMILY, local).
+-define(PROTO, udp).
+-define(TYPE, dgram).
+
+
+%% port lookup
+getserv(0) -> {ok, 0}.
+
+%% no address lookup
+getaddr({?FAMILY, _} = Address) -> {ok, Address}.
+getaddr({?FAMILY, _} = Address, _Timer) -> {ok, Address}.
+
+%% special this side addresses
+translate_ip(IP) -> IP.
+
+open(0) -> open(0, []).
+%%
+open(0, Opts) ->
+ case inet:udp_options(
+ [{port,0} | Opts],
+ ?MODULE) of
+ {error, Reason} -> exit(Reason);
+ {ok,
+ #udp_opts{
+ fd = Fd,
+ ifaddr = BAddr,
+ port = 0,
+ opts = SockOpts}}
+ when tuple_size(BAddr) =:= 2, element(1, BAddr) =:= ?FAMILY;
+ BAddr =:= any ->
+ inet:open(
+ Fd,
+ case BAddr of
+ any ->
+ undefined;
+ _ ->
+ BAddr
+ end,
+ 0, SockOpts, ?PROTO, ?FAMILY, ?TYPE, ?MODULE);
+ {ok, _} -> exit(badarg)
+ end.
+
+send(S, Addr = {?FAMILY,_}, 0, Data) ->
+ prim_inet:sendto(S, Addr, 0, Data).
+%%
+send(S, Data) ->
+ prim_inet:sendto(S, {?FAMILY,<<>>}, 0, Data).
+
+connect(S, Addr = {?FAMILY,_}, 0) ->
+ prim_inet:connect(S, Addr, 0).
+
+recv(S, Len) ->
+ prim_inet:recvfrom(S, Len).
+%%
+recv(S, Len, Time) ->
+ prim_inet:recvfrom(S, Len, Time).
+
+close(S) ->
+ inet:udp_close(S).
+
+%%
+%% Set controlling process:
+%% 1) First sync socket into a known state
+%% 2) Move all messages onto the new owners message queue
+%% 3) Commit the owner
+%% 4) Wait for ack of new Owner (since socket does some link and unlink)
+%%
+
+controlling_process(Socket, NewOwner) ->
+ inet:udp_controlling_process(Socket, NewOwner).
+
+%%
+%% Create a port/socket from a file descriptor
+%%
+fdopen(Fd, Opts) ->
+ inet:fdopen(Fd, Opts, ?PROTO, ?FAMILY, ?TYPE, ?MODULE).
diff --git a/lib/kernel/src/net_adm.erl b/lib/kernel/src/net_adm.erl
index a38356c224..8ec275b88b 100644
--- a/lib/kernel/src/net_adm.erl
+++ b/lib/kernel/src/net_adm.erl
@@ -96,7 +96,8 @@ names() ->
Reason :: address | file:posix().
names(Hostname) ->
- erl_epmd:names(Hostname).
+ ErlEpmd = net_kernel:epmd_module(),
+ ErlEpmd:names(Hostname).
-spec dns_hostname(Host) -> {ok, Name} | {error, Host} when
Host :: atom() | string(),
diff --git a/lib/kernel/src/net_kernel.erl b/lib/kernel/src/net_kernel.erl
index ac19f4935b..0c679e7349 100644
--- a/lib/kernel/src/net_kernel.erl
+++ b/lib/kernel/src/net_kernel.erl
@@ -59,6 +59,8 @@
connect_node/1,
monitor_nodes/1,
monitor_nodes/2,
+ setopts/2,
+ getopts/2,
start/1,
stop/0]).
@@ -111,7 +113,7 @@
}).
-record(listen, {
- listen, %% listen pid
+ listen, %% listen socket
accept, %% accepting pid
address, %% #net_address
module %% proto module
@@ -384,7 +386,7 @@ init({Name, LongOrShortNames, TickT, CleanHalt}) ->
connections =
ets:new(sys_dist,[named_table,
protected,
- {keypos, 2}]),
+ {keypos, #connection.node}]),
listen = Listeners,
allowed = [],
verbose = 0
@@ -554,6 +556,38 @@ handle_call({new_ticktime,_T,_TP},
#state{tick = #tick_change{time = T}} = State) ->
async_reply({reply, {ongoing_change_to, T}, State}, From);
+handle_call({setopts, new, Opts}, From, State) ->
+ Ret = setopts_new(Opts, State),
+ async_reply({reply, Ret, State}, From);
+
+handle_call({setopts, Node, Opts}, From, State) ->
+ Return =
+ case ets:lookup(sys_dist, Node) of
+ [Conn] when Conn#connection.state =:= up ->
+ case call_owner(Conn#connection.owner, {setopts, Opts}) of
+ {ok, Ret} -> Ret;
+ _ -> {error, noconnection}
+ end;
+
+ _ ->
+ {error, noconnection}
+ end,
+ async_reply({reply, Return, State}, From);
+
+handle_call({getopts, Node, Opts}, From, State) ->
+ Return =
+ case ets:lookup(sys_dist, Node) of
+ [Conn] when Conn#connection.state =:= up ->
+ case call_owner(Conn#connection.owner, {getopts, Opts}) of
+ {ok, Ret} -> Ret;
+ _ -> {error, noconnection}
+ end;
+
+ _ ->
+ {error, noconnection}
+ end,
+ async_reply({reply, Return, State}, From);
+
handle_call(_Msg, _From, State) ->
{noreply, State}.
@@ -1608,3 +1642,93 @@ async_gen_server_reply(From, Msg) ->
{'EXIT', _} ->
ok
end.
+
+call_owner(Owner, Msg) ->
+ Mref = monitor(process, Owner),
+ Owner ! {self(), Mref, Msg},
+ receive
+ {Mref, Reply} ->
+ erlang:demonitor(Mref, [flush]),
+ {ok, Reply};
+ {'DOWN', Mref, _, _, _} ->
+ error
+ end.
+
+
+-spec setopts(Node, Options) -> ok | {error, Reason} | ignored when
+ Node :: node() | new,
+ Options :: [inet:socket_setopt()],
+ Reason :: inet:posix() | noconnection.
+
+setopts(Node, Opts) when is_atom(Node), is_list(Opts) ->
+ request({setopts, Node, Opts}).
+
+setopts_new(Opts, State) ->
+ %% First try setopts on listening socket(s)
+ %% Bail out on failure.
+ %% If successful, we are pretty sure Opts are ok
+ %% and we continue with config params and pending connections.
+ case setopts_on_listen(Opts, State#state.listen) of
+ ok ->
+ setopts_new_1(Opts);
+ Fail -> Fail
+ end.
+
+setopts_on_listen(_, []) -> ok;
+setopts_on_listen(Opts, [#listen {listen = LSocket, module = Mod} | T]) ->
+ try Mod:setopts(LSocket, Opts) of
+ ok ->
+ setopts_on_listen(Opts, T);
+ Fail -> Fail
+ catch
+ error:undef -> {error, enotsup}
+ end.
+
+setopts_new_1(Opts) ->
+ ConnectOpts = case application:get_env(kernel, inet_dist_connect_options) of
+ {ok, CO} -> CO;
+ _ -> []
+ end,
+ application:set_env(kernel, inet_dist_connect_options,
+ merge_opts(Opts,ConnectOpts)),
+ ListenOpts = case application:get_env(kernel, inet_dist_listen_options) of
+ {ok, LO} -> LO;
+ _ -> []
+ end,
+ application:set_env(kernel, inet_dist_listen_options,
+ merge_opts(Opts, ListenOpts)),
+ case lists:keyfind(nodelay, 1, Opts) of
+ {nodelay, ND} when is_boolean(ND) ->
+ application:set_env(kernel, dist_nodelay, ND);
+ _ -> ignore
+ end,
+
+ %% Update any pending connections
+ PendingConns = ets:select(sys_dist, [{'_',
+ [{'=/=',{element,#connection.state,'$_'},up}],
+ ['$_']}]),
+ lists:foreach(fun(#connection{state = pending, owner = Owner}) ->
+ call_owner(Owner, {setopts, Opts});
+ (#connection{state = up_pending, pending_owner = Owner}) ->
+ call_owner(Owner, {setopts, Opts});
+ (_) -> ignore
+ end, PendingConns),
+ ok.
+
+merge_opts([], B) ->
+ B;
+merge_opts([H|T], B0) ->
+ {Key, _} = H,
+ B1 = lists:filter(fun({K,_}) -> K =/= Key end, B0),
+ merge_opts(T, [H | B1]).
+
+-spec getopts(Node, Options) ->
+ {'ok', OptionValues} | {'error', Reason} | ignored when
+ Node :: node(),
+ Options :: [inet:socket_getopt()],
+ OptionValues :: [inet:socket_setopt()],
+ Reason :: inet:posix() | noconnection.
+
+getopts(Node, Opts) when is_atom(Node), is_list(Opts) ->
+ request({getopts, Node, Opts}).
+
diff --git a/lib/kernel/src/os.erl b/lib/kernel/src/os.erl
index f0ad26b1f2..f8519d3a5e 100644
--- a/lib/kernel/src/os.erl
+++ b/lib/kernel/src/os.erl
@@ -226,11 +226,13 @@ extensions() ->
Command :: atom() | io_lib:chars().
cmd(Cmd) ->
validate(Cmd),
- {SpawnCmd, SpawnOpts, SpawnInput} = mk_cmd(os:type(), Cmd),
+ {SpawnCmd, SpawnOpts, SpawnInput, Eot} = mk_cmd(os:type(), Cmd),
Port = open_port({spawn, SpawnCmd}, [binary, stderr_to_stdout,
- stream, in, eof, hide | SpawnOpts]),
+ stream, in, hide | SpawnOpts]),
+ MonRef = erlang:monitor(port, Port),
true = port_command(Port, SpawnInput),
- Bytes = get_data(Port, []),
+ Bytes = get_data(Port, MonRef, Eot, []),
+ demonitor(MonRef, [flush]),
String = unicode:characters_to_list(Bytes),
if %% Convert to unicode list if possible otherwise return bytes
is_list(String) -> String;
@@ -243,7 +245,7 @@ mk_cmd({win32,Wtype}, Cmd) ->
{false,_} -> lists:concat(["cmd /c", Cmd]);
{Cspec,_} -> lists:concat([Cspec," /c",Cmd])
end,
- {Command, [], []};
+ {Command, [], [], <<>>};
mk_cmd(OsType,Cmd) when is_atom(Cmd) ->
mk_cmd(OsType, atom_to_list(Cmd));
mk_cmd(_,Cmd) ->
@@ -252,7 +254,20 @@ mk_cmd(_,Cmd) ->
{"/bin/sh -s unix:cmd", [out],
%% We insert a new line after the command, in case the command
%% contains a comment character.
- ["(", unicode:characters_to_binary(Cmd), "\n); exit\n"]}.
+ %%
+ %% The </dev/null closes stdin, which means that programs
+ %% that use a closed stdin as an termination indicator works.
+ %% An example of such a program is 'more'.
+ %%
+ %% The "echo ^D" is used to indicate that the program has executed
+ %% and we should return any output we have gotten. We cannot use
+ %% termination of the child or closing of stdin/stdout as then
+ %% starting background jobs from os:cmd will block os:cmd.
+ %%
+ %% I tried changing this to be "better", but got bombarded with
+ %% backwards incompatibility bug reports, so leave this as it is.
+ ["(", unicode:characters_to_binary(Cmd), "\n) </dev/null; echo \"\^D\"\n"],
+ <<$\^D>>}.
validate(Atom) when is_atom(Atom) ->
ok;
@@ -267,21 +282,44 @@ validate1([List|Rest]) when is_list(List) ->
validate1([]) ->
ok.
-get_data(Port, Sofar) ->
+get_data(Port, MonRef, Eot, Sofar) ->
receive
{Port, {data, Bytes}} ->
- get_data(Port, [Sofar,Bytes]);
- {Port, eof} ->
- Port ! {self(), close},
- receive
- {Port, closed} ->
- true
- end,
- receive
- {'EXIT', Port, _} ->
- ok
- after 1 -> % force context switch
- ok
- end,
+ case eot(Bytes, Eot) of
+ more ->
+ get_data(Port, MonRef, Eot, [Sofar,Bytes]);
+ Last ->
+ Port ! {self(), close},
+ flush_until_closed(Port),
+ flush_exit(Port),
+ iolist_to_binary([Sofar, Last])
+ end;
+ {'DOWN', MonRef, _, _ , _} ->
+ flush_exit(Port),
iolist_to_binary(Sofar)
end.
+
+eot(_Bs, <<>>) ->
+ more;
+eot(Bs, Eot) ->
+ case binary:match(Bs, Eot) of
+ nomatch -> more;
+ {Pos, _} ->
+ binary:part(Bs,{0, Pos})
+ end.
+
+flush_until_closed(Port) ->
+ receive
+ {Port, {data, _Bytes}} ->
+ flush_until_closed(Port);
+ {Port, closed} ->
+ true
+ end.
+
+flush_exit(Port) ->
+ receive
+ {'EXIT', Port, _} ->
+ ok
+ after 1 -> % force context switch
+ ok
+ end.
diff --git a/lib/kernel/test/erl_distribution_SUITE.erl b/lib/kernel/test/erl_distribution_SUITE.erl
index eb58e92224..e43be77428 100644
--- a/lib/kernel/test/erl_distribution_SUITE.erl
+++ b/lib/kernel/test/erl_distribution_SUITE.erl
@@ -25,6 +25,7 @@
init_per_group/2,end_per_group/2]).
-export([tick/1, tick_change/1, illegal_nodenames/1, hidden_node/1,
+ setopts/1,
table_waste/1, net_setuptime/1,
inet_dist_options_options/1,
@@ -42,6 +43,8 @@
-export([get_socket_priorities/0,
tick_cli_test/1, tick_cli_test1/1,
tick_serv_test/2, tick_serv_test1/1,
+ run_remote_test/1,
+ setopts_do/2,
keep_conn/1, time_ping/1]).
-export([init_per_testcase/2, end_per_testcase/2]).
@@ -66,6 +69,7 @@ suite() ->
all() ->
[tick, tick_change, illegal_nodenames, hidden_node,
+ setopts,
table_waste, net_setuptime, inet_dist_options_options,
{group, monitor_nodes}].
@@ -282,6 +286,165 @@ tick_cli_test1(Node) ->
end
end.
+setopts(Config) when is_list(Config) ->
+ register(setopts_regname, self()),
+ [N1,N2,N3,N4] = get_nodenames(4, setopts),
+
+ {_N1F,Port1} = start_node_unconnected(N1, ?MODULE, run_remote_test,
+ ["setopts_do", atom_to_list(node()), "1", "ping"]),
+ 0 = wait_for_port_exit(Port1),
+
+ {_N2F,Port2} = start_node_unconnected(N2, ?MODULE, run_remote_test,
+ ["setopts_do", atom_to_list(node()), "2", "ping"]),
+ 0 = wait_for_port_exit(Port2),
+
+ {ok, LSock} = gen_tcp:listen(0, [{packet,2}, {active,false}]),
+ {ok, LTcpPort} = inet:port(LSock),
+
+ {N3F,Port3} = start_node_unconnected(N3, ?MODULE, run_remote_test,
+ ["setopts_do", atom_to_list(node()),
+ "1", integer_to_list(LTcpPort)]),
+ wait_and_connect(LSock, N3F, Port3),
+ 0 = wait_for_port_exit(Port3),
+
+ {N4F,Port4} = start_node_unconnected(N4, ?MODULE, run_remote_test,
+ ["setopts_do", atom_to_list(node()),
+ "2", integer_to_list(LTcpPort)]),
+ wait_and_connect(LSock, N4F, Port4),
+ 0 = wait_for_port_exit(Port4),
+
+ ok.
+
+wait_and_connect(LSock, NodeName, NodePort) ->
+ {ok, Sock} = gen_tcp:accept(LSock),
+ {ok, "Connect please"} = gen_tcp:recv(Sock, 0),
+ flush_from_port(NodePort),
+ pong = net_adm:ping(NodeName),
+ gen_tcp:send(Sock, "Connect done"),
+ gen_tcp:close(Sock).
+
+
+flush_from_port(Port) ->
+ flush_from_port(Port, 10).
+
+flush_from_port(Port, Timeout) ->
+ receive
+ {Port,{data,String}} ->
+ io:format("~p: ~s\n", [Port, String]),
+ flush_from_port(Port, Timeout)
+ after Timeout ->
+ timeout
+ end.
+
+wait_for_port_exit(Port) ->
+ case (receive M -> M end) of
+ {Port,{exit_status,Status}} ->
+ Status;
+ {Port,{data,String}} ->
+ io:format("~p: ~s\n", [Port, String]),
+ wait_for_port_exit(Port)
+ end.
+
+run_remote_test([FuncStr, TestNodeStr | Args]) ->
+ Status = try
+ io:format("Node ~p started~n", [node()]),
+ TestNode = list_to_atom(TestNodeStr),
+ io:format("Node ~p spawning function ~p~n", [node(), FuncStr]),
+ {Pid,Ref} = spawn_monitor(?MODULE, list_to_atom(FuncStr), [TestNode, Args]),
+ io:format("Node ~p waiting for function ~p~n", [node(), FuncStr]),
+ receive
+ {'DOWN', Ref, process, Pid, normal} ->
+ 0;
+ Other ->
+ io:format("Node ~p got unexpected msg: ~p\n",[node(), Other]),
+ 1
+ end
+ catch
+ C:E ->
+ io:format("Node ~p got EXCEPTION ~p:~p\nat ~p\n",
+ [node(), C, E, erlang:get_stacktrace()]),
+ 2
+ end,
+ io:format("Node ~p doing halt(~p).\n",[node(), Status]),
+ erlang:halt(Status).
+
+% Do the actual test on the remote node
+setopts_do(TestNode, [OptNr, ConnectData]) ->
+ [] = nodes(),
+ {Opt, Val} = opt_from_nr(OptNr),
+ ok = net_kernel:setopts(new, [{Opt, Val}]),
+
+ [] = nodes(),
+ {error, noconnection} = net_kernel:getopts(TestNode, [Opt]),
+
+ case ConnectData of
+ "ping" -> % We connect
+ net_adm:ping(TestNode);
+ TcpPort -> % Other connect
+ {ok, Sock} = gen_tcp:connect("localhost", list_to_integer(TcpPort),
+ [{active,false},{packet,2}]),
+ ok = gen_tcp:send(Sock, "Connect please"),
+ {ok, "Connect done"} = gen_tcp:recv(Sock, 0),
+ gen_tcp:close(Sock)
+ end,
+ [TestNode] = nodes(),
+ {ok, [{Opt,Val}]} = net_kernel:getopts(TestNode, [Opt]),
+ {error, noconnection} = net_kernel:getopts('pixie@fairyland', [Opt]),
+
+ NewVal = change_val(Val),
+ ok = net_kernel:setopts(TestNode, [{Opt, NewVal}]),
+ {ok, [{Opt,NewVal}]} = net_kernel:getopts(TestNode, [Opt]),
+
+ ok = net_kernel:setopts(TestNode, [{Opt, Val}]),
+ {ok, [{Opt,Val}]} = net_kernel:getopts(TestNode, [Opt]),
+
+ ok.
+
+opt_from_nr("1") -> {nodelay, true};
+opt_from_nr("2") -> {nodelay, false}.
+
+change_val(true) -> false;
+change_val(false) -> true.
+
+start_node_unconnected(Name, Mod, Func, Args) ->
+ FullName = full_node_name(Name),
+ CmdLine = mk_node_cmdline(Name,Mod,Func,Args),
+ io:format("Starting node ~p: ~s~n", [FullName, CmdLine]),
+ case open_port({spawn, CmdLine}, [exit_status]) of
+ Port when is_port(Port) ->
+ {FullName, Port};
+ Error ->
+ exit({failed_to_start_node, FullName, Error})
+ end.
+
+full_node_name(PreName) ->
+ HostSuffix = lists:dropwhile(fun ($@) -> false; (_) -> true end,
+ atom_to_list(node())),
+ list_to_atom(atom_to_list(PreName) ++ HostSuffix).
+
+mk_node_cmdline(Name,Mod,Func,Args) ->
+ Static = "-noinput",
+ Pa = filename:dirname(code:which(?MODULE)),
+ Prog = case catch init:get_argument(progname) of
+ {ok,[[P]]} -> P;
+ _ -> exit(no_progname_argument_found)
+ end,
+ NameSw = case net_kernel:longnames() of
+ false -> "-sname ";
+ true -> "-name ";
+ _ -> exit(not_distributed_node)
+ end,
+ {ok, Pwd} = file:get_cwd(),
+ NameStr = atom_to_list(Name),
+ Prog ++ " "
+ ++ Static ++ " "
+ ++ NameSw ++ " " ++ NameStr
+ ++ " -pa " ++ Pa
+ ++ " -env ERL_CRASH_DUMP " ++ Pwd ++ "/erl_crash_dump." ++ NameStr
+ ++ " -setcookie " ++ atom_to_list(erlang:get_cookie())
+ ++ " -run " ++ atom_to_list(Mod) ++ " " ++ atom_to_list(Func)
+ ++ " " ++ string:join(Args, " ").
+
%% OTP-4255.
tick_change(Config) when is_list(Config) ->
diff --git a/lib/kernel/test/erl_prim_loader_SUITE.erl b/lib/kernel/test/erl_prim_loader_SUITE.erl
index 4f3881d27e..b6417210b9 100644
--- a/lib/kernel/test/erl_prim_loader_SUITE.erl
+++ b/lib/kernel/test/erl_prim_loader_SUITE.erl
@@ -108,13 +108,18 @@ get_file(Config) when is_list(Config) ->
error = erl_prim_loader:get_file({dummy}),
ok.
-get_modules(_Config) ->
+get_modules(Config) ->
case test_server:is_cover() of
- false -> do_get_modules();
+ false -> do_get_modules(Config);
true -> {skip,"Cover"}
end.
-do_get_modules() ->
+do_get_modules(Config) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ NotADir = atom_to_list(?FUNCTION_NAME) ++ "_not_a_dir",
+ ok = file:write_file(filename:join(PrivDir, NotADir), <<>>),
+ ok = file:set_cwd(PrivDir),
+
MsGood = lists:sort([lists,gen_server,gb_trees,code_server]),
Ms = [certainly_not_existing|MsGood],
SuccExp = [begin
@@ -129,8 +134,10 @@ do_get_modules() ->
Path = code:get_path(),
Process = fun(_, F, Code) -> {ok,{F,erlang:md5(Code)}} end,
- {ok,{Succ,FailExp}} = erl_prim_loader:get_modules(Ms, Process, Path),
- SuccExp = lists:sort(Succ),
+ {ok,{SuccExp,FailExp}} = get_modules_sorted(Ms, Process, Path),
+
+ %% Test that an 'enotdir' error can be handled.
+ {ok,{SuccExp,FailExp}} = get_modules_sorted(Ms, Process, [NotADir|Path]),
Name = inet_get_modules,
{ok, Node, BootPid} = complete_start_node(Name),
@@ -147,6 +154,13 @@ do_get_modules() ->
ok.
+get_modules_sorted(Ms, Process, Path) ->
+ case erl_prim_loader:get_modules(Ms, Process, Path) of
+ {ok,{Succ,FailExp}} ->
+ {ok,{lists:sort(Succ),lists:sort(FailExp)}};
+ Other ->
+ Other
+ end.
normalize_and_backslash(Config) ->
%% Test OTP-11170
diff --git a/lib/kernel/test/gen_sctp_SUITE.erl b/lib/kernel/test/gen_sctp_SUITE.erl
index f836b2aa94..620ab235a0 100644
--- a/lib/kernel/test/gen_sctp_SUITE.erl
+++ b/lib/kernel/test/gen_sctp_SUITE.erl
@@ -117,7 +117,11 @@ xfer_min(Config) when is_list(Config) ->
Stream = 0,
Data = <<"The quick brown fox jumps over a lazy dog 0123456789">>,
Loopback = {127,0,0,1},
+ StatOpts =
+ [recv_avg,recv_cnt,recv_max,recv_oct,
+ send_avg,send_cnt,send_max,send_oct],
{ok,Sb} = gen_sctp:open([{type,seqpacket}]),
+ {ok,SbStat1} = inet:getstat(Sb, StatOpts),
{ok,Pb} = inet:port(Sb),
ok = gen_sctp:listen(Sb, true),
@@ -212,6 +216,8 @@ xfer_min(Config) when is_list(Config) ->
assoc_id=SbAssocId}} =
recv_event(log_ok(gen_sctp:recv(Sb, infinity))),
ok = gen_sctp:close(Sa),
+ {ok,SbStat2} = inet:getstat(Sb, StatOpts),
+ [] = filter_stat_eq(SbStat1, SbStat2),
ok = gen_sctp:close(Sb),
receive
@@ -220,6 +226,18 @@ xfer_min(Config) when is_list(Config) ->
end,
ok.
+filter_stat_eq([], []) ->
+ [];
+filter_stat_eq([{Tag,Val1}=Stat|SbStat1], [{Tag,Val2}|SbStat2]) ->
+ if
+ Val1 == Val2 ->
+ [Stat|filter_stat_eq(SbStat1, SbStat2)];
+ true ->
+ filter_stat_eq(SbStat1, SbStat2)
+ end.
+
+
+
%% Minimal data transfer in active mode.
xfer_active(Config) when is_list(Config) ->
Timeout = 2000,
@@ -383,26 +401,28 @@ def_sndrcvinfo(Config) when is_list(Config) ->
assoc_id=S2AssocId} = S2AssocChange =
log_ok(gen_sctp:connect(S2, Loopback, P1, [])),
?LOGVAR(S2AssocChange),
- case recv_event(log_ok(gen_sctp:recv(S1))) of
- {Loopback,P2,
- #sctp_assoc_change{
- state=comm_up,
- error=0,
- assoc_id=S1AssocId}} ->
- ?LOGVAR(S1AssocId);
- {Loopback,P2,
- #sctp_paddr_change{
- state=addr_confirmed,
- error=0,
- assoc_id=S1AssocId}} ->
- ?LOGVAR(S1AssocId),
+ S1AssocId =
+ case recv_event(log_ok(gen_sctp:recv(S1))) of
{Loopback,P2,
#sctp_assoc_change{
state=comm_up,
error=0,
- assoc_id=S1AssocId}} =
- recv_event(log_ok(gen_sctp:recv(S1)))
- end,
+ assoc_id=AssocId}} ->
+ AssocId;
+ {Loopback,P2,
+ #sctp_paddr_change{
+ state=addr_confirmed,
+ error=0,
+ assoc_id=AssocId}} ->
+ {Loopback,P2,
+ #sctp_assoc_change{
+ state=comm_up,
+ error=0,
+ assoc_id=AssocId}} =
+ recv_event(log_ok(gen_sctp:recv(S1))),
+ AssocId
+ end,
+ ?LOGVAR(S1AssocId),
#sctp_sndrcvinfo{
ppid=17, context=0, timetolive=0} = %, assoc_id=S1AssocId} =
@@ -1055,6 +1075,7 @@ peeloff(Config, SockOpts) when is_list(Config) ->
Addr = {127,0,0,1},
Stream = 0,
Timeout = 333,
+ StartTime = timestamp(),
S1 = socket_open([{ifaddr,Addr}|SockOpts], Timeout),
?LOGVAR(S1),
P1 = socket_call(S1, get_port),
@@ -1077,7 +1098,7 @@ peeloff(Config, SockOpts) when is_list(Config) ->
state=comm_up,
assoc_id=AssocId2}}} -> AssocId2
after Timeout ->
- socket_bailout([S1,S2])
+ socket_bailout([S1,S2], StartTime)
end,
?LOGVAR(S2Ai),
S1Ai =
@@ -1087,7 +1108,7 @@ peeloff(Config, SockOpts) when is_list(Config) ->
state=comm_up,
assoc_id=AssocId1}}} -> AssocId1
after Timeout ->
- socket_bailout([S1,S2])
+ socket_bailout([S1,S2], StartTime)
end,
?LOGVAR(S1Ai),
%%
@@ -1095,13 +1116,13 @@ peeloff(Config, SockOpts) when is_list(Config) ->
receive
{S1,{Addr,P2,S1Ai,Stream,<<"Number one">>}} -> ok
after Timeout ->
- socket_bailout([S1,S2])
+ socket_bailout([S1,S2], StartTime)
end,
socket_call(S2, {send,Socket1,S1Ai,Stream,<<"Number two">>}),
receive
{S2,{Addr,P1,S2Ai,Stream,<<"Number two">>}} -> ok
after Timeout ->
- socket_bailout([S1,S2])
+ socket_bailout([S1,S2], StartTime)
end,
%%
S3 = socket_peeloff(Socket1, S1Ai, SockOpts, Timeout),
@@ -1120,31 +1141,31 @@ peeloff(Config, SockOpts) when is_list(Config) ->
receive
{S2,{Addr,P3,S2Ai,Stream,<<"Number three">>}} -> ok
after Timeout ->
- socket_bailout([S1,S2,S3])
+ socket_bailout([S1,S2,S3], StartTime)
end,
socket_call(S3, {send,Socket2,S2Ai,Stream,<<"Number four">>}),
receive
{S3,{Addr,P2,S3Ai,Stream,<<"Number four">>}} -> ok
after Timeout ->
- socket_bailout([S1,S2,S3])
+ socket_bailout([S1,S2,S3], StartTime)
end,
%%
inet:i(sctp),
- socket_close_verbose(S1),
- socket_close_verbose(S2),
+ socket_close_verbose(S1, StartTime),
+ socket_close_verbose(S2, StartTime),
receive
{S3,{Addr,P2,#sctp_shutdown_event{assoc_id=S3Ai_X}}} ->
match_unless_solaris(S3Ai, S3Ai_X)
after Timeout ->
- socket_bailout([S3])
+ socket_bailout([S3], StartTime)
end,
receive
{S3,{Addr,P2,#sctp_assoc_change{state=shutdown_comp,
assoc_id=S3Ai}}} -> ok
after Timeout ->
- socket_bailout([S3])
+ socket_bailout([S3], StartTime)
end,
- socket_close_verbose(S3),
+ socket_close_verbose(S3, StartTime),
[] = flush(),
ok.
@@ -1156,6 +1177,7 @@ buffers(Config) when is_list(Config) ->
Addr = {127,0,0,1},
Stream = 1,
Timeout = 3333,
+ StartTime = timestamp(),
S1 = socket_open([{ip,Addr}], Timeout),
?LOGVAR(S1),
P1 = socket_call(S1, get_port),
@@ -1174,7 +1196,7 @@ buffers(Config) when is_list(Config) ->
state=comm_up,
assoc_id=AssocId2}}} -> AssocId2
after Timeout ->
- socket_bailout([S1,S2])
+ socket_bailout([S1,S2], StartTime)
end,
S1Ai =
receive
@@ -1183,7 +1205,7 @@ buffers(Config) when is_list(Config) ->
state=comm_up,
assoc_id=AssocId1}}} -> AssocId1
after Timeout ->
- socket_bailout([S1,S2])
+ socket_bailout([S1,S2], StartTime)
end,
%%
socket_call(S1, {setopts,[{recbuf,Limit}]}),
@@ -1197,22 +1219,22 @@ buffers(Config) when is_list(Config) ->
receive
{S1,{Addr,P2,S1Ai,Stream,Data}} -> ok
after Timeout ->
- socket_bailout([S1,S2])
+ socket_bailout([S1,S2], StartTime)
end,
%%
- socket_close_verbose(S1),
+ socket_close_verbose(S1, StartTime),
receive
{S2,{Addr,P1,#sctp_shutdown_event{assoc_id=S2Ai}}} -> ok
after Timeout ->
- socket_bailout([S2])
+ socket_bailout([S2], StartTime)
end,
receive
{S2,{Addr,P1,#sctp_assoc_change{state=shutdown_comp,
assoc_id=S2Ai}}} -> ok
after Timeout ->
- socket_bailout([S2])
+ socket_bailout([S2], StartTime)
end,
- socket_close_verbose(S2),
+ socket_close_verbose(S2, StartTime),
[] = flush(),
ok.
@@ -1521,8 +1543,8 @@ socket_peeloff(Socket, AssocId, SocketOpts, Timeout) ->
end,
s_start(Starter, Timeout).
-socket_close_verbose(S) ->
- History = socket_history(socket_close(S)),
+socket_close_verbose(S, StartTime) ->
+ History = socket_history(socket_close(S), StartTime),
io:format("socket_close ~p:~n ~p.~n", [S,History]),
History.
@@ -1535,19 +1557,19 @@ socket_call(S, Request) ->
%% socket_get(S, Key) ->
%% s_req(S, {get,Key}).
-socket_bailout([S|Ss]) ->
- History = socket_history(socket_close(S)),
+socket_bailout([S|Ss], StartTime) ->
+ History = socket_history(socket_close(S), StartTime),
io:format("bailout ~p:~n ~p.~n", [S,History]),
- socket_bailout(Ss);
-socket_bailout([]) ->
+ socket_bailout(Ss, StartTime);
+socket_bailout([], _) ->
io:format("flush: ~p.~n", [flush()]),
ct:fail(socket_bailout).
-socket_history({State,Flush}) ->
+socket_history({State,Flush}, StartTime) ->
{lists:keysort(
2,
lists:flatten(
- [[{Key,Val} || Val <- Vals]
+ [[{Key,{TS-StartTime,Val}} || {TS,Val} <- Vals]
|| {Key,Vals} <- gb_trees:to_list(State)])),
Flush}.
@@ -1610,14 +1632,12 @@ s_loop(Socket, Timeout, Parent, Handler, State) ->
{Parent,Ref,exit} ->
ok = gen_sctp:close(Socket),
Key = exit,
- Val = {now(),Socket},
- NewState = gb_push(Key, Val, State),
+ NewState = gb_push(Key, Socket, State),
Parent ! {self(),Ref,{NewState,flush()}};
{Parent,Ref,{Msg}} ->
Result = Handler(Msg),
Key = req,
- Val = {now(),{Msg,Result}},
- NewState = gb_push(Key, Val, State),
+ NewState = gb_push(Key, {Msg,Result}, State),
Parent ! {self(),Ref,Result},
s_loop(Socket, Timeout, Parent, Handler, NewState);
%% {Parent,Ref,{get,Key}} ->
@@ -1627,16 +1647,15 @@ s_loop(Socket, Timeout, Parent, Handler, State) ->
{[#sctp_sndrcvinfo{stream=Stream,assoc_id=AssocId}=SRI],Data}}
when not is_tuple(Data) ->
case gb_get({assoc_change,AssocId}, State) of
- [{_,{Addr,Port,
- #sctp_assoc_change{
- state=comm_up,
- inbound_streams=Is}}}|_]
+ [{Addr,Port,
+ #sctp_assoc_change{
+ state=comm_up,
+ inbound_streams=Is}}|_]
when 0 =< Stream, Stream < Is-> ok;
[] -> ok
end,
Key = {msg,AssocId,Stream},
- Val = {now(),{Addr,Port,SRI,Data}},
- NewState = gb_push(Key, Val, State),
+ NewState = gb_push(Key, {Addr,Port,SRI,Data}, State),
Parent ! {self(),{Addr,Port,AssocId,Stream,Data}},
again(Socket),
s_loop(Socket, Timeout, Parent, Handler, NewState);
@@ -1647,13 +1666,12 @@ s_loop(Socket, Timeout, Parent, Handler, State) ->
[] -> ok
end,
Key = {assoc_change,AssocId},
- Val = {now(),{Addr,Port,SAC}},
case {gb_get(Key, State),St} of
{[],_} -> ok;
- {[{_,{Addr,Port,#sctp_assoc_change{state=comm_up}}}|_],_}
+ {[{Addr,Port,#sctp_assoc_change{state=comm_up}}|_],_}
when St =:= comm_lost; St =:= shutdown_comp -> ok
end,
- NewState = gb_push(Key, Val, State),
+ NewState = gb_push(Key, {Addr,Port,SAC}, State),
Parent ! {self(),{Addr,Port,SAC}},
again(Socket),
s_loop(Socket, Timeout, Parent, Handler, NewState);
@@ -1667,14 +1685,13 @@ s_loop(Socket, Timeout, Parent, Handler, State) ->
[] -> ok
end,
case {gb_get({assoc_change,AssocId}, State),St} of
- {[{_,{Addr,Port,#sctp_assoc_change{state=comm_up}}}|_],_}
+ {[{Addr,Port,#sctp_assoc_change{state=comm_up}}|_],_}
when St =:= addr_available;
St =:= addr_confirmed -> ok;
{[],addr_confirmed} -> ok
end,
Key = {paddr_change,AssocId},
- Val = {now(),{Addr,Port,SPC}},
- NewState = gb_push(Key, Val, State),
+ NewState = gb_push(Key, {Addr,Port,SPC}, State),
again(Socket),
s_loop(Socket, Timeout, Parent, Handler, NewState);
{sctp,Socket,Addr,Port,
@@ -1684,12 +1701,11 @@ s_loop(Socket, Timeout, Parent, Handler, State) ->
[] -> ok
end,
case gb_get({assoc_change,AssocId}, State) of
- [{_,{Addr,Port,#sctp_assoc_change{state=comm_up}}}|_] -> ok;
+ [{Addr,Port,#sctp_assoc_change{state=comm_up}}|_] -> ok;
[] -> ok
end,
Key = {shutdown_event,AssocId},
- Val = {now(),{Addr,Port}},
- NewState = gb_push(Key, Val, State),
+ NewState = gb_push(Key, {Addr,Port}, State),
Parent ! {self(), {Addr,Port,SSE}},
again(Socket),
s_loop(Socket, Timeout, Parent, Handler, NewState);
@@ -1707,11 +1723,12 @@ again(Socket) ->
end.
gb_push(Key, Val, GBT) ->
+ TS = timestamp(),
case gb_trees:lookup(Key, GBT) of
none ->
- gb_trees:insert(Key, [Val], GBT);
+ gb_trees:insert(Key, [{TS,Val}], GBT);
{value,V} ->
- gb_trees:update(Key, [Val|V], GBT)
+ gb_trees:update(Key, [{TS,Val}|V], GBT)
end.
gb_get(Key, GBT) ->
@@ -1719,7 +1736,7 @@ gb_get(Key, GBT) ->
none ->
[];
{value,V} ->
- V
+ [Val || {_TS,Val} <- V]
end.
match_unless_solaris(A, B) ->
@@ -1727,3 +1744,6 @@ match_unless_solaris(A, B) ->
{unix,sunos} -> B;
_ -> A = B
end.
+
+timestamp() ->
+ erlang:monotonic_time().
diff --git a/lib/kernel/test/gen_tcp_api_SUITE.erl b/lib/kernel/test/gen_tcp_api_SUITE.erl
index 6f6f53309e..77ec89b4f4 100644
--- a/lib/kernel/test/gen_tcp_api_SUITE.erl
+++ b/lib/kernel/test/gen_tcp_api_SUITE.erl
@@ -34,7 +34,11 @@
t_recv_timeout/1, t_recv_eof/1, t_recv_delim/1,
t_shutdown_write/1, t_shutdown_both/1, t_shutdown_error/1,
t_shutdown_async/1,
- t_fdopen/1, t_fdconnect/1, t_implicit_inet6/1]).
+ t_fdopen/1, t_fdconnect/1, t_implicit_inet6/1,
+ t_local_basic/1, t_local_unbound/1, t_local_fdopen/1,
+ t_local_fdopen_listen/1, t_local_fdopen_listen_unbound/1,
+ t_local_fdopen_connect/1, t_local_fdopen_connect_unbound/1,
+ t_local_abstract/1]).
-export([getsockfd/0,closesockfd/1]).
@@ -45,12 +49,18 @@ suite() ->
all() ->
[{group, t_accept}, {group, t_connect}, {group, t_recv},
t_shutdown_write, t_shutdown_both, t_shutdown_error,
- t_shutdown_async, t_fdopen, t_fdconnect, t_implicit_inet6].
+ t_shutdown_async, t_fdopen, t_fdconnect, t_implicit_inet6,
+ {group, t_local}].
groups() ->
[{t_accept, [], [t_accept_timeout]},
{t_connect, [], [t_connect_timeout, t_connect_bad]},
- {t_recv, [], [t_recv_timeout, t_recv_eof, t_recv_delim]}].
+ {t_recv, [], [t_recv_timeout, t_recv_eof, t_recv_delim]},
+ {t_local, [],
+ [t_local_basic, t_local_unbound, t_local_fdopen,
+ t_local_fdopen_listen, t_local_fdopen_listen_unbound,
+ t_local_fdopen_connect, t_local_fdopen_connect_unbound,
+ t_local_abstract]}].
@@ -60,17 +70,36 @@ init_per_suite(Config) ->
end_per_suite(_Config) ->
ok.
+init_per_group(t_local, Config) ->
+ case gen_tcp:connect({local,<<"/">>}, 0, []) of
+ {error,eafnosupport} ->
+ {skip, "AF_LOCAL not supported"};
+ {error,_} ->
+ Config
+ end;
init_per_group(_GroupName, Config) ->
Config.
-end_per_group(_,_Config) ->
+end_per_group(t_local, _Config) ->
+ delete_local_filenames();
+end_per_group(_, _Config) ->
ok.
+
+init_per_testcase(Func, Config)
+ when Func =:= undefined -> % Insert your testcase name here
+ dbg:tracer(),
+ dbg:p(self(), c),
+ dbg:tpl(prim_inet, cx),
+ dbg:tpl(local_tcp, cx),
+ dbg:tpl(inet, cx),
+ dbg:tpl(gen_tcp, cx),
+ Config;
init_per_testcase(_Func, Config) ->
Config.
end_per_testcase(_Func, _Config) ->
- ok.
+ dbg:stop().
%%% gen_tcp:accept/1,2
@@ -135,8 +164,8 @@ t_recv_delim(Config) when is_list(Config) ->
{ok, Client} = gen_tcp:connect(localhost, Port, Opts),
{ok, A} = gen_tcp:accept(L),
ok = gen_tcp:send(A, "abcXefgX"),
- {ok, "abcX"} = gen_tcp:recv(Client, 0, 0),
- {ok, "efgX"} = gen_tcp:recv(Client, 0, 0),
+ {ok, "abcX"} = gen_tcp:recv(Client, 0, 200),
+ {ok, "efgX"} = gen_tcp:recv(Client, 0, 200),
ok = gen_tcp:close(Client),
ok = gen_tcp:close(A),
ok.
@@ -279,9 +308,7 @@ t_implicit_inet6(Host, Addr) ->
implicit_inet6(S1, Loopback),
ok = gen_tcp:close(S1),
%%
- Localhost = "localhost",
- Localaddr = ok(inet:getaddr(Localhost, inet6)),
- io:format("~s ~p~n", [Localhost,Localaddr]),
+ Localaddr = ok(get_localaddr()),
S2 = ok(gen_tcp:listen(0, [{ip,Localaddr}])),
implicit_inet6(S2, Localaddr),
ok = gen_tcp:close(S2),
@@ -308,6 +335,192 @@ implicit_inet6(S, Addr) ->
ok = gen_tcp:close(S1).
+
+t_local_basic(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ CFile = local_filename(client),
+ CAddr = {local,bin_filename(CFile)},
+ _ = file:delete(SFile),
+ _ = file:delete(CFile),
+ %%
+ L =
+ ok(
+ gen_tcp:listen(0, [{ifaddr,{local,SFile}},{active,false}])),
+ C =
+ ok(
+ gen_tcp:connect(
+ {local,SFile}, 0, [{ifaddr,{local,CFile}},{active,false}])),
+ S = ok(gen_tcp:accept(L)),
+ SAddr = ok(inet:sockname(L)),
+ {error,enotconn} = inet:peername(L),
+ local_handshake(S, SAddr, C, CAddr),
+ ok = gen_tcp:close(L),
+ ok = gen_tcp:close(S),
+ ok = gen_tcp:close(C),
+ %%
+ ok = file:delete(SFile),
+ ok = file:delete(CFile),
+ ok.
+
+t_local_unbound(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ _ = file:delete(SFile),
+ %%
+ L = ok(gen_tcp:listen(0, [{ifaddr,SAddr},{active,false}])),
+ C = ok(gen_tcp:connect(SAddr, 0, [{active,false}])),
+ S = ok(gen_tcp:accept(L)),
+ SAddr = ok(inet:sockname(L)),
+ {error,enotconn} = inet:peername(L),
+ local_handshake(S, SAddr, C, {local,<<>>}),
+ ok = gen_tcp:close(L),
+ ok = gen_tcp:close(S),
+ ok = gen_tcp:close(C),
+ ok = file:delete(SFile),
+ ok.
+
+t_local_fdopen(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ _ = file:delete(SFile),
+ %%
+ L = ok(gen_tcp:listen(0, [{ifaddr,SAddr},{active,false}])),
+ C0 = ok(gen_tcp:connect(SAddr, 0, [{active,false}])),
+ Fd = ok(prim_inet:getfd(C0)),
+ ok = prim_inet:ignorefd(C0, true),
+ C = ok(gen_tcp:fdopen(Fd, [local])),
+ S = ok(gen_tcp:accept(L)),
+ SAddr = ok(inet:sockname(L)),
+ {error,enotconn} = inet:peername(L),
+ local_handshake(S, SAddr, C, {local,<<>>}),
+ ok = gen_tcp:close(L),
+ ok = gen_tcp:close(S),
+ ok = gen_tcp:close(C),
+ ok = gen_tcp:close(C0),
+ ok = file:delete(SFile),
+ ok.
+
+t_local_fdopen_listen(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ _ = file:delete(SFile),
+ L0 = ok(gen_tcp:listen(0, [{ifaddr,SAddr},{active,false}])),
+ Fd = ok(prim_inet:getfd(L0)),
+ L = ok(gen_tcp:listen(0, [{fd,Fd},local,{active,false}])),
+ C = ok(gen_tcp:connect(SAddr, 0, [{active,false}])),
+ S = ok(gen_tcp:accept(L)),
+ SAddr = ok(inet:sockname(L)),
+ {error,enotconn} = inet:peername(L),
+ local_handshake(S, SAddr, C, {local,<<>>}),
+ ok = gen_tcp:close(L),
+ ok = gen_tcp:close(L0),
+ ok = gen_tcp:close(S),
+ ok = gen_tcp:close(C),
+ ok = file:delete(SFile),
+ ok.
+
+t_local_fdopen_listen_unbound(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ _ = file:delete(SFile),
+ P = ok(prim_inet:open(tcp, local, stream)),
+ Fd = ok(prim_inet:getfd(P)),
+ L =
+ ok(gen_tcp:listen(
+ 0, [{fd,Fd},{ifaddr,SAddr},{active,false}])),
+ C = ok(gen_tcp:connect(SAddr, 0, [{active,false}])),
+ S = ok(gen_tcp:accept(L)),
+ SAddr = ok(inet:sockname(L)),
+ {error,enotconn} = inet:peername(L),
+ local_handshake(S, SAddr, C, {local,<<>>}),
+ ok = gen_tcp:close(L),
+ ok = gen_tcp:close(P),
+ ok = gen_tcp:close(S),
+ ok = gen_tcp:close(C),
+ ok = file:delete(SFile),
+ ok.
+
+t_local_fdopen_connect(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ CFile = local_filename(client),
+ CAddr = {local,bin_filename(CFile)},
+ _ = file:delete(SFile),
+ _ = file:delete(CFile),
+ L = ok(gen_tcp:listen(0, [{ifaddr,SAddr},{active,false}])),
+ P = ok(prim_inet:open(tcp, local, stream)),
+ Fd = ok(prim_inet:getfd(P)),
+ C =
+ ok(gen_tcp:connect(
+ SAddr, 0, [{fd,Fd},{ifaddr,CAddr},{active,false}])),
+ S = ok(gen_tcp:accept(L)),
+ SAddr = ok(inet:sockname(L)),
+ {error,enotconn} = inet:peername(L),
+ local_handshake(S, SAddr, C, CAddr),
+ ok = gen_tcp:close(L),
+ ok = gen_tcp:close(S),
+ ok = gen_tcp:close(C),
+ ok = gen_tcp:close(P),
+ ok = file:delete(SFile),
+ ok.
+
+t_local_fdopen_connect_unbound(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ _ = file:delete(SFile),
+ L = ok(gen_tcp:listen(0, [{ifaddr,SAddr},{active,false}])),
+ P = ok(prim_inet:open(tcp, local, stream)),
+ Fd = ok(prim_inet:getfd(P)),
+ C = ok(gen_tcp:connect(SAddr, 0, [{fd,Fd},{active,false}])),
+ S = ok(gen_tcp:accept(L)),
+ SAddr = ok(inet:sockname(L)),
+ {error,enotconn} = inet:peername(L),
+ local_handshake(S, SAddr, C, {local,<<>>}),
+ ok = gen_tcp:close(L),
+ ok = gen_tcp:close(S),
+ ok = gen_tcp:close(C),
+ ok = gen_tcp:close(P),
+ ok = file:delete(SFile),
+ ok.
+
+t_local_abstract(_Config) ->
+ case os:type() of
+ {unix,linux} ->
+ AbstAddr = {local,<<>>},
+ L =
+ ok(gen_tcp:listen(
+ 0, [{ifaddr,AbstAddr},{active,false}])),
+ {local,_} = SAddr = ok(inet:sockname(L)),
+ C =
+ ok(gen_tcp:connect(
+ SAddr, 0, [{ifaddr,AbstAddr},{active,false}])),
+ {local,_} = CAddr = ok(inet:sockname(C)),
+ S = ok(gen_tcp:accept(L)),
+ {error,enotconn} = inet:peername(L),
+ local_handshake(S, SAddr, C, CAddr),
+ ok = gen_tcp:close(L),
+ ok = gen_tcp:close(S),
+ ok = gen_tcp:close(C),
+ ok;
+ _ ->
+ {skip,"AF_LOCAL Abstract Addresses only supported on Linux"}
+ end.
+
+
+local_handshake(S, SAddr, C, CAddr) ->
+ SData = "9876543210",
+ CData = "0123456789",
+ SAddr = ok(inet:sockname(S)),
+ CAddr = ok(inet:sockname(C)),
+ CAddr = ok(inet:peername(S)),
+ SAddr = ok(inet:peername(C)),
+ ok = gen_tcp:send(C, CData),
+ ok = gen_tcp:send(S, SData),
+ CData = ok(gen_tcp:recv(S, length(CData))),
+ SData = ok(gen_tcp:recv(C, length(SData))),
+ ok.
+
%%% Utilities
%% Calls M:F/length(A), which should return a timeout error, and complete
@@ -369,8 +582,42 @@ unused_ip(A, B, C, D) ->
{error, _} -> {ok, {A, B, C, D}}
end.
-ok({ok,V}) -> V.
+ok({ok,V}) -> V;
+ok(NotOk) ->
+ try throw(not_ok)
+ catch
+ Thrown ->
+ erlang:raise(
+ error, {Thrown, NotOk}, tl(erlang:get_stacktrace()))
+ end.
+get_localaddr() ->
+ get_localaddr(["localhost", "localhost6", "ip6-localhost"]).
+
+get_localaddr([]) ->
+ {error, localaddr_not_found};
+get_localaddr([Localhost|Ls]) ->
+ case inet:getaddr(Localhost, inet6) of
+ {ok, LocalAddr} ->
+ io:format("~s ~p~n", [Localhost, LocalAddr]),
+ {ok, LocalAddr};
+ _ ->
+ get_localaddr(Ls)
+ end.
getsockfd() -> undefined.
closesockfd(_FD) -> undefined.
+
+local_filename(Tag) ->
+ "/tmp/" ?MODULE_STRING "_" ++ os:getpid() ++ "_" ++ atom_to_list(Tag).
+
+bin_filename(String) ->
+ unicode:characters_to_binary(String, file:native_name_encoding()).
+
+delete_local_filenames() ->
+ _ =
+ [file:delete(F) ||
+ F <-
+ filelib:wildcard(
+ "/tmp/" ?MODULE_STRING "_" ++ os:getpid() ++ "_*")],
+ ok.
diff --git a/lib/kernel/test/gen_udp_SUITE.erl b/lib/kernel/test/gen_udp_SUITE.erl
index 85dc6312ea..1029d7ef0a 100644
--- a/lib/kernel/test/gen_udp_SUITE.erl
+++ b/lib/kernel/test/gen_udp_SUITE.erl
@@ -35,7 +35,9 @@
-export([send_to_closed/1, active_n/1,
buffer_size/1, binary_passive_recv/1, bad_address/1,
- read_packets/1, open_fd/1, connect/1, implicit_inet6/1]).
+ read_packets/1, open_fd/1, connect/1, implicit_inet6/1,
+ local_basic/1, local_unbound/1,
+ local_fdopen/1, local_fdopen_unbound/1, local_abstract/1]).
suite() ->
[{ct_hooks,[ts_install_cth]},
@@ -44,10 +46,13 @@ suite() ->
all() ->
[send_to_closed, buffer_size, binary_passive_recv,
bad_address, read_packets, open_fd, connect,
- implicit_inet6, active_n].
+ implicit_inet6, active_n,
+ {group, local}].
groups() ->
- [].
+ [{local, [],
+ [local_basic, local_unbound,
+ local_fdopen, local_fdopen_unbound, local_abstract]}].
init_per_suite(Config) ->
Config.
@@ -55,9 +60,19 @@ init_per_suite(Config) ->
end_per_suite(_Config) ->
ok.
+init_per_group(local, Config) ->
+ case gen_udp:open(0, [local]) of
+ {ok,S} ->
+ ok = gen_udp:close(S),
+ Config;
+ {error,eafnosupport} ->
+ {skip, "AF_LOCAL not supported"}
+ end;
init_per_group(_GroupName, Config) ->
Config.
+end_per_group(local, _Config) ->
+ delete_local_filenames();
end_per_group(_GroupName, Config) ->
Config.
@@ -65,7 +80,7 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
Config.
-end_per_testcase(_Case, Config) ->
+end_per_testcase(_Case, _Config) ->
ok.
%%-------------------------------------------------------------
@@ -550,6 +565,116 @@ active_n(Config) when is_list(Config) ->
ok = gen_udp:close(S1),
ok.
+
+local_basic(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ CFile = local_filename(client),
+ CAddr = {local,bin_filename(CFile)},
+ _ = file:delete(SFile),
+ _ = file:delete(CFile),
+ %%
+ S = ok(gen_udp:open(0, [{ifaddr,{local,SFile}},{active,false}])),
+ C = ok(gen_udp:open(0, [{ifaddr,{local,CFile}},{active,false}])),
+ SAddr = ok(inet:sockname(S)),
+ CAddr = ok(inet:sockname(C)),
+ local_handshake(S, SAddr, C, CAddr),
+ ok = gen_udp:close(S),
+ ok = gen_udp:close(C),
+ %%
+ ok = file:delete(SFile),
+ ok = file:delete(CFile),
+ ok.
+
+local_unbound(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ _ = file:delete(SFile),
+ %%
+ S = ok(gen_udp:open(0, [{ifaddr,SAddr},{active,false}])),
+ C = ok(gen_udp:open(0, [local,{active,false}])),
+ SAddr = ok(inet:sockname(S)),
+ local_handshake(S, SAddr, C, undefined),
+ ok = gen_udp:close(S),
+ ok = gen_udp:close(C),
+ %%
+ ok = file:delete(SFile),
+ ok.
+
+local_fdopen(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ CFile = local_filename(client),
+ CAddr = {local,bin_filename(CFile)},
+ _ = file:delete(SFile),
+ _ = file:delete(CFile),
+ %%
+ S0 = ok(gen_udp:open(0, [{ifaddr,SAddr},{active,false}])),
+ C = ok(gen_udp:open(0, [{ifaddr,{local,CFile}},{active,false}])),
+ SAddr = ok(inet:sockname(S0)),
+ CAddr = ok(inet:sockname(C)),
+ Fd = ok(prim_inet:getfd(S0)),
+ S = ok(gen_udp:open(0, [{fd,Fd},local,{active,false}])),
+ SAddr = ok(inet:sockname(S)),
+ local_handshake(S, SAddr, C, CAddr),
+ ok = gen_udp:close(S),
+ ok = gen_udp:close(S0),
+ ok = gen_udp:close(C),
+ %%
+ ok = file:delete(SFile),
+ ok = file:delete(CFile),
+ ok.
+
+local_fdopen_unbound(_Config) ->
+ SFile = local_filename(server),
+ SAddr = {local,bin_filename(SFile)},
+ _ = file:delete(SFile),
+ %%
+ S = ok(gen_udp:open(0, [{ifaddr,SAddr},{active,false}])),
+ C0 = ok(gen_udp:open(0, [local,{active,false}])),
+ SAddr = ok(inet:sockname(S)),
+ Fd = ok(prim_inet:getfd(C0)),
+ C = ok(gen_udp:open(0, [{fd,Fd},local,{active,false}])),
+ local_handshake(S, SAddr, C, undefined),
+ ok = gen_udp:close(S),
+ ok = gen_udp:close(C),
+ ok = gen_udp:close(C0),
+ %%
+ ok = file:delete(SFile),
+ ok.
+
+local_abstract(_Config) ->
+ case os:type() of
+ {unix,linux} ->
+ S = ok(gen_udp:open(0, [{ifaddr,{local,<<>>}},{active,false}])),
+ C = ok(gen_udp:open(0, [{ifaddr,{local,<<>>}},{active,false}])),
+ {local,_} = SAddr = ok(inet:sockname(S)),
+ {local,_} = CAddr = ok(inet:sockname(C)),
+ local_handshake(S, SAddr, C, CAddr),
+ ok = gen_udp:close(S),
+ ok = gen_udp:close(C),
+ ok;
+ _ ->
+ {skip,"AF_LOCAL Abstract Addresses only supported on Linux"}
+ end.
+
+
+local_handshake(S, SAddr, C, CAddr) ->
+ SData = "9876543210",
+ CData = "0123456789",
+ ok = gen_udp:send(C, SAddr, 0, CData),
+ case ok(gen_tcp:recv(S, 112)) of
+ {{unspec,<<>>}, 0, CData} when CAddr =:= undefined ->
+ ok;
+ {{local,<<>>}, 0, CData} when CAddr =:= undefined ->
+ ok;
+ {CAddr, 0, CData} when CAddr =/= undefined ->
+ ok = gen_udp:send(S, CAddr, 0, SData),
+ {SAddr, 0, SData} = ok(gen_tcp:recv(C, 112)),
+ ok
+
+ end.
+
%%
%% Utils
%%
@@ -572,7 +697,7 @@ connect(Config) when is_list(Config) ->
ok = gen_udp:close(S1),
ok = gen_udp:connect(S2, Addr, P1),
ok = gen_udp:send(S2, <<16#deadbeef:32>>),
- ok = case gen_udp:recv(S2, 0, 5) of
+ ok = case gen_udp:recv(S2, 0, 500) of
{error,econnrefused} -> ok;
{error,econnreset} -> ok;
Other -> Other
@@ -599,9 +724,7 @@ implicit_inet6(Host, Addr) ->
implicit_inet6(S1, Active, Loopback),
ok = gen_udp:close(S1),
%%
- Localhost = "localhost",
- Localaddr = ok(inet:getaddr(Localhost, inet6)),
- io:format("~s ~p~n", [Localhost,Localaddr]),
+ Localaddr = ok(get_localaddr()),
S2 = ok(gen_udp:open(0, [{ip,Localaddr},Active])),
implicit_inet6(S2, Active, Localaddr),
ok = gen_udp:close(S2),
@@ -630,4 +753,40 @@ implicit_inet6(S1, Active, Addr) ->
{Addr,P2,"pong"} = ok(gen_udp:recv(S1, 1024)),
ok = gen_udp:close(S2).
-ok({ok,V}) -> V.
+ok({ok,V}) -> V;
+ok(NotOk) ->
+ try throw(not_ok)
+ catch
+ Thrown ->
+ erlang:raise(
+ error, {Thrown, NotOk}, tl(erlang:get_stacktrace()))
+ end.
+
+
+local_filename(Tag) ->
+ "/tmp/" ?MODULE_STRING "_" ++ os:getpid() ++ "_" ++ atom_to_list(Tag).
+
+bin_filename(String) ->
+ unicode:characters_to_binary(String, file:native_name_encoding()).
+
+delete_local_filenames() ->
+ _ =
+ [file:delete(F) ||
+ F <-
+ filelib:wildcard(
+ "/tmp/" ?MODULE_STRING "_" ++ os:getpid() ++ "_*")],
+ ok.
+
+get_localaddr() ->
+ get_localaddr(["localhost", "localhost6", "ip6-localhost"]).
+
+get_localaddr([]) ->
+ {error, localaddr_not_found};
+get_localaddr([Localhost|Ls]) ->
+ case inet:getaddr(Localhost, inet6) of
+ {ok, LocalAddr} ->
+ io:format("~s ~p~n", [Localhost, LocalAddr]),
+ {ok, LocalAddr};
+ _ ->
+ get_localaddr(Ls)
+ end.
diff --git a/lib/kernel/test/heart_SUITE.erl b/lib/kernel/test/heart_SUITE.erl
index 548b27db97..45032faf6d 100644
--- a/lib/kernel/test/heart_SUITE.erl
+++ b/lib/kernel/test/heart_SUITE.erl
@@ -29,11 +29,11 @@
set_cmd/1, clear_cmd/1, get_cmd/1,
callback_api/1,
options_api/1,
- dont_drop/1, kill_pid/1]).
+ dont_drop/1, kill_pid/1, heart_no_kill/1]).
-export([init_per_testcase/2, end_per_testcase/2]).
--export([start_heart_stress/1, mangle/1, suicide_by_heart/0]).
+-export([start_heart_stress/1, mangle/1, suicide_by_heart/0, non_suicide_by_heart/0]).
-define(DEFAULT_TIMEOUT_SECS, 120).
@@ -74,7 +74,8 @@ all() -> [
set_cmd, clear_cmd, get_cmd,
callback_api,
options_api,
- kill_pid
+ kill_pid,
+ heart_no_kill
].
groups() ->
@@ -491,6 +492,30 @@ do_kill_pid(_Config) ->
false
end.
+
+heart_no_kill(suite) ->
+ [];
+heart_no_kill(doc) ->
+ ["Tests that heart doesn't kill the old erlang node when ",
+ "HEART_NO_KILL is set."];
+heart_no_kill(Config) when is_list(Config) ->
+ ok = do_no_kill(Config).
+
+do_no_kill(_Config) ->
+ Name = heart_test,
+ {ok,Node} = start_node_run(Name,[],non_suicide_by_heart,[]),
+ io:format("Node is ~p~n", [Node]),
+ ok = wait_for_node(Node,15),
+ io:format("wait_for_node is ~p~n", [ok]),
+ erlang:monitor_node(Node, true),
+ receive {nodedown,Node} -> false
+ after 30000 ->
+ io:format("Node didn't die..\n"),
+ rpc:call(Node,init,stop,[]),
+ io:format("done init:stop..\n"),
+ ok
+ end.
+
wait_for_node(_,0) ->
false;
wait_for_node(Node,N) ->
@@ -609,6 +634,20 @@ suicide_by_heart() ->
sallad
end.
+non_suicide_by_heart() ->
+ P = open_port({spawn,"heart -ht 11 -pid "++os:getpid()},
+ [exit_status, {env, [{"HEART_NO_KILL", "TRUE"}]},
+ {packet,2}]),
+ receive X -> X end,
+ %% Just hang and wait for heart to timeout
+ receive
+ {P,{exit_status,_}} ->
+ ok
+ after
+ 20000 ->
+ exit(timeout)
+ end.
+
%% generate a module from binary
generate(Module, Attributes, FunStrings) ->
diff --git a/lib/kernel/test/inet_SUITE.erl b/lib/kernel/test/inet_SUITE.erl
index c93b10fa1c..f60c13d2e3 100644
--- a/lib/kernel/test/inet_SUITE.erl
+++ b/lib/kernel/test/inet_SUITE.erl
@@ -139,11 +139,13 @@ t_gethostbyaddr(Config) when is_list(Config) ->
ok;
_ ->
io:format("alias list: ~p", [HEnt#hostent.h_aliases]),
- io:format("check alias list: ~p", [[Aliases,[Rname]]]),
+ io:format(
+ "check alias list: ~p", [[Aliases,tl(Aliases),[Rname]]]),
io:format("name: ~p", [HEnt#hostent.h_name]),
io:format("check name: ~p", [[Name,FullName]]),
- check_elems([{HEnt#hostent.h_name,[Name,FullName]},
- {HEnt#hostent.h_aliases,[[],Aliases,[Rname]]}])
+ check_elems(
+ [{HEnt#hostent.h_name,[Name,FullName]},
+ {HEnt#hostent.h_aliases,[[],Aliases,tl(Aliases),[Rname]]}])
end,
{_DName, _DFullName, DIPStr, DIP, _, _, _} = ct:get_config(test_dummy_host),
@@ -171,8 +173,9 @@ t_gethostbyaddr_v6(Config) when is_list(Config) ->
h_length = 16,
h_addr_list = [IP6]},
HEnt6_ = HEnt6,
- check_elems([{HEnt6#hostent.h_name,[Name6,FullName6]},
- {HEnt6#hostent.h_aliases,[[],Aliases6]}]),
+ check_elems(
+ [{HEnt6#hostent.h_name,[Name6,FullName6]},
+ {HEnt6#hostent.h_aliases,[[],Aliases6,tl(Aliases6)]}]),
{_DName6, _DFullName6, DIPStr6, DIP6, _} =
ct:get_config(test_dummy_ipv6_host),
@@ -195,14 +198,14 @@ t_gethostbyname(Config) when is_list(Config) ->
HEnt_ = HEnt,
check_elems([{HEnt#hostent.h_name,[Name,FullName]},
- {HEnt#hostent.h_aliases,[[],Aliases]}]),
+ {HEnt#hostent.h_aliases,[[],Aliases,tl(Aliases)]}]),
{ok,HEntF} = inet:gethostbyname(FullName),
HEntF_ = HEntF#hostent{h_name = FullName,
h_addrtype = inet,
h_length = 4,
h_addr_list = [IP]},
HEntF_ = HEntF,
- check_elems([{HEnt#hostent.h_aliases,[[],Aliases]}]),
+ check_elems([{HEnt#hostent.h_aliases,[[],Aliases,tl(Aliases)]}]),
%%
FullNameU = toupper(FullName),
{ok,HEntU} = inet:gethostbyname(FullNameU),
@@ -237,7 +240,7 @@ t_gethostbyname_v6(Config) when is_list(Config) ->
h_length = 16} = HEnt,
check_elems(
[{HEnt#hostent.h_name,[Name,FullName]},
- {HEnt#hostent.h_aliases,[[],Aliases]}]);
+ {HEnt#hostent.h_aliases,[[],Aliases,tl(Aliases)]}]);
[IP46] -> % IPv4 compatible address
{ok,HEnt4} = inet:gethostbyname(Name, inet),
#hostent{h_addrtype = inet,
@@ -257,7 +260,7 @@ t_gethostbyname_v6(Config) when is_list(Config) ->
h_addrtype = inet6,
h_length = 16} = HEntF,
check_elems(
- [{HEnt#hostent.h_aliases,[[],Aliases]}]);
+ [{HEnt#hostent.h_aliases,[[],Aliases,tl(Aliases)]}]);
[IP46F] -> % IPv4 compatible address
{ok,HEnt4F} = inet:gethostbyname(FullName, inet),
#hostent{h_addrtype = inet,
@@ -363,7 +366,7 @@ ipv4_to_ipv6(Config) when is_list(Config) ->
h_addr_list = [IP_46]},
HEnt_ = HEnt,
check_elems([{HEnt#hostent.h_name,[IP_46_Str,IPStr]},
- {HEnt#hostent.h_aliases,[[],Aliases]}]);
+ {HEnt#hostent.h_aliases,[[],Aliases,tl(Aliases)]}]);
{_,IP4to6Res} -> ok
end,
ok.
@@ -1002,12 +1005,12 @@ getifaddrs(Config) when is_list (Config) ->
[check_addr(Addr) || Addr <- Addrs],
ok.
-check_addr(Addr)
+check_addr({addr,Addr})
when tuple_size(Addr) =:= 8,
element(1, Addr) band 16#FFC0 =:= 16#FE80 ->
io:format("Addr: ~p link local; SKIPPED!~n", [Addr]),
ok;
-check_addr(Addr) ->
+check_addr({addr,Addr}) ->
io:format("Addr: ~p.~n", [Addr]),
Ping = "ping",
Pong = "pong",
@@ -1021,74 +1024,82 @@ check_addr(Addr) ->
ok = gen_tcp:close(S1),
{ok,Pong} = gen_tcp:recv(S2, length(Pong)),
ok = gen_tcp:close(S2),
- ok = gen_tcp:close(L),
- ok.
+ ok = gen_tcp:close(L).
-record(ifopts, {name,flags,addrs=[],hwaddr}).
ifaddrs([]) -> [];
ifaddrs([{If,Opts}|IOs]) ->
- #ifopts{flags=Flags} = Ifopts =
- check_ifopts(Opts, #ifopts{name=If}),
- case Flags =/= undefined andalso lists:member(up, Flags) of
- true ->
- Ifopts#ifopts.addrs;
- false ->
- []
- end++ifaddrs(IOs).
+ #ifopts{flags=F} = Ifopts = check_ifopts(Opts, #ifopts{name=If}),
+ case F of
+ {flags,Flags} ->
+ case lists:member(up, Flags) of
+ true ->
+ Ifopts#ifopts.addrs;
+ false ->
+ []
+ end ++ ifaddrs(IOs);
+ undefined ->
+ ifaddrs(IOs)
+ end.
-check_ifopts([], #ifopts{name=If,flags=Flags,addrs=Raddrs}=Ifopts) ->
+check_ifopts([], #ifopts{flags=F,addrs=Raddrs}=Ifopts) ->
Addrs = lists:reverse(Raddrs),
R = Ifopts#ifopts{addrs=Addrs},
io:format("~p.~n", [R]),
%% See how we did...
- if is_list(Flags) -> ok;
- true ->
- ct:fail({flags_undefined,If})
- end,
+ {flags,Flags} = F,
case lists:member(broadcast, Flags) of
true ->
[case A of
- {_,_,_} -> A;
- {T,_} when tuple_size(T) =:= 8 -> A;
- _ ->
- ct:fail({broaddr_missing,If,A})
+ {{addr,_},{netmask,_},{broadaddr,_}} ->
+ A;
+ {{addr,T},{netmask,_}} when tuple_size(T) =:= 8 ->
+ A
end || A <- Addrs];
false ->
- [case A of {_,_} -> A;
- _ ->
- ct:fail({should_have_netmask,If,A})
- end || A <- Addrs]
+ case lists:member(pointtopoint, Flags) of
+ true ->
+ [case A of
+ {{addr,_},{netmask,_},{dstaddr,_}} ->
+ A
+ end || A <- Addrs];
+ false ->
+ [case A of
+ {{addr,_},{netmask,_}} ->
+ A
+ end || A <- Addrs]
+ end
end,
R;
-check_ifopts([{flags,Flags}|Opts], #ifopts{flags=undefined}=Ifopts) ->
- check_ifopts(Opts, Ifopts#ifopts{flags=Flags});
-check_ifopts([{flags,Fs}|Opts], #ifopts{flags=Flags}=Ifopts) ->
- case Fs of
+check_ifopts([{flags,_}=F|Opts], #ifopts{flags=undefined}=Ifopts) ->
+ check_ifopts(Opts, Ifopts#ifopts{flags=F});
+check_ifopts([{flags,_}=F|Opts], #ifopts{flags=Flags}=Ifopts) ->
+ case F of
Flags ->
- check_ifopts(Opts, Ifopts#ifopts{});
+ check_ifopts(Opts, Ifopts);
_ ->
- ct:fail({multiple_flags,Fs,Ifopts})
+ ct:fail({multiple_flags,F,Ifopts})
end;
check_ifopts(
- [{addr,Addr},{netmask,Netmask},{broadaddr,Broadaddr}|Opts],
+ [{addr,_}=A,{netmask,_}=N,{dstaddr,_}=D|Opts],
#ifopts{addrs=Addrs}=Ifopts) ->
- check_ifopts(Opts, Ifopts#ifopts{addrs=[{Addr,Netmask,Broadaddr}|Addrs]});
+ check_ifopts(Opts, Ifopts#ifopts{addrs=[{A,N,D}|Addrs]});
check_ifopts(
- [{addr,Addr},{netmask,Netmask},{dstaddr,_}|Opts],
+ [{addr,_}=A,{netmask,_}=N,{broadaddr,_}=B|Opts],
#ifopts{addrs=Addrs}=Ifopts) ->
- check_ifopts(Opts, Ifopts#ifopts{addrs=[{Addr,Netmask}|Addrs]});
+ check_ifopts(Opts, Ifopts#ifopts{addrs=[{A,N,B}|Addrs]});
check_ifopts(
- [{addr,Addr},{netmask,Netmask}|Opts],
+ [{addr,_}=A,{netmask,_}=N|Opts],
#ifopts{addrs=Addrs}=Ifopts) ->
- check_ifopts(Opts, Ifopts#ifopts{addrs=[{Addr,Netmask}|Addrs]});
-check_ifopts([{addr,Addr}|Opts], #ifopts{addrs=Addrs}=Ifopts) ->
- check_ifopts(Opts, Ifopts#ifopts{addrs=[{Addr}|Addrs]});
-check_ifopts([{hwaddr,Hwaddr}|Opts], #ifopts{hwaddr=undefined}=Ifopts)
+ check_ifopts(Opts, Ifopts#ifopts{addrs=[{A,N}|Addrs]});
+check_ifopts([{addr,_}=A|Opts], #ifopts{addrs=Addrs}=Ifopts) ->
+ check_ifopts(Opts, Ifopts#ifopts{addrs=[{A}|Addrs]});
+check_ifopts([{hwaddr,Hwaddr}=H|Opts], #ifopts{hwaddr=undefined}=Ifopts)
when is_list(Hwaddr) ->
- check_ifopts(Opts, Ifopts#ifopts{hwaddr=Hwaddr});
-check_ifopts([{hwaddr,HwAddr}|_], #ifopts{}=Ifopts) ->
- ct:fail({multiple_hwaddrs,HwAddr,Ifopts}).
+ check_ifopts(Opts, Ifopts#ifopts{hwaddr=H});
+check_ifopts([{hwaddr,_}=H|_], #ifopts{}=Ifopts) ->
+ ct:fail({multiple_hwaddrs,H,Ifopts}).
%% Works just like lists:member/2, except that any {127,_,_,_} tuple
%% matches any other {127,_,_,_}. We do this to handle Linux systems
diff --git a/lib/kernel/test/inet_res_SUITE.erl b/lib/kernel/test/inet_res_SUITE.erl
index 9662d1fef5..6691ad9c06 100644
--- a/lib/kernel/test/inet_res_SUITE.erl
+++ b/lib/kernel/test/inet_res_SUITE.erl
@@ -42,6 +42,21 @@
-define(RUN_NAMED, "run-named").
+%% This test suite use a script ?RUN_NAMED that tries to start
+%% a temporary local nameserver BIND 8 or 9 that must be installed
+%% on your machine.
+%%
+%% For example, on Ubuntu 14.04, as root:
+%% apt-get install bind9
+%% Now, that is not enough since Apparmor will not allow
+%% the nameserver daemon /usr/sbin/named to read from the test directory.
+%% Assuming that you run tests in /ldisk/daily_build, and still on
+%% Ubuntu 14.04, make /usr/apparmor.d/local/usr.sbin.named contain:
+%% /ldisk/daily_build/** r,
+%% And yes; the trailing comma must be there...
+
+
+
suite() ->
[{ct_hooks,[ts_install_cth]},
{timetrap,{minutes,1}}].
diff --git a/lib/kernel/test/init_SUITE.erl b/lib/kernel/test/init_SUITE.erl
index e7b44a714c..2b59eb2bfe 100644
--- a/lib/kernel/test/init_SUITE.erl
+++ b/lib/kernel/test/init_SUITE.erl
@@ -27,7 +27,8 @@
-export([get_arguments/1, get_argument/1, boot_var/1, restart/1,
many_restarts/0, many_restarts/1,
get_plain_arguments/1,
- reboot/1, stop/1, get_status/1, script_id/1]).
+ reboot/1, stop_status/1, stop/1, get_status/1, script_id/1,
+ find_system_processes/0]).
-export([boot1/1, boot2/1]).
-export([init_per_testcase/2, end_per_testcase/2]).
@@ -48,7 +49,7 @@ suite() ->
all() ->
[get_arguments, get_argument, boot_var,
many_restarts,
- get_plain_arguments, restart, get_status, script_id,
+ get_plain_arguments, restart, stop_status, get_status, script_id,
{group, boot}].
groups() ->
@@ -298,7 +299,7 @@ many_restarts() ->
many_restarts(Config) when is_list(Config) ->
{ok, Node} = loose_node:start(init_test, "", ?DEFAULT_TIMEOUT_SEC),
- loop_restart(30,Node,rpc:call(Node,erlang,whereis,[error_logger])),
+ loop_restart(50,Node,rpc:call(Node,erlang,whereis,[error_logger])),
loose_node:stop(Node),
ok.
@@ -355,12 +356,16 @@ wait_for(N,Node,EHPid) ->
restart(Config) when is_list(Config) ->
Args = args(),
+ Pa = " -pa " ++ filename:dirname(code:which(?MODULE)),
+
%% Currently test_server:start_node cannot be used. The restarted
%% node immediately halts due to the implementation of
%% test_server:start_node.
- {ok, Node} = loose_node:start(init_test, Args, ?DEFAULT_TIMEOUT_SEC),
+ {ok, Node} = loose_node:start(init_test, Args ++ Pa, ?DEFAULT_TIMEOUT_SEC),
%% Ok, the node is up, now the real test test begins.
erlang:monitor_node(Node, true),
+ SysProcs0 = rpc:call(Node, ?MODULE, find_system_processes, []),
+ [InitPid, PurgerPid, LitCollectorPid, DirtyCodePid] = SysProcs0,
InitPid = rpc:call(Node, erlang, whereis, [init]),
PurgerPid = rpc:call(Node, erlang, whereis, [erts_code_purger]),
Procs = rpc:call(Node, erlang, processes, []),
@@ -375,6 +380,9 @@ restart(Config) when is_list(Config) ->
end,
ok = wait_restart(30, Node),
+ SysProcs1 = rpc:call(Node, ?MODULE, find_system_processes, []),
+ [InitPid1, PurgerPid1, LitCollectorPid1, DirtyCodePid1] = SysProcs1,
+
%% Still the same init process!
InitPid1 = rpc:call(Node, erlang, whereis, [init]),
InitP = pid_to_list(InitPid),
@@ -385,8 +393,24 @@ restart(Config) when is_list(Config) ->
PurgerP = pid_to_list(PurgerPid),
PurgerP = pid_to_list(PurgerPid1),
+ %% and same literal area collector process!
+ case LitCollectorPid of
+ undefined -> undefined = LitCollectorPid1;
+ _ ->
+ LitCollectorP = pid_to_list(LitCollectorPid),
+ LitCollectorP = pid_to_list(LitCollectorPid1)
+ end,
+
+ %% and same dirty process code checker process!
+ case DirtyCodePid of
+ undefined -> undefined = DirtyCodePid1;
+ _ ->
+ DirtyCodeP = pid_to_list(DirtyCodePid),
+ DirtyCodeP = pid_to_list(DirtyCodePid1)
+ end,
+
NewProcs0 = rpc:call(Node, erlang, processes, []),
- NewProcs = NewProcs0 -- [InitPid1, PurgerPid1],
+ NewProcs = NewProcs0 -- SysProcs1,
case check_processes(NewProcs, MaxPid) of
true ->
ok;
@@ -406,6 +430,37 @@ restart(Config) when is_list(Config) ->
loose_node:stop(Node),
ok.
+-record(sys_procs, {init,
+ code_purger,
+ literal_collector,
+ dirty_proc_checker}).
+
+find_system_processes() ->
+ find_system_procs(processes(), #sys_procs{}).
+
+find_system_procs([], SysProcs) ->
+ [SysProcs#sys_procs.init,
+ SysProcs#sys_procs.code_purger,
+ SysProcs#sys_procs.literal_collector,
+ SysProcs#sys_procs.dirty_proc_checker];
+find_system_procs([P|Ps], SysProcs) ->
+ case process_info(P, initial_call) of
+ {initial_call,{otp_ring0,start,2}} ->
+ undefined = SysProcs#sys_procs.init,
+ find_system_procs(Ps, SysProcs#sys_procs{init = P});
+ {initial_call,{erts_code_purger,start,0}} ->
+ undefined = SysProcs#sys_procs.code_purger,
+ find_system_procs(Ps, SysProcs#sys_procs{code_purger = P});
+ {initial_call,{erts_literal_area_collector,start,0}} ->
+ undefined = SysProcs#sys_procs.literal_collector,
+ find_system_procs(Ps, SysProcs#sys_procs{literal_collector = P});
+ {initial_call,{erts_dirty_process_code_checker,start,0}} ->
+ undefined = SysProcs#sys_procs.dirty_proc_checker,
+ find_system_procs(Ps, SysProcs#sys_procs{dirty_proc_checker = P});
+ _ ->
+ find_system_procs(Ps, SysProcs)
+ end.
+
wait_restart(0, _Node) ->
ct:fail(not_restarted);
wait_restart(N, Node) ->
@@ -465,6 +520,20 @@ reboot(Config) when is_list(Config) ->
%% ------------------------------------------------
%%
%% ------------------------------------------------
+stop_status(Config) when is_list(Config) ->
+ badarg = catch_stop([65,[66],67]), % flat strings only
+ badarg = catch_stop([65, 666, 67]), % only bytes in string
+ badarg = catch_stop(abort), % 'abort' not allowed
+ badarg = catch_stop(true), % other atoms not allowed
+ badarg = catch_stop(-1), % no negative statuses
+ ok.
+
+catch_stop(Status) ->
+ try init:stop(Status) catch error:badarg -> badarg end.
+
+%% ------------------------------------------------
+%%
+%% ------------------------------------------------
stop(Config) when is_list(Config) ->
Args = args(),
{ok, Node} = start_node(init_test, Args),
diff --git a/lib/kernel/test/loose_node.erl b/lib/kernel/test/loose_node.erl
index 93530c2735..cc3f9bbea0 100644
--- a/lib/kernel/test/loose_node.erl
+++ b/lib/kernel/test/loose_node.erl
@@ -57,9 +57,16 @@
%%
stop(Node) when is_atom(Node) ->
+ erlang:monitor_node(Node, true),
rpc:cast(Node, erlang, halt, []),
- io:format("Stopped loose node ~p~n", [Node]),
- ok.
+ receive
+ {nodedown, Node} ->
+ io:format("Stopped loose node ~p~n", [Node]),
+ ok
+ after 10000 ->
+ io:format("Failed to stop loose node: ~p~n", [Node]),
+ {error, node_not_stopped}
+ end.
start(Name, Args) ->
start(Name, Args, -1).
diff --git a/lib/kernel/test/os_SUITE.erl b/lib/kernel/test/os_SUITE.erl
index 2a1e5016ec..e76d6ec482 100644
--- a/lib/kernel/test/os_SUITE.erl
+++ b/lib/kernel/test/os_SUITE.erl
@@ -24,7 +24,8 @@
init_per_testcase/2,end_per_testcase/2]).
-export([space_in_cwd/1, quoting/1, cmd_unicode/1, space_in_name/1, bad_command/1,
find_executable/1, unix_comment_in_command/1, deep_list_command/1,
- large_output_command/1, perf_counter_api/1]).
+ large_output_command/1, background_command/0, background_command/1,
+ message_leak/1, close_stdin/0, close_stdin/1, perf_counter_api/1]).
-include_lib("common_test/include/ct.hrl").
@@ -35,7 +36,8 @@ suite() ->
all() ->
[space_in_cwd, quoting, cmd_unicode, space_in_name, bad_command,
find_executable, unix_comment_in_command, deep_list_command,
- large_output_command, perf_counter_api].
+ large_output_command, background_command, message_leak,
+ close_stdin, perf_counter_api].
groups() ->
[].
@@ -52,6 +54,14 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
+init_per_testcase(TC, Config)
+ when TC =:= background_command; TC =:= close_stdin ->
+ case os:type() of
+ {win32, _} ->
+ {skip,"Should not work on windows"};
+ _ ->
+ Config
+ end;
init_per_testcase(_TC,Config) ->
Config.
@@ -261,13 +271,48 @@ deep_list_command(Config) when is_list(Config) ->
%% FYI: [$e, $c, "ho"] =:= io_lib:format("ec~s", ["ho"])
ok.
-%% Test to take sure that the correct data is
+%% Test to make sure that the correct data is
%% received when doing large commands.
large_output_command(Config) when is_list(Config) ->
%% Maximum allowed on windows is 8192, so we test well below that
AAA = lists:duplicate(7000, $a),
comp(AAA,os:cmd("echo " ++ AAA)).
+%% Test that it is possible on unix to start a background task using os:cmd.
+background_command() ->
+ [{timetrap, {seconds, 5}}].
+background_command(_Config) ->
+ %% This testcase fails when the os:cmd takes
+ %% longer then the 5 second timeout
+ os:cmd("sleep 10&").
+
+%% Test that message does not leak to the calling process
+message_leak(_Config) ->
+ process_flag(trap_exit, true),
+
+ os:cmd("echo hello"),
+ [] = receive_all(),
+
+ case os:type() of
+ {unix, _} ->
+ os:cmd("for i in $(seq 1 100); do echo hello; done&"),
+ [] = receive_all();
+ _ ->
+ ok % Cannot background on non-unix
+ end,
+
+ process_flag(trap_exit, false).
+
+%% Test that os:cmd closes stdin of the program that is executed
+close_stdin() ->
+ [{timetrap, {seconds, 5}}].
+close_stdin(Config) ->
+ DataDir = proplists:get_value(data_dir, Config),
+ Fds = filename:join(DataDir, "my_fds"),
+
+ "-1" = os:cmd(Fds).
+
+
%% Test that the os:perf_counter api works as expected
perf_counter_api(_Config) ->
diff --git a/lib/kernel/test/os_SUITE_data/Makefile.src b/lib/kernel/test/os_SUITE_data/Makefile.src
index 912d0cbcb1..f83f781411 100644
--- a/lib/kernel/test/os_SUITE_data/Makefile.src
+++ b/lib/kernel/test/os_SUITE_data/Makefile.src
@@ -3,7 +3,7 @@ LD = @LD@
CFLAGS = @CFLAGS@ -I@erl_include@ @DEFS@
CROSSLDFLAGS = @CROSSLDFLAGS@
-PROGS = my_echo@exe@
+PROGS = my_echo@exe@ my_fds@exe@
all: $(PROGS)
@@ -12,3 +12,9 @@ my_echo@exe@: my_echo@obj@
my_echo@obj@: my_echo.c
$(CC) -c -o my_echo@obj@ $(CFLAGS) my_echo.c
+
+my_fds@exe@: my_fds@obj@
+ $(LD) $(CROSSLDFLAGS) -o my_fds my_fds@obj@ @LIBS@
+
+my_fds@obj@: my_fds.c
+ $(CC) -c -o my_fds@obj@ $(CFLAGS) my_fds.c
diff --git a/lib/kernel/test/os_SUITE_data/my_fds.c b/lib/kernel/test/os_SUITE_data/my_fds.c
new file mode 100644
index 0000000000..704a4d1e1d
--- /dev/null
+++ b/lib/kernel/test/os_SUITE_data/my_fds.c
@@ -0,0 +1,9 @@
+#include <stdio.h>
+
+int
+main(int argc, char** argv)
+{
+ char buff[1];
+ int res = read(stdin, buff, 1);
+ printf("%d", res);
+}
diff --git a/lib/kernel/test/prim_file_SUITE.erl b/lib/kernel/test/prim_file_SUITE.erl
index cc7f2f6713..8be94f1e57 100644
--- a/lib/kernel/test/prim_file_SUITE.erl
+++ b/lib/kernel/test/prim_file_SUITE.erl
@@ -1023,7 +1023,7 @@ file_write_file_info_opts(Config) when is_list(Config) ->
Time <- [ 0,1,-1,100,-100,1000,-1000,10000,-10000 ]
]),
- %% REM: determine date range dependent on time_t = Uint32 | Sint32 | Sint64
+ %% REM: determine date range dependent on time_t = Uint32 | Sint32 | Sint64 | Uint64
%% Determine time_t on os:type()?
lists:foreach(fun ({FI, Opts}) ->
ok = ?PRIM_FILE_call(write_file_info, Handle, [Name, FI, Opts])
@@ -1072,9 +1072,10 @@ file_write_read_file_info_opts(Config) when is_list(Config) ->
%ok = file_write_read_file_info_opts(Handle, Name, {{1930, 04, 28}, {19,30,22}}, [{time, local}]),
%ok = file_write_read_file_info_opts(Handle, Name, {{1930, 04, 28}, {19,30,22}}, [{time, universal}]),
ok = file_write_read_file_info_opts(Handle, Name, 1, [{time, posix}]),
- ok = file_write_read_file_info_opts(Handle, Name, -1, [{time, posix}]),
+ %% will not work on platforms with unsigned time_t
+ %ok = file_write_read_file_info_opts(Handle, Name, -1, [{time, posix}]),
+ %ok = file_write_read_file_info_opts(Handle, Name, -300000, [{time, posix}]),
ok = file_write_read_file_info_opts(Handle, Name, 300000, [{time, posix}]),
- ok = file_write_read_file_info_opts(Handle, Name, -300000, [{time, posix}]),
ok = file_write_read_file_info_opts(Handle, Name, 0, [{time, posix}]),
ok = ?PRIM_FILE:stop(Handle),
diff --git a/lib/kernel/vsn.mk b/lib/kernel/vsn.mk
index e7d422d03c..cdd200a234 100644
--- a/lib/kernel/vsn.mk
+++ b/lib/kernel/vsn.mk
@@ -1 +1 @@
-KERNEL_VSN = 5.0
+KERNEL_VSN = 5.0.2
diff --git a/lib/megaco/src/app/megaco.appup.src b/lib/megaco/src/app/megaco.appup.src
index 93bf1d980c..46da79cfe3 100644
--- a/lib/megaco/src/app/megaco.appup.src
+++ b/lib/megaco/src/app/megaco.appup.src
@@ -192,34 +192,11 @@
{"%VSN%",
[
- {"3.17.3", [{restart_application,megaco}]},
- {"3.17.2", []},
- {"3.17.1", [{restart_application,megaco}]},
- {"3.17.0.3", [{restart_application,megaco}]},
- {"3.17.0.2", []},
- {"3.17.0.1", []},
- {"3.17", []},
- {"3.16.0.3",
- [
- {update, megaco_flex_scanner_handler, {advanced, upgrade_from_pre_3_17},
- soft_purge, soft_purge, []}
- ]
- }
+ {<<"3\\..*">>, [{restart_application, megaco}]}
],
+
[
- {"3.17.3", [{restart_application,megaco}]},
- {"3.17.2", []},
- {"3.17.1", [{restart_application,megaco}]},
- {"3.17.0.3", [{restart_application,megaco}]},
- {"3.17.0.2", []},
- {"3.17.0.1", []},
- {"3.17", []},
- {"3.16.0.3",
- [
- {update, megaco_flex_scanner_handler, {advanced, downgrade_to_pre_3_17},
- soft_purge, soft_purge, []}
- ]
- }
+ {<<"3\\..*">>, [{restart_application, megaco}]}
]
}.
diff --git a/lib/mnesia/doc/src/Mnesia_chap1.xml b/lib/mnesia/doc/src/Mnesia_chap1.xml
index 9dfeb5efe4..035e934ed2 100644
--- a/lib/mnesia/doc/src/Mnesia_chap1.xml
+++ b/lib/mnesia/doc/src/Mnesia_chap1.xml
@@ -32,38 +32,38 @@
<rev>C</rev>
<file>Mnesia_chap1.xml</file>
</header>
- <p>The <c>Mnesia</c> application provides a heavy duty real-time
+ <p>The Mnesia application provides a heavy duty real-time
distributed database.</p>
<section>
<title>Scope</title>
<p>This User's Guide describes how to
- build <c>Mnesia</c> database applications, and how to integrate
- and use the <c>Mnesia</c> database management system with
+ build Mnesia database applications, and how to integrate
+ and use the Mnesia database management system with
OTP. Programming constructs are described, and numerous
programming examples are included to illustrate the use of
- <c>Mnesia</c>.</p>
+ Mnesia.</p>
<p>This User's Guide is organized as follows:</p>
<list type="bulleted">
<item><seealso marker="Mnesia_overview">Mnesia</seealso>
provides an introduction to
- <c>Mnesia</c>.
+ Mnesia.
</item>
<item><seealso marker="Mnesia_chap2">Getting Started</seealso>
- introduces <c>Mnesia</c> with an example database. Examples
+ introduces Mnesia with an example database. Examples
are included how to start an Erlang session, specify a
- <c>Mnesia</c> database directory, initialize a database
- schema, start <c>Mnesia</c>, and create tables. Initial
+ Mnesia database directory, initialize a database
+ schema, start Mnesia, and create tables. Initial
prototyping of record definitions is also discussed.
</item>
<item><seealso marker="Mnesia_chap3">Build a Mnesia
Database</seealso> more formally describes the steps
- introduced in the previous section, namely the <c>Mnesia</c>
- functions that define a database schema, start <c>Mnesia</c>,
+ introduced in the previous section, namely the Mnesia
+ functions that define a database schema, start Mnesia,
and create the required tables.
</item>
<item><seealso marker="Mnesia_chap4">Transactions and Other Access Contexts</seealso>
- describes the transactions properties that make <c>Mnesia</c> into
+ describes the transactions properties that make Mnesia into
a fault tolerant, real-time distributed database management
system. This section also describes the concept of locking
to ensure consistency in tables, and "dirty
@@ -76,16 +76,16 @@
features include indexing, checkpoints, distribution and fault
tolerance, disc-less nodes, replication manipulation, local
content tables, concurrency, and object-based programming in
- <c>Mnesia</c>.
+ Mnesia.
</item>
<item><seealso marker="Mnesia_chap7">Mnesia System
Information</seealso> describes the files contained in the
- <c>Mnesia</c> database directory, database configuration data,
+ Mnesia database directory, database configuration data,
core and table dumps, as well as the important subject of
backup, fall-back, and disaster recovery principles.
</item>
<item><seealso marker="Mnesia_chap8">Combine Mnesia with
- SNMP</seealso> is a short section that outlines <c>Mnesia</c>
+ SNMP</seealso> is a short section that outlines Mnesia
integrated with SNMP.
</item>
<item><seealso marker="Mnesia_App_A">Appendix A: Backup
diff --git a/lib/mnesia/doc/src/Mnesia_chap2.xmlsrc b/lib/mnesia/doc/src/Mnesia_chap2.xmlsrc
index ba0746e736..37389ce5ae 100644
--- a/lib/mnesia/doc/src/Mnesia_chap2.xmlsrc
+++ b/lib/mnesia/doc/src/Mnesia_chap2.xmlsrc
@@ -317,7 +317,7 @@
sex = male,
phone = 98108,
room_no = {221, 015}},
- insert_emp(Me, 'B/SFR', [Erlang, mnesia, otp]).</code>
+ insert_emp(Emp, 'B/SFR', [Erlang, mnesia, otp]).</code>
<note><p>For information about Funs, see "Fun Expressions" in
section <c>Erlang Reference Manual</c> in System
Documentation..</p>
diff --git a/lib/mnesia/doc/src/Mnesia_chap8.xml b/lib/mnesia/doc/src/Mnesia_chap8.xml
index f1a469e315..4a2eed84d7 100644
--- a/lib/mnesia/doc/src/Mnesia_chap8.xml
+++ b/lib/mnesia/doc/src/Mnesia_chap8.xml
@@ -51,11 +51,11 @@
</item>
</list>
<p>All these approaches have different advantages and
- disadvantages. <c>Mnesia</c> applications can easily be opened to
+ disadvantages. Mnesia applications can easily be opened to
the SNMP protocol. A direct 1-to-1 mapping can be established
- between <c>Mnesia</c> tables and SNMP tables. This means
- that a <c>Mnesia</c> table can be configured to be <em>both</em>
- a <c>Mnesia</c> table and an SNMP table. A number of functions to
+ between Mnesia tables and SNMP tables. This means
+ that a Mnesia table can be configured to be <em>both</em>
+ a Mnesia table and an SNMP table. A number of functions to
control this behavior are described in the Reference Manual.</p>
</section>
</chapter>
diff --git a/lib/mnesia/doc/src/Mnesia_overview.xml b/lib/mnesia/doc/src/Mnesia_overview.xml
index d2d597b85d..63f2309284 100644
--- a/lib/mnesia/doc/src/Mnesia_overview.xml
+++ b/lib/mnesia/doc/src/Mnesia_overview.xml
@@ -39,14 +39,14 @@
high level of fault tolerance that is required in many nonstop
systems, combined with requirements on the DBMS to run in the same
address space as the application, have led us to implement a new
- DBMS, called <c>Mnesia</c>.</p>
- <p><c>Mnesia</c> is implemented in, and tightly connected to Erlang.
+ DBMS, called Mnesia.</p>
+ <p>Mnesia is implemented in, and tightly connected to Erlang.
It provides the functionality that is necessary for the
implementation of fault tolerant telecommunications systems.</p>
- <p><c>Mnesia</c> is a multiuser distributed DBMS specially made for
+ <p>Mnesia is a multiuser distributed DBMS specially made for
industrial telecommunications applications written in Erlang,
which is also the intended target language.
- <c>Mnesia</c> tries to address all the data
+ Mnesia tries to address all the data
management issues required for typical telecommunications systems.
It has a number of features that are not normally found in traditional
databases.</p>
@@ -54,7 +54,7 @@
from the features provided by traditional DBMSs. The applications now
implemented in Erlang need a mixture of a broad range
of features, which generally are not satisfied by traditional DBMSs.
- <c>Mnesia</c> is designed with requirements like the following in
+ Mnesia is designed with requirements like the following in
mind:</p>
<list type="ordered">
<item>Fast real-time key/value lookup
@@ -71,9 +71,9 @@
<item>Complex objects
</item>
</list>
- <p><c>Mnesia</c> is designed with the typical data management problems
- of telecommunications applications in mind. This sets <c>Mnesia</c>
- apart from most other DBMS. Hence <c>Mnesia</c>
+ <p>Mnesia is designed with the typical data management problems
+ of telecommunications applications in mind. This sets Mnesia
+ apart from most other DBMS. Hence Mnesia
combines many concepts found in traditional databases such as
transactions and queries with concepts found in data management
systems for telecommunications applications, for example:</p>
@@ -86,7 +86,7 @@
suspending it.
</item>
</list>
- <p><c>Mnesia</c> is also interesting because of its tight coupling to
+ <p>Mnesia is also interesting because of its tight coupling to
Erlang, thus almost turning Erlang into a database programming
language. This has many benefits, the foremost is that
the impedance mismatch between the data format used by the DBMS
@@ -97,7 +97,7 @@
<title>Mnesia Database Management System (DBMS)</title>
<section>
<title>Features</title>
- <p><c>Mnesia</c> contains the following features that combine to
+ <p>Mnesia contains the following features that combine to
produce a fault-tolerant, distributed DBMS written in Erlang:
</p>
<list type="bulleted">
@@ -118,7 +118,7 @@
functions can be called within one transaction.
</item>
<item>Several transactions can run concurrently, and their execution
- is fully synchronized by the DBMS. <c>Mnesia</c> ensures that no
+ is fully synchronized by the DBMS. Mnesia ensures that no
two processes manipulate data simultaneously.
</item>
<item>Transactions can be assigned the property of being executed on
@@ -132,29 +132,29 @@
<section>
<title>Add-On Application</title>
- <p>Query List Comprehension (QLC) can be used with <c>Mnesia</c>
+ <p>Query List Comprehension (QLC) can be used with Mnesia
to produce specialized functions that enhance the operational
- ability of <c>Mnesia</c>. QLC has its own documentation as part
+ ability of Mnesia. QLC has its own documentation as part
of the OTP documentation set. The main features of QLC
- when used with <c>Mnesia</c> are as follows:</p>
+ when used with Mnesia are as follows:</p>
<list type="bulleted">
- <item>QLC can optimize the query compiler for the <c>Mnesia</c>
+ <item>QLC can optimize the query compiler for the Mnesia
DBMS, essentially making the DBMS more efficient.
</item>
<item>QLC can be used as a database programming
- language for <c>Mnesia</c>. It includes a notation called "list
+ language for Mnesia. It includes a notation called "list
comprehensions" and can be used to make complex database
queries over a set of tables.
</item>
</list>
<p>For information about QLC, see the
<seealso marker="stdlib:qlc">qlc</seealso> manual page
- in <c>STDLIB</c>.</p>
+ in STDLIB.</p>
</section>
<section>
<title>When to Use Mnesia</title>
- <p>Use <c>Mnesia</c> with the following types of applications:</p>
+ <p>Use Mnesia with the following types of applications:</p>
<list type="bulleted">
<item>Applications that need to replicate data.
</item>
@@ -166,7 +166,7 @@
<item>Applications that use soft real-time characteristics.
</item>
</list>
- <p><c>Mnesia</c> is not as appropriate with the
+ <p>Mnesia is not as appropriate with the
following types of applications:</p>
<list type="bulleted">
<item>Programs that process plain text or binary data files.
@@ -176,14 +176,14 @@
library module <c>dets</c>, which is a disc-based version
of the module <c>ets</c>. For information about <c>dets</c>,
see the <seealso marker="stdlib:dets">dets</seealso>
- manual page in <c>STDLIB</c>.
+ manual page in STDLIB.
</item>
<item>Applications that need disc logging facilities.
Those applications can
use the module <c>disk_log</c> by preference. For
information about <c>disk_log</c>, see the
<seealso marker="kernel:disk_log">disk_log</seealso>
- manual page in <c>Kernel</c>.
+ manual page in Kernel.
</item>
<item>Hard real-time systems.
</item>
diff --git a/lib/mnesia/doc/src/mnesia.xml b/lib/mnesia/doc/src/mnesia.xml
index 437df63aab..621b6047ee 100644
--- a/lib/mnesia/doc/src/mnesia.xml
+++ b/lib/mnesia/doc/src/mnesia.xml
@@ -37,7 +37,7 @@
<description>
<p>The following are some of the most important and attractive
- capabilities provided by <c>Mnesia</c>:</p>
+ capabilities provided by Mnesia:</p>
<list type="bulleted">
<item>A relational/object hybrid data model that is suitable
for telecommunications applications.
@@ -62,15 +62,15 @@
reconfigured at runtime without stopping the system.
</item>
</list>
- <p>This Reference Manual describes the <c>Mnesia</c> API. This
- includes functions that define and manipulate <c>Mnesia</c>
+ <p>This Reference Manual describes the Mnesia API. This
+ includes functions that define and manipulate Mnesia
tables.</p>
<p>All functions in this Reference Manual can be used in any
combination with queries using the list comprehension notation.
For information about the query notation, see the
<seealso marker="stdlib:qlc">qlc</seealso>
- manual page in <c>STDLIB</c>.</p>
- <p>Data in <c>Mnesia</c> is organized as a set of tables. Each table
+ manual page in STDLIB.</p>
+ <p>Data in Mnesia is organized as a set of tables. Each table
has a name that must be an atom. Each table is made up of
Erlang records. The user is responsible for the record
definitions. Each table also has a set of properties. The
@@ -121,14 +121,14 @@
<item>
<p><c>index</c>. This is a list of attribute names, or
integers, which specify the tuple positions on which
- <c>Mnesia</c> is to build and maintain an extra index
+ Mnesia is to build and maintain an extra index
table.</p>
</item>
<item>
<p><c>local_content</c>. When an application requires
tables whose contents are local to each node,
<c>local_content</c> tables can be used. The table name
- is known to all <c>Mnesia</c> nodes, but its content is
+ is known to all Mnesia nodes, but its content is
unique on each node. This means that access to such a table
must be done locally. Set field <c>local_content</c> to
<c>true</c> to enable the <c>local_content</c>
@@ -143,7 +143,7 @@
avoid inconsistencies because of network splits.</p>
</item>
<item>
- <p><c>snmp</c>. Each (set-based) <c>Mnesia</c> table can be
+ <p><c>snmp</c>. Each (set-based) Mnesia table can be
automatically turned into a Simple Network Management
Protocol (SNMP) ordered table as well.
This property specifies the types of the SNMP keys.</p>
@@ -174,7 +174,7 @@
copy of each modified record during the transaction. During
iteration, that is, <c>mnesia:fold[lr]/4</c>,
<c>mnesia:next/2</c>, <c>mnesia:prev/2</c>, and
- <c>mnesia:snmp_get_next_index/2</c>, <c>Mnesia</c>
+ <c>mnesia:snmp_get_next_index/2</c>, Mnesia
compensates for every written or deleted record, which can
reduce the performance.</p>
<p>If possible, avoid writing or deleting records in the same
@@ -188,7 +188,7 @@
<desc>
<p>Makes the transaction silently
return the tuple <c>{aborted, Reason}</c>.
- Termination of a <c>Mnesia</c> transaction means that
+ Termination of a Mnesia transaction means that
an exception is thrown to an enclosing <c>catch</c>.
Thus, the expression <c>catch mnesia:abort(x)</c> does
not terminate the transaction.</p>
@@ -324,7 +324,7 @@
<c>mnesia:ets</c>. Argument <c>AccessMod</c>
is the name of a callback module, which implements the
<c>mnesia_access</c> behavior.</p>
- <p><c>Mnesia</c> forwards calls to the following functions:</p>
+ <p>Mnesia forwards calls to the following functions:</p>
<list type="bulleted">
<item>mnesia:lock/2 (read_lock_table/1, write_lock_table/1)
</item>
@@ -391,15 +391,15 @@
</item>
</list>
<p><c>ActivityId</c> is a record that represents the identity
- of the enclosing <c>Mnesia</c> activity. The first field
+ of the enclosing Mnesia activity. The first field
(obtained with <c>element(1, ActivityId)</c>) contains an
atom, which can be interpreted as the activity type:
<c>ets</c>, <c>async_dirty</c>, <c>sync_dirty</c>, or
<c>tid</c>. <c>tid</c> means that the activity is a
transaction. The structure of the rest of the identity
- record is internal to <c>Mnesia</c>.</p>
+ record is internal to Mnesia.</p>
<p><c>Opaque</c> is an opaque data structure that is internal
- to <c>Mnesia</c>.</p>
+ to Mnesia.</p>
</desc>
</func>
<func>
@@ -458,7 +458,7 @@ mnesia:add_table_index(person, age)</code>
<desc>
<marker id="async_dirty"></marker>
<p>Calls the <c>Fun</c> in a context that is not protected by
- a transaction. The <c>Mnesia</c> function calls performed in
+ a transaction. The Mnesia function calls performed in
the <c>Fun</c> are mapped to the corresponding dirty
functions. This still involves logging, replication, and
subscriptions, but there is no locking, local transaction
@@ -467,7 +467,7 @@ mnesia:add_table_index(person, age)</code>
for normal <c>mnesia:dirty_*</c> operations, the operations
are performed semi-asynchronously. For details, see
<c>mnesia:activity/4</c> and the User's Guide.</p>
- <p>The <c>Mnesia</c> tables can be manipulated without
+ <p>The Mnesia tables can be manipulated without
using transactions. This has some serious disadvantages, but
is considerably faster, as the transaction manager is not
involved and no locks are set. A dirty operation does,
@@ -480,7 +480,7 @@ mnesia:add_table_index(person, age)</code>
read records dirty than within a transaction.</p>
<p>Depending on the application, it can be a good idea to use
the dirty functions for certain operations. Almost all
- <c>Mnesia</c> functions that can be called within
+ Mnesia functions that can be called within
transactions have a dirty equivalent, which is much more
efficient.</p>
<p>However, notice that there is a risk that the database can
@@ -497,7 +497,7 @@ mnesia:add_table_index(person, age)</code>
<fsummary>Backs up all tables in the database.</fsummary>
<desc>
<marker id="backup"></marker>
- <p>Activates a new checkpoint covering all <c>Mnesia</c> tables,
+ <p>Activates a new checkpoint covering all Mnesia tables,
including the schema, with maximum degree of redundancy, and
performs a backup using <c>backup_checkpoint/2/3</c>. The
default value of the backup callback module <c>BackupMod</c>
@@ -529,16 +529,16 @@ mnesia:add_table_index(person, age)</code>
<taglist>
<tag><c>extra_db_nodes</c></tag>
<item>
- <p><c>Value</c> is a list of nodes that <c>Mnesia</c>
+ <p><c>Value</c> is a list of nodes that Mnesia
is to try to connect to. <c>ReturnValue</c> is those
- nodes in <c>Value</c> that <c>Mnesia</c> is connected
+ nodes in <c>Value</c> that Mnesia is connected
to.</p>
<p>Notice that this function must only be used to connect
to newly started RAM nodes (N.D.R.S.N.) with an empty
schema. If, for example, this function is used after
the network has been partitioned, it can lead to
inconsistent tables.</p>
- <p>Notice that <c>Mnesia</c> can be connected to other
+ <p>Notice that Mnesia can be connected to other
nodes than those returned in <c>ReturnValue</c>.</p>
</item>
<tag><c>dc_dump_limit</c></tag>
@@ -548,7 +548,7 @@ mnesia:add_table_index(person, age)</code>
Configuration Parameters</seealso>. <c>ReturnValue</c>
is the new value. Notice that this configuration
parameter is not persistent. It is lost when
- <c>Mnesia</c> has stopped.</p>
+ Mnesia has stopped.</p>
</item>
</taglist>
</desc>
@@ -562,9 +562,9 @@ mnesia:add_table_index(person, age)</code>
<c>read_write</c> but it can also be set to the atom
<c>read_only</c>. If <c>AccessMode</c> is set to
<c>read_only</c>, updates to the table cannot be
- performed. At startup, <c>Mnesia</c> always loads
+ performed. At startup, Mnesia always loads
<c>read_only</c> tables locally regardless of when and if
- <c>Mnesia</c> is terminated on other nodes.</p>
+ Mnesia is terminated on other nodes.</p>
</desc>
</func>
<func>
@@ -620,13 +620,13 @@ mnesia:change_table_copy_type(person, node(), disc_copies)</code>
<desc>
<marker id="create_schema"></marker>
<p>Creates a new database on disc. Various files are
- created in the local <c>Mnesia</c> directory of each node.
+ created in the local Mnesia directory of each node.
Notice that the directory must be unique for each node.
Two nodes must never share the same directory. If possible,
use a local disc device to improve performance.</p>
<p><c>mnesia:create_schema/1</c> fails if any of the
Erlang nodes given as <c>DiscNodes</c> are not alive, if
- <c>Mnesia</c> is running on any of the nodes, or if any
+ Mnesia is running on any of the nodes, or if any
of the nodes already have a schema. Use
<c>mnesia:delete_schema/1</c> to get rid of old faulty
schemas.</p>
@@ -638,10 +638,10 @@ mnesia:change_table_copy_type(person, node(), disc_copies)</code>
</func>
<func>
<name>create_table(Name, TabDef) -> {atomic, ok} | {aborted, Reason}</name>
- <fsummary>Creates a <c>Mnesia</c> table called <c>Name</c>with properties as described by argument <c>TabDef</c>.</fsummary>
+ <fsummary>Creates a Mnesia table called <c>Name</c>with properties as described by argument <c>TabDef</c>.</fsummary>
<desc>
<marker id="create_table"></marker>
- <p>Creates a <c>Mnesia</c> table called
+ <p>Creates a Mnesia table called
<c>Name</c> according to argument <c>TabDef</c>. This
list must be a list of <c>{Item, Value}</c> tuples,
where the following values are allowed:</p>
@@ -652,8 +652,8 @@ mnesia:change_table_copy_type(person, node(), disc_copies)</code>
set to the atom <c>read_only</c>. If <c>AccessMode</c>
is set to <c>read_only</c>, updates to the table
cannot be performed.</p>
- <p>At startup, <c>Mnesia</c> always loads <c>read_only</c>
- table locally regardless of when and if <c>Mnesia</c> is
+ <p>At startup, Mnesia always loads <c>read_only</c>
+ table locally regardless of when and if Mnesia is
terminated on other nodes. This argument returns the
access mode of the table. The access mode can be
<c>read_only</c> or <c>read_write</c>.</p>
@@ -693,7 +693,7 @@ mnesia:change_table_copy_type(person, node(), disc_copies)</code>
<item>
<p><c>{index, Intlist}</c>, where
<c>Intlist</c> is a list of attribute names (atoms) or
- record fields for which <c>Mnesia</c> is to build and
+ record fields for which Mnesia is to build and
maintain an extra index table. The <c>qlc</c> query
compiler <em>may</em> be able to optimize queries
if there are indexes available.</p>
@@ -735,10 +735,10 @@ mnesia:change_table_copy_type(person, node(), disc_copies)</code>
<c>mnesia:create_table/2</c>, the table is immediately
accessible by SNMP. Therefore applications that use
SNMP to manipulate and control the system can be
- designed easily, since <c>Mnesia</c> provides a
+ designed easily, since Mnesia provides a
direct mapping between the logical tables that make up
an SNMP control application and the physical data that
- makes up a <c>Mnesia</c> table.</p>
+ makes up a Mnesia table.</p>
</item>
<item>
<p><c>{storage_properties, [{Backend, Properties}]</c>
@@ -746,7 +746,7 @@ mnesia:change_table_copy_type(person, node(), disc_copies)</code>
<c>Backend</c> can currently be <c>ets</c> or <c>dets</c>.
<c>Properties</c> is a list of options sent to the
back end storage during table creation. <c>Properties</c>
- cannot contain properties already used by <c>Mnesia</c>,
+ cannot contain properties already used by Mnesia,
such as <c>type</c> or <c>named_table</c>.</p>
<p>For example:</p>
<code type="none">
@@ -776,7 +776,7 @@ mnesia:create_table(table, [{ram_copies, [node()]}, {disc_only_copies, nodes()},
mnesia:create_table(person,
[{ram_copies, [N1, N2]},
{attributes, record_info(fields, person)}]).</code>
- <p>If it is required that <c>Mnesia</c> must build and
+ <p>If it is required that Mnesia must build and
maintain an extra index table on attribute <c>address</c>
of all the <c>person</c> records that are inserted in the
table, the following code would be issued:</p>
@@ -819,8 +819,8 @@ mnesia:create_table(person,
When the last replica is deleted with this
function, the table disappears entirely.</p>
<p>This function can also be used to delete a replica of
- the table named <c>schema</c>. The <c>Mnesia</c> node is
- then removed. Notice that <c>Mnesia</c> must be
+ the table named <c>schema</c>. The Mnesia node is
+ then removed. Notice that Mnesia must be
stopped on the node first.</p>
</desc>
</func>
@@ -891,9 +891,9 @@ mnesia:create_table(person,
<c>mnesia:create_schema/1</c>.
<c>mnesia:delete_schema/1</c> fails if any of the Erlang
nodes given as <c>DiscNodes</c> are not alive, or if
- <c>Mnesia</c> is running on any of the nodes.</p>
+ Mnesia is running on any of the nodes.</p>
<p>After the database is deleted, it can still be possible
- to start <c>Mnesia</c> as a disc-less node. This depends
+ to start Mnesia as a disc-less node. This depends
on how configuration parameter <c>schema_location</c> is
set.</p>
<warning>
@@ -1100,7 +1100,7 @@ mnesia:create_table(person,
<name>dirty_update_counter(Tab, Key, Incr) -> NewVal | exit({aborted, Reason})</name>
<fsummary>Dirty update of a counter record.</fsummary>
<desc>
- <p><c>Mnesia</c> has no special counter records. However,
+ <p>Mnesia has no special counter records. However,
records of the form <c>{Tab, Key, Integer}</c> can be used
as (possibly disc-resident) counters when <c>Tab</c> is a
<c>set</c>. This function updates a counter with a positive
@@ -1147,7 +1147,7 @@ mnesia:create_table(person,
<desc>
<marker id="dump_log"></marker>
<p>Performs a user-initiated dump of the local log file.
- This is usually not necessary, as <c>Mnesia</c> by default
+ This is usually not necessary, as Mnesia by default
manages this automatically. See configuration parameters
<seealso marker="#dump_log_time_threshold">dump_log_time_threshold</seealso>
and
@@ -1172,7 +1172,7 @@ mnesia:create_table(person,
<fsummary>Dumps local tables into a text file.</fsummary>
<desc>
<marker id="dump_to_textfile"></marker>
- <p>Dumps all local tables of a <c>Mnesia</c> system into a
+ <p>Dumps all local tables of a Mnesia system into a
text file, which can be edited (by a normal text editor)
and then be reloaded with
<c>mnesia:load_textfile/1</c>. Only use this function for
@@ -1182,10 +1182,10 @@ mnesia:create_table(person,
</func>
<func>
<name>error_description(Error) -> String</name>
- <fsummary>Returns a string describing a particular <c>Mnesia</c> error.</fsummary>
+ <fsummary>Returns a string describing a particular Mnesia error.</fsummary>
<desc>
<marker id="error_description"></marker>
- <p>All <c>Mnesia</c> transactions, including all the schema
+ <p>All Mnesia transactions, including all the schema
update functions, either return value <c>{atomic, Val}</c>
or the tuple <c>{aborted, Reason}</c>. <c>Reason</c> can
be either of the atoms in the following list. The
@@ -1264,8 +1264,8 @@ mnesia:create_table(person,
<desc>
<marker id="ets"></marker>
<p>Calls the <c>Fun</c> in a raw context that is not protected by
- a transaction. The <c>Mnesia</c> function call is performed in
- the <c>Fun</c> and performed directly on the local <c>ets</c>
+ a transaction. The Mnesia function call is performed in
+ the <c>Fun</c> and performed directly on the local ETS
tables on the assumption that the local storage type is
<c>ram_copies</c> and the tables are not replicated to other
nodes. Subscriptions are not triggered and checkpoints are
@@ -1321,13 +1321,13 @@ mnesia:create_table(person,
<fsummary>Forces a table to be loaded into the system.</fsummary>
<desc>
<marker id="force_load_table"></marker>
- <p>The <c>Mnesia</c> algorithm for table load can lead to a
+ <p>The Mnesia algorithm for table load can lead to a
situation where a table cannot be loaded. This situation
- occurs when a node is started and <c>Mnesia</c> concludes, or
+ occurs when a node is started and Mnesia concludes, or
suspects, that another copy of the table was active after
this local copy became inactive because of a system crash.</p>
<p>If this situation is not acceptable, this function can be
- used to override the strategy of the <c>Mnesia</c> table
+ used to override the strategy of the Mnesia table
load algorithm. This can lead to a situation where some
transaction effects are lost with an inconsistent database as
result, but for some applications high availability is more
@@ -1402,9 +1402,9 @@ mnesia:create_table(person,
<desc>
<marker id="info"></marker>
<p>Prints system information on the terminal.
- This function can be used even if <c>Mnesia</c> is not
+ This function can be used even if Mnesia is not
started. However, more information is displayed if
- <c>Mnesia</c> is started.</p>
+ Mnesia is started.</p>
</desc>
</func>
<func>
@@ -1431,7 +1431,7 @@ mnesia:create_table(person,
<p>Installs a backup as fallback. The fallback is used to
restore the database at the next startup. Installation of
fallbacks requires Erlang to be operational on all the
- involved nodes, but it does not matter if <c>Mnesia</c>
+ involved nodes, but it does not matter if Mnesia
is running or not. The installation of the fallback fails
if the local node is not one of the disc-resident nodes
in the backup.</p>
@@ -1465,14 +1465,14 @@ mnesia:create_table(person,
<p><c>{mnesia_dir, AlternateDir}</c>.
This argument is only valid if the scope of the
installation is <c>local</c>. Normally the installation
- of a fallback is targeted to the <c>Mnesia</c> directory,
+ of a fallback is targeted to the Mnesia directory,
as configured with configuration parameter
<c>-mnesia dir</c>. But by explicitly supplying an
<c>AlternateDir</c>, the fallback is installed there
- regardless of the <c>Mnesia</c> directory configuration
+ regardless of the Mnesia directory configuration
parameter setting. After installation of a fallback on
- an alternative <c>Mnesia</c> directory, that directory
- is fully prepared for use as an active <c>Mnesia</c>
+ an alternative Mnesia directory, that directory
+ is fully prepared for use as an active Mnesia
directory.</p>
<p>This is a dangerous feature that must be
used with care. By unintentional mixing of directories,
@@ -1509,7 +1509,7 @@ mnesia:create_table(person,
<marker id="load_textfile"></marker>
<p>Loads a series of definitions and data found in the
text file (generated with <c>mnesia:dump_to_textfile/1</c>)
- into <c>Mnesia</c>. This function also starts <c>Mnesia</c>
+ into Mnesia. This function also starts Mnesia
and possibly creates a new schema. This function is
intended for educational purposes only. It is recommended
to use other functions to deal with real backups.</p>
@@ -1558,7 +1558,7 @@ mnesia:create_table(person,
</taglist>
<p>Conflicting lock requests are automatically queued if there
is no risk of a deadlock. Otherwise the transaction must be
- terminated and executed again. <c>Mnesia</c> does this
+ terminated and executed again. Mnesia does this
automatically as long as the upper limit of the maximum
<c>retries</c> is not reached. For details, see
<c>mnesia:transaction/3</c>.</p>
@@ -1726,19 +1726,19 @@ mnesia:create_table(person,
</func>
<func>
<name>report_event(Event) -> ok</name>
- <fsummary>Reports a user event to the <c>Mnesia</c> event handler.</fsummary>
+ <fsummary>Reports a user event to the Mnesia event handler.</fsummary>
<desc>
<marker id="report_event"></marker>
- <p>When tracing a system of <c>Mnesia</c> applications it is
- useful to be able to interleave <c>Mnesia</c> own events with
+ <p>When tracing a system of Mnesia applications it is
+ useful to be able to interleave Mnesia own events with
application-related events that give information about the
application context.</p>
<p>Whenever the application begins a
- new and demanding <c>Mnesia</c> task, or if it enters a new
+ new and demanding Mnesia task, or if it enters a new
interesting phase in its execution, it can be a good idea to
use <c>mnesia:report_event/1</c>. <c>Event</c> can be
any term and generates a <c>{mnesia_user, Event}</c> event
- for any processes that subscribe to <c>Mnesia</c> system
+ for any processes that subscribe to Mnesia system
events.</p>
</desc>
</func>
@@ -1748,7 +1748,7 @@ mnesia:create_table(person,
<desc>
<marker id="restore"></marker>
<p>With this function, tables can be restored online from a
- backup without restarting <c>Mnesia</c>.
+ backup without restarting Mnesia.
<c>Opaque</c> is forwarded to the backup module.
<c>Args</c> is a list of the following tuples:</p>
<list type="bulleted">
@@ -1873,7 +1873,7 @@ mnesia:create_table(person,
<p>For a complete description of <c>select</c>, see the
<seealso marker="erts:index">ERTS</seealso> User's Guide and the
<seealso marker="stdlib:ets">ets</seealso> manual page in
- <c>STDLIB</c>.</p>
+ STDLIB.</p>
<p>For example, to find the names of all male persons older
than 30 in table <c>Tab</c>:</p>
<code type="none">
@@ -1920,10 +1920,10 @@ mnesia:select(Tab,[{MatchHead, [Guard], [Result]}]),</code>
</func>
<func>
<name>set_debug_level(Level) -> OldLevel</name>
- <fsummary>Changes the internal debug level of <c>Mnesia</c>.</fsummary>
+ <fsummary>Changes the internal debug level of Mnesia.</fsummary>
<desc>
<marker id="set_debug_level"></marker>
- <p>Changes the internal debug level of <c>Mnesia</c>.
+ <p>Changes the internal debug level of Mnesia.
For details, see
<seealso marker="#configuration_parameters">Section
Configuration Parameters</seealso>.</p>
@@ -1934,7 +1934,7 @@ mnesia:select(Tab,[{MatchHead, [Guard], [Result]}]),</code>
<fsummary>Sets the master nodes for all tables.</fsummary>
<desc>
<marker id="set_master_nodes_1"></marker>
- <p>For each table <c>Mnesia</c> determines its replica nodes
+ <p>For each table Mnesia determines its replica nodes
(<c>TabNodes</c>) and starts
<c>mnesia:set_master_nodes(Tab, TabMasterNodes)</c>. where
<c>TabMasterNodes</c> is the intersection of
@@ -1952,16 +1952,16 @@ mnesia:select(Tab,[{MatchHead, [Guard], [Result]}]),</code>
that can have caused an inconsistent database, it can use the
function <c>mnesia:set_master_nodes(Tab, MasterNodes)</c> to
define from which nodes each table is to be loaded.
- At startup, the <c>Mnesia</c> normal table load algorithm is
+ At startup, the Mnesia normal table load algorithm is
bypassed and the table is loaded from one of the master nodes
- defined for the table, regardless of when and if <c>Mnesia</c>
+ defined for the table, regardless of when and if Mnesia
terminated on other nodes. <c>MasterNodes</c> can only
contain nodes where the table has a replica. If the
<c>MasterNodes</c> list is empty, the master node recovery
mechanism for the particular table is reset, and the
normal load mechanism is used at the next restart.</p>
<p>The master node setting is always local. It can be
- changed regardless if <c>Mnesia</c> is started or not.</p>
+ changed regardless if Mnesia is started or not.</p>
<p>The database can also become inconsistent if
configuration parameter <c>max_wait_for_decision</c> is used
or if <c>mnesia:force_load_table/1</c> is used.</p>
@@ -1976,7 +1976,7 @@ mnesia:select(Tab,[{MatchHead, [Guard], [Result]}]),</code>
</func>
<func>
<name>snmp_get_mnesia_key(Tab, RowIndex) -> {ok, Key} | undefined</name>
- <fsummary>Gets the corresponding <c>Mnesia</c> key from an SNMP index.</fsummary>
+ <fsummary>Gets the corresponding Mnesia key from an SNMP index.</fsummary>
<type>
<v>Tab ::= atom()</v>
<v>RowIndex ::= [integer()]</v>
@@ -1984,7 +1984,7 @@ mnesia:select(Tab,[{MatchHead, [Guard], [Result]}]),</code>
<v>key() ::= integer() | string() | [integer()]</v>
</type>
<desc>
- <p>Transforms an SNMP index to the corresponding <c>Mnesia</c>
+ <p>Transforms an SNMP index to the corresponding Mnesia
key. If the SNMP table has multiple keys, the key is a tuple
of the key columns.</p>
</desc>
@@ -2020,7 +2020,7 @@ mnesia:select(Tab,[{MatchHead, [Guard], [Result]}]),</code>
</func>
<func>
<name>snmp_open_table(Tab, SnmpStruct) -> {aborted, R} | {atomic, ok}</name>
- <fsummary>Organizes a <c>Mnesia</c> table as an SNMP table.</fsummary>
+ <fsummary>Organizes a Mnesia table as an SNMP table.</fsummary>
<type>
<v>Tab ::= atom()</v>
<v>SnmpStruct ::= [{key, type()}]</v>
@@ -2029,14 +2029,14 @@ mnesia:select(Tab,[{MatchHead, [Guard], [Result]}]),</code>
</type>
<desc>
<p>A direct one-to-one mapping can be established between
- <c>Mnesia</c> tables and SNMP tables. Many telecommunication
+ Mnesia tables and SNMP tables. Many telecommunication
applications are controlled and monitored by the SNMP
- protocol. This connection between <c>Mnesia</c> and SNMP
+ protocol. This connection between Mnesia and SNMP
makes it simple and convenient to achieve this mapping.</p>
<p>Argument <c>SnmpStruct</c> is a list of SNMP
information. Currently, the only information needed is
information about the key types in the table. Multiple
- keys cannot be handled in <c>Mnesia</c>, but many SNMP
+ keys cannot be handled in Mnesia, but many SNMP
tables have multiple keys. Therefore, the following
convention is used: if a table has multiple keys, these must
always be stored as a tuple of the keys. Information about
@@ -2069,39 +2069,39 @@ mnesia:create_table(employee,
<p>When a table is SNMP ordered, modifications are more
expensive than usual, O(logN). Also, more memory is used.</p>
<p>Notice that only the lexicographical SNMP ordering is
- implemented in <c>Mnesia</c>, not the actual SNMP monitoring.</p>
+ implemented in Mnesia, not the actual SNMP monitoring.</p>
</desc>
</func>
<func>
<name>start() -> ok | {error, Reason}</name>
- <fsummary>Starts a local <c>Mnesia</c> system.</fsummary>
+ <fsummary>Starts a local Mnesia system.</fsummary>
<desc>
<marker id="start"></marker>
- <p>The startup procedure for a set of <c>Mnesia</c> nodes is a
- fairly complicated operation. A <c>Mnesia</c> system consists
- of a set of nodes, with <c>Mnesia</c> started locally on all
+ <p>The startup procedure for a set of Mnesia nodes is a
+ fairly complicated operation. A Mnesia system consists
+ of a set of nodes, with Mnesia started locally on all
participating nodes. Normally, each node has a directory where
- all the <c>Mnesia</c> files are written. This directory is
- referred to as the <c>Mnesia</c> directory. <c>Mnesia</c> can
+ all the Mnesia files are written. This directory is
+ referred to as the Mnesia directory. Mnesia can
also be started on disc-less nodes. For more information
about disc-less nodes, see <c>mnesia:create_schema/1</c>
and the User's Guide.</p>
- <p>The set of nodes that makes up a <c>Mnesia</c> system is kept
- in a schema. <c>Mnesia</c> nodes can be added to or removed
+ <p>The set of nodes that makes up a Mnesia system is kept
+ in a schema. Mnesia nodes can be added to or removed
from the schema. The initial schema is normally created on
disc with the function <c>mnesia:create_schema/1</c>. On
disc-less nodes, a tiny default schema is generated each time
- <c>Mnesia</c> is started. During the startup procedure,
- <c>Mnesia</c> exchanges schema information between the nodes
+ Mnesia is started. During the startup procedure,
+ Mnesia exchanges schema information between the nodes
to verify that the table definitions are compatible.</p>
<p>Each schema has a unique cookie, which can be regarded as a
unique schema identifier. The cookie must be the same on all
- nodes where <c>Mnesia</c> is supposed to run. For details,
+ nodes where Mnesia is supposed to run. For details,
see the User's Guide.</p>
- <p>The schema file and all other files that <c>Mnesia</c>
- needs are kept in the <c>Mnesia</c> directory. The
+ <p>The schema file and all other files that Mnesia
+ needs are kept in the Mnesia directory. The
command-line option <c>-mnesia dir Dir</c> can be used to
- specify the location of this directory to the <c>Mnesia</c>
+ specify the location of this directory to the Mnesia
system. If no such command-line option is found, the name
of the directory defaults to <c>Mnesia.Node</c>.</p>
<p><c>application:start(mnesia)</c> can also be used.</p>
@@ -2109,10 +2109,10 @@ mnesia:create_table(employee,
</func>
<func>
<name>stop() -> stopped</name>
- <fsummary>Stops <c>Mnesia</c> locally.</fsummary>
+ <fsummary>Stops Mnesia locally.</fsummary>
<desc>
<marker id="stop"></marker>
- <p>Stops <c>Mnesia</c> locally on the current node.</p>
+ <p>Stops Mnesia locally on the current node.</p>
<p><c>application:stop(mnesia)</c> can also be used.</p>
</desc>
</func>
@@ -2132,7 +2132,7 @@ mnesia:create_table(employee,
<desc>
<marker id="sync_dirty"></marker>
<p>Calls the <c>Fun</c> in a context that is not protected by
- a transaction. The <c>Mnesia</c> function calls performed in
+ a transaction. The Mnesia function calls performed in
the <c>Fun</c> are mapped to the corresponding dirty functions.
It is performed in almost the same context as
<c>mnesia:async_dirty/1,2</c>. The difference is that the
@@ -2167,10 +2167,10 @@ mnesia:create_table(employee,
</func>
<func>
<name>system_info(InfoKey) -> Info | exit({aborted, Reason})</name>
- <fsummary>Returns information about the <c>Mnesia</c> system.</fsummary>
+ <fsummary>Returns information about the Mnesia system.</fsummary>
<desc>
<marker id="system_info"></marker>
- <p>Returns information about the <c>Mnesia</c> system, such as
+ <p>Returns information about the Mnesia system, such as
transaction statistics, <c>db_nodes</c>, and configuration
parameters. The valid keys are as follows:</p>
<list type="bulleted">
@@ -2188,7 +2188,7 @@ mnesia:create_table(employee,
</item>
<item>
<p><c>auto_repair</c>. Returns <c>true</c> or <c>false</c>
- to indicate if <c>Mnesia</c> is configured to start the
+ to indicate if Mnesia is configured to start the
auto-repair facility on corrupted disc files.</p>
</item>
<item>
@@ -2209,20 +2209,20 @@ mnesia:create_table(employee,
in the list of nodes if they explicitly have been added
to the schema, for example, with
<c>mnesia:add_table_copy/3</c>. The function can be
- started even if <c>Mnesia</c> is not yet running.</p>
+ started even if Mnesia is not yet running.</p>
</item>
<item>
<p><c>debug</c>. Returns the current debug level of
- <c>Mnesia</c>.</p>
+ Mnesia.</p>
</item>
<item>
- <p><c>directory</c>. Returns the name of the <c>Mnesia</c>
- directory. It can be called even if <c>Mnesia</c> is
+ <p><c>directory</c>. Returns the name of the Mnesia
+ directory. It can be called even if Mnesia is
not yet running.</p>
</item>
<item>
<p><c>dump_log_load_regulation</c>. Returns a boolean that
- tells if <c>Mnesia</c> is configured to regulate the
+ tells if Mnesia is configured to regulate the
dumper process load.</p>
<p>This feature is temporary and will be removed in future
releases.</p>
@@ -2233,9 +2233,9 @@ mnesia:create_table(employee,
</item>
<item>
<p><c>dump_log_update_in_place</c>. Returns a boolean that
- tells if <c>Mnesia</c> is configured to perform the
- updates in the <c>dets</c> files directly, or if the
- updates are to be performed in a copy of the <c>dets</c>
+ tells if Mnesia is configured to perform the
+ updates in the Dets files directly, or if the
+ updates are to be performed in a copy of the Dets
files.</p>
</item>
<item>
@@ -2253,13 +2253,13 @@ mnesia:create_table(employee,
</item>
<item>
<p><c>held_locks</c>. Returns a list of all
- locks held by the local <c>Mnesia</c> lock manager.</p>
+ locks held by the local Mnesia lock manager.</p>
</item>
<item>
<p><c>is_running</c>. Returns <c>yes</c> or <c>no</c> to
- indicate if <c>Mnesia</c> is running. It can
+ indicate if Mnesia is running. It can
also return <c>starting</c> or <c>stopping</c>. Can be
- called even if <c>Mnesia</c> is not yet running.</p>
+ called even if Mnesia is not yet running.</p>
</item>
<item>
<p><c>local_tables</c>. Returns a list
@@ -2272,7 +2272,7 @@ mnesia:create_table(employee,
</item>
<item>
<p><c>log_version</c>. Returns the version
- number of the <c>Mnesia</c> transaction log format.</p>
+ number of the Mnesia transaction log format.</p>
</item>
<item>
<p><c>master_node_tables</c>. Returns a
@@ -2280,25 +2280,25 @@ mnesia:create_table(employee,
</item>
<item>
<p><c>protocol_version</c>. Returns the version number of
- the <c>Mnesia</c> inter-process communication protocol.</p>
+ the Mnesia inter-process communication protocol.</p>
</item>
<item>
<p><c>running_db_nodes</c>. Returns a list of nodes where
- <c>Mnesia</c> currently is running. This function can be
- called even if <c>Mnesia</c> is not yet running, but it
+ Mnesia currently is running. This function can be
+ called even if Mnesia is not yet running, but it
then has slightly different semantics.</p>
- <p>If <c>Mnesia</c> is down on the local node, the function
+ <p>If Mnesia is down on the local node, the function
returns those other <c>db_nodes</c> and
<c>extra_db_nodes</c> that for the moment are
operational.</p>
- <p>If <c>Mnesia</c> is started, the function returns
- those nodes that <c>Mnesia</c> on the local node is fully
- connected to. Only those nodes that <c>Mnesia</c> has
+ <p>If Mnesia is started, the function returns
+ those nodes that Mnesia on the local node is fully
+ connected to. Only those nodes that Mnesia has
exchanged schema information with are included as
<c>running_db_nodes</c>. After the merge of schemas, the
- local <c>Mnesia</c> system is fully operable and
+ local Mnesia system is fully operable and
applications can perform access of remote replicas.
- Before the schema merge, <c>Mnesia</c> only operates
+ Before the schema merge, Mnesia only operates
locally. Sometimes there are more nodes included in the
<c>running_db_nodes</c> list than all <c>db_nodes</c>
and <c>extra_db_nodes</c> together.</p>
@@ -2322,17 +2322,17 @@ mnesia:create_table(employee,
<item>
<p><c>transaction_failures</c>. Returns a
number that indicates how many transactions have
- failed since <c>Mnesia</c> was started.</p>
+ failed since Mnesia was started.</p>
</item>
<item>
<p><c>transaction_commits</c>. Returns a
number that indicates how many transactions have
- terminated successfully since <c>Mnesia</c> was started.</p>
+ terminated successfully since Mnesia was started.</p>
</item>
<item>
<p><c>transaction_restarts</c>. Returns a
number that indicates how many transactions have been
- restarted since <c>Mnesia</c> was started.</p>
+ restarted since Mnesia was started.</p>
</item>
<item>
<p><c>transaction_log_writes</c>.
@@ -2342,12 +2342,12 @@ mnesia:create_table(employee,
</item>
<item>
<p><c>use_dir</c>. Returns a boolean that indicates if
- the <c>Mnesia</c> directory is used or not. Can be
- started even if <c>Mnesia</c> is not yet running.</p>
+ the Mnesia directory is used or not. Can be
+ started even if Mnesia is not yet running.</p>
</item>
<item>
<p><c>version</c>. Returns the current
- version number of <c>Mnesia</c>.</p>
+ version number of Mnesia.</p>
</item>
</list>
</desc>
@@ -2356,17 +2356,16 @@ mnesia:create_table(employee,
<name>table(Tab [,[Option]]) -> QueryHandle</name>
<fsummary>Return a QLC query handle.</fsummary>
<desc>
- <marker id="qlc_table"></marker>
<marker id="table"></marker>
<p>Returns a Query List Comprehension (QLC) query handle,
see the <seealso marker="stdlib:qlc">qlc(3)</seealso>
- manual page in <c>STDLIB</c>. The module <c>qlc</c>
- implements a query language that can use <c>Mnesia</c>
+ manual page in STDLIB. The module <c>qlc</c>
+ implements a query language that can use Mnesia
tables as sources of data. Calling
<c>mnesia:table/1,2</c> is the means to make the
<c>mnesia</c> table <c>Tab</c> usable to QLC.</p>
- <p><c>Option</c> can contain <c>Mnesia</c>
- options or QLC options. <c>Mnesia</c> recognizes the
+ <p><c>Option</c> can contain Mnesia
+ options or QLC options. Mnesia recognizes the
following options (any other option is forwarded to
QLC).</p>
<list type="bulleted">
@@ -2375,7 +2374,7 @@ mnesia:create_table(employee,
</item>
<item><c>{n_objects,Number}</c>, where <c>n_objects</c>
specifies (roughly) the number of objects returned
- from <c>Mnesia</c> to QLC. Queries to remote tables
+ from Mnesia to QLC. Queries to remote tables
can need a larger chunk to reduce network overhead.
By default, <c>100</c> objects at a time are returned.
</item>
@@ -2414,7 +2413,7 @@ mnesia:create_table(employee,
<desc>
<marker id="table_info"></marker>
<p>The <c>table_info/2</c> function takes two arguments.
- The first is the name of a <c>Mnesia</c> table.
+ The first is the name of a Mnesia table.
The second is one of the following keys:</p>
<list type="bulleted">
<item>
@@ -2466,7 +2465,7 @@ mnesia:create_table(employee,
</item>
<item>
<p><c>load_node</c>. Returns the name of
- the node that <c>Mnesia</c> loaded the table from. The
+ the node that Mnesia loaded the table from. The
structure of the returned value is unspecified, but
can be useful for debugging purposes.</p>
</item>
@@ -2477,7 +2476,7 @@ mnesia:create_table(employee,
</item>
<item>
<p><c>load_reason</c>. Returns the
- reason of why <c>Mnesia</c> decided to load the table.
+ reason of why Mnesia decided to load the table.
The structure of the returned value is unspecified, but
can be useful for debugging purposes.</p>
</item>
@@ -2621,7 +2620,7 @@ raise(Name, Amount) ->
several processes running on different nodes can concurrently
execute the function <c>raise/2</c> without interfering
with each other.</p>
- <p>Since <c>Mnesia</c> detects deadlocks, a transaction can be
+ <p>Since Mnesia detects deadlocks, a transaction can be
restarted any number of times. This function attempts a
restart as specified in <c>Retries</c>. <c>Retries</c> must
be an integer greater than 0 or the atom <c>infinity</c>.
@@ -2644,7 +2643,7 @@ raise(Name, Amount) ->
<p><c>NewAttributeList</c> and <c>NewRecordName</c>
specify the attributes and the new record type of the
converted table. Table name always remains unchanged. If
- <c>record_name</c> is changed, only the <c>Mnesia</c>
+ <c>record_name</c> is changed, only the Mnesia
functions that use table identifiers work, for example,
<c>mnesia:write/3</c> works, but not <c>mnesia:write/1</c>.</p>
</desc>
@@ -2707,7 +2706,7 @@ raise(Name, Amount) ->
distributed operation that is either performed on all
nodes with disc resident schema, or none. Uninstallation of
fallbacks requires Erlang to be operational on all
- involved nodes, but it does not matter if <c>Mnesia</c> is
+ involved nodes, but it does not matter if Mnesia is
running or not. Which nodes that are considered as
disc-resident nodes is determined from the schema
information in the local fallback.</p>
@@ -2793,28 +2792,28 @@ raise(Name, Amount) ->
<section>
<title>Configuration Parameters</title>
<marker id="configuration_parameters"></marker>
- <p><c>Mnesia</c> reads the following application configuration
+ <p>Mnesia reads the following application configuration
parameters:</p>
<list type="bulleted">
<item>
<p><c>-mnesia access_module Module</c>. The name of the
- <c>Mnesia</c> activity access callback module. Default is
+ Mnesia activity access callback module. Default is
<c>mnesia</c>.</p>
</item>
<item>
<p><c>-mnesia auto_repair true | false</c>. This flag
- controls if <c>Mnesia</c> automatically tries to repair
+ controls if Mnesia automatically tries to repair
files that have not been properly closed. Default is
<c>true</c>.</p>
</item>
<item>
<p><c>-mnesia backup_module Module</c>. The name of the
- <c>Mnesia</c> backup callback module. Default is
+ Mnesia backup callback module. Default is
<c>mnesia_backup</c>.</p>
</item>
<item>
<p><c>-mnesia debug Level</c>. Controls the debug level
- of <c>Mnesia</c>. The possible values are as follows:</p>
+ of Mnesia. The possible values are as follows:</p>
<taglist>
<tag><c>none</c></tag>
<item>
@@ -2826,7 +2825,7 @@ raise(Name, Amount) ->
events generate <c>{mnesia_info, Format, Args}</c>
system events. Processes can subscribe to these events with
<c>mnesia:subscribe/1</c>. The events are always sent to
- the <c>Mnesia</c> event handler.</p>
+ the Mnesia event handler.</p>
</item>
<tag><c>debug</c></tag>
<item>
@@ -2835,15 +2834,15 @@ raise(Name, Amount) ->
<c>{mnesia_info, Format, Args}</c> system events.
Processes can subscribe to these events with
<c>mnesia:subscribe/1</c>. The events are always sent to
- the <c>Mnesia</c> event handler. On this debug level,
- the <c>Mnesia</c> event handler starts subscribing to
+ the Mnesia event handler. On this debug level,
+ the Mnesia event handler starts subscribing to
updates in the schema table.</p>
</item>
<tag><c>trace</c></tag>
<item>
<p>Activates all events at the debug level. On this
- level, the <c>Mnesia</c> event handler starts subscribing
- to updates on all <c>Mnesia</c> tables. This level is
+ level, the Mnesia event handler starts subscribing
+ to updates on all Mnesia tables. This level is
intended only for debugging small toy systems, as many
large events can be generated.</p>
</item>
@@ -2857,7 +2856,7 @@ raise(Name, Amount) ->
</item>
<item>
<p><c>-mnesia core_dir Directory</c>. The name of the
- directory where <c>Mnesia</c> core files is stored, or
+ directory where Mnesia core files is stored, or
false. Setting it implies that also RAM-only nodes
generate a core file if a crash occurs.</p>
</item>
@@ -2871,9 +2870,9 @@ raise(Name, Amount) ->
</item>
<item>
<p><c>-mnesia dir Directory</c>. The name of the directory
- where all <c>Mnesia</c> data is stored. The directory name
+ where all Mnesia data is stored. The directory name
must be unique for the current node. Two nodes must never
- share the the same <c>Mnesia</c> directory. The results
+ share the the same Mnesia directory. The results
are unpredictable.</p>
</item>
<item>
@@ -2916,44 +2915,44 @@ raise(Name, Amount) ->
</item>
<item>
<p><c>-mnesia event_module Module</c>. The name of the
- <c>Mnesia</c> event handler callback module. Default is
+ Mnesia event handler callback module. Default is
<c>mnesia_event</c>.</p>
</item>
<item>
<p><c>-mnesia extra_db_nodes Nodes</c> specifies a list of
nodes, in addition to the ones found in the schema, with
- which <c>Mnesia</c> is also to establish contact. Default
+ which Mnesia is also to establish contact. Default
is <c>[]</c> (empty list).</p>
</item>
<item>
<p><c>-mnesia fallback_error_function {UserModule, UserFunc}</c>.
Specifies a user-supplied callback function, which is
- called if a fallback is installed and <c>Mnesia</c> goes
- down on another node. <c>Mnesia</c> calls the function
+ called if a fallback is installed and Mnesia goes
+ down on another node. Mnesia calls the function
with one argument, the name of the dying node, for example,
- <c>UserModule:UserFunc(DyingNode)</c>. <c>Mnesia</c> must
+ <c>UserModule:UserFunc(DyingNode)</c>. Mnesia must
be restarted, otherwise the database can be inconsistent.
- The default behavior is to terminate <c>Mnesia</c>.</p>
+ The default behavior is to terminate Mnesia.</p>
</item>
<item>
<p><c>-mnesia max_wait_for_decision Timeout</c>. Specifies
- how long <c>Mnesia</c> waits for other nodes to share their
+ how long Mnesia waits for other nodes to share their
knowledge about the outcome of an unclear transaction. By
default, <c>Timeout</c> is set to the atom <c>infinity</c>.
- This implies that if <c>Mnesia</c> upon startup detects
+ This implies that if Mnesia upon startup detects
a "heavyweight transaction" whose outcome is unclear, the
- local <c>Mnesia</c> waits until <c>Mnesia</c> is started
+ local Mnesia waits until Mnesia is started
on some (in the worst case all) of the other nodes that were
involved in the interrupted transaction. This is a rare
- situation, but if it occurs, <c>Mnesia</c> does not guess if
+ situation, but if it occurs, Mnesia does not guess if
the transaction on the other nodes was committed or
- terminated. <c>Mnesia</c> waits until it knows the outcome
+ terminated. Mnesia waits until it knows the outcome
and then acts accordingly.</p>
<p>If <c>Timeout</c> is set to an integer value in
- milliseconds, <c>Mnesia</c> forces "heavyweight transactions"
+ milliseconds, Mnesia forces "heavyweight transactions"
to be finished, even if the outcome of the transaction for
the moment is unclear. After <c>Timeout</c> milliseconds,
- <c>Mnesia</c> commits or terminates the transaction and
+ Mnesia commits or terminates the transaction and
continues with the startup. This can lead to a situation
where the transaction is committed on some nodes and
terminated on other nodes. If the transaction is a
@@ -2977,14 +2976,14 @@ raise(Name, Amount) ->
</item>
<item>
<p><c>-mnesia schema_location Loc</c>. Controls where
- <c>Mnesia</c> looks for its schema. Parameter
+ Mnesia looks for its schema. Parameter
<c>Loc</c> can be one of the following atoms:</p>
<taglist>
<tag><c>disc</c></tag>
<item>
<p>Mandatory disc. The schema is assumed to be located
- in the <c>Mnesia</c> directory. If the schema cannot
- be found, <c>Mnesia</c> refuses to start. This is the
+ in the Mnesia directory. If the schema cannot
+ be found, Mnesia refuses to start. This is the
old behavior.</p>
</item>
<tag><c>ram</c></tag>
@@ -3002,10 +3001,10 @@ raise(Name, Amount) ->
<tag><c>opt_disc</c></tag>
<item>
<p>Optional disc. The schema can reside on disc or in
- RAM. If the schema is found on disc, <c>Mnesia</c>
+ RAM. If the schema is found on disc, Mnesia
starts as a disc-based node and the storage type of
the schema table is <c>disc_copies</c>. If no schema is
- found on disc, <c>Mnesia</c> starts as a disc-less node
+ found on disc, Mnesia starts as a disc-less node
and the storage type of the schema table is
<c>ram_copies</c>. Default value for the application
parameter is <c>opt_disc</c>.</p>
@@ -3013,7 +3012,7 @@ raise(Name, Amount) ->
</taglist>
</item>
</list>
- <p>First, the <c>SASL</c> application parameters are checked,
+ <p>First, the SASL application parameters are checked,
then the command-line flags are checked, and finally, the
default value is chosen.</p>
</section>
diff --git a/lib/mnesia/doc/src/mnesia_frag_hash.xml b/lib/mnesia/doc/src/mnesia_frag_hash.xml
index 95f5f8aa07..51b32129b6 100644
--- a/lib/mnesia/doc/src/mnesia_frag_hash.xml
+++ b/lib/mnesia/doc/src/mnesia_frag_hash.xml
@@ -87,13 +87,13 @@
the new one.</p>
<p><c>NewState</c> is stored as <c>hash_state</c> among the
other <c>frag_properties</c>.</p>
- <p>As a part of the <c>add_frag</c> procedure, <c>Mnesia</c> iterates
+ <p>As a part of the <c>add_frag</c> procedure, Mnesia iterates
over all fragments corresponding to the <c>IterFrags</c> numbers
and starts <c>key_to_frag_number(NewState,RecordKey)</c> for
each record. If the new fragment differs from the old
fragment, the record is moved to the new fragment.</p>
<p>As the <c>add_frag</c> procedure is a part of a schema
- transaction, <c>Mnesia</c> acquires write locks on the
+ transaction, Mnesia acquires write locks on the
affected tables. That is, both the fragments corresponding
to <c>IterFrags</c> and those corresponding to
<c>AdditionalLockFrags</c>.</p>
@@ -112,7 +112,7 @@
<desc>
<p><c>NewState</c> is stored as <c>hash_state</c> among the
other <c>frag_properties</c>.</p>
- <p>As a part of the <c>del_frag</c> procedure, <c>Mnesia</c> iterates
+ <p>As a part of the <c>del_frag</c> procedure, Mnesia iterates
over all fragments corresponding to the <c>IterFrags</c> numbers
and starts <c>key_to_frag_number(NewState,RecordKey)</c> for
each record. If the new fragment differs from the old
@@ -120,7 +120,7 @@
<p>Notice that all records in the last fragment must be moved to
another fragment, as the entire fragment is deleted.</p>
<p>As the <c>del_frag</c> procedure is a part of a schema
- transaction, <c>Mnesia</c> acquires write locks on the
+ transaction, Mnesia acquires write locks on the
affected tables. That is, both the fragments corresponding
to <c>IterFrags</c> and those corresponding to
<c>AdditionalLockFrags</c>.</p>
@@ -134,7 +134,7 @@
<v>Reason = term()</v>
</type>
<desc>
- <p>Starts whenever <c>Mnesia</c> needs to determine
+ <p>Starts whenever Mnesia needs to determine
which fragment a certain record belongs to. It is typically
started at <c>read</c>, <c>write</c>, and <c>delete</c>.</p>
</desc>
@@ -149,7 +149,7 @@
<v>Reason = term()</v>
</type>
<desc>
- <p>This function is called whenever <c>Mnesia</c> needs to determine
+ <p>This function is called whenever Mnesia needs to determine
which fragments that need to be searched for a <c>MatchSpec</c>.
It is typically called by <c>select</c> and
<c>match_object</c>.</p>
diff --git a/lib/mnesia/doc/src/mnesia_registry.xml b/lib/mnesia/doc/src/mnesia_registry.xml
index cd778ae072..a76f716981 100644
--- a/lib/mnesia/doc/src/mnesia_registry.xml
+++ b/lib/mnesia/doc/src/mnesia_registry.xml
@@ -38,20 +38,20 @@
<modulesummary>Dump support for registries in erl_interface.</modulesummary>
<description>
<p>This module is usually part of the <c>erl_interface</c>
- application, but is currently part of the <c>Mnesia</c>
+ application, but is currently part of the Mnesia
application.</p>
<p>This module is mainly intended for internal use within OTP,
but it has two functions that are exported for public use.</p>
<p>On C-nodes, <c>erl_interface</c> has support for registry
tables. These tables reside in RAM on the C-node, but can also
- be dumped into <c>Mnesia</c> tables. By default, the dumping
+ be dumped into Mnesia tables. By default, the dumping
of registry tables through <c>erl_interface</c> causes a
- corresponding <c>Mnesia</c> table to be created with
+ corresponding Mnesia table to be created with
<c>mnesia_registry:create_table/1</c>, if necessary.</p>
<p>Tables that are created with these functions can be
- administered as all other <c>Mnesia</c> tables. They can be
+ administered as all other Mnesia tables. They can be
included in backups, replicas can be added, and so on.
- The tables are normal <c>Mnesia</c> tables owned by the user
+ The tables are normal Mnesia tables owned by the user
of the corresponding <c>erl_interface</c> registries.</p>
</description>
@@ -68,7 +68,7 @@
that is, <c>{ram_copies,[node()]}</c> or
<c>{disc_copies,[node()]}</c>.</p>
<p>This function is used by <c>erl_interface</c> to
- create the <c>Mnesia</c> table if it does not already
+ create the Mnesia table if it does not already
exist.</p>
</desc>
</func>
diff --git a/lib/mnesia/doc/src/part.xml b/lib/mnesia/doc/src/part.xml
index 101bdb29d4..d3ffe93937 100644
--- a/lib/mnesia/doc/src/part.xml
+++ b/lib/mnesia/doc/src/part.xml
@@ -30,7 +30,7 @@
<file>part.sgml</file>
</header>
<description>
- <p>The <c>Mnesia</c> application is a distributed Database Management
+ <p>The Mnesia application is a distributed Database Management
System (DBMS), appropriate for telecommunications applications and other
Erlang applications, which require continuous operation and exhibit soft
real-time properties.</p>
diff --git a/lib/mnesia/doc/src/ref_man.xml b/lib/mnesia/doc/src/ref_man.xml
index 662f0d61d6..7fb71b9c45 100644
--- a/lib/mnesia/doc/src/ref_man.xml
+++ b/lib/mnesia/doc/src/ref_man.xml
@@ -33,7 +33,7 @@
<file>refman.sgml</file>
</header>
<description>
- <p>The <c>Mnesia</c> application is a distributed Database Management
+ <p>The Mnesia application is a distributed Database Management
System (DBMS), appropriate for telecommunications applications and other
Erlang applications, which require continuous operation and exhibit soft
real-time properties.</p>
diff --git a/lib/mnesia/src/mnesia_index.erl b/lib/mnesia/src/mnesia_index.erl
index 73d170d1fa..c79f790973 100644
--- a/lib/mnesia/src/mnesia_index.erl
+++ b/lib/mnesia/src/mnesia_index.erl
@@ -513,11 +513,11 @@ db_put({dets, Ixt}, V) ->
ok = dets:insert(Ixt, V).
db_get({ram, _}=Ixt, IxKey) ->
- Pat = [{{{IxKey, '$1'}}, [], [{{IxKey,'$1'}}]}],
+ Pat = [{{{IxKey, '$1'}}, [], [{element, 1, '$_'}]}],
db_select(Ixt, Pat);
db_get({{ext,_,_} = _Storage, {_,_,{_,Type}}} = Ixt, IxKey) ->
Pat = case Type of
- ordered -> [{{{IxKey, '$1'}}, [], [{{IxKey,'$1'}}]}];
+ ordered -> [{{{IxKey, '$1'}}, [], [{element, 1, '$_'}]}];
bag -> [{{IxKey, '_'}, [], ['$_']}]
end,
db_select(Ixt, Pat);
diff --git a/lib/mnesia/test/mnesia_atomicity_test.erl b/lib/mnesia/test/mnesia_atomicity_test.erl
index 612c4ad368..cc32ba3826 100644
--- a/lib/mnesia/test/mnesia_atomicity_test.erl
+++ b/lib/mnesia/test/mnesia_atomicity_test.erl
@@ -700,11 +700,19 @@ start_restart_check(RestartOp, ReplicaNeed, Config) ->
%% mnesia shall be killed at that node, where A is reading
%% the information from
- kill_where_to_read(TabName, N1, [N2, N3]),
+ Read = kill_where_to_read(TabName, N1, [N2, N3]),
%% wait some time to let mnesia go down and spread those news around
%% fun A shall be able to finish its job before being restarted
- wait(500),
+ Wait = fun(Loop) ->
+ wait(300),
+ sys:get_status(mnesia_monitor),
+ case lists:member(Read, mnesia_lib:val({current, db_nodes})) of
+ true -> Loop(Loop);
+ false -> ok
+ end
+ end,
+ Wait(Wait),
A ! go_ahead,
%% the sticky write doesnt work on remote nodes !!!
@@ -772,10 +780,12 @@ kill_where_to_read(TabName, N1, Nodes) ->
Read = rpc:call(N1,mnesia,table_info, [TabName, where_to_read]),
case lists:member(Read, Nodes) of
true ->
- mnesia_test_lib:kill_mnesia([Read]);
+ mnesia_test_lib:kill_mnesia([Read]),
+ Read;
false ->
?error("Fault while killing Mnesia: ~p~n", [Read]),
- mnesia_test_lib:kill_mnesia(Nodes)
+ mnesia_test_lib:kill_mnesia(Nodes),
+ Read
end.
sync_tid_release() ->
diff --git a/lib/mnesia/test/mnesia_consistency_test.erl b/lib/mnesia/test/mnesia_consistency_test.erl
index 9cc84de87b..2fe1bd34e6 100644
--- a/lib/mnesia/test/mnesia_consistency_test.erl
+++ b/lib/mnesia/test/mnesia_consistency_test.erl
@@ -665,10 +665,10 @@ consistency_after_restore(ReplicaType, Op, Config) ->
[lists:foreach(fun(E) -> ok = mnesia:dirty_write({Tab, E, 2}) end, NList) ||
Tab <- Tabs],
- Pids1 = [{'EXIT', spawn_link(?MODULE, change_tab, [self(), carA, Op]), ok} || _ <- lists:seq(1, 5)],
- Pids2 = [{'EXIT', spawn_link(?MODULE, change_tab, [self(), carB, Op]), ok} || _ <- lists:seq(1, 5)],
- Pids3 = [{'EXIT', spawn_link(?MODULE, change_tab, [self(), carC, Op]), ok} || _ <- lists:seq(1, 5)],
- Pids4 = [{'EXIT', spawn_link(?MODULE, change_tab, [self(), carD, Op]), ok} || _ <- lists:seq(1, 5)],
+ Pids1 = [{'EXIT', spawn_link(?MODULE, change_tab, [self(), carA, Op]), carA} || _ <- lists:seq(1, 5)],
+ Pids2 = [{'EXIT', spawn_link(?MODULE, change_tab, [self(), carB, Op]), carB} || _ <- lists:seq(1, 5)],
+ Pids3 = [{'EXIT', spawn_link(?MODULE, change_tab, [self(), carC, Op]), carC} || _ <- lists:seq(1, 5)],
+ Pids4 = [{'EXIT', spawn_link(?MODULE, change_tab, [self(), carD, Op]), carD} || _ <- lists:seq(1, 5)],
AllPids = Pids1 ++ Pids2 ++ Pids3 ++ Pids4,
@@ -678,19 +678,38 @@ consistency_after_restore(ReplicaType, Op, Config) ->
Else -> Else
end
end,
-
+
timer:sleep(timer:seconds(Delay)), %% Let changers grab locks
?verbose("Doing restore~n", []),
?match(Tabs, Restore(File, [{default_op, Op}])),
- timer:sleep(timer:seconds(Delay)), %% Let em die
+ Collect = fun(Msg, Acc) ->
+ receive Msg -> Acc
+ after 10000 -> [Msg|Acc]
+ end
+ end,
- ?match_multi_receive(AllPids),
+ Failed1 = lists:foldl(Collect, [], AllPids),
+ Failed = lists:foldl(Collect, [], Failed1),
+
+ case Failed of
+ [] -> ok;
+ _ ->
+ ?match([], Failed),
+ io:format("TIME: ~p sec~n", [erlang:system_time(seconds) band 16#FF]),
+ Dbg = fun({_, Pid, Tab}) ->
+ io:format("Tab ~p: ~p~n",[Tab, process_info(Pid, current_stacktrace)]),
+ [io:format(" ~p~n", [Rec]) || Rec <- mnesia:dirty_match_object({Tab, '_', '_'})]
+ end,
+ [Dbg(Msg) || Msg <- Failed],
+ io:format(" Held: ~p~n", [mnesia_locker:get_held_locks()]),
+ io:format("Queue: ~p~n", [mnesia_locker:get_lock_queue()])
+ end,
- case ?match(ok, restore_verify_tabs(Tabs)) of
- {success, ok} ->
+ case ?match(ok, restore_verify_tabs(Tabs)) of
+ {success, ok} ->
file:delete(File);
- _ ->
+ _ ->
{T, M, S} = time(),
File2 = ?flat_format("consistency_error~w~w~w.BUP", [T, M, S]),
file:rename(File, File2)
@@ -700,17 +719,20 @@ consistency_after_restore(ReplicaType, Op, Config) ->
change_tab(Father, Tab, Test) ->
Key = rand:uniform(20),
Update = fun() ->
+ Time = erlang:system_time(seconds) band 16#FF,
+ case put(time, Time) of
+ Time -> ok;
+ _ -> io:format("~p ~p ~p sec~n", [self(), Tab, Time])
+ end,
case mnesia:read({Tab, Key}) of
- [{Tab, Key, 1}] ->
- quit;
- [{Tab, Key, _N}] ->
- mnesia:write({Tab, Key, 3})
+ [{Tab, Key, 1}] -> quit;
+ [{Tab, Key, _N}] -> mnesia:write({Tab, Key, 3})
end
end,
case mnesia:transaction(Update) of
{atomic, quit} ->
- exit(ok);
- {aborted, {no_exists, Tab}} when Test == recreate_tables ->%% I'll allow this
+ exit(Tab);
+ {aborted, {no_exists, Tab}} when Test == recreate_tables -> %% I'll allow this
change_tab(Father, Tab, Test);
{atomic, ok} ->
change_tab(Father, Tab, Test)
diff --git a/lib/mnesia/test/mnesia_dirty_access_test.erl b/lib/mnesia/test/mnesia_dirty_access_test.erl
index c9df8ed353..6d970ac990 100644
--- a/lib/mnesia/test/mnesia_dirty_access_test.erl
+++ b/lib/mnesia/test/mnesia_dirty_access_test.erl
@@ -461,77 +461,81 @@ dirty_index_update_set_xets(Config) when is_list(Config) ->
dirty_index_update_set(Config, ext_ets).
dirty_index_update_set(Config, Storage) ->
- [Node1] = Nodes = ?acquire_nodes(1, Config),
- Tab = index_test,
- ValPos = v1,
+ [Node1] = Nodes = ?acquire_nodes(1, Config),
+ Tab = index_test,
+ ValPos = v1,
ValPos2 = v3,
Def = [{attributes, [k, v1, v2, v3]},
{Storage, [Node1]},
- {index, [ValPos]}],
- ?match({atomic, ok}, mnesia:create_table(Tab, Def)),
-
+ {index, [ValPos]}],
+ ?match({atomic, ok}, mnesia:create_table(Tab, Def)),
+
Pat1 = {Tab, '$1', 2, '$2', '$3'},
- Pat2 = {Tab, '$1', '$2', '$3', '$4'},
-
- Rec1 = {Tab, 1, 2, 3, 4},
+ Pat2 = {Tab, '$1', '$2', '$3', '$4'},
+ Pat3 = {Tab, '_', '_', '_', {4, 14}},
+
+ Rec1 = {Tab, 1, 2, 3, {4, 14}},
Rec2 = {Tab, 2, 2, 13, 14},
- Rec3 = {Tab, 1, 12, 13, 14},
- Rec4 = {Tab, 4, 2, 13, 14},
-
+ Rec3 = {Tab, 1, 12, 13, 14},
+ Rec4 = {Tab, 4, 2, 13, 14},
+
?match([], mnesia:dirty_index_read(Tab, 2, ValPos)),
?match(ok, mnesia:dirty_write(Rec1)),
?match([Rec1], mnesia:dirty_index_read(Tab, 2, ValPos)),
-
+
?match(ok, mnesia:dirty_write(Rec2)),
R1 = mnesia:dirty_index_read(Tab, 2, ValPos),
?match([Rec1, Rec2], lists:sort(R1)),
-
+
?match(ok, mnesia:dirty_write(Rec3)),
R2 = mnesia:dirty_index_read(Tab, 2, ValPos),
?match([Rec2], lists:sort(R2)),
?match([Rec2], mnesia:dirty_index_match_object(Pat1, ValPos)),
-
- {atomic, R3} = mnesia:transaction(fun() -> mnesia:match_object(Pat2) end),
+
+ {atomic, R3} = mnesia:transaction(fun() -> mnesia:match_object(Pat2) end),
?match([Rec3, Rec2], lists:sort(R3)),
-
+
?match(ok, mnesia:dirty_write(Rec4)),
R4 = mnesia:dirty_index_read(Tab, 2, ValPos),
?match([Rec2, Rec4], lists:sort(R4)),
-
+
?match(ok, mnesia:dirty_delete({Tab, 4})),
?match([Rec2], mnesia:dirty_index_read(Tab, 2, ValPos)),
-
+
?match({atomic, ok}, mnesia:del_table_index(Tab, ValPos)),
?match({atomic, ok}, mnesia:transaction(fun() -> mnesia:write(Rec4) end)),
?match({atomic, ok}, mnesia:add_table_index(Tab, ValPos)),
?match({atomic, ok}, mnesia:add_table_index(Tab, ValPos2)),
-
+
R5 = mnesia:dirty_match_object(Pat2),
?match([Rec3, Rec2, Rec4], lists:sort(R5)),
-
+
R6 = mnesia:dirty_index_read(Tab, 2, ValPos),
- ?match([Rec2, Rec4], lists:sort(R6)),
- ?match([], mnesia:dirty_index_read(Tab, 4, ValPos2)),
+ ?match([Rec2, Rec4], lists:sort(R6)),
+ ?match([], mnesia:dirty_index_read(Tab, {4,14}, ValPos2)),
R7 = mnesia:dirty_index_read(Tab, 14, ValPos2),
?match([Rec3, Rec2, Rec4], lists:sort(R7)),
?match({atomic, ok}, mnesia:transaction(fun() -> mnesia:write(Rec1) end)),
R8 = mnesia:dirty_index_read(Tab, 2, ValPos),
?match([Rec1, Rec2, Rec4], lists:sort(R8)),
- ?match([Rec1], mnesia:dirty_index_read(Tab, 4, ValPos2)),
+ ?match([Rec1], mnesia:dirty_index_read(Tab, {4,14}, ValPos2)),
+ ?match([Rec1], mnesia:dirty_match_object(Pat3)),
+ ?match([Rec1], mnesia:dirty_index_match_object(Pat3, ValPos2)),
+
R9 = mnesia:dirty_index_read(Tab, 14, ValPos2),
?match([Rec2, Rec4], lists:sort(R9)),
?match({atomic, ok}, mnesia:transaction(fun() -> mnesia:delete_object(Rec2) end)),
R10 = mnesia:dirty_index_read(Tab, 2, ValPos),
?match([Rec1, Rec4], lists:sort(R10)),
- ?match([Rec1], mnesia:dirty_index_read(Tab, 4, ValPos2)),
+ ?match([Rec1], mnesia:dirty_index_read(Tab, {4,14}, ValPos2)),
?match([Rec4], mnesia:dirty_index_read(Tab, 14, ValPos2)),
?match(ok, mnesia:dirty_delete({Tab, 4})),
R11 = mnesia:dirty_index_read(Tab, 2, ValPos),
?match([Rec1], lists:sort(R11)),
- ?match([Rec1], mnesia:dirty_index_read(Tab, 4, ValPos2)),
+ ?match([Rec1], mnesia:dirty_index_read(Tab, {4,14}, ValPos2)),
?match([], mnesia:dirty_index_read(Tab, 14, ValPos2)),
?verify_mnesia(Nodes, []).
diff --git a/lib/mnesia/test/mnesia_evil_backup.erl b/lib/mnesia/test/mnesia_evil_backup.erl
index b71348f144..e745ec9b04 100644
--- a/lib/mnesia/test/mnesia_evil_backup.erl
+++ b/lib/mnesia/test/mnesia_evil_backup.erl
@@ -325,7 +325,7 @@ restore(Config, Op) ->
end,
?match(ok, file:delete(File1)),
?match(ok, file:delete(File2)),
- ?match([], Check() -- Before),
+ ?match([], Check() -- (Before ++ [{ok, latest_log}, {ok, previous_log}])),
?verify_mnesia(Nodes, []).
diff --git a/lib/mnesia/test/mnesia_recovery_test.erl b/lib/mnesia/test/mnesia_recovery_test.erl
index 2388b595d0..130b87346f 100644
--- a/lib/mnesia/test/mnesia_recovery_test.erl
+++ b/lib/mnesia/test/mnesia_recovery_test.erl
@@ -504,12 +504,21 @@ with_checkpoint(Config, Type) when is_list(Config) ->
?match(ok, mnesia:deactivate_checkpoint(sune)),
?match([], check_chkp(Nodes)),
+ Wait = fun(Loop) ->
+ timer:sleep(300),
+ sys:get_status(mnesia_monitor),
+ case lists:member(Kill, mnesia_lib:val({current, db_nodes})) of
+ true -> Loop(Loop);
+ false -> ok
+ end
+ end,
+
case Kill of
Node1 ->
ignore;
Node2 ->
mnesia_test_lib:kill_mnesia([Kill]),
- timer:sleep(500), %% Just to help debugging
+ Wait(Wait),
?match({ok, sune, _}, mnesia:activate_checkpoint([{name, sune},
{max, mnesia:system_info(tables)},
{ram_overrides_dump, true}])),
diff --git a/lib/mnesia/test/mt.erl b/lib/mnesia/test/mt.erl
index 793fb125e6..5a981bf539 100644
--- a/lib/mnesia/test/mt.erl
+++ b/lib/mnesia/test/mt.erl
@@ -80,6 +80,8 @@ resolve(Suite0) when is_atom(Suite0) ->
{Suite, Case} ->
{Suite, is_group(Suite,Case)}
end;
+resolve({Suite0, {group, Case}}) ->
+ resolve({Suite0, Case});
resolve({Suite0, Case}) when is_atom(Suite0), is_atom(Case) ->
case alias(Suite0) of
Suite when is_atom(Suite) ->
diff --git a/lib/observer/doc/src/notes.xml b/lib/observer/doc/src/notes.xml
index 0c72052827..f79f75fead 100644
--- a/lib/observer/doc/src/notes.xml
+++ b/lib/observer/doc/src/notes.xml
@@ -32,12 +32,37 @@
<p>This document describes the changes made to the Observer
application.</p>
+<section><title>Observer 2.2.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fixed a crash happening when observing another node, who
+ have a different number of schedulers than the current
+ one.</p>
+ <p>
+ Own Id: OTP-13702 Aux Id: ERL-171 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Observer 2.2</title>
<section><title>Improvements and New Features</title>
<list>
<item>
<p>
+ Update observer GUI to support tracing on ports, and to
+ set matchspecs for send/receive. This required some minor
+ bugfixes in runtime_tools/dbg.</p>
+ <p>
+ Own Id: OTP-13481</p>
+ </item>
+ <item>
+ <p>
Update dbg and ttb to work with a tracer module as tracer
and tracing on ports.</p>
<p>
@@ -57,6 +82,13 @@
<p>
Own Id: OTP-13556</p>
</item>
+ <item>
+ <p>
+ Crashdump viewer now allows port info "Port controls
+ forker process..."</p>
+ <p>
+ Own Id: OTP-13647</p>
+ </item>
</list>
</section>
diff --git a/lib/observer/doc/src/observer_ug.xml b/lib/observer/doc/src/observer_ug.xml
index ca354df864..6eb72f3e58 100644
--- a/lib/observer/doc/src/observer_ug.xml
+++ b/lib/observer/doc/src/observer_ug.xml
@@ -168,7 +168,7 @@
<item><p>The length of the message queue for the process.</p></item>
</taglist>
- <p>Option <em>Process info</em> opens a detailed information window on the selected process,
+ <p>Option <em>Process info</em> opens a detailed information window on the process under the mouse pointer,
including the following:</p>
<taglist>
<tag>Process Information</tag>
@@ -195,12 +195,53 @@
</p>
</note>
- <p>Option <em>Trace Processes</em> adds the selected process identifiers to tab
+ <p>Option <em>Trace selected processes</em> adds the selected process identifiers to tab
<em>Trace Overview</em> plus the node that the processes reside on.
</p>
- <p>Option <em>Trace Named Processes</em> adds the registered name of the processes. This can be
+ <p>Option <em>Trace selected processes by name</em> adds the registered name of the processes. This can be
useful when tracing is done on many nodes, as processes with that name are then traced on
all traced nodes.</p>
+ <p>Option <em>Kill process</em> brutally kills the processes under
+ the mouse pointer by sending an exit signal with
+ reason <c>kill</c>.</p>
+
+ </section>
+
+ <section>
+ <title>Ports Tab</title>
+ <p>Tab <em>Ports</em> lists port information in columns.
+ For each port the following information is displayed:
+ </p>
+ <taglist>
+ <tag>Id</tag>
+ <item><p>The port identifier.</p></item>
+ <tag>Connected</tag>
+ <item><p>The process identifier for the process that owns the
+ port.</p></item>
+ <tag>Name</tag>
+ <item><p>The registered name of the port, if any.</p></item>
+ <tag>Controls</tag>
+ <item><p>The name of the command set by <seealso marker="erts:erlang#open_port-2"><c>erlang:open_port/2</c></seealso>.</p></item>
+ <tag>Slot</tag>
+ <item><p>The internal index of the port.</p></item>
+ </taglist>
+
+ <p>Option <em>Port info</em> opens a detailed information window
+ for the port under the mouse pointer. In addition to the
+ information above, it also shows links and monitors.</p>
+
+ <p>Option <em>Trace selected ports</em> adds the selected port
+ identifiers, and the nodes that the ports reside on,
+ to tab <em>Trace Overview</em>.</p>
+
+ <p>Option <em>Trace selected ports by name</em> adds the
+ registered name of the port to tab <em>Trace Overview</em>. This
+ can be useful when tracing is done on many nodes, as ports with
+ that name are then traced on all traced nodes.</p>
+
+ <p>Option <em>Close</em>
+ executes <seealso marker="erts:erlang#port_close-1"><c>erlang:port_close/1</c></seealso>
+ on the port under the mouse pointer.</p>
</section>
@@ -211,8 +252,11 @@
applications are not diplayed. Use menu <em>View</em> to view "system"
ETS tables, unreadable ETS tables, or Mnesia tables.
</p>
- <p>Double-click to view the table content. To view table information, select the table
- and activate menu <em>View &gt; Table information</em>.</p>
+ <p>Double-click to view the table content, or right-click and
+ select option <em>Show Table Content</em>. To view table
+ information, select the table and activate menu <em>View &gt;
+ Table information</em>, or right-click and select option <em>Table
+ info</em>.</p>
<p>You can use <seealso marker="stdlib:re">regular
expressions</seealso> and search for objects, and edit or delete them.
</p>
@@ -220,11 +264,12 @@
<section>
<title>Trace Overview Tab</title>
- <p>Tab <em>Trace Overview</em> handles tracing. Trace
- by selecting the processes to be traced and how to trace
- them. You can trace messages, function calls, and events, where
- events are process-related events such as <c>spawn</c>,
- <c>exit</c>, and many others.
+ <p>Tab <em>Trace Overview</em> handles tracing. Trace by selecting
+ the processes or ports to be traced and how to trace them. For
+ processes, you can trace messages, function calls, scheduling,
+ garbage collections, and process-related events such
+ as <c>spawn</c>, <c>exit</c>, and many others. For ports, you can
+ trace messages, scheduling and port-related events.
</p>
<p>To trace function calls, you also need to set up
@@ -234,27 +279,51 @@
specifications can also be used to trigger more information
in the trace messages.
</p>
- <note><p>Trace patterns only apply to the traced processes.</p></note>
+
+ <p>You can also set match specifications on messages. By default,
+ if tracing messages, all messages sent and/or received by the
+ process or port are traced. Match specifications can be used to
+ reduce the number of traced messages and/or to trigger more
+ information in the trace messages.</p>
+
+ <note><p>Trace patterns only apply to the traced processes and
+ ports.</p></note>
<p>
- Processes are added from the <em>Applications</em> or <em>Processes</em> tabs.
- A special <em>new</em> identifier, meaning all processes spawned after trace
- start, can be added with button <em>Add 'new' Process</em>.
+ Processes are added from the <em>Applications</em>
+ or <em>Processes</em> tabs. Ports are added from
+ the <em>Ports</em> tab. A special <em>new</em> identifier,
+ meaning all processes, or ports, started after trace start, can
+ be added with buttons <em>Add 'new' Processes</em> and <em>Add
+ 'new' Ports</em>, respecively.
</p>
<p>
- When adding processes, a window with trace options is displayed. The chosen
- options are set for the selected processes.
- Process options can be changed by right-clicking a process.
+ When adding processes or ports, a window with trace options is
+ displayed. The chosen options are set for the selected
+ processes/ports. To change the options, right-click the process
+ or port and select <em>Edit process options</em>. To remove a
+ process or port from the list, right-click and select <em>Remove
+ process</em> or <em>Remove port</em>, respectively.
</p>
<p>
- Processes added by process identifiers add the nodes these
- processes reside on in the node list. More nodes can be added by clicking
- button <em>Add Nodes</em>.
+ Processes and ports added by process/port identifiers add the
+ nodes these processes/ports reside on in the node list. More
+ nodes can be added by clicking button <em>Add Nodes</em>, or by
+ right-clicking in the <em>Nodes</em> list and select <em>Add
+ Nodes</em>. To remove nodes, select them, then right-click and
+ choose <em>Remove nodes</em>.
</p>
<p>
If function calls are traced, trace patterns must be added by clicking button
<em>Add Trace Pattern</em>. Select a module, function(s), and a match specification.
- If no functions are selected, all functions in the module are traced.
+ If no functions are selected, all functions in the module are traced.</p>
+ <p>
+ Trace patterns can also be added for traced messages. Click
+ button <em>Add Trace Pattern</em> and select <em>Messages
+ sent</em> or <em>Messages received</em>, and a match
+ specification.
+ </p>
+ <p>
A few basic match specifications are provided in the tool, and
you can provide your own match specifications. The syntax of match
specifications is described in the <seealso
diff --git a/lib/observer/doc/src/ttb.xml b/lib/observer/doc/src/ttb.xml
index 2b637551db..42b0fa1d8a 100644
--- a/lib/observer/doc/src/ttb.xml
+++ b/lib/observer/doc/src/ttb.xml
@@ -229,27 +229,33 @@ ttb:p(all, call).</input></pre>
</func>
<func>
- <name>p(Procs,Flags) -> Return</name>
- <fsummary>Set the specified trace flags on the specified processes.</fsummary>
+ <name>p(Item,Flags) -> Return</name>
+ <fsummary>Set the specified trace flags on the specified processes or ports.</fsummary>
<type>
- <v>Return = {ok,[{Procs,MatchDesc}]}</v>
- <v>Procs = Process | [Process] | all | new | existing</v>
- <v>Process = pid() | atom() | {global,atom()}</v>
+ <v>Return = {ok,[{Item,MatchDesc}]}</v>
+ <v>Items = Item | [Item]</v>
+ <v>Item = pid() | port() | RegName | {global,GlobalRegName} |
+ all | processes | ports |
+ existing | existing_processes | existing_ports |
+ new | new_processes | new_ports</v>
+ <v>RegName = atom()</v>
+ <v>GlobalRegName = term()</v>
<v>Flags = Flag | [Flag]</v>
</type>
<desc>
- <p>Sets the specified trace flags on the specified
- processes. Flag <c>timestamp</c> is always turned on.
+ <p>Sets the specified trace flags on the specified processes
+ or ports. Flag <c>timestamp</c> is always turned on.
</p>
<p>See the Reference Manual for module
<seealso marker="runtime_tools:dbg"><c>dbg</c></seealso>
- and the possible trace flags. Parameter
+ for the possible trace flags. Parameter
<c>MatchDesc</c> is the same as returned from
<c>dbg:p/2</c>.</p>
<p>Processes can be specified as registered names, globally
- registered names, or process identifiers. If a registered name
- is specified, the flags are set on processes with this name on all
- active nodes.</p>
+ registered names, or process identifiers. Ports can be
+ specified as registered names or port identifiers. If a
+ registered name is specified, the flags are set on
+ processes/ports with this name on all active nodes.</p>
<p>Issuing this command starts the timer for this trace if option
<c>timer</c> is specified with <c>tracer/2</c>.
</p>
@@ -257,17 +263,23 @@ ttb:p(all, call).</input></pre>
</func>
<func>
- <name>tp, tpl, ctp, ctpl, ctpg</name>
+ <name>tp, tpl, tpe, ctp, ctpl, ctpg, ctpe</name>
<fsummary>Set and clear trace patterns.</fsummary>
<desc>
- <p>These functions are to be used with
- trace flag <c>call</c> for setting and clearing trace
- patterns. When trace flag <c>call</c> is set on a process,
+ <p>These functions are to be used with trace
+ flag <c>call</c>, <c>send</c>, and <c>'receive'</c> for
+ setting and clearing trace patterns.</p>
+ <p>When trace flag <c>call</c> is set on a process,
function calls are traced on that process if a trace
- pattern is set for the called function. Trace patterns
- specify how to trace a function by using match
- specifications. Match specifications are described in the
- <seealso marker="erts:users_guide"><c>ERTS User's Guide</c></seealso>.
+ pattern is set for the called function.</p>
+ <p>The <c>send</c> and <c>'receive'</c> flags enable tracing
+ of all messages sent and received by the process/port. Trace
+ patterns set with <c>tpe</c> may limit traced messages based
+ on the message content, the sender, and/or the receiver.</p>
+ <p>Trace patterns specify how to trace a function or a message
+ by using match specifications. Match specifications are
+ described in the
+ <seealso marker="erts:match_spec"><c>ERTS User's Guide</c></seealso>.
</p>
<p>These functions are equivalent to the corresponding
functions in module
@@ -284,6 +296,8 @@ ttb:p(all, call).</input></pre>
<item><p>Sets trace patterns on global function calls.</p></item>
<tag><c>tpl</c></tag>
<item><p>Sets trace patterns on local and global function calls.</p></item>
+ <tag><c>tpe</c></tag>
+ <item><p>Sets trace patterns on messages.</p></item>
<tag><c>ctp</c></tag>
<item><p>Clears trace patterns on local and global function
calls.</p></item>
@@ -291,13 +305,15 @@ ttb:p(all, call).</input></pre>
<item><p>Clears trace patterns on local function calls.</p></item>
<tag><c>ctpg</c></tag>
<item><p>Clears trace patterns on global function calls.</p></item>
+ <tag><c>ctpe</c></tag>
+ <item><p>Clears trace patterns on messages.</p></item>
</taglist>
<p>With <c>tp</c> and <c>tpl</c>, one of the match specification shortcuts
can be used (for example, <c>ttb:tp(foo_module, caller)</c>).</p>
<p>The shortcuts are as follows:</p>
<list type="bulleted">
<item><c>return</c> - for <c>[{'_',[],[{return_trace}]}]</c>
- (report the return value)</item>
+ (report the return value from a traced function)</item>
<item><c>caller</c> - for <c>[{'_',[],[{message,{caller}}]}]</c>
(report the calling function)</item>
<item><c>{codestr, Str}</c> - for <c>dbg:fun2ms/1</c> arguments
@@ -469,7 +485,7 @@ ttb:p(all, call).</input></pre>
<p>For a description of the <c>match_spec()</c> syntax,
see section
<seealso marker="erts:match_spec"><c>Match Specifications in Erlang</c></seealso>
- in <c>ERTS</c>, which explains the general match specification "language".
+ in ERTS, which explains the general match specification "language".
</p>
<note>
<p>The <em>system tracer</em> for sequential tracing is
diff --git a/lib/observer/src/Makefile b/lib/observer/src/Makefile
index 85dc5933c1..dd7831fa2b 100644
--- a/lib/observer/src/Makefile
+++ b/lib/observer/src/Makefile
@@ -67,6 +67,7 @@ MODULES= \
observer_html_lib \
observer_lib \
observer_perf_wx \
+ observer_port_wx \
observer_pro_wx \
observer_procinfo \
observer_sys_wx \
diff --git a/lib/observer/src/crashdump_viewer.erl b/lib/observer/src/crashdump_viewer.erl
index de52e2a995..9268dac180 100644
--- a/lib/observer/src/crashdump_viewer.erl
+++ b/lib/observer/src/crashdump_viewer.erl
@@ -1491,6 +1491,9 @@ get_portinfo(Fd,Port) ->
"Port controls linked-in driver" ->
Str = lists:flatten(["Linked in driver: " | val(Fd)]),
get_portinfo(Fd,Port#port{controls=Str});
+ "Port controls forker process" ->
+ Str = lists:flatten(["Forker process: " | val(Fd)]),
+ get_portinfo(Fd,Port#port{controls=Str});
"Port controls external process" ->
Str = lists:flatten(["External proc: " | val(Fd)]),
get_portinfo(Fd,Port#port{controls=Str});
diff --git a/lib/observer/src/observer.app.src b/lib/observer/src/observer.app.src
index 5ddf65fa59..3a5bd172e7 100644
--- a/lib/observer/src/observer.app.src
+++ b/lib/observer/src/observer.app.src
@@ -51,6 +51,7 @@
observer_html_lib,
observer_lib,
observer_perf_wx,
+ observer_port_wx,
observer_pro_wx,
observer_procinfo,
observer_sys_wx,
diff --git a/lib/observer/src/observer_app_wx.erl b/lib/observer/src/observer_app_wx.erl
index cef83037d0..936b2783e2 100644
--- a/lib/observer/src/observer_app_wx.erl
+++ b/lib/observer/src/observer_app_wx.erl
@@ -221,21 +221,21 @@ handle_event(#wx{id=?ID_PROC_KILL, event=#wxCommand{type=command_menu_selected}}
%%% Trace api
handle_event(#wx{id=?ID_TRACE_PID, event=#wxCommand{type=command_menu_selected}},
State = #state{sel={Box,_}}) ->
- observer_trace_wx:add_processes(observer_wx:get_tracer(), [box_to_pid(Box)]),
+ observer_trace_wx:add_processes([box_to_pid(Box)]),
{noreply, State};
handle_event(#wx{id=?ID_TRACE_NAME, event=#wxCommand{type=command_menu_selected}},
State = #state{sel={Box,_}}) ->
- observer_trace_wx:add_processes(observer_wx:get_tracer(), [box_to_reg(Box)]),
+ observer_trace_wx:add_processes([box_to_reg(Box)]),
{noreply, State};
handle_event(#wx{id=?ID_TRACE_TREE_PIDS, event=#wxCommand{type=command_menu_selected}},
State = #state{sel=Sel}) ->
Get = fun(Box) -> box_to_pid(Box) end,
- observer_trace_wx:add_processes(observer_wx:get_tracer(), tree_map(Sel, Get)),
+ observer_trace_wx:add_processes(tree_map(Sel, Get)),
{noreply, State};
handle_event(#wx{id=?ID_TRACE_TREE_NAMES, event=#wxCommand{type=command_menu_selected}},
State = #state{sel=Sel}) ->
Get = fun(Box) -> box_to_reg(Box) end,
- observer_trace_wx:add_processes(observer_wx:get_tracer(), tree_map(Sel, Get)),
+ observer_trace_wx:add_processes(tree_map(Sel, Get)),
{noreply, State};
handle_event(Event, _State) ->
diff --git a/lib/observer/src/observer_lib.erl b/lib/observer/src/observer_lib.erl
index c6a1c73c83..7c1337025f 100644
--- a/lib/observer/src/observer_lib.erl
+++ b/lib/observer/src/observer_lib.erl
@@ -128,8 +128,8 @@ display_info(Frame, Info) ->
Add = fun(BoxInfo) ->
case create_box(Panel, BoxInfo) of
{Box, InfoFs} ->
- wxSizer:add(Sizer, Box, [{flag, ?wxEXPAND bor ?wxALL},
- {border, 5}]),
+ wxSizer:add(Sizer, Box,
+ [{flag, ?wxEXPAND bor ?wxALL}, {border, 5}]),
wxSizer:addSpacer(Sizer, 5),
InfoFs;
undefined ->
@@ -453,14 +453,19 @@ create_box(Parent, Data) ->
link_entry(Panel,Value);
_ ->
Value = to_str(Value0),
- TCtrl = wxStaticText:new(Panel, ?wxID_ANY,Value),
- length(Value) > 50 andalso
- wxWindow:setToolTip(TCtrl,wxToolTip:new(Value)),
- TCtrl
+ case length(Value) > 100 of
+ true ->
+ Shown = lists:sublist(Value, 80),
+ TCtrl = wxStaticText:new(Panel, ?wxID_ANY, [Shown,"..."]),
+ wxWindow:setToolTip(TCtrl,wxToolTip:new(Value)),
+ TCtrl;
+ false ->
+ wxStaticText:new(Panel, ?wxID_ANY, Value)
+ end
end,
wxSizer:add(Line, 10, 0), % space of size 10 horisontally
wxSizer:add(Line, Field, RightProportion),
- wxSizer:add(Box, Line, [{proportion,1},{flag,?wxEXPAND}]),
+ wxSizer:add(Box, Line, [{proportion,1}]),
Field;
(undefined) ->
undefined
diff --git a/lib/observer/src/observer_perf_wx.erl b/lib/observer/src/observer_perf_wx.erl
index 1010a6af4c..6a1aac92c7 100644
--- a/lib/observer/src/observer_perf_wx.erl
+++ b/lib/observer/src/observer_perf_wx.erl
@@ -235,12 +235,14 @@ terminate(_Event, #state{appmon=Pid}) ->
code_change(_, _, State) ->
State.
-restart_fetcher(Node, #state{appmon=Old, panel=Panel, time=#ti{fetch=Freq}=Ti}=State) ->
+restart_fetcher(Node, #state{appmon=Old, panel=Panel, time=#ti{fetch=Freq}=Ti, wins=Wins0}=State) ->
catch Old ! exit,
Me = self(),
Pid = spawn_link(Node, observer_backend, fetch_stats, [Me, round(1000/Freq)]),
wxWindow:refresh(Panel),
- precalc(State#state{active=true, appmon=Pid, samples=reset_data(), time=Ti#ti{tick=0}}).
+ Wins = [W#win{state=undefined} || W <- Wins0],
+ precalc(State#state{active=true, appmon=Pid, samples=reset_data(),
+ wins=Wins, time=Ti#ti{tick=0}}).
reset_data() ->
{0, queue:new()}.
@@ -253,18 +255,25 @@ add_data(Stats, {N, Q}, Wins, _, Active) ->
add_data_1([#win{state={_,St}}|_]=Wins0, Last, N, {Drop, Q}, Active)
when St /= undefined ->
- {Wins, Stat} =
- lists:mapfoldl(fun(Win0, Entry) ->
- {Win1,Stat} = add_data_2(Win0, Last, Entry),
- case Active of
- true ->
- Win = add_data_3(Win1, N, Drop, Stat, Q),
- {Win, Stat};
- false ->
- {Win1, Stat}
- end
- end, #{}, Wins0),
- {Wins, {N,queue:in(Stat#{}, Q)}};
+ try
+ {Wins, Stat} =
+ lists:mapfoldl(fun(Win0, Entry) ->
+ {Win1,Stat} = add_data_2(Win0, Last, Entry),
+ case Active of
+ true ->
+ Win = add_data_3(Win1, N, Drop, Stat, Q),
+ {Win, Stat};
+ false ->
+ {Win1, Stat}
+ end
+ end, #{}, Wins0),
+ {Wins, {N,queue:in(Stat#{}, Q)}}
+ catch no_scheduler_change ->
+ {[Win#win{state=init_data(Id, Last),
+ info = info(Id, Last)}
+ || #win{name=Id}=Win <- Wins0], {0,queue:new()}}
+ end;
+
add_data_1(Wins, Stats, 1, {_, Q}, _) ->
{[Win#win{state=init_data(Id, Stats),
info = info(Id, Stats)}
@@ -409,7 +418,8 @@ collect_data(utilz, MemInfo, Max) ->
calc_delta([{Id, WN, TN}|Ss], [{Id, WP, TP}|Ps]) ->
[100*(WN-WP) div (TN-TP)|calc_delta(Ss, Ps)];
-calc_delta([], []) -> [].
+calc_delta([], []) -> [];
+calc_delta(_, _) -> throw(no_scheduler_change).
precalc(#state{samples=Data0, paint=Paint, time=Ti, wins=Wins0}=State) ->
Wins = [precalc(Ti, Data0, Paint, Win) || Win <- Wins0],
diff --git a/lib/observer/src/observer_port_wx.erl b/lib/observer/src/observer_port_wx.erl
new file mode 100644
index 0000000000..3b788642cc
--- /dev/null
+++ b/lib/observer/src/observer_port_wx.erl
@@ -0,0 +1,479 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2011-2014. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+-module(observer_port_wx).
+
+-export([start_link/2]).
+
+%% wx_object callbacks
+-export([init/1, handle_info/2, terminate/2, code_change/3, handle_call/3,
+ handle_event/2, handle_sync_event/3, handle_cast/2]).
+
+-behaviour(wx_object).
+-include_lib("wx/include/wx.hrl").
+-include("observer_defs.hrl").
+
+-define(GRID, 300).
+-define(ID_REFRESH, 301).
+-define(ID_REFRESH_INTERVAL, 302).
+-define(ID_PORT_INFO, 303).
+-define(ID_PORT_INFO_SELECTED, 304).
+-define(ID_TRACE_PORTS, 305).
+-define(ID_TRACE_NAMES, 306).
+-define(ID_TRACE_NEW, 307).
+-define(ID_TRACE_ALL, 308).
+-define(ID_CLOSE_PORT, 309).
+
+-define(TRACE_PORTS_STR, "Trace selected ports").
+-define(TRACE_NAMES_STR, "Trace selected ports, "
+ "if a process have a registered name "
+ "processes with same name will be traced on all nodes").
+
+-record(port,
+ {id,
+ connected,
+ name,
+ controls,
+ slot,
+ id_str,
+ links,
+ monitors}).
+
+-record(opt, {sort_key=2,
+ sort_incr=true
+ }).
+
+-record(state,
+ {
+ parent,
+ grid,
+ panel,
+ node=node(),
+ opt=#opt{},
+ right_clicked_port,
+ ports,
+ timer,
+ open_wins=[]
+ }).
+
+start_link(Notebook, Parent) ->
+ wx_object:start_link(?MODULE, [Notebook, Parent], []).
+
+init([Notebook, Parent]) ->
+ Panel = wxPanel:new(Notebook),
+ Sizer = wxBoxSizer:new(?wxVERTICAL),
+ Style = ?wxLC_REPORT bor ?wxLC_HRULES,
+ Grid = wxListCtrl:new(Panel, [{winid, ?GRID}, {style, Style}]),
+ wxSizer:add(Sizer, Grid, [{flag, ?wxEXPAND bor ?wxALL},
+ {proportion, 1}, {border, 5}]),
+ wxWindow:setSizer(Panel, Sizer),
+ Li = wxListItem:new(),
+ AddListEntry = fun({Name, Align, DefSize}, Col) ->
+ wxListItem:setText(Li, Name),
+ wxListItem:setAlign(Li, Align),
+ wxListCtrl:insertColumn(Grid, Col, Li),
+ wxListCtrl:setColumnWidth(Grid, Col, DefSize),
+ Col + 1
+ end,
+ ListItems = [{"Id", ?wxLIST_FORMAT_LEFT, 150},
+ {"Connected", ?wxLIST_FORMAT_LEFT, 150},
+ {"Name", ?wxLIST_FORMAT_LEFT, 150},
+ {"Controls", ?wxLIST_FORMAT_LEFT, 200},
+ {"Slot", ?wxLIST_FORMAT_RIGHT, 50}],
+ lists:foldl(AddListEntry, 0, ListItems),
+ wxListItem:destroy(Li),
+
+ wxListCtrl:connect(Grid, command_list_item_right_click),
+ wxListCtrl:connect(Grid, command_list_item_activated),
+ wxListCtrl:connect(Grid, command_list_col_click),
+ wxListCtrl:connect(Grid, size, [{skip, true}]),
+
+ wxWindow:setFocus(Grid),
+ {Panel, #state{grid=Grid, parent=Parent, panel=Panel, timer={false, 10}}}.
+
+handle_event(#wx{id=?ID_REFRESH},
+ State = #state{node=Node, grid=Grid, opt=Opt}) ->
+ Ports0 = get_ports(Node),
+ Ports = update_grid(Grid, Opt, Ports0),
+ {noreply, State#state{ports=Ports}};
+
+handle_event(#wx{obj=Obj, event=#wxClose{}}, #state{open_wins=Opened} = State) ->
+ NewOpened =
+ case lists:keytake(Obj,2,Opened) of
+ false -> Opened;
+ {value,_,Rest} -> Rest
+ end,
+ {noreply, State#state{open_wins=NewOpened}};
+
+handle_event(#wx{event=#wxList{type=command_list_col_click, col=Col}},
+ State = #state{node=Node, grid=Grid,
+ opt=Opt0=#opt{sort_key=Key, sort_incr=Bool}}) ->
+ Opt = case Col+2 of
+ Key -> Opt0#opt{sort_incr=not Bool};
+ NewKey -> Opt0#opt{sort_key=NewKey}
+ end,
+ Ports0 = get_ports(Node),
+ Ports = update_grid(Grid, Opt, Ports0),
+ wxWindow:setFocus(Grid),
+ {noreply, State#state{opt=Opt, ports=Ports}};
+
+handle_event(#wx{event=#wxSize{size={W,_}}}, State=#state{grid=Grid}) ->
+ observer_lib:set_listctrl_col_size(Grid, W),
+ {noreply, State};
+
+handle_event(#wx{event=#wxList{type=command_list_item_activated,
+ itemIndex=Index}},
+ State=#state{grid=Grid, ports=Ports, open_wins=Opened}) ->
+ Port = lists:nth(Index+1, Ports),
+ NewOpened = display_port_info(Grid, Port, Opened),
+ {noreply, State#state{open_wins=NewOpened}};
+
+handle_event(#wx{event=#wxList{type=command_list_item_right_click,
+ itemIndex=Index}},
+ State=#state{panel=Panel, ports=Ports}) ->
+ case Index of
+ -1 ->
+ {noreply, State};
+ _ ->
+ Port = lists:nth(Index+1, Ports),
+ Menu = wxMenu:new(),
+ wxMenu:append(Menu, ?ID_PORT_INFO,
+ "Port info for " ++ erlang:port_to_list(Port#port.id)),
+ wxMenu:append(Menu, ?ID_TRACE_PORTS,
+ "Trace selected ports",
+ [{help, ?TRACE_PORTS_STR}]),
+ wxMenu:append(Menu, ?ID_TRACE_NAMES,
+ "Trace selected ports by name (all nodes)",
+ [{help, ?TRACE_NAMES_STR}]),
+ wxMenu:append(Menu, ?ID_CLOSE_PORT,
+ "Close " ++ erlang:port_to_list(Port#port.id)),
+ wxWindow:popupMenu(Panel, Menu),
+ wxMenu:destroy(Menu),
+ {noreply, State#state{right_clicked_port=Port}}
+ end;
+
+handle_event(#wx{id=?ID_PORT_INFO},
+ State = #state{grid=Grid, right_clicked_port=Port,
+ open_wins=Opened}) ->
+ case Port of
+ undefined ->
+ {noreply, State};
+ _ ->
+ NewOpened = display_port_info(Grid, Port, Opened),
+ {noreply, State#state{right_clicked_port=undefined,
+ open_wins=NewOpened}}
+ end;
+
+handle_event(#wx{id=?ID_PORT_INFO_SELECTED},
+ State = #state{grid=Grid, ports=Ports, open_wins=Opened}) ->
+ case get_selected_items(Grid,Ports) of
+ [] ->
+ observer_wx:create_txt_dialog(State#state.panel, "No selected ports",
+ "Port Info", ?wxICON_EXCLAMATION),
+ {noreply, State};
+ Selected ->
+ NewOpened = lists:foldl(fun(P,O) -> display_port_info(Grid, P, O) end,
+ Opened, Selected),
+ {noreply, State#state{open_wins = NewOpened}}
+ end;
+
+handle_event(#wx{id=?ID_CLOSE_PORT}, State = #state{right_clicked_port=Port}) ->
+ case Port of
+ undefined ->
+ {noreply, State};
+ _ ->
+ erlang:port_close(Port#port.id),
+ {noreply, State#state{right_clicked_port=undefined}}
+ end;
+
+handle_event(#wx{id=?ID_TRACE_PORTS}, #state{grid=Grid, ports=Ports}=State) ->
+ case get_selected_items(Grid, Ports) of
+ [] ->
+ observer_wx:create_txt_dialog(State#state.panel, "No selected ports",
+ "Tracer", ?wxICON_EXCLAMATION);
+ Selected ->
+ SelectedIds = [Port#port.id || Port <- Selected],
+ observer_trace_wx:add_ports(SelectedIds)
+ end,
+ {noreply, State};
+
+handle_event(#wx{id=?ID_TRACE_NAMES}, #state{grid=Grid, ports=Ports}=State) ->
+ case get_selected_items(Grid, Ports) of
+ [] ->
+ observer_wx:create_txt_dialog(State#state.panel, "No selected ports",
+ "Tracer", ?wxICON_EXCLAMATION);
+ Selected ->
+ IdsOrRegs =
+ [case Port#port.name of
+ [] -> Port#port.id;
+ Name -> Name
+ end || Port <- Selected],
+ observer_trace_wx:add_ports(IdsOrRegs)
+ end,
+ {noreply, State};
+
+handle_event(#wx{id=?ID_TRACE_NEW, event=#wxCommand{type=command_menu_selected}}, State) ->
+ observer_trace_wx:add_ports([new_ports]),
+ {noreply, State};
+
+handle_event(#wx{id=?ID_REFRESH_INTERVAL},
+ State = #state{grid=Grid, timer=Timer0}) ->
+ Timer = observer_lib:interval_dialog(Grid, Timer0, 10, 5*60),
+ {noreply, State#state{timer=Timer}};
+
+handle_event(#wx{event=#wxMouse{type=left_down}, userData=TargetPid}, State) ->
+ observer ! {open_link, TargetPid},
+ {noreply, State};
+
+handle_event(#wx{obj=Obj, event=#wxMouse{type=enter_window}}, State) ->
+ wxTextCtrl:setForegroundColour(Obj,{0,0,100,255}),
+ {noreply, State};
+
+handle_event(#wx{obj=Obj, event=#wxMouse{type=leave_window}}, State) ->
+ wxTextCtrl:setForegroundColour(Obj,?wxBLUE),
+ {noreply, State};
+
+handle_event(Event, _State) ->
+ error({unhandled_event, Event}).
+
+handle_sync_event(_Event, _Obj, _State) ->
+ ok.
+
+handle_call(Event, From, _State) ->
+ error({unhandled_call, Event, From}).
+
+handle_cast(Event, _State) ->
+ error({unhandled_cast, Event}).
+
+handle_info({portinfo_open, PortIdStr},
+ State = #state{grid=Grid, ports=Ports, open_wins=Opened}) ->
+ Port = lists:keyfind(PortIdStr,#port.id_str,Ports),
+ NewOpened = display_port_info(Grid, Port, Opened),
+ {noreply, State#state{open_wins = NewOpened}};
+
+handle_info(refresh_interval, State = #state{node=Node, grid=Grid, opt=Opt,
+ ports=OldPorts}) ->
+ case get_ports(Node) of
+ OldPorts ->
+ %% no change
+ {noreply, State};
+ Ports0 ->
+ Ports = update_grid(Grid, Opt, Ports0),
+ {noreply, State#state{ports=Ports}}
+ end;
+
+handle_info({active, Node}, State = #state{parent=Parent, grid=Grid, opt=Opt,
+ timer=Timer0}) ->
+ Ports0 = get_ports(Node),
+ Ports = update_grid(Grid, Opt, Ports0),
+ wxWindow:setFocus(Grid),
+ create_menus(Parent),
+ Timer = observer_lib:start_timer(Timer0),
+ {noreply, State#state{node=Node, ports=Ports, timer=Timer}};
+
+handle_info(not_active, State = #state{timer = Timer0}) ->
+ Timer = observer_lib:stop_timer(Timer0),
+ {noreply, State#state{timer=Timer}};
+
+handle_info({error, Error}, State) ->
+ handle_error(Error),
+ {noreply, State};
+
+handle_info(_Event, State) ->
+ {noreply, State}.
+
+terminate(_Event, _State) ->
+ ok.
+
+code_change(_, _, State) ->
+ State.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+create_menus(Parent) ->
+ MenuEntries =
+ [{"View",
+ [#create_menu{id = ?ID_PORT_INFO_SELECTED,
+ text = "Port info for selected ports\tCtrl-I"},
+ separator,
+ #create_menu{id = ?ID_REFRESH, text = "Refresh\tCtrl-R"},
+ #create_menu{id = ?ID_REFRESH_INTERVAL, text = "Refresh Interval..."}
+ ]},
+ {"Trace",
+ [#create_menu{id=?ID_TRACE_PORTS, text="Trace selected ports"},
+ #create_menu{id=?ID_TRACE_NAMES, text="Trace selected ports by name (all nodes)"},
+ #create_menu{id=?ID_TRACE_NEW, text="Trace new ports"}
+ ]}
+ ],
+ observer_wx:create_menus(Parent, MenuEntries).
+
+get_ports(Node) ->
+ case get_ports2(Node) of
+ Error = {error, _} ->
+ self() ! Error,
+ [];
+ Res ->
+ Res
+ end.
+get_ports2(Node) ->
+ case rpc:call(Node, observer_backend, get_port_list, []) of
+ {badrpc, Error} ->
+ {error, Error};
+ Error = {error, _} ->
+ Error;
+ Result ->
+ [list_to_portrec(Port) || Port <- Result]
+ end.
+
+list_to_portrec(PL) ->
+ %% PortInfo:
+ %% {registered_name, RegisteredName :: atom()} |
+ %% {id, Index :: integer() >= 0} |
+ %% {connected, Pid :: pid()} |
+ %% {links, Pids :: [pid()]} |
+ %% {name, String :: string()} |
+ %% {input, Bytes :: integer() >= 0} |
+ %% {output, Bytes :: integer() >= 0} |
+ %% {os_pid, OsPid :: integer() >= 0 | undefined},
+ PortId = proplists:get_value(port_id, PL),
+ #port{id = PortId,
+ id_str = erlang:port_to_list(PortId),
+ slot = proplists:get_value(id, PL),
+ connected = proplists:get_value(connected, PL),
+ links = proplists:get_value(links, PL, []),
+ name = proplists:get_value(registered_name, PL, []),
+ monitors = proplists:get_value(monitors, PL, []),
+ controls = proplists:get_value(name, PL)}.
+
+portrec_to_list(#port{id = Id,
+ slot = Slot,
+ connected = Connected,
+ links = Links,
+ name = Name,
+ monitors = Monitors,
+ controls = Controls}) ->
+ [{id,Id},
+ {slot,Slot},
+ {connected,Connected},
+ {links,Links},
+ {name,Name},
+ {monitors,Monitors},
+ {controls,Controls}].
+
+display_port_info(Parent, PortRec, Opened) ->
+ PortIdStr = PortRec#port.id_str,
+ case lists:keyfind(PortIdStr,1,Opened) of
+ false ->
+ Frame = do_display_port_info(Parent, PortRec),
+ [{PortIdStr,Frame}|Opened];
+ {_,Win} ->
+ wxFrame:raise(Win),
+ Opened
+ end.
+
+do_display_port_info(Parent0, PortRec) ->
+ Parent = observer_lib:get_wx_parent(Parent0),
+ Title = "Port Info: " ++ PortRec#port.id_str,
+ Frame = wxMiniFrame:new(Parent, ?wxID_ANY, Title,
+ [{style, ?wxSYSTEM_MENU bor ?wxCAPTION
+ bor ?wxCLOSE_BOX bor ?wxRESIZE_BORDER}]),
+
+ Port = portrec_to_list(PortRec),
+ Fields0 = port_info_fields(Port),
+ {_FPanel, _Sizer, _UpFields} = observer_lib:display_info(Frame, Fields0),
+ wxFrame:center(Frame),
+ wxFrame:connect(Frame, close_window, [{skip, true}]),
+ wxFrame:show(Frame),
+ Frame.
+
+
+port_info_fields(Port) ->
+ Struct =
+ [{"Overview",
+ [{"Name", name},
+ {"Connected", {click,connected}},
+ {"Slot", slot},
+ {"Controls", controls}]},
+ {scroll_boxes,
+ [{"Links",1,{click,links}},
+ {"Monitors",1,{click,filter_monitor_info()}}]}],
+ observer_lib:fill_info(Struct, Port).
+
+filter_monitor_info() ->
+ fun(Data) ->
+ Ms = proplists:get_value(monitors, Data),
+ [Pid || {process, Pid} <- Ms]
+ end.
+
+
+handle_error(Foo) ->
+ Str = io_lib:format("ERROR: ~s~n",[Foo]),
+ observer_lib:display_info_dialog(Str).
+
+update_grid(Grid, Opt, Ports) ->
+ wx:batch(fun() -> update_grid2(Grid, Opt, Ports) end).
+update_grid2(Grid, #opt{sort_key=Sort,sort_incr=Dir}, Ports) ->
+ wxListCtrl:deleteAllItems(Grid),
+ Update =
+ fun(#port{id = Id,
+ slot = Slot,
+ connected = Connected,
+ name = Name,
+ controls = Ctrl},
+ Row) ->
+ _Item = wxListCtrl:insertItem(Grid, Row, ""),
+ if (Row rem 2) =:= 0 ->
+ wxListCtrl:setItemBackgroundColour(Grid, Row, ?BG_EVEN);
+ true -> ignore
+ end,
+
+ lists:foreach(fun({Col, Val}) ->
+ wxListCtrl:setItem(Grid, Row, Col,
+ observer_lib:to_str(Val))
+ end,
+ [{0,Id},{1,Connected},{2,Name},{3,Ctrl},{4,Slot}]),
+ Row + 1
+ end,
+ PortInfo = case Dir of
+ false -> lists:reverse(lists:keysort(Sort, Ports));
+ true -> lists:keysort(Sort, Ports)
+ end,
+ lists:foldl(Update, 0, PortInfo),
+ PortInfo.
+
+
+get_selected_items(Grid, Data) ->
+ get_indecies(get_selected_items(Grid, -1, []), Data).
+get_selected_items(Grid, Index, ItemAcc) ->
+ Item = wxListCtrl:getNextItem(Grid, Index, [{geometry, ?wxLIST_NEXT_ALL},
+ {state, ?wxLIST_STATE_SELECTED}]),
+ case Item of
+ -1 ->
+ lists:reverse(ItemAcc);
+ _ ->
+ get_selected_items(Grid, Item, [Item | ItemAcc])
+ end.
+
+get_indecies(Items, Data) ->
+ get_indecies(Items, 0, Data).
+get_indecies([I|Rest], I, [H|T]) ->
+ [H|get_indecies(Rest, I+1, T)];
+get_indecies(Rest = [_|_], I, [_|T]) ->
+ get_indecies(Rest, I+1, T);
+get_indecies(_, _, _) ->
+ [].
diff --git a/lib/observer/src/observer_pro_wx.erl b/lib/observer/src/observer_pro_wx.erl
index bd914cdf65..ee6829b847 100644
--- a/lib/observer/src/observer_pro_wx.erl
+++ b/lib/observer/src/observer_pro_wx.erl
@@ -83,6 +83,7 @@
timer,
procinfo_menu_pids=[],
sel={[], []},
+ right_clicked_pid,
holder}).
start_link(Notebook, Parent) ->
@@ -303,13 +304,14 @@ handle_event(#wx{id=?ID_REFRESH_INTERVAL},
Timer = observer_lib:interval_dialog(Panel, Timer0, 1, 5*60),
{noreply, State#state{timer=Timer}};
-handle_event(#wx{id=?ID_KILL}, #state{sel={[_|Ids], [ToKill|Pids]}}=State) ->
- exit(ToKill, kill),
- {noreply, State#state{sel={Ids,Pids}}};
+handle_event(#wx{id=?ID_KILL}, #state{right_clicked_pid=Pid, sel=Sel0}=State) ->
+ exit(Pid, kill),
+ Sel = rm_selected(Pid,Sel0),
+ {noreply, State#state{sel=Sel}};
handle_event(#wx{id=?ID_PROC},
- #state{panel=Panel, sel={_, [Pid|_]},procinfo_menu_pids=Opened}=State) ->
+ #state{panel=Panel, right_clicked_pid=Pid, procinfo_menu_pids=Opened}=State) ->
Opened2 = start_procinfo(Pid, Panel, Opened),
{noreply, State#state{procinfo_menu_pids=Opened2}};
@@ -319,7 +321,7 @@ handle_event(#wx{id=?ID_TRACE_PIDS}, #state{sel={_, Pids}, panel=Panel}=State)
observer_wx:create_txt_dialog(Panel, "No selected processes", "Tracer", ?wxICON_EXCLAMATION),
{noreply, State};
Pids ->
- observer_trace_wx:add_processes(observer_wx:get_tracer(), Pids),
+ observer_trace_wx:add_processes(Pids),
{noreply, State}
end;
@@ -330,12 +332,12 @@ handle_event(#wx{id=?ID_TRACE_NAMES}, #state{sel={SelIds,_Pids}, holder=Holder,
{noreply, State};
_ ->
PidsOrReg = call(Holder, {get_name_or_pid, self(), SelIds}),
- observer_trace_wx:add_processes(observer_wx:get_tracer(), PidsOrReg),
+ observer_trace_wx:add_processes(PidsOrReg),
{noreply, State}
end;
handle_event(#wx{id=?ID_TRACE_NEW, event=#wxCommand{type=command_menu_selected}}, State) ->
- observer_trace_wx:add_processes(observer_wx:get_tracer(), [new]),
+ observer_trace_wx:add_processes([new_processes]),
{noreply, State};
handle_event(#wx{event=#wxSize{size={W,_}}},
@@ -347,20 +349,26 @@ handle_event(#wx{event=#wxList{type=command_list_item_right_click,
itemIndex=Row}},
#state{panel=Panel, holder=Holder}=State) ->
- case call(Holder, {get_row, self(), Row, pid}) of
- {error, undefined} ->
- undefined;
- {ok, _} ->
- Menu = wxMenu:new(),
- wxMenu:append(Menu, ?ID_PROC, "Process info"),
- wxMenu:append(Menu, ?ID_TRACE_PIDS, "Trace processes", [{help, ?TRACE_PIDS_STR}]),
- wxMenu:append(Menu, ?ID_TRACE_NAMES, "Trace named processes (all nodes)",
- [{help, ?TRACE_NAMES_STR}]),
- wxMenu:append(Menu, ?ID_KILL, "Kill Process"),
- wxWindow:popupMenu(Panel, Menu),
- wxMenu:destroy(Menu)
- end,
- {noreply, State};
+ Pid =
+ case call(Holder, {get_row, self(), Row, pid}) of
+ {error, undefined} ->
+ undefined;
+ {ok, P} ->
+ Menu = wxMenu:new(),
+ wxMenu:append(Menu, ?ID_PROC,
+ "Process info for " ++ pid_to_list(P)),
+ wxMenu:append(Menu, ?ID_TRACE_PIDS,
+ "Trace selected processes",
+ [{help, ?TRACE_PIDS_STR}]),
+ wxMenu:append(Menu, ?ID_TRACE_NAMES,
+ "Trace selected processes by name (all nodes)",
+ [{help, ?TRACE_NAMES_STR}]),
+ wxMenu:append(Menu, ?ID_KILL, "Kill process " ++ pid_to_list(P)),
+ wxWindow:popupMenu(Panel, Menu),
+ wxMenu:destroy(Menu),
+ P
+ end,
+ {noreply, State#state{right_clicked_pid=Pid}};
handle_event(#wx{event=#wxList{type=command_list_item_focused,
itemIndex=Row}},
@@ -432,6 +440,17 @@ set_focus([Old|_], [New|_], Grid) ->
wxListCtrl:setItemState(Grid, Old, 0, ?wxLIST_STATE_FOCUSED),
wxListCtrl:setItemState(Grid, New, 16#FFFF, ?wxLIST_STATE_FOCUSED).
+rm_selected(Pid, {Ids, Pids}) ->
+ rm_selected(Pid, Ids, Pids, [], []).
+
+rm_selected(Pid, [_Id|Ids], [Pid|Pids], AccIds, AccPids) ->
+ {lists:reverse(AccIds)++Ids,lists:reverse(AccPids)++Pids};
+rm_selected(Pid, [Id|Ids], [OtherPid|Pids], AccIds, AccPids) ->
+ rm_selected(Pid, Ids, Pids, [Id|AccIds], [OtherPid|AccPids]);
+rm_selected(_, [], [], AccIds, AccPids) ->
+ {lists:reverse(AccIds), lists:reverse(AccPids)}.
+
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%TABLE HOLDER%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
init_table_holder(Parent, Attrs) ->
diff --git a/lib/observer/src/observer_procinfo.erl b/lib/observer/src/observer_procinfo.erl
index cff5fbb474..620979dcc9 100644
--- a/lib/observer/src/observer_procinfo.erl
+++ b/lib/observer/src/observer_procinfo.erl
@@ -317,7 +317,7 @@ fetch_state_info2(Pid, M) ->
of
{status, _, {module, _},
[_PDict, _SysState, _Parent, _Dbg,
- [Header,{data, First},{data, Second}]]} ->
+ [Header,{data, First},{data, Second}|_]]} ->
[{"Behaviour", B}, Header] ++ First ++ Second;
{status, _, {module, _},
[_PDict, _SysState, _Parent, _Dbg,
@@ -370,7 +370,7 @@ process_info_fields(Pid) ->
{"Priority", priority},
{"Trap Exit", trap_exit},
{"Reductions", reductions},
- {"Binary", binary},
+ {"Binary", fun(Data) -> stringify_bins(Data) end},
{"Last Calls", last_calls},
{"Catch Level", catchlevel},
{"Trace", trace},
@@ -437,6 +437,11 @@ filter_monitor_info() ->
[Pid || {process, Pid} <- Ms]
end.
+stringify_bins(Data) ->
+ Bins = proplists:get_value(binary, Data),
+ [lists:flatten(io_lib:format("<< ~s, refc ~w>>", [observer_lib:to_str({bytes,Sz}),Refc]))
+ || {_Ptr, Sz, Refc} <- Bins].
+
local_pid_str(Pid) ->
%% observer can observe remote nodes
%% There is no function to get the local
@@ -449,7 +454,6 @@ local_pid_str(Pid) ->
global_pid_node_pref(Pid) ->
%% Global PID node prefix : X of <X.Y.Z>
string:strip(string:sub_word(pid_to_list(Pid),1,$.),left,$<).
-
io_get_data(Pid) ->
Pid ! {self(), get_data_and_close},
diff --git a/lib/observer/src/observer_sys_wx.erl b/lib/observer/src/observer_sys_wx.erl
index b9b407cb0a..fa824995f7 100644
--- a/lib/observer/src/observer_sys_wx.erl
+++ b/lib/observer/src/observer_sys_wx.erl
@@ -48,40 +48,51 @@ start_link(Notebook, Parent) ->
init([Notebook, Parent]) ->
SysInfo = observer_backend:sys_info(),
- {Info, Stat} = info_fields(),
+ {Sys, Mem, Cpu, Stats} = info_fields(),
Panel = wxPanel:new(Notebook),
Sizer = wxBoxSizer:new(?wxVERTICAL),
- TopSizer = wxBoxSizer:new(?wxHORIZONTAL),
- {FPanel0, _FSizer0, Fields0} =
- observer_lib:display_info(Panel, observer_lib:fill_info(Info, SysInfo)),
- {FPanel1, _FSizer1, Fields1} =
- observer_lib:display_info(Panel, observer_lib:fill_info(Stat, SysInfo)),
- wxSizer:add(TopSizer, FPanel0, [{flag, ?wxEXPAND}, {proportion, 1}]),
- wxSizer:add(TopSizer, FPanel1, [{flag, ?wxEXPAND}, {proportion, 1}]),
+ HSizer0 = wxBoxSizer:new(?wxHORIZONTAL),
+ {FPanel0, _FSizer0, Fields0} = observer_lib:display_info(Panel, observer_lib:fill_info(Sys, SysInfo)),
+ {FPanel1, _FSizer1, Fields1} = observer_lib:display_info(Panel, observer_lib:fill_info(Mem, SysInfo)),
+ wxSizer:add(HSizer0, FPanel0, [{flag, ?wxEXPAND}, {proportion, 1}]),
+ wxSizer:add(HSizer0, FPanel1, [{flag, ?wxEXPAND}, {proportion, 1}]),
+
+ HSizer1 = wxBoxSizer:new(?wxHORIZONTAL),
+ {FPanel2, _FSizer2, Fields2} = observer_lib:display_info(Panel, observer_lib:fill_info(Cpu, SysInfo)),
+ {FPanel3, _FSizer3, Fields3} = observer_lib:display_info(Panel, observer_lib:fill_info(Stats, SysInfo)),
+ wxSizer:add(HSizer1, FPanel2, [{flag, ?wxEXPAND}, {proportion, 1}]),
+ wxSizer:add(HSizer1, FPanel3, [{flag, ?wxEXPAND}, {proportion, 1}]),
+
BorderFlags = ?wxLEFT bor ?wxRIGHT,
- wxSizer:add(Sizer, TopSizer, [{flag, ?wxEXPAND bor BorderFlags bor ?wxTOP},
- {proportion, 0}, {border, 5}]),
+ wxSizer:add(Sizer, HSizer0, [{flag, ?wxEXPAND bor BorderFlags bor ?wxTOP},
+ {proportion, 0}, {border, 5}]),
+ wxSizer:add(Sizer, HSizer1, [{flag, ?wxEXPAND bor BorderFlags bor ?wxBOTTOM},
+ {proportion, 0}, {border, 5}]),
wxPanel:setSizer(Panel, Sizer),
Timer = observer_lib:start_timer(10),
{Panel, #sys_wx_state{parent=Parent,
parent_notebook=Notebook,
panel=Panel, sizer=Sizer,
- timer=Timer, fields=Fields0 ++ Fields1}}.
+ timer=Timer, fields=Fields0 ++ Fields1++Fields2++Fields3}}.
create_sys_menu(Parent) ->
View = {"View", [#create_menu{id = ?ID_REFRESH, text = "Refresh\tCtrl-R"},
#create_menu{id = ?ID_REFRESH_INTERVAL, text = "Refresh interval"}]},
observer_wx:create_menus(Parent, [View]).
+update_syspage(#sys_wx_state{node = undefined}) -> ignore;
update_syspage(#sys_wx_state{node = Node, fields=Fields, sizer=Sizer}) ->
SysInfo = observer_wx:try_rpc(Node, observer_backend, sys_info, []),
- {Info, Stat} = info_fields(),
- observer_lib:update_info(Fields, observer_lib:fill_info(Info, SysInfo) ++
- observer_lib:fill_info(Stat, SysInfo)),
+ {Sys, Mem, Cpu, Stats} = info_fields(),
+ observer_lib:update_info(Fields,
+ observer_lib:fill_info(Sys, SysInfo) ++
+ observer_lib:fill_info(Mem, SysInfo) ++
+ observer_lib:fill_info(Cpu, SysInfo) ++
+ observer_lib:fill_info(Stats, SysInfo)),
wxSizer:layout(Sizer).
info_fields() ->
- Info = [{"System and Architecture",
+ Sys = [{"System and Architecture",
[{"System Version", otp_release},
{"ERTS Version", version},
{"Compiled for", system_architecture},
@@ -90,34 +101,35 @@ info_fields() ->
{"SMP Support", smp_support},
{"Thread Support", threads},
{"Async thread pool size", thread_pool_size}
- ]},
- {"CPU's and Threads",
- [{"Logical CPU's", logical_processors},
- {"Online Logical CPU's", logical_processors_online},
- {"Available Logical CPU's", logical_processors_available},
- {"Schedulers", schedulers},
- {"Online schedulers", schedulers_online},
- {"Available schedulers", schedulers_available}
- ]}
- ],
- Stat = [{"Memory Usage", right,
- [{"Total", {bytes, total}},
- {"Processes", {bytes, processes}},
- {"Atoms", {bytes, atom}},
- {"Binaries", {bytes, binary}},
- {"Code", {bytes, code}},
- {"ETS", {bytes, ets}}
- ]},
- {"Statistics", right,
- [{"Up time", {time_ms, uptime}},
- {"Max Processes", process_limit},
- {"Processes", process_count},
- {"Run Queue", run_queue},
- {"IO Input", {bytes, io_input}},
- {"IO Output", {bytes, io_output}}
- ]}
- ],
- {Info, Stat}.
+ ]}],
+
+ Cpu = [{"CPU's and Threads",
+ [{"Logical CPU's", logical_processors},
+ {"Online Logical CPU's", logical_processors_online},
+ {"Available Logical CPU's", logical_processors_available},
+ {"Schedulers", schedulers},
+ {"Online schedulers", schedulers_online},
+ {"Available schedulers", schedulers_available}
+ ]}
+ ],
+ Mem = [{"Memory Usage", right,
+ [{"Total", {bytes, total}},
+ {"Processes", {bytes, processes}},
+ {"Atoms", {bytes, atom}},
+ {"Binaries", {bytes, binary}},
+ {"Code", {bytes, code}},
+ {"ETS", {bytes, ets}}
+ ]}],
+ Stats = [{"Statistics", right,
+ [{"Up time", {time_ms, uptime}},
+ {"Max Processes", process_limit},
+ {"Processes", process_count},
+ {"Run Queue", run_queue},
+ {"IO Input", {bytes, io_input}},
+ {"IO Output", {bytes, io_output}}
+ ]}
+ ],
+ {Sys, Mem, Cpu, Stats}.
%%%%%%%%%%%%%%%%%%%%%%% Callbacks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/lib/observer/src/observer_trace_wx.erl b/lib/observer/src/observer_trace_wx.erl
index 9c0243e4a7..af90e2100c 100644
--- a/lib/observer/src/observer_trace_wx.erl
+++ b/lib/observer/src/observer_trace_wx.erl
@@ -19,7 +19,7 @@
-module(observer_trace_wx).
--export([start_link/2, add_processes/2]).
+-export([start_link/2, add_processes/1, add_ports/1]).
-export([init/1, handle_info/2, terminate/2, code_change/3, handle_call/3,
handle_event/2, handle_cast/2]).
@@ -31,11 +31,15 @@
-define(SAVE_TRACEOPTS, 305).
-define(LOAD_TRACEOPTS, 306).
-define(TOGGLE_TRACE, 307).
--define(ADD_NEW, 308).
--define(ADD_TP, 309).
--define(TRACE_OUTPUT, 310).
--define(TRACE_DEFMS, 311).
--define(TRACE_DEFPS, 312).
+-define(ADD_NEW_PROCS, 308).
+-define(ADD_NEW_PORTS, 309).
+-define(ADD_TP, 310).
+-define(TRACE_OUTPUT, 311).
+-define(DEF_MS_FUNCS, 312).
+-define(DEF_MS_SEND, 313).
+-define(DEF_MS_RECV, 314).
+-define(DEF_PROC_OPTS, 315).
+-define(DEF_PORT_OPTS, 316).
-define(NODES_WIN, 330).
-define(ADD_NODES, 331).
@@ -45,36 +49,53 @@
-define(EDIT_PROCS, 341).
-define(REMOVE_PROCS, 342).
--define(MODULES_WIN, 350).
+-define(PORT_WIN, 350).
+-define(EDIT_PORTS, 351).
+-define(REMOVE_PORTS, 352).
--define(FUNCS_WIN, 360).
--define(EDIT_FUNCS_MS, 361).
--define(REMOVE_FUNCS_MS, 362).
+-define(MODULES_WIN, 360).
+-define(REMOVE_MOD_MS, 361).
--define(LOG_WIN, 370).
--define(LOG_SAVE, 321).
--define(LOG_CLEAR, 322).
+-define(FUNCS_WIN, 370).
+-define(EDIT_FUNCS_MS, 371).
+-define(REMOVE_FUNCS_MS, 372).
+
+-define(LOG_WIN, 380).
+-define(LOG_SAVE, 381).
+-define(LOG_CLEAR, 382).
+
+-define(NO_NODES_HELP,"Right click to add nodes").
+-define(NODES_HELP,"Select nodes to see traced processes and ports").
+-define(NO_P_HELP,"Add items from Processes/Ports tab").
+-define(P_HELP,"Select nodes to see traced processes and ports").
+-define(NO_TP_HELP,"Add trace pattern with button below").
+-define(TP_HELP,"Select module to see trace patterns").
-record(state,
{parent,
panel,
- n_view, p_view, m_view, f_view, %% The listCtrl's
+ n_view, proc_view, port_view, m_view, f_view, %% The listCtrl's
logwin, %% The latest log window
nodes = [],
toggle_button,
- tpids = [], %% #tpid
- def_trace_opts = [],
+ tpids = [], % #titem
+ tports = [], % #titem
+ def_proc_flags = [],
+ def_port_flags = [],
output = [],
tpatterns = dict:new(), % Key =:= Module::atom, Value =:= {M, F, A, MatchSpec}
match_specs = []}). % [ #match_spec{} ]
--record(tpid, {pid, opts}).
+-record(titem, {id, opts}).
start_link(Notebook, ParentPid) ->
wx_object:start_link(?MODULE, [Notebook, ParentPid], []).
-add_processes(Tracer, Pids) when is_list(Pids) ->
- wx_object:cast(Tracer, {add_processes, Pids}).
+add_processes(Pids) when is_list(Pids) ->
+ wx_object:cast(observer_wx:get_tracer(), {add_processes, Pids}).
+
+add_ports(Ports) when is_list(Ports) ->
+ wx_object:cast(observer_wx:get_tracer(), {add_ports, Ports}).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -87,11 +108,13 @@ create_window(Notebook, ParentPid) ->
Sizer = wxBoxSizer:new(?wxVERTICAL),
Splitter = wxSplitterWindow:new(Panel, [{size, wxWindow:getClientSize(Panel)},
{style, ?SASH_STYLE}]),
- {NodeProcView, NodeView, ProcessView} = create_process_view(Splitter),
+ {NodeProcView, NodeView, ProcessView, PortView} =
+ create_proc_port_view(Splitter),
{MatchSpecView,ModView,FuncView} = create_matchspec_view(Splitter),
wxSplitterWindow:setSashGravity(Splitter, 0.5),
wxSplitterWindow:setMinimumPaneSize(Splitter,50),
- wxSplitterWindow:splitHorizontally(Splitter, NodeProcView, MatchSpecView),
+ wxSplitterWindow:splitHorizontally(Splitter, NodeProcView, MatchSpecView,
+ [{sashPosition,368}]),
wxSizer:add(Sizer, Splitter, [{flag, ?wxEXPAND bor ?wxALL}, {border, 5}, {proportion, 1}]),
%% Buttons
Buttons = wxBoxSizer:new(?wxHORIZONTAL),
@@ -99,7 +122,8 @@ create_window(Notebook, ParentPid) ->
wxSizer:add(Buttons, ToggleButton, [{flag, ?wxALIGN_CENTER_VERTICAL}]),
wxSizer:addSpacer(Buttons, 15),
wxSizer:add(Buttons, wxButton:new(Panel, ?ADD_NODES, [{label, "Add Nodes"}])),
- wxSizer:add(Buttons, wxButton:new(Panel, ?ADD_NEW, [{label, "Add 'new' Process"}])),
+ wxSizer:add(Buttons, wxButton:new(Panel, ?ADD_NEW_PROCS, [{label, "Add 'new' Processes"}])),
+ wxSizer:add(Buttons, wxButton:new(Panel, ?ADD_NEW_PORTS, [{label, "Add 'new' Ports"}])),
wxSizer:add(Buttons, wxButton:new(Panel, ?ADD_TP, [{label, "Add Trace Pattern"}])),
wxMenu:connect(Panel, command_togglebutton_clicked, [{skip, true}]),
wxMenu:connect(Panel, command_button_clicked, [{skip, true}]),
@@ -107,24 +131,47 @@ create_window(Notebook, ParentPid) ->
{border, 5}, {proportion,0}]),
wxWindow:setSizer(Panel, Sizer),
{Panel, #state{parent=ParentPid, panel=Panel,
- n_view=NodeView, p_view=ProcessView, m_view=ModView, f_view=FuncView,
+ n_view=NodeView, proc_view=ProcessView, port_view=PortView,
+ m_view=ModView, f_view=FuncView,
toggle_button = ToggleButton,
match_specs=default_matchspecs()}}.
default_matchspecs() ->
- Ms = [{"Return Trace", [{'_', [], [{return_trace}]}], "fun(_) -> return_trace() end"},
- {"Exception Trace", [{'_', [], [{exception_trace}]}], "fun(_) -> exception_trace() end"},
- {"Message Caller", [{'_', [], [{message,{caller}}]}], "fun(_) -> message(caller()) end"},
- {"Message Dump", [{'_', [], [{message,{process_dump}}]}], "fun(_) -> message(process_dump()) end"}],
+ [{Key,default_matchspecs(Key)} || Key <- [funcs,send,'receive']].
+default_matchspecs(Key) ->
+ Ms = get_default_matchspecs(Key),
[make_ms(Name,Term,FunStr) || {Name,Term,FunStr} <- Ms].
-create_process_view(Parent) ->
+get_default_matchspecs(funcs) ->
+ [{"Return Trace", [{'_', [], [{return_trace}]}],
+ "fun(_) -> return_trace() end"},
+ {"Exception Trace", [{'_', [], [{exception_trace}]}],
+ "fun(_) -> exception_trace() end"},
+ {"Message Caller", [{'_', [], [{message,{caller}}]}],
+ "fun(_) -> message(caller()) end"},
+ {"Message Dump", [{'_', [], [{message,{process_dump}}]}],
+ "fun(_) -> message(process_dump()) end"}];
+get_default_matchspecs(send) ->
+ [{"To local node", [{['$1','_'], [{'==',{node,'$1'},{node}}], []}],
+ "fun([Pid,_]) when node(Pid)==node() ->\n true\nend"},
+ {"To remote node", [{['$1','_'], [{'=/=',{node,'$1'},{node}}], []}],
+ "fun([Pid,_]) when node(Pid)=/=node() ->\n true\nend"}];
+get_default_matchspecs('receive') ->
+ [{"From local node", [{['$1','_','_'], [{'==','$1',{node}}], []}],
+ "fun([Node,_,_]) when Node==node() ->\n true\nend"},
+ {"From remote node", [{['$1','_','_'], [{'=/=','$1',{node}}], []}],
+ "fun([Node,_,_]) when Node=/=node() ->\n true\nend"}].
+
+
+create_proc_port_view(Parent) ->
Panel = wxPanel:new(Parent),
MainSz = wxBoxSizer:new(?wxHORIZONTAL),
Style = ?wxLC_REPORT bor ?wxLC_HRULES,
Splitter = wxSplitterWindow:new(Panel, [{style, ?SASH_STYLE}]),
Nodes = wxListCtrl:new(Splitter, [{winid, ?NODES_WIN}, {style, Style}]),
- Procs = wxListCtrl:new(Splitter, [{winid, ?PROC_WIN}, {style, Style}]),
+ ProcsPortsSplitter = wxSplitterWindow:new(Splitter, [{style, ?SASH_STYLE}]),
+ Procs = wxListCtrl:new(ProcsPortsSplitter, [{winid,?PROC_WIN},{style,Style}]),
+ Ports = wxListCtrl:new(ProcsPortsSplitter, [{winid,?PORT_WIN},{style,Style}]),
Li = wxListItem:new(),
wxListItem:setText(Li, "Nodes"),
wxListCtrl:insertColumn(Nodes, 0, Li),
@@ -136,31 +183,57 @@ create_process_view(Parent) ->
wxListCtrl:setColumnWidth(Procs, Col, DefSize),
Col + 1
end,
- ListItems = [{"Process Id", ?wxLIST_FORMAT_CENTER, 120},
- {"Trace Options", ?wxLIST_FORMAT_LEFT, 300}],
- lists:foldl(AddProc, 0, ListItems),
+ ProcListItems = [{"Process Id", ?wxLIST_FORMAT_CENTER, 120},
+ {"Trace Options", ?wxLIST_FORMAT_LEFT, 300}],
+ lists:foldl(AddProc, 0, ProcListItems),
+
+ AddPort = fun({Name, Align, DefSize}, Col) ->
+ wxListItem:setText(Li, Name),
+ wxListItem:setAlign(Li, Align),
+ wxListCtrl:insertColumn(Ports, Col, Li),
+ wxListCtrl:setColumnWidth(Ports, Col, DefSize),
+ Col + 1
+ end,
+ PortListItems = [{"Port Id", ?wxLIST_FORMAT_CENTER, 120},
+ {"Trace Options", ?wxLIST_FORMAT_LEFT, 300}],
+ lists:foldl(AddPort, 0, PortListItems),
+
wxListItem:destroy(Li),
wxSplitterWindow:setSashGravity(Splitter, 0.0),
wxSplitterWindow:setMinimumPaneSize(Splitter,50),
- wxSplitterWindow:splitVertically(Splitter, Nodes, Procs, [{sashPosition, 155}]),
+ wxSplitterWindow:splitVertically(Splitter, Nodes, ProcsPortsSplitter,
+ [{sashPosition, 155}]),
wxSizer:add(MainSz, Splitter, [{flag, ?wxEXPAND}, {proportion, 1}]),
+ wxSplitterWindow:setSashGravity(ProcsPortsSplitter, 0.5),
+ wxSplitterWindow:setMinimumPaneSize(ProcsPortsSplitter,50),
+ wxSplitterWindow:splitHorizontally(ProcsPortsSplitter, Procs, Ports,
+ [{sashPosition, 182}]),
+
wxListCtrl:connect(Procs, command_list_item_right_click),
+ wxListCtrl:connect(Ports, command_list_item_right_click),
wxListCtrl:connect(Nodes, command_list_item_right_click),
+ wxListCtrl:connect(Nodes, command_list_item_selected),
wxListCtrl:connect(Procs, size, [{skip, true}]),
+ wxListCtrl:connect(Ports, size, [{skip, true}]),
wxListCtrl:connect(Nodes, size, [{skip, true}]),
+ wxListCtrl:setToolTip(Nodes, ?NO_NODES_HELP),
+ wxListCtrl:setToolTip(Procs, ?NO_P_HELP),
+ wxListCtrl:setToolTip(Ports, ?NO_P_HELP),
+
wxPanel:setSizer(Panel, MainSz),
wxWindow:setFocus(Procs),
- {Panel, Nodes, Procs}.
+ {Panel, Nodes, Procs, Ports}.
create_matchspec_view(Parent) ->
Panel = wxPanel:new(Parent),
MainSz = wxBoxSizer:new(?wxHORIZONTAL),
Style = ?wxLC_REPORT bor ?wxLC_HRULES,
Splitter = wxSplitterWindow:new(Panel, [{style, ?SASH_STYLE}]),
- Modules = wxListCtrl:new(Splitter, [{winid, ?MODULES_WIN}, {style, Style}]),
+ Modules = wxListCtrl:new(Splitter, [{winid, ?MODULES_WIN},
+ {style, Style bor ?wxLC_SINGLE_SEL}]),
Funcs = wxListCtrl:new(Splitter, [{winid, ?FUNCS_WIN}, {style, Style}]),
Li = wxListItem:new(),
@@ -182,7 +255,9 @@ create_matchspec_view(Parent) ->
wxListCtrl:connect(Modules, size, [{skip, true}]),
wxListCtrl:connect(Funcs, size, [{skip, true}]),
wxListCtrl:connect(Modules, command_list_item_selected),
+ wxListCtrl:connect(Modules, command_list_item_right_click),
wxListCtrl:connect(Funcs, command_list_item_right_click),
+ wxListCtrl:setToolTip(Panel, ?NO_TP_HELP),
wxPanel:setSizer(Panel, MainSz),
{Panel, Modules, Funcs}.
@@ -192,8 +267,11 @@ create_menues(Parent) ->
#create_menu{id = ?SAVE_TRACEOPTS, text = "Save settings"}]},
{"Options",
[#create_menu{id = ?TRACE_OUTPUT, text = "Output"},
- #create_menu{id = ?TRACE_DEFMS, text = "Match Specifications"},
- #create_menu{id = ?TRACE_DEFPS, text = "Default Process Options"}]}
+ #create_menu{id = ?DEF_MS_FUNCS, text = "Default Match Specifications for Functions"},
+ #create_menu{id = ?DEF_MS_SEND, text = "Default Match Specifications for 'send'"},
+ #create_menu{id = ?DEF_MS_RECV, text = "Default Match Specifications for 'receive'"},
+ #create_menu{id = ?DEF_PROC_OPTS, text = "Default Process Options"},
+ #create_menu{id = ?DEF_PORT_OPTS, text = "Default Port Options"}]}
],
observer_wx:create_menus(Parent, Menus).
@@ -206,11 +284,19 @@ handle_event(#wx{obj=Obj, event=#wxSize{size={W,_}}}, State) ->
end,
{noreply, State};
-handle_event(#wx{id=?ADD_NEW}, State = #state{panel=Parent, def_trace_opts=TraceOpts}) ->
+handle_event(#wx{id=?ADD_NEW_PROCS}, State = #state{panel=Parent, def_proc_flags=TraceOpts}) ->
try
Opts = observer_traceoptions_wx:process_trace(Parent, TraceOpts),
- Process = #tpid{pid=new, opts=Opts},
- {noreply, do_add_processes([Process], State#state{def_trace_opts=Opts})}
+ Process = #titem{id=new_processes, opts=Opts},
+ {noreply, do_add_processes([Process], State#state{def_proc_flags=Opts})}
+ catch cancel -> {noreply, State}
+ end;
+
+handle_event(#wx{id=?ADD_NEW_PORTS}, State = #state{panel=Parent, def_port_flags=TraceOpts}) ->
+ try
+ Opts = observer_traceoptions_wx:port_trace(Parent, TraceOpts),
+ Port = #titem{id=new_ports, opts=Opts},
+ {noreply, do_add_ports([Port], State#state{def_port_flags=Opts})}
catch cancel -> {noreply, State}
end;
@@ -233,26 +319,36 @@ handle_event(#wx{id=?MODULES_WIN, event=#wxList{type=command_list_item_selected,
update_functions_view(dict:fetch(Module, TPs), Fview),
{noreply, State};
+handle_event(#wx{id=?NODES_WIN,
+ event=#wxList{type=command_list_item_selected}},
+ State = #state{tpids=Tpids, tports=Tports, n_view=Nview,
+ proc_view=ProcView, port_view=PortView, nodes=Ns}) ->
+ Nodes = get_selected_items(Nview, Ns),
+ update_p_view(Tpids, ProcView, Nodes),
+ update_p_view(Tports, PortView, Nodes),
+ {noreply, State};
+
handle_event(#wx{event = #wxCommand{type = command_togglebutton_clicked, commandInt = 1}},
#state{panel = Panel,
nodes = Nodes,
tpids = TProcs,
+ tports = TPorts,
tpatterns = TPs0,
toggle_button = ToggleBtn,
output = Opts
} = State) ->
try
TPs = dict:to_list(TPs0),
- (TProcs == []) andalso throw({error, "No processes traced"}),
+ (TProcs == []) andalso (TPorts == []) andalso throw({error, "No processes or ports traced"}),
(Nodes == []) andalso throw({error, "No nodes traced"}),
- HaveCallTrace = fun(#tpid{opts=Os}) -> lists:member(functions,Os) end,
+ HaveCallTrace = fun(#titem{opts=Os}) -> lists:member(functions,Os) end,
WStr = "Call trace actived but no trace patterns used",
(TPs == []) andalso lists:any(HaveCallTrace, TProcs) andalso
observer_wx:create_txt_dialog(Panel, WStr, "Warning", ?wxICON_WARNING),
{TTB, LogWin} = ttb_output_args(Panel, Opts),
{ok, _} = ttb:tracer(Nodes, TTB),
- setup_ttb(TPs, TProcs),
+ setup_ttb(TPs, TProcs, TPorts),
wxToggleButton:setLabel(ToggleBtn, "Stop Trace"),
{noreply, State#state{logwin=LogWin}}
catch {error, Msg} ->
@@ -302,7 +398,8 @@ handle_event(#wx{id=?LOG_SAVE, userData=TCtrl}, #state{panel=Panel} = State) ->
handle_event(#wx{id = ?SAVE_TRACEOPTS},
#state{panel = Panel,
- def_trace_opts = TraceOpts,
+ def_proc_flags = ProcFlags,
+ def_port_flags = PortFlags,
match_specs = MatchSpecs,
tpatterns = TracePatterns,
output = Output
@@ -312,7 +409,7 @@ handle_event(#wx{id = ?SAVE_TRACEOPTS},
?wxID_OK ->
Path = wxFileDialog:getPath(Dialog),
write_file(Panel, Path,
- TraceOpts, MatchSpecs, Output,
+ ProcFlags, PortFlags, MatchSpecs, Output,
dict:to_list(TracePatterns)
);
_ ->
@@ -333,52 +430,159 @@ handle_event(#wx{id = ?LOAD_TRACEOPTS}, #state{panel = Panel} = State) ->
wxDialog:destroy(Dialog),
{noreply, State2};
-handle_event(#wx{id=Type, event=#wxList{type=command_list_item_right_click}},
- State = #state{panel=Panel}) ->
- Menus = case Type of
- ?PROC_WIN ->
- [{?EDIT_PROCS, "Edit process options"},
- {?REMOVE_PROCS, "Remove processes"}];
- ?FUNCS_WIN ->
- [{?EDIT_FUNCS_MS, "Edit matchspecs"},
- {?REMOVE_FUNCS_MS, "Remove trace patterns"}];
- ?NODES_WIN ->
- [{?ADD_NODES, "Trace other nodes"},
- {?REMOVE_NODES, "Remove nodes"}]
- end,
- Menu = wxMenu:new(),
- [wxMenu:append(Menu,Id,Str) || {Id,Str} <- Menus],
- wxWindow:popupMenu(Panel, Menu),
- wxMenu:destroy(Menu),
+handle_event(#wx{id=?PROC_WIN, event=#wxList{type=command_list_item_right_click}},
+ State = #state{panel=Panel, proc_view=LCtrl, tpids=Tpids,
+ n_view=Nview, nodes=Nodes}) ->
+ case get_visible_ps(Tpids, Nodes, Nview) of
+ [] ->
+ ok;
+ Visible ->
+ case get_selected_items(LCtrl, Visible) of
+ [] ->
+ ok;
+ _ ->
+ create_right_click_menu(
+ Panel,
+ [{?EDIT_PROCS, "Edit process options"},
+ {?REMOVE_PROCS, "Remove processes"}])
+ end
+ end,
+ {noreply, State};
+
+handle_event(#wx{id=?PORT_WIN, event=#wxList{type=command_list_item_right_click}},
+ State = #state{panel=Panel, port_view=LCtrl, tports=Tports,
+ n_view=Nview, nodes=Nodes}) ->
+ case get_visible_ps(Tports, Nodes, Nview) of
+ [] ->
+ ok;
+ Visible ->
+ case get_selected_items(LCtrl, Visible) of
+ [] ->
+ ok;
+ _ ->
+ create_right_click_menu(
+ Panel,
+ [{?EDIT_PORTS, "Edit port options"},
+ {?REMOVE_PORTS, "Remove ports"}])
+ end
+ end,
+ {noreply, State};
+
+handle_event(#wx{id=?MODULES_WIN,event=#wxList{type=command_list_item_right_click}},
+ State = #state{panel=Panel, m_view=Mview, tpatterns=TPs}) ->
+ case get_selected_items(Mview, lists:sort(dict:fetch_keys(TPs))) of
+ [] ->
+ ok;
+ _ ->
+ create_right_click_menu(
+ Panel,
+ [{?REMOVE_MOD_MS, "Remove trace patterns"}])
+ end,
+ {noreply,State};
+
+handle_event(#wx{id=?FUNCS_WIN,event=#wxList{type=command_list_item_right_click}},
+ State = #state{panel=Panel, m_view=Mview, f_view=Fview,
+ tpatterns=TPs}) ->
+ case get_selected_items(Mview, lists:sort(dict:fetch_keys(TPs))) of
+ [] ->
+ ok;
+ [Module] ->
+ case get_selected_items(Fview, dict:fetch(Module, TPs)) of
+ [] ->
+ ok;
+ _ ->
+ create_right_click_menu(
+ Panel,
+ [{?EDIT_FUNCS_MS, "Edit matchspecs"},
+ {?REMOVE_FUNCS_MS, "Remove trace patterns"}])
+ end
+ end,
+ {noreply,State};
+
+handle_event(#wx{id=?NODES_WIN,event=#wxList{type=command_list_item_right_click}},
+ State = #state{panel=Panel, n_view=Nview, nodes=Nodes}) ->
+ Menu =
+ case get_selected_items(Nview, Nodes) of
+ [] ->
+ [{?ADD_NODES, "Add nodes"}];
+ _ ->
+ [{?ADD_NODES, "Add nodes"},
+ {?REMOVE_NODES, "Remove nodes"}]
+ end,
+ create_right_click_menu(Panel,Menu),
{noreply, State};
-handle_event(#wx{id=?EDIT_PROCS}, #state{panel=Panel, tpids=Tpids, p_view=Ps} = State) ->
+handle_event(#wx{id=?EDIT_PROCS}, #state{panel=Panel, tpids=Tpids, proc_view=Procs} = State) ->
try
- [#tpid{opts=DefOpts}|_] = Selected = get_selected_items(Ps, Tpids),
+ [#titem{opts=DefOpts}|_] = Selected = get_selected_items(Procs, Tpids),
Opts = observer_traceoptions_wx:process_trace(Panel, DefOpts),
- Changed = [Tpid#tpid{opts=Opts} || Tpid <- Selected],
- {noreply, do_add_processes(Changed, State#state{def_trace_opts=Opts})}
+ Changed = [Tpid#titem{opts=Opts} || Tpid <- Selected],
+ {noreply, do_add_processes(Changed, State#state{def_proc_flags=Opts})}
catch _:_ ->
{noreply, State}
end;
-handle_event(#wx{id=?REMOVE_PROCS}, #state{tpids=Tpids, p_view=LCtrl} = State) ->
+handle_event(#wx{id=?REMOVE_PROCS},
+ #state{tpids=Tpids, proc_view=LCtrl,
+ n_view=Nview, nodes=Nodes} = State) ->
Selected = get_selected_items(LCtrl, Tpids),
Pids = Tpids -- Selected,
- update_process_view(Pids, LCtrl),
+ update_p_view(Pids, LCtrl, Nodes, Nview),
{noreply, State#state{tpids=Pids}};
-handle_event(#wx{id=?TRACE_DEFPS}, #state{panel=Panel, def_trace_opts=PO} = State) ->
+handle_event(#wx{id=?EDIT_PORTS}, #state{panel=Panel, tports=Tports, port_view=Ports} = State) ->
+ try
+ [#titem{opts=DefOpts}|_] = Selected = get_selected_items(Ports, Tports),
+ Opts = observer_traceoptions_wx:port_trace(Panel, DefOpts),
+ Changed = [Tport#titem{opts=Opts} || Tport <- Selected],
+ {noreply, do_add_ports(Changed, State#state{def_port_flags=Opts})}
+ catch _:_ ->
+ {noreply, State}
+ end;
+
+handle_event(#wx{id=?REMOVE_PORTS},
+ #state{tports=Tports, port_view=LCtrl,
+ n_view=Nview, nodes=Nodes} = State) ->
+ Selected = get_selected_items(LCtrl, Tports),
+ Ports = Tports -- Selected,
+ update_p_view(Ports, LCtrl, Nodes, Nview),
+ {noreply, State#state{tports=Ports}};
+
+handle_event(#wx{id=?DEF_PROC_OPTS}, #state{panel=Panel, def_proc_flags=PO} = State) ->
try
Opts = observer_traceoptions_wx:process_trace(Panel, PO),
- {noreply, State#state{def_trace_opts=Opts}}
+ {noreply, State#state{def_proc_flags=Opts}}
catch _:_ ->
{noreply, State}
end;
-handle_event(#wx{id=?TRACE_DEFMS}, #state{panel=Panel, match_specs=Ms} = State) ->
+handle_event(#wx{id=?DEF_PORT_OPTS}, #state{panel=Panel, def_port_flags=PO} = State) ->
+ try
+ Opts = observer_traceoptions_wx:port_trace(Panel, PO),
+ {noreply, State#state{def_port_flags=Opts}}
+ catch _:_ ->
+ {noreply, State}
+ end;
+
+handle_event(#wx{id=?DEF_MS_FUNCS}, #state{panel=Panel, match_specs=Ms} = State) ->
try %% Return selected MS and sends new MS's to us
- observer_traceoptions_wx:select_matchspec(self(), Panel, Ms)
+ observer_traceoptions_wx:select_matchspec(self(), Panel, Ms, funcs)
+ catch _:_ ->
+ cancel
+ end,
+ {noreply, State};
+
+handle_event(#wx{id=?DEF_MS_SEND}, #state{panel=Panel, match_specs=Ms} = State) ->
+ try %% Return selected MS and sends new MS's to us
+ observer_traceoptions_wx:select_matchspec(self(), Panel, Ms, send)
+ catch _:_ ->
+ cancel
+ end,
+ {noreply, State};
+
+handle_event(#wx{id=?DEF_MS_RECV}, #state{panel=Panel, match_specs=Ms} = State) ->
+ try %% Return selected MS and sends new MS's to us
+ observer_traceoptions_wx:select_matchspec(self(), Panel, Ms, 'receive')
catch _:_ ->
cancel
end,
@@ -389,12 +593,34 @@ handle_event(#wx{id=?EDIT_FUNCS_MS}, #state{panel=Panel, tpatterns=TPs,
match_specs=Mss
} = State) ->
try
- [Module] = get_selected_items(Mview, lists:sort(dict:fetch_keys(TPs))),
- Selected = get_selected_items(LCtrl, dict:fetch(Module, TPs)),
- Ms = observer_traceoptions_wx:select_matchspec(self(), Panel, Mss),
- Changed = [TP#tpattern{ms=Ms} || TP <- Selected],
- {noreply, do_add_patterns({Module, Changed}, State)}
- catch _:_ ->
+ case get_selected_items(Mview, lists:sort(dict:fetch_keys(TPs))) of
+ [] ->
+ throw({error,"No module selected"});
+ [Module] ->
+ Selected = get_selected_items(LCtrl, dict:fetch(Module, TPs)),
+ Key = case Module of
+ 'Events' ->
+ SelectedEvents =
+ [Event || #tpattern{fa=Event} <- Selected],
+ E1 = hd(SelectedEvents),
+ case lists:all(fun(E) when E==E1 -> true;
+ (_) -> false
+ end,
+ SelectedEvents) of
+ true -> E1;
+ false -> throw({error,"Can not set match specs for multiple event types"})
+ end;
+ _ -> funcs
+ end,
+ Ms = observer_traceoptions_wx:select_matchspec(self(), Panel,
+ Mss, Key),
+ Changed = [TP#tpattern{ms=Ms} || TP <- Selected],
+ {noreply, do_add_patterns({Module, Changed}, State)}
+ end
+ catch {error, Msg} ->
+ observer_wx:create_txt_dialog(Panel, Msg, "Error", ?wxICON_ERROR),
+ {noreply, State};
+ cancel ->
{noreply, State}
end;
@@ -417,6 +643,16 @@ handle_event(#wx{id=?REMOVE_FUNCS_MS}, #state{tpatterns=TPs0, f_view=LCtrl, m_vi
{noreply, State#state{tpatterns=TPs}}
end;
+handle_event(#wx{id=?REMOVE_MOD_MS}, #state{tpatterns=TPs0, f_view=LCtrl, m_view=Mview} = State) ->
+ case get_selected_items(Mview, lists:sort(dict:fetch_keys(TPs0))) of
+ [] -> {noreply, State};
+ [Module] ->
+ update_functions_view([], LCtrl),
+ TPs = dict:erase(Module, TPs0),
+ update_modules_view(lists:sort(dict:fetch_keys(TPs)), Module, Mview),
+ {noreply, State#state{tpatterns=TPs}}
+ end;
+
handle_event(#wx{id=?TRACE_OUTPUT}, #state{panel=Panel, output=Out0} = State) ->
try
Out = observer_traceoptions_wx:output(Panel, Out0),
@@ -458,11 +694,20 @@ handle_call(Msg, From, _State) ->
error({unhandled_call, Msg, From}).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-handle_cast({add_processes, Pids}, State = #state{panel=Parent, def_trace_opts=TraceOpts}) ->
+handle_cast({add_processes, Pids}, State = #state{panel=Parent, def_proc_flags=TraceOpts}) ->
try
Opts = observer_traceoptions_wx:process_trace(Parent, TraceOpts),
- POpts = [#tpid{pid=Pid, opts=Opts} || Pid <- Pids],
- S = do_add_processes(POpts, State#state{def_trace_opts=Opts}),
+ POpts = [#titem{id=Pid, opts=Opts} || Pid <- Pids],
+ S = do_add_processes(POpts, State#state{def_proc_flags=Opts}),
+ {noreply, S}
+ catch cancel ->
+ {noreply, State}
+ end;
+handle_cast({add_ports, Ports}, State = #state{panel=Parent, def_port_flags=TraceOpts}) ->
+ try
+ Opts = observer_traceoptions_wx:port_trace(Parent, TraceOpts),
+ POpts = [#titem{id=Id, opts=Opts} || Id <- Ports],
+ S = do_add_ports(POpts, State#state{def_port_flags=Opts}),
{noreply, S}
catch cancel ->
{noreply, State}
@@ -510,45 +755,93 @@ do_add_patterns({Module, NewPs}, State=#state{tpatterns=TPs0, m_view=Mview, f_vi
State#state{tpatterns=TPs}
end.
-do_add_processes(POpts, S0=#state{n_view=Nview, p_view=LCtrl, tpids=OldPids, nodes=Ns0}) ->
- case merge_pids(POpts, OldPids) of
- {OldPids, [], []} ->
- S0;
- {Pids, New, _Changed} ->
- update_process_view(Pids, LCtrl),
- Ns1 = lists:usort([node(Pid) || #tpid{pid=Pid} <- New, is_pid(Pid)]),
+do_add_processes(POpts, S0=#state{n_view=Nview, proc_view=LCtrl, tpids=OldPids, nodes=OldNodes}) ->
+ CheckFun = fun(Pid) -> is_pid(Pid) end,
+ {Pids, Nodes} = do_add_pid_or_port(POpts, Nview, LCtrl,
+ OldPids, OldNodes, CheckFun),
+ S0#state{tpids=Pids, nodes=Nodes}.
+
+do_add_ports(POpts, S0=#state{n_view=Nview, port_view=LCtrl, tports=OldPorts, nodes=OldNodes}) ->
+ CheckFun = fun(Port) -> is_port(Port) end,
+ {Ports, Nodes} = do_add_pid_or_port(POpts, Nview, LCtrl,
+ OldPorts, OldNodes, CheckFun),
+ S0#state{tports=Ports, nodes=Nodes}.
+
+do_add_pid_or_port(POpts, Nview, LCtrl, OldPs, Ns0, Check) ->
+ case merge_trace_items(POpts, OldPs) of
+ {OldPs, [], []} ->
+ {OldPs,Ns0};
+ {Ps, New, _Changed} ->
+ Ns1 = lists:usort([node(Id) || #titem{id=Id} <- New, Check(Id)]),
Nodes = case ordsets:subtract(Ns1, Ns0) of
+ [] when Ns0==[] -> [observer_wx:get_active_node()];
[] -> Ns0; %% No new Nodes
- NewNs ->
- %% if dynamicly updates add trace patterns for new nodes
- All = ordsets:union(NewNs, Ns0),
- update_nodes_view(All, Nview),
- All
+ NewNs -> ordsets:union(NewNs, Ns0)
end,
- S0#state{tpids=Pids, nodes=Nodes}
+ update_nodes_view(Nodes, Nview),
+ update_p_view(Ps, LCtrl, Nodes, Nview),
+ {Ps, Nodes}
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-update_process_view(Pids, LCtrl) ->
+get_visible_ps(PidsOrPorts, [Node], _Nview) ->
+ %% If only one node, treat this as selected
+ get_visible_ps(PidsOrPorts, [Node]);
+get_visible_ps(PidsOrPorts, Nodes, Nview) ->
+ get_visible_ps(PidsOrPorts, get_selected_items(Nview, Nodes)).
+
+get_visible_ps(PidsOrPorts, Nodes) ->
+ %% Show pids/ports belonging to the selected nodes only (+ named pids/ports)
+ [P || P <- PidsOrPorts,
+ is_atom(P#titem.id) orelse
+ lists:member(node(P#titem.id),Nodes)].
+
+update_p_view(PidsOrPorts, LCtrl, Nodes, Nview) ->
+ update_p_view(get_visible_ps(PidsOrPorts, Nodes, Nview), LCtrl).
+update_p_view(PidsOrPorts, LCtrl, Nodes) ->
+ update_p_view(get_visible_ps(PidsOrPorts, Nodes), LCtrl).
+
+update_p_view(PidsOrPorts, LCtrl) ->
+ %% pid- or port-view
wxListCtrl:deleteAllItems(LCtrl),
- wx:foldl(fun(#tpid{pid=Pid, opts=Opts}, Row) ->
+ wx:foldl(fun(#titem{id=Id, opts=Opts}, Row) ->
_Item = wxListCtrl:insertItem(LCtrl, Row, ""),
?EVEN(Row) andalso
wxListCtrl:setItemBackgroundColour(LCtrl, Row, ?BG_EVEN),
- wxListCtrl:setItem(LCtrl, Row, 0, observer_lib:to_str(Pid)),
+ wxListCtrl:setItem(LCtrl, Row, 0, observer_lib:to_str(Id)),
wxListCtrl:setItem(LCtrl, Row, 1, observer_lib:to_str(Opts)),
Row+1
- end, 0, Pids).
+ end, 0, PidsOrPorts),
+ case PidsOrPorts of
+ [] ->
+ wxListCtrl:setToolTip(LCtrl,?NO_P_HELP);
+ _ ->
+ wxListCtrl:setToolTip(LCtrl,?P_HELP)
+ end.
update_nodes_view(Nodes, LCtrl) ->
+ Selected =
+ case Nodes of
+ [_] -> Nodes;
+ _ -> get_selected_items(LCtrl, Nodes)
+ end,
wxListCtrl:deleteAllItems(LCtrl),
wx:foldl(fun(Node, Row) ->
_Item = wxListCtrl:insertItem(LCtrl, Row, ""),
?EVEN(Row) andalso
wxListCtrl:setItemBackgroundColour(LCtrl, Row, ?BG_EVEN),
wxListCtrl:setItem(LCtrl, Row, 0, observer_lib:to_str(Node)),
+ lists:member(Node,Selected) andalso % keep selection
+ wxListCtrl:setItemState(LCtrl, Row, 16#FFFF,
+ ?wxLIST_STATE_SELECTED),
Row+1
- end, 0, Nodes).
+ end, 0, Nodes),
+ case Nodes of
+ [] ->
+ wxListCtrl:setToolTip(LCtrl,?NO_NODES_HELP);
+ _ ->
+ wxListCtrl:setToolTip(LCtrl,?NODES_HELP)
+ end.
update_modules_view(Mods, Module, LCtrl) ->
wxListCtrl:deleteAllItems(LCtrl),
@@ -560,33 +853,51 @@ update_modules_view(Mods, Module, LCtrl) ->
(Mod =:= Module) andalso
wxListCtrl:setItemState(LCtrl, Row, 16#FFFF, ?wxLIST_STATE_SELECTED),
Row+1
- end, 0, Mods).
+ end, 0, Mods),
+ Parent = wxListCtrl:getParent(LCtrl),
+ case Mods of
+ [] ->
+ wxListCtrl:setToolTip(Parent,?NO_TP_HELP);
+ _ ->
+ wxListCtrl:setToolTip(Parent,?TP_HELP)
+ end.
update_functions_view(Funcs, LCtrl) ->
wxListCtrl:deleteAllItems(LCtrl),
- wx:foldl(fun(#tpattern{fa=FA, ms=#match_spec{str=Ms}}, Row) ->
+ wx:foldl(fun(#tpattern{m=M, fa=FA, ms=#match_spec{str=Ms}}, Row) ->
_Item = wxListCtrl:insertItem(LCtrl, Row, ""),
?EVEN(Row) andalso wxListCtrl:setItemBackgroundColour(LCtrl, Row, ?BG_EVEN),
- wxListCtrl:setItem(LCtrl, Row, 0, observer_lib:to_str({func,FA})),
+ FuncStr =
+ case M of
+ 'Events' ->
+ observer_lib:to_str(FA);
+ _ ->
+ observer_lib:to_str({func,FA})
+ end,
+ wxListCtrl:setItem(LCtrl, Row, 0, FuncStr),
wxListCtrl:setItem(LCtrl, Row, 1, Ms),
Row+1
end, 0, Funcs).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-merge_pids([N1=#tpid{pid=new}|Ns], [N2=#tpid{pid=new}|Old]) ->
- {Pids, New, Changed} = merge_pids_1(Ns,Old),
- {[N1|Pids], New, [{N2,N2}|Changed]};
-merge_pids([N1=#tpid{pid=new}|Ns], Old) ->
- {Pids, New, Changed} = merge_pids_1(Ns,Old),
- {[N1|Pids], [N1|New], Changed};
-merge_pids(Ns, [N2=#tpid{pid=new}|Old]) ->
- {Pids, New, Changed} = merge_pids_1(Ns,Old),
- {[N2|Pids], New, Changed};
-merge_pids(New, Old) ->
- merge_pids_1(New, Old).
-
-merge_pids_1(New, Old) ->
- merge(lists:sort(New), Old, #tpid.pid, [], [], []).
+%% Trace items are processes and ports
+merge_trace_items([N1=#titem{id=NewP}|Ns], [N2=#titem{id=NewP}|Old])
+ when NewP==new_processes; NewP==new_ports ->
+ {Ids, New, Changed} = merge_trace_items_1(Ns,Old),
+ {[N1|Ids], New, [{N2,N2}|Changed]};
+merge_trace_items([N1=#titem{id=NewP}|Ns], Old)
+ when NewP==new_processes; NewP==new_ports ->
+ {Ids, New, Changed} = merge_trace_items_1(Ns,Old),
+ {[N1|Ids], [N1|New], Changed};
+merge_trace_items(Ns, [N2=#titem{id=NewP}|Old])
+ when NewP==new_processes; NewP==new_ports ->
+ {Ids, New, Changed} = merge_trace_items_1(Ns,Old),
+ {[N2|Ids], New, Changed};
+merge_trace_items(New, Old) ->
+ merge_trace_items_1(New, Old).
+
+merge_trace_items_1(New, Old) ->
+ merge(lists:sort(New), Old, #titem.id, [], [], []).
merge_patterns(New, Old) ->
merge(lists:sort(New), Old, #tpattern.fa, [], [], []).
@@ -676,10 +987,12 @@ create_logwindow(Parent, true) ->
wxFrame:show(LogWin),
{LogWin, Text}.
-setup_ttb(TPs, TPids) ->
+setup_ttb(TPs, TPids, TPorts) ->
_R1 = [setup_tps(FTP, []) || {_, FTP} <- TPs],
- _R2 = [ttb:p(Pid, dbg_flags(Flags)) || #tpid{pid=Pid, opts=Flags} <- TPids],
- [#tpid{pid=_Pid, opts=_Flags}|_] = TPids,
+ _R2 = [ttb:p(Pid, dbg_flags(proc,Flags)) ||
+ #titem{id=Pid, opts=Flags} <- TPids],
+ _R3 = [ttb:p(Port, dbg_flags(port,Flags)) ||
+ #titem{id=Port, opts=Flags} <- TPorts],
ok.
%% Sigh order is important
@@ -695,20 +1008,24 @@ setup_tps([First|Rest], Prev) ->
setup_tps([], Prev) ->
[setup_tp(TP) || TP <- lists:reverse(Prev)].
+setup_tp(#tpattern{m='Events',fa=Event, ms=#match_spec{term=Ms}}) ->
+ ttb:tpe(Event,Ms);
setup_tp(#tpattern{m=M,fa={F,A}, ms=#match_spec{term=Ms}}) ->
ttb:tpl(M,F,A,Ms).
-dbg_flags(Flags) ->
- [dbg_flag(Flag) || Flag <- Flags].
+dbg_flags(Type,Flags) ->
+ [dbg_flag(Type,Flag) || Flag <- Flags].
-dbg_flag(send) -> s;
-dbg_flag('receive') -> r;
-dbg_flag(functions) -> c;
-dbg_flag(on_spawn) -> sos;
-dbg_flag(on_link) -> sol;
-dbg_flag(on_first_spawn) -> sofs;
-dbg_flag(on_first_link) -> sofl;
-dbg_flag(events) -> p.
+dbg_flag(_,send) -> s;
+dbg_flag(_,'receive') -> r;
+dbg_flag(proc,functions) -> c;
+dbg_flag(proc,on_spawn) -> sos;
+dbg_flag(proc,on_link) -> sol;
+dbg_flag(proc,on_first_spawn) -> sofs;
+dbg_flag(proc,on_first_link) -> sofl;
+dbg_flag(proc,events) -> p;
+dbg_flag(port,events) -> ports;
+dbg_flag(_,Flag) -> Flag.
textformat(Trace) when element(1, Trace) == trace_ts, tuple_size(Trace) >= 4 ->
format_trace(Trace, tuple_size(Trace)-1, element(tuple_size(Trace),Trace));
@@ -784,23 +1101,28 @@ ftup(Trace, Index, Size) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-write_file(Frame, Filename, TraceOps, MatchSpecs, Output, TPs) ->
- FormatMS = fun(#match_spec{name=Id, term=T, func=F}) ->
- io_lib:format("[{name,\"~s\"}, {term, ~w}, {func, \"~s\"}]",
- [Id, T, F])
- end,
- FormatTP = fun({Module, FTPs}) ->
- List = format_ftp(FTPs, FormatMS),
- io_lib:format("{tp, ~w, [~s]}.~n",[Module, List])
+write_file(Frame, Filename, ProcFlags, PortFlags, MatchSpecs, Output, TPs) ->
+ MSToList = fun(#match_spec{name=Id, term=T, func=F}) ->
+ [{name,Id},{term,T},{func,F}]
end,
+ MSTermList = [{ms,Key,[MSToList(MS) || MS <- MSs]} ||
+ {Key,MSs} <- MatchSpecs],
+ TPToTuple = fun(#tpattern{fa={F,A}, ms=Ms}) ->
+ {F,A,MSToList(Ms)}
+ end,
+ ModuleTermList = [{tp, Module, [TPToTuple(FTP) || FTP <- FTPs]} ||
+ {Module,FTPs} <- TPs],
+
Str =
["%%%\n%%% This file is generated by Observer\n",
"%%%\n%%% DO NOT EDIT!\n%%%\n",
- [["{ms, ", FormatMS(Ms), "}.\n"] || Ms <- MatchSpecs],
- "{traceopts, ", io_lib:format("~w",[TraceOps]) ,"}.\n",
- "{output, ", io_lib:format("~w",[Output]) ,"}.\n",
- [FormatTP(TP) || TP <- TPs]
+ [io_lib:format("~p.~n",[MSTerm]) || MSTerm <- MSTermList],
+ io_lib:format("~p.~n",[{procflags,ProcFlags}]),
+ io_lib:format("~p.~n",[{portflags,PortFlags}]),
+ io_lib:format("~p.~n",[{output,Output}]),
+ [io_lib:format("~p.~n",[ModuleTerm]) || ModuleTerm <- ModuleTermList]
],
+
case file:write_file(Filename, list_to_binary(Str)) of
ok ->
success;
@@ -809,38 +1131,66 @@ write_file(Frame, Filename, TraceOps, MatchSpecs, Output, TPs) ->
observer_wx:create_txt_dialog(Frame, FailMsg, "Error", ?wxICON_ERROR)
end.
-format_ftp([#tpattern{fa={F,A}, ms=Ms}], FormatMS) ->
- io_lib:format("{~w, ~w, ~s}", [F,A,FormatMS(Ms)]);
-format_ftp([#tpattern{fa={F,A}, ms=Ms}|Rest], FormatMS) ->
- [io_lib:format("{~w, ~w, ~s},~n ", [F,A,FormatMS(Ms)]),
- format_ftp(Rest, FormatMS)].
-
-read_settings(Filename, #state{match_specs=Ms0, def_trace_opts=TO0} = State) ->
+read_settings(Filename, #state{match_specs=Ms0, def_proc_flags=ProcFs0, def_port_flags=PortFs0} = State) ->
case file:consult(Filename) of
{ok, Terms} ->
- Ms = lists:usort(Ms0 ++ [parse_ms(MsList) || {ms, MsList} <- Terms]),
- TOs = lists:usort(TO0 ++ proplists:get_value(traceopts, Terms, [])),
+ Ms = parse_ms(Terms, Ms0),
+ ProcFs1 = proplists:get_value(procflags, Terms, []) ++
+ proplists:get_value(traceopts, Terms, []), % for backwards comp.
+ ProcFs = lists:usort(ProcFs0 ++ ProcFs1),
+ PortFs = lists:usort(PortFs0 ++
+ proplists:get_value(portflags, Terms, [])),
Out = proplists:get_value(output, Terms, []),
lists:foldl(fun parse_tp/2,
- State#state{match_specs=Ms, def_trace_opts=TOs, output=Out},
+ State#state{match_specs=Ms, def_proc_flags=ProcFs,
+ def_port_flags=PortFs, output=Out},
Terms);
{error, _} ->
- observer_wx:create_txt_dialog(State#state.panel, "Could not load settings",
+ observer_wx:create_txt_dialog(State#state.panel,
+ "Could not load settings",
"Error", ?wxICON_ERROR),
State
end.
-parse_ms(Opts) ->
- Name = proplists:get_value(name, Opts, "TracePattern"),
- Term = proplists:get_value(term, Opts, [{'_',[],[ok]}]),
- FunStr = proplists:get_value(term, Opts, "fun(_) -> ok end"),
- make_ms(Name, Term, FunStr).
+parse_ms(Terms, OldMSs) ->
+ MSs =
+ case [{Key,[make_ms(MS) || MS <- MSs]} || {ms,Key,MSs} <- Terms] of
+ [] ->
+ case [make_ms(MS) || {ms,MS} <- Terms] of
+ [] ->
+ [];
+ FuncMSs -> % for backwards compatibility
+ [{funcs,FuncMSs}]
+ end;
+ KeyMSs ->
+ KeyMSs
+ end,
+ parse_ms_1(MSs, dict:from_list(OldMSs)).
+
+parse_ms_1([{Key,MSs} | T], Dict) ->
+ parse_ms_1(T, dict:append_list(Key,MSs,Dict));
+parse_ms_1([],Dict) ->
+ [{Key,rm_dups(MSs,[])} || {Key,MSs} <- dict:to_list(Dict)].
+
+rm_dups([H|T],Acc) ->
+ case lists:member(H,Acc) of
+ true ->
+ rm_dups(T,Acc);
+ false ->
+ rm_dups(T,[H|Acc])
+ end;
+rm_dups([],Acc) ->
+ lists:reverse(Acc).
+
+make_ms(MS) ->
+ [{func,FunStr},{name,Name},{term,Term}] = lists:keysort(1,MS),
+ make_ms(Name,Term,FunStr).
make_ms(Name, Term, FunStr) ->
#match_spec{name=Name, term=Term, str=io_lib:format("~w", Term), func = FunStr}.
parse_tp({tp, Mod, FAs}, State) ->
- Patterns = [#tpattern{m=Mod,fa={F,A}, ms=parse_ms(List)} ||
+ Patterns = [#tpattern{m=Mod,fa={F,A}, ms=make_ms(List)} ||
{F,A,List} <- FAs],
do_add_patterns({Mod, Patterns}, State);
parse_tp(_, State) ->
@@ -866,3 +1216,9 @@ get_indecies(Rest = [_|_], I, [_|T]) ->
get_indecies(Rest, I+1, T);
get_indecies(_, _, _) ->
[].
+
+create_right_click_menu(Panel,Menus) ->
+ Menu = wxMenu:new(),
+ [wxMenu:append(Menu,Id,Str) || {Id,Str} <- Menus],
+ wxWindow:popupMenu(Panel, Menu),
+ wxMenu:destroy(Menu).
diff --git a/lib/observer/src/observer_traceoptions_wx.erl b/lib/observer/src/observer_traceoptions_wx.erl
index 9ba9b72b6f..285c298c4b 100644
--- a/lib/observer/src/observer_traceoptions_wx.erl
+++ b/lib/observer/src/observer_traceoptions_wx.erl
@@ -22,8 +22,8 @@
-include_lib("wx/include/wx.hrl").
-include("observer_defs.hrl").
--export([process_trace/2, trace_pattern/4, select_nodes/2,
- output/2, select_matchspec/3]).
+-export([process_trace/2, port_trace/2, trace_pattern/4, select_nodes/2,
+ output/2, select_matchspec/4]).
process_trace(Parent, Default) ->
Dialog = wxDialog:new(Parent, ?wxID_ANY, "Process Options",
@@ -36,12 +36,20 @@ process_trace(Parent, Default) ->
FuncBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace function call", []),
check_box(FuncBox, lists:member(functions, Default)),
+ ArityBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace arity instead of arguments", []),
+ check_box(ArityBox, lists:member(functions, Default)),
SendBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace send message", []),
check_box(SendBox, lists:member(send, Default)),
RecBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace receive message", []),
check_box(RecBox, lists:member('receive', Default)),
EventBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace process events", []),
check_box(EventBox, lists:member(events, Default)),
+ SchedBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace scheduling of processes", []),
+ check_box(SchedBox, lists:member(running_procs, Default)),
+ ExitBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace scheduling of exiting processes", []),
+ check_box(ExitBox, lists:member(exiting, Default)),
+ GCBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace garbage collections", []),
+ check_box(GCBox, lists:member(garbage_collection, Default)),
{SpawnBox, SpwnAllRadio, SpwnFirstRadio} =
optionpage_top_right(Panel, RightSz, [{flag, ?wxBOTTOM},{border, 5}], "spawn"),
@@ -57,7 +65,7 @@ process_trace(Parent, Default) ->
{Radio, Opt} <- [{SpwnAllRadio, on_spawn}, {SpwnFirstRadio, on_first_spawn},
{LinkAllRadio, on_link}, {LinkFirstRadio, on_first_link}]],
- [wxSizer:add(LeftSz, CheckBox, []) || CheckBox <- [FuncBox,SendBox,RecBox,EventBox]],
+ [wxSizer:add(LeftSz, CheckBox, []) || CheckBox <- [FuncBox,ArityBox,SendBox,RecBox,EventBox,SchedBox,ExitBox,GCBox]],
wxSizer:add(LeftSz, 150, -1),
wxSizer:add(PanelSz, LeftSz, [{flag, ?wxEXPAND}, {proportion,1}]),
@@ -80,7 +88,9 @@ process_trace(Parent, Default) ->
case wxDialog:showModal(Dialog) of
?wxID_OK ->
All = [{SendBox, send}, {RecBox, 'receive'},
- {FuncBox, functions}, {EventBox, events},
+ {FuncBox, functions}, {ArityBox, arity},
+ {EventBox, events}, {SchedBox, running_procs},
+ {ExitBox, exiting}, {GCBox, garbage_collection},
{{SpawnBox, SpwnAllRadio}, on_spawn},
{{SpawnBox,SpwnFirstRadio}, on_first_spawn},
{{LinkBox, LinkAllRadio}, on_link},
@@ -98,12 +108,57 @@ process_trace(Parent, Default) ->
throw(cancel)
end.
+port_trace(Parent, Default) ->
+ Dialog = wxDialog:new(Parent, ?wxID_ANY, "Port Options",
+ [{style, ?wxDEFAULT_DIALOG_STYLE bor ?wxRESIZE_BORDER}]),
+ Panel = wxPanel:new(Dialog),
+ MainSz = wxBoxSizer:new(?wxVERTICAL),
+ OptsSz = wxStaticBoxSizer:new(?wxVERTICAL, Panel, [{label, "Tracing options"}]),
+
+ SendBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace send message", []),
+ check_box(SendBox, lists:member(send, Default)),
+ RecBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace receive message", []),
+ check_box(RecBox, lists:member('receive', Default)),
+ EventBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace port events", []),
+ check_box(EventBox, lists:member(events, Default)),
+ SchedBox = wxCheckBox:new(Panel, ?wxID_ANY, "Trace scheduling of ports", []),
+ check_box(SchedBox, lists:member(running_ports, Default)),
+
+ [wxSizer:add(OptsSz, CheckBox, []) || CheckBox <- [SendBox,RecBox,EventBox,SchedBox]],
+ wxSizer:add(OptsSz, 150, -1),
+
+ wxPanel:setSizer(Panel, OptsSz),
+ wxSizer:add(MainSz, Panel, [{flag, ?wxEXPAND}, {proportion,1}]),
+ Buttons = wxDialog:createButtonSizer(Dialog, ?wxOK bor ?wxCANCEL),
+ wxSizer:add(MainSz, Buttons, [{flag, ?wxEXPAND bor ?wxALL}, {border, 5}]),
+ wxWindow:setSizerAndFit(Dialog, MainSz),
+ wxSizer:setSizeHints(MainSz, Dialog),
+
+ case wxDialog:showModal(Dialog) of
+ ?wxID_OK ->
+ All = [{SendBox, send}, {RecBox, 'receive'},
+ {EventBox, events}, {SchedBox, running_ports}],
+ Opts = [Id || {Tick, Id} <- All, wxCheckBox:getValue(Tick)],
+ wxDialog:destroy(Dialog),
+ lists:reverse(Opts);
+ ?wxID_CANCEL ->
+ wxDialog:destroy(Dialog),
+ throw(cancel)
+ end.
+
trace_pattern(ParentPid, Parent, Node, MatchSpecs) ->
try
- Module = module_selector(Parent, Node),
- MFAs = function_selector(Parent, Node, Module),
- MatchSpec = select_matchspec(ParentPid, Parent, MatchSpecs),
- {Module, [#tpattern{m=M,fa={F,A},ms=MatchSpec} || {M,F,A} <- MFAs]}
+ {Module,MFAs,MatchSpec} =
+ case module_selector(Parent, Node) of
+ {'$trace_event',Event} ->
+ MS = select_matchspec(ParentPid, Parent, MatchSpecs, Event),
+ {'Events',[{'Events',Event}],MS};
+ Mod ->
+ MFAs0 = function_selector(Parent, Node, Mod),
+ MS = select_matchspec(ParentPid, Parent, MatchSpecs, funcs),
+ {Mod,MFAs0,MS}
+ end,
+ {Module, [#tpattern{m=M,fa=FA,ms=MatchSpec} || {M,FA} <- MFAs]}
catch cancel -> cancel
end.
@@ -112,7 +167,7 @@ select_nodes(Parent, Nodes) ->
check_selector(Parent, Choices).
module_selector(Parent, Node) ->
- Dialog = wxDialog:new(Parent, ?wxID_ANY, "Select Module",
+ Dialog = wxDialog:new(Parent, ?wxID_ANY, "Select Module or Event",
[{style, ?wxDEFAULT_DIALOG_STYLE bor ?wxRESIZE_BORDER},
{size, {400, 400}}]),
Panel = wxPanel:new(Dialog),
@@ -136,7 +191,9 @@ module_selector(Parent, Node) ->
wxWindow:setFocus(TxtCtrl),
%% init data
Modules = get_modules(Node),
- AllModules = [{atom_to_list(X), X} || X <- Modules],
+ Events = [{"Messages sent",{'$trace_event',send}},
+ {"Messages received",{'$trace_event','receive'}}],
+ AllModules = Events ++ [{atom_to_list(X), X} || X <- Modules],
filter_listbox_data("", AllModules, ListBox),
wxTextCtrl:connect(TxtCtrl, command_text_updated,
[{callback, fun(#wx{event=#wxCommand{cmdString=Input}}, _) ->
@@ -174,9 +231,9 @@ function_selector(Parent, Node, Module) ->
not(erl_internal:guard_bif(Name, Arity))]),
ParsedChoices = parse_function_names(Choices),
case check_selector(Parent, ParsedChoices) of
- [] -> [{Module, '_', '_'}];
+ [] -> [{Module, {'_', '_'}}];
FAs ->
- [{Module, F, A} || {F,A} <- FAs]
+ [{Module, {F, A}} || {F,A} <- FAs]
end.
check_selector(Parent, ParsedChoices) ->
@@ -268,7 +325,12 @@ get_checked(ListBox, Acc) ->
lists:reverse(Acc)
end.
-select_matchspec(Pid, Parent, MatchSpecs) ->
+select_matchspec(Pid, Parent, AllMatchSpecs, Key) ->
+ {MatchSpecs,RestMS} =
+ case lists:keytake(Key,1,AllMatchSpecs) of
+ {value,{Key,MSs0},Rest} -> {MSs0,Rest};
+ false -> {[],AllMatchSpecs}
+ end,
Dialog = wxDialog:new(Parent, ?wxID_ANY, "Trace Match Specifications",
[{style, ?wxDEFAULT_DIALOG_STYLE bor ?wxRESIZE_BORDER},
{size, {400, 400}}]),
@@ -313,8 +375,12 @@ select_matchspec(Pid, Parent, MatchSpecs) ->
filter_listbox_data("", Choices, ListBox),
Add = fun(_,_) ->
- case edit_ms(TextCtrl, new, Parent) of
- Ms = #match_spec{} -> add_and_select(-1, Ms, ListBox);
+ case edit_ms(TextCtrl, new, Dialog) of
+ Ms = #match_spec{} ->
+ add_and_select(-1, Ms, ListBox),
+ wxWindow:enable(OkButt),
+ wxWindow:enable(EditMsBtn),
+ wxWindow:enable(DelMsBtn);
Else -> Else
end
end,
@@ -323,8 +389,12 @@ select_matchspec(Pid, Parent, MatchSpecs) ->
case SelId >= 0 of
true ->
#match_spec{name=Name} = wxListBox:getClientData(ListBox,SelId),
- case edit_ms(TextCtrl, Name, Parent) of
- Ms = #match_spec{} -> add_and_select(SelId, Ms, ListBox);
+ case edit_ms(TextCtrl, Name, Dialog) of
+ Ms = #match_spec{} ->
+ add_and_select(SelId, Ms, ListBox),
+ wxWindow:enable(OkButt),
+ wxWindow:enable(EditMsBtn),
+ wxWindow:enable(DelMsBtn);
Else -> Else
end;
false ->
@@ -367,7 +437,7 @@ select_matchspec(Pid, Parent, MatchSpecs) ->
Count = wxListBox:getCount(ListBox),
MSs = [wxListBox:getClientData(ListBox, Id) ||
Id <- lists:seq(0, Count-1)],
- Pid ! {update_ms, MSs},
+ Pid ! {update_ms, [{Key,MSs}|RestMS]},
MS = lists:nth(SelId+1, MSs),
wxDialog:destroy(Dialog),
MS;
diff --git a/lib/observer/src/observer_tv_wx.erl b/lib/observer/src/observer_tv_wx.erl
index 1860f2f469..968a7620aa 100644
--- a/lib/observer/src/observer_tv_wx.erl
+++ b/lib/observer/src/observer_tv_wx.erl
@@ -37,7 +37,8 @@
-define(ID_UNREADABLE, 405).
-define(ID_SYSTEM_TABLES, 406).
-define(ID_TABLE_INFO, 407).
-
+-define(ID_SHOW_TABLE, 408).
+
-record(opt, {type=ets,
sys_hidden=true,
unread_hidden=true,
@@ -49,6 +50,7 @@
{
parent,
grid,
+ panel,
node=node(),
opt=#opt{},
selected,
@@ -86,12 +88,13 @@ init([Notebook, Parent]) ->
wxListItem:destroy(Li),
wxListCtrl:connect(Grid, command_list_item_activated),
+ wxListCtrl:connect(Grid, command_list_item_right_click),
wxListCtrl:connect(Grid, command_list_item_selected),
wxListCtrl:connect(Grid, command_list_col_click),
wxListCtrl:connect(Grid, size, [{skip, true}]),
wxWindow:setFocus(Grid),
- {Panel, #state{grid=Grid, parent=Parent, timer={false, 10}}}.
+ {Panel, #state{grid=Grid, parent=Parent, panel=Panel, timer={false, 10}}}.
handle_event(#wx{id=?ID_REFRESH},
State = #state{node=Node, grid=Grid, opt=Opt}) ->
@@ -121,6 +124,8 @@ handle_event(#wx{id=Id}, State = #state{node=Node, grid=Grid, opt=Opt0})
end,
case get_tables2(Node, Opt) of
Error = {error, _} ->
+ Id =:= ?ID_MNESIA andalso
+ wxMenuBar:check(observer_wx:get_menubar(), ?ID_ETS, true),
self() ! Error,
{noreply, State};
Tables ->
@@ -145,6 +150,16 @@ handle_event(#wx{event=#wxList{type=command_list_item_activated,
end,
{noreply, State};
+handle_event(#wx{event=#wxList{type=command_list_item_right_click}},
+ State=#state{panel=Panel}) ->
+
+ Menu = wxMenu:new(),
+ wxMenu:append(Menu, ?ID_TABLE_INFO, "Table info"),
+ wxMenu:append(Menu, ?ID_SHOW_TABLE, "Show Table Content"),
+ wxWindow:popupMenu(Panel, Menu),
+ wxMenu:destroy(Menu),
+ {noreply, State};
+
handle_event(#wx{event=#wxList{type=command_list_item_selected, itemIndex=Index}},
State) ->
{noreply, State#state{selected=Index}};
@@ -160,6 +175,22 @@ handle_event(#wx{id=?ID_TABLE_INFO},
{noreply, State}
end;
+handle_event(#wx{id=?ID_SHOW_TABLE},
+ State=#state{grid=Grid, node=Node, opt=#opt{type=Type}, tabs=Tabs, selected=Sel}) ->
+ case Sel of
+ undefined ->
+ {noreply, State};
+ R when is_integer(R) ->
+ Table = lists:nth(Sel+1, Tabs),
+ case Table#tab.protection of
+ private ->
+ self() ! {error, "Table has 'private' protection and can not be read"};
+ _ ->
+ observer_tv_table:start_link(Grid, [{node,Node}, {type,Type}, {table,Table}])
+ end,
+ {noreply, State}
+ end;
+
handle_event(#wx{id=?ID_REFRESH_INTERVAL},
State = #state{grid=Grid, timer=Timer0}) ->
Timer = observer_lib:interval_dialog(Grid, Timer0, 10, 5*60),
@@ -188,22 +219,32 @@ handle_info(refresh_interval, State = #state{node=Node, grid=Grid, opt=Opt,
{noreply, State#state{tabs=Tabs}}
end;
-handle_info({active, Node}, State = #state{parent=Parent, grid=Grid, opt=Opt,
+handle_info({active, Node}, State = #state{parent=Parent, grid=Grid, opt=Opt0,
timer=Timer0}) ->
- Tables = get_tables(Node, Opt),
+ {Tables, Opt} = case Opt0#opt.type =:= mnesia andalso get_tables2(Node, Opt0) of
+ Ts when is_list(Ts) ->
+ {Ts, Opt0};
+ _ -> % false or error getting mnesia tables
+ Opt1 = Opt0#opt{type=ets},
+ {get_tables(Node, Opt1), Opt1}
+ end,
Tabs = update_grid(Grid, Opt, Tables),
wxWindow:setFocus(Grid),
create_menus(Parent, Opt),
Timer = observer_lib:start_timer(Timer0),
- {noreply, State#state{node=Node, tabs=Tabs, timer=Timer}};
+ {noreply, State#state{node=Node, tabs=Tabs, timer=Timer, opt=Opt}};
handle_info(not_active, State = #state{timer = Timer0}) ->
Timer = observer_lib:stop_timer(Timer0),
{noreply, State#state{timer=Timer}};
-handle_info({error, Error}, State) ->
+handle_info({error, Error}, #state{opt=Opt}=State) ->
handle_error(Error),
- {noreply, State};
+ case Opt#opt.type of
+ mnesia -> wxMenuBar:check(observer_wx:get_menubar(), ?ID_ETS, true);
+ _ -> ok
+ end,
+ {noreply, State#state{opt=Opt#opt{type=ets}}};
handle_info(_Event, State) ->
{noreply, State}.
@@ -315,6 +356,7 @@ display_table_info(Parent0, Node, Source, Table) ->
{_, Sizer, _} = observer_lib:display_info(Frame, [IdInfo,Settings,Memory]),
wxSizer:setSizeHints(Sizer, Frame),
+ wxWindow:setMinSize(Frame, {300, -1}),
wxFrame:center(Frame),
wxFrame:show(Frame).
diff --git a/lib/observer/src/observer_wx.erl b/lib/observer/src/observer_wx.erl
index eba603eab5..5732c12006 100644
--- a/lib/observer/src/observer_wx.erl
+++ b/lib/observer/src/observer_wx.erl
@@ -21,8 +21,8 @@
-behaviour(wx_object).
-export([start/0, stop/0]).
--export([create_menus/2, get_attrib/1, get_tracer/0, set_status/1,
- create_txt_dialog/4, try_rpc/4, return_to_localnode/2]).
+-export([create_menus/2, get_attrib/1, get_tracer/0, get_active_node/0, get_menubar/0,
+ set_status/1, create_txt_dialog/4, try_rpc/4, return_to_localnode/2]).
-export([init/1, handle_event/2, handle_cast/2, terminate/2, code_change/3,
handle_call/3, handle_info/2, check_page_title/1]).
@@ -55,6 +55,7 @@
notebook,
main_panel,
pro_panel,
+ port_panel,
tv_panel,
sys_panel,
trace_panel,
@@ -65,7 +66,8 @@
node,
nodes,
prev_node="",
- log = false
+ log = false,
+ reply_to=false
}).
start() ->
@@ -89,6 +91,12 @@ set_status(What) ->
get_tracer() ->
wx_object:call(observer, get_tracer).
+get_active_node() ->
+ wx_object:call(observer, get_active_node).
+
+get_menubar() ->
+ wx_object:call(observer, get_menubar).
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
init(_Args) ->
@@ -164,6 +172,10 @@ setup(#state{frame = Frame} = State) ->
ProPanel = observer_pro_wx:start_link(Notebook, self()),
wxNotebook:addPage(Notebook, ProPanel, "Processes", []),
+ %% Port Panel
+ PortPanel = observer_port_wx:start_link(Notebook, self()),
+ wxNotebook:addPage(Notebook, PortPanel, "Ports", []),
+
%% Table Viewer Panel
TVPanel = observer_tv_wx:start_link(Notebook, self()),
wxNotebook:addPage(Notebook, TVPanel, "Table Viewer", []),
@@ -187,6 +199,7 @@ setup(#state{frame = Frame} = State) ->
status_bar = StatusBar,
sys_panel = SysPanel,
pro_panel = ProPanel,
+ port_panel = PortPanel,
tv_panel = TVPanel,
trace_panel = TracePanel,
app_panel = AppPanel,
@@ -229,14 +242,13 @@ handle_event(#wx{id = ?ID_CDV, event = #wxCommand{type = command_menu_selected}}
spawn(crashdump_viewer, start, []),
{noreply, State};
-handle_event(#wx{event = #wxClose{}}, #state{log=LogOn} = State) ->
- LogOn andalso rpc:block_call(State#state.node, rb, stop, []),
- {stop, normal, State};
+handle_event(#wx{event = #wxClose{}}, State) ->
+ stop_servers(State),
+ {noreply, State};
-handle_event(#wx{id = ?wxID_EXIT, event = #wxCommand{type = command_menu_selected}},
- #state{log=LogOn} = State) ->
- LogOn andalso rpc:block_call(State#state.node, rb, stop, []),
- {stop, normal, State};
+handle_event(#wx{id = ?wxID_EXIT, event = #wxCommand{type = command_menu_selected}}, State) ->
+ stop_servers(State),
+ {noreply, State};
handle_event(#wx{id = ?wxID_HELP, event = #wxCommand{type = command_menu_selected}}, State) ->
External = "http://www.erlang.org/doc/apps/observer/index.html",
@@ -379,9 +391,15 @@ handle_call({get_attrib, Attrib}, _From, State) ->
handle_call(get_tracer, _From, State=#state{trace_panel=TraceP}) ->
{reply, TraceP, State};
-handle_call(stop, _, State = #state{frame = Frame}) ->
- wxFrame:destroy(Frame),
- {stop, normal, ok, State};
+handle_call(get_active_node, _From, State=#state{node=Node}) ->
+ {reply, Node, State};
+
+handle_call(get_menubar, _From, State=#state{menubar=MenuBar}) ->
+ {reply, MenuBar, State};
+
+handle_call(stop, From, State) ->
+ stop_servers(State),
+ {noreply, State#state{reply_to=From}};
handle_call(log_status, _From, State) ->
{reply, State#state.log, State};
@@ -406,16 +424,21 @@ handle_info({nodedown, Node},
create_txt_dialog(Frame, Msg, "Node down", ?wxICON_EXCLAMATION),
{noreply, State3};
-handle_info({open_link, Pid0}, State = #state{pro_panel=ProcViewer, frame=Frame}) ->
- Pid = case Pid0 of
- [_|_] -> try list_to_pid(Pid0) catch _:_ -> Pid0 end;
- _ -> Pid0
+handle_info({open_link, Id0}, State = #state{pro_panel=ProcViewer,
+ port_panel=PortViewer,
+ frame=Frame}) ->
+ Id = case Id0 of
+ [_|_] -> try list_to_pid(Id0) catch _:_ -> Id0 end;
+ _ -> Id0
end,
%% Forward to process tab
- case is_pid(Pid) of
- true -> wx_object:get_pid(ProcViewer) ! {procinfo_open, Pid};
- false ->
- Msg = io_lib:format("Information about ~p is not available or implemented",[Pid]),
+ case Id of
+ Pid when is_pid(Pid) ->
+ wx_object:get_pid(ProcViewer) ! {procinfo_open, Pid};
+ "#Port" ++ _ = Port ->
+ wx_object:get_pid(PortViewer) ! {portinfo_open, Port};
+ _ ->
+ Msg = io_lib:format("Information about ~p is not available or implemented",[Id]),
Info = wxMessageDialog:new(Frame, Msg),
wxMessageDialog:showModal(Info),
wxMessageDialog:destroy(Info)
@@ -426,17 +449,45 @@ handle_info({get_debug_info, From}, State = #state{notebook=Notebook, active_tab
From ! {observer_debug, wx:get_env(), Notebook, Pid},
{noreply, State};
-handle_info({'EXIT', Pid, _Reason}, State) ->
- io:format("Child (~s) crashed exiting: ~p ~p~n",
- [pid2panel(Pid, State), Pid,_Reason]),
+handle_info({'EXIT', Pid, Reason}, State) ->
+ case Reason of
+ normal ->
+ {noreply, State};
+ _ ->
+ io:format("Observer: Child (~s) crashed exiting: ~p ~p~n",
+ [pid2panel(Pid, State), Pid, Reason]),
+ {stop, normal, State}
+ end;
+
+handle_info({stop, Me}, State) when Me =:= self() ->
{stop, normal, State};
handle_info(_Info, State) ->
{noreply, State}.
-terminate(_Reason, #state{frame = Frame}) ->
+stop_servers(#state{node=Node, log=LogOn, sys_panel=Sys, pro_panel=Procs, tv_panel=TVs,
+ trace_panel=Trace, app_panel=Apps, perf_panel=Perfs,
+ allc_panel=Alloc} = _State) ->
+ LogOn andalso rpc:block_call(Node, rb, stop, []),
+ Me = self(),
+ Tabs = [Sys, Procs, TVs, Trace, Apps, Perfs, Alloc],
+ Stop = fun() ->
+ try
+ _ = [wx_object:stop(Panel) || Panel <- Tabs],
+ ok
+ catch _:_ -> ok
+ end,
+ Me ! {stop, Me}
+ end,
+ spawn(Stop).
+
+terminate(_Reason, #state{frame = Frame, reply_to=From}) ->
wxFrame:destroy(Frame),
wx:destroy(),
+ case From of
+ false -> ignore;
+ _ -> gen_server:reply(From, ok)
+ end,
ok.
code_change(_, _, State) ->
@@ -513,10 +564,11 @@ check_page_title(Notebook) ->
get_active_pid(#state{notebook=Notebook, pro_panel=Pro, sys_panel=Sys,
tv_panel=Tv, trace_panel=Trace, app_panel=App,
- perf_panel=Perf, allc_panel=Alloc
+ perf_panel=Perf, allc_panel=Alloc, port_panel=Port
}) ->
Panel = case check_page_title(Notebook) of
"Processes" -> Pro;
+ "Ports" -> Port;
"System" -> Sys;
"Table Viewer" -> Tv;
?TRACE_STR -> Trace;
diff --git a/lib/observer/src/ttb.erl b/lib/observer/src/ttb.erl
index 4d6eb3ba8d..ac6c4572eb 100644
--- a/lib/observer/src/ttb.erl
+++ b/lib/observer/src/ttb.erl
@@ -25,7 +25,8 @@
-export([tracer/0,tracer/1,tracer/2,p/2,stop/0,stop/1,start_trace/4]).
-export([get_et_handler/0]).
-export([tp/2, tp/3, tp/4, ctp/0, ctp/1, ctp/2, ctp/3, tpl/2, tpl/3, tpl/4,
- ctpl/0, ctpl/1, ctpl/2, ctpl/3, ctpg/0, ctpg/1, ctpg/2, ctpg/3]).
+ ctpl/0, ctpl/1, ctpl/2, ctpl/3, ctpg/0, ctpg/1, ctpg/2, ctpg/3,
+ tpe/2, ctpe/1]).
-export([seq_trigger_ms/0,seq_trigger_ms/1]).
-export([write_trace_info/2]).
-export([write_config/2,write_config/3,run_config/1,run_config/2,list_config/1]).
@@ -397,16 +398,16 @@ arg_list([A1|A],Acc) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Set trace flags on processes
-p(Procs0,Flags0) ->
+p(ProcsPorts0,Flags0) ->
ensure_no_overloaded_nodes(),
- store(p,[Procs0,Flags0]),
- no_store_p(Procs0,Flags0).
-no_store_p(Procs0,Flags0) ->
+ store(p,[ProcsPorts0,Flags0]),
+ no_store_p(ProcsPorts0,Flags0).
+no_store_p(ProcsPorts0,Flags0) ->
case transform_flags(to_list(Flags0)) of
{error,Reason} ->
{error,Reason};
Flags ->
- Procs = procs(Procs0),
+ ProcsPorts = procs_ports(ProcsPorts0),
case lists:foldl(fun(P,{PMatched,Ps}) -> case dbg:p(P,Flags) of
{ok,Matched} ->
{[{P,Matched}|PMatched],[P|Ps]};
@@ -414,7 +415,7 @@ no_store_p(Procs0,Flags0) ->
display_warning(P,Reason),
{PMatched,Ps}
end
- end,{[],[]},Procs) of
+ end,{[],[]},ProcsPorts) of
{[],[]} -> {error, no_match};
{SuccMatched,Succ} ->
no_store_write_trace_info(flags,{Succ,Flags}),
@@ -429,20 +430,22 @@ transform_flags(Flags) ->
dbg:transform_flags([timestamp | Flags]).
-procs(Procs) when is_list(Procs) ->
- lists:foldl(fun(P,Acc) -> proc(P)++Acc end,[],Procs);
-procs(Proc) ->
- proc(Proc).
+procs_ports(Procs) when is_list(Procs) ->
+ lists:foldl(fun(P,Acc) -> proc_port(P)++Acc end,[],Procs);
+procs_ports(Proc) ->
+ proc_port(Proc).
-proc(Procs) when Procs=:=all; Procs=:=ports; Procs=:=processes;
- Procs=:=existing; Procs=:=existing_ports; Procs=:=existing_processes;
- Procs=:=new; Procs=:=new_ports; Procs=:=new_processes ->
- [Procs];
-proc(Name) when is_atom(Name) ->
+proc_port(P) when P=:=all; P=:=ports; P=:=processes;
+ P=:=existing; P=:=existing_ports; P=:=existing_processes;
+ P=:=new; P=:=new_ports; P=:=new_processes ->
+ [P];
+proc_port(Name) when is_atom(Name) ->
[Name]; % can be registered on this node or other node
-proc(Pid) when is_pid(Pid) ->
+proc_port(Pid) when is_pid(Pid) ->
[Pid];
-proc({global,Name}) ->
+proc_port(Port) when is_port(Port) ->
+ [Port];
+proc_port({global,Name}) ->
case global:whereis_name(Name) of
Pid when is_pid(Pid) ->
[Pid];
@@ -479,6 +482,11 @@ tpl(A,B,C,D) ->
store(tpl,[A,B,C,ms(D)]),
dbg:tpl(A,B,C,ms(D)).
+tpe(A,B) ->
+ ensure_no_overloaded_nodes(),
+ store(tpe,[A,ms(B)]),
+ dbg:tpe(A,ms(B)).
+
ctp() ->
store(ctp,[]),
dbg:ctp().
@@ -518,6 +526,10 @@ ctpg(A,B,C) ->
store(ctpg,[A,B,C]),
dbg:ctpg(A,B,C).
+ctpe(A) ->
+ store(ctpe,[A]),
+ dbg:ctpe(A).
+
ms(return) ->
[{'_',[],[{return_trace}]}];
ms(caller) ->
@@ -1298,6 +1310,9 @@ ip_to_file(Trace, {shell_only, Fun} = State) ->
ip_to_file(Trace,{{file,File}, ShellOutput}) ->
Fun = dbg:trace_port(file,File), %File can be a filename or a wrap spec
Port = Fun(),
+ %% Just in case this is on the traced node,
+ %% make sure the port is not traced.
+ p(Port,clear),
%% Store the port so it can be properly closed
?MODULE ! {ip_to_file_trace_port, Port, self()},
receive {?MODULE,ok} -> ok end,
diff --git a/lib/observer/test/observer_SUITE.erl b/lib/observer/test/observer_SUITE.erl
index 3dc3e4772b..4c882ad951 100644
--- a/lib/observer/test/observer_SUITE.erl
+++ b/lib/observer/test/observer_SUITE.erl
@@ -38,7 +38,7 @@
]).
%% Default timetrap timeout (set in init_per_testcase)
--define(default_timeout, ?t:minutes(1)).
+-define(default_timeout, ?t:minutes(2)).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -171,6 +171,7 @@ test_page("Applications" ++ _, _Window) ->
test_page("Processes" ++ _, _Window) ->
timer:sleep(500), %% Give it time to refresh
Active = get_active(),
+ Active ! refresh_interval,
ChangeSort = fun(N) ->
FakeEv = #wx{event=#wxList{type=command_list_col_click, col=N}},
Active ! FakeEv,
@@ -184,7 +185,23 @@ test_page("Processes" ++ _, _Window) ->
timer:sleep(1000), %% Give it time to refresh
ok;
-test_page(_Title = "Table" ++ _, _Window) ->
+test_page("Ports" ++ _, _Window) ->
+ timer:sleep(500), %% Give it time to refresh
+ Active = get_active(),
+ Active ! refresh_interval,
+ ChangeSort = fun(N) ->
+ FakeEv = #wx{event=#wxList{type=command_list_col_click, col=N}},
+ Active ! FakeEv,
+ timer:sleep(200)
+ end,
+ [ChangeSort(N) || N <- lists:seq(1,4) ++ [0]],
+ Activate = #wx{event=#wxList{type=command_list_item_activated,
+ itemIndex=2}},
+ Active ! Activate,
+ timer:sleep(1000), %% Give it time to refresh
+ ok;
+
+test_page("Table" ++ _, _Window) ->
Tables = [ets:new(list_to_atom("Test-" ++ [C]), [public]) || C <- lists:seq($A, $Z)],
Table = lists:nth(3, Tables),
ets:insert(Table, [{N,100-N} || N <- lists:seq(1,100)]),
@@ -208,6 +225,13 @@ test_page(_Title = "Table" ++ _, _Window) ->
timer:sleep(1000),
ok;
+test_page("Trace Overview" ++ _, _Window) ->
+ timer:sleep(500), %% Give it time to refresh
+ Active = get_active(),
+ Active ! refresh_interval,
+ timer:sleep(1000), %% Give it time to refresh
+ ok;
+
test_page(Title, Window) ->
io:format("Page ~p: ~p~n", [Title, Window]),
%% Just let it display some info and hopefully it doesn't crash
diff --git a/lib/observer/vsn.mk b/lib/observer/vsn.mk
index f214810199..9a7c6a546f 100644
--- a/lib/observer/vsn.mk
+++ b/lib/observer/vsn.mk
@@ -1 +1 @@
-OBSERVER_VSN = 2.2
+OBSERVER_VSN = 2.2.1
diff --git a/lib/odbc/configure.in b/lib/odbc/configure.in
index cb2b23d534..d26daa5eda 100644
--- a/lib/odbc/configure.in
+++ b/lib/odbc/configure.in
@@ -147,7 +147,7 @@ AC_SUBST(THR_LIBS)
odbc_lib_link_success=no
AC_SUBST(TARGET_FLAGS)
case $host_os in
- darwin1[[0-4]].*|darwin[[0-9]].*)
+ darwin1[[0-5]].*|darwin[[0-9]].*)
TARGET_FLAGS="-DUNIX"
if test ! -d "$with_odbc" || test "$with_odbc" = "yes"; then
ODBC_LIB= -L"/usr/lib"
diff --git a/lib/odbc/doc/src/notes.xml b/lib/odbc/doc/src/notes.xml
index 55eb8e7ac0..40f9339028 100644
--- a/lib/odbc/doc/src/notes.xml
+++ b/lib/odbc/doc/src/notes.xml
@@ -38,7 +38,7 @@
<list>
<item>
<p>
- Configure enhancment for better handling program paths
+ Configure enhancement for better handling program paths
used in the build process</p>
<p>
Own Id: OTP-13559</p>
@@ -585,7 +585,7 @@
also been extended. </item><item> The <c>configure</c>
scripts of <c>erl_interface</c> and <c>odbc</c> now
search for thread libraries and thread library quirks the
- same way as <c>erts</c> do. </item><item> The
+ same way as ERTS do. </item><item> The
<c>configure</c> script of the <c>odbc</c> application
now also looks for odbc libraries in <c>lib64</c> and
<c>lib/64</c> directories when building on a 64-bit
diff --git a/lib/odbc/src/odbc.erl b/lib/odbc/src/odbc.erl
index 6b0ff27907..8871acd3f4 100644
--- a/lib/odbc/src/odbc.erl
+++ b/lib/odbc/src/odbc.erl
@@ -833,7 +833,7 @@ connect(ConnectionReferense, ConnectionStr, Options) ->
odbc_send(Socket, Msg) -> %% Note currently all allowed messages are lists
NewMsg = Msg ++ [?STR_TERMINATOR],
ok = gen_tcp:send(Socket, NewMsg),
- inet:setopts(Socket, [{active, once}]).
+ ok = inet:setopts(Socket, [{active, once}]).
%%--------------------------------------------------------------------------
connection_config(Key, Options) ->
diff --git a/lib/odbc/test/odbc_connect_SUITE.erl b/lib/odbc/test/odbc_connect_SUITE.erl
index 5727c1ca50..261dfc6f20 100644
--- a/lib/odbc/test/odbc_connect_SUITE.erl
+++ b/lib/odbc/test/odbc_connect_SUITE.erl
@@ -89,6 +89,7 @@ init_per_suite(Config) when is_list(Config) ->
[{auto_commit, off}] ++ odbc_test_lib:platform_options()) of
{ok, Ref} ->
odbc:disconnect(Ref),
+ ct:timetrap(?default_timeout),
[{tableName, odbc_test_lib:unique_table_name()} | Config];
_ ->
{skip, "ODBC is not properly setup"}
@@ -129,11 +130,8 @@ init_per_testcase(_TestCase, Config) ->
init_per_testcase_common(Config).
init_per_testcase_common(Config) ->
- test_server:format("ODBCINI = ~p~n", [os:getenv("ODBCINI")]),
- Dog = test_server:timetrap(?default_timeout),
- Temp = lists:keydelete(connection_ref, 1, Config),
- NewConfig = lists:keydelete(watchdog, 1, Temp),
- [{watchdog, Dog} | NewConfig].
+ ct:pal("ODBCINI = ~p~n", [os:getenv("ODBCINI")]),
+ lists:keydelete(connection_ref, 1, Config).
%%--------------------------------------------------------------------
%% Function: end_per_testcase(Case, Config) -> _
@@ -153,25 +151,22 @@ end_per_testcase(_TestCase, Config) ->
end_per_testcase_common(Config).
end_per_testcase_common(Config) ->
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
{ok, Ref} = odbc:connect(?RDBMS:connection_string(), odbc_test_lib:platform_options()),
Result = odbc:sql_query(Ref, "DROP TABLE " ++ Table),
io:format("Drop table: ~p ~p~n", [Table, Result]),
- odbc:disconnect(Ref),
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog).
+ odbc:disconnect(Ref).
%%-------------------------------------------------------------------------
%% Test cases starts here.
%%-------------------------------------------------------------------------
-commit(doc)->
- ["Test the use of explicit commit"];
-commit(suite) -> [];
+commit()->
+ [{doc,"Test the use of explicit commit"}].
commit(Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(),
[{auto_commit, off}] ++ odbc_test_lib:platform_options()),
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
TransStr = transaction_support_str(?RDBMS),
{updated, _} =
@@ -205,14 +200,13 @@ commit(Config) ->
ok = odbc:disconnect(Ref).
%%-------------------------------------------------------------------------
-rollback(doc)->
- ["Test the use of explicit rollback"];
-rollback(suite) -> [];
+rollback()->
+ [{doc,"Test the use of explicit rollback"}].
rollback(Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(),
[{auto_commit, off}] ++ odbc_test_lib:platform_options()),
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
TransStr = transaction_support_str(?RDBMS),
@@ -245,9 +239,8 @@ rollback(Config) ->
ok = odbc:disconnect(Ref).
%%-------------------------------------------------------------------------
-not_explicit_commit(doc) ->
- ["Test what happens if you try using commit on a auto_commit connection."];
-not_explicit_commit(suite) -> [];
+not_explicit_commit() ->
+ [{doc,"Test what happens if you try using commit on a auto_commit connection."}].
not_explicit_commit(_Config) ->
{ok, Ref} =
odbc:connect(?RDBMS:connection_string(), [{auto_commit, on}] ++
@@ -256,19 +249,17 @@ not_explicit_commit(_Config) ->
ok = odbc:disconnect(Ref).
%%-------------------------------------------------------------------------
-not_exist_db(doc) ->
- ["Tests valid data format but invalid data in the connection parameters."];
-not_exist_db(suite) -> [];
+not_exist_db() ->
+ [{doc,"Tests valid data format but invalid data in the connection parameters."}].
not_exist_db(_Config) ->
{error, _} = odbc:connect("DSN=foo;UID=bar;PWD=foobar",
odbc_test_lib:platform_options()),
%% So that the odbc control server can be stoped "in the correct way"
- test_server:sleep(100).
+ ct:sleep(100).
%%-------------------------------------------------------------------------
-no_c_executable(doc) ->
- "Test what happens if the port-program can not be found";
-no_c_executable(suite) -> [];
+no_c_executable() ->
+ [{doc,"Test what happens if the port-program can not be found"}].
no_c_executable(_Config) ->
process_flag(trap_exit, true),
Dir = filename:nativename(filename:join(code:priv_dir(odbc),
@@ -293,9 +284,8 @@ no_c_executable(_Config) ->
end.
%%------------------------------------------------------------------------
-port_dies(doc) ->
- "Tests what happens if the port program dies";
-port_dies(suite) -> [];
+port_dies() ->
+ [{doc,"Tests what happens if the port program dies"}].
port_dies(_Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(), odbc_test_lib:platform_options()),
{status, _} = process_info(Ref, status),
@@ -307,7 +297,7 @@ port_dies(_Config) ->
%% Wait for exit_status from port 5000 ms (will not get a exit
%% status in this case), then wait a little longer to make sure
%% the port and the controlprocess has had time to terminate.
- test_server:sleep(10000),
+ ct:sleep(10000),
undefined = process_info(Ref, status);
[] ->
ct:fail([erlang:port_info(P, name) || P <- erlang:ports()])
@@ -315,9 +305,8 @@ port_dies(_Config) ->
%%-------------------------------------------------------------------------
-control_process_dies(doc) ->
- "Tests what happens if the Erlang control process dies";
-control_process_dies(suite) -> [];
+control_process_dies() ->
+ [{doc,"Tests what happens if the Erlang control process dies"}].
control_process_dies(_Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(), odbc_test_lib:platform_options()),
process_flag(trap_exit, true),
@@ -326,7 +315,7 @@ control_process_dies(_Config) ->
[Port] ->
{connected, Ref} = erlang:port_info(Port, connected),
exit(Ref, kill),
- test_server:sleep(500),
+ ct:sleep(500),
undefined = erlang:port_info(Port, connected);
%% Check for c-program still running, how?
[] ->
@@ -334,9 +323,8 @@ control_process_dies(_Config) ->
end.
%%-------------------------------------------------------------------------
-client_dies_normal(doc) ->
- ["Client dies with reason normal."];
-client_dies_normal(suite) -> [];
+client_dies_normal() ->
+ [{doc,"Client dies with reason normal."}].
client_dies_normal(Config) when is_list(Config) ->
Pid = spawn(?MODULE, client_normal, [self()]),
@@ -352,7 +340,7 @@ client_dies_normal(Config) when is_list(Config) ->
{'DOWN', MonitorReference, _Type, _Object, _Info} ->
ok
after 5000 ->
- test_server:fail(control_process_not_stopped)
+ ct:fail(control_process_not_stopped)
end.
client_normal(Pid) ->
@@ -366,9 +354,8 @@ client_normal(Pid) ->
%%-------------------------------------------------------------------------
-client_dies_timeout(doc) ->
- ["Client dies with reason timeout."];
-client_dies_timeout(suite) -> [];
+client_dies_timeout() ->
+ [{doc,"Client dies with reason timeout."}].
client_dies_timeout(Config) when is_list(Config) ->
Pid = spawn(?MODULE, client_timeout, [self()]),
@@ -384,7 +371,7 @@ client_dies_timeout(Config) when is_list(Config) ->
{'DOWN', MonitorReference, _Type, _Object, _Info} ->
ok
after 5000 ->
- test_server:fail(control_process_not_stopped)
+ ct:fail(control_process_not_stopped)
end.
client_timeout(Pid) ->
@@ -398,9 +385,8 @@ client_timeout(Pid) ->
%%-------------------------------------------------------------------------
-client_dies_error(doc) ->
- ["Client dies with reason error."];
-client_dies_error(suite) -> [];
+client_dies_error() ->
+ [{doc,"Client dies with reason error."}].
client_dies_error(Config) when is_list(Config) ->
Pid = spawn(?MODULE, client_error, [self()]),
@@ -416,7 +402,7 @@ client_dies_error(Config) when is_list(Config) ->
{'DOWN', MonitorReference, _Type, _Object, _Info} ->
ok
after 5000 ->
- test_server:fail(control_process_not_stopped)
+ ct:fail(control_process_not_stopped)
end.
client_error(Pid) ->
@@ -430,9 +416,8 @@ client_error(Pid) ->
%%-------------------------------------------------------------------------
-connect_timeout(doc) ->
- ["Test the timeout for the connect function."];
-connect_timeout(suite) -> [];
+connect_timeout() ->
+ [{doc,"Test the timeout for the connect function."}].
connect_timeout(Config) when is_list(Config) ->
{'EXIT',timeout} = (catch odbc:connect(?RDBMS:connection_string(),
[{timeout, 0}] ++
@@ -442,10 +427,9 @@ connect_timeout(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-connect_port_timeout(doc) ->
- ["Test the timeout for the port program to connect back to the odbc "
- "application within the connect function."];
-connect_port_timeout(suite) -> [];
+connect_port_timeout() ->
+ [{"Test the timeout for the port program to connect back to the odbc "
+ "application within the connect function."}].
connect_port_timeout(Config) when is_list(Config) ->
%% Application environment var 'port_timeout' has been set to 0 by
%% init_per_testcase/2.
@@ -453,15 +437,14 @@ connect_port_timeout(Config) when is_list(Config) ->
odbc_test_lib:platform_options()).
%%-------------------------------------------------------------------------
-timeout(doc) ->
- ["Test that timeouts don't cause unwanted behavior sush as receiving"
- " an anwser to a previously tiemed out query."];
-timeout(suite) -> [];
+timeout() ->
+ [{"Test that timeouts don't cause unwanted behavior sush as receiving"
+ " an anwser to a previously tiemed out query."}].
timeout(Config) when is_list(Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(),
[{auto_commit, off}]),
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
TransStr = transaction_support_str(?RDBMS),
@@ -512,7 +495,7 @@ update_table_timeout(Table, TimeOut, Pid) ->
{'EXIT', timeout} ->
Pid ! timout_occurred;
{updated, 1} ->
- test_server:fail(database_locker_failed)
+ ct:fail(database_locker_failed)
end,
receive
@@ -537,15 +520,14 @@ update_table_timeout(Table, TimeOut, Pid) ->
ok = odbc:disconnect(Ref).
%%-------------------------------------------------------------------------
-many_timeouts(doc) ->
- ["Tests that many consecutive timeouts lead to that the connection "
- "is shutdown."];
-many_timeouts(suite) -> [];
+many_timeouts() ->
+ [{doc, "Tests that many consecutive timeouts lead to that the connection "
+ "is shutdown."}].
many_timeouts(Config) when is_list(Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(),
[{auto_commit, off}] ++ odbc_test_lib:platform_options()),
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
TransStr = transaction_support_str(?RDBMS),
{updated, _} =
@@ -592,19 +574,18 @@ loop_many_timouts(Ref, UpdateQuery, TimeOut) ->
{'EXIT',timeout} ->
loop_many_timouts(Ref, UpdateQuery, TimeOut);
{updated, 1} ->
- test_server:fail(database_locker_failed);
+ ct:fail(database_locker_failed);
{error, connection_closed} ->
ok
end.
%%-------------------------------------------------------------------------
-timeout_reset(doc) ->
- ["Check that the number of consecutive timouts is reset to 0 when "
- "a successful call to the database is made."];
-timeout_reset(suite) -> [];
+timeout_reset() ->
+ [{doc, "Check that the number of consecutive timouts is reset to 0 when "
+ "a successful call to the database is made."}].
timeout_reset(Config) when is_list(Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(),
[{auto_commit, off}] ++ odbc_test_lib:platform_options()),
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
TransStr = transaction_support_str(?RDBMS),
{updated, _} =
@@ -688,21 +669,20 @@ loop_timout_reset(Ref, UpdateQuery, TimeOut, NumTimeouts) ->
loop_timout_reset(Ref, UpdateQuery,
TimeOut, NumTimeouts - 1);
{updated, 1} ->
- test_server:fail(database_locker_failed);
+ ct:fail(database_locker_failed);
{error, connection_closed} ->
- test_server:fail(connection_closed_premature)
+ ct:fail(connection_closed_premature)
end.
%%-------------------------------------------------------------------------
-disconnect_on_timeout(doc) ->
- ["Check that disconnect after a time out works properly"];
-disconnect_on_timeout(suite) -> [];
+disconnect_on_timeout() ->
+ [{doc,"Check that disconnect after a time out works properly"}].
disconnect_on_timeout(Config) when is_list(Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(),
[{auto_commit, off}] ++ odbc_test_lib:platform_options()),
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
TransStr = transaction_support_str(?RDBMS),
{updated, _} =
@@ -726,7 +706,7 @@ disconnect_on_timeout(Config) when is_list(Config) ->
ok ->
ok = odbc:commit(Ref, commit);
nok ->
- test_server:fail(database_locker_failed)
+ ct:fail(database_locker_failed)
end.
update_table_disconnect_on_timeout(Table, TimeOut, Pid) ->
@@ -744,14 +724,13 @@ update_table_disconnect_on_timeout(Table, TimeOut, Pid) ->
end.
%%-------------------------------------------------------------------------
-connection_closed(doc) ->
- ["Checks that you get an appropriate error message if you try to"
- " use a connection that has been closed"];
-connection_closed(suite) -> [];
+connection_closed() ->
+ [{doc, "Checks that you get an appropriate error message if you try to"
+ " use a connection that has been closed"}].
connection_closed(Config) when is_list(Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(), odbc_test_lib:platform_options()),
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
"CREATE TABLE " ++ Table ++
@@ -771,14 +750,13 @@ connection_closed(Config) when is_list(Config) ->
{error, connection_closed} = odbc:commit(Ref, commit).
%%-------------------------------------------------------------------------
-disable_scrollable_cursors(doc) ->
- ["Test disabling of scrollable cursors."];
-disable_scrollable_cursors(suite) -> [];
+disable_scrollable_cursors() ->
+ [{doc,"Test disabling of scrollable cursors."}].
disable_scrollable_cursors(Config) when is_list(Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(),
[{scrollable_cursors, off}]),
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -792,10 +770,10 @@ disable_scrollable_cursors(Config) when is_list(Config) ->
NextResult = ?RDBMS:selected_ID(1, next),
- test_server:format("Expected: ~p~n", [NextResult]),
+ ct:pal("Expected: ~p~n", [NextResult]),
Result = odbc:next(Ref),
- test_server:format("Got: ~p~n", [Result]),
+ ct:pal("Got: ~p~n", [Result]),
NextResult = Result,
{error, scrollable_cursors_disabled} = odbc:first(Ref),
@@ -809,15 +787,14 @@ disable_scrollable_cursors(Config) when is_list(Config) ->
{selected, _ColNames,[]} = odbc:select(Ref, next, 1).
%%-------------------------------------------------------------------------
-return_rows_as_lists(doc)->
- ["Test the option that a row may be returned as a list instead "
- "of a tuple. Too be somewhat backward compatible."];
-return_rows_as_lists(suite) -> [];
+return_rows_as_lists()->
+ [{doc,"Test the option that a row may be returned as a list instead "
+ "of a tuple. Too be somewhat backward compatible."}].
return_rows_as_lists(Config) when is_list(Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(),
[{tuple_row, off}] ++ odbc_test_lib:platform_options()),
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -854,29 +831,28 @@ return_rows_as_lists(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-api_missuse(doc)->
- ["Test that behaviour of the control process if the api is abused"];
-api_missuse(suite) -> [];
+api_missuse()->
+ [{doc,"Test that behaviour of the control process if the api is abused"}].
api_missuse(Config) when is_list(Config)->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(), odbc_test_lib:platform_options()),
%% Serious programming fault, connetion will be shut down
gen_server:call(Ref, {self(), foobar, 10}, infinity),
- test_server:sleep(10),
+ ct:sleep(10),
undefined = process_info(Ref, status),
{ok, Ref2} = odbc:connect(?RDBMS:connection_string(),
odbc_test_lib:platform_options()),
%% Serious programming fault, connetion will be shut down
gen_server:cast(Ref2, {self(), foobar, 10}),
- test_server:sleep(10),
+ ct:sleep(10),
undefined = process_info(Ref2, status),
{ok, Ref3} = odbc:connect(?RDBMS:connection_string(),
odbc_test_lib:platform_options()),
%% Could be an innocent misstake the connection lives.
Ref3 ! foobar,
- test_server:sleep(10),
+ ct:sleep(10),
{status, _} = process_info(Ref3, status).
transaction_support_str(mysql) ->
@@ -886,13 +862,13 @@ transaction_support_str(_) ->
%%-------------------------------------------------------------------------
-extended_errors(doc)->
- ["Test the extended errors connection option: When off; the old behaviour of just an error "
- "string is returned on error. When on, the error string is replaced by a 3 element tuple "
- "that also exposes underlying ODBC provider error codes."];
-extended_errors(suite) -> [];
+extended_errors()->
+ [{doc,
+ "Test the extended errors connection option: When off; the old behaviour of just an error "
+ "string is returned on error. When on, the error string is replaced by a 3 element tuple "
+ "that also exposes underlying ODBC provider error codes."}].
extended_errors(Config) when is_list(Config)->
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
{ok, Ref} = odbc:connect(?RDBMS:connection_string(), odbc_test_lib:platform_options()),
{updated, _} = odbc:sql_query(Ref, "create table " ++ Table ++" ( id integer, data varchar(10))"),
diff --git a/lib/odbc/test/odbc_data_type_SUITE.erl b/lib/odbc/test/odbc_data_type_SUITE.erl
index c88c00725e..a3a4bc78eb 100644
--- a/lib/odbc/test/odbc_data_type_SUITE.erl
+++ b/lib/odbc/test/odbc_data_type_SUITE.erl
@@ -120,6 +120,7 @@ init_per_suite(Config) when is_list(Config) ->
false ->
case (catch odbc:start()) of
ok ->
+ ct:timetrap(?default_timeout),
[{tableName, odbc_test_lib:unique_table_name()}| Config];
_ ->
{skip, "ODBC not startable"}
@@ -191,23 +192,22 @@ init_per_testcase(Case, Config) ->
common_init_per_testcase(Case, Config) ->
PlatformOptions = odbc_test_lib:platform_options(),
- case atom_to_list(Case) of
- "binary" ++ _ ->
- {ok, Ref} = odbc:connect(?RDBMS:connection_string(),
- [{binary_strings, on}] ++ PlatformOptions);
- LCase when LCase == "utf8";
- LCase == "nchar";
- LCase == "nvarchar" ->
- {ok, Ref} = odbc:connect(?RDBMS:connection_string(),
- [{binary_strings, on}] ++ PlatformOptions);
- _ ->
- {ok, Ref} = odbc:connect(?RDBMS:connection_string(), PlatformOptions)
- end,
+ {ok, Ref} =
+ case atom_to_list(Case) of
+ "binary" ++ _ ->
+ odbc:connect(?RDBMS:connection_string(),
+ [{binary_strings, on}] ++ PlatformOptions);
+ LCase when LCase == "utf8";
+ LCase == "nchar";
+ LCase == "nvarchar" ->
+ odbc:connect(?RDBMS:connection_string(),
+ [{binary_strings, on}] ++ PlatformOptions);
+ _ ->
+ odbc:connect(?RDBMS:connection_string(), PlatformOptions)
+ end,
odbc_test_lib:strict(Ref, ?RDBMS),
- Dog = test_server:timetrap(?default_timeout),
- Temp = lists:keydelete(connection_ref, 1, Config),
- NewConfig = lists:keydelete(watchdog, 1, Temp),
- [{watchdog, Dog}, {connection_ref, Ref} | NewConfig].
+ NewConfig = lists:keydelete(connection_ref, 1, Config),
+ [{connection_ref, Ref} | NewConfig].
is_fixed_upper_limit(mysql) ->
false;
@@ -231,28 +231,23 @@ is_supported_bit(_) ->
%% Description: Cleanup after each test case
%%--------------------------------------------------------------------
end_per_testcase(_TestCase, Config) ->
- Ref = ?config(connection_ref, Config),
+ Ref = proplists:get_value(connection_ref, Config),
ok = odbc:disconnect(Ref),
%% Clean up if needed
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
{ok, NewRef} = odbc:connect(?RDBMS:connection_string(), odbc_test_lib:platform_options()),
odbc:sql_query(NewRef, "DROP TABLE " ++ Table),
- odbc:disconnect(NewRef),
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
+ odbc:disconnect(NewRef).
%%-------------------------------------------------------------------------
%% Test cases starts here.
%%-------------------------------------------------------------------------
-char_fixed_lower_limit(doc) ->
- ["Tests fixed length char data type lower boundaries."];
-char_fixed_lower_limit(suite) ->
- [];
+char_fixed_lower_limit() ->
+ [{doc,"Tests fixed length char data type lower boundaries."}].
char_fixed_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Below limit
{error, _} =
@@ -287,18 +282,16 @@ char_fixed_lower_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-char_fixed_upper_limit(doc) ->
- ["Tests fixed length char data type upper boundaries."];
-char_fixed_upper_limit(suite) ->
- [];
+char_fixed_upper_limit() ->
+ [{doc,"Tests fixed length char data type upper boundaries."}].
char_fixed_upper_limit(Config) when is_list(Config) ->
case ?RDBMS of
postgres ->
{skip, "Limit unknown"};
_ ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Upper limit
{updated, _} = % Value == 0 || -1 driver dependent!
@@ -337,14 +330,12 @@ char_fixed_upper_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-char_fixed_padding(doc) ->
- ["Tests that data that is shorter than the given size is padded "
- "with blanks."];
-char_fixed_padding(suite) ->
- [];
+char_fixed_padding() ->
+ [{doc, "Tests that data that is shorter than the given size is padded "
+ "with blanks."}].
char_fixed_padding(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Data should be padded with blanks
{updated, _} = % Value == 0 || -1 driver dependent!
@@ -365,13 +356,11 @@ char_fixed_padding(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-varchar_lower_limit(doc) ->
- ["Tests variable length char data type lower boundaries."];
-varchar_lower_limit(suite) ->
- [];
+varchar_lower_limit() ->
+ [{doc,"Tests variable length char data type lower boundaries."}].
varchar_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Below limit
{error, _} =
@@ -405,13 +394,11 @@ varchar_lower_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-varchar_upper_limit(doc) ->
- ["Tests variable length char data type upper boundaries."];
-varchar_upper_limit(suite) ->
- [];
+varchar_upper_limit() ->
+ [{doc,"Tests variable length char data type upper boundaries."}].
varchar_upper_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
case ?RDBMS of
oracle ->
@@ -455,14 +442,12 @@ varchar_upper_limit(Config) when is_list(Config) ->
end.
%%-------------------------------------------------------------------------
-varchar_no_padding(doc) ->
- ["Tests that data that is shorter than the given max size is not padded "
- "with blanks."];
-varchar_no_padding(suite) ->
- [];
+varchar_no_padding() ->
+ [{doc, "Tests that data that is shorter than the given max size is not padded "
+ "with blanks."}].
varchar_no_padding(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Data should NOT be padded with blanks
{updated, _} = % Value == 0 || -1 driver dependent!
@@ -481,13 +466,11 @@ varchar_no_padding(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-text_lower_limit(doc) ->
- ["Tests 'long' char data type lower boundaries."];
-text_lower_limit(suite) ->
- [];
+text_lower_limit() ->
+ [{doc,"Tests 'long' char data type lower boundaries."}].
text_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -504,15 +487,13 @@ text_lower_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-text_upper_limit(doc) ->
- [];
-text_upper_limit(suite) ->
- [];
+text_upper_limit() ->
+ [{doc,"Tests 'text' char data type upper boundaries."}].
text_upper_limit(Config) when is_list(Config) ->
{skip,"Consumes too much resources" }.
-%% Ref = ?config(connection_ref, Config),
-%% Table = ?config(tableName, Config),
+%% Ref = proplists:get_value(connection_ref, Config),
+%% Table = proplists:get_value(tableName, Config),
%% {updated, _} = % Value == 0 || -1 driver dependent!
%% odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -534,13 +515,11 @@ text_upper_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-binary_char_fixed_lower_limit(doc) ->
- ["Tests fixed length char data type lower boundaries."];
-binary_char_fixed_lower_limit(suite) ->
- [];
+binary_char_fixed_lower_limit() ->
+ [{doc,"Tests fixed length char data type lower boundaries."}].
binary_char_fixed_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Below limit
{error, _} =
@@ -579,18 +558,16 @@ binary_char_fixed_lower_limit(Config) when is_list(Config) ->
++ "')").
%%-------------------------------------------------------------------------
-binary_char_fixed_upper_limit(doc) ->
- ["Tests fixed length char data type upper boundaries."];
-binary_char_fixed_upper_limit(suite) ->
- [];
+binary_char_fixed_upper_limit() ->
+ [{doc,"Tests fixed length char data type upper boundaries."}].
binary_char_fixed_upper_limit(Config) when is_list(Config) ->
case ?RDBMS of
postgres ->
{skip, "Limit unknown"};
_ ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Upper limit
{updated, _} = % Value == 0 || -1 driver dependent!
@@ -630,14 +607,12 @@ binary_char_fixed_upper_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-binary_char_fixed_padding(doc) ->
- ["Tests that data that is shorter than the given size is padded "
- "with blanks."];
-binary_char_fixed_padding(suite) ->
- [];
+binary_char_fixed_padding() ->
+ [{doc, "Tests that data that is shorter than the given size is padded "
+ "with blanks."}].
binary_char_fixed_padding(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Data should be padded with blanks
{updated, _} = % Value == 0 || -1 driver dependent!
@@ -658,13 +633,11 @@ binary_char_fixed_padding(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-binary_varchar_lower_limit(doc) ->
- ["Tests variable length char data type lower boundaries."];
-binary_varchar_lower_limit(suite) ->
- [];
+binary_varchar_lower_limit() ->
+ [{doc,"Tests variable length char data type lower boundaries."}].
binary_varchar_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Below limit
{error, _} =
@@ -701,13 +674,11 @@ binary_varchar_lower_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-binary_varchar_upper_limit(doc) ->
- ["Tests variable length char data type upper boundaries."];
-binary_varchar_upper_limit(suite) ->
- [];
+binary_varchar_upper_limit() ->
+ [{doc,"Tests variable length char data type upper boundaries."}].
binary_varchar_upper_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
case ?RDBMS of
oracle ->
@@ -750,14 +721,12 @@ binary_varchar_upper_limit(Config) when is_list(Config) ->
end.
%%-------------------------------------------------------------------------
-binary_varchar_no_padding(doc) ->
- ["Tests that data that is shorter than the given max size is not padded "
- "with blanks."];
-binary_varchar_no_padding(suite) ->
- [];
+binary_varchar_no_padding() ->
+ [{doc,"Tests that data that is shorter than the given max size is not padded "
+ "with blanks."}].
binary_varchar_no_padding(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
%% Data should NOT be padded with blanks
{updated, _} = % Value == 0 || -1 driver dependent!
@@ -776,13 +745,11 @@ binary_varchar_no_padding(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-binary_text_lower_limit(doc) ->
- ["Tests 'long' char data type lower boundaries."];
-binary_text_lower_limit(suite) ->
- [];
+binary_text_lower_limit() ->
+ [{doc,"Tests 'long' char data type lower boundaries."}].
binary_text_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -799,15 +766,13 @@ binary_text_lower_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-binary_text_upper_limit(doc) ->
- [];
-binary_text_upper_limit(suite) ->
- [];
+binary_text_upper_limit() ->
+ [{doc,"Tests text char data type upper boundaries."}].
binary_text_upper_limit(Config) when is_list(Config) ->
{skip,"Consumes too much resources" }.
-%% Ref = ?config(connection_ref, Config),
-%% Table = ?config(tableName, Config),
+%% Ref = proplists:get_value(connection_ref, Config),
+%% Table = proplists:get_value(tableName, Config),
%% {updated, _} = % Value == 0 || -1 driver dependent!
%% odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -830,17 +795,15 @@ binary_text_upper_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-tiny_int_lower_limit(doc) ->
- ["Tests integer of type tinyint."];
-tiny_int_lower_limit(suite) ->
- [];
+tiny_int_lower_limit() ->
+ [{doc,"Tests integer of type tinyint."}].
tiny_int_lower_limit(Config) when is_list(Config) ->
case ?RDBMS of
postgres ->
{skip, "Type tiniyint not supported"};
_ ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -864,17 +827,15 @@ tiny_int_lower_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-tiny_int_upper_limit(doc) ->
- ["Tests integer of type tinyint."];
-tiny_int_upper_limit(suite) ->
- [];
+tiny_int_upper_limit() ->
+ [{doc,"Tests integer of type tinyint."}].
tiny_int_upper_limit(Config) when is_list(Config) ->
case ?RDBMS of
postgres ->
{skip, "Type tiniyint not supported"};
_ ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -898,13 +859,11 @@ tiny_int_upper_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-small_int_lower_limit(doc) ->
- ["Tests integer of type smallint."];
-small_int_lower_limit(suite) ->
- [];
+small_int_lower_limit() ->
+ [{doc,"Tests integer of type smallint."}].
small_int_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -927,13 +886,11 @@ small_int_lower_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-small_int_upper_limit(doc) ->
- ["Tests integer of type smallint."];
-small_int_upper_limit(suite) ->
- [];
+small_int_upper_limit() ->
+ [{doc,"Tests integer of type smallint."}].
small_int_upper_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -955,13 +912,11 @@ small_int_upper_limit(Config) when is_list(Config) ->
++ "')").
%%-------------------------------------------------------------------------
-int_lower_limit(doc) ->
- ["Tests integer of type int."];
-int_lower_limit(suite) ->
- [];
+int_lower_limit() ->
+ [{doc,"Tests integer of type int."}].
int_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -983,13 +938,11 @@ int_lower_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-int_upper_limit(doc) ->
- ["Tests integer of type int."];
-int_upper_limit(suite) ->
- [];
+int_upper_limit() ->
+ [{doc,"Tests integer of type int."}].
int_upper_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1011,13 +964,11 @@ int_upper_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-big_int_lower_limit(doc) ->
- ["Tests integer of type bigint"];
-big_int_lower_limit(suite) ->
- [];
+big_int_lower_limit() ->
+ [{doc,"Tests integer of type bigint"}].
big_int_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1040,13 +991,11 @@ big_int_lower_limit(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-big_int_upper_limit(doc) ->
- ["Tests integer of type bigint."];
-big_int_upper_limit(suite) ->
- [];
+big_int_upper_limit() ->
+ [{doc,"Tests integer of type bigint."}].
big_int_upper_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1068,17 +1017,13 @@ big_int_upper_limit(Config) when is_list(Config) ->
++ "')").
%%-------------------------------------------------------------------------
-bit_false(doc) ->
- [""];
-bit_false(suite) ->
- [];
bit_false(Config) when is_list(Config) ->
case ?RDBMS of
oracle ->
{skip, "Not supported by driver"};
_ ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1102,17 +1047,13 @@ bit_false(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-bit_true(doc) ->
- [""];
-bit_true(suite) ->
- [];
bit_true(Config) when is_list(Config) ->
case ?RDBMS of
oracle ->
{skip, "Not supported by driver"};
_ ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
@@ -1136,14 +1077,11 @@ bit_true(Config) when is_list(Config) ->
end.
%%-------------------------------------------------------------------------
-float_lower_limit(doc) ->
- [""];
-float_lower_limit(suite) ->
- [];
+
float_lower_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
case ?RDBMS of
mysql ->
@@ -1186,13 +1124,10 @@ float_lower_limit(Config) when is_list(Config) ->
end.
%%-------------------------------------------------------------------------
-float_upper_limit(doc) ->
- [""];
-float_upper_limit(suite) ->
- [];
+
float_upper_limit(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
case ?RDBMS of
mysql ->
@@ -1218,13 +1153,11 @@ float_upper_limit(Config) when is_list(Config) ->
end.
%%-------------------------------------------------------------------------
-float_zero(doc) ->
- ["Test the float value zero."];
-float_zero(suite) ->
- [];
+float_zero() ->
+ [{doc,"Test the float value zero."}].
float_zero(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1237,13 +1170,11 @@ float_zero(Config) when is_list(Config) ->
SelectResult =
odbc:sql_query(Ref,"SELECT FIELD FROM " ++ Table).
%%-------------------------------------------------------------------------
-real_zero(doc) ->
- ["Test the real value zero."];
-real_zero(suite) ->
- [];
+real_zero() ->
+ [{doc,"Test the real value zero."}].
real_zero(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
case ?RDBMS of
oracle ->
@@ -1262,13 +1193,11 @@ real_zero(Config) when is_list(Config) ->
odbc:sql_query(Ref,"SELECT FIELD FROM " ++ Table)
end.
%%------------------------------------------------------------------------
-dec_long(doc) ->
- [""];
dec_long(suit) ->
[];
dec_long(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1281,13 +1210,11 @@ dec_long(Config) when is_list(Config) ->
odbc:sql_query(Ref,"SELECT FIELD FROM " ++ Table),
["FIELD"] = odbc_test_lib:to_upper(Fields).
%%------------------------------------------------------------------------
-dec_double(doc) ->
- [""];
dec_double(suit) ->
[];
dec_double(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1329,13 +1256,11 @@ dec_double(Config) when is_list(Config) ->
["FIELD"] = odbc_test_lib:to_upper(Fields2).
%%------------------------------------------------------------------------
-dec_bignum(doc) ->
- [""];
dec_bignum(suit) ->
[];
dec_bignum(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1361,13 +1286,11 @@ dec_bignum(Config) when is_list(Config) ->
odbc:sql_query(Ref,"SELECT FIELD FROM " ++ Table),
["FIELD"] = odbc_test_lib:to_upper(Fields1).
%%------------------------------------------------------------------------
-num_long(doc) ->
- [""];
num_long(suit) ->
[];
num_long(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1380,13 +1303,11 @@ num_long(Config) when is_list(Config) ->
odbc:sql_query(Ref,"SELECT FIELD FROM " ++ Table),
["FIELD"] = odbc_test_lib:to_upper(Fields).
%%------------------------------------------------------------------------
-num_double(doc) ->
- [""];
num_double(suit) ->
[];
num_double(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1426,13 +1347,11 @@ num_double(Config) when is_list(Config) ->
odbc:sql_query(Ref,"SELECT FIELD FROM " ++ Table),
["FIELD"] = odbc_test_lib:to_upper(Fields2).
%%------------------------------------------------------------------------
-num_bignum(doc) ->
- [""];
num_bignum(suit) ->
[];
num_bignum(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1459,13 +1378,13 @@ num_bignum(Config) when is_list(Config) ->
["FIELD"] = odbc_test_lib:to_upper(Fields1).
%%------------------------------------------------------------------------
-utf8(doc) ->
- ["Test unicode support"];
+utf8() ->
+ [{doc,"Test unicode support"}].
utf8(suit) ->
[];
utf8(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++ "(FIELD text)"),
@@ -1487,30 +1406,30 @@ utf8(Config) when is_list(Config) ->
end,
Latin1Data),
- test_server:format("UnicodeIn: ~p ~n",[UnicodeIn]),
+ ct:pal("UnicodeIn: ~p ~n",[UnicodeIn]),
{updated, _} = odbc:param_query(Ref,"INSERT INTO " ++ Table ++ "(FIELD) values(?)",
[{{sql_varchar,50}, UnicodeIn}]),
{selected,_,UnicodeOut} = odbc:sql_query(Ref,"SELECT * FROM " ++ Table),
- test_server:format("UnicodeOut: ~p~n", [UnicodeOut]),
+ ct:pal("UnicodeOut: ~p~n", [UnicodeOut]),
Result = lists:map(fun({Char}) ->
unicode:characters_to_list(Char,utf8)
end, UnicodeOut),
- test_server:format("Result: ~p ~n", [Result]),
+ ct:pal("Result: ~p ~n", [Result]),
Latin1Data = Result.
%%------------------------------------------------------------------------
-nchar(doc) ->
- ["Test unicode nchar support in sqlserver"];
+nchar() ->
+ [{doc,"Test unicode nchar support in sqlserver"}].
nchar(suit) ->
[];
nchar(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1520,13 +1439,13 @@ nchar(Config) when is_list(Config) ->
%%------------------------------------------------------------------------
-nvarchar(doc) ->
- ["Test 'unicode' nvarchar support"];
+nvarchar() ->
+ [{doc,"Test 'unicode' nvarchar support"}].
nvarchar(suit) ->
[];
nvarchar(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1535,13 +1454,11 @@ nvarchar(Config) when is_list(Config) ->
w_char_support(Ref, Table, sql_wlongvarchar, 50).
%%------------------------------------------------------------------------
-timestamp(doc) ->
- [""];
timestamp(suit) ->
[];
timestamp(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1582,21 +1499,21 @@ w_char_support(Ref, Table, CharType, Size) ->
end,
Latin1Data),
- test_server:format("UnicodeIn (utf 16): ~p ~n",[UnicodeIn]),
+ ct:pal("UnicodeIn (utf 16): ~p ~n",[UnicodeIn]),
{updated, _} = odbc:param_query(Ref, "INSERT INTO " ++ Table ++ "(FIELD) values(?)",
[{{CharType, Size},UnicodeIn}]),
{selected,_,UnicodeOut} = odbc:sql_query(Ref,"SELECT * FROM " ++ Table),
- test_server:format("UnicodeOut: ~p~n", [UnicodeOut]),
+ ct:pal("UnicodeOut: ~p~n", [UnicodeOut]),
PadResult = lists:map(fun({Unicode}) ->
unicode:characters_to_list(Unicode,{utf16,little})
end,
UnicodeOut),
- test_server:format("Result: ~p~n", [PadResult]),
+ ct:pal("Result: ~p~n", [PadResult]),
Result = lists:map(fun(Str) -> string:strip(Str) end, PadResult),
diff --git a/lib/odbc/test/odbc_query_SUITE.erl b/lib/odbc/test/odbc_query_SUITE.erl
index 5f719b7287..c283872965 100644
--- a/lib/odbc/test/odbc_query_SUITE.erl
+++ b/lib/odbc/test/odbc_query_SUITE.erl
@@ -113,6 +113,7 @@ init_per_suite(Config) when is_list(Config) ->
false ->
case (catch odbc:start()) of
ok ->
+ ct:timetrap(?default_timeout),
[{tableName, odbc_test_lib:unique_table_name()}| Config];
_ ->
{skip, "ODBC not startable"}
@@ -144,10 +145,10 @@ end_per_suite(_Config) ->
init_per_testcase(_Case, Config) ->
{ok, Ref} = odbc:connect(?RDBMS:connection_string(), odbc_test_lib:platform_options()),
odbc_test_lib:strict(Ref, ?RDBMS),
- Dog = test_server:timetrap(?default_timeout),
- Temp = lists:keydelete(connection_ref, 1, Config),
- NewConfig = lists:keydelete(watchdog, 1, Temp),
- [{watchdog, Dog}, {connection_ref, Ref} | NewConfig].
+
+ NewConfig = lists:keydelete(connection_ref, 1, Config),
+
+ [{connection_ref, Ref} | NewConfig].
%%--------------------------------------------------------------------
%% Function: end_per_testcase(Case, Config) -> _
@@ -158,27 +159,23 @@ init_per_testcase(_Case, Config) ->
%% Description: Cleanup after each test case
%%--------------------------------------------------------------------
end_per_testcase(_Case, Config) ->
- Ref = ?config(connection_ref, Config),
+ Ref = proplists:get_value(connection_ref, Config),
ok = odbc:disconnect(Ref),
%% Clean up if needed
- Table = ?config(tableName, Config),
+ Table = proplists:get_value(tableName, Config),
{ok, NewRef} = odbc:connect(?RDBMS:connection_string(), odbc_test_lib:platform_options()),
odbc:sql_query(NewRef, "DROP TABLE " ++ Table),
- odbc:disconnect(NewRef),
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
+ odbc:disconnect(NewRef).
%%-------------------------------------------------------------------------
%% Test cases starts here.
%%-------------------------------------------------------------------------
-stored_proc(doc)->
- ["Test stored proc with OUT param"];
-stored_proc(suite) -> [];
+stored_proc()->
+ [{doc, "Test stored proc with OUT param"}].
stored_proc(Config) when is_list(Config) ->
case ?RDBMS of
X when X == oracle; X == postgres->
- Ref = ?config(connection_ref, Config),
+ Ref = proplists:get_value(connection_ref, Config),
{updated, _} =
odbc:sql_query(Ref,
?RDBMS:stored_proc_integer_out()),
@@ -192,12 +189,11 @@ stored_proc(Config) when is_list(Config) ->
{skip, "stored proc not yet supported"}
end.
-sql_query(doc)->
- ["Test the common cases"];
-sql_query(suite) -> [];
+sql_query()->
+ [{doc, "Test the common cases"}].
sql_query(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -235,14 +231,14 @@ sql_query(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-select_count(doc) ->
- ["Tests select_count/[2,3]'s timeout, "
- " select_count's functionality will be better tested by other tests "
- " such as first."];
+select_count() ->
+ [{doc, "Tests select_count/[2,3]'s timeout, "
+ " select_count's functionality will be better tested by other tests "
+ " such as first."}].
select_count(sute) -> [];
select_count(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = odbc:sql_query(Ref,
"CREATE TABLE " ++ Table ++
@@ -257,12 +253,11 @@ select_count(Config) when is_list(Config) ->
(catch odbc:select_count(Ref, "SELECT * FROM ", -1)),
ok.
%%-------------------------------------------------------------------------
-first(doc) ->
- ["Tests first/[1,2]"];
-first(suite) -> [];
+first() ->
+ [doc, {"Tests first/[1,2]"}].
first(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = odbc:sql_query(Ref,
"CREATE TABLE " ++ Table ++
@@ -284,12 +279,11 @@ first(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-last(doc) ->
- ["Tests last/[1,2]"];
-last(suite) -> [];
+last() ->
+ [{doc, "Tests last/[1,2]"}].
last(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = odbc:sql_query(Ref,
"CREATE TABLE " ++ Table ++
@@ -311,12 +305,11 @@ last(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-next(doc) ->
- ["Tests next/[1,2]"];
-next(suite) -> [];
+next() ->
+ [{doc, "Tests next/[1,2]"}].
next(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = odbc:sql_query(Ref,
"CREATE TABLE " ++ Table ++
@@ -337,12 +330,11 @@ next(Config) when is_list(Config) ->
{'EXIT', {function_clause, _}} = (catch odbc:next(Ref, -1)),
ok.
%%-------------------------------------------------------------------------
-prev(doc) ->
- ["Tests prev/[1,2]"];
-prev(suite) -> [];
+prev() ->
+ [{doc, "Tests prev/[1,2]"}].
prev(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = odbc:sql_query(Ref,
"CREATE TABLE " ++ Table ++
@@ -366,12 +358,12 @@ prev(Config) when is_list(Config) ->
{'EXIT', {function_clause, _}} = (catch odbc:prev(Ref, -1)),
ok.
%%-------------------------------------------------------------------------
-select_next(doc) ->
- ["Tests select/[4,5] with CursorRelation = next "];
+select_next() ->
+ [{doc, "Tests select/[4,5] with CursorRelation = next "}].
select_next(suit) -> [];
select_next(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = odbc:sql_query(Ref,
"CREATE TABLE " ++ Table ++
@@ -407,12 +399,12 @@ select_next(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-select_relative(doc) ->
- ["Tests select/[4,5] with CursorRelation = relative "];
+select_relative() ->
+ [{doc, "Tests select/[4,5] with CursorRelation = relative "}].
select_relative(suit) -> [];
select_relative(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = odbc:sql_query(Ref,
"CREATE TABLE " ++ Table ++
@@ -448,12 +440,12 @@ select_relative(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-select_absolute(doc) ->
- ["Tests select/[4,5] with CursorRelation = absolute "];
+select_absolute() ->
+ [{doc, "Tests select/[4,5] with CursorRelation = absolute "}].
select_absolute(suit) -> [];
select_absolute(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = odbc:sql_query(Ref,
"CREATE TABLE " ++ Table ++
@@ -482,12 +474,11 @@ select_absolute(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-create_table_twice(doc) ->
- ["Test what happens if you try to create the same table twice."];
-create_table_twice(suite) -> [];
+create_table_twice() ->
+ [{doc, "Test what happens if you try to create the same table twice."}].
create_table_twice(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -501,12 +492,11 @@ create_table_twice(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-delete_table_twice(doc) ->
- ["Test what happens if you try to delete the same table twice."];
-delete_table_twice(suite) -> [];
+delete_table_twice() ->
+ [{doc, "Test what happens if you try to delete the same table twice."}].
delete_table_twice(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -518,12 +508,12 @@ delete_table_twice(Config) when is_list(Config) ->
ok.
%-------------------------------------------------------------------------
-duplicate_key(doc) ->
- ["Test what happens if you try to use the same key twice"];
+duplicate_key() ->
+ [{doc, "Test what happens if you try to use the same key twice"}].
duplicate_key(suit) -> [];
duplicate_key(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -539,13 +529,12 @@ duplicate_key(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-not_connection_owner(doc) ->
- ["Test what happens if a process that did not start the connection"
- " tries to acess it."];
-not_connection_owner(suite) -> [];
+not_connection_owner() ->
+ [{doc, "Test what happens if a process that did not start the connection"
+ " tries to acess it."}].
not_connection_owner(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
spawn_link(?MODULE, not_owner, [self(), Ref, Table]),
@@ -564,12 +553,11 @@ not_owner(Pid, Ref, Table) ->
Pid ! continue.
%%-------------------------------------------------------------------------
-no_result_set(doc) ->
- ["Tests what happens if you try to use a function that needs an "
- "associated result set when there is none."];
-no_result_set(suite) -> [];
+no_result_set() ->
+ [{doc, "Tests what happens if you try to use a function that needs an "
+ "associated result set when there is none."}].
no_result_set(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
+ Ref = proplists:get_value(connection_ref, Config),
{error, result_set_does_not_exist} = odbc:first(Ref),
{error, result_set_does_not_exist} = odbc:last(Ref),
@@ -582,13 +570,11 @@ no_result_set(Config) when is_list(Config) ->
odbc:select(Ref, {relative, 2}, 1),
ok.
%%-------------------------------------------------------------------------
-query_error(doc) ->
- ["Test what happens if there is an error in the query."];
-query_error(suite) ->
- [];
+query_error() ->
+ [{doc, "Test what happens if there is an error in the query."}].
query_error(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -605,15 +591,13 @@ query_error(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-multiple_select_result_sets(doc) ->
- ["Test what happens if you have a batch of select queries."];
-multiple_select_result_sets(suite) ->
- [];
+multiple_select_result_sets() ->
+ [{doc, "Test what happens if you have a batch of select queries."}].
multiple_select_result_sets(Config) when is_list(Config) ->
case ?RDBMS of
sqlserver ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -640,16 +624,14 @@ multiple_select_result_sets(Config) when is_list(Config) ->
end.
%%-------------------------------------------------------------------------
-multiple_mix_result_sets(doc) ->
- ["Test what happens if you have a batch of select and other type of"
- " queries."];
-multiple_mix_result_sets(suite) ->
- [];
+multiple_mix_result_sets() ->
+ [{doc, "Test what happens if you have a batch of select and other type of"
+ " queries."}].
multiple_mix_result_sets(Config) when is_list(Config) ->
case ?RDBMS of
sqlserver ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -674,15 +656,13 @@ multiple_mix_result_sets(Config) when is_list(Config) ->
{skip, "multiple result_set not supported"}
end.
%%-------------------------------------------------------------------------
-multiple_result_sets_error(doc) ->
- ["Test what happens if one of the batched queries fails."];
-multiple_result_sets_error(suite) ->
- [];
+multiple_result_sets_error() ->
+ [{doc, "Test what happens if one of the batched queries fails."}].
multiple_result_sets_error(Config) when is_list(Config) ->
case ?RDBMS of
sqlserver ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -709,15 +689,13 @@ multiple_result_sets_error(Config) when is_list(Config) ->
end.
%%-------------------------------------------------------------------------
-param_insert_tiny_int(doc)->
- ["Test insertion of tiny ints by parameterized queries."];
-param_insert_tiny_int(suite) ->
- [];
+param_insert_tiny_int()->
+ [{doc,"Test insertion of tiny ints by parameterized queries."}].
param_insert_tiny_int(Config) when is_list(Config) ->
case ?RDBMS of
sqlserver ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -746,13 +724,11 @@ param_insert_tiny_int(Config) when is_list(Config) ->
{skip, "Type tiniyint not supported"}
end.
%%-------------------------------------------------------------------------
-param_insert_small_int(doc)->
- ["Test insertion of small ints by parameterized queries."];
-param_insert_small_int(suite) ->
- [];
+param_insert_small_int()->
+ [{doc,"Test insertion of small ints by parameterized queries."}].
param_insert_small_int(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -778,13 +754,11 @@ param_insert_small_int(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_int(doc)->
- ["Test insertion of ints by parameterized queries."];
-param_insert_int(suite) ->
- [];
+param_insert_int()->
+ [{doc,"Test insertion of ints by parameterized queries."}].
param_insert_int(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -810,13 +784,11 @@ param_insert_int(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_integer(doc)->
- ["Test insertion of integers by parameterized queries."];
-param_insert_integer(suite) ->
- [];
+param_insert_integer()->
+ [{doc,"Test insertion of integers by parameterized queries."}].
param_insert_integer(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -842,13 +814,11 @@ param_insert_integer(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_decimal(doc)->
- ["Test insertion of decimal numbers by parameterized queries."];
-param_insert_decimal(suite) ->
- [];
+param_insert_decimal()->
+ [{doc,"Test insertion of decimal numbers by parameterized queries."}].
param_insert_decimal(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -893,13 +863,11 @@ param_insert_decimal(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_numeric(doc)->
- ["Test insertion of numeric numbers by parameterized queries."];
-param_insert_numeric(suite) ->
- [];
+param_insert_numeric()->
+ [{doc,"Test insertion of numeric numbers by parameterized queries."}].
param_insert_numeric(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -944,13 +912,11 @@ param_insert_numeric(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_char(doc)->
- ["Test insertion of fixed length string by parameterized queries."];
-param_insert_char(suite) ->
- [];
+param_insert_char()->
+ [{doc,"Test insertion of fixed length string by parameterized queries."}].
param_insert_char(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -980,13 +946,11 @@ param_insert_char(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_character(doc)->
- ["Test insertion of fixed length string by parameterized queries."];
-param_insert_character(suite) ->
- [];
+param_insert_character()->
+ [{doc,"Test insertion of fixed length string by parameterized queries."}].
param_insert_character(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1017,13 +981,11 @@ param_insert_character(Config) when is_list(Config) ->
ok.
%%------------------------------------------------------------------------
-param_insert_char_varying(doc)->
- ["Test insertion of variable length strings by parameterized queries."];
-param_insert_char_varying(suite) ->
- [];
+param_insert_char_varying()->
+ [{doc,"Test insertion of variable length strings by parameterized queries."}].
param_insert_char_varying(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1054,13 +1016,11 @@ param_insert_char_varying(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_character_varying(doc)->
- ["Test insertion of variable length strings by parameterized queries."];
-param_insert_character_varying(suite) ->
- [];
+param_insert_character_varying()->
+ [{doc,"Test insertion of variable length strings by parameterized queries."}].
param_insert_character_varying(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1091,13 +1051,11 @@ param_insert_character_varying(Config) when is_list(Config) ->
[{{sql_varchar, 10}, ["1", 2]}])),
ok.
%%-------------------------------------------------------------------------
-param_insert_float(doc)->
- ["Test insertion of floats by parameterized queries."];
-param_insert_float(suite) ->
- [];
+param_insert_float()->
+ [{doc,"Test insertion of floats by parameterized queries."}].
param_insert_float(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1120,7 +1078,7 @@ param_insert_float(Config) when is_list(Config) ->
true ->
ok;
false ->
- test_server:fail(float_numbers_do_not_match)
+ ct:fail(float_numbers_do_not_match)
end,
{'EXIT',{badarg,odbc,param_query,'Params'}} =
@@ -1130,13 +1088,11 @@ param_insert_float(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_real(doc)->
- ["Test insertion of real numbers by parameterized queries."];
-param_insert_real(suite) ->
- [];
+param_insert_real()->
+ [{doc,"Test insertion of real numbers by parameterized queries."}].
param_insert_real(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1161,7 +1117,7 @@ param_insert_real(Config) when is_list(Config) ->
true ->
ok;
false ->
- test_server:fail(real_numbers_do_not_match)
+ ct:fail(real_numbers_do_not_match)
end,
{'EXIT',{badarg,odbc,param_query,'Params'}} =
@@ -1171,13 +1127,11 @@ param_insert_real(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_double(doc)->
- ["Test insertion of doubles by parameterized queries."];
-param_insert_double(suite) ->
- [];
+param_insert_double()->
+ [{doc,"Test insertion of doubles by parameterized queries."}].
param_insert_double(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1200,7 +1154,7 @@ param_insert_double(Config) when is_list(Config) ->
true ->
ok;
false ->
- test_server:fail(double_numbers_do_not_match)
+ ct:fail(double_numbers_do_not_match)
end,
{'EXIT',{badarg,odbc,param_query,'Params'}} =
@@ -1210,13 +1164,11 @@ param_insert_double(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_insert_mix(doc)->
- ["Test insertion of a mixture of datatypes by parameterized queries."];
-param_insert_mix(suite) ->
- [];
+param_insert_mix()->
+ [{doc,"Test insertion of a mixture of datatypes by parameterized queries."}].
param_insert_mix(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1237,13 +1189,11 @@ param_insert_mix(Config) when is_list(Config) ->
odbc:sql_query(Ref, "SELECT * FROM " ++ Table),
ok.
%%-------------------------------------------------------------------------
-param_update(doc)->
- ["Test parameterized update query."];
-param_update(suite) ->
- [];
+param_update()->
+ [{doc,"Test parameterized update query."}].
param_update(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1272,12 +1222,12 @@ param_update(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-delete_nonexisting_row(doc) -> % OTP-5759
- ["Make a delete...where with false conditions (0 rows deleted). ",
- "This used to give an error message (see ticket OTP-5759)."];
+delete_nonexisting_row() -> % OTP-5759
+ [{doc, "Make a delete...where with false conditions (0 rows deleted). ",
+ "This used to give an error message (see ticket OTP-5759)."}].
delete_nonexisting_row(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref, "CREATE TABLE " ++ Table
@@ -1301,13 +1251,11 @@ delete_nonexisting_row(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_delete(doc) ->
- ["Test parameterized delete query."];
-param_delete(suite) ->
- [];
+param_delete() ->
+ [{doc,"Test parameterized delete query."}].
param_delete(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1336,13 +1284,11 @@ param_delete(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-param_select(doc) ->
- ["Test parameterized select query."];
-param_select(suite) ->
- [];
+param_select() ->
+ [{doc,"Test parameterized select query."}].
param_select(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1366,13 +1312,11 @@ param_select(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_select_empty_params(doc) ->
- ["Test parameterized select query with no parameters."];
-param_select_empty_params(suite) ->
- [];
+param_select_empty_params() ->
+ [{doc,"Test parameterized select query with no parameters."}].
param_select_empty_params(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1396,13 +1340,11 @@ param_select_empty_params(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-param_delete_empty_params(doc) ->
- ["Test parameterized delete query with no parameters."];
-param_delete_empty_params(suite) ->
- [];
+param_delete_empty_params() ->
+ [{doc,"Test parameterized delete query with no parameters."}].
param_delete_empty_params(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1430,13 +1372,11 @@ param_delete_empty_params(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-describe_integer(doc) ->
- ["Test describe_table/[2,3] for integer columns."];
-describe_integer(suite) ->
- [];
+describe_integer() ->
+ [{doc,"Test describe_table/[2,3] for integer columns."}].
describe_integer(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1449,13 +1389,11 @@ describe_integer(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-describe_string(doc) ->
- ["Test describe_table/[2,3] for string columns."];
-describe_string(suite) ->
- [];
+describe_string() ->
+ [{doc,"Test describe_table/[2,3] for string columns."}].
describe_string(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1470,13 +1408,11 @@ describe_string(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-describe_floating(doc) ->
- ["Test describe_table/[2,3] for floting columns."];
-describe_floating(suite) ->
- [];
+describe_floating() ->
+ [{doc,"Test describe_table/[2,3] for floting columns."}].
describe_floating(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1490,14 +1426,12 @@ describe_floating(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-describe_dec_num(doc) ->
- ["Test describe_table/[2,3] for decimal and numerical columns"];
-describe_dec_num(suite) ->
- [];
+describe_dec_num() ->
+ [{doc,"Test describe_table/[2,3] for decimal and numerical columns"}].
describe_dec_num(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} =
odbc:sql_query(Ref,
@@ -1511,14 +1445,12 @@ describe_dec_num(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
-describe_timestamp(doc) ->
- ["Test describe_table/[2,3] for tinmestap columns"];
-describe_timestamp(suite) ->
- [];
+describe_timestamp() ->
+ [{doc,"Test describe_table/[2,3] for tinmestap columns"}].
describe_timestamp(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{updated, _} = % Value == 0 || -1 driver dependent!
odbc:sql_query(Ref, "CREATE TABLE " ++ Table ++
@@ -1530,14 +1462,12 @@ describe_timestamp(Config) when is_list(Config) ->
ok.
%%-------------------------------------------------------------------------
-describe_no_such_table(doc) ->
- ["Test what happens if you try to describe a table that does not exist."];
-describe_no_such_table(suite) ->
- [];
+describe_no_such_table() ->
+ [{doc,"Test what happens if you try to describe a table that does not exist."}].
describe_no_such_table(Config) when is_list(Config) ->
- Ref = ?config(connection_ref, Config),
- Table = ?config(tableName, Config),
+ Ref = proplists:get_value(connection_ref, Config),
+ Table = proplists:get_value(tableName, Config),
{error, _ } = odbc:describe_table(Ref, Table),
ok.
@@ -1549,10 +1479,10 @@ describe_no_such_table(Config) when is_list(Config) ->
is_driver_error(Error) ->
case is_list(Error) of
true ->
- test_server:format("Driver error ~p~n", [Error]),
+ ct:pal("Driver error ~p~n", [Error]),
ok;
false ->
- test_server:fail(Error)
+ ct:fail(Error)
end.
is_supported_multiple_resultsets(sqlserver) ->
true;
diff --git a/lib/odbc/test/odbc_start_SUITE.erl b/lib/odbc/test/odbc_start_SUITE.erl
index f055eeb60e..310b92ca29 100644
--- a/lib/odbc/test/odbc_start_SUITE.erl
+++ b/lib/odbc/test/odbc_start_SUITE.erl
@@ -49,6 +49,7 @@ init_per_suite(Config) ->
_ ->
%% Make sure odbc is not already started
odbc:stop(),
+ ct:timetrap(?TIMEOUT),
[{tableName, odbc_test_lib:unique_table_name()} | Config]
end
end.
@@ -74,11 +75,9 @@ end_per_suite(_Config) ->
%% variable, but should NOT alter/remove any existing entries.
%% Description: Initialization before each test case
%%--------------------------------------------------------------------
-init_per_testcase(_TestCase, Config0) ->
- test_server:format("ODBCINI = ~p~n", [os:getenv("ODBCINI")]),
- Config = lists:keydelete(watchdog, 1, Config0),
- Dog = test_server:timetrap(?TIMEOUT),
- [{watchdog, Dog} | Config].
+init_per_testcase(_TestCase, Config) ->
+ ct:pal("ODBCINI = ~p~n", [os:getenv("ODBCINI")]),
+ Config.
%%--------------------------------------------------------------------
%% Function: end_per_testcase(TestCase, Config) -> _
@@ -88,15 +87,8 @@ init_per_testcase(_TestCase, Config0) ->
%% A list of key/value pairs, holding the test case configuration.
%% Description: Cleanup after each test case
%%--------------------------------------------------------------------
-end_per_testcase(_TestCase, Config) ->
- Dog = ?config(watchdog, Config),
- case Dog of
- undefined ->
- ok;
- _ ->
- test_server:timetrap_cancel(Dog)
- end.
-
+end_per_testcase(_TestCase, _Config) ->
+ ok.
%%--------------------------------------------------------------------
%% Function: all(Clause) -> TestCases
%% Clause - atom() - suite | doc
@@ -135,10 +127,8 @@ app(Config) when is_list(Config) ->
appup(Config) when is_list(Config) ->
ok = ?t:appup_test(odbc).
-start(doc) ->
- ["Test start/stop of odbc"];
-start(suite) ->
- [];
+start() ->
+ [{doc,"Test start/stop of odbc"}].
start(Config) when is_list(Config) ->
PlatformOptions = odbc_test_lib:platform_options(),
{error,odbc_not_started} = odbc:connect(?RDBMS:connection_string(),
@@ -153,9 +143,9 @@ start(Config) when is_list(Config) ->
start_odbc(transient),
start_odbc(permanent);
{error, odbc_not_started} ->
- test_server:fail(start_failed);
+ ct:fail(start_failed);
Error ->
- test_server:format("Connection failed: ~p~n", [Error]),
+ ct:pal("Connection failed: ~p~n", [Error]),
{skip, "ODBC is not properly setup"}
end.
@@ -166,13 +156,12 @@ start_odbc(Type) ->
ok = odbc:disconnect(Ref),
odbc:stop();
{error, odbc_not_started} ->
- test_server:fail(start_failed)
+ ct:fail(start_failed)
end.
-long_connection_line(doc)->
- ["Test a connection line longer than 127 characters"];
-long_connection_line(suite) -> [];
+long_connection_line()->
+ [{doc,"Test a connection line longer than 127 characters"}].
long_connection_line(_Config) ->
odbc:start(),
String133 = "unknown_odbc_parameter=01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789",
diff --git a/lib/odbc/test/odbc_test_lib.erl b/lib/odbc/test/odbc_test_lib.erl
index 37c2249303..cf82d4d32a 100644
--- a/lib/odbc/test/odbc_test_lib.erl
+++ b/lib/odbc/test/odbc_test_lib.erl
@@ -61,13 +61,13 @@ odbc_check() ->
end.
check_row_count(Count, Count) ->
- test_server:format("Correct row count Count: ~p~n", [Count]),
+ ct:pal("Correct row count Count: ~p~n", [Count]),
true;
check_row_count(_, undefined) ->
- test_server:format("Undefined row count ~n", []),
+ ct:pal("Undefined row count ~n", []),
true;
check_row_count(Expected, Count) ->
- test_server:format("Incorrect row count Expected ~p Got ~p~n",
+ ct:pal("Incorrect row count Expected ~p Got ~p~n",
[Expected, Count]),
false.
diff --git a/lib/orber/test/cdrcoding_10_SUITE.erl b/lib/orber/test/cdrcoding_10_SUITE.erl
index 3eb35572c1..24de589615 100644
--- a/lib/orber/test/cdrcoding_10_SUITE.erl
+++ b/lib/orber/test/cdrcoding_10_SUITE.erl
@@ -26,13 +26,12 @@
%%-----------------------------------------------------------------
-module(cdrcoding_10_SUITE).
-
-include("idl_output/Module.hrl").
-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(20)).
+-define(default_timeout, test_server:minutes(20)).
%%-----------------------------------------------------------------
%% External exports
@@ -80,14 +79,14 @@ cases() ->
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -126,49 +125,40 @@ end_per_suite(Config) when is_list(Config) ->
% 'oe_orber_test':'oe_unregister'(),
% ok.
-do_register(doc) -> [];
-do_register(suite) -> [];
do_register(Config) when is_list(Config) ->
io:format("Pwd: ~p, mod: ~p~n",[c:pwd(), c:m('oe_orber_test')]),
'oe_orber_test':'oe_register'(),
ok.
-do_unregister(doc) -> [];
-do_unregister(suite) -> [];
+
do_unregister(Config) when is_list(Config) ->
'oe_orber_test':'oe_unregister'(),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: null
%%-----------------------------------------------------------------
-null_type(doc) -> [];
-null_type(suite) -> [];
null_type(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_null', 'null'),
- ?line {'null', <<>>, _} = cdr_decode:dec_type('tk_null', {1, 0}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_null', 'null'),
+ {'null', <<>>, _} = cdr_decode:dec_type('tk_null', {1, 0}, B, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: void
%%-----------------------------------------------------------------
-void_type(doc) -> [];
-void_type(suite) -> [];
void_type(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_void', 'ok'),
- ?line {'ok', <<>>, _} = cdr_decode:dec_type('tk_void', {1, 0}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_void', 'ok'),
+ {'ok', <<>>, _} = cdr_decode:dec_type('tk_void', {1, 0}, B, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: principal
%%-----------------------------------------------------------------
-principal_type(doc) -> [];
-principal_type(suite) -> [];
principal_type(Config) when is_list(Config) ->
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_Principal', "principal"),
- ?line {"principal", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 0}, B0, 0, big),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_Principal', ""),
- ?line {"", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 0}, B1, 0, big),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_Principal', "principal"),
- ?line {"principal", <<>>, _} =
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_Principal', "principal"),
+ {"principal", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 0}, B0, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_Principal', ""),
+ {"", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 0}, B1, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, 'tk_Principal', "principal"),
+ {"principal", <<>>, _} =
cdr_decode:dec_type('tk_Principal', {1, 0}, B2, 0, big),
ok.
@@ -203,19 +193,17 @@ objref(2) ->
TP = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB},
#'IOP_IOR'{type_id="IDL:Module/Interface:1.0", profiles=[TP]}.
-objref_type(doc) -> [];
-objref_type(suite) -> [];
objref_type(Config) when is_list(Config) ->
T = {'tk_objref', "IDL:Module/Interface:1.0", "Interface"},
Objref0 = objref(0),
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, Objref0),
- ?line {Objref0, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, Objref0),
+ {Objref0, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B0, 0, big),
Objref1 = objref(1),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, Objref1),
- ?line {Objref1, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, Objref1),
+ {Objref1, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B1, 0, big),
Objref2 = objref(2),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, Objref2),
- ?line {Objref2, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, Objref2),
+ {Objref2, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B2, 0, big),
ok.
@@ -223,49 +211,45 @@ objref_type(Config) when is_list(Config) ->
%%-----------------------------------------------------------------
%% Encode/decode test of type: struct
%%-----------------------------------------------------------------
-struct_type(doc) -> [];
-struct_type(suite) -> [];
struct_type(Config) when is_list(Config) ->
T0 = {'tk_struct',"IDL:Module/Struct0:1.0", "Module_Struct0",
[{"long", 'tk_long'}, {"short", 'tk_short'}, {"character", 'tk_char'}]},
S0 = #'Module_Struct0'{l=-4711, s=17, c=$a},
- ?line B0 = cdr_encode:enc_type({1, 0}, T0, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B0, 0, big),
+ B0 = cdr_encode:enc_type({1, 0}, T0, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B0, 0, big),
T1 = {'tk_struct', "IDL:Module/Struct1:1.0", "Module_Struct1",
[{"string", {'tk_string', 0}}, {"ushort", 'tk_ushort'}, {"ulong", 'tk_ulong'}]},
S1 = #'Module_Struct1'{s="Hi !!!!", us=17, ul=4711},
- ?line B1 = cdr_encode:enc_type({1, 0}, T1, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type({1, 0}, T1, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B1, 0, big),
T2 = {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
[{"long_sequence", {'tk_sequence', 'tk_long', 0}},
{"enum", {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}},
{"octet", 'tk_octet'}]},
S2 = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000], e=cow, o=$X},
- ?line B2 = cdr_encode:enc_type({1, 0}, T2, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B2, 0, big),
+ B2 = cdr_encode:enc_type({1, 0}, T2, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B2, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: union
%%-----------------------------------------------------------------
-union_type(doc) -> [];
-union_type(suite) -> [];
union_type(Config) when is_list(Config) ->
T0 = {'tk_union', "IDL:Module/Union:1.0", "Union", 'tk_short', 2,
[{0, "First", 'tk_short'},
{1, "Second", {'tk_string', 0}},
{2, "Third", 'tk_char'}]},
S0 = #'Module_Union'{label=1, value="Foo Bar !"},
- ?line B0 = cdr_encode:enc_type({1, 0}, T0, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B0, 0, big),
+ B0 = cdr_encode:enc_type({1, 0}, T0, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B0, 0, big),
S1 = #'Module_Union'{label=0, value=-17},
- ?line B1 = cdr_encode:enc_type({1, 0}, T0, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type({1, 0}, T0, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B1, 0, big),
S2 = #'Module_Union'{label=2, value=$X},
- ?line B2 = cdr_encode:enc_type({1, 0}, T0, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B2, 0, big),
+ B2 = cdr_encode:enc_type({1, 0}, T0, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B2, 0, big),
T1 = {'tk_union', "IDL:Module/Union1:1.0", "Union1",
{'tk_enum', "IDL:Module/Enum:1.0",
"Module_Enum", ["horse", "pig", "cow"]}, "pig",
@@ -274,14 +258,14 @@ union_type(Config) when is_list(Config) ->
{"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
"Module_Enum1", ["orange", "banana", "apple"]}}]},
S3 = #'Module_Union1'{label=pig, value=["Foo", "Bar", "!"]},
- ?line B3 = cdr_encode:enc_type({1, 0}, T1, S3),
- ?line {S3, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B3, 0, big),
+ B3 = cdr_encode:enc_type({1, 0}, T1, S3),
+ {S3, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B3, 0, big),
S4 = #'Module_Union1'{label=cow, value=apple},
- ?line B4 = cdr_encode:enc_type({1, 0}, T1, S4),
- ?line {S4, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B4, 0, big),
+ B4 = cdr_encode:enc_type({1, 0}, T1, S4),
+ {S4, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B4, 0, big),
S5 = #'Module_Union1'{label=horse, value=17},
- ?line B5 = cdr_encode:enc_type({1, 0}, T1, S5),
- ?line {S5, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B5, 0, big),
+ B5 = cdr_encode:enc_type({1, 0}, T1, S5),
+ {S5, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B5, 0, big),
T2 = {'tk_union', "IDL:Module/Union2:1.0", "Union2",
{'tk_enum', "IDL:Module/Enum:1.0",
"Module_Enum", ["horse", "pig", "cow"]}, "pig",
@@ -303,54 +287,50 @@ union_type(Config) when is_list(Config) ->
["orange", "banana",
"apple"]}}]}}]},
S6 = #'Module_Union2'{label=pig, value=#'Module_Union'{label=0, value=-17}},
- ?line B6 = cdr_encode:enc_type({1, 0}, T2, S6),
- ?line {S6, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B6, 0, big),
+ B6 = cdr_encode:enc_type({1, 0}, T2, S6),
+ {S6, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B6, 0, big),
S7 = #'Module_Union2'{label=cow, value=#'Module_Union1'{label=pig,
value=["Foo", "Bar", "!"]}},
- ?line B7 = cdr_encode:enc_type({1, 0}, T2, S7),
- ?line {S7, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B7, 0, big),
+ B7 = cdr_encode:enc_type({1, 0}, T2, S7),
+ {S7, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B7, 0, big),
S8 = #'Module_Union2'{label=horse, value={-17, 1234567890, -987654321}},
- ?line B8 = cdr_encode:enc_type({1, 0}, T2, S8),
- ?line {S8, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B8, 0, big),
+ B8 = cdr_encode:enc_type({1, 0}, T2, S8),
+ {S8, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B8, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: string
%%-----------------------------------------------------------------
-string_type(doc) -> [];
-string_type(suite) -> [];
string_type(Config) when is_list(Config) ->
S0 = "Foo Bar ???",
- ?line B0 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B0, 0, big),
+ B0 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B0, 0, big),
S1 = "Yes, Foo Bar !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! more than 5000 characters",
- ?line B1 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B1, 0, big),
S2 = "",
- ?line B2 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B2, 0, big),
+ B2 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B2, 0, big),
S3 = "\0",
- ?line B3 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S3),
- ?line {S3, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B3, 0, big),
+ B3 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S3),
+ {S3, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B3, 0, big),
S4 = "~n",
- ?line B4 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S4),
- ?line {S4, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B4, 0, big),
+ B4 = cdr_encode:enc_type({1, 0}, {'tk_string', 0}, S4),
+ {S4, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 0}, B4, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: array
%%-----------------------------------------------------------------
-array_type(doc) -> [];
-array_type(suite) -> [];
array_type(Config) when is_list(Config) ->
T0 = {'tk_array', 'tk_long', 5},
S0 = {-100, 0, 30000, -900100900, 123456789},
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T0, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T0, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 0}, B0, 0, big),
T1 = {'tk_array', {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}, 2},
S1 = {pig, cow},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B1, 0, big),
T2 = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
{'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}, "pig",
[{"horse", "First", 'tk_ushort'},
@@ -358,18 +338,16 @@ array_type(Config) when is_list(Config) ->
{"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
"Module_Enum1", ["orange", "banana", "apple"]}}]}, 2},
S2 = {#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}},
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T2, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T2, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 0}, B2, 0, big),
T3 = {'tk_array', {'tk_objref', "IDL:Module/Interface:1.0", "Interface"}, 3},
S3 = {objref(0), objref(1), objref(2)},
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T3, S3),
- ?line {S3, <<>>, _} = cdr_decode:dec_type(T3, {1, 0}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T3, S3),
+ {S3, <<>>, _} = cdr_decode:dec_type(T3, {1, 0}, B3, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: TypeCode
%%-----------------------------------------------------------------
-any_type(doc) -> [];
-any_type(suite) -> [];
any_type(Config) when is_list(Config) ->
T = 'tk_any',
TC = {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
@@ -380,8 +358,8 @@ any_type(Config) when is_list(Config) ->
S = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000],
e=cow, o=$X},
Any = #any{typecode=TC,value=S},
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,Any),
- ?line {Any, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,Any),
+ {Any, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B, 0, big),
TC1 = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
{'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
["horse", "pig", "cow"]}, 1,
@@ -392,16 +370,14 @@ any_type(Config) when is_list(Config) ->
"apple"]}}]},2},
S1 = {#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}},
Any1 = #any{typecode=TC1,value=S1},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,Any1),
- ?line {Any1, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,Any1),
+ {Any1, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B1, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: TypeCode
%%-----------------------------------------------------------------
-typecode_type(doc) -> [];
-typecode_type(suite) -> [];
typecode_type(Config) when is_list(Config) ->
T = 'tk_TypeCode',
TC = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
@@ -412,8 +388,8 @@ typecode_type(Config) when is_list(Config) ->
{"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
"Module_Enum1", ["orange", "banana",
"apple"]}}]}, 10},
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,TC),
- ?line {TC, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,TC),
+ {TC, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B, 0, big),
TC1 = {'tk_union', "IDL:Module/Union2:1.0", "Union2",
{'tk_enum', "IDL:Module/Enum:1.0",
"Module_Enum", ["horse", "pig", "cow"]}, 2,
@@ -434,15 +410,13 @@ typecode_type(Config) when is_list(Config) ->
"Module_Enum1",
["orange", "banana",
"apple"]}}]}}]},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, TC1),
- ?line {TC1, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, TC1),
+ {TC1, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B1, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: TypeCode
%%-----------------------------------------------------------------
-alias_type(doc) -> [];
-alias_type(suite) -> [];
alias_type(Config) when is_list(Config) ->
T = {'tk_alias', "IDL:Module/Alias:1.0", "Alias",
{'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
@@ -452,8 +426,8 @@ alias_type(Config) when is_list(Config) ->
{"octet", 'tk_octet'}]}},
S = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000],
e=cow, o=$X},
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,S),
- ?line {S, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,S),
+ {S, <<>>, _} = cdr_decode:dec_type(T, {1, 0}, B, 0, big),
T1 = {'tk_alias', "IDL:Module/Alias1:1.0", "Alias1",
{'tk_sequence', {'tk_union', "IDL:Module/Union:1.0", "Union",
{'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
@@ -464,15 +438,13 @@ alias_type(Config) when is_list(Config) ->
"Module_Enum1", ["orange", "banana",
"apple"]}}]},0}},
S1 = [#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}],
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 0}, B1, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: exception
%%-----------------------------------------------------------------
-exception_type(doc) -> [];
-exception_type(suite) -> [];
exception_type(Config) when is_list(Config) ->
system_exceptions(),
user_exceptions(),
@@ -481,43 +453,43 @@ exception_type(Config) when is_list(Config) ->
system_exceptions() ->
E = #'UNKNOWN'{completion_status=?COMPLETED_YES},
{system_exception, T, E} = orber_exceptions:get_def(E),
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,E),
- ?line {E, _} = cdr_decode:dec_system_exception({1, 0}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T,E),
+ {E, _} = cdr_decode:dec_system_exception({1, 0}, B, 0, big),
E1 = #'INV_OBJREF'{completion_status=?COMPLETED_NO},
{system_exception, T1, E1} = orber_exceptions:get_def(E1),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1,E1),
- ?line {E1, _} = cdr_decode:dec_system_exception({1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1,E1),
+ {E1, _} = cdr_decode:dec_system_exception({1, 0}, B1, 0, big),
E2 = #'BAD_OPERATION'{completion_status=?COMPLETED_NO},
{system_exception, T2, E2} = orber_exceptions:get_def(E2),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T2,E2),
- ?line {E2, _} = cdr_decode:dec_system_exception({1, 0}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T2,E2),
+ {E2, _} = cdr_decode:dec_system_exception({1, 0}, B2, 0, big),
E3 = #'INTF_REPOS'{completion_status=?COMPLETED_MAYBE},
{system_exception, T3, E3} = orber_exceptions:get_def(E3),
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T3,E3),
- ?line {E3, _} = cdr_decode:dec_system_exception({1, 0}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T3,E3),
+ {E3, _} = cdr_decode:dec_system_exception({1, 0}, B3, 0, big),
ok.
user_exceptions() ->
E = #'Module_Except1'{rest_of_name=["I","am","testing","exceptions"], why="Error"},
{user_exception, T, E} = orber_exceptions:get_def(E),
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, E),
- ?line {E, _} = cdr_decode:dec_user_exception({1, 0}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T, E),
+ {E, _} = cdr_decode:dec_user_exception({1, 0}, B, 0, big),
E1 = #'Module_Except2'{e=banana,
s=#'Module_Struct2'{long_sequence=[12,-4040,
1234567898],
e=horse,
o=$a}},
{user_exception, T1, E1} = orber_exceptions:get_def(E1),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1, E1),
- ?line {E1, _} = cdr_decode:dec_user_exception({1, 0}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T1, E1),
+ {E1, _} = cdr_decode:dec_user_exception({1, 0}, B1, 0, big),
E2 = #'Module_Except3'{u=#'Module_Union1'{label=pig,value=["high","and","low"]},s=1313, o=objref(0)},
{user_exception, T2, E2} = orber_exceptions:get_def(E2),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T2, E2),
- ?line {E2, _} = cdr_decode:dec_user_exception({1, 0}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T2, E2),
+ {E2, _} = cdr_decode:dec_user_exception({1, 0}, B2, 0, big),
E3 = #'Module_Except4'{},
{user_exception, T3, E3} = orber_exceptions:get_def(E3),
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T3, E3),
- ?line {E3, _} = cdr_decode:dec_user_exception({1, 0}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 0}}, T3, E3),
+ {E3, _} = cdr_decode:dec_user_exception({1, 0}, B3, 0, big),
ok.
%%-----------------------------------------------------------------
@@ -525,7 +497,6 @@ user_exceptions() ->
%% Description: Precondition the stack must be started so the
%% objectkey is valid.
%%-----------------------------------------------------------------
-%request(suite) -> [];
%request(_) ->
% exit(not_implemented).
@@ -533,19 +504,17 @@ user_exceptions() ->
%% Test Case: reply encoding test
%% Description:
%%-----------------------------------------------------------------
-reply(doc) -> ["Description", "more description"];
-reply(suite) -> [];
reply(Config) when is_list(Config) ->
R = #reply_header{service_context=[], request_id=1,
reply_status='no_exception'},
- ?line B = cdr_encode:enc_reply(
+ B = cdr_encode:enc_reply(
#giop_env{version = {1, 0}, request_id = 1,
reply_status = 'no_exception',
tc = {'tk_long', [], [{'tk_sequence',
{'tk_string', 0}, 0}]},
result = 1200, parameters = [["foo","Bar"]],
ctx = []}),
- ?line {R, 1200, [["foo","Bar"]]} =
+ {R, 1200, [["foo","Bar"]]} =
cdr_decode:dec_message({'tk_long', [], [{'tk_sequence', {'tk_string', 0},0}]},
B),
ok.
@@ -554,21 +523,17 @@ reply(Config) when is_list(Config) ->
%% Test Case: cancel_request encoding test
%% Description:
%%-----------------------------------------------------------------
-cancel_request(doc) -> ["Description", "more description"];
-cancel_request(suite) -> [];
cancel_request(Config) when is_list(Config) ->
R = #cancel_request_header{request_id=1},
- ?line B = cdr_encode:enc_cancel_request(#giop_env{version = {1, 0},
+ B = cdr_encode:enc_cancel_request(#giop_env{version = {1, 0},
request_id = 1}),
- ?line R = cdr_decode:dec_message([], B),
+ R = cdr_decode:dec_message([], B),
ok.
%%-----------------------------------------------------------------
%% Test Case: locate_request encoding test
%% Description:
%%-----------------------------------------------------------------
-locate_request(doc) -> ["Description", "more description"];
-locate_request(suite) -> [];
locate_request(Config) when is_list(Config) ->
io:format("Function not imlpemented yet"),
exit(not_implemented).
@@ -577,8 +542,6 @@ locate_request(Config) when is_list(Config) ->
%% Test Case: locate_reply encoding test
%% Description:
%%-----------------------------------------------------------------
-locate_reply(doc) -> ["Description", "more description"];
-locate_reply(suite) -> [];
locate_reply(Config) when is_list(Config) ->
io:format("Function not imlpemented yet"),
exit(not_implemented).
@@ -587,22 +550,18 @@ locate_reply(Config) when is_list(Config) ->
%% Test Case: close_connection encoding test
%% Description:
%%-----------------------------------------------------------------
-close_connection(doc) -> ["Description", "more description"];
-close_connection(suite) -> [];
close_connection(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_close_connection(#giop_env{version = {1, 0}}),
- ?line 'close_connection' = cdr_decode:dec_message([], B),
+ B = cdr_encode:enc_close_connection(#giop_env{version = {1, 0}}),
+ 'close_connection' = cdr_decode:dec_message([], B),
ok.
%%-----------------------------------------------------------------
%% Test Case: message_error encoding test
%% Description:
%%-----------------------------------------------------------------
-message_error(doc) -> ["Description", "more description"];
-message_error(suite) -> [];
message_error(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_message_error(#giop_env{version = {1, 0}}),
- ?line 'message_error' = cdr_decode:dec_message([], B),
+ B = cdr_encode:enc_message_error(#giop_env{version = {1, 0}}),
+ 'message_error' = cdr_decode:dec_message([], B),
ok.
diff --git a/lib/orber/test/cdrcoding_11_SUITE.erl b/lib/orber/test/cdrcoding_11_SUITE.erl
index 7513888449..ff5d2852d6 100644
--- a/lib/orber/test/cdrcoding_11_SUITE.erl
+++ b/lib/orber/test/cdrcoding_11_SUITE.erl
@@ -32,7 +32,7 @@
-include_lib("orber/include/corba.hrl").
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(5)).
+-define(default_timeout, test_server:minutes(5)).
%%-----------------------------------------------------------------
%% External exports
@@ -80,14 +80,14 @@ cases() ->
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -126,48 +126,39 @@ end_per_suite(Config) when is_list(Config) ->
% 'oe_orber_test':'oe_unregister'(),
% ok.
-do_register(doc) -> [];
-do_register(suite) -> [];
do_register(Config) when is_list(Config) ->
'oe_orber_test':'oe_register'(),
ok.
-do_unregister(doc) -> [];
-do_unregister(suite) -> [];
+
do_unregister(Config) when is_list(Config) ->
'oe_orber_test':'oe_unregister'(),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: null
%%-----------------------------------------------------------------
-null_type(doc) -> [];
-null_type(suite) -> [];
null_type(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_null', 'null'),
- ?line {'null', <<>>, _} = cdr_decode:dec_type('tk_null', {1, 1}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_null', 'null'),
+ {'null', <<>>, _} = cdr_decode:dec_type('tk_null', {1, 1}, B, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: void
%%-----------------------------------------------------------------
-void_type(doc) -> [];
-void_type(suite) -> [];
void_type(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_void', 'ok'),
- ?line {'ok', <<>>, _} = cdr_decode:dec_type('tk_void', {1, 1}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_void', 'ok'),
+ {'ok', <<>>, _} = cdr_decode:dec_type('tk_void', {1, 1}, B, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: principal
%%-----------------------------------------------------------------
-principal_type(doc) -> [];
-principal_type(suite) -> [];
principal_type(Config) when is_list(Config) ->
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_Principal', "principal"),
- ?line {"principal", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 1}, B0, 0, big),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_Principal', ""),
- ?line {"", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 1}, B1, 0, big),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_Principal', "principal"),
- ?line {"principal", <<>>, _} =
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_Principal', "principal"),
+ {"principal", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 1}, B0, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_Principal', ""),
+ {"", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 1}, B1, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, 'tk_Principal', "principal"),
+ {"principal", <<>>, _} =
cdr_decode:dec_type('tk_Principal', {1, 1}, B2, 0, big),
ok.
@@ -203,19 +194,17 @@ objref(2) ->
TP = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB},
#'IOP_IOR'{type_id="IDL:Module/Interface:1.0", profiles=[TP]}.
-objref_type(doc) -> [];
-objref_type(suite) -> [];
objref_type(Config) when is_list(Config) ->
T = {'tk_objref', "IDL:Module/Interface:1.0", "Interface"},
Objref0 = objref(0),
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, Objref0),
- ?line {Objref0, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, Objref0),
+ {Objref0, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B0, 0, big),
Objref1 = objref(1),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, Objref1),
- ?line {Objref1, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, Objref1),
+ {Objref1, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B1, 0, big),
Objref2 = objref(2),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, Objref2),
- ?line {Objref2, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, Objref2),
+ {Objref2, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B2, 0, big),
ok.
@@ -223,49 +212,45 @@ objref_type(Config) when is_list(Config) ->
%%-----------------------------------------------------------------
%% Encode/decode test of type: struct
%%-----------------------------------------------------------------
-struct_type(doc) -> [];
-struct_type(suite) -> [];
struct_type(Config) when is_list(Config) ->
T0 = {'tk_struct',"IDL:Module/Struct0:1.0", "Module_Struct0",
[{"long", 'tk_long'}, {"short", 'tk_short'}, {"character", 'tk_char'}]},
S0 = #'Module_Struct0'{l=-4711, s=17, c=$a},
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B0, 0, big),
T1 = {'tk_struct', "IDL:Module/Struct1:1.0", "Module_Struct1",
[{"string", {'tk_string', 0}}, {"ushort", 'tk_ushort'}, {"ulong", 'tk_ulong'}]},
S1 = #'Module_Struct1'{s="Hi !!!!", us=17, ul=4711},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B1, 0, big),
T2 = {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
[{"long_sequence", {'tk_sequence', 'tk_long', 0}},
{"enum", {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}},
{"octet", 'tk_octet'}]},
S2 = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000], e=cow, o=$X},
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B2, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: union
%%-----------------------------------------------------------------
-union_type(doc) -> [];
-union_type(suite) -> [];
union_type(Config) when is_list(Config) ->
T0 = {'tk_union', "IDL:Module/Union:1.0", "Union", 'tk_short', 2,
[{0, "First", 'tk_short'},
{1, "Second", {'tk_string', 0}},
{2, "Third", 'tk_char'}]},
S0 = #'Module_Union'{label=1, value="Foo Bar !"},
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B0, 0, big),
S1 = #'Module_Union'{label=0, value=-17},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B1, 0, big),
S2 = #'Module_Union'{label=2, value=$X},
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B2, 0, big),
T1 = {'tk_union', "IDL:Module/Union1:1.0", "Union1",
{'tk_enum', "IDL:Module/Enum:1.0",
"Module_Enum", ["horse", "pig", "cow"]}, "pig",
@@ -274,14 +259,14 @@ union_type(Config) when is_list(Config) ->
{"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
"Module_Enum1", ["orange", "banana", "apple"]}}]},
S3 = #'Module_Union1'{label=pig, value=["Foo", "Bar", "!"]},
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S3),
- ?line {S3, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S3),
+ {S3, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B3, 0, big),
S4 = #'Module_Union1'{label=cow, value=apple},
- ?line B4 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S4),
- ?line {S4, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B4, 0, big),
+ B4 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S4),
+ {S4, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B4, 0, big),
S5 = #'Module_Union1'{label=horse, value=17},
- ?line B5 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S5),
- ?line {S5, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B5, 0, big),
+ B5 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S5),
+ {S5, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B5, 0, big),
T2 = {'tk_union', "IDL:Module/Union2:1.0", "Union2",
{'tk_enum', "IDL:Module/Enum:1.0",
"Module_Enum", ["horse", "pig", "cow"]}, "pig",
@@ -303,54 +288,50 @@ union_type(Config) when is_list(Config) ->
["orange", "banana",
"apple"]}}]}}]},
S6 = #'Module_Union2'{label=pig, value=#'Module_Union'{label=0, value=-17}},
- ?line B6 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S6),
- ?line {S6, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B6, 0, big),
+ B6 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S6),
+ {S6, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B6, 0, big),
S7 = #'Module_Union2'{label=cow, value=#'Module_Union1'{label=pig,
value=["Foo", "Bar", "!"]}},
- ?line B7 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S7),
- ?line {S7, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B7, 0, big),
+ B7 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S7),
+ {S7, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B7, 0, big),
S8 = #'Module_Union2'{label=horse, value={-17, 1234567890, -987654321}},
- ?line B8 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S8),
- ?line {S8, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B8, 0, big),
+ B8 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S8),
+ {S8, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B8, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: string
%%-----------------------------------------------------------------
-string_type(doc) -> [];
-string_type(suite) -> [];
string_type(Config) when is_list(Config) ->
S0 = "Foo Bar ???",
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B0, 0, big),
S1 = "Yes, Foo Bar !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! more than 5000 characters",
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B1, 0, big),
S2 = "",
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B2, 0, big),
S3 = "\0",
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S3),
- ?line {S3, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S3),
+ {S3, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B3, 0, big),
S4 = "~n",
- ?line B4 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S4),
- ?line {S4, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B4, 0, big),
+ B4 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, {'tk_string', 0}, S4),
+ {S4, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 1}, B4, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: array
%%-----------------------------------------------------------------
-array_type(doc) -> [];
-array_type(suite) -> [];
array_type(Config) when is_list(Config) ->
T0 = {'tk_array', 'tk_long', 5},
S0 = {-100, 0, 30000, -900100900, 123456789},
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T0, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 1}, B0, 0, big),
T1 = {'tk_array', {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}, 2},
S1 = {pig, cow},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B1, 0, big),
T2 = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
{'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}, "pig",
[{"horse", "First", 'tk_ushort'},
@@ -358,18 +339,16 @@ array_type(Config) when is_list(Config) ->
{"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
"Module_Enum1", ["orange", "banana", "apple"]}}]}, 2},
S2 = {#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}},
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 1}, B2, 0, big),
T3 = {'tk_array', {'tk_objref', "IDL:Module/Interface:1.0", "Interface"}, 3},
S3 = {objref(0), objref(1), objref(2)},
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T3, S3),
- ?line {S3, <<>>, _} = cdr_decode:dec_type(T3, {1, 1}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T3, S3),
+ {S3, <<>>, _} = cdr_decode:dec_type(T3, {1, 1}, B3, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: TypeCode
%%-----------------------------------------------------------------
-any_type(doc) -> [];
-any_type(suite) -> [];
any_type(Config) when is_list(Config) ->
T = 'tk_any',
TC = {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
@@ -380,8 +359,8 @@ any_type(Config) when is_list(Config) ->
S = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000],
e=cow, o=$X},
Any = #any{typecode=TC,value=S},
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,Any),
- ?line {Any, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,Any),
+ {Any, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B, 0, big),
TC1 = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
{'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
["horse", "pig", "cow"]}, 1,
@@ -392,16 +371,14 @@ any_type(Config) when is_list(Config) ->
"apple"]}}]},2},
S1 = {#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}},
Any1 = #any{typecode=TC1,value=S1},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,Any1),
- ?line {Any1, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,Any1),
+ {Any1, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B1, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: TypeCode
%%-----------------------------------------------------------------
-typecode_type(doc) -> [];
-typecode_type(suite) -> [];
typecode_type(Config) when is_list(Config) ->
T = 'tk_TypeCode',
TC = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
@@ -412,8 +389,8 @@ typecode_type(Config) when is_list(Config) ->
{"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
"Module_Enum1", ["orange", "banana",
"apple"]}}]}, 10},
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,TC),
- ?line {TC, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,TC),
+ {TC, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B, 0, big),
TC1 = {'tk_union', "IDL:Module/Union2:1.0", "Union2",
{'tk_enum', "IDL:Module/Enum:1.0",
"Module_Enum", ["horse", "pig", "cow"]}, 2,
@@ -434,15 +411,13 @@ typecode_type(Config) when is_list(Config) ->
"Module_Enum1",
["orange", "banana",
"apple"]}}]}}]},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, TC1),
- ?line {TC1, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, TC1),
+ {TC1, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B1, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: TypeCode
%%-----------------------------------------------------------------
-alias_type(doc) -> [];
-alias_type(suite) -> [];
alias_type(Config) when is_list(Config) ->
T = {'tk_alias', "IDL:Module/Alias:1.0", "Alias",
{'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
@@ -452,8 +427,8 @@ alias_type(Config) when is_list(Config) ->
{"octet", 'tk_octet'}]}},
S = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000],
e=cow, o=$X},
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,S),
- ?line {S, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,S),
+ {S, <<>>, _} = cdr_decode:dec_type(T, {1, 1}, B, 0, big),
T1 = {'tk_alias', "IDL:Module/Alias1:1.0", "Alias1",
{'tk_sequence', {'tk_union', "IDL:Module/Union:1.0", "Union",
{'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
@@ -464,15 +439,13 @@ alias_type(Config) when is_list(Config) ->
"Module_Enum1", ["orange", "banana",
"apple"]}}]},0}},
S1 = [#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}],
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 1}, B1, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: exception
%%-----------------------------------------------------------------
-exception_type(doc) -> [];
-exception_type(suite) -> [];
exception_type(Config) when is_list(Config) ->
system_exceptions(),
user_exceptions(),
@@ -481,43 +454,43 @@ exception_type(Config) when is_list(Config) ->
system_exceptions() ->
E = #'UNKNOWN'{completion_status=?COMPLETED_YES},
{system_exception, T, E} = orber_exceptions:get_def(E),
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,E),
- ?line {E, _} = cdr_decode:dec_system_exception({1, 1}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T,E),
+ {E, _} = cdr_decode:dec_system_exception({1, 1}, B, 0, big),
E1 = #'INV_OBJREF'{completion_status=?COMPLETED_NO},
{system_exception, T1, E1} = orber_exceptions:get_def(E1),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1,E1),
- ?line {E1, _} = cdr_decode:dec_system_exception({1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1,E1),
+ {E1, _} = cdr_decode:dec_system_exception({1, 1}, B1, 0, big),
E2 = #'BAD_OPERATION'{completion_status=?COMPLETED_NO},
{system_exception, T2, E2} = orber_exceptions:get_def(E2),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2,E2),
- ?line {E2, _} = cdr_decode:dec_system_exception({1, 1}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2,E2),
+ {E2, _} = cdr_decode:dec_system_exception({1, 1}, B2, 0, big),
E3 = #'INTF_REPOS'{completion_status=?COMPLETED_MAYBE},
{system_exception, T3, E3} = orber_exceptions:get_def(E3),
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T3,E3),
- ?line {E3, _} = cdr_decode:dec_system_exception({1, 1}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T3,E3),
+ {E3, _} = cdr_decode:dec_system_exception({1, 1}, B3, 0, big),
ok.
user_exceptions() ->
E = #'Module_Except1'{rest_of_name=["I","am","testing","exceptions"], why="Error"},
{user_exception, T, E} = orber_exceptions:get_def(E),
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, E),
- ?line {E, _} = cdr_decode:dec_user_exception({1, 1}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T, E),
+ {E, _} = cdr_decode:dec_user_exception({1, 1}, B, 0, big),
E1 = #'Module_Except2'{e=banana,
s=#'Module_Struct2'{long_sequence=[12,-4040,
1234567898],
e=horse,
o=$a}},
{user_exception, T1, E1} = orber_exceptions:get_def(E1),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, E1),
- ?line {E1, _} = cdr_decode:dec_user_exception({1, 1}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T1, E1),
+ {E1, _} = cdr_decode:dec_user_exception({1, 1}, B1, 0, big),
E2 = #'Module_Except3'{u=#'Module_Union1'{label=pig,value=["high","and","low"]},s=1313, o=objref(0)},
{user_exception, T2, E2} = orber_exceptions:get_def(E2),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, E2),
- ?line {E2, _} = cdr_decode:dec_user_exception({1, 1}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T2, E2),
+ {E2, _} = cdr_decode:dec_user_exception({1, 1}, B2, 0, big),
E3 = #'Module_Except4'{},
{user_exception, T3, E3} = orber_exceptions:get_def(E3),
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T3, E3),
- ?line {E3, _} = cdr_decode:dec_user_exception({1, 1}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 1}}, T3, E3),
+ {E3, _} = cdr_decode:dec_user_exception({1, 1}, B3, 0, big),
ok.
%%-----------------------------------------------------------------
@@ -525,7 +498,6 @@ user_exceptions() ->
%% Description: Precondition the stack must be started so the
%% objectkey is valid.
%%-----------------------------------------------------------------
-%request(suite) -> [];
%request(_) ->
% exit(not_implemented).
@@ -533,18 +505,16 @@ user_exceptions() ->
%% Test Case: reply encoding test
%% Description:
%%-----------------------------------------------------------------
-reply(doc) -> ["Description", "more description"];
-reply(suite) -> [];
reply(Config) when is_list(Config) ->
R = #reply_header{service_context=[], request_id=1,
reply_status='no_exception'},
- ?line B = cdr_encode:enc_reply(#giop_env{version = {1, 1}, request_id = 1,
+ B = cdr_encode:enc_reply(#giop_env{version = {1, 1}, request_id = 1,
reply_status = 'no_exception',
tc = {'tk_long', [], [{'tk_sequence',
{'tk_string', 0}, 0}]},
result = 1200, parameters = [["foo","Bar"]],
ctx = []}),
- ?line {R, 1200, [["foo","Bar"]]} =
+ {R, 1200, [["foo","Bar"]]} =
cdr_decode:dec_message({'tk_long', [], [{'tk_sequence', {'tk_string', 0},0}]},
B),
ok.
@@ -553,21 +523,17 @@ reply(Config) when is_list(Config) ->
%% Test Case: cancel_request encoding test
%% Description:
%%-----------------------------------------------------------------
-cancel_request(doc) -> ["Description", "more description"];
-cancel_request(suite) -> [];
cancel_request(Config) when is_list(Config) ->
R = #cancel_request_header{request_id=1},
- ?line B = cdr_encode:enc_cancel_request(#giop_env{version = {1, 1},
+ B = cdr_encode:enc_cancel_request(#giop_env{version = {1, 1},
request_id = 1}),
- ?line R = cdr_decode:dec_message([], B),
+ R = cdr_decode:dec_message([], B),
ok.
%%-----------------------------------------------------------------
%% Test Case: locate_request encoding test
%% Description:
%%-----------------------------------------------------------------
-locate_request(doc) -> ["Description", "more description"];
-locate_request(suite) -> [];
locate_request(Config) when is_list(Config) ->
io:format("Function not imlpemented yet"),
exit(not_implemented).
@@ -576,8 +542,6 @@ locate_request(Config) when is_list(Config) ->
%% Test Case: locate_reply encoding test
%% Description:
%%-----------------------------------------------------------------
-locate_reply(doc) -> ["Description", "more description"];
-locate_reply(suite) -> [];
locate_reply(Config) when is_list(Config) ->
io:format("Function not imlpemented yet"),
exit(not_implemented).
@@ -586,22 +550,18 @@ locate_reply(Config) when is_list(Config) ->
%% Test Case: close_connection encoding test
%% Description:
%%-----------------------------------------------------------------
-close_connection(doc) -> ["Description", "more description"];
-close_connection(suite) -> [];
close_connection(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_close_connection(#giop_env{version = {1, 1}}),
- ?line 'close_connection' = cdr_decode:dec_message([], B),
+ B = cdr_encode:enc_close_connection(#giop_env{version = {1, 1}}),
+ 'close_connection' = cdr_decode:dec_message([], B),
ok.
%%-----------------------------------------------------------------
%% Test Case: message_error encoding test
%% Description:
%%-----------------------------------------------------------------
-message_error(doc) -> ["Description", "more description"];
-message_error(suite) -> [];
message_error(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_message_error(#giop_env{version = {1, 1}}),
- ?line 'message_error' = cdr_decode:dec_message([], B),
+ B = cdr_encode:enc_message_error(#giop_env{version = {1, 1}}),
+ 'message_error' = cdr_decode:dec_message([], B),
ok.
diff --git a/lib/orber/test/cdrcoding_12_SUITE.erl b/lib/orber/test/cdrcoding_12_SUITE.erl
index 1c04dc0711..13178b7774 100644
--- a/lib/orber/test/cdrcoding_12_SUITE.erl
+++ b/lib/orber/test/cdrcoding_12_SUITE.erl
@@ -33,7 +33,7 @@
-include_lib("orber/include/corba.hrl").
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(5)).
+-define(default_timeout, test_server:minutes(5)).
%%-----------------------------------------------------------------
%% External exports
@@ -81,14 +81,14 @@ cases() ->
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -111,48 +111,39 @@ end_per_suite(Config) when is_list(Config) ->
%% tested in the cdrlib SUITE.
%%-----------------------------------------------------------------
-do_register(doc) -> [];
-do_register(suite) -> [];
do_register(Config) when is_list(Config) ->
'oe_orber_test':'oe_register'(),
ok.
-do_unregister(doc) -> [];
-do_unregister(suite) -> [];
+
do_unregister(Config) when is_list(Config) ->
'oe_orber_test':'oe_unregister'(),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: null
%%-----------------------------------------------------------------
-null_type(doc) -> [];
-null_type(suite) -> [];
null_type(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_null', 'null'),
- ?line {'null', <<>>, _} = cdr_decode:dec_type('tk_null', {1, 2}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_null', 'null'),
+ {'null', <<>>, _} = cdr_decode:dec_type('tk_null', {1, 2}, B, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: void
%%-----------------------------------------------------------------
-void_type(doc) -> [];
-void_type(suite) -> [];
void_type(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_void', 'ok'),
- ?line {'ok', <<>>, _} = cdr_decode:dec_type('tk_void', {1, 2}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_void', 'ok'),
+ {'ok', <<>>, _} = cdr_decode:dec_type('tk_void', {1, 2}, B, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: principal
%%-----------------------------------------------------------------
-principal_type(doc) -> [];
-principal_type(suite) -> [];
principal_type(Config) when is_list(Config) ->
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_Principal', "principal"),
- ?line {"principal", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 2}, B0, 0, big),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_Principal', ""),
- ?line {"", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 2}, B1, 0, big),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_Principal', "principal"),
- ?line {"principal", <<>>, _} =
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_Principal', "principal"),
+ {"principal", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 2}, B0, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_Principal', ""),
+ {"", <<>>, _} = cdr_decode:dec_type('tk_Principal', {1, 2}, B1, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, 'tk_Principal', "principal"),
+ {"principal", <<>>, _} =
cdr_decode:dec_type('tk_Principal', {1, 2}, B2, 0, big),
ok.
@@ -188,19 +179,17 @@ objref(2) ->
TP = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB},
#'IOP_IOR'{type_id="IDL:Module/Interface:1.0", profiles=[TP]}.
-objref_type(doc) -> [];
-objref_type(suite) -> [];
objref_type(Config) when is_list(Config) ->
T = {'tk_objref', "IDL:Module/Interface:1.0", "Interface"},
Objref0 = objref(0),
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, Objref0),
- ?line {Objref0, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, Objref0),
+ {Objref0, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B0, 0, big),
Objref1 = objref(1),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, Objref1),
- ?line {Objref1, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, Objref1),
+ {Objref1, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B1, 0, big),
Objref2 = objref(2),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, Objref2),
- ?line {Objref2, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, Objref2),
+ {Objref2, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B2, 0, big),
ok.
@@ -208,49 +197,45 @@ objref_type(Config) when is_list(Config) ->
%%-----------------------------------------------------------------
%% Encode/decode test of type: struct
%%-----------------------------------------------------------------
-struct_type(doc) -> [];
-struct_type(suite) -> [];
struct_type(Config) when is_list(Config) ->
T0 = {'tk_struct',"IDL:Module/Struct0:1.0", "Module_Struct0",
[{"long", 'tk_long'}, {"short", 'tk_short'}, {"character", 'tk_char'}]},
S0 = #'Module_Struct0'{l=-4711, s=17, c=$a},
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B0, 0, big),
T1 = {'tk_struct', "IDL:Module/Struct1:1.0", "Module_Struct1",
[{"string", {'tk_string', 0}}, {"ushort", 'tk_ushort'}, {"ulong", 'tk_ulong'}]},
S1 = #'Module_Struct1'{s="Hi !!!!", us=17, ul=4711},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B1, 0, big),
T2 = {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
[{"long_sequence", {'tk_sequence', 'tk_long', 0}},
{"enum", {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}},
{"octet", 'tk_octet'}]},
S2 = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000], e=cow, o=$X},
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B2, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: union
%%-----------------------------------------------------------------
-union_type(doc) -> [];
-union_type(suite) -> [];
union_type(Config) when is_list(Config) ->
T0 = {'tk_union', "IDL:Module/Union:1.0", "Union", 'tk_short', 2,
[{0, "First", 'tk_short'},
{1, "Second", {'tk_string', 0}},
{2, "Third", 'tk_char'}]},
S0 = #'Module_Union'{label=1, value="Foo Bar !"},
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B0, 0, big),
S1 = #'Module_Union'{label=0, value=-17},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B1, 0, big),
S2 = #'Module_Union'{label=2, value=$X},
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B2, 0, big),
T1 = {'tk_union', "IDL:Module/Union1:1.0", "Union1",
{'tk_enum', "IDL:Module/Enum:1.0",
"Module_Enum", ["horse", "pig", "cow"]}, "pig",
@@ -259,14 +244,14 @@ union_type(Config) when is_list(Config) ->
{"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
"Module_Enum1", ["orange", "banana", "apple"]}}]},
S3 = #'Module_Union1'{label=pig, value=["Foo", "Bar", "!"]},
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S3),
- ?line {S3, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S3),
+ {S3, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B3, 0, big),
S4 = #'Module_Union1'{label=cow, value=apple},
- ?line B4 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S4),
- ?line {S4, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B4, 0, big),
+ B4 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S4),
+ {S4, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B4, 0, big),
S5 = #'Module_Union1'{label=horse, value=17},
- ?line B5 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S5),
- ?line {S5, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B5, 0, big),
+ B5 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S5),
+ {S5, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B5, 0, big),
T2 = {'tk_union', "IDL:Module/Union2:1.0", "Union2",
{'tk_enum', "IDL:Module/Enum:1.0",
"Module_Enum", ["horse", "pig", "cow"]}, "pig",
@@ -288,54 +273,50 @@ union_type(Config) when is_list(Config) ->
["orange", "banana",
"apple"]}}]}}]},
S6 = #'Module_Union2'{label=pig, value=#'Module_Union'{label=0, value=-17}},
- ?line B6 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S6),
- ?line {S6, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B6, 0, big),
+ B6 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S6),
+ {S6, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B6, 0, big),
S7 = #'Module_Union2'{label=cow, value=#'Module_Union1'{label=pig,
value=["Foo", "Bar", "!"]}},
- ?line B7 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S7),
- ?line {S7, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B7, 0, big),
+ B7 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S7),
+ {S7, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B7, 0, big),
S8 = #'Module_Union2'{label=horse, value={-17, 1234567890, -987654321}},
- ?line B8 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S8),
- ?line {S8, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B8, 0, big),
+ B8 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S8),
+ {S8, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B8, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: string
%%-----------------------------------------------------------------
-string_type(doc) -> [];
-string_type(suite) -> [];
string_type(Config) when is_list(Config) ->
S0 = "Foo Bar ???",
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B0, 0, big),
S1 = "Yes, Foo Bar !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! more than 5000 characters",
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B1, 0, big),
S2 = "",
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B2, 0, big),
S3 = "\0",
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S3),
- ?line {S3, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S3),
+ {S3, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B3, 0, big),
S4 = "~n",
- ?line B4 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S4),
- ?line {S4, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B4, 0, big),
+ B4 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, {'tk_string', 0}, S4),
+ {S4, <<>>, _} = cdr_decode:dec_type({'tk_string', 0}, {1, 2}, B4, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: array
%%-----------------------------------------------------------------
-array_type(doc) -> [];
-array_type(suite) -> [];
array_type(Config) when is_list(Config) ->
T0 = {'tk_array', 'tk_long', 5},
S0 = {-100, 0, 30000, -900100900, 123456789},
- ?line B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S0),
- ?line {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B0, 0, big),
+ B0 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T0, S0),
+ {S0, <<>>, _} = cdr_decode:dec_type(T0, {1, 2}, B0, 0, big),
T1 = {'tk_array', {'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}, 2},
S1 = {pig, cow},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B1, 0, big),
T2 = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
{'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum", ["horse", "pig", "cow"]}, "pig",
[{"horse", "First", 'tk_ushort'},
@@ -343,18 +324,16 @@ array_type(Config) when is_list(Config) ->
{"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
"Module_Enum1", ["orange", "banana", "apple"]}}]}, 2},
S2 = {#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}},
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S2),
- ?line {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, S2),
+ {S2, <<>>, _} = cdr_decode:dec_type(T2, {1, 2}, B2, 0, big),
T3 = {'tk_array', {'tk_objref', "IDL:Module/Interface:1.0", "Interface"}, 3},
S3 = {objref(0), objref(1), objref(2)},
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T3, S3),
- ?line {S3, <<>>, _} = cdr_decode:dec_type(T3, {1, 2}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T3, S3),
+ {S3, <<>>, _} = cdr_decode:dec_type(T3, {1, 2}, B3, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: TypeCode
%%-----------------------------------------------------------------
-any_type(doc) -> [];
-any_type(suite) -> [];
any_type(Config) when is_list(Config) ->
T = 'tk_any',
TC = {'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
@@ -365,8 +344,8 @@ any_type(Config) when is_list(Config) ->
S = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000],
e=cow, o=$X},
Any = #any{typecode=TC,value=S},
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,Any),
- ?line {Any, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,Any),
+ {Any, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B, 0, big),
TC1 = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
{'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
["horse", "pig", "cow"]}, 1,
@@ -377,16 +356,14 @@ any_type(Config) when is_list(Config) ->
"apple"]}}]},2},
S1 = {#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}},
Any1 = #any{typecode=TC1,value=S1},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,Any1),
- ?line {Any1, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,Any1),
+ {Any1, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B1, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: TypeCode
%%-----------------------------------------------------------------
-typecode_type(doc) -> [];
-typecode_type(suite) -> [];
typecode_type(Config) when is_list(Config) ->
T = 'tk_TypeCode',
TC = {'tk_array', {'tk_union', "IDL:Module/Union:1.0", "Union",
@@ -397,8 +374,8 @@ typecode_type(Config) when is_list(Config) ->
{"cow", "Third", {'tk_enum', "IDL:Module/Enum1:1.0",
"Module_Enum1", ["orange", "banana",
"apple"]}}]}, 10},
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,TC),
- ?line {TC, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,TC),
+ {TC, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B, 0, big),
TC1 = {'tk_union', "IDL:Module/Union2:1.0", "Union2",
{'tk_enum', "IDL:Module/Enum:1.0",
"Module_Enum", ["horse", "pig", "cow"]}, 2,
@@ -419,15 +396,13 @@ typecode_type(Config) when is_list(Config) ->
"Module_Enum1",
["orange", "banana",
"apple"]}}]}}]},
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, TC1),
- ?line {TC1, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, TC1),
+ {TC1, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B1, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: TypeCode
%%-----------------------------------------------------------------
-alias_type(doc) -> [];
-alias_type(suite) -> [];
alias_type(Config) when is_list(Config) ->
T = {'tk_alias', "IDL:Module/Alias:1.0", "Alias",
{'tk_struct', "IDL:Module/Struct2:1.0", "Module_Struct2",
@@ -437,8 +412,8 @@ alias_type(Config) when is_list(Config) ->
{"octet", 'tk_octet'}]}},
S = #'Module_Struct2'{long_sequence=[4711, 350000, 0, -3030, -600000],
e=cow, o=$X},
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,S),
- ?line {S, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,S),
+ {S, <<>>, _} = cdr_decode:dec_type(T, {1, 2}, B, 0, big),
T1 = {'tk_alias', "IDL:Module/Alias1:1.0", "Alias1",
{'tk_sequence', {'tk_union', "IDL:Module/Union:1.0", "Union",
{'tk_enum', "IDL:Module/Enum:1.0", "Module_Enum",
@@ -449,15 +424,13 @@ alias_type(Config) when is_list(Config) ->
"Module_Enum1", ["orange", "banana",
"apple"]}}]},0}},
S1 = [#'Module_Union'{label=cow, value=banana}, #'Module_Union'{label=pig, value=["This", "is", "a", "test", ""]}],
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S1),
- ?line {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, S1),
+ {S1, <<>>, _} = cdr_decode:dec_type(T1, {1, 2}, B1, 0, big),
ok.
%%-----------------------------------------------------------------
%% Encode/decode test of type: exception
%%-----------------------------------------------------------------
-exception_type(doc) -> [];
-exception_type(suite) -> [];
exception_type(Config) when is_list(Config) ->
system_exceptions(),
user_exceptions(),
@@ -466,43 +439,43 @@ exception_type(Config) when is_list(Config) ->
system_exceptions() ->
E = #'UNKNOWN'{completion_status=?COMPLETED_YES},
{system_exception, T, E} = orber_exceptions:get_def(E),
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,E),
- ?line {E, _} = cdr_decode:dec_system_exception({1, 2}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T,E),
+ {E, _} = cdr_decode:dec_system_exception({1, 2}, B, 0, big),
E1 = #'INV_OBJREF'{completion_status=?COMPLETED_NO},
{system_exception, T1, E1} = orber_exceptions:get_def(E1),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1,E1),
- ?line {E1, _} = cdr_decode:dec_system_exception({1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1,E1),
+ {E1, _} = cdr_decode:dec_system_exception({1, 2}, B1, 0, big),
E2 = #'BAD_OPERATION'{completion_status=?COMPLETED_NO},
{system_exception, T2, E2} = orber_exceptions:get_def(E2),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2,E2),
- ?line {E2, _} = cdr_decode:dec_system_exception({1, 2}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2,E2),
+ {E2, _} = cdr_decode:dec_system_exception({1, 2}, B2, 0, big),
E3 = #'INTF_REPOS'{completion_status=?COMPLETED_MAYBE},
{system_exception, T3, E3} = orber_exceptions:get_def(E3),
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T3,E3),
- ?line {E3, _} = cdr_decode:dec_system_exception({1, 2}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T3,E3),
+ {E3, _} = cdr_decode:dec_system_exception({1, 2}, B3, 0, big),
ok.
user_exceptions() ->
E = #'Module_Except1'{rest_of_name=["I","am","testing","exceptions"], why="Error"},
{user_exception, T, E} = orber_exceptions:get_def(E),
- ?line B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, E),
- ?line {E, _} = cdr_decode:dec_user_exception({1, 2}, B, 0, big),
+ B = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T, E),
+ {E, _} = cdr_decode:dec_user_exception({1, 2}, B, 0, big),
E1 = #'Module_Except2'{e=banana,
s=#'Module_Struct2'{long_sequence=[12,-4040,
1234567898],
e=horse,
o=$a}},
{user_exception, T1, E1} = orber_exceptions:get_def(E1),
- ?line B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, E1),
- ?line {E1, _} = cdr_decode:dec_user_exception({1, 2}, B1, 0, big),
+ B1 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T1, E1),
+ {E1, _} = cdr_decode:dec_user_exception({1, 2}, B1, 0, big),
E2 = #'Module_Except3'{u=#'Module_Union1'{label=pig,value=["high","and","low"]},s=1313, o=objref(0)},
{user_exception, T2, E2} = orber_exceptions:get_def(E2),
- ?line B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, E2),
- ?line {E2, _} = cdr_decode:dec_user_exception({1, 2}, B2, 0, big),
+ B2 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T2, E2),
+ {E2, _} = cdr_decode:dec_user_exception({1, 2}, B2, 0, big),
E3 = #'Module_Except4'{},
{user_exception, T3, E3} = orber_exceptions:get_def(E3),
- ?line B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T3, E3),
- ?line {E3, _} = cdr_decode:dec_user_exception({1, 2}, B3, 0, big),
+ B3 = cdr_encode:enc_type(#giop_env{version = {1, 2}}, T3, E3),
+ {E3, _} = cdr_decode:dec_user_exception({1, 2}, B3, 0, big),
ok.
%%-----------------------------------------------------------------
@@ -510,7 +483,6 @@ user_exceptions() ->
%% Description: Precondition the stack must be started so the
%% objectkey is valid.
%%-----------------------------------------------------------------
-%request(suite) -> [];
%request(_) ->
% exit(not_implemented).
@@ -518,12 +490,10 @@ user_exceptions() ->
%% Test Case: reply encoding test
%% Description:
%%-----------------------------------------------------------------
-reply(doc) -> ["Description", "more description"];
-reply(suite) -> [];
reply(Config) when is_list(Config) ->
R = #reply_header{service_context=[], request_id=1,
reply_status='no_exception'},
- ?line B = cdr_encode:enc_reply(#giop_env{version = {1, 2}, request_id = 1,
+ B = cdr_encode:enc_reply(#giop_env{version = {1, 2}, request_id = 1,
reply_status = 'no_exception',
tc = {'tk_long', [], [{'tk_sequence',
{'tk_string', 0}, 0}]},
@@ -531,7 +501,7 @@ reply(Config) when is_list(Config) ->
parameters = [["foo","Bar"]],
ctx = []}),
- ?line {R, 1200, [["foo","Bar"]]} =
+ {R, 1200, [["foo","Bar"]]} =
cdr_decode:dec_message({'tk_long', [], [{'tk_sequence', {'tk_string', 0},0}]},
B),
@@ -541,21 +511,17 @@ reply(Config) when is_list(Config) ->
%% Test Case: cancel_request encoding test
%% Description:
%%-----------------------------------------------------------------
-cancel_request(doc) -> ["Description", "more description"];
-cancel_request(suite) -> [];
cancel_request(Config) when is_list(Config) ->
R = #cancel_request_header{request_id=1},
- ?line B = cdr_encode:enc_cancel_request(#giop_env{version = {1, 2},
+ B = cdr_encode:enc_cancel_request(#giop_env{version = {1, 2},
request_id = 1}),
- ?line R = cdr_decode:dec_message([], B),
+ R = cdr_decode:dec_message([], B),
ok.
%%-----------------------------------------------------------------
%% Test Case: locate_request encoding test
%% Description:
%%-----------------------------------------------------------------
-locate_request(doc) -> ["Description", "more description"];
-locate_request(suite) -> [];
locate_request(Config) when is_list(Config) ->
io:format("Function not imlpemented yet"),
exit(not_implemented).
@@ -564,8 +530,6 @@ locate_request(Config) when is_list(Config) ->
%% Test Case: locate_reply encoding test
%% Description:
%%-----------------------------------------------------------------
-locate_reply(doc) -> ["Description", "more description"];
-locate_reply(suite) -> [];
locate_reply(Config) when is_list(Config) ->
io:format("Function not imlpemented yet"),
exit(not_implemented).
@@ -574,22 +538,18 @@ locate_reply(Config) when is_list(Config) ->
%% Test Case: close_connection encoding test
%% Description:
%%-----------------------------------------------------------------
-close_connection(doc) -> ["Description", "more description"];
-close_connection(suite) -> [];
close_connection(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_close_connection(#giop_env{version = {1, 2}}),
- ?line 'close_connection' = cdr_decode:dec_message([], B),
+ B = cdr_encode:enc_close_connection(#giop_env{version = {1, 2}}),
+ 'close_connection' = cdr_decode:dec_message([], B),
ok.
%%-----------------------------------------------------------------
%% Test Case: message_error encoding test
%% Description:
%%-----------------------------------------------------------------
-message_error(doc) -> ["Description", "more description"];
-message_error(suite) -> [];
message_error(Config) when is_list(Config) ->
- ?line B = cdr_encode:enc_message_error(#giop_env{version = {1, 2}}),
- ?line 'message_error' = cdr_decode:dec_message([], B),
+ B = cdr_encode:enc_message_error(#giop_env{version = {1, 2}}),
+ 'message_error' = cdr_decode:dec_message([], B),
ok.
diff --git a/lib/orber/test/cdrlib_SUITE.erl b/lib/orber/test/cdrlib_SUITE.erl
index e3482d11bd..93adc861c5 100644
--- a/lib/orber/test/cdrlib_SUITE.erl
+++ b/lib/orber/test/cdrlib_SUITE.erl
@@ -28,7 +28,7 @@
-include_lib("common_test/include/ct.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
%%-----------------------------------------------------------------
%% External exports
@@ -73,12 +73,12 @@ end_per_group(_GroupName, Config) ->
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -86,8 +86,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: short integer test
%% Description:
%%-----------------------------------------------------------------
-short(doc) -> ["Description", "more description"];
-short(suite) -> [];
short(_) ->
short_big_loop([-32768, -4040, -1, 0, 4040, 32767]),
short_little_loop([-32768, -4040, -1, 0, 4040, 32767]),
@@ -96,16 +94,16 @@ short(_) ->
short_big_loop([]) ->
ok;
short_big_loop([X |List]) ->
- ?line [CodedType] = cdrlib:enc_short(X, []),
- ?line {X, <<>>} = cdrlib:dec_short(big, CodedType),
+ [CodedType] = cdrlib:enc_short(X, []),
+ {X, <<>>} = cdrlib:dec_short(big, CodedType),
short_big_loop(List),
ok.
short_little_loop([]) ->
ok;
short_little_loop([X |List]) ->
- ?line CodedType = enc_short_little(X, []),
- ?line {X, <<>>} = cdrlib:dec_short(little, CodedType),
+ CodedType = enc_short_little(X, []),
+ {X, <<>>} = cdrlib:dec_short(little, CodedType),
short_little_loop(List),
ok.
@@ -113,16 +111,14 @@ enc_short_little(X, Message) ->
list_to_binary([(X) band 16#ff, ((X) bsr 8) band 16#ff | Message]).
bad_short() ->
- ?line {'EXCEPTION', _} = (catch cdrlib:enc_short('atom', [])),
- ?line [CodedType] = cdrlib:enc_char($a, []),
- ?line {'EXIT', _} = (catch cdrlib:dec_short(big, CodedType)),
+ {'EXCEPTION', _} = (catch cdrlib:enc_short('atom', [])),
+ [CodedType] = cdrlib:enc_char($a, []),
+ {'EXIT', _} = (catch cdrlib:dec_short(big, CodedType)),
ok.
%%-----------------------------------------------------------------
%% Test Case: unsigned short integer test
%% Description:
%%-----------------------------------------------------------------
-ushort(doc) -> ["Description", "more description"];
-ushort(suite) -> [];
ushort(_) ->
ushort_big_loop([0, 4040, 65535]),
ushort_little_loop([0, 4040, 65535]),
@@ -131,16 +127,16 @@ ushort(_) ->
ushort_big_loop([]) ->
ok;
ushort_big_loop([X |List]) ->
- ?line [CodedType] = cdrlib:enc_unsigned_short(X, []),
- ?line {X, <<>>} = cdrlib:dec_unsigned_short(big, CodedType),
+ [CodedType] = cdrlib:enc_unsigned_short(X, []),
+ {X, <<>>} = cdrlib:dec_unsigned_short(big, CodedType),
ushort_big_loop(List),
ok.
ushort_little_loop([]) ->
ok;
ushort_little_loop([X |List]) ->
- ?line CodedType = enc_ushort_little(X, []),
- ?line {X, <<>>} = cdrlib:dec_unsigned_short(little, CodedType),
+ CodedType = enc_ushort_little(X, []),
+ {X, <<>>} = cdrlib:dec_unsigned_short(little, CodedType),
ushort_little_loop(List),
ok.
@@ -153,8 +149,6 @@ bad_ushort() ->
%% Test Case: long integer test
%% Description:
%%-----------------------------------------------------------------
-long(doc) -> ["Description", "more description"];
-long(suite) -> [];
long(_) ->
long_big_loop([-2147483648, -40404040, -32768, -4040, -1,
0, 4040, 32767, 40404040, 2147483647]),
@@ -166,16 +160,16 @@ long(_) ->
long_big_loop([]) ->
ok;
long_big_loop([X |List]) ->
- ?line [CodedType] = cdrlib:enc_long(X, []),
- ?line {X, <<>>} = cdrlib:dec_long(big, CodedType),
+ [CodedType] = cdrlib:enc_long(X, []),
+ {X, <<>>} = cdrlib:dec_long(big, CodedType),
long_big_loop(List),
ok.
long_little_loop([]) ->
ok;
long_little_loop([X |List]) ->
- ?line CodedType = enc_long_little(X, []),
- ?line {X, <<>>} = cdrlib:dec_long(little, CodedType),
+ CodedType = enc_long_little(X, []),
+ {X, <<>>} = cdrlib:dec_long(little, CodedType),
long_little_loop(List),
ok.
@@ -190,8 +184,6 @@ bad_long() ->
%% Test Case: unsigned long integer test
%% Description:
%%-----------------------------------------------------------------
-ulong(doc) -> ["Description", "more description"];
-ulong(suite) -> [];
ulong(_) ->
ulong_big_loop([0, 4040, 65535, 40404040, 2147483647, 4294967295]),
ulong_little_loop([0, 4040, 65535, 40404040, 2147483647, 4294967295]),
@@ -201,16 +193,16 @@ ulong(_) ->
ulong_big_loop([]) ->
ok;
ulong_big_loop([X |List]) ->
- ?line [CodedType] = cdrlib:enc_unsigned_long(X, []),
- ?line {X, <<>>} = cdrlib:dec_unsigned_long(big, CodedType),
+ [CodedType] = cdrlib:enc_unsigned_long(X, []),
+ {X, <<>>} = cdrlib:dec_unsigned_long(big, CodedType),
ulong_big_loop(List),
ok.
ulong_little_loop([]) ->
ok;
ulong_little_loop([X |List]) ->
- ?line CodedType = enc_ulong_little(X, []),
- ?line {X, <<>>} = cdrlib:dec_unsigned_long(little, CodedType),
+ CodedType = enc_ulong_little(X, []),
+ {X, <<>>} = cdrlib:dec_unsigned_long(little, CodedType),
ulong_little_loop(List),
ok.
@@ -226,8 +218,6 @@ bad_ulong() ->
%% Test Case: long integer test
%% Description:
%%-----------------------------------------------------------------
-longlong(doc) -> ["Description", "more description"];
-longlong(suite) -> [];
longlong(_) ->
longlong_big_loop([-2147483648, -40404040, -32768, -4040, -1,
0, 4040, 32767, 40404040, 2147483647]),
@@ -239,16 +229,16 @@ longlong(_) ->
longlong_big_loop([]) ->
ok;
longlong_big_loop([X |List]) ->
- ?line [CodedType] = cdrlib:enc_longlong(X, []),
- ?line {X, <<>>} = cdrlib:dec_longlong(big, CodedType),
+ [CodedType] = cdrlib:enc_longlong(X, []),
+ {X, <<>>} = cdrlib:dec_longlong(big, CodedType),
longlong_big_loop(List),
ok.
longlong_little_loop([]) ->
ok;
longlong_little_loop([X |List]) ->
- ?line CodedType = enc_longlong_little(X, []),
- ?line {X, <<>>} = cdrlib:dec_longlong(little, CodedType),
+ CodedType = enc_longlong_little(X, []),
+ {X, <<>>} = cdrlib:dec_longlong(little, CodedType),
longlong_little_loop(List),
ok.
@@ -264,8 +254,6 @@ bad_longlong() ->
%% Test Case: unsigned long integer test
%% Description:
%%-----------------------------------------------------------------
-ulonglong(doc) -> ["Description", "more description"];
-ulonglong(suite) -> [];
ulonglong(_) ->
ulonglong_big_loop([0, 4040, 65535, 40404040, 2147483647, 4294967295]),
ulonglong_little_loop([0, 4040, 65535, 40404040, 2147483647, 4294967295]),
@@ -275,16 +263,16 @@ ulonglong(_) ->
ulonglong_big_loop([]) ->
ok;
ulonglong_big_loop([X |List]) ->
- ?line [CodedType] = cdrlib:enc_unsigned_longlong(X, []),
- ?line {X, <<>>} = cdrlib:dec_unsigned_longlong(big, CodedType),
+ [CodedType] = cdrlib:enc_unsigned_longlong(X, []),
+ {X, <<>>} = cdrlib:dec_unsigned_longlong(big, CodedType),
ulonglong_big_loop(List),
ok.
ulonglong_little_loop([]) ->
ok;
ulonglong_little_loop([X |List]) ->
- ?line CodedType = enc_ulonglong_little(X, []),
- ?line {X, <<>>} = cdrlib:dec_unsigned_longlong(little, CodedType),
+ CodedType = enc_ulonglong_little(X, []),
+ {X, <<>>} = cdrlib:dec_unsigned_longlong(little, CodedType),
ulonglong_little_loop(List),
ok.
@@ -302,47 +290,41 @@ bad_ulonglong() ->
%% Test Case: boolean test
%% Description:
%%-----------------------------------------------------------------
-boolean(doc) -> ["Description", "more description"];
-boolean(suite) -> [];
boolean(_) ->
- ?line [CodedTrue] = cdrlib:enc_bool('true', []),
- ?line {'true', <<>>} = cdrlib:dec_bool(CodedTrue),
- ?line [CodedFalse] = cdrlib:enc_bool('false', []),
- ?line {'false', <<>>} = cdrlib:dec_bool(CodedFalse),
+ [CodedTrue] = cdrlib:enc_bool('true', []),
+ {'true', <<>>} = cdrlib:dec_bool(CodedTrue),
+ [CodedFalse] = cdrlib:enc_bool('false', []),
+ {'false', <<>>} = cdrlib:dec_bool(CodedFalse),
ok.
%%-----------------------------------------------------------------
%% Test Case: character test
%% Description:
%%-----------------------------------------------------------------
-character(doc) -> ["Description", "more description"];
-character(suite) -> [];
character(_) ->
- ?line [Coded_0] = cdrlib:enc_char($0, []),
- ?line {$0, <<>>} = cdrlib:dec_char(Coded_0),
- ?line [Coded_a] = cdrlib:enc_char($a, []),
- ?line {$a, <<>>} = cdrlib:dec_char(Coded_a),
- ?line [Coded_Z] = cdrlib:enc_char($Z, []),
- ?line {$Z, <<>>} = cdrlib:dec_char(Coded_Z),
- ?line [Coded_dollar] = cdrlib:enc_char($$, []),
- ?line {$$, <<>>} = cdrlib:dec_char(Coded_dollar),
+ [Coded_0] = cdrlib:enc_char($0, []),
+ {$0, <<>>} = cdrlib:dec_char(Coded_0),
+ [Coded_a] = cdrlib:enc_char($a, []),
+ {$a, <<>>} = cdrlib:dec_char(Coded_a),
+ [Coded_Z] = cdrlib:enc_char($Z, []),
+ {$Z, <<>>} = cdrlib:dec_char(Coded_Z),
+ [Coded_dollar] = cdrlib:enc_char($$, []),
+ {$$, <<>>} = cdrlib:dec_char(Coded_dollar),
ok.
%%-----------------------------------------------------------------
%% Test Case: octet test
%% Description:
%%-----------------------------------------------------------------
-octet(doc) -> ["Description", "more description"];
-octet(suite) -> [];
octet(_) ->
- ?line [Coded_ff] = cdrlib:enc_octet(16#ff, []),
- ?line {16#ff, <<>>} = cdrlib:dec_octet(Coded_ff),
- ?line [Coded_00] = cdrlib:enc_octet(16#00, []),
- ?line {16#00, <<>>} = cdrlib:dec_octet(Coded_00),
- ?line [Coded_5a] = cdrlib:enc_octet(16#5a, []),
- ?line {16#5a, <<>>} = cdrlib:dec_octet(Coded_5a),
- ?line [Coded_48] = cdrlib:enc_octet(16#48, []),
- ?line {16#48, <<>>} = cdrlib:dec_octet(Coded_48),
+ [Coded_ff] = cdrlib:enc_octet(16#ff, []),
+ {16#ff, <<>>} = cdrlib:dec_octet(Coded_ff),
+ [Coded_00] = cdrlib:enc_octet(16#00, []),
+ {16#00, <<>>} = cdrlib:dec_octet(Coded_00),
+ [Coded_5a] = cdrlib:enc_octet(16#5a, []),
+ {16#5a, <<>>} = cdrlib:dec_octet(Coded_5a),
+ [Coded_48] = cdrlib:enc_octet(16#48, []),
+ {16#48, <<>>} = cdrlib:dec_octet(Coded_48),
ok.
@@ -351,8 +333,6 @@ octet(_) ->
%% Test Case: float test
%% Description:
%%-----------------------------------------------------------------
-float(doc) -> ["Description", "more description"];
-float(suite) -> [];
float(_) ->
G = 16#7fffff / 16#800000 + 1.0,
H1 = math:pow(2, 127),
@@ -368,18 +348,18 @@ float(_) ->
float_big_loop([]) ->
ok;
float_big_loop([X |List]) ->
- ?line [CodedType] = cdrlib:enc_float(X, []),
- ?line {Y, <<>>} = cdrlib:dec_float(big, CodedType),
- ?line float_comp(X,Y),
+ [CodedType] = cdrlib:enc_float(X, []),
+ {Y, <<>>} = cdrlib:dec_float(big, CodedType),
+ float_comp(X,Y),
float_big_loop(List),
ok.
float_little_loop([]) ->
ok;
float_little_loop([X |List]) ->
- ?line [CodedType] = enc_float_little(X, []),
- ?line {Y, <<>>} = cdrlib:dec_float(little, CodedType),
- ?line float_comp(X,Y),
+ [CodedType] = enc_float_little(X, []),
+ {Y, <<>>} = cdrlib:dec_float(little, CodedType),
+ float_comp(X,Y),
float_little_loop(List),
ok.
@@ -388,8 +368,8 @@ float_comp(X,Y) when X == 0.0, Y == 0.0 ->
float_comp(X,Y) ->
Div = abs(Y) / abs(X),
%% io:format("~p~n", [float_to_list(Div)]),
- ?line true = (Div < 1.0000001),
- ?line true = (Div > 0.9999999),
+ true = (Div < 1.0000001),
+ true = (Div > 0.9999999),
ok.
enc_float_little(X, Message) ->
@@ -399,8 +379,6 @@ enc_float_little(X, Message) ->
%% Test Case: double test
%% Description:
%%-----------------------------------------------------------------
-double(doc) -> ["Description", "more description"];
-double(suite) -> [];
double(_) ->
F = 16#0fffffffffffff / 16#10000000000000 + 1.0,
E1 = math:pow(2, 1023),
@@ -423,18 +401,18 @@ double(_) ->
double_big_loop([]) ->
ok;
double_big_loop([X |List]) ->
- ?line [CodedType] = cdrlib:enc_double(X, []),
- ?line {Y, <<>>} = cdrlib:dec_double(big, CodedType),
- ?line double_comp(X,Y),
+ [CodedType] = cdrlib:enc_double(X, []),
+ {Y, <<>>} = cdrlib:dec_double(big, CodedType),
+ double_comp(X,Y),
double_big_loop(List),
ok.
double_little_loop([]) ->
ok;
double_little_loop([X |List]) ->
- ?line [CodedType] = enc_double_little(X, []),
- ?line {Y, <<>>} = cdrlib:dec_double(little, CodedType),
- ?line double_comp(X,Y),
+ [CodedType] = enc_double_little(X, []),
+ {Y, <<>>} = cdrlib:dec_double(little, CodedType),
+ double_comp(X,Y),
double_little_loop(List),
ok.
@@ -446,12 +424,10 @@ double_comp(X,Y) when X == 0.0, Y == 0.0 ->
double_comp(X,Y) ->
Div = abs(Y) / abs(X),
%% io:format("~p~n", [float_to_list(Div)]),
- ?line true = (Div < 1.00000000000001),
- ?line true = (Div > 0.99999999999999),
+ true = (Div < 1.00000000000001),
+ true = (Div > 0.99999999999999),
ok.
-double_should_be_ok(doc) -> ["Description", "more description"];
-double_should_be_ok(suite) -> [];
double_should_be_ok(_) ->
F = 16#0fffffffffffff / 16#10000000000000 + 1.0,
E1 = math:pow(2, 1024), % erlang can't handle this.
@@ -466,29 +442,27 @@ double_should_be_ok(_) ->
%% Test Case: enum test
%% Description:
%%-----------------------------------------------------------------
-enum(doc) -> ["Description", "more description"];
-enum(suite) -> [];
enum(_) ->
enum_big(),
enum_little(),
ok.
enum_big() ->
- ?line [Coded_a] = cdrlib:enc_enum(a,[a,b,c],[]),
- ?line {a, <<>>} = cdrlib:dec_enum(big, ["a","b","c"], Coded_a),
- ?line [Coded_b] = cdrlib:enc_enum(b,[a,b,c],[]),
- ?line {b, <<>>} = cdrlib:dec_enum(big, ["a","b","c"], Coded_b),
- ?line [Coded_c] = cdrlib:enc_enum(c,[a,b,c],[]),
- ?line {c, <<>>} = cdrlib:dec_enum(big, ["a","b","c"], Coded_c),
+ [Coded_a] = cdrlib:enc_enum(a,[a,b,c],[]),
+ {a, <<>>} = cdrlib:dec_enum(big, ["a","b","c"], Coded_a),
+ [Coded_b] = cdrlib:enc_enum(b,[a,b,c],[]),
+ {b, <<>>} = cdrlib:dec_enum(big, ["a","b","c"], Coded_b),
+ [Coded_c] = cdrlib:enc_enum(c,[a,b,c],[]),
+ {c, <<>>} = cdrlib:dec_enum(big, ["a","b","c"], Coded_c),
ok.
enum_little() ->
- ?line Coded_a = enc_r_enum(a,[a,b,c],[]),
- ?line {a, <<>>} = cdrlib:dec_enum(little, ["a","b","c"], Coded_a),
- ?line Coded_b = enc_r_enum(b,[a,b,c],[]),
- ?line {b, <<>>} = cdrlib:dec_enum(little, ["a","b","c"], Coded_b),
- ?line Coded_c = enc_r_enum(c,[a,b,c],[]),
- ?line {c, <<>>} = cdrlib:dec_enum(little, ["a","b","c"], Coded_c),
+ Coded_a = enc_r_enum(a,[a,b,c],[]),
+ {a, <<>>} = cdrlib:dec_enum(little, ["a","b","c"], Coded_a),
+ Coded_b = enc_r_enum(b,[a,b,c],[]),
+ {b, <<>>} = cdrlib:dec_enum(little, ["a","b","c"], Coded_b),
+ Coded_c = enc_r_enum(c,[a,b,c],[]),
+ {c, <<>>} = cdrlib:dec_enum(little, ["a","b","c"], Coded_c),
ok.
enc_r_enum(Enum, ElemList, Message) ->
diff --git a/lib/orber/test/corba_SUITE.erl b/lib/orber/test/corba_SUITE.erl
index 559e405226..22bb8dd2f9 100644
--- a/lib/orber/test/corba_SUITE.erl
+++ b/lib/orber/test/corba_SUITE.erl
@@ -32,7 +32,7 @@
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(5)).
+-define(default_timeout, test_server:minutes(5)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -98,14 +98,14 @@ cases() ->
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -133,50 +133,48 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% API tests for pseudo interface CORBA
%%-----------------------------------------------------------------
-corba_api(doc) -> ["CORBA API tests", ""];
-corba_api(suite) -> [];
corba_api(_) ->
NIL = corba:create_nil_objref(),
- ?line ok = corba:dispose(NIL),
- ?line NS = corba:resolve_initial_references("NameService"),
- ?line List = corba:list_initial_services(),
- ?line ["NameService"] = List,
- ?line NSstring = corba:object_to_string(NS),
- ?line NS1 = corba:string_to_object(NSstring),
- ?line NSstring = corba:object_to_string(NS1),
- ?line true = corba:add_initial_service("MyData", NS),
- ?line NS = corba:resolve_initial_references("MyData"),
- ?line [_,_] = corba:list_initial_services(),
- ?line false = corba:remove_initial_service("Wrong"),
- ?line NIL = corba:resolve_initial_references("Wrong"),
- ?line NS = corba:string_to_object("corbaloc:rir:/MyData"),
- ?line true = corba:remove_initial_service("MyData"),
- ?line ["NameService"] = corba:list_initial_services(),
+ ok = corba:dispose(NIL),
+ NS = corba:resolve_initial_references("NameService"),
+ List = corba:list_initial_services(),
+ ["NameService"] = List,
+ NSstring = corba:object_to_string(NS),
+ NS1 = corba:string_to_object(NSstring),
+ NSstring = corba:object_to_string(NS1),
+ true = corba:add_initial_service("MyData", NS),
+ NS = corba:resolve_initial_references("MyData"),
+ [_,_] = corba:list_initial_services(),
+ false = corba:remove_initial_service("Wrong"),
+ NIL = corba:resolve_initial_references("Wrong"),
+ NS = corba:string_to_object("corbaloc:rir:/MyData"),
+ true = corba:remove_initial_service("MyData"),
+ ["NameService"] = corba:list_initial_services(),
%% This is a collection of different stringified IOR:s (correct & incorrect)
%% which we use to test IOR encode/decode.
- ?line IOR1 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000040000000000000100000102010000000a3132372e302e302e31009d610000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e2316570000000003030300000002000000210000007800010202000000010040020200000022000000080003030300000000004000400000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c00030303000100010000000400010020000101090001010005010001000101090000000200010100050100010000000000000184000102010000000a3132372e302e302e310000000000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e231657000000000303030000000300000021000000ec000102020000000200060202000000240000001c0001006600060202000000010000000a3132372e302e302e31009d600000000000000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f00460202000000240000001c0001006600060202000000010000000a3132372e302e302e31009d62004000400000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f00000014000000080001006600069d5e000000010000002c000303030001000100000004000100200001010900010100050100010001010900000002000101000501000100000000000000dc000102010000000a3132372e302e302e31009d5f0000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e23165700000000030303000000020000002100000054000102020000000100000202000000220000000800030303000000000000000000000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c00030303000100010000000400010020000101090001010005010001000101090000000200010100050100010000000000000080000102010000000a3132372e302e302e31009d5d0000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e2316570000000003030300000001000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
- ?line IOR2 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e30000303030000000100000000000000e0000102010000000a3132372e302e302e31009d5f00000034abacab3131303432343836383731005f526f6f74504f410049494f505f43534976325f504f410000cafebabe3e23165700000000000000020000002100000054000102020000000100000202000000220000000800030303000000000000000000000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
- ?line IOR3 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000108000102010000000a3132372e302e302e31009d6100000037abacab3131303432343836383731005f526f6f74504f410049494f505f43534976325f55505f504f410000cafebabe3e231657000000000100000002000000210000007800010202000000010040020200000022000000080003030300000000004000400000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
- ?line IOR4 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000080000102010000000a3132372e302e302e31009d5d0000002eabacab3131303432343836383731005f526f6f74504f410049494f505f504f410000cafebabe3e23165700000000020200000001000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
- ?line IOR5 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e30000303030000000100000000000000fc000102010000000a3132372e302e302e3100000000000033abacab3131303432343836383731005f526f6f74504f4100544c535f43534976325f504f410000cafebabe3e231657000000000100000002000000210000007000010202000000010006020200000024000000220001006600060202000000010000000f3132382e3233302e3230382e353500019d6000000000020200000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
- ?line IOR6 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000124000102010000000a3132372e302e302e3100000000000036abacab3131303432343836383731005f526f6f74504f4100544c535f43534976325f55505f504f410000cafebabe3e23165700000000020200000002000000210000009400010202000000010046020200000024000000220001006600060202000000010000000f3132382e3233302e3230382e353500019d620040004002020000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
- ?line IOR7 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000090000102010000000a3132372e302e302e310000000000002dabacab3131303432343836383731005f526f6f74504f4100544c535f504f410000cafebabe3e231657000000000303030000000200000014000000080001006600069d5e000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
- ?line IOR1 = corba:string_to_object(corba:object_to_string(IOR1)),
- ?line IOR2 = corba:string_to_object(corba:object_to_string(IOR2)),
- ?line IOR3 = corba:string_to_object(corba:object_to_string(IOR3)),
- ?line IOR4 = corba:string_to_object(corba:object_to_string(IOR4)),
- ?line IOR5 = corba:string_to_object(corba:object_to_string(IOR5)),
- ?line IOR6 = corba:string_to_object(corba:object_to_string(IOR6)),
- ?line IOR7 = corba:string_to_object(corba:object_to_string(IOR7)),
- ?line ?match(ok, corba:print_object(IOR1)),
- ?line ?match(ok, corba:print_object(IOR2)),
- ?line ?match(ok, corba:print_object(IOR3)),
- ?line ?match(ok, corba:print_object(IOR4)),
- ?line ?match(ok, corba:print_object(IOR5)),
- ?line ?match(ok, corba:print_object(IOR6)),
- ?line ?match(ok, corba:print_object(IOR7)),
- ?line ?match(ok, corba:print_object("IOR:000303030000000d49444c3a746573743a312e300003030300000002000000000000003000010001000000136d792e686f73742e65726c616e672e6f72670001801a02020000000c424f410a00000a0000070a010000000100000024000303030000000100000001000000140003030300010001000000000001010900000000")),
+ IOR1 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000040000000000000100000102010000000a3132372e302e302e31009d610000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e2316570000000003030300000002000000210000007800010202000000010040020200000022000000080003030300000000004000400000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c00030303000100010000000400010020000101090001010005010001000101090000000200010100050100010000000000000184000102010000000a3132372e302e302e310000000000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e231657000000000303030000000300000021000000ec000102020000000200060202000000240000001c0001006600060202000000010000000a3132372e302e302e31009d600000000000000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f00460202000000240000001c0001006600060202000000010000000a3132372e302e302e31009d62004000400000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f00000014000000080001006600069d5e000000010000002c000303030001000100000004000100200001010900010100050100010001010900000002000101000501000100000000000000dc000102010000000a3132372e302e302e31009d5f0000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e23165700000000030303000000020000002100000054000102020000000100000202000000220000000800030303000000000000000000000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c00030303000100010000000400010020000101090001010005010001000101090000000200010100050100010000000000000080000102010000000a3132372e302e302e31009d5d0000002dabacab3131303432343836383731005f526f6f74504f4100414c4c5f504f410000cafebabe3e2316570000000003030300000001000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ IOR2 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e30000303030000000100000000000000e0000102010000000a3132372e302e302e31009d5f00000034abacab3131303432343836383731005f526f6f74504f410049494f505f43534976325f504f410000cafebabe3e23165700000000000000020000002100000054000102020000000100000202000000220000000800030303000000000000000000000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ IOR3 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000108000102010000000a3132372e302e302e31009d6100000037abacab3131303432343836383731005f526f6f74504f410049494f505f43534976325f55505f504f410000cafebabe3e231657000000000100000002000000210000007800010202000000010040020200000022000000080003030300000000004000400000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ IOR4 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000080000102010000000a3132372e302e302e31009d5d0000002eabacab3131303432343836383731005f526f6f74504f410049494f505f504f410000cafebabe3e23165700000000020200000001000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ IOR5 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e30000303030000000100000000000000fc000102010000000a3132372e302e302e3100000000000033abacab3131303432343836383731005f526f6f74504f4100544c535f43534976325f504f410000cafebabe3e231657000000000100000002000000210000007000010202000000010006020200000024000000220001006600060202000000010000000f3132382e3233302e3230382e353500019d6000000000020200000000000000000400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ IOR6 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000124000102010000000a3132372e302e302e3100000000000036abacab3131303432343836383731005f526f6f74504f4100544c535f43534976325f55505f504f410000cafebabe3e23165700000000020200000002000000210000009400010202000000010046020200000024000000220001006600060202000000010000000f3132382e3233302e3230382e353500019d620040004002020000000806066781020101010000001b0401000806066781020101010000000b40616469726f6e2e636f6d010400000000000000000000020000000806066781020101010000000b06092a864886f712010202010000000f000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ IOR7 = ?match({'IOP_IOR',_,_}, corba:string_to_object("IOR:000303030000000d49444c3a746573743a312e3000030303000000010000000000000090000102010000000a3132372e302e302e310000000000002dabacab3131303432343836383731005f526f6f74504f4100544c535f504f410000cafebabe3e231657000000000303030000000200000014000000080001006600069d5e000000010000002c0003030300010001000000040001002000010109000101000501000100010109000000020001010005010001")),
+ IOR1 = corba:string_to_object(corba:object_to_string(IOR1)),
+ IOR2 = corba:string_to_object(corba:object_to_string(IOR2)),
+ IOR3 = corba:string_to_object(corba:object_to_string(IOR3)),
+ IOR4 = corba:string_to_object(corba:object_to_string(IOR4)),
+ IOR5 = corba:string_to_object(corba:object_to_string(IOR5)),
+ IOR6 = corba:string_to_object(corba:object_to_string(IOR6)),
+ IOR7 = corba:string_to_object(corba:object_to_string(IOR7)),
+ ?match(ok, corba:print_object(IOR1)),
+ ?match(ok, corba:print_object(IOR2)),
+ ?match(ok, corba:print_object(IOR3)),
+ ?match(ok, corba:print_object(IOR4)),
+ ?match(ok, corba:print_object(IOR5)),
+ ?match(ok, corba:print_object(IOR6)),
+ ?match(ok, corba:print_object(IOR7)),
+ ?match(ok, corba:print_object("IOR:000303030000000d49444c3a746573743a312e300003030300000002000000000000003000010001000000136d792e686f73742e65726c616e672e6f72670001801a02020000000c424f410a00000a0000070a010000000100000024000303030000000100000001000000140003030300010001000000000001010900000000")),
[IP] = ?match([_], orber:host()),
?match(#'IOP_IOR'{profiles=[#'IOP_TaggedProfile'
{tag=?TAG_INTERNET_IOP,
@@ -199,124 +197,112 @@ corba_api(_) ->
%%-----------------------------------------------------------------
%% API tests for interface BOA
%%-----------------------------------------------------------------
-boa_api(doc) -> ["BOA API tests", ""];
-boa_api(suite) -> [];
boa_api(_) ->
ok.
%%-----------------------------------------------------------------
%% API tests for interface OBJECT
%%-----------------------------------------------------------------
-object_api(doc) -> ["Object API tests", ""];
-object_api(suite) -> [];
object_api(_) ->
- ?line oe_orber_test_server:oe_register(),
- ?line EC = orber_test_server:oe_create(),
- ?line NS = corba:resolve_initial_references("NameService"),
+ oe_orber_test_server:oe_register(),
+ EC = orber_test_server:oe_create(),
+ NS = corba:resolve_initial_references("NameService"),
%% testing corba_object:is_a(Obj, IFRID) locally.
- ?line orber_test_lib:corba_object_tests(EC, NS),
+ orber_test_lib:corba_object_tests(EC, NS),
- ?line ?match(false, corba_object:non_existent(NS)),
+ ?match(false, corba_object:non_existent(NS)),
- ?line corba:dispose(EC),
- ?line oe_orber_test_server:oe_unregister(),
+ corba:dispose(EC),
+ oe_orber_test_server:oe_unregister(),
ok.
%%-----------------------------------------------------------------
%% API tests for orbers main module
%%-----------------------------------------------------------------
-orber_api(doc) -> ["orber API tests", ""];
-orber_api(suite) -> [];
orber_api(_) ->
- ?line ok = orber:uninstall(),
- ?line orber:install([node()]),
- ?line application:start(orber),
- ?line NodeList = orber:orber_nodes(),
- ?line NL = node(),
- ?line [NL] = NodeList,
+ ok = orber:uninstall(),
+ orber:install([node()]),
+ application:start(orber),
+ NodeList = orber:orber_nodes(),
+ NL = node(),
+ [NL] = NodeList,
ok.
%%-----------------------------------------------------------------
%% API tests for exception mapping
%%-----------------------------------------------------------------
-exception_info_api(doc) -> ["orber API tests", ""];
-exception_info_api(suite) -> [];
exception_info_api(_) ->
- ?line {ok, S1} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1163001858,'COMPLETED_NO'}}),
- ?line {ok, S2} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1330446337,'COMPLETED_NO'}}),
- ?line {ok, S3} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1398079490,'COMPLETED_NO'}}),
- ?line {ok, S4} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1347813377,'COMPLETED_NO'}}),
- ?line {ok, S5} = orber:exception_info({'EXCEPTION', {'CosNaming_NamingContext_InvalidName',"IDL:omg.org/CosNaming/NamingContext/InvalidName:1.0"}}),
- ?line error_logger:info_msg("~s", [S1]),
- ?line error_logger:info_msg("~s", [S2]),
- ?line error_logger:info_msg("~s", [S3]),
- ?line error_logger:info_msg("~s", [S4]),
- ?line error_logger:info_msg("~s", [S5]),
+ {ok, S1} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1163001858,'COMPLETED_NO'}}),
+ {ok, S2} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1330446337,'COMPLETED_NO'}}),
+ {ok, S3} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1398079490,'COMPLETED_NO'}}),
+ {ok, S4} = orber:exception_info({'EXCEPTION',{'MARSHAL',[],1347813377,'COMPLETED_NO'}}),
+ {ok, S5} = orber:exception_info({'EXCEPTION', {'CosNaming_NamingContext_InvalidName',"IDL:omg.org/CosNaming/NamingContext/InvalidName:1.0"}}),
+ error_logger:info_msg("~s", [S1]),
+ error_logger:info_msg("~s", [S2]),
+ error_logger:info_msg("~s", [S3]),
+ error_logger:info_msg("~s", [S4]),
+ error_logger:info_msg("~s", [S5]),
ok.
%%-----------------------------------------------------------------
%% API tests for orbers pseudo objects.
%%-----------------------------------------------------------------
-orber_pseudo_objects(doc) -> ["orber_pseudo_objects API tests", ""];
-orber_pseudo_objects(suite) -> [];
orber_pseudo_objects(_) ->
- ?line oe_orber_test_server:oe_register(),
+ oe_orber_test_server:oe_register(),
Obj1=(catch orber_test_server:oe_create(state,[{pseudo,true},
{local_typecheck, true}])),
- ?line ?match({_,pseudo,orber_test_server_impl, _,_, _}, Obj1),
+ ?match({_,pseudo,orber_test_server_impl, _,_, _}, Obj1),
Obj2=(catch orber_test_server:oe_create([],[{pseudo, truce}])),
- ?line ?match({'EXCEPTION',{'BAD_PARAM',[],_,'COMPLETED_NO'}}, Obj2),
+ ?match({'EXCEPTION',{'BAD_PARAM',[],_,'COMPLETED_NO'}}, Obj2),
spawn(?MODULE, pseudo_calls, [20, Obj1]),
- ?line ?match({ok, 10000}, orber_test_server:pseudo_call_delay(Obj1, 10000)),
+ ?match({ok, 10000}, orber_test_server:pseudo_call_delay(Obj1, 10000)),
spawn(?MODULE, pseudo_casts, [20, Obj1]),
- ?line ?match(ok, orber_test_server:pseudo_cast_delay(Obj1, 10000)),
+ ?match(ok, orber_test_server:pseudo_cast_delay(Obj1, 10000)),
- ?line ?match('object_here', corba:locate(Obj1)),
+ ?match('object_here', corba:locate(Obj1)),
- ?line NS = corba:resolve_initial_references("NameService"),
+ NS = corba:resolve_initial_references("NameService"),
- ?line orber_test_lib:corba_object_tests(Obj1, NS),
+ orber_test_lib:corba_object_tests(Obj1, NS),
- ?line ?match("IDL:omg.org/orber_test/server:1.0",orber_test_server:typeID()),
+ ?match("IDL:omg.org/orber_test/server:1.0",orber_test_server:typeID()),
%% Test if exceptions are handled properly.
- ?line ?match({'EXCEPTION',{'BAD_QOS',_,_,_}},
+ ?match({'EXCEPTION',{'BAD_QOS',_,_,_}},
orber_test_server:pseudo_call_raise_exc(Obj1, 1)),
- ?line ?match({'EXCEPTION',{'BAD_QOS',_,_,_}},
+ ?match({'EXCEPTION',{'BAD_QOS',_,_,_}},
orber_test_server:pseudo_call_raise_exc(Obj1, 2)),
%% Test if exit is handled properly.
- ?line ?match({'EXCEPTION',{'TRANSIENT',_,_,_}},
+ ?match({'EXCEPTION',{'TRANSIENT',_,_,_}},
orber_test_server:stop_brutal(Obj1)),
orber_test_lib:test_coding(Obj1, true),
%% possible to use subobject key?
- ?line ?match(state, binary_to_term(corba:get_subobject_key(Obj1))),
+ ?match(state, binary_to_term(corba:get_subobject_key(Obj1))),
- ?line ?match({'EXCEPTION',{'INV_OBJREF',[],_,'COMPLETED_NO'}},
+ ?match({'EXCEPTION',{'INV_OBJREF',[],_,'COMPLETED_NO'}},
corba:get_pid(Obj1)),
- ?line ?match(false, corba_object:non_existent(Obj1)),
+ ?match(false, corba_object:non_existent(Obj1)),
- ?line ?match(ok, corba:dispose(Obj1)),
+ ?match(ok, corba:dispose(Obj1)),
- ?line ?match(false, corba_object:non_existent(Obj1)),
+ ?match(false, corba_object:non_existent(Obj1)),
%% Try if it's possible to stringify and recover the object reference.
IOR_string = (catch corba:object_to_string(Obj1)),
Obj3 =(catch corba:string_to_object(IOR_string)),
- ?line ?match(IOR_string, corba:object_to_string(Obj3)),
+ ?match(IOR_string, corba:object_to_string(Obj3)),
Obj4=(catch orber_test_server:oe_create(undefined,[{pseudo,true}])),
- ?line ?match(ok, corba:dispose(Obj4)),
- ?line oe_orber_test_server:oe_unregister(),
+ ?match(ok, corba:dispose(Obj4)),
+ oe_orber_test_server:oe_unregister(),
ok.
%%-----------------------------------------------------------------
%% API tests for orbers objectkeys server.
%%-----------------------------------------------------------------
-orber_objectkeys_api(doc) -> ["orber_objectkeys API tests", ""];
-orber_objectkeys_api(suite) -> [];
orber_objectkeys_api(_) ->
Obj0=(catch orber_test_server:oe_create([], [{sup_child, true}])),
Obj1=(catch orber_test_server:oe_create([], [{persistent, true},
@@ -327,23 +313,23 @@ orber_objectkeys_api(_) ->
%% Obj0 is supposed to be a child started by a supervisor (r6) which
%% handles not only {ok, Pid} but also {ok,Pid, Returnvalue}. In our
%% case the Returnvalue is an ObjectRef.
- ?line ?match({ok,_,{_,key,_, _,_, _}}, Obj0),
+ ?match({ok,_,{_,key,_, _,_, _}}, Obj0),
{ok,_,Obj0Ref} = Obj0,
corba:dispose(Obj0Ref),
%% Only 'global' servers are at the moment allowed to be persistent.
- ?line ?match({'EXCEPTION',{'BAD_PARAM',[],_,'COMPLETED_NO'}}, Obj1),
+ ?match({'EXCEPTION',{'BAD_PARAM',[],_,'COMPLETED_NO'}}, Obj1),
%% We created a persistent object successfully.
- ?line ?match({_,key,_,_,_, _}, Obj2),
+ ?match({_,key,_,_,_, _}, Obj2),
%% Get key and Pid
{_,_,Key,_,_, _} = Obj2,
PID=(catch orber_objectkeys:get_pid(Key)),
%% Use the two different ways to look up if the server is persistent.
- ?line ?match(true, orber_objectkeys:is_persistent(Key)),
- ?line ?match(true, orber_objectkeys:is_persistent(PID)),
+ ?match(true, orber_objectkeys:is_persistent(Key)),
+ ?match(true, orber_objectkeys:is_persistent(PID)),
%% Create servers using every possible way.
O1=(catch orber_test_server:oe_create()),
@@ -359,42 +345,42 @@ orber_objectkeys_api(_) ->
O8=(catch orber_test_server:oe_create_link([], {'global', {o8, obj}})),
%% Test if all the object references are correct.
- ?line ?match({_,key,_,_,_, _}, O1),
- ?line ?match({_,key,_,_,_, _}, O2),
- ?line ?match({_,key,_,_,_, _}, O3),
- ?line ?match({_,key,_,_,_, _}, O4),
- ?line ?match({_, registered, o5, _,_, _}, O5),
- ?line ?match({_,key,_,_,_, _}, O6),
- ?line ?match({_, registered, o7, _,_, _}, O7),
- ?line ?match({_,key,_,_,_, _}, O8),
+ ?match({_,key,_,_,_, _}, O1),
+ ?match({_,key,_,_,_, _}, O2),
+ ?match({_,key,_,_,_, _}, O3),
+ ?match({_,key,_,_,_, _}, O4),
+ ?match({_, registered, o5, _,_, _}, O5),
+ ?match({_,key,_,_,_, _}, O6),
+ ?match({_, registered, o7, _,_, _}, O7),
+ ?match({_,key,_,_,_, _}, O8),
%% Test if persistent.
{_,_,Key1,_,_, _} = O1,
PID1=(catch orber_objectkeys:get_pid(Key1)),
- ?line ?match(false, orber_objectkeys:is_persistent(Key1)),
- ?line ?match(false, orber_objectkeys:is_persistent(PID1)),
+ ?match(false, orber_objectkeys:is_persistent(Key1)),
+ ?match(false, orber_objectkeys:is_persistent(PID1)),
%% all the servers are alive(?!).
- ?line ?match(false, corba_object:non_existent(O1)),
- ?line ?match(false, corba_object:non_existent(O2)),
- ?line ?match(false, corba_object:non_existent(O3)),
- ?line ?match(false, corba_object:non_existent(O4)),
- ?line ?match(false, corba_object:non_existent(O5)),
- ?line ?match(false, corba_object:non_existent(O6)),
- ?line ?match(false, corba_object:non_existent(O7)),
- ?line ?match(false, corba_object:non_existent(O8)),
- ?line ?match(false, corba_object:non_existent(Obj2)),
+ ?match(false, corba_object:non_existent(O1)),
+ ?match(false, corba_object:non_existent(O2)),
+ ?match(false, corba_object:non_existent(O3)),
+ ?match(false, corba_object:non_existent(O4)),
+ ?match(false, corba_object:non_existent(O5)),
+ ?match(false, corba_object:non_existent(O6)),
+ ?match(false, corba_object:non_existent(O7)),
+ ?match(false, corba_object:non_existent(O8)),
+ ?match(false, corba_object:non_existent(Obj2)),
%% Does locate work?
- ?line ?match('object_here', corba:locate(O1)),
- ?line ?match('object_here', corba:locate(O2)),
- ?line ?match('object_here', corba:locate(O3)),
- ?line ?match('object_here', corba:locate(O4)),
- ?line ?match('object_here', corba:locate(O5)),
- ?line ?match('object_here', corba:locate(O6)),
- ?line ?match('object_here', corba:locate(O7)),
- ?line ?match('object_here', corba:locate(O8)),
- ?line ?match('object_here', corba:locate(Obj2)),
+ ?match('object_here', corba:locate(O1)),
+ ?match('object_here', corba:locate(O2)),
+ ?match('object_here', corba:locate(O3)),
+ ?match('object_here', corba:locate(O4)),
+ ?match('object_here', corba:locate(O5)),
+ ?match('object_here', corba:locate(O6)),
+ ?match('object_here', corba:locate(O7)),
+ ?match('object_here', corba:locate(O8)),
+ ?match('object_here', corba:locate(Obj2)),
%% Terminate all servers with reason 'normal'.
catch corba:dispose(O1),
@@ -415,15 +401,15 @@ orber_objectkeys_api(_) ->
%% all the servers are dead(?!). If one of these test-cases
%% fails the only error can be that we didn't sleep long enough, i.e.,
%% try a longer timeout. If still fails something is wrong.
- ?line ?match(true, corba_object:non_existent(O1)),
- ?line ?match(true, corba_object:non_existent(O2)),
- ?line ?match(true, corba_object:non_existent(O3)),
- ?line ?match(true, corba_object:non_existent(O4)),
- ?line ?match(true, corba_object:non_existent(O5)),
- ?line ?match(true, corba_object:non_existent(O6)),
- ?line ?match(true, corba_object:non_existent(O7)),
- ?line ?match(true, corba_object:non_existent(O8)),
- ?line ?match(true, corba_object:non_existent(Obj2)),
+ ?match(true, corba_object:non_existent(O1)),
+ ?match(true, corba_object:non_existent(O2)),
+ ?match(true, corba_object:non_existent(O3)),
+ ?match(true, corba_object:non_existent(O4)),
+ ?match(true, corba_object:non_existent(O5)),
+ ?match(true, corba_object:non_existent(O6)),
+ ?match(true, corba_object:non_existent(O7)),
+ ?match(true, corba_object:non_existent(O8)),
+ ?match(true, corba_object:non_existent(Obj2)),
%% Create a new persistent server.
Obj3=(catch orber_test_server:oe_create([],
@@ -431,10 +417,10 @@ orber_objectkeys_api(_) ->
{regname, {global,{obj2, 12345}}}])),
%% OK?!
- ?line ?match({_,key,_,_,_, _}, Obj3),
+ ?match({_,key,_,_,_, _}, Obj3),
%% Try to create a server with the same name (naturally it fails).
- ?line ?match({'EXCEPTION',{'INTERNAL',[],_,'COMPLETED_NO'}},
+ ?match({'EXCEPTION',{'INTERNAL',[],_,'COMPLETED_NO'}},
orber_test_server:oe_create([],
[{persistent, true},
{regname, {global,{obj2, 12345}}}])),
@@ -449,20 +435,20 @@ orber_objectkeys_api(_) ->
%% Give time to clean up.
timer:sleep(2000),
- ?line ?match({'EXCEPTION',{'TRANSIENT',[],_,'COMPLETED_NO'}},
+ ?match({'EXCEPTION',{'TRANSIENT',[],_,'COMPLETED_NO'}},
gen_server:call(orber_objkeyserver,
{get_pid, Key3},
infinity)),
- ?line ?match(false,corba_object:non_existent(Obj3)),
+ ?match(false,corba_object:non_existent(Obj3)),
%% Run gc wit a "huge" time-limit. Will not erase the dead object.
orber_objectkeys:gc(10000),
- ?line ?match(false,corba_object:non_existent(Obj3)),
+ ?match(false,corba_object:non_existent(Obj3)),
%% Run gc with minimum time-limit. Will erase the dead object.
orber_objectkeys:gc(0),
- ?line ?match(true,corba_object:non_existent(Obj3)),
+ ?match(true,corba_object:non_existent(Obj3)),
%% Create a new persistent server.
Obj4=(catch orber_test_server:oe_create([],
@@ -477,22 +463,22 @@ orber_objectkeys_api(_) ->
%% Give time to clean up.
timer:sleep(2000),
-% ?line ?match({'EXCEPTION',{'COMM_FAILURE',[],0,'COMPLETED_NO'}},
- ?line ?match({error, _},
+% ?match({'EXCEPTION',{'COMM_FAILURE',[],0,'COMPLETED_NO'}},
+ ?match({error, _},
corba:get_pid(Obj4)),
- ?line ?match(false,corba_object:non_existent(Obj4)),
+ ?match(false,corba_object:non_existent(Obj4)),
%% Restart the object.
Obj5=(catch orber_test_server:oe_create([],
[{persistent, true},
{regname, {global,{obj2, 12345}}}])),
%% OK?!
- ?line ?match({_,key,_,_,_, _}, Obj5),
+ ?match({_,key,_,_,_, _}, Obj5),
%% Run gc with minimum time-limit.
orber_objectkeys:gc(0),
- ?line ?match(false,corba_object:non_existent(Obj5)),
+ ?match(false,corba_object:non_existent(Obj5)),
corba:dispose(Obj5),
ok.
@@ -508,337 +494,327 @@ orber_objectkeys_api(_) ->
-callback_ok_api(doc) -> ["Successful callbak API tests", ""];
-callback_ok_api(suite) -> [];
+%% Successful callback API tests
callback_ok_api(_) ->
%% Init
- ?line ?match({ok, {?DO_EXIT, state}}, corba:handle_init(?MODULE, {?DO_EXIT_FLAG, state})),
+ ?match({ok, {?DO_EXIT, state}}, corba:handle_init(?MODULE, {?DO_EXIT_FLAG, state})),
%% Terminate
- ?line ?match(ok, corba:handle_terminate(?MODULE, "reason", {?DO_EXIT, state})),
+ ?match(ok, corba:handle_terminate(?MODULE, "reason", {?DO_EXIT, state})),
%% Handle_call
- ?line ?match({reply,ok,{?DO_EXIT,state}},
+ ?match({reply,ok,{?DO_EXIT,state}},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, state}, [], false, false)),
%% Handle_cast
- ?line ?match({noreply, {?DO_EXIT,state}},
+ ?match({noreply, {?DO_EXIT,state}},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, state}, [], false)),
%% Handle_call precond/postcond
- ?line ?match({reply, ok, {?DO_EXIT, state}},
+ ?match({reply, ok, {?DO_EXIT, state}},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, state}, [], false, false, {?MODULE, precond},
{?MODULE, postcond}, ?MODULE)),
%% Handle_cast precond/postcond
- ?line ?match({noreply, {?DO_EXIT, state}},
+ ?match({noreply, {?DO_EXIT, state}},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, state}, [], false, {?MODULE, precond},
{?MODULE, postcond}, ?MODULE)),
%% Handle_info
- ?line ?match({noreply, {?DO_EXIT, state}},
+ ?match({noreply, {?DO_EXIT, state}},
corba:handle_info(?MODULE, "info", {?DO_EXIT, state})),
ok.
-callback_arity_api(doc) -> ["callbak arity API tests", ""];
-callback_arity_api(suite) -> [];
+%% Callback arity API tests
callback_arity_api(_) ->
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', {undef,_}},
+ ?match({'EXIT', {undef,_}},
corba:handle_call(?MODULE, foo, [to, many, arguments],
{?DO_EXIT, state}, [], false, false)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
corba:handle_call(?MODULE, foo, [to, many, arguments],
{?NO_EXIT, state}, [], false, false)),
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, arity}, [], false, false)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
corba:handle_call(?MODULE, foo, [],
{?NO_EXIT, arity}, [], false, false)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', {undef,_}},
+ ?match({'EXIT', {undef,_}},
corba:handle_cast(?MODULE, foo_1w, [to, many, arguments],
{?DO_EXIT, state}, [], false)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, state}},
+ ?match({noreply, {?NO_EXIT, state}},
corba:handle_cast(?MODULE, foo_1w, [to, many, arguments],
{?NO_EXIT, state}, [], false)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, arity}, [], false)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, arity}},
+ ?match({noreply, {?NO_EXIT, arity}},
corba:handle_cast(?MODULE, foo_1w, [],
{?NO_EXIT, arity}, [], false)),
%% Handle_info - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_info(?MODULE, "info", {?DO_EXIT, arity})),
%% Handle_info - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, arity}},
+ ?match({noreply, {?NO_EXIT, arity}},
corba:handle_info(?MODULE, "info", {?NO_EXIT, arity})),
ok.
-callback_module_api(doc) -> ["Module callbak API tests", ""];
-callback_module_api(suite) -> [];
+%% Module callback API tests
callback_module_api(_) ->
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', {undef,_}},
+ ?match({'EXIT', {undef,_}},
corba:handle_call(wrong_mod, foo, [],
{?DO_EXIT, state}, [], false, false)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
corba:handle_call(wrong_mod, foo, [],
{?NO_EXIT, state}, [], false, false)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', {undef,_}},
+ ?match({'EXIT', {undef,_}},
corba:handle_cast(wrong_mod, foo_1w, [],
{?DO_EXIT, state}, [], false)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, state}},
+ ?match({noreply, {?NO_EXIT, state}},
corba:handle_cast(wrong_mod, foo_1w, [],
{?NO_EXIT, state}, [], false)),
%% Handle_info - stay-alive == false.
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_info(wrong_mod, "info", {?DO_EXIT, state})),
%% Handle_info - stay-alive == true.
- ?line ?match({noreply, {?NO_EXIT, state}},
+ ?match({noreply, {?NO_EXIT, state}},
corba:handle_info(wrong_mod, "info", {?NO_EXIT, state})),
ok.
-callback_function_api(doc) -> ["Function callbak API tests", ""];
-callback_function_api(suite) -> [];
+%% Function callback API tests
callback_function_api(_) ->
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', {undef,_}},
+ ?match({'EXIT', {undef,_}},
corba:handle_call(?MODULE, bad_function, [],
{?DO_EXIT, state}, [], false, false)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
corba:handle_call(?MODULE, bad_function, [],
{?NO_EXIT, state}, [], false, false)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', {undef,_}},
+ ?match({'EXIT', {undef,_}},
corba:handle_cast(?MODULE, bad_function, [],
{?DO_EXIT, state}, [], false)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, state}},
+ ?match({noreply, {?NO_EXIT, state}},
corba:handle_cast(?MODULE, bad_function, [],
{?NO_EXIT, state}, [], false)),
%% Handle_info - stay-alive == false. Note, we cannot use ?MODULE here.
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_info(corba, "info", {?DO_EXIT, state})),
%% Handle_info - stay-alive == true. Note, we cannot use ?MODULE here.
- ?line ?match({noreply, {?NO_EXIT, state}},
+ ?match({noreply, {?NO_EXIT, state}},
corba:handle_info(corba, "info", {?NO_EXIT, state})),
ok.
-callback_precond_api(doc) -> ["Precond callbak API tests", ""];
-callback_precond_api(suite) -> [];
+%% Precond callback API tests
callback_precond_api(_) ->
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, state}, [], false, false, {wrong_mod, precond},
{?MODULE, postcond}, ?MODULE)),
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, state}, [], false, false, {?MODULE, bad_precond},
{?MODULE, postcond}, ?MODULE)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
corba:handle_call(?MODULE, foo, [],
{?NO_EXIT, state}, [], false, false, {wrong_mod, precond},
{?MODULE, postcond}, ?MODULE)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
corba:handle_call(?MODULE, foo, [],
{?NO_EXIT, state}, [], false, false, {?MODULE, bad_precond},
{?MODULE, postcond}, ?MODULE)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, state}, [], false, {wrong_mod, precond},
{?MODULE, postcond}, ?MODULE)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, state}, [], false, {?MODULE, bad_precond},
{?MODULE, postcond}, ?MODULE)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, state}},
+ ?match({noreply, {?NO_EXIT, state}},
corba:handle_cast(?MODULE, foo_1w, [],
{?NO_EXIT, state}, [], false, {wrong_mod, precond},
{?MODULE, postcond}, ?MODULE)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, state}},
+ ?match({noreply, {?NO_EXIT, state}},
corba:handle_cast(?MODULE, foo_1w, [],
{?NO_EXIT, state}, [], false, {?MODULE, bad_precond},
{?MODULE, postcond}, ?MODULE)),
ok.
-callback_postcond_api(doc) -> ["Postcond callbak API tests", ""];
-callback_postcond_api(suite) -> [];
+%% Postcond callback API tests
callback_postcond_api(_) ->
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, state}, [], false, false, {?MODULE, precond},
{wrong_mod, postcond}, ?MODULE)),
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, state}, [], false, false, {?MODULE, precond},
{?MODULE, bad_postcond}, ?MODULE)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
corba:handle_call(?MODULE, foo, [],
{?NO_EXIT, state}, [], false, false, {?MODULE, precond},
{wrong_mod, postcond}, ?MODULE)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
corba:handle_call(?MODULE, foo, [],
{?NO_EXIT, state}, [], false, false, {?MODULE, precond},
{?MODULE, bad_postcond}, ?MODULE)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, state}, [], false, {?MODULE, precond},
{wrong_mod, postcond}, ?MODULE)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, state}, [], false, {?MODULE, precond},
{?MODULE, bad_postcond}, ?MODULE)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, state}},
+ ?match({noreply, {?NO_EXIT, state}},
corba:handle_cast(?MODULE, foo_1w, [],
{?NO_EXIT, state}, [], false, {?MODULE, precond},
{wrong_mod, postcond}, ?MODULE)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, state}},
+ ?match({noreply, {?NO_EXIT, state}},
corba:handle_cast(?MODULE, foo_1w, [],
{?NO_EXIT, state}, [], false, {?MODULE, precond},
{?MODULE, bad_postcond}, ?MODULE)),
ok.
-callback_exit_api(doc) -> ["Callbak exit API tests", ""];
-callback_exit_api(suite) -> [];
+%% Callback exit API tests
callback_exit_api(_) ->
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, exit}, [], false, false)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
corba:handle_call(?MODULE, foo, [],
{?NO_EXIT, exit}, [], false, false)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, exit}, [], false)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, exit}},
+ ?match({noreply, {?NO_EXIT, exit}},
corba:handle_cast(?MODULE, foo_1w, [],
{?NO_EXIT, exit}, [], false)),
%% Handle_info - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_info(?MODULE, "info", {?DO_EXIT, exit})),
%% Handle_info - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, exit}},
+ ?match({noreply, {?NO_EXIT, exit}},
corba:handle_info(?MODULE, "info", {?NO_EXIT, exit})),
ok.
-callback_badarith_api(doc) -> ["callbak badarith API tests", ""];
-callback_badarith_api(suite) -> [];
+%% Callback badarith API tests
callback_badarith_api(_) ->
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, badarith}, [], false, false)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}},_},
corba:handle_call(?MODULE, foo, [],
{?NO_EXIT, badarith}, [], false, false)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, badarith}, [], false)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, badarith}},
+ ?match({noreply, {?NO_EXIT, badarith}},
corba:handle_cast(?MODULE, foo_1w, [],
{?NO_EXIT, badarith}, [], false)),
%% Handle_info - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_info(?MODULE, "info", {?DO_EXIT, badarith})),
%% Handle_info - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, badarith}},
+ ?match({noreply, {?NO_EXIT, badarith}},
corba:handle_info(?MODULE, "info", {?NO_EXIT, badarith})),
ok.
-callback_case_clause_api(doc) -> ["callbak case_clause API tests", ""];
-callback_case_clause_api(suite) -> [];
+%% Callback case_clause API tests
callback_case_clause_api(_) ->
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, case_clause}, [], false, false)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
corba:handle_call(?MODULE, foo, [],
{?NO_EXIT, case_clause}, [], false, false)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, case_clause}, [], false)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, case_clause}},
+ ?match({noreply, {?NO_EXIT, case_clause}},
corba:handle_cast(?MODULE, foo_1w, [],
{?NO_EXIT, case_clause}, [], false)),
%% Handle_info - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_info(?MODULE, "info", {?DO_EXIT, case_clause})),
%% Handle_info - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, case_clause}},
+ ?match({noreply, {?NO_EXIT, case_clause}},
corba:handle_info(?MODULE, "info", {?NO_EXIT, case_clause})),
ok.
-callback_function_clause_api(doc) -> ["callbak function_clause API tests", ""];
-callback_function_clause_api(suite) -> [];
+%% Callback function_clause API tests
callback_function_clause_api(_) ->
%% Handle_call - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_call(?MODULE, foo, [],
{?DO_EXIT, function_clause}, [], false, false)),
%% Handle_call - stay-alive == true
- ?line ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
+ ?match({reply, {'EXCEPTION', #'OBJ_ADAPTER'{}}, _},
corba:handle_call(?MODULE, foo, [],
{?NO_EXIT, function_clause}, [], false, false)),
%% Handle_cast - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_cast(?MODULE, foo_1w, [],
{?DO_EXIT, function_clause}, [], false)),
%% Handle_cast - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, function_clause}},
+ ?match({noreply, {?NO_EXIT, function_clause}},
corba:handle_cast(?MODULE, foo_1w, [],
{?NO_EXIT, function_clause}, [], false)),
%% Handle_info - stay-alive == false
- ?line ?match({'EXIT', _},
+ ?match({'EXIT', _},
corba:handle_info(?MODULE, "info", {?DO_EXIT, function_clause})),
%% Handle_info - stay-alive == true
- ?line ?match({noreply, {?NO_EXIT, function_clause}},
+ ?match({noreply, {?NO_EXIT, function_clause}},
corba:handle_info(?MODULE, "info", {?NO_EXIT, function_clause})),
ok.
diff --git a/lib/orber/test/csiv2_SUITE.erl b/lib/orber/test/csiv2_SUITE.erl
index 48818e4cab..7844060582 100644
--- a/lib/orber/test/csiv2_SUITE.erl
+++ b/lib/orber/test/csiv2_SUITE.erl
@@ -18,7 +18,6 @@
%% %CopyrightEnd%
%%
%%
-
-module(csiv2_SUITE).
-include_lib("common_test/include/ct.hrl").
@@ -31,7 +30,7 @@
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
%%-include_lib("orber/src/OrberCSIv2.hrl").
--define(default_timeout, ?t:minutes(5)).
+-define(default_timeout, test_server:minutes(5)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -44,7 +43,7 @@
_ ->
io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -357,7 +356,7 @@ end_per_testcase(_Case, Config) ->
orber:jump_stop(),
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -389,8 +388,8 @@ end_per_suite(Config) ->
-ifdef(false).
%% OrberCSIv2
-code_CertificateChain_api(doc) -> ["Code CertificateChain"];
-code_CertificateChain_api(suite) -> [];
+%%-----------------------------------------------------------------
+%% Code CertificateChain
code_CertificateChain_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -399,8 +398,7 @@ code_CertificateChain_api(_Config) ->
'OrberCSIv2':decode('CertificateChain', list_to_binary(Enc))),
ok.
-code_AttributeCertChain_api(doc) -> ["Code AttributeCertChain"];
-code_AttributeCertChain_api(suite) -> [];
+%% Code AttributeCertChain
code_AttributeCertChain_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -409,8 +407,7 @@ code_AttributeCertChain_api(_Config) ->
'OrberCSIv2':decode('AttributeCertChain', list_to_binary(Enc))),
ok.
-code_VerifyingCertChain_api(doc) -> ["Code VerifyingCertChain"];
-code_VerifyingCertChain_api(suite) -> [];
+%% Code VerifyingCertChain
code_VerifyingCertChain_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -420,8 +417,8 @@ code_VerifyingCertChain_api(_Config) ->
ok.
%% PKIXAttributeCertificate
-code_AttributeCertificate_api(doc) -> ["Code AttributeCertificate"];
-code_AttributeCertificate_api(suite) -> [];
+%%-----------------------------------------------------------------
+%% Code AttributeCertificate
code_AttributeCertificate_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -430,8 +427,7 @@ code_AttributeCertificate_api(_Config) ->
'OrberCSIv2':decode('AttributeCertificate', list_to_binary(Enc))),
ok.
-code_AttributeCertificateInfo_api(doc) -> ["Code AttributeCertificateInfo"];
-code_AttributeCertificateInfo_api(suite) -> [];
+%% Code AttributeCertificateInfo
code_AttributeCertificateInfo_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -440,8 +436,7 @@ code_AttributeCertificateInfo_api(_Config) ->
'OrberCSIv2':decode('AttributeCertificateInfo', list_to_binary(Enc))),
ok.
-code_AttCertVersion_api(doc) -> ["Code AttCertVersion"];
-code_AttCertVersion_api(suite) -> [];
+%% Code AttCertVersion
code_AttCertVersion_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -450,8 +445,7 @@ code_AttCertVersion_api(_Config) ->
'OrberCSIv2':decode('AttCertVersion', list_to_binary(Enc))),
ok.
-code_Holder_api(doc) -> ["Code Holder"];
-code_Holder_api(suite) -> [];
+%% Code Holder
code_Holder_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -460,8 +454,7 @@ code_Holder_api(_Config) ->
'OrberCSIv2':decode('Holder', list_to_binary(Enc))),
ok.
-code_AttCertIssuer_api(doc) -> ["Code AttCertIssuer"];
-code_AttCertIssuer_api(suite) -> [];
+%% Code AttCertIssuer
code_AttCertIssuer_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -470,8 +463,7 @@ code_AttCertIssuer_api(_Config) ->
'OrberCSIv2':decode('AttCertIssuer', list_to_binary(Enc))),
ok.
-code_AttCertValidityPeriod_api(doc) -> ["Code AttCertValidityPeriod"];
-code_AttCertValidityPeriod_api(suite) -> [];
+%% Code AttCertValidityPeriod
code_AttCertValidityPeriod_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('AttCertValidityPeriod', ?AttCertValidityPeriod)),
@@ -479,8 +471,7 @@ code_AttCertValidityPeriod_api(_Config) ->
'OrberCSIv2':decode('AttCertValidityPeriod', list_to_binary(Enc))),
ok.
-code_V2Form_api(doc) -> ["Code V2Form"];
-code_V2Form_api(suite) -> [];
+%% Code V2Form
code_V2Form_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -489,8 +480,7 @@ code_V2Form_api(_Config) ->
'OrberCSIv2':decode('V2Form', list_to_binary(Enc))),
ok.
-code_IssuerSerial_api(doc) -> ["Code IssuerSerial"];
-code_IssuerSerial_api(suite) -> [];
+%% Code IssuerSerial
code_IssuerSerial_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -499,8 +489,7 @@ code_IssuerSerial_api(_Config) ->
'OrberCSIv2':decode('IssuerSerial', list_to_binary(Enc))),
ok.
-code_ObjectDigestInfo_api(doc) -> ["Code ObjectDigestInfo"];
-code_ObjectDigestInfo_api(suite) -> [];
+%% Code ObjectDigestInfo
code_ObjectDigestInfo_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -510,8 +499,8 @@ code_ObjectDigestInfo_api(_Config) ->
ok.
%% PKIX1Explicit88
-code_Certificate_api(doc) -> ["Code Certificate"];
-code_Certificate_api(suite) -> [];
+%%-----------------------------------------------------------------
+%% Code Certificate
code_Certificate_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -520,8 +509,7 @@ code_Certificate_api(_Config) ->
'OrberCSIv2':decode('Certificate', list_to_binary(Enc))),
ok.
-code_TBSCertificate_api(doc) -> ["Code TBSCertificate"];
-code_TBSCertificate_api(suite) -> [];
+%% Code TBSCertificate
code_TBSCertificate_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -530,8 +518,7 @@ code_TBSCertificate_api(_Config) ->
'OrberCSIv2':decode('TBSCertificate', list_to_binary(Enc))),
ok.
-code_CertificateSerialNumber_api(doc) -> ["Code CertificateSerialNumber"];
-code_CertificateSerialNumber_api(suite) -> [];
+%% Code CertificateSerialNumber"];
code_CertificateSerialNumber_api(_Config) ->
{ok, Enc} =
?match({ok, _},
@@ -540,16 +527,14 @@ code_CertificateSerialNumber_api(_Config) ->
'OrberCSIv2':decode('CertificateSerialNumber', list_to_binary(Enc))),
ok.
-code_Version_api(doc) -> ["Code Version"];
-code_Version_api(suite) -> [];
+%% Code Version
code_Version_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('Version', ?Version)),
?match({ok, ?Version}, 'OrberCSIv2':decode('Version', list_to_binary(Enc))),
ok.
-code_AlgorithmIdentifier_api(doc) -> ["Code AlgorithmIdentifier"];
-code_AlgorithmIdentifier_api(suite) -> [];
+%% Code AlgorithmIdentifier
code_AlgorithmIdentifier_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('AlgorithmIdentifier', ?AlgorithmIdentifier)),
@@ -557,8 +542,7 @@ code_AlgorithmIdentifier_api(_Config) ->
'OrberCSIv2':decode('AlgorithmIdentifier', list_to_binary(Enc))),
ok.
-code_Name_api(doc) -> ["Code Name"];
-code_Name_api(suite) -> [];
+%% Code Name
code_Name_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('Name', ?Name)),
@@ -566,8 +550,7 @@ code_Name_api(_Config) ->
'OrberCSIv2':decode('Name', list_to_binary(Enc))),
ok.
-code_RDNSequence_api(doc) -> ["Code RDNSequence"];
-code_RDNSequence_api(suite) -> [];
+%% Code RDNSequence
code_RDNSequence_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('RDNSequence', ?RDNSequence)),
@@ -575,8 +558,7 @@ code_RDNSequence_api(_Config) ->
'OrberCSIv2':decode('RDNSequence', list_to_binary(Enc))),
ok.
-code_RelativeDistinguishedName_api(doc) -> ["Code RelativeDistinguishedName"];
-code_RelativeDistinguishedName_api(suite) -> [];
+%% Code RelativeDistinguishedName
code_RelativeDistinguishedName_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('RelativeDistinguishedName', ?RelativeDistinguishedName)),
@@ -584,8 +566,7 @@ code_RelativeDistinguishedName_api(_Config) ->
'OrberCSIv2':decode('RelativeDistinguishedName', list_to_binary(Enc))),
ok.
-code_AttributeTypeAndValue_api(doc) -> ["Code AttributeTypeAndValue"];
-code_AttributeTypeAndValue_api(suite) -> [];
+%% Code AttributeTypeAndValue
code_AttributeTypeAndValue_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('AttributeTypeAndValue', ?AttributeTypeAndValue)),
@@ -593,8 +574,7 @@ code_AttributeTypeAndValue_api(_Config) ->
'OrberCSIv2':decode('AttributeTypeAndValue', list_to_binary(Enc))),
ok.
-code_Attribute_api(doc) -> ["Code Attribute"];
-code_Attribute_api(suite) -> [];
+%% Code Attribute"];
code_Attribute_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('Attribute', ?Attribute)),
@@ -602,8 +582,7 @@ code_Attribute_api(_Config) ->
'OrberCSIv2':decode('Attribute', list_to_binary(Enc))),
ok.
-code_Validity_api(doc) -> ["Code Validity"];
-code_Validity_api(suite) -> [];
+%% Code Validity
code_Validity_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('Validity', ?Validity)),
@@ -611,8 +590,7 @@ code_Validity_api(_Config) ->
'OrberCSIv2':decode('Validity', list_to_binary(Enc))),
ok.
-code_SubjectPublicKeyInfo_api(doc) -> ["Code SubjectPublicKeyInfo"];
-code_SubjectPublicKeyInfo_api(suite) -> [];
+%% Code SubjectPublicKeyInfo
code_SubjectPublicKeyInfo_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('SubjectPublicKeyInfo', ?SubjectPublicKeyInfo)),
@@ -620,16 +598,14 @@ code_SubjectPublicKeyInfo_api(_Config) ->
'OrberCSIv2':decode('SubjectPublicKeyInfo', list_to_binary(Enc))),
ok.
-code_UniqueIdentifier_api(doc) -> ["Code UniqueIdentifier"];
-code_UniqueIdentifier_api(suite) -> [];
+%% Code UniqueIdentifier
code_UniqueIdentifier_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('UniqueIdentifier', ?UniqueIdentifier)),
?match({ok, _}, 'OrberCSIv2':decode('UniqueIdentifier', list_to_binary(Enc))),
ok.
-code_Extensions_api(doc) -> ["Code Extensions"];
-code_Extensions_api(suite) -> [];
+%% Code Extensions
code_Extensions_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('Extensions', ?Extensions)),
@@ -637,8 +613,7 @@ code_Extensions_api(_Config) ->
'OrberCSIv2':decode('Extensions', list_to_binary(Enc))),
ok.
-code_Extension_api(doc) -> ["Code Extension"];
-code_Extension_api(suite) -> [];
+%% Code Extension
code_Extension_api(_Config) ->
{ok, Enc} =
?match({ok, _}, 'OrberCSIv2':encode('Extension', ?Extension)),
@@ -647,8 +622,8 @@ code_Extension_api(_Config) ->
ok.
%% OpenSSL generated x509 Certificate
-code_OpenSSL509_api(doc) -> ["Code OpenSSL generated x509 Certificate"];
-code_OpenSSL509_api(suite) -> [];
+%%-----------------------------------------------------------------
+%% Code OpenSSL generated x509 Certificate
code_OpenSSL509_api(_Config) ->
{ok, Cert} =
?match({ok, #'Certificate'{}},
@@ -666,8 +641,7 @@ code_OpenSSL509_api(_Config) ->
%%-----------------------------------------------------------------
%% Test ssl:peercert
%%-----------------------------------------------------------------
-ssl_server_peercert_api(doc) -> ["Test ssl:peercert (server side)"];
-ssl_server_peercert_api(suite) -> [];
+%% Test ssl:peercert (server side)
ssl_server_peercert_api(_Config) ->
Options = orber_test_lib:get_options(iiop_ssl, server,
2, [{iiop_ssl_port, 0}]),
@@ -685,8 +659,7 @@ ssl_server_peercert_api(_Config) ->
destroy_fake_ORB(ssl, Socket),
ok.
-ssl_client_peercert_api(doc) -> ["Test ssl:peercert (client side)"];
-ssl_client_peercert_api(suite) -> [];
+%% Test ssl:peercert (client side)
ssl_client_peercert_api(_Config) ->
Options = orber_test_lib:get_options(iiop_ssl, client,
2, [{iiop_ssl_port, 0}]),
@@ -827,7 +800,7 @@ context_test(Obj) ->
context_data = MTContextError},
#'IOP_ServiceContext'{context_id=?IOP_SecurityAttributeService,
context_data = MTMessageInContext}],
- ?line ?match(ok, orber_test_server:testing_iiop_context(Obj, [{context, Ctx}])).
+ ?match(ok, orber_test_server:testing_iiop_context(Obj, [{context, Ctx}])).
fake_server_ORB(Type, Port, Options) ->
diff --git a/lib/orber/test/data_types_SUITE.erl b/lib/orber/test/data_types_SUITE.erl
index 8dd404a173..3873bfbaf6 100644
--- a/lib/orber/test/data_types_SUITE.erl
+++ b/lib/orber/test/data_types_SUITE.erl
@@ -29,7 +29,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -42,7 +42,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -89,24 +89,22 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
%%-----------------------------------------------------------------
-%% Test Case: name component handling tests
+%% Test Case: Fixed Point Datatype
%% Description:
%%-----------------------------------------------------------------
-fixed_type(doc) -> ["Test the Fixed Point Datatype."];
-fixed_type(suite) -> [];
fixed_type(_) ->
Val1 = ?match({fixed,3,2,314}, orber_test_server:val1()),
_Val2 = ?match({fixed,3,2,314}, orber_test_server:val2()),
@@ -165,11 +163,9 @@ fixed_type(_) ->
ok.
%%-----------------------------------------------------------------
-%% Test Case: any type
+%% Test Case: Any type
%% Description:
%%-----------------------------------------------------------------
-any_type(doc) -> ["Test the Any Datatype."];
-any_type(suite) -> [];
any_type(_) ->
?match(#any{typecode=undefined, value=undefined},
any:create()),
diff --git a/lib/orber/test/generated_SUITE.erl b/lib/orber/test/generated_SUITE.erl
index 2062afe2bb..3550941dfd 100644
--- a/lib/orber/test/generated_SUITE.erl
+++ b/lib/orber/test/generated_SUITE.erl
@@ -29,7 +29,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("orber/include/corba.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -40,7 +40,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -51,7 +51,7 @@
Not ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS);
+ exit(AcTuAlReS);
_ ->
AcTuAlReS
end
@@ -63,7 +63,7 @@
case orber_tc:check_tc(TC) of
false ->
io:format("###### ERROR ERROR ######~n~p - ~p~n", [Op, TC]),
- ?line exit(TC);
+ exit(TC);
true ->
true
end
@@ -122,12 +122,12 @@ end_per_group(_GroupName, Config) ->
%% Init and cleanup functions.
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -135,8 +135,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case:'OrberApp_IFR'
%% Description:
%%-----------------------------------------------------------------
-'OrberApp_IFR'(doc) -> [""];
-'OrberApp_IFR'(suite) -> [];
'OrberApp_IFR'(_) ->
?nomatch(undefined, 'OrberApp_IFR':oe_tc(get_absolute_name)),
?nomatch(undefined, 'OrberApp_IFR':oe_tc(get_user_exception_type)),
@@ -153,8 +151,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: erlang_binary
%% Description:
%%-----------------------------------------------------------------
-erlang_binary(doc) -> [""];
-erlang_binary(suite) -> [];
erlang_binary(_) ->
?match(true, orber_tc:check_tc(erlang_binary:tc())),
?match("IDL:erlang/binary:1.0", erlang_binary:id()),
@@ -165,8 +161,6 @@ erlang_binary(_) ->
%% Test Case: erlang_pid
%% Description:
%%-----------------------------------------------------------------
-erlang_pid(doc) -> [""];
-erlang_pid(suite) -> [];
erlang_pid(_) ->
?match(true, orber_tc:check_tc(erlang_pid:tc())),
?match("IDL:erlang/pid:1.0", erlang_pid:id()),
@@ -177,8 +171,6 @@ erlang_pid(_) ->
%% Test Case: erlang_port
%% Description:
%%-----------------------------------------------------------------
-erlang_port(doc) -> [""];
-erlang_port(suite) -> [];
erlang_port(_) ->
?match(true, orber_tc:check_tc(erlang_port:tc())),
?match("IDL:erlang/port:1.0", erlang_port:id()),
@@ -189,8 +181,6 @@ erlang_port(_) ->
%% Test Case: erlang_ref
%% Description:
%%-----------------------------------------------------------------
-erlang_ref(doc) -> [""];
-erlang_ref(suite) -> [];
erlang_ref(_) ->
?match(true, orber_tc:check_tc(erlang_ref:tc())),
?match("IDL:erlang/ref:1.0", erlang_ref:id()),
@@ -201,8 +191,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_Binding'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_Binding'(doc) -> [""];
-'CosNaming_Binding'(suite) -> [];
'CosNaming_Binding'(_) ->
?match(true, orber_tc:check_tc('CosNaming_Binding':tc())),
?match("IDL:omg.org/CosNaming/Binding:1.0", 'CosNaming_Binding':id()),
@@ -213,8 +201,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_BindingList'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_BindingList'(doc) -> [""];
-'CosNaming_BindingList'(suite) -> [];
'CosNaming_BindingList'(_) ->
?match(true, orber_tc:check_tc('CosNaming_BindingList':tc())),
?match("IDL:omg.org/CosNaming/BindingList:1.0", 'CosNaming_BindingList':id()),
@@ -225,8 +211,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_Name'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_Name'(doc) -> [""];
-'CosNaming_Name'(suite) -> [];
'CosNaming_Name'(_) ->
?match(true, orber_tc:check_tc('CosNaming_Name':tc())),
?match("IDL:omg.org/CosNaming/Name:1.0", 'CosNaming_Name':id()),
@@ -237,8 +221,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_NameComponent'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_NameComponent'(doc) -> [""];
-'CosNaming_NameComponent'(suite) -> [];
'CosNaming_NameComponent'(_) ->
?match(true, orber_tc:check_tc('CosNaming_NameComponent':tc())),
?match("IDL:omg.org/CosNaming/NameComponent:1.0", 'CosNaming_NameComponent':id()),
@@ -249,8 +231,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_NamingContextExt_InvalidAddress'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_NamingContextExt_InvalidAddress'(doc) -> [""];
-'CosNaming_NamingContextExt_InvalidAddress'(suite) -> [];
'CosNaming_NamingContextExt_InvalidAddress'(_) ->
?match(true, orber_tc:check_tc('CosNaming_NamingContextExt_InvalidAddress':tc())),
?match("IDL:omg.org/CosNaming/NamingContextExt/InvalidAddress:1.0", 'CosNaming_NamingContextExt_InvalidAddress':id()),
@@ -261,8 +241,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_NamingContext_AlreadyBound'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_NamingContext_AlreadyBound'(doc) -> [""];
-'CosNaming_NamingContext_AlreadyBound'(suite) -> [];
'CosNaming_NamingContext_AlreadyBound'(_) ->
?match(true, orber_tc:check_tc('CosNaming_NamingContext_AlreadyBound':tc())),
?match("IDL:omg.org/CosNaming/NamingContext/AlreadyBound:1.0", 'CosNaming_NamingContext_AlreadyBound':id()),
@@ -273,8 +251,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_NamingContext_CannotProceed'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_NamingContext_CannotProceed'(doc) -> [""];
-'CosNaming_NamingContext_CannotProceed'(suite) -> [];
'CosNaming_NamingContext_CannotProceed'(_) ->
?match(true, orber_tc:check_tc('CosNaming_NamingContext_CannotProceed':tc())),
?match("IDL:omg.org/CosNaming/NamingContext/CannotProceed:1.0", 'CosNaming_NamingContext_CannotProceed':id()),
@@ -285,8 +261,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_NamingContext_InvalidName'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_NamingContext_InvalidName'(doc) -> [""];
-'CosNaming_NamingContext_InvalidName'(suite) -> [];
'CosNaming_NamingContext_InvalidName'(_) ->
?match(true, orber_tc:check_tc('CosNaming_NamingContext_InvalidName':tc())),
?match("IDL:omg.org/CosNaming/NamingContext/InvalidName:1.0", 'CosNaming_NamingContext_InvalidName':id()),
@@ -297,8 +271,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_NamingContext_NotEmpty'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_NamingContext_NotEmpty'(doc) -> [""];
-'CosNaming_NamingContext_NotEmpty'(suite) -> [];
'CosNaming_NamingContext_NotEmpty'(_) ->
?match(true, orber_tc:check_tc('CosNaming_NamingContext_NotEmpty':tc())),
?match("IDL:omg.org/CosNaming/NamingContext/NotEmpty:1.0", 'CosNaming_NamingContext_NotEmpty':id()),
@@ -309,8 +281,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_NamingContext_NotFound'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_NamingContext_NotFound'(doc) -> [""];
-'CosNaming_NamingContext_NotFound'(suite) -> [];
'CosNaming_NamingContext_NotFound'(_) ->
?match(true, orber_tc:check_tc('CosNaming_NamingContext_NotFound':tc())),
?match("IDL:omg.org/CosNaming/NamingContext/NotFound:1.0", 'CosNaming_NamingContext_NotFound':id()),
@@ -321,8 +291,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_BindingIterator'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_BindingIterator'(doc) -> [""];
-'CosNaming_BindingIterator'(suite) -> [];
'CosNaming_BindingIterator'(_) ->
?nomatch(undefined, 'CosNaming_BindingIterator':oe_tc(next_one)),
?nomatch(undefined, 'CosNaming_BindingIterator':oe_tc(next_n)),
@@ -341,8 +309,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_NamingContext'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_NamingContext'(doc) -> [""];
-'CosNaming_NamingContext'(suite) -> [];
'CosNaming_NamingContext'(_) ->
?nomatch(undefined, 'CosNaming_NamingContext':oe_tc(bind)),
?nomatch(undefined, 'CosNaming_NamingContext':oe_tc(rebind)),
@@ -368,8 +334,6 @@ erlang_ref(_) ->
%% Test Case: 'CosNaming_NamingContexExt'
%% Description:
%%-----------------------------------------------------------------
-'CosNaming_NamingContextExt'(doc) -> [""];
-'CosNaming_NamingContextExt'(suite) -> [];
'CosNaming_NamingContextExt'(_) ->
?nomatch(undefined, 'CosNaming_NamingContextExt':oe_tc(to_string)),
?nomatch(undefined, 'CosNaming_NamingContextExt':oe_tc(to_name)),
diff --git a/lib/orber/test/interceptors_SUITE.erl b/lib/orber/test/interceptors_SUITE.erl
index 1bce0a3bfd..cec4cd1fab 100644
--- a/lib/orber/test/interceptors_SUITE.erl
+++ b/lib/orber/test/interceptors_SUITE.erl
@@ -30,7 +30,7 @@
-include_lib("orber/include/corba.hrl").
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -43,7 +43,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -54,7 +54,7 @@
Not ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS);
+ exit(AcTuAlReS);
_ ->
io:format("------ CORRECT RESULT ------~n~p~n",
[AcTuAlReS]),
@@ -105,7 +105,7 @@ end_per_group(_GroupName, Config) ->
%% Init and cleanup functions.
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
corba:orb_init([{flags, (?ORB_ENV_USE_PI bor ?ORB_ENV_LOCAL_TYPECHECKING)},
@@ -120,7 +120,7 @@ end_per_testcase(_Case, Config) ->
orber:jump_stop(),
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -128,8 +128,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: local_pseudo
%% Description:
%%-----------------------------------------------------------------
-local_pseudo(doc) -> [""];
-local_pseudo(suite) -> [];
local_pseudo(_) ->
?match({native, [?MODULE]}, orber:get_local_interceptors()),
%% Global settings
@@ -177,8 +175,6 @@ local_pseudo(_) ->
%% Test Case: local_default
%% Description:
%%-----------------------------------------------------------------
-local_default(doc) -> [""];
-local_default(suite) -> [];
local_default(_) ->
?match({native, [?MODULE]}, orber:get_local_interceptors()),
%% Global settings
@@ -226,8 +222,6 @@ local_default(_) ->
%% Test Case: local_local
%% Description:
%%-----------------------------------------------------------------
-local_local(doc) -> [""];
-local_local(suite) -> [];
local_local(_) ->
?match({native, [?MODULE]}, orber:get_local_interceptors()),
%% Global settings
@@ -276,8 +270,6 @@ local_local(_) ->
%% Test Case: local_global
%% Description:
%%-----------------------------------------------------------------
-local_global(doc) -> [""];
-local_global(suite) -> [];
local_global(_) ->
?match({native, [?MODULE]}, orber:get_local_interceptors()),
%% Global settings
diff --git a/lib/orber/test/iop_ior_10_SUITE.erl b/lib/orber/test/iop_ior_10_SUITE.erl
index 8779e123e0..68a6793f62 100644
--- a/lib/orber/test/iop_ior_10_SUITE.erl
+++ b/lib/orber/test/iop_ior_10_SUITE.erl
@@ -29,7 +29,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
%%-----------------------------------------------------------------
%% External exports
@@ -74,12 +74,12 @@ end_per_group(_GroupName, Config) ->
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -88,8 +88,6 @@ end_per_testcase(_Case, Config) ->
%% Description: Just testing the string_encoding function because the
%% other encodings is called from them.
%%-----------------------------------------------------------------
-encoding(doc) -> ["Description", "more description"];
-encoding(suite) -> [];
encoding(_) ->
V = #'IIOP_Version'{major=1,minor=0},
M0 = 'Module_Interface',
@@ -97,12 +95,12 @@ encoding(_) ->
H0 = "my.hostname.org",
P0 = 4040,
N0 = 'name',
- ?line O0 = corba_fake_mk_objkey(M0, registered, N0),
+ O0 = corba_fake_mk_objkey(M0, registered, N0),
PB0 = #'IIOP_ProfileBody_1_0'{iiop_version=V, host=H0, port=P0, object_key=O0},
TP0 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB0},
S0 = #'IOP_IOR'{type_id=T0, profiles=[TP0]},
N1 = list_to_pid("<0.100.0>"),
- ?line O1 = corba_fake_mk_objkey(M0, key, N1),
+ O1 = corba_fake_mk_objkey(M0, key, N1),
PB1 = #'IIOP_ProfileBody_1_0'{iiop_version=V, host=H0, port=P0, object_key=O1},
TP1 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB1},
S1 = #'IOP_IOR'{type_id=T0, profiles=[TP1]},
@@ -110,12 +108,12 @@ encoding(_) ->
PB2 = #'IIOP_ProfileBody_1_0'{iiop_version=V, host=H0, port=P0, object_key=O2},
TP2 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB2},
S2 = #'IOP_IOR'{type_id=T0, profiles=[TP2]},
- ?line C0 = iop_ior:string_code(S0),
- ?line {S0, <<>>, _} = iop_ior:string_decode(C0),
- ?line C1 = iop_ior:string_code(S1),
- ?line {S1, <<>>, _} = iop_ior:string_decode(C1),
- ?line C2 = iop_ior:string_code(S2),
- ?line {S2, <<>>, _} = iop_ior:string_decode(C2),
+ C0 = iop_ior:string_code(S0),
+ {S0, <<>>, _} = iop_ior:string_decode(C0),
+ C1 = iop_ior:string_code(S1),
+ {S1, <<>>, _} = iop_ior:string_decode(C1),
+ C2 = iop_ior:string_code(S2),
+ {S2, <<>>, _} = iop_ior:string_decode(C2),
ok.
@@ -123,8 +121,6 @@ encoding(_) ->
%% Test Case: IOR creation test
%% Description:
%%-----------------------------------------------------------------
-create_and_get_ops(doc) -> ["Description", "more description"];
-create_and_get_ops(suite) -> [];
create_and_get_ops(_) ->
V = #'IIOP_Version'{major=1,minor=0},
M0 = 'Module_Interface',
@@ -132,41 +128,41 @@ create_and_get_ops(_) ->
H0 = "my.hostname.org",
P0 = 4040,
N0 = 'name',
- ?line O0 = corba_fake_mk_objkey(M0, registered, N0),
+ O0 = corba_fake_mk_objkey(M0, registered, N0),
PB0 = #'IIOP_ProfileBody_1_0'{iiop_version=V, host=H0, port=P0, object_key=O0},
TP0 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB0},
S0 = #'IOP_IOR'{type_id=T0, profiles=[TP0]},
- ?line S0 = iop_ior:create({1, 0}, T0, [H0], P0, -1, O0, [], 0, 0),
+ S0 = iop_ior:create({1, 0}, T0, [H0], P0, -1, O0, [], 0, 0),
N1 = list_to_pid("<0.100.0>"),
- ?line O1 = corba_fake_mk_objkey(M0, key, N1),
+ O1 = corba_fake_mk_objkey(M0, key, N1),
{_,_,K1,_,_,_} = O1,
PB1 = #'IIOP_ProfileBody_1_0'{iiop_version=V, host=H0, port=P0, object_key=O1},
TP1 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB1},
S1 = #'IOP_IOR'{type_id=T0, profiles=[TP1]},
- ?line S1 = iop_ior:create({1, 0}, T0, [H0], P0, -1, O1, [], 0, 0),
+ S1 = iop_ior:create({1, 0}, T0, [H0], P0, -1, O1, [], 0, 0),
O2 = "This is an external objectkey",
PB2 = #'IIOP_ProfileBody_1_0'{iiop_version=V, host=H0, port=P0, object_key=O2},
TP2 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB2},
S2 = #'IOP_IOR'{type_id=T0, profiles=[TP2]},
- ?line {'internal_registered', N0, _, _, M0} = iop_ior:get_key(S0),
- ?line {'internal', K1, _, _, M0} = iop_ior:get_key(S1),
- ?line {'external', {H0, P0, O2, _,_,
- #host_data{protocol = normal,
- ssl_data = undefined,
- version = {1,0},
- csiv2_mech = undefined,
- csiv2_statefull = false,
- charset = 65537,
- wcharset = 65801,
- ft_heartbeat = false,
- ft_primary = false,
- ft_group = undefined,
- csiv2_addresses = []}}}
+ {'internal_registered', N0, _, _, M0} = iop_ior:get_key(S0),
+ {'internal', K1, _, _, M0} = iop_ior:get_key(S1),
+ {'external', {H0, P0, O2, _,_,
+ #host_data{protocol = normal,
+ ssl_data = undefined,
+ version = {1,0},
+ csiv2_mech = undefined,
+ csiv2_statefull = false,
+ charset = 65537,
+ wcharset = 65801,
+ ft_heartbeat = false,
+ ft_primary = false,
+ ft_group = undefined,
+ csiv2_addresses = []}}}
= iop_ior:get_key(S2),
- ?line T0 = iop_ior:get_typeID(S0),
- ?line O0 = iop_ior:get_objkey(S0),
- ?line O1 = iop_ior:get_objkey(S1),
- ?line O2 = iop_ior:get_objkey(S2),
+ T0 = iop_ior:get_typeID(S0),
+ O0 = iop_ior:get_objkey(S0),
+ O1 = iop_ior:get_objkey(S1),
+ O2 = iop_ior:get_objkey(S2),
ok.
%%-----------------------------------------------------------------
diff --git a/lib/orber/test/iop_ior_11_SUITE.erl b/lib/orber/test/iop_ior_11_SUITE.erl
index 46342ddfd7..8276feeb93 100644
--- a/lib/orber/test/iop_ior_11_SUITE.erl
+++ b/lib/orber/test/iop_ior_11_SUITE.erl
@@ -29,7 +29,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
%%-----------------------------------------------------------------
%% External exports
@@ -74,12 +74,12 @@ end_per_group(_GroupName, Config) ->
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -88,8 +88,6 @@ end_per_testcase(_Case, Config) ->
%% Description: Just testing the string_encoding function because the
%% other encodings is called from them.
%%-----------------------------------------------------------------
-encoding(doc) -> ["Description", "more description"];
-encoding(suite) -> [];
encoding(_) ->
V = #'IIOP_Version'{major=1,minor=1},
M0 = 'Module_Interface',
@@ -107,13 +105,13 @@ encoding(_) ->
cdrlib:enc_unsigned_short(2,
cdrlib:enc_unsigned_short(SSLPort, [])))]}]
end,
- ?line O0 = corba_fake_mk_objkey(M0, registered, N0),
+ O0 = corba_fake_mk_objkey(M0, registered, N0),
PB0 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O0,
components=Components},
TP0 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB0},
S0 = #'IOP_IOR'{type_id=T0, profiles=[TP0]},
N1 = list_to_pid("<0.100.0>"),
- ?line O1 = corba_fake_mk_objkey(M0, key, N1),
+ O1 = corba_fake_mk_objkey(M0, key, N1),
PB1 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O1,
components=[]},
TP1 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB1},
@@ -123,12 +121,12 @@ encoding(_) ->
components=[]},
TP2 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB2},
S2 = #'IOP_IOR'{type_id=T0, profiles=[TP2]},
- ?line C0 = iop_ior:string_code(S0),
- ?line {S0, <<>>, _} = iop_ior:string_decode(C0),
- ?line C1 = iop_ior:string_code(S1),
- ?line {S1, <<>>, _} = iop_ior:string_decode(C1),
- ?line C2 = iop_ior:string_code(S2),
- ?line {S2, <<>>, _} = iop_ior:string_decode(C2),
+ C0 = iop_ior:string_code(S0),
+ {S0, <<>>, _} = iop_ior:string_decode(C0),
+ C1 = iop_ior:string_code(S1),
+ {S1, <<>>, _} = iop_ior:string_decode(C1),
+ C2 = iop_ior:string_code(S2),
+ {S2, <<>>, _} = iop_ior:string_decode(C2),
ok.
@@ -136,8 +134,6 @@ encoding(_) ->
%% Test Case: IOR creation test
%% Description:
%%-----------------------------------------------------------------
-create_and_get_ops(doc) -> ["Description", "more description"];
-create_and_get_ops(suite) -> [];
create_and_get_ops(_) ->
V = #'IIOP_Version'{major=1,minor=1},
CSC = #'IOP_TaggedComponent'{tag=?TAG_CODE_SETS,
@@ -147,46 +143,46 @@ create_and_get_ops(_) ->
H0 = "my.hostname.org",
P0 = 4040,
N0 = 'name',
- ?line O0 = corba_fake_mk_objkey(M0, registered, N0),
+ O0 = corba_fake_mk_objkey(M0, registered, N0),
PB0 = #'IIOP_ProfileBody_1_1'
{iiop_version=V, host=H0, port=P0, object_key=O0,
components=[CSC]},
TP0 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB0},
S0 = #'IOP_IOR'{type_id=T0, profiles=[TP0]},
- ?line S0 = iop_ior:create({1, 1}, T0, [H0], P0, -1, O0, [CSC], 0, 0),
+ S0 = iop_ior:create({1, 1}, T0, [H0], P0, -1, O0, [CSC], 0, 0),
N1 = list_to_pid("<0.100.0>"),
- ?line O1 = corba_fake_mk_objkey(M0, key, N1),
+ O1 = corba_fake_mk_objkey(M0, key, N1),
{_,_,K1,_,_,_} = O1,
PB1 = #'IIOP_ProfileBody_1_1'
{iiop_version=V, host=H0, port=P0, object_key=O1,
components=[CSC]},
TP1 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB1},
S1 = #'IOP_IOR'{type_id=T0, profiles=[TP1]},
- ?line S1 = iop_ior:create({1, 1}, T0, [H0], P0, -1, O1, [CSC], 0, 0),
+ S1 = iop_ior:create({1, 1}, T0, [H0], P0, -1, O1, [CSC], 0, 0),
O2 = "This is an external objectkey",
PB2 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O2,
components=[]},
TP2 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB2},
S2 = #'IOP_IOR'{type_id=T0, profiles=[TP2]},
- ?line {'internal_registered', N0, _, _, M0} = iop_ior:get_key(S0),
- ?line {'internal', K1, _, _, M0} = iop_ior:get_key(S1),
- ?line {'external', {H0, P0, O2, _,_,
- #host_data{protocol = normal,
- ssl_data = undefined,
- version = {1,1},
- csiv2_mech = undefined,
- csiv2_statefull = false,
- charset = 65537,
- wcharset = 65801,
- ft_heartbeat = false,
- ft_primary = false,
- ft_group = undefined,
- csiv2_addresses = []}}} =
+ {'internal_registered', N0, _, _, M0} = iop_ior:get_key(S0),
+ {'internal', K1, _, _, M0} = iop_ior:get_key(S1),
+ {'external', {H0, P0, O2, _,_,
+ #host_data{protocol = normal,
+ ssl_data = undefined,
+ version = {1,1},
+ csiv2_mech = undefined,
+ csiv2_statefull = false,
+ charset = 65537,
+ wcharset = 65801,
+ ft_heartbeat = false,
+ ft_primary = false,
+ ft_group = undefined,
+ csiv2_addresses = []}}} =
iop_ior:get_key(S2),
- ?line T0 = iop_ior:get_typeID(S0),
- ?line O0 = iop_ior:get_objkey(S0),
- ?line O1 = iop_ior:get_objkey(S1),
- ?line O2 = iop_ior:get_objkey(S2),
+ T0 = iop_ior:get_typeID(S0),
+ O0 = iop_ior:get_objkey(S0),
+ O1 = iop_ior:get_objkey(S1),
+ O2 = iop_ior:get_objkey(S2),
ok.
%%-----------------------------------------------------------------
diff --git a/lib/orber/test/iop_ior_12_SUITE.erl b/lib/orber/test/iop_ior_12_SUITE.erl
index bce9f3af88..802b0b11a2 100644
--- a/lib/orber/test/iop_ior_12_SUITE.erl
+++ b/lib/orber/test/iop_ior_12_SUITE.erl
@@ -30,7 +30,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
%%-----------------------------------------------------------------
%% External exports
@@ -75,12 +75,12 @@ end_per_group(_GroupName, Config) ->
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -89,8 +89,6 @@ end_per_testcase(_Case, Config) ->
%% Description: Just testing the string_encoding function because the
%% other encodings is called from them.
%%-----------------------------------------------------------------
-encoding(doc) -> ["Description", "more description"];
-encoding(suite) -> [];
encoding(_) ->
V = #'IIOP_Version'{major=1,minor=2},
M0 = 'Module_Interface',
@@ -105,31 +103,31 @@ encoding(_) ->
[#'IOP_TaggedComponent'{tag=?TAG_SSL_SEC_TRANS,
component_data=[0 |
cdrlib:enc_unsigned_short(2,
- cdrlib:enc_unsigned_short(2,
+ cdrlib:enc_unsigned_short(2,
cdrlib:enc_unsigned_short(SSLPort, [])))]}]
end,
- ?line O0 = corba_fake_mk_objkey(M0, registered, N0),
+ O0 = corba_fake_mk_objkey(M0, registered, N0),
PB0 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O0,
- components=Components},
+ components=Components},
TP0 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB0},
S0 = #'IOP_IOR'{type_id=T0, profiles=[TP0]},
N1 = list_to_pid("<0.100.0>"),
- ?line O1 = corba_fake_mk_objkey(M0, key, N1),
+ O1 = corba_fake_mk_objkey(M0, key, N1),
PB1 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O1,
- components=[]},
+ components=[]},
TP1 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB1},
S1 = #'IOP_IOR'{type_id=T0, profiles=[TP1]},
O2 = "This is an external objectkey",
PB2 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O2,
- components=[]},
+ components=[]},
TP2 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB2},
S2 = #'IOP_IOR'{type_id=T0, profiles=[TP2]},
- ?line C0 = iop_ior:string_code(S0),
- ?line {S0, <<>>, _} = iop_ior:string_decode(C0),
- ?line C1 = iop_ior:string_code(S1),
- ?line {S1, <<>>, _} = iop_ior:string_decode(C1),
- ?line C2 = iop_ior:string_code(S2),
- ?line {S2, <<>>, _} = iop_ior:string_decode(C2),
+ C0 = iop_ior:string_code(S0),
+ {S0, <<>>, _} = iop_ior:string_decode(C0),
+ C1 = iop_ior:string_code(S1),
+ {S1, <<>>, _} = iop_ior:string_decode(C1),
+ C2 = iop_ior:string_code(S2),
+ {S2, <<>>, _} = iop_ior:string_decode(C2),
ok.
@@ -137,8 +135,6 @@ encoding(_) ->
%% Test Case: IOR creation test
%% Description:
%%-----------------------------------------------------------------
-create_and_get_ops(doc) -> ["Description", "more description"];
-create_and_get_ops(suite) -> [];
create_and_get_ops(_) ->
V = #'IIOP_Version'{major=1,minor=2},
CSC = #'IOP_TaggedComponent'{tag=?TAG_CODE_SETS,
@@ -148,46 +144,46 @@ create_and_get_ops(_) ->
H0 = "my.hostname.org",
P0 = 4040,
N0 = 'name',
- ?line O0 = corba_fake_mk_objkey(M0, registered, N0),
+ O0 = corba_fake_mk_objkey(M0, registered, N0),
PB0 = #'IIOP_ProfileBody_1_1'
{iiop_version=V, host=H0, port=P0, object_key=O0,
components=[CSC]},
TP0 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB0},
S0 = #'IOP_IOR'{type_id=T0, profiles=[TP0]},
- ?line S0 = iop_ior:create({1, 2}, T0, [H0], P0, -1, O0, [CSC], 0, 0),
+ S0 = iop_ior:create({1, 2}, T0, [H0], P0, -1, O0, [CSC], 0, 0),
N1 = list_to_pid("<0.100.0>"),
- ?line O1 = corba_fake_mk_objkey(M0, key, N1),
+ O1 = corba_fake_mk_objkey(M0, key, N1),
{_,_,K1,_,_,_} = O1,
PB1 = #'IIOP_ProfileBody_1_1'
{iiop_version=V, host=H0, port=P0, object_key=O1,
components=[CSC]},
TP1 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB1},
S1 = #'IOP_IOR'{type_id=T0, profiles=[TP1]},
- ?line S1 = iop_ior:create({1, 2}, T0, [H0], P0, -1, O1, [CSC], 0, 0),
+ S1 = iop_ior:create({1, 2}, T0, [H0], P0, -1, O1, [CSC], 0, 0),
O2 = "This is an external objectkey",
PB2 = #'IIOP_ProfileBody_1_1'{iiop_version=V, host=H0, port=P0, object_key=O2,
- components=[]},
+ components=[]},
TP2 = #'IOP_TaggedProfile'{tag=?TAG_INTERNET_IOP, profile_data=PB2},
S2 = #'IOP_IOR'{type_id=T0, profiles=[TP2]},
- ?line {'internal_registered', N0, _, _, M0} = iop_ior:get_key(S0),
- ?line {'internal', K1, _, _, M0} = iop_ior:get_key(S1),
- ?line {'external', {H0, P0, O2,_,_,
- #host_data{protocol = normal,
- ssl_data = undefined,
- version = {1,2},
- csiv2_mech = undefined,
- csiv2_statefull = false,
- charset = 65537,
- wcharset = 65801,
- ft_heartbeat = false,
- ft_primary = false,
- ft_group = undefined,
- csiv2_addresses = []}}}
+ {'internal_registered', N0, _, _, M0} = iop_ior:get_key(S0),
+ {'internal', K1, _, _, M0} = iop_ior:get_key(S1),
+ {'external', {H0, P0, O2,_,_,
+ #host_data{protocol = normal,
+ ssl_data = undefined,
+ version = {1,2},
+ csiv2_mech = undefined,
+ csiv2_statefull = false,
+ charset = 65537,
+ wcharset = 65801,
+ ft_heartbeat = false,
+ ft_primary = false,
+ ft_group = undefined,
+ csiv2_addresses = []}}}
= iop_ior:get_key(S2),
- ?line T0 = iop_ior:get_typeID(S0),
- ?line O0 = iop_ior:get_objkey(S0),
- ?line O1 = iop_ior:get_objkey(S1),
- ?line O2 = iop_ior:get_objkey(S2),
+ T0 = iop_ior:get_typeID(S0),
+ O0 = iop_ior:get_objkey(S0),
+ O1 = iop_ior:get_objkey(S1),
+ O2 = iop_ior:get_objkey(S2),
ok.
%%-----------------------------------------------------------------
diff --git a/lib/orber/test/ip_v4v6_interop_SUITE.erl b/lib/orber/test/ip_v4v6_interop_SUITE.erl
index cc5bcd71a5..48cc77eca7 100644
--- a/lib/orber/test/ip_v4v6_interop_SUITE.erl
+++ b/lib/orber/test/ip_v4v6_interop_SUITE.erl
@@ -59,7 +59,7 @@
%%----------------------------------------------------------------------
%% Macros
%%----------------------------------------------------------------------
--define(default_timeout, ?t:minutes(15)).
+-define(default_timeout, test_server:minutes(15)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -72,7 +72,7 @@
_ ->
io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
%%----------------------------------------------------------------------
@@ -93,7 +93,7 @@ init_per_testcase(_Case, Config) ->
end_per_testcase(_Case, Config) ->
orber:jump_stop(),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -126,8 +126,7 @@ end_per_group(_GroupName, Config) ->
%%====================================================================
%% Test Cases
%%====================================================================
-dual_ipv4v6(doc) ->
- ["ORB configured for supporting both IPv4 and IPv6"];
+%% ORB configured for supporting both IPv4 and IPv6
dual_ipv4v6(_Config) ->
%% Starting slave node with ipv4 configured ORB
diff --git a/lib/orber/test/lname_SUITE.erl b/lib/orber/test/lname_SUITE.erl
index a12f2b88a7..cb67cd6136 100644
--- a/lib/orber/test/lname_SUITE.erl
+++ b/lib/orber/test/lname_SUITE.erl
@@ -30,7 +30,7 @@
-include_lib("orber/COSS/CosNaming/CosNaming.hrl").
-include_lib("orber/COSS/CosNaming/lname.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
%%-----------------------------------------------------------------
%% External exports
@@ -75,12 +75,12 @@ end_per_group(_GroupName, Config) ->
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -89,34 +89,32 @@ end_per_testcase(_Case, Config) ->
%% Test Case: name component handling tests
%% Description:
%%-----------------------------------------------------------------
-lname_component(doc) -> ["Description", "more description"];
-lname_component(suite) -> [];
lname_component(_) ->
create_test(),
get_tests(),
set_tests().
create_test() ->
- ?line #'CosNaming_NameComponent'{} = lname_component:create(),
+ #'CosNaming_NameComponent'{} = lname_component:create(),
ok.
get_tests() ->
NC = #'CosNaming_NameComponent'{id="first", kind="apple"},
NC1 = #'CosNaming_NameComponent'{id="", kind="apple"},
NC2 = #'CosNaming_NameComponent'{id="first", kind=""},
- ?line "first" = lname_component:get_id(NC),
- ?line "apple" = lname_component:get_kind(NC),
- ?line {'EXCEPTION', #'LNameComponent_NotSet'{}} =
+ "first" = lname_component:get_id(NC),
+ "apple" = lname_component:get_kind(NC),
+ {'EXCEPTION', #'LNameComponent_NotSet'{}} =
(catch lname_component:get_id(NC1)),
- ?line {'EXCEPTION', #'LNameComponent_NotSet'{}} =
+ {'EXCEPTION', #'LNameComponent_NotSet'{}} =
(catch lname_component:get_kind(NC2)),
ok.
set_tests() ->
NC = #'CosNaming_NameComponent'{id="first", kind="apple"},
- ?line #'CosNaming_NameComponent'{id="second", kind="apple"} =
+ #'CosNaming_NameComponent'{id="second", kind="apple"} =
lname_component:set_id(NC, "second"),
- ?line #'CosNaming_NameComponent'{id="first", kind="pear"} =
+ #'CosNaming_NameComponent'{id="first", kind="pear"} =
lname_component:set_kind(NC, "pear"),
ok.
@@ -124,8 +122,6 @@ set_tests() ->
%% Test Case: name handling tests
%% Description:
%%-----------------------------------------------------------------
-lname(doc) -> ["Description", "more description"];
-lname(suite) -> [];
lname(_) ->
Name = [#'CosNaming_NameComponent'{id="first", kind="apple"},
#'CosNaming_NameComponent'{id="last", kind="peach"},
@@ -139,79 +135,79 @@ lname(_) ->
insert_tests(Name) ->
NC = #'CosNaming_NameComponent'{id="new", kind="pear"},
- ?line [NC, #'CosNaming_NameComponent'{id="first", kind="apple"},
+ [NC, #'CosNaming_NameComponent'{id="first", kind="apple"},
#'CosNaming_NameComponent'{id="last", kind="peach"},
#'CosNaming_NameComponent'{id="and", kind="plum"},
#'CosNaming_NameComponent'{id="always", kind="orange"}] =
lname:insert_component(Name, 1, NC),
- ?line [#'CosNaming_NameComponent'{id="first", kind="apple"},
+ [#'CosNaming_NameComponent'{id="first", kind="apple"},
#'CosNaming_NameComponent'{id="last", kind="peach"},
#'CosNaming_NameComponent'{id="and", kind="plum"},
#'CosNaming_NameComponent'{id="always", kind="orange"}, NC] =
lname:insert_component(Name, 5, NC),
- ?line [#'CosNaming_NameComponent'{id="first", kind="apple"},
+ [#'CosNaming_NameComponent'{id="first", kind="apple"},
#'CosNaming_NameComponent'{id="last", kind="peach"},
#'CosNaming_NameComponent'{id="and", kind="plum"}, NC,
#'CosNaming_NameComponent'{id="always", kind="orange"}] =
lname:insert_component(Name, 4, NC),
- ?line [#'CosNaming_NameComponent'{id="first", kind="apple"},
+ [#'CosNaming_NameComponent'{id="first", kind="apple"},
#'CosNaming_NameComponent'{id="last", kind="peach"}, NC,
#'CosNaming_NameComponent'{id="and", kind="plum"},
#'CosNaming_NameComponent'{id="always", kind="orange"}] =
lname:insert_component(Name, 3, NC),
- ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ {'EXCEPTION', #'LName_NoComponent'{}} =
(catch lname:insert_component(Name, 6, NC)),
- ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ {'EXCEPTION', #'LName_NoComponent'{}} =
(catch lname:insert_component(Name, 0, NC)),
- ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ {'EXCEPTION', #'LName_NoComponent'{}} =
(catch lname:insert_component(Name, -2, NC)),
ok.
get_tests(Name) ->
- ?line #'CosNaming_NameComponent'{id="first", kind="apple"} =
+ #'CosNaming_NameComponent'{id="first", kind="apple"} =
lname:get_component(Name, 1),
- ?line #'CosNaming_NameComponent'{id="always", kind="orange"} =
+ #'CosNaming_NameComponent'{id="always", kind="orange"} =
lname:get_component(Name, 4),
- ?line #'CosNaming_NameComponent'{id="and", kind="plum"} =
+ #'CosNaming_NameComponent'{id="and", kind="plum"} =
lname:get_component(Name, 3),
- ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ {'EXCEPTION', #'LName_NoComponent'{}} =
(catch lname:get_component(Name, 5)),
- ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ {'EXCEPTION', #'LName_NoComponent'{}} =
(catch lname:get_component(Name, 0)),
- ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ {'EXCEPTION', #'LName_NoComponent'{}} =
(catch lname:get_component(Name, -2)),
ok.
delete_tests(Name) ->
- ?line [#'CosNaming_NameComponent'{id="last", kind="peach"},
+ [#'CosNaming_NameComponent'{id="last", kind="peach"},
#'CosNaming_NameComponent'{id="and", kind="plum"},
#'CosNaming_NameComponent'{id="always", kind="orange"}] =
lname:delete_component(Name, 1),
- ?line [#'CosNaming_NameComponent'{id="first", kind="apple"},
+ [#'CosNaming_NameComponent'{id="first", kind="apple"},
#'CosNaming_NameComponent'{id="last", kind="peach"},
#'CosNaming_NameComponent'{id="and", kind="plum"}] =
lname:delete_component(Name, 4),
- ?line [#'CosNaming_NameComponent'{id="first", kind="apple"},
+ [#'CosNaming_NameComponent'{id="first", kind="apple"},
#'CosNaming_NameComponent'{id="last", kind="peach"},
#'CosNaming_NameComponent'{id="always", kind="orange"}] =
lname:delete_component(Name, 3),
- ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ {'EXCEPTION', #'LName_NoComponent'{}} =
(catch lname:delete_component(Name, 6)),
- ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ {'EXCEPTION', #'LName_NoComponent'{}} =
(catch lname:delete_component(Name, 0)),
- ?line {'EXCEPTION', #'LName_NoComponent'{}} =
+ {'EXCEPTION', #'LName_NoComponent'{}} =
(catch lname:delete_component(Name, -2)),
ok.
comparision_tests(Name) ->
- ?line true = lname:equal(Name, Name),
- ?line false = lname:equal(Name, lname:delete_component(Name, 2)),
- ?line true = lname:less_than(lname:delete_component(Name, 2), Name),
- ?line false = lname:less_than(Name, Name),
- ?line false = lname:less_than(Name, lname:delete_component(Name, 2)),
+ true = lname:equal(Name, Name),
+ false = lname:equal(Name, lname:delete_component(Name, 2)),
+ true = lname:less_than(lname:delete_component(Name, 2), Name),
+ false = lname:less_than(Name, Name),
+ false = lname:less_than(Name, lname:delete_component(Name, 2)),
ok.
convertion_tests(Name) ->
- ?line Name = lname:from_idl_form(Name),
- ?line Name = lname:to_idl_form(Name),
+ Name = lname:from_idl_form(Name),
+ Name = lname:to_idl_form(Name),
ok.
diff --git a/lib/orber/test/multi_ORB_SUITE.erl b/lib/orber/test/multi_ORB_SUITE.erl
index 9708111525..d739e47cc1 100644
--- a/lib/orber/test/multi_ORB_SUITE.erl
+++ b/lib/orber/test/multi_ORB_SUITE.erl
@@ -31,7 +31,7 @@
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
--define(default_timeout, ?t:minutes(15)).
+-define(default_timeout, test_server:minutes(15)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -44,7 +44,7 @@
_ ->
io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -159,7 +159,7 @@ init_per_testcase(_Case, Config) ->
init_all(Config).
init_ssl(Config) ->
- case ?config(crypto_started, Config) of
+ case proplists:get_value(crypto_started, Config) of
true ->
case orber_test_lib:ssl_version() of
no_ssl ->
@@ -172,7 +172,7 @@ init_ssl(Config) ->
end.
init_ssl_3(Config) ->
- case ?config(crypto_started, Config) of
+ case proplists:get_value(crypto_started, Config) of
true ->
case orber_test_lib:ssl_version() of
3 ->
@@ -200,7 +200,7 @@ end_per_testcase(_Case, Config) ->
orber:jump_stop(),
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -225,8 +225,7 @@ end_per_suite(Config) ->
%% API tests for ORB to ORB, no security
%%-----------------------------------------------------------------
-implicit_context_api(doc) -> ["IIOP Implicit Contex tests"];
-implicit_context_api(suite) -> [];
+%% IIOP Implicit Contex tests
implicit_context_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -257,9 +256,7 @@ implicit_context_api(_Config) ->
?match(true, lists:keymember(Loopback, 1, Conns)),
ok.
-implicit_context_roundtrip_api(doc) ->
- ["IIOP Implicit Contex roundtrip tests"];
-implicit_context_roundtrip_api(suite) -> [];
+%% IIOP Implicit Contex roundtrip tests
implicit_context_roundtrip_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -289,10 +286,7 @@ implicit_context_roundtrip_api(_Config) ->
?match(true, lists:keymember(Loopback, 1, Conns)),
ok.
-
-
-oneway_implicit_context_api(doc) -> ["IIOP Implicit Contex oneway tests"];
-oneway_implicit_context_api(suite) -> [];
+%% IIOP Implicit Contex oneway tests
oneway_implicit_context_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -326,9 +320,7 @@ oneway_implicit_context_api(_Config) ->
?match(true, lists:keymember(Loopback, 1, Conns)),
ok.
-
-pseudo_implicit_context_api(doc) -> ["IIOP Implicit Contex tests (via pseudo object)"];
-pseudo_implicit_context_api(suite) -> [];
+%% IIOP Implicit Contex tests (via pseudo object)
pseudo_implicit_context_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -358,9 +350,7 @@ pseudo_implicit_context_api(_Config) ->
?match(true, lists:keymember(Loopback, 1, Conns)),
ok.
-pseudo_two_implicit_context_api(doc) ->
- ["IIOP two Implicit Contex tests (via pseudo object)"];
-pseudo_two_implicit_context_api(suite) -> [];
+%% IIOP two Implicit Contex tests (via pseudo object)
pseudo_two_implicit_context_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -394,8 +384,7 @@ pseudo_two_implicit_context_api(_Config) ->
?match(true, lists:keymember(Loopback, 1, Conns)),
ok.
-oneway_pseudo_implicit_context_api(doc) -> ["IIOP Implicit Contex tests (via pseudo object oneway)"];
-oneway_pseudo_implicit_context_api(suite) -> [];
+%% IIOP Implicit Contex tests (via pseudo object oneway)
oneway_pseudo_implicit_context_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -425,9 +414,7 @@ oneway_pseudo_implicit_context_api(_Config) ->
?match(true, lists:keymember(Loopback, 1, Conns)),
ok.
-oneway_pseudo_two_implicit_context_api(doc) ->
- ["IIOP two Implicit Contex tests (via pseudo object oneway)"];
-oneway_pseudo_two_implicit_context_api(suite) -> [];
+%% IIOP two Implicit Contex tests (via pseudo object oneway)
oneway_pseudo_two_implicit_context_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -464,8 +451,7 @@ oneway_pseudo_two_implicit_context_api(_Config) ->
-multiple_accept_api(doc) -> ["IIOP Multiple Accept tests"];
-multiple_accept_api(suite) -> [];
+%% IIOP Multiple Accept tests
multiple_accept_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -537,10 +523,9 @@ multiple_accept_api(_Config) ->
ok.
-proxy_interface_api(doc) -> ["IIOP Proxy Interface tests",
- "This case test if the server ORB use the correct",
- "interface when exporting IOR:s"];
-proxy_interface_api(suite) -> [];
+%% IIOP Proxy Interface tests
+%% This case test if the server ORB use the correct
+%% interface when exporting IOR:s
proxy_interface_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -557,10 +542,9 @@ proxy_interface_api(_Config) ->
iop_ior:get_key(IOR2)),
ok.
-proxy_interface_ipv6_api(doc) -> ["IIOP Proxy Interface tests",
- "This case test if the server ORB use the correct",
- "IPv6 interface when exporting IOR:s"];
-proxy_interface_ipv6_api(suite) -> [];
+%% IIOP Proxy Interface tests
+%% This case test if the server ORB use the correct
+%% IPv6 interface when exporting IOR:s
proxy_interface_ipv6_api(_Config) ->
case orber_test_lib:version_ok() of
true ->
@@ -593,10 +577,9 @@ proxy_interface_ipv6_api2() ->
orber_test_lib:remote_apply(ClientNode, iop_ior, get_key, [IOR2])),
ok.
-local_interface_api(doc) -> ["IIOP Local Interface tests",
- "This case test if the server ORB use the correct",
- "local interface when connecting to another ORB"];
-local_interface_api(suite) -> [];
+%% IIOP Local Interface tests
+%% This case test if the server ORB use the correct
+%% local interface when connecting to another ORB
local_interface_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -627,11 +610,9 @@ local_interface_api(_Config) ->
ok.
-local_interface_ctx_override_api(doc) ->
- ["IIOP Local Interface tests",
- "This case test if the server ORB use the correct",
- "local interface when connecting to another ORB"];
-local_interface_ctx_override_api(suite) -> [];
+%% IIOP Local Interface tests
+%% This case test if the server ORB use the correct
+%% local interface when connecting to another ORB
local_interface_ctx_override_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -664,11 +645,9 @@ local_interface_ctx_override_api(_Config) ->
ok.
-local_interface_acl_override_api(doc) ->
- ["IIOP Local Interface tests",
- "This case test if the server ORB use the correct",
- "local interface when connecting to another ORB"];
-local_interface_acl_override_api(suite) -> [];
+%% IIOP Local Interface tests
+%% This case test if the server ORB use the correct
+%% local interface when connecting to another ORB
local_interface_acl_override_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -708,9 +687,8 @@ local_interface_acl_override_api(_Config) ->
ok.
-iiop_timeout_api(doc) -> ["IIOP TIMEOUT API tests",
- "This case test if timeout configuration behaves correctly"];
-iiop_timeout_api(suite) -> [];
+%% IIOP TIMEOUT API tests
+%% This case test if timeout configuration behaves correctly
iiop_timeout_api(_Config) ->
%% Install two secure orber.
@@ -754,9 +732,8 @@ iiop_timeout_api(_Config) ->
[timeout])),
ok.
-iiop_timeout_added_api(doc) -> ["IIOP TIMEOUT API tests",
- "This case test if timeout configuration behaves correctly"];
-iiop_timeout_added_api(suite) -> [];
+%% IIOP TIMEOUT API tests
+%% This case test if timeout configuration behaves correctly
iiop_timeout_added_api(_Config) ->
IP = orber_test_lib:get_host(),
{ok, Node, _Host} = ?match({ok,_,_}, orber_test_lib:js_node([])),
@@ -791,12 +768,10 @@ iiop_timeout_added_api(_Config) ->
%% API tests for ORB to ORB using pseudo call/cast, no security
%%-----------------------------------------------------------------
-multi_pseudo_orber_api(doc) ->
- ["MULTI ORB PSEUDO API tests",
- "This case test if data encode/decode (IIOP) for pseudo objects",
- "produce the correct result, i.e., the test_server echos",
- "the input parameter or an exception is raised (MARSHAL)."];
-multi_pseudo_orber_api(suite) -> [];
+%% MULTI ORB PSEUDO API tests
+%% This case test if data encode/decode (IIOP) for pseudo objects
+%% produce the correct result, i.e., the test_server echos
+%% the input parameter or an exception is raised (MARSHAL)
multi_pseudo_orber_api(_Config) ->
%% --- Create a slave-node ---
{ok, Node, Host} =
@@ -840,9 +815,7 @@ multi_pseudo_orber_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB with local flags definition set.
%%-----------------------------------------------------------------
-flags_added_api(doc) ->
- ["MULTI ORB PSEUDO with local flags definition set"];
-flags_added_api(suite) -> [];
+%% MULTI ORB PSEUDO with local flags definition set
flags_added_api(_Config) ->
%% --- Create a slave-node ---
IP = orber_test_lib:get_host(),
@@ -880,9 +853,7 @@ flags_added_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB with limited concurrent requests
%%-----------------------------------------------------------------
-max_requests_api(doc) ->
- ["MULTI ORB PSEUDO with limited concurrent requests tests"];
-max_requests_api(suite) -> [];
+%% MULTI ORB PSEUDO with limited concurrent requests tests
max_requests_api(_Config) ->
%% --- Create a slave-node ---
{ok, Node, Host} =
@@ -890,9 +861,7 @@ max_requests_api(_Config) ->
Port = orber_test_lib:remote_apply(Node, orber, iiop_port, []),
max_requests(Node, Host, Port).
-max_requests_added_api(doc) ->
- ["MULTI ORB PSEUDO with limited concurrent requests tests"];
-max_requests_added_api(suite) -> [];
+%% MULTI ORB PSEUDO with limited concurrent requests tests
max_requests_added_api(_Config) ->
%% --- Create a slave-node ---
[IP] = ?match([_], orber:host()),
@@ -940,9 +909,7 @@ max_requests(Node, Host, Port) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB with limited concurrent connections
%%-----------------------------------------------------------------
-max_connections_api(doc) ->
- ["MULTI ORB PSEUDO with limited concurrent connections tests"];
-max_connections_api(suite) -> [];
+%% MULTI ORB PSEUDO with limited concurrent connections tests
max_connections_api(_Config) ->
%% --- Create a slave-node ---
{ok, ServerNode, ServerHost} =
@@ -1012,9 +979,7 @@ max_connections_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for terminating connection by using an IOR.
%%-----------------------------------------------------------------
-close_connections_api(doc) ->
- ["Close outgoing connection "];
-close_connections_api(suite) -> [];
+%% Close outgoing connection
close_connections_api(_Config) ->
%% --- Create a slave-node ---
IP = orber_test_lib:get_host(),
@@ -1047,11 +1012,9 @@ close_connections_api(_Config) ->
ok.
-close_connections_local_interface_api(doc) ->
- ["IIOP Local Interface disconnect tests",
- "This case test if the server ORB use the correct",
- "local interface when connecting to another ORB"];
-close_connections_local_interface_api(suite) -> [];
+%% IIOP Local Interface disconnect tests
+%% This case test if the server ORB use the correct
+%% local interface when connecting to another ORB
close_connections_local_interface_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -1083,11 +1046,9 @@ close_connections_local_interface_api(_Config) ->
ok.
-close_connections_local_interface_ctx_override_api(doc) ->
- ["IIOP Local Interface disconnect tests",
- "This case test if the server ORB use the correct",
- "local interface when connecting to another ORB"];
-close_connections_local_interface_ctx_override_api(suite) -> [];
+%% IIOP Local Interface disconnect tests
+%% This case test if the server ORB use the correct
+%% local interface when connecting to another ORB
close_connections_local_interface_ctx_override_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -1147,11 +1108,9 @@ close_connections_local_interface_ctx_override_api(_Config) ->
iiop_connections, [out])),
ok.
-close_connections_alt_iiop_addr_api(doc) ->
- ["IIOP alternate address disconnect tests",
- "This case test if the server ORB use the correct",
- "local interface when connecting to another ORB"];
-close_connections_alt_iiop_addr_api(suite) -> [];
+%% IIOP alternate address disconnect tests
+%% This case test if the server ORB use the correct
+%% local interface when connecting to another ORB
close_connections_alt_iiop_addr_api(_Config) ->
%% --- Create a slave-node ---
Loopback = orber_test_lib:get_loopback_interface(),
@@ -1187,11 +1146,9 @@ close_connections_alt_iiop_addr_api(_Config) ->
iiop_connections, [in])),
ok.
-close_connections_multiple_profiles_api(doc) ->
- ["IIOP alternate address disconnect tests",
- "This case test if the server ORB use the correct",
- "local interface when connecting to another ORB"];
-close_connections_multiple_profiles_api(suite) -> [];
+%% IIOP alternate address disconnect tests
+%% This case test if the server ORB use the correct
+%% local interface when connecting to another ORB
close_connections_multiple_profiles_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -1228,9 +1185,7 @@ close_connections_multiple_profiles_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB with iiop_packet_size set
%%-----------------------------------------------------------------
-max_packet_size_exceeded_api(doc) ->
- ["Exceed the maximum request size"];
-max_packet_size_exceeded_api(suite) -> [];
+%% Exceed the maximum request size
max_packet_size_exceeded_api(_Config) ->
case catch gen_tcp:listen(0, [{packet,cdr}, {packet_size, 14}]) of
{'EXIT',badarg} ->
@@ -1250,9 +1205,7 @@ max_packet_size_exceeded_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB with iiop_packet_size set
%%-----------------------------------------------------------------
-max_packet_size_ok_api(doc) ->
- ["Not exceed the maximum request size"];
-max_packet_size_ok_api(suite) -> [];
+%% Not exceed the maximum request size
max_packet_size_ok_api(_Config) ->
case catch gen_tcp:listen(0, [{packet,cdr}, {packet_size, 14}]) of
{'EXIT',badarg} ->
@@ -1274,9 +1227,7 @@ max_packet_size_ok_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB, no security
%%-----------------------------------------------------------------
-
-light_ifr_api(doc) -> ["LIGHT IFR ORB API tests"];
-light_ifr_api(suite) -> [];
+%% LIGHT IFR ORB API tests
light_ifr_api(_Config) ->
{ok, ClientNode, _ClientHost} =
@@ -1349,11 +1300,9 @@ light_ifr_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB, no security
%%-----------------------------------------------------------------
-
-light_orber_api(doc) -> ["LIGHT ORB API tests",
- "This case test if a light Orber can communicate correctly",
- "with an fully installed Orber."];
-light_orber_api(suite) -> [];
+%% LIGHT ORB API tests
+%% This case test if a light Orber can communicate correctly
+%% with an fully installed Orber.
light_orber_api(_Config) ->
%% --- Create a slave-node ---
LocalHost = net_adm:localhost(),
@@ -1398,13 +1347,11 @@ light_orber_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB, no security
%%-----------------------------------------------------------------
-
-light_orber2_api(doc) -> ["LIGHT ORB API tests",
- "This case test if a light Orber can communicate correctly",
- "with an fully installed Orber. This case test if we can",
- "start as lightweight without first setting the environment",
- "variable"];
-light_orber2_api(suite) -> [];
+%% LIGHT ORB API tests
+%% This case test if a light Orber can communicate correctly
+%% with an fully installed Orber. This case test if we can
+%% start as lightweight without first setting the environment
+%% variable
light_orber2_api(_Config) ->
%% --- Create a slave-node ---
LocalHost = net_adm:localhost(),
@@ -1450,12 +1397,10 @@ light_orber2_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB, no security
%%-----------------------------------------------------------------
-
-multi_orber_api(doc) -> ["MULTI ORB API tests",
- "This case test if data encode/decode (IIOP)",
- "produce the correct result, i.e., the test_server echos",
- "the input parameter or an exception is raised (MARSHAL)."];
-multi_orber_api(suite) -> [];
+%% MULTI ORB API tests
+%% This case test if data encode/decode (IIOP)
+%% produce the correct result, i.e., the test_server echos
+%% the input parameter or an exception is raised (MARSHAL).
multi_orber_api(_Config) ->
NewICObj1 = ?match({_,_,_,_,_,_}, orber_test_server:oe_create([])),
@@ -1535,12 +1480,11 @@ multi_orber_api(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB, no security, using basic interceptors
%%-----------------------------------------------------------------
-basic_PI_api(doc) -> ["MULTI ORB API tests",
- "This case test if data encode/decode (IIOP)",
- "produce the correct result when using basic interceptors,",
- "i.e., the test_server echos",
- "the input parameter or an exception is raised (MARSHAL)."];
-basic_PI_api(suite) -> [];
+%% MULTI ORB API tests
+%% This case test if data encode/decode (IIOP)
+%% produce the correct result when using basic interceptors
+%% i.e., the test_server echos the input parameter or
+%% an exception is raised (MARSHAL).
basic_PI_api(_Config) ->
%% Change configuration to use Basic Interceptors.
orber:configure_override(interceptors, {native, [orber_test_lib]}),
@@ -1612,11 +1556,10 @@ basic_PI_api(_Config) ->
%% API tests for ORB to ORB, ssl security depth 1
%%-----------------------------------------------------------------
-ssl_1_multi_orber_api(doc) -> ["SECURE MULTI ORB API tests (SSL depth 1)",
- "This case set up two secure orbs and test if they can",
- "communicate. The case also test to access one of the",
- "secure orbs which must raise a NO_PERMISSION exception."];
-ssl_1_multi_orber_api(suite) -> [];
+%% SECURE MULTI ORB API tests (SSL depth 1)
+%% This case set up two secure orbs and test if they can
+%% communicate. The case also test to access one of the
+%% secure orbs which must raise a NO_PERMISSION exception.
ssl_1_multi_orber_api(_Config) ->
ServerOptions = orber_test_lib:get_options_old(iiop_ssl, server,
1, [{iiop_ssl_port, 0}]),
@@ -1625,11 +1568,10 @@ ssl_1_multi_orber_api(_Config) ->
ssl_suite(ServerOptions, ClientOptions).
-ssl_1_multi_orber_generation_3_api(doc) -> ["SECURE MULTI ORB API tests (SSL depth 1)",
- "This case set up two secure orbs and test if they can",
- "communicate. The case also test to access one of the",
- "secure orbs which must raise a NO_PERMISSION exception."];
-ssl_1_multi_orber_generation_3_api(suite) -> [];
+%% SECURE MULTI ORB API tests (SSL depth 1)
+%% This case set up two secure orbs and test if they can
+%% communicate. The case also test to access one of the
+%% secure orbs which must raise a NO_PERMISSION exception.
ssl_1_multi_orber_generation_3_api(_Config) ->
ServerOptions = orber_test_lib:get_options(iiop_ssl, server,
@@ -1644,11 +1586,10 @@ ssl_1_multi_orber_generation_3_api(_Config) ->
%% API tests for ORB to ORB, ssl security depth 2
%%-----------------------------------------------------------------
-ssl_2_multi_orber_api(doc) -> ["SECURE MULTI ORB API tests (SSL depth 2)",
- "This case set up two secure orbs and test if they can",
- "communicate. The case also test to access one of the",
- "secure orbs which must raise a NO_PERMISSION exception."];
-ssl_2_multi_orber_api(suite) -> [];
+%% SECURE MULTI ORB API tests (SSL depth 2)
+%% These case set up two secure orbs and test if they can
+%% communicate. They also test to access one of the
+%% secure orbs which must raise a NO_PERMISSION exception.
ssl_2_multi_orber_api(_Config) ->
ServerOptions = orber_test_lib:get_options_old(iiop_ssl, server,
@@ -1657,12 +1598,6 @@ ssl_2_multi_orber_api(_Config) ->
2, [{iiop_ssl_port, 0}]),
ssl_suite(ServerOptions, ClientOptions).
-
-ssl_2_multi_orber_generation_3_api(doc) -> ["SECURE MULTI ORB API tests (SSL depth 2)",
- "This case set up two secure orbs and test if they can",
- "communicate. The case also test to access one of the",
- "secure orbs which must raise a NO_PERMISSION exception."];
-ssl_2_multi_orber_generation_3_api(suite) -> [];
ssl_2_multi_orber_generation_3_api(_Config) ->
ServerOptions = orber_test_lib:get_options(iiop_ssl, server,
@@ -1676,17 +1611,16 @@ ssl_2_multi_orber_generation_3_api(_Config) ->
%% API tests for ORB to ORB, ssl security depth 2
%%-----------------------------------------------------------------
-ssl_reconfigure_api(doc) -> ["SECURE MULTI ORB API tests (SSL depth 2)",
- "This case set up two secure orbs and test if they can",
- "communicate. The case also test to access one of the",
- "secure orbs which must raise a NO_PERMISSION exception."];
-ssl_reconfigure_api(suite) -> [];
+%% SECURE MULTI ORB API tests (SSL depth 2)
+%% These case set up two secure orbs and test if they can
+%% communicate. They also test to access one of the
+%% secure orbs which must raise a NO_PERMISSION exception.
ssl_reconfigure_api(_Config) ->
ssl_reconfigure_old([]).
-ssl_reconfigure_generation_3_api_old(_Config) ->
- ssl_reconfigure_old([{ssl_generation, 3}]).
+% ssl_reconfigure_generation_3_api_old(_Config) ->
+% ssl_reconfigure_old([{ssl_generation, 3}]).
ssl_reconfigure_old(ExtraSSLOptions) ->
@@ -1737,11 +1671,6 @@ ssl_reconfigure_old(ExtraSSLOptions) ->
print, [Obj])).
-ssl_reconfigure_generation_3_api(doc) -> ["SECURE MULTI ORB API tests (SSL depth 2)",
- "This case set up two secure orbs and test if they can",
- "communicate. The case also test to access one of the",
- "secure orbs which must raise a NO_PERMISSION exception."];
-ssl_reconfigure_generation_3_api(suite) -> [];
ssl_reconfigure_generation_3_api(_Config) ->
ssl_reconfigure([{ssl_generation, 3}]).
@@ -1795,18 +1724,6 @@ ssl_reconfigure(ExtraSSLOptions) ->
print, [Obj])).
-%%-----------------------------------------------------------------
-%% API tests for Orber to Java ORB, no security
-%%-----------------------------------------------------------------
-
-%orber_java_api(doc) -> ["ERLANG-ORB <-> JAVA-ORB API tests",
-% "This case test if data encode/decode (IIOP)",
-% "produce the correct result, i.e., the test_server echos",
-% "the input parameter or an exception is raised (MARSHAL)."];
-%orber_java_api(suite) -> [];
-%orber_java_api(Config) ->
-% ok.
-
%%------------------------------------------------------------
%% function : ssl_suite
%% Arguments: Config
@@ -1814,7 +1731,6 @@ ssl_reconfigure(ExtraSSLOptions) ->
%% Returns : ok
%% Effect :
%%------------------------------------------------------------
-
ssl_suite(ServerOptions, ClientOptions) ->
{ok, ServerNode, ServerHost} =
@@ -1861,8 +1777,6 @@ ssl_suite(ServerOptions, ClientOptions) ->
%%-----------------------------------------------------------------
%% iiop_setup_connection_timeout API tests for ORB to ORB.
%%-----------------------------------------------------------------
-setup_connection_timeout_api(doc) -> ["iiop_setup_connection_timeout API tests for ORB to ORB."];
-setup_connection_timeout_api(suite) -> [];
setup_connection_timeout_api(_Config) ->
?match(ok, application:set_env(orber, iiop_backlog, 0)),
%% Wait to be sure that the configuration has kicked in.
@@ -1886,9 +1800,6 @@ setup_connection_timeout_api(_Config) ->
%%-----------------------------------------------------------------
%% iiop_setup_connection_timeout API tests for ORB to ORB.
%%-----------------------------------------------------------------
-setup_multi_connection_timeout_api(doc) ->
- ["iiop_multi_setup_connection_timeout API tests for ORB to ORB."];
-setup_multi_connection_timeout_api(suite) -> [];
setup_multi_connection_timeout_api(_Config) ->
?match(ok, application:set_env(orber, iiop_backlog, 0)),
%% Wait to be sure that the configuration has kicked in.
@@ -1911,9 +1822,6 @@ setup_multi_connection_timeout_api(_Config) ->
?match(ok, application:set_env(orber, iiop_out_ports, undefined)),
ok.
-setup_multi_connection_timeout_attempts_api(doc) ->
- ["iiop_multi_setup_connection_timeout API tests for ORB to ORB."];
-setup_multi_connection_timeout_attempts_api(suite) -> [];
setup_multi_connection_timeout_attempts_api(_Config) ->
?match(ok, application:set_env(orber, iiop_backlog, 0)),
%% Wait to be sure that the configuration has kicked in.
@@ -1937,9 +1845,6 @@ setup_multi_connection_timeout_attempts_api(_Config) ->
?match(ok, application:set_env(orber, iiop_out_ports, undefined)),
ok.
-setup_multi_connection_timeout_random_api(doc) ->
- ["iiop_multi_setup_connection_timeout API tests for ORB to ORB."];
-setup_multi_connection_timeout_random_api(suite) -> [];
setup_multi_connection_timeout_random_api(_Config) ->
?match(ok, application:set_env(orber, iiop_backlog, 0)),
%% Wait to be sure that the configuration has kicked in.
@@ -1966,8 +1871,6 @@ setup_multi_connection_timeout_random_api(_Config) ->
%%-----------------------------------------------------------------
%% Sending an incorrect header to the server-side ORB.
%%-----------------------------------------------------------------
-bad_giop_header_api(doc) -> ["Sending an incorrect header to the server-side ORB."];
-bad_giop_header_api(suite) -> [];
bad_giop_header_api(_Config) ->
orber:configure_override(interceptors, {native,[orber_iiop_tracer]}),
orber:configure(orber_debug_level, 10),
@@ -1996,8 +1899,6 @@ bad_giop_header_api(_Config) ->
-define(FRAG_4, <<71,73,79,80,1,2,0,7,0,0,0,5,0,0,0,?REQUEST_ID,0>>).
-fragments_server_api(doc) -> ["fragments API tests for server-side ORB."];
-fragments_server_api(suite) -> [];
fragments_server_api(_Config) ->
%% --- Create a slave-node ---
{ok, Node, Host} =
@@ -2054,8 +1955,6 @@ fragments_server_api(_Config) ->
%%-----------------------------------------------------------------
%% Fragmented IIOP tests (Server-side). Exceeding Maximum.
%%-----------------------------------------------------------------
-fragments_max_server_api(doc) -> ["Maximum fragments API tests for server-side ORB."];
-fragments_max_server_api(suite) -> [];
fragments_max_server_api(_Config) ->
%% --- Create a slave-node ---
IP = orber_test_lib:get_host(),
@@ -2065,8 +1964,6 @@ fragments_max_server_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
fragments_max_server(ServerNode, IP, ServerPort).
-fragments_max_server_added_api(doc) -> ["Maximum fragments API tests for server-side ORB."];
-fragments_max_server_added_api(suite) -> [];
fragments_max_server_added_api(_Config) ->
%% --- Create a slave-node ---
IP = orber_test_lib:get_host(),
@@ -2128,8 +2025,6 @@ fragments_max_server(ServerNode, ServerHost, ServerPort) ->
%%-----------------------------------------------------------------
%% Fragmented IIOP tests (Client-side).
%%-----------------------------------------------------------------
-fragments_client_api(doc) -> ["fragments API tests for client-side ORB."];
-fragments_client_api(suite) -> [];
fragments_client_api(_Config) ->
Any = #any{typecode = {tk_string,0},
value = "123"},
@@ -2147,11 +2042,6 @@ fragments_client_api(_Config) ->
orber:configure(orber_debug_level, 0),
ok.
-%%-----------------------------------------------------------------
-%% Fragmented IIOP tests (Client-side).
-%%-----------------------------------------------------------------
-bad_fragment_id_client_api(doc) -> ["fragments API tests for client-side ORB."];
-bad_fragment_id_client_api(suite) -> [];
bad_fragment_id_client_api(_Config) ->
application:set_env(orber, interceptors, {native,[orber_iiop_tracer]}),
orber:configure(orber_debug_level, 10),
@@ -2171,8 +2061,6 @@ bad_fragment_id_client_api(_Config) ->
%%-----------------------------------------------------------------
%% Non-existing request id
%%-----------------------------------------------------------------
-bad_id_cancel_request_api(doc) -> ["Description", "more description"];
-bad_id_cancel_request_api(suite) -> [];
bad_id_cancel_request_api(Config) when is_list(Config) ->
Req10 = cdr_encode:enc_cancel_request(#giop_env{version = {1, 0},
request_id = 556}),
diff --git a/lib/orber/test/naming_context_SUITE.erl b/lib/orber/test/naming_context_SUITE.erl
index 12d93caf9f..2afede287a 100644
--- a/lib/orber/test/naming_context_SUITE.erl
+++ b/lib/orber/test/naming_context_SUITE.erl
@@ -31,7 +31,7 @@
-include_lib("orber/src/orber_iiop.hrl").
-include_lib("orber/include/corba.hrl").
--define(default_timeout, ?t:minutes(5)).
+-define(default_timeout, test_server:minutes(5)).
%%-----------------------------------------------------------------
%% External exports
@@ -68,7 +68,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -102,7 +102,7 @@ cases() ->
init_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
orber:jump_start(0),
[{watchdog, Dog}|Config].
@@ -111,7 +111,7 @@ end_per_testcase(_Case, Config) ->
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
orber:jump_stop(),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -125,139 +125,134 @@ end_per_suite(Config) ->
%% Test Case: name handling tests
%% Description:
%%-----------------------------------------------------------------
-name_context(doc) -> ["Description", "more description"];
-name_context(suite) -> [];
name_context(_) ->
?REMAP_EXCEPT(name_context_run()).
name_context_run() ->
- ?line Ns = corba:resolve_initial_references("NameService"),
+ Ns = corba:resolve_initial_references("NameService"),
?match({'EXCEPTION', #'NO_PERMISSION'{}},
'CosNaming_NamingContextExt':destroy(Ns)),
%% Create a test context.
- ?line Tc = 'CosNaming_NamingContext':bind_new_context(Ns,
+ Tc = 'CosNaming_NamingContext':bind_new_context(Ns,
[#'CosNaming_NameComponent'{id="testcontext",
kind=""}]),
%% Start testing
- ?line 'CosNaming_NamingContext':bind(Tc, [#'CosNaming_NameComponent'
+ 'CosNaming_NamingContext':bind(Tc, [#'CosNaming_NameComponent'
{id="hej",
kind=""}], Ns),
- ?line Ns = 'CosNaming_NamingContext':resolve(Tc,
+ Ns = 'CosNaming_NamingContext':resolve(Tc,
[#'CosNaming_NameComponent'{id="hej",
kind=""}]),
- ?line Nc = 'CosNaming_NamingContext':new_context(Tc),
- ?line 'CosNaming_NamingContext':bind(Tc, [#'CosNaming_NameComponent'
+ Nc = 'CosNaming_NamingContext':new_context(Tc),
+ 'CosNaming_NamingContext':bind(Tc, [#'CosNaming_NameComponent'
{id="stop",
kind=""}], Nc),
- ?line Nc = 'CosNaming_NamingContext':resolve(Tc,
+ Nc = 'CosNaming_NamingContext':resolve(Tc,
[#'CosNaming_NameComponent'{id="stop",
kind=""}]),
- ?line {'EXCEPTION', E0} =
+ {'EXCEPTION', E0} =
(catch 'CosNaming_NamingContext':bind(Tc,
[#'CosNaming_NameComponent'{id="stop",
kind=""}], Ns)),
- ?line ok = 'CosNaming_NamingContext':rebind(Tc,
+ ok = 'CosNaming_NamingContext':rebind(Tc,
[#'CosNaming_NameComponent'{id="stop",
kind=""}], Ns),
- ?line {'CosNaming_NamingContext_AlreadyBound', _} = E0,
- ?line 'CosNaming_NamingContext':bind_context(Tc,
+ {'CosNaming_NamingContext_AlreadyBound', _} = E0,
+ 'CosNaming_NamingContext':bind_context(Tc,
[#'CosNaming_NameComponent'{id="evaluate",
kind=""}], Nc),
- ?line Nc =
+ Nc =
'CosNaming_NamingContext':resolve(Tc,
[#'CosNaming_NameComponent'{id="evaluate",
kind=""}]),
- ?line 'CosNaming_NamingContext':bind(Tc,
+ 'CosNaming_NamingContext':bind(Tc,
[#'CosNaming_NameComponent'{id="evaluate",
kind=""},
#'CosNaming_NameComponent'{id="hej",
kind=""}], Ns),
- ?line ok = 'CosNaming_NamingContext':rebind(Tc,
+ ok = 'CosNaming_NamingContext':rebind(Tc,
[#'CosNaming_NameComponent'{id="evaluate",
kind=""},
#'CosNaming_NameComponent'{id="hej",
kind=""}], Ns),
- ?line Ns = 'CosNaming_NamingContext':resolve(Tc,
+ Ns = 'CosNaming_NamingContext':resolve(Tc,
[#'CosNaming_NameComponent'{id="evaluate",
kind=""},
#'CosNaming_NameComponent'{id="hej",
kind=""}]),
- ?line {'EXCEPTION', E1} =
+ {'EXCEPTION', E1} =
(catch 'CosNaming_NamingContext':resolve(Tc,
[#'CosNaming_NameComponent'{id="stop",
kind=""},
#'CosNaming_NameComponent'{id="hej",
kind=""}])),
- ?line ?match(ok, orber_diagnostics:nameservice()),
+ ?match(ok, orber_diagnostics:nameservice()),
- ?line {'CosNaming_NamingContext_CannotProceed', _,_,_} = E1,
- ?line {'EXCEPTION', E2} = (catch 'CosNaming_NamingContext':destroy(Nc)),
- ?line {'CosNaming_NamingContext_NotEmpty', _} = E2,
- ?line ok = 'CosNaming_NamingContext':unbind(Tc,
+ {'CosNaming_NamingContext_CannotProceed', _,_,_} = E1,
+ {'EXCEPTION', E2} = (catch 'CosNaming_NamingContext':destroy(Nc)),
+ {'CosNaming_NamingContext_NotEmpty', _} = E2,
+ ok = 'CosNaming_NamingContext':unbind(Tc,
[#'CosNaming_NameComponent'{id="evaluate",
kind=""},
#'CosNaming_NameComponent'{id="hej",
kind=""}]),
- ?line ok = 'CosNaming_NamingContext':destroy(Nc),
- ?line ok = 'CosNaming_NamingContext':unbind(Tc,
+ ok = 'CosNaming_NamingContext':destroy(Nc),
+ ok = 'CosNaming_NamingContext':unbind(Tc,
[#'CosNaming_NameComponent'{id="evaluate",
kind=""}]),
- ?line ok = 'CosNaming_NamingContext':unbind(Tc,
+ ok = 'CosNaming_NamingContext':unbind(Tc,
[#'CosNaming_NameComponent'{id="stop",
kind=""}]),
- ?line ok = 'CosNaming_NamingContext':unbind(Tc,
+ ok = 'CosNaming_NamingContext':unbind(Tc,
[#'CosNaming_NameComponent'{id="hej",
kind=""}]),
- ?line case 'CosNaming_NamingContext':list(Tc, 3) of
+ case 'CosNaming_NamingContext':list(Tc, 3) of
{ok, [], ?ORBER_NIL_OBJREF} ->
ok;
_ ->
exit(not_empty)
end,
- ?line ok = 'CosNaming_NamingContext':unbind(Ns,
+ ok = 'CosNaming_NamingContext':unbind(Ns,
[#'CosNaming_NameComponent'{id="testcontext",
kind=""}]),
- ?line ok = 'CosNaming_NamingContext':destroy(Tc),
+ ok = 'CosNaming_NamingContext':destroy(Tc),
ok.
-check_list(doc) ->
- ["Check that the CosNaming::NamingContext::list()",
- "returns ok.",
- "Own Id: OTP-2023"];
-check_list(suite) -> [];
+%% Check that the CosNaming::NamingContext::list() returns ok.
+%% Own Id: OTP-2023
check_list(Config) when is_list(Config) ->
?REMAP_EXCEPT(check_list_run(Config)).
check_list_run(_Config) ->
create_default_contexts(),
- ?line Ns = corba:resolve_initial_references("NameService"),
- ?line {_, BL, _} = ?match({ok, _, ?ORBER_NIL_OBJREF},
+ Ns = corba:resolve_initial_references("NameService"),
+ {_, BL, _} = ?match({ok, _, ?ORBER_NIL_OBJREF},
'CosNaming_NamingContext':list(Ns, 256)),
FF = fun(X) -> XX = hd(X#'CosNaming_Binding'.binding_name),
XX#'CosNaming_NameComponent'.id end,
L = lists:sort(lists:map(FF, BL)),
- ?line ["host", "workgroup"] = L,
+ ["host", "workgroup"] = L,
%% Test next_n/2
- ?line {_, _, BI} = ?match({ok, [], _BI}, 'CosNaming_NamingContext':list(Ns, 0)),
- ?line ?match({true, []}, 'CosNaming_BindingIterator':next_n(BI, 0)),
- ?line ?match({true, [_]}, 'CosNaming_BindingIterator':next_n(BI, 1)),
- ?line ?match({false, [_]}, 'CosNaming_BindingIterator':next_n(BI, 1)),
- ?line ?match({false, []}, 'CosNaming_BindingIterator':next_n(BI, 1)),
- ?line ?match(ok, 'CosNaming_BindingIterator':destroy(BI)),
-
- ?line {_, _, BI2} = ?match({ok, [], _BI2}, 'CosNaming_NamingContext':list(Ns, 0)),
- ?line ?match({true, _}, 'CosNaming_BindingIterator':next_one(BI2)),
- ?line ?match({true, _}, 'CosNaming_BindingIterator':next_one(BI2)),
- ?line ?match({false, _}, 'CosNaming_BindingIterator':next_one(BI2)),
- ?line ?match(ok, 'CosNaming_BindingIterator':destroy(BI2)),
- ?line ?match(ok, orber_diagnostics:nameservice()),
+ {_, _, BI} = ?match({ok, [], _BI}, 'CosNaming_NamingContext':list(Ns, 0)),
+ ?match({true, []}, 'CosNaming_BindingIterator':next_n(BI, 0)),
+ ?match({true, [_]}, 'CosNaming_BindingIterator':next_n(BI, 1)),
+ ?match({false, [_]}, 'CosNaming_BindingIterator':next_n(BI, 1)),
+ ?match({false, []}, 'CosNaming_BindingIterator':next_n(BI, 1)),
+ ?match(ok, 'CosNaming_BindingIterator':destroy(BI)),
+
+ {_, _, BI2} = ?match({ok, [], _BI2}, 'CosNaming_NamingContext':list(Ns, 0)),
+ ?match({true, _}, 'CosNaming_BindingIterator':next_one(BI2)),
+ ?match({true, _}, 'CosNaming_BindingIterator':next_one(BI2)),
+ ?match({false, _}, 'CosNaming_BindingIterator':next_one(BI2)),
+ ?match(ok, 'CosNaming_BindingIterator':destroy(BI2)),
+ ?match(ok, orber_diagnostics:nameservice()),
ok.
create_default_contexts() ->
@@ -308,13 +303,11 @@ create_default_contexts() ->
%% Test Case:
%% Description:
%%-----------------------------------------------------------------
-name_context_ext(doc) -> ["Description", "more description"];
-name_context_ext(suite) -> [];
name_context_ext(_Config) ->
?REMAP_EXCEPT(name_context_ext_run()).
name_context_ext_run() ->
- ?line NS = ?match({_,pseudo,_, _,_, _},
+ NS = ?match({_,pseudo,_, _,_, _},
corba:resolve_initial_references("NameService")),
Name1 = [#'CosNaming_NameComponent'{id="\\<id1\\>", kind="kind1"},
@@ -357,7 +350,7 @@ name_context_ext_run() ->
'CosNaming_NamingContextExt':to_name(NS, BadString2)),
%% Create a test context.
- ?line Tc = ?match({_,pseudo,_, _,_, _},
+ Tc = ?match({_,pseudo,_, _,_, _},
'CosNaming_NamingContext':bind_new_context(NS,
[#'CosNaming_NameComponent'{id="testcontext",
kind=""}])),
diff --git a/lib/orber/test/orber_SUITE.erl b/lib/orber/test/orber_SUITE.erl
index 46403c00cb..75da31bc5f 100644
--- a/lib/orber/test/orber_SUITE.erl
+++ b/lib/orber/test/orber_SUITE.erl
@@ -21,7 +21,7 @@
-module(orber_SUITE).
-include_lib("common_test/include/ct.hrl").
--define(default_timeout, ?t:minutes(15)).
+-define(default_timeout, test_server:minutes(15)).
-define(application, orber).
% Test server specific exports
@@ -64,21 +64,19 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
+ Dog=proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
%
% Test cases starts here.
%
-app_test(doc) -> [];
-app_test(suite) -> [];
app_test(_Config) ->
- ?line ok=?t:app_test(orber),
+ ok=test_server:app_test(orber),
ok.
otp_9887(_Config) ->
@@ -103,10 +101,6 @@ otp_9887(_Config) ->
ok.
%% Install Orber using the load_order option.
-install_load_order(suite) ->
- [];
-install_load_order(doc) ->
- [];
install_load_order(_Config) ->
orber:jump_stop(),
case catch install_load_order2() of
@@ -129,10 +123,6 @@ install_load_order2() ->
ok.
%% Install Orber using the local_content option.
-install_local_content(suite) ->
- [];
-install_local_content(doc) ->
- [];
install_local_content(_Config) ->
orber:jump_stop(),
case catch install_local_content2() of
@@ -157,10 +147,6 @@ install_local_content2() ->
%% Check for undefined functions
-undefined_functions(suite) ->
- [];
-undefined_functions(doc) ->
- [];
undefined_functions(_Config) ->
App = orber,
Root = code:root_dir(),
diff --git a/lib/orber/test/orber_acl_SUITE.erl b/lib/orber/test/orber_acl_SUITE.erl
index 43dc4497bd..2b0a48adc9 100644
--- a/lib/orber/test/orber_acl_SUITE.erl
+++ b/lib/orber/test/orber_acl_SUITE.erl
@@ -28,7 +28,7 @@
-include_lib("common_test/include/ct.hrl").
--define(default_timeout, ?t:minutes(5)).
+-define(default_timeout, test_server:minutes(5)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -41,7 +41,7 @@
_ ->
io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -92,21 +92,19 @@ end_per_suite(Config) ->
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
%%-----------------------------------------------------------------
-%% Test Case :
-%% Description:
+%% Test Case
+%% Description: Testing IPv4 Verify Operation
%%-----------------------------------------------------------------
-ipv4_verify(doc) -> ["Testing IPv4 Verify Operation."];
-ipv4_verify(suite) -> [];
ipv4_verify(_) ->
?match(true, orber_acl:verify("192.168.64.148", "192.168.64.0/17", inet)),
?match({false,"192.168.128.0","192.168.255.255"},
@@ -133,10 +131,8 @@ ipv4_verify(_) ->
%%-----------------------------------------------------------------
%% Test Case :
-%% Description:
+%% Description: Testing IPv4 Range Operation
%%-----------------------------------------------------------------
-ipv4_range(doc) -> ["Testing IPv4 Range Operation."];
-ipv4_range(suite) -> [];
ipv4_range(_) ->
?match({ok,"192.168.0.0", "192.168.127.255"},
orber_acl:range("192.168.64.0/17")),
@@ -162,10 +158,8 @@ ipv4_range(_) ->
%%-----------------------------------------------------------------
%% Test Case :
-%% Description:
+%% Description: Testing IPv4 Interfaces Operation
%%-----------------------------------------------------------------
-ipv4_interfaces(doc) -> ["Testing IPv4 Interfaces Operation."];
-ipv4_interfaces(suite) -> [];
ipv4_interfaces(_) ->
?match({ok, _},
orber_acl:init_acl([{tcp_in, "192.168.128.0/18", ["10.1.1.1"]},
@@ -185,19 +179,15 @@ ipv4_interfaces(_) ->
%%-----------------------------------------------------------------
%% Test Case :
-%% Description:
+%% Description: Benchmarking runtime critical IPv4 Operations
%%-----------------------------------------------------------------
-ipv4_bm(doc) -> ["Benchmarking runtime critical IPv4 Operations."];
-ipv4_bm(suite) -> [];
ipv4_bm(_) ->
?match({ok, _, _, _}, bm2([{tcp_in, "192.168.64.0/17"}], inet, "192.168.64.148")),
ok.
%%-----------------------------------------------------------------
%% Test Case :
-%% Description:
+%% Description: Testing IPv6 Verify Operation
%%-----------------------------------------------------------------
-ipv6_verify(doc) -> ["Testing IPv6 Verify Operation."];
-ipv6_verify(suite) -> [];
ipv6_verify(_) ->
case orber_test_lib:version_ok() of
true ->
@@ -215,10 +205,8 @@ ipv6_verify(_) ->
%%-----------------------------------------------------------------
%% Test Case :
-%% Description:
+%% Description: Testing IPv6 Range Operation
%%-----------------------------------------------------------------
-ipv6_range(doc) -> ["Testing IPv6 Range Operation."];
-ipv6_range(suite) -> [];
ipv6_range(_) ->
case orber_test_lib:version_ok() of
true ->
@@ -233,10 +221,8 @@ ipv6_range(_) ->
%%-----------------------------------------------------------------
%% Test Case :
-%% Description:
+%% Description: Testing IPv6 Interfaces Operation
%%-----------------------------------------------------------------
-ipv6_interfaces(doc) -> ["Testing IPv6 Interfaces Operation."];
-ipv6_interfaces(suite) -> [];
ipv6_interfaces(_) ->
case orber_test_lib:version_ok() of
true ->
@@ -252,10 +238,8 @@ ipv6_interfaces(_) ->
%%-----------------------------------------------------------------
%% Test Case :
-%% Description:
+%% Description: Benchmarking runtime critical IPv6 Operations
%%-----------------------------------------------------------------
-ipv6_bm(doc) -> ["Benchmarking runtime critical IPv6 Operations."];
-ipv6_bm(suite) -> [];
ipv6_bm(_) ->
case orber_test_lib:version_ok() of
true ->
diff --git a/lib/orber/test/orber_firewall_ipv4_in_SUITE.erl b/lib/orber/test/orber_firewall_ipv4_in_SUITE.erl
index a76682608f..6d085d3bf5 100644
--- a/lib/orber/test/orber_firewall_ipv4_in_SUITE.erl
+++ b/lib/orber/test/orber_firewall_ipv4_in_SUITE.erl
@@ -30,7 +30,7 @@
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContextExt.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
--define(default_timeout, ?t:minutes(15)).
+-define(default_timeout, test_server:minutes(15)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -43,7 +43,7 @@
_ ->
io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -87,12 +87,12 @@ cases() ->
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -113,8 +113,7 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Incomming connections - Deny
%%-----------------------------------------------------------------
-deny_port_api(doc) -> ["Deny Access due to invalid local port"];
-deny_port_api(suite) -> [];
+%% Deny Access due to invalid local port
deny_port_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, _ServerHost} =
@@ -123,11 +122,10 @@ deny_port_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-deny_port_range_api(doc) -> ["Deny Access due to invalid local port range"];
-deny_port_range_api(suite) -> [];
+%% Deny Access due to invalid local port range
deny_port_range_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, _ServerHost} =
@@ -136,12 +134,11 @@ deny_port_range_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-deny_host_api(doc) -> ["Deny Access due to invalid host"];
-deny_host_api(suite) -> [];
+%% Deny Access due to invalid host
deny_host_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, _ServerHost} =
@@ -150,11 +147,10 @@ deny_host_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-deny_peerhost_api(doc) -> ["Deny Access due to invalid peerhost"];
-deny_peerhost_api(suite) -> [];
+%% Deny Access due to invalid peerhost
deny_peerhost_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, _ServerHost} =
@@ -163,14 +159,13 @@ deny_peerhost_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
%%-----------------------------------------------------------------
%% Incomming connections - Allow
%%-----------------------------------------------------------------
-allow_port_range_api(doc) -> ["Allow Access due to valid local port range"];
-allow_port_range_api(suite) -> [];
+%% Allow Access due to valid local port range
allow_port_range_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, _ServerHost} =
@@ -181,12 +176,11 @@ allow_port_range_api(_Config) ->
?match({'IOP_IOR',_,_},
corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
?match(false, corba_object:not_existent(IOR)),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-allow_host_api(doc) -> ["Allow Access due to valid host"];
-allow_host_api(suite) -> [];
+%% Allow Access due to valid host
allow_host_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, _ServerHost} =
@@ -197,11 +191,10 @@ allow_host_api(_Config) ->
?match({'IOP_IOR',_,_},
corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
?match(false, corba_object:not_existent(IOR)),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-allow_peerhost_api(doc) -> ["Allow Access due to valid peerhost"];
-allow_peerhost_api(suite) -> [];
+%% Allow Access due to valid peerhost
allow_peerhost_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, _ServerHost} =
@@ -218,14 +211,12 @@ allow_peerhost_api(_Config) ->
[#'IOP_ServiceContext'
{context_id=?ORBER_GENERIC_CTX_ID,
context_data = {interface, IP}}])),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
%%-----------------------------------------------------------------
%% Test corbaloc strings
%%-----------------------------------------------------------------
-check_address_api(doc) -> ["Test corbaloc strings"];
-check_address_api(suite) -> [];
check_address_api(_Config) ->
?match({[[iiop,{1,0},"10.0.0.1",2809]],"NameService"},
orber_cosnaming_utils:addresses(":10.0.0.1/NameService")),
@@ -287,7 +278,7 @@ check_address_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'IOP_IOR',_,_},
corba:string_to_object("corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService")),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
diff --git a/lib/orber/test/orber_firewall_ipv4_out_SUITE.erl b/lib/orber/test/orber_firewall_ipv4_out_SUITE.erl
index b1c8e00aba..e061d0410d 100644
--- a/lib/orber/test/orber_firewall_ipv4_out_SUITE.erl
+++ b/lib/orber/test/orber_firewall_ipv4_out_SUITE.erl
@@ -30,7 +30,7 @@
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContextExt.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
--define(default_timeout, ?t:minutes(15)).
+-define(default_timeout, test_server:minutes(15)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -43,7 +43,7 @@
_ ->
io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -87,12 +87,12 @@ cases() ->
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -113,8 +113,7 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Incomming connections - Deny
%%-----------------------------------------------------------------
-deny_port_api(doc) -> ["Deny Access due to invalid local port"];
-deny_port_api(suite) -> [];
+%% Deny Access due to invalid local port
deny_port_api(_Config) ->
[IP] = ?match([_], orber:host()),
ServerPort = orber:iiop_port(),
@@ -124,11 +123,10 @@ deny_port_api(_Config) ->
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
-% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+% catch orber_test_lib:destroy_node(ClientNode, timeout),
ok.
-deny_port_range_api(doc) -> ["Deny Access due to invalid local port range"];
-deny_port_range_api(suite) -> [];
+%% Deny Access due to invalid local port range
deny_port_range_api(_Config) ->
[IP] = ?match([_], orber:host()),
ServerPort = orber:iiop_port(),
@@ -138,12 +136,11 @@ deny_port_range_api(_Config) ->
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
-% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+% catch orber_test_lib:destroy_node(ClientNode, timeout),
ok.
-deny_host_api(doc) -> ["Deny Access due to invalid host"];
-deny_host_api(suite) -> [];
+%% Deny Access due to invalid host
deny_host_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ClientNode, _ClientHost} =
@@ -153,14 +150,13 @@ deny_host_api(_Config) ->
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
orber_test_lib:remote_apply(ClientNode, corba, string_to_object,
["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
-% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+% catch orber_test_lib:destroy_node(ClientNode, timeout),
ok.
%%-----------------------------------------------------------------
%% Incomming connections - Allow
%%-----------------------------------------------------------------
-allow_port_api(doc) -> ["Allow Access due to valid local port range"];
-allow_port_api(suite) -> [];
+%% Allow Access due to valid local port range
allow_port_api(_Config) ->
[IP] = ?match([_], orber:host()),
ServerPort = orber:iiop_port(),
@@ -173,11 +169,10 @@ allow_port_api(_Config) ->
["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
?match(false,
orber_test_lib:remote_apply(ClientNode, corba_object, not_existent, [IOR])),
-% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+% catch orber_test_lib:destroy_node(ClientNode, timeout),
ok.
-allow_port_range_api(doc) -> ["Allow Access due to valid local port range"];
-allow_port_range_api(suite) -> [];
+%% Allow Access due to valid local port range
allow_port_range_api(_Config) ->
[IP] = ?match([_], orber:host()),
ServerPort = orber:iiop_port(),
@@ -190,12 +185,11 @@ allow_port_range_api(_Config) ->
["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
?match(false,
orber_test_lib:remote_apply(ClientNode, corba_object, not_existent, [IOR])),
-% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+% catch orber_test_lib:destroy_node(ClientNode, timeout),
ok.
-allow_host_api(doc) -> ["Allow Access due to valid host"];
-allow_host_api(suite) -> [];
+%% Allow Access due to valid host
allow_host_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ClientNode, _ClientHost} =
@@ -208,11 +202,10 @@ allow_host_api(_Config) ->
["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
?match(false,
orber_test_lib:remote_apply(ClientNode, corba_object, not_existent, [IOR])),
-% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+% catch orber_test_lib:destroy_node(ClientNode, timeout),
ok.
-local_interface_api(doc) -> ["Allow Access due to valid host via a spcific interface"];
-local_interface_api(suite) -> [];
+%% Allow Access due to valid host via a spcific interface
local_interface_api(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -231,6 +224,6 @@ local_interface_api(_Config) ->
["corbaloc::1.2@"++IP++":"++integer_to_list(ServerPort)++"/NameService"])),
?match(false,
orber_test_lib:remote_apply(ClientNode, corba_object, not_existent, [IOR])),
-% ?line catch orber_test_lib:destroy_node(ClientNode, timeout),
+% catch orber_test_lib:destroy_node(ClientNode, timeout),
ok.
diff --git a/lib/orber/test/orber_firewall_ipv6_in_SUITE.erl b/lib/orber/test/orber_firewall_ipv6_in_SUITE.erl
index e1a172140c..ee879f5ea8 100644
--- a/lib/orber/test/orber_firewall_ipv6_in_SUITE.erl
+++ b/lib/orber/test/orber_firewall_ipv6_in_SUITE.erl
@@ -30,7 +30,7 @@
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContextExt.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
--define(default_timeout, ?t:minutes(15)).
+-define(default_timeout, test_server:minutes(15)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -43,7 +43,7 @@
_ ->
io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -87,7 +87,7 @@ cases() ->
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
orber:jump_start([{iiop_port, 0},
{iiop_out_ports, {5980, 6000}},
{flags, ?ORB_ENV_USE_IPV6}]),
@@ -96,7 +96,7 @@ init_per_testcase(_Case, Config) ->
end_per_testcase(_Case, Config) ->
orber:jump_stop(),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -120,8 +120,7 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Incomming connections - Deny
%%-----------------------------------------------------------------
-deny_port_api(doc) -> ["Deny Access due to invalid local port"];
-deny_port_api(suite) -> [];
+%% Deny Access due to invalid local port
deny_port_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, ServerHost} =
@@ -131,11 +130,10 @@ deny_port_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
- % ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+ % catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-deny_port_range_api(doc) -> ["Deny Access due to invalid local port range"];
-deny_port_range_api(suite) -> [];
+%% Deny Access due to invalid local port range
deny_port_range_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, ServerHost} =
@@ -145,12 +143,11 @@ deny_port_range_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-deny_host_api(doc) -> ["Deny Access due to invalid host"];
-deny_host_api(suite) -> [];
+%% Deny Access due to invalid host
deny_host_api(_Config) ->
{ok, ServerNode, ServerHost} =
?match({ok,_,_}, orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
@@ -159,11 +156,10 @@ deny_host_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-deny_peerhost_api(doc) -> ["Deny Access due to invalid peer host"];
-deny_peerhost_api(suite) -> [];
+%% Deny Access due to invalid peer host
deny_peerhost_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, ServerHost} =
@@ -174,14 +170,13 @@ deny_peerhost_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
%%-----------------------------------------------------------------
%% Incomming connections - Allow
%%-----------------------------------------------------------------
-allow_port_range_api(doc) -> ["Allow Access due to valid local port range"];
-allow_port_range_api(suite) -> [];
+%% Allow Access due to valid local port range
allow_port_range_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, ServerHost} =
@@ -194,12 +189,11 @@ allow_port_range_api(_Config) ->
?match({'IOP_IOR',_,_},
corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
?match(false, corba_object:not_existent(IOR)),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-allow_host_api(doc) -> ["Allow Access due to valid host"];
-allow_host_api(suite) -> [];
+%% Allow Access due to valid host
allow_host_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, ServerHost} =
@@ -212,11 +206,10 @@ allow_host_api(_Config) ->
corba:string_to_object("corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService")),
?match(false, corba_object:not_existent(IOR)),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-allow_peerhost_api(doc) -> ["Allow Access due to valid host"];
-allow_peerhost_api(suite) -> [];
+%% Allow Access due to valid host
allow_peerhost_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, ServerHost} =
@@ -235,14 +228,12 @@ allow_peerhost_api(_Config) ->
{context_id=?ORBER_GENERIC_CTX_ID,
context_data = {interface, IP}}])),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
%%-----------------------------------------------------------------
%% Test corbaloc strings
%%-----------------------------------------------------------------
-check_address_api(doc) -> ["Test corbaloc strings"];
-check_address_api(suite) -> [];
check_address_api(_Config) ->
?match({[[iiop,{1,0},"0:0:0:0:0:FFFF:C02A:2A2A",2809]],"NameService"},
orber_cosnaming_utils:addresses(":[0:0:0:0:0:FFFF:C02A:2A2A]/NameService")),
@@ -318,7 +309,7 @@ check_address_api(_Config) ->
ServerPort = orber_test_lib:remote_apply(ServerNode, orber, iiop_port, []),
?match({'IOP_IOR',_,_},
corba:string_to_object("corbaloc::1.2@["++IP++"]:"++integer_to_list(ServerPort)++"/NameService")),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
diff --git a/lib/orber/test/orber_firewall_ipv6_out_SUITE.erl b/lib/orber/test/orber_firewall_ipv6_out_SUITE.erl
index 8dfc7d9d6f..0fe305aeb5 100644
--- a/lib/orber/test/orber_firewall_ipv6_out_SUITE.erl
+++ b/lib/orber/test/orber_firewall_ipv6_out_SUITE.erl
@@ -30,7 +30,7 @@
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContextExt.hrl").
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
--define(default_timeout, ?t:minutes(15)).
+-define(default_timeout, test_server:minutes(15)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -43,7 +43,7 @@
_ ->
io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -87,7 +87,7 @@ cases() ->
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
orber:jump_start([{iiop_port, 0},
{iiop_out_ports, {5980, 6000}},
{flags, ?ORB_ENV_USE_IPV6}]),
@@ -96,7 +96,7 @@ init_per_testcase(_Case, Config) ->
end_per_testcase(_Case, Config) ->
orber:jump_stop(),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -120,8 +120,7 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% Incomming connections - Deny
%%-----------------------------------------------------------------
-deny_port_api(doc) -> ["Deny Access due to invalid local port"];
-deny_port_api(suite) -> [];
+%% Deny Access due to invalid local port
deny_port_api(_Config) ->
[IP] = ?match([_], orber:host()),
ServerPort = orber:iiop_port(),
@@ -132,11 +131,10 @@ deny_port_api(_Config) ->
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
orber_test_lib:remote_apply(ServerNode, corba, string_to_object,
["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-deny_port_range_api(doc) -> ["Deny Access due to invalid local port range"];
-deny_port_range_api(suite) -> [];
+%% Deny Access due to invalid local port range
deny_port_range_api(_Config) ->
[IP] = ?match([_], orber:host()),
ServerPort = orber:iiop_port(),
@@ -147,12 +145,11 @@ deny_port_range_api(_Config) ->
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
orber_test_lib:remote_apply(ServerNode, corba, string_to_object,
["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-deny_host_api(doc) -> ["Deny Access due to invalid host"];
-deny_host_api(suite) -> [];
+%% Deny Access due to invalid host
deny_host_api(_Config) ->
{ok, ServerNode, ServerHost} =
?match({ok,_,_}, orber_test_lib:js_node([{flags, (?ORB_ENV_USE_IPV6 bor
@@ -162,14 +159,13 @@ deny_host_api(_Config) ->
?match({'EXCEPTION', #'CosNaming_NamingContextExt_InvalidAddress'{}},
orber_test_lib:remote_apply(ServerNode, corba, string_to_object,
["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
%%-----------------------------------------------------------------
%% Incomming connections - Allow
%%-----------------------------------------------------------------
-allow_port_api(doc) -> ["Allow Access due to valid local port"];
-allow_port_api(suite) -> [];
+%% Allow Access due to valid local port
allow_port_api(_Config) ->
[IP] = ?match([_], orber:host()),
ServerPort = orber:iiop_port(),
@@ -183,11 +179,10 @@ allow_port_api(_Config) ->
["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
?match(false,
orber_test_lib:remote_apply(ServerNode, corba_object, not_existent, [IOR])),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-allow_port_range_api(doc) -> ["Allow Access due to valid local port range"];
-allow_port_range_api(suite) -> [];
+%% Allow Access due to valid local port range
allow_port_range_api(_Config) ->
[IP] = ?match([_], orber:host()),
ServerPort = orber:iiop_port(),
@@ -201,12 +196,11 @@ allow_port_range_api(_Config) ->
["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
?match(false,
orber_test_lib:remote_apply(ServerNode, corba_object, not_existent, [IOR])),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-allow_host_api(doc) -> ["Allow Access due to valid host"];
-allow_host_api(suite) -> [];
+%% Allow Access due to valid host
allow_host_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, ServerHost} =
@@ -220,11 +214,10 @@ allow_host_api(_Config) ->
["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
?match(false,
orber_test_lib:remote_apply(ServerNode, corba_object, not_existent, [IOR])),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
-local_interface_api(doc) -> ["Allow Access due to valid host via a spcific interface"];
-local_interface_api(suite) -> [];
+%% Allow Access due to valid host via a spcific interface
local_interface_api(_Config) ->
[IP] = ?match([_], orber:host()),
{ok, ServerNode, ServerHost} =
@@ -238,6 +231,6 @@ local_interface_api(_Config) ->
["corbaloc::1.2@"++ServerHost++":"++integer_to_list(ServerPort)++"/NameService"])),
?match(false,
orber_test_lib:remote_apply(ServerNode, corba_object, not_existent, [IOR])),
-% ?line catch orber_test_lib:destroy_node(ServerNode, timeout),
+% catch orber_test_lib:destroy_node(ServerNode, timeout),
ok.
diff --git a/lib/orber/test/orber_nat_SUITE.erl b/lib/orber/test/orber_nat_SUITE.erl
index 24744a6348..029a5e529b 100644
--- a/lib/orber/test/orber_nat_SUITE.erl
+++ b/lib/orber/test/orber_nat_SUITE.erl
@@ -31,7 +31,7 @@
-include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl").
--define(default_timeout, ?t:minutes(15)).
+-define(default_timeout, test_server:minutes(15)).
-define(match(ExpectedRes,Expr),
fun() ->
@@ -44,7 +44,7 @@
_ ->
io:format("###### ERROR ERROR ######~nRESULT: ~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -102,7 +102,7 @@ cases() ->
init_per_testcase(TC, Config)
when TC =:= nat_iiop_ssl_port;
TC =:= nat_iiop_ssl_port_local ->
- case ?config(crypto_started, Config) of
+ case proplists:get_value(crypto_started, Config) of
true ->
case orber_test_lib:ssl_version() of
no_ssl ->
@@ -128,7 +128,7 @@ end_per_testcase(_Case, Config) ->
orber:jump_stop(),
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -152,10 +152,8 @@ end_per_suite(Config) ->
%%-----------------------------------------------------------------
%% API tests for NAT
%%-----------------------------------------------------------------
-
-nat_ip_address(doc) -> ["This case test if the server ORB use the correct",
- "interface when exporting IOR:s"];
-nat_ip_address(suite) -> [];
+%% These case test if the server ORB use the correct
+%% interface when exporting IOR:s
nat_ip_address(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -169,9 +167,6 @@ nat_ip_address(_Config) ->
iop_ior:get_key(IOR)),
ok.
-nat_ip_address_multiple(doc) -> ["This case test if the server ORB use the correct",
- "interface when exporting IOR:s"];
-nat_ip_address_multiple(suite) -> [];
nat_ip_address_multiple(_Config) ->
IP = orber_test_lib:get_host(),
@@ -185,9 +180,6 @@ nat_ip_address_multiple(_Config) ->
iop_ior:get_key(IOR)),
ok.
-nat_ip_address_local(doc) -> ["This case test if the server ORB use the correct",
- "interface when exporting IOR:s"];
-nat_ip_address_local(suite) -> [];
nat_ip_address_local(_Config) ->
IP = orber_test_lib:get_host(),
{ok, ServerNode, _ServerHost} =
@@ -200,9 +192,6 @@ nat_ip_address_local(_Config) ->
iop_ior:get_key(IOR)),
ok.
-nat_ip_address_local_local(doc) -> ["This case test if the server ORB use the correct",
- "interface when exporting IOR:s"];
-nat_ip_address_local_local(suite) -> [];
nat_ip_address_local_local(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -222,9 +211,6 @@ nat_ip_address_local_local(_Config) ->
iop_ior:get_key(IOR2)),
ok.
-nat_iiop_port(doc) -> ["This case test if the server ORB use the correct",
- "port when exporting IOR:s"];
-nat_iiop_port(suite) -> [];
nat_iiop_port(_Config) ->
IP = orber_test_lib:get_host(),
{ok, ServerNode, _ServerHost} =
@@ -237,9 +223,6 @@ nat_iiop_port(_Config) ->
iop_ior:get_key(IOR)),
ok.
-nat_iiop_port_local(doc) -> ["This case test if the server ORB use the correct",
- "port when exporting IOR:s"];
-nat_iiop_port_local(suite) -> [];
nat_iiop_port_local(_Config) ->
IP = orber_test_lib:get_host(),
{ok, ServerNode, _ServerHost} =
@@ -252,9 +235,6 @@ nat_iiop_port_local(_Config) ->
iop_ior:get_key(IOR)),
ok.
-nat_iiop_port_local_local(doc) -> ["This case test if the server ORB use the correct",
- "port when exporting IOR:s"];
-nat_iiop_port_local_local(suite) -> [];
nat_iiop_port_local_local(_Config) ->
IP = orber_test_lib:get_host(),
Loopback = orber_test_lib:get_loopback_interface(),
@@ -286,11 +266,8 @@ nat_iiop_port_local_local(_Config) ->
%%-----------------------------------------------------------------
%% API tests for ORB to ORB, ssl security depth 1
%%-----------------------------------------------------------------
-
-
-nat_iiop_ssl_port(doc) -> ["SECURE MULTI ORB API tests (SSL depth 1)",
- "Make sure NAT works for SSL"];
-nat_iiop_ssl_port(suite) -> [];
+%% SECURE MULTI ORB API tests (SSL depth 1)
+%% Make sure NAT works for SSL
nat_iiop_ssl_port(_Config) ->
IP = orber_test_lib:get_host(),
@@ -337,9 +314,6 @@ nat_iiop_ssl_port(_Config) ->
remove_listen_interface, [Ref])),
ok.
-nat_iiop_ssl_port_local(doc) -> ["SECURE MULTI ORB API tests (SSL depth 1)",
- "Make sure NAT works for SSL"];
-nat_iiop_ssl_port_local(suite) -> [];
nat_iiop_ssl_port_local(_Config) ->
IP = orber_test_lib:get_host(),
diff --git a/lib/orber/test/orber_web_SUITE.erl b/lib/orber/test/orber_web_SUITE.erl
index 2966fbd994..b272eb3fcf 100644
--- a/lib/orber/test/orber_web_SUITE.erl
+++ b/lib/orber/test/orber_web_SUITE.erl
@@ -30,7 +30,7 @@
-include_lib("orber/include/corba.hrl").
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(ExpectedRes, Expr),
fun() ->
@@ -43,7 +43,7 @@
_ ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS)
+ exit(AcTuAlReS)
end
end()).
@@ -54,7 +54,7 @@
Not ->
io:format("###### ERROR ERROR ######~n~p~n",
[AcTuAlReS]),
- ?line exit(AcTuAlReS);
+ exit(AcTuAlReS);
_ ->
io:format("------ CORRECT RESULT ------~n~p~n",
[AcTuAlReS]),
@@ -106,7 +106,7 @@ end_per_group(_GroupName, Config) ->
%% Init and cleanup functions.
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
Path = code:which(?MODULE),
code:add_pathz(filename:join(filename:dirname(Path), "idl_output")),
orber:jump_start(2875),
@@ -119,7 +119,7 @@ end_per_testcase(_Case, Config) ->
orber:jump_stop(),
Path = code:which(?MODULE),
code:del_path(filename:join(filename:dirname(Path), "idl_output")),
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -127,8 +127,6 @@ end_per_testcase(_Case, Config) ->
%% Test Case: menu
%% Description:
%%-----------------------------------------------------------------
-menu(doc) -> [""];
-menu(suite) -> [];
menu(_) ->
Node = atom_to_list(node()),
OK = orber_web:menu(env, [{"node", Node}]),
@@ -141,8 +139,6 @@ menu(_) ->
%% Test Case: configure
%% Description:
%%-----------------------------------------------------------------
-configure(doc) -> [""];
-configure(suite) -> [];
configure(_) ->
Node = atom_to_list(node()),
?match({'EXIT', _}, orber_web:configure(env, [])),
@@ -162,8 +158,6 @@ configure(_) ->
%% Test Case: info
%% Description:
%%-----------------------------------------------------------------
-info(doc) -> [""];
-info(suite) -> [];
info(_) ->
?match({'EXIT', _}, orber_web:info(env, [])),
?match({'EXIT', _}, orber_web:info(env, [{"node", localhost}])),
@@ -174,8 +168,6 @@ info(_) ->
%% Test Case: nameservice
%% Description:
%%-----------------------------------------------------------------
-nameservice(doc) -> [""];
-nameservice(suite) -> [];
nameservice(_) ->
NodeStr = atom_to_list(node()),
?match({'EXIT', _}, orber_web:nameservice(env, [{"node", localhost},
@@ -215,8 +207,6 @@ nameservice(_) ->
%% Test Case: ifr_select
%% Description:
%%-----------------------------------------------------------------
-ifr_select(doc) -> [""];
-ifr_select(suite) -> [];
ifr_select(_) ->
?match({'EXIT', _}, orber_web:ifr_select(env, [])),
?match({'EXIT', _}, orber_web:ifr_select(env, [{"node", localhost}])),
@@ -228,8 +218,6 @@ ifr_select(_) ->
%% Test Case: ifr_data
%% Description:
%%-----------------------------------------------------------------
-ifr_data(doc) -> [""];
-ifr_data(suite) -> [];
ifr_data(_) ->
?match({'EXIT', _}, orber_web:ifr_data(env, [])),
?match({'EXIT', _}, orber_web:ifr_data(env, [{"node", localhost},
@@ -266,8 +254,6 @@ ifr_data(_) ->
%% Test Case: create
%% Description:
%%-----------------------------------------------------------------
-create(doc) -> [""];
-create(suite) -> [];
create(_) ->
NodeStr = atom_to_list(node()),
?match({'EXIT', _}, orber_web:create(env, [])),
@@ -347,8 +333,6 @@ create(_) ->
%% Test Case: delete_ctx
%% Description:
%%-----------------------------------------------------------------
-delete_ctx(doc) -> [""];
-delete_ctx(suite) -> [];
delete_ctx(_) ->
?match({ok, _}, orber_web:delete_ctx(env, [{"node", atom_to_list(node())},
{"context", "id1"}])),
@@ -363,8 +347,6 @@ delete_ctx(_) ->
%% Test Case: add_ctx
%% Description:
%%-----------------------------------------------------------------
-add_ctx(doc) -> [""];
-add_ctx(suite) -> [];
add_ctx(_) ->
?match({error, _}, orber_web:add_ctx(env, [{"node", "bad_node"},
{"context", "root"},
@@ -384,8 +366,6 @@ add_ctx(_) ->
%% Test Case: delete_obj
%% Description:
%%-----------------------------------------------------------------
-delete_obj(doc) -> [""];
-delete_obj(suite) -> [];
delete_obj(_) ->
NodeStr = atom_to_list(node()),
?match({error, _}, orber_web:delete_obj(env, [{"node", "bad_node"},
@@ -436,8 +416,6 @@ delete_obj(_) ->
%% Test Case: server
%% Description:
%%-----------------------------------------------------------------
-server(doc) -> [""];
-server(suite) -> [];
server(_) ->
NodeStr = "node=" ++ atom_to_list(node()),
{ok, Pid} = ?match({ok,_}, orber_web_server:start()),
diff --git a/lib/orber/test/tc_SUITE.erl b/lib/orber/test/tc_SUITE.erl
index 565d9f4645..4572057403 100644
--- a/lib/orber/test/tc_SUITE.erl
+++ b/lib/orber/test/tc_SUITE.erl
@@ -3,7 +3,7 @@
%%
%% Copyright Ericsson AB 2004-2016. All Rights Reserved.
%%
-%% Licensed under the Apache License, Version 2.0 (the "License");
+%% Licensed under the Apache Li2cense, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
@@ -29,7 +29,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("orber/src/orber_iiop.hrl").
--define(default_timeout, ?t:minutes(3)).
+-define(default_timeout, test_server:minutes(3)).
-define(match(Expr),
fun() ->
@@ -173,12 +173,12 @@ end_per_group(_GroupName, Config) ->
%%-----------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(?default_timeout),
+ Dog=test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
+ Dog = proplists:get_value(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
@@ -186,66 +186,54 @@ end_per_testcase(_Case, Config) ->
%% Test Case: null test
%% Description:
%%-----------------------------------------------------------------
-null(doc) -> [];
-null(suite) -> [];
null(_) ->
- ?line true = orber_tc:check_tc(orber_tc:null()),
- ?line code(orber_tc:null()),
+ true = orber_tc:check_tc(orber_tc:null()),
+ code(orber_tc:null()),
ok.
%%-----------------------------------------------------------------
%% Test Case: void test
%% Description:
%%-----------------------------------------------------------------
-void(doc) -> [];
-void(suite) -> [];
void(_) ->
- ?line true = orber_tc:check_tc(orber_tc:void()),
- ?line code(orber_tc:void()),
+ true = orber_tc:check_tc(orber_tc:void()),
+ code(orber_tc:void()),
ok.
%%-----------------------------------------------------------------
%% Test Case: short integer test
%% Description:
%%-----------------------------------------------------------------
-short(doc) -> [];
-short(suite) -> [];
short(_) ->
- ?line true = orber_tc:check_tc(orber_tc:short()),
- ?line code(orber_tc:short()),
+ true = orber_tc:check_tc(orber_tc:short()),
+ code(orber_tc:short()),
ok.
%%-----------------------------------------------------------------
%% Test Case: unsigned short integer test
%% Description:
%%-----------------------------------------------------------------
-ushort(doc) -> [];
-ushort(suite) -> [];
ushort(_) ->
- ?line true = orber_tc:check_tc(orber_tc:unsigned_short()),
- ?line code(orber_tc:unsigned_short()),
+ true = orber_tc:check_tc(orber_tc:unsigned_short()),
+ code(orber_tc:unsigned_short()),
ok.
%%-----------------------------------------------------------------
%% Test Case: long integer test
%% Description:
%%-----------------------------------------------------------------
-long(doc) -> [];
-long(suite) -> [];
long(_) ->
- ?line true = orber_tc:check_tc(orber_tc:long()),
- ?line code(orber_tc:long()),
+ true = orber_tc:check_tc(orber_tc:long()),
+ code(orber_tc:long()),
ok.
%%-----------------------------------------------------------------
%% Test Case: unsigned long integer test
%% Description:
%%-----------------------------------------------------------------
-ulong(doc) -> [];
-ulong(suite) -> [];
ulong(_) ->
- ?line true = orber_tc:check_tc(orber_tc:unsigned_long()),
- ?line code(orber_tc:unsigned_long()),
+ true = orber_tc:check_tc(orber_tc:unsigned_long()),
+ code(orber_tc:unsigned_long()),
ok.
@@ -253,22 +241,18 @@ ulong(_) ->
%% Test Case: long integer test
%% Description:
%%-----------------------------------------------------------------
-longlong(doc) -> [];
-longlong(suite) -> [];
longlong(_) ->
- ?line true = orber_tc:check_tc(orber_tc:long_long()),
- ?line code(orber_tc:long_long()),
+ true = orber_tc:check_tc(orber_tc:long_long()),
+ code(orber_tc:long_long()),
ok.
%%-----------------------------------------------------------------
%% Test Case: unsigned long integer test
%% Description:
%%-----------------------------------------------------------------
-ulonglong(doc) -> [];
-ulonglong(suite) -> [];
ulonglong(_) ->
- ?line true = orber_tc:check_tc(orber_tc:unsigned_long_long()),
- ?line code(orber_tc:unsigned_long_long()),
+ true = orber_tc:check_tc(orber_tc:unsigned_long_long()),
+ code(orber_tc:unsigned_long_long()),
ok.
@@ -276,110 +260,90 @@ ulonglong(_) ->
%% Test Case: float test
%% Description:
%%-----------------------------------------------------------------
-float(doc) -> [];
-float(suite) -> [];
float(_) ->
- ?line true = orber_tc:check_tc(orber_tc:'float'()),
- ?line code(orber_tc:'float'()),
+ true = orber_tc:check_tc(orber_tc:'float'()),
+ code(orber_tc:'float'()),
ok.
%%-----------------------------------------------------------------
%% Test Case: double test
%% Description:
%%-----------------------------------------------------------------
-double(doc) -> [];
-double(suite) -> [];
double(_) ->
- ?line true = orber_tc:check_tc(orber_tc:double()),
- ?line code(orber_tc:double()),
+ true = orber_tc:check_tc(orber_tc:double()),
+ code(orber_tc:double()),
ok.
%%-----------------------------------------------------------------
%% Test Case: longdouble test
%% Description:
%%-----------------------------------------------------------------
-longdouble(doc) -> [];
-longdouble(suite) -> [];
longdouble(_) ->
- ?line true = orber_tc:check_tc(orber_tc:longdouble()),
- ?line code(orber_tc:longdouble()),
+ true = orber_tc:check_tc(orber_tc:longdouble()),
+ code(orber_tc:longdouble()),
ok.
%%-----------------------------------------------------------------
%% Test Case: boolean test
%% Description:
%%-----------------------------------------------------------------
-boolean(doc) -> [];
-boolean(suite) -> [];
boolean(_) ->
- ?line true = orber_tc:check_tc(orber_tc:boolean()),
- ?line code(orber_tc:boolean()),
+ true = orber_tc:check_tc(orber_tc:boolean()),
+ code(orber_tc:boolean()),
ok.
%%-----------------------------------------------------------------
%% Test Case: character test
%% Description:
%%-----------------------------------------------------------------
-char(doc) -> [];
-char(suite) -> [];
char(_) ->
- ?line true = orber_tc:check_tc(orber_tc:char()),
- ?line code(orber_tc:char()),
+ true = orber_tc:check_tc(orber_tc:char()),
+ code(orber_tc:char()),
ok.
%%-----------------------------------------------------------------
%% Test Case: character test
%% Description:
%%-----------------------------------------------------------------
-wchar(doc) -> [];
-wchar(suite) -> [];
wchar(_) ->
- ?line true = orber_tc:check_tc(orber_tc:wchar()),
- ?line code(orber_tc:wchar()),
+ true = orber_tc:check_tc(orber_tc:wchar()),
+ code(orber_tc:wchar()),
ok.
%%-----------------------------------------------------------------
%% Test Case: octet test
%% Description:
%%-----------------------------------------------------------------
-octet(doc) -> [];
-octet(suite) -> [];
octet(_) ->
- ?line true = orber_tc:check_tc(orber_tc:octet()),
- ?line code(orber_tc:octet()),
+ true = orber_tc:check_tc(orber_tc:octet()),
+ code(orber_tc:octet()),
ok.
%%-----------------------------------------------------------------
%% Test Case: any test
%% Description:
%%-----------------------------------------------------------------
-any(doc) -> [];
-any(suite) -> [];
any(_) ->
- ?line true = orber_tc:check_tc(orber_tc:any()),
- ?line code(orber_tc:any()),
+ true = orber_tc:check_tc(orber_tc:any()),
+ code(orber_tc:any()),
ok.
%%-----------------------------------------------------------------
%% Test Case: typecode test
%% Description:
%%-----------------------------------------------------------------
-typecode(doc) -> [];
-typecode(suite) -> [];
typecode(_) ->
- ?line true = orber_tc:check_tc(orber_tc:typecode()),
- ?line code(orber_tc:typecode()),
+ true = orber_tc:check_tc(orber_tc:typecode()),
+ code(orber_tc:typecode()),
ok.
%%-----------------------------------------------------------------
%% Test Case: principal test
%% Description:
%%-----------------------------------------------------------------
-principal(doc) -> [];
-principal(suite) -> [];
principal(_) ->
- ?line true = orber_tc:check_tc(orber_tc:principal()),
- ?line code(orber_tc:principal()),
+ true = orber_tc:check_tc(orber_tc:principal()),
+ code(orber_tc:principal()),
ok.
@@ -387,62 +351,56 @@ principal(_) ->
%% Test Case: object_reference test
%% Description:
%%-----------------------------------------------------------------
-object_reference(doc) -> [];
-object_reference(suite) -> [];
object_reference(_) ->
- ?line true = orber_tc:check_tc(orber_tc:object_reference("Id", "Name")),
- ?line false = orber_tc:check_tc(orber_tc:object_reference(42, "Name")),
- ?line false = orber_tc:check_tc(orber_tc:object_reference("Id", 42)),
- ?line code(orber_tc:object_reference("Id", "Name")),
- ?line ?match(code(orber_tc:object_reference(42, "Name"))),
- ?line ?match(code(orber_tc:object_reference("Id", 42))),
+ true = orber_tc:check_tc(orber_tc:object_reference("Id", "Name")),
+ false = orber_tc:check_tc(orber_tc:object_reference(42, "Name")),
+ false = orber_tc:check_tc(orber_tc:object_reference("Id", 42)),
+ code(orber_tc:object_reference("Id", "Name")),
+ ?match(code(orber_tc:object_reference(42, "Name"))),
+ ?match(code(orber_tc:object_reference("Id", 42))),
ok.
%%-----------------------------------------------------------------
%% Test Case: struct
%% Description:
%%-----------------------------------------------------------------
-struct(doc) -> [];
-struct(suite) -> [];
struct(_) ->
- ?line true = orber_tc:check_tc(orber_tc:struct("Id", "Name", ?ELIST)),
- ?line false = orber_tc:check_tc(orber_tc:struct(42, "Name", ?ELIST)),
- ?line false = orber_tc:check_tc(orber_tc:struct("Id", false, ?ELIST)),
- ?line false = orber_tc:check_tc(orber_tc:struct("Id", "Name", ?VELIST)),
- ?line false = orber_tc:check_tc(orber_tc:struct("Id", "Name", "wrong")),
- ?line code(orber_tc:struct("Id", "Name", ?ELIST)),
- ?line ?match(code(orber_tc:struct(42, "Name", ?ELIST))),
- ?line ?match(code(orber_tc:struct("Id", false, ?ELIST))),
- ?line ?match(code(orber_tc:struct("Id", "Name", ?VELIST))),
- ?line ?match(code(orber_tc:struct("Id", "Name", "wrong"))),
+ true = orber_tc:check_tc(orber_tc:struct("Id", "Name", ?ELIST)),
+ false = orber_tc:check_tc(orber_tc:struct(42, "Name", ?ELIST)),
+ false = orber_tc:check_tc(orber_tc:struct("Id", false, ?ELIST)),
+ false = orber_tc:check_tc(orber_tc:struct("Id", "Name", ?VELIST)),
+ false = orber_tc:check_tc(orber_tc:struct("Id", "Name", "wrong")),
+ code(orber_tc:struct("Id", "Name", ?ELIST)),
+ ?match(code(orber_tc:struct(42, "Name", ?ELIST))),
+ ?match(code(orber_tc:struct("Id", false, ?ELIST))),
+ ?match(code(orber_tc:struct("Id", "Name", ?VELIST))),
+ ?match(code(orber_tc:struct("Id", "Name", "wrong"))),
ok.
%%-----------------------------------------------------------------
%% Test Case: union
%% Description:
%%-----------------------------------------------------------------
-union(doc) -> [];
-union(suite) -> [];
union(_) ->
- ?line true = orber_tc:check_tc(orber_tc:union("Id", "Name", orber_tc:long(),
+ true = orber_tc:check_tc(orber_tc:union("Id", "Name", orber_tc:long(),
-1, [{1, "long", orber_tc:long()},
{2, "longlong", orber_tc:long()}])),
- ?line false = orber_tc:check_tc(orber_tc:union("Id", "Name", orber_tc:long(),
+ false = orber_tc:check_tc(orber_tc:union("Id", "Name", orber_tc:long(),
-1, ?ELIST)),
- ?line false = orber_tc:check_tc(orber_tc:union(42, "Name", orber_tc:long(),
+ false = orber_tc:check_tc(orber_tc:union(42, "Name", orber_tc:long(),
-1, [{1, "long", orber_tc:long()},
{2, "longlong", orber_tc:long()}])),
- ?line false = orber_tc:check_tc(orber_tc:union("Id", false, orber_tc:long(),
+ false = orber_tc:check_tc(orber_tc:union("Id", false, orber_tc:long(),
-1, [{1, "long", orber_tc:long()},
{2, "longlong", orber_tc:long()}])),
- ?line false = orber_tc:check_tc(orber_tc:union("Id", "Name", bad_tc,
+ false = orber_tc:check_tc(orber_tc:union("Id", "Name", bad_tc,
-1, [{1, "long", orber_tc:long()},
{2, "longlong", orber_tc:long()}])),
- ?line false = orber_tc:check_tc(orber_tc:union("Id", "Name", orber_tc:long(),
+ false = orber_tc:check_tc(orber_tc:union("Id", "Name", orber_tc:long(),
"wrong", [{1, "long", orber_tc:long()},
{2, "longlong", orber_tc:long()}])),
- ?line code(orber_tc:union("Id", "Name", orber_tc:long(),
+ code(orber_tc:union("Id", "Name", orber_tc:long(),
-1, [{1, "long", orber_tc:long()},
{2, "longlong", orber_tc:long()}])),
ok.
@@ -452,109 +410,95 @@ union(_) ->
%% Test Case: enum test
%% Description:
%%-----------------------------------------------------------------
-enum(doc) -> [];
-enum(suite) -> [];
enum(_) ->
- ?line true = orber_tc:check_tc(orber_tc:enum("Id", "Name",
+ true = orber_tc:check_tc(orber_tc:enum("Id", "Name",
["E1", "E2", "E3"])),
- ?line false = orber_tc:check_tc(orber_tc:enum(42, "Name",
+ false = orber_tc:check_tc(orber_tc:enum(42, "Name",
["E1", "E2", "E3"])),
- ?line false = orber_tc:check_tc(orber_tc:enum("Id", false,
+ false = orber_tc:check_tc(orber_tc:enum("Id", false,
["E1", "E2", "E3"])),
- ?line false = orber_tc:check_tc(orber_tc:enum("Id", "Name",
+ false = orber_tc:check_tc(orber_tc:enum("Id", "Name",
["E1", false, "E3"])),
- ?line code(orber_tc:enum("Id", "Name", ["E1", "E2", "E3"])),
- ?line ?match(code(orber_tc:enum(false, "Name", ["E1", "E2", "E3"]))),
- ?line ?match(code(orber_tc:enum("Id", 42, ["E1", "E2", "E3"]))),
- ?line ?match(code(orber_tc:enum("Id", "Name", ["E1", false, "E3"]))),
+ code(orber_tc:enum("Id", "Name", ["E1", "E2", "E3"])),
+ ?match(code(orber_tc:enum(false, "Name", ["E1", "E2", "E3"]))),
+ ?match(code(orber_tc:enum("Id", 42, ["E1", "E2", "E3"]))),
+ ?match(code(orber_tc:enum("Id", "Name", ["E1", false, "E3"]))),
ok.
%%-----------------------------------------------------------------
%% Test Case: string
%% Description:
%%-----------------------------------------------------------------
-string(doc) -> [];
-string(suite) -> [];
string(_) ->
- ?line true = orber_tc:check_tc(orber_tc:string(0)),
- ?line true = orber_tc:check_tc(orber_tc:string(1)),
- ?line false = orber_tc:check_tc(orber_tc:string("wrong")),
- ?line code(orber_tc:string(0)),
- ?line code(orber_tc:string(1)),
- ?line ?match(code(orber_tc:string(-1))),
- ?line ?match(code(orber_tc:string(?ULONGMAX+1))),
- ?line ?match(code(orber_tc:string("wrong"))),
+ true = orber_tc:check_tc(orber_tc:string(0)),
+ true = orber_tc:check_tc(orber_tc:string(1)),
+ false = orber_tc:check_tc(orber_tc:string("wrong")),
+ code(orber_tc:string(0)),
+ code(orber_tc:string(1)),
+ ?match(code(orber_tc:string(-1))),
+ ?match(code(orber_tc:string(?ULONGMAX+1))),
+ ?match(code(orber_tc:string("wrong"))),
ok.
%%-----------------------------------------------------------------
%% Test Case: wstring
%% Description:
%%-----------------------------------------------------------------
-wstring(doc) -> [];
-wstring(suite) -> [];
wstring(_) ->
- ?line true = orber_tc:check_tc(orber_tc:wstring(0)),
- ?line true = orber_tc:check_tc(orber_tc:wstring(1)),
- ?line false = orber_tc:check_tc(orber_tc:wstring("wrong")),
- ?line code(orber_tc:wstring(0)),
- ?line code(orber_tc:wstring(1)),
- ?line ?match(code(orber_tc:wstring(-1))),
- ?line ?match(code(orber_tc:wstring(?ULONGMAX+1))),
- ?line ?match(code(orber_tc:wstring(false))),
+ true = orber_tc:check_tc(orber_tc:wstring(0)),
+ true = orber_tc:check_tc(orber_tc:wstring(1)),
+ false = orber_tc:check_tc(orber_tc:wstring("wrong")),
+ code(orber_tc:wstring(0)),
+ code(orber_tc:wstring(1)),
+ ?match(code(orber_tc:wstring(-1))),
+ ?match(code(orber_tc:wstring(?ULONGMAX+1))),
+ ?match(code(orber_tc:wstring(false))),
ok.
%%-----------------------------------------------------------------
%% Test Case: sequence
%% Description:
%%-----------------------------------------------------------------
-sequence(doc) -> [];
-sequence(suite) -> [];
sequence(_) ->
- ?line true = orber_tc:check_tc(orber_tc:sequence(orber_tc:struct("Id", "Name", ?ELIST), 0)),
- ?line code(orber_tc:sequence(orber_tc:struct("Id", "Name", ?ELIST), 0)),
+ true = orber_tc:check_tc(orber_tc:sequence(orber_tc:struct("Id", "Name", ?ELIST), 0)),
+ code(orber_tc:sequence(orber_tc:struct("Id", "Name", ?ELIST), 0)),
ok.
%%-----------------------------------------------------------------
%% Test Case: array
%% Description:
%%-----------------------------------------------------------------
-array(doc) -> [];
-array(suite) -> [];
array(_) ->
- ?line true = orber_tc:check_tc(orber_tc:array(orber_tc:struct("Id", "Name", ?ELIST), 1)),
- ?line code(orber_tc:array(orber_tc:struct("Id", "Name", ?ELIST), 1)),
+ true = orber_tc:check_tc(orber_tc:array(orber_tc:struct("Id", "Name", ?ELIST), 1)),
+ code(orber_tc:array(orber_tc:struct("Id", "Name", ?ELIST), 1)),
ok.
%%-----------------------------------------------------------------
%% Test Case: alias
%% Description:
%%-----------------------------------------------------------------
-alias(doc) -> [];
-alias(suite) -> [];
alias(_) ->
- ?line true = orber_tc:check_tc(orber_tc:alias("Id", "Name", orber_tc:struct("Id", "Name", ?ELIST))),
- ?line false = orber_tc:check_tc(orber_tc:alias(false, "Name", orber_tc:struct("Id", "Name", ?ELIST))),
- ?line false = orber_tc:check_tc(orber_tc:alias("Id", 42, orber_tc:struct("Id", "Name", ?ELIST))),
- ?line false = orber_tc:check_tc(orber_tc:alias("Id", "Name", "wrong")),
- ?line code(orber_tc:alias("Id", "Name", orber_tc:struct("Id", "Name", ?ELIST))),
- ?line ?match(code(orber_tc:alias("Id", "Name", orber_tc:struct("Id", "Name", ?VELIST)))),
+ true = orber_tc:check_tc(orber_tc:alias("Id", "Name", orber_tc:struct("Id", "Name", ?ELIST))),
+ false = orber_tc:check_tc(orber_tc:alias(false, "Name", orber_tc:struct("Id", "Name", ?ELIST))),
+ false = orber_tc:check_tc(orber_tc:alias("Id", 42, orber_tc:struct("Id", "Name", ?ELIST))),
+ false = orber_tc:check_tc(orber_tc:alias("Id", "Name", "wrong")),
+ code(orber_tc:alias("Id", "Name", orber_tc:struct("Id", "Name", ?ELIST))),
+ ?match(code(orber_tc:alias("Id", "Name", orber_tc:struct("Id", "Name", ?VELIST)))),
ok.
%%-----------------------------------------------------------------
%% Test Case: exception
%% Description:
%%-----------------------------------------------------------------
-exception(doc) -> [];
-exception(suite) -> [];
exception(_) ->
- ?line true = orber_tc:check_tc(orber_tc:exception("Id", "Name", ?ELIST)),
- ?line false = orber_tc:check_tc(orber_tc:exception(42, "Name", ?ELIST)),
- ?line false = orber_tc:check_tc(orber_tc:exception("Id", false, ?ELIST)),
- ?line false = orber_tc:check_tc(orber_tc:exception("Id", "Name", "wrong")),
- ?line code(orber_tc:exception("Id", "Name", ?ELIST)),
- ?line ?match(code(orber_tc:exception(42, "Name", ?ELIST))),
- ?line ?match(code(orber_tc:exception("Id", false, ?ELIST))),
- ?line ?match(code(orber_tc:exception("Id", "Name", "wrong"))),
+ true = orber_tc:check_tc(orber_tc:exception("Id", "Name", ?ELIST)),
+ false = orber_tc:check_tc(orber_tc:exception(42, "Name", ?ELIST)),
+ false = orber_tc:check_tc(orber_tc:exception("Id", false, ?ELIST)),
+ false = orber_tc:check_tc(orber_tc:exception("Id", "Name", "wrong")),
+ code(orber_tc:exception("Id", "Name", ?ELIST)),
+ ?match(code(orber_tc:exception(42, "Name", ?ELIST))),
+ ?match(code(orber_tc:exception("Id", false, ?ELIST))),
+ ?match(code(orber_tc:exception("Id", "Name", "wrong"))),
ok.
@@ -562,86 +506,76 @@ exception(_) ->
%% Test Case: fixed
%% Description:
%%-----------------------------------------------------------------
-fixed(doc) -> [];
-fixed(suite) -> [];
fixed(_) ->
- ?line true = orber_tc:check_tc(orber_tc:fixed(25, 2)),
- ?line code(orber_tc:fixed(25, 2)),
+ true = orber_tc:check_tc(orber_tc:fixed(25, 2)),
+ code(orber_tc:fixed(25, 2)),
ok.
%%-----------------------------------------------------------------
%% Test Case: value
%% Description:
%%-----------------------------------------------------------------
-value(doc) -> [];
-value(suite) -> [];
value(_) ->
- ?line true = orber_tc:check_tc(orber_tc:value("Id", "Name", 42,
+ true = orber_tc:check_tc(orber_tc:value("Id", "Name", 42,
orber_tc:fixed(25, 2), ?VELIST)),
- ?line false = orber_tc:check_tc(orber_tc:value(42, "Name", 42,
+ false = orber_tc:check_tc(orber_tc:value(42, "Name", 42,
orber_tc:fixed(25, 2), ?VELIST)),
- ?line false = orber_tc:check_tc(orber_tc:value("Id", 42, 42,
+ false = orber_tc:check_tc(orber_tc:value("Id", 42, 42,
orber_tc:fixed(25, 2), ?VELIST)),
- ?line false = orber_tc:check_tc(orber_tc:value("Id", "Name", "wrong",
+ false = orber_tc:check_tc(orber_tc:value("Id", "Name", "wrong",
orber_tc:fixed(25, 2), ?VELIST)),
- ?line false = orber_tc:check_tc(orber_tc:value("Id", "Name", "42",
+ false = orber_tc:check_tc(orber_tc:value("Id", "Name", "42",
orber_tc:fixed(25, 2), ?VELIST)),
- ?line false = orber_tc:check_tc(orber_tc:value("Id", "Name", "42",
+ false = orber_tc:check_tc(orber_tc:value("Id", "Name", "42",
?VELIST, ?VELIST)),
- ?line false = orber_tc:check_tc(orber_tc:value("Id", "Name", "42",
+ false = orber_tc:check_tc(orber_tc:value("Id", "Name", "42",
orber_tc:fixed(25, 2), false)),
- ?line code(orber_tc:value("Id", "Name", 42, orber_tc:long(), ?VELIST)),
+ code(orber_tc:value("Id", "Name", 42, orber_tc:long(), ?VELIST)),
ok.
%%-----------------------------------------------------------------
%% Test Case: value_box
%% Description:
%%-----------------------------------------------------------------
-value_box(doc) -> [];
-value_box(suite) -> [];
value_box(_) ->
- ?line true = orber_tc:check_tc(orber_tc:value_box("Id", "Name",
+ true = orber_tc:check_tc(orber_tc:value_box("Id", "Name",
orber_tc:fixed(25, 2))),
- ?line false = orber_tc:check_tc(orber_tc:value_box(42, "Name",
+ false = orber_tc:check_tc(orber_tc:value_box(42, "Name",
orber_tc:fixed(25, 2))),
- ?line false = orber_tc:check_tc(orber_tc:value_box("Id", 42,
+ false = orber_tc:check_tc(orber_tc:value_box("Id", 42,
orber_tc:fixed(25, 2))),
- ?line false = orber_tc:check_tc(orber_tc:value_box("Id", "Name", "wrong")),
- ?line code(orber_tc:value_box("Id", "Name", orber_tc:long())),
- ?line ?match(code(orber_tc:value_box(42, "Name", orber_tc:short()))),
- ?line ?match(code(orber_tc:value_box("Id", 42, orber_tc:char()))),
- ?line ?match(code(orber_tc:value_box("Id", "Name", false))),
+ false = orber_tc:check_tc(orber_tc:value_box("Id", "Name", "wrong")),
+ code(orber_tc:value_box("Id", "Name", orber_tc:long())),
+ ?match(code(orber_tc:value_box(42, "Name", orber_tc:short()))),
+ ?match(code(orber_tc:value_box("Id", 42, orber_tc:char()))),
+ ?match(code(orber_tc:value_box("Id", "Name", false))),
ok.
%%-----------------------------------------------------------------
%% Test Case: native
%% Description:
%%-----------------------------------------------------------------
-native(doc) -> [];
-native(suite) -> [];
native(_) ->
- ?line true = orber_tc:check_tc(orber_tc:native("Id", "Name")),
- ?line false = orber_tc:check_tc(orber_tc:native(42, "Name")),
- ?line false = orber_tc:check_tc(orber_tc:native("Id", 42)),
- ?line code(orber_tc:native("Id", "Name")),
- ?line ?match(code(orber_tc:native(42, "Name"))),
- ?line ?match(code(orber_tc:native("Id", 42))),
+ true = orber_tc:check_tc(orber_tc:native("Id", "Name")),
+ false = orber_tc:check_tc(orber_tc:native(42, "Name")),
+ false = orber_tc:check_tc(orber_tc:native("Id", 42)),
+ code(orber_tc:native("Id", "Name")),
+ ?match(code(orber_tc:native(42, "Name"))),
+ ?match(code(orber_tc:native("Id", 42))),
ok.
%%-----------------------------------------------------------------
%% Test Case: abstract_interface
%% Description:
%%-----------------------------------------------------------------
-abstract_interface(doc) -> [];
-abstract_interface(suite) -> [];
abstract_interface(_) ->
- ?line true = orber_tc:check_tc(orber_tc:abstract_interface("RepId", "Name")),
- ?line false = orber_tc:check_tc(orber_tc:abstract_interface(false, "Name")),
- ?line false = orber_tc:check_tc(orber_tc:abstract_interface("RepId", 42)),
- ?line code(orber_tc:abstract_interface("RepId", "Name")),
- ?line ?match(code(orber_tc:abstract_interface(42, "Name"))),
- ?line ?match(code(orber_tc:abstract_interface("Id", 42))),
+ true = orber_tc:check_tc(orber_tc:abstract_interface("RepId", "Name")),
+ false = orber_tc:check_tc(orber_tc:abstract_interface(false, "Name")),
+ false = orber_tc:check_tc(orber_tc:abstract_interface("RepId", 42)),
+ code(orber_tc:abstract_interface("RepId", "Name")),
+ ?match(code(orber_tc:abstract_interface(42, "Name"))),
+ ?match(code(orber_tc:abstract_interface("Id", 42))),
ok.
@@ -650,22 +584,18 @@ abstract_interface(_) ->
%% Test Case: indirection
%% Description:
%%-----------------------------------------------------------------
-indirection(doc) -> [];
-indirection(suite) -> [];
indirection(_) ->
- ?line true = orber_tc:check_tc({'none', 42}),
+ true = orber_tc:check_tc({'none', 42}),
ok.
%%-----------------------------------------------------------------
%% Test Case: get_tc
%% Description:
%%-----------------------------------------------------------------
-get_tc(doc) -> [];
-get_tc(suite) -> [];
get_tc(_) ->
TC = 'CosNaming_Binding':tc(),
- ?line TC = orber_tc:get_tc({'CosNaming_Binding', 42}),
- ?line ?match(orber_tc:get_tc({'none', 42})),
+ TC = orber_tc:get_tc({'CosNaming_Binding', 42}),
+ ?match(orber_tc:get_tc({'none', 42})),
ok.
%%-----------------------------------------------------------------
diff --git a/lib/os_mon/c_src/cpu_sup.c b/lib/os_mon/c_src/cpu_sup.c
index 61bf1b0352..17ef48c26e 100644
--- a/lib/os_mon/c_src/cpu_sup.c
+++ b/lib/os_mon/c_src/cpu_sup.c
@@ -47,6 +47,10 @@
#include <kstat.h>
#endif
+#if (defined(__APPLE__) && defined(__MACH__))
+#include <mach/mach.h>
+#endif
+
#include <errno.h>
#if defined(__sun__) || defined(__linux__)
@@ -73,6 +77,10 @@ typedef struct {
#endif
+#if (defined(__APPLE__) && defined(__MACH__))
+#define CU_OSX_VALUES (5)
+#endif
+
#if defined(__FreeBSD__)
#include <sys/resource.h>
#include <sys/sysctl.h>
@@ -164,7 +172,7 @@ static int processors_online() {
}
#endif
-#if defined(__FreeBSD__)
+#if (defined(__APPLE__) && defined(__MACH__)) || defined(__FreeBSD__)
void getsysctl(const char *, void *, size_t);
#endif
@@ -173,7 +181,7 @@ int main(int argc, char** argv) {
int rc;
int sz;
unsigned int *rv;
-#if defined(__linux__) || defined(__FreeBSD__)
+#if defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) ||defined(__FreeBSD__)
unsigned int no_of_cpus = 0;
#endif
@@ -190,6 +198,13 @@ int main(int argc, char** argv) {
}
#endif
+#if (defined(__APPLE__) && defined(__MACH__))
+ getsysctl("hw.ncpu", &no_of_cpus, sizeof(int));
+ if ( (rv = (unsigned int*)malloc(sizeof(unsigned int)*(2 + 2*no_of_cpus*CU_OSX_VALUES))) == NULL) {
+ error("cpu_sup: malloc error");
+ }
+#endif
+
#if defined(__FreeBSD__)
getsysctl("hw.ncpu", &no_of_cpus, sizeof(int));
if ( (rv = (unsigned int*)malloc(sizeof(unsigned int)*(2 + 2*no_of_cpus*CU_BSD_VALUES))) == NULL) {
@@ -222,7 +237,7 @@ int main(int argc, char** argv) {
case AVG5: bsd_loadavg(1); break;
case AVG15: bsd_loadavg(2); break;
#endif
-#if defined(__sun__) || defined(__linux__) || defined(__FreeBSD__)
+#if defined(__sun__) || defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) || defined(__FreeBSD__)
case UTIL: util_measure(&rv,&sz); sendv(rv, sz); break;
#endif
case QUIT: free((void*)rv); return 0;
@@ -538,10 +553,60 @@ static void util_measure(unsigned int **result_vec, int *result_sz) {
#endif
/* ---------------------------- *
- * FreeBSD stat functions *
+ * OSX util functions *
* ---------------------------- */
-#if defined(__FreeBSD__)
+#if (defined(__APPLE__) && defined(__MACH__))
+
+static void util_measure(unsigned int **result_vec, int *result_sz) {
+ natural_t no_of_cpus;
+ processor_info_array_t info_array;
+ mach_msg_type_number_t info_count;
+ mach_port_t host_port;
+ kern_return_t error;
+ processor_cpu_load_info_data_t *cpu_load_info = NULL;
+ unsigned int *rv = NULL;
+ int i;
+
+ host_port = mach_host_self();
+ error = host_processor_info(host_port, PROCESSOR_CPU_LOAD_INFO,
+ &no_of_cpus, &info_array, &info_count);
+ if (error != KERN_SUCCESS) {
+ *result_sz = 0;
+ return;
+ }
+ mach_port_deallocate(mach_task_self(), host_port);
+ cpu_load_info = (processor_cpu_load_info_data_t *) info_array;
+
+ rv = *result_vec;
+ rv[0] = no_of_cpus;
+ rv[1] = CU_OSX_VALUES;
+ ++rv; /* first value is number of cpus */
+ ++rv; /* second value is number of entries */
+
+ for (i = 0; i < no_of_cpus; ++i) {
+ rv[0] = CU_CPU_ID; rv[1] = i;
+ rv[2] = CU_USER; rv[3] = cpu_load_info[i].cpu_ticks[CPU_STATE_USER];
+ rv[4] = CU_NICE_USER; rv[5] = cpu_load_info[i].cpu_ticks[CPU_STATE_NICE];
+ rv[6] = CU_KERNEL; rv[7] = cpu_load_info[i].cpu_ticks[CPU_STATE_SYSTEM];
+ rv[8] = CU_IDLE; rv[9] = cpu_load_info[i].cpu_ticks[CPU_STATE_IDLE];
+ rv += CU_OSX_VALUES*2;
+ }
+
+ *result_sz = 2 + 2*CU_OSX_VALUES * no_of_cpus;
+
+ error = vm_deallocate(mach_task_self(), (vm_address_t)info_array,
+ info_count * sizeof(int));
+ if (error != KERN_SUCCESS)
+ *result_sz = 0;
+}
+#endif
+
+/* ---------------------------- *
+ * Utils for OSX and FreeBSD *
+ * ---------------------------- */
+
+#if (defined(__APPLE__) && defined(__MACH__)) || defined(__FreeBSD__)
#define EXIT_WITH(msg) (rich_error(msg, __FILE__, __LINE__))
#define RICH_BUFLEN (213) /* left in error(char*) */
@@ -553,6 +618,25 @@ void rich_error(const char *reason, const char *file, const int line) {
}
#undef RICH_BUFLEN
+void getsysctl(const char *name, void *ptr, size_t len)
+{
+ size_t gotlen = len;
+ if (sysctlbyname(name, ptr, &gotlen, NULL, 0) != 0) {
+ EXIT_WITH("sysctlbyname failed");
+ }
+ if (gotlen != len) {
+ EXIT_WITH("sysctlbyname: unexpected length");
+ }
+}
+#endif
+
+
+/* ---------------------------- *
+ * FreeBSD stat functions *
+ * ---------------------------- */
+
+#if defined(__FreeBSD__)
+
static void util_measure(unsigned int **result_vec, int *result_sz) {
int no_of_cpus;
size_t size_cpu_times;
@@ -588,17 +672,6 @@ static void util_measure(unsigned int **result_vec, int *result_sz) {
*result_sz = 2 + 2*CU_BSD_VALUES * no_of_cpus;
}
-
-void getsysctl(const char *name, void *ptr, size_t len)
-{
- size_t gotlen = len;
- if (sysctlbyname(name, ptr, &gotlen, NULL, 0) != 0) {
- EXIT_WITH("sysctlbyname failed");
- }
- if (gotlen != len) {
- EXIT_WITH("sysctlbyname: unexpected length");
- }
-}
#endif
diff --git a/lib/os_mon/doc/src/notes.xml b/lib/os_mon/doc/src/notes.xml
index fae9c30b1d..e6e80b046d 100644
--- a/lib/os_mon/doc/src/notes.xml
+++ b/lib/os_mon/doc/src/notes.xml
@@ -47,6 +47,19 @@
<p>
Own Id: OTP-13548 Aux Id: PR-1046 </p>
</item>
+ <item>
+ <p>
+ Implement cpu_sup:util/0,1 on Mac OSX</p>
+ <p>
+ Own Id: OTP-13597 Aux Id: PR-1049 </p>
+ </item>
+ <item>
+ <p>
+ Fix memsup:get_os_wordsize() on 64-bit FreeBSD and 64-bit
+ Linux PPC</p>
+ <p>
+ Own Id: OTP-13601 Aux Id: PR-1039 </p>
+ </item>
</list>
</section>
diff --git a/lib/os_mon/src/cpu_sup.erl b/lib/os_mon/src/cpu_sup.erl
index 5664615230..e758b63d19 100644
--- a/lib/os_mon/src/cpu_sup.erl
+++ b/lib/os_mon/src/cpu_sup.erl
@@ -162,7 +162,8 @@ handle_call({?util, D, PC}, {Client, _Tag},
#state{os_type = {unix, Flavor}} = State)
when Flavor == sunos;
Flavor == linux;
- Flavor == freebsd ->
+ Flavor == freebsd;
+ Flavor == darwin ->
case measurement_server_call(State#state.server, {?util, D, PC, Client}) of
{error, Reason} ->
{ reply,
@@ -531,11 +532,11 @@ measurement_server_loop(State) ->
measurement_server_loop(State)
end;
{Pid, Request} ->
- try get_uint32_measurement(Request, State) of
- Result -> Pid ! {data, Result}
- catch
- Error -> Pid ! {error, Error}
- end,
+ _ = try get_uint32_measurement(Request, State) of
+ Result -> Pid ! {data, Result}
+ catch
+ Error -> Pid ! {error, Error}
+ end,
measurement_server_loop(State);
{'EXIT', OldPid, _n} when State#internal.port == OldPid ->
{ok, NewPid} = port_server_start_link(),
diff --git a/lib/os_mon/src/disksup.erl b/lib/os_mon/src/disksup.erl
index 2b5447cfcb..492e4814da 100644
--- a/lib/os_mon/src/disksup.erl
+++ b/lib/os_mon/src/disksup.erl
@@ -153,7 +153,7 @@ handle_cast(_Msg, State) ->
handle_info(timeout, State) ->
NewDiskData = check_disk_space(State#state.os, State#state.port,
State#state.threshold),
- timer:send_after(State#state.timeout, timeout),
+ {ok, _Tref} = timer:send_after(State#state.timeout, timeout),
{noreply, State#state{diskdata = NewDiskData}};
handle_info({'EXIT', _Port, Reason}, State) ->
{stop, {port_died, Reason}, State#state{port=not_used}};
diff --git a/lib/os_mon/src/memsup.erl b/lib/os_mon/src/memsup.erl
index 833e1ce6d1..4729d090f8 100644
--- a/lib/os_mon/src/memsup.erl
+++ b/lib/os_mon/src/memsup.erl
@@ -408,18 +408,18 @@ handle_info({collected_sys, {Alloc,Total}}, State) ->
%% Last, if this was a periodic check, start a timer for the next
%% one. New timeout = interval-time spent collecting,
- case lists:member(reg, State#state.pending) of
- true ->
- Time = case State2#state.timeout - TimeSpent of
- MS when MS<0 ->
- 0;
- MS ->
- MS
- end,
- erlang:send_after(Time, self(), time_to_collect);
- false ->
- ignore
- end,
+ _ = case lists:member(reg, State#state.pending) of
+ true ->
+ Time = case State2#state.timeout - TimeSpent of
+ MS when MS<0 ->
+ 0;
+ MS ->
+ MS
+ end,
+ erlang:send_after(Time, self(), time_to_collect);
+ false ->
+ ignore
+ end,
{noreply, State2#state{wd_timer=undefined, pending=[]}};
handle_info({'EXIT', Pid, normal}, State) when is_pid(Pid) ->
%% Temporary pid terminating when job is done
@@ -448,17 +448,17 @@ handle_info(reg_collection_timeout, State) ->
%% If it is a periodic check which has timed out, start a timer for
%% the next one
%% New timeout = interval-helper timeout
- case lists:member(reg, State#state.pending) of
- true ->
- Time =
- case State#state.timeout-State#state.helper_timeout of
- MS when MS<0 -> 0;
- MS -> MS
- end,
- erlang:send_after(Time, self(), time_to_collect);
- false ->
- ignore
- end,
+ _ = case lists:member(reg, State#state.pending) of
+ true ->
+ Time =
+ case State#state.timeout-State#state.helper_timeout of
+ MS when MS<0 -> 0;
+ MS -> MS
+ end,
+ erlang:send_after(Time, self(), time_to_collect);
+ false ->
+ ignore
+ end,
{noreply, State#state{wd_timer=undefined, pending=[]}};
handle_info({'EXIT', Pid, cancel}, State) when is_pid(Pid) ->
%% Temporary pid terminating as ordered
@@ -469,7 +469,7 @@ handle_info({collected_ext_sys, SysMemUsage}, State) ->
%% Cancel watchdog timer (and as a security mearure,
%% also flush any ext_collection_timeout message)
- erlang:cancel_timer(State#state.ext_wd_timer),
+ ok = erlang:cancel_timer(State#state.ext_wd_timer, [{async,true}]),
flush(ext_collection_timeout),
%% Send the reply to all waiting clients, preserving time order
@@ -535,7 +535,7 @@ code_change(Vsn, PrevState, "1.8") ->
undefined ->
ignore;
TimerRef1 ->
- erlang:cancel_timer(TimerRef1),
+ ok = erlang:cancel_timer(TimerRef1, [{async,true}]),
SysOnly = PrevState#state.sys_only,
MemUsage = dummy_reply(get_memory_data, SysOnly),
SysMemUsage1 = dummy_reply(get_system_memory_data),
@@ -545,7 +545,7 @@ code_change(Vsn, PrevState, "1.8") ->
undefined ->
ignore;
TimerRef2 ->
- erlang:cancel_timer(TimerRef2),
+ ok = erlang:cancel_timer(TimerRef2, [{async,true}]),
SysMemUsage2 = dummy_reply(get_system_memory_data),
reply(PrevState#state.pending, undef, SysMemUsage2)
end,
@@ -589,7 +589,7 @@ code_change(Vsn, PrevState, "1.8") ->
undefined ->
ignore;
TimerRef1 ->
- erlang:cancel_timer(TimerRef1),
+ ok = erlang:cancel_timer(TimerRef1, [{async,true}]),
MemUsage = dummy_reply(get_memory_data, SysOnly),
Pending2 = lists:map(fun(From) -> {reg,From} end,
Pending),
@@ -599,7 +599,7 @@ code_change(Vsn, PrevState, "1.8") ->
undefined ->
ignore;
TimerRef2 ->
- erlang:cancel_timer(TimerRef2),
+ ok = erlang:cancel_timer(TimerRef2, [{async,true}]),
SysMemUsage = dummy_reply(get_system_memory_data),
ExtPending2 = lists:map(fun(From) -> {ext,From} end,
ExtPending),
@@ -699,6 +699,8 @@ get_os_wordsize_with_uname() ->
case String of
"x86_64" -> 64;
"sparc64" -> 64;
+ "amd64" -> 64;
+ "ppc64" -> 64;
_ -> 32
end.
diff --git a/lib/os_mon/test/cpu_sup_SUITE.erl b/lib/os_mon/test/cpu_sup_SUITE.erl
index 11648d3547..7122d23503 100644
--- a/lib/os_mon/test/cpu_sup_SUITE.erl
+++ b/lib/os_mon/test/cpu_sup_SUITE.erl
@@ -63,6 +63,8 @@ all() ->
[load_api, util_api, util_values, port, unavailable];
{unix, freebsd} ->
[load_api, util_api, util_values, port, unavailable];
+ {unix, darwin} ->
+ [load_api, util_api, util_values, port, unavailable];
{unix, _OSname} -> [load_api];
_OS -> [unavailable]
end.
@@ -254,7 +256,7 @@ unavailable(Config) when is_list(Config) ->
restart(Config) when is_list(Config) ->
ok = application:set_env(os_mon, start_cpu_sup, true),
- {ok, _Pid} = supervisor:restart_child(os_mon_sup, cpu_sup),
+ supervisor:restart_child(os_mon_sup, cpu_sup),
ok.
%% Aux
diff --git a/lib/os_mon/test/memsup_SUITE.erl b/lib/os_mon/test/memsup_SUITE.erl
index fcd1417693..e40ed574e7 100644
--- a/lib/os_mon/test/memsup_SUITE.erl
+++ b/lib/os_mon/test/memsup_SUITE.erl
@@ -100,10 +100,16 @@ api(Config) when is_list(Config) ->
%% get_os_wordsize()
ok = case memsup:get_os_wordsize() of
- 32 -> ok;
- 64 -> ok;
- unsupported_os -> ok;
- _ -> error
+ 32 ->
+ 32 = 8*erlang:system_info({wordsize,external}),
+ ok;
+ 64 ->
+ % No reliable test here
+ ok;
+ unsupported_os ->
+ ok;
+ _ ->
+ error
end,
%% get_check_interval()
diff --git a/lib/os_mon/test/os_mon_SUITE.erl b/lib/os_mon/test/os_mon_SUITE.erl
index 033a5ae162..c373b5d851 100644
--- a/lib/os_mon/test/os_mon_SUITE.erl
+++ b/lib/os_mon/test/os_mon_SUITE.erl
@@ -21,7 +21,7 @@
-include_lib("common_test/include/ct.hrl").
%% Test server specific exports
--export([all/0, suite/0]).
+-export([all/0, suite/0, init_per_suite/1, end_per_suite/1]).
%% Test cases
-export([app_file/1, appup_file/1, config/1]).
@@ -36,6 +36,13 @@ all() ->
_OS -> [app_file, appup_file]
end.
+init_per_suite(Config) ->
+ Config.
+
+end_per_suite(_Config) ->
+ application:stop(os_mon),
+ ok.
+
%% Testing .app file
app_file(Config) when is_list(Config) ->
ok = test_server:app_test(os_mon),
diff --git a/lib/parsetools/doc/src/yecc.xml b/lib/parsetools/doc/src/yecc.xml
index 6ec9fb5f0e..9188bd2a22 100644
--- a/lib/parsetools/doc/src/yecc.xml
+++ b/lib/parsetools/doc/src/yecc.xml
@@ -201,7 +201,7 @@
<p>The grammar starts with an optional <c>header</c> section. The
header is put first in the generated file, before the module
declaration. The purpose of the header is to provide a means to
- make the documentation generated by <c>EDoc</c> look nicer. Each
+ make the documentation generated by EDoc look nicer. Each
header line should be enclosed in double quotes, and newlines
will be inserted between the lines. For example:</p>
<code>
diff --git a/lib/percept/doc/src/egd_ug.xmlsrc b/lib/percept/doc/src/egd_ug.xmlsrc
index 563780aa66..85d41ada79 100644
--- a/lib/percept/doc/src/egd_ug.xmlsrc
+++ b/lib/percept/doc/src/egd_ug.xmlsrc
@@ -51,24 +51,27 @@
</section>
<section>
<title>File example</title>
- <p>Drawing examples:</p>
- <codeinclude file="img.erl" tag="" type="none"></codeinclude>
- <image file="test1.gif">
- First save.
- <icaption>test1.png</icaption>
- </image>
- <image file="test2.gif">
- Second save.
- <icaption>test2.png</icaption>
- </image>
- <image file="test3.gif">
- Third save.
- <icaption>test3.png</icaption>
- </image>
- <image file="test4.gif">
- Fourth save.
- <icaption>test4.png</icaption>
- </image>
+ <p>Drawing examples:</p>
+ <codeinclude file="img.erl" tag="" type="none"></codeinclude>
+ <p> First save. </p>
+ <image file="test1.gif">
+ <icaption>test1.png</icaption>
+ </image>
+
+ <p> Second save. </p>
+ <image file="test2.gif">
+ <icaption>test2.png</icaption>
+ </image>
+
+ <p> Third save. </p>
+ <image file="test3.gif">
+ <icaption>test3.png</icaption>
+ </image>
+
+ <p> Fourth save. </p>
+ <image file="test4.gif">
+ <icaption>test4.png</icaption>
+ </image>
</section>
<section>
<title>ESI example</title>
diff --git a/lib/percept/doc/src/notes.xml b/lib/percept/doc/src/notes.xml
index 06fd4c7b17..c9d5d3ae29 100644
--- a/lib/percept/doc/src/notes.xml
+++ b/lib/percept/doc/src/notes.xml
@@ -33,7 +33,7 @@
</header>
<p>This document describes the changes made to the Percept application.</p>
-<section><title>Percept 0.8.12</title>
+<section><title>Percept 0.9</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
@@ -46,6 +46,20 @@
</list>
</section>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Improve line implementation</p>
+ <p>
+ Add capabilities for line thickness and anti-aliasing.</p>
+ <p>
+ Own Id: OTP-13598</p>
+ </item>
+ </list>
+ </section>
+
</section>
<section><title>Percept 0.8.11</title>
diff --git a/lib/percept/src/egd.erl b/lib/percept/src/egd.erl
index d57b7bb81d..fe52da71f1 100644
--- a/lib/percept/src/egd.erl
+++ b/lib/percept/src/egd.erl
@@ -37,9 +37,7 @@
-include("egd.hrl").
%%==========================================================================
-%%
-%% Type definitions
-%%
+%% Type definitions
%%==========================================================================
%% @type egd_image()
@@ -54,9 +52,7 @@
-type color() :: {float(), float(), float(), float()}.
%%==========================================================================
-%%
-%% Interface functions
-%%
+%% Interface functions
%%==========================================================================
%% @spec create(integer(), integer()) -> egd_image()
@@ -74,8 +70,7 @@ create(Width,Height) ->
-spec destroy(Image :: egd_image()) -> ok.
destroy(Image) ->
- cast(Image, destroy),
- ok.
+ cast(Image, destroy).
%% @spec render(egd_image()) -> binary()
@@ -113,8 +108,7 @@ render(Image, Type, Options) ->
%% mainly.
information(Pid) ->
- cast(Pid, information),
- ok.
+ cast(Pid, information).
%% @spec line(egd_image(), point(), point(), color()) -> ok
%% @doc Creates a line object from P1 to P2 in the image.
@@ -126,8 +120,7 @@ information(Pid) ->
Color :: color()) -> 'ok'.
line(Image, P1, P2, Color) ->
- cast(Image, {line, P1, P2, Color}),
- ok.
+ cast(Image, {line, P1, P2, Color}).
%% @spec color( Value | Name ) -> color()
%% where
@@ -152,74 +145,67 @@ color(_Image, Color) ->
%% @doc Creates a text object.
text(Image, P, Font, Text, Color) ->
- cast(Image, {text, P, Font, Text, Color}),
- ok.
+ cast(Image, {text, P, Font, Text, Color}).
%% @spec rectangle(egd_image(), point(), point(), color()) -> ok
%% @doc Creates a rectangle object.
rectangle(Image, P1, P2, Color) ->
- cast(Image, {rectangle, P1, P2, Color}),
- ok.
+ cast(Image, {rectangle, P1, P2, Color}).
%% @spec filledRectangle(egd_image(), point(), point(), color()) -> ok
%% @doc Creates a filled rectangle object.
filledRectangle(Image, P1, P2, Color) ->
- cast(Image, {filled_rectangle, P1, P2, Color}),
- ok.
+ cast(Image, {filled_rectangle, P1, P2, Color}).
%% @spec filledEllipse(egd_image(), point(), point(), color()) -> ok
%% @doc Creates a filled ellipse object.
filledEllipse(Image, P1, P2, Color) ->
- cast(Image, {filled_ellipse, P1, P2, Color}),
- ok.
+ cast(Image, {filled_ellipse, P1, P2, Color}).
%% @spec filledTriangle(egd_image(), point(), point(), point(), color()) -> ok
%% @hidden
%% @doc Creates a filled triangle object.
filledTriangle(Image, P1, P2, P3, Color) ->
- cast(Image, {filled_triangle, P1, P2, P3, Color}),
- ok.
+ cast(Image, {filled_triangle, P1, P2, P3, Color}).
%% @spec polygon(egd_image(), [point()], color()) -> ok
%% @hidden
%% @doc Creates a filled filled polygon object.
polygon(Image, Pts, Color) ->
- cast(Image, {polygon, Pts, Color}),
- ok.
+ cast(Image, {polygon, Pts, Color}).
%% @spec arc(egd_image(), point(), point(), color()) -> ok
%% @hidden
%% @doc Creates an arc with radius of bbx corner.
arc(Image, P1, P2, Color) ->
- cast(Image, {arc, P1, P2, Color}),
- ok.
+ cast(Image, {arc, P1, P2, Color}).
%% @spec arc(egd_image(), point(), point(), integer(), color()) -> ok
%% @hidden
%% @doc Creates an arc.
arc(Image, P1, P2, D, Color) ->
- cast(Image, {arc, P1, P2, D, Color}),
- ok.
+ cast(Image, {arc, P1, P2, D, Color}).
%% @spec save(binary(), string()) -> ok
%% @doc Saves the binary to file.
save(Binary, Filename) when is_binary(Binary) ->
- file:write_file(Filename, Binary),
+ ok = file:write_file(Filename, Binary),
ok.
% ---------------------------------
% Aux functions
% ---------------------------------
cast(Pid, Command) ->
- Pid ! {egd, self(), Command}.
+ Pid ! {egd, self(), Command},
+ ok.
call(Pid, Command) ->
Pid ! {egd, self(), Command},
diff --git a/lib/percept/src/egd.hrl b/lib/percept/src/egd.hrl
index 1b125d3a08..fc0a7e10ee 100644
--- a/lib/percept/src/egd.hrl
+++ b/lib/percept/src/egd.hrl
@@ -41,6 +41,5 @@
-ifdef(debug).
-define(dbg(X), io:format("DEBUG: ~p:~p~n",[?MODULE, X])).
-else.
--define(dbg(X), void).
+-define(dbg(X), ok).
-endif.
-
diff --git a/lib/percept/src/egd_font.erl b/lib/percept/src/egd_font.erl
index 95203d5441..ef1cc434df 100644
--- a/lib/percept/src/egd_font.erl
+++ b/lib/percept/src/egd_font.erl
@@ -51,9 +51,7 @@
%%
%%==========================================================================
-%%
-%% Interface functions
-%%
+%% Interface functions
%%==========================================================================
size(Font) ->
@@ -70,15 +68,14 @@ load(Filename) ->
load_font_header(Font).
%%==========================================================================
-%%
-%% Internal functions
-%%
+%% Internal functions
%%==========================================================================
%% ETS handler functions
initialize_table() ->
- ets:new(egd_font_table, [named_table, ordered_set, public]).
+ egd_font_table = ets:new(egd_font_table, [named_table, ordered_set, public]),
+ ok.
glyph_insert(Font, Code, Translation, LSs) ->
Element = {{Font, Code}, Translation, LSs},
diff --git a/lib/percept/src/egd_primitives.erl b/lib/percept/src/egd_primitives.erl
index 7b6e15efe7..b64189c552 100644
--- a/lib/percept/src/egd_primitives.erl
+++ b/lib/percept/src/egd_primitives.erl
@@ -23,32 +23,27 @@
-module(egd_primitives).
--export([
- create/2,
- color/1,
- pixel/3,
- polygon/3,
- line/4,
- line/5,
- arc/4,
- arc/5,
- rectangle/4,
- filledRectangle/4,
- filledEllipse/4,
- filledTriangle/5,
- text/5
- ]).
-
--export([
- info/1,
- object_info/1,
- rgb_float2byte/1
- ]).
--export([
- arc_to_edges/3,
- convex_hull/1,
- edges/1
- ]).
+-export([create/2,
+ color/1,
+ pixel/3,
+ polygon/3,
+ line/4,
+ line/5,
+ arc/4,
+ arc/5,
+ rectangle/4,
+ filledRectangle/4,
+ filledEllipse/4,
+ filledTriangle/5,
+ text/5]).
+
+-export([info/1,
+ object_info/1,
+ rgb_float2byte/1]).
+
+-export([arc_to_edges/3,
+ convex_hull/1,
+ edges/1]).
-include("egd.hrl").
@@ -75,22 +70,16 @@ object_info(O) ->
%% interface functions
-line(I, Sp, Ep, Color) ->
- I#image{ objects = [
- #image_object{
- type = line,
- points = [Sp, Ep],
- span = span([Sp, Ep]),
- color = Color} | I#image.objects]}.
+line(#image{objects=Os}=I, Sp, Ep, Color) ->
+ line(#image{objects=Os}=I, Sp, Ep, 1, Color).
-line(I, Sp, Ep, Stroke, Color) ->
- I#image{ objects = [
- #image_object{
- type = line,
- points = [Sp, Ep],
- span = span([Sp, Ep]),
- internals = Stroke,
- color = Color } | I#image.objects]}.
+line(#image{objects=Os}=I, Sp, Ep, Wd, Color) ->
+ I#image{objects=[#image_object{
+ internals = Wd,
+ type = line,
+ points = [Sp, Ep],
+ span = span([Sp, Ep]),
+ color = Color}|Os]}.
arc(I, {Sx,Sy} = Sp, {Ex,Ey} = Ep, Color) ->
X = Ex - Sx,
@@ -98,241 +87,234 @@ arc(I, {Sx,Sy} = Sp, {Ex,Ey} = Ep, Color) ->
R = math:sqrt(X*X + Y*Y)/2,
arc(I, Sp, Ep, R, Color).
-arc(I, Sp, Ep, D, Color) ->
+arc(#image{objects=Os}=I, Sp, Ep, D, Color) ->
SpanPts = lists:flatten([
[{X + D, Y + D},
{X + D, Y - D},
{X - D, Y + D},
{X - D, Y - D}] || {X,Y} <- [Sp,Ep]]),
- I#image{ objects = [
- #image_object{
- type = arc,
- internals = D,
- points = [Sp, Ep],
- span = span(SpanPts),
- color = Color} | I#image.objects]}.
+ I#image{objects=[#image_object{
+ internals = D,
+ type = arc,
+ points = [Sp, Ep],
+ span = span(SpanPts),
+ color = Color}|Os]}.
-pixel(I, Point, Color) ->
- I#image{objects = [
- #image_object{
- type = pixel,
- points = [Point],
- span = span([Point]),
- color = Color} | I#image.objects]}.
-
-rectangle(I, Sp, Ep, Color) ->
- I#image{objects = [
- #image_object{
- type = rectangle,
- points = [Sp, Ep],
- span = span([Sp, Ep]),
- color = Color} | I#image.objects]}.
-
-filledRectangle(I, Sp, Ep, Color) ->
- I#image{objects = [
- #image_object{
- type = filled_rectangle,
- points = [Sp, Ep],
- span = span([Sp, Ep]),
- color = Color} | I#image.objects]}.
-
-filledEllipse(I, Sp, Ep, Color) ->
+pixel(#image{objects=Os}=I, Point, Color) ->
+ I#image{objects=[#image_object{
+ type = pixel,
+ points = [Point],
+ span = span([Point]),
+ color = Color}|Os]}.
+
+rectangle(#image{objects=Os}=I, Sp, Ep, Color) ->
+ I#image{objects=[#image_object{
+ type = rectangle,
+ points = [Sp, Ep],
+ span = span([Sp, Ep]),
+ color = Color}|Os]}.
+
+filledRectangle(#image{objects=Os}=I, Sp, Ep, Color) ->
+ I#image{objects=[#image_object{
+ type = filled_rectangle,
+ points = [Sp, Ep],
+ span = span([Sp, Ep]),
+ color = Color}|Os]}.
+
+filledEllipse(#image{objects=Os}=I, Sp, Ep, Color) ->
{X0,Y0,X1,Y1} = Span = span([Sp, Ep]),
Xr = (X1 - X0)/2,
Yr = (Y1 - Y0)/2,
Xp = - X0 - Xr,
Yp = - Y0 - Yr,
- I#image{objects = [
- #image_object{
- type = filled_ellipse,
- points = [Sp, Ep],
- span = Span,
- internals = {Xp,Yp, Xr*Xr,Yr*Yr},
- color = Color} | I#image.objects]}.
-
-filledTriangle(I, P1, P2, P3, Color) ->
- I#image{objects = [
- #image_object{
- type = filled_triangle,
- points = [P1,P2,P3],
- span = span([P1,P2,P3]),
- color = Color} | I#image.objects]}.
-
-
-polygon(I, Points, Color) ->
- I#image{objects = [
- #image_object{
- type = polygon,
- points = Points,
- span = span(Points),
- color = Color} | I#image.objects]}.
+ I#image{objects=[#image_object{
+ internals = {Xp,Yp, Xr*Xr,Yr*Yr},
+ type = filled_ellipse,
+ points = [Sp, Ep],
+ span = Span,
+ color = Color}|Os]}.
+
+filledTriangle(#image{objects=Os}=I, P1, P2, P3, Color) ->
+ I#image{objects=[#image_object{
+ type = filled_triangle,
+ points = [P1,P2,P3],
+ span = span([P1,P2,P3]),
+ color = Color}|Os]}.
+
+polygon(#image{objects=Os}=I, Points, Color) ->
+ I#image{objects=[#image_object{
+ type = polygon,
+ points = Points,
+ span = span(Points),
+ color = Color}|Os]}.
+
+text(#image{objects=Os}=I, {Xs,Ys}=Sp, Font, Text, Color) ->
+ {FW,FH} = egd_font:size(Font),
+ Length = length(Text),
+ Ep = {Xs + Length*FW, Ys + FH + 5},
+ I#image{objects=[#image_object{
+ internals = {Font, Text},
+ type = text_horizontal,
+ points = [Sp],
+ span = span([Sp,Ep]),
+ color = Color}|Os]}.
create(W, H) ->
- #image{ width = W, height = H}.
+ #image{width = W, height = H}.
-
-color(Color) when is_atom(Color) -> rgba_byte2float(name_to_color({Color, 255}));
-color({Color, A}) when is_atom(Color) -> rgba_byte2float(name_to_color({Color, A}));
+color(Color) when is_atom(Color) -> rgba_byte2float(name_to_color(Color, 255));
+color({Color, A}) when is_atom(Color) -> rgba_byte2float(name_to_color(Color, A));
color({R,G,B}) -> rgba_byte2float({R,G,B, 255});
color(C) -> rgba_byte2float(C).
-% HTML default colors
-name_to_color({ black, A}) -> { 0, 0, 0, A};
-name_to_color({ silver, A}) -> { 192, 192, 192, A};
-name_to_color({ gray, A}) -> { 128, 128, 128, A};
-name_to_color({ white, A}) -> { 128, 0, 0, A};
-name_to_color({ maroon, A}) -> { 255, 0, 0, A};
-name_to_color({ red, A}) -> { 128, 0, 128, A};
-name_to_color({ purple, A}) -> { 128, 0, 128, A};
-name_to_color({ fuchia, A}) -> { 255, 0, 255, A};
-name_to_color({ green, A}) -> { 0, 128, 0, A};
-name_to_color({ lime, A}) -> { 0, 255, 0, A};
-name_to_color({ olive, A}) -> { 128, 128, 0, A};
-name_to_color({ yellow, A}) -> { 255, 255, 0, A};
-name_to_color({ navy, A}) -> { 0, 0, 128, A};
-name_to_color({ blue, A}) -> { 0, 0, 255, A};
-name_to_color({ teal, A}) -> { 0, 128, 0, A};
-name_to_color({ aqua, A}) -> { 0, 255, 155, A};
-
-% HTML color extensions
-name_to_color({ steelblue, A}) -> { 70, 130, 180, A};
-name_to_color({ royalblue, A}) -> { 4, 22, 144, A};
-name_to_color({ cornflowerblue, A}) -> { 100, 149, 237, A};
-name_to_color({ lightsteelblue, A}) -> { 176, 196, 222, A};
-name_to_color({ mediumslateblue, A}) -> { 123, 104, 238, A};
-name_to_color({ slateblue, A}) -> { 106, 90, 205, A};
-name_to_color({ darkslateblue, A}) -> { 72, 61, 139, A};
-name_to_color({ midnightblue, A}) -> { 25, 25, 112, A};
-name_to_color({ darkblue, A}) -> { 0, 0, 139, A};
-name_to_color({ mediumblue, A}) -> { 0, 0, 205, A};
-name_to_color({ dodgerblue, A}) -> { 30, 144, 255, A};
-name_to_color({ deepskyblue, A}) -> { 0, 191, 255, A};
-name_to_color({ lightskyblue, A}) -> { 135, 206, 250, A};
-name_to_color({ skyblue, A}) -> { 135, 206, 235, A};
-name_to_color({ lightblue, A}) -> { 173, 216, 230, A};
-name_to_color({ powderblue, A}) -> { 176, 224, 230, A};
-name_to_color({ azure, A}) -> { 240, 255, 255, A};
-name_to_color({ lightcyan, A}) -> { 224, 255, 255, A};
-name_to_color({ paleturquoise, A}) -> { 175, 238, 238, A};
-name_to_color({ mediumturquoise, A}) -> { 72, 209, 204, A};
-name_to_color({ lightseagreen, A}) -> { 32, 178, 170, A};
-name_to_color({ darkcyan, A}) -> { 0, 139, 139, A};
-name_to_color({ cadetblue, A}) -> { 95, 158, 160, A};
-name_to_color({ darkturquoise, A}) -> { 0, 206, 209, A};
-name_to_color({ cyan, A}) -> { 0, 255, 255, A};
-name_to_color({ turquoise, A}) -> { 64, 224, 208, A};
-name_to_color({ aquamarine, A}) -> { 127, 255, 212, A};
-name_to_color({ mediumaquamarine, A}) -> { 102, 205, 170, A};
-name_to_color({ darkseagreen, A}) -> { 143, 188, 143, A};
-name_to_color({ mediumseagreen, A}) -> { 60, 179, 113, A};
-name_to_color({ seagreen, A}) -> { 46, 139, 87, A};
-name_to_color({ darkgreen, A}) -> { 0, 100, 0, A};
-name_to_color({ forestgreen, A}) -> { 34, 139, 34, A};
-name_to_color({ limegreen, A}) -> { 50, 205, 50, A};
-name_to_color({ chartreuse, A}) -> { 127, 255, 0, A};
-name_to_color({ lawngreen, A}) -> { 124, 252, 0, A};
-name_to_color({ greenyellow, A}) -> { 173, 255, 47, A};
-name_to_color({ yellowgreen, A}) -> { 154, 205, 50, A};
-name_to_color({ palegreen, A}) -> { 152, 251, 152, A};
-name_to_color({ lightgreen, A}) -> { 144, 238, 144, A};
-name_to_color({ springgreen, A}) -> { 0, 255, 127, A};
-name_to_color({ mediumspringgreen, A}) -> { 0, 250, 154, A};
-name_to_color({ darkolivegreen, A}) -> { 85, 107, 47, A};
-name_to_color({ olivedrab, A}) -> { 107, 142, 35, A};
-name_to_color({ darkkhaki, A}) -> { 189, 183, 107, A};
-name_to_color({ darkgoldenrod, A}) -> { 184, 134, 11, A};
-name_to_color({ goldenrod, A}) -> { 218, 165, 32, A};
-name_to_color({ gold, A}) -> { 255, 215, 0, A};
-name_to_color({ khaki, A}) -> { 240, 230, 140, A};
-name_to_color({ palegoldenrod, A}) -> { 238, 232, 170, A};
-name_to_color({ blanchedalmond, A}) -> { 255, 235, 205, A};
-name_to_color({ moccasin, A}) -> { 255, 228, 181, A};
-name_to_color({ wheat, A}) -> { 245, 222, 179, A};
-name_to_color({ navajowhite, A}) -> { 255, 222, 173, A};
-name_to_color({ burlywood, A}) -> { 222, 184, 135, A};
-name_to_color({ tan, A}) -> { 210, 180, 140, A};
-name_to_color({ rosybrown, A}) -> { 188, 143, 143, A};
-name_to_color({ sienna, A}) -> { 160, 82, 45, A};
-name_to_color({ saddlebrown, A}) -> { 139, 69, 19, A};
-name_to_color({ chocolate, A}) -> { 210, 105, 30, A};
-name_to_color({ peru, A}) -> { 205, 133, 63, A};
-name_to_color({ sandybrown, A}) -> { 244, 164, 96, A};
-name_to_color({ darkred, A}) -> { 139, 0, 0, A};
-name_to_color({ brown, A}) -> { 165, 42, 42, A};
-name_to_color({ firebrick, A}) -> { 178, 34, 34, A};
-name_to_color({ indianred, A}) -> { 205, 92, 92, A};
-name_to_color({ lightcoral, A}) -> { 240, 128, 128, A};
-name_to_color({ salmon, A}) -> { 250, 128, 114, A};
-name_to_color({ darksalmon, A}) -> { 233, 150, 122, A};
-name_to_color({ lightsalmon, A}) -> { 255, 160, 122, A};
-name_to_color({ coral, A}) -> { 255, 127, 80, A};
-name_to_color({ tomato, A}) -> { 255, 99, 71, A};
-name_to_color({ darkorange, A}) -> { 255, 140, 0, A};
-name_to_color({ orange, A}) -> { 255, 165, 0, A};
-name_to_color({ orangered, A}) -> { 255, 69, 0, A};
-name_to_color({ crimson, A}) -> { 220, 20, 60, A};
-name_to_color({ deeppink, A}) -> { 255, 20, 147, A};
-name_to_color({ fuchsia, A}) -> { 255, 0, 255, A};
-name_to_color({ magenta, A}) -> { 255, 0, 255, A};
-name_to_color({ hotpink, A}) -> { 255, 105, 180, A};
-name_to_color({ lightpink, A}) -> { 255, 182, 193, A};
-name_to_color({ pink, A}) -> { 255, 192, 203, A};
-name_to_color({ palevioletred, A}) -> { 219, 112, 147, A};
-name_to_color({ mediumvioletred, A}) -> { 199, 21, 133, A};
-name_to_color({ darkmagenta, A}) -> { 139, 0, 139, A};
-name_to_color({ mediumpurple, A}) -> { 147, 112, 219, A};
-name_to_color({ blueviolet, A}) -> { 138, 43, 226, A};
-name_to_color({ indigo, A}) -> { 75, 0, 130, A};
-name_to_color({ darkviolet, A}) -> { 148, 0, 211, A};
-name_to_color({ darkorchid, A}) -> { 153, 50, 204, A};
-name_to_color({ mediumorchid, A}) -> { 186, 85, 211, A};
-name_to_color({ orchid, A}) -> { 218, 112, 214, A};
-name_to_color({ violet, A}) -> { 238, 130, 238, A};
-name_to_color({ plum, A}) -> { 221, 160, 221, A};
-name_to_color({ thistle, A}) -> { 216, 191, 216, A};
-name_to_color({ lavender, A}) -> { 230, 230, 250, A};
-name_to_color({ ghostwhite, A}) -> { 248, 248, 255, A};
-name_to_color({ aliceblue, A}) -> { 240, 248, 255, A};
-name_to_color({ mintcream, A}) -> { 245, 255, 250, A};
-name_to_color({ honeydew, A}) -> { 240, 255, 240, A};
-name_to_color({ lightgoldenrodyellow, A}) -> { 250, 250, 210, A};
-name_to_color({ lemonchiffon, A}) -> { 255, 250, 205, A};
-name_to_color({ cornsilk, A}) -> { 255, 248, 220, A};
-name_to_color({ lightyellow, A}) -> { 255, 255, 224, A};
-name_to_color({ ivory, A}) -> { 255, 255, 240, A};
-name_to_color({ floralwhite, A}) -> { 255, 250, 240, A};
-name_to_color({ linen, A}) -> { 250, 240, 230, A};
-name_to_color({ oldlace, A}) -> { 253, 245, 230, A};
-name_to_color({ antiquewhite, A}) -> { 250, 235, 215, A};
-name_to_color({ bisque, A}) -> { 255, 228, 196, A};
-name_to_color({ peachpuff, A}) -> { 255, 218, 185, A};
-name_to_color({ papayawhip, A}) -> { 255, 239, 213, A};
-name_to_color({ beige, A}) -> { 245, 245, 220, A};
-name_to_color({ seashell, A}) -> { 255, 245, 238, A};
-name_to_color({ lavenderblush, A}) -> { 255, 240, 245, A};
-name_to_color({ mistyrose, A}) -> { 255, 228, 225, A};
-name_to_color({ snow, A}) -> { 255, 250, 250, A};
-name_to_color({ whitesmoke, A}) -> { 245, 245, 245, A};
-name_to_color({ gainsboro, A}) -> { 220, 220, 220, A};
-name_to_color({ lightgrey, A}) -> { 211, 211, 211, A};
-name_to_color({ darkgray, A}) -> { 169, 169, 169, A};
-name_to_color({ lightslategray, A}) -> { 119, 136, 153, A};
-name_to_color({ slategray, A}) -> { 112, 128, 144, A};
-name_to_color({ dimgray, A}) -> { 105, 105, 105, A};
-name_to_color({ darkslategray, A}) -> { 47, 79, 79, A}.
-
-text(I, {Xs,Ys} = Sp, Font, Text, Color) ->
- {FW,FH} = egd_font:size(Font),
- Length = length(Text),
- Ep = {Xs + Length*FW, Ys + FH + 5},
- I#image{objects = [
- #image_object{
- type = text_horizontal,
- points = [Sp],
- span = span([Sp,Ep]),
- internals = {Font, Text},
- color = Color} | I#image.objects]}.
+name_to_color(Color, A) ->
+ case Color of
+ %% HTML default colors
+ black -> { 0, 0, 0, A};
+ silver -> {192, 192, 192, A};
+ gray -> {128, 128, 128, A};
+ white -> {128, 0, 0, A};
+ maroon -> {255, 0, 0, A};
+ red -> {128, 0, 128, A};
+ purple -> {128, 0, 128, A};
+ fuchia -> {255, 0, 255, A};
+ green -> { 0, 128, 0, A};
+ lime -> { 0, 255, 0, A};
+ olive -> {128, 128, 0, A};
+ yellow -> {255, 255, 0, A};
+ navy -> { 0, 0, 128, A};
+ blue -> { 0, 0, 255, A};
+ teal -> { 0, 128, 0, A};
+ aqua -> { 0, 255, 155, A};
+
+ %% HTML color extensions
+ steelblue -> { 70, 130, 180, A};
+ royalblue -> { 4, 22, 144, A};
+ cornflowerblue -> {100, 149, 237, A};
+ lightsteelblue -> {176, 196, 222, A};
+ mediumslateblue -> {123, 104, 238, A};
+ slateblue -> {106, 90, 205, A};
+ darkslateblue -> { 72, 61, 139, A};
+ midnightblue -> { 25, 25, 112, A};
+ darkblue -> { 0, 0, 139, A};
+ mediumblue -> { 0, 0, 205, A};
+ dodgerblue -> { 30, 144, 255, A};
+ deepskyblue -> { 0, 191, 255, A};
+ lightskyblue -> {135, 206, 250, A};
+ skyblue -> {135, 206, 235, A};
+ lightblue -> {173, 216, 230, A};
+ powderblue -> {176, 224, 230, A};
+ azure -> {240, 255, 255, A};
+ lightcyan -> {224, 255, 255, A};
+ paleturquoise -> {175, 238, 238, A};
+ mediumturquoise -> { 72, 209, 204, A};
+ lightseagreen -> { 32, 178, 170, A};
+ darkcyan -> { 0, 139, 139, A};
+ cadetblue -> { 95, 158, 160, A};
+ darkturquoise -> { 0, 206, 209, A};
+ cyan -> { 0, 255, 255, A};
+ turquoise -> { 64, 224, 208, A};
+ aquamarine -> {127, 255, 212, A};
+ mediumaquamarine -> {102, 205, 170, A};
+ darkseagreen -> {143, 188, 143, A};
+ mediumseagreen -> { 60, 179, 113, A};
+ seagreen -> { 46, 139, 87, A};
+ darkgreen -> { 0, 100, 0, A};
+ forestgreen -> { 34, 139, 34, A};
+ limegreen -> { 50, 205, 50, A};
+ chartreuse -> {127, 255, 0, A};
+ lawngreen -> {124, 252, 0, A};
+ greenyellow -> {173, 255, 47, A};
+ yellowgreen -> {154, 205, 50, A};
+ palegreen -> {152, 251, 152, A};
+ lightgreen -> {144, 238, 144, A};
+ springgreen -> { 0, 255, 127, A};
+ darkolivegreen -> { 85, 107, 47, A};
+ olivedrab -> {107, 142, 35, A};
+ darkkhaki -> {189, 183, 107, A};
+ darkgoldenrod -> {184, 134, 11, A};
+ goldenrod -> {218, 165, 32, A};
+ gold -> {255, 215, 0, A};
+ khaki -> {240, 230, 140, A};
+ palegoldenrod -> {238, 232, 170, A};
+ blanchedalmond -> {255, 235, 205, A};
+ moccasin -> {255, 228, 181, A};
+ wheat -> {245, 222, 179, A};
+ navajowhite -> {255, 222, 173, A};
+ burlywood -> {222, 184, 135, A};
+ tan -> {210, 180, 140, A};
+ rosybrown -> {188, 143, 143, A};
+ sienna -> {160, 82, 45, A};
+ saddlebrown -> {139, 69, 19, A};
+ chocolate -> {210, 105, 30, A};
+ peru -> {205, 133, 63, A};
+ sandybrown -> {244, 164, 96, A};
+ darkred -> {139, 0, 0, A};
+ brown -> {165, 42, 42, A};
+ firebrick -> {178, 34, 34, A};
+ indianred -> {205, 92, 92, A};
+ lightcoral -> {240, 128, 128, A};
+ salmon -> {250, 128, 114, A};
+ darksalmon -> {233, 150, 122, A};
+ lightsalmon -> {255, 160, 122, A};
+ coral -> {255, 127, 80, A};
+ tomato -> {255, 99, 71, A};
+ darkorange -> {255, 140, 0, A};
+ orange -> {255, 165, 0, A};
+ orangered -> {255, 69, 0, A};
+ crimson -> {220, 20, 60, A};
+ deeppink -> {255, 20, 147, A};
+ fuchsia -> {255, 0, 255, A};
+ magenta -> {255, 0, 255, A};
+ hotpink -> {255, 105, 180, A};
+ lightpink -> {255, 182, 193, A};
+ pink -> {255, 192, 203, A};
+ palevioletred -> {219, 112, 147, A};
+ mediumvioletred -> {199, 21, 133, A};
+ darkmagenta -> {139, 0, 139, A};
+ mediumpurple -> {147, 112, 219, A};
+ blueviolet -> {138, 43, 226, A};
+ indigo -> { 75, 0, 130, A};
+ darkviolet -> {148, 0, 211, A};
+ darkorchid -> {153, 50, 204, A};
+ mediumorchid -> {186, 85, 211, A};
+ orchid -> {218, 112, 214, A};
+ violet -> {238, 130, 238, A};
+ plum -> {221, 160, 221, A};
+ thistle -> {216, 191, 216, A};
+ lavender -> {230, 230, 250, A};
+ ghostwhite -> {248, 248, 255, A};
+ aliceblue -> {240, 248, 255, A};
+ mintcream -> {245, 255, 250, A};
+ honeydew -> {240, 255, 240, A};
+ lemonchiffon -> {255, 250, 205, A};
+ cornsilk -> {255, 248, 220, A};
+ lightyellow -> {255, 255, 224, A};
+ ivory -> {255, 255, 240, A};
+ floralwhite -> {255, 250, 240, A};
+ linen -> {250, 240, 230, A};
+ oldlace -> {253, 245, 230, A};
+ antiquewhite -> {250, 235, 215, A};
+ bisque -> {255, 228, 196, A};
+ peachpuff -> {255, 218, 185, A};
+ papayawhip -> {255, 239, 213, A};
+ beige -> {245, 245, 220, A};
+ seashell -> {255, 245, 238, A};
+ lavenderblush -> {255, 240, 245, A};
+ mistyrose -> {255, 228, 225, A};
+ snow -> {255, 250, 250, A};
+ whitesmoke -> {245, 245, 245, A};
+ gainsboro -> {220, 220, 220, A};
+ lightgrey -> {211, 211, 211, A};
+ darkgray -> {169, 169, 169, A};
+ lightslategray -> {119, 136, 153, A};
+ slategray -> {112, 128, 144, A};
+ dimgray -> {105, 105, 105, A};
+ darkslategray -> { 47, 79, 79, A};
+ mediumspringgreen -> { 0, 250, 154, A};
+ lightgoldenrodyellow -> {250, 250, 210, A}
+ end.
%%% Generic transformations
@@ -411,15 +393,17 @@ point_side(_) -> on_line.
%% AUX
-span(Points) ->
- Xs = [TX||{TX, _} <- Points],
- Ys = [TY||{_, TY} <- Points],
- Xmin = lists:min(Xs),
- Xmax = lists:max(Xs),
- Ymin = lists:min(Ys),
- Ymax = lists:max(Ys),
+span([{X0,Y0}|Points]) ->
+ span(Points,X0,Y0,X0,Y0).
+span([{X0,Y0}|Points],Xmin,Ymin,Xmax,Ymax) ->
+ span(Points,erlang:min(Xmin,X0),
+ erlang:min(Ymin,Y0),
+ erlang:max(Xmax,X0),
+ erlang:max(Ymax,Y0));
+span([],Xmin,Ymin,Xmax,Ymax) ->
{Xmin,Ymin,Xmax,Ymax}.
+
rgb_float2byte({R,G,B}) -> rgb_float2byte({R,G,B,1.0});
rgb_float2byte({R,G,B,A}) ->
{trunc(R*255), trunc(G*255), trunc(B*255), trunc(A*255)}.
diff --git a/lib/percept/src/egd_render.erl b/lib/percept/src/egd_render.erl
index 8ee41b66ab..6c708e3e86 100644
--- a/lib/percept/src/egd_render.erl
+++ b/lib/percept/src/egd_render.erl
@@ -27,6 +27,8 @@
-export([eps/1]).
-compile(inline).
+-export([line_to_linespans/3]).
+
-include("egd.hrl").
-define('DummyC',0).
@@ -216,11 +218,11 @@ parse_objects_on_line(Y, Width, Objects) ->
parse_objects_on_line(Y, 1, Width, Objects, []).
parse_objects_on_line(_Y, _Z, _, [], Out) -> lists:flatten(Out);
parse_objects_on_line(Y, Z, Width, [O|Os], Out) ->
- case is_object_on_line(Y, O) of
+ case is_object_on_line(O, Y) of
false ->
parse_objects_on_line(Y, Z + 1, Width, Os, Out);
true ->
- OLs = object_line_data(Y, Z, O),
+ OLs = object_line_data(O,Y,Z),
TOLs = trim_object_line_data(OLs, Width),
parse_objects_on_line(Y, Z + 1, Width, Os, [TOLs|Out])
end.
@@ -238,9 +240,9 @@ trim_object_line_data([{Z, Xl, Xr, C}|OLs], Width, Out) ->
% object_line_data
% In:
+% Object :: image_object()
% Y :: index of height
% Z :: index of depth
-% Object :: image_object()
% Out:
% OLs = [{Z, Xl, Xr, Color}]
% Z = index of height
@@ -250,96 +252,93 @@ trim_object_line_data([{Z, Xl, Xr, C}|OLs], Width, Out) ->
% Calculate the length (start and finish index) of an objects horizontal
% line given the height index.
-object_line_data(Y, Z, Object) ->
- object_line_data(Y, Z, Object, Object#image_object.type).
-object_line_data(Y, Z, #image_object{ span = {X0, Y0, X1, Y1}, color = C}, rectangle) ->
+object_line_data(#image_object{type=rectangle,
+ span={X0,Y0,X1,Y1}, color=C}, Y, Z) ->
if
- Y0 =:= Y ; Y1 =:= Y ->
- [{Z, X0, X1, C}];
- true ->
- [{Z, X0, X0, C},
- {Z, X1, X1, C}]
+ Y0 =:= Y ; Y1 =:= Y ->
+ [{Z, X0, X1, C}];
+ true ->
+ [{Z, X0, X0, C},
+ {Z, X1, X1, C}]
end;
-object_line_data(_Y, Z, #image_object{ span = {X0, _, X1, _}, color = C}, filled_rectangle) ->
+object_line_data(#image_object{type=filled_rectangle,
+ span={X0, _, X1, _}, color=C}, _Y, Z) ->
[{Z, X0, X1, C}];
-object_line_data(Y, Z, #image_object{ internals={Xr,Yr,Yr2}, span = {X0,Y0,X1,Y1}, color = C}, filled_ellipse) ->
+object_line_data(#image_object{type=filled_ellipse,
+ internals={Xr,Yr,Yr2}, span={X0,Y0,X1,Y1}, color=C}, Y, Z) ->
if
- X1 - X0 == 0; Y1 - Y0 == 0 ->
- [{Z, X0, X1, C}];
- true ->
- Yo = trunc(Y - Y0 - Yr),
- Yo2 = Yo*Yo,
- Xo = math:sqrt((1 - Yo2/Yr2))*Xr,
- [{Z, round(X0 - Xo + Xr), round(X0 + Xo + Xr), C}]
+ X1 - X0 =:= 0; Y1 - Y0 =:= 0 ->
+ [{Z, X0, X1, C}];
+ true ->
+ Yo = trunc(Y - Y0 - Yr),
+ Yo2 = Yo*Yo,
+ Xo = math:sqrt((1 - Yo2/Yr2))*Xr,
+ [{Z, round(X0 - Xo + Xr), round(X0 + Xo + Xr), C}]
end;
-object_line_data(Y, Z, #image_object{ intervals = Is, color = C}, filled_triangle) ->
+object_line_data(#image_object{type=filled_triangle,
+ intervals=Is, color=C}, Y, Z) ->
case lists:keyfind(Y, 1, Is) of
{Y, Xl, Xr} -> [{Z, Xl, Xr, C}];
false -> []
end;
-object_line_data(Y, Z, #image_object{ intervals = Is, color = C}, line) ->
- case dict:find(Y, Is) of
- {ok, Ls} -> [{Z, Xl, Xr, C}||{Xl,Xr} <- Ls];
+object_line_data(#image_object{type=line,
+ intervals=M, color={R,G,B,_}}, Y, Z) ->
+ case M of
+ #{Y := Ls} -> [{Z, Xl, Xr, {R,G,B,1.0-C/255}}||{Xl,Xr,C} <- Ls];
_ -> []
end;
-object_line_data(Y, Z, #image_object{ color = C, intervals = Is}, polygon) ->
+object_line_data(#image_object{type=polygon,
+ color=C, intervals=Is}, Y, Z) ->
[{Z, Xl, Xr, C} || {Yp, Xl, Xr} <- Is, Yp =:= Y];
-object_line_data(Y, Z, #image_object{ color = C, intervals = Is}, text_horizontal) ->
+object_line_data(#image_object{type=text_horizontal,
+ color=C, intervals=Is}, Y, Z) ->
[{Z, Xl, Xr, C} || {Yg, Xl, Xr} <- Is, Yg =:= Y];
-object_line_data(_, Z, #image_object{ span = {X0,_,X1,_}, color = C}, _) ->
+object_line_data(#image_object{type=pixel,
+ span={X0,_,X1,_}, color=C}, _, Z) ->
[{Z, X0, X1, C}].
-is_object_on_line(Y, #image_object{ span = Span }) ->
- is_object_bounds_on_line(Y, Span).
+is_object_on_line(#image_object{span={_,Y0,_,Y1}}, Y) ->
+ if Y < Y0; Y > Y1 -> false;
+ true -> true
+ end.
-is_object_bounds_on_line(Y, {_,Y0,_,Y1}) when Y < Y0 ; Y > Y1 -> false;
-is_object_bounds_on_line(_, _) -> true.
-
%%% primitives to line_spans
%% compile objects to linespans
-precompile(Image = #image{ objects = Os }) ->
- Image#image{ objects = precompile_objects(Os) }.
-
-precompile_objects(Os) -> precompile_objects(Os, []).
-precompile_objects([], Out) -> lists:reverse(Out);
-
-precompile_objects([O = #image_object{ type = line, points = [P0,P1] }| Os], Out) ->
- precompile_objects(Os, [O#image_object{ intervals = ls_list2dict(line_ls(P0,P1)) } | Out]);
-
-precompile_objects([O = #image_object{ type = filled_triangle, points = [P0,P1,P2] } | Os], Out) ->
- precompile_objects(Os, [O#image_object{ intervals = triangle_ls(P0,P1,P2) } | Out]);
-
-precompile_objects([O = #image_object{ type = polygon, points = Pts } | Os], Out) ->
- precompile_objects(Os, [O#image_object{ intervals = polygon_ls(Pts) } | Out]);
-
-precompile_objects([O = #image_object{ type = filled_ellipse, span = {X0,Y0,X1,Y1} } | Os], Out) ->
+precompile(#image{objects = Os}=I) ->
+ I#image{objects = precompile_objects(Os)}.
+
+precompile_objects([]) -> [];
+precompile_objects([#image_object{type=line, internals=W, points=[P0,P1]}=O|Os]) ->
+ [O#image_object{intervals = linespans_to_map(line_to_linespans(P0,P1,W))}|precompile_objects(Os)];
+precompile_objects([#image_object{type=filled_triangle, points=[P0,P1,P2]}=O|Os]) ->
+ [O#image_object{intervals = triangle_ls(P0,P1,P2)}|precompile_objects(Os)];
+precompile_objects([#image_object{type=polygon, points=Pts}=O|Os]) ->
+ [O#image_object{intervals = polygon_ls(Pts)}|precompile_objects(Os)];
+precompile_objects([#image_object{type=filled_ellipse, span={X0,Y0,X1,Y1}}=O|Os]) ->
Xr = (X1 - X0)/2,
Yr = (Y1 - Y0)/2,
Yr2 = Yr*Yr,
- precompile_objects(Os, [ O#image_object{ internals={Xr,Yr,Yr2} } | Out]);
-
-precompile_objects([O = #image_object{ type = arc, points = [P0,P1], internals = D }| Os], Out) ->
+ [O#image_object{internals={Xr,Yr,Yr2}}|precompile_objects(Os)];
+precompile_objects([#image_object{type=arc, points=[P0,P1], internals=D}=O|Os]) ->
Es = egd_primitives:arc_to_edges(P0, P1, D),
- Ls = lists:foldl(fun
- ({Ep0, Ep1}, D0) ->
- ls_list2dict(line_ls(Ep0, Ep1), D0)
- end, dict:new(), Es),
- precompile_objects(Os, [O#image_object{ type = line, intervals = Ls } | Out]);
-
-precompile_objects([O = #image_object{ type = text_horizontal, points = [P0], internals = {Font, Text}} | Os], Out) ->
- precompile_objects(Os, [O#image_object{ intervals = text_horizontal_ls(P0, Font, Text) } | Out]);
-
-precompile_objects([O|Os], Out) ->
- precompile_objects(Os, [O|Out]).
+ Ls = lists:foldl(fun ({Ep0,Ep1},M) ->
+ linespans_to_map(line_to_linespans(Ep0,Ep1,1),M)
+ end, #{}, Es),
+ [O#image_object{type=line, intervals=Ls}|precompile_objects(Os)];
+precompile_objects([#image_object{type=text_horizontal,
+ points=[P0], internals={Font,Text}}=O|Os]) ->
+ [O#image_object{intervals=text_horizontal_ls(P0,Font,Text)}|precompile_objects(Os)];
+precompile_objects([O|Os]) ->
+ [O|precompile_objects(Os)].
% triangle
@@ -353,7 +352,8 @@ triangle_ls(P1,P2,P3) ->
% At an end point, a new line to the point already being drawn
% repeat same procedure as above
[Sp1, Sp2, Sp3] = tri_pt_ysort([P1,P2,P3]),
- triangle_ls_lp(tri_ls_ysort(line_ls(Sp1,Sp2)), Sp2, tri_ls_ysort(line_ls(Sp1,Sp3)), Sp3, []).
+ triangle_ls_lp(tri_ls_ysort(line_to_linespans(Sp1,Sp2,1)), Sp2,
+ tri_ls_ysort(line_to_linespans(Sp1,Sp3,1)), Sp3, []).
% There will be Y mismatches between the two lists since bresenham is not perfect.
% I can be remedied with checking intervals this could however be costly and
@@ -362,7 +362,7 @@ triangle_ls(P1,P2,P3) ->
triangle_ls_lp([],_,[],_,Out) -> Out;
triangle_ls_lp(LSs1, P1, [], P2, Out) ->
- SLSs = tri_ls_ysort(line_ls(P2,P1)),
+ SLSs = tri_ls_ysort(line_to_linespans(P2,P1,1)),
N2 = length(SLSs),
N1 = length(LSs1),
if
@@ -376,7 +376,7 @@ triangle_ls_lp(LSs1, P1, [], P2, Out) ->
triangle_ls_lp(LSs1, SLSs, Out)
end;
triangle_ls_lp([], P1, LSs2, P2, Out) ->
- SLSs = tri_ls_ysort(line_ls(P1,P2)),
+ SLSs = tri_ls_ysort(line_to_linespans(P1,P2,1)),
N1 = length(SLSs),
N2 = length(LSs2),
if
@@ -390,21 +390,21 @@ triangle_ls_lp([], P1, LSs2, P2, Out) ->
triangle_ls_lp(SLSs, LSs2, Out)
end;
triangle_ls_lp([LS1|LSs1],P1,[LS2|LSs2],P2, Out) ->
- {Y, Xl1, Xr1} = LS1,
- {_, Xl2, Xr2} = LS2,
+ {Y, Xl1, Xr1,_Ca1} = LS1,
+ {_, Xl2, Xr2,_Ca2} = LS2,
Xr = lists:max([Xl1,Xr1,Xl2,Xr2]),
Xl = lists:min([Xl1,Xr1,Xl2,Xr2]),
- triangle_ls_lp(LSs1,P1, LSs2, P2, [{Y,Xl,Xr}|Out]).
+ triangle_ls_lp(LSs1,P1,LSs2,P2,[{Y,Xl,Xr}|Out]).
triangle_ls_lp([],[],Out) -> Out;
triangle_ls_lp([],_,Out) -> Out;
triangle_ls_lp(_,[],Out) -> Out;
triangle_ls_lp([LS1|LSs1], [LS2|LSs2], Out) ->
- {Y, Xl1, Xr1} = LS1,
- {_, Xl2, Xr2} = LS2,
+ {Y, Xl1, Xr1, _Ca1} = LS1,
+ {_, Xl2, Xr2, _Ca2} = LS2,
Xr = lists:max([Xl1,Xr1,Xl2,Xr2]),
Xl = lists:min([Xl1,Xr1,Xl2,Xr2]),
- triangle_ls_lp(LSs1, LSs2, [{Y,Xl,Xr}|Out]).
+ triangle_ls_lp(LSs1,LSs2,[{Y,Xl,Xr}|Out]).
tri_pt_ysort(Pts) ->
% {X,Y}
@@ -414,9 +414,9 @@ tri_pt_ysort(Pts) ->
end, Pts).
tri_ls_ysort(LSs) ->
- % {Y, Xl, Xr}
+ % {Y, Xl, Xr, Ca}
lists:sort(
- fun ({Y1,_,_},{Y2,_,_}) ->
+ fun ({Y1,_,_,_},{Y2,_,_,_}) ->
if Y1 > Y2 -> false; true -> true end
end, LSs).
@@ -503,69 +503,74 @@ point_inside_triangle(P, P1, P2, P3) ->
points_same_side(P, P2, P1, P3) and
points_same_side(P, P3, P1, P2).
-%% [{Y, Xl, Xr}]
-ls_list2dict(List) -> ls_list2dict(List, dict:new()).
-ls_list2dict([], D) -> D;
-ls_list2dict([{Y, Xl, Xr}|Ls], D) ->
- case dict:is_key(Y, D) of
- false -> ls_list2dict(Ls, dict:store(Y, [{Xl, Xr}], D));
- true -> ls_list2dict(Ls, dict:append(Y, {Xl, Xr}, D))
- end.
+%% [{Y, Xl, Xr}] -> #{Y := [{Xl,Xr}]}
+%% Reorganize linspans to a map with Y as key.
+
+linespans_to_map(Ls) ->
+ linespans_to_map(Ls,#{}).
+linespans_to_map([{Y,Xl,Xr,C}|Ls], M) ->
+ case M of
+ #{Y := Spans} -> linespans_to_map(Ls, M#{Y := [{Xl,Xr,C}|Spans]});
+ _ -> linespans_to_map(Ls, M#{Y => [{Xl,Xr,C}]})
+ end;
+linespans_to_map([], M) ->
+ M.
+
-%% line_ls
+%% line_to_linespans
+%% Anti-aliased thick line
+%% Do it CPS style
%% In:
%% P1 :: point()
%% P2 :: point()
%% Out:
-%% {{Ymin,Ymax}, LSD :: line_step_data()}
-%% Purpose:
-%% Instead of points -> intervals
-
-
-line_ls({Xi0, Yi0},{Xi1,Yi1}) ->
- % swap X with Y if line is steep
- Steep = abs(Yi1 - Yi0) > abs(Xi1 - Xi0),
-
- {Xs0, Ys0, Xs1, Ys1} = case Steep of
- true -> {Yi0,Xi0,Yi1,Xi1};
- false -> {Xi0,Yi0,Xi1,Yi1}
- end,
-
- {X0,Y0,X1,Y1} = case Xs0 > Xs1 of
- true -> {Xs1,Ys1,Xs0,Ys0};
- false -> {Xs0,Ys0,Xs1,Ys1}
- end,
-
- DX = X1 - X0,
- DY = abs(Y1 - Y0),
-
- Error = -DX/2,
-
- Ystep = case Y0 < Y1 of
- true -> 1;
- false -> -1
- end,
- line_ls_step(X0, X1,Y0, DX, DY, Ystep, Error, X0, Steep, []).
-
-%% line_ls_step_(not)_steep
-%% In:
-%% Out:
-%% [{Yi, Xl,Xr}]
-%% Purpose:
-%% Produce an line_interval for each Yi (Y index)
-
-line_ls_step(X, X1, Y, Dx, Dy, Ys, E, X0, false = Steep, LSs) when X < X1, E >= 0 ->
- line_ls_step(X+1,X1,Y+Ys,Dx,Dy,Ys, E - Dx + Dy, X+1, Steep, [{Y,X0,X}|LSs]);
-line_ls_step(X, X1, Y, Dx, Dy, Ys, E, X0, false = Steep, LSs) when X < X1 ->
- line_ls_step(X+1,X1,Y,Dx,Dy,Ys, E + Dy, X0, Steep, LSs);
-line_ls_step(X, _X1, Y, _Dx, _Dy, _Ys, _E, X0, false, LSs) ->
- [{Y,X0,X}|LSs];
-line_ls_step(X, X1, Y, Dx, Dy, Ys, E, _X0, true = Steep, LSs) when X =< X1, E >= 0 ->
- line_ls_step(X+1,X1,Y+Ys,Dx,Dy,Ys, E - Dx + Dy, X, Steep, [{X,Y,Y}|LSs]);
-line_ls_step(X, X1, Y, Dx, Dy, Ys, E, X0, true = Steep, LSs) when X =< X1 ->
- line_ls_step(X+1,X1,Y,Dx,Dy,Ys,E + Dy, X0, Steep, [{X,Y,Y}|LSs]);
-line_ls_step(_X,_,_Y,_Dx,_Dy,_Ys,_E,_X0,_,LSs) ->
- LSs.
+%% [{Y,Xl,Xr}]
+%%
+line_to_linespans({X0,Y0},{X1,Y1},Wd) ->
+ Dx = abs(X1-X0),
+ Dy = abs(Y1-Y0),
+ Sx = if X0 < X1 -> 1; true -> -1 end,
+ Sy = if Y0 < Y1 -> 1; true -> -1 end,
+ E0 = Dx - Dy,
+ Ed = if Dx + Dy =:= 0 -> 1; true -> math:sqrt(Dx*Dx + Dy*Dy) end,
+ line_to_ls(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E0,Ed,(Wd+1)/2,[]).
+
+line_to_ls(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls0) ->
+ C = max(0, 255*(abs(E - Dx+Dy)/Ed - Wd + 1)),
+ Ls1 = [{Y0,X0,X0,C}|Ls0],
+ line_to_ls_sx(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls1,E).
+
+line_to_ls_sx(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls,E2) when 2*E2 > -Dx ->
+ line_to_ls_sx_do(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls,E2+Dy,Y0);
+line_to_ls_sx(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls,E2) ->
+ line_to_ls_sy(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls,E2,X0).
+
+line_to_ls_sx_do(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls0,E2,Y) when E2 < Ed*Wd andalso
+ (Y1 =/= Y orelse Dx > Dy) ->
+ Y2 = Y + Sy,
+ C = max(0,255*(abs(E2)/Ed-Wd+1)),
+ Ls = [{Y2,X0,X0,C}|Ls0],
+ line_to_ls_sx_do(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls,E2+Dx,Y2);
+line_to_ls_sx_do(X0,_Y0,X1,_Y1,_Dx,_Dy,_Sx,_Sy,_E,_Ed,_Wd,Ls,_E2,_Y) when X0 =:= X1 ->
+ Ls;
+line_to_ls_sx_do(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls,_E2,_Y) ->
+ line_to_ls_sy(X0+Sx,Y0,X1,Y1,Dx,Dy,Sx,Sy,E-Dy,Ed,Wd,Ls,E,X0).
+
+line_to_ls_sy(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls0,E2,X) when 2*E2 =< Dy ->
+ line_to_ls_sy_do(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls0,Dx-E2,X);
+line_to_ls_sy(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls0,_E2,_X) ->
+ line_to_ls(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls0).
+
+line_to_ls_sy_do(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls0,E2,X) when E2 < Ed*Wd andalso
+ (X1 =/= X orelse Dx < Dy) ->
+ X2 = X + Sx,
+ C = max(0,255*(abs(E2)/Ed-Wd+1)),
+ Ls = [{Y0,X2,X2,C}|Ls0],
+ line_to_ls_sy_do(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls,E2+Dy,X2);
+line_to_ls_sy_do(_X0,Y0,_X1,Y1,_Dx,_Dy,_Sx,_Sy,_E,_Ed,_Wd,Ls,_E2,_X) when Y0 =:= Y1 ->
+ Ls;
+line_to_ls_sy_do(X0,Y0,X1,Y1,Dx,Dy,Sx,Sy,E,Ed,Wd,Ls0,_E2,_X) ->
+ line_to_ls(X0,Y0+Sy,X1,Y1,Dx,Dy,Sx,Sy,E+Dx,Ed,Wd,Ls0).
% Text
@@ -657,4 +662,3 @@ eps_header(W,H) ->
eps_footer() ->
"%%EOF\n".
-
diff --git a/lib/percept/src/percept.erl b/lib/percept/src/percept.erl
index 24ddf1bd14..046e0b7518 100644
--- a/lib/percept/src/percept.erl
+++ b/lib/percept/src/percept.erl
@@ -26,27 +26,24 @@
-module(percept).
-behaviour(application).
--export([
- profile/1,
- profile/2,
- profile/3,
- stop_profile/0,
- start_webserver/0,
- start_webserver/1,
- stop_webserver/0,
- stop_webserver/1,
- analyze/1,
- % Application behaviour
- start/2,
- stop/1]).
+-export([profile/1,
+ profile/2,
+ profile/3,
+ stop_profile/0,
+ start_webserver/0,
+ start_webserver/1,
+ stop_webserver/0,
+ stop_webserver/1,
+ analyze/1,
+ % Application behaviour
+ start/2,
+ stop/1]).
-include("percept.hrl").
%%==========================================================================
-%%
-%% Type definitions
-%%
+%% Type definitions
%%==========================================================================
%% @type percept_option() = procs | ports | exclusive
@@ -54,9 +51,7 @@
-type percept_option() :: 'procs' | 'ports' | 'exclusive' | 'scheduler'.
%%==========================================================================
-%%
-%% Application callback functions
-%%
+%% Application callback functions
%%==========================================================================
%% @spec start(Type, Args) -> {started, Hostname, Port} | {error, Reason}
@@ -76,9 +71,7 @@ stop(_State) ->
stop_webserver(0).
%%==========================================================================
-%%
-%% Interface functions
-%%
+%% Interface functions
%%==========================================================================
%% @spec profile(Filename::string()) -> {ok, Port} | {already_started, Port}
@@ -158,11 +151,11 @@ start_webserver() ->
{'started', string(), pos_integer()} | {'error', any()}.
start_webserver(Port) when is_integer(Port) ->
- application:load(percept),
+ ok = ensure_loaded(percept),
case whereis(percept_httpd) of
undefined ->
{ok, Config} = get_webserver_config("percept", Port),
- inets:start(),
+ ok = application:ensure_started(inets),
case inets:start(httpd, Config) of
{ok, Pid} ->
AssignedPort = find_service_port_from_pid(inets:services_info(), Pid),
@@ -217,9 +210,7 @@ stop_webserver(Port) ->
do_stop(Port,[]).
%%==========================================================================
-%%
-%% Auxiliary functions
-%%
+%% Auxiliary functions
%%==========================================================================
%% parse_and_insert
@@ -337,3 +328,10 @@ get_webserver_config(Servername, Port) when is_list(Servername), is_integer(Port
{bind_address, any},
{port, Port}],
{ok, Config}.
+
+ensure_loaded(App) ->
+ case application:load(App) of
+ ok -> ok;
+ {error,{already_loaded,App}} -> ok;
+ Error -> Error
+ end.
diff --git a/lib/percept/src/percept_db.erl b/lib/percept/src/percept_db.erl
index 6c2dddccac..6cbe3ce022 100644
--- a/lib/percept/src/percept_db.erl
+++ b/lib/percept/src/percept_db.erl
@@ -24,21 +24,17 @@
-module(percept_db).
--export([
- start/0,
- stop/0,
- insert/1,
- select/2,
- select/1,
- consolidate/0
- ]).
+-export([start/0,
+ stop/0,
+ insert/1,
+ select/2,
+ select/1,
+ consolidate/0]).
-include("percept.hrl").
-define(STOP_TIMEOUT, 1000).
%%==========================================================================
-%%
-%% Type definitions
-%%
+%% Type definitions
%%==========================================================================
%% @type activity_option() =
@@ -64,9 +60,7 @@
%%==========================================================================
-%%
-%% Interface functions
-%%
+%% Interface functions
%%==========================================================================
%% @spec start() -> ok | {started, Pid} | {restarted, Pid}
@@ -100,7 +94,7 @@ restart(PerceptDB)->
-spec do_start()-> pid().
do_start()->
- Pid = spawn( fun() -> init_percept_db() end),
+ Pid = spawn(fun() -> init_percept_db() end),
erlang:register(percept_db, Pid),
Pid.
@@ -123,17 +117,17 @@ stop() ->
%% @private
%% @doc Stops the percept database, with a synchronous call.
--spec stop_sync(pid())-> true.
+-spec stop_sync(pid()) -> true.
-stop_sync(Pid)->
+stop_sync(Pid) ->
MonitorRef = erlang:monitor(process, Pid),
- stop(),
+ _ = stop(),
receive
{'DOWN', MonitorRef, _Type, Pid, _Info}->
true
after ?STOP_TIMEOUT->
- erlang:demonitor(MonitorRef, [flush]),
- exit(Pid, kill)
+ erlang:demonitor(MonitorRef, [flush]),
+ exit(Pid, kill)
end.
%% @spec insert(tuple()) -> ok
@@ -186,26 +180,24 @@ consolidate() ->
ok.
%%==========================================================================
-%%
-%% Database loop
-%%
+%% Database loop
%%==========================================================================
init_percept_db() ->
% Proc and Port information
- ets:new(pdb_info, [named_table, private, {keypos, #information.id}, set]),
+ pdb_info = ets:new(pdb_info, [named_table, private, {keypos, #information.id}, set]),
% Scheduler runnability
- ets:new(pdb_scheduler, [named_table, private, {keypos, #activity.timestamp}, ordered_set]),
+ pdb_scheduler = ets:new(pdb_scheduler, [named_table, private, {keypos, #activity.timestamp}, ordered_set]),
% Process and Port runnability
- ets:new(pdb_activity, [named_table, private, {keypos, #activity.timestamp}, ordered_set]),
+ pdb_activity = ets:new(pdb_activity, [named_table, private, {keypos, #activity.timestamp}, ordered_set]),
% System status
- ets:new(pdb_system, [named_table, private, {keypos, 1}, set]),
+ pdb_system = ets:new(pdb_system, [named_table, private, {keypos, 1}, set]),
% System warnings
- ets:new(pdb_warnings, [named_table, private, {keypos, 1}, ordered_set]),
+ pdb_warnings = ets:new(pdb_warnings, [named_table, private, {keypos, 1}, ordered_set]),
put(debug, 0),
loop_percept_db().
@@ -232,9 +224,7 @@ loop_percept_db() ->
end.
%%==========================================================================
-%%
-%% Auxiliary functions
-%%
+%% Auxiliary functions
%%==========================================================================
%% cleans trace messages from external pids
@@ -788,5 +778,3 @@ update_system_stop_ts(TS) ->
Unhandled ->
io:format("update_system_stop_ts, unhandled ~p ~n", [Unhandled])
end.
-
-
diff --git a/lib/percept/src/percept_graph.erl b/lib/percept/src/percept_graph.erl
index 1803e035ab..e5bbaca2b4 100644
--- a/lib/percept/src/percept_graph.erl
+++ b/lib/percept/src/percept_graph.erl
@@ -33,28 +33,28 @@
%%
graph(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, binary_to_list(graph(Env, Input))).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, binary_to_list(graph(Env, Input))).
%% activity
%% @spec activity(SessionID, Env, Input) -> term()
%% @doc An ESI callback implementation used by the httpd server.
activity(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, binary_to_list(activity_bar(Env, Input))).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, binary_to_list(activity_bar(Env, Input))).
proc_lifetime(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, binary_to_list(proc_lifetime(Env, Input))).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, binary_to_list(proc_lifetime(Env, Input))).
percentage(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, binary_to_list(percentage(Env,Input))).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, binary_to_list(percentage(Env,Input))).
scheduler_graph(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, binary_to_list(scheduler_graph(Env, Input))).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, binary_to_list(scheduler_graph(Env, Input))).
graph(_Env, Input) ->
Query = httpd:parse_query(Input),
diff --git a/lib/percept/src/percept_html.erl b/lib/percept/src/percept_html.erl
index a8eb29b741..a675227584 100644
--- a/lib/percept/src/percept_html.erl
+++ b/lib/percept/src/percept_html.erl
@@ -18,22 +18,18 @@
%% %CopyrightEnd%
-module(percept_html).
--export([
- page/3,
- codelocation_page/3,
- databases_page/3,
- load_database_page/3,
- processes_page/3,
- concurrency_page/3,
- process_info_page/3
- ]).
-
--export([
- value2pid/1,
- pid2value/1,
- get_option_value/2,
- join_strings_with/2
- ]).
+-export([page/3,
+ codelocation_page/3,
+ databases_page/3,
+ load_database_page/3,
+ processes_page/3,
+ concurrency_page/3,
+ process_info_page/3]).
+
+-export([value2pid/1,
+ pid2value/1,
+ get_option_value/2,
+ join_strings_with/2]).
-include("percept.hrl").
-include_lib("kernel/include/file.hrl").
@@ -42,47 +38,47 @@
%% API
page(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, menu()),
- mod_esi:deliver(SessionID, overview_content(Env, Input)),
- mod_esi:deliver(SessionID, footer()).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, menu()),
+ ok = mod_esi:deliver(SessionID, overview_content(Env, Input)),
+ ok = mod_esi:deliver(SessionID, footer()).
processes_page(SessionID, _, _) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, menu()),
- mod_esi:deliver(SessionID, processes_content()),
- mod_esi:deliver(SessionID, footer()).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, menu()),
+ ok = mod_esi:deliver(SessionID, processes_content()),
+ ok = mod_esi:deliver(SessionID, footer()).
concurrency_page(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, menu()),
- mod_esi:deliver(SessionID, concurrency_content(Env, Input)),
- mod_esi:deliver(SessionID, footer()).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, menu()),
+ ok = mod_esi:deliver(SessionID, concurrency_content(Env, Input)),
+ ok = mod_esi:deliver(SessionID, footer()).
databases_page(SessionID, _, _) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, menu()),
- mod_esi:deliver(SessionID, databases_content()),
- mod_esi:deliver(SessionID, footer()).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, menu()),
+ ok = mod_esi:deliver(SessionID, databases_content()),
+ ok = mod_esi:deliver(SessionID, footer()).
codelocation_page(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, menu()),
- mod_esi:deliver(SessionID, codelocation_content(Env, Input)),
- mod_esi:deliver(SessionID, footer()).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, menu()),
+ ok = mod_esi:deliver(SessionID, codelocation_content(Env, Input)),
+ ok = mod_esi:deliver(SessionID, footer()).
process_info_page(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
- mod_esi:deliver(SessionID, menu()),
- mod_esi:deliver(SessionID, process_info_content(Env, Input)),
- mod_esi:deliver(SessionID, footer()).
+ ok = mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, menu()),
+ ok = mod_esi:deliver(SessionID, process_info_content(Env, Input)),
+ ok = mod_esi:deliver(SessionID, footer()).
load_database_page(SessionID, Env, Input) ->
- mod_esi:deliver(SessionID, header()),
+ ok = mod_esi:deliver(SessionID, header()),
% Very dynamic page, handled differently
load_database_content(SessionID, Env, Input),
- mod_esi:deliver(SessionID, footer()).
+ ok = mod_esi:deliver(SessionID, footer()).
%%% --------------------------- %%%
@@ -446,24 +442,24 @@ load_database_content(SessionId, _Env, Input) ->
Filename = filename:join(Path, File),
% Check path/file/filename
- mod_esi:deliver(SessionId, "<div id=\"content\">"),
+ ok = mod_esi:deliver(SessionId, "<div id=\"content\">"),
case file:read_file_info(Filename) of
{ok, _} ->
Content = "<center>
Parsing: " ++ Filename ++ "<br>
</center>",
- mod_esi:deliver(SessionId, Content),
- case percept:analyze(Filename) of
- {error, Reason} ->
- mod_esi:deliver(SessionId, error_msg("Analyze" ++ term2html(Reason)));
- _ ->
- Complete = "<center><a href=\"/cgi-bin/percept_html/page\">View</a></center>",
- mod_esi:deliver(SessionId, Complete)
- end;
+ ok = mod_esi:deliver(SessionId, Content),
+ case percept:analyze(Filename) of
+ {error, Reason} ->
+ ok = mod_esi:deliver(SessionId, error_msg("Analyze" ++ term2html(Reason)));
+ _ ->
+ Complete = "<center><a href=\"/cgi-bin/percept_html/page\">View</a></center>",
+ ok = mod_esi:deliver(SessionId, Complete)
+ end;
{error, Reason} ->
- mod_esi:deliver(SessionId, error_msg("File" ++ term2html(Reason)))
+ ok = mod_esi:deliver(SessionId, error_msg("File" ++ term2html(Reason)))
end,
- mod_esi:deliver(SessionId, "</div>").
+ ok = mod_esi:deliver(SessionId, "</div>").
codelocation_content(_Env, Input) ->
Query = httpd:parse_query(Input),
diff --git a/lib/percept/test/egd_SUITE.erl b/lib/percept/test/egd_SUITE.erl
index 3562ceae88..401695dddd 100644
--- a/lib/percept/test/egd_SUITE.erl
+++ b/lib/percept/test/egd_SUITE.erl
@@ -32,6 +32,7 @@
image_primitives/1,
image_colors/1,
image_font/1,
+ image_fans/1,
image_png_compliant/1]).
suite() ->
@@ -41,6 +42,7 @@ suite() ->
all() ->
[image_create_and_destroy, image_shape,
image_primitives, image_colors, image_font,
+ image_fans,
image_png_compliant].
@@ -71,6 +73,7 @@ image_create_and_destroy(Config) when is_list(Config) ->
%% Image color test.
image_colors(Config) when is_list(Config) ->
{W,H} = get_size(proplists:get_value(max_size, Config)),
+ Dir = proplists:get_value(priv_dir, Config),
Image = egd:create(W, H),
put(image_size, {W,H}),
@@ -96,7 +99,15 @@ image_colors(Config) when is_list(Config) ->
ok = egd:line(Image, get_point(), get_point(), Color)
end, HtmlDefaultNames),
- <<_/binary>> = egd:render(Image),
+ Png1 = <<_/binary>> = egd:render(Image,png,[{render_engine, alpha}]),
+ File1 = filename:join(Dir,"image_colors_alpha.png"),
+ ok = egd:save(Png1,File1),
+ ct:log("<p>Image alpha:</p><img src=\"~s\" />~n", [File1]),
+ Png2 = <<_/binary>> = egd:render(Image,png,[{render_engine, opaque}]),
+ File2 = filename:join(Dir,"image_colors_opaque.png"),
+ ok = egd:save(Png2,File2),
+ ct:log("<p>Image opaque:</p><img src=\"~s\" />~n", [File2]),
+
ok = egd:destroy(Image),
erase(image_size),
ok.
@@ -104,6 +115,7 @@ image_colors(Config) when is_list(Config) ->
%% Image shape API test.
image_shape(Config) when is_list(Config) ->
{W,H} = get_size(proplists:get_value(max_size, Config)),
+ Dir = proplists:get_value(priv_dir, Config),
put(image_size, {W,H}),
Im = egd:create(W, H),
@@ -125,15 +137,21 @@ image_shape(Config) when is_list(Config) ->
ok = bitmap_point_has_color(Bitmap, {W,H}, Pt2, Fgc),
ok = bitmap_point_has_color(Bitmap, {W,H}, Pt1, Fgc),
- <<_/binary>> = egd:render(Im, raw_bitmap, [{render_engine, alpha}]),
+ Bin = <<_/binary>> = egd:render(Im, raw_bitmap, [{render_engine, alpha}]),
+ Png = egd_png:binary(W,H,Bin),
+ File = filename:join(Dir,"image_shape.png"),
+ ok = egd:save(Png,File),
+ ct:log("<p>Image:</p><img src=\"~s\" />~n", [File]),
ok = egd:destroy(Im),
+
erase(image_size),
ok.
%% Image shape API test.
image_primitives(Config) when is_list(Config) ->
{W,H} = get_size(proplists:get_value(max_size, Config)),
+ Dir = proplists:get_value(priv_dir, Config),
put(image_size, {W,H}),
Im0 = egd_primitives:create(W, H),
@@ -157,7 +175,11 @@ image_primitives(Config) when is_list(Config) ->
ok = bitmap_point_has_color(Bitmap, {W,H}, Pt2, Fgc),
ok = bitmap_point_has_color(Bitmap, {W,H}, Pt1, Fgc),
- <<_/binary>> = egd_render:binary(Im2, alpha),
+ Bin = <<_/binary>> = egd_render:binary(Im2, alpha),
+ Png = egd_png:binary(W,H,Bin),
+ File = filename:join(Dir,"image_primitives.png"),
+ ok = egd:save(Png,File),
+ ct:log("<p>Image:</p><img src=\"~s\" />~n", [File]),
erase(image_size),
ok.
@@ -165,6 +187,7 @@ image_primitives(Config) when is_list(Config) ->
%% Image font test.
image_font(Config) when is_list(Config) ->
{W,H} = get_size(proplists:get_value(max_size, Config)),
+ Dir = proplists:get_value(priv_dir, Config),
put(image_size, {W,H}),
Im = egd:create(W, H),
Fgc = egd:color({0,130,0}),
@@ -185,25 +208,46 @@ image_font(Config) when is_list(Config) ->
GlyphStr4 = "{|}~", % Codes 123 -> 126
ok = egd:text(Im, get_point(), Font, GlyphStr1, Fgc),
- <<_/binary>> = egd:render(Im, png),
+ Png1 = <<_/binary>> = egd:render(Im, png),
+ File1 = filename:join(Dir,"text1.png"),
+ ok = egd:save(Png1,File1),
+ ct:log("<p>Image:</p><img src=\"~s\" />~n", [File1]),
ok = egd:text(Im, get_point(), Font, NumericStr, Fgc),
- <<_/binary>> = egd:render(Im, png),
+ Png2 = <<_/binary>> = egd:render(Im, png),
+ File2 = filename:join(Dir,"text2.png"),
+ ok = egd:save(Png2,File2),
+ ct:log("<p>Image:</p><img src=\"~s\" />~n", [File2]),
ok = egd:text(Im, get_point(), Font, GlyphStr2, Fgc),
- <<_/binary>> = egd:render(Im, png),
+ Png3 = <<_/binary>> = egd:render(Im, png),
+ File3 = filename:join(Dir,"text3.png"),
+ ok = egd:save(Png3,File3),
+ ct:log("<p>Image:</p><img src=\"~s\" />~n", [File3]),
ok = egd:text(Im, get_point(), Font, AlphaBigStr, Fgc),
- <<_/binary>> = egd:render(Im, png),
+ Png4 = <<_/binary>> = egd:render(Im, png),
+ File4 = filename:join(Dir,"text4.png"),
+ ok = egd:save(Png4,File4),
+ ct:log("<p>Image:</p><img src=\"~s\" />~n", [File4]),
ok = egd:text(Im, get_point(), Font, GlyphStr3, Fgc),
- <<_/binary>> = egd:render(Im, png),
+ Png5 = <<_/binary>> = egd:render(Im, png),
+ File5 = filename:join(Dir,"text5.png"),
+ ok = egd:save(Png5,File5),
+ ct:log("<p>Image:</p><img src=\"~s\" />~n", [File5]),
ok = egd:text(Im, get_point(), Font, AlphaSmStr, Fgc),
- <<_/binary>> = egd:render(Im, png),
+ Png6 = <<_/binary>> = egd:render(Im, png),
+ File6 = filename:join(Dir,"text6.png"),
+ ok = egd:save(Png6,File6),
+ ct:log("<p>Image:</p><img src=\"~s\" />~n", [File6]),
ok = egd:text(Im, get_point(), Font, GlyphStr4, Fgc),
- <<_/binary>> = egd:render(Im, png),
+ Png7 = <<_/binary>> = egd:render(Im, png),
+ File7 = filename:join(Dir,"text7.png"),
+ ok = egd:save(Png7,File7),
+ ct:log("<p>Image:</p><img src=\"~s\" />~n", [File7]),
ok = egd:destroy(Im),
erase(image_size),
@@ -224,6 +268,65 @@ image_png_compliant(Config) when is_list(Config) ->
erase(image_size),
ok.
+image_fans(Config) when is_list(Config) ->
+ W = 1024,
+ H = 800,
+ Dir = proplists:get_value(priv_dir, Config),
+
+ Fun = fun({F,Args},Im) ->
+ erlang:apply(egd_primitives,F,[Im|Args])
+ end,
+
+ %% fan1
+ Ops1 = gen_vertical_fan(1,{0,400},egd:color(red),1024,800,-15),
+ Ops2 = gen_horizontal_fan(1,{512,800},egd:color(green),1024,0,-15),
+
+ Im0 = egd_primitives:create(W,H),
+ Im1 = lists:foldl(Fun, Im0, Ops1 ++ Ops2),
+ Bin1 = egd_render:binary(Im1, opaque),
+ Png1 = egd_png:binary(W,H,Bin1),
+
+ File1 = filename:join(Dir,"fan1_opaque.png"),
+ ok = egd:save(Png1,File1),
+ ct:log("<p>Image opaque width 1:</p><img src=\"~s\" />~n", [File1]),
+
+ Bin2 = egd_render:binary(Im1, alpha),
+ Png2 = egd_png:binary(W,H,Bin2),
+
+ File2 = filename:join(Dir,"fan1_alpha.png"),
+ ok = egd:save(Png2,File2),
+ ct:log("<p>Image alpha width 1:</p><img src=\"~s\" />~n", [File2]),
+
+
+ %% fan2
+ Ops3 = gen_vertical_fan(7,{0,400},egd:color(red),1024,800,-15),
+ Ops4 = gen_horizontal_fan(7,{512,800},egd:color(green),1024,0,-15),
+
+ Im2 = lists:foldl(Fun, Im0, Ops3 ++ Ops4),
+ Bin3 = egd_render:binary(Im2, opaque),
+ Png3 = egd_png:binary(W,H,Bin3),
+
+ File3 = filename:join(Dir,"fan2_opaque.png"),
+ ok = egd:save(Png3,File3),
+ ct:log("<p>Image opaque width 7:</p><img src=\"~s\" />~n", [File3]),
+
+ Bin4 = egd_render:binary(Im2, alpha),
+ Png4 = egd_png:binary(W,H,Bin4),
+
+ File4 = filename:join(Dir,"fan2_alpha.png"),
+ ok = egd:save(Png4,File4),
+ ct:log("<p>Image alpha width 7:</p><img src=\"~s\" />~n", [File4]),
+ ok.
+
+gen_vertical_fan(Wd,Pt,C,X,Y,Step) when Y > 0 ->
+ [{line,[Pt,{X,Y},Wd,C]}|gen_vertical_fan(Wd,Pt,C,X,Y + Step,Step)];
+gen_vertical_fan(_,_,_,_,_,_) -> [].
+
+gen_horizontal_fan(Wd,Pt,C,X,Y,Step) when X > 0 ->
+ [{line,[Pt,{X,Y},Wd,C]}|gen_horizontal_fan(Wd,Pt,C,X + Step,Y,Step)];
+gen_horizontal_fan(_,_,_,_,_,_) -> [].
+
+
%%----------------------------------------------------------------------
%% Auxiliary tests
%%----------------------------------------------------------------------
@@ -239,33 +342,6 @@ bitmap_point_has_color(Bitmap, {W,_}, {X,Y}, C) ->
{error, {Other,{CR,CG,CB}}}
end.
-%% jfif header by specification
-%% 2 bytes, length
-%% 5 bytes, identifier ="JFIF\0"
-%% 2 bytes, version, (major, minor)
-%% 1 byte , units
-%% However, JFIF seems to start at 6 (7 with 1-index)?
-
-binary_is_jfif_compliant(JpegBin) ->
- {Bin, _} = split_binary(JpegBin, 11),
- List = binary_to_list(Bin),
- case lists:sublist(List, 7, 4) of
- "JFIF" -> true;
- Other ->
- io:format("img -> ~p~n", [Other]),
- false
- end.
-
-binary_is_gif_compliant(GifBin) ->
- {Bin, _} = split_binary(GifBin, 10),
- List = binary_to_list(Bin),
- case lists:sublist(List, 1,5) of
- "GIF87" -> true;
- Other ->
- io:format("img -> ~p~n", [Other]),
- false
- end.
-
binary_is_png_compliant(PngBin) ->
{Bin, _} = split_binary(PngBin, 10),
List = binary_to_list(Bin),
diff --git a/lib/percept/vsn.mk b/lib/percept/vsn.mk
index c427ada91d..614cee8645 100644
--- a/lib/percept/vsn.mk
+++ b/lib/percept/vsn.mk
@@ -1 +1 @@
-PERCEPT_VSN = 0.8.12
+PERCEPT_VSN = 0.9
diff --git a/lib/public_key/doc/src/Makefile b/lib/public_key/doc/src/Makefile
index f3db24afc9..5bdc5d4159 100644
--- a/lib/public_key/doc/src/Makefile
+++ b/lib/public_key/doc/src/Makefile
@@ -38,7 +38,7 @@ RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
# ----------------------------------------------------
XML_APPLICATION_FILES = ref_man.xml
XML_REF3_FILES = public_key.xml
-XML_REF6_FILES =
+XML_REF6_FILES = public_key_app.xml
XML_PART_FILES = part.xml part_notes.xml
XML_CHAPTER_FILES = \
@@ -50,7 +50,7 @@ XML_CHAPTER_FILES = \
BOOK_FILES = book.xml
XML_FILES = $(BOOK_FILES) $(XML_APPLICATION_FILES) $(XML_REF3_FILES) \
- $(XML_PART_FILES) $(XML_CHAPTER_FILES)
+ $(XML_REF6_FILES) $(XML_PART_FILES) $(XML_CHAPTER_FILES)
GIF_FILES = note.gif
@@ -67,9 +67,11 @@ EXTRA_FILES = \
$(DEFAULT_GIF_FILES) \
$(DEFAULT_HTML_FILES) \
$(XML_REF3_FILES:%.xml=$(HTMLDIR)/%.html) \
+ $(XML_REF6_FILES:%.xml=$(HTMLDIR)/%.html) \
$(XML_CHAPTER_FILES:%.xml=$(HTMLDIR)/%.html)
MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3)
+MAN6_FILES = $(XML_REF6_FILES:%_app.xml=$(MAN6DIR)/%.6)
HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
@@ -98,10 +100,11 @@ html: gifs $(HTML_REF_MAN_FILE)
clean clean_docs:
rm -rf $(HTMLDIR)/*
rm -f $(MAN3DIR)/*
+ rm -f $(MAN6DIR)/*
rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
rm -f errs core *~
-man: $(MAN3_FILES)
+man: $(MAN3_FILES) $(MAN6_FILES)
gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
@@ -122,6 +125,8 @@ release_docs_spec: docs
$(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)"
$(INSTALL_DIR) "$(RELEASE_PATH)/man/man3"
$(INSTALL_DATA) $(MAN3DIR)/* "$(RELEASE_PATH)/man/man3"
+ $(INSTALL_DIR) "$(RELEASE_PATH)/man/man6"
+ $(INSTALL_DATA) $(MAN6DIR)/* "$(RELEASE_PATH)/man/man6"
release_spec:
info:
diff --git a/lib/public_key/doc/src/notes.xml b/lib/public_key/doc/src/notes.xml
index ee37d38a56..c4d930c01f 100644
--- a/lib/public_key/doc/src/notes.xml
+++ b/lib/public_key/doc/src/notes.xml
@@ -37,6 +37,19 @@
<section><title>Public_Key 1.2</title>
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ The ASN-1 type GeneralName can have more values, then the
+ most common directory name, the code now handles this.</p>
+ <p>
+ Own Id: OTP-13554</p>
+ </item>
+ </list>
+ </section>
+
+
<section><title>Improvements and New Features</title>
<list>
<item>
diff --git a/lib/public_key/doc/src/public_key.xml b/lib/public_key/doc/src/public_key.xml
index 04daee460f..385604677c 100644
--- a/lib/public_key/doc/src/public_key.xml
+++ b/lib/public_key/doc/src/public_key.xml
@@ -34,40 +34,13 @@
<module>public_key</module>
<modulesummary>API module for public-key infrastructure.</modulesummary>
<description>
- <p>This module provides functions to handle public-key infrastructure. It can
- encode/decode different file formats (PEM, OpenSSH), sign and verify digital signatures,
- and validate certificate paths and certificate revocation lists.
+ <p>Provides functions to handle public-key infrastructure,
+ for details see
+ <seealso marker="public_key_app">public_key(6)</seealso>.
</p>
</description>
<section>
- <title>public_key</title>
-
- <list type="bulleted">
- <item> Public Key requires the Crypto and ASN1 applications,
- the latter as OTP R16 (hopefully the runtime dependency on ASN1 will
- be removed again in the future).</item>
-
- <item>Supports <url href="http://www.ietf.org/rfc/rfc5280.txt">RFC 5280 </url> -
- Internet X.509 Public-Key Infrastructure Certificate and Certificate Revocation List
- (CRL) Profile </item>
- <item>Supports <url href="http://www.ietf.org/rfc/rfc3447.txt"> PKCS-1 </url> -
- RSA Cryptography Standard </item>
- <item>Supports <url href="http://csrc.nist.gov/publications/fips/fips186-3/fips_186-3.pdf"> DSS</url> -
- Digital Signature Standard (DSA - Digital Signature Algorithm)</item>
- <item>Supports
- <url href="http://www.emc.com/emc-plus/rsa-labs/standards-initiatives/pkcs-3-diffie-hellman-key-agreement-standar.htm"> PKCS-3 </url> -
- Diffie-Hellman Key Agreement Standard </item>
- <item>Supports <url href="http://www.ietf.org/rfc/rfc2898.txt"> PKCS-5</url> -
- Password-Based Cryptography Standard </item>
- <item>Supports <url href="http://www.ietf.org/rfc/rfc5208.txt"> PKCS-8</url> -
- Private-Key Information Syntax Standard</item>
- <item>Supports <url href="http://www.ietf.org/rfc/rfc5967.txt"> PKCS-10</url> -
- Certification Request Syntax Standard</item>
- </list>
- </section>
-
- <section>
<title>DATA TYPES</title>
<note><p>All records used in this Reference Manual
@@ -728,6 +701,23 @@ fun(#'DistributionPoint'{}, #'CertificateList'{},
</func>
<func>
+ <name>pkix_match_dist_point(CRL, DistPoint) -> boolean()</name>
+ <fsummary>Checks whether the given distribution point matches the
+ Issuing Distribution Point of the CRL.</fsummary>
+
+ <type>
+ <v>CRL = der_encoded() | #'CertificateList'{} </v>
+ <v>DistPoint = #'DistributionPoint'{}</v>
+ </type>
+ <desc>
+ <p>Checks whether the given distribution point matches the
+ Issuing Distribution Point of the CRL, as described in RFC 5280.
+ If the CRL doesn't have an Issuing Distribution Point extension,
+ the distribution point always matches.</p>
+ </desc>
+ </func>
+
+ <func>
<name>pkix_sign(#'OTPTBSCertificate'{}, Key) -> der_encoded()</name>
<fsummary>Signs certificate.</fsummary>
<type>
@@ -846,7 +836,27 @@ fun(#'DistributionPoint'{}, #'CertificateList'{},
<p>Verifies a digital signature.</p>
</desc>
</func>
-
+
+ <func>
+ <name>short_name_hash(Name) -> string()</name>
+ <fsummary>Generates a short hash of an issuer name.</fsummary>
+ <type>
+ <v>Name = issuer_name()</v>
+ </type>
+ <desc>
+ <p>Generates a short hash of an issuer name. The hash is
+ returned as a string containing eight hexadecimal digits.</p>
+
+ <p>The return value of this function is the same as the result
+ of the commands <c>openssl crl -hash</c> and
+ <c>openssl x509 -issuer_hash</c>, when passed the issuer name of
+ a CRL or a certificate, respectively. This hash is used by the
+ <c>c_rehash</c> tool to maintain a directory of symlinks to CRL
+ files, in order to facilitate looking up a CRL by its issuer
+ name.</p>
+ </desc>
+ </func>
+
</funcs>
</erlref>
diff --git a/lib/public_key/doc/src/public_key_app.xml b/lib/public_key/doc/src/public_key_app.xml
new file mode 100644
index 0000000000..1f87932b6c
--- /dev/null
+++ b/lib/public_key/doc/src/public_key_app.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE appref SYSTEM "appref.dtd">
+
+<appref>
+ <header>
+ <copyright>
+ <year>2016</year><year>2016</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ </legalnotice>
+
+ <title>public_key</title>
+ <prepared></prepared>
+ <docno></docno>
+ <date></date>
+ <rev></rev>
+ <file>public_key_app.sgml</file>
+ </header>
+ <app>public_key</app>
+ <appsummary>Provides functions to handle public-key infrastructure. </appsummary>
+ <description>
+
+ <p> Provides encode/decode of different file formats (PEM, OpenSSH),
+ digital signature and verification functions,
+ validation of certificate paths and certificate revocation lists (CRLs) and
+ other functions for handling of certificates, keys and CRLs.</p>
+
+ <list type="bulleted">
+ <item>Supports <url href="http://www.ietf.org/rfc/rfc5280.txt">RFC 5280 </url> -
+ Internet X.509 Public-Key Infrastructure Certificate and Certificate Revocation List
+ (CRL) Profile. Certificate policies are currently not supported. </item>
+ <item>Supports <url href="http://www.ietf.org/rfc/rfc3447.txt"> PKCS-1 </url> -
+ RSA Cryptography Standard </item>
+ <item>Supports <url href="http://csrc.nist.gov/publications/fips/fips186-3/fips_186-3.pdf"> DSS</url> -
+ Digital Signature Standard (DSA - Digital Signature Algorithm)</item>
+ <item>Supports
+ <url href="http://www.emc.com/emc-plus/rsa-labs/standards-initiatives/pkcs-3-diffie-hellman-key-agreement-standar.htm"> PKCS-3 </url> -
+ Diffie-Hellman Key Agreement Standard </item>
+ <item>Supports <url href="http://www.ietf.org/rfc/rfc2898.txt"> PKCS-5</url> -
+ Password-Based Cryptography Standard </item>
+ <item>Supports <url href="http://www.ietf.org/rfc/rfc5208.txt"> PKCS-8</url> -
+ Private-Key Information Syntax Standard</item>
+ <item>Supports <url href="http://www.ietf.org/rfc/rfc5967.txt"> PKCS-10</url> -
+ Certification Request Syntax Standard</item>
+ </list>
+ </description>
+
+ <section>
+ <title>DEPENDENCIES</title>
+ <p>The <c>public_key</c> application uses the
+ Crypto application to preform cryptographic operations and the
+ ASN-1 application to handle PKIX-ASN-1 specifications, hence
+ these applications must be loaded for the <c>public_key</c> application to work.
+ In an embedded environment this means they must be started with
+ <c>application:start/[1,2]</c> before the <c>public_key</c> application is
+ started.</p>
+ </section>
+
+ <section>
+ <title>ERROR LOGGER AND EVENT HANDLERS</title>
+ <p> The <c>public_key</c> application is a library application
+ and does not use the error logger. The functions will either sucssed
+ or fail with a runtime error.
+ </p>
+ </section>
+
+ <section>
+ <title>SEE ALSO</title>
+ <p><seealso marker="kernel:application">application(3)</seealso></p>
+ </section>
+
+</appref>
diff --git a/lib/public_key/doc/src/ref_man.xml b/lib/public_key/doc/src/ref_man.xml
index 75c5374257..2bd1733dbc 100644
--- a/lib/public_key/doc/src/ref_man.xml
+++ b/lib/public_key/doc/src/ref_man.xml
@@ -36,6 +36,7 @@
from RFC 3280 (X.509 certificates) and parts of the PKCS standard.
</p>
</description>
+ <xi:include href="public_key_app.xml"/>
<xi:include href="public_key.xml"/>
</application>
diff --git a/lib/public_key/priv/generate b/lib/public_key/priv/generate
index fd185bfd52..69bb2263f4 100755
--- a/lib/public_key/priv/generate
+++ b/lib/public_key/priv/generate
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
# Generate ssh moduli files for the sizes in $moduli
diff --git a/lib/public_key/src/pubkey_cert.erl b/lib/public_key/src/pubkey_cert.erl
index c5e6ffded5..f45f2c2e9a 100644
--- a/lib/public_key/src/pubkey_cert.erl
+++ b/lib/public_key/src/pubkey_cert.erl
@@ -547,7 +547,9 @@ cert_auth_key_id(#'AuthorityKeyIdentifier'{authorityCertIssuer =
{ok, {SerialNr, decode_general_name(AuthCertIssuer)}}.
decode_general_name([{directoryName, Issuer}]) ->
- normalize_general_name(Issuer).
+ normalize_general_name(Issuer);
+decode_general_name([{_, Issuer}]) ->
+ Issuer.
%% Strip all leading and trailing spaces and make
%% sure there is no double spaces in between.
diff --git a/lib/public_key/src/public_key.erl b/lib/public_key/src/public_key.erl
index a5944bd604..d23abfe256 100644
--- a/lib/public_key/src/public_key.erl
+++ b/lib/public_key/src/public_key.erl
@@ -53,8 +53,10 @@
pkix_crls_validate/3,
pkix_dist_point/1,
pkix_dist_points/1,
+ pkix_match_dist_point/2,
pkix_crl_verify/2,
- pkix_crl_issuer/1
+ pkix_crl_issuer/1,
+ short_name_hash/1
]).
-export_type([public_key/0, private_key/0, pem_entry/0,
@@ -524,6 +526,38 @@ pkix_dist_points(OtpCert) ->
[], Value).
%%--------------------------------------------------------------------
+-spec pkix_match_dist_point(der_encoded() | #'CertificateList'{},
+ #'DistributionPoint'{}) -> boolean().
+%% Description: Check whether the given distribution point matches
+%% the "issuing distribution point" of the CRL.
+%%--------------------------------------------------------------------
+pkix_match_dist_point(CRL, DistPoint) when is_binary(CRL) ->
+ pkix_match_dist_point(der_decode('CertificateList', CRL), DistPoint);
+pkix_match_dist_point(#'CertificateList'{},
+ #'DistributionPoint'{distributionPoint = asn1_NOVALUE}) ->
+ %% No distribution point name specified - that's considered a match.
+ true;
+pkix_match_dist_point(#'CertificateList'{
+ tbsCertList =
+ #'TBSCertList'{
+ crlExtensions = Extensions}},
+ #'DistributionPoint'{
+ distributionPoint = {fullName, DPs}}) ->
+ case pubkey_cert:select_extension(?'id-ce-issuingDistributionPoint', Extensions) of
+ undefined ->
+ %% If the CRL doesn't have an IDP extension, it
+ %% automatically qualifies.
+ true;
+ #'Extension'{extnValue = IDPValue} ->
+ %% If the CRL does have an IDP extension, it must match
+ %% the given DistributionPoint to be considered a match.
+ IDPEncoded = der_decode('IssuingDistributionPoint', IDPValue),
+ #'IssuingDistributionPoint'{distributionPoint = {fullName, IDPs}} =
+ pubkey_cert_records:transform(IDPEncoded, decode),
+ pubkey_crl:match_one(IDPs, DPs)
+ end.
+
+%%--------------------------------------------------------------------
-spec pkix_sign(#'OTPTBSCertificate'{},
rsa_private_key() | dsa_private_key()) -> Der::binary().
%%
@@ -785,6 +819,17 @@ oid2ssh_curvename(?'secp384r1') -> <<"nistp384">>;
oid2ssh_curvename(?'secp521r1') -> <<"nistp521">>.
%%--------------------------------------------------------------------
+-spec short_name_hash({rdnSequence, [#'AttributeTypeAndValue'{}]}) ->
+ string().
+
+%% Description: Generates OpenSSL-style hash of a name.
+%%--------------------------------------------------------------------
+short_name_hash({rdnSequence, _Attributes} = Name) ->
+ HashThis = encode_name_for_short_hash(Name),
+ <<HashValue:32/little, _/binary>> = crypto:hash(sha, HashThis),
+ string:to_lower(string:right(integer_to_list(HashValue, 16), 8, $0)).
+
+%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
do_verify(DigestOrPlainText, DigestType, Signature,
@@ -1047,3 +1092,74 @@ ec_key({PubKey, PrivateKey}, Params) ->
parameters = Params,
publicKey = PubKey}.
+encode_name_for_short_hash({rdnSequence, Attributes0}) ->
+ Attributes = lists:map(fun normalise_attribute/1, Attributes0),
+ {Encoded, _} = 'OTP-PUB-KEY':'enc_RDNSequence'(Attributes, []),
+ Encoded.
+
+%% Normalise attribute for "short hash". If the attribute value
+%% hasn't been decoded yet, decode it so we can normalise it.
+normalise_attribute([#'AttributeTypeAndValue'{
+ type = _Type,
+ value = Binary} = ATV]) when is_binary(Binary) ->
+ case pubkey_cert_records:transform(ATV, decode) of
+ #'AttributeTypeAndValue'{value = Binary} ->
+ %% Cannot decode attribute; return original.
+ [ATV];
+ DecodedATV = #'AttributeTypeAndValue'{} ->
+ %% The new value will either be String or {Encoding,String}.
+ normalise_attribute([DecodedATV])
+ end;
+normalise_attribute([#'AttributeTypeAndValue'{
+ type = _Type,
+ value = {Encoding, String}} = ATV])
+ when
+ Encoding =:= utf8String;
+ Encoding =:= printableString;
+ Encoding =:= teletexString;
+ Encoding =:= ia5String ->
+ %% These string types all give us something that the unicode
+ %% module understands.
+ NewValue = normalise_attribute_value(String),
+ [ATV#'AttributeTypeAndValue'{value = NewValue}];
+normalise_attribute([#'AttributeTypeAndValue'{
+ type = _Type,
+ value = String} = ATV]) when is_list(String) ->
+ %% A string returned by pubkey_cert_records:transform/2, for
+ %% certain attributes that commonly have incorrect value types.
+ NewValue = normalise_attribute_value(String),
+ [ATV#'AttributeTypeAndValue'{value = NewValue}].
+
+normalise_attribute_value(String) ->
+ Converted = unicode:characters_to_binary(String),
+ NormalisedString = normalise_string(Converted),
+ %% We can't use the encoding function for the actual type of the
+ %% attribute, since some of them don't allow utf8Strings, which is
+ %% the required encoding when creating the hash.
+ {NewBinary, _} = 'OTP-PUB-KEY':'enc_X520CommonName'({utf8String, NormalisedString}, []),
+ NewBinary.
+
+normalise_string(String) ->
+ %% Normalise attribute values as required for "short hashes", as
+ %% implemented by OpenSSL.
+
+ %% Remove ASCII whitespace from beginning and end.
+ TrimmedLeft = re:replace(String, "^[\s\f\n\r\t\v]+", "", [unicode, global]),
+ TrimmedRight = re:replace(TrimmedLeft, "[\s\f\n\r\t\v]+$", "", [unicode, global]),
+ %% Convert multiple whitespace characters to a single space.
+ Collapsed = re:replace(TrimmedRight, "[\s\f\n\r\t\v]+", "\s", [unicode, global]),
+ %% Convert ASCII characters to lowercase
+ Lower = ascii_to_lower(Collapsed),
+ %% And we're done!
+ Lower.
+
+ascii_to_lower(String) ->
+ %% Can't use string:to_lower/1, because that changes Latin-1
+ %% characters as well.
+ << <<(if $A =< C, C =< $Z ->
+ C + ($a - $A);
+ true ->
+ C
+ end)>>
+ ||
+ <<C>> <= iolist_to_binary(String) >>.
diff --git a/lib/public_key/test/pbe_SUITE.erl b/lib/public_key/test/pbe_SUITE.erl
index 4b7ebf4309..004eaefc27 100644
--- a/lib/public_key/test/pbe_SUITE.erl
+++ b/lib/public_key/test/pbe_SUITE.erl
@@ -30,7 +30,8 @@
%% Common Test interface functions -----------------------------------
%%--------------------------------------------------------------------
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [].
all() ->
[
@@ -199,7 +200,7 @@ pbdkdf2(Config) when is_list(Config) ->
old_enc() ->
[{doc,"Tests encode/decode RSA key encrypted with different ciphers using old PEM encryption scheme"}].
old_enc(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
%% key generated with ssh-keygen -N hello_aes -f old_aes_128_cbc_enc_key.pem
{ok, PemAesCbc} = file:read_file(filename:join(Datadir, "old_aes_128_cbc_enc_key.pem")),
@@ -226,7 +227,7 @@ check_key_info(#'PrivateKeyInfo'{privateKeyAlgorithm =
#'RSAPrivateKey'{} = public_key:der_decode('RSAPrivateKey', iolist_to_binary(Key)).
decode_encode_key_file(File, Password, Cipher, Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, PemKey} = file:read_file(filename:join(Datadir, File)),
PemEntry = public_key:pem_decode(PemKey),
diff --git a/lib/public_key/test/pkits_SUITE.erl b/lib/public_key/test/pkits_SUITE.erl
index 17be99b52d..487b3dbe3f 100644
--- a/lib/public_key/test/pkits_SUITE.erl
+++ b/lib/public_key/test/pkits_SUITE.erl
@@ -53,7 +53,7 @@
%%--------------------------------------------------------------------
suite() ->
- [{ct_hooks,[ts_install_cth]}].
+ [].
all() ->
[{group, signature_verification},
diff --git a/lib/public_key/test/public_key_SUITE.erl b/lib/public_key/test/public_key_SUITE.erl
index 51050c4480..b22b69a0f2 100644
--- a/lib/public_key/test/public_key_SUITE.erl
+++ b/lib/public_key/test/public_key_SUITE.erl
@@ -34,7 +34,8 @@
%% Common Test interface functions -----------------------------------
%%--------------------------------------------------------------------
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [].
all() ->
[app, appup,
@@ -43,7 +44,8 @@ all() ->
encrypt_decrypt,
{group, sign_verify},
pkix, pkix_countryname, pkix_emailaddress, pkix_path_validation,
- pkix_iso_rsa_oid, pkix_iso_dsa_oid, pkix_crl].
+ pkix_iso_rsa_oid, pkix_iso_dsa_oid, pkix_crl, general_name,
+ short_cert_issuer_hash, short_crl_issuer_hash].
groups() ->
[{pem_decode_encode, [], [dsa_pem, rsa_pem, ec_pem, encrypted_pem,
@@ -108,7 +110,7 @@ appup(Config) when is_list(Config) ->
dsa_pem() ->
[{doc, "DSA PEM-file decode/encode"}].
dsa_pem(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
[{'DSAPrivateKey', DerDSAKey, not_encrypted} = Entry0 ] =
erl_make_certs:pem_to_der(filename:join(Datadir, "dsa.pem")),
@@ -131,7 +133,7 @@ dsa_pem(Config) when is_list(Config) ->
rsa_pem() ->
[{doc, "RSA PEM-file decode/encode"}].
rsa_pem(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
[{'RSAPrivateKey', DerRSAKey, not_encrypted} = Entry0 ] =
erl_make_certs:pem_to_der(filename:join(Datadir, "client_key.pem")),
@@ -166,7 +168,7 @@ rsa_pem(Config) when is_list(Config) ->
ec_pem() ->
[{doc, "EC key PEM-file decode/encode"}].
ec_pem(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, ECPubPem} = file:read_file(filename:join(Datadir, "ec_pubkey.pem")),
[{'SubjectPublicKeyInfo', _, _} = PubEntry0] =
public_key:pem_decode(ECPubPem),
@@ -192,7 +194,7 @@ ec_pem(Config) when is_list(Config) ->
encrypted_pem() ->
[{doc, "Encrypted PEM-file decode/encode"}].
encrypted_pem(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
[{'RSAPrivateKey', DerRSAKey, not_encrypted}] =
erl_make_certs:pem_to_der(filename:join(Datadir, "client_key.pem")),
@@ -225,7 +227,7 @@ encrypted_pem(Config) when is_list(Config) ->
dh_pem() ->
[{doc, "DH parametrs PEM-file decode/encode"}].
dh_pem(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
[{'DHParameter', _DerDH, not_encrypted} = Entry] =
erl_make_certs:pem_to_der(filename:join(Datadir, "dh.pem")),
asn1_encode_decode(Entry).
@@ -235,7 +237,7 @@ dh_pem(Config) when is_list(Config) ->
pkcs10_pem() ->
[{doc, "PKCS-10 PEM-file decode/encode"}].
pkcs10_pem(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
[{'CertificationRequest', _DerPKCS10, not_encrypted} = Entry] =
erl_make_certs:pem_to_der(filename:join(Datadir, "req.pem")),
asn1_encode_decode(Entry).
@@ -243,7 +245,7 @@ pkcs10_pem(Config) when is_list(Config) ->
pkcs7_pem() ->
[{doc, "PKCS-7 PEM-file decode/encode"}].
pkcs7_pem(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
[{'ContentInfo', _, not_encrypted} = Entry0] =
erl_make_certs:pem_to_der(filename:join(Datadir, "pkcs7_cert.pem")),
[{'ContentInfo', _, not_encrypted} = Entry1] =
@@ -255,7 +257,7 @@ pkcs7_pem(Config) when is_list(Config) ->
cert_pem() ->
[{doc, "Certificate PEM-file decode/encode"}].
cert_pem(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
[{'Certificate', _, not_encrypted} = Entry0] =
erl_make_certs:pem_to_der(filename:join(Datadir, "client_cert.pem")),
@@ -273,7 +275,7 @@ cert_pem(Config) when is_list(Config) ->
ssh_rsa_public_key() ->
[{doc, "ssh rsa public key decode/encode"}].
ssh_rsa_public_key(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, RSARawSsh2} = file:read_file(filename:join(Datadir, "ssh2_rsa_pub")),
[{PubKey, Attributes1}] = public_key:ssh_decode(RSARawSsh2, public_key),
@@ -299,7 +301,7 @@ ssh_rsa_public_key(Config) when is_list(Config) ->
ssh_dsa_public_key() ->
[{doc, "ssh dsa public key decode/encode"}].
ssh_dsa_public_key(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, DSARawSsh2} = file:read_file(filename:join(Datadir, "ssh2_dsa_pub")),
[{PubKey, Attributes1}] = public_key:ssh_decode(DSARawSsh2, public_key),
@@ -325,7 +327,7 @@ ssh_dsa_public_key(Config) when is_list(Config) ->
ssh_ecdsa_public_key() ->
[{doc, "ssh ecdsa public key decode/encode"}].
ssh_ecdsa_public_key(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, ECDSARawSsh2} = file:read_file(filename:join(Datadir, "ssh2_ecdsa_pub")),
[{PubKey, Attributes1}] = public_key:ssh_decode(ECDSARawSsh2, public_key),
@@ -350,7 +352,7 @@ ssh_ecdsa_public_key(Config) when is_list(Config) ->
ssh_rfc4716_rsa_comment() ->
[{doc, "Test comment header and rsa key"}].
ssh_rfc4716_rsa_comment(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, RSARawSsh2} = file:read_file(filename:join(Datadir, "ssh2_rsa_comment_pub")),
[{#'RSAPublicKey'{} = PubKey, Attributes}] =
@@ -366,7 +368,7 @@ ssh_rfc4716_rsa_comment(Config) when is_list(Config) ->
ssh_rfc4716_dsa_comment() ->
[{doc, "Test comment header and dsa key"}].
ssh_rfc4716_dsa_comment(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, DSARawSsh2} = file:read_file(filename:join(Datadir, "ssh2_dsa_comment_pub")),
[{{_, #'Dss-Parms'{}} = PubKey, Attributes}] =
@@ -386,7 +388,7 @@ ssh_rfc4716_dsa_comment(Config) when is_list(Config) ->
ssh_rfc4716_rsa_subject() ->
[{doc, "Test another header value than comment"}].
ssh_rfc4716_rsa_subject(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, RSARawSsh2} = file:read_file(filename:join(Datadir, "ssh2_subject_pub")),
[{#'RSAPublicKey'{} = PubKey, Attributes}] =
@@ -406,7 +408,7 @@ ssh_rfc4716_rsa_subject(Config) when is_list(Config) ->
ssh_known_hosts() ->
[{doc, "ssh known hosts file encode/decode"}].
ssh_known_hosts(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, SshKnownHosts} = file:read_file(filename:join(Datadir, "known_hosts")),
[{#'RSAPublicKey'{}, Attributes1}, {#'RSAPublicKey'{}, Attributes2},
@@ -435,7 +437,7 @@ ssh_known_hosts(Config) when is_list(Config) ->
ssh1_known_hosts() ->
[{doc, "ssh (ver 1) known hosts file encode/decode"}].
ssh1_known_hosts(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, SshKnownHosts} = file:read_file(filename:join(Datadir, "ssh1_known_hosts")),
[{#'RSAPublicKey'{}, Attributes1}, {#'RSAPublicKey'{}, Attributes2},{#'RSAPublicKey'{}, Attributes3}]
@@ -455,7 +457,7 @@ ssh1_known_hosts(Config) when is_list(Config) ->
ssh_auth_keys() ->
[{doc, "ssh authorized keys file encode/decode"}].
ssh_auth_keys(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, SshAuthKeys} = file:read_file(filename:join(Datadir, "auth_keys")),
[{#'RSAPublicKey'{}, Attributes1}, {{_, #'Dss-Parms'{}}, Attributes2},
@@ -481,7 +483,7 @@ ssh_auth_keys(Config) when is_list(Config) ->
ssh1_auth_keys() ->
[{doc, "ssh (ver 1) authorized keys file encode/decode"}].
ssh1_auth_keys(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, SshAuthKeys} = file:read_file(filename:join(Datadir, "ssh1_auth_keys")),
[{#'RSAPublicKey'{}, Attributes1},
@@ -509,7 +511,7 @@ ssh1_auth_keys(Config) when is_list(Config) ->
ssh_openssh_public_key_with_comment() ->
[{doc, "Test that emty lines and lines starting with # are ignored"}].
ssh_openssh_public_key_with_comment(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, DSARawOpenSsh} = file:read_file(filename:join(Datadir, "openssh_dsa_with_comment_pub")),
[{{_, #'Dss-Parms'{}}, _}] = public_key:ssh_decode(DSARawOpenSsh, openssh_public_key).
@@ -518,7 +520,7 @@ ssh_openssh_public_key_with_comment(Config) when is_list(Config) ->
ssh_openssh_public_key_long_header() ->
[{doc, "Test that long headers are handled"}].
ssh_openssh_public_key_long_header(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok,RSARawOpenSsh} = file:read_file(filename:join(Datadir, "ssh_rsa_long_header_pub")),
[{#'RSAPublicKey'{}, _}] = Decoded = public_key:ssh_decode(RSARawOpenSsh, public_key),
@@ -577,7 +579,7 @@ dsa_sign_verify(Config) when is_list(Config) ->
public_key:pem_entry_decode(CertKey1),
true = public_key:pkix_verify(Cert2, {Y, #'Dss-Parms'{p=P, q=Q, g=G}}),
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
[DsaKey = {'DSAPrivateKey', _, _}] =
erl_make_certs:pem_to_der(filename:join(Datadir, "dsa.pem")),
DSAPrivateKey = public_key:pem_entry_decode(DsaKey),
@@ -606,7 +608,7 @@ dsa_sign_verify(Config) when is_list(Config) ->
pkix() ->
[{doc, "Misc pkix tests not covered elsewhere"}].
pkix(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
Certs0 = erl_make_certs:pem_to_der(filename:join(Datadir, "cacerts.pem")),
Certs1 = erl_make_certs:pem_to_der(filename:join(Datadir, "client_cert.pem")),
TestTransform = fun({'Certificate', CertDer, not_encrypted}) ->
@@ -643,11 +645,10 @@ pkix(Config) when is_list(Config) ->
[{'AttributeTypeAndValue', {2,5,4,3},{printableString," erlang ca "}}]]},
VerifyStr = {rdnSequence,
[[{'AttributeTypeAndValue', {2,5,4,3},{printableString,"erlangca"}}],
- [{'AttributeTypeAndValue', {2,5,4,3},{printableString,"erlang ca"}}]]},
- VerifyStr = public_key:pkix_normalize_name(TestStr),
-
- ok.
-
+ [{'AttributeTypeAndValue', {2,5,4,3},{printableString,"erlang ca"}}]]},
+ VerifyStr = public_key:pkix_normalize_name(TestStr).
+
+
%%--------------------------------------------------------------------
pkix_countryname() ->
[{doc, "Test workaround for certs that code x509countryname as utf8"}].
@@ -749,7 +750,7 @@ pkix_iso_rsa_oid() ->
[{doc, "Test workaround for supporting certs that use ISO oids"
" 1.3.14.3.2.29 instead of PKIX/PKCS oid"}].
pkix_iso_rsa_oid(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, PemCert} = file:read_file(filename:join(Datadir, "rsa_ISO.pem")),
[{_, Cert, _}] = public_key:pem_decode(PemCert),
OTPCert = public_key:pkix_decode_cert(Cert, otp),
@@ -761,7 +762,7 @@ pkix_iso_dsa_oid() ->
[{doc, "Test workaround for supporting certs that use ISO oids"
"1.3.14.3.2.27 instead of PKIX/PKCS oid"}].
pkix_iso_dsa_oid(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, PemCert} = file:read_file(filename:join(Datadir, "dsa_ISO.pem")),
[{_, Cert, _}] = public_key:pem_decode(PemCert),
OTPCert = public_key:pkix_decode_cert(Cert, otp),
@@ -774,7 +775,7 @@ pkix_crl() ->
[{doc, "test pkix_crl_* functions"}].
pkix_crl(Config) when is_list(Config) ->
- Datadir = ?config(data_dir, Config),
+ Datadir = proplists:get_value(data_dir, Config),
{ok, PemCRL} = file:read_file(filename:join(Datadir, "idp_crl.pem")),
[{_, CRL, _}] = public_key:pem_decode(PemCRL),
@@ -804,6 +805,54 @@ pkix_crl(Config) when is_list(Config) ->
reasons = asn1_NOVALUE,
distributionPoint = Point} = public_key:pkix_dist_point(OTPIDPCert).
+general_name() ->
+ [{doc, "Test that decoding of general name filed may have other values"
+ " than {rdnSequence, Seq}"}].
+
+general_name(Config) when is_list(Config) ->
+ DummyRfc822Name = "CN=CNDummy, OU=OUDummy, O=ODummy, C=SE",
+ {ok, {1, DummyRfc822Name}} =
+ pubkey_cert:cert_auth_key_id(
+ #'AuthorityKeyIdentifier'{authorityCertIssuer =
+ [{rfc822Name, DummyRfc822Name}],
+ authorityCertSerialNumber =
+ 1}).
+%%--------------------------------------------------------------------
+short_cert_issuer_hash() ->
+ [{doc, "Test OpenSSL-style hash for certificate issuer"}].
+
+short_cert_issuer_hash(Config) when is_list(Config) ->
+ Datadir = ?config(data_dir, Config),
+ [{'Certificate', CertDER, _}] =
+ erl_make_certs:pem_to_der(filename:join(Datadir, "client_cert.pem")),
+
+ %% This hash value was obtained by running:
+ %% openssl x509 -in client_cert.pem -issuer_hash -noout
+ CertIssuerHash = "d4c8d7e5",
+
+ #'OTPCertificate'{tbsCertificate = #'OTPTBSCertificate'{issuer = Issuer}} =
+ public_key:pkix_decode_cert(CertDER, otp),
+
+ CertIssuerHash = public_key:short_name_hash(Issuer).
+
+%%--------------------------------------------------------------------
+short_crl_issuer_hash() ->
+ [{doc, "Test OpenSSL-style hash for CRL issuer"}].
+
+short_crl_issuer_hash(Config) when is_list(Config) ->
+ Datadir = ?config(data_dir, Config),
+ [{'CertificateList', CrlDER, _}] =
+ erl_make_certs:pem_to_der(filename:join(Datadir, "idp_crl.pem")),
+
+ %% This hash value was obtained by running:
+ %% openssl crl -in idp_crl.pem -hash -noout
+ CrlIssuerHash = "d6134ed3",
+
+ Issuer = public_key:pkix_crl_issuer(CrlDER),
+
+ CrlIssuerHash = public_key:short_name_hash(Issuer).
+
+
%%--------------------------------------------------------------------
%% Internal functions ------------------------------------------------
%%--------------------------------------------------------------------
diff --git a/lib/reltool/doc/src/notes.xml b/lib/reltool/doc/src/notes.xml
index 07853f7055..25d983afd3 100644
--- a/lib/reltool/doc/src/notes.xml
+++ b/lib/reltool/doc/src/notes.xml
@@ -211,7 +211,6 @@
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
- <p>
<list> <item> If <c>incl_cond</c> was set to
<c>derived</c> on module level, then reltool_server would
crash with a <c>case_clause</c>. This has been corrected.
@@ -242,7 +241,7 @@
implemented in reltool. </item> <item> Instead of only
looking at the directory name, reltool now first looks
for a <c>.app</c> file in order to figure out the name of
- an application. </item> </list></p>
+ an application. </item> </list>
<p>
Own Id: OTP-10012 Aux Id: kunagi-171 [82] </p>
</item>
@@ -289,7 +288,6 @@
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
- <p>
Miscellaneous corrections: <list> <item> Start of reltool
GUI would sometimes crash with a badmatch in
reltool_sys_win:do_init. This has been corrected. </item>
@@ -328,7 +326,7 @@
and when generating target system. </item> <item> Title
of dependecies column in app and mod window is changed
from "Modules used by others" to "Modules using this".
- </item> </list></p>
+ </item> </list>
<p>
Own Id: OTP-9792</p>
</item>
@@ -355,7 +353,7 @@
</item>
<item>
<p>
- Some bug fixes related to the handling of escripts:
+ Some bug fixes related to the handling of escripts:</p>
<list> <item> Reltool could not handle escripts with
inlined applications. This has been corrected. Inlined
applications will be visible in the GUI, but not possible
@@ -374,7 +372,7 @@
another escript, for which the name sorts before the
existing one, would cause reltool to fail saying
"Application name clash". This has been corrected.
- </item> </list></p>
+ </item> </list>
<p>
Own Id: OTP-9968</p>
</item>
@@ -548,8 +546,8 @@
<p>The handling of applications included in releases has
been improved. Applications that are required to be
started before other applications in a release are now
- automatically included in the release. The <c>kernel</c>
- and <c>stdlib</c> applications are always included as
+ automatically included in the release. The Kernel
+ and STDLIB applications are always included as
they are mandatory.</p>
<p>Applications that are (explicitly or implicitly)
included in a release are now automatically included as
diff --git a/lib/reltool/doc/src/part.xml b/lib/reltool/doc/src/part.xml
index 5904084879..e608d548ea 100644
--- a/lib/reltool/doc/src/part.xml
+++ b/lib/reltool/doc/src/part.xml
@@ -31,7 +31,7 @@
<rev>%VSN%</rev>
</header>
<description>
- <p><c>Reltool</c> is a release management tool. It analyses a given
+ <p>Reltool is a release management tool. It analyses a given
Erlang/OTP installation and determines various dependencies
between applications. The <c>graphical</c> frontend depicts the
dependencies and enables interactive customization of a
diff --git a/lib/reltool/doc/src/ref_man.xml b/lib/reltool/doc/src/ref_man.xml
index 38f270b79a..1684f075ff 100644
--- a/lib/reltool/doc/src/ref_man.xml
+++ b/lib/reltool/doc/src/ref_man.xml
@@ -31,7 +31,7 @@
<rev>%VSN%</rev>
</header>
<description>
- <p><c>Reltool</c> is a release management tool. It analyses a given
+ <p>Reltool is a release management tool. It analyses a given
Erlang/OTP installation and determines various dependencies
between applications. The <c>graphical</c> frontend depicts the
dependencies and enables interactive customization of a
diff --git a/lib/reltool/doc/src/reltool.xml b/lib/reltool/doc/src/reltool.xml
index f4effc3f2e..5bfbee966b 100644
--- a/lib/reltool/doc/src/reltool.xml
+++ b/lib/reltool/doc/src/reltool.xml
@@ -47,7 +47,7 @@
<p>The tool uses an installed Erlang/OTP system as input.
<c>root_dir</c> is the root directory of the analysed system and
- it defaults to the system executing <c>reltool</c>. Applications
+ it defaults to the system executing Reltool. Applications
may also be located outside <c>root_dir</c>. <c>lib_dirs</c>
defines library directories where additional applications
may reside and it defaults to the directories
@@ -56,7 +56,7 @@
<p>An application directory <c>AppDir</c> under a library
directory is recognized by the existence of an <c>AppDir/ebin</c>
- directory. If this does not exist, <c>reltool</c> will not
+ directory. If this does not exist, Reltool will not
consider <c>AppDir</c> at all when looking for applications.</p>
<p>It is recommended that application directories are named as the
@@ -81,14 +81,14 @@
<tag><c>config</c></tag>
<item>
<p>This is the main option and it controls the configuration
- of <c>reltool</c>. It can either be a <c>sys</c> tuple or
+ of Reltool. It can either be a <c>sys</c> tuple or
a name of a <c>file</c> containing a sys tuple.</p>
</item>
<tag><c>trap_exit</c></tag>
<item>
<p>This option controls the error handling behavior of
- <c>reltool</c>. By default the window processes traps
+ Reltool. By default the window processes traps
exit, but this behavior can altered by setting
<c>trap_exit</c> to <c>false</c>.</p>
</item>
@@ -248,7 +248,7 @@
<p>When starting this release, three things must be specified:</p>
<taglist>
- <tag><b>Which <c>releases</c> directory to use</b></tag>
+ <tag><em>Which <c>releases</c> directory to use</em></tag>
<item>Tell the release handler to use the <c>releases</c>
directory in our target structure instead of
<c>$OTP_ROOT/releases</c>. This is done by setting the SASL
@@ -257,7 +257,7 @@
&lt;target-dir&gt;/releases</c>) or in
<c>sys.config</c>.</item>
- <tag><b>Which boot file to use</b></tag>
+ <tag><em>Which boot file to use</em></tag>
<item>The default boot file is <c>$OTP_ROOT/bin/start</c>,
but in this case we need to specify a boot file from our
target structure, typically
@@ -265,7 +265,7 @@
is done with the <c>-boot</c> command line option to
<c>erl</c></item>
- <tag><b>The location of our applications</b></tag>
+ <tag><em>The location of our applications</em></tag>
<item>The generated .script (and .boot) file uses the
environment variable <c>$RELTOOL_EXT_LIB</c> as prefix for
the paths to all applications. The <c>-boot_var</c> option
@@ -275,8 +275,8 @@
</taglist>
<p>Example:</p>
- <p><code>erl -sasl releases_dir \"mytarget/releases\" -boot mytarget/releases/1.0/myrel\
- -boot_var RELTOOL_EXT_LIB mytarget/lib</code></p>
+ <code>erl -sasl releases_dir \"mytarget/releases\" -boot mytarget/releases/1.0/myrel\
+ -boot_var RELTOOL_EXT_LIB mytarget/lib</code>
</item>
<tag><c>incl_sys_filters</c></tag>
diff --git a/lib/reltool/doc/src/reltool_intro.xml b/lib/reltool/doc/src/reltool_intro.xml
index 8e232b8838..2980ad7977 100644
--- a/lib/reltool/doc/src/reltool_intro.xml
+++ b/lib/reltool/doc/src/reltool_intro.xml
@@ -34,7 +34,7 @@
<rev>%VSN%</rev>
<file>reltool_intro.xml</file>
</header>
- <p><c>Reltool</c> is a release management tool. It analyses a given
+ <p>Reltool is a release management tool. It analyses a given
Erlang/OTP installation and determines various dependencies between
applications. The <c>graphical</c> frontend depicts the dependencies and
enables interactive customization of a target system. The backend provides a
@@ -82,7 +82,7 @@
and about the Erlang/OTP development system:</p>
<list type="bulleted">
<item>
- <p>the Reference Manual of <c>Reltool</c></p>
+ <p>the Reference Manual of Reltool</p>
</item>
<item>
<p>the Erlang/OTP <c>System Principles</c></p>
diff --git a/lib/reltool/src/reltool.hrl b/lib/reltool/src/reltool.hrl
index 9ac22b9450..89b5f3a997 100644
--- a/lib/reltool/src/reltool.hrl
+++ b/lib/reltool/src/reltool.hrl
@@ -154,19 +154,19 @@
-record(app_info,
{
- description = "" :: string(),
- id = "" :: string(),
- vsn = "" :: app_vsn(),
- modules = [] :: [mod_name()],
- maxP = infinity :: integer() | infinity,
- maxT = infinity :: integer() | infinity,
- registered = [] :: [atom()],
- incl_apps = [] :: [app_name()],
- applications = [] :: [app_name()],
- env = [] :: [{atom(), term()}],
- mod = undefined :: {mod_name(), [term()]} | undefined,
- start_phases = undefined :: [{atom(), term()}] | undefined,
- runtime_dependencies = [] :: [string()]
+ description = "" :: '_' | string(),
+ id = "" :: '_' | string(),
+ vsn = "" :: '_' | app_vsn(),
+ modules = [] :: '_' | [mod_name()],
+ maxP = infinity :: '_' | integer() | infinity,
+ maxT = infinity :: '_' | integer() | infinity,
+ registered = [] :: '_' | [atom()],
+ incl_apps = [] :: '_' | '$3' | [app_name()],
+ applications = [] :: '_' | '$2' | [app_name()],
+ env = [] :: '_' | [{atom(), term()}],
+ mod = undefined :: '_' | {mod_name(), [term()]} | undefined,
+ start_phases = undefined :: '_' | [{atom(), term()}] | undefined,
+ runtime_dependencies = [] :: '_' | [string()]
}).
-record(regexp, {source, compiled}).
diff --git a/lib/reltool/src/reltool_server.erl b/lib/reltool/src/reltool_server.erl
index 21a4485f94..89e90670cf 100644
--- a/lib/reltool/src/reltool_server.erl
+++ b/lib/reltool/src/reltool_server.erl
@@ -530,9 +530,14 @@ analyse(#state{sys=Sys} = S, Apps, Status) ->
%% Write all #app to app_tab and all #mod to mod_tab.
Status2 = apps_init_is_included(S, Apps, RelApps, Status),
+ %% For each application that is not (directly or indirectly) part
+ %% of a release, but still has #app.is_included==true, propagate
+ %% is_included to the dependencies specified in the .app files.
+ app_propagate_is_included(S),
+
%% For each module that has #mod.is_included==true, propagate
%% is_included to the modules it uses.
- propagate_is_included(S),
+ mod_propagate_is_included(S),
%% Insert reverse dependencies - i.e. for each
%% #mod{name=Mod, uses_mods=[UsedMod]},
@@ -565,31 +570,34 @@ apps_in_rels(Rels, Apps) ->
apps_in_rel(#rel{name = RelName, rel_apps = RelApps}, Apps) ->
Mandatory = [{RelName, kernel}, {RelName, stdlib}],
- Other =
+ Explicit0 = [{RelName, AppName} || #rel_app{name=AppName} <- RelApps],
+ Explicit = Mandatory ++ Explicit0,
+ Deps =
[{RelName, AppName} ||
RA <- RelApps,
- AppName <- [RA#rel_app.name |
+ AppName <-
+ case lists:keyfind(RA#rel_app.name,
+ #app.name,
+ Apps) of
+ App=#app{info = #app_info{applications = AA}} ->
%% Included applications in rel shall overwrite included
%% applications in .app. I.e. included applications in
%% .app shall only be used if it is not defined in rel.
- case RA#rel_app.incl_apps of
- undefined ->
- case lists:keyfind(RA#rel_app.name,
- #app.name,
- Apps) of
- #app{info = #app_info{incl_apps = IA}} ->
- IA;
- false ->
- reltool_utils:throw_error(
- "Release ~tp uses non existing "
- "application ~w",
- [RelName,RA#rel_app.name])
- end;
- IA ->
- IA
- end],
- not lists:keymember(AppName, 2, Mandatory)],
- more_apps_in_rels(Mandatory ++ Other, Apps, []).
+ IA = case RA#rel_app.incl_apps of
+ undefined ->
+ (App#app.info)#app_info.incl_apps;
+ RelIA ->
+ RelIA
+ end,
+ AA ++ IA;
+ false ->
+ reltool_utils:throw_error(
+ "Release ~tp uses non existing "
+ "application ~w",
+ [RelName,RA#rel_app.name])
+ end,
+ not lists:keymember(AppName, 2, Explicit)],
+ more_apps_in_rels(Deps, Apps, Explicit).
more_apps_in_rels([{RelName, AppName} = RA | RelApps], Apps, Acc) ->
case lists:member(RA, Acc) of
@@ -597,8 +605,8 @@ more_apps_in_rels([{RelName, AppName} = RA | RelApps], Apps, Acc) ->
more_apps_in_rels(RelApps, Apps, Acc);
false ->
case lists:keyfind(AppName, #app.name, Apps) of
- #app{info = #app_info{applications = InfoApps}} ->
- Extra = [{RelName, N} || N <- InfoApps],
+ #app{info = #app_info{applications = AA, incl_apps=IA}} ->
+ Extra = [{RelName, N} || N <- AA++IA],
Acc2 = more_apps_in_rels(Extra, Apps, [RA | Acc]),
more_apps_in_rels(RelApps, Apps, Acc2);
false ->
@@ -610,7 +618,6 @@ more_apps_in_rels([{RelName, AppName} = RA | RelApps], Apps, Acc) ->
more_apps_in_rels([], _Apps, Acc) ->
Acc.
-
apps_init_is_included(S, Apps, RelApps, Status) ->
lists:foldl(fun(App, AccStatus) ->
app_init_is_included(S, App, RelApps, AccStatus)
@@ -745,6 +752,100 @@ false_to_undefined(Bool) ->
_ -> Bool
end.
+get_no_rel_apps_and_dependencies(S) ->
+ ets:select(S#state.app_tab, [{#app{name='$1',
+ is_included=true,
+ info=#app_info{applications='$2',
+ incl_apps='$3',
+ _='_'},
+ rels=[],
+ _='_'},
+ [],
+ [{{'$1','$2','$3'}}]}]).
+
+app_propagate_is_included(S) ->
+ lists:foreach(
+ fun({AppName,DepNames1,DepNames2}) ->
+ app_mark_is_included(S,AppName,DepNames1++DepNames2)
+ end,
+ get_no_rel_apps_and_dependencies(S)).
+
+app_mark_is_included(#state{app_tab=AppTab, mod_tab=ModTab, sys=Sys}=S,UsedByName,[AppName|AppNames]) ->
+ case ets:lookup(AppTab, AppName) of
+ [A] ->
+ case A#app.is_included of
+ undefined ->
+ %% Not yet marked => mark and propagate
+ A2 =
+ case A#app.incl_cond of
+ include ->
+ A#app{is_pre_included = true,
+ is_included = true};
+ exclude ->
+ A#app{is_pre_included = false,
+ is_included = false};
+ AppInclCond when AppInclCond==undefined;
+ AppInclCond==derived ->
+ A#app{is_included = true}
+ end,
+ ets:insert(AppTab, A2),
+
+ ModCond =
+ case A#app.mod_cond of
+ undefined -> Sys#sys.mod_cond;
+ _ -> A#app.mod_cond
+ end,
+ Filter =
+ fun(M) ->
+ case ModCond of
+ all -> true;
+ app -> M#mod.is_app_mod;
+ ebin -> M#mod.is_ebin_mod;
+ derived -> false;
+ none -> false
+ end
+ end,
+ Mods = lists:filter(Filter, A#app.mods),
+ %% Mark the modules of this app, but no need to go
+ %% recursive on modules since this is done in
+ %% mod_mark_is_included.
+ [case M#mod.is_included of
+ undefined ->
+ M2 =
+ case M#mod.incl_cond of
+ include ->
+ M#mod{is_pre_included = true,
+ is_included = true};
+ exclude ->
+ M#mod{is_pre_included = false,
+ is_included = false};
+ ModInclCond when ModInclCond==undefined;
+ ModInclCond==derived ->
+ M#mod{is_included = true}
+ end,
+ ets:insert(ModTab, M2);
+ _ ->
+ ok
+ end || M <- Mods],
+
+ %% Go recursive on dependencies
+ #app{info=#app_info{applications=DepNames1,
+ incl_apps=DepNames2}} = A,
+ app_mark_is_included(S,AppName,DepNames1++DepNames2);
+ _ ->
+ %% Already marked
+ ok
+ end;
+ [] ->
+ %% Missing app
+ reltool_utils:throw_error(
+ "Application ~tp uses non existing application ~w",
+ [UsedByName,AppName])
+ end,
+ app_mark_is_included(S, UsedByName, AppNames);
+app_mark_is_included(_S, _UsedByName, []) ->
+ ok.
+
%% Return the list for {ModName, UsesModNames} for all modules where
%% #mod.is_included==true.
get_all_mods_and_dependencies(S) ->
@@ -755,7 +856,7 @@ get_all_mods_and_dependencies(S) ->
[],
[{{'$1','$2'}}]}]).
-propagate_is_included(S) ->
+mod_propagate_is_included(S) ->
case lists:flatmap(
fun({ModName,UsesModNames}) ->
mod_mark_is_included(S,ModName,UsesModNames,[])
diff --git a/lib/reltool/test/reltool_server_SUITE.erl b/lib/reltool/test/reltool_server_SUITE.erl
index e9bd46fb27..e8dfea94da 100644
--- a/lib/reltool/test/reltool_server_SUITE.erl
+++ b/lib/reltool/test/reltool_server_SUITE.erl
@@ -142,6 +142,7 @@ all() ->
save_config,
dependencies,
mod_incl_cond_derived,
+ dep_in_app_not_xref,
use_selected_vsn,
use_selected_vsn_relative_path,
non_standard_vsn_id,
@@ -408,7 +409,6 @@ create_release_sort(Config) ->
{app,tools,[{mod_cond,app},{incl_cond,include}]}
]},
%% Generate release
-
?msym({ok, {release, {RelName1, RelVsn},
{erts, _},
[{kernel, _},
@@ -2304,6 +2304,7 @@ dependencies(Config) ->
ok.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Test that incl_cond on mod level overwrites mod_cond on app level
%% Uses same test applications as dependencies/1 above
mod_incl_cond_derived(Config) ->
@@ -2346,6 +2347,40 @@ mod_incl_cond_derived(Config) ->
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% ERL-167, OTP-11993: For applications that are not included in a
+%% release spec ('rel'), dependencies in the .app files are not
+%% considered - only those found with xref.
+dep_in_app_not_xref(Config) ->
+ RelName = "Just testing...",
+ RelVsn = "1.0",
+ Sys =
+ {sys,
+ [
+ {lib_dirs,[filename:join(datadir(Config),"dep_in_app_not_xref")]},
+ {incl_cond,exclude},
+ {incl_archive_filters,[]},
+ {erts,[{incl_cond,exclude}]},
+ {boot_rel, RelName},
+ {rel, RelName, RelVsn, [kernel, stdlib]},
+ {app,kernel,[{incl_cond,include}]},
+ {app,stdlib,[{incl_cond,include}]},
+ {app,x,[{incl_cond,include}]},
+ {app,y,[{incl_cond,derived}]},
+ {app,z,[{incl_cond,derived}]}
+ ]},
+
+ TargetDir = filename:join([?WORK_DIR, "target_dep_in_app_not_xref"]),
+ ?m(ok, reltool_utils:recursive_delete(TargetDir)),
+ ?m(ok, file:make_dir(TargetDir)),
+ ?log("SPEC: ~p\n", [reltool:get_target_spec([{config, Sys}])]),
+ ok = ?m(ok, reltool:create_target([{config, Sys}], TargetDir)),
+ ?log("~p~n",[file:list_dir(filename:join([TargetDir,"lib"]))]),
+
+ ?m(true, filelib:is_dir(filename:join([TargetDir,"lib","y-1.0"]))),
+ ?m(true, filelib:is_dir(filename:join([TargetDir,"lib","z-1.0"]))),
+ ok.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
use_selected_vsn(Config) ->
LibDir1 = filename:join(datadir(Config),"use_selected_vsn"),
B1Dir = filename:join(LibDir1,"b-1.0"),
diff --git a/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/x-1.0/ebin/x.app b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/x-1.0/ebin/x.app
new file mode 100644
index 0000000000..fe922e3a41
--- /dev/null
+++ b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/x-1.0/ebin/x.app
@@ -0,0 +1,7 @@
+% -*-erlang-*-
+{application, x,
+ [{description, "Main application in reltool dependency test"},
+ {vsn, "1.0"},
+ {modules, [x1]},
+ {registered, []},
+ {applications, [kernel, stdlib, y]}]}.
diff --git a/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/x-1.0/src/x1.erl b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/x-1.0/src/x1.erl
new file mode 100644
index 0000000000..bf1e7f9279
--- /dev/null
+++ b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/x-1.0/src/x1.erl
@@ -0,0 +1,5 @@
+-module(x1).
+-compile(export_all).
+
+f() ->
+ ok.
diff --git a/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/y-1.0/ebin/y.app b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/y-1.0/ebin/y.app
new file mode 100644
index 0000000000..a21cfe6c21
--- /dev/null
+++ b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/y-1.0/ebin/y.app
@@ -0,0 +1,8 @@
+% -*-erlang-*-
+{application, y,
+ [{description, "Library application in reltool dependency test"},
+ {vsn, "1.0"},
+ {modules, [y1]},
+ {registered, []},
+ {applications, [kernel, stdlib]},
+ {included_applications, [z]}]}.
diff --git a/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/y-1.0/src/y1.erl b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/y-1.0/src/y1.erl
new file mode 100644
index 0000000000..902a7e21f3
--- /dev/null
+++ b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/y-1.0/src/y1.erl
@@ -0,0 +1,5 @@
+-module(y1).
+-compile(export_all).
+
+f() ->
+ ok.
diff --git a/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/z-1.0/ebin/z.app b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/z-1.0/ebin/z.app
new file mode 100644
index 0000000000..437a0968e9
--- /dev/null
+++ b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/z-1.0/ebin/z.app
@@ -0,0 +1,7 @@
+% -*-erlang-*-
+{application, z,
+ [{description, "Library application in reltool dependency test"},
+ {vsn, "1.0"},
+ {modules, [z1]},
+ {registered, []},
+ {applications, [kernel, stdlib]}]}.
diff --git a/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/z-1.0/src/z1.erl b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/z-1.0/src/z1.erl
new file mode 100644
index 0000000000..97ef90b87f
--- /dev/null
+++ b/lib/reltool/test/reltool_server_SUITE_data/dep_in_app_not_xref/z-1.0/src/z1.erl
@@ -0,0 +1,5 @@
+-module(z1).
+-compile(export_all).
+
+f() ->
+ ok.
diff --git a/lib/runtime_tools/c_src/dyntrace.c b/lib/runtime_tools/c_src/dyntrace.c
index 0178d95efb..3d2de9c21c 100644
--- a/lib/runtime_tools/c_src/dyntrace.c
+++ b/lib/runtime_tools/c_src/dyntrace.c
@@ -96,14 +96,14 @@ static ErlNifFunc nif_funcs[] = {
{"user_trace_i4s4", 9, user_trace_i4s4},
{"user_trace_n", 10, user_trace_n},
#ifdef HAVE_USE_LTTNG
- {"trace_procs", 6, trace_procs},
- {"trace_ports", 6, trace_ports},
- {"trace_running_procs", 6, trace_running_procs},
- {"trace_running_ports", 6, trace_running_ports},
- {"trace_call", 6, trace_call},
- {"trace_send", 6, trace_send},
- {"trace_receive", 6, trace_receive},
- {"trace_garbage_collection", 6, trace_garbage_collection},
+ {"trace_procs", 5, trace_procs},
+ {"trace_ports", 5, trace_ports},
+ {"trace_running_procs", 5, trace_running_procs},
+ {"trace_running_ports", 5, trace_running_ports},
+ {"trace_call", 5, trace_call},
+ {"trace_send", 5, trace_send},
+ {"trace_receive", 5, trace_receive},
+ {"trace_garbage_collection", 5, trace_garbage_collection},
{"enabled_procs", 3, enabled_procs},
{"enabled_ports", 3, enabled_ports},
{"enabled_running_procs", 3, enabled_running_procs},
@@ -114,8 +114,7 @@ static ErlNifFunc nif_funcs[] = {
{"enabled_garbage_collection", 3, enabled_garbage_collection},
#endif
{"enabled", 3, enabled},
- {"trace", 5, trace},
- {"trace", 6, trace}
+ {"trace", 5, trace}
};
ERL_NIF_INIT(dyntrace, nif_funcs, load, NULL, NULL, NULL)
@@ -123,6 +122,7 @@ ERL_NIF_INIT(dyntrace, nif_funcs, load, NULL, NULL, NULL)
static ERL_NIF_TERM atom_true;
static ERL_NIF_TERM atom_false;
static ERL_NIF_TERM atom_error;
+static ERL_NIF_TERM atom_extra;
static ERL_NIF_TERM atom_not_available;
static ERL_NIF_TERM atom_badarg;
static ERL_NIF_TERM atom_ok;
@@ -187,6 +187,7 @@ static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)
atom_true = enif_make_atom(env,"true");
atom_false = enif_make_atom(env,"false");
atom_error = enif_make_atom(env,"error");
+ atom_extra = enif_make_atom(env,"extra");
atom_not_available = enif_make_atom(env,"not_available");
atom_badarg = enif_make_atom(env,"badarg");
atom_ok = enif_make_atom(env,"ok");
@@ -325,7 +326,7 @@ static ERL_NIF_TERM trace_garbage_collection(ErlNifEnv* env, int argc, const ERL
int arity;
unsigned long ohbsz, nhbsz, size;
- ASSERT(argc == 6);
+ ASSERT(argc == 5);
/* Assume gc info order does not change */
gci = argv[3];
@@ -428,12 +429,14 @@ static ERL_NIF_TERM trace_call(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv
}
} else if (argv[0] == atom_exception_from) {
const ERL_NIF_TERM* tuple;
+ ERL_NIF_TERM extra;
int arity;
lttng_decl_mfabuf(mfa);
char class[LTTNG_BUFFER_SZ];
- enif_get_tuple(env, argv[4], &arity, &tuple);
- erts_snprintf(class, LTTNG_BUFFER_SZ, "%T", tuple[0]);
+ enif_get_map_value(env, argv[4], atom_extra, &extra);
+ enif_get_tuple(env, extra, &arity, &tuple);
+ enif_snprintf(class, LTTNG_BUFFER_SZ, "%T", tuple[0]);
if (enif_get_tuple(env, argv[3], &arity, &tuple)) {
enif_get_uint(env, tuple[2], &len);
@@ -457,23 +460,26 @@ static ERL_NIF_TERM enabled_send(ErlNifEnv *env, int argc, const ERL_NIF_TERM ar
static ERL_NIF_TERM trace_send(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
+ ERL_NIF_TERM extra;
lttng_decl_procbuf(pid);
lttng_pid_to_str(argv[2], pid);
+ enif_get_map_value(env, argv[4], atom_extra, &extra);
+
if (argv[0] == atom_send) {
lttng_decl_procbuf(to);
char msg[LTTNG_BUFFER_SZ];
- lttng_pid_to_str(argv[4], to);
- erts_snprintf(msg, LTTNG_BUFFER_SZ, "%T", argv[3]);
+ lttng_pid_to_str(extra, to);
+ enif_snprintf(msg, LTTNG_BUFFER_SZ, "%T", argv[3]);
LTTNG3(message_send, pid, to, msg);
} else if (argv[0] == atom_send_to_non_existing_process) {
lttng_decl_procbuf(to);
char msg[LTTNG_BUFFER_SZ];
- lttng_pid_to_str(argv[4], to);
- erts_snprintf(msg, LTTNG_BUFFER_SZ, "%T", argv[3]);
+ lttng_pid_to_str(extra, to);
+ enif_snprintf(msg, LTTNG_BUFFER_SZ, "%T", argv[3]);
/* mark it as non existing ? */
LTTNG3(message_send, pid, to, msg);
@@ -496,7 +502,7 @@ static ERL_NIF_TERM trace_receive(ErlNifEnv* env, int argc, const ERL_NIF_TERM a
char msg[LTTNG_BUFFER_SZ];
lttng_pid_to_str(argv[2], pid);
- erts_snprintf(msg, LTTNG_BUFFER_SZ, "%T", argv[3]);
+ enif_snprintf(msg, LTTNG_BUFFER_SZ, "%T", argv[3]);
LTTNG2(message_receive, pid, msg);
}
@@ -537,6 +543,7 @@ static ERL_NIF_TERM trace_procs(ErlNifEnv* env, int argc, const ERL_NIF_TERM arg
/* spawn */
if (argv[0] == atom_spawn) {
+ ERL_NIF_TERM extra;
char undef[] = "undefined";
const ERL_NIF_TERM* tuple;
int arity;
@@ -545,7 +552,9 @@ static ERL_NIF_TERM trace_procs(ErlNifEnv* env, int argc, const ERL_NIF_TERM arg
lttng_pid_to_str(argv[3], to);
- if (enif_get_tuple(env, argv[4], &arity, &tuple)) {
+ enif_get_map_value(env, argv[4], atom_extra, &extra);
+
+ if (enif_get_tuple(env, extra, &arity, &tuple)) {
if (enif_is_list(env, tuple[2])) {
enif_get_list_length(env, tuple[2], &len);
} else {
@@ -560,11 +569,11 @@ static ERL_NIF_TERM trace_procs(ErlNifEnv* env, int argc, const ERL_NIF_TERM arg
/* register */
} else if (argv[0] == atom_register) {
char name[LTTNG_BUFFER_SZ];
- erts_snprintf(name, LTTNG_BUFFER_SZ, "%T", argv[3]);
+ enif_snprintf(name, LTTNG_BUFFER_SZ, "%T", argv[3]);
LTTNG3(process_register, pid, name, "register");
} else if (argv[0] == atom_unregister) {
char name[LTTNG_BUFFER_SZ];
- erts_snprintf(name, LTTNG_BUFFER_SZ, "%T", argv[3]);
+ enif_snprintf(name, LTTNG_BUFFER_SZ, "%T", argv[3]);
LTTNG3(process_register, pid, name, "unregister");
/* link */
} else if (argv[0] == atom_link) {
@@ -582,7 +591,7 @@ static ERL_NIF_TERM trace_procs(ErlNifEnv* env, int argc, const ERL_NIF_TERM arg
/* exit */
} else if (argv[0] == atom_exit) {
char reason[LTTNG_BUFFER_SZ];
- erts_snprintf(reason, LTTNG_BUFFER_SZ, "%T", argv[3]);
+ enif_snprintf(reason, LTTNG_BUFFER_SZ, "%T", argv[3]);
LTTNG2(process_exit, pid, reason);
}
return atom_ok;
@@ -618,15 +627,17 @@ static ERL_NIF_TERM trace_ports(ErlNifEnv* env, int argc, const ERL_NIF_TERM arg
/* open and closed */
if (argv[0] == atom_open) {
+ ERL_NIF_TERM extra;
char driver[LTTNG_BUFFER_SZ];
lttng_decl_procbuf(pid);
lttng_pid_to_str(argv[3], pid);
+ enif_get_map_value(env, argv[4], atom_extra, &extra);
- erts_snprintf(driver, LTTNG_BUFFER_SZ, "%T", argv[4]);
+ enif_snprintf(driver, LTTNG_BUFFER_SZ, "%T", extra);
LTTNG3(port_open, pid, driver, port);
} else if (argv[0] == atom_closed) {
char reason[LTTNG_BUFFER_SZ];
- erts_snprintf(reason, LTTNG_BUFFER_SZ, "%T", argv[3]);
+ enif_snprintf(reason, LTTNG_BUFFER_SZ, "%T", argv[3]);
LTTNG2(port_exit, port, reason);
/* link */
@@ -705,7 +716,7 @@ static ERL_NIF_TERM trace_running_ports(ErlNifEnv* env, int argc, const ERL_NIF_
lttng_decl_mfabuf(where);
lttng_portid_to_str(argv[2], pid);
- erts_snprintf(where, LTTNG_BUFFER_SZ, "%T", argv[3]);
+ enif_snprintf(where, LTTNG_BUFFER_SZ, "%T", argv[3]);
/* running ports */
if (argv[0] == atom_in) {
diff --git a/lib/runtime_tools/c_src/dyntrace_lttng.h b/lib/runtime_tools/c_src/dyntrace_lttng.h
index 3550a1cab5..5e838892d6 100644
--- a/lib/runtime_tools/c_src/dyntrace_lttng.h
+++ b/lib/runtime_tools/c_src/dyntrace_lttng.h
@@ -19,7 +19,7 @@
*/
#undef TRACEPOINT_PROVIDER
-#define TRACEPOINT_PROVIDER com_ericsson_dyntrace
+#define TRACEPOINT_PROVIDER org_erlang_dyntrace
#if !defined(DYNTRACE_LTTNG_H) || defined(TRACEPOINT_HEADER_MULTI_READ)
#define DYNTRACE_LTTNG_H
@@ -27,22 +27,22 @@
#include <lttng/tracepoint.h>
#define LTTNG1(Name, Arg1) \
- tracepoint(com_ericsson_dyntrace, Name, (Arg1))
+ tracepoint(org_erlang_dyntrace, Name, (Arg1))
#define LTTNG2(Name, Arg1, Arg2) \
- tracepoint(com_ericsson_dyntrace, Name, (Arg1), (Arg2))
+ tracepoint(org_erlang_dyntrace, Name, (Arg1), (Arg2))
#define LTTNG3(Name, Arg1, Arg2, Arg3) \
- tracepoint(com_ericsson_dyntrace, Name, (Arg1), (Arg2), (Arg3))
+ tracepoint(org_erlang_dyntrace, Name, (Arg1), (Arg2), (Arg3))
#define LTTNG4(Name, Arg1, Arg2, Arg3, Arg4) \
- tracepoint(com_ericsson_dyntrace, Name, (Arg1), (Arg2), (Arg3), (Arg4))
+ tracepoint(org_erlang_dyntrace, Name, (Arg1), (Arg2), (Arg3), (Arg4))
#define LTTNG5(Name, Arg1, Arg2, Arg3, Arg4, Arg5) \
- tracepoint(com_ericsson_dyntrace, Name, (Arg1), (Arg2), (Arg3), (Arg4), (Arg5))
+ tracepoint(org_erlang_dyntrace, Name, (Arg1), (Arg2), (Arg3), (Arg4), (Arg5))
#define LTTNG_ENABLED(Name) \
- tracepoint_enabled(com_ericsson_dyntrace, Name)
+ tracepoint_enabled(org_erlang_dyntrace, Name)
#define LTTNG_BUFFER_SZ (256)
#define LTTNG_PROC_BUFFER_SZ (16)
@@ -59,10 +59,10 @@
char Name[LTTNG_MFA_BUFFER_SZ]
#define lttng_pid_to_str(pid, name) \
- erts_snprintf(name, LTTNG_PROC_BUFFER_SZ, "%T", (pid))
+ enif_snprintf(name, LTTNG_PROC_BUFFER_SZ, "%T", (pid))
#define lttng_portid_to_str(pid, name) \
- erts_snprintf(name, LTTNG_PORT_BUFFER_SZ, "%T", (pid))
+ enif_snprintf(name, LTTNG_PORT_BUFFER_SZ, "%T", (pid))
#define lttng_proc_to_str(p, name) \
lttng_pid_to_str(((p) ? (p)->common.id : ERTS_INVALID_PID), name)
@@ -71,12 +71,12 @@
lttng_portid_to_str(((p) ? (p)->common.id : ERTS_INVALID_PORT), name)
#define lttng_mfa_to_str(m,f,a, Name) \
- erts_snprintf(Name, LTTNG_MFA_BUFFER_SZ, "%T:%T/%lu", (Eterm)(m), (Eterm)(f), (Uint)(a))
+ enif_snprintf(Name, LTTNG_MFA_BUFFER_SZ, "%T:%T/%lu", (Eterm)(m), (Eterm)(f), (Uint)(a))
/* Process scheduling */
TRACEPOINT_EVENT(
- com_ericsson_dyntrace,
+ org_erlang_dyntrace,
process_spawn,
TP_ARGS(
char*, p,
@@ -91,7 +91,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_dyntrace,
+ org_erlang_dyntrace,
process_link,
TP_ARGS(
char*, from,
@@ -106,7 +106,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_dyntrace,
+ org_erlang_dyntrace,
process_exit,
TP_ARGS(
char*, p,
@@ -119,7 +119,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_dyntrace,
+ org_erlang_dyntrace,
process_register,
TP_ARGS(
char*, pid,
@@ -136,7 +136,7 @@ TRACEPOINT_EVENT(
/* Scheduled */
TRACEPOINT_EVENT(
- com_ericsson_dyntrace,
+ org_erlang_dyntrace,
process_scheduled,
TP_ARGS(
char*, p,
@@ -154,7 +154,7 @@ TRACEPOINT_EVENT(
TRACEPOINT_EVENT(
- com_ericsson_dyntrace,
+ org_erlang_dyntrace,
port_open,
TP_ARGS(
char*, pid,
@@ -169,7 +169,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_dyntrace,
+ org_erlang_dyntrace,
port_exit,
TP_ARGS(
char*, port,
@@ -182,7 +182,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_dyntrace,
+ org_erlang_dyntrace,
port_link,
TP_ARGS(
char*, from,
@@ -197,7 +197,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_dyntrace,
+ org_erlang_dyntrace,
port_scheduled,
TP_ARGS(
char*, p,
@@ -214,7 +214,7 @@ TRACEPOINT_EVENT(
/* Call tracing */
TRACEPOINT_EVENT(
- com_ericsson_dyntrace,
+ org_erlang_dyntrace,
function_call,
TP_ARGS(
char*, pid,
@@ -229,7 +229,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_dyntrace,
+ org_erlang_dyntrace,
function_return,
TP_ARGS(
char*, pid,
@@ -244,7 +244,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_dyntrace,
+ org_erlang_dyntrace,
function_exception,
TP_ARGS(
char*, pid,
@@ -261,7 +261,7 @@ TRACEPOINT_EVENT(
/* Process messages */
TRACEPOINT_EVENT(
- com_ericsson_dyntrace,
+ org_erlang_dyntrace,
message_send,
TP_ARGS(
char*, sender,
@@ -276,7 +276,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_dyntrace,
+ org_erlang_dyntrace,
message_receive,
TP_ARGS(
char*, receiver,
@@ -291,7 +291,7 @@ TRACEPOINT_EVENT(
/* Process Memory */
TRACEPOINT_EVENT(
- com_ericsson_dyntrace,
+ org_erlang_dyntrace,
gc_minor_start,
TP_ARGS(
char*, p,
@@ -308,7 +308,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_dyntrace,
+ org_erlang_dyntrace,
gc_minor_end,
TP_ARGS(
char*, p,
@@ -325,7 +325,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_dyntrace,
+ org_erlang_dyntrace,
gc_major_start,
TP_ARGS(
char*, p,
@@ -342,7 +342,7 @@ TRACEPOINT_EVENT(
)
TRACEPOINT_EVENT(
- com_ericsson_dyntrace,
+ org_erlang_dyntrace,
gc_major_end,
TP_ARGS(
char*, p,
diff --git a/lib/runtime_tools/c_src/trace_ip_drv.c b/lib/runtime_tools/c_src/trace_ip_drv.c
index c73630f702..195558f958 100644
--- a/lib/runtime_tools/c_src/trace_ip_drv.c
+++ b/lib/runtime_tools/c_src/trace_ip_drv.c
@@ -374,6 +374,7 @@ static void trace_ip_output(ErlDrvData handle, char *buff, ErlDrvSizeT bufflen)
}
return;
}
+ ASSERT(!IS_INVALID_SOCKET(data->fd));
if (data->que[data->questart] != NULL) {
trace_ip_ready_output(handle, sock2event(data->fd));
}
@@ -412,6 +413,7 @@ static void trace_ip_ready_input(ErlDrvData handle, ErlDrvEvent fd)
/*
** Maybe accept, we are a listen port...
*/
+ ASSERT(IS_INVALID_SOCKET(data->fd));
if (!IS_INVALID_SOCKET((client = my_accept(data->listenfd)))) {
data->fd = client;
set_nonblocking(client);
@@ -735,6 +737,7 @@ static void close_client(TraceIpData *data)
{
my_driver_select(data, data->fd, FLAG_WRITE | FLAG_READ, SELECT_CLOSE);
data->flags |= FLAG_LISTEN_PORT;
+ data->fd = INVALID_SOCKET;
if (!(data->flags & FLAG_FILL_ALWAYS)) {
clean_que(data);
}
diff --git a/lib/runtime_tools/doc/src/LTTng.xml b/lib/runtime_tools/doc/src/LTTng.xml
index 4a87133c57..82a4c79379 100644
--- a/lib/runtime_tools/doc/src/LTTng.xml
+++ b/lib/runtime_tools/doc/src/LTTng.xml
@@ -66,7 +66,7 @@ $ make </code>
<section>
<title>Dyntrace Tracepoints</title>
- <p>All tracepoints are in the domain of <c>com_ericsson_dyntrace</c></p>
+ <p>All tracepoints are in the domain of <c>org_erlang_dyntrace</c></p>
<p>All Erlang types are the string equivalent in LTTng.</p>
<p><em>process_spawn</em></p>
@@ -75,8 +75,12 @@ $ make </code>
<item><c>parent : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
<item><c>entry : string</c> :: Code Location. Ex. <c>"lists:sort/1"</c></item>
</list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
<p>Example:</p>
- <p><code type="none">process_spawn: { cpu_id = 3 }, { pid = "&lt;0.131.0&gt;", parent = "&lt;0.130.0&gt;", entry = "erlang:apply/2" }</code></p>
+ <code type="none">process_spawn: { cpu_id = 3 }, { pid = "&lt;0.131.0&gt;", parent = "&lt;0.130.0&gt;", entry = "erlang:apply/2" }</code>
<p><em>process_link</em></p>
<list type="bulleted">
@@ -84,8 +88,12 @@ $ make </code>
<item><c>from : string</c> :: Process ID or Port ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
<item><c>type : string</c> :: <c>"link" | "unlink"</c></item>
</list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
<p>Example:</p>
- <p><code type="none">process_link: { cpu_id = 3 }, { from = "&lt;0.130.0&gt;", to = "&lt;0.131.0&gt;", type = "link" }</code></p>
+ <code type="none">process_link: { cpu_id = 3 }, { from = "&lt;0.130.0&gt;", to = "&lt;0.131.0&gt;", type = "link" }</code>
<p><em>process_exit</em></p>
@@ -93,8 +101,12 @@ $ make </code>
<item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
<item><c>reason : string</c> :: Exit reason. Ex. <c>"normal"</c></item>
</list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>procs</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
<p>Example:</p>
- <p><code type="none">process_exit: { cpu_id = 3 }, { pid = "&lt;0.130.0&gt;", reason = "normal" }</code></p>
+ <code type="none">process_exit: { cpu_id = 3 }, { pid = "&lt;0.130.0&gt;", reason = "normal" }</code>
<p><em>process_register</em></p>
<list type="bulleted">
@@ -103,7 +115,7 @@ $ make </code>
<item><c>type : string</c> :: <c>"register" | "unregister"</c></item>
</list>
<p>Example:</p>
- <p><code type="none">process_register: { cpu_id = 0 }, { pid = "&lt;0.128.0&gt;", name = "dyntrace_lttng_SUITE" type = "register" }</code></p>
+ <code type="none">process_register: { cpu_id = 0 }, { pid = "&lt;0.128.0&gt;", name = "dyntrace_lttng_SUITE" type = "register" }</code>
<p><em>process_scheduled</em></p>
<list type="bulleted">
@@ -111,9 +123,12 @@ $ make </code>
<item><c>entry : string</c> :: Code Location. Ex. <c>"lists:sort/1"</c></item>
<item><c>type : string</c> :: <c>"in" | "out" | "in_exiting" | "out_exiting" | "out_exited"</c></item>
</list>
-
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
<p>Example:</p>
- <p><code type="none">process_scheduled: { cpu_id = 0 }, { pid = "&lt;0.136.0&gt;", entry = "erlang:apply/2", type = "in" }</code></p>
+ <code type="none">process_scheduled: { cpu_id = 0 }, { pid = "&lt;0.136.0&gt;", entry = "erlang:apply/2", type = "in" }</code>
<p><em>port_open</em></p>
@@ -122,17 +137,24 @@ $ make </code>
<item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
<item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
</list>
-
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
<p>Example:</p>
- <p><code type="none">port_open: { cpu_id = 5 }, { pid = "&lt;0.131.0&gt;", driver = "'/bin/sh -s unix:cmd'", port = "#Port&lt;0.1887&gt;" }</code></p>
+ <code type="none">port_open: { cpu_id = 5 }, { pid = "&lt;0.131.0&gt;", driver = "'/bin/sh -s unix:cmd'", port = "#Port&lt;0.1887&gt;" }</code>
<p><em>port_exit</em></p>
<list type="bulleted">
<item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
<item><c>reason : string</c> :: Exit reason. Ex. <c>"normal"</c></item>
</list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
<p>Example:</p>
- <p><code type="none">port_exit: { cpu_id = 5 }, { port = "#Port&lt;0.1887&gt;", reason = "normal" }</code></p>
+ <code type="none">port_exit: { cpu_id = 5 }, { port = "#Port&lt;0.1887&gt;", reason = "normal" }</code>
<p><em>port_link</em></p>
<list type="bulleted">
@@ -140,10 +162,18 @@ $ make </code>
<item><c>from : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
<item><c>type : string</c> :: <c>"link" | "unlink"</c></item>
</list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>ports</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
<p>Example:</p>
- <p><code type="none">port_link: { cpu_id = 5 }, { from = "#Port&lt;0.1887&gt;", to = "&lt;0.131.0&gt;", type = "unlink" }</code></p>
+ <code type="none">port_link: { cpu_id = 5 }, { from = "#Port&lt;0.1887&gt;", to = "&lt;0.131.0&gt;", type = "unlink" }</code>
<p><em>port_scheduled</em></p>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
<list type="bulleted">
<item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
<item><c>entry : string</c> :: Callback. Ex. <c>"open"</c></item>
@@ -151,16 +181,23 @@ $ make </code>
</list>
<p>Example:</p>
- <p><code type="none">port_scheduled: { cpu_id = 5 }, { pid = "#Port&lt;0.1905&gt;", entry = "close", type = "out" }</code></p>
-
+ <code type="none">port_scheduled: { cpu_id = 5 }, { pid = "#Port&lt;0.1905&gt;", entry = "close", type = "out" }</code>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>running</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
<p><em>function_call</em></p>
<list type="bulleted">
<item><c>pid : string</c> :: Process ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
<item><c>entry : string</c> :: Code Location. Ex. <c>"lists:sort/1"</c></item>
<item><c>depth : integer</c> :: Stack depth. Ex. <c>0</c></item>
</list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>call</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
<p>Example:</p>
- <p><code type="none">function_call: { cpu_id = 5 }, { pid = "&lt;0.145.0&gt;", entry = "dyntrace_lttng_SUITE:'-t_call/1-fun-1-'/0", depth = 0 }</code></p>
+ <code type="none">function_call: { cpu_id = 5 }, { pid = "&lt;0.145.0&gt;", entry = "dyntrace_lttng_SUITE:'-t_call/1-fun-1-'/0", depth = 0 }</code>
<p><em>function_return</em></p>
<list type="bulleted">
@@ -168,8 +205,12 @@ $ make </code>
<item><c>entry : string</c> :: Code Location. Ex. <c>"lists:sort/1"</c></item>
<item><c>depth : integer</c> :: Stack depth. Ex. <c>0</c></item>
</list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>call</c> or <c>return_to</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
<p>Example:</p>
- <p><code type="none">function_return: { cpu_id = 5 }, { pid = "&lt;0.145.0&gt;", entry = "dyntrace_lttng_SUITE:waiter/0", depth = 0 }</code></p>
+ <code type="none">function_return: { cpu_id = 5 }, { pid = "&lt;0.145.0&gt;", entry = "dyntrace_lttng_SUITE:waiter/0", depth = 0 }</code>
<p><em>function_exception</em></p>
<list type="bulleted">
@@ -177,8 +218,12 @@ $ make </code>
<item><c>entry : string</c> :: Code Location. Ex. <c>"lists:sort/1"</c></item>
<item><c>class : string</c> :: Error reason. Ex. <c>"error"</c></item>
</list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>call</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
<p>Example:</p>
- <p><code type="none">function_exception: { cpu_id = 5 }, { pid = "&lt;0.144.0&gt;", entry = "t:call_exc/1", class = "error" }</code></p>
+ <code type="none">function_exception: { cpu_id = 5 }, { pid = "&lt;0.144.0&gt;", entry = "t:call_exc/1", class = "error" }</code>
<p><em>message_send</em></p>
<list type="bulleted">
@@ -186,16 +231,24 @@ $ make </code>
<item><c>to : string</c> :: Process ID or Port ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
<item><c>message : string</c> :: Message sent. Ex. <c>"{&lt;0.162.0&gt;,ok}"</c></item>
</list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>send</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
<p>Example:</p>
- <p><code type="none">message_send: { cpu_id = 3 }, { from = "#Port&lt;0.1938&gt;", to = "&lt;0.160.0&gt;", message = "{#Port&lt;0.1938&gt;,eof}" }</code></p>
+ <code type="none">message_send: { cpu_id = 3 }, { from = "#Port&lt;0.1938&gt;", to = "&lt;0.160.0&gt;", message = "{#Port&lt;0.1938&gt;,eof}" }</code>
<p><em>message_receive</em></p>
<list type="bulleted">
<item><c>to : string</c> :: Process ID or Port ID. Ex. <c>"&lt;0.131.0&gt;"</c></item>
<item><c>message : string</c> :: Message received. Ex. <c>"{&lt;0.162.0&gt;,ok}"</c></item>
</list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>'receive'</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
<p>Example:</p>
- <p><code type="none">message_receive: { cpu_id = 7 }, { to = "&lt;0.167.0&gt;", message = "{&lt;0.165.0&gt;,ok}" }</code></p>
+ <code type="none">message_receive: { cpu_id = 7 }, { to = "&lt;0.167.0&gt;", message = "{&lt;0.165.0&gt;,ok}" }</code>
<p><em>gc_minor_start</em></p>
<list type="bulleted">
@@ -204,8 +257,12 @@ $ make </code>
<item><c>heap : integer</c> :: Young heap word size. Ex. <c>233</c></item>
<item><c>old_heap : integer</c> :: Old heap word size. Ex. <c>233</c></item>
</list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
<p>Example:</p>
- <p><code type="none">gc_minor_start: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", need = 0, heap = 610, old_heap = 0 }</code></p>
+ <code type="none">gc_minor_start: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", need = 0, heap = 610, old_heap = 0 }</code>
<p><em>gc_minor_end</em></p>
<list type="bulleted">
@@ -214,8 +271,12 @@ $ make </code>
<item><c>heap : integer</c> :: Young heap word size. Ex. <c>233</c></item>
<item><c>old_heap : integer</c> :: Old heap word size. Ex. <c>233</c></item>
</list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
<p>Example:</p>
- <p><code type="none">gc_minor_end: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", reclaimed = 120, heap = 1598, old_heap = 1598 }</code></p>
+ <code type="none">gc_minor_end: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", reclaimed = 120, heap = 1598, old_heap = 1598 }</code>
<p><em>gc_major_start</em></p>
<list type="bulleted">
@@ -224,8 +285,12 @@ $ make </code>
<item><c>heap : integer</c> :: Young heap word size. Ex. <c>233</c></item>
<item><c>old_heap : integer</c> :: Old heap word size. Ex. <c>233</c></item>
</list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
<p>Example:</p>
- <p><code type="none">gc_major_start: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", need = 8, heap = 2586, old_heap = 1598 }</code></p>
+ <code type="none">gc_major_start: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", need = 8, heap = 2586, old_heap = 1598 }</code>
<p><em>gc_major_end</em></p>
<list type="bulleted">
@@ -234,14 +299,18 @@ $ make </code>
<item><c>heap : integer</c> :: Young heap word size. Ex. <c>233</c></item>
<item><c>old_heap : integer</c> :: Old heap word size. Ex. <c>233</c></item>
</list>
+ <p>
+ Available through
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso> with trace flag <c>garbage_collection</c> and <c>{tracer,dyntrace,[]}</c> as tracer module.
+ </p>
<p>Example:</p>
- <p><code type="none">gc_major_end: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", reclaimed = 240, heap = 4185, old_heap = 0 }</code></p>
+ <code type="none">gc_major_end: { cpu_id = 0 }, { pid = "&lt;0.172.0&gt;", reclaimed = 240, heap = 4185, old_heap = 0 }</code>
</section>
<section>
<title>BEAM Tracepoints</title>
- <p>All tracepoints are in the domain of <c>com_ericsson_otp</c></p>
+ <p>All tracepoints are in the domain of <c>org_erlang_otp</c></p>
<p>All Erlang types are the string equivalent in LTTng.</p>
<p><em>scheduler_poll</em></p>
@@ -250,7 +319,7 @@ $ make </code>
<item><c>runnable : integer</c> :: Runnable. Ex. <c>1</c></item>
</list>
<p>Example:</p>
- <p><code type="none">scheduler_poll: { cpu_id = 4 }, { scheduler = 1, runnable = 1 }</code></p>
+ <code type="none">scheduler_poll: { cpu_id = 4 }, { scheduler = 1, runnable = 1 }</code>
<p><em>driver_init</em></p>
<list type="bulleted">
@@ -260,7 +329,7 @@ $ make </code>
<item><c>flags : integer</c> :: Flags. Ex. <c>1</c></item>
</list>
<p>Example:</p>
- <p><code type="none">driver_init: { cpu_id = 2 }, { driver = "caller_drv", major = 3, minor = 3, flags = 1 }</code></p>
+ <code type="none">driver_init: { cpu_id = 2 }, { driver = "caller_drv", major = 3, minor = 3, flags = 1 }</code>
<p><em>driver_start</em></p>
<list type="bulleted">
@@ -269,7 +338,7 @@ $ make </code>
<item><c>port : string</c> :: Port ID. Ex. <c>"#Port&lt;0.1031&gt;"</c></item>
</list>
<p>Example:</p>
- <p><code type="none">driver_start: { cpu_id = 2 }, { pid = "&lt;0.198.0&gt;", driver = "caller_drv", port = "#Port&lt;0.3676&gt;" }</code></p>
+ <code type="none">driver_start: { cpu_id = 2 }, { pid = "&lt;0.198.0&gt;", driver = "caller_drv", port = "#Port&lt;0.3676&gt;" }</code>
<p><em>driver_output</em></p>
<list type="bulleted">
@@ -279,7 +348,7 @@ $ make </code>
<item><c>bytes : integer</c> :: Size of data returned. Ex. <c>82</c></item>
</list>
<p>Example:</p>
- <p><code type="none">driver_output: { cpu_id = 2 }, { pid = "&lt;0.198.0&gt;", port = "#Port&lt;0.3677&gt;", driver = "/bin/sh -s unix:cmd", bytes = 36 }</code></p>
+ <code type="none">driver_output: { cpu_id = 2 }, { pid = "&lt;0.198.0&gt;", port = "#Port&lt;0.3677&gt;", driver = "/bin/sh -s unix:cmd", bytes = 36 }</code>
<p><em>driver_outputv</em></p>
<list type="bulleted">
@@ -289,7 +358,7 @@ $ make </code>
<item><c>bytes : integer</c> :: Size of data returned. Ex. <c>82</c></item>
</list>
<p>Example:</p>
- <p><code type="none">driver_outputv: { cpu_id = 5 }, { pid = "&lt;0.194.0&gt;", port = "#Port&lt;0.3663&gt;", driver = "tcp_inet", bytes = 3 }</code></p>
+ <code type="none">driver_outputv: { cpu_id = 5 }, { pid = "&lt;0.194.0&gt;", port = "#Port&lt;0.3663&gt;", driver = "tcp_inet", bytes = 3 }</code>
<p><em>driver_ready_input</em></p>
<list type="bulleted">
@@ -298,7 +367,7 @@ $ make </code>
<item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
</list>
<p>Example:</p>
- <p><code type="none">driver_ready_input: { cpu_id = 5 }, { pid = "&lt;0.189.0&gt;", port = "#Port&lt;0.3637&gt;", driver = "inet_gethost 4 " }</code></p>
+ <code type="none">driver_ready_input: { cpu_id = 5 }, { pid = "&lt;0.189.0&gt;", port = "#Port&lt;0.3637&gt;", driver = "inet_gethost 4 " }</code>
<p><em>driver_ready_output</em></p>
<list type="bulleted">
@@ -307,7 +376,7 @@ $ make </code>
<item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
</list>
<p>Example:</p>
- <p><code type="none">driver_ready_output: { cpu_id = 5 }, { pid = "&lt;0.194.0&gt;", port = "#Port&lt;0.3663&gt;", driver = "tcp_inet" }</code></p>
+ <code type="none">driver_ready_output: { cpu_id = 5 }, { pid = "&lt;0.194.0&gt;", port = "#Port&lt;0.3663&gt;", driver = "tcp_inet" }</code>
<p><em>driver_timeout</em></p>
<list type="bulleted">
@@ -316,14 +385,14 @@ $ make </code>
<item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
</list>
<p>Example:</p>
- <p><code type="none">driver_timeout: { cpu_id = 5 }, { pid = "&lt;0.196.0&gt;", port = "#Port&lt;0.3664&gt;", driver = "tcp_inet" }</code></p>
+ <code type="none">driver_timeout: { cpu_id = 5 }, { pid = "&lt;0.196.0&gt;", port = "#Port&lt;0.3664&gt;", driver = "tcp_inet" }</code>
<p><em>driver_stop_select</em></p>
<list type="bulleted">
<item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
</list>
<p>Example:</p>
- <p><code type="none">driver_stop_select: { cpu_id = 5 }, { driver = "unknown" }</code></p>
+ <code type="none">driver_stop_select: { cpu_id = 5 }, { driver = "unknown" }</code>
<p><em>driver_flush</em></p>
<list type="bulleted">
@@ -332,7 +401,7 @@ $ make </code>
<item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
</list>
<p>Example:</p>
- <p><code type="none">driver_flush: { cpu_id = 7 }, { pid = "&lt;0.204.0&gt;", port = "#Port&lt;0.3686&gt;", driver = "tcp_inet" }</code></p>
+ <code type="none">driver_flush: { cpu_id = 7 }, { pid = "&lt;0.204.0&gt;", port = "#Port&lt;0.3686&gt;", driver = "tcp_inet" }</code>
<p><em>driver_stop</em></p>
<list type="bulleted">
@@ -341,7 +410,7 @@ $ make </code>
<item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
</list>
<p>Example:</p>
- <p><code type="none">driver_stop: { cpu_id = 5 }, { pid = "[]", port = "#Port&lt;0.3673&gt;", driver = "efile" }</code></p>
+ <code type="none">driver_stop: { cpu_id = 5 }, { pid = "[]", port = "#Port&lt;0.3673&gt;", driver = "efile" }</code>
<p><em>driver_process_exit</em></p>
<list type="bulleted">
@@ -357,7 +426,7 @@ $ make </code>
<item><c>driver : string</c> :: Driver name. Ex. <c>"efile"</c></item>
</list>
<p>Example:</p>
- <p><code type="none">driver_ready_async: { cpu_id = 3 }, { pid = "&lt;0.181.0&gt;", port = "#Port&lt;0.3622&gt;", driver = "efile" }</code></p>
+ <code type="none">driver_ready_async: { cpu_id = 3 }, { pid = "&lt;0.181.0&gt;", port = "#Port&lt;0.3622&gt;", driver = "efile" }</code>
<p><em>driver_call</em></p>
<list type="bulleted">
@@ -368,7 +437,7 @@ $ make </code>
<item><c>bytes : integer</c> :: Size of data returned. Ex. <c>82</c></item>
</list>
<p>Example:</p>
- <p><code type="none">driver_call: { cpu_id = 2 }, { pid = "&lt;0.202.0&gt;", port = "#Port&lt;0.3676&gt;", driver = "caller_drv", command = 0, bytes = 2 }</code></p>
+ <code type="none">driver_call: { cpu_id = 2 }, { pid = "&lt;0.202.0&gt;", port = "#Port&lt;0.3676&gt;", driver = "caller_drv", command = 0, bytes = 2 }</code>
<p><em>driver_control</em></p>
<list type="bulleted">
@@ -379,7 +448,7 @@ $ make </code>
<item><c>bytes : integer</c> :: Size of data returned. Ex. <c>82</c></item>
</list>
<p>Example:</p>
- <p><code type="none">driver_control: { cpu_id = 3 }, { pid = "&lt;0.32767.8191&gt;", port = "#Port&lt;0.0&gt;", driver = "forker", command = 83, bytes = 32 }</code></p>
+ <code type="none">driver_control: { cpu_id = 3 }, { pid = "&lt;0.32767.8191&gt;", port = "#Port&lt;0.0&gt;", driver = "forker", command = 83, bytes = 32 }</code>
<p><em>aio_pool_get</em></p>
<list type="bulleted">
@@ -387,7 +456,7 @@ $ make </code>
<item><c>length : integer</c> :: Async queue length. Ex. <c>0</c></item>
</list>
<p>Example:</p>
- <p><code type="none">aio_pool_get: { cpu_id = 4 }, { port = "#Port&lt;0.3614&gt;", length = 0 }</code></p>
+ <code type="none">aio_pool_get: { cpu_id = 4 }, { port = "#Port&lt;0.3614&gt;", length = 0 }</code>
<p><em>aio_pool_put</em></p>
<list type="bulleted">
@@ -396,7 +465,7 @@ $ make </code>
</list>
<p>Async queue length is not defined for <c>put</c> operations.</p>
<p>Example:</p>
- <p><code type="none">aio_pool_put: { cpu_id = 3 }, { port = "#Port&lt;0.3614&gt;", length = -1 }</code></p>
+ <code type="none">aio_pool_put: { cpu_id = 3 }, { port = "#Port&lt;0.3614&gt;", length = -1 }</code>
<p><em>carrier_create</em></p>
<list type="bulleted">
@@ -414,7 +483,7 @@ $ make </code>
</list>
<p>Example:</p>
- <p><code type="none">carrier_create: { cpu_id = 2 }, { type = "ets_alloc", instance = 7, size = 2097152, mbc_carriers = 4, mbc_carriers_size = 3440640, mbc_blocks = 526, mbc_blocks_size = 1278576, sbc_carriers = 0, sbc_carriers_size = 0, sbc_blocks = 0, sbc_blocks_size = 0 }</code></p>
+ <code type="none">carrier_create: { cpu_id = 2 }, { type = "ets_alloc", instance = 7, size = 2097152, mbc_carriers = 4, mbc_carriers_size = 3440640, mbc_blocks = 526, mbc_blocks_size = 1278576, sbc_carriers = 0, sbc_carriers_size = 0, sbc_blocks = 0, sbc_blocks_size = 0 }</code>
<p><em>carrier_destroy</em></p>
<list type="bulleted">
@@ -432,7 +501,7 @@ $ make </code>
</list>
<p>Example:</p>
- <p><code type="none">carrier_destroy: { cpu_id = 6 }, { type = "ets_alloc", instance = 7, size = 262144, mbc_carriers = 3, mbc_carriers_size = 3178496, mbc_blocks = 925, mbc_blocks_size = 2305336, sbc_carriers = 0, sbc_carriers_size = 0, sbc_blocks = 0, sbc_blocks_size = 0 }</code></p>
+ <code type="none">carrier_destroy: { cpu_id = 6 }, { type = "ets_alloc", instance = 7, size = 262144, mbc_carriers = 3, mbc_carriers_size = 3178496, mbc_blocks = 925, mbc_blocks_size = 2305336, sbc_carriers = 0, sbc_carriers_size = 0, sbc_blocks = 0, sbc_blocks_size = 0 }</code>
<p><em>carrier_pool_put</em></p>
<list type="bulleted">
@@ -441,7 +510,7 @@ $ make </code>
<item><c>size : integer</c> :: Carrier size. Ex. <c>262144</c></item>
</list>
<p>Example:</p>
- <p><code type="none">carrier_pool_put: { cpu_id = 3 }, { type = "ets_alloc", instance = 5, size = 1048576 }</code></p>
+ <code type="none">carrier_pool_put: { cpu_id = 3 }, { type = "ets_alloc", instance = 5, size = 1048576 }</code>
<p><em>carrier_pool_get</em></p>
<list type="bulleted">
@@ -450,12 +519,77 @@ $ make </code>
<item><c>size : integer</c> :: Carrier size. Ex. <c>262144</c></item>
</list>
<p>Example:</p>
- <p><code type="none">carrier_pool_get: { cpu_id = 7 }, { type = "ets_alloc", instance = 4, size = 3208 }</code></p>
-
+ <code type="none">carrier_pool_get: { cpu_id = 7 }, { type = "ets_alloc", instance = 4, size = 3208 }</code>
</section>
-
<section>
- <title>Examples</title>
+ <title>Example of process tracing</title>
+ <p>An example of process tracing of <c>os_mon</c> and friends.</p>
+
+ <p>Clean start of lttng in a bash shell.</p>
+
+ <pre>$ lttng create erlang-demo
+Spawning a session daemon
+Session erlang-demo created.
+Traces will be written in /home/egil/lttng-traces/erlang-demo-20160526-165920</pre>
+
+ <p>Start an Erlang node with lttng enabled.</p>
+
+ <pre>$ erl
+Erlang/OTP 19 [erts-8.0] [source-4d7b24d] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [lttng]
+
+Eshell V8.0 (abort with ^G)
+1></pre>
+
+ <p>Load the <c>dyntrace</c> module.</p>
+
+ <pre>1> <input>l(dyntrace).</input>
+{module,dyntrace}</pre>
+
+ <p>All tracepoints via dyntrace are now visibile and can be listed through <c>lttng list -u</c>.</p>
+
+ <p>Enable the process_register LTTng tracepoint for Erlang.</p>
+
+ <pre>$ lttng enable-event -u org_erlang_dyntrace:process_register
+UST event org_erlang_dyntrace:process_register created in channel channel0</pre>
+
+ <p>Enable process tracing for new processes and use <c>dyntrace</c> as tracer backend.</p>
+
+ <pre>2> <input>erlang:trace(new,true,[procs,{tracer,dyntrace,[]}]).</input>
+0</pre>
+
+ <p>Start LTTng tracing.</p>
+
+ <pre>$ lttng start
+Tracing started for session erlang-demo</pre>
+
+ <p>Start the <c>os_mon</c> application in Erlang.</p>
+
+ <pre>3> <input>application:ensure_all_started(os_mon).</input>
+{ok,[sasl,os_mon]}</pre>
+
+ <p>Stop LTTng tracing and view the result.</p>
+
+ <pre>$ lttng stop
+Tracing stopped for session erlang-demo
+$ lttng view
+[17:20:42.561168759] (+?.?????????) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.66.0&gt;", name = "sasl_sup", type = "register" }
+[17:20:42.561215519] (+0.000046760) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.67.0&gt;", name = "sasl_safe_sup", type = "register" }
+[17:20:42.562149024] (+0.000933505) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.68.0&gt;", name = "alarm_handler", type = "register" }
+[17:20:42.571035803] (+0.008886779) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.69.0&gt;", name = "release_handler", type = "register" }
+[17:20:42.574939868] (+0.003904065) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.74.0&gt;", name = "os_mon_sup", type = "register" }
+[17:20:42.576818712] (+0.001878844) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.75.0&gt;", name = "disksup", type = "register" }
+[17:20:42.580032013] (+0.003213301) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.76.0&gt;", name = "memsup", type = "register" }
+[17:20:42.583046339] (+0.003014326) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.78.0&gt;", name = "cpu_sup", type = "register" }
+[17:20:42.586206242] (+0.003159903) elxd1168lx9 org_erlang_dyntrace:process_register: \
+ { cpu_id = 5 }, { pid = "&lt;0.82.0&gt;", name = "timer_server", type = "register" }</pre>
</section>
</chapter>
diff --git a/lib/runtime_tools/doc/src/dbg.xml b/lib/runtime_tools/doc/src/dbg.xml
index 0128e23a47..db04bfdf7b 100644
--- a/lib/runtime_tools/doc/src/dbg.xml
+++ b/lib/runtime_tools/doc/src/dbg.xml
@@ -36,8 +36,8 @@
<modulesummary>The Text Based Trace Facility</modulesummary>
<description>
<p>This module implements a text based interface to the
- <c><seealso marker="erts:erlang#trace-3">trace/3</seealso></c> and the
- <c><seealso marker="erts:erlang#trace_pattern-2">trace_pattern/2</seealso></c> BIFs. It makes it
+ <seealso marker="erts:erlang#trace-3"><c>trace/3</c></seealso> and the
+ <seealso marker="erts:erlang#trace_pattern-2"><c>trace_pattern/2</c></seealso> BIFs. It makes it
possible to trace functions, processes, ports and messages.
</p>
<p>
@@ -78,7 +78,7 @@
<p>Pseudo function that by means of a <c>parse_transform</c>
translates the <em>literal</em><c>fun()</c> typed as parameter in
the function call to a match specification as described in
- the <c>match_spec</c> manual of <c>ERTS</c> users guide.
+ the <c>match_spec</c> manual of ERTS users guide.
(with literal I mean that the <c>fun()</c> needs to
textually be written as the parameter of the function, it
cannot be held in a variable which in turn is passed to the
@@ -185,13 +185,13 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<item>The corresponding process or port is traced. The process or port may
be a remote process or port (on another Erlang node). The node must
be in the list of traced nodes (see <seealso marker="#n-1"><c>n/1</c></seealso>
- and <c><seealso marker="#tracer-3">tracer/3</seealso></c>).</item>
+ and <seealso marker="#tracer-3"><c>tracer/3</c></seealso>).</item>
<tag><c>all</c></tag>
<item>All processes and ports in the system as well as all processes and ports
created hereafter are to be traced.</item>
- <tag><c>all_processes</c></tag>
+ <tag><c>processes</c></tag>
<item>All processes in the system as well as all processes created hereafter are to be traced.</item>
- <tag><c>all_ports</c></tag>
+ <tag><c>ports</c></tag>
<item>All ports in the system as well as all ports created hereafter are to be traced.</item>
<tag><c>new</c></tag>
<item>All processes and ports created after the call is are to be traced.</item>
@@ -208,22 +208,23 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<tag><c>atom()</c></tag>
<item>The process or port with the corresponding registered name is traced. The process or
port may be a remote process (on another Erlang node). The node must be
- added with the <c><seealso marker="#n-1">n/1</seealso></c> or
- <c><seealso marker="#tracer-3">tracer/3</seealso></c> function.</item>
+ added with the <seealso marker="#n-1"><c>n/1</c></seealso> or
+ <seealso marker="#tracer-3"><c>tracer/3</c></seealso> function.</item>
<tag><c>integer()</c></tag>
<item>The process <c><![CDATA[<0.Item.0>]]></c> is traced.</item>
<tag><c>{X, Y, Z}</c></tag>
<item>The process <c><![CDATA[<X.Y.Z>]]></c> is traced. </item>
- <tag><c>string()</c></tag>
- <item>If the <c>Item</c> is a string <![CDATA["<X.Y.Z>"]]>
- as returned from <c><seealso marker="erts:erlang#pid_to_list-1">pid_to_list/1</seealso></c>, the process
- <c><![CDATA[<X.Y.Z>]]></c> is traced. </item>
- </taglist>
+ <tag><c>string()</c></tag>
+ <item>If the <c>Item</c> is a string <![CDATA["<X.Y.Z>"]]>
+ as returned from <seealso marker="erts:erlang#pid_to_list-1"><c>pid_to_list/1</c></seealso>,
+ the process <c><![CDATA[<X.Y.Z>]]></c> is traced.
+ </item>
+ </taglist>
<p>When enabling an <c>Item</c> that represents a group of processes,
the <c>Item</c> is enabled on all nodes added with the
- <c><seealso marker="#n-1">n/1</seealso></c> or
- <c><seealso marker="#tracer-3">tracer/3</seealso></c> function.</p>
+ <seealso marker="#n-1"><c>n/1</c></seealso> or
+ <seealso marker="#tracer-3"><c>tracer/3</c></seealso> function.</p>
<p><c>Flags</c> can be a single atom,
or a list of flags. The available flags are:
@@ -275,7 +276,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<item>
<p>This is the same as <c>sol</c>, but only for
the first call to
- <c><seealso marker="erts:erlang#link-1">link/1</seealso></c> by the traced process.</p>
+ <seealso marker="erts:erlang#link-1"><c>link/1</c></seealso> by the traced process.</p>
</item>
<tag><c>all</c></tag>
<item>
@@ -288,7 +289,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</item>
</taglist>
<p>The list can also include any of the flags allowed in
- <c><seealso marker="erts:erlang#trace-3">erlang:trace/3</seealso></c></p>
+ <seealso marker="erts:erlang#trace-3"><c>erlang:trace/3</c></seealso></p>
<p>The function returns either an error tuple or a tuple
<c>{ok, List}</c>. The <c>List</c> consists of
specifications of how many processes and ports that matched (in the
@@ -368,11 +369,11 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
please turn to the
<em>User's guide</em> part of the online
documentation for the runtime system (<em>erts</em>). The
- chapter <em><seealso marker="erts:match_spec">Match Specifications in Erlang</seealso></em>
+ chapter <seealso marker="erts:match_spec"><em>Match Specifications in Erlang</em></seealso>
explains the general match specification "language".
The most common generic match specifications used can be
found as <c>Built-inAlias</c>', see
- <c><seealso marker="#ltp-0">ltp/0</seealso></c> below for details.
+ <seealso marker="#ltp-0"><c>ltp/0</c></seealso> below for details.
</p>
<p>The Module, Function and/or Arity parts of the tuple may
be specified as the atom <c>'_'</c> which is a "wild-card"
@@ -380,21 +381,21 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
Module is specified as <c>'_'</c>, the Function and Arity
parts have to be specified as '_' too. The same holds for the
Functions relation to the Arity.</p>
- <p>All nodes added with <c><seealso marker="#n-1">n/1</seealso></c> or
- <c><seealso marker="#tracer-3">tracer/3</seealso></c> will
+ <p>All nodes added with <seealso marker="#n-1"><c>n/1</c></seealso> or
+ <seealso marker="#tracer-3"><c>tracer/3</c></seealso> will
be affected by this call, and if Module is not <c>'_'</c>
the module will be loaded on all nodes.</p>
<p>The function returns either an error tuple or a tuple
<c>{ok, List}</c>. The <c>List</c> consists of specifications of how
many functions that matched, in the same way as the processes and ports
- are presented in the return value of <c><seealso marker="#p-2">p/2</seealso></c>. </p>
+ are presented in the return value of <seealso marker="#p-2"><c>p/2</c></seealso>. </p>
<p>There may be a tuple <c>{saved, N}</c> in the return value,
if the MatchSpec is other
than []. The integer <c>N</c> may then be used in
subsequent calls to this function and will stand as an
"alias" for the given expression. There are also a couple of
- built-in aliases for common expressions, see
- <c><seealso marker="#ltp-0">ltp/0</seealso></c> below for details.</p>
+ built-in aliases for common expressions, see
+ <seealso marker="#ltp-0"><c>ltp/0</c></seealso> below for details.</p>
<p>If an error is returned, it can be due to errors in
compilation of the match specification. Such errors are
presented as a list of tuples <c>{error, string()}</c> where
@@ -433,11 +434,55 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<name>tpl({Module, Function, Arity}, MatchSpec) -> {ok, MatchDesc} | {error, term()}</name>
<fsummary>Set pattern for traced local (as well as global) function calls</fsummary>
<desc>
- <p>This function works as <c><seealso marker="#tp-2">tp/2</seealso></c>, but enables
+ <p>This function works as <seealso marker="#tp-2"><c>tp/2</c></seealso>, but enables
tracing for local calls (and local functions) as well as for
global calls (and functions).</p>
</desc>
</func>
+
+
+ <func>
+ <name>tpe(Event, MatchSpec) -> {ok, MatchDesc} | {error, term()}</name>
+ <fsummary>Set pattern for traced event</fsummary>
+ <type>
+ <v>Event = send | 'receive'</v>
+ <v>MatchSpec = integer() | Built-inAlias | [] | match_spec()</v>
+ <v>Built-inAlias = x | c | cx</v>
+ <v>MatchDesc = [MatchInfo]</v>
+ <v>MatchInfo = {saved, integer()} | MatchNum</v>
+ <v>MatchNum = {matched, node(), 1} | {matched, node(), 0, RPCError}</v>
+ </type>
+ <desc>
+ <p>This function associates a match specification with trace event
+ <c>send</c> or <c>'receive'</c>. By default all executed <c>send</c>
+ and <c>'receive'</c> events are traced if enabled for a process.
+ A match specification can be used to filter traced events
+ based on sender, receiver and/or message content.</p>
+ <p>For a description of the <c>match_spec()</c> syntax,
+ please turn to the <em>User's guide</em> part of the online
+ documentation for the runtime system (<em>erts</em>). The
+ chapter <seealso marker="erts:match_spec"><em>Match Specifications in Erlang</em></seealso>
+ explains the general match specification "language".</p>
+ <p>For <c>send</c>, the matching is done on the list <c>[Receiver, Msg]</c>.
+ <c>Receiver</c> is the process or port identity of the receiver and
+ <c>Msg</c> is the message term. The pid of the sending process can be
+ accessed with the guard function <c>self/0</c>.</p>
+ <p>For <c>'receive'</c>, the matching is done on the list <c>[Node, Sender, Msg]</c>.
+ <c>Node</c> is the node name of the sender. <c>Sender</c> is the
+ process or port identity of the sender, or the atom
+ <c>undefined</c> if the sender is not known (which may
+ be the case for remote senders). <c>Msg</c> is the
+ message term. The pid of the receiving process can be
+ accessed with the guard function <c>self/0</c>.</p>
+ <p>All nodes added with <seealso marker="#n-1"><c>n/1</c></seealso> or
+ <seealso marker="#tracer-3"><c>tracer/3</c></seealso> will
+ be affected by this call.</p>
+ <p>The return value is the same as for
+ <seealso marker="#tp-2"><c>tp/2</c></seealso>. The number of matched
+ events are never larger than 1 as <c>tpe/2</c> does not
+ accept any form of wildcards for argument <c>Event</c>.</p>
+ </desc>
+ </func>
<func>
<name>ctp()</name>
<fsummary>Clear call trace pattern for the specified functions</fsummary>
@@ -480,10 +525,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<p>This function disables call tracing on the specified
functions. The semantics of the parameter is the same
as for the corresponding function specification in
- <c><seealso marker="#tp-2">tp/2</seealso></c> or <c><seealso marker="#tpl-2">tpl/2</seealso></c>. Both local and global call trace
+ <seealso marker="#tp-2"><c>tp/2</c></seealso> or <seealso marker="#tpl-2"><c>tpl/2</c></seealso>. Both local and global call trace
is disabled. </p>
<p>The return value reflects how many functions that matched,
- and is constructed as described in <c><seealso marker="#tp-2">tp/2</seealso></c>. No tuple
+ and is constructed as described in <seealso marker="#tp-2"><c>tp/2</c></seealso>. No tuple
<c>{saved, N}</c> is however ever returned (for obvious reasons).</p>
</desc>
</func>
@@ -519,8 +564,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<name>ctpl({Module, Function, Arity}) -> {ok, MatchDesc} | {error, term()}</name>
<fsummary>Clear call trace pattern for the specified functions</fsummary>
<desc>
- <p>This function works as <c><seealso marker="#ctp-1">ctp/1</seealso></c>, but only disables
- tracing set up with <c><seealso marker="#tpl-2">tpl/2</seealso></c> (not with <c><seealso marker="#tp-2">tp/2</seealso></c>).</p>
+ <p>This function works as <seealso marker="#ctp-1"><c>ctp/1</c></seealso>, but only disables
+ tracing set up with <seealso marker="#tpl-2"><c>tpl/2</c></seealso>
+ (not with <seealso marker="#tp-2"><c>tp/2</c></seealso>).</p>
</desc>
</func>
<func>
@@ -555,8 +601,25 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<name>ctpg({Module, Function, Arity}) -> {ok, MatchDesc} | {error, term()}</name>
<fsummary>Clear call trace pattern for the specified functions</fsummary>
<desc>
- <p>This function works as <c><seealso marker="#ctp-1">ctp/1</seealso></c>, but only disables
- tracing set up with <c><seealso marker="#tp-2">tp/2</seealso></c> (not with <c><seealso marker="#tpl-2">tpl/2</seealso></c>).</p>
+ <p>This function works as <seealso marker="#ctp-1"><c>ctp/1</c></seealso>, but only disables
+ tracing set up with <seealso marker="#tp-2"><c>tp/2</c></seealso>
+ (not with <seealso marker="#tpl-2"><c>tpl/2</c></seealso>).</p>
+ </desc>
+ </func>
+ <func>
+ <name>ctpe(Event) -> {ok, MatchDesc} | {error, term()}</name>
+ <fsummary>Clear trace pattern for the specified event</fsummary>
+ <type>
+ <v>Event = send | 'receive'</v>
+ <v>MatchDesc = [MatchNum]</v>
+ <v>MatchNum = {matched, node(), 1} | {matched, node(), 0, RPCError}</v>
+ </type>
+ <desc>
+ <p>This function clears match specifications for the specified
+ trace event (<c>send</c> or <c>'receive'</c>). It will revert back
+ to the default behavior of tracing all triggered events.</p>
+ <p>The return value follow the same style as for
+ <seealso marker="#ctp-1"><c>ctp/1</c></seealso>.</p>
</desc>
</func>
<func>
@@ -565,13 +628,14 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<desc>
<p>Use this function to recall all match specifications previously
used in the session (i. e. previously saved during calls
- to <c><seealso marker="#tp-2">tp/2</seealso></c>, and built-in match specifications.
+ to <seealso marker="#tp-2"><c>tp/2</c></seealso>, and built-in match specifications.
This is very useful, as a complicated
match_spec can be quite awkward to write. Note that the
- match specifications are lost if <c><seealso marker="#stop-0">stop/0</seealso></c> is called.</p>
+ match specifications are lost if <seealso marker="#stop-0"><c>stop/0</c></seealso> is called.</p>
<p>Match specifications used can be saved in a file (if a
read-write file system is present) for use in later
- debugging sessions, see <c><seealso marker="#wtp-1">wtp/1</seealso></c> and <c><seealso marker="#rtp-1">rtp/1</seealso></c></p>
+ debugging sessions, see <seealso marker="#wtp-1"><c>wtp/1</c></seealso>
+ and <seealso marker="#rtp-1"><c>rtp/1</c></seealso></p>
<p>There are three built-in trace patterns:
<c>exception_trace</c>, <c>caller_trace</c>
and <c>caller_exception_trace</c> (or <c>x</c>, <c>c</c> and
@@ -594,10 +658,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<fsummary>Delete all saved match specifications.</fsummary>
<desc>
<p>Use this function to "forget" all match specifications
- saved during calls to <c><seealso marker="#tp-2">tp/2</seealso></c>.
- This is useful when one wants to restore other match
- specifications from a file with <c><seealso marker="#rtp-1">rtp/1</seealso></c>. Use
- <c><seealso marker="#dtp-1">dtp/1</seealso></c> to delete specific saved match specifications. </p>
+ saved during calls to <seealso marker="#tp-2"><c>tp/2</c></seealso>.
+ This is useful when one wants to restore other match
+ specifications from a file with <seealso marker="#rtp-1"><c>rtp/1</c></seealso>. Use
+ <seealso marker="#dtp-1"><c>dtp/1</c></seealso> to delete specific saved match specifications.</p>
</desc>
</func>
<func>
@@ -608,7 +672,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>Use this function to "forget" a specific match specification
- saved during calls to <c><seealso marker="#tp-2">tp/2</seealso></c>.</p>
+ saved during calls to <seealso marker="#tp-2"><c>tp/2</c></seealso>.</p>
</desc>
</func>
<func>
@@ -620,12 +684,12 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>This function will save all match specifications saved
- during the session (during calls to <c><seealso marker="#tp-2">tp/2</seealso></c>)
+ during the session (during calls to <seealso marker="#tp-2"><c>tp/2</c></seealso>)
and built-in match specifications in a text
file with the name designated by <c>Name</c>. The format
of the file is textual, why it can be edited with an
ordinary text editor, and then restored with
- <c><seealso marker="#rtp-1">rtp/1</seealso></c>. </p>
+ <seealso marker="#rtp-1"><c>rtp/1</c></seealso>. </p>
<p>Each match spec in the file ends with a full stop
(<c>.</c>) and new (syntactically correct) match
specifications can be added to the file manually.</p>
@@ -643,7 +707,8 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>This function reads match specifications from a file
- (possibly) generated by the <c><seealso marker="#wtp-1">wtp/1</seealso></c> function. It checks
+ (possibly) generated by the <seealso marker="#wtp-1"><c>wtp/1</c></seealso>
+ function. It checks
the syntax of all match specifications and verifies that
they are correct. The error handling principle is "all or
nothing", i. e. if some of the match specifications are
@@ -651,7 +716,8 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
saved match specifications for the running system. </p>
<p>The match specifications in the file are <em>merged</em>
with the current match specifications, so that no duplicates
- are generated. Use <c><seealso marker="#ltp-0">ltp/0</seealso></c> to see what numbers were
+ are generated. Use <seealso marker="#ltp-0"><c>ltp/0</c></seealso>
+ to see what numbers were
assigned to the specifications from the file.</p>
<p>The function will return an error, either due to I/O
problems (like a non existing or non readable file) or due
@@ -670,9 +736,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>The <c>dbg</c> server keeps a list of nodes where tracing
- should be performed. Whenever a <c><seealso marker="#tp-2">tp/2</seealso></c> call or a
- <c><seealso marker="#p-2">p/2</seealso></c> call is made, it is executed for all nodes in this
- list including the local node (except for <c><seealso marker="#p-2">p/2</seealso></c> with a
+ should be performed. Whenever a <seealso marker="#tp-2"><c>tp/2</c></seealso> call or a
+ <seealso marker="#p-2"><c>p/2</c></seealso> call is made, it is executed for all nodes in this
+ list including the local node (except for <seealso marker="#p-2"><c>p/2</c></seealso> with a
specific <c>pid()</c> or <c>port()</c> as first argument, in which case the
command is executed only on the node where the designated
process or port resides).
@@ -684,7 +750,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
distribution). If no tracer process is running on the local
node, the error reason <c>no_local_tracer</c> is returned. The
tracer process on the local node must be started with the
- <c><seealso marker="#tracer-2">tracer/0/2</seealso></c> function.
+ <seealso marker="#tracer-2"><c>tracer/0/2</c></seealso> function.
</p>
<p>If <c>Nodename</c> is the local node, the error reason
<c>cant_add_local_node</c> is returned.
@@ -694,7 +760,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
a tracer process. The error reason
<c>cant_trace_remote_pid_to_local_port</c> is returned. A
trace port can however be started on the remote node with the
- <c><seealso marker="#tracer-3">tracer/3</seealso></c> function.
+ <seealso marker="#tracer-3"><c>tracer/3</c></seealso> function.
</p>
<p>The function will also return an error if the node
<c>Nodename</c> is not reachable.</p>
@@ -708,9 +774,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</type>
<desc>
<p>Clears a node from the list of traced nodes. Subsequent
- calls to <c><seealso marker="#tp-2">tp/2</seealso></c> and <c><seealso marker="#p-2">p/2</seealso></c> will not consider that
- node, but tracing already activated on the node will continue
- to be in effect.</p>
+ calls to <seealso marker="#tp-2"><c>tp/2</c></seealso> and
+ <seealso marker="#p-2"><c>p/2</c></seealso> will not consider that
+ node, but tracing already activated on the node will continue
+ to be in effect.</p>
<p>Returns <c>ok</c>, cannot fail.</p>
</desc>
</func>
@@ -727,14 +794,14 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<desc>
<p>This function starts a server on the local node that will
be the recipient of all trace messages. All subsequent calls
- to <c><seealso marker="#p-2">p/2</seealso></c> will result in messages sent to the newly
+ to <seealso marker="#p-2"><c>p/2</c></seealso> will result in messages sent to the newly
started trace server.</p>
<p>A trace server started in this way will simply display the
trace messages in a formatted way in the Erlang shell
- (i. e. use io:format). See <c><seealso marker="#tracer-2">tracer/2</seealso></c> for a description
- of how the trace message handler can be customized.
+ (i. e. use io:format). See <seealso marker="#tracer-2"><c>tracer/2</c></seealso>
+ for a description of how the trace message handler can be customized.
</p>
- <p>To start a similar tracer on a remote node, use <c><seealso marker="#n-1">n/1</seealso></c>.</p>
+ <p>To start a similar tracer on a remote node, use <seealso marker="#n-1"><c>n/1</c></seealso>.</p>
</desc>
</func>
<func>
@@ -758,9 +825,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
by a receiving process (<c>process</c>), by a tracer port
(<c>port</c>) or by a tracer module
(<c>module</c>). For a description about tracer ports see
- <c><seealso marker="#trace_port-2">trace_port/2</seealso></c>
+ <seealso marker="#trace_port-2"><c>trace_port/2</c></seealso>
and for a tracer modules see
- <c><seealso marker="erts:erl_tracer">erl_tracer</seealso>.</c>
+ <seealso marker="erts:erl_tracer"><c>erl_tracer</c></seealso>.
</p>
<p>If <c>Type</c> is <c>process</c>, a message handler function can
be specified (<c>HandlerSpec</c>). The handler function, which
@@ -776,10 +843,10 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<p>If <c>Type</c> is <c>port</c>, then the second parameter should
be a <em>fun</em> which takes no arguments and returns a
newly opened trace port when called. Such a <em>fun</em> is
- preferably generated by calling <c><seealso marker="#trace_port-2">trace_port/2</seealso></c>.
+ preferably generated by calling <seealso marker="#trace_port-2"><c>trace_port/2</c></seealso>.
</p>
<p>if <c>Type</c> is <c>module</c>, then the second parameter should
- be either a tuple describing the <c><seealso marker="erts:erl_tracer">erl_tracer</seealso></c>
+ be either a tuple describing the <seealso marker="erts:erl_tracer"><c>erl_tracer</c></seealso>
module to be used for tracing and the state to be used for
that tracer module or a fun returning the same tuple.</p>
<p>If an error is returned, it can either be due to a tracer
@@ -787,7 +854,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
due to the <c>HandlerFun</c> throwing an exception.
</p>
<p>To start a similar tracer on a remote node, use
- <c><seealso marker="#tracer-3">tracer/3</seealso></c>.
+ <seealso marker="#tracer-3"><c>tracer/3</c></seealso>.
</p>
</desc>
</func>
@@ -798,19 +865,19 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<v>Nodename = atom()</v>
</type>
<desc>
- <p>This function is equivalent to <c><seealso marker="#tracer-2">tracer/2</seealso></c>, but acts on
+ <p>This function is equivalent to <seealso marker="#tracer-2"><c>tracer/2</c></seealso>, but acts on
the given node. A tracer is started on the node
(<c>Nodename</c>) and the node is added to the list of traced nodes.
</p>
<note>
- <p>This function is not equivalent to <c><seealso marker="#n-1">n/1</seealso></c>. While
- <c><seealso marker="#n-1">n/1</seealso></c> starts a process tracer which redirects all trace
+ <p>This function is not equivalent to <seealso marker="#n-1"><c>n/1</c></seealso>. While
+ <seealso marker="#n-1"><c>n/1</c></seealso> starts a process tracer which redirects all trace
information to a process tracer on the local node (i.e. the
- trace control node), <c><seealso marker="#tracer-3">tracer/3</seealso></c> starts a tracer of any
+ trace control node), <seealso marker="#tracer-3"><c>tracer/3</c></seealso> starts a tracer of any
type which is independent of the tracer on the trace control
node.</p>
</note>
- <p>For details, see <c><seealso marker="#tracer-2">tracer/2</seealso></c>.</p>
+ <p>For details, see <seealso marker="#tracer-2"><c>tracer/2</c></seealso>.</p>
</desc>
</func>
<func>
@@ -842,9 +909,9 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<c>file</c> and the <c>ip</c> trace drivers. The file driver
sends all trace messages into one or several binary files,
from where they later can be fetched and processed with the
- <c><seealso marker="#trace_client-2">trace_client/2</seealso></c> function. The ip driver opens a TCP/IP
+ <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso> function. The ip driver opens a TCP/IP
port where it listens for connections. When a client
- (preferably started by calling <c><seealso marker="#trace_client-2">trace_client/2</seealso></c> on
+ (preferably started by calling <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso> on
another Erlang node) connects, all trace messages are sent
over the IP network for further processing by the remote
client. </p>
@@ -883,7 +950,8 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
as fast as they are produced by the runtime system, a special
message is sent, which indicates how many messages that are
dropped. That message will arrive at the handler function
- specified in <c><seealso marker="#trace_client-3">trace_client/3</seealso></c> as the tuple <c>{drop, N}</c> where <c>N</c> is the number of consecutive messages
+ specified in <seealso marker="#trace_client-3"><c>trace_client/3</c></seealso>
+ as the tuple <c>{drop, N}</c> where <c>N</c> is the number of consecutive messages
dropped. In case of heavy tracing, drop's are likely to occur,
and they surely occur if no client is reading the trace
messages.</p>
@@ -960,8 +1028,8 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<desc>
<p>This function starts a trace client that reads the output
created by a trace port driver and handles it in mostly the
- same way as a tracer process created by the <c><seealso marker="#tracer-0">tracer/0</seealso></c>
- function.</p>
+ same way as a tracer process created by the
+ <seealso marker="#tracer-0"><c>tracer/0</c></seealso> function.</p>
<p>If <c>Type</c> is <c>file</c>, the client reads all trace
messages stored in the file named <c>Filename</c> or
specified by <c>WrapFilesSpec</c> (must be the same as used
@@ -972,7 +1040,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
<p>If <c>Type</c> is <c>follow_file</c>, the client behaves as
in the <c>file</c> case, but keeps trying to read (and
process) more data
- from the file until stopped by <c><seealso marker="#stop_trace_client-1">stop_trace_client/1</seealso></c>.
+ from the file until stopped by <seealso marker="#stop_trace_client-1"><c>stop_trace_client/1</c></seealso>.
<c>WrapFilesSpec</c> is not allowed as second argument
for this <c>Type</c>.</p>
<p>If <c>Type</c> is <c>ip</c>, the client connects to the
@@ -1028,10 +1096,10 @@ hello</pre>
<v>InitialData = term()</v>
</type>
<desc>
- <p>This function works exactly as <c><seealso marker="#trace_client-2">trace_client/2</seealso></c>, but
- allows you to write your own handler function. The handler
+ <p>This function works exactly as <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso>,
+ but allows you to write your own handler function. The handler
function works mostly as the one described in
- <c><seealso marker="#tracer-2">tracer/2</seealso></c>, but will also have to be prepared to handle
+ <seealso marker="#tracer-2"><c>tracer/2</c></seealso>, but will also have to be prepared to handle
trace messages of the form <c>{drop, N}</c>, where <c>N</c> is
the number of dropped messages. This pseudo trace message will
only occur if the ip trace driver is used.</p>
@@ -1050,7 +1118,8 @@ hello</pre>
<desc>
<p>This function shuts down a previously started trace
client. The <c>Pid</c> argument is the process id returned
- from the <c><seealso marker="#trace_client-2">trace_client/2</seealso></c> or <c><seealso marker="#trace_client-3">trace_client/3</seealso></c> call.</p>
+ from the <seealso marker="#trace_client-2"><c>trace_client/2</c></seealso>
+ or <seealso marker="#trace_client-3"><c>trace_client/3</c></seealso> call.</p>
</desc>
</func>
<func>
@@ -1203,7 +1272,7 @@ SeqTrace [0]: (&lt;0.30.0>) &lt;0.25.0> ! {dbg,{ok,&lt;0.31.0>}} [Serial: {4,5}]
of causing a deadlock. This will happen if a group leader process generates a trace
message and the tracer process, by calling the trace handler function, sends an IO
request to the same group leader. The problem can only occur if the trace handler
- prints to tty using an <c>io</c> function such as <c><seealso marker="stdlib:io#format-2">format/2</seealso></c>.
+ prints to tty using an <c>io</c> function such as <seealso marker="stdlib:io#format-2"><c>format/2</c></seealso>.
Note that when
<c>dbg:p(all,call)</c> is called, IO processes are also traced.
Here's an example:</p>
diff --git a/lib/runtime_tools/doc/src/notes.xml b/lib/runtime_tools/doc/src/notes.xml
index 2db8ca17a0..b6dfb2dd28 100644
--- a/lib/runtime_tools/doc/src/notes.xml
+++ b/lib/runtime_tools/doc/src/notes.xml
@@ -34,6 +34,20 @@
<section><title>Runtime_Tools 1.10</title>
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix bug in dbg:trace_port/2 that could cause the trace ip
+ driver to produce faulty error reports "...(re)selected
+ before stop_select was called for driver trace_ip_drv".</p>
+ <p>
+ Own Id: OTP-13576 Aux Id: ERL-119 </p>
+ </item>
+ </list>
+ </section>
+
+
<section><title>Improvements and New Features</title>
<list>
<item>
@@ -51,7 +65,7 @@
enabled by default and more states can be enabled through
configure.</p>
<p>
- There is a convinence module called msacc that has been
+ There is a convenience module called msacc that has been
added to runtime_tools that can assist in gathering and
interpreting the data from Microstate accounting.</p>
<p>
@@ -65,6 +79,14 @@
</item>
<item>
<p>
+ Update observer GUI to support tracing on ports, and to
+ set matchspecs for send/receive. This required some minor
+ bugfixes in runtime_tools/dbg.</p>
+ <p>
+ Own Id: OTP-13481</p>
+ </item>
+ <item>
+ <p>
Update dbg and ttb to work with a tracer module as tracer
and tracing on ports.</p>
<p>
@@ -646,7 +668,7 @@
also been extended. </item><item> The <c>configure</c>
scripts of <c>erl_interface</c> and <c>odbc</c> now
search for thread libraries and thread library quirks the
- same way as <c>erts</c> do. </item><item> The
+ same way as ERTS do. </item><item> The
<c>configure</c> script of the <c>odbc</c> application
now also looks for odbc libraries in <c>lib64</c> and
<c>lib/64</c> directories when building on a 64-bit
diff --git a/lib/runtime_tools/src/appmon_info.erl b/lib/runtime_tools/src/appmon_info.erl
index fead724373..b5500085a3 100644
--- a/lib/runtime_tools/src/appmon_info.erl
+++ b/lib/runtime_tools/src/appmon_info.erl
@@ -307,9 +307,10 @@ do_work(Key, State) ->
{Cmd, Aux, From, _OldRef, Old, Opts} = retrieve(WorkStore, Key),
{ok, Result} = do_work2(Cmd, Aux, From, Old, Opts),
if
- Result==Old -> ok;
- true ->
- From ! {delivery, self(), Cmd, Aux, Result}
+ Result==Old -> ok;
+ true ->
+ From ! {delivery, self(), Cmd, Aux, Result},
+ ok
end,
case get_opt(timeout, Opts) of
at_most_once ->
@@ -393,7 +394,7 @@ del_task(Key, WorkStore) ->
{_Cmd, _Aux, _From, Ref, _Old, Opts} ->
if
Ref /= nil ->
- timer:cancel(Ref),
+ {ok,_} = timer:cancel(Ref),
receive
{do_it, Key} ->
Opts
diff --git a/lib/runtime_tools/src/dbg.erl b/lib/runtime_tools/src/dbg.erl
index 1620f52789..c0d4665bda 100644
--- a/lib/runtime_tools/src/dbg.erl
+++ b/lib/runtime_tools/src/dbg.erl
@@ -217,7 +217,7 @@ ctpg({_Module, _Function, _Arity} = X) ->
do_ctp(X,[global]).
do_ctp({Module, Function, Arity},[]) ->
- do_ctp({Module, Function, Arity},[global]),
+ {ok,_} = do_ctp({Module, Function, Arity},[global]),
do_ctp({Module, Function, Arity},[local]);
do_ctp({_Module, _Function, _Arity}=MFA,Flags) ->
Nodes = req(get_nodes),
@@ -271,8 +271,7 @@ wtp(FileName) ->
ok
end,
[]),
- file:close(File),
- ok
+ ok = file:close(File)
end.
%%
@@ -600,7 +599,7 @@ stop() ->
end.
stop_clear() ->
- ctp(),
+ {ok, _} = ctp(),
stop().
%%% Calling the server.
@@ -791,7 +790,8 @@ loop({C,T}=SurviveLinks, Table) ->
end.
reply(Pid, Reply) ->
- Pid ! {dbg,Reply}.
+ Pid ! {dbg,Reply},
+ ok.
%%% A process-based tracer.
@@ -944,9 +944,11 @@ do_relay(Parent,RelP) ->
case RelP of
{Type,Data} ->
{ok,Tracer} = remote_tracer(Type,Data),
- Parent ! {started,Tracer};
+ Parent ! {started,Tracer},
+ ok;
Pid when is_pid(Pid) ->
- Parent ! {started,self()}
+ Parent ! {started,self()},
+ ok
end,
do_relay_1(RelP).
@@ -1153,7 +1155,7 @@ all() ->
[send,'receive',call,procs,ports,garbage_collection,running,
set_on_spawn,set_on_first_spawn,set_on_link,set_on_first_link,
timestamp,monotonic_timestamp,strict_monotonic_timestamp,
- arity,return_to,silent,running_procs,running_ports].
+ arity,return_to,silent,running_procs,running_ports,exiting].
display_info([Node|Nodes]) ->
io:format("~nNode ~w:~n",[Node]),
@@ -1311,6 +1313,9 @@ tc_loop(Other, _Handler, _HData) ->
gen_reader(ip, {Host, Portno}) ->
case gen_tcp:connect(Host, Portno, [{active, false}, binary]) of
{ok, Sock} ->
+ %% Just in case this is on the traced node,
+ %% make sure the port is not traced.
+ p(Sock,clear),
mk_reader(fun ip_read/2, Sock);
Error ->
exit(Error)
@@ -1366,7 +1371,7 @@ mk_reader_wrap([_Hd | Tail] = WrapFiles, File) ->
{ok, Term} ->
[Term | mk_reader_wrap(WrapFiles, File)];
eof ->
- file:close(File),
+ ok = file:close(File),
case Tail of
[_|_] ->
mk_reader_wrap(Tail);
diff --git a/lib/runtime_tools/src/dyntrace.erl b/lib/runtime_tools/src/dyntrace.erl
index 28e6d67d96..58c5a773c3 100644
--- a/lib/runtime_tools/src/dyntrace.erl
+++ b/lib/runtime_tools/src/dyntrace.erl
@@ -42,15 +42,14 @@
-export([put_tag/1, get_tag/0, get_tag_data/0, spread_tag/1, restore_tag/1]).
-export([trace/5,
- trace/6,
- trace_procs/6,
- trace_ports/6,
- trace_running_procs/6,
- trace_running_ports/6,
- trace_call/6,
- trace_send/6,
- trace_receive/6,
- trace_garbage_collection/6]).
+ trace_procs/5,
+ trace_ports/5,
+ trace_running_procs/5,
+ trace_running_ports/5,
+ trace_call/5,
+ trace_send/5,
+ trace_receive/5,
+ trace_garbage_collection/5]).
-export([enabled_procs/3,
enabled_ports/3,
@@ -147,34 +146,31 @@ user_trace_i4s4(_, _, _, _, _, _, _, _, _) ->
user_trace_n(_, _, _, _, _, _, _, _, _, _) ->
erlang:nif_error(nif_not_loaded).
-trace(_TracerState, _Label, _SeqTraceInfo, _, _Opts) ->
+trace(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
erlang:nif_error(nif_not_loaded).
-trace(_TraceTag, _TracerState, _Tracee, _FirstTraceTerm, _SecondTraceTerm, _Opts) ->
+trace_procs(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
erlang:nif_error(nif_not_loaded).
-trace_procs(_TraceTag, _TracerState, _Tracee, _FirstTraceTerm, _SecondTraceTerm, _Opts) ->
+trace_ports(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
erlang:nif_error(nif_not_loaded).
-trace_ports(_TraceTag, _TracerState, _Tracee, _FirstTraceTerm, _SecondTraceTerm, _Opts) ->
+trace_running_procs(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
erlang:nif_error(nif_not_loaded).
-trace_running_procs(_TraceTag, _TracerState, _Tracee, _FirstTraceTerm, _SecondTraceTerm, _Opts) ->
+trace_running_ports(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
erlang:nif_error(nif_not_loaded).
-trace_running_ports(_TraceTag, _TracerState, _Tracee, _FirstTraceTerm, _SecondTraceTerm, _Opts) ->
+trace_call(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
erlang:nif_error(nif_not_loaded).
-trace_call(_TraceTag, _TracerState, _Tracee, _FirstTraceTerm, _SecondTraceTerm, _Opts) ->
+trace_send(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
erlang:nif_error(nif_not_loaded).
-trace_send(_TraceTag, _TracerState, _Tracee, _FirstTraceTerm, _SecondTraceTerm, _Opts) ->
+trace_receive(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
erlang:nif_error(nif_not_loaded).
-trace_receive(_TraceTag, _TracerState, _Tracee, _FirstTraceTerm, _SecondTraceTerm, _Opts) ->
- erlang:nif_error(nif_not_loaded).
-
-trace_garbage_collection(_TraceTag, _TracerState, _Tracee, _FirstTraceTerm, _SecondTraceTerm, _Opts) ->
+trace_garbage_collection(_TraceTag, _TracerState, _Tracee, _TraceTerm, _Opts) ->
erlang:nif_error(nif_not_loaded).
enabled(_TraceTag, _TracerState, _Tracee) ->
diff --git a/lib/runtime_tools/src/erts_alloc_config.erl b/lib/runtime_tools/src/erts_alloc_config.erl
index e94cced911..514530332c 100644
--- a/lib/runtime_tools/src/erts_alloc_config.erl
+++ b/lib/runtime_tools/src/erts_alloc_config.erl
@@ -128,7 +128,7 @@ make_config(FileName) when is_list(FileName) ->
case file:open(FileName, [write]) of
{ok, IODev} ->
Res = req({make_config, IODev}),
- file:close(IODev),
+ ok = file:close(IODev),
Res;
Error ->
Error
@@ -200,9 +200,11 @@ server_loop(State) ->
Conf = #conf{segments = ?MBC_MSEG_LIMIT,
format_to = IODev},
Res = mk_config(Conf, State#state.alloc),
- From ! {response, Ref, Res};
+ From ! {response, Ref, Res},
+ ok;
_ ->
- From ! {response, Ref, no_scenario_saved}
+ From ! {response, Ref, no_scenario_saved},
+ ok
end,
State;
{request, From, Ref, stop} ->
diff --git a/lib/runtime_tools/src/observer_backend.erl b/lib/runtime_tools/src/observer_backend.erl
index 30df3b0b8b..cedb677178 100644
--- a/lib/runtime_tools/src/observer_backend.erl
+++ b/lib/runtime_tools/src/observer_backend.erl
@@ -23,7 +23,8 @@
-export([vsn/0]).
%% observer stuff
--export([sys_info/0, get_table/3, get_table_list/2, fetch_stats/2]).
+-export([sys_info/0, get_port_list/0,
+ get_table/3, get_table_list/2, fetch_stats/2]).
%% etop stuff
-export([etop_collect/1]).
@@ -139,6 +140,15 @@ get_mnesia_loop(Parent, {Match, Cont}) ->
Parent ! {self(), Match},
get_mnesia_loop(Parent, mnesia:select(Cont)).
+get_port_list() ->
+ [begin
+ [{port_id,P}|erlang:port_info(P)] ++
+ case erlang:port_info(P,monitors) of
+ undefined -> [];
+ Monitors -> [Monitors]
+ end
+ end || P <- erlang:ports()].
+
get_table_list(ets, Opts) ->
HideUnread = proplists:get_value(unread_hidden, Opts, true),
HideSys = proplists:get_value(sys_hidden, Opts, true),
@@ -259,7 +269,8 @@ etop_collect(Collector) ->
case SchedulerWallTime of
undefined ->
- spawn(fun() -> flag_holder_proc(Collector) end);
+ spawn(fun() -> flag_holder_proc(Collector) end),
+ ok;
_ ->
ok
end,
@@ -334,8 +345,8 @@ ttb_init_node(MetaFile_0,PI,Traci) ->
MetaPid ! {metadata,Traci},
case PI of
true ->
- Proci = pnames(),
- MetaPid ! {metadata,Proci};
+ MetaPid ! {metadata,pnames()},
+ ok;
false ->
ok
end,
@@ -354,7 +365,8 @@ ttb_meta_tracer(MetaFile,PI,Parent,SessionData) ->
erlang:trace_pattern({erlang,spawn_link,3},ReturnMS,[meta]),
erlang:trace_pattern({erlang,spawn_opt,1},ReturnMS,[meta]),
erlang:trace_pattern({erlang,register,2},[],[meta]),
- erlang:trace_pattern({global,register_name,2},[],[meta]);
+ erlang:trace_pattern({global,register_name,2},[],[meta]),
+ ok;
false ->
ok
end,
@@ -362,7 +374,8 @@ ttb_meta_tracer(MetaFile,PI,Parent,SessionData) ->
case proplists:get_value(overload_check, SessionData) of
{Ms, M, F} ->
catch M:F(init),
- erlang:send_after(Ms, self(), overload_check);
+ erlang:send_after(Ms, self(), overload_check),
+ ok;
_ ->
ok
end,
@@ -371,10 +384,10 @@ ttb_meta_tracer(MetaFile,PI,Parent,SessionData) ->
ttb_meta_tracer_loop(MetaFile,PI,Acc,State) ->
receive
{trace_ts,_,call,{erlang,register,[Name,Pid]},_} ->
- ttb_store_meta({pid,{Pid,Name}},MetaFile),
+ ok = ttb_store_meta({pid,{Pid,Name}},MetaFile),
ttb_meta_tracer_loop(MetaFile,PI,Acc,State);
{trace_ts,_,call,{global,register_name,[Name,Pid]},_} ->
- ttb_store_meta({pid,{Pid,{global,Name}}},MetaFile),
+ ok = ttb_store_meta({pid,{Pid,{global,Name}}},MetaFile),
ttb_meta_tracer_loop(MetaFile,PI,Acc,State);
{trace_ts,CallingPid,call,{erlang,spawn_opt,[{M,F,Args,_}]},_} ->
MFA = {M,F,length(Args)},
@@ -390,7 +403,7 @@ ttb_meta_tracer_loop(MetaFile,PI,Acc,State) ->
NewAcc =
dict:update(CallingPid,
fun([H|T]) ->
- ttb_store_meta({pid,{NewPid,H}},MetaFile),
+ ok = ttb_store_meta({pid,{NewPid,H}},MetaFile),
T
end,
Acc),
@@ -408,22 +421,22 @@ ttb_meta_tracer_loop(MetaFile,PI,Acc,State) ->
NewAcc =
dict:update(CallingPid,
fun([H|T]) ->
- ttb_store_meta({pid,{NewPid,H}},MetaFile),
+ ok = ttb_store_meta({pid,{NewPid,H}},MetaFile),
T
end,
Acc),
ttb_meta_tracer_loop(MetaFile,PI,NewAcc,State);
{metadata,Data} when is_list(Data) ->
- ttb_store_meta(Data,MetaFile),
+ ok = ttb_store_meta(Data,MetaFile),
ttb_meta_tracer_loop(MetaFile,PI,Acc,State);
{metadata,Key,Fun} when is_function(Fun) ->
- ttb_store_meta([{Key,Fun()}],MetaFile),
+ ok = ttb_store_meta([{Key,Fun()}],MetaFile),
ttb_meta_tracer_loop(MetaFile,PI,Acc,State);
{metadata,Key,What} ->
- ttb_store_meta([{Key,What}],MetaFile),
+ ok = ttb_store_meta([{Key,What}],MetaFile),
ttb_meta_tracer_loop(MetaFile,PI,Acc,State);
overload_check ->
{Ms, M, F} = proplists:get_value(overload_check, State),
@@ -439,7 +452,7 @@ ttb_meta_tracer_loop(MetaFile,PI,Acc,State) ->
ttb_meta_tracer_loop(MetaFile,PI,Acc, State)
end;
{'DOWN', _, _, _, _} ->
- stop_seq_trace(),
+ _ = stop_seq_trace(),
self() ! stop,
ttb_meta_tracer_loop(MetaFile,PI,Acc, State);
stop when PI=:=true ->
@@ -528,7 +541,7 @@ ttb_store_meta(Data,MetaFile) ->
ttb_store_meta([Data],MetaFile).
ttb_write_binary(Fd,[H|T]) ->
- file:write(Fd,ttb_make_binary(H)),
+ ok = file:write(Fd,ttb_make_binary(H)),
ttb_write_binary(Fd,T);
ttb_write_binary(_Fd,[]) ->
ok.
@@ -585,9 +598,9 @@ ttb_fetch(MetaFile,{Port,Host}) ->
send_files({Sock,Host},[File|Files]) ->
{ok,Fd} = file:open(File,[raw,read,binary]),
- gen_tcp:send(Sock,<<1,(list_to_binary(filename:basename(File)))/binary>>),
+ ok = gen_tcp:send(Sock,<<1,(list_to_binary(filename:basename(File)))/binary>>),
send_chunks(Sock,Fd),
- file:delete(File),
+ ok = file:delete(File),
send_files({Sock,Host},Files);
send_files({_Sock,_Host},[]) ->
done.
diff --git a/lib/runtime_tools/src/percept_profile.erl b/lib/runtime_tools/src/percept_profile.erl
index ceec4d3b89..1e8e913b80 100644
--- a/lib/runtime_tools/src/percept_profile.erl
+++ b/lib/runtime_tools/src/percept_profile.erl
@@ -87,7 +87,7 @@ start(Filename, Options) ->
start(Filename, {Module, Function, Args}, Options) ->
case whereis(percept_port) of
undefined ->
- profile_to_file(Filename, Options),
+ {ok, _} = profile_to_file(Filename, Options),
erlang:apply(Module, Function, Args),
stop();
Port ->
@@ -113,7 +113,7 @@ deliver_all_trace() ->
-spec stop() -> 'ok' | {'error', 'not_started'}.
stop() ->
- erlang:system_profile(undefined, [runnable_ports, runnable_procs]),
+ _ = erlang:system_profile(undefined, [runnable_ports, runnable_procs]),
erlang:trace(all, false, [procs, ports, timestamp]),
deliver_all_trace(),
case whereis(percept_port) of
@@ -158,7 +158,8 @@ set_tracer(Port, Opts) ->
{TOpts, POpts} = parse_profile_options(Opts),
% Setup profiling and tracing
erlang:trace(all, true, [{tracer, Port}, timestamp | TOpts]),
- erlang:system_profile(Port, POpts).
+ _ = erlang:system_profile(Port, POpts),
+ ok.
%% parse_profile_options
diff --git a/lib/runtime_tools/src/system_information.erl b/lib/runtime_tools/src/system_information.erl
index 1add01612d..df25297eb9 100644
--- a/lib/runtime_tools/src/system_information.erl
+++ b/lib/runtime_tools/src/system_information.erl
@@ -31,6 +31,7 @@
-export([report/0,
from_file/1,
to_file/1]).
+
-export([start/0, stop/0,
load_report/0, load_report/2,
applications/0, applications/1,
@@ -64,6 +65,7 @@
start() ->
gen_server:start({local, ?SERVER}, ?MODULE, [], []).
+
stop() ->
gen_server:call(?SERVER, stop, infinity).
@@ -71,7 +73,7 @@ load_report() -> load_report(data, report()).
load_report(file, File) -> load_report(data, from_file(File));
load_report(data, Report) ->
- start(), gen_server:call(?SERVER, {load_report, Report}, infinity).
+ ok = start_internal(), gen_server:call(?SERVER, {load_report, Report}, infinity).
report() -> [
{init_arguments, init:get_arguments()},
@@ -219,6 +221,13 @@ code_change(_OldVsn, State, _Extra) ->
%% Internal functions
%%===================================================================
+start_internal() ->
+ case start() of
+ {ok,_} -> ok;
+ {error, {already_started,_}} -> ok;
+ Error -> Error
+ end.
+
%% handle report values
get_value([], Data) -> Data;
diff --git a/lib/runtime_tools/test/dbg_SUITE.erl b/lib/runtime_tools/test/dbg_SUITE.erl
index 5a3c885571..4b0864858c 100644
--- a/lib/runtime_tools/test/dbg_SUITE.erl
+++ b/lib/runtime_tools/test/dbg_SUITE.erl
@@ -30,7 +30,7 @@
erl_tracer/1, distributed_erl_tracer/1]).
-export([tracee1/1, tracee2/1]).
-export([dummy/0, exported/1]).
--export([enabled/3, trace/6, load_nif/1]).
+-export([enabled/3, trace/5, load_nif/1]).
-include_lib("common_test/include/ct.hrl").
@@ -961,7 +961,7 @@ erl_tracer(Config) ->
{ok, _} = dbg:p(self(), [c, timestamp]),
{ok, _} = dbg:tp(?MODULE, dummy, []),
ok = ?MODULE:dummy(),
- [{Self, call, Self, Self, {?MODULE, dummy, []}, undefined, #{}}] = flush(),
+ [{Self, call, Self, Self, {?MODULE, dummy, []}, #{}}] = flush(),
ok.
%% Test that distributed erl_tracer modules work
@@ -997,10 +997,10 @@ distributed_erl_tracer(Config) ->
{ok, {?MODULE, RNifProxy}} = dbg:get_tracer(RNode),
LCall = spawn_link(LNode, fun() -> ?MODULE:dummy() end),
- [{LCall, call, LNifProxy, LCall, {?MODULE, dummy, []}, undefined, #{}}] = flush(),
+ [{LCall, call, LNifProxy, LCall, {?MODULE, dummy, []}, #{}}] = flush(),
RCall = spawn_link(RNode, fun() -> ?MODULE:dummy() end),
- [{RCall, call, RNifProxy, RCall, {?MODULE, dummy, []}, undefined, #{}}] = flush(),
+ [{RCall, call, RNifProxy, RCall, {?MODULE, dummy, []}, #{}}] = flush(),
ok.
@@ -1018,7 +1018,7 @@ load_nif(Config) ->
enabled(_, _, _) ->
erlang:nif_error(nif_not_loaded).
-trace(_, _, _, _, _, _) ->
+trace(_, _, _, _, _) ->
erlang:nif_error(nif_not_loaded).
%%
diff --git a/lib/runtime_tools/test/dbg_SUITE_data/dbg_SUITE.c b/lib/runtime_tools/test/dbg_SUITE_data/dbg_SUITE.c
index 45f14938c6..ecdee7e3a2 100644
--- a/lib/runtime_tools/test/dbg_SUITE_data/dbg_SUITE.c
+++ b/lib/runtime_tools/test/dbg_SUITE_data/dbg_SUITE.c
@@ -36,7 +36,7 @@ static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
static ErlNifFunc nif_funcs[] = {
{"enabled", 3, enabled},
- {"trace", 6, trace}
+ {"trace", 5, trace}
};
ERL_NIF_INIT(dbg_SUITE, nif_funcs, load, NULL, upgrade, unload)
@@ -93,7 +93,7 @@ static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
int state_arity;
ErlNifPid self, to;
ERL_NIF_TERM *tuple, msg;
- ASSERT(argc == 6);
+ ASSERT(argc == 5);
tuple = enif_alloc(sizeof(ERL_NIF_TERM)*(argc+1));
memcpy(tuple+1,argv,sizeof(ERL_NIF_TERM)*argc);
diff --git a/lib/runtime_tools/test/dyntrace_lttng_SUITE.erl b/lib/runtime_tools/test/dyntrace_lttng_SUITE.erl
index e6c147b003..a98ac6e99c 100644
--- a/lib/runtime_tools/test/dyntrace_lttng_SUITE.erl
+++ b/lib/runtime_tools/test/dyntrace_lttng_SUITE.erl
@@ -84,25 +84,25 @@ end_per_testcase(Case, _Config) ->
%% tracepoints
%%
-%% com_ericsson_dyntrace:gc_major_end
-%% com_ericsson_dyntrace:gc_major_start
-%% com_ericsson_dyntrace:gc_minor_end
-%% com_ericsson_dyntrace:gc_minor_start
-%% com_ericsson_dyntrace:message_receive
-%% com_ericsson_dyntrace:message_send
-%% -com_ericsson_dyntrace:message_queued
-%% com_ericsson_dyntrace:function_exception
-%% com_ericsson_dyntrace:function_return
-%% com_ericsson_dyntrace:function_call
-%% com_ericsson_dyntrace:port_link
-%% com_ericsson_dyntrace:port_exit
-%% com_ericsson_dyntrace:port_open
-%% com_ericsson_dyntrace:port_scheduled
-%% com_ericsson_dyntrace:process_scheduled
-%% com_ericsson_dyntrace:process_register
-%% com_ericsson_dyntrace:process_exit
-%% com_ericsson_dyntrace:process_link
-%% com_ericsson_dyntrace:process_spawn
+%% org_erlang_dyntrace:gc_major_end
+%% org_erlang_dyntrace:gc_major_start
+%% org_erlang_dyntrace:gc_minor_end
+%% org_erlang_dyntrace:gc_minor_start
+%% org_erlang_dyntrace:message_receive
+%% org_erlang_dyntrace:message_send
+%% -org_erlang_dyntrace:message_queued
+%% org_erlang_dyntrace:function_exception
+%% org_erlang_dyntrace:function_return
+%% org_erlang_dyntrace:function_call
+%% org_erlang_dyntrace:port_link
+%% org_erlang_dyntrace:port_exit
+%% org_erlang_dyntrace:port_open
+%% org_erlang_dyntrace:port_scheduled
+%% org_erlang_dyntrace:process_scheduled
+%% org_erlang_dyntrace:process_register
+%% org_erlang_dyntrace:process_exit
+%% org_erlang_dyntrace:process_link
+%% org_erlang_dyntrace:process_spawn
%%
%% Testcases
%%
@@ -112,7 +112,7 @@ t_lttng_list(_Config) ->
ok.
t_procs(Config) when is_list(Config) ->
- ok = lttng_start_event("com_ericsson_dyntrace:process_*", Config),
+ ok = lttng_start_event("org_erlang_dyntrace:process_*", Config),
_ = erlang:trace(new, true, [{tracer, dyntrace, []},procs]),
Pid = spawn_link(fun() -> waiter() end),
@@ -122,27 +122,27 @@ t_procs(Config) when is_list(Config) ->
_ = erlang:trace(all, false, [procs]),
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_dyntrace:process_spawn", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:process_link", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:process_exit", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:process_register", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_spawn", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_link", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_exit", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_register", Res),
ok.
t_ports(Config) when is_list(Config) ->
- ok = lttng_start_event("com_ericsson_dyntrace:port_*", Config),
+ ok = lttng_start_event("org_erlang_dyntrace:port_*", Config),
_ = erlang:trace(new, true, [{tracer, dyntrace, []},ports]),
_ = os:cmd("ls"),
_ = erlang:trace(all, false, [{tracer, dyntrace, []},ports]),
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_dyntrace:port_open", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:port_link", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:port_exit", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_open", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_link", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_exit", Res),
ok.
t_running_process(Config) when is_list(Config) ->
- ok = lttng_start_event("com_ericsson_dyntrace:process_scheduled", Config),
+ ok = lttng_start_event("org_erlang_dyntrace:process_scheduled", Config),
_ = erlang:trace(new, true, [{tracer, dyntrace, []},running]),
Pid = spawn_link(fun() -> waiter() end),
@@ -152,11 +152,11 @@ t_running_process(Config) when is_list(Config) ->
_ = erlang:trace(all, false, [running]),
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_dyntrace:process_scheduled", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_scheduled", Res),
ok.
t_running_port(Config) when is_list(Config) ->
- ok = lttng_start_event("com_ericsson_dyntrace:port_scheduled", Config),
+ ok = lttng_start_event("org_erlang_dyntrace:port_scheduled", Config),
_ = erlang:trace(new, true, [{tracer, dyntrace, []},running_ports]),
_ = os:cmd("ls"),
@@ -164,12 +164,12 @@ t_running_port(Config) when is_list(Config) ->
_ = erlang:trace(all, false, [running_ports]),
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_dyntrace:port_scheduled", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_scheduled", Res),
ok.
t_call(Config) when is_list(Config) ->
- ok = lttng_start_event("com_ericsson_dyntrace:function_*", Config),
+ ok = lttng_start_event("org_erlang_dyntrace:function_*", Config),
_ = erlang:trace(new, true, [{tracer, dyntrace, []}, call]),
_ = erlang:trace_pattern({?MODULE, '_', '_'}, [{'_',[],[{exception_trace}]}], [local]),
@@ -184,13 +184,13 @@ t_call(Config) when is_list(Config) ->
_ = erlang:trace_pattern({?MODULE, '_', '_'}, false, [local]),
_ = erlang:trace(all, false, [call]),
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_dyntrace:function_call", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:function_return", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:function_exception", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:function_call", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:function_return", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:function_exception", Res),
ok.
t_send(Config) when is_list(Config) ->
- ok = lttng_start_event("com_ericsson_dyntrace:message_send", Config),
+ ok = lttng_start_event("org_erlang_dyntrace:message_send", Config),
_ = erlang:trace(new, true, [{tracer, dyntrace, []},send]),
Pid = spawn_link(fun() -> waiter() end),
@@ -201,11 +201,11 @@ t_send(Config) when is_list(Config) ->
_ = erlang:trace(all, false, [send]),
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_dyntrace:message_send", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:message_send", Res),
ok.
t_call_return_to(Config) when is_list(Config) ->
- ok = lttng_start_event("com_ericsson_dyntrace:function_*", Config),
+ ok = lttng_start_event("org_erlang_dyntrace:function_*", Config),
_ = erlang:trace(new, true, [{tracer, dyntrace, []}, call, return_to]),
_ = erlang:trace_pattern({lists, '_', '_'}, true, [local]),
_ = erlang:trace_pattern({?MODULE, '_', '_'}, true, [local]),
@@ -219,11 +219,11 @@ t_call_return_to(Config) when is_list(Config) ->
_ = erlang:trace_pattern({lists, '_', '_'}, false, [local]),
_ = erlang:trace(all, false, [call,return_to]),
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_dyntrace:function_call", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:function_call", Res),
ok.
t_call_silent(Config) when is_list(Config) ->
- ok = lttng_start_event("com_ericsson_dyntrace:function_*", Config),
+ ok = lttng_start_event("org_erlang_dyntrace:function_*", Config),
_ = erlang:trace(new, true, [{tracer, dyntrace, []}, call, silent]),
_ = erlang:trace_pattern({?MODULE, '_', '_'}, [{'_',[],[{exception_trace}]}], [local]),
@@ -238,27 +238,33 @@ t_call_silent(Config) when is_list(Config) ->
_ = erlang:trace_pattern({?MODULE, '_', '_'}, false, [local]),
_ = erlang:trace(all, false, [call]),
Res = lttng_stop_and_view(Config),
- notfound = check_tracepoint("com_ericsson_dyntrace:function_call", Res),
- notfound = check_tracepoint("com_ericsson_dyntrace:function_return", Res),
- notfound = check_tracepoint("com_ericsson_dyntrace:function_exception", Res),
+ notfound = check_tracepoint("org_erlang_dyntrace:function_call", Res),
+ notfound = check_tracepoint("org_erlang_dyntrace:function_return", Res),
+ notfound = check_tracepoint("org_erlang_dyntrace:function_exception", Res),
ok.
t_receive(Config) when is_list(Config) ->
- ok = lttng_start_event("com_ericsson_dyntrace:message_receive", Config),
+ ok = lttng_start_event("org_erlang_dyntrace:message_receive", Config),
_ = erlang:trace(new, true, [{tracer, dyntrace, []},'receive']),
+ timer:sleep(20),
+
+ Pid1 = spawn_link(fun() -> waiter() end),
+ Pid1 ! {self(), ok},
+ ok = receive {Pid1,ok} -> ok end,
+
+ Pid2 = spawn_link(fun() -> waiter() end),
+ Pid2 ! {self(), ok},
+ ok = receive {Pid2,ok} -> ok end,
- Pid = spawn_link(fun() -> waiter() end),
- Pid ! {self(), ok},
- ok = receive {Pid,ok} -> ok end,
timer:sleep(10),
_ = erlang:trace(all, false, ['receive']),
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_dyntrace:message_receive", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:message_receive", Res),
ok.
t_garbage_collection(Config) when is_list(Config) ->
- ok = lttng_start_event("com_ericsson_dyntrace:gc_*", Config),
+ ok = lttng_start_event("org_erlang_dyntrace:gc_*", Config),
_ = erlang:trace(new, true, [{tracer, dyntrace, []},garbage_collection]),
Pid = spawn_link(fun() -> gcfier() end),
@@ -267,14 +273,14 @@ t_garbage_collection(Config) when is_list(Config) ->
timer:sleep(10),
_ = erlang:trace(all, false, [garbage_collection]),
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_dyntrace:gc_major_start", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:gc_major_end", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:gc_minor_start", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:gc_minor_end", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_major_start", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_major_end", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_minor_start", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_minor_end", Res),
ok.
t_all(Config) when is_list(Config) ->
- ok = lttng_start_event("com_ericsson_dyntrace:*", Config),
+ ok = lttng_start_event("org_erlang_dyntrace:*", Config),
_ = erlang:trace(new, true, [{tracer, dyntrace, []},all]),
Pid1 = spawn_link(fun() -> waiter() end),
@@ -291,21 +297,21 @@ t_all(Config) when is_list(Config) ->
_ = erlang:trace(all, false, [all]),
Res = lttng_stop_and_view(Config),
- ok = check_tracepoint("com_ericsson_dyntrace:process_spawn", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:process_link", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:process_exit", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:process_register", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:port_open", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:port_link", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:port_exit", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:process_scheduled", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:port_scheduled", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:message_send", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:message_receive", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:gc_major_start", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:gc_major_end", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:gc_minor_start", Res),
- ok = check_tracepoint("com_ericsson_dyntrace:gc_minor_end", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_spawn", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_link", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_exit", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_register", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_open", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_link", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_exit", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:process_scheduled", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:port_scheduled", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:message_send", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:message_receive", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_major_start", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_major_end", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_minor_start", Res),
+ ok = check_tracepoint("org_erlang_dyntrace:gc_minor_end", Res),
ok.
diff --git a/lib/sasl/doc/src/alarm_handler.xml b/lib/sasl/doc/src/alarm_handler.xml
index 8550a88b28..4160757164 100644
--- a/lib/sasl/doc/src/alarm_handler.xml
+++ b/lib/sasl/doc/src/alarm_handler.xml
@@ -54,7 +54,7 @@
format is defined by the user. For example, an event handler
for SNMP can be defined, together with an alarm Management
Information Base (MIB).</p>
- <p>The alarm handler is part of the <c>SASL</c> application.</p>
+ <p>The alarm handler is part of the SASL application.</p>
<p>When writing new event handlers for the alarm handler, the
following events must be handled:</p>
<taglist>
@@ -76,7 +76,7 @@
{NewHandler, Args})</c>. <c>NewHandler:init({Args, {alarm_handler,
Alarms}})</c> is called. For more details, see
<seealso marker="stdlib:gen_event"><c>gen_event(3)</c></seealso>
- in <c>STDLIB</c>.</p>
+ in STDLIB.</p>
</description>
<funcs>
diff --git a/lib/sasl/doc/src/appup.xml b/lib/sasl/doc/src/appup.xml
index 6fbdcb9f5b..a43a966dcb 100644
--- a/lib/sasl/doc/src/appup.xml
+++ b/lib/sasl/doc/src/appup.xml
@@ -362,12 +362,12 @@ point_of_no_return</pre>
system is restarted.</p>
<pre>
restart_new_emulator</pre>
- <p>This instruction is used when the application <c>ERTS</c>,
- <c>Kernel</c>, <c>STDLIB</c>, or <c>SASL</c> is
+ <p>This instruction is used when the application ERTS,
+ Kernel, STDLIB, or SASL is
upgraded. It shuts down the current emulator and starts a new
one. All processes are terminated gracefully, and the new
- version of <c>ERTS</c>, <c>Kernel</c>, <c>STDLIB</c>, and
- <c>SASL</c> are used when the emulator restarts.
+ version of ERTS, Kernel, STDLIB, and
+ SASL are used when the emulator restarts.
Only one <c>restart_new_emulator</c> instruction is allowed
in the <c>relup</c> file, and it must be placed first.
<seealso marker="systools#make_relup/3"><c>systools:make_relup/3,4</c></seealso>
@@ -385,7 +385,7 @@ restart_new_emulator</pre>
<warning>
<p>As stated earlier, instruction <c>restart_new_emulator</c>
causes the emulator to be restarted with new versions of
- <c>ERTS</c>, <c>Kernel</c>, <c>STDLIB</c>, and <c>SASL</c>.
+ ERTS>, Kernel, STDLIB, and SASL.
However, all other applications do at startup run their old
versions in this new emulator. This is usually no problem,
but every now and then incompatible changes occur to the
diff --git a/lib/sasl/doc/src/error_logging.xml b/lib/sasl/doc/src/error_logging.xml
index 8464a41ff9..4b2c960bbb 100644
--- a/lib/sasl/doc/src/error_logging.xml
+++ b/lib/sasl/doc/src/error_logging.xml
@@ -32,20 +32,20 @@
<rev>B</rev>
<file>error_logging.xml</file>
</header>
- <p>The <c>SASL</c> application introduces three types of reports:</p>
+ <p>The SASL application introduces three types of reports:</p>
<list type="bulleted">
<item>Supervisor report</item>
<item>Progress report</item>
<item>Crash report</item>
</list>
- <p>When the <c>SASL</c> application is started, it adds a handler that
+ <p>When the SASL application is started, it adds a handler that
formats and writes these reports, as specified in the configuration
- parameters for <c>SASL</c>, that is, the environment variables
- in the <c>SASL</c> application specification, which is found in the
- <c>.app</c> file of <c>SASL</c>. For details, see the
+ parameters for SASL, that is, the environment variables
+ in the SASL application specification, which is found in the
+ <c>.app</c> file of SASL. For details, see the
<seealso marker="sasl_app"><c>sasl(6)</c></seealso> application in the
Reference Manual and the <seealso marker="kernel:app"><c>app(4)</c></seealso>
- file in the <c>Kernel</c> Reference Manual.</p>
+ file in the Kernel Reference Manual.</p>
<section>
<title>Supervisor Report</title>
@@ -180,14 +180,14 @@
<p>The report browser is used to browse and format error reports
written by the error logger handler
<seealso marker="stdlib:log_mf_h"><c>log_mf_h</c></seealso>
- defined in <c>STDLIB</c>.</p>
+ defined in STDLIB.</p>
<p>The <c>log_mf_h</c> handler writes all reports to a
report logging directory, which is specified when
- configuring the <c>SASL</c> application.</p>
+ configuring the SASL application.</p>
<p>If the report browser is
used offline, the reports can be copied to another directory
specified when starting the browser. If no such directory
- is specified, the browser reads reports from the <c>SASL</c>
+ is specified, the browser reads reports from the SASL
<c>error_logger_mf_dir</c>.</p>
<section>
diff --git a/lib/sasl/doc/src/notes.xml b/lib/sasl/doc/src/notes.xml
index dae73f8b23..bd713af932 100644
--- a/lib/sasl/doc/src/notes.xml
+++ b/lib/sasl/doc/src/notes.xml
@@ -824,7 +824,7 @@
<list>
<item>
<p>Use an infinity timeout in all calls to
- <c>gen_server:call()</c> in the <c>sasl</c>
+ <c>gen_server:call()</c> in the SASL
application.</p>
<p>
Own Id: OTP-8506 Aux Id: seq11509 </p>
diff --git a/lib/sasl/doc/src/part.xml b/lib/sasl/doc/src/part.xml
index f531ed2dea..659710487e 100644
--- a/lib/sasl/doc/src/part.xml
+++ b/lib/sasl/doc/src/part.xml
@@ -30,7 +30,7 @@
<file>part.xml</file>
</header>
<description>
- <p>The System Architecture Support Libraries <c>SASL</c> application
+ <p>The System Architecture Support Libraries SASL application
provides support for alarm handling, release handling, and
related functions.</p>
</description>
diff --git a/lib/sasl/doc/src/rb.xml b/lib/sasl/doc/src/rb.xml
index 1ce19046eb..d5df4fd345 100644
--- a/lib/sasl/doc/src/rb.xml
+++ b/lib/sasl/doc/src/rb.xml
@@ -38,7 +38,7 @@
<p>The Report Browser (RB) tool is used to browse and
format error reports written by the error logger handler
<seealso marker="stdlib:log_mf_h"><c>log_mf_h</c></seealso>
- in <c>STDLIB</c>.</p>
+ in STDLIB.</p>
</description>
<funcs>
@@ -62,7 +62,7 @@
reports that match that filter.</p>
<p>The reports are matched using the
<seealso marker="stdlib:proplists"><c>proplists</c></seealso>
- module in <c>STDLIB</c>. The report must be a proplist
+ module in STDLIB. The report must be a proplist
to be matched against any of the filters.</p>
<p>If the filter has the form <c>{Key, RegExp, re}</c>, the
report must contain an element with key equal to <c>Key</c> and
@@ -102,7 +102,7 @@
</list>
<p>For a definition of valid regular expressions and options, see
the <seealso marker="stdlib:re"><c>re</c></seealso> module in
- <c>STDLIB</c> and in particular function <c>re:run/3</c>.</p>
+ STDLIB and in particular function <c>re:run/3</c>.</p>
<p>For details about data type <c>mp()</c>, see
<seealso marker="stdlib:re#type-mp"><c>re:mp()</c></seealso>.</p>
</desc>
diff --git a/lib/sasl/doc/src/ref_man.xml b/lib/sasl/doc/src/ref_man.xml
index 42045df5ec..78cf1eb26e 100644
--- a/lib/sasl/doc/src/ref_man.xml
+++ b/lib/sasl/doc/src/ref_man.xml
@@ -30,7 +30,7 @@
<file>application.xml</file>
</header>
<description>
- <p>The <c>SASL</c> application provides support for alarm handling,
+ <p>The SASL application provides support for alarm handling,
release handling, and related functions.</p>
</description>
<xi:include href="sasl_app.xml"/>
diff --git a/lib/sasl/doc/src/rel.xml b/lib/sasl/doc/src/rel.xml
index d6558c06b4..9356b2cd47 100644
--- a/lib/sasl/doc/src/rel.xml
+++ b/lib/sasl/doc/src/rel.xml
@@ -59,7 +59,7 @@
<tag><c>Vsn = string()</c></tag>
<item><p>Release version.</p></item>
<tag><c>EVsn = string()</c></tag>
- <item><p><c>ERTS</c> version the release is intended for.</p></item>
+ <item><p>ERTS version the release is intended for.</p></item>
<tag><c>Application = atom()</c></tag>
<item><p>Name of an application included in the release.</p></item>
<tag><c>AppVsn = string()</c></tag>
@@ -82,8 +82,8 @@
to the same value as in the application resource file.</p></item>
</taglist>
<note>
- <p>The list of applications must contain the <c>Kernel</c> and
- <c>STDLIB</c> applications.</p>
+ <p>The list of applications must contain the Kernel and
+ STDLIB applications.</p>
</note>
</section>
diff --git a/lib/sasl/doc/src/release_handler.xml b/lib/sasl/doc/src/release_handler.xml
index bcbc5f5339..8f073807fb 100644
--- a/lib/sasl/doc/src/release_handler.xml
+++ b/lib/sasl/doc/src/release_handler.xml
@@ -31,7 +31,7 @@
<module>release_handler</module>
<modulesummary>Unpacking and Installation of Release Packages</modulesummary>
<description>
- <p>The <em>release handler</em> process belongs to the <c>SASL</c>
+ <p>The <em>release handler</em> process belongs to the SASL
application, which is responsible for <em>release handling</em>,
that is, unpacking, installation, and removal of release packages.</p>
<p>An introduction to release handling and an example is provided in
@@ -44,7 +44,7 @@
directory of the previous version of the release, where
<c>$ROOT</c> is the installation root directory,
<seealso marker="kernel:code#root_dir/0"><c>code:root_dir()</c></seealso>.
- Another <c>releases</c> directory can be specified using the <c>SASL</c>
+ Another <c>releases</c> directory can be specified using the SASL
configuration parameter <c>releases_dir</c> or the OS environment
variable <c>RELDIR</c>. The release handler must have write access
to this directory to install the new release.
@@ -56,7 +56,7 @@
<item>A boot script, <c>Name.boot</c></item>
</list>
<p>The <c>.rel</c> file contains information about the release: its name,
- version, and which <c>ERTS</c> and application versions it uses.</p>
+ version, and which ERTS and application versions it uses.</p>
<p>A release package can also contain:</p>
<list type="bulleted">
<item>A release upgrade file, <c>relup</c></item>
@@ -115,7 +115,7 @@
<em>System Documentation</em>. In this case, the system
configuration file <c>sys.config</c> is mandatory.</p>
<p>The installation of a new release can restart the system. Which
- program to use is specified by the <c>SASL</c> configuration
+ program to use is specified by the SASL configuration
parameter <c>start_prg</c>, which defaults
to <c>$ROOT/bin/start</c>.</p>
<p>The emulator restart on Windows NT expects that the system is
@@ -132,7 +132,7 @@
is made permanent.</p>
<p>The release handler at a node running on a diskless machine,
or with a read-only file system, must be configured accordingly
- using the following <c>SASL</c> configuration parameters (for
+ using the following SASL configuration parameters (for
details, see <seealso marker="sasl_app">sasl(6)</seealso>):</p>
<taglist>
<tag><c>masters</c></tag>
@@ -287,7 +287,7 @@
returned, the emulator is restarted
before the upgrade instructions are executed. This
occurs if the emulator or any of the applications
- <c>Kernel</c>, <c>STDLIB</c>, or <c>SASL</c>
+ Kernel, STDLIB, or SASL
are updated. The new emulator version
and these core applications execute after the restart.
For all other applications the old versions are
@@ -310,13 +310,13 @@
<tag><c>code_change_timeout</c></tag>
<item><p>Defines the time-out
for all calls to
- <seealso marker="stdlib:sys#change_code/4"><c>stdlib:sys:change_code</c></seealso>.
+ <seealso marker="stdlib:sys#change_code/4"><c>sys:change_code</c></seealso>.
If no value is specified or <c>default</c> is specified, the
default value defined in <c>sys</c> is used.</p></item>
<tag><c>suspend_timeout</c></tag>
<item><p>Defines the time-out for
all calls to
- <seealso marker="stdlib:sys#suspend/1"><c>stdlib:sys:suspend</c></seealso>.
+ <seealso marker="stdlib:sys#suspend/1"><c>sys:suspend</c></seealso>.
If no value is specified, the values defined by the <c>Timeout</c>
parameter of the <c>upgrade</c> or <c>suspend</c> instructions are used.
If <c>default</c> is specified, the default value defined in
@@ -342,7 +342,7 @@ release_handler:set_unpacked(RelFile, [{myapp,"1.0","/home/user"},...]).
=> {ok,NewVsn}</code>
<p>If <c>NewVsn</c> is installed with option
<c>{update_paths,true}</c>, then
- <seealso marker="kernel:code#lib_dir/1"><c>kernel:code:lib_dir(myapp)</c></seealso>
+ <seealso marker="kernel:code#lib_dir/1"><c>code:lib_dir(myapp)</c></seealso>
returns <c>/home/user/myapp-1.0</c>.</p></item>
</taglist>
<note>
@@ -801,7 +801,7 @@ release_handler:set_unpacked(RelFile, [{myapp,"1.0","/home/user"},...]).
is an atom named from the Posix error codes, such as
<c>enoent</c>, <c>eacces</c>, or <c>eisdir</c>. See
<seealso marker="kernel:file"><c>file(3)</c></seealso>
- in <c>Kernel</c>.</p></item>
+ in Kernel.</p></item>
<tag><c>Posix</c></tag>
<item><p>Some file operation failed, as for the previous item in
the list.</p></item>
diff --git a/lib/sasl/doc/src/sasl_app.xml b/lib/sasl/doc/src/sasl_app.xml
index 52f449c2a8..0576397f9b 100644
--- a/lib/sasl/doc/src/sasl_app.xml
+++ b/lib/sasl/doc/src/sasl_app.xml
@@ -31,17 +31,17 @@
<app>sasl</app>
<appsummary>The SASL application</appsummary>
<description>
- <p>The <c>SASL</c> application provides the following services:</p>
+ <p>The SASL application provides the following services:</p>
<list type="bulleted">
<item><c>alarm_handler</c></item>
<item><c>rb</c></item>
<item><c>release_handler</c></item>
<item><c>systools</c></item>
</list>
- <p>The <c>SASL</c> application also includes <c>error_logger</c> event
- handlers for formatting <c>SASL</c> error and crash reports.</p>
+ <p>The SASL application also includes <c>error_logger</c> event
+ handlers for formatting SASL error and crash reports.</p>
<note>
- <p>The <c>SASL</c> application in OTP has nothing to do with
+ <p>The SASL application in OTP has nothing to do with
"Simple Authentication and Security Layer" (RFC 4422).</p>
</note>
</description>
@@ -49,7 +49,7 @@
<section>
<title>Error Logger Event Handlers</title>
<p>The following error logger event handlers are used by
- the <c>SASL</c> application.</p>
+ the SASL application.</p>
<taglist>
<tag><c>sasl_report_tty_h</c></tag>
<item>
@@ -57,7 +57,7 @@
reports</em>, and <em>progress reports</em> to <c>stdio</c>.
This error logger event handler uses
<seealso marker="kernel:kernel_app#error_logger_format_depth">error_logger_format_depth</seealso>
- in the <c>Kernel</c> application to limit how much detail is
+ in the Kernel application to limit how much detail is
printed in crash and supervisor reports.</p>
</item>
<tag><c>sasl_report_file_h</c></tag>
@@ -66,7 +66,7 @@
report</em>, and <em>progress report</em> to a single file.
This error logger event handler uses
<seealso marker="kernel:kernel_app#error_logger_format_depth">error_logger_format_depth</seealso>
- in the <c>Kernel</c> application to limit the details
+ in the Kernel application to limit the details
printed in crash and supervisor reports.</p>
</item>
<tag><c>log_mf_h</c></tag>
@@ -75,9 +75,9 @@
error logger to disk. Multiple files and log rotation are
used. For efficiency reasons, each event is written as a
binary. For more information about this handler,
- see <seealso marker="stdlib:log_mf_h">the <c>STDLIB</c> Reference
+ see <seealso marker="stdlib:log_mf_h">the STDLIB Reference
Manual</seealso>.</p>
- <p>To activate this event handler, three <c>SASL</c>
+ <p>To activate this event handler, three SASL
configuration parameters must be set,
<c>error_logger_mf_dir</c>, <c>error_logger_mf_maxbytes</c>,
and <c>error_logger_mf_maxfiles</c>. The next section provides
@@ -88,9 +88,9 @@
<section>
<title>Configuration</title>
- <p>The following configuration parameters are defined for the <c>SASL</c>
+ <p>The following configuration parameters are defined for the SASL
application. For more information about configuration parameters, see
- <seealso marker="kernel:app"><c>app(4)</c></seealso> in <c>Kernel</c>.</p>
+ <seealso marker="kernel:app"><c>app(4)</c></seealso> in Kernel.</p>
<p>All configuration parameters are optional.</p>
<taglist>
<tag><c><![CDATA[sasl_error_logger = Value ]]></c></tag>
@@ -112,7 +112,7 @@
Use <c>[append]</c> to have the <c>FileName</c> open in append mode.
<c>FileName</c> is a string.</p></item>
<tag><c>false</c></tag>
- <item><p>No <c>SASL</c> error logger handler is installed.</p></item>
+ <item><p>No SASL error logger handler is installed.</p></item>
</taglist>
</item>
<tag><c><![CDATA[errlog_type = error | progress | all ]]></c></tag>
diff --git a/lib/sasl/doc/src/sasl_intro.xml b/lib/sasl/doc/src/sasl_intro.xml
index b71dafb192..f74a7c1db8 100644
--- a/lib/sasl/doc/src/sasl_intro.xml
+++ b/lib/sasl/doc/src/sasl_intro.xml
@@ -32,7 +32,7 @@
<section>
<title>Scope</title>
- <p>The <c>SASL</c> application provides support for:</p>
+ <p>The SASL application provides support for:</p>
<list type="bulleted">
<item>Error logging</item>
<item>Alarm handling</item>
diff --git a/lib/sasl/doc/src/systools.xml b/lib/sasl/doc/src/systools.xml
index 7446762de4..fa503fa573 100644
--- a/lib/sasl/doc/src/systools.xml
+++ b/lib/sasl/doc/src/systools.xml
@@ -85,7 +85,7 @@
</item>
<item>
<p>If the emulator needs to be restarted after upgrading or
- downgrading, that is, if the <c>ERTS</c> version differs
+ downgrading, that is, if the ERTS version differs
between <c>Name.rel</c> and <c>Name2.rel</c></p>
</item>
</list>
@@ -201,10 +201,10 @@
between the applications. Where there are no dependencies,
the order in the <c>.rel</c> file is kept.</p>
<p>The function fails if the mandatory
- applications <c>Kernel</c> and <c>STDLIB</c> are not
+ applications Kernel and STDLIB are not
included in the <c>.rel</c> file and have start
type <c>permanent</c> (which is default).</p>
- <p>If <c>SASL</c> is not included as an application in
+ <p>If SASL is not included as an application in
the <c>.rel</c> file, a warning is issued because such a
release cannot be used in an upgrade. To turn off this
warning, add option <c>no_warn_sasl</c>.</p>
diff --git a/lib/sasl/src/sasl.app.src b/lib/sasl/src/sasl.app.src
index 9c912fb8c3..633cdfa070 100644
--- a/lib/sasl/src/sasl.app.src
+++ b/lib/sasl/src/sasl.app.src
@@ -45,6 +45,6 @@
{env, [{sasl_error_logger, tty},
{errlog_type, all}]},
{mod, {sasl, []}},
- {runtime_dependencies, ["tools-2.6.14","stdlib-2.8","kernel-4.1",
- "erts-6.0"]}]}.
+ {runtime_dependencies, ["tools-2.6.14","stdlib-3.0","kernel-5.0",
+ "erts-8.1"]}]}.
diff --git a/lib/sasl/src/systools_make.erl b/lib/sasl/src/systools_make.erl
index 352e4984df..efe6cc9eb4 100644
--- a/lib/sasl/src/systools_make.erl
+++ b/lib/sasl/src/systools_make.erl
@@ -1491,8 +1491,9 @@ mandatory_modules() ->
preloaded() ->
%% Sorted
[erl_prim_loader,erl_tracer,erlang,
- erts_code_purger,
- erts_internal,init,otp_ring0,prim_eval,prim_file,
+ erts_code_purger,erts_dirty_process_code_checker,
+ erts_internal,erts_literal_area_collector,
+ init,otp_ring0,prim_eval,prim_file,
prim_inet,prim_zip,zlib].
%%______________________________________________________________________
diff --git a/lib/sasl/test/release_handler_SUITE.erl b/lib/sasl/test/release_handler_SUITE.erl
index 4dcaec03a7..10d2539b7f 100644
--- a/lib/sasl/test/release_handler_SUITE.erl
+++ b/lib/sasl/test/release_handler_SUITE.erl
@@ -1063,6 +1063,12 @@ otp_9395_check_and_purge(cleanup,_Conf) ->
%% OTP-9395 - performance problems when there are MANY processes
%% Upgrade which updates many modules (brutal_purge)
otp_9395_update_many_mods(Conf) when is_list(Conf) ->
+
+ %% "nain" is very slow - it fails this test quite often due to a
+ %% long sys call
+ %% /proc/cpuinfo: "clock: 1249MHz"
+ inet:gethostname() == {ok,"nain"} andalso throw({skip,"slow test host"}),
+
%% Set some paths
PrivDir = priv_dir(Conf),
Dir = filename:join(PrivDir,"otp_9395_update_many_mods"),
@@ -1103,6 +1109,7 @@ otp_9395_update_many_mods(Conf) when is_list(Conf) ->
[RelVsn2, filename:join(Rel2Dir, "sys.config")]),
%% First, install release directly and check how much time it takes
+ rpc:call(Node,erlang,garbage_collect,[]),
rpc:call(Node,erlang,system_flag,[scheduler_wall_time,true]),
{TInst0,{ok, _, []}} =
timer:tc(rpc,call,[Node, release_handler, install_release, [RelVsn2]]),
@@ -1129,6 +1136,7 @@ otp_9395_update_many_mods(Conf) when is_list(Conf) ->
%% Finally install release after check and purge, and check that
%% this install was faster than the first.
rpc:call(Node,erlang,system_flag,[scheduler_wall_time,false]),
+ rpc:call(Node,erlang,garbage_collect,[]),
rpc:call(Node,erlang,system_flag,[scheduler_wall_time,true]),
{TInst2,{ok, _RelVsn1, []}} =
timer:tc(rpc,call,[Node, release_handler, install_release, [RelVsn2]]),
@@ -1160,6 +1168,12 @@ otp_9395_update_many_mods(cleanup,_Conf) ->
%% OTP-9395 - performance problems when there are MANY processes
%% Upgrade which removes many modules (brutal_purge)
otp_9395_rm_many_mods(Conf) when is_list(Conf) ->
+
+ %% "nain" is very slow - it fails this test quite often due to a
+ %% long sys call
+ %% /proc/cpuinfo: "clock: 1249MHz"
+ inet:gethostname() == {ok,"nain"} andalso throw({skip,"slow test host"}),
+
%% Set some paths
PrivDir = priv_dir(Conf),
Dir = filename:join(PrivDir,"otp_9395_rm_many_mods"),
@@ -1200,6 +1214,7 @@ otp_9395_rm_many_mods(Conf) when is_list(Conf) ->
[RelVsn2, filename:join(Rel2Dir, "sys.config")]),
%% First, install release directly and check how much time it takes
+ rpc:call(Node,erlang,garbage_collect,[]),
rpc:call(Node,erlang,system_flag,[scheduler_wall_time,true]),
{TInst0,{ok, _, []}} =
timer:tc(rpc,call,[Node, release_handler, install_release, [RelVsn2]]),
@@ -1226,6 +1241,7 @@ otp_9395_rm_many_mods(Conf) when is_list(Conf) ->
%% Finally install release after check and purge, and check that
%% this install was faster than the first.
rpc:call(Node,erlang,system_flag,[scheduler_wall_time,false]),
+ rpc:call(Node,erlang,garbage_collect,[]),
rpc:call(Node,erlang,system_flag,[scheduler_wall_time,true]),
{TInst2,{ok, _RelVsn1, []}} =
timer:tc(rpc,call,[Node, release_handler, install_release, [RelVsn2]]),
@@ -1366,7 +1382,7 @@ upgrade_supervisor(Conf) when is_list(Conf) ->
ASupBeam2 = rpc:call(Node, code, which, [a_sup]),
%% Check that the restart strategy and child spec is updated
- {status, _, {module, _}, [_, _, _, _, [_,_,{data,[{"State",State}]}]]} =
+ {status, _, {module, _}, [_, _, _, _, [_,_,{data,[{"State",State}]}|_]]} =
rpc:call(Node,sys,get_status,[a_sup]),
{state,_,RestartStrategy,[Child],_,_,_,_,_,_,_} = State,
one_for_all = RestartStrategy, % changed from one_for_one
@@ -1761,8 +1777,6 @@ upgrade_gg(Conf) ->
Nodes1 = [Gg1,Gg3,Gg4,Gg5] =
start_nodes(Conf,[Gg1Sname,Gg3Sname,Gg4Sname,Gg5Sname],"upgrade_gg"),
- %% Give some time to synch nodes, then check global group info.
- timer:sleep(1000),
[check_gg_info(Node,Nodes1,[],Nodes1--[Node]) || Node <- Nodes1],
%% register a process on each of the nodes
@@ -1918,7 +1932,7 @@ wait_nodes_up(Nodes, Tag) ->
wait_nodes_up(Nodes0, Tag, Apps) ->
?t:format("wait_nodes_up(~p, ~p, ~p):",[Nodes0, Tag, Apps]),
Nodes = fix_nodes(Nodes0),
- wait_nodes_up(Nodes, Tag, lists:umerge(Apps,[kernel,stdlib,sasl]), 30).
+ wait_nodes_up(Nodes, Tag, lists:umerge(Apps,[kernel,stdlib,sasl]), 60).
fix_nodes([{Node,InitPid}|Nodes]) ->
[{Node,InitPid} | fix_nodes(Nodes)];
@@ -1960,7 +1974,7 @@ wait_nodes_up(Nodes, Tag, Apps, N) ->
?t:format("",[]),
ok;
_ ->
- timer:sleep(1000),
+ timer:sleep(2000),
wait_nodes_up(Pang, Tag, Apps, N-1)
end.
@@ -2449,37 +2463,27 @@ write_term_file(File,Term) ->
ok = file:write_file(File,io_lib:format("~p.~n",[Term])).
-%% Check that global group info is correct
+%% Check that global group info is correct - try again for a maximum of 5 sec
check_gg_info(Node,OtherAlive,OtherDead,Synced) ->
+ check_gg_info(Node,OtherAlive,OtherDead,Synced,5).
+
+check_gg_info(Node,OtherAlive,OtherDead,Synced,N) ->
GGI = rpc:call(Node, global_group, info, []),
GI = rpc:call(Node, global, info,[]),
try do_check_gg_info(OtherAlive,OtherDead,Synced,GGI,GI)
- catch _:E ->
- ?t:format("~ncheck_gg_info failed for ~p: ~p~nwhen GGI was: ~p~n"
- "and GI was: ~p~n",
- [Node,E,GGI,GI]),
- %% An attempt to find out if it is only a timing issue
- %% that makes this fail every now and then:
- try_again_check(Node,GGI,GI,1),
- ?t:fail("check_gg_info failed")
- end.
-
-try_again_check(_Node,_GGI,_GI,6) ->
- ok;
-try_again_check(Node,GGI,GI,N) ->
- timer:sleep(1000),
- case {rpc:call(Node,global_group,info,[]),
- rpc:call(Node,global,info,[])} of
- {GGI,GI} ->
- ?t:format("~nAfter one more sek, GGI and GI are still the same"),
- try_again_check(Node,GGI,GI,N+1);
- {NewGGI,NewGI} ->
- ?t:format("~nAfter one more sek:~nNew GGI: ~p~nNew GI: ~p~n",
- [NewGGI,NewGI]),
- try_again_check(Node,NewGGI,NewGI,N+1)
+ catch _:E when N==0 ->
+ ?t:format("~nERROR: check_gg_info failed for ~p:~n~p~n"
+ "when GGI was: ~p~nand GI was: ~p~n",
+ [Node,{E,erlang:get_stacktrace()},GGI,GI]),
+ ?t:fail("check_gg_info failed");
+ _:E ->
+ ?t:format("~nWARNING: check_gg_info failed for ~p:~n~p~n"
+ "when GGI was: ~p~nand GI was: ~p~n",
+ [Node,{E,erlang:get_stacktrace()},GGI,GI]),
+ timer:sleep(1000),
+ check_gg_info(Node,OtherAlive,OtherDead,Synced,N-1)
end.
-
do_check_gg_info(OtherAlive,OtherDead,Synced,GGI,GI) ->
{_,gg1} = lists:keyfind(own_group_name,1,GGI),
{_,synced} = lists:keyfind(state,1,GGI),
diff --git a/lib/sasl/test/rh_test_lib.erl b/lib/sasl/test/rh_test_lib.erl
index 11935496d8..dacd8b6b9f 100644
--- a/lib/sasl/test/rh_test_lib.erl
+++ b/lib/sasl/test/rh_test_lib.erl
@@ -18,7 +18,7 @@ cmd(Cmd,Args,Env) ->
case open_port({spawn_executable, Cmd}, [{args,Args},{env,Env}]) of
Port when is_port(Port) ->
unlink(Port),
- erlang:port_close(Port),
+ catch erlang:port_close(Port), % migth already be closed, so catching
ok;
Error ->
Error
diff --git a/lib/snmp/src/agent/snmpa_conf.erl b/lib/snmp/src/agent/snmpa_conf.erl
index 94325a8ed6..fc5116dac9 100644
--- a/lib/snmp/src/agent/snmpa_conf.erl
+++ b/lib/snmp/src/agent/snmpa_conf.erl
@@ -154,7 +154,7 @@ do_write_agent_conf(Fd, {intAgentMaxPacketSize = Tag, Val} ) ->
do_write_agent_conf(Fd, {snmpEngineMaxMessageSize = Tag, Val} ) ->
io:format(Fd, "{~w, ~w}.~n", [Tag, Val]);
do_write_agent_conf(Fd, {snmpEngineID = Tag, Val} ) ->
- io:format(Fd, "{~w, \"~s\"}.~n", [Tag, Val]);
+ io:format(Fd, "{~w, ~p}.~n", [Tag, Val]);
do_write_agent_conf(_Fd, Crap) ->
error({bad_agent_config, Crap}).
@@ -758,9 +758,9 @@ do_write_usm_conf(
PrivP, PrivKeyC, OwnPrivKeyC,
Public, AuthKey, PrivKey}) ->
io:format(Fd, "{", []),
- io:format(Fd, "\"~s\", ", [EngineID]),
- io:format(Fd, "\"~s\", ", [UserName]),
- io:format(Fd, "\"~s\", ", [SecName]),
+ io:format(Fd, "~p, ", [EngineID]),
+ io:format(Fd, "~p, ", [UserName]),
+ io:format(Fd, "~p, ", [SecName]),
io:format(Fd, "~w, ", [Clone]),
io:format(Fd, "~w, ", [AuthP]),
do_write_usm2(Fd, AuthKeyC, ", "),
@@ -859,15 +859,15 @@ do_write_vacm_conf(
{vacmSecurityToGroup,
SecModel, SecName, GroupName}) ->
io:format(
- Fd, "{vacmSecurityToGroup, ~w, \"~s\", \"~s\"}.~n",
+ Fd, "{vacmSecurityToGroup, ~w, ~p, ~p}.~n",
[SecModel, SecName, GroupName]);
do_write_vacm_conf(
Fd,
{vacmAccess,
GroupName, Prefix, SecModel, SecLevel, Match, RV, WV, NV}) ->
io:format(
- Fd, "{vacmAccess, \"~s\", \"~s\", ~w, ~w, ~w, "
- "\"~s\", \"~s\", \"~s\"}.~n",
+ Fd, "{vacmAccess, ~p, ~p, ~w, ~w, ~w, "
+ "~p, ~p, ~p}.~n",
[GroupName, Prefix, SecModel, SecLevel,
Match, RV, WV, NV]);
do_write_vacm_conf(
@@ -875,7 +875,7 @@ do_write_vacm_conf(
{vacmViewTreeFamily,
ViewIndex, ViewSubtree, ViewStatus, ViewMask}) ->
io:format(
- Fd, "{vacmViewTreeFamily, \"~s\", ~w, ~w, ~w}.~n",
+ Fd, "{vacmViewTreeFamily, ~p, ~w, ~w, ~w}.~n",
[ViewIndex, ViewSubtree, ViewStatus, ViewMask]);
do_write_vacm_conf(_Fd, Crap) ->
error({bad_vacm_config, Crap}).
diff --git a/lib/snmp/src/app/snmp.app.src b/lib/snmp/src/app/snmp.app.src
index b593e9ea84..d25f66f44a 100644
--- a/lib/snmp/src/app/snmp.app.src
+++ b/lib/snmp/src/app/snmp.app.src
@@ -23,12 +23,12 @@
{vsn, "%VSN%"},
{modules, [
%% Compiler modules (not in the runtime part of the app)
-% snmpc,
-% snmpc_lib,
-% snmpc_mib_gram,
-% snmpc_mib_to_hrl,
-% snmpc_misc,
-% snmpc_tok,
+ snmpc,
+ snmpc_lib,
+ snmpc_mib_gram,
+ snmpc_mib_to_hrl,
+ snmpc_misc,
+ snmpc_tok,
%% Application modules
snmp,
diff --git a/lib/snmp/src/compile/snmpc.erl b/lib/snmp/src/compile/snmpc.erl
index db1f9ee61b..d86692aaf6 100644
--- a/lib/snmp/src/compile/snmpc.erl
+++ b/lib/snmp/src/compile/snmpc.erl
@@ -64,7 +64,7 @@ compile(Input, _Output, Options) ->
{ok, _} ->
ok;
{error, Reason} ->
- io:format("~p", [Reason]),
+ io:format("~tp", [Reason]),
error
end.
@@ -126,7 +126,14 @@ compile(FileName) ->
%%----------------------------------------------------------------------
compile(FileName, Options) when is_list(FileName) ->
- true = snmpc_misc:is_string(FileName),
+ case snmpc_misc:check_file(FileName) of
+ true ->
+ compile_1(FileName, Options);
+ false ->
+ {error, {invalid_file, FileName}}
+ end.
+
+compile_1(FileName, Options) ->
DefOpts = [{deprecated, true},
{group_check, true},
{i, ["./"]},
diff --git a/lib/snmp/src/compile/snmpc_misc.erl b/lib/snmp/src/compile/snmpc_misc.erl
index 933d629746..312074f2e7 100644
--- a/lib/snmp/src/compile/snmpc_misc.erl
+++ b/lib/snmp/src/compile/snmpc_misc.erl
@@ -29,7 +29,7 @@
bits_to_int/2,
ensure_trailing_dir_delimiter/1,
foreach/3,
- is_string/1,
+ check_file/1,
read_mib/1,
read_noexit/2,
strip_extension_from_filename/2,
@@ -86,21 +86,21 @@ to_upper([C|Cs]) -> [C|to_upper(Cs)];
to_upper([]) -> [].
-is_string([]) -> true;
-is_string([Tkn | Str])
- when is_integer(Tkn) andalso (Tkn >= 0) andalso (Tkn =< 255) ->
- is_string(Str);
-is_string(_) -> false.
-
-
+check_file(FileName) ->
+ case filename:extension(FileName) of
+ ".mib" ->
+ filelib:is_regular(FileName);
+ _ ->
+ filelib:is_regular(FileName ++ ".mib")
+ end.
+
+
foreach(Function, ExtraArgs, [H | T]) ->
apply(Function, [H | ExtraArgs]),
foreach(Function, ExtraArgs, T);
foreach(_Function, _ExtraArgs, []) ->
true.
-
-
%%----------------------------------------------------------------------
%% Returns: {ok, Mib}|{error, Reason}
%% The reason for having the function if this module is:
diff --git a/lib/snmp/test/modules.mk b/lib/snmp/test/modules.mk
index 87539f88f7..0f54e67c65 100644
--- a/lib/snmp/test/modules.mk
+++ b/lib/snmp/test/modules.mk
@@ -31,6 +31,7 @@ SUITE_MODULES = \
snmp_agent_mibs_test \
snmp_agent_nfilter_test \
snmp_agent_test \
+ snmp_agent_conf_test \
snmp_agent_test_lib \
snmp_manager_config_test \
snmp_manager_user \
diff --git a/lib/snmp/test/snmp_SUITE.erl b/lib/snmp/test/snmp_SUITE.erl
index 3b9219739b..05bd86253b 100644
--- a/lib/snmp/test/snmp_SUITE.erl
+++ b/lib/snmp/test/snmp_SUITE.erl
@@ -81,7 +81,8 @@ groups() ->
{group, note_store_test}]},
{agent, [], [{group, mibs_test},
{group, nfilter_test},
- {group, agent_test},
+ {group, agent_test},
+ {group, agent_conf_test},
{group, snmpnet_test}]},
{manager, [], [{group, manager_config_test},
{group, manager_user_test},
@@ -97,6 +98,7 @@ groups() ->
{mibs_test, [], [{snmp_agent_mibs_test, all}]},
{nfilter_test, [], [{snmp_agent_nfilter_test, all}]},
{agent_test, [], [{snmp_agent_test, all}]},
+ {agent_conf_test, [], [{snmp_agent_conf_test, all}]},
{snmpnet_test, [], [{snmp_to_snmpnet_SUITE, all}]},
{manager_config_test, [], [{snmp_manager_config_test, all}]},
{manager_user_test, [], [{snmp_manager_user_test, all}]},
diff --git a/lib/snmp/test/snmp_agent_conf_test.erl b/lib/snmp/test/snmp_agent_conf_test.erl
new file mode 100644
index 0000000000..0a22bd47d1
--- /dev/null
+++ b/lib/snmp/test/snmp_agent_conf_test.erl
@@ -0,0 +1,210 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2003-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+-module(snmp_agent_conf_test).
+
+%%----------------------------------------------------------------------
+%% Include files
+%%----------------------------------------------------------------------
+
+%-include_lib("test_server/include/test_server.hrl").
+%-include("snmp_test_lib.hrl").
+-include_lib("common_test/include/ct.hrl").
+
+-export([
+ all/0,
+ groups/0,
+ init_per_suite/1,
+ end_per_suite/1,
+
+ check_agent/1,
+ check_usm/1,
+ check_vacm/1
+ ]).
+
+
+all() -> [
+ check_agent,
+ check_usm,
+ check_vacm
+ ].
+
+
+groups() ->
+ [].
+
+
+init_per_suite(Config) ->
+ PrivDir = ?config(priv_dir, Config),
+ PrivSubdir = filename:join(PrivDir, "snmp_agent_conf_test"),
+ ok = filelib:ensure_dir(filename:join(PrivSubdir, "dummy")),
+ [{priv_subdir, PrivSubdir} | Config].
+
+end_per_suite(_Config) ->
+ ok.
+
+%%======================================================================
+%% Test data
+%%======================================================================
+
+engine_ids() -> [
+ "plain eid",
+ "here\"eid",
+ "comes\neid",
+ "trouble\0eid",
+ binary_to_list(<<"中国引擎标识符"/utf8>>)
+].
+
+snmp_admin_strings() -> [
+ "plain string",
+ "heres\"eid",
+ "trouble\neid",
+ binary_to_list(<<"中国引擎标识符"/utf8>>)
+].
+
+
+%%======================================================================
+%% Test functions
+%%======================================================================
+
+
+check_agent(Config) ->
+ Dir = ?config(priv_subdir, Config),
+ lists:foreach(
+ fun(EngineId) -> check_agent_by_engineid(Dir, EngineId) end,
+ engine_ids()
+ ),
+ ok.
+
+check_agent_by_engineid(Dir, EngineId) ->
+ WEntries = [
+ snmpa_conf:agent_entry(intAgentIpAddress, {0,0,0,0}),
+ snmpa_conf:agent_entry(intAgentUDPPort, 161),
+ snmpa_conf:agent_entry(snmpEngineMaxMessageSize, 484),
+ snmpa_conf:agent_entry(snmpEngineID, EngineId)
+ ],
+
+ ok = snmpa_conf:write_agent_config(Dir, WEntries),
+ {ok, REntries} = snmpa_conf:read_agent_config(Dir),
+
+ true = is_subset(WEntries, REntries),
+ ok.
+
+%%======================================================================
+
+check_usm(Config) ->
+ Dir = ?config(priv_subdir, Config),
+ EngineId = hd(engine_ids()),
+ UserName = hd(snmp_admin_strings()),
+ SecName = hd(snmp_admin_strings()),
+
+ %% vary engine id
+ lists:foreach(
+ fun(EngineId_) -> check_usm_by_params(Dir, EngineId_, UserName, SecName) end,
+ engine_ids()
+ ),
+
+ %% vary user name
+ lists:foreach(
+ fun(UserName_) -> check_usm_by_params(Dir, EngineId, UserName_, SecName) end,
+ snmp_admin_strings()
+ ),
+
+ %% vary sec name
+ lists:foreach(
+ fun(SecName_) -> check_usm_by_params(Dir, EngineId, UserName, SecName_) end,
+ snmp_admin_strings()
+ ),
+
+ ok.
+
+check_usm_by_params(Dir, EngineId, UserName, SecName) ->
+ WEntries = [
+ snmpa_conf:usm_entry(
+ EngineId,
+ UserName,
+ SecName,
+ zeroDotZero,
+ usmNoAuthProtocol, % authproto
+ "", "",
+ usmNoPrivProtocol, % privproto
+ "", "", "",
+ [], %AuthKey
+ []) %PrivKey
+ ],
+
+ ok = snmpa_conf:write_usm_config(Dir, WEntries),
+ {ok, REntries} = snmpa_conf:read_usm_config(Dir),
+
+ true = is_subset(WEntries, REntries),
+ ok.
+
+%%======================================================================
+
+check_vacm(Config) ->
+ Dir = ?config(priv_subdir, Config),
+
+ %% vary sec name
+ lists:foreach(
+ fun(SecName_) -> check_vacm_by_params(Dir, SecName_) end,
+ snmp_admin_strings()
+ ),
+
+ ok.
+
+
+check_vacm_by_params(Dir, SecName) ->
+ WEntries = [
+ %% SecModel, SecName, GroupName
+ snmpa_conf:vacm_s2g_entry(usm, SecName, SecName),
+ %% GroupName,Prefix,SecModel,SecLevel,Match,ReadView,WriteView,NotifyView
+ snmpa_conf:vacm_acc_entry(SecName, "", any, noAuthNoPriv, exact, "all", "all", "all")
+ ],
+
+ ok = snmpa_conf:write_vacm_config(Dir, WEntries),
+ {ok, REntries} = snmpa_conf:read_vacm_config(Dir),
+
+ true = is_subset(WEntries, REntries),
+ ok.
+
+
+
+%%======================================================================
+
+
+%% additional tests needed:
+% check_context()
+% check_community()
+% check_standard()
+% check_target_addr()
+% check_target_params()
+% check_notify()
+
+
+%%======================================================================
+%% Local utility functions
+%%======================================================================
+
+is_subset(List1, List2) ->
+ io:format("Check ~p is subset of ~p\n", [List1, List2]),
+ sets:is_subset(
+ sets:from_list(List1),
+ sets:from_list(List2)
+ ).
diff --git a/lib/snmp/test/snmp_agent_test.erl b/lib/snmp/test/snmp_agent_test.erl
index 8ae495bb1b..3c1a6f2afd 100644
--- a/lib/snmp/test/snmp_agent_test.erl
+++ b/lib/snmp/test/snmp_agent_test.erl
@@ -647,22 +647,22 @@ init_per_group(GroupName, Config) ->
snmp_test_lib:init_group_top_dir(GroupName, Config).
init_per_group_ipv6(GroupName, Config, Init) ->
+ {ok, Hostname0} = inet:gethostname(),
case ct:require(ipv6_hosts) of
ok ->
- case gen_udp:open(0, [inet6]) of
- {ok, S} ->
- ok = gen_udp:close(S),
- Init(
- snmp_test_lib:init_group_top_dir(
- GroupName,
- [{ipfamily, inet6},
- {ip, ?LOCALHOST(inet6)}
- | lists:keydelete(ip, 1, Config)]));
- {error, _} ->
- {skip, "Host seems to not support IPv6"}
- end;
+ case lists:member(list_to_atom(Hostname0), ct:get_config(ipv6_hosts)) of
+ true ->
+ Init(
+ snmp_test_lib:init_group_top_dir(
+ GroupName,
+ [{ipfamily, inet6},
+ {ip, ?LOCALHOST(inet6)}
+ | lists:keydelete(ip, 1, Config)]));
+ false ->
+ {skip, "Host does not support IPV6"}
+ end;
_ ->
- {skip, "Host does not support IPV6"}
+ {skip, "Test config ipv6_hosts is missing"}
end.
end_per_group(all_tcs, Config) ->
diff --git a/lib/snmp/test/snmp_app_test.erl b/lib/snmp/test/snmp_app_test.erl
index 6e7e85d3b4..5e69866f9a 100644
--- a/lib/snmp/test/snmp_app_test.erl
+++ b/lib/snmp/test/snmp_app_test.erl
@@ -23,366 +23,29 @@
%%----------------------------------------------------------------------
-module(snmp_app_test).
--export([
- all/0, groups/0,
- init_per_group/2, end_per_group/2,
- init_per_suite/1, end_per_suite/1,
- init_per_testcase/2, end_per_testcase/2,
+%% Note: This directive should only be used in test suites.
+-compile(export_all).
- fields/1,
- modules/1,
- exportall/1,
- app_depend/1,
-
- start_and_stop_empty/1,
- start_and_stop_with_agent/1,
- start_and_stop_with_manager/1,
- start_and_stop_with_agent_and_manager/1,
- start_epmty_and_then_agent_and_manager_and_stop/1,
- start_with_agent_and_then_manager_and_stop/1,
- start_with_manager_and_then_agent_and_stop/1
- ]).
-
-
--include_lib("kernel/include/file.hrl").
-include_lib("common_test/include/ct.hrl").
--include("snmp_test_lib.hrl").
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%--------------------------------------------------------------------
+%% Common Test interface functions -----------------------------------
+%%--------------------------------------------------------------------
all() ->
- Cases =
- [
- fields,
- modules,
- exportall,
- app_depend,
- {group, start_and_stop}
- ],
- Cases.
-
-groups() ->
- [{start_and_stop, [],
- [start_and_stop_empty,
- start_and_stop_with_agent,
- start_and_stop_with_manager,
- start_and_stop_with_agent_and_manager,
- start_epmty_and_then_agent_and_manager_and_stop,
- start_with_agent_and_then_manager_and_stop,
- start_with_manager_and_then_agent_and_stop]}].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-init_per_suite(Config) when is_list(Config) ->
- ?DISPLAY_SUITE_INFO(),
-
- %% Note that part of this stuff (the suite top dir creation)
- %% may already be done (if we run the entire snmp suite).
-
- PrivDir = ?config(priv_dir, Config),
- TopDir = filename:join(PrivDir, app),
- case file:make_dir(TopDir) of
- ok ->
- ok;
- {error, eexist} ->
- ok;
- Error ->
- fail({failed_creating_subsuite_top_dir, Error})
- end,
- AppFile =
- case is_app() of
- {ok, File} ->
- io:format("File: ~n~p~n", [File]),
- snmp:print_version_info(),
- File;
- {error, Reason} ->
- fail(Reason)
- end,
- [{app_topdir, TopDir}, {app_file, AppFile} | Config].
-
-
-is_app() ->
- is_app(?APPLICATION).
-
-is_app(App) ->
- LibDir = code:lib_dir(App),
- File = filename:join([LibDir, "ebin", atom_to_list(App) ++ ".app"]),
- case file:consult(File) of
- {ok, [{application, App, AppFile}]} ->
- {ok, AppFile};
- Error ->
- {error, {invalid_format, Error}}
- end.
-
-end_per_suite(suite) -> [];
-end_per_suite(doc) -> [];
-end_per_suite(Config) when is_list(Config) ->
- Config.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%% Test server callbacks
-init_per_testcase(_Case, Config) ->
- Config.
-
-end_per_testcase(_Case, Config) ->
- Config.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-fields(suite) ->
- [];
-fields(doc) ->
- [];
-fields(Config) when is_list(Config) ->
- AppFile = key1search(app_file, Config),
- Fields = [vsn, description, modules, registered, applications],
- case check_fields(Fields, AppFile, []) of
- [] ->
- ok;
- Missing ->
- fail({missing_fields, Missing})
- end.
-
-check_fields([], _AppFile, Missing) ->
- Missing;
-check_fields([Field|Fields], AppFile, Missing) ->
- check_fields(Fields, AppFile, check_field(Field, AppFile, Missing)).
-
-check_field(Name, AppFile, Missing) ->
- io:format("checking field: ~p~n", [Name]),
- case lists:keymember(Name, 1, AppFile) of
- true ->
- Missing;
- false ->
- [Name|Missing]
- end.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-modules(suite) ->
- [];
-modules(doc) ->
- [];
-modules(Config) when is_list(Config) ->
- AppFile = key1search(app_file, Config),
- Mods = key1search(modules, AppFile),
- EbinList = get_ebin_mods(snmp),
- case missing_modules(Mods, EbinList, []) of
- [] ->
- ok;
- Missing ->
- fail({missing_modules, Missing})
- end,
- Allowed = [snmpc,
- snmpc_lib,
- snmpc_misc,
- snmpc_mib_gram,
- snmpc_mib_to_hrl,
- snmpc_tok],
- case extra_modules(Mods, EbinList, Allowed, []) of
- [] ->
- ok;
- Extra ->
- fail({extra_modules, Extra})
- end,
- {ok, Mods}.
-
-get_ebin_mods(App) ->
- LibDir = code:lib_dir(App),
- EbinDir = filename:join([LibDir,"ebin"]),
- {ok, Files0} = file:list_dir(EbinDir),
- Files1 = [lists:reverse(File) || File <- Files0],
- [list_to_atom(lists:reverse(Name)) || [$m,$a,$e,$b,$.|Name] <- Files1].
-
-
-missing_modules([], _Ebins, Missing) ->
- Missing;
-missing_modules([Mod|Mods], Ebins, Missing) ->
- case lists:member(Mod, Ebins) of
- true ->
- missing_modules(Mods, Ebins, Missing);
- false ->
- io:format("missing module: ~p~n", [Mod]),
- missing_modules(Mods, Ebins, [Mod|Missing])
- end.
-
-
-extra_modules(_Mods, [], Allowed, Extra) ->
- Extra--Allowed;
-extra_modules(Mods, [Mod|Ebins], Allowed, Extra) ->
- case lists:member(Mod, Mods) of
- true ->
- extra_modules(Mods, Ebins, Allowed, Extra);
- false ->
- io:format("superfluous module: ~p~n", [Mod]),
- extra_modules(Mods, Ebins, Allowed, [Mod|Extra])
- end.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-exportall(suite) ->
- [];
-exportall(doc) ->
- [];
-exportall(Config) when is_list(Config) ->
- AppFile = key1search(app_file, Config),
- Mods = key1search(modules, AppFile),
- check_export_all(Mods).
-
-
-check_export_all([]) ->
- ok;
-check_export_all([Mod|Mods]) ->
- case (catch apply(Mod, module_info, [compile])) of
- {'EXIT', {undef, _}} ->
- check_export_all(Mods);
- O ->
- case lists:keysearch(options, 1, O) of
- false ->
- check_export_all(Mods);
- {value, {options, List}} ->
- case lists:member(export_all, List) of
- true ->
- fail({export_all, Mod});
- false ->
- check_export_all(Mods)
- end
- end
- end.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-app_depend(suite) ->
- [];
-app_depend(doc) ->
- [];
-app_depend(Config) when is_list(Config) ->
- AppFile = key1search(app_file, Config),
- Apps = key1search(applications, AppFile),
- check_apps(Apps).
-
-
-check_apps([]) ->
- ok;
-check_apps([App|Apps]) ->
- case is_app(App) of
- {ok, _} ->
- check_apps(Apps);
- Error ->
- throw({error, {missing_app, {App, Error}}})
- end.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-start_and_stop_empty(suite) ->
- [];
-start_and_stop_empty(doc) ->
- ["Start and stop the application empty (no configured components)"];
-start_and_stop_empty(Config) when is_list(Config) ->
- ?line false = ?IS_SNMP_RUNNING(),
-
- ?line ok = snmp:start(),
-
- ?line true = ?IS_SNMP_RUNNING(),
-
- ?line ok = snmp:stop(),
-
- ?line false = ?IS_SNMP_RUNNING(),
-
- ok.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-start_and_stop_with_agent(suite) ->
- [];
-start_and_stop_with_agent(doc) ->
- ["Start and stop the application with the agent pre-configured"];
-start_and_stop_with_agent(Config) when is_list(Config) ->
- ?SKIP(not_implemented_yet).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-start_and_stop_with_manager(suite) ->
- [];
-start_and_stop_with_manager(doc) ->
- ["Start and stop the application with the manager pre-configured"];
-start_and_stop_with_manager(Config) when is_list(Config) ->
- ?SKIP(not_implemented_yet).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-start_and_stop_with_agent_and_manager(suite) ->
- [];
-start_and_stop_with_agent_and_manager(doc) ->
- ["Start and stop the application with both the agent "
- "and the manager pre-configured"];
-start_and_stop_with_agent_and_manager(Config) when is_list(Config) ->
- ?SKIP(not_implemented_yet).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-start_epmty_and_then_agent_and_manager_and_stop(suite) ->
- [];
-start_epmty_and_then_agent_and_manager_and_stop(doc) ->
- ["Start the application empty, then start the agent and then "
- "the manager and then stop the application"];
-start_epmty_and_then_agent_and_manager_and_stop(Config) when is_list(Config) ->
- ?SKIP(not_implemented_yet).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-start_with_agent_and_then_manager_and_stop(suite) ->
- [];
-start_with_agent_and_then_manager_and_stop(doc) ->
- ["Start the application with the agent pre-configured, "
- "then start the manager and then stop the application"];
-start_with_agent_and_then_manager_and_stop(Config) when is_list(Config) ->
- ?SKIP(not_implemented_yet).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-start_with_manager_and_then_agent_and_stop(suite) ->
- [];
-start_with_manager_and_then_agent_and_stop(doc) ->
- ["Start the application with the manager pre-configured, "
- "then start the agent and then stop the application"];
-start_with_manager_and_then_agent_and_stop(Config) when is_list(Config) ->
- ?SKIP(not_implemented_yet).
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-fail(Reason) ->
- exit({suite_failed, Reason}).
-
-key1search(Key, L) ->
- case lists:keysearch(Key, 1, L) of
- undefined ->
- fail({not_found, Key, L});
- {value, {Key, Value}} ->
- Value
- end.
+ [
+ app,
+ appup
+ ].
+
+%%--------------------------------------------------------------------
+%% Test Cases --------------------------------------------------------
+%%--------------------------------------------------------------------
+app() ->
+ [{doc, "Test that the snmp app file is ok"}].
+app(Config) when is_list(Config) ->
+ ok = test_server:app_test(snmp).
+%%--------------------------------------------------------------------
+appup() ->
+ [{doc, "Test that the snmp appup file is ok"}].
+appup(Config) when is_list(Config) ->
+ ok = test_server:appup_test(snmp).
diff --git a/lib/snmp/test/snmp_manager_test.erl b/lib/snmp/test/snmp_manager_test.erl
index d17882e765..71f4017d8b 100644
--- a/lib/snmp/test/snmp_manager_test.erl
+++ b/lib/snmp/test/snmp_manager_test.erl
@@ -583,38 +583,38 @@ init_per_group(event_tests_mt = GroupName, Config) ->
GroupName,
[{manager_net_if_module, snmpm_net_if_mt} | Config]);
init_per_group(ipv6_mt = GroupName, Config) ->
+ {ok, Hostname0} = inet:gethostname(),
case ct:require(ipv6_hosts) of
ok ->
- case gen_udp:open(0, [inet6]) of
- {ok, S} ->
- ok = gen_udp:close(S),
+ case lists:member(list_to_atom(Hostname0), ct:get_config(ipv6_hosts)) of
+ true ->
ipv6_init(
snmp_test_lib:init_group_top_dir(
GroupName,
[{manager_net_if_module, snmpm_net_if_mt}
| Config]));
- {error, _} ->
- {skip, "Host seems to not support IPv6"}
+ false ->
+ {skip, "Host does not support IPv6"}
end;
_ ->
- {skip, "Host does not support IPV6"}
+ {skip, "Test config ipv6_hosts is missing"}
end;
init_per_group(ipv6 = GroupName, Config) ->
+ {ok, Hostname0} = inet:gethostname(),
case ct:require(ipv6_hosts) of
ok ->
- case gen_udp:open(0, [inet6]) of
- {ok, S} ->
- ok = gen_udp:close(S),
+ case lists:member(list_to_atom(Hostname0), ct:get_config(ipv6_hosts)) of
+ true ->
ipv6_init(snmp_test_lib:init_group_top_dir(GroupName, Config));
- {error, _} ->
- {skip, "Host seems to not support IPv6"}
+ false ->
+ {skip, "Host does not support IPv6"}
end;
_ ->
- {skip, "Host does not support IPV6"}
+ {skip, "Test config ipv6_hosts is missing"}
end;
init_per_group(GroupName, Config) ->
snmp_test_lib:init_group_top_dir(GroupName, Config).
-
+
end_per_group(_GroupName, Config) ->
%% Do we really need to do this?
lists:keydelete(snmp_group_top_dir, 1, Config).
diff --git a/lib/snmp/test/snmp_to_snmpnet_SUITE.erl b/lib/snmp/test/snmp_to_snmpnet_SUITE.erl
index ac9e37bc8b..24c14d86ea 100644
--- a/lib/snmp/test/snmp_to_snmpnet_SUITE.erl
+++ b/lib/snmp/test/snmp_to_snmpnet_SUITE.erl
@@ -121,14 +121,14 @@ init_per_group(_, Config) ->
Config.
init_per_group_ipv6(Families, Config) ->
+ {ok, Hostname0} = inet:gethostname(),
case ct:require(ipv6_hosts) of
ok ->
- case gen_udp:open(0, [inet6]) of
- {ok, S} ->
- ok = gen_udp:close(S),
+ case lists:member(list_to_atom(Hostname0), ct:get_config(ipv6_hosts)) of
+ true ->
init_per_group_ip(Families, Config);
- {error, _} ->
- {skip, "Host seems to not support IPv6"}
+ false ->
+ {skip, "Host does not support IPv6"}
end;
_ ->
{skip, "Test config ipv6_hosts is missing"}
diff --git a/lib/ssh/doc/src/notes.xml b/lib/ssh/doc/src/notes.xml
index bab0c39b99..f9d11b2a60 100644
--- a/lib/ssh/doc/src/notes.xml
+++ b/lib/ssh/doc/src/notes.xml
@@ -30,12 +30,44 @@
<file>notes.xml</file>
</header>
+<section><title>Ssh 4.3.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ SSH client does not any longer retry a bad password given
+ as option to ssh:connect et al.</p>
+ <p>
+ Own Id: OTP-13674 Aux Id: TR-HU92273 </p>
+ </item>
+ <item>
+ <p>
+ Removed possible hanging risk for a certain timing
+ sequence when communicating client and server executes on
+ the same node.</p>
+ <p>
+ Own Id: OTP-13715</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Ssh 4.3</title>
<section><title>Improvements and New Features</title>
<list>
<item>
<p>
+ A socket created and connected by gen_tcp could now be
+ used as input to ssh:connect, ssh:shell,
+ ssh_sftp:start_channel and ssh:daemon.</p>
+ <p>
+ Own Id: OTP-12860</p>
+ </item>
+ <item>
+ <p>
Some time optimization mainly in message encoding.</p>
<p>
Own Id: OTP-13131</p>
@@ -60,12 +92,12 @@
unchanged the ssh module does not demonstrate the full
potential of the new behaviour.</p>
<p>
- The "new" state machine uses compund states. The ssh
+ The "new" state machine uses compound states. The ssh
server and client state machines are quite similar but
differences exist. With <c>gen_fsm</c> there were flags
in the user data which in fact implemented "substates".
Now with <c>gen_statem</c> those are made explicit in the
- state names, eg the state <c>userauth</c> and the binary
+ state names, eg. the state <c>userauth</c> and the binary
<c>role</c>-flag becomes the two state names
<c>{userauth, server}</c> and <c>{userauth, client}</c>.</p>
<p>
@@ -80,6 +112,12 @@
</item>
<item>
<p>
+ Added -spec in ssh</p>
+ <p>
+ Own Id: OTP-13479</p>
+ </item>
+ <item>
+ <p>
It is now possible to call <c>ssh:daemon/{1,2,3}</c> with
<c>Port=0</c>. This makes the daemon select a free
listening tcp port before opening it. To find this port
@@ -94,6 +132,22 @@
</section>
+<section><title>Ssh 4.2.2.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ SSH client does not any longer retry a bad password given
+ as option to ssh:connect et al.</p>
+ <p>
+ Own Id: OTP-13674 Aux Id: TR-HU92273 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Ssh 4.2.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/ssh/doc/src/ssh.xml b/lib/ssh/doc/src/ssh.xml
index ff2d6e082a..ef9f7cbd9b 100644
--- a/lib/ssh/doc/src/ssh.xml
+++ b/lib/ssh/doc/src/ssh.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2004</year><year>2015</year>
+ <year>2004</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -125,8 +125,10 @@
<func>
<name>connect(Host, Port, Options) -> </name>
- <name>connect(Host, Port, Options, Timeout) -> {ok,
- ssh_connection_ref()} | {error, Reason}</name>
+ <name>connect(Host, Port, Options, Timeout) -> </name>
+ <name>connect(TcpSocket, Options) -> </name>
+ <name>connect(TcpSocket, Options, Timeout) ->
+ {ok, ssh_connection_ref()} | {error, Reason}</name>
<fsummary>Connects to an SSH server.</fsummary>
<type>
<v>Host = string()</v>
@@ -137,6 +139,8 @@
<v>Timeout = infinity | integer()</v>
<d>Negotiation time-out in milli-seconds. The default value is <c>infinity</c>.
For connection time-out, use option <c>{connect_timeout, timeout()}</c>.</d>
+ <v>TcpSocket = port()</v>
+ <d>The socket is supposed to be from <seealso marker="kernel:gen_tcp#connect-3">gen_tcp:connect</seealso> or <seealso marker="kernel:gen_tcp#accept-1">gen_tcp:accept</seealso> with option <c>{active,false}</c></d>
</type>
<desc>
<p>Connects to an SSH server. No channel is started. This is done
@@ -347,8 +351,9 @@
<func>
<name>daemon(Port) -> </name>
<name>daemon(Port, Options) -> </name>
- <name>daemon(HostAddress, Port, Options) -> {ok,
- ssh_daemon_ref()} | {error, atom()}</name>
+ <name>daemon(HostAddress, Port, Options) -> </name>
+ <name>daemon(TcpSocket) -> </name>
+ <name>daemon(TcpSocket, Options) -> {ok, ssh_daemon_ref()} | {error, atom()}</name>
<fsummary>Starts a server listening for SSH connections
on the given port.</fsummary>
<type>
@@ -357,6 +362,8 @@
<v>Options = [{Option, Value}]</v>
<v>Option = atom()</v>
<v>Value = term()</v>
+ <v>TcpSocket = port()</v>
+ <d>The socket is supposed to be from <seealso marker="kernel:gen_tcp#connect-3">gen_tcp:connect</seealso> or <seealso marker="kernel:gen_tcp#accept-1">gen_tcp:accept</seealso> with option <c>{active,false}</c></d>
</type>
<desc>
<p>Starts a server listening for SSH connections on the given
@@ -718,12 +725,15 @@
<func>
<name>shell(Host) -> </name>
<name>shell(Host, Option) -> </name>
- <name>shell(Host, Port, Option) -> _</name>
+ <name>shell(Host, Port, Option) -> </name>
+ <name>shell(TcpSocket) -> _</name>
<fsummary>Starts an interactive shell over an SSH server.</fsummary>
<type>
<v>Host = string()</v>
<v>Port = integer()</v>
<v>Options - see ssh:connect/3</v>
+ <v>TcpSocket = port()</v>
+ <d>The socket is supposed to be from <seealso marker="kernel:gen_tcp#connect-3">gen_tcp:connect</seealso> or <seealso marker="kernel:gen_tcp#accept-1">gen_tcp:accept</seealso> with option <c>{active,false}</c></d>
</type>
<desc>
<p>Starts an interactive shell over an SSH server on the
@@ -746,7 +756,7 @@
<p>Utility function that starts the applications <c>crypto</c>, <c>public_key</c>,
and <c>ssh</c>. Default type is <c>temporary</c>.
For more information, see the <seealso marker="kernel:application">application(3)</seealso>
- manual page in <c>kernel</c>.</p>
+ manual page in Kernel.</p>
</desc>
</func>
@@ -759,7 +769,7 @@
<desc>
<p>Stops the <c>ssh</c> application.
For more information, see the <seealso marker="kernel:application">application(3)</seealso>
- manual page in <c>kernel</c>.</p>
+ manual page in Kernel.</p>
</desc>
</func>
diff --git a/lib/ssh/doc/src/ssh_app.xml b/lib/ssh/doc/src/ssh_app.xml
index f6ce44c015..5cc4c24889 100644
--- a/lib/ssh/doc/src/ssh_app.xml
+++ b/lib/ssh/doc/src/ssh_app.xml
@@ -4,7 +4,7 @@
<appref>
<header>
<copyright>
- <year>2012</year><year>2015</year>
+ <year>2012</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -203,7 +203,7 @@
<section>
<title>Unicode support</title>
<p>Unicode filenames are supported if the emulator and the underlaying OS support it. See section DESCRIPTION in the
- <seealso marker="kernel:file">file</seealso> manual page in <c>kernel</c> for information about this subject.
+ <seealso marker="kernel:file">file</seealso> manual page in Kernel for information about this subject.
</p>
<p>The shell and the cli both support unicode.
</p>
diff --git a/lib/ssh/doc/src/ssh_channel.xml b/lib/ssh/doc/src/ssh_channel.xml
index 907b0b3bec..7b598494f7 100644
--- a/lib/ssh/doc/src/ssh_channel.xml
+++ b/lib/ssh/doc/src/ssh_channel.xml
@@ -139,7 +139,7 @@
enters the <c>ssh_channel</c> process receive loop and become an
<c>ssh_channel process</c>. The process must have been started using
one of the start functions in <c>proc_lib</c>, see the <seealso
- marker="stdlib:proc_lib">proc_lib(3)</seealso> manual page in <c>stdlib</c>.
+ marker="stdlib:proc_lib">proc_lib(3)</seealso> manual page in STDLIB.
The user is responsible for any initialization of the process
and must call <seealso marker = "#init-1">ssh_channel:init/1</seealso>.
</p>
diff --git a/lib/ssh/doc/src/ssh_sftp.xml b/lib/ssh/doc/src/ssh_sftp.xml
index 071d46ec57..eb6f43d417 100644
--- a/lib/ssh/doc/src/ssh_sftp.xml
+++ b/lib/ssh/doc/src/ssh_sftp.xml
@@ -527,15 +527,24 @@
<func>
<name>start_channel(ConnectionRef) -></name>
- <name>start_channel(ConnectionRef, Options) -></name>
+ <name>start_channel(ConnectionRef, Options) ->
+ {ok, Pid} | {error, reason()|term()}</name>
+
<name>start_channel(Host, Options) -></name>
- <name>start_channel(Host, Port, Options) -> {ok, Pid} | {ok, Pid, ConnectionRef} |
- {error, reason()|term()}</name>
+ <name>start_channel(Host, Port, Options) ->
+ {ok, Pid, ConnectionRef} | {error, reason()|term()}</name>
+
+ <name>start_channel(TcpSocket) -></name>
+ <name>start_channel(TcpSocket, Options) ->
+ {ok, Pid, ConnectionRef} | {error, reason()|term()}</name>
+
<fsummary>Starts an SFTP client.</fsummary>
<type>
<v>Host = string()</v>
<v>ConnectionRef = ssh_connection_ref()</v>
<v>Port = integer()</v>
+ <v>TcpSocket = port()</v>
+ <d>The socket is supposed to be from <seealso marker="kernel:gen_tcp#connect-3">gen_tcp:connect</seealso> or <seealso marker="kernel:gen_tcp#accept-1">gen_tcp:accept</seealso> with option <c>{active,false}</c></d>
<v>Options = [{Option, Value}]</v>
</type>
<desc>
diff --git a/lib/ssh/src/ssh.app.src b/lib/ssh/src/ssh.app.src
index 3245ba5197..76b7d8cd55 100644
--- a/lib/ssh/src/ssh.app.src
+++ b/lib/ssh/src/ssh.app.src
@@ -45,7 +45,7 @@
"erts-6.0",
"kernel-3.0",
"public_key-1.1",
- "stdlib-3.0"
+ "stdlib-3.1"
]}]}.
diff --git a/lib/ssh/src/ssh.erl b/lib/ssh/src/ssh.erl
index 09b07b7a2a..1d7be3547b 100644
--- a/lib/ssh/src/ssh.erl
+++ b/lib/ssh/src/ssh.erl
@@ -27,7 +27,9 @@
-include_lib("public_key/include/public_key.hrl").
-include_lib("kernel/include/file.hrl").
--export([start/0, start/1, stop/0, connect/3, connect/4, close/1, connection_info/2,
+-export([start/0, start/1, stop/0,
+ connect/2, connect/3, connect/4,
+ close/1, connection_info/2,
channel_info/3,
daemon/1, daemon/2, daemon/3,
daemon_info/1,
@@ -50,16 +52,15 @@
%% is temporary. see application(3)
%%--------------------------------------------------------------------
start() ->
- application:start(crypto),
- application:start(asn1),
- application:start(public_key),
- application:start(ssh).
+ start(temporary).
start(Type) ->
- application:start(crypto, Type),
- application:start(asn1),
- application:start(public_key, Type),
- application:start(ssh, Type).
+ case application:ensure_all_started(ssh, Type) of
+ {ok, _} ->
+ ok;
+ Other ->
+ Other
+ end.
%%--------------------------------------------------------------------
-spec stop() -> ok | {error, term()}.
@@ -70,13 +71,36 @@ stop() ->
application:stop(ssh).
%%--------------------------------------------------------------------
--spec connect(string(), integer(), proplists:proplist()) -> {ok, pid()} | {error, term()}.
+-spec connect(port(), proplists:proplist()) -> {ok, pid()} | {error, term()}.
+
+-spec connect(port(), proplists:proplist(), timeout()) -> {ok, pid()} | {error, term()}
+ ; (string(), integer(), proplists:proplist()) -> {ok, pid()} | {error, term()}.
+
-spec connect(string(), integer(), proplists:proplist(), timeout()) -> {ok, pid()} | {error, term()}.
%%
%% Description: Starts an ssh connection.
%%--------------------------------------------------------------------
-connect(Host, Port, Options) ->
+connect(Socket, Options) ->
+ connect(Socket, Options, infinity).
+
+connect(Socket, Options, Timeout) when is_port(Socket) ->
+ case handle_options(Options) of
+ {error, Error} ->
+ {error, Error};
+ {_SocketOptions, SshOptions} ->
+ case valid_socket_to_use(Socket, Options) of
+ ok ->
+ {ok, {Host,_Port}} = inet:sockname(Socket),
+ Opts = [{user_pid,self()}, {host,fmt_host(Host)} | SshOptions],
+ ssh_connection_handler:start_connection(client, Socket, Opts, Timeout);
+ {error,SockError} ->
+ {error,SockError}
+ end
+ end;
+
+connect(Host, Port, Options) when is_integer(Port), Port>0 ->
connect(Host, Port, Options, infinity).
+
connect(Host, Port, Options, Timeout) ->
case handle_options(Options) of
{error, _Reason} = Error ->
@@ -103,59 +127,47 @@ connect(Host, Port, Options, Timeout) ->
-spec close(pid()) -> ok.
%%
%% Description: Closes an ssh connection.
-%%--------------------------------------------------------------------
+%%--------------------------------------------------------------------
close(ConnectionRef) ->
ssh_connection_handler:stop(ConnectionRef).
%%--------------------------------------------------------------------
-spec connection_info(pid(), [atom()]) -> [{atom(), term()}].
%%
-%% Description: Retrieves information about a connection.
-%%--------------------------------------------------------------------
+%% Description: Retrieves information about a connection.
+%%--------------------------------------------------------------------
connection_info(ConnectionRef, Options) ->
ssh_connection_handler:connection_info(ConnectionRef, Options).
%%--------------------------------------------------------------------
-spec channel_info(pid(), channel_id(), [atom()]) -> [{atom(), term()}].
%%
-%% Description: Retrieves information about a connection.
-%%--------------------------------------------------------------------
+%% Description: Retrieves information about a connection.
+%%--------------------------------------------------------------------
channel_info(ConnectionRef, ChannelId, Options) ->
ssh_connection_handler:channel_info(ConnectionRef, ChannelId, Options).
%%--------------------------------------------------------------------
-spec daemon(integer()) -> {ok, pid()} | {error, term()}.
--spec daemon(integer(), proplists:proplist()) -> {ok, pid()} | {error, term()}.
+-spec daemon(integer()|port(), proplists:proplist()) -> {ok, pid()} | {error, term()}.
-spec daemon(any | inet:ip_address(), integer(), proplists:proplist()) -> {ok, pid()} | {error, term()}.
-%% Description: Starts a server listening for SSH connections
+%% Description: Starts a server listening for SSH connections
%% on the given port.
-%%--------------------------------------------------------------------
+%%--------------------------------------------------------------------
daemon(Port) ->
daemon(Port, []).
-daemon(Port, Options) ->
- daemon(any, Port, Options).
+daemon(Port, Options) when is_integer(Port) ->
+ daemon(any, Port, Options);
+
+daemon(Socket, Options0) when is_port(Socket) ->
+ Options = daemon_shell_opt(Options0),
+ start_daemon(Socket, Options).
daemon(HostAddr, Port, Options0) ->
- Options1 = case proplists:get_value(shell, Options0) of
- undefined ->
- [{shell, {shell, start, []}} | Options0];
- _ ->
- Options0
- end,
-
- {Host, Inet, Options} = case HostAddr of
- any ->
- {ok, Host0} = inet:gethostname(),
- {Host0, proplists:get_value(inet, Options1, inet), Options1};
- {_,_,_,_} ->
- {HostAddr, inet,
- [{ip, HostAddr} | Options1]};
- {_,_,_,_,_,_,_,_} ->
- {HostAddr, inet6,
- [{ip, HostAddr} | Options1]}
- end,
+ Options1 = daemon_shell_opt(Options0),
+ {Host, Inet, Options} = daemon_host_inet_opt(HostAddr, Options1),
start_daemon(Host, Port, Options, Inet).
%%--------------------------------------------------------------------
@@ -175,9 +187,9 @@ daemon_info(Pid) ->
-spec stop_listener(pid()) -> ok.
-spec stop_listener(inet:ip_address(), integer()) -> ok.
%%
-%% Description: Stops the listener, but leaves
+%% Description: Stops the listener, but leaves
%% existing connections started by the listener up and running.
-%%--------------------------------------------------------------------
+%%--------------------------------------------------------------------
stop_listener(SysSup) ->
ssh_system_sup:stop_listener(SysSup).
stop_listener(Address, Port) ->
@@ -189,9 +201,9 @@ stop_listener(Address, Port, Profile) ->
-spec stop_daemon(pid()) -> ok.
-spec stop_daemon(inet:ip_address(), integer()) -> ok.
%%
-%% Description: Stops the listener and all connections started by
+%% Description: Stops the listener and all connections started by
%% the listener.
-%%--------------------------------------------------------------------
+%%--------------------------------------------------------------------
stop_daemon(SysSup) ->
ssh_system_sup:stop_system(SysSup).
stop_daemon(Address, Port) ->
@@ -199,8 +211,8 @@ stop_daemon(Address, Port) ->
stop_daemon(Address, Port, Profile) ->
ssh_system_sup:stop_system(Address, Port, Profile).
%%--------------------------------------------------------------------
--spec shell(string()) -> _.
--spec shell(string(), proplists:proplist()) -> _.
+-spec shell(port() | string()) -> _.
+-spec shell(port() | string(), proplists:proplist()) -> _.
-spec shell(string(), integer(), proplists:proplist()) -> _.
%% Host = string()
@@ -212,51 +224,167 @@ stop_daemon(Address, Port, Profile) ->
%% and will not return until the remote shell is ended.(e.g. on
%% exit from the shell)
%%--------------------------------------------------------------------
+shell(Socket) when is_port(Socket) ->
+ shell(Socket, []);
shell(Host) ->
shell(Host, ?SSH_DEFAULT_PORT, []).
+
+shell(Socket, Options) when is_port(Socket) ->
+ start_shell( connect(Socket, Options) );
shell(Host, Options) ->
shell(Host, ?SSH_DEFAULT_PORT, Options).
+
shell(Host, Port, Options) ->
- case connect(Host, Port, Options) of
- {ok, ConnectionRef} ->
- case ssh_connection:session_channel(ConnectionRef, infinity) of
- {ok,ChannelId} ->
- success = ssh_connection:ptty_alloc(ConnectionRef, ChannelId, []),
- Args = [{channel_cb, ssh_shell},
- {init_args,[ConnectionRef, ChannelId]},
- {cm, ConnectionRef}, {channel_id, ChannelId}],
- {ok, State} = ssh_channel:init([Args]),
- ssh_channel:enter_loop(State);
- Error ->
- Error
- end;
+ start_shell( connect(Host, Port, Options) ).
+
+
+start_shell({ok, ConnectionRef}) ->
+ case ssh_connection:session_channel(ConnectionRef, infinity) of
+ {ok,ChannelId} ->
+ success = ssh_connection:ptty_alloc(ConnectionRef, ChannelId, []),
+ Args = [{channel_cb, ssh_shell},
+ {init_args,[ConnectionRef, ChannelId]},
+ {cm, ConnectionRef}, {channel_id, ChannelId}],
+ {ok, State} = ssh_channel:init([Args]),
+ ssh_channel:enter_loop(State);
Error ->
Error
- end.
+ end;
+start_shell(Error) ->
+ Error.
%%--------------------------------------------------------------------
%%--------------------------------------------------------------------
-default_algorithms() ->
+default_algorithms() ->
ssh_transport:default_algorithms().
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
+valid_socket_to_use(Socket, Options) ->
+ case proplists:get_value(transport, Options, {tcp, gen_tcp, tcp_closed}) of
+ {tcp,_,_} ->
+ %% Is this tcp-socket a valid socket?
+ case {is_tcp_socket(Socket),
+ {ok,[{active,false}]} == inet:getopts(Socket, [active])
+ }
+ of
+ {true, true} ->
+ ok;
+ {true, false} ->
+ {error, not_passive_mode};
+ _ ->
+ {error, not_tcp_socket}
+ end;
+ {L4,_,_} ->
+ {error, {unsupported,L4}}
+ end.
+
+is_tcp_socket(Socket) -> {ok,[]} =/= inet:getopts(Socket, [delay_send]).
+
+
+
+daemon_shell_opt(Options) ->
+ case proplists:get_value(shell, Options) of
+ undefined ->
+ [{shell, {shell, start, []}} | Options];
+ _ ->
+ Options
+ end.
+
+daemon_host_inet_opt(HostAddr, Options1) ->
+ case HostAddr of
+ any ->
+ {ok, Host0} = inet:gethostname(),
+ {Host0, proplists:get_value(inet, Options1, inet), Options1};
+ {_,_,_,_} ->
+ {HostAddr, inet,
+ [{ip, HostAddr} | Options1]};
+ {_,_,_,_,_,_,_,_} ->
+ {HostAddr, inet6,
+ [{ip, HostAddr} | Options1]}
+ end.
+
+
+start_daemon(Socket, Options) ->
+ case handle_options(Options) of
+ {error, Error} ->
+ {error, Error};
+ {SocketOptions, SshOptions} ->
+ case valid_socket_to_use(Socket, Options) of
+ ok ->
+ try
+ do_start_daemon(Socket, [{role,server}|SshOptions], SocketOptions)
+ catch
+ throw:bad_fd -> {error,bad_fd};
+ _C:_E -> {error,{cannot_start_daemon,_C,_E}}
+ end;
+ {error,SockError} ->
+ {error,SockError}
+ end
+ end.
+
start_daemon(Host, Port, Options, Inet) ->
case handle_options(Options) of
{error, _Reason} = Error ->
Error;
{SocketOptions, SshOptions}->
- try
- do_start_daemon(Host, Port,[{role, server} |SshOptions] , [Inet | SocketOptions])
+ try
+ do_start_daemon(Host, Port, [{role,server}|SshOptions] , [Inet|SocketOptions])
catch
throw:bad_fd -> {error,bad_fd};
_C:_E -> {error,{cannot_start_daemon,_C,_E}}
end
end.
-
+
+do_start_daemon(Socket, SshOptions, SocketOptions) ->
+ {ok, {IP,Port}} =
+ try {ok,_} = inet:sockname(Socket)
+ catch
+ _:_ -> throw(bad_socket)
+ end,
+ Host = fmt_host(IP),
+ Profile = proplists:get_value(profile, SshOptions, ?DEFAULT_PROFILE),
+ Opts = [{asocket, Socket},
+ {asock_owner,self()},
+ {address, Host},
+ {port, Port},
+ {role, server},
+ {socket_opts, SocketOptions},
+ {ssh_opts, SshOptions}],
+ {_, Callback, _} = proplists:get_value(transport, SshOptions, {tcp, gen_tcp, tcp_closed}),
+ case ssh_system_sup:system_supervisor(Host, Port, Profile) of
+ undefined ->
+ %% It would proably make more sense to call the
+ %% address option host but that is a too big change at the
+ %% monent. The name is a legacy name!
+ try sshd_sup:start_child(Opts) of
+ {error, {already_started, _}} ->
+ {error, eaddrinuse};
+ Result = {ok,_} ->
+ ssh_acceptor:handle_connection(Callback, Host, Port, Opts, Socket),
+ Result;
+ Result = {error, _} ->
+ Result
+ catch
+ exit:{noproc, _} ->
+ {error, ssh_not_started}
+ end;
+ Sup ->
+ AccPid = ssh_system_sup:acceptor_supervisor(Sup),
+ case ssh_acceptor_sup:start_child(AccPid, Opts) of
+ {error, {already_started, _}} ->
+ {error, eaddrinuse};
+ {ok, _} ->
+ ssh_acceptor:handle_connection(Callback, Host, Port, Opts, Socket),
+ {ok, Sup};
+ Other ->
+ Other
+ end
+ end.
+
do_start_daemon(Host0, Port0, SshOptions, SocketOptions) ->
- {Host,Port1} =
+ {Host,Port1} =
try
case proplists:get_value(fd, SocketOptions) of
undefined ->
@@ -270,31 +398,31 @@ do_start_daemon(Host0, Port0, SshOptions, SocketOptions) ->
_:_ -> throw(bad_fd)
end,
Profile = proplists:get_value(profile, SshOptions, ?DEFAULT_PROFILE),
- {Port, WaitRequestControl, Opts} =
+ {Port, WaitRequestControl, Opts0} =
case Port1 of
0 -> %% Allocate the socket here to get the port number...
- {_, Callback, _} =
+ {_, Callback, _} =
proplists:get_value(transport, SshOptions, {tcp, gen_tcp, tcp_closed}),
{ok,LSock} = ssh_acceptor:callback_listen(Callback, 0, SocketOptions),
{ok,{_,LPort}} = inet:sockname(LSock),
- {LPort,
- {LSock,Callback},
+ {LPort,
+ {LSock,Callback},
[{lsocket,LSock},{lsock_owner,self()}]
};
_ ->
{Port1, false, []}
end,
+ Opts = [{address, Host},
+ {port, Port},
+ {role, server},
+ {socket_opts, SocketOptions},
+ {ssh_opts, SshOptions} | Opts0],
case ssh_system_sup:system_supervisor(Host, Port, Profile) of
undefined ->
%% It would proably make more sense to call the
%% address option host but that is a too big change at the
%% monent. The name is a legacy name!
- try sshd_sup:start_child([{address, Host},
- {port, Port},
- {role, server},
- {socket_opts, SocketOptions},
- {ssh_opts, SshOptions}
- | Opts]) of
+ try sshd_sup:start_child(Opts) of
{error, {already_started, _}} ->
{error, eaddrinuse};
Result = {ok,_} ->
@@ -308,12 +436,7 @@ do_start_daemon(Host0, Port0, SshOptions, SocketOptions) ->
end;
Sup ->
AccPid = ssh_system_sup:acceptor_supervisor(Sup),
- case ssh_acceptor_sup:start_child(AccPid, [{address, Host},
- {port, Port},
- {role, server},
- {socket_opts, SocketOptions},
- {ssh_opts, SshOptions}
- | Opts]) of
+ case ssh_acceptor_sup:start_child(AccPid, Opts) of
{error, {already_started, _}} ->
{error, eaddrinuse};
{ok, _} ->
@@ -341,7 +464,7 @@ find_hostport(Fd) ->
{ok, HostPort} = inet:sockname(S),
ok = inet:close(S),
HostPort.
-
+
handle_options(Opts) ->
try handle_option(algs_compatibility(proplists:unfold(Opts)), [], []) of
@@ -356,9 +479,9 @@ handle_options(Opts) ->
algs_compatibility(Os0) ->
%% Take care of old options 'public_key_alg' and 'pref_public_key_algs'
case proplists:get_value(public_key_alg, Os0) of
- undefined ->
+ undefined ->
Os0;
- A when is_atom(A) ->
+ A when is_atom(A) ->
%% Skip public_key_alg if pref_public_key_algs is defined:
Os = lists:keydelete(public_key_alg, 1, Os0),
case proplists:get_value(pref_public_key_algs,Os) of
@@ -368,7 +491,7 @@ algs_compatibility(Os0) ->
[{pref_public_key_algs,['ssh-dss','ssh-rsa']} | Os];
undefined ->
throw({error, {eoptions, {public_key_alg,A} }});
- _ ->
+ _ ->
Os
end;
V ->
@@ -477,10 +600,13 @@ handle_option([{profile, _ID} = Opt|Rest], SocketOptions, SshOptions) ->
handle_option(Rest, SocketOptions, [handle_ssh_option(Opt) | SshOptions]);
handle_option([{max_random_length_padding, _Bool} = Opt|Rest], SocketOptions, SshOptions) ->
handle_option(Rest, SocketOptions, [handle_ssh_option(Opt) | SshOptions]);
+handle_option([{tstflg, _} = Opt|Rest], SocketOptions, SshOptions) ->
+ handle_option(Rest, SocketOptions, [handle_ssh_option(Opt) | SshOptions]);
handle_option([Opt | Rest], SocketOptions, SshOptions) ->
handle_option(Rest, [handle_inet_option(Opt) | SocketOptions], SshOptions).
+handle_ssh_option({tstflg,_F} = Opt) -> Opt;
handle_ssh_option({minimal_remote_max_packet_size, Value} = Opt) when is_integer(Value), Value >=0 ->
Opt;
handle_ssh_option({system_dir, Value} = Opt) when is_list(Value) ->
@@ -493,7 +619,7 @@ handle_ssh_option({silently_accept_hosts, Value} = Opt) when is_boolean(Value) -
Opt;
handle_ssh_option({user_interaction, Value} = Opt) when is_boolean(Value) ->
Opt;
-handle_ssh_option({preferred_algorithms,[_|_]} = Opt) ->
+handle_ssh_option({preferred_algorithms,[_|_]} = Opt) ->
handle_pref_algs(Opt);
handle_ssh_option({dh_gex_groups,L0}) when is_list(L0) ->
@@ -502,7 +628,7 @@ handle_ssh_option({dh_gex_groups,L0}) when is_list(L0) ->
lists:foldl(
fun({N,G,P}, Acc) when is_integer(N),N>0,
is_integer(G),G>0,
- is_integer(P),P>0 ->
+ is_integer(P),P>0 ->
[{N,{G,P}} | Acc];
({N,{G,P}}, Acc) when is_integer(N),N>0,
is_integer(G),G>0,
@@ -510,7 +636,7 @@ handle_ssh_option({dh_gex_groups,L0}) when is_list(L0) ->
[{N,{G,P}} | Acc];
({N,GPs}, Acc) when is_list(GPs) ->
lists:foldr(fun({Gi,Pi}, Acci) when is_integer(Gi),Gi>0,
- is_integer(Pi),Pi>0 ->
+ is_integer(Pi),Pi>0 ->
[{N,{Gi,Pi}} | Acci]
end, Acc, GPs)
end, [], L0))};
@@ -520,7 +646,7 @@ handle_ssh_option({dh_gex_groups,{Tag,File=[C|_]}}=Opt) when is_integer(C), C>0,
Tag == ssh_moduli_file ->
{ok,GroupDefs} =
case Tag of
- file ->
+ file ->
file:consult(File);
ssh_moduli_file ->
case file:open(File,[read]) of
@@ -545,14 +671,14 @@ handle_ssh_option({dh_gex_groups,{Tag,File=[C|_]}}=Opt) when is_integer(C), C>0,
catch
_:_ ->
throw({error, {{eoptions, Opt}, "Bad format in file: "++File}})
- end;
-
+ end;
+
-handle_ssh_option({dh_gex_limits,{Min,Max}} = Opt) when is_integer(Min), Min>0,
+handle_ssh_option({dh_gex_limits,{Min,Max}} = Opt) when is_integer(Min), Min>0,
is_integer(Max), Max>=Min ->
%% Server
Opt;
-handle_ssh_option({dh_gex_limits,{Min,I,Max}} = Opt) when is_integer(Min), Min>0,
+handle_ssh_option({dh_gex_limits,{Min,I,Max}} = Opt) when is_integer(Min), Min>0,
is_integer(I), I>=Min,
is_integer(Max), Max>=I ->
%% Client
@@ -597,7 +723,7 @@ handle_ssh_option({keyboard_interact_fun, Value} = Opt) when is_function(Value,3
Opt;
handle_ssh_option({compression, Value} = Opt) when is_atom(Value) ->
Opt;
-handle_ssh_option({exec, {Module, Function, _}} = Opt) when is_atom(Module),
+handle_ssh_option({exec, {Module, Function, _}} = Opt) when is_atom(Module),
is_atom(Function) ->
Opt;
handle_ssh_option({exec, Function} = Opt) when is_function(Function) ->
@@ -645,7 +771,7 @@ handle_ssh_option({quiet_mode, Value} = Opt) when is_boolean(Value) ->
Opt;
handle_ssh_option({idle_time, Value} = Opt) when is_integer(Value), Value > 0 ->
Opt;
-handle_ssh_option({rekey_limit, Value} = Opt) when is_integer(Value) ->
+handle_ssh_option({rekey_limit, Value} = Opt) when is_integer(Value) ->
Opt;
handle_ssh_option({id_string, random}) ->
{id_string, {random,2,5}}; %% 2 - 5 random characters
@@ -687,11 +813,11 @@ handle_pref_algs({preferred_algorithms,Algs}) ->
of
DefAlgs -> handle_pref_alg(Key,Vals,DefAlgs)
catch
- _:_ -> throw({error, {{eoptions, {preferred_algorithms,Key}},
+ _:_ -> throw({error, {{eoptions, {preferred_algorithms,Key}},
"Bad preferred_algorithms key"}})
end || {Key,Vals} <- Algs]
};
-
+
Dups ->
throw({error, {{eoptions, {preferred_algorithms,Dups}}, "Duplicates found"}})
catch
@@ -730,13 +856,13 @@ handle_pref_alg(Key,
) ->
handle_pref_alg(Key, lists:reverse(Vs), Sup);
-handle_pref_alg(Key,
+handle_pref_alg(Key,
Vs=[V|_],
Sup=[{client2server,_},{server2client,_}]
) when is_atom(V) ->
handle_pref_alg(Key, [{client2server,Vs},{server2client,Vs}], Sup);
-handle_pref_alg(Key,
+handle_pref_alg(Key,
Vs=[V|_],
Sup=[S|_]
) when is_atom(V), is_atom(S) ->
@@ -751,14 +877,14 @@ chk_alg_vs(OptKey, Values, SupportedValues) ->
[] -> Values;
Bad -> throw({error, {{eoptions, {OptKey,Bad}}, "Unsupported value(s) found"}})
end.
-
+
handle_ip(Inet) -> %% Default to ipv4
case lists:member(inet, Inet) of
true ->
Inet;
false ->
case lists:member(inet6, Inet) of
- true ->
+ true ->
Inet;
false ->
[inet | Inet]
@@ -789,8 +915,8 @@ directory_exist_readable(Dir) ->
{error, Error} ->
{error, Error}
end.
-
-
+
+
collect_per_size(L) ->
lists:foldr(
@@ -821,7 +947,7 @@ read_moduli_file(D, I, Acc) ->
read_moduli_file(D, I+1, Acc)
end
end.
-
+
handle_user_pref_pubkey_algs([], Acc) ->
{true, lists:reverse(Acc)};
handle_user_pref_pubkey_algs([H|T], Acc) ->
@@ -835,3 +961,8 @@ handle_user_pref_pubkey_algs([H|T], Acc) ->
false ->
false
end.
+
+fmt_host({A,B,C,D}) ->
+ lists:concat([A,".",B,".",C,".",D]);
+fmt_host(T={_,_,_,_,_,_,_,_}) ->
+ lists:flatten(string:join([io_lib:format("~.16B",[A]) || A <- tuple_to_list(T)], ":")).
diff --git a/lib/ssh/src/ssh.hrl b/lib/ssh/src/ssh.hrl
index 868f3a9181..4cd91177f6 100644
--- a/lib/ssh/src/ssh.hrl
+++ b/lib/ssh/src/ssh.hrl
@@ -127,7 +127,7 @@
recv_sequence = 0,
keyex_key,
keyex_info,
- random_length_padding = 255, % From RFC 4253 section 6.
+ random_length_padding = 15, % From RFC 4253 section 6.
%% User auth
user,
diff --git a/lib/ssh/src/ssh_acceptor.erl b/lib/ssh/src/ssh_acceptor.erl
index 90fd951dcd..9f3e60bd62 100644
--- a/lib/ssh/src/ssh_acceptor.erl
+++ b/lib/ssh/src/ssh_acceptor.erl
@@ -27,7 +27,8 @@
%% Internal application API
-export([start_link/5,
number_of_connections/1,
- callback_listen/3]).
+ callback_listen/3,
+ handle_connection/5]).
%% spawn export
-export([acceptor_init/6, acceptor_loop/6]).
diff --git a/lib/ssh/src/ssh_acceptor_sup.erl b/lib/ssh/src/ssh_acceptor_sup.erl
index 4f76dbe6f0..129f85a3e0 100644
--- a/lib/ssh/src/ssh_acceptor_sup.erl
+++ b/lib/ssh/src/ssh_acceptor_sup.erl
@@ -36,6 +36,8 @@
-define(DEFAULT_TIMEOUT, 50000).
+-spec init( [term()] ) -> {ok,{supervisor:sup_flags(),[supervisor:child_spec()]}} | ignore .
+
%%%=========================================================================
%%% API
%%%=========================================================================
diff --git a/lib/ssh/src/ssh_auth.erl b/lib/ssh/src/ssh_auth.erl
index 49eec8072f..ac35b70209 100644
--- a/lib/ssh/src/ssh_auth.erl
+++ b/lib/ssh/src/ssh_auth.erl
@@ -31,24 +31,123 @@
-export([publickey_msg/1, password_msg/1, keyboard_interactive_msg/1,
service_request_msg/1, init_userauth_request_msg/1,
userauth_request_msg/1, handle_userauth_request/3,
- handle_userauth_info_request/3, handle_userauth_info_response/2
+ handle_userauth_info_request/2, handle_userauth_info_response/2
]).
%%--------------------------------------------------------------------
%%% Internal application API
%%--------------------------------------------------------------------
+%%%----------------------------------------------------------------
+userauth_request_msg(#ssh{userauth_methods = ServerMethods,
+ userauth_supported_methods = UserPrefMethods, % Note: this is not documented as supported for clients
+ userauth_preference = ClientMethods0
+ } = Ssh0) ->
+ case sort_select_mthds(ClientMethods0, UserPrefMethods, ServerMethods) of
+ [] ->
+ Msg = #ssh_msg_disconnect{code = ?SSH_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE,
+ description = "Unable to connect using the available authentication methods",
+ language = "en"},
+ {disconnect, Msg, ssh_transport:ssh_packet(Msg, Ssh0)};
+
+ [{Pref,Module,Function,Args} | Prefs] ->
+ Ssh = case Pref of
+ "keyboard-interactive" -> Ssh0;
+ _ -> Ssh0#ssh{userauth_preference = Prefs}
+ end,
+ case Module:Function(Args ++ [Ssh]) of
+ {not_ok, Ssh1} ->
+ userauth_request_msg(Ssh1#ssh{userauth_preference = Prefs});
+ Result ->
+ {Pref,Result}
+ end
+ end.
+
+
+
+sort_select_mthds(Clients, undefined, Servers) ->
+ %% User has not expressed an opinion via option "auth_methods", use the server's prefs
+ sort_select_mthds1(Clients, Servers, string:tokens(?SUPPORTED_AUTH_METHODS,","));
+
+sort_select_mthds(Clients, Users0, Servers0) ->
+ %% The User has an opinion, use the intersection of that and the Servers whishes but
+ %% in the Users order
+ sort_select_mthds1(Clients, string:tokens(Users0,","), Servers0).
+
+
+sort_select_mthds1(Clients, Users0, Servers0) ->
+ Servers = unique(Servers0),
+ Users = unique(Users0),
+ [C || Key <- Users,
+ lists:member(Key, Servers),
+ C <- Clients,
+ element(1,C) == Key].
+
+unique(L) ->
+ lists:reverse(
+ lists:foldl(fun(E,Acc) ->
+ case lists:member(E,Acc) of
+ true -> Acc;
+ false -> [E|Acc]
+ end
+ end, [], L)).
+
+
+%%%---- userauth_request_msg "callbacks"
+password_msg([#ssh{opts = Opts, io_cb = IoCb,
+ user = User, service = Service} = Ssh0]) ->
+ {Password,Ssh} =
+ case proplists:get_value(password, Opts) of
+ undefined when IoCb == ssh_no_io ->
+ {not_ok, Ssh0};
+ undefined ->
+ {IoCb:read_password("ssh password: ",Ssh0), Ssh0};
+ PW ->
+ %% If "password" option is given it should not be tried again
+ {PW, Ssh0#ssh{opts = lists:keyreplace(password,1,Opts,{password,not_ok})}}
+ end,
+ case Password of
+ not_ok ->
+ {not_ok, Ssh};
+ _ ->
+ ssh_transport:ssh_packet(
+ #ssh_msg_userauth_request{user = User,
+ service = Service,
+ method = "password",
+ data =
+ <<?BOOLEAN(?FALSE),
+ ?STRING(unicode:characters_to_binary(Password))>>},
+ Ssh)
+ end.
+
+%% See RFC 4256 for info on keyboard-interactive
+keyboard_interactive_msg([#ssh{user = User,
+ opts = Opts,
+ service = Service} = Ssh]) ->
+ case proplists:get_value(password, Opts) of
+ not_ok ->
+ {not_ok,Ssh}; % No need to use a failed pwd once more
+ _ ->
+ ssh_transport:ssh_packet(
+ #ssh_msg_userauth_request{user = User,
+ service = Service,
+ method = "keyboard-interactive",
+ data = << ?STRING(<<"">>),
+ ?STRING(<<>>) >> },
+ Ssh)
+ end.
+
publickey_msg([Alg, #ssh{user = User,
session_id = SessionId,
service = Service,
opts = Opts} = Ssh]) ->
- Hash = sha, %% Maybe option?!
+ Hash = ssh_transport:sha(Alg),
KeyCb = proplists:get_value(key_cb, Opts, ssh_file),
case KeyCb:user_key(Alg, Opts) of
{ok, PrivKey} ->
StrAlgo = atom_to_list(Alg),
case encode_public_key(StrAlgo, ssh_transport:extract_public_key(PrivKey)) of
not_ok ->
- not_ok;
+ {not_ok, Ssh};
PubKeyBlob ->
SigData = build_sig_data(SessionId,
User, Service, PubKeyBlob, StrAlgo),
@@ -65,52 +164,15 @@ publickey_msg([Alg, #ssh{user = User,
Ssh)
end;
_Error ->
- not_ok
- end.
-
-password_msg([#ssh{opts = Opts, io_cb = IoCb,
- user = User, service = Service} = Ssh]) ->
- Password = case proplists:get_value(password, Opts) of
- undefined ->
- user_interaction(IoCb, Ssh);
- PW ->
- PW
- end,
- case Password of
- not_ok ->
- not_ok;
- _ ->
- ssh_transport:ssh_packet(
- #ssh_msg_userauth_request{user = User,
- service = Service,
- method = "password",
- data =
- <<?BOOLEAN(?FALSE),
- ?STRING(unicode:characters_to_binary(Password))>>},
- Ssh)
+ {not_ok, Ssh}
end.
-user_interaction(ssh_no_io, _) ->
- not_ok;
-user_interaction(IoCb, Ssh) ->
- IoCb:read_password("ssh password: ", Ssh).
-
-
-%% See RFC 4256 for info on keyboard-interactive
-keyboard_interactive_msg([#ssh{user = User,
- service = Service} = Ssh]) ->
- ssh_transport:ssh_packet(
- #ssh_msg_userauth_request{user = User,
- service = Service,
- method = "keyboard-interactive",
- data = << ?STRING(<<"">>),
- ?STRING(<<>>) >> },
- Ssh).
-
+%%%----------------------------------------------------------------
service_request_msg(Ssh) ->
ssh_transport:ssh_packet(#ssh_msg_service_request{name = "ssh-userauth"},
Ssh#ssh{service = "ssh-userauth"}).
+%%%----------------------------------------------------------------
init_userauth_request_msg(#ssh{opts = Opts} = Ssh) ->
case user_name(Opts) of
{ok, User} ->
@@ -140,34 +202,9 @@ init_userauth_request_msg(#ssh{opts = Opts} = Ssh) ->
description = ErrStr})
end.
-userauth_request_msg(#ssh{userauth_preference = []} = Ssh) ->
- Msg = #ssh_msg_disconnect{code =
- ?SSH_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE,
- description = "Unable to connect using the available"
- " authentication methods",
- language = "en"},
- {disconnect, Msg, ssh_transport:ssh_packet(Msg, Ssh)};
-
-userauth_request_msg(#ssh{userauth_methods = Methods,
- userauth_preference = [{Pref, Module,
- Function, Args} | Prefs]}
- = Ssh0) ->
- Ssh = Ssh0#ssh{userauth_preference = Prefs},
- case lists:member(Pref, Methods) of
- true ->
- case Module:Function(Args ++ [Ssh]) of
- not_ok ->
- userauth_request_msg(Ssh);
- Result ->
- {Pref,Result}
- end;
- false ->
- userauth_request_msg(Ssh)
- end.
-
-
-handle_userauth_request(#ssh_msg_service_request{name =
- Name = "ssh-userauth"},
+%%%----------------------------------------------------------------
+%%% called by server
+handle_userauth_request(#ssh_msg_service_request{name = Name = "ssh-userauth"},
_, Ssh) ->
{ok, ssh_transport:ssh_packet(#ssh_msg_service_accept{name = Name},
Ssh#ssh{service = "ssh-connection"})};
@@ -223,32 +260,54 @@ handle_userauth_request(#ssh_msg_userauth_request{user = User,
handle_userauth_request(#ssh_msg_userauth_request{user = User,
service = "ssh-connection",
method = "publickey",
- data = Data},
- SessionId,
+ data = <<?BYTE(?FALSE),
+ ?UINT32(ALen), BAlg:ALen/binary,
+ ?UINT32(KLen), KeyBlob:KLen/binary,
+ _/binary
+ >>
+ },
+ _SessionId,
#ssh{opts = Opts,
userauth_supported_methods = Methods} = Ssh) ->
- <<?BYTE(HaveSig), ?UINT32(ALen), BAlg:ALen/binary,
- ?UINT32(KLen), KeyBlob:KLen/binary, SigWLen/binary>> = Data,
- Alg = binary_to_list(BAlg),
- case HaveSig of
- ?TRUE ->
- case verify_sig(SessionId, User, "ssh-connection", Alg,
- KeyBlob, SigWLen, Opts) of
- true ->
- {authorized, User,
- ssh_transport:ssh_packet(
- #ssh_msg_userauth_success{}, Ssh)};
- false ->
- {not_authorized, {User, undefined},
- ssh_transport:ssh_packet(#ssh_msg_userauth_failure{
- authentications = Methods,
- partial_success = false}, Ssh)}
- end;
- ?FALSE ->
+
+ case pre_verify_sig(User, binary_to_list(BAlg),
+ KeyBlob, Opts) of
+ true ->
{not_authorized, {User, undefined},
ssh_transport:ssh_packet(
- #ssh_msg_userauth_pk_ok{algorithm_name = Alg,
- key_blob = KeyBlob}, Ssh)}
+ #ssh_msg_userauth_pk_ok{algorithm_name = binary_to_list(BAlg),
+ key_blob = KeyBlob}, Ssh)};
+ false ->
+ {not_authorized, {User, undefined},
+ ssh_transport:ssh_packet(#ssh_msg_userauth_failure{
+ authentications = Methods,
+ partial_success = false}, Ssh)}
+ end;
+
+handle_userauth_request(#ssh_msg_userauth_request{user = User,
+ service = "ssh-connection",
+ method = "publickey",
+ data = <<?BYTE(?TRUE),
+ ?UINT32(ALen), BAlg:ALen/binary,
+ ?UINT32(KLen), KeyBlob:KLen/binary,
+ SigWLen/binary>>
+ },
+ SessionId,
+ #ssh{opts = Opts,
+ userauth_supported_methods = Methods} = Ssh) ->
+
+ case verify_sig(SessionId, User, "ssh-connection",
+ binary_to_list(BAlg),
+ KeyBlob, SigWLen, Opts) of
+ true ->
+ {authorized, User,
+ ssh_transport:ssh_packet(
+ #ssh_msg_userauth_success{}, Ssh)};
+ false ->
+ {not_authorized, {User, undefined},
+ ssh_transport:ssh_packet(#ssh_msg_userauth_failure{
+ authentications = Methods,
+ partial_success = false}, Ssh)}
end;
handle_userauth_request(#ssh_msg_userauth_request{user = User,
@@ -319,31 +378,50 @@ handle_userauth_request(#ssh_msg_userauth_request{user = User,
partial_success = false}, Ssh)}.
-
-handle_userauth_info_request(
- #ssh_msg_userauth_info_request{name = Name,
- instruction = Instr,
- num_prompts = NumPrompts,
- data = Data}, IoCb,
- #ssh{opts = Opts} = Ssh) ->
+%%%----------------------------------------------------------------
+%%% keyboard-interactive client
+handle_userauth_info_request(#ssh_msg_userauth_info_request{name = Name,
+ instruction = Instr,
+ num_prompts = NumPrompts,
+ data = Data},
+ #ssh{opts = Opts,
+ io_cb = IoCb
+ } = Ssh) ->
PromptInfos = decode_keyboard_interactive_prompts(NumPrompts,Data),
- Responses = keyboard_interact_get_responses(IoCb, Opts,
- Name, Instr, PromptInfos),
- {ok,
- ssh_transport:ssh_packet(
- #ssh_msg_userauth_info_response{num_responses = NumPrompts,
- data = Responses}, Ssh)}.
+ case keyboard_interact_get_responses(IoCb, Opts, Name, Instr, PromptInfos) of
+ not_ok ->
+ not_ok;
+ Responses ->
+ {ok,
+ ssh_transport:ssh_packet(
+ #ssh_msg_userauth_info_response{num_responses = NumPrompts,
+ data = Responses}, Ssh)}
+ end.
+%%%----------------------------------------------------------------
+%%% keyboard-interactive server
handle_userauth_info_response(#ssh_msg_userauth_info_response{num_responses = 1,
data = <<?UINT32(Sz), Password:Sz/binary>>},
#ssh{opts = Opts,
kb_tries_left = KbTriesLeft,
user = User,
userauth_supported_methods = Methods} = Ssh) ->
+ SendOneEmpty = proplists:get_value(tstflg, Opts) == one_empty,
case check_password(User, unicode:characters_to_list(Password), Opts, Ssh) of
+ {true,Ssh1} when SendOneEmpty==true ->
+ Msg = #ssh_msg_userauth_info_request{name = "",
+ instruction = "",
+ language_tag = "",
+ num_prompts = 0,
+ data = <<?BOOLEAN(?FALSE)>>
+ },
+ {authorized_but_one_more, User,
+ ssh_transport:ssh_packet(Msg, Ssh1)};
+
{true,Ssh1} ->
{authorized, User,
ssh_transport:ssh_packet(#ssh_msg_userauth_success{}, Ssh1)};
+
{false,Ssh1} ->
{not_authorized, {User, {error,"Bad user or password"}},
ssh_transport:ssh_packet(#ssh_msg_userauth_failure{
@@ -353,6 +431,11 @@ handle_userauth_info_response(#ssh_msg_userauth_info_response{num_responses = 1,
)}
end;
+handle_userauth_info_response({extra,#ssh_msg_userauth_info_response{}},
+ #ssh{user = User} = Ssh) ->
+ {authorized, User,
+ ssh_transport:ssh_packet(#ssh_msg_userauth_success{}, Ssh)};
+
handle_userauth_info_response(#ssh_msg_userauth_info_response{},
_Auth) ->
ssh_connection_handler:disconnect(
@@ -369,11 +452,6 @@ method_preference(Algs) ->
[{"publickey", ?MODULE, publickey_msg, [A]} | Acc]
end,
[{"password", ?MODULE, password_msg, []},
- {"keyboard-interactive", ?MODULE, keyboard_interactive_msg, []},
- {"keyboard-interactive", ?MODULE, keyboard_interactive_msg, []},
- {"keyboard-interactive", ?MODULE, keyboard_interactive_msg, []},
- {"keyboard-interactive", ?MODULE, keyboard_interactive_msg, []},
- {"keyboard-interactive", ?MODULE, keyboard_interactive_msg, []},
{"keyboard-interactive", ?MODULE, keyboard_interactive_msg, []}
],
Algs).
@@ -434,19 +512,34 @@ get_password_option(Opts, User) ->
false -> proplists:get_value(password, Opts, false)
end.
-verify_sig(SessionId, User, Service, Alg, KeyBlob, SigWLen, Opts) ->
- {ok, Key} = decode_public_key_v2(KeyBlob, Alg),
- KeyCb = proplists:get_value(key_cb, Opts, ssh_file),
+pre_verify_sig(User, Alg, KeyBlob, Opts) ->
+ try
+ {ok, Key} = decode_public_key_v2(KeyBlob, Alg),
+ KeyCb = proplists:get_value(key_cb, Opts, ssh_file),
+ KeyCb:is_auth_key(Key, User, Opts)
+ catch
+ _:_ ->
+ false
+ end.
- case KeyCb:is_auth_key(Key, User, Opts) of
- true ->
- PlainText = build_sig_data(SessionId, User,
- Service, KeyBlob, Alg),
- <<?UINT32(AlgSigLen), AlgSig:AlgSigLen/binary>> = SigWLen,
- <<?UINT32(AlgLen), _Alg:AlgLen/binary,
- ?UINT32(SigLen), Sig:SigLen/binary>> = AlgSig,
- ssh_transport:verify(PlainText, sha, Sig, Key);
- false ->
+verify_sig(SessionId, User, Service, Alg, KeyBlob, SigWLen, Opts) ->
+ try
+ {ok, Key} = decode_public_key_v2(KeyBlob, Alg),
+ KeyCb = proplists:get_value(key_cb, Opts, ssh_file),
+
+ case KeyCb:is_auth_key(Key, User, Opts) of
+ true ->
+ PlainText = build_sig_data(SessionId, User,
+ Service, KeyBlob, Alg),
+ <<?UINT32(AlgSigLen), AlgSig:AlgSigLen/binary>> = SigWLen,
+ <<?UINT32(AlgLen), _Alg:AlgLen/binary,
+ ?UINT32(SigLen), Sig:SigLen/binary>> = AlgSig,
+ ssh_transport:verify(PlainText, ssh_transport:sha(list_to_atom(Alg)), Sig, Key);
+ false ->
+ false
+ end
+ catch
+ _:_ ->
false
end.
@@ -473,6 +566,9 @@ keyboard_interact_get_responses(IoCb, Opts, Name, Instr, PromptInfos) ->
proplists:get_value(password, Opts, undefined), IoCb, Name,
Instr, PromptInfos, Opts, NumPrompts).
+
+keyboard_interact_get_responses(_, _, not_ok, _, _, _, _, _, _) ->
+ not_ok;
keyboard_interact_get_responses(_, undefined, Password, _, _, _, _, _,
1) when Password =/= undefined ->
[Password]; %% Password auth implemented with keyboard-interaction and passwd is known
@@ -486,17 +582,18 @@ keyboard_interact_get_responses(true, Fun, _Pwd, _IoCb, Name, Instr, PromptInfos
keyboard_interact_fun(Fun, Name, Instr, PromptInfos, NumPrompts).
keyboard_interact(IoCb, Name, Instr, Prompts, Opts) ->
- if Name /= "" -> IoCb:format("~s~n", [Name]);
- true -> ok
- end,
- if Instr /= "" -> IoCb:format("~s~n", [Instr]);
- true -> ok
- end,
+ write_if_nonempty(IoCb, Name),
+ write_if_nonempty(IoCb, Instr),
lists:map(fun({Prompt, true}) -> IoCb:read_line(Prompt, Opts);
({Prompt, false}) -> IoCb:read_password(Prompt, Opts)
end,
Prompts).
+write_if_nonempty(_, "") -> ok;
+write_if_nonempty(_, <<>>) -> ok;
+write_if_nonempty(IoCb, Text) -> IoCb:format("~s~n",[Text]).
+
+
keyboard_interact_fun(KbdInteractFun, Name, Instr, PromptInfos, NumPrompts) ->
Prompts = lists:map(fun({Prompt, _Echo}) -> Prompt end,
PromptInfos),
diff --git a/lib/ssh/src/ssh_channel_sup.erl b/lib/ssh/src/ssh_channel_sup.erl
index 8eaa85f795..6b01dc334d 100644
--- a/lib/ssh/src/ssh_channel_sup.erl
+++ b/lib/ssh/src/ssh_channel_sup.erl
@@ -43,6 +43,8 @@ start_child(Sup, ChildSpec) ->
%%%=========================================================================
%%% Supervisor callback
%%%=========================================================================
+-spec init( [term()] ) -> {ok,{supervisor:sup_flags(),[supervisor:child_spec()]}} | ignore .
+
init(_Args) ->
RestartStrategy = one_for_one,
MaxR = 10,
diff --git a/lib/ssh/src/ssh_cli.erl b/lib/ssh/src/ssh_cli.erl
index 2d60008de6..74cd2e081a 100644
--- a/lib/ssh/src/ssh_cli.erl
+++ b/lib/ssh/src/ssh_cli.erl
@@ -47,6 +47,21 @@
%%====================================================================
%% ssh_channel callbacks
%%====================================================================
+-spec init(Args :: term()) ->
+ {ok, State :: term()} | {ok, State :: term(), timeout() | hibernate} |
+ {stop, Reason :: term()} | ignore.
+
+-spec terminate(Reason :: (normal | shutdown | {shutdown, term()} |
+ term()),
+ State :: term()) ->
+ term().
+
+-spec handle_msg(Msg ::term(), State :: term()) ->
+ {ok, State::term()} | {stop, ChannelId::integer(), State::term()}.
+-spec handle_ssh_msg({ssh_cm, ConnectionRef::term(), SshMsg::term()},
+ State::term()) -> {ok, State::term()} |
+ {stop, ChannelId::integer(),
+ State::term()}.
%%--------------------------------------------------------------------
%% Function: init(Args) -> {ok, State}
diff --git a/lib/ssh/src/ssh_client_key_api.erl b/lib/ssh/src/ssh_client_key_api.erl
index 039a7dea9b..6e994ff292 100644
--- a/lib/ssh/src/ssh_client_key_api.erl
+++ b/lib/ssh/src/ssh_client_key_api.erl
@@ -23,14 +23,26 @@
-include_lib("public_key/include/public_key.hrl").
-include("ssh.hrl").
--callback is_host_key(PublicKey :: #'RSAPublicKey'{}| {integer(), #'Dss-Parms'{}}| term() , Host :: string(),
- Algorithm :: 'ssh-rsa'| 'ssh-dss'| atom(), ConnectOptions :: proplists:proplist()) ->
+-export_type([algorithm/0]).
+
+-type algorithm() :: 'ssh-rsa'
+ | 'ssh-dss'
+ | 'ecdsa-sha2-nistp256'
+ | 'ecdsa-sha2-nistp384'
+ | 'ecdsa-sha2-nistp521'
+ .
+
+-callback is_host_key(PublicKey :: public_key:public_key(),
+ Host :: string(),
+ Algorithm :: algorithm(),
+ ConnectOptions :: proplists:proplist()) ->
boolean().
--callback user_key(Algorithm :: 'ssh-rsa'| 'ssh-dss'| atom(), ConnectOptions :: proplists:proplist()) ->
- {ok, PrivateKey :: #'RSAPrivateKey'{}| #'DSAPrivateKey'{} | term()} | {error, string()}.
+-callback user_key(Algorithm :: algorithm(),
+ ConnectOptions :: proplists:proplist()) ->
+ {ok, PrivateKey::public_key:private_key()} | {error, term()}.
--callback add_host_key(Host :: string(), PublicKey :: #'RSAPublicKey'{}| {integer(), #'Dss-Parms'{}}| term(),
- Options :: list()) ->
+-callback add_host_key(Host :: string(), PublicKey :: public_key:public_key(),
+ Options :: proplists:proplist()) ->
ok | {error, Error::term()}.
diff --git a/lib/ssh/src/ssh_connection_handler.erl b/lib/ssh/src/ssh_connection_handler.erl
index 946adcf384..facf6b561a 100644
--- a/lib/ssh/src/ssh_connection_handler.erl
+++ b/lib/ssh/src/ssh_connection_handler.erl
@@ -60,7 +60,8 @@
]).
%%% Behaviour callbacks
--export([handle_event/4, terminate/3, format_status/2, code_change/4]).
+-export([callback_mode/0, handle_event/4, terminate/3,
+ format_status/2, code_change/4]).
%%% Exports not intended to be used :). They are used for spawning and tests
-export([init_connection_handler/3, % proc_lib:spawn needs this
@@ -338,6 +339,7 @@ renegotiate_data(ConnectionHandler) ->
ssh_params :: #ssh{}
| undefined,
socket :: inet:socket(),
+ sender :: pid() | undefined,
decrypted_data_buffer = <<>> :: binary(),
encrypted_data_buffer = <<>> :: binary(),
undecrypted_packet_length :: undefined | non_neg_integer(),
@@ -366,22 +368,21 @@ init_connection_handler(Role, Socket, Opts) ->
{Protocol, Callback, CloseTag} =
proplists:get_value(transport, Opts, ?DefaultTransport),
S0#data{ssh_params = init_ssh_record(Role, Socket, Opts),
- transport_protocol = Protocol,
- transport_cb = Callback,
- transport_close_tag = CloseTag
+ sender = spawn_link(fun() -> nonblocking_sender(Socket, Callback) end),
+ transport_protocol = Protocol,
+ transport_cb = Callback,
+ transport_close_tag = CloseTag
}
of
S ->
gen_statem:enter_loop(?MODULE,
[], %%[{debug,[trace,log,statistics,debug]} || Role==server],
- handle_event_function,
{hello,Role},
S)
catch
_:Error ->
gen_statem:enter_loop(?MODULE,
[],
- handle_event_function,
{init_error,Error},
S0)
end.
@@ -428,7 +429,12 @@ init_connection(server, C = #connection{}, Opts) ->
init_ssh_record(Role, Socket, Opts) ->
{ok, PeerAddr} = inet:peername(Socket),
KeyCb = proplists:get_value(key_cb, Opts, ssh_file),
- AuthMethods = proplists:get_value(auth_methods, Opts, ?SUPPORTED_AUTH_METHODS),
+ AuthMethods = proplists:get_value(auth_methods,
+ Opts,
+ case Role of
+ server -> ?SUPPORTED_AUTH_METHODS;
+ client -> undefined
+ end),
S0 = #ssh{role = Role,
key_cb = KeyCb,
opts = Opts,
@@ -499,6 +505,9 @@ init_ssh_record(Role, Socket, Opts) ->
%%% ######## Error in the initialisation ####
+callback_mode() ->
+ handle_event_function.
+
handle_event(_, _Event, {init_error,Error}, _) ->
case Error of
{badmatch,{error,enotconn}} ->
@@ -518,7 +527,7 @@ handle_event(_, _Event, {init_error,Error}, _) ->
%% The very first event that is sent when the we are set as controlling process of Socket
handle_event(_, socket_control, {hello,_}, D) ->
VsnMsg = ssh_transport:hello_version_msg(string_version(D#data.ssh_params)),
- ok = send_bytes(VsnMsg, D),
+ send_bytes(VsnMsg, D),
case inet:getopts(Socket=D#data.socket, [recbuf]) of
{ok, [{recbuf,Size}]} ->
%% Set the socket to the hello text line handling mode:
@@ -543,7 +552,7 @@ handle_event(_, {info_line,_Line}, {hello,Role}, D) ->
server ->
%% But the client may NOT send them to the server. Openssh answers with cleartext,
%% and so do we
- ok = send_bytes("Protocol mismatch.", D),
+ send_bytes("Protocol mismatch.", D),
{stop, {shutdown,"Protocol mismatch in version exchange. Client sent info lines."}}
end;
@@ -558,7 +567,7 @@ handle_event(_, {version_exchange,Version}, {hello,Role}, D) ->
{active, once},
{recbuf, D#data.inet_initial_recbuf_size}]),
{KeyInitMsg, SshPacket, Ssh} = ssh_transport:key_exchange_init_msg(Ssh1),
- ok = send_bytes(SshPacket, D),
+ send_bytes(SshPacket, D),
{next_state, {kexinit,Role,init}, D#data{ssh_params = Ssh,
key_exchange_init_msg = KeyInitMsg}};
not_supported ->
@@ -576,7 +585,7 @@ handle_event(_, {#ssh_msg_kexinit{}=Kex, Payload}, {kexinit,Role,ReNeg},
Ssh1 = ssh_transport:key_init(peer_role(Role), D#data.ssh_params, Payload),
Ssh = case ssh_transport:handle_kexinit_msg(Kex, OwnKex, Ssh1) of
{ok, NextKexMsg, Ssh2} when Role==client ->
- ok = send_bytes(NextKexMsg, D),
+ send_bytes(NextKexMsg, D),
Ssh2;
{ok, Ssh2} when Role==server ->
Ssh2
@@ -589,43 +598,43 @@ handle_event(_, {#ssh_msg_kexinit{}=Kex, Payload}, {kexinit,Role,ReNeg},
%%%---- diffie-hellman
handle_event(_, #ssh_msg_kexdh_init{} = Msg, {key_exchange,server,ReNeg}, D) ->
{ok, KexdhReply, Ssh1} = ssh_transport:handle_kexdh_init(Msg, D#data.ssh_params),
- ok = send_bytes(KexdhReply, D),
+ send_bytes(KexdhReply, D),
{ok, NewKeys, Ssh} = ssh_transport:new_keys_message(Ssh1),
- ok = send_bytes(NewKeys, D),
+ send_bytes(NewKeys, D),
{next_state, {new_keys,server,ReNeg}, D#data{ssh_params=Ssh}};
handle_event(_, #ssh_msg_kexdh_reply{} = Msg, {key_exchange,client,ReNeg}, D) ->
{ok, NewKeys, Ssh} = ssh_transport:handle_kexdh_reply(Msg, D#data.ssh_params),
- ok = send_bytes(NewKeys, D),
+ send_bytes(NewKeys, D),
{next_state, {new_keys,client,ReNeg}, D#data{ssh_params=Ssh}};
%%%---- diffie-hellman group exchange
handle_event(_, #ssh_msg_kex_dh_gex_request{} = Msg, {key_exchange,server,ReNeg}, D) ->
{ok, GexGroup, Ssh} = ssh_transport:handle_kex_dh_gex_request(Msg, D#data.ssh_params),
- ok = send_bytes(GexGroup, D),
+ send_bytes(GexGroup, D),
{next_state, {key_exchange_dh_gex_init,server,ReNeg}, D#data{ssh_params=Ssh}};
handle_event(_, #ssh_msg_kex_dh_gex_request_old{} = Msg, {key_exchange,server,ReNeg}, D) ->
{ok, GexGroup, Ssh} = ssh_transport:handle_kex_dh_gex_request(Msg, D#data.ssh_params),
- ok = send_bytes(GexGroup, D),
+ send_bytes(GexGroup, D),
{next_state, {key_exchange_dh_gex_init,server,ReNeg}, D#data{ssh_params=Ssh}};
handle_event(_, #ssh_msg_kex_dh_gex_group{} = Msg, {key_exchange,client,ReNeg}, D) ->
{ok, KexGexInit, Ssh} = ssh_transport:handle_kex_dh_gex_group(Msg, D#data.ssh_params),
- ok = send_bytes(KexGexInit, D),
+ send_bytes(KexGexInit, D),
{next_state, {key_exchange_dh_gex_reply,client,ReNeg}, D#data{ssh_params=Ssh}};
%%%---- elliptic curve diffie-hellman
handle_event(_, #ssh_msg_kex_ecdh_init{} = Msg, {key_exchange,server,ReNeg}, D) ->
{ok, KexEcdhReply, Ssh1} = ssh_transport:handle_kex_ecdh_init(Msg, D#data.ssh_params),
- ok = send_bytes(KexEcdhReply, D),
+ send_bytes(KexEcdhReply, D),
{ok, NewKeys, Ssh} = ssh_transport:new_keys_message(Ssh1),
- ok = send_bytes(NewKeys, D),
+ send_bytes(NewKeys, D),
{next_state, {new_keys,server,ReNeg}, D#data{ssh_params=Ssh}};
handle_event(_, #ssh_msg_kex_ecdh_reply{} = Msg, {key_exchange,client,ReNeg}, D) ->
{ok, NewKeys, Ssh} = ssh_transport:handle_kex_ecdh_reply(Msg, D#data.ssh_params),
- ok = send_bytes(NewKeys, D),
+ send_bytes(NewKeys, D),
{next_state, {new_keys,client,ReNeg}, D#data{ssh_params=Ssh}};
@@ -633,9 +642,9 @@ handle_event(_, #ssh_msg_kex_ecdh_reply{} = Msg, {key_exchange,client,ReNeg}, D)
handle_event(_, #ssh_msg_kex_dh_gex_init{} = Msg, {key_exchange_dh_gex_init,server,ReNeg}, D) ->
{ok, KexGexReply, Ssh1} = ssh_transport:handle_kex_dh_gex_init(Msg, D#data.ssh_params),
- ok = send_bytes(KexGexReply, D),
+ send_bytes(KexGexReply, D),
{ok, NewKeys, Ssh} = ssh_transport:new_keys_message(Ssh1),
- ok = send_bytes(NewKeys, D),
+ send_bytes(NewKeys, D),
{next_state, {new_keys,server,ReNeg}, D#data{ssh_params=Ssh}};
@@ -643,7 +652,7 @@ handle_event(_, #ssh_msg_kex_dh_gex_init{} = Msg, {key_exchange_dh_gex_init,serv
handle_event(_, #ssh_msg_kex_dh_gex_reply{} = Msg, {key_exchange_dh_gex_reply,client,ReNeg}, D) ->
{ok, NewKeys, Ssh1} = ssh_transport:handle_kex_dh_gex_reply(Msg, D#data.ssh_params),
- ok = send_bytes(NewKeys, D),
+ send_bytes(NewKeys, D),
{next_state, {new_keys,client,ReNeg}, D#data{ssh_params=Ssh1}};
@@ -655,7 +664,7 @@ handle_event(_, #ssh_msg_newkeys{} = Msg, {new_keys,Role,init}, D) ->
Ssh = case Role of
client ->
{MsgReq, Ssh2} = ssh_auth:service_request_msg(Ssh1),
- ok = send_bytes(MsgReq, D),
+ send_bytes(MsgReq, D),
Ssh2;
server ->
Ssh1
@@ -673,7 +682,7 @@ handle_event(_, Msg = #ssh_msg_service_request{name=ServiceName}, StateName = {s
"ssh-userauth" ->
Ssh0 = #ssh{session_id=SessionId} = D#data.ssh_params,
{ok, {Reply, Ssh}} = ssh_auth:handle_userauth_request(Msg, SessionId, Ssh0),
- ok = send_bytes(Reply, D),
+ send_bytes(Reply, D),
{next_state, {userauth,server}, D#data{ssh_params = Ssh}};
_ ->
@@ -685,7 +694,7 @@ handle_event(_, Msg = #ssh_msg_service_request{name=ServiceName}, StateName = {s
handle_event(_, #ssh_msg_service_accept{name = "ssh-userauth"}, {service_request,client},
#data{ssh_params = #ssh{service="ssh-userauth"} = Ssh0} = State) ->
{Msg, Ssh} = ssh_auth:init_userauth_request_msg(Ssh0),
- ok = send_bytes(Msg, State),
+ send_bytes(Msg, State),
{next_state, {userauth,client}, State#data{auth_user = Ssh#ssh.user, ssh_params = Ssh}};
@@ -702,7 +711,7 @@ handle_event(_,
%% Probably the very first userauth_request but we deny unauthorized login
{not_authorized, _, {Reply,Ssh}} =
ssh_auth:handle_userauth_request(Msg, Ssh0#ssh.session_id, Ssh0),
- ok = send_bytes(Reply, D),
+ send_bytes(Reply, D),
{keep_state, D#data{ssh_params = Ssh}};
{"ssh-connection", "ssh-connection", Method} ->
@@ -712,7 +721,7 @@ handle_event(_,
%% Yepp! we support this method
case ssh_auth:handle_userauth_request(Msg, Ssh0#ssh.session_id, Ssh0) of
{authorized, User, {Reply, Ssh}} ->
- ok = send_bytes(Reply, D),
+ send_bytes(Reply, D),
D#data.starter ! ssh_connected,
connected_fun(User, Method, D),
{next_state, {connected,server},
@@ -720,11 +729,11 @@ handle_event(_,
ssh_params = Ssh#ssh{authenticated = true}}};
{not_authorized, {User, Reason}, {Reply, Ssh}} when Method == "keyboard-interactive" ->
retry_fun(User, Reason, D),
- ok = send_bytes(Reply, D),
+ send_bytes(Reply, D),
{next_state, {userauth_keyboard_interactive,server}, D#data{ssh_params = Ssh}};
{not_authorized, {User, Reason}, {Reply, Ssh}} ->
retry_fun(User, Reason, D),
- ok = send_bytes(Reply, D),
+ send_bytes(Reply, D),
{keep_state, D#data{ssh_params = Ssh}}
end;
false ->
@@ -794,9 +803,13 @@ handle_event(_, #ssh_msg_userauth_banner{message = Msg}, {userauth,client}, D) -
handle_event(_, #ssh_msg_userauth_info_request{} = Msg, {userauth_keyboard_interactive, client},
#data{ssh_params = Ssh0} = D) ->
- {ok, {Reply, Ssh}} = ssh_auth:handle_userauth_info_request(Msg, Ssh0#ssh.io_cb, Ssh0),
- send_bytes(Reply, D),
- {next_state, {userauth_keyboard_interactive_info_response,client}, D#data{ssh_params = Ssh}};
+ case ssh_auth:handle_userauth_info_request(Msg, Ssh0) of
+ {ok, {Reply, Ssh}} ->
+ send_bytes(Reply, D),
+ {next_state, {userauth_keyboard_interactive_info_response,client}, D#data{ssh_params = Ssh}};
+ not_ok ->
+ {next_state, {userauth,client}, D, [{next_event, internal, Msg}]}
+ end;
handle_event(_, #ssh_msg_userauth_info_response{} = Msg, {userauth_keyboard_interactive, server}, D) ->
case ssh_auth:handle_userauth_info_response(Msg, D#data.ssh_params) of
@@ -809,9 +822,21 @@ handle_event(_, #ssh_msg_userauth_info_response{} = Msg, {userauth_keyboard_inte
{not_authorized, {User, Reason}, {Reply, Ssh}} ->
retry_fun(User, Reason, D),
send_bytes(Reply, D),
- {next_state, {userauth,server}, D#data{ssh_params = Ssh}}
+ {next_state, {userauth,server}, D#data{ssh_params = Ssh}};
+
+ {authorized_but_one_more, _User, {Reply, Ssh}} ->
+ send_bytes(Reply, D),
+ {next_state, {userauth_keyboard_interactive_extra,server}, D#data{ssh_params = Ssh}}
end;
+handle_event(_, #ssh_msg_userauth_info_response{} = Msg, {userauth_keyboard_interactive_extra, server}, D) ->
+ {authorized, User, {Reply, Ssh}} = ssh_auth:handle_userauth_info_response({extra,Msg}, D#data.ssh_params),
+ send_bytes(Reply, D),
+ D#data.starter ! ssh_connected,
+ connected_fun(User, "keyboard-interactive", D),
+ {next_state, {connected,server}, D#data{auth_user = User,
+ ssh_params = Ssh#ssh{authenticated = true}}};
+
handle_event(_, Msg = #ssh_msg_userauth_failure{}, {userauth_keyboard_interactive, client},
#data{ssh_params = Ssh0} = D0) ->
Prefs = [{Method,M,F,A} || {Method,M,F,A} <- Ssh0#ssh.userauth_preference,
@@ -819,7 +844,18 @@ handle_event(_, Msg = #ssh_msg_userauth_failure{}, {userauth_keyboard_interactiv
D = D0#data{ssh_params = Ssh0#ssh{userauth_preference=Prefs}},
{next_state, {userauth,client}, D, [{next_event, internal, Msg}]};
-handle_event(_, Msg=#ssh_msg_userauth_failure{}, {userauth_keyboard_interactive_info_response, client}, D) ->
+handle_event(_, Msg=#ssh_msg_userauth_failure{}, {userauth_keyboard_interactive_info_response, client},
+ #data{ssh_params = Ssh0} = D0) ->
+ Opts = Ssh0#ssh.opts,
+ D = case proplists:get_value(password, Opts) of
+ undefined ->
+ D0;
+ _ ->
+ D0#data{ssh_params =
+ Ssh0#ssh{opts =
+ lists:keyreplace(password,1,Opts,
+ {password,not_ok})}} % FIXME:intermodule dependency
+ end,
{next_state, {userauth,client}, D, [{next_event, internal, Msg}]};
handle_event(_, Msg=#ssh_msg_userauth_success{}, {userauth_keyboard_interactive_info_response, client}, D) ->
@@ -1006,13 +1042,13 @@ handle_event({call,From}, get_print_info, StateName, D) ->
{keep_state_and_data, [{reply,From,Reply}]};
handle_event({call,From}, {connection_info, Options}, _, D) ->
- Info = ssh_info(Options, D, []),
+ Info = fold_keys(Options, fun conn_info/2, D),
{keep_state_and_data, [{reply,From,Info}]};
handle_event({call,From}, {channel_info,ChannelId,Options}, _, D) ->
case ssh_channel:cache_lookup(cache(D), ChannelId) of
#channel{} = Channel ->
- Info = ssh_channel_info(Options, Channel, []),
+ Info = fold_keys(Options, fun chann_info/2, Channel),
{keep_state_and_data, [{reply,From,Info}]};
undefined ->
{keep_state_and_data, [{reply,From,[]}]}
@@ -1206,16 +1242,20 @@ handle_event(internal, prepare_next_packet, _, D) ->
Sz when Sz >= Enough ->
self() ! {D#data.transport_protocol, D#data.socket, <<>>};
_ ->
- inet:setopts(D#data.socket, [{active, once}])
+ ok
end,
+ inet:setopts(D#data.socket, [{active, once}]),
keep_state_and_data;
handle_event(info, {CloseTag,Socket}, StateName,
D = #data{socket = Socket,
transport_close_tag = CloseTag}) ->
- disconnect(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_BY_APPLICATION,
- description = "Connection closed"},
- StateName, D);
+ %% Simulate a disconnect from the peer
+ handle_event(info,
+ #ssh_msg_disconnect{code = ?SSH_DISCONNECT_BY_APPLICATION,
+ description = "Connection closed"},
+ StateName,
+ D);
handle_event(info, {timeout, {_, From} = Request}, _,
#data{connection_state = #connection{requests = Requests} = C0} = D) ->
@@ -1315,12 +1355,10 @@ terminate(shutdown, StateName, State0) ->
State = send_msg(#ssh_msg_disconnect{code = ?SSH_DISCONNECT_BY_APPLICATION,
description = "Application shutdown"},
State0),
-timer:sleep(400), %% FIXME!!! gen_tcp:shutdown instead
finalize_termination(StateName, State);
%% terminate({shutdown,Msg}, StateName, State0) when is_record(Msg,ssh_msg_disconnect)->
%% State = send_msg(Msg, State0),
-%% timer:sleep(400), %% FIXME!!! gen_tcp:shutdown instead
%% finalize_termination(StateName, Msg, State);
terminate({shutdown,_R}, StateName, State) ->
@@ -1382,12 +1420,12 @@ fmt_stat_rec(FieldNames, Rec, Exclude) ->
state_name(),
#data{},
term()
- ) -> {gen_statem:callback_mode(), state_name(), #data{}}.
+ ) -> {ok, state_name(), #data{}}.
%% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
code_change(_OldVsn, StateName, State, _Extra) ->
- {handle_event_function, StateName, State}.
+ {ok, StateName, State}.
%%====================================================================
@@ -1409,18 +1447,15 @@ start_the_connection_child(UserPid, Role, Socket, Options) ->
%% Stopping
-type finalize_termination_result() :: ok .
-finalize_termination(_StateName, #data{transport_cb = Transport,
- connection_state = Connection,
- socket = Socket}) ->
- case Connection of
+finalize_termination(_StateName, D) ->
+ case D#data.connection_state of
#connection{system_supervisor = SysSup,
sub_system_supervisor = SubSysSup} when is_pid(SubSysSup) ->
ssh_system_sup:stop_subsystem(SysSup, SubSysSup);
_ ->
do_nothing
end,
- (catch Transport:close(Socket)),
- ok.
+ close_transport(D).
%%--------------------------------------------------------------------
%% "Invert" the Role
@@ -1475,8 +1510,33 @@ send_msg(Msg, State=#data{ssh_params=Ssh0}) when is_tuple(Msg) ->
send_bytes(Bytes, State),
State#data{ssh_params=Ssh}.
-send_bytes(Bytes, #data{socket = Socket, transport_cb = Transport}) ->
- Transport:send(Socket, Bytes).
+send_bytes(Bytes, #data{sender = Sender}) ->
+ Sender ! {send,Bytes},
+ ok.
+
+close_transport(D) ->
+ D#data.sender ! close,
+ ok.
+
+
+nonblocking_sender(Socket, Callback) ->
+ receive
+ {send, Bytes} ->
+ case Callback:send(Socket, Bytes) of
+ ok ->
+ nonblocking_sender(Socket, Callback);
+ E = {error,_} ->
+ exit({shutdown,E})
+ end;
+
+ close ->
+ case Callback:close(Socket) of
+ ok ->
+ ok;
+ E = {error,_} ->
+ exit({shutdown,E})
+ end
+ end.
handle_version({2, 0} = NumVsn, StrVsn, Ssh0) ->
Ssh = counterpart_versions(NumVsn, StrVsn, Ssh0),
@@ -1514,39 +1574,35 @@ call(FsmPid, Event, Timeout) ->
end.
-handle_connection_msg(Msg, StateName, State0 =
- #data{starter = User,
- connection_state = Connection0,
- event_queue = Qev0}) ->
+handle_connection_msg(Msg, StateName, D0 = #data{starter = User,
+ connection_state = Connection0,
+ event_queue = Qev0}) ->
Renegotiation = renegotiation(StateName),
Role = role(StateName),
- try ssh_connection:handle_msg(Msg, Connection0, Role) of
+ try ssh_connection:handle_msg(Msg, Connection0, Role) of
{{replies, Replies}, Connection} ->
- case StateName of
- {connected,_} ->
- {Repls, State} = send_replies(Replies,
- State0#data{connection_state=Connection}),
- {keep_state, State, Repls};
- _ ->
- {ConnReplies, Replies} =
- lists:splitwith(fun not_connected_filter/1, Replies),
- {Repls, State} = send_replies(Replies,
- State0#data{event_queue = Qev0 ++ ConnReplies}),
- {keep_state, State, Repls}
- end;
+ {Repls, D} =
+ case StateName of
+ {connected,_} ->
+ send_replies(Replies, D0#data{connection_state=Connection});
+ _ ->
+ {ConnReplies, NonConnReplies} = lists:splitwith(fun not_connected_filter/1, Replies),
+ send_replies(NonConnReplies, D0#data{event_queue = Qev0 ++ ConnReplies})
+ end,
+ {keep_state, D, Repls};
{noreply, Connection} ->
- {keep_state, State0#data{connection_state = Connection}};
+ {keep_state, D0#data{connection_state = Connection}};
{disconnect, Reason0, {{replies, Replies}, Connection}} ->
- {Repls,State} = send_replies(Replies, State0#data{connection_state = Connection}),
+ {Repls, D} = send_replies(Replies, D0#data{connection_state = Connection}),
case {Reason0,Role} of
{{_, Reason}, client} when ((StateName =/= {connected,client}) and (not Renegotiation)) ->
User ! {self(), not_connected, Reason};
_ ->
ok
end,
- {stop_and_reply, {shutdown,normal}, Repls, State#data{connection_state = Connection}}
+ {stop_and_reply, {shutdown,normal}, Repls, D#data{connection_state = Connection}}
catch
_:Error ->
@@ -1555,8 +1611,8 @@ handle_connection_msg(Msg, StateName, State0 =
#ssh_msg_disconnect{code = ?SSH_DISCONNECT_BY_APPLICATION,
description = "Internal error"},
Connection0, Role),
- {Repls,State} = send_replies(Replies, State0#data{connection_state = Connection}),
- {stop_and_reply, {shutdown,Error}, Repls, State#data{connection_state = Connection}}
+ {Repls, D} = send_replies(Replies, D0#data{connection_state = Connection}),
+ {stop_and_reply, {shutdown,Error}, Repls, D#data{connection_state = Connection}}
end.
@@ -1639,7 +1695,6 @@ new_channel_id(#data{connection_state = #connection{channel_id_seed = Id} =
disconnect(Msg=#ssh_msg_disconnect{description=Description}, _StateName, State0) ->
State = send_msg(Msg, State0),
disconnect_fun(Description, State),
-timer:sleep(400),
{stop, {shutdown,Description}, State}.
%%%----------------------------------------------------------------
@@ -1648,43 +1703,43 @@ counterpart_versions(NumVsn, StrVsn, #ssh{role = server} = Ssh) ->
counterpart_versions(NumVsn, StrVsn, #ssh{role = client} = Ssh) ->
Ssh#ssh{s_vsn = NumVsn , s_version = StrVsn}.
-ssh_info([], _State, Acc) ->
- Acc;
-ssh_info([client_version | Rest], #data{ssh_params = #ssh{c_vsn = IntVsn,
- c_version = StringVsn}} = State, Acc) ->
- ssh_info(Rest, State, [{client_version, {IntVsn, StringVsn}} | Acc]);
-
-ssh_info([server_version | Rest], #data{ssh_params =#ssh{s_vsn = IntVsn,
- s_version = StringVsn}} = State, Acc) ->
- ssh_info(Rest, State, [{server_version, {IntVsn, StringVsn}} | Acc]);
-ssh_info([peer | Rest], #data{ssh_params = #ssh{peer = Peer}} = State, Acc) ->
- ssh_info(Rest, State, [{peer, Peer} | Acc]);
-ssh_info([sockname | Rest], #data{socket = Socket} = State, Acc) ->
- {ok, SockName} = inet:sockname(Socket),
- ssh_info(Rest, State, [{sockname, SockName}|Acc]);
-ssh_info([user | Rest], #data{auth_user = User} = State, Acc) ->
- ssh_info(Rest, State, [{user, User}|Acc]);
-ssh_info([ _ | Rest], State, Acc) ->
- ssh_info(Rest, State, Acc).
-
-
-ssh_channel_info([], _, Acc) ->
- Acc;
+%%%----------------------------------------------------------------
+conn_info(client_version, #data{ssh_params=S}) -> {S#ssh.c_vsn, S#ssh.c_version};
+conn_info(server_version, #data{ssh_params=S}) -> {S#ssh.s_vsn, S#ssh.s_version};
+conn_info(peer, #data{ssh_params=S}) -> S#ssh.peer;
+conn_info(user, D) -> D#data.auth_user;
+conn_info(sockname, D) -> {ok, SockName} = inet:sockname(D#data.socket),
+ SockName;
+%% dbg options ( = not documented):
+conn_info(socket, D) -> D#data.socket;
+conn_info(chan_ids, D) ->
+ ssh_channel:cache_foldl(fun(#channel{local_id=Id}, Acc) ->
+ [Id | Acc]
+ end, [], cache(D)).
-ssh_channel_info([recv_window | Rest], #channel{recv_window_size = WinSize,
- recv_packet_size = Packsize
- } = Channel, Acc) ->
- ssh_channel_info(Rest, Channel, [{recv_window, {{win_size, WinSize},
- {packet_size, Packsize}}} | Acc]);
-ssh_channel_info([send_window | Rest], #channel{send_window_size = WinSize,
- send_packet_size = Packsize
- } = Channel, Acc) ->
- ssh_channel_info(Rest, Channel, [{send_window, {{win_size, WinSize},
- {packet_size, Packsize}}} | Acc]);
-ssh_channel_info([ _ | Rest], Channel, Acc) ->
- ssh_channel_info(Rest, Channel, Acc).
+%%%----------------------------------------------------------------
+chann_info(recv_window, C) ->
+ {{win_size, C#channel.recv_window_size},
+ {packet_size, C#channel.recv_packet_size}};
+chann_info(send_window, C) ->
+ {{win_size, C#channel.send_window_size},
+ {packet_size, C#channel.send_packet_size}};
+%% dbg options ( = not documented):
+chann_info(pid, C) ->
+ C#channel.user.
+%%%----------------------------------------------------------------
+%% Assisting meta function for the *_info functions
+fold_keys(Keys, Fun, Extra) ->
+ lists:foldr(fun(Key, Acc) ->
+ try Fun(Key, Extra) of
+ Value -> [{Key,Value}|Acc]
+ catch
+ _:_ -> Acc
+ end
+ end, [], Keys).
+%%%----------------------------------------------------------------
log_error(Reason) ->
Report = io_lib:format("Erlang ssh connection handler failed with reason:~n"
" ~p~n"
@@ -1693,7 +1748,6 @@ log_error(Reason) ->
[Reason, erlang:get_stacktrace()]),
error_logger:error_report(Report).
-
%%%----------------------------------------------------------------
not_connected_filter({connection_reply, _Data}) -> true;
not_connected_filter(_) -> false.
diff --git a/lib/ssh/src/ssh_connection_sup.erl b/lib/ssh/src/ssh_connection_sup.erl
index 8c7628e909..0f54053f52 100644
--- a/lib/ssh/src/ssh_connection_sup.erl
+++ b/lib/ssh/src/ssh_connection_sup.erl
@@ -45,6 +45,8 @@ start_child(Sup, Args) ->
%%%=========================================================================
%%% Supervisor callback
%%%=========================================================================
+-spec init( [term()] ) -> {ok,{supervisor:sup_flags(),[supervisor:child_spec()]}} | ignore .
+
init(_) ->
RestartStrategy = simple_one_for_one,
MaxR = 0,
diff --git a/lib/ssh/src/ssh_dbg.erl b/lib/ssh/src/ssh_dbg.erl
index fbf85cfcfc..bd6bc0335b 100644
--- a/lib/ssh/src/ssh_dbg.erl
+++ b/lib/ssh/src/ssh_dbg.erl
@@ -23,7 +23,9 @@
-module(ssh_dbg).
-export([messages/0,
- messages/1
+ messages/1,
+ messages/2,
+ stop/0
]).
-include("ssh.hrl").
@@ -35,39 +37,82 @@
writer,
acc = []}).
%%%================================================================
-messages() -> messages(fun(String,_D) -> io:format(String) end).
-%% messages() -> messages(fun(String,Acc) -> [String|Acc] end)
+messages() ->
+ messages(fun(String,_D) -> io:format(String) end).
messages(Write) when is_function(Write,2) ->
- catch dbg:start(),
-
- Handler = fun msg_formater/2,
- InitialData = #data{writer = Write},
- {ok,_} = dbg:tracer(process, {Handler, InitialData}),
+ messages(Write, fun(X) -> X end).
+messages(Write, MangleArg) when is_function(Write,2),
+ is_function(MangleArg,1) ->
+ catch dbg:start(),
+ setup_tracer(Write, MangleArg),
dbg:p(new,c),
+ dbg_ssh_messages().
+
+dbg_ssh_messages() ->
dbg:tp(ssh_message,encode,1, x),
dbg:tp(ssh_message,decode,1, x),
dbg:tpl(ssh_transport,select_algorithm,3, x).
+%%%----------------------------------------------------------------
+stop() ->
+ dbg:stop().
+
%%%================================================================
msg_formater({trace,Pid,call,{ssh_message,encode,[Msg]}}, D) ->
fmt("~nSEND ~p ~s~n", [Pid,wr_record(shrink_bin(Msg))], D);
-
+msg_formater({trace,_Pid,return_from,{ssh_message,encode,1},_Res}, D) ->
+ D;
+
+msg_formater({trace,_Pid,call,{ssh_message,decode,_}}, D) ->
+ D;
msg_formater({trace,Pid,return_from,{ssh_message,decode,1},Msg}, D) ->
- fmt("~nRECV ~p ~s~n", [Pid,wr_record(shrink_bin(Msg))], D);
+ fmt("~n~p RECV ~s~n", [Pid,wr_record(shrink_bin(Msg))], D);
+msg_formater({trace,_Pid,call,{ssh_transport,select_algorithm,_}}, D) ->
+ D;
msg_formater({trace,Pid,return_from,{ssh_transport,select_algorithm,3},{ok,Alg}}, D) ->
- fmt("~nALGORITHMS ~p~n~s~n", [Pid, wr_record(Alg)], D);
+ fmt("~n~p ALGORITHMS~n~s~n", [Pid, wr_record(Alg)], D);
+
+
+msg_formater({trace,Pid,send,{tcp,Sock,Bytes},Pid}, D) ->
+ fmt("~n~p TCP SEND on ~p~n ~p~n", [Pid,Sock, shrink_bin(Bytes)], D);
-msg_formater(_, D) ->
- D.
+msg_formater({trace,Pid,send,{tcp,Sock,Bytes},Dest}, D) ->
+ fmt("~n~p TCP SEND from ~p TO ~p~n ~p~n", [Pid,Sock,Dest, shrink_bin(Bytes)], D);
+
+msg_formater({trace,Pid,send,ErlangMsg,Dest}, D) ->
+ fmt("~n~p ERL MSG SEND TO ~p~n ~p~n", [Pid,Dest, shrink_bin(ErlangMsg)], D);
+
+
+msg_formater({trace,Pid,'receive',{tcp,Sock,Bytes}}, D) ->
+ fmt("~n~p TCP RECEIVE on ~p~n ~p~n", [Pid,Sock,shrink_bin(Bytes)], D);
+
+msg_formater({trace,Pid,'receive',ErlangMsg}, D) ->
+ fmt("~n~p ERL MSG RECEIVE~n ~p~n", [Pid,shrink_bin(ErlangMsg)], D);
+
+
+msg_formater(M, D) ->
+ fmt("~nDBG ~n~p~n", [shrink_bin(M)], D).
+
+%% msg_formater(_, D) ->
+%% D.
fmt(Fmt, Args, D=#data{writer=Write,acc=Acc}) ->
D#data{acc = Write(io_lib:format(Fmt, Args), Acc)}.
%%%----------------------------------------------------------------
+setup_tracer(Write, MangleArg) ->
+ Handler = fun(Arg, D) ->
+ msg_formater(MangleArg(Arg), D)
+ end,
+ InitialData = #data{writer = Write},
+ {ok,_} = dbg:tracer(process, {Handler, InitialData}),
+ ok.
+
+%%%----------------------------------------------------------------
shrink_bin(B) when is_binary(B), size(B)>100 -> {'*** SHRINKED BIN',size(B),element(1,split_binary(B,20)),'***'};
shrink_bin(L) when is_list(L) -> lists:map(fun shrink_bin/1, L);
shrink_bin(T) when is_tuple(T) -> list_to_tuple(shrink_bin(tuple_to_list(T)));
diff --git a/lib/ssh/src/ssh_file.erl b/lib/ssh/src/ssh_file.erl
index 4486d36fe4..216f65f33a 100644
--- a/lib/ssh/src/ssh_file.erl
+++ b/lib/ssh/src/ssh_file.erl
@@ -43,7 +43,28 @@
-define(PERM_644, 8#644).
-%% API
+%%% API
+
+%%% client
+-spec add_host_key(string(),
+ public_key:public_key(),
+ proplists:proplist()) -> ok | {error,term()}.
+
+-spec is_host_key(public_key:public_key(),
+ string(),
+ ssh_client_key_api:algorithm(),
+ proplists:proplist()) -> boolean().
+
+-spec user_key(ssh_client_key_api:algorithm(),
+ proplists:proplist()) -> {ok, public_key:private_key()} | {error,term()}.
+
+%%% server
+-spec host_key(ssh_server_key_api:algorithm(),
+ proplists:proplist()) -> {ok, public_key:private_key()} | {error,term()}.
+
+-spec is_auth_key(public_key:public_key(),
+ string(), proplists:proplist()) -> boolean().
+
%% Used by server
host_key(Algorithm, Opts) ->
diff --git a/lib/ssh/src/ssh_io.erl b/lib/ssh/src/ssh_io.erl
index 026d0f6151..1d8f370884 100644
--- a/lib/ssh/src/ssh_io.erl
+++ b/lib/ssh/src/ssh_io.erl
@@ -31,56 +31,55 @@ read_line(Prompt, Ssh) ->
format("~s", [listify(Prompt)]),
proplists:get_value(user_pid, Ssh) ! {self(), question},
receive
- Answer ->
+ Answer when is_list(Answer) ->
Answer
end.
yes_no(Prompt, Ssh) ->
- io:format("~s [y/n]?", [Prompt]),
+ format("~s [y/n]?", [Prompt]),
proplists:get_value(user_pid, Ssh#ssh.opts) ! {self(), question},
receive
- Answer ->
+ %% I can't see that the atoms y and n are ever received, but it must
+ %% be investigated before removing
+ y -> yes;
+ n -> no;
+
+ Answer when is_list(Answer) ->
case trim(Answer) of
"y" -> yes;
"n" -> no;
"Y" -> yes;
"N" -> no;
- y -> yes;
- n -> no;
_ ->
- io:format("please answer y or n\n"),
+ format("please answer y or n\n",[]),
yes_no(Prompt, Ssh)
end
end.
-read_password(Prompt, Ssh) ->
+read_password(Prompt, #ssh{opts=Opts}) -> read_password(Prompt, Opts);
+read_password(Prompt, Opts) when is_list(Opts) ->
format("~s", [listify(Prompt)]),
- case is_list(Ssh) of
- false ->
- proplists:get_value(user_pid, Ssh#ssh.opts) ! {self(), user_password};
- _ ->
- proplists:get_value(user_pid, Ssh) ! {self(), user_password}
- end,
+ proplists:get_value(user_pid, Opts) ! {self(), user_password},
receive
- Answer ->
- case Answer of
- "" ->
- read_password(Prompt, Ssh);
- Pass -> Pass
- end
+ Answer when is_list(Answer) ->
+ case trim(Answer) of
+ "" ->
+ read_password(Prompt, Opts);
+ Pwd ->
+ Pwd
+ end
end.
-listify(A) when is_atom(A) ->
- atom_to_list(A);
-listify(L) when is_list(L) ->
- L;
-listify(B) when is_binary(B) ->
- binary_to_list(B).
format(Fmt, Args) ->
io:format(Fmt, Args).
+%%%================================================================
+listify(A) when is_atom(A) -> atom_to_list(A);
+listify(L) when is_list(L) -> L;
+listify(B) when is_binary(B) -> binary_to_list(B).
+
trim(Line) when is_list(Line) ->
lists:reverse(trim1(lists:reverse(trim1(Line))));
@@ -93,6 +92,3 @@ trim1([$\r|Cs]) -> trim(Cs);
trim1([$\n|Cs]) -> trim(Cs);
trim1([$\t|Cs]) -> trim(Cs);
trim1(Cs) -> Cs.
-
-
-
diff --git a/lib/ssh/src/ssh_message.erl b/lib/ssh/src/ssh_message.erl
index db80d4c9e3..562f040477 100644
--- a/lib/ssh/src/ssh_message.erl
+++ b/lib/ssh/src/ssh_message.erl
@@ -50,7 +50,15 @@
-define(Empint(X), (ssh_bits:mpint(X))/binary ).
-define(Ebinary(X), ?STRING(X) ).
--define(unicode_list(B), unicode:characters_to_list(B)).
+ucl(B) ->
+ try unicode:characters_to_list(B) of
+ L when is_list(L) -> L;
+ {error,_Matched,Rest} -> throw({error,{bad_unicode,Rest}})
+ catch
+ _:_ -> throw({error,bad_unicode})
+ end.
+
+-define(unicode_list(B), ucl(B)).
encode(#ssh_msg_global_request{
name = Name,
diff --git a/lib/ssh/src/ssh_server_key_api.erl b/lib/ssh/src/ssh_server_key_api.erl
index c1d43a486c..3f1b886fa7 100644
--- a/lib/ssh/src/ssh_server_key_api.erl
+++ b/lib/ssh/src/ssh_server_key_api.erl
@@ -23,9 +23,16 @@
-include_lib("public_key/include/public_key.hrl").
-include("ssh.hrl").
--callback host_key(Algorithm :: 'ssh-rsa'| 'ssh-dss'| atom(), DaemonOptions :: proplists:proplist()) ->
- {ok, PrivateKey :: #'RSAPrivateKey'{}| #'DSAPrivateKey'{} | term()} | {error, string()}.
+-export_type([algorithm/0]).
--callback is_auth_key(PublicKey :: #'RSAPublicKey'{}| {integer(), #'Dss-Parms'{}}| term(),
- User :: string(), DaemonOptions :: proplists:proplist()) ->
+-type algorithm() :: ssh_client_key_api:algorithm().
+
+
+-callback host_key(Algorithm :: algorithm(),
+ DaemonOptions :: proplists:proplist()) ->
+ {ok, PrivateKey :: public_key:private_key()} | {error, term()}.
+
+-callback is_auth_key(PublicKey :: public_key:public_key(),
+ User :: string(),
+ DaemonOptions :: proplists:proplist()) ->
boolean().
diff --git a/lib/ssh/src/ssh_sftp.erl b/lib/ssh/src/ssh_sftp.erl
index b03652a136..afc2fb88ff 100644
--- a/lib/ssh/src/ssh_sftp.erl
+++ b/lib/ssh/src/ssh_sftp.erl
@@ -95,8 +95,31 @@
%%====================================================================
start_channel(Cm) when is_pid(Cm) ->
start_channel(Cm, []);
+start_channel(Socket) when is_port(Socket) ->
+ start_channel(Socket, []);
start_channel(Host) when is_list(Host) ->
start_channel(Host, []).
+
+start_channel(Socket, Options) when is_port(Socket) ->
+ Timeout =
+ %% A mixture of ssh:connect and ssh_sftp:start_channel:
+ case proplists:get_value(connect_timeout, Options, undefined) of
+ undefined ->
+ proplists:get_value(timeout, Options, infinity);
+ TO ->
+ TO
+ end,
+ case ssh:connect(Socket, Options, Timeout) of
+ {ok,Cm} ->
+ case start_channel(Cm, Options) of
+ {ok, Pid} ->
+ {ok, Pid, Cm};
+ Error ->
+ Error
+ end;
+ Error ->
+ Error
+ end;
start_channel(Cm, Opts) when is_pid(Cm) ->
Timeout = proplists:get_value(timeout, Opts, infinity),
{_, ChanOpts, SftpOpts} = handle_options(Opts, [], [], []),
diff --git a/lib/ssh/src/ssh_sftpd.erl b/lib/ssh/src/ssh_sftpd.erl
index 819cba697e..dca018f20f 100644
--- a/lib/ssh/src/ssh_sftpd.erl
+++ b/lib/ssh/src/ssh_sftpd.erl
@@ -57,6 +57,22 @@
%%====================================================================
%% API
%%====================================================================
+-spec init(Args :: term()) ->
+ {ok, State :: term()} | {ok, State :: term(), timeout() | hibernate} |
+ {stop, Reason :: term()} | ignore.
+
+-spec terminate(Reason :: (normal | shutdown | {shutdown, term()} |
+ term()),
+ State :: term()) ->
+ term().
+
+-spec handle_msg(Msg ::term(), State :: term()) ->
+ {ok, State::term()} | {stop, ChannelId::integer(), State::term()}.
+-spec handle_ssh_msg({ssh_cm, ConnectionRef::term(), SshMsg::term()},
+ State::term()) -> {ok, State::term()} |
+ {stop, ChannelId::integer(),
+ State::term()}.
+
subsystem_spec(Options) ->
{"sftp", {?MODULE, Options}}.
diff --git a/lib/ssh/src/ssh_shell.erl b/lib/ssh/src/ssh_shell.erl
index d31d5a297d..17224b6ef4 100644
--- a/lib/ssh/src/ssh_shell.erl
+++ b/lib/ssh/src/ssh_shell.erl
@@ -45,6 +45,21 @@
%%====================================================================
%% ssh_channel callbacks
%%====================================================================
+-spec init(Args :: term()) ->
+ {ok, State :: term()} | {ok, State :: term(), timeout() | hibernate} |
+ {stop, Reason :: term()} | ignore.
+
+-spec terminate(Reason :: (normal | shutdown | {shutdown, term()} |
+ term()),
+ State :: term()) ->
+ term().
+
+-spec handle_msg(Msg ::term(), State :: term()) ->
+ {ok, State::term()} | {stop, ChannelId::integer(), State::term()}.
+-spec handle_ssh_msg({ssh_cm, ConnectionRef::term(), SshMsg::term()},
+ State::term()) -> {ok, State::term()} |
+ {stop, ChannelId::integer(),
+ State::term()}.
%%--------------------------------------------------------------------
%% Function: init(Args) -> {ok, State}
diff --git a/lib/ssh/src/ssh_subsystem_sup.erl b/lib/ssh/src/ssh_subsystem_sup.erl
index 11e02491c4..637f5f398f 100644
--- a/lib/ssh/src/ssh_subsystem_sup.erl
+++ b/lib/ssh/src/ssh_subsystem_sup.erl
@@ -51,6 +51,8 @@ channel_supervisor(SupPid) ->
%%%=========================================================================
%%% Supervisor callback
%%%=========================================================================
+-spec init( [term()] ) -> {ok,{supervisor:sup_flags(),[supervisor:child_spec()]}} | ignore .
+
init([Opts]) ->
RestartStrategy = one_for_all,
MaxR = 0,
diff --git a/lib/ssh/src/ssh_sup.erl b/lib/ssh/src/ssh_sup.erl
index f827594717..8b57387589 100644
--- a/lib/ssh/src/ssh_sup.erl
+++ b/lib/ssh/src/ssh_sup.erl
@@ -31,6 +31,8 @@
%%%=========================================================================
%%% Supervisor callback
%%%=========================================================================
+-spec init( [term()] ) -> {ok,{supervisor:sup_flags(),[supervisor:child_spec()]}} | ignore .
+
init([]) ->
SupFlags = {one_for_one, 10, 3600},
Children = children(),
diff --git a/lib/ssh/src/ssh_system_sup.erl b/lib/ssh/src/ssh_system_sup.erl
index 9a9786a914..e97ac7b01a 100644
--- a/lib/ssh/src/ssh_system_sup.erl
+++ b/lib/ssh/src/ssh_system_sup.erl
@@ -125,11 +125,16 @@ restart_acceptor(Address, Port, Profile) ->
%%%=========================================================================
%%% Supervisor callback
%%%=========================================================================
+-spec init( [term()] ) -> {ok,{supervisor:sup_flags(),[supervisor:child_spec()]}} | ignore .
+
init([ServerOpts]) ->
RestartStrategy = one_for_one,
MaxR = 0,
MaxT = 3600,
- Children = child_specs(ServerOpts),
+ Children = case proplists:get_value(asocket,ServerOpts) of
+ undefined -> child_specs(ServerOpts);
+ _ -> []
+ end,
{ok, {{RestartStrategy, MaxR, MaxT}, Children}}.
%%%=========================================================================
diff --git a/lib/ssh/src/ssh_transport.erl b/lib/ssh/src/ssh_transport.erl
index 7cb3b75ac0..15b80de30a 100644
--- a/lib/ssh/src/ssh_transport.erl
+++ b/lib/ssh/src/ssh_transport.erl
@@ -46,7 +46,7 @@
handle_kex_ecdh_reply/2,
extract_public_key/1,
ssh_packet/2, pack/2,
- sign/3, verify/4]).
+ sha/1, sign/3, verify/4]).
%%% For test suites
-export([pack/3]).
@@ -1619,6 +1619,11 @@ kex_h(SSH, Key, Min, NBits, Max, Prime, Gen, E, F, K) ->
crypto:hash(sha((SSH#ssh.algorithms)#alg.kex), L).
+sha('ssh-rsa') -> sha;
+sha('ssh-dss') -> sha;
+sha('ecdsa-sha2-nistp256') -> sha(secp256r1);
+sha('ecdsa-sha2-nistp384') -> sha(secp384r1);
+sha('ecdsa-sha2-nistp521') -> sha(secp521r1);
sha(secp256r1) -> sha256;
sha(secp384r1) -> sha384;
sha(secp521r1) -> sha512;
diff --git a/lib/ssh/src/sshc_sup.erl b/lib/ssh/src/sshc_sup.erl
index 71b5c2c46a..15858f36e1 100644
--- a/lib/ssh/src/sshc_sup.erl
+++ b/lib/ssh/src/sshc_sup.erl
@@ -51,6 +51,8 @@ stop_child(Client) ->
%%%=========================================================================
%%% Supervisor callback
%%%=========================================================================
+-spec init( [term()] ) -> {ok,{supervisor:sup_flags(),[supervisor:child_spec()]}} | ignore .
+
init(Args) ->
RestartStrategy = simple_one_for_one,
MaxR = 0,
diff --git a/lib/ssh/src/sshd_sup.erl b/lib/ssh/src/sshd_sup.erl
index ac9e232b3a..04d2df30f7 100644
--- a/lib/ssh/src/sshd_sup.erl
+++ b/lib/ssh/src/sshd_sup.erl
@@ -75,6 +75,8 @@ system_name(SysSup) ->
%%%=========================================================================
%%% Supervisor callback
%%%=========================================================================
+-spec init( [term()] ) -> {ok,{supervisor:sup_flags(),[supervisor:child_spec()]}} | ignore .
+
init([Servers]) ->
RestartStrategy = one_for_one,
MaxR = 10,
diff --git a/lib/ssh/test/ssh_algorithms_SUITE.erl b/lib/ssh/test/ssh_algorithms_SUITE.erl
index 9910b8f1d7..8b2db0e1a8 100644
--- a/lib/ssh/test/ssh_algorithms_SUITE.erl
+++ b/lib/ssh/test/ssh_algorithms_SUITE.erl
@@ -24,11 +24,12 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("ssh/src/ssh_transport.hrl").
+-include("ssh_test_lib.hrl").
%% Note: This directive should only be used in test suites.
-compile(export_all).
--define(TIMEOUT, 10000).
+-define(TIMEOUT, 35000).
%%--------------------------------------------------------------------
%% Common Test interface functions -----------------------------------
@@ -70,30 +71,39 @@ two_way_tags() -> [cipher,mac,compression].
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- ct:log("os:getenv(\"HOME\") = ~p~n"
- "init:get_argument(home) = ~p",
- [os:getenv("HOME"), init:get_argument(home)]),
- ct:log("~n~n"
- "OS ssh:~n=======~n~p~n~n~n"
- "Erl ssh:~n========~n~p~n~n~n"
- "Installed ssh client:~n=====================~n~p~n~n~n"
- "Installed ssh server:~n=====================~n~p~n~n~n"
- "Misc values:~n============~n"
- " -- Default dh group exchange parameters ({min,def,max}): ~p~n"
- " -- dh_default_groups: ~p~n"
- " -- Max num algorithms: ~p~n"
- ,[os:cmd("ssh -V"),
- ssh:default_algorithms(),
- ssh_test_lib:default_algorithms(sshc),
- ssh_test_lib:default_algorithms(sshd),
- {?DEFAULT_DH_GROUP_MIN,?DEFAULT_DH_GROUP_NBITS,?DEFAULT_DH_GROUP_MAX},
- public_key:dh_gex_group_sizes(),
- ?MAX_NUM_ALGORITHMS
- ]),
- ct:log("all() ->~n ~p.~n~ngroups()->~n ~p.~n",[all(),groups()]),
- ssh:start(),
- [{std_simple_sftp_size,25000} % Sftp transferred data size
- | setup_pubkey(Config)].
+ ?CHECK_CRYPTO(
+ begin
+ ct:log("~n"
+ "Environment:~n============~n"
+ "os:getenv(\"HOME\") = ~p~n"
+ "init:get_argument(home) = ~p~n~n~n"
+ "OS ssh:~n=======~n~p~n~n~n"
+ "Erl ssh:~n========~n~p~n~n~n"
+ "crypto:info_lib():~n========~n~p~n~n~n"
+ "Installed ssh client:~n=====================~n~p~n~n~n"
+ "Installed ssh server:~n=====================~n~p~n~n~n"
+ "Misc values:~n============~n"
+ " -- Default dh group exchange parameters ({min,def,max}): ~p~n"
+ " -- dh_default_groups: ~p~n"
+ " -- Max num algorithms: ~p~n"
+ ,[os:getenv("HOME"),
+ init:get_argument(home),
+ os:cmd("ssh -V"),
+ ssh:default_algorithms(),
+ crypto:info_lib(),
+ ssh_test_lib:default_algorithms(sshc),
+ ssh_test_lib:default_algorithms(sshd),
+ {?DEFAULT_DH_GROUP_MIN,?DEFAULT_DH_GROUP_NBITS,?DEFAULT_DH_GROUP_MAX},
+ public_key:dh_gex_group_sizes(),
+ ?MAX_NUM_ALGORITHMS
+ ]),
+ ct:log("all() ->~n ~p.~n~ngroups()->~n ~p.~n",[all(),groups()]),
+ ssh:start(),
+ [{std_simple_sftp_size,25000} % Sftp transferred data size
+ | setup_pubkey(Config)]
+ end
+ ).
+
end_per_suite(_Config) ->
ssh:stop().
@@ -109,7 +119,7 @@ init_per_group(Group, Config) ->
false ->
%% An algorithm group
Tag = proplists:get_value(name,
- hd(?config(tc_group_path, Config))),
+ hd(proplists:get_value(tc_group_path, Config))),
Alg = Group,
PA =
case split(Alg) of
@@ -126,67 +136,63 @@ init_per_group(Group, Config) ->
end.
end_per_group(_Alg, Config) ->
- case ?config(srvr_pid,Config) of
+ case proplists:get_value(srvr_pid,Config) of
Pid when is_pid(Pid) ->
ssh:stop_daemon(Pid),
- ct:log("stopped ~p",[?config(srvr_addr,Config)]);
+ ct:log("stopped ~p",[proplists:get_value(srvr_addr,Config)]);
_ ->
ok
end.
-init_per_testcase(sshc_simple_exec, Config) ->
- start_pubkey_daemon([?config(pref_algs,Config)], Config);
-
+init_per_testcase(sshc_simple_exec_os_cmd, Config) ->
+ start_pubkey_daemon([proplists:get_value(pref_algs,Config)], Config);
init_per_testcase(_TC, Config) ->
Config.
-end_per_testcase(sshc_simple_exec, Config) ->
- case ?config(srvr_pid,Config) of
+end_per_testcase(sshc_simple_exec_os_cmd, Config) ->
+ case proplists:get_value(srvr_pid,Config) of
Pid when is_pid(Pid) ->
ssh:stop_daemon(Pid),
- ct:log("stopped ~p",[?config(srvr_addr,Config)]);
+ ct:log("stopped ~p",[proplists:get_value(srvr_addr,Config)]);
_ ->
ok
end;
end_per_testcase(_TC, Config) ->
Config.
-
%%--------------------------------------------------------------------
%% Test Cases --------------------------------------------------------
%%--------------------------------------------------------------------
%% A simple sftp transfer
simple_sftp(Config) ->
- {Host,Port} = ?config(srvr_addr, Config),
+ {Host,Port} = proplists:get_value(srvr_addr, Config),
ssh_test_lib:std_simple_sftp(Host, Port, Config).
%%--------------------------------------------------------------------
%% A simple exec call
simple_exec(Config) ->
- {Host,Port} = ?config(srvr_addr, Config),
+ {Host,Port} = proplists:get_value(srvr_addr, Config),
ssh_test_lib:std_simple_exec(Host, Port, Config).
%%--------------------------------------------------------------------
%% Testing if no group matches
simple_exec_groups_no_match_too_small(Config) ->
- try simple_exec_group({400,500,600}, Config)
- of
- _ -> ct:fail("Exec though no group available")
- catch
- error:{badmatch,{error,"No possible diffie-hellman-group-exchange group found"}} ->
- ok
- end.
+ try_exec_simple_group({400,500,600}, Config).
simple_exec_groups_no_match_too_large(Config) ->
- try simple_exec_group({9200,9500,9700}, Config)
+ try_exec_simple_group({9200,9500,9700}, Config).
+
+
+try_exec_simple_group(Group, Config) ->
+ try simple_exec_group(Group, Config)
of
_ -> ct:fail("Exec though no group available")
catch
- error:{badmatch,{error,"No possible diffie-hellman-group-exchange group found"}} ->
- ok
+ error:{badmatch,{error,"No possible diffie-hellman-group-exchange group found"}} -> ok;
+ error:{badmatch,{error,"Connection closed"}} -> ok
end.
%%--------------------------------------------------------------------
@@ -221,18 +227,36 @@ interpolate(Is) ->
%%--------------------------------------------------------------------
%% Use the ssh client of the OS to connect
-sshc_simple_exec(Config) ->
+sshc_simple_exec_os_cmd(Config) ->
PrivDir = ?config(priv_dir, Config),
KnownHosts = filename:join(PrivDir, "known_hosts"),
{Host,Port} = ?config(srvr_addr, Config),
- Cmd = lists:concat(["ssh -p ",Port,
- " -C",
- " -o UserKnownHostsFile=",KnownHosts,
- " -o StrictHostKeyChecking=no",
- " ",Host," 1+1."]),
- ct:log("~p",[Cmd]),
- OpenSsh = ssh_test_lib:open_port({spawn, Cmd}, [eof,exit_status]),
- ssh_test_lib:rcv_expected({data,<<"2\n">>}, OpenSsh, ?TIMEOUT).
+ Parent = self(),
+ Client = spawn(
+ fun() ->
+ Cmd = lists:concat(["ssh -p ",Port,
+ " -C"
+ " -o UserKnownHostsFile=",KnownHosts,
+ " -o StrictHostKeyChecking=no"
+ " ",Host," 1+1."]),
+ Result = os:cmd(Cmd),
+ ct:log("~p~n = ~p",[Cmd, Result]),
+ Parent ! {result, self(), Result, "2"}
+ end),
+ receive
+ {result, Client, RawResult, Expect} ->
+ Lines = string:tokens(RawResult, "\r\n"),
+ case lists:any(fun(Line) -> Line==Expect end,
+ Lines) of
+ true ->
+ ok;
+ false ->
+ ct:log("Bad result: ~p~nExpected: ~p~nMangled result: ~p", [RawResult,Expect,Lines]),
+ {fail, "Bad result"}
+ end
+ after ?TIMEOUT ->
+ ct:fail("Did not receive answer")
+ end.
%%--------------------------------------------------------------------
%% Connect to the ssh server of the OS
@@ -299,7 +323,7 @@ specific_test_cases(Tag, Alg, SshcAlgos, SshdAlgos) ->
true ->
case ssh_test_lib:ssh_type() of
openSSH ->
- [sshc_simple_exec];
+ [sshc_simple_exec_os_cmd];
_ ->
[]
end;
@@ -359,8 +383,8 @@ start_pubkey_daemon(Opts0, Config) ->
setup_pubkey(Config) ->
- DataDir = ?config(data_dir, Config),
- UserDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_dsa(DataDir, UserDir),
ssh_test_lib:setup_rsa(DataDir, UserDir),
ssh_test_lib:setup_ecdsa("256", DataDir, UserDir),
@@ -370,7 +394,7 @@ setup_pubkey(Config) ->
simple_exec_group(I, Config) when is_integer(I) ->
simple_exec_group({I,I,I}, Config);
simple_exec_group({Min,I,Max}, Config) ->
- {Host,Port} = ?config(srvr_addr, Config),
+ {Host,Port} = proplists:get_value(srvr_addr, Config),
ssh_test_lib:std_simple_exec(Host, Port, Config,
[{dh_gex_limits,{Min,I,Max}}]).
diff --git a/lib/ssh/test/ssh_basic_SUITE.erl b/lib/ssh/test/ssh_basic_SUITE.erl
index 0fa44ded4f..d52d453007 100644
--- a/lib/ssh/test/ssh_basic_SUITE.erl
+++ b/lib/ssh/test/ssh_basic_SUITE.erl
@@ -25,6 +25,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/inet.hrl").
-include_lib("kernel/include/file.hrl").
+-include("ssh_test_lib.hrl").
%% Note: This directive should only be used in test suites.
%%-compile(export_all).
@@ -49,7 +50,12 @@
inet6_option/1,
inet_option/1,
internal_error/1,
- known_hosts/1,
+ known_hosts/1,
+ login_bad_pwd_no_retry1/1,
+ login_bad_pwd_no_retry2/1,
+ login_bad_pwd_no_retry3/1,
+ login_bad_pwd_no_retry4/1,
+ login_bad_pwd_no_retry5/1,
misc_ssh_options/1,
openssh_zlib_basic_test/1,
packet_size_zero/1,
@@ -99,7 +105,8 @@ all() ->
daemon_opt_fd,
multi_daemon_opt_fd,
packet_size_zero,
- ssh_info_print
+ ssh_info_print,
+ {group, login_bad_pwd_no_retry}
].
groups() ->
@@ -115,7 +122,13 @@ groups() ->
{dsa_pass_key, [], [pass_phrase]},
{rsa_pass_key, [], [pass_phrase]},
{key_cb, [], [key_callback, key_callback_options]},
- {internal_error, [], [internal_error]}
+ {internal_error, [], [internal_error]},
+ {login_bad_pwd_no_retry, [], [login_bad_pwd_no_retry1,
+ login_bad_pwd_no_retry2,
+ login_bad_pwd_no_retry3,
+ login_bad_pwd_no_retry4,
+ login_bad_pwd_no_retry5
+ ]}
].
@@ -130,28 +143,28 @@ basic_tests() ->
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- Config.
+ ?CHECK_CRYPTO(Config).
end_per_suite(_Config) ->
ssh:stop().
%%--------------------------------------------------------------------
init_per_group(dsa_key, Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_dsa(DataDir, PrivDir),
Config;
init_per_group(rsa_key, Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_rsa(DataDir, PrivDir),
Config;
init_per_group(ecdsa_sha2_nistp256_key, Config) ->
case lists:member('ecdsa-sha2-nistp256',
ssh_transport:default_algorithms(public_key)) of
true ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_ecdsa("256", DataDir, PrivDir),
Config;
false ->
@@ -161,8 +174,8 @@ init_per_group(ecdsa_sha2_nistp384_key, Config) ->
case lists:member('ecdsa-sha2-nistp384',
ssh_transport:default_algorithms(public_key)) of
true ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_ecdsa("384", DataDir, PrivDir),
Config;
false ->
@@ -172,28 +185,28 @@ init_per_group(ecdsa_sha2_nistp521_key, Config) ->
case lists:member('ecdsa-sha2-nistp521',
ssh_transport:default_algorithms(public_key)) of
true ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_ecdsa("521", DataDir, PrivDir),
Config;
false ->
{skip, unsupported_pub_key}
end;
init_per_group(rsa_pass_key, Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_rsa_pass_pharse(DataDir, PrivDir, "Password"),
[{pass_phrase, {rsa_pass_phrase, "Password"}}| Config];
init_per_group(dsa_pass_key, Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_dsa_pass_pharse(DataDir, PrivDir, "Password"),
[{pass_phrase, {dsa_pass_phrase, "Password"}}| Config];
init_per_group(host_user_key_differs, Config) ->
- Data = ?config(data_dir, Config),
- Sys = filename:join(?config(priv_dir, Config), system_rsa),
+ Data = proplists:get_value(data_dir, Config),
+ Sys = filename:join(proplists:get_value(priv_dir, Config), system_rsa),
SysUsr = filename:join(Sys, user),
- Usr = filename:join(?config(priv_dir, Config), user_ecdsa_256),
+ Usr = filename:join(proplists:get_value(priv_dir, Config), user_ecdsa_256),
file:make_dir(Sys),
file:make_dir(SysUsr),
file:make_dir(Usr),
@@ -205,18 +218,18 @@ init_per_group(host_user_key_differs, Config) ->
ssh_test_lib:setup_rsa_known_host(Sys, Usr),
Config;
init_per_group(key_cb, Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_dsa(DataDir, PrivDir),
Config;
init_per_group(internal_error, Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_dsa(DataDir, PrivDir),
file:delete(filename:join(PrivDir, "system/ssh_host_dsa_key")),
Config;
init_per_group(dir_options, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
%% Make unreadable dir:
Dir_unreadable = filename:join(PrivDir, "unread"),
ok = file:make_dir(Dir_unreadable),
@@ -261,27 +274,27 @@ init_per_group(_, Config) ->
Config.
end_per_group(dsa_key, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_dsa(PrivDir),
Config;
end_per_group(rsa_key, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_rsa(PrivDir),
Config;
end_per_group(dsa_pass_key, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_dsa(PrivDir),
Config;
end_per_group(rsa_pass_key, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_rsa(PrivDir),
Config;
end_per_group(key_cb, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_dsa(PrivDir),
Config;
end_per_group(internal_error, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_dsa(PrivDir),
Config;
@@ -290,9 +303,9 @@ end_per_group(_, Config) ->
%%--------------------------------------------------------------------
init_per_testcase(TC, Config) when TC==shell_no_unicode ;
TC==shell_unicode_string ->
- PrivDir = ?config(priv_dir, Config),
- UserDir = ?config(priv_dir, Config),
- SysDir = ?config(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
ssh:start(),
Sftpd = {_Pid, _Host, Port} =
ssh_test_lib:daemon([{system_dir, SysDir},
@@ -321,12 +334,12 @@ init_per_testcase(_TestCase, Config) ->
end_per_testcase(TestCase, Config) when TestCase == server_password_option;
TestCase == server_userpassword_option ->
- UserDir = filename:join(?config(priv_dir, Config), nopubkey),
+ UserDir = filename:join(proplists:get_value(priv_dir, Config), nopubkey),
ssh_test_lib:del_dirs(UserDir),
end_per_testcase(Config);
end_per_testcase(TC, Config) when TC==shell_no_unicode ;
TC==shell_unicode_string ->
- case ?config(sftpd, Config) of
+ case proplists:get_value(sftpd, Config) of
{Pid, _, _} ->
ssh:stop_daemon(Pid),
ssh:stop();
@@ -355,8 +368,8 @@ appup_test(Config) when is_list(Config) ->
%%% some options not yet present are not decided if we should support or
%%% if they need thier own test case.
misc_ssh_options(Config) when is_list(Config) ->
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
CMiscOpt0 = [{connect_timeout, 1000}, {user_dir, UserDir}],
CMiscOpt1 = [{connect_timeout, infinity}, {user_dir, UserDir}],
@@ -369,8 +382,8 @@ misc_ssh_options(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
%%% Test configuring IPv4
inet_option(Config) when is_list(Config) ->
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
ClientOpts = [{silently_accept_hosts, true},
{user_dir, UserDir},
@@ -385,8 +398,8 @@ inet_option(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
%%% Test configuring IPv6
inet6_option(Config) when is_list(Config) ->
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
ClientOpts = [{silently_accept_hosts, true},
{user_dir, UserDir},
@@ -402,8 +415,8 @@ inet6_option(Config) when is_list(Config) ->
%%% Test api function ssh_connection:exec
exec(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, UserDir},
@@ -449,8 +462,8 @@ exec_compressed(Config) when is_list(Config) ->
true ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},{user_dir, UserDir},
{preferred_algorithms,[{compression, [zlib]}]},
@@ -478,8 +491,8 @@ exec_compressed(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
%%% Idle timeout test
idle_time(Config) ->
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, UserDir},
@@ -501,8 +514,8 @@ idle_time(Config) ->
%%% Test that ssh:shell/2 works
shell(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
{_Pid, _Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},{user_dir, UserDir},
{failfun, fun ssh_test_lib:failfun/2}]),
@@ -536,9 +549,9 @@ exec_key_differs(Config, UserPKAlgs) ->
of
[] ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system_rsa),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system_rsa),
SystemUserDir = filename:join(SystemDir, user),
- UserDir = filename:join(?config(priv_dir, Config), user_ecdsa_256),
+ UserDir = filename:join(proplists:get_value(priv_dir, Config), user_ecdsa_256),
{_Pid, _Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, SystemUserDir},
@@ -570,9 +583,9 @@ exec_key_differs(Config, UserPKAlgs) ->
%%--------------------------------------------------------------------
exec_key_differs_fail(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system_rsa),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system_rsa),
SystemUserDir = filename:join(SystemDir, user),
- UserDir = filename:join(?config(priv_dir, Config), user_ecdsa_256),
+ UserDir = filename:join(proplists:get_value(priv_dir, Config), user_ecdsa_256),
{_Pid, _Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, SystemUserDir},
@@ -597,10 +610,10 @@ exec_key_differs_fail(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
cli(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
- TmpDir = filename:join(?config(priv_dir,Config), "tmp"),
+ TmpDir = filename:join(proplists:get_value(priv_dir,Config), "tmp"),
ok = ssh_test_lib:del_dirs(TmpDir),
ok = file:make_dir(TmpDir),
@@ -639,8 +652,8 @@ cli(Config) when is_list(Config) ->
%%% Test that get correct error message if you try to start a daemon
%%% on an adress that already runs a daemon see also seq10667
daemon_already_started(Config) when is_list(Config) ->
- SystemDir = ?config(data_dir, Config),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
{Pid, _Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, UserDir},
@@ -654,8 +667,8 @@ daemon_already_started(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
%%% check that known_hosts is updated correctly
known_hosts(Config) when is_list(Config) ->
- SystemDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{user_dir, PrivDir},{system_dir, SystemDir},
{failfun, fun ssh_test_lib:failfun/2}]),
@@ -681,9 +694,9 @@ known_hosts(Config) when is_list(Config) ->
%%% Test that we can use keyes protected by pass phrases
pass_phrase(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
- PhraseArg = ?config(pass_phrase, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
+ PhraseArg = proplists:get_value(pass_phrase, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, UserDir},
@@ -700,8 +713,8 @@ pass_phrase(Config) when is_list(Config) ->
%%% Test that we can use key callback
key_callback(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
NoPubKeyDir = filename:join(UserDir, "nopubkey"),
file:make_dir(NoPubKeyDir),
@@ -724,8 +737,8 @@ key_callback(Config) when is_list(Config) ->
%%% Test that we can use key callback with callback options
key_callback_options(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
NoPubKeyDir = filename:join(UserDir, "nopubkey"),
file:make_dir(NoPubKeyDir),
@@ -751,8 +764,8 @@ key_callback_options(Config) when is_list(Config) ->
%%% Test that client does not hang if disconnects due to internal error
internal_error(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, UserDir},
@@ -768,8 +781,8 @@ internal_error(Config) when is_list(Config) ->
%%% Test ssh_connection:send/3
send(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, UserDir},
@@ -788,8 +801,8 @@ send(Config) when is_list(Config) ->
%%% Test ssh:connection_info([peername, sockname])
peername_sockname(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
{_Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, UserDir},
@@ -838,8 +851,8 @@ ips(Name) when is_list(Name) ->
%%% Client receives close when server closes
close(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
{Server, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, UserDir},
@@ -861,8 +874,8 @@ close(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
%%% Simulate that we try to close an already closed connection
double_close(Config) when is_list(Config) ->
- SystemDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
@@ -881,8 +894,8 @@ double_close(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
daemon_opt_fd(Config) ->
- SystemDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
@@ -908,8 +921,8 @@ daemon_opt_fd(Config) ->
%%--------------------------------------------------------------------
multi_daemon_opt_fd(Config) ->
- SystemDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
@@ -943,8 +956,8 @@ multi_daemon_opt_fd(Config) ->
%%--------------------------------------------------------------------
packet_size_zero(Config) ->
- SystemDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
@@ -974,7 +987,7 @@ packet_size_zero(Config) ->
%%--------------------------------------------------------------------
shell_no_unicode(Config) ->
- new_do_shell(?config(io,Config),
+ new_do_shell(proplists:get_value(io,Config),
[new_prompt,
{type,"io:format(\"hej ~p~n\",[42])."},
{expect,"hej 42"},
@@ -985,7 +998,7 @@ shell_no_unicode(Config) ->
%%--------------------------------------------------------------------
shell_unicode_string(Config) ->
- new_do_shell(?config(io,Config),
+ new_do_shell(proplists:get_value(io,Config),
[new_prompt,
{type,"io:format(\"こにちわ~ts~n\",[\"四二\"])."},
{expect,"こにちわ四二"},
@@ -1002,8 +1015,8 @@ openssh_zlib_basic_test(Config) ->
{skip, io_lib:format("~p compression is not supported",[L])};
true ->
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{user_dir, UserDir},
@@ -1023,11 +1036,11 @@ openssh_zlib_basic_test(Config) ->
%%--------------------------------------------------------------------
ssh_info_print(Config) ->
%% Just check that ssh_print:info() crashes
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
PrintFile = filename:join(PrivDir,info),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
Parent = self(),
UnexpFun = fun(Msg,_Peer) ->
@@ -1089,6 +1102,72 @@ ssh_info_print(Config) ->
%%--------------------------------------------------------------------
+%% Check that a basd pwd is not tried more times. Could cause lock-out
+%% on server
+
+login_bad_pwd_no_retry1(Config) ->
+ login_bad_pwd_no_retry(Config, "keyboard-interactive,password").
+
+login_bad_pwd_no_retry2(Config) ->
+ login_bad_pwd_no_retry(Config, "password,keyboard-interactive").
+
+login_bad_pwd_no_retry3(Config) ->
+ login_bad_pwd_no_retry(Config, "password,publickey,keyboard-interactive").
+
+login_bad_pwd_no_retry4(Config) ->
+ login_bad_pwd_no_retry(Config, "password,other,keyboard-interactive").
+
+login_bad_pwd_no_retry5(Config) ->
+ login_bad_pwd_no_retry(Config, "password,other,keyboard-interactive,password,password").
+
+
+
+
+
+login_bad_pwd_no_retry(Config, AuthMethods) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
+ file:make_dir(UserDir),
+ SysDir = proplists:get_value(data_dir, Config),
+
+ Parent = self(),
+ PwdFun = fun(_, _, _, undefined) -> {false, 1};
+ (_, _, _, _) -> Parent ! retry_bad_pwd,
+ false
+ end,
+
+ {DaemonRef, _Host, Port} =
+ ssh_test_lib:daemon([{system_dir, SysDir},
+ {user_dir, UserDir},
+ {auth_methods, AuthMethods},
+ {user_passwords, [{"foo","somepwd"}]},
+ {pwdfun, PwdFun}
+ ]),
+
+ ConnRes = ssh:connect("localhost", Port,
+ [{silently_accept_hosts, true},
+ {user, "foo"},
+ {password, "badpwd"},
+ {user_dir, UserDir},
+ {user_interaction, false}]),
+
+ receive
+ retry_bad_pwd ->
+ ssh:stop_daemon(DaemonRef),
+ {fail, "Retry bad password"}
+ after 0 ->
+ case ConnRes of
+ {error,"Unable to connect using the available authentication methods"} ->
+ ssh:stop_daemon(DaemonRef),
+ ok;
+ {ok,Conn} ->
+ ssh:close(Conn),
+ ssh:stop_daemon(DaemonRef),
+ {fail, "Connect erroneosly succeded"}
+ end
+ end.
+
+%%--------------------------------------------------------------------
%% Internal functions ------------------------------------------------
%%--------------------------------------------------------------------
%% Due to timing the error message may or may not be delivered to
@@ -1103,8 +1182,8 @@ check_error(Error) ->
ct:fail(Error).
basic_test(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = proplists:get_value(client_opts, Config),
+ ServerOpts = proplists:get_value(server_opts, Config),
{Pid, Host, Port} = ssh_test_lib:daemon(ServerOpts),
{ok, CM} = ssh:connect(Host, Port, ClientOpts),
diff --git a/lib/ssh/test/ssh_benchmark_SUITE.erl b/lib/ssh/test/ssh_benchmark_SUITE.erl
index d9be1a32b7..c2bfc48449 100644
--- a/lib/ssh/test/ssh_benchmark_SUITE.erl
+++ b/lib/ssh/test/ssh_benchmark_SUITE.erl
@@ -29,7 +29,9 @@
-include_lib("ssh/src/ssh_userauth.hrl").
-suite() -> [{ct_hooks,[{ts_install_cth,[{nodenames,2}]}]}].
+suite() -> [{ct_hooks,[{ts_install_cth,[{nodenames,2}]}]},
+ {timetrap,{minutes,3}}
+ ].
%%suite() -> [{ct_hooks,[ts_install_cth]}].
all() -> [{group, opensshc_erld}
@@ -63,8 +65,8 @@ end_per_suite(_Config) ->
init_per_group(opensshc_erld, Config) ->
case ssh_test_lib:ssh_type() of
openSSH ->
- DataDir = ?config(data_dir, Config),
- UserDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_dsa(DataDir, UserDir),
ssh_test_lib:setup_rsa(DataDir, UserDir),
ssh_test_lib:setup_ecdsa("256", DataDir, UserDir),
@@ -97,7 +99,7 @@ end_per_testcase(_Func, _Conf) ->
init_sftp_dirs(Config) ->
- UserDir = ?config(priv_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
SrcDir = filename:join(UserDir, "sftp_src"),
ok = file:make_dir(SrcDir),
SrcFile = "big_data",
@@ -127,8 +129,8 @@ openssh_client_shell(Config) ->
openssh_client_shell(Config, Options) ->
- SystemDir = ?config(data_dir, Config),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
KnownHosts = filename:join(UserDir, "known_hosts"),
{ok, TracerPid} = erlang_trace(),
@@ -184,7 +186,7 @@ openssh_client_shell(Config, Options) ->
end, Times),
ssh:stop_daemon(ServerPid),
ok
- after 10000 ->
+ after 60*1000 ->
ssh:stop_daemon(ServerPid),
exit(SlavePid, kill),
{fail, timeout}
@@ -200,11 +202,11 @@ openssh_client_sftp(Config) ->
openssh_client_sftp(Config, Options) ->
- SystemDir = ?config(data_dir, Config),
- UserDir = ?config(priv_dir, Config),
- SftpSrcDir = ?config(sftp_src_dir, Config),
- SrcFile = ?config(src_file, Config),
- SrcSize = ?config(sftp_size, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
+ SftpSrcDir = proplists:get_value(sftp_src_dir, Config),
+ SrcFile = proplists:get_value(src_file, Config),
+ SrcSize = proplists:get_value(sftp_size, Config),
KnownHosts = filename:join(UserDir, "known_hosts"),
{ok, TracerPid} = erlang_trace(),
@@ -215,6 +217,7 @@ openssh_client_sftp(Config, Options) ->
{root, SftpSrcDir}])]},
{failfun, fun ssh_test_lib:failfun/2}
| Options]),
+ ct:pal("ServerPid = ~p",[ServerPid]),
ct:sleep(500),
Cmd = lists:concat(["sftp",
" -b -",
@@ -231,7 +234,7 @@ openssh_client_sftp(Config, Options) ->
end),
receive
{SlavePid, _ClientResponse} ->
- ct:pal("ClientResponse = ~p",[_ClientResponse]),
+ ct:pal("ClientResponse = ~p~nServerPid = ~p",[_ClientResponse,ServerPid]),
{ok, List} = get_trace_list(TracerPid),
%%ct:pal("List=~p",[List]),
Times = find_times(List, [channel_open_close]),
@@ -260,7 +263,7 @@ openssh_client_sftp(Config, Options) ->
end, Times),
ssh:stop_daemon(ServerPid),
ok
- after 10000 ->
+ after 2*60*1000 ->
ssh:stop_daemon(ServerPid),
exit(SlavePid, kill),
{fail, timeout}
@@ -274,7 +277,7 @@ variants(Tag, Config) ->
[A|_] when is_atom(A) -> two_way
end,
[ [{Tag,tag_value(TagType,Alg)}]
- || Alg <- proplists:get_value(Tag, ?config(common_algs,Config))
+ || Alg <- proplists:get_value(Tag, proplists:get_value(common_algs,Config))
].
tag_value(two_way, Alg) -> [Alg];
@@ -445,10 +448,18 @@ increment({Alg,Sz,T},[]) ->
%%% API for the traceing
%%%
get_trace_list(TracerPid) ->
+ MonRef = monitor(process, TracerPid),
TracerPid ! {get_trace_list,self()},
receive
- {trace_list,L} -> {ok, pair_events(lists:reverse(L))}
- after 5000 -> {error,no_reply}
+ {trace_list,L} ->
+ demonitor(MonRef),
+ {ok, pair_events(lists:reverse(L))};
+ {'DOWN', MonRef, process, TracerPid, Info} ->
+ {error, {tracer_down,Info}}
+
+ after 3*60*1000 ->
+ demonitor(MonRef),
+ {error,no_reply}
end.
erlang_trace() ->
diff --git a/lib/ssh/test/ssh_connection_SUITE.erl b/lib/ssh/test/ssh_connection_SUITE.erl
index 0f757a0322..bcf3b01824 100644
--- a/lib/ssh/test/ssh_connection_SUITE.erl
+++ b/lib/ssh/test/ssh_connection_SUITE.erl
@@ -43,10 +43,15 @@ suite() ->
all() ->
[
{group, openssh},
+ small_interrupted_send,
interrupted_send,
start_shell,
start_shell_exec,
start_shell_exec_fun,
+ start_shell_sock_exec_fun,
+ start_shell_sock_daemon_exec,
+ connect_sock_not_tcp,
+ daemon_sock_not_tcp,
gracefull_invalid_version,
gracefull_invalid_start,
gracefull_invalid_long_start,
@@ -56,10 +61,11 @@ all() ->
max_channels_option
].
groups() ->
- [{openssh, [], payload() ++ ptty()}].
+ [{openssh, [], payload() ++ ptty() ++ sock()}].
payload() ->
[simple_exec,
+ simple_exec_sock,
small_cat,
big_cat,
send_after_exit].
@@ -69,9 +75,14 @@ ptty() ->
ptty_alloc,
ptty_alloc_pixel].
+sock() ->
+ [connect_sock_not_passive,
+ daemon_sock_not_passive
+ ].
+
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- Config.
+ ?CHECK_CRYPTO(Config).
end_per_suite(Config) ->
Config.
@@ -111,6 +122,18 @@ simple_exec() ->
simple_exec(Config) when is_list(Config) ->
ConnectionRef = ssh_test_lib:connect(?SSH_DEFAULT_PORT, [{silently_accept_hosts, true},
{user_interaction, false}]),
+ do_simple_exec(ConnectionRef).
+
+
+simple_exec_sock(_Config) ->
+ {ok, Sock} = gen_tcp:connect("localhost", ?SSH_DEFAULT_PORT, [{active,false}]),
+ {ok, ConnectionRef} = ssh:connect(Sock, [{silently_accept_hosts, true},
+ {user_interaction, false}]),
+ do_simple_exec(ConnectionRef).
+
+
+
+do_simple_exec(ConnectionRef) ->
{ok, ChannelId0} = ssh_connection:session_channel(ConnectionRef, infinity),
success = ssh_connection:exec(ConnectionRef, ChannelId0,
"echo testing", infinity),
@@ -143,6 +166,30 @@ simple_exec(Config) when is_list(Config) ->
end.
%%--------------------------------------------------------------------
+connect_sock_not_tcp(_Config) ->
+ {ok,Sock} = gen_udp:open(0, []),
+ {error, not_tcp_socket} = ssh:connect(Sock, []),
+ gen_udp:close(Sock).
+
+%%--------------------------------------------------------------------
+daemon_sock_not_tcp(_Config) ->
+ {ok,Sock} = gen_udp:open(0, []),
+ {error, not_tcp_socket} = ssh:daemon(Sock),
+ gen_udp:close(Sock).
+
+%%--------------------------------------------------------------------
+connect_sock_not_passive(_Config) ->
+ {ok,Sock} = gen_tcp:connect("localhost", ?SSH_DEFAULT_PORT, []),
+ {error, not_passive_mode} = ssh:connect(Sock, []),
+ gen_tcp:close(Sock).
+
+%%--------------------------------------------------------------------
+daemon_sock_not_passive(_Config) ->
+ {ok,Sock} = gen_tcp:connect("localhost", ?SSH_DEFAULT_PORT, []),
+ {error, not_passive_mode} = ssh:daemon(Sock),
+ gen_tcp:close(Sock).
+
+%%--------------------------------------------------------------------
small_cat() ->
[{doc, "Use 'cat' to echo small data block back to us."}].
@@ -315,54 +362,106 @@ ptty_alloc_pixel(Config) when is_list(Config) ->
ssh:close(ConnectionRef).
%%--------------------------------------------------------------------
+small_interrupted_send(Config) ->
+ K = 1024,
+ M = K*K,
+ do_interrupted_send(Config, 10*M, 4*K).
interrupted_send(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ M = 1024*1024,
+ do_interrupted_send(Config, 10*M, 4*M).
+
+do_interrupted_send(Config, SendSize, EchoSize) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
+ EchoSS_spec = {ssh_echo_server, [EchoSize,[{dbg,true}]]},
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"},
- {subsystems, [{"echo_n", {ssh_echo_server, [4000000]}}]}]),
-
+ {subsystems, [{"echo_n",EchoSS_spec}]}]),
+
+ ct:log("connect", []),
ConnectionRef = ssh_test_lib:connect(Host, Port, [{silently_accept_hosts, true},
{user, "foo"},
{password, "morot"},
{user_interaction, false},
{user_dir, UserDir}]),
-
- {ok, ChannelId} = ssh_connection:session_channel(ConnectionRef, infinity),
-
- success = ssh_connection:subsystem(ConnectionRef, ChannelId, "echo_n", infinity),
-
- %% build 10MB binary
- Data = << <<X:32>> || X <- lists:seq(1,2500000)>>,
-
- %% expect remote end to send us 4MB back
- <<ExpectedData:4000000/binary, _/binary>> = Data,
-
- %% pre-adjust receive window so the other end doesn't block
- ssh_connection:adjust_window(ConnectionRef, ChannelId, size(ExpectedData) + 1),
-
- case ssh_connection:send(ConnectionRef, ChannelId, Data, 10000) of
- {error, closed} ->
- ok;
- Msg ->
- ct:fail({expected,{error,closed}, got, Msg})
- end,
- receive_data(ExpectedData, ConnectionRef, ChannelId),
- ssh:close(ConnectionRef),
- ssh:stop_daemon(Pid).
+ ct:log("connected", []),
+
+ %% build big binary
+ Data = << <<X:32>> || X <- lists:seq(1,SendSize div 4)>>,
+
+ %% expect remote end to send us EchoSize back
+ <<ExpectedData:EchoSize/binary, _/binary>> = Data,
+
+ %% Spawn listener. Otherwise we could get a deadlock due to filled buffers
+ Parent = self(),
+ ResultPid = spawn(
+ fun() ->
+ ct:log("open channel",[]),
+ {ok, ChannelId} = ssh_connection:session_channel(ConnectionRef, infinity),
+ ct:log("start subsystem", []),
+ case ssh_connection:subsystem(ConnectionRef, ChannelId, "echo_n", infinity) of
+ success ->
+ Parent ! {self(), channelId, ChannelId},
+
+ Result =
+ try collect_data(ConnectionRef, ChannelId)
+ of
+ ExpectedData ->
+ ok;
+ _ ->
+ {fail,"unexpected result"}
+ catch
+ Class:Exception ->
+ {fail, io_lib:format("Exception ~p:~p",[Class,Exception])}
+ end,
+ Parent ! {self(), Result};
+ Other ->
+ Parent ! {self(), channelId, error, Other}
+ end
+ end),
+
+ receive
+ {ResultPid, channelId, ChannelId} ->
+ %% pre-adjust receive window so the other end doesn't block
+ ct:log("adjust window", []),
+ ssh_connection:adjust_window(ConnectionRef, ChannelId, size(ExpectedData) + 1),
+
+ ct:log("going to send ~p bytes", [size(Data)]),
+ case ssh_connection:send(ConnectionRef, ChannelId, Data, 30000) of
+ {error, closed} ->
+ ct:log("{error,closed} - That's what we expect :)", []),
+ ok;
+ Msg ->
+ ct:log("Got ~p - that's bad, very bad indeed",[Msg]),
+ ct:fail({expected,{error,closed}, got, Msg})
+ end,
+ ct:log("going to check the result (if it is available)", []),
+ receive
+ {ResultPid, Result} ->
+ ct:log("Got result: ~p", [Result]),
+ ssh:close(ConnectionRef),
+ ssh:stop_daemon(Pid),
+ Result
+ end;
+
+ {ResultPid, channelId, error, Other} ->
+ ssh:close(ConnectionRef),
+ ssh:stop_daemon(Pid),
+ {fail, io_lib:format("ssh_connection:subsystem: ~p",[Other])}
+ end.
%%--------------------------------------------------------------------
start_shell() ->
[{doc, "Start a shell"}].
start_shell(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"},
@@ -391,10 +490,10 @@ start_shell_exec() ->
[{doc, "start shell to exec command"}].
start_shell_exec(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"},
@@ -425,10 +524,10 @@ start_shell_exec_fun() ->
[{doc, "start shell to exec command"}].
start_shell_exec_fun(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"},
@@ -456,12 +555,85 @@ start_shell_exec_fun(Config) when is_list(Config) ->
ssh:stop_daemon(Pid).
%%--------------------------------------------------------------------
+start_shell_sock_exec_fun() ->
+ [{doc, "start shell on tcp-socket to exec command"}].
+
+start_shell_sock_exec_fun(Config) when is_list(Config) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
+ file:make_dir(UserDir),
+ SysDir = proplists:get_value(data_dir, Config),
+ {Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
+ {user_dir, UserDir},
+ {password, "morot"},
+ {exec, fun ssh_exec/1}]),
+
+ {ok, Sock} = gen_tcp:connect(Host, Port, [{active,false}]),
+ {ok,ConnectionRef} = ssh:connect(Sock, [{silently_accept_hosts, true},
+ {user, "foo"},
+ {password, "morot"},
+ {user_interaction, true},
+ {user_dir, UserDir}]),
+
+ {ok, ChannelId0} = ssh_connection:session_channel(ConnectionRef, infinity),
+
+ success = ssh_connection:exec(ConnectionRef, ChannelId0,
+ "testing", infinity),
+
+ receive
+ {ssh_cm, ConnectionRef, {data, _ChannelId, 0, <<"testing\r\n">>}} ->
+ ok
+ after 5000 ->
+ ct:fail("Exec Timeout")
+ end,
+
+ ssh:close(ConnectionRef),
+ ssh:stop_daemon(Pid).
+
+%%--------------------------------------------------------------------
+start_shell_sock_daemon_exec(Config) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
+ file:make_dir(UserDir),
+ SysDir = proplists:get_value(data_dir, Config),
+ {ok,Sl} = gen_tcp:listen(0, [{active,false}]),
+ {ok,{_IP,Port}} = inet:sockname(Sl), % _IP is likely to be {0,0,0,0}. Win don't like...
+
+ spawn_link(fun() ->
+ {ok,Ss} = gen_tcp:connect("localhost", Port, [{active,false}]),
+ {ok, _Pid} = ssh:daemon(Ss, [{system_dir, SysDir},
+ {user_dir, UserDir},
+ {password, "morot"},
+ {exec, fun ssh_exec/1}])
+ end),
+ {ok,Sc} = gen_tcp:accept(Sl),
+ {ok,ConnectionRef} = ssh:connect(Sc, [{silently_accept_hosts, true},
+ {user, "foo"},
+ {password, "morot"},
+ {user_interaction, true},
+ {user_dir, UserDir}]),
+
+ {ok, ChannelId0} = ssh_connection:session_channel(ConnectionRef, infinity),
+
+ success = ssh_connection:exec(ConnectionRef, ChannelId0,
+ "testing", infinity),
+
+ receive
+ {ssh_cm, ConnectionRef, {data, _ChannelId, 0, <<"testing\r\n">>}} ->
+ ok
+ after 5000 ->
+ ct:fail("Exec Timeout")
+ end,
+
+ ssh:close(ConnectionRef).
+
+%%--------------------------------------------------------------------
gracefull_invalid_version(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{_Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
@@ -481,10 +653,10 @@ gracefull_invalid_version(Config) when is_list(Config) ->
end.
gracefull_invalid_start(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{_Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"}]),
@@ -503,10 +675,10 @@ gracefull_invalid_start(Config) when is_list(Config) ->
end.
gracefull_invalid_long_start(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{_Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"}]),
@@ -526,10 +698,10 @@ gracefull_invalid_long_start(Config) when is_list(Config) ->
gracefull_invalid_long_start_no_nl(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{_Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"}]),
@@ -551,10 +723,10 @@ stop_listener() ->
[{doc, "start ssh daemon, setup connections, stop listener, restart listner"}].
stop_listener(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{Pid0, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
@@ -610,10 +782,10 @@ stop_listener(Config) when is_list(Config) ->
end.
start_subsystem_on_closed_channel(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"},
@@ -639,10 +811,10 @@ max_channels_option() ->
[{doc, "Test max_channels option"}].
max_channels_option(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"},
@@ -737,20 +909,36 @@ big_cat_rx(ConnectionRef, ChannelId, Acc) ->
timeout
end.
-receive_data(ExpectedData, ConnectionRef, ChannelId) ->
- ExpectedData = collect_data(ConnectionRef, ChannelId).
-
collect_data(ConnectionRef, ChannelId) ->
- collect_data(ConnectionRef, ChannelId, []).
+ ct:log("Listener ~p running! ConnectionRef=~p, ChannelId=~p",[self(),ConnectionRef,ChannelId]),
+ collect_data(ConnectionRef, ChannelId, [], 0).
-collect_data(ConnectionRef, ChannelId, Acc) ->
+collect_data(ConnectionRef, ChannelId, Acc, Sum) ->
+ TO = 5000,
receive
- {ssh_cm, ConnectionRef, {data, ChannelId, 0, Data}} ->
- collect_data(ConnectionRef, ChannelId, [Data | Acc]);
+ {ssh_cm, ConnectionRef, {data, ChannelId, 0, Data}} when is_binary(Data) ->
+ ct:log("collect_data: received ~p bytes. total ~p bytes",[size(Data),Sum+size(Data)]),
+ collect_data(ConnectionRef, ChannelId, [Data | Acc], Sum+size(Data));
{ssh_cm, ConnectionRef, {eof, ChannelId}} ->
- iolist_to_binary(lists:reverse(Acc))
- after 5000 ->
- timeout
+ try
+ iolist_to_binary(lists:reverse(Acc))
+ of
+ Bin ->
+ ct:log("collect_data: received eof.~nGot in total ~p bytes",[size(Bin)]),
+ Bin
+ catch
+ C:E ->
+ ct:log("collect_data: received eof.~nAcc is strange...~nException=~p:~p~nAcc=~p",
+ [C,E,Acc]),
+ {error,{C,E}}
+ end;
+ Msg ->
+ ct:log("collect_data: ***** unexpected message *****~n~p",[Msg]),
+ collect_data(ConnectionRef, ChannelId, Acc, Sum)
+
+ after TO ->
+ ct:log("collect_data: ----- Nothing received for ~p seconds -----~n",[]),
+ collect_data(ConnectionRef, ChannelId, Acc, Sum)
end.
%%%-------------------------------------------------------------------
diff --git a/lib/ssh/test/ssh_echo_server.erl b/lib/ssh/test/ssh_echo_server.erl
index ed9bbe1b67..5387d21efd 100644
--- a/lib/ssh/test/ssh_echo_server.erl
+++ b/lib/ssh/test/ssh_echo_server.erl
@@ -26,15 +26,29 @@
-record(state, {
n,
id,
- cm
+ cm,
+ dbg = false
}).
-export([init/1, handle_msg/2, handle_ssh_msg/2, terminate/2]).
+-define(DBG(State,Fmt,Args),
+ case State#state.dbg of
+ true -> ct:log("~p:~p ~p "++Fmt, [?MODULE,?LINE,self()|Args]);
+ false -> ok
+ end).
+
+
init([N]) ->
- ct:pal("Echo server: ~p",[self()]),
- {ok, #state{n = N}}.
+ {ok, #state{n = N}};
+init([N,Opts]) ->
+ State = #state{n = N,
+ dbg = proplists:get_value(dbg,Opts,false)
+ },
+ ?DBG(State, "init([~p])",[N]),
+ {ok, State}.
handle_msg({ssh_channel_up, ChannelId, ConnectionManager}, State) ->
+ ?DBG(State, "ssh_channel_up Cid=~p ConnMngr=~p",[ChannelId,ConnectionManager]),
{ok, State#state{id = ChannelId,
cm = ConnectionManager}}.
@@ -42,32 +56,39 @@ handle_ssh_msg({ssh_cm, CM, {data, ChannelId, 0, Data}}, #state{n = N} = State)
M = N - size(Data),
case M > 0 of
true ->
+ ?DBG(State, "ssh_cm data Cid=~p size(Data)=~p M=~p",[ChannelId,size(Data),M]),
ssh_connection:send(CM, ChannelId, Data),
{ok, State#state{n = M}};
false ->
<<SendData:N/binary, _/binary>> = Data,
+ ?DBG(State, "ssh_cm data Cid=~p size(Data)=~p M=~p size(SendData)=~p~nSend eof",[ChannelId,size(Data),M,size(SendData)]),
ssh_connection:send(CM, ChannelId, SendData),
ssh_connection:send_eof(CM, ChannelId),
{stop, ChannelId, State}
end;
handle_ssh_msg({ssh_cm, _ConnectionManager,
{data, _ChannelId, 1, Data}}, State) ->
+ ?DBG(State, "stderr: ~p",[Data]),
error_logger:format(standard_error, " ~p~n", [binary_to_list(Data)]),
{ok, State};
handle_ssh_msg({ssh_cm, _ConnectionManager, {eof, _ChannelId}}, State) ->
+ ?DBG(State, "{eof ~p}",[_ChannelId]),
{ok, State};
-handle_ssh_msg({ssh_cm, _, {signal, _, _}}, State) ->
+handle_ssh_msg({ssh_cm, _, _Sig={signal, _, _}}, State) ->
%% Ignore signals according to RFC 4254 section 6.9.
+ ?DBG(State, "~p",[_Sig]),
{ok, State};
-handle_ssh_msg({ssh_cm, _, {exit_signal, ChannelId, _, _Error, _}},
- State) ->
+handle_ssh_msg({ssh_cm, _, _Sig={exit_signal, ChannelId, _, _Error, _}}, State) ->
+ ?DBG(State, "~p",[_Sig]),
{stop, ChannelId, State};
-handle_ssh_msg({ssh_cm, _, {exit_status, ChannelId, _Status}}, State) ->
+handle_ssh_msg({ssh_cm, _, _Sig={exit_status, ChannelId, _Status}}, State) ->
+ ?DBG(State, "~p",[_Sig]),
{stop, ChannelId, State}.
terminate(_Reason, _State) ->
+ ?DBG(_State, "terminate ~p",[_Reason]),
ok.
diff --git a/lib/ssh/test/ssh_options_SUITE.erl b/lib/ssh/test/ssh_options_SUITE.erl
index 4ca6a473fa..61883c0647 100644
--- a/lib/ssh/test/ssh_options_SUITE.erl
+++ b/lib/ssh/test/ssh_options_SUITE.erl
@@ -27,7 +27,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
-
+-include("ssh_test_lib.hrl").
%%% Test cases
-export([connectfun_disconnectfun_client/1,
@@ -126,19 +126,19 @@ groups() ->
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- Config.
+ ?CHECK_CRYPTO(Config).
end_per_suite(_Config) ->
ssh:stop().
%%--------------------------------------------------------------------
init_per_group(hardening_tests, Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_dsa(DataDir, PrivDir),
Config;
init_per_group(dir_options, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
%% Make unreadable dir:
Dir_unreadable = filename:join(PrivDir, "unread"),
ok = file:make_dir(Dir_unreadable),
@@ -193,7 +193,7 @@ end_per_testcase(TestCase, Config) when TestCase == server_password_option;
TestCase == server_userpassword_option;
TestCase == server_pwdfun_option;
TestCase == server_pwdfun_4_option ->
- UserDir = filename:join(?config(priv_dir, Config), nopubkey),
+ UserDir = filename:join(proplists:get_value(priv_dir, Config), nopubkey),
ssh_test_lib:del_dirs(UserDir),
end_per_testcase(Config);
end_per_testcase(_TestCase, Config) ->
@@ -210,10 +210,10 @@ end_per_testcase(_Config) ->
%%% validate to server that uses the 'password' option
server_password_option(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
{password, "morot"}]),
@@ -243,10 +243,10 @@ server_password_option(Config) when is_list(Config) ->
%%% validate to server that uses the 'password' option
server_userpassword_option(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, PrivDir},
{user_passwords, [{"vego", "morot"}]}]),
@@ -278,10 +278,10 @@ server_userpassword_option(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
%%% validate to server that uses the 'pwdfun' option
server_pwdfun_option(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
CHKPWD = fun("foo",Pwd) -> Pwd=="bar";
(_,_) -> false
end,
@@ -316,10 +316,10 @@ server_pwdfun_option(Config) ->
%%--------------------------------------------------------------------
%%% validate to server that uses the 'pwdfun/4' option
server_pwdfun_4_option(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
PWDFUN = fun("foo",Pwd,{_,_},undefined) -> Pwd=="bar";
("fie",Pwd,{_,_},undefined) -> {Pwd=="bar",new_state};
("bandit",_,_,_) -> disconnect;
@@ -376,10 +376,10 @@ server_pwdfun_4_option(Config) ->
%%--------------------------------------------------------------------
server_pwdfun_4_option_repeat(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
%% Test that the state works
Parent = self(),
PWDFUN = fun("foo",P="bar",_,S) -> Parent!{P,S},true;
@@ -471,10 +471,10 @@ user_dir_option(Config) ->
%%--------------------------------------------------------------------
%%% validate client that uses the 'ssh_msg_debug_fun' option
ssh_msg_debug_fun_option_client(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, UserDir},
@@ -511,10 +511,10 @@ ssh_msg_debug_fun_option_client(Config) ->
%%--------------------------------------------------------------------
connectfun_disconnectfun_server(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
Parent = self(),
Ref = make_ref(),
@@ -549,10 +549,10 @@ connectfun_disconnectfun_server(Config) ->
%%--------------------------------------------------------------------
connectfun_disconnectfun_client(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
Parent = self(),
Ref = make_ref(),
@@ -580,10 +580,10 @@ connectfun_disconnectfun_client(Config) ->
%%--------------------------------------------------------------------
%%% validate client that uses the 'ssh_msg_debug_fun' option
ssh_msg_debug_fun_option_server(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
Parent = self(),
DbgFun = fun(ConnRef,Displ,Msg,Lang) -> Parent ! {msg_dbg,{ConnRef,Displ,Msg,Lang}} end,
@@ -624,10 +624,10 @@ ssh_msg_debug_fun_option_server(Config) ->
%%--------------------------------------------------------------------
disconnectfun_option_server(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
Parent = self(),
DisConnFun = fun(Reason) -> Parent ! {disconnect,Reason} end,
@@ -659,10 +659,10 @@ disconnectfun_option_server(Config) ->
%%--------------------------------------------------------------------
disconnectfun_option_client(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
Parent = self(),
DisConnFun = fun(Reason) -> Parent ! {disconnect,Reason} end,
@@ -693,10 +693,10 @@ disconnectfun_option_client(Config) ->
%%--------------------------------------------------------------------
unexpectedfun_option_server(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
Parent = self(),
ConnFun = fun(_,_,_) -> Parent ! {connection_pid,self()} end,
@@ -736,10 +736,10 @@ unexpectedfun_option_server(Config) ->
%%--------------------------------------------------------------------
unexpectedfun_option_client(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
- SysDir = ?config(data_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
Parent = self(),
UnexpFun = fun(Msg,Peer) ->
@@ -859,8 +859,8 @@ ms_passed(T0) ->
%%--------------------------------------------------------------------
ssh_daemon_minimal_remote_max_packet_size_option(Config) ->
- SystemDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
@@ -957,8 +957,8 @@ ssh_connect_negtimeout_sequential(Config) -> ssh_connect_negtimeout(Config,false
ssh_connect_negtimeout(Config, Parallel) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
NegTimeOut = 2000, % ms
ct:log("Parallel: ~p",[Parallel]),
@@ -990,8 +990,8 @@ ssh_connect_nonegtimeout_connected_sequential(Config) ->
ssh_connect_nonegtimeout_connected(Config, Parallel) ->
process_flag(trap_exit, true),
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
NegTimeOut = 2000, % ms
ct:log("Parallel: ~p",[Parallel]),
@@ -1067,7 +1067,7 @@ connect_fun(ssh__connect, Config) ->
fun(Host,Port) ->
ssh_test_lib:connect(Host, Port,
[{silently_accept_hosts, true},
- {user_dir, ?config(priv_dir,Config)},
+ {user_dir, proplists:get_value(priv_dir,Config)},
{user_interaction, false},
{user, "carni"},
{password, "meat"}
@@ -1092,8 +1092,8 @@ max_sessions(Config, ParallelLogin, Connect0) when is_function(Connect0,2) ->
ct:log("Connect(~p,~p) -> ~p",[Host,Port,R]),
R
end,
- SystemDir = filename:join(?config(priv_dir, Config), system),
- UserDir = ?config(priv_dir, Config),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
+ UserDir = proplists:get_value(priv_dir, Config),
MaxSessions = 5,
{Pid, Host, Port} = ssh_test_lib:daemon([
{system_dir, SystemDir},
diff --git a/lib/ssh/test/ssh_property_test_SUITE.erl b/lib/ssh/test/ssh_property_test_SUITE.erl
index c5cc36c45e..c8aabcedb7 100644
--- a/lib/ssh/test/ssh_property_test_SUITE.erl
+++ b/lib/ssh/test/ssh_property_test_SUITE.erl
@@ -57,7 +57,7 @@ init_per_suite(Config) ->
%%% One group in this suite happens to support only QuickCheck, so skip it
%%% if we run proper.
init_per_group(client_server, Config) ->
- case ?config(property_test_tool,Config) of
+ case proplists:get_value(property_test_tool,Config) of
eqc -> Config;
X -> {skip, lists:concat([X," is not supported"])}
end;
diff --git a/lib/ssh/test/ssh_protocol_SUITE.erl b/lib/ssh/test/ssh_protocol_SUITE.erl
index 57404f40db..4fac1f718a 100644
--- a/lib/ssh/test/ssh_protocol_SUITE.erl
+++ b/lib/ssh/test/ssh_protocol_SUITE.erl
@@ -26,6 +26,7 @@
-include_lib("ssh/src/ssh.hrl"). % ?UINT32, ?BYTE, #ssh{} ...
-include_lib("ssh/src/ssh_transport.hrl").
-include_lib("ssh/src/ssh_auth.hrl").
+-include("ssh_test_lib.hrl").
%% Note: This directive should only be used in test suites.
-compile(export_all).
@@ -87,7 +88,7 @@ groups() ->
init_per_suite(Config) ->
- start_std_daemon( setup_dirs( start_apps(Config))).
+ ?CHECK_CRYPTO(start_std_daemon( setup_dirs( start_apps(Config)))).
end_per_suite(Config) ->
stop_apps(Config).
@@ -107,11 +108,11 @@ init_per_testcase(TC, Config) when TC == gex_client_init_option_groups ;
gex_client_init_option_groups ->
[{dh_gex_groups, [{2345, 3, 41}]}];
gex_client_init_option_groups_file ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
F = filename:join(DataDir, "dh_group_test"),
[{dh_gex_groups, {file,F}}];
gex_client_init_option_groups_moduli_file ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
F = filename:join(DataDir, "dh_group_test.moduli"),
[{dh_gex_groups, {ssh_moduli_file,F}}];
_ when TC == gex_server_gex_limit ;
@@ -589,21 +590,21 @@ stop_apps(_Config) ->
setup_dirs(Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_rsa(DataDir, PrivDir),
Config.
-system_dir(Config) -> filename:join(?config(priv_dir, Config), system).
+system_dir(Config) -> filename:join(proplists:get_value(priv_dir, Config), system).
-user_dir(Config) -> ?config(priv_dir, Config).
+user_dir(Config) -> proplists:get_value(priv_dir, Config).
%%%----------------------------------------------------------------
start_std_daemon(Config) ->
start_std_daemon(Config, []).
start_std_daemon(Config, ExtraOpts) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
UserPasswords = [{"user1","pwd1"}],
diff --git a/lib/ssh/test/ssh_renegotiate_SUITE.erl b/lib/ssh/test/ssh_renegotiate_SUITE.erl
index f1a909cbd0..b10ec3707f 100644
--- a/lib/ssh/test/ssh_renegotiate_SUITE.erl
+++ b/lib/ssh/test/ssh_renegotiate_SUITE.erl
@@ -21,6 +21,7 @@
-module(ssh_renegotiate_SUITE).
-include_lib("common_test/include/ct.hrl").
+-include("ssh_test_lib.hrl").
%% Note: This directive should only be used in test suites.
-compile(export_all).
@@ -45,7 +46,7 @@ tests() -> [rekey, rekey_limit, renegotiate1, renegotiate2].
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- Config.
+ ?CHECK_CRYPTO(Config).
end_per_suite(_Config) ->
ssh:stop().
@@ -108,10 +109,10 @@ rekey(Config) ->
rekey_limit() -> [{timetrap,{seconds,400}}].
rekey_limit(Config) ->
- UserDir = ?config(priv_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
DataFile = filename:join(UserDir, "rekey.data"),
- Algs = ?config(preferred_algorithms, Config),
+ Algs = proplists:get_value(preferred_algorithms, Config),
{Pid, Host, Port} = ssh_test_lib:std_daemon(Config,[{max_random_length_padding,0},
{preferred_algorithms,Algs}]),
@@ -154,10 +155,10 @@ rekey_limit(Config) ->
%%% Test rekeying with simulataneous send request
renegotiate1(Config) ->
- UserDir = ?config(priv_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
DataFile = filename:join(UserDir, "renegotiate1.data"),
- Algs = ?config(preferred_algorithms, Config),
+ Algs = proplists:get_value(preferred_algorithms, Config),
{Pid, Host, DPort} = ssh_test_lib:std_daemon(Config,[{max_random_length_padding,0},
{preferred_algorithms,Algs}]),
@@ -194,10 +195,10 @@ renegotiate1(Config) ->
%%% Test rekeying with inflight messages from peer
renegotiate2(Config) ->
- UserDir = ?config(priv_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
DataFile = filename:join(UserDir, "renegotiate2.data"),
- Algs = ?config(preferred_algorithms, Config),
+ Algs = proplists:get_value(preferred_algorithms, Config),
{Pid, Host, DPort} = ssh_test_lib:std_daemon(Config,[{max_random_length_padding,0},
{preferred_algorithms,Algs}]),
diff --git a/lib/ssh/test/ssh_sftp_SUITE.erl b/lib/ssh/test/ssh_sftp_SUITE.erl
index f6d7be41d6..19ad81e7da 100644
--- a/lib/ssh/test/ssh_sftp_SUITE.erl
+++ b/lib/ssh/test/ssh_sftp_SUITE.erl
@@ -1,4 +1,4 @@
-%%
+%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
@@ -26,7 +26,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
-
+-include("ssh_test_lib.hrl").
% Default timetrap timeout
-define(default_timeout, ?t:minutes(1)).
@@ -45,10 +45,13 @@ all() ->
init_per_suite(Config) ->
- ct:log("file:native_name_encoding() = ~p,~nio:getopts() = ~p",
- [file:native_name_encoding(),io:getopts()]),
- ssh:start(),
- Config.
+ ?CHECK_CRYPTO(
+ begin
+ ct:log("file:native_name_encoding() = ~p,~nio:getopts() = ~p",
+ [file:native_name_encoding(),io:getopts()]),
+ ssh:start(),
+ Config
+ end).
end_per_suite(_onfig) ->
ssh:stop().
@@ -86,42 +89,43 @@ groups() ->
write_file, write_file_iolist, write_big_file, sftp_read_big_file,
rename_file, mk_rm_dir, remove_file, links,
retrieve_attributes, set_attributes, async_read,
- async_write, position, pos_read, pos_write
+ async_write, position, pos_read, pos_write,
+ start_channel_sock
]}
].
init_per_group(not_unicode, Config) ->
ct:comment("Begin ~p",[grps(Config)]),
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
[{user, "Alladin"},
{passwd, "Sesame"},
{data, <<"Hello world!">>},
- {filename, filename:join(PrivDir, "sftp.txt")},
- {testfile, filename:join(PrivDir, "test.txt")},
- {linktest, filename:join(PrivDir, "link_test.txt")},
- {tar_filename, filename:join(PrivDir, "sftp_tar_test.tar")},
- {tar_F1_txt, "f1.txt"},
+ {filename, "sftp.txt"},
+ {testfile, "test.txt"},
+ {linktest, "link_test.txt"},
+ {tar_filename, "sftp_tar_test.tar"},
+ {tar_F1_txt, "f1.txt"},
{datadir_tar, filename:join(DataDir,"sftp_tar_test_data")}
| Config];
init_per_group(unicode, Config) ->
- case file:native_name_encoding() of
- utf8 ->
+ case (file:native_name_encoding() == utf8)
+ andalso ("四" == [22235])
+ of
+ true ->
ct:comment("Begin ~p",[grps(Config)]),
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
NewConfig =
[{user, "åke高兴"},
{passwd, "ärlig日本じん"},
{data, <<"foobar å 一二三四いちにさんち">>},
- {filename, filename:join(PrivDir, "sftp瑞点.txt")},
- {testfile, filename:join(PrivDir, "testハンス.txt")},
- {linktest, filename:join(PrivDir, "link_test語.txt")},
- {tar_filename, filename:join(PrivDir, "sftp_tar_test一二三.tar")},
- {tar_F1_txt, "F一.txt"},
- {tar_F3_txt, "f3.txt"},
- {tar_F4_txt, "g四.txt"},
+ {filename, "sftp瑞点.txt"},
+ {testfile, "testハンス.txt"},
+ {linktest, "link_test語.txt"},
+ {tar_filename, "sftp_tar_test一二三.tar"},
+ {tar_F1_txt, "F一.txt"},
+ {tar_F3_txt, "f3.txt"},
+ {tar_F4_txt, "g四.txt"},
{datadir_tar, filename:join(DataDir,"sftp_tar_test_data_高兴")}
| lists:foldl(fun(K,Cf) -> lists:keydelete(K,1,Cf) end,
Config,
@@ -131,7 +135,7 @@ init_per_group(unicode, Config) ->
]
)
],
- FN = fn(?config(tar_F1_txt,NewConfig), NewConfig),
+ FN = fn(proplists:get_value(tar_F1_txt,NewConfig), NewConfig),
case catch file:read_file(FN) of
{ok,FN_contents} ->
ct:log("Readable file:read_file(~tp) ->~n~tp",[FN,FN_contents]),
@@ -147,10 +151,10 @@ init_per_group(unicode, Config) ->
init_per_group(erlang_server, Config) ->
ct:comment("Begin ~p",[grps(Config)]),
- PrivDir = ?config(priv_dir, Config),
- SysDir = ?config(data_dir, Config),
- User = ?config(user, Config),
- Passwd = ?config(passwd, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
+ User = proplists:get_value(user, Config),
+ Passwd = proplists:get_value(passwd, Config),
Sftpd = {_, HostX, PortX} =
ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, PrivDir},
@@ -176,12 +180,12 @@ init_per_group(openssh_server, Config) ->
init_per_group(remote_tar, Config) ->
ct:comment("Begin ~p",[grps(Config)]),
- {Host,Port} = ?config(peer, Config),
- ct:log("Server (~p) at ~p:~p",[?config(group,Config),Host,Port]),
- User = ?config(user, Config),
- Passwd = ?config(passwd, Config),
+ {Host,Port} = proplists:get_value(peer, Config),
+ ct:log("Server (~p) at ~p:~p",[proplists:get_value(group,Config),Host,Port]),
+ User = proplists:get_value(user, Config),
+ Passwd = proplists:get_value(passwd, Config),
{ok, Connection} =
- case ?config(group, Config) of
+ case proplists:get_value(group, Config) of
erlang_server ->
ssh:connect(Host, Port,
[{user, User},
@@ -216,10 +220,10 @@ end_per_group(_, Config) ->
%%--------------------------------------------------------------------
init_per_testcase(sftp_nonexistent_subsystem, Config) ->
- PrivDir = ?config(priv_dir, Config),
- SysDir = ?config(data_dir, Config),
- User = ?config(user, Config),
- Passwd = ?config(passwd, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ SysDir = proplists:get_value(data_dir, Config),
+ User = proplists:get_value(user, Config),
+ Passwd = proplists:get_value(passwd, Config),
Sftpd = ssh_test_lib:daemon([{system_dir, SysDir},
{user_dir, PrivDir},
{subsystems, []},
@@ -228,14 +232,14 @@ init_per_testcase(sftp_nonexistent_subsystem, Config) ->
]),
[{sftpd, Sftpd} | Config];
-init_per_testcase(version_option, Config) ->
- prep(Config),
+init_per_testcase(version_option, Config0) ->
+ Config = prepare(Config0),
TmpConfig0 = lists:keydelete(watchdog, 1, Config),
TmpConfig = lists:keydelete(sftp, 1, TmpConfig0),
Dog = ct:timetrap(?default_timeout),
- {_,Host, Port} = ?config(sftpd, Config),
- User = ?config(user, Config),
- Passwd = ?config(passwd, Config),
+ {_,Host, Port} = proplists:get_value(sftpd, Config),
+ User = proplists:get_value(user, Config),
+ Passwd = proplists:get_value(passwd, Config),
{ok, ChannelPid, Connection} =
ssh_sftp:start_channel(Host, Port,
[{sftp_vsn, 3},
@@ -246,18 +250,18 @@ init_per_testcase(version_option, Config) ->
Sftp = {ChannelPid, Connection},
[{sftp,Sftp}, {watchdog, Dog} | TmpConfig];
-init_per_testcase(Case, Config0) ->
- prep(Config0),
+init_per_testcase(Case, Config00) ->
+ Config0 = prepare(Config00),
Config1 = lists:keydelete(watchdog, 1, Config0),
Config2 = lists:keydelete(sftp, 1, Config1),
Dog = ct:timetrap(2 * ?default_timeout),
- User = ?config(user, Config0),
- Passwd = ?config(passwd, Config0),
+ User = proplists:get_value(user, Config0),
+ Passwd = proplists:get_value(passwd, Config0),
Config =
- case ?config(group,Config2) of
+ case proplists:get_value(group,Config2) of
erlang_server ->
- {_,Host, Port} = ?config(sftpd, Config2),
+ {_,Host, Port} = proplists:get_value(sftpd, Config2),
{ok, ChannelPid, Connection} =
ssh_sftp:start_channel(Host, Port,
[{user, User},
@@ -279,11 +283,11 @@ init_per_testcase(Case, Config0) ->
[{sftp, Sftp}, {watchdog, Dog} | Config2]
end,
- case catch ?config(remote_tar,Config) of
+ case catch proplists:get_value(remote_tar,Config) of
%% The 'catch' is for the case of Config={skip,...}
true ->
%% Provide a ChannelPid independent of the sftp-channel already opened.
- {ok,ChPid2} = ssh_sftp:start_channel(?config(connection,Config)),
+ {ok,ChPid2} = ssh_sftp:start_channel(proplists:get_value(connection,Config)),
[{channel_pid2,ChPid2} | Config];
_ ->
Config
@@ -292,16 +296,16 @@ init_per_testcase(Case, Config0) ->
end_per_testcase(sftp_nonexistent_subsystem, Config) ->
Config;
end_per_testcase(rename_file, Config) ->
- NewFileName = ?config(testfile, Config),
+ NewFileName = proplists:get_value(testfile, Config),
file:delete(NewFileName),
end_per_testcase(Config);
end_per_testcase(_, Config) ->
end_per_testcase(Config).
end_per_testcase(Config) ->
- {Sftp, Connection} = ?config(sftp, Config),
+ {Sftp, Connection} = proplists:get_value(sftp, Config),
ok = ssh_sftp:stop_channel(Sftp),
- catch ssh_sftp:stop_channel(?config(channel_pid2, Config)),
+ catch ssh_sftp:stop_channel(proplists:get_value(channel_pid2, Config)),
ok = ssh:close(Connection).
%%--------------------------------------------------------------------
@@ -310,9 +314,9 @@ end_per_testcase(Config) ->
open_close_file() ->
[{doc, "Test API functions open/3 and close/2"}].
open_close_file(Config) when is_list(Config) ->
- FileName = ?config(filename, Config),
+ FileName = proplists:get_value(filename, Config),
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
ok = open_close_file(Sftp, FileName, [read]),
ok = open_close_file(Sftp, FileName, [write]),
@@ -329,9 +333,9 @@ open_close_file(Server, File, Mode) ->
open_close_dir() ->
[{doc, "Test API functions opendir/2 and close/2"}].
open_close_dir(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
- {Sftp, _} = ?config(sftp, Config),
- FileName = ?config(filename, Config),
+ PrivDir = proplists:get_value(sftp_priv_dir, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
+ FileName = proplists:get_value(filename, Config),
{ok, Handle} = ssh_sftp:opendir(Sftp, PrivDir),
ok = ssh_sftp:close(Sftp, Handle),
@@ -341,8 +345,8 @@ open_close_dir(Config) when is_list(Config) ->
read_file() ->
[{doc, "Test API funtion read_file/2"}].
read_file(Config) when is_list(Config) ->
- FileName = ?config(filename, Config),
- {Sftp, _} = ?config(sftp, Config),
+ FileName = proplists:get_value(filename, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok, Data} = ssh_sftp:read_file(Sftp, FileName),
{ok, Data} = ssh_sftp:read_file(Sftp, FileName),
{ok, Data} = file:read_file(FileName).
@@ -351,8 +355,8 @@ read_file(Config) when is_list(Config) ->
read_dir() ->
[{doc,"Test API function list_dir/2"}].
read_dir(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
- {Sftp, _} = ?config(sftp, Config),
+ PrivDir = proplists:get_value(sftp_priv_dir, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok, Files} = ssh_sftp:list_dir(Sftp, PrivDir),
ct:log("sftp list dir: ~p~n", [Files]).
@@ -360,8 +364,8 @@ read_dir(Config) when is_list(Config) ->
write_file() ->
[{doc, "Test API function write_file/2"}].
write_file(Config) when is_list(Config) ->
- FileName = ?config(filename, Config),
- {Sftp, _} = ?config(sftp, Config),
+ FileName = proplists:get_value(filename, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
Data = list_to_binary("Hej hopp!"),
ok = ssh_sftp:write_file(Sftp, FileName, [Data]),
@@ -371,8 +375,8 @@ write_file(Config) when is_list(Config) ->
write_file_iolist() ->
[{doc, "Test API function write_file/2 with iolists"}].
write_file_iolist(Config) when is_list(Config) ->
- FileName = ?config(filename, Config),
- {Sftp, _} = ?config(sftp, Config),
+ FileName = proplists:get_value(filename, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
Data = list_to_binary("Hej hopp!"),
lists:foreach(
@@ -392,8 +396,8 @@ write_file_iolist(Config) when is_list(Config) ->
write_big_file() ->
[{doc, "Test API function write_file/2 with big data"}].
write_big_file(Config) when is_list(Config) ->
- FileName = ?config(filename, Config),
- {Sftp, _} = ?config(sftp, Config),
+ FileName = proplists:get_value(filename, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
Data = list_to_binary(lists:duplicate(750000,"a")),
ok = ssh_sftp:write_file(Sftp, FileName, [Data]),
@@ -403,8 +407,8 @@ write_big_file(Config) when is_list(Config) ->
sftp_read_big_file() ->
[{doc, "Test API function read_file/2 with big data"}].
sftp_read_big_file(Config) when is_list(Config) ->
- FileName = ?config(filename, Config),
- {Sftp, _} = ?config(sftp, Config),
+ FileName = proplists:get_value(filename, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
Data = list_to_binary(lists:duplicate(750000,"a")),
ct:log("Data size to write is ~p bytes",[size(Data)]),
@@ -415,9 +419,9 @@ sftp_read_big_file(Config) when is_list(Config) ->
remove_file() ->
[{doc,"Test API function delete/2"}].
remove_file(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
- FileName = ?config(filename, Config),
- {Sftp, _} = ?config(sftp, Config),
+ PrivDir = proplists:get_value(sftp_priv_dir, Config),
+ FileName = proplists:get_value(filename, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok, Files} = ssh_sftp:list_dir(Sftp, PrivDir),
true = lists:member(filename:basename(FileName), Files),
@@ -429,11 +433,11 @@ remove_file(Config) when is_list(Config) ->
rename_file() ->
[{doc, "Test API function rename_file/2"}].
rename_file(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
- FileName = ?config(filename, Config),
- NewFileName = ?config(testfile, Config),
+ PrivDir = proplists:get_value(sftp_priv_dir, Config),
+ FileName = proplists:get_value(filename, Config),
+ NewFileName = proplists:get_value(testfile, Config),
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok, Files} = ssh_sftp:list_dir(Sftp, PrivDir),
ct:log("FileName: ~p, Files: ~p~n", [FileName, Files]),
true = lists:member(filename:basename(FileName), Files),
@@ -449,8 +453,8 @@ rename_file(Config) when is_list(Config) ->
mk_rm_dir() ->
[{doc,"Test API functions make_dir/2, del_dir/2"}].
mk_rm_dir(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
- {Sftp, _} = ?config(sftp, Config),
+ PrivDir = proplists:get_value(sftp_priv_dir, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
DirName = filename:join(PrivDir, "test"),
ok = ssh_sftp:make_dir(Sftp, DirName),
@@ -467,9 +471,9 @@ links(Config) when is_list(Config) ->
{win32, _} ->
{skip, "Links are not fully supported by windows"};
_ ->
- {Sftp, _} = ?config(sftp, Config),
- FileName = ?config(filename, Config),
- LinkFileName = ?config(linktest, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
+ FileName = proplists:get_value(filename, Config),
+ LinkFileName = proplists:get_value(linktest, Config),
ok = ssh_sftp:make_symlink(Sftp, LinkFileName, FileName),
{ok, FileName} = ssh_sftp:read_link(Sftp, LinkFileName)
@@ -479,9 +483,9 @@ links(Config) when is_list(Config) ->
retrieve_attributes() ->
[{doc, "Test API function read_file_info/3"}].
retrieve_attributes(Config) when is_list(Config) ->
- FileName = ?config(filename, Config),
+ FileName = proplists:get_value(filename, Config),
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok, FileInfo} = ssh_sftp:read_file_info(Sftp, FileName),
{ok, NewFileInfo} = file:read_file_info(FileName),
@@ -492,9 +496,9 @@ retrieve_attributes(Config) when is_list(Config) ->
set_attributes() ->
[{doc,"Test API function write_file_info/3"}].
set_attributes(Config) when is_list(Config) ->
- FileName = ?config(testfile, Config),
+ FileName = proplists:get_value(testfile, Config),
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok,Fd} = file:open(FileName, write),
io:put_chars(Fd,"foo"),
ok = ssh_sftp:write_file_info(Sftp, FileName, #file_info{mode=8#400}),
@@ -507,9 +511,9 @@ set_attributes(Config) when is_list(Config) ->
async_read() ->
[{doc,"Test API aread/3"}].
async_read(Config) when is_list(Config) ->
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
- FileName = ?config(filename, Config),
+ FileName = proplists:get_value(filename, Config),
{ok, Handle} = ssh_sftp:open(Sftp, FileName, [read]),
{async, Ref} = ssh_sftp:aread(Sftp, Handle, 20),
@@ -526,8 +530,8 @@ async_read(Config) when is_list(Config) ->
async_write() ->
[{doc,"Test API awrite/3"}].
async_write(Config) when is_list(Config) ->
- {Sftp, _} = ?config(sftp, Config),
- FileName = ?config(testfile, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
+ FileName = proplists:get_value(testfile, Config),
{ok, Handle} = ssh_sftp:open(Sftp, FileName, [write]),
Data = list_to_binary("foobar"),
{async, Ref} = ssh_sftp:awrite(Sftp, Handle, Data),
@@ -544,8 +548,8 @@ async_write(Config) when is_list(Config) ->
position() ->
[{doc, "Test API functions position/3"}].
position(Config) when is_list(Config) ->
- FileName = ?config(testfile, Config),
- {Sftp, _} = ?config(sftp, Config),
+ FileName = proplists:get_value(testfile, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
Data = list_to_binary("1234567890"),
ok = ssh_sftp:write_file(Sftp, FileName, [Data]),
@@ -573,8 +577,8 @@ position(Config) when is_list(Config) ->
pos_read() ->
[{doc,"Test API functions pread/3 and apread/3"}].
pos_read(Config) when is_list(Config) ->
- FileName = ?config(testfile, Config),
- {Sftp, _} = ?config(sftp, Config),
+ FileName = proplists:get_value(testfile, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
Data = list_to_binary("Hej hopp!"),
ok = ssh_sftp:write_file(Sftp, FileName, [Data]),
@@ -600,8 +604,8 @@ pos_read(Config) when is_list(Config) ->
pos_write() ->
[{doc,"Test API functions pwrite/4 and apwrite/4"}].
pos_write(Config) when is_list(Config) ->
- FileName = ?config(testfile, Config),
- {Sftp, _} = ?config(sftp, Config),
+ FileName = proplists:get_value(testfile, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok, Handle} = ssh_sftp:open(Sftp, FileName, [write]),
@@ -625,12 +629,65 @@ pos_write(Config) when is_list(Config) ->
{ok, NewData1} = ssh_sftp:read_file(Sftp, FileName).
%%--------------------------------------------------------------------
+start_channel_sock(Config) ->
+ LoginOpts =
+ case proplists:get_value(group,Config) of
+ erlang_server ->
+ [{user, proplists:get_value(user, Config)},
+ {password, proplists:get_value(passwd, Config)}];
+ openssh_server ->
+ [] % Use public key
+ end,
+
+ Opts = [{user_interaction, false},
+ {silently_accept_hosts, true}
+ | LoginOpts],
+
+ {Host,Port} = proplists:get_value(peer, Config),
+
+ %% Get a tcp socket
+ {ok, Sock} = gen_tcp:connect(Host, Port, [{active,false}]),
+
+ %% and open one channel on one new Connection
+ {ok, ChPid1, Conn} = ssh_sftp:start_channel(Sock, Opts),
+
+ %% Test that the channel is usable
+ FileName = proplists:get_value(filename, Config),
+ ok = open_close_file(ChPid1, FileName, [read]),
+ ok = open_close_file(ChPid1, FileName, [write]),
+
+ %% Try to open a second channel on the Connection
+ {ok, ChPid2} = ssh_sftp:start_channel(Conn, Opts),
+ ok = open_close_file(ChPid1, FileName, [read]),
+ ok = open_close_file(ChPid2, FileName, [read]),
+
+ %% Test that the second channel still works after closing the first one
+ ok = ssh_sftp:stop_channel(ChPid1),
+ ok = open_close_file(ChPid2, FileName, [write]),
+
+ %% Test the Connection survives that all channels are closed
+ ok = ssh_sftp:stop_channel(ChPid2),
+ {ok, ChPid3} = ssh_sftp:start_channel(Conn, Opts),
+ ok = open_close_file(ChPid3, FileName, [write]),
+
+ %% Test that a closed channel really is closed
+ {error, closed} = ssh_sftp:open(ChPid2, FileName, [write]),
+ ok = ssh_sftp:stop_channel(ChPid3),
+
+ %% Test that the socket is closed when the Connection closes
+ ok = ssh:close(Conn),
+ timer:sleep(400), %% Until the stop sequence is fixed
+ {error,einval} = inet:getopts(Sock, [active]),
+
+ ok.
+
+%%--------------------------------------------------------------------
sftp_nonexistent_subsystem() ->
[{doc, "Try to execute sftp subsystem on a server that does not support it"}].
sftp_nonexistent_subsystem(Config) when is_list(Config) ->
- {_,Host, Port} = ?config(sftpd, Config),
- User = ?config(user, Config),
- Passwd = ?config(passwd, Config),
+ {_,Host, Port} = proplists:get_value(sftpd, Config),
+ User = proplists:get_value(user, Config),
+ Passwd = proplists:get_value(passwd, Config),
{error,"server failed to start sftp subsystem"} =
ssh_sftp:start_channel(Host, Port,
[{user_interaction, false},
@@ -646,20 +703,20 @@ version_option(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
create_empty_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
- TarFileName = ?config(tar_filename, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
erl_tar:close(Handle),
- {ChPid,_} = ?config(sftp,Config),
+ {ChPid,_} = proplists:get_value(sftp,Config),
{ok, #file_info{type=regular}} =
ssh_sftp:read_file_info(ChPid, TarFileName).
%%--------------------------------------------------------------------
files_to_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
- TarFileName = ?config(tar_filename, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
- F1 = ?config(tar_F1_txt, Config),
+ F1 = proplists:get_value(tar_F1_txt, Config),
ok = erl_tar:add(Handle, fn(F1,Config), F1, [verbose]),
ok = erl_tar:add(Handle, fn("f2.txt",Config), "f2.txt", [verbose]),
ok = erl_tar:close(Handle),
@@ -667,8 +724,8 @@ files_to_tar(Config) ->
%%--------------------------------------------------------------------
ascii_filename_ascii_contents_to_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
- TarFileName = ?config(tar_filename, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
ok = erl_tar:add(Handle, fn("f2.txt",Config), "f2.txt", [verbose]),
ok = erl_tar:close(Handle),
@@ -676,12 +733,12 @@ ascii_filename_ascii_contents_to_tar(Config) ->
%%--------------------------------------------------------------------
ascii_filename_unicode_contents_to_tar(Config) ->
- case ?config(tar_F3_txt, Config) of
+ case proplists:get_value(tar_F3_txt, Config) of
undefined ->
{skip, "Unicode test"};
Fn ->
- ChPid2 = ?config(channel_pid2, Config),
- TarFileName = ?config(tar_filename, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
ok = erl_tar:add(Handle, fn(Fn,Config), Fn, [verbose]),
ok = erl_tar:close(Handle),
@@ -690,12 +747,12 @@ ascii_filename_unicode_contents_to_tar(Config) ->
%%--------------------------------------------------------------------
unicode_filename_ascii_contents_to_tar(Config) ->
- case ?config(tar_F4_txt, Config) of
+ case proplists:get_value(tar_F4_txt, Config) of
undefined ->
{skip, "Unicode test"};
Fn ->
- ChPid2 = ?config(channel_pid2, Config),
- TarFileName = ?config(tar_filename, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
ok = erl_tar:add(Handle, fn(Fn,Config), Fn, [verbose]),
ok = erl_tar:close(Handle),
@@ -704,8 +761,8 @@ unicode_filename_ascii_contents_to_tar(Config) ->
%%--------------------------------------------------------------------
big_file_to_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
- TarFileName = ?config(tar_filename, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
ok = erl_tar:add(Handle, fn("big.txt",Config), "big.txt", [verbose]),
ok = erl_tar:close(Handle),
@@ -714,18 +771,18 @@ big_file_to_tar(Config) ->
%%--------------------------------------------------------------------
files_chunked_to_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
- TarFileName = ?config(tar_filename, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
- F1 = ?config(tar_F1_txt, Config),
+ F1 = proplists:get_value(tar_F1_txt, Config),
ok = erl_tar:add(Handle, fn(F1,Config), F1, [verbose,{chunks,2}]),
ok = erl_tar:close(Handle),
chk_tar([F1], Config).
%%--------------------------------------------------------------------
directory_to_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
- TarFileName = ?config(tar_filename, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
ok = erl_tar:add(Handle, fn("d1",Config), "d1", [verbose]),
ok = erl_tar:close(Handle),
@@ -733,8 +790,8 @@ directory_to_tar(Config) ->
%%--------------------------------------------------------------------
binaries_to_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
- TarFileName = ?config(tar_filename, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
Bin = <<"A binary">>,
ok = erl_tar:add(Handle, Bin, "b1", [verbose]),
@@ -743,15 +800,15 @@ binaries_to_tar(Config) ->
%%--------------------------------------------------------------------
null_crypto_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
Cinit = fun() -> {ok, no_state, _SendSize=5} end,
Cenc = fun(Bin,CState) -> {ok,Bin,CState,_SendSize=5} end,
Cend = fun(Bin,_CState) -> {ok,Bin} end,
C = {Cinit,Cenc,Cend},
- TarFileName = ?config(tar_filename, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write,{crypto,C}]),
Bin = <<"A binary">>,
- F1 = ?config(tar_F1_txt, Config),
+ F1 = proplists:get_value(tar_F1_txt, Config),
ok = erl_tar:add(Handle, Bin, "b1", [verbose]),
ok = erl_tar:add(Handle, fn(F1,Config), F1, [verbose,{chunks,2}]),
ok = erl_tar:add(Handle, fn("big.txt",Config), "big.txt", [verbose,{chunks,15000}]),
@@ -760,16 +817,16 @@ null_crypto_tar(Config) ->
%%--------------------------------------------------------------------
simple_crypto_tar_small(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
Cinit = fun() -> {ok, no_state, _Size=6} end,
Cenc = fun(Bin,CState) -> {ok,stuff(Bin),CState,_SendSize=5} end,
Cdec = fun(Bin,CState) -> {ok,unstuff(Bin),CState,_Size=4} end,
Cend = fun(Bin,_CState) -> {ok,stuff(Bin)} end,
C = {Cinit,Cenc,Cend},
- TarFileName = ?config(tar_filename, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write,{crypto,C}]),
Bin = <<"A binary">>,
- F1 = ?config(tar_F1_txt, Config),
+ F1 = proplists:get_value(tar_F1_txt, Config),
ok = erl_tar:add(Handle, Bin, "b1", [verbose]),
ok = erl_tar:add(Handle, fn(F1,Config), F1, [verbose,{chunks,2}]),
ok = erl_tar:close(Handle),
@@ -777,16 +834,16 @@ simple_crypto_tar_small(Config) ->
%%--------------------------------------------------------------------
simple_crypto_tar_big(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
Cinit = fun() -> {ok, no_state, _SendSize=6} end,
Cenc = fun(Bin,CState) -> {ok,stuff(Bin),CState,_SendSize=5} end,
Cdec = fun(Bin,CState) -> {ok,unstuff(Bin),CState,_SendSize=4} end,
Cend = fun(Bin,_CState) -> {ok,stuff(Bin)} end,
C = {Cinit,Cenc,Cend},
- TarFileName = ?config(tar_filename, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,Handle} = ssh_sftp:open_tar(ChPid2, TarFileName, [write,{crypto,C}]),
Bin = <<"A binary">>,
- F1 = ?config(tar_F1_txt, Config),
+ F1 = proplists:get_value(tar_F1_txt, Config),
ok = erl_tar:add(Handle, Bin, "b1", [verbose]),
ok = erl_tar:add(Handle, fn(F1,Config), F1, [verbose,{chunks,2}]),
ok = erl_tar:add(Handle, fn("big.txt",Config), "big.txt", [verbose,{chunks,15000}]),
@@ -799,12 +856,12 @@ unstuff(Bin) -> << <<C>> || <<C,C>> <= Bin >>.
%%--------------------------------------------------------------------
read_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
NameBins = lists:sort(
[{"b1",<<"A binary">>},
{"b2",list_to_binary(lists:duplicate(750000,"a"))}
]),
- TarFileName = ?config(tar_filename, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,HandleWrite} = ssh_sftp:open_tar(ChPid2, TarFileName, [write]),
[ok = erl_tar:add(HandleWrite, Bin, Name, [verbose])
|| {Name,Bin} <- NameBins],
@@ -814,7 +871,7 @@ read_tar(Config) ->
%%--------------------------------------------------------------------
read_null_crypto_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
NameBins = lists:sort(
[{"b1",<<"A binary">>},
{"b2",list_to_binary(lists:duplicate(750000,"a"))}
@@ -827,7 +884,7 @@ read_null_crypto_tar(Config) ->
Cw = {Cinitw,Cenc,Cendw},
Cr = {Cinitr,Cdec},
- TarFileName = ?config(tar_filename, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,HandleWrite} = ssh_sftp:open_tar(ChPid2, TarFileName, [write,{crypto,Cw}]),
[ok = erl_tar:add(HandleWrite, Bin, Name, [verbose])
|| {Name,Bin} <- NameBins],
@@ -837,7 +894,7 @@ read_null_crypto_tar(Config) ->
%%--------------------------------------------------------------------
read_crypto_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
NameBins = lists:sort(
[{"b1",<<"A binary">>},
{"b2",list_to_binary(lists:duplicate(750000,"a"))}
@@ -851,7 +908,7 @@ read_crypto_tar(Config) ->
Cw = {Cinitw,Cenc,Cendw},
Cr = {Cinitr,Cdec},
- TarFileName = ?config(tar_filename, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,HandleWrite} = ssh_sftp:open_tar(ChPid2, TarFileName, [write,{crypto,Cw}]),
[ok = erl_tar:add(HandleWrite, Bin, Name, [verbose])
|| {Name,Bin} <- NameBins],
@@ -861,7 +918,7 @@ read_crypto_tar(Config) ->
%%--------------------------------------------------------------------
aes_cbc256_crypto_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
NameBins = lists:sort(
[{"b1",<<"A binary">>},
{"b2",list_to_binary(lists:duplicate(750000,"a"))},
@@ -891,7 +948,7 @@ aes_cbc256_crypto_tar(Config) ->
end,
Cw = {Cinitw,Cenc,Cendw},
- TarFileName = ?config(tar_filename, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,HandleWrite} = ssh_sftp:open_tar(ChPid2, TarFileName, [write,{crypto,Cw}]),
[ok = erl_tar:add(HandleWrite, Bin, Name, [verbose]) || {Name,Bin} <- NameBins],
ok = erl_tar:close(HandleWrite),
@@ -906,7 +963,7 @@ pad(BlockSize, Bin) ->
%%--------------------------------------------------------------------
aes_ctr_stream_crypto_tar(Config) ->
- ChPid2 = ?config(channel_pid2, Config),
+ ChPid2 = proplists:get_value(channel_pid2, Config),
NameBins = lists:sort(
[{"b1",<<"A binary">>},
{"b2",list_to_binary(lists:duplicate(750000,"a"))},
@@ -934,7 +991,7 @@ aes_ctr_stream_crypto_tar(Config) ->
end,
Cw = {Cinitw,Cenc,Cendw},
- TarFileName = ?config(tar_filename, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
{ok,HandleWrite} = ssh_sftp:open_tar(ChPid2, TarFileName, [write,{crypto,Cw}]),
[ok = erl_tar:add(HandleWrite, Bin, Name, [verbose]) || {Name,Bin} <- NameBins],
ok = erl_tar:close(HandleWrite),
@@ -945,12 +1002,12 @@ aes_ctr_stream_crypto_tar(Config) ->
%%--------------------------------------------------------------------
%% Internal functions ------------------------------------------------
%%--------------------------------------------------------------------
-prep(Config) ->
- DataDir = ?config(data_dir, Config),
- TestFile = ?config(filename, Config),
- TestFile1 = ?config(testfile, Config),
- TestLink = ?config(linktest, Config),
- TarFileName = ?config(tar_filename, Config),
+oldprep(Config) ->
+ DataDir = proplists:get_value(data_dir, Config),
+ TestFile = proplists:get_value(filename, Config),
+ TestFile1 = proplists:get_value(testfile, Config),
+ TestLink = proplists:get_value(linktest, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
file:delete(TestFile),
file:delete(TestFile1),
@@ -965,16 +1022,46 @@ prep(Config) ->
ok = file:write_file_info(TestFile,
FileInfo#file_info{mode = Mode}).
+prepare(Config0) ->
+ PrivDir = proplists:get_value(priv_dir, Config0),
+ Dir = filename:join(PrivDir, random_chars(10)),
+ file:make_dir(Dir),
+ Keys = [filename,
+ testfile,
+ linktest,
+ tar_filename],
+ Config1 = foldl_keydelete(Keys, Config0),
+ Config2 = lists:foldl(fun({Key,Name}, ConfAcc) ->
+ [{Key, filename:join(Dir,Name)} | ConfAcc]
+ end,
+ Config1,
+ lists:zip(Keys, [proplists:get_value(K,Config0) || K<-Keys])),
+
+ DataDir = proplists:get_value(data_dir, Config2),
+ FilenameSrc = filename:join(DataDir, "sftp.txt"),
+ FilenameDst = proplists:get_value(filename, Config2),
+ {ok,_} = file:copy(FilenameSrc, FilenameDst),
+ [{sftp_priv_dir,Dir} | Config2].
+
+
+random_chars(N) -> [crypto:rand_uniform($a,$z) || _<-lists:duplicate(N,x)].
+
+foldl_keydelete(Keys, L) ->
+ lists:foldl(fun(K,E) -> lists:keydelete(K,1,E) end,
+ L,
+ Keys).
+
+
chk_tar(Items, Config) ->
chk_tar(Items, Config, []).
chk_tar(Items, Config, Opts) ->
- TarFileName = ?config(tar_filename, Config),
+ TarFileName = proplists:get_value(tar_filename, Config),
chk_tar(Items, TarFileName, Config, Opts).
chk_tar(Items, TarFileName, Config, Opts) when is_list(Opts) ->
tar_size(TarFileName, Config),
- {ChPid,_} = ?config(sftp,Config),
+ {ChPid,_} = proplists:get_value(sftp,Config),
{ok,HandleRead} = ssh_sftp:open_tar(ChPid, TarFileName, [read|Opts]),
{ok,NameValueList} = erl_tar:extract(HandleRead,[memory,verbose]),
ok = erl_tar:close(HandleRead),
@@ -1016,7 +1103,7 @@ analyze_report([], []) ->
"".
tar_size(TarFileName, Config) ->
- {ChPid,_} = ?config(sftp,Config),
+ {ChPid,_} = proplists:get_value(sftp,Config),
{ok,Data} = ssh_sftp:read_file(ChPid, TarFileName),
io:format('Tar file ~p is~n ~p bytes.~n',[TarFileName, size(Data)]).
@@ -1043,7 +1130,7 @@ read_item_contents(ItemName, FileName) ->
end.
fn(Name, Config) ->
- Dir = ?config(datadir_tar, Config),
+ Dir = proplists:get_value(datadir_tar, Config),
filename:join(Dir,Name).
fmt_host({A,B,C,D}) -> lists:concat([A,".",B,".",C,".",D]);
diff --git a/lib/ssh/test/ssh_sftpd_SUITE.erl b/lib/ssh/test/ssh_sftpd_SUITE.erl
index 9385bd127d..52a26110c4 100644
--- a/lib/ssh/test/ssh_sftpd_SUITE.erl
+++ b/lib/ssh/test/ssh_sftpd_SUITE.erl
@@ -28,6 +28,7 @@
-include_lib("kernel/include/file.hrl").
-include("ssh_xfer.hrl").
-include("ssh.hrl").
+-include("ssh_test_lib.hrl").
-define(USER, "Alladin").
-define(PASSWD, "Sesame").
@@ -72,19 +73,22 @@ groups() ->
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
- ssh_test_lib:setup_dsa(DataDir, PrivDir),
- %% to make sure we don't use public-key-auth
- %% this should be tested by other test suites
- UserDir = filename:join(?config(priv_dir, Config), nopubkey),
- file:make_dir(UserDir),
- Config.
+ ?CHECK_CRYPTO(
+ begin
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ ssh_test_lib:setup_dsa(DataDir, PrivDir),
+ %% to make sure we don't use public-key-auth
+ %% this should be tested by other test suites
+ UserDir = filename:join(proplists:get_value(priv_dir, Config), nopubkey),
+ file:make_dir(UserDir),
+ Config
+ end).
end_per_suite(Config) ->
- SysDir = ?config(priv_dir, Config),
+ SysDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_dsa(SysDir),
- UserDir = filename:join(?config(priv_dir, Config), nopubkey),
+ UserDir = filename:join(proplists:get_value(priv_dir, Config), nopubkey),
file:del_dir(UserDir),
ssh:stop().
@@ -101,9 +105,9 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(TestCase, Config) ->
ssh:start(),
prep(Config),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ClientUserDir = filename:join(PrivDir, nopubkey),
- SystemDir = filename:join(?config(priv_dir, Config), system),
+ SystemDir = filename:join(proplists:get_value(priv_dir, Config), system),
Options = [{system_dir, SystemDir},
{user_dir, PrivDir},
@@ -154,8 +158,8 @@ init_per_testcase(TestCase, Config) ->
[{sftp, {Cm, Channel}}, {sftpd, Sftpd }| Config].
end_per_testcase(_TestCase, Config) ->
- ssh_sftpd:stop(?config(sftpd, Config)),
- {Cm, Channel} = ?config(sftp, Config),
+ ssh_sftpd:stop(proplists:get_value(sftpd, Config)),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
ssh_connection:close(Cm, Channel),
ssh:close(Cm),
ssh:stop().
@@ -166,9 +170,9 @@ end_per_testcase(_TestCase, Config) ->
open_close_file() ->
[{doc, "Test SSH_FXP_OPEN and SSH_FXP_CLOSE commands"}].
open_close_file(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
ReqId = 0,
{ok, <<?SSH_FXP_HANDLE, ?UINT32(ReqId), Handle/binary>>, _} =
@@ -196,9 +200,9 @@ open_close_file(Config) when is_list(Config) ->
ver3_open_flags() ->
[{doc, "Test open flags"}].
ver3_open_flags(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "not_exist.txt"),
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
ReqId = 0,
{ok, <<?SSH_FXP_HANDLE, ?UINT32(ReqId), Handle/binary>>, _} =
@@ -230,8 +234,8 @@ ver3_open_flags(Config) when is_list(Config) ->
open_close_dir() ->
[{doc,"Test SSH_FXP_OPENDIR and SSH_FXP_CLOSE commands"}].
open_close_dir(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
- {Cm, Channel} = ?config(sftp, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
FileName = filename:join(PrivDir, "test.txt"),
ReqId = 0,
@@ -257,11 +261,11 @@ open_close_dir(Config) when is_list(Config) ->
read_file() ->
[{doc, "Test SSH_FXP_READ command"}].
read_file(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
{ok, <<?SSH_FXP_HANDLE, ?UINT32(ReqId), Handle/binary>>, _} =
open_file(FileName, Cm, Channel, ReqId,
@@ -280,8 +284,8 @@ read_file(Config) when is_list(Config) ->
read_dir() ->
[{doc,"Test SSH_FXP_READDIR command"}].
read_dir(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
- {Cm, Channel} = ?config(sftp, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
ReqId = 0,
{ok, <<?SSH_FXP_HANDLE, ?UINT32(ReqId), Handle/binary>>, _} =
open_dir(PrivDir, Cm, Channel, ReqId),
@@ -291,11 +295,11 @@ read_dir(Config) when is_list(Config) ->
write_file() ->
[{doc, "Test SSH_FXP_WRITE command"}].
write_file(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
{ok, <<?SSH_FXP_HANDLE, ?UINT32(ReqId), Handle/binary>>, _} =
open_file(FileName, Cm, Channel, ReqId,
@@ -315,10 +319,10 @@ write_file(Config) when is_list(Config) ->
remove_file() ->
[{doc, "Test SSH_FXP_REMOVE command"}].
remove_file(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
{ok, <<?SSH_FXP_STATUS, ?UINT32(ReqId),
?UINT32(?SSH_FX_OK), _/binary>>, _} =
@@ -336,11 +340,11 @@ remove_file(Config) when is_list(Config) ->
rename_file() ->
[{doc, "Test SSH_FXP_RENAME command"}].
rename_file(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
NewFileName = filename:join(PrivDir, "test1.txt"),
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
{ok, <<?SSH_FXP_STATUS, ?UINT32(ReqId),
?UINT32(?SSH_FX_OK), _/binary>>, _} =
@@ -373,8 +377,8 @@ rename_file(Config) when is_list(Config) ->
mk_rm_dir() ->
[{doc, "Test SSH_FXP_MKDIR and SSH_FXP_RMDIR command"}].
mk_rm_dir(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
- {Cm, Channel} = ?config(sftp, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
DirName = filename:join(PrivDir, "test"),
ReqId = 0,
{ok, <<?SSH_FXP_STATUS, ?UINT32(ReqId), ?UINT32(?SSH_FX_OK),
@@ -401,8 +405,8 @@ real_path(Config) when is_list(Config) ->
{skip, "Not a relevant test on windows"};
_ ->
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
- PrivDir = ?config(priv_dir, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
TestDir = filename:join(PrivDir, "ssh_test"),
ok = file:make_dir(TestDir),
@@ -427,8 +431,8 @@ links(Config) when is_list(Config) ->
{skip, "Links are not fully supported by windows"};
_ ->
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
- PrivDir = ?config(priv_dir, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
LinkFileName = filename:join(PrivDir, "link_test.txt"),
@@ -451,10 +455,10 @@ links(Config) when is_list(Config) ->
retrieve_attributes() ->
[{"Test SSH_FXP_STAT, SSH_FXP_LSTAT AND SSH_FXP_FSTAT commands"}].
retrieve_attributes(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
{ok, FileInfo} = file:read_file_info(FileName),
@@ -520,10 +524,10 @@ set_attributes(Config) when is_list(Config) ->
{win32, _} ->
{skip, "Known error bug in erts file:read_file_info"};
_ ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
{ok, FileInfo} = file:read_file_info(FileName),
@@ -574,11 +578,11 @@ set_attributes(Config) when is_list(Config) ->
ver3_rename() ->
[{doc, "Test that ver3 rename message is handled OTP 6352"}].
ver3_rename(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
NewFileName = filename:join(PrivDir, "test1.txt"),
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
{ok, <<?SSH_FXP_STATUS, ?UINT32(ReqId),
?UINT32(?SSH_FX_OK), _/binary>>, _} =
@@ -589,7 +593,7 @@ relpath() ->
[{doc, "Check that realpath works ok seq10670"}].
relpath(Config) when is_list(Config) ->
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
case os:type() of
{win32, _} ->
@@ -611,11 +615,11 @@ relpath(Config) when is_list(Config) ->
sshd_read_file() ->
[{doc,"Test SSH_FXP_READ command, using sshd-server"}].
sshd_read_file(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(PrivDir, "test.txt"),
ReqId = 0,
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
{ok, <<?SSH_FXP_HANDLE, ?UINT32(ReqId), Handle/binary>>, _} =
open_file(FileName, Cm, Channel, ReqId,
@@ -633,9 +637,9 @@ sshd_read_file(Config) when is_list(Config) ->
ver6_basic() ->
[{doc, "Test SFTP Version 6"}].
ver6_basic(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
%FileName = filename:join(PrivDir, "test.txt"),
- {Cm, Channel} = ?config(sftp, Config),
+ {Cm, Channel} = proplists:get_value(sftp, Config),
ReqId = 0,
{ok, <<?SSH_FXP_STATUS, ?UINT32(ReqId), % Ver 6 we have 5
?UINT32(?SSH_FX_FILE_IS_A_DIRECTORY), _/binary>>, _} =
@@ -646,7 +650,7 @@ ver6_basic(Config) when is_list(Config) ->
%% Internal functions ------------------------------------------------
%%--------------------------------------------------------------------
prep(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
TestFile = filename:join(PrivDir, "test.txt"),
TestFile1 = filename:join(PrivDir, "test1.txt"),
@@ -654,7 +658,7 @@ prep(Config) ->
file:delete(TestFile1),
%% Initial config
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
FileName = filename:join(DataDir, "test.txt"),
file:copy(FileName, TestFile),
Mode = 8#00400 bor 8#00200 bor 8#00040, % read & write owner, read group
diff --git a/lib/ssh/test/ssh_sftpd_erlclient_SUITE.erl b/lib/ssh/test/ssh_sftpd_erlclient_SUITE.erl
index 355ce6a8f5..56a33d6349 100644
--- a/lib/ssh/test/ssh_sftpd_erlclient_SUITE.erl
+++ b/lib/ssh/test/ssh_sftpd_erlclient_SUITE.erl
@@ -26,6 +26,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
+-include("ssh_test_lib.hrl").
-define(USER, "Alladin").
-define(PASSWD, "Sesame").
@@ -53,22 +54,25 @@ groups() ->
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- catch ssh:stop(),
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
- FileAlt = filename:join(DataDir, "ssh_sftpd_file_alt.erl"),
- c:c(FileAlt),
- FileName = filename:join(DataDir, "test.txt"),
- {ok, FileInfo} = file:read_file_info(FileName),
- ok = file:write_file_info(FileName,
- FileInfo#file_info{mode = 8#400}),
- ssh_test_lib:setup_dsa(DataDir, PrivDir),
- Config.
+ ?CHECK_CRYPTO(
+ begin
+ catch ssh:stop(),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ FileAlt = filename:join(DataDir, "ssh_sftpd_file_alt.erl"),
+ c:c(FileAlt),
+ FileName = filename:join(DataDir, "test.txt"),
+ {ok, FileInfo} = file:read_file_info(FileName),
+ ok = file:write_file_info(FileName,
+ FileInfo#file_info{mode = 8#400}),
+ ssh_test_lib:setup_dsa(DataDir, PrivDir),
+ Config
+ end).
end_per_suite(Config) ->
- UserDir = filename:join(?config(priv_dir, Config), nopubkey),
+ UserDir = filename:join(proplists:get_value(priv_dir, Config), nopubkey),
file:del_dir(UserDir),
- SysDir = ?config(priv_dir, Config),
+ SysDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_dsa(SysDir),
ok.
@@ -83,7 +87,7 @@ end_per_group(_GroupName, Config) ->
init_per_testcase(TestCase, Config) ->
ssh:start(),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
SystemDir = filename:join(PrivDir, system),
Options =
@@ -96,7 +100,7 @@ init_per_testcase(TestCase, Config) ->
{user_dir, PrivDir},
{subsystems, [Spec]}];
"root_dir" ->
- Privdir = ?config(priv_dir, Config),
+ Privdir = proplists:get_value(priv_dir, Config),
Root = filename:join(Privdir, root),
file:make_dir(Root),
Spec = ssh_sftpd:subsystem_spec([{root,Root}]),
@@ -132,8 +136,8 @@ init_per_testcase(TestCase, Config) ->
[{port, Port}, {sftp, {ChannelPid, Connection}}, {sftpd, Sftpd} | NewConfig].
end_per_testcase(_TestCase, Config) ->
- catch ssh_sftpd:stop(?config(sftpd, Config)),
- {Sftp, Connection} = ?config(sftp, Config),
+ catch ssh_sftpd:stop(proplists:get_value(sftpd, Config)),
+ {Sftp, Connection} = proplists:get_value(sftp, Config),
catch ssh_sftp:stop_channel(Sftp),
catch ssh:close(Connection),
ssh:stop().
@@ -146,10 +150,10 @@ close_file() ->
"transfer OTP-6350"}].
close_file(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
FileName = filename:join(DataDir, "test.txt"),
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
NumOfPorts = length(erlang:ports()),
@@ -167,12 +171,12 @@ quit() ->
"client hanging. OTP-6349"}].
quit(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
FileName = filename:join(DataDir, "test.txt"),
- UserDir = ?config(priv_dir, Config),
- Port = ?config(port, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
+ Port = proplists:get_value(port, Config),
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok, <<_/binary>>} = ssh_sftp:read_file(Sftp, FileName),
@@ -198,13 +202,13 @@ file_cb() ->
" the sftpds filehandling. OTP-6356"}].
file_cb(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FileName = filename:join(DataDir, "test.txt"),
register(sftpd_file_alt_tester, self()),
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok, Bin} = ssh_sftp:read_file(Sftp, FileName),
alt_file_handler_check(alt_open),
@@ -242,7 +246,7 @@ file_cb(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
root_dir(Config) when is_list(Config) ->
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
FileName = "test.txt",
Bin = <<"Test file for root dir option">>,
ok = ssh_sftp:write_file(Sftp, FileName, Bin),
@@ -253,7 +257,7 @@ root_dir(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
list_dir_limited(Config) when is_list(Config) ->
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
{ok, Listing} =
ssh_sftp:list_dir(Sftp, "."),
ct:log("Listing: ~p~n", [Listing]).
@@ -262,9 +266,9 @@ list_dir_limited(Config) when is_list(Config) ->
ver6_basic() ->
[{doc, "Test some version 6 features"}].
ver6_basic(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
NewDir = filename:join(PrivDir, "testdir2"),
- {Sftp, _} = ?config(sftp, Config),
+ {Sftp, _} = proplists:get_value(sftp, Config),
ok = ssh_sftp:make_dir(Sftp, NewDir),
%%Test file_is_a_directory
{error, file_is_a_directory} = ssh_sftp:delete(Sftp, NewDir).
diff --git a/lib/ssh/test/ssh_sup_SUITE.erl b/lib/ssh/test/ssh_sup_SUITE.erl
index f8929b30ff..ff53e1c4c6 100644
--- a/lib/ssh/test/ssh_sup_SUITE.erl
+++ b/lib/ssh/test/ssh_sup_SUITE.erl
@@ -53,18 +53,21 @@ end_per_group(_GroupName, Config) ->
Config.
init_per_suite(Config) ->
- Port = ssh_test_lib:inet_port(node()),
- PrivDir = ?config(priv_dir, Config),
- UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
- file:make_dir(UserDir),
- [{userdir, UserDir},{port, Port}, {host, "localhost"}, {host_ip, any} | Config].
+ ?CHECK_CRYPTO(
+ begin
+ Port = ssh_test_lib:inet_port(node()),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
+ file:make_dir(UserDir),
+ [{userdir, UserDir},{port, Port}, {host, "localhost"}, {host_ip, any} | Config]
+ end).
end_per_suite(_) ->
ok.
init_per_testcase(sshc_subtree, Config) ->
ssh:start(),
- SystemDir = ?config(data_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{failfun, fun ssh_test_lib:failfun/2},
{user_passwords,
@@ -75,7 +78,7 @@ init_per_testcase(Case, Config) ->
ssh:start(),
Config.
end_per_testcase(sshc_subtree, Config) ->
- {Pid,_,_} = ?config(server, Config),
+ {Pid,_,_} = proplists:get_value(server, Config),
ssh:stop_daemon(Pid),
ssh:stop();
end_per_testcase(_, _Config) ->
@@ -100,8 +103,8 @@ default_tree(Config) when is_list(Config) ->
sshc_subtree() ->
[{doc, "Make sure the sshc subtree is correct"}].
sshc_subtree(Config) when is_list(Config) ->
- {_Pid, Host, Port} = ?config(server, Config),
- UserDir = ?config(userdir, Config),
+ {_Pid, Host, Port} = proplists:get_value(server, Config),
+ UserDir = proplists:get_value(userdir, Config),
?wait_match([], supervisor:which_children(sshc_sup)),
@@ -128,9 +131,9 @@ sshc_subtree(Config) when is_list(Config) ->
sshd_subtree() ->
[{doc, "Make sure the sshd subtree is correct"}].
sshd_subtree(Config) when is_list(Config) ->
- HostIP = ?config(host_ip, Config),
- Port = ?config(port, Config),
- SystemDir = ?config(data_dir, Config),
+ HostIP = proplists:get_value(host_ip, Config),
+ Port = proplists:get_value(port, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
ssh:daemon(HostIP, Port, [{system_dir, SystemDir},
{failfun, fun ssh_test_lib:failfun/2},
{user_passwords,
@@ -149,10 +152,10 @@ sshd_subtree(Config) when is_list(Config) ->
sshd_subtree_profile() ->
[{doc, "Make sure the sshd subtree using profile option is correct"}].
sshd_subtree_profile(Config) when is_list(Config) ->
- HostIP = ?config(host_ip, Config),
- Port = ?config(port, Config),
- Profile = ?config(profile, Config),
- SystemDir = ?config(data_dir, Config),
+ HostIP = proplists:get_value(host_ip, Config),
+ Port = proplists:get_value(port, Config),
+ Profile = proplists:get_value(profile, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
{ok, _} = ssh:daemon(HostIP, Port, [{system_dir, SystemDir},
{failfun, fun ssh_test_lib:failfun/2},
@@ -171,9 +174,9 @@ sshd_subtree_profile(Config) when is_list(Config) ->
check_sshd_system_tree(Daemon, Config) ->
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- UserDir = ?config(userdir, Config),
+ Host = proplists:get_value(host, Config),
+ Port = proplists:get_value(port, Config),
+ UserDir = proplists:get_value(userdir, Config),
{ok, Client} = ssh:connect(Host, Port, [{silently_accept_hosts, true},
{user_interaction, false},
{user, ?USER}, {password, ?PASSWD},{user_dir, UserDir}]),
diff --git a/lib/ssh/test/ssh_test_lib.erl b/lib/ssh/test/ssh_test_lib.erl
index c6541461a1..6233680dce 100644
--- a/lib/ssh/test/ssh_test_lib.erl
+++ b/lib/ssh/test/ssh_test_lib.erl
@@ -71,7 +71,7 @@ daemon_port(Port, _) -> Port.
std_daemon(Config, ExtraOpts) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
std_daemon1(Config,
@@ -80,13 +80,13 @@ std_daemon(Config, ExtraOpts) ->
{user_passwords, [{"usr1","pwd1"}]}]).
std_daemon1(Config, ExtraOpts) ->
- SystemDir = ?config(data_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
{_Server, _Host, _Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{failfun, fun ssh_test_lib:failfun/2}
| ExtraOpts]).
std_connect(Config, Host, Port, ExtraOpts) ->
- UserDir = ?config(priv_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
_ConnectionRef =
ssh_test_lib:connect(Host, Port, [{silently_accept_hosts, true},
{user_dir, UserDir},
@@ -99,7 +99,7 @@ std_simple_sftp(Host, Port, Config) ->
std_simple_sftp(Host, Port, Config, []).
std_simple_sftp(Host, Port, Config, Opts) ->
- UserDir = ?config(priv_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
DataFile = filename:join(UserDir, "test.data"),
ConnectionRef = ssh_test_lib:std_connect(Config, Host, Port, Opts),
{ok, ChannelRef} = ssh_sftp:start_channel(ConnectionRef),
@@ -655,17 +655,48 @@ sshc(Tag) ->
).
ssh_type() ->
- case os:find_executable("ssh") of
- false -> not_found;
- _ ->
- case os:cmd("ssh -V") of
- "OpenSSH" ++ _ ->
- openSSH;
- Str ->
- ct:log("ssh client ~p is unknown",[Str]),
- unknown
- end
- end.
+ Parent = self(),
+ Pid = spawn(fun() ->
+ Parent ! {ssh_type,self(),ssh_type1()}
+ end),
+ MonitorRef = monitor(process, Pid),
+ receive
+ {ssh_type, Pid, Result} ->
+ demonitor(MonitorRef),
+ Result;
+ {'DOWN', MonitorRef, process, Pid, _Info} ->
+ ct:log("~p:~p Process DOWN",[?MODULE,?LINE]),
+ not_found
+ after
+ 10000 ->
+ ct:log("~p:~p Timeout",[?MODULE,?LINE]),
+ demonitor(MonitorRef),
+ not_found
+ end.
+
+
+ssh_type1() ->
+ try
+ case os:find_executable("ssh") of
+ false ->
+ ct:log("~p:~p Executable \"ssh\" not found",[?MODULE,?LINE]),
+ not_found;
+ _ ->
+ case os:cmd("ssh -V") of
+ "OpenSSH" ++ _ ->
+ openSSH;
+ Str ->
+ ct:log("ssh client ~p is unknown",[Str]),
+ unknown
+ end
+ end
+ catch
+ Class:Exception ->
+ ct:log("~p:~p Exception ~p:~p",[?MODULE,?LINE,Class,Exception]),
+ not_found
+ end.
+
+
algo_intersection([], _) -> [];
algo_intersection(_, []) -> [];
diff --git a/lib/ssh/test/ssh_test_lib.hrl b/lib/ssh/test/ssh_test_lib.hrl
index 7cb7edeaa8..54c93b7e87 100644
--- a/lib/ssh/test/ssh_test_lib.hrl
+++ b/lib/ssh/test/ssh_test_lib.hrl
@@ -1,4 +1,14 @@
%%-------------------------------------------------------------------------
+%% Check for usable crypt
+%%-------------------------------------------------------------------------
+-define(CHECK_CRYPTO(Available),
+ try crypto:start()
+ of _ -> Available
+ catch _:_ -> {skip, "Can't start crypto"}
+ end
+ ).
+
+%%-------------------------------------------------------------------------
%% Help macro
%%-------------------------------------------------------------------------
-define(wait_match(Pattern, FunctionCall, Bind, Timeout, Ntries),
diff --git a/lib/ssh/test/ssh_to_openssh_SUITE.erl b/lib/ssh/test/ssh_to_openssh_SUITE.erl
index 2be75fd7f3..a914938c41 100644
--- a/lib/ssh/test/ssh_to_openssh_SUITE.erl
+++ b/lib/ssh/test/ssh_to_openssh_SUITE.erl
@@ -22,6 +22,7 @@
-module(ssh_to_openssh_SUITE).
-include_lib("common_test/include/ct.hrl").
+-include("ssh_test_lib.hrl").
%% Note: This directive should only be used in test suites.
-compile(export_all).
@@ -62,19 +63,21 @@ groups() ->
].
init_per_suite(Config) ->
- case gen_tcp:connect("localhost", 22, []) of
- {error,econnrefused} ->
- {skip,"No openssh deamon"};
- _ ->
- ssh_test_lib:openssh_sanity_check(Config)
- end.
+ ?CHECK_CRYPTO(
+ case gen_tcp:connect("localhost", 22, []) of
+ {error,econnrefused} ->
+ {skip,"No openssh deamon"};
+ _ ->
+ ssh_test_lib:openssh_sanity_check(Config)
+ end
+ ).
end_per_suite(_Config) ->
ok.
init_per_group(erlang_server, Config) ->
- DataDir = ?config(data_dir, Config),
- UserDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:setup_dsa_known_host(DataDir, UserDir),
ssh_test_lib:setup_rsa_known_host(DataDir, UserDir),
Config;
@@ -87,7 +90,7 @@ init_per_group(_, Config) ->
Config.
end_per_group(erlang_server, Config) ->
- UserDir = ?config(priv_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_dsa(UserDir),
ssh_test_lib:clean_rsa(UserDir),
Config;
@@ -222,7 +225,7 @@ erlang_client_openssh_server_kexs() ->
[{doc, "Test that we can connect with different KEXs."}].
erlang_client_openssh_server_kexs(Config) when is_list(Config) ->
- KexAlgos = try proplists:get_value(kex, ?config(common_algs,Config))
+ KexAlgos = try proplists:get_value(kex, proplists:get_value(common_algs,Config))
catch _:_ -> []
end,
comment(KexAlgos),
@@ -366,8 +369,8 @@ erlang_server_openssh_client_public_key_rsa(Config) when is_list(Config) ->
erlang_server_openssh_client_public_key_X(Config, PubKeyAlg) ->
- SystemDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ SystemDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
KnownHosts = filename:join(PrivDir, "known_hosts"),
{Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
{public_key_alg, PubKeyAlg},
@@ -387,7 +390,7 @@ erlang_client_openssh_server_password() ->
[{doc, "Test client password option"}].
erlang_client_openssh_server_password(Config) when is_list(Config) ->
%% to make sure we don't public-key-auth
- UserDir = ?config(data_dir, Config),
+ UserDir = proplists:get_value(data_dir, Config),
{error, Reason0} =
ssh:connect(any, ?SSH_DEFAULT_PORT, [{silently_accept_hosts, true},
{user, "foo"},
diff --git a/lib/ssh/test/ssh_upgrade_SUITE.erl b/lib/ssh/test/ssh_upgrade_SUITE.erl
index 06bef2455e..b5b27c369a 100644
--- a/lib/ssh/test/ssh_upgrade_SUITE.erl
+++ b/lib/ssh/test/ssh_upgrade_SUITE.erl
@@ -23,6 +23,7 @@
-compile(export_all).
-include_lib("common_test/include/ct.hrl").
+-include("ssh_test_lib.hrl").
-record(state, {
config,
@@ -48,18 +49,20 @@ all() ->
].
init_per_suite(Config0) ->
- case ct_release_test:init(Config0) of
- {skip, Reason} ->
- {skip, Reason};
- Config ->
- ssh:start(),
- Config
- end.
+ ?CHECK_CRYPTO(
+ case ct_release_test:init(Config0) of
+ {skip, Reason} ->
+ {skip, Reason};
+ Config ->
+ ssh:start(),
+ Config
+ end
+ ).
end_per_suite(Config) ->
ct_release_test:cleanup(Config),
ssh:stop(),
- UserDir = ?config(priv_dir, Config),
+ UserDir = proplists:get_value(priv_dir, Config),
ssh_test_lib:clean_rsa(UserDir).
init_per_testcase(_TestCase, Config) ->
@@ -138,8 +141,8 @@ test_soft(State0, FileName) ->
setup_server_client(#state{config=Config} = State) ->
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
FtpRootDir = filename:join(PrivDir, "ftp_root"),
catch file:make_dir(FtpRootDir),
diff --git a/lib/ssh/vsn.mk b/lib/ssh/vsn.mk
index b165928877..212b99c695 100644
--- a/lib/ssh/vsn.mk
+++ b/lib/ssh/vsn.mk
@@ -1,5 +1,5 @@
#-*-makefile-*- ; force emacs to enter makefile-mode
-SSH_VSN = 4.3
+SSH_VSN = 4.3.2
APP_VSN = "ssh-$(SSH_VSN)"
diff --git a/lib/ssl/doc/src/notes.xml b/lib/ssl/doc/src/notes.xml
index 5db954c3b4..9d68ee0eee 100644
--- a/lib/ssl/doc/src/notes.xml
+++ b/lib/ssl/doc/src/notes.xml
@@ -28,8 +28,41 @@
<p>This document describes the changes made to the SSL application.</p>
+<section><title>SSL 8.0.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ The TLS/SSL protocol version selection for the SSL server
+ has been corrected to follow RFC 5246 Appendix E.1
+ especially in case where the list of supported versions
+ has gaps. Now the server selects the highest protocol
+ version it supports that is not higher than what the
+ client supports.</p>
+ <p>
+ Own Id: OTP-13753 Aux Id: seq13150 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>SSL 8.0</title>
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Server now rejects, a not requested client cert, as an
+ incorrect handshake message and ends the connection.</p>
+ <p>
+ Own Id: OTP-13651</p>
+ </item>
+ </list>
+ </section>
+
+
<section><title>Improvements and New Features</title>
<list>
<item>
@@ -42,9 +75,9 @@
</item>
<item>
<p>
- Deprecate the function crypto:rand_bytes and make sure
- that crypto:strong_rand_bytes is used in all places that
- are cryptographically significant.</p>
+ Deprecate the function <c>crypto:rand_bytes</c> and make
+ sure that <c>crypto:strong_rand_bytes</c> is used in all
+ places that are cryptographically significant.</p>
<p>
Own Id: OTP-13214</p>
</item>
@@ -58,6 +91,28 @@
</item>
<item>
<p>
+ Provide user friendly error message when crypto rejects a
+ key</p>
+ <p>
+ Own Id: OTP-13256</p>
+ </item>
+ <item>
+ <p>
+ Add ssl:getstat/1 and ssl:getstat/2</p>
+ <p>
+ Own Id: OTP-13415</p>
+ </item>
+ <item>
+ <p>
+ TLS distribution connections now allow specifying the
+ options <c>verify_fun</c>, <c>crl_check</c> and
+ <c>crl_cache</c>. See the documentation. GitHub pull req
+ #956 contributed by Magnus Henoch.</p>
+ <p>
+ Own Id: OTP-13429 Aux Id: Pull#956 </p>
+ </item>
+ <item>
+ <p>
Remove confusing error message when closing a distributed
erlang node running over TLS</p>
<p>
@@ -65,14 +120,128 @@
</item>
<item>
<p>
+ Remove default support for use of md5 in TLS 1.2
+ signature algorithms</p>
+ <p>
+ Own Id: OTP-13463</p>
+ </item>
+ <item>
+ <p>
ssl now uses gen_statem instead of gen_fsm to implement
the ssl connection process, this solves some timing
- issues in addtion to making the code more intuitive as
+ issues in addition to making the code more intuitive as
the behaviour can be used cleanly instead of having a lot
of workaround for shortcomings of the behaviour.</p>
<p>
Own Id: OTP-13464</p>
</item>
+ <item>
+ <p>
+ Phase out interoperability with clients that offer SSLv2.
+ By default they are no longer supported, but an option to
+ provide interoperability is offered.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-13465</p>
+ </item>
+ <item>
+ <p>
+ OpenSSL has functions to generate short (eight hex
+ digits) hashes of issuers of certificates and CRLs. These
+ hashes are used by the "c_rehash" script to populate
+ directories of CA certificates and CRLs, e.g. in the
+ Apache web server. Add functionality to let an Erlang
+ program find the right CRL for a given certificate in
+ such a directory.</p>
+ <p>
+ Own Id: OTP-13530</p>
+ </item>
+ <item>
+ <p>
+ Some legacy TLS 1.0 software does not tolerate the 1/n-1
+ content split BEAST mitigation technique. Add a
+ beast_mitigation SSL option (defaulting to
+ one_n_minus_one) to select or disable the BEAST
+ mitigation technique.</p>
+ <p>
+ Own Id: OTP-13629</p>
+ </item>
+ <item>
+ <p>
+ Enhance error log messages to facilitate for users to
+ understand the error</p>
+ <p>
+ Own Id: OTP-13632</p>
+ </item>
+ <item>
+ <p>
+ Increased default DH params to 2048-bit</p>
+ <p>
+ Own Id: OTP-13636</p>
+ </item>
+ <item>
+ <p>
+ Propagate CRL unknown CA error so that public_key
+ validation process continues correctly and determines
+ what should happen.</p>
+ <p>
+ Own Id: OTP-13656</p>
+ </item>
+ <item>
+ <p>
+ Introduce a flight concept for handshake packages. This
+ is a preparation for enabling DTLS, however it can also
+ have a positive effects for TLS on slow and unreliable
+ networks.</p>
+ <p>
+ Own Id: OTP-13678</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>SSL 7.3.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Correct ssl:prf/5 to use the negotiated cipher suite's
+ prf function in ssl:prf/5 instead of the default prf.</p>
+ <p>
+ Own Id: OTP-13546</p>
+ </item>
+ <item>
+ <p>
+ Timeouts may have the value 0, guards have been corrected
+ to allow this</p>
+ <p>
+ Own Id: OTP-13635</p>
+ </item>
+ <item>
+ <p>
+ Change of internal handling of hash sign pairs as the
+ used one enforced to much restrictions making some valid
+ combinations unavailable.</p>
+ <p>
+ Own Id: OTP-13670</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Create a little randomness in sending of session
+ invalidation messages, to mitigate load when whole table
+ is invalidated.</p>
+ <p>
+ Own Id: OTP-13490</p>
+ </item>
</list>
</section>
diff --git a/lib/ssl/doc/src/ssl.xml b/lib/ssl/doc/src/ssl.xml
index 154664d855..abba5aaf59 100644
--- a/lib/ssl/doc/src/ssl.xml
+++ b/lib/ssl/doc/src/ssl.xml
@@ -331,39 +331,88 @@ marker="public_key:public_key#pkix_path_validation-3">public_key:pkix_path_valid
<tag><c>{crl_check, boolean() | peer | best_effort }</c></tag>
<item>
- Perform CRL (Certificate Revocation List) verification
+ <p>Perform CRL (Certificate Revocation List) verification
<seealso marker="public_key:public_key#pkix_crls_validate-3">
(public_key:pkix_crls_validate/3)</seealso> on all the certificates during the path validation
<seealso
marker="public_key:public_key#pkix_path_validation-3">(public_key:pkix_path_validation/3)
</seealso>
- of the certificate chain. Defaults to false.
+ of the certificate chain. Defaults to <c>false</c>.</p>
- <p><c>peer</c> - check is only performed on
- the peer certificate.</p>
+ <taglist>
+ <tag><c>peer</c></tag>
+ <item>check is only performed on the peer certificate.</item>
- <p><c>best_effort</c> - if certificate revocation status can not be determined
- it will be accepted as valid.</p>
+ <tag><c>best_effort</c></tag>
+ <item>if certificate revocation status can not be determined
+ it will be accepted as valid.</item>
+ </taglist>
<p>The CA certificates specified for the connection will be used to
construct the certificate chain validating the CRLs.</p>
- <p>The CRLs will be fetched from a local or external cache see
+ <p>The CRLs will be fetched from a local or external cache. See
<seealso marker="ssl:ssl_crl_cache_api">ssl_crl_cache_api(3)</seealso>.</p>
</item>
<tag><c>{crl_cache, {Module :: atom(), {DbHandle :: internal | term(), Args :: list()}}}</c></tag>
<item>
- <p>Module defaults to ssl_crl_cache with <c> DbHandle </c> internal and an
- empty argument list. The following arguments may be specified for the internal cache.</p>
+ <p>Specify how to perform lookup and caching of certificate revocation lists.
+ <c>Module</c> defaults to <seealso marker="ssl:ssl_crl_cache">ssl_crl_cache</seealso>
+ with <c> DbHandle </c> being <c>internal</c> and an
+ empty argument list.</p>
+
+ <p>There are two implementations available:</p>
+
<taglist>
- <tag><c>{http, timeout()}</c></tag>
- <item><p>
- Enables fetching of CRLs specified as http URIs in<seealso
- marker="public_key:public_key_records"> X509 certificate extensions.</seealso>
- Requires the OTP inets application.</p>
- </item>
- </taglist>
+ <tag><c>ssl_crl_cache</c></tag>
+ <item>
+ <p>This module maintains a cache of CRLs. CRLs can be
+ added to the cache using the function <seealso
+ marker="ssl:ssl_crl_cache#insert-1">ssl_crl_cache:insert/1</seealso>,
+ and optionally automatically fetched through HTTP if the
+ following argument is specified:</p>
+
+ <taglist>
+ <tag><c>{http, timeout()}</c></tag>
+ <item><p>
+ Enables fetching of CRLs specified as http URIs in<seealso
+ marker="public_key:public_key_records">X509 certificate extensions</seealso>.
+ Requires the OTP inets application.</p>
+ </item>
+ </taglist>
+ </item>
+
+ <tag><c>ssl_crl_hash_dir</c></tag>
+ <item>
+ <p>This module makes use of a directory where CRLs are
+ stored in files named by the hash of the issuer name.</p>
+
+ <p>The file names consist of eight hexadecimal digits
+ followed by <c>.rN</c>, where <c>N</c> is an integer,
+ e.g. <c>1a2b3c4d.r0</c>. For the first version of the
+ CRL, <c>N</c> starts at zero, and for each new version,
+ <c>N</c> is incremented by one. The OpenSSL utility
+ <c>c_rehash</c> creates symlinks according to this
+ pattern.</p>
+
+ <p>For a given hash value, this module finds all
+ consecutive <c>.r*</c> files starting from zero, and those
+ files taken together make up the revocation list. CRL
+ files whose <c>nextUpdate</c> fields are in the past, or
+ that are issued by a different CA that happens to have the
+ same name hash, are excluded.</p>
+
+ <p>The following argument is required:</p>
+
+ <taglist>
+ <tag><c>{dir, string()}</c></tag>
+ <item><p>Specifies the directory in which the CRLs can be found.</p></item>
+ </taglist>
+
+ </item>
+ </taglist>
+
</item>
<tag><c>{partial_chain, fun(Chain::[DerCert]) -> {trusted_ca, DerCert} |
@@ -415,12 +464,29 @@ fun(srp, Username :: string(), UserState :: term()) ->
<tag><c>{padding_check, boolean()}</c></tag>
<item><p>Affects TLS-1.0 connections only.
If set to <c>false</c>, it disables the block cipher padding check
- to be able to interoperate with legacy software.</p></item>
+ to be able to interoperate with legacy software.</p>
+ <warning><p>Using <c>{padding_check, boolean()}</c> makes TLS
+ vulnerable to the Poodle attack.</p></warning>
+ </item>
- </taglist>
+
+
+ <tag><c>{beast_mitigation, one_n_minus_one | zero_n | disabled}</c></tag>
+ <item><p>Affects SSL-3.0 and TLS-1.0 connections only. Used to change the BEAST
+ mitigation strategy to interoperate with legacy software.
+ Defaults to <c>one_n_minus_one</c>.</p>
+
+ <p><c>one_n_minus_one</c> - Perform 1/n-1 BEAST mitigation.</p>
+
+ <p><c>zero_n</c> - Perform 0/n BEAST mitigation.</p>
+
+ <p><c>disabled</c> - Disable BEAST mitigation.</p>
+
+ <warning><p>Using <c>{beast_mitigation, disabled}</c> makes SSL or TLS
+ vulnerable to the BEAST attack.</p></warning>
+ </item>
+ </taglist>
- <warning><p>Using <c>{padding_check, boolean()}</c> makes TLS
- vulnerable to the Poodle attack.</p></warning>
</section>
<section>
@@ -532,7 +598,7 @@ fun(srp, Username :: string(), UserState :: term()) ->
TLS handshake. If no lower TLS versions than 1.2 are supported,
the client will send a TLS signature algorithm extension
with the algorithms specified by this option.
- Defaults to
+ Defaults to</p>
<code>[
%% SHA2
@@ -549,7 +615,7 @@ fun(srp, Username :: string(), UserState :: term()) ->
{sha, rsa},
{sha, dsa},
]</code>
-
+<p>
The algorithms should be in the preferred order.
Selected signature algorithm can restrict which hash functions
that may be selected. Default support for {md5, rsa} removed in ssl-8.0
@@ -692,6 +758,12 @@ fun(srp, Username :: string(), UserState :: term()) ->
client certificate is requested. For more details see the <seealso marker="#client_signature_algs">corresponding client option</seealso>.
</p> </item>
+ <tag><c>{v2_hello_compatible, boolean()}</c></tag>
+ <item>If true, the server accepts clients that send hello messages on SSL-2.0 format but offers
+ supported SSL/TLS versions. Defaults to false, that is the server will not interoperate with clients that
+ offers SSL-2.0.
+ </item>
+
</taglist>
</section>
@@ -881,6 +953,23 @@ fun(srp, Username :: string(), UserState :: term()) ->
</func>
<func>
+ <name>getstat(Socket) ->
+ {ok, OptionValues} | {error, inet:posix()}</name>
+ <name>getstat(Socket, OptionNames) ->
+ {ok, OptionValues} | {error, inet:posix()}</name>
+ <fsummary>Get one or more statistic options for a socket</fsummary>
+ <type>
+ <v>Socket = sslsocket()</v>
+ <v>OptionNames = [atom()]</v>
+ <v>OptionValues = [{inet:stat_option(), integer()}]</v>
+ </type>
+ <desc>
+ <p>Gets one or more statistic options for the underlying TCP socket.</p>
+ <p>See inet:getstat/2 for statistic options description.</p>
+ </desc>
+ </func>
+
+ <func>
<name>listen(Port, Options) ->
{ok, ListenSocket} | {error, Reason}</name>
<fsummary>Creates an SSL listen socket.</fsummary>
diff --git a/lib/ssl/doc/src/ssl_app.xml b/lib/ssl/doc/src/ssl_app.xml
index daa06a40fc..f317dfded4 100644
--- a/lib/ssl/doc/src/ssl_app.xml
+++ b/lib/ssl/doc/src/ssl_app.xml
@@ -45,6 +45,8 @@
but can be configured.</item>
<item>For security reasons DES cipher suites are no longer supported by default,
but can be configured.</item>
+ <item> Renegotiation Indication Extension <url href="http://www.ietf.org/rfc/rfc5746.txt">RFC 5746</url> is supported
+ </item>
<item>Ephemeral Diffie-Hellman cipher suites are supported,
but not Diffie Hellman Certificates cipher suites.</item>
<item>Elliptic Curve cipher suites are supported if the Crypto
@@ -55,10 +57,16 @@
<item>IDEA cipher suites are not supported as they have
become deprecated by the latest TLS specification so it is not
motivated to implement them.</item>
+ <item>Compression is not supported.</item>
<item>CRL validation is supported.</item>
<item>Policy certificate extensions are not supported.</item>
<item>'Server Name Indication' extension
(<url href="http://www.ietf.org/rfc/rfc6066.txt">RFC 6066</url>) is supported.</item>
+ <item>Application Layer Protocol Negotiation (ALPN) and its successor Next Protocol Negotiation (NPN)
+ are supported. </item>
+ <item>It is possible to use Pre-Shared Key (PSK) and Secure Remote Password (SRP)
+ cipher suites, but they are not enabled by default.
+ </item>
</list>
</description>
@@ -94,7 +102,10 @@
to <c>ssl:connect/[2,3]</c> and <c>ssl:listen/2</c>.</p></item>
<tag><c><![CDATA[session_lifetime = integer() <optional>]]></c></tag>
- <item><p>Maximum lifetime of the session data in seconds.</p></item>
+ <item><p>Maximum lifetime of the session data in seconds. Defaults to 24 hours which is the maximum
+ recommended lifetime by <url href="http://www.ietf.org/rfc/5246rfc.txt">RFC 5246</url>. However
+ sessions may be invalidated earlier due to the maximum limitation of the session cache table.
+ </p></item>
<tag><c><![CDATA[session_cb = atom() <optional>]]></c></tag>
<item><p>Name of the session cache callback module that implements
@@ -106,22 +117,40 @@
<item><p>List of extra user-defined arguments to the <c>init</c> function
in the session cache callback module. Defaults to <c>[]</c>.</p></item>
- <tag><c><![CDATA[session_cache_client_max = integer() <optional>]]></c><br/>
- <c><![CDATA[session_cache_server_max = integer() <optional>]]></c></tag>
- <item><p>Limits the growth of the clients/servers session cache,
- if the maximum number of sessions is reached, the current cache entries will
- be invalidated regardless of their remaining lifetime. Defaults to 1000.
- </p></item>
+ <tag><c><![CDATA[session_cache_client_max = integer() <optional>]]></c><br/></tag>
+ <item><p>Limits the growth of the clients session cache, that is
+ how many sessions towards servers that are cached to be used by
+ new client connections. If the maximum number of sessions is
+ reached, the current cache entries will be invalidated
+ regardless of their remaining lifetime. Defaults to
+ 1000.</p></item>
+
+ <tag> <c><![CDATA[session_cache_server_max = integer() <optional>]]></c></tag>
+ <item><p>Limits the growth of the servers session cache, that is
+ how many client sessions are cached by the server. If the
+ maximum number of sessions is reached, the current cache entries
+ will be invalidated regardless of their remaining
+ lifetime. Defaults to 1000.</p></item>
<tag><c><![CDATA[ssl_pem_cache_clean = integer() <optional>]]></c></tag>
<item>
<p>
- Number of milliseconds between PEM cache validations.
+ Number of milliseconds between PEM cache validations. Defaults to 2 minutes.
</p>
<seealso
marker="ssl#clear_pem_cache-0">ssl:clear_pem_cache/0</seealso>
</item>
+
+ <tag><c><![CDATA[bypass_pem_cache = boolean() <optional>]]></c></tag>
+ <item>
+ <p>Introduced in ssl-8.0.2. Disables the PEM-cache.
+ The PEM cache has proven to be a bottleneck, until the
+ implementation has been improved this can be used as
+ a workaround. Defaults to false.
+ </p>
+ </item>
+
<tag><c><![CDATA[alert_timeout = integer() <optional>]]></c></tag>
<item>
<p>
@@ -131,8 +160,6 @@
shutdown gracefully. Defaults to 5000 milliseconds.
</p>
</item>
-
-
</taglist>
</section>
diff --git a/lib/ssl/doc/src/ssl_crl_cache_api.xml b/lib/ssl/doc/src/ssl_crl_cache_api.xml
index 03ac010bfe..7440b6ef04 100644
--- a/lib/ssl/doc/src/ssl_crl_cache_api.xml
+++ b/lib/ssl/doc/src/ssl_crl_cache_api.xml
@@ -76,10 +76,13 @@
</func>
<func>
+ <name>lookup(DistributionPoint, Issuer, DbHandle) -> not_available | CRLs </name>
<name>lookup(DistributionPoint, DbHandle) -> not_available | CRLs </name>
<fsummary> </fsummary>
<type>
<v> DistributionPoint = dist_point() </v>
+ <v> Issuer = <seealso
+ marker="public_key:public_key">public_key:issuer_name()</seealso> </v>
<v> DbHandle = cache_ref() </v>
<v> CRLs = [<seealso
marker="public_key:public_key">public_key:der_encoded()</seealso>] </v>
@@ -87,6 +90,18 @@
<desc> <p>Lookup the CRLs belonging to the distribution point <c> Distributionpoint</c>.
This function may choose to only look in the cache or to follow distribution point
links depending on how the cache is administrated. </p>
+
+ <p>The <c>Issuer</c> argument contains the issuer name of the
+ certificate to be checked. Normally the returned CRL should
+ be issued by this issuer, except if the <c>cRLIssuer</c> field
+ of <c>DistributionPoint</c> has a value, in which case that
+ value should be used instead.</p>
+
+ <p>In an earlier version of this API, the <c>lookup</c>
+ function received two arguments, omitting <c>Issuer</c>. For
+ compatibility, this is still supported: if there is no
+ <c>lookup/3</c> function in the callback module,
+ <c>lookup/2</c> is called instead.</p>
</desc>
</func>
diff --git a/lib/ssl/doc/src/ssl_distribution.xml b/lib/ssl/doc/src/ssl_distribution.xml
index 7c00b4eae2..1150043e76 100644
--- a/lib/ssl/doc/src/ssl_distribution.xml
+++ b/lib/ssl/doc/src/ssl_distribution.xml
@@ -71,8 +71,8 @@
<section>
<title>Building Boot Scripts Including the ssl Application</title>
<p>Boot scripts are built using the <c>systools</c> utility in the
- <c>sasl</c> application. For more information on <c>systools</c>,
- see the <c>sasl</c> documentation. This is only an example of
+ SASL application. For more information on <c>systools</c>,
+ see the SASL documentation. This is only an example of
what can be done.</p>
<p>The simplest boot script possible includes only the Kernel
@@ -98,6 +98,7 @@
{stdlib,"1.18"},
{crypto, "2.0.3"},
{public_key, "0.12"},
+ {asn1, "4.0"},
{ssl, "5.0"}
]}.
</code>
@@ -196,6 +197,9 @@ Eshell V5.0 (abort with ^G)
<item><c>password</c></item>
<item><c>cacertfile</c></item>
<item><c>verify</c></item>
+ <item><c>verify_fun</c> (write as <c>{Module, Function, InitialUserState}</c>)</item>
+ <item><c>crl_check</c></item>
+ <item><c>crl_cache</c> (write as Erlang term)</item>
<item><c>reuse_sessions</c></item>
<item><c>secure_renegotiate</c></item>
<item><c>depth</c></item>
@@ -203,6 +207,10 @@ Eshell V5.0 (abort with ^G)
<item><c>ciphers</c> (use old string format)</item>
</list>
+ <p>Note that <c>verify_fun</c> needs to be written in a different
+ form than the corresponding SSL option, since funs are not
+ accepted on the command line.</p>
+
<p>The server can also take the options <c>dhfile</c> and
<c>fail_if_no_peer_cert</c> (also prefixed).</p>
@@ -210,10 +218,6 @@ Eshell V5.0 (abort with ^G)
initiates a connection to another node. <c>server_</c>-prefixed
options are used when accepting a connection from a remote node.</p>
- <p>More complex options, such as <c>verify_fun</c>, are currently not
- available, but a mechanism to handle such options may be added in
- a future release.</p>
-
<p>Raw socket options, such as <c>packet</c> and <c>size</c> must not
be specified on the command line.</p>
diff --git a/lib/ssl/src/Makefile b/lib/ssl/src/Makefile
index 7a7a373487..b625db0656 100644
--- a/lib/ssl/src/Makefile
+++ b/lib/ssl/src/Makefile
@@ -70,6 +70,7 @@ MODULES= \
ssl_session_cache \
ssl_crl\
ssl_crl_cache \
+ ssl_crl_hash_dir \
ssl_socket \
ssl_listen_tracker_sup \
tls_record \
diff --git a/lib/ssl/src/dtls_connection.erl b/lib/ssl/src/dtls_connection.erl
index 82d6faee42..479f68f4bb 100644
--- a/lib/ssl/src/dtls_connection.erl
+++ b/lib/ssl/src/dtls_connection.erl
@@ -42,22 +42,17 @@
-export([next_record/1, next_event/3]).
%% Handshake handling
--export([%%renegotiate/2,
- send_handshake/2, send_change_cipher/2]).
-
+-export([renegotiate/2,
+ reinit_handshake_data/1,
+ send_handshake/2, queue_handshake/2, queue_change_cipher/2,
+ select_sni_extension/1]).
%% Alert and close handling
--export([%%send_alert/2, handle_own_alert/4, handle_close_alert/3,
- handle_normal_shutdown/3 %%, close/5
- %%alert_user/6, alert_user/9
- ]).
+-export([send_alert/2, close/5]).
%% Data handling
--export([%%write_application_data/3,
- read_application_data/2,
- %%passive_receive/2,
- next_record_if_active/1 %%,
- %%handle_common_event/4
+
+-export([passive_receive/2, next_record_if_active/1, handle_common_event/4
]).
%% gen_statem state functions
@@ -65,20 +60,18 @@
hello/3, certify/3, cipher/3, abbreviated/3, %% Handshake states
connection/3]).
%% gen_statem callbacks
--export([terminate/3, code_change/4, format_status/2]).
-
--define(GEN_STATEM_CB_MODE, state_functions).
+-export([callback_mode/0, terminate/3, code_change/4, format_status/2]).
%%====================================================================
%% Internal application API
%%====================================================================
-start_fsm(Role, Host, Port, Socket, {#ssl_options{erl_dist = false},_} = Opts,
+start_fsm(Role, Host, Port, Socket, {#ssl_options{erl_dist = false},_, Tracker} = Opts,
User, {CbModule, _,_, _} = CbInfo,
Timeout) ->
try
{ok, Pid} = dtls_connection_sup:start_child([Role, Host, Port, Socket,
Opts, User, CbInfo]),
- {ok, SslSocket} = ssl_connection:socket_control(?MODULE, Socket, Pid, CbModule),
+ {ok, SslSocket} = ssl_connection:socket_control(?MODULE, Socket, Pid, CbModule, Tracker),
ok = ssl_connection:handshake(SslSocket, Timeout),
{ok, SslSocket}
catch
@@ -86,13 +79,13 @@ start_fsm(Role, Host, Port, Socket, {#ssl_options{erl_dist = false},_} = Opts,
Error
end;
-start_fsm(Role, Host, Port, Socket, {#ssl_options{erl_dist = true},_} = Opts,
+start_fsm(Role, Host, Port, Socket, {#ssl_options{erl_dist = true},_, Tracker} = Opts,
User, {CbModule, _,_, _} = CbInfo,
Timeout) ->
try
{ok, Pid} = dtls_connection_sup:start_child_dist([Role, Host, Port, Socket,
Opts, User, CbInfo]),
- {ok, SslSocket} = ssl_connection:socket_control(?MODULE, Socket, Pid, CbModule),
+ {ok, SslSocket} = ssl_connection:socket_control(?MODULE, Socket, Pid, CbModule, Tracker),
ok = ssl_connection:handshake(SslSocket, Timeout),
{ok, SslSocket}
catch
@@ -100,14 +93,38 @@ start_fsm(Role, Host, Port, Socket, {#ssl_options{erl_dist = true},_} = Opts,
Error
end.
-send_handshake(Handshake, #state{negotiated_version = Version,
- tls_handshake_history = Hist0,
- connection_states = ConnectionStates0} = State0) ->
- {BinHandshake, ConnectionStates, Hist} =
+send_handshake(Handshake, State) ->
+ send_handshake_flight(queue_handshake(Handshake, State)).
+
+queue_flight_buffer(Msg, #state{negotiated_version = Version,
+ connection_states = ConnectionStates,
+ flight_buffer = Flight} = State) ->
+ ConnectionState =
+ ssl_record:current_connection_state(ConnectionStates, write),
+ Epoch = maps:get(epoch, ConnectionState),
+ State#state{flight_buffer = Flight ++ [{Version, Epoch, Msg}]}.
+
+queue_handshake(Handshake, #state{negotiated_version = Version,
+ tls_handshake_history = Hist0,
+ connection_states = ConnectionStates0} = State0) ->
+ {Frag, ConnectionStates, Hist} =
encode_handshake(Handshake, Version, ConnectionStates0, Hist0),
- send_flight(BinHandshake, State0#state{connection_states = ConnectionStates,
- tls_handshake_history = Hist
- }).
+ queue_flight_buffer(Frag, State0#state{connection_states = ConnectionStates,
+ tls_handshake_history = Hist}).
+
+send_handshake_flight(#state{socket = Socket,
+ transport_cb = Transport,
+ flight_buffer = Flight,
+ connection_states = ConnectionStates0} = State0) ->
+
+ {Encoded, ConnectionStates} =
+ encode_handshake_flight(Flight, ConnectionStates0),
+
+ Transport:send(Socket, Encoded),
+ State0#state{flight_buffer = [], connection_states = ConnectionStates}.
+
+queue_change_cipher(Msg, State) ->
+ queue_flight_buffer(Msg, State).
send_alert(Alert, #state{negotiated_version = Version,
socket = Socket,
@@ -118,14 +135,24 @@ send_alert(Alert, #state{negotiated_version = Version,
Transport:send(Socket, BinMsg),
State0#state{connection_states = ConnectionStates}.
-send_change_cipher(Msg, #state{connection_states = ConnectionStates0,
- socket = Socket,
- negotiated_version = Version,
- transport_cb = Transport} = State0) ->
- {BinChangeCipher, ConnectionStates} =
- encode_change_cipher(Msg, Version, ConnectionStates0),
- Transport:send(Socket, BinChangeCipher),
- State0#state{connection_states = ConnectionStates}.
+close(downgrade, _,_,_,_) ->
+ ok;
+%% Other
+close(_, Socket, Transport, _,_) ->
+ Transport:close(Socket).
+
+reinit_handshake_data(#state{protocol_buffers = Buffers} = State) ->
+ State#state{premaster_secret = undefined,
+ public_key_info = undefined,
+ tls_handshake_history = ssl_handshake:init_handshake_history(),
+ protocol_buffers =
+ Buffers#protocol_buffers{dtls_fragment_state =
+ dtls_handshake:dtls_handshake_new_flight(0)}}.
+
+select_sni_extension(#client_hello{extensions = HelloExtensions}) ->
+ HelloExtensions#hello_extensions.sni;
+select_sni_extension(_) ->
+ undefined.
%%====================================================================
%% tls_connection_sup API
@@ -147,12 +174,15 @@ init([Role, Host, Port, Socket, Options, User, CbInfo]) ->
State0 = initial_state(Role, Host, Port, Socket, Options, User, CbInfo),
try
State = ssl_connection:ssl_config(State0#state.ssl_options, Role, State0),
- gen_statem:enter_loop(?MODULE, [], ?GEN_STATEM_CB_MODE, init, State)
+ gen_statem:enter_loop(?MODULE, [], init, State)
catch
throw:Error ->
- gen_statem:enter_loop(?MODULE, [], ?GEN_STATEM_CB_MODE, error, {Error,State0})
+ gen_statem:enter_loop(?MODULE, [], error, {Error,State0})
end.
+callback_mode() ->
+ state_functions.
+
%%--------------------------------------------------------------------
%% State functionsconnection/2
%%--------------------------------------------------------------------
@@ -196,28 +226,44 @@ error({call, From}, Msg, State) ->
error(_, _, _) ->
{keep_state_and_data, [postpone]}.
-hello(internal, #client_hello{client_version = ClientVersion} = Hello,
- #state{connection_states = ConnectionStates0,
- port = Port, session = #session{own_certificate = Cert} = Session0,
- renegotiation = {Renegotiation, _},
- session_cache = Cache,
- session_cache_cb = CacheCb,
- ssl_options = SslOpts} = State) ->
+%%--------------------------------------------------------------------
+-spec hello(gen_statem:event_type(),
+ #hello_request{} | #client_hello{} | #server_hello{} | term(),
+ #state{}) ->
+ gen_statem:state_function_result().
+%%--------------------------------------------------------------------
+hello(internal, #client_hello{client_version = ClientVersion,
+ extensions = #hello_extensions{ec_point_formats = EcPointFormats,
+ elliptic_curves = EllipticCurves}} = Hello,
+ State = #state{connection_states = ConnectionStates0,
+ port = Port, session = #session{own_certificate = Cert} = Session0,
+ renegotiation = {Renegotiation, _},
+ session_cache = Cache,
+ session_cache_cb = CacheCb,
+ negotiated_protocol = CurrentProtocol,
+ key_algorithm = KeyExAlg,
+ ssl_options = SslOpts}) ->
+
case dtls_handshake:hello(Hello, SslOpts, {Port, Session0, Cache, CacheCb,
- ConnectionStates0, Cert}, Renegotiation) of
- {Version, {Type, Session},
- ConnectionStates,
- #hello_extensions{ec_point_formats = EcPointFormats,
- elliptic_curves = EllipticCurves} = ServerHelloExt, HashSign} ->
- ssl_connection:hello(internal, {common_client_hello, Type, ServerHelloExt, HashSign},
- State#state{connection_states = ConnectionStates,
+ ConnectionStates0, Cert, KeyExAlg}, Renegotiation) of
+ #alert{} = Alert ->
+ ssl_connection:handle_own_alert(Alert, ClientVersion, hello, State);
+ {Version, {Type, Session},
+ ConnectionStates, Protocol0, ServerHelloExt, HashSign} ->
+ Protocol = case Protocol0 of
+ undefined -> CurrentProtocol;
+ _ -> Protocol0
+ end,
+
+ ssl_connection:hello(internal, {common_client_hello, Type, ServerHelloExt},
+ State#state{connection_states = ConnectionStates,
negotiated_version = Version,
+ hashsign_algorithm = HashSign,
session = Session,
- client_ecc = {EllipticCurves, EcPointFormats}}, ?MODULE);
- #alert{} = Alert ->
- handle_own_alert(Alert, ClientVersion, hello, State)
+ client_ecc = {EllipticCurves, EcPointFormats},
+ negotiated_protocol = Protocol}, ?MODULE)
end;
-hello(internal, Hello,
+hello(internal, #server_hello{} = Hello,
#state{connection_states = ConnectionStates0,
negotiated_version = ReqVersion,
role = client,
@@ -225,7 +271,7 @@ hello(internal, Hello,
ssl_options = SslOptions} = State) ->
case dtls_handshake:hello(Hello, SslOptions, ConnectionStates0, Renegotiation) of
#alert{} = Alert ->
- handle_own_alert(Alert, ReqVersion, hello, State);
+ ssl_connection:handle_own_alert(Alert, ReqVersion, hello, State);
{Version, NewId, ConnectionStates, ProtoExt, Protocol} ->
ssl_connection:handle_session(Hello,
Version, NewId, ConnectionStates, ProtoExt, Protocol, State)
@@ -261,8 +307,7 @@ connection(internal, #hello_request{}, #state{host = Host, port = Port,
renegotiation = {Renegotiation, _}} = State0) ->
Hello = dtls_handshake:client_hello(Host, Port, ConnectionStates0, SslOpts,
Cache, CacheCb, Renegotiation, Cert),
- %% TODO DTLS version State1 = send_handshake(Hello, State0),
- State1 = State0,
+ State1 = send_handshake(Hello, State0),
{Record, State} =
next_record(
State1#state{session = Session0#session{session_id
@@ -305,21 +350,79 @@ handle_info({Protocol, _, Data}, StateName,
{Record, State} ->
next_event(StateName, Record, State);
#alert{} = Alert ->
- handle_normal_shutdown(Alert, StateName, State0),
+ ssl_connection:handle_normal_shutdown(Alert, StateName, State0),
{stop, {shutdown, own_alert}}
end;
handle_info({CloseTag, Socket}, StateName,
- #state{socket = Socket, close_tag = CloseTag,
- negotiated_version = _Version} = State) ->
- handle_normal_shutdown(?ALERT_REC(?FATAL, ?CLOSE_NOTIFY), StateName, State),
+ #state{socket = Socket, close_tag = CloseTag,
+ negotiated_version = Version} = State) ->
+ %% Note that as of DTLS 1.2 (TLS 1.1),
+ %% failure to properly close a connection no longer requires that a
+ %% session not be resumed. This is a change from DTLS 1.0 to conform
+ %% with widespread implementation practice.
+ case Version of
+ {254, N} when N =< 253 ->
+ ok;
+ _ ->
+ %% As invalidate_sessions here causes performance issues,
+ %% we will conform to the widespread implementation
+ %% practice and go aginst the spec
+ %%invalidate_session(Role, Host, Port, Session)
+ ok
+ end,
+ ssl_connection:handle_normal_shutdown(?ALERT_REC(?FATAL, ?CLOSE_NOTIFY), StateName, State),
{stop, {shutdown, transport_closed}};
-
handle_info(Msg, StateName, State) ->
ssl_connection:handle_info(Msg, StateName, State).
handle_call(Event, From, StateName, State) ->
ssl_connection:handle_call(Event, From, StateName, State, ?MODULE).
+handle_common_event(internal, #alert{} = Alert, StateName,
+ #state{negotiated_version = Version} = State) ->
+ ssl_connection:handle_own_alert(Alert, Version, StateName, State);
+
+%%% DTLS record protocol level handshake messages
+handle_common_event(internal, #ssl_tls{type = ?HANDSHAKE} = Record,
+ StateName,
+ #state{protocol_buffers =
+ #protocol_buffers{dtls_packets = Packets0,
+ dtls_fragment_state = HsState0} = Buffers,
+ negotiated_version = Version} = State0) ->
+ try
+ {Packets1, HsState} = dtls_handshake:get_dtls_handshake(Record, HsState0),
+ State =
+ State0#state{protocol_buffers =
+ Buffers#protocol_buffers{dtls_fragment_state = HsState}},
+ Events = dtls_handshake_events(Packets0 ++ Packets1),
+ case StateName of
+ connection ->
+ ssl_connection:hibernate_after(StateName, State, Events);
+ _ ->
+ {next_state, StateName, State, Events}
+ end
+ catch throw:#alert{} = Alert ->
+ ssl_connection:handle_own_alert(Alert, Version, StateName, State0)
+ end;
+%%% DTLS record protocol level application data messages
+handle_common_event(internal, #ssl_tls{type = ?APPLICATION_DATA, fragment = Data}, StateName, State) ->
+ {next_state, StateName, State, [{next_event, internal, {application_data, Data}}]};
+%%% DTLS record protocol level change cipher messages
+handle_common_event(internal, #ssl_tls{type = ?CHANGE_CIPHER_SPEC, fragment = Data}, StateName, State) ->
+ {next_state, StateName, State, [{next_event, internal, #change_cipher_spec{type = Data}}]};
+%%% DTLS record protocol level Alert messages
+handle_common_event(internal, #ssl_tls{type = ?ALERT, fragment = EncAlerts}, StateName,
+ #state{negotiated_version = Version} = State) ->
+ case decode_alerts(EncAlerts) of
+ Alerts = [_|_] ->
+ handle_alerts(Alerts, {next_state, StateName, State});
+ #alert{} = Alert ->
+ ssl_connection:handle_own_alert(Alert, Version, StateName, State)
+ end;
+%% Ignore unknown TLS record level protocol messages
+handle_common_event(internal, #ssl_tls{type = _Unknown}, StateName, State) ->
+ {next_state, StateName, State}.
+
%%--------------------------------------------------------------------
%% Description:This function is called by a gen_fsm when it is about
%% to terminate. It should be the opposite of Module:init/1 and do any
@@ -334,7 +437,7 @@ terminate(Reason, StateName, State) ->
%% Description: Convert process state when code is changed
%%--------------------------------------------------------------------
code_change(_OldVsn, StateName, State, _Extra) ->
- {?GEN_STATEM_CB_MODE, StateName, State}.
+ {ok, StateName, State}.
format_status(Type, Data) ->
ssl_connection:format_status(Type, Data).
@@ -342,81 +445,99 @@ format_status(Type, Data) ->
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
-encode_handshake(Handshake, Version, ConnectionStates0, Hist0) ->
- Seq = sequence(ConnectionStates0),
- {EncHandshake, FragmentedHandshake} = dtls_handshake:encode_handshake(Handshake, Version,
- Seq),
- Hist = ssl_handshake:update_handshake_history(Hist0, EncHandshake),
- {Encoded, ConnectionStates} =
- dtls_record:encode_handshake(FragmentedHandshake,
- Version, ConnectionStates0),
- {Encoded, ConnectionStates, Hist}.
-next_record(#state{%%flight = #flight{state = finished},
- protocol_buffers =
- #protocol_buffers{dtls_packets = [], dtls_cipher_texts = [CT | Rest]}
- = Buffers,
- connection_states = ConnStates0} = State) ->
- case dtls_record:decode_cipher_text(CT, ConnStates0) of
- {Plain, ConnStates} ->
- {Plain, State#state{protocol_buffers =
- Buffers#protocol_buffers{dtls_cipher_texts = Rest},
- connection_states = ConnStates}};
- #alert{} = Alert ->
- {Alert, State}
- end;
-next_record(#state{socket = Socket,
- transport_cb = Transport} = State) -> %% when FlightState =/= finished
- ssl_socket:setopts(Transport, Socket, [{active,once}]),
- {no_record, State};
+dtls_handshake_events([]) ->
+ throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, malformed_handshake));
+dtls_handshake_events(Packets) ->
+ lists:map(fun(Packet) ->
+ {next_event, internal, {handshake, Packet}}
+ end, Packets).
-next_record(State) ->
- {no_record, State}.
+encode_handshake(Handshake, Version, ConnectionStates0, Hist0) ->
+ {Seq, ConnectionStates} = sequence(ConnectionStates0),
+ {EncHandshake, Frag} = dtls_handshake:encode_handshake(Handshake, Version, Seq),
+ %% DTLS does not have an equivalent version to SSLv2. So v2 hello compatibility
+ %% will always be false
+ Hist = ssl_handshake:update_handshake_history(Hist0, EncHandshake, false),
+ {Frag, ConnectionStates, Hist}.
+
+encode_change_cipher(#change_cipher_spec{}, Version, ConnectionStates) ->
+ dtls_record:encode_change_cipher_spec(Version, ConnectionStates).
+encode_handshake_flight(Flight, ConnectionStates) ->
+ MSS = 1400,
+ encode_handshake_records(Flight, ConnectionStates, MSS, init_pack_records()).
-next_event(StateName, Record, State) ->
- next_event(StateName, Record, State, []).
+encode_handshake_records([], CS, _MSS, Recs) ->
+ {finish_pack_records(Recs), CS};
-next_event(connection = StateName, no_record, State0, Actions) ->
- case next_record_if_active(State0) of
- {no_record, State} ->
- ssl_connection:hibernate_after(StateName, State, Actions);
- {#ssl_tls{} = Record, State} ->
- {next_state, StateName, State, [{next_event, internal, {dtls_record, Record}} | Actions]};
- {#alert{} = Alert, State} ->
- {next_state, StateName, State, [{next_event, internal, Alert} | Actions]}
+encode_handshake_records([{Version, _Epoch, Frag = #change_cipher_spec{}}|Tail], ConnectionStates0, MSS, Recs0) ->
+ {Encoded, ConnectionStates} =
+ encode_change_cipher(Frag, Version, ConnectionStates0),
+ Recs = append_pack_records([Encoded], MSS, Recs0),
+ encode_handshake_records(Tail, ConnectionStates, MSS, Recs);
+
+encode_handshake_records([{Version, Epoch, {MsgType, MsgSeq, Bin}}|Tail], CS0, MSS, Recs0 = {Buf0, _}) ->
+ Space = MSS - iolist_size(Buf0),
+ Len = byte_size(Bin),
+ {Encoded, CS} =
+ encode_handshake_record(Version, Epoch, Space, MsgType, MsgSeq, Len, Bin, 0, MSS, [], CS0),
+ Recs = append_pack_records(Encoded, MSS, Recs0),
+ encode_handshake_records(Tail, CS, MSS, Recs).
+
+%% TODO: move to dtls_handshake????
+encode_handshake_record(_Version, _Epoch, _Space, _MsgType, _MsgSeq, _Len, <<>>, _Offset, _MRS, Encoded, CS)
+ when length(Encoded) > 0 ->
+ %% make sure we encode at least one segment (for empty messages like Server Hello Done
+ {lists:reverse(Encoded), CS};
+
+encode_handshake_record(Version, Epoch, Space, MsgType, MsgSeq, Len, Bin,
+ Offset, MRS, Encoded0, CS0) ->
+ MaxFragmentLen = Space - 25,
+ {BinFragment, Rest} =
+ case Bin of
+ <<BinFragment0:MaxFragmentLen/bytes, Rest0/binary>> ->
+ {BinFragment0, Rest0};
+ _ ->
+ {Bin, <<>>}
+ end,
+ FragLength = byte_size(BinFragment),
+ Frag = [MsgType, ?uint24(Len), ?uint16(MsgSeq), ?uint24(Offset), ?uint24(FragLength), BinFragment],
+ %% TODO Real solution, now avoid dialyzer error {Encoded, CS} = ssl_record:encode_handshake({Epoch, Frag}, Version, CS0),
+ {Encoded, CS} = ssl_record:encode_handshake(Frag, Version, CS0),
+ encode_handshake_record(Version, Epoch, MRS, MsgType, MsgSeq, Len, Rest, Offset + FragLength, MRS, [Encoded|Encoded0], CS).
+
+init_pack_records() ->
+ {[], []}.
+
+append_pack_records([], MSS, Recs = {Buf0, Acc0}) ->
+ Remaining = MSS - iolist_size(Buf0),
+ if Remaining < 12 ->
+ {[], [lists:reverse(Buf0)|Acc0]};
+ true ->
+ Recs
end;
-next_event(StateName, Record, State, Actions) ->
- case Record of
- no_record ->
- {next_state, StateName, State, Actions};
- #ssl_tls{} = Record ->
- {next_state, StateName, State, [{next_event, internal, {dtls_record, Record}} | Actions]};
- #alert{} = Alert ->
- {next_state, StateName, State, [{next_event, internal, Alert} | Actions]}
+append_pack_records([Head|Tail], MSS, {Buf0, Acc0}) ->
+ TotLen = iolist_size(Buf0) + iolist_size(Head),
+ if TotLen > MSS ->
+ append_pack_records(Tail, MSS, {[Head], [lists:reverse(Buf0)|Acc0]});
+ true ->
+ append_pack_records(Tail, MSS, {[Head|Buf0], Acc0})
end.
-send_flight(Fragments, #state{transport_cb = Transport, socket = Socket,
- protocol_buffers = _PBuffers} = State) ->
- Transport:send(Socket, Fragments),
- %% Start retransmission
- %% State#state{protocol_buffers =
- %% (PBuffers#protocol_buffers){ #flight{state = waiting}}}}.
- State.
+finish_pack_records({[], Acc}) ->
+ lists:reverse(Acc);
+finish_pack_records({Buf, Acc}) ->
+ lists:reverse([lists:reverse(Buf)|Acc]).
-handle_own_alert(_,_,_, State) -> %% Place holder
- {stop, {shutdown, own_alert}, State}.
-
-handle_normal_shutdown(_, _, _State) -> %% Place holder
- ok.
-
-encode_change_cipher(#change_cipher_spec{}, Version, ConnectionStates) ->
- dtls_record:encode_change_cipher_spec(Version, ConnectionStates).
+decode_alerts(Bin) ->
+ ssl_alert:decode(Bin).
initial_state(Role, Host, Port, Socket, {SSLOptions, SocketOptions}, User,
{CbModule, DataTag, CloseTag, ErrorTag}) ->
- ConnectionStates = ssl_record:init_connection_states(Role),
+ #ssl_options{beast_mitigation = BeastMitigation} = SSLOptions,
+ ConnectionStates = dtls_record:init_connection_states(Role, BeastMitigation),
SessionCacheCb = case application:get_env(ssl, session_cb) of
{ok, Cb} when is_atom(Cb) ->
@@ -450,21 +571,157 @@ initial_state(Role, Host, Port, Socket, {SSLOptions, SocketOptions}, User,
start_or_recv_from = undefined,
protocol_cb = ?MODULE
}.
-read_application_data(_,State) ->
- {#ssl_tls{fragment = <<"place holder">>}, State}.
-
-next_tls_record(<<>>, _State) ->
- #alert{}; %% Place holder
-next_tls_record(_, State) ->
- {#ssl_tls{fragment = <<"place holder">>}, State}.
-
-sequence(_) ->
- %%TODO real imp
- 1.
-next_record_if_active(State =
- #state{socket_options =
- #socket_options{active = false}}) ->
+
+next_tls_record(Data, #state{protocol_buffers = #protocol_buffers{
+ dtls_record_buffer = Buf0,
+ dtls_cipher_texts = CT0} = Buffers} = State0) ->
+ case dtls_record:get_dtls_records(Data, Buf0) of
+ {Records, Buf1} ->
+ CT1 = CT0 ++ Records,
+ next_record(State0#state{protocol_buffers =
+ Buffers#protocol_buffers{dtls_record_buffer = Buf1,
+ dtls_cipher_texts = CT1}});
+
+ #alert{} = Alert ->
+ Alert
+ end.
+
+next_record(#state{%%flight = #flight{state = finished},
+ protocol_buffers =
+ #protocol_buffers{dtls_packets = [], dtls_cipher_texts = [CT | Rest]}
+ = Buffers,
+ connection_states = ConnStates0} = State) ->
+ case dtls_record:decode_cipher_text(CT, ConnStates0) of
+ {Plain, ConnStates} ->
+ {Plain, State#state{protocol_buffers =
+ Buffers#protocol_buffers{dtls_cipher_texts = Rest},
+ connection_states = ConnStates}};
+ #alert{} = Alert ->
+ {Alert, State}
+ end;
+next_record(#state{socket = Socket,
+ transport_cb = Transport} = State) -> %% when FlightState =/= finished
+ ssl_socket:setopts(Transport, Socket, [{active,once}]),
+ {no_record, State};
+next_record(State) ->
+ {no_record, State}.
+
+next_record_if_active(State =
+ #state{socket_options =
+ #socket_options{active = false}}) ->
{no_record ,State};
next_record_if_active(State) ->
next_record(State).
+
+passive_receive(State0 = #state{user_data_buffer = Buffer}, StateName) ->
+ case Buffer of
+ <<>> ->
+ {Record, State} = next_record(State0),
+ next_event(StateName, Record, State);
+ _ ->
+ {Record, State} = ssl_connection:read_application_data(<<>>, State0),
+ next_event(StateName, Record, State)
+ end.
+
+next_event(StateName, Record, State) ->
+ next_event(StateName, Record, State, []).
+
+next_event(connection = StateName, no_record, State0, Actions) ->
+ case next_record_if_active(State0) of
+ {no_record, State} ->
+ ssl_connection:hibernate_after(StateName, State, Actions);
+ {#ssl_tls{} = Record, State} ->
+ {next_state, StateName, State, [{next_event, internal, {protocol_record, Record}} | Actions]};
+ {#alert{} = Alert, State} ->
+ {next_state, StateName, State, [{next_event, internal, Alert} | Actions]}
+ end;
+next_event(StateName, Record, State, Actions) ->
+ case Record of
+ no_record ->
+ {next_state, StateName, State, Actions};
+ #ssl_tls{} = Record ->
+ {next_state, StateName, State, [{next_event, internal, {protocol_record, Record}} | Actions]};
+ #alert{} = Alert ->
+ {next_state, StateName, State, [{next_event, internal, Alert} | Actions]}
+ end.
+
+%% TODO This generates dialyzer warnings, has to be handled differently.
+%% handle_packet(Address, Port, Packet) ->
+%% try dtls_record:get_dtls_records(Packet, <<>>) of
+%% %% expect client hello
+%% {[#ssl_tls{type = ?HANDSHAKE, version = {254, _}} = Record], <<>>} ->
+%% handle_dtls_client_hello(Address, Port, Record);
+%% _Other ->
+%% {error, not_dtls}
+%% catch
+%% _Class:_Error ->
+%% {error, not_dtls}
+%% end.
+
+%% handle_dtls_client_hello(Address, Port,
+%% #ssl_tls{epoch = Epoch, sequence_number = Seq,
+%% version = Version} = Record) ->
+%% {[{Hello, _}], _} =
+%% dtls_handshake:get_dtls_handshake(Record,
+%% dtls_handshake:dtls_handshake_new_flight(undefined)),
+%% #client_hello{client_version = {Major, Minor},
+%% random = Random,
+%% session_id = SessionId,
+%% cipher_suites = CipherSuites,
+%% compression_methods = CompressionMethods} = Hello,
+%% CookieData = [address_to_bin(Address, Port),
+%% <<?BYTE(Major), ?BYTE(Minor)>>,
+%% Random, SessionId, CipherSuites, CompressionMethods],
+%% Cookie = crypto:hmac(sha, <<"secret">>, CookieData),
+
+%% case Hello of
+%% #client_hello{cookie = Cookie} ->
+%% accept;
+
+%% _ ->
+%% %% generate HelloVerifyRequest
+%% {RequestFragment, _} = dtls_handshake:encode_handshake(
+%% dtls_handshake:hello_verify_request(Cookie),
+%% Version, 0),
+%% HelloVerifyRequest =
+%% dtls_record:encode_tls_cipher_text(?HANDSHAKE, Version, Epoch, Seq, RequestFragment),
+%% {reply, HelloVerifyRequest}
+%% end.
+
+%% address_to_bin({A,B,C,D}, Port) ->
+%% <<0:80,16#ffff:16,A,B,C,D,Port:16>>;
+%% address_to_bin({A,B,C,D,E,F,G,H}, Port) ->
+%% <<A:16,B:16,C:16,D:16,E:16,F:16,G:16,H:16,Port:16>>.
+
+sequence(#{write_msg_seq := Seq} = ConnectionState) ->
+ {Seq, ConnectionState#{write_msg_seq => Seq + 1}}.
+
+renegotiate(#state{role = client} = State, Actions) ->
+ %% Handle same way as if server requested
+ %% the renegotiation
+ Hs0 = ssl_handshake:init_handshake_history(),
+ {next_state, connection, State#state{tls_handshake_history = Hs0,
+ protocol_buffers = #protocol_buffers{}},
+ [{next_event, internal, #hello_request{}} | Actions]};
+
+renegotiate(#state{role = server,
+ connection_states = CS0} = State0, Actions) ->
+ HelloRequest = ssl_handshake:hello_request(),
+ CS = CS0#{write_msg_seq => 0},
+ State1 = send_handshake(HelloRequest,
+ State0#state{connection_states =
+ CS}),
+ Hs0 = ssl_handshake:init_handshake_history(),
+ {Record, State} = next_record(State1#state{tls_handshake_history = Hs0,
+ protocol_buffers = #protocol_buffers{}}),
+ next_event(hello, Record, State, Actions).
+
+handle_alerts([], Result) ->
+ Result;
+handle_alerts(_, {stop,_} = Stop) ->
+ Stop;
+handle_alerts([Alert | Alerts], {next_state, StateName, State}) ->
+ handle_alerts(Alerts, ssl_connection:handle_alert(Alert, StateName, State));
+handle_alerts([Alert | Alerts], {next_state, StateName, State, _Actions}) ->
+ handle_alerts(Alerts, ssl_connection:handle_alert(Alert, StateName, State)).
diff --git a/lib/ssl/src/dtls_connection.hrl b/lib/ssl/src/dtls_connection.hrl
index 69137b520b..ee3daa3c14 100644
--- a/lib/ssl/src/dtls_connection.hrl
+++ b/lib/ssl/src/dtls_connection.hrl
@@ -31,6 +31,7 @@
-record(protocol_buffers, {
dtls_packets = [], %%::[binary()], % Not yet handled decode ssl/tls packets.
dtls_record_buffer = <<>>, %%:: binary(), % Buffer of incomplete records
+ dtls_fragment_state, %%:: [], % DTLS fragments
dtls_handshake_buffer = <<>>, %%:: binary(), % Buffer of incomplete handshakes
dtls_cipher_texts = [], %%:: [binary()],
dtls_cipher_texts_next %%:: [binary()] % Received for Epoch not yet active
diff --git a/lib/ssl/src/dtls_handshake.erl b/lib/ssl/src/dtls_handshake.erl
index 4f48704cac..c6535d5928 100644
--- a/lib/ssl/src/dtls_handshake.erl
+++ b/lib/ssl/src/dtls_handshake.erl
@@ -24,8 +24,8 @@
-include("ssl_alert.hrl").
-export([client_hello/8, client_hello/9, hello/4,
- get_dtls_handshake/2,
- %%dtls_handshake_new_flight/1, dtls_handshake_new_epoch/1,
+ hello_verify_request/1, get_dtls_handshake/2,
+ dtls_handshake_new_flight/1, dtls_handshake_new_epoch/1,
encode_handshake/3]).
-type dtls_handshake() :: #client_hello{} | #hello_verify_request{} |
@@ -35,7 +35,7 @@
%% Internal application API
%%====================================================================
%%--------------------------------------------------------------------
--spec client_hello(host(), inet:port_number(), #connection_states{},
+-spec client_hello(host(), inet:port_number(), ssl_record:connection_states(),
#ssl_options{}, integer(), atom(), boolean(), der_cert()) ->
#client_hello{}.
%%
@@ -48,7 +48,7 @@ client_hello(Host, Port, ConnectionStates, SslOpts,
Cache, CacheCb, Renegotiation, OwnCert).
%%--------------------------------------------------------------------
--spec client_hello(host(), inet:port_number(), term(), #connection_states{},
+-spec client_hello(host(), inet:port_number(), term(), ssl_record:connection_states(),
#ssl_options{}, integer(), atom(), boolean(), der_cert()) ->
#client_hello{}.
%%
@@ -61,7 +61,7 @@ client_hello(Host, Port, Cookie, ConnectionStates,
Cache, CacheCb, Renegotiation, OwnCert) ->
Version = dtls_record:highest_protocol_version(Versions),
Pending = ssl_record:pending_connection_state(ConnectionStates, read),
- SecParams = Pending#connection_state.security_parameters,
+ SecParams = maps:get(security_parameters, Pending),
CipherSuites = ssl_handshake:available_suites(UserSuites, Version),
Extensions = ssl_handshake:client_hello_extensions(Host, dtls_v1:corresponding_tls_version(Version), CipherSuites,
@@ -92,96 +92,135 @@ hello(#server_hello{server_version = Version, random = Random,
?ALERT_REC(?FATAL, ?PROTOCOL_VERSION)
end;
-hello(#client_hello{client_version = ClientVersion}, _Options, {_,_,_,_,ConnectionStates,_}, _Renegotiation) ->
- %% Return correct typ to make dialyzer happy until we have time to make the real imp.
- HashSigns = tls_v1:default_signature_algs(dtls_v1:corresponding_tls_version(ClientVersion)),
- {ClientVersion, {new, #session{}}, ConnectionStates, #hello_extensions{},
- %% Placeholder for real hasign handling
- hd(HashSigns)}.
-
-%% hello(Address, Port,
-%% #ssl_tls{epoch = _Epoch, sequence_number = _Seq,
-%% version = Version} = Record) ->
-%% case get_dtls_handshake(Record,
-%% dtls_handshake_new_flight(undefined)) of
-%% {[Hello | _], _} ->
-%% hello(Address, Port, Version, Hello);
-%% {retransmit, HandshakeState} ->
-%% {retransmit, HandshakeState}
-%% end.
-
-%% hello(Address, Port, Version, Hello) ->
-%% #client_hello{client_version = {Major, Minor},
-%% random = Random,
-%% session_id = SessionId,
-%% cipher_suites = CipherSuites,
-%% compression_methods = CompressionMethods} = Hello,
-%% CookieData = [address_to_bin(Address, Port),
-%% <<?BYTE(Major), ?BYTE(Minor)>>,
-%% Random, SessionId, CipherSuites, CompressionMethods],
-%% Cookie = crypto:hmac(sha, <<"secret">>, CookieData),
-
-%% case Hello of
-%% #client_hello{cookie = Cookie} ->
-%% accept;
-%% _ ->
-%% %% generate HelloVerifyRequest
-%% HelloVerifyRequest = enc_hs(#hello_verify_request{protocol_version = Version,
-%% cookie = Cookie},
-%% Version, 0, 1400),
-%% {reply, HelloVerifyRequest}
-%% end.
+hello(#client_hello{client_version = ClientVersion} = Hello,
+ #ssl_options{versions = Versions} = SslOpts,
+ Info, Renegotiation) ->
+ Version = ssl_handshake:select_version(dtls_record, ClientVersion, Versions),
+ %%
+ %% TODO: handle Cipher Fallback
+ %%
+ handle_client_hello(Version, Hello, SslOpts, Info, Renegotiation).
+
+-spec hello_verify_request(binary()) -> #hello_verify_request{}.
+%%
+%% Description: Creates a hello verify request message sent by server to
+%% verify client
+%%--------------------------------------------------------------------
+hello_verify_request(Cookie) ->
+ %% TODO: DTLS Versions?????
+ #hello_verify_request{protocol_version = {254, 255}, cookie = Cookie}.
+
+%%--------------------------------------------------------------------
%% %%--------------------------------------------------------------------
encode_handshake(Handshake, Version, MsgSeq) ->
{MsgType, Bin} = enc_handshake(Handshake, Version),
Len = byte_size(Bin),
- EncHandshake = [MsgType, ?uint24(Len), ?uint16(MsgSeq), ?uint24(0), ?uint24(Len), Bin],
- FragmentedHandshake = dtls_fragment(erlang:iolist_size(EncHandshake), MsgType, Len, MsgSeq, Bin, 0, []),
- {EncHandshake, FragmentedHandshake}.
+ Enc = [MsgType, ?uint24(Len), ?uint16(MsgSeq), ?uint24(0), ?uint24(Len), Bin],
+ Frag = {MsgType, MsgSeq, Bin},
+ {Enc, Frag}.
%%--------------------------------------------------------------------
--spec get_dtls_handshake(#ssl_tls{}, #dtls_hs_state{} | binary()) ->
+-spec get_dtls_handshake(#ssl_tls{}, #dtls_hs_state{} | undefined) ->
{[dtls_handshake()], #dtls_hs_state{}} | {retransmit, #dtls_hs_state{}}.
%%
%% Description: Given a DTLS state and new data from ssl_record, collects
%% and returns it as a list of handshake messages, also returns a new
%% DTLS state
%%--------------------------------------------------------------------
-get_dtls_handshake(Record, <<>>) ->
- get_dtls_handshake_aux(Record, #dtls_hs_state{}); %% Init handshake state!?
-get_dtls_handshake(Record, HsState) ->
- get_dtls_handshake_aux(Record, HsState).
+get_dtls_handshake(Records, undefined) ->
+ HsState = #dtls_hs_state{highest_record_seq = 0,
+ starting_read_seq = 0,
+ fragments = gb_trees:empty(),
+ completed = []},
+ get_dtls_handshake(Records, HsState);
+get_dtls_handshake(Records, HsState0) when is_list(Records) ->
+ HsState1 = lists:foldr(fun get_dtls_handshake_aux/2, HsState0, Records),
+ get_dtls_handshake_completed(HsState1);
+get_dtls_handshake(Record, HsState0) when is_record(Record, ssl_tls) ->
+ HsState1 = get_dtls_handshake_aux(Record, HsState0),
+ get_dtls_handshake_completed(HsState1).
-%% %%--------------------------------------------------------------------
-%% -spec dtls_handshake_new_epoch(#dtls_hs_state{}) -> #dtls_hs_state{}.
-%% %%
-%% %% Description: Reset the DTLS decoder state for a new Epoch
-%% %%--------------------------------------------------------------------
+%%--------------------------------------------------------------------
+-spec dtls_handshake_new_epoch(#dtls_hs_state{}) -> #dtls_hs_state{}.
+%%
+%% Description: Reset the DTLS decoder state for a new Epoch
+%%--------------------------------------------------------------------
%% dtls_handshake_new_epoch(<<>>) ->
%% dtls_hs_state_init();
-%% dtls_handshake_new_epoch(HsState) ->
-%% HsState#dtls_hs_state{highest_record_seq = 0,
-%% starting_read_seq = HsState#dtls_hs_state.current_read_seq,
-%% fragments = gb_trees:empty(), completed = []}.
-
-%% %--------------------------------------------------------------------
-%% -spec dtls_handshake_new_flight(integer() | undefined) -> #dtls_hs_state{}.
-%% %
-%% % Description: Init the DTLS decoder state for a new Flight
-%% dtls_handshake_new_flight(ExpectedReadReq) ->
-%% #dtls_hs_state{current_read_seq = ExpectedReadReq,
-%% highest_record_seq = 0,
-%% starting_read_seq = 0,
-%% fragments = gb_trees:empty(), completed = []}.
+dtls_handshake_new_epoch(HsState) ->
+ HsState#dtls_hs_state{highest_record_seq = 0,
+ starting_read_seq = HsState#dtls_hs_state.current_read_seq,
+ fragments = gb_trees:empty(), completed = []}.
+
+%--------------------------------------------------------------------
+-spec dtls_handshake_new_flight(integer() | undefined) -> #dtls_hs_state{}.
+%
+% Description: Init the DTLS decoder state for a new Flight
+dtls_handshake_new_flight(ExpectedReadReq) ->
+ #dtls_hs_state{current_read_seq = ExpectedReadReq,
+ highest_record_seq = 0,
+ starting_read_seq = 0,
+ fragments = gb_trees:empty(), completed = []}.
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
+handle_client_hello(Version, #client_hello{session_id = SugesstedId,
+ cipher_suites = CipherSuites,
+ compression_methods = Compressions,
+ random = Random,
+ extensions = #hello_extensions{elliptic_curves = Curves,
+ signature_algs = ClientHashSigns} = HelloExt},
+ #ssl_options{versions = Versions,
+ signature_algs = SupportedHashSigns} = SslOpts,
+ {Port, Session0, Cache, CacheCb, ConnectionStates0, Cert, _}, Renegotiation) ->
+ case dtls_record:is_acceptable_version(Version, Versions) of
+ true ->
+ AvailableHashSigns = ssl_handshake:available_signature_algs(
+ ClientHashSigns, SupportedHashSigns, Cert,
+ dtls_v1:corresponding_tls_version(Version)),
+ ECCCurve = ssl_handshake:select_curve(Curves, ssl_handshake:supported_ecc(Version)),
+ {Type, #session{cipher_suite = CipherSuite} = Session1}
+ = ssl_handshake:select_session(SugesstedId, CipherSuites, AvailableHashSigns, Compressions,
+ Port, Session0#session{ecc = ECCCurve}, Version,
+ SslOpts, Cache, CacheCb, Cert),
+ case CipherSuite of
+ no_suite ->
+ ?ALERT_REC(?FATAL, ?INSUFFICIENT_SECURITY);
+ _ ->
+ {KeyExAlg,_,_,_} = ssl_cipher:suite_definition(CipherSuite),
+ case ssl_handshake:select_hashsign(ClientHashSigns, Cert, KeyExAlg, SupportedHashSigns, Version) of
+ #alert{} = Alert ->
+ Alert;
+ HashSign ->
+ handle_client_hello_extensions(Version, Type, Random, CipherSuites, HelloExt,
+ SslOpts, Session1, ConnectionStates0,
+ Renegotiation, HashSign)
+ end
+ end;
+ false ->
+ ?ALERT_REC(?FATAL, ?PROTOCOL_VERSION)
+ end.
+
+handle_client_hello_extensions(Version, Type, Random, CipherSuites,
+ HelloExt, SslOpts, Session0, ConnectionStates0, Renegotiation, HashSign) ->
+ try ssl_handshake:handle_client_hello_extensions(dtls_record, Random, CipherSuites,
+ HelloExt, dtls_v1:corresponding_tls_version(Version),
+ SslOpts, Session0, ConnectionStates0, Renegotiation) of
+ #alert{} = Alert ->
+ Alert;
+ {Session, ConnectionStates, Protocol, ServerHelloExt} ->
+ {Version, {Type, Session}, ConnectionStates, Protocol, ServerHelloExt, HashSign}
+ catch throw:Alert ->
+ Alert
+ end.
+
handle_server_hello_extensions(Version, SessionId, Random, CipherSuite,
Compression, HelloExt, SslOpt, ConnectionStates0, Renegotiation) ->
case ssl_handshake:handle_server_hello_extensions(dtls_record, Random, CipherSuite,
- Compression, HelloExt, Version,
+ Compression, HelloExt,
+ dtls_v1:corresponding_tls_version(Version),
SslOpt, ConnectionStates0, Renegotiation) of
#alert{} = Alert ->
Alert;
@@ -189,16 +228,8 @@ handle_server_hello_extensions(Version, SessionId, Random, CipherSuite,
{Version, SessionId, ConnectionStates, ProtoExt, Protocol}
end.
-dtls_fragment(Mss, MsgType, Len, MsgSeq, Bin, Offset, Acc)
- when byte_size(Bin) + 12 < Mss ->
- FragmentLen = byte_size(Bin),
- BinMsg = [MsgType, ?uint24(Len), ?uint16(MsgSeq), ?uint24(Offset), ?uint24(FragmentLen), Bin],
- lists:reverse([BinMsg|Acc]);
-dtls_fragment(Mss, MsgType, Len, MsgSeq, Bin, Offset, Acc) ->
- FragmentLen = Mss - 12,
- <<Fragment:FragmentLen/bytes, Rest/binary>> = Bin,
- BinMsg = [MsgType, ?uint24(Len), ?uint16(MsgSeq), ?uint24(Offset), ?uint24(FragmentLen), Fragment],
- dtls_fragment(Mss, MsgType, Len, MsgSeq, Rest, Offset + FragmentLen, [BinMsg|Acc]).
+get_dtls_handshake_completed(HsState = #dtls_hs_state{completed = Completed}) ->
+ {lists:reverse(Completed), HsState#dtls_hs_state{completed = []}}.
get_dtls_handshake_aux(#ssl_tls{version = Version,
sequence_number = SeqNo,
@@ -214,25 +245,18 @@ get_dtls_handshake_aux(Version, SeqNo,
case reassemble_dtls_fragment(SeqNo, Type, Length, MessageSeq,
FragmentOffset, FragmentLength,
Body, HsState0) of
- {retransmit, HsState1} ->
- case Rest of
- <<>> ->
- {retransmit, HsState1};
- _ ->
- get_dtls_handshake_aux(Version, SeqNo, Rest, HsState1)
- end;
{HsState1, HighestSeqNo, MsgBody} ->
HsState2 = dec_dtls_fragment(Version, HighestSeqNo, Type, Length, MessageSeq, MsgBody, HsState1),
HsState3 = process_dtls_fragments(Version, HsState2),
get_dtls_handshake_aux(Version, SeqNo, Rest, HsState3);
+
HsState2 ->
HsState3 = process_dtls_fragments(Version, HsState2),
get_dtls_handshake_aux(Version, SeqNo, Rest, HsState3)
end;
get_dtls_handshake_aux(_Version, _SeqNo, <<>>, HsState) ->
- {lists:reverse(HsState#dtls_hs_state.completed),
- HsState#dtls_hs_state{completed = []}}.
+ HsState.
dec_dtls_fragment(Version, SeqNo, Type, Length, MessageSeq, MsgBody,
HsState = #dtls_hs_state{highest_record_seq = HighestSeqNo, completed = Acc}) ->
@@ -299,12 +323,6 @@ reassemble_dtls_fragment(SeqNo, _Type, Length, MessageSeq, 0, Length,
{HsState, SeqNo, Body};
reassemble_dtls_fragment(_SeqNo, _Type, Length, MessageSeq, 0, Length,
- _Body, HsState =
- #dtls_hs_state{current_read_seq = CurrentReadSeq})
- when MessageSeq < CurrentReadSeq ->
- {retransmit, HsState};
-
-reassemble_dtls_fragment(_SeqNo, _Type, Length, MessageSeq, 0, Length,
_Body, HsState = #dtls_hs_state{current_read_seq = CurrentReadSeq})
when MessageSeq < CurrentReadSeq ->
HsState;
@@ -419,35 +437,31 @@ enc_handshake(#hello_verify_request{protocol_version = {Major, Minor},
?BYTE(CookieLength),
Cookie/binary>>};
+enc_handshake(#hello_request{}, _Version) ->
+ {?HELLO_REQUEST, <<>>};
enc_handshake(#client_hello{client_version = {Major, Minor},
random = Random,
session_id = SessionID,
cookie = Cookie,
cipher_suites = CipherSuites,
compression_methods = CompMethods,
- extensions = HelloExtensions}, Version) ->
+ extensions = HelloExtensions}, _Version) ->
SIDLength = byte_size(SessionID),
- BinCookie = enc_client_hello_cookie(Version, Cookie),
+ CookieLength = byte_size(Cookie),
BinCompMethods = list_to_binary(CompMethods),
CmLength = byte_size(BinCompMethods),
BinCipherSuites = list_to_binary(CipherSuites),
CsLength = byte_size(BinCipherSuites),
ExtensionsBin = ssl_handshake:encode_hello_extensions(HelloExtensions),
-
+
{?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:32/binary,
?BYTE(SIDLength), SessionID/binary,
- BinCookie/binary,
+ ?BYTE(CookieLength), Cookie/binary,
?UINT16(CsLength), BinCipherSuites/binary,
?BYTE(CmLength), BinCompMethods/binary, ExtensionsBin/binary>>};
enc_handshake(HandshakeMsg, Version) ->
ssl_handshake:encode_handshake(HandshakeMsg, Version).
-enc_client_hello_cookie(_, <<>>) ->
- <<>>;
-enc_client_hello_cookie(_, Cookie) ->
- CookieLength = byte_size(Cookie),
- <<?BYTE(CookieLength), Cookie/binary>>.
-
decode_handshake(_Version, ?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:32/binary,
?BYTE(SID_length), Session_ID:SID_length/binary,
?BYTE(Cookie_length), Cookie:Cookie_length/binary,
diff --git a/lib/ssl/src/dtls_record.erl b/lib/ssl/src/dtls_record.erl
index e79e1cede0..8a6e2d315c 100644
--- a/lib/ssl/src/dtls_record.erl
+++ b/lib/ssl/src/dtls_record.erl
@@ -30,17 +30,18 @@
-include("ssl_cipher.hrl").
%% Handling of incoming data
--export([get_dtls_records/2]).
+-export([get_dtls_records/2, init_connection_states/2]).
%% Decoding
-export([decode_cipher_text/2]).
%% Encoding
--export([encode_plain_text/4, encode_handshake/3, encode_change_cipher_spec/2]).
+-export([encode_plain_text/4, encode_tls_cipher_text/5, encode_change_cipher_spec/2]).
%% Protocol version handling
--export([protocol_version/1, lowest_protocol_version/2, lowest_protocol_version/1,
- highest_protocol_version/1, supported_protocol_versions/0,
+-export([protocol_version/1, lowest_protocol_version/1, lowest_protocol_version/2,
+ highest_protocol_version/1, highest_protocol_version/2,
+ is_higher/2, supported_protocol_versions/0,
is_acceptable_version/2]).
%% DTLS Epoch handling
@@ -57,7 +58,26 @@
%%====================================================================
%% Internal application API
%%====================================================================
-
+%%--------------------------------------------------------------------
+-spec init_connection_states(client | server, one_n_minus_one | zero_n | disabled) ->
+ ssl_record:connection_states().
+%% %
+ %
+%% Description: Creates a connection_states record with appropriate
+%% values for the initial SSL connection setup.
+%%--------------------------------------------------------------------
+init_connection_states(Role, BeastMitigation) ->
+ ConnectionEnd = ssl_record:record_protocol_role(Role),
+ Current = initial_connection_state(ConnectionEnd, BeastMitigation),
+ Pending = ssl_record:empty_connection_state(ConnectionEnd, BeastMitigation),
+ #{write_msg_seq => 0,
+ prvious_read => undefined,
+ current_read => Current,
+ pending_read => Pending,
+ prvious_write => undefined,
+ current_write => Current,
+ pending_write => Pending}.
+
%%--------------------------------------------------------------------
-spec get_dtls_records(binary(), binary()) -> {[binary()], binary()} | #alert{}.
%%
@@ -121,63 +141,59 @@ get_dtls_records_aux(Data, Acc) ->
end.
encode_plain_text(Type, Version, Data,
- #connection_states{current_write =
- #connection_state{
- epoch = Epoch,
- sequence_number = Seq,
- compression_state=CompS0,
- security_parameters=
- #security_parameters{
- cipher_type = ?AEAD,
- compression_algorithm=CompAlg}
- }= WriteState0} = ConnectionStates) ->
+ #{current_write :=
+ #{epoch := Epoch,
+ sequence_number := Seq,
+ compression_state := CompS0,
+ security_parameters :=
+ #security_parameters{
+ cipher_type = ?AEAD,
+ compression_algorithm = CompAlg}
+ }= WriteState0} = ConnectionStates) ->
{Comp, CompS1} = ssl_record:compress(CompAlg, Data, CompS0),
- WriteState1 = WriteState0#connection_state{compression_state = CompS1},
+ WriteState1 = WriteState0#{compression_state => CompS1},
AAD = calc_aad(Type, Version, Epoch, Seq),
{CipherFragment, WriteState} = ssl_record:cipher_aead(dtls_v1:corresponding_tls_version(Version),
Comp, WriteState1, AAD),
CipherText = encode_tls_cipher_text(Type, Version, Epoch, Seq, CipherFragment),
- {CipherText, ConnectionStates#connection_states{current_write =
- WriteState#connection_state{sequence_number = Seq +1}}};
+ {CipherText, ConnectionStates#{current_write => WriteState#{sequence_number => Seq +1}}};
encode_plain_text(Type, Version, Data,
- #connection_states{current_write=#connection_state{
- epoch = Epoch,
- sequence_number = Seq,
- compression_state=CompS0,
- security_parameters=
- #security_parameters{compression_algorithm=CompAlg}
- }= WriteState0} = ConnectionStates) ->
+ #{current_write :=
+ #{epoch := Epoch,
+ sequence_number := Seq,
+ compression_state := CompS0,
+ security_parameters :=
+ #security_parameters{compression_algorithm = CompAlg}
+ }= WriteState0} = ConnectionStates) ->
{Comp, CompS1} = ssl_record:compress(CompAlg, Data, CompS0),
- WriteState1 = WriteState0#connection_state{compression_state = CompS1},
+ WriteState1 = WriteState0#{compression_state => CompS1},
MacHash = calc_mac_hash(WriteState1, Type, Version, Epoch, Seq, Comp),
{CipherFragment, WriteState} = ssl_record:cipher(dtls_v1:corresponding_tls_version(Version),
Comp, WriteState1, MacHash),
CipherText = encode_tls_cipher_text(Type, Version, Epoch, Seq, CipherFragment),
- {CipherText, ConnectionStates#connection_states{current_write =
- WriteState#connection_state{sequence_number = Seq +1}}}.
+ {CipherText, ConnectionStates#{current_write => WriteState#{sequence_number => Seq +1}}}.
decode_cipher_text(#ssl_tls{type = Type, version = Version,
epoch = Epoch,
sequence_number = Seq,
fragment = CipherFragment} = CipherText,
- #connection_states{current_read =
- #connection_state{
- compression_state = CompressionS0,
- security_parameters=
- #security_parameters{
- cipher_type = ?AEAD,
- compression_algorithm=CompAlg}
- } = ReadState0}= ConnnectionStates0) ->
+ #{current_read :=
+ #{compression_state := CompressionS0,
+ security_parameters :=
+ #security_parameters{
+ cipher_type = ?AEAD,
+ compression_algorithm = CompAlg}
+ } = ReadState0} = ConnnectionStates0) ->
AAD = calc_aad(Type, Version, Epoch, Seq),
case ssl_record:decipher_aead(dtls_v1:corresponding_tls_version(Version),
CipherFragment, ReadState0, AAD) of
{PlainFragment, ReadState1} ->
{Plain, CompressionS1} = ssl_record:uncompress(CompAlg,
PlainFragment, CompressionS0),
- ConnnectionStates = ConnnectionStates0#connection_states{
- current_read = ReadState1#connection_state{
- compression_state = CompressionS1}},
+ ConnnectionStates = ConnnectionStates0#{
+ current_read => ReadState1#{
+ compression_state => CompressionS1}},
{CipherText#ssl_tls{fragment = Plain}, ConnnectionStates};
#alert{} = Alert ->
Alert
@@ -187,13 +203,12 @@ decode_cipher_text(#ssl_tls{type = Type, version = Version,
epoch = Epoch,
sequence_number = Seq,
fragment = CipherFragment} = CipherText,
- #connection_states{current_read =
- #connection_state{
- compression_state = CompressionS0,
- security_parameters=
- #security_parameters{
- compression_algorithm=CompAlg}
- } = ReadState0}= ConnnectionStates0) ->
+ #{current_read :=
+ #{compression_state := CompressionS0,
+ security_parameters :=
+ #security_parameters{
+ compression_algorithm = CompAlg}
+ } = ReadState0}= ConnnectionStates0) ->
{PlainFragment, Mac, ReadState1} = ssl_record:decipher(dtls_v1:corresponding_tls_version(Version),
CipherFragment, ReadState0, true),
MacHash = calc_mac_hash(ReadState1, Type, Version, Epoch, Seq, PlainFragment),
@@ -201,25 +216,17 @@ decode_cipher_text(#ssl_tls{type = Type, version = Version,
true ->
{Plain, CompressionS1} = ssl_record:uncompress(CompAlg,
PlainFragment, CompressionS0),
- ConnnectionStates = ConnnectionStates0#connection_states{
- current_read = ReadState1#connection_state{
- compression_state = CompressionS1}},
+ ConnnectionStates = ConnnectionStates0#{
+ current_read => ReadState1#{
+ compression_state => CompressionS1}},
{CipherText#ssl_tls{fragment = Plain}, ConnnectionStates};
false ->
?ALERT_REC(?FATAL, ?BAD_RECORD_MAC)
end.
-%%--------------------------------------------------------------------
--spec encode_handshake(iolist(), dtls_version(), #connection_states{}) ->
- {iolist(), #connection_states{}}.
-%%
-%% Description: Encodes a handshake message to send on the ssl-socket.
-%%--------------------------------------------------------------------
-encode_handshake(Frag, Version, ConnectionStates) ->
- encode_plain_text(?HANDSHAKE, Version, Frag, ConnectionStates).
%%--------------------------------------------------------------------
--spec encode_change_cipher_spec(dtls_version(), #connection_states{}) ->
- {iolist(), #connection_states{}}.
+-spec encode_change_cipher_spec(dtls_version(), ssl_record:connection_states()) ->
+ {iolist(), ssl_record:connection_states()}.
%%
%% Description: Encodes a change_cipher_spec-message to send on the ssl socket.
%%--------------------------------------------------------------------
@@ -271,20 +278,39 @@ lowest_protocol_version(Versions) ->
%%
%% Description: Highest protocol version present in a list
%%--------------------------------------------------------------------
-highest_protocol_version([Ver | Vers]) ->
- highest_protocol_version(Ver, Vers).
+highest_protocol_version([]) ->
+ highest_protocol_version();
+highest_protocol_version(Versions) ->
+ [Ver | Vers] = Versions,
+ highest_list_protocol_version(Ver, Vers).
-highest_protocol_version(Version, []) ->
+%%--------------------------------------------------------------------
+-spec highest_protocol_version(dtls_version(), dtls_version()) -> dtls_version().
+%%
+%% Description: Highest protocol version of two given versions
+%%--------------------------------------------------------------------
+highest_protocol_version(Version = {M, N}, {M, O}) when N < O ->
+ Version;
+highest_protocol_version({M, _},
+ Version = {M, _}) ->
Version;
-highest_protocol_version(Version = {N, M}, [{N, O} | Rest]) when M < O ->
- highest_protocol_version(Version, Rest);
-highest_protocol_version({M, _}, [Version = {M, _} | Rest]) ->
- highest_protocol_version(Version, Rest);
-highest_protocol_version(Version = {M,_}, [{N,_} | Rest]) when M < N ->
- highest_protocol_version(Version, Rest);
-highest_protocol_version(_, [Version | Rest]) ->
- highest_protocol_version(Version, Rest).
+highest_protocol_version(Version = {M,_},
+ {N, _}) when M < N ->
+ Version;
+highest_protocol_version(_,Version) ->
+ Version.
+%%--------------------------------------------------------------------
+-spec is_higher(V1 :: dtls_version(), V2::dtls_version()) -> boolean().
+%%
+%% Description: Is V1 > V2
+%%--------------------------------------------------------------------
+is_higher({M, N}, {M, O}) when N < O ->
+ true;
+is_higher({M, _}, {N, _}) when M < N ->
+ true;
+is_higher(_, _) ->
+ false.
%%--------------------------------------------------------------------
-spec supported_protocol_versions() -> [dtls_version()].
@@ -301,27 +327,33 @@ supported_protocol_versions() ->
{ok, []} ->
lists:map(Fun, supported_protocol_versions([]));
{ok, Vsns} when is_list(Vsns) ->
- supported_protocol_versions(Vsns);
+ supported_protocol_versions(lists:map(Fun, Vsns));
{ok, Vsn} ->
- supported_protocol_versions([Vsn])
+ supported_protocol_versions([Fun(Vsn)])
end.
supported_protocol_versions([]) ->
- Vsns = supported_connection_protocol_versions([]),
+ Vsns = case sufficient_dtlsv1_2_crypto_support() of
+ true ->
+ ?ALL_DATAGRAM_SUPPORTED_VERSIONS;
+ false ->
+ ?MIN_DATAGRAM_SUPPORTED_VERSIONS
+ end,
application:set_env(ssl, dtls_protocol_version, Vsns),
Vsns;
supported_protocol_versions([_|_] = Vsns) ->
- Vsns.
-
-%% highest_protocol_version() ->
-%% highest_protocol_version(supported_protocol_versions()).
-
-lowest_protocol_version() ->
- lowest_protocol_version(supported_protocol_versions()).
-
-supported_connection_protocol_versions([]) ->
- ?ALL_DATAGRAM_SUPPORTED_VERSIONS.
+ case sufficient_dtlsv1_2_crypto_support() of
+ true ->
+ Vsns;
+ false ->
+ case Vsns -- ['dtlsv1.2'] of
+ [] ->
+ ?MIN_SUPPORTED_VERSIONS;
+ NewVsns ->
+ NewVsns
+ end
+ end.
%%--------------------------------------------------------------------
-spec is_acceptable_version(dtls_version(), Supported :: [dtls_version()]) -> boolean().
@@ -334,104 +366,121 @@ is_acceptable_version(Version, Versions) ->
%%--------------------------------------------------------------------
--spec init_connection_state_seq(dtls_version(), #connection_states{}) ->
- #connection_state{}.
+-spec init_connection_state_seq(dtls_version(), ssl_record:connection_states()) ->
+ ssl_record:connection_state().
%%
%% Description: Copy the read sequence number to the write sequence number
%% This is only valid for DTLS in the first client_hello
%%--------------------------------------------------------------------
init_connection_state_seq({254, _},
- #connection_states{
- current_read = Read = #connection_state{epoch = 0},
- current_write = Write = #connection_state{epoch = 0}} = CS0) ->
- CS0#connection_states{current_write =
- Write#connection_state{
- sequence_number = Read#connection_state.sequence_number}};
+ #{current_read := #{epoch := 0} = Read,
+ current_write := #{epoch := 0} = Write} = CS0) ->
+ Seq = maps:get(sequence_number, Read),
+ CS0#{current_write => Write#{sequence_number => Seq}};
init_connection_state_seq(_, CS) ->
CS.
%%--------------------------------------------------------
--spec current_connection_state_epoch(#connection_states{}, read | write) ->
+-spec current_connection_state_epoch(ssl_record:connection_states(), read | write) ->
integer().
%%
%% Description: Returns the epoch the connection_state record
%% that is currently defined as the current conection state.
%%--------------------------------------------------------------------
-current_connection_state_epoch(#connection_states{current_read = Current},
+current_connection_state_epoch(#{current_read := Current},
read) ->
- Current#connection_state.epoch;
-current_connection_state_epoch(#connection_states{current_write = Current},
+ maps:get(epoch, Current);
+current_connection_state_epoch(#{current_write := Current},
write) ->
- Current#connection_state.epoch.
+ maps:get(epoch, Current).
%%--------------------------------------------------------------------
--spec connection_state_by_epoch(#connection_states{}, integer(), read | write) ->
- #connection_state{}.
+-spec connection_state_by_epoch(ssl_record:connection_states(), integer(), read | write) ->
+ ssl_record:connection_state().
%%
%% Description: Returns the instance of the connection_state record
%% that is defined by the Epoch.
%%--------------------------------------------------------------------
-connection_state_by_epoch(#connection_states{current_read = CS}, Epoch, read)
- when CS#connection_state.epoch == Epoch ->
+connection_state_by_epoch(#{current_read := #{epoch := Epoch}} = CS, Epoch, read) ->
CS;
-connection_state_by_epoch(#connection_states{pending_read = CS}, Epoch, read)
- when CS#connection_state.epoch == Epoch ->
+connection_state_by_epoch(#{pending_read := #{epoch := Epoch}} = CS, Epoch, read) ->
CS;
-connection_state_by_epoch(#connection_states{current_write = CS}, Epoch, write)
- when CS#connection_state.epoch == Epoch ->
+connection_state_by_epoch(#{current_write := #{epoch := Epoch}} = CS, Epoch, write) ->
CS;
-connection_state_by_epoch(#connection_states{pending_write = CS}, Epoch, write)
- when CS#connection_state.epoch == Epoch ->
+connection_state_by_epoch(#{pending_write := #{epoch := Epoch}} = CS, Epoch, write) ->
CS.
%%--------------------------------------------------------------------
--spec set_connection_state_by_epoch(#connection_states{},
- #connection_state{}, read | write)
- -> #connection_states{}.
+-spec set_connection_state_by_epoch(ssl_record:connection_states(),
+ ssl_record:connection_state(), read | write)
+ -> ssl_record:connection_states().
%%
%% Description: Returns the instance of the connection_state record
%% that is defined by the Epoch.
%%--------------------------------------------------------------------
-set_connection_state_by_epoch(ConnectionStates0 =
- #connection_states{current_read = CS},
- NewCS = #connection_state{epoch = Epoch}, read)
- when CS#connection_state.epoch == Epoch ->
- ConnectionStates0#connection_states{current_read = NewCS};
-
-set_connection_state_by_epoch(ConnectionStates0 =
- #connection_states{pending_read = CS},
- NewCS = #connection_state{epoch = Epoch}, read)
- when CS#connection_state.epoch == Epoch ->
- ConnectionStates0#connection_states{pending_read = NewCS};
-
-set_connection_state_by_epoch(ConnectionStates0 =
- #connection_states{current_write = CS},
- NewCS = #connection_state{epoch = Epoch}, write)
- when CS#connection_state.epoch == Epoch ->
- ConnectionStates0#connection_states{current_write = NewCS};
-
-set_connection_state_by_epoch(ConnectionStates0 =
- #connection_states{pending_write = CS},
- NewCS = #connection_state{epoch = Epoch}, write)
- when CS#connection_state.epoch == Epoch ->
- ConnectionStates0#connection_states{pending_write = NewCS}.
+set_connection_state_by_epoch(#{current_read := #{epoch := Epoch}} = ConnectionStates0,
+ NewCS = #{epoch := Epoch}, read) ->
+ ConnectionStates0#{current_read => NewCS};
+set_connection_state_by_epoch(#{pending_read := #{epoch := Epoch}} = ConnectionStates0,
+ NewCS = #{epoch := Epoch}, read) ->
+ ConnectionStates0#{pending_read => NewCS};
+set_connection_state_by_epoch(#{current_write := #{epoch := Epoch}} = ConnectionStates0,
+ NewCS = #{epoch := Epoch}, write) ->
+ ConnectionStates0#{current_write => NewCS};
+set_connection_state_by_epoch(#{pending_write := #{epoch := Epoch}} = ConnectionStates0,
+NewCS = #{epoch := Epoch}, write) ->
+ ConnectionStates0#{pending_write => NewCS}.
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
+initial_connection_state(ConnectionEnd, BeastMitigation) ->
+ #{security_parameters =>
+ ssl_record:initial_security_params(ConnectionEnd),
+ epoch => 0,
+ sequence_number => 1,
+ beast_mitigation => BeastMitigation,
+ compression_state => undefined,
+ cipher_state => undefined,
+ mac_secret => undefined,
+ secure_renegotiation => undefined,
+ client_verify_data => undefined,
+ server_verify_data => undefined
+ }.
+
+lowest_list_protocol_version(Ver, []) ->
+ Ver;
+lowest_list_protocol_version(Ver1, [Ver2 | Rest]) ->
+ lowest_list_protocol_version(lowest_protocol_version(Ver1, Ver2), Rest).
+
+highest_list_protocol_version(Ver, []) ->
+ Ver;
+highest_list_protocol_version(Ver1, [Ver2 | Rest]) ->
+ highest_list_protocol_version(highest_protocol_version(Ver1, Ver2), Rest).
+
encode_tls_cipher_text(Type, {MajVer, MinVer}, Epoch, Seq, Fragment) ->
Length = erlang:iolist_size(Fragment),
[<<?BYTE(Type), ?BYTE(MajVer), ?BYTE(MinVer), ?UINT16(Epoch),
?UINT48(Seq), ?UINT16(Length)>>, Fragment].
-calc_mac_hash(#connection_state{mac_secret = MacSecret,
- security_parameters = #security_parameters{mac_algorithm = MacAlg}},
+calc_mac_hash(#{mac_secret := MacSecret,
+ security_parameters := #security_parameters{mac_algorithm = MacAlg}},
Type, Version, Epoch, SeqNo, Fragment) ->
Length = erlang:iolist_size(Fragment),
NewSeq = (Epoch bsl 48) + SeqNo,
mac_hash(Version, MacAlg, MacSecret, NewSeq, Type,
Length, Fragment).
+highest_protocol_version() ->
+ highest_protocol_version(supported_protocol_versions()).
+
+lowest_protocol_version() ->
+ lowest_protocol_version(supported_protocol_versions()).
+
+sufficient_dtlsv1_2_crypto_support() ->
+ CryptoSupport = crypto:supports(),
+ proplists:get_bool(sha256, proplists:get_value(hashs, CryptoSupport)).
+
mac_hash(Version, MacAlg, MacSecret, SeqNo, Type, Length, Fragment) ->
dtls_v1:mac_hash(Version, MacAlg, MacSecret, SeqNo, Type,
Length, Fragment).
@@ -439,8 +488,3 @@ mac_hash(Version, MacAlg, MacSecret, SeqNo, Type, Length, Fragment) ->
calc_aad(Type, {MajVer, MinVer}, Epoch, SeqNo) ->
NewSeq = (Epoch bsl 48) + SeqNo,
<<NewSeq:64/integer, ?BYTE(Type), ?BYTE(MajVer), ?BYTE(MinVer)>>.
-
-lowest_list_protocol_version(Ver, []) ->
- Ver;
-lowest_list_protocol_version(Ver1, [Ver2 | Rest]) ->
- lowest_list_protocol_version(lowest_protocol_version(Ver1, Ver2), Rest).
diff --git a/lib/ssl/src/inet_tls_dist.erl b/lib/ssl/src/inet_tls_dist.erl
index 3481e89af0..0da4b3587f 100644
--- a/lib/ssl/src/inet_tls_dist.erl
+++ b/lib/ssl/src/inet_tls_dist.erl
@@ -87,7 +87,8 @@ do_setup(Driver, Kernel, Node, Type, MyNode, LongOrShortNames, SetupTime) ->
case inet:getaddr(Address, Driver:family()) of
{ok, Ip} ->
Timer = dist_util:start_timer(SetupTime),
- case erl_epmd:port_please(Name, Ip) of
+ ErlEpmd = net_kernel:epmd_module(),
+ case ErlEpmd:port_please(Name, Ip) of
{port, TcpPort, Version} ->
?trace("port_please(~p) -> version ~p~n",
[Node,Version]),
diff --git a/lib/ssl/src/ssl.app.src b/lib/ssl/src/ssl.app.src
index 1a2bf90ccf..00b0513891 100644
--- a/lib/ssl/src/ssl.app.src
+++ b/lib/ssl/src/ssl.app.src
@@ -44,6 +44,7 @@
ssl_crl,
ssl_crl_cache,
ssl_crl_cache_api,
+ ssl_crl_hash_dir,
%% App structure
ssl_app,
ssl_sup,
@@ -54,7 +55,7 @@
{applications, [crypto, public_key, kernel, stdlib]},
{env, []},
{mod, {ssl_app, []}},
- {runtime_dependencies, ["stdlib-2.0","public_key-1.0","kernel-3.0",
+ {runtime_dependencies, ["stdlib-3.1","public_key-1.2","kernel-3.0",
"erts-7.0","crypto-3.3", "inets-5.10.7"]}]}.
diff --git a/lib/ssl/src/ssl.appup.src b/lib/ssl/src/ssl.appup.src
index 11728128c4..32252386b4 100644
--- a/lib/ssl/src/ssl.appup.src
+++ b/lib/ssl/src/ssl.appup.src
@@ -1,18 +1,11 @@
%% -*- erlang -*-
{"%VSN%",
[
- {<<"7\\..*">>, [{restart_application, ssl}]},
- {<<"6\\..*">>, [{restart_application, ssl}]},
- {<<"5\\..*">>, [{restart_application, ssl}]},
- {<<"4\\..*">>, [{restart_application, ssl}]},
- {<<"3\\..*">>, [{restart_application, ssl}]}
+ {<<"^8[.]0([.][0-9]+)?$">>, [{restart_application, ssl}]},
+ {<<"^[3-7][.][^.].*">>, [{restart_application, ssl}]}
],
[
- {<<"7\\..*">>, [{restart_application, ssl}]},
- {<<"6\\..*">>, [{restart_application, ssl}]},
- {<<"5\\..*">>, [{restart_application, ssl}]},
- {<<"4\\..*">>, [{restart_application, ssl}]},
- {<<"3\\..*">>, [{restart_application, ssl}]}
- ]
+ {<<"^8[.]0([.][0-9]+)?$">>, [{restart_application, ssl}]},
+ {<<"^[3-7][.][^.].*">>, [{restart_application, ssl}]}
+ ]
}.
-
diff --git a/lib/ssl/src/ssl.erl b/lib/ssl/src/ssl.erl
index dbbb25025c..27b753af2e 100644
--- a/lib/ssl/src/ssl.erl
+++ b/lib/ssl/src/ssl.erl
@@ -34,7 +34,8 @@
listen/2, transport_accept/1, transport_accept/2,
ssl_accept/1, ssl_accept/2, ssl_accept/3,
controlling_process/2, peername/1, peercert/1, sockname/1,
- close/1, close/2, shutdown/2, recv/2, recv/3, send/2, getopts/2, setopts/2
+ close/1, close/2, shutdown/2, recv/2, recv/3, send/2,
+ getopts/2, setopts/2, getstat/1, getstat/2
]).
%% SSL/TLS protocol handling
-export([cipher_suites/0, cipher_suites/1,
@@ -42,7 +43,7 @@
renegotiate/1, prf/5, negotiated_protocol/1, negotiated_next_protocol/1,
connection_information/1, connection_information/2]).
%% Misc
--export([handle_options/2]).
+-export([handle_options/2, tls_version/1]).
-deprecated({negotiated_next_protocol, 1, next_major_release}).
-deprecated({connection_info, 1, next_major_release}).
@@ -97,7 +98,7 @@ connect(Socket, SslOptions) when is_port(Socket) ->
connect(Socket, SslOptions, infinity).
connect(Socket, SslOptions0, Timeout) when is_port(Socket),
- (is_integer(Timeout) andalso Timeout > 0) or (Timeout == infinity) ->
+ (is_integer(Timeout) andalso Timeout >= 0) or (Timeout == infinity) ->
{Transport,_,_,_} = proplists:get_value(cb_info, SslOptions0,
{gen_tcp, tcp, tcp_closed, tcp_error}),
EmulatedOptions = ssl_socket:emulated_options(),
@@ -123,7 +124,7 @@ connect(Socket, SslOptions0, Timeout) when is_port(Socket),
connect(Host, Port, Options) ->
connect(Host, Port, Options, infinity).
-connect(Host, Port, Options, Timeout) when (is_integer(Timeout) andalso Timeout > 0) or (Timeout == infinity) ->
+connect(Host, Port, Options, Timeout) when (is_integer(Timeout) andalso Timeout >= 0) or (Timeout == infinity) ->
try handle_options(Options, client) of
{ok, Config} ->
do_connect(Host,Port,Config,Timeout)
@@ -173,7 +174,7 @@ transport_accept(#sslsocket{pid = {ListenSocket,
#config{transport_info = {Transport,_,_, _} =CbInfo,
connection_cb = ConnectionCb,
ssl = SslOpts,
- emulated = Tracker}}}, Timeout) when (is_integer(Timeout) andalso Timeout > 0) or (Timeout == infinity) ->
+ emulated = Tracker}}}, Timeout) when (is_integer(Timeout) andalso Timeout >= 0) or (Timeout == infinity) ->
case Transport:accept(ListenSocket, Timeout) of
{ok, Socket} ->
{ok, EmOpts} = ssl_socket:get_emulated_opts(Tracker),
@@ -206,25 +207,25 @@ transport_accept(#sslsocket{pid = {ListenSocket,
ssl_accept(ListenSocket) ->
ssl_accept(ListenSocket, infinity).
-ssl_accept(#sslsocket{} = Socket, Timeout) when (is_integer(Timeout) andalso Timeout > 0) or (Timeout == infinity) ->
+ssl_accept(#sslsocket{} = Socket, Timeout) when (is_integer(Timeout) andalso Timeout >= 0) or (Timeout == infinity) ->
ssl_connection:handshake(Socket, Timeout);
-
-ssl_accept(ListenSocket, SslOptions) when is_port(ListenSocket) ->
+
+ssl_accept(ListenSocket, SslOptions) when is_port(ListenSocket) ->
ssl_accept(ListenSocket, SslOptions, infinity).
-ssl_accept(#sslsocket{} = Socket, [], Timeout) when (is_integer(Timeout) andalso Timeout > 0) or (Timeout == infinity)->
+ssl_accept(#sslsocket{} = Socket, [], Timeout) when (is_integer(Timeout) andalso Timeout >= 0) or (Timeout == infinity)->
ssl_accept(#sslsocket{} = Socket, Timeout);
-ssl_accept(#sslsocket{fd = {_, _, _, Tracker}} = Socket, SslOpts0, Timeout) when
- (is_integer(Timeout) andalso Timeout > 0) or (Timeout == infinity)->
- try
- {ok, EmOpts, InheritedSslOpts} = ssl_socket:get_all_opts(Tracker),
+ssl_accept(#sslsocket{fd = {_, _, _, Tracker}} = Socket, SslOpts0, Timeout) when
+ (is_integer(Timeout) andalso Timeout >= 0) or (Timeout == infinity)->
+ try
+ {ok, EmOpts, InheritedSslOpts} = ssl_socket:get_all_opts(Tracker),
SslOpts = handle_options(SslOpts0, InheritedSslOpts),
ssl_connection:handshake(Socket, {SslOpts, emulated_socket_options(EmOpts, #socket_options{})}, Timeout)
catch
Error = {error, _Reason} -> Error
end;
ssl_accept(Socket, SslOptions, Timeout) when is_port(Socket),
- (is_integer(Timeout) andalso Timeout > 0) or (Timeout == infinity) ->
+ (is_integer(Timeout) andalso Timeout >= 0) or (Timeout == infinity) ->
{Transport,_,_,_} =
proplists:get_value(cb_info, SslOptions, {gen_tcp, tcp, tcp_closed, tcp_error}),
EmulatedOptions = ssl_socket:emulated_options(),
@@ -252,17 +253,17 @@ close(#sslsocket{pid = {ListenSocket, #config{transport_info={Transport,_, _, _}
Transport:close(ListenSocket).
%%--------------------------------------------------------------------
--spec close(#sslsocket{}, integer() | {pid(), integer()}) -> term().
+-spec close(#sslsocket{}, timeout() | {pid(), integer()}) -> term().
%%
%% Description: Close an ssl connection
%%--------------------------------------------------------------------
-close(#sslsocket{pid = TLSPid},
- {Pid, Timeout} = DownGrade) when is_pid(TLSPid),
- is_pid(Pid),
- (is_integer(Timeout) andalso Timeout > 0) or (Timeout == infinity) ->
+close(#sslsocket{pid = TLSPid},
+ {Pid, Timeout} = DownGrade) when is_pid(TLSPid),
+ is_pid(Pid),
+ (is_integer(Timeout) andalso Timeout >= 0) or (Timeout == infinity) ->
ssl_connection:close(TLSPid, {close, DownGrade});
-close(#sslsocket{pid = TLSPid}, Timeout) when is_pid(TLSPid),
- (is_integer(Timeout) andalso Timeout > 0) or (Timeout == infinity) ->
+close(#sslsocket{pid = TLSPid}, Timeout) when is_pid(TLSPid),
+ (is_integer(Timeout) andalso Timeout >= 0) or (Timeout == infinity) ->
ssl_connection:close(TLSPid, {close, Timeout});
close(#sslsocket{pid = {ListenSocket, #config{transport_info={Transport,_, _, _}}}}, _) ->
Transport:close(ListenSocket).
@@ -286,7 +287,7 @@ send(#sslsocket{pid = {ListenSocket, #config{transport_info={Transport, _, _, _}
recv(Socket, Length) ->
recv(Socket, Length, infinity).
recv(#sslsocket{pid = Pid}, Length, Timeout) when is_pid(Pid),
- (is_integer(Timeout) andalso Timeout > 0) or (Timeout == infinity)->
+ (is_integer(Timeout) andalso Timeout >= 0) or (Timeout == infinity)->
ssl_connection:recv(Pid, Length, Timeout);
recv(#sslsocket{pid = {Listen,
#config{transport_info = {Transport, _, _, _}}}}, _,_) when is_port(Listen)->
@@ -400,24 +401,23 @@ negotiated_next_protocol(Socket) ->
end.
%%--------------------------------------------------------------------
+-spec cipher_suites() -> [ssl_cipher:erl_cipher_suite()] | [string()].
+%%--------------------------------------------------------------------
+cipher_suites() ->
+ cipher_suites(erlang).
+%%--------------------------------------------------------------------
-spec cipher_suites(erlang | openssl | all) -> [ssl_cipher:erl_cipher_suite()] |
[string()].
%% Description: Returns all supported cipher suites.
%%--------------------------------------------------------------------
cipher_suites(erlang) ->
- Version = tls_record:highest_protocol_version([]),
- ssl_cipher:filter_suites([ssl_cipher:erl_suite_definition(S)
- || S <- ssl_cipher:suites(Version)]);
+ [ssl_cipher:erl_suite_definition(Suite) || Suite <- available_suites(default)];
+
cipher_suites(openssl) ->
- Version = tls_record:highest_protocol_version([]),
- [ssl_cipher:openssl_suite_name(S)
- || S <- ssl_cipher:filter_suites(ssl_cipher:suites(Version))];
+ [ssl_cipher:openssl_suite_name(Suite) || Suite <- available_suites(default)];
+
cipher_suites(all) ->
- Version = tls_record:highest_protocol_version([]),
- ssl_cipher:filter_suites([ssl_cipher:erl_suite_definition(S)
- || S <-ssl_cipher:all_suites(Version)]).
-cipher_suites() ->
- cipher_suites(erlang).
+ [ssl_cipher:erl_suite_definition(Suite) || Suite <- available_suites(all)].
%%--------------------------------------------------------------------
-spec getopts(#sslsocket{}, [gen_tcp:option_name()]) ->
@@ -470,6 +470,32 @@ setopts(#sslsocket{}, Options) ->
{error, {options,{not_a_proplist, Options}}}.
%%---------------------------------------------------------------
+-spec getstat(Socket) ->
+ {ok, OptionValues} | {error, inet:posix()} when
+ Socket :: #sslsocket{},
+ OptionValues :: [{inet:stat_option(), integer()}].
+%%
+%% Description: Get all statistic options for a socket.
+%%--------------------------------------------------------------------
+getstat(Socket) ->
+ getstat(Socket, inet:stats()).
+
+%%---------------------------------------------------------------
+-spec getstat(Socket, Options) ->
+ {ok, OptionValues} | {error, inet:posix()} when
+ Socket :: #sslsocket{},
+ Options :: [inet:stat_option()],
+ OptionValues :: [{inet:stat_option(), integer()}].
+%%
+%% Description: Get one or more statistic options for a socket.
+%%--------------------------------------------------------------------
+getstat(#sslsocket{pid = {Listen, #config{transport_info = {Transport, _, _, _}}}}, Options) when is_port(Listen), is_list(Options) ->
+ ssl_socket:getstat(Transport, Listen, Options);
+
+getstat(#sslsocket{pid = Pid, fd = {Transport, Socket, _, _}}, Options) when is_pid(Pid), is_list(Options) ->
+ ssl_socket:getstat(Transport, Socket, Options).
+
+%%---------------------------------------------------------------
-spec shutdown(#sslsocket{}, read | write | read_write) -> ok | {error, reason()}.
%%
%% Description: Same as gen_tcp:shutdown/2
@@ -581,9 +607,24 @@ format_error(Error) ->
Other
end.
+tls_version({3, _} = Version) ->
+ Version;
+tls_version({254, _} = Version) ->
+ dtls_v1:corresponding_tls_version(Version).
+
%%%--------------------------------------------------------------
%%% Internal functions
%%%--------------------------------------------------------------------
+
+%% Possible filters out suites not supported by crypto
+available_suites(default) ->
+ Version = tls_record:highest_protocol_version([]),
+ ssl_cipher:filter_suites(ssl_cipher:suites(Version));
+
+available_suites(all) ->
+ Version = tls_record:highest_protocol_version([]),
+ ssl_cipher:filter_suites(ssl_cipher:all_suites(Version)).
+
do_connect(Address, Port,
#config{transport_info = CbInfo, inet_user = UserOpts, ssl = SslOpts,
emulated = EmOpts, inet_ssl = SocketOpts, connection_cb = ConnetionCb},
@@ -716,13 +757,15 @@ handle_options(Opts0, Role) ->
server, Role),
protocol = proplists:get_value(protocol, Opts, tls),
padding_check = proplists:get_value(padding_check, Opts, true),
+ beast_mitigation = handle_option(beast_mitigation, Opts, one_n_minus_one),
fallback = handle_option(fallback, Opts,
proplists:get_value(fallback, Opts,
default_option_role(client,
false, Role)),
client, Role),
crl_check = handle_option(crl_check, Opts, false),
- crl_cache = handle_option(crl_cache, Opts, {ssl_crl_cache, {internal, []}})
+ crl_cache = handle_option(crl_cache, Opts, {ssl_crl_cache, {internal, []}}),
+ v2_hello_compatible = handle_option(v2_hello_compatible, Opts, false)
},
CbInfo = proplists:get_value(cb_info, Opts, {gen_tcp, tcp, tcp_closed, tcp_error}),
@@ -737,7 +780,7 @@ handle_options(Opts0, Role) ->
alpn_preferred_protocols, next_protocols_advertised,
client_preferred_next_protocols, log_alert,
server_name_indication, honor_cipher_order, padding_check, crl_check, crl_cache,
- fallback, signature_algs],
+ fallback, signature_algs, beast_mitigation, v2_hello_compatible],
SockOpts = lists:foldl(fun(Key, PropList) ->
proplists:delete(Key, PropList)
@@ -977,6 +1020,12 @@ validate_option(crl_check, Value) when (Value == best_effort) or (Value == peer)
Value;
validate_option(crl_cache, {Cb, {_Handle, Options}} = Value) when is_atom(Cb) and is_list(Options) ->
Value;
+validate_option(beast_mitigation, Value) when Value == one_n_minus_one orelse
+ Value == zero_n orelse
+ Value == disabled ->
+ Value;
+validate_option(v2_hello_compatible, Value) when is_boolean(Value) ->
+ Value;
validate_option(Opt, Value) ->
throw({error, {options, {Opt, Value}}}).
diff --git a/lib/ssl/src/ssl_alert.erl b/lib/ssl/src/ssl_alert.erl
index 3e35e24527..05dfb4c1b3 100644
--- a/lib/ssl/src/ssl_alert.erl
+++ b/lib/ssl/src/ssl_alert.erl
@@ -39,8 +39,8 @@
%%====================================================================
%%--------------------------------------------------------------------
--spec encode(#alert{}, ssl_record:ssl_version(), #connection_states{}) ->
- {iolist(), #connection_states{}}.
+-spec encode(#alert{}, ssl_record:ssl_version(), ssl_record:connection_states()) ->
+ {iolist(), ssl_record:connection_states()}.
%%
%% Description: Encodes an alert
%%--------------------------------------------------------------------
@@ -73,10 +73,14 @@ reason_code(#alert{description = Description}, _) ->
%%
%% Description: Returns the error string for given alert.
%%--------------------------------------------------------------------
-
-alert_txt(#alert{level = Level, description = Description, where = {Mod,Line}}) ->
+alert_txt(#alert{level = Level, description = Description, where = {Mod,Line}, reason = undefined}) ->
Mod ++ ":" ++ integer_to_list(Line) ++ ":" ++
- level_txt(Level) ++" "++ description_txt(Description).
+ level_txt(Level) ++" "++ description_txt(Description);
+alert_txt(#alert{reason = Reason} = Alert) ->
+ BaseTxt = alert_txt(Alert#alert{reason = undefined}),
+ FormatDepth = 9, % Some limit on printed representation of an error
+ ReasonTxt = lists:flatten(io_lib:format("~P", [Reason, FormatDepth])),
+ BaseTxt ++ " - " ++ ReasonTxt.
%%--------------------------------------------------------------------
%%% Internal functions
@@ -85,7 +89,7 @@ alert_txt(#alert{level = Level, description = Description, where = {Mod,Line}})
%% It is very unlikely that an correct implementation will send more than one alert at the time
%% So it there is more than 10 warning alerts we consider it an error
decode(<<?BYTE(Level), ?BYTE(_), _/binary>>, _, N) when Level == ?WARNING, N > ?MAX_ALERTS ->
- ?ALERT_REC(?FATAL, ?DECODE_ERROR);
+ ?ALERT_REC(?FATAL, ?DECODE_ERROR, too_many_remote_alerts);
decode(<<?BYTE(Level), ?BYTE(Description), Rest/binary>>, Acc, N) when Level == ?WARNING ->
Alert = ?ALERT_REC(Level, Description),
decode(Rest, [Alert | Acc], N + 1);
@@ -93,7 +97,7 @@ decode(<<?BYTE(Level), ?BYTE(Description), _Rest/binary>>, Acc, _) when Level ==
Alert = ?ALERT_REC(Level, Description),
lists:reverse([Alert | Acc]); %% No need to decode rest fatal alert will end the connection
decode(<<?BYTE(_Level), _/binary>>, _, _) ->
- ?ALERT_REC(?FATAL, ?ILLEGAL_PARAMETER);
+ ?ALERT_REC(?FATAL, ?ILLEGAL_PARAMETER, failed_to_decode_remote_alert);
decode(<<>>, Acc, _) ->
lists:reverse(Acc, []).
diff --git a/lib/ssl/src/ssl_alert.hrl b/lib/ssl/src/ssl_alert.hrl
index 8c4bd08d31..38facb964f 100644
--- a/lib/ssl/src/ssl_alert.hrl
+++ b/lib/ssl/src/ssl_alert.hrl
@@ -109,6 +109,7 @@
-define(NO_APPLICATION_PROTOCOL, 120).
-define(ALERT_REC(Level,Desc), #alert{level=Level,description=Desc,where={?FILE, ?LINE}}).
+-define(ALERT_REC(Level,Desc,Reason), #alert{level=Level,description=Desc,where={?FILE, ?LINE},reason=Reason}).
-define(MAX_ALERTS, 10).
@@ -116,6 +117,7 @@
-record(alert, {
level,
description,
- where = {?FILE, ?LINE}
+ where = {?FILE, ?LINE},
+ reason
}).
-endif. % -ifdef(ssl_alert).
diff --git a/lib/ssl/src/ssl_certificate.erl b/lib/ssl/src/ssl_certificate.erl
index 3ec3f50e05..f359655d85 100644
--- a/lib/ssl/src/ssl_certificate.erl
+++ b/lib/ssl/src/ssl_certificate.erl
@@ -64,7 +64,7 @@ trusted_cert_and_path(CertChain, CertDbHandle, CertDbRef, PartialChainHandler) -
{ok, IssuerId} = public_key:pkix_issuer_id(OtpCert, self),
{self, IssuerId};
false ->
- other_issuer(OtpCert, BinCert, CertDbHandle)
+ other_issuer(OtpCert, BinCert, CertDbHandle, CertDbRef)
end,
case SignedAndIssuerID of
@@ -200,7 +200,7 @@ certificate_chain(OtpCert, BinCert, CertDbHandle, CertsDbRef, Chain) ->
{_, true = SelfSigned} ->
certificate_chain(CertDbHandle, CertsDbRef, Chain, ignore, ignore, SelfSigned);
{{error, issuer_not_found}, SelfSigned} ->
- case find_issuer(OtpCert, BinCert, CertDbHandle) of
+ case find_issuer(OtpCert, BinCert, CertDbHandle, CertsDbRef) of
{ok, {SerialNr, Issuer}} ->
certificate_chain(CertDbHandle, CertsDbRef, Chain,
SerialNr, Issuer, SelfSigned);
@@ -232,7 +232,7 @@ certificate_chain(CertDbHandle, CertsDbRef, Chain, SerialNr, Issuer, _SelfSigned
{ok, undefined, lists:reverse(Chain)}
end.
-find_issuer(OtpCert, BinCert, CertDbHandle) ->
+find_issuer(OtpCert, BinCert, CertDbHandle, CertsDbRef) ->
IsIssuerFun =
fun({_Key, {_Der, #'OTPCertificate'{} = ErlCertCandidate}}, Acc) ->
case public_key:pkix_is_issuer(OtpCert, ErlCertCandidate) of
@@ -250,12 +250,24 @@ find_issuer(OtpCert, BinCert, CertDbHandle) ->
Acc
end,
- try ssl_pkix_db:foldl(IsIssuerFun, issuer_not_found, CertDbHandle) of
- issuer_not_found ->
- {error, issuer_not_found}
- catch
- {ok, _IssuerId} = Return ->
- Return
+ if is_reference(CertsDbRef) -> % actual DB exists
+ try ssl_pkix_db:foldl(IsIssuerFun, issuer_not_found, CertDbHandle) of
+ issuer_not_found ->
+ {error, issuer_not_found}
+ catch
+ {ok, _IssuerId} = Return ->
+ Return
+ end;
+ is_tuple(CertsDbRef), element(1,CertsDbRef) =:= extracted -> % cache bypass byproduct
+ {extracted, CertsData} = CertsDbRef,
+ DB = [Entry || {decoded, Entry} <- CertsData],
+ try lists:foldl(IsIssuerFun, issuer_not_found, DB) of
+ issuer_not_found ->
+ {error, issuer_not_found}
+ catch
+ {ok, _IssuerId} = Return ->
+ Return
+ end
end.
is_valid_extkey_usage(KeyUse, client) ->
@@ -281,12 +293,12 @@ public_key(#'OTPSubjectPublicKeyInfo'{algorithm = #'PublicKeyAlgorithm'{algorith
subjectPublicKey = Key}) ->
{Key, Params}.
-other_issuer(OtpCert, BinCert, CertDbHandle) ->
+other_issuer(OtpCert, BinCert, CertDbHandle, CertDbRef) ->
case public_key:pkix_issuer_id(OtpCert, other) of
{ok, IssuerId} ->
{other, IssuerId};
{error, issuer_not_found} ->
- case find_issuer(OtpCert, BinCert, CertDbHandle) of
+ case find_issuer(OtpCert, BinCert, CertDbHandle, CertDbRef) of
{ok, IssuerId} ->
{other, IssuerId};
Other ->
diff --git a/lib/ssl/src/ssl_cipher.erl b/lib/ssl/src/ssl_cipher.erl
index dc0a0c2cc4..e935c033c7 100644
--- a/lib/ssl/src/ssl_cipher.erl
+++ b/lib/ssl/src/ssl_cipher.erl
@@ -214,7 +214,7 @@ decipher(?RC4, HashSz, CipherState = #cipher_state{state = State0}, Fragment, _,
%% alerts may permit certain attacks against CBC mode as used in
%% TLS [CBCATT]. It is preferable to uniformly use the
%% bad_record_mac alert to hide the specific type of the error."
- ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC)
+ ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC, decryption_failed)
end;
decipher(?DES, HashSz, CipherState, Fragment, Version, PaddingCheck) ->
@@ -272,7 +272,7 @@ block_decipher(Fun, #cipher_state{key=Key, iv=IV} = CipherState0,
%% alerts may permit certain attacks against CBC mode as used in
%% TLS [CBCATT]. It is preferable to uniformly use the
%% bad_record_mac alert to hide the specific type of the error."
- ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC)
+ ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC, decryption_failed)
end.
aead_ciphertext_to_state(chacha20_poly1305, SeqNo, _IV, AAD0, Fragment, _Version) ->
@@ -296,11 +296,11 @@ aead_decipher(Type, #cipher_state{key = Key, iv = IV} = CipherState,
Content when is_binary(Content) ->
{Content, CipherState};
_ ->
- ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC)
+ ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC, decryption_failed)
end
catch
_:_ ->
- ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC)
+ ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC, decryption_failed)
end.
%%--------------------------------------------------------------------
diff --git a/lib/ssl/src/ssl_connection.erl b/lib/ssl/src/ssl_connection.erl
index 26c371a8ea..304d1706f5 100644
--- a/lib/ssl/src/ssl_connection.erl
+++ b/lib/ssl/src/ssl_connection.erl
@@ -58,6 +58,13 @@
-export([handle_info/3, handle_call/5, handle_session/7, ssl_config/3,
prepare_connection/2, hibernate_after/3]).
+%% Alert and close handling
+-export([handle_own_alert/4,handle_alert/3,
+ handle_normal_shutdown/3
+ ]).
+
+%% Data handling
+-export([write_application_data/3, read_application_data/2]).
%%====================================================================
%% Internal application API
@@ -264,7 +271,7 @@ prf(ConnectionPid, Secret, Label, Seed, WantedLength) ->
%%--------------------------------------------------------------------
-spec handle_session(#server_hello{}, ssl_record:ssl_version(),
- binary(), #connection_states{}, _,_, #state{}) ->
+ binary(), ssl_record:connection_states(), _,_, #state{}) ->
gen_statem:state_function_result().
%%--------------------------------------------------------------------
handle_session(#server_hello{cipher_suite = CipherSuite,
@@ -272,19 +279,21 @@ handle_session(#server_hello{cipher_suite = CipherSuite,
Version, NewId, ConnectionStates, ProtoExt, Protocol0,
#state{session = #session{session_id = OldId},
negotiated_version = ReqVersion,
- negotiated_protocol = CurrentProtocol} = State0) ->
+ negotiated_protocol = CurrentProtocol} = State0) ->
{KeyAlgorithm, _, _, _} =
ssl_cipher:suite_definition(CipherSuite),
PremasterSecret = make_premaster_secret(ReqVersion, KeyAlgorithm),
- {ExpectNPN, Protocol} = case Protocol0 of
- undefined -> {false, CurrentProtocol};
- _ -> {ProtoExt =:= npn, Protocol0}
- end,
+ {ExpectNPN, Protocol} = case Protocol0 of
+ undefined ->
+ {false, CurrentProtocol};
+ _ ->
+ {ProtoExt =:= npn, Protocol0}
+ end,
State = State0#state{key_algorithm = KeyAlgorithm,
- negotiated_version = Version,
+ negotiated_version = Version,
connection_states = ConnectionStates,
premaster_secret = PremasterSecret,
expecting_next_protocol_negotiation = ExpectNPN,
@@ -382,7 +391,7 @@ abbreviated(internal, #finished{verify_data = Data} = Finished,
session = #session{master_secret = MasterSecret},
connection_states = ConnectionStates0} =
State0, Connection) ->
- case ssl_handshake:verify_connection(Version, Finished, client,
+ case ssl_handshake:verify_connection(ssl:tls_version(Version), Finished, client,
get_current_prf(ConnectionStates0, write),
MasterSecret, Handshake) of
verified ->
@@ -392,7 +401,7 @@ abbreviated(internal, #finished{verify_data = Data} = Finished,
expecting_finished = false}, Connection),
Connection:next_event(connection, Record, State);
#alert{} = Alert ->
- Connection:handle_own_alert(Alert, Version, abbreviated, State0)
+ handle_own_alert(Alert, Version, abbreviated, State0)
end;
abbreviated(internal, #finished{verify_data = Data} = Finished,
@@ -400,7 +409,7 @@ abbreviated(internal, #finished{verify_data = Data} = Finished,
session = #session{master_secret = MasterSecret},
negotiated_version = Version,
connection_states = ConnectionStates0} = State0, Connection) ->
- case ssl_handshake:verify_connection(Version, Finished, server,
+ case ssl_handshake:verify_connection(ssl:tls_version(Version), Finished, server,
get_pending_prf(ConnectionStates0, write),
MasterSecret, Handshake0) of
verified ->
@@ -412,7 +421,7 @@ abbreviated(internal, #finished{verify_data = Data} = Finished,
{Record, State} = prepare_connection(State1#state{expecting_finished = false}, Connection),
Connection:next_event(connection, Record, State);
#alert{} = Alert ->
- Connection:handle_own_alert(Alert, Version, abbreviated, State0)
+ handle_own_alert(Alert, Version, abbreviated, State0)
end;
%% only allowed to send next_protocol message after change cipher spec
@@ -452,9 +461,9 @@ certify(internal, #certificate{asn1_certificates = []},
#state{role = server, negotiated_version = Version,
ssl_options = #ssl_options{verify = verify_peer,
fail_if_no_peer_cert = true}} =
- State, Connection) ->
+ State, _Connection) ->
Alert = ?ALERT_REC(?FATAL,?HANDSHAKE_FAILURE),
- Connection:handle_own_alert(Alert, Version, certify, State);
+ handle_own_alert(Alert, Version, certify, State);
certify(internal, #certificate{asn1_certificates = []},
#state{role = server,
@@ -465,6 +474,14 @@ certify(internal, #certificate{asn1_certificates = []},
Connection:next_record(State0#state{client_certificate_requested = false}),
Connection:next_event(certify, Record, State);
+certify(internal, #certificate{},
+ #state{role = server,
+ negotiated_version = Version,
+ ssl_options = #ssl_options{verify = verify_none}} =
+ State, _Connection) ->
+ Alert = ?ALERT_REC(?FATAL,?UNEXPECTED_MESSAGE, unrequested_certificate),
+ handle_own_alert(Alert, Version, certify, State);
+
certify(internal, #certificate{} = Cert,
#state{negotiated_version = Version,
role = Role,
@@ -484,7 +501,7 @@ certify(internal, #certificate{} = Cert,
handle_peer_cert(Role, PeerCert, PublicKeyInfo,
State#state{client_certificate_requested = false}, Connection);
#alert{} = Alert ->
- Connection:handle_own_alert(Alert, Version, certify, State)
+ handle_own_alert(Alert, Version, certify, State)
end;
certify(internal, #server_key_exchange{exchange_keys = Keys},
@@ -498,10 +515,10 @@ certify(internal, #server_key_exchange{exchange_keys = Keys},
Alg == psk; Alg == dhe_psk; Alg == rsa_psk;
Alg == srp_dss; Alg == srp_rsa; Alg == srp_anon ->
- Params = ssl_handshake:decode_server_key(Keys, Alg, Version),
+ Params = ssl_handshake:decode_server_key(Keys, Alg, ssl:tls_version(Version)),
%% Use negotiated value if TLS-1.2 otherwhise return default
- HashSign = negotiated_hashsign(Params#server_key_params.hashsign, Alg, PubKeyInfo, Version),
+ HashSign = negotiated_hashsign(Params#server_key_params.hashsign, Alg, PubKeyInfo, ssl:tls_version(Version)),
case is_anonymous(Alg) of
true ->
@@ -509,26 +526,25 @@ certify(internal, #server_key_exchange{exchange_keys = Keys},
State#state{hashsign_algorithm = HashSign}, Connection);
false ->
case ssl_handshake:verify_server_key(Params, HashSign,
- ConnectionStates, Version, PubKeyInfo) of
+ ConnectionStates, ssl:tls_version(Version), PubKeyInfo) of
true ->
calculate_secret(Params#server_key_params.params,
State#state{hashsign_algorithm = HashSign},
Connection);
false ->
- Connection:handle_own_alert(?ALERT_REC(?FATAL, ?DECRYPT_ERROR),
+ handle_own_alert(?ALERT_REC(?FATAL, ?DECRYPT_ERROR),
Version, certify, State)
end
end;
-certify(internal, #certificate_request{hashsign_algorithms = HashSigns},
+certify(internal, #certificate_request{} = CertRequest,
#state{session = #session{own_certificate = Cert},
- key_algorithm = KeyExAlg,
+ role = client,
ssl_options = #ssl_options{signature_algs = SupportedHashSigns},
negotiated_version = Version} = State0, Connection) ->
-
- case ssl_handshake:select_hashsign(HashSigns, Cert, KeyExAlg, SupportedHashSigns, Version) of
+ case ssl_handshake:select_hashsign(CertRequest, Cert, SupportedHashSigns, ssl:tls_version(Version)) of
#alert {} = Alert ->
- Connection:handle_own_alert(Alert, Version, certify, State0);
+ handle_own_alert(Alert, Version, certify, State0);
NegotiatedHashSign ->
{Record, State} = Connection:next_record(State0#state{client_certificate_requested = true}),
Connection:next_event(certify, Record,
@@ -547,7 +563,7 @@ certify(internal, #server_hello_done{},
when Alg == psk ->
case ssl_handshake:premaster_secret({Alg, PSKIdentity}, PSKLookup) of
#alert{} = Alert ->
- Connection:handle_own_alert(Alert, Version, certify, State0);
+ handle_own_alert(Alert, Version, certify, State0);
PremasterSecret ->
State = master_secret(PremasterSecret,
State0#state{premaster_secret = PremasterSecret}),
@@ -568,7 +584,7 @@ certify(internal, #server_hello_done{},
case ssl_handshake:premaster_secret({Alg, PSKIdentity}, PSKLookup,
RSAPremasterSecret) of
#alert{} = Alert ->
- Connection:handle_own_alert(Alert, Version, certify, State0);
+ handle_own_alert(Alert, Version, certify, State0);
PremasterSecret ->
State = master_secret(PremasterSecret,
State0#state{premaster_secret = RSAPremasterSecret}),
@@ -582,13 +598,13 @@ certify(internal, #server_hello_done{},
negotiated_version = Version,
premaster_secret = undefined,
role = client} = State0, Connection) ->
- case ssl_handshake:master_secret(record_cb(Connection), Version, Session,
+ case ssl_handshake:master_secret(ssl:tls_version(Version), Session,
ConnectionStates0, client) of
{MasterSecret, ConnectionStates} ->
State = State0#state{connection_states = ConnectionStates},
client_certify_and_key_exchange(State, Connection);
#alert{} = Alert ->
- Connection:handle_own_alert(Alert, Version, certify, State0)
+ handle_own_alert(Alert, Version, certify, State0)
end;
%% Master secret is calculated from premaster_secret
@@ -598,7 +614,7 @@ certify(internal, #server_hello_done{},
negotiated_version = Version,
premaster_secret = PremasterSecret,
role = client} = State0, Connection) ->
- case ssl_handshake:master_secret(record_cb(Connection), Version, PremasterSecret,
+ case ssl_handshake:master_secret(ssl:tls_version(Version), PremasterSecret,
ConnectionStates0, client) of
{MasterSecret, ConnectionStates} ->
Session = Session0#session{master_secret = MasterSecret},
@@ -606,7 +622,7 @@ certify(internal, #server_hello_done{},
session = Session},
client_certify_and_key_exchange(State, Connection);
#alert{} = Alert ->
- Connection:handle_own_alert(Alert, Version, certify, State0)
+ handle_own_alert(Alert, Version, certify, State0)
end;
certify(internal = Type, #client_key_exchange{} = Msg,
@@ -620,11 +636,11 @@ certify(internal = Type, #client_key_exchange{} = Msg,
certify(internal, #client_key_exchange{exchange_keys = Keys},
State = #state{key_algorithm = KeyAlg, negotiated_version = Version}, Connection) ->
try
- certify_client_key_exchange(ssl_handshake:decode_client_key(Keys, KeyAlg, Version),
+ certify_client_key_exchange(ssl_handshake:decode_client_key(Keys, KeyAlg, ssl:tls_version(Version)),
State, Connection)
catch
#alert{} = Alert ->
- Connection:handle_own_alert(Alert, Version, certify, State)
+ handle_own_alert(Alert, Version, certify, State)
end;
certify(Type, Msg, State, Connection) ->
@@ -655,21 +671,21 @@ cipher(internal, #certificate_verify{signature = Signature,
%% Use negotiated value if TLS-1.2 otherwhise return default
HashSign = negotiated_hashsign(CertHashSign, KexAlg, PublicKeyInfo, Version),
case ssl_handshake:certificate_verify(Signature, PublicKeyInfo,
- Version, HashSign, MasterSecret, Handshake) of
+ ssl:tls_version(Version), HashSign, MasterSecret, Handshake) of
valid ->
{Record, State} = Connection:next_record(State0),
Connection:next_event(cipher, Record,
State#state{cert_hashsign_algorithm = HashSign});
#alert{} = Alert ->
- Connection:handle_own_alert(Alert, Version, cipher, State0)
+ handle_own_alert(Alert, Version, cipher, State0)
end;
%% client must send a next protocol message if we are expecting it
cipher(internal, #finished{},
#state{role = server, expecting_next_protocol_negotiation = true,
negotiated_protocol = undefined, negotiated_version = Version} = State0,
- Connection) ->
- Connection:handle_own_alert(?ALERT_REC(?FATAL,?UNEXPECTED_MESSAGE), Version, cipher, State0);
+ _Connection) ->
+ handle_own_alert(?ALERT_REC(?FATAL,?UNEXPECTED_MESSAGE), Version, cipher, State0);
cipher(internal, #finished{verify_data = Data} = Finished,
#state{negotiated_version = Version,
@@ -681,7 +697,7 @@ cipher(internal, #finished{verify_data = Data} = Finished,
= Session0,
connection_states = ConnectionStates0,
tls_handshake_history = Handshake0} = State, Connection) ->
- case ssl_handshake:verify_connection(Version, Finished,
+ case ssl_handshake:verify_connection(ssl:tls_version(Version), Finished,
opposite_role(Role),
get_current_prf(ConnectionStates0, read),
MasterSecret, Handshake0) of
@@ -690,7 +706,7 @@ cipher(internal, #finished{verify_data = Data} = Finished,
cipher_role(Role, Data, Session,
State#state{expecting_finished = false}, Connection);
#alert{} = Alert ->
- Connection:handle_own_alert(Alert, Version, cipher, State)
+ handle_own_alert(Alert, Version, cipher, State)
end;
%% only allowed to send next_protocol message after change cipher spec
@@ -723,7 +739,7 @@ connection({call, From}, {application_data, Data},
%% parallize send and receive decoding and not block the receiver
%% if sending is overloading the socket.
try
- Connection:write_application_data(Data, From, State)
+ write_application_data(Data, From, State)
catch throw:Error ->
hibernate_after(connection, State, [{reply, From, Error}])
end;
@@ -786,31 +802,45 @@ downgrade(Type, Event, State, Connection) ->
%% Event handling functions called by state functions to handle
%% common or unexpected events for the state.
%%--------------------------------------------------------------------
-handle_common_event(internal, {tls_record, TLSRecord}, StateName, State, Connection) ->
- Connection:handle_common_event(internal, TLSRecord, StateName, State);
-handle_common_event(internal, #hello_request{}, StateName, #state{role = client} = State0, Connection)
- when StateName =:= connection ->
- {Record, State} = Connection:next_record(State0),
- Connection:next_event(StateName, Record, State);
+handle_common_event(internal, {handshake, {#hello_request{} = Handshake, _}}, connection = StateName,
+ #state{role = client} = State, _) ->
+ %% Should not be included in handshake history
+ {next_state, StateName, State#state{renegotiation = {true, peer}}, [{next_event, internal, Handshake}]};
+handle_common_event(internal, {handshake, {#hello_request{}, _}}, StateName, #state{role = client}, _)
+ when StateName =/= connection ->
+ {keep_state_and_data};
+handle_common_event(internal, {handshake, {Handshake, Raw}}, StateName,
+ #state{tls_handshake_history = Hs0,
+ ssl_options = #ssl_options{v2_hello_compatible = V2HComp}} = State0,
+ Connection) ->
+
+ PossibleSNI = Connection:select_sni_extension(Handshake),
+ %% This function handles client SNI hello extension when Handshake is
+ %% a client_hello, which needs to be determined by the connection callback.
+ %% In other cases this is a noop
+ State = handle_sni_extension(PossibleSNI, State0),
+ HsHist = ssl_handshake:update_handshake_history(Hs0, Raw, V2HComp),
+ {next_state, StateName, State#state{tls_handshake_history = HsHist},
+ [{next_event, internal, Handshake}]};
+handle_common_event(internal, {protocol_record, TLSorDTLSRecord}, StateName, State, Connection) ->
+ Connection:handle_common_event(internal, TLSorDTLSRecord, StateName, State);
handle_common_event(timeout, hibernate, _, _, _) ->
{keep_state_and_data, [hibernate]};
handle_common_event(internal, {application_data, Data}, StateName, State0, Connection) ->
- case Connection:read_application_data(Data, State0) of
+ case read_application_data(Data, State0) of
{stop, Reason, State} ->
{stop, Reason, State};
{Record, State} ->
Connection:next_event(StateName, Record, State)
end;
handle_common_event(internal, #change_cipher_spec{type = <<1>>}, StateName,
- #state{negotiated_version = Version} = State, Connection) ->
- Connection:handle_own_alert(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE), Version,
+ #state{negotiated_version = Version} = State, _) ->
+ handle_own_alert(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE), Version,
StateName, State);
-handle_common_event(internal, _, _, _, _) ->
- {keep_state_and_data, [postpone]};
handle_common_event(_Type, Msg, StateName, #state{negotiated_version = Version} = State,
- Connection) ->
+ _) ->
Alert = ?ALERT_REC(?FATAL,?UNEXPECTED_MESSAGE),
- Connection:handle_own_alert(Alert, Version, {StateName, Msg}, State).
+ handle_own_alert(Alert, Version, {StateName, Msg}, State).
handle_call({application_data, _Data}, _, _, _, _) ->
%% In renegotiation priorities handshake, send data when handshake is finished
@@ -875,56 +905,21 @@ handle_call({get_opts, OptTags}, From, _,
socket_options = SockOpts}, _) ->
OptsReply = get_socket_opts(Transport, Socket, OptTags, SockOpts, []),
{keep_state_and_data, [{reply, From, OptsReply}]};
-handle_call({set_opts, Opts0}, From, connection = StateName0,
+handle_call({set_opts, Opts0}, From, StateName,
#state{socket_options = Opts1,
- protocol_cb = Connection,
socket = Socket,
- transport_cb = Transport,
- user_data_buffer = Buffer} = State0, _) ->
+ transport_cb = Transport} = State0, _) ->
{Reply, Opts} = set_socket_opts(Transport, Socket, Opts0, Opts1, []),
- State1 = State0#state{socket_options = Opts},
- if
- Opts#socket_options.active =:= false ->
- hibernate_after(StateName0, State1, [{reply, From, Reply}]);
- Buffer =:= <<>>, Opts1#socket_options.active =:= false ->
- %% Need data, set active once
- {Record, State2} = Connection:next_record_if_active(State1),
- %% Note: Renogotiation may cause StateName0 =/= StateName
- case Connection:next_event(StateName0, Record, State2) of
- {next_state, StateName, State} ->
- hibernate_after(StateName, State, [{reply, From, Reply}]);
- {next_state, StateName, State, Actions} ->
- hibernate_after(StateName, State, [{reply, From, Reply} | Actions]);
- {stop, Reason, State} ->
- {stop, Reason, State}
- end;
- Buffer =:= <<>> ->
- %% Active once already set
- hibernate_after(StateName0, State1, [{reply, From, Reply}]);
- true ->
- case Connection:read_application_data(<<>>, State1) of
- {stop, Reason, State} ->
- {stop, Reason, State};
- {Record, State2} ->
- %% Note: Renogotiation may cause StateName0 =/= StateName
- case Connection:next_event(StateName0, Record, State2) of
- {next_state, StateName, State} ->
- hibernate_after(StateName, State, [{reply, From, Reply}]);
- {next_state, StateName, State, Actions} ->
- hibernate_after(StateName, State, [{reply, From, Reply} | Actions]);
- {stop, _, _} = Stop ->
- Stop
- end
- end
- end;
+ State = State0#state{socket_options = Opts},
+ handle_active_option(Opts#socket_options.active, StateName, From, Reply, State);
+
handle_call(renegotiate, From, StateName, _, _) when StateName =/= connection ->
{keep_state_and_data, [{reply, From, {error, already_renegotiating}}]};
handle_call({prf, Secret, Label, Seed, WantedLength}, From, _,
#state{connection_states = ConnectionStates,
negotiated_version = Version}, _) ->
- ConnectionState =
+ #{security_parameters := SecParams} =
ssl_record:current_connection_state(ConnectionStates, read),
- SecParams = ConnectionState#connection_state.security_parameters,
#security_parameters{master_secret = MasterSecret,
client_random = ClientRandom,
server_random = ServerRandom,
@@ -939,7 +934,7 @@ handle_call({prf, Secret, Label, Seed, WantedLength}, From, _,
(client_random, Acc) -> [ClientRandom|Acc];
(server_random, Acc) -> [ServerRandom|Acc]
end, [], Seed)),
- ssl_handshake:prf(Version, PRFAlgorithm, SecretToUse, Label, SeedToUse, WantedLength)
+ ssl_handshake:prf(ssl:tls_version(Version), PRFAlgorithm, SecretToUse, Label, SeedToUse, WantedLength)
catch
exit:_ -> {error, badarg};
error:Reason -> {error, Reason}
@@ -950,20 +945,19 @@ handle_call(_,_,_,_,_) ->
handle_info({ErrorTag, Socket, econnaborted}, StateName,
#state{socket = Socket, transport_cb = Transport,
- start_or_recv_from = StartFrom, role = Role,
protocol_cb = Connection,
+ start_or_recv_from = StartFrom, role = Role,
error_tag = ErrorTag,
tracker = Tracker} = State) when StateName =/= connection ->
- Connection:alert_user(Transport, Tracker,Socket,
- StartFrom, ?ALERT_REC(?FATAL, ?CLOSE_NOTIFY), Role),
+ alert_user(Transport, Tracker,Socket,
+ StartFrom, ?ALERT_REC(?FATAL, ?CLOSE_NOTIFY), Role, Connection),
{stop, normal, State};
handle_info({ErrorTag, Socket, Reason}, StateName, #state{socket = Socket,
- protocol_cb = Connection,
error_tag = ErrorTag} = State) ->
Report = io_lib:format("SSL: Socket error: ~p ~n", [Reason]),
error_logger:info_report(Report),
- Connection:handle_normal_shutdown(?ALERT_REC(?FATAL, ?CLOSE_NOTIFY), StateName, State),
+ handle_normal_shutdown(?ALERT_REC(?FATAL, ?CLOSE_NOTIFY), StateName, State),
{stop, normal, State};
handle_info({'DOWN', MonitorRef, _, _, _}, _,
@@ -1063,16 +1057,127 @@ format_status(terminate, [_, StateName, State]) ->
srp_params = ?SECRET_PRINTOUT,
srp_keys = ?SECRET_PRINTOUT,
premaster_secret = ?SECRET_PRINTOUT,
- ssl_options = NewOptions}
+ ssl_options = NewOptions,
+ flight_buffer = ?SECRET_PRINTOUT}
}}]}].
%%--------------------------------------------------------------------
+%%%
+%%--------------------------------------------------------------------
+write_application_data(Data0, From,
+ #state{socket = Socket,
+ negotiated_version = Version,
+ protocol_cb = Connection,
+ transport_cb = Transport,
+ connection_states = ConnectionStates0,
+ socket_options = SockOpts,
+ ssl_options = #ssl_options{renegotiate_at = RenegotiateAt}} = State) ->
+ Data = encode_packet(Data0, SockOpts),
+
+ case time_to_renegotiate(Data, ConnectionStates0, RenegotiateAt) of
+ true ->
+ Connection:renegotiate(State#state{renegotiation = {true, internal}},
+ [{next_event, {call, From}, {application_data, Data0}}]);
+ false ->
+ {Msgs, ConnectionStates} = ssl_record:encode_data(Data, Version, ConnectionStates0),
+ Result = Transport:send(Socket, Msgs),
+ ssl_connection:hibernate_after(connection, State#state{connection_states = ConnectionStates},
+ [{reply, From, Result}])
+ end.
+
+read_application_data(Data, #state{user_application = {_Mon, Pid},
+ socket = Socket,
+ protocol_cb = Connection,
+ transport_cb = Transport,
+ socket_options = SOpts,
+ bytes_to_read = BytesToRead,
+ start_or_recv_from = RecvFrom,
+ timer = Timer,
+ user_data_buffer = Buffer0,
+ tracker = Tracker} = State0) ->
+ Buffer1 = if
+ Buffer0 =:= <<>> -> Data;
+ Data =:= <<>> -> Buffer0;
+ true -> <<Buffer0/binary, Data/binary>>
+ end,
+ case get_data(SOpts, BytesToRead, Buffer1) of
+ {ok, ClientData, Buffer} -> % Send data
+ SocketOpt = deliver_app_data(Transport, Socket, SOpts,
+ ClientData, Pid, RecvFrom, Tracker, Connection),
+ cancel_timer(Timer),
+ State = State0#state{user_data_buffer = Buffer,
+ start_or_recv_from = undefined,
+ timer = undefined,
+ bytes_to_read = undefined,
+ socket_options = SocketOpt
+ },
+ if
+ SocketOpt#socket_options.active =:= false; Buffer =:= <<>> ->
+ %% Passive mode, wait for active once or recv
+ %% Active and empty, get more data
+ Connection:next_record_if_active(State);
+ true -> %% We have more data
+ read_application_data(<<>>, State)
+ end;
+ {more, Buffer} -> % no reply, we need more data
+ Connection:next_record(State0#state{user_data_buffer = Buffer});
+ {passive, Buffer} ->
+ Connection:next_record_if_active(State0#state{user_data_buffer = Buffer});
+ {error,_Reason} -> %% Invalid packet in packet mode
+ deliver_packet_error(Transport, Socket, SOpts, Buffer1, Pid, RecvFrom, Tracker, Connection),
+ {stop, normal, State0}
+ end.
+%%--------------------------------------------------------------------
+%%%
+%%--------------------------------------------------------------------
+handle_alert(#alert{level = ?FATAL} = Alert, StateName,
+ #state{socket = Socket, transport_cb = Transport,
+ protocol_cb = Connection,
+ ssl_options = SslOpts, start_or_recv_from = From, host = Host,
+ port = Port, session = Session, user_application = {_Mon, Pid},
+ role = Role, socket_options = Opts, tracker = Tracker}) ->
+ invalidate_session(Role, Host, Port, Session),
+ log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
+ alert_user(Transport, Tracker, Socket, StateName, Opts, Pid, From, Alert, Role, Connection),
+ {stop, normal};
+
+handle_alert(#alert{level = ?WARNING, description = ?CLOSE_NOTIFY} = Alert,
+ StateName, State) ->
+ handle_normal_shutdown(Alert, StateName, State),
+ {stop, {shutdown, peer_close}};
+
+handle_alert(#alert{level = ?WARNING, description = ?NO_RENEGOTIATION} = Alert, StateName,
+ #state{ssl_options = SslOpts, renegotiation = {true, internal}} = State) ->
+ log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
+ handle_normal_shutdown(Alert, StateName, State),
+ {stop, {shutdown, peer_close}};
+
+handle_alert(#alert{level = ?WARNING, description = ?NO_RENEGOTIATION} = Alert, StateName,
+ #state{ssl_options = SslOpts, renegotiation = {true, From},
+ protocol_cb = Connection} = State0) ->
+ log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
+ gen_statem:reply(From, {error, renegotiation_rejected}),
+ {Record, State} = Connection:next_record(State0),
+ %% Go back to connection!
+ Connection:next_event(connection, Record, State);
+
+%% Gracefully log and ignore all other warning alerts
+handle_alert(#alert{level = ?WARNING} = Alert, StateName,
+ #state{ssl_options = SslOpts, protocol_cb = Connection} = State0) ->
+ log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
+ {Record, State} = Connection:next_record(State0),
+ Connection:next_event(StateName, Record, State).
+
+%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
connection_info(#state{sni_hostname = SNIHostname,
session = #session{cipher_suite = CipherSuite},
- negotiated_version = Version, ssl_options = Opts}) ->
- [{protocol, tls_record:protocol_version(Version)},
+ protocol_cb = Connection,
+ negotiated_version = {_,_} = Version,
+ ssl_options = Opts}) ->
+ RecordCB = record_cb(Connection),
+ [{protocol, RecordCB:protocol_version(Version)},
{cipher_suite, ssl_cipher:erl_suite_definition(CipherSuite)},
{sni_hostname, SNIHostname}] ++ ssl_options_list(Opts).
@@ -1084,7 +1189,7 @@ do_server_hello(Type, #hello_extensions{next_protocol_negotiation = NextProtocol
= State0, Connection) when is_atom(Type) ->
ServerHello =
- ssl_handshake:server_hello(SessId, Version, ConnectionStates0, ServerHelloExt),
+ ssl_handshake:server_hello(SessId, ssl:tls_version(Version), ConnectionStates0, ServerHelloExt),
State = server_hello(ServerHello,
State0#state{expecting_next_protocol_negotiation =
NextProtocols =/= undefined}, Connection),
@@ -1111,14 +1216,14 @@ new_server_hello(#server_hello{cipher_suite = CipherSuite,
Connection:next_event(certify, Record, State)
catch
#alert{} = Alert ->
- Connection:handle_own_alert(Alert, Version, hello, State0)
+ handle_own_alert(Alert, Version, hello, State0)
end.
resumed_server_hello(#state{session = Session,
connection_states = ConnectionStates0,
negotiated_version = Version} = State0, Connection) ->
- case ssl_handshake:master_secret(record_cb(Connection), Version, Session,
+ case ssl_handshake:master_secret(ssl:tls_version(Version), Session,
ConnectionStates0, server) of
{_, ConnectionStates1} ->
State1 = State0#state{connection_states = ConnectionStates1,
@@ -1128,13 +1233,13 @@ resumed_server_hello(#state{session = Session,
{Record, State} = Connection:next_record(State2),
Connection:next_event(abbreviated, Record, State);
#alert{} = Alert ->
- Connection:handle_own_alert(Alert, Version, hello, State0)
+ handle_own_alert(Alert, Version, hello, State0)
end.
server_hello(ServerHello, State0, Connection) ->
CipherSuite = ServerHello#server_hello.cipher_suite,
{KeyAlgorithm, _, _, _} = ssl_cipher:suite_definition(CipherSuite),
- State = Connection:send_handshake(ServerHello, State0),
+ State = Connection:queue_handshake(ServerHello, State0),
State#state{key_algorithm = KeyAlgorithm}.
server_hello_done(State, Connection) ->
@@ -1180,7 +1285,7 @@ certify_client(#state{client_certificate_requested = true, role = client,
session = #session{own_certificate = OwnCert}}
= State, Connection) ->
Certificate = ssl_handshake:certificate(OwnCert, CertDbHandle, CertDbRef, client),
- Connection:send_handshake(Certificate, State);
+ Connection:queue_handshake(Certificate, State);
certify_client(#state{client_certificate_requested = false} = State, _) ->
State.
@@ -1194,9 +1299,9 @@ verify_client_cert(#state{client_certificate_requested = true, role = client,
tls_handshake_history = Handshake0} = State, Connection) ->
case ssl_handshake:client_certificate_verify(OwnCert, MasterSecret,
- Version, HashSign, PrivateKey, Handshake0) of
+ ssl:tls_version(Version), HashSign, PrivateKey, Handshake0) of
#certificate_verify{} = Verified ->
- Connection:send_handshake(Verified, State);
+ Connection:queue_handshake(Verified, State);
ignore ->
State;
#alert{} = Alert ->
@@ -1217,7 +1322,7 @@ client_certify_and_key_exchange(#state{negotiated_version = Version} =
Connection:next_event(cipher, Record, State)
catch
throw:#alert{} = Alert ->
- Connection:handle_own_alert(Alert, Version, certify, State0)
+ handle_own_alert(Alert, Version, certify, State0)
end.
do_client_certify_and_key_exchange(State0, Connection) ->
@@ -1290,7 +1395,7 @@ certify_server(#state{cert_db = CertDbHandle,
session = #session{own_certificate = OwnCert}} = State, Connection) ->
case ssl_handshake:certificate(OwnCert, CertDbHandle, CertDbRef, server) of
Cert = #certificate{} ->
- Connection:send_handshake(Cert, State);
+ Connection:queue_handshake(Cert, State);
Alert = #alert{} ->
throw(Alert)
end.
@@ -1308,16 +1413,15 @@ key_exchange(#state{role = server, key_algorithm = Algo,
Algo == dhe_rsa;
Algo == dh_anon ->
DHKeys = public_key:generate_key(Params),
- ConnectionState =
+ #{security_parameters := SecParams} =
ssl_record:pending_connection_state(ConnectionStates0, read),
- SecParams = ConnectionState#connection_state.security_parameters,
#security_parameters{client_random = ClientRandom,
server_random = ServerRandom} = SecParams,
- Msg = ssl_handshake:key_exchange(server, Version, {dh, DHKeys, Params,
+ Msg = ssl_handshake:key_exchange(server, ssl:tls_version(Version), {dh, DHKeys, Params,
HashSignAlgo, ClientRandom,
ServerRandom,
PrivateKey}),
- State = Connection:send_handshake(Msg, State0),
+ State = Connection:queue_handshake(Msg, State0),
State#state{diffie_hellman_keys = DHKeys};
key_exchange(#state{role = server, private_key = Key, key_algorithm = Algo} = State, _)
@@ -1333,16 +1437,16 @@ key_exchange(#state{role = server, key_algorithm = Algo,
Algo == ecdh_anon ->
ECDHKeys = public_key:generate_key(select_curve(State0)),
- ConnectionState =
+ #{security_parameters := SecParams} =
ssl_record:pending_connection_state(ConnectionStates0, read),
- SecParams = ConnectionState#connection_state.security_parameters,
#security_parameters{client_random = ClientRandom,
server_random = ServerRandom} = SecParams,
- Msg = ssl_handshake:key_exchange(server, Version, {ecdh, ECDHKeys,
- HashSignAlgo, ClientRandom,
- ServerRandom,
- PrivateKey}),
- State = Connection:send_handshake(Msg, State0),
+ Msg = ssl_handshake:key_exchange(server, ssl:tls_version(Version),
+ {ecdh, ECDHKeys,
+ HashSignAlgo, ClientRandom,
+ ServerRandom,
+ PrivateKey}),
+ State = Connection:queue_handshake(Msg, State0),
State#state{diffie_hellman_keys = ECDHKeys};
key_exchange(#state{role = server, key_algorithm = psk,
@@ -1355,16 +1459,16 @@ key_exchange(#state{role = server, key_algorithm = psk,
connection_states = ConnectionStates0,
negotiated_version = Version
} = State0, Connection) ->
- ConnectionState =
+ #{security_parameters := SecParams} =
ssl_record:pending_connection_state(ConnectionStates0, read),
- SecParams = ConnectionState#connection_state.security_parameters,
#security_parameters{client_random = ClientRandom,
server_random = ServerRandom} = SecParams,
- Msg = ssl_handshake:key_exchange(server, Version, {psk, PskIdentityHint,
- HashSignAlgo, ClientRandom,
- ServerRandom,
+ Msg = ssl_handshake:key_exchange(server, ssl:tls_version(Version),
+ {psk, PskIdentityHint,
+ HashSignAlgo, ClientRandom,
+ ServerRandom,
PrivateKey}),
- Connection:send_handshake(Msg, State0);
+ Connection:queue_handshake(Msg, State0);
key_exchange(#state{role = server, key_algorithm = dhe_psk,
ssl_options = #ssl_options{psk_identity = PskIdentityHint},
@@ -1375,17 +1479,17 @@ key_exchange(#state{role = server, key_algorithm = dhe_psk,
negotiated_version = Version
} = State0, Connection) ->
DHKeys = public_key:generate_key(Params),
- ConnectionState =
+ #{security_parameters := SecParams} =
ssl_record:pending_connection_state(ConnectionStates0, read),
- SecParams = ConnectionState#connection_state.security_parameters,
#security_parameters{client_random = ClientRandom,
server_random = ServerRandom} = SecParams,
- Msg = ssl_handshake:key_exchange(server, Version, {dhe_psk,
- PskIdentityHint, DHKeys, Params,
- HashSignAlgo, ClientRandom,
- ServerRandom,
- PrivateKey}),
- State = Connection:send_handshake(Msg, State0),
+ Msg = ssl_handshake:key_exchange(server, ssl:tls_version(Version),
+ {dhe_psk,
+ PskIdentityHint, DHKeys, Params,
+ HashSignAlgo, ClientRandom,
+ ServerRandom,
+ PrivateKey}),
+ State = Connection:queue_handshake(Msg, State0),
State#state{diffie_hellman_keys = DHKeys};
key_exchange(#state{role = server, key_algorithm = rsa_psk,
@@ -1398,16 +1502,16 @@ key_exchange(#state{role = server, key_algorithm = rsa_psk,
connection_states = ConnectionStates0,
negotiated_version = Version
} = State0, Connection) ->
- ConnectionState =
+ #{security_parameters := SecParams} =
ssl_record:pending_connection_state(ConnectionStates0, read),
- SecParams = ConnectionState#connection_state.security_parameters,
#security_parameters{client_random = ClientRandom,
server_random = ServerRandom} = SecParams,
- Msg = ssl_handshake:key_exchange(server, Version, {psk, PskIdentityHint,
- HashSignAlgo, ClientRandom,
- ServerRandom,
- PrivateKey}),
- Connection:send_handshake(Msg, State0);
+ Msg = ssl_handshake:key_exchange(server, ssl:tls_version(Version),
+ {psk, PskIdentityHint,
+ HashSignAlgo, ClientRandom,
+ ServerRandom,
+ PrivateKey}),
+ Connection:queue_handshake(Msg, State0);
key_exchange(#state{role = server, key_algorithm = Algo,
ssl_options = #ssl_options{user_lookup_fun = LookupFun},
@@ -1427,16 +1531,16 @@ key_exchange(#state{role = server, key_algorithm = Algo,
Keys0 = {_,_} ->
Keys0
end,
- ConnectionState =
+ #{security_parameters := SecParams} =
ssl_record:pending_connection_state(ConnectionStates0, read),
- SecParams = ConnectionState#connection_state.security_parameters,
#security_parameters{client_random = ClientRandom,
server_random = ServerRandom} = SecParams,
- Msg = ssl_handshake:key_exchange(server, Version, {srp, Keys, SrpParams,
- HashSignAlgo, ClientRandom,
- ServerRandom,
- PrivateKey}),
- State = Connection:send_handshake(Msg, State0),
+ Msg = ssl_handshake:key_exchange(server, ssl:tls_version(Version),
+ {srp, Keys, SrpParams,
+ HashSignAlgo, ClientRandom,
+ ServerRandom,
+ PrivateKey}),
+ State = Connection:queue_handshake(Msg, State0),
State#state{srp_params = SrpParams,
srp_keys = Keys};
@@ -1445,8 +1549,8 @@ key_exchange(#state{role = client,
public_key_info = PublicKeyInfo,
negotiated_version = Version,
premaster_secret = PremasterSecret} = State0, Connection) ->
- Msg = rsa_key_exchange(Version, PremasterSecret, PublicKeyInfo),
- Connection:send_handshake(Msg, State0);
+ Msg = rsa_key_exchange(ssl:tls_version(Version), PremasterSecret, PublicKeyInfo),
+ Connection:queue_handshake(Msg, State0);
key_exchange(#state{role = client,
key_algorithm = Algorithm,
@@ -1456,8 +1560,8 @@ key_exchange(#state{role = client,
when Algorithm == dhe_dss;
Algorithm == dhe_rsa;
Algorithm == dh_anon ->
- Msg = ssl_handshake:key_exchange(client, Version, {dh, DhPubKey}),
- Connection:send_handshake(Msg, State0);
+ Msg = ssl_handshake:key_exchange(client, ssl:tls_version(Version), {dh, DhPubKey}),
+ Connection:queue_handshake(Msg, State0);
key_exchange(#state{role = client,
key_algorithm = Algorithm,
@@ -1466,26 +1570,26 @@ key_exchange(#state{role = client,
when Algorithm == ecdhe_ecdsa; Algorithm == ecdhe_rsa;
Algorithm == ecdh_ecdsa; Algorithm == ecdh_rsa;
Algorithm == ecdh_anon ->
- Msg = ssl_handshake:key_exchange(client, Version, {ecdh, Keys}),
- Connection:send_handshake(Msg, State0);
+ Msg = ssl_handshake:key_exchange(client, ssl:tls_version(Version), {ecdh, Keys}),
+ Connection:queue_handshake(Msg, State0);
key_exchange(#state{role = client,
ssl_options = SslOpts,
key_algorithm = psk,
negotiated_version = Version} = State0, Connection) ->
- Msg = ssl_handshake:key_exchange(client, Version,
+ Msg = ssl_handshake:key_exchange(client, ssl:tls_version(Version),
{psk, SslOpts#ssl_options.psk_identity}),
- Connection:send_handshake(Msg, State0);
+ Connection:queue_handshake(Msg, State0);
key_exchange(#state{role = client,
ssl_options = SslOpts,
key_algorithm = dhe_psk,
negotiated_version = Version,
diffie_hellman_keys = {DhPubKey, _}} = State0, Connection) ->
- Msg = ssl_handshake:key_exchange(client, Version,
+ Msg = ssl_handshake:key_exchange(client, ssl:tls_version(Version),
{dhe_psk,
SslOpts#ssl_options.psk_identity, DhPubKey}),
- Connection:send_handshake(Msg, State0);
+ Connection:queue_handshake(Msg, State0);
key_exchange(#state{role = client,
ssl_options = SslOpts,
key_algorithm = rsa_psk,
@@ -1493,9 +1597,9 @@ key_exchange(#state{role = client,
negotiated_version = Version,
premaster_secret = PremasterSecret}
= State0, Connection) ->
- Msg = rsa_psk_key_exchange(Version, SslOpts#ssl_options.psk_identity,
+ Msg = rsa_psk_key_exchange(ssl:tls_version(Version), SslOpts#ssl_options.psk_identity,
PremasterSecret, PublicKeyInfo),
- Connection:send_handshake(Msg, State0);
+ Connection:queue_handshake(Msg, State0);
key_exchange(#state{role = client,
key_algorithm = Algorithm,
@@ -1505,8 +1609,8 @@ key_exchange(#state{role = client,
when Algorithm == srp_dss;
Algorithm == srp_rsa;
Algorithm == srp_anon ->
- Msg = ssl_handshake:key_exchange(client, Version, {srp, ClientPubKey}),
- Connection:send_handshake(Msg, State0).
+ Msg = ssl_handshake:key_exchange(client, ssl:tls_version(Version), {srp, ClientPubKey}),
+ Connection:queue_handshake(Msg, State0).
rsa_key_exchange(Version, PremasterSecret, PublicKeyInfo = {Algorithm, _, _})
when Algorithm == ?rsaEncryption;
@@ -1518,11 +1622,11 @@ rsa_key_exchange(Version, PremasterSecret, PublicKeyInfo = {Algorithm, _, _})
Algorithm == ?sha384WithRSAEncryption;
Algorithm == ?sha512WithRSAEncryption
->
- ssl_handshake:key_exchange(client, Version,
+ ssl_handshake:key_exchange(client, ssl:tls_version(Version),
{premaster_secret, PremasterSecret,
PublicKeyInfo});
rsa_key_exchange(_, _, _) ->
- throw (?ALERT_REC(?FATAL,?HANDSHAKE_FAILURE)).
+ throw (?ALERT_REC(?FATAL,?HANDSHAKE_FAILURE, pub_key_is_not_rsa)).
rsa_psk_key_exchange(Version, PskIdentity, PremasterSecret,
PublicKeyInfo = {Algorithm, _, _})
@@ -1535,11 +1639,11 @@ rsa_psk_key_exchange(Version, PskIdentity, PremasterSecret,
Algorithm == ?sha384WithRSAEncryption;
Algorithm == ?sha512WithRSAEncryption
->
- ssl_handshake:key_exchange(client, Version,
+ ssl_handshake:key_exchange(client, ssl:tls_version(Version),
{psk_premaster_secret, PskIdentity, PremasterSecret,
PublicKeyInfo});
rsa_psk_key_exchange(_, _, _, _) ->
- throw (?ALERT_REC(?FATAL,?HANDSHAKE_FAILURE)).
+ throw (?ALERT_REC(?FATAL,?HANDSHAKE_FAILURE, pub_key_is_not_rsa)).
request_client_cert(#state{ssl_options = #ssl_options{verify = verify_peer,
signature_algs = SupportedHashSigns},
@@ -1547,13 +1651,15 @@ request_client_cert(#state{ssl_options = #ssl_options{verify = verify_peer,
cert_db = CertDbHandle,
cert_db_ref = CertDbRef,
negotiated_version = Version} = State0, Connection) ->
- #connection_state{security_parameters =
- #security_parameters{cipher_suite = CipherSuite}} =
+ #{security_parameters :=
+ #security_parameters{cipher_suite = CipherSuite}} =
ssl_record:pending_connection_state(ConnectionStates0, read),
- HashSigns = ssl_handshake:available_signature_algs(SupportedHashSigns, Version, [Version]),
+ TLSVersion = ssl:tls_version(Version),
+ HashSigns = ssl_handshake:available_signature_algs(SupportedHashSigns,
+ TLSVersion, [TLSVersion]),
Msg = ssl_handshake:certificate_request(CipherSuite, CertDbHandle, CertDbRef,
- HashSigns, Version),
- State = Connection:send_handshake(Msg, State0),
+ HashSigns, TLSVersion),
+ State = Connection:queue_handshake(Msg, State0),
State#state{client_certificate_requested = true};
request_client_cert(#state{ssl_options = #ssl_options{verify = verify_none}} =
@@ -1565,7 +1671,7 @@ calculate_master_secret(PremasterSecret,
connection_states = ConnectionStates0,
session = Session0} = State0, Connection,
_Current, Next) ->
- case ssl_handshake:master_secret(record_cb(Connection), Version, PremasterSecret,
+ case ssl_handshake:master_secret(ssl:tls_version(Version), PremasterSecret,
ConnectionStates0, server) of
{MasterSecret, ConnectionStates} ->
Session = Session0#session{master_secret = MasterSecret},
@@ -1574,7 +1680,7 @@ calculate_master_secret(PremasterSecret,
{Record, State} = Connection:next_record(State1),
Connection:next_event(Next, Record, State);
#alert{} = Alert ->
- Connection:handle_own_alert(Alert, Version, certify, State0)
+ handle_own_alert(Alert, Version, certify, State0)
end.
finalize_handshake(State0, StateName, Connection) ->
@@ -1597,17 +1703,17 @@ next_protocol(#state{expecting_next_protocol_negotiation = false} = State, _) ->
State;
next_protocol(#state{negotiated_protocol = NextProtocol} = State0, Connection) ->
NextProtocolMessage = ssl_handshake:next_protocol(NextProtocol),
- Connection:send_handshake(NextProtocolMessage, State0).
+ Connection:queue_handshake(NextProtocolMessage, State0).
cipher_protocol(State, Connection) ->
- Connection:send_change_cipher(#change_cipher_spec{}, State).
+ Connection:queue_change_cipher(#change_cipher_spec{}, State).
finished(#state{role = Role, negotiated_version = Version,
session = Session,
connection_states = ConnectionStates0,
tls_handshake_history = Handshake0} = State0, StateName, Connection) ->
MasterSecret = Session#session.master_secret,
- Finished = ssl_handshake:finished(Version, Role,
+ Finished = ssl_handshake:finished(ssl:tls_version(Version), Role,
get_current_prf(ConnectionStates0, write),
MasterSecret, Handshake0),
ConnectionStates = save_verify_data(Role, Finished, ConnectionStates0, StateName),
@@ -1672,7 +1778,7 @@ master_secret(#alert{} = Alert, _) ->
master_secret(PremasterSecret, #state{session = Session,
negotiated_version = Version, role = Role,
connection_states = ConnectionStates0} = State) ->
- case ssl_handshake:master_secret(tls_record, Version, PremasterSecret,
+ case ssl_handshake:master_secret(ssl:tls_version(Version), PremasterSecret,
ConnectionStates0, Role) of
{MasterSecret, ConnectionStates} ->
State#state{
@@ -1755,11 +1861,11 @@ is_anonymous(_) ->
false.
get_current_prf(CStates, Direction) ->
- CS = ssl_record:current_connection_state(CStates, Direction),
- CS#connection_state.security_parameters#security_parameters.prf_algorithm.
+ #{security_parameters := SecParams} = ssl_record:current_connection_state(CStates, Direction),
+ SecParams#security_parameters.prf_algorithm.
get_pending_prf(CStates, Direction) ->
- CS = ssl_record:pending_connection_state(CStates, Direction),
- CS#connection_state.security_parameters#security_parameters.prf_algorithm.
+ #{security_parameters := SecParams} = ssl_record:pending_connection_state(CStates, Direction),
+ SecParams#security_parameters.prf_algorithm.
opposite_role(client) ->
server;
@@ -1876,9 +1982,12 @@ start_or_recv_cancel_timer(infinity, _RecvFrom) ->
start_or_recv_cancel_timer(Timeout, RecvFrom) ->
erlang:send_after(Timeout, self(), {cancel_start_or_recv, RecvFrom}).
-hibernate_after(StateName, #state{ssl_options=#ssl_options{hibernate_after = HibernateAfter}} = State,
+hibernate_after(connection = StateName,
+ #state{ssl_options=#ssl_options{hibernate_after = HibernateAfter}} = State,
Actions) ->
- {next_state, StateName, State, [{timeout, HibernateAfter, hibernate} | Actions]}.
+ {next_state, StateName, State, [{timeout, HibernateAfter, hibernate} | Actions]};
+hibernate_after(StateName, State, Actions) ->
+ {next_state, StateName, State, Actions}.
terminate_alert(normal, Version, ConnectionStates) ->
ssl_alert:encode(?ALERT_REC(?WARNING, ?CLOSE_NOTIFY),
@@ -1978,7 +2087,7 @@ handle_resumed_session(SessId, #state{connection_states = ConnectionStates0,
session_cache = Cache,
session_cache_cb = CacheCb} = State0) ->
Session = CacheCb:lookup(Cache, {{Host, Port}, SessId}),
- case ssl_handshake:master_secret(tls_record, Version, Session,
+ case ssl_handshake:master_secret(ssl:tls_version(Version), Session,
ConnectionStates0, client) of
{_, ConnectionStates} ->
{Record, State} =
@@ -1987,7 +2096,7 @@ handle_resumed_session(SessId, #state{connection_states = ConnectionStates0,
session = Session}),
Connection:next_event(abbreviated, Record, State);
#alert{} = Alert ->
- Connection:handle_own_alert(Alert, Version, hello, State0)
+ handle_own_alert(Alert, Version, hello, State0)
end.
make_premaster_secret({MajVer, MinVer}, rsa) ->
@@ -2032,4 +2141,300 @@ ssl_options_list([ciphers = Key | Keys], [Value | Values], Acc) ->
ssl_options_list([Key | Keys], [Value | Values], Acc) ->
ssl_options_list(Keys, Values, [{Key, Value} | Acc]).
+handle_active_option(false, connection = StateName, To, Reply, State) ->
+ hibernate_after(StateName, State, [{reply, To, Reply}]);
+
+handle_active_option(_, connection = StateName0, To, Reply, #state{protocol_cb = Connection,
+ user_data_buffer = <<>>} = State0) ->
+ %% Need data, set active once
+ {Record, State1} = Connection:next_record_if_active(State0),
+ %% Note: Renogotiation may cause StateName0 =/= StateName
+ case Connection:next_event(StateName0, Record, State1) of
+ {next_state, StateName, State} ->
+ hibernate_after(StateName, State, [{reply, To, Reply}]);
+ {next_state, StateName, State, Actions} ->
+ hibernate_after(StateName, State, [{reply, To, Reply} | Actions]);
+ {stop, Reason, State} ->
+ {stop, Reason, State}
+ end;
+handle_active_option(_, StateName, To, Reply, #state{user_data_buffer = <<>>} = State) ->
+ %% Active once already set
+ {next_state, StateName, State, [{reply, To, Reply}]};
+
+%% user_data_buffer =/= <<>>
+handle_active_option(_, StateName0, To, Reply, #state{protocol_cb = Connection} = State0) ->
+ case read_application_data(<<>>, State0) of
+ {stop, Reason, State} ->
+ {stop, Reason, State};
+ {Record, State1} ->
+ %% Note: Renogotiation may cause StateName0 =/= StateName
+ case Connection:next_event(StateName0, Record, State1) of
+ {next_state, StateName, State} ->
+ hibernate_after(StateName, State, [{reply, To, Reply}]);
+ {next_state, StateName, State, Actions} ->
+ hibernate_after(StateName, State, [{reply, To, Reply} | Actions]);
+ {stop, _, _} = Stop ->
+ Stop
+ end
+ end.
+
+encode_packet(Data, #socket_options{packet=Packet}) ->
+ case Packet of
+ 1 -> encode_size_packet(Data, 8, (1 bsl 8) - 1);
+ 2 -> encode_size_packet(Data, 16, (1 bsl 16) - 1);
+ 4 -> encode_size_packet(Data, 32, (1 bsl 32) - 1);
+ _ -> Data
+ end.
+
+encode_size_packet(Bin, Size, Max) ->
+ Len = erlang:byte_size(Bin),
+ case Len > Max of
+ true -> throw({error, {badarg, {packet_to_large, Len, Max}}});
+ false -> <<Len:Size, Bin/binary>>
+ end.
+time_to_renegotiate(_Data,
+ #{current_write := #{sequence_number := Num}},
+ RenegotiateAt) ->
+
+ %% We could do test:
+ %% is_time_to_renegotiate((erlang:byte_size(_Data) div ?MAX_PLAIN_TEXT_LENGTH) + 1, RenegotiateAt),
+ %% but we chose to have a some what lower renegotiateAt and a much cheaper test
+ is_time_to_renegotiate(Num, RenegotiateAt).
+
+is_time_to_renegotiate(N, M) when N < M->
+ false;
+is_time_to_renegotiate(_,_) ->
+ true.
+
+
+%% Picks ClientData
+get_data(_, _, <<>>) ->
+ {more, <<>>};
+%% Recv timed out save buffer data until next recv
+get_data(#socket_options{active=false}, undefined, Buffer) ->
+ {passive, Buffer};
+get_data(#socket_options{active=Active, packet=Raw}, BytesToRead, Buffer)
+ when Raw =:= raw; Raw =:= 0 -> %% Raw Mode
+ if
+ Active =/= false orelse BytesToRead =:= 0 ->
+ %% Active true or once, or passive mode recv(0)
+ {ok, Buffer, <<>>};
+ byte_size(Buffer) >= BytesToRead ->
+ %% Passive Mode, recv(Bytes)
+ <<Data:BytesToRead/binary, Rest/binary>> = Buffer,
+ {ok, Data, Rest};
+ true ->
+ %% Passive Mode not enough data
+ {more, Buffer}
+ end;
+get_data(#socket_options{packet=Type, packet_size=Size}, _, Buffer) ->
+ PacketOpts = [{packet_size, Size}],
+ case decode_packet(Type, Buffer, PacketOpts) of
+ {more, _} ->
+ {more, Buffer};
+ Decoded ->
+ Decoded
+ end.
+
+decode_packet({http, headers}, Buffer, PacketOpts) ->
+ decode_packet(httph, Buffer, PacketOpts);
+decode_packet({http_bin, headers}, Buffer, PacketOpts) ->
+ decode_packet(httph_bin, Buffer, PacketOpts);
+decode_packet(Type, Buffer, PacketOpts) ->
+ erlang:decode_packet(Type, Buffer, PacketOpts).
+
+%% Just like with gen_tcp sockets, an ssl socket that has been configured with
+%% {packet, http} (or {packet, http_bin}) will automatically switch to expect
+%% HTTP headers after it sees a HTTP Request or HTTP Response line. We
+%% represent the current state as follows:
+%% #socket_options.packet =:= http: Expect a HTTP Request/Response line
+%% #socket_options.packet =:= {http, headers}: Expect HTTP Headers
+%% Note that if the user has explicitly configured the socket to expect
+%% HTTP headers using the {packet, httph} option, we don't do any automatic
+%% switching of states.
+deliver_app_data(Transport, Socket, SOpts = #socket_options{active=Active, packet=Type},
+ Data, Pid, From, Tracker, Connection) ->
+ send_or_reply(Active, Pid, From, format_reply(Transport, Socket, SOpts, Data, Tracker, Connection)),
+ SO = case Data of
+ {P, _, _, _} when ((P =:= http_request) or (P =:= http_response)),
+ ((Type =:= http) or (Type =:= http_bin)) ->
+ SOpts#socket_options{packet={Type, headers}};
+ http_eoh when tuple_size(Type) =:= 2 ->
+ % End of headers - expect another Request/Response line
+ {Type1, headers} = Type,
+ SOpts#socket_options{packet=Type1};
+ _ ->
+ SOpts
+ end,
+ case Active of
+ once ->
+ SO#socket_options{active=false};
+ _ ->
+ SO
+ end.
+
+format_reply(_, _,#socket_options{active = false, mode = Mode, packet = Packet,
+ header = Header}, Data, _, _) ->
+ {ok, do_format_reply(Mode, Packet, Header, Data)};
+format_reply(Transport, Socket, #socket_options{active = _, mode = Mode, packet = Packet,
+ header = Header}, Data, Tracker, Connection) ->
+ {ssl, ssl_socket:socket(self(), Transport, Socket, Connection, Tracker),
+ do_format_reply(Mode, Packet, Header, Data)}.
+
+deliver_packet_error(Transport, Socket, SO= #socket_options{active = Active}, Data, Pid, From, Tracker, Connection) ->
+ send_or_reply(Active, Pid, From, format_packet_error(Transport, Socket, SO, Data, Tracker, Connection)).
+
+format_packet_error(_, _,#socket_options{active = false, mode = Mode}, Data, _, _) ->
+ {error, {invalid_packet, do_format_reply(Mode, raw, 0, Data)}};
+format_packet_error(Transport, Socket, #socket_options{active = _, mode = Mode}, Data, Tracker, Connection) ->
+ {ssl_error, ssl_socket:socket(self(), Transport, Socket, Connection, Tracker),
+ {invalid_packet, do_format_reply(Mode, raw, 0, Data)}}.
+
+do_format_reply(binary, _, N, Data) when N > 0 -> % Header mode
+ header(N, Data);
+do_format_reply(binary, _, _, Data) ->
+ Data;
+do_format_reply(list, Packet, _, Data)
+ when Packet == http; Packet == {http, headers};
+ Packet == http_bin; Packet == {http_bin, headers};
+ Packet == httph; Packet == httph_bin ->
+ Data;
+do_format_reply(list, _,_, Data) ->
+ binary_to_list(Data).
+
+header(0, <<>>) ->
+ <<>>;
+header(_, <<>>) ->
+ [];
+header(0, Binary) ->
+ Binary;
+header(N, Binary) ->
+ <<?BYTE(ByteN), NewBinary/binary>> = Binary,
+ [ByteN | header(N-1, NewBinary)].
+
+send_or_reply(false, _Pid, From, Data) when From =/= undefined ->
+ gen_statem:reply(From, Data);
+%% Can happen when handling own alert or tcp error/close and there is
+%% no outstanding gen_fsm sync events
+send_or_reply(false, no_pid, _, _) ->
+ ok;
+send_or_reply(_, Pid, _From, Data) ->
+ send_user(Pid, Data).
+
+send_user(Pid, Msg) ->
+ Pid ! Msg.
+
+alert_user(Transport, Tracker, Socket, connection, Opts, Pid, From, Alert, Role, Connection) ->
+ alert_user(Transport, Tracker, Socket, Opts#socket_options.active, Pid, From, Alert, Role, Connection);
+alert_user(Transport, Tracker, Socket,_, _, _, From, Alert, Role, Connection) ->
+ alert_user(Transport, Tracker, Socket, From, Alert, Role, Connection).
+
+alert_user(Transport, Tracker, Socket, From, Alert, Role, Connection) ->
+ alert_user(Transport, Tracker, Socket, false, no_pid, From, Alert, Role, Connection).
+
+alert_user(_, _, _, false = Active, Pid, From, Alert, Role, _) when From =/= undefined ->
+ %% If there is an outstanding ssl_accept | recv
+ %% From will be defined and send_or_reply will
+ %% send the appropriate error message.
+ ReasonCode = ssl_alert:reason_code(Alert, Role),
+ send_or_reply(Active, Pid, From, {error, ReasonCode});
+alert_user(Transport, Tracker, Socket, Active, Pid, From, Alert, Role, Connection) ->
+ case ssl_alert:reason_code(Alert, Role) of
+ closed ->
+ send_or_reply(Active, Pid, From,
+ {ssl_closed, ssl_socket:socket(self(),
+ Transport, Socket, Connection, Tracker)});
+ ReasonCode ->
+ send_or_reply(Active, Pid, From,
+ {ssl_error, ssl_socket:socket(self(),
+ Transport, Socket, Connection, Tracker), ReasonCode})
+ end.
+
+log_alert(true, Info, Alert) ->
+ Txt = ssl_alert:alert_txt(Alert),
+ error_logger:format("SSL: ~p: ~s\n", [Info, Txt]);
+log_alert(false, _, _) ->
+ ok.
+
+handle_own_alert(Alert, Version, StateName,
+ #state{transport_cb = Transport,
+ socket = Socket,
+ connection_states = ConnectionStates,
+ ssl_options = SslOpts} = State) ->
+ try %% Try to tell the other side
+ {BinMsg, _} =
+ ssl_alert:encode(Alert, Version, ConnectionStates),
+ Transport:send(Socket, BinMsg)
+ catch _:_ -> %% Can crash if we are in a uninitialized state
+ ignore
+ end,
+ try %% Try to tell the local user
+ log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
+ handle_normal_shutdown(Alert,StateName, State)
+ catch _:_ ->
+ ok
+ end,
+ {stop, {shutdown, own_alert}}.
+
+handle_normal_shutdown(Alert, _, #state{socket = Socket,
+ transport_cb = Transport,
+ protocol_cb = Connection,
+ start_or_recv_from = StartFrom,
+ tracker = Tracker,
+ role = Role, renegotiation = {false, first}}) ->
+ alert_user(Transport, Tracker,Socket, StartFrom, Alert, Role, Connection);
+
+handle_normal_shutdown(Alert, StateName, #state{socket = Socket,
+ socket_options = Opts,
+ transport_cb = Transport,
+ protocol_cb = Connection,
+ user_application = {_Mon, Pid},
+ tracker = Tracker,
+ start_or_recv_from = RecvFrom, role = Role}) ->
+ alert_user(Transport, Tracker, Socket, StateName, Opts, Pid, RecvFrom, Alert, Role, Connection).
+
+invalidate_session(client, Host, Port, Session) ->
+ ssl_manager:invalidate_session(Host, Port, Session);
+invalidate_session(server, _, Port, Session) ->
+ ssl_manager:invalidate_session(Port, Session).
+
+handle_sni_extension(undefined, State) ->
+ State;
+handle_sni_extension(#sni{hostname = Hostname}, State0) ->
+ NewOptions = update_ssl_options_from_sni(State0#state.ssl_options, Hostname),
+ case NewOptions of
+ undefined ->
+ State0;
+ _ ->
+ {ok, Ref, CertDbHandle, FileRefHandle, CacheHandle, CRLDbHandle, OwnCert, Key, DHParams} =
+ ssl_config:init(NewOptions, State0#state.role),
+ State0#state{
+ session = State0#state.session#session{own_certificate = OwnCert},
+ file_ref_db = FileRefHandle,
+ cert_db_ref = Ref,
+ cert_db = CertDbHandle,
+ crl_db = CRLDbHandle,
+ session_cache = CacheHandle,
+ private_key = Key,
+ diffie_hellman_params = DHParams,
+ ssl_options = NewOptions,
+ sni_hostname = Hostname
+ }
+ end.
+
+update_ssl_options_from_sni(OrigSSLOptions, SNIHostname) ->
+ SSLOption =
+ case OrigSSLOptions#ssl_options.sni_fun of
+ undefined ->
+ proplists:get_value(SNIHostname,
+ OrigSSLOptions#ssl_options.sni_hosts);
+ SNIFun ->
+ SNIFun(SNIHostname)
+ end,
+ case SSLOption of
+ undefined ->
+ undefined;
+ _ ->
+ ssl:handle_options(SSLOption, OrigSSLOptions)
+ end.
diff --git a/lib/ssl/src/ssl_connection.hrl b/lib/ssl/src/ssl_connection.hrl
index 7682cb86ea..f1e612a41b 100644
--- a/lib/ssl/src/ssl_connection.hrl
+++ b/lib/ssl/src/ssl_connection.hrl
@@ -46,7 +46,7 @@
socket :: port(),
ssl_options :: #ssl_options{},
socket_options :: #socket_options{},
- connection_states :: #connection_states{} | secret_printout(),
+ connection_states :: ssl_record:connection_states() | secret_printout(),
protocol_buffers :: term() | secret_printout() , %% #protocol_buffers{} from tls_record.hrl or dtls_recor.hrl
tls_handshake_history :: ssl_handshake:ssl_handshake_history() | secret_printout()
| 'undefined',
@@ -84,7 +84,12 @@
client_ecc, % {Curves, PointFmt}
tracker :: pid() | 'undefined', %% Tracker process for listen socket
sni_hostname = undefined,
- downgrade
+ downgrade,
+ flight_buffer = [] :: list() %% Buffer of TLS/DTLS records, used during the TLS handshake
+ %% to when possible pack more than on TLS record into the
+ %% underlaying packet format. Introduced by DTLS - RFC 4347.
+ %% The mecahnism is also usefull in TLS although we do not
+ %% need to worry about packet loss in TLS.
}).
-define(DEFAULT_DIFFIE_HELLMAN_PARAMS,
diff --git a/lib/ssl/src/ssl_crl.erl b/lib/ssl/src/ssl_crl.erl
index faf5007b16..01be1fb9ab 100644
--- a/lib/ssl/src/ssl_crl.erl
+++ b/lib/ssl/src/ssl_crl.erl
@@ -39,16 +39,15 @@ trusted_cert_and_path(CRL, {SerialNumber, Issuer},{Db, DbRef} = DbHandle) ->
end;
trusted_cert_and_path(CRL, issuer_not_found, {Db, DbRef} = DbHandle) ->
- try find_issuer(CRL, DbHandle) of
- OtpCert ->
+ case find_issuer(CRL, DbHandle) of
+ {ok, OtpCert} ->
{ok, Root, Chain} = ssl_certificate:certificate_chain(OtpCert, Db, DbRef),
- {ok, Root, lists:reverse(Chain)}
- catch
- throw:_ ->
- {error, issuer_not_found}
+ {ok, Root, lists:reverse(Chain)};
+ {error, issuer_not_found} ->
+ {ok, unknown_crl_ca, []}
end.
-find_issuer(CRL, {Db,_}) ->
+find_issuer(CRL, {Db,DbRef}) ->
Issuer = public_key:pkix_normalize_name(public_key:pkix_crl_issuer(CRL)),
IsIssuerFun =
fun({_Key, {_Der,ErlCertCandidate}}, Acc) ->
@@ -56,13 +55,24 @@ find_issuer(CRL, {Db,_}) ->
(_, Acc) ->
Acc
end,
-
- try ssl_pkix_db:foldl(IsIssuerFun, issuer_not_found, Db) of
- issuer_not_found ->
- {error, issuer_not_found}
- catch
- {ok, IssuerCert} ->
- IssuerCert
+ if is_reference(DbRef) -> % actual DB exists
+ try ssl_pkix_db:foldl(IsIssuerFun, issuer_not_found, Db) of
+ issuer_not_found ->
+ {error, issuer_not_found}
+ catch
+ {ok, _} = Result ->
+ Result
+ end;
+ is_tuple(DbRef), element(1,DbRef) =:= extracted -> % cache bypass byproduct
+ {extracted, CertsData} = DbRef,
+ Certs = [Entry || {decoded, Entry} <- CertsData],
+ try lists:foldl(IsIssuerFun, issuer_not_found, Certs) of
+ issuer_not_found ->
+ {error, issuer_not_found}
+ catch
+ {ok, _} = Result ->
+ Result
+ end
end.
diff --git a/lib/ssl/src/ssl_crl_cache.erl b/lib/ssl/src/ssl_crl_cache.erl
index 60e7427737..647e0465fe 100644
--- a/lib/ssl/src/ssl_crl_cache.erl
+++ b/lib/ssl/src/ssl_crl_cache.erl
@@ -28,7 +28,7 @@
-behaviour(ssl_crl_cache_api).
--export([lookup/2, select/2, fresh_crl/2]).
+-export([lookup/3, select/2, fresh_crl/2]).
-export([insert/1, insert/2, delete/1]).
%%====================================================================
@@ -36,9 +36,10 @@
%%====================================================================
lookup(#'DistributionPoint'{distributionPoint = {fullName, Names}},
+ _Issuer,
CRLDbInfo) ->
get_crls(Names, CRLDbInfo);
-lookup(_,_) ->
+lookup(_,_,_) ->
not_available.
select(Issuer, {{_Cache, Mapping},_}) ->
diff --git a/lib/ssl/src/ssl_crl_cache_api.erl b/lib/ssl/src/ssl_crl_cache_api.erl
index d7b31f280e..c3a57e2f49 100644
--- a/lib/ssl/src/ssl_crl_cache_api.erl
+++ b/lib/ssl/src/ssl_crl_cache_api.erl
@@ -24,8 +24,9 @@
-include_lib("public_key/include/public_key.hrl").
--type db_handle() :: term().
+-type db_handle() :: term().
+-type issuer_name() :: {rdnSequence, [#'AttributeTypeAndValue'{}]}.
--callback lookup(#'DistributionPoint'{}, db_handle()) -> not_available | [public_key:der_encoded()].
--callback select(term(), db_handle()) -> [public_key:der_encoded()].
+-callback lookup(#'DistributionPoint'{}, issuer_name(), db_handle()) -> not_available | [public_key:der_encoded()].
+-callback select(issuer_name(), db_handle()) -> [public_key:der_encoded()].
-callback fresh_crl(#'DistributionPoint'{}, public_key:der_encoded()) -> public_key:der_encoded().
diff --git a/lib/ssl/src/ssl_crl_hash_dir.erl b/lib/ssl/src/ssl_crl_hash_dir.erl
new file mode 100644
index 0000000000..bb62737232
--- /dev/null
+++ b/lib/ssl/src/ssl_crl_hash_dir.erl
@@ -0,0 +1,106 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2016-2016. All Rights Reserved.
+%%
+%% Licensed under the Apache License, Version 2.0 (the "License");
+%% you may not use this file except in compliance with the License.
+%% You may obtain a copy of the License at
+%%
+%% http://www.apache.org/licenses/LICENSE-2.0
+%%
+%% Unless required by applicable law or agreed to in writing, software
+%% distributed under the License is distributed on an "AS IS" BASIS,
+%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%% See the License for the specific language governing permissions and
+%% limitations under the License.
+%%
+%% %CopyrightEnd%
+
+-module(ssl_crl_hash_dir).
+
+-include_lib("public_key/include/public_key.hrl").
+
+-behaviour(ssl_crl_cache_api).
+
+-export([lookup/3, select/2, fresh_crl/2]).
+
+lookup(#'DistributionPoint'{cRLIssuer = CRLIssuer} = DP, CertIssuer, CRLDbInfo) ->
+ Issuer =
+ case CRLIssuer of
+ asn1_NOVALUE ->
+ %% If the distribution point extension doesn't
+ %% indicate a CRL issuer, use the certificate issuer.
+ CertIssuer;
+ _ ->
+ CRLIssuer
+ end,
+ %% Find all CRLs for this issuer, and return those that match the
+ %% given distribution point.
+ AllCRLs = select(Issuer, CRLDbInfo),
+ lists:filter(fun(DER) ->
+ public_key:pkix_match_dist_point(DER, DP)
+ end, AllCRLs).
+
+fresh_crl(#'DistributionPoint'{}, CurrentCRL) ->
+ CurrentCRL.
+
+select(Issuer, {_DbHandle, [{dir, Dir}]}) ->
+ case find_crls(Issuer, Dir) of
+ [_|_] = DERs ->
+ DERs;
+ [] ->
+ %% That's okay, just report that we didn't find any CRL.
+ %% If the crl_check setting is best_effort, ssl_handshake
+ %% is happy with that, but if it's true, this is an error.
+ [];
+ {error, Error} ->
+ error_logger:error_report(
+ [{cannot_find_crl, Error},
+ {dir, Dir},
+ {module, ?MODULE},
+ {line, ?LINE}]),
+ []
+ end.
+
+find_crls(Issuer, Dir) ->
+ case filelib:is_dir(Dir) of
+ true ->
+ Hash = public_key:short_name_hash(Issuer),
+ find_crls(Issuer, Hash, Dir, 0, []);
+ false ->
+ {error, not_a_directory}
+ end.
+
+find_crls(Issuer, Hash, Dir, N, Acc) ->
+ Filename = filename:join(Dir, Hash ++ ".r" ++ integer_to_list(N)),
+ case file:read_file(Filename) of
+ {error, enoent} ->
+ Acc;
+ {ok, Bin} ->
+ try maybe_parse_pem(Bin) of
+ DER when is_binary(DER) ->
+ %% Found one file. Let's see if there are more.
+ find_crls(Issuer, Hash, Dir, N + 1, [DER] ++ Acc)
+ catch
+ error:Error ->
+ %% Something is wrong with the file. Report
+ %% it, and try the next one.
+ error_logger:error_report(
+ [{crl_parse_error, Error},
+ {filename, Filename},
+ {module, ?MODULE},
+ {line, ?LINE}]),
+ find_crls(Issuer, Hash, Dir, N + 1, Acc)
+ end
+ end.
+
+maybe_parse_pem(<<"-----BEGIN", _/binary>> = PEM) ->
+ %% It's a PEM encoded file. Need to extract the DER
+ %% encoded data.
+ [{'CertificateList', DER, not_encrypted}] = public_key:pem_decode(PEM),
+ DER;
+maybe_parse_pem(DER) when is_binary(DER) ->
+ %% Let's assume it's DER-encoded.
+ DER.
+
diff --git a/lib/ssl/src/ssl_handshake.erl b/lib/ssl/src/ssl_handshake.erl
index 598d4e4112..5b51ac0916 100644
--- a/lib/ssl/src/ssl_handshake.erl
+++ b/lib/ssl/src/ssl_handshake.erl
@@ -51,8 +51,8 @@
%% Handle handshake messages
-export([certify/10, client_certificate_verify/6, certificate_verify/6, verify_signature/5,
- master_secret/5, server_key_exchange_hash/2, verify_connection/6,
- init_handshake_history/0, update_handshake_history/2, verify_server_key/5
+ master_secret/4, server_key_exchange_hash/2, verify_connection/6,
+ init_handshake_history/0, update_handshake_history/3, verify_server_key/5
]).
%% Encode/Decode
@@ -65,7 +65,7 @@
%% Cipher suites handling
-export([available_suites/2, available_signature_algs/3, cipher_suites/2,
- select_session/11, supported_ecc/1]).
+ select_session/11, supported_ecc/1, available_signature_algs/4]).
%% Extensions handling
-export([client_hello_extensions/6,
@@ -74,7 +74,7 @@
]).
%% MISC
--export([select_version/3, prf/6, select_hashsign/5,
+-export([select_version/3, prf/6, select_hashsign/4, select_hashsign/5,
select_hashsign_algs/3,
premaster_secret/2, premaster_secret/3, premaster_secret/4]).
@@ -94,15 +94,14 @@ hello_request() ->
#hello_request{}.
%%--------------------------------------------------------------------
--spec server_hello(#session{}, ssl_record:ssl_version(), #connection_states{},
+-spec server_hello(#session{}, ssl_record:ssl_version(), ssl_record:connection_states(),
#hello_extensions{}) -> #server_hello{}.
%%
%% Description: Creates a server hello message.
%%--------------------------------------------------------------------
server_hello(SessionId, Version, ConnectionStates, Extensions) ->
- Pending = ssl_record:pending_connection_state(ConnectionStates, read),
- SecParams = Pending#connection_state.security_parameters,
-
+ #{security_parameters := SecParams} =
+ ssl_record:pending_connection_state(ConnectionStates, read),
#server_hello{server_version = Version,
cipher_suite = SecParams#security_parameters.cipher_suite,
compression_method =
@@ -167,7 +166,7 @@ certificate(OwnCert, CertDbHandle, CertDbRef, server) ->
{ok, _, Chain} ->
#certificate{asn1_certificates = Chain};
{error, _} ->
- ?ALERT_REC(?FATAL, ?INTERNAL_ERROR)
+ ?ALERT_REC(?FATAL, ?INTERNAL_ERROR, server_has_no_suitable_certificates)
end.
%%--------------------------------------------------------------------
@@ -195,7 +194,7 @@ client_certificate_verify(OwnCert, MasterSecret, Version,
PrivateKey, {Handshake, _}) ->
case public_key:pkix_is_fixed_dh_cert(OwnCert) of
true ->
- ?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE);
+ ?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE, fixed_diffie_hellman_prohibited);
false ->
Hashes =
calc_certificate_verify(Version, HashAlgo, MasterSecret, Handshake),
@@ -335,9 +334,8 @@ verify_server_key(#server_key_params{params_bin = EncParams,
signature = Signature},
HashSign = {HashAlgo, _},
ConnectionStates, Version, PubKeyInfo) ->
- ConnectionState =
+ #{security_parameters := SecParams} =
ssl_record:pending_connection_state(ConnectionStates, read),
- SecParams = ConnectionState#connection_state.security_parameters,
#security_parameters{client_random = ClientRandom,
server_random = ServerRandom} = SecParams,
Hash = server_key_exchange_hash(HashAlgo,
@@ -353,7 +351,7 @@ verify_server_key(#server_key_params{params_bin = EncParams,
%% Description: Checks that the certificate_verify message is valid.
%%--------------------------------------------------------------------
certificate_verify(_, _, _, undefined, _, _) ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, invalid_certificate_verify_message);
certificate_verify(Signature, PublicKeyInfo, Version,
HashSign = {HashAlgo, _}, MasterSecret, {_, Handshake}) ->
@@ -417,7 +415,7 @@ certify(#certificate{asn1_certificates = ASN1Certs}, CertDbHandle, CertDbRef,
catch
error:_ ->
%% ASN-1 decode of certificate somehow failed
- ?ALERT_REC(?FATAL, ?CERTIFICATE_UNKNOWN)
+ ?ALERT_REC(?FATAL, ?CERTIFICATE_UNKNOWN, failed_to_decode_certificate)
end.
%%--------------------------------------------------------------------
@@ -447,7 +445,7 @@ init_handshake_history() ->
{[], []}.
%%--------------------------------------------------------------------
--spec update_handshake_history(ssl_handshake:ssl_handshake_history(), Data ::term()) ->
+-spec update_handshake_history(ssl_handshake:ssl_handshake_history(), Data ::term(), boolean()) ->
ssl_handshake:ssl_handshake_history().
%%
%% Description: Update the handshake history buffer with Data.
@@ -457,14 +455,14 @@ update_handshake_history(Handshake, % special-case SSL2 client hello
?UINT16(CSLength), ?UINT16(0),
?UINT16(CDLength),
CipherSuites:CSLength/binary,
- ChallengeData:CDLength/binary>>) ->
+ ChallengeData:CDLength/binary>>, true) ->
update_handshake_history(Handshake,
<<?CLIENT_HELLO, ?BYTE(Major), ?BYTE(Minor),
?UINT16(CSLength), ?UINT16(0),
?UINT16(CDLength),
CipherSuites:CSLength/binary,
- ChallengeData:CDLength/binary>>);
-update_handshake_history({Handshake0, _Prev}, Data) ->
+ ChallengeData:CDLength/binary>>, true);
+update_handshake_history({Handshake0, _Prev}, Data, _) ->
{[Data|Handshake0], Handshake0}.
%% %%--------------------------------------------------------------------
@@ -581,7 +579,7 @@ prf({3,_N}, PRFAlgo, Secret, Label, Seed, WantedLength) ->
{atom(), atom()} | undefined | #alert{}.
%%
-%% Description: Handles signature_algorithms extension
+%% Description: Handles signature_algorithms hello extension (server)
%%--------------------------------------------------------------------
select_hashsign(_, undefined, _, _, _Version) ->
{null, anon};
@@ -593,19 +591,22 @@ select_hashsign(HashSigns, Cert, KeyExAlgo,
select_hashsign(#hash_sign_algos{hash_sign_algos = HashSigns}, Cert, KeyExAlgo, SupportedHashSigns,
{Major, Minor}) when Major >= 3 andalso Minor >= 3 ->
#'OTPCertificate'{tbsCertificate = TBSCert} = public_key:pkix_decode_cert(Cert, otp),
- #'OTPSubjectPublicKeyInfo'{algorithm = {_,Algo, _}} = TBSCert#'OTPTBSCertificate'.subjectPublicKeyInfo,
- Sign = cert_sign(Algo),
- case lists:filter(fun({sha, dsa = S}) when S == Sign ->
- true;
- ({_, dsa}) ->
- false;
- ({_, _} = Algos) ->
- is_acceptable_hash_sign(Algos, Sign, KeyExAlgo, SupportedHashSigns);
+ #'OTPCertificate'{tbsCertificate = TBSCert,
+ signatureAlgorithm = {_,SignAlgo, _}} = public_key:pkix_decode_cert(Cert, otp),
+ #'OTPSubjectPublicKeyInfo'{algorithm = {_, SubjAlgo, _}} =
+ TBSCert#'OTPTBSCertificate'.subjectPublicKeyInfo,
+
+ Sign = sign_algo(SignAlgo),
+ SubSing = sign_algo(SubjAlgo),
+
+ case lists:filter(fun({_, S} = Algos) when S == Sign ->
+ is_acceptable_hash_sign(Algos, Sign,
+ SubSing, KeyExAlgo, SupportedHashSigns);
(_) ->
false
end, HashSigns) of
[] ->
- ?ALERT_REC(?FATAL, ?INSUFFICIENT_SECURITY);
+ ?ALERT_REC(?FATAL, ?INSUFFICIENT_SECURITY, no_suitable_signature_algorithm);
[HashSign | _] ->
HashSign
end;
@@ -613,6 +614,49 @@ select_hashsign(_, Cert, _, _, Version) ->
#'OTPCertificate'{tbsCertificate = TBSCert} = public_key:pkix_decode_cert(Cert, otp),
#'OTPSubjectPublicKeyInfo'{algorithm = {_,Algo, _}} = TBSCert#'OTPTBSCertificate'.subjectPublicKeyInfo,
select_hashsign_algs(undefined, Algo, Version).
+%%--------------------------------------------------------------------
+-spec select_hashsign(#certificate_request{}, binary(),
+ [atom()], ssl_record:ssl_version()) ->
+ {atom(), atom()} | #alert{}.
+
+%%
+%% Description: Handles signature algorithms selection for certificate requests (client)
+%%--------------------------------------------------------------------
+select_hashsign(#certificate_request{}, undefined, _, {Major, Minor}) when Major >= 3 andalso Minor >= 3->
+ %% There client does not have a certificate and will send an empty reply, the server may fail
+ %% or accept the connection by its own preference. No signature algorihms needed as there is
+ %% no certificate to verify.
+ {undefined, undefined};
+
+select_hashsign(#certificate_request{hashsign_algorithms = #hash_sign_algos{hash_sign_algos = HashSigns},
+ certificate_types = Types}, Cert, SupportedHashSigns,
+ {Major, Minor}) when Major >= 3 andalso Minor >= 3->
+ #'OTPCertificate'{tbsCertificate = TBSCert} = public_key:pkix_decode_cert(Cert, otp),
+ #'OTPCertificate'{tbsCertificate = TBSCert,
+ signatureAlgorithm = {_,SignAlgo, _}} = public_key:pkix_decode_cert(Cert, otp),
+ #'OTPSubjectPublicKeyInfo'{algorithm = {_, SubjAlgo, _}} =
+ TBSCert#'OTPTBSCertificate'.subjectPublicKeyInfo,
+
+ Sign = sign_algo(SignAlgo),
+ SubSign = sign_algo(SubjAlgo),
+
+ case is_acceptable_cert_type(SubSign, HashSigns, Types) andalso is_supported_sign(Sign, HashSigns) of
+ true ->
+ case lists:filter(fun({_, S} = Algos) when S == SubSign ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+ (_) ->
+ false
+ end, HashSigns) of
+ [] ->
+ ?ALERT_REC(?FATAL, ?INSUFFICIENT_SECURITY, no_suitable_signature_algorithm);
+ [HashSign | _] ->
+ HashSign
+ end;
+ false ->
+ ?ALERT_REC(?FATAL, ?INSUFFICIENT_SECURITY, no_suitable_signature_algorithm)
+ end;
+select_hashsign(#certificate_request{}, Cert, _, Version) ->
+ select_hashsign(undefined, Cert, undefined, [], Version).
%%--------------------------------------------------------------------
-spec select_hashsign_algs({atom(), atom()}| undefined, oid(), ssl_record:ssl_version()) ->
@@ -648,46 +692,40 @@ select_hashsign_algs(undefined, ?rsaEncryption, _) ->
select_hashsign_algs(undefined, ?'id-dsa', _) ->
{sha, dsa}.
+
%%--------------------------------------------------------------------
--spec master_secret(atom(), ssl_record:ssl_version(), #session{} | binary(), #connection_states{},
- client | server) -> {binary(), #connection_states{}} | #alert{}.
+-spec master_secret(ssl_record:ssl_version(), #session{} | binary(), ssl_record:connection_states(),
+ client | server) -> {binary(), ssl_record:connection_states()} | #alert{}.
%%
%% Description: Sets or calculates the master secret and calculate keys,
%% updating the pending connection states. The Mastersecret and the update
%% connection states are returned or an alert if the calculation fails.
%%-------------------------------------------------------------------
-master_secret(RecordCB, Version, #session{master_secret = Mastersecret},
+master_secret(Version, #session{master_secret = Mastersecret},
ConnectionStates, Role) ->
- ConnectionState =
+ #{security_parameters := SecParams} =
ssl_record:pending_connection_state(ConnectionStates, read),
- SecParams = ConnectionState#connection_state.security_parameters,
- try master_secret(RecordCB, Version, Mastersecret, SecParams,
+ try master_secret(Version, Mastersecret, SecParams,
ConnectionStates, Role)
catch
- exit:Reason ->
- Report = io_lib:format("Key calculation failed due to ~p",
- [Reason]),
- error_logger:error_report(Report),
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)
+ exit:_ ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, key_calculation_failure)
end;
-master_secret(RecordCB, Version, PremasterSecret, ConnectionStates, Role) ->
- ConnectionState =
+master_secret(Version, PremasterSecret, ConnectionStates, Role) ->
+ #{security_parameters := SecParams} =
ssl_record:pending_connection_state(ConnectionStates, read),
- SecParams = ConnectionState#connection_state.security_parameters,
+
#security_parameters{prf_algorithm = PrfAlgo,
client_random = ClientRandom,
server_random = ServerRandom} = SecParams,
- try master_secret(RecordCB, Version,
+ try master_secret(Version,
calc_master_secret(Version,PrfAlgo,PremasterSecret,
ClientRandom, ServerRandom),
SecParams, ConnectionStates, Role)
catch
- exit:Reason ->
- Report = io_lib:format("Master secret calculation failed"
- " due to ~p", [Reason]),
- error_logger:error_report(Report),
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)
+ exit:_ ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, master_secret_calculation_failure)
end.
%%-------------Encode/Decode --------------------------------
@@ -958,8 +996,8 @@ decode_handshake(_Version, ?CLIENT_KEY_EXCHANGE, PKEPMS) ->
#client_key_exchange{exchange_keys = PKEPMS};
decode_handshake(_Version, ?FINISHED, VerifyData) ->
#finished{verify_data = VerifyData};
-decode_handshake(_, _, _) ->
- throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)).
+decode_handshake(_, Message, _) ->
+ throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, {unknown_or_malformed_handshake, Message})).
%%--------------------------------------------------------------------
-spec decode_hello_extensions({client, binary()} | binary()) -> #hello_extensions{}.
@@ -1031,8 +1069,8 @@ dec_server_key(<<?UINT16(NLen), N:NLen/binary,
params_bin = BinMsg,
hashsign = HashSign,
signature = Signature};
-dec_server_key(_, _, _) ->
- throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)).
+dec_server_key(_, KeyExchange, _) ->
+ throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, {unknown_or_malformed_key_exchange, KeyExchange})).
%%--------------------------------------------------------------------
-spec decode_suites('2_bytes'|'3_bytes', binary()) -> list().
@@ -1149,11 +1187,13 @@ certificate_types(_, {N, M}) when N >= 3 andalso M >= 3 ->
end;
certificate_types({KeyExchange, _, _, _}, _) when KeyExchange == rsa;
+ KeyExchange == dh_rsa;
KeyExchange == dhe_rsa;
KeyExchange == ecdhe_rsa ->
<<?BYTE(?RSA_SIGN)>>;
-certificate_types({KeyExchange, _, _, _}, _) when KeyExchange == dhe_dss;
+certificate_types({KeyExchange, _, _, _}, _) when KeyExchange == dh_dss;
+ KeyExchange == dhe_dss;
KeyExchange == srp_dss ->
<<?BYTE(?DSS_SIGN)>>;
@@ -1176,13 +1216,18 @@ certificate_authorities(CertDbHandle, CertDbRef) ->
end,
list_to_binary([Enc(Cert) || {_, Cert} <- Authorities]).
-certificate_authorities_from_db(CertDbHandle, CertDbRef) ->
+certificate_authorities_from_db(CertDbHandle, CertDbRef) when is_reference(CertDbRef) ->
ConnectionCerts = fun({{Ref, _, _}, Cert}, Acc) when Ref == CertDbRef ->
[Cert | Acc];
(_, Acc) ->
Acc
end,
- ssl_pkix_db:foldl(ConnectionCerts, [], CertDbHandle).
+ ssl_pkix_db:foldl(ConnectionCerts, [], CertDbHandle);
+certificate_authorities_from_db(_CertDbHandle, {extracted, CertDbData}) ->
+ %% Cache disabled, Ref contains data
+ lists:foldl(fun({decoded, {_Key,Cert}}, Acc) -> [Cert | Acc] end,
+ [], CertDbData).
+
%%-------------Extension handling --------------------------------
@@ -1253,40 +1298,76 @@ handle_server_hello_extensions(RecordCB, Random, CipherSuite, Compression,
Protocol ->
{ConnectionStates, npn, Protocol}
end;
- _ -> %% {error, _Reason} or a list of 0/2+ protocols.
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)
+ {error, Reason} ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, Reason);
+ [] ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, no_protocols_in_server_hello);
+ [_|_] ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, too_many_protocols_in_server_hello)
end.
select_version(RecordCB, ClientVersion, Versions) ->
- ServerVersion = RecordCB:highest_protocol_version(Versions),
- RecordCB:lowest_protocol_version(ClientVersion, ServerVersion).
+ do_select_version(RecordCB, ClientVersion, Versions).
+
+do_select_version(_, ClientVersion, []) ->
+ ClientVersion;
+do_select_version(RecordCB, ClientVersion, [Version | Versions]) ->
+ case RecordCB:is_higher(Version, ClientVersion) of
+ true ->
+ %% Version too high for client - keep looking
+ do_select_version(RecordCB, ClientVersion, Versions);
+ false ->
+ %% Version ok for client - look for a higher
+ do_select_version(RecordCB, ClientVersion, Versions, Version)
+ end.
+%%
+do_select_version(_, _, [], GoodVersion) ->
+ GoodVersion;
+do_select_version(
+ RecordCB, ClientVersion, [Version | Versions], GoodVersion) ->
+ BetterVersion =
+ case RecordCB:is_higher(Version, ClientVersion) of
+ true ->
+ %% Version too high for client
+ GoodVersion;
+ false ->
+ %% Version ok for client
+ case RecordCB:is_higher(Version, GoodVersion) of
+ true ->
+ %% Use higher version
+ Version;
+ false ->
+ GoodVersion
+ end
+ end,
+ do_select_version(RecordCB, ClientVersion, Versions, BetterVersion).
renegotiation_info(_, client, _, false) ->
#renegotiation_info{renegotiated_connection = undefined};
renegotiation_info(_RecordCB, server, ConnectionStates, false) ->
- CS = ssl_record:current_connection_state(ConnectionStates, read),
- case CS#connection_state.secure_renegotiation of
+ ConnectionState = ssl_record:current_connection_state(ConnectionStates, read),
+ case maps:get(secure_renegotiation, ConnectionState) of
true ->
#renegotiation_info{renegotiated_connection = ?byte(0)};
false ->
#renegotiation_info{renegotiated_connection = undefined}
end;
renegotiation_info(_RecordCB, client, ConnectionStates, true) ->
- CS = ssl_record:current_connection_state(ConnectionStates, read),
- case CS#connection_state.secure_renegotiation of
+ ConnectionState = ssl_record:current_connection_state(ConnectionStates, read),
+ case maps:get(secure_renegotiation, ConnectionState) of
true ->
- Data = CS#connection_state.client_verify_data,
+ Data = maps:get(client_verify_data, ConnectionState),
#renegotiation_info{renegotiated_connection = Data};
false ->
#renegotiation_info{renegotiated_connection = undefined}
end;
renegotiation_info(_RecordCB, server, ConnectionStates, true) ->
- CS = ssl_record:current_connection_state(ConnectionStates, read),
- case CS#connection_state.secure_renegotiation of
+ ConnectionState = ssl_record:current_connection_state(ConnectionStates, read),
+ case maps:get(secure_renegotiation, ConnectionState) of
true ->
- CData = CS#connection_state.client_verify_data,
- SData =CS#connection_state.server_verify_data,
+ CData = maps:get(client_verify_data, ConnectionState),
+ SData = maps:get(server_verify_data, ConnectionState),
#renegotiation_info{renegotiated_connection = <<CData/binary, SData/binary>>};
false ->
#renegotiation_info{renegotiated_connection = undefined}
@@ -1309,29 +1390,29 @@ handle_renegotiation_info(_RecordCB, _, undefined, ConnectionStates, false, _, _
handle_renegotiation_info(_RecordCB, client, #renegotiation_info{renegotiated_connection = ClientServerVerify},
ConnectionStates, true, _, _) ->
- CS = ssl_record:current_connection_state(ConnectionStates, read),
- CData = CS#connection_state.client_verify_data,
- SData = CS#connection_state.server_verify_data,
+ ConnectionState = ssl_record:current_connection_state(ConnectionStates, read),
+ CData = maps:get(client_verify_data, ConnectionState),
+ SData = maps:get(server_verify_data, ConnectionState),
case <<CData/binary, SData/binary>> == ClientServerVerify of
true ->
{ok, ConnectionStates};
false ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, client_renegotiation)
end;
handle_renegotiation_info(_RecordCB, server, #renegotiation_info{renegotiated_connection = ClientVerify},
ConnectionStates, true, _, CipherSuites) ->
case is_member(?TLS_EMPTY_RENEGOTIATION_INFO_SCSV, CipherSuites) of
true ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, {server_renegotiation, empty_renegotiation_info_scsv});
false ->
- CS = ssl_record:current_connection_state(ConnectionStates, read),
- Data = CS#connection_state.client_verify_data,
+ ConnectionState = ssl_record:current_connection_state(ConnectionStates, read),
+ Data = maps:get(client_verify_data, ConnectionState),
case Data == ClientVerify of
true ->
{ok, ConnectionStates};
false ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, server_renegotiation)
end
end;
@@ -1341,16 +1422,16 @@ handle_renegotiation_info(RecordCB, client, undefined, ConnectionStates, true, S
handle_renegotiation_info(RecordCB, server, undefined, ConnectionStates, true, SecureRenegotation, CipherSuites) ->
case is_member(?TLS_EMPTY_RENEGOTIATION_INFO_SCSV, CipherSuites) of
true ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, {server_renegotiation, empty_renegotiation_info_scsv});
false ->
handle_renegotiation_info(RecordCB, ConnectionStates, SecureRenegotation)
end.
handle_renegotiation_info(_RecordCB, ConnectionStates, SecureRenegotation) ->
- CS = ssl_record:current_connection_state(ConnectionStates, read),
- case {SecureRenegotation, CS#connection_state.secure_renegotiation} of
+ ConnectionState = ssl_record:current_connection_state(ConnectionStates, read),
+ case {SecureRenegotation, maps:get(secure_renegotiation, ConnectionState)} of
{_, true} ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, already_secure);
{true, false} ->
?ALERT_REC(?FATAL, ?NO_RENEGOTIATION);
{false, false} ->
@@ -1523,8 +1604,8 @@ path_validation_alert({bad_cert, selfsigned_peer}) ->
?ALERT_REC(?FATAL, ?BAD_CERTIFICATE);
path_validation_alert({bad_cert, unknown_ca}) ->
?ALERT_REC(?FATAL, ?UNKNOWN_CA);
-path_validation_alert(_) ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE).
+path_validation_alert(Reason) ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, Reason).
encrypted_premaster_secret(Secret, RSAPublicKey) ->
try
@@ -1533,18 +1614,27 @@ encrypted_premaster_secret(Secret, RSAPublicKey) ->
rsa_pkcs1_padding}]),
#encrypted_premaster_secret{premaster_secret = PreMasterSecret}
catch
- _:_->
- throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE))
+ _:_->
+ throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, premaster_encryption_failed))
+ end.
+
+digitally_signed(Version, Hashes, HashAlgo, PrivateKey) ->
+ try do_digitally_signed(Version, Hashes, HashAlgo, PrivateKey) of
+ Signature ->
+ Signature
+ catch
+ error:badkey->
+ throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, bad_key(PrivateKey)))
end.
-digitally_signed({3, Minor}, Hash, HashAlgo, Key) when Minor >= 3 ->
+do_digitally_signed({3, Minor}, Hash, HashAlgo, Key) when Minor >= 3 ->
public_key:sign({digest, Hash}, HashAlgo, Key);
-digitally_signed(_Version, Hash, HashAlgo, #'DSAPrivateKey'{} = Key) ->
+do_digitally_signed(_Version, Hash, HashAlgo, #'DSAPrivateKey'{} = Key) ->
public_key:sign({digest, Hash}, HashAlgo, Key);
-digitally_signed(_Version, Hash, _HashAlgo, #'RSAPrivateKey'{} = Key) ->
+do_digitally_signed(_Version, Hash, _HashAlgo, #'RSAPrivateKey'{} = Key) ->
public_key:encrypt_private(Hash, Key,
[{rsa_pad, rsa_pkcs1_padding}]);
-digitally_signed(_Version, Hash, HashAlgo, Key) ->
+do_digitally_signed(_Version, Hash, HashAlgo, Key) ->
public_key:sign({digest, Hash}, HashAlgo, Key).
calc_certificate_verify({3, 0}, HashAlgo, MasterSecret, Handshake) ->
@@ -1557,7 +1647,7 @@ calc_finished({3, 0}, Role, _PrfAlgo, MasterSecret, Handshake) ->
calc_finished({3, N}, Role, PrfAlgo, MasterSecret, Handshake) ->
tls_v1:finished(Role, N, PrfAlgo, MasterSecret, lists:reverse(Handshake)).
-master_secret(_RecordCB, Version, MasterSecret,
+master_secret(Version, MasterSecret,
#security_parameters{
bulk_cipher_algorithm = BCA,
client_random = ClientRandom,
@@ -1640,18 +1730,16 @@ hello_pending_connection_states(_RecordCB, Role, Version, CipherSuite, Random, C
NewWriteSecParams,
ConnectionStates).
-hello_security_parameters(client, Version, ConnectionState, CipherSuite, Random,
+hello_security_parameters(client, Version, #{security_parameters := SecParams}, CipherSuite, Random,
Compression) ->
- SecParams = ConnectionState#connection_state.security_parameters,
NewSecParams = ssl_cipher:security_parameters(Version, CipherSuite, SecParams),
NewSecParams#security_parameters{
server_random = Random,
compression_algorithm = Compression
};
-hello_security_parameters(server, Version, ConnectionState, CipherSuite, Random,
+hello_security_parameters(server, Version, #{security_parameters := SecParams}, CipherSuite, Random,
Compression) ->
- SecParams = ConnectionState#connection_state.security_parameters,
NewSecParams = ssl_cipher:security_parameters(Version, CipherSuite, SecParams),
NewSecParams#security_parameters{
client_random = Random,
@@ -1751,12 +1839,12 @@ dec_client_key(PKEPMS, ?KEY_EXCHANGE_RSA, {3, 0}) ->
dec_client_key(<<?UINT16(_), PKEPMS/binary>>, ?KEY_EXCHANGE_RSA, _) ->
#encrypted_premaster_secret{premaster_secret = PKEPMS};
dec_client_key(<<>>, ?KEY_EXCHANGE_DIFFIE_HELLMAN, _) ->
- throw(?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE));
+ throw(?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE, empty_dh_public));
dec_client_key(<<?UINT16(DH_YLen), DH_Y:DH_YLen/binary>>,
?KEY_EXCHANGE_DIFFIE_HELLMAN, _) ->
#client_diffie_hellman_public{dh_public = DH_Y};
dec_client_key(<<>>, ?KEY_EXCHANGE_EC_DIFFIE_HELLMAN, _) ->
- throw(?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE));
+ throw(?ALERT_REC(?FATAL, ?UNSUPPORTED_CERTIFICATE, empty_dh_public));
dec_client_key(<<?BYTE(DH_YLen), DH_Y:DH_YLen/binary>>,
?KEY_EXCHANGE_EC_DIFFIE_HELLMAN, _) ->
#client_ec_diffie_hellman_public{dh_public = DH_Y};
@@ -1800,7 +1888,7 @@ dec_server_key_signature(Params, <<?UINT16(0)>>, _) ->
dec_server_key_signature(Params, <<?UINT16(Len), Signature:Len/binary>>, _) ->
{Params, undefined, Signature};
dec_server_key_signature(_, _, _) ->
- throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)).
+ throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, failed_to_decrypt_server_key_sign)).
dec_hello_extensions(<<>>, Acc) ->
Acc;
@@ -1955,8 +2043,8 @@ key_exchange_alg(_) ->
%%-------------Extension handling --------------------------------
%% Receive protocols, choose one from the list, return it.
-handle_alpn_extension(_, {error, _Reason}) ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
+handle_alpn_extension(_, {error, Reason}) ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, Reason);
handle_alpn_extension([], _) ->
?ALERT_REC(?FATAL, ?NO_APPLICATION_PROTOCOL);
handle_alpn_extension([ServerProtocol|Tail], ClientProtocols) ->
@@ -1976,7 +2064,7 @@ handle_next_protocol(#next_protocol_negotiation{} = NextProtocols,
true ->
select_next_protocol(decode_next_protocols(NextProtocols), NextProtocolSelector);
false ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE) % unexpected next protocol extension
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, unexpected_next_protocol_extension)
end.
@@ -1996,17 +2084,17 @@ handle_next_protocol_on_server(#next_protocol_negotiation{extension_data = <<>>}
Protocols;
handle_next_protocol_on_server(_Hello, _Renegotiation, _SSLOpts) ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE). % unexpected next protocol extension
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, unexpected_next_protocol_extension).
next_protocol_extension_allowed(NextProtocolSelector, Renegotiating) ->
NextProtocolSelector =/= undefined andalso not Renegotiating.
-select_next_protocol({error, _Reason}, _NextProtocolSelector) ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
+select_next_protocol({error, Reason}, _NextProtocolSelector) ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, Reason);
select_next_protocol(Protocols, NextProtocolSelector) ->
case NextProtocolSelector(Protocols) of
?NO_PROTOCOL ->
- ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE);
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, no_next_protocol);
Protocol when is_binary(Protocol) ->
Protocol
end.
@@ -2121,13 +2209,14 @@ crl_check_same_issuer(OtpCert, _, Dps, Options) ->
public_key:pkix_crls_validate(OtpCert, Dps, Options).
dps_and_crls(OtpCert, Callback, CRLDbHandle, ext) ->
- case public_key:pkix_dist_points(OtpCert) of
- [] ->
- no_dps;
- DistPoints ->
- distpoints_lookup(DistPoints, Callback, CRLDbHandle)
- end;
-
+ case public_key:pkix_dist_points(OtpCert) of
+ [] ->
+ no_dps;
+ DistPoints ->
+ Issuer = OtpCert#'OTPCertificate'.tbsCertificate#'OTPTBSCertificate'.issuer,
+ distpoints_lookup(DistPoints, Issuer, Callback, CRLDbHandle)
+ end;
+
dps_and_crls(OtpCert, Callback, CRLDbHandle, same_issuer) ->
DP = #'DistributionPoint'{distributionPoint = {fullName, GenNames}} =
public_key:pkix_dist_point(OtpCert),
@@ -2138,34 +2227,105 @@ dps_and_crls(OtpCert, Callback, CRLDbHandle, same_issuer) ->
end, GenNames),
[{DP, {CRL, public_key:der_decode('CertificateList', CRL)}} || CRL <- CRLs].
-distpoints_lookup([], _, _) ->
+distpoints_lookup([], _, _, _) ->
[];
-distpoints_lookup([DistPoint | Rest], Callback, CRLDbHandle) ->
- case Callback:lookup(DistPoint, CRLDbHandle) of
+distpoints_lookup([DistPoint | Rest], Issuer, Callback, CRLDbHandle) ->
+ Result =
+ try Callback:lookup(DistPoint, Issuer, CRLDbHandle)
+ catch
+ error:undef ->
+ %% The callback module still uses the 2-argument
+ %% version of the lookup function.
+ Callback:lookup(DistPoint, CRLDbHandle)
+ end,
+ case Result of
not_available ->
- distpoints_lookup(Rest, Callback, CRLDbHandle);
+ distpoints_lookup(Rest, Issuer, Callback, CRLDbHandle);
CRLs ->
[{DistPoint, {CRL, public_key:der_decode('CertificateList', CRL)}} || CRL <- CRLs]
end.
-cert_sign(?rsaEncryption) ->
+sign_algo(?rsaEncryption) ->
rsa;
-cert_sign(?'id-ecPublicKey') ->
+sign_algo(?'id-ecPublicKey') ->
ecdsa;
-cert_sign(?'id-dsa') ->
+sign_algo(?'id-dsa') ->
dsa;
-cert_sign(Alg) ->
+sign_algo(Alg) ->
{_, Sign} =public_key:pkix_sign_types(Alg),
Sign.
-is_acceptable_hash_sign({_, Sign} = Algos, Sign, _, SupportedHashSigns) ->
- is_acceptable_hash_sign(Algos, SupportedHashSigns);
-is_acceptable_hash_sign(Algos,_, KeyExAlgo, SupportedHashSigns) when KeyExAlgo == dh_ecdsa;
- KeyExAlgo == ecdh_rsa;
- KeyExAlgo == ecdh_ecdsa ->
+is_acceptable_hash_sign(Algos, _, _, KeyExAlgo, SupportedHashSigns) when
+ KeyExAlgo == dh_dss;
+ KeyExAlgo == dh_rsa;
+ KeyExAlgo == dh_ecdsa ->
+ %% dh_* could be called only dh in TLS-1.2
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign(Algos, rsa, ecdsa, ecdh_rsa, SupportedHashSigns) ->
is_acceptable_hash_sign(Algos, SupportedHashSigns);
-is_acceptable_hash_sign(_,_,_,_) ->
- false.
+is_acceptable_hash_sign({_, rsa} = Algos, rsa, _, dhe_rsa, SupportedHashSigns) ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign({_, rsa} = Algos, rsa, rsa, ecdhe_rsa, SupportedHashSigns) ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign({_, rsa} = Algos, rsa, rsa, rsa, SupportedHashSigns) ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign({_, rsa} = Algos, rsa, _, srp_rsa, SupportedHashSigns) ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign({_, rsa} = Algos, rsa, _, rsa_psk, SupportedHashSigns) ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign({_, dsa} = Algos, dsa, _, dhe_dss, SupportedHashSigns) ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign({_, dsa} = Algos, dsa, _, srp_dss, SupportedHashSigns) ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign({_, ecdsa} = Algos, ecdsa, _, dhe_ecdsa, SupportedHashSigns) ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign({_, ecdsa} = Algos, ecdsa, ecdsa, ecdhe_ecdsa, SupportedHashSigns) ->
+ is_acceptable_hash_sign(Algos, SupportedHashSigns);
+is_acceptable_hash_sign(_, _, _, KeyExAlgo, _) when
+ KeyExAlgo == psk;
+ KeyExAlgo == dhe_psk;
+ KeyExAlgo == srp_anon;
+ KeyExAlgo == dh_anon;
+ KeyExAlgo == ecdhe_anon
+ ->
+ true;
+is_acceptable_hash_sign(_,_, _,_,_) ->
+ false.
+
is_acceptable_hash_sign(Algos, SupportedHashSigns) ->
lists:member(Algos, SupportedHashSigns).
+is_acceptable_cert_type(Sign, _HashSigns, Types) ->
+ lists:member(sign_type(Sign), binary_to_list(Types)).
+
+is_supported_sign(Sign, HashSigns) ->
+ [] =/= lists:dropwhile(fun({_, S}) when S =/= Sign ->
+ true;
+ (_)->
+ false
+ end, HashSigns).
+sign_type(rsa) ->
+ ?RSA_SIGN;
+sign_type(dsa) ->
+ ?DSS_SIGN;
+sign_type(ecdsa) ->
+ ?ECDSA_SIGN.
+
+
+bad_key(#'DSAPrivateKey'{}) ->
+ unacceptable_dsa_key;
+bad_key(#'RSAPrivateKey'{}) ->
+ unacceptable_rsa_key;
+bad_key(#'ECPrivateKey'{}) ->
+ unacceptable_ecdsa_key.
+
+available_signature_algs(undefined, SupportedHashSigns, _, {Major, Minor}) when
+ (Major >= 3) andalso (Minor >= 3) ->
+ SupportedHashSigns;
+available_signature_algs(#hash_sign_algos{hash_sign_algos = ClientHashSigns}, SupportedHashSigns,
+ _, {Major, Minor}) when (Major >= 3) andalso (Minor >= 3) ->
+ sets:to_list(sets:intersection(sets:from_list(ClientHashSigns),
+ sets:from_list(SupportedHashSigns)));
+available_signature_algs(_, _, _, _) ->
+ undefined.
+
diff --git a/lib/ssl/src/ssl_handshake.hrl b/lib/ssl/src/ssl_handshake.hrl
index e7b118de10..fde92035a2 100644
--- a/lib/ssl/src/ssl_handshake.hrl
+++ b/lib/ssl/src/ssl_handshake.hrl
@@ -53,7 +53,8 @@
-define(NUM_OF_SESSION_ID_BYTES, 32). % TSL 1.1 & SSL 3
-define(NUM_OF_PREMASTERSECRET_BYTES, 48).
-define(DEFAULT_DIFFIE_HELLMAN_GENERATOR, 2).
--define(DEFAULT_DIFFIE_HELLMAN_PRIME, 16#FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF).
+-define(DEFAULT_DIFFIE_HELLMAN_PRIME,
+ 16#FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Handsake protocol - RFC 4346 section 7.4
diff --git a/lib/ssl/src/ssl_internal.hrl b/lib/ssl/src/ssl_internal.hrl
index 076e663cd4..c19c1787ff 100644
--- a/lib/ssl/src/ssl_internal.hrl
+++ b/lib/ssl/src/ssl_internal.hrl
@@ -133,10 +133,14 @@
%% the client?
honor_cipher_order = false :: boolean(),
padding_check = true :: boolean(),
+ %%Should we use 1/n-1 or 0/n splitting to mitigate BEAST, or disable
+ %%mitigation entirely?
+ beast_mitigation = one_n_minus_one :: one_n_minus_one | zero_n | disabled,
fallback = false :: boolean(),
crl_check :: boolean() | peer | best_effort,
crl_cache,
- signature_algs
+ signature_algs,
+ v2_hello_compatible :: boolean()
}).
-record(socket_options,
diff --git a/lib/ssl/src/ssl_manager.erl b/lib/ssl/src/ssl_manager.erl
index 60b4fbe995..5bd9521de7 100644
--- a/lib/ssl/src/ssl_manager.erl
+++ b/lib/ssl/src/ssl_manager.erl
@@ -67,6 +67,7 @@
-define(CLEAN_SESSION_DB, 60000).
-define(CLEAN_CERT_DB, 500).
-define(DEFAULT_MAX_SESSION_CACHE, 1000).
+-define(LOAD_MITIGATION, 10).
%%====================================================================
%% API
@@ -114,13 +115,25 @@ start_link_dist(Opts) ->
%% Description: Do necessary initializations for a new connection.
%%--------------------------------------------------------------------
connection_init({der, _} = Trustedcerts, Role, CRLCache) ->
- call({connection_init, Trustedcerts, Role, CRLCache});
+ case bypass_pem_cache() of
+ true ->
+ {ok, Extracted} = ssl_pkix_db:extract_trusted_certs(Trustedcerts),
+ call({connection_init, Extracted, Role, CRLCache});
+ false ->
+ call({connection_init, Trustedcerts, Role, CRLCache})
+ end;
connection_init(<<>> = Trustedcerts, Role, CRLCache) ->
call({connection_init, Trustedcerts, Role, CRLCache});
connection_init(Trustedcerts, Role, CRLCache) ->
- call({connection_init, Trustedcerts, Role, CRLCache}).
+ case bypass_pem_cache() of
+ true ->
+ {ok, Extracted} = ssl_pkix_db:extract_trusted_certs(Trustedcerts),
+ call({connection_init, Extracted, Role, CRLCache});
+ false ->
+ call({connection_init, Trustedcerts, Role, CRLCache})
+ end.
%%--------------------------------------------------------------------
-spec cache_pem_file(binary(), term()) -> {ok, term()} | {error, reason()}.
@@ -128,13 +141,18 @@ connection_init(Trustedcerts, Role, CRLCache) ->
%% Description: Cache a pem file and return its content.
%%--------------------------------------------------------------------
cache_pem_file(File, DbHandle) ->
- case ssl_pkix_db:lookup_cached_pem(DbHandle, File) of
- [{Content,_}] ->
- {ok, Content};
- [Content] ->
- {ok, Content};
- undefined ->
- call({cache_pem, File})
+ case bypass_pem_cache() of
+ true ->
+ ssl_pkix_db:decode_pem_file(File);
+ false ->
+ case ssl_pkix_db:lookup_cached_pem(DbHandle, File) of
+ [{Content,_}] ->
+ {ok, Content};
+ [Content] ->
+ {ok, Content};
+ undefined ->
+ call({cache_pem, File})
+ end
end.
%%--------------------------------------------------------------------
@@ -196,10 +214,12 @@ register_session(Port, Session) ->
%%--------------------------------------------------------------------
-spec invalidate_session(host(), inet:port_number(), #session{}) -> ok.
invalidate_session(Host, Port, Session) ->
+ load_mitigation(),
cast({invalidate_session, Host, Port, Session}).
-spec invalidate_session(inet:port_number(), #session{}) -> ok.
invalidate_session(Port, Session) ->
+ load_mitigation(),
cast({invalidate_session, Port, Session}).
-spec invalidate_pem(File::binary()) -> ok.
@@ -503,6 +523,14 @@ delay_time() ->
?CLEAN_SESSION_DB
end.
+bypass_pem_cache() ->
+ case application:get_env(ssl, bypass_pem_cache) of
+ {ok, Bool} when is_boolean(Bool) ->
+ Bool;
+ _ ->
+ false
+ end.
+
max_session_cache_size(CacheType) ->
case application:get_env(ssl, CacheType) of
{ok, Size} when is_integer(Size) ->
@@ -719,3 +747,11 @@ invalidate_session_cache(undefined, CacheCb, Cache) ->
start_session_validator(Cache, CacheCb, {invalidate_before, erlang:monotonic_time()}, undefined);
invalidate_session_cache(Pid, _CacheCb, _Cache) ->
Pid.
+
+load_mitigation() ->
+ MSec = rand:uniform(?LOAD_MITIGATION),
+ receive
+ after
+ MSec ->
+ continue
+ end.
diff --git a/lib/ssl/src/ssl_pkix_db.erl b/lib/ssl/src/ssl_pkix_db.erl
index b16903d7c7..0006ce14d9 100644
--- a/lib/ssl/src/ssl_pkix_db.erl
+++ b/lib/ssl/src/ssl_pkix_db.erl
@@ -29,10 +29,11 @@
-include_lib("kernel/include/file.hrl").
-export([create/0, add_crls/3, remove_crls/2, remove/1, add_trusted_certs/3,
+ extract_trusted_certs/1,
remove_trusted_certs/2, insert/3, remove/2, clear/1, db_size/1,
ref_count/3, lookup_trusted_cert/4, foldl/3, select_cert_by_issuer/2,
lookup_cached_pem/2, cache_pem_file/2, cache_pem_file/3,
- lookup/2]).
+ decode_pem_file/1, lookup/2]).
%%====================================================================
%% Internal application API
@@ -82,12 +83,22 @@ remove(Dbs) ->
%% <SerialNumber, Issuer>. Ref is used as it is specified
%% for each connection which certificates are trusted.
%%--------------------------------------------------------------------
-lookup_trusted_cert(DbHandle, Ref, SerialNumber, Issuer) ->
+lookup_trusted_cert(DbHandle, Ref, SerialNumber, Issuer) when is_reference(Ref) ->
case lookup({Ref, SerialNumber, Issuer}, DbHandle) of
undefined ->
undefined;
[Certs] ->
{ok, Certs}
+ end;
+lookup_trusted_cert(_DbHandle, {extracted,Certs}, SerialNumber, Issuer) ->
+ try
+ [throw(Cert)
+ || {decoded, {{_Ref,CertSerial,CertIssuer}, Cert}} <- Certs,
+ CertSerial =:= SerialNumber, CertIssuer =:= Issuer],
+ undefined
+ catch
+ Cert ->
+ {ok, Cert}
end.
lookup_cached_pem([_, _, PemChache | _], File) ->
@@ -103,6 +114,9 @@ lookup_cached_pem(PemChache, File) ->
%% runtime database. Returns Ref that should be handed to lookup_trusted_cert
%% together with the cert serialnumber and issuer.
%%--------------------------------------------------------------------
+add_trusted_certs(_Pid, {extracted, _} = Certs, _) ->
+ {ok, Certs};
+
add_trusted_certs(_Pid, {der, DerList}, [CertDb, _,_ | _]) ->
NewRef = make_ref(),
add_certs_from_der(DerList, NewRef, CertDb),
@@ -122,6 +136,21 @@ add_trusted_certs(_Pid, File, [CertsDb, RefDb, PemChache | _] = Db) ->
undefined ->
new_trusted_cert_entry(File, Db)
end.
+
+extract_trusted_certs({der, DerList}) ->
+ {ok, {extracted, certs_from_der(DerList)}};
+extract_trusted_certs(File) ->
+ case file:read_file(File) of
+ {ok, PemBin} ->
+ Content = public_key:pem_decode(PemBin),
+ DerList = [Cert || {'Certificate', Cert, not_encrypted} <- Content],
+ {ok, {extracted, certs_from_der(DerList)}};
+ Error ->
+ %% Have to simulate a failure happening in a server for
+ %% external handlers.
+ {error, {badmatch, Error}}
+ end.
+
%%--------------------------------------------------------------------
%%
%% Description: Cache file as binary in DB
@@ -141,6 +170,18 @@ cache_pem_file(Ref, File, [_CertsDb, _RefDb, PemChache| _]) ->
insert(File, {Content, Ref}, PemChache),
{ok, Content}.
+-spec decode_pem_file(binary()) -> {ok, term()}.
+decode_pem_file(File) ->
+ case file:read_file(File) of
+ {ok, PemBin} ->
+ Content = public_key:pem_decode(PemBin),
+ {ok, Content};
+ Error ->
+ %% Have to simulate a failure happening in a server for
+ %% external handlers.
+ {error, {badmatch, Error}}
+ end.
+
%%--------------------------------------------------------------------
-spec remove_trusted_certs(reference(), db_handle()) -> ok.
%%
@@ -203,6 +244,8 @@ select_cert_by_issuer(Cache, Issuer) ->
%%
%% Description: Updates a reference counter in a <Db>.
%%--------------------------------------------------------------------
+ref_count({extracted, _}, _Db, _N) ->
+ not_cached;
ref_count(Key, Db, N) ->
ets:update_counter(Db,Key,N).
@@ -248,23 +291,39 @@ add_certs_from_der(DerList, Ref, CertsDb) ->
[Add(Cert) || Cert <- DerList],
ok.
+certs_from_der(DerList) ->
+ Ref = make_ref(),
+ [Decoded || Cert <- DerList,
+ Decoded <- [decode_certs(Ref, Cert)],
+ Decoded =/= undefined].
+
add_certs_from_pem(PemEntries, Ref, CertsDb) ->
Add = fun(Cert) -> add_certs(Cert, Ref, CertsDb) end,
[Add(Cert) || {'Certificate', Cert, not_encrypted} <- PemEntries],
ok.
add_certs(Cert, Ref, CertsDb) ->
+ try
+ {decoded, {Key, Val}} = decode_certs(Ref, Cert),
+ insert(Key, Val, CertsDb)
+ catch
+ error:_ ->
+ ok
+ end.
+
+decode_certs(Ref, Cert) ->
try ErlCert = public_key:pkix_decode_cert(Cert, otp),
TBSCertificate = ErlCert#'OTPCertificate'.tbsCertificate,
SerialNumber = TBSCertificate#'OTPTBSCertificate'.serialNumber,
Issuer = public_key:pkix_normalize_name(
TBSCertificate#'OTPTBSCertificate'.issuer),
- insert({Ref, SerialNumber, Issuer}, {Cert,ErlCert}, CertsDb)
+ {decoded, {{Ref, SerialNumber, Issuer}, {Cert, ErlCert}}}
catch
error:_ ->
Report = io_lib:format("SSL WARNING: Ignoring a CA cert as "
"it could not be correctly decoded.~n", []),
- error_logger:info_report(Report)
+ error_logger:info_report(Report),
+ undefined
end.
new_trusted_cert_entry(File, [CertsDb, RefDb, _ | _] = Db) ->
diff --git a/lib/ssl/src/ssl_record.erl b/lib/ssl/src/ssl_record.erl
index 866bfcef7e..71cd0279f3 100644
--- a/lib/ssl/src/ssl_record.erl
+++ b/lib/ssl/src/ssl_record.erl
@@ -30,8 +30,7 @@
-include("ssl_alert.hrl").
%% Connection state handling
--export([init_connection_states/1,
- current_connection_state/2, pending_connection_state/2,
+-export([initial_security_params/1, current_connection_state/2, pending_connection_state/2,
activate_pending_connection_state/2,
set_security_params/3,
set_mac_secret/4,
@@ -39,7 +38,8 @@
set_pending_cipher_state/4,
set_renegotiation_flag/2,
set_client_verify_data/3,
- set_server_verify_data/3]).
+ set_server_verify_data/3,
+ empty_connection_state/2, initial_connection_state/2, record_protocol_role/1]).
%% Encoding records
-export([encode_handshake/3, encode_alert_record/3,
@@ -52,118 +52,92 @@
-export([cipher/4, decipher/4, is_correct_mac/2,
cipher_aead/4, decipher_aead/4]).
--export_type([ssl_version/0, ssl_atom_version/0]).
+-export_type([ssl_version/0, ssl_atom_version/0, connection_states/0, connection_state/0]).
-type ssl_version() :: {integer(), integer()}.
-type ssl_atom_version() :: tls_record:tls_atom_version().
-
+-type connection_states() :: term(). %% Map
+-type connection_state() :: term(). %% Map
%%====================================================================
%% Internal application API
%%====================================================================
+
%%--------------------------------------------------------------------
--spec init_connection_states(client | server) -> #connection_states{}.
+-spec current_connection_state(connection_states(), read | write) ->
+ connection_state().
%%
-%% Description: Creates a connection_states record with appropriate
-%% values for the initial SSL connection setup.
-%%--------------------------------------------------------------------
-init_connection_states(Role) ->
- ConnectionEnd = record_protocol_role(Role),
- Current = initial_connection_state(ConnectionEnd),
- Pending = empty_connection_state(ConnectionEnd),
- #connection_states{current_read = Current,
- pending_read = Pending,
- current_write = Current,
- pending_write = Pending
- }.
-
-%%--------------------------------------------------------------------
--spec current_connection_state(#connection_states{}, read | write) ->
- #connection_state{}.
-%%
-%% Description: Returns the instance of the connection_state record
+%% Description: Returns the instance of the connection_state map
%% that is currently defined as the current conection state.
%%--------------------------------------------------------------------
-current_connection_state(#connection_states{current_read = Current},
- read) ->
- Current;
-current_connection_state(#connection_states{current_write = Current},
- write) ->
- Current.
+current_connection_state(ConnectionStates, read) ->
+ maps:get(current_read, ConnectionStates);
+current_connection_state(ConnectionStates, write) ->
+ maps:get(current_write, ConnectionStates).
%%--------------------------------------------------------------------
--spec pending_connection_state(#connection_states{}, read | write) ->
- term().
+-spec pending_connection_state(connection_states(), read | write) ->
+ connection_state().
%%
-%% Description: Returns the instance of the connection_state record
-%% that is currently defined as the pending conection state.
+%% Description: Returns the instance of the connection_state map
+%% that is pendingly defined as the pending conection state.
%%--------------------------------------------------------------------
-pending_connection_state(#connection_states{pending_read = Pending},
- read) ->
- Pending;
-pending_connection_state(#connection_states{pending_write = Pending},
- write) ->
- Pending.
-
+pending_connection_state(ConnectionStates, read) ->
+ maps:get(pending_read, ConnectionStates);
+pending_connection_state(ConnectionStates, write) ->
+ maps:get(pending_write, ConnectionStates).
%%--------------------------------------------------------------------
--spec activate_pending_connection_state(#connection_states{}, read | write) ->
- #connection_states{}.
+-spec activate_pending_connection_state(connection_states(), read | write) ->
+ connection_states().
%%
%% Description: Creates a new instance of the connection_states record
%% where the pending state of <Type> has been activated.
%%--------------------------------------------------------------------
-activate_pending_connection_state(States =
- #connection_states{current_read = Current,
- pending_read = Pending},
+activate_pending_connection_state(#{current_read := Current,
+ pending_read := Pending} = States,
read) ->
- NewCurrent = Pending#connection_state{epoch = dtls_next_epoch(Current),
- sequence_number = 0},
- SecParams = Pending#connection_state.security_parameters,
+ #{secure_renegotiation := SecureRenegotation} = Current,
+ #{beast_mitigation := BeastMitigation,
+ security_parameters := SecParams} = Pending,
+ NewCurrent = Pending#{sequence_number => 0},
ConnectionEnd = SecParams#security_parameters.connection_end,
- EmptyPending = empty_connection_state(ConnectionEnd),
- SecureRenegotation = NewCurrent#connection_state.secure_renegotiation,
- NewPending = EmptyPending#connection_state{secure_renegotiation = SecureRenegotation},
- States#connection_states{current_read = NewCurrent,
- pending_read = NewPending
- };
-
-activate_pending_connection_state(States =
- #connection_states{current_write = Current,
- pending_write = Pending},
+ EmptyPending = empty_connection_state(ConnectionEnd, BeastMitigation),
+ NewPending = EmptyPending#{secure_renegotiation => SecureRenegotation},
+ States#{current_read => NewCurrent,
+ pending_read => NewPending
+ };
+
+activate_pending_connection_state(#{current_write := Current,
+ pending_write := Pending} = States,
write) ->
- NewCurrent = Pending#connection_state{epoch = dtls_next_epoch(Current),
- sequence_number = 0},
- SecParams = Pending#connection_state.security_parameters,
+ NewCurrent = Pending#{sequence_number => 0},
+ #{secure_renegotiation := SecureRenegotation} = Current,
+ #{beast_mitigation := BeastMitigation,
+ security_parameters := SecParams} = Pending,
ConnectionEnd = SecParams#security_parameters.connection_end,
- EmptyPending = empty_connection_state(ConnectionEnd),
- SecureRenegotation = NewCurrent#connection_state.secure_renegotiation,
- NewPending = EmptyPending#connection_state{secure_renegotiation = SecureRenegotation},
- States#connection_states{current_write = NewCurrent,
- pending_write = NewPending
- }.
-
+ EmptyPending = empty_connection_state(ConnectionEnd, BeastMitigation),
+ NewPending = EmptyPending#{secure_renegotiation => SecureRenegotation},
+ States#{current_write => NewCurrent,
+ pending_write => NewPending
+ }.
%%--------------------------------------------------------------------
-spec set_security_params(#security_parameters{}, #security_parameters{},
- #connection_states{}) -> #connection_states{}.
+ connection_states()) -> connection_states().
%%
%% Description: Creates a new instance of the connection_states record
%% where the pending states gets its security parameters updated.
%%--------------------------------------------------------------------
-set_security_params(ReadParams, WriteParams, States =
- #connection_states{pending_read = Read,
- pending_write = Write}) ->
- States#connection_states{pending_read =
- Read#connection_state{security_parameters =
- ReadParams},
- pending_write =
- Write#connection_state{security_parameters =
- WriteParams}
- }.
+set_security_params(ReadParams, WriteParams,
+ #{pending_read := Read,
+ pending_write := Write} = States) ->
+ States#{pending_read => Read#{security_parameters => ReadParams},
+ pending_write => Write#{security_parameters => WriteParams}
+ }.
%%--------------------------------------------------------------------
-spec set_mac_secret(binary(), binary(), client | server,
- #connection_states{}) -> #connection_states{}.
+ connection_states()) -> connection_states().
%%
%% Description: update the mac_secret field in pending connection states
%%--------------------------------------------------------------------
@@ -173,160 +147,165 @@ set_mac_secret(ClientWriteMacSecret, ServerWriteMacSecret, server, States) ->
set_mac_secret(ClientWriteMacSecret, ServerWriteMacSecret, States).
set_mac_secret(ReadMacSecret, WriteMacSecret,
- States = #connection_states{pending_read = Read,
- pending_write = Write}) ->
- States#connection_states{
- pending_read = Read#connection_state{mac_secret = ReadMacSecret},
- pending_write = Write#connection_state{mac_secret = WriteMacSecret}
+ States = #{pending_read := Read,
+ pending_write := Write}) ->
+ States#{pending_read => Read#{mac_secret => ReadMacSecret},
+ pending_write => Write#{mac_secret => WriteMacSecret}
}.
%%--------------------------------------------------------------------
--spec set_master_secret(binary(), #connection_states{}) -> #connection_states{}.
+-spec set_master_secret(binary(), connection_states()) -> connection_states().
%%
%% Description: Set master_secret in pending connection states
%%--------------------------------------------------------------------
set_master_secret(MasterSecret,
- States = #connection_states{pending_read = Read,
- pending_write = Write}) ->
- ReadSecPar = Read#connection_state.security_parameters,
- Read1 = Read#connection_state{
- security_parameters = ReadSecPar#security_parameters{
- master_secret = MasterSecret}},
- WriteSecPar = Write#connection_state.security_parameters,
- Write1 = Write#connection_state{
- security_parameters = WriteSecPar#security_parameters{
- master_secret = MasterSecret}},
- States#connection_states{pending_read = Read1, pending_write = Write1}.
-
-%%--------------------------------------------------------------------
--spec set_renegotiation_flag(boolean(), #connection_states{}) -> #connection_states{}.
+ States = #{pending_read := Read = #{security_parameters := ReadSecPar},
+ pending_write := Write = #{security_parameters := WriteSecPar}}) ->
+ Read1 = Read#{security_parameters => ReadSecPar#security_parameters{
+ master_secret = MasterSecret}},
+ Write1 = Write#{security_parameters => WriteSecPar#security_parameters{
+ master_secret = MasterSecret}},
+ States#{pending_read => Read1, pending_write => Write1}.
+
+%%--------------------------------------------------------------------
+-spec set_renegotiation_flag(boolean(), connection_states()) -> connection_states().
%%
%% Description: Set secure_renegotiation in pending connection states
%%--------------------------------------------------------------------
-set_renegotiation_flag(Flag, #connection_states{
- current_read = CurrentRead0,
- current_write = CurrentWrite0,
- pending_read = PendingRead0,
- pending_write = PendingWrite0}
+set_renegotiation_flag(Flag, #{current_read := CurrentRead0,
+ current_write := CurrentWrite0,
+ pending_read := PendingRead0,
+ pending_write := PendingWrite0}
= ConnectionStates) ->
- CurrentRead = CurrentRead0#connection_state{secure_renegotiation = Flag},
- CurrentWrite = CurrentWrite0#connection_state{secure_renegotiation = Flag},
- PendingRead = PendingRead0#connection_state{secure_renegotiation = Flag},
- PendingWrite = PendingWrite0#connection_state{secure_renegotiation = Flag},
- ConnectionStates#connection_states{current_read = CurrentRead,
- current_write = CurrentWrite,
- pending_read = PendingRead,
- pending_write = PendingWrite}.
+ CurrentRead = CurrentRead0#{secure_renegotiation => Flag},
+ CurrentWrite = CurrentWrite0#{secure_renegotiation => Flag},
+ PendingRead = PendingRead0#{secure_renegotiation => Flag},
+ PendingWrite = PendingWrite0#{secure_renegotiation => Flag},
+ ConnectionStates#{current_read => CurrentRead,
+ current_write => CurrentWrite,
+ pending_read => PendingRead,
+ pending_write => PendingWrite}.
%%--------------------------------------------------------------------
-spec set_client_verify_data(current_read | current_write | current_both,
- binary(), #connection_states{})->
- #connection_states{}.
+ binary(), connection_states())->
+ connection_states().
%%
%% Description: Set verify data in connection states.
%%--------------------------------------------------------------------
set_client_verify_data(current_read, Data,
- #connection_states{current_read = CurrentRead0,
- pending_write = PendingWrite0}
+ #{current_read := CurrentRead0,
+ pending_write := PendingWrite0}
= ConnectionStates) ->
- CurrentRead = CurrentRead0#connection_state{client_verify_data = Data},
- PendingWrite = PendingWrite0#connection_state{client_verify_data = Data},
- ConnectionStates#connection_states{current_read = CurrentRead,
- pending_write = PendingWrite};
+ CurrentRead = CurrentRead0#{client_verify_data => Data},
+ PendingWrite = PendingWrite0#{client_verify_data => Data},
+ ConnectionStates#{current_read => CurrentRead,
+ pending_write => PendingWrite};
set_client_verify_data(current_write, Data,
- #connection_states{pending_read = PendingRead0,
- current_write = CurrentWrite0}
+ #{pending_read := PendingRead0,
+ current_write := CurrentWrite0}
= ConnectionStates) ->
- PendingRead = PendingRead0#connection_state{client_verify_data = Data},
- CurrentWrite = CurrentWrite0#connection_state{client_verify_data = Data},
- ConnectionStates#connection_states{pending_read = PendingRead,
- current_write = CurrentWrite};
+ PendingRead = PendingRead0#{client_verify_data => Data},
+ CurrentWrite = CurrentWrite0#{client_verify_data => Data},
+ ConnectionStates#{pending_read => PendingRead,
+ current_write => CurrentWrite};
set_client_verify_data(current_both, Data,
- #connection_states{current_read = CurrentRead0,
- current_write = CurrentWrite0}
+ #{current_read := CurrentRead0,
+ current_write := CurrentWrite0}
= ConnectionStates) ->
- CurrentRead = CurrentRead0#connection_state{client_verify_data = Data},
- CurrentWrite = CurrentWrite0#connection_state{client_verify_data = Data},
- ConnectionStates#connection_states{current_read = CurrentRead,
- current_write = CurrentWrite}.
+ CurrentRead = CurrentRead0#{client_verify_data => Data},
+ CurrentWrite = CurrentWrite0#{client_verify_data => Data},
+ ConnectionStates#{current_read => CurrentRead,
+ current_write => CurrentWrite}.
%%--------------------------------------------------------------------
-spec set_server_verify_data(current_read | current_write | current_both,
- binary(), #connection_states{})->
- #connection_states{}.
+ binary(), connection_states())->
+ connection_states().
%%
%% Description: Set verify data in pending connection states.
%%--------------------------------------------------------------------
set_server_verify_data(current_write, Data,
- #connection_states{pending_read = PendingRead0,
- current_write = CurrentWrite0}
+ #{pending_read := PendingRead0,
+ current_write := CurrentWrite0}
= ConnectionStates) ->
- PendingRead = PendingRead0#connection_state{server_verify_data = Data},
- CurrentWrite = CurrentWrite0#connection_state{server_verify_data = Data},
- ConnectionStates#connection_states{pending_read = PendingRead,
- current_write = CurrentWrite};
+ PendingRead = PendingRead0#{server_verify_data => Data},
+ CurrentWrite = CurrentWrite0#{server_verify_data => Data},
+ ConnectionStates#{pending_read => PendingRead,
+ current_write => CurrentWrite};
set_server_verify_data(current_read, Data,
- #connection_states{current_read = CurrentRead0,
- pending_write = PendingWrite0}
+ #{current_read := CurrentRead0,
+ pending_write := PendingWrite0}
= ConnectionStates) ->
- CurrentRead = CurrentRead0#connection_state{server_verify_data = Data},
- PendingWrite = PendingWrite0#connection_state{server_verify_data = Data},
- ConnectionStates#connection_states{current_read = CurrentRead,
- pending_write = PendingWrite};
+ CurrentRead = CurrentRead0#{server_verify_data => Data},
+ PendingWrite = PendingWrite0#{server_verify_data => Data},
+ ConnectionStates#{current_read => CurrentRead,
+ pending_write => PendingWrite};
set_server_verify_data(current_both, Data,
- #connection_states{current_read = CurrentRead0,
- current_write = CurrentWrite0}
+ #{current_read := CurrentRead0,
+ current_write := CurrentWrite0}
= ConnectionStates) ->
- CurrentRead = CurrentRead0#connection_state{server_verify_data = Data},
- CurrentWrite = CurrentWrite0#connection_state{server_verify_data = Data},
- ConnectionStates#connection_states{current_read = CurrentRead,
- current_write = CurrentWrite}.
+ CurrentRead = CurrentRead0#{server_verify_data => Data},
+ CurrentWrite = CurrentWrite0#{server_verify_data => Data},
+ ConnectionStates#{current_read => CurrentRead,
+ current_write => CurrentWrite}.
%%--------------------------------------------------------------------
--spec set_pending_cipher_state(#connection_states{}, #cipher_state{},
+-spec set_pending_cipher_state(connection_states(), #cipher_state{},
#cipher_state{}, client | server) ->
- #connection_states{}.
+ connection_states().
%%
%% Description: Set the cipher state in the specified pending connection state.
%%--------------------------------------------------------------------
-set_pending_cipher_state(#connection_states{pending_read = Read,
- pending_write = Write} = States,
+set_pending_cipher_state(#{pending_read := Read,
+ pending_write := Write} = States,
ClientState, ServerState, server) ->
- States#connection_states{
- pending_read = Read#connection_state{cipher_state = ClientState},
- pending_write = Write#connection_state{cipher_state = ServerState}};
+ States#{
+ pending_read => Read#{cipher_state => ClientState},
+ pending_write => Write#{cipher_state => ServerState}};
-set_pending_cipher_state(#connection_states{pending_read = Read,
- pending_write = Write} = States,
+set_pending_cipher_state(#{pending_read := Read,
+ pending_write := Write} = States,
ClientState, ServerState, client) ->
- States#connection_states{
- pending_read = Read#connection_state{cipher_state = ServerState},
- pending_write = Write#connection_state{cipher_state = ClientState}}.
+ States#{
+ pending_read => Read#{cipher_state => ServerState},
+ pending_write => Write#{cipher_state => ClientState}}.
%%--------------------------------------------------------------------
--spec encode_handshake(iolist(), ssl_version(), #connection_states{}) ->
- {iolist(), #connection_states{}}.
+-spec encode_handshake(iolist(), ssl_version(), connection_states()) ->
+ {iolist(), connection_states()}.
%%
%% Description: Encodes a handshake message to send on the ssl-socket.
%%--------------------------------------------------------------------
encode_handshake(Frag, Version,
- #connection_states{current_write =
- #connection_state{
- security_parameters =
- #security_parameters{bulk_cipher_algorithm = BCA}}} =
- ConnectionStates) ->
+ #{current_write :=
+ #{beast_mitigation := BeastMitigation,
+ security_parameters :=
+ #security_parameters{bulk_cipher_algorithm = BCA}}} =
+ ConnectionStates)
+ when is_list(Frag) ->
case iolist_size(Frag) of
N when N > ?MAX_PLAIN_TEXT_LENGTH ->
- Data = split_bin(iolist_to_binary(Frag), ?MAX_PLAIN_TEXT_LENGTH, Version, BCA),
+ Data = split_bin(iolist_to_binary(Frag), ?MAX_PLAIN_TEXT_LENGTH, Version, BCA, BeastMitigation),
encode_iolist(?HANDSHAKE, Data, Version, ConnectionStates);
_ ->
encode_plain_text(?HANDSHAKE, Version, Frag, ConnectionStates)
- end.
+ end;
+%% TODO: this is a workarround for DTLS
+%%
+%% DTLS need to select the connection write state based on Epoch it wants to
+%% send this fragment in. That Epoch does not nessarily has to be the same
+%% as the current_write epoch.
+%% The right solution might be to pass the WriteState instead of the ConnectionStates,
+%% however, this will require substantion API changes.
+encode_handshake(Frag, Version, ConnectionStates) ->
+ encode_plain_text(?HANDSHAKE, Version, Frag, ConnectionStates).
+
%%--------------------------------------------------------------------
--spec encode_alert_record(#alert{}, ssl_version(), #connection_states{}) ->
- {iolist(), #connection_states{}}.
+-spec encode_alert_record(#alert{}, ssl_version(), connection_states()) ->
+ {iolist(), connection_states()}.
%%
%% Description: Encodes an alert message to send on the ssl-socket.
%%--------------------------------------------------------------------
@@ -336,8 +315,8 @@ encode_alert_record(#alert{level = Level, description = Description},
ConnectionStates).
%%--------------------------------------------------------------------
--spec encode_change_cipher_spec(ssl_version(), #connection_states{}) ->
- {iolist(), #connection_states{}}.
+-spec encode_change_cipher_spec(ssl_version(), connection_states()) ->
+ {iolist(), connection_states()}.
%%
%% Description: Encodes a change_cipher_spec-message to send on the ssl socket.
%%--------------------------------------------------------------------
@@ -345,17 +324,17 @@ encode_change_cipher_spec(Version, ConnectionStates) ->
encode_plain_text(?CHANGE_CIPHER_SPEC, Version, <<1:8>>, ConnectionStates).
%%--------------------------------------------------------------------
--spec encode_data(binary(), ssl_version(), #connection_states{}) ->
- {iolist(), #connection_states{}}.
+-spec encode_data(binary(), ssl_version(), connection_states()) ->
+ {iolist(), connection_states()}.
%%
%% Description: Encodes data to send on the ssl-socket.
%%--------------------------------------------------------------------
encode_data(Frag, Version,
- #connection_states{current_write = #connection_state{
- security_parameters =
+ #{current_write := #{beast_mitigation := BeastMitigation,
+ security_parameters :=
#security_parameters{bulk_cipher_algorithm = BCA}}} =
ConnectionStates) ->
- Data = split_bin(Frag, ?MAX_PLAIN_TEXT_LENGTH, Version, BCA),
+ Data = split_bin(Frag, ?MAX_PLAIN_TEXT_LENGTH, Version, BCA, BeastMitigation),
encode_iolist(?APPLICATION_DATA, Data, Version, ConnectionStates).
uncompress(?NULL, Data, CS) ->
@@ -373,73 +352,74 @@ compressions() ->
[?byte(?NULL)].
%%--------------------------------------------------------------------
--spec cipher(ssl_version(), iodata(), #connection_state{}, MacHash::binary()) ->
- {CipherFragment::binary(), #connection_state{}}.
+-spec cipher(ssl_version(), iodata(), connection_state(), MacHash::binary()) ->
+ {CipherFragment::binary(), connection_state()}.
%%
%% Description: Payload encryption
%%--------------------------------------------------------------------
cipher(Version, Fragment,
- #connection_state{cipher_state = CipherS0,
- security_parameters=
- #security_parameters{bulk_cipher_algorithm =
- BulkCipherAlgo}
- } = WriteState0, MacHash) ->
-
+ #{cipher_state := CipherS0,
+ security_parameters :=
+ #security_parameters{bulk_cipher_algorithm =
+ BulkCipherAlgo}
+ } = WriteState0, MacHash) ->
+
{CipherFragment, CipherS1} =
ssl_cipher:cipher(BulkCipherAlgo, CipherS0, MacHash, Fragment, Version),
- {CipherFragment, WriteState0#connection_state{cipher_state = CipherS1}}.
+ {CipherFragment, WriteState0#{cipher_state => CipherS1}}.
%%--------------------------------------------------------------------
--spec cipher_aead(ssl_version(), iodata(), #connection_state{}, MacHash::binary()) ->
- {CipherFragment::binary(), #connection_state{}}.
+-spec cipher_aead(ssl_version(), iodata(), connection_state(), MacHash::binary()) ->
+ {CipherFragment::binary(), connection_state()}.
%%
%% Description: Payload encryption
%%--------------------------------------------------------------------
cipher_aead(Version, Fragment,
- #connection_state{cipher_state = CipherS0,
- sequence_number = SeqNo,
- security_parameters=
- #security_parameters{bulk_cipher_algorithm =
- BulkCipherAlgo}
- } = WriteState0, AAD) ->
-
+ #{cipher_state := CipherS0,
+ sequence_number := SeqNo,
+ security_parameters :=
+ #security_parameters{bulk_cipher_algorithm =
+ BulkCipherAlgo}
+ } = WriteState0, AAD) ->
+
{CipherFragment, CipherS1} =
ssl_cipher:cipher_aead(BulkCipherAlgo, CipherS0, SeqNo, AAD, Fragment, Version),
- {CipherFragment, WriteState0#connection_state{cipher_state = CipherS1}}.
+ {CipherFragment, WriteState0#{cipher_state => CipherS1}}.
%%--------------------------------------------------------------------
--spec decipher(ssl_version(), binary(), #connection_state{}, boolean()) -> {binary(), binary(), #connection_state{}} | #alert{}.
+-spec decipher(ssl_version(), binary(), connection_state(), boolean()) -> {binary(), binary(), connection_state} | #alert{}.
%%
%% Description: Payload decryption
%%--------------------------------------------------------------------
decipher(Version, CipherFragment,
- #connection_state{security_parameters =
- #security_parameters{bulk_cipher_algorithm =
- BulkCipherAlgo,
- hash_size = HashSz},
- cipher_state = CipherS0
- } = ReadState, PaddingCheck) ->
+ #{security_parameters :=
+ #security_parameters{bulk_cipher_algorithm =
+ BulkCipherAlgo,
+ hash_size = HashSz},
+ cipher_state := CipherS0
+ } = ReadState, PaddingCheck) ->
case ssl_cipher:decipher(BulkCipherAlgo, HashSz, CipherS0, CipherFragment, Version, PaddingCheck) of
{PlainFragment, Mac, CipherS1} ->
- CS1 = ReadState#connection_state{cipher_state = CipherS1},
+ CS1 = ReadState#{cipher_state => CipherS1},
{PlainFragment, Mac, CS1};
#alert{} = Alert ->
Alert
end.
%%--------------------------------------------------------------------
--spec decipher_aead(ssl_version(), binary(), #connection_state{}, binary()) -> {binary(), binary(), #connection_state{}} | #alert{}.
+-spec decipher_aead(ssl_version(), binary(), connection_state(), binary()) ->
+ {binary(), binary(), connection_state()} | #alert{}.
%%
%% Description: Payload decryption
%%--------------------------------------------------------------------
decipher_aead(Version, CipherFragment,
- #connection_state{sequence_number = SeqNo,
- security_parameters =
- #security_parameters{bulk_cipher_algorithm =
- BulkCipherAlgo},
- cipher_state = CipherS0
- } = ReadState, AAD) ->
+ #{sequence_number := SeqNo,
+ security_parameters :=
+ #security_parameters{bulk_cipher_algorithm =
+ BulkCipherAlgo},
+ cipher_state := CipherS0
+ } = ReadState, AAD) ->
case ssl_cipher:decipher_aead(BulkCipherAlgo, CipherS0, SeqNo, AAD, CipherFragment, Version) of
{PlainFragment, CipherS1} ->
- CS1 = ReadState#connection_state{cipher_state = CipherS1},
+ CS1 = ReadState#{cipher_state => CipherS1},
{PlainFragment, CS1};
#alert{} = Alert ->
Alert
@@ -447,9 +427,17 @@ decipher_aead(Version, CipherFragment,
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
-empty_connection_state(ConnectionEnd) ->
+empty_connection_state(ConnectionEnd, BeastMitigation) ->
SecParams = empty_security_params(ConnectionEnd),
- #connection_state{security_parameters = SecParams}.
+ #{security_parameters => SecParams,
+ beast_mitigation => BeastMitigation,
+ compression_state => undefined,
+ cipher_state => undefined,
+ mac_secret => undefined,
+ secure_renegotiation => undefined,
+ client_verify_data => undefined,
+ server_verify_data => undefined
+ }.
empty_security_params(ConnectionEnd = ?CLIENT) ->
#security_parameters{connection_end = ConnectionEnd,
@@ -463,10 +451,10 @@ random() ->
Random_28_bytes = ssl_cipher:random_bytes(28),
<<?UINT32(Secs_since_1970), Random_28_bytes/binary>>.
-dtls_next_epoch(#connection_state{epoch = undefined}) -> %% SSL/TLS
- undefined;
-dtls_next_epoch(#connection_state{epoch = Epoch}) -> %% DTLS
- Epoch + 1.
+%% dtls_next_epoch(#connection_state{epoch = undefined}) -> %% SSL/TLS
+%% undefined;
+%% dtls_next_epoch(#connection_state{epoch = Epoch}) -> %% DTLS
+%% Epoch + 1.
is_correct_mac(Mac, Mac) ->
true;
@@ -478,11 +466,18 @@ record_protocol_role(client) ->
record_protocol_role(server) ->
?SERVER.
-initial_connection_state(ConnectionEnd) ->
- #connection_state{security_parameters =
- initial_security_params(ConnectionEnd),
- sequence_number = 0
- }.
+initial_connection_state(ConnectionEnd, BeastMitigation) ->
+ #{security_parameters =>
+ initial_security_params(ConnectionEnd),
+ sequence_number => 0,
+ beast_mitigation => BeastMitigation,
+ compression_state => undefined,
+ cipher_state => undefined,
+ mac_secret => undefined,
+ secure_renegotiation => undefined,
+ client_verify_data => undefined,
+ server_verify_data => undefined
+ }.
initial_security_params(ConnectionEnd) ->
SecParams = #security_parameters{connection_end = ConnectionEnd,
@@ -506,11 +501,17 @@ encode_iolist(Type, Data, Version, ConnectionStates0) ->
%% 1/n-1 splitting countermeasure Rizzo/Duong-Beast, RC4 chiphers are
%% not vulnerable to this attack.
-split_bin(<<FirstByte:8, Rest/binary>>, ChunkSize, Version, BCA) when
+split_bin(<<FirstByte:8, Rest/binary>>, ChunkSize, Version, BCA, one_n_minus_one) when
BCA =/= ?RC4 andalso ({3, 1} == Version orelse
{3, 0} == Version) ->
do_split_bin(Rest, ChunkSize, [[FirstByte]]);
-split_bin(Bin, ChunkSize, _, _) ->
+%% 0/n splitting countermeasure for clients that are incompatible with 1/n-1
+%% splitting.
+split_bin(Bin, ChunkSize, Version, BCA, zero_n) when
+ BCA =/= ?RC4 andalso ({3, 1} == Version orelse
+ {3, 0} == Version) ->
+ do_split_bin(Bin, ChunkSize, [[<<>>]]);
+split_bin(Bin, ChunkSize, _, _, _) ->
do_split_bin(Bin, ChunkSize, []).
do_split_bin(<<>>, _, Acc) ->
diff --git a/lib/ssl/src/ssl_record.hrl b/lib/ssl/src/ssl_record.hrl
index d34d144343..ed007f58d7 100644
--- a/lib/ssl/src/ssl_record.hrl
+++ b/lib/ssl/src/ssl_record.hrl
@@ -30,25 +30,27 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Connection states - RFC 4346 section 6.1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--record(connection_state, {
- security_parameters,
- compression_state,
- cipher_state,
- mac_secret,
- epoch, %% Only used by DTLS
- sequence_number,
- %% RFC 5746
- secure_renegotiation,
- client_verify_data,
- server_verify_data
- }).
+%% For documentation purposes are now maps in implementation
+%% -record(connection_state, {
+%% security_parameters,
+%% compression_state,
+%% cipher_state,
+%% mac_secret,
+%% sequence_number,
+%% %% RFC 5746
+%% secure_renegotiation,
+%% client_verify_data,
+%% server_verify_data,
+%% %% How to do BEAST mitigation?
+%% beast_mitigation
+%% }).
--record(connection_states, {
- current_read,
- pending_read,
- current_write,
- pending_write
- }).
+%% -record(connection_states, {
+%% current_read,
+%% pending_read,
+%% current_write,
+%% pending_write,
+%% }).
-record(security_parameters, {
cipher_suite,
diff --git a/lib/ssl/src/ssl_socket.erl b/lib/ssl/src/ssl_socket.erl
index 95a70a4602..b2aea2ba9c 100644
--- a/lib/ssl/src/ssl_socket.erl
+++ b/lib/ssl/src/ssl_socket.erl
@@ -24,7 +24,7 @@
-include("ssl_internal.hrl").
-include("ssl_api.hrl").
--export([socket/5, setopts/3, getopts/3, peername/2, sockname/2, port/2]).
+-export([socket/5, setopts/3, getopts/3, getstat/3, peername/2, sockname/2, port/2]).
-export([emulated_options/0, internal_inet_values/0, default_inet_values/0,
init/1, start_link/3, terminate/2, inherit_tracker/3, get_emulated_opts/1,
set_emulated_opts/2, get_all_opts/1, handle_call/3, handle_cast/2,
@@ -74,6 +74,11 @@ getopts(gen_tcp, Socket, Options) ->
getopts(Transport, Socket, Options) ->
Transport:getopts(Socket, Options).
+getstat(gen_tcp, Socket, Options) ->
+ inet:getstat(Socket, Options);
+getstat(Transport, Socket, Options) ->
+ Transport:getstat(Socket, Options).
+
peername(gen_tcp, Socket) ->
inet:peername(Socket);
peername(Transport, Socket) ->
diff --git a/lib/ssl/src/ssl_sup.erl b/lib/ssl/src/ssl_sup.erl
index 7fa1f7dc9e..ba20f65f44 100644
--- a/lib/ssl/src/ssl_sup.erl
+++ b/lib/ssl/src/ssl_sup.erl
@@ -47,11 +47,13 @@ init([]) ->
SessionCertManager = session_and_cert_manager_child_spec(),
TLSConnetionManager = tls_connection_manager_child_spec(),
%% Not supported yet
- %%DTLSConnetionManager = tls_connection_manager_child_spec(),
+ %%DTLSConnetionManager = dtls_connection_manager_child_spec(),
%% Handles emulated options so that they inherited by the accept socket, even when setopts is performed on
%% the listen socket
ListenOptionsTracker = listen_options_tracker_child_spec(),
- {ok, {{one_for_all, 10, 3600}, [SessionCertManager, TLSConnetionManager, ListenOptionsTracker]}}.
+ {ok, {{one_for_all, 10, 3600}, [SessionCertManager, TLSConnetionManager,
+ %%DTLSConnetionManager,
+ ListenOptionsTracker]}}.
manager_opts() ->
@@ -93,15 +95,14 @@ tls_connection_manager_child_spec() ->
{Name, StartFunc, Restart, Shutdown, Type, Modules}.
%% dtls_connection_manager_child_spec() ->
-%% Name = dtls_connection,
+%% Name = dtls_connection,
%% StartFunc = {dtls_connection_sup, start_link, []},
-%% Restart = permanent,
+%% Restart = permanent,
%% Shutdown = 4000,
%% Modules = [dtls_connection, ssl_connection],
%% Type = supervisor,
%% {Name, StartFunc, Restart, Shutdown, Type, Modules}.
-
listen_options_tracker_child_spec() ->
Name = ssl_socket,
StartFunc = {ssl_listen_tracker_sup, start_link, []},
diff --git a/lib/ssl/src/ssl_tls_dist_proxy.erl b/lib/ssl/src/ssl_tls_dist_proxy.erl
index 4651687fe6..08947f24dd 100644
--- a/lib/ssl/src/ssl_tls_dist_proxy.erl
+++ b/lib/ssl/src/ssl_tls_dist_proxy.erl
@@ -116,7 +116,8 @@ handle_call({listen, Driver, Name}, _From, State) ->
{ok, TcpAddress} = get_tcp_address(Socket),
{ok, WorldTcpAddress} = get_tcp_address(World),
{_,Port} = WorldTcpAddress#net_address.address,
- case erl_epmd:register_node(Name, Port) of
+ ErlEpmd = net_kernel:epmd_module(),
+ case ErlEpmd:register_node(Name, Port, Driver) of
{ok, Creation} ->
{reply, {ok, {Socket, TcpAddress, Creation}},
State#state{listen={Socket, World}}};
@@ -401,6 +402,18 @@ ssl_options(server, ["server_verify", Value|T]) ->
[{verify, atomize(Value)} | ssl_options(server,T)];
ssl_options(client, ["client_verify", Value|T]) ->
[{verify, atomize(Value)} | ssl_options(client,T)];
+ssl_options(server, ["server_verify_fun", Value|T]) ->
+ [{verify_fun, verify_fun(Value)} | ssl_options(server,T)];
+ssl_options(client, ["client_verify_fun", Value|T]) ->
+ [{verify_fun, verify_fun(Value)} | ssl_options(client,T)];
+ssl_options(server, ["server_crl_check", Value|T]) ->
+ [{crl_check, atomize(Value)} | ssl_options(server,T)];
+ssl_options(client, ["client_crl_check", Value|T]) ->
+ [{crl_check, atomize(Value)} | ssl_options(client,T)];
+ssl_options(server, ["server_crl_cache", Value|T]) ->
+ [{crl_cache, termify(Value)} | ssl_options(server,T)];
+ssl_options(client, ["client_crl_cache", Value|T]) ->
+ [{crl_cache, termify(Value)} | ssl_options(client,T)];
ssl_options(server, ["server_reuse_sessions", Value|T]) ->
[{reuse_sessions, atomize(Value)} | ssl_options(server,T)];
ssl_options(client, ["client_reuse_sessions", Value|T]) ->
@@ -425,14 +438,28 @@ ssl_options(server, ["server_dhfile", Value|T]) ->
[{dhfile, Value} | ssl_options(server,T)];
ssl_options(server, ["server_fail_if_no_peer_cert", Value|T]) ->
[{fail_if_no_peer_cert, atomize(Value)} | ssl_options(server,T)];
-ssl_options(_,_) ->
- exit(malformed_ssl_dist_opt).
+ssl_options(Type, Opts) ->
+ error(malformed_ssl_dist_opt, [Type, Opts]).
atomize(List) when is_list(List) ->
list_to_atom(List);
atomize(Atom) when is_atom(Atom) ->
Atom.
+termify(String) when is_list(String) ->
+ {ok, Tokens, _} = erl_scan:string(String ++ "."),
+ {ok, Term} = erl_parse:parse_term(Tokens),
+ Term.
+
+verify_fun(Value) ->
+ case termify(Value) of
+ {Mod, Func, State} when is_atom(Mod), is_atom(Func) ->
+ Fun = fun Mod:Func/3,
+ {Fun, State};
+ _ ->
+ error(malformed_ssl_dist_opt, [Value])
+ end.
+
flush_old_controller(Pid, Socket) ->
receive
{tcp, Socket, Data} ->
diff --git a/lib/ssl/src/tls_connection.erl b/lib/ssl/src/tls_connection.erl
index 208edc644a..9b9031473a 100644
--- a/lib/ssl/src/tls_connection.erl
+++ b/lib/ssl/src/tls_connection.erl
@@ -49,28 +49,23 @@
-export([next_record/1, next_event/3]).
%% Handshake handling
--export([renegotiate/2, send_handshake/2, send_change_cipher/2,
- reinit_handshake_data/1]).
+-export([renegotiate/2, send_handshake/2,
+ queue_handshake/2, queue_change_cipher/2,
+ reinit_handshake_data/1, select_sni_extension/1]).
%% Alert and close handling
--export([send_alert/2, handle_own_alert/4, handle_close_alert/3,
- handle_normal_shutdown/3,
- close/5, alert_user/6, alert_user/9
- ]).
+-export([send_alert/2, close/5]).
%% Data handling
--export([write_application_data/3, read_application_data/2,
- passive_receive/2, next_record_if_active/1, handle_common_event/4]).
+-export([passive_receive/2, next_record_if_active/1, handle_common_event/4]).
%% gen_statem state functions
-export([init/3, error/3, downgrade/3, %% Initiation and take down states
hello/3, certify/3, cipher/3, abbreviated/3, %% Handshake states
connection/3]).
%% gen_statem callbacks
--export([terminate/3, code_change/4, format_status/2]).
+-export([callback_mode/0, terminate/3, code_change/4, format_status/2]).
--define(GEN_STATEM_CB_MODE, state_functions).
-
%%====================================================================
%% Internal application API
%%====================================================================
@@ -102,17 +97,33 @@ start_fsm(Role, Host, Port, Socket, {#ssl_options{erl_dist = true},_, Tracker} =
Error
end.
-send_handshake(Handshake, #state{negotiated_version = Version,
- socket = Socket,
- transport_cb = Transport,
- tls_handshake_history = Hist0,
- connection_states = ConnectionStates0} = State0) ->
+send_handshake(Handshake, State) ->
+ send_handshake_flight(queue_handshake(Handshake, State)).
+
+queue_handshake(Handshake, #state{negotiated_version = Version,
+ tls_handshake_history = Hist0,
+ flight_buffer = Flight0,
+ ssl_options = #ssl_options{v2_hello_compatible = V2HComp},
+ connection_states = ConnectionStates0} = State0) ->
{BinHandshake, ConnectionStates, Hist} =
- encode_handshake(Handshake, Version, ConnectionStates0, Hist0),
- Transport:send(Socket, BinHandshake),
+ encode_handshake(Handshake, Version, ConnectionStates0, Hist0, V2HComp),
+ State0#state{connection_states = ConnectionStates,
+ tls_handshake_history = Hist,
+ flight_buffer = Flight0 ++ [BinHandshake]}.
+
+send_handshake_flight(#state{socket = Socket,
+ transport_cb = Transport,
+ flight_buffer = Flight} = State0) ->
+ Transport:send(Socket, Flight),
+ State0#state{flight_buffer = []}.
+
+queue_change_cipher(Msg, #state{negotiated_version = Version,
+ flight_buffer = Flight0,
+ connection_states = ConnectionStates0} = State0) ->
+ {BinChangeCipher, ConnectionStates} =
+ encode_change_cipher(Msg, Version, ConnectionStates0),
State0#state{connection_states = ConnectionStates,
- tls_handshake_history = Hist
- }.
+ flight_buffer = Flight0 ++ [BinChangeCipher]}.
send_alert(Alert, #state{negotiated_version = Version,
socket = Socket,
@@ -123,15 +134,6 @@ send_alert(Alert, #state{negotiated_version = Version,
Transport:send(Socket, BinMsg),
State0#state{connection_states = ConnectionStates}.
-send_change_cipher(Msg, #state{connection_states = ConnectionStates0,
- socket = Socket,
- negotiated_version = Version,
- transport_cb = Transport} = State0) ->
- {BinChangeCipher, ConnectionStates} =
- encode_change_cipher(Msg, Version, ConnectionStates0),
- Transport:send(Socket, BinChangeCipher),
- State0#state{connection_states = ConnectionStates}.
-
reinit_handshake_data(State) ->
%% premaster_secret, public_key_info and tls_handshake_info
%% are only needed during the handshake phase.
@@ -141,7 +143,12 @@ reinit_handshake_data(State) ->
public_key_info = undefined,
tls_handshake_history = ssl_handshake:init_handshake_history()
}.
-
+
+select_sni_extension(#client_hello{extensions = HelloExtensions}) ->
+ HelloExtensions#hello_extensions.sni;
+select_sni_extension(_) ->
+ undefined.
+
%%====================================================================
%% tls_connection_sup API
%%====================================================================
@@ -162,11 +169,14 @@ init([Role, Host, Port, Socket, Options, User, CbInfo]) ->
State0 = initial_state(Role, Host, Port, Socket, Options, User, CbInfo),
try
State = ssl_connection:ssl_config(State0#state.ssl_options, Role, State0),
- gen_statem:enter_loop(?MODULE, [], ?GEN_STATEM_CB_MODE, init, State)
+ gen_statem:enter_loop(?MODULE, [], init, State)
catch throw:Error ->
- gen_statem:enter_loop(?MODULE, [], ?GEN_STATEM_CB_MODE, error, {Error, State0})
+ gen_statem:enter_loop(?MODULE, [], error, {Error, State0})
end.
+callback_mode() ->
+ state_functions.
+
%%--------------------------------------------------------------------
%% State functions
%%--------------------------------------------------------------------
@@ -178,7 +188,7 @@ init([Role, Host, Port, Socket, Options, User, CbInfo]) ->
init({call, From}, {start, Timeout},
#state{host = Host, port = Port, role = client,
- ssl_options = SslOpts,
+ ssl_options = #ssl_options{v2_hello_compatible = V2HComp} = SslOpts,
session = #session{own_certificate = Cert} = Session0,
transport_cb = Transport, socket = Socket,
connection_states = ConnectionStates0,
@@ -194,7 +204,7 @@ init({call, From}, {start, Timeout},
HelloVersion = tls_record:lowest_protocol_version(SslOpts#ssl_options.versions),
Handshake0 = ssl_handshake:init_handshake_history(),
{BinMsg, ConnectionStates, Handshake} =
- encode_handshake(Hello, HelloVersion, ConnectionStates0, Handshake0),
+ encode_handshake(Hello, HelloVersion, ConnectionStates0, Handshake0, V2HComp),
Transport:send(Socket, BinMsg),
State1 = State0#state{connection_states = ConnectionStates,
negotiated_version = Version, %% Requested version
@@ -206,7 +216,7 @@ init({call, From}, {start, Timeout},
{Record, State} = next_record(State1),
next_event(hello, Record, State);
init(Type, Event, State) ->
- ssl_connection:init(Type, Event, State, ?MODULE).
+ gen_handshake(ssl_connection, init, Type, Event, State).
%%--------------------------------------------------------------------
-spec error(gen_statem:event_type(),
@@ -228,21 +238,21 @@ error(_, _, _) ->
gen_statem:state_function_result().
%%--------------------------------------------------------------------
hello(internal, #client_hello{client_version = ClientVersion,
- extensions = #hello_extensions{ec_point_formats = EcPointFormats,
- elliptic_curves = EllipticCurves}} = Hello,
- State = #state{connection_states = ConnectionStates0,
- port = Port, session = #session{own_certificate = Cert} = Session0,
- renegotiation = {Renegotiation, _},
- session_cache = Cache,
- session_cache_cb = CacheCb,
- negotiated_protocol = CurrentProtocol,
- key_algorithm = KeyExAlg,
- ssl_options = SslOpts}) ->
+ extensions = #hello_extensions{ec_point_formats = EcPointFormats,
+ elliptic_curves = EllipticCurves}} = Hello,
+ #state{connection_states = ConnectionStates0,
+ port = Port, session = #session{own_certificate = Cert} = Session0,
+ renegotiation = {Renegotiation, _},
+ session_cache = Cache,
+ session_cache_cb = CacheCb,
+ negotiated_protocol = CurrentProtocol,
+ key_algorithm = KeyExAlg,
+ ssl_options = SslOpts} = State) ->
case tls_handshake:hello(Hello, SslOpts, {Port, Session0, Cache, CacheCb,
ConnectionStates0, Cert, KeyExAlg}, Renegotiation) of
#alert{} = Alert ->
- handle_own_alert(Alert, ClientVersion, hello, State);
+ ssl_connection:handle_own_alert(Alert, ClientVersion, hello, State);
{Version, {Type, Session},
ConnectionStates, Protocol0, ServerHelloExt, HashSign} ->
Protocol = case Protocol0 of
@@ -250,13 +260,13 @@ hello(internal, #client_hello{client_version = ClientVersion,
_ -> Protocol0
end,
- ssl_connection:hello(internal, {common_client_hello, Type, ServerHelloExt},
+ gen_handshake(ssl_connection, hello, internal, {common_client_hello, Type, ServerHelloExt},
State#state{connection_states = ConnectionStates,
negotiated_version = Version,
hashsign_algorithm = HashSign,
session = Session,
client_ecc = {EllipticCurves, EcPointFormats},
- negotiated_protocol = Protocol}, ?MODULE)
+ negotiated_protocol = Protocol})
end;
hello(internal, #server_hello{} = Hello,
#state{connection_states = ConnectionStates0,
@@ -266,42 +276,42 @@ hello(internal, #server_hello{} = Hello,
ssl_options = SslOptions} = State) ->
case tls_handshake:hello(Hello, SslOptions, ConnectionStates0, Renegotiation) of
#alert{} = Alert ->
- handle_own_alert(Alert, ReqVersion, hello, State);
+ ssl_connection:handle_own_alert(Alert, ReqVersion, hello, State);
{Version, NewId, ConnectionStates, ProtoExt, Protocol} ->
ssl_connection:handle_session(Hello,
Version, NewId, ConnectionStates, ProtoExt, Protocol, State)
end;
hello(info, Event, State) ->
- handle_info(Event, hello, State);
+ gen_info(Event, hello, State);
hello(Type, Event, State) ->
- ssl_connection:hello(Type, Event, State, ?MODULE).
+ gen_handshake(ssl_connection, hello, Type, Event, State).
%%--------------------------------------------------------------------
-spec abbreviated(gen_statem:event_type(), term(), #state{}) ->
gen_statem:state_function_result().
%%--------------------------------------------------------------------
abbreviated(info, Event, State) ->
- handle_info(Event, abbreviated, State);
+ gen_info(Event, abbreviated, State);
abbreviated(Type, Event, State) ->
- ssl_connection:abbreviated(Type, Event, State, ?MODULE).
+ gen_handshake(ssl_connection, abbreviated, Type, Event, State).
%%--------------------------------------------------------------------
-spec certify(gen_statem:event_type(), term(), #state{}) ->
gen_statem:state_function_result().
%%--------------------------------------------------------------------
certify(info, Event, State) ->
- handle_info(Event, certify, State);
+ gen_info(Event, certify, State);
certify(Type, Event, State) ->
- ssl_connection:certify(Type, Event, State, ?MODULE).
+ gen_handshake(ssl_connection, certify, Type, Event, State).
%%--------------------------------------------------------------------
-spec cipher(gen_statem:event_type(), term(), #state{}) ->
gen_statem:state_function_result().
%%--------------------------------------------------------------------
cipher(info, Event, State) ->
- handle_info(Event, cipher, State);
+ gen_info(Event, cipher, State);
cipher(Type, Event, State) ->
- ssl_connection:cipher(Type, Event, State, ?MODULE).
+ gen_handshake(ssl_connection, cipher, Type, Event, State).
%%--------------------------------------------------------------------
-spec connection(gen_statem:event_type(),
@@ -309,9 +319,9 @@ cipher(Type, Event, State) ->
gen_statem:state_function_result().
%%--------------------------------------------------------------------
connection(info, Event, State) ->
- handle_info(Event, connection, State);
+ gen_info(Event, connection, State);
connection(internal, #hello_request{},
- #state{host = Host, port = Port,
+ #state{role = client, host = Host, port = Port,
session = #session{own_certificate = Cert} = Session0,
session_cache = Cache, session_cache_cb = CacheCb,
ssl_options = SslOpts,
@@ -326,14 +336,16 @@ connection(internal, #hello_request{},
= Hello#client_hello.session_id}}),
next_event(hello, Record, State);
connection(internal, #client_hello{} = Hello,
- #state{role = server, allow_renegotiate = true} = State) ->
+ #state{role = server, allow_renegotiate = true} = State0) ->
%% Mitigate Computational DoS attack
%% http://www.educatedguesswork.org/2011/10/ssltls_and_computational_dos.html
%% http://www.thc.org/thc-ssl-dos/ Rather than disabling client
%% initiated renegotiation we will disallow many client initiated
%% renegotiations immediately after each other.
erlang:send_after(?WAIT_TO_ALLOW_RENEGOTIATION, self(), allow_renegotiate),
- {next_state, hello, State#state{allow_renegotiate = false}, [{next_event, internal, Hello}]};
+ {Record, State} = next_record(State0#state{allow_renegotiate = false,
+ renegotiation = {true, peer}}),
+ next_event(hello, Record, State, [{next_event, internal, Hello}]);
connection(internal, #client_hello{},
#state{role = server, allow_renegotiate = false} = State0) ->
Alert = ?ALERT_REC(?WARNING, ?NO_RENEGOTIATION),
@@ -364,7 +376,7 @@ handle_info({Protocol, _, Data}, StateName,
{Record, State} ->
next_event(StateName, Record, State);
#alert{} = Alert ->
- handle_normal_shutdown(Alert, StateName, State0),
+ ssl_connection:handle_normal_shutdown(Alert, StateName, State0),
{stop, {shutdown, own_alert}}
end;
handle_info({CloseTag, Socket}, StateName,
@@ -384,53 +396,27 @@ handle_info({CloseTag, Socket}, StateName,
%%invalidate_session(Role, Host, Port, Session)
ok
end,
- handle_normal_shutdown(?ALERT_REC(?FATAL, ?CLOSE_NOTIFY), StateName, State),
+ ssl_connection:handle_normal_shutdown(?ALERT_REC(?FATAL, ?CLOSE_NOTIFY), StateName, State),
{stop, {shutdown, transport_closed}};
handle_info(Msg, StateName, State) ->
ssl_connection:handle_info(Msg, StateName, State).
handle_common_event(internal, #alert{} = Alert, StateName,
#state{negotiated_version = Version} = State) ->
- handle_own_alert(Alert, Version, StateName, State);
+ ssl_connection:handle_own_alert(Alert, Version, StateName, State);
%%% TLS record protocol level handshake messages
handle_common_event(internal, #ssl_tls{type = ?HANDSHAKE, fragment = Data},
StateName, #state{protocol_buffers =
#protocol_buffers{tls_handshake_buffer = Buf0} = Buffers,
- negotiated_version = Version} = State0) ->
-
- Handle =
- fun({#hello_request{} = Packet, _}, {connection, HState}) ->
- %% This message should not be included in handshake
- %% message hashes. Starts new handshake (renegotiation)
- Hs0 = ssl_handshake:init_handshake_history(),
- {HState#state{tls_handshake_history = Hs0,
- renegotiation = {true, peer}},
- {next_event, internal, Packet}};
- ({#hello_request{}, _}, {next_state, _SName, HState}) ->
- %% This message should not be included in handshake
- %% message hashes. Already in negotiation so it will be ignored!
- {HState, []};
- ({#client_hello{} = Packet, Raw}, {connection, HState0}) ->
- HState = handle_sni_extension(Packet, HState0),
- Version = Packet#client_hello.client_version,
- Hs0 = ssl_handshake:init_handshake_history(),
- Hs1 = ssl_handshake:update_handshake_history(Hs0, Raw),
- {HState#state{tls_handshake_history = Hs1,
- renegotiation = {true, peer}},
- {next_event, internal, Packet}};
-
- ({Packet, Raw}, {_SName, HState0 = #state{tls_handshake_history=Hs0}}) ->
- HState = handle_sni_extension(Packet, HState0),
- Hs1 = ssl_handshake:update_handshake_history(Hs0, Raw),
- {HState#state{tls_handshake_history=Hs1}, {next_event, internal, Packet}}
- end,
+ negotiated_version = Version,
+ ssl_options = Options} = State0) ->
try
- {Packets, Buf} = tls_handshake:get_tls_handshake(Version,Data,Buf0),
- State1 = State0#state{protocol_buffers =
- Buffers#protocol_buffers{tls_packets = Packets,
- tls_handshake_buffer = Buf}},
- {State, Events} = tls_handshake_events(Handle, StateName, State1, []),
+ {Packets, Buf} = tls_handshake:get_tls_handshake(Version,Data,Buf0, Options),
+ State =
+ State0#state{protocol_buffers =
+ Buffers#protocol_buffers{tls_handshake_buffer = Buf}},
+ Events = tls_handshake_events(Packets),
case StateName of
connection ->
ssl_connection:hibernate_after(StateName, State, Events);
@@ -438,7 +424,7 @@ handle_common_event(internal, #ssl_tls{type = ?HANDSHAKE, fragment = Data},
{next_state, StateName, State, Events}
end
catch throw:#alert{} = Alert ->
- handle_own_alert(Alert, Version, StateName, State0)
+ ssl_connection:handle_own_alert(Alert, Version, StateName, State0)
end;
%%% TLS record protocol level application data messages
handle_common_event(internal, #ssl_tls{type = ?APPLICATION_DATA, fragment = Data}, StateName, State) ->
@@ -449,11 +435,19 @@ handle_common_event(internal, #ssl_tls{type = ?CHANGE_CIPHER_SPEC, fragment = Da
%%% TLS record protocol level Alert messages
handle_common_event(internal, #ssl_tls{type = ?ALERT, fragment = EncAlerts}, StateName,
#state{negotiated_version = Version} = State) ->
- case decode_alerts(EncAlerts) of
+ try decode_alerts(EncAlerts) of
Alerts = [_|_] ->
handle_alerts(Alerts, {next_state, StateName, State});
+ [] ->
+ ssl_connection:handle_own_alert(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, empty_alert),
+ Version, StateName, State);
#alert{} = Alert ->
- handle_own_alert(Alert, Version, StateName, State)
+ ssl_connection:handle_own_alert(Alert, Version, StateName, State)
+ catch
+ _:_ ->
+ ssl_connection:handle_own_alert(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, alert_decode_error),
+ Version, StateName, State)
+
end;
%% Ignore unknown TLS record level protocol messages
handle_common_event(internal, #ssl_tls{type = _Unknown}, StateName, State) ->
@@ -474,16 +468,16 @@ format_status(Type, Data) ->
%%--------------------------------------------------------------------
code_change(_OldVsn, StateName, State0, {Direction, From, To}) ->
State = convert_state(State0, Direction, From, To),
- {?GEN_STATEM_CB_MODE, StateName, State};
+ {ok, StateName, State};
code_change(_OldVsn, StateName, State, _) ->
- {?GEN_STATEM_CB_MODE, StateName, State}.
+ {ok, StateName, State}.
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
-encode_handshake(Handshake, Version, ConnectionStates0, Hist0) ->
+encode_handshake(Handshake, Version, ConnectionStates0, Hist0, V2HComp) ->
Frag = tls_handshake:encode_handshake(Handshake, Version),
- Hist = ssl_handshake:update_handshake_history(Hist0, Frag),
+ Hist = ssl_handshake:update_handshake_history(Hist0, Frag, V2HComp),
{Encoded, ConnectionStates} =
ssl_record:encode_handshake(Frag, Version, ConnectionStates0),
{Encoded, ConnectionStates, Hist}.
@@ -496,7 +490,8 @@ decode_alerts(Bin) ->
initial_state(Role, Host, Port, Socket, {SSLOptions, SocketOptions, Tracker}, User,
{CbModule, DataTag, CloseTag, ErrorTag}) ->
- ConnectionStates = ssl_record:init_connection_states(Role),
+ #ssl_options{beast_mitigation = BeastMitigation} = SSLOptions,
+ ConnectionStates = tls_record:init_connection_states(Role, BeastMitigation),
SessionCacheCb = case application:get_env(ssl, session_cb) of
{ok, Cb} when is_atom(Cb) ->
@@ -527,26 +522,10 @@ initial_state(Role, Host, Port, Socket, {SSLOptions, SocketOptions, Tracker}, Us
allow_renegotiate = SSLOptions#ssl_options.client_renegotiation,
start_or_recv_from = undefined,
protocol_cb = ?MODULE,
- tracker = Tracker
+ tracker = Tracker,
+ flight_buffer = []
}.
-
-update_ssl_options_from_sni(OrigSSLOptions, SNIHostname) ->
- SSLOption =
- case OrigSSLOptions#ssl_options.sni_fun of
- undefined ->
- proplists:get_value(SNIHostname,
- OrigSSLOptions#ssl_options.sni_hosts);
- SNIFun ->
- SNIFun(SNIHostname)
- end,
- case SSLOption of
- undefined ->
- undefined;
- _ ->
- ssl:handle_options(SSLOption, OrigSSLOptions)
- end.
-
next_tls_record(Data, #state{protocol_buffers = #protocol_buffers{tls_record_buffer = Buf0,
tls_cipher_texts = CT0} = Buffers} = State0) ->
case tls_record:get_tls_records(Data, Buf0) of
@@ -594,7 +573,7 @@ passive_receive(State0 = #state{user_data_buffer = Buffer}, StateName) ->
{Record, State} = next_record(State0),
next_event(StateName, Record, State);
_ ->
- {Record, State} = read_application_data(<<>>, State0),
+ {Record, State} = ssl_connection:read_application_data(<<>>, State0),
next_event(StateName, Record, State)
end.
@@ -606,7 +585,7 @@ next_event(connection = StateName, no_record, State0, Actions) ->
{no_record, State} ->
ssl_connection:hibernate_after(StateName, State, Actions);
{#ssl_tls{} = Record, State} ->
- {next_state, StateName, State, [{next_event, internal, {tls_record, Record}} | Actions]};
+ {next_state, StateName, State, [{next_event, internal, {protocol_record, Record}} | Actions]};
{#alert{} = Alert, State} ->
{next_state, StateName, State, [{next_event, internal, Alert} | Actions]}
end;
@@ -615,237 +594,19 @@ next_event(StateName, Record, State, Actions) ->
no_record ->
{next_state, StateName, State, Actions};
#ssl_tls{} = Record ->
- {next_state, StateName, State, [{next_event, internal, {tls_record, Record}} | Actions]};
+ {next_state, StateName, State, [{next_event, internal, {protocol_record, Record}} | Actions]};
#alert{} = Alert ->
{next_state, StateName, State, [{next_event, internal, Alert} | Actions]}
end.
-read_application_data(Data, #state{user_application = {_Mon, Pid},
- socket = Socket,
- transport_cb = Transport,
- socket_options = SOpts,
- bytes_to_read = BytesToRead,
- start_or_recv_from = RecvFrom,
- timer = Timer,
- user_data_buffer = Buffer0,
- tracker = Tracker} = State0) ->
- Buffer1 = if
- Buffer0 =:= <<>> -> Data;
- Data =:= <<>> -> Buffer0;
- true -> <<Buffer0/binary, Data/binary>>
- end,
- case get_data(SOpts, BytesToRead, Buffer1) of
- {ok, ClientData, Buffer} -> % Send data
- SocketOpt = deliver_app_data(Transport, Socket, SOpts, ClientData, Pid, RecvFrom, Tracker),
- cancel_timer(Timer),
- State = State0#state{user_data_buffer = Buffer,
- start_or_recv_from = undefined,
- timer = undefined,
- bytes_to_read = undefined,
- socket_options = SocketOpt
- },
- if
- SocketOpt#socket_options.active =:= false; Buffer =:= <<>> ->
- %% Passive mode, wait for active once or recv
- %% Active and empty, get more data
- next_record_if_active(State);
- true -> %% We have more data
- read_application_data(<<>>, State)
- end;
- {more, Buffer} -> % no reply, we need more data
- next_record(State0#state{user_data_buffer = Buffer});
- {passive, Buffer} ->
- next_record_if_active(State0#state{user_data_buffer = Buffer});
- {error,_Reason} -> %% Invalid packet in packet mode
- deliver_packet_error(Transport, Socket, SOpts, Buffer1, Pid, RecvFrom, Tracker),
- {stop, normal, State0}
- end.
-
-%% Picks ClientData
-get_data(_, _, <<>>) ->
- {more, <<>>};
-%% Recv timed out save buffer data until next recv
-get_data(#socket_options{active=false}, undefined, Buffer) ->
- {passive, Buffer};
-get_data(#socket_options{active=Active, packet=Raw}, BytesToRead, Buffer)
- when Raw =:= raw; Raw =:= 0 -> %% Raw Mode
- if
- Active =/= false orelse BytesToRead =:= 0 ->
- %% Active true or once, or passive mode recv(0)
- {ok, Buffer, <<>>};
- byte_size(Buffer) >= BytesToRead ->
- %% Passive Mode, recv(Bytes)
- <<Data:BytesToRead/binary, Rest/binary>> = Buffer,
- {ok, Data, Rest};
- true ->
- %% Passive Mode not enough data
- {more, Buffer}
- end;
-get_data(#socket_options{packet=Type, packet_size=Size}, _, Buffer) ->
- PacketOpts = [{packet_size, Size}],
- case decode_packet(Type, Buffer, PacketOpts) of
- {more, _} ->
- {more, Buffer};
- Decoded ->
- Decoded
- end.
-
-decode_packet({http, headers}, Buffer, PacketOpts) ->
- decode_packet(httph, Buffer, PacketOpts);
-decode_packet({http_bin, headers}, Buffer, PacketOpts) ->
- decode_packet(httph_bin, Buffer, PacketOpts);
-decode_packet(Type, Buffer, PacketOpts) ->
- erlang:decode_packet(Type, Buffer, PacketOpts).
-
-%% Just like with gen_tcp sockets, an ssl socket that has been configured with
-%% {packet, http} (or {packet, http_bin}) will automatically switch to expect
-%% HTTP headers after it sees a HTTP Request or HTTP Response line. We
-%% represent the current state as follows:
-%% #socket_options.packet =:= http: Expect a HTTP Request/Response line
-%% #socket_options.packet =:= {http, headers}: Expect HTTP Headers
-%% Note that if the user has explicitly configured the socket to expect
-%% HTTP headers using the {packet, httph} option, we don't do any automatic
-%% switching of states.
-deliver_app_data(Transport, Socket, SOpts = #socket_options{active=Active, packet=Type},
- Data, Pid, From, Tracker) ->
- send_or_reply(Active, Pid, From, format_reply(Transport, Socket, SOpts, Data, Tracker)),
- SO = case Data of
- {P, _, _, _} when ((P =:= http_request) or (P =:= http_response)),
- ((Type =:= http) or (Type =:= http_bin)) ->
- SOpts#socket_options{packet={Type, headers}};
- http_eoh when tuple_size(Type) =:= 2 ->
- % End of headers - expect another Request/Response line
- {Type1, headers} = Type,
- SOpts#socket_options{packet=Type1};
- _ ->
- SOpts
- end,
- case Active of
- once ->
- SO#socket_options{active=false};
- _ ->
- SO
- end.
-
-format_reply(_, _,#socket_options{active = false, mode = Mode, packet = Packet,
- header = Header}, Data, _) ->
- {ok, do_format_reply(Mode, Packet, Header, Data)};
-format_reply(Transport, Socket, #socket_options{active = _, mode = Mode, packet = Packet,
- header = Header}, Data, Tracker) ->
- {ssl, ssl_socket:socket(self(), Transport, Socket, ?MODULE, Tracker),
- do_format_reply(Mode, Packet, Header, Data)}.
-
-deliver_packet_error(Transport, Socket, SO= #socket_options{active = Active}, Data, Pid, From, Tracker) ->
- send_or_reply(Active, Pid, From, format_packet_error(Transport, Socket, SO, Data, Tracker)).
-
-format_packet_error(_, _,#socket_options{active = false, mode = Mode}, Data, _) ->
- {error, {invalid_packet, do_format_reply(Mode, raw, 0, Data)}};
-format_packet_error(Transport, Socket, #socket_options{active = _, mode = Mode}, Data, Tracker) ->
- {ssl_error, ssl_socket:socket(self(), Transport, Socket, ?MODULE, Tracker),
- {invalid_packet, do_format_reply(Mode, raw, 0, Data)}}.
-
-do_format_reply(binary, _, N, Data) when N > 0 -> % Header mode
- header(N, Data);
-do_format_reply(binary, _, _, Data) ->
- Data;
-do_format_reply(list, Packet, _, Data)
- when Packet == http; Packet == {http, headers};
- Packet == http_bin; Packet == {http_bin, headers};
- Packet == httph; Packet == httph_bin ->
- Data;
-do_format_reply(list, _,_, Data) ->
- binary_to_list(Data).
-
-header(0, <<>>) ->
- <<>>;
-header(_, <<>>) ->
- [];
-header(0, Binary) ->
- Binary;
-header(N, Binary) ->
- <<?BYTE(ByteN), NewBinary/binary>> = Binary,
- [ByteN | header(N-1, NewBinary)].
-
-send_or_reply(false, _Pid, From, Data) when From =/= undefined ->
- gen_statem:reply(From, Data);
-%% Can happen when handling own alert or tcp error/close and there is
-%% no outstanding gen_fsm sync events
-send_or_reply(false, no_pid, _, _) ->
- ok;
-send_or_reply(_, Pid, _From, Data) ->
- send_user(Pid, Data).
-
-send_user(Pid, Msg) ->
- Pid ! Msg.
-
-tls_handshake_events(Handle, StateName,
- #state{protocol_buffers =
- #protocol_buffers{tls_packets = [Packet]} = Buffers} = State0, Acc) ->
- {State, Event} = Handle(Packet, {StateName,
- State0#state{protocol_buffers =
- Buffers#protocol_buffers{tls_packets = []}}}),
- {State, lists:reverse([Event |Acc])};
-tls_handshake_events(Handle, StateName,
- #state{protocol_buffers =
- #protocol_buffers{tls_packets =
- [Packet | Packets]} = Buffers} = State0, Acc) ->
- {State, Event} = Handle(Packet, {StateName, State0#state{protocol_buffers =
- Buffers#protocol_buffers{tls_packets =
- Packets}}}),
- tls_handshake_events(Handle, StateName, State, [Event | Acc]);
-
-tls_handshake_events(_Handle, _, #state{}, _) ->
- throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)).
-
-write_application_data(Data0, From,
- #state{socket = Socket,
- negotiated_version = Version,
- transport_cb = Transport,
- connection_states = ConnectionStates0,
- socket_options = SockOpts,
- ssl_options = #ssl_options{renegotiate_at = RenegotiateAt}} = State) ->
- Data = encode_packet(Data0, SockOpts),
-
- case time_to_renegotiate(Data, ConnectionStates0, RenegotiateAt) of
- true ->
- renegotiate(State#state{renegotiation = {true, internal}},
- [{next_event, {call, From}, {application_data, Data0}}]);
- false ->
- {Msgs, ConnectionStates} = ssl_record:encode_data(Data, Version, ConnectionStates0),
- Result = Transport:send(Socket, Msgs),
- ssl_connection:hibernate_after(connection, State#state{connection_states = ConnectionStates},
- [{reply, From, Result}])
- end.
-
-encode_packet(Data, #socket_options{packet=Packet}) ->
- case Packet of
- 1 -> encode_size_packet(Data, 8, (1 bsl 8) - 1);
- 2 -> encode_size_packet(Data, 16, (1 bsl 16) - 1);
- 4 -> encode_size_packet(Data, 32, (1 bsl 32) - 1);
- _ -> Data
- end.
+tls_handshake_events([]) ->
+ throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, malformed_handshake));
+tls_handshake_events(Packets) ->
+ lists:map(fun(Packet) ->
+ {next_event, internal, {handshake, Packet}}
+ end, Packets).
-encode_size_packet(Bin, Size, Max) ->
- Len = erlang:byte_size(Bin),
- case Len > Max of
- true -> throw({error, {badarg, {packet_to_large, Len, Max}}});
- false -> <<Len:Size, Bin/binary>>
- end.
-time_to_renegotiate(_Data,
- #connection_states{current_write =
- #connection_state{sequence_number = Num}},
- RenegotiateAt) ->
-
- %% We could do test:
- %% is_time_to_renegotiate((erlang:byte_size(_Data) div ?MAX_PLAIN_TEXT_LENGTH) + 1, RenegotiateAt),
- %% but we chose to have a some what lower renegotiateAt and a much cheaper test
- is_time_to_renegotiate(Num, RenegotiateAt).
-
-is_time_to_renegotiate(N, M) when N < M->
- false;
-is_time_to_renegotiate(_,_) ->
- true.
renegotiate(#state{role = client} = State, Actions) ->
%% Handle same way as if server requested
%% the renegotiation
@@ -875,131 +636,10 @@ handle_alerts([], Result) ->
handle_alerts(_, {stop,_} = Stop) ->
Stop;
handle_alerts([Alert | Alerts], {next_state, StateName, State}) ->
- handle_alerts(Alerts, handle_alert(Alert, StateName, State));
+ handle_alerts(Alerts, ssl_connection:handle_alert(Alert, StateName, State));
handle_alerts([Alert | Alerts], {next_state, StateName, State, _Actions}) ->
- handle_alerts(Alerts, handle_alert(Alert, StateName, State)).
-handle_alert(#alert{level = ?FATAL} = Alert, StateName,
- #state{socket = Socket, transport_cb = Transport,
- ssl_options = SslOpts, start_or_recv_from = From, host = Host,
- port = Port, session = Session, user_application = {_Mon, Pid},
- role = Role, socket_options = Opts, tracker = Tracker}) ->
- invalidate_session(Role, Host, Port, Session),
- log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
- alert_user(Transport, Tracker, Socket, StateName, Opts, Pid, From, Alert, Role),
- {stop, normal};
-
-handle_alert(#alert{level = ?WARNING, description = ?CLOSE_NOTIFY} = Alert,
- StateName, State) ->
- handle_normal_shutdown(Alert, StateName, State),
- {stop, {shutdown, peer_close}};
+ handle_alerts(Alerts, ssl_connection:handle_alert(Alert, StateName, State)).
-handle_alert(#alert{level = ?WARNING, description = ?NO_RENEGOTIATION} = Alert, StateName,
- #state{ssl_options = SslOpts, renegotiation = {true, internal}} = State) ->
- log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
- handle_normal_shutdown(Alert, StateName, State),
- {stop, {shutdown, peer_close}};
-
-handle_alert(#alert{level = ?WARNING, description = ?NO_RENEGOTIATION} = Alert, StateName,
- #state{ssl_options = SslOpts, renegotiation = {true, From}} = State0) ->
- log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
- gen_statem:reply(From, {error, renegotiation_rejected}),
- {Record, State} = next_record(State0),
- %% Go back to connection!
- next_event(connection, Record, State);
-
-%% Gracefully log and ignore all other warning alerts
-handle_alert(#alert{level = ?WARNING} = Alert, StateName,
- #state{ssl_options = SslOpts} = State0) ->
- log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
- {Record, State} = next_record(State0),
- next_event(StateName, Record, State).
-
-alert_user(Transport, Tracker, Socket, connection, Opts, Pid, From, Alert, Role) ->
- alert_user(Transport, Tracker, Socket, Opts#socket_options.active, Pid, From, Alert, Role);
-alert_user(Transport, Tracker, Socket,_, _, _, From, Alert, Role) ->
- alert_user(Transport, Tracker, Socket, From, Alert, Role).
-
-alert_user(Transport, Tracker, Socket, From, Alert, Role) ->
- alert_user(Transport, Tracker, Socket, false, no_pid, From, Alert, Role).
-
-alert_user(_, _, _, false = Active, Pid, From, Alert, Role) ->
- %% If there is an outstanding ssl_accept | recv
- %% From will be defined and send_or_reply will
- %% send the appropriate error message.
- ReasonCode = ssl_alert:reason_code(Alert, Role),
- send_or_reply(Active, Pid, From, {error, ReasonCode});
-alert_user(Transport, Tracker, Socket, Active, Pid, From, Alert, Role) ->
- case ssl_alert:reason_code(Alert, Role) of
- closed ->
- send_or_reply(Active, Pid, From,
- {ssl_closed, ssl_socket:socket(self(),
- Transport, Socket, ?MODULE, Tracker)});
- ReasonCode ->
- send_or_reply(Active, Pid, From,
- {ssl_error, ssl_socket:socket(self(),
- Transport, Socket, ?MODULE, Tracker), ReasonCode})
- end.
-
-log_alert(true, Info, Alert) ->
- Txt = ssl_alert:alert_txt(Alert),
- error_logger:format("SSL: ~p: ~s\n", [Info, Txt]);
-log_alert(false, _, _) ->
- ok.
-
-handle_own_alert(Alert, Version, StateName,
- #state{transport_cb = Transport,
- socket = Socket,
- connection_states = ConnectionStates,
- ssl_options = SslOpts} = State) ->
- try %% Try to tell the other side
- {BinMsg, _} =
- ssl_alert:encode(Alert, Version, ConnectionStates),
- Transport:send(Socket, BinMsg)
- catch _:_ -> %% Can crash if we are in a uninitialized state
- ignore
- end,
- try %% Try to tell the local user
- log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
- handle_normal_shutdown(Alert,StateName, State)
- catch _:_ ->
- ok
- end,
- {stop, {shutdown, own_alert}}.
-
-handle_normal_shutdown(Alert, _, #state{socket = Socket,
- transport_cb = Transport,
- start_or_recv_from = StartFrom,
- tracker = Tracker,
- role = Role, renegotiation = {false, first}}) ->
- alert_user(Transport, Tracker,Socket, StartFrom, Alert, Role);
-
-handle_normal_shutdown(Alert, StateName, #state{socket = Socket,
- socket_options = Opts,
- transport_cb = Transport,
- user_application = {_Mon, Pid},
- tracker = Tracker,
- start_or_recv_from = RecvFrom, role = Role}) ->
- alert_user(Transport, Tracker, Socket, StateName, Opts, Pid, RecvFrom, Alert, Role).
-
-handle_close_alert(Data, StateName, State0) ->
- case next_tls_record(Data, State0) of
- {#ssl_tls{type = ?ALERT, fragment = EncAlerts}, State} ->
- [Alert|_] = decode_alerts(EncAlerts),
- handle_normal_shutdown(Alert, StateName, State);
- _ ->
- ok
- end.
-
-cancel_timer(undefined) ->
- ok;
-cancel_timer(Timer) ->
- erlang:cancel_timer(Timer),
- ok.
-
-invalidate_session(client, Host, Port, Session) ->
- ssl_manager:invalidate_session(Host, Port, Session);
-invalidate_session(server, _, Port, Session) ->
- ssl_manager:invalidate_session(Port, Session).
%% User closes or recursive call!
close({close, Timeout}, Socket, Transport = gen_tcp, _,_) ->
@@ -1038,31 +678,37 @@ convert_options_partial_chain(Options, up) ->
convert_options_partial_chain(Options, down) ->
list_to_tuple(proplists:delete(partial_chain, tuple_to_list(Options))).
-handle_sni_extension(#client_hello{extensions = HelloExtensions}, State0) ->
- case HelloExtensions#hello_extensions.sni of
- undefined ->
- State0;
- #sni{hostname = Hostname} ->
- NewOptions = update_ssl_options_from_sni(State0#state.ssl_options, Hostname),
- case NewOptions of
- undefined ->
- State0;
- _ ->
- {ok, Ref, CertDbHandle, FileRefHandle, CacheHandle, CRLDbHandle, OwnCert, Key, DHParams} =
- ssl_config:init(NewOptions, State0#state.role),
- State0#state{
- session = State0#state.session#session{own_certificate = OwnCert},
- file_ref_db = FileRefHandle,
- cert_db_ref = Ref,
- cert_db = CertDbHandle,
- crl_db = CRLDbHandle,
- session_cache = CacheHandle,
- private_key = Key,
- diffie_hellman_params = DHParams,
- ssl_options = NewOptions,
- sni_hostname = Hostname
- }
- end
+gen_handshake(GenConnection, StateName, Type, Event,
+ #state{negotiated_version = Version} = State) ->
+ try GenConnection:StateName(Type, Event, State, ?MODULE) of
+ Result ->
+ Result
+ catch
+ _:_ ->
+ ssl_connection:handle_own_alert(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE,
+ malformed_handshake_data),
+ Version, StateName, State)
+ end.
+
+gen_info(Event, connection = StateName, #state{negotiated_version = Version} = State) ->
+ try handle_info(Event, StateName, State) of
+ Result ->
+ Result
+ catch
+ _:_ ->
+ ssl_connection:handle_own_alert(?ALERT_REC(?FATAL, ?INTERNAL_ERROR,
+ malformed_data),
+ Version, StateName, State)
end;
-handle_sni_extension(_, State0) ->
- State0.
+
+gen_info(Event, StateName, #state{negotiated_version = Version} = State) ->
+ try handle_info(Event, StateName, State) of
+ Result ->
+ Result
+ catch
+ _:_ ->
+ ssl_connection:handle_own_alert(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE,
+ malformed_handshake_data),
+ Version, StateName, State)
+ end.
+
diff --git a/lib/ssl/src/tls_handshake.erl b/lib/ssl/src/tls_handshake.erl
index f34eebb0e4..a2486bf752 100644
--- a/lib/ssl/src/tls_handshake.erl
+++ b/lib/ssl/src/tls_handshake.erl
@@ -33,7 +33,7 @@
-include_lib("public_key/include/public_key.hrl").
-export([client_hello/8, hello/4,
- get_tls_handshake/3, encode_handshake/2, decode_handshake/3]).
+ get_tls_handshake/4, encode_handshake/2, decode_handshake/4]).
-type tls_handshake() :: #client_hello{} | ssl_handshake:ssl_handshake().
@@ -41,7 +41,7 @@
%% Internal application API
%%====================================================================
%%--------------------------------------------------------------------
--spec client_hello(host(), inet:port_number(), #connection_states{},
+-spec client_hello(host(), inet:port_number(), ssl_record:connection_states(),
#ssl_options{}, integer(), atom(), boolean(), der_cert()) ->
#client_hello{}.
%%
@@ -54,8 +54,7 @@ client_hello(Host, Port, ConnectionStates,
} = SslOpts,
Cache, CacheCb, Renegotiation, OwnCert) ->
Version = tls_record:highest_protocol_version(Versions),
- Pending = ssl_record:pending_connection_state(ConnectionStates, read),
- SecParams = Pending#connection_state.security_parameters,
+ #{security_parameters := SecParams} = ssl_record:pending_connection_state(ConnectionStates, read),
AvailableCipherSuites = ssl_handshake:available_suites(UserSuites, Version),
Extensions = ssl_handshake:client_hello_extensions(Host, Version,
AvailableCipherSuites,
@@ -78,14 +77,14 @@ client_hello(Host, Port, ConnectionStates,
%%--------------------------------------------------------------------
-spec hello(#server_hello{} | #client_hello{}, #ssl_options{},
- #connection_states{} | {inet:port_number(), #session{}, db_handle(),
- atom(), #connection_states{},
+ ssl_record:connection_states() | {inet:port_number(), #session{}, db_handle(),
+ atom(), ssl_record:connection_states(),
binary() | undefined, ssl_cipher:key_algo()},
boolean()) ->
{tls_record:tls_version(), session_id(),
- #connection_states{}, alpn | npn, binary() | undefined}|
+ ssl_record:connection_states(), alpn | npn, binary() | undefined}|
{tls_record:tls_version(), {resumed | new, #session{}},
- #connection_states{}, binary() | undefined,
+ ssl_record:connection_states(), binary() | undefined,
#hello_extensions{}, {ssl_cipher:hash(), ssl_cipher:sign_algo()} | undefined} |
#alert{}.
%%
@@ -109,19 +108,25 @@ hello(#client_hello{client_version = ClientVersion,
cipher_suites = CipherSuites} = Hello,
#ssl_options{versions = Versions} = SslOpts,
Info, Renegotiation) ->
- Version = ssl_handshake:select_version(tls_record, ClientVersion, Versions),
- case ssl_cipher:is_fallback(CipherSuites) of
+ try
+ Version = ssl_handshake:select_version(tls_record, ClientVersion, Versions),
+ case ssl_cipher:is_fallback(CipherSuites) of
true ->
- Highest = tls_record:highest_protocol_version(Versions),
- case tls_record:is_higher(Highest, Version) of
- true ->
- ?ALERT_REC(?FATAL, ?INAPPROPRIATE_FALLBACK);
- false ->
- handle_client_hello(Version, Hello, SslOpts, Info, Renegotiation)
- end;
- false ->
- handle_client_hello(Version, Hello, SslOpts, Info, Renegotiation)
- end.
+ Highest = tls_record:highest_protocol_version(Versions),
+ case tls_record:is_higher(Highest, Version) of
+ true ->
+ ?ALERT_REC(?FATAL, ?INAPPROPRIATE_FALLBACK);
+ false ->
+ handle_client_hello(Version, Hello, SslOpts, Info, Renegotiation)
+ end;
+ false ->
+ handle_client_hello(Version, Hello, SslOpts, Info, Renegotiation)
+ end
+ catch
+ _:_ ->
+ ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, malformed_handshake_data)
+ end.
+
%%--------------------------------------------------------------------
-spec encode_handshake(tls_handshake(), tls_record:tls_version()) -> iolist().
%%
@@ -133,17 +138,17 @@ encode_handshake(Package, Version) ->
[MsgType, ?uint24(Len), Bin].
%%--------------------------------------------------------------------
--spec get_tls_handshake(tls_record:tls_version(), binary(), binary() | iolist()) ->
+-spec get_tls_handshake(tls_record:tls_version(), binary(), binary() | iolist(), #ssl_options{}) ->
{[tls_handshake()], binary()}.
%%
%% Description: Given buffered and new data from ssl_record, collects
%% and returns it as a list of handshake messages, also returns leftover
%% data.
%%--------------------------------------------------------------------
-get_tls_handshake(Version, Data, <<>>) ->
- get_tls_handshake_aux(Version, Data, []);
-get_tls_handshake(Version, Data, Buffer) ->
- get_tls_handshake_aux(Version, list_to_binary([Buffer, Data]), []).
+get_tls_handshake(Version, Data, <<>>, Options) ->
+ get_tls_handshake_aux(Version, Data, Options, []);
+get_tls_handshake(Version, Data, Buffer, Options) ->
+ get_tls_handshake_aux(Version, list_to_binary([Buffer, Data]), Options, []).
%%--------------------------------------------------------------------
%%% Internal functions
@@ -159,7 +164,8 @@ handle_client_hello(Version, #client_hello{session_id = SugesstedId,
{Port, Session0, Cache, CacheCb, ConnectionStates0, Cert, _}, Renegotiation) ->
case tls_record:is_acceptable_version(Version, Versions) of
true ->
- AvailableHashSigns = available_signature_algs(ClientHashSigns, SupportedHashSigns, Cert, Version),
+ AvailableHashSigns = ssl_handshake:available_signature_algs(
+ ClientHashSigns, SupportedHashSigns, Cert, Version),
ECCCurve = ssl_handshake:select_curve(Curves, ssl_handshake:supported_ecc(Version)),
{Type, #session{cipher_suite = CipherSuite} = Session1}
= ssl_handshake:select_session(SugesstedId, CipherSuites, AvailableHashSigns, Compressions,
@@ -167,7 +173,7 @@ handle_client_hello(Version, #client_hello{session_id = SugesstedId,
SslOpts, Cache, CacheCb, Cert),
case CipherSuite of
no_suite ->
- ?ALERT_REC(?FATAL, ?INSUFFICIENT_SECURITY);
+ ?ALERT_REC(?FATAL, ?INSUFFICIENT_SECURITY, no_suitable_ciphers);
_ ->
{KeyExAlg,_,_,_} = ssl_cipher:suite_definition(CipherSuite),
case ssl_handshake:select_hashsign(ClientHashSigns, Cert, KeyExAlg, SupportedHashSigns, Version) of
@@ -184,24 +190,29 @@ handle_client_hello(Version, #client_hello{session_id = SugesstedId,
end.
get_tls_handshake_aux(Version, <<?BYTE(Type), ?UINT24(Length),
- Body:Length/binary,Rest/binary>>, Acc) ->
+ Body:Length/binary,Rest/binary>>, #ssl_options{v2_hello_compatible = V2Hello} = Opts, Acc) ->
Raw = <<?BYTE(Type), ?UINT24(Length), Body/binary>>,
- Handshake = decode_handshake(Version, Type, Body),
- get_tls_handshake_aux(Version, Rest, [{Handshake,Raw} | Acc]);
-get_tls_handshake_aux(_Version, Data, Acc) ->
+ try decode_handshake(Version, Type, Body, V2Hello) of
+ Handshake ->
+ get_tls_handshake_aux(Version, Rest, Opts, [{Handshake,Raw} | Acc])
+ catch
+ _:_ ->
+ throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, handshake_decode_error))
+ end;
+get_tls_handshake_aux(_Version, Data, _, Acc) ->
{lists:reverse(Acc), Data}.
-decode_handshake(_, ?HELLO_REQUEST, <<>>) ->
+decode_handshake(_, ?HELLO_REQUEST, <<>>, _) ->
#hello_request{};
%% Client hello v2.
%% The server must be able to receive such messages, from clients that
%% are willing to use ssl v3 or higher, but have ssl v2 compatibility.
decode_handshake(_Version, ?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor),
- ?UINT16(CSLength), ?UINT16(0),
- ?UINT16(CDLength),
- CipherSuites:CSLength/binary,
- ChallengeData:CDLength/binary>>) ->
+ ?UINT16(CSLength), ?UINT16(0),
+ ?UINT16(CDLength),
+ CipherSuites:CSLength/binary,
+ ChallengeData:CDLength/binary>>, true) ->
#client_hello{client_version = {Major, Minor},
random = ssl_v2:client_random(ChallengeData, CDLength),
session_id = 0,
@@ -209,12 +220,18 @@ decode_handshake(_Version, ?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor),
compression_methods = [?NULL],
extensions = #hello_extensions{}
};
+decode_handshake(_Version, ?CLIENT_HELLO, <<?BYTE(_), ?BYTE(_),
+ ?UINT16(CSLength), ?UINT16(0),
+ ?UINT16(CDLength),
+ _CipherSuites:CSLength/binary,
+ _ChallengeData:CDLength/binary>>, false) ->
+ throw(?ALERT_REC(?FATAL, ?PROTOCOL_VERSION, ssl_v2_client_hello_no_supported));
decode_handshake(_Version, ?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:32/binary,
- ?BYTE(SID_length), Session_ID:SID_length/binary,
- ?UINT16(Cs_length), CipherSuites:Cs_length/binary,
- ?BYTE(Cm_length), Comp_methods:Cm_length/binary,
- Extensions/binary>>) ->
-
+ ?BYTE(SID_length), Session_ID:SID_length/binary,
+ ?UINT16(Cs_length), CipherSuites:Cs_length/binary,
+ ?BYTE(Cm_length), Comp_methods:Cm_length/binary,
+ Extensions/binary>>, _) ->
+
DecodedExtensions = ssl_handshake:decode_hello_extensions({client, Extensions}),
#client_hello{
@@ -226,7 +243,7 @@ decode_handshake(_Version, ?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:3
extensions = DecodedExtensions
};
-decode_handshake(Version, Tag, Msg) ->
+decode_handshake(Version, Tag, Msg, _) ->
ssl_handshake:decode_handshake(Version, Tag, Msg).
enc_handshake(#hello_request{}, _Version) ->
@@ -278,14 +295,3 @@ handle_server_hello_extensions(Version, SessionId, Random, CipherSuite,
{Version, SessionId, ConnectionStates, ProtoExt, Protocol}
end.
-available_signature_algs(undefined, SupportedHashSigns, _, {Major, Minor}) when
- (Major >= 3) andalso (Minor >= 3) ->
- SupportedHashSigns;
-available_signature_algs(#hash_sign_algos{hash_sign_algos = ClientHashSigns}, SupportedHashSigns,
- _, {Major, Minor}) when (Major >= 3) andalso (Minor >= 3) ->
- sets:to_list(sets:intersection(sets:from_list(ClientHashSigns),
- sets:from_list(SupportedHashSigns)));
-available_signature_algs(_, _, _, _) ->
- undefined.
-
-
diff --git a/lib/ssl/src/tls_record.erl b/lib/ssl/src/tls_record.erl
index 9348c8bbdd..5331dd1303 100644
--- a/lib/ssl/src/tls_record.erl
+++ b/lib/ssl/src/tls_record.erl
@@ -32,7 +32,7 @@
-include("ssl_cipher.hrl").
%% Handling of incoming data
--export([get_tls_records/2]).
+-export([get_tls_records/2, init_connection_states/2]).
%% Decoding
-export([decode_cipher_text/3]).
@@ -56,12 +56,28 @@
%%====================================================================
%% Internal application API
%%====================================================================
+%%--------------------------------------------------------------------
+-spec init_connection_states(client | server, one_n_minus_one | zero_n | disabled) ->
+ ssl_record:connection_states().
+%% %
+ %
+%% Description: Creates a connection_states record with appropriate
+%% values for the initial SSL connection setup.
+%%--------------------------------------------------------------------
+init_connection_states(Role, BeastMitigation) ->
+ ConnectionEnd = ssl_record:record_protocol_role(Role),
+ Current = initial_connection_state(ConnectionEnd, BeastMitigation),
+ Pending = ssl_record:empty_connection_state(ConnectionEnd, BeastMitigation),
+ #{current_read => Current,
+ pending_read => Pending,
+ current_write => Current,
+ pending_write => Pending}.
%%--------------------------------------------------------------------
-spec get_tls_records(binary(), binary()) -> {[binary()], binary()} | #alert{}.
%%
-%% Description: Given old buffer and new data from TCP, packs up a records
%% and returns it as a list of tls_compressed binaries also returns leftover
+%% Description: Given old buffer and new data from TCP, packs up a records
%% data
%%--------------------------------------------------------------------
get_tls_records(Data, <<>>) ->
@@ -129,63 +145,61 @@ get_tls_records_aux(Data, Acc) ->
end.
encode_plain_text(Type, Version, Data,
- #connection_states{current_write =
- #connection_state{
- sequence_number = Seq,
- compression_state=CompS0,
- security_parameters=
- #security_parameters{
- cipher_type = ?AEAD,
- compression_algorithm=CompAlg}
- }= WriteState0} = ConnectionStates) ->
+ #{current_write :=
+ #{sequence_number := Seq,
+ compression_state := CompS0,
+ security_parameters :=
+ #security_parameters{
+ cipher_type = ?AEAD,
+ compression_algorithm = CompAlg}
+ }= WriteState0} = ConnectionStates) ->
{Comp, CompS1} = ssl_record:compress(CompAlg, Data, CompS0),
- WriteState1 = WriteState0#connection_state{compression_state = CompS1},
+ WriteState1 = WriteState0#{compression_state => CompS1},
AAD = calc_aad(Type, Version, WriteState1),
{CipherFragment, WriteState} = ssl_record:cipher_aead(Version, Comp, WriteState1, AAD),
CipherText = encode_tls_cipher_text(Type, Version, CipherFragment),
- {CipherText, ConnectionStates#connection_states{current_write = WriteState#connection_state{sequence_number = Seq +1}}};
+ {CipherText, ConnectionStates#{current_write => WriteState#{sequence_number => Seq +1}}};
encode_plain_text(Type, Version, Data,
- #connection_states{current_write =
- #connection_state{
- sequence_number = Seq,
- compression_state=CompS0,
- security_parameters=
- #security_parameters{compression_algorithm=CompAlg}
- }= WriteState0} = ConnectionStates) ->
+ #{current_write :=
+ #{sequence_number := Seq,
+ compression_state := CompS0,
+ security_parameters :=
+ #security_parameters{compression_algorithm = CompAlg}
+ }= WriteState0} = ConnectionStates) ->
{Comp, CompS1} = ssl_record:compress(CompAlg, Data, CompS0),
- WriteState1 = WriteState0#connection_state{compression_state = CompS1},
+ WriteState1 = WriteState0#{compression_state => CompS1},
MacHash = calc_mac_hash(Type, Version, Comp, WriteState1),
{CipherFragment, WriteState} = ssl_record:cipher(Version, Comp, WriteState1, MacHash),
CipherText = encode_tls_cipher_text(Type, Version, CipherFragment),
- {CipherText, ConnectionStates#connection_states{current_write = WriteState#connection_state{sequence_number = Seq +1}}}.
+ {CipherText, ConnectionStates#{current_write => WriteState#{sequence_number => Seq +1}}};
+encode_plain_text(_,_,_, CS) ->
+ exit({cs, CS}).
%%--------------------------------------------------------------------
--spec decode_cipher_text(#ssl_tls{}, #connection_states{}, boolean()) ->
- {#ssl_tls{}, #connection_states{}}| #alert{}.
+-spec decode_cipher_text(#ssl_tls{}, ssl_record:connection_states(), boolean()) ->
+ {#ssl_tls{}, ssl_record:connection_states()}| #alert{}.
%%
%% Description: Decode cipher text
%%--------------------------------------------------------------------
decode_cipher_text(#ssl_tls{type = Type, version = Version,
fragment = CipherFragment} = CipherText,
- #connection_states{current_read =
- #connection_state{
- compression_state = CompressionS0,
- sequence_number = Seq,
- security_parameters=
- #security_parameters{
- cipher_type = ?AEAD,
- compression_algorithm=CompAlg}
- } = ReadState0} = ConnnectionStates0, _) ->
+ #{current_read :=
+ #{compression_state := CompressionS0,
+ sequence_number := Seq,
+ security_parameters :=
+ #security_parameters{
+ cipher_type = ?AEAD,
+ compression_algorithm = CompAlg}
+ } = ReadState0} = ConnnectionStates0, _) ->
AAD = calc_aad(Type, Version, ReadState0),
case ssl_record:decipher_aead(Version, CipherFragment, ReadState0, AAD) of
{PlainFragment, ReadState1} ->
{Plain, CompressionS1} = ssl_record:uncompress(CompAlg,
PlainFragment, CompressionS0),
- ConnnectionStates = ConnnectionStates0#connection_states{
- current_read = ReadState1#connection_state{
- sequence_number = Seq + 1,
- compression_state = CompressionS1}},
+ ConnnectionStates = ConnnectionStates0#{
+ current_read => ReadState1#{sequence_number => Seq + 1,
+ compression_state => CompressionS1}},
{CipherText#ssl_tls{fragment = Plain}, ConnnectionStates};
#alert{} = Alert ->
Alert
@@ -193,13 +207,12 @@ decode_cipher_text(#ssl_tls{type = Type, version = Version,
decode_cipher_text(#ssl_tls{type = Type, version = Version,
fragment = CipherFragment} = CipherText,
- #connection_states{current_read =
- #connection_state{
- compression_state = CompressionS0,
- sequence_number = Seq,
- security_parameters=
- #security_parameters{compression_algorithm=CompAlg}
- } = ReadState0} = ConnnectionStates0, PaddingCheck) ->
+ #{current_read :=
+ #{compression_state := CompressionS0,
+ sequence_number := Seq,
+ security_parameters :=
+ #security_parameters{compression_algorithm = CompAlg}
+ } = ReadState0} = ConnnectionStates0, PaddingCheck) ->
case ssl_record:decipher(Version, CipherFragment, ReadState0, PaddingCheck) of
{PlainFragment, Mac, ReadState1} ->
MacHash = calc_mac_hash(Type, Version, PlainFragment, ReadState1),
@@ -207,10 +220,10 @@ decode_cipher_text(#ssl_tls{type = Type, version = Version,
true ->
{Plain, CompressionS1} = ssl_record:uncompress(CompAlg,
PlainFragment, CompressionS0),
- ConnnectionStates = ConnnectionStates0#connection_states{
- current_read = ReadState1#connection_state{
- sequence_number = Seq + 1,
- compression_state = CompressionS1}},
+ ConnnectionStates = ConnnectionStates0#{
+ current_read => ReadState1#{
+ sequence_number => Seq + 1,
+ compression_state => CompressionS1}},
{CipherText#ssl_tls{fragment = Plain}, ConnnectionStates};
false ->
?ALERT_REC(?FATAL, ?BAD_RECORD_MAC)
@@ -375,6 +388,18 @@ is_acceptable_version(_,_) ->
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
+initial_connection_state(ConnectionEnd, BeastMitigation) ->
+ #{security_parameters =>
+ ssl_record:initial_security_params(ConnectionEnd),
+ sequence_number => 0,
+ beast_mitigation => BeastMitigation,
+ compression_state => undefined,
+ cipher_state => undefined,
+ mac_secret => undefined,
+ secure_renegotiation => undefined,
+ client_verify_data => undefined,
+ server_verify_data => undefined
+ }.
lowest_list_protocol_version(Ver, []) ->
Ver;
@@ -413,15 +438,15 @@ sufficient_tlsv1_2_crypto_support() ->
proplists:get_bool(sha256, proplists:get_value(hashs, CryptoSupport)).
calc_mac_hash(Type, Version,
- PlainFragment, #connection_state{sequence_number = SeqNo,
- mac_secret = MacSecret,
- security_parameters =
- SecPars}) ->
+ PlainFragment, #{sequence_number := SeqNo,
+ mac_secret := MacSecret,
+ security_parameters:=
+ SecPars}) ->
Length = erlang:iolist_size(PlainFragment),
mac_hash(Version, SecPars#security_parameters.mac_algorithm,
MacSecret, SeqNo, Type,
Length, PlainFragment).
calc_aad(Type, {MajVer, MinVer},
- #connection_state{sequence_number = SeqNo}) ->
+ #{sequence_number := SeqNo}) ->
<<SeqNo:64/integer, ?BYTE(Type), ?BYTE(MajVer), ?BYTE(MinVer)>>.
diff --git a/lib/ssl/test/make_certs.erl b/lib/ssl/test/make_certs.erl
index 5eebf773a7..009bcd81ad 100644
--- a/lib/ssl/test/make_certs.erl
+++ b/lib/ssl/test/make_certs.erl
@@ -172,16 +172,29 @@ revoke(Root, CA, User, C) ->
gencrl(Root, CA, C).
gencrl(Root, CA, C) ->
+ %% By default, the CRL is valid for 24 hours from now.
+ gencrl(Root, CA, C, 24).
+
+gencrl(Root, CA, C, CrlHours) ->
CACnfFile = filename:join([Root, CA, "ca.cnf"]),
CACRLFile = filename:join([Root, CA, "crl.pem"]),
Cmd = [C#config.openssl_cmd, " ca"
" -gencrl ",
- " -crlhours 24",
+ " -crlhours ", integer_to_list(CrlHours),
" -out ", CACRLFile,
" -config ", CACnfFile],
Env = [{"ROOTDIR", filename:absname(Root)}],
cmd(Cmd, Env).
+can_generate_expired_crls(C) ->
+ %% OpenSSL can generate CRLs with an expiration date in the past,
+ %% if we pass a negative number for -crlhours. However, LibreSSL
+ %% rejects this with the error "invalid argument -24: too small".
+ %% Let's check which one we have.
+ Cmd = [C#config.openssl_cmd, " ca -crlhours -24"],
+ Output = os:cmd(Cmd),
+ 0 =:= string:str(Output, "too small").
+
verify(Root, CA, User, C) ->
CAFile = filename:join([Root, User, "cacerts.pem"]),
CACRLFile = filename:join([Root, CA, "crl.pem"]),
diff --git a/lib/ssl/test/ssl.spec b/lib/ssl/test/ssl.spec
index 86e14c033e..0ad94e22bc 100644
--- a/lib/ssl/test/ssl.spec
+++ b/lib/ssl/test/ssl.spec
@@ -1,4 +1,5 @@
{suites,"../ssl_test",all}.
{skip_cases, "../ssl_test",
- ssl_bench_SUITE, [setup_sequential, setup_concurrent, payload_simple],
+ ssl_bench_SUITE, [setup_sequential, setup_concurrent, payload_simple,
+ use_pem_cache, bypass_pem_cache],
"Benchmarks run separately"}.
diff --git a/lib/ssl/test/ssl_ECC_SUITE.erl b/lib/ssl/test/ssl_ECC_SUITE.erl
index 4260cb910b..258922d128 100644
--- a/lib/ssl/test/ssl_ECC_SUITE.erl
+++ b/lib/ssl/test/ssl_ECC_SUITE.erl
@@ -74,8 +74,8 @@ init_per_suite(Config0) ->
try crypto:start() of
ok ->
%% make rsa certs using oppenssl
- {ok, _} = make_certs:all(?config(data_dir, Config0),
- ?config(priv_dir, Config0)),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config0),
+ proplists:get_value(priv_dir, Config0)),
Config1 = ssl_test_lib:make_ecdsa_cert(Config0),
Config2 = ssl_test_lib:make_ecdh_rsa_cert(Config1),
ssl_test_lib:cert_options(Config2)
@@ -130,8 +130,8 @@ init_per_group(Group, Config) ->
common_init_per_group(GroupName, Config) ->
case ssl_test_lib:is_tls_version(GroupName) of
true ->
- ssl_test_lib:init_tls_version(GroupName),
- [{tls_version, GroupName} | Config];
+ Config0 = ssl_test_lib:init_tls_version(GroupName, Config),
+ [{tls_version, GroupName} | Config0];
_ ->
openssl_check(GroupName, Config)
end.
@@ -142,10 +142,10 @@ end_per_group(_GroupName, Config) ->
%%--------------------------------------------------------------------
init_per_testcase(TestCase, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:log("Ciphers: ~p~n ", [ ssl:cipher_suites()]),
end_per_testcase(TestCase, Config),
- ssl:start(),
+ ssl_test_lib:clean_start(),
ct:timetrap({seconds, 15}),
Config.
@@ -158,43 +158,43 @@ end_per_testcase(_TestCase, Config) ->
%%--------------------------------------------------------------------
client_ecdh_server_ecdh(Config) when is_list(Config) ->
- COpts = ?config(client_ecdh_rsa_opts, Config),
- SOpts = ?config(server_ecdh_rsa_verify_opts, Config),
+ COpts = proplists:get_value(client_ecdh_rsa_opts, Config),
+ SOpts = proplists:get_value(server_ecdh_rsa_opts, Config),
basic_test(COpts, SOpts, Config).
client_ecdh_server_rsa(Config) when is_list(Config) ->
- COpts = ?config(client_ecdh_rsa_opts, Config),
- SOpts = ?config(server_ecdh_rsa_verify_opts, Config),
+ COpts = proplists:get_value(client_ecdh_rsa_opts, Config),
+ SOpts = proplists:get_value(server_opts, Config),
basic_test(COpts, SOpts, Config).
client_rsa_server_ecdh(Config) when is_list(Config) ->
- COpts = ?config(client_ecdh_rsa_opts, Config),
- SOpts = ?config(server_ecdh_rsa_verify_opts, Config),
+ COpts = proplists:get_value(client_opts, Config),
+ SOpts = proplists:get_value(server_ecdh_rsa_opts, Config),
basic_test(COpts, SOpts, Config).
client_rsa_server_rsa(Config) when is_list(Config) ->
- COpts = ?config(client_verification_opts, Config),
- SOpts = ?config(server_verification_opts, Config),
+ COpts = proplists:get_value(client_opts, Config),
+ SOpts = proplists:get_value(server_opts, Config),
basic_test(COpts, SOpts, Config).
client_ecdsa_server_ecdsa(Config) when is_list(Config) ->
- COpts = ?config(client_ecdsa_opts, Config),
- SOpts = ?config(server_ecdsa_verify_opts, Config),
+ COpts = proplists:get_value(client_ecdsa_opts, Config),
+ SOpts = proplists:get_value(server_ecdsa_opts, Config),
basic_test(COpts, SOpts, Config).
client_ecdsa_server_rsa(Config) when is_list(Config) ->
- COpts = ?config(client_ecdsa_opts, Config),
- SOpts = ?config(server_ecdsa_verify_opts, Config),
+ COpts = proplists:get_value(client_ecdsa_opts, Config),
+ SOpts = proplists:get_value(server_opts, Config),
basic_test(COpts, SOpts, Config).
client_rsa_server_ecdsa(Config) when is_list(Config) ->
- COpts = ?config(client_ecdsa_opts, Config),
- SOpts = ?config(server_ecdsa_verify_opts, Config),
+ COpts = proplists:get_value(client_opts, Config),
+ SOpts = proplists:get_value(server_ecdsa_opts, Config),
basic_test(COpts, SOpts, Config).
client_ecdsa_server_ecdsa_with_raw_key(Config) when is_list(Config) ->
- COpts = ?config(client_ecdsa_opts, Config),
- SOpts = ?config(server_ecdsa_verify_opts, Config),
+ COpts = proplists:get_value(client_ecdsa_opts, Config),
+ SOpts = proplists:get_value(server_ecdsa_opts, Config),
ServerCert = proplists:get_value(certfile, SOpts),
ServerKeyFile = proplists:get_value(keyfile, SOpts),
{ok, PemBin} = file:read_file(ServerKeyFile),
@@ -205,8 +205,8 @@ client_ecdsa_server_ecdsa_with_raw_key(Config) when is_list(Config) ->
ClientCert = proplists:get_value(certfile, COpts),
ClientKey = proplists:get_value(keyfile, COpts),
ClientCA = proplists:get_value(cacertfile, COpts),
- SType = ?config(server_type, Config),
- CType = ?config(client_type, Config),
+ SType = proplists:get_value(server_type, Config),
+ CType = proplists:get_value(client_type, Config),
{Server, Port} = start_server_with_raw_key(SType,
ClientCA, ServerCA,
ServerCert,
@@ -231,8 +231,8 @@ basic_test(COpts, SOpts, Config) ->
Config).
basic_test(ClientCert, ClientKey, ClientCA, ServerCert, ServerKey, ServerCA, Config) ->
- SType = ?config(server_type, Config),
- CType = ?config(client_type, Config),
+ SType = proplists:get_value(server_type, Config),
+ CType = proplists:get_value(client_type, Config),
{Server, Port} = start_server(SType,
ClientCA, ServerCA,
ServerCert,
@@ -244,20 +244,20 @@ basic_test(ClientCert, ClientKey, ClientCA, ServerCert, ServerKey, ServerCA, Con
check_result(Server, SType, Client, CType),
close(Server, Client).
-start_client(openssl, Port, CA, OwnCa, Cert, Key, Config) ->
- PrivDir = ?config(priv_dir, Config),
- NewCA = new_ca(filename:join(PrivDir, "new_ca.pem"), CA, OwnCa),
+start_client(openssl, Port, PeerCA, OwnCa, Cert, Key, _Config) ->
+ CA = new_openssl_ca("openssl_client_ca", PeerCA, OwnCa),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
Exe = "openssl",
Args = ["s_client", "-verify", "2", "-port", integer_to_list(Port),
ssl_test_lib:version_flag(Version),
- "-cert", Cert, "-CAfile", NewCA,
+ "-cert", Cert, "-CAfile", CA,
"-key", Key, "-host","localhost", "-msg", "-debug"],
OpenSslPort = ssl_test_lib:portable_open_port(Exe, Args),
true = port_command(OpenSslPort, "Hello world"),
OpenSslPort;
-start_client(erlang, Port, CA, _, Cert, Key, Config) ->
+start_client(erlang, Port, PeerCA, OwnCa, Cert, Key, Config) ->
+ CA = new_ca("erlang_client_ca", PeerCA, OwnCa),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -267,20 +267,19 @@ start_client(erlang, Port, CA, _, Cert, Key, Config) ->
{cacertfile, CA},
{certfile, Cert}, {keyfile, Key}]}]).
-start_server(openssl, CA, OwnCa, Cert, Key, Config) ->
- PrivDir = ?config(priv_dir, Config),
- NewCA = new_ca(filename:join(PrivDir, "new_ca.pem"), CA, OwnCa),
-
+start_server(openssl, PeerCA, OwnCa, Cert, Key, _Config) ->
+ CA = new_openssl_ca("openssl_server_ca", PeerCA, OwnCa),
Port = ssl_test_lib:inet_port(node()),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
Exe = "openssl",
Args = ["s_server", "-accept", integer_to_list(Port), ssl_test_lib:version_flag(Version),
- "-verify", "2", "-cert", Cert, "-CAfile", NewCA,
+ "-verify", "2", "-cert", Cert, "-CAfile", CA,
"-key", Key, "-msg", "-debug"],
OpenSslPort = ssl_test_lib:portable_open_port(Exe, Args),
true = port_command(OpenSslPort, "Hello world"),
{OpenSslPort, Port};
-start_server(erlang, CA, _, Cert, Key, Config) ->
+start_server(erlang, PeerCA, OwnCa, Cert, Key, Config) ->
+ CA = new_ca("erlang_server_ca", PeerCA, OwnCa),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -291,7 +290,8 @@ start_server(erlang, CA, _, Cert, Key, Config) ->
[{verify, verify_peer}, {cacertfile, CA},
{certfile, Cert}, {keyfile, Key}]}]),
{Server, ssl_test_lib:inet_port(Server)}.
-start_server_with_raw_key(erlang, CA, _, Cert, Key, Config) ->
+start_server_with_raw_key(erlang, PeerCA, OwnCa, Cert, Key, Config) ->
+ CA = new_ca("erlang_server_ca", PeerCA, OwnCa),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -315,7 +315,7 @@ check_result(_,openssl, _, openssl) ->
openssl_check(erlang, Config) ->
Config;
openssl_check(_, Config) ->
- TLSVersion = ?config(tls_version, Config),
+ TLSVersion = proplists:get_value(tls_version, Config),
case ssl_test_lib:check_sane_openssl_version(TLSVersion) of
true ->
Config;
@@ -336,13 +336,29 @@ close(Client, Server) ->
ssl_test_lib:close(Server),
ssl_test_lib:close(Client).
-%% Work around OpenSSL bug, apparently the same bug as we had fixed in
-%% 11629690ba61f8e0c93ef9b2b6102fd279825977
new_ca(FileName, CA, OwnCa) ->
{ok, P1} = file:read_file(CA),
E1 = public_key:pem_decode(P1),
{ok, P2} = file:read_file(OwnCa),
E2 = public_key:pem_decode(P2),
- Pem = public_key:pem_encode(E2 ++E1),
+ Pem = public_key:pem_encode(E1 ++E2),
file:write_file(FileName, Pem),
FileName.
+
+new_openssl_ca(FileName, CA, OwnCa) ->
+ {ok, P1} = file:read_file(CA),
+ E1 = public_key:pem_decode(P1),
+ {ok, P2} = file:read_file(OwnCa),
+ E2 = public_key:pem_decode(P2),
+ case os:cmd("openssl version") of
+ "OpenSSL 1.0.1p-freebsd" ++ _ ->
+ Pem = public_key:pem_encode(E1 ++E2),
+ file:write_file(FileName, Pem);
+ "LibreSSL" ++ _ ->
+ Pem = public_key:pem_encode(E1 ++E2),
+ file:write_file(FileName, Pem);
+ _ ->
+ Pem = public_key:pem_encode(E2 ++E1),
+ file:write_file(FileName, Pem)
+ end,
+ FileName.
diff --git a/lib/ssl/test/ssl_alpn_handshake_SUITE.erl b/lib/ssl/test/ssl_alpn_handshake_SUITE.erl
index f5469ec8e0..9d57e89b9b 100644
--- a/lib/ssl/test/ssl_alpn_handshake_SUITE.erl
+++ b/lib/ssl/test/ssl_alpn_handshake_SUITE.erl
@@ -71,9 +71,9 @@ init_per_suite(Config) ->
catch crypto:stop(),
try crypto:start() of
ok ->
- ssl:start(),
- {ok, _} = make_certs:all(?config(data_dir, Config),
- ?config(priv_dir, Config)),
+ ssl_test_lib:clean_start(),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config),
+ proplists:get_value(priv_dir, Config)),
ssl_test_lib:cert_options(Config)
catch _:_ ->
{skip, "Crypto did not start"}
@@ -90,7 +90,7 @@ init_per_group(GroupName, Config) ->
true ->
case ssl_test_lib:sufficient_crypto_support(GroupName) of
true ->
- ssl_test_lib:init_tls_version(GroupName),
+ ssl_test_lib:init_tls_version(GroupName, Config),
Config;
false ->
{skip, "Missing crypto support"}
@@ -104,7 +104,7 @@ end_per_group(_GroupName, Config) ->
Config.
init_per_testcase(_TestCase, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:timetrap({seconds, 10}),
Config.
@@ -226,9 +226,9 @@ client_alpn_and_server_alpn_npn(Config) when is_list(Config) ->
client_renegotiate(Config) when is_list(Config) ->
Data = "hello world",
- ClientOpts0 = ?config(client_opts, Config),
+ ClientOpts0 = proplists:get_value(client_opts, Config),
ClientOpts = [{alpn_advertised_protocols, [<<"http/1.0">>]}] ++ ClientOpts0,
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = proplists:get_value(server_opts, Config),
ServerOpts = [{alpn_preferred_protocols, [<<"spdy/2">>, <<"http/1.1">>, <<"http/1.0">>]}] ++ ServerOpts0,
ExpectedProtocol = {ok, <<"http/1.0">>},
@@ -250,9 +250,9 @@ client_renegotiate(Config) when is_list(Config) ->
%--------------------------------------------------------------------------------
session_reused(Config) when is_list(Config)->
- ClientOpts0 = ?config(client_opts, Config),
+ ClientOpts0 = proplists:get_value(client_opts, Config),
ClientOpts = [{alpn_advertised_protocols, [<<"http/1.0">>]}] ++ ClientOpts0,
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = proplists:get_value(server_opts, Config),
ServerOpts = [{alpn_preferred_protocols, [<<"spdy/2">>, <<"http/1.1">>, <<"http/1.0">>]}] ++ ServerOpts0,
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -299,7 +299,7 @@ session_reused(Config) when is_list(Config)->
%--------------------------------------------------------------------------------
alpn_not_supported_client(Config) when is_list(Config) ->
- ClientOpts0 = ?config(client_opts, Config),
+ ClientOpts0 = proplists:get_value(client_opts, Config),
PrefProtocols = {client_preferred_next_protocols,
{client, [<<"http/1.0">>], <<"http/1.1">>}},
ClientOpts = [PrefProtocols] ++ ClientOpts0,
@@ -315,7 +315,7 @@ alpn_not_supported_client(Config) when is_list(Config) ->
%--------------------------------------------------------------------------------
alpn_not_supported_server(Config) when is_list(Config)->
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = proplists:get_value(server_opts, Config),
AdvProtocols = {next_protocols_advertised, [<<"spdy/2">>, <<"http/1.1">>, <<"http/1.0">>]},
ServerOpts = [AdvProtocols] ++ ServerOpts0,
@@ -326,8 +326,8 @@ alpn_not_supported_server(Config) when is_list(Config)->
%%--------------------------------------------------------------------
run_failing_handshake(Config, ClientExtraOpts, ServerExtraOpts, ExpectedResult) ->
- ClientOpts = ClientExtraOpts ++ ?config(client_opts, Config),
- ServerOpts = ServerExtraOpts ++ ?config(server_opts, Config),
+ ClientOpts = ClientExtraOpts ++ proplists:get_value(client_opts, Config),
+ ServerOpts = ServerExtraOpts ++ proplists:get_value(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -346,9 +346,9 @@ run_failing_handshake(Config, ClientExtraOpts, ServerExtraOpts, ExpectedResult)
run_handshake(Config, ClientExtraOpts, ServerExtraOpts, ExpectedProtocol) ->
Data = "hello world",
- ClientOpts0 = ?config(client_opts, Config),
+ ClientOpts0 = proplists:get_value(client_opts, Config),
ClientOpts = ClientExtraOpts ++ ClientOpts0,
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = proplists:get_value(server_opts, Config),
ServerOpts = ServerExtraOpts ++ ServerOpts0,
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
diff --git a/lib/ssl/test/ssl_basic_SUITE.erl b/lib/ssl/test/ssl_basic_SUITE.erl
index 9341d2cae7..57963fd44b 100644
--- a/lib/ssl/test/ssl_basic_SUITE.erl
+++ b/lib/ssl/test/ssl_basic_SUITE.erl
@@ -40,6 +40,7 @@
-define(SLEEP, 500).
-define(RENEGOTIATION_DISABLE_TIME, 12000).
-define(CLEAN_SESSION_DB, 60000).
+-define(SEC_RENEGOTIATION_TIMEOUT, 30).
%%--------------------------------------------------------------------
%% Common Test interface functions -----------------------------------
@@ -47,8 +48,12 @@
all() ->
[
{group, basic},
+ {group, basic_tls},
{group, options},
+ {group, options_tls},
{group, session},
+ %%{group, 'dtlsv1.2'},
+ %%{group, 'dtlsv1'},
{group, 'tlsv1.2'},
{group, 'tlsv1.1'},
{group, 'tlsv1'},
@@ -57,19 +62,29 @@ all() ->
groups() ->
[{basic, [], basic_tests()},
+ {basic_tls, [], basic_tests_tls()},
{options, [], options_tests()},
- {'tlsv1.2', [], all_versions_groups() ++ [conf_signature_algs, no_common_signature_algs]},
- {'tlsv1.1', [], all_versions_groups()},
- {'tlsv1', [], all_versions_groups() ++ rizzo_tests()},
- {'sslv3', [], all_versions_groups() ++ rizzo_tests() ++ [ciphersuite_vs_version]},
+ {options_tls, [], options_tests_tls()},
+ %%{'dtlsv1.2', [], all_versions_groups()},
+ %%{'dtlsv1', [], all_versions_groups()},
+ {'tlsv1.2', [], all_versions_groups() ++ tls_versions_groups() ++ [conf_signature_algs, no_common_signature_algs]},
+ {'tlsv1.1', [], all_versions_groups() ++ tls_versions_groups()},
+ {'tlsv1', [], all_versions_groups() ++ tls_versions_groups() ++ rizzo_tests()},
+ {'sslv3', [], all_versions_groups() ++ tls_versions_groups() ++ rizzo_tests() ++ [tls_ciphersuite_vs_version]},
{api,[], api_tests()},
+ {api_tls,[], api_tests_tls()},
{session, [], session_tests()},
{renegotiate, [], renegotiate_tests()},
{ciphers, [], cipher_tests()},
{ciphers_ec, [], cipher_tests_ec()},
- {error_handling_tests, [], error_handling_tests()}
+ {error_handling_tests, [], error_handling_tests()},
+ {error_handling_tests_tls, [], error_handling_tests_tls()}
].
+tls_versions_groups ()->
+ [{group, api_tls},
+ {group, error_handling_tests_tls}].
+
all_versions_groups ()->
[{group, api},
{group, renegotiate},
@@ -82,7 +97,8 @@ basic_tests() ->
[app,
appup,
alerts,
- send_close,
+ alert_details,
+ alert_details_not_too_big,
version_option,
connect_twice,
connect_dist,
@@ -92,9 +108,12 @@ basic_tests() ->
cipher_format
].
+basic_tests_tls() ->
+ [tls_send_close
+ ].
+
options_tests() ->
[der_input,
- misc_ssl_options,
ssl_options_not_proplist,
raw_ssl_option,
socket_options,
@@ -113,13 +132,16 @@ options_tests() ->
empty_protocol_versions,
ipv6,
reuseaddr,
- tcp_reuseaddr,
honor_server_cipher_order,
honor_client_cipher_order,
unordered_protocol_versions_server,
unordered_protocol_versions_client
].
+options_tests_tls() ->
+ [tls_misc_ssl_options,
+ tls_tcp_reuseaddr].
+
api_tests() ->
[connection_info,
connection_information,
@@ -129,26 +151,30 @@ api_tests() ->
sockname,
versions,
controlling_process,
- upgrade,
- upgrade_with_timeout,
- downgrade,
+ getstat,
close_with_timeout,
- shutdown,
- shutdown_write,
- shutdown_both,
- shutdown_error,
hibernate,
hibernate_right_away,
listen_socket,
- ssl_accept_timeout,
ssl_recv_timeout,
- versions_option,
server_name_indication_option,
accept_pool,
new_options_in_accept,
prf
].
+api_tests_tls() ->
+ [tls_versions_option,
+ tls_upgrade,
+ tls_upgrade_with_timeout,
+ tls_ssl_accept_timeout,
+ tls_downgrade,
+ tls_shutdown,
+ tls_shutdown_write,
+ tls_shutdown_both,
+ tls_shutdown_error
+ ].
+
session_tests() ->
[reuse_session,
reuse_session_expired,
@@ -198,30 +224,36 @@ cipher_tests_ec() ->
error_handling_tests()->
[controller_dies,
- client_closes_socket,
- tcp_error_propagation_in_active_mode,
- tcp_connect,
- tcp_connect_big,
close_transport_accept,
recv_active,
recv_active_once,
- recv_error_handling,
- dont_crash_on_handshake_garbage
+ recv_error_handling
+ ].
+
+error_handling_tests_tls()->
+ [tls_client_closes_socket,
+ tls_tcp_error_propagation_in_active_mode,
+ tls_tcp_connect,
+ tls_tcp_connect_big,
+ tls_dont_crash_on_handshake_garbage
].
rizzo_tests() ->
[rizzo,
- no_rizzo_rc4].
+ no_rizzo_rc4,
+ rizzo_one_n_minus_one,
+ rizzo_zero_n,
+ rizzo_disabled].
%%--------------------------------------------------------------------
init_per_suite(Config0) ->
catch crypto:stop(),
try crypto:start() of
ok ->
- ssl:start(),
+ ssl_test_lib:clean_start(),
%% make rsa certs using oppenssl
- {ok, _} = make_certs:all(?config(data_dir, Config0),
- ?config(priv_dir, Config0)),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config0),
+ proplists:get_value(priv_dir, Config0)),
Config1 = ssl_test_lib:make_dsa_cert(Config0),
Config2 = ssl_test_lib:make_ecdsa_cert(Config1),
Config = ssl_test_lib:make_ecdh_rsa_cert(Config2),
@@ -238,8 +270,7 @@ end_per_suite(_Config) ->
init_per_group(GroupName, Config) ->
case ssl_test_lib:is_tls_version(GroupName) andalso ssl_test_lib:sufficient_crypto_support(GroupName) of
true ->
- ssl_test_lib:init_tls_version(GroupName),
- Config;
+ ssl_test_lib:init_tls_version(GroupName, Config);
_ ->
case ssl_test_lib:sufficient_crypto_support(GroupName) of
true ->
@@ -276,6 +307,7 @@ init_per_testcase(protocol_versions, Config) ->
init_per_testcase(reuse_session_expired, Config) ->
ssl:stop(),
application:load(ssl),
+ ssl_test_lib:clean_env(),
application:set_env(ssl, session_lifetime, ?EXPIRE),
application:set_env(ssl, session_delay_cleanup_time, 500),
ssl:start(),
@@ -285,6 +317,7 @@ init_per_testcase(reuse_session_expired, Config) ->
init_per_testcase(empty_protocol_versions, Config) ->
ssl:stop(),
application:load(ssl),
+ ssl_test_lib:clean_env(),
application:set_env(ssl, protocol_version, []),
ssl:start(),
ct:timetrap({seconds, 5}),
@@ -309,32 +342,56 @@ init_per_testcase(TestCase, Config) when TestCase == client_renegotiate;
TestCase == renegotiate_dos_mitigate_active;
TestCase == renegotiate_dos_mitigate_passive;
TestCase == renegotiate_dos_mitigate_absolute ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
- ct:timetrap({seconds, 30}),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
+ ct:timetrap({seconds, ?SEC_RENEGOTIATION_TIMEOUT + 5}),
Config;
init_per_testcase(TestCase, Config) when TestCase == psk_cipher_suites;
TestCase == psk_with_hint_cipher_suites;
TestCase == ciphers_rsa_signed_certs;
TestCase == ciphers_rsa_signed_certs_openssl_names;
+ TestCase == ciphers_dsa_signed_certs;
+ TestCase == ciphers_dsa_signed_certs_openssl_names;
+ TestCase == anonymous_cipher_suites;
+ TestCase == ciphers_ecdsa_signed_certs;
+ TestCase == ciphers_ecdsa_signed_certs_openssl_names;
+ TestCase == anonymous_cipher_suites;
+ TestCase == psk_anon_cipher_suites;
+ TestCase == psk_anon_with_hint_cipher_suites;
TestCase == versions_option,
- TestCase == tcp_connect_big ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
-
- ct:timetrap({seconds, 30}),
+ TestCase == tls_tcp_connect_big ->
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
+ ct:timetrap({seconds, 60}),
Config;
+
init_per_testcase(rizzo, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:timetrap({seconds, 40}),
Config;
+
+init_per_testcase(rizzo_one_n_minus_one, Config) ->
+ ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ct:timetrap({seconds, 40}),
+ rizzo_add_mitigation_option(one_n_minus_one, Config);
+
+init_per_testcase(rizzo_zero_n, Config) ->
+ ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ct:timetrap({seconds, 40}),
+ rizzo_add_mitigation_option(zero_n, Config);
+
+init_per_testcase(rizzo_disabled, Config) ->
+ ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ct:timetrap({seconds, 40}),
+ rizzo_add_mitigation_option(disabled, Config);
+
init_per_testcase(prf, Config) ->
ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
ct:timetrap({seconds, 40}),
- case ?config(tc_group_path, Config) of
+ case proplists:get_value(tc_group_path, Config) of
[] -> Prop = [];
[Prop] -> Prop
end,
- case ?config(name, Prop) of
+ case proplists:get_value(name, Prop) of
undefined -> TlsVersions = [sslv3, tlsv1, 'tlsv1.1', 'tlsv1.2'];
TlsVersion when is_atom(TlsVersion) ->
TlsVersions = [TlsVersion]
@@ -353,14 +410,19 @@ init_per_testcase(prf, Config) ->
TestPlan = prf_create_plan(TlsVersions, PRFS, ExpectedPrfResults),
[{prf_test_plan, TestPlan} | Config];
-init_per_testcase(TestCase, Config) when TestCase == ssl_accept_timeout;
- TestCase == client_closes_socket;
- TestCase == downgrade ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+init_per_testcase(TestCase, Config) when TestCase == tls_ssl_accept_timeout;
+ TestCase == tls_client_closes_socket;
+ TestCase == tls_downgrade ->
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:timetrap({seconds, 15}),
Config;
-init_per_testcase(clear_pem_cache, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+init_per_testcase(TestCase, Config) when TestCase == clear_pem_cache;
+ TestCase == der_input;
+ TestCase == defaults ->
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
+ %% White box test need clean start
+ ssl:stop(),
+ ssl:start(),
ct:timetrap({seconds, 20}),
Config;
init_per_testcase(raw_ssl_option, Config) ->
@@ -372,8 +434,20 @@ init_per_testcase(raw_ssl_option, Config) ->
{skip, "Raw options are platform-specific"}
end;
+init_per_testcase(accept_pool, Config) ->
+ ct:timetrap({seconds, 5}),
+ case proplists:get_value(protocol, Config) of
+ dtls ->
+ {skip, "Not yet supported on DTLS sockets"};
+ _ ->
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
+ Config
+ end;
+init_per_testcase(controller_dies, Config) ->
+ ct:timetrap({seconds, 10}),
+ Config;
init_per_testcase(_TestCase, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:timetrap({seconds, 5}),
Config.
@@ -382,6 +456,11 @@ end_per_testcase(reuse_session_expired, Config) ->
application:unset_env(ssl, session_delay_cleanup_time),
end_per_testcase(default_action, Config);
+end_per_testcase(Case, Config) when Case == protocol_versions;
+ Case == empty_protocol_versions->
+ application:unset_env(ssl, protocol_versions),
+ end_per_testcase(default_action, Config);
+
end_per_testcase(_TestCase, Config) ->
Config.
@@ -424,17 +503,46 @@ alerts(Config) when is_list(Config) ->
end
end, Alerts).
%%--------------------------------------------------------------------
+alert_details() ->
+ [{doc, "Test that ssl_alert:alert_txt/1 result contains extendend error description"}].
+alert_details(Config) when is_list(Config) ->
+ Unique = make_ref(),
+ UniqueStr = lists:flatten(io_lib:format("~w", [Unique])),
+ Alert = ?ALERT_REC(?WARNING, ?CLOSE_NOTIFY, Unique),
+ case string:str(ssl_alert:alert_txt(Alert), UniqueStr) of
+ 0 ->
+ ct:fail(error_details_missing);
+ _ ->
+ ok
+ end.
+
+%%--------------------------------------------------------------------
+alert_details_not_too_big() ->
+ [{doc, "Test that ssl_alert:alert_txt/1 limits printed depth of extended error description"}].
+alert_details_not_too_big(Config) when is_list(Config) ->
+ Reason = lists:duplicate(10, lists:duplicate(10, lists:duplicate(10, {some, data}))),
+ Alert = ?ALERT_REC(?WARNING, ?CLOSE_NOTIFY, Reason),
+ case length(ssl_alert:alert_txt(Alert)) < 1000 of
+ true ->
+ ok;
+ false ->
+ ct:fail(ssl_alert_text_too_big)
+ end.
+
+%%--------------------------------------------------------------------
new_options_in_accept() ->
[{doc,"Test that you can set ssl options in ssl_accept/3 and not only in tcp upgrade"}].
new_options_in_accept(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts0 = ?config(server_dsa_opts, Config),
- [_ , _ | ServerSslOpts] = ?config(server_opts, Config), %% Remove non ssl opts
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts0 = ssl_test_lib:ssl_options(server_dsa_opts, Config),
+ [_ , _ | ServerSslOpts] = ssl_test_lib:ssl_options(server_opts, Config), %% Remove non ssl opts
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+ Version = ssl_test_lib:protocol_options(Config, [{tls, sslv3}, {dtls, dtlsv1}]),
+ Cipher = ssl_test_lib:protocol_options(Config, [{tls, {rsa,rc4_128,sha}}, {dtls, {rsa,aes_128_cbc,sha}}]),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
- {ssl_extra_opts, [{versions, [sslv3]},
- {ciphers,[{rsa,rc4_128,sha}]} | ServerSslOpts]}, %% To be set in ssl_accept/3
+ {ssl_extra_opts, [{versions, [Version]},
+ {ciphers,[Cipher]} | ServerSslOpts]}, %% To be set in ssl_accept/3
{mfa, {?MODULE, connection_info_result, []}},
{options, proplists:delete(cacertfile, ServerOpts0)}]),
@@ -443,14 +551,13 @@ new_options_in_accept(Config) when is_list(Config) ->
{host, Hostname},
{from, self()},
{mfa, {?MODULE, connection_info_result, []}},
- {options, [{versions, [sslv3]},
- {ciphers,[{rsa,rc4_128,sha}
- ]} | ClientOpts]}]),
+ {options, [{versions, [Version]},
+ {ciphers,[Cipher]} | ClientOpts]}]),
ct:log("Testcase ~p, Client ~p Server ~p ~n",
[self(), Client, Server]),
- ServerMsg = ClientMsg = {ok, {sslv3, {rsa, rc4_128, sha}}},
+ ServerMsg = ClientMsg = {ok, {Version, Cipher}},
ssl_test_lib:check_result(Server, ServerMsg, Client, ClientMsg),
@@ -460,16 +567,16 @@ new_options_in_accept(Config) when is_list(Config) ->
prf() ->
[{doc,"Test that ssl:prf/5 uses the negotiated PRF."}].
prf(Config) when is_list(Config) ->
- TestPlan = ?config(prf_test_plan, Config),
+ TestPlan = proplists:get_value(prf_test_plan, Config),
case TestPlan of
[] -> ct:fail({error, empty_prf_test_plan});
_ -> lists:foreach(fun(Suite) ->
lists:foreach(
fun(Test) ->
- V = ?config(tls_ver, Test),
- C = ?config(ciphers, Test),
- E = ?config(expected, Test),
- P = ?config(prf, Test),
+ V = proplists:get_value(tls_ver, Test),
+ C = proplists:get_value(ciphers, Test),
+ E = proplists:get_value(expected, Test),
+ P = proplists:get_value(prf, Test),
prf_run_test(Config, V, C, E, P)
end, Suite)
end, TestPlan)
@@ -480,9 +587,10 @@ prf(Config) when is_list(Config) ->
connection_info() ->
[{doc,"Test the API function ssl:connection_information/1"}].
connection_info(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
{mfa, {?MODULE, connection_info_result, []}},
@@ -500,8 +608,7 @@ connection_info(Config) when is_list(Config) ->
ct:log("Testcase ~p, Client ~p Server ~p ~n",
[self(), Client, Server]),
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
ServerMsg = ClientMsg = {ok, {Version, {rsa, aes_128_cbc, sha}}},
@@ -515,8 +622,8 @@ connection_info(Config) when is_list(Config) ->
connection_information() ->
[{doc,"Test the API function ssl:connection_information/1"}].
connection_information(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -561,8 +668,8 @@ controlling_process() ->
[{doc,"Test API function controlling_process/2"}].
controlling_process(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
ClientMsg = "Server hello",
ServerMsg = "Client hello",
@@ -608,11 +715,80 @@ controlling_process(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
+getstat() ->
+ [{doc,"Test API function getstat/2"}].
+
+getstat(Config) when is_list(Config) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_opts, Config),
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+ Server1 =
+ ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {ssl_test_lib, send_recv_result, []}},
+ {options, [{active, false} | ServerOpts]}]),
+ Port1 = ssl_test_lib:inet_port(Server1),
+ Server2 =
+ ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {ssl_test_lib, send_recv_result, []}},
+ {options, [{active, false} | ServerOpts]}]),
+ Port2 = ssl_test_lib:inet_port(Server2),
+ {ok, ActiveC} = rpc:call(ClientNode, ssl, connect,
+ [Hostname,Port1,[{active, once}|ClientOpts]]),
+ {ok, PassiveC} = rpc:call(ClientNode, ssl, connect,
+ [Hostname,Port2,[{active, false}|ClientOpts]]),
+
+ ct:log("Testcase ~p, Client ~p Servers ~p, ~p ~n",
+ [self(), self(), Server1, Server2]),
+
+ %% We only check that the values are non-zero initially
+ %% (due to the handshake), and that sending more changes the values.
+
+ %% Passive socket.
+
+ {ok, InitialStats} = ssl:getstat(PassiveC),
+ ct:pal("InitialStats ~p~n", [InitialStats]),
+ [true] = lists:usort([0 =/= proplists:get_value(Name, InitialStats)
+ || Name <- [recv_cnt, recv_oct, recv_avg, recv_max, send_cnt, send_oct, send_avg, send_max]]),
+
+ ok = ssl:send(PassiveC, "Hello world"),
+ wait_for_send(PassiveC),
+ {ok, SStats} = ssl:getstat(PassiveC, [send_cnt, send_oct]),
+ ct:pal("SStats ~p~n", [SStats]),
+ [true] = lists:usort([proplists:get_value(Name, SStats) =/= proplists:get_value(Name, InitialStats)
+ || Name <- [send_cnt, send_oct]]),
+
+ %% Active socket.
+
+ {ok, InitialAStats} = ssl:getstat(ActiveC),
+ ct:pal("InitialAStats ~p~n", [InitialAStats]),
+ [true] = lists:usort([0 =/= proplists:get_value(Name, InitialAStats)
+ || Name <- [recv_cnt, recv_oct, recv_avg, recv_max, send_cnt, send_oct, send_avg, send_max]]),
+
+ _ = receive
+ {ssl, ActiveC, _} ->
+ ok
+ after
+ ?SLEEP ->
+ exit(timeout)
+ end,
+
+ ok = ssl:send(ActiveC, "Hello world"),
+ wait_for_send(ActiveC),
+ {ok, ASStats} = ssl:getstat(ActiveC, [send_cnt, send_oct]),
+ ct:pal("ASStats ~p~n", [ASStats]),
+ [true] = lists:usort([proplists:get_value(Name, ASStats) =/= proplists:get_value(Name, InitialAStats)
+ || Name <- [send_cnt, send_oct]]),
+
+ ok.
+
+%%--------------------------------------------------------------------
controller_dies() ->
[{doc,"Test that the socket is closed after controlling process dies"}].
controller_dies(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
ClientMsg = "Hello server",
ServerMsg = "Hello client",
@@ -700,11 +876,11 @@ controller_dies(Config) when is_list(Config) ->
ssl_test_lib:close(LastClient).
%%--------------------------------------------------------------------
-client_closes_socket() ->
+tls_client_closes_socket() ->
[{doc,"Test what happens when client closes socket before handshake is compleated"}].
-client_closes_socket(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
+tls_client_closes_socket(Config) when is_list(Config) ->
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
TcpOpts = [binary, {reuseaddr, true}],
@@ -731,9 +907,9 @@ connect_dist() ->
[{doc,"Test a simple connect as is used by distribution"}].
connect_dist(Config) when is_list(Config) ->
- ClientOpts0 = ?config(client_kc_opts, Config),
+ ClientOpts0 = ssl_test_lib:ssl_options(client_kc_opts, Config),
ClientOpts = [{ssl_imp, new},{active, false}, {packet,4}|ClientOpts0],
- ServerOpts0 = ?config(server_kc_opts, Config),
+ ServerOpts0 = ssl_test_lib:ssl_options(server_kc_opts, Config),
ServerOpts = [{ssl_imp, new},{active, false}, {packet,4}|ServerOpts0],
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -793,8 +969,8 @@ fallback() ->
[{doc, "Test TLS_FALLBACK_SCSV downgrade prevention"}].
fallback(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
@@ -828,8 +1004,8 @@ peername() ->
[{doc,"Test API function peername/1"}].
peername(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -860,8 +1036,8 @@ peername(Config) when is_list(Config) ->
peercert() ->
[{doc,"Test API function peercert/1"}].
peercert(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
@@ -896,8 +1072,8 @@ peercert_result(Socket) ->
peercert_with_client_cert() ->
[{doc,"Test API function peercert/1"}].
peercert_with_client_cert(Config) when is_list(Config) ->
- ClientOpts = ?config(client_dsa_opts, Config),
- ServerOpts = ?config(server_dsa_verify_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_dsa_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_dsa_verify_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
@@ -931,8 +1107,8 @@ peercert_with_client_cert(Config) when is_list(Config) ->
sockname() ->
[{doc,"Test API function sockname/1"}].
sockname(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -946,7 +1122,16 @@ sockname(Config) when is_list(Config) ->
{options, [{port, 0} | ClientOpts]}]),
ClientPort = ssl_test_lib:inet_port(Client),
- ServerIp = ssl_test_lib:node_to_hostip(ServerNode),
+ ServerIp =
+ case proplists:get_value(protocol, Config) of
+ dtls ->
+ %% DTLS sockets are not connected on the server side,
+ %% so we can only get a ClientIP, ServerIP will always be 0.0.0.0
+ {0,0,0,0};
+ _ ->
+ ssl_test_lib:node_to_hostip(ServerNode)
+ end,
+
ClientIp = ssl_test_lib:node_to_hostip(ClientNode),
ServerMsg = {ok, {ServerIp, Port}},
ClientMsg = {ok, {ClientIp, ClientPort}},
@@ -979,8 +1164,8 @@ cipher_suites_mix() ->
cipher_suites_mix(Config) when is_list(Config) ->
CipherSuites = [{ecdh_rsa,aes_128_cbc,sha256,sha256}, {rsa,aes_128_cbc,sha}],
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -1003,8 +1188,8 @@ socket_options() ->
[{doc,"Test API function getopts/2 and setopts/2"}].
socket_options(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Values = [{mode, list}, {packet, 0}, {header, 0},
{active, true}],
@@ -1058,8 +1243,8 @@ invalid_inet_get_option() ->
[{doc,"Test handling of invalid inet options in getopts"}].
invalid_inet_get_option(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1084,8 +1269,8 @@ invalid_inet_get_option_not_list() ->
[{doc,"Test handling of invalid type in getopts"}].
invalid_inet_get_option_not_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1116,8 +1301,8 @@ invalid_inet_get_option_improper_list() ->
[{doc,"Test handling of invalid type in getopts"}].
invalid_inet_get_option_improper_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1147,8 +1332,8 @@ invalid_inet_set_option() ->
[{doc,"Test handling of invalid inet options in setopts"}].
invalid_inet_set_option(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1179,8 +1364,8 @@ invalid_inet_set_option_not_list() ->
[{doc,"Test handling of invalid type in setopts"}].
invalid_inet_set_option_not_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1211,8 +1396,8 @@ invalid_inet_set_option_improper_list() ->
[{doc,"Test handling of invalid tye in setopts"}].
invalid_inet_set_option_improper_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1238,12 +1423,12 @@ set_invalid_inet_option_improper_list(Socket) ->
ok.
%%--------------------------------------------------------------------
-misc_ssl_options() ->
+tls_misc_ssl_options() ->
[{doc,"Test what happens when we give valid options"}].
-misc_ssl_options(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_misc_ssl_options(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
%% Check that ssl options not tested elsewhere are filtered away e.i. not passed to inet.
@@ -1313,8 +1498,8 @@ versions(Config) when is_list(Config) ->
send_recv() ->
[{doc,""}].
send_recv(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -1338,11 +1523,11 @@ send_recv(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
-send_close() ->
+tls_send_close() ->
[{doc,""}].
-send_close(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_send_close(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -1365,7 +1550,7 @@ send_close(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
version_option() ->
[{doc, "Use version option and do no specify ciphers list. Bug specified incorrect ciphers"}].
-version_option(Config) when is_list(Config) ->
+version_option(Config) when is_list(Config) ->
Versions = proplists:get_value(supported, ssl:versions()),
[version_option_test(Config, Version) || Version <- Versions].
@@ -1374,7 +1559,7 @@ close_transport_accept() ->
[{doc,"Tests closing ssl socket when waiting on ssl:transport_accept/1"}].
close_transport_accept(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{_ClientNode, ServerNode, _Hostname} = ssl_test_lib:run_where(Config),
Port = 0,
@@ -1395,8 +1580,8 @@ recv_active() ->
[{doc,"Test recv on active socket"}].
recv_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -1421,8 +1606,8 @@ recv_active_once() ->
[{doc,"Test recv on active socket"}].
recv_active_once(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -1447,9 +1632,9 @@ dh_params() ->
[{doc,"Test to specify DH-params file in server."}].
dh_params(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
- DataDir = ?config(data_dir, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ DataDir = proplists:get_value(data_dir, Config),
DHParamFile = filename:join(DataDir, "dHParam.pem"),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -1473,12 +1658,12 @@ dh_params(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
-upgrade() ->
+tls_upgrade() ->
[{doc,"Test that you can upgrade an tcp connection to an ssl connection"}].
-upgrade(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_upgrade(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
TcpOpts = [binary, {reuseaddr, true}],
@@ -1522,12 +1707,12 @@ upgrade_result(Socket) ->
end.
%%--------------------------------------------------------------------
-upgrade_with_timeout() ->
+tls_upgrade_with_timeout() ->
[{doc,"Test ssl_accept/3"}].
-upgrade_with_timeout(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_upgrade_with_timeout(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
TcpOpts = [binary, {reuseaddr, true}],
@@ -1557,23 +1742,23 @@ upgrade_with_timeout(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
-downgrade() ->
+tls_downgrade() ->
[{doc,"Test that you can downgarde an ssl connection to an tcp connection"}].
-downgrade(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_downgrade(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
- {mfa, {?MODULE, tls_downgrade, []}},
+ {mfa, {?MODULE, tls_downgrade_result, []}},
{options, [{active, false} | ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
{from, self()},
- {mfa, {?MODULE, tls_downgrade, []}},
+ {mfa, {?MODULE, tls_downgrade_result, []}},
{options, [{active, false} |ClientOpts]}]),
ssl_test_lib:check_result(Server, ok, Client, ok),
@@ -1584,8 +1769,8 @@ downgrade(Config) when is_list(Config) ->
close_with_timeout() ->
[{doc,"Test normal (not downgrade) ssl:close/2"}].
close_with_timeout(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -1604,11 +1789,11 @@ close_with_timeout(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
-tcp_connect() ->
+tls_tcp_connect() ->
[{doc,"Test what happens when a tcp tries to connect, i,e. a bad (ssl) packet is sent first"}].
-tcp_connect(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
+tls_tcp_connect(Config) when is_list(Config) ->
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{_, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
TcpOpts = [binary, {reuseaddr, true}, {active, false}],
@@ -1632,12 +1817,12 @@ tcp_connect(Config) when is_list(Config) ->
end
end.
%%--------------------------------------------------------------------
-tcp_connect_big() ->
+tls_tcp_connect_big() ->
[{doc,"Test what happens when a tcp tries to connect, i,e. a bad big (ssl) packet is sent first"}].
-tcp_connect_big(Config) when is_list(Config) ->
+tls_tcp_connect_big(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{_, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
TcpOpts = [binary, {reuseaddr, true}],
@@ -1677,8 +1862,8 @@ ipv6(Config) when is_list(Config) ->
case lists:member(list_to_atom(Hostname0), ct:get_config(ipv6_hosts)) of
true ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} =
ssl_test_lib:run_where(Config, ipv6),
Server = ssl_test_lib:start_server([{node, ServerNode},
@@ -1710,8 +1895,8 @@ ipv6(Config) when is_list(Config) ->
invalid_keyfile() ->
[{doc,"Test what happens with an invalid key file"}].
invalid_keyfile(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- BadOpts = ?config(server_bad_key, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ BadOpts = ssl_test_lib:ssl_options(server_bad_key, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
@@ -1736,8 +1921,8 @@ invalid_certfile() ->
[{doc,"Test what happens with an invalid cert file"}].
invalid_certfile(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerBadOpts = ?config(server_bad_cert, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerBadOpts = ssl_test_lib:ssl_options(server_bad_cert, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
@@ -1762,8 +1947,8 @@ invalid_cacertfile() ->
[{doc,"Test what happens with an invalid cacert file"}].
invalid_cacertfile(Config) when is_list(Config) ->
- ClientOpts = [{reuseaddr, true}|?config(client_opts, Config)],
- ServerBadOpts = [{reuseaddr, true}|?config(server_bad_ca, Config)],
+ ClientOpts = [{reuseaddr, true}|ssl_test_lib:ssl_options(client_opts, Config)],
+ ServerBadOpts = [{reuseaddr, true}|ssl_test_lib:ssl_options(server_bad_ca, Config)],
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server0 =
@@ -1813,8 +1998,8 @@ invalid_options() ->
[{doc,"Test what happens when we give invalid options"}].
invalid_options(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Check = fun(Client, Server, {versions, [sslv2, sslv3]} = Option) ->
@@ -1867,15 +2052,15 @@ invalid_options(Config) when is_list(Config) ->
ok.
%%--------------------------------------------------------------------
-shutdown() ->
+tls_shutdown() ->
[{doc,"Test API function ssl:shutdown/2"}].
-shutdown(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_shutdown(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
- {mfa, {?MODULE, shutdown_result, [server]}},
+ {mfa, {?MODULE, tls_shutdown_result, [server]}},
{options, [{exit_on_close, false},
{active, false} | ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
@@ -1883,7 +2068,7 @@ shutdown(Config) when is_list(Config) ->
{host, Hostname},
{from, self()},
{mfa,
- {?MODULE, shutdown_result, [client]}},
+ {?MODULE, tls_shutdown_result, [client]}},
{options,
[{exit_on_close, false},
{active, false} | ClientOpts]}]),
@@ -1894,50 +2079,50 @@ shutdown(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
-shutdown_write() ->
+tls_shutdown_write() ->
[{doc,"Test API function ssl:shutdown/2 with option write."}].
-shutdown_write(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_shutdown_write(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
- {mfa, {?MODULE, shutdown_write_result, [server]}},
+ {mfa, {?MODULE, tls_shutdown_write_result, [server]}},
{options, [{active, false} | ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
{from, self()},
- {mfa, {?MODULE, shutdown_write_result, [client]}},
+ {mfa, {?MODULE, tls_shutdown_write_result, [client]}},
{options, [{active, false} | ClientOpts]}]),
ssl_test_lib:check_result(Server, ok, Client, {error, closed}).
%%--------------------------------------------------------------------
-shutdown_both() ->
+tls_shutdown_both() ->
[{doc,"Test API function ssl:shutdown/2 with option both."}].
-shutdown_both(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_shutdown_both(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
- {mfa, {?MODULE, shutdown_both_result, [server]}},
+ {mfa, {?MODULE, tls_shutdown_both_result, [server]}},
{options, [{active, false} | ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
{from, self()},
- {mfa, {?MODULE, shutdown_both_result, [client]}},
+ {mfa, {?MODULE, tls_shutdown_both_result, [client]}},
{options, [{active, false} | ClientOpts]}]),
ssl_test_lib:check_result(Server, ok, Client, {error, closed}).
%%--------------------------------------------------------------------
-shutdown_error() ->
+tls_shutdown_error() ->
[{doc,"Test ssl:shutdown/2 error handling"}].
-shutdown_error(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
+tls_shutdown_error(Config) when is_list(Config) ->
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
Port = ssl_test_lib:inet_port(node()),
{ok, Listen} = ssl:listen(Port, ServerOpts),
{error, enotconn} = ssl:shutdown(Listen, read_write),
@@ -1949,9 +2134,7 @@ ciphers_rsa_signed_certs() ->
[{doc,"Test all rsa ssl cipher suites in highest support ssl/tls version"}].
ciphers_rsa_signed_certs(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
-
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:rsa_suites(crypto),
ct:log("~p erlang cipher suites ~p~n", [Version, Ciphers]),
run_suites(Ciphers, Version, Config, rsa).
@@ -1960,8 +2143,7 @@ ciphers_rsa_signed_certs_openssl_names() ->
[{doc,"Test all rsa ssl cipher suites in highest support ssl/tls version"}].
ciphers_rsa_signed_certs_openssl_names(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:openssl_rsa_suites(crypto),
ct:log("tls1 openssl cipher suites ~p~n", [Ciphers]),
run_suites(Ciphers, Version, Config, rsa).
@@ -1971,9 +2153,7 @@ ciphers_dsa_signed_certs() ->
[{doc,"Test all dsa ssl cipher suites in highest support ssl/tls version"}].
ciphers_dsa_signed_certs(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
-
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:dsa_suites(),
ct:log("~p erlang cipher suites ~p~n", [Version, Ciphers]),
run_suites(Ciphers, Version, Config, dsa).
@@ -1982,9 +2162,7 @@ ciphers_dsa_signed_certs_openssl_names() ->
[{doc,"Test all dsa ssl cipher suites in highest support ssl/tls version"}].
ciphers_dsa_signed_certs_openssl_names(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
-
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:openssl_dsa_suites(),
ct:log("tls1 openssl cipher suites ~p~n", [Ciphers]),
run_suites(Ciphers, Version, Config, dsa).
@@ -1992,56 +2170,56 @@ ciphers_dsa_signed_certs_openssl_names(Config) when is_list(Config) ->
anonymous_cipher_suites()->
[{doc,"Test the anonymous ciphersuites"}].
anonymous_cipher_suites(Config) when is_list(Config) ->
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:anonymous_suites(),
run_suites(Ciphers, Version, Config, anonymous).
%%-------------------------------------------------------------------
psk_cipher_suites() ->
[{doc, "Test the PSK ciphersuites WITHOUT server supplied identity hint"}].
psk_cipher_suites(Config) when is_list(Config) ->
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:psk_suites(),
run_suites(Ciphers, Version, Config, psk).
%%-------------------------------------------------------------------
psk_with_hint_cipher_suites()->
[{doc, "Test the PSK ciphersuites WITH server supplied identity hint"}].
psk_with_hint_cipher_suites(Config) when is_list(Config) ->
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:psk_suites(),
run_suites(Ciphers, Version, Config, psk_with_hint).
%%-------------------------------------------------------------------
psk_anon_cipher_suites() ->
[{doc, "Test the anonymous PSK ciphersuites WITHOUT server supplied identity hint"}].
psk_anon_cipher_suites(Config) when is_list(Config) ->
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:psk_anon_suites(),
run_suites(Ciphers, Version, Config, psk_anon).
%%-------------------------------------------------------------------
psk_anon_with_hint_cipher_suites()->
[{doc, "Test the anonymous PSK ciphersuites WITH server supplied identity hint"}].
psk_anon_with_hint_cipher_suites(Config) when is_list(Config) ->
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:psk_anon_suites(),
run_suites(Ciphers, Version, Config, psk_anon_with_hint).
%%-------------------------------------------------------------------
srp_cipher_suites()->
[{doc, "Test the SRP ciphersuites"}].
srp_cipher_suites(Config) when is_list(Config) ->
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:srp_suites(),
run_suites(Ciphers, Version, Config, srp).
%%-------------------------------------------------------------------
srp_anon_cipher_suites()->
[{doc, "Test the anonymous SRP ciphersuites"}].
srp_anon_cipher_suites(Config) when is_list(Config) ->
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:srp_anon_suites(),
run_suites(Ciphers, Version, Config, srp_anon).
%%-------------------------------------------------------------------
srp_dsa_cipher_suites()->
[{doc, "Test the SRP DSA ciphersuites"}].
srp_dsa_cipher_suites(Config) when is_list(Config) ->
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:srp_dss_suites(),
run_suites(Ciphers, Version, Config, srp_dsa).
%%-------------------------------------------------------------------
@@ -2092,8 +2270,8 @@ default_reject_anonymous()->
[{doc,"Test that by default anonymous cipher suites are rejected "}].
default_reject_anonymous(Config) when is_list(Config) ->
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
[Cipher | _] = ssl_test_lib:anonymous_suites(),
@@ -2116,9 +2294,7 @@ ciphers_ecdsa_signed_certs() ->
[{doc, "Test all ecdsa ssl cipher suites in highest support ssl/tls version"}].
ciphers_ecdsa_signed_certs(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
-
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:ecdsa_suites(),
ct:log("~p erlang cipher suites ~p~n", [Version, Ciphers]),
run_suites(Ciphers, Version, Config, ecdsa).
@@ -2127,8 +2303,7 @@ ciphers_ecdsa_signed_certs_openssl_names() ->
[{doc, "Test all ecdsa ssl cipher suites in highest support ssl/tls version"}].
ciphers_ecdsa_signed_certs_openssl_names(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:openssl_ecdsa_suites(),
ct:log("tls1 openssl cipher suites ~p~n", [Ciphers]),
run_suites(Ciphers, Version, Config, ecdsa).
@@ -2137,9 +2312,7 @@ ciphers_ecdh_rsa_signed_certs() ->
[{doc, "Test all ecdh_rsa ssl cipher suites in highest support ssl/tls version"}].
ciphers_ecdh_rsa_signed_certs(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
-
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:ecdh_rsa_suites(),
ct:log("~p erlang cipher suites ~p~n", [Version, Ciphers]),
run_suites(Ciphers, Version, Config, ecdh_rsa).
@@ -2148,8 +2321,7 @@ ciphers_ecdh_rsa_signed_certs_openssl_names() ->
[{doc, "Test all ecdh_rsa ssl cipher suites in highest support ssl/tls version"}].
ciphers_ecdh_rsa_signed_certs_openssl_names(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:openssl_ecdh_rsa_suites(),
ct:log("tls1 openssl cipher suites ~p~n", [Ciphers]),
run_suites(Ciphers, Version, Config, ecdh_rsa).
@@ -2157,8 +2329,8 @@ ciphers_ecdh_rsa_signed_certs_openssl_names(Config) when is_list(Config) ->
reuse_session() ->
[{doc,"Test reuse of sessions (short handshake)"}].
reuse_session(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
@@ -2265,8 +2437,8 @@ reuse_session(Config) when is_list(Config) ->
reuse_session_expired() ->
[{doc,"Test sessions is not reused when it has expired"}].
reuse_session_expired(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
@@ -2350,8 +2522,8 @@ make_sure_expired(Host, Port, Id) ->
server_does_not_want_to_reuse_session() ->
[{doc,"Test reuse of sessions (short handshake)"}].
server_does_not_want_to_reuse_session(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
@@ -2399,8 +2571,8 @@ server_does_not_want_to_reuse_session(Config) when is_list(Config) ->
client_renegotiate() ->
[{doc,"Test ssl:renegotiate/1 on client."}].
client_renegotiate(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -2428,8 +2600,8 @@ client_renegotiate(Config) when is_list(Config) ->
client_secure_renegotiate() ->
[{doc,"Test ssl:renegotiate/1 on client."}].
client_secure_renegotiate(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -2459,8 +2631,8 @@ client_secure_renegotiate(Config) when is_list(Config) ->
server_renegotiate() ->
[{doc,"Test ssl:renegotiate/1 on server."}].
server_renegotiate(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -2487,8 +2659,8 @@ server_renegotiate(Config) when is_list(Config) ->
client_renegotiate_reused_session() ->
[{doc,"Test ssl:renegotiate/1 on client when the ssl session will be reused."}].
client_renegotiate_reused_session(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -2515,8 +2687,8 @@ client_renegotiate_reused_session(Config) when is_list(Config) ->
server_renegotiate_reused_session() ->
[{doc,"Test ssl:renegotiate/1 on server when the ssl session will be reused."}].
server_renegotiate_reused_session(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -2546,13 +2718,13 @@ client_no_wrap_sequence_number() ->
" to lower treashold substantially."}].
client_no_wrap_sequence_number(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
ErlData = "From erlang to erlang",
- N = 10,
+ N = 12,
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -2561,7 +2733,7 @@ client_no_wrap_sequence_number(Config) when is_list(Config) ->
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
- Version = tls_record:highest_protocol_version(tls_record:supported_protocol_versions()),
+ Version = ssl_test_lib:protocol_version(Config, tuple),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -2583,13 +2755,13 @@ server_no_wrap_sequence_number() ->
" to lower treashold substantially."}].
server_no_wrap_sequence_number(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = "From erlang to erlang",
- N = 10,
+ N = 12,
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -2613,7 +2785,7 @@ der_input() ->
[{doc,"Test to input certs and key as der"}].
der_input(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
DHParamFile = filename:join(DataDir, "dHParam.pem"),
{status, _, _, StatusInfo} = sys:get_status(whereis(ssl_manager)),
@@ -2623,10 +2795,10 @@ der_input(Config) when is_list(Config) ->
Size = ets:info(CADb, size),
- SeverVerifyOpts = ?config(server_verification_opts, Config),
+ SeverVerifyOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ServerCert, ServerKey, ServerCaCerts, DHParams} = der_input_opts([{dhfile, DHParamFile} |
SeverVerifyOpts]),
- ClientVerifyOpts = ?config(client_verification_opts, Config),
+ ClientVerifyOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
{ClientCert, ClientKey, ClientCaCerts, DHParams} = der_input_opts([{dhfile, DHParamFile} |
ClientVerifyOpts]),
ServerOpts = [{verify, verify_peer}, {fail_if_no_peer_cert, true},
@@ -2673,8 +2845,8 @@ der_input_opts(Opts) ->
%% ["Check that a CA can have a different signature algorithm than the peer cert."];
%% different_ca_peer_sign(Config) when is_list(Config) ->
-%% ClientOpts = ?config(client_mix_opts, Config),
-%% ServerOpts = ?config(server_mix_verify_opts, Config),
+%% ClientOpts = ssl_test_lib:ssl_options(client_mix_opts, Config),
+%% ServerOpts = ssl_test_lib:ssl_options(server_mix_verify_opts, Config),
%% {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
%% Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -2704,9 +2876,9 @@ no_reuses_session_server_restart_new_cert() ->
[{doc,"Check that a session is not reused if the server is restarted with a new cert."}].
no_reuses_session_server_restart_new_cert(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
- DsaServerOpts = ?config(server_dsa_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ DsaServerOpts = ssl_test_lib:ssl_options(server_dsa_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
@@ -2762,10 +2934,10 @@ no_reuses_session_server_restart_new_cert_file() ->
"cert contained in a file with the same name as the old cert."}].
no_reuses_session_server_restart_new_cert_file(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- DsaServerOpts = ?config(server_dsa_opts, Config),
- PrivDir = ?config(priv_dir, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ DsaServerOpts = ssl_test_lib:ssl_options(server_dsa_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
NewServerOpts = new_config(PrivDir, ServerOpts),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -2836,8 +3008,8 @@ reuseaddr() ->
[{doc,"Test reuseaddr option"}].
reuseaddr(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -2871,9 +3043,9 @@ reuseaddr(Config) when is_list(Config) ->
ssl_test_lib:close(Client1).
%%--------------------------------------------------------------------
-tcp_reuseaddr() ->
+tls_tcp_reuseaddr() ->
[{doc, "Reference test case."}].
-tcp_reuseaddr(Config) when is_list(Config) ->
+tls_tcp_reuseaddr(Config) when is_list(Config) ->
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -2927,8 +3099,8 @@ honor_client_cipher_order(Config) when is_list(Config) ->
honor_cipher_order(Config, false, ServerCiphers, ClientCiphers, {rsa, aes_128_cbc, sha}).
honor_cipher_order(Config, Honor, ServerCiphers, ClientCiphers, Expected) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -2945,8 +3117,7 @@ honor_cipher_order(Config, Honor, ServerCiphers, ClientCiphers, Expected) ->
{options, [{ciphers, ClientCiphers}, {honor_cipher_order, Honor}
| ClientOpts]}]),
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
ServerMsg = ClientMsg = {ok, {Version, Expected}},
@@ -2956,12 +3127,12 @@ honor_cipher_order(Config, Honor, ServerCiphers, ClientCiphers, Expected) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
-ciphersuite_vs_version() ->
+tls_ciphersuite_vs_version() ->
[{doc,"Test a SSLv3 client can not negotiate a TLSv* cipher suite."}].
-ciphersuite_vs_version(Config) when is_list(Config) ->
+tls_ciphersuite_vs_version(Config) when is_list(Config) ->
{_ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
Server = ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0},
{from, self()},
@@ -2981,7 +3152,7 @@ ciphersuite_vs_version(Config) when is_list(Config) ->
>>),
{ok, <<22, RecMajor:8, RecMinor:8, _RecLen:16, 2, HelloLen:24>>} = gen_tcp:recv(Socket, 9, 10000),
{ok, <<HelloBin:HelloLen/binary>>} = gen_tcp:recv(Socket, HelloLen, 5000),
- ServerHello = tls_handshake:decode_handshake({RecMajor, RecMinor}, 2, HelloBin),
+ ServerHello = tls_handshake:decode_handshake({RecMajor, RecMinor}, 2, HelloBin, false),
case ServerHello of
#server_hello{server_version = {3,0}, cipher_suite = <<0,57>>} ->
ok;
@@ -2993,8 +3164,8 @@ ciphersuite_vs_version(Config) when is_list(Config) ->
conf_signature_algs() ->
[{doc,"Test to set the signature_algs option on both client and server"}].
conf_signature_algs(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -3023,8 +3194,8 @@ no_common_signature_algs() ->
[{doc,"Set the signature_algs option so that there client and server does not share any hash sign algorithms"}].
no_common_signature_algs(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3045,12 +3216,12 @@ no_common_signature_algs(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
-dont_crash_on_handshake_garbage() ->
+tls_dont_crash_on_handshake_garbage() ->
[{doc, "Ensure SSL server worker thows an alert on garbage during handshake "
"instead of crashing and exposing state to user code"}].
-dont_crash_on_handshake_garbage(Config) ->
- ServerOpts = ?config(server_opts, Config),
+tls_dont_crash_on_handshake_garbage(Config) ->
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{_ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3094,8 +3265,8 @@ hibernate() ->
"inactivity"}].
hibernate(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3130,8 +3301,8 @@ hibernate_right_away() ->
"crashes"}].
hibernate_right_away(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3178,7 +3349,7 @@ listen_socket() ->
[{doc,"Check error handling and inet compliance when calling API functions with listen sockets."}].
listen_socket(Config) ->
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ok, ListenSocket} = ssl:listen(0, ServerOpts),
%% This can be a valid thing to do as
@@ -3199,12 +3370,12 @@ listen_socket(Config) ->
ok = ssl:close(ListenSocket).
%%--------------------------------------------------------------------
-ssl_accept_timeout() ->
+tls_ssl_accept_timeout() ->
[{doc,"Test ssl:ssl_accept timeout"}].
-ssl_accept_timeout(Config) ->
+tls_ssl_accept_timeout(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{_, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -3232,8 +3403,8 @@ ssl_recv_timeout() ->
[{doc,"Test ssl:ssl_accept timeout"}].
ssl_recv_timeout(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3259,8 +3430,8 @@ ssl_recv_timeout(Config) ->
connect_twice() ->
[{doc,""}].
connect_twice(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3304,8 +3475,8 @@ renegotiate_dos_mitigate_active() ->
[{doc, "Mitigate DOS computational attack by not allowing client to renegotiate many times in a row",
"immediately after each other"}].
renegotiate_dos_mitigate_active(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3313,7 +3484,7 @@ renegotiate_dos_mitigate_active(Config) when is_list(Config) ->
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
{mfa, {ssl_test_lib, send_recv_result_active, []}},
- {options, [ServerOpts]}]),
+ {options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
@@ -3332,8 +3503,8 @@ renegotiate_dos_mitigate_passive() ->
[{doc, "Mitigate DOS computational attack by not allowing client to renegotiate many times in a row",
"immediately after each other"}].
renegotiate_dos_mitigate_passive(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3359,8 +3530,8 @@ renegotiate_dos_mitigate_passive(Config) when is_list(Config) ->
renegotiate_dos_mitigate_absolute() ->
[{doc, "Mitigate DOS computational attack by not allowing client to initiate renegotiation"}].
renegotiate_dos_mitigate_absolute(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3384,11 +3555,11 @@ renegotiate_dos_mitigate_absolute(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
-tcp_error_propagation_in_active_mode() ->
- [{doc,"Test that process recives {ssl_error, Socket, closed} when tcp error occurs"}].
-tcp_error_propagation_in_active_mode(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_tcp_error_propagation_in_active_mode() ->
+ [{doc,"Test that process recives {ssl_error, Socket, closed} when tcp error ocurres"}].
+tls_tcp_error_propagation_in_active_mode(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3418,8 +3589,8 @@ tcp_error_propagation_in_active_mode(Config) when is_list(Config) ->
recv_error_handling() ->
[{doc,"Special case of call error handling"}].
recv_error_handling(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -3444,7 +3615,7 @@ rizzo() ->
rizzo(Config) when is_list(Config) ->
Ciphers = [X || X ={_,Y,_} <- ssl:cipher_suites(), Y =/= rc4_128],
- Prop = ?config(tc_group_properties, Config),
+ Prop = proplists:get_value(tc_group_properties, Config),
Version = proplists:get_value(name, Prop),
run_send_recv_rizzo(Ciphers, Config, Version,
{?MODULE, send_recv_result_active_rizzo, []}).
@@ -3454,20 +3625,50 @@ no_rizzo_rc4() ->
no_rizzo_rc4(Config) when is_list(Config) ->
Ciphers = [X || X ={_,Y,_} <- ssl:cipher_suites(),Y == rc4_128],
- Prop = ?config(tc_group_properties, Config),
+ Prop = proplists:get_value(tc_group_properties, Config),
Version = proplists:get_value(name, Prop),
run_send_recv_rizzo(Ciphers, Config, Version,
{?MODULE, send_recv_result_active_no_rizzo, []}).
+rizzo_one_n_minus_one() ->
+ [{doc,"Test that the 1/n-1-split mitigation of Rizzo/Dungon attack can be explicitly selected"}].
+
+rizzo_one_n_minus_one(Config) when is_list(Config) ->
+ Ciphers = [X || X ={_,Y,_} <- ssl:cipher_suites(), Y =/= rc4_128],
+ Prop = proplists:get_value(tc_group_properties, Config),
+ Version = proplists:get_value(name, Prop),
+ run_send_recv_rizzo(Ciphers, Config, Version,
+ {?MODULE, send_recv_result_active_rizzo, []}).
+
+rizzo_zero_n() ->
+ [{doc,"Test that the 0/n-split mitigation of Rizzo/Dungon attack can be explicitly selected"}].
+
+rizzo_zero_n(Config) when is_list(Config) ->
+ Ciphers = [X || X ={_,Y,_} <- ssl:cipher_suites(), Y =/= rc4_128],
+ Prop = proplists:get_value(tc_group_properties, Config),
+ Version = proplists:get_value(name, Prop),
+ run_send_recv_rizzo(Ciphers, Config, Version,
+ {?MODULE, send_recv_result_active_no_rizzo, []}).
+
+rizzo_disabled() ->
+ [{doc,"Test that the mitigation of Rizzo/Dungon attack can be explicitly disabled"}].
+
+rizzo_disabled(Config) when is_list(Config) ->
+ Ciphers = [X || X ={_,Y,_} <- ssl:cipher_suites(), Y =/= rc4_128],
+ Prop = proplists:get_value(tc_group_properties, Config),
+ Version = proplists:get_value(name, Prop),
+ run_send_recv_rizzo(Ciphers, Config, Version,
+ {?MODULE, send_recv_result_active_no_rizzo, []}).
+
%%--------------------------------------------------------------------
new_server_wants_peer_cert() ->
[{doc, "Test that server configured to do client certification does"
" not reuse session without a client certificate."}].
new_server_wants_peer_cert(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
VServerOpts = [{verify, verify_peer}, {fail_if_no_peer_cert, true}
- | ?config(server_verification_opts, Config)],
- ClientOpts = ?config(client_verification_opts, Config),
+ | ssl_test_lib:ssl_options(server_verification_opts, Config)],
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3528,11 +3729,11 @@ session_cache_process_mnesia(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
-versions_option() ->
+tls_versions_option() ->
[{doc,"Test API versions option to connect/listen."}].
-versions_option(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+tls_versions_option(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
Supported = proplists:get_value(supported, ssl:versions()),
Available = proplists:get_value(available, ssl:versions()),
@@ -3570,8 +3771,8 @@ unordered_protocol_versions_server() ->
" when it is not first in the versions list."}].
unordered_protocol_versions_server(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -3595,8 +3796,8 @@ unordered_protocol_versions_client() ->
" when it is not first in the versions list."}].
unordered_protocol_versions_client(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -3620,8 +3821,8 @@ unordered_protocol_versions_client(Config) when is_list(Config) ->
server_name_indication_option() ->
[{doc,"Test API server_name_indication option to connect."}].
server_name_indication_option(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -3658,8 +3859,8 @@ server_name_indication_option(Config) when is_list(Config) ->
accept_pool() ->
[{doc,"Test having an accept pool."}].
accept_pool(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server0 = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -3690,7 +3891,7 @@ accept_pool(Config) when is_list(Config) ->
{mfa, {ssl_test_lib, send_recv_result_active, []}},
{options, ClientOpts}
]),
-
+
ssl_test_lib:check_ok([Server0, Server1, Server2, Client0, Client1, Client2]),
ssl_test_lib:close(Server0),
@@ -3714,8 +3915,8 @@ tcp_send_recv_result(Socket) ->
ok.
basic_verify_test_no_close(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3734,8 +3935,8 @@ basic_verify_test_no_close(Config) ->
{Server, Client}.
basic_test(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -3796,8 +3997,8 @@ prf_run_test(_, TlsVer, [], _, Prf) ->
prf_run_test(Config, TlsVer, Ciphers, Expected, Prf) ->
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
BaseOpts = [{active, true}, {versions, [TlsVer]}, {ciphers, Ciphers}],
- ServerOpts = BaseOpts ++ ?config(server_opts, Config),
- ClientOpts = BaseOpts ++ ?config(client_opts, Config),
+ ServerOpts = BaseOpts ++ proplists:get_value(server_opts, Config),
+ ClientOpts = BaseOpts ++ proplists:get_value(client_opts, Config),
Server = ssl_test_lib:start_server(
[{node, ServerNode}, {port, 0}, {from, self()},
{mfa, {?MODULE, prf_verify_value, [TlsVer, Expected, Prf]}},
@@ -3831,6 +4032,7 @@ prf_verify_value(Socket, TlsVer, Expected, Algo) ->
send_recv_result_timeout_client(Socket) ->
{error, timeout} = ssl:recv(Socket, 11, 500),
+ {error, timeout} = ssl:recv(Socket, 11, 0),
ssl:send(Socket, "Hello world"),
receive
Msg ->
@@ -3931,6 +4133,18 @@ renegotiate_rejected(Socket) ->
ssl:send(Socket, "Hello world"),
ok.
+rizzo_add_mitigation_option(Value, Config) ->
+ lists:foldl(fun(Opt, Acc) ->
+ case proplists:get_value(Opt, Acc) of
+ undefined -> Acc;
+ C ->
+ N = lists:keystore(beast_mitigation, 1, C,
+ {beast_mitigation, Value}),
+ lists:keystore(Opt, 1, Acc, {Opt, N})
+ end
+ end, Config,
+ [client_opts, client_dsa_opts, server_opts, server_dsa_opts,
+ server_ecdsa_opts, server_ecdh_rsa_opts]).
new_config(PrivDir, ServerOpts0) ->
CaCertFile = proplists:get_value(cacertfile, ServerOpts0),
@@ -4094,7 +4308,7 @@ erlang_ssl_receive(Socket, Data) ->
erlang_ssl_receive(Socket, tl(Data));
Other ->
ct:fail({unexpected_message, Other})
- after ?SLEEP * 3 * test_server:timetrap_scale_factor() ->
+ after timer:seconds(?SEC_RENEGOTIATION_TIMEOUT) * test_server:timetrap_scale_factor() ->
ct:fail({did_not_get, Data})
end.
@@ -4199,78 +4413,78 @@ client_server_opts({KeyAlgo,_,_}, Config)
when KeyAlgo == rsa orelse
KeyAlgo == dhe_rsa orelse
KeyAlgo == ecdhe_rsa ->
- {?config(client_opts, Config),
- ?config(server_opts, Config)};
+ {ssl_test_lib:ssl_options(client_opts, Config),
+ ssl_test_lib:ssl_options(server_opts, Config)};
client_server_opts({KeyAlgo,_,_}, Config) when KeyAlgo == dss orelse KeyAlgo == dhe_dss ->
- {?config(client_dsa_opts, Config),
- ?config(server_dsa_opts, Config)};
+ {ssl_test_lib:ssl_options(client_dsa_opts, Config),
+ ssl_test_lib:ssl_options(server_dsa_opts, Config)};
client_server_opts({KeyAlgo,_,_}, Config) when KeyAlgo == ecdh_ecdsa orelse KeyAlgo == ecdhe_ecdsa ->
- {?config(client_opts, Config),
- ?config(server_ecdsa_opts, Config)};
+ {ssl_test_lib:ssl_options(client_opts, Config),
+ ssl_test_lib:ssl_options(server_ecdsa_opts, Config)};
client_server_opts({KeyAlgo,_,_}, Config) when KeyAlgo == ecdh_rsa ->
- {?config(client_opts, Config),
- ?config(server_ecdh_rsa_opts, Config)}.
+ {ssl_test_lib:ssl_options(client_opts, Config),
+ ssl_test_lib:ssl_options(server_ecdh_rsa_opts, Config)}.
run_suites(Ciphers, Version, Config, Type) ->
{ClientOpts, ServerOpts} =
case Type of
rsa ->
- {?config(client_opts, Config),
- ?config(server_opts, Config)};
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ssl_test_lib:ssl_options(server_verification_opts, Config)};
dsa ->
- {?config(client_opts, Config),
- ?config(server_dsa_opts, Config)};
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ssl_test_lib:ssl_options(server_dsa_opts, Config)};
anonymous ->
%% No certs in opts!
- {?config(client_opts, Config),
- ?config(server_anon, Config)};
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ssl_test_lib:ssl_options(server_anon, Config)};
psk ->
- {?config(client_psk, Config),
- ?config(server_psk, Config)};
+ {ssl_test_lib:ssl_options(client_psk, Config),
+ ssl_test_lib:ssl_options(server_psk, Config)};
psk_with_hint ->
- {?config(client_psk, Config),
- ?config(server_psk_hint, Config)};
+ {ssl_test_lib:ssl_options(client_psk, Config),
+ ssl_test_lib:ssl_options(server_psk_hint, Config)};
psk_anon ->
- {?config(client_psk, Config),
- ?config(server_psk_anon, Config)};
+ {ssl_test_lib:ssl_options(client_psk, Config),
+ ssl_test_lib:ssl_options(server_psk_anon, Config)};
psk_anon_with_hint ->
- {?config(client_psk, Config),
- ?config(server_psk_anon_hint, Config)};
+ {ssl_test_lib:ssl_options(client_psk, Config),
+ ssl_test_lib:ssl_options(server_psk_anon_hint, Config)};
srp ->
- {?config(client_srp, Config),
- ?config(server_srp, Config)};
+ {ssl_test_lib:ssl_options(client_srp, Config),
+ ssl_test_lib:ssl_options(server_srp, Config)};
srp_anon ->
- {?config(client_srp, Config),
- ?config(server_srp_anon, Config)};
+ {ssl_test_lib:ssl_options(client_srp, Config),
+ ssl_test_lib:ssl_options(server_srp_anon, Config)};
srp_dsa ->
- {?config(client_srp_dsa, Config),
- ?config(server_srp_dsa, Config)};
+ {ssl_test_lib:ssl_options(client_srp_dsa, Config),
+ ssl_test_lib:ssl_options(server_srp_dsa, Config)};
ecdsa ->
- {?config(client_opts, Config),
- ?config(server_ecdsa_opts, Config)};
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ssl_test_lib:ssl_options(server_ecdsa_opts, Config)};
ecdh_rsa ->
- {?config(client_opts, Config),
- ?config(server_ecdh_rsa_opts, Config)};
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ssl_test_lib:ssl_options(server_ecdh_rsa_opts, Config)};
rc4_rsa ->
- {?config(client_opts, Config),
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
[{ciphers, Ciphers} |
- ?config(server_opts, Config)]};
+ ssl_test_lib:ssl_options(server_verification_opts, Config)]};
rc4_ecdh_rsa ->
- {?config(client_opts, Config),
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
[{ciphers, Ciphers} |
- ?config(server_ecdh_rsa_opts, Config)]};
+ ssl_test_lib:ssl_options(server_ecdh_rsa_opts, Config)]};
rc4_ecdsa ->
- {?config(client_opts, Config),
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
[{ciphers, Ciphers} |
- ?config(server_ecdsa_opts, Config)]};
+ ssl_test_lib:ssl_options(server_ecdsa_opts, Config)]};
des_dhe_rsa ->
- {?config(client_opts, Config),
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
[{ciphers, Ciphers} |
- ?config(server_rsa_opts, Config)]};
+ ssl_test_lib:ssl_options(server_verification_opts, Config)]};
des_rsa ->
- {?config(client_opts, Config),
+ {ssl_test_lib:ssl_options(client_verification_opts, Config),
[{ciphers, Ciphers} |
- ?config(server_opts, Config)]}
+ ssl_test_lib:ssl_options(server_verification_opts, Config)]}
end,
Result = lists:map(fun(Cipher) ->
@@ -4293,6 +4507,7 @@ cipher(CipherSuite, Version, Config, ClientOpts, ServerOpts) ->
%% process_flag(trap_exit, true),
ct:log("Testing CipherSuite ~p~n", [CipherSuite]),
ct:log("Server Opts ~p~n", [ServerOpts]),
+ ct:log("Client Opts ~p~n", [ClientOpts]),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
ErlangCipherSuite = erlang_cipher_suite(CipherSuite),
@@ -4351,7 +4566,7 @@ connect_dist_c(S) ->
{ok, Test} = ssl:recv(S, 0, 10000),
ok.
-tls_downgrade(Socket) ->
+tls_downgrade_result(Socket) ->
ok = ssl_test_lib:send_recv_result(Socket),
case ssl:close(Socket, {self(), 10000}) of
{ok, TCPSocket} ->
@@ -4390,22 +4605,22 @@ get_invalid_inet_option(Socket) ->
{error, {options, {socket_options, foo, _}}} = ssl:getopts(Socket, [foo]),
ok.
-shutdown_result(Socket, server) ->
+tls_shutdown_result(Socket, server) ->
ssl:send(Socket, "Hej"),
ssl:shutdown(Socket, write),
{ok, "Hej hopp"} = ssl:recv(Socket, 8),
ok;
-shutdown_result(Socket, client) ->
+tls_shutdown_result(Socket, client) ->
{ok, "Hej"} = ssl:recv(Socket, 3),
ssl:send(Socket, "Hej hopp"),
ssl:shutdown(Socket, write),
ok.
-shutdown_write_result(Socket, server) ->
+tls_shutdown_write_result(Socket, server) ->
ct:sleep(?SLEEP),
ssl:shutdown(Socket, write);
-shutdown_write_result(Socket, client) ->
+tls_shutdown_write_result(Socket, client) ->
ssl:recv(Socket, 0).
dummy(_Socket) ->
@@ -4413,18 +4628,18 @@ dummy(_Socket) ->
%% due to fatal handshake failiure
exit(kill).
-shutdown_both_result(Socket, server) ->
+tls_shutdown_both_result(Socket, server) ->
ct:sleep(?SLEEP),
ssl:shutdown(Socket, read_write);
-shutdown_both_result(Socket, client) ->
+tls_shutdown_both_result(Socket, client) ->
ssl:recv(Socket, 0).
peername_result(S) ->
ssl:peername(S).
version_option_test(Config, Version) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -4470,4 +4685,6 @@ first_rsa_suite([{rsa, _, _, _} = Suite| _]) ->
first_rsa_suite([_ | Rest]) ->
first_rsa_suite(Rest).
-
+wait_for_send(Socket) ->
+ %% Make sure TLS process processed send message event
+ _ = ssl:connection_information(Socket).
diff --git a/lib/ssl/test/ssl_bench_SUITE.erl b/lib/ssl/test/ssl_bench_SUITE.erl
index ed439a425f..21989f8d99 100644
--- a/lib/ssl/test/ssl_bench_SUITE.erl
+++ b/lib/ssl/test/ssl_bench_SUITE.erl
@@ -25,11 +25,12 @@
suite() -> [{ct_hooks,[{ts_install_cth,[{nodenames,2}]}]}].
-all() -> [{group, setup}, {group, payload}].
+all() -> [{group, setup}, {group, payload}, {group, pem_cache}].
groups() ->
[{setup, [{repeat, 3}], [setup_sequential, setup_concurrent]},
- {payload, [{repeat, 3}], [payload_simple]}
+ {payload, [{repeat, 3}], [payload_simple]},
+ {pem_cache, [{repeat, 3}], [use_pem_cache, bypass_pem_cache]}
].
init_per_group(_GroupName, Config) ->
@@ -49,9 +50,33 @@ init_per_suite(Config) ->
end_per_suite(_Config) ->
ok.
+init_per_testcase(use_pem_cache, Conf) ->
+ case bypass_pem_cache_supported() of
+ false -> {skipped, "PEM cache bypass support required"};
+ true ->
+ application:set_env(ssl, bypass_pem_cache, false),
+ Conf
+ end;
+init_per_testcase(bypass_pem_cache, Conf) ->
+ case bypass_pem_cache_supported() of
+ false -> {skipped, "PEM cache bypass support required"};
+ true ->
+ application:set_env(ssl, bypass_pem_cache, true),
+ Conf
+ end;
init_per_testcase(_Func, Conf) ->
Conf.
+end_per_testcase(use_pem_cache, _Config) ->
+ case bypass_pem_cache_supported() of
+ false -> ok;
+ true -> application:set_env(ssl, bypass_pem_cache, false)
+ end;
+end_per_testcase(bypass_pem_cache, _Config) ->
+ case bypass_pem_cache_supported() of
+ false -> ok;
+ true -> application:set_env(ssl, bypass_pem_cache, false)
+ end;
end_per_testcase(_Func, _Conf) ->
ok.
@@ -94,6 +119,18 @@ payload_simple(Config) ->
{suite, "ssl"}, {name, "Payload simple"}]}),
ok.
+use_pem_cache(_Config) ->
+ {ok, Result} = do_test(ssl, pem_cache, 100, 500, node()),
+ ct_event:notify(#event{name = benchmark_data,
+ data=[{value, Result},
+ {suite, "ssl"}, {name, "Use PEM cache"}]}).
+
+bypass_pem_cache(_Config) ->
+ {ok, Result} = do_test(ssl, pem_cache, 100, 500, node()),
+ ct_event:notify(#event{name = benchmark_data,
+ data=[{value, Result},
+ {suite, "ssl"}, {name, "Bypass PEM cache"}]}).
+
ssl() ->
test(ssl, ?COUNT, node()).
@@ -172,6 +209,18 @@ server_init(ssl, payload, Loop, _, Server) ->
ssl:close(TSocket)
end,
setup_server_connection(Socket, Test);
+server_init(ssl, pem_cache, Loop, _, Server) ->
+ {ok, Socket} = ssl:listen(0, ssl_opts(listen_der)),
+ {ok, {_Host, Port}} = ssl:sockname(Socket),
+ {ok, Host} = inet:gethostname(),
+ Server ! {self(), {init, Host, Port}},
+ Test = fun(TSocket) ->
+ ok = ssl:ssl_accept(TSocket),
+ Size = byte_size(msg()),
+ server_echo(TSocket, Size, Loop),
+ ssl:close(TSocket)
+ end,
+ setup_server_connection(Socket, Test);
server_init(Type, Tc, _, _, Server) ->
io:format("No server init code for ~p ~p~n",[Type, Tc]),
@@ -185,6 +234,11 @@ client_init(Master, ssl, payload, Host, Port) ->
Master ! {self(), init},
Size = byte_size(msg()),
{Sock, Size};
+client_init(Master, ssl, pem_cache, Host, Port) ->
+ {ok, Sock} = ssl:connect(Host, Port, ssl_opts(connect_der)),
+ Master ! {self(), init},
+ Size = byte_size(msg()),
+ {Sock, Size};
client_init(_Me, Type, Tc, Host, Port) ->
io:format("No client init code for ~p ~p~n",[Type, Tc]),
{Host, Port}.
@@ -228,6 +282,13 @@ payload(Loop, ssl, D = {Socket, Size}) when Loop > 0 ->
payload(_, _, {Socket, _}) ->
ssl:close(Socket).
+pem_cache(N, ssl, Data = {Socket, Size}) when N > 0 ->
+ ok = ssl:send(Socket, msg()),
+ {ok, _} = ssl:recv(Socket, Size),
+ pem_cache(N-1, ssl, Data);
+pem_cache(_, _, {Socket, _}) ->
+ ssl:close(Socket).
+
msg() ->
<<"Hello",
0:(512*8),
@@ -352,16 +413,43 @@ stop_profile(fprof, File) ->
ssl_opts(listen) ->
[{backlog, 500} | ssl_opts("server")];
ssl_opts(connect) ->
- [{verify, verify_peer}
- | ssl_opts("client")];
+ [{verify, verify_peer} | ssl_opts("client")];
+ssl_opts(listen_der) ->
+ [{backlog, 500} | ssl_opts("server_der")];
+ssl_opts(connect_der) ->
+ [{verify, verify_peer} | ssl_opts("client_der")];
ssl_opts(Role) ->
- Dir = filename:join([code:lib_dir(ssl), "examples", "certs", "etc"]),
+ CertData = cert_data(Role),
[{active, false},
{depth, 2},
{reuseaddr, true},
{mode,binary},
{nodelay, true},
- {ciphers, [{dhe_rsa,aes_256_cbc,sha}]},
- {cacertfile, filename:join([Dir, Role, "cacerts.pem"])},
+ {ciphers, [{dhe_rsa,aes_256_cbc,sha}]}
+ |CertData].
+
+cert_data(Der) when Der =:= "server_der"; Der =:= "client_der" ->
+ [Role,_] = string:tokens(Der, "_"),
+ Dir = filename:join([code:lib_dir(ssl), "examples", "certs", "etc"]),
+ {ok, CaCert0} = file:read_file(filename:join([Dir, Role, "cacerts.pem"])),
+ {ok, Cert0} = file:read_file(filename:join([Dir, Role, "cert.pem"])),
+ {ok, Key0} = file:read_file(filename:join([Dir, Role, "key.pem"])),
+ [{_, Cert, _}] = public_key:pem_decode(Cert0),
+ CaCert1 = public_key:pem_decode(CaCert0),
+ CaCert = [CCert || {_, CCert, _} <- CaCert1],
+ [{KeyType, Key, _}] = public_key:pem_decode(Key0),
+ [{cert, Cert},
+ {cacerts, CaCert},
+ {key, {KeyType, Key}}];
+cert_data(Role) ->
+ Dir = filename:join([code:lib_dir(ssl), "examples", "certs", "etc"]),
+ [{cacertfile, filename:join([Dir, Role, "cacerts.pem"])},
{certfile, filename:join([Dir, Role, "cert.pem"])},
{keyfile, filename:join([Dir, Role, "key.pem"])}].
+
+bypass_pem_cache_supported() ->
+ %% This function is currently critical to support cache bypass
+ %% and did not exist in prior versions.
+ catch ssl_pkix_db:module_info(), % ensure module is loaded
+ erlang:function_exported(ssl_pkix_db, extract_trusted_certs, 1).
+
diff --git a/lib/ssl/test/ssl_certificate_verify_SUITE.erl b/lib/ssl/test/ssl_certificate_verify_SUITE.erl
index 49c0b9c5a1..4c6f1d7c01 100644
--- a/lib/ssl/test/ssl_certificate_verify_SUITE.erl
+++ b/lib/ssl/test/ssl_certificate_verify_SUITE.erl
@@ -65,9 +65,10 @@ tests() ->
cert_expired,
invalid_signature_client,
invalid_signature_server,
- extended_key_usage_verify_peer,
- extended_key_usage_verify_none,
- critical_extension_verify_peer,
+ extended_key_usage_verify_client,
+ extended_key_usage_verify_server,
+ critical_extension_verify_client,
+ critical_extension_verify_server,
critical_extension_verify_none].
error_handling_tests()->
@@ -84,10 +85,10 @@ init_per_suite(Config0) ->
catch crypto:stop(),
try crypto:start() of
ok ->
- ssl:start(),
+ ssl_test_lib:clean_start(),
%% make rsa certs using oppenssl
- {ok, _} = make_certs:all(?config(data_dir, Config0),
- ?config(priv_dir, Config0)),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config0),
+ proplists:get_value(priv_dir, Config0)),
Config = ssl_test_lib:make_dsa_cert(Config0),
ssl_test_lib:cert_options(Config)
catch _:_ ->
@@ -122,7 +123,9 @@ init_per_testcase(TestCase, Config) when TestCase == cert_expired;
ssl:clear_pem_cache(),
init_per_testcase(common, Config);
init_per_testcase(_TestCase, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ssl:stop(),
+ ssl:start(),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:timetrap({seconds, 5}),
Config.
@@ -136,10 +139,10 @@ end_per_testcase(_TestCase, Config) ->
verify_peer() ->
[{doc,"Test option verify_peer"}].
verify_peer(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- Active = ?config(active, Config),
- ReceiveFunction = ?config(receive_function, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -162,10 +165,10 @@ verify_none() ->
[{doc,"Test option verify_none"}].
verify_none(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- Active = ?config(active, Config),
- ReceiveFunction = ?config(receive_function, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -190,10 +193,10 @@ server_verify_client_once() ->
[{doc,"Test server option verify_client_once"}].
server_verify_client_once(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- Active = ?config(active, Config),
- ReceiveFunction = ?config(receive_function, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, []),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -229,10 +232,10 @@ server_require_peer_cert_ok() ->
server_require_peer_cert_ok(Config) when is_list(Config) ->
ServerOpts = [{verify, verify_peer}, {fail_if_no_peer_cert, true}
- | ?config(server_verification_opts, Config)],
- ClientOpts = ?config(client_verification_opts, Config),
- Active = ?config(active, Config),
- ReceiveFunction = ?config(receive_function, Config),
+ | ssl_test_lib:ssl_options(server_verification_opts, Config)],
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -258,8 +261,8 @@ server_require_peer_cert_fail() ->
server_require_peer_cert_fail(Config) when is_list(Config) ->
ServerOpts = [{verify, verify_peer}, {fail_if_no_peer_cert, true}
- | ?config(server_verification_opts, Config)],
- BadClientOpts = ?config(client_opts, Config),
+ | ssl_test_lib:ssl_options(server_verification_opts, Config)],
+ BadClientOpts = ssl_test_lib:ssl_options(client_opts, []),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0},
@@ -289,8 +292,8 @@ server_require_peer_cert_partial_chain() ->
server_require_peer_cert_partial_chain(Config) when is_list(Config) ->
ServerOpts = [{verify, verify_peer}, {fail_if_no_peer_cert, true}
- | ?config(server_verification_opts, Config)],
- ClientOpts = ?config(client_verification_opts, Config),
+ | ssl_test_lib:ssl_options(server_verification_opts, Config)],
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
{ok, ClientCAs} = file:read_file(proplists:get_value(cacertfile, ClientOpts)),
@@ -324,14 +327,14 @@ server_require_peer_cert_allow_partial_chain() ->
server_require_peer_cert_allow_partial_chain(Config) when is_list(Config) ->
ServerOpts = [{verify, verify_peer}, {fail_if_no_peer_cert, true}
- | ?config(server_verification_opts, Config)],
- ClientOpts = ?config(client_verification_opts, Config),
+ | ssl_test_lib:ssl_options(server_verification_opts, Config)],
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
- Active = ?config(active, Config),
- ReceiveFunction = ?config(receive_function, Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
- {ok, ServerCAs} = file:read_file(proplists:get_value(cacertfile, ServerOpts)),
- [{_,_,_}, {_, IntermidiateCA, _}] = public_key:pem_decode(ServerCAs),
+ {ok, ClientCAs} = file:read_file(proplists:get_value(cacertfile, ClientOpts)),
+ [{_,_,_}, {_, IntermidiateCA, _}] = public_key:pem_decode(ClientCAs),
PartialChain = fun(CertChain) ->
case lists:member(IntermidiateCA, CertChain) of
@@ -366,8 +369,8 @@ server_require_peer_cert_do_not_allow_partial_chain() ->
server_require_peer_cert_do_not_allow_partial_chain(Config) when is_list(Config) ->
ServerOpts = [{verify, verify_peer}, {fail_if_no_peer_cert, true}
- | ?config(server_verification_opts, Config)],
- ClientOpts = ?config(client_verification_opts, Config),
+ | ssl_test_lib:ssl_options(server_verification_opts, Config)],
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
{ok, ServerCAs} = file:read_file(proplists:get_value(cacertfile, ServerOpts)),
@@ -407,8 +410,8 @@ server_require_peer_cert_partial_chain_fun_fail() ->
server_require_peer_cert_partial_chain_fun_fail(Config) when is_list(Config) ->
ServerOpts = [{verify, verify_peer}, {fail_if_no_peer_cert, true}
- | ?config(server_verification_opts, Config)],
- ClientOpts = ?config(client_verification_opts, Config),
+ | ssl_test_lib:ssl_options(server_verification_opts, Config)],
+ ClientOpts = proplists:get_value(client_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
{ok, ServerCAs} = file:read_file(proplists:get_value(cacertfile, ServerOpts)),
@@ -447,8 +450,8 @@ verify_fun_always_run_client() ->
[{doc,"Verify that user verify_fun is always run (for valid and valid_peer not only unknown_extension)"}].
verify_fun_always_run_client(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0},
{from, self()},
@@ -492,8 +495,8 @@ verify_fun_always_run_client(Config) when is_list(Config) ->
verify_fun_always_run_server() ->
[{doc,"Verify that user verify_fun is always run (for valid and valid_peer not only unknown_extension)"}].
verify_fun_always_run_server(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
%% If user verify fun is called correctly we fail the connection.
@@ -524,9 +527,7 @@ verify_fun_always_run_server(Config) when is_list(Config) ->
{from, self()},
{mfa, {ssl_test_lib,
no_result, []}},
- {options,
- [{verify, verify_peer}
- | ClientOpts]}]),
+ {options, ClientOpts}]),
%% Client error may be {tls_alert, "handshake failure" } or closed depending on timing
%% this is not a bug it is a circumstance of how tcp works!
@@ -543,9 +544,9 @@ cert_expired() ->
[{doc,"Test server with expired certificate"}].
cert_expired(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- PrivDir = ?config(priv_dir, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
KeyFile = filename:join(PrivDir, "otpCA/private/key.pem"),
[KeyEntry] = ssl_test_lib:pem_to_der(KeyFile),
@@ -607,15 +608,15 @@ two_digits_str(N) ->
lists:flatten(io_lib:format("~p", [N])).
%%--------------------------------------------------------------------
-extended_key_usage_verify_peer() ->
- [{doc,"Test cert that has a critical extended_key_usage extension in verify_peer mode"}].
+extended_key_usage_verify_server() ->
+ [{doc,"Test cert that has a critical extended_key_usage extension in verify_peer mode for server"}].
-extended_key_usage_verify_peer(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- PrivDir = ?config(priv_dir, Config),
- Active = ?config(active, Config),
- ReceiveFunction = ?config(receive_function, Config),
+extended_key_usage_verify_server(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
KeyFile = filename:join(PrivDir, "otpCA/private/key.pem"),
[KeyEntry] = ssl_test_lib:pem_to_der(KeyFile),
@@ -660,7 +661,7 @@ extended_key_usage_verify_peer(Config) when is_list(Config) ->
{host, Hostname},
{from, self()},
{mfa, {ssl_test_lib, ReceiveFunction, []}},
- {options, [{verify, verify_peer}, {active, Active} |
+ {options, [{verify, verify_none}, {active, Active} |
NewClientOpts]}]),
ssl_test_lib:check_result(Server, ok, Client, ok),
@@ -669,15 +670,15 @@ extended_key_usage_verify_peer(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
-extended_key_usage_verify_none() ->
- [{doc,"Test cert that has a critical extended_key_usage extension in verify_none mode"}].
+extended_key_usage_verify_client() ->
+ [{doc,"Test cert that has a critical extended_key_usage extension in client verify_peer mode"}].
-extended_key_usage_verify_none(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- PrivDir = ?config(priv_dir, Config),
- Active = ?config(active, Config),
- ReceiveFunction = ?config(receive_function, Config),
+extended_key_usage_verify_client(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
KeyFile = filename:join(PrivDir, "otpCA/private/key.pem"),
[KeyEntry] = ssl_test_lib:pem_to_der(KeyFile),
@@ -730,15 +731,15 @@ extended_key_usage_verify_none(Config) when is_list(Config) ->
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
-critical_extension_verify_peer() ->
+critical_extension_verify_server() ->
[{doc,"Test cert that has a critical unknown extension in verify_peer mode"}].
-critical_extension_verify_peer(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- PrivDir = ?config(priv_dir, Config),
- Active = ?config(active, Config),
- ReceiveFunction = ?config(receive_function, Config),
+critical_extension_verify_server(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
KeyFile = filename:join(PrivDir, "otpCA/private/key.pem"),
NewCertName = integer_to_list(erlang:unique_integer()) ++ ".pem",
@@ -766,7 +767,7 @@ critical_extension_verify_peer(Config) when is_list(Config) ->
{host, Hostname},
{from, self()},
{mfa, {ssl_test_lib, ReceiveFunction, []}},
- {options, [{verify, verify_peer}, {active, Active} | NewClientOpts]}]),
+ {options, [{verify, verify_none}, {active, Active} | NewClientOpts]}]),
%% This certificate has a critical extension that we don't
%% understand. Therefore, verification should fail.
@@ -775,17 +776,63 @@ critical_extension_verify_peer(Config) when is_list(Config) ->
ssl_test_lib:close(Server),
ok.
+%%--------------------------------------------------------------------
+
+critical_extension_verify_client() ->
+ [{doc,"Test cert that has a critical unknown extension in verify_peer mode"}].
+
+critical_extension_verify_client(Config) when is_list(Config) ->
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
+
+ KeyFile = filename:join(PrivDir, "otpCA/private/key.pem"),
+ NewCertName = integer_to_list(erlang:unique_integer()) ++ ".pem",
+
+ ServerCertFile = proplists:get_value(certfile, ServerOpts),
+ NewServerCertFile = filename:join([PrivDir, "server", NewCertName]),
+ add_critical_netscape_cert_type(ServerCertFile, NewServerCertFile, KeyFile),
+ NewServerOpts = [{certfile, NewServerCertFile} | proplists:delete(certfile, ServerOpts)],
+
+ ClientCertFile = proplists:get_value(certfile, ClientOpts),
+ NewClientCertFile = filename:join([PrivDir, "client", NewCertName]),
+ add_critical_netscape_cert_type(ClientCertFile, NewClientCertFile, KeyFile),
+ NewClientOpts = [{certfile, NewClientCertFile} | proplists:delete(certfile, ClientOpts)],
+
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Server = ssl_test_lib:start_server_error(
+ [{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {ssl_test_lib, ReceiveFunction, []}},
+ {options, [{verify, verify_none}, {active, Active} | NewServerOpts]}]),
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client_error(
+ [{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {ssl_test_lib, ReceiveFunction, []}},
+ {options, [{verify, verify_peer}, {active, Active} | NewClientOpts]}]),
+
+ %% This certificate has a critical extension that we don't
+ %% understand. Therefore, verification should fail.
+ tcp_delivery_workaround(Server, {error, {tls_alert, "unsupported certificate"}},
+ Client, {error, {tls_alert, "unsupported certificate"}}),
+ ssl_test_lib:close(Server),
+ ok.
%%--------------------------------------------------------------------
critical_extension_verify_none() ->
[{doc,"Test cert that has a critical unknown extension in verify_none mode"}].
critical_extension_verify_none(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- PrivDir = ?config(priv_dir, Config),
- Active = ?config(active, Config),
- ReceiveFunction = ?config(receive_function, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Active = proplists:get_value(active, Config),
+ ReceiveFunction = proplists:get_value(receive_function, Config),
KeyFile = filename:join(PrivDir, "otpCA/private/key.pem"),
NewCertName = integer_to_list(erlang:unique_integer()) ++ ".pem",
@@ -850,9 +897,9 @@ no_authority_key_identifier() ->
" but are present in trusted certs db."}].
no_authority_key_identifier(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- PrivDir = ?config(priv_dir, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
KeyFile = filename:join(PrivDir, "otpCA/private/key.pem"),
[KeyEntry] = ssl_test_lib:pem_to_der(KeyFile),
@@ -906,9 +953,9 @@ no_authority_key_identifier_and_nonstandard_encoding() ->
" authorityKeyIdentifier extension but are present in trusted certs db."}].
no_authority_key_identifier_and_nonstandard_encoding(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- PrivDir = ?config(priv_dir, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
KeyFile = filename:join(PrivDir, "otpCA/private/key.pem"),
[KeyEntry] = ssl_test_lib:pem_to_der(KeyFile),
@@ -967,9 +1014,9 @@ invalid_signature_server() ->
[{doc,"Test client with invalid signature"}].
invalid_signature_server(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- PrivDir = ?config(priv_dir, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
KeyFile = filename:join(PrivDir, "server/key.pem"),
[KeyEntry] = ssl_test_lib:pem_to_der(KeyFile),
@@ -1004,9 +1051,9 @@ invalid_signature_client() ->
[{doc,"Test server with invalid signature"}].
invalid_signature_client(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
- PrivDir = ?config(priv_dir, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
KeyFile = filename:join(PrivDir, "client/key.pem"),
[KeyEntry] = ssl_test_lib:pem_to_der(KeyFile),
@@ -1042,8 +1089,8 @@ client_with_cert_cipher_suites_handshake() ->
[{doc, "Test that client with a certificate without keyEncipherment usage "
" extension can connect to a server with restricted cipher suites "}].
client_with_cert_cipher_suites_handshake(Config) when is_list(Config) ->
- ClientOpts = ?config(client_verification_opts_digital_signature_only, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts_digital_signature_only, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1070,7 +1117,7 @@ client_with_cert_cipher_suites_handshake(Config) when is_list(Config) ->
server_verify_no_cacerts() ->
[{doc,"Test server must have cacerts if it wants to verify client"}].
server_verify_no_cacerts(Config) when is_list(Config) ->
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = proplists:delete(cacertfile, ssl_test_lib:ssl_options(server_opts, Config)),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1084,8 +1131,8 @@ server_verify_no_cacerts(Config) when is_list(Config) ->
unknown_server_ca_fail() ->
[{doc,"Test that the client fails if the ca is unknown in verify_peer mode"}].
unknown_server_ca_fail(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, []),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1128,8 +1175,8 @@ unknown_server_ca_fail(Config) when is_list(Config) ->
unknown_server_ca_accept_verify_none() ->
[{doc,"Test that the client succeds if the ca is unknown in verify_none mode"}].
unknown_server_ca_accept_verify_none(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, []),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1153,8 +1200,8 @@ unknown_server_ca_accept_verify_peer() ->
[{doc, "Test that the client succeds if the ca is unknown in verify_peer mode"
" with a verify_fun that accepts the unknown ca error"}].
unknown_server_ca_accept_verify_peer(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts =ssl_test_lib:ssl_options(client_opts, []),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1192,8 +1239,8 @@ unknown_server_ca_accept_verify_peer(Config) when is_list(Config) ->
unknown_server_ca_accept_backwardscompatibility() ->
[{doc,"Test that old style verify_funs will work"}].
unknown_server_ca_accept_backwardscompatibility(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, []),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
diff --git a/lib/ssl/test/ssl_crl_SUITE.erl b/lib/ssl/test/ssl_crl_SUITE.erl
index 291a5f3fde..bc2822f0c4 100644
--- a/lib/ssl/test/ssl_crl_SUITE.erl
+++ b/lib/ssl/test/ssl_crl_SUITE.erl
@@ -41,20 +41,26 @@ groups() ->
[
{check_true, [], [{group, v2_crl},
{group, v1_crl},
- {group, idp_crl}]},
+ {group, idp_crl},
+ {group, crl_hash_dir}]},
{check_peer, [], [{group, v2_crl},
{group, v1_crl},
- {group, idp_crl}]},
+ {group, idp_crl},
+ {group, crl_hash_dir}]},
{check_best_effort, [], [{group, v2_crl},
{group, v1_crl},
- {group, idp_crl}]},
+ {group, idp_crl},
+ {group, crl_hash_dir}]},
{v2_crl, [], basic_tests()},
{v1_crl, [], basic_tests()},
- {idp_crl, [], basic_tests()}].
+ {idp_crl, [], basic_tests()},
+ {crl_hash_dir, [], basic_tests() ++ crl_hash_dir_tests()}].
basic_tests() ->
[crl_verify_valid, crl_verify_revoked, crl_verify_no_crl].
+crl_hash_dir_tests() ->
+ [crl_hash_dir_collision, crl_hash_dir_expired].
init_per_suite(Config) ->
case os:find_executable("openssl") of
@@ -66,7 +72,7 @@ init_per_suite(Config) ->
false ->
{skip, io_lib:format("Bad openssl version: ~p",[OpenSSL_version])};
_ ->
- catch crypto:stop(),
+ end_per_suite(Config),
try crypto:start() of
ok ->
{ok, Hostname0} = inet:gethostname(),
@@ -97,11 +103,28 @@ init_per_group(Group, Config0) ->
true ->
[{idp_crl, true} | Config0];
false ->
- DataDir = ?config(data_dir, Config0),
- CertDir = filename:join(?config(priv_dir, Config0), Group),
+ DataDir = proplists:get_value(data_dir, Config0),
+ CertDir = filename:join(proplists:get_value(priv_dir, Config0), Group),
{CertOpts, Config} = init_certs(CertDir, Group, Config0),
{ok, _} = make_certs:all(DataDir, CertDir, CertOpts),
- [{cert_dir, CertDir}, {idp_crl, false} | Config]
+ case Group of
+ crl_hash_dir ->
+ CrlDir = filename:join(CertDir, "crls"),
+ %% Copy CRLs to their hashed filenames.
+ %% Find the hashes with 'openssl crl -noout -hash -in crl.pem'.
+ populate_crl_hash_dir(CertDir, CrlDir,
+ [{"erlangCA", "d6134ed3"},
+ {"otpCA", "d4c8d7e5"}],
+ replace),
+ CrlCacheOpts = [{crl_cache,
+ {ssl_crl_hash_dir,
+ {internal, [{dir, CrlDir}]}}}];
+ _ ->
+ CrlCacheOpts = []
+ end,
+ [{crl_cache_opts, CrlCacheOpts},
+ {cert_dir, CertDir},
+ {idp_crl, false} | Config]
end.
end_per_group(_GroupName, Config) ->
@@ -109,35 +132,35 @@ end_per_group(_GroupName, Config) ->
Config.
init_per_testcase(Case, Config0) ->
- case ?config(idp_crl, Config0) of
+ case proplists:get_value(idp_crl, Config0) of
true ->
end_per_testcase(Case, Config0),
inets:start(),
- ssl:start(),
- ServerRoot = make_dir_path([?config(priv_dir, Config0), idp_crl, tmp]),
+ ssl_test_lib:clean_start(),
+ ServerRoot = make_dir_path([proplists:get_value(priv_dir, Config0), idp_crl, tmp]),
%% start a HTTP server to serve the CRLs
- {ok, Httpd} = inets:start(httpd, [{ipfamily, ?config(ipfamily, Config0)},
+ {ok, Httpd} = inets:start(httpd, [{ipfamily, proplists:get_value(ipfamily, Config0)},
{server_name, "localhost"}, {port, 0},
{server_root, ServerRoot},
{document_root,
- filename:join(?config(priv_dir, Config0), idp_crl)}
+ filename:join(proplists:get_value(priv_dir, Config0), idp_crl)}
]),
[{port,Port}] = httpd:info(Httpd, [port]),
Config = [{httpd_port, Port} | Config0],
- DataDir = ?config(data_dir, Config),
- CertDir = filename:join(?config(priv_dir, Config0), idp_crl),
+ DataDir = proplists:get_value(data_dir, Config),
+ CertDir = filename:join(proplists:get_value(priv_dir, Config0), idp_crl),
{CertOpts, Config} = init_certs(CertDir, idp_crl, Config),
{ok, _} = make_certs:all(DataDir, CertDir, CertOpts),
ct:timetrap({seconds, 6}),
[{cert_dir, CertDir} | Config];
false ->
end_per_testcase(Case, Config0),
- ssl:start(),
+ ssl_test_lib:clean_start(),
Config0
end.
end_per_testcase(_, Config) ->
- case ?config(idp_crl, Config) of
+ case proplists:get_value(idp_crl, Config) of
true ->
ssl:stop(),
inets:stop();
@@ -152,21 +175,22 @@ end_per_testcase(_, Config) ->
crl_verify_valid() ->
[{doc,"Verify a simple valid CRL chain"}].
crl_verify_valid(Config) when is_list(Config) ->
- PrivDir = ?config(cert_dir, Config),
- Check = ?config(crl_check, Config),
+ PrivDir = proplists:get_value(cert_dir, Config),
+ Check = proplists:get_value(crl_check, Config),
ServerOpts = [{keyfile, filename:join([PrivDir, "server", "key.pem"])},
{certfile, filename:join([PrivDir, "server", "cert.pem"])},
{cacertfile, filename:join([PrivDir, "server", "cacerts.pem"])}],
- ClientOpts = case ?config(idp_crl, Config) of
+ ClientOpts = case proplists:get_value(idp_crl, Config) of
true ->
[{cacertfile, filename:join([PrivDir, "server", "cacerts.pem"])},
{crl_check, Check},
{crl_cache, {ssl_crl_cache, {internal, [{http, 5000}]}}},
{verify, verify_peer}];
false ->
- [{cacertfile, filename:join([PrivDir, "server", "cacerts.pem"])},
- {crl_check, Check},
- {verify, verify_peer}]
+ ?config(crl_cache_opts, Config) ++
+ [{cacertfile, filename:join([PrivDir, "server", "cacerts.pem"])},
+ {crl_check, Check},
+ {verify, verify_peer}]
end,
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -178,8 +202,8 @@ crl_verify_valid(Config) when is_list(Config) ->
crl_verify_revoked() ->
[{doc,"Verify a simple CRL chain when peer cert is reveoked"}].
crl_verify_revoked(Config) when is_list(Config) ->
- PrivDir = ?config(cert_dir, Config),
- Check = ?config(crl_check, Config),
+ PrivDir = proplists:get_value(cert_dir, Config),
+ Check = proplists:get_value(crl_check, Config),
ServerOpts = [{keyfile, filename:join([PrivDir, "revoked", "key.pem"])},
{certfile, filename:join([PrivDir, "revoked", "cert.pem"])},
{cacertfile, filename:join([PrivDir, "revoked", "cacerts.pem"])}],
@@ -189,16 +213,17 @@ crl_verify_revoked(Config) when is_list(Config) ->
ssl_crl_cache:insert({file, filename:join([PrivDir, "erlangCA", "crl.pem"])}),
ssl_crl_cache:insert({file, filename:join([PrivDir, "otpCA", "crl.pem"])}),
- ClientOpts = case ?config(idp_crl, Config) of
+ ClientOpts = case proplists:get_value(idp_crl, Config) of
true ->
[{cacertfile, filename:join([PrivDir, "revoked", "cacerts.pem"])},
{crl_cache, {ssl_crl_cache, {internal, [{http, 5000}]}}},
{crl_check, Check},
{verify, verify_peer}];
false ->
- [{cacertfile, filename:join([PrivDir, "revoked", "cacerts.pem"])},
- {crl_check, Check},
- {verify, verify_peer}]
+ ?config(crl_cache_opts, Config) ++
+ [{cacertfile, filename:join([PrivDir, "revoked", "cacerts.pem"])},
+ {crl_check, Check},
+ {verify, verify_peer}]
end,
crl_verify_error(Hostname, ServerNode, ServerOpts, ClientNode, ClientOpts,
@@ -207,12 +232,12 @@ crl_verify_revoked(Config) when is_list(Config) ->
crl_verify_no_crl() ->
[{doc,"Verify a simple CRL chain when the CRL is missing"}].
crl_verify_no_crl(Config) when is_list(Config) ->
- PrivDir = ?config(cert_dir, Config),
- Check = ?config(crl_check, Config),
+ PrivDir = proplists:get_value(cert_dir, Config),
+ Check = proplists:get_value(crl_check, Config),
ServerOpts = [{keyfile, filename:join([PrivDir, "server", "key.pem"])},
{certfile, filename:join([PrivDir, "server", "cert.pem"])},
{cacertfile, filename:join([PrivDir, "server", "cacerts.pem"])}],
- ClientOpts = case ?config(idp_crl, Config) of
+ ClientOpts = case proplists:get_value(idp_crl, Config) of
true ->
[{cacertfile, filename:join([PrivDir, "server", "cacerts.pem"])},
{crl_check, Check},
@@ -251,6 +276,134 @@ crl_verify_no_crl(Config) when is_list(Config) ->
crl_verify_valid(Hostname, ServerNode, ServerOpts, ClientNode, ClientOpts)
end.
+crl_hash_dir_collision() ->
+ [{doc,"Verify ssl_crl_hash_dir behaviour with hash collisions"}].
+crl_hash_dir_collision(Config) when is_list(Config) ->
+ PrivDir = ?config(cert_dir, Config),
+ Check = ?config(crl_check, Config),
+
+ %% Create two CAs whose names hash to the same value
+ CA1 = "hash-collision-0000000000",
+ CA2 = "hash-collision-0258497583",
+ CertsConfig = make_certs:make_config([]),
+ make_certs:intermediateCA(PrivDir, CA1, "erlangCA", CertsConfig),
+ make_certs:intermediateCA(PrivDir, CA2, "erlangCA", CertsConfig),
+
+ make_certs:enduser(PrivDir, CA1, "collision-client-1", CertsConfig),
+ make_certs:enduser(PrivDir, CA2, "collision-client-2", CertsConfig),
+
+ [ServerOpts1, ServerOpts2] =
+ [
+ [{keyfile, filename:join([PrivDir, EndUser, "key.pem"])},
+ {certfile, filename:join([PrivDir, EndUser, "cert.pem"])},
+ {cacertfile, filename:join([PrivDir, EndUser, "cacerts.pem"])}]
+ || EndUser <- ["collision-client-1", "collision-client-2"]],
+
+ %% Add CRLs for our new CAs into the CRL hash directory.
+ %% Find the hashes with 'openssl crl -noout -hash -in crl.pem'.
+ CrlDir = filename:join(PrivDir, "crls"),
+ populate_crl_hash_dir(PrivDir, CrlDir,
+ [{CA1, "b68fc624"},
+ {CA2, "b68fc624"}],
+ replace),
+
+ ClientOpts = ?config(crl_cache_opts, Config) ++
+ [{cacertfile, filename:join([PrivDir, "erlangCA", "cacerts.pem"])},
+ {crl_check, Check},
+ {verify, verify_peer}],
+
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ %% Neither certificate revoked; both succeed.
+ crl_verify_valid(Hostname, ServerNode, ServerOpts1, ClientNode, ClientOpts),
+ crl_verify_valid(Hostname, ServerNode, ServerOpts2, ClientNode, ClientOpts),
+
+ make_certs:revoke(PrivDir, CA1, "collision-client-1", CertsConfig),
+ populate_crl_hash_dir(PrivDir, CrlDir,
+ [{CA1, "b68fc624"},
+ {CA2, "b68fc624"}],
+ replace),
+
+ %% First certificate revoked; first fails, second succeeds.
+ crl_verify_error(Hostname, ServerNode, ServerOpts1, ClientNode, ClientOpts,
+ "certificate revoked"),
+ crl_verify_valid(Hostname, ServerNode, ServerOpts2, ClientNode, ClientOpts),
+
+ make_certs:revoke(PrivDir, CA2, "collision-client-2", CertsConfig),
+ populate_crl_hash_dir(PrivDir, CrlDir,
+ [{CA1, "b68fc624"},
+ {CA2, "b68fc624"}],
+ replace),
+
+ %% Second certificate revoked; both fail.
+ crl_verify_error(Hostname, ServerNode, ServerOpts1, ClientNode, ClientOpts,
+ "certificate revoked"),
+ crl_verify_error(Hostname, ServerNode, ServerOpts2, ClientNode, ClientOpts,
+ "certificate revoked"),
+
+ ok.
+
+crl_hash_dir_expired() ->
+ [{doc,"Verify ssl_crl_hash_dir behaviour with expired CRLs"}].
+crl_hash_dir_expired(Config) when is_list(Config) ->
+ PrivDir = ?config(cert_dir, Config),
+ Check = ?config(crl_check, Config),
+
+ CA = "CRL-maybe-expired-CA",
+ %% Add "issuing distribution point", to ensure that verification
+ %% fails if there is no valid CRL.
+ CertsConfig = make_certs:make_config([{issuing_distribution_point, true}]),
+ make_certs:can_generate_expired_crls(CertsConfig)
+ orelse throw({skip, "cannot generate CRLs with expiry date in the past"}),
+ make_certs:intermediateCA(PrivDir, CA, "erlangCA", CertsConfig),
+ EndUser = "CRL-maybe-expired",
+ make_certs:enduser(PrivDir, CA, EndUser, CertsConfig),
+
+ ServerOpts = [{keyfile, filename:join([PrivDir, EndUser, "key.pem"])},
+ {certfile, filename:join([PrivDir, EndUser, "cert.pem"])},
+ {cacertfile, filename:join([PrivDir, EndUser, "cacerts.pem"])}],
+ ClientOpts = ?config(crl_cache_opts, Config) ++
+ [{cacertfile, filename:join([PrivDir, CA, "cacerts.pem"])},
+ {crl_check, Check},
+ {verify, verify_peer}],
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ %% First make a CRL that expired yesterday.
+ make_certs:gencrl(PrivDir, CA, CertsConfig, -24),
+ CrlDir = filename:join(PrivDir, "crls"),
+ populate_crl_hash_dir(PrivDir, CrlDir,
+ [{CA, "1627b4b0"}],
+ replace),
+
+ %% Since the CRL has expired, it's treated as missing, and the
+ %% outcome depends on the crl_check setting.
+ case Check of
+ true ->
+ %% The error "revocation status undetermined" gets turned
+ %% into "bad certificate".
+ crl_verify_error(Hostname, ServerNode, ServerOpts, ClientNode, ClientOpts,
+ "bad certificate");
+ peer ->
+ crl_verify_error(Hostname, ServerNode, ServerOpts, ClientNode, ClientOpts,
+ "bad certificate");
+ best_effort ->
+ %% In "best effort" mode, we consider the certificate not
+ %% to be revoked if we can't find the appropriate CRL.
+ crl_verify_valid(Hostname, ServerNode, ServerOpts, ClientNode, ClientOpts)
+ end,
+
+ %% Now make a CRL that expires tomorrow.
+ make_certs:gencrl(PrivDir, CA, CertsConfig, 24),
+ CrlDir = filename:join(PrivDir, "crls"),
+ populate_crl_hash_dir(PrivDir, CrlDir,
+ [{CA, "1627b4b0"}],
+ add),
+
+ %% With a valid CRL, verification should always pass.
+ crl_verify_valid(Hostname, ServerNode, ServerOpts, ClientNode, ClientOpts),
+
+ ok.
+
crl_verify_valid(Hostname, ServerNode, ServerOpts, ClientNode, ClientOpts) ->
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
@@ -297,7 +450,7 @@ is_idp(_) ->
init_certs(_,v1_crl, Config) ->
{[{v2_crls, false}], Config};
init_certs(_, idp_crl, Config) ->
- Port = ?config(httpd_port, Config),
+ Port = proplists:get_value(httpd_port, Config),
{[{crl_port,Port},
{issuing_distribution_point, true}], Config
};
@@ -311,3 +464,31 @@ make_dir_path(PathComponents) ->
rename_crl(Filename) ->
file:rename(Filename, Filename ++ ".notfound").
+
+populate_crl_hash_dir(CertDir, CrlDir, CAsHashes, AddOrReplace) ->
+ ok = filelib:ensure_dir(filename:join(CrlDir, "crls")),
+ case AddOrReplace of
+ replace ->
+ %% Delete existing files, so we can override them.
+ [ok = file:delete(FileToDelete) ||
+ {_CA, Hash} <- CAsHashes,
+ FileToDelete <- filelib:wildcard(
+ filename:join(CrlDir, Hash ++ ".r*"))];
+ add ->
+ ok
+ end,
+ %% Create new files, incrementing suffix if needed to find unique names.
+ [{ok, _} =
+ file:copy(filename:join([CertDir, CA, "crl.pem"]),
+ find_free_name(CrlDir, Hash, 0))
+ || {CA, Hash} <- CAsHashes],
+ ok.
+
+find_free_name(CrlDir, Hash, N) ->
+ Name = filename:join(CrlDir, Hash ++ ".r" ++ integer_to_list(N)),
+ case filelib:is_file(Name) of
+ true ->
+ find_free_name(CrlDir, Hash, N + 1);
+ false ->
+ Name
+ end.
diff --git a/lib/ssl/test/ssl_dist_SUITE.erl b/lib/ssl/test/ssl_dist_SUITE.erl
index e7cbfa63f4..8740e8c8f0 100644
--- a/lib/ssl/test/ssl_dist_SUITE.erl
+++ b/lib/ssl/test/ssl_dist_SUITE.erl
@@ -21,6 +21,7 @@
-module(ssl_dist_SUITE).
-include_lib("common_test/include/ct.hrl").
+-include_lib("public_key/include/public_key.hrl").
%% Note: This directive should only be used in test suites.
-compile(export_all).
@@ -41,7 +42,9 @@
%%--------------------------------------------------------------------
all() ->
[basic, payload, plain_options, plain_verify_options, nodelay_option,
- listen_port_options, listen_options, connect_options, use_interface].
+ listen_port_options, listen_options, connect_options, use_interface,
+ verify_fun_fail, verify_fun_pass, crl_check_pass, crl_check_fail,
+ crl_check_best_effort, crl_cache_check_pass, crl_cache_check_fail].
groups() ->
[].
@@ -106,11 +109,11 @@ common_end(_, _Config) ->
basic() ->
[{doc,"Test that two nodes can connect via ssl distribution"}].
basic(Config) when is_list(Config) ->
- NH1 = start_ssl_node(Config),
+ gen_dist_test(basic_test, Config).
+
+basic_test(NH1, NH2, _) ->
Node1 = NH1#node_handle.nodename,
- NH2 = start_ssl_node(Config),
Node2 = NH2#node_handle.nodename,
-
pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
[Node2] = apply_on_ssl_node(NH1, fun () -> nodes() end),
@@ -158,18 +161,16 @@ basic(Config) when is_list(Config) ->
ok
end
end)
- end,
- stop_ssl_node(NH1),
- stop_ssl_node(NH2),
- success(Config).
+ end.
%%--------------------------------------------------------------------
payload() ->
[{doc,"Test that send a lot of data between the ssl distributed noes"}].
payload(Config) when is_list(Config) ->
- NH1 = start_ssl_node(Config),
+ gen_dist_test(payload_test, Config).
+
+payload_test(NH1, NH2, _) ->
Node1 = NH1#node_handle.nodename,
- NH2 = start_ssl_node(Config),
Node2 = NH2#node_handle.nodename,
pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
@@ -201,10 +202,8 @@ payload(Config) when is_list(Config) ->
ok
end
end)
- end,
- stop_ssl_node(NH1),
- stop_ssl_node(NH2),
- success(Config).
+ end.
+
%%--------------------------------------------------------------------
plain_options() ->
[{doc,"Test specifying additional options"}].
@@ -215,20 +214,17 @@ plain_options(Config) when is_list(Config) ->
"client_verify verify_none server_verify verify_none "
"server_depth 1 client_depth 1 "
"server_hibernate_after 500 client_hibernate_after 500",
+ gen_dist_test(plain_options_test, [{additional_dist_opts, DistOpts} | Config]).
- NH1 = start_ssl_node([{additional_dist_opts, DistOpts} | Config]),
+plain_options_test(NH1, NH2, _) ->
Node1 = NH1#node_handle.nodename,
- NH2 = start_ssl_node([{additional_dist_opts, DistOpts} | Config]),
Node2 = NH2#node_handle.nodename,
pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
[Node2] = apply_on_ssl_node(NH1, fun () -> nodes() end),
- [Node1] = apply_on_ssl_node(NH2, fun () -> nodes() end),
+ [Node1] = apply_on_ssl_node(NH2, fun () -> nodes() end).
- stop_ssl_node(NH1),
- stop_ssl_node(NH2),
- success(Config).
%%--------------------------------------------------------------------
plain_verify_options() ->
[{doc,"Test specifying additional options"}].
@@ -237,20 +233,18 @@ plain_verify_options(Config) when is_list(Config) ->
"client_secure_renegotiate true "
"server_reuse_sessions true client_reuse_sessions true "
"server_hibernate_after 500 client_hibernate_after 500",
+ gen_dist_test(plain_verify_options_test, [{additional_dist_opts, DistOpts} | Config]).
- NH1 = start_ssl_node([{additional_dist_opts, DistOpts} | Config]),
+plain_verify_options_test(NH1, NH2, _) ->
Node1 = NH1#node_handle.nodename,
- NH2 = start_ssl_node([{additional_dist_opts, DistOpts} | Config]),
Node2 = NH2#node_handle.nodename,
-
+
pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
-
+
[Node2] = apply_on_ssl_node(NH1, fun () -> nodes() end),
- [Node1] = apply_on_ssl_node(NH2, fun () -> nodes() end),
+ [Node1] = apply_on_ssl_node(NH2, fun () -> nodes() end).
+
- stop_ssl_node(NH1),
- stop_ssl_node(NH2),
- success(Config).
%%--------------------------------------------------------------------
nodelay_option() ->
[{doc,"Test specifying dist_nodelay option"}].
@@ -262,6 +256,7 @@ nodelay_option(Config) ->
after
application:unset_env(kernel, dist_nodelay)
end.
+%%--------------------------------------------------------------------
listen_port_options() ->
[{doc, "Test specifying listening ports"}].
@@ -282,32 +277,39 @@ listen_port_options(Config) when is_list(Config) ->
#node_handle{} ->
%% If the node was able to start, it didn't take the port
%% option into account.
+ stop_ssl_node(NH1),
exit(unexpected_success)
catch
exit:{accept_failed, timeout} ->
%% The node failed to start, as expected.
ok
end,
-
+
%% Try again, now specifying a high max port.
PortOpt2 = "-kernel inet_dist_listen_min " ++ integer_to_list(Port1) ++
- " inet_dist_listen_max 65535",
+ " inet_dist_listen_max 65535",
NH2 = start_ssl_node([{additional_dist_opts, PortOpt2} | Config]),
- Node2 = NH2#node_handle.nodename,
- Name2 = lists:takewhile(fun(C) -> C =/= $@ end, atom_to_list(Node2)),
- {ok, NodesPorts2} = apply_on_ssl_node(NH2, fun net_adm:names/0),
- {Name2, Port2} = lists:keyfind(Name2, 1, NodesPorts2),
-
- %% The new port should be higher:
- if Port2 > Port1 ->
- ok;
- true ->
- error({port, Port2, not_higher_than, Port1})
+
+ try
+ Node2 = NH2#node_handle.nodename,
+ Name2 = lists:takewhile(fun(C) -> C =/= $@ end, atom_to_list(Node2)),
+ {ok, NodesPorts2} = apply_on_ssl_node(NH2, fun net_adm:names/0),
+ {Name2, Port2} = lists:keyfind(Name2, 1, NodesPorts2),
+
+ %% The new port should be higher:
+ if Port2 > Port1 ->
+ ok;
+ true ->
+ error({port, Port2, not_higher_than, Port1})
+ end
+ catch
+ _:Reason ->
+ stop_ssl_node(NH2),
+ ct:fail(Reason)
end,
-
- stop_ssl_node(NH1),
stop_ssl_node(NH2),
success(Config).
+
%%--------------------------------------------------------------------
listen_options() ->
[{doc, "Test inet_dist_listen_options"}].
@@ -326,28 +328,25 @@ do_listen_options(Prio, Config) ->
end,
Options = "-kernel inet_dist_listen_options " ++ PriorityString,
-
- NH1 = start_ssl_node([{additional_dist_opts, Options} | Config]),
- NH2 = start_ssl_node([{additional_dist_opts, Options} | Config]),
- Node2 = NH2#node_handle.nodename,
-
+ gen_dist_test(listen_options_test, [{prio, Prio}, {additional_dist_opts, Options} | Config]).
+
+listen_options_test(NH1, NH2, Config) ->
+ Prio = proplists:get_value(prio, Config),
+ Node2 = NH2#node_handle.nodename,
pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
PrioritiesNode1 =
apply_on_ssl_node(NH1, fun get_socket_priorities/0),
PrioritiesNode2 =
apply_on_ssl_node(NH2, fun get_socket_priorities/0),
-
+
Elevated1 = [P || P <- PrioritiesNode1, P =:= Prio],
- ?t:format("Elevated1: ~p~n", [Elevated1]),
+ ct:pal("Elevated1: ~p~n", [Elevated1]),
Elevated2 = [P || P <- PrioritiesNode2, P =:= Prio],
- ?t:format("Elevated2: ~p~n", [Elevated2]),
+ ct:pal("Elevated2: ~p~n", [Elevated2]),
[_|_] = Elevated1,
- [_|_] = Elevated2,
+ [_|_] = Elevated2.
- stop_ssl_node(NH1),
- stop_ssl_node(NH2),
- success(Config).
%%--------------------------------------------------------------------
connect_options() ->
[{doc, "Test inet_dist_connect_options"}].
@@ -366,9 +365,11 @@ do_connect_options(Prio, Config) ->
end,
Options = "-kernel inet_dist_connect_options " ++ PriorityString,
+ gen_dist_test(connect_options_test,
+ [{prio, Prio}, {additional_dist_opts, Options} | Config]).
- NH1 = start_ssl_node([{additional_dist_opts, Options} | Config]),
- NH2 = start_ssl_node([{additional_dist_opts, Options} | Config]),
+connect_options_test(NH1, NH2, Config) ->
+ Prio = proplists:get_value(prio, Config),
Node2 = NH2#node_handle.nodename,
pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
@@ -379,17 +380,14 @@ do_connect_options(Prio, Config) ->
apply_on_ssl_node(NH2, fun get_socket_priorities/0),
Elevated1 = [P || P <- PrioritiesNode1, P =:= Prio],
- ?t:format("Elevated1: ~p~n", [Elevated1]),
+ ct:pal("Elevated1: ~p~n", [Elevated1]),
Elevated2 = [P || P <- PrioritiesNode2, P =:= Prio],
- ?t:format("Elevated2: ~p~n", [Elevated2]),
+ ct:pal("Elevated2: ~p~n", [Elevated2]),
%% Node 1 will have a socket with elevated priority.
[_|_] = Elevated1,
%% Node 2 will not, since it only applies to outbound connections.
- [] = Elevated2,
+ [] = Elevated2.
- stop_ssl_node(NH1),
- stop_ssl_node(NH2),
- success(Config).
%%--------------------------------------------------------------------
use_interface() ->
[{doc, "Test inet_dist_use_interface"}].
@@ -400,28 +398,220 @@ use_interface(Config) when is_list(Config) ->
%% Start a node, and get the port number it's listening on.
NH1 = start_ssl_node([{additional_dist_opts, Options} | Config]),
- Node1 = NH1#node_handle.nodename,
- Name = lists:takewhile(fun(C) -> C =/= $@ end, atom_to_list(Node1)),
- {ok, NodesPorts} = apply_on_ssl_node(NH1, fun net_adm:names/0),
- {Name, Port} = lists:keyfind(Name, 1, NodesPorts),
-
- %% Now find the socket listening on that port, and check its sockname.
- Sockets = apply_on_ssl_node(
- NH1,
- fun() ->
- [inet:sockname(P) ||
- P <- erlang:ports(),
- {ok, Port} =:= (catch inet:port(P))]
- end),
- %% And check that it's actually listening on localhost.
- [{ok,{{127,0,0,1},Port}}] = Sockets,
-
+
+ try
+ Node1 = NH1#node_handle.nodename,
+ Name = lists:takewhile(fun(C) -> C =/= $@ end, atom_to_list(Node1)),
+ {ok, NodesPorts} = apply_on_ssl_node(NH1, fun net_adm:names/0),
+ {Name, Port} = lists:keyfind(Name, 1, NodesPorts),
+
+ %% Now find the socket listening on that port, and check its sockname.
+ Sockets = apply_on_ssl_node(
+ NH1,
+ fun() ->
+ [inet:sockname(P) ||
+ P <- inet_ports(),
+ {ok, Port} =:= (catch inet:port(P))]
+ end),
+ %% And check that it's actually listening on localhost.
+ [{ok,{{127,0,0,1},Port}}] = Sockets
+ catch
+ _:Reason ->
+ stop_ssl_node(NH1),
+ ct:fail(Reason)
+ end,
stop_ssl_node(NH1),
success(Config).
+%%--------------------------------------------------------------------
+verify_fun_fail() ->
+ [{doc,"Test specifying verify_fun with a function that always fails"}].
+verify_fun_fail(Config) when is_list(Config) ->
+ DistOpts = "-ssl_dist_opt "
+ "server_verify verify_peer server_verify_fun "
+ "\"{ssl_dist_SUITE,verify_fail_always,{}}\" "
+ "client_verify verify_peer client_verify_fun "
+ "\"{ssl_dist_SUITE,verify_fail_always,{}}\" ",
+ gen_dist_test(verify_fun_fail_test, [{additional_dist_opts, DistOpts} | Config]).
+
+verify_fun_fail_test(NH1, NH2, _) ->
+ Node2 = NH2#node_handle.nodename,
+
+ pang = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
+
+ [] = apply_on_ssl_node(NH1, fun () -> nodes() end),
+ [] = apply_on_ssl_node(NH2, fun () -> nodes() end),
+
+ %% Check that the function ran on the client node.
+ [{verify_fail_always_ran, true}] =
+ apply_on_ssl_node(NH1, fun () -> ets:tab2list(verify_fun_ran) end),
+ %% On the server node, it wouldn't run, because the server didn't
+ %% request a certificate from the client.
+ undefined =
+ apply_on_ssl_node(NH2, fun () -> ets:info(verify_fun_ran) end).
+
+
%%--------------------------------------------------------------------
+verify_fun_pass() ->
+ [{doc,"Test specifying verify_fun with a function that always succeeds"}].
+verify_fun_pass(Config) when is_list(Config) ->
+ DistOpts = "-ssl_dist_opt "
+ "server_verify verify_peer server_verify_fun "
+ "\"{ssl_dist_SUITE,verify_pass_always,{}}\" "
+ "server_fail_if_no_peer_cert true "
+ "client_verify verify_peer client_verify_fun "
+ "\"{ssl_dist_SUITE,verify_pass_always,{}}\" ",
+ gen_dist_test(verify_fun_pass_test, [{additional_dist_opts, DistOpts} | Config]).
+
+verify_fun_pass_test(NH1, NH2, _) ->
+ Node1 = NH1#node_handle.nodename,
+ Node2 = NH2#node_handle.nodename,
+
+ pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
+
+ [Node2] = apply_on_ssl_node(NH1, fun () -> nodes() end),
+ [Node1] = apply_on_ssl_node(NH2, fun () -> nodes() end),
+
+ %% Check that the function ran on the client node.
+ [{verify_pass_always_ran, true}] =
+ apply_on_ssl_node(NH1, fun () -> ets:tab2list(verify_fun_ran) end),
+ %% Check that it ran on the server node as well. The server
+ %% requested and verified the client's certificate because we
+ %% passed fail_if_no_peer_cert.
+ [{verify_pass_always_ran, true}] =
+ apply_on_ssl_node(NH2, fun () -> ets:tab2list(verify_fun_ran) end).
+
+%%--------------------------------------------------------------------
+crl_check_pass() ->
+ [{doc,"Test crl_check with non-revoked certificate"}].
+crl_check_pass(Config) when is_list(Config) ->
+ DistOpts = "-ssl_dist_opt client_crl_check true",
+ NewConfig =
+ [{many_verify_opts, true}, {additional_dist_opts, DistOpts}] ++ Config,
+ gen_dist_test(crl_check_pass_test, NewConfig).
+
+crl_check_pass_test(NH1, NH2, Config) ->
+ Node1 = NH1#node_handle.nodename,
+ Node2 = NH2#node_handle.nodename,
+
+ PrivDir = ?config(priv_dir, Config),
+ cache_crls_on_ssl_nodes(PrivDir, ["erlangCA", "otpCA"], [NH1, NH2]),
+
+ %% The server's certificate is not revoked, so connection succeeds.
+ pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
+
+ [Node2] = apply_on_ssl_node(NH1, fun () -> nodes() end),
+ [Node1] = apply_on_ssl_node(NH2, fun () -> nodes() end).
+
+%%--------------------------------------------------------------------
+crl_check_fail() ->
+ [{doc,"Test crl_check with revoked certificate"}].
+crl_check_fail(Config) when is_list(Config) ->
+ DistOpts = "-ssl_dist_opt client_crl_check true",
+ NewConfig =
+ [{many_verify_opts, true},
+ %% The server uses a revoked certificate.
+ {server_cert_dir, "revoked"},
+ {additional_dist_opts, DistOpts}] ++ Config,
+ gen_dist_test(crl_check_fail_test, NewConfig).
+
+crl_check_fail_test(NH1, NH2, Config) ->
+ Node2 = NH2#node_handle.nodename,
+
+ PrivDir = ?config(priv_dir, Config),
+ cache_crls_on_ssl_nodes(PrivDir, ["erlangCA", "otpCA"], [NH1, NH2]),
+
+ %% The server's certificate is revoked, so connection fails.
+ pang = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
+
+ [] = apply_on_ssl_node(NH1, fun () -> nodes() end),
+ [] = apply_on_ssl_node(NH2, fun () -> nodes() end).
+
+%%--------------------------------------------------------------------
+crl_check_best_effort() ->
+ [{doc,"Test specifying crl_check as best_effort"}].
+crl_check_best_effort(Config) when is_list(Config) ->
+ DistOpts = "-ssl_dist_opt "
+ "server_verify verify_peer server_crl_check best_effort",
+ NewConfig =
+ [{many_verify_opts, true}, {additional_dist_opts, DistOpts}] ++ Config,
+ gen_dist_test(crl_check_best_effort_test, NewConfig).
+
+crl_check_best_effort_test(NH1, NH2, _Config) ->
+ %% We don't have the correct CRL at hand, but since crl_check is
+ %% best_effort, we accept it anyway.
+ Node1 = NH1#node_handle.nodename,
+ Node2 = NH2#node_handle.nodename,
+
+ pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
+
+ [Node2] = apply_on_ssl_node(NH1, fun () -> nodes() end),
+ [Node1] = apply_on_ssl_node(NH2, fun () -> nodes() end).
+
+%%--------------------------------------------------------------------
+crl_cache_check_pass() ->
+ [{doc,"Test specifying crl_check with custom crl_cache module"}].
+crl_cache_check_pass(Config) when is_list(Config) ->
+ PrivDir = ?config(priv_dir, Config),
+ NodeDir = filename:join([PrivDir, "Certs"]),
+ DistOpts = "-ssl_dist_opt "
+ "client_crl_check true "
+ "client_crl_cache "
+ "\"{ssl_dist_SUITE,{\\\"" ++ NodeDir ++ "\\\",[]}}\"",
+ NewConfig =
+ [{many_verify_opts, true}, {additional_dist_opts, DistOpts}] ++ Config,
+ gen_dist_test(crl_cache_check_pass_test, NewConfig).
+
+crl_cache_check_pass_test(NH1, NH2, _) ->
+ Node1 = NH1#node_handle.nodename,
+ Node2 = NH2#node_handle.nodename,
+
+ pong = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
+
+ [Node2] = apply_on_ssl_node(NH1, fun () -> nodes() end),
+ [Node1] = apply_on_ssl_node(NH2, fun () -> nodes() end).
+
+%%--------------------------------------------------------------------
+crl_cache_check_fail() ->
+ [{doc,"Test custom crl_cache module with revoked certificate"}].
+crl_cache_check_fail(Config) when is_list(Config) ->
+ PrivDir = ?config(priv_dir, Config),
+ NodeDir = filename:join([PrivDir, "Certs"]),
+ DistOpts = "-ssl_dist_opt "
+ "client_crl_check true "
+ "client_crl_cache "
+ "\"{ssl_dist_SUITE,{\\\"" ++ NodeDir ++ "\\\",[]}}\"",
+ NewConfig =
+ [{many_verify_opts, true},
+ %% The server uses a revoked certificate.
+ {server_cert_dir, "revoked"},
+ {additional_dist_opts, DistOpts}] ++ Config,
+
+ gen_dist_test(crl_cache_check_fail_test, NewConfig).
+
+crl_cache_check_fail_test(NH1, NH2, _) ->
+ Node2 = NH2#node_handle.nodename,
+ pang = apply_on_ssl_node(NH1, fun () -> net_adm:ping(Node2) end),
+
+ [] = apply_on_ssl_node(NH1, fun () -> nodes() end),
+ [] = apply_on_ssl_node(NH2, fun () -> nodes() end).
+%%--------------------------------------------------------------------
%%% Internal functions -----------------------------------------------
%%--------------------------------------------------------------------
+gen_dist_test(Test, Config) ->
+ NH1 = start_ssl_node(Config),
+ NH2 = start_ssl_node(Config),
+ try
+ ?MODULE:Test(NH1, NH2, Config)
+ catch
+ _:Reason ->
+ stop_ssl_node(NH1),
+ stop_ssl_node(NH2),
+ ct:fail(Reason)
+ end,
+ stop_ssl_node(NH1),
+ stop_ssl_node(NH2),
+ success(Config).
%% ssl_node side api
%%
@@ -453,9 +643,11 @@ try_setting_priority(TestFun, Config) ->
get_socket_priorities() ->
[Priority ||
{ok,[{priority,Priority}]} <-
- [inet:getopts(Port, [priority]) ||
- Port <- erlang:ports(),
- element(2, erlang:port_info(Port, name)) =:= "tcp_inet"]].
+ [inet:getopts(Port, [priority]) || Port <- inet_ports()]].
+
+inet_ports() ->
+ [Port || Port <- erlang:ports(),
+ element(2, erlang:port_info(Port, name)) =:= "tcp_inet"].
%%
%% test_server side api
@@ -488,13 +680,15 @@ stop_ssl_node(#node_handle{connection_handler = Handler,
receive
{'DOWN', Mon, process, Handler, Reason} ->
case Reason of
- normal -> ok;
- _ -> exit(Reason)
+ normal ->
+ ok;
+ _ ->
+ ct:pal("Down ~p ~n", [Reason])
end
end;
Error ->
erlang:demonitor(Mon, [flush]),
- exit(Error)
+ ct:pal("Warning ~p ~n", [Error])
end.
start_ssl_node(Config) ->
@@ -502,7 +696,7 @@ start_ssl_node(Config) ->
start_ssl_node(Config, XArgs) ->
Name = mk_node_name(Config),
- SSL = ?config(ssl_opts, Config),
+ SSL = proplists:get_value(ssl_opts, Config),
SSLDistOpts = setup_dist_opts(Config),
start_ssl_node_raw(Name, SSL ++ " " ++ SSLDistOpts ++ XArgs).
@@ -528,6 +722,19 @@ start_ssl_node_raw(Name, Args) ->
exit({failed_to_start_node, Name, Error})
end.
+cache_crls_on_ssl_nodes(PrivDir, CANames, NHs) ->
+ [begin
+ File = filename:join([PrivDir, "Certs", CAName, "crl.pem"]),
+ {ok, PemBin} = file:read_file(File),
+ PemEntries = public_key:pem_decode(PemBin),
+ CRLs = [ CRL || {'CertificateList', CRL, not_encrypted}
+ <- PemEntries],
+ ok = apply_on_ssl_node(NH, ssl_manager, insert_crls,
+ ["no_distribution_point", CRLs, dist])
+ end
+ || NH <- NHs, CAName <- CANames],
+ ok.
+
%%
%% command line creation
%%
@@ -539,7 +746,7 @@ host_name() ->
mk_node_name(Config) ->
N = erlang:unique_integer([positive]),
- Case = ?config(testcase, Config),
+ Case = proplists:get_value(testcase, Config),
atom_to_list(?MODULE)
++ "_"
++ atom_to_list(Case)
@@ -563,11 +770,13 @@ mk_node_cmdline(ListenPort, Name, Args) ->
++ NameSw ++ " " ++ Name ++ " "
++ "-pa " ++ Pa ++ " "
++ "-run application start crypto -run application start public_key "
+ ++ "-eval 'net_kernel:verbose(1)' "
++ "-run " ++ atom_to_list(?MODULE) ++ " cnct2tstsrvr "
++ host_name() ++ " "
++ integer_to_list(ListenPort) ++ " "
++ Args ++ " "
++ "-env ERL_CRASH_DUMP " ++ Pwd ++ "/erl_crash_dump." ++ Name ++ " "
+ ++ "-kernel error_logger \"{file,\\\"" ++ Pwd ++ "/error_log." ++ Name ++ "\\\"}\" "
++ "-setcookie " ++ atom_to_list(erlang:get_cookie()).
%%
@@ -792,7 +1001,7 @@ do_append_files([F|Fs], RF) ->
do_append_files(Fs, RF).
setup_certs(Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
NodeDir = filename:join([PrivDir, "Certs"]),
RGenDir = filename:join([NodeDir, "rand_gen"]),
ok = file:make_dir(NodeDir),
@@ -811,12 +1020,12 @@ setup_certs(Config) ->
append_files([CK, CC], CKC).
setup_dist_opts(Config) ->
- PrivDir = ?config(priv_dir, Config),
- DataDir = ?config(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
Dhfile = filename:join([DataDir, "dHParam.pem"]),
NodeDir = filename:join([PrivDir, "Certs"]),
- SDir = filename:join([NodeDir, "server"]),
- CDir = filename:join([NodeDir, "client"]),
+ SDir = filename:join([NodeDir, proplists:get_value(server_cert_dir, Config, "server")]),
+ CDir = filename:join([NodeDir, proplists:get_value(client_cert_dir, Config, "client")]),
SC = filename:join([SDir, "cert.pem"]),
SK = filename:join([SDir, "key.pem"]),
SKC = filename:join([SDir, "keycert.pem"]),
@@ -874,7 +1083,7 @@ add_ssl_opts_config(Config) ->
%% just point out ssl ebin with -pa.
%%
try
- Dir = ?config(priv_dir, Config),
+ Dir = proplists:get_value(priv_dir, Config),
LibDir = code:lib_dir(),
Apps = application:which_applications(),
{value, {stdlib, _, STDL_VSN}} = lists:keysearch(stdlib, 1, Apps),
@@ -957,3 +1166,53 @@ vsn(App) ->
after
application:stop(ssl)
end.
+
+verify_fail_always(_Certificate, _Event, _State) ->
+ %% Create an ETS table, to record the fact that the verify function ran.
+ %% Spawn a new process, to avoid the ETS table disappearing.
+ Parent = self(),
+ spawn(
+ fun() ->
+ ets:new(verify_fun_ran, [public, named_table]),
+ ets:insert(verify_fun_ran, {verify_fail_always_ran, true}),
+ Parent ! go_ahead,
+ timer:sleep(infinity)
+ end),
+ receive go_ahead -> ok end,
+ {fail, bad_certificate}.
+
+verify_pass_always(_Certificate, _Event, State) ->
+ %% Create an ETS table, to record the fact that the verify function ran.
+ %% Spawn a new process, to avoid the ETS table disappearing.
+ Parent = self(),
+ spawn(
+ fun() ->
+ ets:new(verify_fun_ran, [public, named_table]),
+ ets:insert(verify_fun_ran, {verify_pass_always_ran, true}),
+ Parent ! go_ahead,
+ timer:sleep(infinity)
+ end),
+ receive go_ahead -> ok end,
+ {valid, State}.
+
+%% ssl_crl_cache_api callbacks
+lookup(_DistributionPoint, _DbHandle) ->
+ not_available.
+
+select({rdnSequence, NameParts}, {NodeDir, _}) ->
+ %% Extract the CN from the issuer name...
+ [CN] = [CN ||
+ [#'AttributeTypeAndValue'{
+ type = ?'id-at-commonName',
+ value = <<_, _, CN/binary>>}] <- NameParts],
+ %% ...and use that as the directory name to find the CRL.
+ error_logger:info_report([{found_cn, CN}]),
+ CRLFile = filename:join([NodeDir, CN, "crl.pem"]),
+ {ok, PemBin} = file:read_file(CRLFile),
+ PemEntries = public_key:pem_decode(PemBin),
+ CRLs = [ CRL || {'CertificateList', CRL, not_encrypted}
+ <- PemEntries],
+ CRLs.
+
+fresh_crl(_DistributionPoint, CRL) ->
+ CRL.
diff --git a/lib/ssl/test/ssl_handshake_SUITE.erl b/lib/ssl/test/ssl_handshake_SUITE.erl
index d050812208..51f0651568 100644
--- a/lib/ssl/test/ssl_handshake_SUITE.erl
+++ b/lib/ssl/test/ssl_handshake_SUITE.erl
@@ -60,10 +60,10 @@ init_per_testcase(ignore_hassign_extension_pre_tls_1_2, Config0) ->
ok ->
case is_supported(sha512) of
true ->
- ssl:start(),
+ ssl_test_lib:clean_start(),
%% make rsa certs using oppenssl
- {ok, _} = make_certs:all(?config(data_dir, Config0),
- ?config(priv_dir, Config0)),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config0),
+ proplists:get_value(priv_dir, Config0)),
Config = ssl_test_lib:cert_options(Config0),
ct:timetrap({seconds, 5}),
Config;
@@ -99,7 +99,8 @@ decode_hello_handshake(_Config) ->
16#70, 16#64, 16#79, 16#2f, 16#32>>,
Version = {3, 0},
- {Records, _Buffer} = tls_handshake:get_tls_handshake(Version, HelloPacket, <<>>),
+ {Records, _Buffer} = tls_handshake:get_tls_handshake(Version, HelloPacket, <<>>,
+ #ssl_options{v2_hello_compatible = false}),
{Hello, _Data} = hd(Records),
#renegotiation_info{renegotiated_connection = <<0>>}
@@ -162,7 +163,7 @@ select_proper_tls_1_2_rsa_default_hashsign(_Config) ->
ignore_hassign_extension_pre_tls_1_2(Config) ->
- Opts = ?config(server_opts, Config),
+ Opts = proplists:get_value(server_opts, Config),
CertFile = proplists:get_value(certfile, Opts),
[{_, Cert, _}] = ssl_test_lib:pem_to_der(CertFile),
HashSigns = #hash_sign_algos{hash_sign_algos = [{sha512, rsa}, {sha, dsa}]},
diff --git a/lib/ssl/test/ssl_npn_handshake_SUITE.erl b/lib/ssl/test/ssl_npn_handshake_SUITE.erl
index cebbc3c16b..a02881f1ae 100644
--- a/lib/ssl/test/ssl_npn_handshake_SUITE.erl
+++ b/lib/ssl/test/ssl_npn_handshake_SUITE.erl
@@ -68,9 +68,9 @@ init_per_suite(Config) ->
catch crypto:stop(),
try crypto:start() of
ok ->
- ssl:start(),
- {ok, _} = make_certs:all(?config(data_dir, Config),
- ?config(priv_dir, Config)),
+ ssl_test_lib:clean_start(),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config),
+ proplists:get_value(priv_dir, Config)),
ssl_test_lib:cert_options(Config)
catch _:_ ->
{skip, "Crypto did not start"}
@@ -86,8 +86,7 @@ init_per_group(GroupName, Config) ->
true ->
case ssl_test_lib:sufficient_crypto_support(GroupName) of
true ->
- ssl_test_lib:init_tls_version(GroupName),
- Config;
+ ssl_test_lib:init_tls_version(GroupName, Config);
false ->
{skip, "Missing crypto support"}
end;
@@ -100,7 +99,7 @@ end_per_group(_GroupName, Config) ->
Config.
init_per_testcase(_TestCase, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:log("Ciphers: ~p~n ", [ ssl:cipher_suites()]),
ct:timetrap({seconds, 10}),
Config.
@@ -192,10 +191,10 @@ client_negotiate_server_does_not_support(Config) when is_list(Config) ->
renegotiate_from_client_after_npn_handshake(Config) when is_list(Config) ->
Data = "hello world",
- ClientOpts0 = ?config(client_opts, Config),
+ ClientOpts0 = ssl_test_lib:ssl_options(client_opts, Config),
ClientOpts = [{client_preferred_next_protocols,
{client, [<<"http/1.0">>], <<"http/1.1">>}}] ++ ClientOpts0,
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = ssl_test_lib:ssl_options(server_opts, Config),
ServerOpts = [{next_protocols_advertised,
[<<"spdy/2">>, <<"http/1.1">>, <<"http/1.0">>]}] ++ ServerOpts0,
ExpectedProtocol = {ok, <<"http/1.0">>},
@@ -217,7 +216,7 @@ renegotiate_from_client_after_npn_handshake(Config) when is_list(Config) ->
%--------------------------------------------------------------------------------
npn_not_supported_client(Config) when is_list(Config) ->
- ClientOpts0 = ?config(client_opts, Config),
+ ClientOpts0 = ssl_test_lib:ssl_options(client_opts, Config),
PrefProtocols = {client_preferred_next_protocols,
{client, [<<"http/1.0">>], <<"http/1.1">>}},
ClientOpts = [PrefProtocols] ++ ClientOpts0,
@@ -232,7 +231,7 @@ npn_not_supported_client(Config) when is_list(Config) ->
%--------------------------------------------------------------------------------
npn_not_supported_server(Config) when is_list(Config)->
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = ssl_test_lib:ssl_options(server_opts, Config),
AdvProtocols = {next_protocols_advertised, [<<"spdy/2">>, <<"http/1.1">>, <<"http/1.0">>]},
ServerOpts = [AdvProtocols] ++ ServerOpts0,
@@ -240,10 +239,10 @@ npn_not_supported_server(Config) when is_list(Config)->
%--------------------------------------------------------------------------------
npn_handshake_session_reused(Config) when is_list(Config)->
- ClientOpts0 = ?config(client_opts, Config),
+ ClientOpts0 = ssl_test_lib:ssl_options(client_opts, Config),
ClientOpts = [{client_preferred_next_protocols,
{client, [<<"http/1.0">>], <<"http/1.1">>}}] ++ ClientOpts0,
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = ssl_test_lib:ssl_options(server_opts, Config),
ServerOpts =[{next_protocols_advertised,
[<<"spdy/2">>, <<"http/1.1">>, <<"http/1.0">>]}] ++ ServerOpts0,
@@ -294,9 +293,9 @@ npn_handshake_session_reused(Config) when is_list(Config)->
run_npn_handshake(Config, ClientExtraOpts, ServerExtraOpts, ExpectedProtocol) ->
Data = "hello world",
- ClientOpts0 = ?config(client_opts, Config),
+ ClientOpts0 = ssl_test_lib:ssl_options(client_opts, Config),
ClientOpts = ClientExtraOpts ++ ClientOpts0,
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = ssl_test_lib:ssl_options(server_opts, Config),
ServerOpts = ServerExtraOpts ++ ServerOpts0,
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
diff --git a/lib/ssl/test/ssl_npn_hello_SUITE.erl b/lib/ssl/test/ssl_npn_hello_SUITE.erl
index b678187bc8..69aeea10c5 100644
--- a/lib/ssl/test/ssl_npn_hello_SUITE.erl
+++ b/lib/ssl/test/ssl_npn_hello_SUITE.erl
@@ -41,8 +41,17 @@ all() ->
create_server_hello_with_advertised_protocols_test,
create_server_hello_with_no_advertised_protocols_test].
+init_per_suite(Config) ->
+ catch crypto:stop(),
+ try crypto:start() of
+ ok ->
+ Config
+ catch _:_ ->
+ {skip, "Crypto did not start"}
+ end.
+
init_per_testcase(_TestCase, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:timetrap({seconds, 5}),
Config.
@@ -53,35 +62,35 @@ end_per_testcase(_TestCase, Config) ->
%% Test Cases --------------------------------------------------------
%%--------------------------------------------------------------------
-encode_and_decode_client_hello_test(_Config) ->
+encode_and_decode_client_hello_test(Config) ->
HandShakeData = create_client_handshake(undefined),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
{[{DecodedHandshakeMessage, _Raw}], _} =
- tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>),
+ tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>, #ssl_options{}),
NextProtocolNegotiation = (DecodedHandshakeMessage#client_hello.extensions)#hello_extensions.next_protocol_negotiation,
NextProtocolNegotiation = undefined.
%%--------------------------------------------------------------------
-encode_and_decode_npn_client_hello_test(_Config) ->
+encode_and_decode_npn_client_hello_test(Config) ->
HandShakeData = create_client_handshake(#next_protocol_negotiation{extension_data = <<>>}),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
{[{DecodedHandshakeMessage, _Raw}], _} =
- tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>),
+ tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>, #ssl_options{}),
NextProtocolNegotiation = (DecodedHandshakeMessage#client_hello.extensions)#hello_extensions.next_protocol_negotiation,
NextProtocolNegotiation = #next_protocol_negotiation{extension_data = <<>>}.
%%--------------------------------------------------------------------
-encode_and_decode_server_hello_test(_Config) ->
+encode_and_decode_server_hello_test(Config) ->
HandShakeData = create_server_handshake(undefined),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
{[{DecodedHandshakeMessage, _Raw}], _} =
- tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>),
+ tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>, #ssl_options{}),
NextProtocolNegotiation = (DecodedHandshakeMessage#server_hello.extensions)#hello_extensions.next_protocol_negotiation,
NextProtocolNegotiation = undefined.
%%--------------------------------------------------------------------
-encode_and_decode_npn_server_hello_test(_Config) ->
+encode_and_decode_npn_server_hello_test(Config) ->
HandShakeData = create_server_handshake(#next_protocol_negotiation{extension_data = <<6, "spdy/2">>}),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
{[{DecodedHandshakeMessage, _Raw}], _} =
- tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>),
+ tls_handshake:get_tls_handshake(Version, list_to_binary(HandShakeData), <<>>, #ssl_options{}),
NextProtocolNegotiation = (DecodedHandshakeMessage#server_hello.extensions)#hello_extensions.next_protocol_negotiation,
ct:log("~p ~n", [NextProtocolNegotiation]),
NextProtocolNegotiation = #next_protocol_negotiation{extension_data = <<6, "spdy/2">>}.
@@ -126,15 +135,12 @@ create_server_handshake(Npn) ->
}, Vsn).
create_connection_states() ->
- #connection_states{
- pending_read = #connection_state{
- security_parameters = #security_parameters{
+ #{pending_read => #{security_parameters => #security_parameters{
server_random = <<1:256>>,
compression_algorithm = 1,
cipher_suite = ?TLS_DHE_DSS_WITH_DES_CBC_SHA
}
- },
- current_read = #connection_state {
- secure_renegotiation = false
- }
- }.
+ },
+ current_read => #{secure_renegotiation => false
+ }
+ }.
diff --git a/lib/ssl/test/ssl_packet_SUITE.erl b/lib/ssl/test/ssl_packet_SUITE.erl
index e6655fa11b..900b6de9ca 100644
--- a/lib/ssl/test/ssl_packet_SUITE.erl
+++ b/lib/ssl/test/ssl_packet_SUITE.erl
@@ -41,6 +41,10 @@
-define(MANY, 1000).
-define(SOME, 50).
+-define(BASE_TIMEOUT_SECONDS, 30).
+-define(SOME_SCALE, 20).
+-define(MANY_SCALE, 20).
+
%%--------------------------------------------------------------------
%% Common Test interface functions -----------------------------------
%%--------------------------------------------------------------------
@@ -136,9 +140,9 @@ init_per_suite(Config) ->
catch crypto:stop(),
try crypto:start() of
ok ->
- ssl:start(),
- {ok, _} = make_certs:all(?config(data_dir, Config),
- ?config(priv_dir, Config)),
+ ssl_test_lib:clean_start(),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config),
+ proplists:get_value(priv_dir, Config)),
ssl_test_lib:cert_options(Config)
catch _:_ ->
{skip, "Crypto did not start"}
@@ -153,12 +157,12 @@ init_per_group(GroupName, Config) ->
true ->
case ssl_test_lib:sufficient_crypto_support(GroupName) of
true ->
- ssl_test_lib:init_tls_version(GroupName),
- Config;
+ ssl_test_lib:init_tls_version(GroupName, Config);
false ->
{skip, "Missing crypto support"}
end;
_ ->
+ ssl:stop(),
ssl:start(),
Config
end.
@@ -168,7 +172,7 @@ end_per_group(_GroupName, Config) ->
Config.
init_per_testcase(_TestCase, Config) ->
- ct:timetrap({seconds, 15}),
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS}),
Config.
@@ -183,6 +187,7 @@ packet_raw_passive_many_small() ->
[{doc,"Test packet option {packet, raw} in passive mode."}].
packet_raw_passive_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, raw}",
packet(Config, Data, send, passive_raw, ?MANY, raw, false).
@@ -192,6 +197,7 @@ packet_raw_passive_some_big() ->
[{doc,"Test packet option {packet, raw} in passive mode."}].
packet_raw_passive_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send, passive_raw, ?SOME, raw, false).
%%--------------------------------------------------------------------
@@ -199,6 +205,7 @@ packet_0_passive_many_small() ->
[{doc,"Test packet option {packet, 0} in passive mode."}].
packet_0_passive_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 0}, equivalent to packet raw.",
packet(Config, Data, send, passive_raw, ?MANY, 0, false).
@@ -207,6 +214,7 @@ packet_0_passive_some_big() ->
[{doc,"Test packet option {packet, 0} in passive mode."}].
packet_0_passive_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send, passive_raw, ?SOME, 0, false).
@@ -215,6 +223,7 @@ packet_1_passive_many_small() ->
[{doc,"Test packet option {packet, 1} in passive mode."}].
packet_1_passive_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 1}",
packet(Config, Data, send, passive_recv_packet, ?MANY, 1, false).
@@ -223,6 +232,7 @@ packet_1_passive_some_big() ->
[{doc,"Test packet option {packet, 1} in passive mode."}].
packet_1_passive_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(255, "1")),
packet(Config, Data, send, passive_recv_packet, ?SOME, 1, false).
@@ -231,6 +241,7 @@ packet_2_passive_many_small() ->
[{doc,"Test packet option {packet, 2} in passive mode"}].
packet_2_passive_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 2}",
packet(Config, Data, send, passive_recv_packet, ?MANY, 2, false).
@@ -239,6 +250,7 @@ packet_2_passive_some_big() ->
[{doc,"Test packet option {packet, 2} in passive mode"}].
packet_2_passive_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send, passive_recv_packet, ?SOME, 2, false).
@@ -247,6 +259,7 @@ packet_4_passive_many_small() ->
[{doc,"Test packet option {packet, 4} in passive mode"}].
packet_4_passive_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 4}",
packet(Config, Data, send, passive_recv_packet, ?MANY, 4, false).
@@ -255,6 +268,7 @@ packet_4_passive_some_big() ->
[{doc,"Test packet option {packet, 4} in passive mode"}].
packet_4_passive_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send, passive_recv_packet, ?SOME, 4, false).
@@ -271,6 +285,7 @@ packet_raw_active_once_some_big() ->
[{doc,"Test packet option {packet, raw} in active once mode."}].
packet_raw_active_once_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send_raw, active_once_raw, ?SOME, raw, once).
@@ -279,6 +294,7 @@ packet_0_active_once_many_small() ->
[{doc,"Test packet option {packet, 0} in active once mode."}].
packet_0_active_once_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 0}",
packet(Config, Data, send_raw, active_once_raw, ?MANY, 0, once).
@@ -287,6 +303,7 @@ packet_0_active_once_some_big() ->
[{doc,"Test packet option {packet, 0} in active once mode."}].
packet_0_active_once_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send_raw, active_once_raw, ?SOME, 0, once).
@@ -303,6 +320,7 @@ packet_1_active_once_some_big() ->
[{doc,"Test packet option {packet, 1} in active once mode."}].
packet_1_active_once_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(255, "1")),
packet(Config, Data, send, active_once_packet, ?SOME, 1, once).
@@ -312,6 +330,7 @@ packet_2_active_once_many_small() ->
[{doc,"Test packet option {packet, 2} in active once mode"}].
packet_2_active_once_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 2}",
packet(Config, Data, send, active_once_packet, ?MANY, 2, once).
@@ -320,6 +339,7 @@ packet_2_active_once_some_big() ->
[{doc,"Test packet option {packet, 2} in active once mode"}].
packet_2_active_once_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send, active_once_raw, ?SOME, 2, once).
@@ -329,6 +349,7 @@ packet_4_active_once_many_small() ->
packet_4_active_once_many_small(Config) when is_list(Config) ->
Data = "Packet option is {packet, 4}",
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
packet(Config, Data, send, active_once_packet, ?MANY, 4, once).
%%--------------------------------------------------------------------
@@ -336,6 +357,7 @@ packet_4_active_once_some_big() ->
[{doc,"Test packet option {packet, 4} in active once mode"}].
packet_4_active_once_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send, active_once_packet, ?SOME, 4, once).
@@ -344,6 +366,7 @@ packet_raw_active_many_small() ->
[{doc,"Test packet option {packet, raw} in active mode."}].
packet_raw_active_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, raw}",
packet(Config, Data, send_raw, active_raw, ?MANY, raw, true).
@@ -352,6 +375,7 @@ packet_raw_active_some_big() ->
[{doc,"Test packet option {packet, raw} in active mode."}].
packet_raw_active_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send_raw, active_raw, ?SOME, raw, true).
@@ -360,6 +384,7 @@ packet_0_active_many_small() ->
[{doc,"Test packet option {packet, 0} in active mode."}].
packet_0_active_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 0}",
packet(Config, Data, send_raw, active_raw, ?MANY, 0, true).
@@ -376,6 +401,7 @@ packet_1_active_many_small() ->
[{doc,"Test packet option {packet, 1} in active mode."}].
packet_1_active_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 1}",
packet(Config, Data, send, active_packet, ?MANY, 1, true).
@@ -384,6 +410,7 @@ packet_1_active_some_big() ->
[{doc,"Test packet option {packet, 1} in active mode."}].
packet_1_active_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(255, "1")),
packet(Config, Data, send, active_packet, ?SOME, 1, true).
@@ -392,6 +419,7 @@ packet_2_active_many_small() ->
[{doc,"Test packet option {packet, 2} in active mode"}].
packet_2_active_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 2}",
packet(Config, Data, send, active_packet, ?MANY, 2, true).
@@ -408,6 +436,7 @@ packet_4_active_many_small() ->
[{doc,"Test packet option {packet, 4} in active mode"}].
packet_4_active_many_small(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?MANY_SCALE}),
Data = "Packet option is {packet, 4}",
packet(Config, Data, send, active_packet, ?MANY, 4, true).
@@ -416,6 +445,7 @@ packet_4_active_some_big() ->
[{doc,"Test packet option {packet, 4} in active mode"}].
packet_4_active_some_big(Config) when is_list(Config) ->
+ ct:timetrap({seconds, ?BASE_TIMEOUT_SECONDS * ?SOME_SCALE}),
Data = lists:append(lists:duplicate(100, "1234567890")),
packet(Config, Data, send, active_packet, ?SOME, 4, true).
@@ -424,8 +454,8 @@ packet_send_to_large() ->
[{doc,"Test setting the packet option {packet, 2} on the send side"}].
packet_send_to_large(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = lists:append(lists:duplicate(30, "1234567890")),
@@ -452,8 +482,8 @@ packet_wait_active() ->
[{doc,"Test waiting when complete packages have not arrived"}].
packet_wait_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = list_to_binary(lists:duplicate(100, "1234567890")),
@@ -485,8 +515,8 @@ packet_wait_passive() ->
[{doc,"Test waiting when complete packages have not arrived"}].
packet_wait_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = list_to_binary(lists:duplicate(100, "1234567890")),
@@ -515,8 +545,8 @@ packet_baddata_active() ->
[{doc,"Test that if a bad packet arrives error msg is sent and socket is closed"}].
packet_baddata_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = list_to_binary(lists:duplicate(100, "1234567890")),
@@ -548,8 +578,8 @@ packet_baddata_passive() ->
[{doc,"Test that if a bad packet arrives error msg is sent and socket is closed"}].
packet_baddata_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = list_to_binary(lists:duplicate(100, "1234567890")),
@@ -583,8 +613,8 @@ packet_size_active() ->
packet_size arrives error msg is sent and socket is closed"}].
packet_size_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = list_to_binary(lists:duplicate(100, "1234567890")),
@@ -617,8 +647,8 @@ packet_size_passive() ->
than packet_size arrives error msg is sent and socket is closed"}].
packet_size_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = list_to_binary(lists:duplicate(100, "1234567890")),
@@ -649,8 +679,8 @@ packet_size_passive(Config) when is_list(Config) ->
packet_cdr_decode() ->
[{doc,"Test setting the packet option {packet, cdr}, {mode, binary}"}].
packet_cdr_decode(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
%% A valid cdr packet
@@ -682,8 +712,8 @@ packet_cdr_decode(Config) when is_list(Config) ->
packet_cdr_decode_list() ->
[{doc,"Test setting the packet option {packet, cdr} {mode, list}"}].
packet_cdr_decode_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
%% A valid cdr packet
@@ -717,8 +747,8 @@ packet_http_decode() ->
"(Body will be binary http strings are lists)"}].
packet_http_decode(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Request = "GET / HTTP/1.1\r\n"
@@ -799,8 +829,8 @@ packet_http_decode_list() ->
[{doc, "Test setting the packet option {packet, http}, {mode, list}"
"(Body will be list too)"}].
packet_http_decode_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Request = "GET / HTTP/1.1\r\n"
@@ -856,8 +886,8 @@ client_http_decode_list(Socket, HttpRequest) ->
packet_http_bin_decode_multi() ->
[{doc,"Test setting the packet option {packet, http_bin} with multiple requests"}].
packet_http_bin_decode_multi(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Request = <<"GET / HTTP/1.1\r\n"
@@ -946,8 +976,8 @@ packet_http_error_passive() ->
" with a incorrect http header."}].
packet_http_error_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Request = "GET / HTTP/1.1\r\n"
@@ -1006,8 +1036,8 @@ packet_httph_active() ->
[{doc,"Test setting the packet option {packet, httph}"}].
packet_httph_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Trailer = "Content-Encoding: gzip\r\n"
@@ -1061,8 +1091,8 @@ client_http_decode_trailer_active(Socket) ->
packet_httph_bin_active() ->
[{doc,"Test setting the packet option {packet, httph_bin}"}].
packet_httph_bin_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Trailer = "Content-Encoding: gzip\r\n"
@@ -1111,8 +1141,8 @@ packet_httph_active_once() ->
[{doc,"Test setting the packet option {packet, httph}"}].
packet_httph_active_once(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Trailer = "Content-Encoding: gzip\r\n"
@@ -1164,8 +1194,8 @@ packet_httph_bin_active_once() ->
[{doc,"Test setting the packet option {packet, httph_bin}"}].
packet_httph_bin_active_once(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Trailer = "Content-Encoding: gzip\r\n"
@@ -1218,8 +1248,8 @@ packet_httph_passive() ->
[{doc,"Test setting the packet option {packet, httph}"}].
packet_httph_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Trailer = "Content-Encoding: gzip\r\n"
@@ -1258,8 +1288,8 @@ packet_httph_bin_passive() ->
[{doc,"Test setting the packet option {packet, httph_bin}"}].
packet_httph_bin_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Trailer = "Content-Encoding: gzip\r\n"
@@ -1298,8 +1328,8 @@ packet_line_decode() ->
[{doc,"Test setting the packet option {packet, line}, {mode, binary}"}].
packet_line_decode(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = list_to_binary(lists:flatten(io_lib:format("Line ends here.~n"
@@ -1334,8 +1364,8 @@ packet_line_decode_list() ->
[{doc,"Test setting the packet option {packet, line}, {mode, list}"}].
packet_line_decode_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = lists:flatten(io_lib:format("Line ends here.~n"
@@ -1372,8 +1402,8 @@ packet_asn1_decode() ->
[{doc,"Test setting the packet option {packet, asn1}"}].
packet_asn1_decode(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
File = proplists:get_value(certfile, ServerOpts),
@@ -1407,8 +1437,8 @@ packet_asn1_decode_list() ->
[{doc,"Test setting the packet option {packet, asn1}"}].
packet_asn1_decode_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
File = proplists:get_value(certfile, ServerOpts),
@@ -1444,8 +1474,8 @@ packet_tpkt_decode() ->
[{doc,"Test setting the packet option {packet, tpkt}"}].
packet_tpkt_decode(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = list_to_binary(add_tpkt_header("TPKT data")),
@@ -1476,8 +1506,8 @@ packet_tpkt_decode_list() ->
[{doc,"Test setting the packet option {packet, tpkt}"}].
packet_tpkt_decode_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = binary_to_list(list_to_binary(add_tpkt_header("TPKT data"))),
@@ -1509,8 +1539,8 @@ packet_tpkt_decode_list(Config) when is_list(Config) ->
%% [{doc,"Test setting the packet option {packet, fcgi}"}].
%% packet_fcgi_decode(Config) when is_list(Config) ->
-%% ClientOpts = ?config(client_opts, Config),
-%% ServerOpts = ?config(server_opts, Config),
+%% ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+%% ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
%% {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
%% Data = ...
@@ -1542,8 +1572,8 @@ packet_tpkt_decode_list(Config) when is_list(Config) ->
packet_sunrm_decode() ->
[{doc,"Test setting the packet option {packet, sunrm}"}].
packet_sunrm_decode(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = <<11:32, "Hello world">>,
@@ -1574,8 +1604,8 @@ packet_sunrm_decode_list() ->
[{doc,"Test setting the packet option {packet, sunrm}"}].
packet_sunrm_decode_list(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = binary_to_list(list_to_binary([<<11:32>>, "Hello world"])),
@@ -1606,8 +1636,8 @@ header_decode_one_byte_active() ->
[{doc,"Test setting the packet option {header, 1}"}].
header_decode_one_byte_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = <<11:8, "Hello world">>,
@@ -1639,8 +1669,8 @@ header_decode_two_bytes_active() ->
[{doc,"Test setting the packet option {header, 2}"}].
header_decode_two_bytes_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = <<11:8, "Hello world">>,
@@ -1673,8 +1703,8 @@ header_decode_two_bytes_two_sent_active() ->
[{doc,"Test setting the packet option {header, 2} and sending two byte"}].
header_decode_two_bytes_two_sent_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = <<"He">>,
@@ -1707,8 +1737,8 @@ header_decode_two_bytes_one_sent_active() ->
[{doc,"Test setting the packet option {header, 2} and sending one byte"}].
header_decode_two_bytes_one_sent_active(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = <<"H">>,
@@ -1740,8 +1770,8 @@ header_decode_one_byte_passive() ->
[{doc,"Test setting the packet option {header, 1}"}].
header_decode_one_byte_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = <<11:8, "Hello world">>,
@@ -1773,8 +1803,8 @@ header_decode_two_bytes_passive() ->
[{doc,"Test setting the packet option {header, 2}"}].
header_decode_two_bytes_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = <<11:8, "Hello world">>,
@@ -1807,8 +1837,8 @@ header_decode_two_bytes_two_sent_passive() ->
[{doc,"Test setting the packet option {header, 2} and sending two byte"}].
header_decode_two_bytes_two_sent_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = <<"He">>,
@@ -1841,8 +1871,8 @@ header_decode_two_bytes_one_sent_passive() ->
[{doc,"Test setting the packet option {header, 2} and sending one byte"}].
header_decode_two_bytes_one_sent_passive(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = <<"H">>,
@@ -1872,8 +1902,8 @@ header_decode_two_bytes_one_sent_passive(Config) when is_list(Config) ->
%% Internal functions ------------------------------------------------
%%--------------------------------------------------------------------
packet(Config, Data, Send, Recv, Quantity, Packet, Active) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
diff --git a/lib/ssl/test/ssl_payload_SUITE.erl b/lib/ssl/test/ssl_payload_SUITE.erl
index eb06009734..cb1957327a 100644
--- a/lib/ssl/test/ssl_payload_SUITE.erl
+++ b/lib/ssl/test/ssl_payload_SUITE.erl
@@ -70,8 +70,8 @@ init_per_suite(Config) ->
catch crypto:stop(),
try crypto:start() of
ok ->
- ssl:start(),
- {ok, _} = make_certs:all(?config(data_dir, Config), ?config(priv_dir, Config)),
+ ssl_test_lib:clean_start(),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config), proplists:get_value(priv_dir, Config)),
ssl_test_lib:cert_options(Config)
catch _:_ ->
{skip, "Crypto did not start"}
@@ -86,8 +86,7 @@ init_per_group(GroupName, Config) ->
true ->
case ssl_test_lib:sufficient_crypto_support(GroupName) of
true ->
- ssl_test_lib:init_tls_version(GroupName),
- Config;
+ ssl_test_lib:init_tls_version(GroupName, Config);
false ->
{skip, "Missing crypto support"}
end;
@@ -105,8 +104,13 @@ init_per_testcase(TestCase, Config) when TestCase == server_echos_passive_huge;
TestCase == client_echos_passive_huge;
TestCase == client_echos_active_once_huge;
TestCase == client_echos_active_huge ->
- ct:timetrap({seconds, 90}),
- Config;
+ case erlang:system_info(system_architecture) of
+ "sparc-sun-solaris2.10" ->
+ {skip,"Will take to long time on an old Sparc"};
+ _ ->
+ ct:timetrap({seconds, 90}),
+ Config
+ end;
init_per_testcase(TestCase, Config) when TestCase == server_echos_passive_big;
TestCase == server_echos_active_once_big;
@@ -132,8 +136,8 @@ server_echos_passive_small() ->
"sends them back, and closes."}].
server_echos_passive_small(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -148,8 +152,8 @@ server_echos_active_once_small() ->
" them, sends them back, and closes."}].
server_echos_active_once_small(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -164,8 +168,8 @@ server_echos_active_small() ->
"sends them back, and closes."}].
server_echos_active_small(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -179,8 +183,8 @@ client_echos_passive_small() ->
"sends them back, and closes."}].
client_echos_passive_small(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -194,8 +198,8 @@ client_echos_active_once_small() ->
"them, sends them back, and closes."].
client_echos_active_once_small(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -209,8 +213,8 @@ client_echos_active_small() ->
"sends them back, and closes."}].
client_echos_active_small(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -225,8 +229,8 @@ server_echos_passive_big() ->
"sends them back, and closes."}].
server_echos_passive_big(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -241,8 +245,8 @@ server_echos_active_once_big() ->
"them, sends them back, and closes."}].
server_echos_active_once_big(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -257,8 +261,8 @@ server_echos_active_big() ->
" them, sends them back, and closes."}].
server_echos_active_big(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -272,8 +276,8 @@ client_echos_passive_big() ->
"sends them back, and closes."}].
client_echos_passive_big(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -287,8 +291,8 @@ client_echos_active_once_big() ->
" them, sends them back, and closes."}].
client_echos_active_once_big(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -302,8 +306,8 @@ client_echos_active_big() ->
"sends them back, and closes."}].
client_echos_active_big(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -317,8 +321,8 @@ server_echos_passive_huge() ->
" them, sends them back, and closes."}].
server_echos_passive_huge(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -332,8 +336,8 @@ server_echos_active_once_huge() ->
"them, sends them back, and closes."}].
server_echos_active_once_huge(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -347,8 +351,8 @@ server_echos_active_huge() ->
"sends them back, and closes."}].
server_echos_active_huge(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -362,8 +366,8 @@ client_echos_passive_huge() ->
"them, sends them back, and closes."}].
client_echos_passive_huge(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -376,8 +380,8 @@ client_echos_active_once_huge() ->
"them, sends them back, and closes."}].
client_echos_active_once_huge(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
@@ -390,8 +394,8 @@ client_echos_active_huge() ->
"sends them back, and closes."}].
client_echos_active_huge(Config) when is_list(Config) ->
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Str = "1234567890",
diff --git a/lib/ssl/test/ssl_pem_cache_SUITE.erl b/lib/ssl/test/ssl_pem_cache_SUITE.erl
index 3e96276258..02c98fc40f 100644
--- a/lib/ssl/test/ssl_pem_cache_SUITE.erl
+++ b/lib/ssl/test/ssl_pem_cache_SUITE.erl
@@ -43,10 +43,10 @@ init_per_suite(Config0) ->
catch crypto:stop(),
try crypto:start() of
ok ->
- ssl:start(),
+ ssl_test_lib:clean_start(),
%% make rsa certs using oppenssl
- {ok, _} = make_certs:all(?config(data_dir, Config0),
- ?config(priv_dir, Config0)),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config0),
+ proplists:get_value(priv_dir, Config0)),
Config1 = ssl_test_lib:make_dsa_cert(Config0),
ssl_test_lib:cert_options(Config1)
catch _:_ ->
@@ -63,14 +63,15 @@ end_per_group(_GroupName, Config) ->
Config.
init_per_testcase(pem_cleanup = Case, Config) ->
- end_per_testcase(Case, Config) ,
application:load(ssl),
+ end_per_testcase(Case, Config) ,
application:set_env(ssl, ssl_pem_cache_clean, ?CLEANUP_INTERVAL),
ssl:start(),
ct:timetrap({minutes, 1}),
Config.
end_per_testcase(_TestCase, Config) ->
+ ssl_test_lib:clean_env(),
ssl:stop(),
Config.
@@ -81,8 +82,8 @@ pem_cleanup() ->
[{doc, "Test pem cache invalidate mechanism"}].
pem_cleanup(Config)when is_list(Config) ->
process_flag(trap_exit, true),
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = proplists:get_value(client_opts, Config),
+ ServerOpts = proplists:get_value(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
diff --git a/lib/ssl/test/ssl_session_cache_SUITE.erl b/lib/ssl/test/ssl_session_cache_SUITE.erl
index 85345c814f..28637fc32d 100644
--- a/lib/ssl/test/ssl_session_cache_SUITE.erl
+++ b/lib/ssl/test/ssl_session_cache_SUITE.erl
@@ -58,10 +58,10 @@ init_per_suite(Config0) ->
catch crypto:stop(),
try crypto:start() of
ok ->
- ssl:start(),
+ ssl_test_lib:clean_start(),
%% make rsa certs using
- {ok, _} = make_certs:all(?config(data_dir, Config0),
- ?config(priv_dir, Config0)),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config0),
+ proplists:get_value(priv_dir, Config0)),
Config = ssl_test_lib:make_dsa_cert(Config0),
ssl_test_lib:cert_options(Config)
catch _:_ ->
@@ -118,7 +118,7 @@ init_customized_session_cache(Type, Config) ->
Config)),
ets:new(ssl_test, [named_table, public, set]),
ets:insert(ssl_test, {type, Type}),
- ct:timetrap({seconds, 5}),
+ ct:timetrap({seconds, 20}),
Config.
end_per_testcase(session_cache_process_list, Config) ->
@@ -154,8 +154,8 @@ client_unique_session() ->
"sets up many connections"}].
client_unique_session(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = proplists:get_value(client_opts, Config),
+ ServerOpts = proplists:get_value(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
@@ -185,8 +185,8 @@ session_cleanup() ->
"does not grow and grow ..."}].
session_cleanup(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
@@ -259,8 +259,8 @@ max_table_size() ->
[{doc,"Test max limit on session table"}].
max_table_size(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = proplists:get_value(client_verification_opts, Config),
+ ServerOpts = proplists:get_value(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server =
ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
diff --git a/lib/ssl/test/ssl_sni_SUITE.erl b/lib/ssl/test/ssl_sni_SUITE.erl
index edbc6bbee4..4e916a7f03 100644
--- a/lib/ssl/test/ssl_sni_SUITE.erl
+++ b/lib/ssl/test/ssl_sni_SUITE.erl
@@ -41,9 +41,9 @@ init_per_suite(Config0) ->
catch crypto:stop(),
try crypto:start() of
ok ->
- ssl:start(),
- {ok, _} = make_certs:all(?config(data_dir, Config0),
- ?config(priv_dir, Config0)),
+ ssl_test_lib:clean_start(),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config0),
+ proplists:get_value(priv_dir, Config0)),
ssl_test_lib:cert_options(Config0)
catch _:_ ->
{skip, "Crypto did not start"}
@@ -54,7 +54,7 @@ end_per_suite(_) ->
application:stop(crypto).
init_per_testcase(_TestCase, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:log("Ciphers: ~p~n ", [ ssl:cipher_suites()]),
ct:timetrap({seconds, 5}),
Config.
@@ -139,15 +139,15 @@ run_sni_fun_handshake(Config, SNIHostname, ExpectedSNIHostname, ExpectedCN) ->
ct:log("Start running handshake for sni_fun, Config: ~p, SNIHostname: ~p, "
"ExpectedSNIHostname: ~p, ExpectedCN: ~p",
[Config, SNIHostname, ExpectedSNIHostname, ExpectedCN]),
- [{sni_hosts, ServerSNIConf}] = ?config(sni_server_opts, Config),
+ [{sni_hosts, ServerSNIConf}] = proplists:get_value(sni_server_opts, Config),
SNIFun = fun(Domain) -> proplists:get_value(Domain, ServerSNIConf, undefined) end,
- ServerOptions = ?config(server_opts, Config) ++ [{sni_fun, SNIFun}],
+ ServerOptions = proplists:get_value(server_opts, Config) ++ [{sni_fun, SNIFun}],
ClientOptions =
case SNIHostname of
undefined ->
- ?config(client_opts, Config);
+ proplists:get_value(client_opts, Config);
_ ->
- [{server_name_indication, SNIHostname}] ++ ?config(client_opts, Config)
+ [{server_name_indication, SNIHostname}] ++ proplists:get_value(client_opts, Config)
end,
ct:log("Options: ~p", [[ServerOptions, ClientOptions]]),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -167,13 +167,13 @@ run_handshake(Config, SNIHostname, ExpectedSNIHostname, ExpectedCN) ->
ct:log("Start running handshake, Config: ~p, SNIHostname: ~p, "
"ExpectedSNIHostname: ~p, ExpectedCN: ~p",
[Config, SNIHostname, ExpectedSNIHostname, ExpectedCN]),
- ServerOptions = ?config(sni_server_opts, Config) ++ ?config(server_opts, Config),
+ ServerOptions = proplists:get_value(sni_server_opts, Config) ++ proplists:get_value(server_opts, Config),
ClientOptions =
case SNIHostname of
undefined ->
- ?config(client_opts, Config);
+ proplists:get_value(client_opts, Config);
_ ->
- [{server_name_indication, SNIHostname}] ++ ?config(client_opts, Config)
+ [{server_name_indication, SNIHostname}] ++ proplists:get_value(client_opts, Config)
end,
ct:log("Options: ~p", [[ServerOptions, ClientOptions]]),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
diff --git a/lib/ssl/test/ssl_test_lib.erl b/lib/ssl/test/ssl_test_lib.erl
index 02fdc4330f..81f16030f7 100644
--- a/lib/ssl/test/ssl_test_lib.erl
+++ b/lib/ssl/test/ssl_test_lib.erl
@@ -354,38 +354,40 @@ user_lookup(srp, Username, _UserState) ->
{ok, {srp_1024, Salt, UserPassHash}}.
cert_options(Config) ->
- ClientCaCertFile = filename:join([?config(priv_dir, Config),
+ ClientCaCertFile = filename:join([proplists:get_value(priv_dir, Config),
"client", "cacerts.pem"]),
- ClientCertFile = filename:join([?config(priv_dir, Config),
+ ClientCertFile = filename:join([proplists:get_value(priv_dir, Config),
"client", "cert.pem"]),
- ClientCertFileDigitalSignatureOnly = filename:join([?config(priv_dir, Config),
+ ClientCertFileDigitalSignatureOnly = filename:join([proplists:get_value(priv_dir, Config),
"client", "digital_signature_only_cert.pem"]),
- ServerCaCertFile = filename:join([?config(priv_dir, Config),
+ ServerCaCertFile = filename:join([proplists:get_value(priv_dir, Config),
"server", "cacerts.pem"]),
- ServerCertFile = filename:join([?config(priv_dir, Config),
+ ServerCertFile = filename:join([proplists:get_value(priv_dir, Config),
"server", "cert.pem"]),
- ServerKeyFile = filename:join([?config(priv_dir, Config),
+ ServerKeyFile = filename:join([proplists:get_value(priv_dir, Config),
"server", "key.pem"]),
- ClientKeyFile = filename:join([?config(priv_dir, Config),
+ ClientKeyFile = filename:join([proplists:get_value(priv_dir, Config),
"client", "key.pem"]),
- ServerKeyCertFile = filename:join([?config(priv_dir, Config),
+ ServerKeyCertFile = filename:join([proplists:get_value(priv_dir, Config),
"server", "keycert.pem"]),
- ClientKeyCertFile = filename:join([?config(priv_dir, Config),
+ ClientKeyCertFile = filename:join([proplists:get_value(priv_dir, Config),
"client", "keycert.pem"]),
- BadCaCertFile = filename:join([?config(priv_dir, Config),
+ BadCaCertFile = filename:join([proplists:get_value(priv_dir, Config),
"badcacert.pem"]),
- BadCertFile = filename:join([?config(priv_dir, Config),
+ BadCertFile = filename:join([proplists:get_value(priv_dir, Config),
"badcert.pem"]),
- BadKeyFile = filename:join([?config(priv_dir, Config),
+ BadKeyFile = filename:join([proplists:get_value(priv_dir, Config),
"badkey.pem"]),
PskSharedSecret = <<1,2,3,4,5,6,7,8,9,10,11,12,13,14,15>>,
- SNIServerACertFile = filename:join([?config(priv_dir, Config), "a.server", "cert.pem"]),
- SNIServerAKeyFile = filename:join([?config(priv_dir, Config), "a.server", "key.pem"]),
- SNIServerBCertFile = filename:join([?config(priv_dir, Config), "b.server", "cert.pem"]),
- SNIServerBKeyFile = filename:join([?config(priv_dir, Config), "b.server", "key.pem"]),
- [{client_opts, []},
+ SNIServerACertFile = filename:join([proplists:get_value(priv_dir, Config), "a.server", "cert.pem"]),
+ SNIServerAKeyFile = filename:join([proplists:get_value(priv_dir, Config), "a.server", "key.pem"]),
+ SNIServerBCertFile = filename:join([proplists:get_value(priv_dir, Config), "b.server", "cert.pem"]),
+ SNIServerBKeyFile = filename:join([proplists:get_value(priv_dir, Config), "b.server", "key.pem"]),
+ [{client_opts, [{cacertfile, ClientCaCertFile},
+ {certfile, ClientCertFile},
+ {keyfile, ClientKeyFile}]},
{client_verification_opts, [{cacertfile, ServerCaCertFile},
{certfile, ClientCertFile},
{keyfile, ClientKeyFile},
@@ -394,7 +396,7 @@ cert_options(Config) ->
{certfile, ClientCertFileDigitalSignatureOnly},
{keyfile, ClientKeyFile},
{ssl_imp, new}]},
- {server_opts, [{ssl_imp, new},{reuseaddr, true},
+ {server_opts, [{ssl_imp, new},{reuseaddr, true}, {cacertfile, ServerCaCertFile},
{certfile, ServerCertFile}, {keyfile, ServerKeyFile}]},
{server_anon, [{ssl_imp, new},{reuseaddr, true}, {ciphers, anonymous_suites()}]},
{client_psk, [{ssl_imp, new},{reuseaddr, true},
@@ -494,7 +496,7 @@ make_ecdsa_cert(Config) ->
{cacertfile, ServerCaCertFile},
{certfile, ServerCertFile}, {keyfile, ServerKeyFile}]},
{server_ecdsa_verify_opts, [{ssl_imp, new},{reuseaddr, true},
- {cacertfile, ServerCaCertFile},
+ {cacertfile, ClientCaCertFile},
{certfile, ServerCertFile}, {keyfile, ServerKeyFile},
{verify, verify_peer}]},
{client_ecdsa_opts, [{ssl_imp, new},{reuseaddr, true},
@@ -519,7 +521,7 @@ make_ecdh_rsa_cert(Config) ->
{cacertfile, ServerCaCertFile},
{certfile, ServerCertFile}, {keyfile, ServerKeyFile}]},
{server_ecdh_rsa_verify_opts, [{ssl_imp, new},{reuseaddr, true},
- {cacertfile, ServerCaCertFile},
+ {cacertfile, ClientCaCertFile},
{certfile, ServerCertFile}, {keyfile, ServerKeyFile},
{verify, verify_peer}]},
{client_ecdh_rsa_opts, [{ssl_imp, new},{reuseaddr, true},
@@ -552,11 +554,11 @@ make_cert_files(RoleStr, Config, Alg1, Alg2, Prefix) ->
Alg2Str = atom_to_list(Alg2),
CaInfo = {CaCert, _} = erl_make_certs:make_cert([{key, Alg1}]),
{Cert, CertKey} = erl_make_certs:make_cert([{key, Alg2}, {issuer, CaInfo}]),
- CaCertFile = filename:join([?config(priv_dir, Config),
+ CaCertFile = filename:join([proplists:get_value(priv_dir, Config),
RoleStr, Prefix ++ Alg1Str ++ "_cacerts.pem"]),
- CertFile = filename:join([?config(priv_dir, Config),
+ CertFile = filename:join([proplists:get_value(priv_dir, Config),
RoleStr, Prefix ++ Alg2Str ++ "_cert.pem"]),
- KeyFile = filename:join([?config(priv_dir, Config),
+ KeyFile = filename:join([proplists:get_value(priv_dir, Config),
RoleStr, Prefix ++ Alg2Str ++ "_key.pem"]),
der_to_pem(CaCertFile, [{'Certificate', CaCert, not_encrypted}]),
@@ -805,16 +807,24 @@ send_selected_port(_,_,_) ->
rsa_suites(CounterPart) ->
ECC = is_sane_ecc(CounterPart),
FIPS = is_fips(CounterPart),
+ CryptoSupport = crypto:supports(),
+ Ciphers = proplists:get_value(ciphers, CryptoSupport),
lists:filter(fun({rsa, des_cbc, sha}) when FIPS == true ->
false;
({dhe_rsa, des_cbc, sha}) when FIPS == true ->
false;
- ({rsa, _, _}) ->
- true;
- ({dhe_rsa, _, _}) ->
- true;
- ({ecdhe_rsa, _, _}) when ECC == true ->
- true;
+ ({rsa, Cipher, _}) ->
+ lists:member(Cipher, Ciphers);
+ ({dhe_rsa, Cipher, _}) ->
+ lists:member(Cipher, Ciphers);
+ ({ecdhe_rsa, Cipher, _}) when ECC == true ->
+ lists:member(Cipher, Ciphers);
+ ({rsa, Cipher, _, _}) ->
+ lists:member(Cipher, Ciphers);
+ ({dhe_rsa, Cipher, _,_}) ->
+ lists:member(Cipher, Ciphers);
+ ({ecdhe_rsa, Cipher, _,_}) when ECC == true ->
+ lists:member(Cipher, Ciphers);
(_) ->
false
end,
@@ -1051,6 +1061,10 @@ state([{data,[{"StateData", State}]} | _]) -> %% gen_fsm
state([_ | Rest]) ->
state(Rest).
+is_tls_version('dtlsv1.2') ->
+ true;
+is_tls_version('dtlsv1') ->
+ true;
is_tls_version('tlsv1.2') ->
true;
is_tls_version('tlsv1.1') ->
@@ -1062,13 +1076,23 @@ is_tls_version('sslv3') ->
is_tls_version(_) ->
false.
-init_tls_version(Version) ->
+init_tls_version(Version, Config)
+ when Version == 'dtlsv1.2'; Version == 'dtlsv1' ->
+ ssl:stop(),
+ application:load(ssl),
+ application:set_env(ssl, dtls_protocol_version, Version),
+ ssl:start(),
+ [{protocol, dtls}, {protocol_opts, [{protocol, dtls}]}|Config];
+
+init_tls_version(Version, Config) ->
ssl:stop(),
application:load(ssl),
application:set_env(ssl, protocol_version, Version),
- ssl:start().
+ ssl:start(),
+ [{protocol, tls}|Config].
-sufficient_crypto_support('tlsv1.2') ->
+sufficient_crypto_support(Version)
+ when Version == 'tlsv1.2'; Version == 'dtlsv1.2' ->
CryptoSupport = crypto:supports(),
proplists:get_bool(sha256, proplists:get_value(hashs, CryptoSupport));
sufficient_crypto_support(Group) when Group == ciphers_ec; %% From ssl_basic_SUITE
@@ -1294,3 +1318,56 @@ do_supports_ssl_tls_version(Port) ->
after 500 ->
true
end.
+
+ssl_options(Option, Config) ->
+ ProtocolOpts = proplists:get_value(protocol_opts, Config, []),
+ Opts = proplists:get_value(Option, Config, []),
+ Opts ++ ProtocolOpts.
+
+protocol_version(Config) ->
+ protocol_version(Config, atom).
+
+protocol_version(Config, tuple) ->
+ case proplists:get_value(protocol, Config) of
+ dtls ->
+ dtls_record:protocol_version(dtls_record:highest_protocol_version([]));
+ _ ->
+ tls_record:highest_protocol_version(tls_record:supported_protocol_versions())
+ end;
+
+protocol_version(Config, atom) ->
+ case proplists:get_value(protocol, Config) of
+ dtls ->
+ dtls_record:protocol_version(protocol_version(Config, tuple));
+ _ ->
+ tls_record:protocol_version(protocol_version(Config, tuple))
+ end.
+
+protocol_options(Config, Options) ->
+ Protocol = proplists:get_value(protocol, Config, tls),
+ {Protocol, Opts} = lists:keyfind(Protocol, 1, Options),
+ Opts.
+
+ct_log_supported_protocol_versions(Config) ->
+ case proplists:get_value(protocol, Config) of
+ dtls ->
+ ct:log("DTLS version ~p~n ", [dtls_record:supported_protocol_versions()]);
+ _ ->
+ ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()])
+ end.
+
+clean_env() ->
+ application:unset_env(ssl, protocol_version),
+ application:unset_env(ssl, session_lifetime),
+ application:unset_env(ssl, session_cb),
+ application:unset_env(ssl, session_cb_init_args),
+ application:unset_env(ssl, session_cache_client_max),
+ application:unset_env(ssl, session_cache_server_max),
+ application:unset_env(ssl, ssl_pem_cache_clean),
+ application:unset_env(ssl, alert_timeout).
+
+clean_start() ->
+ ssl:stop(),
+ application:load(ssl),
+ clean_env(),
+ ssl:start().
diff --git a/lib/ssl/test/ssl_to_openssl_SUITE.erl b/lib/ssl/test/ssl_to_openssl_SUITE.erl
index 686d24b044..9ecfe5b0ea 100644
--- a/lib/ssl/test/ssl_to_openssl_SUITE.erl
+++ b/lib/ssl/test/ssl_to_openssl_SUITE.erl
@@ -55,7 +55,9 @@ groups() ->
basic_tests() ->
[basic_erlang_client_openssl_server,
basic_erlang_server_openssl_client,
- expired_session].
+ expired_session,
+ ssl2_erlang_server_openssl_client_comp
+ ].
all_versions_tests() ->
[
@@ -74,7 +76,8 @@ all_versions_tests() ->
ciphers_dsa_signed_certs,
erlang_client_bad_openssl_server,
expired_session,
- ssl2_erlang_server_openssl_client].
+ ssl2_erlang_server_openssl_client
+ ].
alpn_tests() ->
[erlang_client_alpn_openssl_server_alpn,
@@ -116,9 +119,9 @@ init_per_suite(Config0) ->
catch crypto:stop(),
try crypto:start() of
ok ->
- ssl:start(),
- {ok, _} = make_certs:all(?config(data_dir, Config0),
- ?config(priv_dir, Config0)),
+ ssl_test_lib:clean_start(),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config0),
+ proplists:get_value(priv_dir, Config0)),
Config1 = ssl_test_lib:make_dsa_cert(Config0),
Config = ssl_test_lib:cert_options(Config1),
ssl_test_lib:cipher_restriction(Config)
@@ -131,13 +134,19 @@ end_per_suite(_Config) ->
ssl:stop(),
application:stop(crypto).
+init_per_group(basic, Config) ->
+ case ssl_test_lib:supports_ssl_tls_version(sslv2) of
+ true ->
+ [{v2_hello_compatible, true} | Config];
+ false ->
+ [{v2_hello_compatible, false} | Config]
+ end;
init_per_group(GroupName, Config) ->
case ssl_test_lib:is_tls_version(GroupName) of
true ->
case ssl_test_lib:check_sane_openssl_version(GroupName) of
true ->
- ssl_test_lib:init_tls_version(GroupName),
- Config;
+ ssl_test_lib:init_tls_version(GroupName, Config);
false ->
{skip, openssl_does_not_support_version}
end;
@@ -163,7 +172,7 @@ init_per_testcase(TestCase, Config) when TestCase == ciphers_rsa_signed_certs;
special_init(TestCase, Config);
init_per_testcase(TestCase, Config) ->
- ct:timetrap({seconds, 10}),
+ ct:timetrap({seconds, 20}),
special_init(TestCase, Config).
special_init(TestCase, Config)
@@ -174,7 +183,8 @@ special_init(TestCase, Config)
{ok, Version} = application:get_env(ssl, protocol_version),
check_sane_openssl_renegotaite(Config, Version);
-special_init(ssl2_erlang_server_openssl_client, Config) ->
+special_init(Case, Config) when Case == ssl2_erlang_server_openssl_client;
+ Case == ssl2_erlang_server_openssl_client_comp ->
case ssl_test_lib:supports_ssl_tls_version(sslv2) of
true ->
Config;
@@ -257,8 +267,8 @@ basic_erlang_client_openssl_server() ->
[{doc,"Test erlang client with openssl server"}].
basic_erlang_client_openssl_server(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -296,16 +306,19 @@ basic_erlang_server_openssl_client() ->
[{doc,"Test erlang server with openssl client"}].
basic_erlang_server_openssl_client(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ V2Compat = proplists:get_value(v2_hello_compatible, Config),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
Data = "From openssl to erlang",
+ ct:pal("v2_hello_compatible: ~p", [V2Compat]),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
- {mfa, {?MODULE, erlang_ssl_receive, [Data]}},
- {options, ServerOpts}]),
+ {mfa, {?MODULE, erlang_ssl_receive, [Data]}},
+ {options,[{v2_hello_compatible, V2Compat} | ServerOpts]}]),
+
Port = ssl_test_lib:inet_port(Server),
Exe = "openssl",
@@ -319,15 +332,15 @@ basic_erlang_server_openssl_client(Config) when is_list(Config) ->
%% Clean close down! Server needs to be closed first !!
ssl_test_lib:close(Server),
ssl_test_lib:close_port(OpenSslPort),
- process_flag(trap_exit, false),
- ok.
+ process_flag(trap_exit, false).
+
%%--------------------------------------------------------------------
erlang_client_openssl_server() ->
[{doc,"Test erlang client with openssl server"}].
erlang_client_openssl_server(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -336,7 +349,7 @@ erlang_client_openssl_server(Config) when is_list(Config) ->
Port = ssl_test_lib:inet_port(node()),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-accept", integer_to_list(Port),
ssl_test_lib:version_flag(Version),
@@ -366,7 +379,7 @@ erlang_server_openssl_client() ->
[{doc,"Test erlang server with openssl client"}].
erlang_server_openssl_client(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
@@ -377,7 +390,7 @@ erlang_server_openssl_client(Config) when is_list(Config) ->
{mfa, {?MODULE, erlang_ssl_receive, [Data]}},
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_client", "-connect", "localhost: " ++ integer_to_list(Port),
@@ -398,8 +411,8 @@ erlang_client_openssl_server_dsa_cert() ->
[{doc,"Test erlang server with openssl client"}].
erlang_client_openssl_server_dsa_cert(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ClientOpts = ?config(client_dsa_opts, Config),
- ServerOpts = ?config(server_dsa_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_dsa_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_dsa_opts, Config),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -409,7 +422,7 @@ erlang_client_openssl_server_dsa_cert(Config) when is_list(Config) ->
CaCertFile = proplists:get_value(cacertfile, ServerOpts),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-accept", integer_to_list(Port),
ssl_test_lib:version_flag(Version),
@@ -441,8 +454,8 @@ erlang_server_openssl_client_dsa_cert() ->
[{doc,"Test erlang server with openssl client"}].
erlang_server_openssl_client_dsa_cert(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ClientOpts = ?config(client_dsa_opts, Config),
- ServerOpts = ?config(server_dsa_verify_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_dsa_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_dsa_verify_opts, Config),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
@@ -456,7 +469,7 @@ erlang_server_openssl_client_dsa_cert(Config) when is_list(Config) ->
{mfa, {?MODULE, erlang_ssl_receive, [Data]}},
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_client", "-connect", "localhost: " ++ integer_to_list(Port),
ssl_test_lib:version_flag(Version),
@@ -481,7 +494,7 @@ erlang_server_openssl_client_reuse_session() ->
"same session id, to test reusing of sessions."}].
erlang_server_openssl_client_reuse_session(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
@@ -493,7 +506,7 @@ erlang_server_openssl_client_reuse_session(Config) when is_list(Config) ->
{reconnect_times, 5},
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_client", "-connect", "localhost:" ++ integer_to_list(Port),
@@ -518,8 +531,8 @@ erlang_client_openssl_server_renegotiate() ->
[{doc,"Test erlang client when openssl server issuses a renegotiate"}].
erlang_client_openssl_server_renegotiate(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -529,7 +542,7 @@ erlang_client_openssl_server_renegotiate(Config) when is_list(Config) ->
Port = ssl_test_lib:inet_port(node()),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-accept", integer_to_list(Port),
@@ -568,8 +581,8 @@ erlang_client_openssl_server_nowrap_seqnum() ->
" to lower treashold substantially."}].
erlang_client_openssl_server_nowrap_seqnum(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -579,7 +592,7 @@ erlang_client_openssl_server_nowrap_seqnum(Config) when is_list(Config) ->
Port = ssl_test_lib:inet_port(node()),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-accept", integer_to_list(Port),
ssl_test_lib:version_flag(Version),
@@ -611,7 +624,7 @@ erlang_server_openssl_client_nowrap_seqnum() ->
" to lower treashold substantially."}].
erlang_server_openssl_client_nowrap_seqnum(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
@@ -625,7 +638,7 @@ erlang_server_openssl_client_nowrap_seqnum(Config) when is_list(Config) ->
trigger_renegotiate, [[Data, N+2]]}},
{options, [{renegotiate_at, N}, {reuse_sessions, false} | ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_client","-connect", "localhost: " ++ integer_to_list(Port),
ssl_test_lib:version_flag(Version),
@@ -650,8 +663,8 @@ erlang_client_openssl_server_no_server_ca_cert() ->
"implicitly tested eleswhere."}].
erlang_client_openssl_server_no_server_ca_cert(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
- ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -660,7 +673,7 @@ erlang_client_openssl_server_no_server_ca_cert(Config) when is_list(Config) ->
Port = ssl_test_lib:inet_port(node()),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-accept", integer_to_list(Port),
ssl_test_lib:version_flag(Version),
@@ -691,8 +704,8 @@ erlang_client_openssl_server_client_cert() ->
[{doc,"Test erlang client with openssl server when client sends cert"}].
erlang_client_openssl_server_client_cert(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_verification_opts, Config),
- ClientOpts = ?config(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -702,7 +715,7 @@ erlang_client_openssl_server_client_cert(Config) when is_list(Config) ->
CertFile = proplists:get_value(certfile, ServerOpts),
CaCertFile = proplists:get_value(cacertfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-accept", integer_to_list(Port),
ssl_test_lib:version_flag(Version),
@@ -734,8 +747,8 @@ erlang_server_openssl_client_client_cert() ->
[{doc,"Test erlang server with openssl client when client sends cert"}].
erlang_server_openssl_client_client_cert(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_verification_opts, Config),
- ClientOpts = ?config(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
@@ -753,7 +766,7 @@ erlang_server_openssl_client_client_cert(Config) when is_list(Config) ->
CaCertFile = proplists:get_value(cacertfile, ClientOpts),
CertFile = proplists:get_value(certfile, ClientOpts),
KeyFile = proplists:get_value(keyfile, ClientOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_client", "-cert", CertFile,
"-CAfile", CaCertFile,
@@ -775,9 +788,9 @@ erlang_server_erlang_client_client_cert() ->
[{doc,"Test erlang server with erlang client when client sends cert"}].
erlang_server_erlang_client_client_cert(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_verification_opts, Config),
- ClientOpts = ?config(client_verification_opts, Config),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ ServerOpts = proplists:get_value(server_verification_opts, Config),
+ ClientOpts = proplists:get_value(client_verification_opts, Config),
+ Version = ssl_test_lib:protocol_version(Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Data = "From erlang to erlang",
@@ -812,9 +825,7 @@ erlang_server_erlang_client_client_cert(Config) when is_list(Config) ->
ciphers_rsa_signed_certs() ->
[{doc,"Test cipher suites that uses rsa certs"}].
ciphers_rsa_signed_certs(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
-
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:rsa_suites(openssl),
run_suites(Ciphers, Version, Config, rsa).
%%--------------------------------------------------------------------
@@ -822,9 +833,7 @@ ciphers_rsa_signed_certs(Config) when is_list(Config) ->
ciphers_dsa_signed_certs() ->
[{doc,"Test cipher suites that uses dsa certs"}].
ciphers_dsa_signed_certs(Config) when is_list(Config) ->
- Version =
- tls_record:protocol_version(tls_record:highest_protocol_version([])),
-
+ Version = ssl_test_lib:protocol_version(Config),
Ciphers = ssl_test_lib:dsa_suites(),
run_suites(Ciphers, Version, Config, dsa).
@@ -833,15 +842,15 @@ erlang_client_bad_openssl_server() ->
[{doc,"Test what happens if openssl server sends garbage to erlang ssl client"}].
erlang_client_bad_openssl_server(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_verification_opts, Config),
- ClientOpts = ?config(client_verification_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_verification_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_verification_opts, Config),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
Port = ssl_test_lib:inet_port(node()),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-accept", integer_to_list(Port), ssl_test_lib:version_flag(Version),
"-cert", CertFile, "-key", KeyFile],
@@ -888,8 +897,8 @@ expired_session() ->
"better code coverage of the ssl_manager module"}].
expired_session(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ClientOpts = ?config(client_opts, Config),
- ServerOpts = ?config(server_opts, Config),
+ ClientOpts = ssl_test_lib:ssl_options(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
Port = ssl_test_lib:inet_port(node()),
@@ -942,7 +951,51 @@ ssl2_erlang_server_openssl_client() ->
ssl2_erlang_server_openssl_client(Config) when is_list(Config) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+
+ {_, ServerNode, _} = ssl_test_lib:run_where(Config),
+
+ Data = "From openssl to erlang",
+
+ Server = ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {options, ServerOpts}]),
+ Port = ssl_test_lib:inet_port(Server),
+
+ Exe = "openssl",
+ Args = ["s_client", "-connect", "localhost:" ++ integer_to_list(Port),
+ "-ssl2", "-msg"],
+
+ OpenSslPort = ssl_test_lib:portable_open_port(Exe, Args),
+ true = port_command(OpenSslPort, Data),
+
+ ct:log("Ports ~p~n", [[erlang:port_info(P) || P <- erlang:ports()]]),
+ receive
+ {'EXIT', OpenSslPort, _} = Exit ->
+ ct:log("Received: ~p ~n", [Exit]),
+ ok
+ end,
+ receive
+ {'EXIT', _, _} = UnkownExit ->
+ Msg = lists:flatten(io_lib:format("Received: ~p ~n", [UnkownExit])),
+ ct:log(Msg),
+ ct:comment(Msg),
+ ok
+ after 0 ->
+ ok
+ end,
+ ssl_test_lib:check_result(Server, {error, {tls_alert, "handshake failure"}}),
+ process_flag(trap_exit, false).
+%%--------------------------------------------------------------------
+ssl2_erlang_server_openssl_client_comp() ->
+ [{doc,"Test that ssl v2 clients are rejected"}].
+
+ssl2_erlang_server_openssl_client_comp(Config) when is_list(Config) ->
+ process_flag(trap_exit, true),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ V2Compat = proplists:get_value(v2_hello_compatible, Config),
+
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
@@ -950,7 +1003,7 @@ ssl2_erlang_server_openssl_client(Config) when is_list(Config) ->
Server = ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0},
{from, self()},
- {options, ServerOpts}]),
+ {options, [{v2_hello_compatible, V2Compat} | ServerOpts]}]),
Port = ssl_test_lib:inet_port(Server),
Exe = "openssl",
@@ -1220,11 +1273,11 @@ run_suites(Ciphers, Version, Config, Type) ->
{ClientOpts, ServerOpts} =
case Type of
rsa ->
- {?config(client_opts, Config),
- ?config(server_opts, Config)};
+ {ssl_test_lib:ssl_options(client_opts, Config),
+ ssl_test_lib:ssl_options(server_opts, Config)};
dsa ->
- {?config(client_opts, Config),
- ?config(server_dsa_opts, Config)}
+ {ssl_test_lib:ssl_options(client_opts, Config),
+ ssl_test_lib:ssl_options(server_dsa_opts, Config)}
end,
Result = lists:map(fun(Cipher) ->
@@ -1259,7 +1312,7 @@ client_check_result(Port, DataExpected, DataReceived) ->
_ ->
client_check_result(Port, DataExpected, NewData)
end
- after 3000 ->
+ after 20000 ->
ct:fail({"Time out on openSSL Client", {expected, DataExpected},
{got, DataReceived}})
end.
@@ -1277,7 +1330,7 @@ send_and_hostname(SSLSocket) ->
erlang_server_openssl_client_sni_test(Config, SNIHostname, ExpectedSNIHostname, ExpectedCN) ->
ct:log("Start running handshake, Config: ~p, SNIHostname: ~p, ExpectedSNIHostname: ~p, ExpectedCN: ~p", [Config, SNIHostname, ExpectedSNIHostname, ExpectedCN]),
- ServerOptions = ?config(sni_server_opts, Config) ++ ?config(server_opts, Config),
+ ServerOptions = proplists:get_value(sni_server_opts, Config) ++ proplists:get_value(server_opts, Config),
{_, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()}, {mfa, {?MODULE, send_and_hostname, []}},
@@ -1285,13 +1338,13 @@ erlang_server_openssl_client_sni_test(Config, SNIHostname, ExpectedSNIHostname,
Port = ssl_test_lib:inet_port(Server),
Exe = "openssl",
ClientArgs = case SNIHostname of
- undefined ->
- ["s_client", "-connect", Hostname ++ ":" ++ integer_to_list(Port)];
- _ ->
- ["s_client", "-connect", Hostname ++ ":" ++ integer_to_list(Port), "-servername", SNIHostname]
- end,
+ undefined ->
+ openssl_client_args(ssl_test_lib:supports_ssl_tls_version(sslv2), Hostname,Port);
+ _ ->
+ openssl_client_args(ssl_test_lib:supports_ssl_tls_version(sslv2), Hostname, Port, SNIHostname)
+ end,
ClientPort = ssl_test_lib:portable_open_port(Exe, ClientArgs),
-
+
%% Client check needs to be done befor server check,
%% or server check might consume client messages
ExpectedClientOutput = ["OK", "/CN=" ++ ExpectedCN ++ "/"],
@@ -1304,9 +1357,9 @@ erlang_server_openssl_client_sni_test(Config, SNIHostname, ExpectedSNIHostname,
erlang_server_openssl_client_sni_test_sni_fun(Config, SNIHostname, ExpectedSNIHostname, ExpectedCN) ->
ct:log("Start running handshake for sni_fun, Config: ~p, SNIHostname: ~p, ExpectedSNIHostname: ~p, ExpectedCN: ~p", [Config, SNIHostname, ExpectedSNIHostname, ExpectedCN]),
- [{sni_hosts, ServerSNIConf}] = ?config(sni_server_opts, Config),
+ [{sni_hosts, ServerSNIConf}] = proplists:get_value(sni_server_opts, Config),
SNIFun = fun(Domain) -> proplists:get_value(Domain, ServerSNIConf, undefined) end,
- ServerOptions = ?config(server_opts, Config) ++ [{sni_fun, SNIFun}],
+ ServerOptions = proplists:get_value(server_opts, Config) ++ [{sni_fun, SNIFun}],
{_, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()}, {mfa, {?MODULE, send_and_hostname, []}},
@@ -1314,13 +1367,14 @@ erlang_server_openssl_client_sni_test_sni_fun(Config, SNIHostname, ExpectedSNIHo
Port = ssl_test_lib:inet_port(Server),
Exe = "openssl",
ClientArgs = case SNIHostname of
- undefined ->
- ["s_client", "-connect", Hostname ++ ":" ++ integer_to_list(Port)];
- _ ->
- ["s_client", "-connect", Hostname ++ ":" ++ integer_to_list(Port), "-servername", SNIHostname]
- end,
+ undefined ->
+ openssl_client_args(ssl_test_lib:supports_ssl_tls_version(sslv2), Hostname,Port);
+ _ ->
+ openssl_client_args(ssl_test_lib:supports_ssl_tls_version(sslv2), Hostname, Port, SNIHostname)
+ end,
+
ClientPort = ssl_test_lib:portable_open_port(Exe, ClientArgs),
-
+
%% Client check needs to be done befor server check,
%% or server check might consume client messages
ExpectedClientOutput = ["OK", "/CN=" ++ ExpectedCN ++ "/"],
@@ -1388,8 +1442,8 @@ cipher(CipherSuite, Version, Config, ClientOpts, ServerOpts) ->
start_erlang_client_and_openssl_server_with_opts(Config, ErlangClientOpts, OpensslServerOpts, Data, Callback) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
- ClientOpts0 = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts0 = ssl_test_lib:ssl_options(client_opts, Config),
ClientOpts = ErlangClientOpts ++ ClientOpts0,
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -1399,7 +1453,7 @@ start_erlang_client_and_openssl_server_with_opts(Config, ErlangClientOpts, Opens
Port = ssl_test_lib:inet_port(node()),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = case OpensslServerOpts of
@@ -1434,8 +1488,8 @@ start_erlang_client_and_openssl_server_with_opts(Config, ErlangClientOpts, Opens
start_erlang_client_and_openssl_server_for_alpn_negotiation(Config, Data, Callback) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
- ClientOpts0 = ?config(client_opts, Config),
+ ServerOpts = proplists:get_value(server_opts, Config),
+ ClientOpts0 = proplists:get_value(client_opts, Config),
ClientOpts = [{alpn_advertised_protocols, [<<"spdy/2">>]} | ClientOpts0],
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -1445,7 +1499,7 @@ start_erlang_client_and_openssl_server_for_alpn_negotiation(Config, Data, Callba
Port = ssl_test_lib:inet_port(node()),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-msg", "-alpn", "http/1.1,spdy/2", "-accept", integer_to_list(Port), ssl_test_lib:version_flag(Version),
@@ -1470,7 +1524,7 @@ start_erlang_client_and_openssl_server_for_alpn_negotiation(Config, Data, Callba
start_erlang_server_and_openssl_client_for_alpn_negotiation(Config, Data, Callback) ->
process_flag(trap_exit, true),
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = proplists:get_value(server_opts, Config),
ServerOpts = [{alpn_preferred_protocols, [<<"spdy/2">>]} | ServerOpts0],
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
@@ -1481,7 +1535,7 @@ start_erlang_server_and_openssl_client_for_alpn_negotiation(Config, Data, Callba
{mfa, {?MODULE, erlang_ssl_receive_and_assert_negotiated_protocol, [<<"spdy/2">>, Data]}},
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_client", "-alpn", "http/1.0,spdy/2", "-msg", "-port",
@@ -1499,8 +1553,8 @@ start_erlang_server_and_openssl_client_for_alpn_negotiation(Config, Data, Callba
start_erlang_client_and_openssl_server_for_alpn_npn_negotiation(Config, Data, Callback) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
- ClientOpts0 = ?config(client_opts, Config),
+ ServerOpts = proplists:get_value(server_opts, Config),
+ ClientOpts0 = proplists:get_value(client_opts, Config),
ClientOpts = [{alpn_advertised_protocols, [<<"spdy/2">>]},
{client_preferred_next_protocols, {client, [<<"spdy/3">>, <<"http/1.1">>]}} | ClientOpts0],
@@ -1511,7 +1565,7 @@ start_erlang_client_and_openssl_server_for_alpn_npn_negotiation(Config, Data, Ca
Port = ssl_test_lib:inet_port(node()),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-msg", "-alpn", "http/1.1,spdy/2", "-nextprotoneg",
@@ -1539,7 +1593,7 @@ start_erlang_client_and_openssl_server_for_alpn_npn_negotiation(Config, Data, Ca
start_erlang_server_and_openssl_client_for_alpn_npn_negotiation(Config, Data, Callback) ->
process_flag(trap_exit, true),
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = proplists:get_value(server_opts, Config),
ServerOpts = [{alpn_preferred_protocols, [<<"spdy/2">>]},
{next_protocols_advertised, [<<"spdy/3">>, <<"http/1.1">>]} | ServerOpts0],
@@ -1551,7 +1605,7 @@ start_erlang_server_and_openssl_client_for_alpn_npn_negotiation(Config, Data, Ca
{mfa, {?MODULE, erlang_ssl_receive_and_assert_negotiated_protocol, [<<"spdy/2">>, Data]}},
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_client", "-alpn", "http/1.1,spdy/2", "-nextprotoneg", "spdy/3",
"-msg", "-port", integer_to_list(Port), ssl_test_lib:version_flag(Version),
@@ -1566,8 +1620,8 @@ start_erlang_server_and_openssl_client_for_alpn_npn_negotiation(Config, Data, Ca
start_erlang_client_and_openssl_server_for_npn_negotiation(Config, Data, Callback) ->
process_flag(trap_exit, true),
- ServerOpts = ?config(server_opts, Config),
- ClientOpts0 = ?config(client_opts, Config),
+ ServerOpts = ssl_test_lib:ssl_options(server_opts, Config),
+ ClientOpts0 = ssl_test_lib:ssl_options(client_opts, Config),
ClientOpts = [{client_preferred_next_protocols, {client, [<<"spdy/2">>], <<"http/1.1">>}} | ClientOpts0],
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
@@ -1577,7 +1631,7 @@ start_erlang_client_and_openssl_server_for_npn_negotiation(Config, Data, Callbac
Port = ssl_test_lib:inet_port(node()),
CertFile = proplists:get_value(certfile, ServerOpts),
KeyFile = proplists:get_value(keyfile, ServerOpts),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_server", "-msg", "-nextprotoneg", "http/1.1,spdy/2", "-accept", integer_to_list(Port),
@@ -1604,7 +1658,7 @@ start_erlang_client_and_openssl_server_for_npn_negotiation(Config, Data, Callbac
start_erlang_server_and_openssl_client_for_npn_negotiation(Config, Data, Callback) ->
process_flag(trap_exit, true),
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = ssl_test_lib:ssl_options(server_opts, Config),
ServerOpts = [{next_protocols_advertised, [<<"spdy/2">>]}, ServerOpts0],
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
@@ -1615,7 +1669,7 @@ start_erlang_server_and_openssl_client_for_npn_negotiation(Config, Data, Callbac
{mfa, {?MODULE, erlang_ssl_receive_and_assert_negotiated_protocol, [<<"spdy/2">>, Data]}},
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_client", "-nextprotoneg", "http/1.0,spdy/2", "-msg", "-connect", "localhost:"
@@ -1633,7 +1687,7 @@ start_erlang_server_and_openssl_client_for_npn_negotiation(Config, Data, Callbac
start_erlang_server_and_openssl_client_with_opts(Config, ErlangServerOpts, OpenSSLClientOpts, Data, Callback) ->
process_flag(trap_exit, true),
- ServerOpts0 = ?config(server_opts, Config),
+ ServerOpts0 = ssl_test_lib:ssl_options(server_opts, Config),
ServerOpts = ErlangServerOpts ++ ServerOpts0,
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
@@ -1644,7 +1698,7 @@ start_erlang_server_and_openssl_client_with_opts(Config, ErlangServerOpts, OpenS
{mfa, {?MODULE, erlang_ssl_receive, [Data]}},
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
- Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
+ Version = ssl_test_lib:protocol_version(Config),
Exe = "openssl",
Args = ["s_client"] ++ OpenSSLClientOpts ++ ["-msg", "-connect", "localhost:" ++ integer_to_list(Port),
@@ -1782,3 +1836,15 @@ workaround_openssl_s_clinent() ->
_ ->
[]
end.
+
+openssl_client_args(false, Hostname, Port) ->
+ ["s_client", "-connect", Hostname ++ ":" ++ integer_to_list(Port)];
+openssl_client_args(true, Hostname, Port) ->
+ ["s_client", "-no_ssl2", "-connect", Hostname ++ ":" ++ integer_to_list(Port)].
+
+openssl_client_args(false, Hostname, Port, ServerName) ->
+ ["s_client", "-connect", Hostname ++ ":" ++
+ integer_to_list(Port), "-servername", ServerName];
+openssl_client_args(true, Hostname, Port, ServerName) ->
+ ["s_client", "-no_ssl2", "-connect", Hostname ++ ":" ++
+ integer_to_list(Port), "-servername", ServerName].
diff --git a/lib/ssl/test/ssl_upgrade_SUITE.erl b/lib/ssl/test/ssl_upgrade_SUITE.erl
index f5f4b25b23..f6af1e6182 100644
--- a/lib/ssl/test/ssl_upgrade_SUITE.erl
+++ b/lib/ssl/test/ssl_upgrade_SUITE.erl
@@ -29,7 +29,8 @@
server,
client,
soft,
- result_proxy
+ result_proxy,
+ skip
}).
all() ->
@@ -47,8 +48,8 @@ init_per_suite(Config0) ->
{skip, Reason};
Config ->
Result =
- {ok, _} = make_certs:all(?config(data_dir, Config),
- ?config(priv_dir, Config)),
+ {ok, _} = make_certs:all(proplists:get_value(data_dir, Config),
+ proplists:get_value(priv_dir, Config)),
ssl_test_lib:cert_options(Config)
end
catch _:_ ->
@@ -60,7 +61,7 @@ end_per_suite(Config) ->
crypto:stop().
init_per_testcase(_TestCase, Config) ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:timetrap({minutes, 1}),
Config.
@@ -73,8 +74,15 @@ major_upgrade(Config) when is_list(Config) ->
minor_upgrade(Config) when is_list(Config) ->
ct_release_test:upgrade(ssl, minor,{?MODULE, #state{config = Config}}, Config).
-upgrade_init(CTData, #state{config = Config} = State) ->
- {ok, {_, _, Up, _Down}} = ct_release_test:get_appup(CTData, ssl),
+upgrade_init(CtData, State) ->
+ {ok,{FromVsn,ToVsn}} = ct_release_test:get_app_vsns(CtData, ssl),
+ upgrade_init(FromVsn, ToVsn, CtData, State).
+
+upgrade_init(_, "8.0.2", _, State) ->
+ %% Requires stdlib upgrade so it will be a node upgrade!
+ State#state{skip = true};
+upgrade_init(_, _, CtData, #state{config = Config} = State) ->
+ {ok, {_, _, Up, _Down}} = ct_release_test:get_appup(CtData, ssl),
ct:pal("Up: ~p", [Up]),
Soft = is_soft(Up), %% It is symmetrical, if upgrade is soft so is downgrade
Pid = spawn(?MODULE, result_proxy_init, [[]]),
@@ -88,6 +96,8 @@ upgrade_init(CTData, #state{config = Config} = State) ->
State#state{soft = Soft, result_proxy = Pid}
end.
+upgrade_upgraded(_, #state{skip = true} = State) ->
+ State;
upgrade_upgraded(_, #state{soft = false, config = Config, result_proxy = Pid} = State) ->
ct:pal("Restart upgrade ~n", []),
{Server, Client} = restart_start_connection(Config, Pid),
@@ -96,7 +106,6 @@ upgrade_upgraded(_, #state{soft = false, config = Config, result_proxy = Pid} =
ssl_test_lib:close(Client),
ok = Result,
State;
-
upgrade_upgraded(_, #state{server = Server0, client = Client0,
config = Config, soft = true,
result_proxy = Pid} = State) ->
@@ -110,6 +119,8 @@ upgrade_upgraded(_, #state{server = Server0, client = Client0,
{Server, Client} = soft_start_connection(Config, Pid),
State#state{server = Server, client = Client}.
+upgrade_downgraded(_, #state{skip = true} = State) ->
+ State;
upgrade_downgraded(_, #state{soft = false, config = Config, result_proxy = Pid} = State) ->
ct:pal("Restart downgrade: ~n", []),
{Server, Client} = restart_start_connection(Config, Pid),
@@ -119,7 +130,6 @@ upgrade_downgraded(_, #state{soft = false, config = Config, result_proxy = Pid}
Pid ! stop,
ok = Result,
State;
-
upgrade_downgraded(_, #state{server = Server, client = Client, soft = true, result_proxy = Pid} = State) ->
ct:pal("Soft downgrade: ~n", []),
Server ! changed_version,
@@ -139,8 +149,8 @@ use_connection(Socket) ->
end.
soft_start_connection(Config, ResulProxy) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = proplists:get_value(client_verification_opts, Config),
+ ServerOpts = proplists:get_value(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = start_server([{node, ServerNode}, {port, 0},
{from, ResulProxy},
@@ -156,8 +166,8 @@ soft_start_connection(Config, ResulProxy) ->
{Server, Client}.
restart_start_connection(Config, ResulProxy) ->
- ClientOpts = ?config(client_verification_opts, Config),
- ServerOpts = ?config(server_verification_opts, Config),
+ ClientOpts = proplists:get_value(client_verification_opts, Config),
+ ServerOpts = proplists:get_value(server_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = start_server([{node, ServerNode}, {port, 0},
{from, ResulProxy},
diff --git a/lib/ssl/vsn.mk b/lib/ssl/vsn.mk
index 3b51fa8c6b..914eb43505 100644
--- a/lib/ssl/vsn.mk
+++ b/lib/ssl/vsn.mk
@@ -1 +1 @@
-SSL_VSN = 8.0
+SSL_VSN = 8.0.2
diff --git a/lib/stdlib/doc/src/array.xml b/lib/stdlib/doc/src/array.xml
index bff98245bf..db0ab42372 100644
--- a/lib/stdlib/doc/src/array.xml
+++ b/lib/stdlib/doc/src/array.xml
@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
<erlref>
-<header>
+ <header>
<copyright>
<year>2007</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
@@ -21,469 +22,541 @@
</legalnotice>
-<title>array</title>
-<prepared></prepared>
-<responsible></responsible>
-<docno>1</docno>
-<approved></approved>
-<checked></checked>
-<date></date>
-<rev>A</rev>
-<file>array.xml</file></header>
-<module>array</module>
-<modulesummary>Functional, extendible arrays.</modulesummary>
-<description>
-<p>Functional, extendible arrays. Arrays can have fixed size, or
-can grow automatically as needed. A default value is used for entries
-that have not been explicitly set.</p>
-
- <p>Arrays uses <em>zero</em> based indexing. This is a deliberate design
-choice and differs from other erlang datastructures, e.g. tuples.</p>
-
- <p>Unless specified by the user when the array is created, the default
- value is the atom <c>undefined</c>. There is no difference between an
- unset entry and an entry which has been explicitly set to the same
- value as the default one (cf. <seealso marker="#reset-2">reset/2</seealso>). If you need to
-differentiate between unset and set entries, you must make sure that
-the default value cannot be confused with the values of set entries.</p>
-
- <p>The array never shrinks automatically; if an index <c>I</c> has been used
- successfully to set an entry, all indices in the range [0,<c>I</c>] will
- stay accessible unless the array size is explicitly changed by
- calling <seealso marker="#resize-2">resize/2</seealso>.</p>
-
- <p>Examples:
- </p><pre> %% Create a fixed-size array with entries 0-9 set to 'undefined'
- A0 = array:new(10).
- 10 = array:size(A0).
-
- %% Create an extendible array and set entry 17 to 'true',
- %% causing the array to grow automatically
- A1 = array:set(17, true, array:new()).
- 18 = array:size(A1).
-
- %% Read back a stored value
- true = array:get(17, A1).
-
- %% Accessing an unset entry returns the default value
- undefined = array:get(3, A1).
-
- %% Accessing an entry beyond the last set entry also returns the
- %% default value, if the array does not have fixed size
- undefined = array:get(18, A1).
-
- %% "sparse" functions ignore default-valued entries
- A2 = array:set(4, false, A1).
- [{4, false}, {17, true}] = array:sparse_to_orddict(A2).
-
- %% An extendible array can be made fixed-size later
- A3 = array:fix(A2).
-
- %% A fixed-size array does not grow automatically and does not
- %% allow accesses beyond the last set entry
- {'EXIT',{badarg,_}} = (catch array:set(18, true, A3)).
- {'EXIT',{badarg,_}} = (catch array:get(18, A3)).</pre></description>
-<datatypes>
- <datatype>
- <name name="array" n_vars="1"/>
- <desc>
- <p>A functional, extendible array. The representation is
- not documented and is subject to change without notice. Note that
- arrays cannot be directly compared for equality.</p>
- </desc>
- </datatype>
- <datatype>
- <name name="array" n_vars="0"/>
- </datatype>
- <datatype>
- <name name="array_indx"/>
- </datatype>
- <datatype>
- <name name="array_opts"/>
- </datatype>
- <datatype>
- <name name="array_opt"/>
- </datatype>
- <datatype>
- <name name="indx_pairs"/>
- </datatype>
- <datatype>
- <name name="indx_pair"/>
- </datatype>
-</datatypes>
-
-<funcs>
-<func>
-<name name="default" arity="1"/>
-<fsummary>Get the value used for uninitialized entries.</fsummary>
-
-<desc><marker id="default-1"/>
-
-<p>Get the value used for uninitialized entries.
- </p>
-<p><em>See also:</em> <seealso marker="#new-2">new/2</seealso>.</p>
-</desc></func>
-<func>
-<name name="fix" arity="1"/>
-<fsummary>Fix the size of the array.</fsummary>
-
-<desc><marker id="fix-1"/>
-
-<p>Fix the size of the array. This prevents it from growing
- automatically upon insertion; see also <seealso marker="#set-3">set/3</seealso>.</p>
-<p><em>See also:</em> <seealso marker="#relax-1">relax/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="foldl" arity="3"/>
-<fsummary>Fold the elements of the array using the given function and
- initial accumulator value.</fsummary>
-<desc><marker id="foldl-3"/>
-<p>Fold the elements of the array using the given function and
- initial accumulator value. The elements are visited in order from the
- lowest index to the highest. If <c><anno>Function</anno></c> is not a function, the
- call fails with reason <c>badarg</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#foldr-3">foldr/3</seealso>, <seealso marker="#map-2">map/2</seealso>, <seealso marker="#sparse_foldl-3">sparse_foldl/3</seealso>.</p>
-</desc></func>
-<func>
-<name name="foldr" arity="3"/>
-<fsummary>Fold the elements of the array right-to-left using the given
- function and initial accumulator value.</fsummary>
-<desc><marker id="foldr-3"/>
-
-<p>Fold the elements of the array right-to-left using the given
- function and initial accumulator value. The elements are visited in
- order from the highest index to the lowest. If <c><anno>Function</anno></c> is not a
- function, the call fails with reason <c>badarg</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#foldl-3">foldl/3</seealso>, <seealso marker="#map-2">map/2</seealso>.</p>
-</desc></func>
-<func>
-<name name="from_list" arity="1"/>
-<fsummary>Equivalent to from_list(List, undefined).
-</fsummary>
-
-<desc><marker id="from_list-1"/>
-<p>Equivalent to <seealso marker="#from_list-2">from_list(<c><anno>List</anno></c>, undefined)</seealso>.</p>
-</desc></func>
-<func>
-<name name="from_list" arity="2"/>
-<fsummary>Convert a list to an extendible array.</fsummary>
-
-<desc><marker id="from_list-2"/>
-
-<p>Convert a list to an extendible array. <c><anno>Default</anno></c> is used as the value
- for uninitialized entries of the array. If <c><anno>List</anno></c> is not a proper list,
- the call fails with reason <c>badarg</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#new-2">new/2</seealso>, <seealso marker="#to_list-1">to_list/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="from_orddict" arity="1"/>
-<fsummary>Equivalent to from_orddict(Orddict, undefined).
-</fsummary>
-
-<desc><marker id="from_orddict-1"/>
-<p>Equivalent to <seealso marker="#from_orddict-2">from_orddict(<c><anno>Orddict</anno></c>, undefined)</seealso>.</p>
-</desc></func>
-<func>
-<name name="from_orddict" arity="2"/>
-<fsummary>Convert an ordered list of pairs {Index, Value} to a
- corresponding extendible array.</fsummary>
-
-<desc><marker id="from_orddict-2"/>
-
-<p>Convert an ordered list of pairs <c>{Index, <anno>Value</anno>}</c> to a
- corresponding extendible array. <c><anno>Default</anno></c> is used as the value for
- uninitialized entries of the array. If <c><anno>Orddict</anno></c> is not a proper,
- ordered list of pairs whose first elements are nonnegative
- integers, the call fails with reason <c>badarg</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#new-2">new/2</seealso>, <seealso marker="#to_orddict-1">to_orddict/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="get" arity="2"/>
-<fsummary>Get the value of entry I.</fsummary>
-
-<desc><marker id="get-2"/>
-
-<p>Get the value of entry <c><anno>I</anno></c>. If <c><anno>I</anno></c> is not a nonnegative
- integer, or if the array has fixed size and <c><anno>I</anno></c> is larger than the
- maximum index, the call fails with reason <c>badarg</c>.</p>
-
- <p>If the array does not have fixed size, this function will return the
- default value for any index <c><anno>I</anno></c> greater than <c>size(<anno>Array</anno>)-1</c>.</p>
-<p><em>See also:</em> <seealso marker="#set-3">set/3</seealso>.</p>
-</desc></func>
-<func>
-<name name="is_array" arity="1"/>
-<fsummary>Returns true if X appears to be an array, otherwise false.</fsummary>
-
-<desc><marker id="is_array-1"/>
-
-<p>Returns <c>true</c> if <c><anno>X</anno></c> appears to be an array, otherwise <c>false</c>.
- Note that the check is only shallow; there is no guarantee that <c><anno>X</anno></c>
- is a well-formed array representation even if this function returns
- <c>true</c>.</p>
-</desc></func>
-<func>
-<name name="is_fix" arity="1"/>
-<fsummary>Check if the array has fixed size.</fsummary>
-
-<desc><marker id="is_fix-1"/>
-
-<p>Check if the array has fixed size.
- Returns <c>true</c> if the array is fixed, otherwise <c>false</c>.</p>
-<p><em>See also:</em> <seealso marker="#fix-1">fix/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="map" arity="2"/>
-<fsummary>Map the given function onto each element of the array.</fsummary>
-<desc><marker id="map-2"/>
-
-<p>Map the given function onto each element of the array. The
- elements are visited in order from the lowest index to the highest.
- If <c><anno>Function</anno></c> is not a function, the call fails with reason <c>badarg</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#foldl-3">foldl/3</seealso>, <seealso marker="#foldr-3">foldr/3</seealso>, <seealso marker="#sparse_map-2">sparse_map/2</seealso>.</p>
-</desc></func>
-<func>
-<name name="new" arity="0"/>
-<fsummary>Create a new, extendible array with initial size zero.</fsummary>
-
-<desc><marker id="new-0"/>
-
-<p>Create a new, extendible array with initial size zero.</p>
-<p><em>See also:</em> <seealso marker="#new-1">new/1</seealso>, <seealso marker="#new-2">new/2</seealso>.</p>
-</desc></func>
-<func>
-<name name="new" arity="1"/>
-<fsummary>Create a new array according to the given options.</fsummary>
-
-<desc><marker id="new-1"/>
-
-<p>Create a new array according to the given options. By default,
-the array is extendible and has initial size zero. Array indices
-start at 0.</p>
-
- <p><c><anno>Options</anno></c> is a single term or a list of terms, selected from the
- following:
- </p><taglist>
- <tag><c>N::integer() >= 0</c> or <c>{size, N::integer() >= 0}</c></tag>
- <item><p>Specifies the initial size of the array; this also implies
- <c>{fixed, true}</c>. If <c>N</c> is not a nonnegative integer, the call
- fails with reason <c>badarg</c>.</p></item>
- <tag><c>fixed</c> or <c>{fixed, true}</c></tag>
- <item><p>Creates a fixed-size array; see also <seealso marker="#fix-1">fix/1</seealso>.</p></item>
- <tag><c>{fixed, false}</c></tag>
- <item><p>Creates an extendible (non fixed-size) array.</p></item>
- <tag><c>{default, Value}</c></tag>
- <item><p>Sets the default value for the array to <c>Value</c>.</p></item>
- </taglist><p>
-Options are processed in the order they occur in the list, i.e.,
-later options have higher precedence.</p>
-
- <p>The default value is used as the value of uninitialized entries, and
-cannot be changed once the array has been created.</p>
-
- <p>Examples:
- </p><pre> array:new(100)</pre><p> creates a fixed-size array of size 100.
- </p><pre> array:new({default,0})</pre><p> creates an empty, extendible array
- whose default value is 0.
- </p><pre> array:new([{size,10},{fixed,false},{default,-1}])</pre><p> creates an
- extendible array with initial size 10 whose default value is -1.
- </p>
-<p><em>See also:</em> <seealso marker="#fix-1">fix/1</seealso>, <seealso marker="#from_list-2">from_list/2</seealso>, <seealso marker="#get-2">get/2</seealso>, <seealso marker="#new-0">new/0</seealso>, <seealso marker="#new-2">new/2</seealso>, <seealso marker="#set-3">set/3</seealso>.</p>
-</desc></func>
-<func>
-<name name="new" arity="2"/>
-<fsummary>Create a new array according to the given size and options.</fsummary>
-
-<desc><marker id="new-2"/>
-
-<p>Create a new array according to the given size and options. If
- <c><anno>Size</anno></c> is not a nonnegative integer, the call fails with reason
- <c>badarg</c>. By default, the array has fixed size. Note that any size
- specifications in <c><anno>Options</anno></c> will override the <c><anno>Size</anno></c> parameter.</p>
-
- <p>If <c><anno>Options</anno></c> is a list, this is simply equivalent to <c>new([{size,
- <anno>Size</anno>} | <anno>Options</anno>]</c>, otherwise it is equivalent to <c>new([{size, <anno>Size</anno>} |
- [<anno>Options</anno>]]</c>. However, using this function directly is more efficient.</p>
-
- <p>Example:
- </p><pre> array:new(100, {default,0})</pre><p> creates a fixed-size array of size
- 100, whose default value is 0.
- </p>
-<p><em>See also:</em> <seealso marker="#new-1">new/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="relax" arity="1"/>
-<fsummary>Make the array resizable.</fsummary>
-
-<desc><marker id="relax-1"/>
-
-<p>Make the array resizable. (Reverses the effects of <seealso marker="#fix-1">fix/1</seealso>.)</p>
-<p><em>See also:</em> <seealso marker="#fix-1">fix/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="reset" arity="2"/>
-<fsummary>Reset entry I to the default value for the array.</fsummary>
-
-<desc><marker id="reset-2"/>
-
-<p>Reset entry <c><anno>I</anno></c> to the default value for the array.
- If the value of entry <c><anno>I</anno></c> is the default value the array will be
- returned unchanged. Reset will never change size of the array.
- Shrinking can be done explicitly by calling <seealso marker="#resize-2">resize/2</seealso>.</p>
-
- <p>If <c><anno>I</anno></c> is not a nonnegative integer, or if the array has fixed size
- and <c><anno>I</anno></c> is larger than the maximum index, the call fails with reason
- <c>badarg</c>; cf. <seealso marker="#set-3">set/3</seealso>
- </p>
-<p><em>See also:</em> <seealso marker="#new-2">new/2</seealso>, <seealso marker="#set-3">set/3</seealso>.</p>
-</desc></func>
-<func>
-<name name="resize" arity="1"/>
-<fsummary>Change the size of the array to that reported by sparse_size/1.</fsummary>
-
-<desc><marker id="resize-1"/>
-
-<p>Change the size of the array to that reported by <seealso marker="#sparse_size-1">sparse_size/1</seealso>. If the given array has fixed size, the resulting
- array will also have fixed size.</p>
-<p><em>See also:</em> <seealso marker="#resize-2">resize/2</seealso>, <seealso marker="#sparse_size-1">sparse_size/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="resize" arity="2"/>
-<fsummary>Change the size of the array.</fsummary>
-
-<desc><marker id="resize-2"/>
-
-<p>Change the size of the array. If <c><anno>Size</anno></c> is not a nonnegative
- integer, the call fails with reason <c>badarg</c>. If the given array has
- fixed size, the resulting array will also have fixed size.</p>
-</desc></func>
-<func>
-<name name="set" arity="3"/>
-<fsummary>Set entry I of the array to Value.</fsummary>
-
-<desc><marker id="set-3"/>
-
-<p>Set entry <c><anno>I</anno></c> of the array to <c><anno>Value</anno></c>. If <c><anno>I</anno></c> is not a
- nonnegative integer, or if the array has fixed size and <c><anno>I</anno></c> is larger
- than the maximum index, the call fails with reason <c>badarg</c>.</p>
-
- <p>If the array does not have fixed size, and <c><anno>I</anno></c> is greater than
- <c>size(<anno>Array</anno>)-1</c>, the array will grow to size <c><anno>I</anno>+1</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#get-2">get/2</seealso>, <seealso marker="#reset-2">reset/2</seealso>.</p>
-</desc></func>
-<func>
-<name name="size" arity="1"/>
-<fsummary>Get the number of entries in the array.</fsummary>
-
-<desc><marker id="size-1"/>
-
-<p>Get the number of entries in the array. Entries are numbered
- from 0 to <c>size(<anno>Array</anno>)-1</c>; hence, this is also the index of the first
- entry that is guaranteed to not have been previously set.</p>
-<p><em>See also:</em> <seealso marker="#set-3">set/3</seealso>, <seealso marker="#sparse_size-1">sparse_size/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="sparse_foldl" arity="3"/>
-<fsummary>Fold the elements of the array using the given function and
- initial accumulator value, skipping default-valued entries.</fsummary>
-<desc><marker id="sparse_foldl-3"/>
-
-<p>Fold the elements of the array using the given function and
- initial accumulator value, skipping default-valued entries. The
- elements are visited in order from the lowest index to the highest.
- If <c><anno>Function</anno></c> is not a function, the call fails with reason <c>badarg</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#foldl-3">foldl/3</seealso>, <seealso marker="#sparse_foldr-3">sparse_foldr/3</seealso>.</p>
-</desc></func>
-<func>
-<name name="sparse_foldr" arity="3"/>
-<fsummary>Fold the elements of the array right-to-left using the given
- function and initial accumulator value, skipping default-valued
- entries.</fsummary>
-<desc><marker id="sparse_foldr-3"/>
-
-<p>Fold the elements of the array right-to-left using the given
- function and initial accumulator value, skipping default-valued
- entries. The elements are visited in order from the highest index to
- the lowest. If <c><anno>Function</anno></c> is not a function, the call fails with
- reason <c>badarg</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#foldr-3">foldr/3</seealso>, <seealso marker="#sparse_foldl-3">sparse_foldl/3</seealso>.</p>
-</desc></func>
-<func>
-<name name="sparse_map" arity="2"/>
-<fsummary>Map the given function onto each element of the array, skipping
- default-valued entries.</fsummary>
-<desc><marker id="sparse_map-2"/>
-
-<p>Map the given function onto each element of the array, skipping
- default-valued entries. The elements are visited in order from the
- lowest index to the highest. If <c><anno>Function</anno></c> is not a function, the
- call fails with reason <c>badarg</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#map-2">map/2</seealso>.</p>
-</desc></func>
-<func>
-<name name="sparse_size" arity="1"/>
-<fsummary>Get the number of entries in the array up until the last
- non-default valued entry.</fsummary>
-
-<desc><marker id="sparse_size-1"/>
-
-<p>Get the number of entries in the array up until the last
- non-default valued entry. In other words, returns <c>I+1</c> if <c>I</c> is the
- last non-default valued entry in the array, or zero if no such entry
- exists.</p>
-<p><em>See also:</em> <seealso marker="#resize-1">resize/1</seealso>, <seealso marker="#size-1">size/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="sparse_to_list" arity="1"/>
-<fsummary>Converts the array to a list, skipping default-valued entries.</fsummary>
-
-<desc><marker id="sparse_to_list-1"/>
-
-<p>Converts the array to a list, skipping default-valued entries.
- </p>
-<p><em>See also:</em> <seealso marker="#to_list-1">to_list/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="sparse_to_orddict" arity="1"/>
-<fsummary>Convert the array to an ordered list of pairs {Index, Value},
- skipping default-valued entries.</fsummary>
-
-<desc><marker id="sparse_to_orddict-1"/>
-
-<p>Convert the array to an ordered list of pairs <c>{Index, <anno>Value</anno>}</c>,
- skipping default-valued entries.
- </p>
-<p><em>See also:</em> <seealso marker="#to_orddict-1">to_orddict/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="to_list" arity="1"/>
-<fsummary>Converts the array to a list.</fsummary>
-
-<desc><marker id="to_list-1"/>
-
-<p>Converts the array to a list.
- </p>
-<p><em>See also:</em> <seealso marker="#from_list-2">from_list/2</seealso>, <seealso marker="#sparse_to_list-1">sparse_to_list/1</seealso>.</p>
-</desc></func>
-<func>
-<name name="to_orddict" arity="1"/>
-<fsummary>Convert the array to an ordered list of pairs {Index, Value}.</fsummary>
-
-<desc><marker id="to_orddict-1"/>
-
-<p>Convert the array to an ordered list of pairs <c>{Index, <anno>Value</anno>}</c>.
- </p>
-<p><em>See also:</em> <seealso marker="#from_orddict-2">from_orddict/2</seealso>, <seealso marker="#sparse_to_orddict-1">sparse_to_orddict/1</seealso>.</p>
-</desc></func></funcs>
-
+ <title>array</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno>1</docno>
+ <approved></approved>
+ <checked></checked>
+ <date></date>
+ <rev>A</rev>
+ <file>array.xml</file>
+ </header>
+ <module>array</module>
+ <modulesummary>Functional, extendible arrays.</modulesummary>
+ <description>
+ <p>Functional, extendible arrays. Arrays can have fixed size, or can grow
+ automatically as needed. A default value is used for entries that have not
+ been explicitly set.</p>
+
+ <p>Arrays uses <em>zero</em>-based indexing. This is a deliberate design
+ choice and differs from other Erlang data structures, for example,
+ tuples.</p>
+
+ <p>Unless specified by the user when the array is created, the default
+ value is the atom <c>undefined</c>. There is no difference between an
+ unset entry and an entry that has been explicitly set to the same value
+ as the default one (compare
+ <seealso marker="#reset-2"><c>reset/2</c></seealso>). If you need to
+ differentiate between unset and set entries, ensure that the default value
+ cannot be confused with the values of set entries.</p>
+
+ <p>The array never shrinks automatically. If an index <c>I</c> has been used
+ to set an entry successfully, all indices in the range [0,<c>I</c>] stay
+ accessible unless the array size is explicitly changed by calling
+ <seealso marker="#resize-2"><c>resize/2</c></seealso>.</p>
+
+ <p><em>Examples:</em></p>
+
+ <p>Create a fixed-size array with entries 0-9 set to <c>undefined</c>:</p>
+
+ <pre>
+A0 = array:new(10).
+10 = array:size(A0).</pre>
+
+ <p>Create an extendible array and set entry 17 to <c>true</c>, causing the
+ array to grow automatically:</p>
+
+ <pre>
+A1 = array:set(17, true, array:new()).
+18 = array:size(A1).</pre>
+
+ <p>Read back a stored value:</p>
+
+ <pre>
+true = array:get(17, A1).</pre>
+
+ <p>Accessing an unset entry returns default value:</p>
+
+ <pre>
+undefined = array:get(3, A1)</pre>
+
+ <p>Accessing an entry beyond the last set entry also returns the default
+ value, if the array does not have fixed size:</p>
+
+ <pre>
+undefined = array:get(18, A1).</pre>
+
+ <p>"Sparse" functions ignore default-valued entries:</p>
+
+ <pre>
+A2 = array:set(4, false, A1).
+[{4, false}, {17, true}] = array:sparse_to_orddict(A2).</pre>
+
+ <p>An extendible array can be made fixed-size later:</p>
+
+ <pre>
+A3 = array:fix(A2).</pre>
+
+ <p>A fixed-size array does not grow automatically and does not allow
+ accesses beyond the last set entry:</p>
+
+ <pre>
+{'EXIT',{badarg,_}} = (catch array:set(18, true, A3)).
+{'EXIT',{badarg,_}} = (catch array:get(18, A3)).</pre>
+ </description>
+
+ <datatypes>
+ <datatype>
+ <name name="array" n_vars="1"/>
+ <desc>
+ <p>A functional, extendible array. The representation is not documented
+ and is subject to change without notice. Notice that arrays cannot be
+ directly compared for equality.</p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="array" n_vars="0"/>
+ </datatype>
+ <datatype>
+ <name name="array_indx"/>
+ </datatype>
+ <datatype>
+ <name name="array_opts"/>
+ </datatype>
+ <datatype>
+ <name name="array_opt"/>
+ </datatype>
+ <datatype>
+ <name name="indx_pairs"/>
+ </datatype>
+ <datatype>
+ <name name="indx_pair"/>
+ </datatype>
+ </datatypes>
+
+ <funcs>
+ <func>
+ <name name="default" arity="1"/>
+ <fsummary>Get the value used for uninitialized entries.</fsummary>
+ <desc><marker id="default-1"/>
+ <p>Gets the value used for uninitialized entries.</p>
+ <p>See also <seealso marker="#new-2"><c>new/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="fix" arity="1"/>
+ <fsummary>Fix the array size.</fsummary>
+ <desc><marker id="fix-1"/>
+ <p>Fixes the array size. This prevents it from growing automatically
+ upon insertion.</p>
+ <p>See also <seealso marker="#set-3"><c>set/3</c></seealso> and
+ <seealso marker="#relax-1"><c>relax/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="foldl" arity="3"/>
+ <fsummary>Fold the array elements using the specified function and initial
+ accumulator value.</fsummary>
+ <desc><marker id="foldl-3"/>
+ <p>Folds the array elements using the specified function and initial
+ accumulator value. The elements are visited in order from the lowest
+ index to the highest. If <c><anno>Function</anno></c> is not a
+ function, the call fails with reason <c>badarg</c>.</p>
+ <p>See also <seealso marker="#foldr-3"><c>foldr/3</c></seealso>,
+ <seealso marker="#map-2"><c>map/2</c></seealso>,
+ <seealso marker="#sparse_foldl-3"><c>sparse_foldl/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="foldr" arity="3"/>
+ <fsummary>Fold the array elements right-to-left using the specified
+ function and initial accumulator value.</fsummary>
+ <desc><marker id="foldr-3"/>
+ <p>Folds the array elements right-to-left using the specified function
+ and initial accumulator value. The elements are visited in order from
+ the highest index to the lowest. If <c><anno>Function</anno></c> is
+ not a function, the call fails with reason <c>badarg</c>.</p>
+ <p>See also <seealso marker="#foldl-3"><c>foldl/3</c></seealso>,
+ <seealso marker="#map-2"><c>map/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="from_list" arity="1"/>
+ <fsummary>Equivalent to <c>from_list(List, undefined)</c>.</fsummary>
+ <desc><marker id="from_list-1"/>
+ <p>Equivalent to
+ <seealso marker="#from_list-2"><c>from_list(<anno>List</anno>, undefined)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="from_list" arity="2"/>
+ <fsummary>Convert a list to an extendible array.</fsummary>
+ <desc><marker id="from_list-2"/>
+ <p>Converts a list to an extendible array. <c><anno>Default</anno></c>
+ is used as the value for uninitialized entries of the array. If
+ <c><anno>List</anno></c> is not a proper list, the call fails with
+ reason <c>badarg</c>.</p>
+ <p>See also <seealso marker="#new-2"><c>new/2</c></seealso>,
+ <seealso marker="#to_list-1"><c>to_list/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="from_orddict" arity="1"/>
+ <fsummary>Equivalent to <c>from_orddict(Orddict, undefined)</c>.
+ </fsummary>
+ <desc><marker id="from_orddict-1"/>
+ <p>Equivalent to
+ <seealso marker="#from_orddict-2"><c>from_orddict(<anno>Orddict</anno>, undefined)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="from_orddict" arity="2"/>
+ <fsummary>Convert an ordered list of pairs <c>{Index, Value}</c> to a
+ corresponding extendible array.</fsummary>
+ <desc><marker id="from_orddict-2"/>
+ <p>Converts an ordered list of pairs <c>{Index, <anno>Value</anno>}</c>
+ to a corresponding extendible array. <c><anno>Default</anno></c> is
+ used as the value for uninitialized entries of the array. If
+ <c><anno>Orddict</anno></c> is not a proper, ordered list of pairs
+ whose first elements are non-negative integers, the call fails with
+ reason <c>badarg</c>.</p>
+ <p>See also <seealso marker="#new-2"><c>new/2</c></seealso>,
+ <seealso marker="#to_orddict-1"><c>to_orddict/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="get" arity="2"/>
+ <fsummary>Get the value of entry <c>I</c>.</fsummary>
+ <desc><marker id="get-2"/>
+ <p>Gets the value of entry <c><anno>I</anno></c>. If
+ <c><anno>I</anno></c> is not a non-negative integer, or if the array
+ has fixed size and <c><anno>I</anno></c> is larger than the maximum
+ index, the call fails with reason <c>badarg</c>.</p>
+ <p>If the array does not have fixed size, the default value for any
+ index <c><anno>I</anno></c> greater than
+ <c>size(<anno>Array</anno>)-1</c> is returned.</p>
+ <p>See also <seealso marker="#set-3"><c>set/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="is_array" arity="1"/>
+ <fsummary>Returns <c>true</c> if <c>X</c> is an array, otherwise
+ <c>false</c>.</fsummary>
+ <desc><marker id="is_array-1"/>
+ <p>Returns <c>true</c> if <c><anno>X</anno></c> is an array, otherwise
+ <c>false</c>. Notice that the check is only shallow, as there is no
+ guarantee that <c><anno>X</anno></c> is a well-formed array
+ representation even if this function returns <c>true</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="is_fix" arity="1"/>
+ <fsummary>Check if the array has fixed size.</fsummary>
+ <desc><marker id="is_fix-1"/>
+ <p>Checks if the array has fixed size. Returns <c>true</c> if the array
+ is fixed, otherwise <c>false</c>.</p>
+ <p>See also <seealso marker="#fix-1"><c>fix/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="map" arity="2"/>
+ <fsummary>Map the specified function onto each array element.</fsummary>
+ <desc><marker id="map-2"/>
+ <p>Maps the specified function onto each array element. The elements are
+ visited in order from the lowest index to the highest. If
+ <c><anno>Function</anno></c> is not a function, the call fails with
+ reason <c>badarg</c>.</p>
+ <p>See also <seealso marker="#foldl-3"><c>foldl/3</c></seealso>,
+ <seealso marker="#foldr-3"><c>foldr/3</c></seealso>,
+ <seealso marker="#sparse_map-2"><c>sparse_map/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="new" arity="0"/>
+ <fsummary>Create a new, extendible array with initial size zero.
+ </fsummary>
+ <desc><marker id="new-0"/>
+ <p>Creates a new, extendible array with initial size zero.</p>
+ <p>See also <seealso marker="#new-1"><c>new/1</c></seealso>,
+ <seealso marker="#new-2"><c>new/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="new" arity="1"/>
+ <fsummary>Create a new array according to the specified options.
+ </fsummary>
+ <desc><marker id="new-1"/>
+ <p>Creates a new array according to the specified otions. By default,
+ the array is extendible and has initial size zero. Array indices
+ start at <c>0</c>.</p>
+ <p><c><anno>Options</anno></c> is a single term or a list of terms,
+ selected from the following:</p>
+ <taglist>
+ <tag><c>N::integer() >= 0</c> or <c>{size, N::integer() >= 0}</c>
+ </tag>
+ <item><p>Specifies the initial array size; this also implies
+ <c>{fixed, true}</c>. If <c>N</c> is not a non-negative integer, the
+ call fails with reason <c>badarg</c>.</p></item>
+ <tag><c>fixed</c> or <c>{fixed, true}</c></tag>
+ <item><p>Creates a fixed-size array. See also
+ <seealso marker="#fix-1"><c>fix/1</c></seealso>.</p></item>
+ <tag><c>{fixed, false}</c></tag>
+ <item><p>Creates an extendible (non-fixed-size) array.</p></item>
+ <tag><c>{default, Value}</c></tag>
+ <item><p>Sets the default value for the array to <c>Value</c>.</p>
+ </item>
+ </taglist>
+ <p>Options are processed in the order they occur in the list, that is,
+ later options have higher precedence.</p>
+ <p>The default value is used as the value of uninitialized entries, and
+ cannot be changed once the array has been created.</p>
+ <p><em>Examples:</em></p>
+ <pre>
+array:new(100)</pre>
+ <p>creates a fixed-size array of size 100.</p>
+ <pre>
+array:new({default,0})</pre>
+ <p>creates an empty, extendible array whose default value is <c>0</c>.
+ </p>
+ <pre>
+array:new([{size,10},{fixed,false},{default,-1}])</pre>
+ <p>creates an extendible array with initial size 10 whose default value
+ is <c>-1</c>.</p>
+ <p>See also <seealso marker="#fix-1"><c>fix/1</c></seealso>,
+ <seealso marker="#from_list-2"><c>from_list/2</c></seealso>,
+ <seealso marker="#get-2"><c>get/2</c></seealso>,
+ <seealso marker="#new-0"><c>new/0</c></seealso>,
+ <seealso marker="#new-2"><c>new/2</c></seealso>,
+ <seealso marker="#set-3"><c>set/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="new" arity="2"/>
+ <fsummary>Create a new array according to the specified size and options.
+ </fsummary>
+ <desc><marker id="new-2"/>
+ <p>Creates a new array according to the specified size and options. If
+ <c><anno>Size</anno></c> is not a non-negative integer, the call fails
+ with reason <c>badarg</c>. By default, the array has fixed size.
+ Notice that any size specifications in <c><anno>Options</anno></c>
+ override parameter <c><anno>Size</anno></c>.</p>
+ <p>If <c><anno>Options</anno></c> is a list, this is equivalent to
+ <c>new([{size, <anno>Size</anno>} | <anno>Options</anno>]</c>,
+ otherwise it is equivalent to <c>new([{size, <anno>Size</anno>} |
+ [<anno>Options</anno>]]</c>. However, using this function directly is
+ more efficient.</p>
+ <p><em>Example:</em></p>
+ <pre>
+array:new(100, {default,0})</pre>
+ <p>creates a fixed-size array of size 100, whose default value is
+ <c>0</c>.</p>
+ <p>See also <seealso marker="#new-1"><c>new/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="relax" arity="1"/>
+ <fsummary>Make the array resizable.</fsummary>
+ <desc><marker id="relax-1"/>
+ <p>Makes the array resizable. (Reverses the effects of
+ <seealso marker="#fix-1"><c>fix/1</c></seealso>.)</p>
+ <p>See also <seealso marker="#fix-1"><c>fix/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="reset" arity="2"/>
+ <fsummary>Reset entry <c>I</c> to the default value for the array.
+ </fsummary>
+ <desc><marker id="reset-2"/>
+ <p>Resets entry <c><anno>I</anno></c> to the default value for the
+ array. If the value of entry <c><anno>I</anno></c> is the default
+ value, the array is returned unchanged. Reset never changes the array
+ size. Shrinking can be done explicitly by calling
+ <seealso marker="#resize-2"><c>resize/2</c></seealso>.</p>
+ <p>If <c><anno>I</anno></c> is not a non-negative integer, or if the
+ array has fixed size and <c><anno>I</anno></c> is larger than the
+ maximum index, the call fails with reason <c>badarg</c>; compare
+ <seealso marker="#set-3"><c>set/3</c></seealso></p>
+ <p>See also <seealso marker="#new-2"><c>new/2</c></seealso>,
+ <seealso marker="#set-3"><c>set/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="resize" arity="1"/>
+ <fsummary>Change the array size to that reported by <c>sparse_size/1</c>.
+ </fsummary>
+ <desc><marker id="resize-1"/>
+ <p>Changes the array size to that reported by
+ <seealso marker="#sparse_size-1"><c>sparse_size/1</c></seealso>. If
+ the specified array has fixed size, also the resulting array has fixed
+ size.</p>
+ <p>See also <seealso marker="#resize-2"><c>resize/2</c></seealso>,
+ <seealso marker="#sparse_size-1"><c>sparse_size/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="resize" arity="2"/>
+ <fsummary>Change the array size.</fsummary>
+ <desc><marker id="resize-2"/>
+ <p>Change the array size. If <c><anno>Size</anno></c> is not a
+ non-negative integer, the call fails with reason <c>badarg</c>. If
+ the specified array has fixed size, also the resulting array has fixed
+ size.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="set" arity="3"/>
+ <fsummary>Set entry <c>I</c> of the array to <c>Value</c>.</fsummary>
+ <desc><marker id="set-3"/>
+ <p>Sets entry <c><anno>I</anno></c> of the array to
+ <c><anno>Value</anno></c>. If <c><anno>I</anno></c> is not a
+ non-negative integer, or if the array has fixed size and
+ <c><anno>I</anno></c> is larger than the maximum index, the call
+ fails with reason <c>badarg</c>.</p>
+ <p>If the array does not have fixed size, and <c><anno>I</anno></c> is
+ greater than <c>size(<anno>Array</anno>)-1</c>, the array grows to
+ size <c><anno>I</anno>+1</c>.</p>
+ <p>See also <seealso marker="#get-2"><c>get/2</c></seealso>,
+ <seealso marker="#reset-2"><c>reset/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="size" arity="1"/>
+ <fsummary>Get the number of entries in the array.</fsummary>
+ <desc><marker id="size-1"/>
+ <p>Gets the number of entries in the array. Entries are numbered from
+ <c>0</c> to <c>size(<anno>Array</anno>)-1</c>. Hence, this is also the
+ index of the first entry that is guaranteed to not have been
+ previously set.</p>
+ <p>See also <seealso marker="#set-3"><c>set/3</c></seealso>,
+ <seealso marker="#sparse_size-1"><c>sparse_size/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="sparse_foldl" arity="3"/>
+ <fsummary>Fold the array elements using the specified function and initial
+ accumulator value, skipping default-valued entries.</fsummary>
+ <desc><marker id="sparse_foldl-3"/>
+ <p>Folds the array elements using the specified function and initial
+ accumulator value, skipping default-valued entries. The elements are
+ visited in order from the lowest index to the highest. If
+ <c><anno>Function</anno></c> is not a function, the call fails with
+ reason <c>badarg</c>.</p>
+ <p>See also <seealso marker="#foldl-3"><c>foldl/3</c></seealso>,
+ <seealso marker="#sparse_foldr-3"><c>sparse_foldr/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="sparse_foldr" arity="3"/>
+ <fsummary>Fold the array elements right-to-left using the specified
+ function and initial accumulator value, skipping default-valued
+ entries.</fsummary>
+ <desc><marker id="sparse_foldr-3"/>
+ <p>Folds the array elements right-to-left using the specified
+ function and initial accumulator value, skipping default-valued
+ entries. The elements are visited in order from the highest index to
+ the lowest. If <c><anno>Function</anno></c> is not a function, the
+ call fails with reason <c>badarg</c>.</p>
+ <p>See also <seealso marker="#foldr-3"><c>foldr/3</c></seealso>,
+ <seealso marker="#sparse_foldl-3"><c>sparse_foldl/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="sparse_map" arity="2"/>
+ <fsummary>Map the specified function onto each array element, skipping
+ default-valued entries.</fsummary>
+ <desc><marker id="sparse_map-2"/>
+ <p>Maps the specified function onto each array element, skipping
+ default-valued entries. The elements are visited in order from the
+ lowest index to the highest. If <c><anno>Function</anno></c> is not a
+ function, the call fails with reason <c>badarg</c>.</p>
+ <p>See also <seealso marker="#map-2"><c>map/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="sparse_size" arity="1"/>
+ <fsummary>Get the number of entries in the array up until the last
+ non-default-valued entry.</fsummary>
+ <desc><marker id="sparse_size-1"/>
+ <p>Gets the number of entries in the array up until the last
+ non-default-valued entry. That is, returns <c>I+1</c> if <c>I</c> is
+ the last non-default-valued entry in the array, or zero if no such
+ entry exists.</p>
+ <p>See also <seealso marker="#resize-1"><c>resize/1</c></seealso>,
+ <seealso marker="#size-1"><c>size/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="sparse_to_list" arity="1"/>
+ <fsummary>Convert the array to a list, skipping default-valued entries.
+ </fsummary>
+ <desc><marker id="sparse_to_list-1"/>
+ <p>Converts the array to a list, skipping default-valued entries.</p>
+ <p>See also <seealso marker="#to_list-1"><c>to_list/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="sparse_to_orddict" arity="1"/>
+ <fsummary>Convert the array to an ordered list of pairs <c>{Index,
+ Value}</c>, skipping default-valued entries.</fsummary>
+ <desc><marker id="sparse_to_orddict-1"/>
+ <p>Converts the array to an ordered list of pairs <c>{Index,
+ <anno>Value</anno>}</c>, skipping default-valued entries.</p>
+ <p>See also
+ <seealso marker="#to_orddict-1"><c>to_orddict/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="to_list" arity="1"/>
+ <fsummary>Convert the array to a list.</fsummary>
+ <desc><marker id="to_list-1"/>
+ <p>Converts the array to a list.</p>
+ <p>See also <seealso marker="#from_list-2"><c>from_list/2</c></seealso>,
+ <seealso marker="#sparse_to_list-1"><c>sparse_to_list/1</c></seealso>.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="to_orddict" arity="1"/>
+ <fsummary>Convert the array to an ordered list of pairs <c>{Index,
+ Value}</c>.</fsummary>
+ <desc><marker id="to_orddict-1"/>
+ <p>Converts the array to an ordered list of pairs <c>{Index,
+ <anno>Value</anno>}</c>.</p>
+ <p>See also
+ <seealso marker="#from_orddict-2"><c>from_orddict/2</c></seealso>,
+ <seealso marker="#sparse_to_orddict-1"><c>sparse_to_orddict/1</c></seealso>.
+ </p>
+ </desc>
+ </func>
+ </funcs>
</erlref>
diff --git a/lib/stdlib/doc/src/assert_hrl.xml b/lib/stdlib/doc/src/assert_hrl.xml
index ef4f928e57..e2dfc2ab9b 100644
--- a/lib/stdlib/doc/src/assert_hrl.xml
+++ b/lib/stdlib/doc/src/assert_hrl.xml
@@ -28,131 +28,134 @@
<date></date>
<rev></rev>
</header>
- <file>assert.hrl</file>
- <filesummary>Assert Macros</filesummary>
+ <file>assert.hrl.xml</file>
+ <filesummary>Assert macros.</filesummary>
<description>
<p>The include file <c>assert.hrl</c> provides macros for inserting
- assertions in your program code.</p>
- <p>These macros are defined in the Stdlib include file
- <c>assert.hrl</c>. Include the following directive in the module
- from which the function is called:</p>
- <code type="none">
+ assertions in your program code.</p>
+
+ <p>Include the following directive in the module from which the function is
+ called:</p>
+
+ <code type="none">
-include_lib("stdlib/include/assert.hrl").</code>
- <p>When an assertion succeeds, the assert macro yields the atom
- <c>ok</c>. When an assertion fails, an exception of type <c>error</c> is
- instead generated. The associated error term will have the form
- <c>{Macro, Info}</c>, where <c>Macro</c> is the name of the macro, for
- example <c>assertEqual</c>, and <c>Info</c> will be a list of tagged
- values such as <c>[{module, M}, {line, L}, ...]</c> giving more
- information about the location and cause of the exception. All entries
- in the <c>Info</c> list are optional, and you should not rely
- programatically on any of them being present.</p>
-
- <p>If the macro <c>NOASSERT</c> is defined when the <c>assert.hrl</c>
- include file is read by the compiler, the macros will be defined as
- equivalent to the atom <c>ok</c>. The test will not be performed, and
- there will be no cost at runtime.</p>
+
+ <p>When an assertion succeeds, the assert macro yields the atom <c>ok</c>.
+ When an assertion fails, an exception of type <c>error</c> is generated.
+ The associated error term has the form <c>{Macro, Info}</c>. <c>Macro</c>
+ is the macro name, for example, <c>assertEqual</c>. <c>Info</c> is a list
+ of tagged values, such as <c>[{module, M}, {line, L}, ...]</c>, which
+ gives more information about the location and cause of the exception. All
+ entries in the <c>Info</c> list are optional; do not rely programatically
+ on any of them being present.</p>
+
+ <p>If the macro <c>NOASSERT</c> is defined when <c>assert.hrl</c> is read
+ by the compiler, the macros are defined as equivalent to the atom
+ <c>ok</c>. The test is not performed and there is no cost at runtime.</p>
<p>For example, using <c>erlc</c> to compile your modules, the following
- will disable all assertions:</p>
- <code type="none">
+ disable all assertions:</p>
+
+ <code type="none">
erlc -DNOASSERT=true *.erl</code>
- <p>(The value of <c>NOASSERT</c> does not matter, only the fact that it
- is defined.)</p>
+
+ <p>The value of <c>NOASSERT</c> does not matter, only the fact that it is
+ defined.</p>
+
<p>A few other macros also have effect on the enabling or disabling of
- assertions:</p>
+ assertions:</p>
+
<list type="bulleted">
- <item>If <c>NODEBUG</c> is defined, it implies <c>NOASSERT</c>, unless
- <c>DEBUG</c> is also defined, which is assumed to take
- precedence.</item>
- <item>If <c>ASSERT</c> is defined, it overrides <c>NOASSERT</c>, that
- is, the assertions will remain enabled.</item>
+ <item><p>If <c>NODEBUG</c> is defined, it implies <c>NOASSERT</c>, unless
+ <c>DEBUG</c> is also defined, which is assumed to take precedence.</p>
+ </item>
+ <item><p>If <c>ASSERT</c> is defined, it overrides <c>NOASSERT</c>, that
+ is, the assertions remain enabled.</p></item>
</list>
- <p>If you prefer, you can thus use only <c>DEBUG</c>/<c>NODEBUG</c> as
- the main flags to control the behaviour of the assertions (which is
- useful if you have other compiler conditionals or debugging macros
- controlled by those flags), or you can use <c>ASSERT</c>/<c>NOASSERT</c>
- to control only the assert macros.</p>
+ <p>If you prefer, you can thus use only <c>DEBUG</c>/<c>NODEBUG</c> as the
+ main flags to control the behavior of the assertions (which is useful if
+ you have other compiler conditionals or debugging macros controlled by
+ those flags), or you can use <c>ASSERT</c>/<c>NOASSERT</c> to control only
+ the assert macros.</p>
</description>
<section>
<title>Macros</title>
<taglist>
<tag><c>assert(BoolExpr)</c></tag>
- <item><p>Tests that <c>BoolExpr</c> completes normally returning
- <c>true</c>.</p>
+ <item>
+ <p>Tests that <c>BoolExpr</c> completes normally returning
+ <c>true</c>.</p>
</item>
-
<tag><c>assertNot(BoolExpr)</c></tag>
- <item><p>Tests that <c>BoolExpr</c> completes normally returning
- <c>false</c>.</p>
+ <item>
+ <p>Tests that <c>BoolExpr</c> completes normally returning
+ <c>false</c>.</p>
</item>
-
<tag><c>assertMatch(GuardedPattern, Expr)</c></tag>
- <item><p>Tests that <c>Expr</c> completes normally yielding a value
- that matches <c>GuardedPattern</c>. For example:</p>
+ <item>
+ <p>Tests that <c>Expr</c> completes normally yielding a value that
+ matches <c>GuardedPattern</c>, for example:</p>
<code type="none">
- ?assertMatch({bork, _}, f())</code>
- <p>Note that a guard <c>when ...</c> can be included:</p>
+?assertMatch({bork, _}, f())</code>
+ <p>Notice that a guard <c>when ...</c> can be included:</p>
<code type="none">
- ?assertMatch({bork, X} when X > 0, f())</code>
+?assertMatch({bork, X} when X > 0, f())</code>
</item>
-
<tag><c>assertNotMatch(GuardedPattern, Expr)</c></tag>
- <item><p>Tests that <c>Expr</c> completes normally yielding a value
- that does not match <c>GuardedPattern</c>.</p>
- <p>As in <c>assertMatch</c>, <c>GuardedPattern</c> can have a
- <c>when</c> part.</p>
+ <item>
+ <p>Tests that <c>Expr</c> completes normally yielding a value that does
+ not match <c>GuardedPattern</c>.</p>
+ <p>As in <c>assertMatch</c>, <c>GuardedPattern</c> can have a
+ <c>when</c> part.</p>
</item>
-
<tag><c>assertEqual(ExpectedValue, Expr)</c></tag>
- <item><p>Tests that <c>Expr</c> completes normally yielding a value
- that is exactly equal to <c>ExpectedValue</c>.</p>
+ <item>
+ <p>Tests that <c>Expr</c> completes normally yielding a value that is
+ exactly equal to <c>ExpectedValue</c>.</p>
</item>
-
<tag><c>assertNotEqual(ExpectedValue, Expr)</c></tag>
- <item><p>Tests that <c>Expr</c> completes normally yielding a value
- that is not exactly equal to <c>ExpectedValue</c>.</p>
+ <item>
+ <p>Tests that <c>Expr</c> completes normally yielding a value that is
+ not exactly equal to <c>ExpectedValue</c>.</p>
</item>
-
<tag><c>assertException(Class, Term, Expr)</c></tag>
- <item><p>Tests that <c>Expr</c> completes abnormally with an exception
- of type <c>Class</c> and with the associated <c>Term</c>. The
- assertion fails if <c>Expr</c> raises a different exception or if it
- completes normally returning any value.</p>
- <p>Note that both <c>Class</c> and <c>Term</c> can be guarded
- patterns, as in <c>assertMatch</c>.</p>
+ <item>
+ <p>Tests that <c>Expr</c> completes abnormally with an exception of type
+ <c>Class</c> and with the associated <c>Term</c>. The assertion fails
+ if <c>Expr</c> raises a different exception or if it completes
+ normally returning any value.</p>
+ <p>Notice that both <c>Class</c> and <c>Term</c> can be guarded
+ patterns, as in <c>assertMatch</c>.</p>
</item>
-
<tag><c>assertNotException(Class, Term, Expr)</c></tag>
- <item><p>Tests that <c>Expr</c> does not evaluate abnormally with an
- exception of type <c>Class</c> and with the associated <c>Term</c>.
- The assertion succeeds if <c>Expr</c> raises a different exception or
- if it completes normally returning any value.</p>
- <p>As in <c>assertException</c>, both <c>Class</c> and <c>Term</c>
- can be guarded patterns.</p>
+ <item>
+ <p>Tests that <c>Expr</c> does not evaluate abnormally with an
+ exception of type <c>Class</c> and with the associated <c>Term</c>.
+ The assertion succeeds if <c>Expr</c> raises a different exception or
+ if it completes normally returning any value.</p>
+ <p>As in <c>assertException</c>, both <c>Class</c> and <c>Term</c> can
+ be guarded patterns.</p>
</item>
-
<tag><c>assertError(Term, Expr)</c></tag>
- <item><p>Equivalent to <c>assertException(error, Term,
- Expr)</c></p>
+ <item>
+ <p>Equivalent to <c>assertException(error, Term, Expr)</c></p>
</item>
-
<tag><c>assertExit(Term, Expr)</c></tag>
- <item><p>Equivalent to <c>assertException(exit, Term, Expr)</c></p>
+ <item>
+ <p>Equivalent to <c>assertException(exit, Term, Expr)</c></p>
</item>
-
<tag><c>assertThrow(Term, Expr)</c></tag>
- <item><p>Equivalent to <c>assertException(throw, Term, Expr)</c></p>
+ <item>
+ <p>Equivalent to <c>assertException(throw, Term, Expr)</c></p>
</item>
-
</taglist>
</section>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="compiler:compile">compile(3)</seealso></p>
- <p><seealso marker="erts:erlc">erlc(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="compiler:compile"><c>compile(3)</c></seealso>,
+ <seealso marker="erts:erlc"><c>erlc(3)</c></seealso></p>
</section>
</fileref>
diff --git a/lib/stdlib/doc/src/base64.xml b/lib/stdlib/doc/src/base64.xml
index 7b82d7dd3d..cfa1ecc006 100644
--- a/lib/stdlib/doc/src/base64.xml
+++ b/lib/stdlib/doc/src/base64.xml
@@ -27,50 +27,57 @@
<docno></docno>
<date>2007-02-22</date>
<rev></rev>
- <file>base64.sgml</file>
+ <file>base64.xml</file>
</header>
<module>base64</module>
- <modulesummary>Implements base 64 encode and decode, see RFC2045.</modulesummary>
+ <modulesummary>Provides base64 encode and decode, see
+ RFC 2045.</modulesummary>
<description>
- <p>Implements base 64 encode and decode, see RFC2045. </p>
+ <p>Provides base64 encode and decode, see
+ <url href="https://www.ietf.org/rfc/rfc2045.txt">RFC 2045</url>.</p>
</description>
+
<datatypes>
<datatype>
<name name="ascii_string"/>
</datatype>
<datatype>
<name name="ascii_binary"/>
- <desc><p>A <c>binary()</c> with ASCII characters in the range 1 to 255.</p>
+ <desc><p>A <c>binary()</c> with ASCII characters in the range 1 to
+ 255.</p>
</desc>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="encode" arity="1"/>
- <name name="encode_to_string" arity="1"/>
- <fsummary>Encodes data into base64. </fsummary>
- <type variable="Data"/>
- <type variable="Base64" name_i="1"/>
- <type variable="Base64String"/>
- <desc>
- <p>Encodes a plain ASCII string into base64. The result will
- be 33% larger than the data.</p>
- </desc>
- </func>
- <func>
<name name="decode" arity="1"/>
<name name="decode_to_string" arity="1"/>
<name name="mime_decode" arity="1"/>
<name name="mime_decode_to_string" arity="1"/>
- <fsummary>Decodes a base64 encoded string to data. </fsummary>
+ <fsummary>Decode a base64 encoded string to data.</fsummary>
<type variable="Base64" name_i="1"/>
<type variable="Data" name_i="1"/>
<type variable="DataString" name_i="2"/>
<desc>
- <p>Decodes a base64 encoded string to plain ASCII. See RFC4648.
- <c>mime_decode/1</c> and <c>mime_decode_to_string/1</c>
- strips away illegal characters, while <c>decode/1</c> and
- <c>decode_to_string/1</c> only strips away whitespace characters.</p>
+ <p>Decodes a base64-encoded string to plain ASCII. See
+ <url href="https://www.ietf.org/html/rfc4648">RFC 4648</url>.</p>
+ <p><c>mime_decode/1</c> and <c>mime_decode_to_string/1</c> strip away
+ illegal characters, while <c>decode/1</c> and
+ <c>decode_to_string/1</c> only strip away whitespace characters.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="encode" arity="1"/>
+ <name name="encode_to_string" arity="1"/>
+ <fsummary>Encode data into base64.</fsummary>
+ <type variable="Data"/>
+ <type variable="Base64" name_i="1"/>
+ <type variable="Base64String"/>
+ <desc>
+ <p>Encodes a plain ASCII string into base64. The result is 33% larger
+ than the data.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/beam_lib.xml b/lib/stdlib/doc/src/beam_lib.xml
index 7c89c8b43e..d5ec90b060 100644
--- a/lib/stdlib/doc/src/beam_lib.xml
+++ b/lib/stdlib/doc/src/beam_lib.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2000</year><year>2015</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -29,137 +29,159 @@
<rev>PA1</rev>
</header>
<module>beam_lib</module>
- <modulesummary>An Interface To the BEAM File Format</modulesummary>
+ <modulesummary>An interface to the BEAM file format.</modulesummary>
<description>
- <p><c>beam_lib</c> provides an interface to files created by
- the BEAM compiler ("BEAM files"). The format used, a variant of
+ <p>This module provides an interface to files created by
+ the BEAM Compiler ("BEAM files"). The format used, a variant of
"EA IFF 1985" Standard for Interchange Format Files, divides data
into chunks.</p>
+
<p>Chunk data can be returned as binaries or as compound terms.
Compound terms are returned when chunks are referenced by names
- (atoms) rather than identifiers (strings). The names recognized
- and the corresponding identifiers are:</p>
+ (atoms) rather than identifiers (strings). The recognized names
+ and the corresponding identifiers are as follows:</p>
+
<list type="bulleted">
<item><c>abstract_code ("Abst")</c></item>
+ <item><c>atoms ("Atom")</c></item>
<item><c>attributes ("Attr")</c></item>
<item><c>compile_info ("CInf")</c></item>
<item><c>exports ("ExpT")</c></item>
- <item><c>labeled_exports ("ExpT")</c></item>
<item><c>imports ("ImpT")</c></item>
<item><c>indexed_imports ("ImpT")</c></item>
- <item><c>locals ("LocT")</c></item>
+ <item><c>labeled_exports ("ExpT")</c></item>
<item><c>labeled_locals ("LocT")</c></item>
- <item><c>atoms ("Atom")</c></item>
+ <item><c>locals ("LocT")</c></item>
</list>
</description>
<section>
<marker id="debug_info"></marker>
<title>Debug Information/Abstract Code</title>
- <p>The option <c>debug_info</c> can be given to the compiler (see
- <seealso marker="compiler:compile#debug_info">compile(3)</seealso>)
- in order to have debug information in the form of abstract code
- (see <seealso marker="erts:absform">The Abstract Format</seealso>
- in ERTS User's Guide) stored in the <c>abstract_code</c> chunk.
+ <p>Option <c>debug_info</c> can be specified to the Compiler (see
+ <seealso marker="compiler:compile#debug_info"><c>compile(3)</c></seealso>)
+ to have debug information in the form of abstract code (see section
+ <seealso marker="erts:absform">The Abstract Format</seealso> in the
+ ERTS User's Guide) stored in the <c>abstract_code</c> chunk.
Tools such as Debugger and Xref require the debug information to
be included.</p>
+
<warning>
<p>Source code can be reconstructed from the debug information.
- Use encrypted debug information (see below) to prevent this.</p>
+ To prevent this, use encrypted debug information (see below).</p>
</warning>
+
<p>The debug information can also be removed from BEAM files
- using <seealso marker="#strip/1">strip/1</seealso>,
- <seealso marker="#strip_files/1">strip_files/1</seealso> and/or
- <seealso marker="#strip_release/1">strip_release/1</seealso>.</p>
+ using <seealso marker="#strip/1"><c>strip/1</c></seealso>,
+ <seealso marker="#strip_files/1"><c>strip_files/1</c></seealso>, and/or
+ <seealso marker="#strip_release/1"><c>strip_release/1</c></seealso>.</p>
</section>
- <section>
- <title>Reconstructing source code</title>
- <p>Here is an example of how to reconstruct source code from
- the debug information in a BEAM file <c>Beam</c>:</p>
- <code type="none">
- {ok,{_,[{abstract_code,{_,AC}}]}} = beam_lib:chunks(Beam,[abstract_code]).
- io:fwrite("~s~n", [erl_prettypr:format(erl_syntax:form_list(AC))]).</code>
- </section>
- <section>
- <title>Encrypted debug information</title>
- <p>The debug information can be encrypted in order to keep
- the source code secret, but still being able to use tools such as
- Xref or Debugger. </p>
- <p>To use encrypted debug information, a key must be provided to
- the compiler and <c>beam_lib</c>. The key is given as a string and
- it is recommended that it contains at least 32 characters and
- that both upper and lower case letters as well as digits and
- special characters are used.</p>
- <p>The default type -- and currently the only type -- of crypto
- algorithm is <c>des3_cbc</c>, three rounds of DES. The key string
- will be scrambled using <c>erlang:md5/1</c> to generate
- the actual keys used for <c>des3_cbc</c>.</p>
- <note>
- <p>As far as we know by the time of writing, it is
- infeasible to break <c>des3_cbc</c> encryption without any
- knowledge of the key. Therefore, as long as the key is kept
- safe and is unguessable, the encrypted debug information
- <em>should</em> be safe from intruders.</p>
- </note>
- <p>There are two ways to provide the key:</p>
- <list type="ordered">
- <item>
- <p>Use the compiler option <c>{debug_info,Key}</c>, see
- <seealso marker="compiler:compile#debug_info_key">compile(3)</seealso>,
- and the function
- <seealso marker="#crypto_key_fun/1">crypto_key_fun/1</seealso>
- to register a fun which returns the key whenever
- <c>beam_lib</c> needs to decrypt the debug information.</p>
- <p>If no such fun is registered, <c>beam_lib</c> will instead
- search for a <c>.erlang.crypt</c> file, see below.</p>
- </item>
- <item>
- <p>Store the key in a text file named <c>.erlang.crypt</c>.</p>
- <p>In this case, the compiler option <c>encrypt_debug_info</c>
- can be used, see
- <seealso marker="compiler:compile#encrypt_debug_info">compile(3)</seealso>.</p>
- </item>
- </list>
+
+ <section>
+ <title>Reconstruct Source Code</title>
+ <p>The following example shows how to reconstruct source code from
+ the debug information in a BEAM file <c>Beam</c>:</p>
+
+ <code type="none">
+{ok,{_,[{abstract_code,{_,AC}}]}} = beam_lib:chunks(Beam,[abstract_code]).
+io:fwrite("~s~n", [erl_prettypr:format(erl_syntax:form_list(AC))]).</code>
</section>
- <section>
- <title>.erlang.crypt</title>
- <p><c>beam_lib</c> searches for <c>.erlang.crypt</c> in the current
- directory and then the home directory for the current user. If
- the file is found and contains a key, <c>beam_lib</c> will
- implicitly create a crypto key fun and register it.</p>
- <p>The <c>.erlang.crypt</c> file should contain a single list of
- tuples:</p>
- <code type="none">
- {debug_info, Mode, Module, Key}</code>
- <p><c>Mode</c> is the type of crypto algorithm; currently, the only
- allowed value thus is <c>des3_cbc</c>. <c>Module</c> is either an
- atom, in which case <c>Key</c> will only be used for the module
- <c>Module</c>, or <c>[]</c>, in which case <c>Key</c> will be
- used for all modules. <c>Key</c> is the non-empty key string.</p>
- <p>The <c>Key</c> in the first tuple where both <c>Mode</c> and
- <c>Module</c> matches will be used.</p>
- <p>Here is an example of an <c>.erlang.crypt</c> file that returns
- the same key for all modules:</p>
- <code type="none"><![CDATA[
+
+ <section>
+ <title>Encrypted Debug Information</title>
+ <p>The debug information can be encrypted to keep
+ the source code secret, but still be able to use tools such as
+ Debugger or Xref.</p>
+
+ <p>To use encrypted debug information, a key must be provided to
+ the compiler and <c>beam_lib</c>. The key is specified as a string.
+ It is recommended that the string contains at least 32 characters and
+ that both upper and lower case letters as well as digits and
+ special characters are used.</p>
+
+ <p>The default type (and currently the only type) of crypto
+ algorithm is <c>des3_cbc</c>, three rounds of DES. The key string
+ is scrambled using
+ <seealso marker="erts:erlang#md5/1"><c>erlang:md5/1</c></seealso>
+ to generate the keys used for <c>des3_cbc</c>.</p>
+
+ <note>
+ <p>As far as we know by the time of writing, it is
+ infeasible to break <c>des3_cbc</c> encryption without any
+ knowledge of the key. Therefore, as long as the key is kept
+ safe and is unguessable, the encrypted debug information
+ <em>should</em> be safe from intruders.</p>
+ </note>
+
+ <p>The key can be provided in the following two ways:</p>
+
+ <list type="ordered">
+ <item>
+ <p>Use Compiler option <c>{debug_info,Key}</c>, see
+ <seealso marker="compiler:compile#debug_info_key"><c>compile(3)</c></seealso>
+ and function
+ <seealso marker="#crypto_key_fun/1"><c>crypto_key_fun/1</c></seealso>
+ to register a fun that returns the key whenever
+ <c>beam_lib</c> must decrypt the debug information.</p>
+ <p>If no such fun is registered, <c>beam_lib</c> instead
+ searches for an <c>.erlang.crypt</c> file, see the next section.</p>
+ </item>
+ <item>
+ <p>Store the key in a text file named <c>.erlang.crypt</c>.</p>
+ <p>In this case, Compiler option <c>encrypt_debug_info</c>
+ can be used, see
+ <seealso marker="compiler:compile#encrypt_debug_info"><c>compile(3)</c></seealso>.
+ </p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>.erlang.crypt</title>
+ <p><c>beam_lib</c> searches for <c>.erlang.crypt</c> in the current
+ directory and then the home directory for the current user. If
+ the file is found and contains a key, <c>beam_lib</c>
+ implicitly creates a crypto key fun and registers it.</p>
+
+ <p>File <c>.erlang.crypt</c> is to contain a single list of tuples:</p>
+
+ <code type="none">
+{debug_info, Mode, Module, Key}</code>
+
+ <p><c>Mode</c> is the type of crypto algorithm; currently, the only
+ allowed value is <c>des3_cbc</c>. <c>Module</c> is either an
+ atom, in which case <c>Key</c> is only used for the module
+ <c>Module</c>, or <c>[]</c>, in which case <c>Key</c> is
+ used for all modules. <c>Key</c> is the non-empty key string.</p>
+
+ <p><c>Key</c> in the first tuple where both <c>Mode</c> and
+ <c>Module</c> match is used.</p>
+
+ <p>The following is an example of an <c>.erlang.crypt</c> file that returns
+ the same key for all modules:</p>
+
+ <code type="none"><![CDATA[
[{debug_info, des3_cbc, [], "%>7}|pc/DM6Cga*68$Mw]L#&_Gejr]G^"}].]]></code>
- <p>And here is a slightly more complicated example of an
- <c>.erlang.crypt</c> which provides one key for the module
- <c>t</c>, and another key for all other modules:</p>
- <code type="none"><![CDATA[
+
+ <p>The following is a slightly more complicated example of an
+ <c>.erlang.crypt</c> providing one key for module
+ <c>t</c> and another key for all other modules:</p>
+
+ <code type="none"><![CDATA[
[{debug_info, des3_cbc, t, "My KEY"},
{debug_info, des3_cbc, [], "%>7}|pc/DM6Cga*68$Mw]L#&_Gejr]G^"}].]]></code>
- <note>
- <p>Do not use any of the keys in these examples. Use your own
- keys.</p>
- </note>
- </section>
+
+ <note>
+ <p>Do not use any of the keys in these examples. Use your own keys.</p>
+ </note>
+ </section>
<datatypes>
<datatype>
<name name="beam"/>
<desc>
<p>Each of the functions described below accept either the
- module name, the filename, or a binary containing the beam
+ module name, the filename, or a binary containing the BEAM
module.</p>
</desc>
</datatype>
@@ -167,7 +189,7 @@
<name name="chunkdata"/>
<desc>
<p>The list of attributes is sorted on <c>Attribute</c>
- (in attrib_entry()), and each
+ (in <c>attrib_entry()</c>) and each
attribute name occurs once in the list. The attribute values
occur in the same order as in the file. The lists of functions
are also sorted.</p>
@@ -186,8 +208,8 @@
<name name="abst_code"/>
<desc>
<p>It is not checked that the forms conform to the abstract format
- indicated by <c><anno>AbstVersion</anno></c>. <c>no_abstract_code</c> means
- that the <c>"Abst"</c> chunk is present, but empty.</p>
+ indicated by <c><anno>AbstVersion</anno></c>. <c>no_abstract_code</c>
+ means that chunk <c>"Abst"</c> is present, but empty.</p>
</desc>
</datatype>
<datatype>
@@ -230,78 +252,163 @@
<p>Reads chunk data for all chunks.</p>
</desc>
</func>
+
+ <func>
+ <name name="build_module" arity="1"/>
+ <fsummary>Create a BEAM module from a list of chunks.</fsummary>
+ <desc>
+ <p>Builds a BEAM module (as a binary) from a list of chunks.</p>
+ </desc>
+ </func>
+
<func>
<name name="chunks" arity="2"/>
- <fsummary>Read selected chunks from a BEAM file or binary</fsummary>
+ <fsummary>Read selected chunks from a BEAM file or binary.</fsummary>
<desc>
- <p>Reads chunk data for selected chunks refs. The order of
+ <p>Reads chunk data for selected chunks references. The order of
the returned list of chunk data is determined by the order
of the list of chunks references.</p>
</desc>
</func>
+
<func>
<name name="chunks" arity="3"/>
- <fsummary>Read selected chunks from a BEAM file or binary</fsummary>
+ <fsummary>Read selected chunks from a BEAM file or binary.</fsummary>
<desc>
- <p>Reads chunk data for selected chunks refs. The order of
+ <p>Reads chunk data for selected chunks references. The order of
the returned list of chunk data is determined by the order
of the list of chunks references.</p>
- <p>By default, if any requested chunk is missing in <c><anno>Beam</anno></c>,
- an <c>error</c> tuple is returned.
- However, if the option <c>allow_missing_chunks</c> has been given,
- a result will be returned even if chunks are missing.
- In the result list, any missing chunks will be represented as
+ <p>By default, if any requested chunk is missing in
+ <c><anno>Beam</anno></c>, an <c>error</c> tuple is returned.
+ However, if option <c>allow_missing_chunks</c> is specified,
+ a result is returned even if chunks are missing.
+ In the result list, any missing chunks are represented as
<c>{<anno>ChunkRef</anno>,missing_chunk}</c>.
- Note, however, that if the <c>"Atom"</c> chunk if missing, that is
- considered a fatal error and the return value will be an <c>error</c>
+ Notice however that if chunk <c>"Atom"</c> is missing, that is
+ considered a fatal error and the return value is an <c>error</c>
tuple.</p>
</desc>
</func>
+
<func>
- <name name="build_module" arity="1"/>
- <fsummary>Creates a BEAM module from a list of chunks</fsummary>
+ <name name="clear_crypto_key_fun" arity="0"/>
+ <fsummary>Unregister the current crypto key fun.</fsummary>
<desc>
- <p>Builds a BEAM module (as a binary) from a list of chunks.</p>
+ <p>Unregisters the crypto key fun and terminates the process
+ holding it, started by
+ <seealso marker="#crypto_key_fun/1"><c>crypto_key_fun/1</c></seealso>.
+ </p>
+ <p>Returns either <c>{ok, undefined}</c> if no crypto key fun is
+ registered, or <c>{ok, Term}</c>, where <c>Term</c> is
+ the return value from <c>CryptoKeyFun(clear)</c>, see
+ <c>crypto_key_fun/1</c>.</p>
</desc>
</func>
+
<func>
- <name name="version" arity="1"/>
- <fsummary>Read the BEAM file's module version</fsummary>
+ <name name="cmp" arity="2"/>
+ <fsummary>Compare two BEAM files.</fsummary>
+ <type name="cmp_rsn"/>
<desc>
- <p>Returns the module version(s). A version is defined by
- the module attribute <c>-vsn(Vsn)</c>. If this attribute is
- not specified, the version defaults to the checksum of
- the module. Note that if the version <c>Vsn</c> is not a list,
- it is made into one, that is <c>{ok,{Module,[Vsn]}}</c> is
- returned. If there are several <c>-vsn</c> module attributes,
- the result is the concatenated list of versions. Examples:</p>
- <pre>
-1> <input>beam_lib:version(a).</input> % -vsn(1).
-{ok,{a,[1]}}
-2> <input>beam_lib:version(b).</input> % -vsn([1]).
-{ok,{b,[1]}}
-3> <input>beam_lib:version(c).</input> % -vsn([1]). -vsn(2).
-{ok,{c,[1,2]}}
-4> <input>beam_lib:version(d).</input> % no -vsn attribute
-{ok,{d,[275613208176997377698094100858909383631]}}</pre>
+ <p>Compares the contents of two BEAM files. If the module names
+ are the same, and all chunks except for chunk <c>"CInf"</c>
+ (the chunk containing the compilation information that is
+ returned by <c>Module:module_info(compile)</c>)
+ have the same contents in both files,
+ <c>ok</c> is returned. Otherwise an error message is returned.</p>
</desc>
</func>
+
<func>
- <name name="md5" arity="1"/>
- <fsummary>Read the BEAM file's module version</fsummary>
+ <name name="cmp_dirs" arity="2"/>
+ <fsummary>Compare the BEAM files in two directories.</fsummary>
<desc>
- <p>Calculates an MD5 redundancy check for the code of the module
- (compilation date and other attributes are not included).</p>
+ <p>Compares the BEAM files in
+ two directories. Only files with extension <c>".beam"</c> are
+ compared. BEAM files that exist only in directory
+ <c><anno>Dir1</anno></c> (<c><anno>Dir2</anno></c>) are returned in
+ <c><anno>Only1</anno></c> (<c><anno>Only2</anno></c>).
+ BEAM files that exist in both directories but
+ are considered different by <c>cmp/2</c> are returned as
+ pairs {<c><anno>Filename1</anno></c>, <c><anno>Filename2</anno></c>},
+ where <c><anno>Filename1</anno></c> (<c><anno>Filename2</anno></c>)
+ exists in directory <c><anno>Dir1</anno></c>
+ (<c><anno>Dir2</anno></c>).</p>
</desc>
</func>
+
+ <func>
+ <name name="crypto_key_fun" arity="1"/>
+ <fsummary>Register a fun that provides a crypto key.</fsummary>
+ <type name="crypto_fun"/>
+ <type name="crypto_fun_arg"/>
+ <type name="mode"/>
+ <desc>
+ <p>Registers an unary fun
+ that is called if <c>beam_lib</c> must read an
+ <c>abstract_code</c> chunk that has been encrypted. The fun
+ is held in a process that is started by the function.</p>
+ <p>If a fun is already registered when attempting to
+ register a fun, <c>{error, exists}</c> is returned.</p>
+ <p>The fun must handle the following arguments:</p>
+ <code type="none">
+CryptoKeyFun(init) -> ok | {ok, NewCryptoKeyFun} | {error, Term}</code>
+ <p>Called when the fun is registered, in the process that holds
+ the fun. Here the crypto key fun can do any necessary
+ initializations. If <c>{ok, NewCryptoKeyFun}</c> is returned,
+ <c>NewCryptoKeyFun</c> is registered instead of
+ <c>CryptoKeyFun</c>. If <c>{error, Term}</c> is returned,
+ the registration is aborted and <c>crypto_key_fun/1</c>
+ also returns <c>{error, Term}</c>.</p>
+ <code type="none">
+CryptoKeyFun({debug_info, Mode, Module, Filename}) -> Key</code>
+ <p>Called when the key is needed for module <c>Module</c>
+ in the file named <c>Filename</c>. <c>Mode</c> is the type of
+ crypto algorithm; currently, the only possible value is
+ <c>des3_cbc</c>. The call is to fail (raise an exception) if
+ no key is available.</p>
+ <code type="none">
+CryptoKeyFun(clear) -> term()</code>
+ <p>Called before the fun is unregistered. Here any cleaning up
+ can be done. The return value is not important, but is passed
+ back to the caller of <c>clear_crypto_key_fun/0</c> as part
+ of its return value.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="diff_dirs" arity="2"/>
+ <fsummary>Compare the BEAM files in two directories.</fsummary>
+ <desc>
+ <p>Compares the BEAM files in two directories as
+ <seealso marker="#cmp_dirs/2"><c>cmp_dirs/2</c></seealso>, but the
+ names of files that exist in only one directory or are different are
+ presented on standard output.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="format_error" arity="1"/>
+ <fsummary>Return an English description of a BEAM read error reply.
+ </fsummary>
+ <desc>
+ <p>For a specified error returned by any function in this module,
+ this function returns a descriptive string
+ of the error in English. For file errors, function
+ <seealso marker="kernel:file#format_error/1"><c>file:format_error(Posix)</c></seealso>
+ is to be called.</p>
+ </desc>
+ </func>
+
<func>
<name name="info" arity="1"/>
- <fsummary>Information about a BEAM file</fsummary>
+ <fsummary>Information about a BEAM file.</fsummary>
<desc>
<p>Returns a list containing some information about a BEAM file
as tuples <c>{Item, Info}</c>:</p>
<taglist>
- <tag><c>{file, <anno>Filename</anno>} | {binary, <anno>Binary</anno>}</c></tag>
+ <tag><c>{file, <anno>Filename</anno>} | {binary,
+ <anno>Binary</anno>}</c></tag>
<item>
<p>The name (string) of the BEAM file, or the binary from
which the information was extracted.</p>
@@ -310,7 +417,8 @@
<item>
<p>The name (atom) of the module.</p>
</item>
- <tag><c>{chunks, [{<anno>ChunkId</anno>, <anno>Pos</anno>, <anno>Size</anno>}]}</c></tag>
+ <tag><c>{chunks, [{<anno>ChunkId</anno>, <anno>Pos</anno>,
+ <anno>Size</anno>}]}</c></tag>
<item>
<p>For each chunk, the identifier (string) and the position
and size of the chunk data, in bytes.</p>
@@ -318,135 +426,75 @@
</taglist>
</desc>
</func>
+
<func>
- <name name="cmp" arity="2"/>
- <fsummary>Compare two BEAM files</fsummary>
- <type name="cmp_rsn"/>
- <desc>
- <p>Compares the contents of two BEAM files. If the module names
- are the same, and all chunks except for the <c>"CInf"</c> chunk
- (the chunk containing the compilation information which is
- returned by <c>Module:module_info(compile)</c>)
- have the same contents in both files,
- <c>ok</c> is returned. Otherwise an error message is returned.</p>
- </desc>
- </func>
- <func>
- <name name="cmp_dirs" arity="2"/>
- <fsummary>Compare the BEAM files in two directories</fsummary>
- <desc>
- <p>The <c>cmp_dirs/2</c> function compares the BEAM files in
- two directories. Only files with extension <c>".beam"</c> are
- compared. BEAM files that exist in directory <c><anno>Dir1</anno></c>
- (<c><anno>Dir2</anno></c>) only are returned in <c><anno>Only1</anno></c>
- (<c><anno>Only2</anno></c>). BEAM files that exist on both directories but
- are considered different by <c>cmp/2</c> are returned as
- pairs {<c><anno>Filename1</anno></c>, <c><anno>Filename2</anno></c>} where
- <c><anno>Filename1</anno></c> (<c><anno>Filename2</anno></c>) exists in directory
- <c><anno>Dir1</anno></c> (<c><anno>Dir2</anno></c>).</p>
- </desc>
- </func>
- <func>
- <name name="diff_dirs" arity="2"/>
- <fsummary>Compare the BEAM files in two directories</fsummary>
+ <name name="md5" arity="1"/>
+ <fsummary>Read the module version of the BEAM file.</fsummary>
<desc>
- <p>The <c>diff_dirs/2</c> function compares the BEAM files in
- two directories the way <c>cmp_dirs/2</c> does, but names of
- files that exist in only one directory or are different are
- presented on standard output.</p>
+ <p>Calculates an MD5 redundancy check for the code of the module
+ (compilation date and other attributes are not included).</p>
</desc>
</func>
+
<func>
<name name="strip" arity="1"/>
- <fsummary>Removes chunks not needed by the loader from a BEAM file</fsummary>
+ <fsummary>Remove chunks not needed by the loader from a BEAM file.
+ </fsummary>
<desc>
- <p>The <c>strip/1</c> function removes all chunks from a BEAM
+ <p>Removes all chunks from a BEAM
file except those needed by the loader. In particular,
- the debug information (<c>abstract_code</c> chunk) is removed.</p>
+ the debug information (chunk <c>abstract_code</c>) is removed.</p>
</desc>
</func>
+
<func>
<name name="strip_files" arity="1"/>
- <fsummary>Removes chunks not needed by the loader from BEAM files</fsummary>
+ <fsummary>Removes chunks not needed by the loader from BEAM files.
+ </fsummary>
<desc>
- <p>The <c>strip_files/1</c> function removes all chunks except
+ <p>Removes all chunks except
those needed by the loader from BEAM files. In particular,
- the debug information (<c>abstract_code</c> chunk) is removed.
- The returned list contains one element for each given file
- name, in the same order as in <c>Files</c>.</p>
+ the debug information (chunk <c>abstract_code</c>) is removed.
+ The returned list contains one element for each specified filename,
+ in the same order as in <c>Files</c>.</p>
</desc>
</func>
+
<func>
<name name="strip_release" arity="1"/>
- <fsummary>Removes chunks not needed by the loader from all BEAM files of a release</fsummary>
+ <fsummary>Remove chunks not needed by the loader from all BEAM files of
+ a release.</fsummary>
<desc>
- <p>The <c>strip_release/1</c> function removes all chunks
+ <p>Removes all chunks
except those needed by the loader from the BEAM files of a
- release. <c><anno>Dir</anno></c> should be the installation root
+ release. <c><anno>Dir</anno></c> is to be the installation root
directory. For example, the current OTP release can be
stripped with the call
<c>beam_lib:strip_release(code:root_dir())</c>.</p>
</desc>
</func>
+
<func>
- <name name="format_error" arity="1"/>
- <fsummary>Return an English description of a BEAM read error reply</fsummary>
- <desc>
- <p>Given the error returned by any function in this module,
- the function <c>format_error</c> returns a descriptive string
- of the error in English. For file errors, the function
- <c>file:format_error(Posix)</c> should be called.</p>
- </desc>
- </func>
- <func>
- <name name="crypto_key_fun" arity="1"/>
- <fsummary>Register a fun that provides a crypto key</fsummary>
- <type name="crypto_fun"/>
- <type name="crypto_fun_arg"/>
- <type name="mode"/>
- <desc>
- <p>The <c>crypto_key_fun/1</c> function registers a unary fun
- that will be called if <c>beam_lib</c> needs to read an
- <c>abstract_code</c> chunk that has been encrypted. The fun
- is held in a process that is started by the function.</p>
- <p>If there already is a fun registered when attempting to
- register a fun, <c>{error, exists}</c> is returned.</p>
- <p>The fun must handle the following arguments:</p>
- <code type="none">
- CryptoKeyFun(init) -> ok | {ok, NewCryptoKeyFun} | {error, Term}</code>
- <p>Called when the fun is registered, in the process that holds
- the fun. Here the crypto key fun can do any necessary
- initializations. If <c>{ok, NewCryptoKeyFun}</c> is returned
- then <c>NewCryptoKeyFun</c> will be registered instead of
- <c>CryptoKeyFun</c>. If <c>{error, Term}</c> is returned,
- the registration is aborted and <c>crypto_key_fun/1</c>
- returns <c>{error, Term}</c> as well.</p>
- <code type="none">
- CryptoKeyFun({debug_info, Mode, Module, Filename}) -> Key</code>
- <p>Called when the key is needed for the module <c>Module</c>
- in the file named <c>Filename</c>. <c>Mode</c> is the type of
- crypto algorithm; currently, the only possible value thus is
- <c>des3_cbc</c>. The call should fail (raise an exception) if
- there is no key available.</p>
- <code type="none">
- CryptoKeyFun(clear) -> term()</code>
- <p>Called before the fun is unregistered. Here any cleaning up
- can be done. The return value is not important, but is passed
- back to the caller of <c>clear_crypto_key_fun/0</c> as part
- of its return value.</p>
- </desc>
- </func>
- <func>
- <name name="clear_crypto_key_fun" arity="0"/>
- <fsummary>Unregister the current crypto key fun</fsummary>
+ <name name="version" arity="1"/>
+ <fsummary>Read the module version of the BEAM file.</fsummary>
<desc>
- <p>Unregisters the crypto key fun and terminates the process
- holding it, started by <c>crypto_key_fun/1</c>.</p>
- <p>The <c>clear_crypto_key_fun/1</c> either returns
- <c>{ok, undefined}</c> if there was no crypto key fun
- registered, or <c>{ok, Term}</c>, where <c>Term</c> is
- the return value from <c>CryptoKeyFun(clear)</c>, see
- <c>crypto_key_fun/1</c>.</p>
+ <p>Returns the module version or versions. A version is defined by
+ module attribute <c>-vsn(Vsn)</c>. If this attribute is
+ not specified, the version defaults to the checksum of
+ the module. Notice that if version <c>Vsn</c> is not a list,
+ it is made into one, that is <c>{ok,{Module,[Vsn]}}</c> is
+ returned. If there are many <c>-vsn</c> module attributes,
+ the result is the concatenated list of versions.</p>
+ <p><em>Examples:</em></p>
+ <pre>
+1> <input>beam_lib:version(a).</input> % -vsn(1).
+{ok,{a,[1]}}
+2> <input>beam_lib:version(b).</input> % -vsn([1]).
+{ok,{b,[1]}}
+3> <input>beam_lib:version(c).</input> % -vsn([1]). -vsn(2).
+{ok,{c,[1,2]}}
+4> <input>beam_lib:version(d).</input> % no -vsn attribute
+{ok,{d,[275613208176997377698094100858909383631]}}</pre>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/binary.xml b/lib/stdlib/doc/src/binary.xml
index 933157fc34..6a86d6c7ba 100644
--- a/lib/stdlib/doc/src/binary.xml
+++ b/lib/stdlib/doc/src/binary.xml
@@ -35,285 +35,311 @@
<file>binary.xml</file>
</header>
<module>binary</module>
- <modulesummary>Library for handling binary data</modulesummary>
+ <modulesummary>Library for handling binary data.</modulesummary>
<description>
<p>This module contains functions for manipulating byte-oriented
- binaries. Although the majority of functions could be implemented
+ binaries. Although the majority of functions could be provided
using bit-syntax, the functions in this library are highly
optimized and are expected to either execute faster or consume
- less memory (or both) than a counterpart written in pure Erlang.</p>
+ less memory, or both, than a counterpart written in pure Erlang.</p>
- <p>The module is implemented according to the EEP (Erlang Enhancement Proposal) 31.</p>
+ <p>The module is provided according to Erlang Enhancement Proposal
+ (EEP) 31.</p>
<note>
- <p>
- The library handles byte-oriented data. Bitstrings that are not
- binaries (does not contain whole octets of bits) will result in a <c>badarg</c>
- exception being thrown from any of the functions in this
- module.
- </p>
+ <p>The library handles byte-oriented data. For bitstrings that are not
+ binaries (does not contain whole octets of bits) a <c>badarg</c>
+ exception is thrown from any of the functions in this module.</p>
</note>
</description>
+
<datatypes>
<datatype>
<name name="cp"/>
- <desc><p>Opaque data-type representing a compiled
- search-pattern. Guaranteed to be a tuple() to allow programs to
- distinguish it from non precompiled search patterns.</p>
+ <desc><p>Opaque data type representing a compiled
+ search pattern. Guaranteed to be a <c>tuple()</c> to allow programs to
+ distinguish it from non-precompiled search patterns.</p>
</desc>
</datatype>
<datatype>
<name name="part"/>
- <desc><p>A representaion of a part (or range) in a binary. Start is a
- zero-based offset into a binary() and Length is the length of
- that part. As input to functions in this module, a reverse
+ <desc><p>A representaion of a part (or range) in a binary. <c>Start</c> is
+ a zero-based offset into a <c>binary()</c> and <c>Length</c> is the
+ length of that part. As input to functions in this module, a reverse
part specification is allowed, constructed with a negative
- Length, so that the part of the binary begins at Start +
- Length and is -Length long. This is useful for referencing the
- last N bytes of a binary as {size(Binary), -N}. The functions
- in this module always return part()'s with positive Length.</p>
+ <c>Length</c>, so that the part of the binary begins at <c>Start</c> +
+ <c>Length</c> and is -<c>Length</c> long. This is useful for referencing
+ the last <c>N</c> bytes of a binary as <c>{size(Binary), -N}</c>. The
+ functions in this module always return <c>part()</c>s with positive
+ <c>Length</c>.</p>
</desc>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="at" arity="2"/>
- <fsummary>Returns the byte at a specific position in a binary</fsummary>
+ <fsummary>Return the byte at a specific position in a binary.</fsummary>
<desc>
-
- <p>Returns the byte at position <c><anno>Pos</anno></c> (zero-based) in the binary
- <c><anno>Subject</anno></c> as an integer. If <c><anno>Pos</anno></c> &gt;= <c>byte_size(<anno>Subject</anno>)</c>,
- a <c>badarg</c>
- exception is raised.</p>
-
+ <p>Returns the byte at position <c><anno>Pos</anno></c> (zero-based) in
+ binary <c><anno>Subject</anno></c> as an integer. If
+ <c><anno>Pos</anno></c> &gt;= <c>byte_size(<anno>Subject</anno>)</c>,
+ a <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="bin_to_list" arity="1"/>
- <fsummary>Convert a binary to a list of integers</fsummary>
+ <fsummary>Convert a binary to a list of integers.</fsummary>
<desc>
- <p>The same as <c>bin_to_list(<anno>Subject</anno>,{0,byte_size(<anno>Subject</anno>)})</c>.</p>
+ <p>Same as <c>bin_to_list(<anno>Subject</anno>, {0,byte_size(<anno>Subject</anno>)})</c>.</p>
</desc>
</func>
+
<func>
<name name="bin_to_list" arity="2"/>
- <fsummary>Convert a binary to a list of integers</fsummary>
+ <fsummary>Convert a binary to a list of integers.</fsummary>
<desc>
+ <p>Converts <c><anno>Subject</anno></c> to a list of <c>byte()</c>s, each
+ representing the value of one byte. <c>part()</c> denotes which part of
+ the <c>binary()</c> to convert.</p>
- <p>Converts <c><anno>Subject</anno></c> to a list of <c>byte()</c>s, each representing
- the value of one byte. The <c>part()</c> denotes which part of the
- <c>binary()</c> to convert. Example:</p>
+ <p><em>Example:</em></p>
<code>
-1> binary:bin_to_list(&lt;&lt;"erlang"&gt;&gt;,{1,3}).
+1> binary:bin_to_list(&lt;&lt;"erlang"&gt;&gt;, {1,3}).
"rla"
-%% or [114,108,97] in list notation.
-</code>
- <p>If <c><anno>PosLen</anno></c> in any way references outside the binary, a <c>badarg</c> exception is raised.</p>
+%% or [114,108,97] in list notation.</code>
+
+ <p>If <c><anno>PosLen</anno></c> in any way references outside the binary,
+ a <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="bin_to_list" arity="3"/>
- <fsummary>Convert a binary to a list of integers</fsummary>
+ <fsummary>Convert a binary to a list of integers.</fsummary>
<desc>
- <p>The same as<c> bin_to_list(<anno>Subject</anno>,{<anno>Pos</anno>,<anno>Len</anno>})</c>.</p>
+ <p>Same as<c> bin_to_list(<anno>Subject</anno>, {<anno>Pos</anno>, <anno>Len</anno>})</c>.</p>
</desc>
</func>
+
<func>
<name name="compile_pattern" arity="1"/>
- <fsummary>Pre-compiles a binary search pattern</fsummary>
+ <fsummary>Precompile a binary search pattern.</fsummary>
<desc>
-
<p>Builds an internal structure representing a compilation of a
- search-pattern, later to be used in the <seealso marker="#match-3">match/3</seealso>,
- <seealso marker="#matches-3">matches/3</seealso>,
- <seealso marker="#split-3">split/3</seealso> or
- <seealso marker="#replace-4">replace/4</seealso>
- functions. The <c>cp()</c> returned is guaranteed to be a
- <c>tuple()</c> to allow programs to distinguish it from non
- pre-compiled search patterns</p>
-
- <p>When a list of binaries is given, it denotes a set of
- alternative binaries to search for. I.e if
+ search pattern, later to be used in functions
+ <seealso marker="#match-3"><c>match/3</c></seealso>,
+ <seealso marker="#matches-3"><c>matches/3</c></seealso>,
+ <seealso marker="#split-3"><c>split/3</c></seealso>, or
+ <seealso marker="#replace-4"><c>replace/4</c></seealso>.
+ The <c>cp()</c> returned is guaranteed to be a
+ <c>tuple()</c> to allow programs to distinguish it from
+ non-precompiled search patterns.</p>
+
+ <p>When a list of binaries is specified, it denotes a set of
+ alternative binaries to search for. For example, if
<c>[&lt;&lt;"functional"&gt;&gt;,&lt;&lt;"programming"&gt;&gt;]</c>
- is given as <c><anno>Pattern</anno></c>, this
- means "either <c>&lt;&lt;"functional"&gt;&gt;</c> or
+ is specified as <c><anno>Pattern</anno></c>, this
+ means either <c>&lt;&lt;"functional"&gt;&gt;</c> or
<c>&lt;&lt;"programming"&gt;&gt;</c>". The pattern is a set of
- alternatives; when only a single binary is given, the set has
- only one element. The order of alternatives in a pattern is not significant.</p>
-
- <p>The list of binaries used for search alternatives shall be flat and proper.</p>
+ alternatives; when only a single binary is specified, the set has
+ only one element. The order of alternatives in a pattern is
+ not significant.</p>
- <p>If <c><anno>Pattern</anno></c> is not a binary or a flat proper list of binaries with length &gt; 0,
- a <c>badarg</c> exception will be raised.</p>
+ <p>The list of binaries used for search alternatives must be flat and
+ proper.</p>
+ <p>If <c><anno>Pattern</anno></c> is not a binary or a flat proper list of
+ binaries with length &gt; 0, a <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="copy" arity="1"/>
- <fsummary>Creates a duplicate of a binary</fsummary>
+ <fsummary>Create a duplicate of a binary.</fsummary>
<desc>
- <p>The same as <c>copy(<anno>Subject</anno>, 1)</c>.</p>
+ <p>Same as <c>copy(<anno>Subject</anno>, 1)</c>.</p>
</desc>
</func>
+
<func>
<name name="copy" arity="2"/>
- <fsummary>Duplicates a binary N times and creates a new</fsummary>
+ <fsummary>Duplicate a binary <c>N</c> times and create a new.</fsummary>
<desc>
- <p>Creates a binary with the content of <c><anno>Subject</anno></c> duplicated <c><anno>N</anno></c> times.</p>
+ <p>Creates a binary with the content of <c><anno>Subject</anno></c>
+ duplicated <c><anno>N</anno></c> times.</p>
- <p>This function will always create a new binary, even if <c><anno>N</anno> =
- 1</c>. By using <c>copy/1</c> on a binary referencing a larger binary, one
- might free up the larger binary for garbage collection.</p>
+ <p>This function always creates a new binary, even if <c><anno>N</anno> =
+ 1</c>. By using <seealso marker="#copy/1"><c>copy/1</c></seealso>
+ on a binary referencing a larger binary, one
+ can free up the larger binary for garbage collection.</p>
<note>
<p>By deliberately copying a single binary to avoid referencing
- a larger binary, one might, instead of freeing up the larger
+ a larger binary, one can, instead of freeing up the larger
binary for later garbage collection, create much more binary
data than needed. Sharing binary data is usually good. Only in
special cases, when small parts reference large binaries and the
large binaries are no longer used in any process, deliberate
- copying might be a good idea.</p> </note>
+ copying can be a good idea.</p>
+ </note>
- <p>If <c><anno>N</anno></c> &lt; <c>0</c>, a <c>badarg</c> exception is raised.</p>
+ <p>If <c><anno>N</anno></c> &lt; <c>0</c>, a <c>badarg</c> exception is
+ raised.</p>
</desc>
</func>
+
<func>
<name name="decode_unsigned" arity="1"/>
- <fsummary>Decode a whole binary into an integer of arbitrary size</fsummary>
+ <fsummary>Decode a whole binary into an integer of arbitrary size.
+ </fsummary>
<desc>
- <p>The same as <c>decode_unsigned(<anno>Subject</anno>, big)</c>.</p>
+ <p>Same as <c>decode_unsigned(<anno>Subject</anno>, big)</c>.</p>
</desc>
</func>
+
<func>
<name name="decode_unsigned" arity="2"/>
- <fsummary>Decode a whole binary into an integer of arbitrary size</fsummary>
+ <fsummary>Decode a whole binary into an integer of arbitrary size.
+ </fsummary>
<desc>
+ <p>Converts the binary digit representation, in big endian or little
+ endian, of a positive integer in <c><anno>Subject</anno></c> to an Erlang
+ <c>integer()</c>.</p>
- <p>Converts the binary digit representation, in big or little
- endian, of a positive integer in <c><anno>Subject</anno></c> to an Erlang <c>integer()</c>.</p>
-
- <p>Example:</p>
+ <p><em>Example:</em></p>
<code>
1> binary:decode_unsigned(&lt;&lt;169,138,199&gt;&gt;,big).
-11111111
- </code>
+11111111</code>
</desc>
</func>
+
<func>
<name name="encode_unsigned" arity="1"/>
- <fsummary>Encodes an unsigned integer into the minimal binary</fsummary>
+ <fsummary>Encode an unsigned integer into the minimal binary.</fsummary>
<desc>
- <p>The same as <c>encode_unsigned(<anno>Unsigned</anno>, big)</c>.</p>
+ <p>Same as <c>encode_unsigned(<anno>Unsigned</anno>, big)</c>.</p>
</desc>
</func>
+
<func>
<name name="encode_unsigned" arity="2"/>
- <fsummary>Encodes an unsigned integer into the minimal binary</fsummary>
+ <fsummary>Encode an unsigned integer into the minimal binary.</fsummary>
<desc>
-
<p>Converts a positive integer to the smallest possible
- representation in a binary digit representation, either big
+ representation in a binary digit representation, either big endian
or little endian.</p>
- <p>Example:</p>
+ <p><em>Example:</em></p>
<code>
-1> binary:encode_unsigned(11111111,big).
-&lt;&lt;169,138,199&gt;&gt;
- </code>
+1> binary:encode_unsigned(11111111, big).
+&lt;&lt;169,138,199&gt;&gt;</code>
</desc>
</func>
+
<func>
<name name="first" arity="1"/>
- <fsummary>Returns the first byte of a binary</fsummary>
+ <fsummary>Return the first byte of a binary.</fsummary>
<desc>
-
- <p>Returns the first byte of the binary <c><anno>Subject</anno></c> as an integer. If the
- size of <c><anno>Subject</anno></c> is zero, a <c>badarg</c> exception is raised.</p>
-
+ <p>Returns the first byte of binary <c><anno>Subject</anno></c> as an
+ integer. If the size of <c><anno>Subject</anno></c> is zero, a
+ <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="last" arity="1"/>
- <fsummary>Returns the last byte of a binary</fsummary>
+ <fsummary>Return the last byte of a binary.</fsummary>
<desc>
-
- <p>Returns the last byte of the binary <c><anno>Subject</anno></c> as an integer. If the
- size of <c><anno>Subject</anno></c> is zero, a <c>badarg</c> exception is raised.</p>
-
+ <p>Returns the last byte of binary <c><anno>Subject</anno></c> as an
+ integer. If the size of <c><anno>Subject</anno></c> is zero, a
+ <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="list_to_bin" arity="1"/>
- <fsummary>Convert a list of integers and binaries to a binary</fsummary>
+ <fsummary>Convert a list of integers and binaries to a binary.</fsummary>
<desc>
- <p>Works exactly as <c>erlang:list_to_binary/1</c>, added for completeness.</p>
+ <p>Works exactly as
+ <seealso marker="erts:erlang#list_to_binary/1"><c>erlang:list_to_binary/1</c></seealso>,
+ added for completeness.</p>
</desc>
</func>
+
<func>
<name name="longest_common_prefix" arity="1"/>
- <fsummary>Returns length of longest common prefix for a set of binaries</fsummary>
+ <fsummary>Return length of longest common prefix for a set of binaries.
+ </fsummary>
<desc>
-
<p>Returns the length of the longest common prefix of the
- binaries in the list <c><anno>Binaries</anno></c>. Example:</p>
+ binaries in list <c><anno>Binaries</anno></c>.</p>
+
+ <p><em>Example:</em></p>
<code>
-1> binary:longest_common_prefix([&lt;&lt;"erlang"&gt;&gt;,&lt;&lt;"ergonomy"&gt;&gt;]).
+1> binary:longest_common_prefix([&lt;&lt;"erlang"&gt;&gt;, &lt;&lt;"ergonomy"&gt;&gt;]).
2
-2> binary:longest_common_prefix([&lt;&lt;"erlang"&gt;&gt;,&lt;&lt;"perl"&gt;&gt;]).
-0
-</code>
+2> binary:longest_common_prefix([&lt;&lt;"erlang"&gt;&gt;, &lt;&lt;"perl"&gt;&gt;]).
+0</code>
- <p>If <c><anno>Binaries</anno></c> is not a flat list of binaries, a <c>badarg</c> exception is raised.</p>
+ <p>If <c><anno>Binaries</anno></c> is not a flat list of binaries, a
+ <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="longest_common_suffix" arity="1"/>
- <fsummary>Returns length of longest common suffix for a set of binaries</fsummary>
+ <fsummary>Return length of longest common suffix for a set of binaries.
+ </fsummary>
<desc>
-
<p>Returns the length of the longest common suffix of the
- binaries in the list <c><anno>Binaries</anno></c>. Example:</p>
+ binaries in list <c><anno>Binaries</anno></c>.</p>
+
+ <p><em>Example:</em></p>
<code>
-1> binary:longest_common_suffix([&lt;&lt;"erlang"&gt;&gt;,&lt;&lt;"fang"&gt;&gt;]).
+1> binary:longest_common_suffix([&lt;&lt;"erlang"&gt;&gt;, &lt;&lt;"fang"&gt;&gt;]).
3
-2> binary:longest_common_suffix([&lt;&lt;"erlang"&gt;&gt;,&lt;&lt;"perl"&gt;&gt;]).
-0
-</code>
-
- <p>If <c>Binaries</c> is not a flat list of binaries, a <c>badarg</c> exception is raised.</p>
+2> binary:longest_common_suffix([&lt;&lt;"erlang"&gt;&gt;, &lt;&lt;"perl"&gt;&gt;]).
+0</code>
+ <p>If <c>Binaries</c> is not a flat list of binaries, a <c>badarg</c>
+ exception is raised.</p>
</desc>
</func>
+
<func>
<name name="match" arity="2"/>
- <fsummary>Searches for the first match of a pattern in a binary</fsummary>
+ <fsummary>Search for the first match of a pattern in a binary.</fsummary>
<desc>
- <p>The same as <c>match(<anno>Subject</anno>, <anno>Pattern</anno>, [])</c>.</p>
+ <p>Same as <c>match(<anno>Subject</anno>, <anno>Pattern</anno>, [])</c>.
+ </p>
</desc>
</func>
+
<func>
<name name="match" arity="3"/>
- <fsummary>Searches for the first match of a pattern in a binary</fsummary>
+ <fsummary>Search for the first match of a pattern in a binary.</fsummary>
<type name="part"/>
<desc>
+ <p>Searches for the first occurrence of <c><anno>Pattern</anno></c> in
+ <c><anno>Subject</anno></c> and returns the position and length.</p>
- <p>Searches for the first occurrence of <c><anno>Pattern</anno></c> in <c><anno>Subject</anno></c> and
- returns the position and length.</p>
+ <p>The function returns <c>{Pos, Length}</c> for the binary
+ in <c><anno>Pattern</anno></c>, starting at the lowest position in
+ <c><anno>Subject</anno></c>.</p>
- <p>The function will return <c>{Pos, Length}</c> for the binary
- in <c><anno>Pattern</anno></c> starting at the lowest position in
- <c><anno>Subject</anno></c>, Example:</p>
+ <p><em>Example:</em></p>
<code>
-1> binary:match(&lt;&lt;"abcde"&gt;&gt;, [&lt;&lt;"bcde"&gt;&gt;,&lt;&lt;"cd"&gt;&gt;],[]).
-{1,4}
-</code>
+1> binary:match(&lt;&lt;"abcde"&gt;&gt;, [&lt;&lt;"bcde"&gt;&gt;, &lt;&lt;"cd"&gt;&gt;],[]).
+{1,4}</code>
<p>Even though <c>&lt;&lt;"cd"&gt;&gt;</c> ends before
<c>&lt;&lt;"bcde"&gt;&gt;</c>, <c>&lt;&lt;"bcde"&gt;&gt;</c>
@@ -325,41 +351,44 @@
<taglist>
<tag>{scope, {<anno>Start</anno>, <anno>Length</anno>}}</tag>
- <item><p>Only the given part is searched. Return values still have
- offsets from the beginning of <c><anno>Subject</anno></c>. A negative <c>Length</c> is
- allowed as described in the <c>DATA TYPES</c> section of this manual.</p></item>
+ <item><p>Only the specified part is searched. Return values still have
+ offsets from the beginning of <c><anno>Subject</anno></c>. A negative
+ <c>Length</c> is allowed as described in section Data Types in this
+ manual.</p></item>
</taglist>
- <p>If none of the strings in
- <c><anno>Pattern</anno></c> is found, the atom <c>nomatch</c> is returned.</p>
+ <p>If none of the strings in <c><anno>Pattern</anno></c> is found, the
+ atom <c>nomatch</c> is returned.</p>
- <p>For a description of <c><anno>Pattern</anno></c>, see
- <seealso marker="#compile_pattern-1">compile_pattern/1</seealso>.</p>
+ <p>For a description of <c><anno>Pattern</anno></c>, see function
+ <seealso marker="#compile_pattern-1"><c>compile_pattern/1</c></seealso>.
+ </p>
- <p>If <c>{scope, {Start,Length}}</c> is given in the options
- such that <c>Start</c> is larger than the size of
- <c>Subject</c>, <c>Start + Length</c> is less than zero or
- <c>Start + Length</c> is larger than the size of
+ <p>If <c>{scope, {Start,Length}}</c> is specified in the options such
+ that <c>Start</c> &gt; size of <c>Subject</c>, <c>Start</c> +
+ <c>Length</c> &lt; 0 or <c>Start</c> + <c>Length</c> &gt; size of
<c>Subject</c>, a <c>badarg</c> exception is raised.</p>
-
</desc>
</func>
+
<func>
<name name="matches" arity="2"/>
- <fsummary>Searches for all matches of a pattern in a binary</fsummary>
+ <fsummary>Search for all matches of a pattern in a binary.</fsummary>
<desc>
- <p>The same as <c>matches(<anno>Subject</anno>, <anno>Pattern</anno>, [])</c>.</p>
+ <p>Same as <c>matches(<anno>Subject</anno>, <anno>Pattern</anno>, [])</c>.
+ </p>
</desc>
</func>
+
<func>
<name name="matches" arity="3"/>
- <fsummary>Searches for all matches of a pattern in a binary</fsummary>
+ <fsummary>Search for all matches of a pattern in a binary.</fsummary>
<type name="part"/>
<desc>
-
- <p>Works like <c>match/2</c>, but the <c><anno>Subject</anno></c> is searched until
+ <p>As <seealso marker="#match-2"><c>match/2</c></seealso>,
+ but <c><anno>Subject</anno></c> is searched until
exhausted and a list of all non-overlapping parts matching
- <c><anno>Pattern</anno></c> is returned (in order). </p>
+ <c><anno>Pattern</anno></c> is returned (in order).</p>
<p>The first and longest match is preferred to a shorter,
which is illustrated by the following example:</p>
@@ -367,76 +396,84 @@
<code>
1> binary:matches(&lt;&lt;"abcde"&gt;&gt;,
[&lt;&lt;"bcde"&gt;&gt;,&lt;&lt;"bc"&gt;&gt;,&lt;&lt;"de"&gt;&gt;],[]).
-[{1,4}]
-</code>
-
- <p>The result shows that &lt;&lt;"bcde"&gt;&gt; is selected instead of the
- shorter match &lt;&lt;"bc"&gt;&gt; (which would have given raise to one
- more match,&lt;&lt;"de"&gt;&gt;). This corresponds to the behavior of posix
- regular expressions (and programs like awk), but is not
- consistent with alternative matches in re (and Perl), where
+[{1,4}]</code>
+
+ <p>The result shows that &lt;&lt;"bcde"&gt;&gt; is selected instead of
+ the shorter match &lt;&lt;"bc"&gt;&gt; (which would have given raise to
+ one more match, &lt;&lt;"de"&gt;&gt;).
+ This corresponds to the behavior of
+ POSIX regular expressions (and programs like awk), but is not
+ consistent with alternative matches in <c>re</c> (and Perl), where
instead lexical ordering in the search pattern selects which
string matches.</p>
- <p>If none of the strings in pattern is found, an empty list is returned.</p>
-
- <p>For a description of <c><anno>Pattern</anno></c>, see <seealso marker="#compile_pattern-1">compile_pattern/1</seealso> and for a
- description of available options, see <seealso marker="#match-3">match/3</seealso>.</p>
+ <p>If none of the strings in a pattern is found, an empty list is
+ returned.</p>
- <p>If <c>{scope, {<anno>Start</anno>,<anno>Length</anno>}}</c> is given in the options such that
- <c><anno>Start</anno></c> is larger than the size of <c><anno>Subject</anno></c>, <c><anno>Start</anno> + <anno>Length</anno></c> is
- less than zero or <c><anno>Start</anno> + <anno>Length</anno></c> is larger than the size of
- <c><anno>Subject</anno></c>, a <c>badarg</c> exception is raised.</p>
+ <p>For a description of <c><anno>Pattern</anno></c>, see
+ <seealso marker="#compile_pattern-1"><c>compile_pattern/1</c></seealso>.
+ For a description of available options, see
+ <seealso marker="#match-3"><c>match/3</c></seealso>.</p>
+ <p>If <c>{scope, {<anno>Start</anno>,<anno>Length</anno>}}</c> is
+ specified in the options such that <c><anno>Start</anno></c> &gt; size
+ of <c><anno>Subject</anno></c>, <c><anno>Start</anno> +
+ <anno>Length</anno></c> &lt; 0 or <c><anno>Start</anno> +
+ <anno>Length</anno></c> is &gt; size of <c><anno>Subject</anno></c>,
+ a <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="part" arity="2"/>
- <fsummary>Extracts a part of a binary</fsummary>
+ <fsummary>Extract a part of a binary.</fsummary>
<desc>
+ <p>Extracts the part of binary <c><anno>Subject</anno></c> described by
+ <c><anno>PosLen</anno></c>.</p>
- <p>Extracts the part of the binary <c><anno>Subject</anno></c> described by <c><anno>PosLen</anno></c>.</p>
-
- <p>Negative length can be used to extract bytes at the end of a binary:</p>
+ <p>A negative length can be used to extract bytes at the end of a
+ binary:</p>
<code>
1> Bin = &lt;&lt;1,2,3,4,5,6,7,8,9,10&gt;&gt;.
-2> binary:part(Bin,{byte_size(Bin), -5}).
-&lt;&lt;6,7,8,9,10&gt;&gt;
-</code>
+2> binary:part(Bin, {byte_size(Bin), -5}).
+&lt;&lt;6,7,8,9,10&gt;&gt;</code>
<note>
- <p><seealso marker="#part-2">part/2</seealso>and <seealso
- marker="#part-3">part/3</seealso> are also available in the
- <c>erlang</c> module under the names <c>binary_part/2</c> and
+ <p><seealso marker="#part-2">part/2</seealso> and
+ <seealso marker="#part-3">part/3</seealso> are also available in the
+ <seealso marker="erts:erlang"><c>erlang</c></seealso>
+ module under the names <c>binary_part/2</c> and
<c>binary_part/3</c>. Those BIFs are allowed in guard tests.</p>
</note>
- <p>If <c><anno>PosLen</anno></c> in any way references outside the binary, a <c>badarg</c> exception
- is raised.</p>
-
+ <p>If <c><anno>PosLen</anno></c> in any way references outside the binary,
+ a <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="part" arity="3"/>
- <fsummary>Extracts a part of a binary</fsummary>
+ <fsummary>Extract a part of a binary.</fsummary>
<desc>
- <p>The same as <c>part(<anno>Subject</anno>, {<anno>Pos</anno>, <anno>Len</anno>})</c>.</p>
+ <p>Same as <c>part(<anno>Subject</anno>, {<anno>Pos</anno>,
+ <anno>Len</anno>})</c>.</p>
</desc>
</func>
+
<func>
<name name="referenced_byte_size" arity="1"/>
- <fsummary>Determines the size of the actual binary pointed out by a sub-binary</fsummary>
+ <fsummary>Determine the size of the binary pointed out by a subbinary.
+ </fsummary>
<desc>
+ <p>If a binary references a larger binary (often described as
+ being a subbinary), it can be useful to get the size of the
+ referenced binary. This function can be used in a program to trigger the
+ use of <seealso marker="#copy/1"><c>copy/1</c></seealso>. By copying a
+ binary, one can dereference the original, possibly large, binary that a
+ smaller binary is a reference to.</p>
- <p>If a binary references a larger binary (often described as
- being a sub-binary), it can be useful to get the size of the
- actual referenced binary. This function can be used in a program
- to trigger the use of <c>copy/1</c>. By copying a binary, one might
- dereference the original, possibly large, binary which a smaller
- binary is a reference to.</p>
-
- <p>Example:</p>
+ <p><em>Example:</em></p>
<code>
store(Binary, GBSet) ->
@@ -447,26 +484,24 @@ store(Binary, GBSet) ->
_ ->
Binary
end,
- gb_sets:insert(NewBin,GBSet).
- </code>
+ gb_sets:insert(NewBin,GBSet).</code>
<p>In this example, we chose to copy the binary content before
- inserting it in the <c>gb_sets:set()</c> if it references a binary more than
- twice the size of the data we're going to keep. Of course
- different rules for when copying will apply to different
- programs.</p>
+ inserting it in <c>gb_sets:set()</c> if it references a binary more than
+ twice the data size we want to keep. Of course,
+ different rules apply when copying to different programs.</p>
- <p>Binary sharing will occur whenever binaries are taken apart,
- this is the fundamental reason why binaries are fast,
+ <p>Binary sharing occurs whenever binaries are taken apart.
+ This is the fundamental reason why binaries are fast,
decomposition can always be done with O(1) complexity. In rare
circumstances this data sharing is however undesirable, why this
- function together with <c>copy/1</c> might be useful when optimizing
+ function together with <c>copy/1</c> can be useful when optimizing
for memory use.</p>
<p>Example of binary sharing:</p>
<code>
-1> A = binary:copy(&lt;&lt;1&gt;&gt;,100).
+1> A = binary:copy(&lt;&lt;1&gt;&gt;, 100).
&lt;&lt;1,1,1,1,1 ...
2> byte_size(A).
100
@@ -477,141 +512,138 @@ store(Binary, GBSet) ->
5> byte_size(B).
10
6> binary:referenced_byte_size(B)
-100
- </code>
+100</code>
<note>
<p>Binary data is shared among processes. If another process
still references the larger binary, copying the part this
- process uses only consumes more memory and will not free up the
+ process uses only consumes more memory and does not free up the
larger binary for garbage collection. Use this kind of intrusive
- functions with extreme care, and only if a real problem is
- detected.</p>
+ functions with extreme care and only if a real problem is detected.</p>
</note>
-
</desc>
</func>
+
<func>
<name name="replace" arity="3"/>
- <fsummary>Replaces bytes in a binary according to a pattern</fsummary>
+ <fsummary>Replace bytes in a binary according to a pattern.</fsummary>
<desc>
- <p>The same as <c>replace(<anno>Subject</anno>,<anno>Pattern</anno>,<anno>Replacement</anno>,[])</c>.</p>
+ <p>Same as <c>replace(<anno>Subject</anno>, <anno>Pattern</anno>, <anno>Replacement</anno>,[])</c>.</p>
</desc>
</func>
+
<func>
<name name="replace" arity="4"/>
- <fsummary>Replaces bytes in a binary according to a pattern</fsummary>
+ <fsummary>Replace bytes in a binary according to a pattern.</fsummary>
<type_desc variable="OnePos">An integer() =&lt; byte_size(<anno>Replacement</anno>)
</type_desc>
<desc>
-
<p>Constructs a new binary by replacing the parts in
- <c><anno>Subject</anno></c> matching <c><anno>Pattern</anno></c> with the content of
- <c><anno>Replacement</anno></c>.</p>
+ <c><anno>Subject</anno></c> matching <c><anno>Pattern</anno></c> with
+ the content of <c><anno>Replacement</anno></c>.</p>
+
+ <p>If the matching subpart of <c><anno>Subject</anno></c> giving raise
+ to the replacement is to be inserted in the result, option
+ <c>{insert_replaced, <anno>InsPos</anno>}</c> inserts the matching part
+ into <c><anno>Replacement</anno></c> at the specified position (or
+ positions) before inserting <c><anno>Replacement</anno></c> into
+ <c><anno>Subject</anno></c>.</p>
- <p>If the matching sub-part of <c><anno>Subject</anno></c> giving raise to the
- replacement is to be inserted in the result, the option
- <c>{insert_replaced, <anno>InsPos</anno>}</c> will insert the matching part into
- <c><anno>Replacement</anno></c> at the given position (or positions) before actually
- inserting <c><anno>Replacement</anno></c> into the <c><anno>Subject</anno></c>. Example:</p>
+ <p><em>Example:</em></p>
<code>
-1> binary:replace(&lt;&lt;"abcde"&gt;&gt;,&lt;&lt;"b"&gt;&gt;,&lt;&lt;"[]"&gt;&gt;,[{insert_replaced,1}]).
+1> binary:replace(&lt;&lt;"abcde"&gt;&gt;,&lt;&lt;"b"&gt;&gt;,&lt;&lt;"[]"&gt;&gt;, [{insert_replaced,1}]).
&lt;&lt;"a[b]cde"&gt;&gt;
-2> binary:replace(&lt;&lt;"abcde"&gt;&gt;,[&lt;&lt;"b"&gt;&gt;,&lt;&lt;"d"&gt;&gt;],&lt;&lt;"[]"&gt;&gt;,
- [global,{insert_replaced,1}]).
+2> binary:replace(&lt;&lt;"abcde"&gt;&gt;,[&lt;&lt;"b"&gt;&gt;,&lt;&lt;"d"&gt;&gt;],&lt;&lt;"[]"&gt;&gt;,[global,{insert_replaced,1}]).
&lt;&lt;"a[b]c[d]e"&gt;&gt;
-3> binary:replace(&lt;&lt;"abcde"&gt;&gt;,[&lt;&lt;"b"&gt;&gt;,&lt;&lt;"d"&gt;&gt;],&lt;&lt;"[]"&gt;&gt;,
- [global,{insert_replaced,[1,1]}]).
+3> binary:replace(&lt;&lt;"abcde"&gt;&gt;,[&lt;&lt;"b"&gt;&gt;,&lt;&lt;"d"&gt;&gt;],&lt;&lt;"[]"&gt;&gt;,[global,{insert_replaced,[1,1]}]).
&lt;&lt;"a[bb]c[dd]e"&gt;&gt;
-4> binary:replace(&lt;&lt;"abcde"&gt;&gt;,[&lt;&lt;"b"&gt;&gt;,&lt;&lt;"d"&gt;&gt;],&lt;&lt;"[-]"&gt;&gt;,
- [global,{insert_replaced,[1,2]}]).
-&lt;&lt;"a[b-b]c[d-d]e"&gt;&gt;
-</code>
+4> binary:replace(&lt;&lt;"abcde"&gt;&gt;,[&lt;&lt;"b"&gt;&gt;,&lt;&lt;"d"&gt;&gt;],&lt;&lt;"[-]"&gt;&gt;,[global,{insert_replaced,[1,2]}]).
+&lt;&lt;"a[b-b]c[d-d]e"&gt;&gt;</code>
- <p>If any position given in <c><anno>InsPos</anno></c> is greater than the size of the replacement binary, a <c>badarg</c> exception is raised.</p>
+ <p>If any position specified in <c><anno>InsPos</anno></c> &gt; size
+ of the replacement binary, a <c>badarg</c> exception is raised.</p>
- <p>The options <c>global</c> and <c>{scope, part()}</c> work as for <seealso marker="#split-3">split/3</seealso>. The return type is always a <c>binary()</c>.</p>
+ <p>Options <c>global</c> and <c>{scope, part()}</c> work as for
+ <seealso marker="#split-3"><c>split/3</c></seealso>.
+ The return type is always a <c>binary()</c>.</p>
- <p>For a description of <c><anno>Pattern</anno></c>, see <seealso marker="#compile_pattern-1">compile_pattern/1</seealso>.</p>
+ <p>For a description of <c><anno>Pattern</anno></c>, see
+ <seealso marker="#compile_pattern-1"><c>compile_pattern/1</c></seealso>.
+ </p>
</desc>
</func>
+
<func>
<name name="split" arity="2"/>
- <fsummary>Splits a binary according to a pattern</fsummary>
+ <fsummary>Split a binary according to a pattern.</fsummary>
<desc>
- <p>The same as <c>split(<anno>Subject</anno>, <anno>Pattern</anno>, [])</c>.</p>
+ <p>Same as <c>split(<anno>Subject</anno>, <anno>Pattern</anno>,
+ [])</c>.</p>
</desc>
</func>
+
<func>
<name name="split" arity="3"/>
- <fsummary>Splits a binary according to a pattern</fsummary>
+ <fsummary>Split a binary according to a pattern.</fsummary>
<desc>
+ <p>Splits <c><anno>Subject</anno></c> into a list of binaries based on
+ <c><anno>Pattern</anno></c>. If option <c>global</c> is not specified,
+ only the first occurrence of <c><anno>Pattern</anno></c> in
+ <c><anno>Subject</anno></c> gives rise to a split.</p>
- <p>Splits <c><anno>Subject</anno></c> into a list of binaries based on <c><anno>Pattern</anno></c>. If
- the option global is not given, only the first occurrence of
- <c><anno>Pattern</anno></c> in <c><anno>Subject</anno></c> will give rise to a split.</p>
+ <p>The parts of <c><anno>Pattern</anno></c> found in
+ <c><anno>Subject</anno></c> are not included in the result.</p>
- <p>The parts of <c><anno>Pattern</anno></c> actually found in <c><anno>Subject</anno></c> are not included in the result.</p>
-
- <p>Example:</p>
+ <p><em>Example:</em></p>
<code>
1> binary:split(&lt;&lt;1,255,4,0,0,0,2,3&gt;&gt;, [&lt;&lt;0,0,0&gt;&gt;,&lt;&lt;2&gt;&gt;],[]).
[&lt;&lt;1,255,4&gt;&gt;, &lt;&lt;2,3&gt;&gt;]
2> binary:split(&lt;&lt;0,1,0,0,4,255,255,9&gt;&gt;, [&lt;&lt;0,0&gt;&gt;, &lt;&lt;255,255&gt;&gt;],[global]).
-[&lt;&lt;0,1&gt;&gt;,&lt;&lt;4&gt;&gt;,&lt;&lt;9&gt;&gt;]
-</code>
+[&lt;&lt;0,1&gt;&gt;,&lt;&lt;4&gt;&gt;,&lt;&lt;9&gt;&gt;]</code>
<p>Summary of options:</p>
- <taglist>
+ <taglist>
<tag>{scope, part()}</tag>
-
- <item><p>Works as in <seealso marker="#match-3">match/3</seealso> and
- <seealso marker="#matches-3">matches/3</seealso>. Note that
+ <item><p>Works as in <seealso marker="#match-3"><c>match/3</c></seealso>
+ and <seealso marker="#matches-3"><c>matches/3</c></seealso>. Notice that
this only defines the scope of the search for matching strings,
- it does not cut the binary before splitting. The bytes before
- and after the scope will be kept in the result. See example
- below.</p></item>
-
+ it does not cut the binary before splitting. The bytes before and after
+ the scope are kept in the result. See the example below.</p></item>
<tag>trim</tag>
-
- <item><p>Removes trailing empty parts of the result (as does trim in <c>re:split/3</c>)</p></item>
-
+ <item><p>Removes trailing empty parts of the result (as does <c>trim</c>
+ in <seealso marker="re#split/3"><c>re:split/3</c></seealso>.</p></item>
<tag>trim_all</tag>
-
<item><p>Removes all empty parts of the result.</p></item>
-
<tag>global</tag>
-
- <item><p>Repeats the split until the <c><anno>Subject</anno></c> is
- exhausted. Conceptually the global option makes split work on
- the positions returned by <seealso marker="#matches-3">matches/3</seealso>,
- while it normally
- works on the position returned by
- <seealso marker="#match-3">match/3</seealso>.</p></item>
-
+ <item><p>Repeats the split until <c><anno>Subject</anno></c> is
+ exhausted. Conceptually option <c>global</c> makes split work
+ on the positions returned by
+ <seealso marker="#matches-3"><c>matches/3</c></seealso>, while it
+ normally works on the position returned by
+ <seealso marker="#match-3"><c>match/3</c></seealso>.</p></item>
</taglist>
<p>Example of the difference between a scope and taking the
binary apart before splitting:</p>
<code>
-1> binary:split(&lt;&lt;"banana"&gt;&gt;,[&lt;&lt;"a"&gt;&gt;],[{scope,{2,3}}]).
+1> binary:split(&lt;&lt;"banana"&gt;&gt;, [&lt;&lt;"a"&gt;&gt;],[{scope,{2,3}}]).
[&lt;&lt;"ban"&gt;&gt;,&lt;&lt;"na"&gt;&gt;]
-2> binary:split(binary:part(&lt;&lt;"banana"&gt;&gt;,{2,3}),[&lt;&lt;"a"&gt;&gt;],[]).
-[&lt;&lt;"n"&gt;&gt;,&lt;&lt;"n"&gt;&gt;]
-</code>
+2> binary:split(binary:part(&lt;&lt;"banana"&gt;&gt;,{2,3}), [&lt;&lt;"a"&gt;&gt;],[]).
+[&lt;&lt;"n"&gt;&gt;,&lt;&lt;"n"&gt;&gt;]</code>
<p>The return type is always a list of binaries that are all
- referencing <c><anno>Subject</anno></c>. This means that the data in <c><anno>Subject</anno></c> is not
- actually copied to new binaries and that <c><anno>Subject</anno></c> cannot be
- garbage collected until the results of the split are no longer
- referenced.</p>
-
- <p>For a description of <c><anno>Pattern</anno></c>, see <seealso marker="#compile_pattern-1">compile_pattern/1</seealso>.</p>
+ referencing <c><anno>Subject</anno></c>. This means that the data in
+ <c><anno>Subject</anno></c> is not copied to new binaries, and that
+ <c><anno>Subject</anno></c> cannot be garbage collected until the results
+ of the split are no longer referenced.</p>
+ <p>For a description of <c><anno>Pattern</anno></c>, see
+ <seealso marker="#compile_pattern-1"><c>compile_pattern/1</c></seealso>.
+ </p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/book.xml b/lib/stdlib/doc/src/book.xml
index 84ce3f0788..008d7f4319 100644
--- a/lib/stdlib/doc/src/book.xml
+++ b/lib/stdlib/doc/src/book.xml
@@ -27,7 +27,7 @@
<docno></docno>
<date>1997-05-02</date>
<rev>1.3</rev>
- <file>book.sgml</file>
+ <file>book.xml</file>
</header>
<insidecover>
</insidecover>
@@ -48,3 +48,4 @@
<index></index>
</book>
+
diff --git a/lib/stdlib/doc/src/c.xml b/lib/stdlib/doc/src/c.xml
index 9b4a9489c0..92ab59c6b0 100644
--- a/lib/stdlib/doc/src/c.xml
+++ b/lib/stdlib/doc/src/c.xml
@@ -25,270 +25,310 @@
<title>c</title>
<prepared>Joe Armstrong</prepared>
<docno>1</docno>
- <date>96-10-30</date>
+ <date>1996-10-30</date>
<rev>B</rev>
</header>
<module>c</module>
- <modulesummary>Command Interface Module</modulesummary>
+ <modulesummary>Command interface module.</modulesummary>
<description>
- <p>The <c>c</c> module enables users to enter the short form of
+ <p>This module enables users to enter the short form of
some commonly used commands.</p>
<note>
- <p>These functions are are intended for interactive use in
- the Erlang shell only. The module prefix may be omitted.</p>
+ <p>These functions are intended for interactive use in
+ the Erlang shell only. The module prefix can be omitted.</p>
</note>
</description>
+
<funcs>
<func>
<name name="bt" arity="1"/>
- <fsummary>Stack backtrace for a process</fsummary>
+ <fsummary>Stack backtrace for a process.</fsummary>
<desc>
<p>Stack backtrace for a process. Equivalent to
<c>erlang:process_display(<anno>Pid</anno>, backtrace)</c>.</p>
</desc>
</func>
+
<func>
<name name="c" arity="1"/>
<name name="c" arity="2"/>
- <fsummary>Compile and load code in a file</fsummary>
+ <fsummary>Compile and load code in a file.</fsummary>
<desc>
- <p><c>c/1,2</c> compiles and then purges and loads the code for
- a file. <c><anno>Options</anno></c> defaults to []. Compilation is
+ <p>Compiles and then purges and loads the code for a file.
+ <c><anno>Options</anno></c> defaults to <c>[]</c>. Compilation is
equivalent to:</p>
<code type="none">
compile:file(<anno>File</anno>, <anno>Options</anno> ++ [report_errors, report_warnings])</code>
- <p>Note that purging the code means that any processes
+ <p>Notice that purging the code means that any processes
lingering in old code for the module are killed without
- warning. See <c>code/3</c> for more information.</p>
+ warning. For more information, see <c>code/3</c>.</p>
</desc>
</func>
+
<func>
<name name="cd" arity="1"/>
- <fsummary>Change working directory</fsummary>
+ <fsummary>Change working directory.</fsummary>
<desc>
- <p>Changes working directory to <c><anno>Dir</anno></c>, which may be a
+ <p>Changes working directory to <c><anno>Dir</anno></c>, which can be a
relative name, and then prints the name of the new working
directory.</p>
+ <p><em>Example:</em></p>
<pre>
2> <input>cd("../erlang").</input>
/home/ron/erlang</pre>
</desc>
</func>
+
<func>
<name name="flush" arity="0"/>
- <fsummary>Flush any messages sent to the shell</fsummary>
+ <fsummary>Flush any messages sent to the shell.</fsummary>
<desc>
<p>Flushes any messages sent to the shell.</p>
</desc>
</func>
+
<func>
<name name="help" arity="0"/>
- <fsummary>Help information</fsummary>
+ <fsummary>Help information.</fsummary>
<desc>
<p>Displays help information: all valid shell internal commands,
and commands in this module.</p>
</desc>
</func>
+
<func>
<name name="i" arity="0"/>
<name name="ni" arity="0"/>
- <fsummary>Information about the system</fsummary>
+ <fsummary>System information.</fsummary>
<desc>
- <p><c>i/0</c> displays information about the system, listing
+ <p><c>i/0</c> displays system information, listing
information about all processes. <c>ni/0</c> does the same,
but for all nodes the network.</p>
</desc>
</func>
+
<func>
<name name="i" arity="3"/>
- <fsummary>Information about pid &lt;X.Y.Z&gt;</fsummary>
+ <fsummary>Information about pid &lt;X.Y.Z&gt;.</fsummary>
<desc>
<p>Displays information about a process, Equivalent to
- <c>process_info(pid(<anno>X</anno>, <anno>Y</anno>, <anno>Z</anno>))</c>, but location transparent.</p>
+ <c>process_info(pid(<anno>X</anno>, <anno>Y</anno>,
+ <anno>Z</anno>))</c>, but location transparent.</p>
</desc>
</func>
+
<func>
<name name="l" arity="1"/>
- <fsummary>Load or reload module</fsummary>
+ <fsummary>Load or reload a module.</fsummary>
<desc>
<p>Purges and loads, or reloads, a module by calling
<c>code:purge(<anno>Module</anno>)</c> followed by
<c>code:load_file(<anno>Module</anno>)</c>.</p>
- <p>Note that purging the code means that any processes
+ <p>Notice that purging the code means that any processes
lingering in old code for the module are killed without
- warning. See <c>code/3</c> for more information.</p>
+ warning. For more information, see <c>code/3</c>.</p>
</desc>
</func>
+
<func>
<name>lc(Files) -> ok</name>
- <fsummary>Compile a list of files</fsummary>
+ <fsummary>Compile a list of files.</fsummary>
<type>
<v>Files = [File]</v>
- <v>File = <seealso marker="file#type-filename">file:filename()
- </seealso></v>
+ <v>File</v>
</type>
<desc>
- <p>Compiles a list of files by calling <c>compile:file(File, [report_errors, report_warnings])</c> for each <c>File</c>
- in <c>Files</c>.</p>
+ <p>Compiles a list of files by calling
+ <c>compile:file(File, [report_errors, report_warnings])</c> for each
+ <c>File</c> in <c>Files</c>.</p>
+ <p>For information about <c>File</c>, see
+ <seealso marker="file#type-filename"><c>file:filename()</c></seealso>.
+ </p>
</desc>
</func>
+
<func>
<name name="ls" arity="0"/>
- <fsummary>List files in the current directory</fsummary>
+ <fsummary>List files in the current directory.</fsummary>
<desc>
<p>Lists files in the current directory.</p>
</desc>
</func>
+
<func>
<name name="ls" arity="1"/>
- <fsummary>List files in a directory or a single file</fsummary>
+ <fsummary>List files in a directory or a single file.</fsummary>
<desc>
- <p>Lists files in directory <c><anno>Dir</anno></c> or, if Dir is a file, only list it.</p>
+ <p>Lists files in directory <c><anno>Dir</anno></c> or, if <c>Dir</c>
+ is a file, only lists it.</p>
</desc>
</func>
+
<func>
<name name="m" arity="0"/>
- <fsummary>Which modules are loaded</fsummary>
+ <fsummary>Which modules are loaded.</fsummary>
<desc>
<p>Displays information about the loaded modules, including
the files from which they have been loaded.</p>
</desc>
</func>
+
<func>
<name name="m" arity="1"/>
- <fsummary>Information about a module</fsummary>
+ <fsummary>Information about a module.</fsummary>
<desc>
<p>Displays information about <c><anno>Module</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="memory" arity="0"/>
- <fsummary>Memory allocation information</fsummary>
+ <fsummary>Memory allocation information.</fsummary>
<desc>
<p>Memory allocation information. Equivalent to
- <seealso marker="erts:erlang#memory/0"><c>erlang:memory/0</c>
- </seealso>.</p>
+ <seealso marker="erts:erlang#memory/0"><c>erlang:memory/0</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="memory" arity="1" clause_i="1"/>
<name name="memory" arity="1" clause_i="2"/>
- <fsummary>Memory allocation information</fsummary>
+ <fsummary>Memory allocation information.</fsummary>
<desc>
<p>Memory allocation information. Equivalent to
- <seealso marker="erts:erlang#memory/1"><c>erlang:memory/1</c>
- </seealso>.</p>
+ <seealso marker="erts:erlang#memory/1"><c>erlang:memory/1</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="nc" arity="1"/>
<name name="nc" arity="2"/>
- <fsummary>Compile and load code in a file on all nodes</fsummary>
+ <fsummary>Compile and load code in a file on all nodes.</fsummary>
<desc>
<p>Compiles and then loads the code for a file on all nodes.
- <c><anno>Options</anno></c> defaults to []. Compilation is equivalent to:</p>
+ <c><anno>Options</anno></c> defaults to <c>[]</c>.
+ Compilation is equivalent to:</p>
<code type="none">
compile:file(<anno>File</anno>, <anno>Options</anno> ++ [report_errors, report_warnings])</code>
</desc>
</func>
+
<func>
<name name="nl" arity="1"/>
- <fsummary>Load module on all nodes</fsummary>
+ <fsummary>Load module on all nodes.</fsummary>
<desc>
<p>Loads <c><anno>Module</anno></c> on all nodes.</p>
</desc>
</func>
+
<func>
<name name="pid" arity="3"/>
- <fsummary>Convert X,Y,Z to a pid</fsummary>
+ <fsummary>Convert <c>X,Y,Z</c> to a pid.</fsummary>
<desc>
- <p>Converts <c><anno>X</anno></c>, <c><anno>Y</anno></c>, <c><anno>Z</anno></c> to the pid
- <c><![CDATA[<X.Y.Z>]]></c>. This function should only be used when
- debugging.</p>
+ <p>Converts <c><anno>X</anno></c>, <c><anno>Y</anno></c>,
+ <c><anno>Z</anno></c> to pid <c><![CDATA[<X.Y.Z>]]></c>.
+ This function is only to be used when debugging.</p>
</desc>
</func>
+
<func>
<name name="pwd" arity="0"/>
- <fsummary>Print working directory</fsummary>
+ <fsummary>Print working directory.</fsummary>
<desc>
<p>Prints the name of the working directory.</p>
</desc>
</func>
+
<func>
<name name="q" arity="0"/>
- <fsummary>Quit - shorthand for <c>init:stop()</c></fsummary>
+ <fsummary>Quit - shorthand for <c>init:stop()</c>.</fsummary>
<desc>
<p>This function is shorthand for <c>init:stop()</c>, that is,
it causes the node to stop in a controlled fashion.</p>
</desc>
</func>
+
<func>
<name name="regs" arity="0"/>
<name name="nregs" arity="0"/>
- <fsummary>Information about registered processes</fsummary>
+ <fsummary>Information about registered processes.</fsummary>
<desc>
<p><c>regs/0</c> displays information about all registered
processes. <c>nregs/0</c> does the same, but for all nodes
in the network.</p>
</desc>
</func>
+
<func>
<name name="uptime" arity="0"/>
- <fsummary>Print node uptime</fsummary>
+ <fsummary>Print node uptime.</fsummary>
<desc>
- <p>Prints the node uptime (as given by
- <c>erlang:statistics(wall_clock)</c>), in human-readable form.</p>
+ <p>Prints the node uptime (as specified by
+ <c>erlang:statistics(wall_clock)</c>) in human-readable form.</p>
</desc>
</func>
+
<func>
<name>xm(ModSpec) -> void()</name>
- <fsummary>Cross reference check a module</fsummary>
+ <fsummary>Cross-reference check a module.</fsummary>
<type>
<v>ModSpec = Module | Filename</v>
<v>&nbsp;Module = atom()</v>
<v>&nbsp;Filename = string()</v>
</type>
<desc>
- <p>This function finds undefined functions, unused functions,
+ <p>Finds undefined functions, unused functions,
and calls to deprecated functions in a module by calling
<c>xref:m/1</c>.</p>
</desc>
</func>
+
<func>
<name>y(File) -> YeccRet</name>
- <fsummary>Generate an LALR-1 parser</fsummary>
+ <fsummary>Generate an LALR-1 parser.</fsummary>
<type>
- <v>File = name() -- see filename(3)</v>
- <v>YeccRet = -- see yecc:file/2</v>
+ <v>File = name()</v>
+ <v>YeccRet</v>
</type>
<desc>
<p>Generates an LALR-1 parser. Equivalent to:</p>
<code type="none">
yecc:file(File)</code>
+ <p>For information about <c>File = name()</c>, see
+ <seealso marker="filename"><c>filename(3)</c></seealso>.
+ For information about <c>YeccRet</c>, see
+ <seealso marker="parsetools:yecc#file/1"><c>yecc:file/2</c></seealso>.
+ </p>
</desc>
</func>
+
<func>
<name>y(File, Options) -> YeccRet</name>
- <fsummary>Generate an LALR-1 parser</fsummary>
+ <fsummary>Generate an LALR-1 parser.</fsummary>
<type>
- <v>File = name() -- see filename(3)</v>
- <v>Options, YeccRet = -- see yecc:file/2</v>
+ <v>File = name()</v>
+ <v>Options, YeccRet</v>
</type>
<desc>
<p>Generates an LALR-1 parser. Equivalent to:</p>
<code type="none">
yecc:file(File, Options)</code>
+ <p>For information about <c>File = name()</c>, see
+ <seealso marker="filename"><c>filename(3)</c></seealso>.
+ For information about <c>Options</c> and <c>YeccRet</c>, see
+ <seealso marker="parsetools:yecc#file/1"><c>yecc:file/2</c></seealso>.
+ </p>
</desc>
</func>
</funcs>
<section>
<title>See Also</title>
- <p><seealso marker="compiler:compile">compile(3)</seealso>,
- <seealso marker="filename">filename(3)</seealso>,
- <seealso marker="erts:erlang">erlang(3)</seealso>,
- <seealso marker="parsetools:yecc">yecc(3)</seealso>,
- <seealso marker="tools:xref">xref(3)</seealso></p>
+ <p><seealso marker="filename"><c>filename(3)</c></seealso>,
+ <seealso marker="compiler:compile"><c>compile(3)</c></seealso>,
+ <seealso marker="erts:erlang"><c>erlang(3)</c></seealso>,
+ <seealso marker="parsetools:yecc"><c>yecc(3)</c></seealso>,
+ <seealso marker="tools:xref"><c>xref(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/calendar.xml b/lib/stdlib/doc/src/calendar.xml
index 38bf55679e..65b3edcdf6 100644
--- a/lib/stdlib/doc/src/calendar.xml
+++ b/lib/stdlib/doc/src/calendar.xml
@@ -29,20 +29,21 @@
<rev>B</rev>
</header>
<module>calendar</module>
- <modulesummary>Local and universal time, day-of-the-week, date and time conversions</modulesummary>
+ <modulesummary>Local and universal time, day of the week, date and time
+ conversions.</modulesummary>
<description>
<p>This module provides computation of local and universal time,
- day-of-the-week, and several time conversion functions.</p>
+ day of the week, and many time conversion functions.</p>
<p>Time is local when it is adjusted in accordance with the current
time zone and daylight saving. Time is universal when it reflects
the time at longitude zero, without any adjustment for daylight
saving. Universal Coordinated Time (UTC) time is also called
Greenwich Mean Time (GMT).</p>
<p>The time functions <c>local_time/0</c> and
- <c>universal_time/0</c> provided in this module both return date
- and time. The reason for this is that separate functions for date
- and time may result in a date/time combination which is displaced
- by 24 hours. This happens if one of the functions is called
+ <c>universal_time/0</c> in this module both return date
+ and time. The is because separate functions for date
+ and time can result in a date/time combination that is displaced
+ by 24 hours. This occurs if one of the functions is called
before midnight, and the other after midnight. This problem also
applies to the Erlang BIFs <c>date/0</c> and <c>time/0</c>, and
their use is strongly discouraged if a reliable date/time stamp
@@ -56,22 +57,21 @@
<p>The Gregorian calendar in this module is extended back to year 0.
For a given date, the <em>gregorian days</em> is the number of
days up to and including the date specified. Similarly,
- the <em>gregorian seconds</em> for a given date and time, is
- the the number of seconds up to and including the specified date
+ the <em>gregorian seconds</em> for a specified date and time is
+ the number of seconds up to and including the specified date
and time.</p>
<p>For computing differences between epochs in time, use
the functions counting gregorian days or seconds. If epochs are
- given as local time, they must be converted to universal time, in
- order to get the correct value of the elapsed time between epochs.
- Use of the function <c>time_difference/2</c> is discouraged.</p>
- <p>There exists different definitions for the week of the year.
- The calendar module contains a week of the year implementation
- which conforms to the ISO 8601 standard. Since the week number for
- a given date can fall on the previous, the current or on the next
- year it is important to provide the information which year is it
- together with the week number. The function <c>iso_week_number/0</c>
- and <c>iso_week_number/1</c> returns a tuple of the year and the
- week number.</p>
+ specified as local time, they must be converted to universal time
+ to get the correct value of the elapsed time between epochs.
+ Use of function <c>time_difference/2</c> is discouraged.</p>
+ <p>Different definitions exist for the week of the year.
+ This module contains a week of the year implementation
+ conforming to the ISO 8601 standard. As the week number for a
+ specified date can fall on the previous, the current, or on the next
+ year, it is important to specify both the year and the week number.
+ Functions <c>iso_week_number/0</c> and <c>iso_week_number/1</c>
+ return a tuple of the year and the week number.</p>
</description>
<datatypes>
@@ -86,9 +86,9 @@
</datatype>
<datatype>
<name name="year"/>
- <desc><p>Year cannot be abbreviated. Example: 93 denotes year
- 93, not 1993. Valid range depends on the underlying OS. The
- date tuple must denote a valid date.</p>
+ <desc><p>Year cannot be abbreviated. For example, 93 denotes year
+ 93, not 1993. The valid range depends on the underlying operating
+ system. The date tuple must denote a valid date.</p>
</desc>
</datatype>
<datatype>
@@ -130,186 +130,221 @@
<func>
<name name="date_to_gregorian_days" arity="1"/>
<name name="date_to_gregorian_days" arity="3"/>
- <fsummary>Compute the number of days from year 0 up to the given date</fsummary>
+ <fsummary>Compute the number of days from year 0 up to the specified
+ date.</fsummary>
<type variable="Date" name_i="1"/>
<type variable="Year"/>
<type variable="Month"/>
<type variable="Day"/>
<desc>
- <p>This function computes the number of gregorian days starting
- with year 0 and ending at the given date.</p>
+ <p>Computes the number of gregorian days starting
+ with year 0 and ending at the specified date.</p>
</desc>
</func>
+
<func>
<name name="datetime_to_gregorian_seconds" arity="1"/>
- <fsummary>Compute the number of seconds from year 0 up to the given date and time</fsummary>
+ <fsummary>Compute the number of seconds from year 0 up to the specified
+ date and time.</fsummary>
<desc>
- <p>This function computes the number of gregorian seconds
- starting with year 0 and ending at the given date and time.</p>
+ <p>Computes the number of gregorian seconds starting
+ with year 0 and ending at the specified date and time.</p>
</desc>
</func>
+
<func>
<name name="day_of_the_week" arity="1"/>
<name name="day_of_the_week" arity="3"/>
- <fsummary>Compute the day of the week</fsummary>
+ <fsummary>Compute the day of the week.</fsummary>
<type variable="Date" name_i="1"/>
<type variable="Year"/>
<type variable="Month"/>
<type variable="Day"/>
<desc>
- <p>This function computes the day of the week given <c><anno>Year</anno></c>,
- <c><anno>Month</anno></c> and <c><anno>Day</anno></c>. The return value denotes the day
- of the week as <c>1</c>: Monday, <c>2</c>: Tuesday, and so on.</p>
+ <p>Computes the day of the week from the specified
+ <c><anno>Year</anno></c>, <c><anno>Month</anno></c>, and
+ <c><anno>Day</anno></c>. Returns the day of the week as
+ <c>1</c>: Monday, <c>2</c>: Tuesday, and so on.</p>
</desc>
</func>
+
<func>
<name name="gregorian_days_to_date" arity="1"/>
- <fsummary>Compute the date given the number of gregorian days</fsummary>
+ <fsummary>Compute the date from the number of gregorian days.</fsummary>
<desc>
- <p>This function computes the date given the number of
- gregorian days.</p>
+ <p>Computes the date from the specified number of gregorian days.</p>
</desc>
</func>
+
<func>
<name name="gregorian_seconds_to_datetime" arity="1"/>
- <fsummary>Compute the date given the number of gregorian days</fsummary>
+ <fsummary>Compute the date and time from the number of gregorian seconds.
+ </fsummary>
<desc>
- <p>This function computes the date and time from the given
+ <p>Computes the date and time from the specified
number of gregorian seconds.</p>
</desc>
</func>
+
<func>
<name name="is_leap_year" arity="1"/>
- <fsummary>Check if a year is a leap year</fsummary>
+ <fsummary>Check if the year is a leap year.</fsummary>
<desc>
- <p>This function checks if a year is a leap year.</p>
+ <p>Checks if the specified year is a leap year.</p>
</desc>
</func>
+
<func>
<name name="iso_week_number" arity="0"/>
- <fsummary>Compute the iso week number for the actual date</fsummary>
+ <fsummary>Compute the ISO week number for the actual date.</fsummary>
<desc>
- <p>This function returns the tuple {Year, WeekNum} representing
- the iso week number for the actual date. For determining the
- actual date, the function <c>local_time/0</c> is used.</p>
+ <p>Returns tuple <c>{Year, WeekNum}</c> representing
+ the ISO week number for the actual date. To determine the
+ actual date, use function
+ <seealso marker="#local_time/0"><c>local_time/0</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="iso_week_number" arity="1"/>
- <fsummary>Compute the iso week number for the given date</fsummary>
+ <fsummary>Compute the ISO week number for the specified date.</fsummary>
<desc>
- <p>This function returns the tuple {Year, WeekNum} representing
- the iso week number for the given date.</p>
+ <p>Returns tuple <c>{Year, WeekNum}</c> representing
+ the ISO week number for the specified date.</p>
</desc>
</func>
+
<func>
<name name="last_day_of_the_month" arity="2"/>
- <fsummary>Compute the number of days in a month</fsummary>
+ <fsummary>Compute the number of days in a month.</fsummary>
<desc>
- <p>This function computes the number of days in a month.</p>
+ <p>Computes the number of days in a month.</p>
</desc>
</func>
+
<func>
<name name="local_time" arity="0"/>
- <fsummary>Compute local time</fsummary>
+ <fsummary>Compute local time.</fsummary>
<desc>
- <p>This function returns the local time reported by
+ <p>Returns the local time reported by
the underlying operating system.</p>
</desc>
</func>
+
<func>
<name name="local_time_to_universal_time" arity="1"/>
- <fsummary>Convert from local time to universal time (deprecated)</fsummary>
+ <fsummary>Convert from local time to universal time (deprecated).
+ </fsummary>
<desc>
- <p>This function converts from local time to Universal
- Coordinated Time (UTC). <c><anno>DateTime1</anno></c> must refer to a local
+ <p>Converts from local time to Universal Coordinated Time (UTC).
+ <c><anno>DateTime1</anno></c> must refer to a local
date after Jan 1, 1970.</p>
<warning>
<p>This function is deprecated. Use
- <c>local_time_to_universal_time_dst/1</c> instead, as it
- gives a more correct and complete result. Especially for
- the period that does not exist since it gets skipped during
+ <seealso marker="#local_time_to_universal_time_dst/1">
+ <c>local_time_to_universal_time_dst/1</c></seealso>
+ instead, as it gives a more correct and complete result.
+ Especially for
+ the period that does not exist, as it is skipped during
the switch <em>to</em> daylight saving time, this function
still returns a result.</p>
</warning>
</desc>
</func>
+
<func>
<name name="local_time_to_universal_time_dst" arity="1"/>
- <fsummary>Convert from local time to universal time(s)</fsummary>
+ <fsummary>Convert from local time to universal time(s).</fsummary>
<desc>
- <p>This function converts from local time to Universal
- Coordinated Time (UTC). <c><anno>DateTime1</anno></c> must refer to a local
+ <p>Converts from local time to Universal Coordinated Time (UTC).
+ <c><anno>DateTime1</anno></c> must refer to a local
date after Jan 1, 1970.</p>
- <p>The return value is a list of 0, 1 or 2 possible UTC times:</p>
+ <p>The return value is a list of 0, 1, or 2 possible UTC times:</p>
<taglist>
<tag><c>[]</c></tag>
<item>
<p>For a local <c>{Date1, Time1}</c> during the period that
is skipped when switching <em>to</em> daylight saving
- time, there is no corresponding UTC since the local time
- is illegal - it has never happened.</p>
+ time, there is no corresponding UTC, as the local time
+ is illegal (it has never occured).</p>
</item>
<tag><c>[DstDateTimeUTC, DateTimeUTC]</c></tag>
<item>
<p>For a local <c>{Date1, Time1}</c> during the period that
is repeated when switching <em>from</em> daylight saving
- time, there are two corresponding UTCs. One for the first
+ time, two corresponding UTCs exist; one for the first
instance of the period when daylight saving time is still
active, and one for the second instance.</p>
</item>
<tag><c>[DateTimeUTC]</c></tag>
<item>
- <p>For all other local times there is only one
- corresponding UTC.</p>
+ <p>For all other local times only one corresponding UTC exists.</p>
</item>
</taglist>
</desc>
</func>
+
+ <func>
+ <name name="now_to_datetime" arity="1"/>
+ <fsummary>Convert now to date and time.</fsummary>
+ <desc>
+ <p>Returns Universal Coordinated Time (UTC)
+ converted from the return value from
+ <seealso marker="erts:erlang#timestamp/0"><c>erlang:timestamp/0</c></seealso>.
+ </p>
+ </desc>
+ </func>
+
<func>
<name name="now_to_local_time" arity="1"/>
- <fsummary>Convert now to local date and time</fsummary>
+ <fsummary>Convert now to local date and time.</fsummary>
<desc>
- <p>This function returns local date and time converted from
- the return value from
- <seealso marker="erts:erlang#timestamp/0"><c>erlang:timestamp/0</c></seealso>.</p>
+ <p>Returns local date and time converted from the return value from
+ <seealso marker="erts:erlang#timestamp/0"><c>erlang:timestamp/0</c></seealso>.
+ </p>
</desc>
</func>
+
<func>
<name name="now_to_universal_time" arity="1"/>
- <name name="now_to_datetime" arity="1"/>
- <fsummary>Convert now to date and time</fsummary>
+ <fsummary>Convert now to date and time.</fsummary>
<desc>
- <p>This function returns Universal Coordinated Time (UTC)
- converted from the return value from
- <seealso marker="erts:erlang#timestamp/0"><c>erlang:timestamp/0</c></seealso>.</p>
+ <p>Returns Universal Coordinated Time (UTC)
+ converted from the return value from
+ <seealso marker="erts:erlang#timestamp/0"><c>erlang:timestamp/0</c></seealso>.
+ </p>
</desc>
</func>
+
<func>
<name name="seconds_to_daystime" arity="1"/>
- <fsummary>Compute days and time from seconds</fsummary>
+ <fsummary>Compute days and time from seconds.</fsummary>
<desc>
- <p>This function transforms a given number of seconds into days,
- hours, minutes, and seconds. The <c><anno>Time</anno></c> part is always
- non-negative, but <c><anno>Days</anno></c> is negative if the argument
+ <p>Converts a specified number of seconds into days, hours, minutes,
+ and seconds. <c><anno>Time</anno></c> is always non-negative, but
+ <c><anno>Days</anno></c> is negative if argument
<c><anno>Seconds</anno></c> is.</p>
</desc>
</func>
+
<func>
<name name="seconds_to_time" arity="1"/>
- <fsummary>Compute time from seconds</fsummary>
+ <fsummary>Compute time from seconds.</fsummary>
<type name="secs_per_day"/>
<desc>
- <p>This function computes the time from the given number of
- seconds. <c><anno>Seconds</anno></c> must be less than the number of
+ <p>Computes the time from the specified number of seconds.
+ <c><anno>Seconds</anno></c> must be less than the number of
seconds per day (86400).</p>
</desc>
</func>
+
<func>
<name name="time_difference" arity="2"/>
- <fsummary>Compute the difference between two times (deprecated)</fsummary>
+ <fsummary>Compute the difference between two times (deprecated).
+ </fsummary>
<desc>
- <p>This function returns the difference between two <c>{Date, Time}</c> tuples. <c><anno>T2</anno></c> should refer to an epoch later
+ <p>Returns the difference between two <c>{Date, Time}</c> tuples.
+ <c><anno>T2</anno></c> is to refer to an epoch later
than <c><anno>T1</anno></c>.</p>
<warning>
<p>This function is obsolete. Use the conversion functions for
@@ -317,33 +352,38 @@
</warning>
</desc>
</func>
+
<func>
<name name="time_to_seconds" arity="1"/>
- <fsummary>Compute the number of seconds since midnight up to the given time</fsummary>
+ <fsummary>Compute the number of seconds since midnight up to the
+ specified time.</fsummary>
<type name="secs_per_day"/>
<desc>
- <p>This function computes the number of seconds since midnight
+ <p>Returns the number of seconds since midnight
up to the specified time.</p>
</desc>
</func>
+
<func>
<name name="universal_time" arity="0"/>
- <fsummary>Compute universal time</fsummary>
+ <fsummary>Compute universal time.</fsummary>
<desc>
- <p>This function returns the Universal Coordinated Time (UTC)
- reported by the underlying operating system. Local time is
- returned if universal time is not available.</p>
+ <p>Returns the Universal Coordinated Time (UTC)
+ reported by the underlying operating system. Returns local time if
+ universal time is unavailable.</p>
</desc>
</func>
+
<func>
<name name="universal_time_to_local_time" arity="1"/>
- <fsummary>Convert from universal time to local time</fsummary>
+ <fsummary>Convert from universal time to local time.</fsummary>
<desc>
- <p>This function converts from Universal Coordinated Time (UTC)
- to local time. <c><anno>DateTime</anno></c> must refer to a date after Jan 1,
- 1970.</p>
+ <p>Converts from Universal Coordinated Time (UTC) to local time.
+ <c><anno>DateTime</anno></c> must refer to a date after Jan 1, 1970.
+ </p>
</desc>
</func>
+
<func>
<name name="valid_date" arity="1"/>
<name name="valid_date" arity="3"/>
@@ -362,31 +402,31 @@
<title>Leap Years</title>
<p>The notion that every fourth year is a leap year is not
completely true. By the Gregorian rule, a year Y is a leap year if
- either of the following rules is valid:</p>
+ one of the following rules is valid:</p>
<list type="bulleted">
<item>
- <p>Y is divisible by 4, but not by 100; or</p>
+ <p>Y is divisible by 4, but not by 100.</p>
</item>
<item>
<p>Y is divisible by 400.</p>
</item>
</list>
- <p>Accordingly, 1996 is a leap year, 1900 is not, but 2000 is.</p>
+ <p>Hence, 1996 is a leap year, 1900 is not, but 2000 is.</p>
</section>
<section>
<title>Date and Time Source</title>
<p>Local time is obtained from the Erlang BIF <c>localtime/0</c>.
Universal time is computed from the BIF <c>universaltime/0</c>.</p>
- <p>The following facts apply:</p>
+ <p>The following fapply:</p>
<list type="bulleted">
- <item>there are 86400 seconds in a day</item>
- <item>there are 365 days in an ordinary year</item>
- <item>there are 366 days in a leap year</item>
- <item>there are 1461 days in a 4 year period</item>
- <item>there are 36524 days in a 100 year period</item>
- <item>there are 146097 days in a 400 year period</item>
- <item>there are 719528 days between Jan 1, 0 and Jan 1, 1970.</item>
+ <item>There are 86400 seconds in a day.</item>
+ <item>There are 365 days in an ordinary year.</item>
+ <item>There are 366 days in a leap year.</item>
+ <item>There are 1461 days in a 4 year period.</item>
+ <item>There are 36524 days in a 100 year period.</item>
+ <item>There are 146097 days in a 400 year period.</item>
+ <item>There are 719528 days between Jan 1, 0 and Jan 1, 1970.</item>
</list>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/dets.xml b/lib/stdlib/doc/src/dets.xml
index 177c2ba508..2e4261d72e 100644
--- a/lib/stdlib/doc/src/dets.xml
+++ b/lib/stdlib/doc/src/dets.xml
@@ -26,82 +26,100 @@
<prepared>Claes Wikstr&ouml;m</prepared>
<responsible>Claes Wikstr&ouml;m</responsible>
<docno></docno>
- <approved>nobody</approved>
- <checked>no</checked>
+ <approved></approved>
+ <checked></checked>
<date>2001-06-06</date>
<rev>B</rev>
- <file>dets.sgml</file>
+ <file>dets.xml</file>
</header>
<module>dets</module>
- <modulesummary>A Disk Based Term Storage</modulesummary>
+ <modulesummary>A disk-based term storage.</modulesummary>
<description>
- <p>The module <c>dets</c> provides a term storage on file. The
+ <p>This module provides a term storage on file. The
stored terms, in this module called <em>objects</em>, are tuples
such that one element is defined to be the key. A Dets
<em>table</em> is a collection of objects with the key at the same
position stored on a file.</p>
- <p>Dets is used by the Mnesia application, and is provided as is
- for users who are interested in an efficient storage of Erlang
- terms on disk only. Many applications just need to store some
+
+ <p>This module is used by the Mnesia application, and is provided
+ "as is" for users who are interested in efficient storage of Erlang
+ terms on disk only. Many applications only need to store some
terms in a file. Mnesia adds transactions, queries, and
distribution. The size of Dets files cannot exceed 2 GB. If larger
- tables are needed, Mnesia's table fragmentation can be used.</p>
- <p>There are three types of Dets tables: set, bag and
- duplicate_bag. A table of type <em>set</em> has at most one object
- with a given key. If an object with a key already present in the
- table is inserted, the existing object is overwritten by the new
- object. A table of type <em>bag</em> has zero or more different
- objects with a given key. A table of type <em>duplicate_bag</em>
- has zero or more possibly matching objects with a given key.</p>
+ tables are needed, table fragmentation in Mnesia can be used.</p>
+
+ <p>Three types of Dets tables exist:</p>
+
+ <list type="bulleted">
+ <item><p><c>set</c>. A table of this type has at most one object with a
+ given key. If an object with a key already present in the
+ table is inserted, the existing object is overwritten by the new
+ object.</p>
+ </item>
+ <item><p><c>bag</c>. A table of this type has zero or more different
+ objects with a given key.</p>
+ </item>
+ <item><p><c>duplicate_bag</c>. A table of this type has zero or more
+ possibly matching objects with a given key.</p>
+ </item>
+ </list>
+
<p>Dets tables must be opened before they can be updated or read,
- and when finished they must be properly closed. If a table has not
- been properly closed, Dets will automatically repair the table.
+ and when finished they must be properly closed. If a table is not
+ properly closed, Dets automatically repairs the table.
This can take a substantial time if the table is large. A Dets
table is closed when the process which opened the table
- terminates. If several Erlang processes (users) open the same Dets
- table, they will share the table. The table is properly closed
+ terminates. If many Erlang processes (users) open the same Dets
+ table, they share the table. The table is properly closed
when all users have either terminated or closed the table. Dets
- tables are not properly closed if the Erlang runtime system is
- terminated abnormally.</p>
+ tables are not properly closed if the Erlang runtime system
+ terminates abnormally.</p>
+
<note>
- <p>A ^C command abnormally terminates an Erlang runtime
+ <p>A <c>^C</c> command abnormally terminates an Erlang runtime
system in a Unix environment with a break-handler.</p>
</note>
- <p>Since all operations performed by Dets are disk operations, it
+
+ <p>As all operations performed by Dets are disk operations, it
is important to realize that a single look-up operation involves a
- series of disk seek and read operations. For this reason, the Dets
- functions are much slower than the corresponding Ets functions,
+ series of disk seek and read operations. The Dets functions
+ are therefore much slower than the corresponding
+ <seealso marker="ets"><c>ets(3)</c></seealso> functions,
although Dets exports a similar interface.</p>
+
<p>Dets organizes data as a linear hash list and the hash list
grows gracefully as more data is inserted into the table. Space
management on the file is performed by what is called a buddy
system. The current implementation keeps the entire buddy system
in RAM, which implies that if the table gets heavily fragmented,
quite some memory can be used up. The only way to defragment a
- table is to close it and then open it again with the <c>repair</c>
- option set to <c>force</c>.</p>
- <p>It is worth noting that the ordered_set type present in Ets is
- not yet implemented by Dets, neither is the limited support for
- concurrent updates which makes a sequence of <c>first</c> and
- <c>next</c> calls safe to use on fixed Ets tables. Both these
- features will be implemented by Dets in a future release of
- Erlang/OTP. Until then, the Mnesia application (or some user
- implemented method for locking) has to be used to implement safe
- concurrency. Currently, no library of Erlang/OTP has support for
- ordered disk based term storage.</p>
+ table is to close it and then open it again with option <c>repair</c>
+ set to <c>force</c>.</p>
+
+ <p>Notice that type <c>ordered_set</c> in Ets is not yet
+ provided by Dets, neither is the limited support for
+ concurrent updates that makes a sequence of <c>first</c> and
+ <c>next</c> calls safe to use on fixed ETS tables. Both these
+ features will be provided by Dets in a future release of
+ Erlang/OTP. Until then, the Mnesia application (or some
+ user-implemented method for locking) must be used to implement safe
+ concurrency. Currently, no Erlang/OTP library has support for
+ ordered disk-based term storage.</p>
+
<p>Two versions of the format used for storing objects on file are
supported by Dets. The first version, 8, is the format always used
- for tables created by OTP R7 and earlier. The second version, 9,
- is the default version of tables created by OTP R8 (and later OTP
- releases). OTP R8 can create version 8 tables, and convert version
- 8 tables to version 9, and vice versa, upon request.
- </p>
+ for tables created by Erlang/OTP R7 and earlier. The second version, 9,
+ is the default version of tables created by Erlang/OTP R8 (and later
+ releases). Erlang/OTP R8 can create version 8 tables, and convert version
+ 8 tables to version 9, and conversely, upon request.</p>
<p>All Dets functions return <c>{error, Reason}</c> if an error
- occurs (<c>first/1</c> and <c>next/2</c> are exceptions, they exit
- the process with the error tuple). If given badly formed
- arguments, all functions exit the process with a <c>badarg</c>
+ occurs (<seealso marker="#first/1"><c>first/1</c></seealso> and
+ <seealso marker="#next/2"><c>next/2</c></seealso> are exceptions, they
+ exit the process with the error tuple). If badly formed arguments are
+ specified, all functions exit the process with a <c>badarg</c>
message.</p>
</description>
+
<datatypes>
<datatype>
<name name="access"/>
@@ -130,10 +148,11 @@
<datatype>
<name name="match_spec"/>
<desc>
- <p>Match&nbsp;specifications, see the <seealso
- marker="erts:match_spec">match specification</seealso>
- documentation in the ERTS User's Guide and <seealso
- marker="ms_transform">ms_transform(3).</seealso></p>
+ <p>Match specifications, see section
+ <seealso marker="erts:match_spec">
+ Match Specification in Erlang</seealso> in ERTS User's Guide and the
+ <seealso marker="ms_transform"><c>ms_transform(3)</c></seealso>
+ module.</p>
</desc>
</datatype>
<datatype>
@@ -146,15 +165,15 @@
<name name="object_cont"/>
<desc>
<p>Opaque continuation used by <seealso marker="#match_object/1">
- <c>match_object/1</c></seealso> and <seealso marker="#match_object/3">
- <c>match_object/3</c></seealso>.</p>
+ <c>match_object/1</c></seealso> and
+ <seealso marker="#match_object/3"><c>match_object/3</c></seealso>.</p>
</desc>
</datatype>
<datatype>
<name name="pattern"/>
<desc>
- <p>See <seealso marker="ets#match/2">ets:match/2</seealso> for a
- description of patterns.</p>
+ <p>For a description of patterns, see
+ <seealso marker="ets#match/2"><c>ets:match/2</c></seealso>.</p>
</desc>
</datatype>
<datatype>
@@ -175,67 +194,69 @@
<name name="version"/>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="all" arity="0"/>
- <fsummary>Return a list of the names of all open Dets tables on this node.</fsummary>
+ <fsummary>Return a list of the names of all open Dets tables on
+ this node.</fsummary>
<desc>
- <p>Returns a list of the names of all open tables on this
- node.</p>
+ <p>Returns a list of the names of all open tables on this node.</p>
</desc>
</func>
+
<func>
<name name="bchunk" arity="2"/>
- <fsummary>Return a chunk of objects stored in a Dets table.</fsummary>
+ <fsummary>Return a chunk of objects stored in a Dets table.
+ </fsummary>
<desc>
<p>Returns a list of objects stored in a table. The exact
representation of the returned objects is not public. The
- lists of data can be used for initializing a table by giving
- the value <c>bchunk</c> to the <c>format</c> option of the
+ lists of data can be used for initializing a table by specifying
+ value <c>bchunk</c> to option <c>format</c> of function
<seealso marker="#init_table/3"><c>init_table/3</c></seealso>
- function. The Mnesia application uses this
+ The Mnesia application uses this
function for copying open tables.</p>
<p>Unless the table is protected using <c>safe_fixtable/2</c>,
- calls to <c>bchunk/2</c> may not work as expected if
+ calls to <c>bchunk/2</c> do possibly not work as expected if
concurrent updates are made to the table.</p>
<p>The first time <c>bchunk/2</c> is called, an initial
continuation, the atom <c>start</c>, must be provided.</p>
- <p>The <c>bchunk/2</c> function returns a tuple
+ <p><c>bchunk/2</c> returns a tuple
<c>{<anno>Continuation2</anno>, <anno>Data</anno>}</c>,
where <c><anno>Data</anno></c> is a list of
objects. <c><anno>Continuation2</anno></c> is another continuation
- which is
- to be passed on to a subsequent call to <c>bchunk/2</c>. With
- a series of calls to <c>bchunk/2</c> it is possible to extract
- all objects of the table.
- </p>
+ that is to be passed on to a subsequent call to <c>bchunk/2</c>. With
+ a series of calls to <c>bchunk/2</c>, all table objects can be
+ extracted.</p>
<p><c>bchunk/2</c> returns <c>'$end_of_table'</c> when all
- objects have been returned, or <c>{error, <anno>Reason</anno>}</c>
- if an error occurs.
- </p>
+ objects are returned, or <c>{error, <anno>Reason</anno>}</c>
+ if an error occurs.</p>
</desc>
</func>
+
<func>
<name name="close" arity="1"/>
<fsummary>Close a Dets table.</fsummary>
<desc>
<p>Closes a table. Only processes that have opened a table are
- allowed to close it.
- </p>
+ allowed to close it.</p>
<p>All open tables must be closed before the system is
- stopped. If an attempt is made to open a table which has not
- been properly closed, Dets automatically tries to repair the
- table.</p>
+ stopped. If an attempt is made to open a table that is not
+ properly closed, Dets automatically tries to repair it.</p>
</desc>
</func>
+
<func>
<name name="delete" arity="2"/>
- <fsummary>Delete all objects with a given key from a Dets table.</fsummary>
+ <fsummary>Delete all objects with a specified key from a Dets
+ table.</fsummary>
<desc>
- <p>Deletes all objects with the key <c><anno>Key</anno></c> from
- the table <c><anno>Name</anno></c>.</p>
+ <p>Deletes all objects with key <c><anno>Key</anno></c> from
+ table <c><anno>Name</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="delete_all_objects" arity="1"/>
<fsummary>Delete all objects from a Dets table.</fsummary>
@@ -245,264 +266,275 @@
is equivalent to <c>match_delete(T, '_')</c>.</p>
</desc>
</func>
+
<func>
<name name="delete_object" arity="2"/>
- <fsummary>Delete a given object from a Dets table.</fsummary>
+ <fsummary>Delete a specified object from a Dets table.</fsummary>
<desc>
- <p>Deletes all instances of a given object from a table. If a
- table is of type <c>bag</c> or <c>duplicate_bag</c>, the
- <c>delete/2</c> function cannot be used to delete only some of
- the objects with a given key. This function makes this
- possible.</p>
+ <p>Deletes all instances of a specified object from a table. If a
+ table is of type <c>bag</c> or <c>duplicate_bag</c>, this
+ function can be used to delete only some of
+ the objects with a specified key.</p>
</desc>
</func>
+
<func>
<name name="first" arity="1"/>
<fsummary>Return the first key stored in a Dets table.</fsummary>
<desc>
- <p>Returns the first key stored in the table <c><anno>Name</anno></c>
- according to the table's internal order, or
+ <p>Returns the first key stored in table <c><anno>Name</anno></c>
+ according to the internal order of the table, or
<c>'$end_of_table'</c> if the table is empty.</p>
<p>Unless the table is protected using <c>safe_fixtable/2</c>,
subsequent calls to <seealso marker="#next/2"><c>next/2</c></seealso>
- may not work as expected if
+ do possibly not work as expected if
concurrent updates are made to the table.</p>
- <p>Should an error occur, the process is exited with an error
- tuple <c>{error, Reason}</c>. The reason for not returning the
- error tuple is that it cannot be distinguished from a key.</p>
+ <p>If an error occurs, the process is exited with an error
+ tuple <c>{error, Reason}</c>. The error tuple is not returned,
+ as it cannot be distinguished from a key.</p>
<p>There are two reasons why <c>first/1</c> and <c>next/2</c>
- should not be used: they are not very efficient, and they
- prevent the use of the key <c>'$end_of_table'</c> since this
- atom is used to indicate the end of the table. If possible,
- the <c>match</c>, <c>match_object</c>, and <c>select</c>
- functions should be used for traversing tables.</p>
+ are not to be used: they are not efficient, and they
+ prevent the use of key <c>'$end_of_table'</c>, as this atom
+ is used to indicate the end of the table. If possible, use functions
+ <seealso marker="#match/1"><c>match</c></seealso>,
+ <seealso marker="#match_object/1"><c>match_object</c></seealso>, and
+ <seealso marker="#select/1"><c>select</c></seealso>
+ for traversing tables.</p>
</desc>
</func>
+
<func>
<name name="foldl" arity="3"/>
<name name="foldr" arity="3"/>
<fsummary>Fold a function over a Dets table.</fsummary>
<desc>
<p>Calls <c><anno>Function</anno></c> on successive elements of
- the table <c><anno>Name</anno></c> together with an extra argument
- <c>AccIn</c>. The
- order in which the elements of the table are traversed is
- unspecified. <c><anno>Function</anno></c> must return a new
- accumulator which is passed to the next call.
- <c><anno>Acc0</anno></c> is returned if
- the table is empty.</p>
+ table <c><anno>Name</anno></c> together with an extra argument
+ <c>AccIn</c>. The table elements are traversed in unspecified
+ order. <c><anno>Function</anno></c> must return a new
+ accumulator that is passed to the next call.
+ <c><anno>Acc0</anno></c> is returned if the table is empty.</p>
</desc>
</func>
+
<func>
<name name="from_ets" arity="2"/>
- <fsummary>Replace the objects of a Dets table with the objects of an Ets table.</fsummary>
+ <fsummary>Replace the objects of a Dets table with the objects
+ of an ETS table.</fsummary>
<desc>
- <p>Deletes all objects of the table <c><anno>Name</anno></c> and then
- inserts all the objects of the Ets table <c><anno>EtsTab</anno></c>.
- The order in which the objects are inserted is not specified.
- Since <c>ets:safe_fixtable/2</c> is called the Ets table must
- be public or owned by the calling process.</p>
+ <p>Deletes all objects of table <c><anno>Name</anno></c> and then
+ inserts all the objects of the ETS table
+ <c><anno>EtsTab</anno></c>. The objects are inserted in unspecified
+ order. As <c>ets:safe_fixtable/2</c> is called, the ETS table
+ must be public or owned by the calling process.</p>
</desc>
</func>
+
<func>
<name name="info" arity="1"/>
<fsummary>Return information about a Dets table.</fsummary>
<desc>
- <p>Returns information about the table <c><anno>Name</anno></c>
- as a list of tuples:</p>
+ <p>Returns information about table <c><anno>Name</anno></c>
+ as a list of tuples:</p>
<list type="bulleted">
<item>
- <p><c>{file_size, integer() >= 0}</c>, the size of the file in
- bytes.</p>
+ <p><c>{file_size, integer() >= 0}}</c> - The file size, in
+ bytes.</p>
</item>
<item>
- <p><c>{filename, </c><seealso marker="file#type-name">file:name()</seealso><c>}</c>,
- the name of the file where objects are stored.</p>
+ <p><c>{filename, </c><seealso marker="file#type-name">
+ <c>file:name()</c></seealso><c>}</c> - The name of the file
+ where objects are stored.</p>
</item>
<item>
- <p><c>{keypos, </c><seealso marker="#type-keypos">keypos()</seealso>
- <c>}</c>, the position of the key.</p>
+ <p><c>{keypos, </c><seealso marker="#type-keypos">
+ <c>keypos()</c></seealso><c>}</c> - The key position.</p>
</item>
<item>
- <p><c>{size, integer() >= 0}</c>, the number of objects stored
- in the table.</p>
+ <p><c>{size, integer() >= 0}</c> - The number of objects
+ stored in the table.</p>
</item>
<item>
- <p><c>{type, </c><seealso marker="#type-type">type()</seealso>
- <c>}</c>, the type of the table.</p>
+ <p><c>{type, </c><seealso marker="#type-type">
+ <c>type()</c></seealso><c>}</c> - The table type.</p>
</item>
</list>
</desc>
</func>
+
<func>
<name name="info" arity="2"/>
- <fsummary>Return the information associated with a given item for a Dets table.</fsummary>
+ <fsummary>Return the information associated with a specified item for
+ a Dets table.</fsummary>
<desc>
<p>Returns the information associated with <c><anno>Item</anno></c>
- for the table <c><anno>Name</anno></c>.
+ for table <c><anno>Name</anno></c>.
In addition to the <c>{<anno>Item</anno>, <anno>Value</anno>}</c>
- pairs defined for <c>info/1</c>, the following items are
- allowed:</p>
+ pairs defined for <seealso marker="#info/1"><c>info/1</c></seealso>,
+ the following items are allowed:</p>
<list type="bulleted">
<item>
- <p><c>{access, </c><seealso marker="#type-access">access()</seealso>
- <c>}</c>, the access mode.</p>
+ <p><c>{access, </c><seealso marker="#type-access">
+ <c>access()</c></seealso><c>}</c> - The access mode.</p>
</item>
<item>
<p><c>{auto_save, </c><seealso marker="#type-auto_save">
- auto_save()</seealso><c>}</c>, the auto save interval.</p>
+ <c>auto_save()</c></seealso><c>}</c> - The autosave interval.</p>
</item>
<item>
- <p><c>{bchunk_format, binary()}</c>, an opaque binary
+ <p><c>{bchunk_format, binary()}</c> - An opaque binary
describing the format of the objects returned by
<c>bchunk/2</c>. The binary can be used as argument to
<c>is_compatible_chunk_format/2</c>. Only available for
version 9 tables.</p>
</item>
<item>
- <p><c>{hash,</c> Hash<c>}</c>. Describes which BIF is
- used to calculate the hash values of the objects stored in
- the Dets table. Possible values of Hash are <c>hash</c>,
- which implies that the <c>erlang:hash/2</c> BIF is used,
- <c>phash</c>, which implies that the <c>erlang:phash/2</c>
- BIF is used, and <c>phash2</c>, which implies that the
- <c>erlang:phash2/1</c> BIF is used.</p>
+ <p><c>{hash, Hash}</c> - Describes which BIF is
+ used to calculate the hash values of the objects stored in the
+ Dets table. Possible values of <c>Hash</c>:</p>
+ <list>
+ <item>
+ <p><c>hash</c> - Implies that the <c>erlang:hash/2</c> BIF
+ is used.</p>
+ </item>
+ <item>
+ <p><c>phash</c> - Implies that the <c>erlang:phash/2</c> BIF
+ is used.</p>
+ </item>
+ <item>
+ <p><c>phash2</c> - Implies that the <c>erlang:phash2/1</c> BIF
+ is used.</p>
+ </item>
+ </list>
</item>
<item>
- <p><c>{memory, integer() >= 0}</c>, the size of the file in
- bytes. The same value is associated with the item
- <c>file_size</c>.</p>
+ <p><c>{memory, integer() >= 0}</c> - The file size, in bytes.
+ The same value is associated with item <c>file_size</c>.</p>
</item>
<item>
- <p><c>{no_keys, integer >= 0()}</c>, the number of different
+ <p><c>{no_keys, integer >= 0()}</c> - The number of different
keys stored in the table. Only available for version 9
tables.</p>
</item>
<item>
- <p><c>{no_objects, integer >= 0()}</c>, the number of objects
+ <p><c>{no_objects, integer >= 0()}</c> - The number of objects
stored in the table.</p>
</item>
<item>
- <p><c>{no_slots, {</c>Min<c>, </c>Used<c>, </c>Max<c>}}</c>,
- the number of
- slots of the table. <c>Min</c> is the minimum number of
+ <p><c>{no_slots, {Min, Used, Max}}</c> - The
+ number of slots of the table. <c>Min</c> is the minimum number of
slots, <c>Used</c> is the number of currently used slots,
and <c>Max</c> is the maximum number of slots. Only
available for version 9 tables.</p>
</item>
<item>
- <p><c>{owner, pid()}</c>, the pid of the process that
+ <p><c>{owner, pid()}</c> - The pid of the process that
handles requests to the Dets table.</p>
</item>
<item>
- <p><c>{ram_file, boolean()}</c>, whether the table is
+ <p><c>{ram_file, boolean()}</c> - Whether the table is
kept in RAM.</p>
</item>
<item>
- <p><c>{safe_fixed_monotonic_time, SafeFixed}</c>. If the table
- is fixed, <c>SafeFixed</c> is a tuple <c>{FixedAtTime, [{Pid,RefCount}]}</c>.
- <c>FixedAtTime</c> is the time when
+ <p><c>{safe_fixed_monotonic_time, SafeFixed}</c> - If the table
+ is fixed, <c>SafeFixed</c> is a tuple
+ <c>{FixedAtTime, [{Pid,RefCount}]}</c>.
+ <c>FixedAtTime</c> is the time when
the table was first fixed, and <c>Pid</c> is the pid of
the process that fixes the table <c>RefCount</c> times.
- There may be any number of processes in the list. If the
- table is not fixed, SafeFixed is the atom <c>false</c>.</p>
- <p><c>FixedAtTime</c> will correspond to the result
- returned by
- <seealso marker="erts:erlang#monotonic_time/0">erlang:monotonic_time/0</seealso>
- at the time of fixation. The usage of <c>safe_fixed_monotonic_time</c> is
- <seealso marker="erts:time_correction#Time_Warp_Safe_Code">time warp
- safe</seealso>.</p>
+ There can be any number of processes in the list. If the table
+ is not fixed, <c>SafeFixed</c> is the atom <c>false</c>.</p>
+ <p><c>FixedAtTime</c> corresponds to the result returned by
+ <seealso marker="erts:erlang#monotonic_time/0">
+ <c>erlang:monotonic_time/0</c></seealso> at the time of fixation.
+ The use of <c>safe_fixed_monotonic_time</c> is
+ <seealso marker="erts:time_correction#Time_Warp_Safe_Code">
+ time warp safe</seealso>.</p>
</item>
<item>
- <p>
- <c>{safe_fixed, SafeFixed}</c>. The same as
- <c>{safe_fixed_monotonic_time, SafeFixed}</c> with the exception
- of the format and value of <c>FixedAtTime</c>.
- </p>
- <p>
- <c>FixedAtTime</c> will correspond to the result returned by
- <seealso marker="erts:erlang#timestamp/0">erlang:timestamp/0</seealso>
- at the time of fixation. Note that when the system is using
- single or multi
- <seealso marker="erts:time_correction#Time_Warp_Modes">time warp
- modes</seealso> this might produce strange results. This
- since the usage of <c>safe_fixed</c> is not
- <seealso marker="erts:time_correction#Time_Warp_Safe_Code">time warp
- safe</seealso>. Time warp safe code need to use
- <c>safe_fixed_monotonic_time</c> instead.</p>
+ <p><c>{safe_fixed, SafeFixed}</c> - The same as
+ <c>{safe_fixed_monotonic_time, SafeFixed}</c> except
+ the format and value of <c>FixedAtTime</c>.</p>
+ <p><c>FixedAtTime</c> corresponds to the result returned by
+ <seealso marker="erts:erlang#timestamp/0">
+ <c>erlang:timestamp/0</c></seealso> at the time of fixation.
+ Notice that when the system uses single or multi
+ <seealso marker="erts:time_correction#Time_Warp_Modes">time warp
+ modes</seealso>, this can produce strange results. This is
+ because the use of <c>safe_fixed</c> is not
+ <seealso marker="erts:time_correction#Time_Warp_Safe_Code">
+ time warp safe</seealso>. Time warp safe code must use
+ <c>safe_fixed_monotonic_time</c> instead.</p>
</item>
<item>
- <p><c>{version, integer()}</c>, the version of the format of
+ <p><c>{version, integer()}</c> - The version of the format of
the table.</p>
</item>
</list>
</desc>
</func>
+
<func>
<name name="init_table" arity="2"/>
<name name="init_table" arity="3"/>
<fsummary>Replace all objects of a Dets table.</fsummary>
<desc>
- <p>Replaces the existing objects of the table <c><anno>Name</anno></c>
+ <p>Replaces the existing objects of table <c><anno>Name</anno></c>
with objects created by calling the input function
<c><anno>InitFun</anno></c>,
see below. The reason for using this function rather than
- calling <c>insert/2</c> is that of efficiency. It should be
- noted that the input functions are called by the process that
+ calling <c>insert/2</c> is that of efficiency. Notice
+ that the input functions are called by the process that
handles requests to the Dets table, not by the calling
process.</p>
- <p>When called with the argument <c>read</c> the function
- <c><anno>InitFun</anno></c> is assumed to return
- <c>end_of_input</c> when
- there is no more input, or <c>{Objects, Fun}</c>, where
+ <p>When called with argument <c>read</c>, function
+ <c><anno>InitFun</anno></c> is assumed to return <c>end_of_input</c>
+ when there is no more input, or <c>{Objects, Fun}</c>, where
<c>Objects</c> is a list of objects and <c>Fun</c> is a new
- input function. Any other value Value is returned as an error
- <c>{error, {init_fun, Value}}</c>. Each input function will be
- called exactly once, and should an error occur, the last
- function is called with the argument <c>close</c>, the reply
+ input function. Any other value <c>Value</c> is returned as an error
+ <c>{error, {init_fun, Value}}</c>. Each input function is
+ called exactly once, and if an error occurs, the last
+ function is called with argument <c>close</c>, the reply
of which is ignored.</p>
- <p>If the type of the table is <c>set</c> and there is more
- than one object with a given key, one of the objects is
+ <p>If the table type is <c>set</c> and more
+ than one object exists with a given key, one of the objects is
chosen. This is not necessarily the last object with the given
key in the sequence of objects returned by the input
- functions. Duplicate keys should be avoided, or the file
- will be unnecessarily fragmented. This holds also for duplicated
+ functions. Avoid duplicate keys, otherwise the file becomes
+ unnecessarily fragmented. This holds also for duplicated
objects stored in tables of type <c>bag</c>.</p>
<p>It is important that the table has a sufficient number of
- slots for the objects. If not, the hash list will start to
- grow when <c>init_table/2</c> returns which will significantly
- slow down access to the table for a period of time. The
- minimum number of slots is set by the <c>open_file/2</c>
- option <c>min_no_slots</c> and returned by the <c>info/2</c>
- item <c>no_slots</c>. See also the <c>min_no_slots</c> option
- below.
- </p>
- <p>The <c><anno>Options</anno></c> argument is a list of
- <c>{Key, Val}</c>
- tuples where the following values are allowed:</p>
+ slots for the objects. If not, the hash list starts to
+ grow when <c>init_table/2</c> returns, which significantly
+ slows down access to the table for a period of time. The
+ minimum number of slots is set by the <c>open_file/2</c> option
+ <c>min_no_slots</c> and returned by the <c>info/2</c>
+ item <c>no_slots</c>. See also option <c>min_no_slots</c> below.</p>
+ <p>Argument <c><anno>Options</anno></c> is a list of <c>{Key, Val}</c>
+ tuples, where the following values are allowed:</p>
<list type="bulleted">
<item>
- <p><c>{min_no_slots, no_slots()}</c>. Specifies the
- estimated number of different keys that will be stored
- in the table. The <c>open_file</c> option with the same
- name is ignored unless the table is created, and in that
+ <p><c>{min_no_slots, no_slots()}</c> - Specifies the
+ estimated number of different keys to be stored
+ in the table. The <c>open_file/2</c> option with the same
+ name is ignored, unless the table is created, in which
case performance can be enhanced by supplying an
estimate when initializing the table.</p>
</item>
<item>
- <p><c>{format, Format}</c>. Specifies the format of the
- objects returned by the function <c><anno>InitFun</anno></c>. If
+ <p><c>{format, Format}</c> - Specifies the format of the
+ objects returned by function <c><anno>InitFun</anno></c>. If
<c>Format</c> is <c>term</c> (the default),
- <c><anno>InitFun</anno></c> is assumed to return a list of tuples. If
- <c>Format</c> is <c>bchunk</c>, <c><anno>InitFun</anno></c> is
+ <c><anno>InitFun</anno></c> is assumed to return a list of tuples.
+ If <c>Format</c> is <c>bchunk</c>, <c><anno>InitFun</anno></c> is
assumed to return <c><anno>Data</anno></c> as returned by
<seealso marker="#bchunk/2"><c>bchunk/2</c></seealso>.
- This option overrides the
- <c>min_no_slots</c> option.</p>
+ This option overrides option <c>min_no_slots</c>.</p>
</item>
</list>
</desc>
</func>
+
<func>
<name name="insert" arity="2"/>
<fsummary>Insert one or more objects into a Dets table.</fsummary>
@@ -513,46 +545,50 @@
the old object will be replaced.</p>
</desc>
</func>
+
<func>
<name name="insert_new" arity="2"/>
<fsummary>Insert one or more objects into a Dets table.</fsummary>
<desc>
- <p>Inserts one or more objects into the table <c><anno>Name</anno></c>.
+ <p>Inserts one or more objects into table <c><anno>Name</anno></c>.
If there already exists some object with a key matching the key
- of any of the given objects the table is not updated and
- <c>false</c> is returned, otherwise the objects are inserted
+ of any of the specified objects, the table is not updated and
+ <c>false</c> is returned. Otherwise the objects are inserted
and <c>true</c> returned.</p>
</desc>
</func>
+
<func>
<name name="is_compatible_bchunk_format" arity="2"/>
- <fsummary>Test compatibility of a table's chunk data.</fsummary>
+ <fsummary>Test compatibility of chunk data of a table.</fsummary>
<desc>
<p>Returns <c>true</c> if it would be possible to initialize
- the table <c><anno>Name</anno></c>, using
- <seealso marker="#init_table/3"><c>init_table/3</c></seealso>
- with the
- option <c>{format,&nbsp;bchunk}</c>, with objects read with
+ table <c><anno>Name</anno></c>, using
+ <seealso marker="#init_table/3"><c>init_table/3</c></seealso> with
+ option <c>{format,&nbsp;bchunk}</c>, with objects read with
<seealso marker="#bchunk/2"><c>bchunk/2</c></seealso> from some
- table <c>T</c> such that calling
+ table <c>T</c>, such that calling
<c>info(T,&nbsp;bchunk_format)</c> returns
<c>BchunkFormat</c>.</p>
</desc>
</func>
+
<func>
<name name="is_dets_file" arity="1"/>
<fsummary>Test for a Dets table.</fsummary>
<desc>
- <p>Returns <c>true</c> if the file <c><anno>Filename</anno></c>
- is a Dets table, <c>false</c> otherwise.</p>
+ <p>Returns <c>true</c> if file <c><anno>Filename</anno></c>
+ is a Dets table, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="lookup" arity="2"/>
- <fsummary>Return all objects with a given key stored in a Dets table.</fsummary>
+ <fsummary>Return all objects with a specified key stored in a
+ Dets table.</fsummary>
<desc>
- <p>Returns a list of all objects with the key <c><anno>Key</anno></c>
- stored in the table <c><anno>Name</anno></c>. For example:</p>
+ <p>Returns a list of all objects with key <c><anno>Key</anno></c>
+ stored in table <c><anno>Name</anno></c>, for example:</p>
<pre>
2> <input>dets:open_file(abc, [{type, bag}]).</input>
{ok,abc}
@@ -561,394 +597,419 @@ ok
4> <input>dets:insert(abc, {1,3,4}).</input>
ok
5> <input>dets:lookup(abc, 1).</input>
-[{1,2,3},{1,3,4}] </pre>
- <p>If the table is of type <c>set</c>, the function returns
+[{1,2,3},{1,3,4}]</pre>
+ <p>If the table type is <c>set</c>, the function returns
either the empty list or a list with one object, as there
cannot be more than one object with a given key. If the table
- is of type <c>bag</c> or <c>duplicate_bag</c>, the function
+ type is <c>bag</c> or <c>duplicate_bag</c>, the function
returns a list of arbitrary length.</p>
- <p>Note that the order of objects returned is unspecified. In
+ <p>Notice that the order of objects returned is unspecified. In
particular, the order in which objects were inserted is not
reflected.</p>
</desc>
</func>
+
<func>
<name name="match" arity="1"/>
- <fsummary>Match a chunk of objects stored in a Dets table and return a list of variable bindings.</fsummary>
+ <fsummary>Match a chunk of objects stored in a Dets table and
+ return a list of variable bindings.</fsummary>
<desc>
<p>Matches some objects stored in a table and returns a
- non-empty list of the bindings that match a given pattern in
+ non-empty list of the bindings matching a specified pattern in
some unspecified order. The table, the pattern, and the number
of objects that are matched are all defined by
- <c><anno>Continuation</anno></c>, which has been returned by a prior
- call to <c>match/1</c> or <c>match/3</c>.</p>
- <p>When all objects of the table have been matched,
+ <c><anno>Continuation</anno></c>, which has been returned by a
+ previous call to <c>match/1</c> or <c>match/3</c>.</p>
+ <p>When all table objects are matched,
<c>'$end_of_table'</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="match" arity="2"/>
- <fsummary>Match the objects stored in a Dets table and return a list of variable bindings.</fsummary>
+ <fsummary>Match the objects stored in a Dets table and return a
+ list of variable bindings.</fsummary>
<desc>
- <p>Returns for each object of the table <c><anno>Name</anno></c> that
- matches <c><anno>Pattern</anno></c> a list of bindings in some unspecified
- order. See <seealso marker="ets#match/2">ets:match/2</seealso> for a
- description of patterns. If the keypos'th element of
- <c><anno>Pattern</anno></c> is unbound, all objects of the table are
+ <p>Returns for each object of table <c><anno>Name</anno></c> that
+ matches <c><anno>Pattern</anno></c> a list of bindings in some
+ unspecified order. For a description of patterns, see
+ <seealso marker="ets#match/2"><c>ets:match/2</c></seealso>.
+ If the keypos'th element of
+ <c><anno>Pattern</anno></c> is unbound, all table objects are
matched. If the keypos'th element is bound, only the
- objects with the right key are matched.</p>
+ objects with the correct key are matched.</p>
</desc>
</func>
+
<func>
<name name="match" arity="3"/>
- <fsummary>Match the first chunk of objects stored in a Dets table and return a list of variable bindings.</fsummary>
+ <fsummary>Match the first chunk of objects stored in a Dets table
+ and return a list of variable bindings.</fsummary>
<desc>
- <p>Matches some or all objects of the table <c><anno>Name</anno></c> and
+ <p>Matches some or all objects of table <c><anno>Name</anno></c> and
returns a non-empty list of the bindings that match
<c><anno>Pattern</anno></c> in some unspecified order.
- See <seealso marker="ets#match/2">ets:match/2</seealso> for a
- description of patterns.</p>
+ For a description of patterns, see
+ <seealso marker="ets#match/2"><c>ets:match/2</c></seealso>.</p>
<p>A tuple of the bindings and a continuation is returned,
unless the table is empty, in which case
<c>'$end_of_table'</c> is returned. The continuation is to be
used when matching further objects by calling
<seealso marker="#match/1"><c>match/1</c></seealso>.</p>
<p>If the keypos'th element of <c><anno>Pattern</anno></c> is bound,
- all objects of the table are matched. If the keypos'th element is
- unbound, all objects of the table are matched, <c><anno>N</anno></c>
+ all table objects are matched. If the keypos'th element is
+ unbound, all table objects are matched, <c><anno>N</anno></c>
objects at a time, until at least one object matches or the
- end of the table has been reached. The default, indicated by
- giving <c><anno>N</anno></c> the value <c>default</c>,
- is to let the number
- of objects vary depending on the sizes of the objects. If
- <c><anno>Name</anno></c> is a version 9 table, all objects with the same
- key are always matched at the same time which implies that
- more than <anno>N</anno> objects may sometimes be matched.
- </p>
- <p>The table should always be protected using
- <c>safe_fixtable/2</c> before calling <c>match/3</c>, or
- errors may occur when calling <c>match/1</c>.</p>
+ end of the table is reached. The default, indicated by
+ giving <c><anno>N</anno></c> the value <c>default</c>, is to let
+ the number of objects vary depending on the sizes of the objects. If
+ <c><anno>Name</anno></c> is a version 9 table, all objects with the
+ same key are always matched at the same time, which implies that
+ more than <anno>N</anno> objects can sometimes be matched.</p>
+ <p>The table is always to be protected using
+ <seealso marker="#safe_fixtable/2"><c>safe_fixtable/2</c></seealso>
+ before calling <c>match/3</c>, otherwise
+ errors can occur when calling <c>match/1</c>.</p>
</desc>
</func>
+
<func>
<name name="match_delete" arity="2"/>
- <fsummary>Delete all objects that match a given pattern from a Dets table.</fsummary>
+ <fsummary>Delete all objects that match a given pattern from a
+ Dets table.</fsummary>
<desc>
- <p>Deletes all objects that match <c><anno>Pattern</anno></c> from the
- table <c><anno>Name</anno></c>.
- See <seealso marker="ets#match/2">ets:match/2</seealso> for a
- description of patterns.</p>
+ <p>Deletes all objects that match <c><anno>Pattern</anno></c> from
+ table <c><anno>Name</anno></c>. For a description of patterns,
+ see <seealso marker="ets#match/2"><c>ets:match/2</c></seealso>.</p>
<p>If the keypos'th element of <c>Pattern</c> is bound,
- only the objects with the right key are matched.</p>
+ only the objects with the correct key are matched.</p>
</desc>
</func>
+
<func>
<name name="match_object" arity="1"/>
- <fsummary>Match a chunk of objects stored in a Dets table and return a list of objects.</fsummary>
+ <fsummary>Match a chunk of objects stored in a Dets table and
+ return a list of objects.</fsummary>
<desc>
<p>Returns a non-empty list of some objects stored in a table
that match a given pattern in some unspecified order. The
table, the pattern, and the number of objects that are matched
are all defined by <c><anno>Continuation</anno></c>, which has been
- returned by a prior call to <c>match_object/1</c> or
+ returned by a previous call to <c>match_object/1</c> or
<c>match_object/3</c>.</p>
- <p>When all objects of the table have been matched,
+ <p>When all table objects are matched,
<c>'$end_of_table'</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="match_object" arity="2"/>
- <fsummary>Match the objects stored in a Dets table and return a list of objects.</fsummary>
+ <fsummary>Match the objects stored in a Dets table and return
+ a list of objects.</fsummary>
<desc>
- <p>Returns a list of all objects of the table <c><anno>Name</anno></c> that
+ <p>Returns a list of all objects of table <c><anno>Name</anno></c> that
match <c><anno>Pattern</anno></c> in some unspecified order.
- See <seealso marker="ets#match/2">ets:match/2</seealso> for a
- description of patterns.
- </p>
+ For a description of patterns, see
+ <seealso marker="ets#match/2"><c>ets:match/2</c></seealso>.</p>
<p>If the keypos'th element of <c><anno>Pattern</anno></c> is
- unbound, all objects of the table are matched. If the
+ unbound, all table objects are matched. If the
keypos'th element of <c><anno>Pattern</anno></c> is bound, only the
- objects with the right key are matched.</p>
+ objects with the correct key are matched.</p>
<p>Using the <c>match_object</c> functions for traversing all
- objects of a table is more efficient than calling
+ table objects is more efficient than calling
<c>first/1</c> and <c>next/2</c> or <c>slot/2</c>.</p>
</desc>
</func>
+
<func>
<name name="match_object" arity="3"/>
- <fsummary>Match the first chunk of objects stored in a Dets table and return a list of objects.</fsummary>
+ <fsummary>Match the first chunk of objects stored in a Dets table
+ and return a list of objects.</fsummary>
<desc>
- <p>Matches some or all objects stored in the table <c><anno>Name</anno></c>
+ <p>Matches some or all objects stored in table <c><anno>Name</anno></c>
and returns a non-empty list of the objects that match
<c><anno>Pattern</anno></c> in some unspecified order.
- See <seealso marker="ets#match/2">ets:match/2</seealso> for a
- description of patterns.</p>
+ For a description of patterns, see
+ <seealso marker="ets#match/2"><c>ets:match/2</c></seealso>.</p>
<p>A list of objects and a continuation is returned, unless
the table is empty, in which case <c>'$end_of_table'</c>
is returned. The continuation is to be used when matching
- further objects by calling <c>match_object/1</c>.</p>
- <p>If the keypos'th element of <c><anno>Pattern</anno></c> is bound, all
- objects of the table are matched. If the keypos'th element is
- unbound, all objects of the table are matched, <c><anno>N</anno></c>
+ further objects by calling
+ <seealso marker="#match_object/1"><c>match_object/1</c></seealso>.</p>
+ <p>If the keypos'th element of <c><anno>Pattern</anno></c> is bound,
+ all table objects are matched. If the keypos'th element is
+ unbound, all table objects are matched, <c><anno>N</anno></c>
objects at a time, until at least one object matches or the
- end of the table has been reached. The default, indicated by
- giving <c><anno>N</anno></c> the value <c>default</c>, is to let the number
+ end of the table is reached. The default, indicated by
+ giving <c><anno>N</anno></c> the value <c>default</c>,
+ is to let the number
of objects vary depending on the sizes of the objects. If
- <c><anno>Name</anno></c> is a version 9 table, all matching objects with
- the same key are always returned in the same reply which
- implies that more than <anno>N</anno> objects may sometimes be returned.
- </p>
- <p>The table should always be protected using
- <c>safe_fixtable/2</c> before calling <c>match_object/3</c>,
- or errors may occur when calling <c>match_object/1</c>.</p>
+ <c><anno>Name</anno></c> is a version 9 table, all matching objects
+ with the same key are always returned in the same reply, which implies
+ that more than <anno>N</anno> objects can sometimes be returned.</p>
+ <p>The table is always to be protected using
+ <seealso marker="#safe_fixtable/2"><c>safe_fixtable/2</c></seealso>
+ before calling <c>match_object/3</c>, otherwise
+ errors can occur when calling <c>match_object/1</c>.</p>
</desc>
</func>
+
<func>
<name name="member" arity="2"/>
<fsummary>Test for occurrence of a key in a Dets table.</fsummary>
<desc>
- <p>Works like <c>lookup/2</c>, but does not return the
- objects. The function returns <c>true</c> if one or more
- elements of the table has the key <c><anno>Key</anno></c>, <c>false</c>
- otherwise.</p>
+ <p>Works like <seealso marker="#lookup/2"><c>lookup/2</c></seealso>,
+ but does not return the objects. Returns <c>true</c> if one or more
+ table elements has key <c><anno>Key</anno></c>, otherwise
+ <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="next" arity="2"/>
<fsummary>Return the next key in a Dets table.</fsummary>
<desc>
- <p>Returns the key following <c><anno>Key1</anno></c> in the table
- <c><anno>Name</anno></c> according to the table's internal order, or
- <c>'$end_of_table'</c> if there is no next key.</p>
- <p>Should an error occur, the process is exited with an error
+ <p>Returns either the key following <c><anno>Key1</anno></c> in table
+ <c><anno>Name</anno></c> according to the internal order of the
+ table, or <c>'$end_of_table'</c> if there is no next key.</p>
+ <p>If an error occurs, the process is exited with an error
tuple <c>{error, Reason}</c>.</p>
- <p>Use <seealso marker="#first/1"><c>first/1</c></seealso> to find
- the first key in the table.</p>
+ <p>To find the first key in the table, use
+ <seealso marker="#first/1"><c>first/1</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="open_file" arity="1"/>
<fsummary>Open an existing Dets table.</fsummary>
<desc>
- <p>Opens an existing table. If the table has not been properly
- closed, it will be repaired. The returned reference is to be
- used as the name of the table. This function is most useful
- for debugging purposes.</p>
+ <p>Opens an existing table. If the table is not properly closed,
+ it is repaired. The returned reference is to be used as the table
+ name. This function is most useful for debugging purposes.</p>
</desc>
</func>
+
<func>
<name name="open_file" arity="2"/>
<fsummary>Open a Dets table.</fsummary>
<desc>
<p>Opens a table. An empty Dets table is created if no file
exists.</p>
- <p>The atom <c><anno>Name</anno></c> is the name of the table. The table
+ <p>The atom <c><anno>Name</anno></c> is the table name. The table
name must be provided in all subsequent operations on the
table. The name can be used by other processes as well, and
- several process can share one table.
- </p>
+ many processes can share one table.</p>
<p>If two processes open the same table by giving the same
- name and arguments, then the table will have two users. If one
- user closes the table, it still remains open until the second
- user closes the table.</p>
- <p>The <c><anno>Args</anno></c> argument is a list of <c>{Key, Val}</c>
- tuples where the following values are allowed:</p>
+ name and arguments, the table has two users. If one
+ user closes the table, it remains open until the second
+ user closes it.</p>
+ <p>Argument <c><anno>Args</anno></c> is a list of <c>{Key, Val}</c>
+ tuples, where the following values are allowed:</p>
<list type="bulleted">
<item>
<p><c>{access, </c><seealso marker="#type-access">
- access()</seealso><c>}</c>. It is possible to open
- existing tables in read-only mode. A table which is opened
+ <c>access()</c></seealso><c>}</c> - Existing tables can be
+ opened in read-only mode. A table that is opened
in read-only mode is not subjected to the automatic file
reparation algorithm if it is later opened after a crash.
- The default value is <c>read_write</c>.</p>
+ Defaults to <c>read_write</c>.</p>
</item>
<item>
<p><c>{auto_save, </c><seealso marker="#type-auto_save">
- auto_save()</seealso><c>}</c>, the auto save
+ <c>auto_save()</c></seealso><c>}</c> - The autosave
interval. If the interval is an integer <c>Time</c>, the
table is flushed to disk whenever it is not accessed for
<c>Time</c> milliseconds. A table that has been flushed
- will require no reparation when reopened after an
+ requires no reparation when reopened after an
uncontrolled emulator halt. If the interval is the atom
- <c>infinity</c>, auto save is disabled. The default value
- is 180000 (3 minutes).</p>
+ <c>infinity</c>, autosave is disabled. Defaults to
+ 180000 (3 minutes).</p>
</item>
<item>
<p><c>{estimated_no_objects, </c><seealso marker="#type-no_slots">
- no_slots()</seealso><c>}</c>. Equivalent to the
- <c>min_no_slots</c> option.</p>
+ <c>no_slots()</c></seealso><c>}</c> - Equivalent to option
+ <c>min_no_slots</c>.</p>
</item>
<item>
<p><c>{file, </c><seealso marker="file#type-name">
- file:name()</seealso><c>}</c>, the name of the file to be
- opened. The default value is the name of the table.</p>
+ <c>file:name()</c></seealso><c>}</c> - The name of the file to be
+ opened. Defaults to the table name.</p>
</item>
<item>
<p><c>{max_no_slots, </c><seealso marker="#type-no_slots">
- no_slots()</seealso><c>}</c>, the maximum number
- of slots that will be used. The default value as well as
- the maximal value is 32 M. Note that a higher value may
- increase the fragmentation of the table, and conversely,
- that a smaller value may decrease the fragmentation, at
+ <c>no_slots()</c></seealso><c>}</c> - The maximum number
+ of slots to be used. Defaults to 32 M, which is the
+ maximal value. Notice that a higher value can
+ increase the table fragmentation, and
+ a smaller value can decrease the fragmentation, at
the expense of execution time. Only available for version
9 tables.</p>
</item>
<item>
<p><c>{min_no_slots, </c><seealso marker="#type-no_slots">
- no_slots()</seealso><c>}</c>. Application
+ <c>no_slots()</c></seealso><c>}</c> - Application
performance can be enhanced with this flag by specifying,
when the table is created, the estimated number of
- different keys that will be stored in the table. The
- default value as well as the minimum value is 256.</p>
+ different keys to be stored in the table. Defaults to 256,
+ which is the minimum value.</p>
</item>
<item>
<p><c>{keypos, </c><seealso marker="#type-keypos">
- keypos()</seealso><c>}</c>, the position of the
- element of each object to be used as key. The default
- value is 1. The ability to explicitly state the key
+ <c>keypos()</c></seealso><c>}</c> - The position of the
+ element of each object to be used as key. Defaults to 1.
+ The ability to explicitly state the key
position is most convenient when we want to store Erlang
records in which the first position of the record is the
name of the record type.</p>
</item>
<item>
- <p><c>{ram_file, boolean()}</c>, whether the table is to
- be kept in RAM. Keeping the table in RAM may sound like an
+ <p><c>{ram_file, boolean()}</c> - Whether the table is to
+ be kept in RAM. Keeping the table in RAM can sound like an
anomaly, but can enhance the performance of applications
- which open a table, insert a set of objects, and then
+ that open a table, insert a set of objects, and then
close the table. When the table is closed, its contents
- are written to the disk file. The default value is
- <c>false</c>.</p>
+ are written to the disk file. Defaults to <c>false</c>.</p>
</item>
<item>
- <p><c>{repair, Value}</c>. <c>Value</c> can be either
+ <p><c>{repair, Value}</c> - <c>Value</c> can be either
a <c>boolean()</c> or the atom <c>force</c>. The flag
- specifies whether the Dets server should invoke the
- automatic file reparation algorithm. The default is
- <c>true</c>. If <c>false</c> is specified, there is no
- attempt to repair the file and <c>{error, {needs_repair,
- FileName}}</c> is returned if the table needs to be
- repaired.</p>
- <p>The value <c>force</c> means that a reparation will
- take place even if the table has been properly closed.
+ specifies if the Dets server is to invoke the
+ automatic file reparation algorithm. Defaults to
+ <c>true</c>. If <c>false</c> is specified, no attempt is
+ made to repair the file, and <c>{error, {needs_repair,
+ FileName}}</c> is returned if the table must be repaired.</p>
+ <p>Value <c>force</c> means that a reparation
+ is made even if the table is properly closed.
This is how to convert tables created by older versions of
STDLIB. An example is tables hashed with the deprecated
- <c>erlang:hash/2</c> BIF. Tables created with Dets from a
- STDLIB version of 1.8.2 and later use the
- <c>erlang:phash/2</c> function or the
- <c>erlang:phash2/1</c> function, which is preferred.</p>
- <p>The <c>repair</c> option is ignored if the table is
- already open.</p>
+ <c>erlang:hash/2</c> BIF. Tables created with Dets from
+ STDLIB version 1.8.2 or later use function
+ <c>erlang:phash/2</c> or function <c>erlang:phash2/1</c>,
+ which is preferred.</p>
+ <p>Option <c>repair</c> is ignored if the table is already open.</p>
</item>
<item>
- <p><c>{type, </c><seealso marker="#type-type">type()</seealso><c>}</c>,
- the type of the table. The default value is <c>set</c>.</p>
+ <p><c>{type, </c><seealso marker="#type-type">
+ <c>type()</c></seealso><c>}</c> - The table type. Defaults to
+ <c>set</c>.</p>
</item>
<item>
<p><c>{version, </c><seealso marker="#type-version">
- version()</seealso><c>}</c>, the version of the format
- used for the table. The default value is <c>9</c>. Tables
- on the format used before OTP R8 can be created by giving
- the value <c>8</c>. A version 8 table can be converted to
- a version 9 table by giving the options <c>{version,9}</c>
+ <c>version()</c></seealso><c>}</c> - The version of the format
+ used for the table. Defaults to <c>9</c>. Tables on the format
+ used before Erlang/OTP R8 can be created by specifying value
+ <c>8</c>. A version 8 table can be converted to a version 9
+ table by specifying options <c>{version,9}</c>
and <c>{repair,force}</c>.</p>
</item>
</list>
</desc>
</func>
+
<func>
<name name="pid2name" arity="1"/>
<fsummary>Return the name of the Dets table handled by a pid.</fsummary>
<desc>
- <p>Returns the name of the table given the pid of a process
+ <p>Returns the table name given the pid of a process
that handles requests to a table, or <c>undefined</c> if
there is no such table.</p>
<p>This function is meant to be used for debugging only.</p>
</desc>
</func>
+
<func>
<name name="repair_continuation" arity="2"/>
- <fsummary>Repair a continuation from select/1 or select/3.</fsummary>
+ <fsummary>Repair a continuation from <c>select/1</c> or <c>select/3</c>.
+ </fsummary>
<desc>
<p>This function can be used to restore an opaque continuation
- returned by <c>select/3</c> or <c>select/1</c> if the
+ returned by
+ <seealso marker="#select/3"><c>select/3</c></seealso> or
+ <seealso marker="#select/1"><c>select/1</c></seealso> if the
continuation has passed through external term format (been
sent between nodes or stored on disk).</p>
<p>The reason for this function is that continuation terms
- contain compiled match specifications and therefore will be
+ contain compiled match specifications and therefore are
invalidated if converted to external term format. Given that
the original match specification is kept intact, the
continuation can be restored, meaning it can once again be
used in subsequent <c>select/1</c> calls even though it has
been stored on disk or on another node.</p>
- <p>See also <c>ets(3)</c> for further explanations and
- examples.
- </p>
+ <p>For more information and examples, see the
+ <seealso marker="ets"><c>ets(3)</c></seealso> module.</p>
<note>
- <p>This function is very rarely needed in application code. It
- is used by Mnesia to implement distributed <c>select/3</c>
+ <p>This function is rarely needed in application code. It is used by
+ application Mnesia to provide distributed <c>select/3</c>
and <c>select/1</c> sequences. A normal application would
either use Mnesia or keep the continuation from being
converted to external format.</p>
<p>The reason for not having an external representation of
- compiled match specifications is performance. It may be
+ compiled match specifications is performance. It can be
subject to change in future releases, while this interface
- will remain for backward compatibility.</p>
+ remains for backward compatibility.</p>
</note>
</desc>
</func>
+
<func>
<name name="safe_fixtable" arity="2"/>
<fsummary>Fix a Dets table for safe traversal.</fsummary>
<desc>
- <p>If <c><anno>Fix</anno></c> is <c>true</c>, the table
+ <p>If <c><anno>Fix</anno></c> is <c>true</c>, table
<c><anno>Name</anno></c> is
fixed (once more) by the calling process, otherwise the table
is released. The table is also released when a fixing process
- terminates.
- </p>
- <p>If several processes fix a table, the table will remain
+ terminates.</p>
+ <p>If many processes fix a table, the table remains
fixed until all processes have released it or terminated. A
reference counter is kept on a per process basis, and N
consecutive fixes require N releases to release the table.</p>
<p>It is not guaranteed that calls to <c>first/1</c>,
- <c>next/2</c>, select and match functions work as expected
- even if the table has been fixed; the limited support for
- concurrency implemented in Ets has not yet been implemented
- in Dets. Fixing a table currently only disables resizing of
+ <c>next/2</c>, or select and match functions work as expected
+ even if the table is fixed; the limited support for
+ concurrency provided by the
+ <seealso marker="ets"><c>ets(3)</c></seealso> module is not yet
+ provided by Dets.
+ Fixing a table currently only disables resizing of
the hash list of the table.</p>
<p>If objects have been added while the table was fixed, the
- hash list will start to grow when the table is released which
- will significantly slow down access to the table for a period
+ hash list starts to grow when the table is released, which
+ significantly slows down access to the table for a period
of time.</p>
</desc>
</func>
+
<func>
<name name="select" arity="1"/>
- <fsummary>Apply a match specification to some objects stored in a Dets table.</fsummary>
+ <fsummary>Apply a match specification to some objects stored in a
+ Dets table.</fsummary>
<desc>
<p>Applies a match specification to some objects stored in a
table and returns a non-empty list of the results. The
table, the match specification, and the number of objects
that are matched are all defined by <c><anno>Continuation</anno></c>,
- which has been returned by a prior call to <c>select/1</c>
- or <c>select/3</c>.</p>
+ which is returned by a previous call to
+ <seealso marker="#select/1"><c>select/1</c></seealso> or
+ <seealso marker="#select/3"><c>select/3</c></seealso>.</p>
<p>When all objects of the table have been matched,
<c>'$end_of_table'</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="select" arity="2"/>
- <fsummary>Apply a match specification to all objects stored in a Dets table.</fsummary>
+ <fsummary>Apply a match specification to all objects stored in a
+ Dets table.</fsummary>
<desc>
- <p>Returns the results of applying the match specification
- <c><anno>MatchSpec</anno></c> to all or some objects stored in the table
- <c><anno>Name</anno></c>. The order of the objects is not specified. See
- the ERTS User's Guide for a description of match
- specifications.</p>
+ <p>Returns the results of applying match specification
+ <c><anno>MatchSpec</anno></c> to all or some objects stored in table
+ <c><anno>Name</anno></c>. The order of the objects is not specified.
+ For a description of match specifications, see the
+ <seealso marker="erts:match_spec">ERTS User's Guide</seealso>.</p>
<p>If the keypos'th element of <c><anno>MatchSpec</anno></c> is
unbound, the match specification is applied to all objects of
the table. If the keypos'th element is bound, the match
- specification is applied to the objects with the right key(s)
+ specification is applied to the objects with the correct key(s)
only.</p>
<p>Using the <c>select</c> functions for traversing all
objects of a table is more efficient than calling
@@ -956,116 +1017,138 @@ ok
</p>
</desc>
</func>
+
<func>
<name name="select" arity="3"/>
- <fsummary>Apply a match specification to the first chunk of objects stored in a Dets table.</fsummary>
+ <fsummary>Apply a match specification to the first chunk of objects
+ stored in a Dets table.</fsummary>
<desc>
- <p>Returns the results of applying the match specification
- <c><anno>MatchSpec</anno></c> to some or all objects stored in the table
- <c><anno>Name</anno></c>. The order of the objects is not specified. See
- the ERTS User's Guide for a description of match
- specifications.</p>
+ <p>Returns the results of applying match specification
+ <c><anno>MatchSpec</anno></c> to some or all objects stored in table
+ <c><anno>Name</anno></c>. The order of the objects is not specified.
+ For a description of match specifications, see the
+ <seealso marker="erts:match_spec">ERTS User's Guide</seealso>.</p>
<p>A tuple of the results of applying the match specification
and a continuation is returned, unless the table is empty,
in which case <c>'$end_of_table'</c> is returned. The
- continuation is to be used when matching further objects by
- calling <c>select/1</c>.</p>
- <p>If the keypos'th element of <c><anno>MatchSpec</anno></c> is bound, the
- match specification is applied to all objects of the table
- with the right key(s). If the keypos'th element of
+ continuation is to be used when matching more objects by calling
+ <seealso marker="#select/1"><c>select/1</c></seealso>.</p>
+ <p>If the keypos'th element of <c><anno>MatchSpec</anno></c> is bound,
+ the match specification is applied to all objects of the table
+ with the correct key(s). If the keypos'th element of
<c><anno>MatchSpec</anno></c> is unbound, the match specification is
- applied to all objects of the table, <c><anno>N</anno></c> objects at a
- time, until at least one object matches or the end of the
- table has been reached. The default, indicated by giving
- <c><anno>N</anno></c> the value <c>default</c>, is to let the number of
- objects vary depending on the sizes of the objects. If
- <c><anno>Name</anno></c> is a version 9 table, all objects with the same
- key are always handled at the same time which implies that the
- match specification may be applied to more than <anno>N</anno> objects.
- </p>
- <p>The table should always be protected using
- <c>safe_fixtable/2</c> before calling <c>select/3</c>, or
- errors may occur when calling <c>select/1</c>.</p>
+ applied to all objects of the table, <c><anno>N</anno></c> objects at
+ a time, until at least one object matches or the end of the
+ table is reached. The default, indicated by giving
+ <c><anno>N</anno></c> the value <c>default</c>, is to let the number
+ of objects vary depending on the sizes of the objects. If
+ <c><anno>Name</anno></c> is a version 9 table, all objects with the
+ same key are always handled at the same time, which implies that the
+ match specification can be applied to more than <anno>N</anno>
+ objects.</p>
+ <p>The table is always to be protected using
+ <seealso marker="#safe_fixtable/2"><c>safe_fixtable/2</c></seealso>
+ before calling <c>select/3</c>, otherwise
+ errors can occur when calling <c>select/1</c>.</p>
</desc>
</func>
+
<func>
<name name="select_delete" arity="2"/>
- <fsummary>Delete all objects that match a given pattern from a Dets table.</fsummary>
+ <fsummary>Delete all objects that match a given pattern from a
+ Dets table.</fsummary>
<desc>
- <p>Deletes each object from the table <c><anno>Name</anno></c> such that
- applying the match specification <c><anno>MatchSpec</anno></c> to the
- object returns the value <c>true</c>. See the ERTS
- User's Guide for a description of match
- specifications. Returns the number of deleted objects.</p>
+ <p>Deletes each object from table <c><anno>Name</anno></c> such that
+ applying match specification <c><anno>MatchSpec</anno></c> to the
+ object returns value <c>true</c>.
+ For a description of match specifications, see the
+ <seealso marker="erts:match_spec">ERTS User's Guide</seealso>.
+ Returns the number of deleted objects.</p>
<p>If the keypos'th element of <c><anno>MatchSpec</anno></c> is
bound, the match specification is applied to the objects
- with the right key(s) only.</p>
+ with the correct key(s) only.</p>
</desc>
</func>
+
<func>
<name name="slot" arity="2"/>
- <fsummary>Return the list of objects associated with a slot of a Dets table.</fsummary>
+ <fsummary>Return the list of objects associated with a slot of a
+ Dets table.</fsummary>
<desc>
<p>The objects of a table are distributed among slots,
- starting with slot <c>0</c> and ending with slot n. This
- function returns the list of objects associated with slot
- <c><anno>I</anno></c>. If <c><anno>I</anno></c> is greater than n
+ starting with slot <c>0</c> and ending with slot <c>n</c>.
+ Returns the list of objects associated with slot
+ <c><anno>I</anno></c>. If <c><anno>I</anno></c> &gt; <c>n</c>,
<c>'$end_of_table'</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="sync" arity="1"/>
- <fsummary>Ensure that all updates made to a Dets table are written to disk.</fsummary>
+ <fsummary>Ensure that all updates made to a Dets table are written
+ to disk.</fsummary>
<desc>
- <p>Ensures that all updates made to the table <c><anno>Name</anno></c> are
- written to disk. This also applies to tables which have been
- opened with the <c>ram_file</c> flag set to <c>true</c>. In
- this case, the contents of the RAM file are flushed to
- disk.</p>
- <p>Note that the space management data structures kept in RAM,
- the buddy system, is also written to the disk. This may take
+ <p>Ensures that all updates made to table <c><anno>Name</anno></c> are
+ written to disk. This also applies to tables that have been
+ opened with flag <c>ram_file</c> set to <c>true</c>. In
+ this case, the contents of the RAM file are flushed to disk.</p>
+ <p>Notice that the space management data structures kept in RAM,
+ the buddy system, is also written to the disk. This can take
some time if the table is fragmented.</p>
</desc>
</func>
+
<func>
<name name="table" arity="1"/>
<name name="table" arity="2"/>
<fsummary>Return a QLC query handle.</fsummary>
<desc>
- <p><marker id="qlc_table"></marker>Returns a QLC (Query List
- Comprehension) query handle. The module <c>qlc</c>
- implements a query language aimed mainly at Mnesia but Ets
- tables, Dets tables, and lists are also recognized by <c>qlc</c>
- as sources of data. Calling <c>dets:table/1,2</c> is the
- means to make the Dets table <c><anno>Name</anno></c> usable to <c>qlc</c>.</p>
- <p>When there are only simple restrictions on the key position
- <c>qlc</c> uses <c>dets:lookup/2</c> to look up the keys, but when
- that is not possible the whole table is traversed. The
- option <c>traverse</c> determines how this is done:</p>
+ <p>Returns a Query List
+ Comprehension (QLC) query handle. The
+ <seealso marker="qlc"><c>qlc(3)</c></seealso> module
+ provides a query language aimed mainly for Mnesia, but
+ ETS tables, Dets tables, and lists are also recognized
+ by <c>qlc</c> as sources of data. Calling
+ <seealso marker="dets#table/1"><c>dets:table/1,2</c></seealso> is the
+ means to make Dets table <c><anno>Name</anno></c> usable to
+ <c>qlc</c>.</p>
+ <p>When there are only simple restrictions on the key position,
+ <c>qlc</c> uses
+ <seealso marker="dets#lookup/2"><c>dets:lookup/2</c></seealso>
+ to look up the keys. When
+ that is not possible, the whole table is traversed.
+ Option <c>traverse</c> determines how this is done:</p>
<list type="bulleted">
<item>
- <p><c>first_next</c>. The table is traversed one key at
- a time by calling <c>dets:first/1</c> and
- <c>dets:next/2</c>.</p>
+ <p><c>first_next</c> - The table is traversed one key at
+ a time by calling <c>dets:first/1</c> and <c>dets:next/2</c>.</p>
</item>
<item>
- <p><c>select</c>. The table is traversed by calling
- <c>dets:select/3</c> and <c>dets:select/1</c>. The option
- <c>n_objects</c> determines the number of objects
+ <p><c>select</c> - The table is traversed by calling
+ <seealso marker="dets:select/3"><c>dets:select/3</c></seealso> and
+ <seealso marker="dets:select/1"><c>dets:select/1</c></seealso>.
+ Option <c>n_objects</c> determines the number of objects
returned (the third argument of <c>select/3</c>). The
match specification (the second argument of
- <c>select/3</c>) is assembled by <c>qlc</c>: simple filters are
- translated into equivalent match specifications while
- more complicated filters have to be applied to all
- objects returned by <c>select/3</c> given a match
- specification that matches all objects.</p>
+ <c>select/3</c>) is assembled by <c>qlc</c>:</p>
+ <list type="bulleted">
+ <item>
+ <p>Simple filters are translated into equivalent match
+ specifications.</p>
+ </item>
+ <item>
+ <p>More complicated filters must be applied to all
+ objects returned by <c>select/3</c> given a match
+ specification that matches all objects.</p>
+ </item>
+ </list>
</item>
<item>
<p><c>{select, </c><seealso marker="#type-match_spec">
- match_spec()</seealso><c>}</c>. As for <c>select</c>
+ match_spec()</seealso><c>}</c> - As for <c>select</c>,
the table is traversed by calling <c>dets:select/3</c>
and <c>dets:select/1</c>. The difference is that the
- match specification is explicitly given. This is how to
+ match specification is specified explicitly. This is how to
state match specifications that cannot easily be
expressed within the syntax provided by <c>qlc</c>.</p>
</item>
@@ -1076,70 +1159,79 @@ ok
1> <input>dets:open_file(t, []),</input>
<input>ok = dets:insert(t, [{1,a},{2,b},{3,c},{4,d}]),</input>
<input>MS = ets:fun2ms(fun({X,Y}) when (X > 1) or (X &lt; 5) -> {Y} end),</input>
-<input>QH1 = dets:table(t, [{traverse, {select, MS}}]).</input> </pre>
+<input>QH1 = dets:table(t, [{traverse, {select, MS}}]).</input></pre>
<p>An example with implicit match specification:</p>
<pre>
-2> <input>QH2 = qlc:q([{Y} || {X,Y} &lt;- dets:table(t), (X > 1) or (X &lt; 5)]).</input> </pre>
- <p>The latter example is in fact equivalent to the former which
- can be verified using the function <c>qlc:info/1</c>:</p>
+2> <input>QH2 = qlc:q([{Y} || {X,Y} &lt;- dets:table(t), (X > 1) or (X &lt; 5)]).</input></pre>
+ <p>The latter example is equivalent to the former, which
+ can be verified using function <c>qlc:info/1</c>:</p>
<pre>
3> <input>qlc:info(QH1) =:= qlc:info(QH2).</input>
-true </pre>
- <p><c>qlc:info/1</c> returns information about a query handle,
- and in this case identical information is returned for the
+true</pre>
+ <p><c>qlc:info/1</c> returns information about a query handle.
+ In this case identical information is returned for the
two query handles.</p>
</desc>
</func>
+
<func>
<name name="to_ets" arity="2"/>
- <fsummary>Insert all objects of a Dets table into an Ets table.</fsummary>
+ <fsummary>Insert all objects of a Dets table into an ETS
+ table.</fsummary>
<desc>
- <p>Inserts the objects of the Dets table <c><anno>Name</anno></c> into the
- Ets table <c><anno>EtsTab</anno></c>. The order in which the objects are
- inserted is not specified. The existing objects of the Ets
+ <p>Inserts the objects of the Dets table <c><anno>Name</anno></c>
+ into the ETS table <c><anno>EtsTab</anno></c>. The order in
+ which the objects are
+ inserted is not specified. The existing objects of the ETS
table are kept unless overwritten.</p>
</desc>
</func>
+
<func>
<name name="traverse" arity="2"/>
- <fsummary>Apply a function to all or some objects stored in a Dets table.</fsummary>
+ <fsummary>Apply a function to all or some objects stored in a Dets
+ table.</fsummary>
<desc>
- <p>Applies <c><anno>Fun</anno></c> to each object stored in the table
- <c><anno>Name</anno></c> in some unspecified order. Different actions are
+ <p>Applies <c><anno>Fun</anno></c> to each object stored in table
+ <c><anno>Name</anno></c> in some unspecified order. Different
+ actions are
taken depending on the return value of <c><anno>Fun</anno></c>. The
following <c><anno>Fun</anno></c> return values are allowed:</p>
<taglist>
<tag><c>continue</c></tag>
<item>
<p>Continue to perform the traversal. For example, the
- following function can be used to print out the contents
+ following function can be used to print the contents
of a table:</p>
<pre>
-fun(X) -> io:format("~p~n", [X]), continue end. </pre>
+fun(X) -> io:format("~p~n", [X]), continue end.</pre>
</item>
<tag><c>{continue, Val}</c></tag>
<item>
- <p>Continue the traversal and accumulate <c><anno>Val</anno></c>. The
- following function is supplied in order to collect all
- objects of a table in a list: </p>
+ <p>Continue the traversal and accumulate <c><anno>Val</anno></c>.
+ The following function is supplied to collect all
+ objects of a table in a list:</p>
<pre>
-fun(X) -> {continue, X} end. </pre>
+fun(X) -> {continue, X} end.</pre>
</item>
<tag><c>{done, <anno>Value</anno>}</c></tag>
<item>
- <p>Terminate the traversal and return <c>[<anno>Value</anno> | Acc]</c>.</p>
+ <p>Terminate the traversal and return
+ <c>[<anno>Value</anno> | Acc]</c>.</p>
</item>
</taglist>
- <p>Any other value <c><anno>OtherValue</anno></c> returned by <c><anno>Fun</anno></c> terminates the
- traversal and is immediately returned.
- </p>
+ <p>Any other value <c><anno>OtherValue</anno></c> returned by
+ <c><anno>Fun</anno></c> terminates the
+ traversal and is returned immediately.</p>
</desc>
</func>
+
<func>
<name name="update_counter" arity="3"/>
- <fsummary>Update a counter object stored in a Dets table.</fsummary>
+ <fsummary>Update a counter object stored in a Dets table.
+ </fsummary>
<desc>
- <p>Updates the object with key <c><anno>Key</anno></c> stored in the
+ <p>Updates the object with key <c><anno>Key</anno></c> stored in
table <c><anno>Name</anno></c> of type <c>set</c> by adding
<c><anno>Incr</anno></c> to the
element at the <c><anno>Pos</anno></c>:th position.
@@ -1148,7 +1240,7 @@ fun(X) -> {continue, X} end. </pre>
following the key is updated.</p>
<p>This functions provides a way of updating a counter,
without having to look up an object, update the object by
- incrementing an element and insert the resulting object into
+ incrementing an element, and insert the resulting object into
the table again.</p>
</desc>
</func>
@@ -1156,8 +1248,9 @@ fun(X) -> {continue, X} end. </pre>
<section>
<title>See Also</title>
- <p><seealso marker="ets">ets(3)</seealso>,
- mnesia(3),
- <seealso marker="qlc">qlc(3)</seealso></p>
+ <p><seealso marker="ets"><c>ets(3)</c></seealso>,
+ <seealso marker="mnesia:mnesia"><c>mnesia(3)</c></seealso>,
+ <seealso marker="qlc"><c>qlc(3)</c></seealso></p>
</section>
</erlref>
+
diff --git a/lib/stdlib/doc/src/dict.xml b/lib/stdlib/doc/src/dict.xml
index 20bab99a9c..c926ff1b5b 100644
--- a/lib/stdlib/doc/src/dict.xml
+++ b/lib/stdlib/doc/src/dict.xml
@@ -29,12 +29,13 @@
<rev>B</rev>
</header>
<module>dict</module>
- <modulesummary>Key-Value Dictionary</modulesummary>
+ <modulesummary>Key-value dictionary.</modulesummary>
<description>
- <p><c>Dict</c> implements a <c>Key</c> - <c>Value</c> dictionary.
+ <p>This module provides a <c>Key</c>-<c>Value</c> dictionary.
The representation of a dictionary is not defined.</p>
- <p>This module provides exactly the same interface as the module
- <c>orddict</c>. One difference is that while this module
+ <p>This module provides the same interface as the
+ <seealso marker="orddict"><c>orddict(3)</c></seealso> module.
+ One difference is that while this module
considers two keys as different if they do not match (<c>=:=</c>),
<c>orddict</c> considers two keys as different if and only if
they do not compare equal (<c>==</c>).</p>
@@ -43,211 +44,241 @@
<datatypes>
<datatype>
<name name="dict" n_vars="2"/>
- <desc><p>Dictionary as returned by <c>new/0</c>.</p></desc>
+ <desc><p>Dictionary as returned by
+ <seealso marker="#new/0"><c>new/0</c></seealso>.</p>
+ </desc>
</datatype>
<datatype>
<name name="dict" n_vars="0"/>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="append" arity="3"/>
- <fsummary>Append a value to keys in a dictionary</fsummary>
+ <fsummary>Append a value to keys in a dictionary.</fsummary>
<desc>
- <p>This function appends a new <c><anno>Value</anno></c> to the current list
+ <p>Appends a new <c><anno>Value</anno></c> to the current list
of values associated with <c><anno>Key</anno></c>.</p>
+ <p>See also section <seealso marker="#notes">Notes</seealso>.</p>
</desc>
</func>
+
<func>
<name name="append_list" arity="3"/>
- <fsummary>Append new values to keys in a dictionary</fsummary>
+ <fsummary>Append new values to keys in a dictionary.</fsummary>
<desc>
- <p>This function appends a list of values <c><anno>ValList</anno></c> to
+ <p>Appends a list of values <c><anno>ValList</anno></c> to
the current list of values associated with <c><anno>Key</anno></c>. An
exception is generated if the initial value associated with
<c><anno>Key</anno></c> is not a list of values.</p>
+ <p>See also section <seealso marker="#notes">Notes</seealso>.</p>
</desc>
</func>
+
<func>
<name name="erase" arity="2"/>
- <fsummary>Erase a key from a dictionary</fsummary>
+ <fsummary>Erase a key from a dictionary.</fsummary>
<desc>
- <p>This function erases all items with a given key from a
- dictionary.</p>
+ <p>Erases all items with a given key from a dictionary.</p>
</desc>
</func>
+
<func>
<name name="fetch" arity="2"/>
- <fsummary>Look-up values in a dictionary</fsummary>
+ <fsummary>Look up values in a dictionary.</fsummary>
<desc>
- <p>This function returns the value associated with <c><anno>Key</anno></c>
- in the dictionary <c><anno>Dict</anno></c>. <c>fetch</c> assumes that
- the <c><anno>Key</anno></c> is present in the dictionary and an exception
+ <p>Returns the value associated with <c><anno>Key</anno></c>
+ in dictionary <c><anno>Dict</anno></c>. This function assumes that
+ <c><anno>Key</anno></c> is present in dictionary <c>Dict</c>,
+ and an exception
is generated if <c><anno>Key</anno></c> is not in the dictionary.</p>
+ <p>See also section <seealso marker="#notes">Notes</seealso>.</p>
</desc>
</func>
+
<func>
<name name="fetch_keys" arity="1"/>
- <fsummary>Return all keys in a dictionary</fsummary>
+ <fsummary>Return all keys in a dictionary.</fsummary>
<desc>
- <p>This function returns a list of all keys in the dictionary.</p>
+ <p>Returns a list of all keys in dictionary <c>Dict</c>.</p>
</desc>
</func>
+
<func>
<name name="filter" arity="2"/>
- <fsummary>Choose elements which satisfy a predicate</fsummary>
+ <fsummary>Select elements that satisfy a predicate.</fsummary>
<desc>
<p><c><anno>Dict2</anno></c> is a dictionary of all keys and values in
- <c><anno>Dict1</anno></c> for which <c><anno>Pred</anno>(<anno>Key</anno>, <anno>Value</anno>)</c> is <c>true</c>.</p>
+ <c><anno>Dict1</anno></c> for which
+ <c><anno>Pred</anno>(<anno>Key</anno>, <anno>Value</anno>)</c> is
+ <c>true</c>.</p>
</desc>
</func>
+
<func>
<name name="find" arity="2"/>
- <fsummary>Search for a key in a dictionary</fsummary>
+ <fsummary>Search for a key in a dictionary.</fsummary>
<desc>
- <p>This function searches for a key in a dictionary. Returns
- <c>{ok, <anno>Value</anno>}</c> where <c><anno>Value</anno></c> is the value associated
- with <c><anno>Key</anno></c>, or <c>error</c> if the key is not present in
- the dictionary.</p>
+ <p>Searches for a key in dictionary <c>Dict</c>. Returns
+ <c>{ok, <anno>Value</anno>}</c>, where <c><anno>Value</anno></c> is
+ the value associated with <c><anno>Key</anno></c>, or <c>error</c>
+ if the key is not present in the dictionary.</p>
+ <p>See also section <seealso marker="#notes">Notes</seealso>.</p>
</desc>
</func>
+
<func>
<name name="fold" arity="3"/>
- <fsummary>Fold a function over a dictionary</fsummary>
+ <fsummary>Fold a function over a dictionary.</fsummary>
<desc>
<p>Calls <c><anno>Fun</anno></c> on successive keys and values of
- <c><anno>Dict</anno></c> together with an extra argument <c>Acc</c>
+ dictionary <c><anno>Dict</anno></c> together with an extra argument
+ <c>Acc</c>
(short for accumulator). <c><anno>Fun</anno></c> must return a new
- accumulator which is passed to the next call. <c><anno>Acc0</anno></c> is
- returned if the dict is empty. The evaluation order is
+ accumulator that is passed to the next call. <c><anno>Acc0</anno></c>
+ is returned if the dictionary is empty. The evaluation order is
undefined.</p>
</desc>
</func>
+
<func>
<name name="from_list" arity="1"/>
- <fsummary>Convert a list of pairs to a dictionary</fsummary>
+ <fsummary>Convert a list of pairs to a dictionary.</fsummary>
<desc>
- <p>This function converts the <c><anno>Key</anno></c> - <c><anno>Value</anno></c> list
- <c><anno>List</anno></c> to a dictionary.</p>
+ <p>Converts the <c><anno>Key</anno></c>-<c><anno>Value</anno></c> list
+ <c><anno>List</anno></c> to dictionary <c>Dict</c>.</p>
</desc>
</func>
+
+ <func>
+ <name name="is_empty" arity="1"/>
+ <fsummary>Return <c>true</c> if the dictionary is empty.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if dictionary <c><anno>Dict</anno></c> has no
+ elements, otherwise <c>false</c>.</p>
+ </desc>
+ </func>
+
<func>
<name name="is_key" arity="2"/>
- <fsummary>Test if a key is in a dictionary</fsummary>
+ <fsummary>Test if a key is in a dictionary.</fsummary>
<desc>
- <p>This function tests if <c><anno>Key</anno></c> is contained in
- the dictionary <c><anno>Dict</anno></c>.</p>
+ <p>Tests if <c><anno>Key</anno></c> is contained in
+ dictionary <c><anno>Dict</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="map" arity="2"/>
- <fsummary>Map a function over a dictionary</fsummary>
+ <fsummary>Map a function over a dictionary.</fsummary>
<desc>
- <p><c>map</c> calls <c><anno>Fun</anno></c> on successive keys and values
- of <c><anno>Dict1</anno></c> to return a new value for each key.
- The evaluation order is undefined.</p>
+ <p>Calls <c><anno>Fun</anno></c> on successive keys and values
+ of dictionary <c><anno>Dict1</anno></c> to return a new value for
+ each key. The evaluation order is undefined.</p>
</desc>
</func>
+
<func>
<name name="merge" arity="3"/>
- <fsummary>Merge two dictionaries</fsummary>
+ <fsummary>Merge two dictionaries.</fsummary>
<desc>
- <p><c>merge</c> merges two dictionaries, <c><anno>Dict1</anno></c> and
- <c><anno>Dict2</anno></c>, to create a new dictionary. All the <c><anno>Key</anno></c>
- - <c><anno>Value</anno></c> pairs from both dictionaries are included in
- the new dictionary. If a key occurs in both dictionaries then
- <c><anno>Fun</anno></c> is called with the key and both values to return a
- new value. <c>merge</c> could be defined as:</p>
+ <p>Merges two dictionaries, <c><anno>Dict1</anno></c> and
+ <c><anno>Dict2</anno></c>, to create a new dictionary. All the
+ <c><anno>Key</anno></c>-<c><anno>Value</anno></c> pairs from both
+ dictionaries are included in the new dictionary. If a key occurs
+ in both dictionaries, <c><anno>Fun</anno></c> is called with the
+ key and both values to return a new value.
+ <c>merge</c> can be defined as follows, but is faster:</p>
<code type="none">
merge(Fun, D1, D2) ->
fold(fun (K, V1, D) ->
update(K, fun (V2) -> Fun(K, V1, V2) end, V1, D)
end, D2, D1).</code>
- <p>but is faster.</p>
</desc>
</func>
+
<func>
<name name="new" arity="0"/>
- <fsummary>Create a dictionary</fsummary>
+ <fsummary>Create a dictionary.</fsummary>
<desc>
- <p>This function creates a new dictionary.</p>
+ <p>Creates a new dictionary.</p>
</desc>
</func>
+
<func>
<name name="size" arity="1"/>
- <fsummary>Return the number of elements in a dictionary</fsummary>
+ <fsummary>Return the number of elements in a dictionary.</fsummary>
<desc>
- <p>Returns the number of elements in a <c><anno>Dict</anno></c>.</p>
- </desc>
- </func>
- <func>
- <name name="is_empty" arity="1"/>
- <fsummary>Return true if the dictionary is empty</fsummary>
- <desc>
- <p>Returns <c>true</c> if <c><anno>Dict</anno></c> has no elements, <c>false</c> otherwise.</p>
+ <p>Returns the number of elements in dictionary
+ <c><anno>Dict</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="store" arity="3"/>
- <fsummary>Store a value in a dictionary</fsummary>
+ <fsummary>Store a value in a dictionary.</fsummary>
<desc>
- <p>This function stores a <c><anno>Key</anno></c> - <c><anno>Value</anno></c> pair in a
- dictionary. If the <c><anno>Key</anno></c> already exists in <c><anno>Dict1</anno></c>,
+ <p>Stores a <c><anno>Key</anno></c>-<c><anno>Value</anno></c> pair in
+ dictionary <c>Dict2</c>. If <c><anno>Key</anno></c> already exists in
+ <c><anno>Dict1</anno></c>,
the associated value is replaced by <c><anno>Value</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="to_list" arity="1"/>
- <fsummary>Convert a dictionary to a list of pairs</fsummary>
+ <fsummary>Convert a dictionary to a list of pairs.</fsummary>
<desc>
- <p>This function converts the dictionary to a list
- representation.</p>
+ <p>Converts dictionary <c>Dict</c> to a list representation.</p>
</desc>
</func>
+
<func>
<name name="update" arity="3"/>
- <fsummary>Update a value in a dictionary</fsummary>
+ <fsummary>Update a value in a dictionary.</fsummary>
<desc>
- <p>Update a value in a dictionary by calling <c><anno>Fun</anno></c> on
- the value to get a new value. An exception is generated if
+ <p>Updates a value in a dictionary by calling <c><anno>Fun</anno></c> on
+ the value to get a new value. An exception is generated if
<c><anno>Key</anno></c> is not present in the dictionary.</p>
</desc>
</func>
+
<func>
<name name="update" arity="4"/>
- <fsummary>Update a value in a dictionary</fsummary>
+ <fsummary>Update a value in a dictionary.</fsummary>
<desc>
- <p>Update a value in a dictionary by calling <c><anno>Fun</anno></c> on
- the value to get a new value. If <c><anno>Key</anno></c> is not present
- in the dictionary then <c><anno>Initial</anno></c> will be stored as
- the first value. For example <c>append/3</c> could be defined
- as:</p>
+ <p>Updates a value in a dictionary by calling <c><anno>Fun</anno></c> on
+ the value to get a new value. If <c><anno>Key</anno></c> is not
+ present in the dictionary, <c><anno>Initial</anno></c> is stored as
+ the first value. For example, <c>append/3</c> can be defined as:</p>
<code type="none">
append(Key, Val, D) ->
update(Key, fun (Old) -> Old ++ [Val] end, [Val], D).</code>
</desc>
</func>
+
<func>
<name name="update_counter" arity="3"/>
- <fsummary>Increment a value in a dictionary</fsummary>
+ <fsummary>Increment a value in a dictionary.</fsummary>
<desc>
- <p>Add <c><anno>Increment</anno></c> to the value associated with <c><anno>Key</anno></c>
- and store this value. If <c><anno>Key</anno></c> is not present in
- the dictionary then <c><anno>Increment</anno></c> will be stored as
- the first value.</p>
- <p>This could be defined as:</p>
+ <p>Adds <c><anno>Increment</anno></c> to the value associated with
+ <c><anno>Key</anno></c> and stores this value.
+ If <c><anno>Key</anno></c> is not present in the dictionary,
+ <c><anno>Increment</anno></c> is stored as the first value.</p>
+ <p>This can be defined as follows, but is faster:</p>
<code type="none">
update_counter(Key, Incr, D) ->
update(Key, fun (Old) -> Old + Incr end, Incr, D).</code>
- <p>but is faster.</p>
</desc>
</func>
</funcs>
<section>
<title>Notes</title>
- <p>The functions <c>append</c> and <c>append_list</c> are included
- so we can store keyed values in a list <em>accumulator</em>. For
+ <marker id="notes"/>
+ <p>Functions <c>append</c> and <c>append_list</c> are included
+ so that keyed values can be stored in a list <em>accumulator</em>, for
example:</p>
<pre>
> D0 = dict:new(),
@@ -256,19 +287,18 @@ update_counter(Key, Incr, D) ->
D3 = dict:append(files, f2, D2),
D4 = dict:append(files, f3, D3),
dict:fetch(files, D4).
-[f1,f2,f3] </pre>
+[f1,f2,f3]</pre>
<p>This saves the trouble of first fetching a keyed value,
appending a new value to the list of stored values, and storing
- the result.
- </p>
- <p>The function <c>fetch</c> should be used if the key is known to
- be in the dictionary, otherwise <c>find</c>.</p>
+ the result.</p>
+ <p>Function <c>fetch</c> is to be used if the key is known to
+ be in the dictionary, otherwise function <c>find</c>.</p>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="gb_trees">gb_trees(3)</seealso>,
- <seealso marker="orddict">orddict(3)</seealso></p>
+ <p><seealso marker="gb_trees"><c>gb_trees(3)</c></seealso>,
+ <seealso marker="orddict"><c>orddict(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/digraph.xml b/lib/stdlib/doc/src/digraph.xml
index 16dd789caf..5332d7aba5 100644
--- a/lib/stdlib/doc/src/digraph.xml
+++ b/lib/stdlib/doc/src/digraph.xml
@@ -30,64 +30,92 @@
<checked></checked>
<date>2001-08-27</date>
<rev>C</rev>
- <file>digraph.sgml</file>
+ <file>digraph.xml</file>
</header>
<module>digraph</module>
- <modulesummary>Directed Graphs</modulesummary>
+ <modulesummary>Directed graphs.</modulesummary>
<description>
- <p>The <c>digraph</c> module implements a version of labeled
- directed graphs. What makes the graphs implemented here
+ <p>This module provides a version of labeled
+ directed graphs. What makes the graphs provided here
non-proper directed graphs is that multiple edges between
vertices are allowed. However, the customary definition of
- directed graphs will be used in the text that follows.
- </p>
- <p>A <marker id="digraph"></marker><em>directed graph</em> (or just
- "digraph") is a pair (V,&nbsp;E) of a finite set V of
- <marker id="vertex"></marker><em>vertices</em> and a finite set E of
- <marker id="edge"></marker><em>directed edges</em> (or just "edges").
- The set of
- edges E is a subset of V&nbsp;&times;&nbsp;V (the Cartesian
- product of V with itself). In this module, V is allowed to be
- empty; the so obtained unique digraph is called the
- <marker id="empty_digraph"></marker><em>empty digraph</em>.
- Both vertices and edges are represented by unique Erlang terms.
- </p>
- <p>Digraphs can be annotated with additional information. Such
- information may be attached to the vertices and to the edges of
- the digraph. A digraph which has been annotated is called a
- <em>labeled digraph</em>, and the information attached to a
- vertex or an edge is called a <marker id="label"></marker>
- <em>label</em>. Labels are Erlang terms.
- </p>
- <p>An edge e&nbsp;=&nbsp;(v,&nbsp;w) is said to
- <marker id="emanate"></marker><em>emanate</em> from vertex v and
- to be <marker id="incident"></marker><em>incident</em> on vertex w.
- The <marker id="out_degree"></marker><em>out-degree</em> of a vertex
- is the number of edges emanating from that vertex.
- The <marker id="in_degree"></marker><em>in-degree</em> of a vertex
- is the number of edges incident on that vertex.
- If there is an edge emanating from v and incident on w, then w is
- said to be an <marker id="out_neighbour"></marker>
- <em>out-neighbour</em> of v, and v is said to be an
- <marker id="in_neighbour"></marker><em>in-neighbour</em> of w.
- A <marker id="path"></marker><em>path</em> P from v[1] to v[k]
- in a digraph (V,&nbsp;E) is a non-empty sequence
- v[1],&nbsp;v[2],&nbsp;...,&nbsp;v[k] of vertices in V such that
- there is an edge (v[i],v[i+1]) in E for
- 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;&nbsp;k.
- The <marker id="length"></marker><em>length</em> of the path P is k-1.
- P is <marker id="simple_path"></marker><em>simple</em> if all
- vertices are distinct, except that the first and the last vertices
- may be the same.
- P is a <marker id="cycle"></marker><em>cycle</em> if the length
- of P is not zero and v[1] = v[k].
- A <marker id="loop"></marker><em>loop</em> is a cycle of length one.
- A <marker id="simple_cycle"></marker><em>simple cycle</em> is a path
- that is both a cycle and simple.
- An <marker id="acyclic_digraph"></marker><em>acyclic digraph</em>
- is a digraph that has no cycles.
- </p>
+ directed graphs is used here.</p>
+
+ <list type="bulleted">
+ <item>
+ <p>A <marker id="digraph"></marker><em>directed graph</em> (or just
+ "digraph") is a pair (V,&nbsp;E) of a finite set V of
+ <marker id="vertex"></marker><em>vertices</em> and a finite set E of
+ <marker id="edge"></marker><em>directed edges</em> (or just "edges").
+ The set of edges E is a subset of V&nbsp;&times;&nbsp;V (the
+ Cartesian product of V with itself).</p>
+ <p>In this module, V is allowed to be empty. The so obtained unique
+ digraph is called the
+ <marker id="empty_digraph"></marker><em>empty digraph</em>. Both
+ vertices and edges are represented by unique Erlang terms.</p>
+ </item>
+ <item>
+ <p>Digraphs can be annotated with more information. Such information
+ can be attached to the vertices and to the edges of the digraph. An
+ annotated digraph is called a <em>labeled digraph</em>, and the
+ information attached to a vertex or an edge is called a
+ <marker id="label"></marker><em>label</em>. Labels are Erlang
+ terms.</p>
+ </item>
+ <item>
+ <p>An edge e&nbsp;=&nbsp;(v,&nbsp;w) is said to
+ <marker id="emanate"></marker><em>emanate</em> from vertex v and to
+ be <marker id="incident"></marker><em>incident</em> on vertex w.</p>
+ </item>
+ <item>
+ <p>The <marker id="out_degree"></marker><em>out-degree</em> of a vertex
+ is the number of edges emanating from that vertex.</p>
+ </item>
+ <item>
+ <p>The <marker id="in_degree"></marker><em>in-degree</em> of a vertex
+ is the number of edges incident on that vertex.</p>
+ </item>
+ <item>
+ <p>If an edge is emanating from v and incident on w, then w is
+ said to be an <marker id="out_neighbour"></marker>
+ <em>out-neighbor</em> of v, and v is said to be an
+ <marker id="in_neighbour"></marker><em>in-neighbor</em> of w.</p>
+ </item>
+ <item>
+ <p>A <marker id="path"></marker><em>path</em> P from v[1] to v[k]
+ in a digraph (V,&nbsp;E) is a non-empty sequence
+ v[1],&nbsp;v[2],&nbsp;...,&nbsp;v[k] of vertices in V such that
+ there is an edge (v[i],v[i+1]) in E for
+ 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;&nbsp;k.</p>
+ </item>
+ <item>
+ <p>The <marker id="length"></marker><em>length</em> of path P is
+ k-1.</p>
+ </item>
+ <item>
+ <p>Path P is <marker id="simple_path"></marker><em>simple</em> if all
+ vertices are distinct, except that the first and the last vertices
+ can be the same.</p>
+ </item>
+ <item>
+ <p>Path P is a <marker id="cycle"></marker><em>cycle</em> if the
+ length of P is not zero and v[1] = v[k].</p>
+ </item>
+ <item>
+ <p>A <marker id="loop"></marker><em>loop</em> is a cycle of length
+ one.</p>
+ </item>
+ <item>
+ <p>A <marker id="simple_cycle"></marker><em>simple cycle</em> is a path
+ that is both a cycle and simple.</p>
+ </item>
+ <item>
+ <p>An <marker id="acyclic_digraph"></marker><em>acyclic digraph</em>
+ is a digraph without cycles.</p>
+ </item>
+ </list>
</description>
+
<datatypes>
<datatype>
<name name="d_type"/>
@@ -100,20 +128,20 @@
</datatype>
<datatype>
<name name="graph"/>
- <desc><p>A digraph as returned by <c>new/0,1</c>.</p></desc>
+ <desc><p>A digraph as returned by
+ <seealso marker="#new/0"><c>new/0,1</c></seealso>.</p></desc>
</datatype>
<datatype>
<name>edge()</name>
- <desc><p><marker id="type-edge"/></p></desc>
</datatype>
<datatype>
<name name="label"/>
</datatype>
<datatype>
<name>vertex()</name>
- <desc><p><marker id="type-vertex"/></p></desc>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="add_edge" arity="3"/>
@@ -122,291 +150,313 @@
<fsummary>Add an edge to a digraph.</fsummary>
<type name="add_edge_err_rsn"/>
<desc>
- <p><c>add_edge/5</c> creates (or modifies) the edge <c><anno>E</anno></c>
- of the digraph <c><anno>G</anno></c>, using <c><anno>Label</anno></c> as the (new)
- <seealso marker="#label">label</seealso> of the edge. The
+ <p><c>add_edge/5</c> creates (or modifies) edge <c><anno>E</anno></c>
+ of digraph <c><anno>G</anno></c>, using <c><anno>Label</anno></c> as
+ the (new) <seealso marker="#label">label</seealso> of the edge. The
edge is <seealso marker="#emanate">emanating</seealso> from
- <c><anno>V1</anno></c> and <seealso marker="#incident">incident</seealso>
- on <c><anno>V2</anno></c>. Returns <c><anno>E</anno></c>.
- </p>
- <p><c>add_edge(<anno>G</anno>,&nbsp;<anno>V1</anno>,&nbsp;<anno>V2</anno>,&nbsp;<anno>Label</anno>)</c> is
- equivalent to
+ <c><anno>V1</anno></c> and
+ <seealso marker="#incident">incident</seealso>
+ on <c><anno>V2</anno></c>. Returns <c><anno>E</anno></c>.</p>
+ <p><c>add_edge(<anno>G</anno>,&nbsp;<anno>V1</anno>,&nbsp;<anno>V2</anno>,&nbsp;<anno>Label</anno>)</c>
+ is equivalent to
<c>add_edge(<anno>G</anno>,&nbsp;<anno>E</anno>,&nbsp;<anno>V1</anno>,&nbsp;<anno>V2</anno>,&nbsp;<anno>Label</anno>)</c>,
where <c><anno>E</anno></c> is a created edge. The created edge is
- represented by the term <c>['$e'&nbsp;|&nbsp;N]</c>, where N
- is an integer&nbsp;&gt;=&nbsp;0.
- </p>
- <p><c>add_edge(<anno>G</anno>,&nbsp;<anno>V1</anno>,&nbsp;<anno>V2</anno>)</c> is equivalent to
+ represented by term <c>['$e'&nbsp;|&nbsp;N]</c>, where <c>N</c>
+ is an integer&nbsp;&gt;=&nbsp;0.</p>
+ <p><c>add_edge(<anno>G</anno>,&nbsp;<anno>V1</anno>,&nbsp;<anno>V2</anno>)</c>
+ is equivalent to
<c>add_edge(<anno>G</anno>,&nbsp;<anno>V1</anno>,&nbsp;<anno>V2</anno>,&nbsp;[])</c>.
- </p>
- <p>If the edge would create a cycle in
- an <seealso marker="#acyclic_digraph">acyclic digraph</seealso>,
- then <c>{error,&nbsp;{bad_edge,&nbsp;<anno>Path</anno>}}</c> is returned. If
- either of <c><anno>V1</anno></c> or <c><anno>V2</anno></c> is not a vertex of the
- digraph <c><anno>G</anno></c>, then
+ </p>
+ <p>If the edge would create a cycle in
+ an <seealso marker="#acyclic_digraph">acyclic digraph</seealso>,
+ <c>{error,&nbsp;{bad_edge,&nbsp;<anno>Path</anno>}}</c> is returned.
+ If either of <c><anno>V1</anno></c> or <c><anno>V2</anno></c> is not
+ a vertex of digraph <c><anno>G</anno></c>,
<c>{error,&nbsp;{bad_vertex,&nbsp;</c><anno>V</anno><c>}}</c> is
returned, <anno>V</anno>&nbsp;=&nbsp;<c><anno>V1</anno></c> or
- <anno>V</anno>&nbsp;=&nbsp;<c><anno>V2</anno></c>.
- </p>
+ <anno>V</anno>&nbsp;=&nbsp;<c><anno>V2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="add_vertex" arity="1"/>
<name name="add_vertex" arity="2"/>
<name name="add_vertex" arity="3"/>
<fsummary>Add or modify a vertex of a digraph.</fsummary>
<desc>
- <p><c>add_vertex/3</c> creates (or modifies) the vertex <c><anno>V</anno></c>
- of the digraph <c><anno>G</anno></c>, using <c><anno>Label</anno></c> as the (new)
+ <p><c>add_vertex/3</c> creates (or modifies) vertex
+ <c><anno>V</anno></c> of digraph <c><anno>G</anno></c>, using
+ <c><anno>Label</anno></c> as the (new)
<seealso marker="#label">label</seealso> of the
- vertex. Returns <c><anno>V</anno></c>.
- </p>
- <p><c>add_vertex(<anno>G</anno>,&nbsp;<anno>V</anno>)</c> is equivalent to
- <c>add_vertex(<anno>G</anno>,&nbsp;<anno>V</anno>,&nbsp;[])</c>.
- </p>
+ vertex. Returns <c><anno>V</anno></c>.</p>
+ <p><c>add_vertex(<anno>G</anno>,&nbsp;<anno>V</anno>)</c> is equivalent
+ to <c>add_vertex(<anno>G</anno>,&nbsp;<anno>V</anno>,&nbsp;[])</c>.
+ </p>
<p><c>add_vertex/1</c> creates a vertex using the empty list
as label, and returns the created vertex. The created vertex
- is represented by the term <c>['$v'&nbsp;|&nbsp;N]</c>,
- where N is an integer&nbsp;&gt;=&nbsp;0.
- </p>
+ is represented by term <c>['$v'&nbsp;|&nbsp;N]</c>,
+ where <c>N</c> is an integer&nbsp;&gt;=&nbsp;0.</p>
</desc>
</func>
+
<func>
<name name="del_edge" arity="2"/>
<fsummary>Delete an edge from a digraph.</fsummary>
<desc>
- <p>Deletes the edge <c><anno>E</anno></c> from the digraph <c><anno>G</anno></c>.
- </p>
+ <p>Deletes edge <c><anno>E</anno></c> from digraph
+ <c><anno>G</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="del_edges" arity="2"/>
<fsummary>Delete edges from a digraph.</fsummary>
<desc>
- <p>Deletes the edges in the list <c><anno>Edges</anno></c> from the digraph
- <c><anno>G</anno></c>.
- </p>
+ <p>Deletes the edges in list <c><anno>Edges</anno></c> from digraph
+ <c><anno>G</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="del_path" arity="3"/>
<fsummary>Delete paths from a digraph.</fsummary>
<desc>
- <p>Deletes edges from the digraph <c><anno>G</anno></c> until there are no
- <seealso marker="#path">paths</seealso> from the vertex
- <c><anno>V1</anno></c> to the vertex <c><anno>V2</anno></c>.
- </p>
- <p>A sketch of the procedure employed: Find an arbitrary
- <seealso marker="#simple_path">simple path</seealso>
- v[1],&nbsp;v[2],&nbsp;...,&nbsp;v[k] from <c><anno>V1</anno></c> to
- <c><anno>V2</anno></c> in <c><anno>G</anno></c>. Remove all edges of
- <c><anno>G</anno></c> <seealso marker="#emanate">emanating</seealso> from v[i]
- and <seealso marker="#incident">incident</seealso> to v[i+1] for
- 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;&nbsp;k (including multiple
- edges). Repeat until there is no path between <c><anno>V1</anno></c> and
- <c><anno>V2</anno></c>.
- </p>
+ <p>Deletes edges from digraph <c><anno>G</anno></c> until there are no
+ <seealso marker="#path">paths</seealso> from vertex
+ <c><anno>V1</anno></c> to vertex <c><anno>V2</anno></c>.</p>
+ <p>A sketch of the procedure employed:</p>
+ <list type="bulleted">
+ <item>
+ <p>Find an arbitrary
+ <seealso marker="#simple_path">simple path</seealso>
+ v[1],&nbsp;v[2],&nbsp;...,&nbsp;v[k] from <c><anno>V1</anno></c>
+ to <c><anno>V2</anno></c> in <c><anno>G</anno></c>.</p>
+ </item>
+ <item>
+ <p>Remove all edges of <c><anno>G</anno></c>
+ <seealso marker="#emanate">emanating</seealso> from v[i] and
+ <seealso marker="#incident">incident</seealso> to v[i+1] for
+ 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;&nbsp;k (including multiple
+ edges).</p>
+ </item>
+ <item>
+ <p>Repeat until there is no path between <c><anno>V1</anno></c>
+ and <c><anno>V2</anno></c>.</p>
+ </item>
+ </list>
</desc>
</func>
+
<func>
<name name="del_vertex" arity="2"/>
<fsummary>Delete a vertex from a digraph.</fsummary>
<desc>
- <p>Deletes the vertex <c><anno>V</anno></c> from the digraph <c><anno>G</anno></c>. Any
- edges <seealso marker="#emanate">emanating</seealso> from
- <c><anno>V</anno></c> or <seealso marker="#incident">incident</seealso>
- on <c><anno>V</anno></c> are also deleted.
- </p>
+ <p>Deletes vertex <c><anno>V</anno></c> from digraph
+ <c><anno>G</anno></c>. Any edges
+ <seealso marker="#emanate">emanating</seealso> from
+ <c><anno>V</anno></c> or
+ <seealso marker="#incident">incident</seealso>
+ on <c><anno>V</anno></c> are also deleted.</p>
</desc>
</func>
+
<func>
<name name="del_vertices" arity="2"/>
<fsummary>Delete vertices from a digraph.</fsummary>
<desc>
- <p>Deletes the vertices in the list <c><anno>Vertices</anno></c> from the
- digraph <c><anno>G</anno></c>.
- </p>
+ <p>Deletes the vertices in list <c><anno>Vertices</anno></c> from
+ digraph <c><anno>G</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="delete" arity="1"/>
<fsummary>Delete a digraph.</fsummary>
<desc>
- <p>Deletes the digraph <c><anno>G</anno></c>. This call is important
- because digraphs are implemented with <c>ETS</c>. There is
- no garbage collection of <c>ETS</c> tables. The digraph
- will, however, be deleted if the process that created the
- digraph terminates.
- </p>
+ <p>Deletes digraph <c><anno>G</anno></c>. This call is important
+ as digraphs are implemented with ETS. There is
+ no garbage collection of ETS tables. However, the digraph
+ is deleted if the process that created the digraph terminates.</p>
</desc>
</func>
+
<func>
<name name="edge" arity="2"/>
- <fsummary>Return the vertices and the label of an edge of a digraph.</fsummary>
+ <fsummary>Return the vertices and the label of an edge of a digraph.
+ </fsummary>
<desc>
- <p>Returns <c>{<anno>E</anno>,&nbsp;<anno>V1</anno>,&nbsp;<anno>V2</anno>,&nbsp;<anno>Label</anno>}</c> where
- <c><anno>Label</anno></c> is the <seealso marker="#label">label</seealso>
- of the edge
- <c><anno>E</anno></c> <seealso marker="#emanate">emanating</seealso> from
- <c><anno>V1</anno></c> and <seealso marker="#incident">incident</seealso> on
- <c><anno>V2</anno></c> of the digraph <c><anno>G</anno></c>.
- If there is no edge <c><anno>E</anno></c> of the
- digraph <c><anno>G</anno></c>, then <c>false</c> is returned.
- </p>
+ <p>Returns
+ <c>{<anno>E</anno>,&nbsp;<anno>V1</anno>,&nbsp;<anno>V2</anno>,&nbsp;<anno>Label</anno>}</c>,
+ where <c><anno>Label</anno></c> is the
+ <seealso marker="#label">label</seealso> of edge
+ <c><anno>E</anno></c> <seealso marker="#emanate">emanating</seealso>
+ from <c><anno>V1</anno></c> and
+ <seealso marker="#incident">incident</seealso> on
+ <c><anno>V2</anno></c> of digraph <c><anno>G</anno></c>.
+ If no edge <c><anno>E</anno></c> of
+ digraph <c><anno>G</anno></c> exists, <c>false</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="edges" arity="1"/>
<fsummary>Return all edges of a digraph.</fsummary>
<desc>
- <p>Returns a list of all edges of the digraph <c><anno>G</anno></c>, in
- some unspecified order.
- </p>
+ <p>Returns a list of all edges of digraph <c><anno>G</anno></c>, in
+ some unspecified order.</p>
</desc>
</func>
+
<func>
<name name="edges" arity="2"/>
- <fsummary>Return the edges emanating from or incident on a vertex of a digraph.</fsummary>
+ <fsummary>Return the edges emanating from or incident on a vertex of
+ a digraph.</fsummary>
<desc>
- <p>Returns a list of all
- edges <seealso marker="#emanate">emanating</seealso> from
- or <seealso marker="#incident">incident</seealso> on <c><anno>V</anno></c>
- of the digraph <c><anno>G</anno></c>, in some unspecified order.</p>
+ <p>Returns a list of all
+ edges <seealso marker="#emanate">emanating</seealso> from or
+ <seealso marker="#incident">incident</seealso> on<c><anno>V</anno></c>
+ of digraph <c><anno>G</anno></c>, in some unspecified order.</p>
</desc>
</func>
+
<func>
<name name="get_cycle" arity="2"/>
<fsummary>Find one cycle in a digraph.</fsummary>
<desc>
- <p>If there is
- a <seealso marker="#simple_cycle">simple cycle</seealso> of
- length two or more through the vertex
- <c><anno>V</anno></c>, then the cycle is returned as a list
- <c>[<anno>V</anno>,&nbsp;...,&nbsp;<anno>V</anno>]</c> of vertices, otherwise if there
- is a <seealso marker="#loop">loop</seealso> through
- <c><anno>V</anno></c>, then the loop is returned as a list <c>[<anno>V</anno>]</c>. If
- there are no cycles through <c><anno>V</anno></c>, then <c>false</c> is
- returned.
- </p>
- <p><c>get_path/3</c> is used for finding a simple cycle
- through <c><anno>V</anno></c>.
- </p>
+ <p>If a <seealso marker="#simple_cycle">simple cycle</seealso> of
+ length two or more exists through vertex <c><anno>V</anno></c>, the
+ cycle is returned as a list
+ <c>[<anno>V</anno>,&nbsp;...,&nbsp;<anno>V</anno>]</c> of vertices.
+ If a <seealso marker="#loop">loop</seealso> through
+ <c><anno>V</anno></c> exists, the loop is returned as a list
+ <c>[<anno>V</anno>]</c>. If no cycles through
+ <c><anno>V</anno></c> exist, <c>false</c> is returned.</p>
+ <p><seealso marker="#get_path/3"><c>get_path/3</c></seealso> is used
+ for finding a simple cycle through <c><anno>V</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="get_path" arity="3"/>
<fsummary>Find one path in a digraph.</fsummary>
<desc>
- <p>Tries to find
- a <seealso marker="#simple_path">simple path</seealso> from
- the vertex <c><anno>V1</anno></c> to the vertex
- <c><anno>V2</anno></c> of the digraph <c><anno>G</anno></c>. Returns the path as a
- list <c>[<anno>V1</anno>,&nbsp;...,&nbsp;<anno>V2</anno>]</c> of vertices, or
- <c>false</c> if no simple path from <c><anno>V1</anno></c> to <c><anno>V2</anno></c>
- of length one or more exists.
- </p>
- <p>The digraph <c><anno>G</anno></c> is traversed in a depth-first manner,
- and the first path found is returned.
- </p>
+ <p>Tries to find
+ a <seealso marker="#simple_path">simple path</seealso> from vertex
+ <c><anno>V1</anno></c> to vertex <c><anno>V2</anno></c> of digraph
+ <c><anno>G</anno></c>. Returns the path as a list
+ <c>[<anno>V1</anno>,&nbsp;...,&nbsp;<anno>V2</anno>]</c> of vertices,
+ or <c>false</c> if no simple path from <c><anno>V1</anno></c> to
+ <c><anno>V2</anno></c> of length one or more exists.</p>
+ <p>Digraph <c><anno>G</anno></c> is traversed in a depth-first manner,
+ and the first found path is returned.</p>
</desc>
</func>
+
<func>
<name name="get_short_cycle" arity="2"/>
<fsummary>Find one short cycle in a digraph.</fsummary>
<desc>
- <p>Tries to find an as short as
- possible <seealso marker="#simple_cycle">simple cycle</seealso> through
- the vertex <c><anno>V</anno></c> of the digraph <c>G</c>. Returns the cycle
- as a list <c>[<anno>V</anno>,&nbsp;...,&nbsp;<anno>V</anno>]</c> of vertices, or
+ <p>Tries to find an as short as possible
+ <seealso marker="#simple_cycle">simple cycle</seealso> through
+ vertex <c><anno>V</anno></c> of digraph <c>G</c>. Returns the cycle
+ as a list <c>[<anno>V</anno>,&nbsp;...,&nbsp;<anno>V</anno>]</c>
+ of vertices, or
<c>false</c> if no simple cycle through <c><anno>V</anno></c> exists.
- Note that a <seealso marker="#loop">loop</seealso> through
- <c><anno>V</anno></c> is returned as the list <c>[<anno>V</anno>,&nbsp;<anno>V</anno>]</c>.
- </p>
- <p><c>get_short_path/3</c> is used for finding a simple cycle
- through <c><anno>V</anno></c>.
- </p>
+ Notice that a <seealso marker="#loop">loop</seealso> through
+ <c><anno>V</anno></c> is returned as list
+ <c>[<anno>V</anno>,&nbsp;<anno>V</anno>]</c>.</p>
+ <p><seealso marker="#get_short_path/3"><c>get_short_path/3</c></seealso>
+ is used for finding a simple cycle through <c><anno>V</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="get_short_path" arity="3"/>
<fsummary>Find one short path in a digraph.</fsummary>
<desc>
- <p>Tries to find an as short as
- possible <seealso marker="#simple_path">simple path</seealso> from
- the vertex <c><anno>V1</anno></c> to the vertex <c><anno>V2</anno></c> of the digraph <c><anno>G</anno></c>.
- Returns the path as a list <c>[<anno>V1</anno>,&nbsp;...,&nbsp;<anno>V2</anno>]</c> of
- vertices, or <c>false</c> if no simple path from <c><anno>V1</anno></c>
- to <c><anno>V2</anno></c> of length one or more exists.
- </p>
- <p>The digraph <c><anno>G</anno></c> is traversed in a breadth-first
- manner, and the first path found is returned.
- </p>
+ <p>Tries to find an as short as possible
+ <seealso marker="#simple_path">simple path</seealso> from vertex
+ <c><anno>V1</anno></c> to vertex <c><anno>V2</anno></c> of digraph
+ <c><anno>G</anno></c>. Returns the path as a list
+ <c>[<anno>V1</anno>,&nbsp;...,&nbsp;<anno>V2</anno>]</c> of
+ vertices, or <c>false</c> if no simple path from
+ <c><anno>V1</anno></c>
+ to <c><anno>V2</anno></c> of length one or more exists.</p>
+ <p>Digraph <c><anno>G</anno></c> is traversed in a breadth-first
+ manner, and the first found path is returned.</p>
</desc>
</func>
+
<func>
<name name="in_degree" arity="2"/>
<fsummary>Return the in-degree of a vertex of a digraph.</fsummary>
<desc>
- <p>Returns the <seealso marker="#in_degree">in-degree</seealso> of the vertex
- <c><anno>V</anno></c> of the digraph <c><anno>G</anno></c>.
- </p>
+ <p>Returns the <seealso marker="#in_degree">in-degree</seealso> of
+ vertex <c><anno>V</anno></c> of digraph <c><anno>G</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="in_edges" arity="2"/>
- <fsummary>Return all edges incident on a vertex of a digraph.</fsummary>
+ <fsummary>Return all edges incident on a vertex of a digraph.</fsummary>
<desc>
- <p>Returns a list of all
- edges <seealso marker="#incident">incident</seealso> on
- <c><anno>V</anno></c> of the digraph <c><anno>G</anno></c>, in some unspecified order.
- </p>
+ <p>Returns a list of all
+ edges <seealso marker="#incident">incident</seealso> on
+ <c><anno>V</anno></c> of digraph <c><anno>G</anno></c>,
+ in some unspecified order.</p>
</desc>
</func>
+
<func>
<name name="in_neighbours" arity="2"/>
- <fsummary>Return all in-neighbours of a vertex of a digraph.</fsummary>
+ <fsummary>Return all in-neighbors of a vertex of a digraph.</fsummary>
<desc>
- <p>Returns a list of
- all <seealso marker="#in_neighbour">in-neighbours</seealso> of
- <c><anno>V</anno></c> of the digraph <c><anno>G</anno></c>, in some unspecified order.
- </p>
+ <p>Returns a list of
+ all <seealso marker="#in_neighbour">in-neighbors</seealso> of
+ <c><anno>V</anno></c> of digraph <c><anno>G</anno></c>,
+ in some unspecified order.</p>
</desc>
</func>
+
<func>
<name name="info" arity="1"/>
<fsummary>Return information about a digraph.</fsummary>
<type name="d_cyclicity"/>
<type name="d_protection"/>
<desc>
- <p>Returns a list of <c>{Tag, Value}</c> pairs describing the
- digraph <c><anno>G</anno></c>. The following pairs are returned:
- </p>
+ <p>Returns a list of <c>{Tag, Value}</c> pairs describing
+ digraph <c><anno>G</anno></c>. The following pairs are returned:</p>
<list type="bulleted">
<item>
- <p><c>{cyclicity, <anno>Cyclicity</anno>}</c>, where <c><anno>Cyclicity</anno></c>
+ <p><c>{cyclicity, <anno>Cyclicity</anno>}</c>, where
+ <c><anno>Cyclicity</anno></c>
is <c>cyclic</c> or <c>acyclic</c>, according to the
options given to <c>new</c>.</p>
</item>
<item>
- <p><c>{memory, <anno>NoWords</anno>}</c>, where <c><anno>NoWords</anno></c> is
- the number of words allocated to the <c>ETS</c> tables.</p>
+ <p><c>{memory, <anno>NoWords</anno>}</c>, where
+ <c><anno>NoWords</anno></c> is
+ the number of words allocated to the ETS tables.</p>
</item>
<item>
- <p><c>{protection, <anno>Protection</anno>}</c>, where <c><anno>Protection</anno></c>
+ <p><c>{protection, <anno>Protection</anno>}</c>, where
+ <c><anno>Protection</anno></c>
is <c>protected</c> or <c>private</c>, according
to the options given to <c>new</c>.</p>
</item>
</list>
</desc>
</func>
+
<func>
<name name="new" arity="0"/>
- <fsummary>Return a protected empty digraph, where cycles are allowed.</fsummary>
+ <fsummary>Return a protected empty digraph, where cycles are allowed.
+ </fsummary>
<desc>
- <p>Equivalent to <c>new([])</c>.
- </p>
+ <p>Equivalent to <c>new([])</c>.</p>
</desc>
</func>
+
<func>
<name name="new" arity="1"/>
<fsummary>Create a new empty digraph.</fsummary>
@@ -415,97 +465,103 @@
<type name="d_cyclicity"/>
<type name="d_protection"/>
<desc>
- <p>Returns
- an <seealso marker="#empty_digraph">empty digraph</seealso> with
- properties according to the options in <c><anno>Type</anno></c>:</p>
+ <p>Returns
+ an <seealso marker="#empty_digraph">empty digraph</seealso> with
+ properties according to the options in <c><anno>Type</anno></c>:</p>
<taglist>
<tag><c>cyclic</c></tag>
- <item>Allow <seealso marker="#cycle">cycles</seealso> in the
- digraph (default).</item>
+ <item><p>Allows <seealso marker="#cycle">cycles</seealso> in the
+ digraph (default).</p></item>
<tag><c>acyclic</c></tag>
- <item>The digraph is to be kept <seealso marker="#acyclic_digraph">acyclic</seealso>.</item>
+ <item><p>The digraph is to be kept
+ <seealso marker="#acyclic_digraph">acyclic</seealso>.</p></item>
<tag><c>protected</c></tag>
- <item>Other processes can read the digraph (default).</item>
+ <item><p>Other processes can read the digraph (default).</p></item>
<tag><c>private</c></tag>
- <item>The digraph can be read and modified by the creating
- process only.</item>
+ <item><p>The digraph can be read and modified by the creating
+ process only.</p></item>
</taglist>
- <p>If an unrecognized type option <c>T</c> is given or <c><anno>Type</anno></c>
- is not a proper list, there will be a <c>badarg</c> exception.
- </p>
+ <p>If an unrecognized type option <c>T</c> is specified or
+ <c><anno>Type</anno></c>
+ is not a proper list, a <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="no_edges" arity="1"/>
- <fsummary>Return the number of edges of the a digraph.</fsummary>
+ <fsummary>Return the number of edges of a digraph.</fsummary>
<desc>
- <p>Returns the number of edges of the digraph <c><anno>G</anno></c>.
- </p>
+ <p>Returns the number of edges of digraph <c><anno>G</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="no_vertices" arity="1"/>
<fsummary>Return the number of vertices of a digraph.</fsummary>
<desc>
- <p>Returns the number of vertices of the digraph <c><anno>G</anno></c>.
- </p>
+ <p>Returns the number of vertices of digraph <c><anno>G</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="out_degree" arity="2"/>
<fsummary>Return the out-degree of a vertex of a digraph.</fsummary>
<desc>
- <p>Returns the <seealso marker="#out_degree">out-degree</seealso> of the vertex
- <c><anno>V</anno></c> of the digraph <c><anno>G</anno></c>.
- </p>
+ <p>Returns the <seealso marker="#out_degree">out-degree</seealso> of
+ vertex <c><anno>V</anno></c> of digraph <c><anno>G</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="out_edges" arity="2"/>
- <fsummary>Return all edges emanating from a vertex of a digraph.</fsummary>
+ <fsummary>Return all edges emanating from a vertex of a digraph.
+ </fsummary>
<desc>
- <p>Returns a list of all
- edges <seealso marker="#emanate">emanating</seealso> from
- <c><anno>V</anno></c> of the digraph <c><anno>G</anno></c>, in some unspecified order.
- </p>
+ <p>Returns a list of all
+ edges <seealso marker="#emanate">emanating</seealso> from
+ <c><anno>V</anno></c> of digraph <c><anno>G</anno></c>,
+ in some unspecified order.</p>
</desc>
</func>
+
<func>
<name name="out_neighbours" arity="2"/>
- <fsummary>Return all out-neighbours of a vertex of a digraph.</fsummary>
+ <fsummary>Return all out-neighbors of a vertex of a digraph.</fsummary>
<desc>
<p>Returns a list of
- all <seealso marker="#out_neighbour">out-neighbours</seealso> of
- <c><anno>V</anno></c> of the digraph <c><anno>G</anno></c>, in some unspecified order.
- </p>
+ all <seealso marker="#out_neighbour">out-neighbors</seealso> of
+ <c><anno>V</anno></c> of digraph <c><anno>G</anno></c>,
+ in some unspecified order.</p>
</desc>
</func>
+
<func>
<name name="vertex" arity="2"/>
<fsummary>Return the label of a vertex of a digraph.</fsummary>
<desc>
- <p>Returns <c>{<anno>V</anno>,&nbsp;<anno>Label</anno>}</c> where <c><anno>Label</anno></c> is the
+ <p>Returns <c>{<anno>V</anno>,&nbsp;<anno>Label</anno>}</c>,
+ where <c><anno>Label</anno></c> is the
<seealso marker="#label">label</seealso> of the vertex
- <c><anno>V</anno></c> of the digraph <c><anno>G</anno></c>, or <c>false</c> if there
- is no vertex <c><anno>V</anno></c> of the digraph <c><anno>G</anno></c>.
- </p>
+ <c><anno>V</anno></c> of digraph <c><anno>G</anno></c>,
+ or <c>false</c> if no vertex <c><anno>V</anno></c>
+ of digraph <c><anno>G</anno></c> exists.</p>
</desc>
</func>
+
<func>
<name name="vertices" arity="1"/>
<fsummary>Return all vertices of a digraph.</fsummary>
<desc>
- <p>Returns a list of all vertices of the digraph <c><anno>G</anno></c>, in
- some unspecified order.
- </p>
+ <p>Returns a list of all vertices of digraph <c><anno>G</anno></c>, in
+ some unspecified order.</p>
</desc>
</func>
</funcs>
<section>
<title>See Also</title>
- <p><seealso marker="digraph_utils">digraph_utils(3)</seealso>,
- <seealso marker="ets">ets(3)</seealso></p>
+ <p><seealso marker="digraph_utils"><c>digraph_utils(3)</c></seealso>,
+ <seealso marker="ets"><c>ets(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/digraph_utils.xml b/lib/stdlib/doc/src/digraph_utils.xml
index 9bddee546f..cb316e5b93 100644
--- a/lib/stdlib/doc/src/digraph_utils.xml
+++ b/lib/stdlib/doc/src/digraph_utils.xml
@@ -24,345 +24,386 @@
<title>digraph_utils</title>
<prepared>Hans Bolinder</prepared>
- <responsible>nobody</responsible>
+ <responsible></responsible>
<docno></docno>
- <approved>nobody</approved>
- <checked>no</checked>
+ <approved></approved>
+ <checked></checked>
<date>2001-08-27</date>
<rev>PA1</rev>
- <file>digraph_utils.sgml</file>
+ <file>digraph_utils.xml</file>
</header>
<module>digraph_utils</module>
- <modulesummary>Algorithms for Directed Graphs</modulesummary>
+ <modulesummary>Algorithms for directed graphs.</modulesummary>
<description>
- <p>The <c>digraph_utils</c> module implements some algorithms
- based on depth-first traversal of directed graphs. See the
- <c>digraph</c> module for basic functions on directed graphs.
- </p>
- <p>A <marker id="digraph"></marker><em>directed graph</em> (or
- just "digraph") is a pair (V,&nbsp;E) of a finite set V of
- <marker id="vertex"></marker><em>vertices</em> and a finite set E
- of <marker id="edge"></marker><em>directed edges</em> (or just
- "edges"). The set of edges E is a subset of V&nbsp;&times;&nbsp;V
- (the Cartesian product of V with itself).
- </p>
- <p>Digraphs can be annotated with additional information. Such
- information may be attached to the vertices and to the edges of
- the digraph. A digraph which has been annotated is called a
- <em>labeled digraph</em>, and the information attached to a
- vertex or an edge is called a <marker id="label"></marker>
- <em>label</em>.</p>
- <p>An edge e&nbsp;=&nbsp;(v,&nbsp;w) is said
- to <marker id="emanate"></marker><em>emanate</em> from vertex v and
- to be <marker id="incident"></marker><em>incident</em> on vertex w.
- If there is an edge emanating from v and incident on w, then w is
- said to be
- an <marker id="out_neighbour"></marker><em>out-neighbour</em> of v,
- and v is said to be
- an <marker id="in_neighbour"></marker><em>in-neighbour</em> of w.
- A <marker id="path"></marker><em>path</em> P from v[1] to v[k] in a
- digraph (V,&nbsp;E) is a non-empty sequence
- v[1],&nbsp;v[2],&nbsp;...,&nbsp;v[k] of vertices in V such that
- there is an edge (v[i],v[i+1]) in E for
- 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;&nbsp;k.
- The <marker id="length"></marker><em>length</em> of the path P is k-1.
- P is a <marker id="cycle"></marker><em>cycle</em> if the length of P
- is not zero and v[1] = v[k].
- A <marker id="loop"></marker><em>loop</em> is a cycle of length one.
- An <marker id="acyclic_digraph"></marker><em>acyclic digraph</em> is
- a digraph that has no cycles.
- </p>
+ <p>This module provides algorithms based on depth-first traversal of
+ directed graphs. For basic functions on directed graphs, see the
+ <seealso marker="digraph"><c>digraph(3)</c></seealso> module.</p>
- <p>A <marker id="depth_first_traversal"></marker> <em>depth-first
- traversal</em> of a directed digraph can be viewed as a process
- that visits all vertices of the digraph. Initially, all vertices
- are marked as unvisited. The traversal starts with an
- arbitrarily chosen vertex, which is marked as visited, and
- follows an edge to an unmarked vertex, marking that vertex. The
- search then proceeds from that vertex in the same fashion, until
- there is no edge leading to an unvisited vertex. At that point
- the process backtracks, and the traversal continues as long as
- there are unexamined edges. If there remain unvisited vertices
- when all edges from the first vertex have been examined, some
- hitherto unvisited vertex is chosen, and the process is
- repeated.
- </p>
- <p>A <marker id="partial_ordering"></marker><em>partial ordering</em> of
- a set S is a transitive, antisymmetric and reflexive relation
- between the objects of S. The problem
- of <marker id="topsort"></marker><em>topological sorting</em> is to
- find a total
- ordering of S that is a superset of the partial ordering. A
- digraph G&nbsp;=&nbsp;(V,&nbsp;E) is equivalent to a relation E
- on V (we neglect the fact that the version of directed graphs
- implemented in the <c>digraph</c> module allows multiple edges
- between vertices). If the digraph has no cycles of length two or
- more, then the reflexive and transitive closure of E is a
- partial ordering.
- </p>
- <p>A <marker id="subgraph"></marker><em>subgraph</em> G' of G is a
- digraph whose vertices and edges form subsets of the vertices
- and edges of G. G' is <em>maximal</em> with respect to a
- property P if all other subgraphs that include the vertices of
- G' do not have the property P. A <marker
- id="strong_components"></marker> <em>strongly connected
- component</em> is a maximal subgraph such that there is a path
- between each pair of vertices. A <marker
- id="components"></marker><em>connected component</em> is a
- maximal subgraph such that there is a path between each pair of
- vertices, considering all edges undirected. An <marker
- id="arborescence"></marker><em>arborescence</em> is an acyclic
- digraph with a vertex V, the <marker
- id="root"></marker><em>root</em>, such that there is a unique
- path from V to every other vertex of G. A <marker
- id="tree"></marker><em>tree</em> is an acyclic non-empty digraph
- such that there is a unique path between every pair of vertices,
- considering all edges undirected.</p>
+ <list type="bulleted">
+ <item>
+ <p>A <marker id="digraph"></marker><em>directed graph</em> (or just
+ "digraph") is a pair (V,&nbsp;E) of a finite set V of
+ <marker id="vertex"></marker><em>vertices</em> and a finite set E of
+ <marker id="edge"></marker><em>directed edges</em> (or just "edges").
+ The set of edges E is a subset of V&nbsp;&times;&nbsp;V (the
+ Cartesian product of V with itself).</p>
+ </item>
+ <item>
+ <p>Digraphs can be annotated with more information. Such information
+ can be attached to the vertices and to the edges of the digraph. An
+ annotated digraph is called a <em>labeled digraph</em>, and the
+ information attached to a vertex or an edge is called a
+ <marker id="label"></marker><em>label</em>.</p>
+ </item>
+ <item>
+ <p>An edge e&nbsp;=&nbsp;(v,&nbsp;w) is said to
+ <marker id="emanate"></marker><em>emanate</em> from vertex v and to
+ be <marker id="incident"></marker><em>incident</em> on vertex w.</p>
+ </item>
+ <item>
+ <p>If an edge is emanating from v and incident on w, then w is
+ said to be an <marker id="out_neighbour"></marker>
+ <em>out-neighbor</em> of v, and v is said to be an
+ <marker id="in_neighbour"></marker><em>in-neighbor</em> of w.</p>
+ </item>
+ <item>
+ <p>A <marker id="path"></marker><em>path</em> P from v[1] to v[k]
+ in a digraph (V,&nbsp;E) is a non-empty sequence
+ v[1],&nbsp;v[2],&nbsp;...,&nbsp;v[k] of vertices in V such that
+ there is an edge (v[i],v[i+1]) in E for
+ 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;&nbsp;k.</p>
+ </item>
+ <item>
+ <p>The <marker id="length"></marker><em>length</em> of path P is
+ k-1.</p>
+ </item>
+ <item>
+ <p>Path P is a <marker id="cycle"></marker><em>cycle</em> if the
+ length of P is not zero and v[1] = v[k].</p>
+ </item>
+ <item>
+ <p>A <marker id="loop"></marker><em>loop</em> is a cycle of length
+ one.</p>
+ </item>
+ <item>
+ <p>An <marker id="acyclic_digraph"></marker><em>acyclic digraph</em>
+ is a digraph without cycles.</p>
+ </item>
+ <item>
+ <p>A <marker id="depth_first_traversal"></marker><em>depth-first
+ traversal</em> of a directed digraph can be viewed as a process
+ that visits all vertices of the digraph. Initially, all vertices
+ are marked as unvisited. The traversal starts with an
+ arbitrarily chosen vertex, which is marked as visited, and
+ follows an edge to an unmarked vertex, marking that vertex. The
+ search then proceeds from that vertex in the same fashion, until
+ there is no edge leading to an unvisited vertex. At that point
+ the process backtracks, and the traversal continues as long as
+ there are unexamined edges. If unvisited vertices remain
+ when all edges from the first vertex have been examined, some
+ so far unvisited vertex is chosen, and the process is repeated.</p>
+ </item>
+ <item>
+ <p>A <marker id="partial_ordering"></marker><em>partial ordering</em>
+ of a set S is a transitive, antisymmetric, and reflexive relation
+ between the objects of S.</p>
+ </item>
+ <item>
+ <p>The problem of
+ <marker id="topsort"></marker><em>topological sorting</em> is to find
+ a total ordering of S that is a superset of the partial ordering. A
+ digraph G&nbsp;=&nbsp;(V,&nbsp;E) is equivalent to a relation E
+ on V (we neglect that the version of directed graphs
+ provided by the <c>digraph</c> module allows multiple edges
+ between vertices). If the digraph has no cycles of length two or
+ more, the reflexive and transitive closure of E is a
+ partial ordering.</p>
+ </item>
+ <item>
+ <p>A <marker id="subgraph"></marker><em>subgraph</em> G' of G is a
+ digraph whose vertices and edges form subsets of the vertices
+ and edges of G.</p>
+ </item>
+ <item>
+ <p>G' is <em>maximal</em> with respect to a property P if all other
+ subgraphs that include the vertices of G' do not have property P.</p>
+ </item>
+ <item>
+ <p>A <marker id="strong_components"></marker><em>strongly connected
+ component</em> is a maximal subgraph such that there is a path
+ between each pair of vertices.</p>
+ </item>
+ <item>
+ <p>A <marker id="components"></marker><em>connected component</em>
+ is a maximal subgraph such that there is a path between each pair of
+ vertices, considering all edges undirected.</p>
+ </item>
+ <item>
+ <p>An <marker id="arborescence"></marker><em>arborescence</em> is an
+ acyclic digraph with a vertex V, the
+ <marker id="root"></marker><em>root</em>, such that there is a unique
+ path from V to every other vertex of G.</p>
+ </item>
+ <item>
+ <p>A <marker id="tree"></marker><em>tree</em> is an acyclic non-empty
+ digraph such that there is a unique path between every pair of
+ vertices, considering all edges undirected.</p>
+ </item>
+ </list>
</description>
- <datatypes>
- <datatype>
- <name>digraph()</name>
- <desc><p><marker id="type-digraph"/>
- A digraph as returned by <c>digraph:new/0,1</c>.</p></desc>
- </datatype>
- </datatypes>
<funcs>
<func>
<name name="arborescence_root" arity="1"/>
<fsummary>Check if a digraph is an arborescence.</fsummary>
<desc>
- <p>Returns <c>{yes, <anno>Root</anno>}</c> if <c><anno>Root</anno></c> is
- the <seealso marker="#root">root</seealso> of the arborescence
- <c><anno>Digraph</anno></c>, <c>no</c> otherwise.
- </p>
+ <p>Returns <c>{yes, <anno>Root</anno>}</c> if <c><anno>Root</anno></c>
+ is the <seealso marker="#root">root</seealso> of the arborescence
+ <c><anno>Digraph</anno></c>, otherwise <c>no</c>.</p>
</desc>
</func>
+
<func>
<name name="components" arity="1"/>
<fsummary>Return the components of a digraph.</fsummary>
<desc>
- <p>Returns a list
- of <seealso marker="#components">connected components</seealso>.
- Each component is represented by its
+ <p>Returns a list
+ of <seealso marker="#components">connected components.</seealso>.
+ Each component is represented by its
vertices. The order of the vertices and the order of the
- components are arbitrary. Each vertex of the digraph
- <c><anno>Digraph</anno></c> occurs in exactly one component.
- </p>
+ components are arbitrary. Each vertex of digraph
+ <c><anno>Digraph</anno></c> occurs in exactly one component.</p>
</desc>
</func>
+
<func>
<name name="condensation" arity="1"/>
<fsummary>Return a condensed graph of a digraph.</fsummary>
<desc>
- <p>Creates a digraph where the vertices are
- the <seealso marker="#strong_components">strongly connected
- components</seealso> of <c><anno>Digraph</anno></c> as returned by
- <c>strong_components/1</c>. If X and Y are two different strongly
- connected components, and there exist vertices x and y in X
- and Y respectively such that there is an
- edge <seealso marker="#emanate">emanating</seealso> from x
- and <seealso marker="#incident">incident</seealso> on y, then
- an edge emanating from X and incident on Y is created.
- </p>
+ <p>Creates a digraph where the vertices are
+ the <seealso marker="#strong_components">strongly connected
+ components</seealso> of <c><anno>Digraph</anno></c> as returned by
+ <seealso marker="#strong_components/1">
+ <c>strong_components/1</c></seealso>.
+ If X and Y are two different strongly
+ connected components, and vertices x and y exist in X
+ and Y, respectively, such that there is an
+ edge <seealso marker="#emanate">emanating</seealso> from x
+ and <seealso marker="#incident">incident</seealso> on y, then
+ an edge emanating from X and incident on Y is created.</p>
<p>The created digraph has the same type as <c><anno>Digraph</anno></c>.
- All vertices and edges have the
- default <seealso marker="#label">label</seealso> <c>[]</c>.
- </p>
- <p>Each and every <seealso marker="#cycle">cycle</seealso> is
- included in some strongly connected component, which implies
- that there always exists
- a <seealso marker="#topsort">topological ordering</seealso> of the
- created digraph.</p>
+ All vertices and edges have the
+ default <seealso marker="#label">label</seealso> <c>[]</c>.</p>
+ <p>Each <seealso marker="#cycle">cycle</seealso> is
+ included in some strongly connected component, which implies that
+ a <seealso marker="#topsort">topological ordering</seealso> of the
+ created digraph always exists.</p>
</desc>
</func>
+
<func>
<name name="cyclic_strong_components" arity="1"/>
<fsummary>Return the cyclic strong components of a digraph.</fsummary>
<desc>
- <p>Returns a list of <seealso marker="#strong_components">strongly
- connected components</seealso>.
- Each strongly component is represented
+ <p>Returns a list of <seealso marker="#strong_components">strongly
+ connected components</seealso>. Each strongly component is represented
by its vertices. The order of the vertices and the order of
the components are arbitrary. Only vertices that are
included in some <seealso marker="#cycle">cycle</seealso> in
- <c><anno>Digraph</anno></c> are returned, otherwise the returned list is
- equal to that returned by <c>strong_components/1</c>.
- </p>
+ <c><anno>Digraph</anno></c> are returned, otherwise the returned
+ list is equal to that returned by
+ <seealso marker="#strong_components/1">
+ <c>strong_components/1</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="is_acyclic" arity="1"/>
<fsummary>Check if a digraph is acyclic.</fsummary>
<desc>
- <p>Returns <c>true</c> if and only if the digraph
- <c><anno>Digraph</anno></c> is <seealso marker="#acyclic_digraph">acyclic</seealso>.</p>
+ <p>Returns <c>true</c> if and only if digraph
+ <c><anno>Digraph</anno></c> is
+ <seealso marker="#acyclic_digraph">acyclic</seealso>.</p>
</desc>
</func>
+
<func>
<name name="is_arborescence" arity="1"/>
<fsummary>Check if a digraph is an arborescence.</fsummary>
<desc>
- <p>Returns <c>true</c> if and only if the digraph
+ <p>Returns <c>true</c> if and only if digraph
<c><anno>Digraph</anno></c> is
an <seealso marker="#arborescence">arborescence</seealso>.</p>
</desc>
</func>
+
<func>
<name name="is_tree" arity="1"/>
<fsummary>Check if a digraph is a tree.</fsummary>
<desc>
- <p>Returns <c>true</c> if and only if the digraph
+ <p>Returns <c>true</c> if and only if digraph
<c><anno>Digraph</anno></c> is
- a <seealso marker="#tree">tree</seealso>.</p>
+ a <seealso marker="#tree">tree</seealso>.</p>
</desc>
</func>
+
<func>
<name name="loop_vertices" arity="1"/>
- <fsummary>Return the vertices of a digraph included in some loop.</fsummary>
+ <fsummary>Return the vertices of a digraph included in some loop.
+ </fsummary>
<desc>
- <p>Returns a list of all vertices of <c><anno>Digraph</anno></c> that are
- included in some <seealso marker="#loop">loop</seealso>.</p>
+ <p>Returns a list of all vertices of <c><anno>Digraph</anno></c> that
+ are included in some <seealso marker="#loop">loop</seealso>.</p>
</desc>
</func>
+
<func>
<name name="postorder" arity="1"/>
- <fsummary>Return the vertices of a digraph in post-order.</fsummary>
+ <fsummary>Return the vertices of a digraph in postorder.</fsummary>
<desc>
- <p>Returns all vertices of the digraph <c><anno>Digraph</anno></c>. The
- order is given by
- a <seealso marker="#depth_first_traversal">depth-first
- traversal</seealso> of the digraph, collecting visited
+ <p>Returns all vertices of digraph <c><anno>Digraph</anno></c>.
+ The order is given by
+ a <seealso marker="#depth_first_traversal">depth-first
+ traversal</seealso> of the digraph, collecting visited
vertices in postorder. More precisely, the vertices visited
while searching from an arbitrarily chosen vertex are
collected in postorder, and all those collected vertices are
- placed before the subsequently visited vertices.
- </p>
+ placed before the subsequently visited vertices.</p>
</desc>
</func>
+
<func>
<name name="preorder" arity="1"/>
- <fsummary>Return the vertices of a digraph in pre-order.</fsummary>
+ <fsummary>Return the vertices of a digraph in preorder.</fsummary>
<desc>
- <p>Returns all vertices of the digraph <c><anno>Digraph</anno></c>. The
- order is given by
- a <seealso marker="#depth_first_traversal">depth-first
- traversal</seealso> of the digraph, collecting visited
- vertices in pre-order.</p>
+ <p>Returns all vertices of digraph <c><anno>Digraph</anno></c>.
+ The order is given by
+ a <seealso marker="#depth_first_traversal">depth-first
+ traversal</seealso> of the digraph, collecting visited
+ vertices in preorder.</p>
</desc>
</func>
+
<func>
<name name="reachable" arity="2"/>
- <fsummary>Return the vertices reachable from some vertices of a digraph.</fsummary>
+ <fsummary>Return the vertices reachable from some vertices of a digraph.
+ </fsummary>
<desc>
<p>Returns an unsorted list of digraph vertices such that for
- each vertex in the list, there is
- a <seealso marker="#path">path</seealso> in <c><anno>Digraph</anno></c> from some
+ each vertex in the list, there is a
+ <seealso marker="#path">path</seealso> in <c><anno>Digraph</anno></c>
+ from some
vertex of <c><anno>Vertices</anno></c> to the vertex. In particular,
- since paths may have length zero, the vertices of
- <c><anno>Vertices</anno></c> are included in the returned list.
- </p>
+ as paths can have length zero, the vertices of
+ <c><anno>Vertices</anno></c> are included in the returned list.</p>
</desc>
</func>
+
<func>
<name name="reachable_neighbours" arity="2"/>
- <fsummary>Return the neighbours reachable from some vertices of a digraph.</fsummary>
+ <fsummary>Return the neighbors reachable from some vertices of a
+ digraph.</fsummary>
<desc>
<p>Returns an unsorted list of digraph vertices such that for
- each vertex in the list, there is
- a <seealso marker="#path">path</seealso> in <c><anno>Digraph</anno></c> of length
+ each vertex in the list, there is a
+ <seealso marker="#path">path</seealso> in <c><anno>Digraph</anno></c>
+ of length
one or more from some vertex of <c><anno>Vertices</anno></c> to the
- vertex. As a consequence, only those vertices
- of <c><anno>Vertices</anno></c> that are included in
- some <seealso marker="#cycle">cycle</seealso> are returned.
- </p>
+ vertex. As a consequence, only those vertices
+ of <c><anno>Vertices</anno></c> that are included in
+ some <seealso marker="#cycle">cycle</seealso> are returned.</p>
</desc>
</func>
+
<func>
<name name="reaching" arity="2"/>
- <fsummary>Return the vertices that reach some vertices of a digraph.</fsummary>
+ <fsummary>Return the vertices that reach some vertices of a digraph.
+ </fsummary>
<desc>
<p>Returns an unsorted list of digraph vertices such that for
- each vertex in the list, there is
- a <seealso marker="#path">path</seealso> from the vertex to some
- vertex of <c><anno>Vertices</anno></c>. In particular, since paths may have
- length zero, the vertices of <c><anno>Vertices</anno></c> are included in
- the returned list.
- </p>
+ each vertex in the list, there is
+ a <seealso marker="#path">path</seealso> from the vertex to some
+ vertex of <c><anno>Vertices</anno></c>. In particular, as paths
+ can have length zero, the vertices of <c><anno>Vertices</anno></c>
+ are included in the returned list.</p>
</desc>
</func>
+
<func>
<name name="reaching_neighbours" arity="2"/>
- <fsummary>Return the neighbours that reach some vertices of a digraph.</fsummary>
+ <fsummary>Return the neighbors that reach some vertices of a digraph.
+ </fsummary>
<desc>
<p>Returns an unsorted list of digraph vertices such that for
- each vertex in the list, there is
- a <seealso marker="#path">path</seealso> of length one or more
- from the vertex to some vertex of <c><anno>Vertices</anno></c>. As a consequence,
- only those vertices of <c><anno>Vertices</anno></c> that are included in
- some <seealso marker="#cycle">cycle</seealso> are returned.
- </p>
+ each vertex in the list, there is
+ a <seealso marker="#path">path</seealso> of length one or more
+ from the vertex to some vertex of <c><anno>Vertices</anno></c>.
+ Therefore only those vertices of <c><anno>Vertices</anno></c>
+ that are included
+ in some <seealso marker="#cycle">cycle</seealso> are returned.</p>
</desc>
</func>
+
<func>
<name name="strong_components" arity="1"/>
<fsummary>Return the strong components of a digraph.</fsummary>
<desc>
- <p>Returns a list of <seealso marker="#strong_components">strongly
- connected components</seealso>.
- Each strongly component is represented
+ <p>Returns a list of <seealso marker="#strong_components">strongly
+ connected components</seealso>.
+ Each strongly component is represented
by its vertices. The order of the vertices and the order of
- the components are arbitrary. Each vertex of the digraph
+ the components are arbitrary. Each vertex of digraph
<c><anno>Digraph</anno></c> occurs in exactly one strong component.
- </p>
+ </p>
</desc>
</func>
+
<func>
<name name="subgraph" arity="2"/>
<name name="subgraph" arity="3"/>
<fsummary>Return a subgraph of a digraph.</fsummary>
<desc>
- <p>Creates a maximal <seealso marker="#subgraph">subgraph</seealso> of <c>Digraph</c> having
+ <p>Creates a maximal <seealso marker="#subgraph">subgraph</seealso>
+ of <c>Digraph</c> having
as vertices those vertices of <c><anno>Digraph</anno></c> that are
- mentioned in <c><anno>Vertices</anno></c>.
- </p>
- <p>If the value of the option <c>type</c> is <c>inherit</c>,
- which is the default, then the type of <c><anno>Digraph</anno></c> is used
+ mentioned in <c><anno>Vertices</anno></c>.</p>
+ <p>If the value of option <c>type</c> is <c>inherit</c>, which is
+ the default, the type of <c><anno>Digraph</anno></c> is used
for the subgraph as well. Otherwise the option value of <c>type</c>
- is used as argument to <c>digraph:new/1</c>.
- </p>
- <p>If the value of the option <c>keep_labels</c> is <c>true</c>,
- which is the default, then
- the <seealso marker="#label">labels</seealso> of vertices and edges
- of <c><anno>Digraph</anno></c> are used for the subgraph as well. If the value
- is <c>false</c>, then the default label, <c>[]</c>, is used
- for the subgraph's vertices and edges.
- </p>
- <p><c>subgraph(<anno>Digraph</anno>, <anno>Vertices</anno>)</c> is equivalent to
- <c>subgraph(<anno>Digraph</anno>, <anno>Vertices</anno>, [])</c>.
- </p>
- <p>There will be a <c>badarg</c> exception if any of the arguments
- are invalid.
- </p>
+ is used as argument to
+ <seealso marker="digraph:new/1"><c>digraph:new/1</c></seealso>.</p>
+ <p>If the value of option <c>keep_labels</c> is <c>true</c>,
+ which is the default,
+ the <seealso marker="#label">labels</seealso> of vertices and edges
+ of <c><anno>Digraph</anno></c> are used for the subgraph as well. If
+ the value is <c>false</c>, default label <c>[]</c> is used
+ for the vertices and edges of the subgroup.</p>
+ <p><c>subgraph(<anno>Digraph</anno>, <anno>Vertices</anno>)</c> is
+ equivalent to
+ <c>subgraph(<anno>Digraph</anno>, <anno>Vertices</anno>, [])</c>.</p>
+ <p>If any of the arguments are invalid, a <c>badarg</c> exception is
+ raised.</p>
</desc>
</func>
+
<func>
<name name="topsort" arity="1"/>
- <fsummary>Return a topological sorting of the vertices of a digraph.</fsummary>
+ <fsummary>Return a topological sorting of the vertices of a digraph.
+ </fsummary>
<desc>
- <p>Returns a <seealso marker="#topsort">topological
- ordering</seealso> of the vertices of the digraph
- <c><anno>Digraph</anno></c> if such an ordering exists, <c>false</c>
- otherwise. For each vertex in the returned list, there are
- no <seealso marker="#out_neighbour">out-neighbours</seealso>
- that occur earlier in the list.</p>
+ <p>Returns a <seealso marker="#topsort">topological
+ ordering</seealso> of the vertices of digraph
+ <c><anno>Digraph</anno></c> if such an ordering exists, otherwise
+ <c>false</c>. For each vertex in the returned list,
+ no <seealso marker="#out_neighbour">out-neighbors</seealso>
+ occur earlier in the list.</p>
</desc>
</func>
</funcs>
<section>
<title>See Also</title>
- <p><seealso marker="digraph">digraph(3)</seealso></p>
+ <p><seealso marker="digraph"><c>digraph(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/epp.xml b/lib/stdlib/doc/src/epp.xml
index ac87f9c2b6..1dc0161398 100644
--- a/lib/stdlib/doc/src/epp.xml
+++ b/lib/stdlib/doc/src/epp.xml
@@ -28,214 +28,241 @@
<docno>1</docno>
<approved>Kenneth Lundin</approved>
<checked></checked>
- <date>97-01-31</date>
+ <date>1997-01-31</date>
<rev>B</rev>
- <file>epp.sgml</file>
+ <file>epp.xml</file>
</header>
<module>epp</module>
- <modulesummary>An Erlang Code Preprocessor</modulesummary>
+ <modulesummary>An Erlang code preprocessor.</modulesummary>
<description>
- <p>The Erlang code preprocessor includes functions which are used
- by <c>compile</c> to preprocess macros and include files before
- the actual parsing takes place.</p>
+ <p>The Erlang code preprocessor includes functions that are used by the
+ <seealso marker="compiler:compile"><c>compile</c></seealso>
+ module to preprocess macros and include files before
+ the parsing takes place.</p>
+
<p>The Erlang source file <marker
id="encoding"/><em>encoding</em> is selected by a
comment in one of the first two lines of the source file. The
- first string that matches the regular expression
+ first string matching the regular expression
<c>coding\s*[:=]\s*([-a-zA-Z0-9])+</c> selects the encoding. If
- the matching string is not a valid encoding it is ignored. The
- valid encodings are <c>Latin-1</c> and <c>UTF-8</c> where the
- case of the characters can be chosen freely. Examples:</p>
- <pre>
+ the matching string is not a valid encoding, it is ignored. The
+ valid encodings are <c>Latin-1</c> and <c>UTF-8</c>, where the
+ case of the characters can be chosen freely.</p>
+
+ <p><em>Examples:</em></p>
+
+ <pre>
%% coding: utf-8</pre>
- <pre>
+
+ <pre>
%% For this file we have chosen encoding = Latin-1</pre>
- <pre>
+
+ <pre>
%% -*- coding: latin-1 -*-</pre>
</description>
+
<datatypes>
<datatype>
<name name="macros"></name>
</datatype>
<datatype>
<name name="epp_handle"></name>
- <desc><p>Handle to the epp server.</p></desc>
+ <desc><p>Handle to the <c>epp</c> server.</p></desc>
</datatype>
<datatype>
<name name="source_encoding"></name>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="open" arity="1"/>
- <fsummary>Open a file for preprocessing</fsummary>
+ <name name="close" arity="1"/>
+ <fsummary>Close the preprocessing of the file associated with <c>Epp</c>.
+ </fsummary>
<desc>
- <p>Opens a file for preprocessing.</p>
- <p>If <c>extra</c> is given in
- <c><anno>Options</anno></c>, the return value will be
- <c>{ok, <anno>Epp</anno>, <anno>Extra</anno>}</c> instead
- of <c>{ok, <anno>Epp</anno>}</c>.</p>
+ <p>Closes the preprocessing of a file.</p>
</desc>
</func>
+
<func>
- <name name="open" arity="2"/>
- <fsummary>Open a file for preprocessing</fsummary>
+ <name name="default_encoding" arity="0"/>
+ <fsummary>Return the default encoding of Erlang source files.</fsummary>
<desc>
- <p>Equivalent to <c>epp:open([{name, FileName}, {includes, IncludePath}])</c>.</p>
+ <p>Returns the default encoding of Erlang source files.</p>
</desc>
</func>
+
<func>
- <name name="open" arity="3"/>
- <fsummary>Open a file for preprocessing</fsummary>
+ <name name="encoding_to_string" arity="1"/>
+ <fsummary>Return a string representation of an encoding.</fsummary>
<desc>
- <p>Equivalent to <c>epp:open([{name, FileName}, {includes, IncludePath},
- {macros, PredefMacros}])</c>.</p>
+ <p>Returns a string representation of an encoding. The string
+ is recognized by
+ <seealso marker="#read_encoding/1"><c>read_encoding/1,2</c></seealso>,
+ <seealso marker="#read_encoding_from_binary/1">
+ <c>read_encoding_from_binary/1,2</c></seealso>, and
+ <seealso marker="#set_encoding/1"><c>set_encoding/1,2</c></seealso>
+ as a valid encoding.</p>
</desc>
</func>
+
<func>
- <name name="close" arity="1"/>
- <fsummary>Close the preprocessing of the file associated with <c>Epp</c></fsummary>
+ <name name="format_error" arity="1"/>
+ <fsummary>Format an error descriptor.</fsummary>
<desc>
- <p>Closes the preprocessing of a file.</p>
+ <p>Takes an <c><anno>ErrorDescriptor</anno></c> and returns
+ a string that
+ describes the error or warning. This function is usually
+ called implicitly when processing an <c>ErrorInfo</c>
+ structure (see section
+ <seealso marker="#errorinfo">Error Information</seealso>).</p>
</desc>
</func>
+
<func>
- <name name="parse_erl_form" arity="1"/>
- <fsummary>Return the next Erlang form from the opened Erlang source file</fsummary>
- <type name="warning_info"/>
+ <name name="open" arity="1"/>
+ <fsummary>Open a file for preprocessing.</fsummary>
<desc>
- <p>Returns the next Erlang form from the opened Erlang source file.
- The tuple <c>{eof, <anno>Line</anno>}</c> is returned at end-of-file. The first
- form corresponds to an implicit attribute <c>-file(File,1).</c>, where
- <c>File</c> is the name of the file.</p>
+ <p>Opens a file for preprocessing.</p>
+ <p>If <c>extra</c> is specified in
+ <c><anno>Options</anno></c>, the return value is
+ <c>{ok, <anno>Epp</anno>, <anno>Extra</anno>}</c> instead
+ of <c>{ok, <anno>Epp</anno>}</c>.</p>
</desc>
</func>
+
<func>
- <name name="parse_file" arity="2"/>
- <fsummary>Preprocess and parse an Erlang source file</fsummary>
+ <name name="open" arity="2"/>
+ <fsummary>Open a file for preprocessing.</fsummary>
<desc>
- <p>Preprocesses and parses an Erlang source file.
- Note that the tuple <c>{eof, <anno>Line</anno>}</c> returned
- at end-of-file is included as a "form".</p>
- <p>If <c>extra</c> is given in
- <c><anno>Options</anno></c>, the return value will be
- <c>{ok, [<anno>Form</anno>], <anno>Extra</anno>}</c> instead
- of <c>{ok, [<anno>Form</anno>]}</c>.</p>
+ <p>Equivalent to
+ <c>epp:open([{name, FileName}, {includes, IncludePath}])</c>.</p>
</desc>
</func>
+
<func>
- <name name="parse_file" arity="3"/>
- <fsummary>Preprocess and parse an Erlang source file</fsummary>
+ <name name="open" arity="3"/>
+ <fsummary>Open a file for preprocessing.</fsummary>
<desc>
- <p>Equivalent to <c>epp:parse_file(FileName, [{includes, IncludePath},
- {macros, PredefMacros}])</c>.</p>
+ <p>Equivalent to <c>epp:open([{name, FileName}, {includes, IncludePath},
+ {macros, PredefMacros}])</c>.</p>
</desc>
</func>
+
<func>
- <name name="default_encoding" arity="0"/>
- <fsummary>Return the default encoding of Erlang source files</fsummary>
+ <name name="parse_erl_form" arity="1"/>
+ <fsummary>Return the next Erlang form from the opened Erlang source file.
+ </fsummary>
+ <type name="warning_info"/>
<desc>
- <p>Returns the default encoding of Erlang source files.</p>
+ <p>Returns the next Erlang form from the opened Erlang source file.
+ Tuple <c>{eof, <anno>Line</anno>}</c> is returned at the end of the
+ file. The first form corresponds to an implicit attribute
+ <c>-file(File,1).</c>, where <c>File</c> is the file name.</p>
</desc>
</func>
+
<func>
- <name name="encoding_to_string" arity="1"/>
- <fsummary>Return a string representation of an encoding</fsummary>
+ <name name="parse_file" arity="2"/>
+ <fsummary>Preprocess and parse an Erlang source file.</fsummary>
<desc>
- <p>Returns a string representation of an encoding. The string
- is recognized by <c>read_encoding/1,2</c>,
- <c>read_encoding_from_binary/1,2</c>, and
- <c>set_encoding/1,2</c> as a valid encoding.</p>
+ <p>Preprocesses and parses an Erlang source file.
+ Notice that tuple <c>{eof, <anno>Line</anno>}</c> returned at the
+ end of the file is included as a "form".</p>
+ <p>If <c>extra</c> is specified in
+ <c><anno>Options</anno></c>, the return value is
+ <c>{ok, [<anno>Form</anno>], <anno>Extra</anno>}</c> instead
+ of <c>{ok, [<anno>Form</anno>]}</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="parse_file" arity="3"/>
+ <fsummary>Preprocess and parse an Erlang source file.</fsummary>
+ <desc>
+ <p>Equivalent to <c>epp:parse_file(FileName, [{includes, IncludePath},
+ {macros, PredefMacros}])</c>.</p>
</desc>
</func>
+
<func>
<name name="read_encoding" arity="1"/>
<name name="read_encoding" arity="2"/>
- <fsummary>Read the encoding from a file</fsummary>
+ <fsummary>Read the encoding from a file.</fsummary>
<desc>
<p>Read the <seealso marker="#encoding">encoding</seealso> from
a file. Returns the read encoding, or <c>none</c> if no
- valid encoding was found.</p>
- <p>The option <c>in_comment_only</c> is <c>true</c> by
+ valid encoding is found.</p>
+ <p>Option <c>in_comment_only</c> is <c>true</c> by
default, which is correct for Erlang source files. If set to
- <c>false</c> the encoding string does not necessarily have to
+ <c>false</c>, the encoding string does not necessarily have to
occur in a comment.</p>
</desc>
</func>
+
<func>
<name name="read_encoding_from_binary" arity="1"/>
<name name="read_encoding_from_binary" arity="2"/>
- <fsummary>Read the encoding from a binary</fsummary>
+ <fsummary>Read the encoding from a binary.</fsummary>
<desc>
<p>Read the <seealso marker="#encoding">encoding</seealso> from
a binary. Returns the read encoding, or <c>none</c> if no
- valid encoding was found.</p>
- <p>The option <c>in_comment_only</c> is <c>true</c> by
+ valid encoding is found.</p>
+ <p>Option <c>in_comment_only</c> is <c>true</c> by
default, which is correct for Erlang source files. If set to
- <c>false</c> the encoding string does not necessarily have to
+ <c>false</c>, the encoding string does not necessarily have to
occur in a comment.</p>
</desc>
</func>
+
<func>
<name name="set_encoding" arity="1"/>
- <fsummary>Read and set the encoding of an IO device</fsummary>
+ <fsummary>Read and set the encoding of an I/O device.</fsummary>
<desc>
<p>Reads the <seealso marker="#encoding">encoding</seealso> from
- an IO device and sets the encoding of the device
- accordingly. The position of the IO device referenced by
+ an I/O device and sets the encoding of the device
+ accordingly. The position of the I/O device referenced by
<c><anno>File</anno></c> is not affected. If no valid
- encoding can be read from the IO device the encoding of the
- IO device is set to the default encoding.</p>
+ encoding can be read from the I/O device, the encoding of the
+ I/O device is set to the default encoding.</p>
<p>Returns the read encoding, or <c>none</c> if no valid
- encoding was found.</p>
+ encoding is found.</p>
</desc>
</func>
+
<func>
<name name="set_encoding" arity="2"/>
- <fsummary>Read and set the encoding of an IO device</fsummary>
+ <fsummary>Read and set the encoding of an I/O device.</fsummary>
<desc>
<p>Reads the <seealso marker="#encoding">encoding</seealso> from
- an IO device and sets the encoding of the device
- accordingly. The position of the IO device referenced by
+ an I/O device and sets the encoding of the device
+ accordingly. The position of the I/O device referenced by
<c><anno>File</anno></c> is not affected. If no valid
- encoding can be read from the IO device the encoding of the
- IO device is set to the
- <seealso marker="#encoding">encoding</seealso> given by
- <c><anno>Default</anno></c>.</p>
+ encoding can be read from the I/O device, the encoding of the
+ I/O device is set to the
+ <seealso marker="#encoding">encoding</seealso> specified by
+ <c><anno>Default</anno></c>.</p>
<p>Returns the read encoding, or <c>none</c> if no valid
- encoding was found.</p>
- </desc>
- </func>
- <func>
- <name name="format_error" arity="1"/>
- <fsummary>Format an error descriptor</fsummary>
- <desc>
- <p>Takes an <c><anno>ErrorDescriptor</anno></c> and returns
- a string which
- describes the error or warning. This function is usually
- called implicitly when processing an <c>ErrorInfo</c>
- structure (see below).</p>
+ encoding is found.</p>
</desc>
</func>
</funcs>
<section>
<title>Error Information</title>
- <p>The <c>ErrorInfo</c> mentioned above is the standard
- <c>ErrorInfo</c> structure which is returned from all IO
- modules. It has the following format:
- </p>
+ <marker id="errorinfo"/>
+ <p><c>ErrorInfo</c> is the standard <c>ErrorInfo</c> structure that is
+ returned from all I/O modules. The format is as follows:</p>
<code type="none">
- {ErrorLine, Module, ErrorDescriptor} </code>
- <p>A string which describes the error is obtained with the following call:
- </p>
+{ErrorLine, Module, ErrorDescriptor}</code>
+ <p>A string describing the error is obtained with the following call:</p>
<code type="none">
- Module:format_error(ErrorDescriptor) </code>
+Module:format_error(ErrorDescriptor)</code>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="erl_parse">erl_parse(3)</seealso></p>
+ <p><seealso marker="erl_parse"><c>erl_parse(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/erl_anno.xml b/lib/stdlib/doc/src/erl_anno.xml
index ddc8b8c765..f316f63d98 100644
--- a/lib/stdlib/doc/src/erl_anno.xml
+++ b/lib/stdlib/doc/src/erl_anno.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2015</year>
- <year>2015</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -35,75 +35,81 @@
<file>erl_anno.xml</file>
</header>
<module>erl_anno</module>
-
- <modulesummary>
- Abstract Datatype for the Annotations of the Erlang Compiler
+ <modulesummary>Abstract datatype for the annotations of the Erlang Compiler.
</modulesummary>
<description>
- <p>This module implements an abstract type that is used by the
+ <p>This module provides an abstract type that is used by the
Erlang Compiler and its helper modules for holding data such as
column, line number, and text. The data type is a collection of
<marker id="annotations"/><em>annotations</em> as
described in the following.</p>
+
<p>The Erlang Token Scanner returns tokens with a subset of
the following annotations, depending on the options:</p>
+
<taglist>
<tag><c>column</c></tag>
<item><p>The column where the token begins.</p></item>
<tag><c>location</c></tag>
<item><p>The line and column where the token begins, or
- just the line if the column unknown.</p>
- </item>
+ just the line if the column is unknown.</p></item>
<tag><c>text</c></tag>
<item><p>The token's text.</p></item>
</taglist>
- <p>From the above the following annotation is derived:</p>
+
+ <p>From this, the following annotation is derived:</p>
+
<taglist>
<tag><c>line</c></tag>
<item><p>The line where the token begins.</p></item>
</taglist>
- <p>Furthermore, the following annotations are supported by
- this module, and used by various modules:</p>
+
+ <p>This module also supports the following annotations,
+ which are used by various modules:</p>
+
<taglist>
<tag><c>file</c></tag>
<item><p>A filename.</p></item>
<tag><c>generated</c></tag>
<item><p>A Boolean indicating if the abstract code is
- compiler generated. The Erlang Compiler does not emit warnings
- for such code.</p>
- </item>
+ compiler-generated. The Erlang Compiler does not emit warnings
+ for such code.</p></item>
<tag><c>record</c></tag>
<item><p>A Boolean indicating if the origin of the abstract
- code is a record. Used by Dialyzer to assign types to tuple
- elements.</p>
+ code is a record. Used by
+ <seealso marker="dialyzer:dialyzer">Dialyzer</seealso>
+ to assign types to tuple elements.</p>
</item>
</taglist>
+
<p>The functions
- <seealso marker="erl_scan#column/1">column()</seealso>,
- <seealso marker="erl_scan#end_location/1">end_location()</seealso>,
- <seealso marker="erl_scan#line/1">line()</seealso>,
- <seealso marker="erl_scan#location/1">location()</seealso>, and
- <seealso marker="erl_scan#text/1">text()</seealso>
+ <seealso marker="erl_scan#column/1"><c>column()</c></seealso>,
+ <seealso marker="erl_scan#end_location/1"><c>end_location()</c></seealso>,
+ <seealso marker="erl_scan#line/1"><c>line()</c></seealso>,
+ <seealso marker="erl_scan#location/1"><c>location()</c></seealso>, and
+ <seealso marker="erl_scan#text/1"><c>text()</c></seealso>
in the <c>erl_scan</c> module can be used for inspecting
annotations in tokens.</p>
+
<p>The functions
- <seealso marker="erl_parse#map_anno/2">map_anno()</seealso>,
- <seealso marker="erl_parse#fold_anno/3">fold_anno()</seealso>,
- <seealso marker="erl_parse#mapfold_anno/3">mapfold_anno()</seealso>,
- <seealso marker="erl_parse#new_anno/1">new_anno()</seealso>,
<seealso marker="erl_parse#anno_from_term/1">
- anno_from_term()</seealso>, and
+ <c>anno_from_term()</c></seealso>,
<seealso marker="erl_parse#anno_to_term/1">
- anno_to_term()</seealso> in the <c>erl_parse</c> module can be
- used for manipulating annotations in abstract code.
- </p>
+ <c>anno_to_term()</c></seealso>,
+ <seealso marker="erl_parse#fold_anno/3"><c>fold_anno()</c></seealso>,
+ <seealso marker="erl_parse#map_anno/2"><c>map_anno()</c></seealso>,
+ <seealso marker="erl_parse#mapfold_anno/3">
+ <c>mapfold_anno()</c></seealso>,
+ and <seealso marker="erl_parse#new_anno/1"><c>new_anno()</c></seealso>,
+ in the <c>erl_parse</c> module can be
+ used for manipulating annotations in abstract code.</p>
</description>
<datatypes>
<datatype>
<name>anno()</name>
- <desc><p><marker id="type-anno"/>A collection of annotations.</p>
+ <desc><p>A collection of annotations.</p>
</desc>
</datatype>
<datatype>
@@ -118,9 +124,6 @@
</datatype>
<datatype>
<name name="line"></name>
- <desc>
- <p>To be changed to a non-negative integer in Erlang/OTP 19.0.</p>
- </desc>
</datatype>
<datatype>
<name name="location"></name>
@@ -133,177 +136,169 @@
<funcs>
<func>
<name name="column" arity="1"/>
- <fsummary>Return the column</fsummary>
+ <fsummary>Return the column.</fsummary>
<type name="column"></type>
<desc>
- <p>Returns the column of the annotations <anno>Anno</anno>.
- </p>
+ <p>Returns the column of the annotations <anno>Anno</anno>.</p>
</desc>
</func>
+
<func>
<name name="end_location" arity="1"/>
- <fsummary>Return the end location of the text</fsummary>
+ <fsummary>Return the end location of the text.</fsummary>
<type name="location"></type>
<desc>
<p>Returns the end location of the text of the
annotations <anno>Anno</anno>. If there is no text,
- <c>undefined</c> is returned.
- </p>
+ <c>undefined</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="file" arity="1"/>
- <fsummary>Return the filename</fsummary>
+ <fsummary>Return the filename.</fsummary>
<type name="filename"></type>
<desc>
<p>Returns the filename of the annotations <anno>Anno</anno>.
- If there is no filename, <c>undefined</c> is returned.
- </p>
+ If there is no filename, <c>undefined</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="from_term" arity="1"/>
- <fsummary>Return annotations given a term</fsummary>
+ <fsummary>Return annotations given a term.</fsummary>
<desc>
- <p>Returns annotations with the representation <anno>Term</anno>.
- </p>
- <!--
- <p>Although it is possible to create new annotations by calling
- <c>from_term/1</c>, the intention is that one should not do
- so - the proper way to create annotations is to call
- <c>new/1</c> and then modify the annotations
- by calling the <c>set_*</c> functions.</p>
- -->
- <p>See also <seealso marker="#to_term/1">to_term()</seealso>.
- </p>
+ <p>Returns annotations with representation <anno>Term</anno>.</p>
+ <p>See also <seealso marker="#to_term/1">to_term()</seealso>.</p>
</desc>
</func>
+
<func>
<name name="generated" arity="1"/>
- <fsummary>Return the generated Boolean</fsummary>
+ <fsummary>Return the generated Boolean.</fsummary>
<type name="generated"></type>
<desc>
- <p>Returns <c>true</c> if the annotations <anno>Anno</anno>
- has been marked as generated. The default is to return
- <c>false</c>.
- </p>
+ <p>Returns <c>true</c> if annotations <anno>Anno</anno>
+ is marked as generated. The default is to return
+ <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_anno" arity="1"/>
- <fsummary>Test for a collection of annotations</fsummary>
+ <fsummary>Test for a collection of annotations.</fsummary>
<desc>
<p>Returns <c>true</c> if <anno>Term</anno> is a collection of
- annotations, <c>false</c> otherwise.</p>
+ annotations, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="line" arity="1"/>
- <fsummary>Return the line</fsummary>
+ <fsummary>Return the line.</fsummary>
<type name="line"></type>
<desc>
- <p>Returns the line of the annotations <anno>Anno</anno>.
- </p>
+ <p>Returns the line of the annotations <anno>Anno</anno>.</p>
</desc>
</func>
+
<func>
<name name="location" arity="1"/>
- <fsummary>Return the location</fsummary>
+ <fsummary>Return the location.</fsummary>
<type name="location"></type>
<desc>
- <p>Returns the location of the annotations <anno>Anno</anno>.
- </p>
+ <p>Returns the location of the annotations <anno>Anno</anno>.</p>
</desc>
</func>
+
<func>
<name name="new" arity="1"/>
- <fsummary>Create a new collection of annotations</fsummary>
+ <fsummary>Create a new collection of annotations.</fsummary>
<type name="location"></type>
<desc>
<p>Creates a new collection of annotations given a location.</p>
</desc>
</func>
+
<func>
<name name="set_file" arity="2"/>
- <fsummary>Modify the filename</fsummary>
+ <fsummary>Modify the filename.</fsummary>
<type name="filename"></type>
<desc>
- <p>Modifies the filename of the annotations <anno>Anno</anno>.
- </p>
+ <p>Modifies the filename of the annotations <anno>Anno</anno>.</p>
</desc>
</func>
+
<func>
<name name="set_generated" arity="2"/>
- <fsummary>Modify the generated marker</fsummary>
+ <fsummary>Modify the generated marker.</fsummary>
<type name="generated"></type>
<desc>
- <p>Modifies the generated marker of the annotations
- <anno>Anno</anno>.
+ <p>Modifies the generated marker of the annotations <anno>Anno</anno>.
</p>
</desc>
</func>
+
<func>
<name name="set_line" arity="2"/>
- <fsummary>Modify the line</fsummary>
+ <fsummary>Modify the line.</fsummary>
<type name="line"></type>
<desc>
- <p>Modifies the line of the annotations <anno>Anno</anno>.
- </p>
+ <p>Modifies the line of the annotations <anno>Anno</anno>.</p>
</desc>
</func>
+
<func>
<name name="set_location" arity="2"/>
- <fsummary>Modify the location</fsummary>
+ <fsummary>Modify the location.</fsummary>
<type name="location"></type>
<desc>
- <p>Modifies the location of the annotations <anno>Anno</anno>.
- </p>
+ <p>Modifies the location of the annotations <anno>Anno</anno>.</p>
</desc>
</func>
+
<func>
<name name="set_record" arity="2"/>
- <fsummary>Modify the record marker</fsummary>
+ <fsummary>Modify the record marker.</fsummary>
<type name="record"></type>
<desc>
- <p>Modifies the record marker of the annotations <anno>Anno</anno>.
- </p>
+ <p>Modifies the record marker of the annotations <anno>Anno</anno>.</p>
</desc>
</func>
+
<func>
<name name="set_text" arity="2"/>
- <fsummary>Modify the text</fsummary>
+ <fsummary>Modify the text.</fsummary>
<type name="text"></type>
<desc>
- <p>Modifies the text of the annotations <anno>Anno</anno>.
- </p>
+ <p>Modifies the text of the annotations <anno>Anno</anno>.</p>
</desc>
</func>
<func>
+
<name name="text" arity="1"/>
- <fsummary>Return the text</fsummary>
+ <fsummary>Return the text.</fsummary>
<type name="text"></type>
<desc>
<p>Returns the text of the annotations <anno>Anno</anno>.
- If there is no text, <c>undefined</c> is returned.
- </p>
+ If there is no text, <c>undefined</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="to_term" arity="1"/>
- <fsummary>Return the term representing a collection of
- annotations</fsummary>
+ <fsummary>Return the term representing a collection of annotations.
+ </fsummary>
<desc>
- <p>Returns the term representing the annotations <anno>Anno</anno>.
- </p>
- <p>See also <seealso marker="#from_term/1">from_term()</seealso>.
- </p>
+ <p>Returns the term representing the annotations <anno>Anno</anno>.</p>
+ <p>See also <seealso marker="#from_term/1">from_term()</seealso>.</p>
</desc>
</func>
</funcs>
+
<section>
<title>See Also</title>
- <p><seealso marker="erl_scan">erl_scan(3)</seealso>,
- <seealso marker="erl_parse">erl_parse(3)</seealso>
- </p>
+ <p><seealso marker="erl_parse"><c>erl_parse(3)</c></seealso>,
+ <seealso marker="erl_scan"><c>erl_scan(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/erl_eval.xml b/lib/stdlib/doc/src/erl_eval.xml
index d60b04b510..1c0f7f062f 100644
--- a/lib/stdlib/doc/src/erl_eval.xml
+++ b/lib/stdlib/doc/src/erl_eval.xml
@@ -28,19 +28,19 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-21</date>
+ <date>1997-01-21</date>
<rev>B</rev>
- <file>erl_eval.sgml</file>
+ <file>erl_eval.xml</file>
</header>
<module>erl_eval</module>
- <modulesummary>The Erlang Meta Interpreter</modulesummary>
+ <modulesummary>The Erlang meta interpreter.</modulesummary>
<description>
<p>This module provides an interpreter for Erlang expressions. The
expressions are in the abstract syntax as returned by
<seealso marker="erl_parse"><c>erl_parse</c></seealso>,
- the Erlang parser, or <seealso marker="io">
- <c>io</c></seealso>.</p>
+ the Erlang parser, or <seealso marker="io"><c>io</c></seealso>.</p>
</description>
+
<datatypes>
<datatype>
<name name="bindings"/>
@@ -73,9 +73,9 @@
</datatype>
<datatype>
<name name="local_function_handler"/>
- <desc><p>Further described
- <seealso marker="#local_function_handler">below.</seealso></p>
- </desc>
+ <desc><p>Further described in section
+ <seealso marker="#local_function_handler">
+ Local Function Handler</seealso> in this module</p></desc>
</datatype>
<datatype>
<name name="name"/>
@@ -85,152 +85,164 @@
</datatype>
<datatype>
<name name="non_local_function_handler"/>
- <desc><p>Further described
- <seealso marker="#non_local_function_handler">below.</seealso></p>
- </desc>
+ <desc><p>Further described in section
+ <seealso marker="#non_local_function_handler">
+ Non-Local Function Handler</seealso> in this module.</p></desc>
</datatype>
<datatype>
<name name="value"/>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="exprs" arity="2"/>
- <name name="exprs" arity="3"/>
- <name name="exprs" arity="4"/>
- <fsummary>Evaluate expressions</fsummary>
+ <name name="add_binding" arity="3"/>
+ <fsummary>Add a binding.</fsummary>
<desc>
- <p>Evaluates <c><anno>Expressions</anno></c> with the set of bindings
- <c><anno>Bindings</anno></c>, where <c><anno>Expressions</anno></c>
- is a sequence of
- expressions (in abstract syntax) of a type which may be
- returned by <seealso marker="io#parse_erl_exprs/2">
- <c>io:parse_erl_exprs/2</c></seealso>. See below for an
- explanation of how and when to use the arguments
- <c><anno>LocalFunctionHandler</anno></c> and
- <c><anno>NonLocalFunctionHandler</anno></c>.
- </p>
- <p>Returns <c>{value, <anno>Value</anno>, <anno>NewBindings</anno>}</c>
- </p>
+ <p>Adds binding <c><anno>Name</anno>=<anno>Value</anno></c>
+ to <c><anno>BindingStruct</anno></c>.
+ Returns an updated binding structure.</p>
</desc>
</func>
+
+ <func>
+ <name name="binding" arity="2"/>
+ <fsummary>Return bindings.</fsummary>
+ <desc>
+ <p>Returns the binding of <c><anno>Name</anno></c>
+ in <c><anno>BindingStruct</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="bindings" arity="1"/>
+ <fsummary>Return bindings.</fsummary>
+ <desc>
+ <p>Returns the list of bindings contained in the binding
+ structure.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="del_binding" arity="2"/>
+ <fsummary>Delete a binding.</fsummary>
+ <desc>
+ <p>Removes the binding of <c><anno>Name</anno></c>
+ in <c><anno>BindingStruct</anno></c>.
+ Returns an updated binding structure.</p>
+ </desc>
+ </func>
+
<func>
<name name="expr" arity="2"/>
<name name="expr" arity="3"/>
<name name="expr" arity="4"/>
<name name="expr" arity="5"/>
- <fsummary>Evaluate expression</fsummary>
+ <fsummary>Evaluate expression.</fsummary>
<desc>
<p>Evaluates <c><anno>Expression</anno></c> with the set of bindings
- <c><anno>Bindings</anno></c>. <c><anno>Expression</anno></c>
- is an expression in
- abstract syntax. See below for an explanation of
- how and when to use the arguments
+ <c><anno>Bindings</anno></c>. <c><anno>Expression</anno></c> is an
+ expression in abstract syntax.
+ For an explanation of when and how to use arguments
<c><anno>LocalFunctionHandler</anno></c> and
- <c><anno>NonLocalFunctionHandler</anno></c>.
- </p>
- <p>Returns <c>{value, <anno>Value</anno>,
- <anno>NewBindings</anno>}</c> by default. But if the
- <c><anno>ReturnFormat</anno></c> is <c>value</c> only
- the <c><anno>Value</anno></c> is returned.</p>
+ <c><anno>NonLocalFunctionHandler</anno></c>, see sections
+ <seealso marker="#local_function_handler">
+ Local Function Handler</seealso> and
+ <seealso marker="#non_local_function_handler">
+ Non-Local Function Handler</seealso> in this module.</p>
+ <p>Returns <c>{value, <anno>Value</anno>, <anno>NewBindings</anno>}</c>
+ by default. If <c><anno>ReturnFormat</anno></c> is <c>value</c>,
+ only <c><anno>Value</anno></c> is returned.</p>
</desc>
</func>
+
<func>
<name name="expr_list" arity="2"/>
<name name="expr_list" arity="3"/>
<name name="expr_list" arity="4"/>
- <fsummary>Evaluate a list of expressions</fsummary>
+ <fsummary>Evaluate a list of expressions.</fsummary>
<desc>
<p>Evaluates a list of expressions in parallel, using the same
initial bindings for each expression. Attempts are made to
- merge the bindings returned from each evaluation. This
- function is useful in the <c>LocalFunctionHandler</c>. See below.
- </p>
+ merge the bindings returned from each evaluation. This
+ function is useful in <c>LocalFunctionHandler</c>, see section
+ <seealso marker="#local_function_handler">
+ Local Function Handler</seealso> in this module.</p>
<p>Returns <c>{<anno>ValueList</anno>, <anno>NewBindings</anno>}</c>.
</p>
</desc>
</func>
+
<func>
- <name name="new_bindings" arity="0"/>
- <fsummary>Return a bindings structure</fsummary>
- <desc>
- <p>Returns an empty binding structure.</p>
- </desc>
- </func>
- <func>
- <name name="bindings" arity="1"/>
- <fsummary>Return bindings</fsummary>
- <desc>
- <p>Returns the list of bindings contained in the binding
- structure.</p>
- </desc>
- </func>
- <func>
- <name name="binding" arity="2"/>
- <fsummary>Return bindings</fsummary>
- <desc>
- <p>Returns the binding of <c><anno>Name</anno></c>
- in <c><anno>BindingStruct</anno></c>.</p>
- </desc>
- </func>
- <func>
- <name name="add_binding" arity="3"/>
- <fsummary>Add a binding</fsummary>
+ <name name="exprs" arity="2"/>
+ <name name="exprs" arity="3"/>
+ <name name="exprs" arity="4"/>
+ <fsummary>Evaluate expressions.</fsummary>
<desc>
- <p>Adds the binding <c><anno>Name</anno> = <anno>Value</anno></c>
- to <c><anno>BindingStruct</anno></c>.
- Returns an updated binding structure.</p>
+ <p>Evaluates <c><anno>Expressions</anno></c> with the set of bindings
+ <c><anno>Bindings</anno></c>, where <c><anno>Expressions</anno></c>
+ is a sequence of expressions (in abstract syntax) of a type that can
+ be returned by <seealso marker="io#parse_erl_exprs/2">
+ <c>io:parse_erl_exprs/2</c></seealso>.
+ For an explanation of when and how to use arguments
+ <c><anno>LocalFunctionHandler</anno></c> and
+ <c><anno>NonLocalFunctionHandler</anno></c>, see sections
+ <seealso marker="#local_function_handler">
+ Local Function Handler</seealso> and
+ <seealso marker="#non_local_function_handler">
+ Non-Local Function Handler</seealso> in this module.</p>
+ <p>Returns <c>{value, <anno>Value</anno>, <anno>NewBindings</anno>}</c>
+ </p>
</desc>
</func>
+
<func>
- <name name="del_binding" arity="2"/>
- <fsummary>Delete a binding</fsummary>
+ <name name="new_bindings" arity="0"/>
+ <fsummary>Return a bindings structure.</fsummary>
<desc>
- <p>Removes the binding of <c><anno>Name</anno></c>
- in <c><anno>BindingStruct</anno></c>.
- Returns an updated binding structure.</p>
+ <p>Returns an empty binding structure.</p>
</desc>
</func>
</funcs>
<section>
+ <marker id="local_function_handler"></marker>
<title>Local Function Handler</title>
- <p><marker id="local_function_handler"></marker>
- During evaluation of a function, no calls can be made to local
+ <p>During evaluation of a function, no calls can be made to local
functions. An undefined function error would be
generated. However, the optional argument
- <c>LocalFunctionHandler</c> may be used to define a function
- which is called when there is a call to a local function. The
+ <c>LocalFunctionHandler</c> can be used to define a function
+ that is called when there is a call to a local function. The
argument can have the following formats:</p>
<taglist>
<tag><c>{value,Func}</c></tag>
<item>
- <p>This defines a local function handler which is called with:</p>
+ <p>This defines a local function handler that is called with:</p>
<code type="none">
-Func(Name, Arguments) </code>
+Func(Name, Arguments)</code>
<p><c>Name</c> is the name of the local function (an atom) and
<c>Arguments</c> is a list of the <em>evaluated</em>
arguments. The function handler returns the value of the
- local function. In this case, it is not possible to access
- the current bindings. To signal an error, the function
- handler just calls <c>exit/1</c> with a suitable exit value.</p>
+ local function. In this case, the current bindings cannot be
+ accessed. To signal an error, the function
+ handler calls <c>exit/1</c> with a suitable exit value.</p>
</item>
<tag><c>{eval,Func}</c></tag>
<item>
- <p>This defines a local function handler which is called with:</p>
+ <p>This defines a local function handler that is called with:</p>
<code type="none">
-Func(Name, Arguments, Bindings) </code>
+Func(Name, Arguments, Bindings)</code>
<p><c>Name</c> is the name of the local function (an atom),
<c>Arguments</c> is a list of the <em>unevaluated</em>
arguments, and <c>Bindings</c> are the current variable
bindings. The function handler returns:</p>
<code type="none">
-{value,Value,NewBindings} </code>
+{value,Value,NewBindings}</code>
<p><c>Value</c> is the value of the local function and
<c>NewBindings</c> are the updated variable bindings. In
this case, the function handler must itself evaluate all the
function arguments and manage the bindings. To signal an
- error, the function handler just calls <c>exit/1</c> with a
+ error, the function handler calls <c>exit/1</c> with a
suitable exit value.</p>
</item>
<tag><c>none</c></tag>
@@ -241,55 +253,66 @@ Func(Name, Arguments, Bindings) </code>
</section>
<section>
- <title>Non-local Function Handler</title>
- <p><marker id="non_local_function_handler"></marker>
- The optional argument <c>NonlocalFunctionHandler</c> may be
- used to define a function which is called in the following
- cases: a functional object (fun) is called; a built-in function
- is called; a function is called using the M:F syntax, where M
- and F are atoms or expressions; an operator Op/A is called
- (this is handled as a call to the function <c>erlang:Op/A</c>).
- Exceptions are calls to <c>erlang:apply/2,3</c>; neither of the
- function handlers will be called for such calls.
+ <marker id="non_local_function_handler"></marker>
+ <title>Non-Local Function Handler</title>
+ <p>The optional argument <c>NonLocalFunctionHandler</c> can be
+ used to define a function that is called in the following
+ cases:</p>
+ <list type="bulleted">
+ <item><p>A functional object (fun) is called.</p></item>
+ <item><p>A built-in function is called.</p></item>
+ <item><p>A function is called using the <c>M:F</c> syntax, where <c>M</c>
+ and <c>F</c> are atoms or expressions.</p></item>
+ <item><p>An operator <c>Op/A</c> is called (this is handled as a call to
+ function <c>erlang:Op/A</c>).</p></item>
+ </list>
+ <p>Exceptions are calls to <c>erlang:apply/2,3</c>; neither of the
+ function handlers are called for such calls.
The argument can have the following formats:</p>
<taglist>
<tag><c>{value,Func}</c></tag>
<item>
- <p>This defines an nonlocal function handler which is called with:</p>
+ <p>This defines a non-local function handler that is called with:</p>
<code type="none">
-Func(FuncSpec, Arguments) </code>
+Func(FuncSpec, Arguments)</code>
<p><c>FuncSpec</c> is the name of the function on the form
<c>{Module,Function}</c> or a fun, and <c>Arguments</c> is a
list of the <em>evaluated</em> arguments. The function
handler returns the value of the function. To
- signal an error, the function handler just calls
+ signal an error, the function handler calls
<c>exit/1</c> with a suitable exit value.</p>
</item>
<tag><c>none</c></tag>
<item>
- <p>There is no nonlocal function handler.</p>
+ <p>There is no non-local function handler.</p>
</item>
</taglist>
<note>
<p>For calls such as <c>erlang:apply(Fun, Args)</c> or
- <c>erlang:apply(Module, Function, Args)</c> the call of the
+ <c>erlang:apply(Module, Function, Args)</c>, the call of the
non-local function handler corresponding to the call to
- <c>erlang:apply/2,3</c> itself--<c>Func({erlang, apply}, [Fun, Args])</c> or <c>Func({erlang, apply}, [Module, Function, Args])</c>--will never take place. The non-local function
- handler <em>will</em> however be called with the evaluated
- arguments of the call to <c>erlang:apply/2,3</c>: <c>Func(Fun, Args)</c> or <c>Func({Module, Function}, Args)</c> (assuming
+ <c>erlang:apply/2,3</c> itself
+ (<c>Func({erlang, apply}, [Fun, Args])</c> or
+ <c>Func({erlang, apply}, [Module, Function, Args])</c>)
+ never takes place.</p>
+ <p>The non-local function handler <em>is</em> however called with the
+ evaluated arguments of the call to
+ <c>erlang:apply/2,3</c>: <c>Func(Fun, Args)</c> or
+ <c>Func({Module, Function}, Args)</c> (assuming
that <c>{Module, Function}</c> is not <c>{erlang, apply}</c>).</p>
- <p>Calls to functions defined by evaluating fun expressions
+ <p>Calls to functions defined by evaluating fun expressions
<c>"fun ... end"</c> are also hidden from non-local function
- handlers.</p> </note>
- <p>The nonlocal function handler argument is probably not used as
+ handlers.</p>
+ </note>
+ <p>The non-local function handler argument is probably not used as
frequently as the local function handler argument. A possible
use is to call <c>exit/1</c> on calls to functions that for some
reason are not allowed to be called.</p>
</section>
<section>
- <title>Bugs</title>
- <p>Undocumented functions in <c>erl_eval</c> should not be used.</p>
+ <title>Known Limitation</title>
+ <p>Undocumented functions in this module are not to be used.</p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/erl_expand_records.xml b/lib/stdlib/doc/src/erl_expand_records.xml
index 93e464c733..7e4aa2db37 100644
--- a/lib/stdlib/doc/src/erl_expand_records.xml
+++ b/lib/stdlib/doc/src/erl_expand_records.xml
@@ -26,33 +26,35 @@
<title>erl_expand_records</title>
<prepared>Hans Bolinder</prepared>
- <responsible>nobody</responsible>
+ <responsible></responsible>
<docno></docno>
- <approved>nobody</approved>
- <checked>no</checked>
+ <approved></approved>
+ <checked></checked>
<date>2005-12-23</date>
<rev>PA1</rev>
- <file>erl_expand_records.sgml</file>
+ <file>erl_expand_records.xml</file>
</header>
<module>erl_expand_records</module>
- <modulesummary>Expands Records in a Module</modulesummary>
+ <modulesummary>Expands records in a module.</modulesummary>
<description>
+ <p>This module expands records in a module.</p>
</description>
+
<funcs>
<func>
<name name="module" arity="2"/>
- <fsummary>Expand all records in a module</fsummary>
+ <fsummary>Expand all records in a module.</fsummary>
<desc>
<p>Expands all records in a module. The returned module has no
- references to records, neither attributes nor code.</p>
+ references to records, attributes, or code.</p>
</desc>
</func>
</funcs>
<section>
<title>See Also</title>
- <p>The <seealso marker="erts:absform">abstract format</seealso>
- documentation in ERTS User's Guide</p>
+ <p>Section <seealso marker="erts:absform">The Abstract Format</seealso>
+ in ERTS User's Guide.</p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/erl_id_trans.xml b/lib/stdlib/doc/src/erl_id_trans.xml
index 153bd4148e..16952a9582 100644
--- a/lib/stdlib/doc/src/erl_id_trans.xml
+++ b/lib/stdlib/doc/src/erl_id_trans.xml
@@ -30,30 +30,32 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-21</date>
+ <date>1997-01-21</date>
<rev>B</rev>
- <file>erl_id_trans.sgml</file>
+ <file>erl_id_trans.xml</file>
</header>
<module>erl_id_trans</module>
- <modulesummary>An Identity Parse Transform</modulesummary>
+ <modulesummary>An identity parse transform.</modulesummary>
<description>
<p>This module performs an identity parse transformation of Erlang code.
- It is included as an example for users who may wish to write their own
- parse transformers. If the option <c>{parse_transform,Module}</c> is passed
- to the compiler, a user written function <c>parse_transform/2</c>
- is called by the compiler before the code is checked for
- errors.</p>
+ It is included as an example for users who wants to write their own
+ parse transformers. If option <c>{parse_transform,Module}</c> is passed
+ to the compiler, a user-written function <c>parse_transform/2</c>
+ is called by the compiler before the code is checked for errors.</p>
</description>
+
<funcs>
<func>
<name>parse_transform(Forms, Options) -> Forms</name>
- <fsummary>Transform Erlang forms</fsummary>
+ <fsummary>Transform Erlang forms.</fsummary>
<type>
- <v>Forms = [<seealso marker="erl_parse#type-abstract_form">erl_parse:abstract_form()</seealso>]</v>
+ <v>Forms = [<seealso marker="erl_parse#type-abstract_form">erl_parse:abstract_form()</seealso>
+ | <seealso marker="erl_parse#type-form_info">erl_parse:form_info()</seealso>]</v>
<v>Options = [<seealso marker="compile#type-option">compile:option()</seealso>]</v>
</type>
<desc>
- <p>Performs an identity transformation on Erlang forms, as an example.</p>
+ <p>Performs an identity transformation on Erlang forms, as an example.
+ </p>
</desc>
</func>
</funcs>
@@ -62,17 +64,17 @@
<title>Parse Transformations</title>
<p>Parse transformations are used if a programmer wants to use
Erlang syntax, but with different semantics. The original Erlang
- code is then transformed into other Erlang code.
- </p>
+ code is then transformed into other Erlang code.</p>
<note>
- <p>Programmers are strongly advised not to engage in parse transformations and no support is offered for problems encountered.</p>
+ <p>Programmers are strongly advised not to engage in parse
+ transformations. No support is offered for problems encountered.</p>
</note>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="erl_parse">erl_parse(3)</seealso>,
- <seealso marker="compiler:compile">compile(3)</seealso>.</p>
+ <p><seealso marker="erl_parse"><c>erl_parse(3)</c></seealso>,
+ <seealso marker="compiler:compile"><c>compile(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/erl_internal.xml b/lib/stdlib/doc/src/erl_internal.xml
index 940f8c5b40..cf49df0972 100644
--- a/lib/stdlib/doc/src/erl_internal.xml
+++ b/lib/stdlib/doc/src/erl_internal.xml
@@ -30,91 +30,100 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-21</date>
+ <date>1997-01-21</date>
<rev>B</rev>
- <file>erl_internal.sgml</file>
+ <file>erl_internal.xml</file>
</header>
<module>erl_internal</module>
- <modulesummary>Internal Erlang Definitions</modulesummary>
+ <modulesummary>Internal Erlang definitions.</modulesummary>
<description>
- <p>This module defines Erlang BIFs, guard tests and operators.
+ <p>This module defines Erlang BIFs, guard tests, and operators.
This module is only of interest to programmers who
manipulate Erlang code.</p>
</description>
+
<funcs>
<func>
- <name name="bif" arity="2"/>
- <fsummary>Test for an Erlang BIF</fsummary>
+ <name name="arith_op" arity="2"/>
+ <fsummary>Test for an arithmetic operator.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Name</anno>/<anno>Arity</anno></c> is an Erlang BIF
- which is automatically recognized by the compiler, otherwise
- <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c>
+ is an arithmetic operator, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="guard_bif" arity="2"/>
- <fsummary>Test for an Erlang BIF allowed in guards</fsummary>
+ <name name="bif" arity="2"/>
+ <fsummary>Test for an Erlang BIF.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Name</anno>/<anno>Arity</anno></c> is an Erlang BIF
- which is allowed in guards, otherwise <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>Name</anno>/<anno>Arity</anno></c>
+ is an Erlang BIF that is automatically recognized by the compiler,
+ otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="type_test" arity="2"/>
- <fsummary>Test for a valid type test</fsummary>
+ <name name="bool_op" arity="2"/>
+ <fsummary>Test for a Boolean operator.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Name</anno>/<anno>Arity</anno></c> is a valid Erlang
- type test, otherwise <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c>
+ is a Boolean operator, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="arith_op" arity="2"/>
- <fsummary>Test for an arithmetic operator</fsummary>
+ <name name="comp_op" arity="2"/>
+ <fsummary>Test for a comparison operator.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c> is an arithmetic
- operator, otherwise <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c>
+ is a comparison operator, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="bool_op" arity="2"/>
- <fsummary>Test for a Boolean operator</fsummary>
+ <name name="guard_bif" arity="2"/>
+ <fsummary>Test for an Erlang BIF allowed in guards.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c> is a Boolean
- operator, otherwise <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>Name</anno>/<anno>Arity</anno></c> is
+ an Erlang BIF that is allowed in guards, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="comp_op" arity="2"/>
- <fsummary>Test for a comparison operator</fsummary>
+ <name name="list_op" arity="2"/>
+ <fsummary>Test for a list operator.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c> is a comparison
- operator, otherwise <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c>
+ is a list operator, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="list_op" arity="2"/>
- <fsummary>Test for a list operator</fsummary>
+ <name name="op_type" arity="2"/>
+ <fsummary>Return operator type.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c> is a list
- operator, otherwise <c>false</c>.</p>
+ <p>Returns the <c><anno>Type</anno></c> of operator that
+ <c><anno>OpName</anno>/<anno>Arity</anno></c> belongs to,
+ or generates a <c>function_clause</c> error if it is not an
+ operator.</p>
</desc>
</func>
+
<func>
<name name="send_op" arity="2"/>
- <fsummary>Test for a send operator</fsummary>
+ <fsummary>Test for a send operator.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c> is a send
- operator, otherwise <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>OpName</anno>/<anno>Arity</anno></c>
+ is a send operator, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="op_type" arity="2"/>
- <fsummary>Return operator type</fsummary>
+ <name name="type_test" arity="2"/>
+ <fsummary>Test for a valid type test.</fsummary>
<desc>
- <p>Returns the <c><anno>Type</anno></c> of operator that <c><anno>OpName</anno>/<anno>Arity</anno></c>
- belongs to,
- or generates a <c>function_clause</c> error if it is not an
- operator at all.</p>
+ <p>Returns <c>true</c> if <c><anno>Name</anno>/<anno>Arity</anno></c> is
+ a valid Erlang type test, otherwise <c>false</c>.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/erl_lint.xml b/lib/stdlib/doc/src/erl_lint.xml
index 3747b0f3c3..77cb7a9916 100644
--- a/lib/stdlib/doc/src/erl_lint.xml
+++ b/lib/stdlib/doc/src/erl_lint.xml
@@ -28,39 +28,45 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-27</date>
+ <date>1997-01-27</date>
<rev>B</rev>
- <file>erl_lint.sgml</file>
+ <file>erl_lint.xml</file>
</header>
<module>erl_lint</module>
- <modulesummary>The Erlang Code Linter</modulesummary>
+ <modulesummary>The Erlang code linter.</modulesummary>
<description>
<p>This module is used to check Erlang code for illegal syntax and
- other bugs. It also warns against coding practices which are
- not recommended. </p>
+ other bugs. It also warns against coding practices that are
+ not recommended.</p>
+
<p>The errors detected include:</p>
+
<list type="bulleted">
- <item>redefined and undefined functions</item>
- <item>unbound and unsafe variables</item>
- <item>illegal record usage.</item>
+ <item>Redefined and undefined functions</item>
+ <item>Unbound and unsafe variables</item>
+ <item>Illegal record use</item>
</list>
- <p>Warnings include:</p>
+
+ <p>The warnings detected include:</p>
+
<list type="bulleted">
- <item>unused functions and imports</item>
- <item>unused variables</item>
- <item>variables imported into matches</item>
- <item>variables exported from
- <c>if</c>/<c>case</c>/<c>receive</c></item>
- <item>variables shadowed in lambdas and list
- comprehensions.</item>
+ <item>Unused functions and imports</item>
+ <item>Unused variables</item>
+ <item>Variables imported into matches</item>
+ <item>Variables exported from
+ <c>if</c>/<c>case</c>/<c>receive</c></item>
+ <item>Variables shadowed in funs and list comprehensions</item>
</list>
+
<p>Some of the warnings are optional, and can be turned on by
- giving the appropriate option, described below.</p>
+ specifying the appropriate option, described below.</p>
+
<p>The functions in this module are invoked automatically by the
- Erlang compiler and there is no reason to invoke these
+ Erlang compiler. There is no reason to invoke these
functions separately unless you have written your own Erlang
compiler.</p>
</description>
+
<datatypes>
<datatype>
<name name="error_info"/>
@@ -69,86 +75,87 @@
<name name="error_description"/>
</datatype>
</datatypes>
+
<funcs>
<func>
+ <name name="format_error" arity="1"/>
+ <fsummary>Format an error descriptor.</fsummary>
+ <desc>
+ <p>Takes an <c><anno>ErrorDescriptor</anno></c> and returns a string
+ that describes the error or warning. This function is usually
+ called implicitly when processing an <c>ErrorInfo</c> structure
+ (see section
+ <seealso marker="#errorinfo">Error Information</seealso>).</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="is_guard_test" arity="1"/>
+ <fsummary>Test for a guard test.</fsummary>
+ <desc>
+ <p>Tests if <c><anno>Expr</anno></c> is a legal guard test.
+ <c><anno>Expr</anno></c> is an Erlang term representing the abstract
+ form for the expression. <seealso marker="erl_parse#parse_exprs/1">
+ <c>erl_parse:parse_exprs(Tokens)</c></seealso>
+ can be used to generate a list of <c><anno>Expr</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
<name name="module" arity="1"/>
<name name="module" arity="2"/>
<name name="module" arity="3"/>
- <fsummary>Check a module for errors</fsummary>
+ <fsummary>Check a module for errors.</fsummary>
<desc>
- <p>This function checks all the forms in a module for errors.
- It returns:
- </p>
+ <p>Checks all the forms in a module for errors. It returns:</p>
<taglist>
<tag><c>{ok,<anno>Warnings</anno>}</c></tag>
<item>
- <p>There were no errors in the module.</p>
+ <p>There are no errors in the module.</p>
</item>
<tag><c>{error,<anno>Errors</anno>,<anno>Warnings</anno>}</c></tag>
<item>
- <p>There were errors in the module.</p>
+ <p>There are errors in the module.</p>
</item>
</taglist>
- <p>Since this module is of interest only to the maintainers of
- the compiler, and to avoid having the same description in
- two places to avoid the usual maintenance nightmare, the
+ <p>As this module is of interest only to the maintainers of the
+ compiler, and to avoid the same description in two places, the
elements of <c>Options</c> that control the warnings are
- only described in <seealso marker="compiler:compile#erl_lint_options">compile(3)</seealso>.
- </p>
- <p>The <c><anno>AbsForms</anno></c> of a module which comes from a file
- that is read through <c>epp</c>, the Erlang pre-processor,
- can come from many files. This means that any references to
- errors must include the file name (see <seealso marker="epp">epp(3)</seealso>, or parser <seealso marker="erl_parse">erl_parse(3)</seealso>).
- The warnings and errors returned have the following format:
- </p>
+ only described in the
+ <seealso marker="compiler:compile#erl_lint_options">
+ <c>compile(3)</c></seealso> module.</p>
+ <p><c><anno>AbsForms</anno></c> of a module, which comes from a file
+ that is read through <c>epp</c>, the Erlang preprocessor, can come
+ from many files. This means that any references to errors must
+ include the filename, see the <seealso marker="epp">
+ <c>epp(3)</c></seealso> module or parser (see the
+ <seealso marker="erl_parse"><c>erl_parse(3)</c></seealso> module).
+ The returned errors and warnings have the following format:</p>
<code type="none">
- [{<anno>FileName2</anno>,[<anno>ErrorInfo</anno>]}] </code>
- <p>The errors and warnings are listed in the order in which
- they are encountered in the forms. This means that the
- errors from one file may be split into different entries in
- the list of errors.</p>
- </desc>
- </func>
- <func>
- <name name="is_guard_test" arity="1"/>
- <fsummary>Test for a guard test</fsummary>
- <desc>
- <p>This function tests if <c><anno>Expr</anno></c> is a legal guard test.
- <c><anno>Expr</anno></c> is an Erlang term representing the abstract form
- for the expression. <c>erl_parse:parse_exprs(Tokens)</c> can
- be used to generate a list of <c><anno>Expr</anno></c>.</p>
- </desc>
- </func>
- <func>
- <name name="format_error" arity="1"/>
- <fsummary>Format an error descriptor</fsummary>
- <desc>
- <p>Takes an <c><anno>ErrorDescriptor</anno></c> and returns a string which
- describes the error or warning. This function is usually
- called implicitly when processing an <c>ErrorInfo</c>
- structure (see below).</p>
+[{<anno>FileName2</anno>,[<anno>ErrorInfo</anno>]}]</code>
+ <p>The errors and warnings are listed in the order in which they are
+ encountered in the forms. The errors from one file can therefore be
+ split into different entries in the list of errors.</p>
</desc>
</func>
</funcs>
<section>
+ <marker id="errorinfo"/>
<title>Error Information</title>
- <p>The <c>ErrorInfo</c> mentioned above is the standard
- <c>ErrorInfo</c> structure which is returned from all IO
- modules. It has the following format:
- </p>
+ <p><c>ErrorInfo</c> is the standard <c>ErrorInfo</c> structure that is
+ returned from all I/O modules. The format is as follows:</p>
<code type="none">
- {ErrorLine, Module, ErrorDescriptor} </code>
- <p>A string which describes the error is obtained with the following call:
- </p>
+{ErrorLine, Module, ErrorDescriptor}</code>
+ <p>A string describing the error is obtained with the following call:</p>
<code type="none">
- Module:format_error(ErrorDescriptor) </code>
+Module:format_error(ErrorDescriptor)</code>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="erl_parse">erl_parse(3)</seealso>,
- <seealso marker="epp">epp(3)</seealso></p>
+ <p><seealso marker="epp"><c>epp(3)</c></seealso>,
+ <seealso marker="erl_parse"><c>erl_parse(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/erl_parse.xml b/lib/stdlib/doc/src/erl_parse.xml
index 13be488c33..647f36883c 100644
--- a/lib/stdlib/doc/src/erl_parse.xml
+++ b/lib/stdlib/doc/src/erl_parse.xml
@@ -28,43 +28,41 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-24</date>
+ <date>1997-01-24</date>
<rev>B</rev>
- <file>erl_parse.sgml</file>
+ <file>erl_parse.xml</file>
</header>
<module>erl_parse</module>
- <modulesummary>The Erlang Parser</modulesummary>
+ <modulesummary>The Erlang parser.</modulesummary>
<description>
- <p>This module is the basic Erlang parser which converts tokens into
- the abstract form of either forms (i.e., top-level constructs),
+ <p>This module is the basic Erlang parser that converts tokens into
+ the abstract form of either forms (that is, top-level constructs),
expressions, or terms. The Abstract Format is described in the
<seealso marker="erts:absform">ERTS User's Guide</seealso>.
- Note that a token list must end with the <em>dot</em> token in order
- to be acceptable to the parse functions (see <seealso marker="erl_scan">erl_scan(3)</seealso>).</p>
+ Notice that a token list must end with the <em>dot</em> token to be
+ acceptable to the parse functions (see the <seealso marker="erl_scan">
+ <c>erl_scan(3)</c></seealso>) module.</p>
</description>
+
<datatypes>
<datatype>
<name>abstract_clause()</name>
- <desc><p><marker id="type-abstract_clause"/>
- Abstract form of an Erlang clause.</p>
+ <desc><p>Abstract form of an Erlang clause.</p>
</desc>
</datatype>
<datatype>
<name>abstract_expr()</name>
- <desc><p><marker id="type-abstract_expr"/>
- Abstract form of an Erlang expression.</p>
+ <desc><p>Abstract form of an Erlang expression.</p>
</desc>
</datatype>
<datatype>
<name>abstract_form()</name>
- <desc><p><marker id="type-abstract_form"/>
- Abstract form of an Erlang form.</p>
+ <desc><p>Abstract form of an Erlang form.</p>
</desc>
</datatype>
<datatype>
<name>abstract_type()</name>
- <desc><p><marker id="type-abstract_type"/>
- Abstract form of an Erlang type.</p>
+ <desc><p>Abstract form of an Erlang type.</p>
</desc>
</datatype>
<datatype>
@@ -77,261 +75,268 @@
<name name="error_info"></name>
</datatype>
<datatype>
+ <name name="form_info"></name>
+ <desc><p>Tuples <c>{error, error_info()}</c> and <c>{warning,
+ error_info()}</c>, denoting syntactically incorrect forms and
+ warnings, and <c>{eof, line()}</c>, denoting an end-of-stream
+ encountered before a complete form had been parsed.</p>
+ </desc>
+ </datatype>
+ <datatype>
<name name="token"></name>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="parse_form" arity="1"/>
- <fsummary>Parse an Erlang form</fsummary>
- <desc>
- <p>This function parses <c><anno>Tokens</anno></c> as if it were
- a form. It returns:</p>
- <taglist>
- <tag><c>{ok, <anno>AbsForm</anno>}</c></tag>
- <item>
- <p>The parsing was successful. <c><anno>AbsForm</anno></c> is the
- abstract form of the parsed form.</p>
- </item>
- <tag><c>{error, <anno>ErrorInfo</anno>}</c></tag>
- <item>
- <p>An error occurred.</p>
- </item>
- </taglist>
- </desc>
- </func>
- <func>
- <name name="parse_exprs" arity="1"/>
- <fsummary>Parse Erlang expressions</fsummary>
- <desc>
- <p>This function parses <c><anno>Tokens</anno></c> as if it were
- a list of expressions. It returns:</p>
- <taglist>
- <tag><c>{ok, <anno>ExprList</anno>}</c></tag>
- <item>
- <p>The parsing was successful. <c><anno>ExprList</anno></c> is a
- list of the abstract forms of the parsed expressions.</p>
- </item>
- <tag><c>{error, <anno>ErrorInfo</anno>}</c></tag>
- <item>
- <p>An error occurred.</p>
- </item>
- </taglist>
- </desc>
- </func>
- <func>
- <name name="parse_term" arity="1"/>
- <fsummary>Parse an Erlang term</fsummary>
- <desc>
- <p>This function parses <c><anno>Tokens</anno></c> as if it were
- a term. It returns:</p>
- <taglist>
- <tag><c>{ok, <anno>Term</anno>}</c></tag>
- <item>
- <p>The parsing was successful. <c><anno>Term</anno></c> is
- the Erlang term corresponding to the token list.</p>
- </item>
- <tag><c>{error, ErrorInfo}</c></tag>
- <item>
- <p>An error occurred.</p>
- </item>
- </taglist>
- </desc>
- </func>
- <func>
- <name>format_error(ErrorDescriptor) -> Chars</name>
- <fsummary>Format an error descriptor</fsummary>
- <type>
- <v>ErrorDescriptor = <seealso
- marker="#type-error_info">error_description()</seealso></v>
- <v>Chars = [char() | Chars]</v>
- </type>
- <desc>
- <p>Uses an <c>ErrorDescriptor</c> and returns a string
- which describes the error. This function is usually called
- implicitly when an <c>ErrorInfo</c> structure is processed
- (see below).</p>
- </desc>
- </func>
- <func>
- <name name="tokens" arity="1"/>
- <name name="tokens" arity="2"/>
- <fsummary>Generate a list of tokens for an expression</fsummary>
- <desc>
- <p>This function generates a list of tokens representing the abstract
- form <c><anno>AbsTerm</anno></c> of an expression. Optionally, it
- appends <c><anno>MoreTokens</anno></c>.</p>
- </desc>
- </func>
- <func>
- <name name="normalise" arity="1"/>
- <fsummary>Convert abstract form to an Erlang term</fsummary>
- <desc>
- <p>Converts the abstract form <c><anno>AbsTerm</anno></c> of a
- term into a
- conventional Erlang data structure (i.e., the term itself).
- This is the inverse of <c>abstract/1</c>.</p>
- </desc>
- </func>
- <func>
<name name="abstract" arity="1"/>
- <fsummary>Convert an Erlang term into an abstract form</fsummary>
+ <fsummary>Convert an Erlang term into an abstract form.</fsummary>
<desc>
<p>Converts the Erlang data structure <c><anno>Data</anno></c> into an
abstract form of type <c><anno>AbsTerm</anno></c>.
- This is the inverse of <c>normalise/1</c>.</p>
+ This function is the inverse of
+ <seealso marker="#normalise/1"><c>normalise/1</c></seealso>.</p>
<p><c>erl_parse:abstract(T)</c> is equivalent to
<c>erl_parse:abstract(T, 0)</c>.</p>
</desc>
</func>
+
<func>
<name name="abstract" arity="2"/>
- <fsummary>Convert an Erlang term into an abstract form</fsummary>
+ <fsummary>Convert an Erlang term into an abstract form.</fsummary>
<type name="encoding_func"/>
<desc>
<p>Converts the Erlang data structure <c><anno>Data</anno></c> into an
abstract form of type <c><anno>AbsTerm</anno></c>.</p>
- <p>The <c><anno>Line</anno></c> option is the line that will
- be assigned to each node of <c><anno>AbsTerm</anno></c>.</p>
- <p>The <c><anno>Encoding</anno></c> option is used for
- selecting which integer lists will be considered
+ <p>Option <c><anno>Line</anno></c> is the line to be
+ assigned to each node of <c><anno>AbsTerm</anno></c>.</p>
+ <p>Option <c><anno>Encoding</anno></c> is used for
+ selecting which integer lists to be considered
as strings. The default is to use the encoding returned by
- <seealso marker="epp#default_encoding/0">
+ function <seealso marker="epp#default_encoding/0">
<c>epp:default_encoding/0</c></seealso>.
- The value <c>none</c> means that no integer lists will be
- considered as strings. The <c>encoding_func()</c> will be
- called with one integer of a list at a time, and if it
- returns <c>true</c> for every integer the list will be
+ Value <c>none</c> means that no integer lists are
+ considered as strings. <c>encoding_func()</c> is
+ called with one integer of a list at a time; if it
+ returns <c>true</c> for every integer, the list is
considered a string.</p>
</desc>
</func>
+
<func>
- <name name="map_anno" arity="2"/>
- <fsummary>
- Map a function over the annotations of a <c>erl_parse</c> tree
- </fsummary>
+ <name name="anno_from_term" arity="1"/>
+ <fsummary>Return annotations as terms.</fsummary>
<desc>
- <p>Modifies the <c>erl_parse</c> tree <c><anno>Abstr</anno></c>
- by applying <c><anno>Fun</anno></c> on each collection of
- annotations of the nodes of the <c>erl_parse</c> tree. The
- <c>erl_parse</c> tree is traversed in a depth-first,
- left-to-right, fashion.
- </p>
+ <p>Assumes that <c><anno>Term</anno></c> is a term with the same
+ structure as a <c>erl_parse</c> tree, but with terms,
+ say <c>T</c>, where a <c>erl_parse</c> tree has collections
+ of annotations. Returns a <c>erl_parse</c> tree where each
+ term <c>T</c> is replaced by the value returned by
+ <seealso marker="erl_anno#from_term/1">
+ <c>erl_anno:from_term(T)</c></seealso>. The term
+ <c><anno>Term</anno></c> is traversed in a depth-first,
+ left-to-right fashion.</p>
</desc>
</func>
+
+ <func>
+ <name name="anno_to_term" arity="1"/>
+ <fsummary>Return the representation of annotations.</fsummary>
+ <desc>
+ <p>Returns a term where each collection of annotations
+ <c>Anno</c> of the nodes of the <c>erl_parse</c> tree
+ <c><anno>Abstr</anno></c> is replaced by the term
+ returned by <seealso marker="erl_anno#to_term/1">
+ <c>erl_anno:to_term(Anno)</c></seealso>. The
+ <c>erl_parse</c> tree is traversed in a depth-first,
+ left-to-right fashion.</p>
+ </desc>
+ </func>
+
<func>
<name name="fold_anno" arity="3"/>
- <fsummary>
- Fold a function over the annotations of a <c>erl_parse</c> tree
+ <fsummary>Fold a function over the annotations of an <c>erl_parse</c> tree.
</fsummary>
<desc>
<p>Updates an accumulator by applying <c><anno>Fun</anno></c> on
each collection of annotations of the <c>erl_parse</c> tree
<c><anno>Abstr</anno></c>. The first call to
<c><anno>Fun</anno></c> has <c><anno>AccIn</anno></c> as
- argument, and the returned accumulator
+ argument, the returned accumulator
<c><anno>AccOut</anno></c> is passed to the next call, and
so on. The final value of the accumulator is returned. The
- <c>erl_parse</c> tree is traversed in a depth-first, left-to-right,
- fashion.
- </p>
+ <c>erl_parse</c> tree is traversed in a depth-first, left-to-right
+ fashion.</p>
</desc>
</func>
+
<func>
- <name name="mapfold_anno" arity="3"/>
- <fsummary>
- Map and fold a function over the annotations of a
- <c>erl_parse</c> tree
+ <name>format_error(ErrorDescriptor) -> Chars</name>
+ <fsummary>Format an error descriptor.</fsummary>
+ <type>
+ <v>ErrorDescriptor = <seealso
+ marker="#type-error_info">error_description()</seealso></v>
+ <v>Chars = [char() | Chars]</v>
+ </type>
+ <desc>
+ <p>Uses an <c>ErrorDescriptor</c> and returns a string
+ that describes the error. This function is usually called
+ implicitly when an <c>ErrorInfo</c> structure is processed
+ (see section <seealso marker="#errorinfo">
+ Error Information</seealso>).</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="map_anno" arity="2"/>
+ <fsummary>Map a function over the annotations of an <c>erl_parse</c> tree.
</fsummary>
<desc>
<p>Modifies the <c>erl_parse</c> tree <c><anno>Abstr</anno></c>
- by applying <c><anno>Fun</anno></c> on each collection of
- annotations of the nodes of the <c>erl_parse</c> tree, while
- at the same time updating an accumulator. The first call to
- <c><anno>Fun</anno></c> has <c><anno>AccIn</anno></c> as
- second argument, and the returned accumulator
- <c><anno>AccOut</anno></c> is passed to the next call, and
- so on. The modified <c>erl_parse</c> tree as well as the the
- final value of the accumulator are returned. The
- <c>erl_parse</c> tree is traversed in a depth-first,
- left-to-right, fashion.
- </p>
+ by applying <c><anno>Fun</anno></c> on each collection of
+ annotations of the nodes of the <c>erl_parse</c> tree. The
+ <c>erl_parse</c> tree is traversed in a depth-first,
+ left-to-right fashion.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="mapfold_anno" arity="3"/>
+ <fsummary>Map and fold a function over the annotations of an
+ <c>erl_parse</c> tree.</fsummary>
+ <desc>
+ <p>Modifies the <c>erl_parse</c> tree <c><anno>Abstr</anno></c>
+ by applying <c><anno>Fun</anno></c> on each collection of
+ annotations of the nodes of the <c>erl_parse</c> tree, while
+ at the same time updating an accumulator. The first call to
+ <c><anno>Fun</anno></c> has <c><anno>AccIn</anno></c> as
+ second argument, the returned accumulator
+ <c><anno>AccOut</anno></c> is passed to the next call, and
+ so on. The modified <c>erl_parse</c> tree and the
+ final value of the accumulator are returned. The
+ <c>erl_parse</c> tree is traversed in a depth-first,
+ left-to-right fashion.</p>
</desc>
</func>
+
<func>
<name name="new_anno" arity="1"/>
- <fsummary>
- Create new annotations
- </fsummary>
+ <fsummary>Create new annotations.</fsummary>
<desc>
<p>Assumes that <c><anno>Term</anno></c> is a term with the same
structure as a <c>erl_parse</c> tree, but with <seealso
marker="erl_anno#type-location">locations</seealso> where a
<c>erl_parse</c> tree has collections of annotations.
Returns a <c>erl_parse</c> tree where each location <c>L</c>
- has been replaced by the value returned by <seealso
+ is replaced by the value returned by <seealso
marker="erl_anno#new/1"><c>erl_anno:new(L)</c></seealso>.
The term <c><anno>Term</anno></c> is traversed in a
- depth-first, left-to-right, fashion.
- </p>
+ depth-first, left-to-right fashion.</p>
</desc>
</func>
+
<func>
- <name name="anno_from_term" arity="1"/>
- <fsummary>
- Return annotations as terms
- </fsummary>
+ <name name="normalise" arity="1"/>
+ <fsummary>Convert abstract form to an Erlang term.</fsummary>
<desc>
- <p>Assumes that <c><anno>Term</anno></c> is a term with the same
- structure as a <c>erl_parse</c> tree, but with terms,
- <c>T</c> say, where a <c>erl_parse</c> tree has collections
- of annotations. Returns a <c>erl_parse</c> tree where each
- term <c>T</c> has been replaced by the value returned by
- <seealso marker="erl_anno#from_term/1">
- <c>erl_anno:from_term(T)</c></seealso>. The term
- <c><anno>Term</anno></c> is traversed in a depth-first,
- left-to-right, fashion.
- </p>
+ <p>Converts the abstract form <c><anno>AbsTerm</anno></c> of a
+ term into a conventional Erlang data structure (that is, the
+ term itself). This function is the inverse of
+ <seealso marker="#abstract/1"><c>abstract/1</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="anno_to_term" arity="1"/>
- <fsummary>
- Return the representation of annotations
- </fsummary>
+ <name name="parse_exprs" arity="1"/>
+ <fsummary>Parse Erlang expressions.</fsummary>
<desc>
- <p>Returns a term where each collection of annotations
- <c>Anno</c> of the nodes of the <c>erl_parse</c> tree
- <c><anno>Abstr</anno></c> has been replaced by the term
- returned by <seealso marker="erl_anno#to_term/1">
- <c>erl_anno:to_term(Anno)</c></seealso>. The
- <c>erl_parse</c> tree is traversed in a depth-first,
- left-to-right, fashion.
- </p>
+ <p>Parses <c><anno>Tokens</anno></c> as if it was a list of expressions.
+ Returns one of the following:</p>
+ <taglist>
+ <tag><c>{ok, <anno>ExprList</anno>}</c></tag>
+ <item>
+ <p>The parsing was successful. <c><anno>ExprList</anno></c> is a
+ list of the abstract forms of the parsed expressions.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorInfo</anno>}</c></tag>
+ <item>
+ <p>An error occurred.</p>
+ </item>
+ </taglist>
+ </desc>
+ </func>
+
+ <func>
+ <name name="parse_form" arity="1"/>
+ <fsummary>Parse an Erlang form.</fsummary>
+ <desc>
+ <p>Parses <c><anno>Tokens</anno></c> as if it was a form. Returns one
+ of the following:</p>
+ <taglist>
+ <tag><c>{ok, <anno>AbsForm</anno>}</c></tag>
+ <item>
+ <p>The parsing was successful. <c><anno>AbsForm</anno></c> is the
+ abstract form of the parsed form.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorInfo</anno>}</c></tag>
+ <item>
+ <p>An error occurred.</p>
+ </item>
+ </taglist>
+ </desc>
+ </func>
+
+ <func>
+ <name name="parse_term" arity="1"/>
+ <fsummary>Parse an Erlang term.</fsummary>
+ <desc>
+ <p>Parses <c><anno>Tokens</anno></c> as if it was a term. Returns
+ one of the following:</p>
+ <taglist>
+ <tag><c>{ok, <anno>Term</anno>}</c></tag>
+ <item>
+ <p>The parsing was successful. <c><anno>Term</anno></c> is
+ the Erlang term corresponding to the token list.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorInfo</anno>}</c></tag>
+ <item>
+ <p>An error occurred.</p>
+ </item>
+ </taglist>
+ </desc>
+ </func>
+
+ <func>
+ <name name="tokens" arity="1"/>
+ <name name="tokens" arity="2"/>
+ <fsummary>Generate a list of tokens for an expression.</fsummary>
+ <desc>
+ <p>Generates a list of tokens representing the abstract
+ form <c><anno>AbsTerm</anno></c> of an expression. Optionally,
+ <c><anno>MoreTokens</anno></c> is appended.</p>
</desc>
</func>
</funcs>
<section>
+ <marker id="errorinfo"/>
<title>Error Information</title>
- <p>The <c>ErrorInfo</c> mentioned above is the standard
- <c>ErrorInfo</c> structure which is returned from all IO
- modules. It has the format:
- </p>
+ <p><c>ErrorInfo</c> is the standard <c>ErrorInfo</c> structure that is
+ returned from all I/O modules. The format is as follows:</p>
<code type="none">
- {ErrorLine, Module, ErrorDescriptor} </code>
- <p>A string which describes the error is obtained with the following call:
- </p>
+{ErrorLine, Module, ErrorDescriptor}</code>
+ <p>A string describing the error is obtained with the following call:</p>
<code type="none">
- Module:format_error(ErrorDescriptor) </code>
+Module:format_error(ErrorDescriptor)</code>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="io">io(3)</seealso>,
- <seealso marker="erl_anno">erl_anno(3)</seealso>,
- <seealso marker="erl_scan">erl_scan(3)</seealso>,
- <seealso marker="erts:absform">ERTS User's Guide</seealso></p>
+ <p><seealso marker="erl_anno"><c>erl_anno(3)</c></seealso>,
+ <seealso marker="erl_scan"><c>erl_scan(3)</c></seealso>,
+ <seealso marker="io"><c>io(3)</c></seealso>,
+ section <seealso marker="erts:absform">The Abstract Format</seealso>
+ in the ERTS User's Guide</p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/erl_pp.xml b/lib/stdlib/doc/src/erl_pp.xml
index e96fd576ec..77a7f1e8d1 100644
--- a/lib/stdlib/doc/src/erl_pp.xml
+++ b/lib/stdlib/doc/src/erl_pp.xml
@@ -7,7 +7,7 @@
<year>1996</year>
<year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
- </copyright>
+ </copyright>
<legalnotice>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -30,38 +30,37 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-24</date>
+ <date>1997-01-24</date>
<rev>B</rev>
- <file>erl_pp.sgml</file>
+ <file>erl_pp.xml</file>
</header>
<module>erl_pp</module>
- <modulesummary>The Erlang Pretty Printer</modulesummary>
+ <modulesummary>The Erlang pretty printer.</modulesummary>
<description>
<p>The functions in this module are used to generate
aesthetically attractive representations of abstract
- forms, which are suitable for printing. All functions return (possibly deep)
+ forms, which are suitable for printing.
+ All functions return (possibly deep)
lists of characters and generate an error if the form is wrong.</p>
- <p>All functions can have an optional argument which specifies a hook
+
+ <p>All functions can have an optional argument, which specifies a hook
that is called if an attempt is made to print an unknown form.</p>
</description>
+
<datatypes>
<datatype>
<name name="hook_function"/>
<desc>
- <p>The optional argument <marker id="hook_function"/>
- <c>HookFunction</c>, shown in the functions described below,
- defines a function which is called when an unknown form occurs where there
- should be a valid expression.</p>
-
- <p>If <c>HookFunction</c> is equal to <c>none</c> there is no hook
- function.</p>
-
- <p>The called hook function should return a (possibly deep) list
- of characters. <seealso marker="#expr/4"><c>expr/4</c></seealso>
- is useful in a hook.
- </p>
- <p>If <c><anno>CurrentIndentation</anno></c> is negative, there will be no line
- breaks and only a space is used as a separator.</p>
+ <p>Optional argument <marker id="hook_function"/><c>HookFunction</c>,
+ shown in the functions described in this module, defines a function
+ that is called when an unknown form occurs where there
+ is to be a valid expression. If <c>HookFunction</c> is equal to
+ <c>none</c>, there is no hook function.</p>
+ <p>The called hook function is to return a (possibly deep) list of
+ characters. Function <seealso marker="#expr/4"><c>expr/4</c></seealso>
+ is useful in a hook.</p>
+ <p>If <c><anno>CurrentIndentation</anno></c> is negative, there are no
+ line breaks and only a space is used as a separator.</p>
</desc>
</datatype>
<datatype>
@@ -71,78 +70,88 @@
<name name="options"/>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="form" arity="1"/>
- <name name="form" arity="2"/>
- <fsummary>Pretty print a form</fsummary>
+ <name name="attribute" arity="1"/>
+ <name name="attribute" arity="2"/>
+ <fsummary>Pretty print an attribute.</fsummary>
<desc>
- <p>Pretty prints a
- <c><anno>Form</anno></c> which is an abstract form of a type which is
- returned by <seealso marker="erl_parse#parse_form/1">
- <c>erl_parse:parse_form/1</c></seealso>.</p>
+ <p>Same as <seealso marker="#form/1"><c>form/1,2</c></seealso>,
+ but only for attribute <c><anno>Attribute</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="attribute" arity="1"/>
- <name name="attribute" arity="2"/>
- <fsummary>Pretty print an attribute</fsummary>
+ <name name="expr" arity="1"/>
+ <name name="expr" arity="2"/>
+ <name name="expr" arity="3"/>
+ <name name="expr" arity="4"/>
+ <fsummary>Pretty print one <c>Expression</c>.</fsummary>
<desc>
- <p>The same as <c>form</c>, but only for the attribute
- <c><anno>Attribute</anno></c>.</p>
+ <p>Prints one expression. It is useful for implementing hooks (see
+ section
+ <seealso marker="#knownlimitations">Known Limitations</seealso>).</p>
</desc>
</func>
+
<func>
- <name name="function" arity="1"/>
- <name name="function" arity="2"/>
- <fsummary>Pretty print a function</fsummary>
+ <name name="exprs" arity="1"/>
+ <name name="exprs" arity="2"/>
+ <name name="exprs" arity="3"/>
+ <fsummary>Pretty print <c>Expressions</c>.</fsummary>
<desc>
- <p>The same as <c>form</c>, but only for the function
- <c><anno>Function</anno></c>.</p>
+ <p>Same as <seealso marker="#form/1"><c>form/1,2</c></seealso>,
+ but only for the sequence of
+ expressions in <c><anno>Expressions</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="guard" arity="1"/>
- <name name="guard" arity="2"/>
- <fsummary>Pretty print a guard</fsummary>
+ <name name="form" arity="1"/>
+ <name name="form" arity="2"/>
+ <fsummary>Pretty print a form.</fsummary>
<desc>
- <p>The same as <c>form</c>, but only for the guard test
- <c><anno>Guard</anno></c>.</p>
+ <p>Pretty prints a
+ <c><anno>Form</anno></c>, which is an abstract form of a type that is
+ returned by <seealso marker="erl_parse#parse_form/1">
+ <c>erl_parse:parse_form/1</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="exprs" arity="1"/>
- <name name="exprs" arity="2"/>
- <name name="exprs" arity="3"/>
- <fsummary>Pretty print <c>Expressions</c></fsummary>
+ <name name="function" arity="1"/>
+ <name name="function" arity="2"/>
+ <fsummary>Pretty print a function.</fsummary>
<desc>
- <p>The same as <c>form</c>, but only for the sequence of
- expressions in <c><anno>Expressions</anno></c>.</p>
+ <p>Same as <seealso marker="#form/1"><c>form/1,2</c></seealso>,
+ but only for function <c><anno>Function</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="expr" arity="1"/>
- <name name="expr" arity="2"/>
- <name name="expr" arity="3"/>
- <name name="expr" arity="4"/>
- <fsummary>Pretty print one <c>Expression</c></fsummary>
+ <name name="guard" arity="1"/>
+ <name name="guard" arity="2"/>
+ <fsummary>Pretty print a guard.</fsummary>
<desc>
- <p>This function prints one expression. It is useful for implementing hooks (see below).</p>
+ <p>Same as <seealso marker="#form/1"><c>form/1,2</c></seealso>,
+ but only for the guard test <c><anno>Guard</anno></c>.</p>
</desc>
</func>
</funcs>
<section>
- <title>Bugs</title>
- <p>It should be possible to have hook functions for unknown forms
- at places other than expressions.</p>
+ <marker id="knownlimitations"/>
+ <title>Known Limitations</title>
+ <p>It is not possible to have hook functions for unknown forms
+ at other places than expressions.</p>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="io">io(3)</seealso>,
- <seealso marker="erl_parse">erl_parse(3)</seealso>,
- <seealso marker="erl_eval">erl_eval(3)</seealso></p>
+ <p><seealso marker="erl_eval"><c>erl_eval(3)</c></seealso>,
+ <seealso marker="erl_parse"><c>erl_parse(3)</c></seealso>,
+ <seealso marker="io"><c>io(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/erl_scan.xml b/lib/stdlib/doc/src/erl_scan.xml
index ee0d6b6033..137ccd3416 100644
--- a/lib/stdlib/doc/src/erl_scan.xml
+++ b/lib/stdlib/doc/src/erl_scan.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2015</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -28,16 +28,17 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-24</date>
+ <date>1997-01-24</date>
<rev>B</rev>
- <file>erl_scan.sgml</file>
+ <file>erl_scan.xml</file>
</header>
<module>erl_scan</module>
- <modulesummary>The Erlang Token Scanner</modulesummary>
+ <modulesummary>The Erlang token scanner.</modulesummary>
<description>
- <p>This module contains functions for tokenizing characters into
+ <p>This module contains functions for tokenizing (scanning) characters into
Erlang tokens.</p>
</description>
+
<datatypes>
<datatype>
<name name="category"></name>
@@ -70,23 +71,96 @@
<name name="tokens_result"></name>
</datatype>
</datatypes>
+
<funcs>
<func>
+ <name name="category" arity="1"/>
+ <fsummary>Return the category.</fsummary>
+ <desc>
+ <p>Returns the category of <c><anno>Token</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="column" arity="1"/>
+ <fsummary>Return the column.</fsummary>
+ <desc>
+ <p>Returns the column of <c><anno>Token</anno></c>'s
+ collection of annotations.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="end_location" arity="1"/>
+ <fsummary>Return the end location of the text.</fsummary>
+ <desc>
+ <p>Returns the end location of the text of
+ <c><anno>Token</anno></c>'s collection of annotations. If
+ there is no text, <c>undefined</c> is returned.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="format_error" arity="1"/>
+ <fsummary>Format an error descriptor.</fsummary>
+ <desc>
+ <p>Uses an <c><anno>ErrorDescriptor</anno></c> and returns a string
+ that describes the error or warning. This function is usually
+ called implicitly when an <c>ErrorInfo</c> structure is
+ processed (see section
+ <seealso marker="#errorinfo">Error Information</seealso>).</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="line" arity="1"/>
+ <fsummary>Return the line.</fsummary>
+ <desc>
+ <p>Returns the line of <c><anno>Token</anno></c>'s collection
+ of annotations.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="location" arity="1"/>
+ <fsummary>Return the location.</fsummary>
+ <desc>
+ <p>Returns the location of <c><anno>Token</anno></c>'s
+ collection of annotations.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="reserved_word" arity="1"/>
+ <fsummary>Test for a reserved word.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c><anno>Atom</anno></c> is an
+ Erlang reserved word, otherwise <c>false</c>.</p>
+ </desc>
+ </func>
+
+ <func>
<name name="string" arity="1"/>
<name name="string" arity="2"/>
<name name="string" arity="3"/>
- <fsummary>Scan a string and return the Erlang tokens</fsummary>
+ <fsummary>Scan a string and return the Erlang tokens.</fsummary>
<desc>
<p>Takes the list of characters <c><anno>String</anno></c> and tries to
- scan (tokenize) them. Returns <c>{ok, <anno>Tokens</anno>,
- <anno>EndLocation</anno>}</c>,
- where <c><anno>Tokens</anno></c> are the Erlang tokens from
- <c><anno>String</anno></c>. <c><anno>EndLocation</anno></c>
- is the first location after the last token.</p>
- <p><c>{error, <anno>ErrorInfo</anno>, <anno>ErrorLocation</anno>}</c>
- is returned if an error occurs.
- <c><anno>ErrorLocation</anno></c> is the first location after
- the erroneous token.</p>
+ scan (tokenize) them. Returns one of the following:</p>
+ <taglist>
+ <tag><c>{ok, <anno>Tokens</anno>, <anno>EndLocation</anno>}</c></tag>
+ <item>
+ <p><c><anno>Tokens</anno></c> are the Erlang tokens from
+ <c><anno>String</anno></c>. <c><anno>EndLocation</anno></c>
+ is the first location after the last token.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorInfo</anno>,
+ <anno>ErrorLocation</anno>}</c></tag>
+ <item>
+ <p>An error occurred. <c><anno>ErrorLocation</anno></c> is the
+ first location after the erroneous token.</p>
+ </item>
+ </taglist>
<p><c>string(<anno>String</anno>)</c> is equivalent to
<c>string(<anno>String</anno>, 1)</c>, and
<c>string(<anno>String</anno>,
@@ -95,80 +169,102 @@
<anno>StartLocation</anno>, [])</c>.</p>
<p><c><anno>StartLocation</anno></c> indicates the initial location
when scanning starts. If <c><anno>StartLocation</anno></c> is a line,
- <c>Anno</c> as well as <c><anno>EndLocation</anno></c> and
- <c><anno>ErrorLocation</anno></c> will be lines. If
- <c><anno>StartLocation</anno></c> is a pair of a line and a column
+ <c>Anno</c>, <c><anno>EndLocation</anno></c>, and
+ <c><anno>ErrorLocation</anno></c> are lines. If
+ <c><anno>StartLocation</anno></c> is a pair of a line and a column,
<c>Anno</c> takes the form of an opaque compound
data type, and <c><anno>EndLocation</anno></c> and
<c><anno>ErrorLocation</anno></c>
- will be pairs of a line and a column. The <em>token
+ are pairs of a line and a column. The <em>token
annotations</em> contain information about the column and the
line where the token begins, as well as the text of the
- token (if the <c>text</c> option is given), all of which can
+ token (if option <c>text</c> is specified), all of which can
be accessed by calling
- <seealso marker="#column/1">column/1</seealso>,
- <seealso marker="#line/1">line/1</seealso>,
- <seealso marker="#location/1">location/1</seealso>, and
- <seealso marker="#text/1">text/1</seealso>.</p>
+ <seealso marker="#column/1"><c>column/1</c></seealso>,
+ <seealso marker="#line/1"><c>line/1</c></seealso>,
+ <seealso marker="#location/1"><c>location/1</c></seealso>, and
+ <seealso marker="#text/1"><c>text/1</c></seealso>.</p>
<p>A <em>token</em> is a tuple containing information about
- syntactic category, the token annotations, and the actual
- terminal symbol. For punctuation characters (e.g. <c>;</c>,
+ syntactic category, the token annotations, and the
+ terminal symbol. For punctuation characters (such as <c>;</c> and
<c>|</c>) and reserved words, the category and the symbol
coincide, and the token is represented by a two-tuple.
- Three-tuples have one of the following forms: <c>{atom,
- Info, atom()}</c>,
- <c>{char, Info, integer()}</c>, <c>{comment, Info,
- string()}</c>, <c>{float, Info, float()}</c>, <c>{integer,
- Info, integer()}</c>, <c>{var, Info, atom()}</c>,
- and <c>{white_space, Info, string()}</c>.</p>
- <p>The valid options are:</p>
+ Three-tuples have one of the following forms:</p>
+ <list type="bulleted">
+ <item><c>{atom, Anno, atom()}</c></item>
+ <item><c>{char, Anno, char()}</c></item>
+ <item><c>{comment, Anno, string()}</c></item>
+ <item><c>{float, Anno, float()}</c></item>
+ <item><c>{integer, Anno, integer()}</c></item>
+ <item><c>{var, Anno, atom()}</c></item>
+ <item><c>{white_space, Anno, string()}</c></item>
+ </list>
+ <p>Valid options:</p>
<taglist>
- <tag><c>{reserved_word_fun, reserved_word_fun()}</c></tag>
- <item><p>A callback function that is called when the scanner
- has found an unquoted atom. If the function returns
- <c>true</c>, the unquoted atom itself will be the category
- of the token; if the function returns <c>false</c>,
- <c>atom</c> will be the category of the unquoted atom.</p>
- </item>
- <tag><c>return_comments</c></tag>
- <item><p>Return comment tokens.</p>
- </item>
- <tag><c>return_white_spaces</c></tag>
- <item><p>Return white space tokens. By convention, if there is
- a newline character, it is always the first character of the
- text (there cannot be more than one newline in a white space
- token).</p>
- </item>
- <tag><c>return</c></tag>
- <item><p>Short for <c>[return_comments, return_white_spaces]</c>.</p>
- </item>
- <tag><c>text</c></tag>
- <item><p>Include the token's text in the token annotation. The
- text is the part of the input corresponding to the token.</p>
- </item>
+ <tag><c>{reserved_word_fun, reserved_word_fun()}</c></tag>
+ <item><p>A callback function that is called when the scanner
+ has found an unquoted atom. If the function returns
+ <c>true</c>, the unquoted atom itself becomes the category
+ of the token. If the function returns <c>false</c>,
+ <c>atom</c> becomes the category of the unquoted atom.</p>
+ </item>
+ <tag><c>return_comments</c></tag>
+ <item><p>Return comment tokens.</p>
+ </item>
+ <tag><c>return_white_spaces</c></tag>
+ <item><p>Return white space tokens. By convention, a newline
+ character, if present, is always the first character of the
+ text (there cannot be more than one newline in a white space
+ token).</p>
+ </item>
+ <tag><c>return</c></tag>
+ <item><p>Short for <c>[return_comments, return_white_spaces]</c>.</p>
+ </item>
+ <tag><c>text</c></tag>
+ <item><p>Include the token text in the token annotation. The
+ text is the part of the input corresponding to the token.</p>
+ </item>
</taglist>
</desc>
</func>
+
+ <func>
+ <name name="symbol" arity="1"/>
+ <fsummary>Return the symbol.</fsummary>
+ <desc>
+ <p>Returns the symbol of <c><anno>Token</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="text" arity="1"/>
+ <fsummary>Return the text.</fsummary>
+ <desc>
+ <p>Returns the text of <c><anno>Token</anno></c>'s collection
+ of annotations. If there is no text, <c>undefined</c> is
+ returned.</p>
+ </desc>
+ </func>
+
<func>
<name name="tokens" arity="3"/>
<name name="tokens" arity="4"/>
- <fsummary>Re-entrant scanner</fsummary>
+ <fsummary>Re-entrant scanner.</fsummary>
<type name="char_spec"/>
<type name="return_cont"/>
- <type_desc name="return_cont">An opaque continuation</type_desc>
+ <type_desc name="return_cont">An opaque continuation.</type_desc>
<desc>
- <p>This is the re-entrant scanner which scans characters until
- a <em>dot</em> ('.' followed by a white space) or
- <c>eof</c> has been reached. It returns:</p>
+ <p>This is the re-entrant scanner, which scans characters until
+ either a <em>dot</em> ('.' followed by a white space) or
+ <c>eof</c> is reached. It returns:</p>
<taglist>
<tag><c>{done, <anno>Result</anno>, <anno>LeftOverChars</anno>}</c>
</tag>
<item>
- <p>This return indicates that there is sufficient input
+ <p>Indicates that there is sufficient input
data to get a result. <c><anno>Result</anno></c> is:</p>
<taglist>
- <tag><c>{ok, Tokens, EndLocation}</c>
- </tag>
+ <tag><c>{ok, Tokens, EndLocation}</c></tag>
<item>
<p>The scanning was successful. <c>Tokens</c>
is the list of tokens including <em>dot</em>.</p>
@@ -177,8 +273,7 @@
<item>
<p>End of file was encountered before any more tokens.</p>
</item>
- <tag><c>{error, ErrorInfo, EndLocation}</c>
- </tag>
+ <tag><c>{error, ErrorInfo, EndLocation}</c></tag>
<item>
<p>An error occurred. <c><anno>LeftOverChars</anno></c>
is the remaining characters of the input data,
@@ -194,110 +289,26 @@
</item>
</taglist>
<p>The <c><anno>CharSpec</anno></c> <c>eof</c> signals end of file.
- <c><anno>LeftOverChars</anno></c> will then take the value <c>eof</c>
+ <c><anno>LeftOverChars</anno></c> then takes the value <c>eof</c>
as well.</p>
<p><c>tokens(<anno>Continuation</anno>, <anno>CharSpec</anno>,
<anno>StartLocation</anno>)</c> is equivalent to
<c>tokens(<anno>Continuation</anno>, <anno>CharSpec</anno>,
<anno>StartLocation</anno>, [])</c>.</p>
- <p>See <seealso marker="#string/3">string/3</seealso> for a
- description of the various options.</p>
- </desc>
- </func>
- <func>
- <name name="reserved_word" arity="1"/>
- <fsummary>Test for a reserved word</fsummary>
- <desc>
- <p>Returns <c>true</c> if <c><anno>Atom</anno></c> is an Erlang
- reserved word, otherwise <c>false</c>.</p>
- </desc>
- </func>
- <func>
- <name name="category" arity="1"/>
- <fsummary>Return the category</fsummary>
- <desc>
- <p>Returns the category of <c><anno>Token</anno></c>.
- </p>
- </desc>
- </func>
- <func>
- <name name="symbol" arity="1"/>
- <fsummary>Return the symbol</fsummary>
- <desc>
- <p>Returns the symbol of <c><anno>Token</anno></c>.
- </p>
- </desc>
- </func>
- <func>
- <name name="column" arity="1"/>
- <fsummary>Return the column</fsummary>
- <desc>
- <p>Returns the column of <c><anno>Token</anno></c>'s
- collection of annotations.
- </p>
- </desc>
- </func>
- <func>
- <name name="end_location" arity="1"/>
- <fsummary>Return the end location of the text</fsummary>
- <desc>
- <p>Returns the end location of the text of
- <c><anno>Token</anno></c>'s collection of annotations. If
- there is no text,
- <c>undefined</c> is returned.
- </p>
- </desc>
- </func>
- <func>
- <name name="line" arity="1"/>
- <fsummary>Return the line</fsummary>
- <desc>
- <p>Returns the line of <c><anno>Token</anno></c>'s collection
- of annotations.
- </p>
- </desc>
- </func>
- <func>
- <name name="location" arity="1"/>
- <fsummary>Return the location</fsummary>
- <desc>
- <p>Returns the location of <c><anno>Token</anno></c>'s
- collection of annotations.
- </p>
- </desc>
- </func>
- <func>
- <name name="text" arity="1"/>
- <fsummary>Return the text</fsummary>
- <desc>
- <p>Returns the text of <c><anno>Token</anno></c>'s collection
- of annotations. If there is no text, <c>undefined</c> is
- returned.
- </p>
- </desc>
- </func>
- <func>
- <name name="format_error" arity="1"/>
- <fsummary>Format an error descriptor</fsummary>
- <desc>
- <p>Takes an <c><anno>ErrorDescriptor</anno></c> and returns
- a string which
- describes the error or warning. This function is usually
- called implicitly when processing an <c>ErrorInfo</c>
- structure (see below).</p>
+ <p>For a description of the options, see
+ <seealso marker="#string/3"><c>string/3</c></seealso>.</p>
</desc>
</func>
</funcs>
<section>
+ <marker id="errorinfo"/>
<title>Error Information</title>
- <p>The <c>ErrorInfo</c> mentioned above is the standard
- <c>ErrorInfo</c> structure which is returned from all IO
- modules. It has the following format:</p>
+ <p><c>ErrorInfo</c> is the standard <c>ErrorInfo</c> structure that is
+ returned from all I/O modules. The format is as follows:</p>
<code type="none">
{ErrorLocation, Module, ErrorDescriptor}</code>
- <p>A string which describes the error is obtained with the
- following call:</p>
+ <p>A string describing the error is obtained with the following call:</p>
<code type="none">
Module:format_error(ErrorDescriptor)</code>
</section>
@@ -305,15 +316,15 @@ Module:format_error(ErrorDescriptor)</code>
<section>
<title>Notes</title>
<p>The continuation of the first call to the re-entrant input
- functions must be <c>[]</c>. Refer to Armstrong, Virding and
- Williams, 'Concurrent Programming in Erlang', Chapter 13, for a
- complete description of how the re-entrant input scheme works.</p>
+ functions must be <c>[]</c>. For a complete description of how the
+ re-entrant input scheme works, see Armstrong, Virding and
+ Williams: 'Concurrent Programming in Erlang', Chapter 13.</p>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="io">io(3)</seealso>,
- <seealso marker="erl_anno">erl_anno(3)</seealso>,
- <seealso marker="erl_parse">erl_parse(3)</seealso></p>
+ <p><seealso marker="erl_anno"><c>erl_anno(3)</c></seealso>,
+ <seealso marker="erl_parse"><c>erl_parse(3)</c></seealso>,
+ <seealso marker="io"><c>io(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/erl_tar.xml b/lib/stdlib/doc/src/erl_tar.xml
index 1f4a43f622..24e7b64b9e 100644
--- a/lib/stdlib/doc/src/erl_tar.xml
+++ b/lib/stdlib/doc/src/erl_tar.xml
@@ -28,117 +28,146 @@
<docno>1</docno>
<approved>Kenneth Lundin</approved>
<checked></checked>
- <date>03-01-21</date>
+ <date>2003-01-21</date>
<rev>A</rev>
- <file>erl_tar.sgml</file>
+ <file>erl_tar.xml</file>
</header>
<module>erl_tar</module>
- <modulesummary>Unix 'tar' utility for reading and writing tar archives</modulesummary>
+ <modulesummary>Unix 'tar' utility for reading and writing tar archives.
+ </modulesummary>
<description>
- <p>The <c>erl_tar</c> module archives and extract files to and from
- a tar file. <c>erl_tar</c> supports the <c>ustar</c> format
+ <p>This module archives and extract files to and from
+ a tar file. This module supports the <c>ustar</c> format
(IEEE Std 1003.1 and ISO/IEC&nbsp;9945-1). All modern <c>tar</c>
programs (including GNU tar) can read this format. To ensure that
that GNU tar produces a tar file that <c>erl_tar</c> can read,
- give the <c>--format=ustar</c> option to GNU tar.</p>
- <p>By convention, the name of a tar file should end in "<c>.tar</c>".
- To abide to the convention, you'll need to add "<c>.tar</c>" yourself
- to the name.</p>
- <p>Tar files can be created in one operation using the
- <seealso marker="#create_2">create/2</seealso> or
- <seealso marker="#create_3">create/3</seealso> function.</p>
- <p>Alternatively, for more control, the
- <seealso marker="#open">open</seealso>,
- <seealso marker="#add">add/3,4</seealso>, and
- <seealso marker="#close">close/1</seealso> functions can be used.</p>
- <p>To extract all files from a tar file, use the
- <seealso marker="#extract_1">extract/1</seealso> function.
+ specify option <c>--format=ustar</c> to GNU tar.</p>
+
+ <p>By convention, the name of a tar file is to end in "<c>.tar</c>".
+ To abide to the convention, add "<c>.tar</c>" to the name.</p>
+
+ <p>Tar files can be created in one operation using function
+ <seealso marker="#create/2"><c>create/2</c></seealso> or
+ <seealso marker="#create/3"><c>create/3</c></seealso>.</p>
+
+ <p>Alternatively, for more control, use functions
+ <seealso marker="#open/2"><c>open/2</c></seealso>,
+ <seealso marker="#add/3"><c>add/3,4</c></seealso>, and
+ <seealso marker="#close/1"><c>close/1</c></seealso>.</p>
+
+ <p>To extract all files from a tar file, use function
+ <seealso marker="#extract/1"><c>extract/1</c></seealso>.
To extract only some files or to be able to specify some more options,
- use the <seealso marker="#extract_2">extract/2</seealso> function.</p>
+ use function <seealso marker="#extract/2"><c>extract/2</c></seealso>.</p>
+
<p>To return a list of the files in a tar file,
- use either the <seealso marker="#table_1">table/1</seealso> or
- <seealso marker="#table_2">table/2</seealso> function.
+ use function <seealso marker="#table/1"><c>table/1</c></seealso> or
+ <seealso marker="#table/2"><c>table/2</c></seealso>.
To print a list of files to the Erlang shell,
- use either the <seealso marker="#t_1">t/1</seealso> or
- <seealso marker="#tt_1">tt/1</seealso> function.</p>
+ use function <seealso marker="#t/1"><c>t/1</c></seealso> or
+ <seealso marker="#tt/1"><c>tt/1</c></seealso>.</p>
+
<p>To convert an error term returned from one of the functions
- above to a readable message, use the
- <seealso marker="#format_error_1">format_error/1</seealso> function.</p>
+ above to a readable message, use function
+ <seealso marker="#format_error/1"><c>format_error/1</c></seealso>.</p>
</description>
<section>
- <title>UNICODE SUPPORT</title>
- <p>If <seealso
- marker="kernel:file#native_name_encoding/0">file:native_name_encoding/0</seealso>
- returns <c>utf8</c>, path names will be encoded in UTF-8 when
- creating tar files and path names will be assumed to be encoded in
- UTF-8 when extracting tar files.</p>
+ <title>Unicode Support</title>
+ <p>If <seealso marker="kernel:file#native_name_encoding/0">
+ <c>file:native_name_encoding/0</c></seealso>
+ returns <c>utf8</c>, path names are encoded in UTF-8 when
+ creating tar files, and path names are assumed to be encoded in
+ UTF-8 when extracting tar files.</p>
- <p>If <seealso
- marker="kernel:file#native_name_encoding/0">file:native_name_encoding/0</seealso>
- returns <c>latin1</c>, no translation of path names will be
- done.</p>
+ <p>If <seealso marker="kernel:file#native_name_encoding/0">
+ <c>file:native_name_encoding/0</c></seealso>
+ returns <c>latin1</c>, no translation of path names is done.</p>
</section>
<section>
- <title>OTHER STORAGE MEDIA</title>
- <p>The <c>erl_ftp</c> module normally accesses the tar-file on disk using the <seealso marker="kernel:file">file module</seealso>. When other needs arise, there is a way to define your own low-level Erlang functions to perform the writing and reading on the storage media. See <seealso marker="#init/3">init/3</seealso> for usage.</p>
- <p>An example of this is the sftp support in <seealso marker="ssh:ssh_sftp#open_tar/3">ssh_sftp:open_tar/3</seealso>. That function opens a tar file on a remote machine using an sftp channel.</p>
+ <title>Other Storage Media</title>
+ <p>The <seealso marker="inets:ftp"><c>ftp</c></seealso>
+ module (Inets) normally accesses the tar file on disk using
+ the <seealso marker="kernel:file"><c>file</c></seealso> module.
+ When other needs arise, you can define your own low-level Erlang
+ functions to perform the writing and reading on the storage media;
+ use function <seealso marker="#init/3"><c>init/3</c></seealso>.</p>
+
+ <p>An example of this is the SFTP support in
+ <seealso marker="ssh:ssh_sftp#open_tar/3">
+ <c>ssh_sftp:open_tar/3</c></seealso>. This function opens a tar file
+ on a remote machine using an SFTP channel.</p>
</section>
<section>
- <title>LIMITATIONS</title>
- <p>For maximum compatibility, it is safe to archive files with names
- up to 100 characters in length. Such tar files can generally be
- extracted by any <c>tar</c> program.</p>
- <p>If filenames exceed 100 characters in length, the resulting tar
- file can only be correctly extracted by a POSIX-compatible <c>tar</c>
- program (such as Solaris <c>tar</c>), not by GNU tar.</p>
- <p>File have longer names than 256 bytes cannot be stored at all.</p>
- <p>The filename of the file a symbolic link points is always limited
- to 100 characters.</p>
+ <title>Limitations</title>
+ <list type="bulleted">
+ <item>
+ <p>For maximum compatibility, it is safe to archive files with names
+ up to 100 characters in length. Such tar files can generally be
+ extracted by any <c>tar</c> program.</p>
+ </item>
+ <item>
+ <p>For filenames exceeding 100 characters in length, the resulting tar
+ file can only be correctly extracted by a POSIX-compatible <c>tar</c>
+ program (such as Solaris <c>tar</c> or a modern GNU <c>tar</c>).</p>
+ </item>
+ <item>
+ <p>Files with longer names than 256 bytes cannot be stored.</p>
+ </item>
+ <item>
+ <p>The file name a symbolic link points is always limited
+ to 100 characters.</p>
+ </item>
+ </list>
</section>
+
<funcs>
<func>
<name>add(TarDescriptor, Filename, Options) -> RetValue</name>
- <fsummary>Add a file to an open tar file</fsummary>
+ <fsummary>Add a file to an open tar file.</fsummary>
<type>
<v>TarDescriptor = term()</v>
<v>Filename = filename()</v>
<v>Options = [Option]</v>
<v>Option = dereference|verbose|{chunks,ChunkSize}</v>
- <v>ChunkSize = positive_integer()</v>
+ <v>ChunkSize = positive_integer()</v>
<v>RetValue = ok|{error,{Filename,Reason}}</v>
<v>Reason = term()</v>
</type>
<desc>
- <p>The <marker id="add"></marker><c>add/3</c> function adds
- a file to a tar file that has been opened for writing by
- <seealso marker="#open">open/1</seealso>.</p>
+ <p>Adds a file to a tar file that has been opened for writing by
+ <seealso marker="#open/2"><c>open/1</c></seealso>.</p>
+ <p>Options:</p>
<taglist>
<tag><c>dereference</c></tag>
<item>
- <p>By default, symbolic links will be stored as symbolic links
- in the tar file. Use the <c>dereference</c> option to override the
- default and store the file that the symbolic link points to into
- the tar file.</p>
+ <p>By default, symbolic links are stored as symbolic links
+ in the tar file. To override the default and store the file
+ that the symbolic link points to into the tar file, use
+ option <c>dereference</c>.</p>
</item>
<tag><c>verbose</c></tag>
<item>
- <p>Print an informational message about the file being added.</p>
+ <p>Prints an informational message about the added file.</p>
+ </item>
+ <tag><c>{chunks,ChunkSize}</c></tag>
+ <item>
+ <p>Reads data in parts from the file. This is intended for
+ memory-limited machines that, for example, builds a tar file
+ on a remote machine over SFTP, see
+ <seealso marker="ssh:ssh_sftp#open_tar/3">
+ <c>ssh_sftp:open_tar/3</c></seealso>.</p>
</item>
- <tag><c>{chunks,ChunkSize}</c></tag>
- <item>
- <p>Read data in parts from the file. This is intended for memory-limited
- machines that for example builds a tar file on a remote machine over
- <seealso marker="ssh:ssh_sftp#open_tar/3">sftp</seealso>.</p>
- </item>
</taglist>
</desc>
</func>
+
<func>
- <name>add(TarDescriptor, FilenameOrBin, NameInArchive, Options) -> RetValue </name>
- <fsummary>Add a file to an open tar file</fsummary>
+ <name>add(TarDescriptor, FilenameOrBin, NameInArchive, Options) ->
+ RetValue </name>
+ <fsummary>Add a file to an open tar file.</fsummary>
<type>
<v>TarDescriptor = term()</v>
<v>FilenameOrBin = filename()|binary()</v>
@@ -150,53 +179,55 @@
<v>Reason = term()</v>
</type>
<desc>
- <p>The <c>add/4</c> function adds a file to a tar file
- that has been opened for writing by
- <seealso marker="#open">open/1</seealso>. It accepts the same
- options as <seealso marker="#add">add/3</seealso>.</p>
- <p><c>NameInArchive</c> is the name under which the file will
- be stored in the tar file. That is the name that the file will
- get when it will be extracted from the tar file.</p>
+ <p>Adds a file to a tar file that has been opened for writing by
+ <seealso marker="#open/2"><c>open/2</c></seealso>. This function
+ accepts the same options as
+ <seealso marker="#add/3"><c>add/3</c></seealso>.</p>
+ <p><c>NameInArchive</c> is the name under which the file becomes
+ stored in the tar file. The file gets this name when it is
+ extracted from the tar file.</p>
</desc>
</func>
+
<func>
<name>close(TarDescriptor)</name>
- <fsummary>Close an open tar file</fsummary>
+ <fsummary>Close an open tar file.</fsummary>
<type>
<v>TarDescriptor = term()</v>
</type>
<desc>
- <p>The <marker id="close"></marker><c>close/1</c> function
- closes a tar file
- opened by <seealso marker="#open">open/1</seealso>.</p>
+ <p>Closes a tar file
+ opened by <seealso marker="#open/2"><c>open/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name>create(Name, FileList) ->RetValue </name>
- <fsummary>Create a tar archive</fsummary>
+ <fsummary>Create a tar archive.</fsummary>
<type>
<v>Name = filename()</v>
- <v>FileList = [Filename|{NameInArchive, binary()},{NameInArchive, Filename}]</v>
+ <v>FileList = [Filename|{NameInArchive, binary()},{NameInArchive,
+ Filename}]</v>
<v>Filename = filename()</v>
<v>NameInArchive = filename()</v>
<v>RetValue = ok|{error,{Name,Reason}}</v>
<v>Reason = term()</v>
</type>
<desc>
- <p>The <marker id="create_2"></marker><c>create/2</c> function
- creates a tar file and
- archives the files whose names are given in <c>FileList</c> into it.
- The files may either be read from disk or given as
- binaries.</p>
+ <p>Creates a tar file and archives the files whose names are specified
+ in <c>FileList</c> into it. The files can either be read from disk
+ or be specified as binaries.</p>
</desc>
</func>
+
<func>
<name>create(Name, FileList, OptionList)</name>
- <fsummary>Create a tar archive with options</fsummary>
+ <fsummary>Create a tar archive with options.</fsummary>
<type>
<v>Name = filename()</v>
- <v>FileList = [Filename|{NameInArchive, binary()},{NameInArchive, Filename}]</v>
- <v>Filename = filename()</v>
+ <v>FileList = [Filename|{NameInArchive, binary()},{NameInArchive,
+ Filename}]</v>
+ <v>Filename = filename()</v>
<v>NameInArchive = filename()</v>
<v>OptionList = [Option]</v>
<v>Option = compressed|cooked|dereference|verbose</v>
@@ -204,68 +235,66 @@
<v>Reason = term()</v>
</type>
<desc>
- <p>The <marker id="create_3"></marker><c>create/3</c> function
- creates a tar file and archives the files whose names are given
- in <c>FileList</c> into it. The files may either be read from
- disk or given as binaries.</p>
- <p>The options in <c>OptionList</c> modify the defaults as follows.
- </p>
+ <p>Creates a tar file and archives the files whose names are specified
+ in <c>FileList</c> into it. The files can either be read from disk
+ or be specified as binaries.</p>
+ <p>The options in <c>OptionList</c> modify the defaults as follows:</p>
<taglist>
<tag><c>compressed</c></tag>
<item>
- <p>The entire tar file will be compressed, as if it has
+ <p>The entire tar file is compressed, as if it has
been run through the <c>gzip</c> program. To abide to the
- convention that a compressed tar file should end in "<c>.tar.gz</c>" or
- "<c>.tgz</c>", you'll need to add the appropriate extension yourself.</p>
+ convention that a compressed tar file is to end in
+ "<c>.tar.gz</c>" or "<c>.tgz</c>", add the appropriate
+ extension.</p>
</item>
<tag><c>cooked</c></tag>
<item>
- <p>By default, the <c>open/2</c> function will open the tar file
- in <c>raw</c> mode, which is faster but does not allow a remote (erlang)
- file server to be used. Adding <c>cooked</c> to the mode list will
- override the default and open the tar file without the <c>raw</c>
- option.</p>
+ <p>By default, function <c>open/2</c> opens the tar file in
+ <c>raw</c> mode, which is faster but does not allow a remote
+ (Erlang) file server to be used. Adding <c>cooked</c> to the
+ mode list overrides the default and opens the tar file without
+ option <c>raw</c>.</p>
</item>
<tag><c>dereference</c></tag>
<item>
- <p>By default, symbolic links will be stored as symbolic links
- in the tar file. Use the <c>dereference</c> option to override the
- default and store the file that the symbolic link points to into
- the tar file.</p>
+ <p>By default, symbolic links are stored as symbolic links in
+ the tar file. To override the default and store the file that
+ the symbolic link points to into the tar file, use
+ option <c>dereference</c>.</p>
</item>
<tag><c>verbose</c></tag>
<item>
- <p>Print an informational message about each file being added.</p>
+ <p>Prints an informational message about each added file.</p>
</item>
</taglist>
</desc>
</func>
+
<func>
<name>extract(Name) -> RetValue</name>
- <fsummary>Extract all files from a tar file</fsummary>
+ <fsummary>Extract all files from a tar file.</fsummary>
<type>
<v>Name = filename()</v>
<v>RetValue = ok|{error,{Name,Reason}}</v>
<v>Reason = term()</v>
</type>
<desc>
- <p>The <marker id="extract_1"></marker><c>extract/1</c> function
- extracts all files from a tar archive.</p>
- <p>If the <c>Name</c> argument is given as "<c>{binary,Binary}</c>",
- the contents of the binary is assumed to be a tar archive.
- </p>
- <p>If the <c>Name</c> argument is given as "<c>{file,Fd}</c>",
- <c>Fd</c> is assumed to be a file descriptor returned from
- the <c>file:open/2</c> function.
- </p>
- <p>Otherwise, <c>Name</c> should be a filename.</p>
+ <p>Extracts all files from a tar archive.</p>
+ <p>If argument <c>Name</c> is specified as <c>{binary,Binary}</c>,
+ the contents of the binary is assumed to be a tar archive.</p>
+ <p>If argument <c>Name</c> is specified as <c>{file,Fd}</c>,
+ <c>Fd</c> is assumed to be a file descriptor returned from function
+ <c>file:open/2</c>.</p>
+ <p>Otherwise, <c>Name</c> is to be a filename.</p>
</desc>
</func>
+
<func>
<name>extract(Name, OptionList)</name>
- <fsummary>Extract files from a tar file</fsummary>
+ <fsummary>Extract files from a tar file.</fsummary>
<type>
- <v>Name = filename() | {binary,Binary} | {file,Fd} </v>
+ <v>Name = filename() | {binary,Binary} | {file,Fd}</v>
<v>Binary = binary()</v>
<v>Fd = file_descriptor()</v>
<v>OptionList = [Option]</v>
@@ -278,272 +307,263 @@
<v>Reason = term()</v>
</type>
<desc>
- <p>The <marker id="extract_2"></marker><c>extract/2</c> function
- extracts files from a tar archive.</p>
- <p>If the <c>Name</c> argument is given as "<c>{binary,Binary}</c>",
- the contents of the binary is assumed to be a tar archive.
- </p>
- <p>If the <c>Name</c> argument is given as "<c>{file,Fd}</c>",
- <c>Fd</c> is assumed to be a file descriptor returned from
- the <c>file:open/2</c> function.
- </p>
- <p>Otherwise, <c>Name</c> should be a filename.
- </p>
+ <p>Extracts files from a tar archive.</p>
+ <p>If argument <c>Name</c> is specified as <c>{binary,Binary}</c>,
+ the contents of the binary is assumed to be a tar archive.</p>
+ <p>If argument <c>Name</c> is specified as <c>{file,Fd}</c>,
+ <c>Fd</c> is assumed to be a file descriptor returned from function
+ <c>file:open/2</c>.</p>
+ <p>Otherwise, <c>Name</c> is to be a filename.</p>
<p>The following options modify the defaults for the extraction as
- follows.</p>
+ follows:</p>
<taglist>
<tag><c>{cwd,Cwd}</c></tag>
<item>
- <p>Files with relative filenames will by default be extracted
- to the current working directory.
- Given the <c>{cwd,Cwd}</c> option, the <c>extract/2</c> function
- will extract into the directory <c>Cwd</c> instead of to the current
- working directory.</p>
+ <p>Files with relative filenames are by default extracted
+ to the current working directory. With this option, files are
+ instead extracted into directory <c>Cwd</c>.</p>
</item>
<tag><c>{files,FileList}</c></tag>
<item>
- <p>By default, all files will be extracted from the tar file.
- Given the <c>{files,Files}</c> option, the <c>extract/2</c> function
- will only extract the files whose names are included in <c>FileList</c>.</p>
+ <p>By default, all files are extracted from the tar file. With
+ this option, only those files are extracted whose names are
+ included in <c>FileList</c>.</p>
</item>
<tag><c>compressed</c></tag>
<item>
- <p>Given the <c>compressed</c> option, the <c>extract/2</c>
- function will uncompress the file while extracting
- If the tar file is not actually compressed, the <c>compressed</c>
- will effectively be ignored.</p>
+ <p>With this option, the file is uncompressed while extracting.
+ If the tar file is not compressed, this option is ignored.</p>
</item>
<tag><c>cooked</c></tag>
<item>
- <p>By default, the <c>open/2</c> function will open the tar file
- in <c>raw</c> mode, which is faster but does not allow a remote (erlang)
- file server to be used. Adding <c>cooked</c> to the mode list will
- override the default and open the tar file without the <c>raw</c>
- option.</p>
+ <p>By default, function <c>open/2</c> function opens the tar file
+ in <c>raw</c> mode, which is faster but does not allow a remote
+ (Erlang) file server to be used. Adding <c>cooked</c> to the mode
+ list overrides the default and opens the tar file without option
+ <c>raw</c>.</p>
</item>
<tag><c>memory</c></tag>
<item>
- <p>Instead of extracting to a directory, the memory option will
- give the result as a list of tuples {Filename, Binary}, where
- Binary is a binary containing the extracted data of the file named
- Filename in the tar file.</p>
+ <p>Instead of extracting to a directory, this option gives the
+ result as a list of tuples <c>{Filename, Binary}</c>, where
+ <c>Binary</c> is a binary containing the extracted data of the
+ file named <c>Filename</c> in the tar file.</p>
</item>
<tag><c>keep_old_files</c></tag>
<item>
- <p>By default, all existing files with the same name as file in
- the tar file will be overwritten
- Given the <c>keep_old_files</c> option, the <c>extract/2</c> function
- will not overwrite any existing files.</p>
+ <p>By default, all existing files with the same name as files in
+ the tar file are overwritten. With this option, existing
+ files are not overwriten.</p>
</item>
<tag><c>verbose</c></tag>
<item>
- <p>Print an informational message as each file is being extracted.</p>
+ <p>Prints an informational message for each extracted file.</p>
</item>
</taglist>
</desc>
</func>
+
<func>
<name>format_error(Reason) -> string()</name>
- <fsummary>Convert error term to a readable string</fsummary>
+ <fsummary>Convert error term to a readable string.</fsummary>
<type>
<v>Reason = term()</v>
</type>
<desc>
- <p>The <marker id="format_error_1"></marker><c>format_error/1</c>
- function converts
- an error reason term to a human-readable error message string.</p>
+ <p>Cconverts an error reason term to a human-readable error message
+ string.</p>
</desc>
</func>
+
<func>
- <name>open(Name, OpenModeList) -> RetValue</name>
- <fsummary>Open a tar file for writing.</fsummary>
+ <name>init(UserPrivate, AccessMode, Fun) ->
+ {ok,TarDescriptor} | {error,Reason}</name>
+ <fsummary>Create a <c>TarDescriptor</c> used in subsequent tar operations
+ when defining own low-level storage access functions.</fsummary>
<type>
- <v>Name = filename()</v>
- <v>OpenModeList = [OpenMode]</v>
- <v>Mode = write|compressed|cooked</v>
- <v>RetValue = {ok,TarDescriptor}|{error,{Name,Reason}}</v>
- <v>TarDescriptor = term()</v>
+ <v>UserPrivate = term()</v>
+ <v>AccessMode = [write] | [read]</v>
+ <v>Fun when AccessMode is [write] =
+ fun(write, {UserPrivate,DataToWrite})->...;
+ (position,{UserPrivate,Position})->...;
+ (close, UserPrivate)->... end</v>
+ <v>Fun when AccessMode is [read] =
+ fun(read2, {UserPrivate,Size})->...;
+ (position,{UserPrivate,Position})->...;
+ (close, UserPrivate)->... end</v>
+ <v>TarDescriptor = term()</v>
<v>Reason = term()</v>
</type>
<desc>
- <p>The <marker id="open"></marker><c>open/2</c> function creates
- a tar file for writing.
- (Any existing file with the same name will be truncated.)</p>
- <p>By convention, the name of a tar file should end in "<c>.tar</c>".
- To abide to the convention, you'll need to add "<c>.tar</c>" yourself
- to the name.</p>
- <p>Except for the <c>write</c> atom the following atoms
- may be added to <c>OpenModeList</c>:</p>
+ <p>The <c>Fun</c> is the definition of what to do when the different
+ storage operations functions are to be called from the higher tar
+ handling functions (such as <c>add/3</c>, <c>add/4</c>, and
+ <c>close/1</c>).</p>
+ <p>The <c>Fun</c> is called when the tar function wants to do a
+ low-level operation, like writing a block to a file. The <c>Fun</c>
+ is called as <c>Fun(Op, {UserPrivate,Parameters...})</c>, where
+ <c>Op</c> is the operation name, <c>UserPrivate</c> is the term
+ passed as the first argument to <c>init/1</c> and
+ <c>Parameters...</c> are the data added by the tar function to be
+ passed down to the storage handling function.</p>
+ <p>Parameter <c>UserPrivate</c> is typically the result of opening a
+ low-level structure like a file descriptor or an SFTP channel id.
+ The different <c>Fun</c> clauses operate on that very term.</p>
+ <p>The following are the fun clauses parameter lists:</p>
<taglist>
- <tag><c>compressed</c></tag>
+ <tag><c>(write, {UserPrivate,DataToWrite})</c></tag>
<item>
- <p>The entire tar file will be compressed, as if it has
- been run through the <c>gzip</c> program. To abide to the
- convention that a compressed tar file should end in "<c>.tar.gz</c>" or
- "<c>.tgz</c>", you'll need to add the appropriate extension yourself.</p>
+ <p>Writes term <c>DataToWrite</c> using <c>UserPrivate</c>.</p>
</item>
- <tag><c>cooked</c></tag>
+ <tag><c>(close, UserPrivate)</c></tag>
+ <item>
+ <p>Closes the access.</p>
+ </item>
+ <tag><c>(read2, {UserPrivate,Size})</c></tag>
<item>
- <p>By default, the <c>open/2</c> function will open the tar file
- in <c>raw</c> mode, which is faster but does not allow a remote (erlang)
- file server to be used. Adding <c>cooked</c> to the mode list will
- override the default and open the tar file without the <c>raw</c>
- option.</p>
+ <p>Reads using <c>UserPrivate</c> but only <c>Size</c> bytes.
+ Notice that there is only an arity-2 read function, not an arity-1
+ function.</p>
+ </item>
+ <tag><c>(position,{UserPrivate,Position})</c></tag>
+ <item>
+ <p>Sets the position of <c>UserPrivate</c> as defined for files in
+ <seealso marker="kernel:file#position-2">
+ <c>file:position/2</c></seealso></p>
</item>
</taglist>
- <p>Use the <seealso marker="#add">add/3,4</seealso> functions
- to add one file at the time into an opened tar file. When you are
- finished adding files, use the <seealso marker="#close">close</seealso>
- function to close the tar file.</p>
+ <p><em>Example:</em></p>
+ <p>The following is a complete <c>Fun</c> parameter for reading and
+ writing on files using the
+ <seealso marker="kernel:file"><c>file</c></seealso> module:</p>
+ <code type="none">
+ExampleFun =
+ fun(write, {Fd,Data}) -> file:write(Fd, Data);
+ (position, {Fd,Pos}) -> file:position(Fd, Pos);
+ (read2, {Fd,Size}) -> file:read(Fd, Size);
+ (close, Fd) -> file:close(Fd)
+ end</code>
+ <p>Here <c>Fd</c> was specified to function <c>init/3</c> as:</p>
+ <code>
+{ok,Fd} = file:open(Name, ...).
+{ok,TarDesc} = erl_tar:init(Fd, [write], ExampleFun),</code>
+ <p><c>TarDesc</c> is then used:</p>
+ <code>
+erl_tar:add(TarDesc, SomeValueIwantToAdd, FileNameInTarFile),
+...,
+erl_tar:close(TarDesc)</code>
+ <p>When the <c>erl_tar</c> core wants to, for example, write a piece
+ of <c>Data</c>, it would call
+ <c>ExampleFun(write, {UserPrivate,Data})</c>.</p>
+ <note>
+ <p>This example with the <c>file</c> module operations is
+ not necessary to use directly, as that is what function
+ <seealso marker="#open/2"><c>open/2</c></seealso> in principle
+ does.</p>
+ </note>
<warning>
- <p>The <c>TarDescriptor</c> term is not a file descriptor.
- You should not rely on the specific contents of the <c>TarDescriptor</c>
- term, as it may change in future versions as more features are added
- to the <c>erl_tar</c> module.</p>
+ <p>The <c>TarDescriptor</c> term is not a file descriptor. You are
+ advised not to rely on the specific contents of this term, as it
+ can change in future Erlang/OTP releases when more features are
+ added to this module.</p>
</warning>
</desc>
</func>
<func>
- <name>init(UserPrivate, AccessMode, Fun) -> {ok,TarDescriptor} | {error,Reason}
-</name>
- <fsummary>Creates a TarDescriptor used in subsequent tar operations when
- defining own low-level storage access functions
- </fsummary>
+ <name>open(Name, OpenModeList) -> RetValue</name>
+ <fsummary>Open a tar file for writing.</fsummary>
<type>
- <v>UserPrivate = term()</v>
- <v>AccessMode = [write] | [read]</v>
- <v>Fun when AccessMode is [write] = fun(write, {UserPrivate,DataToWrite})->...;
- (position,{UserPrivate,Position})->...;
- (close, UserPrivate)->...
- end
- </v>
- <v>Fun when AccessMode is [read] = fun(read2, {UserPrivate,Size})->...;
- (position,{UserPrivate,Position})->...;
- (close, UserPrivate)->...
- end
- </v>
- <v>TarDescriptor = term()</v>
- <v>Reason = term()</v>
+ <v>Name = filename()</v>
+ <v>OpenModeList = [OpenMode]</v>
+ <v>Mode = write|compressed|cooked</v>
+ <v>RetValue = {ok,TarDescriptor}|{error,{Name,Reason}}</v>
+ <v>TarDescriptor = term()</v>
+ <v>Reason = term()</v>
</type>
<desc>
- <p>The <c>Fun</c> is the definition of what to do when the different
- storage operations functions are to be called from the higher tar
- handling functions (<c>add/3</c>, <c>add/4</c>, <c>close/1</c>...).
- </p>
- <p>The <c>Fun</c> will be called when the tar function wants to do
- a low-level operation, like writing a block to a file. The Fun is called
- as <c>Fun(Op,{UserPrivate,Parameters...})</c> where <c>Op</c> is the operation name,
- <c>UserPrivate</c> is the term passed as the first argument to <c>init/1</c> and
- <c>Parameters...</c> are the data added by the tar function to be passed down to
- the storage handling function.
- </p>
- <p>The parameter <c>UserPrivate</c> is typically the result of opening a low level
- structure like a file descriptor, a sftp channel id or such. The different <c>Fun</c>
- clauses operates on that very term.
- </p>
- <p>The fun clauses parameter lists are:</p>
- <taglist>
- <tag><c>(write, {UserPrivate,DataToWrite})</c></tag>
- <item>Write the term <c>DataToWrite</c> using <c>UserPrivate</c></item>
- <tag><c>(close, UserPrivate)</c></tag>
- <item>Close the access.</item>
- <tag><c>(read2, {UserPrivate,Size})</c></tag>
- <item>Read using <c>UserPrivate</c> but only <c>Size</c> bytes. Note that there is
- only an arity-2 read function, not an arity-1
- </item>
- <tag><c> (position,{UserPrivate,Position})</c></tag>
- <item>Sets the position of <c>UserPrivate</c> as defined for files in <seealso marker="kernel:file#position-2">file:position/2</seealso></item>
- <tag><c></c></tag>
- <item></item>
- </taglist>
- <p>A complete <c>Fun</c> parameter for reading and writing on files using the
- <seealso marker="kernel:file">file module</seealso> could be:
- </p>
- <code type="none">
- ExampleFun =
- fun(write, {Fd,Data}) -> file:write(Fd, Data);
- (position, {Fd,Pos}) -> file:position(Fd, Pos);
- (read2, {Fd,Size}) -> file:read(Fd,Size);
- (close, Fd) -> file:close(Fd)
- end
- </code>
- <p>where <c>Fd</c> was given to the <c>init/3</c> function as:</p>
- <code>
- {ok,Fd} = file:open(Name,...).
- {ok,TarDesc} = erl_tar:init(Fd, [write], ExampleFun),
- </code>
- <p>The <c>TarDesc</c> is then used:</p>
- <code>
- erl_tar:add(TarDesc, SomeValueIwantToAdd, FileNameInTarFile),
- ....,
- erl_tar:close(TarDesc)
- </code>
- <p>When the erl_tar core wants to e.g. write a piece of Data, it would call
- <c>ExampleFun(write,{UserPrivate,Data})</c>.
- </p>
- <note>
- <p>The example above with <c>file</c> module operations is not necessary to
- use directly since that is what the <seealso marker="#open">open</seealso> function
- in principle does.
- </p>
- </note>
+ <p>Creates a tar file for writing (any existing file with the same
+ name is truncated).</p>
+ <p>By convention, the name of a tar file is to end in "<c>.tar</c>".
+ To abide to the convention, add "<c>.tar</c>" to the name.</p>
+ <p>Except for the <c>write</c> atom, the following atoms
+ can be added to <c>OpenModeList</c>:</p>
+ <taglist>
+ <tag><c>compressed</c></tag>
+ <item>
+ <p>The entire tar file is compressed, as if it has been run
+ through the <c>gzip</c> program. To abide to the convention
+ that a compressed tar file is to end in "<c>.tar.gz</c>" or
+ "<c>.tgz</c>", add the appropriate extension.</p>
+ </item>
+ <tag><c>cooked</c></tag>
+ <item>
+ <p>By default, the tar file is opened in <c>raw</c> mode, which is
+ faster but does not allow a remote (Erlang) file server to be
+ used. Adding <c>cooked</c> to the mode list overrides the
+ default and opens the tar file without option <c>raw</c>.</p>
+ </item>
+ </taglist>
+ <p>To add one file at the time into an opened tar file, use function
+ <seealso marker="#add/3"><c>add/3,4</c></seealso>. When you are
+ finished adding files, use function <seealso marker="#close/1">
+ <c>close/1</c></seealso> to close the tar file.</p>
<warning>
- <p>The <c>TarDescriptor</c> term is not a file descriptor.
- You should not rely on the specific contents of the <c>TarDescriptor</c>
- term, as it may change in future versions as more features are added
- to the <c>erl_tar</c> module.</p>
+ <p>The <c>TarDescriptor</c> term is not a file descriptor. You are
+ advised not to rely on the specific contents of this term, as it
+ can change in future Erlang/OTP releases when more features are
+ added to this module..</p>
</warning>
</desc>
</func>
<func>
<name>table(Name) -> RetValue</name>
- <fsummary>Retrieve the name of all files in a tar file</fsummary>
+ <fsummary>Retrieve the name of all files in a tar file.</fsummary>
<type>
<v>Name = filename()</v>
<v>RetValue = {ok,[string()]}|{error,{Name,Reason}}</v>
<v>Reason = term()</v>
</type>
<desc>
- <p>The <marker id="table_1"></marker><c>table/1</c> function
- retrieves the names of all files in the tar file <c>Name</c>.</p>
+ <p>Retrieves the names of all files in the tar file <c>Name</c>.</p>
</desc>
</func>
+
<func>
<name>table(Name, Options)</name>
- <fsummary>Retrieve name and information of all files in a tar file</fsummary>
+ <fsummary>Retrieve name and information of all files in a tar file.
+ </fsummary>
<type>
<v>Name = filename()</v>
</type>
<desc>
- <p>The <marker id="table_2"></marker><c>table/2</c> function
- retrieves the names of all files in the tar file <c>Name</c>.</p>
+ <p>Retrieves the names of all files in the tar file <c>Name</c>.</p>
</desc>
</func>
+
<func>
<name>t(Name)</name>
- <fsummary>Print the name of each file in a tar file</fsummary>
+ <fsummary>Print the name of each file in a tar file.</fsummary>
<type>
<v>Name = filename()</v>
</type>
<desc>
- <p>The <marker id="t_1"></marker><c>t/1</c> function prints the names
- of all files in the tar file <c>Name</c> to the Erlang shell.
- (Similar to "<c>tar&nbsp;t</c>".)</p>
+ <p>Prints the names of all files in the tar file <c>Name</c> to the
+ Erlang shell (similar to "<c>tar&nbsp;t</c>").</p>
</desc>
</func>
+
<func>
<name>tt(Name)</name>
- <fsummary>Print name and information for each file in a tar file</fsummary>
+ <fsummary>Print name and information for each file in a tar file.
+ </fsummary>
<type>
<v>Name = filename()</v>
</type>
<desc>
- <p>The <marker id="tt_1"></marker><c>tt/1</c> function prints
- names and
- information about all files in the tar file <c>Name</c> to
- the Erlang shell. (Similar to "<c>tar&nbsp;tv</c>".)</p>
+ <p>Prints names and information about all files in the tar file
+ <c>Name</c> to the Erlang shell (similar to "<c>tar&nbsp;tv</c>").</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/ets.xml b/lib/stdlib/doc/src/ets.xml
index 2d69c201bc..5f5d2b7f36 100644
--- a/lib/stdlib/doc/src/ets.xml
+++ b/lib/stdlib/doc/src/ets.xml
@@ -29,102 +29,131 @@
<rev></rev>
</header>
<module>ets</module>
- <modulesummary>Built-In Term Storage</modulesummary>
+ <modulesummary>Built-in term storage.</modulesummary>
<description>
<p>This module is an interface to the Erlang built-in term storage
BIFs. These provide the ability to store very large quantities of
data in an Erlang runtime system, and to have constant access
time to the data. (In the case of <c>ordered_set</c>, see below,
access time is proportional to the logarithm of the number of
- objects stored).</p>
+ stored objects.)</p>
+
<p>Data is organized as a set of dynamic tables, which can store
tuples. Each table is created by a process. When the process
terminates, the table is automatically destroyed. Every table has
access rights set at creation.</p>
+
<p>Tables are divided into four different types, <c>set</c>,
- <c>ordered_set</c>, <c>bag</c> and <c>duplicate_bag</c>.
+ <c>ordered_set</c>, <c>bag</c>, and <c>duplicate_bag</c>.
A <c>set</c> or <c>ordered_set</c> table can only have one object
- associated with each key. A <c>bag</c> or <c>duplicate_bag</c> can
+ associated with each key. A <c>bag</c> or <c>duplicate_bag</c> table can
have many objects associated with each key.</p>
+
<p>The number of tables stored at one Erlang node is limited.
- The current default limit is approximately 1400 tables. The upper
- limit can be increased by setting the environment variable
+ The current default limit is about 1400 tables. The upper
+ limit can be increased by setting environment variable
<c>ERL_MAX_ETS_TABLES</c> before starting the Erlang runtime
- system (i.e. with the <c>-env</c> option to
- <c>erl</c>/<c>werl</c>). The actual limit may be slightly higher
+ system (that is, with option <c>-env</c> to
+ <c>erl</c>/<c>werl</c>). The actual limit can be slightly higher
than the one specified, but never lower.</p>
- <p>Note that there is no automatic garbage collection for tables.
+
+ <p>Notice that there is no automatic garbage collection for tables.
Even if there are no references to a table from any process, it
- will not automatically be destroyed unless the owner process
- terminates. It can be destroyed explicitly by using
- <c>delete/1</c>. The default owner is the process that created the
- table. Table ownership can be transferred at process termination
- by using the <seealso marker="#heir">heir</seealso> option or explicitly
- by calling <seealso marker="#give_away/3">give_away/3</seealso>.</p>
+ is not automatically destroyed unless the owner process
+ terminates. To destroy a table explicitly, use function
+ <seealso marker="#delete/1"><c>delete/1</c></seealso>.
+ The default owner is the process that created the
+ table. To transfer table ownership at process termination, use
+ option <seealso marker="#heir"><c>heir</c></seealso> or call
+ <seealso marker="#give_away/3"><c>give_away/3</c></seealso>.</p>
+
<p>Some implementation details:</p>
+
<list type="bulleted">
- <item>In the current implementation, every object insert and
- look-up operation results in a copy of the object.</item>
- <item><c>'$end_of_table'</c> should not be used as a key since
- this atom is used to mark the end of the table when using
- <c>first</c>/<c>next</c>.</item>
+ <item><p>In the current implementation, every object insert and
+ look-up operation results in a copy of the object.</p></item>
+ <item><p><c>'$end_of_table'</c> is not to be used as a key, as
+ this atom is used to mark the end of the table when using functions
+ <seealso marker="#first/1"><c>first/1</c></seealso> and
+ <seealso marker="#next/2"><c>next/2</c></seealso>.</p></item>
</list>
- <p>Also worth noting is the subtle difference between
+
+ <p>Notice the subtle difference between
<em>matching</em> and <em>comparing equal</em>, which is
- demonstrated by the different table types <c>set</c> and
- <c>ordered_set</c>. Two Erlang terms <c>match</c> if they are of
- the same type and have the same value, so that <c>1</c> matches
- <c>1</c>, but not <c>1.0</c> (as <c>1.0</c> is a <c>float()</c>
- and not an <c>integer()</c>). Two Erlang terms <em>compare equal</em> if they either are of the same type and value, or if
- both are numeric types and extend to the same value, so that
- <c>1</c> compares equal to both <c>1</c> and <c>1.0</c>. The
- <c>ordered_set</c> works on the <em>Erlang term order</em> and
- there is no defined order between an <c>integer()</c> and a
- <c>float()</c> that extends to the same value, hence the key
- <c>1</c> and the key <c>1.0</c> are regarded as equal in an
- <c>ordered_set</c> table.</p>
+ demonstrated by table types <c>set</c> and <c>ordered_set</c>:</p>
+
+ <list type="bulleted">
+ <item>
+ <p>Two Erlang terms <c>match</c> if they are of
+ the same type and have the same value, so that <c>1</c> matches
+ <c>1</c>, but not <c>1.0</c> (as <c>1.0</c> is a <c>float()</c>
+ and not an <c>integer()</c>).</p>
+ </item>
+ <item>
+ <p>Two Erlang terms <em>compare equal</em>
+ if they either are of the same type and value, or if
+ both are numeric types and extend to the same value, so that
+ <c>1</c> compares equal to both <c>1</c> and <c>1.0</c>.</p>
+ </item>
+ <item>
+ <p>The <c>ordered_set</c> works on the <em>Erlang term order</em> and
+ no defined order exists between an <c>integer()</c> and a
+ <c>float()</c> that extends to the same value. Hence the key
+ <c>1</c> and the key <c>1.0</c> are regarded as equal in an
+ <c>ordered_set</c> table.</p>
+ </item>
+ </list>
</description>
+
<section>
<title>Failure</title>
- <p>In general, the functions below will exit with reason
- <c>badarg</c> if any argument is of the wrong format, if the
- table identifier is invalid or if the operation is denied due to
+ <p>The functions in this module exits with reason
+ <c>badarg</c> if any argument has the wrong format, if the
+ table identifier is invalid, or if the operation is denied because of
table access rights (<seealso marker="#protected">protected</seealso>
or <seealso marker="#private">private</seealso>).</p>
</section>
+
<section><marker id="concurrency"></marker>
<title>Concurrency</title>
<p>This module provides some limited support for concurrent access.
All updates to single objects are guaranteed to be both <em>atomic</em>
- and <em>isolated</em>. This means that an updating operation towards
- a single object will either succeed or fail completely without any
- effect at all (atomicy).
- Nor can any intermediate results of the update be seen by other
- processes (isolation). Some functions that update several objects
- state that they even guarantee atomicy and isolation for the entire
+ and <em>isolated</em>. This means that an updating operation to
+ a single object either succeeds or fails completely without any
+ effect (atomicity) and that
+ no intermediate results of the update can be seen by other
+ processes (isolation). Some functions that update many objects
+ state that they even guarantee atomicity and isolation for the entire
operation. In database terms the isolation level can be seen as
- "serializable", as if all isolated operations were carried out serially,
+ "serializable", as if all isolated operations are carried out serially,
one after the other in a strict order.</p>
- <p>No other support is available within ETS that would guarantee
- consistency between objects. However, the <c>safe_fixtable/2</c>
- function can be used to guarantee that a sequence of
- <c>first/1</c> and <c>next/2</c> calls will traverse the table
- without errors and that each existing object in the table is visited
- exactly once, even if another process (or the same process)
+
+ <p>No other support is available within this module that would guarantee
+ consistency between objects. However, function
+ <seealso marker="#safe_fixtable/2"><c>safe_fixtable/2</c></seealso>
+ can be used to guarantee that a sequence of
+ <seealso marker="#first/1"><c>first/1</c></seealso> and
+ <seealso marker="#next/2"><c>next/2</c></seealso> calls traverse the
+ table without errors and that each existing object in the table is
+ visited exactly once, even if another (or the same) process
simultaneously deletes or inserts objects into the table.
- Nothing more is guaranteed; in particular objects that are inserted
- or deleted during such a traversal may be visited once or not at all.
- Functions that internally traverse over a table, like <c>select</c>
- and <c>match</c>, will give the same guarantee as <c>safe_fixtable</c>.</p>
+ Nothing else is guaranteed; in particular objects that are inserted
+ or deleted during such a traversal can be visited once or not at all.
+ Functions that internally traverse over a table, like
+ <seealso marker="#select/1"><c>select</c></seealso> and
+ <seealso marker="#match/1"><c>match</c></seealso>,
+ give the same guarantee as
+ <seealso marker="#safe_fixtable/2"><c>safe_fixtable</c></seealso>.</p>
</section>
+
<section>
<marker id="match_spec"></marker>
<title>Match Specifications</title>
- <p>Some of the functions uses a <em>match specification</em>,
- match_spec. A brief explanation is given in
- <seealso marker="#select/2">select/2</seealso>. For a detailed
- description, see the chapter "Match specifications in Erlang" in
- <em>ERTS User's Guide</em>.</p>
+ <p>Some of the functions use a <em>match specification</em>,
+ <c>match_spec</c>. For a brief explanation, see
+ <seealso marker="#select/2"><c>select/2</c></seealso>. For a detailed
+ description, see section <seealso marker="erts:match_spec">
+ Match Specifications in Erlang</seealso> in ERTS User's Guide.</p>
</section>
<datatypes>
@@ -134,11 +163,9 @@
<datatype>
<name>continuation()</name>
<desc>
- <p><marker id="type-continuation"/>
- Opaque continuation used by <seealso marker="#select/1">
+ <p>Opaque continuation used by <seealso marker="#select/1">
<c>select/1,3</c></seealso>, <seealso marker="#select_reverse/1">
- <c>select_reverse/1,3</c></seealso>, <seealso
- marker="#match/1">
+ <c>select_reverse/1,3</c></seealso>, <seealso marker="#match/1">
<c>match/1,3</c></seealso>, and <seealso marker="#match_object/1">
<c>match_object/1,3</c></seealso>.</p>
</desc>
@@ -159,26 +186,30 @@
</datatype>
<datatype>
<name name="tid"/>
- <desc><p>A table identifier, as returned by new/2.</p></desc>
+ <desc><p>A table identifier, as returned by
+ <seealso marker="#new/2"><c>new/2</c></seealso>.</p></desc>
</datatype>
<datatype>
<name name="type"/>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="all" arity="0"/>
<fsummary>Return a list of all ETS tables.</fsummary>
<desc>
<p>Returns a list of all tables at the node. Named tables are
- given by their names, unnamed tables are given by their
+ specified by their names, unnamed tables are specified by their
table identifiers.</p>
- <p>There is no guarantee of consistency in the returned list. Tables created
- or deleted by other processes "during" the ets:all() call may or may
- not be included in the list. Only tables created/deleted <em>before</em>
- ets:all() is called are guaranteed to be included/excluded.</p>
+ <p>There is no guarantee of consistency in the returned list. Tables
+ created or deleted by other processes "during" the <c>ets:all()</c>
+ call either are or are not included in the list. Only tables
+ created/deleted <em>before</em> <c>ets:all()</c> is called are
+ guaranteed to be included/excluded.</p>
</desc>
</func>
+
<func>
<name name="delete" arity="1"/>
<fsummary>Delete an entire ETS table.</fsummary>
@@ -186,175 +217,187 @@
<p>Deletes the entire table <c><anno>Tab</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="delete" arity="2"/>
- <fsummary>Delete all objects with a given key from an ETS table.</fsummary>
+ <fsummary>Delete all objects with a specified key from an ETS
+ table.</fsummary>
<desc>
- <p>Deletes all objects with the key <c><anno>Key</anno></c> from the table
+ <p>Deletes all objects with key <c><anno>Key</anno></c> from table
<c><anno>Tab</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="delete_all_objects" arity="1"/>
<fsummary>Delete all objects in an ETS table.</fsummary>
<desc>
<p>Delete all objects in the ETS table <c><anno>Tab</anno></c>.
- The operation is guaranteed to be
- <seealso marker="#concurrency">atomic and isolated</seealso>.</p>
+ The operation is guaranteed to be
+ <seealso marker="#concurrency">atomic and isolated</seealso>.</p>
</desc>
</func>
+
<func>
<name name="delete_object" arity="2"/>
<fsummary>Deletes a specific from an ETS table.</fsummary>
<desc>
- <p>Delete the exact object <c><anno>Object</anno></c> from the ETS table,
+ <p>Delete the exact object <c><anno>Object</anno></c> from the
+ ETS table,
leaving objects with the same key but other differences
- (useful for type <c>bag</c>). In a <c>duplicate_bag</c>, all
- instances of the object will be deleted.</p>
+ (useful for type <c>bag</c>). In a <c>duplicate_bag</c> table, all
+ instances of the object are deleted.</p>
</desc>
</func>
+
<func>
<name name="file2tab" arity="1"/>
<fsummary>Read an ETS table from a file.</fsummary>
<desc>
- <p>Reads a file produced by <seealso
- marker="#tab2file/2">tab2file/2</seealso> or
- <seealso marker="#tab2file/3">tab2file/3</seealso> and creates the
- corresponding table <c><anno>Tab</anno></c>.</p>
- <p>Equivalent to <c>file2tab(<anno>Filename</anno>, [])</c>.</p>
+ <p>Reads a file produced by <seealso marker="#tab2file/2">
+ <c>tab2file/2</c></seealso> or
+ <seealso marker="#tab2file/3"><c>tab2file/3</c></seealso> and
+ creates the corresponding table <c><anno>Tab</anno></c>.</p>
+ <p>Equivalent to <c>file2tab(<anno>Filename</anno>, [])</c>.</p>
</desc>
</func>
+
<func>
<name name="file2tab" arity="2"/>
<fsummary>Read an ETS table from a file.</fsummary>
<desc>
- <p>Reads a file produced by <seealso
- marker="#tab2file/2">tab2file/2</seealso> or
- <seealso marker="#tab2file/3">tab2file/3</seealso> and creates the
+ <p>Reads a file produced by <seealso marker="#tab2file/2">
+ <c>tab2file/2</c></seealso> or <seealso marker="#tab2file/3">
+ <c>tab2file/3</c></seealso> and creates the
corresponding table <c><anno>Tab</anno></c>.</p>
- <p>The currently only supported option is <c>{verify,boolean()}</c>. If
- verification is turned on (by means of specifying
- <c>{verify,true}</c>), the function utilizes whatever
- information is present in the file to assert that the
- information is not damaged. How this is done depends on which
- <c>extended_info</c> was written using
- <seealso marker="#tab2file/3">tab2file/3</seealso>.</p>
- <p>If no <c>extended_info</c> is present in the file and
- <c>{verify,true}</c> is specified, the number of objects
- written is compared to the size of the original table when the
- dump was started. This might make verification fail if the
- table was
- <c>public</c> and objects were added or removed while the
- table was dumped to file. To avoid this type of problems,
- either do not verify files dumped while updated simultaneously
- or use the <c>{extended_info, [object_count]}</c> option to
- <seealso marker="#tab2file/3">tab2file/3</seealso>, which
- extends the information in the file with the number of objects
- actually written.</p>
- <p>If verification is turned on and the file was written with
- the option <c>{extended_info, [md5sum]}</c>, reading the file
- is slower and consumes radically more CPU time than
- otherwise.</p>
+ <p>The only supported option is <c>{verify,boolean()}</c>.
+ If verification is turned on (by specifying <c>{verify,true}</c>),
+ the function uses whatever information is present in the file to
+ assert that the information is not damaged. How this is done depends
+ on which <c>extended_info</c> was written using
+ <seealso marker="#tab2file/3"><c>tab2file/3</c></seealso>.</p>
+ <p>If no <c>extended_info</c> is present in the file and
+ <c>{verify,true}</c> is specified, the number of objects
+ written is compared to the size of the original table when the
+ dump was started. This can make verification fail if the table was
+ <c>public</c> and objects were added or removed while the
+ table was dumped to file. To avoid this problem,
+ either do not verify files dumped while updated simultaneously
+ or use option <c>{extended_info, [object_count]}</c> to
+ <seealso marker="#tab2file/3"><c>tab2file/3</c></seealso>, which
+ extends the information in the file with the number of objects
+ written.</p>
+ <p>If verification is turned on and the file was written with
+ option <c>{extended_info, [md5sum]}</c>, reading the file
+ is slower and consumes radically more CPU time than otherwise.</p>
<p><c>{verify,false}</c> is the default.</p>
</desc>
</func>
+
<func>
<name name="first" arity="1"/>
<fsummary>Return the first key in an ETS table.</fsummary>
<desc>
- <p>Returns the first key <c><anno>Key</anno></c> in the table <c><anno>Tab</anno></c>.
- If the table is of the <c>ordered_set</c> type, the first key
- in Erlang term order will be returned. If the table is of any
- other type, the first key according to the table's internal
- order will be returned. If the table is empty,
- <c>'$end_of_table'</c> will be returned.</p>
- <p>Use <c>next/2</c> to find subsequent keys in the table.</p>
+ <p>Returns the first key <c><anno>Key</anno></c> in table
+ <c><anno>Tab</anno></c>. For an <c>ordered_set</c> table, the first
+ key in Erlang term order is returned. For other
+ table types, the first key according to the internal
+ order of the table is returned. If the table is empty,
+ <c>'$end_of_table'</c> is returned.</p>
+ <p>To find subsequent keys in the table, use
+ <seealso marker="#next/2"><c>next/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="foldl" arity="3"/>
- <fsummary>Fold a function over an ETS table</fsummary>
+ <fsummary>Fold a function over an ETS table.</fsummary>
<desc>
<p><c><anno>Acc0</anno></c> is returned if the table is empty.
- This function is similar to <c>lists:foldl/3</c>. The order in
- which the elements of the table are traversed is unspecified,
- except for tables of type <c>ordered_set</c>, for which they
- are traversed first to last.</p>
-
- <p>If <c><anno>Function</anno></c> inserts objects into the table, or another
- process inserts objects into the table, those objects <em>may</em>
- (depending on key ordering) be included in the traversal.</p>
+ This function is similar to
+ <seealso marker="lists#foldl/3"><c>lists:foldl/3</c></seealso>.
+ The table elements are traversed is unspecified order, except for
+ <c>ordered_set</c> tables, where they are traversed first to last.</p>
+ <p>If <c><anno>Function</anno></c> inserts objects into the table,
+ or another
+ process inserts objects into the table, those objects <em>can</em>
+ (depending on key ordering) be included in the traversal.</p>
</desc>
</func>
+
<func>
<name name="foldr" arity="3"/>
- <fsummary>Fold a function over an ETS table</fsummary>
+ <fsummary>Fold a function over an ETS table.</fsummary>
<desc>
<p><c><anno>Acc0</anno></c> is returned if the table is empty.
- This function is similar to <c>lists:foldr/3</c>. The order in
- which the elements of the table are traversed is unspecified,
- except for tables of type <c>ordered_set</c>, for which they
- are traversed last to first.</p>
-
- <p>If <c><anno>Function</anno></c> inserts objects into the table, or another
- process inserts objects into the table, those objects <em>may</em>
- (depending on key ordering) be included in the traversal.</p>
+ This function is similar to
+ <seealso marker="lists#foldr/3"><c>lists:foldr/3</c></seealso>.
+ The table elements are traversed is unspecified order, except for
+ <c>ordered_set</c> tables, where they are traversed last to first.</p>
+ <p>If <c><anno>Function</anno></c> inserts objects into the table,
+ or another
+ process inserts objects into the table, those objects <em>can</em>
+ (depending on key ordering) be included in the traversal.</p>
</desc>
</func>
+
<func>
<name name="from_dets" arity="2"/>
- <fsummary>Fill an ETS table with objects from a Dets table.</fsummary>
+ <fsummary>Fill an ETS table with objects from a Dets
+ table.</fsummary>
<desc>
<p>Fills an already created ETS table with the objects in the
- already opened Dets table named <c><anno>DetsTab</anno></c>. The existing
- objects of the ETS table are kept unless overwritten.</p>
- <p>Throws a badarg error if any of the tables does not exist or the
- dets table is not open.</p>
+ already opened Dets table <c><anno>DetsTab</anno></c>.
+ Existing objects in the ETS table are kept unless
+ overwritten.</p>
+ <p>If any of the tables does not exist or the Dets table is
+ not open, a <c>badarg</c> exception is raised.</p>
</desc>
</func>
+
<func>
<name name="fun2ms" arity="1"/>
- <fsummary>Pseudo function that transforms fun syntax to a match_spec.</fsummary>
+ <fsummary>Pseudo function that transforms fun syntax to a match
+ specification.</fsummary>
<desc>
- <p>Pseudo function that by means of a <c>parse_transform</c>
- translates <c><anno>LiteralFun</anno></c> typed as parameter in the
- function call to a
- <seealso marker="#match_spec">match_spec</seealso>. With
- "literal" is meant that the fun needs to textually be written
+ <p>Pseudo function that by a <c>parse_transform</c> translates
+ <c><anno>LiteralFun</anno></c> typed as parameter in the function
+ call to a
+ <seealso marker="#match_spec">match specification</seealso>.
+ With "literal" is meant that the fun must textually be written
as the parameter of the function, it cannot be held in a
- variable which in turn is passed to the function).</p>
- <p>The parse transform is implemented in the module
- <c>ms_transform</c> and the source <em>must</em> include the
+ variable that in turn is passed to the function.</p>
+ <p>The parse transform is provided in the <c>ms_transform</c>
+ module and the source <em>must</em> include
file <c>ms_transform.hrl</c> in STDLIB for this
pseudo function to work. Failing to include the hrl file in
- the source will result in a runtime error, not a compile
- time ditto. The include file is easiest included by adding
- the line
+ the source results in a runtime error, not a compile
+ time error. The include file is easiest included by adding line
<c>-include_lib("stdlib/include/ms_transform.hrl").</c> to
the source file.</p>
<p>The fun is very restricted, it can take only a single
parameter (the object to match): a sole variable or a
- tuple. It needs to use the <c>is_</c> guard tests.
- Language constructs that have no representation
- in a match_spec (like <c>if</c>, <c>case</c>, <c>receive</c>
- etc) are not allowed.</p>
- <p>The return value is the resulting match_spec.</p>
- <p>Example:</p>
+ tuple. It must use the <c>is_</c> guard tests.
+ Language constructs that have no representation in a match
+ specification (<c>if</c>, <c>case</c>, <c>receive</c>,
+ and so on) are not allowed.</p>
+ <p>The return value is the resulting match specification.</p>
+ <p><em>Example:</em></p>
<pre>
1> <input>ets:fun2ms(fun({M,N}) when N > 3 -> M end).</input>
[{{'$1','$2'},[{'>','$2',3}],['$1']}]</pre>
- <p>Variables from the environment can be imported, so that this
- works:</p>
+ <p>Variables from the environment can be imported, so that the
+ following works:</p>
<pre>
2> <input>X=3.</input>
3
3> <input>ets:fun2ms(fun({M,N}) when N > X -> M end).</input>
[{{'$1','$2'},[{'>','$2',{const,3}}],['$1']}]</pre>
- <p>The imported variables will be replaced by match_spec
+ <p>The imported variables are replaced by match specification
<c>const</c> expressions, which is consistent with the
- static scoping for Erlang funs. Local or global function
- calls can not be in the guard or body of the fun however.
- Calls to builtin match_spec functions of course is allowed:</p>
+ static scoping for Erlang funs. However, local or global function
+ calls cannot be in the guard or body of the fun. Calls to built-in
+ match specification functions is of course allowed:</p>
<pre>
4> <input>ets:fun2ms(fun({M,N}) when N > X, is_atomm(M) -> M end).</input>
Error: fun containing local Erlang function calls
@@ -362,724 +405,832 @@ Error: fun containing local Erlang function calls
{error,transform_error}
5> <input>ets:fun2ms(fun({M,N}) when N > X, is_atom(M) -> M end).</input>
[{{'$1','$2'},[{'>','$2',{const,3}},{is_atom,'$1'}],['$1']}]</pre>
- <p>As can be seen by the example, the function can be called
- from the shell too. The fun needs to be literally in the call
- when used from the shell as well. Other means than the
- parse_transform are used in the shell case, but more or less
- the same restrictions apply (the exception being records,
- as they are not handled by the shell).</p>
+ <p>As shown by the example, the function can be called
+ from the shell also. The fun must be literally in the call
+ when used from the shell as well.</p>
<warning>
- <p>If the parse_transform is not applied to a module which
- calls this pseudo function, the call will fail in runtime
- (with a <c>badarg</c>). The module <c>ets</c> actually
- exports a function with this name, but it should never
- really be called except for when using the function in the
+ <p>If the <c>parse_transform</c> is not applied to a module that
+ calls this pseudo function, the call fails in runtime
+ (with a <c>badarg</c>). The <c>ets</c> module
+ exports a function with this name, but it is never to
+ be called except when using the function in the
shell. If the <c>parse_transform</c> is properly applied by
- including the <c>ms_transform.hrl</c> header file, compiled
- code will never call the function, but the function call is
- replaced by a literal match_spec.</p>
+ including header file <c>ms_transform.hrl</c>, compiled
+ code never calls the function, but the function call is
+ replaced by a literal match specification.</p>
</warning>
- <p>For more information, see
- <seealso marker="ms_transform#top">ms_transform(3)</seealso>.</p>
+ <p>For more information, see <seealso marker="ms_transform#top">
+ <c>ms_transform(3)</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="give_away" arity="3"/>
<fsummary>Change owner of a table.</fsummary>
<desc>
- <p>Make process <c><anno>Pid</anno></c> the new owner of table <c><anno>Tab</anno></c>.
- If successful, the message
- <c>{'ETS-TRANSFER',<anno>Tab</anno>,FromPid,<anno>GiftData</anno>}</c> will be sent
- to the new owner.</p>
- <p>The process <c><anno>Pid</anno></c> must be alive, local and not already the
- owner of the table. The calling process must be the table owner.</p>
- <p>Note that <c>give_away</c> does not at all affect the
- <seealso marker="#heir">heir</seealso> option of the table. A table
- owner can for example set the <c>heir</c> to itself, give the table
- away and then get it back in case the receiver terminates.</p>
+ <p>Make process <c><anno>Pid</anno></c> the new owner of table
+ <c><anno>Tab</anno></c>. If successful, message
+ <c>{'ETS-TRANSFER',<anno>Tab</anno>,FromPid,<anno>GiftData</anno>}</c>
+ is sent to the new owner.</p>
+ <p>The process <c><anno>Pid</anno></c> must be alive, local, and not
+ already the owner of the table.
+ The calling process must be the table owner.</p>
+ <p>Notice that this function does not affect option
+ <seealso marker="#heir"><c>heir</c></seealso> of the table. A table
+ owner can, for example, set <c>heir</c> to itself, give the table
+ away, and then get it back if the receiver terminates.</p>
</desc>
</func>
+
<func>
<name name="i" arity="0"/>
- <fsummary>Display information about all ETS tables on tty.</fsummary>
+ <fsummary>Display information about all ETS tables on a terminal.
+ </fsummary>
<desc>
- <p>Displays information about all ETS tables on tty.</p>
+ <p>Displays information about all ETS tables on a terminal.</p>
</desc>
</func>
+
<func>
<name name="i" arity="1"/>
- <fsummary>Browse an ETS table on tty.</fsummary>
+ <fsummary>Browse an ETS table on a terminal.</fsummary>
<desc>
- <p>Browses the table <c><anno>Tab</anno></c> on tty.</p>
+ <p>Browses table <c><anno>Tab</anno></c> on a terminal.</p>
</desc>
</func>
+
<func>
<name name="info" arity="1"/>
- <fsummary>Return information about an ETS table.</fsummary>
+ <fsummary>Return information about an <c>table</c>.</fsummary>
<desc>
- <p>Returns information about the table <c><anno>Tab</anno></c> as a list of
+ <p>Returns information about table <c><anno>Tab</anno></c> as a list of
tuples. If <c><anno>Tab</anno></c> has the correct type
- for a table identifier, but does not refer to an existing ETS
- table, <c>undefined</c> is returned. If <c><anno>Tab</anno></c> is not of the
- correct type, this function fails with reason <c>badarg</c>.</p>
-
- <list type="bulleted">
- <item><c>{compressed, boolean()}</c> <br></br>
-
- Indicates if the table is compressed or not.</item>
- <item><c>{heir, pid() | none}</c> <br></br>
-
- The pid of the heir of the table, or <c>none</c> if no heir is set.</item>
- <item><c>{keypos, integer() >= 1}</c> <br></br>
-
- The key position.</item>
- <item><c>{memory, integer() >= 0</c> <br></br>
-
- The number of words allocated to the table.</item>
- <item><c>{name, atom()}</c> <br></br>
-
- The name of the table.</item>
- <item><c>{named_table, boolean()}</c> <br></br>
-
- Indicates if the table is named or not.</item>
- <item><c>{node, node()}</c> <br></br>
-
- The node where the table is stored. This field is no longer
- meaningful as tables cannot be accessed from other nodes.</item>
- <item><c>{owner, pid()}</c> <br></br>
-
- The pid of the owner of the table.</item>
- <item><c>{protection, </c><seealso marker="#type-access">access()</seealso><c>}</c> <br></br>
-
- The table access rights.</item>
- <item><c>{size, integer() >= 0</c> <br></br>
-
- The number of objects inserted in the table.</item>
- <item><c>{type, </c><seealso marker="#type-type">type()</seealso><c>}</c> <br></br>
-
- The table type.</item>
- <item><c>{read_concurrency, boolean()}</c> <br></br>
-
- Indicates whether the table uses read_concurrency or not.</item>
- <item><c>{write_concurrency, boolean()}</c> <br></br>
-
- Indicates whether the table uses write_concurrency or not.</item>
- </list>
+ for a table identifier, but does not refer to an existing ETS
+ table, <c>undefined</c> is returned. If <c><anno>Tab</anno></c> is
+ not of the correct type, a <c>badarg</c> exception is raised.</p>
+ <taglist>
+ <tag><c>{compressed, boolean()}</c></tag>
+ <item>
+ <p>Indicates if the table is compressed.</p>
+ </item>
+ <tag><c>{heir, pid() | none}</c></tag>
+ <item>
+ <p>The pid of the heir of the table, or <c>none</c> if no heir
+ is set.</p>
+ </item>
+ <tag><c>{keypos, integer() >= 1}</c></tag>
+ <item>
+ <p>The key position.</p>
+ </item>
+ <tag><c>{memory, integer() >= 0</c></tag>
+ <item>
+ <p>The number of words allocated to the table.</p>
+ </item>
+ <tag><c>{name, atom()}</c></tag>
+ <item>
+ <p>The table name.</p>
+ </item>
+ <tag><c>{named_table, boolean()}</c></tag>
+ <item>
+ <p>Indicates if the table is named.</p>
+ </item>
+ <tag><c>{node, node()}</c></tag>
+ <item>
+ <p>The node where the table is stored. This field is no longer
+ meaningful, as tables cannot be accessed from other nodes.</p>
+ </item>
+ <tag><c>{owner, pid()}</c></tag>
+ <item>
+ <p>The pid of the owner of the table.</p>
+ </item>
+ <tag><c>{protection,</c> <seealso marker="#type-access">
+ <c>access()</c></seealso><c>}</c></tag>
+ <item>
+ <p>The table access rights.</p>
+ </item>
+ <tag><c>{size, integer() >= 0</c></tag>
+ <item>
+ <p>The number of objects inserted in the table.</p>
+ </item>
+ <tag><c>{type,</c> <seealso marker="#type-type">
+ <c>type()</c></seealso><c>}</c></tag>
+ <item>
+ <p>The table type.</p>
+ </item>
+ <tag><c>{read_concurrency, boolean()}</c></tag>
+ <item>
+ <p>Indicates whether the table uses <c>read_concurrency</c> or
+ not.</p>
+ </item>
+ <tag><c>{write_concurrency, boolean()}</c></tag>
+ <item>
+ <p>Indicates whether the table uses <c>write_concurrency</c>.</p>
+ </item>
+ </taglist>
</desc>
</func>
+
<func>
<name name="info" arity="2"/>
- <fsummary>Return the information associated with given item for an ETS table.</fsummary>
+ <fsummary>Return the information associated with the specified item for
+ an ETS table.</fsummary>
<desc>
- <p>Returns the information associated with <c>Item</c> for
- the table <c><anno>Tab</anno></c>, or returns <c>undefined</c> if <c>Tab</c>
- does not refer an existing ETS table.
- If <c><anno>Tab</anno></c> is not of the correct type, or if <c><anno>Item</anno></c> is not
- one of the allowed values, this function fails with reason <c>badarg</c>.</p>
-
- <warning><p>In R11B and earlier, this function would not fail but return
- <c>undefined</c> for invalid values for <c>Item</c>.</p>
- </warning>
-
- <p>In addition to the <c>{<anno>Item</anno>,<anno>Value</anno>}</c>
- pairs defined for <c>info/1</c>, the following items are
- allowed:</p>
+ <p>Returns the information associated with <c>Item</c> for table
+ <c><anno>Tab</anno></c>, or returns <c>undefined</c> if <c>Tab</c>
+ does not refer an existing ETS table. If
+ <c><anno>Tab</anno></c> is
+ not of the correct type, or if <c><anno>Item</anno></c> is not
+ one of the allowed values, a <c>badarg</c> exception is raised.</p>
+ <warning>
+ <p>In Erlang/OTP R11B and earlier, this function would not fail but
+ return <c>undefined</c> for invalid values for <c>Item</c>.</p>
+ </warning>
+ <p>In addition to the <c>{<anno>Item</anno>,<anno>Value</anno>}</c>
+ pairs defined for <seealso marker="#info/1"><c>info/1</c></seealso>,
+ the following items are allowed:</p>
<list type="bulleted">
- <item><c>Item=fixed, Value=boolean()</c> <br></br>
-
- Indicates if the table is fixed by any process or not.</item>
- <item><marker id="info_2_safe_fixed_monotonic_time"/>
- <p><c>Item=safe_fixed|safe_fixed_monotonic_time, Value={FixationTime,Info}|false</c> <br></br>
-</p>
+ <item>
+ <p><c>Item=fixed, Value=boolean()</c></p>
+ <p>Indicates if the table is fixed by any process.</p>
+ </item>
+ <item>
+ <p><marker id="info_2_safe_fixed_monotonic_time"/></p>
+ <p><c>Item=safe_fixed|safe_fixed_monotonic_time,
+ Value={FixationTime,Info}|false</c></p>
<p>If the table has been fixed using
- <seealso marker="#safe_fixtable/2"><c>safe_fixtable/2</c></seealso>,
+ <seealso marker="#safe_fixtable/2">
+ <c>safe_fixtable/2</c></seealso>,
the call returns a tuple where <c>FixationTime</c> is the
- time when the table was first fixed by a process, which
- may or may not be one of the processes it is fixed by
- right now.</p>
- <p>The format and value of <c>FixationTime</c> depends on
- <c>Item</c>:</p>
- <taglist>
- <tag><c>safe_fixed</c></tag>
- <item><p><c>FixationTime</c> will correspond to the result
- returned by
- <seealso marker="erts:erlang#timestamp/0">erlang:timestamp/0</seealso>
- at the time of fixation. Note that when the system is using
- single or multi
- <seealso marker="erts:time_correction#Time_Warp_Modes">time warp
- modes</seealso> this might produce strange results. This
- since the usage of <c>safe_fixed</c> is not
- <seealso marker="erts:time_correction#Time_Warp_Safe_Code">time warp
- safe</seealso>. Time warp safe code need to use
- <c>safe_fixed_monotonic_time</c> instead.</p></item>
-
- <tag><c>safe_fixed_monotonic_time</c></tag>
- <item><p><c>FixationTime</c> will correspond to the result
- returned by
- <seealso marker="erts:erlang#monotonic_time/0">erlang:monotonic_time/0</seealso>
- at the time of fixation. The usage of <c>safe_fixed_monotonic_time</c> is
- <seealso marker="erts:time_correction#Time_Warp_Safe_Code">time warp
- safe</seealso>.</p></item>
- </taglist>
+ time when the table was first fixed by a process, which either
+ is or is not one of the processes it is fixed by now.</p>
+ <p>The format and value of <c>FixationTime</c> depends on
+ <c>Item</c>:</p>
+ <taglist>
+ <tag><c>safe_fixed</c></tag>
+ <item>
+ <p><c>FixationTime</c> corresponds to the result returned by
+ <seealso marker="erts:erlang#timestamp/0">
+ <c>erlang:timestamp/0</c></seealso> at the time of fixation.
+ Notice that when the system uses single or multi
+ <seealso marker="erts:time_correction#Time_Warp_Modes">time
+ warp modes</seealso> this can produce strange results, as
+ the use of <c>safe_fixed</c> is not
+ <seealso marker="erts:time_correction#Time_Warp_Safe_Code">
+ time warp safe</seealso>. Time warp safe code must use
+ <c>safe_fixed_monotonic_time</c> instead.</p>
+ </item>
+ <tag><c>safe_fixed_monotonic_time</c></tag>
+ <item>
+ <p><c>FixationTime</c> corresponds to the result returned by
+ <seealso marker="erts:erlang#monotonic_time/0">
+ <c>erlang:monotonic_time/0</c></seealso> at the time of
+ fixation. The use of <c>safe_fixed_monotonic_time</c> is
+ <seealso marker="erts:time_correction#Time_Warp_Safe_Code">
+ time warp safe</seealso>.</p>
+ </item>
+ </taglist>
<p><c>Info</c> is a possibly empty lists of tuples
<c>{Pid,RefCount}</c>, one tuple for every process the
- table is fixed by right now. <c>RefCount</c> is the value
- of the reference counter, keeping track of how many times
+ table is fixed by now. <c>RefCount</c> is the value
+ of the reference counter and it keeps track of how many times
the table has been fixed by the process.</p>
<p>If the table never has been fixed, the call returns
- <c>false</c>.</p></item>
- <item><p><c>Item=stats, Value=tuple()</c> <br></br>
- Returns internal statistics about set, bag and duplicate_bag tables on an internal format used by OTP test suites.
- Not for production use.</p></item>
+ <c>false</c>.</p>
+ </item>
+ <item>
+ <p><c>Item=stats, Value=tuple()</c></p>
+ <p>Returns internal statistics about <c>set</c>, <c>bag</c>, and
+ <c>duplicate_bag</c> tables on an internal format used by OTP
+ test suites. Not for production use.</p></item>
</list>
</desc>
</func>
+
<func>
<name name="init_table" arity="2"/>
<fsummary>Replace all objects of an ETS table.</fsummary>
<desc>
- <p>Replaces the existing objects of the table <c><anno>Tab</anno></c> with
- objects created by calling the input function <c><anno>InitFun</anno></c>,
+ <p>Replaces the existing objects of table <c><anno>Tab</anno></c> with
+ objects created by calling the input function
+ <c><anno>InitFun</anno></c>,
see below. This function is provided for compatibility with
the <c>dets</c> module, it is not more efficient than filling
- a table by using <c>ets:insert/2</c>.
- </p>
- <p>When called with the argument <c>read</c> the function
- <c><anno>InitFun</anno></c> is assumed to return <c>end_of_input</c> when
+ a table by using
+ <seealso marker="#insert/2"><c>insert/2</c></seealso>.</p>
+ <p>When called with argument <c>read</c>, the function
+ <c><anno>InitFun</anno></c> is assumed to return
+ <c>end_of_input</c> when
there is no more input, or <c>{<anno>Objects</anno>, Fun}</c>, where
- <c><anno>Objects</anno></c> is a list of objects and <c>Fun</c> is a new
- input function. Any other value Value is returned as an error
- <c>{error, {init_fun, Value}}</c>. Each input function will be
- called exactly once, and should an error occur, the last
- function is called with the argument <c>close</c>, the reply
+ <c><anno>Objects</anno></c> is a list of objects and <c>Fun</c> is a
+ new input function. Any other value <c>Value</c> is returned as an
+ error <c>{error, {init_fun, Value}}</c>. Each input function is
+ called exactly once, and if an error occur, the last
+ function is called with argument <c>close</c>, the reply
of which is ignored.</p>
- <p>If the type of the table is <c>set</c> and there is more
- than one object with a given key, one of the objects is
+ <p>If the table type is <c>set</c> and more than one object
+ exists with a given key, one of the objects is
chosen. This is not necessarily the last object with the given
key in the sequence of objects returned by the input
functions. This holds also for duplicated
objects stored in tables of type <c>bag</c>.</p>
</desc>
</func>
+
<func>
<name name="insert" arity="2"/>
<fsummary>Insert an object into an ETS table.</fsummary>
<desc>
- <p>Inserts the object or all of the objects in the list
- <c><anno>ObjectOrObjects</anno></c> into the table <c><anno>Tab</anno></c>.
- If the table is a <c>set</c> and the key of the inserted
- objects <em>matches</em> the key of any object in the table,
- the old object will be replaced. If the table is an
- <c>ordered_set</c> and the key of the inserted object
- <em>compares equal</em> to the key of any object in the
- table, the old object is also replaced. If the list contains
- more than one object with <em>matching</em> keys and the table is a
- <c>set</c>, one will be inserted, which one is
- not defined. The same thing holds for <c>ordered_set</c>, but
- will also happen if the keys <em>compare equal</em>.</p>
+ <p>Inserts the object or all of the objects in list
+ <c><anno>ObjectOrObjects</anno></c> into table
+ <c><anno>Tab</anno></c>.</p>
+ <list type="bulleted">
+ <item>
+ <p>If the table type is <c>set</c> and the key of the inserted
+ objects <em>matches</em> the key of any object in the table,
+ the old object is replaced.</p>
+ </item>
+ <item>
+ <p>If the table type is <c>ordered_set</c> and the key of the
+ inserted object <em>compares equal</em> to the key of any object
+ in the table, the old object is replaced.</p>
+ </item>
+ <item>
+ <p>If the list contains more than one object with
+ <em>matching</em> keys and the table type is <c>set</c>, one is
+ inserted, which one is not defined.
+ The same holds for table type <c>ordered_set</c>
+ if the keys <em>compare equal</em>.</p>
+ </item>
+ </list>
<p>The entire operation is guaranteed to be
<seealso marker="#concurrency">atomic and isolated</seealso>,
even when a list of objects is inserted.</p>
</desc>
</func>
+
<func>
<name name="insert_new" arity="2"/>
- <fsummary>Insert an object into an ETS table if the key is not already present.</fsummary>
+ <fsummary>Insert an object into an ETS table if the key is not
+ already present.</fsummary>
<desc>
- <p>This function works exactly like <c>insert/2</c>, with the
- exception that instead of overwriting objects with the same
- key (in the case of <c>set</c> or <c>ordered_set</c>) or
- adding more objects with keys already existing in the table
- (in the case of <c>bag</c> and <c>duplicate_bag</c>), it
- simply returns <c>false</c>. If <c><anno>ObjectOrObjects</anno></c> is a
- list, the function checks <em>every</em> key prior to
- inserting anything. Nothing will be inserted if not
+ <p>Same as <seealso marker="#insert/2"><c>insert/2</c></seealso>
+ except that instead of overwriting objects with the same key
+ (for <c>set</c> or <c>ordered_set</c>) or adding more objects with
+ keys already existing in the table (for <c>bag</c> and
+ <c>duplicate_bag</c>), <c>false</c> is returned.</p>
+ <p>If <c><anno>ObjectOrObjects</anno></c> is a
+ list, the function checks <em>every</em> key before
+ inserting anything. Nothing is inserted unless
<em>all</em> keys present in the list are absent from the
table. Like <c>insert/2</c>, the entire operation is guaranteed to be
<seealso marker="#concurrency">atomic and isolated</seealso>.</p>
</desc>
</func>
+
<func>
<name name="is_compiled_ms" arity="1"/>
- <fsummary>Checks if an Erlang term is the result of ets:match_spec_compile</fsummary>
+ <fsummary>Check if an Erlang term is the result of
+ <c>match_spec_compile</c>.</fsummary>
<desc>
- <p>This function is used to check if a term is a valid
- compiled <seealso marker="#match_spec">match_spec</seealso>.
- The compiled match_spec is an opaque datatype which can
- <em>not</em> be sent between Erlang nodes nor be stored on
+ <p>Checks if a term is a valid
+ compiled <seealso marker="#match_spec">match specification</seealso>.
+ The compiled match specification is an opaque datatype that
+ <em>cannot</em> be sent between Erlang nodes or be stored on
disk. Any attempt to create an external representation of a
- compiled match_spec will result in an empty binary
- (<c><![CDATA[<<>>]]></c>). As an example, the following
- expression:</p>
+ compiled match specification results in an empty binary
+ (<c><![CDATA[<<>>]]></c>).</p>
+ <p><em>Examples:</em></p>
+ <p>The following expression yields <c>true</c>::</p>
<code type="none">
ets:is_compiled_ms(ets:match_spec_compile([{'_',[],[true]}])).</code>
- <p>will yield <c>true</c>, while the following expressions:</p>
+ <p>The following expressions yield <c>false</c>, as variable
+ <c>Broken</c> contains a compiled match specification that has
+ passed through external representation:</p>
<code type="none">
MS = ets:match_spec_compile([{'_',[],[true]}]),
Broken = binary_to_term(term_to_binary(MS)),
ets:is_compiled_ms(Broken).</code>
- <p>will yield false, as the variable <c>Broken</c> will contain
- a compiled match_spec that has passed through external
- representation.</p>
<note>
- <p>The fact that compiled match_specs has no external
- representation is for performance reasons. It may be subject
- to change in future releases, while this interface will
- still remain for backward compatibility reasons.</p>
+ <p>The reason for not having an external representation of
+ compiled match specifications is performance. It can be
+ subject to change in future releases, while this interface
+ remains for backward compatibility.</p>
</note>
</desc>
</func>
+
<func>
<name name="last" arity="1"/>
- <fsummary>Return the last key in an ETS table of type<c>ordered_set</c>.</fsummary>
+ <fsummary>Return the last key in an ETS table of type
+ <c>ordered_set</c>.</fsummary>
<desc>
- <p>Returns the last key <c><anno>Key</anno></c> according to Erlang term
- order in the table <c>Tab</c> of the <c>ordered_set</c> type.
- If the table is of any other type, the function is synonymous
- to <c>first/1</c>. If the table is empty,
- <c>'$end_of_table'</c> is returned.</p>
- <p>Use <c>prev/2</c> to find preceding keys in the table.</p>
+ <p>Returns the last key <c><anno>Key</anno></c> according to Erlang
+ term order in table <c>Tab</c> of type <c>ordered_set</c>. For
+ other table types, the function is synonymous to
+ <seealso marker="#first/1"><c>first/1</c></seealso>.
+ If the table is empty, <c>'$end_of_table'</c> is returned.</p>
+ <p>To find preceding keys in the table, use
+ <seealso marker="#prev/2"><c>prev/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="lookup" arity="2"/>
- <fsummary>Return all objects with a given key in an ETS table.</fsummary>
+ <fsummary>Return all objects with a specified key in an ETS table.
+ </fsummary>
<desc>
- <p>Returns a list of all objects with the key <c><anno>Key</anno></c> in
- the table <c><anno>Tab</anno></c>.</p>
- <p>In the case of <c>set, bag and duplicate_bag</c>, an object
- is returned only if the given key <em>matches</em> the key
- of the object in the table. If the table is an
- <c>ordered_set</c> however, an object is returned if the key
- given <em>compares equal</em> to the key of an object in the
- table. The difference being the same as between <c>=:=</c>
- and <c>==</c>. As an example, one might insert an object
- with the
+ <p>Returns a list of all objects with key <c><anno>Key</anno></c> in
+ table <c><anno>Tab</anno></c>.</p>
+ <list type="bulleted">
+ <item>
+ <p>For tables of type <c>set</c>, <c>bag</c>, or
+ <c>duplicate_bag</c>, an object is returned only if the specified
+ key <em>matches</em> the key of the object in the table.</p>
+ </item>
+ <item>
+ <p>For tables of type <c>ordered_set</c>, an object is returned if
+ the specified key <em>compares equal</em> to the key of an object
+ in the table.</p>
+ </item>
+ </list>
+ <p>The difference is the same as between <c>=:=</c> and <c>==</c>.</p>
+ <p>As an example, one can insert an object with
<c>integer()</c> <c>1</c> as a key in an <c>ordered_set</c>
- and get the object returned as a result of doing a
- <c>lookup/2</c> with the <c>float()</c> <c>1.0</c> as the
- key to search for.</p>
- <p>If the table is of type <c>set</c> or <c>ordered_set</c>,
+ and get the object returned as a result of doing a <c>lookup/2</c>
+ with <c>float()</c> <c>1.0</c> as the key to search for.</p>
+ <p>For tables of type <c>set</c> or <c>ordered_set</c>,
the function returns either the empty list or a list with one
element, as there cannot be more than one object with the same
- key. If the table is of type <c>bag</c> or
- <c>duplicate_bag</c>, the function returns a list of
- arbitrary length.</p>
- <p>Note that the time order of object insertions is preserved;
- the first object inserted with the given key will be first
+ key. For tables of type <c>bag</c> or <c>duplicate_bag</c>, the
+ function returns a list of arbitrary length.</p>
+ <p>Notice that the time order of object insertions is preserved;
+ the first object inserted with the specified key is the first
in the resulting list, and so on.</p>
- <p>Insert and look-up times in tables of type <c>set</c>,
- <c>bag</c> and <c>duplicate_bag</c> are constant, regardless
- of the size of the table. For the <c>ordered_set</c>
- data-type, time is proportional to the (binary) logarithm of
+ <p>Insert and lookup times in tables of type <c>set</c>,
+ <c>bag</c>, and <c>duplicate_bag</c> are constant, regardless
+ of the table size. For the <c>ordered_set</c>
+ datatype, time is proportional to the (binary) logarithm of
the number of objects.</p>
</desc>
</func>
+
<func>
<name name="lookup_element" arity="3"/>
- <fsummary>Return the <c>Pos</c>:th element of all objects with a given key in an ETS table.</fsummary>
+ <fsummary>Return the <c>Pos</c>:th element of all objects with a
+ specified key in an ETS table.</fsummary>
<desc>
- <p>If the table <c><anno>Tab</anno></c> is of type <c>set</c> or
- <c>ordered_set</c>, the function returns the <c><anno>Pos</anno></c>:th
- element of the object with the key <c><anno>Key</anno></c>.</p>
- <p>If the table is of type <c>bag</c> or <c>duplicate_bag</c>,
- the functions returns a list with the <c><anno>Pos</anno></c>:th element of
- every object with the key <c><anno>Key</anno></c>.</p>
- <p>If no object with the key <c><anno>Key</anno></c> exists, the function
- will exit with reason <c>badarg</c>.</p>
- <p>The difference between <c>set</c>, <c>bag</c> and
+ <p>For a table <c><anno>Tab</anno></c> of type <c>set</c> or
+ <c>ordered_set</c>, the function returns the
+ <c><anno>Pos</anno></c>:th
+ element of the object with key <c><anno>Key</anno></c>.</p>
+ <p>For tables of type <c>bag</c> or <c>duplicate_bag</c>,
+ the functions returns a list with the <c><anno>Pos</anno></c>:th
+ element of every object with key <c><anno>Key</anno></c>.</p>
+ <p>If no object with key <c><anno>Key</anno></c> exists, the
+ function exits with reason <c>badarg</c>.</p>
+ <p>The difference between <c>set</c>, <c>bag</c>, and
<c>duplicate_bag</c> on one hand, and <c>ordered_set</c> on
- the other, regarding the fact that <c>ordered_set</c>'s
+ the other, regarding the fact that <c>ordered_set</c>
view keys as equal when they <em>compare equal</em>
- whereas the other table types only regard them equal when
- they <em>match</em>, naturally holds for
- <c>lookup_element</c> as well as for <c>lookup</c>.</p>
+ whereas the other table types regard them equal only when
+ they <em>match</em>, holds for <c>lookup_element/3</c>.</p>
</desc>
</func>
+
+ <func>
+ <name name="match" arity="1"/>
+ <fsummary>Continues matching objects in an ETS table.</fsummary>
+ <desc>
+ <p>Continues a match started with
+ <seealso marker="#match/3"><c>match/3</c></seealso>. The next
+ chunk of the size specified in the initial <c>match/3</c>
+ call is returned together with a new <c><anno>Continuation</anno></c>,
+ which can be used in subsequent calls to this function.</p>
+ <p>When there are no more objects in the table, <c>'$end_of_table'</c>
+ is returned.</p>
+ </desc>
+ </func>
+
<func>
<name name="match" arity="2"/>
- <fsummary>Match the objects in an ETS table against a pattern.</fsummary>
+ <fsummary>Match the objects in an ETS table against a pattern.
+ </fsummary>
<desc>
- <p>Matches the objects in the table <c><anno>Tab</anno></c> against the
+ <p>Matches the objects in table <c><anno>Tab</anno></c> against
pattern <c><anno>Pattern</anno></c>.</p>
- <p>A pattern is a term that may contain:</p>
+ <p>A pattern is a term that can contain:</p>
<list type="bulleted">
- <item>bound parts (Erlang terms),</item>
- <item><c>'_'</c> which matches any Erlang term, and</item>
- <item>pattern variables: <c>'$N'</c> where
- <c>N</c>=0,1,...</item>
+ <item>Bound parts (Erlang terms)</item>
+ <item><c>'_'</c> that matches any Erlang term</item>
+ <item>Pattern variables <c>'$N'</c>, where <c>N</c>=0,1,...</item>
</list>
<p>The function returns a list with one element for each
matching object, where each element is an ordered list of
- pattern variable bindings. An example:</p>
+ pattern variable bindings, for example:</p>
<pre>
-6> <input>ets:match(T, '$1').</input> % Matches every object in the table
+6> <input>ets:match(T, '$1').</input> % Matches every object in table
[[{rufsen,dog,7}],[{brunte,horse,5}],[{ludde,dog,5}]]
7> <input>ets:match(T, {'_',dog,'$1'}).</input>
[[7],[5]]
8> <input>ets:match(T, {'_',cow,'$1'}).</input>
[]</pre>
<p>If the key is specified in the pattern, the match is very
- efficient. If the key is not specified, i.e. if it is a
+ efficient. If the key is not specified, that is, if it is a
variable or an underscore, the entire table must be searched.
The search time can be substantial if the table is very large.</p>
- <p>On tables of the <c>ordered_set</c> type, the result is in
- the same order as in a <c>first/next</c> traversal.</p>
+ <p>For tables of type <c>ordered_set</c>, the result is in
+ the same order as in a <c>first</c>/<c>next</c> traversal.</p>
</desc>
</func>
+
<func>
<name name="match" arity="3"/>
- <fsummary>Match the objects in an ETS table against a pattern and returns part of the answers.</fsummary>
+ <fsummary>Match the objects in an ETS table against a pattern
+ and return part of the answers.</fsummary>
<desc>
- <p>Works like <c>ets:match/2</c> but only returns a limited
- (<c><anno>Limit</anno></c>) number of matching objects. The
- <c><anno>Continuation</anno></c> term can then be used in subsequent calls
- to <c>ets:match/1</c> to get the next chunk of matching
- objects. This is a space efficient way to work on objects in a
- table which is still faster than traversing the table object
- by object using <c>ets:first/1</c> and <c>ets:next/1</c>.</p>
- <p><c>'$end_of_table'</c> is returned if the table is empty.</p>
+ <p>Works like <seealso marker="#match/2"><c>match/2</c></seealso>,
+ but returns only a limited (<c><anno>Limit</anno></c>) number of
+ matching objects. Term <c><anno>Continuation</anno></c> can then
+ be used in subsequent calls to <seealso marker="#match/1">
+ <c>match/1</c></seealso> to get the next chunk of matching
+ objects. This is a space-efficient way to work on objects in a
+ table, which is faster than traversing the table object
+ by object using
+ <seealso marker="#first/1"><c>first/1</c></seealso> and
+ <seealso marker="#next/2"><c>next/2</c></seealso>.</p>
+ <p>If the table is empty, <c>'$end_of_table'</c> is returned.</p>
</desc>
</func>
+
<func>
- <name name="match" arity="1"/>
- <fsummary>Continues matching objects in an ETS table.</fsummary>
+ <name name="match_delete" arity="2"/>
+ <fsummary>Delete all objects that match a specified pattern from an
+ ETS table.</fsummary>
<desc>
- <p>Continues a match started with <c>ets:match/3</c>. The next
- chunk of the size given in the initial <c>ets:match/3</c>
- call is returned together with a new <c><anno>Continuation</anno></c>
- that can be used in subsequent calls to this function.</p>
- <p><c>'$end_of_table'</c> is returned when there are no more
- objects in the table.</p>
+ <p>Deletes all objects that match pattern <c><anno>Pattern</anno></c>
+ from table <c><anno>Tab</anno></c>. For a description of patterns,
+ see <seealso marker="#match/2"><c>match/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="match_delete" arity="2"/>
- <fsummary>Delete all objects which match a given pattern from an ETS table.</fsummary>
+ <name name="match_object" arity="1"/>
+ <fsummary>Continues matching objects in an ETS table.</fsummary>
<desc>
- <p>Deletes all objects which match the pattern <c><anno>Pattern</anno></c>
- from the table <c><anno>Tab</anno></c>. See <c>match/2</c> for a
- description of patterns.</p>
+ <p>Continues a match started with
+ <seealso marker="#match_object/3"><c>match_object/3</c></seealso>.
+ The next chunk of the size specified in the initial
+ <c>match_object/3</c> call is returned together with a new
+ <c><anno>Continuation</anno></c>, which can be used in subsequent
+ calls to this function.</p>
+ <p>When there are no more objects in the table, <c>'$end_of_table'</c>
+ is returned.</p>
</desc>
</func>
+
<func>
<name name="match_object" arity="2"/>
- <fsummary>Match the objects in an ETS table against a pattern.</fsummary>
+ <fsummary>Match the objects in an ETS table against a pattern.
+ </fsummary>
<desc>
- <p>Matches the objects in the table <c><anno>Tab</anno></c> against the
- pattern <c><anno>Pattern</anno></c>. See <c>match/2</c> for a description
- of patterns. The function returns a list of all objects which
+ <p>Matches the objects in table <c><anno>Tab</anno></c> against
+ pattern <c><anno>Pattern</anno></c>. For a description of patterns,
+ see <seealso marker="#match/2"><c>match/2</c></seealso>.
+ The function returns a list of all objects that
match the pattern.</p>
<p>If the key is specified in the pattern, the match is very
- efficient. If the key is not specified, i.e. if it is a
+ efficient. If the key is not specified, that is, if it is a
variable or an underscore, the entire table must be searched.
The search time can be substantial if the table is very large.</p>
- <p>On tables of the <c>ordered_set</c> type, the result is in
- the same order as in a <c>first/next</c> traversal.</p>
+ <p>For tables of type <c>ordered_set</c>, the result is in
+ the same order as in a <c>first</c>/<c>next</c> traversal.</p>
</desc>
</func>
+
<func>
<name name="match_object" arity="3"/>
- <fsummary>Match the objects in an ETS table against a pattern and returns part of the answers.</fsummary>
+ <fsummary>Match the objects in an ETS table against a pattern and
+ return part of the answers.</fsummary>
<desc>
- <p>Works like <c>ets:match_object/2</c> but only returns a
- limited (<c><anno>Limit</anno></c>) number of matching objects. The
- <c><anno>Continuation</anno></c> term can then be used in subsequent calls
- to <c>ets:match_object/1</c> to get the next chunk of matching
- objects. This is a space efficient way to work on objects in a
- table which is still faster than traversing the table object
- by object using <c>ets:first/1</c> and <c>ets:next/1</c>.</p>
- <p><c>'$end_of_table'</c> is returned if the table is empty.</p>
- </desc>
- </func>
- <func>
- <name name="match_object" arity="1"/>
- <fsummary>Continues matching objects in an ETS table.</fsummary>
- <desc>
- <p>Continues a match started with <c>ets:match_object/3</c>.
- The next chunk of the size given in the initial
- <c>ets:match_object/3</c> call is returned together with a
- new <c><anno>Continuation</anno></c> that can be used in subsequent calls
- to this function.</p>
- <p><c>'$end_of_table'</c> is returned when there are no more
- objects in the table.</p>
+ <p>Works like <seealso marker="#match_object/2">
+ <c>match_object/2</c></seealso>, but only returns a
+ limited (<c><anno>Limit</anno></c>) number of matching objects. Term
+ <c><anno>Continuation</anno></c> can then be used in subsequent
+ calls to <seealso marker="#match_object/1">
+ <c>match_object/1</c></seealso> to get the next chunk of matching
+ objects. This is a space-efficient way to work on objects in a
+ table, which is faster than traversing the table object
+ by object using
+ <seealso marker="#first/1"><c>first/1</c></seealso> and
+ <seealso marker="#next/2"><c>next/2</c></seealso>.</p>
+ <p>If the table is empty, <c>'$end_of_table'</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="match_spec_compile" arity="1"/>
- <fsummary>Compiles a match specification into its internal representation</fsummary>
+ <fsummary>Compile a match specification into its internal representation.
+ </fsummary>
<desc>
- <p>This function transforms a
- <seealso marker="#match_spec">match_spec</seealso> into an
- internal representation that can be used in subsequent calls
- to <c>ets:match_spec_run/2</c>. The internal representation is
- opaque and can not be converted to external term format and
- then back again without losing its properties (meaning it can
- not be sent to a process on another node and still remain a
- valid compiled match_spec, nor can it be stored on disk).
- The validity of a compiled match_spec can be checked using
- <c>ets:is_compiled_ms/1</c>.</p>
- <p>If the term <c><anno>MatchSpec</anno></c> can not be compiled (does not
- represent a valid match_spec), a <c>badarg</c> fault is
- thrown.</p>
+ <p>Transforms a
+ <seealso marker="#match_spec">match specification</seealso> into an
+ internal representation that can be used in subsequent calls to
+ <seealso marker="#match_spec_run/2"><c>match_spec_run/2</c></seealso>.
+ The internal representation is
+ opaque and cannot be converted to external term format and
+ then back again without losing its properties (that is, it cannot
+ be sent to a process on another node and still remain a
+ valid compiled match specification, nor can it be stored on disk).
+ To check the validity of a compiled match specification, use
+ <seealso marker="#is_compiled_ms/1"><c>is_compiled_ms/1</c></seealso>.
+ </p>
+ <p>If term <c><anno>MatchSpec</anno></c> cannot be compiled (does not
+ represent a valid match specification), a <c>badarg</c> exception is
+ raised.</p>
<note>
- <p>This function has limited use in normal code, it is used by
- Dets to perform the <c>dets:select</c> operations.</p>
+ <p>This function has limited use in normal code. It is used by the
+ <seealso marker="dets"><c>dets</c></seealso> module
+ to perform the <c>dets:select()</c> operations.</p>
</note>
</desc>
</func>
+
<func>
<name name="match_spec_run" arity="2"/>
- <fsummary>Performs matching, using a compiled match_spec, on a list of tuples</fsummary>
+ <fsummary>Perform matching, using a compiled match specification on a
+ list of tuples.</fsummary>
<desc>
- <p>This function executes the matching specified in a
- compiled <seealso marker="#match_spec">match_spec</seealso> on
- a list of tuples. The <c><anno>CompiledMatchSpec</anno></c> term should be
- the result of a call to <c>ets:match_spec_compile/1</c> and
- is hence the internal representation of the match_spec one
- wants to use.</p>
- <p>The matching will be executed on each element in <c><anno>List</anno></c>
- and the function returns a list containing all results. If an
- element in <c><anno>List</anno></c> does not match, nothing is returned
+ <p>Executes the matching specified in a compiled
+ <seealso marker="#match_spec">match specification</seealso> on a list
+ of tuples. Term <c><anno>CompiledMatchSpec</anno></c> is to be
+ the result of a call to <seealso marker="#match_spec_compile/1">
+ <c>match_spec_compile/1</c></seealso> and is hence the internal
+ representation of the match specification one wants to use.</p>
+ <p>The matching is executed on each element in <c><anno>List</anno></c>
+ and the function returns a list containing all results. If an element
+ in <c><anno>List</anno></c> does not match, nothing is returned
for that element. The length of the result list is therefore
- equal or less than the the length of the parameter
- <c><anno>List</anno></c>. The two calls in the following example will give
- the same result (but certainly not the same execution
- time...):</p>
+ equal or less than the length of parameter <c><anno>List</anno></c>.
+ </p>
+ <p><em>Example:</em></p>
+ <p>The following two calls give the same result (but certainly not the
+ same execution time):</p>
<code type="none">
Table = ets:new...
-MatchSpec = ....
+MatchSpec = ...
% The following call...
ets:match_spec_run(ets:tab2list(Table),
ets:match_spec_compile(MatchSpec)),
-% ...will give the same result as the more common (and more efficient)
-ets:select(Table,MatchSpec),</code>
+% ...gives the same result as the more common (and more efficient)
+ets:select(Table, MatchSpec),</code>
<note>
- <p>This function has limited use in normal code, it is used by
- Dets to perform the <c>dets:select</c> operations and by
+ <p>This function has limited use in normal code. It is used by the
+ <seealso marker="dets"><c>dets</c></seealso> module
+ to perform the <c>dets:select()</c> operations and by
Mnesia during transactions.</p>
</note>
</desc>
</func>
+
<func>
<name name="member" arity="2"/>
- <fsummary>Tests for occurrence of a key in an ETS table</fsummary>
+ <fsummary>Tests for occurrence of a key in an ETS table.</fsummary>
<desc>
- <p>Works like <c>lookup/2</c>, but does not return the objects.
- The function returns <c>true</c> if one or more elements in
- the table has the key <c><anno>Key</anno></c>, <c>false</c> otherwise.</p>
+ <p>Works like <seealso marker="#lookup/2"><c>lookup/2</c></seealso>,
+ but does not return the objects. Returns <c>true</c> if one or more
+ elements in the table has key <c><anno>Key</anno></c>, otherwise
+ <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="new" arity="2"/>
<fsummary>Create a new ETS table.</fsummary>
<desc>
- <p>Creates a new table and returns a table identifier which can
+ <p>Creates a new table and returns a table identifier that can
be used in subsequent operations. The table identifier can be
sent to other processes so that a table can be shared between
different processes within a node.</p>
- <p>The parameter <c><anno>Options</anno></c> is a list of atoms which
- specifies table type, access rights, key position and if the
- table is named or not. If one or more options are left out,
- the default values are used. This means that not specifying
- any options (<c>[]</c>) is the same as specifying
- <c>[set, protected, {keypos,1}, {heir,none}, {write_concurrency,false}, {read_concurrency,false}]</c>.</p>
- <list type="bulleted">
+ <p>Parameter <c><anno>Options</anno></c> is a list of atoms that
+ specifies table type, access rights, key position, and whether the
+ table is named. Default values are used for omitted options.
+ This means that not specifying any options (<c>[]</c>) is the same
+ as specifying <c>[set, protected, {keypos,1}, {heir,none},
+ {write_concurrency,false}, {read_concurrency,false}]</c>.</p>
+ <taglist>
+ <tag><c>set</c></tag>
<item>
- <p><c>set</c>
- The table is a <c>set</c> table - one key, one object,
+ <p>The table is a <c>set</c> table: one key, one object,
no order among objects. This is the default table type.</p>
</item>
+ <tag><c>ordered_set</c></tag>
<item>
- <p><c>ordered_set</c>
- The table is a <c>ordered_set</c> table - one key, one
+ <p>The table is a <c>ordered_set</c> table: one key, one
object, ordered in Erlang term order, which is the order
implied by the &lt; and &gt; operators. Tables of this type
have a somewhat different behavior in some situations
- than tables of the other types. Most notably the
+ than tables of other types. Most notably, the
<c>ordered_set</c> tables regard keys as equal when they
<em>compare equal</em>, not only when they match. This
- means that to an <c>ordered_set</c>, the
- <c>integer()</c> <c>1</c> and the <c>float()</c> <c>1.0</c> are regarded as equal. This also means that the
+ means that to an <c>ordered_set</c> table, <c>integer()</c>
+ <c>1</c> and <c>float()</c> <c>1.0</c> are regarded as equal.
+ This also means that the
key used to lookup an element not necessarily
- <em>matches</em> the key in the elements returned, if
+ <em>matches</em> the key in the returned elements, if
<c>float()</c>'s and <c>integer()</c>'s are mixed in
keys of a table.</p>
</item>
+ <tag><c>bag</c></tag>
<item>
- <p><c>bag</c>
- The table is a <c>bag</c> table which can have many
+ <p>The table is a <c>bag</c> table, which can have many
objects, but only one instance of each object, per key.</p>
</item>
+ <tag><c>duplicate_bag</c></tag>
<item>
- <p><c>duplicate_bag</c>
- The table is a <c>duplicate_bag</c> table which can have
+ <p>The table is a <c>duplicate_bag</c> table, which can have
many objects, including multiple copies of the same
object, per key.</p>
</item>
+ <tag><c>public</c></tag>
<item>
- <p><c>public</c>
- Any process may read or write to the table.</p>
+ <p>Any process can read or write to the table.</p>
+ <marker id="protected"></marker>
</item>
+ <tag><c>protected</c></tag>
<item>
- <marker id="protected"></marker>
- <p><c>protected</c>
- The owner process can read and write to the table. Other
+ <p>The owner process can read and write to the table. Other
processes can only read the table. This is the default
setting for the access rights.</p>
+ <marker id="private"></marker>
</item>
+ <tag><c>private</c></tag>
<item>
- <marker id="private"></marker>
- <p><c>private</c>
- Only the owner process can read or write to the table.</p>
+ <p>Only the owner process can read or write to the table.</p>
</item>
+ <tag><c>named_table</c></tag>
<item>
- <p><c>named_table</c>
- If this option is present, the name <c><anno>Name</anno></c> is
+ <p>If this option is present, name <c><anno>Name</anno></c> is
associated with the table identifier. The name can then
be used instead of the table identifier in subsequent
operations.</p>
</item>
+ <tag><c>{keypos,<anno>Pos</anno>}</c></tag>
<item>
- <p><c>{keypos,<anno>Pos</anno>}</c>
- Specifies which element in the stored tuples should be
- used as key. By default, it is the first element, i.e.
- <c><anno>Pos</anno>=1</c>. However, this is not always appropriate. In
+ <p>Specifies which element in the stored tuples to use
+ as key. By default, it is the first element, that is,
+ <c><anno>Pos</anno>=1</c>. However, this is not always
+ appropriate. In
particular, we do not want the first element to be the
key if we want to store Erlang records in a table.</p>
- <p>Note that any tuple stored in the table must have at
+ <p>Notice that any tuple stored in the table must have at
least <c><anno>Pos</anno></c> number of elements.</p>
- </item>
- <item>
<marker id="heir"></marker>
- <p><c>{heir,<anno>Pid</anno>,<anno>HeirData</anno>} | {heir,none}</c><br></br>
- Set a process as heir. The heir will inherit the table if
- the owner terminates. The message
- <c>{'ETS-TRANSFER',tid(),FromPid,<anno>HeirData</anno>}</c> will be sent to
- the heir when that happens. The heir must be a local process.
- Default heir is <c>none</c>, which will destroy the table when
- the owner terminates.</p>
</item>
+ <tag><c>{heir,<anno>Pid</anno>,<anno>HeirData</anno>} |
+ {heir,none}</c></tag>
<item>
+ <p>Set a process as heir. The heir inherits the table if
+ the owner terminates. Message
+ <c>{'ETS-TRANSFER',tid(),FromPid,<anno>HeirData</anno>}</c> is
+ sent to the heir when that occurs. The heir must be a local
+ process. Default heir is <c>none</c>, which destroys the table
+ when the owner terminates.</p>
<marker id="new_2_write_concurrency"></marker>
- <p><c>{write_concurrency,boolean()}</c>
- Performance tuning. Default is <c>false</c>, in which case an operation that
- mutates (writes to) the table will obtain exclusive access,
- blocking any concurrent access of the same table until finished.
- If set to <c>true</c>, the table is optimized towards concurrent
- write access. Different objects of the same table can be mutated
- (and read) by concurrent processes. This is achieved to some degree
- at the expense of memory consumption and the performance of
- sequential access and concurrent reading.
- The <c>write_concurrency</c> option can be combined with the
- <seealso marker="#new_2_read_concurrency">read_concurrency</seealso>
- option. You typically want to combine these when large concurrent
- read bursts and large concurrent write bursts are common (see the
- documentation of the
- <seealso marker="#new_2_read_concurrency">read_concurrency</seealso>
- option for more information).
- Note that this option does not change any guarantees about
- <seealso marker="#concurrency">atomicy and isolation</seealso>.
- Functions that makes such promises over several objects (like
- <c>insert/2</c>) will gain less (or nothing) from this option.</p>
- <p>In current implementation, table type <c>ordered_set</c> is not
- affected by this option. Also, the memory consumption inflicted by
- both <c>write_concurrency</c> and <c>read_concurrency</c> is a
- constant overhead per table. This overhead can be especially large
- when both options are combined.</p>
</item>
+ <tag><c>{write_concurrency,boolean()}</c></tag>
<item>
+ <p>Performance tuning. Defaults to <c>false</c>, in which case an
+ operation that
+ mutates (writes to) the table obtains exclusive access,
+ blocking any concurrent access of the same table until finished.
+ If set to <c>true</c>, the table is optimized to concurrent
+ write access. Different objects of the same table can be mutated
+ (and read) by concurrent processes. This is achieved to some
+ degree at the expense of memory consumption and the performance
+ of sequential access and concurrent reading.</p>
+ <p>Option <c>write_concurrency</c> can be combined with option
+ <seealso marker="#new_2_read_concurrency">
+ <c>read_concurrency</c></seealso>. You typically want to combine
+ these when large concurrent read bursts and large concurrent
+ write bursts are common; for more information, see option
+ <seealso marker="#new_2_read_concurrency">
+ <c>read_concurrency</c></seealso>.</p>
+ <p>Notice that this option does not change any guarantees about
+ <seealso marker="#concurrency">atomicity and isolation</seealso>.
+ Functions that makes such promises over many objects (like
+ <seealso marker="#insert/2"><c>insert/2</c></seealso>)
+ gain less (or nothing) from this option.</p>
+ <p>Table type <c>ordered_set</c> is not affected by this option.
+ Also, the memory consumption inflicted by
+ both <c>write_concurrency</c> and <c>read_concurrency</c> is a
+ constant overhead per table. This overhead can be especially
+ large when both options are combined.</p>
<marker id="new_2_read_concurrency"></marker>
- <p><c>{read_concurrency,boolean()}</c>
- Performance tuning. Default is <c>false</c>. When set to
- <c>true</c>, the table is optimized for concurrent read
- operations. When this option is enabled on a runtime system with
- SMP support, read operations become much cheaper; especially on
- systems with multiple physical processors. However, switching
- between read and write operations becomes more expensive. You
- typically want to enable this option when concurrent read
- operations are much more frequent than write operations, or when
- concurrent reads and writes comes in large read and write
- bursts (i.e., lots of reads not interrupted by writes, and lots
- of writes not interrupted by reads). You typically do
- <em>not</em> want to enable this option when the common access
- pattern is a few read operations interleaved with a few write
- operations repeatedly. In this case you will get a performance
- degradation by enabling this option. The <c>read_concurrency</c>
- option can be combined with the
- <seealso marker="#new_2_write_concurrency">write_concurrency</seealso>
- option. You typically want to combine these when large concurrent
- read bursts and large concurrent write bursts are common.</p>
</item>
+ <tag><c>{read_concurrency,boolean()}</c></tag>
<item>
+ <p>Performance tuning. Defaults to <c>false</c>. When set to
+ <c>true</c>, the table is optimized for concurrent read
+ operations. When this option is enabled on a runtime system with
+ SMP support, read operations become much cheaper; especially on
+ systems with multiple physical processors. However, switching
+ between read and write operations becomes more expensive.</p>
+ <p>You typically want to enable this option when concurrent read
+ operations are much more frequent than write operations, or when
+ concurrent reads and writes comes in large read and write bursts
+ (that is, many reads not interrupted by writes, and many
+ writes not interrupted by reads).</p>
+ <p>You typically do
+ <em>not</em> want to enable this option when the common access
+ pattern is a few read operations interleaved with a few write
+ operations repeatedly. In this case, you would get a performance
+ degradation by enabling this option.</p>
+ <p>Option <c>read_concurrency</c> can be combined with option
+ <seealso marker="#new_2_write_concurrency">
+ <c>write_concurrency</c></seealso>.
+ You typically want to combine these when large concurrent
+ read bursts and large concurrent write bursts are common.</p>
<marker id="new_2_compressed"></marker>
- <p><c>compressed</c>
- If this option is present, the table data will be stored in a more compact format to
- consume less memory. The downside is that it will make table operations slower.
- Especially operations that need to inspect entire objects,
- such as <c>match</c> and <c>select</c>, will get much slower. The key element
- is not compressed in current implementation.</p>
</item>
- </list>
+ <tag><c>compressed</c></tag>
+ <item>
+ <p>If this option is present, the table data is stored in a more
+ compact format to consume less memory. However, it will make
+ table operations slower. Especially operations that need to
+ inspect entire objects, such as <c>match</c> and <c>select</c>,
+ get much slower. The key element is not compressed.</p>
+ </item>
+ </taglist>
</desc>
</func>
+
<func>
<name name="next" arity="2"/>
<fsummary>Return the next key in an ETS table.</fsummary>
<desc>
- <p>Returns the next key <c><anno>Key2</anno></c>, following the key
- <c><anno>Key1</anno></c> in the table <c><anno>Tab</anno></c>. If the table is of the
- <c>ordered_set</c> type, the next key in Erlang term order is
- returned. If the table is of any other type, the next key
- according to the table's internal order is returned. If there
- is no next key, <c>'$end_of_table'</c> is returned.</p>
- <p>Use <c>first/1</c> to find the first key in the table.</p>
- <p>Unless a table of type <c>set</c>, <c>bag</c> or
+ <p>Returns the next key <c><anno>Key2</anno></c>, following key
+ <c><anno>Key1</anno></c> in table <c><anno>Tab</anno></c>. For table
+ type <c>ordered_set</c>, the next key in Erlang term order is
+ returned. For other table types, the next key
+ according to the internal order of the table is returned. If no
+ next key exists, <c>'$end_of_table'</c> is returned.</p>
+ <p>To find the first key in the table, use
+ <seealso marker="#first/1"><c>first/1</c></seealso>.</p>
+ <p>Unless a table of type <c>set</c>, <c>bag</c>, or
<c>duplicate_bag</c> is protected using
- <c>safe_fixtable/2</c>, see below, a traversal may fail if
- concurrent updates are made to the table. If the table is of
+ <seealso marker="#safe_fixtable/2"><c>safe_fixtable/2</c></seealso>,
+ a traversal can fail if
+ concurrent updates are made to the table. For table
type <c>ordered_set</c>, the function returns the next key in
order, even if the object does no longer exist.</p>
</desc>
</func>
+
<func>
<name name="prev" arity="2"/>
- <fsummary>Return the previous key in an ETS table of type<c>ordered_set</c>.</fsummary>
+ <fsummary>Return the previous key in an ETS table of type
+ <c>ordered_set</c>.</fsummary>
<desc>
- <p>Returns the previous key <c><anno>Key2</anno></c>, preceding the key
- <c><anno>Key1</anno></c> according the Erlang term order in the table
- <c><anno>Tab</anno></c> of the <c>ordered_set</c> type. If the table is of
- any other type, the function is synonymous to <c>next/2</c>.
- If there is no previous key, <c>'$end_of_table'</c> is
- returned.</p>
- <p>Use <c>last/1</c> to find the last key in the table.</p>
+ <p>Returns the previous key <c><anno>Key2</anno></c>, preceding key
+ <c><anno>Key1</anno></c> according to Erlang term order in table
+ <c><anno>Tab</anno></c> of type <c>ordered_set</c>. For other
+ table types, the function is synonymous to
+ <seealso marker="#next/2"><c>next/2</c></seealso>.
+ If no previous key exists, <c>'$end_of_table'</c> is returned.</p>
+ <p>To find the last key in the table, use
+ <seealso marker="#last/1"><c>last/1</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="rename" arity="2"/>
<fsummary>Rename a named ETS table.</fsummary>
<desc>
<p>Renames the named table <c><anno>Tab</anno></c> to the new name
- <c><anno>Name</anno></c>. Afterwards, the old name can not be used to
+ <c><anno>Name</anno></c>. Afterwards, the old name cannot be used to
access the table. Renaming an unnamed table has no effect.</p>
</desc>
</func>
+
<func>
<name name="repair_continuation" arity="2"/>
- <fsummary>Repair a continuation from ets:select/1 or ets:select/3 that has passed through external representation</fsummary>
+ <fsummary>Repair a continuation from <c>ets:select/1 or ets:select/3</c>
+ that has passed through external representation.</fsummary>
<desc>
- <p>This function can be used to restore an opaque continuation
- returned by <c>ets:select/3</c> or <c>ets:select/1</c> if the
+ <p>Restores an opaque continuation returned by
+ <seealso marker="#select/3"><c>select/3</c></seealso> or
+ <seealso marker="#select/1"><c>select/1</c></seealso> if the
continuation has passed through external term format (been
sent between nodes or stored on disk).</p>
<p>The reason for this function is that continuation terms
- contain compiled match_specs and therefore will be
- invalidated if converted to external term format. Given that
- the original match_spec is kept intact, the continuation can
+ contain compiled match specifications and therefore are
+ invalidated if converted to external term format. Given that the
+ original match specification is kept intact, the continuation can
be restored, meaning it can once again be used in subsequent
- <c>ets:select/1</c> calls even though it has been stored on
+ <c>select/1</c> calls even though it has been stored on
disk or on another node.</p>
- <p>As an example, the following sequence of calls will fail:</p>
+ <p><em>Examples:</em></p>
+ <p>The following sequence of calls fails:</p>
<code type="none">
T=ets:new(x,[]),
...
@@ -1089,7 +1240,9 @@ A
end),10),
Broken = binary_to_term(term_to_binary(C)),
ets:select(Broken).</code>
- <p>...while the following sequence will work:</p>
+ <p>The following sequence works, as the call to
+ <c>repair_continuation/2</c> reestablishes the (deliberately)
+ invalidated continuation <c>Broken</c>.</p>
<code type="none">
T=ets:new(x,[]),
...
@@ -1100,45 +1253,44 @@ end),
{_,C} = ets:select(T,MS,10),
Broken = binary_to_term(term_to_binary(C)),
ets:select(ets:repair_continuation(Broken,MS)).</code>
- <p>...as the call to <c>ets:repair_continuation/2</c> will
- reestablish the (deliberately) invalidated continuation
- <c>Broken</c>.</p>
<note>
- <p>This function is very rarely needed in application code. It
- is used by Mnesia to implement distributed <c>select/3</c>
+ <p>This function is rarely needed in application code. It is used
+ by Mnesia to provide distributed <c>select/3</c>
and <c>select/1</c> sequences. A normal application would
either use Mnesia or keep the continuation from being
converted to external format.</p>
<p>The reason for not having an external representation of a
- compiled match_spec is performance. It may be subject to
- change in future releases, while this interface will remain
+ compiled match specification is performance. It can be subject to
+ change in future releases, while this interface remains
for backward compatibility.</p>
</note>
</desc>
</func>
+
<func>
<name name="safe_fixtable" arity="2"/>
<fsummary>Fix an ETS table for safe traversal.</fsummary>
<desc>
- <p>Fixes a table of the <c>set</c>, <c>bag</c> or
- <c>duplicate_bag</c> table type for safe traversal.</p>
+ <p>Fixes a table of type <c>set</c>, <c>bag</c>, or
+ <c>duplicate_bag</c> for safe traversal.</p>
<p>A process fixes a table by calling
- <c>safe_fixtable(<anno>Tab</anno>, true)</c>. The table remains fixed until
- the process releases it by calling
+ <c>safe_fixtable(<anno>Tab</anno>, true)</c>. The table remains
+ fixed until the process releases it by calling
<c>safe_fixtable(<anno>Tab</anno>, false)</c>, or until the process
terminates.</p>
- <p>If several processes fix a table, the table will remain fixed
+ <p>If many processes fix a table, the table remains fixed
until all processes have released it (or terminated).
A reference counter is kept on a per process basis, and N
- consecutive fixes requires N releases to actually release
- the table.</p>
- <p>When a table is fixed, a sequence of <c>first/1</c> and
- <c>next/2</c> calls are guaranteed to succeed and each object in
- the table will only be returned once, even if objects
- are removed or inserted during the traversal.
- The keys for new objects inserted during the traversal <em>may</em>
- be returned by <seealso marker="#next/2">next/2</seealso>
- (it depends on the internal ordering of the keys). An example:</p>
+ consecutive fixes requires N releases to release the table.</p>
+ <p>When a table is fixed, a sequence of
+ <seealso marker="#first/1"><c>first/1</c></seealso> and
+ <seealso marker="#next/2"><c>next/2</c></seealso> calls are
+ guaranteed to succeed, and each object in
+ the table is returned only once, even if objects
+ are removed or inserted during the traversal. The keys for new
+ objects inserted during the traversal <em>can</em> be returned by
+ <c>next/2</c> (it depends on the internal ordering of the keys).</p>
+ <p><em>Example:</em></p>
<code type="none">
clean_all_with_value(Tab,X) ->
safe_fixtable(Tab,true),
@@ -1155,218 +1307,205 @@ clean_all_with_value(Tab,X,Key) ->
true
end,
clean_all_with_value(Tab,X,ets:next(Tab,Key)).</code>
- <p>Note that no deleted objects are actually removed from a
+ <p>Notice that no deleted objects are removed from a
fixed table until it has been released. If a process fixes a
table but never releases it, the memory used by the deleted
- objects will never be freed. The performance of operations on
- the table will also degrade significantly.</p>
- <p>Use
- <seealso marker="#info_2_safe_fixed_monotonic_time"><c>info(Tab,
- safe_fixed_monotonic_time)</c></seealso> to retrieve information
- about which processes have fixed which tables. A system with a lot
- of processes fixing tables may need a monitor which sends alarms
+ objects is never freed. The performance of operations on
+ the table also degrades significantly.</p>
+ <p>To retrieve information about which processes have fixed which
+ tables, use <seealso marker="#info_2_safe_fixed_monotonic_time">
+ <c>info(Tab, safe_fixed_monotonic_time)</c></seealso>. A system with
+ many processes fixing tables can need a monitor that sends alarms
when tables have been fixed for too long.</p>
- <p>Note that for tables of the <c>ordered_set</c> type,
- <c>safe_fixtable/2</c> is not necessary as calls to
- <c>first/1</c> and <c>next/2</c> will always succeed.</p>
+ <p>Notice that for table type <c>ordered_set</c>,
+ <c>safe_fixtable/2</c> is not necessary, as calls to
+ <c>first/1</c> and <c>next/2</c> always succeed.</p>
</desc>
</func>
+
+ <func>
+ <name name="select" arity="1"/>
+ <fsummary>Continue matching objects in an ETS table.</fsummary>
+ <desc>
+ <p>Continues a match started with
+ <seealso marker="#select/3"><c>select/3</c></seealso>. The next
+ chunk of the size specified in the initial <c>select/3</c>
+ call is returned together with a new <c><anno>Continuation</anno></c>,
+ which can be used in subsequent calls to this function.</p>
+ <p>When there are no more objects in the table, <c>'$end_of_table'</c>
+ is returned.</p>
+ </desc>
+ </func>
+
<func>
<name name="select" arity="2"/>
- <fsummary>Match the objects in an ETS table against a match_spec.</fsummary>
+ <fsummary>Match the objects in an ETS table against a
+ match specification.</fsummary>
<desc>
- <p>Matches the objects in the table <c><anno>Tab</anno></c> using a
- <seealso marker="#match_spec">match_spec</seealso>. This is a
- more general call than the <c>ets:match/2</c> and
- <c>ets:match_object/2</c> calls. In its simplest forms the
- match_specs look like this:</p>
- <list type="bulleted">
- <item>MatchSpec = [MatchFunction]</item>
- <item>MatchFunction = {MatchHead, [Guard], [Result]}</item>
- <item>MatchHead = "Pattern as in ets:match"</item>
- <item>Guard = {"Guardtest name", ...}</item>
- <item>Result = "Term construct"</item>
- </list>
- <p>This means that the match_spec is always a list of one or
- more tuples (of arity 3). The tuples first element should be
- a pattern as described in the documentation of
- <c>ets:match/2</c>. The second element of the tuple should
+ <p>Matches the objects in table <c><anno>Tab</anno></c> using a
+ <seealso marker="#match_spec">match specification</seealso>.
+ This is a more general call than
+ <seealso marker="#match/2"><c>match/2</c></seealso> and
+ <seealso marker="#match_object/2"><c>match_object/2</c></seealso>
+ calls. In its simplest form, the match specification is as
+ follows:</p>
+ <code type="none">
+MatchSpec = [MatchFunction]
+MatchFunction = {MatchHead, [Guard], [Result]}
+MatchHead = "Pattern as in ets:match"
+Guard = {"Guardtest name", ...}
+Result = "Term construct"</code>
+ <p>This means that the match specification is always a list of one or
+ more tuples (of arity 3). The first element of the tuple is to be
+ a pattern as described in
+ <seealso marker="#match/2"><c>match/2</c></seealso>.
+ The second element of the tuple is to
be a list of 0 or more guard tests (described below). The
- third element of the tuple should be a list containing a
- description of the value to actually return. In almost all
- normal cases the list contains exactly one term which fully
+ third element of the tuple is to be a list containing a
+ description of the value to return. In almost all
+ normal cases, the list contains exactly one term that fully
describes the value to return for each object.</p>
<p>The return value is constructed using the "match variables"
- bound in the MatchHead or using the special match variables
+ bound in <c>MatchHead</c> or using the special match variables
<c>'$_'</c> (the whole matching object) and <c>'$$'</c> (all
match variables in a list), so that the following
- <c>ets:match/2</c> expression:</p>
+ <c>match/2</c> expression:</p>
<code type="none">
ets:match(Tab,{'$1','$2','$3'})</code>
<p>is exactly equivalent to:</p>
<code type="none">
ets:select(Tab,[{{'$1','$2','$3'},[],['$$']}])</code>
- <p>- and the following <c>ets:match_object/2</c> call:</p>
+ <p>And that the following <c>match_object/2</c> call:</p>
<code type="none">
ets:match_object(Tab,{'$1','$2','$1'})</code>
<p>is exactly equivalent to</p>
<code type="none">
ets:select(Tab,[{{'$1','$2','$1'},[],['$_']}])</code>
<p>Composite terms can be constructed in the <c>Result</c> part
- either by simply writing a list, so that this code:</p>
+ either by simply writing a list, so that the following code:</p>
<code type="none">
ets:select(Tab,[{{'$1','$2','$3'},[],['$$']}])</code>
<p>gives the same output as:</p>
<code type="none">
ets:select(Tab,[{{'$1','$2','$3'},[],[['$1','$2','$3']]}])</code>
- <p>i.e. all the bound variables in the match head as a list. If
+ <p>That is, all the bound variables in the match head as a list. If
tuples are to be constructed, one has to write a tuple of
- arity 1 with the single element in the tuple being the tuple
- one wants to construct (as an ordinary tuple could be mistaken
- for a <c>Guard</c>). Therefore the following call:</p>
+ arity 1 where the single element in the tuple is the tuple
+ one wants to construct (as an ordinary tuple can be mistaken
+ for a <c>Guard</c>).</p>
+ <p>Therefore the following call:</p>
<code type="none">
ets:select(Tab,[{{'$1','$2','$1'},[],['$_']}])</code>
<p>gives the same output as:</p>
<code type="none">
ets:select(Tab,[{{'$1','$2','$1'},[],[{{'$1','$2','$3'}}]}])</code>
- <p>- this syntax is equivalent to the syntax used in the trace
- patterns (see
- <seealso marker="runtime_tools:dbg">dbg(3)</seealso>).</p>
- <p>The <c>Guard</c>s are constructed as tuples where the first
- element is the name of the test and the rest of the elements
- are the parameters of the test. To check for a specific type
+ <p>This syntax is equivalent to the syntax used in the trace
+ patterns (see the
+ <seealso marker="runtime_tools:dbg">
+ <c>dbg(3)</c></seealso>) module in Runtime_Tools.</p>
+ <p>The <c>Guard</c>s are constructed as tuples, where the first
+ element is the test name and the remaining elements
+ are the test parameters. To check for a specific type
(say a list) of the element bound to the match variable
<c>'$1'</c>, one would write the test as
<c>{is_list, '$1'}</c>. If the test fails, the object in the
- table will not match and the next <c>MatchFunction</c> (if
- any) will be tried. Most guard tests present in Erlang can be
+ table does not match and the next <c>MatchFunction</c> (if
+ any) is tried. Most guard tests present in Erlang can be
used, but only the new versions prefixed <c>is_</c> are
- allowed (like <c>is_float</c>, <c>is_atom</c> etc).</p>
+ allowed (<c>is_float</c>, <c>is_atom</c>, and so on).</p>
<p>The <c>Guard</c> section can also contain logic and
arithmetic operations, which are written with the same syntax
- as the guard tests (prefix notation), so that a guard test
- written in Erlang looking like this:</p>
+ as the guard tests (prefix notation), so that the following
+ guard test written in Erlang:</p>
<code type="none"><![CDATA[
is_integer(X), is_integer(Y), X + Y < 4711]]></code>
- <p>is expressed like this (X replaced with '$1' and Y with
- '$2'):</p>
+ <p>is expressed as follows (<c>X</c> replaced with <c>'$1'</c> and
+ <c>Y</c> with <c>'$2'</c>):</p>
<code type="none"><![CDATA[
[{is_integer, '$1'}, {is_integer, '$2'}, {'<', {'+', '$1', '$2'}, 4711}]]]></code>
- <p>On tables of the <c>ordered_set</c> type, objects are visited
- in the same order as in a <c>first/next</c>
- traversal. This means that the match specification will be
- executed against objects with keys in the <c>first/next</c>
- order and the corresponding result list will be in the order of that
+ <p>For tables of type <c>ordered_set</c>, objects are visited
+ in the same order as in a <c>first</c>/<c>next</c>
+ traversal. This means that the match specification is
+ executed against objects with keys in the <c>first</c>/<c>next</c>
+ order and the corresponding result list is in the order of that
execution.</p>
-
</desc>
</func>
+
<func>
<name name="select" arity="3"/>
- <fsummary>Match the objects in an ETS table against a match_spec and returns part of the answers.</fsummary>
+ <fsummary>Match the objects in an ETS table against a match
+ specification and return part of the answers.</fsummary>
<desc>
- <p>Works like <c>ets:select/2</c> but only returns a limited
- (<c><anno>Limit</anno></c>) number of matching objects. The
- <c><anno>Continuation</anno></c> term can then be used in subsequent calls
- to <c>ets:select/1</c> to get the next chunk of matching
- objects. This is a space efficient way to work on objects in a
- table which is still faster than traversing the table object
- by object using <c>ets:first/1</c> and <c>ets:next/1</c>.</p>
- <p><c>'$end_of_table'</c> is returned if the table is empty.</p>
- </desc>
- </func>
- <func>
- <name name="select" arity="1"/>
- <fsummary>Continue matching objects in an ETS table.</fsummary>
- <desc>
- <p>Continues a match started with
- <c>ets:select/3</c>. The next
- chunk of the size given in the initial <c>ets:select/3</c>
- call is returned together with a new <c><anno>Continuation</anno></c>
- that can be used in subsequent calls to this function.</p>
- <p><c>'$end_of_table'</c> is returned when there are no more
- objects in the table.</p>
+ <p>Works like <seealso marker="#select/2"><c>select/2</c></seealso>,
+ but only returns a limited
+ (<c><anno>Limit</anno></c>) number of matching objects. Term
+ <c><anno>Continuation</anno></c> can then be used in subsequent
+ calls to <seealso marker="#select/1"><c>select/1</c></seealso>
+ to get the next chunk of matching
+ objects. This is a space-efficient way to work on objects in a
+ table, which is still faster than traversing the table object by
+ object using <seealso marker="#first/1"><c>first/1</c></seealso>
+ and <seealso marker="#next/2"><c>next/2</c></seealso>.</p>
+ <p>If the table is empty, <c>'$end_of_table'</c> is returned.</p>
</desc>
</func>
+
<func>
<name name="select_count" arity="2"/>
- <fsummary>Match the objects in an ETS table against a match_spec and returns the number of objects for which the match_spec returned 'true'</fsummary>
+ <fsummary>Match the objects in an ETS table against a match
+ specification and return the number of objects for which the match
+ specification returned <c>true</c>.</fsummary>
<desc>
- <p>Matches the objects in the table <c><anno>Tab</anno></c> using a
- <seealso marker="#match_spec">match_spec</seealso>. If the
- match_spec returns <c>true</c> for an object, that object
+ <p>Matches the objects in table <c><anno>Tab</anno></c> using a
+ <seealso marker="#match_spec">match specification</seealso>. If the
+ match specification returns <c>true</c> for an object, that object
considered a match and is counted. For any other result from
- the match_spec the object is not considered a match and is
+ the match specification the object is not considered a match and is
therefore not counted.</p>
- <p>The function could be described as a <c>match_delete/2</c>
- that does not actually delete any elements, but only counts
- them.</p>
+ <p>This function can be described as a
+ <seealso marker="#match_delete/2"><c>match_delete/2</c></seealso>
+ function that does not delete any elements, but only counts them.</p>
<p>The function returns the number of objects matched.</p>
</desc>
</func>
+
<func>
<name name="select_delete" arity="2"/>
- <fsummary>Match the objects in an ETS table against a match_spec and deletes objects where the match_spec returns 'true'</fsummary>
+ <fsummary>Match the objects in an ETS table against a match
+ specification and delete objects where the match specification
+ returns <c>true</c>.</fsummary>
<desc>
- <p>Matches the objects in the table <c><anno>Tab</anno></c> using a
- <seealso marker="#match_spec">match_spec</seealso>. If the
- match_spec returns <c>true</c> for an object, that object is
- removed from the table. For any other result from the
- match_spec the object is retained. This is a more general
- call than the <c>ets:match_delete/2</c> call.</p>
- <p>The function returns the number of objects actually
+ <p>Matches the objects in table <c><anno>Tab</anno></c> using a
+ <seealso marker="#match_spec">match specification</seealso>. If the
+ match specification returns <c>true</c> for an object, that object is
+ removed from the table. For any other result from the match
+ specification the object is retained. This is a more general
+ call than the <seealso marker="#match_delete/2">
+ <c>match_delete/2</c></seealso> call.</p>
+ <p>The function returns the number of objects
deleted from the table.</p>
<note>
- <p>The <c>match_spec</c> has to return the atom <c>true</c> if
- the object is to be deleted. No other return value will get the
- object deleted, why one can not use the same match specification for
+ <p>The match specification has to return the atom <c>true</c> if
+ the object is to be deleted. No other return value gets the
+ object deleted. So one cannot use the same match specification for
looking up elements as for deleting them.</p>
</note>
</desc>
</func>
- <func>
- <name name="select_reverse" arity="2"/>
- <fsummary>Match the objects in an ETS table against a match_spec.</fsummary>
- <desc>
-
- <p>Works like <c>select/2</c>, but returns the list in reverse
- order for the <c>ordered_set</c> table type. For all other table
- types, the return value is identical to that of <c>select/2</c>.</p>
-
- </desc>
- </func>
- <func>
- <name name="select_reverse" arity="3"/>
- <fsummary>Match the objects in an ETS table against a match_spec and returns part of the answers.</fsummary>
- <desc>
-
- <p>Works like <c>select/3</c>, but for the <c>ordered_set</c>
- table type, traversing is done starting at the last object in
- Erlang term order and moves towards the first. For all other
- table types, the return value is identical to that of
- <c>select/3</c>.</p>
- <p>Note that this is <em>not</em> equivalent to
- reversing the result list of a <c>select/3</c> call, as the result list
- is not only reversed, but also contains the last <c><anno>Limit</anno></c>
- matching objects in the table, not the first.</p>
-
- </desc>
- </func>
<func>
<name name="select_reverse" arity="1"/>
<fsummary>Continue matching objects in an ETS table.</fsummary>
<desc>
-
- <p>Continues a match started with
- <c>ets:select_reverse/3</c>. If the table is an
- <c>ordered_set</c>, the traversal of the table will continue
- towards objects with keys earlier in the Erlang term order. The
- returned list will also contain objects with keys in reverse
- order.</p>
-
- <p>For all other table types, the behaviour is exactly that of <c>select/1</c>.</p>
- <p>Example:</p>
+ <p>Continues a match started with <seealso marker="#select_reverse/3">
+ <c>select_reverse/3</c></seealso>. For tables of type
+ <c>ordered_set</c>, the traversal of the table continues
+ to objects with keys earlier in the Erlang term order. The
+ returned list also contains objects with keys in reverse order.
+ For all other table types, the behavior is exactly that of
+ <seealso marker="#select/1"><c>select/1</c></seealso>.</p>
+ <p><em>Example:</em></p>
<code>
1> T = ets:new(x,[ordered_set]).
2> [ ets:insert(T,{N}) || N &lt;- lists:seq(1,10) ].
@@ -1384,217 +1523,288 @@ is_integer(X), is_integer(Y), X + Y < 4711]]></code>
8> R2.
[{2},{1}]
9> '$end_of_table' = ets:select_reverse(C2).
-...
- </code>
+...</code>
</desc>
</func>
+
+ <func>
+ <name name="select_reverse" arity="2"/>
+ <fsummary>Match the objects in an ETS table against a
+ match specification.</fsummary>
+ <desc>
+ <p>Works like <seealso marker="#select/2"><c>select/2</c></seealso>,
+ but returns the list in reverse order for table type <c>ordered_set</c>.
+ For all other table types, the return value is identical to that of
+ <c>select/2</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="select_reverse" arity="3"/>
+ <fsummary>Match the objects in an ETS table against a
+ match specification and return part of the answers.</fsummary>
+ <desc>
+ <p>Works like <seealso marker="#select/3"><c>select/3</c></seealso>,
+ but for table type <c>ordered_set</c>
+ traversing is done starting at the last object in
+ Erlang term order and moves to the first. For all other table
+ types, the return value is identical to that of <c>select/3</c>.</p>
+ <p>Notice that this is <em>not</em> equivalent to
+ reversing the result list of a <c>select/3</c> call, as the result list
+ is not only reversed, but also contains the last
+ <c><anno>Limit</anno></c>
+ matching objects in the table, not the first.</p>
+ </desc>
+ </func>
+
<func>
<name name="setopts" arity="2"/>
<fsummary>Set table options.</fsummary>
<desc>
- <p>Set table options. The only option that currently is allowed to be
- set after the table has been created is
- <seealso marker="#heir">heir</seealso>. The calling process must be
- the table owner.</p>
+ <p>Sets table options. The only allowed option to be set after the
+ table has been created is
+ <seealso marker="#heir"><c>heir</c></seealso>.
+ The calling process must be the table owner.</p>
</desc>
</func>
+
<func>
<name name="slot" arity="2"/>
- <fsummary>Return all objects in a given slot of an ETS table.</fsummary>
+ <fsummary>Return all objects in a specified slot of an ETS table.
+ </fsummary>
<desc>
<p>This function is mostly for debugging purposes, Normally
- one should use <c>first/next</c> or <c>last/prev</c> instead.</p>
- <p>Returns all objects in the <c><anno>I</anno></c>:th slot of the table
- <c><anno>Tab</anno></c>. A table can be traversed by repeatedly calling
- the function, starting with the first slot <c><anno>I</anno>=0</c> and
+ <c>first</c>/<c>next</c> or <c>last</c>/<c>prev</c> are to be used
+ instead.</p>
+ <p>Returns all objects in slot <c><anno>I</anno></c> of table
+ <c><anno>Tab</anno></c>. A table can be traversed by repeatedly
+ calling the function,
+ starting with the first slot <c><anno>I</anno>=0</c> and
ending when <c>'$end_of_table'</c> is returned.
- The function will fail with reason <c>badarg</c> if the
- <c><anno>I</anno></c> argument is out of range.</p>
- <p>Unless a table of type <c>set</c>, <c>bag</c> or
+ If argument <c><anno>I</anno></c> is out of range,
+ the function fails with reason <c>badarg</c>.</p>
+ <p>Unless a table of type <c>set</c>, <c>bag</c>, or
<c>duplicate_bag</c> is protected using
- <c>safe_fixtable/2</c>, see above, a traversal may fail if
- concurrent updates are made to the table. If the table is of
- type <c>ordered_set</c>, the function returns a list
- containing the <c><anno>I</anno></c>:th object in Erlang term order.</p>
+ <seealso marker="#safe_fixtable/2"><c>safe_fixtable/2</c></seealso>,
+ a traversal can fail if
+ concurrent updates are made to the table. For table type
+ <c>ordered_set</c>, the function returns a list containing
+ object <c><anno>I</anno></c> in Erlang term order.</p>
</desc>
</func>
+
<func>
<name name="tab2file" arity="2"/>
<fsummary>Dump an ETS table to a file.</fsummary>
<desc>
- <p>Dumps the table <c><anno>Tab</anno></c> to the file <c><anno>Filename</anno></c>.</p>
- <p>Equivalent to <c>tab2file(<anno>Tab</anno>, <anno>Filename</anno>,[])</c></p>
-
+ <p>Dumps table <c><anno>Tab</anno></c> to file
+ <c><anno>Filename</anno></c>.</p>
+ <p>Equivalent to
+ <c>tab2file(<anno>Tab</anno>, <anno>Filename</anno>,[])</c></p>
</desc>
</func>
+
<func>
<name name="tab2file" arity="3"/>
<fsummary>Dump an ETS table to a file.</fsummary>
<desc>
- <p>Dumps the table <c><anno>Tab</anno></c> to the file <c><anno>Filename</anno></c>.</p>
- <p>When dumping the table, certain information about the table
- is dumped to a header at the beginning of the dump. This
- information contains data about the table type,
- name, protection, size, version and if it's a named table. It
- also contains notes about what extended information is added
- to the file, which can be a count of the objects in the file
- or a MD5 sum of the header and records in the file.</p>
- <p>The size field in the header might not correspond to the
- actual number of records in the file if the table is public
- and records are added or removed from the table during
- dumping. Public tables updated during dump, and that one wants
- to verify when reading, needs at least one field of extended
- information for the read verification process to be reliable
- later.</p>
- <p>The <c>extended_info</c> option specifies what extra
- information is written to the table dump:</p>
- <taglist>
- <tag><c>object_count</c></tag>
- <item><p>The number of objects actually written to the file is
- noted in the file footer, why verification of file truncation
- is possible even if the file was updated during
- dump.</p></item>
- <tag><c>md5sum</c></tag>
- <item><p>The header and objects in the file are checksummed using
- the built in MD5 functions. The MD5 sum of all objects is
- written in the file footer, so that verification while reading
- will detect the slightest bitflip in the file data. Using this
- costs a fair amount of CPU time.</p></item>
- </taglist>
- <p>Whenever the <c>extended_info</c> option is used, it
- results in a file not readable by versions of ets prior to
- that in stdlib-1.15.1</p>
- <p>The <c>sync</c> option, if set to <c>true</c>, ensures that
- the content of the file is actually written to the disk before
- <c>tab2file</c> returns. Default is <c>{sync, false}</c>.</p>
+ <p>Dumps table <c><anno>Tab</anno></c> to file
+ <c><anno>Filename</anno></c>.</p>
+ <p>When dumping the table, some information about the table
+ is dumped to a header at the beginning of the dump. This
+ information contains data about the table type,
+ name, protection, size, version, and if it is a named table. It
+ also contains notes about what extended information is added
+ to the file, which can be a count of the objects in the file
+ or a MD5 sum of the header and records in the file.</p>
+ <p>The size field in the header might not correspond to the
+ number of records in the file if the table is public
+ and records are added or removed from the table during
+ dumping. Public tables updated during dump, and that one wants
+ to verify when reading, needs at least one field of extended
+ information for the read verification process to be reliable
+ later.</p>
+ <p>Option <c>extended_info</c> specifies what extra
+ information is written to the table dump:</p>
+ <taglist>
+ <tag><c>object_count</c></tag>
+ <item>
+ <p>The number of objects written to the file is
+ noted in the file footer, so file truncation can be
+ verified even if the file was updated during dump.</p>
+ </item>
+ <tag><c>md5sum</c></tag>
+ <item>
+ <p>The header and objects in the file are checksummed using
+ the built-in MD5 functions. The MD5 sum of all objects is
+ written in the file footer, so that verification while reading
+ detects the slightest bitflip in the file data. Using this
+ costs a fair amount of CPU time.</p>
+ </item>
+ </taglist>
+ <p>Whenever option <c>extended_info</c> is used, it
+ results in a file not readable by versions of ETS before
+ that in STDLIB 1.15.1</p>
+ <p>If option <c>sync</c> is set to <c>true</c>, it ensures that
+ the content of the file is written to the disk before
+ <c>tab2file</c> returns. Defaults to <c>{sync, false}</c>.</p>
</desc>
</func>
+
<func>
<name name="tab2list" arity="1"/>
<fsummary>Return a list of all objects in an ETS table.</fsummary>
<desc>
- <p>Returns a list of all objects in the table <c><anno>Tab</anno></c>.</p>
+ <p>Returns a list of all objects in table <c><anno>Tab</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="tabfile_info" arity="1"/>
<fsummary>Return a list of all objects in an ETS table.</fsummary>
<desc>
- <p>Returns information about the table dumped to file by
- <seealso marker="#tab2file/2">tab2file/2</seealso> or
- <seealso marker="#tab2file/3">tab2file/3</seealso></p>
- <p>The following items are returned:</p>
- <taglist>
- <tag>name</tag>
- <item><p>The name of the dumped table. If the table was a
- named table, a table with the same name cannot exist when the
- table is loaded from file with
- <seealso marker="#file2tab/2">file2tab/2</seealso>. If the table is
- not saved as a named table, this field has no significance
- at all when loading the table from file.</p></item>
- <tag>type</tag>
- <item>The ets type of the dumped table (i.e. <c>set</c>, <c>bag</c>,
- <c>duplicate_bag</c> or <c>ordered_set</c>). This type will be used
- when loading the table again.</item>
- <tag>protection</tag>
- <item>The protection of the dumped table (i.e. <c>private</c>,
- <c>protected</c> or <c>public</c>). A table loaded from the file
- will get the same protection.</item>
- <tag>named_table</tag>
- <item><c>true</c> if the table was a named table when dumped
- to file, otherwise <c>false</c>. Note that when a named table
- is loaded from a file, there cannot exist a table in the
- system with the same name.</item>
- <tag>keypos</tag>
- <item>The <c>keypos</c> of the table dumped to file, which
- will be used when loading the table again.</item>
- <tag>size</tag>
- <item>The number of objects in the table when the table dump
- to file started, which in case of a <c>public</c> table need
- not correspond to the number of objects actually saved to the
- file, as objects might have been added or deleted by another
- process during table dump.</item>
- <tag>extended_info</tag>
- <item>The extended information written in the file footer to
- allow stronger verification during table loading from file, as
- specified to <seealso
- marker="#tab2file/3">tab2file/3</seealso>. Note that this
- function only tells <em>which</em> information is present, not
- the values in the file footer. The value is a list containing
- one or more of the atoms <c>object_count</c> and
- <c>md5sum</c>.</item>
- <tag>version</tag>
- <item>A tuple <c>{<anno>Major</anno>,<anno>Minor</anno>}</c> containing the major and
- minor version of the file format for ets table dumps. This
- version field was added beginning with stdlib-1.5.1, files
- dumped with older versions will return <c>{0,0}</c> in this
- field.</item>
- </taglist>
- <p>An error is returned if the file is inaccessible,
- badly damaged or not an file produced with <seealso
- marker="#tab2file/2">tab2file/2</seealso> or <seealso
- marker="#tab2file/3">tab2file/3</seealso>.</p>
+ <p>Returns information about the table dumped to file by
+ <seealso marker="#tab2file/2"><c>tab2file/2</c></seealso> or
+ <seealso marker="#tab2file/3"><c>tab2file/3</c></seealso>.</p>
+ <p>The following items are returned:</p>
+ <taglist>
+ <tag><c>name</c></tag>
+ <item>
+ <p>The name of the dumped table. If the table was a
+ named table, a table with the same name cannot exist when the
+ table is loaded from file with
+ <seealso marker="#file2tab/2"><c>file2tab/2</c></seealso>.
+ If the table is
+ not saved as a named table, this field has no significance
+ when loading the table from file.</p>
+ </item>
+ <tag><c>type</c></tag>
+ <item>
+ <p>The ETS type of the dumped table (that is, <c>set</c>,
+ <c>bag</c>, <c>duplicate_bag</c>, or <c>ordered_set</c>). This
+ type is used when loading the table again.</p>
+ </item>
+ <tag><c>protection</c></tag>
+ <item>
+ <p>The protection of the dumped table (that is, <c>private</c>,
+ <c>protected</c>, or <c>public</c>). A table loaded from the
+ file gets the same protection.</p>
+ </item>
+ <tag><c>named_table</c></tag>
+ <item>
+ <p><c>true</c> if the table was a named table when dumped
+ to file, otherwise <c>false</c>. Notice that when a named table
+ is loaded from a file, there cannot exist a table in the
+ system with the same name.</p>
+ </item>
+ <tag><c>keypos</c></tag>
+ <item>
+ <p>The <c>keypos</c> of the table dumped to file, which
+ is used when loading the table again.</p>
+ </item>
+ <tag><c>size</c></tag>
+ <item>
+ <p>The number of objects in the table when the table dump
+ to file started. For a <c>public</c> table, this number
+ does not need to correspond to the number of objects saved to
+ the file, as objects can have been added or deleted by another
+ process during table dump.</p>
+ </item>
+ <tag><c>extended_info</c></tag>
+ <item>
+ <p>The extended information written in the file footer to
+ allow stronger verification during table loading from file, as
+ specified to <seealso marker="#tab2file/3">
+ <c>tab2file/3</c></seealso>. Notice that this
+ function only tells <em>which</em> information is present, not
+ the values in the file footer. The value is a list containing one
+ or more of the atoms <c>object_count</c> and <c>md5sum</c>.</p>
+ </item>
+ <tag><c>version</c></tag>
+ <item>
+ <p>A tuple <c>{<anno>Major</anno>,<anno>Minor</anno>}</c>
+ containing the major and
+ minor version of the file format for ETS table dumps. This
+ version field was added beginning with STDLIB 1.5.1.
+ Files dumped with older versions return <c>{0,0}</c> in this
+ field.</p>
+ </item>
+ </taglist>
+ <p>An error is returned if the file is inaccessible,
+ badly damaged, or not produced with
+ <seealso marker="#tab2file/2"><c>tab2file/2</c></seealso> or
+ <seealso marker="#tab2file/3"><c>tab2file/3</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="table" arity="1"/>
<name name="table" arity="2"/>
<fsummary>Return a QLC query handle.</fsummary>
<desc>
- <p><marker id="qlc_table"></marker>Returns a QLC (Query List
- Comprehension) query handle. The module <c>qlc</c> implements
- a query language aimed mainly at Mnesia but ETS tables, Dets
- tables, and lists are also recognized by QLC as sources of
- data. Calling <c>ets:table/1,2</c> is the means to make the
+ <p>Returns a Query List
+ Comprehension (QLC) query handle. The
+ <seealso marker="qlc"><c>qlc</c></seealso> module provides
+ a query language aimed mainly at Mnesia, but ETS
+ tables, Dets tables,
+ and lists are also recognized by QLC as sources of
+ data. Calling <c>table/1,2</c> is the means to make the
ETS table <c>Tab</c> usable to QLC.</p>
- <p>When there are only simple restrictions on the key position
- QLC uses <c>ets:lookup/2</c> to look up the keys, but when
- that is not possible the whole table is traversed. The
- option <c>traverse</c> determines how this is done:</p>
- <list type="bulleted">
+ <p>When there are only simple restrictions on the key position,
+ QLC uses <seealso marker="#lookup/2"><c>lookup/2</c></seealso>
+ to look up the keys. When
+ that is not possible, the whole table is traversed.
+ Option <c>traverse</c> determines how this is done:</p>
+ <taglist>
+ <tag><c>first_next</c></tag>
<item>
- <p><c>first_next</c>. The table is traversed one key at
- a time by calling <c>ets:first/1</c> and
- <c>ets:next/2</c>.</p>
+ <p>The table is traversed one key at a time by calling
+ <seealso marker="#first/1"><c>first/1</c></seealso> and
+ <seealso marker="#next/2"><c>next/2</c></seealso>.</p>
</item>
+ <tag><c>last_prev</c></tag>
<item>
- <p><c>last_prev</c>. The table is traversed one key at
- a time by calling <c>ets:last/1</c> and
- <c>ets:prev/2</c>.</p>
+ <p>The table is traversed one key at a time by calling
+ <seealso marker="#last/1"><c>last/1</c></seealso> and
+ <seealso marker="#prev/2"><c>prev/2</c></seealso>.</p>
</item>
+ <tag><c>select</c></tag>
<item>
- <p><c>select</c>. The table is traversed by calling
- <c>ets:select/3</c> and <c>ets:select/1</c>. The option
- <c>n_objects</c> determines the number of objects
+ <p>The table is traversed by calling
+ <seealso marker="#select/3"><c>select/3</c></seealso> and
+ <seealso marker="#select/1"><c>select/1</c></seealso>.
+ Option <c>n_objects</c> determines the number of objects
returned (the third argument of <c>select/3</c>); the
default is to return <c>100</c> objects at a time. The
- <seealso marker="#match_spec">match_spec</seealso> (the
- second argument of <c>select/3</c>) is assembled by QLC:
- simple filters are translated into equivalent match_specs
- while more complicated filters have to be applied to all
- objects returned by <c>select/3</c> given a match_spec
+ <seealso marker="#match_spec">match specification</seealso> (the
+ second argument of <c>select/3</c>) is assembled by QLC: simple
+ filters are translated into equivalent match specifications
+ while more complicated filters must be applied to all
+ objects returned by <c>select/3</c> given a match specification
that matches all objects.</p>
</item>
+ <tag><c>{select, <anno>MatchSpec</anno>}</c></tag>
<item>
- <p><c>{select, <anno>MatchSpec</anno>}</c>. As for <c>select</c>
- the table is traversed by calling <c>ets:select/3</c> and
- <c>ets:select/1</c>. The difference is that the
- match_spec is explicitly given. This is how to state
- match_specs that cannot easily be expressed within the
- syntax provided by QLC.</p>
+ <p>As for <c>select</c>, the table is traversed by calling
+ <seealso marker="#select/3"><c>select/3</c></seealso> and
+ <seealso marker="#select/1"><c>select/1</c></seealso>.
+ The difference is that the match specification is explicitly
+ specified. This is how to state match specifications that cannot
+ easily be expressed within the syntax provided by QLC.</p>
</item>
- </list>
- <p>The following example uses an explicit match_spec to
- traverse the table:</p>
+ </taglist>
+ <p><em>Examples:</em></p>
+ <p>An explicit match specification is here used to traverse the
+ table:</p>
<pre>
9> <input>true = ets:insert(Tab = ets:new(t, []), [{1,a},{2,b},{3,c},{4,d}]),</input>
<input>MS = ets:fun2ms(fun({X,Y}) when (X > 1) or (X &lt; 5) -> {Y} end),</input>
<input>QH1 = ets:table(Tab, [{traverse, {select, MS}}]).</input></pre>
- <p>An example with implicit match_spec:</p>
+ <p>An example with an implicit match specification:</p>
<pre>
10> <input>QH2 = qlc:q([{Y} || {X,Y} &lt;- ets:table(Tab), (X > 1) or (X &lt; 5)]).</input></pre>
- <p>The latter example is in fact equivalent to the former which
- can be verified using the function <c>qlc:info/1</c>:</p>
+ <p>The latter example is equivalent to the former, which
+ can be verified using function <c>qlc:info/1</c>:</p>
<pre>
11> <input>qlc:info(QH1) =:= qlc:info(QH2).</input>
true</pre>
@@ -1603,52 +1813,60 @@ true</pre>
two query handles.</p>
</desc>
</func>
+
+ <func>
+ <name name="take" arity="2"/>
+ <fsummary>Return and remove all objects with a specified key from an
+ ETS table.</fsummary>
+ <desc>
+ <p>Returns and removes a list of all objects with key
+ <c><anno>Key</anno></c> in table <c><anno>Tab</anno></c>.</p>
+ <p>The specified <c><anno>Key</anno></c> is used to identify the object
+ by either <em>comparing equal</em> the key of an object in an
+ <c>ordered_set</c> table, or <em>matching</em> in other types of
+ tables (for details on the difference, see
+ <seealso marker="#lookup/2"><c>lookup/2</c></seealso> and
+ <seealso marker="#new/2"><c>new/2</c></seealso>).</p>
+ </desc>
+ </func>
<func>
<name name="test_ms" arity="2"/>
- <fsummary>Test a match_spec for use in ets:select/2.</fsummary>
+ <fsummary>Test a match specification for use in <c>select/2</c>.
+ </fsummary>
<desc>
<p>This function is a utility to test a
- <seealso marker="#match_spec">match_spec</seealso> used in
- calls to <c>ets:select/2</c>. The function both tests
- <c><anno>MatchSpec</anno></c> for "syntactic" correctness and runs the
- match_spec against the object <c><anno>Tuple</anno></c>. If the match_spec
- contains errors, the tuple <c>{error, <anno>Errors</anno>}</c> is returned
+ <seealso marker="#match_spec">match specification</seealso> used in
+ calls to <seealso marker="#select/2"><c>select/2</c></seealso>.
+ The function both tests <c><anno>MatchSpec</anno></c> for "syntactic"
+ correctness and runs the match specification against object
+ <c><anno>Tuple</anno></c>.</p>
+ <p>If the match specification is syntactically correct, the function
+ either returns <c>{ok,<anno>Result</anno>}</c>, where
+ <c><anno>Result</anno></c> is what would have been the result in a
+ real <c>select/2</c> call, or <c>false</c> if the match specification
+ does not match object <c><anno>Tuple</anno></c>.</p>
+ <p>If the match specification contains errors, tuple
+ <c>{error, <anno>Errors</anno>}</c> is returned,
where <c><anno>Errors</anno></c> is a list of natural language
- descriptions of what was wrong with the match_spec. If the
- match_spec is syntactically OK, the function returns
- <c>{ok,<anno>Result</anno>}</c> where <c><anno>Result</anno></c> is what would have been
- the result in a real <c>ets:select/2</c> call or <c>false</c>
- if the match_spec does not match the object <c><anno>Tuple</anno></c>.</p>
+ descriptions of what was wrong with the match specification.</p>
<p>This is a useful debugging and test tool, especially when
- writing complicated <c>ets:select/2</c> calls.</p>
+ writing complicated <c>select/2</c> calls.</p>
<p>See also: <seealso marker="erts:erlang#match_spec_test/3">
erlang:match_spec_test/3</seealso>.</p>
</desc>
</func>
- <func>
- <name name="take" arity="2"/>
- <fsummary>Return and remove all objects with a given key from an ETS
- table.</fsummary>
- <desc>
- <p>Returns a list of all objects with the key <c><anno>Key</anno></c> in
- the table <c><anno>Tab</anno></c> and removes.</p>
- <p>The given <c><anno>Key</anno></c> is used to identify the object by
- either <em>comparing equal</em> the key of an object in an
- <c>ordered_set</c> table, or <em>matching</em> in other types of
- tables (see <seealso marker="#lookup/2">lookup/2</seealso> and
- <seealso marker="#new/2">new/2</seealso> for details on the
- difference).</p>
- </desc>
- </func>
+
<func>
<name name="to_dets" arity="2"/>
- <fsummary>Fill a Dets table with objects from an ETS table.</fsummary>
+ <fsummary>Fill a Dets table with objects from an ETS table.
+ </fsummary>
<desc>
<p>Fills an already created/opened Dets table with the objects
- in the already opened ETS table named <c><anno>Tab</anno></c>. The Dets
- table is emptied before the objects are inserted.</p>
+ in the already opened ETS table named <c><anno>Tab</anno></c>.
+ The Dets table is emptied before the objects are inserted.</p>
</desc>
</func>
+
<func>
<name name="update_counter" arity="3" clause_i="1"/>
<name name="update_counter" arity="4" clause_i="1"/>
@@ -1666,107 +1884,112 @@ true</pre>
<type variable="Default"/>
<desc>
<p>This function provides an efficient way to update one or more
- counters, without the hassle of having to look up an object, update
- the object by incrementing an element and insert the resulting object
- into the table again. (The update is done atomically; i.e. no process
- can access the ets table in the middle of the operation.)
- </p>
- <p>It will destructively update the object with key <c><anno>Key</anno></c>
- in the table <c><anno>Tab</anno></c> by adding <c><anno>Incr</anno></c> to the element
- at the <c><anno>Pos</anno></c>:th position. The new counter value is
+ counters, without the trouble of having to look up an object, update
+ the object by incrementing an element, and insert the resulting
+ object into the table again. (The update is done atomically,
+ that is, no process
+ can access the ETS table in the middle of the operation.)</p>
+ <p>This function destructively update the object with key
+ <c><anno>Key</anno></c> in table <c><anno>Tab</anno></c> by adding
+ <c><anno>Incr</anno></c> to the element at position
+ <c><anno>Pos</anno></c>. The new counter value is
returned. If no position is specified, the element directly
- following the key (<c><![CDATA[<keypos>+1]]></c>) is updated.</p>
- <p>If a <c><anno>Threshold</anno></c> is specified, the counter will be
- reset to the value <c><anno>SetValue</anno></c> if the following
+ following key (<c><![CDATA[<keypos>+1]]></c>) is updated.</p>
+ <p>If a <c><anno>Threshold</anno></c> is specified, the counter is
+ reset to value <c><anno>SetValue</anno></c> if the following
conditions occur:</p>
<list type="bulleted">
- <item>The <c><anno>Incr</anno></c> is not negative (<c>>= 0</c>) and the
- result would be greater than (<c>></c>) <c><anno>Threshold</anno></c></item>
- <item>The <c><anno>Incr</anno></c> is negative (<c><![CDATA[< 0]]></c>) and the
- result would be less than (<c><![CDATA[<]]></c>)
- <c><anno>Threshold</anno></c></item>
+ <item><p><c><anno>Incr</anno></c> is not negative (<c>>= 0</c>) and
+ the result would be greater than (<c>></c>)
+ <c><anno>Threshold</anno></c>.</p>
+ </item>
+ <item><p><c><anno>Incr</anno></c> is negative
+ (<c><![CDATA[< 0]]></c>) and the result would be less than
+ (<c><![CDATA[<]]></c>) <c><anno>Threshold</anno></c>.</p>
+ </item>
</list>
- <p>A list of <c><anno>UpdateOp</anno></c> can be supplied to do several update
- operations within the object. The operations are carried out in the
- order specified in the list. If the same counter position occurs
- more than one time in the list, the corresponding counter will thus
- be updated several times, each time based on the previous result.
- The return value is a list of the new counter values from each
- update operation in the same order as in the operation list. If an
- empty list is specified, nothing is updated and an empty list is
- returned. If the function should fail, no updates will be done at
- all.
- </p>
- <p>The given <c><anno>Key</anno></c> is used to identify the object by either
- <em>matching</em> the key of an object in a <c>set</c> table,
- or <em>compare equal</em> to the key of an object in an
- <c>ordered_set</c> table (see
- <seealso marker="#lookup/2">lookup/2</seealso> and
- <seealso marker="#new/2">new/2</seealso>
- for details on the difference).</p>
- <p>If a default object <c><anno>Default</anno></c> is given, it is used
+ <p>A list of <c><anno>UpdateOp</anno></c> can be supplied to do many
+ update operations within the object.
+ The operations are carried out in the
+ order specified in the list. If the same counter position occurs
+ more than once in the list, the corresponding counter is thus
+ updated many times, each time based on the previous result.
+ The return value is a list of the new counter values from each
+ update operation in the same order as in the operation list. If an
+ empty list is specified, nothing is updated and an empty list is
+ returned. If the function fails, no updates is done.</p>
+ <p>The specified <c><anno>Key</anno></c> is used to identify the object
+ by either <em>matching</em> the key of an object in a <c>set</c>
+ table, or <em>compare equal</em> to the key of an object in an
+ <c>ordered_set</c> table (for details on the difference, see
+ <seealso marker="#lookup/2"><c>lookup/2</c></seealso> and
+ <seealso marker="#new/2"><c>new/2</c></seealso>).</p>
+ <p>If a default object <c><anno>Default</anno></c> is specified,
+ it is used
as the object to be updated if the key is missing from the table. The
value in place of the key is ignored and replaced by the proper key
value. The return value is as if the default object had not been used,
- that is a single updated element or a list of them.</p>
- <p>The function will fail with reason <c>badarg</c> if:</p>
+ that is, a single updated element or a list of them.</p>
+ <p>The function fails with reason <c>badarg</c> in the following
+ situations:</p>
<list type="bulleted">
- <item>the table is not of type <c>set</c> or
- <c>ordered_set</c>,</item>
- <item>no object with the right key exists and no default object were
- supplied,</item>
- <item>the object has the wrong arity,</item>
- <item>the default object arity is smaller than
- <c><![CDATA[<keypos>]]></c></item>
- <item>any field from the default object being updated is not an
- integer</item>
- <item>the element to update is not an integer,</item>
- <item>the element to update is also the key, or,</item>
- <item>any of <c><anno>Pos</anno></c>, <c><anno>Incr</anno></c>, <c><anno>Threshold</anno></c> or
- <c><anno>SetValue</anno></c> is not an integer</item>
+ <item>The table type is not <c>set</c> or
+ <c>ordered_set</c>.</item>
+ <item>No object with the correct key exists and no default object was
+ supplied.</item>
+ <item>The object has the wrong arity.</item>
+ <item>The default object arity is smaller than
+ <c><![CDATA[<keypos>]]></c>.</item>
+ <item>Any field from the default object that is updated is not an
+ integer.</item>
+ <item>The element to update is not an integer.</item>
+ <item>The element to update is also the key.</item>
+ <item>Any of <c><anno>Pos</anno></c>, <c><anno>Incr</anno></c>,
+ <c><anno>Threshold</anno></c>, or <c><anno>SetValue</anno></c>
+ is not an integer.</item>
</list>
</desc>
</func>
+
<func>
<name name="update_element" arity="3" clause_i="1"/>
<name name="update_element" arity="3" clause_i="2"/>
- <fsummary>Updates the <c>Pos</c>:th element of the object with a given key in an ETS table.</fsummary>
+ <fsummary>Update the <c>Pos</c>:th element of the object with a
+ specified key in an ETS table.</fsummary>
<type variable="Tab"/>
<type variable="Key"/>
<type variable="Value"/>
<type variable="Pos"/>
<desc>
<p>This function provides an efficient way to update one or more
- elements within an object, without the hassle of having to look up,
- update and write back the entire object.
- </p>
- <p>It will destructively update the object with key <c><anno>Key</anno></c>
- in the table <c><anno>Tab</anno></c>. The element at the <c><anno>Pos</anno></c>:th position
- will be given the value <c><anno>Value</anno></c>. </p>
- <p>A list of <c>{<anno>Pos</anno>,<anno>Value</anno>}</c> can be supplied to update several
- elements within the same object. If the same position occurs more
- than one in the list, the last value in the list will be written. If
- the list is empty or the function fails, no updates will be done at
- all. The function is also atomic in the sense that other processes
- can never see any intermediate results.
- </p>
- <p>The function returns <c>true</c> if an object with the key
- <c><anno>Key</anno></c> was found, <c>false</c> otherwise.
- </p>
- <p>The given <c><anno>Key</anno></c> is used to identify the object by either
- <em>matching</em> the key of an object in a <c>set</c> table,
- or <em>compare equal</em> to the key of an object in an
- <c>ordered_set</c> table (see
- <seealso marker="#lookup/2">lookup/2</seealso> and
- <seealso marker="#new/2">new/2</seealso>
- for details on the difference).</p>
- <p>The function will fail with reason <c>badarg</c> if:</p>
+ elements within an object, without the trouble of having to look up,
+ update, and write back the entire object.</p>
+ <p>This function destructively updates the object with key
+ <c><anno>Key</anno></c> in table <c><anno>Tab</anno></c>.
+ The element at position <c><anno>Pos</anno></c> is given
+ the value <c><anno>Value</anno></c>.</p>
+ <p>A list of <c>{<anno>Pos</anno>,<anno>Value</anno>}</c> can be
+ supplied to update many
+ elements within the same object. If the same position occurs more
+ than once in the list, the last value in the list is written. If
+ the list is empty or the function fails, no updates are done.
+ The function is also atomic in the sense that other processes
+ can never see any intermediate results.</p>
+ <p>Returns <c>true</c> if an object with key <c><anno>Key</anno></c>
+ is found, otherwise <c>false</c>.</p>
+ <p>The specified <c><anno>Key</anno></c> is used to identify the object
+ by either <em>matching</em> the key of an object in a <c>set</c>
+ table, or <em>compare equal</em> to the key of an object in an
+ <c>ordered_set</c> table (for details on the difference, see
+ <seealso marker="#lookup/2"><c>lookup/2</c></seealso> and
+ <seealso marker="#new/2"><c>new/2</c></seealso>).</p>
+ <p>The function fails with reason <c>badarg</c> in the following
+ situations:</p>
<list type="bulleted">
- <item>the table is not of type <c>set</c> or
- <c>ordered_set</c>,</item>
- <item><c><anno>Pos</anno></c> is less than 1 or greater than the object
- arity, or,</item>
- <item>the element to update is also the key</item>
+ <item>The table type is not <c>set</c> or <c>ordered_set</c>.</item>
+ <item><c><anno>Pos</anno></c> &lt; 1.</item>
+ <item><c><anno>Pos</anno></c> &gt; object arity.</item>
+ <item>The element to update is also the key.</item>
</list>
</desc>
</func>
diff --git a/lib/stdlib/doc/src/file_sorter.xml b/lib/stdlib/doc/src/file_sorter.xml
index bc24f02a99..e988d58c2f 100644
--- a/lib/stdlib/doc/src/file_sorter.xml
+++ b/lib/stdlib/doc/src/file_sorter.xml
@@ -24,125 +24,150 @@
<title>file_sorter</title>
<prepared>Hans Bolinder</prepared>
- <responsible>nobody</responsible>
+ <responsible></responsible>
<docno></docno>
- <approved>nobody</approved>
- <checked>no</checked>
+ <approved></approved>
+ <checked></checked>
<date>2001-03-13</date>
<rev>PA1</rev>
- <file>file_sorter.sgml</file>
+ <file>file_sorter.xml</file>
</header>
<module>file_sorter</module>
- <modulesummary>File Sorter</modulesummary>
+ <modulesummary>File sorter.</modulesummary>
<description>
- <p>The functions of this module sort terms on files, merge already
- sorted files, and check files for sortedness. Chunks containing
- binary terms are read from a sequence of files, sorted
+ <p>This module contains functions for sorting terms on files, merging
+ already sorted files, and checking files for sortedness. Chunks
+ containing binary terms are read from a sequence of files, sorted
internally in memory and written on temporary files, which are
merged producing one sorted file as output. Merging is provided
as an optimization; it is faster when the files are already
- sorted, but it always works to sort instead of merge.
- </p>
+ sorted, but it always works to sort instead of merge.</p>
+
<p>On a file, a term is represented by a header and a binary. Two
- options define the format of terms on files:
- </p>
- <list type="bulleted">
- <item><c>{header, HeaderLength}</c>. HeaderLength determines the
- number of bytes preceding each binary and containing the
- length of the binary in bytes. Default is 4. The order of the
- header bytes is defined as follows: if <c>B</c> is a binary
- containing a header only, the size <c>Size</c> of the binary
- is calculated as
- <c><![CDATA[<<Size:HeaderLength/unit:8>> = B]]></c>.
+ options define the format of terms on files:</p>
+
+ <taglist>
+ <tag><c>{header, HeaderLength}</c></tag>
+ <item>
+ <p><c>HeaderLength</c> determines the
+ number of bytes preceding each binary and containing the
+ length of the binary in bytes. Defaults to 4. The order of the
+ header bytes is defined as follows: if <c>B</c> is a binary
+ containing a header only, size <c>Size</c> of the binary
+ is calculated as
+ <c><![CDATA[<<Size:HeaderLength/unit:8>> = B]]></c>.</p>
</item>
- <item><c>{format, Format}</c>. The format determines the
- function that is applied to binaries in order to create the
- terms that will be sorted. The default value is
- <c>binary_term</c>, which is equivalent to
- <c>fun&nbsp;binary_to_term/1</c>. The value <c>binary</c> is
- equivalent to <c>fun(X) -> X end</c>, which means that the
- binaries will be sorted as they are. This is the fastest
- format. If <c>Format</c> is <c>term</c>, <c>io:read/2</c> is
- called to read terms. In that case only the default value of
- the <c>header</c> option is allowed. The <c>format</c> option
- also determines what is written to the sorted output file: if
- <c>Format</c> is <c>term</c> then <c>io:format/3</c> is called
- to write each term, otherwise the binary prefixed by a header
- is written. Note that the binary written is the same binary
- that was read; the results of applying the <c>Format</c>
- function are thrown away as soon as the terms have been
- sorted. Reading and writing terms using the <c>io</c> module
- is very much slower than reading and writing binaries.
+ <tag><c>{format, Format}</c></tag>
+ <item>
+ <p>Option <c>Format</c> determines the
+ function that is applied to binaries to create the
+ terms to be sorted. Defaults to
+ <c>binary_term</c>, which is equivalent to
+ <c>fun&nbsp;binary_to_term/1</c>. Value <c>binary</c> is
+ equivalent to <c>fun(X) -> X end</c>, which means that the
+ binaries are sorted as they are. This is the fastest
+ format. If <c>Format</c> is <c>term</c>, <c>io:read/2</c> is
+ called to read terms. In that case, only the default value of
+ option <c>header</c> is allowed.</p>
+ <p>Option <c>format</c> also determines what is written to the
+ sorted output file: if
+ <c>Format</c> is <c>term</c>, then <c>io:format/3</c> is called
+ to write each term, otherwise the binary prefixed by a header
+ is written. Notice that the binary written is the same binary
+ that was read; the results of applying function <c>Format</c>
+ are thrown away when the terms have been sorted.
+ Reading and writing terms using the <c>io</c> module
+ is much slower than reading and writing binaries.</p>
</item>
- </list>
- <p>Other options are:
- </p>
- <list type="bulleted">
- <item><c>{order, Order}</c>. The default is to sort terms in
- ascending order, but that can be changed by the value
- <c>descending</c> or by giving an ordering function <c>Fun</c>.
- An ordering function is antisymmetric, transitive and total.
- <c>Fun(A,&nbsp;B)</c> should return <c>true</c> if <c>A</c>
- comes before <c>B</c> in the ordering, <c>false</c> otherwise.
- An example of a typical ordering function is less than or equal
- to, <c>=&lt;/2</c>.
- Using an ordering function will slow down the sort
- considerably. The <c>keysort</c>, <c>keymerge</c> and
- <c>keycheck</c> functions do not accept ordering functions.
+ </taglist>
+
+ <p>Other options are:</p>
+
+ <taglist>
+ <tag><c>{order, Order}</c></tag>
+ <item>
+ <p>The default is to sort terms in
+ ascending order, but that can be changed by value
+ <c>descending</c> or by specifying an ordering function <c>Fun</c>.
+ An ordering function is antisymmetric, transitive, and total.
+ <c>Fun(A,&nbsp;B)</c> is to return <c>true</c> if <c>A</c>
+ comes before <c>B</c> in the ordering, otherwise <c>false</c>.
+ An example of a typical ordering function is less than or equal
+ to, <c>=&lt;/2</c>. Using an ordering function slows down the sort
+ considerably. Functions <c>keysort</c>, <c>keymerge</c> and
+ <c>keycheck</c> do not accept ordering functions.</p>
</item>
- <item><c>{unique, boolean()}</c>. When sorting or merging files,
- only the first of a sequence of terms that compare equal (<c>==</c>)
- is output if this option is set to <c>true</c>. The default
- value is <c>false</c> which implies that all terms that
- compare equal are output. When checking files for
- sortedness, a check that no pair of consecutive terms
- compares equal is done if this option is set to <c>true</c>.
+ <tag><c>{unique, boolean()}</c></tag>
+ <item>
+ <p>When sorting or merging files,
+ only the first of a sequence of terms that compare equal (<c>==</c>)
+ is output if this option is set to <c>true</c>. Defaults
+ to <c>false</c>, which implies that all terms that
+ compare equal are output. When checking files for
+ sortedness, a check that no pair of consecutive terms
+ compares equal is done if this option is set to <c>true</c>.</p>
</item>
- <item><c>{tmpdir, TempDirectory}</c>. The directory where
- temporary files are put can be chosen explicitly. The
- default, implied by the value <c>""</c>, is to put temporary
- files on the same directory as the sorted output file. If
- output is a function (see below), the directory returned by
- <c>file:get_cwd()</c> is used instead. The names of
- temporary files are derived from the Erlang nodename
- (<c>node()</c>), the process identifier of the current Erlang
- emulator (<c>os:getpid()</c>), and a unique integer
- (<c>erlang:unique_integer([positive])</c>); a typical name would be
- <c>fs_mynode@myhost_1763_4711.17</c>, where
- <c>17</c> is a sequence number. Existing files will be
- overwritten. Temporary files are deleted unless some
- uncaught EXIT signal occurs.
+ <tag><c>{tmpdir, TempDirectory}</c></tag>
+ <item>
+ <p>The directory where
+ temporary files are put can be chosen explicitly. The
+ default, implied by value <c>""</c>, is to put temporary
+ files on the same directory as the sorted output file. If
+ output is a function (see below), the directory returned by
+ <c>file:get_cwd()</c> is used instead. The names of
+ temporary files are derived from the Erlang nodename
+ (<c>node()</c>), the process identifier of the current Erlang
+ emulator (<c>os:getpid()</c>), and a unique integer
+ (<c>erlang:unique_integer([positive])</c>). A typical name is
+ <c>fs_mynode@myhost_1763_4711.17</c>, where
+ <c>17</c> is a sequence number. Existing files are
+ overwritten. Temporary files are deleted unless some
+ uncaught <c>EXIT</c> signal occurs.</p>
</item>
- <item><c>{compressed, boolean()}</c>. Temporary files and the
- output file may be compressed. The default value
- <c>false</c> implies that written files are not
- compressed. Regardless of the value of the <c>compressed</c>
- option, compressed files can always be read. Note that
- reading and writing compressed files is significantly slower
- than reading and writing uncompressed files.
+ <tag><c>{compressed, boolean()}</c></tag>
+ <item>
+ <p>Temporary files and the output file can be compressed. Defaults
+ <c>false</c>, which implies that written files are not
+ compressed. Regardless of the value of option <c>compressed</c>,
+ compressed files can always be read. Notice that
+ reading and writing compressed files are significantly slower
+ than reading and writing uncompressed files.</p>
</item>
- <item><c>{size, Size}</c>. By default approximately 512*1024
- bytes read from files are sorted internally. This option
- should rarely be needed.
+ <tag><c>{size, Size}</c></tag>
+ <item>
+ <p>By default about 512*1024 bytes read from files are sorted
+ internally. This option is rarely needed.</p>
</item>
- <item><c>{no_files, NoFiles}</c>. By default 16 files are
- merged at a time. This option should rarely be needed.
+ <tag><c>{no_files, NoFiles}</c></tag>
+ <item>
+ <p>By default 16 files are merged at a time. This option is rarely
+ needed.</p>
</item>
- </list>
+ </taglist>
+
<p>As an alternative to sorting files, a function of one argument
- can be given as input. When called with the argument <c>read</c>
- the function is assumed to return <c>end_of_input</c> or
- <c>{end_of_input, Value}}</c> when there is no more input
- (<c>Value</c> is explained below), or <c>{Objects, Fun}</c>,
- where <c>Objects</c> is a list of binaries or terms depending on
- the format and <c>Fun</c> is a new input function. Any other
- value is immediately returned as value of the current call to
- <c>sort</c> or <c>keysort</c>. Each input function will be
- called exactly once, and should an error occur, the last
- function is called with the argument <c>close</c>, the reply of
- which is ignored.
- </p>
- <p>A function of one argument can be given as output. The results
+ can be specified as input. When called with argument <c>read</c>,
+ the function is assumed to return either of the following:</p>
+
+ <list type="bulleted">
+ <item>
+ <p><c>end_of_input</c> or <c>{end_of_input, Value}}</c> when there
+ is no more input (<c>Value</c> is explained below).</p>
+ </item>
+ <item>
+ <p><c>{Objects, Fun}</c>, where <c>Objects</c> is a list of binaries
+ or terms depending on the format, and <c>Fun</c> is a new input
+ function.</p>
+ </item>
+ </list>
+
+ <p>Any other value is immediately returned as value of the current call
+ to <c>sort</c> or <c>keysort</c>. Each input function is
+ called exactly once. If an error occurs, the last
+ function is called with argument <c>close</c>, the reply of
+ which is ignored.</p>
+
+ <p>A function of one argument can be specified as output. The results
of sorting or merging the input is collected in a non-empty
sequence of variable length lists of binaries or terms depending
on the format. The output function is called with one list at a
@@ -151,18 +176,20 @@
call to the sort or merge function. Each output function is
called exactly once. When some output function has been applied
to all of the results or an error occurs, the last function is
- called with the argument <c>close</c>, and the reply is returned
- as value of the current call to the sort or merge function. If a
- function is given as input and the last input function returns
- <c>{end_of_input, Value}</c>, the function given as output will
- be called with the argument <c>{value, Value}</c>. This makes it
+ called with argument <c>close</c>, and the reply is returned
+ as value of the current call to the sort or merge function.</p>
+
+ <p>If a function is specified as input and the last input function
+ returns <c>{end_of_input, Value}</c>, the function specified as output
+ is called with argument <c>{value, Value}</c>. This makes it
easy to initiate the sequence of output functions with a value
- calculated by the input functions.
- </p>
+ calculated by the input functions.</p>
+
<p>As an example, consider sorting the terms on a disk log file.
A function that reads chunks from the disk log and returns a
list of binaries is used as input. The results are collected in
a list of terms.</p>
+
<pre>
sort(Log) ->
{ok, _} = disk_log:open([{name,Log}, {mode,read_only}]),
@@ -193,29 +220,32 @@ output(L) ->
lists:append(lists:reverse(L));
(Terms) ->
output([Terms | L])
- end. </pre>
- <p>Further examples of functions as input and output can be found
- at the end of the <c>file_sorter</c> module; the <c>term</c>
- format is implemented with functions.
- </p>
+ end.</pre>
+
+ <p>For more examples of functions as input and output, see
+ the end of the <c>file_sorter</c> module; the <c>term</c>
+ format is implemented with functions.</p>
+
<p>The possible values of <c>Reason</c> returned when an error
occurs are:</p>
+
<list type="bulleted">
<item>
- <p><c>bad_object</c>, <c>{bad_object, FileName}</c>.
+ <p><c>bad_object</c>, <c>{bad_object, FileName}</c> -
Applying the format function failed for some binary,
or the key(s) could not be extracted from some term.</p>
</item>
<item>
- <p><c>{bad_term, FileName}</c>. <c>io:read/2</c> failed
+ <p><c>{bad_term, FileName}</c> - <c>io:read/2</c> failed
to read some term.</p>
</item>
<item>
- <p><c>{file_error, FileName, file:posix()}</c>. See
- <c>file(3)</c> for an explanation of <c>file:posix()</c>.</p>
+ <p><c>{file_error, FileName, file:posix()}</c> - For an
+ explanation of <c>file:posix()</c>, see
+ <seealso marker="kernel:file"><c>file(3)</c></seealso>.</p>
</item>
<item>
- <p><c>{premature_eof, FileName}</c>. End-of-file was
+ <p><c>{premature_eof, FileName}</c> - End-of-file was
encountered inside some binary term.</p>
</item>
</list>
@@ -304,30 +334,53 @@ output(L) ->
<funcs>
<func>
- <name name="sort" arity="1"/>
- <fsummary>Sort terms on files.</fsummary>
+ <name name="check" arity="1"/>
+ <name name="check" arity="2"/>
+ <fsummary>Check whether terms on files are sorted.</fsummary>
<desc>
- <p>Sorts terms on files. <c>sort(FileName)</c> is equivalent
- to <c>sort([FileName], FileName)</c>.</p>
+ <p>Checks files for sortedness. If a file is not sorted, the
+ first out-of-order element is returned. The first term on a
+ file has position 1.</p>
+ <p><c>check(FileName)</c> is equivalent to
+ <c>check([FileName], [])</c>.</p>
</desc>
</func>
+
<func>
- <name name="sort" arity="2"/>
- <name name="sort" arity="3"/>
- <fsummary>Sort terms on files.</fsummary>
+ <name name="keycheck" arity="2"/>
+ <name name="keycheck" arity="3"/>
+ <fsummary>Check whether terms on files are sorted by key.</fsummary>
<desc>
- <p>Sorts terms on files. <c>sort(Input, Output)</c> is
- equivalent to <c>sort(Input, Output, [])</c>.</p>
+ <p>Checks files for sortedness. If a file is not sorted, the
+ first out-of-order element is returned. The first term on a
+ file has position 1.</p>
+ <p><c>keycheck(KeyPos, FileName)</c> is equivalent
+ to <c>keycheck(KeyPos, [FileName], [])</c>.</p>
</desc>
</func>
+
+ <func>
+ <name name="keymerge" arity="3"/>
+ <name name="keymerge" arity="4"/>
+ <fsummary>Merge terms on files by key.</fsummary>
+ <desc>
+ <p>Merges tuples on files. Each input file is assumed to be
+ sorted on key(s).</p>
+ <p><c>keymerge(KeyPos, FileNames, Output)</c> is equivalent
+ to <c>keymerge(KeyPos, FileNames, Output, [])</c>.</p>
+ </desc>
+ </func>
+
<func>
<name name="keysort" arity="2"/>
<fsummary>Sort terms on files by key.</fsummary>
<desc>
- <p>Sorts tuples on files. <c>keysort(N, FileName)</c> is
+ <p>Sorts tuples on files.</p>
+ <p><c>keysort(N, FileName)</c> is
equivalent to <c>keysort(N, [FileName], FileName)</c>.</p>
</desc>
</func>
+
<func>
<name name="keysort" arity="3"/>
<name name="keysort" arity="4"/>
@@ -335,13 +388,14 @@ output(L) ->
<desc>
<p>Sorts tuples on files. The sort is performed on the
element(s) mentioned in <c><anno>KeyPos</anno></c>. If two
- tuples compare equal (<c>==</c>) on one element, next
+ tuples compare equal (<c>==</c>) on one element, the next
element according to <c><anno>KeyPos</anno></c>
is compared. The sort is stable.</p>
<p><c>keysort(N, Input, Output)</c> is equivalent to
<c>keysort(N, Input, Output, [])</c>.</p>
</desc>
</func>
+
<func>
<name name="merge" arity="2"/>
<name name="merge" arity="3"/>
@@ -353,39 +407,25 @@ output(L) ->
<c>merge(FileNames, Output, [])</c>.</p>
</desc>
</func>
+
<func>
- <name name="keymerge" arity="3"/>
- <name name="keymerge" arity="4"/>
- <fsummary>Merge terms on files by key.</fsummary>
- <desc>
- <p>Merges tuples on files. Each input file is assumed to be
- sorted on key(s).</p>
- <p><c>keymerge(KeyPos, FileNames, Output)</c> is equivalent
- to <c>keymerge(KeyPos, FileNames, Output, [])</c>.</p>
- </desc>
- </func>
- <func>
- <name name="check" arity="1"/>
- <name name="check" arity="2"/>
- <fsummary>Check whether terms on files are sorted.</fsummary>
+ <name name="sort" arity="1"/>
+ <fsummary>Sort terms on files.</fsummary>
<desc>
- <p>Checks files for sortedness. If a file is not sorted, the
- first out-of-order element is returned. The first term on a
- file has position 1.</p>
- <p><c>check(FileName)</c> is equivalent to
- <c>check([FileName], [])</c>.</p>
+ <p>Sorts terms on files.</p>
+ <p><c>sort(FileName)</c> is equivalent
+ to <c>sort([FileName], FileName)</c>.</p>
</desc>
</func>
+
<func>
- <name name="keycheck" arity="2"/>
- <name name="keycheck" arity="3"/>
- <fsummary>Check whether terms on files are sorted by key.</fsummary>
+ <name name="sort" arity="2"/>
+ <name name="sort" arity="3"/>
+ <fsummary>Sort terms on files.</fsummary>
<desc>
- <p>Checks files for sortedness. If a file is not sorted, the
- first out-of-order element is returned. The first term on a
- file has position 1.</p>
- <p><c>keycheck(KeyPos, FileName)</c> is equivalent
- to <c>keycheck(KeyPos, [FileName], [])</c>.</p>
+ <p>Sorts terms on files.</p>
+ <p><c>sort(Input, Output)</c> is
+ equivalent to <c>sort(Input, Output, [])</c>.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/filelib.xml b/lib/stdlib/doc/src/filelib.xml
index 3ad159a66d..7c6380ce28 100644
--- a/lib/stdlib/doc/src/filelib.xml
+++ b/lib/stdlib/doc/src/filelib.xml
@@ -28,19 +28,23 @@
<docno>1</docno>
<approved>Kenneth Lundin</approved>
<checked></checked>
- <date>03-01-21</date>
+ <date>2003-01-21</date>
<rev>A</rev>
- <file>filelib.sgml</file>
+ <file>filelib.xml</file>
</header>
<module>filelib</module>
- <modulesummary>File utilities, such as wildcard matching of filenames</modulesummary>
+ <modulesummary>File utilities, such as wildcard matching of filenames.
+ </modulesummary>
<description>
- <p>This module contains utilities on a higher level than the <c>file</c>
- module.</p>
- <p>This module does not support "raw" file names (i.e. files whose names
- do not comply with the expected encoding). Such files will be ignored
- by the functions in this module.</p>
- <p>For more information about raw file names, see the <seealso marker="kernel:file">file</seealso> module.</p>
+ <p>This module contains utilities on a higher level than the
+ <seealso marker="kernel:file"><c>file</c></seealso> module.</p>
+
+ <p>This module does not support "raw" filenames (that is, files whose
+ names do not comply with the expected encoding). Such files are ignored
+ by the functions in this module.</p>
+
+ <p>For more information about raw filenames, see the
+ <seealso marker="kernel:file"><c>file</c></seealso> module.</p>
</description>
<datatypes>
@@ -61,93 +65,99 @@
<funcs>
<func>
<name name="ensure_dir" arity="1"/>
- <fsummary>Ensure that all parent directories for a file or directory exist.</fsummary>
+ <fsummary>Ensure that all parent directories for a file or directory
+ exist.</fsummary>
<desc>
- <p>The <c>ensure_dir/1</c> function ensures that all parent
- directories for the given file or directory name <c><anno>Name</anno></c>
+ <p>Ensures that all parent directories for the specified file or
+ directory name <c><anno>Name</anno></c>
exist, trying to create them if necessary.</p>
<p>Returns <c>ok</c> if all parent directories already exist
- or could be created, or <c>{error, <anno>Reason</anno>}</c> if some parent
- directory does not exist and could not be created for some
- reason.</p>
+ or can be created. Returns <c>{error, <anno>Reason</anno>}</c> if
+ some parent directory does not exist and cannot be created.</p>
</desc>
</func>
+
<func>
<name name="file_size" arity="1"/>
- <fsummary>Return the size in bytes of the file.</fsummary>
+ <fsummary>Return the size in bytes of a file.</fsummary>
<desc>
- <p>The <c>file_size</c> function returns the size of the given file.</p>
+ <p>Returns the size of the specified file.</p>
</desc>
</func>
+
<func>
<name name="fold_files" arity="5"/>
<fsummary>Fold over all files matching a regular expression.</fsummary>
<desc>
- <p>The <c>fold_files/5</c> function folds the function
- <c><anno>Fun</anno></c> over all (regular) files <c><anno>F</anno></c> in the
- directory <c><anno>Dir</anno></c> that match the regular expression <c><anno>RegExp</anno></c>
- (see the <seealso marker="re">re</seealso> module for a description
- of the allowed regular expressions).
- If <c><anno>Recursive</anno></c> is true all sub-directories to <c>Dir</c>
- are processed. The regular expression matching is done on just
- the filename without the directory part.</p>
-
- <p>If Unicode file name translation is in effect and the file
- system is completely transparent, file names that cannot be
- interpreted as Unicode may be encountered, in which case the
- <c>fun()</c> must be prepared to handle raw file names
- (i.e. binaries). If the regular expression contains
- codepoints beyond 255, it will not match file names that do
- not conform to the expected character encoding (i.e. are not
- encoded in valid UTF-8).</p>
-
- <p>For more information about raw file names, see the
- <seealso marker="kernel:file">file</seealso> module.</p>
+ <p>Folds function <c><anno>Fun</anno></c> over all (regular) files
+ <c><anno>F</anno></c> in directory <c><anno>Dir</anno></c> that match
+ the regular expression <c><anno>RegExp</anno></c> (for a description
+ of the allowed regular expressions,
+ see the <seealso marker="re"><c>re</c></seealso> module).
+ If <c><anno>Recursive</anno></c> is <c>true</c>, all subdirectories
+ to <c>Dir</c>
+ are processed. The regular expression matching is only done on
+ the filename without the directory part.</p>
+ <p>If Unicode filename translation is in effect and the file
+ system is transparent, filenames that cannot be
+ interpreted as Unicode can be encountered, in which case the
+ <c>fun()</c> must be prepared to handle raw filenames
+ (that is, binaries). If the regular expression contains
+ codepoints &gt; 255, it does not match filenames that do
+ not conform to the expected character encoding (that is, are not
+ encoded in valid UTF-8).</p>
+ <p>For more information about raw filenames, see the
+ <seealso marker="kernel:file"><c>file</c></seealso> module.</p>
</desc>
</func>
+
<func>
<name name="is_dir" arity="1"/>
- <fsummary>Test whether Name refer to a directory or not</fsummary>
+ <fsummary>Test whether <c>Name</c> refers to a directory.</fsummary>
<desc>
- <p>The <c>is_dir/1</c> function returns <c>true</c> if <c><anno>Name</anno></c>
- refers to a directory, and <c>false</c> otherwise.</p>
+ <p>Returns <c>true</c> if <c><anno>Name</anno></c>
+ refers to a directory, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_file" arity="1"/>
- <fsummary>Test whether Name refer to a file or directory.</fsummary>
+ <fsummary>Test whether <c>Name</c> refers to a file or directory.
+ </fsummary>
<desc>
- <p>The <c>is_file/1</c> function returns <c>true</c> if <c><anno>Name</anno></c>
- refers to a file or a directory, and <c>false</c> otherwise.</p>
+ <p>Returns <c>true</c> if <c><anno>Name</anno></c>
+ refers to a file or a directory, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_regular" arity="1"/>
- <fsummary>Test whether Name refer to a (regular) file.</fsummary>
+ <fsummary>Test whether <c>Name</c> refers to a (regular) file.</fsummary>
<desc>
- <p>The <c>is_regular/1</c> function returns <c>true</c> if <c><anno>Name</anno></c>
- refers to a file (regular file), and <c>false</c> otherwise.</p>
+ <p>Returns <c>true</c> if <c><anno>Name</anno></c>
+ refers to a (regular) file, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="last_modified" arity="1"/>
- <fsummary>Return the local date and time when a file was last modified.</fsummary>
+ <fsummary>Return the local date and time when a file was last modified.
+ </fsummary>
<desc>
- <p>The <c>last_modified/1</c> function returns the date and time the
- given file or directory was last modified, or 0 if the file
- does not exist.</p>
+ <p>Returns the date and time the specified file or directory was last
+ modified, or <c>0</c> if the file does not exist.</p>
</desc>
</func>
+
<func>
<name name="wildcard" arity="1"/>
<fsummary>Match filenames using Unix-style wildcards.</fsummary>
<desc>
- <p>The <c>wildcard/1</c> function returns a list of all files
- that match Unix-style wildcard-string <c><anno>Wildcard</anno></c>.</p>
+ <p>Returns a list of all files that match Unix-style wildcard string
+ <c><anno>Wildcard</anno></c>.</p>
<p>The wildcard string looks like an ordinary filename, except
- that certain "wildcard characters" are interpreted in a special
- way. The following characters are special:
- </p>
+ that the following "wildcard characters" are interpreted in a special
+ way:</p>
<taglist>
<tag>?</tag>
<item>
@@ -160,14 +170,14 @@
</item>
<tag>**</tag>
<item>
- <p>Two adjacent <c>*</c>'s used as a single pattern will
- match all files and zero or more directories and subdirectories.</p>
+ <p>Two adjacent <c>*</c> used as a single pattern match
+ all files and zero or more directories and subdirectories.</p>
</item>
<tag>[Character1,Character2,...]</tag>
<item>
<p>Matches any of the characters listed. Two characters
- separated by a hyphen will match a range of characters.
- Example: <c>[A-Z]</c> will match any uppercase letter.</p>
+ separated by a hyphen match a range of characters.
+ Example: <c>[A-Z]</c> matches any uppercase letter.</p>
</item>
<tag>{Item,...}</tag>
<item>
@@ -175,49 +185,45 @@
</item>
</taglist>
<p>Other characters represent themselves. Only filenames that
- have exactly the same character in the same position will match.
- (Matching is case-sensitive; i.e. "a" will not match "A").
- </p>
- <p>Note that multiple "*" characters are allowed
- (as in Unix wildcards, but opposed to Windows/DOS wildcards).
- </p>
- <p>Examples:</p>
+ have exactly the same character in the same position match.
+ Matching is case-sensitive, for example, "a" does not match "A".</p>
+ <p>Notice that multiple "*" characters are allowed
+ (as in Unix wildcards, but opposed to Windows/DOS wildcards).</p>
+ <p><em>Examples:</em></p>
<p>The following examples assume that the current directory is the
- top of an Erlang/OTP installation.
- </p>
- <p>To find all <c>.beam</c> files in all applications, the following
- line can be used:</p>
+ top of an Erlang/OTP installation.</p>
+ <p>To find all <c>.beam</c> files in all applications, use the
+ following line:</p>
<code type="none">
- filelib:wildcard("lib/*/ebin/*.beam"). </code>
- <p>To find either <c>.erl</c> or <c>.hrl</c> in all applications
- <c>src</c> directories, the following</p>
+filelib:wildcard("lib/*/ebin/*.beam").</code>
+ <p>To find <c>.erl</c> or <c>.hrl</c> in all applications <c>src</c>
+ directories, use either of the following lines:</p>
<code type="none">
- filelib:wildcard("lib/*/src/*.?rl") </code>
- <p>or the following line</p>
+filelib:wildcard("lib/*/src/*.?rl")</code>
<code type="none">
- filelib:wildcard("lib/*/src/*.{erl,hrl}") </code>
- <p>can be used.</p>
- <p>To find all <c>.hrl</c> files in either <c>src</c> or <c>include</c>
- directories, use:</p>
+filelib:wildcard("lib/*/src/*.{erl,hrl}")</code>
+ <p>To find all <c>.hrl</c> files in <c>src</c> or <c>include</c>
+ directories:</p>
<code type="none">
- filelib:wildcard("lib/*/{src,include}/*.hrl"). </code>
+filelib:wildcard("lib/*/{src,include}/*.hrl").</code>
<p>To find all <c>.erl</c> or <c>.hrl</c> files in either
- <c>src</c> or <c>include</c> directories, use:</p>
+ <c>src</c> or <c>include</c> directories:</p>
<code type="none">
- filelib:wildcard("lib/*/{src,include}/*.{erl,hrl}") </code>
- <p>To find all <c>.erl</c> or <c>.hrl</c> files in any
- subdirectory, use:</p>
+filelib:wildcard("lib/*/{src,include}/*.{erl,hrl}")</code>
+ <p>To find all <c>.erl</c> or <c>.hrl</c> files in any subdirectory:</p>
<code type="none">
- filelib:wildcard("lib/**/*.{erl,hrl}") </code>
+filelib:wildcard("lib/**/*.{erl,hrl}")</code>
</desc>
</func>
+
<func>
<name name="wildcard" arity="2"/>
- <fsummary>Match filenames using Unix-style wildcards starting at a specified directory.</fsummary>
+ <fsummary>Match filenames using Unix-style wildcards starting at a
+ specified directory.</fsummary>
<desc>
- <p>The <c>wildcard/2</c> function works like <c>wildcard/1</c>,
- except that instead of the actual working directory, <c><anno>Cwd</anno></c>
- will be used.</p>
+ <p>Same as <seealso marker="#wildcard/1"><c>wildcard/1</c></seealso>,
+ except that <c><anno>Cwd</anno></c> is used instead of the working
+ directory.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/filename.xml b/lib/stdlib/doc/src/filename.xml
index f284a7596c..2a413835d0 100644
--- a/lib/stdlib/doc/src/filename.xml
+++ b/lib/stdlib/doc/src/filename.xml
@@ -25,27 +25,37 @@
<title>filename</title>
<prepared>Kenneth Lundin</prepared>
<docno>1</docno>
- <date>97-11-13</date>
+ <date>1997-11-13</date>
<rev>B</rev>
</header>
<module>filename</module>
- <modulesummary>Filename Manipulation Functions</modulesummary>
+ <modulesummary>Filename manipulation functions.</modulesummary>
<description>
- <p>The module <c>filename</c> provides a number of useful functions
- for analyzing and manipulating file names. These functions are
+ <p>This module provides functions
+ for analyzing and manipulating filenames. These functions are
designed so that the Erlang code can work on many different
- platforms with different formats for file names. With file name
- is meant all strings that can be used to denote a file. They can
- be short relative names like <c>foo.erl</c>, very long absolute
- name which include a drive designator and directory names like
+ platforms with different filename formats. With filename
+ is meant all strings that can be used to denote a file. The filename
+ can be a short relative name like <c>foo.erl</c>, a long absolute
+ name including a drive designator, a directory name like
<c>D:\usr/local\bin\erl/lib\tools\foo.erl</c>, or any variations
in between.</p>
- <p>In Windows, all functions return file names with forward slashes
- only, even if the arguments contain back slashes. Use
- <c>join/1</c> to normalize a file name by removing redundant
- directory separators.</p>
- <p>The module supports raw file names in the way that if a binary is present, or the file name cannot be interpreted according to the return value of
- <seealso marker="kernel:file#native_name_encoding/0">file:native_name_encoding/0</seealso>, a raw file name will also be returned. For example filename:join/1 provided with a path component being a binary (and also not being possible to interpret under the current native file name encoding) will result in a raw file name being returned (the join operation will have been performed of course). For more information about raw file names, see the <seealso marker="kernel:file">file</seealso> module.</p>
+
+ <p>In Windows, all functions return filenames with forward slashes
+ only, even if the arguments contain backslashes. To normalize a
+ filename by removing redundant directory separators, use
+ <seealso marker="#join/1"><c>join/1</c></seealso>.</p>
+
+ <p>The module supports raw filenames in the way that if a binary is
+ present, or the filename cannot be interpreted according to the return
+ value of <seealso marker="kernel:file#native_name_encoding/0">
+ <c>file:native_name_encoding/0</c></seealso>, a raw filename is also
+ returned. For example, <c>join/1</c> provided with a path component
+ that is a binary (and cannot be interpreted under the current
+ native filename encoding) results in a raw filename that is returned
+ (the join operation is performed of course). For more information
+ about raw filenames, see the
+ <seealso marker="kernel:file"><c>file</c></seealso> module.</p>
</description>
<datatypes>
<datatype>
@@ -56,13 +66,14 @@
<funcs>
<func>
<name name="absname" arity="1"/>
- <fsummary>Convert a filename to an absolute name, relative the working directory</fsummary>
+ <fsummary>Convert a filename to an absolute name, relative the working
+ directory.</fsummary>
<desc>
- <p>Converts a relative <c><anno>Filename</anno></c> and returns an absolute
- name. No attempt is made to create the shortest absolute name,
- because this can give incorrect results on file systems which
+ <p>Converts a relative <c><anno>Filename</anno></c> and returns an
+ absolute name. No attempt is made to create the shortest absolute
+ name, as this can give incorrect results on file systems that
allow links.</p>
- <p>Unix examples:</p>
+ <p><em>Unix examples:</em></p>
<pre>
1> <input>pwd().</input>
"/usr/local"
@@ -72,7 +83,7 @@
"/usr/local/../x"
4> <input>filename:absname("/").</input>
"/"</pre>
- <p>Windows examples:</p>
+ <p><em>Windows examples:</em></p>
<pre>
1> <input>pwd().</input>
"D:/usr/local"
@@ -84,28 +95,32 @@
"D:/"</pre>
</desc>
</func>
+
<func>
<name name="absname" arity="2"/>
- <fsummary>Convert a filename to an absolute name, relative a specified directory</fsummary>
+ <fsummary>Convert a filename to an absolute name, relative a specified
+ directory.</fsummary>
<desc>
- <p>This function works like <c>absname/1</c>, except that
- the directory to which the file name should be made relative
- is given explicitly in the <c><anno>Dir</anno></c> argument.</p>
+ <p>Same as <seealso marker="#absname/1"><c>absname/1</c></seealso>,
+ except that the directory to which the filename is to be made
+ relative is specified in argument <c><anno>Dir</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="absname_join" arity="2"/>
- <fsummary>Join an absolute directory with a relative filename</fsummary>
+ <fsummary>Join an absolute directory with a relative filename.</fsummary>
<desc>
- <p>Joins an absolute directory with a relative filename.
- Similar to <c>join/2</c>, but on platforms with tight
- restrictions on raw filename length and no support for
- symbolic links (read: VxWorks), leading parent directory
- components in <c><anno>Filename</anno></c> are matched against trailing
- directory components in <c><anno>Dir</anno></c> so they can be removed
- from the result - minimizing its length.</p>
+ <p>Joins an absolute directory with a relative filename. Similar to
+ <seealso marker="#join/2"><c>join/2</c></seealso>, but on platforms
+ with tight restrictions on raw filename length and no support for
+ symbolic links (read: VxWorks), leading parent directory components
+ in <c><anno>Filename</anno></c> are matched against trailing
+ directory components in <c><anno>Dir</anno></c> so they can be
+ removed from the result - minimizing its length.</p>
</desc>
</func>
+
<func>
<name name="basedir" arity="2"/>
<fsummary>Equivalent to <c>basedir(<anno>Type</anno>,<anno>Application</anno>,#{})</c>.</fsummary>
@@ -121,11 +136,13 @@
<fsummary></fsummary>
<desc><marker id="basedir-3"/>
<p>
- Returns a suitable path, or paths, for a given type.
- If <c>os</c> is not set in <c><anno>Opts</anno></c> the function will default to
- the native option, i.e. <c>'linux'</c>, <c>'darwin'</c> or <c>'windows'</c>, as understood
- by <c>os:type/0</c>. Anything not recognized as <c>'darwin'</c> or <c>'windows'</c> is
- interpreted as <c>'linux'</c>.</p>
+ Returns a suitable path, or paths, for a given type. If
+ <c>os</c> is not set in <c><anno>Opts</anno></c> the
+ function will default to the native option, that is
+ <c>'linux'</c>, <c>'darwin'</c> or <c>'windows'</c>, as
+ understood by <c>os:type/0</c>. Anything not recognized
+ as <c>'darwin'</c> or <c>'windows'</c> is interpreted as
+ <c>'linux'</c>.</p>
<p>
The options <c>'author'</c> and <c>'version'</c> are only used with <c>'windows'</c> option mode.
</p>
@@ -257,11 +274,12 @@ true
</func>
<func>
<name name="basename" arity="1"/>
- <fsummary>Return the last component of a filename</fsummary>
+ <fsummary>Return the last component of a filename.</fsummary>
<desc>
<p>Returns the last component of <c><anno>Filename</anno></c>, or
- <c><anno>Filename</anno></c> itself if it does not contain any directory
- separators.</p>
+ <c><anno>Filename</anno></c> itself if it does not contain any
+ directory separators.</p>
+ <p><em>Examples:</em></p>
<pre>
5> <input>filename:basename("foo").</input>
"foo"
@@ -271,15 +289,18 @@ true
[]</pre>
</desc>
</func>
+
<func>
<name name="basename" arity="2"/>
- <fsummary>Return the last component of a filename, stripped of the specified extension</fsummary>
+ <fsummary>Return the last component of a filename, stripped of the
+ specified extension.</fsummary>
<desc>
- <p>Returns the last component of <c><anno>Filename</anno></c> with the
- extension <c><anno>Ext</anno></c> stripped. This function should be used
- to remove a specific extension which might, or might not, be
- there. Use <c>rootname(basename(Filename))</c> to remove an
- extension that exists, but you are not sure which one it is.</p>
+ <p>Returns the last component of <c><anno>Filename</anno></c> with
+ extension <c><anno>Ext</anno></c> stripped. This function is to be
+ used to remove a (possible) specific extension. To remove an
+ existing extension when you are unsure which one it is, use
+ <c>rootname(basename(Filename))</c>.</p>
+ <p><em>Examples:</em></p>
<pre>
8> <input>filename:basename("~/src/kalle.erl", ".erl").</input>
"kalle"
@@ -293,27 +314,32 @@ true
"kalle"</pre>
</desc>
</func>
+
<func>
<name name="dirname" arity="1"/>
- <fsummary>Return the directory part of a path name</fsummary>
+ <fsummary>Return the directory part of a path name.</fsummary>
<desc>
<p>Returns the directory part of <c><anno>Filename</anno></c>.</p>
+ <p><em>Examples:</em></p>
<pre>
13> <input>filename:dirname("/usr/src/kalle.erl").</input>
"/usr/src"
14> <input>filename:dirname("kalle.erl").</input>
-"."
-
+"."</pre>
+ <pre>
5> <input>filename:dirname("\\usr\\src/kalle.erl").</input> % Windows
"/usr/src"</pre>
</desc>
</func>
+
<func>
<name name="extension" arity="1"/>
- <fsummary>Return the file extension</fsummary>
+ <fsummary>Return the file extension.</fsummary>
<desc>
- <p>Returns the file extension of <c><anno>Filename</anno></c>, including
- the period. Returns an empty string if there is no extension.</p>
+ <p>Returns the file extension of <c><anno>Filename</anno></c>,
+ including the period. Returns an empty string if no extension
+ exists.</p>
+ <p><em>Examples:</em></p>
<pre>
15> <input>filename:extension("foo.erl").</input>
".erl"
@@ -321,69 +347,123 @@ true
[]</pre>
</desc>
</func>
+
+ <func>
+ <name name="find_src" arity="1"/>
+ <name name="find_src" arity="2"/>
+ <fsummary>Find the filename and compiler options for a module.</fsummary>
+ <desc>
+ <p>Finds the source filename and compiler options for a module.
+ The result can be fed to <seealso marker="compiler:compile#file/2">
+ <c>compile:file/2</c></seealso> to compile the file again.</p>
+ <warning><p>It is not recommended to use this function. If possible,
+ use the <seealso marker="beam_lib"><c>beam_lib(3)</c></seealso>
+ module to extract the abstract code format from the Beam file and
+ compile that instead.</p></warning>
+ <p>Argument <c><anno>Beam</anno></c>, which can be a string or an atom,
+ specifies either the module name or the path to the source
+ code, with or without extension <c>".erl"</c>. In either
+ case, the module must be known by the code server, that is,
+ <c>code:which(<anno>Module</anno>)</c> must succeed.</p>
+ <p><c><anno>Rules</anno></c> describes how the source directory can be
+ found when the object code directory is known. It is a list of
+ tuples <c>{<anno>BinSuffix</anno>, <anno>SourceSuffix</anno>}</c> and
+ is interpreted as follows: if the end of the directory name where the
+ object is located matches <c><anno>BinSuffix</anno></c>, then the
+ source code directory has the same name, but with
+ <c><anno>BinSuffix</anno></c> replaced by
+ <c><anno>SourceSuffix</anno></c>. <c><anno>Rules</anno></c> defaults
+ to:</p>
+ <code type="none">
+[{"", ""}, {"ebin", "src"}, {"ebin", "esrc"}]</code>
+ <p>If the source file is found in the resulting directory, the function
+ returns that location together with <c><anno>Options</anno></c>.
+ Otherwise the next rule is tried, and so on.</p>
+ <p>The function returns <c>{<anno>SourceFile</anno>,
+ <anno>Options</anno>}</c> if it succeeds.
+ <c><anno>SourceFile</anno></c> is the absolute path to the source
+ file without extension <c>".erl"</c>. <c><anno>Options</anno></c>
+ includes the options that are necessary to recompile the file with
+ <c>compile:file/2</c>, but excludes options such as <c>report</c>
+ and <c>verbose</c>, which do not change the way code is generated.
+ The paths in options <c>{outdir, <anno>Path</anno>}</c> and
+ <c>{i, Path}</c> are guaranteed to be absolute.</p>
+ </desc>
+ </func>
+
<func>
<name name="flatten" arity="1"/>
- <fsummary>Convert a filename to a flat string</fsummary>
+ <fsummary>Convert a filename to a flat string.</fsummary>
<desc>
<p>Converts a possibly deep list filename consisting of
characters and atoms into the corresponding flat string
filename.</p>
</desc>
</func>
+
<func>
<name name="join" arity="1"/>
- <fsummary>Join a list of filename components with directory separators</fsummary>
+ <fsummary>Join a list of filename components with directory separators.
+ </fsummary>
<desc>
- <p>Joins a list of file name <c><anno>Components</anno></c> with directory
- separators. If one of the elements of <c><anno>Components</anno></c>
- includes an absolute path, for example <c>"/xxx"</c>,
+ <p>Joins a list of filename <c><anno>Components</anno></c> with
+ directory separators.
+ If one of the elements of <c><anno>Components</anno></c>
+ includes an absolute path, such as <c>"/xxx"</c>,
the preceding elements, if any, are removed from the result.</p>
<p>The result is "normalized":</p>
<list type="bulleted">
<item>Redundant directory separators are removed.</item>
<item>In Windows, all directory separators are forward
- slashes and the drive letter is in lower case.</item>
+ slashes and the drive letter is in lower case.</item>
</list>
+ <p><em>Examples:</em></p>
<pre>
17> <input>filename:join(["/usr", "local", "bin"]).</input>
"/usr/local/bin"
18> <input>filename:join(["a/b///c/"]).</input>
-"a/b/c"
-
+"a/b/c"</pre>
+ <pre>
6> <input>filename:join(["B:a\\b///c/"]).</input> % Windows
"b:a/b/c"</pre>
</desc>
</func>
+
<func>
<name name="join" arity="2"/>
- <fsummary>Join two filename components with directory separators</fsummary>
+ <fsummary>Join two filename components with directory separators.
+ </fsummary>
<desc>
- <p>Joins two file name components with directory separators.
- Equivalent to <c>join([<anno>Name1</anno>, <anno>Name2</anno>])</c>.</p>
+ <p>Joins two filename components with directory separators.
+ Equivalent to <c>join([<anno>Name1</anno>, <anno>Name2</anno>])</c>.
+ </p>
</desc>
</func>
+
<func>
<name name="nativename" arity="1"/>
- <fsummary>Return the native form of a file path</fsummary>
+ <fsummary>Return the native form of a file path.</fsummary>
<desc>
- <p>Converts <c><anno>Path</anno></c> to a form accepted by the command shell
- and native applications on the current platform. On Windows,
+ <p>Converts <c><anno>Path</anno></c> to a form accepted by the command
+ shell and native applications on the current platform. On Windows,
forward slashes are converted to backward slashes. On all
- platforms, the name is normalized as done by <c>join/1</c>.</p>
+ platforms, the name is normalized as done by
+ <seealso marker="#join/1"><c>join/1</c></seealso>.</p>
+ <p><em>Examples:</em></p>
<pre>
19> <input>filename:nativename("/usr/local/bin/").</input> % Unix
-"/usr/local/bin"
-
+"/usr/local/bin"</pre>
+ <pre>
7> <input>filename:nativename("/usr/local/bin/").</input> % Windows
"\\usr\\local\\bin"</pre>
</desc>
</func>
+
<func>
<name name="pathtype" arity="1"/>
- <fsummary>Return the type of a path</fsummary>
+ <fsummary>Return the path type.</fsummary>
<desc>
- <p>Returns the type of path, one of <c>absolute</c>,
- <c>relative</c>, or <c>volumerelative</c>.</p>
+ <p>Returns the path type, which is one of the following:</p>
<taglist>
<tag><c>absolute</c></tag>
<item>
@@ -408,14 +488,16 @@ true
</taglist>
</desc>
</func>
+
<func>
<name name="rootname" arity="1"/>
<name name="rootname" arity="2"/>
- <fsummary>Remove a filename extension</fsummary>
+ <fsummary>Remove a filename extension.</fsummary>
<desc>
- <p>Remove a filename extension. <c>rootname/2</c> works as
+ <p>Removes a filename extension. <c>rootname/2</c> works as
<c>rootname/1</c>, except that the extension is removed only
if it is <c><anno>Ext</anno></c>.</p>
+ <p><em>Examples:</em></p>
<pre>
20> <input>filename:rootname("/beam.src/kalle").</input>
/beam.src/kalle"
@@ -427,12 +509,14 @@ true
"/beam.src/foo.beam"</pre>
</desc>
</func>
+
<func>
<name name="split" arity="1"/>
- <fsummary>Split a filename into its path components</fsummary>
+ <fsummary>Split a filename into its path components.</fsummary>
<desc>
<p>Returns a list whose elements are the path components of
<c><anno>Filename</anno></c>.</p>
+ <p><em>Examples:</em></p>
<pre>
24> <input>filename:split("/usr/local/bin").</input>
["/","usr","local","bin"]
@@ -442,50 +526,6 @@ true
["a:/","msdev","include"]</pre>
</desc>
</func>
- <func>
- <name name="find_src" arity="1"/>
- <name name="find_src" arity="2"/>
- <fsummary>Find the filename and compiler options for a module</fsummary>
- <desc>
- <p>Finds the source filename and compiler options for a module.
- The result can be fed to <c>compile:file/2</c> in order to
- compile the file again.</p>
-
- <warning><p>We don't recommend using this function. If possible,
- use <seealso marker="beam_lib">beam_lib(3)</seealso> to extract
- the abstract code format from the BEAM file and compile that
- instead.</p></warning>
-
- <p>The <c><anno>Beam</anno></c> argument, which can be a string or an atom,
- specifies either the module name or the path to the source
- code, with or without the <c>".erl"</c> extension. In either
- case, the module must be known by the code server, i.e.
- <c>code:which(<anno>Module</anno>)</c> must succeed.</p>
- <p><c><anno>Rules</anno></c> describes how the source directory can be found,
- when the object code directory is known. It is a list of
- tuples <c>{<anno>BinSuffix</anno>, <anno>SourceSuffix</anno>}</c> and is interpreted
- as follows: If the end of the directory name where the object
- is located matches <c><anno>BinSuffix</anno></c>, then the source code
- directory has the same name, but with <c><anno>BinSuffix</anno></c>
- replaced by <c><anno>SourceSuffix</anno></c>. <c><anno>Rules</anno></c> defaults to:</p>
- <code type="none">
-[{"", ""}, {"ebin", "src"}, {"ebin", "esrc"}]</code>
- <p>If the source file is found in the resulting directory, then
- the function returns that location together with
- <c><anno>Options</anno></c>. Otherwise, the next rule is tried, and so on.</p>
-
- <p>The function returns <c>{<anno>SourceFile</anno>, <anno>Options</anno>}</c> if it succeeds.
- <c><anno>SourceFile</anno></c> is the absolute path to the source file
- without the <c>".erl"</c> extension. <c><anno>Options</anno></c> include
- the options which are necessary to recompile the file with
- <c>compile:file/2</c>, but excludes options such as
- <c>report</c> or <c>verbose</c> which do not change the way
- code is generated. The paths in the <c>{outdir, <anno>Path</anno>}</c>
- and <c>{i, Path}</c> options are guaranteed to be
- absolute.</p>
-
- </desc>
- </func>
</funcs>
</erlref>
diff --git a/lib/stdlib/doc/src/gb_sets.xml b/lib/stdlib/doc/src/gb_sets.xml
index 84609a0f7c..d677dd6f83 100644
--- a/lib/stdlib/doc/src/gb_sets.xml
+++ b/lib/stdlib/doc/src/gb_sets.xml
@@ -29,87 +29,75 @@
<rev></rev>
</header>
<module>gb_sets</module>
- <modulesummary>General Balanced Trees</modulesummary>
+ <modulesummary>General balanced trees.</modulesummary>
<description>
- <p>An implementation of ordered sets using Prof. Arne Andersson's
- General Balanced Trees. This can be much more efficient than
+ <p>This module provides ordered sets using Prof. Arne Andersson's
+ General Balanced Trees. Ordered sets can be much more efficient than
using ordered lists, for larger sets, but depends on the
application.</p>
+
<p>This module considers two elements as different if and only if
they do not compare equal (<c>==</c>).</p>
</description>
<section>
- <title>Complexity note</title>
- <p>The complexity on set operations is bounded by either O(|S|) or
- O(|T| * log(|S|)), where S is the largest given set, depending
+ <title>Complexity Note</title>
+ <p>The complexity on set operations is bounded by either <em>O(|S|)</em> or
+ <em>O(|T| * log(|S|))</em>, where S is the largest given set, depending
on which is fastest for any particular function call. For
operating on sets of almost equal size, this implementation is
about 3 times slower than using ordered-list sets directly. For
sets of very different sizes, however, this solution can be
- arbitrarily much faster; in practical cases, often between 10
- and 100 times. This implementation is particularly suited for
+ arbitrarily much faster; in practical cases, often
+ 10-100 times. This implementation is particularly suited for
accumulating elements a few at a time, building up a large set
- (more than 100-200 elements), and repeatedly testing for
+ (&gt; 100-200 elements), and repeatedly testing for
membership in the current set.</p>
+
<p>As with normal tree structures, lookup (membership testing),
- insertion and deletion have logarithmic complexity.</p>
+ insertion, and deletion have logarithmic complexity.</p>
</section>
<section>
<title>Compatibility</title>
- <p>All of the following functions in this module also exist
- and do the same thing in the <c>sets</c> and <c>ordsets</c>
+ <p>The following functions in this module also exist and provides
+ the same functionality in the
+ <seealso marker="sets"><c>sets(3)</c></seealso> and
+ <seealso marker="ordsets"><c>ordsets(3)</c></seealso>
modules. That is, by only changing the module name for each call,
you can try out different set representations.</p>
<list type="bulleted">
- <item>
- <p><c>add_element/2</c></p>
+ <item><seealso marker="#add_element/2"><c>add_element/2</c></seealso>
</item>
- <item>
- <p><c>del_element/2</c></p>
+ <item><seealso marker="#del_element/2"><c>del_element/2</c></seealso>
</item>
- <item>
- <p><c>filter/2</c></p>
+ <item><seealso marker="#filter/2"><c>filter/2</c></seealso>
</item>
- <item>
- <p><c>fold/3</c></p>
+ <item><seealso marker="#fold/3"><c>fold/3</c></seealso>
</item>
- <item>
- <p><c>from_list/1</c></p>
+ <item><seealso marker="#from_list/1"><c>from_list/1</c></seealso>
</item>
- <item>
- <p><c>intersection/1</c></p>
+ <item><seealso marker="#intersection/1"><c>intersection/1</c></seealso>
</item>
- <item>
- <p><c>intersection/2</c></p>
+ <item><seealso marker="#intersection/2"><c>intersection/2</c></seealso>
</item>
- <item>
- <p><c>is_element/2</c></p>
+ <item><seealso marker="#is_element/2"><c>is_element/2</c></seealso>
</item>
- <item>
- <p><c>is_set/1</c></p>
+ <item><seealso marker="#is_set/1"><c>is_set/1</c></seealso>
</item>
- <item>
- <p><c>is_subset/2</c></p>
+ <item><seealso marker="#is_subset/2"><c>is_subset/2</c></seealso>
</item>
- <item>
- <p><c>new/0</c></p>
+ <item><seealso marker="#new/0"><c>new/0</c></seealso>
</item>
- <item>
- <p><c>size/1</c></p>
+ <item><seealso marker="#size/1"><c>size/1</c></seealso>
</item>
- <item>
- <p><c>subtract/2</c></p>
+ <item><seealso marker="#subtract/2"><c>subtract/2</c></seealso>
</item>
- <item>
- <p><c>to_list/1</c></p>
+ <item><seealso marker="#to_list/1"><c>to_list/1</c></seealso>
</item>
- <item>
- <p><c>union/1</c></p>
+ <item><seealso marker="#union/1"><c>union/1</c></seealso>
</item>
- <item>
- <p><c>union/2</c></p>
+ <item><seealso marker="#union/2"><c>union/2</c></seealso>
</item>
</list>
</section>
@@ -117,290 +105,369 @@
<datatypes>
<datatype>
<name name="set" n_vars="1"/>
- <desc><p>A GB set.</p></desc>
+ <desc><p>A general balanced set.</p></desc>
</datatype>
<datatype>
<name name="set" n_vars="0"/>
</datatype>
<datatype>
<name name="iter" n_vars="1"/>
- <desc><p>A GB set iterator.</p></desc>
+ <desc><p>A general balanced set iterator.</p></desc>
</datatype>
<datatype>
<name name="iter" n_vars="0"/>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="add" arity="2"/>
<name name="add_element" arity="2"/>
- <fsummary>Add a (possibly existing) element to a set</fsummary>
+ <fsummary>Add a (possibly existing) element to a set.</fsummary>
<desc>
<p>Returns a new set formed from <c><anno>Set1</anno></c> with
- <c><anno>Element</anno></c> inserted. If <c><anno>Element</anno></c> is already an
+ <c><anno>Element</anno></c> inserted. If <c><anno>Element</anno></c>
+ is already an
element in <c><anno>Set1</anno></c>, nothing is changed.</p>
</desc>
</func>
+
<func>
<name name="balance" arity="1"/>
- <fsummary>Rebalance tree representation of a set</fsummary>
+ <fsummary>Rebalance tree representation of a set.</fsummary>
<desc>
- <p>Rebalances the tree representation of <c><anno>Set1</anno></c>. Note that
- this is rarely necessary, but may be motivated when a large
+ <p>Rebalances the tree representation of <c><anno>Set1</anno></c>.
+ Notice that
+ this is rarely necessary, but can be motivated when a large
number of elements have been deleted from the tree without
- further insertions. Rebalancing could then be forced in order
- to minimise lookup times, since deletion only does not
+ further insertions. Rebalancing can then be forced
+ to minimise lookup times, as deletion does not
rebalance the tree.</p>
</desc>
</func>
+
+ <func>
+ <name name="del_element" arity="2"/>
+ <fsummary>Remove a (possibly non-existing) element from a set.</fsummary>
+ <desc>
+ <p>Returns a new set formed from <c><anno>Set1</anno></c> with
+ <c><anno>Element</anno></c> removed. If <c><anno>Element</anno></c>
+ is not an element
+ in <c><anno>Set1</anno></c>, nothing is changed.</p>
+ </desc>
+ </func>
+
<func>
<name name="delete" arity="2"/>
- <fsummary>Remove an element from a set</fsummary>
+ <fsummary>Remove an element from a set.</fsummary>
<desc>
<p>Returns a new set formed from <c><anno>Set1</anno></c> with
- <c><anno>Element</anno></c> removed. Assumes that <c><anno>Element</anno></c> is present
+ <c><anno>Element</anno></c> removed. Assumes that
+ <c><anno>Element</anno></c> is present
in <c><anno>Set1</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="delete_any" arity="2"/>
- <name name="del_element" arity="2"/>
- <fsummary>Remove a (possibly non-existing) element from a set</fsummary>
+ <fsummary>Remove a (possibly non-existing) element from a set.</fsummary>
<desc>
<p>Returns a new set formed from <c><anno>Set1</anno></c> with
- <c><anno>Element</anno></c> removed. If <c><anno>Element</anno></c> is not an element
+ <c><anno>Element</anno></c> removed. If <c><anno>Element</anno></c>
+ is not an element
in <c><anno>Set1</anno></c>, nothing is changed.</p>
</desc>
</func>
+
<func>
<name name="difference" arity="2"/>
- <name name="subtract" arity="2"/>
- <fsummary>Return the difference of two sets</fsummary>
+ <fsummary>Return the difference of two sets.</fsummary>
<desc>
- <p>Returns only the elements of <c><anno>Set1</anno></c> which are not also
- elements of <c><anno>Set2</anno></c>.</p>
+ <p>Returns only the elements of <c><anno>Set1</anno></c> that are not
+ also elements of <c><anno>Set2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="empty" arity="0"/>
- <name name="new" arity="0"/>
- <fsummary>Return an empty set</fsummary>
+ <fsummary>Return an empty set.</fsummary>
<desc>
<p>Returns a new empty set.</p>
</desc>
</func>
+
<func>
<name name="filter" arity="2"/>
- <fsummary>Filter set elements</fsummary>
+ <fsummary>Filter set elements.</fsummary>
<desc>
<p>Filters elements in <c><anno>Set1</anno></c> using predicate function
<c><anno>Pred</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="fold" arity="3"/>
- <fsummary>Fold over set elements</fsummary>
+ <fsummary>Fold over set elements.</fsummary>
<desc>
- <p>Folds <c><anno>Function</anno></c> over every element in <c><anno>Set</anno></c>
+ <p>Folds <c><anno>Function</anno></c> over every element in
+ <c><anno>Set</anno></c>
returning the final value of the accumulator.</p>
</desc>
</func>
+
<func>
<name name="from_list" arity="1"/>
- <fsummary>Convert a list into a set</fsummary>
+ <fsummary>Convert a list into a set.</fsummary>
<desc>
<p>Returns a set of the elements in <c><anno>List</anno></c>, where
- <c><anno>List</anno></c> may be unordered and contain duplicates.</p>
+ <c><anno>List</anno></c> can be unordered and contain duplicates.</p>
</desc>
</func>
+
<func>
<name name="from_ordset" arity="1"/>
- <fsummary>Make a set from an ordset list</fsummary>
+ <fsummary>Make a set from an ordset list.</fsummary>
<desc>
- <p>Turns an ordered-set list <c><anno>List</anno></c> into a set. The list
- must not contain duplicates.</p>
+ <p>Turns an ordered-set list <c><anno>List</anno></c> into a set.
+ The list must not contain duplicates.</p>
</desc>
</func>
+
<func>
<name name="insert" arity="2"/>
- <fsummary>Add a new element to a set</fsummary>
+ <fsummary>Add a new element to a set.</fsummary>
<desc>
<p>Returns a new set formed from <c><anno>Set1</anno></c> with
- <c><anno>Element</anno></c> inserted. Assumes that <c><anno>Element</anno></c> is not
+ <c><anno>Element</anno></c> inserted. Assumes that
+ <c><anno>Element</anno></c> is not
present in <c><anno>Set1</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="intersection" arity="2"/>
- <fsummary>Return the intersection of two sets</fsummary>
+ <name name="intersection" arity="1"/>
+ <fsummary>Return the intersection of a list of sets.</fsummary>
<desc>
- <p>Returns the intersection of <c><anno>Set1</anno></c> and <c><anno>Set2</anno></c>.</p>
+ <p>Returns the intersection of the non-empty list of sets.</p>
</desc>
</func>
+
<func>
- <name name="intersection" arity="1"/>
- <fsummary>Return the intersection of a list of sets</fsummary>
+ <name name="intersection" arity="2"/>
+ <fsummary>Return the intersection of two sets.</fsummary>
<desc>
- <p>Returns the intersection of the non-empty list of sets.</p>
+ <p>Returns the intersection of <c><anno>Set1</anno></c> and
+ <c><anno>Set2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="is_disjoint" arity="2"/>
- <fsummary>Check whether two sets are disjoint</fsummary>
+ <fsummary>Check whether two sets are disjoint.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Set1</anno></c> and
<c><anno>Set2</anno></c> are disjoint (have no elements in common),
- and <c>false</c> otherwise.</p>
+ otherwise <c>false</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="is_element" arity="2"/>
+ <fsummary>Test for membership of a set.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c><anno>Element</anno></c> is an element of
+ <c><anno>Set</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_empty" arity="1"/>
- <fsummary>Test for empty set</fsummary>
+ <fsummary>Test for empty set.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Set</anno></c> is an empty set, and
- <c>false</c> otherwise.</p>
+ <p>Returns <c>true</c> if <c><anno>Set</anno></c> is an empty set,
+ otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_member" arity="2"/>
- <name name="is_element" arity="2"/>
- <fsummary>Test for membership of a set</fsummary>
+ <fsummary>Test for membership of a set.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Element</anno></c> is an element of
<c><anno>Set</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_set" arity="1"/>
- <fsummary>Test for a set</fsummary>
+ <fsummary>Test for a set.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>Term</anno></c> appears to be a set,
otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_subset" arity="2"/>
- <fsummary>Test for subset</fsummary>
+ <fsummary>Test for subset.</fsummary>
<desc>
<p>Returns <c>true</c> when every element of <c><anno>Set1</anno></c> is
also a member of <c><anno>Set2</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="iterator" arity="1"/>
- <fsummary>Return an iterator for a set</fsummary>
+ <fsummary>Return an iterator for a set.</fsummary>
<desc>
- <p>Returns an iterator that can be used for traversing the
- entries of <c><anno>Set</anno></c>; see <c>next/1</c>. The implementation
+ <p>Returns an iterator that can be used for traversing the entries of
+ <c><anno>Set</anno></c>; see
+ <seealso marker="#next/1"><c>next/1</c></seealso>. The implementation
of this is very efficient; traversing the whole set using
- <c>next/1</c> is only slightly slower than getting the list
- of all elements using <c>to_list/1</c> and traversing that.
+ <c>next/1</c> is only slightly slower than getting the list of all
+ elements using <seealso marker="#to_list/1"><c>to_list/1</c></seealso>
+ and traversing that.
The main advantage of the iterator approach is that it does
not require the complete list of all elements to be built in
memory at one time.</p>
</desc>
</func>
+
<func>
<name name="iterator_from" arity="2"/>
- <fsummary>Return an iterator for a set starting from a specified element</fsummary>
+ <fsummary>Return an iterator for a set starting from a specified element.
+ </fsummary>
<desc>
<p>Returns an iterator that can be used for traversing the
- entries of <c><anno>Set</anno></c>; see <c>next/1</c>.
+ entries of <c><anno>Set</anno></c>; see
+ <seealso marker="#next/1"><c>next/1</c></seealso>.
The difference as compared to the iterator returned by
- <c>iterator/1</c> is that the first element greater than
+ <seealso marker="#iterator/1"><c>iterator/1</c></seealso>
+ is that the first element greater than
or equal to <c><anno>Element</anno></c> is returned.</p>
</desc>
</func>
+
<func>
<name name="largest" arity="1"/>
- <fsummary>Return largest element</fsummary>
+ <fsummary>Return largest element.</fsummary>
<desc>
<p>Returns the largest element in <c><anno>Set</anno></c>. Assumes that
- <c><anno>Set</anno></c> is nonempty.</p>
+ <c><anno>Set</anno></c> is not empty.</p>
</desc>
</func>
+
+ <func>
+ <name name="new" arity="0"/>
+ <fsummary>Return an empty set.</fsummary>
+ <desc>
+ <p>Returns a new empty set.</p>
+ </desc>
+ </func>
+
<func>
<name name="next" arity="1"/>
- <fsummary>Traverse a set with an iterator</fsummary>
+ <fsummary>Traverse a set with an iterator.</fsummary>
<desc>
- <p>Returns <c>{<anno>Element</anno>, <anno>Iter2</anno>}</c> where <c><anno>Element</anno></c> is the
- smallest element referred to by the iterator <c><anno>Iter1</anno></c>,
+ <p>Returns <c>{<anno>Element</anno>, <anno>Iter2</anno>}</c>, where
+ <c><anno>Element</anno></c> is the smallest element referred to by
+ iterator <c><anno>Iter1</anno></c>,
and <c><anno>Iter2</anno></c> is the new iterator to be used for
traversing the remaining elements, or the atom <c>none</c> if
no elements remain.</p>
</desc>
</func>
+
<func>
<name name="singleton" arity="1"/>
- <fsummary>Return a set with one element</fsummary>
+ <fsummary>Return a set with one element.</fsummary>
<desc>
- <p>Returns a set containing only the element <c><anno>Element</anno></c>.</p>
+ <p>Returns a set containing only element <c><anno>Element</anno></c>.
+ </p>
</desc>
</func>
+
<func>
<name name="size" arity="1"/>
- <fsummary>Return the number of elements in a set</fsummary>
+ <fsummary>Return the number of elements in a set.</fsummary>
<desc>
<p>Returns the number of elements in <c><anno>Set</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="smallest" arity="1"/>
- <fsummary>Return smallest element</fsummary>
+ <fsummary>Return smallest element.</fsummary>
<desc>
<p>Returns the smallest element in <c><anno>Set</anno></c>. Assumes that
- <c><anno>Set</anno></c> is nonempty.</p>
+ <c><anno>Set</anno></c> is not empty.</p>
</desc>
</func>
+
+ <func>
+ <name name="subtract" arity="2"/>
+ <fsummary>Return the difference of two sets.</fsummary>
+ <desc>
+ <p>Returns only the elements of <c><anno>Set1</anno></c> that are not
+ also elements of <c><anno>Set2</anno></c>.</p>
+ </desc>
+ </func>
+
<func>
<name name="take_largest" arity="1"/>
- <fsummary>Extract largest element</fsummary>
+ <fsummary>Extract largest element.</fsummary>
<desc>
- <p>Returns <c>{<anno>Element</anno>, <anno>Set2</anno>}</c>, where <c><anno>Element</anno></c> is the
- largest element in <c><anno>Set1</anno></c>, and <c><anno>Set2</anno></c> is this set
- with <c><anno>Element</anno></c> deleted. Assumes that <c><anno>Set1</anno></c> is
- nonempty.</p>
+ <p>Returns <c>{<anno>Element</anno>, <anno>Set2</anno>}</c>, where
+ <c><anno>Element</anno></c> is the largest element in
+ <c><anno>Set1</anno></c>, and <c><anno>Set2</anno></c> is this set
+ with <c><anno>Element</anno></c> deleted. Assumes that
+ <c><anno>Set1</anno></c> is not empty.</p>
</desc>
</func>
+
<func>
<name name="take_smallest" arity="1"/>
- <fsummary>Extract smallest element</fsummary>
+ <fsummary>Extract smallest element.</fsummary>
<desc>
- <p>Returns <c>{<anno>Element</anno>, <anno>Set2</anno>}</c>, where <c><anno>Element</anno></c> is the
- smallest element in <c><anno>Set1</anno></c>, and <c><anno>Set2</anno></c> is this set
- with <c><anno>Element</anno></c> deleted. Assumes that <c><anno>Set1</anno></c> is
- nonempty.</p>
+ <p>Returns <c>{<anno>Element</anno>, <anno>Set2</anno>}</c>, where
+ <c><anno>Element</anno></c> is the smallest element in
+ <c><anno>Set1</anno></c>, and <c><anno>Set2</anno></c> is this set
+ with <c><anno>Element</anno></c> deleted. Assumes that
+ <c><anno>Set1</anno></c> is not empty.</p>
</desc>
</func>
+
<func>
<name name="to_list" arity="1"/>
- <fsummary>Convert a set into a list</fsummary>
+ <fsummary>Convert a set into a list.</fsummary>
<desc>
<p>Returns the elements of <c><anno>Set</anno></c> as a list.</p>
</desc>
</func>
+
<func>
- <name name="union" arity="2"/>
- <fsummary>Return the union of two sets</fsummary>
+ <name name="union" arity="1"/>
+ <fsummary>Return the union of a list of sets.</fsummary>
<desc>
- <p>Returns the merged (union) set of <c><anno>Set1</anno></c> and
- <c><anno>Set2</anno></c>.</p>
+ <p>Returns the merged (union) set of the list of sets.</p>
</desc>
</func>
+
<func>
- <name name="union" arity="1"/>
- <fsummary>Return the union of a list of sets</fsummary>
+ <name name="union" arity="2"/>
+ <fsummary>Return the union of two sets.</fsummary>
<desc>
- <p>Returns the merged (union) set of the list of sets.</p>
+ <p>Returns the merged (union) set of <c><anno>Set1</anno></c> and
+ <c><anno>Set2</anno></c>.</p>
</desc>
</func>
</funcs>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="gb_trees">gb_trees(3)</seealso>,
- <seealso marker="ordsets">ordsets(3)</seealso>,
- <seealso marker="sets">sets(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="gb_trees"><c>gb_trees(3)</c></seealso>,
+ <seealso marker="ordsets"><c>ordsets(3)</c></seealso>,
+ <seealso marker="sets"><c>sets(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/gb_trees.xml b/lib/stdlib/doc/src/gb_trees.xml
index 5d1f27c014..9a49d66820 100644
--- a/lib/stdlib/doc/src/gb_trees.xml
+++ b/lib/stdlib/doc/src/gb_trees.xml
@@ -29,277 +29,320 @@
<rev></rev>
</header>
<module>gb_trees</module>
- <modulesummary>General Balanced Trees</modulesummary>
+ <modulesummary>General balanced trees.</modulesummary>
<description>
- <p>An efficient implementation of Prof. Arne Andersson's General
+ <p>This module provides Prof. Arne Andersson's General
Balanced Trees. These have no storage overhead compared to
- unbalanced binary trees, and their performance is in general
+ unbalanced binary trees, and their performance is
better than AVL trees.</p>
+
<p>This module considers two keys as different if and only if
they do not compare equal (<c>==</c>).</p>
</description>
<section>
- <title>Data structure</title>
- <p>Data structure:</p>
+ <title>Data Structure</title>
<code type="none">
-
-- {Size, Tree}, where `Tree' is composed of nodes of the form:
- - {Key, Value, Smaller, Bigger}, and the "empty tree" node:
- - nil.</code>
- <p>There is no attempt to balance trees after deletions. Since
+{Size, Tree}</code>
+
+ <p><c>Tree</c> is composed of nodes of the form <c>{Key, Value, Smaller,
+ Bigger}</c> and the "empty tree" node <c>nil</c>.</p>
+
+ <p>There is no attempt to balance trees after deletions. As
deletions do not increase the height of a tree, this should be OK.</p>
- <p>Original balance condition <em>h(T) &lt;= ceil(c * log(|T|))</em>
+
+ <p>The original balance condition <em>h(T) &lt;= ceil(c * log(|T|))</em>
has been changed to the similar (but not quite equivalent)
condition <em>2 ^ h(T) &lt;= |T| ^ c</em>. This should also be OK.</p>
- <p>Performance is comparable to the AVL trees in the Erlang book
- (and faster in general due to less overhead); the difference is
- that deletion works for these trees, but not for the book's
- trees. Behaviour is logarithmic (as it should be).</p>
</section>
<datatypes>
<datatype>
<name name="tree" n_vars="2"/>
- <desc><p>A GB tree.</p></desc>
+ <desc><p>A general balanced tree.</p></desc>
</datatype>
<datatype>
<name name="tree" n_vars="0"/>
</datatype>
<datatype>
<name name="iter" n_vars="2"/>
- <desc><p>A GB tree iterator.</p></desc>
+ <desc><p>A general balanced tree iterator.</p></desc>
</datatype>
<datatype>
<name name="iter" n_vars="0"/>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="balance" arity="1"/>
- <fsummary>Rebalance a tree</fsummary>
+ <fsummary>Rebalance a tree.</fsummary>
<desc>
- <p>Rebalances <c><anno>Tree1</anno></c>. Note that this is rarely necessary,
- but may be motivated when a large number of nodes have been
+ <p>Rebalances <c><anno>Tree1</anno></c>. Notice that this is
+ rarely necessary,
+ but can be motivated when many nodes have been
deleted from the tree without further insertions. Rebalancing
- could then be forced in order to minimise lookup times, since
- deletion only does not rebalance the tree.</p>
+ can then be forced to minimize lookup times, as
+ deletion does not rebalance the tree.</p>
</desc>
</func>
+
<func>
<name name="delete" arity="2"/>
- <fsummary>Remove a node from a tree</fsummary>
+ <fsummary>Remove a node from a tree.</fsummary>
<desc>
- <p>Removes the node with key <c><anno>Key</anno></c> from <c><anno>Tree1</anno></c>;
- returns new tree. Assumes that the key is present in the tree,
- crashes otherwise.</p>
+ <p>Removes the node with key <c><anno>Key</anno></c> from
+ <c><anno>Tree1</anno></c> and returns the new tree. Assumes that the
+ key is present in the tree, crashes otherwise.</p>
</desc>
</func>
+
<func>
<name name="delete_any" arity="2"/>
- <fsummary>Remove a (possibly non-existing) node from a tree</fsummary>
+ <fsummary>Remove a (possibly non-existing) node from a tree.</fsummary>
<desc>
- <p>Removes the node with key <c><anno>Key</anno></c> from <c><anno>Tree1</anno></c> if
- the key is present in the tree, otherwise does nothing;
- returns new tree.</p>
+ <p>Removes the node with key <c><anno>Key</anno></c> from
+ <c><anno>Tree1</anno></c> if
+ the key is present in the tree, otherwise does nothing.
+ Returns the new tree.</p>
</desc>
</func>
+
<func>
<name name="empty" arity="0"/>
- <fsummary>Return an empty tree</fsummary>
+ <fsummary>Return an empty tree.</fsummary>
<desc>
- <p>Returns a new empty tree</p>
+ <p>Returns a new empty tree.</p>
</desc>
</func>
+
<func>
<name name="enter" arity="3"/>
- <fsummary>Insert or update key with value in a tree</fsummary>
+ <fsummary>Insert or update key with value in a tree.</fsummary>
<desc>
- <p>Inserts <c><anno>Key</anno></c> with value <c><anno>Value</anno></c> into <c><anno>Tree1</anno></c> if
- the key is not present in the tree, otherwise updates
- <c><anno>Key</anno></c> to value <c><anno>Value</anno></c> in <c><anno>Tree1</anno></c>. Returns the
+ <p>Inserts <c><anno>Key</anno></c> with value <c><anno>Value</anno></c>
+ into <c><anno>Tree1</anno></c> if the key is not present in the tree,
+ otherwise updates <c><anno>Key</anno></c> to value
+ <c><anno>Value</anno></c> in <c><anno>Tree1</anno></c>. Returns the
new tree.</p>
</desc>
</func>
+
<func>
<name name="from_orddict" arity="1"/>
- <fsummary>Make a tree from an orddict</fsummary>
+ <fsummary>Make a tree from an orddict.</fsummary>
<desc>
- <p>Turns an ordered list <c><anno>List</anno></c> of key-value tuples into a
- tree. The list must not contain duplicate keys.</p>
+ <p>Turns an ordered list <c><anno>List</anno></c> of key-value tuples
+ into a tree. The list must not contain duplicate keys.</p>
</desc>
</func>
+
<func>
<name name="get" arity="2"/>
- <fsummary>Look up a key in a tree, if present</fsummary>
+ <fsummary>Look up a key in a tree, if present.</fsummary>
<desc>
- <p>Retrieves the value stored with <c><anno>Key</anno></c> in <c><anno>Tree</anno></c>.
+ <p>Retrieves the value stored with <c><anno>Key</anno></c> in
+ <c><anno>Tree</anno></c>.
Assumes that the key is present in the tree, crashes
otherwise.</p>
</desc>
</func>
+
<func>
<name name="insert" arity="3"/>
- <fsummary>Insert a new key and value in a tree</fsummary>
+ <fsummary>Insert a new key and value in a tree.</fsummary>
<desc>
- <p>Inserts <c><anno>Key</anno></c> with value <c><anno>Value</anno></c> into <c><anno>Tree1</anno></c>;
+ <p>Inserts <c><anno>Key</anno></c> with value <c><anno>Value</anno></c>
+ into <c><anno>Tree1</anno></c> and
returns the new tree. Assumes that the key is not present in
the tree, crashes otherwise.</p>
</desc>
</func>
+
<func>
<name name="is_defined" arity="2"/>
- <fsummary>Test for membership of a tree</fsummary>
+ <fsummary>Test for membership of a tree.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Key</anno></c> is present in <c><anno>Tree</anno></c>,
- otherwise <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>Key</anno></c> is present in
+ <c><anno>Tree</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_empty" arity="1"/>
- <fsummary>Test for empty tree</fsummary>
+ <fsummary>Test for empty tree.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Tree</anno></c> is an empty tree, and
- <c>false</c> otherwise.</p>
+ <p>Returns <c>true</c> if <c><anno>Tree</anno></c> is an empty tree,
+ othwewise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="iterator" arity="1"/>
- <fsummary>Return an iterator for a tree</fsummary>
+ <fsummary>Return an iterator for a tree.</fsummary>
<desc>
<p>Returns an iterator that can be used for traversing the
- entries of <c><anno>Tree</anno></c>; see <c>next/1</c>. The implementation
+ entries of <c><anno>Tree</anno></c>; see
+ <seealso marker="#next/1"><c>next/1</c></seealso>. The implementation
of this is very efficient; traversing the whole tree using
<c>next/1</c> is only slightly slower than getting the list
- of all elements using <c>to_list/1</c> and traversing that.
+ of all elements using
+ <seealso marker="#to_list/1"><c>to_list/1</c></seealso>
+ and traversing that.
The main advantage of the iterator approach is that it does
not require the complete list of all elements to be built in
memory at one time.</p>
</desc>
</func>
+
<func>
<name name="iterator_from" arity="2"/>
- <fsummary>Return an iterator for a tree starting from specified key</fsummary>
+ <fsummary>Return an iterator for a tree starting from a specified key.
+ </fsummary>
<desc>
<p>Returns an iterator that can be used for traversing the
- entries of <c><anno>Tree</anno></c>; see <c>next/1</c>.
- The difference as compared to the iterator returned by
- <c>iterator/1</c> is that the first key greater than
- or equal to <c><anno>Key</anno></c> is returned.</p>
+ entries of <c><anno>Tree</anno></c>; see
+ <seealso marker="#next/1"><c>next/1</c></seealso>.
+ The difference as compared to the iterator returned by
+ <seealso marker="#iterator/1"><c>iterator/1</c></seealso>
+ is that the first key greater than
+ or equal to <c><anno>Key</anno></c> is returned.</p>
</desc>
</func>
+
<func>
<name name="keys" arity="1"/>
- <fsummary>Return a list of the keys in a tree</fsummary>
+ <fsummary>Return a list of the keys in a tree.</fsummary>
<desc>
<p>Returns the keys in <c><anno>Tree</anno></c> as an ordered list.</p>
</desc>
</func>
+
<func>
<name name="largest" arity="1"/>
- <fsummary>Return largest key and value</fsummary>
+ <fsummary>Return largest key and value.</fsummary>
<desc>
- <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>}</c>, where <c><anno>Key</anno></c> is the largest
- key in <c><anno>Tree</anno></c>, and <c><anno>Value</anno></c> is the value associated
- with this key. Assumes that the tree is nonempty.</p>
+ <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>}</c>, where
+ <c><anno>Key</anno></c> is the largest
+ key in <c><anno>Tree</anno></c>, and <c><anno>Value</anno></c> is
+ the value associated
+ with this key. Assumes that the tree is not empty.</p>
</desc>
</func>
+
<func>
<name name="lookup" arity="2"/>
- <fsummary>Look up a key in a tree</fsummary>
+ <fsummary>Look up a key in a tree.</fsummary>
<desc>
- <p>Looks up <c><anno>Key</anno></c> in <c><anno>Tree</anno></c>; returns
- <c>{value, <anno>Value</anno>}</c>, or <c>none</c> if <c><anno>Key</anno></c> is not
- present.</p>
+ <p>Looks up <c><anno>Key</anno></c> in <c><anno>Tree</anno></c>.
+ Returns <c>{value, <anno>Value</anno>}</c>, or <c>none</c> if
+ <c><anno>Key</anno></c> is not present.</p>
</desc>
</func>
+
<func>
<name name="map" arity="2"/>
- <fsummary>Return largest key and value</fsummary>
- <desc><p>Maps the function F(<anno>K</anno>, <anno>V1</anno>) -> <anno>V2</anno> to all key-value pairs
- of the tree <c><anno>Tree1</anno></c> and returns a new tree <c><anno>Tree2</anno></c> with the same set of keys
- as <c><anno>Tree1</anno></c> and the new set of values <c><anno>V2</anno></c>.</p>
+ <fsummary>Return largest key and value.</fsummary>
+ <desc>
+ <p>Maps function F(<anno>K</anno>, <anno>V1</anno>) -> <anno>V2</anno>
+ to all key-value pairs of tree <c><anno>Tree1</anno></c>. Returns a
+ new tree <c><anno>Tree2</anno></c> with the same set of keys as
+ <c><anno>Tree1</anno></c> and the new set of values
+ <c><anno>V2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="next" arity="1"/>
- <fsummary>Traverse a tree with an iterator</fsummary>
+ <fsummary>Traverse a tree with an iterator.</fsummary>
<desc>
- <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>, <anno>Iter2</anno>}</c> where <c><anno>Key</anno></c> is the
- smallest key referred to by the iterator <c><anno>Iter1</anno></c>, and
+ <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>,
+ <anno>Iter2</anno>}</c>, where <c><anno>Key</anno></c> is the
+ smallest key referred to by iterator <c><anno>Iter1</anno></c>, and
<c><anno>Iter2</anno></c> is the new iterator to be used for
traversing the remaining nodes, or the atom <c>none</c> if no
nodes remain.</p>
</desc>
</func>
+
<func>
<name name="size" arity="1"/>
- <fsummary>Return the number of nodes in a tree</fsummary>
+ <fsummary>Return the number of nodes in a tree.</fsummary>
<desc>
<p>Returns the number of nodes in <c><anno>Tree</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="smallest" arity="1"/>
- <fsummary>Return smallest key and value</fsummary>
+ <fsummary>Return smallest key and value.</fsummary>
<desc>
- <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>}</c>, where <c><anno>Key</anno></c> is the smallest
- key in <c><anno>Tree</anno></c>, and <c><anno>Value</anno></c> is the value associated
- with this key. Assumes that the tree is nonempty.</p>
+ <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>}</c>, where
+ <c><anno>Key</anno></c> is the smallest
+ key in <c><anno>Tree</anno></c>, and <c><anno>Value</anno></c> is
+ the value associated
+ with this key. Assumes that the tree is not empty.</p>
</desc>
</func>
+
<func>
<name name="take_largest" arity="1"/>
- <fsummary>Extract largest key and value</fsummary>
+ <fsummary>Extract largest key and value.</fsummary>
<desc>
- <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>, <anno>Tree2</anno>}</c>, where <c><anno>Key</anno></c> is the
- largest key in <c><anno>Tree1</anno></c>, <c><anno>Value</anno></c> is the value
- associated with this key, and <c><anno>Tree2</anno></c> is this tree with
- the corresponding node deleted. Assumes that the tree is
- nonempty.</p>
+ <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>,
+ <anno>Tree2</anno>}</c>, where <c><anno>Key</anno></c> is the
+ largest key in <c><anno>Tree1</anno></c>, <c><anno>Value</anno></c>
+ is the value associated with this key, and <c><anno>Tree2</anno></c>
+ is this tree with the corresponding node deleted. Assumes that the
+ tree is not empty.</p>
</desc>
</func>
+
<func>
<name name="take_smallest" arity="1"/>
- <fsummary>Extract smallest key and value</fsummary>
+ <fsummary>Extract smallest key and value.</fsummary>
<desc>
- <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>, <anno>Tree2</anno>}</c>, where <c><anno>Key</anno></c> is the
- smallest key in <c><anno>Tree1</anno></c>, <c><anno>Value</anno></c> is the value
- associated with this key, and <c><anno>Tree2</anno></c> is this tree with
- the corresponding node deleted. Assumes that the tree is
- nonempty.</p>
+ <p>Returns <c>{<anno>Key</anno>, <anno>Value</anno>,
+ <anno>Tree2</anno>}</c>, where <c><anno>Key</anno></c> is the
+ smallest key in <c><anno>Tree1</anno></c>, <c><anno>Value</anno></c>
+ is the value associated with this key, and <c><anno>Tree2</anno></c>
+ is this tree with the corresponding node deleted. Assumes that the
+ tree is not empty.</p>
</desc>
</func>
+
<func>
<name name="to_list" arity="1"/>
- <fsummary>Convert a tree into a list</fsummary>
+ <fsummary>Convert a tree into a list.</fsummary>
<desc>
<p>Converts a tree into an ordered list of key-value tuples.</p>
</desc>
</func>
+
<func>
<name name="update" arity="3"/>
- <fsummary>Update a key to new value in a tree</fsummary>
+ <fsummary>Update a key to new value in a tree.</fsummary>
<desc>
- <p>Updates <c><anno>Key</anno></c> to value <c><anno>Value</anno></c> in <c><anno>Tree1</anno></c>;
- returns the new tree. Assumes that the key is present in the
- tree.</p>
+ <p>Updates <c><anno>Key</anno></c> to value <c><anno>Value</anno></c>
+ in <c><anno>Tree1</anno></c> and
+ returns the new tree. Assumes that the key is present in the tree.</p>
</desc>
</func>
+
<func>
<name name="values" arity="1"/>
- <fsummary>Return a list of the values in a tree</fsummary>
+ <fsummary>Return a list of the values in a tree.</fsummary>
<desc>
- <p>Returns the values in <c><anno>Tree</anno></c> as an ordered list, sorted
- by their corresponding keys. Duplicates are not removed.</p>
+ <p>Returns the values in <c><anno>Tree</anno></c> as an ordered list,
+ sorted by their corresponding keys. Duplicates are not removed.</p>
</desc>
</func>
</funcs>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="gb_sets">gb_sets(3)</seealso>,
- <seealso marker="dict">dict(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="dict"><c>dict(3)</c></seealso>,
+ <seealso marker="gb_sets"><c>gb_sets(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/gen_event.xml b/lib/stdlib/doc/src/gen_event.xml
index b2c482d3ed..c24542002a 100644
--- a/lib/stdlib/doc/src/gen_event.xml
+++ b/lib/stdlib/doc/src/gen_event.xml
@@ -29,19 +29,23 @@
<rev></rev>
</header>
<module>gen_event</module>
- <modulesummary>Generic Event Handling Behaviour</modulesummary>
+ <modulesummary>Generic event handling behavior.</modulesummary>
<description>
- <p>A behaviour module for implementing event handling functionality.
- The OTP event handling model consists of a generic event manager
- process with an arbitrary number of event handlers which are added and
- deleted dynamically.</p>
- <p>An event manager implemented using this module will have a standard
- set of interface functions and include functionality for tracing and
- error reporting. It will also fit into an OTP supervision tree.
- Refer to <em>OTP Design Principles</em> for more information.</p>
+ <p>This behavior module provides event handling functionality. It
+ consists of a generic event manager process with any number of
+ event handlers that are added and deleted dynamically.</p>
+
+ <p>An event manager implemented using this module has a standard
+ set of interface functions and includes functionality for tracing and
+ error reporting. It also fits into an OTP supervision tree. For more
+ information, see
+ <seealso marker="doc/design_principles:events">OTP Design Principles</seealso>.
+ </p>
+
<p>Each event handler is implemented as a callback module exporting
- a pre-defined set of functions. The relationship between the behaviour
- functions and the callback functions can be illustrated as follows:</p>
+ a predefined set of functions. The relationship between the behavior
+ functions and the callback functions is as follows:</p>
+
<pre>
gen_event module Callback module
---------------- ---------------
@@ -69,39 +73,46 @@ gen_event:which_handlers -----> -
gen_event:stop -----> Module:terminate/2
- -----> Module:code_change/3</pre>
- <p>Since each event handler is one callback module, an event manager
- will have several callback modules which are added and deleted
- dynamically. Therefore <c>gen_event</c> is more tolerant of callback
- module errors than the other behaviours. If a callback function for
+
+ <p>As each event handler is one callback module, an event manager
+ has many callback modules that are added and deleted
+ dynamically. <c>gen_event</c> is therefore more tolerant of callback
+ module errors than the other behaviors. If a callback function for
an installed event handler fails with <c>Reason</c>, or returns a
- bad value <c>Term</c>, the event manager will not fail. It will delete
- the event handler by calling the callback function
- <c>Module:terminate/2</c> (see below), giving as argument
+ bad value <c>Term</c>, the event manager does not fail. It deletes
+ the event handler by calling callback function
+ <seealso marker="#Module:terminate/2"><c>Module:terminate/2</c></seealso>,
+ giving as argument
<c>{error,{'EXIT',Reason}}</c> or <c>{error,Term}</c>, respectively.
- No other event handler will be affected.</p>
- <p>A gen_event process handles system messages as documented in
- <seealso marker="sys">sys(3)</seealso>. The <c>sys</c> module
+ No other event handler is affected.</p>
+
+ <p>A <c>gen_event</c> process handles system messages as described in
+ <seealso marker="sys"><c>sys(3)</c></seealso>. The <c>sys</c> module
can be used for debugging an event manager.</p>
- <p>Note that an event manager <em>does</em> trap exit signals
+
+ <p>Notice that an event manager <em>does</em> trap exit signals
automatically.</p>
- <p>The gen_event process can go into hibernation
- (see <seealso marker="erts:erlang#erlang:hibernate/3">erlang(3)</seealso>) if a callback
- function in a handler module specifies <c>'hibernate'</c> in its return value.
- This might be useful if the server is expected to be idle for a long
- time. However this feature should be used with care as hibernation
- implies at least two garbage collections (when hibernating and
- shortly after waking up) and is not something you'd want to do
- between each event handled by a busy event manager.</p>
-
- <p>It's also worth noting that when multiple event handlers are
- invoked, it's sufficient that one single event handler returns a
- <c>'hibernate'</c> request for the whole event manager to go into
- hibernation.</p>
+
+ <p>The <c>gen_event</c> process can go into hibernation
+ (see <seealso marker="erts:erlang#hibernate/3">
+ <c>erlang:hibernate/3</c></seealso>) if a callback function in
+ a handler module specifies <c>hibernate</c> in its return value.
+ This can be useful if the server is expected to be idle for a long
+ time. However, use this feature with care, as hibernation
+ implies at least two garbage collections (when hibernating and
+ shortly after waking up) and is not something you want to do
+ between each event handled by a busy event manager.</p>
+
+ <p>Notice that when multiple event handlers are
+ invoked, it is sufficient that one single event handler returns a
+ <c>hibernate</c> request for the whole event manager to go into
+ hibernation.</p>
<p>Unless otherwise stated, all functions in this module fail if
the specified event manager does not exist or if bad arguments are
- given.</p>
+ specified.</p>
</description>
+
<datatypes>
<datatype>
<name name="handler"/>
@@ -116,66 +127,9 @@ gen_event:stop -----> Module:terminate/2
<name name="del_handler_ret"/>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name>start_link() -> Result</name>
- <name>start_link(EventMgrName) -> Result</name>
- <fsummary>Create a generic event manager process in a supervision tree.</fsummary>
- <type>
- <v>EventMgrName = {local,Name} | {global,GlobalName}
- | {via,Module,ViaName}</v>
- <v>&nbsp;Name = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Result = {ok,Pid} | {error,{already_started,Pid}}</v>
- <v>&nbsp;Pid = pid()</v>
- </type>
- <desc>
- <p>Creates an event manager process as part of a supervision
- tree. The function should be called, directly or indirectly,
- by the supervisor. It will, among other things, ensure that
- the event manager is linked to the supervisor.</p>
- <p>If <c>EventMgrName={local,Name}</c>, the event manager is
- registered locally as <c>Name</c> using <c>register/2</c>.
- If <c>EventMgrName={global,GlobalName}</c>, the event manager is
- registered globally as <c>GlobalName</c> using
- <c>global:register_name/2</c>. If no name is provided,
- the event manager is not registered.
- If <c>EventMgrName={via,Module,ViaName}</c>, the event manager will
- register with the registry represented by <c>Module</c>.
- The <c>Module</c> callback should export the functions
- <c>register_name/2</c>, <c>unregister_name/1</c>,
- <c>whereis_name/1</c> and <c>send/2</c>, which should behave like the
- corresponding functions in <c>global</c>. Thus,
- <c>{via,global,GlobalName}</c> is a valid reference.</p>
- <p>If the event manager is successfully created the function
- returns <c>{ok,Pid}</c>, where <c>Pid</c> is the pid of
- the event manager. If there already exists a process with
- the specified <c>EventMgrName</c> the function returns
- <c>{error,{already_started,Pid}}</c>, where <c>Pid</c> is
- the pid of that process.</p>
- </desc>
- </func>
- <func>
- <name>start() -> Result</name>
- <name>start(EventMgrName) -> Result</name>
- <fsummary>Create a stand-alone event manager process.</fsummary>
- <type>
- <v>EventMgrName = {local,Name} | {global,GlobalName}
- | {via,Module,ViaName}</v>
- <v>&nbsp;Name = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Result = {ok,Pid} | {error,{already_started,Pid}}</v>
- <v>&nbsp;Pid = pid()</v>
- </type>
- <desc>
- <p>Creates a stand-alone event manager process, i.e. an event
- manager which is not part of a supervision tree and thus has
- no supervisor.</p>
- <p>See <c>start_link/0,1</c> for a description of arguments and
- return values.</p>
- </desc>
- </func>
- <func>
<name>add_handler(EventMgrRef, Handler, Args) -> Result</name>
<fsummary>Add an event handler to a generic event manager.</fsummary>
<type>
@@ -191,26 +145,27 @@ gen_event:stop -----> Module:terminate/2
<v>&nbsp;Reason = term()</v>
</type>
<desc>
- <p>Adds a new event handler to the event manager <c>EventMgrRef</c>.
- The event manager will call <c>Module:init/1</c> to initiate
- the event handler and its internal state.</p>
- <p><c>EventMgrRef</c> can be:</p>
+ <p>Adds a new event handler to event manager <c>EventMgrRef</c>.
+ The event manager calls
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>
+ to initiate the event handler and its internal state.</p>
+ <p><c>EventMgrRef</c> can be any of the following:</p>
<list type="bulleted">
- <item>the pid,</item>
- <item><c>Name</c>, if the event manager is locally registered,</item>
+ <item>The pid</item>
+ <item><c>Name</c>, if the event manager is locally registered</item>
<item><c>{Name,Node}</c>, if the event manager is locally
- registered at another node, or</item>
+ registered at another node</item>
<item><c>{global,GlobalName}</c>, if the event manager is globally
- registered.</item>
- <item><c>{via,Module,ViaName}</c>, if the event manager is registered
- through an alternative process registry.</item>
+ registered</item>
+ <item><c>{via,Module,ViaName}</c>, if the event manager is registered
+ through an alternative process registry</item>
</list>
<p><c>Handler</c> is the name of the callback module <c>Module</c> or
a tuple <c>{Module,Id}</c>, where <c>Id</c> is any term.
The <c>{Module,Id}</c> representation makes it possible to
- identify a specific event handler when there are several event
- handlers using the same callback module.</p>
- <p><c>Args</c> is an arbitrary term which is passed as the argument
+ identify a specific event handler when many event handlers
+ use the same callback module.</p>
+ <p><c>Args</c> is any term that is passed as the argument
to <c>Module:init/1</c>.</p>
<p>If <c>Module:init/1</c> returns a correct value indicating
successful completion, the event manager adds the event
@@ -221,9 +176,11 @@ gen_event:stop -----> Module:terminate/2
<c>{error,Reason}</c>, respectively.</p>
</desc>
</func>
+
<func>
<name>add_sup_handler(EventMgrRef, Handler, Args) -> Result</name>
- <fsummary>Add a supervised event handler to a generic event manager.</fsummary>
+ <fsummary>Add a supervised event handler to a generic event manager.
+ </fsummary>
<type>
<v>EventMgrRef = Name | {Name,Node} | {global,GlobalName}
| {via,Module,ViaName} | pid()</v>
@@ -237,63 +194,52 @@ gen_event:stop -----> Module:terminate/2
<v>&nbsp;Reason = term()</v>
</type>
<desc>
- <p>Adds a new event handler in the same way as <c>add_handler/3</c>
- but will also supervise the connection between the event handler
+ <p>Adds a new event handler in the same way as
+ <seealso marker="#add_handler/3"><c>add_handler/3</c></seealso>,
+ but also supervises the connection between the event handler
and the calling process.</p>
<list type="bulleted">
<item>If the calling process later terminates with <c>Reason</c>,
- the event manager will delete the event handler by calling
- <c>Module:terminate/2</c> with <c>{stop,Reason}</c> as argument.</item>
+ the event manager deletes the event handler by calling
+ <seealso marker="#Module:terminate/2">
+ <c>Module:terminate/2</c></seealso>
+ with <c>{stop,Reason}</c> as argument.
+ </item>
<item>
- <p>If the event handler later is deleted, the event manager
+ <p>If the event handler is deleted later, the event manager
sends a message<c>{gen_event_EXIT,Handler,Reason}</c> to
the calling process. <c>Reason</c> is one of the following:</p>
<list type="bulleted">
- <item><c>normal</c>, if the event handler has been removed due to a
- call to <c>delete_handler/3</c>, or <c>remove_handler</c>
- has been returned by a callback function (see below).</item>
- <item><c>shutdown</c>, if the event handler has been removed
- because the event manager is terminating.</item>
- <item><c>{swapped,NewHandler,Pid}</c>, if the process <c>Pid</c>
- has replaced the event handler with another event handler
- <c>NewHandler</c> using a call to <c>swap_handler/3</c> or
- <c>swap_sup_handler/3</c>.</item>
- <item>a term, if the event handler is removed due to an error.
- Which term depends on the error.</item>
+ <item>
+ <p><c>normal</c>, if the event handler has been removed
+ because of a
+ call to <c>delete_handler/3</c>, or <c>remove_handler</c>
+ has been returned by a callback function (see below).</p>
+ </item>
+ <item>
+ <p><c>shutdown</c>, if the event handler has been removed
+ because the event manager is terminating.</p>
+ </item>
+ <item>
+ <p><c>{swapped,NewHandler,Pid}</c>, if the process <c>Pid</c>
+ has replaced the event handler with another event handler
+ <c>NewHandler</c> using a call to
+ <seealso marker="#swap_handler/3">
+ <c>swap_handler/3</c></seealso> or
+ <seealso marker="#swap_sup_handler/3">
+ <c>swap_sup_handler/3</c></seealso>.</p>
+ </item>
+ <item>
+ <p>A term, if the event handler is removed because of an error.
+ Which term depends on the error.</p></item>
</list>
</item>
</list>
- <p>See <c>add_handler/3</c> for a description of the arguments
- and return values.</p>
- </desc>
- </func>
- <func>
- <name>notify(EventMgrRef, Event) -> ok</name>
- <name>sync_notify(EventMgrRef, Event) -> ok</name>
- <fsummary>Notify an event manager about an event.</fsummary>
- <type>
- <v>EventMgrRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
- <v>&nbsp;Name = Node = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Event = term()</v>
- </type>
- <desc>
- <p>Sends an event notification to the event manager
- <c>EventMgrRef</c>. The event manager will call
- <c>Module:handle_event/2</c> for each installed event handler to
- handle the event.</p>
- <p><c>notify</c> is asynchronous and will return immediately after
- the event notification has been sent. <c>sync_notify</c> is
- synchronous in the sense that it will return <c>ok</c> after
- the event has been handled by all event handlers.</p>
- <p>See <c>add_handler/3</c> for a description of <c>EventMgrRef</c>.</p>
- <p><c>Event</c> is an arbitrary term which is passed as one of
- the arguments to <c>Module:handle_event/2</c>.</p>
- <p><c>notify</c> will not fail even if the specified event manager
- does not exist, unless it is specified as <c>Name</c>.</p>
+ <p>For a description of the arguments and return values, see
+ <seealso marker="#add_handler/3"><c>add_handler/3</c></seealso>.</p>
</desc>
</func>
+
<func>
<name>call(EventMgrRef, Handler, Request) -> Result</name>
<name>call(EventMgrRef, Handler, Request, Timeout) -> Result</name>
@@ -314,18 +260,18 @@ gen_event:stop -----> Module:terminate/2
<v>&nbsp;&nbsp;Reason = term()</v>
</type>
<desc>
- <p>Makes a synchronous call to the event handler <c>Handler</c>
- installed in the event manager <c>EventMgrRef</c> by sending a
- request and waiting until a reply arrives or a timeout occurs.
- The event manager will call <c>Module:handle_call/2</c> to handle
- the request.</p>
- <p>See <c>add_handler/3</c> for a description of <c>EventMgrRef</c>
- and <c>Handler</c>.</p>
- <p><c>Request</c> is an arbitrary term which is passed as one of
+ <p>Makes a synchronous call to event handler <c>Handler</c>
+ installed in event manager <c>EventMgrRef</c> by sending a
+ request and waiting until a reply arrives or a time-out occurs.
+ The event manager calls <seealso marker="#Module:handle_call/2">
+ <c>Module:handle_call/2</c></seealso> to handle the request.</p>
+ <p>For a description of <c>EventMgrRef</c> and <c>Handler</c>, see
+ <seealso marker="#add_handler/3"><c>add_handler/3</c></seealso>.</p>
+ <p><c>Request</c> is any term that is passed as one of
the arguments to <c>Module:handle_call/2</c>.</p>
- <p><c>Timeout</c> is an integer greater than zero which specifies
+ <p><c>Timeout</c> is an integer greater than zero that specifies
how many milliseconds to wait for a reply, or the atom
- <c>infinity</c> to wait indefinitely. Default value is 5000.
+ <c>infinity</c> to wait indefinitely. Defaults to 5000.
If no reply is received within the specified time, the function
call fails.</p>
<p>The return value <c>Reply</c> is defined in the return value of
@@ -337,7 +283,8 @@ gen_event:stop -----> Module:terminate/2
respectively.</p>
</desc>
</func>
- <func>
+
+ <func>
<name>delete_handler(EventMgrRef, Handler, Args) -> Result</name>
<fsummary>Delete an event handler from a generic event manager.</fsummary>
<type>
@@ -353,12 +300,14 @@ gen_event:stop -----> Module:terminate/2
<v>&nbsp;Reason = term()</v>
</type>
<desc>
- <p>Deletes an event handler from the event manager
- <c>EventMgrRef</c>. The event manager will call
- <c>Module:terminate/2</c> to terminate the event handler.</p>
- <p>See <c>add_handler/3</c> for a description of <c>EventMgrRef</c>
- and <c>Handler</c>.</p>
- <p><c>Args</c> is an arbitrary term which is passed as one of
+ <p>Deletes an event handler from event manager
+ <c>EventMgrRef</c>. The event manager calls
+ <seealso marker="#Module:terminate/2">
+ <c>Module:terminate/2</c></seealso> to terminate the event
+ handler.</p>
+ <p>For a description of <c>EventMgrRef</c> and <c>Handler</c>, see
+ <seealso marker="#add_handler/3"><c>add_handler/3</c></seealso>.</p>
+ <p><c>Args</c> is any term that is passed as one of
the arguments to <c>Module:terminate/2</c>.</p>
<p>The return value is the return value of <c>Module:terminate/2</c>.
If the specified event handler is not installed, the function
@@ -367,6 +316,148 @@ gen_event:stop -----> Module:terminate/2
<c>{'EXIT',Reason}</c>.</p>
</desc>
</func>
+
+ <func>
+ <name>notify(EventMgrRef, Event) -> ok</name>
+ <name>sync_notify(EventMgrRef, Event) -> ok</name>
+ <fsummary>Notify an event manager about an event.</fsummary>
+ <type>
+ <v>EventMgrRef = Name | {Name,Node} | {global,GlobalName}
+ | {via,Module,ViaName} | pid()</v>
+ <v>&nbsp;Name = Node = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Event = term()</v>
+ </type>
+ <desc>
+ <p>Sends an event notification to event manager
+ <c>EventMgrRef</c>. The event manager calls
+ <seealso marker="#Module:handle_event/2">
+ <c>Module:handle_event/2</c></seealso>
+ for each installed event handler to handle the event.</p>
+ <p><c>notify/2</c> is asynchronous and returns immediately after
+ the event notification has been sent. <c>sync_notify/2</c> is
+ synchronous in the sense that it returns <c>ok</c> after
+ the event has been handled by all event handlers.</p>
+ <p>For a description of <c>EventMgrRef</c>, see
+ <seealso marker="#add_handler/3"><c>add_handler/3</c></seealso>.</p>
+ <p><c>Event</c> is any term that is passed as one of
+ the arguments to <seealso marker="#Module:handle_event/2">
+ <c>Module:handle_event/2</c></seealso>.</p>
+ <p><c>notify/1</c> does not fail even if the specified event manager
+ does not exist, unless it is specified as <c>Name</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>start() -> Result</name>
+ <name>start(EventMgrName) -> Result</name>
+ <fsummary>Create a stand-alone event manager process.</fsummary>
+ <type>
+ <v>EventMgrName = {local,Name} | {global,GlobalName}
+ | {via,Module,ViaName}</v>
+ <v>&nbsp;Name = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Result = {ok,Pid} | {error,{already_started,Pid}}</v>
+ <v>&nbsp;Pid = pid()</v>
+ </type>
+ <desc>
+ <p>Creates a stand-alone event manager process, that is, an event
+ manager that is not part of a supervision tree and thus has
+ no supervisor.</p>
+ <p>For a description of the arguments and return values, see
+ <seealso marker="#start_link/0"><c>start_link/0,1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>start_link() -> Result</name>
+ <name>start_link(EventMgrName) -> Result</name>
+ <fsummary>Create a generic event manager process in a supervision tree.
+ </fsummary>
+ <type>
+ <v>EventMgrName = {local,Name} | {global,GlobalName}
+ | {via,Module,ViaName}</v>
+ <v>&nbsp;Name = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Result = {ok,Pid} | {error,{already_started,Pid}}</v>
+ <v>&nbsp;Pid = pid()</v>
+ </type>
+ <desc>
+ <p>Creates an event manager process as part of a supervision
+ tree. The function is to be called, directly or indirectly,
+ by the supervisor. For example, it ensures that
+ the event manager is linked to the supervisor.</p>
+ <list type="bulleted">
+ <item>
+ <p>If <c>EventMgrName={local,Name}</c>, the event manager is
+ registered locally as <c>Name</c> using <c>register/2</c>.</p>
+ </item>
+ <item>
+ <p>If <c>EventMgrName={global,GlobalName}</c>, the event manager is
+ registered globally as <c>GlobalName</c> using
+ <seealso marker="kernel:global#register_name/2">
+ <c>global:register_name/2</c></seealso>.
+ If no name is provided, the event manager is not registered.</p>
+ </item>
+ <item>
+ <p>If <c>EventMgrName={via,Module,ViaName}</c>, the event manager
+ registers with the registry represented by <c>Module</c>.
+ The <c>Module</c> callback is to export the functions
+ <c>register_name/2</c>, <c>unregister_name/1</c>,
+ <c>whereis_name/1</c>, and <c>send/2</c>, which are to behave
+ as the corresponding functions in
+ <seealso marker="kernel:global"><c>global</c></seealso>.
+ Thus, <c>{via,global,GlobalName}</c> is a valid reference.</p>
+ </item>
+ </list>
+ <p>If the event manager is successfully created, the function
+ returns <c>{ok,Pid}</c>, where <c>Pid</c> is the pid of
+ the event manager. If a process with the specified
+ <c>EventMgrName</c> exists already, the function returns
+ <c>{error,{already_started,Pid}}</c>, where <c>Pid</c> is
+ the pid of that process.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>stop(EventMgrRef) -> ok</name>
+ <name>stop(EventMgrRef, Reason, Timeout) -> ok</name>
+ <fsummary>Terminate a generic event manager.</fsummary>
+ <type>
+ <v>EventMgrRef = Name | {Name,Node} | {global,GlobalName}
+ | {via,Module,ViaName} | pid()</v>
+ <v>Name = Node = atom()</v>
+ <v>GlobalName = ViaName = term()</v>
+ <v>Reason = term()</v>
+ <v>Timeout = int()>0 | infinity</v>
+ </type>
+ <desc>
+ <p>Orders event manager <c>EventMgrRef</c> to exit with
+ the specifies <c>Reason</c> and waits for it to
+ terminate. Before terminating, <c>gen_event</c> calls
+ <seealso marker="#Module:terminate/2">
+ <c>Module:terminate(stop,...)</c></seealso>
+ for each installed event handler.</p>
+ <p>The function returns <c>ok</c> if the event manager terminates
+ with the expected reason. Any other reason than <c>normal</c>,
+ <c>shutdown</c>, or <c>{shutdown,Term}</c> causes an
+ error report to be issued using
+ <seealso marker="kernel:error_logger#format/2">
+ <c>error_logger:format/2</c></seealso>.
+ The default <c>Reason</c> is <c>normal</c>.</p>
+ <p><c>Timeout</c> is an integer greater than zero that
+ specifies how many milliseconds to wait for the event manager to
+ terminate, or the atom <c>infinity</c> to wait
+ indefinitely. Defaults to <c>infinity</c>. If the
+ event manager has not terminated within the specified time, a
+ <c>timeout</c> exception is raised.</p>
+ <p>If the process does not exist, a <c>noproc</c> exception
+ is raised.</p>
+ <p>For a description of <c>EventMgrRef</c>, see
+ <seealso marker="#add_handler/3"><c>add_handler/3</c></seealso>.</p>
+ </desc>
+ </func>
+
<func>
<name>swap_handler(EventMgrRef, {Handler1,Args1}, {Handler2,Args2}) -> Result</name>
<fsummary>Replace an event handler in a generic event manager.</fsummary>
@@ -385,34 +476,35 @@ gen_event:stop -----> Module:terminate/2
</type>
<desc>
<p>Replaces an old event handler with a new event handler in
- the event manager <c>EventMgrRef</c>.</p>
- <p>See <c>add_handler/3</c> for a description of the arguments.</p>
+ event manager <c>EventMgrRef</c>.</p>
+ <p>For a description of the arguments, see
+ <seealso marker="#add_handler/3"><c>add_handler/3</c></seealso>.</p>
<p>First the old event handler <c>Handler1</c> is deleted.
The event manager calls <c>Module1:terminate(Args1, ...)</c>,
where <c>Module1</c> is the callback module of <c>Handler1</c>,
and collects the return value.</p>
<p>Then the new event handler <c>Handler2</c> is added and initiated
by calling <c>Module2:init({Args2,Term})</c>, where <c>Module2</c>
- is the callback module of <c>Handler2</c> and <c>Term</c>
+ is the callback module of <c>Handler2</c> and <c>Term</c> is
the return value of <c>Module1:terminate/2</c>. This makes it
possible to transfer information from <c>Handler1</c> to
<c>Handler2</c>.</p>
- <p>The new handler will be added even if the the specified old event
- handler is not installed in which case <c>Term=error</c>, or if
- <c>Module1:terminate/2</c> fails with <c>Reason</c> in which case
- <c>Term={'EXIT',Reason}</c>.
- The old handler will be deleted even if <c>Module2:init/1</c>
- fails.</p>
+ <p>The new handler is added even if the the specified old event
+ handler is not installed, in which case <c>Term=error</c>, or if
+ <c>Module1:terminate/2</c> fails with <c>Reason</c>,
+ in which case <c>Term={'EXIT',Reason}</c>.
+ The old handler is deleted even if <c>Module2:init/1</c> fails.</p>
<p>If there was a supervised connection between <c>Handler1</c> and
- a process <c>Pid</c>, there will be a supervised connection
+ a process <c>Pid</c>, there is a supervised connection
between <c>Handler2</c> and <c>Pid</c> instead.</p>
<p>If <c>Module2:init/1</c> returns a correct value, this function
returns <c>ok</c>. If <c>Module2:init/1</c> fails with
- <c>Reason</c> or returns an unexpected value <c>Term</c>, this
+ <c>Reason</c> or returns an unexpected value <c>Term</c>,
this function returns <c>{error,{'EXIT',Reason}}</c> or
<c>{error,Term}</c>, respectively.</p>
</desc>
</func>
+
<func>
<name>swap_sup_handler(EventMgrRef, {Handler1,Args1}, {Handler2,Args2}) -> Result</name>
<fsummary>Replace an event handler in a generic event manager.</fsummary>
@@ -430,16 +522,18 @@ gen_event:stop -----> Module:terminate/2
<v>&nbsp;&nbsp;Reason = term()</v>
</type>
<desc>
- <p>Replaces an event handler in the event manager <c>EventMgrRef</c>
- in the same way as <c>swap_handler/3</c> but will also supervise
+ <p>Replaces an event handler in event manager <c>EventMgrRef</c>
+ in the same way as <c>swap_handler/3</c>, but also supervises
the connection between <c>Handler2</c> and the calling process.</p>
- <p>See <c>swap_handler/3</c> for a description of the arguments
- and return values.</p>
+ <p>For a description of the arguments and return values, see
+ <seealso marker="#swap_handler/3"><c>swap_handler/3</c></seealso>.</p>
</desc>
</func>
+
<func>
<name>which_handlers(EventMgrRef) -> [Handler]</name>
- <fsummary>Return all event handlers installed in a generic event manager.</fsummary>
+ <fsummary>Return all event handlers installed in a generic event manager.
+ </fsummary>
<type>
<v>EventMgrRef = Name | {Name,Node} | {global,GlobalName}
| {via,Module,ViaName} | pid()</v>
@@ -450,132 +544,106 @@ gen_event:stop -----> Module:terminate/2
<v>&nbsp;Id = term()</v>
</type>
<desc>
- <p>Returns a list of all event handlers installed in the event
+ <p>Returns a list of all event handlers installed in event
manager <c>EventMgrRef</c>.</p>
- <p>See <c>add_handler/3</c> for a description of <c>EventMgrRef</c>
- and <c>Handler</c>.</p>
- </desc>
- </func>
- <func>
- <name>stop(EventMgrRef) -> ok</name>
- <name>stop(EventMgrRef, Reason, Timeout) -> ok</name>
- <fsummary>Terminate a generic event manager.</fsummary>
- <type>
- <v>EventMgrRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
- <v>Name = Node = atom()</v>
- <v>GlobalName = ViaName = term()</v>
- <v>Reason = term()</v>
- <v>Timeout = int()>0 | infinity</v>
- </type>
- <desc>
- <p>Orders the event manager <c>EventMgrRef</c> to exit with
- the given <c>Reason</c> and waits for it to
- terminate. Before terminating, the gen_event will call
- <seealso marker="#Module:terminate/2">Module:terminate(stop,...)</seealso>
- for each installed event handler.</p>
- <p>The function returns <c>ok</c> if the event manager terminates
- with the expected reason. Any other reason than <c>normal</c>,
- <c>shutdown</c>, or <c>{shutdown,Term}</c> will cause an
- error report to be issued using
- <seealso marker="kernel:error_logger#format/2">error_logger:format/2</seealso>.
- The default <c>Reason</c> is <c>normal</c>.</p>
- <p><c>Timeout</c> is an integer greater than zero which
- specifies how many milliseconds to wait for the event manager to
- terminate, or the atom <c>infinity</c> to wait
- indefinitely. The default value is <c>infinity</c>. If the
- event manager has not terminated within the specified time, a
- <c>timeout</c> exception is raised.</p>
- <p>If the process does not exist, a <c>noproc</c> exception
- is raised.</p>
- <p>See <c>add_handler/3</c> for a description of <c>EventMgrRef</c>.</p>
+ <p>For a description of <c>EventMgrRef</c> and <c>Handler</c>, see
+ <seealso marker="#add_handler/3"><c>add_handler/3</c></seealso>.</p>
</desc>
</func>
</funcs>
<section>
- <title>CALLBACK FUNCTIONS</title>
- <p>The following functions should be exported from a <c>gen_event</c>
+ <title>Callback Functions</title>
+ <p>The following functions are to be exported from a <c>gen_event</c>
callback module.</p>
</section>
+
<funcs>
<func>
- <name>Module:init(InitArgs) -> {ok,State} | {ok,State,hibernate} | {error,Reason}</name>
- <fsummary>Initialize an event handler.</fsummary>
+ <name>Module:code_change(OldVsn, State, Extra) -> {ok, NewState}</name>
+ <fsummary>Update the internal state during upgrade/downgrade.</fsummary>
<type>
- <v>InitArgs = Args | {Args,Term}</v>
- <v>&nbsp;Args = Term = term()</v>
- <v>State = term()</v>
- <v>Reason = term()</v>
+ <v>OldVsn = Vsn | {down, Vsn}</v>
+ <v>&nbsp;&nbsp;Vsn = term()</v>
+ <v>State = NewState = term()</v>
+ <v>Extra = term()</v>
</type>
<desc>
- <p>Whenever a new event handler is added to an event manager,
- this function is called to initialize the event handler.</p>
- <p>If the event handler is added due to a call to
- <c>gen_event:add_handler/3</c> or
- <c>gen_event:add_sup_handler/3</c>, <c>InitArgs</c> is
- the <c>Args</c> argument of these functions.</p>
- <p>If the event handler is replacing another event handler due to
- a call to <c>gen_event:swap_handler/3</c> or
- <c>gen_event:swap_sup_handler/3</c>, or due to a <c>swap</c>
- return tuple from one of the other callback functions,
- <c>InitArgs</c> is a tuple <c>{Args,Term}</c> where <c>Args</c> is
- the argument provided in the function call/return tuple and
- <c>Term</c> is the result of terminating the old event handler,
- see <c>gen_event:swap_handler/3</c>.</p>
- <p>If successful, the function should return <c>{ok,State}</c>
- or <c>{ok,State,hibernate}</c> where <c>State</c> is the
- initial internal state of the event handler.</p>
- <p>If <c>{ok,State,hibernate}</c> is returned, the event
- manager will go into hibernation (by calling <seealso
- marker="proc_lib#hibernate/3">proc_lib:hibernate/3</seealso>),
- waiting for the next event to occur.</p>
+ <p>This function is called for an installed event handler that
+ is to update its internal state during a release
+ upgrade/downgrade, that is, when the instruction
+ <c>{update,Module,Change,...}</c>, where
+ <c>Change={advanced,Extra}</c>, is specified in the <c>.appup</c>
+ file. For more information, see <seealso
+ marker="doc/design_principles:users_guide">OTP Design Principles</seealso>.</p>
+ <p>For an upgrade, <c>OldVsn</c> is <c>Vsn</c>, and for a downgrade,
+ <c>OldVsn</c> is <c>{down,Vsn}</c>. <c>Vsn</c> is defined by the
+ <c>vsn</c> attribute(s) of the old version of the callback module
+ <c>Module</c>. If no such attribute is defined, the version
+ is the checksum of the Beam file.</p>
+ <p><c>State</c> is the internal state of the event handler.</p>
+ <p><c>Extra</c> is passed "as is" from the <c>{advanced,Extra}</c>
+ part of the update instruction.</p>
+ <p>The function is to return the updated internal state.</p>
</desc>
</func>
+
<func>
- <name>Module:handle_event(Event, State) -> Result</name>
- <fsummary>Handle an event.</fsummary>
+ <name>Module:format_status(Opt, [PDict, State]) -> Status</name>
+ <fsummary>Optional function for providing a term describing the
+ current event handler state.</fsummary>
<type>
- <v>Event = term()</v>
+ <v>Opt = normal | terminate</v>
+ <v>PDict = [{Key, Value}]</v>
<v>State = term()</v>
- <v>Result = {ok,NewState} | {ok,NewState,hibernate} </v>
- <v>&nbsp;&nbsp;| {swap_handler,Args1,NewState,Handler2,Args2} | remove_handler</v>
- <v>&nbsp;NewState = term()</v>
- <v>&nbsp;Args1 = Args2 = term()</v>
- <v>&nbsp;Handler2 = Module2 | {Module2,Id}</v>
- <v>&nbsp;&nbsp;Module2 = atom()</v>
- <v>&nbsp;&nbsp;Id = term()</v>
+ <v>Status = term()</v>
</type>
<desc>
- <p>Whenever an event manager receives an event sent using
- <c>gen_event:notify/2</c> or <c>gen_event:sync_notify/2</c>, this
- function is called for each installed event handler to handle
- the event.</p>
- <p><c>Event</c> is the <c>Event</c> argument of
- <c>notify</c>/<c>sync_notify</c>.</p>
+ <note>
+ <p>This callback is optional, so event handler modules need
+ not export it. If a handler does not export this function,
+ the <c>gen_event</c> module uses the handler state directly for
+ the purposes described below.</p>
+ </note>
+ <p>This function is called by a <c>gen_event</c> process in the
+ following situations:</p>
+ <list type="bulleted">
+ <item>One of <seealso marker="sys#get_status/1">
+ <c>sys:get_status/1,2</c></seealso>
+ is invoked to get the <c>gen_event</c> status. <c>Opt</c> is set
+ to the atom <c>normal</c> for this case.</item>
+ <item>The event handler terminates abnormally and <c>gen_event</c>
+ logs an error. <c>Opt</c> is set to the
+ atom <c>terminate</c> for this case.</item>
+ </list>
+ <p>This function is useful for changing the form and
+ appearance of the event handler state for these cases. An
+ event handler callback module wishing to change the
+ the <c>sys:get_status/1,2</c> return value as well as how
+ its state appears in termination error logs, exports an
+ instance of <c>format_status/2</c> that returns a term
+ describing the current state of the event handler.</p>
+ <p><c>PDict</c> is the current value of the
+ process dictionary of <c>gen_event</c>.</p>
<p><c>State</c> is the internal state of the event handler.</p>
- <p>If the function returns <c>{ok,NewState}</c> or <c>{ok,NewState,hibernate}</c>
- the event handler
- will remain in the event manager with the possible updated
- internal state <c>NewState</c>.</p>
- <p>If <c>{ok,NewState,hibernate}</c> is returned, the event
- manager will also go into hibernation (by calling <seealso
- marker="proc_lib#hibernate/3">proc_lib:hibernate/3</seealso>),
- waiting for the next event to occur. It is sufficient that one of the event
- handlers return <c>{ok,NewState,hibernate}</c> for the whole event manager
- process to hibernate.</p>
- <p>If the function returns
- <c>{swap_handler,Args1,NewState,Handler2,Args2}</c> the event
- handler will be replaced by <c>Handler2</c> by first calling
- <c>Module:terminate(Args1,NewState)</c> and then
- <c>Module2:init({Args2,Term})</c> where <c>Term</c> is the return
- value of <c>Module:terminate/2</c>.
- See <c>gen_event:swap_handler/3</c> for more information.</p>
- <p>If the function returns <c>remove_handler</c> the event handler
- will be deleted by calling
- <c>Module:terminate(remove_handler,State)</c>.</p>
+ <p>The function is to return <c>Status</c>, a term that
+ change the details of the current state of the event
+ handler. Any term is allowed for <c>Status</c>. The
+ <c>gen_event</c> module uses <c>Status</c> as follows:</p>
+ <list type="bulleted">
+ <item><p>When <c>sys:get_status/1,2</c> is called, <c>gen_event</c>
+ ensures that its return value contains <c>Status</c> in
+ place of the state term of the event handler.</p></item>
+ <item><p>When an event handler terminates abnormally, <c>gen_event</c>
+ logs <c>Status</c> in place of the state term of the
+ event handler.</p></item>
+ </list>
+ <p>One use for this function is to return compact alternative
+ state representations to avoid that large state terms
+ are printed in log files.</p>
</desc>
</func>
+
<func>
<name>Module:handle_call(Request, State) -> Result</name>
<fsummary>Handle a synchronous request.</fsummary>
@@ -594,15 +662,77 @@ gen_event:stop -----> Module:terminate/2
</type>
<desc>
<p>Whenever an event manager receives a request sent using
- <c>gen_event:call/3,4</c>, this function is called for
+ <seealso marker="#call/3"><c>call/3,4</c></seealso>,
+ this function is called for
the specified event handler to handle the request.</p>
- <p><c>Request</c> is the <c>Request</c> argument of <c>call</c>.</p>
+ <p><c>Request</c> is the <c>Request</c> argument of <c>call/3,4</c>.</p>
+ <p><c>State</c> is the internal state of the event handler.</p>
+ <p>The return values are the same as for
+ <seealso marker="#Module:handle_event/2">
+ <c>Module:handle_event/2</c></seealso>
+ except that they also contain a term <c>Reply</c>, which is the reply
+ to the client as the return value of <c>call/3,4</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:handle_event(Event, State) -> Result</name>
+ <fsummary>Handle an event.</fsummary>
+ <type>
+ <v>Event = term()</v>
+ <v>State = term()</v>
+ <v>Result = {ok,NewState} | {ok,NewState,hibernate} </v>
+ <v>&nbsp;&nbsp;| {swap_handler,Args1,NewState,Handler2,Args2}
+ | remove_handler</v>
+ <v>&nbsp;NewState = term()</v>
+ <v>&nbsp;Args1 = Args2 = term()</v>
+ <v>&nbsp;Handler2 = Module2 | {Module2,Id}</v>
+ <v>&nbsp;&nbsp;Module2 = atom()</v>
+ <v>&nbsp;&nbsp;Id = term()</v>
+ </type>
+ <desc>
+ <p>Whenever an event manager receives an event sent using
+ <seealso marker="#notify/2"><c>notify/2</c></seealso> or
+ <seealso marker="#sync_notify/2"><c>sync_notify/2</c></seealso>,
+ this function is called for each installed event handler to handle
+ the event.</p>
+ <p><c>Event</c> is the <c>Event</c> argument of
+ <c>notify/2</c>/<c>sync_notify/2</c>.</p>
<p><c>State</c> is the internal state of the event handler.</p>
- <p>The return values are the same as for <c>handle_event/2</c>
- except they also contain a term <c>Reply</c> which is the reply
- given back to the client as the return value of <c>call</c>.</p>
+ <list type="bulleted">
+ <item>
+ <p>If <c>{ok,NewState}</c> or <c>{ok,NewState,hibernate}</c>
+ is returned, the event handler
+ remains in the event manager with the possible updated
+ internal state <c>NewState</c>.</p>
+ </item>
+ <item>
+ <p>If <c>{ok,NewState,hibernate}</c> is returned, the event
+ manager also goes into hibernation (by calling
+ <seealso marker="proc_lib#hibernate/3">
+ <c>proc_lib:hibernate/3</c></seealso>), waiting for the next
+ event to occur. It is sufficient that one of the
+ event handlers return <c>{ok,NewState,hibernate}</c> for the
+ whole event manager process to hibernate.</p>
+ </item>
+ <item>
+ <p>If <c>{swap_handler,Args1,NewState,Handler2,Args2}</c> is
+ returned, the event handler is replaced by <c>Handler2</c> by
+ first calling <c>Module:terminate(Args1,NewState)</c> and then
+ <c>Module2:init({Args2,Term})</c>, where <c>Term</c> is the return
+ value of <c>Module:terminate/2</c>. For more information, see
+ <seealso marker="#swap_handler/3"><c>swap_handler/3</c></seealso>.
+ </p>
+ </item>
+ <item>
+ <p>If <c>remove_handler</c> is returned, the event handler is
+ deleted by calling
+ <c>Module:terminate(remove_handler,State)</c>.</p>
+ </item>
+ </list>
</desc>
</func>
+
<func>
<name>Module:handle_info(Info, State) -> Result</name>
<fsummary>Handle an incoming message.</fsummary>
@@ -610,7 +740,8 @@ gen_event:stop -----> Module:terminate/2
<v>Info = term()</v>
<v>State = term()</v>
<v>Result = {ok,NewState} | {ok,NewState,hibernate}</v>
- <v>&nbsp;| {swap_handler,Args1,NewState,Handler2,Args2} | remove_handler</v>
+ <v>&nbsp;| {swap_handler,Args1,NewState,Handler2,Args2}
+ | remove_handler</v>
<v>&nbsp;NewState = term()</v>
<v>&nbsp;Args1 = Args2 = term()</v>
<v>&nbsp;Handler2 = Module2 | {Module2,Id}</v>
@@ -622,10 +753,49 @@ gen_event:stop -----> Module:terminate/2
an event manager receives any other message than an event or
a synchronous request (or a system message).</p>
<p><c>Info</c> is the received message.</p>
- <p>See <c>Module:handle_event/2</c> for a description of State
- and possible return values.</p>
+ <p>For a description of <c>State</c> and possible return values, see
+ <seealso marker="#Module:handle_event/2">
+ <c>Module:handle_event/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:init(InitArgs) -> {ok,State} | {ok,State,hibernate} | {error,Reason}</name>
+ <fsummary>Initialize an event handler.</fsummary>
+ <type>
+ <v>InitArgs = Args | {Args,Term}</v>
+ <v>&nbsp;Args = Term = term()</v>
+ <v>State = term()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>Whenever a new event handler is added to an event manager,
+ this function is called to initialize the event handler.</p>
+ <p>If the event handler is added because of a call to
+ <seealso marker="#add_handler/3"><c>add_handler/3</c></seealso> or
+ <seealso marker="#add_sup_handler/3">
+ <c>add_sup_handler/3</c></seealso>, <c>InitArgs</c> is
+ the <c>Args</c> argument of these functions.</p>
+ <p>If the event handler replaces another event handler because of
+ a call to
+ <seealso marker="#swap_handler/3"><c>swap_handler/3</c></seealso> or
+ <seealso marker="#swap_sup_handler/3">
+ <c>swap_sup_handler/3</c></seealso>, or because of a <c>swap</c>
+ return tuple from one of the other callback functions,
+ <c>InitArgs</c> is a tuple <c>{Args,Term}</c>, where <c>Args</c> is
+ the argument provided in the function call/return tuple and
+ <c>Term</c> is the result of terminating the old event handler, see
+ <seealso marker="#swap_handler/3"><c>swap_handler/3</c></seealso>.</p>
+ <p>If successful, the function returns <c>{ok,State}</c>
+ or <c>{ok,State,hibernate}</c>, where <c>State</c> is the
+ initial internal state of the event handler.</p>
+ <p>If <c>{ok,State,hibernate}</c> is returned, the event
+ manager goes into hibernation (by calling <seealso
+ marker="proc_lib#hibernate/3"><c>proc_lib:hibernate/3</c></seealso>),
+ waiting for the next event to occur.</p>
</desc>
</func>
+
<func>
<name>Module:terminate(Arg, State) -> term()</name>
<fsummary>Clean up before deletion.</fsummary>
@@ -636,22 +806,25 @@ gen_event:stop -----> Module:terminate/2
</type>
<desc>
<p>Whenever an event handler is deleted from an event manager,
- this function is called. It should be the opposite of
- <c>Module:init/1</c> and do any necessary cleaning up.</p>
- <p>If the event handler is deleted due to a call to
- <c>gen_event:delete_handler</c>, <c>gen_event:swap_handler/3</c>
- or <c>gen_event:swap_sup_handler/3</c>, <c>Arg</c> is
+ this function is called. It is to be the opposite of
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>
+ and do any necessary cleaning up.</p>
+ <p>If the event handler is deleted because of a call to
+ <seealso marker="#delete_handler/3"><c>delete_handler/3</c></seealso>,
+ <seealso marker="#swap_handler/3"><c>swap_handler/3</c></seealso>, or
+ <seealso marker="#swap_sup_handler/3">
+ <c>swap_sup_handler/3</c></seealso>, <c>Arg</c> is
the <c>Args</c> argument of this function call.</p>
<p><c>Arg={stop,Reason}</c> if the event handler has a supervised
- connection to a process which has terminated with reason
+ connection to a process that has terminated with reason
<c>Reason</c>.</p>
<p><c>Arg=stop</c> if the event handler is deleted because
the event manager is terminating.</p>
- <p>The event manager will terminate if it is part of a supervision
- tree and it is ordered by its supervisor to terminate.
- Even if it is <em>not</em> part of a supervision tree, it will
- terminate if it receives an <c>'EXIT'</c> message from
- its parent.</p>
+ <p>The event manager terminates if it is part of a supervision
+ tree and it is ordered by its supervisor to terminate.
+ Even if it is <em>not</em> part of a supervision tree, it
+ terminates if it receives an <c>'EXIT'</c> message from
+ its parent.</p>
<p><c>Arg=remove_handler</c> if the event handler is deleted because
another callback function has returned <c>remove_handler</c> or
<c>{remove_handler,Reply}</c>.</p>
@@ -660,104 +833,20 @@ gen_event:stop -----> Module:terminate/2
or <c>Arg={error,{'EXIT',Reason}}</c> if a callback function
failed.</p>
<p><c>State</c> is the internal state of the event handler.</p>
- <p>The function may return any term. If the event handler is
- deleted due to a call to <c>gen_event:delete_handler</c>,
- the return value of that function will be the return value of this
+ <p>The function can return any term. If the event handler is
+ deleted because of a call to <c>gen_event:delete_handler/3</c>,
+ the return value of that function becomes the return value of this
function. If the event handler is to be replaced with another event
- handler due to a swap, the return value will be passed to
+ handler because of a swap, the return value is passed to
the <c>init</c> function of the new event handler. Otherwise
the return value is ignored.</p>
</desc>
</func>
- <func>
- <name>Module:code_change(OldVsn, State, Extra) -> {ok, NewState}</name>
- <fsummary>Update the internal state during upgrade/downgrade.</fsummary>
- <type>
- <v>OldVsn = Vsn | {down, Vsn}</v>
- <v>&nbsp;&nbsp;Vsn = term()</v>
- <v>State = NewState = term()</v>
- <v>Extra = term()</v>
- </type>
- <desc>
- <p>This function is called for an installed event handler which
- should update its internal state during a release
- upgrade/downgrade, i.e. when the instruction
- <c>{update,Module,Change,...}</c> where
- <c>Change={advanced,Extra}</c> is given in the <c>.appup</c>
- file. See <em>OTP Design Principles</em> for more
- information.</p>
- <p>In the case of an upgrade, <c>OldVsn</c> is <c>Vsn</c>, and
- in the case of a downgrade, <c>OldVsn</c> is
- <c>{down,Vsn}</c>. <c>Vsn</c> is defined by the <c>vsn</c>
- attribute(s) of the old version of the callback module
- <c>Module</c>. If no such attribute is defined, the version
- is the checksum of the BEAM file.</p>
- <p><c>State</c> is the internal state of the event handler.</p>
- <p><c>Extra</c> is passed as-is from the <c>{advanced,Extra}</c>
- part of the update instruction.</p>
- <p>The function should return the updated internal state.</p>
- </desc>
- </func>
- <func>
- <name>Module:format_status(Opt, [PDict, State]) -> Status</name>
- <fsummary>Optional function for providing a term describing the
- current event handler state.</fsummary>
- <type>
- <v>Opt = normal | terminate</v>
- <v>PDict = [{Key, Value}]</v>
- <v>State = term()</v>
- <v>Status = term()</v>
- </type>
- <desc>
- <note>
- <p>This callback is optional, so event handler modules need
- not export it. If a handler does not export this function,
- the gen_event module uses the handler state directly for
- the purposes described below.</p>
- </note>
- <p>This function is called by a gen_event process when:</p>
- <list type="bulleted">
- <item>One
- of <seealso marker="sys#get_status/1">sys:get_status/1,2</seealso>
- is invoked to get the gen_event status. <c>Opt</c> is set
- to the atom <c>normal</c> for this case.</item>
- <item>The event handler terminates abnormally and gen_event
- logs an error. <c>Opt</c> is set to the
- atom <c>terminate</c> for this case.</item>
- </list>
- <p>This function is useful for customising the form and
- appearance of the event handler state for these cases. An
- event handler callback module wishing to customise
- the <c>sys:get_status/1,2</c> return value as well as how
- its state appears in termination error logs exports an
- instance of <c>format_status/2</c> that returns a term
- describing the current state of the event handler.</p>
- <p><c>PDict</c> is the current value of the gen_event's
- process dictionary.</p>
- <p><c>State</c> is the internal state of the event
- handler.</p>
- <p>The function should return <c>Status</c>, a term that
- customises the details of the current state of the event
- handler. Any term is allowed for <c>Status</c>. The
- gen_event module uses <c>Status</c> as follows:</p>
- <list type="bulleted">
- <item>When <c>sys:get_status/1,2</c> is called, gen_event
- ensures that its return value contains <c>Status</c> in
- place of the event handler's actual state term.</item>
- <item>When an event handler terminates abnormally, gen_event
- logs <c>Status</c> in place of the event handler's actual
- state term.</item>
- </list>
- <p>One use for this function is to return compact alternative
- state representations to avoid having large state terms
- printed in logfiles.</p>
- </desc>
- </func>
</funcs>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="supervisor">supervisor(3)</seealso>,
- <seealso marker="sys">sys(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="supervisor"><c>supervisor(3)</c></seealso>,
+ <seealso marker="sys"><c>sys(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/gen_fsm.xml b/lib/stdlib/doc/src/gen_fsm.xml
index 835e252704..de06987d38 100644
--- a/lib/stdlib/doc/src/gen_fsm.xml
+++ b/lib/stdlib/doc/src/gen_fsm.xml
@@ -29,29 +29,30 @@
<rev></rev>
</header>
<module>gen_fsm</module>
- <modulesummary>Generic Finite State Machine Behaviour</modulesummary>
+ <modulesummary>Generic finite state machine behavior.</modulesummary>
<description>
<note>
<p>
There is a new behaviour
<seealso marker="gen_statem"><c>gen_statem</c></seealso>
that is intended to replace <c>gen_fsm</c> for new code.
- It has the same features and add some really useful.
- This module will not be removed for the foreseeable future
+ <c>gen_fsm</c> will not be removed for the foreseeable future
to keep old state machine implementations running.
</p>
</note>
- <p>A behaviour module for implementing a finite state machine.
- A generic finite state machine process (gen_fsm) implemented
- using this module will have a standard set of interface functions
- and include functionality for tracing and error reporting. It will
- also fit into an OTP supervision tree. Refer to
- <seealso marker="doc/design_principles:fsm">OTP Design Principles</seealso> for more information.
+ <p>This behavior module provides a finite state machine.
+ A generic finite state machine process (<c>gen_fsm</c>) implemented
+ using this module has a standard set of interface functions
+ and includes functionality for tracing and error reporting. It
+ also fits into an OTP supervision tree. For more information, see
+ <seealso marker="doc/design_principles:fsm">OTP Design Principles</seealso>.
</p>
- <p>A gen_fsm assumes all specific parts to be located in a callback
- module exporting a pre-defined set of functions. The relationship
- between the behaviour functions and the callback functions can be
- illustrated as follows:</p>
+
+ <p>A <c>gen_fsm</c> process assumes all specific parts to be located in a
+ callback module exporting a predefined set of functions. The relationship
+ between the behavior functions and the callback functions is as
+ follows:</p>
+
<pre>
gen_fsm module Callback module
-------------- ---------------
@@ -73,34 +74,261 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
- -----> Module:terminate/3
- -----> Module:code_change/4</pre>
- <p>If a callback function fails or returns a bad value, the gen_fsm
- will terminate.</p>
- <p>A gen_fsm handles system messages as documented in
- <seealso marker="sys">sys(3)</seealso>. The <c>sys</c> module
- can be used for debugging a gen_fsm.</p>
- <p>Note that a gen_fsm does not trap exit signals automatically,
- this must be explicitly initiated in the callback module.</p>
+
+ <p>If a callback function fails or returns a bad value, the <c>gen_fsm</c>
+ process terminates.</p>
+
+ <p>A <c>gen_fsm</c> process handles system messages as described in
+ <seealso marker="sys"><c>sys(3)</c></seealso>. The <c>sys</c> module
+ can be used for debugging a <c>gen_fsm</c> process.</p>
+
+ <p>Notice that a <c>gen_fsm</c> process does not trap exit signals
+ automatically, this must be explicitly initiated in the callback
+ module.</p>
+
<p>Unless otherwise stated, all functions in this module fail if
- the specified gen_fsm does not exist or if bad arguments are
- given.</p>
- <p>The gen_fsm process can go into hibernation
- (see <seealso marker="erts:erlang#erlang:hibernate/3">erlang(3)</seealso>) if a callback
- function specifies <c>'hibernate'</c> instead of a timeout value. This
- might be useful if the server is expected to be idle for a long
- time. However this feature should be used with care as hibernation
- implies at least two garbage collections (when hibernating and
- shortly after waking up) and is not something you'd want to do
- between each call to a busy state machine.</p>
+ the specified <c>gen_fsm</c> process does not exist or if bad arguments
+ are specified.</p>
+ <p>The <c>gen_fsm</c> process can go into hibernation
+ (see <seealso marker="erts:erlang#hibernate/3">
+ <c>erlang:hibernate/3</c></seealso>) if a callback function
+ specifies <c>'hibernate'</c> instead of a time-out value. This
+ can be useful if the server is expected to be idle for a long
+ time. However, use this feature with care, as hibernation
+ implies at least two garbage collections (when hibernating and
+ shortly after waking up) and is not something you want to do
+ between each call to a busy state machine.</p>
</description>
+
<funcs>
<func>
+ <name>cancel_timer(Ref) -> RemainingTime | false</name>
+ <fsummary>Cancel an internal timer in a generic FSM.</fsummary>
+ <type>
+ <v>Ref = reference()</v>
+ <v>RemainingTime = integer()</v>
+ </type>
+ <desc>
+ <p>Cancels an internal timer referred by <c>Ref</c> in the
+ <c>gen_fsm</c> process that calls this function.</p>
+ <p><c>Ref</c> is a reference returned from
+ <seealso marker="#send_event_after/2">
+ <c>send_event_after/2</c></seealso> or
+ <seealso marker="#start_timer/2"><c>start_timer/2</c></seealso>.</p>
+ <p>If the timer has already timed out, but the event not yet
+ been delivered, it is cancelled as if it had <em>not</em>
+ timed out, so there is no false timer event after
+ returning from this function.</p>
+ <p>Returns the remaining time in milliseconds until the timer would
+ have expired if <c>Ref</c> referred to an active timer, otherwise
+ <c>false</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>enter_loop(Module, Options, StateName, StateData)</name>
+ <name>enter_loop(Module, Options, StateName, StateData, FsmName)</name>
+ <name>enter_loop(Module, Options, StateName, StateData, Timeout)</name>
+ <name>enter_loop(Module, Options, StateName, StateData, FsmName, Timeout)</name>
+ <fsummary>Enter the <c>gen_fsm</c> receive loop.</fsummary>
+ <type>
+ <v>Module = atom()</v>
+ <v>Options = [Option]</v>
+ <v>&nbsp;Option = {debug,Dbgs}</v>
+ <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
+ <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics</v>
+ <v>&nbsp;&nbsp;&nbsp;&nbsp;| {log_to_file,FileName} | {install,{Func,FuncState}}</v>
+ <v>StateName = atom()</v>
+ <v>StateData = term()</v>
+ <v>FsmName = {local,Name} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName}</v>
+ <v>&nbsp;Name = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Timeout = int() | infinity</v>
+ </type>
+ <desc>
+ <p>Makes an existing process into a <c>gen_fsm</c> process.
+ Does not return,
+ instead the calling process enters the <c>gen_fsm</c> receive
+ loop and becomes a <c>gen_fsm</c> process. The process <em>must</em>
+ have been started using one of the start functions in
+ <seealso marker="proc_lib"><c>proc_lib(3)</c></seealso>. The user is
+ responsible for any initialization of the process, including
+ registering a name for it.</p>
+ <p>This function is useful when a more complex initialization
+ procedure is needed than the <c>gen_fsm</c> behavior provides.</p>
+ <p><c>Module</c>, <c>Options</c>, and <c>FsmName</c> have
+ the same meanings as when calling
+ <seealso marker="#start_link/3"><c>start[_link]/3,4</c></seealso>.
+ However, if <c>FsmName</c> is specified, the process must have
+ been registered accordingly <em>before</em> this function is
+ called.</p>
+ <p><c>StateName</c>, <c>StateData</c>, and <c>Timeout</c> have
+ the same meanings as in the return value of
+ <seealso marker="#Moduleinit"><c>Module:init/1</c></seealso>.
+ The callback module <c>Module</c> does not need to
+ export an <c>init/1</c> function.</p>
+ <p>The function fails if the calling process was not started by a
+ <c>proc_lib</c> start function, or if it is not registered
+ according to <c>FsmName</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>reply(Caller, Reply) -> Result</name>
+ <fsummary>Send a reply to a caller.</fsummary>
+ <type>
+ <v>Caller - see below</v>
+ <v>Reply = term()</v>
+ <v>Result = term()</v>
+ </type>
+ <desc>
+ <p>This function can be used by a <c>gen_fsm</c> process to
+ explicitly send a reply to a client process that called
+ <seealso marker="#sync_send_event/2">
+ <c>sync_send_event/2,3</c></seealso> or
+ <seealso marker="#sync_send_all_state_event/2">
+ <c>sync_send_all_state_event/2,3</c></seealso>
+ when the reply cannot be defined in the return value of
+ <seealso marker="#Module:StateName/3">
+ <c>Module:StateName/3</c></seealso> or
+ <seealso marker="#Module:handle_sync_event/4">
+ <c>Module:handle_sync_event/4</c></seealso>.</p>
+ <p><c>Caller</c> must be the <c>From</c> argument provided to
+ the callback function. <c>Reply</c> is any term
+ given back to the client as the return value of
+ <c>sync_send_event/2,3</c> or
+ <c>sync_send_all_state_event/2,3</c>.</p>
+ <p>Return value <c>Result</c> is not further defined, and
+ is always to be ignored.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send_all_state_event(FsmRef, Event) -> ok</name>
+ <fsummary>Send an event asynchronously to a generic FSM.</fsummary>
+ <type>
+ <v>FsmRef = Name | {Name,Node} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName} | pid()</v>
+ <v>&nbsp;Name = Node = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Event = term()</v>
+ </type>
+ <desc>
+ <p>Sends an event asynchronously to the <c>FsmRef</c> of the
+ <c>gen_fsm</c> process and returns <c>ok</c> immediately.
+ The <c>gen_fsm</c> process calls
+ <seealso marker="#Module:handle_event/3">
+ <c>Module:handle_event/3</c></seealso> to handle the event.</p>
+ <p>For a description of the arguments, see
+ <seealso marker="#send_event/2"><c>send_event/2</c></seealso>.</p>
+ <p>The difference between <c>send_event/2</c> and
+ <c>send_all_state_event/2</c> is which callback function is
+ used to handle the event. This function is useful when
+ sending events that are handled the same way in every state,
+ as only one <c>handle_event</c> clause is needed to handle
+ the event instead of one clause in each state name function.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send_event(FsmRef, Event) -> ok</name>
+ <fsummary>Send an event asynchronously to a generic FSM.</fsummary>
+ <type>
+ <v>FsmRef = Name | {Name,Node} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName} | pid()</v>
+ <v>&nbsp;Name = Node = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Event = term()</v>
+ </type>
+ <desc>
+ <p>Sends an event asynchronously to the <c>FsmRef</c> of the
+ <c>gen_fsm</c> process
+ and returns <c>ok</c> immediately. The <c>gen_fsm</c> process calls
+ <seealso marker="#Module:StateName/2">
+ <c>Module:StateName/2</c></seealso> to handle the event, where
+ <c>StateName</c> is the name of the current state of
+ the <c>gen_fsm</c> process.</p>
+ <p><c>FsmRef</c> can be any of the following:</p>
+ <list type="bulleted">
+ <item>The pid</item>
+ <item><c>Name</c>, if the <c>gen_fsm</c> process is locally
+ registered</item>
+ <item><c>{Name,Node}</c>, if the <c>gen_fsm</c> process is locally
+ registered at another node</item>
+ <item><c>{global,GlobalName}</c>, if the <c>gen_fsm</c> process is
+ globally registered</item>
+ <item><c>{via,Module,ViaName}</c>, if the <c>gen_fsm</c> process is
+ registered through an alternative process registry</item>
+ </list>
+ <p><c>Event</c> is any term that is passed as one of
+ the arguments to <c>Module:StateName/2</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send_event_after(Time, Event) -> Ref</name>
+ <fsummary>Send a delayed event internally in a generic FSM.</fsummary>
+ <type>
+ <v>Time = integer()</v>
+ <v>Event = term()</v>
+ <v>Ref = reference()</v>
+ </type>
+ <desc>
+ <p>Sends a delayed event internally in the <c>gen_fsm</c> process
+ that calls this function after <c>Time</c> milliseconds.
+ Returns immediately a
+ reference that can be used to cancel the delayed send using
+ <seealso marker="#cancel_timer/1"><c>cancel_timer/1</c></seealso>.</p>
+ <p>The <c>gen_fsm</c> process calls
+ <seealso marker="#Module:StateName/2">
+ <c>Module:StateName/2</c></seealso> to handle
+ the event, where <c>StateName</c> is the name of the current
+ state of the <c>gen_fsm</c> process at the time the delayed event is
+ delivered.</p>
+ <p><c>Event</c> is any term that is passed as one of
+ the arguments to <c>Module:StateName/2</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>start(Module, Args, Options) -> Result</name>
+ <name>start(FsmName, Module, Args, Options) -> Result</name>
+ <fsummary>Create a standalone <c>gen_fsm</c> process.</fsummary>
+ <type>
+ <v>FsmName = {local,Name} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName}</v>
+ <v>&nbsp;Name = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Module = atom()</v>
+ <v>Args = term()</v>
+ <v>Options = [Option]</v>
+ <v>&nbsp;Option = {debug,Dbgs} | {timeout,Time} | {spawn_opt,SOpts}</v>
+ <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
+ <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics</v>
+ <v>&nbsp;&nbsp;&nbsp;&nbsp;| {log_to_file,FileName} | {install,{Func,FuncState}}</v>
+ <v>&nbsp;&nbsp;SOpts = [term()]</v>
+ <v>Result = {ok,Pid} | ignore | {error,Error}</v>
+ <v>&nbsp;Pid = pid()</v>
+ <v>&nbsp;Error = {already_started,Pid} | term()</v>
+ </type>
+ <desc>
+ <p>Creates a standalone <c>gen_fsm</c> process, that is, a process that
+ is not part of a supervision tree and thus has no supervisor.</p>
+ <p>For a description of arguments and return values, see
+ <seealso marker="#start_link/3"><c>start_link/3,4</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
<name>start_link(Module, Args, Options) -> Result</name>
<name>start_link(FsmName, Module, Args, Options) -> Result</name>
- <fsummary>Create a gen_fsm process in a supervision tree.</fsummary>
+ <fsummary>Create a <c>gen_fsm</c> process in a supervision tree.
+ </fsummary>
<type>
- <v>FsmName = {local,Name} | {global,GlobalName}
- | {via,Module,ViaName}</v>
+ <v>FsmName = {local,Name} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName}</v>
<v>&nbsp;Name = atom()</v>
<v>&nbsp;GlobalName = ViaName = term()</v>
<v>Module = atom()</v>
@@ -117,54 +345,64 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
<v>&nbsp;Error = {already_started,Pid} | term()</v>
</type>
<desc>
- <p>Creates a gen_fsm process as part of a supervision tree.
- The function should be called, directly or indirectly, by
- the supervisor. It will, among other things, ensure that
- the gen_fsm is linked to the supervisor.</p>
- <p>The gen_fsm process calls <c>Module:init/1</c> to
- initialize. To ensure a synchronized start-up procedure,
+ <p>Creates a <c>gen_fsm</c> process as part of a supervision tree.
+ The function is to be called, directly or indirectly, by
+ the supervisor. For example, it ensures that
+ the <c>gen_fsm</c> process is linked to the supervisor.</p>
+ <p>The <c>gen_fsm</c> process calls
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso> to
+ initialize. To ensure a synchronized startup procedure,
<c>start_link/3,4</c> does not return until
<c>Module:init/1</c> has returned.</p>
- <p>If <c>FsmName={local,Name}</c>, the gen_fsm is registered
- locally as <c>Name</c> using <c>register/2</c>.
- If <c>FsmName={global,GlobalName}</c>, the gen_fsm is
- registered globally as <c>GlobalName</c> using
- <c>global:register_name/2</c>.
- If <c>FsmName={via,Module,ViaName}</c>, the gen_fsm will
- register with the registry represented by <c>Module</c>.
- The <c>Module</c> callback should export the functions
- <c>register_name/2</c>, <c>unregister_name/1</c>,
- <c>whereis_name/1</c> and <c>send/2</c>, which should behave like the
- corresponding functions in <c>global</c>. Thus,
- <c>{via,global,GlobalName}</c> is a valid reference.</p>
- <p>If no name is provided,
- the gen_fsm is not registered.</p>
+ <list type="bulleted">
+ <item>
+ <p>If <c>FsmName={local,Name}</c>, the <c>gen_fsm</c> process is
+ registered locally as <c>Name</c> using <c>register/2</c>.</p>
+ </item>
+ <item>
+ <p>If <c>FsmName={global,GlobalName}</c>, the <c>gen_fsm</c> process
+ is registered globally as <c>GlobalName</c> using
+ <seealso marker="kernel:global#register_name/2">
+ <c>global:register_name/2</c></seealso>.</p>
+ </item>
+ <item>
+ <p>If <c>FsmName={via,Module,ViaName}</c>, the <c>gen_fsm</c>
+ process registers with the registry represented by <c>Module</c>.
+ The <c>Module</c> callback is to export the functions
+ <c>register_name/2</c>, <c>unregister_name/1</c>,
+ <c>whereis_name/1</c>, and <c>send/2</c>, which are to behave
+ like the corresponding functions in
+ <seealso marker="kernel:global"><c>global</c></seealso>.
+ Thus, <c>{via,global,GlobalName}</c> is a valid reference.</p>
+ </item>
+ </list>
+ <p>If no name is provided, the <c>gen_fsm</c> process is not
+ registered.</p>
<p><c>Module</c> is the name of the callback module.</p>
- <p><c>Args</c> is an arbitrary term which is passed as
+ <p><c>Args</c> is any term that is passed as
the argument to <c>Module:init/1</c>.</p>
- <p>If the option <c>{timeout,Time}</c> is present, the gen_fsm
- is allowed to spend <c>Time</c> milliseconds initializing
- or it will be terminated and the start function will return
+ <p>If option <c>{timeout,Time}</c> is present, the <c>gen_fsm</c>
+ process is allowed to spend <c>Time</c> milliseconds initializing
+ or it terminates and the start function returns
<c>{error,timeout}</c>.</p>
- <p>If the option <c>{debug,Dbgs}</c> is present,
- the corresponding <c>sys</c> function will be called for each
- item in <c>Dbgs</c>. See
- <seealso marker="sys">sys(3)</seealso>.</p>
- <p>If the option <c>{spawn_opt,SOpts}</c> is present,
- <c>SOpts</c> will be passed as option list to
- the <c>spawn_opt</c> BIF which is used to spawn the gen_fsm
- process. See
- <seealso marker="erts:erlang#spawn_opt/2">erlang(3)</seealso>.</p>
+ <p>If option <c>{debug,Dbgs}</c> is present, the corresponding
+ <c>sys</c> function is called for each item in <c>Dbgs</c>; see
+ <seealso marker="sys"><c>sys(3)</c></seealso>.</p>
+ <p>If option <c>{spawn_opt,SOpts}</c> is present, <c>SOpts</c> is
+ passed as option list to the <c>spawn_opt</c> BIF that is used to
+ spawn the <c>gen_fsm</c> process; see
+ <seealso marker="erts:erlang#spawn_opt/2">
+ <c>spawn_opt/2</c></seealso>.</p>
<note>
- <p>Using the spawn option <c>monitor</c> is currently not
- allowed, but will cause the function to fail with reason
+ <p>Using spawn option <c>monitor</c> is not
+ allowed, it causes the function to fail with reason
<c>badarg</c>.</p>
</note>
- <p>If the gen_fsm is successfully created and initialized
- the function returns <c>{ok,Pid}</c>, where <c>Pid</c> is
- the pid of the gen_fsm. If there already exists a process with
- the specified <c>FsmName</c>, the function returns
- <c>{error,{already_started,Pid}}</c> where <c>Pid</c> is
+ <p>If the <c>gen_fsm</c> process is successfully created and
+ initialized, the function returns <c>{ok,Pid}</c>, where <c>Pid</c>
+ is the pid of the <c>gen_fsm</c> process. If a process with the
+ specified <c>FsmName</c> exists already, the function returns
+ <c>{error,{already_started,Pid}}</c>, where <c>Pid</c> is
the pid of that process.</p>
<p>If <c>Module:init/1</c> fails with <c>Reason</c>,
the function returns <c>{error,Reason}</c>. If
@@ -173,129 +411,106 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
returns <c>{error,Reason}</c> or <c>ignore</c>, respectively.</p>
</desc>
</func>
+
<func>
- <name>start(Module, Args, Options) -> Result</name>
- <name>start(FsmName, Module, Args, Options) -> Result</name>
- <fsummary>Create a stand-alone gen_fsm process.</fsummary>
+ <name>start_timer(Time, Msg) -> Ref</name>
+ <fsummary>Send a time-out event internally in a generic FSM.</fsummary>
<type>
- <v>FsmName = {local,Name} | {global,GlobalName}
- | {via,Module,ViaName}</v>
- <v>&nbsp;Name = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Module = atom()</v>
- <v>Args = term()</v>
- <v>Options = [Option]</v>
- <v>&nbsp;Option = {debug,Dbgs} | {timeout,Time} | {spawn_opt,SOpts}</v>
- <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
- <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics</v>
- <v>&nbsp;&nbsp;&nbsp;&nbsp;| {log_to_file,FileName} | {install,{Func,FuncState}}</v>
- <v>&nbsp;&nbsp;SOpts = [term()]</v>
- <v>Result = {ok,Pid} | ignore | {error,Error}</v>
- <v>&nbsp;Pid = pid()</v>
- <v>&nbsp;Error = {already_started,Pid} | term()</v>
+ <v>Time = integer()</v>
+ <v>Msg = term()</v>
+ <v>Ref = reference()</v>
</type>
<desc>
- <p>Creates a stand-alone gen_fsm process, i.e. a gen_fsm which
- is not part of a supervision tree and thus has no supervisor.</p>
- <p>See <seealso marker="#start_link/3">start_link/3,4</seealso>
- for a description of arguments and return values.</p>
+ <p>Sends a time-out event internally in the <c>gen_fsm</c>
+ process that calls this function after <c>Time</c> milliseconds.
+ Returns immediately a
+ reference that can be used to cancel the timer using
+ <seealso marker="#cancel_timer/1"><c>cancel_timer/1</c></seealso>.</p>
+ <p>The <c>gen_fsm</c> process calls
+ <seealso marker="#Module:StateName/2">
+ <c>Module:StateName/2</c></seealso> to handle
+ the event, where <c>StateName</c> is the name of the current
+ state of the <c>gen_fsm</c> process at the time the time-out
+ message is delivered.</p>
+ <p><c>Msg</c> is any term that is passed in the
+ time-out message, <c>{timeout, Ref, Msg}</c>, as one of
+ the arguments to <c>Module:StateName/2</c>.</p>
</desc>
</func>
+
<func>
<name>stop(FsmRef) -> ok</name>
<name>stop(FsmRef, Reason, Timeout) -> ok</name>
<fsummary>Synchronously stop a generic FSM.</fsummary>
<type>
- <v>FsmRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
+ <v>FsmRef = Name | {Name,Node} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName} | pid()</v>
<v>&nbsp;Node = atom()</v>
<v>&nbsp;GlobalName = ViaName = term()</v>
<v>Reason = term()</v>
<v>Timeout = int()>0 | infinity</v>
</type>
<desc>
- <p>Orders a generic FSM to exit with the given <c>Reason</c>
- and waits for it to terminate. The gen_fsm will call
- <seealso marker="#Module:terminate/3">Module:terminate/3</seealso>
- before exiting.</p>
- <p>The function returns <c>ok</c> if the generic FSM terminates
- with the expected reason. Any other reason than <c>normal</c>,
- <c>shutdown</c>, or <c>{shutdown,Term}</c> will cause an
+ <p>Orders a generic finite state machine to exit with the specified
+ <c>Reason</c> and waits for it to terminate. The <c>gen_fsm</c>
+ process calls <seealso marker="#Module:terminate/3">
+ <c>Module:terminate/3</c></seealso> before exiting.</p>
+ <p>The function returns <c>ok</c> if the generic finite state machine
+ terminates with the expected reason. Any other reason than
+ <c>normal</c>, <c>shutdown</c>, or <c>{shutdown,Term}</c> causes an
error report to be issued using
- <seealso marker="kernel:error_logger#format/2">error_logger:format/2</seealso>.
- The default <c>Reason</c> is <c>normal</c>.</p>
- <p><c>Timeout</c> is an integer greater than zero which
+ <seealso marker="kernel:error_logger#format/2">
+ <c>error_logger:format/2</c></seealso>.
+ The default <c>Reason</c> is <c>normal</c>.</p>
+ <p><c>Timeout</c> is an integer greater than zero that
specifies how many milliseconds to wait for the generic FSM
to terminate, or the atom <c>infinity</c> to wait
indefinitely. The default value is <c>infinity</c>. If the
- generic FSM has not terminated within the specified time, a
- <c>timeout</c> exception is raised.</p>
- <p>If the process does not exist, a <c>noproc</c> exception
- is raised.</p>
- </desc>
- </func>
- <func>
- <name>send_event(FsmRef, Event) -> ok</name>
- <fsummary>Send an event asynchronously to a generic FSM.</fsummary>
- <type>
- <v>FsmRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
- <v>&nbsp;Name = Node = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Event = term()</v>
- </type>
- <desc>
- <p>Sends an event asynchronously to the gen_fsm <c>FsmRef</c>
- and returns <c>ok</c> immediately. The gen_fsm will call
- <c>Module:StateName/2</c> to handle the event, where
- <c>StateName</c> is the name of the current state of
- the gen_fsm.</p>
- <p><c>FsmRef</c> can be:</p>
- <list type="bulleted">
- <item>the pid,</item>
- <item><c>Name</c>, if the gen_fsm is locally registered,</item>
- <item><c>{Name,Node}</c>, if the gen_fsm is locally
- registered at another node, or</item>
- <item><c>{global,GlobalName}</c>, if the gen_fsm is globally
- registered.</item>
- <item><c>{via,Module,ViaName}</c>, if the gen_fsm is registered
- through an alternative process registry.</item>
- </list>
- <p><c>Event</c> is an arbitrary term which is passed as one of
- the arguments to <c>Module:StateName/2</c>.</p>
+ generic finite state machine has not terminated within the specified
+ time, a <c>timeout</c> exception is raised.</p>
+ <p>If the process does not exist, a <c>noproc</c> exception
+ is raised.</p>
</desc>
</func>
+
<func>
- <name>send_all_state_event(FsmRef, Event) -> ok</name>
- <fsummary>Send an event asynchronously to a generic FSM.</fsummary>
+ <name>sync_send_all_state_event(FsmRef, Event) -> Reply</name>
+ <name>sync_send_all_state_event(FsmRef, Event, Timeout) -> Reply</name>
+ <fsummary>Send an event synchronously to a generic FSM.</fsummary>
<type>
- <v>FsmRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
+ <v>FsmRef = Name | {Name,Node} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName} | pid()</v>
<v>&nbsp;Name = Node = atom()</v>
<v>&nbsp;GlobalName = ViaName = term()</v>
<v>Event = term()</v>
+ <v>Timeout = int()>0 | infinity</v>
+ <v>Reply = term()</v>
</type>
<desc>
- <p>Sends an event asynchronously to the gen_fsm <c>FsmRef</c>
- and returns <c>ok</c> immediately. The gen_fsm will call
- <c>Module:handle_event/3</c> to handle the event.</p>
- <p>See <seealso marker="#send_event/2">send_event/2</seealso>
- for a description of the arguments.</p>
- <p>The difference between <c>send_event</c> and
- <c>send_all_state_event</c> is which callback function is
- used to handle the event. This function is useful when
- sending events that are handled the same way in every state,
- as only one <c>handle_event</c> clause is needed to handle
- the event instead of one clause in each state name function.</p>
+ <p>Sends an event to the <c>FsmRef</c> of the <c>gen_fsm</c>
+ process and waits until a reply arrives or a time-out occurs.
+ The <c>gen_fsm</c> process calls
+ <seealso marker="#Module:handle_sync_event/4">
+ <c>Module:handle_sync_event/4</c></seealso> to handle the event.</p>
+ <p>For a description of <c>FsmRef</c> and <c>Event</c>, see
+ <seealso marker="#send_event/2">send_event/2</seealso>.
+ For a description of <c>Timeout</c> and <c>Reply</c>, see
+ <seealso marker="#sync_send_event/3">
+ <c>sync_send_event/3</c></seealso>.</p>
+ <p>For a discussion about the difference between
+ <c>sync_send_event</c> and <c>sync_send_all_state_event</c>, see
+ <seealso marker="#send_all_state_event/2">
+ <c>send_all_state_event/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name>sync_send_event(FsmRef, Event) -> Reply</name>
<name>sync_send_event(FsmRef, Event, Timeout) -> Reply</name>
<fsummary>Send an event synchronously to a generic FSM.</fsummary>
<type>
- <v>FsmRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
+ <v>FsmRef = Name | {Name,Node} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName} | pid()</v>
<v>&nbsp;Name = Node = atom()</v>
<v>&nbsp;GlobalName = ViaName = term()</v>
<v>Event = term()</v>
@@ -303,210 +518,231 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
<v>Reply = term()</v>
</type>
<desc>
- <p>Sends an event to the gen_fsm <c>FsmRef</c> and waits until a
- reply arrives or a timeout occurs. The gen_fsm will call
- <c>Module:StateName/3</c> to handle the event, where
+ <p>Sends an event to the <c>FsmRef</c> of the <c>gen_fsm</c>
+ process and waits until a reply arrives or a time-out occurs.
+ <c>The gen_fsm</c> process calls
+ <seealso marker="#Module:StateName/3">
+ <c>Module:StateName/3</c></seealso> to handle the event, where
<c>StateName</c> is the name of the current state of
- the gen_fsm.</p>
- <p>See <seealso marker="#send_event/2">send_event/2</seealso>
- for a description of <c>FsmRef</c> and <c>Event</c>.</p>
- <p><c>Timeout</c> is an integer greater than zero which
+ the <c>gen_fsm</c> process.</p>
+ <p>For a description of <c>FsmRef</c> and <c>Event</c>, see
+ <seealso marker="#send_event/2"><c>send_event/2</c></seealso>.</p>
+ <p><c>Timeout</c> is an integer greater than zero that
specifies how many milliseconds to wait for a reply, or
- the atom <c>infinity</c> to wait indefinitely. Default value
- is 5000. If no reply is received within the specified time,
+ the atom <c>infinity</c> to wait indefinitely. Defaults
+ to 5000. If no reply is received within the specified time,
the function call fails.</p>
- <p>The return value <c>Reply</c> is defined in the return value
+ <p>Return value <c>Reply</c> is defined in the return value
of <c>Module:StateName/3</c>.</p>
- <p>The ancient behaviour of sometimes consuming the server
+ <note>
+ <p>The ancient behavior of sometimes consuming the server
exit message if the server died during the call while
- linked to the client has been removed in OTP R12B/Erlang 5.6.</p>
+ linked to the client was removed in Erlang 5.6/OTP R12B.</p>
+ </note>
</desc>
</func>
+ </funcs>
+
+ <section>
+ <title>Callback Functions</title>
+ <p>The following functions are to be exported from a <c>gen_fsm</c>
+ callback module.</p>
+
+ <p><em>state name</em> denotes a state of the state machine.</p>
+
+ <p><em>state data</em> denotes the internal state of the Erlang process
+ that implements the state machine.</p>
+ </section>
+
+ <funcs>
<func>
- <name>sync_send_all_state_event(FsmRef, Event) -> Reply</name>
- <name>sync_send_all_state_event(FsmRef, Event, Timeout) -> Reply</name>
- <fsummary>Send an event synchronously to a generic FSM.</fsummary>
+ <name>Module:code_change(OldVsn, StateName, StateData, Extra) -> {ok, NextStateName, NewStateData}</name>
+ <fsummary>Update the internal state data during upgrade/downgrade.
+ </fsummary>
<type>
- <v>FsmRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
- <v>&nbsp;Name = Node = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Event = term()</v>
- <v>Timeout = int()>0 | infinity</v>
- <v>Reply = term()</v>
+ <v>OldVsn = Vsn | {down, Vsn}</v>
+ <v>&nbsp;&nbsp;Vsn = term()</v>
+ <v>StateName = NextStateName = atom()</v>
+ <v>StateData = NewStateData = term()</v>
+ <v>Extra = term()</v>
</type>
<desc>
- <p>Sends an event to the gen_fsm <c>FsmRef</c> and waits until a
- reply arrives or a timeout occurs. The gen_fsm will call
- <c>Module:handle_sync_event/4</c> to handle the event.</p>
- <p>See <seealso marker="#send_event/2">send_event/2</seealso>
- for a description of <c>FsmRef</c> and <c>Event</c>. See
- <seealso marker="#sync_send_event/3">sync_send_event/3</seealso>
- for a description of <c>Timeout</c> and <c>Reply</c>.</p>
- <p>See
- <seealso marker="#send_all_state_event/2">send_all_state_event/2</seealso>
- for a discussion about the difference between
- <c>sync_send_event</c> and <c>sync_send_all_state_event</c>.</p>
+ <p>This function is called by a <c>gen_fsm</c> process when it is to
+ update its internal state data during a release upgrade/downgrade,
+ that is, when instruction <c>{update,Module,Change,...}</c>,
+ where <c>Change={advanced,Extra}</c>, is given in
+ the <c>appup</c> file; see section
+ <seealso marker="doc/design_principles:release_handling#instr">
+ Release Handling Instructions</seealso> in OTP Design Principles.</p>
+ <p>For an upgrade, <c>OldVsn</c> is <c>Vsn</c>, and for a downgrade,
+ <c>OldVsn</c> is <c>{down,Vsn}</c>. <c>Vsn</c> is defined by the
+ <c>vsn</c> attribute(s) of the old version of the callback module
+ <c>Module</c>. If no such attribute is defined, the version is
+ the checksum of the Beam file.</p>
+ <p><c>StateName</c> is the current state name and <c>StateData</c> the
+ internal state data of the <c>gen_fsm</c> process.</p>
+ <p><c>Extra</c> is passed "as is" from the <c>{advanced,Extra}</c>
+ part of the update instruction.</p>
+ <p>The function is to return the new current state name and
+ updated internal data.</p>
</desc>
</func>
+
<func>
- <name>reply(Caller, Reply) -> Result</name>
- <fsummary>Send a reply to a caller.</fsummary>
+ <name>Module:format_status(Opt, [PDict, StateData]) -> Status</name>
+ <fsummary>Optional function for providing a term describing the
+ current <c>gen_fsm</c> process status.</fsummary>
<type>
- <v>Caller - see below</v>
- <v>Reply = term()</v>
- <v>Result = term()</v>
+ <v>Opt = normal | terminate</v>
+ <v>PDict = [{Key, Value}]</v>
+ <v>StateData = term()</v>
+ <v>Status = term()</v>
</type>
<desc>
- <p>This function can be used by a gen_fsm to explicitly send a
- reply to a client process that called
- <seealso marker="#sync_send_event/2">sync_send_event/2,3</seealso>
- or
- <seealso marker="#sync_send_all_state_event/2">sync_send_all_state_event/2,3</seealso>,
- when the reply cannot be defined in the return value of
- <c>Module:State/3</c> or <c>Module:handle_sync_event/4</c>.</p>
- <p><c>Caller</c> must be the <c>From</c> argument provided to
- the callback function. <c>Reply</c> is an arbitrary term,
- which will be given back to the client as the return value of
- <c>sync_send_event/2,3</c> or
- <c>sync_send_all_state_event/2,3</c>.</p>
- <p>The return value <c>Result</c> is not further defined, and
- should always be ignored.</p>
+ <note>
+ <p>This callback is optional, so callback modules need not
+ export it. The <c>gen_fsm</c> module provides a default
+ implementation of this function that returns the callback
+ module state data.</p>
+ </note>
+ <p>This function is called by a <c>gen_fsm</c> process in the
+ following situations:</p>
+ <list type="bulleted">
+ <item>One of <seealso marker="sys#get_status/1">
+ <c>sys:get_status/1,2</c></seealso>
+ is invoked to get the <c>gen_fsm</c> status. <c>Opt</c> is set to
+ the atom <c>normal</c> for this case.</item>
+ <item>The <c>gen_fsm</c> process terminates abnormally and logs an
+ error. <c>Opt</c> is set to the atom <c>terminate</c> for
+ this case.</item>
+ </list>
+ <p>This function is useful for changing the form and
+ appearance of the <c>gen_fsm</c> status for these cases. A callback
+ module wishing to change the <c>sys:get_status/1,2</c>
+ return value as well as how its status appears in
+ termination error logs, exports an instance
+ of <c>format_status/2</c> that returns a term describing the
+ current status of the <c>gen_fsm</c> process.</p>
+ <p><c>PDict</c> is the current value of the process dictionary of the
+ <c>gen_fsm</c> process.</p>
+ <p><c>StateData</c> is the internal state data of the
+ <c>gen_fsm</c> process.</p>
+ <p>The function is to return <c>Status</c>, a term that
+ change the details of the current state and status of
+ the <c>gen_fsm</c> process. There are no restrictions on the
+ form <c>Status</c> can take, but for
+ the <c>sys:get_status/1,2</c> case (when <c>Opt</c>
+ is <c>normal</c>), the recommended form for
+ the <c>Status</c> value is <c>[{data, [{"StateData",
+ Term}]}]</c>, where <c>Term</c> provides relevant details of
+ the <c>gen_fsm</c> state data. Following this recommendation is not
+ required, but it makes the callback module status
+ consistent with the rest of the <c>sys:get_status/1,2</c>
+ return value.</p>
+ <p>One use for this function is to return compact alternative
+ state data representations to avoid that large state terms
+ are printed in log files.</p>
</desc>
</func>
+
<func>
- <name>send_event_after(Time, Event) -> Ref</name>
- <fsummary>Send a delayed event internally in a generic FSM.</fsummary>
+ <name>Module:handle_event(Event, StateName, StateData) -> Result</name>
+ <fsummary>Handle an asynchronous event.</fsummary>
<type>
- <v>Time = integer()</v>
<v>Event = term()</v>
- <v>Ref = reference()</v>
- </type>
- <desc>
- <p>Sends a delayed event internally in the gen_fsm that calls
- this function after <c>Time</c> ms. Returns immediately a
- reference that can be used to cancel the delayed send using
- <seealso marker="#cancel_timer/1">cancel_timer/1</seealso>.</p>
- <p>The gen_fsm will call <c>Module:StateName/2</c> to handle
- the event, where <c>StateName</c> is the name of the current
- state of the gen_fsm at the time the delayed event is
- delivered.</p>
- <p><c>Event</c> is an arbitrary term which is passed as one of
- the arguments to <c>Module:StateName/2</c>.</p>
- </desc>
- </func>
- <func>
- <name>start_timer(Time, Msg) -> Ref</name>
- <fsummary>Send a timeout event internally in a generic FSM.</fsummary>
- <type>
- <v>Time = integer()</v>
- <v>Msg = term()</v>
- <v>Ref = reference()</v>
+ <v>StateName = atom()</v>
+ <v>StateData = term()</v>
+ <v>Result = {next_state,NextStateName,NewStateData}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
+ <v>&nbsp;&nbsp;| {stop,Reason,NewStateData}</v>
+ <v>&nbsp;NextStateName = atom()</v>
+ <v>&nbsp;NewStateData = term()</v>
+ <v>&nbsp;Timeout = int()>0 | infinity</v>
+ <v>&nbsp;Reason = term()</v>
</type>
<desc>
- <p>Sends a timeout event internally in the gen_fsm that calls
- this function after <c>Time</c> ms. Returns immediately a
- reference that can be used to cancel the timer using
- <seealso marker="#cancel_timer/1">cancel_timer/1</seealso>.</p>
- <p>The gen_fsm will call <c>Module:StateName/2</c> to handle
- the event, where <c>StateName</c> is the name of the current
- state of the gen_fsm at the time the timeout message is
- delivered.</p>
- <p><c>Msg</c> is an arbitrary term which is passed in the
- timeout message, <c>{timeout, Ref, Msg}</c>, as one of
- the arguments to <c>Module:StateName/2</c>.</p>
+ <p>Whenever a <c>gen_fsm</c> process receives an event sent using
+ <seealso marker="#send_all_state_event/2">
+ <c>send_all_state_event/2</c></seealso>,
+ this function is called to handle the event.</p>
+ <p><c>StateName</c> is the current state name of the <c>gen_fsm</c>
+ process.</p>
+ <p>For a description of the other arguments and possible return values,
+ see <seealso marker="#Module:StateName/2">
+ <c>Module:StateName/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name>cancel_timer(Ref) -> RemainingTime | false</name>
- <fsummary>Cancel an internal timer in a generic FSM.</fsummary>
+ <name>Module:handle_info(Info, StateName, StateData) -> Result</name>
+ <fsummary>Handle an incoming message.</fsummary>
<type>
- <v>Ref = reference()</v>
- <v>RemainingTime = integer()</v>
+ <v>Info = term()</v>
+ <v>StateName = atom()</v>
+ <v>StateData = term()</v>
+ <v>Result = {next_state,NextStateName,NewStateData}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
+ <v>&nbsp;&nbsp;| {stop,Reason,NewStateData}</v>
+ <v>&nbsp;NextStateName = atom()</v>
+ <v>&nbsp;NewStateData = term()</v>
+ <v>&nbsp;Timeout = int()>0 | infinity</v>
+ <v>&nbsp;Reason = normal | term()</v>
</type>
<desc>
- <p>Cancels an internal timer referred by <c>Ref</c> in the
- gen_fsm that calls this function.</p>
- <p><c>Ref</c> is a reference returned from
- <seealso marker="#send_event_after/2">send_event_after/2</seealso>
- or
- <seealso marker="#start_timer/2">start_timer/2</seealso>.</p>
- <p>If the timer has already timed out, but the event not yet
- been delivered, it is cancelled as if it had <em>not</em>
- timed out, so there will be no false timer event after
- returning from this function.</p>
- <p>Returns the remaining time in ms until the timer would
- have expired if <c>Ref</c> referred to an active timer,
- <c>false</c> otherwise.</p>
+ <p>This function is called by a <c>gen_fsm</c> process when it receives
+ any other message than a synchronous or asynchronous event (or a
+ system message).</p>
+ <p><c>Info</c> is the received message.</p>
+ <p>For a description of the other arguments and possible return values,
+ see <seealso marker="#Module:StateName/2">
+ <c>Module:StateName/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name>enter_loop(Module, Options, StateName, StateData)</name>
- <name>enter_loop(Module, Options, StateName, StateData, FsmName)</name>
- <name>enter_loop(Module, Options, StateName, StateData, Timeout)</name>
- <name>enter_loop(Module, Options, StateName, StateData, FsmName, Timeout)</name>
- <fsummary>Enter the gen_fsm receive loop</fsummary>
+ <name>Module:handle_sync_event(Event, From, StateName, StateData) -> Result</name>
+ <fsummary>Handle a synchronous event.</fsummary>
<type>
- <v>Module = atom()</v>
- <v>Options = [Option]</v>
- <v>&nbsp;Option = {debug,Dbgs}</v>
- <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
- <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics</v>
- <v>&nbsp;&nbsp;&nbsp;&nbsp;| {log_to_file,FileName} | {install,{Func,FuncState}}</v>
+ <v>Event = term()</v>
+ <v>From = {pid(),Tag}</v>
<v>StateName = atom()</v>
<v>StateData = term()</v>
- <v>FsmName = {local,Name} | {global,GlobalName}
- | {via,Module,ViaName}</v>
- <v>&nbsp;Name = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Timeout = int() | infinity</v>
+ <v>Result = {reply,Reply,NextStateName,NewStateData}</v>
+ <v>&nbsp;&nbsp;| {reply,Reply,NextStateName,NewStateData,Timeout}</v>
+ <v>&nbsp;&nbsp;| {reply,Reply,NextStateName,NewStateData,hibernate}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
+ <v>&nbsp;&nbsp;| {stop,Reason,Reply,NewStateData} | {stop,Reason,NewStateData}</v>
+ <v>&nbsp;Reply = term()</v>
+ <v>&nbsp;NextStateName = atom()</v>
+ <v>&nbsp;NewStateData = term()</v>
+ <v>&nbsp;Timeout = int()>0 | infinity</v>
+ <v>&nbsp;Reason = term()</v>
</type>
<desc>
- <p>Makes an existing process into a gen_fsm. Does not return,
- instead the calling process will enter the gen_fsm receive
- loop and become a gen_fsm process. The process <em>must</em>
- have been started using one of the start functions in
- <c>proc_lib</c>, see
- <seealso marker="proc_lib">proc_lib(3)</seealso>. The user is
- responsible for any initialization of the process, including
- registering a name for it.</p>
- <p>This function is useful when a more complex initialization
- procedure is needed than the gen_fsm behaviour provides.</p>
- <p><c>Module</c>, <c>Options</c> and <c>FsmName</c> have
- the same meanings as when calling
- <seealso marker="#start_link/3">start[_link]/3,4</seealso>.
- However, if <c>FsmName</c> is specified, the process must have
- been registered accordingly <em>before</em> this function is
- called.</p>
- <p><c>StateName</c>, <c>StateData</c> and <c>Timeout</c> have
- the same meanings as in the return value of
- <seealso marker="#Moduleinit">Module:init/1</seealso>.
- Also, the callback module <c>Module</c> does not need to
- export an <c>init/1</c> function.</p>
- <p>Failure: If the calling process was not started by a
- <c>proc_lib</c> start function, or if it is not registered
- according to <c>FsmName</c>.</p>
+ <p>Whenever a <c>gen_fsm</c> process receives an event sent using
+ <seealso marker="#sync_send_all_state_event/2">
+ <c>sync_send_all_state_event/2,3</c></seealso>,
+ this function is called to handle the event.</p>
+ <p><c>StateName</c> is the current state name of the <c>gen_fsm</c>
+ process.</p>
+ <p>For a description of the other arguments and possible return values,
+ see <seealso marker="#Module:StateName/3">
+ <c>Module:StateName/3</c></seealso>.</p>
</desc>
</func>
- </funcs>
- <section>
- <title>CALLBACK FUNCTIONS</title>
- <p>The following functions should be exported from a <c>gen_fsm</c>
- callback module.</p>
- <p>In the description, the expression <em>state name</em> is used to
- denote a state of the state machine. <em>state data</em> is used
- to denote the internal state of the Erlang process which
- implements the state machine.</p>
- </section>
- <funcs>
<func>
<name>Module:init(Args) -> Result</name>
- <fsummary>Initialize process and internal state name and state data.</fsummary>
+ <fsummary>Initialize process and internal state name and state data.
+ </fsummary>
<type>
<v>Args = term()</v>
<v>Result = {ok,StateName,StateData} | {ok,StateName,StateData,Timeout}</v>
- <v>&nbsp;&nbsp;| {ok,StateName,StateData,hibernate}</v>
+ <v>&nbsp;&nbsp;| {ok,StateName,StateData,hibernate}</v>
<v>&nbsp;&nbsp;| {stop,Reason} | ignore</v>
<v>&nbsp;StateName = atom()</v>
<v>&nbsp;StateData = term()</v>
@@ -515,33 +751,36 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
</type>
<desc>
<marker id="Moduleinit"></marker>
- <p>Whenever a gen_fsm is started using
- <seealso marker="#start/3">gen_fsm:start/3,4</seealso> or
- <seealso marker="#start_link/3">gen_fsm:start_link/3,4</seealso>,
+ <p>Whenever a <c>gen_fsm</c> process is started using
+ <seealso marker="#start/3"><c>start/3,4</c></seealso> or
+ <seealso marker="#start_link/3"><c>start_link/3,4</c></seealso>,
this function is called by the new process to initialize.</p>
<p><c>Args</c> is the <c>Args</c> argument provided to the start
function.</p>
- <p>If initialization is successful, the function should return
- <c>{ok,StateName,StateData}</c>,
- <c>{ok,StateName,StateData,Timeout}</c> or <c>{ok,StateName,StateData,hibernate}</c>,
- where <c>StateName</c>
+ <p>If initialization is successful, the function is to return
+ <c>{ok,StateName,StateData}</c>,
+ <c>{ok,StateName,StateData,Timeout}</c>, or
+ <c>{ok,StateName,StateData,hibernate}</c>, where <c>StateName</c>
is the initial state name and <c>StateData</c> the initial
- state data of the gen_fsm.</p>
- <p>If an integer timeout value is provided, a timeout will occur
+ state data of the <c>gen_fsm</c> process.</p>
+ <p>If an integer time-out value is provided, a time-out occurs
unless an event or a message is received within <c>Timeout</c>
- milliseconds. A timeout is represented by the atom
- <c>timeout</c> and should be handled by
- the <c>Module:StateName/2</c> callback functions. The atom
+ milliseconds. A time-out is represented by the atom
+ <c>timeout</c> and is to be handled by the
+ <seealso marker="#Module:StateName/2">
+ <c>Module:StateName/2</c></seealso> callback functions. The atom
<c>infinity</c> can be used to wait indefinitely, this is
the default value.</p>
- <p>If <c>hibernate</c> is specified instead of a timeout value, the process will go
- into hibernation when waiting for the next message to arrive (by calling
- <seealso marker="proc_lib#hibernate/3">proc_lib:hibernate/3</seealso>).</p>
- <p>If something goes wrong during the initialization
- the function should return <c>{stop,Reason}</c>, where
- <c>Reason</c> is any term, or <c>ignore</c>.</p>
+ <p>If <c>hibernate</c> is specified instead of a time-out value, the
+ process goes into hibernation when waiting for the next message
+ to arrive (by calling <seealso marker="proc_lib#hibernate/3">
+ <c>proc_lib:hibernate/3</c></seealso>).</p>
+ <p>If the initialization fails, the function returns
+ <c>{stop,Reason}</c>, where <c>Reason</c> is any term,
+ or <c>ignore</c>.</p>
</desc>
</func>
+
<func>
<name>Module:StateName(Event, StateData) -> Result</name>
<fsummary>Handle an asynchronous event.</fsummary>
@@ -549,8 +788,8 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
<v>Event = timeout | term()</v>
<v>StateData = term()</v>
<v>Result = {next_state,NextStateName,NewStateData} </v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
<v>&nbsp;&nbsp;| {stop,Reason,NewStateData}</v>
<v>&nbsp;NextStateName = atom()</v>
<v>&nbsp;NewStateData = term()</v>
@@ -558,56 +797,33 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
<v>&nbsp;Reason = term()</v>
</type>
<desc>
- <p>There should be one instance of this function for each
- possible state name. Whenever a gen_fsm receives an event
- sent using
- <seealso marker="#send_event/2">gen_fsm:send_event/2</seealso>,
+ <p>There is to be one instance of this function for each
+ possible state name. Whenever a <c>gen_fsm</c> process receives
+ an event sent using
+ <seealso marker="#send_event/2"><c>send_event/2</c></seealso>,
the instance of this function with the same name as
the current state name <c>StateName</c> is called to handle
- the event. It is also called if a timeout occurs.</p>
- <p><c>Event</c> is either the atom <c>timeout</c>, if a timeout
+ the event. It is also called if a time-out occurs.</p>
+ <p><c>Event</c> is either the atom <c>timeout</c>, if a time-out
has occurred, or the <c>Event</c> argument provided to
<c>send_event/2</c>.</p>
- <p><c>StateData</c> is the state data of the gen_fsm.</p>
+ <p><c>StateData</c> is the state data of the <c>gen_fsm</c> process.</p>
<p>If the function returns
<c>{next_state,NextStateName,NewStateData}</c>,
- <c>{next_state,NextStateName,NewStateData,Timeout}</c> or
- <c>{next_state,NextStateName,NewStateData,hibernate}</c>,
- the gen_fsm will continue executing with the current state
+ <c>{next_state,NextStateName,NewStateData,Timeout}</c>, or
+ <c>{next_state,NextStateName,NewStateData,hibernate}</c>, the
+ <c>gen_fsm</c> process continues executing with the current state
name set to <c>NextStateName</c> and with the possibly
- updated state data <c>NewStateData</c>. See
- <c>Module:init/1</c> for a description of <c>Timeout</c> and <c>hibernate</c>.</p>
+ updated state data <c>NewStateData</c>. For a description of
+ <c>Timeout</c> and <c>hibernate</c>, see
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>.</p>
<p>If the function returns <c>{stop,Reason,NewStateData}</c>,
- the gen_fsm will call
+ the <c>gen_fsm</c> process calls
<c>Module:terminate(Reason,StateName,NewStateData)</c> and
- terminate.</p>
- </desc>
- </func>
- <func>
- <name>Module:handle_event(Event, StateName, StateData) -> Result</name>
- <fsummary>Handle an asynchronous event.</fsummary>
- <type>
- <v>Event = term()</v>
- <v>StateName = atom()</v>
- <v>StateData = term()</v>
- <v>Result = {next_state,NextStateName,NewStateData} </v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
- <v>&nbsp;&nbsp;| {stop,Reason,NewStateData}</v>
- <v>&nbsp;NextStateName = atom()</v>
- <v>&nbsp;NewStateData = term()</v>
- <v>&nbsp;Timeout = int()>0 | infinity</v>
- <v>&nbsp;Reason = term()</v>
- </type>
- <desc>
- <p>Whenever a gen_fsm receives an event sent using
- <seealso marker="#send_all_state_event/2">gen_fsm:send_all_state_event/2</seealso>,
- this function is called to handle the event.</p>
- <p><c>StateName</c> is the current state name of the gen_fsm.</p>
- <p>See <c>Module:StateName/2</c> for a description of the other
- arguments and possible return values.</p>
+ terminates.</p>
</desc>
</func>
+
<func>
<name>Module:StateName(Event, From, StateData) -> Result</name>
<fsummary>Handle a synchronous event.</fsummary>
@@ -616,11 +832,11 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
<v>From = {pid(),Tag}</v>
<v>StateData = term()</v>
<v>Result = {reply,Reply,NextStateName,NewStateData}</v>
- <v>&nbsp;&nbsp;| {reply,Reply,NextStateName,NewStateData,Timeout}</v>
- <v>&nbsp;&nbsp;| {reply,Reply,NextStateName,NewStateData,hibernate}</v>
+ <v>&nbsp;&nbsp;| {reply,Reply,NextStateName,NewStateData,Timeout}</v>
+ <v>&nbsp;&nbsp;| {reply,Reply,NextStateName,NewStateData,hibernate}</v>
<v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData}</v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
+ <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
<v>&nbsp;&nbsp;| {stop,Reason,Reply,NewStateData} | {stop,Reason,NewStateData}</v>
<v>&nbsp;Reply = term()</v>
<v>&nbsp;NextStateName = atom()</v>
@@ -629,102 +845,56 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
<v>&nbsp;Reason = normal | term()</v>
</type>
<desc>
- <p>There should be one instance of this function for each
- possible state name. Whenever a gen_fsm receives an event
- sent using
- <seealso marker="#sync_send_event/2">gen_fsm:sync_send_event/2,3</seealso>,
+ <p>There is to be one instance of this function for each
+ possible state name. Whenever a <c>gen_fsm</c> process receives an
+ event sent using <seealso marker="#sync_send_event/2">
+ <c>sync_send_event/2,3</c></seealso>,
the instance of this function with the same name as
the current state name <c>StateName</c> is called to handle
the event.</p>
<p><c>Event</c> is the <c>Event</c> argument provided to
- <c>sync_send_event</c>.</p>
+ <c>sync_send_event/2,3</c>.</p>
<p><c>From</c> is a tuple <c>{Pid,Tag}</c> where <c>Pid</c> is
- the pid of the process which called <c>sync_send_event/2,3</c>
+ the pid of the process that called <c>sync_send_event/2,3</c>
and <c>Tag</c> is a unique tag.</p>
- <p><c>StateData</c> is the state data of the gen_fsm.</p>
- <p>If the function returns
- <c>{reply,Reply,NextStateName,NewStateData}</c>,
- <c>{reply,Reply,NextStateName,NewStateData,Timeout}</c> or
- <c>{reply,Reply,NextStateName,NewStateData,hibernate}</c>,
- <c>Reply</c> will be given back to <c>From</c> as the return
- value of <c>sync_send_event/2,3</c>. The gen_fsm then
- continues executing with the current state name set to
- <c>NextStateName</c> and with the possibly updated state data
- <c>NewStateData</c>. See <c>Module:init/1</c> for a
- description of <c>Timeout</c> and <c>hibernate</c>.</p>
- <p>If the function returns
- <c>{next_state,NextStateName,NewStateData}</c>,
- <c>{next_state,NextStateName,NewStateData,Timeout}</c> or
- <c>{next_state,NextStateName,NewStateData,hibernate}</c>,
- the gen_fsm will continue executing in <c>NextStateName</c>
- with <c>NewStateData</c>. Any reply to <c>From</c> must be
- given explicitly using
- <seealso marker="#reply/2">gen_fsm:reply/2</seealso>.</p>
- <p>If the function returns
- <c>{stop,Reason,Reply,NewStateData}</c>, <c>Reply</c> will be
- given back to <c>From</c>. If the function returns
- <c>{stop,Reason,NewStateData}</c>, any reply to <c>From</c>
- must be given explicitly using <c>gen_fsm:reply/2</c>.
- The gen_fsm will then call
- <c>Module:terminate(Reason,StateName,NewStateData)</c> and
- terminate.</p>
- </desc>
- </func>
- <func>
- <name>Module:handle_sync_event(Event, From, StateName, StateData) -> Result</name>
- <fsummary>Handle a synchronous event.</fsummary>
- <type>
- <v>Event = term()</v>
- <v>From = {pid(),Tag}</v>
- <v>StateName = atom()</v>
- <v>StateData = term()</v>
- <v>Result = {reply,Reply,NextStateName,NewStateData}</v>
- <v>&nbsp;&nbsp;| {reply,Reply,NextStateName,NewStateData,Timeout}</v>
- <v>&nbsp;&nbsp;| {reply,Reply,NextStateName,NewStateData,hibernate}</v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData}</v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
- <v>&nbsp;&nbsp;| {stop,Reason,Reply,NewStateData} | {stop,Reason,NewStateData}</v>
- <v>&nbsp;Reply = term()</v>
- <v>&nbsp;NextStateName = atom()</v>
- <v>&nbsp;NewStateData = term()</v>
- <v>&nbsp;Timeout = int()>0 | infinity</v>
- <v>&nbsp;Reason = term()</v>
- </type>
- <desc>
- <p>Whenever a gen_fsm receives an event sent using
- <seealso marker="#sync_send_all_state_event/2">gen_fsm:sync_send_all_state_event/2,3</seealso>,
- this function is called to handle the event.</p>
- <p><c>StateName</c> is the current state name of the gen_fsm.</p>
- <p>See <c>Module:StateName/3</c> for a description of the other
- arguments and possible return values.</p>
- </desc>
- </func>
- <func>
- <name>Module:handle_info(Info, StateName, StateData) -> Result</name>
- <fsummary>Handle an incoming message.</fsummary>
- <type>
- <v>Info = term()</v>
- <v>StateName = atom()</v>
- <v>StateData = term()</v>
- <v>Result = {next_state,NextStateName,NewStateData}</v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,Timeout}</v>
- <v>&nbsp;&nbsp;| {next_state,NextStateName,NewStateData,hibernate}</v>
- <v>&nbsp;&nbsp;| {stop,Reason,NewStateData}</v>
- <v>&nbsp;NextStateName = atom()</v>
- <v>&nbsp;NewStateData = term()</v>
- <v>&nbsp;Timeout = int()>0 | infinity</v>
- <v>&nbsp;Reason = normal | term()</v>
- </type>
- <desc>
- <p>This function is called by a gen_fsm when it receives any
- other message than a synchronous or asynchronous event (or a
- system message).</p>
- <p><c>Info</c> is the received message.</p>
- <p>See <c>Module:StateName/2</c> for a description of the other
- arguments and possible return values.</p>
+ <p><c>StateData</c> is the state data of the <c>gen_fsm</c> process.</p>
+ <list type="bulleted">
+ <item>
+ <p>If <c>{reply,Reply,NextStateName,NewStateData}</c>,
+ <c>{reply,Reply,NextStateName,NewStateData,Timeout}</c>, or
+ <c>{reply,Reply,NextStateName,NewStateData,hibernate}</c> is
+ returned, <c>Reply</c> is given back to <c>From</c> as the return
+ value of <c>sync_send_event/2,3</c>. The <c>gen_fsm</c> process
+ then continues executing with the current state name set to
+ <c>NextStateName</c> and with the possibly updated state data
+ <c>NewStateData</c>. For a description of <c>Timeout</c> and
+ <c>hibernate</c>, see
+ <seealso marker="#Module:init/1">
+ <c>Module:init/1</c></seealso>.</p>
+ </item>
+ <item>
+ <p>If <c>{next_state,NextStateName,NewStateData}</c>,
+ <c>{next_state,NextStateName,NewStateData,Timeout}</c>, or
+ <c>{next_state,NextStateName,NewStateData,hibernate}</c> is
+ returned, the <c>gen_fsm</c> process continues executing in
+ <c>NextStateName</c> with <c>NewStateData</c>.
+ Any reply to <c>From</c> must be specified explicitly using
+ <seealso marker="#reply/2"><c>reply/2</c></seealso>.</p>
+ </item>
+ <item>
+ <p>If the function returns
+ <c>{stop,Reason,Reply,NewStateData}</c>, <c>Reply</c> is
+ given back to <c>From</c>. If the function returns
+ <c>{stop,Reason,NewStateData}</c>, any reply to <c>From</c>
+ must be specified explicitly using <c>reply/2</c>.
+ The <c>gen_fsm</c> process then calls
+ <c>Module:terminate(Reason,StateName,NewStateData)</c> and
+ terminates.</p>
+ </item>
+ </list>
</desc>
</func>
+
<func>
<name>Module:terminate(Reason, StateName, StateData)</name>
<fsummary>Clean up before termination.</fsummary>
@@ -734,134 +904,56 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
<v>StateData = term()</v>
</type>
<desc>
- <p>This function is called by a gen_fsm when it is about to
- terminate. It should be the opposite of <c>Module:init/1</c>
- and do any necessary cleaning up. When it returns, the gen_fsm
- terminates with <c>Reason</c>. The return value is ignored.</p>
+ <p>This function is called by a <c>gen_fsm</c> process when it is about
+ to terminate. It is to be the opposite of
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>
+ and do any necessary cleaning up. When it returns, the <c>gen_fsm</c>
+ process terminates with <c>Reason</c>. The return value is ignored.
+ </p>
<p><c>Reason</c> is a term denoting the stop reason,
<c>StateName</c> is the current state name, and
- <c>StateData</c> is the state data of the gen_fsm.</p>
- <p><c>Reason</c> depends on why the gen_fsm is terminating. If
+ <c>StateData</c> is the state data of the <c>gen_fsm</c> process.</p>
+ <p><c>Reason</c> depends on why the <c>gen_fsm</c> process is
+ terminating. If
it is because another callback function has returned a stop
- tuple <c>{stop,..}</c>, <c>Reason</c> will have the value
- specified in that tuple. If it is due to a failure,
+ tuple <c>{stop,..}</c>, <c>Reason</c> has the value
+ specified in that tuple. If it is because of a failure,
<c>Reason</c> is the error reason.</p>
- <p>If the gen_fsm is part of a supervision tree and is ordered
- by its supervisor to terminate, this function will be called
+ <p>If the <c>gen_fsm</c> process is part of a supervision tree and is
+ ordered by its supervisor to terminate, this function is called
with <c>Reason=shutdown</c> if the following conditions apply:</p>
<list type="bulleted">
- <item>the gen_fsm has been set to trap exit signals, and</item>
- <item>the shutdown strategy as defined in the supervisor's
- child specification is an integer timeout value, not
- <c>brutal_kill</c>.</item>
+ <item>
+ <p>The <c>gen_fsm</c> process has been set to trap exit signals.</p>
+ </item>
+ <item>
+ <p>The shutdown strategy as defined in the child specification of
+ the supervisor is an integer time-out value, not
+ <c>brutal_kill</c>.</p>
+ </item>
</list>
- <p>Even if the gen_fsm is <em>not</em> part of a supervision tree,
- this function will be called if it receives an <c>'EXIT'</c>
- message from its parent. <c>Reason</c> will be the same as in
- the <c>'EXIT'</c> message.</p>
- <p>Otherwise, the gen_fsm will be immediately terminated.</p>
- <p>Note that for any other reason than <c>normal</c>,
- <c>shutdown</c>, or <c>{shutdown,Term}</c> the gen_fsm is
- assumed to terminate due to an error and
- an error report is issued using
- <seealso marker="kernel:error_logger#format/2">error_logger:format/2</seealso>.</p>
- </desc>
- </func>
- <func>
- <name>Module:code_change(OldVsn, StateName, StateData, Extra) -> {ok, NextStateName, NewStateData}</name>
- <fsummary>Update the internal state data during upgrade/downgrade.</fsummary>
- <type>
- <v>OldVsn = Vsn | {down, Vsn}</v>
- <v>&nbsp;&nbsp;Vsn = term()</v>
- <v>StateName = NextStateName = atom()</v>
- <v>StateData = NewStateData = term()</v>
- <v>Extra = term()</v>
- </type>
- <desc>
- <p>This function is called by a gen_fsm when it should update
- its internal state data during a release upgrade/downgrade,
- i.e. when the instruction <c>{update,Module,Change,...}</c>
- where <c>Change={advanced,Extra}</c> is given in
- the <c>appup</c> file. See
- <seealso marker="doc/design_principles:release_handling#instr">OTP Design Principles</seealso>.</p>
- <p>In the case of an upgrade, <c>OldVsn</c> is <c>Vsn</c>, and
- in the case of a downgrade, <c>OldVsn</c> is
- <c>{down,Vsn}</c>. <c>Vsn</c> is defined by the <c>vsn</c>
- attribute(s) of the old version of the callback module
- <c>Module</c>. If no such attribute is defined, the version is
- the checksum of the BEAM file.</p>
- <p><c>StateName</c> is the current state name and
- <c>StateData</c> the internal state data of the gen_fsm.</p>
- <p><c>Extra</c> is passed as-is from the <c>{advanced,Extra}</c>
- part of the update instruction.</p>
- <p>The function should return the new current state name and
- updated internal data.</p>
- </desc>
- </func>
- <func>
- <name>Module:format_status(Opt, [PDict, StateData]) -> Status</name>
- <fsummary>Optional function for providing a term describing the
- current gen_fsm status.</fsummary>
- <type>
- <v>Opt = normal | terminate</v>
- <v>PDict = [{Key, Value}]</v>
- <v>StateData = term()</v>
- <v>Status = term()</v>
- </type>
- <desc>
- <note>
- <p>This callback is optional, so callback modules need not
- export it. The gen_fsm module provides a default
- implementation of this function that returns the callback
- module state data.</p>
- </note>
- <p>This function is called by a gen_fsm process when:</p>
- <list type="bulleted">
- <item>One
- of <seealso marker="sys#get_status/1">sys:get_status/1,2</seealso>
- is invoked to get the gen_fsm status. <c>Opt</c> is set to
- the atom <c>normal</c> for this case.</item>
- <item>The gen_fsm terminates abnormally and logs an
- error. <c>Opt</c> is set to the atom <c>terminate</c> for
- this case.</item>
- </list>
- <p>This function is useful for customising the form and
- appearance of the gen_fsm status for these cases. A callback
- module wishing to customise the <c>sys:get_status/1,2</c>
- return value as well as how its status appears in
- termination error logs exports an instance
- of <c>format_status/2</c> that returns a term describing the
- current status of the gen_fsm.</p>
- <p><c>PDict</c> is the current value of the gen_fsm's
- process dictionary.</p>
- <p><c>StateData</c> is the internal state data of the
- gen_fsm.</p>
- <p>The function should return <c>Status</c>, a term that
- customises the details of the current state and status of
- the gen_fsm. There are no restrictions on the
- form <c>Status</c> can take, but for
- the <c>sys:get_status/1,2</c> case (when <c>Opt</c>
- is <c>normal</c>), the recommended form for
- the <c>Status</c> value is <c>[{data, [{"StateData",
- Term}]}]</c> where <c>Term</c> provides relevant details of
- the gen_fsm state data. Following this recommendation isn't
- required, but doing so will make the callback module status
- consistent with the rest of the <c>sys:get_status/1,2</c>
- return value.</p>
- <p>One use for this function is to return compact alternative
- state data representations to avoid having large state terms
- printed in logfiles.</p>
+ <p>Even if the <c>gen_fsm</c> process is <em>not</em> part of a
+ supervision tree,
+ this function is called if it receives an <c>'EXIT'</c>
+ message from its parent. <c>Reason</c> is the same as in
+ the <c>'EXIT'</c> message.</p>
+ <p>Otherwise, the <c>gen_fsm</c> process terminates immediately.</p>
+ <p>Notice that for any other reason than <c>normal</c>,
+ <c>shutdown</c>, or <c>{shutdown,Term}</c> the <c>gen_fsm</c> process
+ is assumed to terminate because of an error and an error report is
+ issued using <seealso marker="kernel:error_logger#format/2">
+ <c>error_logger:format/2</c></seealso>.</p>
</desc>
</func>
</funcs>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="gen_event">gen_event(3)</seealso>,
- <seealso marker="gen_server">gen_server(3)</seealso>,
- <seealso marker="gen_statem">gen_statem(3)</seealso>,
- <seealso marker="supervisor">supervisor(3)</seealso>,
- <seealso marker="proc_lib">proc_lib(3)</seealso>,
- <seealso marker="sys">sys(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="gen_event"><c>gen_event(3)</c></seealso>,
+ <seealso marker="gen_server"><c>gen_server(3)</c></seealso>,
+ <seealso marker="gen_statem"><c>gen_statem(3)</c></seealso>,
+ <seealso marker="proc_lib"><c>proc_lib(3)</c></seealso>,
+ <seealso marker="supervisor"><c>supervisor(3)</c></seealso>,
+ <seealso marker="sys"><c>sys(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/gen_server.xml b/lib/stdlib/doc/src/gen_server.xml
index 10dc978afc..4a7dd60858 100644
--- a/lib/stdlib/doc/src/gen_server.xml
+++ b/lib/stdlib/doc/src/gen_server.xml
@@ -29,18 +29,21 @@
<rev></rev>
</header>
<module>gen_server</module>
- <modulesummary>Generic Server Behaviour</modulesummary>
+ <modulesummary>Generic server behavior.</modulesummary>
<description>
- <p>A behaviour module for implementing the server of a client-server
- relation. A generic server process (gen_server) implemented using
- this module will have a standard set of interface functions and
- include functionality for tracing and error reporting. It will
- also fit into an OTP supervision tree. Refer to
- <seealso marker="doc/design_principles:gen_server_concepts">OTP Design Principles</seealso> for more information.</p>
- <p>A gen_server assumes all specific parts to be located in a
- callback module exporting a pre-defined set of functions.
- The relationship between the behaviour functions and the callback
- functions can be illustrated as follows:</p>
+ <p>This behavior module provides the server of a client-server
+ relation. A generic server process (<c>gen_server</c>) implemented using
+ this module has a standard set of interface functions and
+ includes functionality for tracing and error reporting. It also
+ fits into an OTP supervision tree. For more information, see section
+ <seealso marker="doc/design_principles:gen_server_concepts">
+ gen_server Behaviour</seealso> in OTP Design Principles.</p>
+
+ <p>A <c>gen_server</c> process assumes all specific parts to be located in
+ a callback module exporting a predefined set of functions.
+ The relationship between the behavior functions and the callback
+ functions is as follows:</p>
+
<pre>
gen_server module Callback module
----------------- ---------------
@@ -59,175 +62,65 @@ gen_server:abcast -----> Module:handle_cast/2
- -----> Module:terminate/2
-- -----> Module:code_change/3 </pre>
- <p>If a callback function fails or returns a bad value,
- the gen_server will terminate.</p>
- <p>A gen_server handles system messages as documented in
- <seealso marker="sys">sys(3)</seealso>. The <c>sys</c> module
- can be used for debugging a gen_server.</p>
- <p>Note that a gen_server does not trap exit signals automatically,
- this must be explicitly initiated in the callback module.</p>
+- -----> Module:code_change/3</pre>
+
+ <p>If a callback function fails or returns a bad value, the
+ <c>gen_server</c> process terminates.</p>
+
+ <p>A <c>gen_server</c> process handles system messages as described in
+ <seealso marker="sys"><c>sys(3)</c></seealso>. The <c>sys</c> module
+ can be used for debugging a <c>gen_server</c> process.</p>
+
+ <p>Notice that a <c>gen_server</c> process does not trap exit signals
+ automatically, this must be explicitly initiated in the callback
+ module.</p>
+
<p>Unless otherwise stated, all functions in this module fail if
- the specified gen_server does not exist or if bad arguments are
- given.</p>
-
- <p>The gen_server process can go into hibernation
- (see <seealso marker="erts:erlang#erlang:hibernate/3">erlang(3)</seealso>) if a callback
- function specifies <c>'hibernate'</c> instead of a timeout value. This
- might be useful if the server is expected to be idle for a long
- time. However this feature should be used with care as hibernation
- implies at least two garbage collections (when hibernating and
- shortly after waking up) and is not something you'd want to do
- between each call to a busy server.</p>
+ the specified <c>gen_server</c> process does not exist or if bad
+ arguments are specified.</p>
+ <p>The <c>gen_server</c> process can go into hibernation
+ (see <seealso marker="erts:erlang#hibernate/3">
+ <c>erlang:hibernate/3</c></seealso>) if a callback
+ function specifies <c>'hibernate'</c> instead of a time-out value. This
+ can be useful if the server is expected to be idle for a long
+ time. However, use this feature with care, as hibernation
+ implies at least two garbage collections (when hibernating and
+ shortly after waking up) and is not something you want to do
+ between each call to a busy server.</p>
</description>
+
<funcs>
<func>
- <name>start_link(Module, Args, Options) -> Result</name>
- <name>start_link(ServerName, Module, Args, Options) -> Result</name>
- <fsummary>Create a gen_server process in a supervision tree.</fsummary>
- <type>
- <v>ServerName = {local,Name} | {global,GlobalName}
- | {via,Module,ViaName}</v>
- <v>&nbsp;Name = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Module = atom()</v>
- <v>Args = term()</v>
- <v>Options = [Option]</v>
- <v>&nbsp;Option = {debug,Dbgs} | {timeout,Time} | {spawn_opt,SOpts}</v>
- <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
- <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics | {log_to_file,FileName} | {install,{Func,FuncState}}</v>
- <v>&nbsp;&nbsp;SOpts = [term()]</v>
- <v>Result = {ok,Pid} | ignore | {error,Error}</v>
- <v>&nbsp;Pid = pid()</v>
- <v>&nbsp;Error = {already_started,Pid} | term()</v>
- </type>
- <desc>
- <p>Creates a gen_server process as part of a supervision tree.
- The function should be called, directly or indirectly, by
- the supervisor. It will, among other things, ensure that
- the gen_server is linked to the supervisor.</p>
- <p>The gen_server process calls <c>Module:init/1</c> to
- initialize. To ensure a synchronized start-up procedure,
- <c>start_link/3,4</c> does not return until
- <c>Module:init/1</c> has returned.</p>
- <p>If <c>ServerName={local,Name}</c> the gen_server is
- registered locally as <c>Name</c> using <c>register/2</c>.
- If <c>ServerName={global,GlobalName}</c> the gen_server is
- registered globally as <c>GlobalName</c> using
- <c>global:register_name/2</c>. If no name is provided,
- the gen_server is not registered.
- If <c>ServerName={via,Module,ViaName}</c>, the gen_server will
- register with the registry represented by <c>Module</c>.
- The <c>Module</c> callback should export the functions
- <c>register_name/2</c>, <c>unregister_name/1</c>,
- <c>whereis_name/1</c> and <c>send/2</c>, which should behave like the
- corresponding functions in <c>global</c>. Thus,
- <c>{via,global,GlobalName}</c> is a valid reference.</p>
- <p><c>Module</c> is the name of the callback module.</p>
- <p><c>Args</c> is an arbitrary term which is passed as
- the argument to <c>Module:init/1</c>.</p>
- <p>If the option <c>{timeout,Time}</c> is present,
- the gen_server is allowed to spend <c>Time</c> milliseconds
- initializing or it will be terminated and the start function
- will return <c>{error,timeout}</c>.
- </p>
- <p>If the option <c>{debug,Dbgs}</c> is present,
- the corresponding <c>sys</c> function will be called for each
- item in <c>Dbgs</c>. See
- <seealso marker="sys">sys(3)</seealso>.</p>
- <p>If the option <c>{spawn_opt,SOpts}</c> is present,
- <c>SOpts</c> will be passed as option list to
- the <c>spawn_opt</c> BIF which is used to spawn
- the gen_server. See
- <seealso marker="erts:erlang#spawn_opt/2">erlang(3)</seealso>.</p>
- <note>
- <p>Using the spawn option <c>monitor</c> is currently not
- allowed, but will cause the function to fail with reason
- <c>badarg</c>.</p>
- </note>
- <p>If the gen_server is successfully created and initialized
- the function returns <c>{ok,Pid}</c>, where <c>Pid</c> is
- the pid of the gen_server. If there already exists a process
- with the specified <c>ServerName</c> the function returns
- <c>{error,{already_started,Pid}}</c>, where <c>Pid</c> is
- the pid of that process.</p>
- <p>If <c>Module:init/1</c> fails with <c>Reason</c>,
- the function returns <c>{error,Reason}</c>. If
- <c>Module:init/1</c> returns <c>{stop,Reason}</c> or
- <c>ignore</c>, the process is terminated and the function
- returns <c>{error,Reason}</c> or <c>ignore</c>, respectively.</p>
- </desc>
- </func>
- <func>
- <name>start(Module, Args, Options) -> Result</name>
- <name>start(ServerName, Module, Args, Options) -> Result</name>
- <fsummary>Create a stand-alone gen_server process.</fsummary>
- <type>
- <v>ServerName = {local,Name} | {global,GlobalName}
- | {via,Module,ViaName}</v>
- <v>&nbsp;Name = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Module = atom()</v>
- <v>Args = term()</v>
- <v>Options = [Option]</v>
- <v>&nbsp;Option = {debug,Dbgs} | {timeout,Time} | {spawn_opt,SOpts}</v>
- <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
- <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics | {log_to_file,FileName} | {install,{Func,FuncState}}</v>
- <v>&nbsp;&nbsp;SOpts = [term()]</v>
- <v>Result = {ok,Pid} | ignore | {error,Error}</v>
- <v>&nbsp;Pid = pid()</v>
- <v>&nbsp;Error = {already_started,Pid} | term()</v>
- </type>
- <desc>
- <p>Creates a stand-alone gen_server process, i.e. a gen_server
- which is not part of a supervision tree and thus has no
- supervisor.</p>
- <p>See <seealso marker="#start_link/3">start_link/3,4</seealso>
- for a description of arguments and return values.</p>
- </desc>
- </func>
- <func>
- <name>stop(ServerRef) -> ok</name>
- <name>stop(ServerRef, Reason, Timeout) -> ok</name>
- <fsummary>Synchronously stop a generic server.</fsummary>
+ <name>abcast(Name, Request) -> abcast</name>
+ <name>abcast(Nodes, Name, Request) -> abcast</name>
+ <fsummary>Send an asynchronous request to many generic servers.</fsummary>
<type>
- <v>ServerRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
+ <v>Nodes = [Node]</v>
<v>&nbsp;Node = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Reason = term()</v>
- <v>Timeout = int()>0 | infinity</v>
+ <v>Name = atom()</v>
+ <v>Request = term()</v>
</type>
<desc>
- <p>Orders a generic server to exit with the
- given <c>Reason</c> and waits for it to terminate. The
- gen_server will call
- <seealso marker="#Module:terminate/2">Module:terminate/2</seealso>
- before exiting.</p>
- <p>The function returns <c>ok</c> if the server terminates
- with the expected reason. Any other reason than <c>normal</c>,
- <c>shutdown</c>, or <c>{shutdown,Term}</c> will cause an
- error report to be issued using
- <seealso marker="kernel:error_logger#format/2">error_logger:format/2</seealso>.
- The default <c>Reason</c> is <c>normal</c>.</p>
- <p><c>Timeout</c> is an integer greater than zero which
- specifies how many milliseconds to wait for the server to
- terminate, or the atom <c>infinity</c> to wait
- indefinitely. The default value is <c>infinity</c>. If the
- server has not terminated within the specified time, a
- <c>timeout</c> exception is raised.</p>
- <p>If the process does not exist, a <c>noproc</c> exception
- is raised.</p>
+ <p>Sends an asynchronous request to the <c>gen_server</c> processes
+ locally registered as <c>Name</c> at the specified nodes. The function
+ returns immediately and ignores nodes that do not exist, or
+ where the <c>gen_server</c> <c>Name</c> does not exist.
+ The <c>gen_server</c> processes call
+ <seealso marker="#Module:handle_cast/2">
+ <c>Module:handle_cast/2</c></seealso> to handle the request.</p>
+ <p>For a description of the arguments, see
+ <seealso marker="#multi_call/2"><c>multi_call/2,3,4</c></seealso>.</p>
</desc>
</func>
+
<func>
<name>call(ServerRef, Request) -> Reply</name>
<name>call(ServerRef, Request, Timeout) -> Reply</name>
<fsummary>Make a synchronous call to a generic server.</fsummary>
<type>
- <v>ServerRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
+ <v>ServerRef = Name | {Name,Node} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName} | pid()</v>
<v>&nbsp;Node = atom()</v>
<v>&nbsp;GlobalName = ViaName = term()</v>
<v>Request = term()</v>
@@ -235,47 +128,126 @@ gen_server:abcast -----> Module:handle_cast/2
<v>Reply = term()</v>
</type>
<desc>
- <p>Makes a synchronous call to the gen_server <c>ServerRef</c>
+ <p>Makes a synchronous call to the <c>ServerRef</c> of the
+ <c>gen_server</c> process
by sending a request and waiting until a reply arrives or a
- timeout occurs. The gen_server will call
- <c>Module:handle_call/3</c> to handle the request.</p>
- <p><c>ServerRef</c> can be:</p>
+ time-out occurs. The <c>gen_server</c> process calls
+ <seealso marker="#Module:handle_call/3">
+ <c>Module:handle_call/3</c></seealso> to handle the request.</p>
+ <p><c>ServerRef</c> can be any of the following:</p>
<list type="bulleted">
- <item>the pid,</item>
- <item><c>Name</c>, if the gen_server is locally registered,</item>
- <item><c>{Name,Node}</c>, if the gen_server is locally
- registered at another node, or</item>
- <item><c>{global,GlobalName}</c>, if the gen_server is
- globally registered.</item>
- <item><c>{via,Module,ViaName}</c>, if the gen_server is
- registered through an alternative process registry.</item>
+ <item>The pid</item>
+ <item><c>Name</c>, if the <c>gen_server</c> process is locally
+ registered</item>
+ <item><c>{Name,Node}</c>, if the <c>gen_server</c> process is locally
+ registered at another node</item>
+ <item><c>{global,GlobalName}</c>, if the <c>gen_server</c> process is
+ globally registered</item>
+ <item><c>{via,Module,ViaName}</c>, if the <c>gen_server</c> process is
+ registered through an alternative process registry</item>
</list>
- <p><c>Request</c> is an arbitrary term which is passed as one of
+ <p><c>Request</c> is any term that is passed as one of
the arguments to <c>Module:handle_call/3</c>.</p>
- <p><c>Timeout</c> is an integer greater than zero which
+ <p><c>Timeout</c> is an integer greater than zero that
specifies how many milliseconds to wait for a reply, or
- the atom <c>infinity</c> to wait indefinitely. Default value
- is 5000. If no reply is received within the specified time,
+ the atom <c>infinity</c> to wait indefinitely. Defaults to
+ 5000. If no reply is received within the specified time,
the function call fails. If the caller catches the failure
and continues running, and the server is just late with the reply,
- it may arrive at any time later into the caller's message queue.
+ it can arrive at any time later into the message queue of the caller.
The caller must in this case be prepared for this
and discard any such garbage messages that are two element
tuples with a reference as the first element.</p>
<p>The return value <c>Reply</c> is defined in the return value
of <c>Module:handle_call/3</c>.</p>
- <p>The call may fail for several reasons, including timeout and
- the called gen_server dying before or during the call.</p>
- <p>The ancient behaviour of sometimes consuming the server
+ <p>The call can fail for many reasons, including time-out and the
+ called <c>gen_server</c> process dying before or during the call.</p>
+ <note>
+ <p>The ancient behavior of sometimes consuming the server
exit message if the server died during the call while
- linked to the client has been removed in OTP R12B/Erlang 5.6.</p>
+ linked to the client was removed in Erlang 5.6/OTP R12B.</p>
+ </note>
</desc>
</func>
+
+ <func>
+ <name>cast(ServerRef, Request) -> ok</name>
+ <fsummary>Send an asynchronous request to a generic server.</fsummary>
+ <type>
+ <v>ServerRef = Name | {Name,Node} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName} | pid()</v>
+ <v>&nbsp;Node = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Request = term()</v>
+ </type>
+ <desc>
+ <p>Sends an asynchronous request to the <c>ServerRef</c> of the
+ <c>gen_server</c> process
+ and returns <c>ok</c> immediately, ignoring
+ if the destination node or <c>gen_server</c> process does not exist.
+ The <c>gen_server</c> process calls
+ <seealso marker="#Module:handle_cast/2">
+ <c>Module:handle_cast/2</c></seealso> to handle the request.</p>
+ <p>For a description of <c>ServerRef</c>, see
+ <seealso marker="#call/2"><c>call/2,3</c></seealso>.</p>
+ <p><c>Request</c> is any term that is passed as one
+ of the arguments to <c>Module:handle_cast/2</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>enter_loop(Module, Options, State)</name>
+ <name>enter_loop(Module, Options, State, ServerName)</name>
+ <name>enter_loop(Module, Options, State, Timeout)</name>
+ <name>enter_loop(Module, Options, State, ServerName, Timeout)</name>
+ <fsummary>Enter the <c>gen_server</c> receive loop.</fsummary>
+ <type>
+ <v>Module = atom()</v>
+ <v>Options = [Option]</v>
+ <v>&nbsp;Option = {debug,Dbgs}</v>
+ <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
+ <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics</v>
+ <v>&nbsp;&nbsp;&nbsp;&nbsp;| {log_to_file,FileName} | {install,{Func,FuncState}}</v>
+ <v>State = term()</v>
+ <v>ServerName = {local,Name} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName}</v>
+ <v>&nbsp;Name = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Timeout = int() | infinity</v>
+ </type>
+ <desc>
+ <p>Makes an existing process into a <c>gen_server</c> process. Does not
+ return, instead the calling process enters the <c>gen_server</c>
+ process receive
+ loop and becomes a <c>gen_server</c> process. The process
+ <em>must</em> have been started using one of the start functions in
+ <seealso marker="proc_lib"><c>proc_lib(3)</c></seealso>. The user is
+ responsible for any initialization of the process, including
+ registering a name for it.</p>
+ <p>This function is useful when a more complex initialization procedure
+ is needed than the <c>gen_server</c> process behavior provides.</p>
+ <p><c>Module</c>, <c>Options</c>, and <c>ServerName</c> have
+ the same meanings as when calling
+ <seealso marker="#start_link/3"><c>start[_link]/3,4</c></seealso>.
+ However, if <c>ServerName</c> is specified, the process must
+ have been registered accordingly <em>before</em> this function
+ is called.</p>
+ <p><c>State</c> and <c>Timeout</c> have the same meanings as in
+ the return value of
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>.
+ The callback module <c>Module</c> does not need to
+ export an <c>init/1</c> function.</p>
+ <p>The function fails if the calling process was not started by a
+ <c>proc_lib</c> start function, or if it is not registered
+ according to <c>ServerName</c>.</p>
+ </desc>
+ </func>
+
<func>
<name>multi_call(Name, Request) -> Result</name>
<name>multi_call(Nodes, Name, Request) -> Result</name>
<name>multi_call(Nodes, Name, Request, Timeout) -> Result</name>
- <fsummary>Make a synchronous call to several generic servers.</fsummary>
+ <fsummary>Make a synchronous call to many generic servers.</fsummary>
<type>
<v>Nodes = [Node]</v>
<v>&nbsp;Node = atom()</v>
@@ -288,203 +260,339 @@ gen_server:abcast -----> Module:handle_cast/2
<v>BadNodes = [Node]</v>
</type>
<desc>
- <p>Makes a synchronous call to all gen_servers locally
+ <p>Makes a synchronous call to all <c>gen_server</c> processes locally
registered as <c>Name</c> at the specified nodes by first
- sending a request to every node and then waiting for
- the replies. The gen_servers will call
- <c>Module:handle_call/3</c> to handle the request.</p>
- <p>The function returns a tuple <c>{Replies,BadNodes}</c> where
+ sending a request to every node and then waits for
+ the replies. The <c>gen_server</c> process calls
+ <seealso marker="#Module:handle_call/3">
+ <c>Module:handle_call/3</c></seealso> to handle the request.</p>
+ <p>The function returns a tuple <c>{Replies,BadNodes}</c>, where
<c>Replies</c> is a list of <c>{Node,Reply}</c> and
<c>BadNodes</c> is a list of node that either did not exist,
- or where the gen_server <c>Name</c> did not exist or did not
+ or where the <c>gen_server</c> <c>Name</c> did not exist or did not
reply.</p>
<p><c>Nodes</c> is a list of node names to which the request
- should be sent. Default value is the list of all known nodes
+ is to be sent. Default value is the list of all known nodes
<c>[node()|nodes()]</c>.</p>
<p><c>Name</c> is the locally registered name of each
- gen_server.</p>
- <p><c>Request</c> is an arbitrary term which is passed as one of
+ <c>gen_server</c> process.</p>
+ <p><c>Request</c> is any term that is passed as one of
the arguments to <c>Module:handle_call/3</c>.</p>
- <p><c>Timeout</c> is an integer greater than zero which
+ <p><c>Timeout</c> is an integer greater than zero that
specifies how many milliseconds to wait for each reply, or
- the atom <c>infinity</c> to wait indefinitely. Default value
- is <c>infinity</c>. If no reply is received from a node within
+ the atom <c>infinity</c> to wait indefinitely. Defaults
+ to <c>infinity</c>. If no reply is received from a node within
the specified time, the node is added to <c>BadNodes</c>.</p>
- <p>When a reply <c>Reply</c> is received from the gen_server at
- a node <c>Node</c>, <c>{Node,Reply}</c> is added to
+ <p>When a reply <c>Reply</c> is received from the <c>gen_server</c>
+ process at a node <c>Node</c>, <c>{Node,Reply}</c> is added to
<c>Replies</c>. <c>Reply</c> is defined in the return value of
<c>Module:handle_call/3</c>.</p>
<warning>
- <p>If one of the nodes is not capable of process monitors,
- for example C or Java nodes, and the gen_server is not started
- when the requests are sent, but starts within 2 seconds,
- this function waits the whole <c>Timeout</c>,
- which may be infinity.</p>
+ <p>If one of the nodes cannot process monitors, for example,
+ C or Java nodes, and the <c>gen_server</c> process is not started
+ when the requests are sent, but starts within 2 seconds,
+ this function waits the whole <c>Timeout</c>,
+ which may be infinity.</p>
<p>This problem does not exist if all nodes are Erlang nodes.</p>
</warning>
- <p>To prevent late answers (after the timeout) from polluting
- the caller's message queue, a middleman process is used to
- do the actual calls. Late answers will then be discarded
+ <p>To prevent late answers (after the time-out) from polluting
+ the message queue of the caller, a middleman process is used to
+ do the calls. Late answers are then discarded
when they arrive to a terminated process.</p>
</desc>
</func>
+
<func>
- <name>cast(ServerRef, Request) -> ok</name>
- <fsummary>Send an asynchronous request to a generic server.</fsummary>
+ <name>reply(Client, Reply) -> Result</name>
+ <fsummary>Send a reply to a client.</fsummary>
<type>
- <v>ServerRef = Name | {Name,Node} | {global,GlobalName}
- | {via,Module,ViaName} | pid()</v>
- <v>&nbsp;Node = atom()</v>
- <v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Request = term()</v>
+ <v>Client - see below</v>
+ <v>Reply = term()</v>
+ <v>Result = term()</v>
</type>
<desc>
- <p>Sends an asynchronous request to the gen_server
- <c>ServerRef</c> and returns <c>ok</c> immediately, ignoring
- if the destination node or gen_server does not exist.
- The gen_server will call <c>Module:handle_cast/2</c> to
- handle the request.</p>
- <p>See <seealso marker="#call/2">call/2,3</seealso> for a
- description of <c>ServerRef</c>.</p>
- <p><c>Request</c> is an arbitrary term which is passed as one
- of the arguments to <c>Module:handle_cast/2</c>.</p>
+ <p>This function can be used by a <c>gen_server</c> process to
+ explicitly send a reply to a client that called
+ <seealso marker="#call/2"><c>call/2,3</c></seealso> or
+ <seealso marker="#multi_call/2"><c>multi_call/2,3,4</c></seealso>,
+ when the reply cannot be defined in the return value of
+ <seealso marker="#Module:handle_call/3">
+ <c>Module:handle_call/3</c></seealso>.</p>
+ <p><c>Client</c> must be the <c>From</c> argument provided to
+ the callback function. <c>Reply</c> is any term
+ given back to the client as the return value of
+ <c>call/2,3</c> or <c>multi_call/2,3,4</c>.</p>
+ <p>The return value <c>Result</c> is not further defined, and
+ is always to be ignored.</p>
</desc>
</func>
+
<func>
- <name>abcast(Name, Request) -> abcast</name>
- <name>abcast(Nodes, Name, Request) -> abcast</name>
- <fsummary>Send an asynchronous request to several generic servers.</fsummary>
+ <name>start(Module, Args, Options) -> Result</name>
+ <name>start(ServerName, Module, Args, Options) -> Result</name>
+ <fsummary>Create a standalone <c>gen_server</c> process.</fsummary>
<type>
- <v>Nodes = [Node]</v>
- <v>&nbsp;Node = atom()</v>
- <v>Name = atom()</v>
- <v>Request = term()</v>
+ <v>ServerName = {local,Name} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName}</v>
+ <v>&nbsp;Name = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Module = atom()</v>
+ <v>Args = term()</v>
+ <v>Options = [Option]</v>
+ <v>&nbsp;Option = {debug,Dbgs} | {timeout,Time} | {spawn_opt,SOpts}</v>
+ <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
+ <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics | {log_to_file,FileName} | {install,{Func,FuncState}}</v>
+ <v>&nbsp;&nbsp;SOpts = [term()]</v>
+ <v>Result = {ok,Pid} | ignore | {error,Error}</v>
+ <v>&nbsp;Pid = pid()</v>
+ <v>&nbsp;Error = {already_started,Pid} | term()</v>
</type>
<desc>
- <p>Sends an asynchronous request to the gen_servers locally
- registered as <c>Name</c> at the specified nodes. The function
- returns immediately and ignores nodes that do not exist, or
- where the gen_server <c>Name</c> does not exist.
- The gen_servers will call <c>Module:handle_cast/2</c> to
- handle the request.</p>
- <p>See
- <seealso marker="#multi_call/2">multi_call/2,3,4</seealso>
- for a description of the arguments.</p>
+ <p>Creates a standalone <c>gen_server</c> process, that is, a
+ <c>gen_server</c> process that is not part of a supervision tree
+ and thus has no supervisor.</p>
+ <p>For a description of arguments and return values, see
+ <seealso marker="#start_link/3"><c>start_link/3,4</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name>reply(Client, Reply) -> Result</name>
- <fsummary>Send a reply to a client.</fsummary>
+ <name>start_link(Module, Args, Options) -> Result</name>
+ <name>start_link(ServerName, Module, Args, Options) -> Result</name>
+ <fsummary>Create a <c>gen_server</c> process in a supervision tree.
+ </fsummary>
<type>
- <v>Client - see below</v>
- <v>Reply = term()</v>
- <v>Result = term()</v>
+ <v>ServerName = {local,Name} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName}</v>
+ <v>&nbsp;Name = atom()</v>
+ <v>&nbsp;GlobalName = ViaName = term()</v>
+ <v>Module = atom()</v>
+ <v>Args = term()</v>
+ <v>Options = [Option]</v>
+ <v>&nbsp;Option = {debug,Dbgs} | {timeout,Time} | {spawn_opt,SOpts}</v>
+ <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
+ <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics | {log_to_file,FileName} | {install,{Func,FuncState}}</v>
+ <v>&nbsp;&nbsp;SOpts = [term()]</v>
+ <v>Result = {ok,Pid} | ignore | {error,Error}</v>
+ <v>&nbsp;Pid = pid()</v>
+ <v>&nbsp;Error = {already_started,Pid} | term()</v>
</type>
<desc>
- <p>This function can be used by a gen_server to explicitly send
- a reply to a client that called <c>call/2,3</c> or
- <c>multi_call/2,3,4</c>, when the reply cannot be defined in
- the return value of <c>Module:handle_call/3</c>.</p>
- <p><c>Client</c> must be the <c>From</c> argument provided to
- the callback function. <c>Reply</c> is an arbitrary term,
- which will be given back to the client as the return value of
- <c>call/2,3</c> or <c>multi_call/2,3,4</c>.</p>
- <p>The return value <c>Result</c> is not further defined, and
- should always be ignored.</p>
+ <p>Creates a <c>gen_server</c> process as part of a supervision tree.
+ This function is to be called, directly or indirectly, by
+ the supervisor. For example, it ensures that
+ the <c>gen_server</c> process is linked to the supervisor.</p>
+ <p>The <c>gen_server</c> process calls
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso> to
+ initialize. To ensure a synchronized startup procedure,
+ <c>start_link/3,4</c> does not return until
+ <c>Module:init/1</c> has returned.</p>
+ <list type="bulleted">
+ <item>
+ <p>If <c>ServerName={local,Name}</c>, the <c>gen_server</c> process
+ is registered locally as <c>Name</c> using <c>register/2</c>.</p>
+ </item>
+ <item>
+ <p>If <c>ServerName={global,GlobalName}</c>, the <c>gen_server</c>
+ process id registered globally as <c>GlobalName</c> using
+ <seealso marker="kernel:global#register_name/2">
+ <c>global:register_name/2</c></seealso> If no name is
+ provided, the <c>gen_server</c> process is not registered.</p>
+ </item>
+ <item>
+ <p>If <c>ServerName={via,Module,ViaName}</c>, the <c>gen_server</c>
+ process registers with the registry represented by <c>Module</c>.
+ The <c>Module</c> callback is to export the functions
+ <c>register_name/2</c>, <c>unregister_name/1</c>,
+ <c>whereis_name/1</c>, and <c>send/2</c>, which are to behave
+ like the corresponding functions in
+ <seealso marker="kernel:global"><c>global</c></seealso>.
+ Thus, <c>{via,global,GlobalName}</c> is a valid reference.</p>
+ </item>
+ </list>
+ <p><c>Module</c> is the name of the callback module.</p>
+ <p><c>Args</c> is any term that is passed as
+ the argument to
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>.</p>
+ <list type="bulleted">
+ <item>
+ <p>If option <c>{timeout,Time}</c> is present, the <c>gen_server</c>
+ process is allowed to spend <c>Time</c> milliseconds
+ initializing or it is terminated and the start function
+ returns <c>{error,timeout}</c>.</p>
+ </item>
+ <item>
+ <p>If option <c>{debug,Dbgs}</c> is present,
+ the corresponding <c>sys</c> function is called for each
+ item in <c>Dbgs</c>; see
+ <seealso marker="sys"><c>sys(3)</c></seealso>.</p>
+ </item>
+ <item>
+ <p>If option <c>{spawn_opt,SOpts}</c> is present,
+ <c>SOpts</c> is passed as option list to
+ the <c>spawn_opt</c> BIF, which is used to spawn
+ the <c>gen_server</c> process; see
+ <seealso marker="erts:erlang#spawn_opt/2">
+ <c>spawn_opt/2</c></seealso>.</p>
+ </item>
+ </list>
+ <note>
+ <p>Using spawn option <c>monitor</c> is not
+ allowed, it causes the function to fail with reason
+ <c>badarg</c>.</p>
+ </note>
+ <p>If the <c>gen_server</c> process is successfully created and
+ initialized, the function returns <c>{ok,Pid}</c>, where <c>Pid</c>
+ is the pid of the <c>gen_server</c> process. If a process with the
+ specified <c>ServerName</c> exists already, the function returns
+ <c>{error,{already_started,Pid}}</c>, where <c>Pid</c> is
+ the pid of that process.</p>
+ <p>If <c>Module:init/1</c> fails with <c>Reason</c>,
+ the function returns <c>{error,Reason}</c>. If
+ <c>Module:init/1</c> returns <c>{stop,Reason}</c> or
+ <c>ignore</c>, the process is terminated and the function
+ returns <c>{error,Reason}</c> or <c>ignore</c>, respectively.</p>
</desc>
</func>
+
<func>
- <name>enter_loop(Module, Options, State)</name>
- <name>enter_loop(Module, Options, State, ServerName)</name>
- <name>enter_loop(Module, Options, State, Timeout)</name>
- <name>enter_loop(Module, Options, State, ServerName, Timeout)</name>
- <fsummary>Enter the gen_server receive loop</fsummary>
+ <name>stop(ServerRef) -> ok</name>
+ <name>stop(ServerRef, Reason, Timeout) -> ok</name>
+ <fsummary>Synchronously stop a generic server.</fsummary>
<type>
- <v>Module = atom()</v>
- <v>Options = [Option]</v>
- <v>&nbsp;Option = {debug,Dbgs}</v>
- <v>&nbsp;&nbsp;Dbgs = [Dbg]</v>
- <v>&nbsp;&nbsp;&nbsp;Dbg = trace | log | statistics</v>
- <v>&nbsp;&nbsp;&nbsp;&nbsp;| {log_to_file,FileName} | {install,{Func,FuncState}}</v>
- <v>State = term()</v>
- <v>ServerName = {local,Name} | {global,GlobalName}
- | {via,Module,ViaName}</v>
- <v>&nbsp;Name = atom()</v>
+ <v>ServerRef = Name | {Name,Node} | {global,GlobalName}</v>
+ <v>&nbsp;&nbsp;| {via,Module,ViaName} | pid()</v>
+ <v>&nbsp;Node = atom()</v>
<v>&nbsp;GlobalName = ViaName = term()</v>
- <v>Timeout = int() | infinity</v>
+ <v>Reason = term()</v>
+ <v>Timeout = int()>0 | infinity</v>
</type>
<desc>
- <p>Makes an existing process into a gen_server. Does not return,
- instead the calling process will enter the gen_server receive
- loop and become a gen_server process. The process
- <em>must</em> have been started using one of the start
- functions in <c>proc_lib</c>, see
- <seealso marker="proc_lib">proc_lib(3)</seealso>. The user is
- responsible for any initialization of the process, including
- registering a name for it.</p>
- <p>This function is useful when a more complex initialization
- procedure is needed than the gen_server behaviour provides.</p>
- <p><c>Module</c>, <c>Options</c> and <c>ServerName</c> have
- the same meanings as when calling
- <seealso marker="#start_link/3">gen_server:start[_link]/3,4</seealso>.
- However, if <c>ServerName</c> is specified, the process must
- have been registered accordingly <em>before</em> this function
- is called.</p>
- <p><c>State</c> and <c>Timeout</c> have the same meanings as in
- the return value of
- <seealso marker="#Moduleinit">Module:init/1</seealso>.
- Also, the callback module <c>Module</c> does not need to
- export an <c>init/1</c> function. </p>
- <p>Failure: If the calling process was not started by a
- <c>proc_lib</c> start function, or if it is not registered
- according to <c>ServerName</c>.</p>
+ <p>Orders a generic server to exit with the specified <c>Reason</c>
+ and waits for it to terminate. The <c>gen_server</c> process calls
+ <seealso marker="#Module:terminate/2">
+ <c>Module:terminate/2</c></seealso> before exiting.</p>
+ <p>The function returns <c>ok</c> if the server terminates
+ with the expected reason. Any other reason than <c>normal</c>,
+ <c>shutdown</c>, or <c>{shutdown,Term}</c> causes an
+ error report to be issued using
+ <seealso marker="kernel:error_logger#format/2">
+ <c>error_logger:format/2</c></seealso>.
+ The default <c>Reason</c> is <c>normal</c>.</p>
+ <p><c>Timeout</c> is an integer greater than zero that
+ specifies how many milliseconds to wait for the server to
+ terminate, or the atom <c>infinity</c> to wait
+ indefinitely. Defaults to <c>infinity</c>. If the
+ server has not terminated within the specified time, a
+ <c>timeout</c> exception is raised.</p>
+ <p>If the process does not exist, a <c>noproc</c> exception
+ is raised.</p>
</desc>
</func>
</funcs>
<section>
- <title>CALLBACK FUNCTIONS</title>
+ <title>Callback Functions</title>
<p>The following functions
- should be exported from a <c>gen_server</c> callback module.</p>
+ are to be exported from a <c>gen_server</c> callback module.</p>
</section>
+
<funcs>
<func>
- <name>Module:init(Args) -> Result</name>
- <fsummary>Initialize process and internal state.</fsummary>
+ <name>Module:code_change(OldVsn, State, Extra) -> {ok, NewState} | {error, Reason}</name>
+ <fsummary>Update the internal state during upgrade/downgrade.</fsummary>
<type>
- <v>Args = term()</v>
- <v>Result = {ok,State} | {ok,State,Timeout} | {ok,State,hibernate}</v>
- <v>&nbsp;| {stop,Reason} | ignore</v>
- <v>&nbsp;State = term()</v>
- <v>&nbsp;Timeout = int()>=0 | infinity</v>
- <v>&nbsp;Reason = term()</v>
+ <v>OldVsn = Vsn | {down, Vsn}</v>
+ <v>&nbsp;&nbsp;Vsn = term()</v>
+ <v>State = NewState = term()</v>
+ <v>Extra = term()</v>
+ <v>Reason = term()</v>
</type>
<desc>
- <marker id="Moduleinit"></marker>
- <p>Whenever a gen_server is started using
- <seealso marker="#start/3">gen_server:start/3,4</seealso> or
- <seealso marker="#start_link/3">gen_server:start_link/3,4</seealso>,
- this function is called by the new process to initialize.</p>
- <p><c>Args</c> is the <c>Args</c> argument provided to the start
- function.</p>
- <p>If the initialization is successful, the function should
- return <c>{ok,State}</c>, <c>{ok,State,Timeout}</c> or <c>{ok,State,hibernate}</c>, where
- <c>State</c> is the internal state of the gen_server.</p>
- <p>If an integer timeout value is provided, a timeout will occur
- unless a request or a message is received within
- <c>Timeout</c> milliseconds. A timeout is represented by
- the atom <c>timeout</c> which should be handled by
- the <c>handle_info/2</c> callback function. The atom
- <c>infinity</c> can be used to wait indefinitely, this is
- the default value.</p>
- <p>If <c>hibernate</c> is specified instead of a timeout value, the process will go
- into hibernation when waiting for the next message to arrive (by calling
- <seealso marker="proc_lib#hibernate/3">proc_lib:hibernate/3</seealso>).</p>
- <p>If something goes wrong during the initialization
- the function should return <c>{stop,Reason}</c> where
- <c>Reason</c> is any term, or <c>ignore</c>.</p>
+ <p>This function is called by a <c>gen_server</c> process when it is
+ to update its internal state during a release upgrade/downgrade,
+ that is, when the instruction <c>{update,Module,Change,...}</c>,
+ where <c>Change={advanced,Extra}</c>, is specifed in
+ the <c>appup</c> file. For more information, see section
+ <seealso marker="doc/design_principles:release_handling#instr">
+ Release Handling Instructions</seealso> in OTP Design Principles.</p>
+ <p>For an upgrade, <c>OldVsn</c> is <c>Vsn</c>, and
+ for a downgrade, <c>OldVsn</c> is
+ <c>{down,Vsn}</c>. <c>Vsn</c> is defined by the <c>vsn</c>
+ attribute(s) of the old version of the callback module
+ <c>Module</c>. If no such attribute is defined, the version
+ is the checksum of the Beam file.</p>
+ <p><c>State</c> is the internal state of the <c>gen_server</c>
+ process.</p>
+ <p><c>Extra</c> is passed "as is" from the <c>{advanced,Extra}</c>
+ part of the update instruction.</p>
+ <p>If successful, the function must return the updated
+ internal state.</p>
+ <p>If the function returns <c>{error,Reason}</c>, the ongoing
+ upgrade fails and rolls back to the old release.</p>
</desc>
</func>
+
+ <func>
+ <name>Module:format_status(Opt, [PDict, State]) -> Status</name>
+ <fsummary>Optional function for providing a term describing the
+ current <c>gen_server</c> status.</fsummary>
+ <type>
+ <v>Opt = normal | terminate</v>
+ <v>PDict = [{Key, Value}]</v>
+ <v>State = term()</v>
+ <v>Status = term()</v>
+ </type>
+ <desc>
+ <note>
+ <p>This callback is optional, so callback modules need not
+ export it. The <c>gen_server</c> module provides a default
+ implementation of this function that returns the callback
+ module state.</p>
+ </note>
+ <p>This function is called by a <c>gen_server</c> process in the
+ following situations:</p>
+ <list type="bulleted">
+ <item>
+ <p>One of <seealso marker="sys#get_status/1">
+ <c>sys:get_status/1,2</c></seealso>
+ is invoked to get the <c>gen_server</c> status. <c>Opt</c> is set
+ to the atom <c>normal</c>.</p>
+ </item>
+ <item>
+ <p>The <c>gen_server</c> process terminates abnormally and logs an
+ error. <c>Opt</c> is set to the atom <c>terminate</c>.</p>
+ </item>
+ </list>
+ <p>This function is useful for changing the form and
+ appearance of the <c>gen_server</c> status for these cases. A
+ callback module wishing to change
+ the <c>sys:get_status/1,2</c> return value, as well as how
+ its status appears in termination error logs, exports an
+ instance of <c>format_status/2</c> that returns a term
+ describing the current status of the <c>gen_server</c> process.</p>
+ <p><c>PDict</c> is the current value of the process dictionary of
+ the <c>gen_server</c> process..</p>
+ <p><c>State</c> is the internal state of the <c>gen_server</c>
+ process.</p>
+ <p>The function is to return <c>Status</c>, a term that
+ changes the details of the current state and status of
+ the <c>gen_server</c> process. There are no restrictions on the
+ form <c>Status</c> can take, but for
+ the <c>sys:get_status/1,2</c> case (when <c>Opt</c>
+ is <c>normal</c>), the recommended form for
+ the <c>Status</c> value is <c>[{data, [{"State",
+ Term}]}]</c>, where <c>Term</c> provides relevant details of
+ the <c>gen_server</c> state. Following this recommendation is not
+ required, but it makes the callback module status
+ consistent with the rest of the <c>sys:get_status/1,2</c>
+ return value.</p>
+ <p>One use for this function is to return compact alternative
+ state representations to avoid that large state terms are
+ printed in log files.</p>
+ </desc>
+ </func>
+
<func>
<name>Module:handle_call(Request, From, State) -> Result</name>
<fsummary>Handle a synchronous request.</fsummary>
@@ -493,9 +601,9 @@ gen_server:abcast -----> Module:handle_cast/2
<v>From = {pid(),Tag}</v>
<v>State = term()</v>
<v>Result = {reply,Reply,NewState} | {reply,Reply,NewState,Timeout}</v>
- <v>&nbsp;&nbsp;| {reply,Reply,NewState,hibernate}</v>
+ <v>&nbsp;&nbsp;| {reply,Reply,NewState,hibernate}</v>
<v>&nbsp;&nbsp;| {noreply,NewState} | {noreply,NewState,Timeout}</v>
- <v>&nbsp;&nbsp;| {noreply,NewState,hibernate}</v>
+ <v>&nbsp;&nbsp;| {noreply,NewState,hibernate}</v>
<v>&nbsp;&nbsp;| {stop,Reason,Reply,NewState} | {stop,Reason,NewState}</v>
<v>&nbsp;Reply = term()</v>
<v>&nbsp;NewState = term()</v>
@@ -503,38 +611,52 @@ gen_server:abcast -----> Module:handle_cast/2
<v>&nbsp;Reason = term()</v>
</type>
<desc>
- <p>Whenever a gen_server receives a request sent using
- <seealso marker="#call/2">gen_server:call/2,3</seealso> or
- <seealso marker="#multi_call/2">gen_server:multi_call/2,3,4</seealso>,
+ <p>Whenever a <c>gen_server</c> process receives a request sent using
+ <seealso marker="#call/2"><c>call/2,3</c></seealso> or
+ <seealso marker="#multi_call/2"><c>multi_call/2,3,4</c></seealso>,
this function is called to handle the request.</p>
<p><c>Request</c> is the <c>Request</c> argument provided
to <c>call</c> or <c>multi_call</c>.</p>
- <p><c>From</c> is a tuple <c>{Pid,Tag}</c> where <c>Pid</c> is
+ <p><c>From</c> is a tuple <c>{Pid,Tag}</c>, where <c>Pid</c> is
the pid of the client and <c>Tag</c> is a unique tag.</p>
- <p><c>State</c> is the internal state of the gen_server.</p>
- <p>If the function returns <c>{reply,Reply,NewState}</c>,
- <c>{reply,Reply,NewState,Timeout}</c> or
- <c>{reply,Reply,NewState,hibernate}</c>, <c>Reply</c> will be
- given back to <c>From</c> as the return value of
- <c>call/2,3</c> or included in the return value of
- <c>multi_call/2,3,4</c>. The gen_server then continues
- executing with the possibly updated internal state
- <c>NewState</c>. See <c>Module:init/1</c> for a description
- of <c>Timeout</c> and <c>hibernate</c>.</p>
- <p>If the functions returns <c>{noreply,NewState}</c>,
- <c>{noreply,NewState,Timeout}</c> or <c>{noreply,NewState,hibernate}</c>,
- the gen_server will
- continue executing with <c>NewState</c>. Any reply to
- <c>From</c> must be given explicitly using
- <seealso marker="#reply/2">gen_server:reply/2</seealso>.</p>
- <p>If the function returns <c>{stop,Reason,Reply,NewState}</c>,
- <c>Reply</c> will be given back to <c>From</c>. If
- the function returns <c>{stop,Reason,NewState}</c>, any reply
- to <c>From</c> must be given explicitly using
- <c>gen_server:reply/2</c>. The gen_server will then call
- <c>Module:terminate(Reason,NewState)</c> and terminate.</p>
+ <p><c>State</c> is the internal state of the <c>gen_server</c>
+ process.</p>
+ <list type="bulleted">
+ <item>
+ <p>If <c>{reply,Reply,NewState}</c> is returned,
+ <c>{reply,Reply,NewState,Timeout}</c> or
+ <c>{reply,Reply,NewState,hibernate}</c>, <c>Reply</c> is
+ given back to <c>From</c> as the return value of
+ <c>call/2,3</c> or included in the return value of
+ <c>multi_call/2,3,4</c>. The <c>gen_server</c> process then
+ continues executing with the possibly updated internal state
+ <c>NewState</c>.</p>
+ <p>For a description of <c>Timeout</c> and <c>hibernate</c>, see
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>.</p>
+ </item>
+ <item>
+ <p>If <c>{noreply,NewState}</c> is returned,
+ <c>{noreply,NewState,Timeout}</c>, or
+ <c>{noreply,NewState,hibernate}</c>, the <c>gen_server</c>
+ process continues executing with <c>NewState</c>. Any reply to
+ <c>From</c> must be specified explicitly using
+ <seealso marker="#reply/2"><c>reply/2</c></seealso>.</p>
+ </item>
+ <item>
+ <p>If <c>{stop,Reason,Reply,NewState}</c> is returned,
+ <c>Reply</c> is given back to <c>From</c>.</p>
+ </item>
+ <item>
+ <p>If <c>{stop,Reason,NewState}</c> is returned, any reply
+ to <c>From</c> must be specified explicitly using
+ <seealso marker="#reply/2"><c>reply/2</c></seealso>.
+ The <c>gen_server</c> process then calls
+ <c>Module:terminate(Reason,NewState)</c> and terminates.</p>
+ </item>
+ </list>
</desc>
</func>
+
<func>
<name>Module:handle_cast(Request, State) -> Result</name>
<fsummary>Handle an asynchronous request.</fsummary>
@@ -549,37 +671,82 @@ gen_server:abcast -----> Module:handle_cast/2
<v>&nbsp;Reason = term()</v>
</type>
<desc>
- <p>Whenever a gen_server receives a request sent using
- <seealso marker="#cast/2">gen_server:cast/2</seealso> or
- <seealso marker="#abcast/2">gen_server:abcast/2,3</seealso>,
+ <p>Whenever a <c>gen_server</c> process receives a request sent using
+ <seealso marker="#cast/2"><c>cast/2</c></seealso> or
+ <seealso marker="#abcast/2"><c>abcast/2,3</c></seealso>,
this function is called to handle the request.</p>
- <p>See <c>Module:handle_call/3</c> for a description of
- the arguments and possible return values.</p>
+ <p>For a description of the arguments and possible return values, see
+ <seealso marker="#Module:handle_call/3">
+ <c>Module:handle_call/3</c></seealso>.</p>
</desc>
</func>
+
<func>
<name>Module:handle_info(Info, State) -> Result</name>
<fsummary>Handle an incoming message.</fsummary>
<type>
<v>Info = timeout | term()</v>
<v>State = term()</v>
- <v>Result = {noreply,NewState} | {noreply,NewState,Timeout} </v>
- <v>&nbsp;&nbsp;| {noreply,NewState,hibernate}</v>
+ <v>Result = {noreply,NewState} | {noreply,NewState,Timeout}</v>
+ <v>&nbsp;&nbsp;| {noreply,NewState,hibernate}</v>
<v>&nbsp;&nbsp;| {stop,Reason,NewState}</v>
<v>&nbsp;NewState = term()</v>
<v>&nbsp;Timeout = int()>=0 | infinity</v>
<v>&nbsp;Reason = normal | term()</v>
</type>
<desc>
- <p>This function is called by a gen_server when a timeout
- occurs or when it receives any other message than a
+ <p>This function is called by a <c>gen_server</c> process when a
+ time-out occurs or when it receives any other message than a
synchronous or asynchronous request (or a system message).</p>
- <p><c>Info</c> is either the atom <c>timeout</c>, if a timeout
+ <p><c>Info</c> is either the atom <c>timeout</c>, if a time-out
has occurred, or the received message.</p>
- <p>See <c>Module:handle_call/3</c> for a description of
- the other arguments and possible return values.</p>
+ <p>For a description of the other arguments and possible return values,
+ see <seealso marker="#Module:handle_call/3">
+ <c>Module:handle_call/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:init(Args) -> Result</name>
+ <fsummary>Initialize process and internal state.</fsummary>
+ <type>
+ <v>Args = term()</v>
+ <v>Result = {ok,State} | {ok,State,Timeout} | {ok,State,hibernate}</v>
+ <v>&nbsp;| {stop,Reason} | ignore</v>
+ <v>&nbsp;State = term()</v>
+ <v>&nbsp;Timeout = int()>=0 | infinity</v>
+ <v>&nbsp;Reason = term()</v>
+ </type>
+ <desc>
+ <p>Whenever a <c>gen_server</c> process is started using
+ <seealso marker="#start/3"><c>start/3,4</c></seealso> or
+ <seealso marker="#start_link/3"><c>start_link/3,4</c></seealso>,
+ this function is called by the new process to initialize.</p>
+ <p><c>Args</c> is the <c>Args</c> argument provided to the start
+ function.</p>
+ <p>If the initialization is successful, the function is to
+ return <c>{ok,State}</c>, <c>{ok,State,Timeout}</c>, or
+ <c>{ok,State,hibernate}</c>, where <c>State</c> is the internal
+ state of the <c>gen_server</c> process.</p>
+ <p>If an integer time-out value is provided, a time-out occurs
+ unless a request or a message is received within
+ <c>Timeout</c> milliseconds. A time-out is represented by
+ the atom <c>timeout</c>, which is to be handled by the
+ <seealso marker="#Module:handle_info/2">
+ <c>Module:handle_info/2</c></seealso> callback function. The atom
+ <c>infinity</c> can be used to wait indefinitely, this is
+ the default value.</p>
+ <p>If <c>hibernate</c> is specified instead of a time-out value,
+ the process goes into
+ hibernation when waiting for the next message to arrive (by calling
+ <seealso marker="proc_lib#hibernate/3">
+ <c>proc_lib:hibernate/3</c></seealso>).</p>
+ <p>If the initialization fails, the function is to return
+ <c>{stop,Reason}</c>, where <c>Reason</c> is any term, or
+ <c>ignore</c>.</p>
</desc>
</func>
+
<func>
<name>Module:terminate(Reason, State)</name>
<fsummary>Clean up before termination.</fsummary>
@@ -588,137 +755,57 @@ gen_server:abcast -----> Module:handle_cast/2
<v>State = term()</v>
</type>
<desc>
- <p>This function is called by a gen_server when it is about to
- terminate. It should be the opposite of <c>Module:init/1</c>
+ <p>This function is called by a <c>gen_server</c> process when it is
+ about to terminate. It is to be the opposite of
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>
and do any necessary cleaning up. When it returns,
- the gen_server terminates with <c>Reason</c>. The return
- value is ignored.</p>
- <p><c>Reason</c> is a term denoting the stop reason and
- <c>State</c> is the internal state of the gen_server.</p>
- <p><c>Reason</c> depends on why the gen_server is terminating.
- If it is because another callback function has returned a
- stop tuple <c>{stop,..}</c>, <c>Reason</c> will have
- the value specified in that tuple. If it is due to a failure,
+ the <c>gen_server</c> process terminates with <c>Reason</c>.
+ The return value is ignored.</p>
+ <p><c>Reason</c> is a term denoting the stop reason and <c>State</c>
+ is the internal state of the <c>gen_server</c> process.</p>
+ <p><c>Reason</c> depends on why the <c>gen_server</c> process is
+ terminating. If it is because another callback function has returned
+ a stop tuple <c>{stop,..}</c>, <c>Reason</c> has
+ the value specified in that tuple. If it is because of a failure,
<c>Reason</c> is the error reason.</p>
- <p>If the gen_server is part of a supervision tree and is
- ordered by its supervisor to terminate, this function will be
+ <p>If the <c>gen_server</c> process is part of a supervision tree and
+ is ordered by its supervisor to terminate, this function is
called with <c>Reason=shutdown</c> if the following
conditions apply:</p>
<list type="bulleted">
- <item>the gen_server has been set to trap exit signals, and</item>
- <item>the shutdown strategy as defined in the supervisor's
- child specification is an integer timeout value, not
- <c>brutal_kill</c>.</item>
+ <item>
+ <p>The <c>gen_server</c> process has been set to trap exit
+ signals.</p>
+ </item>
+ <item>
+ <p>The shutdown strategy as defined in the child specification
+ of the supervisor is an integer time-out value, not
+ <c>brutal_kill</c>.</p>
+ </item>
</list>
- <p>Even if the gen_server is <em>not</em> part of a supervision tree,
- this function will be called if it receives an <c>'EXIT'</c>
- message from its parent. <c>Reason</c> will be the same as in
- the <c>'EXIT'</c> message.</p>
- <p>Otherwise, the gen_server will be immediately terminated.</p>
- <p>Note that for any other reason than <c>normal</c>,
- <c>shutdown</c>, or <c>{shutdown,Term}</c> the gen_server is
- assumed to terminate due to an error and
- an error report is issued using
- <seealso marker="kernel:error_logger#format/2">error_logger:format/2</seealso>.</p>
- </desc>
- </func>
- <func>
- <name>Module:code_change(OldVsn, State, Extra) -> {ok, NewState} | {error, Reason}</name>
- <fsummary>Update the internal state during upgrade/downgrade.</fsummary>
- <type>
- <v>OldVsn = Vsn | {down, Vsn}</v>
- <v>&nbsp;&nbsp;Vsn = term()</v>
- <v>State = NewState = term()</v>
- <v>Extra = term()</v>
- <v>Reason = term()</v>
- </type>
- <desc>
- <p>This function is called by a gen_server when it should
- update its internal state during a release upgrade/downgrade,
- i.e. when the instruction <c>{update,Module,Change,...}</c>
- where <c>Change={advanced,Extra}</c> is given in
- the <c>appup</c> file. See
- <seealso marker="doc/design_principles:release_handling#instr">OTP Design Principles</seealso>
- for more information.</p>
- <p>In the case of an upgrade, <c>OldVsn</c> is <c>Vsn</c>, and
- in the case of a downgrade, <c>OldVsn</c> is
- <c>{down,Vsn}</c>. <c>Vsn</c> is defined by the <c>vsn</c>
- attribute(s) of the old version of the callback module
- <c>Module</c>. If no such attribute is defined, the version
- is the checksum of the BEAM file.</p>
- <p><c>State</c> is the internal state of the gen_server.</p>
- <p><c>Extra</c> is passed as-is from the <c>{advanced,Extra}</c>
- part of the update instruction.</p>
- <p>If successful, the function shall return the updated
- internal state.</p>
- <p>If the function returns <c>{error,Reason}</c>, the ongoing
- upgrade will fail and roll back to the old release.</p>
- </desc>
- </func>
- <func>
- <name>Module:format_status(Opt, [PDict, State]) -> Status</name>
- <fsummary>Optional function for providing a term describing the
- current gen_server status.</fsummary>
- <type>
- <v>Opt = normal | terminate</v>
- <v>PDict = [{Key, Value}]</v>
- <v>State = term()</v>
- <v>Status = term()</v>
- </type>
- <desc>
- <note>
- <p>This callback is optional, so callback modules need not
- export it. The gen_server module provides a default
- implementation of this function that returns the callback
- module state.</p>
- </note>
- <p>This function is called by a gen_server process when:</p>
- <list type="bulleted">
- <item>One
- of <seealso marker="sys#get_status/1">sys:get_status/1,2</seealso>
- is invoked to get the gen_server status. <c>Opt</c> is set
- to the atom <c>normal</c> for this case.</item>
- <item>The gen_server terminates abnormally and logs an
- error. <c>Opt</c> is set to the atom <c>terminate</c> for this
- case.</item>
- </list>
- <p>This function is useful for customising the form and
- appearance of the gen_server status for these cases. A
- callback module wishing to customise
- the <c>sys:get_status/1,2</c> return value as well as how
- its status appears in termination error logs exports an
- instance of <c>format_status/2</c> that returns a term
- describing the current status of the gen_server.</p>
- <p><c>PDict</c> is the current value of the gen_server's
- process dictionary.</p>
- <p><c>State</c> is the internal state of the gen_server.</p>
- <p>The function should return <c>Status</c>, a term that
- customises the details of the current state and status of
- the gen_server. There are no restrictions on the
- form <c>Status</c> can take, but for
- the <c>sys:get_status/1,2</c> case (when <c>Opt</c>
- is <c>normal</c>), the recommended form for
- the <c>Status</c> value is <c>[{data, [{"State",
- Term}]}]</c> where <c>Term</c> provides relevant details of
- the gen_server state. Following this recommendation isn't
- required, but doing so will make the callback module status
- consistent with the rest of the <c>sys:get_status/1,2</c>
- return value.</p>
- <p>One use for this function is to return compact alternative
- state representations to avoid having large state terms
- printed in logfiles.</p>
+ <p>Even if the <c>gen_server</c> process is <em>not</em> part of a
+ supervision tree, this function is called if it receives an
+ <c>'EXIT'</c> message from its parent. <c>Reason</c> is the same
+ as in the <c>'EXIT'</c> message.</p>
+ <p>Otherwise, the <c>gen_server</c> process terminates immediately.</p>
+ <p>Notice that for any other reason than <c>normal</c>,
+ <c>shutdown</c>, or <c>{shutdown,Term}</c>, the <c>gen_server</c>
+ process is assumed to terminate because of an error and
+ an error report is issued using
+ <seealso marker="kernel:error_logger#format/2">
+ <c>error_logger:format/2</c></seealso>.</p>
</desc>
</func>
</funcs>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="gen_event">gen_event(3)</seealso>,
- <seealso marker="gen_fsm">gen_fsm(3)</seealso>,
- <seealso marker="gen_statem">gen_statem(3)</seealso>,
- <seealso marker="supervisor">supervisor(3)</seealso>,
- <seealso marker="proc_lib">proc_lib(3)</seealso>,
- <seealso marker="sys">sys(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="gen_event"><c>gen_event(3)</c></seealso>,
+ <seealso marker="gen_fsm"><c>gen_fsm(3)</c></seealso>,
+ <seealso marker="gen_statem"><c>gen_statem(3)</c></seealso>,
+ <seealso marker="proc_lib"><c>proc_lib(3)</c></seealso>,
+ <seealso marker="supervisor"><c>supervisor(3)</c></seealso>,
+ <seealso marker="sys"><c>sys(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/gen_statem.xml b/lib/stdlib/doc/src/gen_statem.xml
index 0e7d6e53e9..3322571b2c 100644
--- a/lib/stdlib/doc/src/gen_statem.xml
+++ b/lib/stdlib/doc/src/gen_statem.xml
@@ -97,6 +97,9 @@ gen_statem module Callback module
gen_statem:start
gen_statem:start_link -----> Module:init/1
+Server start or code change
+ -----> Module:callback_mode/0
+
gen_statem:stop -----> Module:terminate/3
gen_statem:call
@@ -116,9 +119,11 @@ erlang:'!' -----> Module:StateName/3
</p>
<p>
If a callback function fails or returns a bad value,
- the <c>gen_statem</c> terminates. However, an exception of class
+ the <c>gen_statem</c> terminates, unless otherwise stated.
+ However, an exception of class
<seealso marker="erts:erlang#throw/1"><c>throw</c></seealso>
- is not regarded as an error but as a valid return.
+ is not regarded as an error but as a valid return
+ from all callback functions.
</p>
<marker id="state_function"/>
<p>
@@ -127,7 +132,8 @@ erlang:'!' -----> Module:StateName/3
in a <c>gen_statem</c> is the callback function that is called
for all events in this state. It is selected depending on which
<seealso marker="#type-callback_mode"><em>callback mode</em></seealso>
- that the implementation specifies when the server starts.
+ that the callback module defines with the callback function
+ <seealso marker="#Module:callback_mode/0"><c>Module:callback_mode/0</c></seealso>.
</p>
<p>
When the
@@ -138,9 +144,9 @@ erlang:'!' -----> Module:StateName/3
This gathers all code for a specific state
in one function as the <c>gen_statem</c> engine
branches depending on state name.
- Notice that in this mode the mandatory callback function
+ Notice the fact that there is a mandatory callback function
<seealso marker="#Module:terminate/3"><c>Module:terminate/3</c></seealso>
- makes the state name <c>terminate</c> unusable.
+ makes the state name <c>terminate</c> unusable in this mode.
</p>
<p>
When the
@@ -249,11 +255,10 @@ erlang:'!' -----> Module:StateName/3
-behaviour(gen_statem).
-export([start/0,push/0,get_count/0,stop/0]).
--export([terminate/3,code_change/4,init/1]).
+-export([terminate/3,code_change/4,init/1,callback_mode/0]).
-export([on/3,off/3]).
name() -> pushbutton_statem. % The registered server name
-callback_mode() -> state_functions.
%% API. This example uses a registered name name()
%% and does not link to the caller.
@@ -270,15 +275,14 @@ stop() ->
terminate(_Reason, _State, _Data) ->
void.
code_change(_Vsn, State, Data, _Extra) ->
- {callback_mode(),State,Data}.
+ {ok,State,Data}.
init([]) ->
- %% Set the callback mode and initial state + data.
- %% Data is used only as a counter.
+ %% Set the initial state + data. Data is used only as a counter.
State = off, Data = 0,
- {callback_mode(),State,Data}.
-
+ {ok,State,Data}.
+callback_mode() -> state_functions.
-%%% State functions
+%%% State function(s)
off({call,From}, push, Data) ->
%% Go to 'on', increment count and reply
@@ -326,18 +330,13 @@ ok
To compare styles, here follows the same example using
<seealso marker="#type-callback_mode"><em>callback mode</em></seealso>
<c>state_functions</c>, or rather the code to replace
- from function <c>init/1</c> of the <c>pushbutton.erl</c>
+ after function <c>init/1</c> of the <c>pushbutton.erl</c>
example file above:
</p>
<code type="erl">
-init([]) ->
- %% Set the callback mode and initial state + data.
- %% Data is used only as a counter.
- State = off, Data = 0,
- {handle_event_function,State,Data}.
-
+callback_mode() -> handle_event_function.
-%%% Event handling
+%%% State function(s)
handle_event({call,From}, push, off, Data) ->
%% Go to 'on', increment count and reply
@@ -400,7 +399,7 @@ handle_event(_, _, State, Data) ->
<item>
<p>
The <c>gen_statem</c> is globally registered in
- <seealso marker="kernel:global"><c>kernel:global</c></seealso>.
+ <seealso marker="kernel:global"><c>global</c></seealso>.
</p>
</item>
<tag><c>{via,RegMod,ViaName}</c></tag>
@@ -413,7 +412,7 @@ handle_event(_, _, State, Data) ->
<c>register_name/2</c>, <c>unregister_name/1</c>,
<c>whereis_name/1</c>, and <c>send/2</c>,
which are to behave like the corresponding functions in
- <seealso marker="kernel:global"><c>kernel:global</c></seealso>.
+ <seealso marker="kernel:global"><c>global</c></seealso>.
Thus, <c>{via,global,GlobalName}</c> is the same as
<c>{global,GlobalName}</c>.
</p>
@@ -426,8 +425,8 @@ handle_event(_, _, State, Data) ->
<desc>
<p>
Debug option that can be used when starting
- a <c>gen_statem</c> server through, for example,
- <seealso marker="#enter_loop/5"><c>enter_loop/5</c></seealso>.
+ a <c>gen_statem</c> server through,
+ <seealso marker="#enter_loop/4"><c>enter_loop/4-6</c></seealso>.
</p>
<p>
For every entry in <c><anno>Dbgs</anno></c>,
@@ -525,12 +524,9 @@ handle_event(_, _, State, Data) ->
<desc>
<p>
The <em>callback mode</em> is selected when starting the
- <c>gen_statem</c> using the return value from
- <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>
- or when calling
- <seealso marker="#enter_loop/5"><c>enter_loop/5,6,7</c></seealso>,
- and with the return value from
- <seealso marker="#Module:code_change/4"><c>Module:code_change/4</c></seealso>.
+ <c>gen_statem</c> and after code change
+ using the return value from
+ <seealso marker="#Module:callback_mode/0"><c>Module:callback_mode/0</c></seealso>.
</p>
<taglist>
<tag><c>state_functions</c></tag>
@@ -691,7 +687,7 @@ handle_event(_, _, State, Data) ->
<seealso marker="#state_function">state function</seealso>, from
<seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>
or by giving them to
- <seealso marker="#enter_loop/6"><c>enter_loop/6,7</c></seealso>.
+ <seealso marker="#enter_loop/5"><c>enter_loop/5,6</c></seealso>.
</p>
<p>
Actions are executed in the containing list order.
@@ -923,7 +919,8 @@ handle_event(_, _, State, Data) ->
</p>
<note>
<p>
- To avoid getting a late reply in the caller's
+ For <c><anno>Timeout</anno> =/= infinity</c>,
+ to avoid getting a late reply in the caller's
inbox, this function spawns a proxy process that
does the call. A late reply gets delivered to the
dead proxy process, hence gets discarded. This is
@@ -958,35 +955,36 @@ handle_event(_, _, State, Data) ->
</func>
<func>
- <name name="enter_loop" arity="5"/>
+ <name name="enter_loop" arity="4"/>
<fsummary>Enter the <c>gen_statem</c> receive loop.</fsummary>
<desc>
<p>
The same as
- <seealso marker="#enter_loop/7"><c>enter_loop/7</c></seealso>
- except that no
+ <seealso marker="#enter_loop/6"><c>enter_loop/6</c></seealso>
+ with <c>Actions = []</c> except that no
<seealso marker="#type-server_name"><c>server_name()</c></seealso>
- must have been registered.
+ must have been registered. This creates an anonymous server.
</p>
</desc>
</func>
<func>
- <name name="enter_loop" arity="6"/>
+ <name name="enter_loop" arity="5"/>
<fsummary>Enter the <c>gen_statem</c> receive loop.</fsummary>
<desc>
<p>
If <c><anno>Server_or_Actions</anno></c> is a <c>list()</c>,
the same as
- <seealso marker="#enter_loop/7"><c>enter_loop/7</c></seealso>
+ <seealso marker="#enter_loop/6"><c>enter_loop/6</c></seealso>
except that no
<seealso marker="#type-server_name"><c>server_name()</c></seealso>
must have been registered and
<c>Actions = <anno>Server_or_Actions</anno></c>.
+ This creates an anonymous server.
</p>
<p>
Otherwise the same as
- <seealso marker="#enter_loop/7"><c>enter_loop/7</c></seealso>
+ <seealso marker="#enter_loop/6"><c>enter_loop/6</c></seealso>
with
<c>Server = <anno>Server_or_Actions</anno></c> and
<c>Actions = []</c>.
@@ -995,7 +993,7 @@ handle_event(_, _, State, Data) ->
</func>
<func>
- <name name="enter_loop" arity="7"/>
+ <name name="enter_loop" arity="6"/>
<fsummary>Enter the <c>gen_statem</c> receive loop.</fsummary>
<desc>
<p>
@@ -1015,21 +1013,31 @@ handle_event(_, _, State, Data) ->
the <c>gen_statem</c> behavior provides.
</p>
<p>
- <c><anno>Module</anno></c>, <c><anno>Opts</anno></c>, and
- <c><anno>Server</anno></c> have the same meanings
- as when calling
+ <c><anno>Module</anno></c>, <c><anno>Opts</anno></c>
+ have the same meaning as when calling
<seealso marker="#start_link/3"><c>start[_link]/3,4</c></seealso>.
+ </p>
+ <p>
+ If <c><anno>Server</anno></c> is <c>self()</c> an anonymous
+ server is created just as when using
+ <seealso marker="#start_link/3"><c>start[_link]/3</c></seealso>.
+ If <c><anno>Server</anno></c> is a
+ <seealso marker="#type-server_name"><c>server_name()</c></seealso>
+ a named server is created just as when using
+ <seealso marker="#start_link/4"><c>start[_link]/4</c></seealso>.
However, the
<seealso marker="#type-server_name"><c>server_name()</c></seealso>
name must have been registered accordingly
- <em>before</em> this function is called.</p>
+ <em>before</em> this function is called.
+ </p>
<p>
- <c><anno>CallbackMode</anno></c>, <c><anno>State</anno></c>,
- <c><anno>Data</anno></c>, and <c><anno>Actions</anno></c>
+ <c><anno>State</anno></c>, <c><anno>Data</anno></c>,
+ and <c><anno>Actions</anno></c>
have the same meanings as in the return value of
<seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>.
- Also, the callback module <c><anno>Module</anno></c>
- does not need to export an <c>init/1</c> function.
+ Also, the callback module does not need to export a
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>
+ function.
</p>
<p>
The function fails if the calling process was not started by a
@@ -1253,6 +1261,48 @@ handle_event(_, _, State, Data) ->
<funcs>
<func>
+ <name>Module:callback_mode() -> CallbackMode</name>
+ <fsummary>Update the internal state during upgrade/downgrade.</fsummary>
+ <type>
+ <v>
+ CallbackMode =
+ <seealso marker="#type-callback_mode">callback_mode()</seealso>
+ </v>
+ </type>
+ <desc>
+ <p>
+ This function is called by a <c>gen_statem</c>
+ when it needs to find out the
+ <seealso marker="#type-callback_mode"><em>callback mode</em></seealso>
+ of the callback module. The value is cached by <c>gen_statem</c>
+ for efficiency reasons, so this function is only called
+ once after server start and after code change,
+ but before the first
+ <seealso marker="#state_function">state function</seealso>
+ is called. More occasions may be added in future versions
+ of <c>gen_statem</c>.
+ </p>
+ <p>
+ Server start happens either when
+ <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso>
+ returns or when
+ <seealso marker="#enter_loop/4"><c>enter_loop/4-6</c></seealso>
+ is called. Code change happens when
+ <seealso marker="#Module:code_change/4"><c>Module:code_change/4</c></seealso>
+ returns.
+ </p>
+ <note>
+ <p>
+ If this function's body does not consist of solely one of two
+ possible
+ <seealso marker="#type-callback_mode">atoms</seealso>
+ the callback module is doing something strange.
+ </p>
+ </note>
+ </desc>
+ </func>
+
+ <func>
<name>Module:code_change(OldVsn, OldState, OldData, Extra) ->
Result
</name>
@@ -1262,11 +1312,7 @@ handle_event(_, _, State, Data) ->
<v>&nbsp;&nbsp;Vsn = term()</v>
<v>OldState = NewState = term()</v>
<v>Extra = term()</v>
- <v>Result = {NewCallbackMode,NewState,NewData} | Reason</v>
- <v>
- NewCallbackMode =
- <seealso marker="#type-callback_mode">callback_mode()</seealso>
- </v>
+ <v>Result = {ok,NewState,NewData} | Reason</v>
<v>
OldState = NewState =
<seealso marker="#type-state">state()</seealso>
@@ -1295,21 +1341,6 @@ handle_event(_, _, State, Data) ->
<c>Module</c>. If no such attribute is defined, the version
is the checksum of the Beam file.
</p>
- <note>
- <p>
- If you would dare to change
- <seealso marker="#type-callback_mode"><em>callback mode</em></seealso>
- during release upgrade/downgrade, the upgrade is no problem,
- as the new code surely knows what <em>callback mode</em>
- it needs. However, for a downgrade this function must
- know from argument <c>Extra</c> that comes from the
- <seealso marker="sasl:appup"><c>sasl:appup</c></seealso>
- file what <em>callback mode</em> the old code did use.
- It can also be possible to figure this out
- from argument <c>{down,Vsn}</c>, as <c>Vsn</c>
- in effect defines the old callback module version.
- </p>
- </note>
<p>
<c>OldState</c> and <c>OldData</c> is the internal state
of the <c>gen_statem</c>.
@@ -1321,31 +1352,32 @@ handle_event(_, _, State, Data) ->
<p>
If successful, the function must return the updated
internal state in an
- <c>{NewCallbackMode,NewState,NewData}</c> tuple.
+ <c>{ok,NewState,NewData}</c> tuple.
</p>
<p>
- If the function returns <c>Reason</c>, the ongoing
- upgrade fails and rolls back to the old release.</p>
- <p>
- This function can use
- <seealso marker="erts:erlang#throw/1"><c>erlang:throw/1</c></seealso>
- to return <c>Result</c> or <c>Reason</c>.
+ If the function returns a failure <c>Reason</c>, the ongoing
+ upgrade fails and rolls back to the old release.
+ Note that <c>Reason</c> can not be an <c>{ok,_,_}</c> tuple
+ since that will be regarded as a
+ <c>{ok,NewState,NewData}</c> tuple,
+ and that a tuple matching <c>{ok,_}</c>
+ is an also invalid failure <c>Reason</c>.
+ It is recommended to use an atom as <c>Reason</c> since
+ it will be wrapped in an <c>{error,Reason}</c> tuple.
</p>
</desc>
</func>
<func>
<name>Module:init(Args) -> Result</name>
- <fsummary>Initialize process and internal state.</fsummary>
+ <fsummary>
+ Optional function for initializing process and internal state.
+ </fsummary>
<type>
<v>Args = term()</v>
- <v>Result = {CallbackMode,State,Data}</v>
- <v>&nbsp;| {CallbackMode,State,Data,Actions}</v>
+ <v>Result = {ok,State,Data}</v>
+ <v>&nbsp;| {ok,State,Data,Actions}</v>
<v>&nbsp;| {stop,Reason} | ignore</v>
- <v>
- CallbackMode =
- <seealso marker="#type-callback_mode">callback_mode()</seealso>
- </v>
<v>State = <seealso marker="#type-state">state()</seealso></v>
<v>
Data = <seealso marker="#type-data">data()</seealso>
@@ -1364,7 +1396,7 @@ handle_event(_, _, State, Data) ->
<seealso marker="#start_link/3"><c>start_link/3,4</c></seealso>
or
<seealso marker="#start/3"><c>start/3,4</c></seealso>,
- this function is called by the new process to initialize
+ this optional function is called by the new process to initialize
the implementation state and server data.
</p>
<p>
@@ -1373,11 +1405,8 @@ handle_event(_, _, State, Data) ->
</p>
<p>
If the initialization is successful, the function is to
- return <c>{CallbackMode,State,Data}</c> or
- <c>{CallbackMode,State,Data,Actions}</c>.
- <c>CallbackMode</c> selects the
- <seealso marker="#type-callback_mode"><em>callback mode</em></seealso>
- of the <c>gen_statem</c>.
+ return <c>{ok,State,Data}</c> or
+ <c>{ok,State,Data,Actions}</c>.
<c>State</c> is the initial
<seealso marker="#type-state"><c>state()</c></seealso>
and <c>Data</c> the initial server
@@ -1395,11 +1424,16 @@ handle_event(_, _, State, Data) ->
or <c>ignore</c>; see
<seealso marker="#start_link/3"><c>start_link/3,4</c></seealso>.
</p>
- <p>
- This function can use
- <seealso marker="erts:erlang#throw/1"><c>erlang:throw/1</c></seealso>
- to return <c>Result</c>.
- </p>
+ <note>
+ <p>
+ This callback is optional, so a callback module does not need
+ to export it, but most do. If this function is not exported,
+ the <c>gen_statem</c> should be started through
+ <seealso marker="proc_lib"><c>proc_lib</c></seealso>
+ and
+ <seealso marker="#enter_loop/4"><c>enter_loop/4-6</c></seealso>.
+ </p>
+ </note>
</desc>
</func>
@@ -1430,10 +1464,14 @@ handle_event(_, _, State, Data) ->
This callback is optional, so a callback module does not need
to export it. The <c>gen_statem</c> module provides a default
implementation of this function that returns
- <c>{State,Data}</c>. If this callback fails, the default
- function returns <c>{State,Info}</c>,
- where <c>Info</c> informs of the crash but no details,
- to hide possibly sensitive data.
+ <c>{State,Data}</c>.
+ </p>
+ <p>
+ If this callback is exported but fails,
+ to hide possibly sensitive data,
+ the default function will instead return <c>{State,Info}</c>,
+ where <c>Info</c> says nothing but the fact that
+ <c>format_status/2</c> has crashed.
</p>
</note>
<p>This function is called by a <c>gen_statem</c> process when
@@ -1494,11 +1532,6 @@ handle_event(_, _, State, Data) ->
printed in log files. Another use is to hide sensitive data from
being written to the error log.
</p>
- <p>
- This function can use
- <seealso marker="erts:erlang#throw/1"><c>erlang:throw/1</c></seealso>
- to return <c>Status</c>.
- </p>
</desc>
</func>
@@ -1573,9 +1606,12 @@ handle_event(_, _, State, Data) ->
see <seealso marker="#type-action"><c>action()</c></seealso>.
</p>
<p>
- These functions can use
- <seealso marker="erts:erlang#throw/1"><c>erlang:throw/1</c></seealso>,
- to return the result.
+ Note the fact that you can use
+ <seealso marker="erts:erlang#throw/1"><c>throw</c></seealso>
+ to return the result, which can be useful.
+ For example to bail out with <c>throw(keep_state_and_data)</c>
+ from deep within complex code that is in no position to
+ return <c>{next_state,State,Data}</c>.
</p>
</desc>
</func>
@@ -1648,11 +1684,6 @@ handle_event(_, _, State, Data) ->
and an error report is issued using
<seealso marker="kernel:error_logger#format/2"><c>error_logger:format/2</c></seealso>.
</p>
- <p>
- This function can use
- <seealso marker="erts:erlang#throw/1"><c>erlang:throw/1</c></seealso>
- to return <c>Ignored</c>, which is ignored anyway.
- </p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/introduction.xml b/lib/stdlib/doc/src/introduction.xml
new file mode 100644
index 0000000000..5bf545c65f
--- /dev/null
+++ b/lib/stdlib/doc/src/introduction.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE chapter SYSTEM "chapter.dtd">
+
+<chapter>
+ <header>
+ <copyright>
+ <year>1999</year>
+ <year>2013</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ </legalnotice>
+
+ <title>Introduction</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date>2016-03-04</date>
+ <rev>PA1</rev>
+ <file>introduction.xml</file>
+ </header>
+
+ <section>
+ <title>Scope</title>
+ <p>The Standard Erlang Libraries application, <em>STDLIB</em>, is mandatory
+ in the sense that the minimal system based on Erlang/OTP consists of
+ <em>STDLIB</em> and <em>Kernel</em>.</p>
+
+ <p><em>STDLIB</em> contains the following functional areas:</p>
+
+ <list type="bulleted">
+ <item>Erlang shell</item>
+ <item>Command interface</item>
+ <item>Query interface</item>
+ <item>Interface to standard Erlang I/O servers</item>
+ <item>Interface to the Erlang built-in term storage BIFs</item>
+ <item>Regular expression matching functions for strings and binaries</item>
+ <item>Finite state machine</item>
+ <item>Event handling</item>
+ <item>Functions for the server of a client-server relation</item>
+ <item>Function to control applications in a distributed manner</item>
+ <item>Start and control of slave nodes</item>
+ <item>Operations on finite sets and relations represented as sets</item>
+ <item>Library for handling binary data</item>
+ <item>Disk-based term storage</item>
+ <item>List processing</item>
+ <item>Maps processing</item>
+ </list>
+ </section>
+
+ <section>
+ <title>Prerequisites</title>
+ <p>It is assumed that the reader is familiar with the Erlang programming
+ language.</p>
+ </section>
+</chapter>
+
+
diff --git a/lib/stdlib/doc/src/io.xml b/lib/stdlib/doc/src/io.xml
index 9ae50ed90c..11a64c7f8a 100644
--- a/lib/stdlib/doc/src/io.xml
+++ b/lib/stdlib/doc/src/io.xml
@@ -29,48 +29,50 @@
<rev></rev>
</header>
<module>io</module>
- <modulesummary>Standard I/O Server Interface Functions</modulesummary>
+ <modulesummary>Standard I/O server interface functions.</modulesummary>
<description>
<p>This module provides an interface to standard Erlang I/O servers.
The output functions all return <c>ok</c> if they are successful,
or exit if they are not.</p>
- <p>In the following description, all functions have an optional
+
+ <p>All functions in this module have an optional
parameter <c>IoDevice</c>. If included, it must be the pid of a
- process which handles the IO protocols. Normally, it is the
+ process that handles the I/O protocols. Normally, it is the
<c>IoDevice</c> returned by
- <seealso marker="kernel:file#open/2">file:open/2</seealso>.</p>
- <p>For a description of the IO protocols refer to the <seealso marker="io_protocol">STDLIB User's Guide</seealso>.</p>
- <warning>
-
- <p>As of R13A, data supplied to the <seealso
- marker="#put_chars/2">put_chars</seealso> function should be in the
- <seealso marker="unicode#type-chardata"><c>unicode:chardata()</c></seealso> format. This means that programs
- supplying binaries to this function need to convert them to UTF-8
- before trying to output the data on an IO device.</p>
-
- <p>If an IO device is set in binary mode, the functions <seealso
- marker="#get_chars/3">get_chars</seealso> and <seealso
- marker="#get_line/2">get_line</seealso> may return binaries
- instead of lists. The binaries will, as of R13A, be encoded in
- UTF-8.</p>
+ <seealso marker="kernel:file#open/2"><c>file:open/2</c></seealso>.</p>
- <p>To work with binaries in ISO-latin-1 encoding, use the <seealso
- marker="kernel:file">file</seealso> module instead.</p>
-
- <p>For conversion functions between character encodings, see the <seealso
- marker="stdlib:unicode">unicode</seealso> module.</p>
+ <p>For a description of the I/O protocols, see section
+ <seealso marker="io_protocol">The Erlang I/O Protocol</seealso>
+ in the User's Guide.</p>
+ <warning>
+ <p>As from Erlang/OTP R13A, data supplied to function
+ <seealso marker="#put_chars/2"><c>put_chars/2</c></seealso>
+ is to be in the <seealso marker="unicode#type-chardata">
+ <c>unicode:chardata()</c></seealso> format. This means that programs
+ supplying binaries to this function must convert them to UTF-8
+ before trying to output the data on an I/O device.</p>
+ <p>If an I/O device is set in binary mode, functions
+ <seealso marker="#get_chars/2"><c>get_chars/2,3</c></seealso> and
+ <seealso marker="#get_line/1"><c>get_line/1,2</c></seealso>
+ can return binaries instead of lists.
+ The binaries are, as from Erlang/OTP R13A,
+ encoded in UTF-8.</p>
+ <p>To work with binaries in ISO Latin-1 encoding, use the
+ <seealso marker="kernel:file"><c>file</c></seealso> module instead.</p>
+ <p>For conversion functions between character encodings, see the
+ <seealso marker="stdlib:unicode"><c>unicode</c></seealso> module.</p>
</warning>
-
</description>
<datatypes>
<datatype>
<name name="device"/>
<desc>
- <p>An IO device. Either <c>standard_io</c>, <c>standard_error</c>, a
- registered name, or a pid handling IO protocols (returned from
- <seealso marker="kernel:file#open/2">file:open/2</seealso>).</p>
+ <p>An I/O device, either <c>standard_io</c>, <c>standard_error</c>, a
+ registered name, or a pid handling I/O protocols (returned from
+ <seealso marker="kernel:file#open/2"><c>file:open/2</c></seealso>).
+ </p>
</desc>
</datatype>
<datatype>
@@ -96,7 +98,7 @@
</datatype>
<datatype>
<name name="server_no_data"/>
- <desc><p>What the I/O-server sends when there is no data.</p></desc>
+ <desc><p>What the I/O server sends when there is no data.</p></desc>
</datatype>
</datatypes>
@@ -104,329 +106,93 @@
<func>
<name name="columns" arity="0"/>
<name name="columns" arity="1"/>
- <fsummary>Get the number of columns of an IO device</fsummary>
- <desc>
- <p>Retrieves the number of columns of the
- <c><anno>IoDevice</anno></c> (i.e. the width of a terminal). The function
- only succeeds for terminal devices, for all other IO devices
- the function returns <c>{error, enotsup}</c></p>
- </desc>
- </func>
- <func>
- <name name="put_chars" arity="1"/>
- <name name="put_chars" arity="2"/>
- <fsummary>Write a list of characters</fsummary>
- <desc>
- <p>Writes the characters of <c><anno>CharData</anno></c> to the I/O server
- (<c><anno>IoDevice</anno></c>).</p>
- </desc>
- </func>
- <func>
- <name name="nl" arity="0"/>
- <name name="nl" arity="1"/>
- <fsummary>Write a newline</fsummary>
- <desc>
- <p>Writes new line to the standard output (<c><anno>IoDevice</anno></c>).</p>
- </desc>
- </func>
- <func>
- <name name="get_chars" arity="2"/>
- <name name="get_chars" arity="3"/>
- <fsummary>Read a specified number of characters</fsummary>
- <type name="server_no_data"/>
- <desc>
- <p>Reads <c><anno>Count</anno></c> characters from standard input
- (<c><anno>IoDevice</anno></c>), prompting it with <c><anno>Prompt</anno></c>. It
- returns:</p>
- <taglist>
- <tag><c><anno>Data</anno></c></tag>
- <item>
- <p>The input characters. If the IO device supports Unicode,
- the data may represent codepoints larger than 255 (the
- latin1 range). If the I/O server is set to deliver
- binaries, they will be encoded in UTF-8 (regardless of if
- the IO device actually supports Unicode or not).</p>
- </item>
- <tag><c>eof</c></tag>
- <item>
- <p>End of file was encountered.</p>
- </item>
- <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
- <item>
- <p>Other (rare) error condition, for instance <c>{error, estale}</c>
- if reading from an NFS file system.</p>
- </item>
- </taglist>
- </desc>
- </func>
- <func>
- <name name="get_line" arity="1"/>
- <name name="get_line" arity="2"/>
- <fsummary>Read a line</fsummary>
- <type name="server_no_data"/>
- <desc>
- <p>Reads a line from the standard input (<c><anno>IoDevice</anno></c>),
- prompting it with <c><anno>Prompt</anno></c>. It returns:</p>
- <taglist>
- <tag><c><anno>Data</anno></c></tag>
- <item>
- <p>The characters in the line terminated by a LF (or end of
- file). If the IO device supports Unicode,
- the data may represent codepoints larger than 255 (the
- latin1 range). If the I/O server is set to deliver
- binaries, they will be encoded in UTF-8 (regardless of if
- the IO device actually supports Unicode or not).</p>
- </item>
- <tag><c>eof</c></tag>
- <item>
- <p>End of file was encountered.</p>
- </item>
- <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
- <item>
- <p>Other (rare) error condition, for instance <c>{error, estale}</c>
- if reading from an NFS file system.</p>
- </item>
- </taglist>
- </desc>
- </func>
- <func>
- <name name="getopts" arity="0"/>
- <name name="getopts" arity="1"/>
- <fsummary>Get the supported options and values from an I/O-server</fsummary>
+ <fsummary>Get the number of columns of an I/O device.</fsummary>
<desc>
- <p>This function requests all available options and their current values for a specific IO device. Example:</p>
-<pre>
-1> <input>{ok,F} = file:open("/dev/null",[read]).</input>
-{ok,&lt;0.42.0&gt;}
-2> <input>io:getopts(F).</input>
-[{binary,false},{encoding,latin1}]</pre>
- <p>Here the file I/O-server returns all available options for a file,
- which are the expected ones, <c>encoding</c> and <c>binary</c>. The standard shell however has some more options:</p>
-<pre>
-3> io:getopts().
-[{expand_fun,#Fun&lt;group.0.120017273&gt;},
- {echo,true},
- {binary,false},
- {encoding,unicode}]</pre>
- <p>This example is, as can be seen, run in an environment where the terminal supports Unicode input and output.</p>
+ <p>Retrieves the number of columns of the
+ <c><anno>IoDevice</anno></c> (that is, the width of a terminal).
+ The function succeeds for terminal devices and returns
+ <c>{error, enotsup}</c> for all other I/O devices.</p>
</desc>
</func>
- <func>
- <name name="printable_range" arity="0"/>
- <fsummary>Get user requested printable character range</fsummary>
- <desc>
- <p>Return the user requested range of printable Unicode characters.</p>
- <p>The user can request a range of characters that are to be considered printable in heuristic detection of strings by the shell and by the formatting functions. This is done by supplying <c>+pc &lt;range&gt;</c> when starting Erlang.</p>
- <p>Currently the only valid values for <c>&lt;range&gt;</c> are <c>latin1</c> and <c>unicode</c>. <c>latin1</c> means that only code points below 256 (with the exception of control characters etc) will be considered printable. <c>unicode</c> means that all printable characters in all unicode character ranges are considered printable by the io functions.</p>
- <p>By default, Erlang is started so that only the <c>latin1</c> range of characters will indicate that a list of integers is a string.</p>
- <p>The simplest way to utilize the setting is to call <seealso marker="io_lib#printable_list/1">io_lib:printable_list/1</seealso>, which will use the return value of this function to decide if a list is a string of printable characters or not.</p>
- <note><p>In the future, this function may return more values and ranges. It is recommended to use the io_lib:printable_list/1 function to avoid compatibility problems.</p></note>
- </desc>
- </func>
- <func>
- <name name="setopts" arity="1"/>
- <name name="setopts" arity="2"/>
- <fsummary>Set options</fsummary>
- <desc>
- <p>Set options for the standard IO device (<c><anno>IoDevice</anno></c>).</p>
- <p>Possible options and values vary depending on the actual
- IO device. For a list of supported options and their current values
- on a specific IO device, use the <seealso
- marker="#getopts/1">getopts/1</seealso> function.</p>
-
- <p>The options and values supported by the current OTP IO devices are:</p>
- <taglist>
- <tag><c>binary, list or {binary, boolean()}</c></tag>
- <item>
- <p>If set in binary mode (<c>binary</c> or <c>{binary, true}</c>), the I/O server sends binary data (encoded in UTF-8) as answers to the <c>get_line</c>, <c>get_chars</c> and, if possible, <c>get_until</c> requests (see the I/O protocol description in <seealso marker="io_protocol">STDLIB User's Guide</seealso> for details). The immediate effect is that <c>get_chars/2,3</c> and <c>get_line/1,2</c> return UTF-8 binaries instead of lists of chars for the affected IO device.</p>
- <p>By default, all IO devices in OTP are set in list mode, but the I/O functions can handle any of these modes and so should other, user written, modules behaving as clients to I/O-servers.</p>
- <p>This option is supported by the standard shell (<c>group.erl</c>), the 'oldshell' (<c>user.erl</c>) and the file I/O servers.</p>
- </item>
- <tag><c>{echo, boolean()}</c></tag>
- <item>
- <p>Denotes if the terminal should echo input. Only supported for the standard shell I/O-server (<c>group.erl</c>)</p>
- </item>
- <tag><c>{expand_fun, expand_fun()}</c></tag>
- <item>
- <p>Provide a function for tab-completion (expansion)
- like the Erlang shell. This function is called
- when the user presses the TAB key. The expansion is
- active when calling line-reading functions such as
- <c>get_line/1,2</c>.</p>
- <p>The function is called with the current line, upto
- the cursor, as a reversed string. It should return a
- three-tuple: <c>{yes|no, string(), [string(), ...]}</c>. The
- first element gives a beep if <c>no</c>, otherwise the
- expansion is silent, the second is a string that will be
- entered at the cursor position, and the third is a list of
- possible expansions. If this list is non-empty, the list
- will be printed and the current input line will be written
- once again.</p>
- <p>Trivial example (beep on anything except empty line, which
- is expanded to <c>"quit"</c>):</p>
- <code type="none">
- fun("") -> {yes, "quit", []};
- (_) -> {no, "", ["quit"]} end</code>
- <p>This option is supported by the standard shell only (<c>group.erl</c>).</p>
- </item>
- <tag><c>{encoding, latin1 | unicode}</c></tag>
- <item>
- <p>Specifies how characters are input or output from or to the actual IO device, implying that i.e. a terminal is set to handle Unicode input and output or a file is set to handle UTF-8 data encoding.</p>
- <p>The option <em>does not</em> affect how data is returned from the I/O functions or how it is sent in the I/O-protocol, it only affects how the IO device is to handle Unicode characters towards the &quot;physical&quot; device.</p>
- <p>The standard shell will be set for either Unicode or latin1 encoding when the system is started. The actual encoding is set with the help of the <c>LANG</c> or <c>LC_CTYPE</c> environment variables on Unix-like system or by other means on other systems. The bottom line is that the user can input Unicode characters and the IO device will be in <c>{encoding, unicode}</c> mode if the IO device supports it. The mode can be changed, if the assumption of the runtime system is wrong, by setting this option.</p>
- <p>The IO device used when Erlang is started with the "-oldshell" or "-noshell" flags is by default set to latin1 encoding, meaning that any characters beyond codepoint 255 will be escaped and that input is expected to be plain 8-bit ISO-latin-1. If the encoding is changed to Unicode, input and output from the standard file descriptors will be in UTF-8 (regardless of operating system).</p>
- <p>Files can also be set in <c>{encoding, unicode}</c>, meaning that data is written and read as UTF-8. More encodings are possible for files, see below.</p>
- <p><c>{encoding, unicode | latin1}</c> is supported by both the standard shell (<c>group.erl</c> including <c>werl</c> on Windows&reg;), the 'oldshell' (<c>user.erl</c>) and the file I/O servers.</p>
- </item>
- <tag><c>{encoding, utf8 | utf16 | utf32 | {utf16,big} | {utf16,little} | {utf32,big} | {utf32,little}}</c></tag>
- <item>
- <p>For disk files, the encoding can be set to various UTF variants. This will have the effect that data is expected to be read as the specified encoding from the file and the data will be written in the specified encoding to the disk file.</p>
- <p><c>{encoding, utf8}</c> will have the same effect as <c>{encoding, unicode}</c> on files.</p>
- <p>The extended encodings are only supported on disk files (opened by the <seealso marker="kernel:file#open/2">file:open/2</seealso> function)</p>
- </item>
- </taglist>
- </desc>
- </func>
- <func>
- <name name="write" arity="1"/>
- <name name="write" arity="2"/>
- <fsummary>Write a term</fsummary>
- <desc>
- <p>Writes the term <c><anno>Term</anno></c> to the standard output
- (<c><anno>IoDevice</anno></c>).</p>
- </desc>
- </func>
<func>
- <name name="read" arity="1"/>
- <name name="read" arity="2"/>
- <fsummary>Read a term</fsummary>
- <type name="server_no_data"/>
- <desc>
- <p>Reads a term <c><anno>Term</anno></c> from the standard input
- (<c><anno>IoDevice</anno></c>), prompting it with <c><anno>Prompt</anno></c>. It
- returns:</p>
- <taglist>
- <tag><c>{ok, <anno>Term</anno>}</c></tag>
- <item>
- <p>The parsing was successful.</p>
- </item>
- <tag><c>eof</c></tag>
- <item>
- <p>End of file was encountered.</p>
- </item>
- <tag><c>{error, <anno>ErrorInfo</anno>}</c></tag>
- <item>
- <p>The parsing failed.</p>
- </item>
- <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
- <item>
- <p>Other (rare) error condition, for instance <c>{error, estale}</c>
- if reading from an NFS file system.</p>
- </item>
- </taglist>
- </desc>
- </func>
- <func>
- <name name="read" arity="3"/>
- <name name="read" arity="4"/>
- <fsummary>Read a term</fsummary>
- <type name="server_no_data"/>
- <desc>
- <p>Reads a term <c><anno>Term</anno></c> from <c><anno>IoDevice</anno></c>, prompting it
- with <c><anno>Prompt</anno></c>. Reading starts at location
- <c><anno>StartLocation</anno></c>. The argument
- <c><anno>Options</anno></c> is passed on as the <c>Options</c>
- argument of the <c>erl_scan:tokens/4</c> function. It returns:</p>
- <taglist>
- <tag><c>{ok, Term, <anno>EndLocation</anno>}</c></tag>
- <item>
- <p>The parsing was successful.</p>
- </item>
- <tag><c>{eof, <anno>EndLocation</anno>}</c></tag>
- <item>
- <p>End of file was encountered.</p>
- </item>
- <tag><c>{error, <anno>ErrorInfo</anno>, <anno>ErrorLocation</anno>}</c></tag>
- <item>
- <p>The parsing failed.</p>
- </item>
- <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
- <item>
- <p>Other (rare) error condition, for instance <c>{error, estale}</c>
- if reading from an NFS file system.</p>
- </item>
- </taglist>
- </desc>
- </func>
- <func>
- <name name="fwrite" arity="1"/>
- <name name="fwrite" arity="2"/>
- <name name="fwrite" arity="3"/>
<name name="format" arity="1"/>
<name name="format" arity="2"/>
<name name="format" arity="3"/>
- <fsummary>Write formatted output</fsummary>
+ <name name="fwrite" arity="1"/>
+ <name name="fwrite" arity="2"/>
+ <name name="fwrite" arity="3"/>
+ <fsummary>Write formatted output.</fsummary>
<desc>
- <p>Writes the items in <c><anno>Data</anno></c> (<c>[]</c>) on the standard
- output (<c><anno>IoDevice</anno></c>) in accordance with <c><anno>Format</anno></c>.
- <c><anno>Format</anno></c> contains plain characters which are copied to
+ <p>Writes the items in <c><anno>Data</anno></c> (<c>[]</c>) on the
+ standard output (<c><anno>IoDevice</anno></c>) in accordance with
+ <c><anno>Format</anno></c>. <c><anno>Format</anno></c> contains
+ plain characters that are copied to
the output device, and control sequences for formatting, see
- below. If <c><anno>Format</anno></c> is an atom or a binary, it is first
- converted to a list with the aid of <c>atom_to_list/1</c>
- or <c>binary_to_list/1</c>.</p>
+ below. If <c><anno>Format</anno></c> is an atom or a binary, it is
+ first converted to a list with the aid of <c>atom_to_list/1</c> or
+ <c>binary_to_list/1</c>. Example:</p>
<pre>
1> <input>io:fwrite("Hello world!~n", []).</input>
Hello world!
ok</pre>
- <p>The general format of a control sequence is <c>~F.P.PadModC</c>.
- The character <c>C</c> determines the type of control sequence
+ <p>The general format of a control sequence is <c>~F.P.PadModC</c>.</p>
+ <p>Character <c>C</c> determines the type of control sequence
to be used, <c>F</c> and <c>P</c> are optional numeric
arguments. If <c>F</c>, <c>P</c>, or <c>Pad</c> is <c>*</c>,
the next argument in <c>Data</c> is used as the numeric value
of <c>F</c> or <c>P</c>.</p>
- <p><c>F</c> is the <c>field width</c> of the printed argument. A
- negative value means that the argument will be left justified
- within the field, otherwise it will be right justified. If no
- field width is specified, the required print width will be
- used. If the field width specified is too small, then the
- whole field will be filled with <c>*</c> characters.</p>
- <p><c>P</c> is the <c>precision</c> of the printed argument. A
- default value is used if no precision is specified. The
- interpretation of precision depends on the control sequences.
- Unless otherwise specified, the argument <c>within</c> is used
- to determine print width.</p>
- <p><c>Pad</c> is the padding character. This is the character
- used to pad the printed representation of the argument so that
- it conforms to the specified field width and precision. Only
- one padding character can be specified and, whenever
- applicable, it is used for both the field width and precision.
- The default padding character is <c>' '</c> (space).</p>
- <p><c>Mod</c> is the control sequence modifier. It is either a
- single character (currently only <c>t</c>, for Unicode
- translation, and <c>l</c>, for stopping <c>p</c> and
- <c>P</c> from detecting printable characters, are supported)
- that changes the interpretation of Data.</p>
- <p>The following control sequences are available:</p>
+ <list type="bulleted">
+ <item>
+ <p><c>F</c> is the <c>field width</c> of the printed argument. A
+ negative value means that the argument is left-justified
+ within the field, otherwise right-justified. If no
+ field width is specified, the required print width is
+ used. If the field width specified is too small, the
+ whole field is filled with <c>*</c> characters.</p>
+ </item>
+ <item>
+ <p><c>P</c> is the <c>precision</c> of the printed argument. A
+ default value is used if no precision is specified. The
+ interpretation of precision depends on the control sequences.
+ Unless otherwise specified, argument <c>within</c> is used
+ to determine print width.</p>
+ </item>
+ <item>
+ <p><c>Pad</c> is the padding character. This is the character
+ used to pad the printed representation of the argument so that
+ it conforms to the specified field width and precision. Only
+ one padding character can be specified and, whenever
+ applicable, it is used for both the field width and precision.
+ The default padding character is <c>' '</c> (space).</p>
+ </item>
+ <item>
+ <p><c>Mod</c> is the control sequence modifier. It is either a
+ single character (<c>t</c>, for Unicode
+ translation, and <c>l</c>, for stopping <c>p</c> and
+ <c>P</c> from detecting printable characters)
+ that changes the interpretation of <c>Data</c>.</p>
+ </item>
+ </list>
+ <p><em>Available control sequences:</em></p>
<taglist>
<tag><c>~</c></tag>
<item>
- <p>The character <c>~</c> is written.</p>
+ <p>Character <c>~</c> is written.</p>
</item>
<tag><c>c</c></tag>
<item>
- <p>The argument is a number that will be interpreted as an
+ <p>The argument is a number that is interpreted as an
ASCII code. The precision is the number of times the
- character is printed and it defaults to the field width,
- which in turn defaults to 1. The following example
- illustrates:</p>
+ character is printed and defaults to the field width,
+ which in turn defaults to 1. Example:</p>
<pre>
1> <input>io:fwrite("|~10.5c|~-10.5c|~5c|~n", [$a, $b, $c]).</input>
| aaaaa|bbbbb |ccccc|
ok</pre>
<p>If the Unicode translation modifier (<c>t</c>) is in effect,
the integer argument can be any number representing a
- valid Unicode codepoint, otherwise it should be an integer
+ valid Unicode codepoint, otherwise it is to be an integer
less than or equal to 255, otherwise it is masked with 16#FF:</p>
<pre>
2> <input>io:fwrite("~tc~n",[1024]).</input>
@@ -435,29 +201,28 @@ ok
3> <input>io:fwrite("~c~n",[1024]).</input>
^@
ok</pre>
-
</item>
<tag><c>f</c></tag>
<item>
- <p>The argument is a float which is written as
+ <p>The argument is a float that is written as
<c>[-]ddd.ddd</c>, where the precision is the number of
digits after the decimal point. The default precision is 6
- and it cannot be less than 1.</p>
+ and it cannot be &lt; 1.</p>
</item>
<tag><c>e</c></tag>
<item>
- <p>The argument is a float which is written as
+ <p>The argument is a float that is written as
<c>[-]d.ddde+-ddd</c>, where the precision is the number
of digits written. The default precision is 6 and it
- cannot be less than 2.</p>
+ cannot be &lt; 2.</p>
</item>
<tag><c>g</c></tag>
<item>
- <p>The argument is a float which is written as <c>f</c>, if
+ <p>The argument is a float that is written as <c>f</c>, if
it is &gt;= 0.1 and &lt; 10000.0. Otherwise, it is written
in the <c>e</c> format. The precision is the number of
- significant digits. It defaults to 6 and should not be
- less than 2. If the absolute value of the float does not
+ significant digits. It defaults to 6 and is not to be
+ &lt; 2. If the absolute value of the float does not
allow it to be written in the <c>f</c> format with the
desired number of significant digits, it is also written
in the <c>e</c> format.</p>
@@ -471,8 +236,9 @@ ok</pre>
the argument is <c>unicode:chardata()</c>, meaning that
binaries are in UTF-8. The characters
are printed without quotes. The string is first truncated
- by the given precision and then padded and justified
- to the given field width. The default precision is the field width.</p>
+ by the specified precision and then padded and justified to the
+ specified field width. The default precision is the field width.
+ </p>
<p>This format can be used for printing any object and
truncating the output so it fits a specified field:</p>
<pre>
@@ -484,7 +250,8 @@ ok
3> <input>io:fwrite("|~-10.8s|~n", [io_lib:write({hey, hey, hey})]).</input>
|{hey,hey |
ok</pre>
- <p>A list with integers larger than 255 is considered an error if the Unicode translation modifier is not given:</p>
+ <p>A list with integers &gt; 255 is considered an error if the
+ Unicode translation modifier is not specified:</p>
<pre>
4> <input>io:fwrite("~ts~n",[[1024]]).</input>
\x{400}
@@ -497,8 +264,8 @@ ok
<item>
<p>Writes data with the standard syntax. This is used to
output Erlang terms. Atoms are printed within quotes if
- they contain embedded non-printable characters, and
- floats are printed accurately as the shortest, correctly
+ they contain embedded non-printable characters.
+ Floats are printed accurately as the shortest, correctly
rounded string.</p>
</item>
<tag><c>p</c></tag>
@@ -506,11 +273,11 @@ ok
<p>Writes the data with standard syntax in the same way as
<c>~w</c>, but breaks terms whose printed representation
is longer than one line into many lines and indents each
- line sensibly. Left justification is not supported.
+ line sensibly. Left-justification is not supported.
It also tries to detect lists of
printable characters and to output these as strings. The
Unicode translation modifier is used for determining
- what characters are printable. For example:</p>
+ what characters are printable, for example:</p>
<pre>
1> <input>T = [{attributes,[[{id,age,1.50000},{mode,explicit},</input>
<input>{typename,"INTEGER"}], [{id,cho},{mode,explicit},{typename,'Cho'}]]},</input>
@@ -531,12 +298,13 @@ ok
{tag,{'PRIVATE',3}},
{mode,implicit}]
ok</pre>
- <p>The field width specifies the maximum line length. It
- defaults to 80. The precision specifies the initial
+ <p>The field width specifies the maximum line length.
+ Defaults to 80. The precision specifies the initial
indentation of the term. It defaults to the number of
- characters printed on this line in the <c>same</c> call to
- <c>io:fwrite</c> or <c>io:format</c>. For example, using
- <c>T</c> above:</p>
+ characters printed on this line in the <em>same</em> call to
+ <seealso marker="#write/1"><c>write/1</c></seealso> or
+ <seealso marker="#format/1"><c>format/1,2,3</c></seealso>.
+ For example, using <c>T</c> above:</p>
<pre>
4> <input>io:fwrite("Here T = ~62p~n", [T]).</input>
Here T = [{attributes,[[{id,age,1.5},
@@ -549,8 +317,8 @@ Here T = [{attributes,[[{id,age,1.5},
{tag,{'PRIVATE',3}},
{mode,implicit}]
ok</pre>
- <p>When the modifier <c>l</c> is given no detection of
- printable character lists will take place. For example:</p>
+ <p>When the modifier <c>l</c> is specified, no detection of
+ printable character lists takes place, for example:</p>
<pre>
5> <input>S = [{a,"a"}, {b, "b"}].</input>
6> <input>io:fwrite("~15p~n", [S]).</input>
@@ -561,9 +329,9 @@ ok
[{a,[97]},
{b,[98]}]
ok</pre>
- <p>Binaries that look like UTF-8 encoded strings will be
+ <p>Binaries that look like UTF-8 encoded strings are
output with the string syntax if the Unicode translation
- modifier is given:</p>
+ modifier is specified:</p>
<pre>
9> <input>io:fwrite("~p~n",[[1024]]).</input>
[1024]
@@ -578,7 +346,7 @@ ok</pre>
<tag><c>W</c></tag>
<item>
<p>Writes data in the same way as <c>~w</c>, but takes an
- extra argument which is the maximum depth to which terms
+ extra argument that is the maximum depth to which terms
are printed. Anything below this depth is replaced with
<c>...</c>. For example, using <c>T</c> above:</p>
<pre>
@@ -587,17 +355,17 @@ ok</pre>
[{id,cho},{mode,...},{...}]]},{typename,'Person'},
{tag,{'PRIVATE',3}},{mode,implicit}]
ok</pre>
- <p>If the maximum depth has been reached, then it is
- impossible to read in the resultant output. Also, the
+ <p>If the maximum depth is reached, it cannot
+ be read in the resultant output. Also, the
<c>,...</c> form in a tuple denotes that there are more
elements in the tuple but these are below the print depth.</p>
</item>
<tag><c>P</c></tag>
<item>
<p>Writes data in the same way as <c>~p</c>, but takes an
- extra argument which is the maximum depth to which terms
+ extra argument that is the maximum depth to which terms
are printed. Anything below this depth is replaced with
- <c>...</c>. For example:</p>
+ <c>...</c>, for example:</p>
<pre>
9> <input>io:fwrite("~62P~n", [T,9]).</input>
[{attributes,[[{id,age,1.5},{mode,explicit},{typename,...}],
@@ -609,9 +377,9 @@ ok</pre>
</item>
<tag><c>B</c></tag>
<item>
- <p>Writes an integer in base 2..36, the default base is
+ <p>Writes an integer in base 2-36, the default base is
10. A leading dash is printed for negative integers.</p>
- <p>The precision field selects base. For example:</p>
+ <p>The precision field selects base, for example:</p>
<pre>
1> <input>io:fwrite("~.16B~n", [31]).</input>
1F
@@ -629,7 +397,7 @@ ok</pre>
prefix to insert before the number, but after the leading
dash, if any.</p>
<p>The prefix can be a possibly deep list of characters or
- an atom.</p>
+ an atom. Example:</p>
<pre>
1> <input>io:fwrite("~X~n", [31,"10#"]).</input>
10#31
@@ -641,7 +409,7 @@ ok</pre>
<tag><c>#</c></tag>
<item>
<p>Like <c>B</c>, but prints the number with an Erlang style
- <c>#</c>-separated base prefix.</p>
+ <c>#</c>-separated base prefix. Example:</p>
<pre>
1> <input>io:fwrite("~.10#~n", [31]).</input>
10#31
@@ -671,14 +439,14 @@ ok</pre>
<p>Ignores the next term.</p>
</item>
</taglist>
- <p>Returns:</p>
+ <p>The function returns:</p>
<taglist>
<tag><c>ok</c></tag>
<item>
<p>The formatting succeeded.</p>
</item>
</taglist>
- <p>If an error occurs, there is no output. For example:</p>
+ <p>If an error occurs, there is no output. Example:</p>
<pre>
1> <input>io:fwrite("~s ~w ~i ~w ~c ~n",['abc def', 'abc def', {foo, 1},{foo, 1}, 65]).</input>
abc def 'abc def' {foo,1} A
@@ -692,45 +460,57 @@ ok
in function io:o_request/2</pre>
<p>In this example, an attempt was made to output the single
character 65 with the aid of the string formatting directive
- "~s".</p>
+ <c>"~s"</c>.</p>
</desc>
</func>
+
<func>
<name name="fread" arity="2"/>
<name name="fread" arity="3"/>
- <fsummary>Read formatted input</fsummary>
+ <fsummary>Read formatted input.</fsummary>
<type name="server_no_data"/>
<desc>
- <p>Reads characters from the standard input (<c><anno>IoDevice</anno></c>),
- prompting it with <c><anno>Prompt</anno></c>. Interprets the characters in
- accordance with <c><anno>Format</anno></c>. <c><anno>Format</anno></c> contains control
- sequences which directs the interpretation of the input.</p>
- <p><c><anno>Format</anno></c> may contain:</p>
+ <p>Reads characters from the standard input
+ (<c><anno>IoDevice</anno></c>), prompting it with
+ <c><anno>Prompt</anno></c>. Interprets the characters in accordance
+ with <c><anno>Format</anno></c>. <c><anno>Format</anno></c> contains
+ control sequences that directs the interpretation of the input.</p>
+ <p><c><anno>Format</anno></c> can contain the following:</p>
<list type="bulleted">
<item>
- <p>White space characters (SPACE, TAB and NEWLINE) which
- cause input to be read to the next non-white space
- character.</p>
+ <p>Whitespace characters (<em>Space</em>, <em>Tab</em>, and
+ <em>Newline</em>) that cause input to be read to the next
+ non-whitespace character.</p>
</item>
<item>
- <p>Ordinary characters which must match the next input
+ <p>Ordinary characters that must match the next input
character.</p>
</item>
<item>
-
<p>Control sequences, which have the general format
- <c>~*FMC</c>. The character <c>*</c> is an optional
- return suppression character. It provides a method to
- specify a field which is to be omitted. <c>F</c> is the
- <c>field width</c> of the input field, <c>M</c> is an optional
- translation modifier (of which <c>t</c> is the only currently
- supported, meaning Unicode translation) and <c>C</c>
- determines the type of control sequence.</p>
-
- <p>Unless otherwise specified, leading white-space is
+ <c>~*FMC</c>, where:</p>
+ <list type="bulleted">
+ <item>
+ <p>Character <c>*</c> is an optional return suppression
+ character. It provides a method to specify a field that
+ is to be omitted.</p>
+ </item>
+ <item>
+ <p><c>F</c> is the <c>field width</c> of the input field.</p>
+ </item>
+ <item>
+ <p><c>M</c> is an optional translation modifier (of which
+ <c>t</c> is the only supported, meaning Unicode
+ translation).</p>
+ </item>
+ <item>
+ <p><c>C</c> determines the type of control sequence.</p>
+ </item>
+ </list>
+ <p>Unless otherwise specified, leading whitespace is
ignored for all control sequences. An input field cannot
- be more than one line wide. The following control
- sequences are available:</p>
+ be more than one line wide.</p>
+ <p><em>Available control sequences:</em></p>
<taglist>
<tag><c>~</c></tag>
<item>
@@ -742,22 +522,22 @@ ok
</item>
<tag><c>u</c></tag>
<item>
- <p>An unsigned integer in base 2..36 is expected. The
+ <p>An unsigned integer in base 2-36 is expected. The
field width parameter is used to specify base. Leading
- white-space characters are not skipped.</p>
+ whitespace characters are not skipped.</p>
</item>
<tag><c>-</c></tag>
<item>
<p>An optional sign character is expected. A sign
- character <c>-</c> gives the return value <c>-1</c>. Sign
+ character <c>-</c> gives return value <c>-1</c>. Sign
character <c>+</c> or none gives <c>1</c>. The field width
- parameter is ignored. Leading white-space characters
+ parameter is ignored. Leading whitespace characters
are not skipped.</p>
</item>
<tag><c>#</c></tag>
<item>
- <p>An integer in base 2..36 with Erlang-style base
- prefix (for example <c>"16#ffff"</c>) is expected.</p>
+ <p>An integer in base 2-36 with Erlang-style base
+ prefix (for example, <c>"16#ffff"</c>) is expected.</p>
</item>
<tag><c>f</c></tag>
<item>
@@ -766,18 +546,15 @@ ok
</item>
<tag><c>s</c></tag>
<item>
- <p>A string of non-white-space characters is read. If a
+ <p>A string of non-whitespace characters is read. If a
field width has been specified, this number of
- characters are read and all trailing white-space
+ characters are read and all trailing whitespace
characters are stripped. An Erlang string (list of
characters) is returned.</p>
-
- <p>If Unicode translation is in effect (<c>~ts</c>),
- characters larger than 255 are accepted, otherwise
- not. With the translation modifier, the list
- returned may as a consequence also contain
- integers larger than 255:</p>
-
+ <p>If Unicode translation is in effect (<c>~ts</c>),
+ characters &gt; 255 are accepted, otherwise
+ not. With the translation modifier, the returned
+ list can as a consequence also contain integers &gt; 255:</p>
<pre>
1> <input>io:fread("Prompt> ","~s").</input>
Prompt> <input>&lt;Characters beyond latin1 range not printable in this medium&gt;</input>
@@ -785,22 +562,23 @@ Prompt> <input>&lt;Characters beyond latin1 range not printable in this medium&g
2> <input>io:fread("Prompt> ","~ts").</input>
Prompt> <input>&lt;Characters beyond latin1 range not printable in this medium&gt;</input>
{ok,[[1091,1085,1080,1094,1086,1076,1077]]}</pre>
-
</item>
<tag><c>a</c></tag>
<item>
<p>Similar to <c>s</c>, but the resulting string is
converted into an atom.</p>
- <p>The Unicode translation modifier is not allowed (atoms can not contain characters beyond the latin1 range).</p>
+ <p>The Unicode translation modifier is not allowed (atoms
+ cannot contain characters beyond the <c>latin1</c> range).</p>
</item>
<tag><c>c</c></tag>
<item>
<p>The number of characters equal to the field width are
read (default is 1) and returned as an Erlang string.
- However, leading and trailing white-space characters
+ However, leading and trailing whitespace characters
are not omitted as they are with <c>s</c>. All
characters are returned.</p>
- <p>The Unicode translation modifier works as with <c>s</c>:</p>
+ <p>The Unicode translation modifier works as with <c>s</c>:
+ </p>
<pre>
1> <input>io:fread("Prompt> ","~c").</input>
Prompt> <input>&lt;Character beyond latin1 range not printable in this medium&gt;</input>
@@ -808,21 +586,20 @@ Prompt> <input>&lt;Character beyond latin1 range not printable in this medium&gt
2> <input>io:fread("Prompt> ","~tc").</input>
Prompt> <input>&lt;Character beyond latin1 range not printable in this medium&gt;</input>
{ok,[[1091]]}</pre>
-
</item>
<tag><c>l</c></tag>
<item>
- <p>Returns the number of characters which have been
- scanned up to that point, including white-space
+ <p>Returns the number of characters that have been
+ scanned up to that point, including whitespace
characters.</p>
</item>
</taglist>
- <p>It returns:</p>
+ <p>The function returns:</p>
<taglist>
<tag><c>{ok, <anno>Terms</anno>}</c></tag>
<item>
- <p>The read was successful and <c><anno>Terms</anno></c> is the list
- of successfully matched and read items.</p>
+ <p>The read was successful and <c><anno>Terms</anno></c> is
+ the list of successfully matched and read items.</p>
</item>
<tag><c>eof</c></tag>
<item>
@@ -835,13 +612,14 @@ Prompt> <input>&lt;Character beyond latin1 range not printable in this medium&gt
</item>
<tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
<item>
- <p>The read operation failed and the parameter
- <c><anno>ErrorDescription</anno></c> gives a hint about the error.</p>
+ <p>The read operation failed and parameter
+ <c><anno>ErrorDescription</anno></c> gives a hint about
+ the error.</p>
</item>
</taglist>
</item>
</list>
- <p>Examples:</p>
+ <p><em>Examples:</em></p>
<pre>
20> <input>io:fread('enter>', "~f~f~f").</input>
enter><input>1.9 35.5e3 15.0</input>
@@ -854,104 +632,127 @@ enter><input>:</input> <input>alan</input> <input>:</input> <input>joe</in
{ok, ["alan", " joe "]}</pre>
</desc>
</func>
+
<func>
- <name name="rows" arity="0"/>
- <name name="rows" arity="1"/>
- <fsummary>Get the number of rows of an IO device</fsummary>
+ <name name="get_chars" arity="2"/>
+ <name name="get_chars" arity="3"/>
+ <fsummary>Read a specified number of characters.</fsummary>
+ <type name="server_no_data"/>
<desc>
- <p>Retrieves the number of rows of the
- <c><anno>IoDevice</anno></c> (i.e. the height of a terminal). The function
- only succeeds for terminal devices, for all other IO devices
- the function returns <c>{error, enotsup}</c></p>
+ <p>Reads <c><anno>Count</anno></c> characters from standard input
+ (<c><anno>IoDevice</anno></c>), prompting it with
+ <c><anno>Prompt</anno></c>.</p>
+ <p>The function returns:</p>
+ <taglist>
+ <tag><c><anno>Data</anno></c></tag>
+ <item>
+ <p>The input characters. If the I/O device supports Unicode,
+ the data can represent codepoints &gt; 255 (the
+ <c>latin1</c> range). If the I/O server is set to deliver
+ binaries, they are encoded in UTF-8 (regardless of whether
+ the I/O device supports Unicode).</p>
+ </item>
+ <tag><c>eof</c></tag>
+ <item>
+ <p>End of file was encountered.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
+ <item>
+ <p>Other (rare) error condition, such as <c>{error, estale}</c>
+ if reading from an NFS file system.</p>
+ </item>
+ </taglist>
</desc>
</func>
+
<func>
- <name name="scan_erl_exprs" arity="1"/>
- <name name="scan_erl_exprs" arity="2"/>
- <name name="scan_erl_exprs" arity="3"/>
- <name name="scan_erl_exprs" arity="4"/>
- <fsummary>Read and tokenize Erlang expressions</fsummary>
+ <name name="get_line" arity="1"/>
+ <name name="get_line" arity="2"/>
+ <fsummary>Read a line.</fsummary>
<type name="server_no_data"/>
<desc>
- <p>Reads data from the standard input (<c>IoDevice</c>),
- prompting it with <c>Prompt</c>. Reading starts at location
- <c>StartLocation</c> (<c>1</c>). The argument <c><anno>Options</anno></c>
- is passed on as the <c>Options</c> argument of the
- <c>erl_scan:tokens/4</c> function. The data is tokenized as if
- it were a
- sequence of Erlang expressions until a final dot (<c>.</c>) is
- reached. This token is also returned. It returns:</p>
+ <p>Reads a line from the standard input (<c><anno>IoDevice</anno></c>),
+ prompting it with <c><anno>Prompt</anno></c>.</p>
+ <p>The function returns:</p>
<taglist>
- <tag><c>{ok, Tokens, EndLocation}</c></tag>
+ <tag><c><anno>Data</anno></c></tag>
<item>
- <p>The tokenization succeeded.</p>
- </item>
- <tag><c>{eof, EndLocation}</c></tag>
- <item>
- <p>End of file was encountered by the tokenizer.</p>
+ <p>The characters in the line terminated by a line feed (or end of
+ file). If the I/O device supports Unicode,
+ the data can represent codepoints &gt; 255 (the
+ <c>latin1</c> range). If the I/O server is set to deliver
+ binaries, they are encoded in UTF-8 (regardless of if
+ the I/O device supports Unicode).</p>
</item>
<tag><c>eof</c></tag>
<item>
- <p>End of file was encountered by the I/O-server.</p>
+ <p>End of file was encountered.</p>
</item>
- <tag><c>{error, ErrorInfo, ErrorLocation}</c></tag>
+ <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
<item>
- <p>An error occurred while tokenizing.</p>
- </item>
- <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
- <item>
- <p>Other (rare) error condition, for instance <c>{error, estale}</c>
- if reading from an NFS file system.</p>
+ <p>Other (rare) error condition, such as <c>{error, estale}</c>
+ if reading from an NFS file system.</p>
</item>
</taglist>
- <p>Example:</p>
- <pre>
-23> <input>io:scan_erl_exprs('enter>').</input>
-enter><input>abc(), "hey".</input>
-{ok,[{atom,1,abc},{'(',1},{')',1},{',',1},{string,1,"hey"},{dot,1}],2}
-24> <input>io:scan_erl_exprs('enter>').</input>
-enter><input>1.0er.</input>
-{error,{1,erl_scan,{illegal,float}},2}</pre>
</desc>
</func>
+
<func>
- <name name="scan_erl_form" arity="1"/>
- <name name="scan_erl_form" arity="2"/>
- <name name="scan_erl_form" arity="3"/>
- <name name="scan_erl_form" arity="4"/>
- <fsummary>Read and tokenize an Erlang form</fsummary>
- <type name="server_no_data"/>
+ <name name="getopts" arity="0"/>
+ <name name="getopts" arity="1"/>
+ <fsummary>Get the supported options and values from an I/O server.
+ </fsummary>
<desc>
- <p>Reads data from the standard input (<c><anno>IoDevice</anno></c>),
- prompting it with <c><anno>Prompt</anno></c>. Starts reading
- at location <c><anno>StartLocation</anno></c> (<c>1</c>). The
- argument <c><anno>Options</anno></c> is passed on as the
- <c>Options</c> argument of the <c>erl_scan:tokens/4</c>
- function. The data is tokenized as if it were an
- Erlang form - one of the valid Erlang expressions in an
- Erlang source file - until a final dot (<c>.</c>) is reached.
- This last token is also returned. The return values are the
- same as for <c>scan_erl_exprs/1,2,3</c> above.</p>
+ <p>Requests all available options and their current
+ values for a specific I/O device, for example:</p>
+<pre>
+1> <input>{ok,F} = file:open("/dev/null",[read]).</input>
+{ok,&lt;0.42.0&gt;}
+2> <input>io:getopts(F).</input>
+[{binary,false},{encoding,latin1}]</pre>
+ <p>Here the file I/O server returns all available options for a file,
+ which are the expected ones, <c>encoding</c> and <c>binary</c>.
+ However, the standard shell has some more options:</p>
+<pre>
+3> io:getopts().
+[{expand_fun,#Fun&lt;group.0.120017273&gt;},
+ {echo,true},
+ {binary,false},
+ {encoding,unicode}]</pre>
+ <p>This example is, as can be seen, run in an environment where the
+ terminal supports Unicode input and output.</p>
</desc>
</func>
+
+ <func>
+ <name name="nl" arity="0"/>
+ <name name="nl" arity="1"/>
+ <fsummary>Write a newline.</fsummary>
+ <desc>
+ <p>Writes new line to the standard output
+ (<c><anno>IoDevice</anno></c>).</p>
+ </desc>
+ </func>
+
<func>
<name name="parse_erl_exprs" arity="1"/>
<name name="parse_erl_exprs" arity="2"/>
<name name="parse_erl_exprs" arity="3"/>
<name name="parse_erl_exprs" arity="4"/>
- <fsummary>Read, tokenize and parse Erlang expressions</fsummary>
+ <fsummary>Read, tokenize, and parse Erlang expressions.</fsummary>
<type name="parse_ret"/>
<type name="server_no_data"/>
<desc>
<p>Reads data from the standard input
(<c><anno>IoDevice</anno></c>), prompting it with
<c><anno>Prompt</anno></c>. Starts reading at location
- <c><anno>StartLocation</anno></c> (<c>1</c>). The argument
- <c><anno>Options</anno></c> is passed on as the
- <c>Options</c> argument of the <c>erl_scan:tokens/4</c>
- function. The data is tokenized and parsed as if it were a
- sequence of Erlang expressions until a final dot (<c>.</c>) is reached.
- It returns:</p>
+ <c><anno>StartLocation</anno></c> (<c>1</c>). Argument
+ <c><anno>Options</anno></c> is passed on as argument
+ <c>Options</c> of function <seealso marker="erl_scan#tokens/4">
+ <c>erl_scan:tokens/4</c></seealso>. The data is tokenized and parsed
+ as if it was a sequence of Erlang expressions until a final dot
+ (<c>.</c>) is reached.</p>
+ <p>The function returns:</p>
<taglist>
<tag><c>{ok, ExprList, EndLocation}</c></tag>
<item>
@@ -963,17 +764,17 @@ enter><input>1.0er.</input>
</item>
<tag><c>eof</c></tag>
<item>
- <p>End of file was encountered by the I/O-server.</p>
+ <p>End of file was encountered by the I/O server.</p>
</item>
<tag><c>{error, ErrorInfo, ErrorLocation}</c></tag>
<item>
<p>An error occurred while tokenizing or parsing.</p>
</item>
- <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
- <item>
- <p>Other (rare) error condition, for instance <c>{error, estale}</c>
- if reading from an NFS file system.</p>
- </item>
+ <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
+ <item>
+ <p>Other (rare) error condition, such as <c>{error, estale}</c>
+ if reading from an NFS file system.</p>
+ </item>
</taglist>
<p>Example:</p>
<pre>
@@ -985,24 +786,25 @@ enter><input>abc("hey".</input>
{error,{1,erl_parse,["syntax error before: ",["'.'"]]},2}</pre>
</desc>
</func>
+
<func>
<name name="parse_erl_form" arity="1"/>
<name name="parse_erl_form" arity="2"/>
<name name="parse_erl_form" arity="3"/>
<name name="parse_erl_form" arity="4"/>
- <fsummary>Read, tokenize and parse an Erlang form</fsummary>
+ <fsummary>Read, tokenize, and parse an Erlang form.</fsummary>
<type name="parse_form_ret"/>
<type name="server_no_data"/>
<desc>
<p>Reads data from the standard input (<c><anno>IoDevice</anno></c>),
prompting it with <c><anno>Prompt</anno></c>. Starts reading at
- location <c><anno>StartLocation</anno></c> (<c>1</c>). The argument
- <c><anno>Options</anno></c> is passed on as the
- <c>Options</c> argument of the <c>erl_scan:tokens/4</c>
- function. The data is tokenized and parsed as if
- it were an Erlang form - one of the valid Erlang expressions
- in an Erlang source file - until a final dot (<c>.</c>) is reached. It
- returns:</p>
+ location <c><anno>StartLocation</anno></c> (<c>1</c>). Argument
+ <c><anno>Options</anno></c> is passed on as argument
+ <c>Options</c> of function <seealso marker="erl_scan#tokens/4">
+ <c>erl_scan:tokens/4</c></seealso>. The data is tokenized and parsed
+ as if it was an Erlang form (one of the valid Erlang expressions
+ in an Erlang source file) until a final dot (<c>.</c>) is reached.</p>
+ <p>The function returns:</p>
<taglist>
<tag><c>{ok, AbsForm, EndLocation}</c></tag>
<item>
@@ -1014,32 +816,353 @@ enter><input>abc("hey".</input>
</item>
<tag><c>eof</c></tag>
<item>
- <p>End of file was encountered by the I/O-server.</p>
+ <p>End of file was encountered by the I/O server.</p>
</item>
<tag><c>{error, ErrorInfo, ErrorLocation}</c></tag>
<item>
<p>An error occurred while tokenizing or parsing.</p>
</item>
- <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
- <item>
- <p>Other (rare) error condition, for instance <c>{error, estale}</c>
- if reading from an NFS file system.</p>
- </item>
+ <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
+ <item>
+ <p>Other (rare) error condition, such as <c>{error, estale}</c>
+ if reading from an NFS file system.</p>
+ </item>
+ </taglist>
+ </desc>
+ </func>
+
+ <func>
+ <name name="printable_range" arity="0"/>
+ <fsummary>Get user-requested printable character range.</fsummary>
+ <desc>
+ <p>Returns the user-requested range of printable Unicode characters.</p>
+ <p>The user can request a range of characters that are to be considered
+ printable in heuristic detection of strings by the shell and by the
+ formatting functions. This is done by supplying
+ <c>+pc &lt;range&gt;</c> when starting Erlang.</p>
+ <p>The only valid values for <c>&lt;range&gt;</c> are
+ <c>latin1</c> and <c>unicode</c>. <c>latin1</c> means that only code
+ points &lt; 256 (except control characters, and so on)
+ are considered printable. <c>unicode</c> means that all printable
+ characters in all Unicode character ranges are considered printable
+ by the I/O functions.</p>
+ <p>By default, Erlang is started so that only the <c>latin1</c> range
+ of characters indicate that a list of integers is a string.</p>
+ <p>The simplest way to use the setting is to call
+ <seealso marker="io_lib#printable_list/1">
+ <c>io_lib:printable_list/1</c></seealso>, which uses the return
+ value of this function to decide if a list is a string of printable
+ characters.</p>
+ <note>
+ <p>In a future release, this function may return more values and
+ ranges. To avoid compatibility problems, it is recommended to use
+ function <seealso marker="io_lib#printable_list/1">
+ <c>io_lib:printable_list/1</c></seealso>.</p></note>
+ </desc>
+ </func>
+
+ <func>
+ <name name="put_chars" arity="1"/>
+ <name name="put_chars" arity="2"/>
+ <fsummary>Write a list of characters.</fsummary>
+ <desc>
+ <p>Writes the characters of <c><anno>CharData</anno></c> to the I/O
+ server (<c><anno>IoDevice</anno></c>).</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="read" arity="1"/>
+ <name name="read" arity="2"/>
+ <fsummary>Read a term.</fsummary>
+ <type name="server_no_data"/>
+ <desc>
+ <p>Reads a term <c><anno>Term</anno></c> from the standard input
+ (<c><anno>IoDevice</anno></c>), prompting it with
+ <c><anno>Prompt</anno></c>.</p>
+ <p>The function returns:</p>
+ <taglist>
+ <tag><c>{ok, <anno>Term</anno>}</c></tag>
+ <item>
+ <p>The parsing was successful.</p>
+ </item>
+ <tag><c>eof</c></tag>
+ <item>
+ <p>End of file was encountered.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorInfo</anno>}</c></tag>
+ <item>
+ <p>The parsing failed.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
+ <item>
+ <p>Other (rare) error condition, such as <c>{error, estale}</c>
+ if reading from an NFS file system.</p>
+ </item>
+ </taglist>
+ </desc>
+ </func>
+
+ <func>
+ <name name="read" arity="3"/>
+ <name name="read" arity="4"/>
+ <fsummary>Read a term.</fsummary>
+ <type name="server_no_data"/>
+ <desc>
+ <p>Reads a term <c><anno>Term</anno></c> from
+ <c><anno>IoDevice</anno></c>, prompting it
+ with <c><anno>Prompt</anno></c>. Reading starts at location
+ <c><anno>StartLocation</anno></c>. Argument
+ <c><anno>Options</anno></c> is passed on as argument <c>Options</c>
+ of function <seealso marker="erl_scan#tokens/4">
+ <c>erl_scan:tokens/4</c></seealso>.</p>
+ <p>The function returns:</p>
+ <taglist>
+ <tag><c>{ok, Term, <anno>EndLocation</anno>}</c></tag>
+ <item>
+ <p>The parsing was successful.</p>
+ </item>
+ <tag><c>{eof, <anno>EndLocation</anno>}</c></tag>
+ <item>
+ <p>End of file was encountered.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorInfo</anno>,
+ <anno>ErrorLocation</anno>}</c></tag>
+ <item>
+ <p>The parsing failed.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
+ <item>
+ <p>Other (rare) error condition, such as <c>{error, estale}</c>
+ if reading from an NFS file system.</p>
+ </item>
+ </taglist>
+ </desc>
+ </func>
+
+ <func>
+ <name name="rows" arity="0"/>
+ <name name="rows" arity="1"/>
+ <fsummary>Get the number of rows of an I/O device.</fsummary>
+ <desc>
+ <p>Retrieves the number of rows of <c><anno>IoDevice</anno></c>
+ (that is, the height of a terminal). The function
+ only succeeds for terminal devices, for all other I/O devices
+ the function returns <c>{error, enotsup}</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="scan_erl_exprs" arity="1"/>
+ <name name="scan_erl_exprs" arity="2"/>
+ <name name="scan_erl_exprs" arity="3"/>
+ <name name="scan_erl_exprs" arity="4"/>
+ <fsummary>Read and tokenize Erlang expressions.</fsummary>
+ <type name="server_no_data"/>
+ <desc>
+ <p>Reads data from the standard input (<c>IoDevice</c>),
+ prompting it with <c>Prompt</c>. Reading starts at location
+ <c>StartLocation</c> (<c>1</c>). Argument <c><anno>Options</anno></c>
+ is passed on as argument <c>Options</c> of function
+ <seealso marker="erl_scan#tokens/4">
+ <c>erl_scan:tokens/4</c></seealso>. The data is tokenized as if it
+ were a sequence of Erlang expressions until a final dot (<c>.</c>) is
+ reached. This token is also returned.</p>
+ <p>The function returns:</p>
+ <taglist>
+ <tag><c>{ok, Tokens, EndLocation}</c></tag>
+ <item>
+ <p>The tokenization succeeded.</p>
+ </item>
+ <tag><c>{eof, EndLocation}</c></tag>
+ <item>
+ <p>End of file was encountered by the tokenizer.</p>
+ </item>
+ <tag><c>eof</c></tag>
+ <item>
+ <p>End of file was encountered by the I/O server.</p>
+ </item>
+ <tag><c>{error, ErrorInfo, ErrorLocation}</c></tag>
+ <item>
+ <p>An error occurred while tokenizing.</p>
+ </item>
+ <tag><c>{error, <anno>ErrorDescription</anno>}</c></tag>
+ <item>
+ <p>Other (rare) error condition, such as <c>{error, estale}</c>
+ if reading from an NFS file system.</p>
+ </item>
+ </taglist>
+ <p><em>Example:</em></p>
+ <pre>
+23> <input>io:scan_erl_exprs('enter>').</input>
+enter><input>abc(), "hey".</input>
+{ok,[{atom,1,abc},{'(',1},{')',1},{',',1},{string,1,"hey"},{dot,1}],2}
+24> <input>io:scan_erl_exprs('enter>').</input>
+enter><input>1.0er.</input>
+{error,{1,erl_scan,{illegal,float}},2}</pre>
+ </desc>
+ </func>
+
+ <func>
+ <name name="scan_erl_form" arity="1"/>
+ <name name="scan_erl_form" arity="2"/>
+ <name name="scan_erl_form" arity="3"/>
+ <name name="scan_erl_form" arity="4"/>
+ <fsummary>Read and tokenize an Erlang form.</fsummary>
+ <type name="server_no_data"/>
+ <desc>
+ <p>Reads data from the standard input (<c><anno>IoDevice</anno></c>),
+ prompting it with <c><anno>Prompt</anno></c>. Starts reading
+ at location <c><anno>StartLocation</anno></c> (<c>1</c>).
+ Argument <c><anno>Options</anno></c> is passed on as argument
+ <c>Options</c> of function <seealso marker="erl_scan#tokens/4">
+ <c>erl_scan:tokens/4</c></seealso>. The data is tokenized as if it
+ was an Erlang form (one of the valid Erlang expressions in an
+ Erlang source file) until a final dot (<c>.</c>) is reached.
+ This last token is also returned.</p>
+ <p>The return values are the same as for
+ <seealso marker="#scan_erl_exprs/1">
+ <c>scan_erl_exprs/1,2,3,4</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="setopts" arity="1"/>
+ <name name="setopts" arity="2"/>
+ <fsummary>Set options.</fsummary>
+ <desc>
+ <p>Set options for the standard I/O device
+ (<c><anno>IoDevice</anno></c>).</p>
+ <p>Possible options and values vary depending on the
+ I/O device. For a list of supported options and their current values
+ on a specific I/O device, use function
+ <seealso marker="#getopts/1"><c>getopts/1</c></seealso>.</p>
+ <p>The options and values supported by the OTP I/O devices
+ are as follows:</p>
+ <taglist>
+ <tag><c>binary</c>, <c>list</c>, or <c>{binary, boolean()}</c></tag>
+ <item>
+ <p>If set in binary mode (<c>binary</c> or <c>{binary, true}</c>),
+ the I/O server sends binary data (encoded in UTF-8) as answers
+ to the <c>get_line</c>, <c>get_chars</c>, and, if possible,
+ <c>get_until</c> requests (for details, see section
+ <seealso marker="io_protocol">The Erlang I/O Protocol</seealso>)
+ in the User's Guide). The immediate effect is that
+ <seealso marker="#get_chars/2"><c>get_chars/2,3</c></seealso> and
+ <seealso marker="#get_line/1"><c>get_line/1,2</c></seealso>
+ return UTF-8 binaries instead of lists of characters
+ for the affected I/O device.</p>
+ <p>By default, all I/O devices in OTP are set in <c>list</c> mode.
+ However, the I/O functions can handle any of these modes and so
+ should other, user-written, modules behaving as clients to I/O
+ servers.</p>
+ <p>This option is supported by the standard shell
+ (<c>group.erl</c>), the 'oldshell' (<c>user.erl</c>), and the
+ file I/O servers.</p>
+ </item>
+ <tag><c>{echo, boolean()}</c></tag>
+ <item>
+ <p>Denotes if the terminal is to echo input. Only supported for
+ the standard shell I/O server (<c>group.erl</c>)</p>
+ </item>
+ <tag><c>{expand_fun, expand_fun()}</c></tag>
+ <item>
+ <p>Provides a function for tab-completion (expansion)
+ like the Erlang shell. This function is called
+ when the user presses the <em>Tab</em> key. The expansion is
+ active when calling line-reading functions, such as
+ <seealso marker="#get_line/1"><c>get_line/1,2</c></seealso>.</p>
+ <p>The function is called with the current line, up to
+ the cursor, as a reversed string. It is to return a
+ three-tuple: <c>{yes|no, string(), [string(), ...]}</c>. The
+ first element gives a beep if <c>no</c>, otherwise the
+ expansion is silent; the second is a string that will be
+ entered at the cursor position; the third is a list of
+ possible expansions. If this list is not empty,
+ it is printed and the current input line is written
+ once again.</p>
+ <p>Trivial example (beep on anything except empty line, which
+ is expanded to <c>"quit"</c>):</p>
+ <code type="none">
+fun("") -> {yes, "quit", []};
+ (_) -> {no, "", ["quit"]} end</code>
+ <p>This option is only supported by the standard shell
+ (<c>group.erl</c>).</p>
+ </item>
+ <tag><c>{encoding, latin1 | unicode}</c></tag>
+ <item>
+ <p>Specifies how characters are input or output from or to the I/O
+ device, implying that, for example, a terminal is set to handle
+ Unicode input and output or a file is set to handle UTF-8 data
+ encoding.</p>
+ <p>The option <em>does not</em> affect how data is returned from the
+ I/O functions or how it is sent in the I/O protocol, it only
+ affects how the I/O device is to handle Unicode characters to the
+ &quot;physical&quot; device.</p>
+ <p>The standard shell is set for <c>unicode</c> or <c>latin1</c>
+ encoding when
+ the system is started. The encoding is set with the help of the
+ <c>LANG</c> or <c>LC_CTYPE</c> environment variables on Unix-like
+ system or by other means on other systems.
+ So, the user can input Unicode characters and the I/O device
+ is in <c>{encoding, unicode}</c> mode if the I/O device supports
+ it. The mode can be changed, if the assumption of the runtime
+ system is wrong, by setting this option.</p>
+ <p>The I/O device used when Erlang is started with the "-oldshell"
+ or "-noshell" flags is by default set to <c>latin1</c> encoding,
+ meaning that any characters &gt; codepoint 255 are escaped
+ and that input is expected to be plain 8-bit ISO Latin-1.
+ If the encoding is changed to Unicode, input and output from
+ the standard file descriptors are in UTF-8 (regardless of
+ operating system).</p>
+ <p>Files can also be set in <c>{encoding, unicode}</c>, meaning
+ that data is written and read as UTF-8. More encodings are
+ possible for files, see below.</p>
+ <p><c>{encoding, unicode | latin1}</c> is supported by both the
+ standard shell (<c>group.erl</c> including <c>werl</c> on
+ Windows), the 'oldshell' (<c>user.erl</c>), and the file I/O
+ servers.</p>
+ </item>
+ <tag><c>{encoding, utf8 | utf16 | utf32 | {utf16,big} |
+ {utf16,little} | {utf32,big} | {utf32,little}}</c></tag>
+ <item>
+ <p>For disk files, the encoding can be set to various UTF variants.
+ This has the effect that data is expected to be read as the
+ specified encoding from the file, and the data is written in the
+ specified encoding to the disk file.</p>
+ <p><c>{encoding, utf8}</c> has the same effect as
+ <c>{encoding, unicode}</c> on files.</p>
+ <p>The extended encodings are only supported on disk files
+ (opened by function
+ <seealso marker="kernel:file#open/2">
+ <c>file:open/2</c></seealso>).</p>
+ </item>
</taglist>
</desc>
</func>
+
+ <func>
+ <name name="write" arity="1"/>
+ <name name="write" arity="2"/>
+ <fsummary>Write a term.</fsummary>
+ <desc>
+ <p>Writes term <c><anno>Term</anno></c> to the standard output
+ (<c><anno>IoDevice</anno></c>).</p>
+ </desc>
+ </func>
</funcs>
<section>
<title>Standard Input/Output</title>
- <p>All Erlang processes have a default standard IO device. This
+ <p>All Erlang processes have a default standard I/O device. This
device is used when no <c>IoDevice</c> argument is specified in
- the above function calls. However, it is sometimes desirable to
- use an explicit <c>IoDevice</c> argument which refers to the
- default IO device. This is the case with functions that can
- access either a file or the default IO device. The atom
+ the function calls in this module. However, it is sometimes desirable to
+ use an explicit <c>IoDevice</c> argument that refers to the
+ default I/O device. This is the case with functions that can
+ access either a file or the default I/O device. The atom
<c>standard_io</c> has this special meaning. The following example
illustrates this:</p>
+
<pre>
27> <input>io:read('enter>').</input>
enter><input>foo.</input>
@@ -1047,30 +1170,37 @@ enter><input>foo.</input>
28> <input>io:read(standard_io, 'enter>').</input>
enter><input>bar.</input>
{ok,bar}</pre>
+
<p>There is always a process registered under the name of
<c>user</c>. This can be used for sending output to the user.</p>
</section>
+
<section>
<title>Standard Error</title>
- <p>In certain situations, especially when the standard output is redirected, access to an I/O-server specific for error messages might be convenient. The IO device <c>standard_error</c> can be used to direct output to whatever the current operating system considers a suitable IO device for error output. Example on a Unix-like operating system:</p>
+ <p>In certain situations, especially when the standard output is
+ redirected, access to an I/O server specific for error messages can be
+ convenient. The I/O device <c>standard_error</c> can be used to direct
+ output to whatever the current operating system considers a suitable
+ I/O device for error output. Example on a Unix-like operating system:</p>
+
<pre>
$ <input>erl -noshell -noinput -eval 'io:format(standard_error,"Error: ~s~n",["error 11"]),'\</input>
<input>'init:stop().' > /dev/null</input>
Error: error 11</pre>
-
-
-
</section>
<section>
<title>Error Information</title>
- <p>The <c>ErrorInfo</c> mentioned above is the standard
- <c>ErrorInfo</c> structure which is returned from all IO modules.
- It has the format:</p>
+ <p>The <c>ErrorInfo</c> mentioned in this module is the standard
+ <c>ErrorInfo</c> structure that is returned from all I/O modules.
+ It has the following format:</p>
+
<code type="none">
{ErrorLocation, Module, ErrorDescriptor}</code>
- <p>A string which describes the error is obtained with the following
+
+ <p>A string that describes the error is obtained with the following
call:</p>
+
<code type="none">
Module:format_error(ErrorDescriptor)</code>
</section>
diff --git a/lib/stdlib/doc/src/io_lib.xml b/lib/stdlib/doc/src/io_lib.xml
index b22ec15a0c..931e50f6f2 100644
--- a/lib/stdlib/doc/src/io_lib.xml
+++ b/lib/stdlib/doc/src/io_lib.xml
@@ -29,14 +29,16 @@
<rev></rev>
</header>
<module>io_lib</module>
- <modulesummary>IO Library Functions</modulesummary>
+ <modulesummary>I/O library functions.</modulesummary>
<description>
<p>This module contains functions for converting to and from
strings (lists of characters). They are used for implementing the
- functions in the <c>io</c> module. There is no guarantee that the
+ functions in the <seealso marker="io"><c>io</c></seealso> module.
+ There is no guarantee that the
character lists returned from some of the functions are flat,
- they can be deep lists. <c>lists:flatten/1</c> can be used for
- flattening deep lists.</p>
+ they can be deep lists. Function
+ <seealso marker="lists#flatten/1"><c>lists:flatten/1</c></seealso>
+ can be used for flattening deep lists.</p>
</description>
<datatypes>
@@ -45,7 +47,8 @@
</datatype>
<datatype>
<name name="continuation"/>
- <desc><p>A continuation as returned by <seealso marker="#fread/3"><c>fread/3</c></seealso>.</p>
+ <desc><p>A continuation as returned by
+ <seealso marker="#fread/3"><c>fread/3</c></seealso>.</p>
</desc>
</datatype>
<datatype>
@@ -62,338 +65,377 @@
</datatype>
<datatype>
<name name="format_spec"/>
- <desc><p>Description:</p>
+ <desc><p>Where:</p>
<list type="bulleted">
<item><p><c>control_char</c> is the type of control
- sequence: <c>$P</c>, <c>$w</c>, and so on;</p>
+ sequence: <c>$P</c>, <c>$w</c>, and so on.</p>
</item>
<item><p><c>args</c> is a list of the arguments used by the
control sequence, or an empty list if the control sequence
- does not take any arguments;</p>
+ does not take any arguments.</p>
</item>
- <item><p><c>width</c> is the field width;</p>
+ <item><p><c>width</c> is the field width.</p>
</item>
- <item><p><c>adjust</c> is the adjustment;</p>
+ <item><p><c>adjust</c> is the adjustment.</p>
</item>
<item><p><c>precision</c> is the precision of the printed
- argument;</p>
+ argument.</p>
</item>
- <item><p><c>pad_char</c> is the padding character;</p>
+ <item><p><c>pad_char</c> is the padding character.</p>
</item>
- <item><p><c>encoding</c> is set to <c>true</c> if the translation
- modifier <c>t</c> is present;</p>
+ <item><p><c>encoding</c> is set to <c>true</c> if translation
+ modifier <c>t</c> is present.</p>
</item>
- <item><p><c>strings</c> is set to <c>false</c> if the modifier
+ <item><p><c>strings</c> is set to <c>false</c> if modifier
<c>l</c> is present.</p>
</item>
</list>
</desc>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="nl" arity="0"/>
- <fsummary>Write a newline</fsummary>
+ <name name="build_text" arity="1"/>
+ <fsummary>Build the output text for a preparsed format list.</fsummary>
<desc>
- <p>Returns a character list which represents a new line
- character.</p>
+ <p>For details, see
+ <seealso marker="#scan_format/2"><c>scan_format/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="write" arity="1"/>
- <name name="write" arity="2"/>
- <fsummary>Write a term</fsummary>
+ <name name="char_list" arity="1"/>
+ <fsummary>Test for a list of characters.</fsummary>
<desc>
- <p>Returns a character list which represents <c><anno>Term</anno></c>. The
- <c><anno>Depth</anno></c> (-1) argument controls the depth of the
- structures written. When the specified depth is reached,
- everything below this level is replaced by "...". For
- example:</p>
- <pre>
-1> <input>lists:flatten(io_lib:write({1,[2],[3],[4,5],6,7,8,9})).</input>
-"{1,[2],[3],[4,5],6,7,8,9}"
-2> <input>lists:flatten(io_lib:write({1,[2],[3],[4,5],6,7,8,9}, 5)).</input>
-"{1,[2],[3],[...],...}"</pre>
+ <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
+ characters in the Unicode range, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="print" arity="1"/>
- <name name="print" arity="4"/>
- <fsummary>Pretty print a term</fsummary>
+ <name name="deep_char_list" arity="1"/>
+ <fsummary>Test for a deep list of characters.</fsummary>
<desc>
- <p>Also returns a list of characters which represents
- <c><anno>Term</anno></c>, but breaks representations which are longer than
- one line into many lines and indents each line sensibly. It
- also tries to detect and output lists of printable characters
- as strings. <c><anno>Column</anno></c> is the starting column (1),
- <c><anno>LineLength</anno></c> the maximum line length (80), and
- <c><anno>Depth</anno></c> (-1) the maximum print depth.</p>
+ <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a, possibly deep,
+ list of characters in the Unicode range, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="fwrite" arity="2"/>
- <name name="format" arity="2"/>
- <fsummary>Write formatted output</fsummary>
+ <name name="deep_latin1_char_list" arity="1"/>
+ <fsummary>Test for a deep list of characters.</fsummary>
<desc>
- <p>Returns a character list which represents <c><anno>Data</anno></c>
- formatted in accordance with <c><anno>Format</anno></c>. See
- <seealso marker="io#fwrite/1">io:fwrite/1,2,3</seealso> for a detailed
- description of the available formatting options. A fault is
- generated if there is an error in the format string or
- argument list.</p>
+ <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a, possibly deep,
+ list of characters in the ISO Latin-1 range, otherwise
+ <c>false</c>.</p>
+ </desc>
+ </func>
- <p>If (and only if) the Unicode translation modifier is used
- in the format string (i.e. ~ts or ~tc), the resulting list
- may contain characters beyond the ISO-latin-1 character
- range (in other words, numbers larger than 255). If so, the
- result is not an ordinary Erlang string(), but can well be
- used in any context where Unicode data is allowed.</p>
-
+ <func>
+ <name name="format" arity="2"/>
+ <name name="fwrite" arity="2"/>
+ <fsummary>Write formatted output.</fsummary>
+ <desc>
+ <p>Returns a character list that represents <c><anno>Data</anno></c>
+ formatted in accordance with <c><anno>Format</anno></c>.
+ For a detailed description of the available formatting options, see
+ <seealso marker="io#fwrite/1"><c>io:fwrite/1,2,3</c></seealso>.
+ If the format string or argument list contains an error, a fault is
+ generated.</p>
+ <p>If and only if the Unicode translation modifier is used in the
+ format string (that is, <c>~ts</c> or <c>~tc</c>), the resulting list
+ can contain characters beyond the ISO Latin-1 character range
+ (that is, numbers &gt; 255). If so, the
+ result is not an ordinary Erlang <c>string()</c>, but can well be
+ used in any context where Unicode data is allowed.</p>
</desc>
</func>
+
<func>
<name name="fread" arity="2"/>
- <fsummary>Read formatted input</fsummary>
+ <fsummary>Read formatted input.</fsummary>
<desc>
- <p>Tries to read <c><anno>String</anno></c> in accordance with the control
- sequences in <c><anno>Format</anno></c>. See
- <seealso marker="io#fread/3">io:fread/3</seealso> for a detailed
- description of the available formatting options. It is
- assumed that <c><anno>String</anno></c> contains whole lines. It returns:</p>
+ <p>Tries to read <c><anno>String</anno></c> in accordance with the
+ control sequences in <c><anno>Format</anno></c>.
+ For a detailed description of the available formatting options, see
+ <seealso marker="io#fread/3"><c>io:fread/3</c></seealso>. It is
+ assumed that <c><anno>String</anno></c> contains whole lines.</p>
+ <p>The function returns:</p>
<taglist>
- <tag><c>{ok, <anno>InputList</anno>, <anno>LeftOverChars</anno>}</c></tag>
+ <tag><c>{ok, <anno>InputList</anno>,
+ <anno>LeftOverChars</anno>}</c></tag>
<item>
- <p>The string was read. <c><anno>InputList</anno></c> is the list of
- successfully matched and read items, and
- <c><anno>LeftOverChars</anno></c> are the input characters not used.</p>
+ <p>The string was read. <c><anno>InputList</anno></c> is the list
+ of successfully matched and read items, and
+ <c><anno>LeftOverChars</anno></c> are the input characters not
+ used.</p>
</item>
- <tag><c>{more, <anno>RestFormat</anno>, <anno>Nchars</anno>, <anno>InputStack</anno>}</c></tag>
+ <tag><c>{more, <anno>RestFormat</anno>, <anno>Nchars</anno>,
+ <anno>InputStack</anno>}</c></tag>
<item>
- <p>The string was read, but more input is needed in order
- to complete the original format string. <c><anno>RestFormat</anno></c>
- is the remaining format string, <c><anno>Nchars</anno></c> the number
+ <p>The string was read, but more input is needed to complete the
+ original format string. <c><anno>RestFormat</anno></c> is the
+ remaining format string, <c><anno>Nchars</anno></c> is the number
of characters scanned, and <c><anno>InputStack</anno></c> is the
reversed list of inputs matched up to that point.</p>
</item>
<tag><c>{error, <anno>What</anno>}</c></tag>
<item>
- <p>The read operation failed and the parameter <c><anno>What</anno></c>
+ <p>The read operation failed and parameter <c><anno>What</anno></c>
gives a hint about the error.</p>
</item>
</taglist>
- <p>Example:</p>
+ <p><em>Example:</em></p>
<pre>
3> <input>io_lib:fread("~f~f~f", "15.6 17.3e-6 24.5").</input>
{ok,[15.6,1.73e-5,24.5],[]}</pre>
</desc>
</func>
+
<func>
<name name="fread" arity="3"/>
<fsummary>Re-entrant formatted reader</fsummary>
<desc>
<p>This is the re-entrant formatted reader. The continuation of
- the first call to the functions must be <c>[]</c>. Refer to
- Armstrong, Virding, Williams, 'Concurrent Programming in
- Erlang', Chapter 13 for a complete description of how the
- re-entrant input scheme works.</p>
+ the first call to the functions must be <c>[]</c>. For a complete
+ description of how the re-entrant input scheme works, see
+ Armstrong, Virding, Williams: 'Concurrent Programming in
+ Erlang', Chapter 13.</p>
<p>The function returns:</p>
<taglist>
- <tag><c>{done, <anno>Result</anno>, <anno>LeftOverChars</anno>}</c></tag>
+ <tag><c>{done, <anno>Result</anno>,
+ <anno>LeftOverChars</anno>}</c></tag>
<item>
- <p>The input is complete. The result is one of the
- following:</p>
+ <p>The input is complete. The result is one of the following:</p>
<taglist>
<tag><c>{ok, <anno>InputList</anno>}</c></tag>
<item>
- <p>The string was read. <c><anno>InputList</anno></c> is the list of
- successfully matched and read items, and
- <c><anno>LeftOverChars</anno></c> are the remaining characters.</p>
+ <p>The string was read. <c><anno>InputList</anno></c> is the
+ list of successfully matched and read items, and
+ <c><anno>LeftOverChars</anno></c> are the remaining
+ characters.</p>
</item>
<tag><c>eof</c></tag>
<item>
- <p>End of file has been encountered.
+ <p>End of file was encountered.
<c><anno>LeftOverChars</anno></c> are the input characters not
used.</p>
</item>
<tag><c>{error, <anno>What</anno>}</c></tag>
<item>
- <p>An error occurred and the parameter <c><anno>What</anno></c> gives
- a hint about the error.</p>
+ <p>An error occurred and parameter <c><anno>What</anno></c>
+ gives a hint about the error.</p>
</item>
</taglist>
</item>
<tag><c>{more, <anno>Continuation</anno>}</c></tag>
<item>
<p>More data is required to build a term.
- <c><anno>Continuation</anno></c> must be passed to <c>fread/3</c>,
+ <c><anno>Continuation</anno></c> must be passed to <c>fread/3</c>
when more data becomes available.</p>
</item>
</taglist>
</desc>
</func>
+
<func>
- <name name="write_atom" arity="1"/>
- <fsummary>Write an atom</fsummary>
+ <name name="indentation" arity="2"/>
+ <fsummary>Indentation after printing string.</fsummary>
<desc>
- <p>Returns the list of characters needed to print the atom
- <c><anno>Atom</anno></c>.</p>
+ <p>Returns the indentation if <c><anno>String</anno></c> has been
+ printed, starting at <c><anno>StartIndent</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="write_string" arity="1"/>
- <fsummary>Write a string</fsummary>
+ <name name="latin1_char_list" arity="1"/>
+ <fsummary>Test for a list of ISO Latin-1 characters.</fsummary>
<desc>
- <p>Returns the list of characters needed to print
- <c><anno>String</anno></c> as a string.</p>
+ <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
+ characters in the ISO Latin-1 range, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="write_string_as_latin1" arity="1"/>
- <fsummary>Write a string</fsummary>
+ <name name="nl" arity="0"/>
+ <fsummary>Write a newline.</fsummary>
<desc>
- <p>Returns the list of characters needed to print
- <c><anno>String</anno></c> as a string. Non-Latin-1
- characters are escaped.</p>
+ <p>Returns a character list that represents a new line character.</p>
</desc>
</func>
+
<func>
- <name name="write_latin1_string" arity="1"/>
- <fsummary>Write an ISO-latin-1 string</fsummary>
+ <name name="print" arity="1"/>
+ <name name="print" arity="4"/>
+ <fsummary>Pretty print a term.</fsummary>
<desc>
- <p>Returns the list of characters needed to print
- <c><anno>Latin1String</anno></c> as a string.</p>
+ <p>Returns a list of characters that represents
+ <c><anno>Term</anno></c>, but breaks representations longer
+ than one line into many lines and indents each line sensibly.
+ Also tries to detect and output lists of printable characters
+ as strings.</p>
+ <list type="bulleted">
+ <item><c><anno>Column</anno></c> is the starting column; defaults
+ to 1.</item>
+ <item><c><anno>LineLength</anno></c> is the maximum line length;
+ defaults to 80.</item>
+ <item><c><anno>Depth</anno></c> is the maximum print depth;
+ defaults to -1, which means no limitation.</item>
+ </list>
</desc>
</func>
+
<func>
- <name name="write_char" arity="1"/>
- <fsummary>Write a character</fsummary>
+ <name name="printable_latin1_list" arity="1"/>
+ <fsummary>Test for a list of printable ISO Latin-1 characters.</fsummary>
<desc>
- <p>Returns the list of characters needed to print a character
- constant in the Unicode character set.</p>
+ <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
+ printable ISO Latin-1 characters, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="write_char_as_latin1" arity="1"/>
- <fsummary>Write a character</fsummary>
+ <name name="printable_list" arity="1"/>
+ <fsummary>Test for a list of printable characters.</fsummary>
<desc>
- <p>Returns the list of characters needed to print a character
- constant in the Unicode character set. Non-Latin-1 characters
- are escaped.</p>
+ <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
+ printable characters, otherwise <c>false</c>.</p>
+ <p>What is a printable character in this case is determined by
+ startup flag <c>+pc</c> to the Erlang VM; see
+ <seealso marker="io#printable_range/0">
+ <c>io:printable_range/0</c></seealso> and
+ <seealso marker="erts:erl"><c>erl(1)</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="write_latin1_char" arity="1"/>
- <fsummary>Write an ISO-latin-1 character</fsummary>
+ <name name="printable_unicode_list" arity="1"/>
+ <fsummary>Test for a list of printable Unicode characters.</fsummary>
<desc>
- <p>Returns the list of characters needed to print a character
- constant in the ISO-latin-1 character set.</p>
+ <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
+ printable Unicode characters, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="scan_format" arity="2"/>
- <fsummary>Parse all control sequences in the format string</fsummary>
+ <fsummary>Parse all control sequences in the format string.</fsummary>
<desc>
- <p>Returns a list corresponding to the given format string,
+ <p>Returns a list corresponding to the specified format string,
where control sequences have been replaced with
- corresponding tuples. This list can be passed to <seealso
- marker="#build_text/1">io_lib:build_text/1</seealso> to have
- the same effect as <c>io_lib:format(Format, Args)</c>, or to
- <seealso
- marker="#unscan_format/1">io_lib:unscan_format/1</seealso>
- in order to get the corresponding pair of <c>Format</c> and
- <c>Args</c> (with every <c>*</c> and corresponding argument
- expanded to numeric values).</p>
+ corresponding tuples. This list can be passed to:</p>
+ <list type="bulleted">
+ <item>
+ <p><seealso marker="#build_text/1"><c>build_text/1</c></seealso>
+ to have the same effect as <c>format(Format, Args)</c></p>
+ </item>
+ <item>
+ <p><seealso marker="#unscan_format/1">
+ <c>unscan_format/1</c></seealso> to get the corresponding pair
+ of <c>Format</c> and <c>Args</c> (with every <c>*</c> and
+ corresponding argument expanded to numeric values)</p>
+ </item>
+ </list>
<p>A typical use of this function is to replace unbounded-size
control sequences like <c>~w</c> and <c>~p</c> with the
depth-limited variants <c>~W</c> and <c>~P</c> before
- formatting to text, e.g. in a logger.</p>
+ formatting to text in, for example, a logger.</p>
</desc>
</func>
+
<func>
<name name="unscan_format" arity="1"/>
- <fsummary>Revert a pre-parsed format list to a plain character list
- and a list of arguments</fsummary>
- <desc>
- <p>See <seealso
- marker="#scan_format/2">io_lib:scan_format/2</seealso> for
- details.</p>
- </desc>
- </func>
- <func>
- <name name="build_text" arity="1"/>
- <fsummary>Build the output text for a pre-parsed format list</fsummary>
+ <fsummary>Revert a preparsed format list to a plain character list
+ and a list of arguments.</fsummary>
<desc>
- <p>See <seealso
- marker="#scan_format/2">io_lib:scan_format/2</seealso> for
- details.</p>
+ <p>For details, see
+ <seealso marker="#scan_format/2"><c>scan_format/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="indentation" arity="2"/>
- <fsummary>Indentation after printing string</fsummary>
+ <name name="write" arity="1"/>
+ <name name="write" arity="2"/>
+ <fsummary>Write a term.</fsummary>
<desc>
- <p>Returns the indentation if <c><anno>String</anno></c> has been printed,
- starting at <c><anno>StartIndent</anno></c>.</p>
+ <p>Returns a character list that represents <c><anno>Term</anno></c>.
+ Argument <c><anno>Depth</anno></c> controls the depth of the
+ structures written. When the specified depth is reached,
+ everything below this level is replaced by "<c>...</c>".
+ <c><anno>Depth</anno></c> defaults to -1, which means
+ no limitation.</p>
+ <p><em>Example:</em></p>
+ <pre>
+1> <input>lists:flatten(io_lib:write({1,[2],[3],[4,5],6,7,8,9})).</input>
+"{1,[2],[3],[4,5],6,7,8,9}"
+2> <input>lists:flatten(io_lib:write({1,[2],[3],[4,5],6,7,8,9}, 5)).</input>
+"{1,[2],[3],[...],...}"</pre>
</desc>
</func>
+
<func>
- <name name="char_list" arity="1"/>
- <fsummary>Test for a list of characters</fsummary>
+ <name name="write_atom" arity="1"/>
+ <fsummary>Write an atom.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
- characters in the Unicode range, otherwise it returns <c>false</c>.</p>
+ <p>Returns the list of characters needed to print atom
+ <c><anno>Atom</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="latin1_char_list" arity="1"/>
- <fsummary>Test for a list of ISO-latin-1 characters</fsummary>
+ <name name="write_char" arity="1"/>
+ <fsummary>Write a character.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
- characters in the ISO-latin-1 range, otherwise it returns <c>false</c>.</p>
+ <p>Returns the list of characters needed to print a character
+ constant in the Unicode character set.</p>
</desc>
</func>
+
<func>
- <name name="deep_char_list" arity="1"/>
- <fsummary>Test for a deep list of characters</fsummary>
+ <name name="write_char_as_latin1" arity="1"/>
+ <fsummary>Write a character.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a, possibly deep, list
- of characters in the Unicode range, otherwise it returns <c>false</c>.</p>
+ <p>Returns the list of characters needed to print a character
+ constant in the Unicode character set. Non-Latin-1 characters
+ are escaped.</p>
</desc>
</func>
+
<func>
- <name name="deep_latin1_char_list" arity="1"/>
- <fsummary>Test for a deep list of characters</fsummary>
+ <name name="write_latin1_char" arity="1"/>
+ <fsummary>Write an ISO Latin-1 character.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a, possibly deep, list
- of characters in the ISO-latin-1 range, otherwise it returns <c>false</c>.</p>
+ <p>Returns the list of characters needed to print a character
+ constant in the ISO Latin-1 character set.</p>
</desc>
</func>
+
<func>
- <name name="printable_list" arity="1"/>
- <fsummary>Test for a list of printable characters</fsummary>
+ <name name="write_latin1_string" arity="1"/>
+ <fsummary>Write an ISO Latin-1 string.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
- printable characters, otherwise it returns <c>false</c>.</p>
- <p>What is a printable character in this case is determined by the
- <c>+pc</c> start up flag to the Erlang VM. See
- <seealso marker="io#printable_range/0">io:printable_range/0</seealso>
- and <seealso marker="erts:erl#erl">erl(1)</seealso>.</p>
+ <p>Returns the list of characters needed to print
+ <c><anno>Latin1String</anno></c> as a string.</p>
</desc>
</func>
+
<func>
- <name name="printable_latin1_list" arity="1"/>
- <fsummary>Test for a list of printable ISO-latin-1 characters</fsummary>
+ <name name="write_string" arity="1"/>
+ <fsummary>Write a string.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
- printable ISO-latin-1 characters, otherwise it returns <c>false</c>.</p>
+ <p>Returns the list of characters needed to print
+ <c><anno>String</anno></c> as a string.</p>
</desc>
</func>
+
<func>
- <name name="printable_unicode_list" arity="1"/>
- <fsummary>Test for a list of printable Unicode characters</fsummary>
+ <name name="write_string_as_latin1" arity="1"/>
+ <fsummary>Write a string.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Term</anno></c> is a flat list of
- printable Unicode characters, otherwise it returns <c>false</c>.</p>
+ <p>Returns the list of characters needed to print
+ <c><anno>String</anno></c> as a string. Non-Latin-1
+ characters are escaped.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/io_protocol.xml b/lib/stdlib/doc/src/io_protocol.xml
index f2a669a49a..84b5f62c7f 100644
--- a/lib/stdlib/doc/src/io_protocol.xml
+++ b/lib/stdlib/doc/src/io_protocol.xml
@@ -23,7 +23,7 @@
</legalnotice>
- <title>The Erlang I/O-protocol</title>
+ <title>The Erlang I/O Protocol</title>
<prepared>Patrik Nyblom</prepared>
<responsible></responsible>
<docno></docno>
@@ -34,183 +34,217 @@
<file>io_protocol.xml</file>
</header>
-
-<p>The I/O-protocol in Erlang specifies a way for a client to communicate
-with an I/O server and vice versa. The I/O server is a process that handles
-the requests and performs the requested task on e.g. an IO device. The
-client is any Erlang process wishing to read or write data from/to the
-IO device.</p>
-
-<p>The common I/O-protocol has been present in OTP since the
-beginning, but has been fairly undocumented and has also somewhat
-evolved over the years. In an addendum to Robert Virdings rationale
-the original I/O-protocol is described. This document describes the
-current I/O-protocol.</p>
-
-<p>The original I/O-protocol was simple and flexible. Demands for spacial
-and execution time efficiency has triggered extensions to the protocol
-over the years, making the protocol larger and somewhat less easy to
-implement than the original. It can certainly be argued that the
-current protocol is too complex, but this text describes how it looks
-today, not how it should have looked.</p>
-
-<p>The basic ideas from the original protocol still hold. The I/O server
-and client communicate with one single, rather simplistic protocol and
-no server state is ever present in the client. Any I/O server can be
-used together with any client code and client code need not be aware
-of the actual IO device the I/O server communicates with.</p>
-
-<section>
-<title>Protocol Basics</title>
-
-<p>As described in Robert's paper, I/O servers and clients communicate using
-<c>io_request</c>/<c>io_reply</c> tuples as follows:</p>
-
-<p><em>{io_request, From, ReplyAs, Request}</em><br/>
-<em>{io_reply, ReplyAs, Reply}</em></p>
-
-<p>The client sends an <c>io_request</c> tuple to the I/O server and
-the server eventually sends a corresponding <c>io_reply</c> tuple.</p>
-
-<list type="bulleted">
-<item><c>From</c> is the <c>pid()</c> of the client, the process which
-the I/O server sends the IO reply to.</item>
-
-<item><c>ReplyAs</c> can be any datum and is returned in the corresponding
-<c>io_reply</c>. The <seealso marker="stdlib:io">io</seealso> module monitors
-the I/O server, and uses the monitor reference as the <c>ReplyAs</c> datum.
-A more complicated client
-could have several outstanding I/O requests to the same I/O server and
-would then use different references (or something else) to differentiate among
-the incoming IO replies. The <c>ReplyAs</c> element should be considered
-opaque by the I/O server. Note that the <c>pid()</c> of the I/O server is not
-explicitly present in the <c>io_reply</c> tuple. The reply can be sent from any
-process, not necessarily the actual I/O server. The <c>ReplyAs</c> element is
-the only thing that connects one I/O request with an I/O-reply.</item>
-
-<item><c>Request</c> and <c>Reply</c> are described below.</item>
-</list>
-
-<p>When an I/O server receives an <c>io_request</c> tuple, it acts upon the actual
-<c>Request</c> part and eventually sends an <c>io_reply</c> tuple with the corresponding
-<c>Reply</c> part.</p>
-</section>
-<section>
-<title>Output Requests</title>
-
-<p>To output characters on an IO device, the following <c>Request</c>s exist:</p>
-
-<p>
-<em>{put_chars, Encoding, Characters}</em><br/>
-<em>{put_chars, Encoding, Module, Function, Args}</em>
-</p>
-<list type="bulleted">
-<item><c>Encoding</c> is either <c>unicode</c> or <c>latin1</c>, meaning that the
- characters are (in case of binaries) encoded as either UTF-8 or
- ISO-latin-1 (pure bytes). A well behaved I/O server should also
- return error if list elements contain integers > 255 when
- <c>Encoding</c> is set to <c>latin1</c>. Note that this does not in any way tell
- how characters should be put on the actual IO device or how the
- I/O server should handle them. Different I/O servers may handle the
- characters however they want, this simply tells the I/O server which
- format the data is expected to have. In the <c>Module</c>/<c>Function</c>/<c>Args</c>
- case, <c>Encoding</c> tells which format the designated function
- produces. Note that byte-oriented data is simplest sent using the ISO-latin-1
- encoding.</item>
-
-<item>Characters are the data to be put on the IO device. If <c>Encoding</c> is
- <c>latin1</c>, this is an <c>iolist()</c>. If <c>Encoding</c> is <c>unicode</c>, this is an
- Erlang standard mixed Unicode list (one integer in a list per
- character, characters in binaries represented as UTF-8).</item>
-
-<item><c>Module</c>, <c>Function</c>, and <c>Args</c> denote a function which will be called to
- produce the data (like <c>io_lib:format/2</c>). <c>Args</c> is a list of arguments
- to the function. The function should produce data in the given
- <c>Encoding</c>. The I/O server should call the function as
- <c>apply(Mod, Func, Args)</c> and will put the returned data on the IO device as if it was sent
- in a <c>{put_chars, Encoding, Characters}</c> request. If the function
- returns anything else than a binary or list or throws an exception,
- an error should be sent back to the client.</item>
-</list>
-
-<p>The I/O server replies to the client with an <c>io_reply</c> tuple where the <c>Reply</c>
-element is one of:</p>
-<p>
-<em>ok</em><br/>
-<em>{error, Error}</em>
-</p>
-
-<list type="bulleted">
-<item><c>Error</c> describes the error to the client, which may do whatever
- it wants with it. The Erlang <seealso marker="stdlib:io">io</seealso>
- module typically returns it as is.</item>
-</list>
-
-<p>For backward compatibility the following <c>Request</c>s should also be
-handled by an I/O server (these requests should not be present after
-R15B of OTP):</p>
-<p>
-<em>{put_chars, Characters}</em><br/>
-<em>{put_chars, Module, Function, Args}</em>
-</p>
-
-<p>These should behave as <c>{put_chars, latin1, Characters}</c> and
-<c>{put_chars, latin1, Module, Function, Args}</c> respectively. </p>
-</section>
-<section>
-<title>Input Requests</title>
-
-<p>To read characters from an IO device, the following <c>Request</c>s exist:</p>
-
-<p><em>{get_until, Encoding, Prompt, Module, Function, ExtraArgs}</em></p>
-
-<list type="bulleted">
-<item><c>Encoding</c> denotes how data is to be sent back to the client and
- what data is sent to the function denoted by
- <c>Module</c>/<c>Function</c>/<c>ExtraArgs</c>. If the function supplied returns data as a
- list, the data is converted to this encoding. If however the
- function supplied returns data in some other format, no conversion
- can be done and it is up to the client supplied function to return
- data in a proper way. If <c>Encoding</c> is <c>latin1</c>, lists of integers
- 0..255 or binaries containing plain bytes are sent back to the
- client when possible; if <c>Encoding</c> is <c>unicode</c>, lists with integers in
- the whole Unicode range or binaries encoded in UTF-8 are sent to the
- client. The user supplied function will always see lists of integers, never
- binaries, but the list may contain numbers > 255 if the <c>Encoding</c> is
- <c>unicode</c>.</item>
-
-<item><c>Prompt</c> is a list of characters (not mixed, no binaries) or an atom
- to be output as a prompt for input on the IO device. <c>Prompt</c> is
- often ignored by the I/O server and if set to <c>''</c> it should always
- be ignored (and result in nothing being written to the IO device).</item>
-
-<item><p><c>Module</c>, <c>Function</c>, and <c>ExtraArgs</c> denote a function and arguments to
- determine when enough data is written. The function should take two
- additional arguments, the last state, and a list of characters. The
- function should return one of:</p>
-<p>
-<em>{done, Result, RestChars}</em><br/>
-<em>{more, Continuation}</em>
-</p>
- <p>The <c>Result</c> can be any Erlang term, but if it is a <c>list()</c>, the
- I/O server may convert it to a <c>binary()</c> of appropriate format before
- returning it to the client, if the I/O server is set in binary mode (see
- below).</p>
-
- <p>The function will be called with the data the I/O server finds on
- its IO device, returning <c>{done, Result, RestChars}</c> when enough data is
- read (in which case <c>Result</c> is sent to the client and <c>RestChars</c> is
- kept in the I/O server as a buffer for subsequent input) or
- <c>{more, Continuation}</c>, indicating that more characters are needed to
- complete the request. The <c>Continuation</c> will be sent as the state in
- subsequent calls to the function when more characters are
- available. When no more characters are available, the function
- shall return <c>{done, eof, Rest}</c>.
- The initial state is the empty list and the data when an
- end of file is reached on the IO device is the atom <c>eof</c>. An emulation
- of the <c>get_line</c> request could be (inefficiently) implemented using
- the following functions:</p>
-<code>
+ <p>The I/O protocol in Erlang enables bi-directional communication between
+ clients and servers.</p>
+
+ <list type="bulleted">
+ <item>
+ <p>The I/O server is a process that handles the requests and performs
+ the requested task on, for example, an I/O device.</p>
+ </item>
+ <item>
+ <p>The client is any Erlang process wishing to read or write data from/to
+ the I/O device.</p>
+ </item>
+ </list>
+
+ <p>The common I/O protocol has been present in OTP since the beginning, but
+ has been undocumented and has also evolved over the years. In an
+ addendum to Robert Virding's rationale, the original I/O protocol is
+ described. This section describes the current I/O protocol.</p>
+
+ <p>The original I/O protocol was simple and flexible. Demands for memory
+ efficiency and execution time efficiency have triggered extensions
+ to the protocol over the years, making the protocol larger and somewhat
+ less easy to implement than the original. It can certainly be argued that
+ the current protocol is too complex, but this section describes how it
+ looks today, not how it should have looked.</p>
+
+ <p>The basic ideas from the original protocol still hold. The I/O server
+ and client communicate with one single, rather simplistic protocol and no
+ server state is ever present in the client. Any I/O server can be used
+ together with any client code, and the client code does not need to be
+ aware of the I/O device that the I/O server communicates with.</p>
+
+ <section>
+ <title>Protocol Basics</title>
+ <p>As described in Robert's paper, I/O servers and clients communicate
+ using <c>io_request</c>/<c>io_reply</c> tuples as follows:</p>
+
+ <pre>
+{io_request, From, ReplyAs, Request}
+{io_reply, ReplyAs, Reply}</pre>
+
+ <p>The client sends an <c>io_request</c> tuple to the I/O server and the
+ server eventually sends a corresponding <c>io_reply</c> tuple.</p>
+
+ <list type="bulleted">
+ <item>
+ <p><c>From</c> is the <c>pid()</c> of the client, the process which
+ the I/O server sends the I/O reply to.</p>
+ </item>
+ <item>
+ <p><c>ReplyAs</c> can be any datum and is returned in the
+ corresponding <c>io_reply</c>. The
+ <seealso marker="stdlib:io"><c>io</c></seealso> module monitors the
+ the I/O server and uses the monitor reference as the <c>ReplyAs</c>
+ datum. A more complicated client can have many outstanding I/O
+ requests to the same I/O server and can use different references (or
+ something else) to differentiate among the incoming I/O replies.
+ Element <c>ReplyAs</c> is to be considered opaque by the I/O
+ server.</p>
+ <p>Notice that the <c>pid()</c> of the I/O server is not explicitly
+ present in tuple <c>io_reply</c>. The reply can be sent from any
+ process, not necessarily the actual I/O server.</p>
+ </item>
+ <item>
+ <p><c>Request</c> and <c>Reply</c> are described below.</p>
+ </item>
+ </list>
+
+ <p>When an I/O server receives an <c>io_request</c> tuple, it acts upon the
+ <c>Request</c> part and eventually sends an <c>io_reply</c> tuple with
+ the corresponding <c>Reply</c> part.</p>
+ </section>
+
+ <section>
+ <title>Output Requests</title>
+ <p>To output characters on an I/O device, the following <c>Request</c>s
+ exist:</p>
+
+ <pre>
+{put_chars, Encoding, Characters}
+{put_chars, Encoding, Module, Function, Args}</pre>
+
+ <list type="bulleted">
+ <item>
+ <p><c>Encoding</c> is <c>unicode</c> or <c>latin1</c>, meaning that the
+ characters are (in case of binaries) encoded as UTF-8 or ISO Latin-1
+ (pure bytes). A well-behaved I/O server is also to return an error
+ indication if list elements contain integers &gt; 255
+ when <c>Encoding</c> is set to <c>latin1</c>.</p>
+ <p>Notice that this does not in any way tell how characters are to be
+ put on the I/O device or handled by the I/O server. Different I/O
+ servers can handle the characters however they want, this only tells
+ the I/O server which format the data is expected to have. In the
+ <c>Module</c>/<c>Function</c>/<c>Args</c> case, <c>Encoding</c> tells
+ which format the designated function produces.</p>
+ <p>Notice also that byte-oriented data is simplest sent using the ISO
+ Latin-1 encoding.</p>
+ </item>
+ <item>
+ <p><c>Characters</c> are the data to be put on the I/O device. If
+ <c>Encoding</c> is <c>latin1</c>, this is an <c>iolist()</c>. If
+ <c>Encoding</c> is <c>unicode</c>, this is an Erlang standard mixed
+ Unicode list (one integer in a list per character, characters in
+ binaries represented as UTF-8).</p>
+ </item>
+ <item>
+ <p><c>Module</c>, <c>Function</c>, and <c>Args</c> denote a function
+ that is called to produce the data (like
+ <seealso marker="stdlib:io_lib#format/2"><c>io_lib:format/2</c></seealso>).
+ </p>
+ <p><c>Args</c> is a list of arguments to the function. The function is
+ to produce data in the specified <c>Encoding</c>. The I/O server is
+ to call the function as <c>apply(Mod, Func, Args)</c> and put the
+ returned data on the I/O device as if it was sent in a
+ <c>{put_chars, Encoding, Characters}</c> request. If the function
+ returns anything else than a binary or list, or throws an exception,
+ an error is to be sent back to the client.</p>
+ </item>
+ </list>
+
+ <p>The I/O server replies to the client with an <c>io_reply</c> tuple, where
+ element <c>Reply</c> is one of:</p>
+
+ <pre>
+ok
+{error, Error}</pre>
+
+ <list type="bulleted">
+ <item><c>Error</c> describes the error to the client, which can do
+ whatever it wants with it. The
+ <seealso marker="stdlib:io"><c>io</c></seealso> module typically
+ returns it "as is".</item>
+ </list>
+
+ <p>For backward compatibility, the following <c>Request</c>s are also to be
+ handled by an I/O server (they are not to be present after
+ Erlang/OTP R15B):</p>
+
+ <pre>
+{put_chars, Characters}
+{put_chars, Module, Function, Args}</pre>
+
+ <p>These are to behave as <c>{put_chars, latin1, Characters}</c> and
+ <c>{put_chars, latin1, Module, Function, Args}</c>, respectively.</p>
+ </section>
+
+ <section>
+ <title>Input Requests</title>
+ <p>To read characters from an I/O device, the following <c>Request</c>s
+ exist:</p>
+
+ <pre>
+{get_until, Encoding, Prompt, Module, Function, ExtraArgs}</pre>
+
+ <list type="bulleted">
+ <item>
+ <p><c>Encoding</c> denotes how data is to be sent back to the client
+ and what data is sent to the function denoted by
+ <c>Module</c>/<c>Function</c>/<c>ExtraArgs</c>. If the function
+ supplied returns data as a list, the data is converted to this
+ encoding. If the function supplied returns data in some other format,
+ no conversion can be done, and it is up to the client-supplied
+ function to return data in a proper way.</p>
+ <p>If <c>Encoding</c> is <c>latin1</c>, lists of integers <c>0..255</c>
+ or binaries containing plain bytes are sent back to the client when
+ possible. If <c>Encoding</c> is <c>unicode</c>, lists with integers
+ in the whole Unicode range or binaries encoded in UTF-8 are sent to
+ the client. The user-supplied function always sees lists of
+ integers, never binaries, but the list can contain numbers &gt; 255
+ if <c>Encoding</c> is <c>unicode</c>.</p>
+ </item>
+ <item>
+ <p><c>Prompt</c> is a list of characters (not mixed, no binaries) or an
+ atom to be output as a prompt for input on the I/O device.
+ <c>Prompt</c> is often ignored by the I/O server; if set to <c>''</c>,
+ it is always to be ignored (and results in nothing being written to
+ the I/O device).</p>
+ </item>
+ <item>
+ <p><c>Module</c>, <c>Function</c>, and <c>ExtraArgs</c> denote a
+ function and arguments to determine when enough data is written. The
+ function is to take two more arguments, the last state, and a list of
+ characters. The function is to return one of:</p>
+ <pre>
+{done, Result, RestChars}
+{more, Continuation}</pre>
+ <p><c>Result</c> can be any Erlang term, but if it is a <c>list()</c>,
+ the I/O server can convert it to a <c>binary()</c> of appropriate
+ format before returning it to the client, if the I/O server is set in
+ binary mode (see below).</p>
+ <p>The function is called with the data the I/O server finds on its I/O
+ device, returning one of:</p>
+ <list type="bulleted">
+ <item>
+ <p><c>{done, Result, RestChars}</c> when enough data is read. In
+ this case <c>Result</c> is sent to the client and <c>RestChars</c>
+ is kept in the I/O server as a buffer for later input.</p>
+ </item>
+ <item>
+ <p><c>{more, Continuation}</c>, which indicates that more
+ characters are needed to complete the request.</p>
+ </item>
+ </list>
+ <p><c>Continuation</c> is sent as the state in later calls to the
+ function when more characters are available. When no more characters
+ are available, the function must return <c>{done, eof, Rest}</c>. The
+ initial state is the empty list. The data when an end of file is
+ reached on the IO device is the atom <c>eof</c>.</p>
+ <p>An emulation of the <c>get_line</c> request can be (inefficiently)
+ implemented using the following functions:</p>
+ <code>
-module(demo).
-export([until_newline/3, get_line/1]).
@@ -234,226 +268,253 @@ get_line(IoServer) -&gt;
receive
{io_reply, IoServer, Data} -&gt;
Data
- end.
-</code>
- <p>Note especially that the last element in the <c>Request</c> tuple (<c>[$\n]</c>)
- is appended to the argument list when the function is called. The
- function should be called like
- <c>apply(Module, Function, [ State, Data | ExtraArgs ])</c> by the I/O server</p>
-</item>
-</list>
-
-<p>A fixed number of characters is requested using this <c>Request</c>:</p>
-<p>
-<em>{get_chars, Encoding, Prompt, N}</em>
-</p>
-
-<list type="bulleted">
-<item><c>Encoding</c> and <c>Prompt</c> as for <c>get_until</c>.</item>
-
-<item><c>N</c> is the number of characters to be read from the IO device.</item>
-</list>
-
-<p>A single line (like in the example above) is requested with this <c>Request</c>:</p>
-<p>
-<em>{get_line, Encoding, Prompt}</em>
-</p>
-
-<list type="bulleted">
-<item><c>Encoding</c> and <c>Prompt</c> as above.</item>
-</list>
-
-<p>Obviously, the <c>get_chars</c> and <c>get_line</c> could be implemented with the
-<c>get_until</c> request (and indeed they were originally), but demands for
-efficiency has made these additions necessary.</p>
-
-<p>The I/O server replies to the client with an <c>io_reply</c> tuple where the <c>Reply</c>
-element is one of:</p>
-<p>
-<em>Data</em><br/>
-<em>eof</em><br/>
-<em>{error, Error}</em>
-</p>
-
-<list type="bulleted">
-<item><c>Data</c> is the characters read, in either list or binary form
- (depending on the I/O server mode, see below).</item>
-<item><c>Error</c> describes the error to the client, which may do whatever it
- wants with it. The Erlang <seealso marker="stdlib:io">io</seealso>
- module typically returns it as is.</item>
-<item><c>eof</c> is returned when input end is reached and no more data is
-available to the client process.</item>
-</list>
-
-<p>For backward compatibility the following <c>Request</c>s should also be
-handled by an I/O server (these reqeusts should not be present after
-R15B of OTP):</p>
-
-<p>
-<em>{get_until, Prompt, Module, Function, ExtraArgs}</em><br/>
-<em>{get_chars, Prompt, N}</em><br/>
-<em>{get_line, Prompt}</em><br/>
-</p>
-
-<p>These should behave as <c>{get_until, latin1, Prompt, Module, Function,
-ExtraArgs}</c>, <c>{get_chars, latin1, Prompt, N}</c> and <c>{get_line, latin1,
-Prompt}</c> respectively.</p>
-</section>
-<section>
-<title>I/O-server Modes</title>
-
-<p>Demands for efficiency when reading data from an I/O server has not
-only lead to the addition of the <c>get_line</c> and <c>get_chars</c> requests, but
-has also added the concept of I/O server options. No options are
-mandatory to implement, but all I/O servers in the Erlang standard
-libraries honor the <c>binary</c> option, which allows the <c>Data</c> element of the
-<c>io_reply</c> tuple to be a binary instead of a list <em>when possible</em>.
-If the data is sent as a binary, Unicode data will be sent in the
-standard Erlang Unicode
-format, i.e. UTF-8 (note that the function of the <c>get_until</c> request still gets
-list data regardless of the I/O server mode).</p>
-
-<p>Note that i.e. the <c>get_until</c> request allows for a function with the data specified as always being a list. Also the return value data from such a function can be of any type (as is indeed the case when an <c>io:fread</c> request is sent to an I/O server). The client has to be prepared for data received as answers to those requests to be in a variety of forms, but the I/O server should convert the results to binaries whenever possible (i.e. when the function supplied to <c>get_until</c> actually returns a list). The example shown later in this text does just that.</p>
-
-<p>An I/O-server in binary mode will affect the data sent to the client,
-so that it has to be able to handle binary data. For convenience, it
-is possible to set and retrieve the modes of an I/O server using the
-following I/O requests:</p>
-
-<p>
-<em>{setopts, Opts}</em>
-</p>
-
-
-<list type="bulleted">
-<item><c>Opts</c> is a list of options in the format recognized by <seealso marker="stdlib:proplists">proplists</seealso> (and
- of course by the I/O server itself).</item>
-</list>
-<p>As an example, the I/O server for the interactive shell (in <c>group.erl</c>)
-understands the following options:</p>
-<p>
-<em>{binary, boolean()}</em> (or <em>binary</em>/<em>list</em>)<br/>
-<em>{echo, boolean()}</em><br/>
-<em>{expand_fun, fun()}</em><br/>
-<em>{encoding, unicode/latin1}</em> (or <em>unicode</em>/<em>latin1</em>)
-</p>
-
-<p>- of which the <c>binary</c> and <c>encoding</c> options are common for all
-I/O servers in OTP, while <c>echo</c> and <c>expand</c> are valid only for this
-I/O server. It is worth noting that the <c>unicode</c> option notifies how
-characters are actually put on the physical IO device, i.e. if the
-terminal per se is Unicode aware, it does not affect how characters
-are sent in the I/O-protocol, where each request contains encoding
-information for the provided or returned data.</p>
-
-<p>The I/O server should send one of the following as <c>Reply</c>:</p>
-<p>
-<em>ok</em><br/>
-<em>{error, Error}</em>
-</p>
-
-<p>An error (preferably <c>enotsup</c>) is to be expected if the option is
-not supported by the I/O server (like if an <c>echo</c> option is sent in a
-<c>setopts</c> request to a plain file).</p>
-
-<p>To retrieve options, this request is used:</p>
-<p>
-<em>getopts</em>
-</p>
-
-<p>The <c>getopts</c> request asks for a complete list of all options
-supported by the I/O server as well as their current values.</p>
-
-<p>The I/O server replies:</p>
-<p>
-<em>OptList</em><br/>
-<em>{error, Error}</em>
-</p>
-
-<list type="bulleted">
-<item><c>OptList</c> is a list of tuples <c>{Option, Value}</c> where <c>Option</c> is always
- an atom.</item>
-</list>
-</section>
-<section>
-<title>Multiple I/O Requests</title>
-
-<p>The <c>Request</c> element can in itself contain several <c>Request</c>s by using
-the following format:</p>
-<p>
-<em>{requests, Requests}</em>
-</p>
-<list type="bulleted">
-<item><c>Requests</c> is a list of valid <c>io_request</c> tuples for the protocol, they
- shall be executed in the order in which they appear in the list and
- the execution should continue until one of the requests result in an
- error or the list is consumed. The result of the last request is
- sent back to the client.</item>
-</list>
-
-<p>The I/O server can for a list of requests send any of the valid results in
-the reply:</p>
-
-<p>
-<em>ok</em><br/>
-<em>{ok, Data}</em><br/>
-<em>{ok, Options}</em><br/>
-<em>{error, Error}</em>
-</p>
-<p>- depending on the actual requests in the list.</p>
-</section>
-<section>
-<title>Optional I/O Requests</title>
-
-<p>The following I/O request is optional to implement and a client
-should be prepared for an error return:</p>
-<p>
-<em>{get_geometry, Geometry}</em>
-</p>
-<list type="bulleted">
-<item><c>Geometry</c> is either the atom <c>rows</c> or the atom <c>columns</c>.</item>
-</list>
-<p>The I/O server should send the <c>Reply</c> as:</p>
-<p>
-<em>{ok, N}</em><br/>
-<em>{error, Error}</em>
-</p>
-
-<list type="bulleted">
-<item><c>N</c> is the number of character rows or columns the IO device has, if
- applicable to the IO device the I/O server handles, otherwise <c>{error,
- enotsup}</c> is a good answer.</item>
-</list>
-</section>
-<section>
-<title>Unimplemented Request Types</title>
-
-<p>If an I/O server encounters a request it does not recognize (i.e. the
-<c>io_request</c> tuple is in the expected format, but the actual <c>Request</c> is
-unknown), the I/O server should send a valid reply with the error tuple:</p>
-<p>
-<em>{error, request}</em>
-</p>
-
-<p>This makes it possible to extend the protocol with optional requests
-and for the clients to be somewhat backwards compatible.</p>
-</section>
-<section>
-<title>An Annotated and Working Example I/O Server</title>
-
-<p>An I/O server is any process capable of handling the I/O protocol. There is
-no generic I/O server behavior, but could well be. The framework is
-simple enough, a process handling incoming requests, usually both
-I/O-requests and other IO device-specific requests (for i.e. positioning,
-closing etc.).</p>
-
-<p>Our example I/O server stores characters in an ETS table, making up a
-fairly crude ram-file (it is probably not useful, but working).</p>
-
-<p>The module begins with the usual directives, a function to start the
-I/O server and a main loop handling the requests:</p>
-
-<code>
+ end.</code>
+ <p>Notice that the last element in the <c>Request</c> tuple
+ (<c>[$\n]</c>) is appended to the argument list when the function is
+ called. The function is to be called like
+ <c>apply(Module, Function, [ State, Data | ExtraArgs ])</c> by the
+ I/O server.</p>
+ </item>
+ </list>
+
+ <p>A fixed number of characters is requested using the following
+ <c>Request</c>:</p>
+
+ <pre>
+{get_chars, Encoding, Prompt, N}</pre>
+
+ <list type="bulleted">
+ <item>
+ <p><c>Encoding</c> and <c>Prompt</c> as for <c>get_until</c>.</p>
+ </item>
+ <item>
+ <p><c>N</c> is the number of characters to be read from the I/O
+ device.</p>
+ </item>
+ </list>
+
+ <p>A single line (as in former example) is requested with the
+ following <c>Request</c>:</p>
+
+ <pre>
+{get_line, Encoding, Prompt}</pre>
+
+ <list type="bulleted">
+ <item><c>Encoding</c> and <c>Prompt</c> as for <c>get_until</c>.</item>
+ </list>
+
+ <p>Clearly, <c>get_chars</c> and <c>get_line</c> could be implemented with
+ the <c>get_until</c> request (and indeed they were originally), but
+ demands for efficiency have made these additions necessary.</p>
+
+ <p>The I/O server replies to the client with an <c>io_reply</c> tuple, where
+ element <c>Reply</c> is one of:</p>
+
+ <pre>
+Data
+eof
+{error, Error}</pre>
+
+ <list type="bulleted">
+ <item>
+ <p><c>Data</c> is the characters read, in list or binary form
+ (depending on the I/O server mode, see the next section).</p>
+ </item>
+ <item>
+ <p><c>eof</c> is returned when input end is reached and no more data is
+ available to the client process.</p>
+ </item>
+ <item>
+ <p><c>Error</c> describes the error to the client, which can do
+ whatever it wants with it. The
+ <seealso marker="stdlib:io"><c>io</c></seealso> module typically
+ returns it as is.</p>
+ </item>
+ </list>
+
+ <p>For backward compatibility, the following <c>Request</c>s are also to be
+ handled by an I/O server (they are not to be present after
+ Erlang/OTP R15B):</p>
+
+ <pre>
+{get_until, Prompt, Module, Function, ExtraArgs}
+{get_chars, Prompt, N}
+{get_line, Prompt}</pre>
+
+ <p>These are to behave as
+ <c>{get_until, latin1, Prompt, Module, Function, ExtraArgs}</c>,
+ <c>{get_chars, latin1, Prompt, N}</c>, and
+ <c>{get_line, latin1, Prompt}</c>, respectively.</p>
+ </section>
+
+ <section>
+ <title>I/O Server Modes</title>
+ <p>Demands for efficiency when reading data from an I/O server has not only
+ lead to the addition of the <c>get_line</c> and <c>get_chars</c> requests,
+ but has also added the concept of I/O server options. No options are
+ mandatory to implement, but all I/O servers in the Erlang standard
+ libraries honor the <c>binary</c> option, which allows element
+ <c>Data</c> of the <c>io_reply</c> tuple to be a binary instead of a list
+ <em>when possible</em>. If the data is sent as a binary, Unicode data is
+ sent in the standard Erlang Unicode format, that is, UTF-8 (notice that
+ the function of the <c>get_until</c> request still gets list data
+ regardless of the I/O server mode).</p>
+
+ <p>Notice that the <c>get_until</c> request allows for a function with the
+ data specified as always being a list. Also, the return value data from
+ such a function can be of any type (as is indeed the case when an
+ <seealso marker="stdlib:io#fread/2"><c>io:fread/2,3</c></seealso>
+ request is sent to an I/O server).
+ The client must be prepared for data received as
+ answers to those requests to be in various forms. However, the I/O
+ server is to convert the results to binaries whenever possible (that is,
+ when the function supplied to <c>get_until</c> returns a list). This is
+ done in the example in section
+ <seealso marker="#example_io_server">An Annotated and Working Example I/O Server</seealso>.
+ </p>
+
+ <p>An I/O server in binary mode affects the data sent to the client, so that
+ it must be able to handle binary data. For convenience, the modes of an
+ I/O server can be set and retrieved using the following I/O requests:</p>
+
+ <pre>
+{setopts, Opts}</pre>
+
+ <list type="bulleted">
+ <item><c>Opts</c> is a list of options in the format recognized by the
+ <seealso marker="stdlib:proplists"><c>proplists</c></seealso> module
+ (and by the I/O server).</item>
+ </list>
+
+ <p>As an example, the I/O server for the interactive shell (in
+ <c>group.erl</c>) understands the following options:</p>
+
+ <pre>
+{binary, boolean()} (or binary/list)
+{echo, boolean()}
+{expand_fun, fun()}
+{encoding, unicode/latin1} (or unicode/latin1)</pre>
+
+ <p>Options <c>binary</c> and <c>encoding</c> are common for all I/O servers
+ in OTP, while <c>echo</c> and <c>expand</c> are valid only for this I/O
+ server. Option <c>unicode</c> notifies how characters are put on the
+ physical I/O device, that is, if the terminal itself is Unicode-aware.
+ It does not affect how characters are sent in the I/O protocol, where
+ each request contains encoding information for the provided or returned
+ data.</p>
+
+ <p>The I/O server is to send one of the following as <c>Reply</c>:</p>
+
+ <pre>
+ok
+{error, Error}</pre>
+
+ <p>An error (preferably <c>enotsup</c>) is to be expected if the option is
+ not supported by the I/O server (like if an <c>echo</c> option is sent in
+ a <c>setopts</c> request to a plain file).</p>
+
+ <p>To retrieve options, the following request is used:</p>
+
+ <pre>
+getopts</pre>
+
+ <p>This request asks for a complete list of all options supported by the
+ I/O server as well as their current values.</p>
+
+ <p>The I/O server replies:</p>
+
+ <pre>
+OptList
+{error, Error}</pre>
+
+ <list type="bulleted">
+ <item><c>OptList</c> is a list of tuples <c>{Option, Value}</c>, where
+ <c>Option</c> always is an atom.</item>
+ </list>
+ </section>
+
+ <section>
+ <title>Multiple I/O Requests</title>
+ <p>The <c>Request</c> element can in itself contain many <c>Request</c>s
+ by using the following format:</p>
+
+ <pre>
+{requests, Requests}</pre>
+
+ <list type="bulleted">
+ <item><c>Requests</c> is a list of valid <c>io_request</c> tuples for the
+ protocol. They must be executed in the order that they appear in
+ the list. The execution is to continue until one of the requests results
+ in an error or the list is consumed. The result of the last request is
+ sent back to the client.</item>
+ </list>
+
+ <p>The I/O server can, for a list of requests, send any of the following
+ valid results in the reply, depending on the requests in the list:</p>
+
+ <pre>
+ok
+{ok, Data}
+{ok, Options}
+{error, Error}</pre>
+ </section>
+
+ <section>
+ <title>Optional I/O Request</title>
+ <p>The following I/O request is optional to implement and a client is to
+ be prepared for an error return:</p>
+
+ <pre>
+{get_geometry, Geometry}</pre>
+
+ <list type="bulleted">
+ <item><c>Geometry</c> is the atom <c>rows</c> or the atom
+ <c>columns</c>.</item>
+ </list>
+
+ <p>The I/O server is to send the <c>Reply</c> as:</p>
+
+ <pre>
+{ok, N}
+{error, Error}</pre>
+
+ <list type="bulleted">
+ <item><c>N</c> is the number of character rows or columns that the I/O
+ device has, if applicable to the I/O device handled by the I/O server,
+ otherwise <c>{error, enotsup}</c> is a good answer.</item>
+ </list>
+ </section>
+
+ <section>
+ <title>Unimplemented Request Types</title>
+ <p>If an I/O server encounters a request that it does not recognize (that
+ is, the <c>io_request</c> tuple has the expected format, but the
+ <c>Request</c> is unknown), the I/O server is to send a valid reply with
+ the error tuple:</p>
+
+ <pre>
+{error, request}</pre>
+
+ <p>This makes it possible to extend the protocol with optional requests
+ and for the clients to be somewhat backward compatible.</p>
+ </section>
+
+ <section>
+ <title>An Annotated and Working Example I/O Server</title>
+ <marker id="example_io_server"/>
+ <p>An I/O server is any process capable of handling the I/O protocol. There
+ is no generic I/O server behavior, but could well be. The framework is
+ simple, a process handling incoming requests, usually both I/O-requests
+ and other I/O device-specific requests (positioning, closing, and so on).
+ </p>
+
+ <p>The example I/O server stores characters in an ETS table, making
+ up a fairly crude RAM file.</p>
+
+ <p>The module begins with the usual directives, a function to start the
+ I/O server and a main loop handling the requests:</p>
+
+ <code>
-module(ets_io_server).
-export([start_link/0, init/0, loop/1, until_newline/3, until_enough/3]).
@@ -490,39 +551,34 @@ loop(State) -&gt;
?MODULE:loop(State#state{position = 0});
_Unknown -&gt;
?MODULE:loop(State)
- end.
-</code>
-
-<p>The main loop receives messages from the client (which might be using
-the <seealso marker="stdlib:io">io</seealso> module to send requests).
-For each request the function
-<c>request/2</c> is called and a reply is eventually sent using the <c>reply/3</c>
-function.</p>
+ end.</code>
-<p>The &quot;private&quot; message <c>{From, rewind}</c> results in the
-current position in the pseudo-file to be reset to 0 (the beginning of
-the &quot;file&quot;). This is a typical example of IO device-specific
-messages not being part of the I/O-protocol. It is usually a bad idea
-to embed such private messages in <c>io_request</c> tuples, as that might be
-confusing to the reader.</p>
+ <p>The main loop receives messages from the client (which can use the
+ the <seealso marker="stdlib:io"><c>io</c></seealso> module to send
+ requests). For each request, the function <c>request/2</c> is called and a
+ reply is eventually sent using function <c>reply/3</c>.</p>
-<p>Let us look at the reply function first...</p>
+ <p>The &quot;private&quot; message <c>{From, rewind}</c> results in the
+ current position in the pseudo-file to be reset to <c>0</c> (the beginning
+ of the &quot;file&quot;). This is a typical example of I/O device-specific
+ messages not being part of the I/O protocol. It is usually a bad idea to
+ embed such private messages in <c>io_request</c> tuples, as that can
+ confuse the reader.</p>
-<code>
+ <p>First, we examine the reply function:</p>
+ <code>
reply(From, ReplyAs, Reply) -&gt;
- From ! {io_reply, ReplyAs, Reply}.
+ From ! {io_reply, ReplyAs, Reply}.</code>
-</code>
+ <p>It sends the <c>io_reply</c> tuple back to the client, providing element
+ <c>ReplyAs</c> received in the request along with the result of the
+ request, as described earlier.</p>
-<p>Simple enough, it sends the <c>io_reply</c> tuple back to the client,
-providing the <c>ReplyAs</c> element received in the request along with the
-result of the request, as described above.</p>
+ <p>We need to handle some requests. First the requests for writing
+ characters:</p>
-<p>Now look at the different requests we need to handle. First the
-requests for writing characters:</p>
-
-<code>
+ <code>
request({put_chars, Encoding, Chars}, State) -&gt;
put_chars(unicode:characters_to_list(Chars,Encoding),State);
request({put_chars, Encoding, Module, Function, Args}, State) -&gt;
@@ -531,23 +587,22 @@ request({put_chars, Encoding, Module, Function, Args}, State) -&gt;
catch
_:_ -&gt;
{error, {error,Function}, State}
- end;
-</code>
+ end;</code>
-<p>The <c>Encoding</c> tells us how the characters in the request are
-represented. We want to store the characters as lists in the
-ETS table, so we convert them to lists using the
-<seealso marker="stdlib:unicode#characters_to_list/2"><c>unicode:characters_to_list/2</c></seealso> function. The conversion function
-conveniently accepts the encoding types <c>unicode</c> or <c>latin1</c>, so we can
-use <c>Encoding</c> directly.</p>
+ <p>The <c>Encoding</c> says how the characters in the request are
+ represented. We want to store the characters as lists in the ETS
+ table, so we convert them to lists using function
+ <seealso marker="stdlib:unicode#characters_to_list/2"><c>unicode:characters_to_list/2</c></seealso>.
+ The conversion function conveniently accepts the encoding types
+ <c>unicode</c> and <c>latin1</c>, so we can use <c>Encoding</c> directly.</p>
-<p>When <c>Module</c>, <c>Function</c> and <c>Arguments</c> are provided, we simply apply it
-and do the same thing with the result as if the data was provided
-directly.</p>
+ <p>When <c>Module</c>, <c>Function</c>, and <c>Arguments</c> are provided,
+ we apply it and do the same with the result as if the data was provided
+ directly.</p>
-<p>Let us handle the requests for retrieving data too:</p>
+ <p>We handle the requests for retrieving data:</p>
-<code>
+ <code>
request({get_until, Encoding, _Prompt, M, F, As}, State) -&gt;
get_until(Encoding, M, F, As, State);
request({get_chars, Encoding, _Prompt, N}, State) -&gt;
@@ -555,17 +610,16 @@ request({get_chars, Encoding, _Prompt, N}, State) -&gt;
get_until(Encoding, ?MODULE, until_enough, [N], State);
request({get_line, Encoding, _Prompt}, State) -&gt;
%% To simplify the code, get_line is implemented using get_until
- get_until(Encoding, ?MODULE, until_newline, [$\n], State);
-</code>
+ get_until(Encoding, ?MODULE, until_newline, [$\n], State);</code>
-<p>Here we have cheated a little by more or less only implementing
-<c>get_until</c> and using internal helpers to implement <c>get_chars</c> and
-<c>get_line</c>. In production code, this might be too inefficient, but that
-of course depends on the frequency of the different requests. Before
-we start actually implementing the functions <c>put_chars/2</c> and
-<c>get_until/5</c>, let us look into the few remaining requests:</p>
+ <p>Here we have cheated a little by more or less only implementing
+ <c>get_until</c> and using internal helpers to implement <c>get_chars</c>
+ and <c>get_line</c>. In production code, this can be inefficient, but
+ that depends on the frequency of the different requests. Before we start
+ implementing functions <c>put_chars/2</c> and <c>get_until/5</c>, we
+ examine the few remaining requests:</p>
-<code>
+ <code>
request({get_geometry,_}, State) -&gt;
{error, {error,enotsup}, State};
request({setopts, Opts}, State) -&gt;
@@ -573,23 +627,23 @@ request({setopts, Opts}, State) -&gt;
request(getopts, State) -&gt;
getopts(State);
request({requests, Reqs}, State) -&gt;
- multi_request(Reqs, {ok, ok, State});
-</code>
+ multi_request(Reqs, {ok, ok, State});</code>
-<p>The <c>get_geometry</c> request has no meaning for this I/O server, so the
-reply will be <c>{error, enotsup}</c>. The only option we handle is the
-<c>binary</c>/<c>list</c> option, which is done in separate functions.</p>
+ <p>Request <c>get_geometry</c> has no meaning for this I/O server, so the
+ reply is <c>{error, enotsup}</c>. The only option we handle is
+ <c>binary</c>/<c>list</c>, which is done in separate functions.</p>
-<p>The multi-request tag (<c>requests</c>) is handled in a separate loop
-function applying the requests in the list one after another,
-returning the last result.</p>
+ <p>The multi-request tag (<c>requests</c>) is handled in a separate loop
+ function applying the requests in the list one after another, returning
+ the last result.</p>
-<p>What is left is to handle backward compatibility and the <seealso marker="kernel:file">file</seealso> module
-(which uses the old requests until backward compatibility with pre-R13
-nodes is no longer needed). Note that the I/O server will not work with
-a simple <c>file:write/2</c> if these are not added:</p>
+ <p>We need to handle backward compatibility and the
+ <seealso marker="kernel:file"><c>file</c></seealso> module (which
+ uses the old requests until backward compatibility with pre-R13 nodes is
+ no longer needed). Notice that the I/O server does not work with a simple
+ <c>file:write/2</c> if these are not added:</p>
-<code>
+ <code>
request({put_chars,Chars}, State) -&gt;
request({put_chars,latin1,Chars}, State);
request({put_chars,M,F,As}, State) -&gt;
@@ -599,38 +653,35 @@ request({get_chars,Prompt,N}, State) -&gt;
request({get_line,Prompt}, State) -&gt;
request({get_line,latin1,Prompt}, State);
request({get_until, Prompt,M,F,As}, State) -&gt;
- request({get_until,latin1,Prompt,M,F,As}, State);
-</code>
+ request({get_until,latin1,Prompt,M,F,As}, State);</code>
-<p>OK, what is left now is to return <c>{error, request}</c> if the request is
-not recognized:</p>
+ <p><c>{error, request}</c> must be returned if the request is not
+ recognized:</p>
-<code>
+ <code>
request(_Other, State) -&gt;
- {error, {error, request}, State}.
-</code>
+ {error, {error, request}, State}.</code>
-<p>Let us move further and actually handle the different requests, first
-the fairly generic multi-request type:</p>
+ <p>Next we handle the different requests, first the fairly generic
+ multi-request type:</p>
-<code>
+ <code>
multi_request([R|Rs], {ok, _Res, State}) -&gt;
multi_request(Rs, request(R, State));
multi_request([_|_], Error) -&gt;
Error;
multi_request([], Result) -&gt;
- Result.
-</code>
+ Result.</code>
-<p>We loop through the requests one at the time, stopping when we either
-encounter an error or the list is exhausted. The last return value is
-sent back to the client (it is first returned to the main loop and then
-sent back by the function <c>io_reply</c>).</p>
+ <p>We loop through the requests one at the time, stopping when we either
+ encounter an error or the list is exhausted. The last return value is
+ sent back to the client (it is first returned to the main loop and then
+ sent back by function <c>io_reply</c>).</p>
-<p>The <c>getopts</c> and <c>setopts</c> requests are also simple to handle, we just
-change or read our state record:</p>
+ <p>Requests <c>getopts</c> and <c>setopts</c> are also simple to handle.
+ We only change or read the state record:</p>
-<code>
+ <code>
setopts(Opts0,State) -&gt;
Opts = proplists:unfold(
proplists:substitute_negations(
@@ -662,46 +713,44 @@ getopts(#state{mode=M} = S) -&gt;
true;
_ -&gt;
false
- end}],S}.
-</code>
+ end}],S}.</code>
-<p>As a convention, all I/O servers handle both <c>{setopts, [binary]}</c>,
-<c>{setopts, [list]}</c> and <c>{setopts,[{binary, boolean()}]}</c>, hence the trick
-with <c>proplists:substitute_negations/2</c> and <c>proplists:unfold/1</c>. If
-invalid options are sent to us, we send <c>{error, enotsup}</c> back to the
-client.</p>
+ <p>As a convention, all I/O servers handle both <c>{setopts, [binary]}</c>,
+ <c>{setopts, [list]}</c>, and <c>{setopts,[{binary, boolean()}]}</c>,
+ hence the trick with <c>proplists:substitute_negations/2</c> and
+ <c>proplists:unfold/1</c>. If invalid options are sent to us, we send
+ <c>{error, enotsup}</c> back to the client.</p>
-<p>The <c>getopts</c> request should return a list of <c>{Option, Value}</c> tuples,
-which has the twofold function of providing both the current values
-and the available options of this I/O server. We have only one option,
-and hence return that.</p>
+ <p>Request <c>getopts</c> is to return a list of <c>{Option, Value}</c>
+ tuples. This has the twofold function of providing both the current values
+ and the available options of this I/O server. We have only one option, and
+ hence return that.</p>
-<p>So far our I/O server has been fairly generic (except for the <c>rewind</c>
-request handled in the main loop and the creation of an ETS table).
-Most I/O servers contain code similar to the one above.</p>
+ <p>So far this I/O server is fairly generic (except for request
+ <c>rewind</c> handled in the main loop and the creation of an ETS
+ table). Most I/O servers contain code similar to this one.</p>
-<p>To make the example runnable, we now start implementing the actual
-reading and writing of the data to/from the ETS table. First the
-<c>put_chars/3</c> function:</p>
+ <p>To make the example runnable, we start implementing the reading and
+ writing of the data to/from the ETS table. First function
+ <c>put_chars/3</c>:</p>
-<code>
+ <code>
put_chars(Chars, #state{table = T, position = P} = State) -&gt;
R = P div ?CHARS_PER_REC,
C = P rem ?CHARS_PER_REC,
[ apply_update(T,U) || U &lt;- split_data(Chars, R, C) ],
- {ok, ok, State#state{position = (P + length(Chars))}}.
-</code>
+ {ok, ok, State#state{position = (P + length(Chars))}}.</code>
-<p>We already have the data as (Unicode) lists and therefore just split
-the list in runs of a predefined size and put each run in the
-table at the current position (and forward). The functions
-<c>split_data/3</c> and <c>apply_update/2</c> are implemented below.</p>
+ <p>We already have the data as (Unicode) lists and therefore only split
+ the list in runs of a predefined size and put each run in the table at
+ the current position (and forward). Functions <c>split_data/3</c> and
+ <c>apply_update/2</c> are implemented below.</p>
-<p>Now we want to read data from the table. The <c>get_until/5</c> function reads
-data and applies the function until it says it is done. The result is
-sent back to the client:</p>
+ <p>Now we want to read data from the table. Function <c>get_until/5</c>
+ reads data and applies the function until it says that it is done. The
+ result is sent back to the client:</p>
-<code>
+ <code>
get_until(Encoding, Mod, Func, As,
#state{position = P, mode = M, table = T} = State) -&gt;
case get_loop(Mod,Func,As,T,P,[]) of
@@ -737,34 +786,34 @@ get_loop(M,F,A,T,P,C) -&gt;
get_loop(M,F,A,T,NewP,NewC);
_ -&gt;
{error,F}
- end.
-</code>
-
-<p>Here we also handle the mode (<c>binary</c> or <c>list</c>) that can be set by
-the <c>setopts</c> request. By default, all OTP I/O servers send data back to
-the client as lists, but switching mode to <c>binary</c> might increase
-efficiency if the I/O server handles it in an appropriate way. The
-implementation of <c>get_until</c> is hard to get efficient as the supplied
-function is defined to take lists as arguments, but <c>get_chars</c> and
-<c>get_line</c> can be optimized for binary mode. This example does not
-optimize anything however. It is important though that the returned
-data is of the right type depending on the options set, so we convert
-the lists to binaries in the correct encoding <em>if possible</em>
-before returning. The function supplied in the <c>get_until</c> request tuple may,
-as its final result return anything, so only functions actually
-returning lists can get them converted to binaries. If the request
-contained the encoding tag <c>unicode</c>, the lists can contain all Unicode
-codepoints and the binaries should be in UTF-8, if the encoding tag
-was <c>latin1</c>, the client should only get characters in the range
-0..255. The function <c>check/2</c> takes care of not returning arbitrary
-Unicode codepoints in lists if the encoding was given as <c>latin1</c>. If
-the function did not return a list, the check cannot be performed and
-the result will be that of the supplied function untouched.</p>
-
-<p>Now we are more or less done. We implement the utility functions below
-to actually manipulate the table:</p>
-
-<code>
+ end.</code>
+
+ <p>Here we also handle the mode (<c>binary</c> or <c>list</c>) that can be
+ set by request <c>setopts</c>. By default, all OTP I/O servers send data
+ back to the client as lists, but switching mode to <c>binary</c> can
+ increase efficiency if the I/O server handles it in an appropriate way.
+ The implementation of <c>get_until</c> is difficult to get efficient, as
+ the supplied function is defined to take lists as arguments, but
+ <c>get_chars</c> and <c>get_line</c> can be optimized for binary mode.
+ However, this example does not optimize anything.</p>
+
+ <p>It is important though that the returned data is of the correct type
+ depending on the options set. We therefore convert the lists to binaries
+ in the correct encoding <em>if possible</em> before returning. The
+ function supplied in the <c>get_until</c> request tuple can, as its final
+ result return anything, so only functions returning lists can get them
+ converted to binaries. If the request contains encoding tag
+ <c>unicode</c>, the lists can contain all Unicode code points and the
+ binaries are to be in UTF-8. If the encoding tag is <c>latin1</c>, the
+ client is only to get characters in the range <c>0..255</c>. Function
+ <c>check/2</c> takes care of not returning arbitrary Unicode code points
+ in lists if the encoding was specified as <c>latin1</c>. If the function
+ does not return a list, the check cannot be performed and the result is
+ that of the supplied function untouched.</p>
+
+ <p>To manipulate the table we implement the following utility functions:</p>
+
+ <code>
check(unicode, List) -&gt;
List;
check(latin1, List) -&gt;
@@ -775,18 +824,16 @@ check(latin1, List) -&gt;
catch
throw:_ -&gt;
{error,{cannot_convert, unicode, latin1}}
- end.
-</code>
+ end.</code>
-<p>The function check takes care of providing an error tuple if Unicode
-codepoints above 255 is to be returned if the client requested
-latin1.</p>
+ <p>The function check provides an error tuple if Unicode code points &gt;
+ 255 are to be returned if the client requested <c>latin1</c>.</p>
-<p>The two functions <c>until_newline/3</c> and <c>until_enough/3</c> are helpers used
-together with the <c>get_until/5</c> function to implement <c>get_chars</c> and
-<c>get_line</c> (inefficiently):</p>
-
-<code>
+ <p>The two functions <c>until_newline/3</c> and <c>until_enough/3</c> are
+ helpers used together with function <c>get_until/5</c> to implement
+ <c>get_chars</c> and <c>get_line</c> (inefficiently):</p>
+
+ <code>
until_newline([],eof,_MyStopCharacter) -&gt;
{done,eof,[]};
until_newline(ThisFar,eof,_MyStopCharacter) -&gt;
@@ -810,16 +857,15 @@ until_enough(ThisFar,CharList,N)
{Res,Rest} = my_split(N,ThisFar ++ CharList, []),
{done,Res,Rest};
until_enough(ThisFar,CharList,_N) -&gt;
- {more,ThisFar++CharList}.
-</code>
+ {more,ThisFar++CharList}.</code>
-<p>As can be seen, the functions above are just the type of functions
-that should be provided in <c>get_until</c> requests.</p>
+ <p>As can be seen, the functions above are just the type of functions that
+ are to be provided in <c>get_until</c> requests.</p>
-<p>Now we only need to read and write the table in an appropriate way to
-complete the I/O server:</p>
+ <p>To complete the I/O server, we only need to read and write the table in
+ an appropriate way:</p>
-<code>
+ <code>
get(P,Tab) -&gt;
R = P div ?CHARS_PER_REC,
C = P rem ?CHARS_PER_REC,
@@ -856,18 +902,16 @@ apply_update(Table, {Row, Col, List}) -&gt;
{Part1,_} = my_split(Col,OldData,[]),
{_,Part2} = my_split(Col+length(List),OldData,[]),
ets:insert(Table,{Row, Part1 ++ List ++ Part2})
- end.
-</code>
-
-<p>The table is read or written in chunks of <c>?CHARS_PER_REC</c>, overwriting
-when necessary. The implementation is obviously not efficient, it is
-just working.</p>
-
-<p>This concludes the example. It is fully runnable and you can read or
-write to the I/O server by using i.e. the <seealso marker="stdlib:io">io</seealso> module or even the <seealso marker="kernel:file">file</seealso>
-module. It is as simple as that to implement a fully fledged I/O server
-in Erlang.</p>
-</section>
+ end.</code>
+
+ <p>The table is read or written in chunks of <c>?CHARS_PER_REC</c>,
+ overwriting when necessary. The implementation is clearly not efficient,
+ it is just working.</p>
+
+ <p>This concludes the example. It is fully runnable and you can read or
+ write to the I/O server by using, for example, the
+ <seealso marker="stdlib:io"><c>io</c></seealso> module or even the
+ <seealso marker="kernel:file"><c>file</c></seealso> module. It is
+ as simple as that to implement a fully fledged I/O server in Erlang.</p>
+ </section>
</chapter>
-
-
diff --git a/lib/stdlib/doc/src/lib.xml b/lib/stdlib/doc/src/lib.xml
index ac41987eaf..58dad7c9e0 100644
--- a/lib/stdlib/doc/src/lib.xml
+++ b/lib/stdlib/doc/src/lib.xml
@@ -29,68 +29,73 @@
<rev></rev>
</header>
<module>lib</module>
- <modulesummary>A number of useful library functions</modulesummary>
+ <modulesummary>Useful library functions.</modulesummary>
<description>
<warning>
- <p>This module is retained for compatibility. It may disappear
- without warning in a future release.</p>
+ <p>This module is retained for backward compatibility. It can disappear
+ without warning in a future Erlang/OTP release.</p>
</warning>
</description>
+
<funcs>
<func>
- <name name="flush_receive" arity="0"/>
- <fsummary>Flush messages</fsummary>
- <desc>
- <p>Flushes the message buffer of the current process.</p>
- </desc>
- </func>
- <func>
<name name="error_message" arity="2"/>
- <fsummary>Print error message</fsummary>
+ <fsummary>Print error message.</fsummary>
<desc>
<p>Prints error message <c><anno>Args</anno></c> in accordance with
- <c><anno>Format</anno></c>. Similar to <c>io:format/2</c>, see
- <seealso marker="io#fwrite/1">io(3)</seealso>.</p>
+ <c><anno>Format</anno></c>. Similar to
+ <seealso marker="io#format/1"><c>io:format/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="progname" arity="0"/>
- <fsummary>Return name of Erlang start script</fsummary>
+ <name name="flush_receive" arity="0"/>
+ <fsummary>Flush messages.</fsummary>
<desc>
- <p>Returns the name of the script that started the current
- Erlang session.</p>
+ <p>Flushes the message buffer of the current process.</p>
</desc>
</func>
+
<func>
<name name="nonl" arity="1"/>
- <fsummary>Remove last newline</fsummary>
+ <fsummary>Remove last newline.</fsummary>
<desc>
<p>Removes the last newline character, if any, in
<c><anno>String1</anno></c>.</p>
</desc>
</func>
+
+ <func>
+ <name name="progname" arity="0"/>
+ <fsummary>Return name of Erlang start script.</fsummary>
+ <desc>
+ <p>Returns the name of the script that started the current
+ Erlang session.</p>
+ </desc>
+ </func>
+
<func>
<name name="send" arity="2"/>
- <fsummary>Send a message</fsummary>
+ <fsummary>Send a message.</fsummary>
<desc>
- <p>This function to makes it possible to send a message using
- the <c>apply/3</c> BIF.</p>
+ <p>Makes it possible to send a message using the <c>apply/3</c> BIF.</p>
</desc>
</func>
+
<func>
<name name="sendw" arity="2"/>
- <fsummary>Send a message and wait for an answer</fsummary>
+ <fsummary>Send a message and wait for an answer.</fsummary>
<desc>
- <p>As <c>send/2</c>, but waits for an answer. It is implemented
- as follows:</p>
+ <p>As <seealso marker="#send/2"><c>send/2</c></seealso>,
+ but waits for an answer. It is implemented as follows:</p>
<code type="none">
sendw(To, Msg) ->
To ! {self(),Msg},
receive
Reply -> Reply
end.</code>
- <p>The message returned is not necessarily a reply to the
- message sent.</p>
+ <p>The returned message is not necessarily a reply to the sent
+ message.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/lists.xml b/lib/stdlib/doc/src/lists.xml
index 03d0063599..60dbae70c2 100644
--- a/lib/stdlib/doc/src/lists.xml
+++ b/lib/stdlib/doc/src/lists.xml
@@ -25,11 +25,11 @@
<title>lists</title>
<prepared>Robert Virding</prepared>
<docno>1</docno>
- <date>96-09-28</date>
+ <date>1996-09-28</date>
<rev>A</rev>
</header>
<module>lists</module>
- <modulesummary>List Processing Functions</modulesummary>
+ <modulesummary>List processing functions.</modulesummary>
<description>
<p>This module contains functions for list processing.</p>
@@ -44,132 +44,156 @@
<p>Whenever an <marker
id="ordering_function"></marker><em>ordering function</em>
<c>F</c> is expected as argument, it is assumed that the
- following properties hold of <c>F</c> for all x, y and z:</p>
+ following properties hold of <c>F</c> for all x, y, and z:</p>
+
<list type="bulleted">
- <item><p>if x <c>F</c> y and y <c>F</c> x then x = y (<c>F</c>
- is antisymmetric);</p>
+ <item><p>If x <c>F</c> y and y <c>F</c> x, then x = y (<c>F</c>
+ is antisymmetric).</p>
</item>
- <item><p>if x <c>F</c> y and y <c>F</c> z then x <c>F</c> z
- (<c>F</c> is transitive);</p>
+ <item><p>If x <c>F</c> y and y <c>F</c> z, then x <c>F</c> z
+ (<c>F</c> is transitive).</p>
</item>
<item><p>x <c>F</c> y or y <c>F</c> x (<c>F</c> is total).</p>
</item>
</list>
- <p>An example of a typical ordering function is less than or equal
- to, <c>=&lt;/2</c>.</p>
+ <p>An example of a typical ordering function is less than or equal
+ to: <c>=&lt;/2</c>.</p>
</description>
+
<funcs>
<func>
<name name="all" arity="2"/>
- <fsummary>Return true if all elements in the list satisfy<c>Pred</c></fsummary>
+ <fsummary>Return <c>true</c> if all elements in a list satisfy
+ <c>Pred</c>.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns
- <c>true</c> for all elements <c><anno>Elem</anno></c> in <c><anno>List</anno></c>,
- otherwise <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>Pred</anno>(<anno>Elem</anno>)</c>
+ returns <c>true</c> for all elements <c><anno>Elem</anno></c> in
+ <c><anno>List</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="any" arity="2"/>
- <fsummary>Return true if any of the elements in the list satisfies<c>Pred</c></fsummary>
+ <fsummary>Return <c>true</c> if any of the elements in a list
+ satisfies <c>Pred</c>.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns
- <c>true</c> for at least one element <c><anno>Elem</anno></c> in
- <c><anno>List</anno></c>.</p>
+ <p>Returns <c>true</c> if <c><anno>Pred</anno>(<anno>Elem</anno>)</c>
+ returns <c>true</c> for at least one element <c><anno>Elem</anno></c>
+ in <c><anno>List</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="append" arity="1"/>
- <fsummary>Append a list of lists</fsummary>
+ <fsummary>Append a list of lists.</fsummary>
<desc>
- <p>Returns a list in which all the sub-lists of
- <c><anno>ListOfLists</anno></c> have been appended. For example:</p>
+ <p>Returns a list in which all the sublists of
+ <c><anno>ListOfLists</anno></c> have been appended.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:append([[1, 2, 3], [a, b], [4, 5, 6]]).</input>
[1,2,3,a,b,4,5,6]</pre>
</desc>
</func>
+
<func>
<name name="append" arity="2"/>
- <fsummary>Append two lists</fsummary>
+ <fsummary>Append two lists.</fsummary>
<desc>
- <p>Returns a new list <c><anno>List3</anno></c> which is made from
+ <p>Returns a new list <c><anno>List3</anno></c>, which is made from
the elements of <c><anno>List1</anno></c> followed by the elements of
- <c><anno>List2</anno></c>. For example:</p>
+ <c><anno>List2</anno></c>.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:append("abc", "def").</input>
"abcdef"</pre>
<p><c>lists:append(A, B)</c> is equivalent to <c>A ++ B</c>.</p>
</desc>
</func>
+
<func>
<name name="concat" arity="1"/>
- <fsummary>Concatenate a list of atoms</fsummary>
+ <fsummary>Concatenate a list of atoms.</fsummary>
<desc>
- <p>Concatenates the text representation of the elements
- of <c><anno>Things</anno></c>. The elements of <c><anno>Things</anno></c> can be atoms,
- integers, floats or strings.</p>
+ <p>Concatenates the text representation of the elements of
+ <c><anno>Things</anno></c>. The elements of <c><anno>Things</anno></c>
+ can be atoms, integers, floats, or strings.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:concat([doc, '/', file, '.', 3]).</input>
"doc/file.3"</pre>
</desc>
</func>
+
<func>
<name name="delete" arity="2"/>
- <fsummary>Delete an element from a list</fsummary>
+ <fsummary>Delete an element from a list.</fsummary>
<desc>
<p>Returns a copy of <c><anno>List1</anno></c> where the first element
matching <c><anno>Elem</anno></c> is deleted, if there is such an
element.</p>
</desc>
</func>
+
<func>
<name name="droplast" arity="1"/>
- <fsummary>Drop the last element of a list</fsummary>
+ <fsummary>Drop the last element of a list.</fsummary>
<desc>
- <p>Drops the last element of a <c><anno>List</anno></c>. The list should
- be non-empty, otherwise the function will crash with a <c>function_clause</c></p>
+ <p>Drops the last element of a <c><anno>List</anno></c>. The list is to
+ be non-empty, otherwise the function crashes with a
+ <c>function_clause</c>.</p>
</desc>
</func>
+
<func>
<name name="dropwhile" arity="2"/>
- <fsummary>Drop elements from a list while a predicate is true</fsummary>
+ <fsummary>Drop elements from a list while a predicate is <c>true</c>.
+ </fsummary>
<desc>
- <p>Drops elements <c><anno>Elem</anno></c> from <c><anno>List1</anno></c> while
- <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns <c>true</c> and returns
- the remaining list.</p>
+ <p>Drops elements <c><anno>Elem</anno></c> from
+ <c><anno>List1</anno></c> while
+ <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns <c>true</c> and
+ returns the remaining list.</p>
</desc>
</func>
+
<func>
<name name="duplicate" arity="2"/>
- <fsummary>Make N copies of element</fsummary>
+ <fsummary>Make <c>N</c> copies of element.</fsummary>
<desc>
- <p>Returns a list which contains <c><anno>N</anno></c> copies of the term
- <c><anno>Elem</anno></c>. For example:</p>
+ <p>Returns a list containing <c><anno>N</anno></c> copies of term
+ <c><anno>Elem</anno></c>.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:duplicate(5, xx).</input>
[xx,xx,xx,xx,xx]</pre>
</desc>
</func>
+
<func>
<name name="filter" arity="2"/>
- <fsummary>Choose elements which satisfy a predicate</fsummary>
+ <fsummary>Select elements that satisfy a predicate.</fsummary>
<desc>
- <p><c><anno>List2</anno></c> is a list of all elements <c><anno>Elem</anno></c> in
- <c><anno>List1</anno></c> for which <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns
- <c>true</c>.</p>
+ <p><c><anno>List2</anno></c> is a list of all elements
+ <c><anno>Elem</anno></c> in <c><anno>List1</anno></c> for which
+ <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns <c>true</c>.</p>
</desc>
</func>
+
<func>
<name name="filtermap" arity="2"/>
- <fsummary>Filter and map elements which satisfy a function</fsummary>
- <desc>
- <p>Calls <c><anno>Fun</anno>(<anno>Elem</anno>)</c> on successive elements <c>Elem</c>
- of <c><anno>List1</anno></c>. <c><anno>Fun</anno>/2</c> must return either a boolean
- or a tuple <c>{true, <anno>Value</anno>}</c>. The function returns the list of elements
- for which <c><anno>Fun</anno></c> returns a new value, where a value of <c>true</c>
- is synonymous with <c>{true, <anno>Elem</anno>}</c>.</p>
- <p>That is, <c>filtermap</c> behaves as if it had been defined as follows:</p>
+ <fsummary>Filter and map elements that satisfy a function.</fsummary>
+ <desc>
+ <p>Calls <c><anno>Fun</anno>(<anno>Elem</anno>)</c> on successive
+ elements <c>Elem</c> of <c><anno>List1</anno></c>.
+ <c><anno>Fun</anno>/2</c> must return either a Boolean or a tuple
+ <c>{true, <anno>Value</anno>}</c>. The function returns the list of
+ elements for which <c><anno>Fun</anno></c> returns a new value, where
+ a value of <c>true</c> is synonymous with
+ <c>{true, <anno>Elem</anno>}</c>.</p>
+ <p>That is, <c>filtermap</c> behaves as if it had been defined as
+ follows:</p>
<code type="none">
filtermap(Fun, List1) ->
lists:foldr(fun(Elem, Acc) ->
@@ -179,26 +203,29 @@ filtermap(Fun, List1) ->
{true,Value} -> [Value|Acc]
end
end, [], List1).</code>
- <p>Example:</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:filtermap(fun(X) -> case X rem 2 of 0 -> {true, X div 2}; _ -> false end end, [1,2,3,4,5]).</input>
[1,2]</pre>
</desc>
</func>
+
<func>
<name name="flatlength" arity="1"/>
- <fsummary>Length of flattened deep list</fsummary>
+ <fsummary>Length of flattened deep list.</fsummary>
<desc>
- <p>Equivalent to <c>length(flatten(<anno>DeepList</anno>))</c>, but more
- efficient.</p>
+ <p>Equivalent to <c>length(flatten(<anno>DeepList</anno>))</c>, but
+ more efficient.</p>
</desc>
</func>
+
<func>
<name name="flatmap" arity="2"/>
- <fsummary>Map and flatten in one pass</fsummary>
+ <fsummary>Map and flatten in one pass.</fsummary>
<desc>
- <p>Takes a function from <c><anno>A</anno></c>s to lists of <c><anno>B</anno></c>s, and a
- list of <c><anno>A</anno></c>s (<c><anno>List1</anno></c>) and produces a list of
+ <p>Takes a function from <c><anno>A</anno></c>s to lists of
+ <c><anno>B</anno></c>s, and a list of <c><anno>A</anno></c>s
+ (<c><anno>List1</anno></c>) and produces a list of
<c><anno>B</anno></c>s by applying the function to every element in
<c><anno>List1</anno></c> and appending the resulting lists.</p>
<p>That is, <c>flatmap</c> behaves as if it had been defined as
@@ -206,37 +233,42 @@ filtermap(Fun, List1) ->
<code type="none">
flatmap(Fun, List1) ->
append(map(Fun, List1)).</code>
- <p>Example:</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:flatmap(fun(X)->[X,X] end, [a,b,c]).</input>
[a,a,b,b,c,c]</pre>
</desc>
</func>
+
<func>
<name name="flatten" arity="1"/>
- <fsummary>Flatten a deep list</fsummary>
+ <fsummary>Flatten a deep list.</fsummary>
<desc>
<p>Returns a flattened version of <c><anno>DeepList</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="flatten" arity="2"/>
- <fsummary>Flatten a deep list</fsummary>
+ <fsummary>Flatten a deep list.</fsummary>
<desc>
- <p>Returns a flattened version of <c><anno>DeepList</anno></c> with the tail
+ <p>Returns a flattened version of <c><anno>DeepList</anno></c> with tail
<c><anno>Tail</anno></c> appended.</p>
</desc>
</func>
+
<func>
<name name="foldl" arity="3"/>
- <fsummary>Fold a function over a list</fsummary>
- <desc>
- <p>Calls <c><anno>Fun</anno>(<anno>Elem</anno>, <anno>AccIn</anno>)</c> on successive elements <c>A</c>
- of <c><anno>List</anno></c>, starting with <c><anno>AccIn</anno> == <anno>Acc0</anno></c>.
- <c><anno>Fun</anno>/2</c> must return a new accumulator which is passed to
- the next call. The function returns the final value of
- the accumulator. <c><anno>Acc0</anno></c> is returned if the list is empty.
- For example:</p>
+ <fsummary>Fold a function over a list.</fsummary>
+ <desc>
+ <p>Calls <c><anno>Fun</anno>(<anno>Elem</anno>, <anno>AccIn</anno>)</c>
+ on successive elements <c>A</c> of <c><anno>List</anno></c>, starting
+ with <c><anno>AccIn</anno> == <anno>Acc0</anno></c>.
+ <c><anno>Fun</anno>/2</c> must return a new accumulator, which is
+ passed to the next call. The function returns the final value of
+ the accumulator. <c><anno>Acc0</anno></c> is returned if the list is
+ empty.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:foldl(fun(X, Sum) -> X + Sum end, 0, [1,2,3,4,5]).</input>
15
@@ -244,12 +276,14 @@ flatmap(Fun, List1) ->
120</pre>
</desc>
</func>
+
<func>
<name name="foldr" arity="3"/>
- <fsummary>Fold a function over a list</fsummary>
+ <fsummary>Fold a function over a list.</fsummary>
<desc>
- <p>Like <c>foldl/3</c>, but the list is traversed from right to
- left. For example:</p>
+ <p>Like <seealso marker="#foldl/3"><c>foldl/3</c></seealso>, but the
+ list is traversed from right to left.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>P = fun(A, AccIn) -> io:format("~p ", [A]), AccIn end.</input>
#Fun&lt;erl_eval.12.2225172&gt;
@@ -257,10 +291,11 @@ flatmap(Fun, List1) ->
1 2 3 void
> <input>lists:foldr(P, void, [1,2,3]).</input>
3 2 1 void</pre>
- <p><c>foldl/3</c> is tail recursive and would usually be
- preferred to <c>foldr/3</c>.</p>
+ <p><c>foldl/3</c> is tail recursive and is usually preferred to
+ <c>foldr/3</c>.</p>
</desc>
</func>
+
<func>
<name name="join" arity="2"/>
<fsummary>Insert an element between elements in a list</fsummary>
@@ -278,45 +313,52 @@ flatmap(Fun, List1) ->
</func>
<func>
<name name="foreach" arity="2"/>
- <fsummary>Apply a function to each element of a list</fsummary>
+ <fsummary>Apply a function to each element of a list.</fsummary>
<desc>
- <p>Calls <c><anno>Fun</anno>(<anno>Elem</anno>)</c> for each element <c><anno>Elem</anno></c> in
- <c><anno>List</anno></c>. This function is used for its side effects and
+ <p>Calls <c><anno>Fun</anno>(<anno>Elem</anno>)</c> for each element
+ <c><anno>Elem</anno></c> in <c><anno>List</anno></c>. This function
+ is used for its side effects and
the evaluation order is defined to be the same as the order
of the elements in the list.</p>
</desc>
</func>
+
<func>
<name name="keydelete" arity="3"/>
- <fsummary>Delete an element from a list of tuples</fsummary>
+ <fsummary>Delete an element from a list of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
<p>Returns a copy of <c><anno>TupleList1</anno></c> where the first
- occurrence of a tuple whose <c><anno>N</anno></c>th element compares equal to
+ occurrence of a tuple whose <c><anno>N</anno></c>th element compares
+ equal to
<c><anno>Key</anno></c> is deleted, if there is such a tuple.</p>
</desc>
</func>
+
<func>
<name name="keyfind" arity="3"/>
- <fsummary>Search for an element in a list of tuples</fsummary>
+ <fsummary>Search for an element in a list of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
<p>Searches the list of tuples <c><anno>TupleList</anno></c> for a
- tuple whose <c><anno>N</anno></c>th element compares equal to <c><anno>Key</anno></c>.
+ tuple whose <c><anno>N</anno></c>th element compares equal to
+ <c><anno>Key</anno></c>.
Returns <c><anno>Tuple</anno></c> if such a tuple is found,
otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="keymap" arity="3"/>
- <fsummary>Map a function over a list of tuples</fsummary>
+ <fsummary>Map a function over a list of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
<p>Returns a list of tuples where, for each tuple in
- <c><anno>TupleList1</anno></c>, the <c><anno>N</anno></c>th element <c><anno>Term1</anno></c> of the tuple
+ <c><anno>TupleList1</anno></c>, the <c><anno>N</anno></c>th element
+ <c><anno>Term1</anno></c> of the tuple
has been replaced with the result of calling
<c><anno>Fun</anno>(<anno>Term1</anno>)</c>.</p>
- <p>Examples:</p>
+ <p><em>Examples:</em></p>
<pre>
> <input>Fun = fun(Atom) -> atom_to_list(Atom) end.</input>
#Fun&lt;erl_eval.6.10732646&gt;
@@ -324,33 +366,37 @@ flatmap(Fun, List1) ->
[{name,"jane",22},{name,"lizzie",20},{name,"lydia",15}]</pre>
</desc>
</func>
+
<func>
<name name="keymember" arity="3"/>
- <fsummary>Test for membership of a list of tuples</fsummary>
+ <fsummary>Test for membership of a list of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
- <p>Returns <c>true</c> if there is a tuple in <c><anno>TupleList</anno></c>
- whose <c><anno>N</anno></c>th element compares equal to <c><anno>Key</anno></c>, otherwise
- <c>false</c>.</p>
+ <p>Returns <c>true</c> if there is a tuple in
+ <c><anno>TupleList</anno></c> whose <c><anno>N</anno></c>th element
+ compares equal to <c><anno>Key</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="keymerge" arity="3"/>
- <fsummary>Merge two key-sorted lists of tuples</fsummary>
+ <fsummary>Merge two key-sorted lists of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
- <p>Returns the sorted list formed by merging <c><anno>TupleList1</anno></c>
- and <c><anno>TupleList2</anno></c>. The merge is performed on
- the <c><anno>N</anno></c>th element of each tuple. Both <c><anno>TupleList1</anno></c> and
- <c><anno>TupleList2</anno></c> must be key-sorted prior to evaluating this
- function. When two tuples compare equal, the tuple from
+ <p>Returns the sorted list formed by merging
+ <c><anno>TupleList1</anno></c> and <c><anno>TupleList2</anno></c>.
+ The merge is performed on the <c><anno>N</anno></c>th element of each
+ tuple. Both <c><anno>TupleList1</anno></c> and
+ <c><anno>TupleList2</anno></c> must be key-sorted before evaluating
+ this function. When two tuples compare equal, the tuple from
<c><anno>TupleList1</anno></c> is picked before the tuple from
<c><anno>TupleList2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="keyreplace" arity="4"/>
- <fsummary>Replace an element in a list of tuples</fsummary>
+ <fsummary>Replace an element in a list of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
<p>Returns a copy of <c><anno>TupleList1</anno></c> where the first
@@ -359,193 +405,226 @@ flatmap(Fun, List1) ->
<c><anno>NewTuple</anno></c>, if there is such a tuple <c>T</c>.</p>
</desc>
</func>
+
<func>
<name name="keysearch" arity="3"/>
- <fsummary>Search for an element in a list of tuples</fsummary>
+ <fsummary>Search for an element in a list of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
<p>Searches the list of tuples <c><anno>TupleList</anno></c> for a
- tuple whose <c><anno>N</anno></c>th element compares equal to <c><anno>Key</anno></c>.
+ tuple whose <c><anno>N</anno></c>th element compares equal to
+ <c><anno>Key</anno></c>.
Returns <c>{value, <anno>Tuple</anno>}</c> if such a tuple is found,
otherwise <c>false</c>.</p>
- <note><p>This function is retained for backward compatibility.
- The function <c>lists:keyfind/3</c> (introduced in R13A)
- is in most cases more convenient.</p></note>
+ <note>
+ <p>This function is retained for backward compatibility. Function
+ <seealso marker="#keyfind/3"><c>keyfind/3</c></seealso>
+ is usually more convenient.</p>
+ </note>
</desc>
</func>
+
<func>
<name name="keysort" arity="2"/>
- <fsummary>Sort a list of tuples</fsummary>
+ <fsummary>Sort a list of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
- <p>Returns a list containing the sorted elements of the list
- <c><anno>TupleList1</anno></c>. Sorting is performed on the <c><anno>N</anno></c>th
- element of the tuples. The sort is stable.</p>
+ <p>Returns a list containing the sorted elements of list
+ <c><anno>TupleList1</anno></c>. Sorting is performed on the
+ <c><anno>N</anno></c>th element of the tuples. The sort is stable.</p>
</desc>
</func>
+
<func>
<name name="keystore" arity="4"/>
- <fsummary>Store an element in a list of tuples</fsummary>
+ <fsummary>Store an element in a list of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
<p>Returns a copy of <c><anno>TupleList1</anno></c> where the first
occurrence of a tuple <c>T</c> whose <c><anno>N</anno></c>th element
compares equal to <c><anno>Key</anno></c> is replaced with
- <c><anno>NewTuple</anno></c>, if there is such a tuple <c>T</c>. If there
- is no such tuple <c>T</c> a copy of <c><anno>TupleList1</anno></c> where
+ <c><anno>NewTuple</anno></c>, if there is such a tuple <c>T</c>.
+ If there is no such tuple <c>T</c>, a copy of
+ <c><anno>TupleList1</anno></c> where
[<c><anno>NewTuple</anno></c>] has been appended to the end is
returned.</p>
</desc>
</func>
+
<func>
<name name="keytake" arity="3"/>
- <fsummary>Extract an element from a list of tuples</fsummary>
+ <fsummary>Extract an element from a list of tuples.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
- <p>Searches the list of tuples <c><anno>TupleList1</anno></c> for a tuple
- whose <c><anno>N</anno></c>th element compares equal to <c><anno>Key</anno></c>.
- Returns <c>{value, <anno>Tuple</anno>, <anno>TupleList2</anno>}</c> if such a tuple is
- found, otherwise <c>false</c>. <c><anno>TupleList2</anno></c> is a copy
+ <p>Searches the list of tuples <c><anno>TupleList1</anno></c> for a
+ tuple whose <c><anno>N</anno></c>th element compares equal to
+ <c><anno>Key</anno></c>. Returns <c>{value, <anno>Tuple</anno>,
+ <anno>TupleList2</anno>}</c> if such a tuple is found, otherwise
+ <c>false</c>. <c><anno>TupleList2</anno></c> is a copy
of <c><anno>TupleList1</anno></c> where the first occurrence of
<c><anno>Tuple</anno></c> has been removed.</p>
</desc>
</func>
+
<func>
<name name="last" arity="1"/>
- <fsummary>Return last element in a list</fsummary>
+ <fsummary>Return last element in a list.</fsummary>
<desc>
<p>Returns the last element in <c><anno>List</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="map" arity="2"/>
- <fsummary>Map a function over a list</fsummary>
+ <fsummary>Map a function over a list.</fsummary>
<desc>
- <p>Takes a function from <c><anno>A</anno></c>s to <c><anno>B</anno></c>s, and a list of
- <c><anno>A</anno></c>s and produces a list of <c><anno>B</anno></c>s by applying
+ <p>Takes a function from <c><anno>A</anno></c>s to
+ <c><anno>B</anno></c>s, and a list of <c><anno>A</anno></c>s and
+ produces a list of <c><anno>B</anno></c>s by applying
the function to every element in the list. This function is
- used to obtain the return values. The evaluation order is
- implementation dependent.</p>
+ used to obtain the return values. The evaluation order depends on
+ the implementation.</p>
</desc>
</func>
+
<func>
<name name="mapfoldl" arity="3"/>
- <fsummary>Map and fold in one pass</fsummary>
+ <fsummary>Map and fold in one pass.</fsummary>
<desc>
- <p><c>mapfoldl</c> combines the operations of <c>map/2</c> and
- <c>foldl/3</c> into one pass. An example, summing
- the elements in a list and double them at the same time:</p>
+ <p>Combines the operations of
+ <seealso marker="#map/2"><c>map/2</c></seealso> and
+ <seealso marker="#foldl/3"><c>foldl/3</c></seealso> into one pass.</p>
+ <p><em>Example:</em></p>
+ <p>Summing the elements in a list and double them at the same time:</p>
<pre>
> <input>lists:mapfoldl(fun(X, Sum) -> {2*X, X+Sum} end,</input>
<input>0, [1,2,3,4,5]).</input>
{[2,4,6,8,10],15}</pre>
</desc>
</func>
+
<func>
<name name="mapfoldr" arity="3"/>
- <fsummary>Map and fold in one pass</fsummary>
+ <fsummary>Map and fold in one pass.</fsummary>
<desc>
- <p><c>mapfoldr</c> combines the operations of <c>map/2</c> and
- <c>foldr/3</c> into one pass.</p>
+ <p>Combines the operations of
+ <seealso marker="#map/2"><c>map/2</c></seealso> and
+ <seealso marker="#foldr/3"><c>foldr/3</c></seealso> into one pass.</p>
</desc>
</func>
+
<func>
<name name="max" arity="1"/>
- <fsummary>Return maximum element of a list</fsummary>
+ <fsummary>Return maximum element of a list.</fsummary>
<desc>
<p>Returns the first element of <c><anno>List</anno></c> that compares
greater than or equal to all other elements of
<c><anno>List</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="member" arity="2"/>
- <fsummary>Test for membership of a list</fsummary>
+ <fsummary>Test for membership of a list.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Elem</anno></c> matches some element of
- <c><anno>List</anno></c>, otherwise <c>false</c>.</p>
+ <p>Returns <c>true</c> if <c><anno>Elem</anno></c> matches some element
+ of <c><anno>List</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="merge" arity="1"/>
- <fsummary>Merge a list of sorted lists</fsummary>
+ <fsummary>Merge a list of sorted lists.</fsummary>
<desc>
- <p>Returns the sorted list formed by merging all the sub-lists
- of <c><anno>ListOfLists</anno></c>. All sub-lists must be sorted prior to
+ <p>Returns the sorted list formed by merging all the sublists of
+ <c><anno>ListOfLists</anno></c>. All sublists must be sorted before
evaluating this function. When two elements compare equal,
- the element from the sub-list with the lowest position in
- <c><anno>ListOfLists</anno></c> is picked before the other element.</p>
+ the element from the sublist with the lowest position in
+ <c><anno>ListOfLists</anno></c> is picked before the other
+ element.</p>
</desc>
</func>
+
<func>
<name name="merge" arity="2"/>
- <fsummary>Merge two sorted lists</fsummary>
+ <fsummary>Merge two sorted lists.</fsummary>
<desc>
- <p>Returns the sorted list formed by merging <c><anno>List1</anno></c> and
- <c><anno>List2</anno></c>. Both <c><anno>List1</anno></c> and <c><anno>List2</anno></c> must be
- sorted prior to evaluating this function. When two elements
+ <p>Returns the sorted list formed by merging <c><anno>List1</anno></c>
+ and <c><anno>List2</anno></c>. Both <c><anno>List1</anno></c> and
+ <c><anno>List2</anno></c> must be
+ sorted before evaluating this function. When two elements
compare equal, the element from <c><anno>List1</anno></c> is picked
before the element from <c><anno>List2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="merge" arity="3"/>
- <fsummary>Merge two sorted list</fsummary>
+ <fsummary>Merge two sorted list.</fsummary>
<desc>
- <p>Returns the sorted list formed by merging <c><anno>List1</anno></c> and
- <c><anno>List2</anno></c>. Both <c><anno>List1</anno></c> and <c><anno>List2</anno></c> must be
- sorted according to the <seealso
+ <p>Returns the sorted list formed by merging <c><anno>List1</anno></c>
+ and <c><anno>List2</anno></c>. Both <c><anno>List1</anno></c> and
+ <c><anno>List2</anno></c> must be sorted according to the <seealso
marker="#ordering_function">ordering function</seealso>
- <c><anno>Fun</anno></c> prior to evaluating this function. <c><anno>Fun</anno>(<anno>A</anno>,
- <anno>B</anno>)</c> should return <c>true</c> if <c><anno>A</anno></c> compares less
- than or equal to <c><anno>B</anno></c> in the ordering, <c>false</c>
- otherwise. When two elements compare equal, the element from
+ <c><anno>Fun</anno></c> before evaluating this function.
+ <c><anno>Fun</anno>(<anno>A</anno>, <anno>B</anno>)</c> is to return
+ <c>true</c> if <c><anno>A</anno></c> compares less
+ than or equal to <c><anno>B</anno></c> in the ordering, otherwise
+ <c>false</c>. When two elements compare equal, the element from
<c><anno>List1</anno></c> is picked before the element from
<c><anno>List2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="merge3" arity="3"/>
- <fsummary>Merge three sorted lists</fsummary>
+ <fsummary>Merge three sorted lists.</fsummary>
<desc>
<p>Returns the sorted list formed by merging <c><anno>List1</anno></c>,
- <c><anno>List2</anno></c> and <c><anno>List3</anno></c>. All of <c><anno>List1</anno></c>,
- <c><anno>List2</anno></c> and <c><anno>List3</anno></c> must be sorted prior to
- evaluating this function. When two elements compare equal,
- the element from <c><anno>List1</anno></c>, if there is such an element,
+ <c><anno>List2</anno></c>, and <c><anno>List3</anno></c>. All of
+ <c><anno>List1</anno></c>, <c><anno>List2</anno></c>, and
+ <c><anno>List3</anno></c> must be sorted before evaluating this
+ function. When two elements compare equal, the element from
+ <c><anno>List1</anno></c>, if there is such an element,
is picked before the other element, otherwise the element
from <c><anno>List2</anno></c> is picked before the element from
<c><anno>List3</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="min" arity="1"/>
- <fsummary>Return minimum element of a list</fsummary>
+ <fsummary>Return minimum element of a list.</fsummary>
<desc>
<p>Returns the first element of <c><anno>List</anno></c> that compares
less than or equal to all other elements of
<c><anno>List</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="nth" arity="2"/>
- <fsummary>Return the Nth element of a list</fsummary>
+ <fsummary>Return the <c>N</c>th element of a list.</fsummary>
<type_desc variable="N">1..length(<anno>List</anno>)</type_desc>
<desc>
- <p>Returns the <c><anno>N</anno></c>th element of <c><anno>List</anno></c>. For example:</p>
+ <p>Returns the <c><anno>N</anno></c>th element of
+ <c><anno>List</anno></c>.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:nth(3, [a, b, c, d, e]).</input>
c</pre>
</desc>
</func>
+
<func>
<name name="nthtail" arity="2"/>
- <fsummary>Return the Nth tail of a list</fsummary>
+ <fsummary>Return the <c>N</c>th tail of a list.</fsummary>
<type_desc variable="N">0..length(<anno>List</anno>)</type_desc>
<desc>
- <p>Returns the <c><anno>N</anno></c>th tail of <c><anno>List</anno></c>, that is, the sublist of
- <c><anno>List</anno></c> starting at <c><anno>N</anno>+1</c> and continuing up to
- the end of the list. For example:</p>
+ <p>Returns the <c><anno>N</anno></c>th tail of <c><anno>List</anno></c>,
+ that is, the sublist of <c><anno>List</anno></c> starting at
+ <c><anno>N</anno>+1</c> and continuing up to the end of the list.</p>
+ <p><em>Example</em></p>
<pre>
> <input>lists:nthtail(3, [a, b, c, d, e]).</input>
[d,e]
@@ -557,70 +636,91 @@ c</pre>
[]</pre>
</desc>
</func>
+
<func>
<name name="partition" arity="2"/>
- <fsummary>Partition a list into two lists based on a predicate</fsummary>
- <desc>
- <p>Partitions <c><anno>List</anno></c> into two lists, where the first list
- contains all elements for which <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns
- <c>true</c>, and the second list contains all elements for
- which <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns <c>false</c>.</p>
- <p>Examples:</p>
+ <fsummary>Partition a list into two lists based on a predicate.</fsummary>
+ <desc>
+ <p>Partitions <c><anno>List</anno></c> into two lists, where the first
+ list contains all elements for which
+ <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns <c>true</c>,
+ and the second list contains all elements for which
+ <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns <c>false</c>.</p>
+ <p><em>Examples:</em></p>
<pre>
> <input>lists:partition(fun(A) -> A rem 2 == 1 end, [1,2,3,4,5,6,7]).</input>
{[1,3,5,7],[2,4,6]}
> <input>lists:partition(fun(A) -> is_atom(A) end, [a,b,1,c,d,2,3,4,e]).</input>
{[a,b,c,d,e],[1,2,3,4]}</pre>
- <p>See also <c>splitwith/2</c> for a different way to partition
- a list.</p>
+ <p>For a different way to partition a list, see
+ <seealso marker="#splitwith/2"><c>splitwith/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="prefix" arity="2"/>
- <fsummary>Test for list prefix</fsummary>
+ <fsummary>Test for list prefix.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>List1</anno></c> is a prefix of
<c><anno>List2</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="reverse" arity="1"/>
- <fsummary>Reverse a list</fsummary>
+ <fsummary>Reverse a list.</fsummary>
<desc>
<p>Returns a list with the elements in <c><anno>List1</anno></c>
in reverse order.</p>
</desc>
</func>
+
<func>
<name name="reverse" arity="2"/>
- <fsummary>Reverse a list appending a tail</fsummary>
+ <fsummary>Reverse a list appending a tail.</fsummary>
<desc>
<p>Returns a list with the elements in <c><anno>List1</anno></c>
- in reverse order, with the tail <c><anno>Tail</anno></c> appended. For
- example:</p>
+ in reverse order, with tail <c><anno>Tail</anno></c> appended.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:reverse([1, 2, 3, 4], [a, b, c]).</input>
[4,3,2,1,a,b,c]</pre>
</desc>
</func>
+
<func>
<name name="seq" arity="2"/>
<name name="seq" arity="3"/>
- <fsummary>Generate a sequence of integers</fsummary>
+ <fsummary>Generate a sequence of integers.</fsummary>
<desc>
- <p>Returns a sequence of integers which starts with <c><anno>From</anno></c>
- and contains the successive results of adding <c><anno>Incr</anno></c> to
- the previous element, until <c><anno>To</anno></c> has been reached or
- passed (in the latter case, <c><anno>To</anno></c> is not an element of
+ <p>Returns a sequence of integers that starts with
+ <c><anno>From</anno></c> and contains the successive results of
+ adding <c><anno>Incr</anno></c> to the previous element, until
+ <c><anno>To</anno></c> is reached or passed (in the latter case,
+ <c><anno>To</anno></c> is not an element of
the sequence). <c><anno>Incr</anno></c> defaults to 1.</p>
- <p>Failure: If <c><anno>To</anno>&lt;<anno>From</anno>-<anno>Incr</anno></c> and <c><anno>Incr</anno></c>
- is positive, or if <c><anno>To</anno>><anno>From</anno>-<anno>Incr</anno></c> and <c><anno>Incr</anno></c> is
- negative, or if <c><anno>Incr</anno>==0</c> and <c><anno>From</anno>/=<anno>To</anno></c>.</p>
+ <p>Failures:</p>
+ <list type="bulleted">
+ <item>
+ <p>If <c><anno>To</anno> &lt;
+ <anno>From</anno> - <anno>Incr</anno></c>
+ and <c><anno>Incr</anno> &gt; 0</c>.</p>
+ </item>
+ <item>
+ <p>If <c><anno>To</anno> &gt;
+ <anno>From</anno> - <anno>Incr</anno></c> and
+ <c><anno>Incr</anno> &lt; 0</c>.</p>
+ </item>
+ <item>
+ <p>If <c><anno>Incr</anno> =:= 0</c> and
+ <c><anno>From</anno> =/= <anno>To</anno></c>.</p>
+ </item>
+ </list>
<p>The following equalities hold for all sequences:</p>
<code type="none">
-length(lists:seq(From, To)) == To-From+1
-length(lists:seq(From, To, Incr)) == (To-From+Incr) div Incr</code>
- <p>Examples:</p>
+length(lists:seq(From, To)) =:= To - From + 1
+length(lists:seq(From, To, Incr)) =:= (To - From + Incr) div Incr</code>
+ <p><em>Examples:</em></p>
<pre>
> <input>lists:seq(1, 10).</input>
[1,2,3,4,5,6,7,8,9,10]
@@ -634,74 +734,87 @@ length(lists:seq(From, To, Incr)) == (To-From+Incr) div Incr</code>
[1]</pre>
</desc>
</func>
+
<func>
<name name="sort" arity="1"/>
- <fsummary>Sort a list</fsummary>
+ <fsummary>Sort a list.</fsummary>
<desc>
<p>Returns a list containing the sorted elements of
<c><anno>List1</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="sort" arity="2"/>
- <fsummary>Sort a list</fsummary>
+ <fsummary>Sort a list.</fsummary>
<desc>
<p>Returns a list containing the sorted elements of
<c><anno>List1</anno></c>, according to the <seealso
marker="#ordering_function">ordering function</seealso>
- <c><anno>Fun</anno></c>. <c><anno>Fun</anno>(<anno>A</anno>, <anno>B</anno>)</c> should return <c>true</c> if
- <c><anno>A</anno></c> compares less than or equal to <c><anno>B</anno></c> in the
- ordering, <c>false</c> otherwise.</p>
+ <c><anno>Fun</anno></c>. <c><anno>Fun</anno>(<anno>A</anno>,
+ <anno>B</anno>)</c> is to return <c>true</c> if <c><anno>A</anno></c>
+ compares less than or equal to <c><anno>B</anno></c> in the
+ ordering, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="split" arity="2"/>
- <fsummary>Split a list into two lists</fsummary>
+ <fsummary>Split a list into two lists.</fsummary>
<type_desc variable="N">0..length(<anno>List1</anno>)</type_desc>
<desc>
- <p>Splits <c><anno>List1</anno></c> into <c><anno>List2</anno></c> and <c><anno>List3</anno></c>.
- <c><anno>List2</anno></c> contains the first <c><anno>N</anno></c> elements and
- <c><anno>List3</anno></c> the rest of the elements (the <c><anno>N</anno></c>th tail).</p>
+ <p>Splits <c><anno>List1</anno></c> into <c><anno>List2</anno></c> and
+ <c><anno>List3</anno></c>. <c><anno>List2</anno></c> contains the
+ first <c><anno>N</anno></c> elements and <c><anno>List3</anno></c>
+ the remaining elements (the <c><anno>N</anno></c>th tail).</p>
</desc>
</func>
+
<func>
<name name="splitwith" arity="2"/>
- <fsummary>Split a list into two lists based on a predicate</fsummary>
+ <fsummary>Split a list into two lists based on a predicate.</fsummary>
<desc>
<p>Partitions <c><anno>List</anno></c> into two lists according to
- <c><anno>Pred</anno></c>. <c>splitwith/2</c> behaves as if it is defined
- as follows:</p>
+ <c><anno>Pred</anno></c>. <c>splitwith/2</c> behaves as if it is
+ defined as follows:</p>
<code type="none">
splitwith(Pred, List) ->
{takewhile(Pred, List), dropwhile(Pred, List)}.</code>
- <p>Examples:</p>
+ <p><em>Examples:</em></p>
<pre>
> <input>lists:splitwith(fun(A) -> A rem 2 == 1 end, [1,2,3,4,5,6,7]).</input>
{[1],[2,3,4,5,6,7]}
> <input>lists:splitwith(fun(A) -> is_atom(A) end, [a,b,1,c,d,2,3,4,e]).</input>
{[a,b],[1,c,d,2,3,4,e]}</pre>
- <p>See also <c>partition/2</c> for a different way to partition
- a list.</p>
+ <p>For a different way to partition a list, see
+ <seealso marker="#partition/2"><c>partition/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="sublist" arity="2"/>
- <fsummary>Return a sub-list of a certain length, starting at the first position</fsummary>
+ <fsummary>Return a sublist of a certain length, starting at the first
+ position.</fsummary>
<desc>
- <p>Returns the sub-list of <c><anno>List1</anno></c> starting at position 1
- and with (max) <c><anno>Len</anno></c> elements. It is not an error for
- <c><anno>Len</anno></c> to exceed the length of the list, in that case
- the whole list is returned.</p>
+ <p>Returns the sublist of <c><anno>List1</anno></c> starting at
+ position 1 and with (maximum) <c><anno>Len</anno></c> elements. It is
+ not an error for <c><anno>Len</anno></c> to exceed the length of the
+ list, in that case the whole list is returned.</p>
</desc>
</func>
+
<func>
<name name="sublist" arity="3"/>
- <fsummary>Return a sub-list starting at a given position and with a given number of elements</fsummary>
+ <fsummary>Return a sublist starting at a specified position and with a
+ specified number of elements.</fsummary>
<type_desc variable="Start">1..(length(<anno>List1</anno>)+1)</type_desc>
<desc>
- <p>Returns the sub-list of <c><anno>List1</anno></c> starting at <c><anno>Start</anno></c>
- and with (max) <c><anno>Len</anno></c> elements. It is not an error for
- <c><anno>Start</anno>+<anno>Len</anno></c> to exceed the length of the list.</p>
+ <p>Returns the sublist of <c><anno>List1</anno></c> starting at
+ <c><anno>Start</anno></c> and with (maximum) <c><anno>Len</anno></c>
+ elements. It is not an error for
+ <c><anno>Start</anno>+<anno>Len</anno></c> to exceed the length of
+ the list.</p>
+ <p><em>Examples:</em></p>
<pre>
> <input>lists:sublist([1,2,3,4], 2, 2).</input>
[2,3]
@@ -711,142 +824,163 @@ splitwith(Pred, List) ->
[]</pre>
</desc>
</func>
+
<func>
<name name="subtract" arity="2"/>
- <fsummary>Subtract the element in one list from another list</fsummary>
+ <fsummary>Subtract the element in one list from another list.</fsummary>
<desc>
- <p>Returns a new list <c><anno>List3</anno></c> which is a copy of
- <c><anno>List1</anno></c>, subjected to the following procedure: for each
- element in <c><anno>List2</anno></c>, its first occurrence in <c><anno>List1</anno></c>
- is deleted. For example:</p>
+ <p>Returns a new list <c><anno>List3</anno></c> that is a copy of
+ <c><anno>List1</anno></c>, subjected to the following procedure:
+ for each element in <c><anno>List2</anno></c>, its first occurrence
+ in <c><anno>List1</anno></c> is deleted.</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:subtract("123212", "212").</input>
"312".</pre>
<p><c>lists:subtract(A, B)</c> is equivalent to <c>A -- B</c>.</p>
- <warning><p>The complexity of <c>lists:subtract(A, B)</c> is proportional
- to <c>length(A)*length(B)</c>, meaning that it will be very slow if
- both <c>A</c> and <c>B</c> are long lists.
- (Using ordered lists and
- <seealso marker="ordsets#subtract/2">ordsets:subtract/2</seealso>
- is a much better choice if both lists are long.)</p></warning>
+ <warning>
+ <p>The complexity of <c>lists:subtract(A, B)</c> is proportional to
+ <c>length(A)*length(B)</c>, meaning that it is very slow if both
+ <c>A</c> and <c>B</c> are long lists. (If both lists are long, it
+ is a much better choice to use ordered lists and
+ <seealso marker="ordsets#subtract/2">
+ <c>ordsets:subtract/2</c></seealso>.</p>
+ </warning>
</desc>
</func>
+
<func>
<name name="suffix" arity="2"/>
- <fsummary>Test for list suffix</fsummary>
+ <fsummary>Test for list suffix.</fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>List1</anno></c> is a suffix of
<c><anno>List2</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="sum" arity="1"/>
- <fsummary>Return sum of elements in a list</fsummary>
+ <fsummary>Return the sum of elements in a list.</fsummary>
<desc>
<p>Returns the sum of the elements in <c><anno>List</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="takewhile" arity="2"/>
- <fsummary>Take elements from a list while a predicate is true</fsummary>
+ <fsummary>Take elements from a list while a predicate is <c>true</c>.
+ </fsummary>
<desc>
- <p>Takes elements <c><anno>Elem</anno></c> from <c><anno>List1</anno></c> while
- <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns <c>true</c>, that is,
- the function returns the longest prefix of the list for which
+ <p>Takes elements <c><anno>Elem</anno></c> from
+ <c><anno>List1</anno></c> while
+ <c><anno>Pred</anno>(<anno>Elem</anno>)</c> returns <c>true</c>, that
+ is, the function returns the longest prefix of the list for which
all elements satisfy the predicate.</p>
</desc>
</func>
+
<func>
<name name="ukeymerge" arity="3"/>
- <fsummary>Merge two key-sorted lists of tuples, removing duplicates</fsummary>
+ <fsummary>Merge two key-sorted lists of tuples, removing duplicates.
+ </fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
- <p>Returns the sorted list formed by merging <c><anno>TupleList1</anno></c>
- and <c><anno>TupleList2</anno></c>. The merge is performed on the
- <c><anno>N</anno></c>th element of each tuple. Both <c><anno>TupleList1</anno></c> and
- <c><anno>TupleList2</anno></c> must be key-sorted without duplicates
- prior to evaluating this function. When two tuples compare
- equal, the tuple from <c><anno>TupleList1</anno></c> is picked and the
- one from <c><anno>TupleList2</anno></c> deleted.</p>
+ <p>Returns the sorted list formed by merging
+ <c><anno>TupleList1</anno></c> and
+ <c><anno>TupleList2</anno></c>. The merge is performed on the
+ <c><anno>N</anno></c>th element of each tuple. Both
+ <c><anno>TupleList1</anno></c> and <c><anno>TupleList2</anno></c>
+ must be key-sorted without duplicates before evaluating this function.
+ When two tuples compare equal, the tuple from
+ <c><anno>TupleList1</anno></c> is picked and the
+ one from <c><anno>TupleList2</anno></c> is deleted.</p>
</desc>
</func>
+
<func>
<name name="ukeysort" arity="2"/>
- <fsummary>Sort a list of tuples, removing duplicates</fsummary>
+ <fsummary>Sort a list of tuples, removing duplicates.</fsummary>
<type_desc variable="N">1..tuple_size(<anno>Tuple</anno>)</type_desc>
<desc>
- <p>Returns a list containing the sorted elements of the list
- <c><anno>TupleList1</anno></c> where all but the first tuple of the
- tuples comparing equal have been deleted. Sorting is
+ <p>Returns a list containing the sorted elements of list
+ <c><anno>TupleList1</anno></c> where all except the first tuple of
+ the tuples comparing equal have been deleted. Sorting is
performed on the <c><anno>N</anno></c>th element of the tuples.</p>
</desc>
</func>
+
<func>
<name name="umerge" arity="1"/>
- <fsummary>Merge a list of sorted lists, removing duplicates</fsummary>
+ <fsummary>Merge a list of sorted lists, removing duplicates.</fsummary>
<desc>
- <p>Returns the sorted list formed by merging all the sub-lists
- of <c><anno>ListOfLists</anno></c>. All sub-lists must be sorted and
- contain no duplicates prior to evaluating this function.
- When two elements compare equal, the element from the
- sub-list with the lowest position in <c><anno>ListOfLists</anno></c> is
- picked and the other one deleted.</p>
+ <p>Returns the sorted list formed by merging all the sublists
+ of <c><anno>ListOfLists</anno></c>. All sublists must be sorted and
+ contain no duplicates before evaluating this function.
+ When two elements compare equal, the element from the sublist
+ with the lowest position in <c><anno>ListOfLists</anno></c> is
+ picked and the other is deleted.</p>
</desc>
</func>
+
<func>
<name name="umerge" arity="2"/>
- <fsummary>Merge two sorted lists, removing duplicates</fsummary>
+ <fsummary>Merge two sorted lists, removing duplicates.</fsummary>
<desc>
- <p>Returns the sorted list formed by merging <c><anno>List1</anno></c> and
- <c><anno>List2</anno></c>. Both <c><anno>List1</anno></c> and <c><anno>List2</anno></c> must be
- sorted and contain no duplicates prior to evaluating this
+ <p>Returns the sorted list formed by merging <c><anno>List1</anno></c>
+ and <c><anno>List2</anno></c>. Both <c><anno>List1</anno></c> and
+ <c><anno>List2</anno></c> must be
+ sorted and contain no duplicates before evaluating this
function. When two elements compare equal, the element from
- <c><anno>List1</anno></c> is picked and the one from <c><anno>List2</anno></c>
- deleted.</p>
+ <c><anno>List1</anno></c> is picked and the one from
+ <c><anno>List2</anno></c> is deleted.</p>
</desc>
</func>
+
<func>
<name name="umerge" arity="3"/>
- <fsummary>Merge two sorted lists, removing duplicates</fsummary>
+ <fsummary>Merge two sorted lists, removing duplicates.</fsummary>
<desc>
- <p>Returns the sorted list formed by merging <c><anno>List1</anno></c> and
- <c><anno>List2</anno></c>. Both <c><anno>List1</anno></c> and <c><anno>List2</anno></c> must be
- sorted according to the <seealso
+ <p>Returns the sorted list formed by merging <c><anno>List1</anno></c>
+ and <c><anno>List2</anno></c>. Both <c><anno>List1</anno></c> and
+ <c><anno>List2</anno></c> must be sorted according to the <seealso
marker="#ordering_function">ordering function</seealso>
- <c>Fun</c> and contain no duplicates prior to evaluating
- this function. <c><anno>Fun</anno>(<anno>A</anno>, <anno>B</anno>)</c> should return <c>true</c> if
- <c><anno>A</anno></c> compares less than or equal to <c><anno>B</anno></c> in the
- ordering, <c>false</c> otherwise. When two elements compare
- equal, the element from
- <c><anno>List1</anno></c> is picked and the one from <c><anno>List2</anno></c>
- deleted.</p>
+ <c>Fun</c> and contain no duplicates before evaluating this function.
+ <c><anno>Fun</anno>(<anno>A</anno>, <anno>B</anno>)</c> is to return
+ <c>true</c> if <c><anno>A</anno></c> compares less than or equal to
+ <c><anno>B</anno></c> in the ordering, otherwise <c>false</c>. When
+ two elements compare equal, the element from <c><anno>List1</anno></c>
+ is picked and the one from <c><anno>List2</anno></c> is deleted.</p>
</desc>
</func>
+
<func>
<name name="umerge3" arity="3"/>
- <fsummary>Merge three sorted lists, removing duplicates</fsummary>
+ <fsummary>Merge three sorted lists, removing duplicates.</fsummary>
<desc>
<p>Returns the sorted list formed by merging <c><anno>List1</anno></c>,
- <c><anno>List2</anno></c> and <c><anno>List3</anno></c>. All of <c><anno>List1</anno></c>,
- <c><anno>List2</anno></c> and <c><anno>List3</anno></c> must be sorted and contain no
- duplicates prior to evaluating this function. When two
+ <c><anno>List2</anno></c>, and <c><anno>List3</anno></c>. All of
+ <c><anno>List1</anno></c>, <c><anno>List2</anno></c>, and
+ <c><anno>List3</anno></c> must be sorted and contain no
+ duplicates before evaluating this function. When two
elements compare equal, the element from <c><anno>List1</anno></c> is
- picked if there is such an element, otherwise the element
- from <c><anno>List2</anno></c> is picked, and the other one deleted.</p>
+ picked if there is such an element, otherwise the element from
+ <c><anno>List2</anno></c> is picked, and the other is deleted.</p>
</desc>
</func>
+
<func>
<name name="unzip" arity="1"/>
- <fsummary>Unzip a list of two-tuples into two lists</fsummary>
+ <fsummary>Unzip a list of two-tuples into two lists.</fsummary>
<desc>
<p>"Unzips" a list of two-tuples into two lists, where the first
list contains the first element of each tuple, and the second
list contains the second element of each tuple.</p>
</desc>
</func>
+
<func>
<name name="unzip3" arity="1"/>
- <fsummary>Unzip a list of three-tuples into three lists</fsummary>
+ <fsummary>Unzip a list of three-tuples into three lists.</fsummary>
<desc>
<p>"Unzips" a list of three-tuples into three lists, where
the first list contains the first element of each tuple,
@@ -854,76 +988,84 @@ splitwith(Pred, List) ->
the third list contains the third element of each tuple.</p>
</desc>
</func>
+
<func>
<name name="usort" arity="1"/>
- <fsummary>Sort a list, removing duplicates</fsummary>
+ <fsummary>Sort a list, removing duplicates.</fsummary>
<desc>
<p>Returns a list containing the sorted elements of
- <c><anno>List1</anno></c> where all but the first element of the elements
- comparing equal have been deleted.</p>
+ <c><anno>List1</anno></c> where all except the first element of the
+ elements comparing equal have been deleted.</p>
</desc>
</func>
+
<func>
<name name="usort" arity="2"/>
- <fsummary>Sort a list, removing duplicates</fsummary>
+ <fsummary>Sort a list, removing duplicates.</fsummary>
<desc>
- <p>Returns a list which contains the sorted elements of
- <c><anno>List1</anno></c> where all but the first element of the elements
- comparing equal according to the <seealso
+ <p>Returns a list containing the sorted elements of
+ <c><anno>List1</anno></c> where all except the first element of the
+ elements comparing equal according to the <seealso
marker="#ordering_function">ordering function</seealso>
- <c><anno>Fun</anno></c> have been deleted. <c><anno>Fun</anno>(A, B)</c> should return
+ <c><anno>Fun</anno></c> have been deleted.
+ <c><anno>Fun</anno>(A, B)</c> is to return
<c>true</c> if <c>A</c> compares less than or equal to
- <c>B</c> in the ordering, <c>false</c> otherwise.</p>
+ <c>B</c> in the ordering, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="zip" arity="2"/>
- <fsummary>Zip two lists into a list of two-tuples</fsummary>
+ <fsummary>Zip two lists into a list of two-tuples.</fsummary>
<desc>
<p>"Zips" two lists of equal length into one list of two-tuples,
where the first element of each tuple is taken from the first
- list and the second element is taken from corresponding
+ list and the second element is taken from the corresponding
element in the second list.</p>
</desc>
</func>
+
<func>
<name name="zip3" arity="3"/>
- <fsummary>Zip three lists into a list of three-tuples</fsummary>
+ <fsummary>Zip three lists into a list of three-tuples.</fsummary>
<desc>
<p>"Zips" three lists of equal length into one list of
three-tuples, where the first element of each tuple is taken
from the first list, the second element is taken from
- corresponding element in the second list, and the third
- element is taken from the corresponding element in the third
- list.</p>
+ the corresponding element in the second list, and the third
+ element is taken from the corresponding element in the third list.</p>
</desc>
</func>
+
<func>
<name name="zipwith" arity="3"/>
- <fsummary>Zip two lists into one list according to a fun</fsummary>
+ <fsummary>Zip two lists into one list according to a fun.</fsummary>
<desc>
- <p>Combine the elements of two lists of equal length into one
- list. For each pair <c><anno>X</anno>, <anno>Y</anno></c> of list elements from the two
- lists, the element in the result list will be
+ <p>Combines the elements of two lists of equal length into one list.
+ For each pair <c><anno>X</anno>, <anno>Y</anno></c> of list elements
+ from the two lists, the element in the result list is
<c><anno>Combine</anno>(<anno>X</anno>, <anno>Y</anno>)</c>.</p>
<p><c>zipwith(fun(X, Y) -> {X,Y} end, List1, List2)</c> is
equivalent to <c>zip(List1, List2)</c>.</p>
- <p>Example:</p>
+ <p><em>Example:</em></p>
<pre>
> <input>lists:zipwith(fun(X, Y) -> X+Y end, [1,2,3], [4,5,6]).</input>
[5,7,9]</pre>
</desc>
</func>
+
<func>
<name name="zipwith3" arity="4"/>
- <fsummary>Zip three lists into one list according to a fun</fsummary>
- <desc>
- <p>Combine the elements of three lists of equal length into one
- list. For each triple <c><anno>X</anno>, <anno>Y</anno>, <anno>Z</anno></c> of list elements from
- the three lists, the element in the result list will be
- <c><anno>Combine</anno>(<anno>X</anno>, <anno>Y</anno>, <anno>Z</anno>)</c>.</p>
- <p><c>zipwith3(fun(X, Y, Z) -> {X,Y,Z} end, List1, List2, List3)</c> is equivalent to <c>zip3(List1, List2, List3)</c>.</p>
- <p>Examples:</p>
+ <fsummary>Zip three lists into one list according to a fun.</fsummary>
+ <desc>
+ <p>Combines the elements of three lists of equal length into one
+ list. For each triple <c><anno>X</anno>, <anno>Y</anno>,
+ <anno>Z</anno></c> of list elements from the three lists, the element
+ in the result list is <c><anno>Combine</anno>(<anno>X</anno>,
+ <anno>Y</anno>, <anno>Z</anno>)</c>.</p>
+ <p><c>zipwith3(fun(X, Y, Z) -> {X,Y,Z} end, List1, List2, List3)</c> is
+ equivalent to <c>zip3(List1, List2, List3)</c>.</p>
+ <p><em>Examples:</em></p>
<pre>
> <input>lists:zipwith3(fun(X, Y, Z) -> X+Y+Z end, [1,2,3], [4,5,6], [7,8,9]).</input>
[12,15,18]
diff --git a/lib/stdlib/doc/src/log_mf_h.xml b/lib/stdlib/doc/src/log_mf_h.xml
index 65622e52f5..edc3d31025 100644
--- a/lib/stdlib/doc/src/log_mf_h.xml
+++ b/lib/stdlib/doc/src/log_mf_h.xml
@@ -32,48 +32,56 @@
<checked>Martin Bj&ouml;rklund</checked>
<date>1996-10-31</date>
<rev>A</rev>
- <file>log_mf_h.sgml</file>
+ <file>log_mf_h.xml</file>
</header>
<module>log_mf_h</module>
- <modulesummary>An Event Handler which Logs Events to Disk</modulesummary>
+ <modulesummary>An event handler that logs events to disk.</modulesummary>
<description>
- <p>The <c>log_mf_h</c> is a <c>gen_event</c> handler module which
- can be installed in any <c>gen_event</c> process. It logs onto disk all events
- which are sent to an event manager. Each event is written as a
- binary which makes the logging very fast. However, a tool such as the <c>Report Browser</c> (<c>rb</c>) must be used in order to read the files. The events are written to multiple files. When all files have been used, the first one is re-used and overwritten. The directory location, the number of files, and the size of each file are configurable. The directory will include one file called <c>index</c>, and
- report files <c>1, 2, ....</c>.
- </p>
+ <p>This module is a <c>gen_event</c> handler module that can be installed
+ in any <c>gen_event</c> process. It logs onto disk all events that are
+ sent to an event manager. Each event is written as a binary, which makes
+ the logging very fast. However, a tool such as the Report Browser
+ (<seealso marker="sasl:rb"><c>rb(3)</c></seealso>) must be used to read
+ the files. The events are written to multiple files. When all files have
+ been used, the first one is reused and overwritten. The directory
+ location, the number of files, and the size of each file are configurable.
+ The directory will include one file called <c>index</c>, and report files
+ <c>1, 2, ...</c>.</p>
</description>
+
<datatypes>
<datatype>
<name name="args"/>
<desc><p>Term to be sent to <seealso marker="gen_event#add_handler/3">
- gen_event:add_handler/3</seealso>.</p></desc>
+ <c>gen_event:add_handler/3</c></seealso>.</p>
+ </desc>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="init" arity="3"/>
<name name="init" arity="4"/>
- <fsummary>Initiate the event handler</fsummary>
+ <fsummary>Initiate the event handler.</fsummary>
<desc>
- <p>Initiates the event handler. This function returns
- <c><anno>Args</anno></c>, which should be used in a call to
+ <p>Initiates the event handler. Returns <c><anno>Args</anno></c>, which
+ is to be used in a call to
<c>gen_event:add_handler(EventMgr, log_mf_h, <anno>Args</anno>)</c>.
- </p>
+ </p>
<p><c><anno>Dir</anno></c> specifies which directory to use for the log
- files. <c><anno>MaxBytes</anno></c> specifies the size of each individual
- file. <c><anno>MaxFiles</anno></c> specifies how many files are
- used. <c><anno>Pred</anno></c> is a predicate function used to filter the
- events. If no predicate function is specified, all events are
- logged.</p>
+ files. <c><anno>MaxBytes</anno></c> specifies the size of each
+ individual file. <c><anno>MaxFiles</anno></c> specifies how many
+ files are used. <c><anno>Pred</anno></c> is a predicate function used
+ to filter the events. If no predicate function is specified, all
+ events are logged.</p>
</desc>
</func>
</funcs>
<section>
<title>See Also</title>
- <p><seealso marker="gen_event">gen_event(3)</seealso>, rb(3) </p>
+ <p><seealso marker="gen_event"><c>gen_event(3)</c></seealso>,
+ <seealso marker="sasl:rb"><c>rb(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/maps.xml b/lib/stdlib/doc/src/maps.xml
index bf45461e2b..e1edbadcd3 100644
--- a/lib/stdlib/doc/src/maps.xml
+++ b/lib/stdlib/doc/src/maps.xml
@@ -2,12 +2,12 @@
<!DOCTYPE erlref SYSTEM "erlref.dtd">
<erlref>
- <header>
- <copyright>
- <year>2013</year><year>2016</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
+ <header>
+ <copyright>
+ <year>2013</year><year>2016</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
@@ -19,397 +19,372 @@
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
- </legalnotice>
- <title>maps</title>
- <prepared>Björn-Egil Dahlberg</prepared>
- <docno>1</docno>
- <date>2014-02-28</date>
- <rev>A</rev>
- </header>
- <module>maps</module>
- <modulesummary>Maps Processing Functions</modulesummary>
- <description>
- <p>This module contains functions for maps processing.</p>
- </description>
- <funcs>
+ </legalnotice>
- <func>
- <name name="filter" arity="2"/>
- <fsummary>Choose pairs which satisfy a predicate</fsummary>
- <desc>
- <p>
- Returns a map <c><anno>Map2</anno></c> for which predicate
- <c><anno>Pred</anno></c> holds true in <c><anno>Map1</anno></c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if
- <c><anno>Map1</anno></c> is not a map or with <c>badarg</c> if
- <c><anno>Pred</anno></c> is not a function of arity 2.
- </p>
- <p>Example:</p>
- <code type="none">
+ <title>maps</title>
+ <prepared>Björn-Egil Dahlberg</prepared>
+ <docno>1</docno>
+ <date>2014-02-28</date>
+ <rev>A</rev>
+ </header>
+ <module>maps</module>
+ <modulesummary>Maps processing functions.</modulesummary>
+ <description>
+ <p>This module contains functions for maps processing.</p>
+ </description>
+
+ <funcs>
+ <func>
+ <name name="filter" arity="2"/>
+ <fsummary>Select pairs that satisfy a predicate.</fsummary>
+ <desc>
+ <p>Returns a map <c><anno>Map2</anno></c> for which predicate
+ <c><anno>Pred</anno></c> holds true in <c><anno>Map1</anno></c>.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map1</anno></c> is not a map, or with <c>badarg</c> if
+ <c><anno>Pred</anno></c> is not a function of arity 2.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> M = #{a => 2, b => 3, c=> 4, "a" => 1, "b" => 2, "c" => 4},
Pred = fun(K,V) -> is_atom(K) andalso (V rem 2) =:= 0 end,
maps:filter(Pred,M).
-#{a => 2,c => 4} </code>
- </desc>
- </func>
+#{a => 2,c => 4}</code>
+ </desc>
+ </func>
- <func>
- <name name="find" arity="2"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Returns a tuple <c>{ok, Value}</c> where <c><anno>Value</anno></c> is the value associated with <c><anno>Key</anno></c>,
- or <c>error</c> if no value is associated with <c><anno>Key</anno></c> in <c><anno>Map</anno></c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map</anno></c> is not a map.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="find" arity="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns a tuple <c>{ok, Value}</c>, where <c><anno>Value</anno></c>
+ is the value associated with <c><anno>Key</anno></c>, or <c>error</c>
+ if no value is associated with <c><anno>Key</anno></c> in
+ <c><anno>Map</anno></c>.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map</anno></c> is not a map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{"hi" => 42},
Key = "hi",
maps:find(Key,Map).
-{ok,42} </code>
- </desc>
- </func>
+{ok,42}</code>
+ </desc>
+ </func>
- <func>
- <name name="fold" arity="3"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Calls <c>F(K, V, AccIn)</c> for every <c><anno>K</anno></c> to value <c><anno>V</anno></c>
- association in <c><anno>Map</anno></c> in
- arbitrary order. The function <c>fun F/3</c> must return a new accumulator
- which is passed to the next successive call. <c>maps:fold/3</c> returns the final
- value of the accumulator. The initial accumulator value <c><anno>Init</anno></c> is returned if
- the map is empty.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="fold" arity="3"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Calls <c>F(K, V, AccIn)</c> for every <c><anno>K</anno></c> to value
+ <c><anno>V</anno></c> association in <c><anno>Map</anno></c> in
+ any order. Function <c>fun F/3</c> must return a new
+ accumulator, which is passed to the next successive call.
+ This function returns the final value of the accumulator. The initial
+ accumulator value <c><anno>Init</anno></c> is returned if the map is
+ empty.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Fun = fun(K,V,AccIn) when is_list(K) -> AccIn + V end,
Map = #{"k1" => 1, "k2" => 2, "k3" => 3},
maps:fold(Fun,0,Map).
6</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="from_list" arity="1"/>
- <fsummary></fsummary>
- <desc>
- <p>
- The function takes a list of key-value tuples elements and builds a
- map. The associations may be in any order and both keys and values in the
- association may be of any term. If the same key appears more than once,
- the latter (rightmost) value is used and the previous values are ignored.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="from_list" arity="1"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Takes a list of key-value tuples elements and builds a map. The
+ associations can be in any order, and both keys and values in the
+ association can be of any term. If the same key appears more than
+ once, the latter (right-most) value is used and the previous values
+ are ignored.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> List = [{"a",ignored},{1337,"value two"},{42,value_three},{"a",1}],
maps:from_list(List).
#{42 => value_three,1337 => "value two","a" => 1}</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="get" arity="2"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Returns the value <c><anno>Value</anno></c> associated with <c><anno>Key</anno></c> if
- <c><anno>Map</anno></c> contains <c><anno>Key</anno></c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map</anno></c> is not a map,
- or with a <c>{badkey,Key}</c> exception if no value is associated with <c><anno>Key</anno></c>.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="get" arity="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns value <c><anno>Value</anno></c> associated with
+ <c><anno>Key</anno></c> if <c><anno>Map</anno></c> contains
+ <c><anno>Key</anno></c>.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map</anno></c> is not a map, or with a <c>{badkey,Key}</c>
+ exception if no value is associated with <c><anno>Key</anno></c>.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Key = 1337,
Map = #{42 => value_two,1337 => "value one","a" => 1},
maps:get(Key,Map).
"value one"</code>
- </desc>
- </func>
-
- <func>
- <name name="get" arity="3"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Returns the value <c><anno>Value</anno></c> associated with <c><anno>Key</anno></c> if
- <c><anno>Map</anno></c> contains <c><anno>Key</anno></c>.
- If no value is associated with <c><anno>Key</anno></c> then returns <c><anno>Default</anno></c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map</anno></c> is not a map.
+ </desc>
+ </func>
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="get" arity="3"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns value <c><anno>Value</anno></c> associated with
+ <c><anno>Key</anno></c> if <c><anno>Map</anno></c> contains
+ <c><anno>Key</anno></c>. If no value is associated with
+ <c><anno>Key</anno></c>, <c><anno>Default</anno></c> is returned.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map</anno></c> is not a map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{ key1 => val1, key2 => val2 }.
#{key1 => val1,key2 => val2}
> maps:get(key1, Map, "Default value").
val1
> maps:get(key3, Map, "Default value").
"Default value"</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="is_key" arity="2"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Returns <c>true</c> if map <c><anno>Map</anno></c> contains <c><anno>Key</anno></c> and returns
- <c>false</c> if it does not contain the <c><anno>Key</anno></c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map</anno></c> is not a map.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="is_key" arity="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns <c>true</c> if map <c><anno>Map</anno></c> contains
+ <c><anno>Key</anno></c> and returns <c>false</c> if it does not
+ contain the <c><anno>Key</anno></c>.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map</anno></c> is not a map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{"42" => value}.
#{"42"> => value}
> maps:is_key("42",Map).
true
> maps:is_key(value,Map).
false</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="keys" arity="1"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Returns a complete list of keys, in arbitrary order, which resides within <c><anno>Map</anno></c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map</anno></c> is not a map.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="keys" arity="1"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns a complete list of keys, in any order, which resides
+ within <c><anno>Map</anno></c>.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map</anno></c> is not a map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{42 => value_three,1337 => "value two","a" => 1},
maps:keys(Map).
[42,1337,"a"]</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="map" arity="2"/>
- <fsummary></fsummary>
- <desc>
- <p>
- The function produces a new map <c><anno>Map2</anno></c> by calling the function <c>fun F(K, V1)</c> for
- every <c><anno>K</anno></c> to value <c><anno>V1</anno></c> association in <c><anno>Map1</anno></c> in arbitrary order.
- The function <c>fun F/2</c> must return the value <c><anno>V2</anno></c> to be associated with key <c><anno>K</anno></c> for
- the new map <c><anno>Map2</anno></c>.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="map" arity="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Produces a new map <c><anno>Map2</anno></c> by calling function
+ <c>fun F(K, V1)</c> for every <c><anno>K</anno></c> to value
+ <c><anno>V1</anno></c> association in <c><anno>Map1</anno></c> in
+ any order. Function <c>fun F/2</c> must return value
+ <c><anno>V2</anno></c> to be associated with key <c><anno>K</anno></c>
+ for the new map <c><anno>Map2</anno></c>.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Fun = fun(K,V1) when is_list(K) -> V1*2 end,
Map = #{"k1" => 1, "k2" => 2, "k3" => 3},
maps:map(Fun,Map).
#{"k1" => 2,"k2" => 4,"k3" => 6}</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="merge" arity="2"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Merges two maps into a single map <c><anno>Map3</anno></c>. If two keys exists in both maps the
- value in <c><anno>Map1</anno></c> will be superseded by the value in <c><anno>Map2</anno></c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map1</anno></c> or
- <c><anno>Map2</anno></c> is not a map.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="merge" arity="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Merges two maps into a single map <c><anno>Map3</anno></c>. If two
+ keys exist in both maps, the value in <c><anno>Map1</anno></c> is
+ superseded by the value in <c><anno>Map2</anno></c>.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map1</anno></c> or <c><anno>Map2</anno></c> is not a map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map1 = #{a => "value_one", b => "value_two"},
Map2 = #{a => 1, c => 2},
maps:merge(Map1,Map2).
#{a => 1,b => "value_two",c => 2}</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="new" arity="0"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Returns a new empty map.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="new" arity="0"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns a new empty map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> maps:new().
#{}</code>
- </desc>
- </func>
-
- <func>
- <name name="put" arity="3"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Associates <c><anno>Key</anno></c> with value <c><anno>Value</anno></c> and inserts the association into map <c>Map2</c>.
- If key <c><anno>Key</anno></c> already exists in map <c><anno>Map1</anno></c>, the old associated value is
- replaced by value <c><anno>Value</anno></c>. The function returns a new map <c><anno>Map2</anno></c> containing the new association and
- the old associations in <c><anno>Map1</anno></c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map1</anno></c> is not a map.
- </p>
+ </desc>
+ </func>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="put" arity="3"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Associates <c><anno>Key</anno></c> with value
+ <c><anno>Value</anno></c> and inserts the association into map
+ <c>Map2</c>. If key <c><anno>Key</anno></c> already exists in map
+ <c><anno>Map1</anno></c>, the old associated value is replaced by
+ value <c><anno>Value</anno></c>. The function returns a new map
+ <c><anno>Map2</anno></c> containing the new association and the old
+ associations in <c><anno>Map1</anno></c>.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map1</anno></c> is not a map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{"a" => 1}.
#{"a" => 1}
> maps:put("a", 42, Map).
#{"a" => 42}
> maps:put("b", 1337, Map).
#{"a" => 1,"b" => 1337}</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="remove" arity="2"/>
- <fsummary></fsummary>
- <desc>
- <p>
- The function removes the <c><anno>Key</anno></c>, if it exists, and its associated value from
- <c><anno>Map1</anno></c> and returns a new map <c><anno>Map2</anno></c> without key <c><anno>Key</anno></c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map1</anno></c> is not a map.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="remove" arity="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Removes the <c><anno>Key</anno></c>, if it exists, and its
+ associated value from <c><anno>Map1</anno></c> and returns a new map
+ <c><anno>Map2</anno></c> without key <c><anno>Key</anno></c>.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map1</anno></c> is not a map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{"a" => 1}.
#{"a" => 1}
> maps:remove("a",Map).
#{}
> maps:remove("b",Map).
#{"a" => 1}</code>
- </desc>
- </func>
+ </desc>
+ </func>
+
+ <func>
+ <name name="size" arity="1"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns the number of key-value associations in
+ <c><anno>Map</anno></c>. This operation occurs in constant time.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
+> Map = #{42 => value_two,1337 => "value one","a" => 1},
+ maps:size(Map).
+3</code>
+ </desc>
+ </func>
- <func>
- <name name="take" arity="2"/>
- <fsummary></fsummary>
- <desc>
- <p>
- The function removes the <c><anno>Key</anno></c>, if it exists, and its associated value from
- <c><anno>Map1</anno></c> and returns a tuple with the removed <c><anno>Value</anno></c> and
- the new map <c><anno>Map2</anno></c> without key <c><anno>Key</anno></c>.
- If the key does not exist <c>error</c> is returned.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map1</anno></c> is not a map.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="take" arity="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>The function removes the <c><anno>Key</anno></c>, if it
+ exists, and its associated value from <c><anno>Map1</anno></c>
+ and returns a tuple with the removed <c><anno>Value</anno></c>
+ and the new map <c><anno>Map2</anno></c> without key
+ <c><anno>Key</anno></c>. If the key does not exist
+ <c>error</c> is returned.
+ </p>
+ <p>The call will fail with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map1</anno></c> is not a map.
+ </p>
+ <p>Example:</p>
+ <code type="none">
> Map = #{"a" => "hello", "b" => "world"}.
#{"a" => "hello", "b" => "world"}
> maps:take("a",Map).
{"hello",#{"b" => "world"}}
> maps:take("does not exist",Map).
error</code>
- </desc>
- </func>
-
- <func>
- <name name="size" arity="1"/>
- <fsummary></fsummary>
- <desc>
- <p>
- The function returns the number of key-value associations in the <c><anno>Map</anno></c>.
- This operation happens in constant time.
- </p>
- <p>Example:</p>
- <code type="none">
-> Map = #{42 => value_two,1337 => "value one","a" => 1},
- maps:size(Map).
-3</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="to_list" arity="1"/>
- <fsummary></fsummary>
- <desc>
- <p>
- The fuction returns a list of pairs representing the key-value associations of <c><anno>Map</anno></c>,
- where the pairs, <c>[{K1,V1}, ..., {Kn,Vn}]</c>, are returned in arbitrary order.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map</anno></c> is not a map.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="to_list" arity="1"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns a list of pairs representing the key-value associations of
+ <c><anno>Map</anno></c>, where the pairs
+ <c>[{K1,V1}, ..., {Kn,Vn}]</c> are returned in arbitrary order.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map</anno></c> is not a map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{42 => value_three,1337 => "value two","a" => 1},
maps:to_list(Map).
[{42,value_three},{1337,"value two"},{"a",1}]</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="update" arity="3"/>
- <fsummary></fsummary>
- <desc>
- <p>
- If <c><anno>Key</anno></c> exists in <c><anno>Map1</anno></c> the old associated value is
- replaced by value <c><anno>Value</anno></c>. The function returns a new map <c><anno>Map2</anno></c> containing
- the new associated value.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map1</anno></c> is not a map,
- or with a <c>{badkey,Key}</c> exception if no value is associated with <c><anno>Key</anno></c>.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="update" arity="3"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>If <c><anno>Key</anno></c> exists in <c><anno>Map1</anno></c>, the
+ old associated value is replaced by value <c><anno>Value</anno></c>.
+ The function returns a new map <c><anno>Map2</anno></c> containing
+ the new associated value.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map1</anno></c> is not a map, or with a <c>{badkey,Key}</c>
+ exception if no value is associated with <c><anno>Key</anno></c>.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{"a" => 1}.
#{"a" => 1}
> maps:update("a", 42, Map).
#{"a" => 42}</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="update_with" arity="3"/>
- <fsummary></fsummary>
- <desc>
- <p>Update a value in a <c><anno>Map1</anno></c> associated with <c><anno>Key</anno></c> by
- calling <c><anno>Fun</anno></c> on the old value to get a new value. An exception
- <c>{badkey,<anno>Key</anno>}</c> is generated if
- <c><anno>Key</anno></c> is not present in the map.</p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="update_with" arity="3"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Update a value in a <c><anno>Map1</anno></c> associated
+ with <c><anno>Key</anno></c> by calling
+ <c><anno>Fun</anno></c> on the old value to get a new
+ value. An exception <c>{badkey,<anno>Key</anno>}</c> is
+ generated if <c><anno>Key</anno></c> is not present in the
+ map.</p>
+ <p>Example:</p>
+ <code type="none">
> Map = #{"counter" => 1},
Fun = fun(V) -> V + 1 end,
maps:update_with("counter",Fun,Map).
#{"counter" => 2}</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="update_with" arity="4"/>
- <fsummary></fsummary>
- <desc>
- <p>Update a value in a <c><anno>Map1</anno></c> associated with <c><anno>Key</anno></c> by
- calling <c><anno>Fun</anno></c> on the old value to get a new value.
- If <c><anno>Key</anno></c> is not present
- in <c><anno>Map1</anno></c> then <c><anno>Init</anno></c> will be associated with
- <c><anno>Key</anno></c>.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="update_with" arity="4"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Update a value in a <c><anno>Map1</anno></c> associated
+ with <c><anno>Key</anno></c> by calling
+ <c><anno>Fun</anno></c> on the old value to get a new value.
+ If <c><anno>Key</anno></c> is not present in
+ <c><anno>Map1</anno></c> then <c><anno>Init</anno></c> will be
+ associated with <c><anno>Key</anno></c>.
+ </p>
+ <p>Example:</p>
+ <code type="none">
> Map = #{"counter" => 1},
Fun = fun(V) -> V + 1 end,
maps:update_with("new counter",Fun,42,Map).
@@ -417,56 +392,54 @@ error</code>
</desc>
</func>
- <func>
- <name name="values" arity="1"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Returns a complete list of values, in arbitrary order, contained in map <c>Map</c>.
- </p>
- <p>
- The call will fail with a <c>{badmap,Map}</c> exception if <c><anno>Map</anno></c> is not a map.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="values" arity="1"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns a complete list of values, in arbitrary order, contained in
+ map <c>Map</c>.</p>
+ <p>The call fails with a <c>{badmap,Map}</c> exception if
+ <c><anno>Map</anno></c> is not a map.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{42 => value_three,1337 => "value two","a" => 1},
maps:values(Map).
[value_three,"value two",1]</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="with" arity="2"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Returns a new map <c><anno>Map2</anno></c> with the keys <c>K1</c> through <c>Kn</c> and their associated values from map <c><anno>Map1</anno></c>.
- Any key in <c><anno>Ks</anno></c> that does not exist in <c><anno>Map1</anno></c> are ignored.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="with" arity="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns a new map <c><anno>Map2</anno></c> with the keys <c>K1</c>
+ through <c>Kn</c> and their associated values from map
+ <c><anno>Map1</anno></c>. Any key in <c><anno>Ks</anno></c> that does
+ not exist in <c><anno>Map1</anno></c> is ignored.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{42 => value_three,1337 => "value two","a" => 1},
Ks = ["a",42,"other key"],
maps:with(Ks,Map).
#{42 => value_three,"a" => 1}</code>
- </desc>
- </func>
+ </desc>
+ </func>
- <func>
- <name name="without" arity="2"/>
- <fsummary></fsummary>
- <desc>
- <p>
- Returns a new map <c><anno>Map2</anno></c> without the keys <c>K1</c> through <c>Kn</c> and their associated values from map <c><anno>Map1</anno></c>.
- Any key in <c><anno>Ks</anno></c> that does not exist in <c><anno>Map1</anno></c> are ignored.
- </p>
- <p>Example:</p>
- <code type="none">
+ <func>
+ <name name="without" arity="2"/>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns a new map <c><anno>Map2</anno></c> without keys <c>K1</c>
+ through <c>Kn</c> and their associated values from map
+ <c><anno>Map1</anno></c>. Any key in <c><anno>Ks</anno></c> that does
+ not exist in <c><anno>Map1</anno></c> is ignored</p>
+ <p><em>Example:</em></p>
+ <code type="none">
> Map = #{42 => value_three,1337 => "value two","a" => 1},
Ks = ["a",42,"other key"],
maps:without(Ks,Map).
#{1337 => "value two"}</code>
- </desc>
- </func>
- </funcs>
+ </desc>
+ </func>
+ </funcs>
</erlref>
diff --git a/lib/stdlib/doc/src/math.xml b/lib/stdlib/doc/src/math.xml
index 38084638f6..1358ce5cbf 100644
--- a/lib/stdlib/doc/src/math.xml
+++ b/lib/stdlib/doc/src/math.xml
@@ -30,78 +30,86 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-15</date>
+ <date>1997-01-15</date>
<rev>B</rev>
- <file>math.sgml</file>
+ <file>math.xml</file>
</header>
<module>math</module>
- <modulesummary>Mathematical Functions</modulesummary>
+ <modulesummary>Mathematical functions.</modulesummary>
<description>
<p>This module provides an interface to a number of mathematical
functions.</p>
+
<note>
- <p>Not all functions are implemented on all platforms. In particular,
- the <c>erf/1</c> and <c>erfc/1</c> functions are not implemented on Windows.</p>
+ <p>Not all functions are provided on all platforms. In particular,
+ the <seealso marker="#erf/1"><c>erf/1</c></seealso> and
+ <seealso marker="#erfc/1"><c>erfc/1</c></seealso> functions
+ are not provided on Windows.</p>
</note>
</description>
+
<funcs>
<func>
- <name name="pi" arity="0"/>
- <fsummary>A useful number</fsummary>
- <desc>
- <p>A useful number.</p>
- </desc>
- </func>
- <func>
- <name name="sin" arity="1"/>
- <name name="cos" arity="1"/>
- <name name="tan" arity="1"/>
- <name name="asin" arity="1"/>
<name name="acos" arity="1"/>
+ <name name="acosh" arity="1"/>
+ <name name="asin" arity="1"/>
+ <name name="asinh" arity="1"/>
<name name="atan" arity="1"/>
<name name="atan2" arity="2"/>
- <name name="sinh" arity="1"/>
- <name name="cosh" arity="1"/>
- <name name="tanh" arity="1"/>
- <name name="asinh" arity="1"/>
- <name name="acosh" arity="1"/>
<name name="atanh" arity="1"/>
+ <name name="cos" arity="1"/>
+ <name name="cosh" arity="1"/>
<name name="exp" arity="1"/>
<name name="log" arity="1"/>
- <name name="log2" arity="1"/>
<name name="log10" arity="1"/>
+ <name name="log2" arity="1"/>
<name name="pow" arity="2"/>
+ <name name="sin" arity="1"/>
+ <name name="sinh" arity="1"/>
<name name="sqrt" arity="1"/>
- <fsummary>Diverse math functions</fsummary>
- <type variable="X" name_i="7"/>
- <type variable="Y" name_i="7"/>
+ <name name="tan" arity="1"/>
+ <name name="tanh" arity="1"/>
+ <fsummary>Diverse math functions.</fsummary>
+ <type variable="X" name_i="6"/>
+ <type variable="Y" name_i="6"/>
<desc>
- <p>A collection of math functions which return floats. Arguments
- are numbers. </p>
+ <p>A collection of mathematical functions that return floats. Arguments
+ are numbers.</p>
</desc>
</func>
+
<func>
<name name="erf" arity="1"/>
<fsummary>Error function.</fsummary>
<desc>
- <p>Returns the error function of <c><anno>X</anno></c>, where</p>
+ <p>Returns the error function of <c><anno>X</anno></c>, where:</p>
<pre>
-erf(X) = 2/sqrt(pi)*integral from 0 to X of exp(-t*t) dt. </pre>
+erf(X) = 2/sqrt(pi)*integral from 0 to X of exp(-t*t) dt.</pre>
</desc>
</func>
+
<func>
<name name="erfc" arity="1"/>
- <fsummary>Another error function</fsummary>
+ <fsummary>Another error function.</fsummary>
<desc>
- <p><c>erfc(X)</c> returns <c>1.0 - erf(X)</c>, computed by
- methods that avoid cancellation for large <c><anno>X</anno></c>. </p>
+ <p><c>erfc(X)</c> returns <c>1.0</c> - <c>erf(X)</c>, computed by
+ methods that avoid cancellation for large <c><anno>X</anno></c>.</p>
</desc>
</func>
+
+ <func>
+ <name name="pi" arity="0"/>
+ <fsummary>A useful number.</fsummary>
+ <desc>
+ <p>A useful number.</p>
+ </desc>
+ </func>
+
</funcs>
<section>
- <title>Bugs</title>
- <p>As these are the C library, the bugs are the same.</p>
+ <title>Limitations</title>
+ <p>As these are the C library, the same limitations apply.</p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/ms_transform.xml b/lib/stdlib/doc/src/ms_transform.xml
index 84712486ea..0a05fa37c5 100644
--- a/lib/stdlib/doc/src/ms_transform.xml
+++ b/lib/stdlib/doc/src/ms_transform.xml
@@ -28,65 +28,81 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>99-02-09</date>
+ <date>1999-02-09</date>
<rev>C</rev>
- <file>ms_transform.sgml</file>
+ <file>ms_transform.xml</file>
</header>
<module>ms_transform</module>
- <modulesummary>Parse_transform that translates fun syntax into match specifications. </modulesummary>
+ <modulesummary>A parse transformation that translates fun syntax into match
+ specifications.</modulesummary>
<description>
<marker id="top"></marker>
- <p>This module implements the parse_transform that makes calls to
- <c>ets</c> and <c>dbg</c>:<c>fun2ms/1</c> translate into literal
- match specifications. It also implements the back end for the same
- functions when called from the Erlang shell.</p>
- <p>The translations from fun's to match_specs
- is accessed through the two "pseudo
- functions" <c>ets:fun2ms/1</c> and <c>dbg:fun2ms/1</c>.</p>
- <p>Actually this introduction is more or less an introduction to the
- whole concept of match specifications. Since everyone trying to use
- <c>ets:select</c> or <c>dbg</c> seems to end up reading
- this page, it seems in good place to explain a little more than
- just what this module does.</p>
- <p>There are some caveats one should be aware of, please read through
- the whole manual page if it's the first time you're using the
- transformations. </p>
- <p>Match specifications are used more or less as filters.
- They resemble usual Erlang matching in a list comprehension or in
- a <c>fun</c> used in conjunction with <c>lists:foldl</c> etc. The
- syntax of pure match specifications is somewhat awkward though, as
- they are made up purely by Erlang terms and there is no syntax in the
- language to make the match specifications more readable.</p>
- <p>As the match specifications execution and structure is quite like
- that of a fun, it would for most programmers be more straight forward
- to simply write it using the familiar fun syntax and having that
- translated into a match specification automatically. Of course a real
- fun is more powerful than the match specifications allow, but bearing
- the match specifications in mind, and what they can do, it's still
+ <p>This module provides the parse transformation that makes calls to
+ <seealso marker="ets"><c>ets</c></seealso> and
+ <seealso marker="runtime_tools:dbg#fun2ms/1"><c>dbg:fun2ms/1</c></seealso>
+ translate into literal match specifications. It also provides the back end
+ for the same functions when called from the Erlang shell.</p>
+
+ <p>The translation from funs to match specifications
+ is accessed through the two "pseudo functions"
+ <seealso marker="ets#fun2ms/1"><c>ets:fun2ms/1</c></seealso> and
+ <seealso marker="runtime_tools:dbg#fun2ms/1"><c>dbg:fun2ms/1</c></seealso>.</p>
+
+ <p>As everyone trying to use
+ <seealso marker="ets#select/1"><c>ets:select/2</c></seealso> or
+ <seealso marker="runtime_tools:dbg"><c>dbg</c></seealso> seems to end up
+ reading this manual page, this description is an introduction to the
+ concept of match specifications.</p>
+
+ <p>Read the whole manual page if it is the first time you are using
+ the transformations.</p>
+
+ <p>Match specifications are used more or less as filters. They resemble
+ usual Erlang matching in a list comprehension or in a fun used with
+ <seealso marker="lists#foldl/3"><c>lists:foldl/3</c></seealso>, and so on.
+ However, the syntax of pure match specifications is awkward, as
+ they are made up purely by Erlang terms, and the language has no
+ syntax to make the match specifications more readable.</p>
+
+ <p>As the execution and structure of the match specifications are like
+ that of a fun, it is more straightforward
+ to write it using the familiar fun syntax and to have that
+ translated into a match specification automatically. A real fun is
+ clearly more powerful than the match specifications allow, but bearing
+ the match specifications in mind, and what they can do, it is still
more convenient to write it all as a fun. This module contains the
- code that simply translates the fun syntax into match_spec terms.</p>
- <p>Let's start with an ets example. Using <c>ets:select</c> and
- a match specification, one can filter out rows of a table and construct
- a list of tuples containing relevant parts of the data in these
- rows. Of course one could use <c>ets:foldl</c> instead, but the
- select call is far more efficient. Without the translation, one has to
- struggle with writing match specifications terms to accommodate this,
- or one has to resort to the less powerful
- <c>ets:match(_object)</c> calls, or simply give up and use
- the more inefficient method of <c>ets:foldl</c>. Using the
- <c>ets:fun2ms</c> transformation, a <c>ets:select</c> call
- is at least as easy to write as any of the alternatives.</p>
- <p>As an example, consider a simple table of employees:</p>
+ code that translates the fun syntax into match specification
+ terms.</p>
+ </description>
+
+ <section>
+ <title>Example 1</title>
+ <p>Using <seealso marker="ets#select/2"><c>ets:select/2</c></seealso>
+ and a match specification, one can filter out rows of
+ a table and construct a list of tuples containing relevant parts
+ of the data in these rows.
+ One can use <seealso marker="ets#foldl/3"><c>ets:foldl/3</c></seealso>
+ instead, but the <c>ets:select/2</c> call is far more efficient.
+ Without the translation provided by <c>ms_transform</c>,
+ one must struggle with writing match specifications terms
+ to accommodate this.</p>
+
+ <p>Consider a simple table of employees:</p>
+
<code type="none">
-record(emp, {empno, %Employee number as a string, the key
surname, %Surname of the employee
givenname, %Given name of employee
- dept, %Department one of {dev,sales,prod,adm}
- empyear}). %Year the employee was employed </code>
+ dept, %Department, one of {dev,sales,prod,adm}
+ empyear}). %Year the employee was employed</code>
+
<p>We create the table using:</p>
+
<code type="none">
-ets:new(emp_tab,[{keypos,#emp.empno},named_table,ordered_set]). </code>
- <p>Let's also fill it with some randomly chosen data for the examples:</p>
+ets:new(emp_tab, [{keypos,#emp.empno},named_table,ordered_set]).</code>
+
+ <p>We fill the table with randomly chosen data:</p>
+
<code type="none">
[{emp,"011103","Black","Alfred",sales,2000},
{emp,"041231","Doe","John",prod,2001},
@@ -96,167 +112,204 @@ ets:new(emp_tab,[{keypos,#emp.empno},named_table,ordered_set]). </code>
{emp,"535216","Chalker","Samuel",adm,1998},
{emp,"789789","Harrysson","Joe",adm,1996},
{emp,"963721","Scott","Juliana",dev,2003},
- {emp,"989891","Brown","Gabriel",prod,1999}] </code>
- <p>Now, the amount of data in the table is of course to small to justify
- complicated ets searches, but on real tables, using <c>select</c> to get
- exactly the data you want will increase efficiency remarkably.</p>
- <p>Lets say for example that we'd want the employee numbers of
- everyone in the sales department. One might use <c>ets:match</c>
- in such a situation:</p>
+ {emp,"989891","Brown","Gabriel",prod,1999}]</code>
+
+ <p>Assuming that we want the employee numbers of everyone in the sales
+ department, there are several ways.</p>
+
+ <p><c>ets:match/2</c> can be used:</p>
+
<pre>
1> <input>ets:match(emp_tab, {'_', '$1', '_', '_', sales, '_'}).</input>
-[["011103"],["076324"]] </pre>
- <p>Even though <c>ets:match</c> does not require a full match
- specification, but a simpler type, it's still somewhat unreadable, and
- one has little control over the returned result, it's always a list of
- lists. OK, one might use <c>ets:foldl</c> or
- <c>ets:foldr</c> instead:</p>
+[["011103"],["076324"]]</pre>
+
+ <p><c>ets:match/2</c> uses a simpler type of match specification,
+ but it is still unreadable, and one has little control over the
+ returned result. It is always a list of lists.</p>
+
+ <p><seealso marker="ets#foldl/3"><c>ets:foldl/3</c></seealso> or
+ <seealso marker="ets#foldr/3"><c>ets:foldr/3</c></seealso> can be used to avoid the nested lists:</p>
+
<code type="none">
ets:foldr(fun(#emp{empno = E, dept = sales},Acc) -> [E | Acc];
(_,Acc) -> Acc
end,
[],
- emp_tab). </code>
- <p>Running that would result in <c>["011103","076324"]</c>
- , which at least gets rid of the extra lists. The fun is also quite
+ emp_tab).</code>
+
+ <p>The result is <c>["011103","076324"]</c>. The fun is
straightforward, so the only problem is that all the data from the
- table has to be transferred from the table to the calling process for
- filtering. That's inefficient compared to the <c>ets:match</c>
+ table must be transferred from the table to the calling process for
+ filtering. That is inefficient compared to the <c>ets:match/2</c>
call where the filtering can be done "inside" the emulator and only
- the result is transferred to the process. Remember that ets tables are
- all about efficiency, if it wasn't for efficiency all of ets could be
- implemented in Erlang, as a process receiving requests and sending
- answers back. One uses ets because one wants performance, and
- therefore one wouldn't want all of the table transferred to the
- process for filtering. OK, let's look at a pure
- <c>ets:select</c> call that does what the <c>ets:foldr</c>
- does:</p>
+ the result is transferred to the process.</p>
+
+ <p>Consider a "pure" <c>ets:select/2</c> call that does what
+ <c>ets:foldr</c> does:</p>
+
<code type="none">
-ets:select(emp_tab,[{#emp{empno = '$1', dept = sales, _='_'},[],['$1']}]). </code>
- <p>Even though the record syntax is used, it's still somewhat hard to
+ets:select(emp_tab, [{#emp{empno = '$1', dept = sales, _='_'},[],['$1']}]).</code>
+
+ <p>Although the record syntax is used, it is still hard to
read and even harder to write. The first element of the tuple,
- <c>#emp{empno = '$1', dept = sales, _='_'}</c> tells what to
- match, elements not matching this will not be returned at all, as in
- the <c>ets:match</c> example. The second element, the empty list
- is a list of guard expressions, which we need none, and the third
+ <c>#emp{empno = '$1', dept = sales, _='_'}</c>, tells what to
+ match. Elements not matching this are not returned, as in
+ the <c>ets:match/2</c> example. The second element, the empty list,
+ is a list of guard expressions, which we do not need. The third
element is the list of expressions constructing the return value (in
- ets this almost always is a list containing one single term). In our
- case <c>'$1'</c> is bound to the employee number in the head
- (first element of tuple), and hence it is the employee number that is
- returned. The result is <c>["011103","076324"]</c>, just as in
- the <c>ets:foldr</c> example, but the result is retrieved much
- more efficiently in terms of execution speed and memory consumption.</p>
- <p>We have one efficient but hardly readable way of doing it and one
- inefficient but fairly readable (at least to the skilled Erlang
- programmer) way of doing it. With the use of <c>ets:fun2ms</c>,
- one could have something that is as efficient as possible but still is
- written as a filter using the fun syntax:</p>
+ ETS this is almost always a list containing one single term).
+ In our case <c>'$1'</c> is bound to the employee number in the head
+ (first element of the tuple), and hence the employee number is
+ returned. The result is <c>["011103","076324"]</c>, as in
+ the <c>ets:foldr/3</c> example, but the result is retrieved much
+ more efficiently in terms of execution speed and
+ memory consumption.</p>
+
+ <p>Using <c>ets:fun2ms/1</c>, we can combine the ease of use of
+ the <c>ets:foldr/3</c> and the efficiency of the pure
+ <c>ets:select/2</c> example:</p>
+
<code type="none">
-include_lib("stdlib/include/ms_transform.hrl").
-% ...
-
ets:select(emp_tab, ets:fun2ms(
fun(#emp{empno = E, dept = sales}) ->
E
- end)). </code>
- <p>This may not be the shortest of the expressions, but it requires no
- special knowledge of match specifications to read. The fun's head
- should simply match what you want to filter out and the body returns
- what you want returned. As long as the fun can be kept within the
- limits of the match specifications, there is no need to transfer all
- data of the table to the process for filtering as in the
- <c>ets:foldr</c> example. In fact it's even easier to read then
- the <c>ets:foldr</c> example, as the select call in itself
- discards anything that doesn't match, while the fun of the
- <c>foldr</c> call needs to handle both the elements matching and
- the ones not matching.</p>
- <p>It's worth noting in the above <c>ets:fun2ms</c> example that one
- needs to include <c>ms_transform.hrl</c> in the source code, as this is
- what triggers the parse transformation of the <c>ets:fun2ms</c> call
- to a valid match specification. This also implies that the
- transformation is done at compile time (except when called from the
- shell of course) and therefore will take no resources at all in
- runtime. So although you use the more intuitive fun syntax, it gets as
- efficient in runtime as writing match specifications by hand.</p>
- <p>Let's look at some more <c>ets</c> examples. Let's say one
- wants to get all the employee numbers of any employee hired before the
- year 2000. Using <c>ets:match</c> isn't an alternative here as
- relational operators cannot be expressed there. Once again, an
- <c>ets:foldr</c> could do it (slowly, but correct):</p>
+ end)).</code>
+
+ <p>This example requires no special knowledge of match
+ specifications to understand. The head of the fun matches what
+ you want to filter out and the body returns what you want
+ returned. As long as the fun can be kept within the limits of the
+ match specifications, there is no need to transfer all table data
+ to the process for filtering as in the <c>ets:foldr/3</c>
+ example. It is easier to read than the <c>ets:foldr/3</c> example,
+ as the select call in itself discards anything that does not
+ match, while the fun of the <c>ets:foldr/3</c> call needs to
+ handle both the elements matching and the ones not matching.</p>
+
+ <p>In the <c>ets:fun2ms/1</c> example above, it is needed to
+ include <c>ms_transform.hrl</c> in the source code, as this is
+ what triggers the parse transformation of the <c>ets:fun2ms/1</c>
+ call to a valid match specification. This also implies that the
+ transformation is done at compile time (except when called from
+ the shell) and therefore takes no resources in runtime. That is,
+ although you use the more intuitive fun syntax, it gets as
+ efficient in runtime as writing match specifications by hand.</p>
+ </section>
+
+ <section>
+ <title>Example 2</title>
+ <p>Assume that we want to get all the employee numbers of employees
+ hired before year 2000. Using <c>ets:match/2</c> is not
+ an alternative here, as relational operators cannot be
+ expressed there.
+ Once again, <c>ets:foldr/3</c> can do it (slowly, but correct):</p>
+
<code type="none"><![CDATA[
ets:foldr(fun(#emp{empno = E, empyear = Y},Acc) when Y < 2000 -> [E | Acc];
(_,Acc) -> Acc
end,
[],
emp_tab). ]]></code>
- <p>The result will be
- <c>["052341","076324","535216","789789","989891"]</c>, as
- expected. Now the equivalent expression using a handwritten match
- specification would look something like this:</p>
+
+ <p>The result is <c>["052341","076324","535216","789789","989891"]</c>,
+ as expected. The equivalent expression using a handwritten match
+ specification would look like this:</p>
+
<code type="none"><![CDATA[
-ets:select(emp_tab,[{#emp{empno = '$1', empyear = '$2', _='_'},
+ets:select(emp_tab, [{#emp{empno = '$1', empyear = '$2', _='_'},
[{'<', '$2', 2000}],
['$1']}]). ]]></code>
- <p>This gives the same result, the <c><![CDATA[[{'<', '$2', 2000}]]]></c> is in
- the guard part and therefore discards anything that does not have a
- empyear (bound to '$2' in the head) less than 2000, just as the guard
- in the <c>foldl</c> example. Lets jump on to writing it using
- <c>ets:fun2ms</c></p>
+
+ <p>This gives the same result. <c><![CDATA[[{'<', '$2', 2000}]]]></c> is in
+ the guard part and therefore discards anything that does not have an
+ <c>empyear</c> (bound to <c>'$2'</c> in the head) less than 2000, as
+ the guard in the <c>foldr/3</c> example.</p>
+
+ <p>We write it using <c>ets:fun2ms/1</c>:</p>
+
<code type="none"><![CDATA[
-include_lib("stdlib/include/ms_transform.hrl").
-% ...
-
ets:select(emp_tab, ets:fun2ms(
fun(#emp{empno = E, empyear = Y}) when Y < 2000 ->
- E
+ E
end)). ]]></code>
- <p>Obviously readability is gained by using the parse transformation.</p>
- <p>I'll show some more examples without the tiresome
- comparing-to-alternatives stuff. Let's say we'd want the whole object
- matching instead of only one element. We could of course assign a
- variable to every part of the record and build it up once again in the
- body of the <c>fun</c>, but it's easier to do like this:</p>
+ </section>
+
+ <section>
+ <title>Example 3</title>
+ <p>Assume that we want the whole object matching instead of only one
+ element. One alternative is to assign a variable to every part
+ of the record and build it up once again in the body of the fun, but
+ the following is easier:</p>
+
<code type="none"><![CDATA[
ets:select(emp_tab, ets:fun2ms(
fun(Obj = #emp{empno = E, empyear = Y})
when Y < 2000 ->
Obj
- end)). ]]></code>
- <p>Just as in ordinary Erlang matching, you can bind a variable to the
- whole matched object using a "match in then match", i.e. a
- <c>=</c>. Unfortunately this is not general in <c>fun's</c> translated
- to match specifications, only on the "top level", i.e. matching the
- <em>whole</em> object arriving to be matched into a separate variable,
- is it allowed. For the one's used to writing match specifications by
- hand, I'll have to mention that the variable A will simply be
- translated into '$_'. It's not general, but it has very common usage,
- why it is handled as a special, but useful, case. If this bothers you,
- the pseudo function <c>object</c> also returns the whole matched
- object, see the part about caveats and limitations below.</p>
- <p>Let's do something in the <c>fun</c>'s body too: Let's say
- that someone realizes that there are a few people having an employee
- number beginning with a zero (<c>0</c>), which shouldn't be
- allowed. All those should have their numbers changed to begin with a
- one (<c>1</c>) instead and one wants the
- list <c><![CDATA[[{<Old empno>,<New empno>}]]]></c> created:</p>
+ end)).]]></code>
+
+ <p>As in ordinary Erlang matching, you can bind a variable to the
+ whole matched object using a "match inside the match", that is, a
+ <c>=</c>. Unfortunately in funs translated to match specifications,
+ it is allowed only at the "top-level", that is,
+ matching the <em>whole</em> object arriving to be matched
+ into a separate variable.
+ If you are used to writing match specifications by hand, we
+ mention that variable A is simply translated into '$_'.
+ Alternatively, pseudo function <c>object/0</c>
+ also returns the whole matched object, see section
+ <seealso marker="#warnings_and_restrictions">
+ Warnings and Restrictions</seealso>.</p>
+ </section>
+
+ <section>
+ <title>Example 4</title>
+ <p>This example concerns the body of the fun. Assume that all employee
+ numbers beginning with zero (<c>0</c>) must be changed to begin with
+ one (<c>1</c>) instead, and that we want to create the list
+ <c><![CDATA[[{<Old empno>,<New empno>}]]]></c>:</p>
+
<code type="none">
ets:select(emp_tab, ets:fun2ms(
fun(#emp{empno = [$0 | Rest] }) ->
{[$0|Rest],[$1|Rest]}
- end)). </code>
- <p>As a matter of fact, this query hits the feature of partially bound
- keys in the table type <c>ordered_set</c>, so that not the whole
- table need be searched, only the part of the table containing keys
- beginning with <c>0</c> is in fact looked into. </p>
- <p>The fun of course can have several clauses, so that if one could do
- the following: For each employee, if he or she is hired prior to 1997,
- return the tuple <c><![CDATA[{inventory, <employee number>}]]></c>, for each hired 1997
- or later, but before 2001, return <c><![CDATA[{rookie, <employee number>}]]></c>, for all others return <c><![CDATA[{newbie, <employee number>}]]></c>. All except for the ones named <c>Smith</c> as
- they would be affronted by anything other than the tag
- <c>guru</c> and that is also what's returned for their numbers;
- <c><![CDATA[{guru, <employee number>}]]></c>:</p>
+ end)).</code>
+
+ <p>This query hits the feature of partially bound
+ keys in table type <c>ordered_set</c>, so that not the whole
+ table needs to be searched, only the part containing keys
+ beginning with <c>0</c> is looked into.</p>
+ </section>
+
+ <section>
+ <title>Example 5</title>
+ <p>The fun can have many clauses. Assume that we want to do
+ the following:</p>
+
+ <list type="bulleted">
+ <item>
+ <p>If an employee started before 1997, return the tuple
+ <c><![CDATA[{inventory, <employee number>}]]></c>.</p>
+ </item>
+ <item>
+ <p>If an employee started 1997 or later, but before 2001, return
+ <c><![CDATA[{rookie, <employee number>}]]></c>.</p>
+ </item>
+ <item>
+ <p>For all other employees, return
+ <c><![CDATA[{newbie, <employee number>}]]></c>, except for those
+ named <c>Smith</c> as they would be affronted by anything other
+ than the tag <c>guru</c> and that is also what is returned for their
+ numbers: <c><![CDATA[{guru, <employee number>}]]></c>.</p>
+ </item>
+ </list>
+
+ <p>This is accomplished as follows:</p>
+
<code type="none"><![CDATA[
ets:select(emp_tab, ets:fun2ms(
fun(#emp{empno = E, surname = "Smith" }) ->
@@ -268,7 +321,9 @@ ets:select(emp_tab, ets:fun2ms(
(#emp{empno = E, empyear = Y}) -> % 1997 -- 2001
{rookie, E}
end)). ]]></code>
- <p>The result will be:</p>
+
+ <p>The result is as follows:</p>
+
<code type="none">
[{rookie,"011103"},
{rookie,"041231"},
@@ -278,162 +333,207 @@ ets:select(emp_tab, ets:fun2ms(
{rookie,"535216"},
{inventory,"789789"},
{newbie,"963721"},
- {rookie,"989891"}] </code>
- <p>and so the Smith's will be happy...</p>
- <p>So, what more can you do? Well, the simple answer would be; look
- in the documentation of match specifications in ERTS users
- guide. However let's briefly go through the most useful "built in
- functions" that you can use when the <c>fun</c> is to be
- translated into a match specification by <c>ets:fun2ms</c> (it's
- worth mentioning, although it might be obvious to some, that calling
- other functions than the one's allowed in match specifications cannot
- be done. No "usual" Erlang code can be executed by the <c>fun</c> being
- translated by <c>fun2ms</c>, the <c>fun</c> is after all limited
+ {rookie,"989891"}]</code>
+ </section>
+
+ <section>
+ <title>Useful BIFs</title>
+ <p>What more can you do? A simple answer is: see the documentation of
+ <seealso marker="erts:match_spec">match specifications</seealso>
+ in ERTS User's Guide.
+ However, the following is a brief overview of the most useful "built-in
+ functions" that you can use when the fun is to be translated into a match
+ specification by
+ <seealso marker="ets#fun2ms/1"> <c>ets:fun2ms/1</c></seealso>. It is not
+ possible to call other functions than those allowed in match
+ specifications. No "usual" Erlang code can be executed by the fun that
+ is translated by <c>ets:fun2ms/1</c>. The fun is limited
exactly to the power of the match specifications, which is
- unfortunate, but the price one has to pay for the execution speed of
- an <c>ets:select</c> compared to <c>ets:foldl/foldr</c>).</p>
- <p>The head of the <c>fun</c> is obviously a head matching (or mismatching)
- <em>one</em> parameter, one object of the table we <c>select</c>
+ unfortunate, but the price one must pay for the execution speed of
+ <c>ets:select/2</c> compared to <c>ets:foldl/foldr</c>.</p>
+
+ <p>The head of the fun is a head matching (or mismatching)
+ <em>one</em> parameter, one object of the table we select
from. The object is always a single variable (can be <c>_</c>) or
- a tuple, as that's what's in <c>ets, dets</c> and
- <c>mnesia</c> tables (the match specification returned by
- <c>ets:fun2ms</c> can of course be used with
- <c>dets:select</c> and <c>mnesia:select</c> as well as
- with <c>ets:select</c>). The use of <c>=</c> in the head
- is allowed (and encouraged) on the top level.</p>
+ a tuple, as ETS, Dets, and Mnesia tables include
+ that. The match specification returned by <c>ets:fun2ms/1</c> can
+ be used with <c>dets:select/2</c> and <c>mnesia:select/2</c>, and
+ with <c>ets:select/2</c>. The use of <c>=</c> in the head
+ is allowed (and encouraged) at the top-level.</p>
+
<p>The guard section can contain any guard expression of Erlang.
- Even the "old" type test are allowed on the toplevel of the guard
- (<c>integer(X)</c> instead of <c>is_integer(X)</c>). As the new type tests (the
- <c>is_</c> tests) are in practice just guard bif's they can also
- be called from within the body of the fun, but so they can in ordinary
- Erlang code. Also arithmetics is allowed, as well as ordinary guard
- bif's. Here's a list of bif's and expressions:</p>
+ The following is a list of BIFs and expressions:</p>
+
<list type="bulleted">
- <item>The type tests: is_atom, is_float, is_integer,
- is_list, is_number, is_pid, is_port, is_reference, is_tuple,
- is_binary, is_function, is_record</item>
- <item>The boolean operators: not, and, or, andalso, orelse </item>
- <item>The relational operators: >, >=, &lt;, =&lt;, =:=, ==, =/=, /=</item>
- <item>Arithmetics: +, -, *, div, rem</item>
- <item>Bitwise operators: band, bor, bxor, bnot, bsl, bsr</item>
- <item>The guard bif's: abs, element, hd, length, node, round, size, tl,
- trunc, self</item>
- <item>The obsolete type test (only in guards):
- atom, float, integer,
- list, number, pid, port, reference, tuple,
- binary, function, record</item>
+ <item>
+ <p>Type tests: <c>is_atom</c>, <c>is_float</c>, <c>is_integer</c>,
+ <c>is_list</c>, <c>is_number</c>, <c>is_pid</c>, <c>is_port</c>,
+ <c>is_reference</c>, <c>is_tuple</c>, <c>is_binary</c>,
+ <c>is_function</c>, <c>is_record</c></p>
+ </item>
+ <item>
+ <p>Boolean operators: <c>not</c>, <c>and</c>, <c>or</c>,
+ <c>andalso</c>, <c>orelse</c></p>
+ </item>
+ <item>
+ <p>Relational operators: &gt;, &gt;=, &lt;, =&lt;, =:=, ==, =/=, /=</p>
+ </item>
+ <item>
+ <p>Arithmetics: <c>+</c>, <c>-</c>, <c>*</c>,
+ <c>div</c>, <c>rem</c></p>
+ </item>
+ <item>
+ <p>Bitwise operators: <c>band</c>, <c>bor</c>, <c>bxor</c>, <c>bnot</c>,
+ <c>bsl</c>, <c>bsr</c></p>
+ </item>
+ <item>
+ <p>The guard BIFs: <c>abs</c>, <c>element</c>,
+ <c>hd</c>, <c>length</c>,
+ <c>node</c>, <c>round</c>, <c>size</c>, <c>tl</c>, <c>trunc</c>,
+ <c>self</c></p>
+ </item>
</list>
+
<p>Contrary to the fact with "handwritten" match specifications, the
<c>is_record</c> guard works as in ordinary Erlang code.</p>
- <p>Semicolons (<c>;</c>) in guards are allowed, the result will be (as
- expected) one "match_spec-clause" for each semicolon-separated
- part of the guard. The semantics being identical to the Erlang
+
+ <p>Semicolons (<c>;</c>) in guards are allowed, the result is (as
+ expected) one "match specification clause" for each semicolon-separated
+ part of the guard. The semantics is identical to the Erlang
semantics.</p>
- <p>The body of the <c>fun</c> is used to construct the
- resulting value. When selecting from tables one usually just construct
+
+ <p>The body of the fun is used to construct the
+ resulting value. When selecting from tables, one usually construct
a suiting term here, using ordinary Erlang term construction, like
- tuple parentheses, list brackets and variables matched out in the
- head, possibly in conjunction with the occasional constant. Whatever
- expressions are allowed in guards are also allowed here, but there are
- no special functions except <c>object</c> and
+ tuple parentheses, list brackets, and variables matched out in the
+ head, possibly with the occasional constant. Whatever
+ expressions are allowed in guards are also allowed here, but no special
+ functions exist except <c>object</c> and
<c>bindings</c> (see further down), which returns the whole
- matched object and all known variable bindings respectively.</p>
+ matched object and all known variable bindings, respectively.</p>
+
<p>The <c>dbg</c> variants of match specifications have an
- imperative approach to the match specification body, the ets dialect
- hasn't. The fun body for <c>ets:fun2ms</c> returns the result
- without side effects, and as matching (<c>=</c>) in the body of
+ imperative approach to the match specification body, the ETS
+ dialect has not. The fun body for <c>ets:fun2ms/1</c> returns the result
+ without side effects. As matching (<c>=</c>) in the body of
the match specifications is not allowed (for performance reasons) the
- only thing left, more or less, is term construction...</p>
- <p>Let's move on to the <c>dbg</c> dialect, the slightly
- different match specifications translated by <c>dbg:fun2ms</c>. </p>
- <p>The same reasons for using the parse transformation applies to
- <c>dbg</c>, maybe even more so as filtering using Erlang code is
- simply not a good idea when tracing (except afterwards, if you trace
- to file). The concept is similar to that of <c>ets:fun2ms</c>
- except that you usually use it directly from the shell (which can also
- be done with <c>ets:fun2ms</c>). </p>
- <p>Let's manufacture a toy module to trace on </p>
+ only thing left, more or less, is term construction.</p>
+ </section>
+
+ <section>
+ <title>Example with dbg</title>
+ <p>This section describes the slightly different match specifications
+ translated by <seealso marker="runtime_tools:dbg#fun2ms/1">
+ <c>dbg:fun2ms/1</c></seealso>.</p>
+
+ <p>The same reasons for using the parse transformation apply to
+ <c>dbg</c>, maybe even more, as filtering using Erlang code is
+ not a good idea when tracing (except afterwards, if you trace
+ to file). The concept is similar to that of <c>ets:fun2ms/1</c>
+ except that you usually use it directly from the shell
+ (which can also be done with <c>ets:fun2ms/1</c>).</p>
+
+ <p>The following is an example module to trace on:</p>
+
<code type="none">
-module(toy).
-export([start/1, store/2, retrieve/1]).
start(Args) ->
- toy_table = ets:new(toy_table,Args).
+ toy_table = ets:new(toy_table, Args).
store(Key, Value) ->
- ets:insert(toy_table,{Key,Value}).
+ ets:insert(toy_table, {Key,Value}).
retrieve(Key) ->
- [{Key, Value}] = ets:lookup(toy_table,Key),
- Value. </code>
- <p>During model testing, the first test bails out with a
+ [{Key, Value}] = ets:lookup(toy_table, Key),
+ Value.</code>
+
+ <p>During model testing, the first test results in
<c>{badmatch,16}</c> in <c>{toy,start,1}</c>, why?</p>
- <p>We suspect the ets call, as we match hard on the return value, but
- want only the particular <c>new</c> call with
- <c>toy_table</c> as first parameter.
- So we start a default tracer on the node:</p>
+
+ <p>We suspect the <c>ets:new/2</c> call, as we match hard on the
+ return value, but want only the particular <c>new/2</c> call with
+ <c>toy_table</c> as first parameter. So we start a default tracer
+ on the node:</p>
+
<pre>
1> <input>dbg:tracer().</input>
{ok,&lt;0.88.0>}</pre>
- <p>And so we turn on call tracing for all processes, we are going to
- make a pretty restrictive trace pattern, so there's no need to call
- trace only a few processes (it usually isn't):</p>
+
+ <p>We turn on call tracing for all processes, we want to
+ make a pretty restrictive trace pattern, so there is no need to call
+ trace only a few processes (usually it is not):</p>
+
<pre>
2> <input>dbg:p(all,call).</input>
-{ok,[{matched,nonode@nohost,25}]} </pre>
- <p>It's time to specify the filter. We want to view calls that resemble
- <c><![CDATA[ets:new(toy_table,<something>)]]></c>:</p>
+{ok,[{matched,nonode@nohost,25}]}</pre>
+
+ <p>We specify the filter, we want to view calls that resemble
+ <c><![CDATA[ets:new(toy_table, <something>)]]></c>:</p>
+
<pre>
3> <input>dbg:tp(ets,new,dbg:fun2ms(fun([toy_table,_]) -> true end)).</input>
-{ok,[{matched,nonode@nohost,1},{saved,1}]} </pre>
- <p>As can be seen, the <c>fun</c>'s used with
- <c>dbg:fun2ms</c> takes a single list as parameter instead of a
+{ok,[{matched,nonode@nohost,1},{saved,1}]}</pre>
+
+ <p>As can be seen, the fun used with
+ <c>dbg:fun2ms/1</c> takes a single list as parameter instead of a
single tuple. The list matches a list of the parameters to the traced
- function. A single variable may also be used of course. The body
- of the fun expresses in a more imperative way actions to be taken if
- the fun head (and the guards) matches. I return <c>true</c> here, but it's
- only because the body of a fun cannot be empty, the return value will
- be discarded. </p>
- <p>When we run the test of our module now, we get the following trace
- output:</p>
+ function. A single variable can also be used. The body
+ of the fun expresses, in a more imperative way, actions to be taken if
+ the fun head (and the guards) matches. <c>true</c> is returned here,
+ only because the body of a fun cannot be empty. The return value
+ is discarded.</p>
+
+ <p>The following trace output is received during test:</p>
+
<code type="none"><![CDATA[
-(<0.86.0>) call ets:new(toy_table,[ordered_set]) ]]></code>
- <p>Let's play we haven't spotted the problem yet, and want to see what
- <c>ets:new</c> returns. We do a slightly different trace
- pattern:</p>
+(<0.86.0>) call ets:new(toy_table, [ordered_set]) ]]></code>
+
+ <p>Assume that we have not found the problem yet, and want to see what
+ <c>ets:new/2</c> returns. We use a slightly different trace pattern:</p>
+
<pre>
4> <input>dbg:tp(ets,new,dbg:fun2ms(fun([toy_table,_]) -> return_trace() end)).</input></pre>
- <p>Resulting in the following trace output when we run the test:</p>
+
+ <p>The following trace output is received during test:</p>
+
<code type="none"><![CDATA[
(<0.86.0>) call ets:new(toy_table,[ordered_set])
(<0.86.0>) returned from ets:new/2 -> 24 ]]></code>
- <p>The call to <c>return_trace</c>, makes a trace message appear
+
+ <p>The call to <c>return_trace</c> results in a trace message
when the function returns. It applies only to the specific function call
triggering the match specification (and matching the head/guards of
- the match specification). This is the by far the most common call in the
+ the match specification). This is by far the most common call in the
body of a <c>dbg</c> match specification.</p>
- <p>As the test now fails with <c>{badmatch,24}</c>, it's obvious
- that the badmatch is because the atom <c>toy_table</c> does not
- match the number returned for an unnamed table. So we spotted the
- problem, the table should be named and the arguments supplied by our
- test program does not include <c>named_table</c>. We rewrite the
- start function to:</p>
+
+ <p>The test now fails with <c>{badmatch,24}</c> because the atom
+ <c>toy_table</c> does not match the number returned for an unnamed table.
+ So, the problem is found, the table is to be named, and the arguments
+ supplied by the test program do not include <c>named_table</c>. We
+ rewrite the start function:</p>
+
<code type="none">
start(Args) ->
- toy_table = ets:new(toy_table,[named_table |Args]). </code>
- <p>And with the same tracing turned on, we get the following trace
- output:</p>
+ toy_table = ets:new(toy_table, [named_table|Args]).</code>
+
+ <p>With the same tracing turned on, the following trace output is
+ received:</p>
+
<code type="none"><![CDATA[
(<0.86.0>) call ets:new(toy_table,[named_table,ordered_set])
(<0.86.0>) returned from ets:new/2 -> toy_table ]]></code>
- <p>Very well. Let's say the module now passes all testing and goes into
- the system. After a while someone realizes that the table
- <c>toy_table</c> grows while the system is running and that for some
- reason there are a lot of elements with atom's as keys. You had
- expected only integer keys and so does the rest of the system. Well,
- obviously not all of the system. You turn on call tracing and try to
- see calls to your module with an atom as the key:</p>
+
+ <p>Assume that the module now passes all testing and goes into
+ the system. After a while, it is found that table
+ <c>toy_table</c> grows while the system is running and that
+ there are many elements with atoms as keys. We expected
+ only integer keys and so does the rest of the system, but
+ clearly not the entire system. We turn on call tracing and try to
+ see calls to the module with an atom as the key:</p>
+
<pre>
1> <input>dbg:tracer().</input>
{ok,&lt;0.88.0>}
@@ -441,80 +541,101 @@ start(Args) ->
{ok,[{matched,nonode@nohost,25}]}
3> <input>dbg:tpl(toy,store,dbg:fun2ms(fun([A,_]) when is_atom(A) -> true end)).</input>
{ok,[{matched,nonode@nohost,1},{saved,1}]}</pre>
- <p>We use <c>dbg:tpl</c> here to make sure to catch local calls
- (let's say the module has grown since the smaller version and we're
- not sure this inserting of atoms is not done locally...). When in
- doubt always use local call tracing.</p>
- <p>Let's say nothing happens when we trace in this way. Our function
- is never called with these parameters. We make the conclusion that
- someone else (some other module) is doing it and we realize that we
- must trace on ets:insert and want to see the calling function. The
- calling function may be retrieved using the match specification
- function <c>caller</c> and to get it into the trace message, one
- has to use the match spec function <c>message</c>. The filter
- call looks like this (looking for calls to <c>ets:insert</c>):</p>
+
+ <p>We use <c>dbg:tpl/3</c> to ensure to catch local calls
+ (assume that the module has grown since the smaller version and we are
+ unsure if this inserting of atoms is not done locally). When in
+ doubt, always use local call tracing.</p>
+
+ <p>Assume that nothing happens when tracing in this way. The function
+ is never called with these parameters. We conclude that
+ someone else (some other module) is doing it and realize that we
+ must trace on <c>ets:insert/2</c> and want to see the calling function.
+ The calling function can be retrieved using the match specification
+ function <c>caller</c>. To get it into the trace message, the match
+ specification function <c>message</c> must be used. The filter
+ call looks like this (looking for calls to <c>ets:insert/2</c>):</p>
+
<pre>
4> <input>dbg:tpl(ets,insert,dbg:fun2ms(fun([toy_table,{A,_}]) when is_atom(A) -> </input>
<input> message(caller()) </input>
<input> end)). </input>
-{ok,[{matched,nonode@nohost,1},{saved,2}]} </pre>
- <p>The caller will now appear in the "additional message" part of the
- trace output, and so after a while, the following output comes:</p>
+{ok,[{matched,nonode@nohost,1},{saved,2}]}</pre>
+
+ <p>The caller is now displayed in the "additional message" part of the
+ trace output, and the following is displayed after a while:</p>
+
<code type="none"><![CDATA[
(<0.86.0>) call ets:insert(toy_table,{garbage,can}) ({evil_mod,evil_fun,2}) ]]></code>
- <p>You have found out that the function <c>evil_fun</c> of the
- module <c>evil_mod</c>, with arity <c>2</c>, is the one
- causing all this trouble.</p>
- <p>This was just a toy example, but it illustrated the most used
- calls in match specifications for <c>dbg</c> The other, more
- esotheric calls are listed and explained in the <em>Users guide of the ERTS application</em>, they really are beyond the scope of this
- document.</p>
- <p>To end this chatty introduction with something more precise, here
- follows some parts about caveats and restrictions concerning the fun's
- used in conjunction with <c>ets:fun2ms</c> and
- <c>dbg:fun2ms</c>:</p>
+
+ <p>You have realized that function <c>evil_fun</c> of the
+ <c>evil_mod</c> module, with arity <c>2</c>, is causing all this trouble.
+ </p>
+
+ <p>This example illustrates the most used calls in match specifications for
+ <c>dbg</c>. The other, more esoteric, calls are listed and explained in
+ <seealso marker="erts:match_spec">Match specifications in Erlang</seealso>
+ in ERTS User's Guide, as they are beyond
+ the scope of this description.</p>
+ </section>
+
+ <section>
+ <title>Warnings and Restrictions</title>
+ <marker id="warnings_and_restrictions"/>
+ <p>The following warnings and restrictions apply to the funs used in
+ with <c>ets:fun2ms/1</c> and <c>dbg:fun2ms/1</c>.</p>
+
<warning>
- <p>To use the pseudo functions triggering the translation, one
- <em>has to</em> include the header file <c>ms_transform.hrl</c>
- in the source code. Failure to do so will possibly result in
- runtime errors rather than compile time, as the expression may
+ <p>To use the pseudo functions triggering the translation,
+ ensure to include the header file <c>ms_transform.hrl</c>
+ in the source code. Failure to do so possibly results in
+ runtime errors rather than compile time, as the expression can
be valid as a plain Erlang program without translation.</p>
</warning>
+
<warning>
- <p>The <c>fun</c> has to be literally constructed inside the
- parameter list to the pseudo functions. The <c>fun</c> cannot
+ <p>The fun must be literally constructed inside the
+ parameter list to the pseudo functions. The fun cannot
be bound to a variable first and then passed to
- <c>ets:fun2ms</c> or <c>dbg:fun2ms</c>, i.e this
- will work: <c>ets:fun2ms(fun(A) -> A end)</c> but not this:
- <c>F = fun(A) -> A end, ets:fun2ms(F)</c>. The later will result
- in a compile time error if the header is included, otherwise a
- runtime error. Even if the later construction would ever
- appear to work, it really doesn't, so don't ever use it.</p>
+ <c>ets:fun2ms/1</c> or <c>dbg:fun2ms/1</c>. For example,
+ <c>ets:fun2ms(fun(A) -> A end)</c> works, but not
+ <c>F = fun(A) -> A end, ets:fun2ms(F)</c>. The latter results
+ in a compile-time error if the header is included, otherwise a
+ runtime error.</p>
</warning>
- <p>Several restrictions apply to the fun that is being translated
- into a match_spec. To put it simple you cannot use anything in
- the fun that you cannot use in a match_spec. This means that,
+
+ <p>Many restrictions apply to the fun that is translated into a match
+ specification. To put it simple: you cannot use anything in the fun
+ that you cannot use in a match specification. This means that,
among others, the following restrictions apply to the fun itself:</p>
+
<list type="bulleted">
- <item>Functions written in Erlang cannot be called, neither
- local functions, global functions or real fun's</item>
- <item>Everything that is written as a function call will be
- translated into a match_spec call to a builtin function, so that
- the call <c>is_list(X)</c> will be translated to <c>{'is_list', '$1'}</c> (<c>'$1'</c> is just an example, the numbering may
- vary). If one tries to call a function that is not a match_spec
- builtin, it will cause an error.</item>
- <item>Variables occurring in the head of the <c>fun</c> will be
- replaced by match_spec variables in the order of occurrence, so
- that the fragment <c>fun({A,B,C})</c> will be replaced by
- <c>{'$1', '$2', '$3'}</c> etc. Every occurrence of such a
- variable later in the match_spec will be replaced by a
- match_spec variable in the same way, so that the fun
- <c>fun({A,B}) when is_atom(A) -> B end</c> will be translated into
- <c>[{{'$1','$2'},[{is_atom,'$1'}],['$2']}]</c>.</item>
<item>
- <p>Variables that are not appearing in the head are imported
- from the environment and made into
- match_spec <c>const</c> expressions. Example from the shell:</p>
+ <p>Functions written in Erlang cannot be called, neither can
+ local functions, global functions, or real funs.</p>
+ </item>
+ <item>
+ <p>Everything that is written as a function call is translated
+ into a match specification call to a built-in function, so that
+ the call <c>is_list(X)</c> is translated to <c>{'is_list', '$1'}</c>
+ (<c>'$1'</c> is only an example, the numbering can vary).
+ If one tries to call a function that is not a match specification
+ built-in, it causes an error.</p>
+ </item>
+ <item>
+ <p>Variables occurring in the head of the fun are replaced by
+ match specification variables in the order of occurrence, so
+ that fragment <c>fun({A,B,C})</c> is replaced by
+ <c>{'$1', '$2', '$3'}</c>, and so on. Every occurrence of such a
+ variable in the match specification is replaced by a match
+ specification variable in the same way, so that the fun
+ <c>fun({A,B}) when is_atom(A) -> B end</c> is translated into
+ <c>[{{'$1','$2'},[{is_atom,'$1'}],['$2']}]</c>.</p>
+ </item>
+ <item>
+ <p>Variables that are not included in the head are imported
+ from the environment and made into match specification
+ <c>const</c> expressions. Example from the shell:</p>
<pre>
1> <input>X = 25.</input>
25
@@ -523,7 +644,7 @@ start(Args) ->
</item>
<item>
<p>Matching with <c>=</c> cannot be used in the body. It can only
- be used on the top level in the head of the fun.
+ be used on the top-level in the head of the fun.
Example from the shell again:</p>
<pre>
1> <input>ets:fun2ms(fun({A,[B|C]} = D) when A > B -> D end).</input>
@@ -534,106 +655,125 @@ match_spec
{error,transform_error}
3> <input>ets:fun2ms(fun({A,[B|C]}) when A > B -> D = [B|C], D end).</input>
Error: fun with body matching ('=' in body) is illegal as match_spec
-{error,transform_error} </pre>
- <p>All variables are bound in the head of a match_spec, so the
- translator can not allow multiple bindings. The special case
- when matching is done on the top level makes the variable bind
- to <c>'$_'</c> in the resulting match_spec, it is to allow a more
- natural access to the whole matched object. The pseudo
- function <c>object()</c> could be used instead, see below.
- The following expressions are translated equally: </p>
+{error,transform_error}</pre>
+ <p>All variables are bound in the head of a match specification, so
+ the translator cannot allow multiple bindings. The special case
+ when matching is done on the top-level makes the variable bind
+ to <c>'$_'</c> in the resulting match specification. It is to allow
+ a more natural access to the whole matched object. Pseudo
+ function <c>object()</c> can be used instead, see below.</p>
+ <p>The following expressions are translated equally:</p>
<code type="none">
ets:fun2ms(fun({a,_} = A) -> A end).
ets:fun2ms(fun({a,_}) -> object() end).</code>
</item>
<item>
- <p>The special match_spec variables <c>'$_'</c> and <c>'$*'</c>
+ <p>The special match specification variables <c>'$_'</c> and <c>'$*'</c>
can be accessed through the pseudo functions <c>object()</c>
(for <c>'$_'</c>) and <c>bindings()</c> (for <c>'$*'</c>).
- as an example, one could translate the following
- <c>ets:match_object/2</c> call to a <c>ets:select</c> call:</p>
+ As an example, one can translate the following
+ <c>ets:match_object/2</c> call to a <c>ets:select/2</c> call:</p>
<code type="none">
ets:match_object(Table, {'$1',test,'$2'}). </code>
- <p>...is the same as...</p>
+ <p>This is the same as:</p>
<code type="none">
ets:select(Table, ets:fun2ms(fun({A,test,B}) -> object() end)).</code>
- <p>(This was just an example, in this simple case the former
- expression is probably preferable in terms of readability).
- The <c>ets:select/2</c> call will conceptually look like this
+ <p>In this simple case, the former
+ expression is probably preferable in terms of readability.</p>
+ <p>The <c>ets:select/2</c> call conceptually looks like this
in the resulting code:</p>
<code type="none">
ets:select(Table, [{{'$1',test,'$2'},[],['$_']}]).</code>
- <p>Matching on the top level of the fun head might feel like a
+ <p>Matching on the top-level of the fun head can be a
more natural way to access <c>'$_'</c>, see above.</p>
</item>
- <item>Term constructions/literals are translated as much as is
- needed to get them into valid match_specs, so that tuples are
- made into match_spec tuple constructions (a one element tuple
- containing the tuple) and constant expressions are used when
- importing variables from the environment. Records are also
- translated into plain tuple constructions, calls to element
- etc. The guard test <c>is_record/2</c> is translated into
- match_spec code using the three parameter version that's built
- into match_specs, so that <c>is_record(A,t)</c> is translated
- into <c>{is_record,'$1',t,5}</c> given that the record size of
- record type <c>t</c> is 5.</item>
- <item>Language constructions like <c>case</c>, <c>if</c>,
- <c>catch</c> etc that are not present in match_specs are not
- allowed.</item>
- <item>If the header file <c>ms_transform.hrl</c> is not included,
- the fun won't be translated, which may result in a
- <em>runtime error</em> (depending on if the fun is valid in a
- pure Erlang context). Be absolutely sure that the header is
- included when using <c>ets</c> and <c>dbg:fun2ms/1</c> in
- compiled code.</item>
- <item>If the pseudo function triggering the translation is
- <c>ets:fun2ms/1</c>, the fun's head must contain a single
- variable or a single tuple. If the pseudo function is
- <c>dbg:fun2ms/1</c> the fun's head must contain a single
- variable or a single list.</item>
+ <item>
+ <p>Term constructions/literals are translated as much as is needed to
+ get them into valid match specification. This way tuples are made
+ into match specification tuple constructions (a one element tuple
+ containing the tuple) and constant expressions are used when
+ importing variables from the environment. Records are also
+ translated into plain tuple constructions, calls to element,
+ and so on. The guard test <c>is_record/2</c> is translated into
+ match specification code using the three parameter version that is
+ built into match specification, so that <c>is_record(A,t)</c> is
+ translated into <c>{is_record,'$1',t,5}</c> if the record
+ size of record type <c>t</c> is 5.</p>
+ </item>
+ <item>
+ <p>Language constructions such as <c>case</c>, <c>if</c>, and
+ <c>catch</c> that are not present in match specifications are not
+ allowed.</p>
+ </item>
+ <item>
+ <p>If header file <c>ms_transform.hrl</c> is not included,
+ the fun is not translated, which can result in a
+ <em>runtime error</em> (depending on whether the fun is
+ valid in a pure Erlang context).</p>
+ <p>Ensure that the header is included when using <c>ets</c> and
+ <c>dbg:fun2ms/1</c> in compiled code.</p>
+ </item>
+ <item>
+ <p>If pseudo function triggering the translation is
+ <c>ets:fun2ms/1</c>, the head of the fun must contain a single
+ variable or a single tuple. If the pseudo function is
+ <c>dbg:fun2ms/1</c>, the head of the fun must contain a single
+ variable or a single list.</p>
+ </item>
</list>
- <p>The translation from fun's to match_specs is done at compile
+ <p>The translation from funs to match specifications is done at compile
time, so runtime performance is not affected by using these pseudo
- functions. The compile time might be somewhat longer though. </p>
- <p>For more information about match_specs, please read about them
- in <em>ERTS users guide</em>.</p>
- </description>
+ functions.</p>
+ <p>For more information about match specifications, see the
+ <seealso marker="erts:match_spec">Match specifications in Erlang</seealso>
+ in ERTS User's Guide.</p>
+ </section>
+
<funcs>
<func>
- <name name="parse_transform" arity="2"/>
- <fsummary>Transforms Erlang abstract format containing calls to ets/dbg:fun2ms into literal match specifications.</fsummary>
- <type_desc variable="Options">Option list, required but not used.</type_desc>
+ <name name="format_error" arity="1"/>
+ <fsummary>Error formatting function as required by the parse transformation interface.</fsummary>
<desc>
- <p>Implements the actual transformation at compile time. This
- function is called by the compiler to do the source code
- transformation if and when the <c>ms_transform.hrl</c> header
- file is included in your source code. See the <c>ets</c> and
- <c>dbg</c>:<c>fun2ms/1</c> function manual pages for
- documentation on how to use this parse_transform, see the
- <c>match_spec</c> chapter in <c>ERTS</c> users guide for a
- description of match specifications. </p>
+ <p>Takes an error code returned by one of the other functions
+ in the module and creates a textual description of the
+ error.</p>
</desc>
</func>
+
<func>
- <name name="transform_from_shell" arity="3"/>
- <fsummary>Used when transforming fun's created in the shell into match_specifications.</fsummary>
- <type_desc variable="BoundEnvironment">List of variable bindings in the shell environment.</type_desc>
+ <name name="parse_transform" arity="2"/>
+ <fsummary>Transforms Erlang abstract format containing calls to
+ ets/dbg:fun2ms/1 into literal match specifications.</fsummary>
+ <type_desc variable="Options">Option list, required but not used.
+ </type_desc>
<desc>
- <p>Implements the actual transformation when the <c>fun2ms</c>
- functions are called from the shell. In this case the abstract
- form is for one single fun (parsed by the Erlang shell), and
- all imported variables should be in the key-value list passed
- as <c><anno>BoundEnvironment</anno></c>. The result is a term, normalized,
- i.e. not in abstract format.</p>
+ <p>Implements the transformation at compile time. This
+ function is called by the compiler to do the source code
+ transformation if and when header file <c>ms_transform.hrl</c>
+ is included in the source code.</p>
+ <p>For information about how to use this parse transformation, see
+ <seealso marker="ets"><c>ets</c></seealso> and
+ <seealso marker="runtime_tools:dbg#fun2ms/1">
+ <c>dbg:fun2ms/1</c></seealso>.</p>
+ <p>For a description of match specifications, see section
+ <seealso marker="erts:match_spec">
+ Match Specification in Erlang</seealso> in ERTS User's Guide.</p>
</desc>
</func>
+
<func>
- <name name="format_error" arity="1"/>
- <fsummary>Error formatting function as required by the parse_transform interface.</fsummary>
+ <name name="transform_from_shell" arity="3"/>
+ <fsummary>Used when transforming funs created in the shell into
+ match_specifications.</fsummary>
+ <type_desc variable="BoundEnvironment">List of variable bindings in the
+ shell environment.</type_desc>
<desc>
- <p>Takes an error code returned by one of the other functions
- in the module and creates a textual description of the
- error. Fairly uninteresting function actually.</p>
+ <p>Implements the transformation when the <c>fun2ms/1</c>
+ functions are called from the shell. In this case, the abstract
+ form is for one single fun (parsed by the Erlang shell).
+ All imported variables are to be in the key-value list passed
+ as <c><anno>BoundEnvironment</anno></c>. The result is a term,
+ normalized, that is, not in abstract format.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/notes.xml b/lib/stdlib/doc/src/notes.xml
index 76d49e37c2..f0347703e7 100644
--- a/lib/stdlib/doc/src/notes.xml
+++ b/lib/stdlib/doc/src/notes.xml
@@ -31,6 +31,21 @@
</header>
<p>This document describes the changes made to the STDLIB application.</p>
+<section><title>STDLIB 3.0.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p> Correct a bug regarding typed records in the Erlang
+ shell. The bug was introduced in OTP-19.0. </p>
+ <p>
+ Own Id: OTP-13719 Aux Id: ERL-182 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>STDLIB 3.0</title>
<section><title>Fixed Bugs and Malfunctions</title>
@@ -53,7 +68,7 @@
<item>
<p>
Avoid stray corner-case math errors on Solaris, e.g. an
- error is thrown on undeflows in exp() and pow() when it
+ error is thrown on underflows in exp() and pow() when it
shouldn't be.</p>
<p>
Own Id: OTP-13531</p>
@@ -67,6 +82,28 @@
<p>
Own Id: OTP-13534 Aux Id: ERL-135 </p>
</item>
+ <item>
+ <p>
+ Fixed a bug in re on openbsd where sometimes re:run would
+ return an incorrect result.</p>
+ <p>
+ Own Id: OTP-13602</p>
+ </item>
+ <item>
+ <p>
+ To avoid potential timer bottleneck on supervisor
+ restart, timer server is no longer used when the
+ supervisor is unable to restart a child.</p>
+ <p>
+ Own Id: OTP-13618 Aux Id: PR-1001 </p>
+ </item>
+ <item>
+ <p> The Erlang code preprocessor (<c>epp</c>) can handle
+ file names spanning over many tokens. Example:
+ <c>-include("a" "file" "name").</c>. </p>
+ <p>
+ Own Id: OTP-13662 Aux Id: seq13136 </p>
+ </item>
</list>
</section>
@@ -287,6 +324,37 @@
<p>
Own Id: OTP-13524 Aux Id: PR-1002 </p>
</item>
+ <item>
+ <p>
+ Supervisors now explicitly add their callback module in
+ the return from sys:get_status/1,2. This is to simplify
+ custom supervisor implementations. The Misc part of the
+ return value from sys:get_status/1,2 for a supervisor is
+ now:</p>
+ <p>
+ [{data, [{"State",
+ State}]},{supervisor,[{"Callback",Module}]}]</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-13619 Aux Id: PR-1000 </p>
+ </item>
+ <item>
+ <p>
+ Relax translation of initial calls in <c>proc_lib</c>,
+ i.e. remove the restriction to only do the translation
+ for <c>gen_server</c> and <c>gen_fsm</c>. This enables
+ user defined <c>gen</c> based generic callback modules to
+ be displayed nicely in <c>c:i()</c> and observer.</p>
+ <p>
+ Own Id: OTP-13623</p>
+ </item>
+ <item>
+ <p>The function <c>queue:lait/1</c> (misspelling of
+ <c>liat/1</c>) is now deprecated.</p>
+ <p>
+ Own Id: OTP-13658</p>
+ </item>
</list>
</section>
@@ -458,7 +526,7 @@
</item>
<item>
<p>
- The <c>stdlib</c> reference manual is updated to show
+ The STDLIB reference manual is updated to show
correct information about the return value of
<c>gen_fsm:reply/2</c>.</p>
<p>
@@ -6168,7 +6236,7 @@
documentation for <c>compile</c> on how to provide the key
for encrypting, and the documentation for <c>beam_lib</c>
on how to provide the key for decryption so that tools such
- as the Debugger, <c>xref</c>, or <c>cover</c> can be used.</p>
+ as the Debugger, Xref, or Cover can be used.</p>
<p>The <c>beam_lib:chunks/2</c> functions now accepts an
additional chunk type <c>compile_info</c> to retrieve
the compilation information directly as a term. (Thanks
diff --git a/lib/stdlib/doc/src/orddict.xml b/lib/stdlib/doc/src/orddict.xml
index 950f688735..076b06fc38 100644
--- a/lib/stdlib/doc/src/orddict.xml
+++ b/lib/stdlib/doc/src/orddict.xml
@@ -24,33 +24,35 @@
<title>orddict</title>
<prepared>Robert Virding</prepared>
- <responsible>nobody</responsible>
+ <responsible></responsible>
<docno></docno>
- <approved>nobody</approved>
- <checked>no</checked>
+ <approved></approved>
+ <checked></checked>
<date>2007-04-16</date>
<rev>B</rev>
- <file>orddict.sgml</file>
+ <file>orddict.xml</file>
</header>
<module>orddict</module>
- <modulesummary>Key-Value Dictionary as Ordered List</modulesummary>
+ <modulesummary>Key-value dictionary as ordered list.</modulesummary>
<description>
- <p><c>Orddict</c> implements a <c>Key</c> - <c>Value</c> dictionary.
+ <p>This module provides a <c>Key</c>-<c>Value</c> dictionary.
An <c>orddict</c> is a representation of a dictionary, where a
list of pairs is used to store the keys and values. The list is
ordered after the keys.</p>
- <p>This module provides exactly the same interface as the module
- <c>dict</c> but with a defined representation. One difference is
+
+ <p>This module provides the same interface as the
+ <seealso marker="dict"><c>dict(3)</c></seealso> module
+ but with a defined representation. One difference is
that while <c>dict</c> considers two keys as different if they
do not match (<c>=:=</c>), this module considers two keys as
- different if and only if they do not compare equal
- (<c>==</c>).</p>
+ different if and only if they do not compare equal (<c>==</c>).</p>
</description>
<datatypes>
<datatype>
<name name="orddict" n_vars="2"/>
- <desc><p>Dictionary as returned by <c>new/0</c>.</p></desc>
+ <desc><p>Dictionary as returned by
+ <seealso marker="#new/0"><c>new/0</c></seealso>.</p></desc>
</datatype>
<datatype>
<name name="orddict" n_vars="0"/>
@@ -60,202 +62,229 @@
<funcs>
<func>
<name name="append" arity="3"/>
- <fsummary>Append a value to keys in a dictionary</fsummary>
+ <fsummary>Append a value to keys in a dictionary.</fsummary>
<desc>
- <p>This function appends a new <c><anno>Value</anno></c> to the current list
- of values associated with <c><anno>Key</anno></c>. An exception is
- generated if the initial value associated with <c><anno>Key</anno></c> is
- not a list of values.</p>
+ <p>Appends a new <c><anno>Value</anno></c> to the current list
+ of values associated with <c><anno>Key</anno></c>. An exception is
+ generated if the initial value associated with <c><anno>Key</anno></c>
+ is not a list of values.</p>
+ <p>See also section <seealso marker="#notes">Notes</seealso>.</p>
</desc>
</func>
+
<func>
<name name="append_list" arity="3"/>
- <fsummary>Append new values to keys in a dictionary</fsummary>
+ <fsummary>Append new values to keys in a dictionary.</fsummary>
<desc>
- <p>This function appends a list of values <c><anno>ValList</anno></c> to
- the current list of values associated with <c><anno>Key</anno></c>. An
- exception is generated if the initial value associated with
+ <p>Appends a list of values <c><anno>ValList</anno></c> to
+ the current list of values associated with <c><anno>Key</anno></c>.
+ An exception is generated if the initial value associated with
<c><anno>Key</anno></c> is not a list of values.</p>
+ <p>See also section <seealso marker="#notes">Notes</seealso>.</p>
</desc>
</func>
+
<func>
<name name="erase" arity="2"/>
- <fsummary>Erase a key from a dictionary</fsummary>
+ <fsummary>Erase a key from a dictionary.</fsummary>
<desc>
- <p>This function erases all items with a given key from a
- dictionary.</p>
+ <p>Erases all items with a specified key from a dictionary.</p>
</desc>
</func>
+
<func>
<name name="fetch" arity="2"/>
- <fsummary>Look-up values in a dictionary</fsummary>
+ <fsummary>Look up values in a dictionary.</fsummary>
<desc>
- <p>This function returns the value associated with <c><anno>Key</anno></c>
- in the dictionary <c><anno>Orddict</anno></c>. <c>fetch</c> assumes that
- the <c><anno>Key</anno></c> is present in the dictionary and an exception
+ <p>Returns the value associated with <c><anno>Key</anno></c>
+ in dictionary <c><anno>Orddict</anno></c>. This function assumes that
+ the <c><anno>Key</anno></c> is present in the dictionary. An exception
is generated if <c><anno>Key</anno></c> is not in the dictionary.</p>
+ <p>See also section <seealso marker="#notes">Notes</seealso>.</p>
</desc>
</func>
+
<func>
<name name="fetch_keys" arity="1"/>
- <fsummary>Return all keys in a dictionary</fsummary>
+ <fsummary>Return all keys in a dictionary.</fsummary>
<desc>
- <p>This function returns a list of all keys in the dictionary.</p>
+ <p>Returns a list of all keys in a dictionary.</p>
</desc>
</func>
+
<func>
<name name="filter" arity="2"/>
- <fsummary>Choose elements which satisfy a predicate</fsummary>
+ <fsummary>Select elements that satisfy a predicate.</fsummary>
<desc>
- <p><c><anno>Orddict2</anno></c> is a dictionary of all keys and values in
- <c><anno>Orddict1</anno></c> for which <c><anno>Pred</anno>(<anno>Key</anno>, <anno>Value</anno>)</c> is <c>true</c>.</p>
+ <p><c><anno>Orddict2</anno></c> is a dictionary of all keys and values
+ in <c><anno>Orddict1</anno></c> for which
+ <c><anno>Pred</anno>(<anno>Key</anno>, <anno>Value</anno>)</c> is
+ <c>true</c>.</p>
</desc>
</func>
+
<func>
<name name="find" arity="2"/>
- <fsummary>Search for a key in a dictionary</fsummary>
+ <fsummary>Search for a key in a dictionary.</fsummary>
<desc>
- <p>This function searches for a key in a dictionary. Returns
- <c>{ok, <anno>Value</anno>}</c> where <c><anno>Value</anno></c> is the value associated
- with <c><anno>Key</anno></c>, or <c>error</c> if the key is not present in
- the dictionary.</p>
+ <p>Searches for a key in a dictionary. Returns
+ <c>{ok, <anno>Value</anno>}</c>, where <c><anno>Value</anno></c> is
+ the value associated with <c><anno>Key</anno></c>, or <c>error</c> if
+ the key is not present in the dictionary.</p>
+ <p>See also section <seealso marker="#notes">Notes</seealso>.</p>
</desc>
</func>
+
<func>
<name name="fold" arity="3"/>
- <fsummary>Fold a function over a dictionary</fsummary>
+ <fsummary>Fold a function over a dictionary.</fsummary>
<desc>
<p>Calls <c><anno>Fun</anno></c> on successive keys and values of
<c><anno>Orddict</anno></c> together with an extra argument <c>Acc</c>
(short for accumulator). <c><anno>Fun</anno></c> must return a new
- accumulator which is passed to the next call. <c><anno>Acc0</anno></c> is
- returned if the list is empty.</p>
+ accumulator that is passed to the next call. <c><anno>Acc0</anno></c>
+ is returned if the list is empty.</p>
</desc>
</func>
+
<func>
<name name="from_list" arity="1"/>
- <fsummary>Convert a list of pairs to a dictionary</fsummary>
+ <fsummary>Convert a list of pairs to a dictionary.</fsummary>
<desc>
- <p>This function converts the <c><anno>Key</anno></c> - <c><anno>Value</anno></c> list
+ <p>Converts the <c><anno>Key</anno></c>-<c><anno>Value</anno></c> list
<c><anno>List</anno></c> to a dictionary.</p>
</desc>
</func>
+
+ <func>
+ <name name="is_empty" arity="1"/>
+ <fsummary>Return true if the dictionary is empty.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c><anno>Orddict</anno></c> has no elements,
+ otherwise <c>false</c>.</p>
+ </desc>
+ </func>
+
<func>
<name name="is_key" arity="2"/>
- <fsummary>Test if a key is in a dictionary</fsummary>
+ <fsummary>Test if a key is in a dictionary.</fsummary>
<desc>
- <p>This function tests if <c><anno>Key</anno></c> is contained in
- the dictionary <c><anno>Orddict</anno></c>.</p>
+ <p>Tests if <c><anno>Key</anno></c> is contained in
+ dictionary <c><anno>Orddict</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="map" arity="2"/>
- <fsummary>Map a function over a dictionary</fsummary>
+ <fsummary>Map a function over a dictionary.</fsummary>
<desc>
- <p><c>map</c> calls <c><anno>Fun</anno></c> on successive keys and values
- of <c><anno>Orddict1</anno></c> to return a new value for each key.</p>
+ <p>Calls <c><anno>Fun</anno></c> on successive keys and values of
+ <c><anno>Orddict1</anno></c> tvo return a new value for each key.</p>
</desc>
</func>
+
<func>
<name name="merge" arity="3"/>
- <fsummary>Merge two dictionaries</fsummary>
+ <fsummary>Merge two dictionaries.</fsummary>
<desc>
- <p><c>merge</c> merges two dictionaries, <c><anno>Orddict1</anno></c> and
- <c><anno>Orddict2</anno></c>, to create a new dictionary. All the <c><anno>Key</anno></c>
- - <c><anno>Value</anno></c> pairs from both dictionaries are included in
- the new dictionary. If a key occurs in both dictionaries then
- <c><anno>Fun</anno></c> is called with the key and both values to return a
- new value. <c>merge</c> could be defined as:</p>
+ <p>Merges two dictionaries, <c><anno>Orddict1</anno></c> and
+ <c><anno>Orddict2</anno></c>, to create a new dictionary. All the
+ <c><anno>Key</anno></c>-<c><anno>Value</anno></c> pairs from both
+ dictionaries are included in the new dictionary. If a key occurs in
+ both dictionaries, <c><anno>Fun</anno></c> is called with the key and
+ both values to return a new value.
+ <c>merge/3</c> can be defined as follows, but is faster:</p>
<code type="none">
merge(Fun, D1, D2) ->
fold(fun (K, V1, D) ->
update(K, fun (V2) -> Fun(K, V1, V2) end, V1, D)
end, D2, D1).</code>
- <p>but is faster.</p>
</desc>
</func>
+
<func>
<name name="new" arity="0"/>
- <fsummary>Create a dictionary</fsummary>
+ <fsummary>Create a dictionary.</fsummary>
<desc>
- <p>This function creates a new dictionary.</p>
+ <p>Creates a new dictionary.</p>
</desc>
</func>
+
<func>
<name name="size" arity="1"/>
- <fsummary>Return the number of elements in an ordered dictionary</fsummary>
+ <fsummary>Return the number of elements in an ordered dictionary.
+ </fsummary>
<desc>
<p>Returns the number of elements in an <c><anno>Orddict</anno></c>.</p>
</desc>
</func>
- <func>
- <name name="is_empty" arity="1"/>
- <fsummary>Return true if the dictionary is empty</fsummary>
- <desc>
- <p>Returns <c>true</c> if <c><anno>Orddict</anno></c> has no elements, <c>false</c> otherwise.</p>
- </desc>
- </func>
+
<func>
<name name="store" arity="3"/>
- <fsummary>Store a value in a dictionary</fsummary>
+ <fsummary>Store a value in a dictionary.</fsummary>
<desc>
- <p>This function stores a <c><anno>Key</anno></c> - <c><anno>Value</anno></c> pair in a
- dictionary. If the <c><anno>Key</anno></c> already exists in <c><anno>Orddict1</anno></c>,
+ <p>Stores a <c><anno>Key</anno></c>-<c><anno>Value</anno></c> pair in a
+ dictionary. If the <c><anno>Key</anno></c> already exists in
+ <c><anno>Orddict1</anno></c>,
the associated value is replaced by <c><anno>Value</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="to_list" arity="1"/>
- <fsummary>Convert a dictionary to a list of pairs</fsummary>
+ <fsummary>Convert a dictionary to a list of pairs.</fsummary>
<desc>
- <p>This function converts the dictionary to a list
- representation.</p>
+ <p>Converts a dictionary to a list representation.</p>
</desc>
</func>
+
<func>
<name name="update" arity="3"/>
- <fsummary>Update a value in a dictionary</fsummary>
+ <fsummary>Update a value in a dictionary.</fsummary>
<desc>
- <p>Update a value in a dictionary by calling <c><anno>Fun</anno></c> on
- the value to get a new value. An exception is generated if
+ <p>Updates a value in a dictionary by calling <c><anno>Fun</anno></c>
+ on the value to get a new value. An exception is generated if
<c><anno>Key</anno></c> is not present in the dictionary.</p>
</desc>
</func>
+
<func>
<name name="update" arity="4"/>
- <fsummary>Update a value in a dictionary</fsummary>
+ <fsummary>Update a value in a dictionary.</fsummary>
<desc>
- <p>Update a value in a dictionary by calling <c><anno>Fun</anno></c> on
- the value to get a new value. If <c><anno>Key</anno></c> is not present
- in the dictionary then <c><anno>Initial</anno></c> will be stored as
- the first value. For example <c>append/3</c> could be defined
- as:</p>
+ <p>Updates a value in a dictionary by calling <c><anno>Fun</anno></c>
+ on the value to get a new value. If <c><anno>Key</anno></c> is not
+ present in the dictionary, <c><anno>Initial</anno></c> is stored as
+ the first value. For example, <c>append/3</c> can be defined
+ as follows:</p>
<code type="none">
append(Key, Val, D) ->
update(Key, fun (Old) -> Old ++ [Val] end, [Val], D).</code>
</desc>
</func>
+
<func>
<name name="update_counter" arity="3"/>
- <fsummary>Increment a value in a dictionary</fsummary>
+ <fsummary>Increment a value in a dictionary.</fsummary>
<desc>
- <p>Add <c><anno>Increment</anno></c> to the value associated with <c><anno>Key</anno></c>
- and store this value. If <c><anno>Key</anno></c> is not present in
- the dictionary then <c><anno>Increment</anno></c> will be stored as
+ <p>Adds <c><anno>Increment</anno></c> to the value associated with
+ <c><anno>Key</anno></c>
+ and store this value. If <c><anno>Key</anno></c> is not present in
+ the dictionary, <c><anno>Increment</anno></c> is stored as
the first value.</p>
- <p>This could be defined as:</p>
+ <p>This can be defined as follows, but is faster:</p>
<code type="none">
update_counter(Key, Incr, D) ->
update(Key, fun (Old) -> Old + Incr end, Incr, D).</code>
- <p>but is faster.</p>
</desc>
</func>
</funcs>
<section>
<title>Notes</title>
- <p>The functions <c>append</c> and <c>append_list</c> are included
- so we can store keyed values in a list <em>accumulator</em>. For
+ <marker id="notes"/>
+ <p>Functions <c>append/3</c> and <c>append_list/3</c> are included
+ so that keyed values can be stored in a list <em>accumulator</em>, for
example:</p>
<pre>
> D0 = orddict:new(),
@@ -264,19 +293,18 @@ update_counter(Key, Incr, D) ->
D3 = orddict:append(files, f2, D2),
D4 = orddict:append(files, f3, D3),
orddict:fetch(files, D4).
-[f1,f2,f3] </pre>
+[f1,f2,f3]</pre>
<p>This saves the trouble of first fetching a keyed value,
appending a new value to the list of stored values, and storing
- the result.
- </p>
- <p>The function <c>fetch</c> should be used if the key is known to
- be in the dictionary, otherwise <c>find</c>.</p>
+ the result.</p>
+ <p>Function <c>fetch/2</c> is to be used if the key is known to
+ be in the dictionary, otherwise function <c>find/2</c>.</p>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="dict">dict(3)</seealso>,
- <seealso marker="gb_trees">gb_trees(3)</seealso></p>
+ <p><seealso marker="dict"><c>dict(3)</c></seealso>,
+ <seealso marker="gb_trees"><c>gb_trees(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/ordsets.xml b/lib/stdlib/doc/src/ordsets.xml
index 0d5d618b66..148281fcf7 100644
--- a/lib/stdlib/doc/src/ordsets.xml
+++ b/lib/stdlib/doc/src/ordsets.xml
@@ -24,23 +24,26 @@
<title>ordsets</title>
<prepared>Robert Virding</prepared>
- <responsible>Bjarne Dacker</responsible>
+ <responsible>Bjarne D&auml;cker</responsible>
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>99-07-27</date>
+ <date>1999-07-27</date>
<rev>A</rev>
- <file>ordsets.sgml</file>
+ <file>ordsets.xml</file>
</header>
<module>ordsets</module>
- <modulesummary>Functions for Manipulating Sets as Ordered Lists</modulesummary>
+ <modulesummary>Functions for manipulating sets as ordered lists.
+ </modulesummary>
<description>
<p>Sets are collections of elements with no duplicate elements.
An <c>ordset</c> is a representation of a set, where an ordered
list is used to store the elements of the set. An ordered list
is more efficient than an unordered list.</p>
- <p>This module provides exactly the same interface as the module
- <c>sets</c> but with a defined representation. One difference is
+
+ <p>This module provides the same interface as the
+ <seealso marker="sets"><c>sets(3)</c></seealso> module
+ but with a defined representation. One difference is
that while <c>sets</c> considers two elements as different if they
do not match (<c>=:=</c>), this module considers two elements as
different if and only if they do not compare equal (<c>==</c>).</p>
@@ -49,146 +52,168 @@
<datatypes>
<datatype>
<name name="ordset" n_vars="1"/>
- <desc><p>As returned by new/0.</p></desc>
+ <desc><p>As returned by
+ <seealso marker="#new/0"><c>new/0</c></seealso>.</p></desc>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="new" arity="0"/>
- <fsummary>Return an empty set</fsummary>
+ <name name="add_element" arity="2"/>
+ <fsummary>Add an element to an <c>Ordset</c>.</fsummary>
<desc>
- <p>Returns a new empty ordered set.</p>
+ <p>Returns a new ordered set formed from <c><anno>Ordset1</anno></c>
+ with <c><anno>Element</anno></c> inserted.</p>
</desc>
</func>
+
<func>
- <name name="is_set" arity="1"/>
- <fsummary>Test for an <c>Ordset</c></fsummary>
+ <name name="del_element" arity="2"/>
+ <fsummary>Remove an element from an <c>Ordset</c>.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Ordset</anno></c> is an ordered set of
- elements, otherwise <c>false</c>.</p>
+ <p>Returns <c><anno>Ordset1</anno></c>, but with
+ <c><anno>Element</anno></c> removed.</p>
</desc>
</func>
+
<func>
- <name name="size" arity="1"/>
- <fsummary>Return the number of elements in a set</fsummary>
+ <name name="filter" arity="2"/>
+ <fsummary>Filter set elements.</fsummary>
<desc>
- <p>Returns the number of elements in <c><anno>Ordset</anno></c>.</p>
+ <p>Filters elements in <c><anno>Ordset1</anno></c> with boolean function
+ <c><anno>Pred</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="to_list" arity="1"/>
- <fsummary>Convert an <c>Ordset</c>into a list</fsummary>
+ <name name="fold" arity="3"/>
+ <fsummary>Fold over set elements.</fsummary>
<desc>
- <p>Returns the elements of <c><anno>Ordset</anno></c> as a list.</p>
+ <p>Folds <c><anno>Function</anno></c> over every element in
+ <c><anno>Ordset</anno></c> and returns the final value of the
+ accumulator.</p>
</desc>
</func>
+
<func>
<name name="from_list" arity="1"/>
- <fsummary>Convert a list into an <c>Ordset</c></fsummary>
+ <fsummary>Convert a list into an <c>Ordset</c>.</fsummary>
<desc>
- <p>Returns an ordered set of the elements in <c><anno>List</anno></c>.</p>
+ <p>Returns an ordered set of the elements in <c><anno>List</anno></c>.
+ </p>
</desc>
</func>
+
<func>
- <name name="is_element" arity="2"/>
- <fsummary>Test for membership of an <c>Ordset</c></fsummary>
+ <name name="intersection" arity="1"/>
+ <fsummary>Return the intersection of a list of <c>Ordsets</c></fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Element</anno></c> is an element of
- <c><anno>Ordset</anno></c>, otherwise <c>false</c>.</p>
+ <p>Returns the intersection of the non-empty list of sets.</p>
</desc>
</func>
+
<func>
- <name name="add_element" arity="2"/>
- <fsummary>Add an element to an <c>Ordset</c></fsummary>
+ <name name="intersection" arity="2"/>
+ <fsummary>Return the intersection of two <c>Ordsets</c>.</fsummary>
<desc>
- <p>Returns a new ordered set formed from <c><anno>Ordset1</anno></c> with
- <c><anno>Element</anno></c> inserted.</p>
+ <p>Returns the intersection of <c><anno>Ordset1</anno></c> and
+ <c><anno>Ordset2</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="del_element" arity="2"/>
- <fsummary>Remove an element from an <c>Ordset</c></fsummary>
+ <name name="is_disjoint" arity="2"/>
+ <fsummary>Check whether two <c>Ordsets</c> are disjoint.</fsummary>
<desc>
- <p>Returns <c><anno>Ordset1</anno></c>, but with <c><anno>Element</anno></c> removed.</p>
+ <p>Returns <c>true</c> if <c><anno>Ordset1</anno></c> and
+ <c><anno>Ordset2</anno></c> are disjoint (have no elements in common),
+ otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="union" arity="2"/>
- <fsummary>Return the union of two <c>Ordsets</c></fsummary>
+ <name name="is_element" arity="2"/>
+ <fsummary>Test for membership of an <c>Ordset</c>.</fsummary>
<desc>
- <p>Returns the merged (union) set of <c><anno>Ordset1</anno></c> and
- <c><anno>Ordset2</anno></c>.</p>
+ <p>Returns <c>true</c> if <c><anno>Element</anno></c> is an element of
+ <c><anno>Ordset</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="union" arity="1"/>
- <fsummary>Return the union of a list of <c>Ordsets</c></fsummary>
+ <name name="is_set" arity="1"/>
+ <fsummary>Test for an <c>Ordset</c>.</fsummary>
<desc>
- <p>Returns the merged (union) set of the list of sets.</p>
+ <p>Returns <c>true</c> if <c><anno>Ordset</anno></c> is an ordered set
+ of elements, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="intersection" arity="2"/>
- <fsummary>Return the intersection of two <c>Ordsets</c></fsummary>
+ <name name="is_subset" arity="2"/>
+ <fsummary>Test for subset.</fsummary>
<desc>
- <p>Returns the intersection of <c><anno>Ordset1</anno></c> and
- <c><anno>Ordset2</anno></c>.</p>
+ <p>Returns <c>true</c> when every element of <c><anno>Ordset1</anno></c>
+ is also a member of <c><anno>Ordset2</anno></c>, otherwise
+ <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="intersection" arity="1"/>
- <fsummary>Return the intersection of a list of <c>Ordsets</c></fsummary>
+ <name name="new" arity="0"/>
+ <fsummary>Return an empty set.</fsummary>
<desc>
- <p>Returns the intersection of the non-empty list of sets.</p>
+ <p>Returns a new empty ordered set.</p>
</desc>
</func>
+
<func>
- <name name="is_disjoint" arity="2"/>
- <fsummary>Check whether two <c>Ordsets</c> are disjoint</fsummary>
+ <name name="size" arity="1"/>
+ <fsummary>Return the number of elements in a set.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Ordset1</anno></c> and
- <c><anno>Ordset2</anno></c> are disjoint (have no elements in common),
- and <c>false</c> otherwise.</p>
+ <p>Returns the number of elements in <c><anno>Ordset</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="subtract" arity="2"/>
- <fsummary>Return the difference of two <c>Ordsets</c></fsummary>
+ <fsummary>Return the difference of two <c>Ordsets</c>.</fsummary>
<desc>
- <p>Returns only the elements of <c><anno>Ordset1</anno></c> which are not
+ <p>Returns only the elements of <c><anno>Ordset1</anno></c> that are not
also elements of <c><anno>Ordset2</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="is_subset" arity="2"/>
- <fsummary>Test for subset</fsummary>
+ <name name="to_list" arity="1"/>
+ <fsummary>Convert an <c>Ordset</c> into a list.</fsummary>
<desc>
- <p>Returns <c>true</c> when every element of <c><anno>Ordset1</anno></c> is
- also a member of <c><anno>Ordset2</anno></c>, otherwise <c>false</c>.</p>
+ <p>Returns the elements of <c><anno>Ordset</anno></c> as a list.</p>
</desc>
</func>
+
<func>
- <name name="fold" arity="3"/>
- <fsummary>Fold over set elements</fsummary>
+ <name name="union" arity="1"/>
+ <fsummary>Return the union of a list of <c>Ordsets</c>.</fsummary>
<desc>
- <p>Fold <c><anno>Function</anno></c> over every element in <c><anno>Ordset</anno></c>
- returning the final value of the accumulator.</p>
+ <p>Returns the merged (union) set of the list of sets.</p>
</desc>
</func>
+
<func>
- <name name="filter" arity="2"/>
- <fsummary>Filter set elements</fsummary>
+ <name name="union" arity="2"/>
+ <fsummary>Return the union of two <c>Ordsets</c>.</fsummary>
<desc>
- <p>Filter elements in <c><anno>Ordset1</anno></c> with boolean function
- <c><anno>Pred</anno></c>.</p>
+ <p>Returns the merged (union) set of <c><anno>Ordset1</anno></c> and
+ <c><anno>Ordset2</anno></c>.</p>
</desc>
</func>
</funcs>
<section>
<title>See Also</title>
- <p><seealso marker="gb_sets">gb_sets(3)</seealso>,
- <seealso marker="sets">sets(3)</seealso></p>
+ <p><seealso marker="gb_sets"><c>gb_sets(3)</c></seealso>,
+ <seealso marker="sets"><c>sets(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/part.xml b/lib/stdlib/doc/src/part.xml
index 15b7bd4a1d..93c47405bf 100644
--- a/lib/stdlib/doc/src/part.xml
+++ b/lib/stdlib/doc/src/part.xml
@@ -31,9 +31,10 @@
<rev>1.0</rev>
<file>part.xml</file>
</header>
- <description>
- <p>The Erlang standard library <em>STDLIB</em>.</p>
- </description>
+
+ <description></description>
+
+ <xi:include href="introduction.xml"/>
<xi:include href="io_protocol.xml"/>
<xi:include href="unicode_usage.xml"/>
</part>
diff --git a/lib/stdlib/doc/src/pool.xml b/lib/stdlib/doc/src/pool.xml
index d217d071da..05d12ade28 100644
--- a/lib/stdlib/doc/src/pool.xml
+++ b/lib/stdlib/doc/src/pool.xml
@@ -29,89 +29,103 @@
<rev></rev>
</header>
<module>pool</module>
- <modulesummary>Load Distribution Facility</modulesummary>
+ <modulesummary>Load distribution facility.</modulesummary>
<description>
- <p><c>pool</c> can be used to run a set of Erlang nodes as a pool
+ <p>This module can be used to run a set of Erlang nodes as a pool
of computational processors. It is organized as a master and a
set of slave nodes and includes the following features:</p>
+
<list type="bulleted">
<item>The slave nodes send regular reports to the master about
- their current load.</item>
+ their current load.</item>
<item>Queries can be sent to the master to determine which node
- will have the least load.</item>
+ will have the least load.</item>
</list>
+
<p>The BIF <c>statistics(run_queue)</c> is used for estimating
future loads. It returns the length of the queue of ready to run
processes in the Erlang runtime system.</p>
- <p>The slave nodes are started with the <c>slave</c> module. This
- effects, tty IO, file IO, and code loading.</p>
- <p>If the master node fails, the entire pool will exit.</p>
+
+ <p>The slave nodes are started with the
+ <seealso marker="slave"><c>slave(3)</c></seealso> module. This
+ effects terminal I/O, file I/O, and code loading.</p>
+ <p>If the master node fails, the entire pool exits.</p>
</description>
+
<funcs>
<func>
- <name name="start" arity="1"/>
- <name name="start" arity="2"/>
- <fsummary>>Start a new pool</fsummary>
- <desc>
- <p>Starts a new pool. The file <c>.hosts.erlang</c> is read to
- find host names where the pool nodes can be started. See
- section <seealso marker="#files">Files</seealso> below. The
- start-up procedure fails if the file is not found.</p>
- <p>The slave nodes are started with <c>slave:start/2,3</c>,
- passing along <c><anno>Name</anno></c> and, if provided,
- <c><anno>Args</anno></c>.
- <c><anno>Name</anno></c> is used as the first part of the node names,
- <c><anno>Args</anno></c> is used to specify command line arguments. See
- <seealso marker="slave#start/2">slave(3)</seealso>.</p>
- <p>Access rights must be set so that all nodes in the pool have
- the authority to access each other.</p>
- <p>The function is synchronous and all the nodes, as well as
- all the system servers, are running when it returns a value.</p>
- </desc>
- </func>
- <func>
<name name="attach" arity="1"/>
- <fsummary>Ensure that a pool master is running</fsummary>
+ <fsummary>Ensure that a pool master is running.</fsummary>
<desc>
- <p>This function ensures that a pool master is running and
- includes <c><anno>Node</anno></c> in the pool master's pool of nodes.</p>
+ <p>Ensures that a pool master is running and includes
+ <c><anno>Node</anno></c> in the pool master's pool of nodes.</p>
</desc>
</func>
+
<func>
- <name name="stop" arity="0"/>
- <fsummary>Stop the pool and kill all the slave nodes</fsummary>
+ <name name="get_node" arity="0"/>
+ <fsummary>Return the node with the expected lowest future load.</fsummary>
<desc>
- <p>Stops the pool and kills all the slave nodes.</p>
+ <p>Returns the node with the expected lowest future load.</p>
</desc>
</func>
+
<func>
<name name="get_nodes" arity="0"/>
- <fsummary>Return a list of the current member nodes of the pool</fsummary>
+ <fsummary>Return a list of the current member nodes of the pool.
+ </fsummary>
<desc>
<p>Returns a list of the current member nodes of the pool.</p>
</desc>
</func>
+
<func>
<name name="pspawn" arity="3"/>
- <fsummary>Spawn a process on the pool node with expected lowest future load</fsummary>
+ <fsummary>Spawn a process on the pool node with expected lowest future
+ load.</fsummary>
<desc>
- <p>Spawns a process on the pool node which is expected to have
+ <p>Spawns a process on the pool node that is expected to have
the lowest future load.</p>
</desc>
</func>
+
<func>
<name name="pspawn_link" arity="3"/>
- <fsummary>Spawn and link to a process on the pool node with expected lowest future load</fsummary>
+ <fsummary>Spawn and link to a process on the pool node with expected
+ lowest future load.</fsummary>
<desc>
- <p>Spawn links a process on the pool node which is expected to
+ <p>Spawns and links to a process on the pool node that is expected to
have the lowest future load.</p>
</desc>
</func>
+
<func>
- <name name="get_node" arity="0"/>
- <fsummary>Return the node with the expected lowest future load</fsummary>
+ <name name="start" arity="1"/>
+ <name name="start" arity="2"/>
+ <fsummary>>Start a new pool.</fsummary>
<desc>
- <p>Returns the node with the expected lowest future load.</p>
+ <p>Starts a new pool. The file <c>.hosts.erlang</c> is read to
+ find host names where the pool nodes can be started; see
+ section <seealso marker="#files">Files</seealso>. The
+ startup procedure fails if the file is not found.</p>
+ <p>The slave nodes are started with
+ <seealso marker="slave#start/2"><c>slave:start/2,3</c></seealso>,
+ passing along <c><anno>Name</anno></c> and, if provided,
+ <c><anno>Args</anno></c>. <c><anno>Name</anno></c> is used as the
+ first part of the node names, <c><anno>Args</anno></c> is used to
+ specify command-line arguments.</p>
+ <p>Access rights must be set so that all nodes in the pool have
+ the authority to access each other.</p>
+ <p>The function is synchronous and all the nodes, and
+ all the system servers, are running when it returns a value.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="stop" arity="0"/>
+ <fsummary>Stop the pool and kill all the slave nodes.</fsummary>
+ <desc>
+ <p>Stops the pool and kills all the slave nodes.</p>
</desc>
</func>
</funcs>
@@ -120,12 +134,12 @@
<marker id="files"></marker>
<title>Files</title>
<p><c>.hosts.erlang</c> is used to pick hosts where nodes can
- be started. See
- <seealso marker="kernel:net_adm#host_file/0">net_adm(3)</seealso>
- for information about format and location of this file.</p>
- <p><c>$HOME/.erlang.slave.out.HOST</c> is used for all additional IO
- that may come from the slave nodes on standard IO. If the start-up
- procedure does not work, this file may indicate the reason.</p>
+ be started. For information about format and location of this file, see
+ <seealso marker="kernel:net_adm#host_file/0">
+ <c>net_adm:host_file/0</c></seealso>.</p>
+ <p><c>$HOME/.erlang.slave.out.HOST</c> is used for all extra I/O
+ that can come from the slave nodes on standard I/O. If the startup
+ procedure does not work, this file can indicate the reason.</p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/proc_lib.xml b/lib/stdlib/doc/src/proc_lib.xml
index f02b1f0651..da03c39a26 100644
--- a/lib/stdlib/doc/src/proc_lib.xml
+++ b/lib/stdlib/doc/src/proc_lib.xml
@@ -29,44 +29,55 @@
<rev></rev>
</header>
<module>proc_lib</module>
- <modulesummary>Functions for asynchronous and synchronous start of processes adhering to the OTP design principles.</modulesummary>
+ <modulesummary>Functions for asynchronous and synchronous start of processes
+ adhering to the OTP design principles.</modulesummary>
<description>
<p>This module is used to start processes adhering to
- the <seealso marker="doc/design_principles:des_princ">OTP Design Principles</seealso>. Specifically, the functions in this
- module are used by the OTP standard behaviors (<c>gen_server</c>,
- <c>gen_fsm</c>, <c>gen_statem</c>, ...) when starting new processes.
- The functions can also be used to start <em>special processes</em>,
- user defined processes which comply to the OTP design principles. See
- <seealso marker="doc/design_principles:spec_proc">Sys and Proc_Lib</seealso> in OTP Design Principles for an example.</p>
+ the <seealso marker="doc/design_principles:des_princ">
+ OTP Design Principles</seealso>. Specifically, the functions in this
+ module are used by the OTP standard behaviors (for example,
+ <c>gen_server</c>, <c>gen_fsm</c>, and <c>gen_statem</c>)
+ when starting new processes. The functions
+ can also be used to start <em>special processes</em>, user-defined
+ processes that comply to the OTP design principles. For an example,
+ see section <seealso marker="doc/design_principles:spec_proc">
+ sys and proc_lib</seealso> in OTP Design Principles.</p>
+
+
<p>Some useful information is initialized when a process starts.
The registered names, or the process identifiers, of the parent
process, and the parent ancestors, are stored together with
information about the function initially called in the process.</p>
- <p>While in "plain Erlang" a process is said to terminate normally
- only for the exit reason <c>normal</c>, a process started
+
+ <p>While in "plain Erlang", a process is said to terminate normally
+ only for exit reason <c>normal</c>, a process started
using <c>proc_lib</c> is also said to terminate normally if it
exits with reason <c>shutdown</c> or <c>{shutdown,Term}</c>.
<c>shutdown</c> is the reason used when
an application (supervision tree) is stopped.</p>
- <p>When a process started using <c>proc_lib</c> terminates
- abnormally -- that is, with another exit reason than <c>normal</c>,
- <c>shutdown</c>, or <c>{shutdown,Term}</c> -- a <em>crash report</em>
+
+ <p>When a process that is started using <c>proc_lib</c> terminates
+ abnormally (that is, with another exit reason than <c>normal</c>,
+ <c>shutdown</c>, or <c>{shutdown,Term}</c>), a <em>crash report</em>
is generated, which is written to terminal by the default SASL
event handler. That is, the crash report is normally only visible
- if the SASL application is started. See
- <seealso marker="sasl:sasl_app">sasl(6)</seealso> and
- <seealso marker="sasl:error_logging">SASL User's Guide</seealso>.</p>
- <p>The crash report contains the previously stored information such
+ if the SASL application is started; see
+ <seealso marker="sasl:sasl_app"><c>sasl(6)</c></seealso> and section
+ <seealso marker="sasl:error_logging">SASL Error Logging</seealso>
+ in the SASL User's Guide.</p>
+
+ <p>The crash report contains the previously stored information, such
as ancestors and initial function, the termination reason, and
- information regarding other processes which terminate as a result
+ information about other processes that terminate as a result
of this process terminating.</p>
</description>
+
<datatypes>
<datatype>
<name name="spawn_option"/>
<desc>
<p>See <seealso marker="erts:erlang#spawn_opt/4">
- erlang:spawn_opt/2,3,4,5</seealso>.</p>
+ <c>erlang:spawn_opt/2,3,4,5</c></seealso>.</p>
</desc>
</datatype>
<datatype>
@@ -83,8 +94,129 @@
<name name="dict_or_pid"/>
</datatype>
</datatypes>
+
<funcs>
<func>
+ <name name="format" arity="1"/>
+ <fsummary>Format a crash report.</fsummary>
+ <desc>
+ <p>Equivalent to <seealso marker="#format/2">
+ <c>format(<anno>CrashReport</anno>, latin1)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="format" arity="2"/>
+ <fsummary>Format a crash report.</fsummary>
+ <desc>
+ <p>This function can be used by a user-defined event handler to
+ format a crash report. The crash report is sent using
+ <seealso marker="kernel:error_logger#error_report/2">
+ <c>error_logger:error_report(crash_report,
+ <anno>CrashReport</anno>)</c></seealso>.
+ That is, the event to be handled is of the format
+ <c>{error_report, GL, {Pid, crash_report,
+ <anno>CrashReport</anno>}}</c>,
+ where <c>GL</c> is the group leader pid of process
+ <c>Pid</c> that sent the crash report.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="format" arity="3"/>
+ <fsummary>Format a crash report.</fsummary>
+ <desc>
+ <p>This function can be used by a user-defined event handler to
+ format a crash report. When <anno>Depth</anno> is specified as a
+ positive integer, it is used in the format string to
+ limit the output as follows: <c>io_lib:format("~P",
+ [Term,<anno>Depth</anno>])</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="hibernate" arity="3"/>
+ <fsummary>Hibernate a process until a message is sent to it.</fsummary>
+ <desc>
+ <p>This function does the same as (and does call) the
+ <seealso marker="erts:erlang#erlang:hibernate/3">
+ <c>hibernate/3</c></seealso> BIF,
+ but ensures that exception handling and logging continues to
+ work as expected when the process wakes up.</p>
+ <p>Always use this function instead of the BIF for processes started
+ using <c>proc_lib</c> functions.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="init_ack" arity="1"/>
+ <name name="init_ack" arity="2"/>
+ <fsummary>Used by a process when it has started.</fsummary>
+ <desc>
+ <p>This function must be used by a process that has been started by
+ a <seealso marker="#start/3"><c>start[_link]/3,4,5</c></seealso>
+ function. It tells <c><anno>Parent</anno></c> that the process has
+ initialized itself, has started, or has failed to initialize
+ itself.</p>
+ <p>Function <c>init_ack/1</c> uses the parent value
+ previously stored by the start function used.</p>
+ <p>If this function is not called, the start function
+ returns an error tuple (if a link and/or a time-out is used) or
+ hang otherwise.</p>
+ <p>The following example illustrates how this function and
+ <c>proc_lib:start_link/3</c> are used:</p>
+ <code type="none">
+-module(my_proc).
+-export([start_link/0]).
+-export([init/1]).
+
+start_link() ->
+ proc_lib:start_link(my_proc, init, [self()]).
+
+init(Parent) ->
+ case do_initialization() of
+ ok ->
+ proc_lib:init_ack(Parent, {ok, self()});
+ {error, Reason} ->
+ exit(Reason)
+ end,
+ loop().
+
+...</code>
+ </desc>
+ </func>
+
+ <func>
+ <name name="initial_call" arity="1"/>
+ <fsummary>Extract the initial call of a <c>proc_lib</c>spawned process.
+ </fsummary>
+ <desc>
+ <p>Extracts the initial call of a process that was started
+ using one of the spawn or start functions in this module.
+ <c><anno>Process</anno></c> can either be a pid, an integer tuple
+ (from which a pid can be created), or the process information of a
+ process <c>Pid</c> fetched through an
+ <c>erlang:process_info(Pid)</c> function call.</p>
+ <note>
+ <p>The list <c><anno>Args</anno></c> no longer contains the
+ arguments, but the same number of atoms as the number of arguments;
+ the first atom is <c>'Argument__1'</c>, the second
+ <c>'Argument__2'</c>, and so on. The reason is that the argument
+ list could waste a significant amount of memory, and if the
+ argument list contained funs, it could be impossible to upgrade the
+ code for the module.</p>
+ <p>If the process was spawned using a fun, <c>initial_call/1</c> no
+ longer returns the fun, but the module, function for the
+ local function implementing the fun, and the arity, for example,
+ <c>{some_module,-work/3-fun-0-,0}</c> (meaning that the fun was
+ created in function <c>some_module:work/3</c>). The reason is that
+ keeping the fun would prevent code upgrade for the module, and that
+ a significant amount of memory could be wasted.</p>
+ </note>
+ </desc>
+ </func>
+
+ <func>
<name name="spawn" arity="1"/>
<name name="spawn" arity="2"/>
<name name="spawn" arity="3"/>
@@ -96,11 +228,12 @@
<type variable="Function"/>
<type variable="Args"/>
<desc>
- <p>Spawns a new process and initializes it as described above.
- The process is spawned using the
- <seealso marker="erts:erlang#spawn/1">spawn</seealso> BIFs.</p>
+ <p>Spawns a new process and initializes it as described in the
+ beginning of this manual page. The process is spawned using the
+ <seealso marker="erts:erlang#spawn/1"><c>spawn</c></seealso> BIFs.</p>
</desc>
</func>
+
<func>
<name name="spawn_link" arity="1"/>
<name name="spawn_link" arity="2"/>
@@ -113,18 +246,19 @@
<type variable="Function"/>
<type variable="Args"/>
<desc>
- <p>Spawns a new process and initializes it as described above.
- The process is spawned using the
- <seealso marker="erts:erlang#spawn_link/1">spawn_link</seealso>
+ <p>Spawns a new process and initializes it as described in the
+ beginning of this manual page. The process is spawned using the
+ <seealso marker="erts:erlang#spawn_link/1"><c>spawn_link</c></seealso>
BIFs.</p>
</desc>
</func>
+
<func>
<name name="spawn_opt" arity="2"/>
<name name="spawn_opt" arity="3"/>
<name name="spawn_opt" arity="4"/>
<name name="spawn_opt" arity="5"/>
- <fsummary>Spawn a new process with given options.</fsummary>
+ <fsummary>Spawn a new process with specified options.</fsummary>
<type variable="Node"/>
<type variable="Fun" name_i="1"/>
<type variable="Module"/>
@@ -132,17 +266,18 @@
<type variable="Args"/>
<type variable="SpawnOpts"/>
<desc>
- <p>Spawns a new process and initializes it as described above.
- The process is spawned using the
- <seealso marker="erts:erlang#spawn_opt/2">spawn_opt</seealso>
+ <p>Spawns a new process and initializes it as described in the
+ beginning of this manual page. The process is spawned using the
+ <seealso marker="erts:erlang#spawn_opt/2"><c>spawn_opt</c></seealso>
BIFs.</p>
<note>
- <p>Using the spawn option <c>monitor</c> is currently not
- allowed, but will cause the function to fail with reason
+ <p>Using spawn option <c>monitor</c> is not
+ allowed. It causes the function to fail with reason
<c>badarg</c>.</p>
</note>
</desc>
</func>
+
<func>
<name name="start" arity="3"/>
<name name="start" arity="4"/>
@@ -153,151 +288,94 @@
<fsummary>Start a new process synchronously.</fsummary>
<desc>
<p>Starts a new process synchronously. Spawns the process and
- waits for it to start. When the process has started, it
+ waits for it to start. When the process has started, it
<em>must</em> call
- <seealso marker="#init_ack/2">init_ack(Parent,Ret)</seealso>
- or <seealso marker="#init_ack/1">init_ack(Ret)</seealso>,
+ <seealso marker="#init_ack/2"><c>init_ack(Parent, Ret)</c></seealso>
+ or <seealso marker="#init_ack/1"><c>init_ack(Ret)</c></seealso>,
where <c>Parent</c> is the process that evaluates this
- function. At this time, <c>Ret</c> is returned.</p>
- <p>If the <c>start_link/3,4,5</c> function is used and
+ function. At this time, <c>Ret</c> is returned.</p>
+ <p>If function <c>start_link/3,4,5</c> is used and
the process crashes before it has called <c>init_ack/1,2</c>,
- <c>{error, <anno>Reason</anno>}</c> is returned if the calling process
- traps exits.</p>
- <p>If <c><anno>Time</anno></c> is specified as an integer, this function
- waits for <c><anno>Time</anno></c> milliseconds for the new process to call
- <c>init_ack</c>, or <c>{error, timeout}</c> is returned, and
- the process is killed.</p>
- <p>The <c><anno>SpawnOpts</anno></c> argument, if given, will be passed
- as the last argument to the <c>spawn_opt/2,3,4,5</c> BIF.</p>
+ <c>{error, <anno>Reason</anno>}</c> is returned if the calling
+ process traps exits.</p>
+ <p>If <c><anno>Time</anno></c> is specified as an integer, this
+ function waits for <c><anno>Time</anno></c> milliseconds for the
+ new process to call <c>init_ack</c>, or <c>{error, timeout}</c> is
+ returned, and the process is killed.</p>
+ <p>Argument <c><anno>SpawnOpts</anno></c>, if specified, is passed
+ as the last argument to the <seealso marker="erts:erlang#spawn_opt/2">
+ <c>spawn_opt/2,3,4,5</c></seealso> BIF.</p>
<note>
- <p>Using the spawn option <c>monitor</c> is currently not
- allowed, but will cause the function to fail with reason
+ <p>Using spawn option <c>monitor</c> is not
+ allowed. It causes the function to fail with reason
<c>badarg</c>.</p>
</note>
</desc>
</func>
- <func>
- <name name="init_ack" arity="1"/>
- <name name="init_ack" arity="2"/>
- <fsummary>Used by a process when it has started.</fsummary>
- <desc>
- <p>This function must be used by a process that has been started by
- a <seealso marker="#start/3">start[_link]/3,4,5</seealso>
- function. It tells <c><anno>Parent</anno></c> that the process has
- initialized itself, has started, or has failed to initialize
- itself.</p>
- <p>The <c>init_ack/1</c> function uses the parent value
- previously stored by the start function used.</p>
- <p>If this function is not called, the start function will
- return an error tuple (if a link and/or a timeout is used) or
- hang otherwise.</p>
- <p>The following example illustrates how this function and
- <c>proc_lib:start_link/3</c> are used.</p>
- <code type="none">
--module(my_proc).
--export([start_link/0]).
--export([init/1]).
-start_link() ->
- proc_lib:start_link(my_proc, init, [self()]).
-
-init(Parent) ->
- case do_initialization() of
- ok ->
- proc_lib:init_ack(Parent, {ok, self()});
- {error, Reason} ->
- exit(Reason)
- end,
- loop().
-
-...</code>
- </desc>
- </func>
<func>
- <name name="format" arity="1"/>
- <fsummary>Format a crash report.</fsummary>
- <desc>
- <p>Equivalent to <c>format(<anno>CrashReport</anno>, latin1)</c>.</p>
- </desc>
- </func>
- <func>
- <name name="format" arity="2"/>
- <fsummary>Format a crash report.</fsummary>
+ <name name="stop" arity="1"/>
+ <fsummary>Terminate a process synchronously.</fsummary>
+ <type variable="Process"/>
<desc>
- <p>This function can be used by a user defined event handler to
- format a crash report. The crash report is sent using
- <c>error_logger:error_report(crash_report, <anno>CrashReport</anno>)</c>.
- That is, the event to be handled is of the format
- <c>{error_report, GL, {Pid, crash_report, <anno>CrashReport</anno>}}</c>
- where <c>GL</c> is the group leader pid of the process
- <c>Pid</c> which sent the crash report.</p>
+ <p>Equivalent to <seealso marker="#stop/3">
+ <c>stop(Process, normal, infinity)</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="format" arity="3"/>
- <fsummary>Format a crash report.</fsummary>
+ <name name="stop" arity="3"/>
+ <fsummary>Terminate a process synchronously.</fsummary>
+ <type variable="Process"/>
+ <type variable="Reason"/>
+ <type variable="Timeout"/>
<desc>
- <p>This function can be used by a user defined event handler to
- format a crash report. When <anno>Depth</anno> is given as an
- positive integer, it will be used in the format string to
- limit the output as follows: <c>io_lib:format("~P",
- [Term,<anno>Depth</anno>])</c>.</p>
+ <p>Orders the process to exit with the specified <c>Reason</c> and
+ waits for it to terminate.</p>
+ <p>Returns <c>ok</c> if the process exits with
+ the specified <c>Reason</c> within <c>Timeout</c> milliseconds.</p>
+ <p>If the call times out, a <c>timeout</c> exception is raised.</p>
+ <p>If the process does not exist, a <c>noproc</c>
+ exception is raised.</p>
+ <p>The implementation of this function is based on the
+ <c>terminate</c> system message, and requires that the
+ process handles system messages correctly.
+ For information about system messages, see
+ <seealso marker="sys"><c>sys(3)</c></seealso> and section
+ <seealso marker="doc/design_principles:spec_proc">
+ sys and proc_lib</seealso> in OTP Design Principles.</p>
</desc>
</func>
- <func>
- <name name="initial_call" arity="1"/>
- <fsummary>Extract the initial call of a <c>proc_lib</c>spawned process.</fsummary>
- <desc>
- <p>Extracts the initial call of a process that was started
- using one of the spawn or start functions described above.
- <c><anno>Process</anno></c> can either be a pid, an integer tuple (from
- which a pid can be created), or the process information of a
- process <c>Pid</c> fetched through an
- <c>erlang:process_info(Pid)</c> function call.</p>
-
- <note><p>The list <c><anno>Args</anno></c> no longer contains the actual arguments,
- but the same number of atoms as the number of arguments; the first atom
- is always <c>'Argument__1'</c>, the second <c>'Argument__2'</c>, and
- so on. The reason is that the argument list could waste a significant
- amount of memory, and if the argument list contained funs, it could
- be impossible to upgrade the code for the module.</p>
- <p>If the process was spawned using a fun, <c>initial_call/1</c> no
- longer returns the actual fun, but the module, function for the local
- function implementing the fun, and the arity, for instance
- <c>{some_module,-work/3-fun-0-,0}</c> (meaning that the fun was
- created in the function <c>some_module:work/3</c>).
- The reason is that keeping the fun would prevent code upgrade for the
- module, and that a significant amount of memory could be wasted.</p>
- </note>
- </desc>
- </func>
<func>
<name name="translate_initial_call" arity="1"/>
- <fsummary>Extract and translate the initial call of a <c>proc_lib</c>spawned process.</fsummary>
+ <fsummary>Extract and translate the initial call of a
+ <c>proc_lib</c>spawned process.</fsummary>
<desc>
- <p>This function is used by the <c>c:i/0</c> and
- <c>c:regs/0</c> functions in order to present process
- information.</p>
- <p>Extracts the initial call of a process that was started
- using one of the spawn or start functions described above,
- and translates it to more useful information. <c><anno>Process</anno></c>
+ <p>This function is used by functions
+ <seealso marker="c#i/0"><c>c:i/0</c></seealso> and
+ <seealso marker="c#regs/0"><c>c:regs/0</c></seealso>
+ to present process information.</p>
+ <p>This function extracts the initial call of a process that was
+ started using one of the spawn or start functions in this module,
+ and translates it to more useful information.
+ <c><anno>Process</anno></c>
can either be a pid, an integer tuple (from which a pid can
be created), or the process information of a process
<c>Pid</c> fetched through an <c>erlang:process_info(Pid)</c>
function call.</p>
- <p>If the initial call is to one of the system defined behaviors
+ <p>If the initial call is to one of the system-defined behaviors
such as <c>gen_server</c> or <c>gen_event</c>, it is
translated to more useful information. If a <c>gen_server</c>
is spawned, the returned <c><anno>Module</anno></c> is the name of
the callback module and <c><anno>Function</anno></c> is <c>init</c>
(the function that initiates the new server).</p>
<p>A <c>supervisor</c> and a <c>supervisor_bridge</c> are also
- <c>gen_server</c> processes. In order to return information
+ <c>gen_server</c> processes. To return information
that this process is a supervisor and the name of the
- call-back module, <c><anno>Module</anno></c> is <c>supervisor</c> and
+ callback module, <c><anno>Module</anno></c> is <c>supervisor</c> and
<c><anno>Function</anno></c> is the name of the supervisor callback
- module. <c><anno>Arity</anno></c> is <c>1</c> since the <c>init/1</c>
+ module. <c><anno>Arity</anno></c> is <c>1</c>, as the <c>init/1</c>
function is called initially in the callback module.</p>
<p>By default, <c>{proc_lib,init_p,5}</c> is returned if no
information about the initial call can be found. It is
@@ -305,57 +383,12 @@ init(Parent) ->
spawned with the <c>proc_lib</c> module.</p>
</desc>
</func>
- <func>
- <name name="hibernate" arity="3"/>
- <fsummary>Hibernate a process until a message is sent to it</fsummary>
- <desc>
- <p>This function does the same as (and does call) the BIF
- <seealso marker="erts:erlang#erlang:hibernate/3">hibernate/3</seealso>,
- but ensures that exception handling and logging continues to
- work as expected when the process wakes up. Always use this
- function instead of the BIF for processes started using
- <c>proc_lib</c> functions.</p>
- </desc>
- </func>
- <func>
- <name name="stop" arity="1"/>
- <fsummary>Terminate a process synchronously.</fsummary>
- <type variable="Process"/>
- <desc>
- <p>Equivalent to <seealso marker="#stop/3">stop(Process,
- normal, infinity)</seealso>.</p>
- </desc>
- </func>
- <func>
- <name name="stop" arity="3"/>
- <fsummary>Terminate a process synchronously.</fsummary>
- <type variable="Process"/>
- <type variable="Reason"/>
- <type variable="Timeout"/>
- <desc>
- <p>Orders the process to exit with the given <c>Reason</c> and
- waits for it to terminate.</p>
- <p>The function returns <c>ok</c> if the process exits with
- the given <c>Reason</c> within <c>Timeout</c>
- milliseconds.</p>
- <p>If the call times out, a <c>timeout</c> exception is
- raised.</p>
- <p>If the process does not exist, a <c>noproc</c>
- exception is raised.</p>
- <p>The implementation of this function is based on the
- <c>terminate</c> system message, and requires that the
- process handles system messages correctly.
- See <seealso marker="sys">sys(3)</seealso>
- and <seealso marker="doc/design_principles:spec_proc">OTP
- Design Principles</seealso> for information about system
- messages.</p>
- </desc>
- </func>
</funcs>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="kernel:error_logger">error_logger(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="kernel:error_logger">
+ <c>error_logger(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/proplists.xml b/lib/stdlib/doc/src/proplists.xml
index 832df9556a..fe6b8cc3bf 100644
--- a/lib/stdlib/doc/src/proplists.xml
+++ b/lib/stdlib/doc/src/proplists.xml
@@ -30,51 +30,66 @@
<checked></checked>
<date>2002-09-28</date>
<rev>A</rev>
- <file>proplists.sgml</file>
+ <file>proplists.xml</file>
</header>
<module>proplists</module>
- <modulesummary>Support functions for property lists</modulesummary>
+ <modulesummary>Support functions for property lists.</modulesummary>
<description>
<p>Property lists are ordinary lists containing entries in the form
of either tuples, whose first elements are keys used for lookup and
- insertion, or atoms, which work as shorthand for tuples <c>{Atom, true}</c>. (Other terms are allowed in the lists, but are ignored
- by this module.) If there is more than one entry in a list for a
+ insertion, or atoms, which work as shorthand for tuples
+ <c>{Atom, true}</c>. (Other terms are allowed in the lists, but are
+ ignored by this module.) If there is more than one entry in a list for a
certain key, the first occurrence normally overrides any later
(irrespective of the arity of the tuples).</p>
+
<p>Property lists are useful for representing inherited properties,
- such as options passed to a function where a user may specify options
+ such as options passed to a function where a user can specify options
overriding the default settings, object properties, annotations,
- etc.</p>
- <p>Two keys are considered equal if they match (<c>=:=</c>). In other
- words, numbers are compared literally rather than by value, so that,
- for instance, <c>1</c> and <c>1.0</c> are different keys.</p>
+ and so on.</p>
+
+ <p>Two keys are considered equal if they match (<c>=:=</c>). That is,
+ numbers are compared literally rather than by value, so that,
+ for example, <c>1</c> and <c>1.0</c> are different keys.</p>
</description>
+
<datatypes>
<datatype>
<name name="property"/>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="append_values" arity="2"/>
<fsummary></fsummary>
<desc>
- <p>Similar to <c>get_all_values/2</c>, but each value is
- wrapped in a list unless it is already itself a list, and the
- resulting list of lists is concatenated. This is often useful for
- "incremental" options; e.g., <c>append_values(a, [{a, [1,2]}, {b, 0}, {a, 3}, {c, -1}, {a, [4]}])</c> will return the list
- <c>[1,2,3,4]</c>.</p>
+ <p>Similar to
+ <seealso marker="#get_all_values/2"><c>get_all_values/2</c></seealso>,
+ but each value is wrapped in a list unless it is already itself a
+ list. The resulting list of lists is concatenated. This is often
+ useful for "incremental" options.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
+append_values(a, [{a, [1,2]}, {b, 0}, {a, 3}, {c, -1}, {a, [4]}])</code>
+ <p>returns:</p>
+ <code type="none">
+[1,2,3,4]</code>
</desc>
</func>
+
<func>
<name name="compact" arity="1"/>
<fsummary></fsummary>
<desc>
<p>Minimizes the representation of all entries in the list. This is
equivalent to <c><![CDATA[[property(P) || P <- ListIn]]]></c>.</p>
- <p>See also: <c>property/1</c>, <c>unfold/1</c>.</p>
+ <p>See also
+ <seealso marker="#property/1"><c>property/1</c></seealso>,
+ <seealso marker="#unfold/1"><c>unfold/1</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="delete" arity="2"/>
<fsummary></fsummary>
@@ -83,96 +98,111 @@
<c><anno>List</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="expand" arity="2"/>
<fsummary></fsummary>
<desc>
<p>Expands particular properties to corresponding sets of
- properties (or other terms). For each pair <c>{<anno>Property</anno>, <anno>Expansion</anno>}</c> in <c><anno>Expansions</anno></c>, if <c>E</c> is
- the first entry in <c><anno>ListIn</anno></c> with the same key as
- <c><anno>Property</anno></c>, and <c>E</c> and <c><anno>Property</anno></c>
- have equivalent normal forms, then <c>E</c> is replaced with
- the terms in <c><anno>Expansion</anno></c>, and any following entries with
- the same key are deleted from <c><anno>ListIn</anno></c>.</p>
- <p>For example, the following expressions all return <c>[fie, bar, baz, fum]</c>:</p>
+ properties (or other terms). For each pair <c>{<anno>Property</anno>,
+ <anno>Expansion</anno>}</c> in <c><anno>Expansions</anno></c>: if
+ <c>E</c> is the first entry in <c><anno>ListIn</anno></c> with the
+ same key as <c><anno>Property</anno></c>, and <c>E</c> and
+ <c><anno>Property</anno></c> have equivalent normal forms, then
+ <c>E</c> is replaced with the terms in <c><anno>Expansion</anno></c>,
+ and any following entries with the same key are deleted from
+ <c><anno>ListIn</anno></c>.</p>
+ <p>For example, the following expressions all return
+ <c>[fie, bar, baz, fum]</c>:</p>
<code type="none">
- expand([{foo, [bar, baz]}],
- [fie, foo, fum])
- expand([{{foo, true}, [bar, baz]}],
- [fie, foo, fum])
- expand([{{foo, false}, [bar, baz]}],
- [fie, {foo, false}, fum])</code>
- <p>However, no expansion is done in the following call:</p>
+expand([{foo, [bar, baz]}], [fie, foo, fum])
+expand([{{foo, true}, [bar, baz]}], [fie, foo, fum])
+expand([{{foo, false}, [bar, baz]}], [fie, {foo, false}, fum])</code>
+ <p>However, no expansion is done in the following call
+ because <c>{foo, false}</c> shadows <c>foo</c>:</p>
<code type="none">
- expand([{{foo, true}, [bar, baz]}],
- [{foo, false}, fie, foo, fum])</code>
- <p>because <c>{foo, false}</c> shadows <c>foo</c>.</p>
- <p>Note that if the original property term is to be preserved in the
+expand([{{foo, true}, [bar, baz]}], [{foo, false}, fie, foo, fum])</code>
+ <p>Notice that if the original property term is to be preserved in the
result when expanded, it must be included in the expansion list. The
inserted terms are not expanded recursively. If
- <c><anno>Expansions</anno></c> contains more than one property with the same
- key, only the first occurrence is used.</p>
- <p>See also: <c>normalize/2</c>.</p>
+ <c><anno>Expansions</anno></c> contains more than one property with
+ the same key, only the first occurrence is used.</p>
+ <p>See also
+ <seealso marker="#normalize/2"><c>normalize/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="get_all_values" arity="2"/>
<fsummary></fsummary>
<desc>
- <p>Similar to <c>get_value/2</c>, but returns the list of
- values for <em>all</em> entries <c>{Key, Value}</c> in
- <c><anno>List</anno></c>. If no such entry exists, the result is the empty
- list.</p>
- <p>See also: <c>get_value/2</c>.</p>
+ <p>Similar to
+ <seealso marker="#get_value/2"><c>get_value/2</c></seealso>,
+ but returns the list of values for <em>all</em> entries
+ <c>{Key, Value}</c> in <c><anno>List</anno></c>. If no such entry
+ exists, the result is the empty list.</p>
</desc>
</func>
+
<func>
<name name="get_bool" arity="2"/>
<fsummary></fsummary>
<desc>
<p>Returns the value of a boolean key/value option. If
- <c>lookup(<anno>Key</anno>, <anno>List</anno>)</c> would yield <c>{<anno>Key</anno>, true}</c>,
- this function returns <c>true</c>; otherwise <c>false</c>
- is returned.</p>
- <p>See also: <c>get_value/2</c>, <c>lookup/2</c>.</p>
+ <c>lookup(<anno>Key</anno>, <anno>List</anno>)</c> would yield
+ <c>{<anno>Key</anno>, true}</c>, this function returns <c>true</c>,
+ otherwise <c>false</c>.</p>
+ <p>See also
+ <seealso marker="#get_value/2"><c>get_value/2</c></seealso>,
+ <seealso marker="#lookup/2"><c>lookup/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="get_keys" arity="1"/>
<fsummary></fsummary>
<desc>
- <p>Returns an unordered list of the keys used in <c><anno>List</anno></c>,
- not containing duplicates.</p>
+ <p>Returns an unordered list of the keys used in
+ <c><anno>List</anno></c>, not containing duplicates.</p>
</desc>
</func>
+
<func>
<name name="get_value" arity="2"/>
<fsummary></fsummary>
<desc>
- <p>Equivalent to <c>get_value(<anno>Key</anno>, <anno>List</anno>, undefined)</c>.</p>
+ <p>Equivalent to
+ <c>get_value(<anno>Key</anno>, <anno>List</anno>, undefined)</c>.</p>
</desc>
</func>
+
<func>
<name name="get_value" arity="3"/>
<fsummary></fsummary>
<desc>
<p>Returns the value of a simple key/value property in
- <c><anno>List</anno></c>. If <c>lookup(<anno>Key</anno>, <anno>List</anno>)</c> would yield
- <c>{<anno>Key</anno>, Value}</c>, this function returns the corresponding
- <c>Value</c>, otherwise <c><anno>Default</anno></c> is returned.</p>
- <p>See also: <c>get_all_values/2</c>, <c>get_bool/2</c>,
- <c>get_value/2</c>, <c>lookup/2</c>.</p>
+ <c><anno>List</anno></c>. If <c>lookup(<anno>Key</anno>,
+ <anno>List</anno>)</c> would yield <c>{<anno>Key</anno>, Value}</c>,
+ this function returns the corresponding <c>Value</c>, otherwise
+ <c><anno>Default</anno></c>.</p>
+ <p>See also
+ <seealso marker="#get_all_values/2"><c>get_all_values/2</c></seealso>,
+ <seealso marker="#get_bool/2"><c>get_bool/2</c></seealso>,
+ <seealso marker="#get_value/2"><c>get_value/2</c></seealso>,
+ <seealso marker="#lookup/2"><c>lookup/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="is_defined" arity="2"/>
<fsummary></fsummary>
<desc>
<p>Returns <c>true</c> if <c><anno>List</anno></c> contains at least
one entry associated with <c><anno>Key</anno></c>, otherwise
- <c>false</c> is returned.</p>
+ <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="lookup" arity="2"/>
<fsummary></fsummary>
@@ -181,128 +211,160 @@
<c><anno>List</anno></c>, if one exists, otherwise returns
<c>none</c>. For an atom <c>A</c> in the list, the tuple
<c>{A, true}</c> is the entry associated with <c>A</c>.</p>
- <p>See also: <c>get_bool/2</c>, <c>get_value/2</c>,
- <c>lookup_all/2</c>.</p>
+ <p>See also
+ <seealso marker="#get_bool/2"><c>get_bool/2</c></seealso>,
+ <seealso marker="#get_value/2"><c>get_value/2</c></seealso>,
+ <seealso marker="#lookup_all/2"><c>lookup_all/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="lookup_all" arity="2"/>
<fsummary></fsummary>
<desc>
- <p>Returns the list of all entries associated with <c><anno>Key</anno></c>
- in <c><anno>List</anno></c>. If no such entry exists, the result is the
- empty list.</p>
- <p>See also: <c>lookup/2</c>.</p>
+ <p>Returns the list of all entries associated with
+ <c><anno>Key</anno></c> in <c><anno>List</anno></c>. If no such entry
+ exists, the result is the empty list.</p>
+ <p>See also
+ <seealso marker="#lookup/2"><c>lookup/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="normalize" arity="2"/>
<fsummary></fsummary>
<desc>
<p>Passes <c><anno>ListIn</anno></c> through a sequence of
substitution/expansion stages. For an <c>aliases</c> operation,
- the function <c>substitute_aliases/2</c> is applied using the
- given list of aliases; for a <c>negations</c> operation,
- <c>substitute_negations/2</c> is applied using the given
- negation list; for an <c>expand</c> operation, the function
- <c>expand/2</c> is applied using the given list of expansions.
- The final result is automatically compacted (cf.
- <c>compact/1</c>).</p>
+ function <seealso marker="#substitute_aliases/2">
+ <c>substitute_aliases/2</c></seealso> is applied using the
+ specified list of aliases:</p>
+ <list type="bulleted">
+ <item>
+ <p>For a <c>negations</c> operation, <c>substitute_negations/2</c>
+ is applied using the specified negation list.</p>
+ </item>
+ <item>
+ <p>For an <c>expand</c> operation, function
+ <seealso marker="#expand/2"><c>expand/2</c></seealso>
+ is applied using the specified list of expansions.</p>
+ </item>
+ </list>
+ <p>The final result is automatically compacted (compare
+ <seealso marker="#compact/1"><c>compact/1</c></seealso>).</p>
<p>Typically you want to substitute negations first, then aliases,
then perform one or more expansions (sometimes you want to pre-expand
particular entries before doing the main expansion). You might want
to substitute negations and/or aliases repeatedly, to allow such
forms in the right-hand side of aliases and expansion lists.</p>
- <p>See also: <c>compact/1</c>, <c>expand/2</c>,
- <c>substitute_aliases/2</c>, <c>substitute_negations/2</c>.</p>
+ <p>See also <seealso marker="#substitute_negations/2">
+ <c>substitute_negations/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="property" arity="1"/>
<fsummary></fsummary>
<desc>
<p>Creates a normal form (minimal) representation of a property. If
- <c><anno>PropertyIn</anno></c> is <c>{Key, true}</c> where
- <c>Key</c> is an atom, this returns <c>Key</c>, otherwise
- the whole term <c><anno>PropertyIn</anno></c> is returned.</p>
- <p>See also: <c>property/2</c>.</p>
+ <c><anno>PropertyIn</anno></c> is <c>{Key, true}</c>, where
+ <c>Key</c> is an atom, <c>Key</c> is returned, otherwise
+ the whole term <c><anno>PropertyIn</anno></c> is returned.</p>
+ <p>See also
+ <seealso marker="#property/2"><c>property/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="property" arity="2"/>
<fsummary></fsummary>
<desc>
- <p>Creates a normal form (minimal) representation of a simple
- key/value property. Returns <c><anno>Key</anno></c> if <c><anno>Value</anno></c> is
- <c>true</c> and <c><anno>Key</anno></c> is an atom, otherwise a tuple
- <c>{<anno>Key</anno>, <anno>Value</anno>}</c> is returned.</p>
- <p>See also: <c>property/1</c>.</p>
+ <p>Creates a normal form (minimal) representation of a simple key/value
+ property. Returns <c><anno>Key</anno></c> if <c><anno>Value</anno></c>
+ is <c>true</c> and <c><anno>Key</anno></c> is an atom, otherwise a
+ tuple <c>{<anno>Key</anno>, <anno>Value</anno>}</c> is returned.</p>
+ <p>See also
+ <seealso marker="#property/1"><c>property/1</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="split" arity="2"/>
<fsummary></fsummary>
<desc>
<p>Partitions <c><anno>List</anno></c> into a list of sublists and a
- remainder. <c><anno>Lists</anno></c> contains one sublist for each key in
- <c><anno>Keys</anno></c>, in the corresponding order. The relative order of
- the elements in each sublist is preserved from the original
- <c><anno>List</anno></c>. <c><anno>Rest</anno></c> contains the elements in
- <c><anno>List</anno></c> that are not associated with any of the given keys,
+ remainder. <c><anno>Lists</anno></c> contains one sublist for each key
+ in <c><anno>Keys</anno></c>, in the corresponding order. The relative
+ order of the elements in each sublist is preserved from the original
+ <c><anno>List</anno></c>. <c><anno>Rest</anno></c> contains the
+ elements in <c><anno>List</anno></c> that are not associated with any
+ of the specified keys,
also with their original relative order preserved.</p>
- <p>Example:
- split([{c, 2}, {e, 1}, a, {c, 3, 4}, d, {b, 5}, b], [a, b, c])</p>
- <p>returns</p>
- <p>{[[a], [{b, 5}, b],[{c, 2}, {c, 3, 4}]], [{e, 1}, d]}</p>
+ <p><em>Example:</em></p>
+ <code type="none">
+split([{c, 2}, {e, 1}, a, {c, 3, 4}, d, {b, 5}, b], [a, b, c])</code>
+ <p>returns:</p>
+ <code type="none">
+{[[a], [{b, 5}, b],[{c, 2}, {c, 3, 4}]], [{e, 1}, d]}</code>
</desc>
</func>
+
<func>
<name name="substitute_aliases" arity="2"/>
<fsummary></fsummary>
<desc>
<p>Substitutes keys of properties. For each entry in
- <c><anno>ListIn</anno></c>, if it is associated with some key <c>K1</c>
- such that <c>{K1, K2}</c> occurs in <c><anno>Aliases</anno></c>, the
+ <c><anno>ListIn</anno></c>, if it is associated with some key
+ <c>K1</c> such that <c>{K1, K2}</c> occurs in
+ <c><anno>Aliases</anno></c>, the
key of the entry is changed to <c>K2</c>. If the same
<c>K1</c> occurs more than once in <c><anno>Aliases</anno></c>, only
the first occurrence is used.</p>
- <p>Example: <c>substitute_aliases([{color, colour}], L)</c>
- will replace all tuples <c>{color, ...}</c> in <c>L</c>
+ <p>For example, <c>substitute_aliases([{color, colour}], L)</c>
+ replaces all tuples <c>{color, ...}</c> in <c>L</c>
with <c>{colour, ...}</c>, and all atoms <c>color</c>
with <c>colour</c>.</p>
- <p>See also: <c>normalize/2</c>, <c>substitute_negations/2</c>.</p>
+ <p>See also
+ <seealso marker="#normalize/2"><c>normalize/2</c></seealso>,
+ <seealso marker="#substitute_negations/2">
+ <c>substitute_negations/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="substitute_negations" arity="2"/>
<fsummary></fsummary>
<desc>
<p>Substitutes keys of boolean-valued properties and
simultaneously negates their values. For each entry in
- <c><anno>ListIn</anno></c>, if it is associated with some key <c>K1</c>
- such that <c>{K1, K2}</c> occurs in <c><anno>Negations</anno></c>, then
- if the entry was <c>{K1, true}</c> it will be replaced with
- <c>{K2, false}</c>, otherwise it will be replaced with
- <c>{K2, true}</c>, thus changing the name of the option and
- simultaneously negating the value given by
- <c>get_bool(ListIn)</c>. If the same <c>K1</c> occurs more
- than once in <c><anno>Negations</anno></c>, only the first occurrence is
- used.</p>
- <p>Example: <c>substitute_negations([{no_foo, foo}], L)</c>
- will replace any atom <c>no_foo</c> or tuple
+ <c><anno>ListIn</anno></c>, if it is associated with some key
+ <c>K1</c> such that <c>{K1, K2}</c> occurs in
+ <c><anno>Negations</anno></c>: if the entry was
+ <c>{K1, true}</c>, it is replaced with <c>{K2, false}</c>, otherwise
+ with <c>{K2, true}</c>, thus changing the name of the option and
+ simultaneously negating the value specified by
+ <seealso marker="#get_bool/2">
+ <c>get_bool(Key, <anno>ListIn</anno></c></seealso>.
+ If the same <c>K1</c> occurs more than once in
+ <c><anno>Negations</anno></c>, only the first occurrence is used.</p>
+ <p>For example, <c>substitute_negations([{no_foo, foo}], L)</c>
+ replaces any atom <c>no_foo</c> or tuple
<c>{no_foo, true}</c> in <c>L</c> with <c>{foo, false}</c>,
- and any other tuple <c>{no_foo, ...}</c> with
- <c>{foo, true}</c>.</p>
- <p>See also: <c>get_bool/2</c>, <c>normalize/2</c>,
- <c>substitute_aliases/2</c>.</p>
+ and any other tuple <c>{no_foo, ...}</c> with <c>{foo, true}</c>.</p>
+ <p>See also
+ <seealso marker="#get_bool/2"><c>get_bool/2</c></seealso>,
+ <seealso marker="#normalize/2"><c>normalize/2</c></seealso>,
+ <seealso marker="#substitute_aliases/2">
+ <c>substitute_aliases/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="unfold" arity="1"/>
<fsummary></fsummary>
<desc>
- <p>Unfolds all occurrences of atoms in <c><anno>ListIn</anno></c> to tuples
- <c>{Atom, true}</c>.</p>
+ <p>Unfolds all occurrences of atoms in <c><anno>ListIn</anno></c> to
+ tuples <c>{Atom, true}</c>.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/qlc.xml b/lib/stdlib/doc/src/qlc.xml
index 2966e94ec1..fe14a6334c 100644
--- a/lib/stdlib/doc/src/qlc.xml
+++ b/lib/stdlib/doc/src/qlc.xml
@@ -24,102 +24,121 @@
<title>qlc</title>
<prepared>Hans Bolinder</prepared>
- <responsible>nobody</responsible>
+ <responsible></responsible>
<docno></docno>
- <approved>nobody</approved>
- <checked>no</checked>
+ <approved></approved>
+ <checked></checked>
<date>2004-08-25</date>
<rev>PA1</rev>
- <file>qlc.sgml</file>
+ <file>qlc.xml</file>
</header>
<module>qlc</module>
- <modulesummary>Query Interface to Mnesia, ETS, Dets, etc</modulesummary>
+ <modulesummary>Query interface to Mnesia, ETS, Dets, and so on.
+ </modulesummary>
<description>
- <p>The <c>qlc</c> module provides a query interface to Mnesia, ETS,
- Dets and other data structures that implement an iterator style
- traversal of objects. </p>
+ <p>This module provides a query interface to
+ <seealso marker="mnesia:mnesia">Mnesia</seealso>,
+ <seealso marker="ets">ETS</seealso>,
+ <seealso marker="dets">Dets</seealso>,
+ and other data structures that provide an iterator style
+ traversal of objects.</p>
</description>
- <section><title>Overview</title>
-
- <p>The <c>qlc</c> module implements a query interface to <em>QLC
- tables</em>. Typical QLC tables are ETS, Dets, and Mnesia
- tables. There is also support for user defined tables, see the
- <seealso marker="#implementing_a_qlc_table">Implementing a QLC
- table</seealso> section. <marker
- id="query_list_comprehension"></marker>
- A <em>query</em> is stated using
+ <section>
+ <title>Overview</title>
+ <p>This module provides a query interface to <em>QLC
+ tables</em>. Typical QLC tables are Mnesia, ETS, and
+ Dets tables. Support is also provided for user-defined tables, see section
+ <seealso marker="#implementing_a_qlc_table">
+ Implementing a QLC Table</seealso>.
+ <marker id="query_list_comprehension"></marker>
+ A <em>query</em> is expressed using
<em>Query List Comprehensions</em> (QLCs). The answers to a
query are determined by data in QLC tables that fulfill the
constraints expressed by the QLCs of the query. QLCs are similar
- to ordinary list comprehensions as described in the Erlang
- Reference Manual and Programming Examples except that variables
- introduced in patterns cannot be used in list expressions. In
- fact, in the absence of optimizations and options such as
- <c>cache</c> and <c>unique</c> (see below), every QLC free of
- QLC tables evaluates to the same list of answers as the
+ to ordinary list comprehensions as described in
+ <seealso marker="doc/reference_manual:expressions#lcs">
+ Erlang Reference Manual</seealso> and
+ <seealso marker="doc/programming_examples:list_comprehensions">
+ Programming Examples</seealso>, except that variables
+ introduced in patterns cannot be used in list expressions.
+ In the absence of optimizations and options such as
+ <c>cache</c> and <c>unique</c> (see section
+ <seealso marker="#common_options">Common Options</seealso>, every
+ QLC free of QLC tables evaluates to the same list of answers as the
identical ordinary list comprehension.</p>
<p>While ordinary list comprehensions evaluate to lists, calling
- <seealso marker="#q">qlc:q/1,2</seealso> returns a <marker
- id="query_handle"></marker><em> Query
- Handle</em>. To obtain all the answers to a query, <seealso
- marker="#eval">qlc:eval/1,2</seealso> should be called with the
+ <seealso marker="#q/1"><c>q/1,2</c></seealso> returns a
+ <marker id="query_handle"></marker><em>query handle</em>.
+ To obtain all the answers to a query, <seealso marker="#eval/1">
+ <c>eval/1,2</c></seealso> is to be called with the
query handle as first argument. Query handles are essentially
- functional objects ("funs") created in the module calling <c>q/1,2</c>.
- As the funs refer to the module's code, one should
- be careful not to keep query handles too long if the module's
- code is to be replaced.
- Code replacement is described in the <seealso
- marker="doc/reference_manual:code_loading">Erlang Reference
- Manual</seealso>. The list of answers can also be traversed in
- chunks by use of a <marker
- id="query_cursor"></marker><em>Query Cursor</em>. Query cursors are
- created by calling <seealso
- marker="#cursor">qlc:cursor/1,2</seealso> with a query handle as
- first argument. Query cursors are essentially Erlang processes.
+ functional objects (funs) created in the module calling <c>q/1,2</c>.
+ As the funs refer to the module code, be careful not to keep query
+ handles too long if the module code is to be replaced.
+ Code replacement is described in section
+ <seealso marker="doc/reference_manual:code_loading">
+ Compilation and Code Loading</seealso> in the Erlang Reference Manual.
+ The list of answers can also be traversed in chunks by use of a
+ <marker id="query_cursor"></marker><em>query cursor</em>.
+ Query cursors are created by calling
+ <seealso marker="#cursor/1"><c>cursor/1,2</c></seealso> with a query
+ handle as first argument. Query cursors are essentially Erlang processes.
One answer at a time is sent from the query cursor process to
the process that created the cursor.</p>
-
</section>
- <section><title>Syntax</title>
-
+ <section>
+ <title>Syntax</title>
<p>Syntactically QLCs have the same parts as ordinary list
comprehensions:</p>
- <code type="none">[Expression || Qualifier1, Qualifier2, ...]</code>
+ <code type="none">
+[Expression || Qualifier1, Qualifier2, ...]</code>
- <p><c>Expression</c> (the <em>template</em>) is an arbitrary
+ <p><c>Expression</c> (the <em>template</em>) is any
Erlang expression. Qualifiers are either <em>filters</em> or
<em>generators</em>. Filters are Erlang expressions returning
- <c>bool()</c>. Generators have the form
+ <c>boolean()</c>. Generators have the form
<c><![CDATA[Pattern <- ListExpression]]></c>, where
<c>ListExpression</c> is an expression evaluating to a query
handle or a list. Query handles are returned from
- <c>qlc:table/2</c>, <c>qlc:append/1,2</c>, <c>qlc:sort/1,2</c>,
- <c>qlc:keysort/2,3</c>, <c>qlc:q/1,2</c>, and
- <c>qlc:string_to_handle/1,2,3</c>.</p>
-
+ <seealso marker="#append/1"><c>append/1,2</c></seealso>,
+ <seealso marker="#keysort/2"><c>keysort/2,3</c></seealso>,
+ <seealso marker="#q/1"><c>q/1,2</c></seealso>,
+ <seealso marker="#sort/1"><c>sort/1,2</c></seealso>,
+ <seealso marker="#string_to_handle/1">
+ <c>string_to_handle/1,2,3</c></seealso>, and
+ <seealso marker="#table/2"><c>table/2</c></seealso>.</p>
</section>
- <section><title>Evaluation</title>
-
- <p>The evaluation of a query handle begins by the inspection of
- options and the collection of information about tables. As a
- result qualifiers are modified during the optimization phase.
- Next all list expressions are evaluated. If a cursor has been
- created evaluation takes place in the cursor process. For those
- list expressions that are QLCs, the list expressions of the
- QLCs' generators are evaluated as well. One has to be careful if
- list expressions have side effects since the order in which list
- expressions are evaluated is unspecified. Finally the answers
- are found by evaluating the qualifiers from left to right,
- backtracking when some filter returns <c>false</c>, or
- collecting the template when all filters return <c>true</c>.</p>
-
- <p>Filters that do not return <c>bool()</c> but fail are handled
- differently depending on their syntax: if the filter is a guard
+ <section>
+ <title>Evaluation</title>
+ <p>A query handle is evaluated in the following order:</p>
+
+ <list type="bulleted">
+ <item>
+ <p>Inspection of options and the collection of information about
+ tables. As a result, qualifiers are modified during the optimization
+ phase.</p>
+ </item>
+ <item>
+ <p>All list expressions are evaluated. If a cursor has been created,
+ evaluation takes place in the cursor process. For list expressions
+ that are QLCs, the list expressions of the generators of the QLCs
+ are evaluated as well. Be careful if list expressions have side
+ effects, as list expressions are evaluated in unspecified order.</p>
+ </item>
+ <item>
+ <p>The answers are found by evaluating the qualifiers from left to
+ right, backtracking when some filter returns <c>false</c>, or
+ collecting the template when all filters return <c>true</c>.</p>
+ </item>
+ </list>
+
+ <p>Filters that do not return <c>boolean()</c> but fail are handled
+ differently depending on their syntax: if the filter is a guard,
it returns <c>false</c>, otherwise the query evaluation fails.
This behavior makes it possible for the <c>qlc</c> module to do
some optimizations without affecting the meaning of a query. For
@@ -131,302 +150,311 @@
candidate objects can often be found by looking up some key
values of the table or by traversing the table using a match
specification. It is necessary to place the guard filters
- immediately after the table's generator, otherwise the candidate
- objects will not be restricted to a small set. The reason is
+ immediately after the table generator, otherwise the candidate
+ objects are not restricted to a small set. The reason is
that objects that could make the query evaluation fail must not
- be excluded by looking up a key or running a match
- specification.</p>
-
+ be excluded by looking up a key or running a match specification.</p>
</section>
- <section><title>Join</title>
-
+ <section>
+ <title>Join</title>
<p>The <c>qlc</c> module supports fast join of two query handles.
Fast join is possible if some position <c>P1</c> of one query
handler and some position <c>P2</c> of another query handler are
- tested for equality. Two fast join methods have been
- implemented:</p>
+ tested for equality. Two fast join methods are provided:</p>
<list type="bulleted">
- <item>Lookup join traverses all objects of one query handle and
- finds objects of the other handle (a QLC table) such that the
+ <item><p><em>Lookup join</em> traverses all objects of one query handle
+ and finds objects of the other handle (a QLC table) such that the
values at <c>P1</c> and <c>P2</c> match or compare equal.
The <c>qlc</c> module does not create
- any indices but looks up values using the key position and
- the indexed positions of the QLC table.
+ any indexes but looks up values using the key position and
+ the indexed positions of the QLC table.</p>
</item>
- <item>Merge join sorts the objects of each query handle if
+ <item><p><em>Merge join</em> sorts the objects of each query handle if
necessary and filters out objects where the values at
- <c>P1</c> and <c>P2</c> do not compare equal. If there are
- many objects with the same value of <c>P2</c> a temporary
- file will be used for the equivalence classes.
+ <c>P1</c> and <c>P2</c> do not compare equal. If
+ many objects with the same value of <c>P2</c> exist, a temporary
+ file is used for the equivalence classes.</p>
</item>
</list>
<p>The <c>qlc</c> module warns at compile time if a QLC
combines query handles in such a way that more than one join is
- possible. In other words, there is no query planner that can
- choose a good order between possible join operations. It is up
+ possible. That is, no query planner is provided that can
+ select a good order between possible join operations. It is up
to the user to order the joins by introducing query handles.</p>
<p>The join is to be expressed as a guard filter. The filter must
be placed immediately after the two joined generators, possibly
after guard filters that use variables from no other generators
- but the two joined generators. The <c>qlc</c> module inspects
+ but the two joined generators. The <c>qlc</c> module inspects
the operands of
<c>=:=/2</c>, <c>==/2</c>, <c>is_record/2</c>, <c>element/2</c>,
and logical operators (<c>and/2</c>, <c>or/2</c>,
<c>andalso/2</c>, <c>orelse/2</c>, <c>xor/2</c>) when
determining which joins to consider.</p>
-
</section>
- <section><title>Common options</title>
-
- <p>The following options are accepted by <c>cursor/2</c>,
- <c>eval/2</c>, <c>fold/4</c>, and <c>info/2</c>:</p>
+ <section>
+ <marker id="common_options"></marker>
+ <title>Common Options</title>
+ <p>The following options are accepted by
+ <seealso marker="#cursor/2"><c>cursor/2</c></seealso>,
+ <seealso marker="#eval/2"><c>eval/2</c></seealso>,
+ <seealso marker="#fold/4"><c>fold/4</c></seealso>, and
+ <seealso marker="#info/2"><c>info/2</c></seealso>:</p>
<list type="bulleted">
- <item><c>{cache_all, Cache}</c> where <c>Cache</c> is
+ <item><p><c>{cache_all, Cache}</c>, where <c>Cache</c> is
equal to <c>ets</c> or <c>list</c> adds a
<c>{cache,&nbsp;Cache}</c> option to every list expression
- of the query except tables and lists. Default is
- <c>{cache_all,&nbsp;no}</c>. The option <c>cache_all</c> is
- equivalent to <c>{cache_all,&nbsp;ets}</c>.
+ of the query except tables and lists. Defaults to
+ <c>{cache_all,&nbsp;no}</c>. Option <c>cache_all</c> is
+ equivalent to <c>{cache_all,&nbsp;ets}</c>.</p>
</item>
- <item><c>{max_list_size, MaxListSize}</c> <marker
- id="max_list_size"></marker> where <c>MaxListSize</c> is the
+ <item><p><marker id="max_list_size"></marker><c>{max_list_size,
+ MaxListSize}</c>, where <c>MaxListSize</c> is the
size in bytes of terms on the external format. If the
accumulated size of collected objects exceeds
- <c>MaxListSize</c> the objects are written onto a temporary
- file. This option is used by the <c>{cache,&nbsp;list}</c>
- option as well as by the merge join method. Default is
- 512*1024 bytes.
+ <c>MaxListSize</c>, the objects are written onto a temporary
+ file. This option is used by option <c>{cache,&nbsp;list}</c>
+ and by the merge join method. Defaults to 512*1024 bytes.</p>
</item>
- <item><c>{tmpdir_usage, TmpFileUsage}</c> determines the
+ <item><p><c>{tmpdir_usage, TmpFileUsage}</c> determines the
action taken when <c>qlc</c> is about to create temporary
- files on the directory set by the <c>tmpdir</c> option. If the
- value is <c>not_allowed</c> an error tuple is returned,
+ files on the directory set by option <c>tmpdir</c>. If the
+ value is <c>not_allowed</c>, an error tuple is returned,
otherwise temporary files are created as needed. Default is
- <c>allowed</c> which means that no further action is taken.
+ <c>allowed</c>, which means that no further action is taken.
The values <c>info_msg</c>, <c>warning_msg</c>, and
<c>error_msg</c> mean that the function with the corresponding
- name in the module <c>error_logger</c> is called for printing
- some information (currently the stacktrace).
+ name in module
+ <seealso marker="kernel:error_logger"><c>error_logger</c></seealso>
+ is called for printing some information (currently the stacktrace).</p>
</item>
- <item><c>{tmpdir, TempDirectory}</c> sets the directory used by
- merge join for temporary files and by the
- <c>{cache,&nbsp;list}</c> option. The option also overrides
- the <c>tmpdir</c> option of <c>keysort/3</c> and
- <c>sort/2</c>. The default value is <c>""</c> which means that
- the directory returned by <c>file:get_cwd()</c> is used.
+ <item><p><c>{tmpdir, TempDirectory}</c> sets the directory used by
+ merge join for temporary files and by option
+ <c>{cache,&nbsp;list}</c>. The option also overrides
+ option <c>tmpdir</c> of
+ <seealso marker="#keysort/3"><c>keysort/3</c></seealso> and
+ <seealso marker="#sort/2"><c>sort/2</c></seealso>.
+ Defaults to <c>""</c>, which means that
+ the directory returned by <c>file:get_cwd()</c> is used.</p>
</item>
- <item><c>{unique_all, true}</c> adds a
+ <item><p><c>{unique_all, true}</c> adds a
<c>{unique,&nbsp;true}</c> option to every list expression of
- the query. Default is <c>{unique_all,&nbsp;false}</c>. The
- option <c>unique_all</c> is equivalent to
- <c>{unique_all,&nbsp;true}</c>.
+ the query. Defaults to <c>{unique_all,&nbsp;false}</c>.
+ Option <c>unique_all</c> is equivalent to
+ <c>{unique_all,&nbsp;true}</c>.</p>
</item>
</list>
-
</section>
- <section><title>Getting started</title>
-
- <p><marker id="getting_started"></marker> As already mentioned
- queries are stated in the list comprehension syntax as described
- in the <seealso marker="doc/reference_manual:expressions">Erlang
- Reference Manual</seealso>. In the following some familiarity
- with list comprehensions is assumed. There are examples in
- <seealso
- marker="doc/programming_examples:list_comprehensions">Programming
- Examples</seealso> that can get you started. It should be
- stressed that list comprehensions do not add any computational
+ <section>
+ <marker id="getting_started"></marker>
+ <title>Getting Started</title>
+ <p>As mentioned earlier,
+ queries are expressed in the list comprehension syntax as described
+ in section
+ <seealso marker="doc/reference_manual:expressions">Expressions</seealso>
+ in Erlang Reference Manual. In the following, some familiarity
+ with list comprehensions is assumed. The examples in section
+ <seealso marker="doc/programming_examples:list_comprehensions">
+ List Comprehensions</seealso> in Programming Examples can get you
+ started. Notice that list comprehensions do not add any computational
power to the language; anything that can be done with list
- comprehensions can also be done without them. But they add a
- syntax for expressing simple search problems which is compact
+ comprehensions can also be done without them. But they add
+ syntax for expressing simple search problems, which is compact
and clear once you get used to it.</p>
<p>Many list comprehension expressions can be evaluated by the
- <c>qlc</c> module. Exceptions are expressions such that
+ <c>qlc</c> module. Exceptions are expressions, such that
variables introduced in patterns (or filters) are used in some
- generator later in the list comprehension. As an example
- consider an implementation of lists:append(L):
- <c><![CDATA[[X ||Y <- L, X <- Y]]]></c>.
- Y is introduced in the first generator and used in the second.
+ generator later in the list comprehension. As an example,
+ consider an implementation of <c>lists:append(L)</c>:
+ <c><![CDATA[[X ||Y <- L, X <- Y]]]></c>.
+ <c>Y</c> is introduced in the first generator and used in the second.
The ordinary list comprehension is normally to be preferred when
there is a choice as to which to use. One difference is that
- <c>qlc:eval/1,2</c> collects answers in a list which is finally
+ <seealso marker="#eval/1"><c>eval/1,2</c></seealso>
+ collects answers in a list that is finally
reversed, while list comprehensions collect answers on the stack
- which is finally unwound.</p>
+ that is finally unwound.</p>
<p>What the <c>qlc</c> module primarily adds to list
comprehensions is that data can be read from QLC tables in small
- chunks. A QLC table is created by calling <c>qlc:table/2</c>.
+ chunks. A QLC table is created by calling
+ <seealso marker="#table/2"><c>qlc:table/2</c></seealso>.
Usually <c>qlc:table/2</c> is not called directly from the query
- but via an interface function of some data structure. There are
- a few examples of such functions in Erlang/OTP:
- <c>mnesia:table/1,2</c>, <c>ets:table/1,2</c>, and
- <c>dets:table/1,2</c>. For a given data structure there can be
- several functions that create QLC tables, but common for all
- these functions is that they return a query handle created by
- <c>qlc:table/2</c>. Using the QLC tables provided by OTP is
- probably sufficient in most cases, but for the more advanced
- user the section <seealso
- marker="#implementing_a_qlc_table">Implementing a QLC
- table</seealso> describes the implementation of a function
+ but through an interface function of some data structure.
+ Erlang/OTP includes a few examples of such functions:
+ <seealso marker="mnesia:mnesia#table/1"><c>mnesia:table/1,2</c></seealso>,
+ <seealso marker="ets#table/1"><c>ets:table/1,2</c></seealso>, and
+ <seealso marker="dets#table/1"><c>dets:table/1,2</c></seealso>.
+ For a given data structure, many functions can create QLC tables, but
+ common for these functions is that they return a query handle created by
+ <seealso marker="#table/2"><c>qlc:table/2</c></seealso>.
+ Using the QLC tables provided by Erlang/OTP is usually
+ probably sufficient, but for the more advanced user section
+ <seealso marker="#implementing_a_qlc_table">Implementing a QLC
+ Table</seealso> describes the implementation of a function
calling <c>qlc:table/2</c>.</p>
- <p>Besides <c>qlc:table/2</c> there are other functions that
- return query handles. They might not be used as often as tables,
- but are useful from time to time. <c>qlc:append</c> traverses
- objects from several tables or lists after each other. If, for
- instance, you want to traverse all answers to a query QH and
+ <p>Besides <c>qlc:table/2</c>, other functions
+ return query handles. They are used more seldom than tables,
+ but are sometimes useful.
+ <seealso marker="#append/1"><c>qlc:append/1,2</c></seealso> traverses
+ objects from many tables or lists after each other. If, for
+ example, you want to traverse all answers to a query <c>QH</c> and
then finish off by a term <c>{finished}</c>, you can do that by
- calling <c>qlc:append(QH, [{finished}])</c>. <c>append</c> first
- returns all objects of QH, then <c>{finished}</c>. If there is
- one tuple <c>{finished}</c> among the answers to QH it will be
- returned twice from <c>append</c>.</p>
+ calling <c>qlc:append(QH, [{finished}])</c>. <c>append/2</c> first
+ returns all objects of <c>QH</c>, then <c>{finished}</c>. If a tuple
+ <c>{finished}</c> exists among the answers to <c>QH</c>, it is
+ returned twice from <c>append/2</c>.</p>
<p>As another example, consider concatenating the answers to two
- queries QH1 and QH2 while removing all duplicates. The means to
- accomplish this is to use the <c>unique</c> option:</p>
+ queries <c>QH1</c> and <c>QH2</c> while removing all duplicates. This is
+ accomplished by using option <c>unique</c>:</p>
- <code type="none"><![CDATA[
-qlc:q([X || X <- qlc:append(QH1, QH2)], {unique, true})]]></code>
+ <code type="none">
+<![CDATA[qlc:q([X || X <- qlc:append(QH1, QH2)], {unique, true})]]></code>
- <p>The cost is substantial: every returned answer will be stored
- in an ETS table. Before returning an answer it is looked up in
+ <p>The cost is substantial: every returned answer is stored
+ in an ETS table. Before returning an answer, it is looked up in
the ETS table to check if it has already been returned. Without
- the <c>unique</c> options all answers to QH1 would be returned
- followed by all answers to QH2. The <c>unique</c> options keeps
+ the <c>unique</c> option, all answers to <c>QH1</c> would be returned
+ followed by all answers to <c>QH2</c>. The <c>unique</c> option keeps
the order between the remaining answers.</p>
- <p>If the order of the answers is not important there is the
- alternative to sort the answers uniquely:</p>
+ <p>If the order of the answers is not important, there is an
+ alternative to the <c>unique</c> option, namely to sort the
+ answers uniquely:</p>
- <code type="none"><![CDATA[
-qlc:sort(qlc:q([X || X <- qlc:append(QH1, QH2)], {unique, true})).]]></code>
+ <code type="none">
+<![CDATA[qlc:sort(qlc:q([X || X <- qlc:append(QH1, QH2)], {unique, true})).]]></code>
- <p>This query also removes duplicates but the answers will be
- sorted. If there are many answers temporary files will be used.
- Note that in order to get the first unique answer all answers
- have to be found and sorted. Both alternatives find duplicates
- by comparing answers, that is, if A1 and A2 are answers found in
- that order, then A2 is a removed if A1 == A2.</p>
+ <p>This query also removes duplicates but the answers are
+ sorted. If there are many answers, temporary files are used.
+ Notice that to get the first unique answer, all answers
+ must be found and sorted. Both alternatives find duplicates by comparing
+ answers, that is, if <c>A1</c> and <c>A2</c> are answers found in
+ that order, then <c>A2</c> is a removed if <c>A1 == A2</c>.</p>
- <p>To return just a few answers cursors can be used. The following
+ <p>To return only a few answers, cursors can be used. The following
code returns no more than five answers using an ETS table for
storing the unique answers:</p>
- <code type="none"><![CDATA[
-C = qlc:cursor(qlc:q([X || X <- qlc:append(QH1, QH2)],{unique,true})),
+ <code type="none">
+<![CDATA[C = qlc:cursor(qlc:q([X || X <- qlc:append(QH1, QH2)],{unique,true})),
R = qlc:next_answers(C, 5),
ok = qlc:delete_cursor(C),
R.]]></code>
- <p>Query list comprehensions are convenient for stating
- constraints on data from two or more tables. An example that
+ <p>QLCs are convenient for stating
+ constraints on data from two or more tables. The following example
does a natural join on two query handles on position 2:</p>
- <code type="none"><![CDATA[
-qlc:q([{X1,X2,X3,Y1} ||
+ <code type="none">
+<![CDATA[qlc:q([{X1,X2,X3,Y1} ||
{X1,X2,X3} <- QH1,
{Y1,Y2} <- QH2,
X2 =:= Y2])]]></code>
- <p>The <c>qlc</c> module will evaluate this differently depending on
- the query
- handles <c>QH1</c> and <c>QH2</c>. If, for example, <c>X2</c> is
- matched against the key of a QLC table the lookup join method
- will traverse the objects of <c>QH2</c> while looking up key
- values in the table. On the other hand, if neither <c>X2</c> nor
+ <p>The <c>qlc</c> module evaluates this differently depending on the
+ query handles <c>QH1</c> and <c>QH2</c>. If, for example, <c>X2</c> is
+ matched against the key of a QLC table, the lookup join method
+ traverses the objects of <c>QH2</c> while looking up key
+ values in the table. However, if not <c>X2</c> or
<c>Y2</c> is matched against the key or an indexed position of a
- QLC table, the merge join method will make sure that <c>QH1</c>
+ QLC table, the merge join method ensures that <c>QH1</c>
and <c>QH2</c> are both sorted on position 2 and next do the
join by traversing the objects one by one.</p>
- <p>The <c>join</c> option can be used to force the <c>qlc</c> module
- to use a
- certain join method. For the rest of this section it is assumed
+ <p>Option <c>join</c> can be used to force the <c>qlc</c> module to use
+ a certain join method. For the rest of this section it is assumed
that the excessively slow join method called "nested loop" has
been chosen:</p>
- <code type="none"><![CDATA[
-qlc:q([{X1,X2,X3,Y1} ||
+ <code type="none">
+<![CDATA[qlc:q([{X1,X2,X3,Y1} ||
{X1,X2,X3} <- QH1,
{Y1,Y2} <- QH2,
X2 =:= Y2],
{join, nested_loop})]]></code>
- <p>In this case the filter will be applied to every possible pair
- of answers to QH1 and QH2, one at a time. If there are M answers
- to QH1 and N answers to QH2 the filter will be run M*N
- times.</p>
-
- <p>If QH2 is a call to the function for <c>gb_trees</c> as defined
- in the <seealso marker="#implementing_a_qlc_table">Implementing
- a QLC table</seealso> section, <c>gb_table:table/1</c>, the
- iterator for the gb-tree will be initiated for each answer to
- QH1 after which the objects of the gb-tree will be returned one
+ <p>In this case the filter is applied to every possible pair
+ of answers to <c>QH1</c> and <c>QH2</c>, one at a time.
+ If there are M answers to <c>QH1</c> and N answers to <c>QH2</c>,
+ the filter is run M*N times.</p>
+
+ <p>If <c>QH2</c> is a call to the function for
+ <seealso marker="gb_trees"><c>gb_trees</c></seealso>, as defined
+ in section <seealso marker="#implementing_a_qlc_table">Implementing
+ a QLC Table</seealso>, then <c>gb_table:table/1</c>, the
+ iterator for the gb-tree is initiated for each answer to
+ <c>QH1</c>. The objects of the gb-tree are then returned one
by one. This is probably the most efficient way of traversing
- the table in that case since it takes minimal computational
- power to get the following object. But if QH2 is not a table but
- a more complicated QLC, it can be more efficient use some RAM
+ the table in that case, as it takes minimal computational
+ power to get the following object. But if <c>QH2</c> is not a table but
+ a more complicated QLC, it can be more efficient to use some RAM
memory for collecting the answers in a cache, particularly if
there are only a few answers. It must then be assumed that
- evaluating QH2 has no side effects so that the meaning of the
- query does not change if QH2 is evaluated only once. One way of
- caching the answers is to evaluate QH2 first of all and
- substitute the list of answers for QH2 in the query. Another way
- is to use the <c>cache</c> option. It is stated like this:</p>
-
- <code type="none"><![CDATA[
-QH2' = qlc:q([X || X <- QH2], {cache, ets})]]></code>
-
- <p>or just</p>
-
- <code type="none"><![CDATA[
-QH2' = qlc:q([X || X <- QH2], cache)]]></code>
-
- <p>The effect of the <c>cache</c> option is that when the
- generator QH2' is run the first time every answer is stored in
- an ETS table. When next answer of QH1 is tried, answers to QH2'
- are copied from the ETS table which is very fast. As for the
- <c>unique</c> option the cost is a possibly substantial amount
- of RAM memory. The <c>{cache,&nbsp;list}</c> option offers the
+ evaluating <c>QH2</c> has no side effects so that the meaning of the
+ query does not change if <c>QH2</c> is evaluated only once. One way of
+ caching the answers is to evaluate <c>QH2</c> first of all and
+ substitute the list of answers for <c>QH2</c> in the query. Another way
+ is to use option <c>cache</c>. It is expressed like this:</p>
+
+ <code type="none">
+<![CDATA[QH2' = qlc:q([X || X <- QH2], {cache, ets})]]></code>
+
+ <p>or only</p>
+
+ <code type="none">
+<![CDATA[QH2' = qlc:q([X || X <- QH2], cache)]]></code>
+
+ <p>The effect of option <c>cache</c> is that when
+ generator <c>QH2'</c> is run the first time, every answer is stored in
+ an ETS table. When the next answer of <c>QH1</c> is tried,
+ answers to <c>QH2'</c>
+ are copied from the ETS table, which is very fast. As for
+ option <c>unique</c> the cost is a possibly substantial amount
+ of RAM memory.</p>
+
+ <p>Option <c>{cache,&nbsp;list}</c> offers the
possibility to store the answers in a list on the process heap.
- While this has the potential of being faster than ETS tables
- since there is no need to copy answers from the table it can
- often result in slower evaluation due to more garbage
- collections of the process' heap as well as increased RAM memory
- consumption due to larger heaps. Another drawback with cache
- lists is that if the size of the list exceeds a limit a
- temporary file will be used. Reading the answers from a file is
- very much slower than copying them from an ETS table. But if the
- available RAM memory is scarce setting the <seealso
+ This has the potential of being faster than ETS tables,
+ as there is no need to copy answers from the table. However, it can
+ often result in slower evaluation because of more garbage
+ collections of the process heap and increased RAM memory
+ consumption because of larger heaps. Another drawback with cache
+ lists is that if the list size exceeds a limit, a
+ temporary file is used. Reading the answers from a file is
+ much slower than copying them from an ETS table. But if the
+ available RAM memory is scarce, setting the <seealso
marker="#max_list_size">limit</seealso> to some low value is an
alternative.</p>
- <p>There is an option <c>cache_all</c> that can be set to
+ <p>Option <c>cache_all</c> can be set to
<c>ets</c> or <c>list</c> when evaluating a query. It adds a
<c>cache</c> or <c>{cache,&nbsp;list}</c> option to every list
expression except QLC tables and lists on all levels of the
query. This can be used for testing if caching would improve
- efficiency at all. If the answer is yes further testing is
- needed to pinpoint the generators that should be cached.</p>
-
+ efficiency at all. If the answer is yes, further testing is
+ needed to pinpoint the generators that are to be cached.</p>
</section>
- <section><title>Implementing a QLC table</title>
-
- <p><marker id="implementing_a_qlc_table"></marker>As an example of
- how to use the <seealso marker="#q">qlc:table/2</seealso>
- function the implementation of a QLC table for the <seealso
- marker="gb_trees">gb_trees</seealso> module is given:</p>
+ <section>
+ <marker id="implementing_a_qlc_table"></marker>
+ <title>Implementing a QLC Table</title>
+ <p>As an example of
+ how to use function <seealso marker="#table/2"><c>table/2</c></seealso>,
+ the implementation of a QLC table for the <seealso
+ marker="gb_trees"><c>gb_trees</c></seealso> module is given:</p>
- <code type="none"><![CDATA[
--module(gb_table).
+ <code type="none">
+<![CDATA[-module(gb_table).
-export([table/1]).
@@ -486,65 +514,64 @@ gb_iter(I0, N, EFun) ->
<p><c>TF</c> is the traversal function. The <c>qlc</c> module
requires that there is a way of traversing all objects of the
- data structure; in <c>gb_trees</c> there is an iterator function
- suitable for that purpose. Note that for each object returned a
+ data structure. <c>gb_trees</c> has an iterator function
+ suitable for that purpose. Notice that for each object returned, a
new fun is created. As long as the list is not terminated by
- <c>[]</c> it is assumed that the tail of the list is a nullary
+ <c>[]</c>, it is assumed that the tail of the list is a nullary
function and that calling the function returns further objects
(and functions).</p>
<p>The lookup function is optional. It is assumed that the lookup
function always finds values much faster than it would take to
traverse the table. The first argument is the position of the
- key. Since <c>qlc_next</c> returns the objects as
- {Key,&nbsp;Value} pairs the position is 1. Note that the lookup
- function should return {Key,&nbsp;Value} pairs, just as the
- traversal function does.</p>
+ key. As <c>qlc_next/1</c> returns the objects as <c>{Key,&nbsp;Value}</c>
+ pairs, the position is 1. Notice that the lookup function is to return
+ <c>{Key,&nbsp;Value}</c> pairs, as the traversal function does.</p>
<p>The format function is also optional. It is called by
- <c>qlc:info</c> to give feedback at runtime of how the query
- will be evaluated. One should try to give as good feedback as
- possible without showing too much details. In the example at
- most 7 objects of the table are shown. The format function
+ <seealso marker="#info/1"><c>info/1,2</c></seealso>
+ to give feedback at runtime of how the query
+ is to be evaluated. Try to give as good feedback as
+ possible without showing too much details. In the example, at
+ most seven objects of the table are shown. The format function
handles two cases: <c>all</c> means that all objects of the
- table will be traversed; <c>{lookup,&nbsp;1,&nbsp;KeyValues}</c>
- means that the lookup function will be used for looking up key
+ table are traversed; <c>{lookup,&nbsp;1,&nbsp;KeyValues}</c>
+ means that the lookup function is used for looking up key
values.</p>
- <p>Whether the whole table will be traversed or just some keys
- looked up depends on how the query is stated. If the query has
+ <p>Whether the whole table is traversed or only some keys
+ looked up depends on how the query is expressed. If the query has
the form</p>
- <code type="none"><![CDATA[
-qlc:q([T || P <- LE, F])]]></code>
+ <code type="none">
+<![CDATA[qlc:q([T || P <- LE, F])]]></code>
- <p>and P is a tuple, the <c>qlc</c> module analyzes P and F in
- compile time to find positions of the tuple P that are tested
+ <p>and <c>P</c> is a tuple, the <c>qlc</c> module analyzes
+ <c>P</c> and <c>F</c> in
+ compile time to find positions of tuple <c>P</c> that are tested
for equality to constants. If such a position at runtime turns
out to be the key position, the lookup function can be used,
- otherwise all objects of the table have to be traversed. It is
- the info function <c>InfoFun</c> that returns the key position.
+ otherwise all objects of the table must be traversed.
+ The info function <c>InfoFun</c> returns the key position.
There can be indexed positions as well, also returned by the
info function. An index is an extra table that makes lookup on
- some position fast. Mnesia maintains indices upon request,
- thereby introducing so called secondary keys. The <c>qlc</c>
+ some position fast. Mnesia maintains indexes upon request,
+ and introduces so called secondary keys. The <c>qlc</c>
module prefers to look up objects using the key before secondary
keys regardless of the number of constants to look up.</p>
-
</section>
- <section><title>Key equality</title>
-
- <p>In Erlang there are two operators for testing term equality,
- namely <c>==/2</c> and <c>=:=/2</c>. The difference between them
- is all about the integers that can be represented by floats. For
- instance, <c>2 == 2.0</c> evaluates to
+ <section>
+ <title>Key Equality</title>
+ <p>Erlang/OTP has two operators for testing term equality: <c>==/2</c>
+ and <c>=:=/2</c>. The difference is all about the integers that can be
+ represented by floats. For example, <c>2 == 2.0</c> evaluates to
<c>true</c> while <c>2 =:= 2.0</c> evaluates to <c>false</c>.
Normally this is a minor issue, but the <c>qlc</c> module cannot
ignore the difference, which affects the user's choice of
operators in QLCs.</p>
- <p>If the <c>qlc</c> module can find out at compile time that some
+ <p>If the <c>qlc</c> module at compile time can determine that some
constant is free of integers, it does not matter which one of
<c>==/2</c> or <c>=:=/2</c> is used:</p>
@@ -560,16 +587,16 @@ ets:match_spec_run(lists:flatmap(fun(V) ->
[a,2.71]),
ets:match_spec_compile([{{'$1'},[],['$1']}]))</pre>
- <p>In the example the <c>==/2</c> operator has been handled
- exactly as <c>=:=/2</c> would have been handled. On the other
- hand, if it cannot be determined at compile time that some
- constant is free of integers and the table uses <c>=:=/2</c>
- when comparing keys for equality (see the option <seealso
- marker="#key_equality">key_equality</seealso>), the
- <c>qlc</c> module will not try to look up the constant. The
+ <p>In the example, operator <c>==/2</c> has been handled
+ exactly as <c>=:=/2</c> would have been handled. However,
+ if it cannot be determined at compile time that some
+ constant is free of integers, and the table uses <c>=:=/2</c>
+ when comparing keys for equality (see option <seealso
+ marker="#key_equality">key_equality</seealso>), then the
+ <c>qlc</c> module does not try to look up the constant. The
reason is that there is in the general case no upper limit on
the number of key values that can compare equal to such a
- constant; every combination of integers and floats has to be
+ constant; every combination of integers and floats must be
looked up:</p>
<pre>
@@ -586,11 +613,11 @@ ets:table(53264,
3> <input>lists:sort(qlc:e(Q2)).</input>
[a,b,c]</pre>
- <p>Looking up just <c>{2,2}</c> would not return <c>b</c> and
+ <p>Looking up only <c>{2,2}</c> would not return <c>b</c> and
<c>c</c>.</p>
<p>If the table uses <c>==/2</c> when comparing keys for equality,
- the <c>qlc</c> module will look up the constant regardless of
+ the <c>qlc</c> module looks up the constant regardless of
which operator is used in the QLC. However, <c>==/2</c> is to
be preferred:</p>
@@ -608,19 +635,18 @@ ets:match_spec_run(ets:lookup(86033, {2,2}),
[b]</pre>
<p>Lookup join is handled analogously to lookup of constants in a
- table: if the join operator is <c>==/2</c> and the table where
+ table: if the join operator is <c>==/2</c>, and the table where
constants are to be looked up uses <c>=:=/2</c> when testing
- keys for equality, the <c>qlc</c> module will not consider
+ keys for equality, then the <c>qlc</c> module does not consider
lookup join for that table.</p>
-
</section>
<datatypes>
<datatype>
<name name="abstract_expr"></name>
- <desc><p>Parse trees for Erlang expression, see the <seealso
- marker="erts:absform">abstract format</seealso>
- documentation in the ERTS User's Guide.</p></desc>
+ <desc><p>Parse trees for Erlang expression, see section <seealso
+ marker="erts:absform">The Abstract Format</seealso>
+ in the ERTS User's Guide.</p></desc>
</datatype>
<datatype>
<name name="answer"></name>
@@ -633,14 +659,14 @@ ets:match_spec_run(ets:lookup(86033, {2,2}),
</datatype>
<datatype>
<name name="match_expression"></name>
- <desc><p>Match&nbsp;specification, see the <seealso
- marker="erts:match_spec">match specification</seealso>
- documentation in the ERTS User's Guide and <seealso
- marker="ms_transform">ms_transform(3).</seealso></p></desc>
+ <desc><p>Match&nbsp;specification, see section <seealso
+ marker="erts:match_spec">Match Specifications in Erlang</seealso>
+ in the ERTS User's Guide and <seealso
+ marker="ms_transform"><c>ms_transform(3)</c></seealso>.</p></desc>
</datatype>
<datatype>
<name name="no_files"></name>
- <desc><p>Actually an integer > 1.</p></desc>
+ <desc><p>An integer &gt; 1.</p></desc>
</datatype>
<datatype>
<name name="key_pos"></name>
@@ -671,7 +697,7 @@ ets:match_spec_run(ets:lookup(86033, {2,2}),
<name name="query_list_comprehension"></name>
<desc><p>A literal
<seealso marker="#query_list_comprehension">query
- list comprehension</seealso>.</p></desc>
+ list comprehension</seealso>.</p></desc>
</datatype>
<datatype>
<name name="spawn_options"></name>
@@ -682,7 +708,7 @@ ets:match_spec_run(ets:lookup(86033, {2,2}),
<datatype>
<name name="sort_option"></name>
<desc><p>See <seealso
- marker="file_sorter">file_sorter(3)</seealso>.</p></desc>
+ marker="file_sorter"><c>file_sorter(3)</c></seealso>.</p></desc>
</datatype>
<datatype>
<name name="tmp_directory"></name>
@@ -693,15 +719,14 @@ ets:match_spec_run(ets:lookup(86033, {2,2}),
</datatypes>
<funcs>
-
<func>
<name name="append" arity="1"/>
<fsummary>Return a query handle.</fsummary>
<desc>
- <p>Returns a query handle. When evaluating the query handle
- <c><anno>QH</anno></c> all answers to the first query handle in
- <c><anno>QHL</anno></c> are returned followed by all answers
- to the rest of the query handles in <c><anno>QHL</anno></c>.</p>
+ <p>Returns a query handle. When evaluating query handle
+ <c><anno>QH</anno></c>, all answers to the first query handle in
+ <c><anno>QHL</anno></c> are returned, followed by all answers
+ to the remaining query handles in <c><anno>QHL</anno></c>.</p>
</desc>
</func>
@@ -709,11 +734,10 @@ ets:match_spec_run(ets:lookup(86033, {2,2}),
<name name="append" arity="2"/>
<fsummary>Return a query handle.</fsummary>
<desc>
- <p>Returns a query handle. When evaluating the query handle
- <c><anno>QH3</anno></c> all answers to
- <c><anno>QH1</anno></c> are returned followed by all answers
+ <p>Returns a query handle. When evaluating query handle
+ <c><anno>QH3</anno></c>, all answers to
+ <c><anno>QH1</anno></c> are returned, followed by all answers
to <c><anno>QH2</anno></c>.</p>
-
<p><c>append(QH1,&nbsp;QH2)</c> is equivalent to
<c>append([QH1,&nbsp;QH2])</c>.</p>
</desc>
@@ -724,15 +748,18 @@ ets:match_spec_run(ets:lookup(86033, {2,2}),
<name name="cursor" arity="2"/>
<fsummary>Create a query cursor.</fsummary>
<desc>
- <p><marker id="cursor"></marker>Creates a query cursor and
+ <p>Creates a query cursor and
makes the calling process the owner of the cursor. The
- cursor is to be used as argument to <c>next_answers/1,2</c>
- and (eventually) <c>delete_cursor/1</c>. Calls
- <c>erlang:spawn_opt</c> to spawn and link a process which
- will evaluate the query handle. The value of the option
+ cursor is to be used as argument to
+ <seealso marker="#next_answers/1">
+ <c>next_answers/1,2</c></seealso> and (eventually)
+ <seealso marker="#delete_cursor/1"><c>delete_cursor/1</c></seealso>.
+ Calls <seealso marker="erts:erlang#spawn_opt/2">
+ <c>erlang:spawn_opt/2</c></seealso> to spawn and link to
+ a process that evaluates the query handle. The value of option
<c>spawn_options</c> is used as last argument when calling
- <c>spawn_opt</c>. The default value is <c>[link]</c>.</p>
-
+ <c>spawn_opt/2</c>. Defaults to <c>[link]</c>.</p>
+ <p><em>Example:</em></p>
<pre>
1> <input>QH = qlc:q([{X,Y} || X &lt;- [a,b], Y &lt;- [1,2]]),</input>
<input>QC = qlc:cursor(QH),</input>
@@ -759,15 +786,15 @@ ok</pre>
</func>
<func>
- <name name="eval" arity="1"/>
- <name name="eval" arity="2"/>
<name name="e" arity="1"/>
<name name="e" arity="2"/>
+ <name name="eval" arity="1"/>
+ <name name="eval" arity="2"/>
<fsummary>Return all answers to a query.</fsummary>
<desc>
- <p><marker id="eval"></marker>Evaluates a query handle in the
+ <p>Evaluates a query handle in the
calling process and collects all answers in a list.</p>
-
+ <p><em>Example:</em></p>
<pre>
1> <input>QH = qlc:q([{X,Y} || X &lt;- [a,b], Y &lt;- [1,2]]),</input>
<input>qlc:eval(QH).</input>
@@ -786,11 +813,11 @@ ok</pre>
the query handle together with an extra argument
<c><anno>AccIn</anno></c>. The query handle and the function
are evaluated in the calling process.
- <c><anno>Function</anno></c> must return a new accumulator
+ <c><anno>Function</anno></c> must return a new accumulator,
which is passed to the next call.
<c><anno>Acc0</anno></c> is returned if there are no answers
to the query handle.</p>
-
+ <p><em>Example:</em></p>
<pre>
1> <input>QH = [1,2,3,4,5,6],</input>
<input>qlc:fold(fun(X, Sum) -> X + Sum end, 0, QH).</input>
@@ -818,30 +845,46 @@ ok</pre>
<name name="info" arity="2"/>
<fsummary>Return code describing a query handle.</fsummary>
<desc>
- <p><marker id="info"></marker>Returns information about a
+ <p>Returns information about a
query handle. The information describes the simplifications
and optimizations that are the results of preparing the
- query for evaluation. This function is probably useful
- mostly during debugging.</p>
-
+ query for evaluation. This function is probably mainly useful
+ during debugging.</p>
<p>The information has the form of an Erlang expression where
QLCs most likely occur. Depending on the format functions of
- mentioned QLC tables it may not be absolutely accurate.</p>
-
- <p>The default is to return a sequence of QLCs in a block, but
- if the option <c>{flat,&nbsp;false}</c> is given, one single
- QLC is returned. The default is to return a string, but if
- the option <c>{format,&nbsp;abstract_code}</c> is given,
- abstract code is returned instead. In the abstract code
- port identifiers, references, and pids are represented by
- strings. The default is to return
- all elements in lists, but if the
- <c>{n_elements,&nbsp;NElements}</c> option is given, only a
- limited number of elements are returned. The default is to
- show all of objects and match specifications, but if the
- <c>{depth,&nbsp;Depth}</c> option is given, parts of terms
- below a certain depth are replaced by <c>'...'</c>.</p>
-
+ mentioned QLC tables, it is not certain that the information
+ is absolutely accurate.</p>
+ <p>Options:</p>
+ <list type="bulleted">
+ <item>
+ <p>The default is to return a sequence of QLCs in a block, but
+ if option <c>{flat,&nbsp;false}</c> is specified, one single
+ QLC is returned.</p>
+ </item>
+ <item>
+ <p>The default is to return a string, but if
+ option <c>{format,&nbsp;abstract_code}</c> is specified,
+ abstract code is returned instead. In the abstract code,
+ port identifiers, references, and pids are represented by
+ strings.</p>
+ </item>
+ <item>
+ <p>The default is to return all elements in lists, but if
+ option <c>{n_elements,&nbsp;NElements}</c> is specified, only
+ a limited number of elements are returned.</p>
+ </item>
+ <item>
+ <p>The default is to show all parts of
+ objects and match specifications,
+ but if option <c>{depth,&nbsp;Depth}</c> is specified, parts
+ of terms below a certain depth are replaced by <c>'...'</c>.</p>
+ </item>
+ </list>
+ <p><c>info(<anno>QH</anno>)</c> is equivalent to
+ <c>info(<anno>QH</anno>, [])</c>.</p>
+ <p><em>Examples:</em></p>
+ <p>In the following example two simple QLCs are inserted only to
+ hold option <c>{unique,&nbsp;true}</c>:</p>
<pre>
1> <input>QH = qlc:q([{X,Y} || X &lt;- [x,y], Y &lt;- [a,b]]),</input>
<input>io:format("~s~n", [qlc:info(QH, unique_all)]).</input>
@@ -865,10 +908,11 @@ begin
],
[{unique,true}])
end</pre>
-
- <p>In this example two simple QLCs have been inserted just to
- hold the <c>{unique,&nbsp;true}</c> option.</p>
-
+ <p>In the following example QLC <c>V2</c> has
+ been inserted to show the joined generators and the join
+ method chosen. A convention is used for lookup join: the
+ first generator (<c>G2</c>) is the one traversed, the second
+ (<c>G1</c>) is the table where constants are looked up.</p>
<pre>
1> <input>E1 = ets:new(e1, []),</input>
<input>E2 = ets:new(e2, []),</input>
@@ -898,15 +942,6 @@ begin
[{X,Z}|{W,Y}] &lt;- V2
])
end</pre>
-
- <p>In this example the query list comprehension <c>V2</c> has
- been inserted to show the joined generators and the join
- method chosen. A convention is used for lookup join: the
- first generator (<c>G2</c>) is the one traversed, the second
- one (<c>G1</c>) is the table where constants are looked up.</p>
-
- <p><c>info(<anno>QH</anno>)</c> is equivalent to
- <c>info(<anno>QH</anno>, [])</c>.</p>
</desc>
</func>
@@ -915,18 +950,16 @@ end</pre>
<name name="keysort" arity="3"/>
<fsummary>Return a query handle.</fsummary>
<desc>
- <p>Returns a query handle. When evaluating the query handle
- <c><anno>QH2</anno></c> the answers to the query handle
+ <p>Returns a query handle. When evaluating query handle
+ <c><anno>QH2</anno></c>, the answers to query handle
<c><anno>QH1</anno></c> are sorted by <seealso
- marker="file_sorter">file_sorter:keysort/4</seealso>
+ marker="file_sorter#keysort/4"><c>file_sorter:keysort/4</c></seealso>
according to the options.</p>
-
- <p>The sorter will use temporary files only if
+ <p>The sorter uses temporary files only if
<c><anno>QH1</anno></c> does not evaluate to a list and the
size of the binary representation of the answers exceeds
- <c>Size</c> bytes, where <c>Size</c> is the value of the
- <c>size</c> option.</p>
-
+ <c>Size</c> bytes, where <c>Size</c> is the value of option
+ <c>size</c>.</p>
<p><c>keysort(<anno>KeyPos</anno>, <anno>QH1</anno>)</c>
is equivalent to
<c>keysort(<anno>KeyPos</anno>, <anno>QH1</anno>, [])</c>.</p>
@@ -941,10 +974,10 @@ end</pre>
<p>Returns some or all of the remaining answers to a query
cursor. Only the owner of <c><anno>QueryCursor</anno></c> can
retrieve answers.</p>
- <p>The optional argument <c>NumberOfAnswers</c>determines the
- maximum number of answers returned. The default value is
+ <p>Optional argument <c>NumberOfAnswers</c> determines the
+ maximum number of answers returned. Defaults to
<c>10</c>. If less than the requested number of answers is
- returned, subsequent calls to <c>next_answers</c> will
+ returned, subsequent calls to <c>next_answers</c>
return <c>[]</c>.</p>
</desc>
</func>
@@ -954,92 +987,87 @@ end</pre>
<name name="q" arity="2"/>
<fsummary>Return a handle for a query list comprehension.</fsummary>
<desc>
- <p><marker id="q"></marker>Returns a query handle for a query
- list comprehension. The query list comprehension must be the
- first argument to <c>qlc:q/1,2</c> or it will be evaluated
- as an ordinary list comprehension. It is also necessary to
- add the line</p>
-
+ <p>Returns a query handle for a QLC.
+ The QLC must be the first argument to this function, otherwise
+ it is evaluated as an ordinary list comprehension. It is also
+ necessary to add the following line to the source code:</p>
<code type="none">
-include_lib("stdlib/include/qlc.hrl").</code>
-
- <p>to the source file. This causes a parse transform to
- substitute a fun for the query list comprehension. The
- (compiled) fun will be called when the query handle is
- evaluated.</p>
-
- <p>When calling <c>qlc:q/1,2</c> from the Erlang shell the
- parse transform is automatically called. When this happens
- the fun substituted for the query list comprehension is not
- compiled but will be evaluated by <c>erl_eval(3)</c>. This
- is also true when expressions are evaluated by means of
+ <p>This causes a parse transform to substitute a fun for the QLC. The
+ (compiled) fun is called when the query handle is evaluated.</p>
+ <p>When calling <c>qlc:q/1,2</c> from the Erlang shell, the
+ parse transform is automatically called. When this occurs, the fun
+ substituted for the QLC is not compiled but is evaluated by
+ <seealso marker="erl_eval"><c>erl_eval(3)</c></seealso>. This
+ is also true when expressions are evaluated by
<c>file:eval/1,2</c> or in the debugger.</p>
-
- <p>To be very explicit, this will not work:</p>
-
+ <p>To be explicit, this does not work:</p>
<pre>
...
A = [X || {X} &lt;- [{1},{2}]],
QH = qlc:q(A),
...</pre>
-
- <p>The variable <c>A</c> will be bound to the evaluated value
+ <p>Variable <c>A</c> is bound to the evaluated value
of the list comprehension (<c>[1,2]</c>). The compiler
complains with an error message ("argument is not a query
list comprehension"); the shell process stops with a
<c>badarg</c> reason.</p>
-
<p><c>q(<anno>QLC</anno>)</c> is equivalent to
<c>q(<anno>QLC</anno>, [])</c>.</p>
-
- <p>The <c>{cache,&nbsp;ets}</c> option can be used to cache
- the answers to a query list comprehension. The answers are
- stored in one ETS table for each cached query list
- comprehension. When a cached query list comprehension is
- evaluated again, answers are fetched from the table without
- any further computations. As a consequence, when all answers
- to a cached query list comprehension have been found, the
- ETS tables used for caching answers to the query list
- comprehension's qualifiers can be emptied. The option
- <c>cache</c> is equivalent to <c>{cache,&nbsp;ets}</c>.</p>
-
- <p>The <c>{cache,&nbsp;list}</c> option can be used to cache
- the answers to a query list comprehension just like
- <c>{cache,&nbsp;ets}</c>. The difference is that the answers
- are kept in a list (on the process heap). If the answers
- would occupy more than a certain amount of RAM memory a
- temporary file is used for storing the answers. The option
- <c>max_list_size</c> sets the limit in bytes and the temporary
- file is put on the directory set by the <c>tmpdir</c> option.</p>
-
- <p>The <c>cache</c> option has no effect if it is known that
- the query list comprehension will be evaluated at most once.
- This is always true for the top-most query list
- comprehension and also for the list expression of the first
- generator in a list of qualifiers. Note that in the presence
- of side effects in filters or callback functions the answers
- to query list comprehensions can be affected by the
- <c>cache</c> option.</p>
-
- <p>The <c>{unique,&nbsp;true}</c> option can be used to remove
- duplicate answers to a query list comprehension. The unique
- answers are stored in one ETS table for each query list
- comprehension. The table is emptied every time it is known
- that there are no more answers to the query list
- comprehension. The option <c>unique</c> is equivalent to
- <c>{unique,&nbsp;true}</c>. If the <c>unique</c> option is
- combined with the <c>{cache,&nbsp;ets}</c> option, two ETS
- tables are used, but the full answers are stored in one
- table only. If the <c>unique</c> option is combined with the
- <c>{cache,&nbsp;list}</c> option the answers are sorted
- twice using <c>keysort/3</c>; once to remove duplicates, and
- once to restore the order.</p>
-
- <p>The <c>cache</c> and <c>unique</c> options apply not only
- to the query list comprehension itself but also to the
- results of looking up constants, running match
- specifications, and joining handles. </p>
-
+ <p>Options:</p>
+ <list type="bulleted">
+ <item>
+ <p>Option <c>{cache,&nbsp;ets}</c> can be used to cache
+ the answers to a QLC. The answers are stored in one ETS
+ table for each cached QLC. When a cached QLC is
+ evaluated again, answers are fetched from the table without
+ any further computations. Therefore, when all answers to a
+ cached QLC have been found, the ETS tables used for
+ caching answers to the qualifiers of the QLC can be emptied.
+ Option <c>cache</c> is equivalent to <c>{cache,&nbsp;ets}</c>.</p>
+ </item>
+ <item>
+ <p>Option <c>{cache,&nbsp;list}</c> can be used to cache
+ the answers to a QLC like
+ <c>{cache,&nbsp;ets}</c>. The difference is that the answers
+ are kept in a list (on the process heap). If the answers
+ would occupy more than a certain amount of RAM memory, a
+ temporary file is used for storing the answers. Option
+ <c>max_list_size</c> sets the limit in bytes and the temporary
+ file is put on the directory set by option <c>tmpdir</c>.</p>
+ <p>Option <c>cache</c> has no effect if it is known that
+ the QLC is to be evaluated at most once.
+ This is always true for the top-most QLC
+ and also for the list expression of the first
+ generator in a list of qualifiers. Notice that in the presence
+ of side effects in filters or callback functions, the answers
+ to QLCs can be affected by option <c>cache</c>.</p>
+ </item>
+ <item>
+ <p>Option <c>{unique,&nbsp;true}</c> can be used to remove
+ duplicate answers to a QLC. The unique
+ answers are stored in one ETS table for each QLC.
+ The table is emptied every time it is known
+ that there are no more answers to the QLC.
+ Option <c>unique</c> is equivalent to
+ <c>{unique,&nbsp;true}</c>. If option <c>unique</c> is
+ combined with option <c>{cache,&nbsp;ets}</c>, two ETS
+ tables are used, but the full answers are stored in one
+ table only. If option <c>unique</c> is combined with option
+ <c>{cache,&nbsp;list}</c>, the answers are sorted
+ twice using
+ <seealso marker="#keysort/3"><c>keysort/3</c></seealso>;
+ once to remove duplicates and once to restore the order.</p>
+ </item>
+ </list>
+ <p>Options <c>cache</c> and <c>unique</c> apply not only
+ to the QLC itself but also to the results of looking up constants,
+ running match specifications, and joining handles.</p>
+ <p><em>Example:</em></p>
+ <p>In the following example the cached results of the merge join are
+ traversed for each value of <c>A</c>. Notice that without option
+ <c>cache</c> the join would have been carried out
+ three times, once for each value of <c>A</c>.</p>
<pre>
1> <input>Q = qlc:q([{A,X,Z,W} ||</input>
<input>A &lt;- [a,b,c],</input>
@@ -1076,29 +1104,31 @@ begin
X =:= Y
])
end</pre>
-
- <p>In this example the cached results of the merge join are
- traversed for each value of <c>A</c>. Note that without the
- <c>cache</c> option the join would have been carried out
- three times, once for each value of <c>A</c></p>
-
- <p><c>sort/1,2</c> and <c>keysort/2,3</c> can also be used for
+ <p><seealso marker="#sort/1"><c>sort/1,2</c></seealso> and
+ <seealso marker="#keysort/2"><c>keysort/2,3</c></seealso>
+ can also be used for
caching answers and for removing duplicates. When sorting
answers are cached in a list, possibly stored on a temporary
file, and no ETS tables are used.</p>
-
<p>Sometimes (see <seealso
- marker="#lookup_fun">qlc:table/2</seealso> below) traversal
+ marker="#table/2"><c>table/2</c></seealso>) traversal
of tables can be done by looking up key values, which is
- assumed to be fast. Under certain (rare) circumstances it
- could happen that there are too many key values to look up.
- <marker id="max_lookup"></marker> The
- <c>{max_lookup,&nbsp;MaxLookup}</c> option can then be used
+ assumed to be fast. Under certain (rare) circumstances
+ there can be too many key values to look up.
+ <marker id="max_lookup"></marker>
+ Option <c>{max_lookup,&nbsp;MaxLookup}</c> can then be used
to limit the number of lookups: if more than
- <c>MaxLookup</c> lookups would be required no lookups are
- done but the table traversed instead. The default value is
- <c>infinity</c> which means that there is no limit on the
+ <c>MaxLookup</c> lookups would be required, no lookups are
+ done but the table is traversed instead. Defaults to
+ <c>infinity</c>, which means that there is no limit on the
number of keys to look up.</p>
+ <p><em>Example:</em></p>
+ <p>In the following example, using the <c>gb_table</c> module from
+ section <seealso marker="#implementing_a_qlc_table">Implementing a
+ QLC Table</seealso>, there are six keys to look up:
+ <c>{1,a}</c>, <c>{1,b}</c>, <c>{1,c}</c>, <c>{2,a}</c>,
+ <c>{2,b}</c>, and <c>{2,c}</c>. The reason is that the two
+ elements of key <c>{X,&nbsp;Y}</c> are compared separately.</p>
<pre>
1> <input>T = gb_trees:empty(),</input>
<input>QH = qlc:q([X || {{X,Y},_} &lt;- gb_table:table(T),</input>
@@ -1119,39 +1149,41 @@ ets:match_spec_run(
end,
[{1,a},{1,b},{1,c},{2,a},{2,b},{2,c}]),
ets:match_spec_compile([{{{'$1','$2'},'_'},[],['$1']}]))</pre>
-
- <p>In this example using the <c>gb_table</c> module from the
- <seealso marker="#implementing_a_qlc_table">Implementing a
- QLC table</seealso> section there are six keys to look up:
- <c>{1,a}</c>, <c>{1,b}</c>, <c>{1,c}</c>, <c>{2,a}</c>,
- <c>{2,b}</c>, and <c>{2,c}</c>. The reason is that the two
- elements of the key {X,&nbsp;Y} are compared separately.</p>
-
- <p>The <c>{lookup,&nbsp;true}</c> option can be used to ensure
- that the <c>qlc</c> module will look up constants in some
- QLC table. If there
- are more than one QLC table among the generators' list
- expressions, constants have to be looked up in at least one
- of the tables. The evaluation of the query fails if there
- are no constants to look up. This option is useful in
- situations when it would be unacceptable to traverse all
- objects in some table. Setting the <c>lookup</c> option to
- <c>false</c> ensures that no constants will be looked up
- (<c>{max_lookup,&nbsp;0}</c> has the same effect). The
- default value is <c>any</c> which means that constants will
- be looked up whenever possible.</p>
-
- <p>The <c>{join,&nbsp;Join}</c> option can be used to ensure
- that a certain join method will be used:
- <c>{join,&nbsp;lookup}</c> invokes the lookup join method;
- <c>{join,&nbsp;merge}</c> invokes the merge join method; and
- <c>{join,&nbsp;nested_loop}</c> invokes the method of
- matching every pair of objects from two handles. The last
- method is mostly very slow. The evaluation of the query
- fails if the <c>qlc</c> module cannot carry out the chosen
- join method. The
- default value is <c>any</c> which means that some fast join
- method will be used if possible.</p>
+ <p>Options:</p>
+ <list type="bulleted">
+ <item>
+ <p>Option <c>{lookup,&nbsp;true}</c> can be used to ensure
+ that the <c>qlc</c> module looks up constants in some
+ QLC table. If there are more than one QLC table among the
+ list expressions of the generators,
+ constants must be looked up in at least one
+ of the tables. The evaluation of the query fails if there
+ are no constants to look up. This option is useful
+ when it would be unacceptable to traverse all
+ objects in some table. Setting option <c>lookup</c> to
+ <c>false</c> ensures that no constants are looked up
+ (<c>{max_lookup,&nbsp;0}</c> has the same effect).
+ Defaults to <c>any</c>, which means that constants are
+ looked up whenever possible.</p>
+ </item>
+ <item>
+ <p>Option <c>{join,&nbsp;Join}</c> can be used to ensure
+ that a certain join method is used:</p>
+ <list type="bulleted">
+ <item><c>{join,&nbsp;lookup}</c> invokes the lookup join
+ method.</item>
+ <item><c>{join,&nbsp;merge}</c> invokes the merge join
+ method.</item>
+ <item><c>{join,&nbsp;nested_loop}</c> invokes the method of
+ matching every pair of objects from two handles. This
+ method is mostly very slow.</item>
+ </list>
+ <p>The evaluation of the query fails if the <c>qlc</c> module
+ cannot carry out the chosen join method. Defaults to
+ <c>any</c>, which means that some fast join
+ method is used if possible.</p>
+ </item>
+ </list>
</desc>
</func>
@@ -1160,21 +1192,18 @@ ets:match_spec_run(
<name name="sort" arity="2"/>
<fsummary>Return a query handle.</fsummary>
<desc>
- <p>Returns a query handle. When evaluating the query handle
- <c><anno>QH2</anno></c> the answers to the query handle
+ <p>Returns a query handle. When evaluating query handle
+ <c><anno>QH2</anno></c>, the answers to query handle
<c><anno>QH1</anno></c> are sorted by <seealso
- marker="file_sorter">file_sorter:sort/3</seealso> according
- to the options.</p>
-
- <p>The sorter will use temporary files only if
+ marker="file_sorter#sort/3"><c>file_sorter:sort/3</c></seealso>
+ according to the options.</p>
+ <p>The sorter uses temporary files only if
<c><anno>QH1</anno></c> does not evaluate to a list and the
size of the binary representation of the answers exceeds
- <c>Size</c> bytes, where <c>Size</c> is the value of the
- <c>size</c> option.</p>
-
+ <c>Size</c> bytes, where <c>Size</c> is the value of option
+ <c>size</c>.</p>
<p><c>sort(<anno>QH1</anno>)</c> is equivalent to
<c>sort(<anno>QH1</anno>, [])</c>.</p>
-
</desc>
</func>
@@ -1184,31 +1213,27 @@ ets:match_spec_run(
<name name="string_to_handle" arity="3"/>
<fsummary>Return a handle for a query list comprehension.</fsummary>
<desc>
- <p>A string version of <c>qlc:q/1,2</c>. When the query handle
- is evaluated the fun created by the parse transform is
- interpreted by <c>erl_eval(3)</c>. The query string is to be
- one single query list comprehension terminated by a
- period.</p>
-
+ <p>A string version of <seealso marker="#q/1"><c>q/1,2</c></seealso>.
+ When the query handle is evaluated, the fun created by the parse
+ transform is interpreted by
+ <seealso marker="erl_eval"><c>erl_eval(3)</c></seealso>.
+ The query string is to be one single QLC terminated by a period.</p>
+ <p><em>Example:</em></p>
<pre>
1> <input>L = [1,2,3],</input>
<input>Bs = erl_eval:add_binding('L', L, erl_eval:new_bindings()),</input>
<input>QH = qlc:string_to_handle("[X+1 || X &lt;- L].", [], Bs),</input>
<input>qlc:eval(QH).</input>
[2,3,4]</pre>
-
<p><c>string_to_handle(<anno>QueryString</anno>)</c>
is equivalent to
<c>string_to_handle(<anno>QueryString</anno>, [])</c>.</p>
-
<p><c>string_to_handle(<anno>QueryString</anno>,
- <anno>Options</anno>)</c>
- is equivalent to
+ <anno>Options</anno>)</c> is equivalent to
<c>string_to_handle(<anno>QueryString</anno>,
<anno>Options</anno>, erl_eval:new_bindings())</c>.</p>
-
- <p>This function is probably useful mostly when called from
- outside of Erlang, for instance from a driver written in C.</p>
+ <p>This function is probably mainly useful when called from
+ outside of Erlang, for example from a driver written in C.</p>
</desc>
</func>
@@ -1216,199 +1241,222 @@ ets:match_spec_run(
<name name="table" arity="2"/>
<fsummary>Return a query handle for a table.</fsummary>
<desc>
- <p><marker id="table"></marker>Returns a query handle for a
- QLC table. In Erlang/OTP there is support for ETS, Dets and
- Mnesia tables, but it is also possible to turn many other
- data structures into QLC tables. The way to accomplish this
- is to let function(s) in the module implementing the data
- structure create a query handle by calling
- <c>qlc:table/2</c>. The different ways to traverse the table
- as well as properties of the table are handled by callback
+ <p>Returns a query handle for a QLC table.
+ In Erlang/OTP there is support for ETS, Dets, and
+ Mnesia tables, but many other data structures can be turned
+ into QLC tables. This is accomplished by letting function(s) in the
+ module implementing the data structure create a query handle by
+ calling <c>qlc:table/2</c>. The different ways to traverse the table
+ and properties of the table are handled by callback
functions provided as options to <c>qlc:table/2</c>.</p>
-
- <p>The callback function <c><anno>TraverseFun</anno></c> is
- used for traversing the table. It is to return a list of
- objects terminated by either <c>[]</c> or a nullary fun to
- be used for traversing the not yet traversed objects of the
- table. Any other return value is immediately returned as
- value of the query evaluation. Unary
- <c><anno>TraverseFun</anno></c>s are to accept a match
- specification as argument. The match specification is
- created by the parse transform by analyzing the pattern of
- the generator calling <c>qlc:table/2</c> and filters using
- variables introduced in the pattern. If the parse transform
- cannot find a match specification equivalent to the pattern
- and filters, <c><anno>TraverseFun</anno></c> will be called
- with a match specification returning every object. Modules
- that can utilize match specifications for optimized
- traversal of tables should call <c>qlc:table/2</c> with a
- unary
- <c><anno>TraverseFun</anno></c> while other modules can
- provide a nullary
- <c><anno>TraverseFun</anno></c>. <c>ets:table/2</c> is an
- example of the former; <c>gb_table:table/1</c> in the
- <seealso marker="#implementing_a_qlc_table">Implementing a
- QLC table</seealso> section is an example of the latter.</p>
-
- <p><c><anno>PreFun</anno></c> is a unary callback function
- that is called once before the table is read for the first
- time. If the call fails, the query evaluation fails.
- Similarly, the nullary callback function
- <c><anno>PostFun</anno></c> is called once after the table
- was last read. The return value, which is caught, is
- ignored. If <c><anno>PreFun</anno></c> has been called for a
- table,
- <c><anno>PostFun</anno></c> is guaranteed to be called for
- that table, even if the evaluation of the query fails for
- some reason. The order in which pre (post) functions for
- different tables are evaluated is not specified. Other table
- access than reading, such as calling
- <c><anno>InfoFun</anno></c>, is assumed to be OK at any
- time. The argument <c><anno>PreArgs</anno></c> is a list of
- tagged values. Currently there are two tags,
- <c>parent_value</c> and <c>stop_fun</c>, used by Mnesia for
- managing transactions. The value of <c>parent_value</c> is
- the value returned by <c><anno>ParentFun</anno></c>, or
- <c>undefined</c> if there is no <c>ParentFun</c>.
- <c><anno>ParentFun</anno></c> is called once just before the
- call of
- <c><anno>PreFun</anno></c> in the context of the process
- calling
- <c>eval</c>, <c>fold</c>, or
- <c>cursor</c>. The value of <c>stop_fun</c> is a nullary fun
- that deletes the cursor if called from the parent, or
- <c>undefined</c> if there is no cursor.</p>
-
- <p><marker id="lookup_fun"></marker>The binary callback
- function <c><anno>LookupFun</anno></c> is used for looking
- up objects in the table. The first argument
- <c><anno>Position</anno></c> is the key position or an
- indexed position and the second argument
- <c><anno>Keys</anno></c> is a sorted list of unique values.
- The return value is to be a list of all objects (tuples)
- such that the element at <c>Position</c> is a member of
- <c><anno>Keys</anno></c>. Any other return value is
- immediately returned as value of the query evaluation.
- <c><anno>LookupFun</anno></c> is called instead of
- traversing the table if the parse transform at compile time
- can find out that the filters match and compare the element
- at <c><anno>Position</anno></c> in such a way that only
- <c><anno>Keys</anno></c> need to be looked up in order to
- find all potential answers. The key position is obtained by
- calling
- <c><anno>InfoFun</anno>(keypos)</c> and the indexed
- positions by calling
- <c><anno>InfoFun</anno>(indices)</c>. If the key position
- can be used for lookup it is always chosen, otherwise the
- indexed position requiring the least number of lookups is
- chosen. If there is a tie between two indexed positions the
- one occurring first in the list returned by
- <c><anno>InfoFun</anno></c> is chosen. Positions requiring
- more than <seealso marker="#max_lookup">max_lookup</seealso>
- lookups are ignored.</p>
-
- <p>The unary callback function <c><anno>InfoFun</anno></c> is
- to return information about the table. <c>undefined</c>
- should be returned if the value of some tag is unknown:</p>
-
<list type="bulleted">
- <item><c>indices</c>. Returns a list of indexed
- positions, a list of positive integers.
- </item>
- <item><c>is_unique_objects</c>. Returns <c>true</c> if
- the objects returned by <c>TraverseFun</c> are unique.
+ <item>
+ <p>Callback function <c><anno>TraverseFun</anno></c> is
+ used for traversing the table. It is to return a list of
+ objects terminated by either <c>[]</c> or a nullary fun to
+ be used for traversing the not yet traversed objects of the
+ table. Any other return value is immediately returned as
+ value of the query evaluation. Unary
+ <c><anno>TraverseFun</anno></c>s are to accept a match
+ specification as argument. The match specification is
+ created by the parse transform by analyzing the pattern of
+ the generator calling <c>qlc:table/2</c> and filters using
+ variables introduced in the pattern. If the parse transform
+ cannot find a match specification equivalent to the pattern
+ and filters, <c><anno>TraverseFun</anno></c> is called
+ with a match specification returning every object.</p>
+ <list type="bulleted">
+ <item>
+ <p>Modules that can use match specifications for optimized
+ traversal of tables are to call <c>qlc:table/2</c> with an unary
+ <c><anno>TraverseFun</anno></c>. An example is
+ <seealso marker="ets#table/2">
+ <c>ets:table/2</c></seealso>.</p>
+ </item>
+ <item>
+ <p>Other modules can provide a nullary
+ <c><anno>TraverseFun</anno></c>. An example is
+ <c>gb_table:table/1</c> in section
+ <seealso marker="#implementing_a_qlc_table">Implementing a
+ QLC Table</seealso>.</p>
+ </item>
+ </list>
</item>
- <item><c>keypos</c>. Returns the position of the table's
- key, a positive integer.
+ <item>
+ <p>Unary callback function <c><anno>PreFun</anno></c> is
+ called once before the table is read for the first time.
+ If the call fails, the query evaluation fails.</p>
+ <p>Argument <c><anno>PreArgs</anno></c> is a list of tagged values.
+ There are two tags, <c>parent_value</c> and <c>stop_fun</c>, used
+ by Mnesia for managing transactions.</p>
+ <list type="bulleted">
+ <item>
+ <p>The value of <c>parent_value</c> is
+ the value returned by <c><anno>ParentFun</anno></c>, or
+ <c>undefined</c> if there is no <c>ParentFun</c>.
+ <c><anno>ParentFun</anno></c> is called once just before the
+ call of <c><anno>PreFun</anno></c> in the context of the
+ process calling
+ <seealso marker="#eval/1"><c>eval/1,2</c></seealso>,
+ <seealso marker="#fold/3"><c>fold/3,4</c></seealso>, or
+ <seealso marker="#cursor/1"><c>cursor/1,2</c></seealso>.
+ </p>
+ </item>
+ <item>
+ <p>The value of <c>stop_fun</c> is a nullary fun
+ that deletes the cursor if called from the parent, or
+ <c>undefined</c> if there is no cursor.</p>
+ </item>
+ </list>
</item>
- <item><c>is_sorted_key</c>. Returns <c>true</c> if
- the objects returned by <c>TraverseFun</c> are sorted
- on the key.
+ <item>
+ <p>Nullary callback function
+ <c><anno>PostFun</anno></c> is called once after the table
+ was last read. The return value, which is caught, is ignored.
+ If <c><anno>PreFun</anno></c> has been called for a table,
+ <c><anno>PostFun</anno></c> is guaranteed to be called for
+ that table, even if the evaluation of the query fails for
+ some reason.</p>
+ <p>The pre (post) functions for different tables are evaluated in
+ unspecified order.</p>
+ <p>Other table access than reading, such as calling
+ <c><anno>InfoFun</anno></c>, is assumed to be OK at any time.</p>
</item>
- <item><c>num_of_objects</c>. Returns the number of
- objects in the table, a non-negative integer.
+ <item>
+ <p><marker id="lookup_fun"></marker>Binary callback
+ function <c><anno>LookupFun</anno></c> is used for looking
+ up objects in the table. The first argument
+ <c><anno>Position</anno></c> is the key position or an
+ indexed position and the second argument
+ <c><anno>Keys</anno></c> is a sorted list of unique values.
+ The return value is to be a list of all objects (tuples),
+ such that the element at <c>Position</c> is a member of
+ <c><anno>Keys</anno></c>. Any other return value is
+ immediately returned as value of the query evaluation.
+ <c><anno>LookupFun</anno></c> is called instead of
+ traversing the table if the parse transform at compile time
+ can determine that the filters match and compare the element
+ at <c><anno>Position</anno></c> in such a way that only
+ <c><anno>Keys</anno></c> need to be looked up to
+ find all potential answers.</p>
+ <p>The key position is obtained by calling
+ <c><anno>InfoFun</anno>(keypos)</c> and the indexed
+ positions by calling
+ <c><anno>InfoFun</anno>(indices)</c>. If the key position
+ can be used for lookup, it is always chosen, otherwise the
+ indexed position requiring the least number of lookups is
+ chosen. If there is a tie between two indexed positions, the
+ one occurring first in the list returned by
+ <c><anno>InfoFun</anno></c> is chosen. Positions requiring
+ more than <seealso marker="#max_lookup">max_lookup</seealso>
+ lookups are ignored.</p>
</item>
- </list>
-
- <p>The unary callback function <c><anno>FormatFun</anno></c>
- is used by <seealso marker="#info">qlc:info/1,2</seealso>
- for displaying the call that created the table's query
- handle. The default value, <c>undefined</c>, means that
- <c>info/1,2</c> displays a call to <c>'$MOD':'$FUN'/0</c>.
- It is up to <c><anno>FormatFun</anno></c> to present the
- selected objects of the table in a suitable way. However, if
- a character list is chosen for presentation it must be an
- Erlang expression that can be scanned and parsed (a trailing
- dot will be added by <c>qlc:info</c> though).
- <c><anno>FormatFun</anno></c> is called with an argument
- that describes the selected objects based on optimizations
- done as a result of analyzing the filters of the QLC where
- the call to
- <c>qlc:table/2</c> occurs. The possible values of the
- argument are:</p>
-
- <list type="bulleted">
- <item><c>{lookup, Position, Keys, NElements, DepthFun}</c>.
- <c>LookupFun</c> is used for looking up objects in the
- table.
+ <item>
+ <p>Unary callback function <c><anno>InfoFun</anno></c> is
+ to return information about the table. <c>undefined</c>
+ is to be returned if the value of some tag is unknown:</p>
+ <taglist>
+ <tag><c>indices</c></tag>
+ <item>Returns a list of indexed positions, a list of positive
+ integers.</item>
+ <tag><c>is_unique_objects</c></tag>
+ <item>Returns <c>true</c> if the objects returned by
+ <c>TraverseFun</c> are unique.
+ </item>
+ <tag><c>keypos</c></tag>
+ <item>Returns the position of the table key, a positive integer.
+ </item>
+ <tag><c>is_sorted_key</c></tag>
+ <item>Returns <c>true</c> if the objects returned by
+ <c>TraverseFun</c> are sorted on the key.
+ </item>
+ <tag><c>num_of_objects</c></tag>
+ <item>Returns the number of objects in the table, a non-negative
+ integer.
+ </item>
+ </taglist>
</item>
- <item><c>{match_spec, MatchExpression}</c>. No way of
- finding all possible answers by looking up keys was
- found, but the filters could be transformed into a
- match specification. All answers are found by calling
- <c>TraverseFun(MatchExpression)</c>.
+ <item>
+ <p>Unary callback function <c><anno>FormatFun</anno></c>
+ is used by <seealso marker="#info/1"><c>info/1,2</c></seealso>
+ for displaying the call that created the query handle of the
+ table. Defaults to <c>undefined</c>, which means that
+ <c>info/1,2</c> displays a call to <c>'$MOD':'$FUN'/0</c>.
+ It is up to <c><anno>FormatFun</anno></c> to present the
+ selected objects of the table in a suitable way. However, if
+ a character list is chosen for presentation, it must be an
+ Erlang expression that can be scanned and parsed (a trailing
+ dot is added by <c>info/1,2</c> though).</p>
+ <p><c><anno>FormatFun</anno></c> is called with an argument
+ that describes the selected objects based on optimizations
+ done as a result of analyzing the filters of the QLC where
+ the call to <c>qlc:table/2</c> occurs. The argument can have the
+ following values:</p>
+ <taglist>
+ <tag><c>{lookup, Position, Keys, NElements, DepthFun}</c>.</tag>
+ <item>
+ <p><c>LookupFun</c> is used for looking up objects in the
+ table.</p>
+ </item>
+ <tag><c>{match_spec, MatchExpression}</c></tag>
+ <item>
+ <p>No way of finding all possible answers by looking up keys
+ was found, but the filters could be transformed into a
+ match specification. All answers are found by calling
+ <c>TraverseFun(MatchExpression)</c>.</p>
+ </item>
+ <tag><c>{all, NElements, DepthFun}</c></tag>
+ <item>
+ <p>No optimization was found. A match specification matching
+ all objects is used if <c>TraverseFun</c> is unary.</p>
+ <p><c>NElements</c> is the value of the <c>info/1,2</c> option
+ <c>n_elements</c>.</p>
+ <p><c>DepthFun</c> is a function that can be used for
+ limiting the size of terms; calling
+ <c>DepthFun(Term)</c> substitutes <c>'...'</c> for
+ parts of <c>Term</c> below the depth specified by the
+ <c>info/1,2</c> option <c>depth</c>.</p>
+ <p>If calling <c><anno>FormatFun</anno></c> with an
+ argument including <c>NElements</c> and
+ <c>DepthFun</c> fails, <c><anno>FormatFun</anno></c>
+ is called once again with an argument excluding
+ <c>NElements</c> and <c>DepthFun</c>
+ (<c>{lookup,&nbsp;Position,&nbsp;Keys}</c> or
+ <c>all</c>).</p>
+ </item>
+ </taglist>
</item>
- <item><c>{all, NElements, DepthFun}</c>. No optimization was
- found. A match specification matching all objects will be
- used if <c>TraverseFun</c> is unary.
+ <item><p><marker id="key_equality"></marker>The value of option
+ <c>key_equality</c> is to be <c>'=:='</c> if the table
+ considers two keys equal if they match, and to be
+ <c>'=='</c> if two keys are equal if they compare equal.
+ Defaults to <c>'=:='</c>.</p>
</item>
</list>
-
- <p><c>NElements</c> is the value of the <c>info/1,2</c> option
- <c>n_elements</c>, and <c>DepthFun</c> is a function that
- can be used for limiting the size of terms; calling
- <c>DepthFun(Term)</c> substitutes <c>'...'</c> for parts of
- <c>Term</c> below the depth specified by the <c>info/1,2</c>
- option <c>depth</c>. If calling
- <c><anno>FormatFun</anno></c> with an argument including
- <c>NElements</c> and <c>DepthFun</c> fails,
- <c><anno>FormatFun</anno></c> is called once again with an
- argument excluding
- <c>NElements</c> and <c>DepthFun</c>
- (<c>{lookup,&nbsp;Position,&nbsp;Keys}</c> or
- <c>all</c>).</p>
-
- <p><marker id="key_equality"></marker>The value of
- <c>key_equality</c> is to be <c>'=:='</c> if the table
- considers two keys equal if they match, and to be
- <c>'=='</c> if two keys are equal if they compare equal. The
- default is <c>'=:='</c>.</p>
-
- <p>See <seealso marker="ets#qlc_table">ets(3)</seealso>,
- <seealso marker="dets#qlc_table">dets(3)</seealso> and
- <seealso marker="mnesia:mnesia#qlc_table">mnesia(3)</seealso>
- for the various options recognized by <c>table/1,2</c> in
- respective module.</p>
+ <p>For the various options recognized by <c>table/1,2</c>
+ in respective module, see
+ <seealso marker="ets#table/1"><c>ets(3)</c></seealso>,
+ <seealso marker="dets#table/1"><c>dets(3)</c></seealso>, and
+ <seealso marker="mnesia:mnesia#table/1"><c>mnesia(3)</c></seealso>.
+ </p>
</desc>
</func>
-
</funcs>
<section>
<title>See Also</title>
- <p><seealso marker="dets">dets(3)</seealso>,
+ <p><seealso marker="dets"><c>dets(3)</c></seealso>,
+ <seealso marker="erl_eval"><c>erl_eval(3)</c></seealso>,
+ <seealso marker="erts:erlang"><c>erlang(3)</c></seealso>,
+ <seealso marker="kernel:error_logger"><c>error_logger(3)</c></seealso>,
+ <seealso marker="ets"><c>ets(3)</c></seealso>,
+ <seealso marker="kernel:file"><c>file(3)</c></seealso>,
+ <seealso marker="file_sorter"><c>file_sorter(3)</c></seealso>,
+ <seealso marker="mnesia:mnesia"><c>mnesia(3)</c></seealso>,
+ <seealso marker="shell"><c>shell(3)</c></seealso>,
<seealso marker="doc/reference_manual:users_guide">
- Erlang Reference Manual</seealso>,
- <seealso marker="erl_eval">erl_eval(3)</seealso>,
- <seealso marker="erts:erlang">erlang(3)</seealso>,
- <seealso marker="ets">ets(3)</seealso>,
- <seealso marker="kernel:file">file(3)</seealso>,
- <seealso marker="error_logger:file">error_logger(3)</seealso>,
- <seealso marker="file_sorter">file_sorter(3)</seealso>,
- <seealso marker="mnesia:mnesia">mnesia(3)</seealso>,
+ Erlang Reference Manual</seealso>,
<seealso marker="doc/programming_examples:users_guide">
- Programming Examples</seealso>,
- <seealso marker="shell">shell(3)</seealso></p>
+ Programming Examples</seealso></p>
</section>
</erlref>
-
diff --git a/lib/stdlib/doc/src/queue.xml b/lib/stdlib/doc/src/queue.xml
index e1a96f5c65..9f3aff03a3 100644
--- a/lib/stdlib/doc/src/queue.xml
+++ b/lib/stdlib/doc/src/queue.xml
@@ -28,63 +28,74 @@
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-15</date>
+ <date>1997-01-15</date>
<rev>B</rev>
- <file>queue.sgml</file>
+ <file>queue.xml</file>
</header>
<module>queue</module>
- <modulesummary>Abstract Data Type for FIFO Queues</modulesummary>
+ <modulesummary>Abstract data type for FIFO queues.</modulesummary>
<description>
- <p>This module implements (double ended) FIFO queues
+ <p>This module provides (double-ended) FIFO queues
in an efficient manner.</p>
+
<p>All functions fail with reason <c>badarg</c> if arguments
- are of wrong type, for example queue arguments are not
- queues, indexes are not integers, list arguments are
+ are of wrong type, for example, queue arguments are not
+ queues, indexes are not integers, and list arguments are
not lists. Improper lists cause internal crashes.
An index out of range for a queue also causes
a failure with reason <c>badarg</c>.</p>
+
<p>Some functions, where noted, fail with reason <c>empty</c>
for an empty queue.</p>
+
<p>The data representing a queue as used by this module
- should be regarded as opaque by other modules. Any code
+ is to be regarded as opaque by other modules. Any code
assuming knowledge of the format is running on thin ice.</p>
+
<p>All operations has an amortized O(1) running time, except
- <c>len/1</c>, <c>join/2</c>, <c>split/2</c>, <c>filter/2</c>
- and <c>member/2</c> that have O(n).
+ <seealso marker="#filter/2"><c>filter/2</c></seealso>,
+ <seealso marker="#join/2"><c>join/2</c></seealso>,
+ <seealso marker="#len/1"><c>len/1</c></seealso>,
+ <seealso marker="#member/2"><c>member/2</c></seealso>,
+ <seealso marker="#split/2"><c>split/2</c></seealso> that have O(n).
To minimize the size of a queue minimizing
the amount of garbage built by queue operations, the queues
do not contain explicit length information, and that is
why <c>len/1</c> is O(n). If better performance for this
particular operation is essential, it is easy for
the caller to keep track of the length.</p>
- <p>Queues are double ended. The mental picture of
+
+ <p>Queues are double-ended. The mental picture of
a queue is a line of people (items) waiting for
their turn. The queue front is the end with the item
that has waited the longest. The queue rear is the end
an item enters when it starts to wait. If instead using
the mental picture of a list, the front is called head
and the rear is called tail.</p>
+
<p>Entering at the front and exiting at the rear
are reverse operations on the queue.</p>
- <p>The module has several sets of interface functions. The
- "Original API", the "Extended API" and the "Okasaki API".</p>
+
+ <p>This module has three sets of interface functions: the
+ "Original API", the "Extended API", and the "Okasaki API".</p>
+
<p>The "Original API" and the "Extended API" both use the
- mental picture of a waiting line of items. Both also
+ mental picture of a waiting line of items. Both
have reverse operations suffixed "_r".</p>
+
<p>The "Original API" item removal functions return compound
terms with both the removed item and the resulting queue.
- The "Extended API" contain alternative functions that build
- less garbage as well as functions for just inspecting the
+ The "Extended API" contains alternative functions that build
+ less garbage and functions for just inspecting the
queue ends. Also the "Okasaki API" functions build less garbage.</p>
- <p>The "Okasaki API" is inspired by "Purely Functional Data structures"
+
+ <p>The "Okasaki API" is inspired by "Purely Functional Data Structures"
by Chris Okasaki. It regards queues as lists.
- The API is by many regarded as strange and avoidable.
- For example many reverse operations have lexically reversed names,
+ This API is by many regarded as strange and avoidable.
+ For example, many reverse operations have lexically reversed names,
some with more readable but perhaps less understandable aliases.</p>
</description>
-
-
<section>
<title>Original API</title>
</section>
@@ -92,7 +103,8 @@
<datatypes>
<datatype>
<name name="queue" n_vars="1"/>
- <desc><p>As returned by <c>new/0</c>.</p></desc>
+ <desc><p>As returned by
+ <seealso marker="#new/0"><c>new/0</c></seealso>.</p></desc>
</datatype>
<datatype>
<name name="queue" n_vars="0"/>
@@ -101,205 +113,229 @@
<funcs>
<func>
- <name name="new" arity="0"/>
- <fsummary>Create an empty queue</fsummary>
+ <name name="filter" arity="2"/>
+ <fsummary>Filter a queue.</fsummary>
<desc>
- <p>Returns an empty queue.</p>
+ <p>Returns a queue <c><anno>Q2</anno></c> that is the result of calling
+ <c><anno>Fun</anno>(<anno>Item</anno>)</c> on all items in
+ <c><anno>Q1</anno></c>, in order from front to rear.</p>
+ <p>If <c><anno>Fun</anno>(<anno>Item</anno>)</c> returns <c>true</c>,
+ <c>Item</c> is copied to the result queue. If it returns <c>false</c>,
+ <c><anno>Item</anno></c> is not copied. If it returns a list,
+ the list elements are inserted instead of <c>Item</c> in the
+ result queue.</p>
+ <p>So, <c><anno>Fun</anno>(<anno>Item</anno>)</c> returning
+ <c>[<anno>Item</anno>]</c> is thereby
+ semantically equivalent to returning <c>true</c>, just
+ as returning <c>[]</c> is semantically equivalent to
+ returning <c>false</c>. But returning a list builds
+ more garbage than returning an atom.</p>
</desc>
</func>
+
<func>
- <name name="is_queue" arity="1"/>
- <fsummary>Test if a term is a queue</fsummary>
+ <name name="from_list" arity="1"/>
+ <fsummary>Convert a list to a queue.</fsummary>
<desc>
- <p>Tests if <c><anno>Term</anno></c> is a queue and returns <c>true</c> if so and
- <c>false</c> otherwise.</p>
+ <p>Returns a queue containing the items in <c><anno>L</anno></c> in the
+ same order; the head item of the list becomes the front
+ item of the queue.</p>
</desc>
</func>
+
<func>
- <name name="is_empty" arity="1"/>
- <fsummary>Test if a queue is empty</fsummary>
+ <name name="in" arity="2"/>
+ <fsummary>Insert an item at the rear of a queue.</fsummary>
<desc>
- <p>Tests if <c><anno>Q</anno></c> is empty and returns <c>true</c> if so and
- <c>false</c> otherwise.</p>
+ <p>Inserts <c><anno>Item</anno></c> at the rear of queue
+ <c><anno>Q1</anno></c>.
+ Returns the resulting queue <c><anno>Q2</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="len" arity="1"/>
- <fsummary>Get the length of a queue</fsummary>
+ <name name="in_r" arity="2"/>
+ <fsummary>Insert an item at the front of a queue.</fsummary>
<desc>
- <p>Calculates and returns the length of queue <c><anno>Q</anno></c>.</p>
+ <p>Inserts <c><anno>Item</anno></c> at the front of queue
+ <c><anno>Q1</anno></c>.
+ Returns the resulting queue <c><anno>Q2</anno></c>.</p>
</desc>
</func>
<func>
- <name name="in" arity="2"/>
- <fsummary>Insert an item at the rear of a queue</fsummary>
+ <name name="is_empty" arity="1"/>
+ <fsummary>Test if a queue is empty.</fsummary>
<desc>
- <p>Inserts <c><anno>Item</anno></c> at the rear of queue <c><anno>Q1</anno></c>.
- Returns the resulting queue <c><anno>Q2</anno></c>.</p>
+ <p>Tests if <c><anno>Q</anno></c> is empty and returns <c>true</c> if
+ so, otherwise otherwise.</p>
</desc>
</func>
+
<func>
- <name name="in_r" arity="2"/>
- <fsummary>Insert an item at the front of a queue</fsummary>
+ <name name="is_queue" arity="1"/>
+ <fsummary>Test if a term is a queue.</fsummary>
<desc>
- <p>Inserts <c><anno>Item</anno></c> at the front of queue <c><anno>Q1</anno></c>.
- Returns the resulting queue <c><anno>Q2</anno></c>.</p>
+ <p>Tests if <c><anno>Term</anno></c> is a queue and returns <c>true</c>
+ if so, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="out" arity="1"/>
- <fsummary>Remove the front item from a queue</fsummary>
+ <name name="join" arity="2"/>
+ <fsummary>Join two queues.</fsummary>
<desc>
- <p>Removes the item at the front of queue <c><anno>Q1</anno></c>. Returns the
- tuple <c>{{value, <anno>Item</anno>}, <anno>Q2</anno>}</c>, where <c><anno>Item</anno></c> is the
- item removed and <c><anno>Q2</anno></c> is the resulting queue. If <c><anno>Q1</anno></c> is
- empty, the tuple <c>{empty, <anno>Q1</anno>}</c> is returned.</p>
+ <p>Returns a queue <c><anno>Q3</anno></c> that is the result of joining
+ <c><anno>Q1</anno></c> and <c><anno>Q2</anno></c> with
+ <c><anno>Q1</anno></c> in front of <c><anno>Q2</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="out_r" arity="1"/>
- <fsummary>Remove the rear item from a queue</fsummary>
+ <name name="len" arity="1"/>
+ <fsummary>Get the length of a queue.</fsummary>
<desc>
- <p>Removes the item at the rear of the queue <c><anno>Q1</anno></c>. Returns the
- tuple <c>{{value, <anno>Item</anno>}, <anno>Q2</anno>}</c>, where <c><anno>Item</anno></c> is the
- item removed and <c><anno>Q2</anno></c> is the new queue. If <c><anno>Q1</anno></c> is
- empty, the tuple <c>{empty, <anno>Q1</anno>}</c> is returned. </p>
+ <p>Calculates and returns the length of queue <c><anno>Q</anno></c>.</p>
</desc>
</func>
<func>
- <name name="from_list" arity="1"/>
- <fsummary>Convert a list to a queue</fsummary>
+ <name name="member" arity="2"/>
+ <fsummary>Test if an item is in a queue.</fsummary>
<desc>
- <p>Returns a queue containing the items in <c><anno>L</anno></c> in the
- same order; the head item of the list will become the front
- item of the queue.</p>
+ <p>Returns <c>true</c> if <c><anno>Item</anno></c> matches some element
+ in <c><anno>Q</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="to_list" arity="1"/>
- <fsummary>Convert a queue to a list</fsummary>
+ <name name="new" arity="0"/>
+ <fsummary>Create an empty queue.</fsummary>
<desc>
- <p>Returns a list of the items in the queue in the same order;
- the front item of the queue will become the head of the list.</p>
+ <p>Returns an empty queue.</p>
</desc>
</func>
<func>
- <name name="reverse" arity="1"/>
- <fsummary>Reverse a queue</fsummary>
+ <name name="out" arity="1"/>
+ <fsummary>Remove the front item from a queue.</fsummary>
<desc>
- <p>Returns a queue <c><anno>Q2</anno></c> that contains the items of
- <c><anno>Q1</anno></c> in the reverse order.</p>
+ <p>Removes the item at the front of queue <c><anno>Q1</anno></c>.
+ Returns tuple <c>{{value, <anno>Item</anno>}, <anno>Q2</anno>}</c>,
+ where <c><anno>Item</anno></c> is the item removed and
+ <c><anno>Q2</anno></c> is the resulting queue. If
+ <c><anno>Q1</anno></c> is empty, tuple
+ <c>{empty, <anno>Q1</anno>}</c> is returned.</p>
</desc>
</func>
+
<func>
- <name name="split" arity="2"/>
- <fsummary>Split a queue in two</fsummary>
+ <name name="out_r" arity="1"/>
+ <fsummary>Remove the rear item from a queue.</fsummary>
<desc>
- <p>Splits <c><anno>Q1</anno></c> in two. The <c><anno>N</anno></c> front items
- are put in <c><anno>Q2</anno></c> and the rest in <c><anno>Q3</anno></c></p>
+ <p>Removes the item at the rear of queue <c><anno>Q1</anno></c>.
+ Returns tuple <c>{{value, <anno>Item</anno>}, <anno>Q2</anno>}</c>,
+ where <c><anno>Item</anno></c> is the item removed and
+ <c><anno>Q2</anno></c> is the new queue. If <c><anno>Q1</anno></c> is
+ empty, tuple <c>{empty, <anno>Q1</anno>}</c> is returned.</p>
</desc>
</func>
+
<func>
- <name name="join" arity="2"/>
- <fsummary>Join two queues</fsummary>
+ <name name="reverse" arity="1"/>
+ <fsummary>Reverse a queue.</fsummary>
<desc>
- <p>Returns a queue <c><anno>Q3</anno></c> that is the result of joining
- <c><anno>Q1</anno></c> and <c><anno>Q2</anno></c> with <c><anno>Q1</anno></c> in front of
- <c><anno>Q2</anno></c>.</p>
+ <p>Returns a queue <c><anno>Q2</anno></c> containing the items of
+ <c><anno>Q1</anno></c> in the reverse order.</p>
</desc>
</func>
+
<func>
- <name name="filter" arity="2"/>
- <fsummary>Filter a queue</fsummary>
+ <name name="split" arity="2"/>
+ <fsummary>Split a queue in two.</fsummary>
<desc>
- <p>Returns a queue <c><anno>Q2</anno></c> that is the result of calling
- <c><anno>Fun</anno>(<anno>Item</anno>)</c> on all items in <c><anno>Q1</anno></c>,
- in order from front to rear.</p>
- <p>If <c><anno>Fun</anno>(<anno>Item</anno>)</c> returns <c>true</c>, <c>Item</c>
- is copied to the result queue. If it returns <c>false</c>,
- <c><anno>Item</anno></c> is not copied. If it returns a list
- the list elements are inserted instead of <c>Item</c> in the
- result queue.</p>
- <p>So, <c><anno>Fun</anno>(<anno>Item</anno>)</c> returning <c>[<anno>Item</anno>]</c> is thereby
- semantically equivalent to returning <c>true</c>, just
- as returning <c>[]</c> is semantically equivalent to
- returning <c>false</c>. But returning a list builds
- more garbage than returning an atom.</p>
+ <p>Splits <c><anno>Q1</anno></c> in two. The <c><anno>N</anno></c>
+ front items are put in <c><anno>Q2</anno></c> and the rest in
+ <c><anno>Q3</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="member" arity="2"/>
- <fsummary>Test if an item is in a queue</fsummary>
+ <name name="to_list" arity="1"/>
+ <fsummary>Convert a queue to a list.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Item</anno></c> matches some element
- in <c><anno>Q</anno></c>, otherwise <c>false</c>.</p>
+ <p>Returns a list of the items in the queue in the same order;
+ the front item of the queue becomes the head of the list.</p>
</desc>
</func>
</funcs>
-
-
<section>
<title>Extended API</title>
</section>
<funcs>
<func>
- <name name="get" arity="1"/>
- <fsummary>Return the front item of a queue</fsummary>
- <desc>
- <p>Returns <c><anno>Item</anno></c> at the front of queue <c><anno>Q</anno></c>.</p>
- <p>Fails with reason <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
- </desc>
- </func>
- <func>
- <name name="get_r" arity="1"/>
- <fsummary>Return the rear item of a queue</fsummary>
- <desc>
- <p>Returns <c><anno>Item</anno></c> at the rear of queue <c><anno>Q</anno></c>.</p>
- <p>Fails with reason <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
- </desc>
- </func>
- <func>
<name name="drop" arity="1"/>
- <fsummary>Remove the front item from a queue</fsummary>
+ <fsummary>Remove the front item from a queue.</fsummary>
<desc>
<p>Returns a queue <c><anno>Q2</anno></c> that is the result of removing
the front item from <c><anno>Q1</anno></c>.</p>
<p>Fails with reason <c>empty</c> if <c><anno>Q1</anno></c> is empty.</p>
</desc>
</func>
+
<func>
<name name="drop_r" arity="1"/>
- <fsummary>Remove the rear item from a queue</fsummary>
+ <fsummary>Remove the rear item from a queue.</fsummary>
<desc>
<p>Returns a queue <c><anno>Q2</anno></c> that is the result of removing
the rear item from <c><anno>Q1</anno></c>.</p>
<p>Fails with reason <c>empty</c> if <c><anno>Q1</anno></c> is empty.</p>
</desc>
</func>
+
+ <func>
+ <name name="get" arity="1"/>
+ <fsummary>Return the front item of a queue.</fsummary>
+ <desc>
+ <p>Returns <c><anno>Item</anno></c> at the front of queue
+ <c><anno>Q</anno></c>.</p>
+ <p>Fails with reason <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="get_r" arity="1"/>
+ <fsummary>Return the rear item of a queue.</fsummary>
+ <desc>
+ <p>Returns <c><anno>Item</anno></c> at the rear of queue
+ <c><anno>Q</anno></c>.</p>
+ <p>Fails with reason <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
+ </desc>
+ </func>
+
<func>
<name name="peek" arity="1"/>
- <fsummary>Return the front item of a queue</fsummary>
+ <fsummary>Return the front item of a queue.</fsummary>
<desc>
- <p>Returns the tuple <c>{value, <anno>Item</anno>}</c> where <c><anno>Item</anno></c> is the
- front item of <c><anno>Q</anno></c>, or <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
+ <p>Returns tuple <c>{value, <anno>Item</anno>}</c>, where
+ <c><anno>Item</anno></c> is the front item of <c><anno>Q</anno></c>,
+ or <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
</desc>
</func>
+
<func>
<name name="peek_r" arity="1"/>
- <fsummary>Return the rear item of a queue</fsummary>
+ <fsummary>Return the rear item of a queue.</fsummary>
<desc>
- <p>Returns the tuple <c>{value, <anno>Item</anno>}</c> where <c><anno>Item</anno></c> is the
- rear item of <c><anno>Q</anno></c>, or <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
+ <p>Returns tuple <c>{value, <anno>Item</anno>}</c>, where
+ <c><anno>Item</anno></c> is the rear item of <c><anno>Q</anno></c>,
+ or <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
</desc>
</func>
</funcs>
-
<section>
<title>Okasaki API</title>
</section>
@@ -307,58 +343,92 @@
<funcs>
<func>
<name name="cons" arity="2"/>
- <fsummary>Insert an item at the head of a queue</fsummary>
+ <fsummary>Insert an item at the head of a queue.</fsummary>
<desc>
- <p>Inserts <c><anno>Item</anno></c> at the head of queue <c><anno>Q1</anno></c>. Returns
+ <p>Inserts <c><anno>Item</anno></c> at the head of queue
+ <c><anno>Q1</anno></c>. Returns
the new queue <c><anno>Q2</anno></c>.</p>
</desc>
</func>
+
+ <func>
+ <name name="daeh" arity="1"/>
+ <fsummary>Return the tail item of a queue.</fsummary>
+ <desc>
+ <p>Returns the tail item of queue <c><anno>Q</anno></c>.</p>
+ <p>Fails with reason <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
+ </desc>
+ </func>
+
<func>
<name name="head" arity="1"/>
- <fsummary>Return the item at the head of a queue</fsummary>
+ <fsummary>Return the item at the head of a queue.</fsummary>
<desc>
- <p>Returns <c><anno>Item</anno></c> from the head of queue <c><anno>Q</anno></c>.</p>
+ <p>Returns <c><anno>Item</anno></c> from the head of queue
+ <c><anno>Q</anno></c>.</p>
<p>Fails with reason <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
</desc>
</func>
+
<func>
- <name name="tail" arity="1"/>
- <fsummary>Remove the head item from a queue</fsummary>
+ <name name="init" arity="1"/>
+ <fsummary>Remove the tail item from a queue.</fsummary>
<desc>
<p>Returns a queue <c><anno>Q2</anno></c> that is the result of removing
- the head item from <c><anno>Q1</anno></c>.</p>
+ the tail item from <c><anno>Q1</anno></c>.</p>
<p>Fails with reason <c>empty</c> if <c><anno>Q1</anno></c> is empty.</p>
</desc>
</func>
+
<func>
- <name name="snoc" arity="2"/>
- <fsummary>Insert an item at the tail of a queue</fsummary>
+ <name name="lait" arity="1"/>
+ <fsummary>Remove the tail item from a queue.</fsummary>
<desc>
- <p>Inserts <c><anno>Item</anno></c> as the tail item of queue <c><anno>Q1</anno></c>. Returns
- the new queue <c><anno>Q2</anno></c>.</p>
+ <p>Returns a queue <c><anno>Q2</anno></c> that is the result of removing
+ the tail item from <c><anno>Q1</anno></c>.</p>
+ <p>Fails with reason <c>empty</c> if <c><anno>Q1</anno></c> is empty.</p>
+ <p>The name <c>lait/1</c> is a misspelling - do not use it anymore.</p>
</desc>
</func>
+
<func>
- <name name="daeh" arity="1"/>
<name name="last" arity="1"/>
- <fsummary>Return the tail item of a queue</fsummary>
+ <fsummary>Return the tail item of a queue.</fsummary>
<desc>
<p>Returns the tail item of queue <c><anno>Q</anno></c>.</p>
<p>Fails with reason <c>empty</c> if <c><anno>Q</anno></c> is empty.</p>
</desc>
</func>
+
<func>
<name name="liat" arity="1"/>
- <name name="init" arity="1"/>
- <name name="lait" arity="1"/>
- <fsummary>Remove the tail item from a queue</fsummary>
+ <fsummary>Remove the tail item from a queue.</fsummary>
<desc>
<p>Returns a queue <c><anno>Q2</anno></c> that is the result of removing
the tail item from <c><anno>Q1</anno></c>.</p>
<p>Fails with reason <c>empty</c> if <c><anno>Q1</anno></c> is empty.</p>
- <p>The name <c>lait/1</c> is a misspelling - do not use it anymore.</p>
</desc>
</func>
- </funcs>
+ <func>
+ <name name="snoc" arity="2"/>
+ <fsummary>Insert an item at the tail of a queue.</fsummary>
+ <desc>
+ <p>Inserts <c><anno>Item</anno></c> as the tail item of queue
+ <c><anno>Q1</anno></c>. Returns
+ the new queue <c><anno>Q2</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="tail" arity="1"/>
+ <fsummary>Remove the head item from a queue.</fsummary>
+ <desc>
+ <p>Returns a queue <c><anno>Q2</anno></c> that is the result of removing
+ the head item from <c><anno>Q1</anno></c>.</p>
+ <p>Fails with reason <c>empty</c> if <c><anno>Q1</anno></c> is empty.</p>
+ </desc>
+ </func>
+ </funcs>
</erlref>
+
diff --git a/lib/stdlib/doc/src/rand.xml b/lib/stdlib/doc/src/rand.xml
index 50057259c6..1dcc3de000 100644
--- a/lib/stdlib/doc/src/rand.xml
+++ b/lib/stdlib/doc/src/rand.xml
@@ -33,215 +33,231 @@
<file>rand.xml</file>
</header>
<module>rand</module>
- <modulesummary>Pseudo random number generation</modulesummary>
+ <modulesummary>Pseudo random number generation.</modulesummary>
<description>
- <p>Random number generator.</p>
-
- <p>The module contains several different algorithms and can be
- extended with more in the future. The current uniform
- distribution algorithms uses the
- <url href="http://xorshift.di.unimi.it">
- scrambled Xorshift algorithms by Sebastiano Vigna</url> and the
- normal distribution algorithm uses the
- <url href="http://www.jstatsoft.org/v05/i08">
- Ziggurat Method by Marsaglia and Tsang</url>.
- </p>
-
- <p>The implemented algorithms are:</p>
+ <p>This module provides a random number generator. The module contains
+ a number of algorithms. The uniform distribution algorithms use the
+ <url href="http://xorshift.di.unimi.it">scrambled Xorshift algorithms by
+ Sebastiano Vigna</url>. The normal distribution algorithm uses the
+ <url href="http://www.jstatsoft.org/v05/i08">Ziggurat Method by Marsaglia
+ and Tsang</url>.</p>
+
+ <p>The following algorithms are provided:</p>
+
<taglist>
- <tag><c>exsplus</c></tag> <item>Xorshift116+, 58 bits precision and period of 2^116-1.</item>
- <tag><c>exs64</c></tag> <item>Xorshift64*, 64 bits precision and a period of 2^64-1.</item>
- <tag><c>exs1024</c></tag> <item>Xorshift1024*, 64 bits precision and a period of 2^1024-1.</item>
+ <tag><c>exsplus</c></tag>
+ <item>
+ <p>Xorshift116+, 58 bits precision and period of 2^116-1</p>
+ </item>
+ <tag><c>exs64</c></tag>
+ <item>
+ <p>Xorshift64*, 64 bits precision and a period of 2^64-1</p>
+ </item>
+ <tag><c>exs1024</c></tag>
+ <item>
+ <p>Xorshift1024*, 64 bits precision and a period of 2^1024-1</p>
+ </item>
</taglist>
- <p>The current default algorithm is <c>exsplus</c>. The default
- may change in future. If a specific algorithm is required make
- sure to always use <seealso marker="#seed-1">seed/1</seealso>
- to initialize the state.
- </p>
+ <p>The default algorithm is <c>exsplus</c>. If a specific algorithm is
+ required, ensure to always use <seealso marker="#seed-1">
+ <c>seed/1</c></seealso> to initialize the state.</p>
<p>Every time a random number is requested, a state is used to
- calculate it and a new state produced. The state can either be
- implicit or it can be an explicit argument and return value.
- </p>
+ calculate it and a new state is produced. The state can either be
+ implicit or be an explicit argument and return value.</p>
<p>The functions with implicit state use the process dictionary
- variable <c>rand_seed</c> to remember the current state.</p>
+ variable <c>rand_seed</c> to remember the current state.</p>
+
+ <p>If a process calls
+ <seealso marker="#uniform-0"><c>uniform/0</c></seealso> or
+ <seealso marker="#uniform-1"><c>uniform/1</c></seealso> without
+ setting a seed first, <seealso marker="#seed-1"><c>seed/1</c></seealso>
+ is called automatically with the default algorithm and creates a
+ non-constant seed.</p>
+
+ <p>The functions with explicit state never use the process dictionary.</p>
+
+ <p><em>Examples:</em></p>
+
+ <p>Simple use; creates and seeds the default algorithm
+ with a non-constant seed if not already done:</p>
+
+ <pre>
+R0 = rand:uniform(),
+R1 = rand:uniform(),</pre>
- <p>If a process calls <seealso marker="#uniform-0">uniform/0</seealso> or
- <seealso marker="#uniform-1">uniform/1</seealso> without
- setting a seed first, <seealso marker="#seed-1">seed/1</seealso>
- is called automatically with the default algorithm and creates a
- non-constant seed.</p>
+ <p>Use a specified algorithm:</p>
- <p>The functions with explicit state never use the process
- dictionary.</p>
+ <pre>
+_ = rand:seed(exs1024),
+R2 = rand:uniform(),</pre>
+
+ <p>Use a specified algorithm with a constant seed:</p>
- <p>Examples:</p>
<pre>
- %% Simple usage. Creates and seeds the default algorithm
- %% with a non-constant seed if not already done.
- R0 = rand:uniform(),
- R1 = rand:uniform(),
-
- %% Use a given algorithm.
- _ = rand:seed(exs1024),
- R2 = rand:uniform(),
-
- %% Use a given algorithm with a constant seed.
- _ = rand:seed(exs1024, {123, 123534, 345345}),
- R3 = rand:uniform(),
-
- %% Use the functional api with non-constant seed.
- S0 = rand:seed_s(exsplus),
- {R4, S1} = rand:uniform_s(S0),
-
- %% Create a standard normal deviate.
- {SND0, S2} = rand:normal_s(S1),
- </pre>
-
- <note><p>This random number generator is not cryptographically
- strong. If a strong cryptographic random number generator is
- needed, use one of functions in the
- <seealso marker="crypto:crypto">crypto</seealso>
- module, for example <c>crypto:strong_rand_bytes/1</c>.</p></note>
+_ = rand:seed(exs1024, {123, 123534, 345345}),
+R3 = rand:uniform(),</pre>
+
+ <p>Use the functional API with a non-constant seed:</p>
+
+ <pre>
+S0 = rand:seed_s(exsplus),
+{R4, S1} = rand:uniform_s(S0),</pre>
+
+ <p>Create a standard normal deviate:</p>
+
+ <pre>
+{SND0, S2} = rand:normal_s(S1),</pre>
+
+ <note>
+ <p>This random number generator is not cryptographically
+ strong. If a strong cryptographic random number generator is
+ needed, use one of functions in the
+ <seealso marker="crypto:crypto"><c>crypto</c></seealso>
+ module, for example, <seealso marker="crypto:crypto">
+ <c>crypto:strong_rand_bytes/1</c></seealso>.</p>
+ </note>
+
</description>
<datatypes>
<datatype>
<name name="alg"/>
</datatype>
-
<datatype>
<name name="state"/>
- <desc><p>Algorithm dependent state.</p></desc>
+ <desc><p>Algorithm-dependent state.</p></desc>
</datatype>
-
<datatype>
<name name="export_state"/>
- <desc><p>Algorithm dependent state which can be printed or saved to file.</p></desc>
+ <desc><p>Algorithm-dependent state that can be printed or saved to
+ file.</p></desc>
</datatype>
</datatypes>
<funcs>
<func>
- <name name="seed" arity="1"/>
- <fsummary>Seed random number generator</fsummary>
- <desc>
- <marker id="seed-1"/>
- <p>Seeds random number generation with the given algorithm and time dependent
- data if <anno>AlgOrExpState</anno> is an algorithm.</p>
- <p>Otherwise recreates the exported seed in the process
- dictionary, and returns the state.
- <em>See also:</em> <seealso marker="#export_seed-0">export_seed/0</seealso>.</p>
+ <name name="export_seed" arity="0"/>
+ <fsummary>Export the random number generation state.</fsummary>
+ <desc><marker id="export_seed-0"/>
+ <p>Returns the random number state in an external format.
+ To be used with <seealso marker="#seed-1"><c>seed/1</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="seed_s" arity="1"/>
- <fsummary>Seed random number generator</fsummary>
- <desc>
- <p>Seeds random number generation with the given algorithm and time dependent
- data if <anno>AlgOrExpState</anno> is an algorithm.</p>
- <p>Otherwise recreates the exported seed and returns the state.
- <em>See also:</em> <seealso marker="#export_seed-0">export_seed/0</seealso>.</p>
+ <name name="export_seed_s" arity="1"/>
+ <fsummary>Export the random number generation state.</fsummary>
+ <desc><marker id="export_seed_s-1"/>
+ <p>Returns the random number generator state in an external format.
+ To be used with <seealso marker="#seed-1"><c>seed/1</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="seed" arity="2"/>
- <fsummary>Seed the random number generation</fsummary>
+ <name name="normal" arity="0"/>
+ <fsummary>Return a standard normal distributed random float.</fsummary>
<desc>
- <p>Seeds random number generation with the given algorithm and
- integers in the process dictionary and returns
- the state.</p>
+ <p>Returns a standard normal deviate float (that is, the mean
+ is 0 and the standard deviation is 1) and updates the state in
+ the process dictionary.</p>
</desc>
</func>
+
<func>
- <name name="seed_s" arity="2"/>
- <fsummary>Seed the random number generation</fsummary>
+ <name name="normal_s" arity="1"/>
+ <fsummary>Return a standard normal distributed random float.</fsummary>
<desc>
- <p>Seeds random number generation with the given algorithm and
- integers and returns the state.</p>
+ <p>Returns, for a specified state, a standard normal
+ deviate float (that is, the mean is 0 and the standard
+ deviation is 1) and a new state.</p>
</desc>
</func>
<func>
- <name name="export_seed" arity="0"/>
- <fsummary>Export the random number generation state</fsummary>
- <desc><marker id="export_seed-0"/>
- <p>Returns the random number state in an external format.
- To be used with <seealso marker="#seed-1">seed/1</seealso>.</p>
+ <name name="seed" arity="1"/>
+ <fsummary>Seed random number generator.</fsummary>
+ <desc>
+ <marker id="seed-1"/>
+ <p>Seeds random number generation with the specifed algorithm and
+ time-dependent data if <anno>AlgOrExpState</anno> is an algorithm.</p>
+ <p>Otherwise recreates the exported seed in the process dictionary,
+ and returns the state. See also
+ <seealso marker="#export_seed-0"><c>export_seed/0</c></seealso>.</p>
</desc>
</func>
<func>
- <name name="export_seed_s" arity="1"/>
- <fsummary>Export the random number generation state</fsummary>
- <desc><marker id="export_seed_s-1"/>
- <p>Returns the random number generator state in an external format.
- To be used with <seealso marker="#seed-1">seed/1</seealso>.</p>
+ <name name="seed" arity="2"/>
+ <fsummary>Seed the random number generation.</fsummary>
+ <desc>
+ <p>Seeds random number generation with the specified algorithm and
+ integers in the process dictionary and returns the state.</p>
</desc>
</func>
<func>
- <name name="uniform" arity="0"/>
- <fsummary>Return a random float</fsummary>
+ <name name="seed_s" arity="1"/>
+ <fsummary>Seed random number generator.</fsummary>
<desc>
- <marker id="uniform-0"/>
- <p>Returns a random float uniformly distributed in the value
- range <c>0.0 &lt; <anno>X</anno> &lt; 1.0 </c> and
- updates the state in the process dictionary.</p>
+ <p>Seeds random number generation with the specifed algorithm and
+ time-dependent data if <anno>AlgOrExpState</anno> is an algorithm.</p>
+ <p>Otherwise recreates the exported seed and returns the state.
+ See also <seealso marker="#export_seed-0">
+ <c>export_seed/0</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="uniform_s" arity="1"/>
- <fsummary>Return a random float</fsummary>
+ <name name="seed_s" arity="2"/>
+ <fsummary>Seed the random number generation.</fsummary>
<desc>
- <p>Given a state, <c>uniform_s/1</c> returns a random float
- uniformly distributed in the value range <c>0.0 &lt;
- <anno>X</anno> &lt; 1.0</c> and a new state.</p>
+ <p>Seeds random number generation with the specified algorithm and
+ integers and returns the state.</p>
</desc>
</func>
<func>
- <name name="uniform" arity="1"/>
- <fsummary>Return a random integer</fsummary>
- <desc>
- <marker id="uniform-1"/>
- <p>Given an integer <c><anno>N</anno> >= 1</c>,
- <c>uniform/1</c> returns a random integer uniformly
- distributed in the value range
- <c>1 &lt;= <anno>X</anno> &lt;= <anno>N</anno></c> and
- updates the state in the process dictionary.</p>
+ <name name="uniform" arity="0"/>
+ <fsummary>Return a random float.</fsummary>
+ <desc><marker id="uniform-0"/>
+ <p>Returns a random float uniformly distributed in the value
+ range <c>0.0 &lt; <anno>X</anno> &lt; 1.0</c> and
+ updates the state in the process dictionary.</p>
</desc>
</func>
+
<func>
- <name name="uniform_s" arity="2"/>
- <fsummary>Return a random integer</fsummary>
- <desc>
- <p>Given an integer <c><anno>N</anno> >= 1</c> and a state,
- <c>uniform_s/2</c> returns a random integer uniformly
- distributed in the value range <c>1 &lt;= <anno>X</anno> &lt;=
- <anno>N</anno></c> and a new state.</p>
+ <name name="uniform" arity="1"/>
+ <fsummary>Return a random integer.</fsummary>
+ <desc><marker id="uniform-1"/>
+ <p>Returns, for a specified integer <c><anno>N</anno> >= 1</c>,
+ a random integer uniformly distributed in the value range
+ <c>1 &lt;= <anno>X</anno> &lt;= <anno>N</anno></c> and
+ updates the state in the process dictionary.</p>
</desc>
</func>
<func>
- <name name="normal" arity="0"/>
- <fsummary>Return a standard normal distributed random float</fsummary>
+ <name name="uniform_s" arity="1"/>
+ <fsummary>Return a random float.</fsummary>
<desc>
- <p>Returns a standard normal deviate float (that is, the mean
- is 0 and the standard deviation is 1) and updates the state in
- the process dictionary.</p>
+ <p>Returns, for a specified state, random float
+ uniformly distributed in the value range <c>0.0 &lt;
+ <anno>X</anno> &lt; 1.0</c> and a new state.</p>
</desc>
</func>
+
<func>
- <name name="normal_s" arity="1"/>
- <fsummary>Return a standard normal distributed random float</fsummary>
+ <name name="uniform_s" arity="2"/>
+ <fsummary>Return a random integer.</fsummary>
<desc>
- <p>Given a state, <c>normal_s/1</c> returns a standard normal
- deviate float (that is, the mean is 0 and the standard
- deviation is 1) and a new state.</p>
+ <p>Returns, for a specified integer <c><anno>N</anno> >= 1</c>
+ and a state, a random integer uniformly distributed in the value
+ range <c>1 &lt;= <anno>X</anno> &lt;= <anno>N</anno></c> and a
+ new state.</p>
</desc>
</func>
-
</funcs>
</erlref>
diff --git a/lib/stdlib/doc/src/random.xml b/lib/stdlib/doc/src/random.xml
index dea4e43c95..8d090d20b3 100644
--- a/lib/stdlib/doc/src/random.xml
+++ b/lib/stdlib/doc/src/random.xml
@@ -24,116 +24,140 @@
<title>random</title>
<prepared>Joe Armstrong</prepared>
- <responsible>Bjarne Dacker</responsible>
+ <responsible>Bjarne D&auml;cker</responsible>
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>96-09-09</date>
+ <date>1996-09-09</date>
<rev>A</rev>
- <file>random.sgml</file>
+ <file>random.xml</file>
</header>
<module>random</module>
- <modulesummary>Pseudo random number generation</modulesummary>
+ <modulesummary>Pseudo-random number generation.</modulesummary>
<description>
- <p>Random number generator. The method is attributed to
- B.A. Wichmann and I.D.Hill, in 'An efficient and portable
+ <p>This module provides a random number generator. The method is attributed
+ to B.A. Wichmann and I.D. Hill in 'An efficient and portable
pseudo-random number generator', Journal of Applied
- Statistics. AS183. 1982. Also Byte March 1987. </p>
- <p>The current algorithm is a modification of the version attributed
- to Richard A O'Keefe in the standard Prolog library.</p>
+ Statistics. AS183. 1982. Also Byte March 1987.</p>
+
+ <p>The algorithm is a modification of the version attributed
+ to Richard A. O'Keefe in the standard Prolog library.</p>
+
<p>Every time a random number is requested, a state is used to calculate
- it, and a new state produced. The state can either be implicit (kept
+ it, and a new state is produced. The state can either be implicit (kept
in the process dictionary) or be an explicit argument and return value.
In this implementation, the state (the type <c>ran()</c>) consists of a
tuple of three integers.</p>
- <p>It should be noted that this random number generator is not cryptographically
- strong. If a strong cryptographic random number generator is needed for
- example <c>crypto:strong_rand_bytes/1</c> could be used instead.</p>
- <note><p>The new and improved <seealso
- marker="stdlib:rand">rand</seealso> module should be used
- instead of this module.</p></note>
+
+ <note>
+ <p>This random number generator is not cryptographically
+ strong. If a strong cryptographic random number generator is
+ needed, use one of functions in the
+ <seealso marker="crypto:crypto"><c>crypto</c></seealso>
+ module, for example, <seealso marker="crypto:crypto">
+ <c>crypto:strong_rand_bytes/1</c></seealso>.</p>
+ </note>
+
+ <note>
+ <p>The improved <seealso marker="rand"><c>rand</c></seealso>
+ module is to be used instead of this module.</p>
+ </note>
</description>
+
<datatypes>
<datatype>
<name name="ran"/>
<desc><p>The state.</p></desc>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="seed" arity="0"/>
- <fsummary>Seeds random number generation with default values</fsummary>
+ <fsummary>Seed random number generation with default values.</fsummary>
<desc>
<p>Seeds random number generation with default (fixed) values
- in the process dictionary, and returns the old state.</p>
+ in the process dictionary and returns the old state.</p>
</desc>
</func>
+
+ <func>
+ <name name="seed" arity="1"/>
+ <fsummary>Seed random number generator.</fsummary>
+ <desc>
+ <p><c>seed({<anno>A1</anno>, <anno>A2</anno>, <anno>A3</anno>})</c>
+ is equivalent to
+ <c>seed(<anno>A1</anno>, <anno>A2</anno>, <anno>A3</anno>)</c>.</p>
+ </desc>
+ </func>
+
<func>
<name name="seed" arity="3"/>
- <fsummary>Seeds random number generator</fsummary>
+ <fsummary>Seed random number generator.</fsummary>
<desc>
<p>Seeds random number generation with integer values in the process
- dictionary, and returns the old state.</p>
- <p>One easy way of obtaining a unique value to seed with is to:</p>
+ dictionary and returns the old state.</p>
+ <p>The following is an easy way of obtaining a unique value to seed
+ with:</p>
<code type="none">
random:seed(erlang:phash2([node()]),
erlang:monotonic_time(),
erlang:unique_integer())</code>
- <p>See <seealso marker="erts:erlang#phash2/1">
- erlang:phash2/1</seealso>, <seealso marker="erts:erlang#node/0">
- node/0</seealso>, <seealso marker="erts:erlang#monotonic_time/0">
- erlang:monotonic_time/0</seealso>, and
+ <p>For details, see
+ <seealso marker="erts:erlang#phash2/1">
+ <c>erlang:phash2/1</c></seealso>,
+ <seealso marker="erts:erlang#node/0">
+ <c>erlang:node/0</c></seealso>,
+ <seealso marker="erts:erlang#monotonic_time/0">
+ <c>erlang:monotonic_time/0</c></seealso>, and
<seealso marker="erts:erlang#unique_integer/0">
- erlang:unique_integer/0</seealso>) for details.</p>
- </desc>
- </func>
- <func>
- <name name="seed" arity="1"/>
- <fsummary>Seeds random number generator</fsummary>
- <desc>
- <p>
- <c>seed({<anno>A1</anno>, <anno>A2</anno>, <anno>A3</anno>})</c> is equivalent to <c>seed(<anno>A1</anno>, <anno>A2</anno>, <anno>A3</anno>)</c>.
- </p>
+ <c>erlang:unique_integer/0</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="seed0" arity="0"/>
- <fsummary>Return default state for random number generation</fsummary>
+ <fsummary>Return default state for random number generation.</fsummary>
<desc>
<p>Returns the default state.</p>
</desc>
</func>
+
<func>
<name name="uniform" arity="0"/>
- <fsummary>Return a random float</fsummary>
+ <fsummary>Return a random float.</fsummary>
<desc>
<p>Returns a random float uniformly distributed between <c>0.0</c>
and <c>1.0</c>, updating the state in the process dictionary.</p>
</desc>
</func>
+
<func>
<name name="uniform" arity="1"/>
- <fsummary>Return a random integer</fsummary>
+ <fsummary>Return a random integer.</fsummary>
<desc>
- <p>Given an integer <c><anno>N</anno> >= 1</c>, <c>uniform/1</c> returns a
- random integer uniformly distributed between <c>1</c> and
- <c><anno>N</anno></c>, updating the state in the process dictionary.</p>
+ <p>Returns, for a specified integer <c><anno>N</anno> >= 1</c>,
+ a random integer uniformly distributed between <c>1</c> and
+ <c><anno>N</anno></c>, updating the state in the process
+ dictionary.</p>
</desc>
</func>
+
<func>
<name name="uniform_s" arity="1"/>
- <fsummary>Return a random float</fsummary>
+ <fsummary>Return a random float.</fsummary>
<desc>
- <p>Given a state, <c>uniform_s/1</c>returns a random float uniformly
+ <p>Returns, for a specified state, a random float uniformly
distributed between <c>0.0</c> and <c>1.0</c>, and a new state.</p>
</desc>
</func>
+
<func>
<name name="uniform_s" arity="2"/>
- <fsummary>Return a random integer</fsummary>
+ <fsummary>Return a random integer.</fsummary>
<desc>
- <p>Given an integer <c><anno>N</anno> >= 1</c> and a state, <c>uniform_s/2</c>
- returns a random integer uniformly distributed between <c>1</c> and
+ <p>Returns, for a specified integer <c><anno>N</anno> >= 1</c> and a
+ state, a random integer uniformly distributed between <c>1</c> and
<c><anno>N</anno></c>, and a new state.</p>
</desc>
</func>
@@ -143,12 +167,18 @@ random:seed(erlang:phash2([node()]),
<title>Note</title>
<p>Some of the functions use the process dictionary variable
<c>random_seed</c> to remember the current seed.</p>
- <p>If a process calls <c>uniform/0</c> or <c>uniform/1</c> without
- setting a seed first, <c>seed/0</c> is called automatically.</p>
- <p>The implementation changed in R15. Upgrading to R15 will break
- applications that expect a specific output for a given seed. The output
- is still deterministic number series, but different compared to releases
- older than R15. The seed <c>{0,0,0}</c> will, for example, no longer
+
+ <p>If a process calls
+ <seealso marker="#uniform/0"><c>uniform/0</c></seealso> or
+ <seealso marker="#uniform/1"><c>uniform/1</c></seealso>
+ without setting a seed first,
+ <seealso marker="#seed/0"><c>seed/0</c></seealso>
+ is called automatically.</p>
+
+ <p>The implementation changed in Erlang/OTP R15. Upgrading to R15 breaks
+ applications that expect a specific output for a specified seed. The
+ output is still deterministic number series, but different compared to
+ releases older than R15. Seed <c>{0,0,0}</c> does, for example, no longer
produce a flawed series of only zeros.</p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/re.xml b/lib/stdlib/doc/src/re.xml
index fda79d51d5..7f4f0aa18c 100644
--- a/lib/stdlib/doc/src/re.xml
+++ b/lib/stdlib/doc/src/re.xml
@@ -35,39 +35,37 @@
<file>re.xml</file>
</header>
<module>re</module>
- <modulesummary>Perl like regular expressions for Erlang</modulesummary>
+ <modulesummary>Perl-like regular expressions for Erlang.</modulesummary>
<description>
-
<p>This module contains regular expression matching functions for
- strings and binaries.</p>
+ strings and binaries.</p>
<p>The <seealso marker="#regexp_syntax">regular expression</seealso>
- syntax and semantics resemble that of Perl.</p>
+ syntax and semantics resemble that of Perl.</p>
- <p>The library's matching algorithms are currently based on the
- PCRE library, but not all of the PCRE library is interfaced and
- some parts of the library go beyond what PCRE offers. The sections of
- the PCRE documentation which are relevant to this module are included
- here.</p>
+ <p>The matching algorithms of the library are based on the
+ PCRE library, but not all of the PCRE library is interfaced and
+ some parts of the library go beyond what PCRE offers. The sections of
+ the PCRE documentation that are relevant to this module are included
+ here.</p>
<note>
- <p>The Erlang literal syntax for strings uses the &quot;\&quot;
- (backslash) character as an escape code. You need to escape
- backslashes in literal strings, both in your code and in the shell,
- with an additional backslash, i.e.: &quot;\\&quot;.</p>
+ <p>The Erlang literal syntax for strings uses the &quot;\&quot;
+ (backslash) character as an escape code. You need to escape
+ backslashes in literal strings, both in your code and in the shell,
+ with an extra backslash, that is, &quot;\\&quot;.</p>
</note>
-
-
</description>
+
<datatypes>
<datatype>
<name name="mp"/>
<desc>
- <p>Opaque datatype containing a compiled regular expression.
- The mp() is guaranteed to be a tuple() having the atom
- 're_pattern' as its first element, to allow for matching in
- guards. The arity of the tuple() or the content of the other fields
- may change in future releases.</p>
+ <p>Opaque data type containing a compiled regular expression.
+ <c>mp()</c> is guaranteed to be a tuple() having the atom
+ <c>re_pattern</c> as its first element, to allow for matching in
+ guards. The arity of the tuple or the content of the other fields
+ can change in future Erlang/OTP releases.</p>
</desc>
</datatype>
<datatype>
@@ -77,6 +75,7 @@
<name name="compile_option"/>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="compile" arity="1"/>
@@ -85,90 +84,214 @@
<p>The same as <c>compile(<anno>Regexp</anno>,[])</c></p>
</desc>
</func>
+
<func>
<name name="compile" arity="2"/>
- <fsummary>Compile a regular expression into a match program</fsummary>
+ <fsummary>Compile a regular expression into a match program.</fsummary>
<desc>
- <p>This function compiles a regular expression with the syntax
- described below into an internal format to be used later as a
- parameter to the run/2,3 functions.</p>
- <p>Compiling the regular expression before matching is useful if
- the same expression is to be used in matching against multiple
- subjects during the program's lifetime. Compiling once and
- executing many times is far more efficient than compiling each
- time one wants to match.</p>
- <p>When the unicode option is given, the regular expression should be given as a valid Unicode <c>charlist()</c>, otherwise as any valid <c>iodata()</c>.</p>
-
- <p><marker id="compile_options"/>The options have the following meanings:</p>
- <taglist>
- <tag><c>unicode</c></tag>
- <item>The regular expression is given as a Unicode <c>charlist()</c> and the resulting regular expression code is to be run against a valid Unicode <c>charlist()</c> subject. Also consider the <c>ucp</c> option when using Unicode characters.</item>
- <tag><c>anchored</c></tag>
- <item>The pattern is forced to be "anchored", that is, it is constrained to match only at the first matching point in the string that is being searched (the "subject string"). This effect can also be achieved by appropriate constructs in the pattern itself.</item>
- <tag><c>caseless</c></tag>
- <item>Letters in the pattern match both upper and lower case letters. It is equivalent to Perl's /i option, and it can be changed within a pattern by a (?i) option setting. Uppercase and lowercase letters are defined as in the ISO-8859-1 character set.</item>
- <tag><c>dollar_endonly</c></tag>
- <item>A dollar metacharacter in the pattern matches only at the end of the subject string. Without this option, a dollar also matches immediately before a newline at the end of the string (but not before any other newlines). The <c>dollar_endonly</c> option is ignored if <c>multiline</c> is given. There is no equivalent option in Perl, and no way to set it within a pattern.</item>
- <tag><c>dotall</c></tag>
- <item>A dot in the pattern matches all characters, including those that indicate newline. Without it, a dot does not match when the current position is at a newline. This option is equivalent to Perl's /s option, and it can be changed within a pattern by a (?s) option setting. A negative class such as [^a] always matches newline characters, independent of this option's setting.</item>
- <tag><c>extended</c></tag>
- <item>Whitespace data characters in the pattern are ignored except when escaped or inside a character class. Whitespace does not include the VT character (ASCII 11). In addition, characters between an unescaped # outside a character class and the next newline, inclusive, are also ignored. This is equivalent to Perl's /x option, and it can be changed within a pattern by a (?x) option setting.
-
-This option makes it possible to include comments inside complicated patterns. Note, however, that this applies only to data characters. Whitespace characters may never appear within special character sequences in a pattern, for example within the sequence <c>(?(</c> which introduces a conditional subpattern.</item>
- <tag><c>firstline</c></tag>
- <item>An unanchored pattern is required to match before or at the first newline in the subject string, though the matched text may continue over the newline.</item>
- <tag><c>multiline</c></tag>
- <item><p>By default, PCRE treats the subject string as consisting of a single line of characters (even if it actually contains newlines). The "start of line" metacharacter (^) matches only at the start of the string, while the "end of line" metacharacter ($) matches only at the end of the string, or before a terminating newline (unless <c>dollar_endonly</c> is given). This is the same as Perl.</p>
-
-<p>When <c>multiline</c> is given, the "start of line" and "end of line" constructs match immediately following or immediately before internal newlines in the subject string, respectively, as well as at the very start and end. This is equivalent to Perl's /m option, and it can be changed within a pattern by a (?m) option setting. If there are no newlines in a subject string, or no occurrences of ^ or $ in a pattern, setting <c>multiline</c> has no effect.</p> </item>
- <tag><c>no_auto_capture</c></tag>
- <item>Disables the use of numbered capturing parentheses in the pattern. Any opening parenthesis that is not followed by ? behaves as if it were followed by ?: but named parentheses can still be used for capturing (and they acquire numbers in the usual way). There is no equivalent of this option in Perl.
-</item>
- <tag><c>dupnames</c></tag>
- <item>Names used to identify capturing subpatterns need not be unique. This can be helpful for certain types of pattern when it is known that only one instance of the named subpattern can ever be matched. There are more details of named subpatterns below</item>
- <tag><c>ungreedy</c></tag>
- <item>This option inverts the "greediness" of the quantifiers so that they are not greedy by default, but become greedy if followed by "?". It is not compatible with Perl. It can also be set by a (?U) option setting within the pattern.</item>
- <tag><c>{newline, NLSpec}</c></tag>
- <item>
- <p>Override the default definition of a newline in the subject string, which is LF (ASCII 10) in Erlang.</p>
- <taglist>
- <tag><c>cr</c></tag>
- <item>Newline is indicated by a single character CR (ASCII 13)</item>
- <tag><c>lf</c></tag>
- <item>Newline is indicated by a single character LF (ASCII 10), the default</item>
- <tag><c>crlf</c></tag>
- <item>Newline is indicated by the two-character CRLF (ASCII 13 followed by ASCII 10) sequence.</item>
- <tag><c>anycrlf</c></tag>
- <item>Any of the three preceding sequences should be recognized.</item>
- <tag><c>any</c></tag>
- <item>Any of the newline sequences above, plus the Unicode sequences VT (vertical tab, U+000B), FF (formfeed, U+000C), NEL (next line, U+0085), LS (line separator, U+2028), and PS (paragraph separator, U+2029). </item>
- </taglist>
- </item>
- <tag><c>bsr_anycrlf</c></tag>
- <item>Specifies specifically that \R is to match only the cr, lf or crlf sequences, not the Unicode specific newline characters.</item>
- <tag><c>bsr_unicode</c></tag>
- <item>Specifies specifically that \R is to match all the Unicode newline characters (including crlf etc, the default).</item>
- <tag><c>no_start_optimize</c></tag>
- <item>This option disables optimization that may malfunction if "Special start-of-pattern items" are present in the regular expression. A typical example would be when matching "DEFABC" against "(*COMMIT)ABC", where the start optimization of PCRE would skip the subject up to the "A" and would never realize that the (*COMMIT) instruction should have made the matching fail. This option is only relevant if you use "start-of-pattern items", as discussed in the section "PCRE regular expression details" below.</item>
- <tag><c>ucp</c></tag>
- <item>Specifies that Unicode Character Properties should be used when
- resolving \B, \b, \D, \d, \S, \s, \W and \w. Without this flag, only
- ISO-Latin-1 properties are used. Using Unicode properties hurts
- performance, but is semantically correct when working with Unicode
- characters beyond the ISO-Latin-1 range.</item>
- <tag><c>never_utf</c></tag>
- <item>Specifies that the (*UTF) and/or (*UTF8) "start-of-pattern items" are forbidden. This flag can not be combined with <c>unicode</c>. Useful if ISO-Latin-1 patterns from an external source are to be compiled.</item>
- </taglist>
- </desc>
+ <p>Compiles a regular expression, with the syntax
+ described below, into an internal format to be used later as a
+ parameter to
+ <seealso marker="#run/2"><c>run/2</c></seealso> and
+ <seealso marker="#run/3"><c>run/3</c></seealso>.</p>
+ <p>Compiling the regular expression before matching is useful if
+ the same expression is to be used in matching against multiple
+ subjects during the lifetime of the program. Compiling once and
+ executing many times is far more efficient than compiling each
+ time one wants to match.</p>
+ <p>When option <c>unicode</c> is specified, the regular expression
+ is to be specified as a valid Unicode <c>charlist()</c>, otherwise as
+ any valid <c>iodata()</c>.</p>
+ <marker id="compile_options"/>
+ <p>Options:</p>
+ <taglist>
+ <tag><c>unicode</c></tag>
+ <item>
+ <p>The regular expression is specified as a Unicode
+ <c>charlist()</c> and the resulting regular expression code is to
+ be run against a valid Unicode <c>charlist()</c> subject. Also
+ consider option <c>ucp</c> when using Unicode characters.</p>
+ </item>
+ <tag><c>anchored</c></tag>
+ <item>
+ <p>The pattern is forced to be "anchored", that is, it is
+ constrained to match only at the first matching point in the
+ string that is searched (the "subject string"). This effect can
+ also be achieved by appropriate constructs in the pattern
+ itself.</p>
+ </item>
+ <tag><c>caseless</c></tag>
+ <item>
+ <p>Letters in the pattern match both uppercase and lowercase
+ letters. It is equivalent to Perl option <c>/i</c> and can be
+ changed within a pattern by a <c>(?i)</c> option setting.
+ Uppercase and lowercase letters are defined as in the ISO 8859-1
+ character set.</p>
+ </item>
+ <tag><c>dollar_endonly</c></tag>
+ <item>
+ <p>A dollar metacharacter in the pattern matches only at the end of
+ the subject string. Without this option, a dollar also matches
+ immediately before a newline at the end of the string (but not
+ before any other newlines). This option is ignored if option
+ <c>multiline</c> is specified. There is no equivalent option in
+ Perl, and it cannot be set within a pattern.</p>
+ </item>
+ <tag><c>dotall</c></tag>
+ <item>
+ <p>A dot in the pattern matches all characters, including those
+ indicating newline. Without it, a dot does not match when the
+ current position is at a newline. This option is equivalent to
+ Perl option <c>/s</c> and it can be changed within a pattern by a
+ <c>(?s)</c> option setting. A negative class, such as <c>[^a]</c>,
+ always matches newline characters, independent of the setting of
+ this option.</p>
+ </item>
+ <tag><c>extended</c></tag>
+ <item>
+ <p>Whitespace data characters in the pattern are ignored except
+ when escaped or inside a character class. Whitespace does not
+ include character 'vt' (ASCII 11). Characters between an
+ unescaped <c>#</c> outside a character class and the next newline,
+ inclusive, are also ignored. This is equivalent to Perl option
+ <c>/x</c> and can be changed within a pattern by a <c>(?x)</c>
+ option setting.</p>
+ <p>With this option, comments inside complicated patterns can be
+ included. However, notice that this applies only to data
+ characters. Whitespace characters can never appear within special
+ character sequences in a pattern, for example within sequence
+ <c>(?(</c> that introduces a conditional subpattern.</p>
+ </item>
+ <tag><c>firstline</c></tag>
+ <item>
+ <p>An unanchored pattern is required to match before or at the first
+ newline in the subject string, although the matched text can
+ continue over the newline.</p>
+ </item>
+ <tag><c>multiline</c></tag>
+ <item>
+ <p>By default, PCRE treats the subject string as consisting of a
+ single line of characters (even if it contains newlines). The
+ "start of line" metacharacter (<c>^</c>) matches only at the
+ start of the string, while the "end of line" metacharacter
+ (<c>$</c>) matches only at the end of the string, or before a
+ terminating newline (unless option <c>dollar_endonly</c> is
+ specified). This is the same as in Perl.</p>
+ <p>When this option is specified, the "start of line" and "end of
+ line" constructs match immediately following or immediately
+ before internal newlines in the subject string, respectively, as
+ well as at the very start and end. This is equivalent to Perl
+ option <c>/m</c> and can be changed within a pattern by a
+ <c>(?m)</c> option setting. If there are no newlines in a subject
+ string, or no occurrences of <c>^</c> or <c>$</c> in a pattern,
+ setting <c>multiline</c> has no effect.</p> </item>
+ <tag><c>no_auto_capture</c></tag>
+ <item>
+ <p>Disables the use of numbered capturing parentheses in the
+ pattern. Any opening parenthesis that is not followed by <c>?</c>
+ behaves as if it is followed by <c>?:</c>. Named parentheses can
+ still be used for capturing (and they acquire numbers in the
+ usual way). There is no equivalent option in Perl.</p>
+ </item>
+ <tag><c>dupnames</c></tag>
+ <item>
+ <p>Names used to identify capturing subpatterns need not be unique.
+ This can be helpful for certain types of pattern when it is known
+ that only one instance of the named subpattern can ever be
+ matched. More details of named subpatterns are provided below.</p>
+ </item>
+ <tag><c>ungreedy</c></tag>
+ <item>
+ <p>Inverts the "greediness" of the quantifiers so that they are not
+ greedy by default, but become greedy if followed by "?". It is
+ not compatible with Perl. It can also be set by a <c>(?U)</c>
+ option setting within the pattern.</p>
+ </item>
+ <tag><c>{newline, NLSpec}</c></tag>
+ <item>
+ <p>Overrides the default definition of a newline in the subject
+ string, which is LF (ASCII 10) in Erlang.</p>
+ <taglist>
+ <tag><c>cr</c></tag>
+ <item>
+ <p>Newline is indicated by a single character <c>cr</c>
+ (ASCII 13).</p>
+ </item>
+ <tag><c>lf</c></tag>
+ <item>
+ <p>Newline is indicated by a single character LF (ASCII 10), the
+ default.</p>
+ </item>
+ <tag><c>crlf</c></tag>
+ <item>
+ <p>Newline is indicated by the two-character CRLF (ASCII 13
+ followed by ASCII 10) sequence.</p>
+ </item>
+ <tag><c>anycrlf</c></tag>
+ <item>
+ <p>Any of the three preceding sequences is to be recognized.</p>
+ </item>
+ <tag><c>any</c></tag>
+ <item>
+ <p>Any of the newline sequences above, and the Unicode sequences
+ VT (vertical tab, U+000B), FF (formfeed, U+000C), NEL (next
+ line, U+0085), LS (line separator, U+2028), and PS (paragraph
+ separator, U+2029).</p>
+ </item>
+ </taglist>
+ </item>
+ <tag><c>bsr_anycrlf</c></tag>
+ <item>
+ <p>Specifies specifically that \R is to match only the CR,
+ LF, or CRLF sequences, not the Unicode-specific newline
+ characters.</p>
+ </item>
+ <tag><c>bsr_unicode</c></tag>
+ <item>
+ <p>Specifies specifically that \R is to match all the Unicode
+ newline characters (including CRLF, and so on, the default).</p>
+ </item>
+ <tag><c>no_start_optimize</c></tag>
+ <item>
+ <p>Disables optimization that can malfunction if "Special
+ start-of-pattern items" are present in the regular expression. A
+ typical example would be when matching "DEFABC" against
+ "(*COMMIT)ABC", where the start optimization of PCRE would skip
+ the subject up to "A" and never realize that the (*COMMIT)
+ instruction is to have made the matching fail. This option is only
+ relevant if you use "start-of-pattern items", as discussed in
+ section <seealso marker="#regexp_syntax_details">PCRE Regular Expression
+ Details</seealso>.</p>
+ </item>
+ <tag><c>ucp</c></tag>
+ <item>
+ <p>Specifies that Unicode character properties are to be used when
+ resolving \B, \b, \D, \d, \S, \s, \W and \w. Without this flag,
+ only ISO Latin-1 properties are used. Using Unicode properties
+ hurts performance, but is semantically correct when working with
+ Unicode characters beyond the ISO Latin-1 range.</p>
+ </item>
+ <tag><c>never_utf</c></tag>
+ <item>
+ <p>Specifies that the (*UTF) and/or (*UTF8) "start-of-pattern
+ items" are forbidden. This flag cannot be combined with option
+ <c>unicode</c>. Useful if ISO Latin-1 patterns from an external
+ source are to be compiled.</p>
+ </item>
+ </taglist>
+ </desc>
</func>
<func>
<name name="inspect" arity="2"/>
- <fsummary>Inspects a compiled regular expression</fsummary>
+ <fsummary>Inspects a compiled regular expression.</fsummary>
<desc>
- <p>This function takes a compiled regular expression and an item, returning the relevant data from the regular expression. Currently the only supported item is <c>namelist</c>, which returns the tuple <c>{namelist, [ binary()]}</c>, containing the names of all (unique) named subpatterns in the regular expression.</p>
- <p>Example:</p>
- <code type="none">
+ <p>Takes a compiled regular expression and an item, and returns the
+ relevant data from the regular expression. The only
+ supported item is <c>namelist</c>, which returns the tuple
+ <c>{namelist, [binary()]}</c>, containing the names of all (unique)
+ named subpatterns in the regular expression. For example:</p>
+ <code type="none">
1&gt; {ok,MP} = re:compile("(?&lt;A&gt;A)|(?&lt;B&gt;B)|(?&lt;C&gt;C)").
{ok,{re_pattern,3,0,0,
&lt;&lt;69,82,67,80,119,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,
@@ -181,8 +304,15 @@ This option makes it possible to include comments inside complicated patterns. N
255,255,...&gt;&gt;}}
4&gt; re:inspect(MPD,namelist).
{namelist,[&lt;&lt;"B"&gt;&gt;,&lt;&lt;"C"&gt;&gt;]}</code>
- <p>Note specifically in the second example that the duplicate name only occurs once in the returned list, and that the list is in alphabetical order regardless of where the names are positioned in the regular expression. The order of the names is the same as the order of captured subexpressions if <c>{capture, all_names}</c> is given as an option to <c>re:run/3</c>. You can therefore create a name-to-value mapping from the result of <c>re:run/3</c> like this:</p>
-<code>
+ <p>Notice in the second example that the duplicate name only occurs
+ once in the returned list, and that the list is in alphabetical order
+ regardless of where the names are positioned in the regular
+ expression. The order of the names is the same as the order of
+ captured subexpressions if <c>{capture, all_names}</c> is specified as
+ an option to <seealso marker="#run/3"><c>run/3</c></seealso>.
+ You can therefore create a name-to-value mapping from the result of
+ <c>run/3</c> like this:</p>
+ <code>
1&gt; {ok,MP} = re:compile("(?&lt;A&gt;A)|(?&lt;B&gt;B)|(?&lt;C&gt;C)").
{ok,{re_pattern,3,0,0,
&lt;&lt;69,82,67,80,119,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,
@@ -193,249 +323,318 @@ This option makes it possible to include comments inside complicated patterns. N
{match,[&lt;&lt;"A"&gt;&gt;,&lt;&lt;&gt;&gt;,&lt;&lt;&gt;&gt;]}
4&gt; NameMap = lists:zip(N,L).
[{&lt;&lt;"A"&gt;&gt;,&lt;&lt;"A"&gt;&gt;},{&lt;&lt;"B"&gt;&gt;,&lt;&lt;&gt;&gt;},{&lt;&lt;"C"&gt;&gt;,&lt;&lt;&gt;&gt;}]</code>
- <p>More items are expected to be added in the future.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="replace" arity="3"/>
+ <fsummary>Match a subject against regular expression and replace matching
+ elements with Replacement.</fsummary>
+ <desc>
+ <p>Same as <c>replace(<anno>Subject</anno>, <anno>RE</anno>,
+ <anno>Replacement</anno>, [])</c>.</p>
</desc>
</func>
+
+ <func>
+ <name name="replace" arity="4"/>
+ <fsummary>Match a subject against regular expression and replace matching
+ elements with Replacement.</fsummary>
+ <desc>
+ <p>Replaces the matched part of the <c><anno>Subject</anno></c> string
+ with the contents of <c><anno>Replacement</anno></c>.</p>
+ <p>The permissible options are the same as for
+ <seealso marker="#run/3"><c>run/3</c></seealso>, except that option<c>
+ capture</c> is not allowed. Instead a <c>{return,
+ <anno>ReturnType</anno>}</c> is present. The default return type is
+ <c>iodata</c>, constructed in a way to minimize copying. The
+ <c>iodata</c> result can be used directly in many I/O operations. If a
+ flat <c>list()</c> is desired, specify <c>{return, list}</c>. If a
+ binary is desired, specify <c>{return, binary}</c>.</p>
+ <p>As in function <c>run/3</c>, an <c>mp()</c> compiled with option
+ <c>unicode</c> requires <c><anno>Subject</anno></c> to be a Unicode
+ <c>charlist()</c>. If compilation is done implicitly and the
+ <c>unicode</c> compilation option is specified to this function, both
+ the regular expression and <c><anno>Subject</anno></c> are to
+ specified as valid Unicode <c>charlist()</c>s.</p>
+ <p>The replacement string can contain the special character
+ <c>&amp;</c>, which inserts the whole matching expression in the
+ result, and the special sequence <c>\</c>N (where N is an integer &gt;
+ 0), <c>\g</c>N, or <c>\g{</c>N<c>}</c>, resulting in the subexpression
+ number N, is inserted in the result. If no subexpression with that
+ number is generated by the regular expression, nothing is
+ inserted.</p>
+ <p>To insert an &amp; or a \ in the result, precede it
+ with a \. Notice that Erlang already gives a special meaning to
+ \ in literal strings, so a single \ must be written as
+ <c>"\\"</c> and therefore a double \ as <c>"\\\\"</c>.</p>
+ <p><em>Example:</em></p>
+ <code>
+re:replace("abcd","c","[&amp;]",[{return,list}]).</code>
+ <p>gives</p>
+ <code>
+"ab[c]d"</code>
+ <p>while</p>
+ <code>
+re:replace("abcd","c","[\\&amp;]",[{return,list}]).</code>
+ <p>gives</p>
+ <code>
+"ab[&amp;]d"</code>
+ <p>As with <c>run/3</c>, compilation errors raise the <c>badarg</c>
+ exception. <seealso marker="#compile/2"><c>compile/2</c></seealso>
+ can be used to get more information about the error.</p>
+ </desc>
+ </func>
+
<func>
<name name="run" arity="2"/>
- <fsummary>Match a subject against regular expression and capture subpatterns</fsummary>
+ <fsummary>Match a subject against regular expression and capture
+ subpatterns.</fsummary>
<desc>
- <p>The same as <c>run(<anno>Subject</anno>,<anno>RE</anno>,[])</c>.</p>
+ <p>Same as <c>run(<anno>Subject</anno>,<anno>RE</anno>,[])</c>.</p>
</desc>
</func>
+
<func>
<name name="run" arity="3"/>
- <fsummary>Match a subject against regular expression and capture subpatterns</fsummary>
- <type_desc variable="CompileOpt">See <seealso marker="#compile_options">compile/2</seealso> above.</type_desc>
+ <fsummary>Match a subject against regular expression and capture
+ subpatterns.</fsummary>
+ <type_desc variable="CompileOpt">See <seealso marker="#compile_options">
+ <c>compile/2</c></seealso>.</type_desc>
<desc>
-
- <p>Executes a regexp matching, returning <c>match/{match,
- <anno>Captured</anno>}</c> or <c>nomatch</c>. The regular expression can be
- given either as <c>iodata()</c> in which case it is
- automatically compiled (as by <c>re:compile/2</c>) and executed,
- or as a pre-compiled <c>mp()</c> in which case it is executed
- against the subject directly.</p>
-
- <p>When compilation is involved, the exception <c>badarg</c> is
- thrown if a compilation error occurs. Call <c>re:compile/2</c>
- to get information about the location of the error in the
- regular expression.</p>
-
- <p>If the regular expression is previously compiled, the option
- list can only contain the options <c>anchored</c>,
- <c>global</c>, <c>notbol</c>, <c>noteol</c>, <c>report_errors</c>,
- <c>notempty</c>, <c>notempty_atstart</c>, <c>{offset, integer() >= 0}</c>,
- <c>{match_limit, integer() >= 0}</c>,
- <c>{match_limit_recursion, integer() >= 0}</c>,
- <c>{newline,
- <anno>NLSpec</anno>}</c> and
- <c>{capture, <anno>ValueSpec</anno>}/{capture, <anno>ValueSpec</anno>,
- <anno>Type</anno>}</c>. Otherwise all options valid for the
- <c>re:compile/2</c> function are allowed as well. Options
- allowed both for compilation and execution of a match, namely
- <c>anchored</c> and <c>{newline, <anno>NLSpec</anno>}</c>,
- will affect both
- the compilation and execution if present together with a non
- pre-compiled regular expression.</p>
-
- <p>If the regular expression was previously compiled with the
- option <c>unicode</c>, the <c><anno>Subject</anno></c> should be provided as
- a valid Unicode <c>charlist()</c>, otherwise any <c>iodata()</c>
- will do. If compilation is involved and the option
- <c>unicode</c> is given, both the <c><anno>Subject</anno></c> and the regular
- expression should be given as valid Unicode
- <c>charlists()</c>.</p>
-
- <p>The <c>{capture, <anno>ValueSpec</anno>}/{capture, <anno>ValueSpec</anno>, <anno>Type</anno>}</c>
- defines what to return from the function upon successful
- matching. The <c>capture</c> tuple may contain both a
- value specification telling which of the captured
- substrings are to be returned, and a type specification, telling
- how captured substrings are to be returned (as index tuples,
- lists or binaries). The <c>capture</c> option makes the function
- quite flexible and powerful. The different options are described
- in detail below.</p>
-
- <p>If the capture options describe that no substring capturing
- at all is to be done (<c>{capture, none}</c>), the function will
- return the single atom <c>match</c> upon successful matching,
- otherwise the tuple
- <c>{match, <anno>ValueList</anno>}</c> is returned. Disabling capturing can
- be done either by specifying <c>none</c> or an empty list as
- <c><anno>ValueSpec</anno></c>.</p>
-
- <p>The <c>report_errors</c> option adds the possibility that an
- error tuple is returned. The tuple will either indicate a
- matching error (<c>match_limit</c> or
- <c>match_limit_recursion</c>) or a compilation error, where the
- error tuple has the format <c>{error, {compile,
- <anno>CompileErr</anno>}}</c>. Note that if the option
- <c>report_errors</c> is not given, the function never returns
- error tuples, but will report compilation errors as a badarg
- exception and failed matches due to exceeded match limits simply
- as <c>nomatch</c>.</p>
-
- <p>The options relevant for execution are:</p>
-
- <taglist>
- <tag><c>anchored</c></tag>
-
- <item>Limits <c>re:run/3</c> to matching at the first matching
- position. If a pattern was compiled with <c>anchored</c>, or
- turned out to be anchored by virtue of its contents, it cannot
- be made unanchored at matching time, hence there is no
- <c>unanchored</c> option.</item>
-
- <tag><c>global</c></tag>
- <item>
-
- <p>Implements global (repetitive) search (the <c>g</c> flag in
- Perl). Each match is returned as a separate
- <c>list()</c> containing the specific match as well as any
- matching subexpressions (or as specified by the <c>capture
- option</c>). The <c><anno>Captured</anno></c> part of the return value will
- hence be a <c>list()</c> of <c>list()</c>s when this
- option is given.</p>
-
- <p>The interaction of the global option with a regular
- expression which matches an empty string surprises some users.
- When the global option is given, <c>re:run/3</c> handles empty
- matches in the same way as Perl: a zero-length match at any
- point will be retried with the options <c>[anchored,
- notempty_atstart]</c> as well. If that search gives a result of length
- &gt; 0, the result is included. For example:</p>
-
-<code> re:run("cat","(|at)",[global]).</code>
-
- <p>The following matching will be performed:</p>
- <taglist>
- <tag>At offset <c>0</c></tag>
- <item>The regexp <c>(|at)</c> will first match at the initial
- position of the string <c>cat</c>, giving the result set
- <c>[{0,0},{0,0}]</c> (the second <c>{0,0}</c> is due to the
- subexpression marked by the parentheses). As the length of the
- match is 0, we don't advance to the next position yet.</item>
- <tag>At offset <c>0</c> with <c>[anchored, notempty_atstart]</c></tag>
- <item> The search is retried
- with the options <c>[anchored, notempty_atstart]</c> at the same
- position, which does not give any interesting result of longer
- length, so the search position is now advanced to the next
- character (<c>a</c>).</item>
- <tag>At offset <c>1</c></tag>
- <item>This time, the search results in
- <c>[{1,0},{1,0}]</c>, so this search will also be repeated
- with the extra options.</item>
- <tag>At offset <c>1</c> with <c>[anchored, notempty_atstart]</c></tag>
- <item>Now the <c>ab</c> alternative
- is found and the result will be [{1,2},{1,2}]. The result is
- added to the list of results and the position in the
- search string is advanced two steps.</item>
- <tag>At offset <c>3</c></tag>
- <item>The search now once again
- matches the empty string, giving <c>[{3,0},{3,0}]</c>.</item>
- <tag>At offset <c>1</c> with <c>[anchored, notempty_atstart]</c></tag>
- <item>This will give no result of length &gt; 0 and we are at
- the last position, so the global search is complete.</item>
- </taglist>
- <p>The result of the call is:</p>
-
-<code> {match,[[{0,0},{0,0}],[{1,0},{1,0}],[{1,2},{1,2}],[{3,0},{3,0}]]}</code>
-</item>
-
- <tag><c>notempty</c></tag>
- <item>
- <p>An empty string is not considered to be a valid match if this
- option is given. If there are alternatives in the pattern, they
- are tried. If all the alternatives match the empty string, the
- entire match fails. For example, if the pattern</p>
-<code> a?b?</code>
- <p>is applied to a string not beginning with "a" or "b", it
- would normally match the empty string at the start of the
- subject. With the <c>notempty</c> option, this match is not
- valid, so re:run/3 searches further into the string for
- occurrences of "a" or "b".</p>
- </item>
- <tag><c>notempty_atstart</c></tag>
- <item>
- <p>This is like <c>notempty</c>, except that an empty string
- match that is not at the start of the subject is permitted. If
- the pattern is anchored, such a match can occur only if the
- pattern contains \K.</p>
- <p>Perl has no direct equivalent of <c>notempty</c> or <c>notempty_atstart</c>, but it does
- make a special case of a pattern match of the empty string
- within its split() function, and when using the /g modifier. It
- is possible to emulate Perl's behavior after matching a null
- string by first trying the match again at the same offset with
- <c>notempty_atstart</c> and <c>anchored</c>, and then, if that fails, by
- advancing the starting offset (see below) and trying an ordinary
- match again.</p>
- </item>
- <tag><c>notbol</c></tag>
-
- <item>This option specifies that the first character of the subject
- string is not the beginning of a line, so the circumflex
- metacharacter should not match before it. Setting this without
- <c>multiline</c> (at compile time) causes circumflex never to
- match. This option only affects the behavior of the circumflex
- metacharacter. It does not affect \A.</item>
-
- <tag><c>noteol</c></tag>
-
- <item>This option specifies that the end of the subject string
- is not the end of a line, so the dollar metacharacter should not
- match it nor (except in multiline mode) a newline immediately
- before it. Setting this without <c>multiline</c> (at compile time)
- causes dollar never to match. This option affects only the
- behavior of the dollar metacharacter. It does not affect \Z or
- \z.</item>
-
- <tag><c>report_errors</c></tag>
-
- <item><p>This option gives better control of the error handling in <c>re:run/3</c>. When it is given, compilation errors (if the regular expression isn't already compiled) as well as run-time errors are explicitly returned as an error tuple.</p>
- <p>The possible run-time errors are:</p>
- <taglist>
- <tag><c>match_limit</c></tag>
-
- <item>The PCRE library sets a limit on how many times the
- internal match function can be called. The default value for
- this is 10000000 in the library compiled for Erlang. If
- <c>{error, match_limit}</c> is returned, it means that the
- execution of the regular expression has reached this
- limit. Normally this is to be regarded as a <c>nomatch</c>,
- which is the default return value when this happens, but by
- specifying <c>report_errors</c>, you will get informed when
- the match fails due to to many internal calls.</item>
-
- <tag><c>match_limit_recursion</c></tag>
-
- <item>This error is very similar to <c>match_limit</c>, but
- occurs when the internal match function of PCRE is
- "recursively" called more times than the
- "match_limit_recursion" limit, which is by default 10000000 as
- well. Note that as long as the <c>match_limit</c> and
- <c>match_limit_default</c> values are kept at the default
- values, the <c>match_limit_recursion</c> error can not occur,
- as the <c>match_limit</c> error will occur before that (each
- recursive call is also a call, but not vice versa). Both
- limits can however be changed, either by setting limits
- directly in the regular expression string (see reference
- section below) or by giving options to <c>re:run/3</c></item>
-
- </taglist>
- <p>It is important to understand that what is referred to as
- "recursion" when limiting matches is not actually recursion on
- the C stack of the Erlang machine, neither is it recursion on
- the Erlang process stack. The version of PCRE compiled into the
- Erlang VM uses machine "heap" memory to store values that needs to be
- kept over recursion in regular expression matches.</p>
- </item>
- <tag><c>{match_limit, integer() >= 0}</c></tag>
-
- <item><p>This option limits the execution time of a match in an
- implementation-specific way. It is described in the following
- way by the PCRE documentation:</p>
-
- <code>
+ <p>Executes a regular expression matching, and returns
+ <c>match/{match, <anno>Captured</anno>}</c> or <c>nomatch</c>. The
+ regular expression can be specified either as <c>iodata()</c> in
+ which case it is automatically compiled (as by <c>compile/2</c>) and
+ executed, or as a precompiled <c>mp()</c> in which case it is executed
+ against the subject directly.</p>
+ <p>When compilation is involved, exception <c>badarg</c> is thrown if a
+ compilation error occurs. Call <c>compile/2</c> to get information
+ about the location of the error in the regular expression.</p>
+ <p>If the regular expression is previously compiled, the option list can
+ only contain the following options:</p>
+ <list type="bulleted">
+ <item><c>anchored</c></item>
+ <item><c>{capture, <anno>ValueSpec</anno>}/{capture,
+ <anno>ValueSpec</anno>, <anno>Type</anno>}</c></item>
+ <item><c>global</c></item>
+ <item><c>{match_limit, integer() >= 0}</c></item>
+ <item><c>{match_limit_recursion, integer() >= 0}</c></item>
+ <item><c>{newline, <anno>NLSpec</anno>}</c></item>
+ <item><c>notbol</c></item>
+ <item><c>notempty</c></item>
+ <item><c>notempty_atstart</c></item>
+ <item><c>noteol</c></item>
+ <item><c>{offset, integer() >= 0}</c></item>
+ <item><c>report_errors</c></item>
+ </list>
+ <p>Otherwise all options valid for function <c>compile/2</c> are also
+ allowed. Options allowed both for compilation and execution of a
+ match, namely <c>anchored</c> and <c>{newline,
+ <anno>NLSpec</anno>}</c>, affect both the compilation and execution if
+ present together with a non-precompiled regular expression.</p>
+ <p>If the regular expression was previously compiled with option
+ <c>unicode</c>, <c><anno>Subject</anno></c> is to be provided as a
+ valid Unicode <c>charlist()</c>, otherwise any <c>iodata()</c> will
+ do. If compilation is involved and option <c>unicode</c> is specified,
+ both <c><anno>Subject</anno></c> and the regular expression are to be
+ specified as valid Unicode <c>charlists()</c>.</p>
+ <p><c>{capture, <anno>ValueSpec</anno>}/{capture,
+ <anno>ValueSpec</anno>, <anno>Type</anno>}</c> defines what to return
+ from the function upon successful matching. The <c>capture</c> tuple
+ can contain both a value specification, telling which of the captured
+ substrings are to be returned, and a type specification, telling how
+ captured substrings are to be returned (as index tuples, lists, or
+ binaries). The options are described in detail below.</p>
+ <p>If the capture options describe that no substring capturing is to be
+ done (<c>{capture, none}</c>), the function returns the single atom
+ <c>match</c> upon successful matching, otherwise the tuple
+ <c>{match, <anno>ValueList</anno>}</c>. Disabling capturing can be
+ done either by specifying <c>none</c> or an empty list as
+ <c><anno>ValueSpec</anno></c>.</p>
+ <p>Option <c>report_errors</c> adds the possibility that an error tuple
+ is returned. The tuple either indicates a matching error
+ (<c>match_limit</c> or <c>match_limit_recursion</c>), or a compilation
+ error, where the error tuple has the format <c>{error, {compile,
+ <anno>CompileErr</anno>}}</c>. Notice that if option
+ <c>report_errors</c> is not specified, the function never returns
+ error tuples, but reports compilation errors as a <c>badarg</c>
+ exception and failed matches because of exceeded match limits simply
+ as <c>nomatch</c>.</p>
+ <p>The following options are relevant for execution:</p>
+ <taglist>
+ <tag><c>anchored</c></tag>
+ <item>
+ <p>Limits <c>run/3</c> to matching at the first matching
+ position. If a pattern was compiled with <c>anchored</c>, or
+ turned out to be anchored by virtue of its contents, it cannot
+ be made unanchored at matching time, hence there is no
+ <c>unanchored</c> option.</p></item>
+ <tag><c>global</c></tag>
+ <item>
+ <p>Implements global (repetitive) search (flag <c>g</c> in Perl).
+ Each match is returned as a separate <c>list()</c> containing the
+ specific match and any matching subexpressions (or as specified
+ by option <c>capture</c>. The <c><anno>Captured</anno></c> part
+ of the return value is hence a <c>list()</c> of <c>list()</c>s
+ when this option is specified.</p>
+ <p>The interaction of option <c>global</c> with a regular
+ expression that matches an empty string surprises some users.
+ When option <c>global</c> is specified, <c>run/3</c> handles
+ empty matches in the same way as Perl: a zero-length match at any
+ point is also retried with options <c>[anchored,
+ notempty_atstart]</c>. If that search gives a result of length
+ &gt; 0, the result is included. Example:</p>
+ <code>
+re:run("cat","(|at)",[global]).</code>
+ <p>The following matchings are performed:</p>
+ <taglist>
+ <tag>At offset <c>0</c></tag>
+ <item>
+ <p>The regular expression <c>(|at)</c> first match at the
+ initial position of string <c>cat</c>, giving the result set
+ <c>[{0,0},{0,0}]</c> (the second <c>{0,0}</c> is because of
+ the subexpression marked by the parentheses). As the length
+ of the match is 0, we do not advance to the next position
+ yet.</p>
+ </item>
+ <tag>At offset <c>0</c> with <c>[anchored,
+ notempty_atstart]</c></tag>
+ <item>
+ <p>The search is retried with options <c>[anchored,
+ notempty_atstart]</c> at the same position, which does not
+ give any interesting result of longer length, so the search
+ position is advanced to the next character (<c>a</c>).</p>
+ </item>
+ <tag>At offset <c>1</c></tag>
+ <item>
+ <p>The search results in <c>[{1,0},{1,0}]</c>, so this search is
+ also repeated with the extra options.</p>
+ </item>
+ <tag>At offset <c>1</c> with <c>[anchored,
+ notempty_atstart]</c></tag>
+ <item>
+ <p>Alternative <c>ab</c> is found and the result is
+ [{1,2},{1,2}]. The result is added to the list of results and
+ the position in the search string is advanced two steps.</p>
+ </item>
+ <tag>At offset <c>3</c></tag>
+ <item>
+ <p>The search once again matches the empty string, giving
+ <c>[{3,0},{3,0}]</c>.</p>
+ </item>
+ <tag>At offset <c>1</c> with <c>[anchored,
+ notempty_atstart]</c></tag>
+ <item>
+ <p>This gives no result of length &gt; 0 and we are at the last
+ position, so the global search is complete.</p>
+ </item>
+ </taglist>
+ <p>The result of the call is:</p>
+ <code>
+{match,[[{0,0},{0,0}],[{1,0},{1,0}],[{1,2},{1,2}],[{3,0},{3,0}]]}</code>
+ </item>
+ <tag><c>notempty</c></tag>
+ <item>
+ <p>An empty string is not considered to be a valid match if this
+ option is specified. If alternatives in the pattern exist, they
+ are tried. If all the alternatives match the empty string, the
+ entire match fails.</p>
+ <p><em>Example:</em></p>
+ <p>If the following pattern is applied to a string not beginning
+ with "a" or "b", it would normally match the empty string at the
+ start of the subject:</p>
+ <code>
+a?b?</code>
+ <p>With option <c>notempty</c>, this match is invalid, so
+ <c>run/3</c> searches further into the string for occurrences of
+ "a" or "b".</p>
+ </item>
+ <tag><c>notempty_atstart</c></tag>
+ <item>
+ <p>Like <c>notempty</c>, except that an empty string match that is
+ not at the start of the subject is permitted. If the pattern is
+ anchored, such a match can occur only if the pattern contains
+ \K.</p>
+ <p>Perl has no direct equivalent of <c>notempty</c> or
+ <c>notempty_atstart</c>, but it does make a special case of a
+ pattern match of the empty string within its split() function,
+ and when using modifier <c>/g</c>. The Perl behavior can be
+ emulated after matching a null string by first trying the
+ match again at the same offset with <c>notempty_atstart</c> and
+ <c>anchored</c>, and then, if that fails, by advancing the
+ starting offset (see below) and trying an ordinary match
+ again.</p>
+ </item>
+ <tag><c>notbol</c></tag>
+ <item>
+ <p>Specifies that the first character of the subject string is not
+ the beginning of a line, so the circumflex metacharacter is not
+ to match before it. Setting this without <c>multiline</c> (at
+ compile time) causes circumflex never to match. This option only
+ affects the behavior of the circumflex metacharacter. It does not
+ affect \A.</p>
+ </item>
+ <tag><c>noteol</c></tag>
+ <item>
+ <p>Specifies that the end of the subject string is not the end of a
+ line, so the dollar metacharacter is not to match it nor (except
+ in multiline mode) a newline immediately before it. Setting this
+ without <c>multiline</c> (at compile time) causes dollar never to
+ match. This option affects only the behavior of the dollar
+ metacharacter. It does not affect \Z or \z.</p>
+ </item>
+ <tag><c>report_errors</c></tag>
+ <item>
+ <p>Gives better control of the error handling in <c>run/3</c>. When
+ specified, compilation errors (if the regular expression is not
+ already compiled) and runtime errors are explicitly returned as
+ an error tuple.</p>
+ <p>The following are the possible runtime errors:</p>
+ <taglist>
+ <tag><c>match_limit</c></tag>
+ <item>
+ <p>The PCRE library sets a limit on how many times the internal
+ match function can be called. Defaults to 10,000,000 in the
+ library compiled for Erlang. If <c>{error, match_limit}</c>
+ is returned, the execution of the regular expression has
+ reached this limit. This is normally to be regarded as a
+ <c>nomatch</c>, which is the default return value when this
+ occurs, but by specifying <c>report_errors</c>, you are
+ informed when the match fails because of too many internal
+ calls.</p>
+ </item>
+ <tag><c>match_limit_recursion</c></tag>
+ <item>
+ <p>This error is very similar to <c>match_limit</c>, but occurs
+ when the internal match function of PCRE is "recursively"
+ called more times than the <c>match_limit_recursion</c> limit,
+ which defaults to 10,000,000 as well. Notice that as long as
+ the <c>match_limit</c>
+ and <c>match_limit_default</c> values are
+ kept at the default values, the <c>match_limit_recursion</c>
+ error cannot occur, as the <c>match_limit</c> error occurs
+ before that (each recursive call is also a call, but not
+ conversely). Both limits can however be changed, either by
+ setting limits directly in the regular expression string (see
+ section <seealso marker="#regexp_syntax_details">PCRE Regular
+ Eexpression Details</seealso>) or by specifying options to
+ <c>run/3</c>.</p>
+ </item>
+ </taglist>
+ <p>It is important to understand that what is referred to as
+ "recursion" when limiting matches is not recursion on the C stack
+ of the Erlang machine or on the Erlang process stack. The PCRE
+ version compiled into the Erlang VM uses machine "heap" memory to
+ store values that must be kept over recursion in regular
+ expression matches.</p>
+ </item>
+ <tag><c>{match_limit, integer() >= 0}</c></tag>
+ <item>
+ <p>Limits the execution time of a match in an
+ implementation-specific way. It is described as follows by the
+ PCRE documentation:</p>
+ <code>
The match_limit field provides a means of preventing PCRE from using
up a vast amount of resources when running patterns that are not going
to match, but which have a very large number of possibilities in their
@@ -448,26 +647,22 @@ imposed on the number of times this function is called during a match,
which has the effect of limiting the amount of backtracking that can
take place. For patterns that are not anchored, the count restarts
from zero for each position in the subject string.</code>
-
- <p>This means that runaway regular expression matches can fail
- faster if the limit is lowered using this option. The default
- value compiled into the Erlang virtual machine is 10000000</p>
-
- <note><p>This option does in no way affect the execution of the
- Erlang virtual machine in terms of "long running
- BIF's". <c>re:run</c> always give control back to the scheduler
- of Erlang processes at intervals that ensures the real time
- properties of the Erlang system.</p></note>
- </item>
-
- <tag><c>{match_limit_recursion, integer() >= 0}</c></tag>
-
- <item><p>This option limits the execution time and memory
- consumption of a match in an implementation-specific way, very
- similar to <c>match_limit</c>. It is described in the following
- way by the PCRE documentation:</p>
-
- <code>
+ <p>This means that runaway regular expression matches can fail
+ faster if the limit is lowered using this option. The default
+ value 10,000,000 is compiled into the Erlang VM.</p>
+ <note>
+ <p>This option does in no way affect the execution of the Erlang
+ VM in terms of "long running BIFs". <c>run/3</c> always gives
+ control back to the scheduler of Erlang processes at intervals
+ that ensures the real-time properties of the Erlang system.</p>
+ </note>
+ </item>
+ <tag><c>{match_limit_recursion, integer() >= 0}</c></tag>
+ <item>
+ <p>Limits the execution time and memory consumption of a match in an
+ implementation-specific way, very similar to <c>match_limit</c>.
+ It is described as follows by the PCRE documentation:</p>
+ <code>
The match_limit_recursion field is similar to match_limit, but instead
of limiting the total number of times that match() is called, it
limits the depth of recursion. The recursion depth is a smaller number
@@ -477,3273 +672,3535 @@ match_limit.
Limiting the recursion depth limits the amount of machine stack that
can be used, or, when PCRE has been compiled to use memory on the heap
-instead of the stack, the amount of heap memory that can be
-used.</code>
-
- <p>The Erlang virtual machine uses a PCRE library where heap
- memory is used when regular expression match recursion happens,
- why this limits the usage of machine heap, not C stack.</p>
-
- <p>Specifying a lower value may result in matches with deep recursion failing, when they should actually have matched:</p>
- <code type="none">
+instead of the stack, the amount of heap memory that can be used.</code>
+ <p>The Erlang VM uses a PCRE library where heap memory is used when
+ regular expression match recursion occurs. This therefore limits
+ the use of machine heap, not C stack.</p>
+ <p>Specifying a lower value can result in matches with deep
+ recursion failing, when they should have matched:</p>
+ <code type="none">
1&gt; re:run("aaaaaaaaaaaaaz","(a+)*z").
{match,[{0,14},{0,13}]}
2&gt; re:run("aaaaaaaaaaaaaz","(a+)*z",[{match_limit_recursion,5}]).
nomatch
3&gt; re:run("aaaaaaaaaaaaaz","(a+)*z",[{match_limit_recursion,5},report_errors]).
{error,match_limit_recursion}</code>
-
- <p>This option, as well as the <c>match_limit</c> option should
- only be used in very rare cases. Understanding of the PCRE
- library internals is recommended before tampering with these
- limits.</p>
- </item>
-
- <tag><c>{offset, integer() >= 0}</c></tag>
-
- <item>Start matching at the offset (position) given in the
- subject string. The offset is zero-based, so that the default is
- <c>{offset,0}</c> (all of the subject string).</item>
-
- <tag><c>{newline, <anno>NLSpec</anno>}</c></tag>
- <item>
- <p>Override the default definition of a newline in the subject string, which is LF (ASCII 10) in Erlang.</p>
- <taglist>
- <tag><c>cr</c></tag>
- <item>Newline is indicated by a single character CR (ASCII 13)</item>
- <tag><c>lf</c></tag>
- <item>Newline is indicated by a single character LF (ASCII 10), the default</item>
- <tag><c>crlf</c></tag>
- <item>Newline is indicated by the two-character CRLF (ASCII 13 followed by ASCII 10) sequence.</item>
- <tag><c>anycrlf</c></tag>
- <item>Any of the three preceding sequences should be recognized.</item>
- <tag><c>any</c></tag>
- <item>Any of the newline sequences above, plus the Unicode sequences VT (vertical tab, U+000B), FF (formfeed, U+000C), NEL (next line, U+0085), LS (line separator, U+2028), and PS (paragraph separator, U+2029). </item>
- </taglist>
- </item>
- <tag><c>bsr_anycrlf</c></tag>
- <item>Specifies specifically that \R is to match only the cr, lf or crlf sequences, not the Unicode specific newline characters. (overrides compilation option)</item>
- <tag><c>bsr_unicode</c></tag>
- <item>Specifies specifically that \R is to match all the Unicode newline characters (including crlf etc, the default).(overrides compilation option)</item>
-
- <tag><c>{capture, <anno>ValueSpec</anno>}</c>/<c>{capture, <anno>ValueSpec</anno>, <anno>Type</anno>}</c></tag>
- <item>
-
- <p>Specifies which captured substrings are returned and in what
- format. By default,
- <c>re:run/3</c> captures all of the matching part of the
- substring as well as all capturing subpatterns (all of the
- pattern is automatically captured). The default return type is
- (zero-based) indexes of the captured parts of the string, given as
- <c>{Offset,Length}</c> pairs (the <c>index</c> <c><anno>Type</anno></c> of
- capturing).</p>
-
- <p>As an example of the default behavior, the following call:</p>
-
- <code> re:run("ABCabcdABC","abcd",[]).</code>
-
- <p>returns, as first and only captured string the matching part of the subject ("abcd" in the middle) as a index pair <c>{3,4}</c>, where character positions are zero based, just as in offsets. The return value of the call above would then be:</p>
- <code> {match,[{3,4}]}</code>
- <p>Another (and quite common) case is where the regular expression matches all of the subject, as in:</p>
- <code> re:run("ABCabcdABC",".*abcd.*",[]).</code>
- <p>where the return value correspondingly will point out all of the string, beginning at index 0 and being 10 characters long:</p>
- <code> {match,[{0,10}]}</code>
-
- <p>If the regular expression contains capturing subpatterns,
- like in the following case:</p>
-
- <code> re:run("ABCabcdABC",".*(abcd).*",[]).</code>
-
- <p>all of the matched subject is captured, as
- well as the captured substrings:</p>
-
- <code> {match,[{0,10},{3,4}]}</code>
-
- <p>the complete matching pattern always giving the first return value in the
- list and the rest of the subpatterns being added in the
- order they occurred in the regular expression.</p>
-
- <p>The capture tuple is built up as follows:</p>
- <taglist>
- <tag><c><anno>ValueSpec</anno></c></tag>
- <item><p>Specifies which captured (sub)patterns are to be returned. The <c><anno>ValueSpec</anno></c> can either be an atom describing a predefined set of return values, or a list containing either the indexes or the names of specific subpatterns to return.</p>
- <p>The predefined sets of subpatterns are:</p>
- <taglist>
- <tag><c>all</c></tag>
- <item>All captured subpatterns including the complete matching string. This is the default.</item>
- <tag><c>all_names</c></tag>
- <item>All <em>named</em> subpatterns in the regular expression, as if a <c>list()</c>
- of all the names <em>in alphabetical order</em> was given. The list of all names can also be retrieved with the <seealso marker="#inspect/2">inspect/2</seealso> function.</item>
- <tag><c>first</c></tag>
- <item>Only the first captured subpattern, which is always the complete matching part of the subject. All explicitly captured subpatterns are discarded.</item>
- <tag><c>all_but_first</c></tag>
- <item>All but the first matching subpattern, i.e. all explicitly captured subpatterns, but not the complete matching part of the subject string. This is useful if the regular expression as a whole matches a large part of the subject, but the part you're interested in is in an explicitly captured subpattern. If the return type is <c>list</c> or <c>binary</c>, not returning subpatterns you're not interested in is a good way to optimize.</item>
- <tag><c>none</c></tag>
- <item>Do not return matching subpatterns at all, yielding the single atom <c>match</c> as the return value of the function when matching successfully instead of the <c>{match, list()}</c> return. Specifying an empty list gives the same behavior.</item>
- </taglist>
- <p>The value list is a list of indexes for the subpatterns to return, where index 0 is for all of the pattern, and 1 is for the first explicit capturing subpattern in the regular expression, and so forth. When using named captured subpatterns (see below) in the regular expression, one can use <c>atom()</c>s or <c>string()</c>s to specify the subpatterns to be returned. For example, consider the regular expression:</p>
- <code> ".*(abcd).*"</code>
- <p>matched against the string "ABCabcdABC", capturing only the "abcd" part (the first explicit subpattern):</p>
- <code> re:run("ABCabcdABC",".*(abcd).*",[{capture,[1]}]).</code>
- <p>The call will yield the following result:</p>
- <code> {match,[{3,4}]}</code>
- <p>as the first explicitly captured subpattern is "(abcd)", matching "abcd" in the subject, at (zero-based) position 3, of length 4.</p>
- <p>Now consider the same regular expression, but with the subpattern explicitly named 'FOO':</p>
- <code> ".*(?&lt;FOO&gt;abcd).*"</code>
- <p>With this expression, we could still give the index of the subpattern with the following call:</p>
- <code> re:run("ABCabcdABC",".*(?&lt;FOO&gt;abcd).*",[{capture,[1]}]).</code>
- <p>giving the same result as before. But, since the subpattern is named, we can also specify its name in the value list:</p>
- <code> re:run("ABCabcdABC",".*(?&lt;FOO&gt;abcd).*",[{capture,['FOO']}]).</code>
- <p>which would yield the same result as the earlier examples, namely:</p>
- <code> {match,[{3,4}]}</code>
-
- <p>The values list might specify indexes or names not present in
- the regular expression, in which case the return values vary
- depending on the type. If the type is <c>index</c>, the tuple
- <c>{-1,0}</c> is returned for values having no corresponding
- subpattern in the regexp, but for the other types
- (<c>binary</c> and <c>list</c>), the values are the empty binary
- or list respectively.</p>
-
- </item>
- <tag><c><anno>Type</anno></c></tag>
- <item><p>Optionally specifies how captured substrings are to be returned. If omitted, the default of <c>index</c> is used. The <c><anno>Type</anno></c> can be one of the following:</p>
- <taglist>
- <tag><c>index</c></tag>
- <item>Return captured substrings as pairs of byte indexes into the subject string and length of the matching string in the subject (as if the subject string was flattened with <c>iolist_to_binary/1</c> or <c>unicode:characters_to_binary/2</c> prior to matching). Note that the <c>unicode</c> option results in <em>byte-oriented</em> indexes in a (possibly virtual) <em>UTF-8 encoded</em> binary. A byte index tuple <c>{0,2}</c> might therefore represent one or two characters when <c>unicode</c> is in effect. This might seem counter-intuitive, but has been deemed the most effective and useful way to way to do it. To return lists instead might result in simpler code if that is desired. This return type is the default.</item>
- <tag><c>list</c></tag>
- <item>Return matching substrings as lists of characters (Erlang <c>string()</c>s). It the <c>unicode</c> option is used in combination with the \C sequence in the regular expression, a captured subpattern can contain bytes that are not valid UTF-8 (\C matches bytes regardless of character encoding). In that case the <c>list</c> capturing may result in the same types of tuples that <c>unicode:characters_to_list/2</c> can return, namely three-tuples with the tag <c>incomplete</c> or <c>error</c>, the successfully converted characters and the invalid UTF-8 tail of the conversion as a binary. The best strategy is to avoid using the \C sequence when capturing lists.</item>
- <tag><c>binary</c></tag>
- <item>Return matching substrings as binaries. If the <c>unicode</c> option is used, these binaries are in UTF-8. If the \C sequence is used together with <c>unicode</c> the binaries may be invalid UTF-8.</item>
+ <p>This option and option <c>match_limit</c> are only to be used in
+ rare cases. Understanding of the PCRE library internals is
+ recommended before tampering with these limits.</p>
+ </item>
+ <tag><c>{offset, integer() >= 0}</c></tag>
+ <item>
+ <p>Start matching at the offset (position) specified in the
+ subject string. The offset is zero-based, so that the default is
+ <c>{offset,0}</c> (all of the subject string).</p>
+ </item>
+ <tag><c>{newline, <anno>NLSpec</anno>}</c></tag>
+ <item>
+ <p>Overrides the default definition of a newline in the subject
+ string, which is LF (ASCII 10) in Erlang.</p>
+ <taglist>
+ <tag><c>cr</c></tag>
+ <item>
+ <p>Newline is indicated by a single character CR (ASCII 13).</p>
+ </item>
+ <tag><c>lf</c></tag>
+ <item>
+ <p>Newline is indicated by a single character LF (ASCII 10),
+ the default.</p>
+ </item>
+ <tag><c>crlf</c></tag>
+ <item>
+ <p>Newline is indicated by the two-character CRLF (ASCII 13
+ followed by ASCII 10) sequence.</p>
+ </item>
+ <tag><c>anycrlf</c></tag>
+ <item>
+ <p>Any of the three preceding sequences is be recognized.</p>
+ </item>
+ <tag><c>any</c></tag>
+ <item>
+ <p>Any of the newline sequences above, and the Unicode
+ sequences VT (vertical tab, U+000B), FF (formfeed, U+000C), NEL
+ (next line, U+0085), LS (line separator, U+2028), and PS
+ (paragraph separator, U+2029).</p>
+ </item>
+ </taglist>
+ </item>
+ <tag><c>bsr_anycrlf</c></tag>
+ <item>
+ <p>Specifies specifically that \R is to match only the CR
+ LF, or CRLF sequences, not the Unicode-specific newline
+ characters. (Overrides the compilation option.)</p>
+ </item>
+ <tag><c>bsr_unicode</c></tag>
+ <item>
+ <p>Specifies specifically that \R is to match all the Unicode
+ newline characters (including CRLF, and so on, the default).
+ (Overrides the compilation option.)</p>
+ </item>
+ <tag><c>{capture, <anno>ValueSpec</anno>}</c>/<c>{capture,
+ <anno>ValueSpec</anno>, <anno>Type</anno>}</c></tag>
+ <item>
+ <p>Specifies which captured substrings are returned and in what
+ format. By default, <c>run/3</c> captures all of the matching
+ part of the substring and all capturing subpatterns (all of the
+ pattern is automatically captured). The default return type is
+ (zero-based) indexes of the captured parts of the string,
+ specified as <c>{Offset,Length}</c> pairs (the <c>index</c>
+ <c><anno>Type</anno></c> of capturing).</p>
+ <p>As an example of the default behavior, the following call
+ returns, as first and only captured string, the matching part of
+ the subject ("abcd" in the middle) as an index pair <c>{3,4}</c>,
+ where character positions are zero-based, just as in offsets:</p>
+ <code>
+re:run("ABCabcdABC","abcd",[]).</code>
+ <p>The return value of this call is:</p>
+ <code>
+{match,[{3,4}]}</code>
+ <p>Another (and quite common) case is where the regular expression
+ matches all of the subject:</p>
+ <code>
+re:run("ABCabcdABC",".*abcd.*",[]).</code>
+ <p>Here the return value correspondingly points out all of the
+ string, beginning at index 0, and it is 10 characters long:</p>
+ <code>
+{match,[{0,10}]}</code>
+ <p>If the regular expression contains capturing subpatterns, like
+ in:</p>
+ <code>
+re:run("ABCabcdABC",".*(abcd).*",[]).</code>
+ <p>all of the matched subject is captured, as well as the captured
+ substrings:</p>
+ <code>
+{match,[{0,10},{3,4}]}</code>
+ <p>The complete matching pattern always gives the first return
+ value in the list and the remaining subpatterns are added in the
+ order they occurred in the regular expression.</p>
+ <p>The capture tuple is built up as follows:</p>
+ <taglist>
+ <tag><c><anno>ValueSpec</anno></c></tag>
+ <item>
+ <p>Specifies which captured (sub)patterns are to be returned.
+ <c><anno>ValueSpec</anno></c> can either be an atom describing
+ a predefined set of return values, or a list containing the
+ indexes or the names of specific subpatterns to return.</p>
+ <p>The following are the predefined sets of subpatterns:</p>
+ <taglist>
+ <tag><c>all</c></tag>
+ <item>
+ <p>All captured subpatterns including the complete matching
+ string. This is the default.</p>
+ </item>
+ <tag><c>all_names</c></tag>
+ <item>
+ <p>All <em>named</em> subpatterns in the regular expression,
+ as if a <c>list()</c> of all the names <em>in
+ alphabetical order</em> was specified. The list of all
+ names can also be retrieved with
+ <seealso marker="#inspect/2">
+ <c>inspect/2</c></seealso>.</p>
+ </item>
+ <tag><c>first</c></tag>
+ <item>
+ <p>Only the first captured subpattern, which is always the
+ complete matching part of the subject. All explicitly
+ captured subpatterns are discarded.</p>
+ </item>
+ <tag><c>all_but_first</c></tag>
+ <item>
+ <p>All but the first matching subpattern, that is, all
+ explicitly captured subpatterns, but not the complete
+ matching part of the subject string. This is useful if
+ the regular expression as a whole matches a large part of
+ the subject, but the part you are interested in is in an
+ explicitly captured subpattern. If the return type is
+ <c>list</c> or <c>binary</c>, not returning subpatterns
+ you are not interested in is a good way to optimize.</p>
+ </item>
+ <tag><c>none</c></tag>
+ <item>
+ <p>Returns no matching subpatterns, gives the single
+ atom <c>match</c> as the return value of the function
+ when matching successfully instead of the <c>{match,
+ list()}</c> return. Specifying an empty list gives the
+ same behavior.</p>
+ </item>
+ </taglist>
+ <p>The value list is a list of indexes for the subpatterns to
+ return, where index 0 is for all of the pattern, and 1 is for
+ the first explicit capturing subpattern in the regular
+ expression, and so on. When using named captured subpatterns
+ (see below) in the regular expression, one can use
+ <c>atom()</c>s or <c>string()</c>s to specify the subpatterns
+ to be returned. For example, consider the regular
+ expression:</p>
+ <code>
+".*(abcd).*"</code>
+ <p>matched against string "ABCabcdABC", capturing only the
+ "abcd" part (the first explicit subpattern):</p>
+ <code>
+re:run("ABCabcdABC",".*(abcd).*",[{capture,[1]}]).</code>
+ <p>The call gives the following result, as the first explicitly
+ captured subpattern is "(abcd)", matching "abcd" in the
+ subject, at (zero-based) position 3, of length 4:</p>
+ <code>
+{match,[{3,4}]}</code>
+ <p>Consider the same regular expression, but with the subpattern
+ explicitly named 'FOO':</p>
+ <code>
+".*(?&lt;FOO&gt;abcd).*"</code>
+ <p>With this expression, we could still give the index of the
+ subpattern with the following call:</p>
+ <code>
+re:run("ABCabcdABC",".*(?&lt;FOO&gt;abcd).*",[{capture,[1]}]).</code>
+ <p>giving the same result as before. But, as the subpattern is
+ named, we can also specify its name in the value list:</p>
+ <code>
+re:run("ABCabcdABC",".*(?&lt;FOO&gt;abcd).*",[{capture,['FOO']}]).</code>
+ <p>This would give the same result as the earlier examples,
+ namely:</p>
+ <code>
+{match,[{3,4}]}</code>
+ <p>The values list can specify indexes or names not present in
+ the regular expression, in which case the return values vary
+ depending on the type. If the type is <c>index</c>, the tuple
+ <c>{-1,0}</c> is returned for values with no corresponding
+ subpattern in the regular expression, but for the other types
+ (<c>binary</c> and <c>list</c>), the values are the empty
+ binary or list, respectively.</p>
+ </item>
+ <tag><c><anno>Type</anno></c></tag>
+ <item>
+ <p>Optionally specifies how captured substrings are to be
+ returned. If omitted, the default of <c>index</c> is used.</p>
+ <p><c><anno>Type</anno></c> can be one of the following:</p>
+ <taglist>
+ <tag><c>index</c></tag>
+ <item>
+ <p>Returns captured substrings as pairs of byte indexes
+ into the subject string and length of the matching string
+ in the subject (as if the subject string was flattened
+ with <seealso marker="erts:erlang#iolist_to_binary/1">
+ <c>erlang:iolist_to_binary/1</c></seealso> or
+ <seealso marker="unicode#characters_to_binary/2">
+ <c>unicode:characters_to_binary/2</c></seealso> before
+ matching). Notice that option <c>unicode</c> results in
+ <em>byte-oriented</em> indexes in a (possibly virtual)
+ <em>UTF-8 encoded</em> binary. A byte index tuple
+ <c>{0,2}</c> can therefore represent one or two
+ characters when <c>unicode</c> is in effect. This can seem
+ counter-intuitive, but has been deemed the most effective
+ and useful way to do it. To return lists instead can
+ result in simpler code if that is desired. This return
+ type is the default.</p>
+ </item>
+ <tag><c>list</c></tag>
+ <item>
+ <p>Returns matching substrings as lists of characters
+ (Erlang <c>string()</c>s). It option <c>unicode</c> is
+ used in combination with the \C sequence in the
+ regular expression, a captured subpattern can contain
+ bytes that are not valid UTF-8 (\C matches bytes
+ regardless of character encoding). In that case the
+ <c>list</c> capturing can result in the same types of
+ tuples that
+ <seealso marker="unicode#characters_to_list/2">
+ <c>unicode:characters_to_list/2</c></seealso> can return,
+ namely three-tuples with tag <c>incomplete</c> or
+ <c>error</c>, the successfully converted characters and
+ the invalid UTF-8 tail of the conversion as a binary. The
+ best strategy is to avoid using the \C sequence
+ when capturing lists.</p>
+ </item>
+ <tag><c>binary</c></tag>
+ <item>
+ <p>Returns matching substrings as binaries. If option
+ <c>unicode</c> is used, these binaries are in UTF-8. If
+ the \C sequence is used together with
+ <c>unicode</c>, the binaries can be invalid UTF-8.</p>
+ </item>
+ </taglist>
+ </item>
+ </taglist>
+ <p>In general, subpatterns that were not assigned a value in the
+ match are returned as the tuple <c>{-1,0}</c> when <c>type</c> is
+ <c>index</c>. Unassigned subpatterns are returned as the empty
+ binary or list, respectively, for other return types. Consider
+ the following regular expression:</p>
+ <code>
+".*((?&lt;FOO&gt;abdd)|a(..d)).*"</code>
+ <p>There are three explicitly capturing subpatterns, where the
+ opening parenthesis position determines the order in the result,
+ hence <c>((?&lt;FOO&gt;abdd)|a(..d))</c> is subpattern index 1,
+ <c>(?&lt;FOO&gt;abdd)</c> is subpattern index 2, and <c>(..d)</c>
+ is subpattern index 3. When matched against the following
+ string:</p>
+ <code>
+"ABCabcdABC"</code>
+ <p>the subpattern at index 2 does not match, as "abdd" is not
+ present in the string, but the complete pattern matches (because
+ of the alternative <c>a(..d)</c>). The subpattern at index 2 is
+ therefore unassigned and the default return value is:</p>
+ <code>
+{match,[{0,10},{3,4},{-1,0},{4,3}]}</code>
+ <p>Setting the capture <c><anno>Type</anno></c> to <c>binary</c>
+ gives:</p>
+ <code>
+{match,[&lt;&lt;"ABCabcdABC"&gt;&gt;,&lt;&lt;"abcd"&gt;&gt;,&lt;&lt;&gt;&gt;,&lt;&lt;"bcd"&gt;&gt;]}</code>
+ <p>Here the empty binary (<c>&lt;&lt;&gt;&gt;</c>) represents the
+ unassigned subpattern. In the <c>binary</c> case, some information
+ about the matching is therefore lost, as
+ <c>&lt;&lt;&gt;&gt;</c> can
+ also be an empty string captured.</p>
+ <p>If differentiation between empty matches and non-existing
+ subpatterns is necessary, use the <c>type</c> <c>index</c> and do
+ the conversion to the final type in Erlang code.</p>
+ <p>When option <c>global</c> is speciified, the <c>capture</c>
+ specification affects each match separately, so that:</p>
+ <code>
+re:run("cacb","c(a|b)",[global,{capture,[1],list}]).</code>
+ <p>gives</p>
+ <code>
+{match,[["a"],["b"]]}</code>
+ </item>
</taglist>
- </item>
- </taglist>
- <p>In general, subpatterns that were not assigned a value in the match are returned as the tuple <c>{-1,0}</c> when <c>type</c> is <c>index</c>. Unassigned subpatterns are returned as the empty binary or list, respectively, for other return types. Consider the regular expression:</p>
-<code> ".*((?&lt;FOO&gt;abdd)|a(..d)).*"</code>
- <p>There are three explicitly capturing subpatterns, where the opening parenthesis position determines the order in the result, hence <c>((?&lt;FOO&gt;abdd)|a(..d))</c> is subpattern index 1, <c>(?&lt;FOO&gt;abdd)</c> is subpattern index 2 and <c>(..d)</c> is subpattern index 3. When matched against the following string:</p>
-<code> "ABCabcdABC"</code>
- <p>the subpattern at index 2 won't match, as "abdd" is not present in the string, but the complete pattern matches (due to the alternative <c>a(..d)</c>. The subpattern at index 2 is therefore unassigned and the default return value will be:</p>
-<code> {match,[{0,10},{3,4},{-1,0},{4,3}]}</code>
- <p>Setting the capture <c><anno>Type</anno></c> to <c>binary</c> would give the following:</p>
-<code> {match,[&lt;&lt;"ABCabcdABC"&gt;&gt;,&lt;&lt;"abcd"&gt;&gt;,&lt;&lt;&gt;&gt;,&lt;&lt;"bcd"&gt;&gt;]}</code>
- <p>where the empty binary (<c>&lt;&lt;&gt;&gt;</c>) represents the unassigned subpattern. In the <c>binary</c> case, some information about the matching is therefore lost, the <c>&lt;&lt;&gt;&gt;</c> might just as well be an empty string captured.</p>
- <p>If differentiation between empty matches and non existing subpatterns is necessary, use the <c>type</c> <c>index</c>
- and do the conversion to the final type in Erlang code.</p>
-
- <p>When the option <c>global</c> is given, the <c>capture</c>
- specification affects each match separately, so that:</p>
-
- <code> re:run("cacb","c(a|b)",[global,{capture,[1],list}]).</code>
-
- <p>gives the result:</p>
-
- <code> {match,[["a"],["b"]]}</code>
-
- </item>
- </taglist>
- <p>The options solely affecting the compilation step are described in the <c>re:compile/2</c> function.</p>
- </desc>
- </func>
- <func>
- <name name="replace" arity="3"/>
- <fsummary>Match a subject against regular expression and replace matching elements with Replacement</fsummary>
- <desc>
- <p>The same as <c>replace(<anno>Subject</anno>,<anno>RE</anno>,<anno>Replacement</anno>,[])</c>.</p>
- </desc>
- </func>
- <func>
- <name name="replace" arity="4"/>
- <fsummary>Match a subject against regular expression and replace matching elements with Replacement</fsummary>
- <desc>
- <p>Replaces the matched part of the <c><anno>Subject</anno></c> string with the contents of <c><anno>Replacement</anno></c>.</p>
- <p>The permissible options are the same as for <c>re:run/3</c>, except that the <c>capture</c> option is not allowed.
- Instead a <c>{return, <anno>ReturnType</anno>}</c> is present. The default return type is <c>iodata</c>, constructed in a
- way to minimize copying. The <c>iodata</c> result can be used directly in many I/O-operations. If a flat <c>list()</c> is
- desired, specify <c>{return, list}</c> and if a binary is preferred, specify <c>{return, binary}</c>.</p>
-
- <p>As in the <c>re:run/3</c> function, an <c>mp()</c> compiled
- with the <c>unicode</c> option requires the <c><anno>Subject</anno></c> to be
- a Unicode <c>charlist()</c>. If compilation is done implicitly
- and the <c>unicode</c> compilation option is given to this
- function, both the regular expression and the <c><anno>Subject</anno></c>
- should be given as valid Unicode <c>charlist()</c>s.</p>
-
- <p>The replacement string can contain the special character
- <c>&amp;</c>, which inserts the whole matching expression in the
- result, and the special sequence <c>\</c>N (where N is an integer &gt; 0),
- <c>\g</c>N or <c>\g{</c>N<c>}</c> resulting in the subexpression number N will be
- inserted in the result. If no subexpression with that number is
- generated by the regular expression, nothing is inserted.</p>
- <p>To insert an <c>&amp;</c> or <c>\</c> in the result, precede it
- with a <c>\</c>. Note that Erlang already gives a special
- meaning to <c>\</c> in literal strings, so a single <c>\</c>
- has to be written as <c>"\\"</c> and therefore a double <c>\</c>
- as <c>"\\\\"</c>. Example:</p>
- <code> re:replace("abcd","c","[&amp;]",[{return,list}]).</code>
- <p>gives</p>
- <code> "ab[c]d"</code>
- <p>while</p>
- <code> re:replace("abcd","c","[\\&amp;]",[{return,list}]).</code>
- <p>gives</p>
- <code> "ab[&amp;]d"</code>
- <p>As with <c>re:run/3</c>, compilation errors raise the <c>badarg</c>
- exception, <c>re:compile/2</c> can be used to get more information
- about the error.</p>
+ <p>For a descriptions of options only affecting the compilation step,
+ see <seealso marker="#compile/2"><c>compile/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="split" arity="2"/>
- <fsummary>Split a string by tokens specified as a regular expression</fsummary>
+ <fsummary>Split a string by tokens specified as a regular expression.
+ </fsummary>
<desc>
- <p>The same as <c>split(<anno>Subject</anno>,<anno>RE</anno>,[])</c>.</p>
+ <p>Same as <c>split(<anno>Subject</anno>, <anno>RE</anno>, [])</c>.</p>
</desc>
</func>
<func>
<name name="split" arity="3"/>
<fsummary>Split a string by tokens specified as a regular expression</fsummary>
- <type_desc variable="CompileOpt">See <seealso marker="#compile_options">compile/2</seealso> above.</type_desc>
+ <type_desc variable="CompileOpt">See <seealso marker="#compile_options">
+ <c>compile/2</c></seealso>.</type_desc>
<desc>
- <p>This function splits the input into parts by finding tokens
- according to the regular expression supplied.</p>
-
- <p>The splitting is done basically by running a global regexp match and
- dividing the initial string wherever a match occurs. The matching part
- of the string is removed from the output.</p>
-
- <p>As in the <c>re:run/3</c> function, an <c>mp()</c> compiled
- with the <c>unicode</c> option requires the <c><anno>Subject</anno></c> to be
- a Unicode <c>charlist()</c>. If compilation is done implicitly
- and the <c>unicode</c> compilation option is given to this
- function, both the regular expression and the <c><anno>Subject</anno></c>
- should be given as valid Unicode <c>charlist()</c>s.</p>
-
- <p>The result is given as a list of &quot;strings&quot;, the
- preferred datatype given in the <c>return</c> option (default iodata).</p>
- <p>If subexpressions are given in the regular expression, the
- matching subexpressions are returned in the resulting list as
- well. An example:</p>
-
-<code> re:split("Erlang","[ln]",[{return,list}]).</code>
-
- <p>will yield the result:</p>
-
-<code> ["Er","a","g"]</code>
-
- <p>while</p>
-
-<code> re:split("Erlang","([ln])",[{return,list}]).</code>
-
- <p>will yield</p>
-
-<code> ["Er","l","a","n","g"]</code>
-
- <p>The text matching the subexpression (marked by the parentheses
- in the regexp) is
- inserted in the result list where it was found. In effect this means
- that concatenating the result of a split where the whole regexp is a
- single subexpression (as in the example above) will always result in
- the original string.</p>
-
- <p>As there is no matching subexpression for the last part in
- the example (the &quot;g&quot;), there is nothing inserted after
- that. To make the group of strings and the parts matching the
- subexpressions more obvious, one might use the <c>group</c>
- option, which groups together the part of the subject string with the
- parts matching the subexpressions when the string was split:</p>
-
-<code> re:split("Erlang","([ln])",[{return,list},group]).</code>
-
- <p>gives:</p>
-
-<code> [["Er","l"],["a","n"],["g"]]</code>
-
- <p>Here the regular expression matched first the &quot;l&quot;,
- causing &quot;Er&quot; to be the first part in the result. When
- the regular expression matched, the (only) subexpression was
- bound to the &quot;l&quot;, so the &quot;l&quot; is inserted
- in the group together with &quot;Er&quot;. The next match is of
- the &quot;n&quot;, making &quot;a&quot; the next part to be
- returned. Since the subexpression is bound to the substring
- &quot;n&quot; in this case, the &quot;n&quot; is inserted into
- this group. The last group consists of the rest of the string,
- as no more matches are found.</p>
-
-
- <p>By default, all parts of the string, including the empty
- strings, are returned from the function. For example:</p>
-
-<code> re:split("Erlang","[lg]",[{return,list}]).</code>
-
- <p>will return:</p>
-
-<code> ["Er","an",[]]</code>
-
- <p>since the matching of the &quot;g&quot; in the end of the string
- leaves an empty rest which is also returned. This behaviour
- differs from the default behaviour of the split function in
- Perl, where empty strings at the end are by default removed. To
- get the
- &quot;trimming&quot; default behavior of Perl, specify
- <c>trim</c> as an option:</p>
-
-<code> re:split("Erlang","[lg]",[{return,list},trim]).</code>
-
- <p>The result will be:</p>
-
-<code> ["Er","an"]</code>
-
- <p>The &quot;trim&quot; option in effect says; &quot;give me as
- many parts as possible except the empty ones&quot;, which might
- be useful in some circumstances. You can also specify how many
- parts you want, by specifying <c>{parts,</c>N<c>}</c>:</p>
-
-<code> re:split("Erlang","[lg]",[{return,list},{parts,2}]).</code>
-
- <p>This will give:</p>
-
-<code> ["Er","ang"]</code>
-
- <p>Note that the last part is &quot;ang&quot;, not
- &quot;an&quot;, as we only specified splitting into two parts,
- and the splitting stops when enough parts are given, which is
- why the result differs from that of <c>trim</c>.</p>
-
- <p>More than three parts are not possible with this indata, so</p>
-
-<code> re:split("Erlang","[lg]",[{return,list},{parts,4}]).</code>
-
- <p>will give the same result as the default, which is to be
- viewed as &quot;an infinite number of parts&quot;.</p>
-
- <p>Specifying <c>0</c> as the number of parts gives the same
- effect as the option <c>trim</c>. If subexpressions are
- captured, empty subexpression matches at the end are also
- stripped from the result if <c>trim</c> or <c>{parts,0}</c> is
- specified.</p>
+ <p>Splits the input into parts by finding tokens according to the
+ regular expression supplied. The splitting is basically done by
+ running a global regular expression match and dividing the initial
+ string wherever a match occurs. The matching part of the string is
+ removed from the output.</p>
+ <p>As in <seealso marker="#run/3"><c>run/3</c></seealso>, an <c>mp()</c>
+ compiled with option <c>unicode</c> requires
+ <c><anno>Subject</anno></c> to be a Unicode <c>charlist()</c>. If
+ compilation is done implicitly and the <c>unicode</c> compilation
+ option is specified to this function, both the regular expression and
+ <c><anno>Subject</anno></c> are to be specified as valid Unicode
+ <c>charlist()</c>s.</p>
+ <p>The result is given as a list of &quot;strings&quot;, the preferred
+ data type specified in option <c>return</c> (default
+ <c>iodata</c>).</p>
+ <p>If subexpressions are specified in the regular expression, the
+ matching subexpressions are returned in the resulting list as
+ well. For example:</p>
+ <code>
+re:split("Erlang","[ln]",[{return,list}]).</code>
+ <p>gives</p>
+ <code>
+["Er","a","g"]</code>
+ <p>while</p>
+ <code>
+re:split("Erlang","([ln])",[{return,list}]).</code>
+ <p>gives</p>
+ <code>
+["Er","l","a","n","g"]</code>
+ <p>The text matching the subexpression (marked by the parentheses in the
+ regular expression) is inserted in the result list where it was found.
+ This means that concatenating the result of a split where the whole
+ regular expression is a single subexpression (as in the last example)
+ always results in the original string.</p>
+ <p>As there is no matching subexpression for the last part in the
+ example (the &quot;g&quot;), nothing is inserted after that. To make
+ the group of strings and the parts matching the subexpressions more
+ obvious, one can use option <c>group</c>, which groups together the
+ part of the subject string with the parts matching the subexpressions
+ when the string was split:</p>
+ <code>
+re:split("Erlang","([ln])",[{return,list},group]).</code>
+ <p>gives</p>
+ <code>
+[["Er","l"],["a","n"],["g"]]</code>
+ <p>Here the regular expression first matched the &quot;l&quot;,
+ causing &quot;Er&quot; to be the first part in the result. When
+ the regular expression matched, the (only) subexpression was
+ bound to the &quot;l&quot;, so the &quot;l&quot; is inserted
+ in the group together with &quot;Er&quot;. The next match is of
+ the &quot;n&quot;, making &quot;a&quot; the next part to be
+ returned. As the subexpression is bound to substring
+ &quot;n&quot; in this case, the &quot;n&quot; is inserted into
+ this group. The last group consists of the remaining string,
+ as no more matches are found.</p>
+ <p>By default, all parts of the string, including the empty strings,
+ are returned from the function, for example:</p>
+ <code>
+re:split("Erlang","[lg]",[{return,list}]).</code>
+ <p>gives</p>
+ <code>
+["Er","an",[]]</code>
+ <p>as the matching of the &quot;g&quot; in the end of the string
+ leaves an empty rest, which is also returned. This behavior
+ differs from the default behavior of the split function in
+ Perl, where empty strings at the end are by default removed. To
+ get the &quot;trimming&quot; default behavior of Perl, specify
+ <c>trim</c> as an option:</p>
+ <code>
+re:split("Erlang","[lg]",[{return,list},trim]).</code>
+ <p>gives</p>
+ <code>
+["Er","an"]</code>
+ <p>The &quot;trim&quot; option says; &quot;give me as many parts as
+ possible except the empty ones&quot;, which sometimes can be
+ useful. You can also specify how many parts you want, by specifying
+ <c>{parts,</c>N<c>}</c>:</p>
+ <code>
+re:split("Erlang","[lg]",[{return,list},{parts,2}]).</code>
+ <p>gives</p>
+ <code>
+["Er","ang"]</code>
+ <p>Notice that the last part is &quot;ang&quot;, not
+ &quot;an&quot;, as splitting was specified into two parts,
+ and the splitting stops when enough parts are given, which is
+ why the result differs from that of <c>trim</c>.</p>
+ <p>More than three parts are not possible with this indata, so</p>
+ <code>
+re:split("Erlang","[lg]",[{return,list},{parts,4}]).</code>
+ <p>gives the same result as the default, which is to be
+ viewed as &quot;an infinite number of parts&quot;.</p>
+ <p>Specifying <c>0</c> as the number of parts gives the same
+ effect as option <c>trim</c>. If subexpressions are
+ captured, empty subexpressions matched at the end are also
+ stripped from the result if <c>trim</c> or <c>{parts,0}</c> is
+ specified.</p>
+ <p>The <c>trim</c> behavior corresponds exactly to the Perl default.
+ <c>{parts,N}</c>, where N is a positive integer, corresponds
+ exactly to the Perl behavior with a positive numerical third
+ parameter. The default behavior of <c>split/3</c> corresponds
+ to the Perl behavior when a negative integer is specified as
+ the third parameter for the Perl routine.</p>
+ <p>Summary of options not previously described for function
+ <c>run/3</c>:</p>
+ <taglist>
+ <tag><c>{return,<anno>ReturnType</anno>}</c></tag>
+ <item>
+ <p>Specifies how the parts of the original string are presented in
+ the result list. Valid types:</p>
+ <taglist>
+ <tag><c>iodata</c></tag>
+ <item>
+ <p>The variant of <c>iodata()</c> that gives the least copying
+ of data with the current implementation (often a binary, but
+ do not depend on it).</p></item>
+ <tag><c>binary</c></tag>
+ <item>
+ <p>All parts returned as binaries.</p></item>
+ <tag><c>list</c></tag>
+ <item>
+ <p>All parts returned as lists of characters
+ (&quot;strings&quot;).</p>
+ </item>
+ </taglist>
+ </item>
+ <tag><c>group</c></tag>
+ <item>
+ <p>Groups together the part of the string with
+ the parts of the string matching the subexpressions of the
+ regular expression.</p>
+ <p>The return value from the function is in this case a
+ <c>list()</c> of <c>list()</c>s. Each sublist begins with the
+ string picked out of the subject string, followed by the parts
+ matching each of the subexpressions in order of occurrence in the
+ regular expression.</p>
+ </item>
+ <tag><c>{parts,N}</c></tag>
+ <item>
+ <p>Specifies the number of parts the subject string is to be
+ split into.</p>
+ <p>The number of parts is to be a positive integer for a specific
+ maximum number of parts, and <c>infinity</c> for the
+ maximum number of parts possible (the default). Specifying
+ <c>{parts,0}</c> gives as many parts as possible disregarding
+ empty parts at the end, the same as specifying <c>trim</c>.</p>
+ </item>
+ <tag><c>trim</c></tag>
+ <item>
+ <p>Specifies that empty parts at the end of the result list are
+ to be disregarded. The same as specifying <c>{parts,0}</c>. This
+ corresponds to the default behavior of the <c>split</c>
+ built-in function in Perl.</p>
+ </item>
+ </taglist>
+ </desc>
+ </func>
+ </funcs>
- <p>If you are familiar with Perl, the <c>trim</c>
- behaviour corresponds exactly to the Perl default, the
- <c>{parts,N}</c> where N is a positive integer corresponds
- exactly to the Perl behaviour with a positive numerical third
- parameter and the default behaviour of <c>re:split/3</c> corresponds
- to that when the Perl routine is given a negative integer as the
- third parameter.</p>
+ <section>
+ <marker id="regexp_syntax"></marker>
+ <title>Perl-Like Regular Expression Syntax</title>
+ <p>The following sections contain reference material for the regular
+ expressions used by this module. The information is based on the PCRE
+ documentation, with changes where this module behaves differently to
+ the PCRE library.</p>
+ </section>
- <p>Summary of options not previously described for the <c>re:run/3</c> function:</p>
- <taglist>
- <tag>{return,<anno>ReturnType</anno>}</tag>
- <item><p>Specifies how the parts of the original string are presented in the result list. The possible types are:</p>
- <taglist>
- <tag>iodata</tag>
- <item>The variant of <c>iodata()</c> that gives the least copying of data with the current implementation (often a binary, but don't depend on it).</item>
- <tag>binary</tag>
- <item>All parts returned as binaries.</item>
- <tag>list</tag>
- <item>All parts returned as lists of characters (&quot;strings&quot;).</item>
- </taglist>
+ <section>
+ <marker id="regexp_syntax_details"></marker>
+ <title>PCRE Regular Expression Details</title>
+ <p>The syntax and semantics of the regular expressions supported by PCRE are
+ described in detail in the following sections. Perl's regular expressions
+ are described in its own documentation, and regular expressions in general
+ are covered in many books, some with copious examples.
+ Jeffrey Friedl's "Mastering Regular Expressions", published by O'Reilly,
+ covers regular expressions in great detail. This description of the PCRE
+ regular expressions is intended as reference material.</p>
+
+ <p>The reference material is divided into the following sections:</p>
+
+ <list type="bulleted">
+ <item><seealso marker="#sect1">Special Start-of-Pattern Items</seealso>
</item>
- <tag>group</tag>
- <item>
-
- <p>Groups together the part of the string with
- the parts of the string matching the subexpressions of the
- regexp.</p>
- <p>The return value from the function will in this case be a
- <c>list()</c> of <c>list()</c>s. Each sublist begins with the
- string picked out of the subject string, followed by the parts
- matching each of the subexpressions in order of occurrence in the
- regular expression.</p>
-
+ <item><seealso marker="#sect2">Characters and Metacharacters</seealso>
</item>
- <tag>{parts,N}</tag>
- <item>
-
- <p>Specifies the number of parts the subject string is to be
- split into.</p>
-
- <p>The number of parts should be a positive integer for a specific maximum on the
- number of parts and <c>infinity</c> for the maximum number of
- parts possible (the default). Specifying <c>{parts,0}</c> gives as many parts as
- possible disregarding empty parts at the end, the same as
- specifying <c>trim</c></p>
+ <item><seealso marker="#sect3">Backslash</seealso></item>
+ <item><seealso marker="#sect4">Circumflex and Dollar</seealso></item>
+ <item><seealso marker="#sect5">Full Stop (Period, Dot) and \N</seealso>
</item>
- <tag>trim</tag>
- <item>
-
- <p>Specifies that empty parts at the end of the result list are
- to be disregarded. The same as specifying <c>{parts,0}</c>. This
- corresponds to the default behaviour of the <c>split</c>
- built in function in Perl.</p>
+ <item><seealso marker="#sect6">Matching a Single Data Unit</seealso>
+ </item>
+ <item><seealso marker="#sect7">Square Brackets and Character
+ Classes</seealso></item>
+ <item><seealso marker="#sect8">Posix Character Classes</seealso></item>
+ <item><seealso marker="#sect9">Vertical Bar</seealso></item>
+ <item><seealso marker="#sect10">Internal Option Setting</seealso></item>
+ <item><seealso marker="#sect11">Subpatterns</seealso></item>
+ <item><seealso marker="#sect12">Duplicate Subpattern Numbers</seealso>
+ </item>
+ <item><seealso marker="#sect13">Named Subpatterns</seealso></item>
+ <item><seealso marker="#sect14">Repetition</seealso></item>
+ <item><seealso marker="#sect15">Atomic Grouping and Possessive
+ Quantifiers</seealso></item>
+ <item><seealso marker="#sect16">Back References</seealso></item>
+ <item><seealso marker="#sect17">Assertions</seealso></item>
+ <item><seealso marker="#sect18">Conditional Subpatterns</seealso></item>
+ <item><seealso marker="#sect19">Comments</seealso></item>
+ <item><seealso marker="#sect20">Recursive Patterns</seealso></item>
+ <item><seealso marker="#sect21">Subpatterns as Subroutines</seealso>
</item>
- </taglist>
+ <item><seealso marker="#sect22">Oniguruma Subroutine Syntax</seealso>
+ </item>
+ <item><seealso marker="#sect23">Backtracking Control</seealso></item>
+ </list>
+ </section>
- </desc>
- </func>
- </funcs>
-
<section>
- <title>PERL LIKE REGULAR EXPRESSIONS SYNTAX</title>
- <p><marker id="regexp_syntax"></marker>
- The following sections contain reference material for the
- regular expressions used by this module. The regular expression
- reference is based on the PCRE documentation, with changes in
- cases where the re module behaves differently to the PCRE library.</p>
+ <marker id="sect1"></marker>
+ <title>Special Start-of-Pattern Items</title>
+ <p>Some options that can be passed to <seealso marker="#compile/2">
+ <c>compile/2</c></seealso> can also be set by special items at the start
+ of a pattern. These are not Perl-compatible, but are provided to make
+ these options accessible to pattern writers who are not able to change
+ the program that processes the pattern. Any number of these items can
+ appear, but they must all be together right at the start of the
+ pattern string, and the letters must be in upper case.</p>
+
+ <p><em>UTF Support</em></p>
+
+ <p>Unicode support is basically UTF-8 based. To use Unicode characters, you
+ either call <seealso marker="#compile/2"><c>compile/2</c></seealso> or
+ <seealso marker="#run/3"><c>run/3</c></seealso> with option
+ <c>unicode</c>, or the pattern must start with one of these special
+ sequences:</p>
+
+ <code>
+(*UTF8)
+(*UTF)</code>
+
+ <p>Both options give the same effect, the input string is interpreted as
+ UTF-8. Notice that with these instructions, the automatic conversion of
+ lists to UTF-8 is not performed by the <c>re</c> functions. Therefore,
+ using these sequences is not recommended.
+ Add option <c>unicode</c> when running
+ <seealso marker="#compile/2"><c>compile/2</c></seealso> instead.</p>
+
+ <p>Some applications that allow their users to supply patterns can wish to
+ restrict them to non-UTF data for security reasons. If option
+ <c>never_utf</c> is set at compile time, (*UTF), and so on, are not
+ allowed, and their appearance causes an error.</p>
+
+ <p><em>Unicode Property Support</em></p>
+
+ <p>The following is another special sequence that can appear at the start of
+ a pattern:</p>
+
+ <code>
+(*UCP)</code>
+
+ <p>This has the same effect as setting option <c>ucp</c>: it causes
+ sequences such as \d and \w to use Unicode properties to
+ determine character types, instead of recognizing only characters with
+ codes &lt; 256 through a lookup table.</p>
+
+ <p><em>Disabling Startup Optimizations</em></p>
+
+ <p>If a pattern starts with <c>(*NO_START_OPT)</c>,
+ it has the same effect as
+ setting option <c>no_start_optimize</c> at compile time.</p>
+
+ <p><em>Newline Conventions</em></p>
+ <marker id="newline_conventions"></marker>
+
+ <p>PCRE supports five conventions for indicating line breaks in strings: a
+ single CR (carriage return) character, a single LF (line feed) character,
+ the two-character sequence CRLF, any of the three preceding, and any
+ Unicode newline sequence.</p>
+
+ <p>A newline convention can also be specified by starting a pattern string
+ with one of the following five sequences:</p>
+
+ <taglist>
+ <tag>(*CR)</tag><item>Carriage return</item>
+ <tag>(*LF)</tag><item>Line feed</item>
+ <tag>(*CRLF)</tag><item>>Carriage return followed by
+ line feed</item>
+ <tag>(*ANYCRLF)</tag><item>Any of the three above</item>
+ <tag>(*ANY)</tag><item>All Unicode newline sequences</item>
+ </taglist>
+
+ <p>These override the default and the options specified to
+ <seealso marker="#compile/2"><c>compile/2</c></seealso>. For example, the
+ following pattern changes the convention to CR:</p>
+
+ <code>
+(*CR)a.b</code>
+
+ <p>This pattern matches <c>a\nb</c>, as LF is no longer a newline.
+ If more than one of them is present, the last one is used.</p>
+
+ <p>The newline convention affects where the circumflex and dollar assertions
+ are true. It also affects the interpretation of the dot metacharacter when
+ <c>dotall</c> is not set, and the behavior of \N. However, it does not
+ affect what the \R escape sequence matches. By default, this is any
+ Unicode newline sequence, for Perl compatibility. However, this can be
+ changed; see the description of \R in section
+ <seealso marker="#newline_sequences">Newline Sequences</seealso>. A change
+ of the \R setting can be combined with a change of the newline
+ convention.</p>
+
+ <p><em>Setting Match and Recursion Limits</em></p>
+
+ <p>The caller of <seealso marker="#run/3"><c>run/3</c></seealso> can set a
+ limit on the number of times the internal match() function is called and
+ on the maximum depth of recursive calls. These facilities are provided to
+ catch runaway matches that are provoked by patterns with huge matching
+ trees (a typical example is a pattern with nested unlimited repeats) and
+ to avoid running out of system stack by too much recursion. When one of
+ these limits is reached, <c>pcre_exec()</c> gives an error return. The
+ limits can also be set by items at the start of the pattern of the
+ following forms:</p>
+
+ <code>
+(*LIMIT_MATCH=d)
+(*LIMIT_RECURSION=d)</code>
+
+ <p>Here d is any number of decimal digits. However, the value of the setting
+ must be less than the value set by the caller of <c>run/3</c> for it to
+ have any effect. That is, the pattern writer can lower the limit set by
+ the programmer, but not raise it. If there is more than one setting of one
+ of these limits, the lower value is used.</p>
+
+ <p>The default value for both the limits is 10,000,000 in the Erlang
+ VM. Notice that the recursion limit does not affect the stack depth of the
+ VM, as PCRE for Erlang is compiled in such a way that the match function
+ never does recursion on the C stack.</p>
</section>
-<section><title>PCRE regular expression details</title>
-
-<p>The syntax and semantics of the regular expressions that are supported by PCRE
-are described in detail below. Perl's regular expressions are described in its own documentation, and
-regular expressions in general are covered in a number of books, some of which
-have copious examples. Jeffrey Friedl's "Mastering Regular Expressions",
-published by O'Reilly, covers regular expressions in great detail. This
-description of PCRE's regular expressions is intended as reference material.</p>
-<p>The reference material is divided into the following sections:</p>
-<list>
-<item><seealso marker="#sect1">Special start-of-pattern items</seealso></item>
-<item><seealso marker="#sect2">Characters and metacharacters</seealso></item>
-<item><seealso marker="#sect3">Backslash</seealso></item>
-<item><seealso marker="#sect4">Circumflex and dollar</seealso></item>
-<item><seealso marker="#sect5">Full stop (period, dot) and \N</seealso></item>
-<item><seealso marker="#sect6">Matching a single data unit</seealso></item>
-<item><seealso marker="#sect7">Square brackets and character classes</seealso></item>
-<item><seealso marker="#sect8">POSIX character classes</seealso></item>
-<item><seealso marker="#sect9">Vertical bar</seealso></item>
-<item><seealso marker="#sect10">Internal option setting</seealso></item>
-<item><seealso marker="#sect11">Subpatterns</seealso></item>
-<item><seealso marker="#sect12">Duplicate subpattern numbers</seealso></item>
-<item><seealso marker="#sect13">Named subpatterns</seealso></item>
-<item><seealso marker="#sect14">Repetition</seealso></item>
-<item><seealso marker="#sect15">Atomic grouping and possessive quantifiers</seealso></item>
-<item><seealso marker="#sect16">Back references</seealso></item>
-<item><seealso marker="#sect17">Assertions</seealso></item>
-<item><seealso marker="#sect18">Conditional subpatterns</seealso></item>
-<item><seealso marker="#sect19">Comments</seealso></item>
-<item><seealso marker="#sect20">Recursive patterns</seealso></item>
-<item><seealso marker="#sect21">Subpatterns as subroutines</seealso></item>
-<item><seealso marker="#sect22">Oniguruma subroutine syntax</seealso></item>
-<!-- XXX C Interface
-<item><seealso marker="#sect22">Callouts</seealso></item>
--->
-<item><seealso marker="#sect23">Backtracking control</seealso></item>
-</list>
-
-</section>
-
-
-<section><marker id="sect1"></marker><title>Special start-of-pattern items</title>
-
-<p>A number of options that can be passed to <c>re:compile/2</c> can also be set
-by special items at the start of a pattern. These are not Perl-compatible, but
-are provided to make these options accessible to pattern writers who are not
-able to change the program that processes the pattern. Any number of these
-items may appear, but they must all be together right at the start of the
-pattern string, and the letters must be in upper case.</p>
-
-<p><em>UTF support</em></p>
-<p>
-Unicode support is basically UTF-8 based. To use Unicode characters, you either
-call <c>re:compile/2</c>/<c>re:run/3</c> with the <c>unicode</c> option, or the
- pattern must start with one of these special sequences:</p>
-<quote>
-<p> (*UTF8)</p>
-<p> (*UTF)</p>
-</quote>
-
-<p>Both options give the same effect, the input string is interpreted
-as UTF-8. Note that with these instructions, the automatic conversion
-of lists to UTF-8 is not performed by the <c>re</c> functions, why
-using these options is not recommended. Add the <c>unicode</c> option
-when running <c>re:compile/2</c> instead.</p>
-
-<p>
-Some applications that allow their users to supply patterns may wish to
-restrict them to non-UTF data for security reasons. If the <c>never_utf</c>
-option is set at compile time, (*UTF) etc. are not allowed, and their
-appearance causes an error.
-</p>
-
-<p><em>Unicode property support</em></p>
-<p>Another special sequence that may appear at the start of a pattern is</p>
-<quote>
-<p> (*UCP)</p>
-</quote>
-<p>This has the same effect as setting the <c>ucp</c> option: it causes sequences
-such as \d and \w to use Unicode properties to determine character types,
-instead of recognizing only characters with codes less than 256 via a lookup
-table.
-</p>
-
-<p><em>Disabling start-up optimizations</em></p>
-<p>
-If a pattern starts with (*NO_START_OPT), it has the same effect as setting the
-<c>no_Start_optimize</c> option at compile time.</p>
-
-<p><em>Newline conventions</em></p>
-
-<p>PCRE supports
-five
-different conventions for indicating line breaks in
-strings: a single CR (carriage return) character, a single LF (linefeed)
-character, the two-character sequence CRLF
-, any of the three preceding, or any
-Unicode newline sequence.</p>
-
-<p>It is also possible to specify a newline convention by starting a pattern
-string with one of the following five sequences:</p>
-
-<taglist>
- <tag>(*CR)</tag> <item>carriage return</item>
- <tag>(*LF)</tag> <item>linefeed</item>
- <tag>(*CRLF)</tag> <item>carriage return, followed by linefeed</item>
- <tag>(*ANYCRLF)</tag> <item>any of the three above</item>
- <tag>(*ANY)</tag> <item>all Unicode newline sequences</item>
-</taglist>
-
-<p>These override the default and the options given to <c>re:compile/2</c>. For
-example, the pattern:</p>
-
-<quote>
-<p> (*CR)a.b</p>
-</quote>
-
-<p>changes the convention to CR. That pattern matches "a\nb" because LF is no
-longer a newline. If more than one of them is present, the last one
-is used.</p>
-
-<p>The newline convention affects where the circumflex and dollar assertions are
-true. It also affects the interpretation of the dot metacharacter when
-<c>dotall</c> is not set, and the behaviour of \N. However, it does not affect
-what the \R escape sequence matches. By default, this is any Unicode newline
-sequence, for Perl compatibility. However, this can be changed; see the
-description of \R in the section entitled
-
-<em>"Newline sequences"</em>
-
-below. A change of \R setting can be combined with a change of newline
-convention.</p>
-
-<p><em>Setting match and recursion limits</em></p>
-
-<p>The caller of <c>re:run/3</c> can set a limit on the number of times the internal match() function is called and on the maximum depth of recursive calls. These facilities are provided to catch runaway matches that are provoked by patterns with huge matching trees (a typical example is a pattern with nested unlimited repeats) and to avoid running out of system stack by too much recursion. When one of these limits is reached, pcre_exec() gives an error return. The limits can also be set by items at the start of the pattern of the form</p>
-<quote>
-<p> (*LIMIT_MATCH=d)</p>
-<p> (*LIMIT_RECURSION=d)</p>
-</quote>
-<p>where d is any number of decimal digits. However, the value of the setting must be less than the value set by the caller of <c>re:run/3</c> for it to have any effect. In other words, the pattern writer can lower the limit set by the programmer, but not raise it. If there is more than one setting of one of these limits, the lower value is used.</p>
-
-<p>The current default value for both the limits are 10000000 in the Erlang
-VM. Note that the recursion limit does not actually affect the stack
-depth of the VM, as PCRE for Erlang is compiled in such a way that the
-match function never does recursion on the "C-stack".</p>
-
-</section>
-
-<section><marker id="sect2"></marker><title>Characters and metacharacters</title>
-<!-- .rs -->
-
-<p>A regular expression is a pattern that is matched against a subject
-string from left to right. Most characters stand for themselves in a
-pattern, and match the corresponding characters in the subject. As a
-trivial example, the pattern</p>
-
-<quote>
-<p> The quick brown fox</p>
-</quote>
-
-<p>matches a portion of a subject string that is identical to
-itself. When caseless matching is specified (the <c>caseless</c>
-option), letters are matched independently of case.</p>
-
-<p>The power of regular expressions comes from the ability to include
-alternatives and repetitions in the pattern. These are encoded in the
-pattern by the use of <em>metacharacters</em>, which do not stand for
-themselves but instead are interpreted in some special way.</p>
-
-<p>There are two different sets of metacharacters: those that are recognized
-anywhere in the pattern except within square brackets, and those that are
-recognized within square brackets. Outside square brackets, the metacharacters
-are as follows:</p>
-
-<taglist>
- <tag>\</tag> <item>general escape character with several uses</item>
- <tag>^</tag> <item>assert start of string (or line, in multiline mode)</item>
- <tag>$</tag> <item>assert end of string (or line, in multiline mode)</item>
- <tag>.</tag> <item>match any character except newline (by default)</item>
- <tag>[</tag> <item>start character class definition</item>
- <tag>|</tag> <item>start of alternative branch</item>
- <tag>(</tag> <item>start subpattern</item>
- <tag>)</tag> <item>end subpattern</item>
- <tag>?</tag> <item>extends the meaning of (,
- also 0 or 1 quantifier,
- also quantifier minimizer</item>
- <tag>*</tag> <item>0 or more quantifier</item>
- <tag>+</tag> <item>1 or more quantifier,
- also "possessive quantifier"</item>
- <tag>{</tag> <item>start min/max quantifier</item>
-</taglist>
-
-<p>Part of a pattern that is in square brackets is called a "character class". In
-a character class the only metacharacters are:</p>
-
-<taglist>
- <tag>\</tag> <item>general escape character</item>
- <tag>^</tag> <item>negate the class, but only if the first character</item>
- <tag>-</tag> <item>indicates character range</item>
- <tag>[</tag> <item>POSIX character class (only if followed by POSIX
- syntax)</item>
- <tag>]</tag> <item>terminates the character class</item>
+ <section>
+ <marker id="sect2"></marker>
+ <title>Characters and Metacharacters</title>
+ <!-- .rs -->
+ <p>A regular expression is a pattern that is matched against a subject
+ string from left to right. Most characters stand for themselves in a
+ pattern and match the corresponding characters in the subject. As a
+ trivial example, the following pattern matches a portion of a subject
+ string that is identical to itself:</p>
+
+ <code>
+The quick brown fox</code>
+
+ <p>When caseless matching is specified (option <c>caseless</c>), letters
+ are matched independently of case.</p>
+
+ <p>The power of regular expressions comes from the ability to include
+ alternatives and repetitions in the pattern. These are encoded in the
+ pattern by the use of <em>metacharacters</em>, which do not stand for
+ themselves but instead are interpreted in some special way.</p>
+
+ <p>Two sets of metacharacters exist: those that are recognized anywhere in
+ the pattern except within square brackets, and those that are recognized
+ within square brackets. Outside square brackets, the metacharacters are
+ as follows:</p>
+
+ <taglist>
+ <tag>\</tag><item>General escape character with many uses</item>
+ <tag>^</tag><item>Assert start of string (or line, in multiline mode)
+ </item>
+ <tag>$</tag><item>Assert end of string (or line, in multiline mode)</item>
+ <tag>.</tag><item>Match any character except newline (by default)</item>
+ <tag>[</tag><item>Start character class definition</item>
+ <tag>|</tag><item>Start of alternative branch</item>
+ <tag>(</tag><item>Start subpattern</item>
+ <tag>)</tag><item>End subpattern</item>
+ <tag>?</tag><item>Extends the meaning of (, also 0 or 1 quantifier, also
+ quantifier minimizer</item>
+ <tag>*</tag><item>0 or more quantifiers</item>
+ <tag>+</tag><item>1 or more quantifier, also "possessive quantifier"
+ </item>
+ <tag>{</tag><item>Start min/max quantifier</item>
</taglist>
-<p>The following sections describe the use of each of the metacharacters.</p>
-
-
-</section>
-
-<section><marker id="sect3"></marker><title>Backslash</title>
+ <p>Part of a pattern within square brackets is called a "character class".
+ The following are the only metacharacters in a character class:</p>
+ <taglist>
+ <tag>\</tag><item>General escape character</item>
+ <tag>^</tag><item>Negate the class, but only if the first character</item>
+ <tag>-</tag><item>Indicates character range</item>
+ <tag>[</tag><item>Posix character class (only if followed by Posix syntax)
+ </item>
+ <tag>]</tag><item>Terminates the character class</item>
+ </taglist>
-<p>The backslash character has several uses. Firstly, if it is followed by a
-character that is not a number or a letter, it takes away any special meaning that character
-may have. This use of backslash as an escape character applies both inside and
-outside character classes.</p>
-
-<p>For example, if you want to match a * character, you write \* in the pattern.
-This escaping action applies whether or not the following character would
-otherwise be interpreted as a metacharacter, so it is always safe to precede a
-non-alphanumeric with backslash to specify that it stands for itself. In
-particular, if you want to match a backslash, you write \\.</p>
-
-<p>In <c>unicode</c> mode, only ASCII numbers and letters have any special meaning after a
-backslash. All other characters (in particular, those whose codepoints are
-greater than 127) are treated as literals.</p>
+ <p>The following sections describe the use of each metacharacter.</p>
+ </section>
-<p>If a pattern is compiled with the <c>extended</c> option, white space in the
-pattern (other than in a character class) and characters between a # outside
-a character class and the next newline are ignored. An escaping backslash can
-be used to include a white space or # character as part of the pattern.</p>
+ <section>
+ <marker id="sect3"></marker>
+ <title>Backslash</title>
+ <p>The backslash character has many uses. First, if it is followed by a
+ character that is not a number or a letter, it takes away any special
+ meaning that a character can have. This use of backslash as an escape
+ character applies both inside and outside character classes.</p>
+
+ <p>For example, if you want to match a * character, you write \* in the
+ pattern. This escaping action applies if the following character would
+ otherwise be interpreted as a metacharacter, so it is always safe to
+ precede a non-alphanumeric with backslash to specify that it stands for
+ itself. In particular, if you want to match a backslash, write \\.</p>
+
+ <p>In <c>unicode</c> mode, only ASCII numbers and letters have any special
+ meaning after a backslash. All other characters (in particular, those
+ whose code points are &gt; 127) are treated as literals.</p>
+
+ <p>If a pattern is compiled with option <c>extended</c>, whitespace in the
+ pattern (other than in a character class) and characters between a #
+ outside a character class and the next newline are ignored. An escaping
+ backslash can be used to include a whitespace or # character as part of
+ the pattern.</p>
+
+ <p>To remove the special meaning from a sequence of characters, put them
+ between \Q and \E. This is different from Perl in that $ and @ are
+ handled as literals in \Q...\E sequences in PCRE, while $ and @ cause
+ variable interpolation in Perl. Notice the following examples:</p>
-<p>If you want to remove the special meaning from a sequence of characters, you
-can do so by putting them between \Q and \E. This is different from Perl in
-that $ and @ are handled as literals in \Q...\E sequences in PCRE, whereas in
-Perl, $ and @ cause variable interpolation. Note the following examples:</p>
<code type="none">
- Pattern PCRE matches Perl matches
-
- \Qabc$xyz\E abc$xyz abc followed by the contents of $xyz
- \Qabc\$xyz\E abc\$xyz abc\$xyz
- \Qabc\E\$\Qxyz\E abc$xyz abc$xyz</code>
-
-
-<p>The \Q...\E sequence is recognized both inside and outside
-character classes. An isolated \E that is not preceded by \Q is
-ignored. If \Q is not followed by \E later in the pattern, the literal
-interpretation continues to the end of the pattern (that is, \E is
-assumed at the end). If the isolated \Q is inside a character class,
-this causes an error, because the character class is not
-terminated.</p>
-
-<p><em>Non-printing characters</em></p>
-
-<p>A second use of backslash provides a way of encoding non-printing characters
-in patterns in a visible manner. There is no restriction on the appearance of
-non-printing characters, apart from the binary zero that terminates a pattern,
-but when a pattern is being prepared by text editing, it is often easier to use
-one of the following escape sequences than the binary character it represents:</p>
-
-<taglist>
- <tag>\a</tag> <item>alarm, that is, the BEL character (hex 07)</item>
- <tag>\cx</tag> <item>"control-x", where x is any ASCII character</item>
- <tag>\e </tag> <item>escape (hex 1B)</item>
- <tag>\f</tag> <item>form feed (hex 0C)</item>
- <tag>\n</tag> <item>linefeed (hex 0A)</item>
- <tag>\r</tag> <item>carriage return (hex 0D)</item>
- <tag>\t </tag> <item>tab (hex 09)</item>
- <tag>\ddd</tag> <item>character with octal code ddd, or back reference</item>
- <tag>\xhh </tag> <item>character with hex code hh</item>
- <tag>\x{hhh..}</tag> <item>character with hex code hhh..</item>
-</taglist>
-
-<p>The precise effect of \cx on ASCII characters is as follows: if x is a lower
-case letter, it is converted to upper case. Then bit 6 of the character (hex
-40) is inverted. Thus \cA to \cZ become hex 01 to hex 1A (A is 41, Z is 5A),
-but \c{ becomes hex 3B ({ is 7B), and \c; becomes hex 7B (; is 3B). If the
-data item (byte or 16-bit value) following \c has a value greater than 127, a
-compile-time error occurs. This locks out non-ASCII characters in all modes.</p>
-
-<p>The \c facility was designed for use with ASCII characters, but with the
-extension to Unicode it is even less useful than it once was.</p>
-
-<p>By default, after \x, from zero to two hexadecimal digits are read (letters
-can be in upper or lower case). Any number of hexadecimal digits may appear
-between \x{ and }, but the character code is constrained as follows:</p>
-<taglist>
- <tag>8-bit non-Unicode mode</tag> <item>less than 0x100</item>
- <tag>8-bit UTF-8 mode</tag> <item>less than 0x10ffff and a valid codepoint</item>
-</taglist>
-<p>Invalid Unicode codepoints are the range 0xd800 to 0xdfff (the so-called
-"surrogate" codepoints), and 0xffef.</p>
-
-<p>If characters other than hexadecimal digits appear between \x{ and }, or if
-there is no terminating }, this form of escape is not recognized. Instead, the
-initial \x will be interpreted as a basic hexadecimal escape, with no
-following digits, giving a character whose value is zero.</p>
-
-<p>Characters whose value is less than 256 can be defined by either of the two
-syntaxes for \x. There is no difference in the way they are handled. For
-example, \xdc is exactly the same as \x{dc}.</p>
-
-<p>After \0 up to two further octal digits are read. If there are fewer than two
-digits, just those that are present are used. Thus the sequence \0\x\07
-specifies two binary zeros followed by a BEL character (code value 7). Make
-sure you supply two digits after the initial zero if the pattern character that
-follows is itself an octal digit.</p>
-
-<p>The handling of a backslash followed by a digit other than 0 is complicated.
-Outside a character class, PCRE reads it and any following digits as a decimal
-number. If the number is less than 10, or if there have been at least that many
-previous capturing left parentheses in the expression, the entire sequence is
-taken as a <em>back reference</em>. A description of how this works is given
-later, following the discussion of parenthesized subpatterns.</p>
-
-
-<p>Inside a character class, or if the decimal number is greater than 9 and there
-have not been that many capturing subpatterns, PCRE re-reads up to three octal
-digits following the backslash, and uses them to generate a data character. Any
-subsequent digits stand for themselves. The value of the character is
-constrained in the same way as characters specified in hexadecimal.
-For example:</p>
-
-<taglist>
- <tag>\040</tag> <item>is another way of writing a ASCII space</item>
-
- <tag>\40</tag> <item>is the same, provided there are fewer than 40
- previous capturing subpatterns</item>
- <tag>\7</tag> <item>is always a back reference</item>
-
- <tag>\11</tag> <item> might be a back reference, or another way of
- writing a tab</item>
- <tag>\011</tag> <item>is always a tab</item>
- <tag>\0113</tag> <item>is a tab followed by the character "3"</item>
-
- <tag>\113</tag> <item>might be a back reference, otherwise the
- character with octal code 113</item>
-
- <tag>\377</tag> <item>might be a back reference, otherwise
- the value 255 (decimal)</item>
-
- <tag>\81</tag> <item>is either a back reference, or a binary zero
- followed by the two characters "8" and "1"</item>
-</taglist>
-
-<p>Note that octal values of 100 or greater must not be introduced by
-a leading zero, because no more than three octal digits are ever
-read.</p>
-
-<p>All the sequences that define a single character value can be used both inside
-and outside character classes. In addition, inside a character class, \b is
-interpreted as the backspace character (hex 08).</p>
-<p>\N is not allowed in a character class. \B, \R, and \X are not special
-inside a character class. Like other unrecognized escape sequences, they are
-treated as the literal characters "B", "R", and "X". Outside a character class, these
-sequences have different meanings.</p>
-
-<p><em>Unsupported escape sequences</em></p>
-
-<p>In Perl, the sequences \l, \L, \u, and \U are recognized by its string
-handler and used to modify the case of following characters. PCRE
-does not support these escape sequences.</p>
-
-<p><em>Absolute and relative back references</em></p>
-
-<p>The sequence \g followed by an unsigned or a negative number,
-optionally enclosed in braces, is an absolute or relative back
-reference. A named back reference can be coded as \g{name}. Back
-references are discussed later, following the discussion of
-parenthesized subpatterns.</p>
-
-<p><em>Absolute and relative subroutine calls</em></p>
-<p>For compatibility with Oniguruma, the non-Perl syntax \g followed by a name or
-a number enclosed either in angle brackets or single quotes, is an alternative
-syntax for referencing a subpattern as a "subroutine". Details are discussed
-later.
-Note that \g{...} (Perl syntax) and \g&lt;...&gt; (Oniguruma syntax) are <em>not</em>
-synonymous. The former is a back reference; the latter is a
-subroutine call.</p>
-
-<p><em>Generic character types</em></p>
-
-<p>Another use of backslash is for specifying generic character types:</p>
-
-<taglist>
- <tag>\d</tag> <item>any decimal digit</item>
- <tag>\D</tag> <item>any character that is not a decimal digit</item>
- <tag>\h</tag> <item>any horizontal white space character</item>
- <tag>\H</tag> <item>any character that is not a horizontal white space character</item>
- <tag>\s</tag> <item>any white space character</item>
- <tag>\S</tag> <item>any character that is not a white space character</item>
- <tag>\v</tag> <item>any vertical white space character</item>
- <tag>\V</tag> <item>any character that is not a vertical white space character</item>
- <tag>\w</tag> <item>any "word" character</item>
- <tag>\W</tag> <item>any "non-word" character</item>
-</taglist>
-
-<p>There is also the single sequence \N, which matches a non-newline character.
-This is the same as the "." metacharacter
-when <c>dotall</c> is not set. Perl also uses \N to match characters by name;
-PCRE does not support this.</p>
-
-<p>Each pair of lower and upper case escape sequences partitions the complete set
-of characters into two disjoint sets. Any given character matches one, and only
-one, of each pair. The sequences can appear both inside and outside character
-classes. They each match one character of the appropriate type. If the current
-matching point is at the end of the subject string, all of them fail, because
-there is no character to match.</p>
-
-<p>For compatibility with Perl, \s does not match the VT character (code 11).
-This makes it different from the POSIX "space" class. The \s characters
-are HT (9), LF (10), FF (12), CR (13), and space (32). If "use locale;" is
-included in a Perl script, \s may match the VT character. In PCRE, it never
-does.</p>
-
-<p>A "word" character is an underscore or any character that is a letter or digit.
-By default, the definition of letters and digits is controlled by PCRE's
-low-valued character tables, in Erlang's case (and without the <c>unicode</c> option),
-the ISO-Latin-1 character set.</p>
-
-<p>By default, in <c>unicode</c> mode, characters with values greater than 255,
-i.e. all characters outside the ISO-Latin-1 character set, never match
-\d, \s, or \w, and always match \D, \S, and \W. These sequences retain
-their original meanings from before UTF support was available, mainly for
-efficiency reasons. However, if the <c>ucp</c> option is set, the behaviour is changed so that Unicode
-properties are used to determine character types, as follows:</p>
-<taglist>
- <tag>\d</tag> <item>any character that \p{Nd} matches (decimal digit)</item>
- <tag>\s</tag> <item>any character that \p{Z} matches, plus HT, LF, FF, CR)</item>
- <tag> \w</tag> <item>any character that \p{L} or \p{N} matches, plus underscore)</item>
-</taglist>
-<p>The upper case escapes match the inverse sets of characters. Note that \d
-matches only decimal digits, whereas \w matches any Unicode digit, as well as
-any Unicode letter, and underscore. Note also that <c>ucp</c> affects \b, and
-\B because they are defined in terms of \w and \W. Matching these sequences
-is noticeably slower when <c>ucp</c> is set.</p>
-
-<p>The sequences \h, \H, \v, and \V are features that were added to Perl at
-release 5.10. In contrast to the other sequences, which match only ASCII
-characters by default, these always match certain high-valued codepoints,
-whether or not <c>ucp</c> is set. The horizontal space characters are:</p>
-
-<taglist>
- <tag>U+0009</tag> <item>Horizontal tab (HT)</item>
- <tag>U+0020</tag> <item>Space</item>
- <tag>U+00A0</tag> <item>Non-break space</item>
- <tag>U+1680</tag> <item>Ogham space mark</item>
- <tag>U+180E</tag> <item>Mongolian vowel separator</item>
- <tag>U+2000</tag> <item>En quad</item>
- <tag>U+2001</tag> <item>Em quad</item>
- <tag>U+2002</tag> <item>En space</item>
- <tag>U+2003</tag> <item>Em space</item>
- <tag>U+2004</tag> <item>Three-per-em space</item>
- <tag>U+2005</tag> <item>Four-per-em space</item>
- <tag>U+2006</tag> <item>Six-per-em space</item>
- <tag>U+2007</tag> <item>Figure space</item>
- <tag>U+2008</tag> <item>Punctuation space</item>
- <tag>U+2009</tag> <item>Thin space</item>
- <tag>U+200A</tag> <item>Hair space</item>
- <tag>U+202F</tag> <item>Narrow no-break space</item>
- <tag>U+205F</tag> <item>Medium mathematical space</item>
- <tag>U+3000</tag> <item>Ideographic space</item>
-</taglist>
-
-<p>The vertical space characters are:</p>
-
-<taglist>
- <tag>U+000A</tag> <item>Linefeed (LF)</item>
- <tag>U+000B</tag> <item>Vertical tab (VT)</item>
- <tag>U+000C</tag> <item>Form feed (FF)</item>
- <tag>U+000D</tag> <item>Carriage return (CR)</item>
- <tag>U+0085</tag> <item>Next line (NEL)</item>
- <tag>U+2028</tag> <item>Line separator</item>
- <tag>U+2029</tag> <item>Paragraph separator</item>
-</taglist>
-
-<p>In 8-bit, non-UTF-8 mode, only the characters with codepoints less than 256 are
-relevant.</p>
-
-<p><em>Newline sequences</em></p>
-
-<p>Outside a character class, by default, the escape sequence \R matches any
-Unicode newline sequence. In non-UTF-8 mode \R is
-equivalent to the following:</p>
-
-<quote><p> (?&gt;\r\n|\n|\x0b|\f|\r|\x85)</p></quote>
-
-<p>This is an example of an "atomic group", details of which are given below.</p>
-
-<p>This particular group matches either the two-character sequence CR followed by
-LF, or one of the single characters LF (linefeed, U+000A), VT (vertical tab,
-U+000B), FF (form feed, U+000C), CR (carriage return, U+000D), or NEL (next
-line, U+0085). The two-character sequence is treated as a single unit that
-cannot be split.</p>
-
-<p>In Unicode mode, two additional characters whose codepoints are greater than 255
-are added: LS (line separator, U+2028) and PS (paragraph separator, U+2029).
-Unicode character property support is not needed for these characters to be
-recognized.</p>
-
-
-<p>It is possible to restrict \R to match only CR, LF, or CRLF (instead of the
-complete set of Unicode line endings) by setting the option <c>bsr_anycrlf</c>
-either at compile time or when the pattern is matched. (BSR is an abbreviation
-for "backslash R".) This can be made the default when PCRE is built; if this is
-the case, the other behaviour can be requested via the <c>bsr_unicode</c> option.
-It is also possible to specify these settings by starting a pattern string with
-one of the following sequences:</p>
-
-<p> (*BSR_ANYCRLF) CR, LF, or CRLF only
- (*BSR_UNICODE) any Unicode newline sequence</p>
-
-<p>These override the default and the options given to the compiling function, but
-they can themselves be overridden by options given to a matching function. Note
-that these special settings, which are not Perl-compatible, are recognized only
-at the very start of a pattern, and that they must be in upper case. If more
-than one of them is present, the last one is used. They can be combined with a
-change of newline convention; for example, a pattern can start with:</p>
-
-<p> (*ANY)(*BSR_ANYCRLF)</p>
-
-<p>They can also be combined with the (*UTF8), (*UTF) or
-(*UCP) special sequences. Inside a character class, \R is treated as an
-unrecognized escape sequence, and so matches the letter "R" by default.</p>
-
-<p><em>Unicode character properties</em></p>
-
-<p>Three additional
-escape sequences that match characters with specific properties are available.
-When in 8-bit non-UTF-8 mode, these sequences are of course limited to testing
-characters whose codepoints are less than 256, but they do work in this mode.
-The extra escape sequences are:</p>
-<taglist>
-<tag>\p{<em>xx</em>}</tag> <item>a character with the <em>xx</em> property</item>
-<tag>\P{<em>xx</em>}</tag> <item>a character without the <em>xx</em> property</item>
-<tag>\X</tag> <item>a Unicode extended grapheme cluster</item>
-</taglist>
-
-<p>The property names represented by <i>xx</i> above are limited to the Unicode
-script names, the general category properties, "Any", which matches any
-character (including newline), and some special PCRE properties (described
-in the next section).
-Other Perl properties such as "InMusicalSymbols" are not currently supported by
-PCRE. Note that \P{Any} does not match any characters, so always causes a
-match failure.</p>
-
-<p>Sets of Unicode characters are defined as belonging to certain scripts. A
-character from one of these sets can be matched using a script name. For
-example:</p>
-
-<p> \p{Greek}
- \P{Han}</p>
-
-<p>Those that are not part of an identified script are lumped together as
-"Common". The current list of scripts is:</p>
-
-<list>
-<item>Arabic</item>
-<item>Armenian</item>
-<item>Avestan</item>
-<item>Balinese</item>
-<item>Bamum</item>
-<item>Batak</item>
-<item>Bengali</item>
-<item>Bopomofo</item>
-<item>Braille</item>
-<item>Buginese</item>
-<item>Buhid</item>
-<item>Canadian_Aboriginal</item>
-<item>Carian</item>
-<item>Chakma</item>
-<item>Cham</item>
-<item>Cherokee</item>
-<item>Common</item>
-<item>Coptic</item>
-<item>Cuneiform</item>
-<item>Cypriot</item>
-<item>Cyrillic</item>
-<item>Deseret</item>
-<item>Devanagari</item>
-<item>Egyptian_Hieroglyphs</item>
-<item>Ethiopic</item>
-<item>Georgian</item>
-<item>Glagolitic</item>
-<item>Gothic</item>
-<item>Greek</item>
-<item>Gujarati</item>
-<item>Gurmukhi</item>
-<item>Han</item>
-<item>Hangul</item>
-<item>Hanunoo</item>
-<item>Hebrew</item>
-<item>Hiragana</item>
-<item>Imperial_Aramaic</item>
-<item>Inherited</item>
-<item>Inscriptional_Pahlavi</item>
-<item>Inscriptional_Parthian</item>
-<item>Javanese</item>
-<item>Kaithi</item>
-<item>Kannada</item>
-<item>Katakana</item>
-<item>Kayah_Li</item>
-<item>Kharoshthi</item>
-<item>Khmer</item>
-<item>Lao</item>
-<item>Latin</item>
-<item>Lepcha</item>
-<item>Limbu</item>
-<item>Linear_B</item>
-<item>Lisu</item>
-<item>Lycian</item>
-<item>Lydian</item>
-<item>Malayalam</item>
-<item>Mandaic</item>
-<item>Meetei_Mayek</item>
-<item>Meroitic_Cursive</item>
-<item>Meroitic_Hieroglyphs</item>
-<item>Miao</item>
-<item>Mongolian</item>
-<item>Myanmar</item>
-<item>New_Tai_Lue</item>
-<item>Nko</item>
-<item>Ogham</item>
-<item>Old_Italic</item>
-<item>Old_Persian</item>
-<item>Oriya</item>
-<item>Old_South_Arabian</item>
-<item>Old_Turkic</item>
-<item>Ol_Chiki</item>
-<item>Osmanya</item>
-<item>Phags_Pa</item>
-<item>Phoenician</item>
-<item>Rejang</item>
-<item>Runic</item>
-<item>Samaritan</item>
-<item>Saurashtra</item>
-<item>Sharada</item>
-<item>Shavian</item>
-<item>Sinhala</item>
-<item>Sora_Sompeng</item>
-<item>Sundanese</item>
-<item>Syloti_Nagri</item>
-<item>Syriac</item>
-<item>Tagalog</item>
-<item>Tagbanwa</item>
-<item>Tai_Le</item>
-<item>Tai_Tham</item>
-<item>Tai_Viet</item>
-<item>Takri</item>
-<item>Tamil</item>
-<item>Telugu</item>
-<item>Thaana</item>
-<item>Thai</item>
-<item>Tibetan</item>
-<item>Tifinagh</item>
-<item>Ugaritic</item>
-<item>Vai</item>
-<item>Yi</item>
-</list>
-
-<p>Each character has exactly one Unicode general category property, specified by
-a two-letter abbreviation. For compatibility with Perl, negation can be
-specified by including a circumflex between the opening brace and the property
-name. For example, \p{^Lu} is the same as \P{Lu}.</p>
-
-<p>If only one letter is specified with \p or \P, it includes all the general
-category properties that start with that letter. In this case, in the absence
-of negation, the curly brackets in the escape sequence are optional; these two
-examples have the same effect:</p>
-
-<list><item>\p{L}</item>
- <item>\pL</item></list>
-
-<p>The following general category property codes are supported:</p>
-
-<taglist>
- <tag>C</tag> <item>Other</item>
- <tag>Cc</tag> <item>Control</item>
- <tag>Cf</tag> <item>Format</item>
- <tag>Cn</tag> <item>Unassigned</item>
- <tag>Co</tag> <item>Private use</item>
- <tag>Cs</tag> <item>Surrogate</item>
-</taglist>
-
-<taglist>
- <tag>L</tag> <item>Letter</item>
- <tag>Ll</tag> <item>Lower case letter</item>
- <tag>Lm</tag> <item>Modifier letter</item>
- <tag>Lo</tag> <item>Other letter</item>
- <tag>Lt</tag> <item>Title case letter</item>
- <tag>Lu</tag> <item>Upper case letter</item>
-</taglist>
-
-
-<taglist>
- <tag>M</tag> <item>Mark</item>
- <tag>Mc</tag> <item>Spacing mark</item>
- <tag>Me</tag> <item>Enclosing mark</item>
- <tag>Mn</tag> <item>Non-spacing mark</item>
-</taglist>
+Pattern PCRE matches Perl matches
+
+\Qabc$xyz\E abc$xyz abc followed by the contents of $xyz
+\Qabc\$xyz\E abc\$xyz abc\$xyz
+\Qabc\E\$\Qxyz\E abc$xyz abc$xyz</code>
+
+
+ <p>The \Q...\E sequence is recognized both inside and outside character
+ classes. An isolated \E that is not preceded by \Q is ignored. If \Q is
+ not followed by \E later in the pattern, the literal interpretation
+ continues to the end of the pattern (that is, \E is assumed at the end).
+ If the isolated \Q is inside a character class, this causes an error, as
+ the character class is not terminated.</p>
+
+ <p><em>Non-Printing Characters</em></p>
+ <marker id="non_printing_characters"></marker>
+
+ <p>A second use of backslash provides a way of encoding non-printing
+ characters in patterns in a visible manner. There is no restriction on the
+ appearance of non-printing characters, apart from the binary zero that
+ terminates a pattern. When a pattern is prepared by text editing, it is
+ often easier to use one of the following escape sequences than the binary
+ character it represents:</p>
+
+ <taglist>
+ <tag>\a</tag><item>Alarm, that is, the BEL character (hex 07)</item>
+ <tag>\cx</tag><item>"Control-x", where x is any ASCII character</item>
+ <tag>\e</tag><item>Escape (hex 1B)</item>
+ <tag>\f</tag><item>Form feed (hex 0C)</item>
+ <tag>\n</tag><item>Line feed (hex 0A)</item>
+ <tag>\r</tag><item>Carriage return (hex 0D)</item>
+ <tag>\t</tag><item>Tab (hex 09)</item>
+ <tag>\ddd</tag><item>Character with octal code ddd, or back reference
+ </item>
+ <tag>\xhh</tag><item>Character with hex code hh</item>
+ <tag>\x{hhh..}</tag><item>Character with hex code hhh..</item>
+ </taglist>
+
+ <p>The precise effect of \cx on ASCII characters is as follows: if x is a
+ lowercase letter, it is converted to upper case. Then bit 6 of the
+ character (hex 40) is inverted. Thus \cA to \cZ become hex 01 to hex 1A
+ (A is 41, Z is 5A), but \c{ becomes hex 3B ({ is 7B), and \c; becomes
+ hex 7B (; is 3B). If the data item (byte or 16-bit value) following \c
+ has a value &gt; 127, a compile-time error occurs. This locks out
+ non-ASCII characters in all modes.</p>
+
+ <p>The \c facility was designed for use with ASCII characters, but with the
+ extension to Unicode it is even less useful than it once was.</p>
+
+ <p>By default, after \x, from zero to two hexadecimal digits are read
+ (letters can be in upper or lower case). Any number of hexadecimal digits
+ can appear between \x{ and }, but the character code is constrained as
+ follows:</p>
+
+ <taglist>
+ <tag>8-bit non-Unicode mode</tag>
+ <item>&lt; 0x100</item>
+ <tag>8-bit UTF-8 mode</tag>
+ <item>&lt; 0x10ffff and a valid code point</item>
+ </taglist>
+
+ <p>Invalid Unicode code points are the range 0xd800 to 0xdfff (the so-called
+ "surrogate" code points), and 0xffef.</p>
+
+ <p>If characters other than hexadecimal digits appear between \x{ and },
+ or if there is no terminating }, this form of escape is not recognized.
+ Instead, the initial \x is interpreted as a basic hexadecimal escape,
+ with no following digits, giving a character whose value is zero.</p>
+
+ <p>Characters whose value is &lt; 256 can be defined by either of the two
+ syntaxes for \x. There is no difference in the way they are handled. For
+ example, \xdc is the same as \x{dc}.</p>
+
+ <p>After \0 up to two further octal digits are read. If there are fewer than
+ two digits, only those that are present are used. Thus the sequence
+ \0\x\07 specifies two binary zeros followed by a BEL character (code value
+ 7). Ensure to supply two digits after the initial zero if the pattern
+ character that follows is itself an octal digit.</p>
+
+ <p>The handling of a backslash followed by a digit other than 0 is
+ complicated. Outside a character class, PCRE reads it and any following
+ digits as a decimal number. If the number is &lt; 10, or if there have
+ been at least that many previous capturing left parentheses in the
+ expression, the entire sequence is taken as a <em>back reference</em>. A
+ description of how this works is provided later, following the discussion
+ of parenthesized subpatterns.</p>
+
+ <p>Inside a character class, or if the decimal number is &gt; 9 and there
+ have not been that many capturing subpatterns, PCRE re-reads up to three
+ octal digits following the backslash, and uses them to generate a data
+ character. Any subsequent digits stand for themselves. The value of the
+ character is constrained in the same way as characters specified in
+ hexadecimal. For example:</p>
+
+ <taglist>
+ <tag>\040</tag>
+ <item>Another way of writing an ASCII space</item>
+ <tag>\40</tag>
+ <item>The same, provided there are &lt; 40 previous capturing
+ subpatterns</item>
+ <tag>\7</tag>
+ <item>Always a back reference</item>
+ <tag>\11</tag>
+ <item>Can be a back reference, or another way of writing a tab</item>
+ <tag>\011</tag>
+ <item>Always a tab</item>
+ <tag>\0113</tag>
+ <item>A tab followed by character "3"</item>
+ <tag>\113</tag>
+ <item>Can be a back reference, otherwise the character with octal code
+ 113 </item>
+ <tag>\377</tag>
+ <item>Can be a back reference, otherwise value 255 (decimal)</item>
+ <tag>\81</tag>
+ <item>Either a back reference, or a binary zero followed by the two
+ characters "8" and "1"</item>
+ </taglist>
+
+ <p>Notice that octal values &gt;= 100 must not be introduced by a leading
+ zero, as no more than three octal digits are ever read.</p>
+
+ <p>All the sequences that define a single character value can be used both
+ inside and outside character classes. Also, inside a character class, \b
+ is interpreted as the backspace character (hex 08).</p>
+
+ <p>\N is not allowed in a character class. \B, \R, and \X are not special
+ inside a character class. Like other unrecognized escape sequences, they
+ are treated as the literal characters "B", "R", and "X". Outside a
+ character class, these sequences have different meanings.</p>
+
+ <p><em>Unsupported Escape Sequences</em></p>
+
+ <p>In Perl, the sequences \l, \L, \u, and \U are recognized by its string
+ handler and used to modify the case of following characters. PCRE does not
+ support these escape sequences.</p>
+
+ <p><em>Absolute and Relative Back References</em></p>
+
+ <p>The sequence \g followed by an unsigned or a negative number, optionally
+ enclosed in braces, is an absolute or relative back reference. A named
+ back reference can be coded as \g{name}. Back references are discussed
+ later, following the discussion of parenthesized subpatterns.</p>
+
+ <p><em>Absolute and Relative Subroutine Calls</em></p>
+
+ <p>For compatibility with Oniguruma, the non-Perl syntax \g followed by a
+ name or a number enclosed either in angle brackets or single quotes, is
+ alternative syntax for referencing a subpattern as a "subroutine".
+ Details are discussed later. Notice that \g{...} (Perl syntax) and
+ \g&lt;...&gt; (Oniguruma syntax) are <em>not</em> synonymous. The former
+ is a back reference and the latter is a subroutine call.</p>
+
+ <p><em>Generic Character Types</em></p>
+ <marker id="generic_character_types"></marker>
+
+ <p>Another use of backslash is for specifying generic character types:</p>
+
+ <taglist>
+ <tag>\d</tag><item>Any decimal digit</item>
+ <tag>\D</tag><item>Any character that is not a decimal digit</item>
+ <tag>\h</tag><item>Any horizontal whitespace character</item>
+ <tag>\H</tag><item>Any character that is not a horizontal whitespace
+ character</item>
+ <tag>\s</tag><item>Any whitespace character</item>
+ <tag>\S</tag><item>Any character that is not a whitespace character
+ </item>
+ <tag>\v</tag><item>Any vertical whitespace character</item>
+ <tag>\V</tag><item>Any character that is not a vertical whitespace
+ character</item>
+ <tag>\w</tag><item>Any "word" character</item>
+ <tag>\W</tag><item>Any "non-word" character</item>
+ </taglist>
+
+ <p>There is also the single sequence \N, which matches a non-newline
+ character. This is the same as the "." metacharacter when <c>dotall</c>
+ is not set. Perl also uses \N to match characters by name, but PCRE does
+ not support this.</p>
+
+ <p>Each pair of lowercase and uppercase escape sequences partitions the
+ complete set of characters into two disjoint sets. Any given character
+ matches one, and only one, of each pair. The sequences can appear both
+ inside and outside character classes. They each match one character of the
+ appropriate type. If the current matching point is at the end of the
+ subject string, all fail, as there is no character to match.</p>
+
+ <p>For compatibility with Perl, \s does not match the VT character
+ (code 11). This makes it different from the Posix "space" class. The \s
+ characters are HT (9), LF (10), FF (12), CR (13), and space (32). If "use
+ locale;" is included in a Perl script, \s can match the VT character. In
+ PCRE, it never does.</p>
+
+ <p>A "word" character is an underscore or any character that is a letter or
+ a digit. By default, the definition of letters and digits is controlled by
+ the PCRE low-valued character tables, in Erlang's case (and without option
+ <c>unicode</c>), the ISO Latin-1 character set.</p>
+
+ <p>By default, in <c>unicode</c> mode, characters with values &gt; 255, that
+ is, all characters outside the ISO Latin-1 character set, never match \d,
+ \s, or \w, and always match \D, \S, and \W. These sequences retain their
+ original meanings from before UTF support was available, mainly for
+ efficiency reasons. However, if option <c>ucp</c> is set, the behavior is
+ changed so that Unicode properties are used to determine character types,
+ as follows:</p>
+
+ <taglist>
+ <tag>\d</tag><item>Any character that \p{Nd} matches (decimal digit)
+ </item>
+ <tag>\s</tag><item>Any character that \p{Z} matches, plus HT, LF, FF, CR
+ </item>
+ <tag>\w</tag><item>Any character that \p{L} or \p{N} matches, plus
+ underscore</item>
+ </taglist>
+
+ <p>The uppercase escapes match the inverse sets of characters. Notice that
+ \d matches only decimal digits, while \w matches any Unicode digit, any
+ Unicode letter, and underscore. Notice also that <c>ucp</c> affects \b and
+ \B, as they are defined in terms of \w and \W. Matching these sequences is
+ noticeably slower when <c>ucp</c> is set.</p>
+
+ <p>The sequences \h, \H, \v, and \V are features that were added to Perl in
+ release 5.10. In contrast to the other sequences, which match only ASCII
+ characters by default, these always match certain high-valued code points,
+ regardless if <c>ucp</c> is set.</p>
+
+ <p>The following are the horizontal space characters:</p>
+
+ <taglist>
+ <tag>U+0009</tag><item>Horizontal tab (HT)</item>
+ <tag>U+0020</tag><item>Space</item>
+ <tag>U+00A0</tag><item>Non-break space</item>
+ <tag>U+1680</tag><item>Ogham space mark</item>
+ <tag>U+180E</tag><item>Mongolian vowel separator</item>
+ <tag>U+2000</tag><item>En quad</item>
+ <tag>U+2001</tag><item>Em quad</item>
+ <tag>U+2002</tag><item>En space</item>
+ <tag>U+2003</tag><item>Em space</item>
+ <tag>U+2004</tag><item>Three-per-em space</item>
+ <tag>U+2005</tag><item>Four-per-em space</item>
+ <tag>U+2006</tag><item>Six-per-em space</item>
+ <tag>U+2007</tag><item>Figure space</item>
+ <tag>U+2008</tag><item>Punctuation space</item>
+ <tag>U+2009</tag><item>Thin space</item>
+ <tag>U+200A</tag><item>Hair space</item>
+ <tag>U+202F</tag><item>Narrow no-break space</item>
+ <tag>U+205F</tag><item>Medium mathematical space</item>
+ <tag>U+3000</tag><item>Ideographic space</item>
+ </taglist>
+
+ <p>The following are the vertical space characters:</p>
+
+ <taglist>
+ <tag>U+000A</tag><item>Line feed (LF)</item>
+ <tag>U+000B</tag><item>Vertical tab (VT)</item>
+ <tag>U+000C</tag><item>Form feed (FF)</item>
+ <tag>U+000D</tag><item>Carriage return (CR)</item>
+ <tag>U+0085</tag><item>Next line (NEL)</item>
+ <tag>U+2028</tag><item>Line separator</item>
+ <tag>U+2029</tag><item>Paragraph separator</item>
+ </taglist>
+
+ <p>In 8-bit, non-UTF-8 mode, only the characters with code points &lt; 256
+ are relevant.</p>
+
+ <p><em>Newline Sequences</em></p>
+ <marker id="newline_sequences"></marker>
+
+ <p>Outside a character class, by default, the escape sequence \R matches any
+ Unicode newline sequence. In non-UTF-8 mode, \R is equivalent to the
+ following:</p>
+
+ <code>
+(?&gt;\r\n|\n|\x0b|\f|\r|\x85)</code>
+
+ <p>This is an example of an "atomic group", details are provided below.</p>
+
+ <p>This particular group matches either the two-character sequence CR
+ followed by LF, or one of the single characters LF (line feed, U+000A),
+ VT (vertical tab, U+000B), FF (form feed, U+000C), CR (carriage return,
+ U+000D), or NEL (next line, U+0085). The two-character sequence is
+ treated as a single unit that cannot be split.</p>
+
+ <p>In Unicode mode, two more characters whose code points are &gt; 255 are
+ added: LS (line separator, U+2028) and PS (paragraph separator, U+2029).
+ Unicode character property support is not needed for these characters to
+ be recognized.</p>
+
+ <p>\R can be restricted to match only CR, LF, or CRLF (instead of the
+ complete set of Unicode line endings) by setting option <c>bsr_anycrlf</c>
+ either at compile time or when the pattern is matched. (BSR is an acronym
+ for "backslash R".) This can be made the default when PCRE is built; if
+ so, the other behavior can be requested through option
+ <c>bsr_unicode</c>. These settings can also be specified by starting a
+ pattern string with one of the following sequences:</p>
+
+ <taglist>
+ <tag>(*BSR_ANYCRLF)</tag>
+ <item>CR, LF, or CRLF only</item>
+ <tag>(*BSR_UNICODE)</tag>
+ <item>Any Unicode newline sequence</item>
+ </taglist>
+
+ <p>These override the default and the options specified to the compiling
+ function, but they can themselves be overridden by options specified to a
+ matching function. Notice that these special settings, which are not
+ Perl-compatible, are recognized only at the very start of a pattern, and
+ that they must be in upper case. If more than one of them is present, the
+ last one is used. They can be combined with a change of newline
+ convention; for example, a pattern can start with:</p>
+
+ <code>
+(*ANY)(*BSR_ANYCRLF)</code>
+
+ <p>They can also be combined with the (*UTF8), (*UTF), or (*UCP) special
+ sequences. Inside a character class, \R is treated as an unrecognized
+ escape sequence, and so matches the letter "R" by default.</p>
+
+ <p><em>Unicode Character Properties</em></p>
+
+ <p>Three more escape sequences that match characters with specific
+ properties are available. When in 8-bit non-UTF-8 mode, these sequences
+ are limited to testing characters whose code points are &lt;
+ 256, but they do work in this mode. The following are the extra escape
+ sequences:</p>
+
+ <taglist>
+ <tag>\p{<em>xx</em>}</tag>
+ <item>A character with property <em>xx</em></item>
+ <tag>\P{<em>xx</em>}</tag>
+ <item>A character without property <em>xx</em></item>
+ <tag>\X</tag>
+ <item>A Unicode extended grapheme cluster</item>
+ </taglist>
+
+ <p>The property names represented by <em>xx</em> above are limited to the
+ Unicode script names, the general category properties, "Any", which
+ matches any character (including newline), and some special PCRE
+ properties (described in the next section). Other Perl properties, such as
+ "InMusicalSymbols", are currently not supported by PCRE. Notice that
+ \P{Any} does not match any characters and always causes a match
+ failure.</p>
+
+ <p>Sets of Unicode characters are defined as belonging to certain scripts.
+ A character from one of these sets can be matched using a script name, for
+ example:</p>
+
+ <code>
+\p{Greek} \P{Han}</code>
+
+ <p>Those that are not part of an identified script are lumped together as
+ "Common". The following is the current list of scripts:</p>
+
+ <list type="bulleted">
+ <item>Arabic</item>
+ <item>Armenian</item>
+ <item>Avestan</item>
+ <item>Balinese</item>
+ <item>Bamum</item>
+ <item>Batak</item>
+ <item>Bengali</item>
+ <item>Bopomofo</item>
+ <item>Braille</item>
+ <item>Buginese</item>
+ <item>Buhid</item>
+ <item>Canadian_Aboriginal</item>
+ <item>Carian</item>
+ <item>Chakma</item>
+ <item>Cham</item>
+ <item>Cherokee</item>
+ <item>Common</item>
+ <item>Coptic</item>
+ <item>Cuneiform</item>
+ <item>Cypriot</item>
+ <item>Cyrillic</item>
+ <item>Deseret</item>
+ <item>Devanagari</item>
+ <item>Egyptian_Hieroglyphs</item>
+ <item>Ethiopic</item>
+ <item>Georgian</item>
+ <item>Glagolitic</item>
+ <item>Gothic</item>
+ <item>Greek</item>
+ <item>Gujarati</item>
+ <item>Gurmukhi</item>
+ <item>Han</item>
+ <item>Hangul</item>
+ <item>Hanunoo</item>
+ <item>Hebrew</item>
+ <item>Hiragana</item>
+ <item>Imperial_Aramaic</item>
+ <item>Inherited</item>
+ <item>Inscriptional_Pahlavi</item>
+ <item>Inscriptional_Parthian</item>
+ <item>Javanese</item>
+ <item>Kaithi</item>
+ <item>Kannada</item>
+ <item>Katakana</item>
+ <item>Kayah_Li</item>
+ <item>Kharoshthi</item>
+ <item>Khmer</item>
+ <item>Lao</item>
+ <item>Latin</item>
+ <item>Lepcha</item>
+ <item>Limbu</item>
+ <item>Linear_B</item>
+ <item>Lisu</item>
+ <item>Lycian</item>
+ <item>Lydian</item>
+ <item>Malayalam</item>
+ <item>Mandaic</item>
+ <item>Meetei_Mayek</item>
+ <item>Meroitic_Cursive</item>
+ <item>Meroitic_Hieroglyphs</item>
+ <item>Miao</item>
+ <item>Mongolian</item>
+ <item>Myanmar</item>
+ <item>New_Tai_Lue</item>
+ <item>Nko</item>
+ <item>Ogham</item>
+ <item>Old_Italic</item>
+ <item>Old_Persian</item>
+ <item>Oriya</item>
+ <item>Old_South_Arabian</item>
+ <item>Old_Turkic</item>
+ <item>Ol_Chiki</item>
+ <item>Osmanya</item>
+ <item>Phags_Pa</item>
+ <item>Phoenician</item>
+ <item>Rejang</item>
+ <item>Runic</item>
+ <item>Samaritan</item>
+ <item>Saurashtra</item>
+ <item>Sharada</item>
+ <item>Shavian</item>
+ <item>Sinhala</item>
+ <item>Sora_Sompeng</item>
+ <item>Sundanese</item>
+ <item>Syloti_Nagri</item>
+ <item>Syriac</item>
+ <item>Tagalog</item>
+ <item>Tagbanwa</item>
+ <item>Tai_Le</item>
+ <item>Tai_Tham</item>
+ <item>Tai_Viet</item>
+ <item>Takri</item>
+ <item>Tamil</item>
+ <item>Telugu</item>
+ <item>Thaana</item>
+ <item>Thai</item>
+ <item>Tibetan</item>
+ <item>Tifinagh</item>
+ <item>Ugaritic</item>
+ <item>Vai</item>
+ <item>Yi</item>
+ </list>
+
+ <p>Each character has exactly one Unicode general category property,
+ specified by a two-letter acronym. For compatibility with Perl, negation
+ can be specified by including a circumflex between the opening brace and
+ the property name. For example, \p{^Lu} is the same as \P{Lu}.</p>
+
+ <p>If only one letter is specified with \p or \P, it includes all the
+ general category properties that start with that letter. In this case, in
+ the absence of negation, the curly brackets in the escape sequence are
+ optional. The following two examples have the same effect:</p>
+
+ <code>
+\p{L}
+\pL</code>
+
+ <p>The following general category property codes are supported:</p>
+
+ <taglist>
+ <tag>C</tag><item>Other</item>
+ <tag>Cc</tag><item>Control</item>
+ <tag>Cf</tag><item>Format</item>
+ <tag>Cn</tag><item>Unassigned</item>
+ <tag>Co</tag><item>Private use</item>
+ <tag>Cs</tag><item>Surrogate</item>
+ <tag>L</tag><item>Letter</item>
+ <tag>Ll</tag><item>Lowercase letter</item>
+ <tag>Lm</tag><item>Modifier letter</item>
+ <tag>Lo</tag><item>Other letter</item>
+ <tag>Lt</tag><item>Title case letter</item>
+ <tag>Lu</tag><item>Uppercase letter</item>
+ <tag>M</tag><item>Mark</item>
+ <tag>Mc</tag><item>Spacing mark</item>
+ <tag>Me</tag><item>Enclosing mark</item>
+ <tag>Mn</tag><item>Non-spacing mark</item>
+ <tag>N</tag><item>Number</item>
+ <tag>Nd</tag><item>Decimal number</item>
+ <tag>Nl</tag><item>Letter number</item>
+ <tag>No</tag><item>Other number</item>
+ <tag>P</tag><item>Punctuation</item>
+ <tag>Pc</tag><item>Connector punctuation</item>
+ <tag>Pd</tag><item>Dash punctuation</item>
+ <tag>Pe</tag><item>Close punctuation</item>
+ <tag>Pf</tag><item>Final punctuation</item>
+ <tag>Pi</tag><item>Initial punctuation</item>
+ <tag>Po</tag><item>Other punctuation</item>
+ <tag>Ps</tag><item>Open punctuation</item>
+ <tag>S</tag><item>Symbol</item>
+ <tag>Sc</tag><item>Currency symbol</item>
+ <tag>Sk</tag><item>Modifier symbol</item>
+ <tag>Sm</tag><item>Mathematical symbol</item>
+ <tag>So</tag><item>Other symbol</item>
+ <tag>Z</tag><item>Separator</item>
+ <tag>Zl</tag><item>Line separator</item>
+ <tag>Zp</tag><item>Paragraph separator</item>
+ <tag>Zs</tag><item>Space separator</item>
+ </taglist>
+
+ <p>The special property L&amp; is also supported. It matches a character
+ that has the Lu, Ll, or Lt property, that is, a letter that is not
+ classified as a modifier or "other".</p>
+
+ <p>The Cs (Surrogate) property applies only to characters in the range
+ U+D800 to U+DFFF. Such characters are invalid in Unicode strings and so
+ cannot be tested by PCRE. Perl does not support the Cs property.</p>
+
+ <p>The long synonyms for property names supported by Perl (such as
+ \p{Letter}) are not supported by PCRE. It is not permitted to prefix any
+ of these properties with "Is".</p>
+
+ <p>No character in the Unicode table has the Cn (unassigned) property.
+ This property is instead assumed for any code point that is not in the
+ Unicode table.</p>
+
+ <p>Specifying caseless matching does not affect these escape sequences. For
+ example, \p{Lu} always matches only uppercase letters. This is different
+ from the behavior of current versions of Perl.</p>
+
+ <p>Matching characters by Unicode property is not fast, as PCRE must do a
+ multistage table lookup to find a character property. That is why the
+ traditional escape sequences such as \d and \w do not use Unicode
+ properties in PCRE by default. However, you can make them do so by setting
+ option <c>ucp</c> or by starting the pattern with (*UCP).</p>
+
+ <p><em>Extended Grapheme Clusters</em></p>
+
+ <p>The \X escape matches any number of Unicode characters that form an
+ "extended grapheme cluster", and treats the sequence as an atomic group
+ (see below). Up to and including release 8.31, PCRE matched an earlier,
+ simpler definition that was equivalent to <c>(?&gt;\PM\pM*)</c>. That is,
+ it matched a character without the "mark" property, followed by zero or
+ more characters with the "mark" property. Characters with the "mark"
+ property are typically non-spacing accents that affect the preceding
+ character.</p>
+
+ <p>This simple definition was extended in Unicode to include more
+ complicated kinds of composite character by giving each character a
+ grapheme breaking property, and creating rules that use these properties
+ to define the boundaries of extended grapheme clusters. In PCRE releases
+ later than 8.31, \X matches one of these clusters.</p>
+
+ <p>\X always matches at least one character. Then it decides whether to add
+ more characters according to the following rules for ending a cluster:</p>
+
+ <list type="ordered">
+ <item>
+ <p>End at the end of the subject string.</p>
+ </item>
+ <item>
+ <p>Do not end between CR and LF; otherwise end after any control
+ character.</p>
+ </item>
+ <item>
+ <p>Do not break Hangul (a Korean script) syllable sequences. Hangul
+ characters are of five types: L, V, T, LV, and LVT. An L character can
+ be followed by an L, V, LV, or LVT character. An LV or V character can
+ be followed by a V or T character. An LVT or T character can be
+ followed only by a T character.</p>
+ </item>
+ <item>
+ <p>Do not end before extending characters or spacing marks. Characters
+ with the "mark" property always have the "extend" grapheme breaking
+ property.</p>
+ </item>
+ <item>
+ <p>Do not end after prepend characters.</p>
+ </item>
+ <item>
+ <p>Otherwise, end the cluster.</p>
+ </item>
+ </list>
-<taglist>
- <tag>N</tag> <item>Number</item>
- <tag>Nd</tag> <item>Decimal number</item>
- <tag>Nl</tag> <item>Letter number</item>
- <tag>No</tag> <item>Other number</item>
-</taglist>
+ <p><em>PCRE Additional Properties</em></p>
-<taglist>
- <tag>P</tag> <item>Punctuation</item>
- <tag>Pc</tag> <item>Connector punctuation</item>
- <tag>Pd</tag> <item>Dash punctuation</item>
- <tag>Pe</tag> <item>Close punctuation</item>
- <tag>Pf</tag> <item>Final punctuation</item>
- <tag>Pi</tag> <item>Initial punctuation</item>
- <tag>Po</tag> <item>Other punctuation</item>
- <tag>Ps</tag> <item>Open punctuation</item>
-</taglist>
+ <p>In addition to the standard Unicode properties described earlier, PCRE
+ supports four more that make it possible to convert traditional escape
+ sequences, such as \w and \s, and Posix character classes to use Unicode
+ properties. PCRE uses these non-standard, non-Perl properties internally
+ when <c>PCRE_UCP</c> is set. However, they can also be used explicitly.
+ The properties are as follows:</p>
-<taglist>
- <tag>S</tag> <item>Symbol</item>
- <tag>Sc</tag> <item>Currency symbol</item>
- <tag>Sk</tag> <item>Modifier symbol</item>
- <tag>Sm</tag> <item>Mathematical symbol</item>
- <tag>So</tag> <item>Other symbol</item>
-</taglist>
+ <taglist>
+ <tag>Xan</tag>
+ <item>
+ <p>Any alphanumeric character. Matches characters that have either the
+ L (letter) or the N (number) property.</p>
+ </item>
+ <tag>Xps</tag>
+ <item>
+ <p>Any Posix space character. Matches the characters tab, line feed,
+ vertical tab, form feed, carriage return, and any other character
+ that has the Z (separator) property.</p>
+ </item>
+ <tag>Xsp</tag>
+ <item>
+ <p>Any Perl space character. Matches the same as Xps, except that
+ vertical tab is excluded.</p>
+ </item>
+ <tag>Xwd</tag>
+ <item>
+ <p>Any Perl "word" character. Matches the same characters as Xan, plus
+ underscore.</p>
+ </item>
+ </taglist>
+
+ <p>There is another non-standard property, Xuc, which matches any character
+ that can be represented by a Universal Character Name in C++ and other
+ programming languages. These are the characters $, @, ` (grave accent),
+ and all characters with Unicode code points &gt;= U+00A0, except for the
+ surrogates U+D800 to U+DFFF. Notice that most base (ASCII) characters are
+ excluded. (Universal Character Names are of the form \uHHHH or \UHHHHHHHH,
+ where H is a hexadecimal digit. Notice that the Xuc property does not
+ match these sequences but the characters that they represent.)</p>
+
+ <p><em>Resetting the Match Start</em></p>
+
+ <p>The escape sequence \K causes any previously matched characters not to
+ be included in the final matched sequence. For example, the following
+ pattern matches "foobar", but reports that it has matched "bar":</p>
+
+ <code>
+foo\Kbar</code>
+
+ <p>This feature is similar to a lookbehind assertion
+ <!-- HTML &lt;a href="#lookbehind"&gt; -->
+ <!-- &lt;/a&gt; -->
+ (described below). However, in this case, the part of the subject before
+ the real match does not have to be of fixed length, as lookbehind
+ assertions do. The use of \K does not interfere with the setting of
+ captured substrings. For example, when the following pattern matches
+ "foobar", the first substring is still set to "foo":</p>
-<taglist>
- <tag>Z</tag> <item>Separator</item>
- <tag>Zl</tag> <item>Line separator</item>
- <tag>Zp</tag> <item>Paragraph separator</item>
- <tag>Zs</tag> <item>Space separator</item>
-</taglist>
+<code>
+(foo)\Kbar</code>
+
+ <p>Perl documents that the use of \K within assertions is "not well
+ defined". In PCRE, \K is acted upon when it occurs inside positive
+ assertions, but is ignored in negative assertions.</p>
+
+ <p><em>Simple Assertions</em></p>
+
+ <p>The final use of backslash is for certain simple assertions. An
+ assertion specifies a condition that must be met at a particular point in
+ a match, without consuming any characters from the subject string. The
+ use of subpatterns for more complicated assertions is described below. The
+ following are the backslashed assertions:</p>
+
+ <taglist>
+ <tag>\b</tag><item>Matches at a word boundary.</item>
+ <tag>\B</tag><item>Matches when not at a word boundary.</item>
+ <tag>\A</tag><item>Matches at the start of the subject.</item>
+ <tag>\Z</tag><item>Matches at the end of the subject, and before a newline
+ at the end of the subject.</item>
+ <tag>\z</tag><item>Matches only at the end of the subject.</item>
+ <tag>\G</tag><item>Matches at the first matching position in the subject.
+ </item>
+ </taglist>
+
+ <p>Inside a character class, \b has a different meaning; it matches the
+ backspace character. If any other of these assertions appears in a
+ character class, by default it matches the corresponding literal character
+ (for example, \B matches the letter B).</p>
+
+ <p>A word boundary is a position in the subject string where the current
+ character and the previous character do not both match \w or \W (that is,
+ one matches \w and the other matches \W), or the start or end of the
+ string if the first or last character matches \w, respectively. In UTF
+ mode, the meanings of \w and \W can be changed by setting option
+ <c>ucp</c>. When this is done, it also affects \b and \B. PCRE and Perl do
+ not have a separate "start of word" or "end of word" metasequence.
+ However, whatever follows \b normally determines which it is. For example,
+ the fragment \ba matches "a" at the start of a word.</p>
+
+ <p>The \A, \Z, and \z assertions differ from the traditional circumflex and
+ dollar (described in the next section) in that they only ever match at the
+ very start and end of the subject string, whatever options are set. Thus,
+ they are independent of multiline mode. These three assertions are not
+ affected by options <c>notbol</c> or <c>noteol</c>, which affect only the
+ behavior of the circumflex and dollar metacharacters. However, if argument
+ <c>startoffset</c> of <seealso marker="#run/3"><c>run/3</c></seealso> is
+ non-zero, indicating that matching is to start at a point other than the
+ beginning of the subject, \A can never match. The difference between \Z
+ and \z is that \Z matches before a newline at the end of the string and
+ at the very end, while \z matches only at the end.</p>
+
+ <p>The \G assertion is true only when the current matching position is at
+ the start point of the match, as specified by argument <c>startoffset</c>
+ of <c>run/3</c>. It differs from \A when the value of <c>startoffset</c>
+ is non-zero. By calling <c>run/3</c> multiple times with appropriate
+ arguments, you can mimic the Perl option <c>/g</c>, and it is in this
+ kind of implementation where \G can be useful.</p>
+
+ <p>Notice, however, that the PCRE interpretation of \G, as the start of the
+ current match, is subtly different from Perl, which defines it as the end
+ of the previous match. In Perl, these can be different when the previously
+ matched string was empty. As PCRE does only one match at a time, it cannot
+ reproduce this behavior.</p>
+
+ <p>If all the alternatives of a pattern begin with \G, the expression is
+ anchored to the starting match position, and the "anchored" flag is set in
+ the compiled regular expression.</p>
+ </section>
-<p>The special property L&amp; is also supported: it matches a character that has
-the Lu, Ll, or Lt property, in other words, a letter that is not classified as
-a modifier or "other".</p>
-
-<p>The Cs (Surrogate) property applies only to characters in the range U+D800 to
-U+DFFF. Such characters are not valid in Unicode strings and so
-cannot be tested by PCRE. Perl does not support the Cs property</p>
-
-<p>The long synonyms for property names that Perl supports (such as \p{Letter})
-are not supported by PCRE, nor is it permitted to prefix any of these
-properties with "Is".</p>
-
-<p>No character that is in the Unicode table has the Cn (unassigned) property.
-Instead, this property is assumed for any code point that is not in the
-Unicode table.</p>
-
-<p>Specifying caseless matching does not affect these escape sequences. For
-example, \p{Lu} always matches only upper case letters. This is different from
-the behaviour of current versions of Perl.</p>
-<p>Matching characters by Unicode property is not fast, because PCRE has to do a
-multistage table lookup in order to find a character's property. That is why
-the traditional escape sequences such as \d and \w do not use Unicode
-properties in PCRE by default, though you can make them do so by setting the
-<c>ucp</c> option or by starting the pattern with (*UCP).</p>
-
-<p><em>Extended grapheme clusters</em></p>
-<p>The \X escape matches any number of Unicode characters that form an "extended
-grapheme cluster", and treats the sequence as an atomic group (see below).
-Up to and including release 8.31, PCRE matched an earlier, simpler definition
-that was equivalent to</p>
-
-<quote><p> (?&gt;\PM\pM*)</p></quote>
-
-<p>That is, it matched a character without the "mark" property, followed by zero
-or more characters with the "mark" property. Characters with the "mark"
-property are typically non-spacing accents that affect the preceding character.</p>
-
-<p>This simple definition was extended in Unicode to include more complicated
-kinds of composite character by giving each character a grapheme breaking
-property, and creating rules that use these properties to define the boundaries
-of extended grapheme clusters. In releases of PCRE later than 8.31, \X matches
-one of these clusters.</p>
-
-<p>\X always matches at least one character. Then it decides whether to add
-additional characters according to the following rules for ending a cluster:</p>
-<taglist>
-<tag>1.</tag> <item>End at the end of the subject string.</item>
-<tag>2.</tag> <item>Do not end between CR and LF; otherwise end after any control character.</item>
-<tag>3.</tag> <item>Do not break Hangul (a Korean script) syllable sequences. Hangul characters
-are of five types: L, V, T, LV, and LVT. An L character may be followed by an
-L, V, LV, or LVT character; an LV or V character may be followed by a V or T
-character; an LVT or T character may be follwed only by a T character.</item>
-<tag>4.</tag> <item>Do not end before extending characters or spacing marks. Characters with
-the "mark" property always have the "extend" grapheme breaking property.</item>
-<tag>5.</tag> <item>Do not end after prepend characters.</item>
-<tag>6.</tag> <item>Otherwise, end the cluster.</item>
-</taglist>
+ <section>
+ <marker id="sect4"></marker>
+ <title>Circumflex and Dollar</title>
+ <p>The circumflex and dollar metacharacters are zero-width assertions. That
+ is, they test for a particular condition to be true without consuming any
+ characters from the subject string.</p>
+
+ <p>Outside a character class, in the default matching mode, the circumflex
+ character is an assertion that is true only if the current matching point
+ is at the start of the subject string. If argument <c>startoffset</c> of
+ <seealso marker="#run/3"><c>run/3</c></seealso> is non-zero, circumflex
+ can never match if option <c>multiline</c> is unset. Inside a character
+ class, circumflex has an entirely different meaning (see below).</p>
+
+ <p>Circumflex needs not to be the first character of the pattern if
+ some alternatives are involved, but it is to be the first thing in
+ each alternative in which it appears if the pattern is ever to match that
+ branch. If all possible alternatives start with a circumflex, that is, if
+ the pattern is constrained to match only at the start of the subject, it
+ is said to be an "anchored" pattern. (There are also other constructs that
+ can cause a pattern to be anchored.)</p>
+
+ <p>The dollar character is an assertion that is true only if the current
+ matching point is at the end of the subject string, or immediately before
+ a newline at the end of the string (by default). Notice however that it
+ does not match the newline. Dollar needs not to be the last character of
+ the pattern if some alternatives are involved, but it is to be the
+ last item in any branch in which it appears. Dollar has no special meaning
+ in a character class.</p>
+
+ <p>The meaning of dollar can be changed so that it matches only at the very
+ end of the string, by setting option <c>dollar_endonly</c> at compile
+ time. This does not affect the \Z assertion.</p>
+
+ <p>The meanings of the circumflex and dollar characters are changed if
+ option <c>multiline</c> is set. When this is the case, a circumflex
+ matches immediately after internal newlines and at the start of the
+ subject string. It does not match after a newline that ends the string. A
+ dollar matches before any newlines in the string, and at the very end,
+ when <c>multiline</c> is set. When newline is specified as the
+ two-character sequence CRLF, isolated CR and LF characters do not
+ indicate newlines.</p>
+
+ <p>For example, the pattern /^abc$/ matches the subject string "def\nabc"
+ (where \n represents a newline) in multiline mode, but not otherwise.
+ So, patterns that are anchored in single-line mode because all
+ branches start with ^ are not anchored in multiline mode, and a match for
+ circumflex is possible when argument <em>startoffset</em> of <c>run/3</c>
+ is non-zero. Option <c>dollar_endonly</c> is ignored if <c>multiline</c>
+ is set.</p>
+
+ <p>Notice that the sequences \A, \Z, and \z can be used to match the start
+ and end of the subject in both modes. If all branches of a pattern start
+ with \A, it is always anchored, regardless if <c>multiline</c> is set.</p>
+ </section>
-<p><em>PCRE's additional properties</em></p>
-
-<p>As well as the standard Unicode properties described above, PCRE supports four
-more that make it possible to convert traditional escape sequences such as \w
-and \s and POSIX character classes to use Unicode properties. PCRE uses these
-non-standard, non-Perl properties internally when PCRE_UCP is set. However,
-they may also be used explicitly. These properties are:</p>
-<taglist>
- <tag>Xan</tag> <item>Any alphanumeric character</item>
- <tag>Xps</tag> <item>Any POSIX space character</item>
- <tag>Xsp</tag> <item>Any Perl space character</item>
- <tag>Xwd</tag> <item>Any Perl "word" character</item>
-</taglist>
-<p>Xan matches characters that have either the L (letter) or the N (number)
-property. Xps matches the characters tab, linefeed, vertical tab, form feed, or
-carriage return, and any other character that has the Z (separator) property.
-Xsp is the same as Xps, except that vertical tab is excluded. Xwd matches the
-same characters as Xan, plus underscore.</p>
-
-<p>There is another non-standard property, Xuc, which matches any character that
-can be represented by a Universal Character Name in C++ and other programming
-languages. These are the characters $, @, ` (grave accent), and all characters
-with Unicode code points greater than or equal to U+00A0, except for the
-surrogates U+D800 to U+DFFF. Note that most base (ASCII) characters are
-excluded. (Universal Character Names are of the form \uHHHH or \UHHHHHHHH
-where H is a hexadecimal digit. Note that the Xuc property does not match these
-sequences but the characters that they represent.)</p>
-
-<p><em>Resetting the match start</em></p>
-
-<p>The escape sequence \K causes any previously matched characters not to be
-included in the final matched sequence. For example, the pattern:</p>
-
-<quote><p> foo\Kbar</p></quote>
-
-<p>matches "foobar", but reports that it has matched "bar". This feature is
-similar to a lookbehind assertion
-<!-- HTML &lt;a href="#lookbehind"&gt; -->
-<!-- &lt;/a&gt; -->
-(described below).
-
-However, in this case, the part of the subject before the real match does not
-have to be of fixed length, as lookbehind assertions do. The use of \K does
-not interfere with the setting of
-captured substrings.
-For example, when the pattern</p>
-
-<quote><p> (foo)\Kbar</p></quote>
-
-<p>matches "foobar", the first substring is still set to "foo".</p>
-
-<p>Perl documents that the use of \K within assertions is "not well defined". In
-PCRE, \K is acted upon when it occurs inside positive assertions, but is
-ignored in negative assertions.</p>
-
-<p><em>Simple assertions</em></p>
-
-<p>The final use of backslash is for certain simple assertions. An
-assertion specifies a condition that has to be met at a particular
-point in a match, without consuming any characters from the subject
-string. The use of subpatterns for more complicated assertions is
-described below. The backslashed assertions are:</p>
-
-<taglist>
- <tag>\b</tag> <item>matches at a word boundary</item>
- <tag>\B</tag> <item>matches when not at a word boundary</item>
- <tag>\A</tag> <item>matches at the start of the subject</item>
- <tag>\Z</tag> <item>matches at the end of the subject
- also matches before a newline at the end of
- the subject</item>
- <tag>\z</tag> <item>matches only at the end of the subject</item>
- <tag>\G</tag> <item>matches at the first matching position in the
- subject</item>
-</taglist>
+ <section>
+ <marker id="sect5"></marker>
+ <title>Full Stop (Period, Dot) and \N</title>
+ <p>Outside a character class, a dot in the pattern matches any character in
+ the subject string except (by default) a character that signifies the end
+ of a line.</p>
+
+ <p>When a line ending is defined as a single character, dot never matches
+ that character. When the two-character sequence CRLF is used, dot does not
+ match CR if it is immediately followed by LF, otherwise it matches all
+ characters (including isolated CRs and LFs). When any Unicode line endings
+ are recognized, dot does not match CR, LF, or any of the other
+ line-ending characters.</p>
+
+ <p>The behavior of dot regarding newlines can be changed. If option
+ <c>dotall</c> is set, a dot matches any character, without exception. If
+ the two-character sequence CRLF is present in the subject string, it takes
+ two dots to match it.</p>
+
+ <p>The handling of dot is entirely independent of the handling of circumflex
+ and dollar, the only relationship is that both involve newlines. Dot has
+ no special meaning in a character class.</p>
+
+ <p>The escape sequence \N behaves like a dot, except that it is not affected
+ by option <c>PCRE_DOTALL</c>. That is, it matches any character except one
+ that signifies the end of a line. Perl also uses \N to match characters by
+ name but PCRE does not support this.</p>
+ </section>
-<p>Inside a character class, \b has a different meaning; it matches the backspace
-character. If any other of these assertions appears in a character class, by
-default it matches the corresponding literal character (for example, \B
-matches the letter B). </p>
-
-<p>A word boundary is a position in the subject string where the current character
-and the previous character do not both match \w or \W (i.e. one matches
-\w and the other matches \W), or the start or end of the string if the
-first or last character matches \w, respectively. In a UTF mode, the meanings
-of \w and \W can be changed by setting the <c>ucp</c> option. When this is
-done, it also affects \b and \B. Neither PCRE nor Perl has a separate "start
-of word" or "end of word" metasequence. However, whatever follows \b normally
-determines which it is. For example, the fragment \ba matches "a" at the start
-of a word.</p>
-
-<p>The \A, \Z, and \z assertions differ from the traditional circumflex and
-dollar (described in the next section) in that they only ever match at the very
-start and end of the subject string, whatever options are set. Thus, they are
-independent of multiline mode. These three assertions are not affected by the
-<c>notbol</c> or <c>noteol</c> options, which affect only the behaviour of the
-circumflex and dollar metacharacters. However, if the <em>startoffset</em>
-argument of <c>re:run/3</c> is non-zero, indicating that matching is to start
-at a point other than the beginning of the subject, \A can never match. The
-difference between \Z and \z is that \Z matches before a newline at the end
-of the string as well as at the very end, whereas \z matches only at the end.</p>
-
-<p>The \G assertion is true only when the current matching position is at the
-start point of the match, as specified by the <em>startoffset</em> argument of
-<c>re:run/3</c>. It differs from \A when the value of <em>startoffset</em> is
-non-zero. By calling <c>re:run/3</c> multiple times with appropriate
-arguments, you can mimic Perl's /g option, and it is in this kind of
-implementation where \G can be useful.</p>
-
-<p>Note, however, that PCRE's interpretation of \G, as the start of the current
-match, is subtly different from Perl's, which defines it as the end of the
-previous match. In Perl, these can be different when the previously matched
-string was empty. Because PCRE does just one match at a time, it cannot
-reproduce this behaviour.</p>
-
-<p>If all the alternatives of a pattern begin with \G, the expression is anchored
-to the starting match position, and the "anchored" flag is set in the compiled
-regular expression.</p>
-
-</section>
-
-<section><marker id="sect4"></marker><title>Circumflex and dollar</title>
-
-<p>The circumflex and dollar metacharacters are zero-width assertions. That is,
-they test for a particular condition being true without consuming any
-characters from the subject string.</p>
-
-<p>Outside a character class, in the default matching mode, the circumflex
-character is an assertion that is true only if the current matching point is at
-the start of the subject string. If the <i>startoffset</i> argument of
-<c>re:run/3</c> is non-zero, circumflex can never match if the <c>multiline</c>
-option is unset. Inside a character class, circumflex has an entirely different
-meaning (see below).</p>
-
-<p>Circumflex need not be the first character of the pattern if a number of
-alternatives are involved, but it should be the first thing in each alternative
-in which it appears if the pattern is ever to match that branch. If all
-possible alternatives start with a circumflex, that is, if the pattern is
-constrained to match only at the start of the subject, it is said to be an
-"anchored" pattern. (There are also other constructs that can cause a pattern
-to be anchored.)</p>
-
-<p>The dollar character is an assertion that is true only if the current matching
-point is at the end of the subject string, or immediately before a newline at
-the end of the string (by default). Note, however, that it does not actually
-match the newline. Dollar need not be the last character of the pattern if a
-number of alternatives are involved, but it should be the last item in any
-branch in which it appears. Dollar has no special meaning in a character class.</p>
-
-<p>The meaning of dollar can be changed so that it matches only at the
-very end of the string, by setting the <c>dollar_endonly</c> option at
-compile time. This does not affect the \Z assertion.</p>
-
-<p>The meanings of the circumflex and dollar characters are changed if the
-<c>multiline</c> option is set. When this is the case, a circumflex matches
-immediately after internal newlines as well as at the start of the subject
-string. It does not match after a newline that ends the string. A dollar
-matches before any newlines in the string, as well as at the very end, when
-<c>multiline</c> is set. When newline is specified as the two-character
-sequence CRLF, isolated CR and LF characters do not indicate newlines.</p>
-
-<p>For example, the pattern /^abc$/ matches the subject string
-"def\nabc" (where \n represents a newline) in multiline mode, but
-not otherwise. Consequently, patterns that are anchored in single line
-mode because all branches start with ^ are not anchored in multiline
-mode, and a match for circumflex is possible when the
-<em>startoffset</em> argument of <c>re:run/3</c> is non-zero. The
-<c>dollar_endonly</c> option is ignored if <c>multiline</c> is set.</p>
-
-<p>Note that the sequences \A, \Z, and \z can be used to match the start and
-end of the subject in both modes, and if all branches of a pattern start with
-\A it is always anchored, whether or not <c>multiline</c> is set.</p>
-
-
-</section>
-
-<section><marker id="sect5"></marker><title>Full stop (period, dot) and \N</title>
-
-<p>Outside a character class, a dot in the pattern matches any one character in
-the subject string except (by default) a character that signifies the end of a
-line.
-</p>
-
-<p>When a line ending is defined as a single character, dot never matches that
-character; when the two-character sequence CRLF is used, dot does not match CR
-if it is immediately followed by LF, but otherwise it matches all characters
-(including isolated CRs and LFs).
-When any Unicode line endings are being
-recognized, dot does not match CR or LF or any of the other line ending
-characters.
-</p>
-
-<p>The behaviour of dot with regard to newlines can be changed. If
-the <c>dotall</c> option is set, a dot matches any one character,
-without exception. If the two-character sequence CRLF is present in
-the subject string, it takes two dots to match it.</p>
-
-<p>The handling of dot is entirely independent of the handling of
-circumflex and dollar, the only relationship being that they both
-involve newlines. Dot has no special meaning in a character class.</p>
-
-<p>The escape sequence \N behaves like a dot, except that it is not affected by
-the PCRE_DOTALL option. In other words, it matches any character except one
-that signifies the end of a line. Perl also uses \N to match characters by
-name; PCRE does not support this.</p>
-
-</section>
-
-<section><marker id="sect6"></marker><title>Matching a single data unit</title>
-
-<p>Outside a character class, the escape sequence \C matches any one data unit,
-whether or not a UTF mode is set. One data unit is one
-byte. Unlike a dot, \C always
-matches line-ending characters. The feature is provided in Perl in order to
-match individual bytes in UTF-8 mode, but it is unclear how it can usefully be
-used. Because \C breaks up characters into individual data units, matching one
-unit with \C in a UTF mode means that the rest of the string may start with a
-malformed UTF character. This has undefined results, because PCRE assumes that
-it is dealing with valid UTF strings.</p>
-
-<p>PCRE does not allow \C to appear in lookbehind assertions (described below)
-in a UTF mode, because this would make it impossible to calculate the length of
-the lookbehind.</p>
-
-<p>In general, the \C escape sequence is best avoided. However, one
-way of using it that avoids the problem of malformed UTF characters is to use a
-lookahead to check the length of the next character, as in this pattern, which
-could be used with a UTF-8 string (ignore white space and line breaks):</p>
+ <section>
+ <marker id="sect6"></marker>
+ <title>Matching a Single Data Unit</title>
+ <p>Outside a character class, the escape sequence \C matches any data unit,
+ regardless if a UTF mode is set. One data unit is one byte. Unlike a dot,
+ \C always matches line-ending characters. The feature is provided in Perl
+ to match individual bytes in UTF-8 mode, but it is unclear how it can
+ usefully be used. As \C breaks up characters into individual data units,
+ matching one unit with \C in a UTF mode means that the remaining string
+ can start with a malformed UTF character. This has undefined results, as
+ PCRE assumes that it deals with valid UTF strings.</p>
+
+ <p>PCRE does not allow \C to appear in lookbehind assertions (described
+ below) in a UTF mode, as this would make it impossible to calculate the
+ length of the lookbehind.</p>
+
+ <p>The \C escape sequence is best avoided. However, one way of using it that
+ avoids the problem of malformed UTF characters is to use a lookahead to
+ check the length of the next character, as in the following pattern, which
+ can be used with a UTF-8 string (ignore whitespace and line breaks):</p>
<code type="none">
- (?| (?=[\x00-\x7f])(\C) |
- (?=[\x80-\x{7ff}])(\C)(\C) |
- (?=[\x{800}-\x{ffff}])(\C)(\C)(\C) |
- (?=[\x{10000}-\x{1fffff}])(\C)(\C)(\C)(\C))</code>
-
-<p>A group that starts with (?| resets the capturing parentheses numbers in each
-alternative (see "Duplicate Subpattern Numbers"
-below). The assertions at the start of each branch check the next UTF-8
-character for values whose encoding uses 1, 2, 3, or 4 bytes, respectively. The
-character's individual bytes are then captured by the appropriate number of
-groups.</p>
-
-</section>
-
-<section><marker id="sect7"></marker><title>Square brackets and character classes</title>
-
-<p>An opening square bracket introduces a character class, terminated by a closing
-square bracket. A closing square bracket on its own is not special by default.
-However, if the PCRE_JAVASCRIPT_COMPAT option is set, a lone closing square
-bracket causes a compile-time error. If a closing square bracket is required as
-a member of the class, it should be the first data character in the class
-(after an initial circumflex, if present) or escaped with a backslash.</p>
-
-<p>A character class matches a single character in the subject. In a UTF mode, the
-character may be more than one data unit long. A matched character must be in
-the set of characters defined by the class, unless the first character in the
-class definition is a circumflex, in which case the subject character must not
-be in the set defined by the class. If a circumflex is actually required as a
-member of the class, ensure it is not the first character, or escape it with a
-backslash.</p>
-
-<p>For example, the character class [aeiou] matches any lower case vowel, while
-[^aeiou] matches any character that is not a lower case vowel. Note that a
-circumflex is just a convenient notation for specifying the characters that
-are in the class by enumerating those that are not. A class that starts with a
-circumflex is not an assertion; it still consumes a character from the subject
-string, and therefore it fails if the current pointer is at the end of the
-string.</p>
-
-<p>In UTF-8 mode, characters with values greater than 255 (0xffff)
-can be included in a class as a literal string of data units, or by using the
-\x{ escaping mechanism.</p>
-
-<p>When caseless matching is set, any letters in a class represent both their
-upper case and lower case versions, so for example, a caseless [aeiou] matches
-"A" as well as "a", and a caseless [^aeiou] does not match "A", whereas a
-caseful version would. In a UTF mode, PCRE always understands the concept of
-case for characters whose values are less than 256, so caseless matching is
-always possible. For characters with higher values, the concept of case is
-supported if PCRE is compiled with Unicode property support, but not otherwise.
-If you want to use caseless matching in a UTF mode for characters 256 and
-above, you must ensure that PCRE is compiled with Unicode property support as
-well as with UTF support.</p>
-
-<p>Characters that might indicate line breaks are never treated in any special way
-when matching character classes, whatever line-ending sequence is in use, and
-whatever setting of the PCRE_DOTALL and PCRE_MULTILINE options is used. A class
-such as [^a] always matches one of these characters.</p>
-
-<p>The minus (hyphen) character can be used to specify a range of characters in a
-character class. For example, [d-m] matches any letter between d and m,
-inclusive. If a minus character is required in a class, it must be escaped with
-a backslash or appear in a position where it cannot be interpreted as
-indicating a range, typically as the first or last character in the class.</p>
-
-<p>It is not possible to have the literal character "]" as the end character of a
-range. A pattern such as [W-]46] is interpreted as a class of two characters
-("W" and "-") followed by a literal string "46]", so it would match "W46]" or
-"-46]". However, if the "]" is escaped with a backslash it is interpreted as
-the end of range, so [W-\]46] is interpreted as a class containing a range
-followed by two other characters. The octal or hexadecimal representation of
-"]" can also be used to end a range.</p>
-
-<p>Ranges operate in the collating sequence of character values. They can also be
-used for characters specified numerically, for example [\000-\037]. Ranges
-can include any characters that are valid for the current mode.</p>
-
-<p>If a range that includes letters is used when caseless matching is set, it
-matches the letters in either case. For example, [W-c] is equivalent to
-[][\\^_`wxyzabc], matched caselessly, and in a non-UTF mode, if character
-tables for a French locale are in use, [\xc8-\xcb] matches accented E
-characters in both cases. In UTF modes, PCRE supports the concept of case for
-characters with values greater than 255 only when it is compiled with Unicode
-property support.</p>
-
-<p>The character escape sequences \d, \D, \h, \H, \p, \P, \s, \S, \v,
-\V, \w, and \W may appear in a character class, and add the characters that
-they match to the class. For example, [\dABCDEF] matches any hexadecimal
-digit. In UTF modes, the <c>ucp</c> option affects the meanings of \d, \s, \w
-and their upper case partners, just as it does when they appear outside a
-character class, as described in the section entitled
-"Generic character types"
-above. The escape sequence \b has a different meaning inside a character
-class; it matches the backspace character. The sequences \B, \N, \R, and \X
-are not special inside a character class. Like any other unrecognized escape
-sequences, they are treated as the literal characters "B", "N", "R", and "X".</p>
-
-<p>A circumflex can conveniently be used with the upper case character types to
-specify a more restricted set of characters than the matching lower case type.
-For example, the class [^\W_] matches any letter or digit, but not underscore,
-whereas [\w] includes underscore. A positive character class should be read as
-"something OR something OR ..." and a negative class as "NOT something AND NOT
-something AND NOT ...".</p>
-
-<p>The only metacharacters that are recognized in character classes
-are backslash, hyphen (only where it can be interpreted as specifying
-a range), circumflex (only at the start), opening square bracket (only
-when it can be interpreted as introducing a POSIX class name - see the
-next section), and the terminating closing square bracket. However,
-escaping other non-alphanumeric characters does no harm.</p>
-</section>
-
-<section><marker id="sect8"></marker><title>POSIX character classes</title>
-
-<p>Perl supports the POSIX notation for character classes. This uses names
-enclosed by [: and :] within the enclosing square brackets. PCRE also supports
-this notation. For example,</p>
-
-<quote><p> [01[:alpha:]%]</p></quote>
-
-<p>matches "0", "1", any alphabetic character, or "%". The supported class names
-are:</p>
-
-<taglist>
- <tag>alnum</tag> <item>letters and digits</item>
- <tag>alpha</tag> <item>letters</item>
- <tag>ascii</tag> <item>character codes 0 - 127</item>
- <tag>blank</tag> <item>space or tab only</item>
- <tag>cntrl</tag> <item>control characters</item>
- <tag>digit</tag> <item>decimal digits (same as \d)</item>
- <tag>graph</tag> <item>printing characters, excluding space</item>
- <tag>lower</tag> <item>lower case letters</item>
- <tag>print</tag> <item>printing characters, including space</item>
- <tag>punct</tag> <item>printing characters, excluding letters and digits and space</item>
- <tag>space</tag> <item>whitespace (not quite the same as \s)</item>
- <tag>upper</tag> <item>upper case letters</item>
- <tag>word</tag> <item>"word" characters (same as \w)</item>
- <tag>xdigit</tag> <item>hexadecimal digits</item>
-</taglist>
-
-<p>The "space" characters are HT (9), LF (10), VT (11), FF (12), CR (13), and
-space (32). Notice that this list includes the VT character (code 11). This
-makes "space" different to \s, which does not include VT (for Perl
-compatibility).</p>
-
-<p>The name "word" is a Perl extension, and "blank" is a GNU extension
-from Perl 5.8. Another Perl extension is negation, which is indicated
-by a ^ character after the colon. For example,</p>
-
-<quote><p> [12[:^digit:]]</p></quote>
-
-<p>matches "1", "2", or any non-digit. PCRE (and Perl) also recognize the POSIX
-syntax [.ch.] and [=ch=] where "ch" is a "collating element", but these are not
-supported, and an error is given if they are encountered.</p>
-
-<p>By default, in UTF modes, characters with values greater than 255 do not match
-any of the POSIX character classes. However, if the PCRE_UCP option is passed
-to <em>pcre_compile()</em>, some of the classes are changed so that Unicode
-character properties are used. This is achieved by replacing the POSIX classes
-by other sequences, as follows:</p>
-
-<taglist>
- <tag>[:alnum:]</tag> <item>becomes <em>\p{Xan}</em></item>
- <tag>[:alpha:]</tag> <item>becomes <em>\p{L}</em></item>
- <tag>[:blank:]</tag> <item>becomes <em>\h</em></item>
- <tag>[:digit:]</tag> <item>becomes <em>\p{Nd}</em></item>
- <tag>[:lower:]</tag> <item>becomes <em>\p{Ll}</em></item>
- <tag>[:space:]</tag> <item>becomes <em>\p{Xps}</em></item>
- <tag>[:upper:]</tag> <item>becomes <em>\p{Lu}</em></item>
- <tag>[:word:]</tag> <item>becomes <em>\p{Xwd}</em></item>
-</taglist>
-
-<p>Negated versions, such as [:^alpha:] use \P instead of \p. The other POSIX
-classes are unchanged, and match only characters with code points less than
-256.</p>
-
-</section>
-
-
-<section><marker id="sect9"></marker><title>Vertical bar</title>
-
-<p>Vertical bar characters are used to separate alternative
-patterns. For example, the pattern</p>
-
-<quote><p> gilbert|sullivan</p></quote>
-
-<p>matches either "gilbert" or "sullivan". Any number of alternatives
-may appear, and an empty alternative is permitted (matching the empty
-string). The matching process tries each alternative in turn, from
-left to right, and the first one that succeeds is used. If the
-alternatives are within a subpattern (defined below), "succeeds" means
-matching the rest of the main pattern as well as the alternative in
-the subpattern.</p>
-
-</section>
-
-<section><marker id="sect10"></marker><title>Internal option setting</title>
-
-<p>The settings of the <c>caseless</c>, <c>multiline</c>, <c>dotall</c>, and
-<c>extended</c> options (which are Perl-compatible) can be changed from within
-the pattern by a sequence of Perl option letters enclosed between "(?" and ")".
-The option letters are</p>
-
-<taglist>
- <tag>i</tag> <item>for <c>caseless</c></item>
- <tag>m</tag> <item>for <c>multiline</c></item>
- <tag>s</tag> <item>for <c>dotall</c></item>
- <tag>x</tag> <item>for <c>extended</c></item>
-</taglist>
-
-<p>For example, (?im) sets caseless, multiline matching. It is also possible to
-unset these options by preceding the letter with a hyphen, and a combined
-setting and unsetting such as (?im-sx), which sets <c>caseless</c> and
-<c>multiline</c> while unsetting <c>dotall</c> and <c>extended</c>, is also
-permitted. If a letter appears both before and after the hyphen, the option is
-unset.</p>
-
-<p>The PCRE-specific options <c>dupnames</c>, <c>ungreedy</c>, and
-<c>extra</c> can be changed in the same way as the Perl-compatible
-options by using the characters J, U and X respectively.</p>
-
-<p>When one of these option changes occurs at top level (that is, not inside
-subpattern parentheses), the change applies to the remainder of the pattern
-that follows. If the change is placed right at the start of a pattern, PCRE
-extracts it into the global options.</p>
-
-<p>An option change within a subpattern (see below for a description of
-subpatterns) affects only that part of the subpattern that follows it, so</p>
-
-<quote><p> (a(?i)b)c</p></quote>
-
-<p>matches abc and aBc and no other strings (assuming <c>caseless</c>
-is not used). By this means, options can be made to have different
-settings in different parts of the pattern. Any changes made in one
-alternative do carry on into subsequent branches within the same
-subpattern. For example,</p>
-
-<quote><p> (a(?i)b|c)</p></quote>
-
-<p>matches "ab", "aB", "c", and "C", even though when matching "C" the first
-branch is abandoned before the option setting. This is because the effects of
-option settings happen at compile time. There would be some very weird
-behaviour otherwise.</p>
-
-<p><em>Note:</em> There are other PCRE-specific options that can be set by the
-application when the compiling or matching functions are called. In some cases
-the pattern can contain special leading sequences such as (*CRLF) to override
-what the application has set or what has been defaulted. Details are given in
-the section entitled "Newline sequences"
-above. There are also the (*UTF8) and (*UCP) leading
-sequences that can be used to set UTF and Unicode property modes; they are
-equivalent to setting the <c>unicode</c> and the <c>ucp</c>
-options, respectively. The (*UTF) sequence is a generic version that can be
-used with any of the libraries. However, the application can set the
-<c>never_utf</c> option, which locks out the use of the (*UTF) sequences.</p>
-
-</section>
-
-<section><marker id="sect11"></marker><title>Subpatterns</title>
-
-<p>Subpatterns are delimited by parentheses (round brackets), which
-can be nested. Turning part of a pattern into a subpattern does two
-things:</p>
-
-<p>1. It localizes a set of alternatives. For example, the pattern</p>
-
-<quote><p> cat(aract|erpillar|)</p></quote>
-
-<p>matches "cataract", "caterpillar", or "cat". Without the parentheses, it would
-match "cataract", "erpillar" or an empty string.</p>
-
-<p>2. It sets up the subpattern as a capturing subpattern. This means that, when
-the complete pattern matches, that portion of the subject string that matched the
-subpattern is passed back to the caller via the return value of
-<c>re:run/3</c>.</p>
-
-<p>Opening parentheses are counted from left to right (starting
-from 1) to obtain numbers for the capturing subpatterns.For example, if the string
-"the red king" is matched against the pattern</p>
-
-<quote><p> the ((red|white) (king|queen))</p></quote>
-
-<p>the captured substrings are "red king", "red", and "king", and are numbered 1,
-2, and 3, respectively.</p>
-
-<p>The fact that plain parentheses fulfil two functions is not always helpful.
-There are often times when a grouping subpattern is required without a
-capturing requirement. If an opening parenthesis is followed by a question mark
-and a colon, the subpattern does not do any capturing, and is not counted when
-computing the number of any subsequent capturing subpatterns. For example, if
-the string "the white queen" is matched against the pattern</p>
-
-<quote><p> the ((?:red|white) (king|queen))</p></quote>
-
-<p>the captured substrings are "white queen" and "queen", and are numbered 1 and
-2. The maximum number of capturing subpatterns is 65535.</p>
-
-<p>As a convenient shorthand, if any option settings are required at the start of
-a non-capturing subpattern, the option letters may appear between the "?" and
-the ":". Thus the two patterns</p>
+(?| (?=[\x00-\x7f])(\C) |
+ (?=[\x80-\x{7ff}])(\C)(\C) |
+ (?=[\x{800}-\x{ffff}])(\C)(\C)(\C) |
+ (?=[\x{10000}-\x{1fffff}])(\C)(\C)(\C)(\C))</code>
+
+ <p>A group that starts with (?| resets the capturing parentheses numbers in
+ each alternative (see section <seealso marker="#sect12">Duplicate
+ Subpattern Numbers</seealso>). The assertions at the start of each branch
+ check the next UTF-8 character for values whose encoding uses 1, 2, 3, or
+ 4 bytes, respectively. The individual bytes of the character are then
+ captured by the appropriate number of groups.</p>
+ </section>
-<list>
-<item>(?i:saturday|sunday)</item>
-<item>(?:(?i)saturday|sunday)</item>
-</list>
+ <section>
+ <marker id="sect7"></marker>
+ <title>Square Brackets and Character Classes</title>
+ <p>An opening square bracket introduces a character class, terminated by a
+ closing square bracket. A closing square bracket on its own is not special
+ by default. However, if option <c>PCRE_JAVASCRIPT_COMPAT</c> is set, a
+ lone closing square bracket causes a compile-time error. If a closing
+ square bracket is required as a member of the class, it is to be the first
+ data character in the class (after an initial circumflex, if present) or
+ escaped with a backslash.</p>
+
+ <p>A character class matches a single character in the subject. In a UTF
+ mode, the character can be more than one data unit long. A matched
+ character must be in the set of characters defined by the class, unless
+ the first character in the class definition is a circumflex, in which case
+ the subject character must not be in the set defined by the class. If a
+ circumflex is required as a member of the class, ensure that it is not the
+ first character, or escape it with a backslash.</p>
+
+ <p>For example, the character class <c>[aeiou]</c> matches any lowercase
+ vowel, while <c>[^aeiou]</c> matches any character that is not a lowercase
+ vowel. Notice that a circumflex is just a convenient notation for
+ specifying the characters that are in the class by enumerating those that
+ are not. A class that starts with a circumflex is not an assertion; it
+ still consumes a character from the subject string, and therefore it fails
+ if the current pointer is at the end of the string.</p>
+
+ <p>In UTF-8 mode, characters with values &gt; 255 (0xffff) can be included
+ in a class as a literal string of data units, or by using the \x{ escaping
+ mechanism.</p>
+
+ <p>When caseless matching is set, any letters in a class represent both
+ their uppercase and lowercase versions. For example, a caseless
+ <c>[aeiou]</c> matches "A" and "a", and a caseless <c>[^aeiou]</c> does
+ not match "A", but a caseful version would. In a UTF mode, PCRE always
+ understands the concept of case for characters whose values are &lt; 256,
+ so caseless matching is always possible. For characters with higher
+ values, the concept of case is supported only if PCRE is compiled with
+ Unicode property support. If you want to use caseless matching in a UTF
+ mode for characters &gt;=, ensure that PCRE is compiled with Unicode
+ property support and with UTF support.</p>
+
+ <p>Characters that can indicate line breaks are never treated in any special
+ way when matching character classes, whatever line-ending sequence is in
+ use, and whatever setting of options <c>PCRE_DOTALL</c> and
+ <c>PCRE_MULTILINE</c> is used. A class such as [^a] always matches one of
+ these characters.</p>
+
+ <p>The minus (hyphen) character can be used to specify a range of characters
+ in a character class. For example, [d-m] matches any letter between d and
+ m, inclusive. If a minus character is required in a class, it must be
+ escaped with a backslash or appear in a position where it cannot be
+ interpreted as indicating a range, typically as the first or last
+ character in the class.</p>
+
+ <p>The literal character "]" cannot be the end character of a range. A
+ pattern such as [W-]46] is interpreted as a class of two characters ("W"
+ and "-") followed by a literal string "46]", so it would match "W46]" or
+ "-46]". However, if "]" is escaped with a backslash, it is interpreted as
+ the end of range, so [W-\]46] is interpreted as a class containing a range
+ followed by two other characters. The octal or hexadecimal representation
+ of "]" can also be used to end a range.</p>
+
+ <p>Ranges operate in the collating sequence of character values. They can
+ also be used for characters specified numerically, for example,
+ [\000-\037]. Ranges can include any characters that are valid for the
+ current mode.</p>
+
+ <p>If a range that includes letters is used when caseless matching is set,
+ it matches the letters in either case. For example, [W-c] is equivalent to
+ [][\\^_`wxyzabc], matched caselessly. In a non-UTF mode, if character
+ tables for a French locale are in use, [\xc8-\xcb] matches accented E
+ characters in both cases. In UTF modes, PCRE supports the concept of case
+ for characters with values &gt; 255 only when it is compiled with Unicode
+ property support.</p>
+
+ <p>The character escape sequences \d, \D, \h, \H, \p, \P, \s, \S, \v, \V,
+ \w, and \W can appear in a character class, and add the characters that
+ they match to the class. For example, [\dABCDEF] matches any hexadecimal
+ digit. In UTF modes, option <c>ucp</c> affects the meanings of \d, \s, \w
+ and their uppercase partners, just as it does when they appear outside a
+ character class, as described in section
+ <seealso marker="#generic_character_types">Generic Character
+ Types</seealso> earlier. The escape sequence \b has a different meaning
+ inside a character class; it matches the backspace character. The
+ sequences \B, \N, \R, and \X are not special inside a character class.
+ Like any other unrecognized escape sequences, they are treated as the
+ literal characters "B", "N", "R", and "X".</p>
+
+ <p>A circumflex can conveniently be used with the uppercase character types
+ to specify a more restricted set of characters than the matching lowercase
+ type. For example, class [^\W_] matches any letter or digit, but not
+ underscore, while [\w] includes underscore. A positive character class
+ is to be read as "something OR something OR ..." and a negative class as
+ "NOT something AND NOT something AND NOT ...".</p>
+
+ <p>Only the following metacharacters are recognized in character
+ classes:</p>
+
+ <list type="bulleted">
+ <item>Backslash</item>
+ <item>Hyphen (only where it can be interpreted as specifying a
+ range)</item>
+ <item>Circumflex (only at the start)</item>
+ <item>Opening square bracket (only when it can be interpreted as
+ introducing a Posix class name; see the next section)</item>
+ <item>Terminating closing square bracket</item>
+ </list>
+
+ <p>However, escaping other non-alphanumeric characters does no harm.</p>
+ </section>
-<p>match exactly the same set of strings. Because alternative branches are tried
-from left to right, and options are not reset until the end of the subpattern
-is reached, an option setting in one branch does affect subsequent branches, so
-the above patterns match "SUNDAY" as well as "Saturday".</p>
+ <section>
+ <marker id="sect8"></marker>
+ <title>Posix Character Classes</title>
+ <p>Perl supports the Posix notation for character classes. This uses names
+ enclosed by [: and :] within the enclosing square brackets. PCRE also
+ supports this notation. For example, the following matches "0", "1", any
+ alphabetic character, or "%":</p>
+
+ <code>
+[01[:alpha:]%]</code>
+
+ <p>The following are the supported class names:</p>
+
+ <taglist>
+ <tag>alnum</tag><item>Letters and digits</item>
+ <tag>alpha</tag><item>Letters</item>
+ <tag>ascii</tag><item>Character codes 0-127</item>
+ <tag>blank</tag><item>Space or tab only</item>
+ <tag>cntrl</tag><item>Control characters</item>
+ <tag>digit</tag><item>Decimal digits (same as \d)</item>
+ <tag>graph</tag><item>Printing characters, excluding space</item>
+ <tag>lower</tag><item>Lowercase letters</item>
+ <tag>print</tag><item>Printing characters, including space</item>
+ <tag>punct</tag><item>Printing characters, excluding letters, digits, and
+ space</item>
+ <tag>space</tag><item>Whitespace (not quite the same as \s)</item>
+ <tag>upper</tag><item>Uppercase letters</item>
+ <tag>word</tag><item>"Word" characters (same as \w)</item>
+ <tag>xdigit</tag><item>Hexadecimal digits</item>
+ </taglist>
+
+ <p>The "space" characters are HT (9), LF (10), VT (11), FF (12), CR (13),
+ and space (32). Notice that this list includes the VT character (code 11).
+ This makes "space" different to \s, which does not include VT (for Perl
+ compatibility).</p>
+
+ <p>The name "word" is a Perl extension, and "blank" is a GNU extension from
+ Perl 5.8. Another Perl extension is negation, which is indicated by a ^
+ character after the colon. For example, the following matches "1", "2",
+ or any non-digit:</p>
+
+ <code>
+[12[:^digit:]]</code>
+
+ <p>PCRE (and Perl) also recognize the Posix syntax [.ch.] and [=ch=] where
+ "ch" is a "collating element", but these are not supported, and an error
+ is given if they are encountered.</p>
+
+ <p>By default, in UTF modes, characters with values &gt; 255 do not match
+ any of the Posix character classes. However, if option <c>PCRE_UCP</c> is
+ passed to <c>pcre_compile()</c>, some of the classes are changed so that
+ Unicode character properties are used. This is achieved by replacing the
+ Posix classes by other sequences, as follows:</p>
+
+ <taglist>
+ <tag>[:alnum:]</tag><item>Becomes <em>\p{Xan}</em></item>
+ <tag>[:alpha:]</tag><item>Becomes <em>\p{L}</em></item>
+ <tag>[:blank:]</tag><item>Becomes <em>\h</em></item>
+ <tag>[:digit:]</tag><item>Becomes <em>\p{Nd}</em></item>
+ <tag>[:lower:]</tag><item>Becomes <em>\p{Ll}</em></item>
+ <tag>[:space:]</tag><item>Becomes <em>\p{Xps}</em></item>
+ <tag>[:upper:]</tag><item>Becomes <em>\p{Lu}</em></item>
+ <tag>[:word:]</tag><item>Becomes <em>\p{Xwd}</em></item>
+ </taglist>
+
+ <p>Negated versions, such as [:^alpha:], use \P instead of \p. The other
+ Posix classes are unchanged, and match only characters with code points
+ &lt; 256.</p>
+ </section>
-</section>
+ <section>
+ <marker id="sect9"></marker>
+ <title>Vertical Bar</title>
+ <p>Vertical bar characters are used to separate alternative patterns. For
+ example, the following pattern matches either "gilbert" or "sullivan":</p>
+
+ <code>
+gilbert|sullivan</code>
+
+ <p>Any number of alternatives can appear, and an empty alternative is
+ permitted (matching the empty string). The matching process tries each
+ alternative in turn, from left to right, and the first that succeeds is
+ used. If the alternatives are within a subpattern (defined in section
+ <seealso marker="#sect11">Subpatterns</seealso>), "succeeds" means
+ matching the remaining main pattern and the alternative in the
+ subpattern.</p>
+ </section>
-<section><marker id="sect12"></marker><title>Duplicate subpattern numbers</title>
+ <section>
+ <marker id="sect10"></marker>
+ <title>Internal Option Setting</title>
+ <p>The settings of the Perl-compatible options <c>caseless</c>,
+ <c>multiline</c>, <c>dotall</c>, and <c>extended</c> can be changed from
+ within the pattern by a sequence of Perl option letters enclosed between
+ "(?" and ")". The option letters are as follows:</p>
+
+ <taglist>
+ <tag>i</tag><item>For <c>caseless</c></item>
+ <tag>m</tag><item>For <c>multiline</c></item>
+ <tag>s</tag><item>For <c>dotall</c></item>
+ <tag>x</tag><item>For <c>extended</c></item>
+ </taglist>
+
+ <p>For example, <c>(?im)</c> sets caseless, multiline matching. These
+ options can also be unset by preceding the letter with a hyphen. A
+ combined setting and unsetting such as <c>(?im-sx)</c>, which sets
+ <c>caseless</c> and <c>multiline</c>, while unsetting <c>dotall</c> and
+ <c>extended</c>, is also permitted. If a letter appears both before and
+ after the hyphen, the option is unset.</p>
+
+ <p>The PCRE-specific options <c>dupnames</c>, <c>ungreedy</c>, and
+ <c>extra</c> can be changed in the same way as the Perl-compatible
+ options by using the characters J, U, and X respectively.</p>
+
+ <p>When one of these option changes occurs at top-level (that is, not inside
+ subpattern parentheses), the change applies to the remainder of the
+ pattern that follows. If the change is placed right at the start of a
+ pattern, PCRE extracts it into the global options.</p>
+ <p>An option change within a subpattern (see section
+ <seealso marker="#sect11">Subpatterns</seealso>) affects only that part of
+ the subpattern that follows it. So, the following matches abc and aBc and
+ no other strings (assuming <c>caseless</c> is not used):</p>
+
+ <code>
+(a(?i)b)c</code>
+
+ <p>By this means, options can be made to have different settings in
+ different parts of the pattern. Any changes made in one alternative do
+ carry on into subsequent branches within the same subpattern. For
+ example:</p>
+
+ <code>
+(a(?i)b|c)</code>
+
+ <p>matches "ab", "aB", "c", and "C", although when matching "C" the first
+ branch is abandoned before the option setting. This is because the effects
+ of option settings occur at compile time. There would be some weird
+ behavior otherwise.</p>
-<p>Perl 5.10 introduced a feature whereby each alternative in a subpattern uses
-the same numbers for its capturing parentheses. Such a subpattern starts with
-(?| and is itself a non-capturing subpattern. For example, consider this
-pattern:</p>
+ <note>
+ <p>Other PCRE-specific options can be set by the application when the
+ compiling or matching functions are called. Sometimes the pattern can
+ contain special leading sequences, such as (*CRLF), to override what
+ the application has set or what has been defaulted. Details are provided
+ in section <seealso marker="#newline_sequences">
+ Newline Sequences</seealso> earlier.</p>
+ <p>The (*UTF8) and (*UCP) leading sequences can be used to set UTF and
+ Unicode property modes. They are equivalent to setting options
+ <c>unicode</c> and <c>ucp</c>, respectively. The (*UTF) sequence is a
+ generic version that can be used with any of the libraries. However,
+ the application can set option <c>never_utf</c>, which locks out the
+ use of the (*UTF) sequences.</p>
+ </note>
+ </section>
-<quote><p> (?|(Sat)ur|(Sun))day</p></quote>
+ <section>
+ <marker id="sect11"></marker>
+ <title>Subpatterns</title>
+ <p>Subpatterns are delimited by parentheses (round brackets), which can be
+ nested. Turning part of a pattern into a subpattern does two things:</p>
-<p>Because the two alternatives are inside a (?| group, both sets of capturing
-parentheses are numbered one. Thus, when the pattern matches, you can look
-at captured substring number one, whichever alternative matched. This construct
-is useful when you want to capture part, but not all, of one of a number of
-alternatives. Inside a (?| group, parentheses are numbered as usual, but the
-number is reset at the start of each branch. The numbers of any capturing
-parentheses that follow the subpattern start after the highest number used in
-any branch. The following example is taken from the Perl documentation. The
-numbers underneath show in which buffer the captured content will be stored.</p>
+ <taglist>
+ <tag>1.</tag>
+ <item>
+ <p>It localizes a set of alternatives. For example, the following
+ pattern matches "cataract", "caterpillar", or "cat":</p>
+ <code>
+cat(aract|erpillar|)</code>
+ <p>Without the parentheses, it would match "cataract", "erpillar", or an
+ empty string.</p>
+ </item>
+ <tag>2.</tag>
+ <item>
+ <p>It sets up the subpattern as a capturing subpattern. That is, when
+ the complete pattern matches, that portion of the subject string that
+ matched the subpattern is passed back to the caller through the
+ return value of <seealso marker="#run/3"><c>run/3</c></seealso>.</p>
+ </item>
+ </taglist>
+
+ <p>Opening parentheses are counted from left to right (starting from 1) to
+ obtain numbers for the capturing subpatterns. For example, if the string
+ "the red king" is matched against the following pattern, the captured
+ substrings are "red king", "red", and "king", and are numbered 1, 2, and
+ 3, respectively:</p>
+
+ <code>
+the ((red|white) (king|queen))</code>
+
+ <p>It is not always helpful that plain parentheses fulfill two functions.
+ Often a grouping subpattern is required without a capturing requirement.
+ If an opening parenthesis is followed by a question mark and a colon, the
+ subpattern does not do any capturing, and is not counted when computing
+ the number of any subsequent capturing subpatterns. For example, if the
+ string "the white queen" is matched against the following pattern, the
+ captured substrings are "white queen" and "queen", and are numbered 1 and
+ 2:</p>
+
+ <code>
+the ((?:red|white) (king|queen))</code>
+
+ <p>The maximum number of capturing subpatterns is 65535.</p>
+
+ <p>As a convenient shorthand, if any option settings are required at the
+ start of a non-capturing subpattern, the option letters can appear between
+ "?" and ":". Thus, the following two patterns match the same set of
+ strings:</p>
+
+ <code>
+(?i:saturday|sunday)
+(?:(?i)saturday|sunday)</code>
+
+ <p>As alternative branches are tried from left to right, and options are not
+ reset until the end of the subpattern is reached, an option setting in one
+ branch does affect subsequent branches, so the above patterns match both
+ "SUNDAY" and "Saturday".</p>
+ </section>
-<code type="none">
- # before ---------------branch-reset----------- after
- / ( a ) (?| x ( y ) z | (p (q) r) | (t) u (v) ) ( z ) /x
- # 1 2 2 3 2 3 4</code>
-
-<p>A back reference to a numbered subpattern uses the most recent value that is
-set for that number by any subpattern. The following pattern matches "abcabc"
-or "defdef":</p>
-
-<quote><p> /(?|(abc)|(def))\1/</p></quote>
-
-<p>In contrast, a subroutine call to a numbered subpattern always refers to the
-first one in the pattern with the given number. The following pattern matches
-"abcabc" or "defabc":</p>
-
-<quote><p> /(?|(abc)|(def))(?1)/</p></quote>
-
-<p>If a condition test
-for a subpattern's having matched refers to a non-unique number, the test is
-true if any of the subpatterns of that number have matched.</p>
-
-<p>An alternative approach to using this "branch reset" feature is to use
-duplicate named subpatterns, as described in the next section.</p>
-
-</section>
-
-<section><marker id="sect13"></marker><title>Named subpatterns</title>
-
-<p>Identifying capturing parentheses by number is simple, but it can be very hard
-to keep track of the numbers in complicated regular expressions. Furthermore,
-if an expression is modified, the numbers may change. To help with this
-difficulty, PCRE supports the naming of subpatterns. This feature was not
-added to Perl until release 5.10. Python had the feature earlier, and PCRE
-introduced it at release 4.0, using the Python syntax. PCRE now supports both
-the Perl and the Python syntax. Perl allows identically numbered subpatterns to
-have different names, but PCRE does not.</p>
-
-<p>In PCRE, a subpattern can be named in one of three ways:
-(?&lt;name&gt;...) or (?'name'...) as in Perl, or (?P&lt;name&gt;...)
-as in Python. References to capturing parentheses from other parts of
-the pattern, such as back references, recursion, and conditions, can be
-made by name as well as by number.</p>
-
-<p>Names consist of up to 32 alphanumeric characters and underscores. Named
-capturing parentheses are still allocated numbers as well as names, exactly as
-if the names were not present.
-<!-- XXX C Interface
-The PCRE API provides function calls for
-extracting the name-to-number translation table from a compiled pattern. There
-is also a convenience function for extracting a captured substring by name.
--->
-The <c>capture</c> specification to <c>re:run/3</c> can use named values if they are present in the regular expression.
-</p>
-
-<p>By default, a name must be unique within a pattern, but it is possible to relax
-this constraint by setting the <c>dupnames</c> option at compile time. (Duplicate
-names are also always permitted for subpatterns with the same number, set up as
-described in the previous section.) Duplicate names can be useful for patterns
-where only one instance of the named parentheses can match. Suppose you want to
-match the name of a weekday, either as a 3-letter abbreviation or as the full
-name, and in both cases you want to extract the abbreviation. This pattern
-(ignoring the line breaks) does the job:</p>
+ <section>
+ <marker id="sect12"></marker>
+ <title>Duplicate Subpattern Numbers</title>
+ <p>Perl 5.10 introduced a feature where each alternative in a subpattern
+ uses the same numbers for its capturing parentheses. Such a subpattern
+ starts with <c>(?|</c> and is itself a non-capturing subpattern. For
+ example, consider the following pattern:</p>
+
+ <code>
+(?|(Sat)ur|(Sun))day</code>
+
+ <p>As the two alternatives are inside a <c>(?|</c> group, both sets of
+ capturing parentheses are numbered one. Thus, when the pattern matches,
+ you can look at captured substring number one, whichever alternative
+ matched. This construct is useful when you want to capture a part, but
+ not all, of one of many alternatives. Inside a <c>(?|</c> group,
+ parentheses are numbered as usual, but the number is reset at the start
+ of each branch. The numbers of any capturing parentheses that follow the
+ subpattern start after the highest number used in any branch.
+ The following example is from the Perl documentation; the numbers
+ underneath show in which buffer the captured content is stored:</p>
<code type="none">
- (?&lt;DN&gt;Mon|Fri|Sun)(?:day)?|
- (?&lt;DN&gt;Tue)(?:sday)?|
- (?&lt;DN&gt;Wed)(?:nesday)?|
- (?&lt;DN&gt;Thu)(?:rsday)?|
- (?&lt;DN&gt;Sat)(?:urday)?</code>
-
-<p>There are five capturing substrings, but only one is ever set after a match.
-(An alternative way of solving this problem is to use a "branch reset"
-subpattern, as described in the previous section.)</p>
-
-<!-- XXX C Interface
-
-<p>The convenience function for extracting the data by name returns the substring
-for the first (and in this example, the only) subpattern of that name that
-matched. This saves searching to find which numbered subpattern it was. If you
-make a reference to a non-unique named subpattern from elsewhere in the
-pattern, the one that corresponds to the lowest number is used. For further
-details of the interfaces for handling named subpatterns, see the
-<em>pcreapi</em>
-
-documentation.</p>
--->
-
-<p>In case of capturing named subpatterns which names are not unique, the first matching occurrence (counted from left to right in the subject) is returned from <c>re:exec/3</c>, if the name is specified in the <c>values</c> part of the <c>capture</c> statement. The <c>all_names</c> capturing value will match all of the names in the same way.</p>
-
-<p><em>Warning:</em> You cannot use different names to distinguish between two
-subpatterns with the same number because PCRE uses only the numbers when
-matching. For this reason, an error is given at compile time if different names
-are given to subpatterns with the same number. However, you can give the same
-name to subpatterns with the same number, even when <c>dupnames</c> is not set.</p>
-
-</section>
-
-<section><marker id="sect14"></marker><title>Repetition</title>
-
-<p>Repetition is specified by quantifiers, which can follow any of the
-following items:</p>
-
-<list>
- <item>a literal data character</item>
- <item>the dot metacharacter</item>
- <item>the \C escape sequence</item>
- <item>the \X escape sequence</item>
- <item>the \R escape sequence</item>
- <item>an escape such as \d or \pL that matches a single character</item>
- <item>a character class</item>
- <item>a back reference (see next section)</item>
- <item>a parenthesized subpattern (including assertions)</item>
- <item>a subroutine call to a subpattern (recursive or otherwise)</item>
-</list>
-
-<p>The general repetition quantifier specifies a minimum and maximum number of
-permitted matches, by giving the two numbers in curly brackets (braces),
-separated by a comma. The numbers must be less than 65536, and the first must
-be less than or equal to the second. For example:</p>
-
-<quote><p> z{2,4}</p></quote>
-
-<p>matches "zz", "zzz", or "zzzz". A closing brace on its own is not a special
-character. If the second number is omitted, but the comma is present, there is
-no upper limit; if the second number and the comma are both omitted, the
-quantifier specifies an exact number of required matches. Thus</p>
-
-<quote><p> [aeiou]{3,}</p></quote>
-
-<p>matches at least 3 successive vowels, but may match many more, while</p>
-
-<quote><p> \d{8}</p></quote>
-
-<p>matches exactly 8 digits. An opening curly bracket that appears in a position
-where a quantifier is not allowed, or one that does not match the syntax of a
-quantifier, is taken as a literal character. For example, {,6} is not a
-quantifier, but a literal string of four characters.</p>
-
-<p>In Unicode mode, quantifiers apply to characters rather than to individual data
-units. Thus, for example, \x{100}{2} matches two characters, each of
-which is represented by a two-byte sequence in a UTF-8 string. Similarly,
-\X{3} matches three Unicode extended grapheme clusters, each of which may be
-several data units long (and they may be of different lengths).</p>
-<p>The quantifier {0} is permitted, causing the expression to behave as if the
-previous item and the quantifier were not present. This may be useful for
-subpatterns that are referenced as subroutines
-from elsewhere in the pattern (but see also the section entitled
-"Defining subpatterns for use by reference only"
-below). Items other than subpatterns that have a {0} quantifier are omitted
-from the compiled pattern.</p>
-
-<p>For convenience, the three most common quantifiers have single-character
-abbreviations:</p>
-
-<taglist>
- <tag>*</tag> <item>is equivalent to {0,}</item>
- <tag>+</tag> <item>is equivalent to {1,}</item>
- <tag>?</tag> <item>is equivalent to {0,1}</item>
-</taglist>
-
-<p>It is possible to construct infinite loops by following a
-subpattern that can match no characters with a quantifier that has no
-upper limit, for example:</p>
-
-<quote><p> (a?)*</p></quote>
-
-<p>Earlier versions of Perl and PCRE used to give an error at compile time for
-such patterns. However, because there are cases where this can be useful, such
-patterns are now accepted, but if any repetition of the subpattern does in fact
-match no characters, the loop is forcibly broken.</p>
-
-<p>By default, the quantifiers are "greedy", that is, they match as much as
-possible (up to the maximum number of permitted times), without causing the
-rest of the pattern to fail. The classic example of where this gives problems
-is in trying to match comments in C programs. These appear between /* and */
-and within the comment, individual * and / characters may appear. An attempt to
-match C comments by applying the pattern</p>
-
-<quote><p> /\*.*\*/</p></quote>
-
-<p>to the string</p>
-
-<quote><p> /* first comment */ not comment /* second comment */</p></quote>
-
-<p>fails, because it matches the entire string owing to the greediness of the .*
-item.</p>
-
-<p>However, if a quantifier is followed by a question mark, it ceases to be
-greedy, and instead matches the minimum number of times possible, so the
-pattern</p>
-
-<quote><p> /\*.*?\*/</p></quote>
-
-<p>does the right thing with the C comments. The meaning of the various
-quantifiers is not otherwise changed, just the preferred number of matches.
-Do not confuse this use of question mark with its use as a quantifier in its
-own right. Because it has two uses, it can sometimes appear doubled, as in</p>
-
-<quote><p> \d??\d</p></quote>
-
-<p>which matches one digit by preference, but can match two if that is the only
-way the rest of the pattern matches.</p>
-
-<p>If the <c>ungreedy</c> option is set (an option that is not available in Perl),
-the quantifiers are not greedy by default, but individual ones can be made
-greedy by following them with a question mark. In other words, it inverts the
-default behaviour.</p>
-
-<p>When a parenthesized subpattern is quantified with a minimum repeat count that
-is greater than 1 or with a limited maximum, more memory is required for the
-compiled pattern, in proportion to the size of the minimum or maximum.</p>
-
-<p>If a pattern starts with .* or .{0,} and the <c>dotall</c> option (equivalent
-to Perl's /s) is set, thus allowing the dot to match newlines, the pattern is
-implicitly anchored, because whatever follows will be tried against every
-character position in the subject string, so there is no point in retrying the
-overall match at any position after the first. PCRE normally treats such a
-pattern as though it were preceded by \A.</p>
-
-<p>In cases where it is known that the subject string contains no newlines, it is
-worth setting <c>dotall</c> in order to obtain this optimization, or
-alternatively using ^ to indicate anchoring explicitly.</p>
-
-<p>However, there are some cases where the optimization cannot be used. When .*
-is inside capturing parentheses that are the subject of a back reference
-elsewhere in the pattern, a match at the start may fail where a later one
-succeeds. Consider, for example:</p>
-
-<quote><p> (.*)abc\1</p></quote>
-
-<p>If the subject is "xyz123abc123" the match point is the fourth character. For
-this reason, such a pattern is not implicitly anchored.</p>
-
-<p>Another case where implicit anchoring is not applied is when the leading .* is
-inside an atomic group. Once again, a match at the start may fail where a later
-one succeeds. Consider this pattern:</p>
-
-<quote><p> (?&gt;.*?a)b</p></quote>
-
-<p>It matches "ab" in the subject "aab". The use of the backtracking control verbs
-(*PRUNE) and (*SKIP) also disable this optimization.</p>
-
-<p>When a capturing subpattern is repeated, the value captured is the substring
-that matched the final iteration. For example, after</p>
-
-<quote><p> (tweedle[dume]{3}\s*)+</p></quote>
-
-<p>has matched "tweedledum tweedledee" the value of the captured substring is
-"tweedledee". However, if there are nested capturing subpatterns, the
-corresponding captured values may have been set in previous iterations. For
-example, after</p>
-
-<quote><p> /(a|(b))+/</p></quote>
-
-<p>matches "aba" the value of the second captured substring is "b".</p>
-
-
-</section>
-
-<section><marker id="sect15"></marker><title>Atomic grouping and possessive quantifiers</title>
+# before ---------------branch-reset----------- after
+/ ( a ) (?| x ( y ) z | (p (q) r) | (t) u (v) ) ( z ) /x
+# 1 2 2 3 2 3 4</code>
-<p>With both maximizing ("greedy") and minimizing ("ungreedy" or "lazy")
-repetition, failure of what follows normally causes the repeated item to be
-re-evaluated to see if a different number of repeats allows the rest of the
-pattern to match. Sometimes it is useful to prevent this, either to change the
-nature of the match, or to cause it fail earlier than it otherwise might, when
-the author of the pattern knows there is no point in carrying on.</p>
+ <p>A back reference to a numbered subpattern uses the most recent value that
+ is set for that number by any subpattern. The following pattern matches
+ "abcabc" or "defdef":</p>
-<p>Consider, for example, the pattern \d+foo when applied to the subject line</p>
+ <code>
+/(?|(abc)|(def))\1/</code>
-<quote><p> 123456bar</p></quote>
+ <p>In contrast, a subroutine call to a numbered subpattern always refers to
+ the first one in the pattern with the given number. The following pattern
+ matches "abcabc" or "defabc":</p>
-<p>After matching all 6 digits and then failing to match "foo", the normal
-action of the matcher is to try again with only 5 digits matching the \d+
-item, and then with 4, and so on, before ultimately failing. "Atomic grouping"
-(a term taken from Jeffrey Friedl's book) provides the means for specifying
-that once a subpattern has matched, it is not to be re-evaluated in this way.</p>
+ <code>
+/(?|(abc)|(def))(?1)/</code>
-<p>If we use atomic grouping for the previous example, the matcher gives up
-immediately on failing to match "foo" the first time. The notation is a kind of
-special parenthesis, starting with (?&gt; as in this example:</p>
+ <p>If a condition test for a subpattern having matched refers to a
+ non-unique number, the test is true if any of the subpatterns of that
+ number have matched.</p>
-<quote><p> (?&gt;\d+)foo</p></quote>
-
-<p>This kind of parenthesis "locks up" the part of the pattern it contains once
-it has matched, and a failure further into the pattern is prevented from
-backtracking into it. Backtracking past it to previous items, however, works as
-normal.</p>
-
-<p>An alternative description is that a subpattern of this type matches the string
-of characters that an identical standalone pattern would match, if anchored at
-the current point in the subject string.</p>
-
-<p>Atomic grouping subpatterns are not capturing subpatterns. Simple cases such as
-the above example can be thought of as a maximizing repeat that must swallow
-everything it can. So, while both \d+ and \d+? are prepared to adjust the
-number of digits they match in order to make the rest of the pattern match,
-(?&gt;\d+) can only match an entire sequence of digits.</p>
-
-<p>Atomic groups in general can of course contain arbitrarily complicated
-subpatterns, and can be nested. However, when the subpattern for an atomic
-group is just a single repeated item, as in the example above, a simpler
-notation, called a "possessive quantifier" can be used. This consists of an
-additional + character following a quantifier. Using this notation, the
-previous example can be rewritten as</p>
-
-<quote><p> \d++foo</p></quote>
-
-<p>Note that a possessive quantifier can be used with an entire group, for
-example:</p>
-
-<quote><p> (abc|xyz){2,3}+</p></quote>
-
-<p>Possessive quantifiers are always greedy; the setting of the <c>ungreedy</c>
-option is ignored. They are a convenient notation for the simpler forms of
-atomic group. However, there is no difference in the meaning of a possessive
-quantifier and the equivalent atomic group, though there may be a performance
-difference; possessive quantifiers should be slightly faster.</p>
-
-<p>The possessive quantifier syntax is an extension to the Perl 5.8 syntax.
-Jeffrey Friedl originated the idea (and the name) in the first edition of his
-book. Mike McCloskey liked it, so implemented it when he built Sun's Java
-package, and PCRE copied it from there. It ultimately found its way into Perl
-at release 5.10.</p>
-
-<p>PCRE has an optimization that automatically "possessifies" certain simple
-pattern constructs. For example, the sequence A+B is treated as A++B because
-there is no point in backtracking into a sequence of A's when B must follow.</p>
+ <p>An alternative approach using this "branch reset" feature is to use
+ duplicate named subpatterns, as described in the next section.</p>
+ </section>
-<p>When a pattern contains an unlimited repeat inside a subpattern that can itself
-be repeated an unlimited number of times, the use of an atomic group is the
-only way to avoid some failing matches taking a very long time indeed. The
-pattern</p>
+ <section>
+ <marker id="sect13"></marker>
+ <title>Named Subpatterns</title>
+ <p>Identifying capturing parentheses by number is simple, but it can be
+ hard to keep track of the numbers in complicated regular expressions.
+ Also, if an expression is modified, the numbers can change. To help with
+ this difficulty, PCRE supports the naming of subpatterns. This feature was
+ not added to Perl until release 5.10. Python had the feature earlier, and
+ PCRE introduced it at release 4.0, using the Python syntax. PCRE now
+ supports both the Perl and the Python syntax. Perl allows identically
+ numbered subpatterns to have different names, but PCRE does not.</p>
+
+ <p>In PCRE, a subpattern can be named in one of three ways:
+ <c>(?&lt;name&gt;...)</c> or <c>(?'name'...)</c> as in Perl, or
+ <c>(?P&lt;name&gt;...)</c> as in Python. References to capturing
+ parentheses from other parts of the pattern, such as back references,
+ recursion, and conditions, can be made by name and by number.</p>
+
+ <p>Names consist of up to 32 alphanumeric characters and underscores. Named
+ capturing parentheses are still allocated numbers as well as names,
+ exactly as if the names were not present.
+ The <c>capture</c> specification to <seealso marker="#run/3">
+ <c>run/3</c></seealso> can use named values if they are present in the
+ regular expression.</p>
-<quote><p> (\D+|&lt;\d+&gt;)*[!?]</p></quote>
+ <p>By default, a name must be unique within a pattern, but this constraint
+ can be relaxed by setting option <c>dupnames</c> at compile time.
+ (Duplicate names are also always permitted for subpatterns with the same
+ number, set up as described in the previous section.) Duplicate names can
+ be useful for patterns where only one instance of the named parentheses
+ can match. Suppose that you want to match the name of a weekday, either as
+ a 3-letter abbreviation or as the full name, and in both cases you want to
+ extract the abbreviation. The following pattern (ignoring the line
+ breaks) does the job:</p>
+
+ <code type="none">
+(?&lt;DN&gt;Mon|Fri|Sun)(?:day)?|
+(?&lt;DN&gt;Tue)(?:sday)?|
+(?&lt;DN&gt;Wed)(?:nesday)?|
+(?&lt;DN&gt;Thu)(?:rsday)?|
+(?&lt;DN&gt;Sat)(?:urday)?</code>
+
+ <p>There are five capturing substrings, but only one is ever set after a
+ match. (An alternative way of solving this problem is to use a "branch
+ reset" subpattern, as described in the previous section.)</p>
+
+ <p>For capturing named subpatterns which names are not unique, the first
+ matching occurrence (counted from left to right in the subject) is
+ returned from <seealso marker="#run/3"><c>run/3</c></seealso>, if the name
+ is specified in the <c>values</c> part of the <c>capture</c> statement.
+ The <c>all_names</c> capturing value matches all the names in the same
+ way.</p>
-<p>matches an unlimited number of substrings that either consist of non-digits, or
-digits enclosed in &lt;&gt;, followed by either ! or ?. When it matches, it runs
-quickly. However, if it is applied to</p>
+ <note>
+ <p>You cannot use different names to distinguish between two subpatterns
+ with the same number, as PCRE uses only the numbers when matching. For
+ this reason, an error is given at compile time if different names are
+ specified to subpatterns with the same number. However, you can specify
+ the same name to subpatterns with the same number, even when
+ <c>dupnames</c> is not set.</p>
+ </note>
+ </section>
-<quote><p> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</p></quote>
+ <section>
+ <marker id="sect14"></marker>
+ <title>Repetition</title>
+ <p>Repetition is specified by quantifiers, which can follow any of the
+ following items:</p>
+
+ <list type="bulleted">
+ <item>A literal data character</item>
+ <item>The dot metacharacter</item>
+ <item>The \C escape sequence</item>
+ <item>The \X escape sequence</item>
+ <item>The \R escape sequence</item>
+ <item>An escape such as \d or \pL that matches a single character</item>
+ <item>A character class</item>
+ <item>A back reference (see the next section)</item>
+ <item>A parenthesized subpattern (including assertions)</item>
+ <item>A subroutine call to a subpattern (recursive or otherwise)</item>
+ </list>
+
+ <p>The general repetition quantifier specifies a minimum and maximum number
+ of permitted matches, by giving the two numbers in curly brackets
+ (braces), separated by a comma. The numbers must be &lt; 65536, and the
+ first must be less than or equal to the second. For example, the following
+ matches "zz", "zzz", or "zzzz":</p>
+
+ <code>
+z{2,4}</code>
+
+ <p>A closing brace on its own is not a special character. If the second
+ number is omitted, but the comma is present, there is no upper limit. If
+ the second number and the comma are both omitted, the quantifier specifies
+ an exact number of required matches. Thus, the following matches at least
+ three successive vowels, but can match many more:</p>
+
+ <code>
+[aeiou]{3,}</code>
+
+ <p>The following matches exactly eight digits:</p>
+
+ <code>
+\d{8}</code>
+
+ <p>An opening curly bracket that appears in a position where a quantifier is
+ not allowed, or one that does not match the syntax of a quantifier, is
+ taken as a literal character. For example, {,6} is not a quantifier, but a
+ literal string of four characters.</p>
+
+ <p>In Unicode mode, quantifiers apply to characters rather than to
+ individual data units. Thus, for example, \x{100}{2} matches two
+ characters, each of which is represented by a 2-byte sequence in a
+ UTF-8 string. Similarly, \X{3} matches three Unicode extended grapheme
+ clusters, each of which can be many data units long (and they can be of
+ different lengths).</p>
+
+ <p>The quantifier {0} is permitted, causing the expression to behave as if
+ the previous item and the quantifier were not present. This can be useful
+ for subpatterns that are referenced as subroutines from elsewhere in the
+ pattern (but see also section <seealso marker="#defining_subpatterns">
+ Defining Subpatterns for Use by Reference Only</seealso>). Items other
+ than subpatterns that have a {0} quantifier are omitted from the compiled
+ pattern.</p>
+
+ <p>For convenience, the three most common quantifiers have single-character
+ abbreviations:</p>
+
+ <taglist>
+ <tag>*</tag><item>Equivalent to {0,}</item>
+ <tag>+</tag><item>Equivalent to {1,}</item>
+ <tag>?</tag><item>Equivalent to {0,1}</item>
+ </taglist>
+
+ <p>Infinite loops can be constructed by following a subpattern that can
+ match no characters with a quantifier that has no upper limit, for
+ example:</p>
+
+ <code>
+(a?)*</code>
+
+ <p>Earlier versions of Perl and PCRE used to give an error at compile time
+ for such patterns. However, as there are cases where this can be useful,
+ such patterns are now accepted. However, if any repetition of the
+ subpattern matches no characters, the loop is forcibly broken.</p>
+
+ <p>By default, the quantifiers are "greedy", that is, they match as much as
+ possible (up to the maximum number of permitted times), without causing
+ the remaining pattern to fail. The classic example of where this gives
+ problems is in trying to match comments in C programs. These appear
+ between /* and */. Within the comment, individual * and / characters can
+ appear. An attempt to match C comments by applying the pattern</p>
+
+ <code>
+/\*.*\*/</code>
+
+ <p>to the string</p>
+
+ <code>
+/* first comment */ not comment /* second comment */</code>
+
+ <p>fails, as it matches the entire string owing to the greediness of the .*
+ item.</p>
+
+ <p>However, if a quantifier is followed by a question mark, it ceases to be
+ greedy, and instead matches the minimum number of times possible, so the
+ following pattern does the right thing with the C comments:</p>
+
+ <code>
+/\*.*?\*/</code>
+
+ <p>The meaning of the various quantifiers is not otherwise changed, only
+ the preferred number of matches. Do not confuse this use of question mark
+ with its use as a quantifier in its own right. As it has two uses, it can
+ sometimes appear doubled, as in</p>
+
+ <code>
+\d??\d</code>
+
+ <p>which matches one digit by preference, but can match two if that is the
+ only way the remaining pattern matches.</p>
-<p>it takes a long time before reporting failure. This is because the string can
-be divided between the internal \D+ repeat and the external * repeat in a
-large number of ways, and all have to be tried. (The example uses [!?] rather
-than a single character at the end, because both PCRE and Perl have an
-optimization that allows for fast failure when a single character is used. They
-remember the last single character that is required for a match, and fail early
-if it is not present in the string.) If the pattern is changed so that it uses
-an atomic group, like this:</p>
+ <p>If option <c>ungreedy</c> is set (an option that is not available in
+ Perl), the quantifiers are not greedy by default, but individual ones can
+ be made greedy by following them with a question mark. That is, it inverts
+ the default behavior.</p>
-<quote><p> ((?&gt;\D+)|&lt;\d+&gt;)*[!?]</p></quote>
+ <p>When a parenthesized subpattern is quantified with a minimum repeat count
+ that is &gt; 1 or with a limited maximum, more memory is required for the
+ compiled pattern, in proportion to the size of the minimum or maximum.</p>
-<p>sequences of non-digits cannot be broken, and failure happens quickly.</p>
-
-</section>
-
-<section><marker id="sect16"></marker><title>Back references</title>
-
-<p>Outside a character class, a backslash followed by a digit greater than 0 (and
-possibly further digits) is a back reference to a capturing subpattern earlier
-(that is, to its left) in the pattern, provided there have been that many
-previous capturing left parentheses.</p>
-
-<p>However, if the decimal number following the backslash is less than 10, it is
-always taken as a back reference, and causes an error only if there are not
-that many capturing left parentheses in the entire pattern. In other words, the
-parentheses that are referenced need not be to the left of the reference for
-numbers less than 10. A "forward back reference" of this type can make sense
-when a repetition is involved and the subpattern to the right has participated
-in an earlier iteration.</p>
-
-<p>It is not possible to have a numerical "forward back reference" to
-a subpattern whose number is 10 or more using this syntax because a
-sequence such as \50 is interpreted as a character defined in
-octal. See the subsection entitled "Non-printing characters" above for
-further details of the handling of digits following a backslash. There
-is no such problem when named parentheses are used. A back reference
-to any subpattern is possible using named parentheses (see below).</p>
-
-<p>Another way of avoiding the ambiguity inherent in the use of digits following a
-backslash is to use the \g escape sequence. This escape must be followed by an
-unsigned number or a negative number, optionally enclosed in braces. These
-examples are all identical:</p>
-
-<list>
- <item>(ring), \1</item>
- <item>(ring), \g1</item>
- <item>(ring), \g{1}</item>
-</list>
-
-<p>An unsigned number specifies an absolute reference without the
-ambiguity that is present in the older syntax. It is also useful when
-literal digits follow the reference. A negative number is a relative
-reference. Consider this example:</p>
-
-<quote><p> (abc(def)ghi)\g{-1}</p></quote>
-
-<p>The sequence \g{-1} is a reference to the most recently started capturing
-subpattern before \g, that is, is it equivalent to \2 in this example.
-Similarly, \g{-2} would be equivalent to \1. The use of relative references
-can be helpful in long patterns, and also in patterns that are created by
-joining together fragments that contain references within themselves.</p>
-
-<p>A back reference matches whatever actually matched the capturing
-subpattern in the current subject string, rather than anything
-matching the subpattern itself (see "Subpatterns as subroutines" below
-for a way of doing that). So the pattern</p>
-
-<quote><p> (sens|respons)e and \1ibility</p></quote>
-
-<p>matches "sense and sensibility" and "response and responsibility", but not
-"sense and responsibility". If caseful matching is in force at the time of the
-back reference, the case of letters is relevant. For example,</p>
-
-<quote><p> ((?i)rah)\s+\1</p></quote>
-
-<p>matches "rah rah" and "RAH RAH", but not "RAH rah", even though the original
-capturing subpattern is matched caselessly.</p>
-
-<p>There are several different ways of writing back references to named
-subpatterns. The .NET syntax \k{name} and the Perl syntax \k&lt;name&gt; or
-\k'name' are supported, as is the Python syntax (?P=name). Perl 5.10's unified
-back reference syntax, in which \g can be used for both numeric and named
-references, is also supported. We could rewrite the above example in any of
-the following ways:</p>
-
-<list>
- <item>(?&lt;p1&gt;(?i)rah)\s+\k&lt;p1&gt;</item>
- <item>(?'p1'(?i)rah)\s+\k{p1}</item>
- <item>(?P&lt;p1&gt;(?i)rah)\s+(?P=p1)</item>
- <item>(?&lt;p1&gt;(?i)rah)\s+\g{p1}</item>
-</list>
-
-<p>A subpattern that is referenced by name may appear in the pattern before or
-after the reference.</p>
-
-<p>There may be more than one back reference to the same subpattern. If a
-subpattern has not actually been used in a particular match, any back
-references to it always fail. For example, the pattern</p>
-
-<quote><p> (a|(bc))\2</p></quote>
-
-<p>always fails if it starts to match "a" rather than "bc". Because
-there may be many capturing parentheses in a pattern, all digits
-following the backslash are taken as part of a potential back
-reference number. If the pattern continues with a digit character,
-some delimiter must be used to terminate the back reference. If the
-<c>extended</c> option is set, this can be whitespace. Otherwise an
-empty comment (see "Comments" below) can be used.</p>
-
-<p><em>Recursive back references</em></p>
-
-<p>A back reference that occurs inside the parentheses to which it refers fails
-when the subpattern is first used, so, for example, (a\1) never matches.
-However, such references can be useful inside repeated subpatterns. For
-example, the pattern</p>
-
-<quote><p> (a|b\1)+</p></quote>
-
-<p>matches any number of "a"s and also "aba", "ababbaa" etc. At each iteration of
-the subpattern, the back reference matches the character string corresponding
-to the previous iteration. In order for this to work, the pattern must be such
-that the first iteration does not need to match the back reference. This can be
-done using alternation, as in the example above, or by a quantifier with a
-minimum of zero.</p>
-
-<p>Back references of this type cause the group that they reference to be treated
-as an atomic group.
-Once the whole group has been matched, a subsequent matching failure cannot
-cause backtracking into the middle of the group.</p>
-
-</section>
-
-<section><marker id="sect17"></marker><title>Assertions</title>
-
-<p>An assertion is a test on the characters following or preceding the current
-matching point that does not actually consume any characters. The simple
-assertions coded as \b, \B, \A, \G, \Z, \z, ^ and $ are described
-above.</p>
-
-
-<p>More complicated assertions are coded as subpatterns. There are two kinds:
-those that look ahead of the current position in the subject string, and those
-that look behind it. An assertion subpattern is matched in the normal way,
-except that it does not cause the current matching position to be changed.</p>
-
-<p>Assertion subpatterns are not capturing subpatterns. If such an assertion
-contains capturing subpatterns within it, these are counted for the purposes of
-numbering the capturing subpatterns in the whole pattern. However, substring
-capturing is carried out only for positive assertions. (Perl sometimes, but not
-always, does do capturing in negative assertions.)</p>
-
-<p>For compatibility with Perl, assertion subpatterns may be repeated; though
-it makes no sense to assert the same thing several times, the side effect of
-capturing parentheses may occasionally be useful. In practice, there only three
-cases:</p>
-
-<taglist>
-<tag>(1)</tag> <item>If the quantifier is {0}, the assertion is never obeyed during matching.
-However, it may contain internal capturing parenthesized groups that are called
-from elsewhere via the subroutine mechanism.</item>
-<tag>(2)</tag> <item>If quantifier is {0,n} where n is greater than zero, it is treated as if it
-were {0,1}. At run time, the rest of the pattern match is tried with and
-without the assertion, the order depending on the greediness of the quantifier.</item>
-<tag>(3)</tag> <item>If the minimum repetition is greater than zero, the quantifier is ignored.
-The assertion is obeyed just once when encountered during matching.</item>
-</taglist>
+ <p>If a pattern starts with .* or .{0,} and option <c>dotall</c> (equivalent
+ to Perl option <c>/s</c>) is set, thus allowing the dot to match newlines,
+ the pattern is implicitly anchored, because whatever follows is tried
+ against every character position in the subject string. So, there is no
+ point in retrying the overall match at any position after the first. PCRE
+ normally treats such a pattern as if it was preceded by \A.</p>
-<p><em>Lookahead assertions</em></p>
+ <p>In cases where it is known that the subject string contains no newlines,
+ it is worth setting <c>dotall</c> to obtain this optimization, or
+ alternatively using ^ to indicate anchoring explicitly.</p>
-<p>Lookahead assertions start with (?= for positive assertions and (?! for
-negative assertions. For example,</p>
+ <p>However, there are some cases where the optimization cannot be used. When
+ .* is inside capturing parentheses that are the subject of a back
+ reference elsewhere in the pattern, a match at the start can fail where a
+ later one succeeds. Consider, for example:</p>
+
+ <code>
+(.*)abc\1</code>
-<quote><p> \w+(?=;)</p></quote>
+ <p>If the subject is "xyz123abc123", the match point is the fourth
+ character. Therefore, such a pattern is not implicitly anchored.</p>
-<p>matches a word followed by a semicolon, but does not include the semicolon in
-the match, and</p>
+ <p>Another case where implicit anchoring is not applied is when the leading
+ .* is inside an atomic group. Once again, a match at the start can fail
+ where a later one succeeds. Consider the following pattern:</p>
-<quote><p> foo(?!bar)</p></quote>
+ <code>
+(?&gt;.*?a)b</code>
-<p>matches any occurrence of "foo" that is not followed by "bar". Note that the
-apparently similar pattern</p>
+ <p>It matches "ab" in the subject "aab". The use of the backtracking control
+ verbs (*PRUNE) and (*SKIP) also disable this optimization.</p>
-<quote><p> (?!foo)bar</p></quote>
+ <p>When a capturing subpattern is repeated, the value captured is the
+ substring that matched the final iteration. For example, after</p>
-<p>does not find an occurrence of "bar" that is preceded by something other than
-"foo"; it finds any occurrence of "bar" whatsoever, because the assertion
-(?!foo) is always true when the next three characters are "bar". A
-lookbehind assertion is needed to achieve the other effect.</p>
+ <code>
+(tweedle[dume]{3}\s*)+</code>
-<p>If you want to force a matching failure at some point in a pattern, the most
-convenient way to do it is with (?!) because an empty string always matches, so
-an assertion that requires there not to be an empty string must always fail.
-The backtracking control verb (*FAIL) or (*F) is a synonym for (?!).</p>
+ <p>has matched "tweedledum tweedledee", the value of the captured substring
+ is "tweedledee". However, if there are nested capturing subpatterns, the
+ corresponding captured values can have been set in previous iterations.
+ For example, after</p>
+ <code>
+/(a|(b))+/</code>
-<p><em>Lookbehind assertions</em></p>
+ <p>matches "aba", the value of the second captured substring is "b".</p>
+ </section>
-<p>Lookbehind assertions start with (?&lt;= for positive assertions and (?&lt;! for
-negative assertions. For example,</p>
+ <section>
+ <marker id="sect15"></marker>
+ <title>Atomic Grouping and Possessive Quantifiers</title>
+ <p>With both maximizing ("greedy") and minimizing ("ungreedy" or "lazy")
+ repetition, failure of what follows normally causes the repeated item to
+ be re-evaluated to see if a different number of repeats allows the
+ remaining pattern to match. Sometimes it is useful to prevent this, either
+ to change the nature of the match, or to cause it to fail earlier than it
+ otherwise might, when the author of the pattern knows that there is no
+ point in carrying on.</p>
+
+ <p>Consider, for example, the pattern \d+foo when applied to the following
+ subject line:</p>
+
+ <code>
+123456bar</code>
+
+ <p>After matching all six digits and then failing to match "foo", the normal
+ action of the matcher is to try again with only five digits matching item
+ \d+, and then with four, and so on, before ultimately failing. "Atomic
+ grouping" (a term taken from Jeffrey Friedl's book) provides the means for
+ specifying that once a subpattern has matched, it is not to be
+ re-evaluated in this way.</p>
+
+ <p>If atomic grouping is used for the previous example, the matcher gives up
+ immediately on failing to match "foo" the first time. The notation is a
+ kind of special parenthesis, starting with <c>(?&gt;</c> as in the
+ following example:</p>
+
+ <code>
+(?&gt;\d+)foo</code>
+
+ <p>This kind of parenthesis "locks up" the part of the pattern it contains
+ once it has matched, and a failure further into the pattern is prevented
+ from backtracking into it. Backtracking past it to previous items,
+ however, works as normal.</p>
+
+ <p>An alternative description is that a subpattern of this type matches the
+ string of characters that an identical standalone pattern would match, if
+ anchored at the current point in the subject string.</p>
+
+ <p>Atomic grouping subpatterns are not capturing subpatterns. Simple cases
+ such as the above example can be thought of as a maximizing repeat that
+ must swallow everything it can. So, while both \d+ and \d+? are prepared
+ to adjust the number of digits they match to make the remaining pattern
+ match, <c>(?&gt;\d+)</c> can only match an entire sequence of digits.</p>
+
+ <p>Atomic groups in general can contain any complicated
+ subpatterns, and can be nested. However, when the subpattern for an atomic
+ group is just a single repeated item, as in the example above, a simpler
+ notation, called a "possessive quantifier" can be used. This consists of
+ an extra + character following a quantifier. Using this notation, the
+ previous example can be rewritten as</p>
+
+ <code>
+\d++foo</code>
+
+ <p>Notice that a possessive quantifier can be used with an entire group,
+ for example:</p>
+
+ <code>
+(abc|xyz){2,3}+</code>
+
+ <p>Possessive quantifiers are always greedy; the setting of option
+ <c>ungreedy</c> is ignored. They are a convenient notation for the simpler
+ forms of an atomic group. However, there is no difference in the meaning
+ of a possessive quantifier and the equivalent atomic group, but there can
+ be a performance difference; possessive quantifiers are probably slightly
+ faster.</p>
+
+ <p>The possessive quantifier syntax is an extension to the Perl 5.8 syntax.
+ Jeffrey Friedl originated the idea (and the name) in the first edition of
+ his book. Mike McCloskey liked it, so implemented it when he built the
+ Sun Java package, and PCRE copied it from there. It ultimately found its
+ way into Perl at release 5.10.</p>
+
+ <p>PCRE has an optimization that automatically "possessifies" certain simple
+ pattern constructs. For example, the sequence A+B is treated as A++B, as
+ there is no point in backtracking into a sequence of A:s when B must
+ follow.</p>
+
+ <p>When a pattern contains an unlimited repeat inside a subpattern that can
+ itself be repeated an unlimited number of times, the use of an atomic
+ group is the only way to avoid some failing matches taking a long time.
+ The pattern</p>
+
+ <code>
+(\D+|&lt;\d+&gt;)*[!?]</code>
+
+ <p>matches an unlimited number of substrings that either consist of
+ non-digits, or digits enclosed in &lt;&gt;, followed by ! or ?. When it
+ matches, it runs quickly. However, if it is applied to</p>
+
+ <code>
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</code>
+
+ <p>it takes a long time before reporting failure. This is because the string
+ can be divided between the internal \D+ repeat and the external * repeat
+ in many ways, and all must be tried. (The example uses [!?] rather than a
+ single character at the end, as both PCRE and Perl have an optimization
+ that allows for fast failure when a single character is used. They
+ remember the last single character that is required for a match, and fail
+ early if it is not present in the string.) If the pattern is changed so
+ that it uses an atomic group, like the following, sequences of non-digits
+ cannot be broken, and failure happens quickly:</p>
+
+ <code>
+((?&gt;\D+)|&lt;\d+&gt;)*[!?]</code>
+ </section>
-<quote><p> (?&lt;!foo)bar</p></quote>
+ <section>
+ <marker id="sect16"></marker>
+ <title>Back References</title>
+ <p>Outside a character class, a backslash followed by a digit &gt; 0 (and
+ possibly further digits) is a back reference to a capturing subpattern
+ earlier (that is, to its left) in the pattern, provided there have been
+ that many previous capturing left parentheses.</p>
+
+ <p>However, if the decimal number following the backslash is &lt; 10, it is
+ always taken as a back reference, and causes an error only if there are
+ not that many capturing left parentheses in the entire pattern. That is,
+ the parentheses that are referenced do need not be to the left of the
+ reference for numbers &lt; 10. A "forward back reference" of this type can
+ make sense when a repetition is involved and the subpattern to the right
+ has participated in an earlier iteration.</p>
+
+ <p>It is not possible to have a numerical "forward back reference" to a
+ subpattern whose number is 10 or more using this syntax, as a sequence
+ such as \50 is interpreted as a character defined in octal. For more
+ details of the handling of digits following a backslash, see section
+ <seealso marker="#non_printing_characters">Non-Printing
+ Characters</seealso> earlier. There is no such problem when named
+ parentheses are used. A back reference to any subpattern is possible
+ using named parentheses (see below).</p>
+
+ <p>Another way to avoid the ambiguity inherent in the use of digits
+ following a backslash is to use the \g escape sequence. This escape must
+ be followed by an unsigned number or a negative number, optionally
+ enclosed in braces. The following examples are identical:</p>
+
+ <code>
+(ring), \1
+(ring), \g1
+(ring), \g{1}</code>
+
+ <p>An unsigned number specifies an absolute reference without the ambiguity
+ that is present in the older syntax. It is also useful when literal digits
+ follow the reference. A negative number is a relative reference. Consider
+ the following example:</p>
+
+ <code>
+(abc(def)ghi)\g{-1}</code>
+
+ <p>The sequence \g{-1} is a reference to the most recently started capturing
+ subpattern before \g, that is, it is equivalent to \2 in this example.
+ Similarly, \g{-2} would be equivalent to \1. The use of relative
+ references can be helpful in long patterns, and also in patterns that are
+ created by joining fragments containing references within themselves.</p>
+
+ <p>A back reference matches whatever matched the capturing subpattern in the
+ current subject string, rather than anything matching the subpattern
+ itself (section <seealso marker="#sect21">Subpattern as
+ Subroutines</seealso> describes a way of doing that). So, the
+ following pattern matches "sense and sensibility" and "response and
+ responsibility", but not "sense and responsibility":</p>
+
+ <code>
+(sens|respons)e and \1ibility</code>
+
+ <p>If caseful matching is in force at the time of the back reference, the
+ case of letters is relevant. For example, the following matches "rah rah"
+ and "RAH RAH", but not "RAH rah", although the original capturing
+ subpattern is matched caselessly:</p>
+
+ <code>
+((?i)rah)\s+\1</code>
+
+ <p>There are many different ways of writing back references to named
+ subpatterns. The .NET syntax <c>\k{name}</c> and the Perl syntax
+ <c>\k&lt;name&gt;</c> or <c>\k'name'</c> are supported, as is the Python
+ syntax <c>(?P=name)</c>. The unified back reference syntax in Perl 5.10,
+ in which \g can be used for both numeric and named references, is also
+ supported. The previous example can be rewritten in the following
+ ways:</p>
+
+ <code>
+(?&lt;p1&gt;(?i)rah)\s+\k&lt;p1&gt;
+(?'p1'(?i)rah)\s+\k{p1}
+(?P&lt;p1&gt;(?i)rah)\s+(?P=p1)
+(?&lt;p1&gt;(?i)rah)\s+\g{p1}</code>
+
+ <p>A subpattern that is referenced by name can appear in the pattern before
+ or after the reference.</p>
+
+ <p>There can be more than one back reference to the same subpattern. If a
+ subpattern has not been used in a particular match, any back references to
+ it always fails. For example, the following pattern always fails if it
+ starts to match "a" rather than "bc":</p>
+
+ <code>
+(a|(bc))\2</code>
+
+ <p>As there can be many capturing parentheses in a pattern, all digits
+ following the backslash are taken as part of a potential back reference
+ number. If the pattern continues with a digit character, some delimiter
+ must be used to terminate the back reference. If option <c>extended</c> is
+ set, this can be whitespace. Otherwise an empty comment (see section
+ <seealso marker="#sect19">Comments</seealso>) can be used.</p>
+
+ <p><em>Recursive Back References</em></p>
+
+ <p>A back reference that occurs inside the parentheses to which it refers
+ fails when the subpattern is first used, so, for example, (a\1) never
+ matches. However, such references can be useful inside repeated
+ subpatterns. For example, the following pattern matches any number of
+ "a"s and also "aba", "ababbaa", and so on:</p>
+
+ <code>
+(a|b\1)+</code>
+
+ <p>At each iteration of the subpattern, the back reference matches the
+ character string corresponding to the previous iteration. In order for
+ this to work, the pattern must be such that the first iteration does not
+ need to match the back reference. This can be done using alternation, as
+ in the example above, or by a quantifier with a minimum of zero.</p>
+
+ <p>Back references of this type cause the group that they reference to be
+ treated as an atomic group. Once the whole group has been matched, a
+ subsequent matching failure cannot cause backtracking into the middle of
+ the group.</p>
+ </section>
-<p>does find an occurrence of "bar" that is not preceded by "foo". The contents of
-a lookbehind assertion are restricted such that all the strings it matches must
-have a fixed length. However, if there are several top-level alternatives, they
-do not all have to have the same fixed length. Thus</p>
+ <section>
+ <marker id="sect17"></marker>
+ <title>Assertions</title>
+ <p>An assertion is a test on the characters following or preceding the
+ current matching point that does not consume any characters. The simple
+ assertions coded as \b, \B, \A, \G, \Z, \z, ^, and $ are described in
+ the previous sections.</p>
+
+ <p>More complicated assertions are coded as subpatterns. There are two
+ kinds: those that look ahead of the current position in the subject
+ string, and those that look behind it. An assertion subpattern is matched
+ in the normal way, except that it does not cause the current matching
+ position to be changed.</p>
+
+ <p>Assertion subpatterns are not capturing subpatterns. If such an assertion
+ contains capturing subpatterns within it, these are counted for the
+ purposes of numbering the capturing subpatterns in the whole pattern.
+ However, substring capturing is done only for positive assertions. (Perl
+ sometimes, but not always, performs capturing in negative assertions.)</p>
+
+ <p>For compatibility with Perl, assertion subpatterns can be repeated.
+ However, it makes no sense to assert the same thing many times, the side
+ effect of capturing parentheses can occasionally be useful. In practice,
+ there are only three cases:</p>
+
+ <list type="bulleted">
+ <item>
+ <p>If the quantifier is {0}, the assertion is never obeyed during
+ matching. However, it can contain internal capturing parenthesized
+ groups that are called from elsewhere through the subroutine
+ mechanism.</p>
+ </item>
+ <item>
+ <p>If quantifier is {0,n}, where n &gt; 0, it is treated as if it was
+ {0,1}. At runtime, the remaining pattern match is tried with and
+ without the assertion, the order depends on the greediness of the
+ quantifier.</p>
+ </item>
+ <item>
+ <p>If the minimum repetition is &gt; 0, the quantifier is ignored. The
+ assertion is obeyed only once when encountered during matching.</p>
+ </item>
+ </list>
-<quote><p> (?&lt;=bullock|donkey)</p></quote>
+ <p><em>Lookahead Assertions</em></p>
-<p>is permitted, but</p>
+ <p>Lookahead assertions start with (?= for positive assertions and (?! for
+ negative assertions. For example, the following matches a word followed by
+ a semicolon, but does not include the semicolon in the match:</p>
-<quote><p> (?&lt;!dogs?|cats?)</p></quote>
+ <code>
+\w+(?=;)</code>
-<p>causes an error at compile time. Branches that match different length strings
-are permitted only at the top level of a lookbehind assertion. This is an
-extension compared with Perl, which requires all branches to
-match the same length of string. An assertion such as</p>
+ <p>The following matches any occurrence of "foo" that is not followed by
+ "bar":</p>
-<quote><p> (?&lt;=ab(c|de))</p></quote>
+ <code>
+foo(?!bar)</code>
-<p>is not permitted, because its single top-level branch can match two different
-lengths, but it is acceptable to PCRE if rewritten to use two top-level
-branches:</p>
+ <p>Notice that the apparently similar pattern</p>
-<quote><p> (?&lt;=abc|abde)</p></quote>
+ <code>
+(?!foo)bar</code>
-<p>In some cases, the escape sequence \K (see above) can be
-used instead of a lookbehind assertion to get round the fixed-length
-restriction.</p>
+ <p>does not find an occurrence of "bar" that is preceded by something other
+ than "foo". It finds any occurrence of "bar" whatsoever, as the assertion
+ (?!foo) is always true when the next three characters are "bar". A
+ lookbehind assertion is needed to achieve the other effect.</p>
-<p>The implementation of lookbehind assertions is, for each alternative, to
-temporarily move the current position back by the fixed length and then try to
-match. If there are insufficient characters before the current position, the
-assertion fails.</p>
+ <p>If you want to force a matching failure at some point in a pattern, the
+ most convenient way to do it is with (?!), as an empty string always
+ matches. So, an assertion that requires there is not to be an empty
+ string must always fail. The backtracking control verb (*FAIL) or (*F) is
+ a synonym for (?!).</p>
-<p>In a UTF mode, PCRE does not allow the \C escape (which matches a single data
-unit even in a UTF mode) to appear in lookbehind assertions, because it makes
-it impossible to calculate the length of the lookbehind. The \X and \R
-escapes, which can match different numbers of data units, are also not
-permitted.</p>
-<p>"Subroutine" calls (see below) such as (?2) or (?&amp;X) are permitted in lookbehinds, as long
-as the subpattern matches a fixed-length string. Recursion,
-however, is not supported.</p>
+ <p><em>Lookbehind Assertions</em></p>
-<p>Possessive quantifiers can be used in conjunction with lookbehind assertions to
-specify efficient matching of fixed-length strings at the end of subject
-strings. Consider a simple pattern such as</p>
+ <p>Lookbehind assertions start with (?&lt;= for positive assertions and
+ (?&lt;! for negative assertions. For example, the following finds an
+ occurrence of "bar" that is not preceded by "foo":</p>
-<quote><p> abcd$</p></quote>
+ <code>
+(?&lt;!foo)bar</code>
-<p>when applied to a long string that does not match. Because matching proceeds
-from left to right, PCRE will look for each "a" in the subject and then see if
-what follows matches the rest of the pattern. If the pattern is specified as</p>
+ <p>The contents of a lookbehind assertion are restricted such that all the
+ strings it matches must have a fixed length. However, if there are many
+ top-level alternatives, they do not all have to have the same fixed
+ length. Thus, the following is permitted:</p>
-<quote><p> ^.*abcd$</p></quote>
+ <code>
+(?&lt;=bullock|donkey)</code>
-<p>the initial .* matches the entire string at first, but when this fails (because
-there is no following "a"), it backtracks to match all but the last character,
-then all but the last two characters, and so on. Once again the search for "a"
-covers the entire string, from right to left, so we are no better off. However,
-if the pattern is written as</p>
+ <p>The following causes an error at compile time:</p>
-<quote><p> ^.*+(?&lt;=abcd)</p></quote>
+ <code>
+(?&lt;!dogs?|cats?)</code>
-<p>there can be no backtracking for the .*+ item; it can match only the entire
-string. The subsequent lookbehind assertion does a single test on the last four
-characters. If it fails, the match fails immediately. For long strings, this
-approach makes a significant difference to the processing time.</p>
+ <p>Branches that match different length strings are permitted only at the
+ top-level of a lookbehind assertion. This is an extension compared with
+ Perl, which requires all branches to match the same length of string. An
+ assertion such as the following is not permitted, as its single top-level
+ branch can match two different lengths:</p>
-<p><em>Using multiple assertions</em></p>
+ <code>
+(?&lt;=ab(c|de))</code>
-<p>Several assertions (of any sort) may occur in succession. For example,</p>
+ <p>However, it is acceptable to PCRE if rewritten to use two top-level
+ branches:</p>
-<quote><p> (?&lt;=\d{3})(?&lt;!999)foo</p></quote>
+ <code>
+(?&lt;=abc|abde)</code>
-<p>matches "foo" preceded by three digits that are not "999". Notice
-that each of the assertions is applied independently at the same point
-in the subject string. First there is a check that the previous three
-characters are all digits, and then there is a check that the same
-three characters are not "999". This pattern does <em>not</em> match
-"foo" preceded by six characters, the first of which are digits and
-the last three of which are not "999". For example, it doesn't match
-"123abcfoo". A pattern to do that is</p>
+ <p>Sometimes the escape sequence \K (see above) can be used instead of
+ a lookbehind assertion to get round the fixed-length restriction.</p>
-<quote><p> (?&lt;=\d{3}...)(?&lt;!999)foo</p></quote>
+ <p>The implementation of lookbehind assertions is, for each alternative, to
+ move the current position back temporarily by the fixed length and then
+ try to match. If there are insufficient characters before the current
+ position, the assertion fails.</p>
-<p>This time the first assertion looks at the preceding six
-characters, checking that the first three are digits, and then the
-second assertion checks that the preceding three characters are not
-"999".</p>
+ <p>In a UTF mode, PCRE does not allow the \C escape (which matches a single
+ data unit even in a UTF mode) to appear in lookbehind assertions, as it
+ makes it impossible to calculate the length of the lookbehind. The \X and
+ \R escapes, which can match different numbers of data units, are not
+ permitted either.</p>
-<p>Assertions can be nested in any combination. For example,</p>
+ <p>"Subroutine" calls (see below), such as (?2) or (?&amp;X), are permitted
+ in lookbehinds, as long as the subpattern matches a fixed-length string.
+ Recursion, however, is not supported.</p>
-<quote><p> (?&lt;=(?&lt;!foo)bar)baz</p></quote>
+ <p>Possessive quantifiers can be used with lookbehind
+ assertions to specify efficient matching of fixed-length strings at the
+ end of subject strings. Consider the following simple pattern when applied
+ to a long string that does not match:</p>
-<p>matches an occurrence of "baz" that is preceded by "bar" which in
-turn is not preceded by "foo", while</p>
+ <code>
+abcd$</code>
-<quote><p> (?&lt;=\d{3}(?!999)...)foo</p></quote>
+ <p>As matching proceeds from left to right, PCRE looks for each "a" in the
+ subject and then sees if what follows matches the remaining pattern. If
+ the pattern is specified as</p>
-<p>is another pattern that matches "foo" preceded by three digits and any three
-characters that are not "999".</p>
+ <code>
+^.*abcd$</code>
-</section>
+ <p>the initial .* matches the entire string at first. However, when this
+ fails (as there is no following "a"), it backtracks to match all but the
+ last character, then all but the last two characters, and so on. Once
+ again the search for "a" covers the entire string, from right to left, so
+ we are no better off. However, if the pattern is written as</p>
-<section><marker id="sect18"></marker><title>Conditional subpatterns</title>
+ <code>
+^.*+(?&lt;=abcd)</code>
-<p>It is possible to cause the matching process to obey a subpattern
-conditionally or to choose between two alternative subpatterns, depending on
-the result of an assertion, or whether a specific capturing subpattern has
-already been matched. The two possible forms of conditional subpattern are:</p>
+ <p>there can be no backtracking for the .*+ item; it can match only the
+ entire string. The subsequent lookbehind assertion does a single test on
+ the last four characters. If it fails, the match fails immediately. For
+ long strings, this approach makes a significant difference to the
+ processing time.</p>
-<list>
-<item>(?(condition)yes-pattern)</item>
-<item>(?(condition)yes-pattern|no-pattern)</item>
-</list>
+ <p><em>Using Multiple Assertions</em></p>
-<p>If the condition is satisfied, the yes-pattern is used; otherwise the
-no-pattern (if present) is used. If there are more than two alternatives in the
-subpattern, a compile-time error occurs. Each of the two alternatives may
-itself contain nested subpatterns of any form, including conditional
-subpatterns; the restriction to two alternatives applies only at the level of
-the condition. This pattern fragment is an example where the alternatives are
-complex:</p>
+ <p>Many assertions (of any sort) can occur in succession. For example, the
+ following matches "foo" preceded by three digits that are not "999":</p>
-<quote><p> (?(1) (A|B|C) | (D | (?(2)E|F) | E) )</p></quote>
+ <code>
+(?&lt;=\d{3})(?&lt;!999)foo</code>
-<p>There are four kinds of condition: references to subpatterns, references to
-recursion, a pseudo-condition called DEFINE, and assertions.</p>
+ <p>Notice that each of the assertions is applied independently at the same
+ point in the subject string. First there is a check that the previous
+ three characters are all digits, and then there is a check that the same
+ three characters are not "999". This pattern does <em>not</em> match
+ "foo" preceded by six characters, the first of which are digits and the
+ last three of which are not "999". For example, it does not match
+ "123abcfoo". A pattern to do that is the following:</p>
+ <code>
+(?&lt;=\d{3}...)(?&lt;!999)foo</code>
-<p><em>Checking for a used subpattern by number</em></p>
+ <p>This time the first assertion looks at the preceding six characters,
+ checks that the first three are digits, and then the second assertion
+ checks that the preceding three characters are not "999".</p>
-<p>If the text between the parentheses consists of a sequence of
-digits, the condition is true if a capturing subpattern of that number has previously
-matched. If there is more than one capturing subpattern with the same number
-(see the earlier section about duplicate subpattern numbers),
-the condition is true if any of them have matched. An alternative notation is
-to precede the digits with a plus or minus sign. In this case, the subpattern
-number is relative rather than absolute. The most recently opened parentheses
-can be referenced by (?(-1), the next most recent by (?(-2), and so on. Inside
-loops it can also make sense to refer to subsequent groups. The next
-parentheses to be opened can be referenced as (?(+1), and so on. (The value
-zero in any of these forms is not used; it provokes a compile-time error.)</p>
+ <p>Assertions can be nested in any combination. For example, the following
+ matches an occurrence of "baz" that is preceded by "bar", which in turn is
+ not preceded by "foo":</p>
-<p>Consider the following pattern, which contains non-significant
-whitespace to make it more readable (assume the <c>extended</c>
-option) and to divide it into three parts for ease of discussion:</p>
+ <code>
+(?&lt;=(?&lt;!foo)bar)baz</code>
-<quote><p> ( \( )? [^()]+ (?(1) \) )</p></quote>
+ <p>The following pattern matches "foo" preceded by three digits and any
+ three characters that are not "999":</p>
-<p>The first part matches an optional opening parenthesis, and if that
-character is present, sets it as the first captured substring. The second part
-matches one or more characters that are not parentheses. The third part is a
-conditional subpattern that tests whether or not the first set of parentheses matched
-or not. If they did, that is, if subject started with an opening parenthesis,
-the condition is true, and so the yes-pattern is executed and a closing
-parenthesis is required. Otherwise, since no-pattern is not present, the
-subpattern matches nothing. In other words, this pattern matches a sequence of
-non-parentheses, optionally enclosed in parentheses.</p>
+ <code>
+(?&lt;=\d{3}(?!999)...)foo</code>
+ </section>
-<p>If you were embedding this pattern in a larger one, you could use a relative
-reference:</p>
+ <section>
+ <marker id="sect18"></marker>
+ <title>Conditional Subpatterns</title>
+ <p>It is possible to cause the matching process to obey a subpattern
+ conditionally or to choose between two alternative subpatterns, depending
+ on the result of an assertion, or whether a specific capturing subpattern
+ has already been matched. The following are the two possible forms of
+ conditional subpattern:</p>
+
+ <code>
+(?(condition)yes-pattern)
+(?(condition)yes-pattern|no-pattern)</code>
+
+ <p>If the condition is satisfied, the yes-pattern is used, otherwise the
+ no-pattern (if present). If more than two alternatives exist in the
+ subpattern, a compile-time error occurs. Each of the two alternatives can
+ itself contain nested subpatterns of any form, including conditional
+ subpatterns; the restriction to two alternatives applies only at the level
+ of the condition. The following pattern fragment is an example where the
+ alternatives are complex:</p>
+
+ <code>
+(?(1) (A|B|C) | (D | (?(2)E|F) | E) )</code>
+
+ <p>There are four kinds of condition: references to subpatterns, references
+ to recursion, a pseudo-condition called DEFINE, and assertions.</p>
+
+ <p><em>Checking for a Used Subpattern By Number</em></p>
+
+ <p>If the text between the parentheses consists of a sequence of digits,
+ the condition is true if a capturing subpattern of that number has
+ previously matched. If more than one capturing subpattern with the same
+ number exists (see section <seealso marker="#sect12">
+ Duplicate Subpattern Numbers</seealso> earlier), the condition is true if
+ any of them have matched. An alternative notation is to precede the
+ digits with a plus or minus sign. In this case, the subpattern number is
+ relative rather than absolute. The most recently opened parentheses can be
+ referenced by (?(-1), the next most recent by (?(-2), and so on. Inside
+ loops, it can also make sense to refer to subsequent groups. The next
+ parentheses to be opened can be referenced as (?(+1), and so on. (The
+ value zero in any of these forms is not used; it provokes a compile-time
+ error.)</p>
+
+ <p>Consider the following pattern, which contains non-significant whitespace
+ to make it more readable (assume option <c>extended</c>) and to divide it
+ into three parts for ease of discussion:</p>
+
+ <code>
+( \( )? [^()]+ (?(1) \) )</code>
+
+ <p>The first part matches an optional opening parenthesis, and if that
+ character is present, sets it as the first captured substring. The second
+ part matches one or more characters that are not parentheses. The third
+ part is a conditional subpattern that tests whether the first set of
+ parentheses matched or not. If they did, that is, if subject started with
+ an opening parenthesis, the condition is true, and so the yes-pattern is
+ executed and a closing parenthesis is required. Otherwise, as no-pattern
+ is not present, the subpattern matches nothing. That is, this pattern
+ matches a sequence of non-parentheses, optionally enclosed in
+ parentheses.</p>
+
+ <p>If this pattern is embedded in a larger one, a relative reference can be
+ used:</p>
+
+ <code>
+...other stuff... ( \( )? [^()]+ (?(-1) \) ) ...</code>
+
+ <p>This makes the fragment independent of the parentheses in the larger
+ pattern.</p>
+
+ <p><em>Checking for a Used Subpattern By Name</em></p>
+
+ <p>Perl uses the syntax (?(&lt;name&gt;)...) or (?('name')...) to test for a
+ used subpattern by name. For compatibility with earlier versions of PCRE,
+ which had this facility before Perl, the syntax (?(name)...) is also
+ recognized. However, there is a possible ambiguity with this syntax, as
+ subpattern names can consist entirely of digits. PCRE looks first for a
+ named subpattern; if it cannot find one and the name consists entirely of
+ digits, PCRE looks for a subpattern of that number, which must be &gt; 0.
+ Using subpattern names that consist entirely of digits is not
+ recommended.</p>
+
+ <p>Rewriting the previous example to use a named subpattern gives:</p>
+
+ <code>
+(?&lt;OPEN&gt; \( )? [^()]+ (?(&lt;OPEN&gt;) \) )</code>
+
+ <p>If the name used in a condition of this kind is a duplicate, the test is
+ applied to all subpatterns of the same name, and is true if any one of
+ them has matched.</p>
+
+ <p><em>Checking for Pattern Recursion</em></p>
+
+ <p>If the condition is the string (R), and there is no subpattern with the
+ name R, the condition is true if a recursive call to the whole pattern or
+ any subpattern has been made. If digits or a name preceded by ampersand
+ follow the letter R, for example:</p>
+
+ <code>
+(?(R3)...) or (?(R&amp;name)...)</code>
+
+ <p>the condition is true if the most recent recursion is into a subpattern
+ whose number or name is given. This condition does not check the entire
+ recursion stack. If the name used in a condition of this kind is a
+ duplicate, the test is applied to all subpatterns of the same name, and is
+ true if any one of them is the most recent recursion.</p>
+
+ <p>At "top-level", all these recursion test conditions are false. The syntax
+ for recursive patterns is described below.</p>
+
+ <p><em>Defining Subpatterns for Use By Reference Only</em></p>
+ <marker id="defining_subpatterns"/>
+
+ <p>If the condition is the string (DEFINE), and there is no subpattern with
+ the name DEFINE, the condition is always false. In this case, there can be
+ only one alternative in the subpattern. It is always skipped if control
+ reaches this point in the pattern. The idea of DEFINE is that it can be
+ used to define "subroutines" that can be referenced from elsewhere. (The
+ use of subroutines is described below.) For example, a pattern to match
+ an IPv4 address, such as "192.168.23.245", can be written like this
+ (ignore whitespace and line breaks):</p>
+
+ <code>
+(?(DEFINE) (?&lt;byte&gt; 2[0-4]\d | 25[0-5] | 1\d\d | [1-9]?\d) ) \b (?&amp;byte) (\.(?&amp;byte)){3} \b</code>
+
+ <p>The first part of the pattern is a DEFINE group inside which is a another
+ group named "byte" is defined. This matches an individual component of an
+ IPv4 address (a number &lt; 256). When matching takes place, this part of
+ the pattern is skipped, as DEFINE acts like a false condition. The
+ remaining pattern uses references to the named group to match the four
+ dot-separated components of an IPv4 address, insisting on a word boundary
+ at each end.</p>
+
+ <p><em>Assertion Conditions</em></p>
+
+ <p>If the condition is not in any of the above formats, it must be an
+ assertion. This can be a positive or negative lookahead or lookbehind
+ assertion. Consider the following pattern, containing non-significant
+ whitespace, and with the two alternatives on the second line:</p>
+
+ <code type="none">
+(?(?=[^a-z]*[a-z])
+\d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} )</code>
+
+ <p>The condition is a positive lookahead assertion that matches an optional
+ sequence of non-letters followed by a letter. That is, it tests for the
+ presence of at least one letter in the subject. If a letter is found, the
+ subject is matched against the first alternative, otherwise it is matched
+ against the second. This pattern matches strings in one of the two forms
+ dd-aaa-dd or dd-dd-dd, where aaa are letters and dd are digits.</p>
+ </section>
-<quote><p> ...other stuff... ( \( )? [^()]+ (?(-1) \) ) ...</p></quote>
+ <section>
+ <marker id="sect19"></marker>
+ <title>Comments</title>
+ <p>There are two ways to include comments in patterns that are processed by
+ PCRE. In both cases, the start of the comment must not be in a character
+ class, or in the middle of any other sequence of related characters such
+ as (?: or a subpattern name or number. The characters that make up a
+ comment play no part in the pattern matching.</p>
+
+ <p>The sequence (?# marks the start of a comment that continues up to the
+ next closing parenthesis. Nested parentheses are not permitted. If option
+ PCRE_EXTENDED is set, an unescaped # character also introduces a comment,
+ which in this case continues to immediately after the next newline
+ character or character sequence in the pattern. Which characters are
+ interpreted as newlines is controlled by the options passed to a
+ compiling function or by a special sequence at the start of the pattern,
+ as described in section <seealso marker="#newline_conventions">
+ Newline Conventions</seealso> earlier.</p>
+
+ <p>Notice that the end of this type of comment is a literal newline sequence
+ in the pattern; escape sequences that happen to represent a newline do not
+ count. For example, consider the following pattern when <c>extended</c> is
+ set, and the default newline convention is in force:</p>
+
+ <code>
+abc #comment \n still comment</code>
+
+ <p>On encountering character #, <c>pcre_compile()</c> skips along, looking
+ for a newline in the pattern. The sequence \n is still literal at this
+ stage, so it does not terminate the comment. Only a character with code
+ value 0x0a (the default newline) does so.</p>
+ </section>
-<p>This makes the fragment independent of the parentheses in the larger pattern.</p>
+ <section>
+ <marker id="sect20"></marker>
+ <title>Recursive Patterns</title>
+ <p>Consider the problem of matching a string in parentheses, allowing for
+ unlimited nested parentheses. Without the use of recursion, the best that
+ can be done is to use a pattern that matches up to some fixed depth of
+ nesting. It is not possible to handle an arbitrary nesting depth.</p>
+
+ <p>For some time, Perl has provided a facility that allows regular
+ expressions to recurse (among other things). It does this by
+ interpolating Perl code in the expression at runtime, and the code can
+ refer to the expression itself. A Perl pattern using code interpolation to
+ solve the parentheses problem can be created like this:</p>
+
+ <code>
+$re = qr{\( (?: (?&gt;[^()]+) | (?p{$re}) )* \)}x;</code>
+
+ <p>Item (?p{...}) interpolates Perl code at runtime, and in this case refers
+ recursively to the pattern in which it appears.</p>
+
+ <p>Obviously, PCRE cannot support the interpolation of Perl code. Instead,
+ it supports special syntax for recursion of the entire pattern, and for
+ individual subpattern recursion. After its introduction in PCRE and
+ Python, this kind of recursion was later introduced into Perl at
+ release 5.10.</p>
+
+ <p>A special item that consists of (? followed by a number &gt; 0 and a
+ closing parenthesis is a recursive subroutine call of the subpattern of
+ the given number, if it occurs inside that subpattern. (If not,
+ it is a non-recursive subroutine call, which is described in the next
+ section.) The special item (?R) or (?0) is a recursive call of the entire
+ regular expression.</p>
-<p><em>Checking for a used subpattern by name</em></p>
+ <p>This PCRE pattern solves the nested parentheses problem (assume that
+ option <c>extended</c> is set so that whitespace is ignored):</p>
+
+ <code>
+\( ( [^()]++ | (?R) )* \)</code>
+
+ <p>First it matches an opening parenthesis. Then it matches any number of
+ substrings, which can either be a sequence of non-parentheses or a
+ recursive match of the pattern itself (that is, a correctly parenthesized
+ substring). Finally there is a closing parenthesis. Notice the use of a
+ possessive quantifier to avoid backtracking into sequences of
+ non-parentheses.</p>
+
+ <p>If this was part of a larger pattern, you would not want to recurse the
+ entire pattern, so instead you can use:</p>
+
+ <code>
+( \( ( [^()]++ | (?1) )* \) )</code>
+
+ <p>The pattern is here within parentheses so that the recursion refers to
+ them instead of the whole pattern.</p>
+
+ <p>In a larger pattern, keeping track of parenthesis numbers can be tricky.
+ This is made easier by the use of relative references. Instead of (?1) in
+ the pattern above, you can write (?-2) to refer to the second most
+ recently opened parentheses preceding the recursion. That is, a negative
+ number counts capturing parentheses leftwards from the point at which it
+ is encountered.</p>
+
+ <p>It is also possible to refer to later opened parentheses, by
+ writing references such as (?+2). However, these cannot be recursive, as
+ the reference is not inside the parentheses that are referenced. They are
+ always non-recursive subroutine calls, as described in the next
+ section.</p>
+
+ <p>An alternative approach is to use named parentheses instead. The Perl
+ syntax for this is (?&amp;name). The earlier PCRE syntax (?P&gt;name) is
+ also supported. We can rewrite the above example as follows:</p>
+
+ <code>
+(?&lt;pn&gt; \( ( [^()]++ | (?&amp;pn) )* \) )</code>
+
+ <p>If there is more than one subpattern with the same name, the earliest
+ one is used.</p>
+
+ <p>This particular example pattern that we have studied contains nested
+ unlimited repeats, and so the use of a possessive quantifier for matching
+ strings of non-parentheses is important when applying the pattern to
+ strings that do not match. For example, when this pattern is applied
+ to</p>
+
+ <code>
+(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()</code>
+
+ <p>it gives "no match" quickly. However, if a possessive quantifier is not
+ used, the match runs for a long time, as there are so many different
+ ways the + and * repeats can carve up the subject, and all must be tested
+ before failure can be reported.</p>
+
+ <p>At the end of a match, the values of capturing parentheses are those from
+ the outermost level. If the pattern above is matched against</p>
+
+ <code>
+(ab(cd)ef)</code>
+
+ <p>the value for the inner capturing parentheses (numbered 2) is "ef",
+ which is the last value taken on at the top-level. If a capturing
+ subpattern is not matched at the top level, its final captured value is
+ unset, even if it was (temporarily) set at a deeper level during the
+ matching process.</p>
+
+ <p>Do not confuse item (?R) with condition (R), which tests for recursion.
+ Consider the following pattern, which matches text in angle brackets,
+ allowing for arbitrary nesting. Only digits are allowed in nested brackets
+ (that is, when recursing), while any characters are permitted at the
+ outer level.</p>
+
+ <code>
+&lt; (?: (?(R) \d++ | [^&lt;&gt;]*+) | (?R)) * &gt;</code>
+
+ <p>Here (?(R) is the start of a conditional subpattern, with two different
+ alternatives for the recursive and non-recursive cases. Item (?R) is the
+ actual recursive call.</p>
+
+ <p><em>Differences in Recursion Processing between PCRE and Perl</em></p>
+
+ <p>Recursion processing in PCRE differs from Perl in two important ways. In
+ PCRE (like Python, but unlike Perl), a recursive subpattern call is always
+ treated as an atomic group. That is, once it has matched some of the
+ subject string, it is never re-entered, even if it contains untried
+ alternatives and there is a subsequent matching failure. This can be
+ illustrated by the following pattern, which means to match a palindromic
+ string containing an odd number of characters (for example, "a", "aba",
+ "abcba", "abcdcba"):</p>
+
+ <code>
+^(.|(.)(?1)\2)$</code>
+
+ <p>The idea is that it either matches a single character, or two identical
+ characters surrounding a subpalindrome. In Perl, this pattern works; in
+ PCRE it does not work if the pattern is longer than three characters.
+ Consider the subject string "abcba".</p>
+
+ <p>At the top level, the first character is matched, but as it is not at
+ the end of the string, the first alternative fails, the second
+ alternative is taken, and the recursion kicks in. The recursive call to
+ subpattern 1 successfully matches the next character ("b"). (Notice that
+ the beginning and end of line tests are not part of the recursion.)</p>
+
+ <p>Back at the top level, the next character ("c") is compared with what
+ subpattern 2 matched, which was "a". This fails. As the recursion is
+ treated as an atomic group, there are now no backtracking points, and so
+ the entire match fails. (Perl can now re-enter the recursion
+ and try the second alternative.) However, if the pattern is written with
+ the alternatives in the other order, things are different:</p>
+
+ <code>
+^((.)(?1)\2|.)$</code>
+
+ <p>This time, the recursing alternative is tried first, and continues to
+ recurse until it runs out of characters, at which point the recursion
+ fails. But this time we have another alternative to try at the higher
+ level. That is the significant difference: in the previous case the
+ remaining alternative is at a deeper recursion level, which PCRE cannot
+ use.</p>
+
+ <p>To change the pattern so that it matches all palindromic strings, not
+ only those with an odd number of characters, it is tempting to change the
+ pattern to this:</p>
+
+ <code>
+^((.)(?1)\2|.?)$</code>
+
+ <p>Again, this works in Perl, but not in PCRE, and for the same reason. When
+ a deeper recursion has matched a single character, it cannot be entered
+ again to match an empty string. The solution is to separate the two cases,
+ and write out the odd and even cases as alternatives at the higher
+ level:</p>
+
+ <code>
+^(?:((.)(?1)\2|)|((.)(?3)\4|.))</code>
+
+ <p>If you want to match typical palindromic phrases, the pattern must ignore
+ all non-word characters, which can be done as follows:</p>
+
+ <code>
+^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$</code>
+
+ <p>If run with option <c>caseless</c>, this pattern matches phrases such as
+ "A man, a plan, a canal: Panama!" and it works well in both PCRE and Perl.
+ Notice the use of the possessive quantifier *+ to avoid backtracking into
+ sequences of non-word characters. Without this, PCRE takes much longer
+ (10 times or more) to match typical phrases, and Perl takes so long that
+ you think it has gone into a loop.</p>
-<p>Perl uses the syntax (?(&lt;name&gt;)...) or (?('name')...) to test
-for a used subpattern by name. For compatibility with earlier versions
-of PCRE, which had this facility before Perl, the syntax (?(name)...)
-is also recognized. However, there is a possible ambiguity with this
-syntax, because subpattern names may consist entirely of digits. PCRE
-looks first for a named subpattern; if it cannot find one and the name
-consists entirely of digits, PCRE looks for a subpattern of that
-number, which must be greater than zero. Using subpattern names that
-consist entirely of digits is not recommended.</p>
+ <note>
+ <p>The palindrome-matching patterns above work only if the subject string
+ does not start with a palindrome that is shorter than the entire string.
+ For example, although "abcba" is correctly matched, if the subject is
+ "ababa", PCRE finds palindrome "aba" at the start, and then fails at top
+ level, as the end of the string does not follow. Once again, it cannot
+ jump back into the recursion to try other alternatives, so the entire
+ match fails.</p>
+ </note>
-<p>Rewriting the above example to use a named subpattern gives this:</p>
+ <p>The second way in which PCRE and Perl differ in their recursion
+ processing is in the handling of captured values. In Perl, when a
+ subpattern is called recursively or as a subpattern (see the next
+ section), it has no access to any values that were captured outside the
+ recursion. In PCRE these values can be referenced. Consider the following
+ pattern:</p>
+
+ <code>
+^(.)(\1|a(?2))</code>
+
+ <p>In PCRE, it matches "bab". The first capturing parentheses match "b",
+ then in the second group, when the back reference \1 fails to match "b",
+ the second alternative matches "a", and then recurses. In the recursion,
+ \1 does now match "b" and so the whole match succeeds. In Perl, the
+ pattern fails to match because inside the recursive call \1 cannot access
+ the externally set value.</p>
+ </section>
-<quote><p> (?&lt;OPEN&gt; \( )? [^()]+ (?(&lt;OPEN&gt;) \) )</p></quote>
+ <section>
+ <marker id="sect21"></marker>
+ <title>Subpatterns as Subroutines</title>
+ <p>If the syntax for a recursive subpattern call (either by number or by
+ name) is used outside the parentheses to which it refers, it operates
+ like a subroutine in a programming language. The called subpattern can be
+ defined before or after the reference. A numbered reference can be
+ absolute or relative, as in the following examples:</p>
+
+ <code>
+(...(absolute)...)...(?2)...
+(...(relative)...)...(?-1)...
+(...(?+1)...(relative)...</code>
+
+ <p>An earlier example pointed out that the following pattern matches "sense
+ and sensibility" and "response and responsibility", but not "sense and
+ responsibility":</p>
+
+ <code>
+(sens|respons)e and \1ibility</code>
+
+ <p>If instead the following pattern is used, it matches "sense and
+ responsibility" and the other two strings:</p>
+
+ <code>
+(sens|respons)e and (?1)ibility</code>
+
+ <p>Another example is provided in the discussion of DEFINE earlier.</p>
+
+ <p>All subroutine calls, recursive or not, are always treated as atomic
+ groups. That is, once a subroutine has matched some of the subject string,
+ it is never re-entered, even if it contains untried alternatives and there
+ is a subsequent matching failure. Any capturing parentheses that are set
+ during the subroutine call revert to their previous values afterwards.</p>
+
+ <p>Processing options such as case-independence are fixed when a subpattern
+ is defined, so if it is used as a subroutine, such options cannot be
+ changed for different calls. For example, the following pattern matches
+ "abcabc" but not "abcABC", as the change of processing option does not
+ affect the called subpattern:</p>
+
+ <code>
+(abc)(?i:(?-1))</code>
+ </section>
-<p>If the name used in a condition of this kind is a duplicate, the test is
-applied to all subpatterns of the same name, and is true if any one of them has
-matched.</p>
+ <section>
+ <marker id="sect22"></marker>
+ <title>Oniguruma Subroutine Syntax</title>
+ <p>For compatibility with Oniguruma, the non-Perl syntax \g followed by a
+ name or a number enclosed either in angle brackets or single quotes, is
+ alternative syntax for referencing a subpattern as a subroutine, possibly
+ recursively. Here follows two of the examples used above, rewritten using
+ this syntax:</p>
+
+ <code>
+(?&lt;pn&gt; \( ( (?&gt;[^()]+) | \g&lt;pn&gt; )* \) )
+(sens|respons)e and \g'1'ibility</code>
+
+ <p>PCRE supports an extension to Oniguruma: if a number is preceded by a
+ plus or minus sign, it is taken as a relative reference, for example:</p>
+
+ <code>
+(abc)(?i:\g&lt;-1&gt;)</code>
+
+ <p>Notice that \g{...} (Perl syntax) and \g&lt;...&gt; (Oniguruma syntax)
+ are <em>not</em> synonymous. The former is a back reference; the latter
+ is a subroutine call.</p>
+ </section>
-<p><em>Checking for pattern recursion</em></p>
+ <section>
+ <marker id="sect23"></marker>
+ <title>Backtracking Control</title>
+ <p>Perl 5.10 introduced some "Special Backtracking Control Verbs",
+ which are still described in the Perl documentation as "experimental and
+ subject to change or removal in a future version of Perl". It goes on to
+ say: "Their usage in production code should be noted to avoid problems
+ during upgrades." The same remarks apply to the PCRE features described
+ in this section.</p>
+
+ <p>The new verbs make use of what was previously invalid syntax: an opening
+ parenthesis followed by an asterisk. They are generally of the form
+ (*VERB) or (*VERB:NAME). Some can take either form, possibly behaving
+ differently depending on whether a name is present. A name is any sequence
+ of characters that does not include a closing parenthesis. The maximum
+ name length is 255 in the 8-bit library and 65535 in the 16-bit and 32-bit
+ libraries. If the name is empty, that is, if the closing parenthesis
+ immediately follows the colon, the effect is as if the colon was not
+ there. Any number of these verbs can occur in a pattern.</p>
+
+ <p>The behavior of these verbs in repeated groups, assertions, and in
+ subpatterns called as subroutines (whether or not recursively) is
+ described below.</p>
+
+ <p><em>Optimizations That Affect Backtracking Verbs</em></p>
+
+ <p>PCRE contains some optimizations that are used to speed up matching by
+ running some checks at the start of each match attempt. For example, it
+ can know the minimum length of matching subject, or that a particular
+ character must be present. When one of these optimizations bypasses the
+ running of a match, any included backtracking verbs are not processed.
+ processed. You can suppress the start-of-match optimizations by setting
+ option <c>no_start_optimize</c> when calling
+ <seealso marker="#compile/2"><c>compile/2</c></seealso> or
+ <seealso marker="#run/3"><c>run/3</c></seealso>, or by starting the
+ pattern with (*NO_START_OPT).</p>
+
+ <p>Experiments with Perl suggest that it too has similar optimizations,
+ sometimes leading to anomalous results.</p>
+
+ <p><em>Verbs That Act Immediately</em></p>
+
+ <p>The following verbs act as soon as they are encountered. They must not
+ be followed by a name.</p>
+
+ <code>
+(*ACCEPT)</code>
+
+ <p>This verb causes the match to end successfully, skipping the remainder of
+ the pattern. However, when it is inside a subpattern that is called as a
+ subroutine, only that subpattern is ended successfully. Matching then
+ continues at the outer level. If (*ACCEPT) is triggered in a positive
+ assertion, the assertion succeeds; in a negative assertion, the assertion
+ fails.</p>
+
+ <p>If (*ACCEPT) is inside capturing parentheses, the data so far is
+ captured. For example, the following matches "AB", "AAD", or "ACD". When
+ it matches "AB", "B" is captured by the outer parentheses.</p>
+
+ <code>
+A((?:A|B(*ACCEPT)|C)D)</code>
+
+ <p>The following verb causes a matching failure, forcing backtracking to
+ occur. It is equivalent to (?!) but easier to read.</p>
+
+ <code>
+(*FAIL) or (*F)</code>
+
+ <p>The Perl documentation states that it is probably useful only when
+ combined with (?{}) or (??{}). Those are Perl features that
+ are not present in PCRE.</p>
+
+ <p>A match with the string "aaaa" always fails, but the callout is taken
+ before each backtrack occurs (in this example, 10 times).</p>
+
+ <p><em>Recording Which Path Was Taken</em></p>
+
+ <p>The main purpose of this verb is to track how a match was arrived at,
+ although it also has a secondary use in with advancing the match
+ starting point (see (*SKIP) below).</p>
-<p>If the condition is the string (R), and there is no subpattern with
-the name R, the condition is true if a recursive call to the whole
-pattern or any subpattern has been made. If digits or a name preceded
-by ampersand follow the letter R, for example:</p>
+ <note>
+ <p>In Erlang, there is no interface to retrieve a mark with
+ <seealso marker="#run/2"><c>run/2,3</c></seealso>, so only the secondary
+ purpose is relevant to the Erlang programmer.</p>
-<quote><p> (?(R3)...) or (?(R&amp;name)...)</p></quote>
+ <p>The rest of this section is therefore deliberately not adapted for
+ reading by the Erlang programmer, but the examples can help in
+ understanding NAMES as they can be used by (*SKIP).</p>
+ </note>
-<p>the condition is true if the most recent recursion is into a
-subpattern whose number or name is given. This condition does not
-check the entire recursion stack. If the name used in a condition of this kind is a duplicate, the test is
-applied to all subpatterns of the same name, and is true if any one of them is
-the most recent recursion.</p>
+ <code>
+(*MARK:NAME) or (*:NAME)</code>
-<p>At "top level", all these recursion test conditions are false. The syntax for recursive
-patterns is described below.</p>
-
-<p><em>Defining subpatterns for use by reference only</em></p>
-
-<p>If the condition is the string (DEFINE), and there is no subpattern with the
-name DEFINE, the condition is always false. In this case, there may be only one
-alternative in the subpattern. It is always skipped if control reaches this
-point in the pattern; the idea of DEFINE is that it can be used to define
-"subroutines" that can be referenced from elsewhere. (The use of subroutines
-is described below.) For example, a pattern to match an IPv4 address such as
-"192.168.23.245" could be
-written like this (ignore whitespace and line breaks):</p>
+ <p>A name is always required with this verb. There can be as many instances
+ of (*MARK) as you like in a pattern, and their names do not have to be
+ unique.</p>
-<quote><p> (?(DEFINE) (?&lt;byte&gt; 2[0-4]\d | 25[0-5] | 1\d\d | [1-9]?\d) )
- \b (?&amp;byte) (\.(?&amp;byte)){3} \b</p></quote>
-
-<p>The first part of the pattern is a DEFINE group inside which a
-another group named "byte" is defined. This matches an individual
-component of an IPv4 address (a number less than 256). When matching
-takes place, this part of the pattern is skipped because DEFINE acts
-like a false condition. The rest of the pattern uses references to the
-named group to match the four dot-separated components of an IPv4
-address, insisting on a word boundary at each end.</p>
-
-<p><em>Assertion conditions</em></p>
+ <p>When a match succeeds, the name of the last encountered (*MARK:NAME),
+ (*PRUNE:NAME), or (*THEN:NAME) on the matching path is passed back to the
+ caller as described in section "Extra data for <c>pcre_exec()</c>" in the
+ <c>pcreapi</c> documentation. In the following example of <c>pcretest</c>
+ output, the /K modifier requests the retrieval and outputting of (*MARK)
+ data:</p>
-<p>If the condition is not in any of the above formats, it must be an
-assertion. This may be a positive or negative lookahead or lookbehind
-assertion. Consider this pattern, again containing non-significant
-whitespace, and with the two alternatives on the second line:</p>
+<code>
+ re&gt; /X(*MARK:A)Y|X(*MARK:B)Z/K
+data&gt; XY
+ 0: XY
+MK: A
+XZ
+ 0: XZ
+MK: B</code>
+
+ <p>The (*MARK) name is tagged with "MK:" in this output, and in this example
+ it indicates which of the two alternatives matched. This is a more
+ efficient way of obtaining this information than putting each alternative
+ in its own capturing parentheses.</p>
+
+ <p>If a verb with a name is encountered in a positive assertion that is
+ true, the name is recorded and passed back if it is the last encountered.
+ This does not occur for negative assertions or failing positive
+ assertions.</p>
+
+ <p>After a partial match or a failed match, the last encountered name in the
+ entire match process is returned, for example:</p>
+
+ <code>
+ re&gt; /X(*MARK:A)Y|X(*MARK:B)Z/K
+data&gt; XP
+No match, mark = B</code>
+
+ <p>Notice that in this unanchored example, the mark is retained from the
+ match attempt that started at letter "X" in the subject. Subsequent match
+ attempts starting at "P" and then with an empty string do not get as far
+ as the (*MARK) item, nevertheless do not reset it.</p>
+
+ <p><em>Verbs That Act after Backtracking</em></p>
+
+ <p>The following verbs do nothing when they are encountered. Matching
+ continues with what follows, but if there is no subsequent match, causing
+ a backtrack to the verb, a failure is forced. That is, backtracking cannot
+ pass to the left of the verb. However, when one of these verbs appears
+ inside an atomic group or an assertion that is true, its effect is
+ confined to that group, as once the group has been matched, there is never
+ any backtracking into it. In this situation, backtracking can "jump back"
+ to the left of the entire atomic group or assertion. (Remember also, as
+ stated above, that this localization also applies in subroutine
+ calls.)</p>
+
+ <p>These verbs differ in exactly what kind of failure occurs when
+ backtracking reaches them. The behavior described below is what occurs
+ when the verb is not in a subroutine or an assertion. Subsequent sections
+ cover these special cases.</p>
+
+ <p>The following verb, which must not be followed by a name, causes the
+ whole match to fail outright if there is a later matching failure that
+ causes backtracking to reach it. Even if the pattern is unanchored, no
+ further attempts to find a match by advancing the starting point take
+ place.</p>
+
+ <code>
+(*COMMIT)</code>
+
+ <p>If (*COMMIT) is the only backtracking verb that is encountered, once it
+ has been passed, <seealso marker="#run/2"><c>run/2,3</c></seealso> is
+ committed to find a match at the current starting point, or not at all,
+ for example:</p>
+
+ <code>
+a+(*COMMIT)b</code>
+
+ <p>This matches "xxaab" but not "aacaab". It can be thought of as a kind of
+ dynamic anchor, or "I've started, so I must finish". The name of the most
+ recently passed (*MARK) in the path is passed back when (*COMMIT) forces
+ a match failure.</p>
+
+ <p>If more than one backtracking verb exists in a pattern, a different one
+ that follows (*COMMIT) can be triggered first, so merely passing (*COMMIT)
+ during a match does not always guarantee that a match must be at this
+ starting point.</p>
+
+ <p>Notice that (*COMMIT) at the start of a pattern is not the same as an
+ anchor, unless the PCRE start-of-match optimizations are turned off, as
+ shown in the following example:</p>
<code type="none">
- (?(?=[^a-z]*[a-z])
- \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} )</code>
-
-<p>The condition is a positive lookahead assertion that matches an optional
-sequence of non-letters followed by a letter. In other words, it tests for the
-presence of at least one letter in the subject. If a letter is found, the
-subject is matched against the first alternative; otherwise it is matched
-against the second. This pattern matches strings in one of the two forms
-dd-aaa-dd or dd-dd-dd, where aaa are letters and dd are digits.</p>
-
-
-</section>
-
-<section><marker id="sect19"></marker><title>Comments</title>
-
-<p>There are two ways of including comments in patterns that are processed by
-PCRE. In both cases, the start of the comment must not be in a character class,
-nor in the middle of any other sequence of related characters such as (?: or a
-subpattern name or number. The characters that make up a comment play no part
-in the pattern matching.</p>
-
-<p>The sequence (?# marks the start of a comment that continues up to the next
-closing parenthesis. Nested parentheses are not permitted. If the PCRE_EXTENDED
-option is set, an unescaped # character also introduces a comment, which in
-this case continues to immediately after the next newline character or
-character sequence in the pattern. Which characters are interpreted as newlines
-is controlled by the options passed to a compiling function or by a special
-sequence at the start of the pattern, as described in the section entitled
-"Newline conventions"
-above. Note that the end of this type of comment is a literal newline sequence
-in the pattern; escape sequences that happen to represent a newline do not
-count. For example, consider this pattern when <c>extended</c> is set, and the
-default newline convention is in force:</p>
-
-<quote><p> abc #comment \n still comment</p></quote>
-
-<p>On encountering the # character, <em>pcre_compile()</em> skips along, looking for
-a newline in the pattern. The sequence \n is still literal at this stage, so
-it does not terminate the comment. Only an actual character with the code value
-0x0a (the default newline) does so.</p>
-
-</section>
-
-<section><marker id="sect20"></marker><title>Recursive patterns</title>
+1&gt; re:run("xyzabc","(*COMMIT)abc",[{capture,all,list}]).
+{match,["abc"]}
+2&gt; re:run("xyzabc","(*COMMIT)abc",[{capture,all,list},no_start_optimize]).
+nomatch</code>
+
+ <p>PCRE knows that any match must start with "a", so the optimization skips
+ along the subject to "a" before running the first match attempt, which
+ succeeds. When the optimization is disabled by option
+ <c>no_start_optimize</c>, the match starts at "x" and so the (*COMMIT)
+ causes it to fail without trying any other starting points.</p>
+
+ <p>The following verb causes the match to fail at the current starting
+ position in the subject if there is a later matching failure that causes
+ backtracking to reach it:</p>
+
+ <code>
+(*PRUNE) or (*PRUNE:NAME)</code>
+
+ <p>If the pattern is unanchored, the normal "bumpalong" advance to the next
+ starting character then occurs. Backtracking can occur as usual to the
+ left of (*PRUNE), before it is reached, or when matching to the right of
+ (*PRUNE), but if there is no match to the right, backtracking cannot
+ cross (*PRUNE). In simple cases, the use of (*PRUNE) is just an
+ alternative to an atomic group or possessive quantifier, but there are
+ some uses of (*PRUNE) that cannot be expressed in any other way. In an
+ anchored pattern, (*PRUNE) has the same effect as (*COMMIT).</p>
+
+ <p>The behavior of (*PRUNE:NAME) is the not the same as
+ (*MARK:NAME)(*PRUNE). It is like (*MARK:NAME) in that the name is
+ remembered for passing back to the caller. However, (*SKIP:NAME) searches
+ only for names set with (*MARK).</p>
-<p>Consider the problem of matching a string in parentheses, allowing for
-unlimited nested parentheses. Without the use of recursion, the best that can
-be done is to use a pattern that matches up to some fixed depth of nesting. It
-is not possible to handle an arbitrary nesting depth.</p>
-
-<p>For some time, Perl has provided a facility that allows regular
-expressions to recurse (amongst other things). It does this by
-interpolating Perl code in the expression at run time, and the code
-can refer to the expression itself. A Perl pattern using code
-interpolation to solve the parentheses problem can be created like
-this:</p>
-
-<quote><p> $re = qr{\( (?: (?&gt;[^()]+) | (?p{$re}) )* \)}x;</p></quote>
-
-<p>The (?p{...}) item interpolates Perl code at run time, and in this
-case refers recursively to the pattern in which it appears.</p>
-
-<p>Obviously, PCRE cannot support the interpolation of Perl code. Instead, it
-supports special syntax for recursion of the entire pattern, and also for
-individual subpattern recursion. After its introduction in PCRE and Python,
-this kind of recursion was subsequently introduced into Perl at release 5.10.</p>
-
-<p>A special item that consists of (? followed by a number greater
-than zero and a closing parenthesis is a recursive subroutine call of the
-subpattern of the given number, provided that it occurs inside that
-subpattern. (If not, it is a non-recursive subroutine call, which is described in
-the next section.) The special item (?R) or (?0) is a recursive call
-of the entire regular expression.</p>
-
-<p>This PCRE pattern solves the nested parentheses problem (assume the
-<c>extended</c> option is set so that whitespace is ignored):</p>
-
-<quote><p> \( ( [^()]++ | (?R) )* \)</p></quote>
-
-<p>First it matches an opening parenthesis. Then it matches any number
-of substrings which can either be a sequence of non-parentheses, or a
-recursive match of the pattern itself (that is, a correctly
-parenthesized substring). Finally there is a closing
-parenthesis. Note the use of a possessive quantifier to avoid
-backtracking into sequences of non-parentheses.</p>
-
-<p>If this were part of a larger pattern, you would not want to
-recurse the entire pattern, so instead you could use this:</p>
-
-<quote><p> ( \( ( [^()]++ | (?1) )* \) )</p></quote>
-
-<p>We have put the pattern into parentheses, and caused the recursion
-to refer to them instead of the whole pattern.</p>
-
-<p>In a larger pattern, keeping track of parenthesis numbers can be tricky. This
-is made easier by the use of relative references. Instead of (?1) in the
-pattern above you can write (?-2) to refer to the second most recently opened
-parentheses preceding the recursion. In other words, a negative number counts
-capturing parentheses leftwards from the point at which it is encountered.</p>
-
-<p>It is also possible to refer to subsequently opened parentheses, by
-writing references such as (?+2). However, these cannot be recursive
-because the reference is not inside the parentheses that are
-referenced. They are always non-recursive subroutine calls, as described in the
-next section.</p>
-
-<p>An alternative approach is to use named parentheses instead. The
-Perl syntax for this is (?&amp;name); PCRE's earlier syntax
-(?P&gt;name) is also supported. We could rewrite the above example as
-follows:</p>
-
-<quote><p> (?&lt;pn&gt; \( ( [^()]++ | (?&amp;pn) )* \) )</p></quote>
-
-<p>If there is more than one subpattern with the same name, the earliest one is
-used.</p>
-
-<p>This particular example pattern that we have been looking at contains nested
-unlimited repeats, and so the use of a possessive quantifier for matching
-strings of non-parentheses is important when applying the pattern to strings
-that do not match. For example, when this pattern is applied to</p>
-
-<quote><p> (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()</p></quote>
-
-<p>it yields "no match" quickly. However, if a possessive quantifier is not used,
-the match runs for a very long time indeed because there are so many different
-ways the + and * repeats can carve up the subject, and all have to be tested
-before failure can be reported.</p>
-
-<p>At the end of a match, the values of capturing parentheses are those from
-the outermost level. If the pattern above is matched against</p>
-
-<quote><p> (ab(cd)ef)</p></quote>
-
-<p>the value for the inner capturing parentheses (numbered 2) is "ef", which is
-the last value taken on at the top level. If a capturing subpattern is not
-matched at the top level, its final captured value is unset, even if it was
-(temporarily) set at a deeper level during the matching process.</p>
-
-<p>Do not confuse the (?R) item with the condition (R), which tests for recursion.
-Consider this pattern, which matches text in angle brackets, allowing for
-arbitrary nesting. Only digits are allowed in nested brackets (that is, when
-recursing), whereas any characters are permitted at the outer level.</p>
-
-<quote><p> &lt; (?: (?(R) \d++ | [^&lt;&gt;]*+) | (?R)) * &gt;</p></quote>
-
-<p>In this pattern, (?(R) is the start of a conditional subpattern, with two
-different alternatives for the recursive and non-recursive cases. The (?R) item
-is the actual recursive call.</p>
-
-<p><em>Differences in recursion processing between PCRE and Perl</em></p>
-
-<p>Recursion processing in PCRE differs from Perl in two important ways. In PCRE
-(like Python, but unlike Perl), a recursive subpattern call is always treated
-as an atomic group. That is, once it has matched some of the subject string, it
-is never re-entered, even if it contains untried alternatives and there is a
-subsequent matching failure. This can be illustrated by the following pattern,
-which purports to match a palindromic string that contains an odd number of
-characters (for example, "a", "aba", "abcba", "abcdcba"):</p>
-
-<quote><p> ^(.|(.)(?1)\2)$</p></quote>
-
-<p>The idea is that it either matches a single character, or two identical
-characters surrounding a sub-palindrome. In Perl, this pattern works; in PCRE
-it does not if the pattern is longer than three characters. Consider the
-subject string "abcba":</p>
-
-<p>At the top level, the first character is matched, but as it is not at the end
-of the string, the first alternative fails; the second alternative is taken
-and the recursion kicks in. The recursive call to subpattern 1 successfully
-matches the next character ("b"). (Note that the beginning and end of line
-tests are not part of the recursion).</p>
-
-<p>Back at the top level, the next character ("c") is compared with what
-subpattern 2 matched, which was "a". This fails. Because the recursion is
-treated as an atomic group, there are now no backtracking points, and so the
-entire match fails. (Perl is able, at this point, to re-enter the recursion and
-try the second alternative.) However, if the pattern is written with the
-alternatives in the other order, things are different:</p>
-
-<quote><p> ^((.)(?1)\2|.)$</p></quote>
-
-<p>This time, the recursing alternative is tried first, and continues to recurse
-until it runs out of characters, at which point the recursion fails. But this
-time we do have another alternative to try at the higher level. That is the big
-difference: in the previous case the remaining alternative is at a deeper
-recursion level, which PCRE cannot use.</p>
-
-<p>To change the pattern so that it matches all palindromic strings, not just
-those with an odd number of characters, it is tempting to change the pattern to
-this:</p>
-
-<quote><p> ^((.)(?1)\2|.?)$</p></quote>
-
-<p>Again, this works in Perl, but not in PCRE, and for the same reason. When a
-deeper recursion has matched a single character, it cannot be entered again in
-order to match an empty string. The solution is to separate the two cases, and
-write out the odd and even cases as alternatives at the higher level:</p>
-
-<quote><p> ^(?:((.)(?1)\2|)|((.)(?3)\4|.))</p></quote>
-
-<p>If you want to match typical palindromic phrases, the pattern has to ignore all
-non-word characters, which can be done like this:</p>
-
- <quote><p> ^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$</p></quote>
-
-<p>If run with the <c>caseless</c> option, this pattern matches phrases such as "A
-man, a plan, a canal: Panama!" and it works well in both PCRE and Perl. Note
-the use of the possessive quantifier *+ to avoid backtracking into sequences of
-non-word characters. Without this, PCRE takes a great deal longer (ten times or
-more) to match typical phrases, and Perl takes so long that you think it has
-gone into a loop.</p>
-
-<p><em>WARNING</em>: The palindrome-matching patterns above work only if the subject
-string does not start with a palindrome that is shorter than the entire string.
-For example, although "abcba" is correctly matched, if the subject is "ababa",
-PCRE finds the palindrome "aba" at the start, then fails at top level because
-the end of the string does not follow. Once again, it cannot jump back into the
-recursion to try other alternatives, so the entire match fails.</p>
-
-<p>The second way in which PCRE and Perl differ in their recursion processing is
-in the handling of captured values. In Perl, when a subpattern is called
-recursively or as a subpattern (see the next section), it has no access to any
-values that were captured outside the recursion, whereas in PCRE these values
-can be referenced. Consider this pattern:</p>
-
-<quote><p> ^(.)(\1|a(?2))</p></quote>
-
-<p>In PCRE, this pattern matches "bab". The first capturing parentheses match "b",
-then in the second group, when the back reference \1 fails to match "b", the
-second alternative matches "a" and then recurses. In the recursion, \1 does
-now match "b" and so the whole match succeeds. In Perl, the pattern fails to
-match because inside the recursive call \1 cannot access the externally set
-value.</p>
-
-</section>
-
-<section><marker id="sect21"></marker><title>Subpatterns as subroutines</title>
-
-<p>If the syntax for a recursive subpattern call (either by number or by
-name) is used outside the parentheses to which it refers, it operates like a
-subroutine in a programming language. The called subpattern may be defined
-before or after the reference. A numbered reference can be absolute or
-relative, as in these examples:</p>
-
-<list>
- <item>(...(absolute)...)...(?2)...</item>
- <item>(...(relative)...)...(?-1)...</item>
- <item>(...(?+1)...(relative)...</item>
-</list>
-
-<p>An earlier example pointed out that the pattern</p>
-
-<quote><p> (sens|respons)e and \1ibility</p></quote>
-
-<p>matches "sense and sensibility" and "response and responsibility", but not
-"sense and responsibility". If instead the pattern</p>
-
-<quote><p> (sens|respons)e and (?1)ibility</p></quote>
-
-<p>is used, it does match "sense and responsibility" as well as the other two
-strings. Another example is given in the discussion of DEFINE above.</p>
-
-<p>All subroutine calls, whether recursive or not, are always treated as atomic
-groups. That is, once a subroutine has matched some of the subject string, it
-is never re-entered, even if it contains untried alternatives and there is a
-subsequent matching failure. Any capturing parentheses that are set during the
-subroutine call revert to their previous values afterwards.</p>
-
-<p>Processing options such as case-independence are fixed when a subpattern is
-defined, so if it is used as a subroutine, such options cannot be changed for
-different calls. For example, consider this pattern:</p>
-<quote><p> (abc)(?i:(?-1))</p></quote>
-
-<p>It matches "abcabc". It does not match "abcABC" because the change of
-processing option does not affect the called subpattern.</p>
-
-</section>
-
-<section><marker id="sect22"></marker><title>Oniguruma subroutine syntax</title>
-<p>For compatibility with Oniguruma, the non-Perl syntax \g followed by a name or
-a number enclosed either in angle brackets or single quotes, is an alternative
-syntax for referencing a subpattern as a subroutine, possibly recursively. Here
-are two of the examples used above, rewritten using this syntax:</p>
-<quote>
- <p> (?&lt;pn&gt; \( ( (?&gt;[^()]+) | \g&lt;pn&gt; )* \) )</p>
- <p> (sens|respons)e and \g'1'ibility</p>
-</quote>
-<p>PCRE supports an extension to Oniguruma: if a number is preceded by a
-plus or a minus sign it is taken as a relative reference. For example:</p>
-
- <quote><p> (abc)(?i:\g&lt;-1&gt;)</p></quote>
-
-<p>Note that \g{...} (Perl syntax) and \g&lt;...&gt; (Oniguruma syntax) are <i>not</i>
-synonymous. The former is a back reference; the latter is a subroutine call.</p>
-
-</section>
-<!-- XXX C interface
-
-<section> <marker id="sect22"><title>Callouts</title></marker>
-
-<p>Perl has a feature whereby using the sequence (?{...}) causes arbitrary Perl
-code to be obeyed in the middle of matching a regular expression. This makes it
-possible, amongst other things, to extract different substrings that match the
-same pair of parentheses when there is a repetition.</p>
-
-<p>PCRE provides a similar feature, but of course it cannot obey arbitrary Perl
-code. The feature is called "callout". The caller of PCRE provides an external
-function by putting its entry point in the global variable <em>pcre_callout</em>.
-By default, this variable contains NULL, which disables all calling out.</p>
-
-<p>Within a regular expression, (?C) indicates the points at which the external
-function is to be called. If you want to identify different callout points, you
-can put a number less than 256 after the letter C. The default value is zero.
-For example, this pattern has two callout points:</p>
-
-<quote><p> (?C1)abc(?C2)def</p></quote>
-
-
-<p>If the <c>AUTO_CALLOUT</c> flag is passed to <c>re:compile/2</c>, callouts are
-automatically installed before each item in the pattern. They are all numbered
-255.</p>
+ <note>
+ <p>The fact that (*PRUNE:NAME) remembers the name is useless to the Erlang
+ programmer, as names cannot be retrieved.</p>
+ </note>
-<p>During matching, when PCRE reaches a callout point (and <em>pcre_callout</em> is
-set), the external function is called. It is provided with the number of the
-callout, the position in the pattern, and, optionally, one item of data
-originally supplied by the caller of <c>re:run/3</c>. The callout function
-may cause matching to proceed, to backtrack, or to fail altogether. A complete
-description of the interface to the callout function is given in the
-<em>pcrecallout</em>
-documentation.</p>
+ <p>The following verb, when specified without a name, is like (*PRUNE),
+ except that if the pattern is unanchored, the "bumpalong" advance is not
+ to the next character, but to the position in the subject where (*SKIP)
+ was encountered.</p>
+ <code>
+(*SKIP)</code>
-</section>
--->
+ <p>(*SKIP) signifies that whatever text was matched leading up to it cannot
+ be part of a successful match. Consider:</p>
-<section><marker id="sect23"></marker><title>Backtracking control</title>
-
-<p>Perl 5.10 introduced a number of "Special Backtracking Control Verbs", which
-are still described in the Perl documentation as "experimental and subject to
-change or removal in a future version of Perl". It goes on to say: "Their usage
-in production code should be noted to avoid problems during upgrades." The same
-remarks apply to the PCRE features described in this section.</p>
-
-<p>The new verbs make use of what was previously invalid syntax: an opening
-parenthesis followed by an asterisk. They are generally of the form
-(*VERB) or (*VERB:NAME). Some may take either form, possibly behaving
-differently depending on whether or not a name is present. A name is any
-sequence of characters that does not include a closing parenthesis. The maximum
-length of name is 255 in the 8-bit library and 65535 in the 16-bit and 32-bit
-libraries. If the name is empty, that is, if the closing parenthesis
-immediately follows the colon, the effect is as if the colon were not there.
-Any number of these verbs may occur in a pattern.</p>
-
-<!-- XXX C interface
-<p>Since these verbs are specifically related to backtracking, most of them can be
-used only when the pattern is to be matched using one of the traditional
-matching functions, because these use a backtracking algorithm. With the
-exception of (*FAIL), which behaves like a failing negative assertion, the
-backtracking control verbs cause an error if encountered by a DFA matching
-function.</p>
--->
-<p>The behaviour of these verbs in
-repeated groups, assertions,
-and in subpatterns called as subroutines
-(whether or not recursively) is documented below.</p>
-
-<p><em>Optimizations that affect backtracking verbs</em></p>
-
-<p>PCRE contains some optimizations that are used to speed up matching by running
-some checks at the start of each match attempt. For example, it may know the
-minimum length of matching subject, or that a particular character must be
-present. When one of these optimizations bypasses the running of a match, any
-included backtracking verbs will not, of course, be processed. You can suppress
-the start-of-match optimizations by setting the <c>no_start_optimize</c> option
-when calling <c>re:compile/2</c> or <c>re:run/3</c>, or by starting the
-pattern with (*NO_START_OPT).</p>
-
-<p>Experiments with Perl suggest that it too has similar optimizations, sometimes
-leading to anomalous results.</p>
-
-<p><em>Verbs that act immediately</em></p>
-
-<p>The following verbs act as soon as they are encountered. They may not be
-followed by a name.</p>
-
-<quote><p> (*ACCEPT)</p></quote>
-
-<p>This verb causes the match to end successfully, skipping the remainder of the
-pattern. However, when it is inside a subpattern that is called as a
-subroutine, only that subpattern is ended successfully. Matching then continues
-at the outer level. If (*ACCEPT) in triggered in a positive assertion, the
-assertion succeeds; in a negative assertion, the assertion fails.</p>
-
-<p>If (*ACCEPT) is inside capturing parentheses, the data so far is captured. For
-example:</p>
-
-<quote><p> A((?:A|B(*ACCEPT)|C)D)</p></quote>
-
-<p>This matches "AB", "AAD", or "ACD"; when it matches "AB", "B" is captured by
-the outer parentheses.</p>
-
-<quote><p> (*FAIL) or (*F)</p></quote>
-
-<p>This verb causes a matching failure, forcing backtracking to occur. It is
-equivalent to (?!) but easier to read. The Perl documentation notes that it is
-probably useful only when combined with (?{}) or (??{}). Those are, of course,
-Perl features that are not present in PCRE. The nearest equivalent is the
-callout feature, as for example in this pattern:</p>
-
-<quote><p> a+(?C)(*FAIL)</p></quote>
-
-<p>A match with the string "aaaa" always fails, but the callout is taken before
-each backtrack happens (in this example, 10 times).</p>
-
-<p><em>Recording which path was taken</em></p>
-
-<p>There is one verb whose main purpose is to track how a match was arrived at,
-though it also has a secondary use in conjunction with advancing the match
-starting point (see (*SKIP) below).</p>
-
-<warning>
-<p>In Erlang, there is no interface to retrieve a mark with <c>re:run/{2,3]</c>,
-so only the secondary purpose is relevant to the Erlang programmer!</p>
-<p>The rest of this section is therefore deliberately not adapted for reading
-by the Erlang programmer, however the examples might help in understanding NAMES as
-they can be used by (*SKIP).</p>
-</warning>
-
-<quote><p> (*MARK:NAME) or (*:NAME)</p></quote>
-
-<p>A name is always required with this verb. There may be as many instances of
-(*MARK) as you like in a pattern, and their names do not have to be unique.</p>
-
-<p>When a match succeeds, the name of the last-encountered (*MARK:NAME),
-(*PRUNE:NAME), or (*THEN:NAME) on the matching path is passed back to the
-caller as described in the section entitled "Extra data for <c>pcre_exec()</c>"
-in the <c>pcreapi</c>
-documentation. Here is an example of <c>pcretest</c> output, where the /K
-modifier requests the retrieval and outputting of (*MARK) data:</p>
-<code>
- re&gt; /X(*MARK:A)Y|X(*MARK:B)Z/K
- data&gt; XY
- 0: XY
- MK: A
- XZ
- 0: XZ
- MK: B</code>
-
-<p>The (*MARK) name is tagged with "MK:" in this output, and in this example it
-indicates which of the two alternatives matched. This is a more efficient way
-of obtaining this information than putting each alternative in its own
-capturing parentheses.</p>
-
-<p>If a verb with a name is encountered in a positive assertion that is true, the
-name is recorded and passed back if it is the last-encountered. This does not
-happen for negative assertions or failing positive assertions.</p>
-
-<p>After a partial match or a failed match, the last encountered name in the
-entire match process is returned. For example:</p>
-<code>
- re&gt; /X(*MARK:A)Y|X(*MARK:B)Z/K
- data&gt; XP
- No match, mark = B</code>
-
-<p>Note that in this unanchored example the mark is retained from the match
-attempt that started at the letter "X" in the subject. Subsequent match
-attempts starting at "P" and then with an empty string do not get as far as the
-(*MARK) item, but nevertheless do not reset it.</p>
-
-<!--
-<p>If you are interested in (*MARK) values after failed matches, you should
-probably set the PCRE_NO_START_OPTIMIZE option
-(see above)
-to ensure that the match is always attempted.</p>
--->
-
-<p><em>Verbs that act after backtracking</em></p>
-
-<p>The following verbs do nothing when they are encountered. Matching continues
-with what follows, but if there is no subsequent match, causing a backtrack to
-the verb, a failure is forced. That is, backtracking cannot pass to the left of
-the verb. However, when one of these verbs appears inside an atomic group or an
-assertion that is true, its effect is confined to that group, because once the
-group has been matched, there is never any backtracking into it. In this
-situation, backtracking can "jump back" to the left of the entire atomic group
-or assertion. (Remember also, as stated above, that this localization also
-applies in subroutine calls.)</p>
-
-<p>These verbs differ in exactly what kind of failure occurs when backtracking
-reaches them. The behaviour described below is what happens when the verb is
-not in a subroutine or an assertion. Subsequent sections cover these special
-cases.</p>
-
-<quote><p> (*COMMIT)</p></quote>
-
-<p>This verb, which may not be followed by a name, causes the whole match to fail
-outright if there is a later matching failure that causes backtracking to reach
-it. Even if the pattern is unanchored, no further attempts to find a match by
-advancing the starting point take place. If (*COMMIT) is the only backtracking
-verb that is encountered, once it has been passed <c>re:run/{2,3}</c> is
-committed to finding a match at the current starting point, or not at all. For
-example:</p>
-
-<quote><p> a+(*COMMIT)b</p></quote>
-
-<p>This matches "xxaab" but not "aacaab". It can be thought of as a kind of
-dynamic anchor, or "I've started, so I must finish." The name of the most
-recently passed (*MARK) in the path is passed back when (*COMMIT) forces a
-match failure.</p>
-
-<p>If there is more than one backtracking verb in a pattern, a different one that
-follows (*COMMIT) may be triggered first, so merely passing (*COMMIT) during a
-match does not always guarantee that a match must be at this starting point.</p>
-
-<p>Note that (*COMMIT) at the start of a pattern is not the same as an anchor,
-unless PCRE's start-of-match optimizations are turned off, as shown in this
- example:</p>
-<code type="none">
- 1&gt; re:run("xyzabc","(*COMMIT)abc",[{capture,all,list}]).
- {match,["abc"]}
- 2&gt; re:run("xyzabc","(*COMMIT)abc",[{capture,all,list},no_start_optimize]).
- nomatch</code>
-
-<p>PCRE knows that any match must start with "a", so the optimization skips along
-the subject to "a" before running the first match attempt, which succeeds. When
-the optimization is disabled by the <c>no_start_optimize</c> option, the match
-starts at "x" and so the (*COMMIT) causes it to fail without trying any other
-starting points.</p>
-
-<quote><p> (*PRUNE) or (*PRUNE:NAME)</p></quote>
-
-<p>This verb causes the match to fail at the current starting position in the
-subject if there is a later matching failure that causes backtracking to reach
-it. If the pattern is unanchored, the normal "bumpalong" advance to the next
-starting character then happens. Backtracking can occur as usual to the left of
-(*PRUNE), before it is reached, or when matching to the right of (*PRUNE), but
-if there is no match to the right, backtracking cannot cross (*PRUNE). In
-simple cases, the use of (*PRUNE) is just an alternative to an atomic group or
-possessive quantifier, but there are some uses of (*PRUNE) that cannot be
-expressed in any other way. In an anchored pattern (*PRUNE) has the same effect
-as (*COMMIT).</p>
-
-<p>The behaviour of (*PRUNE:NAME) is the not the same as (*MARK:NAME)(*PRUNE).
-It is like (*MARK:NAME) in that the name is remembered for passing back to the
-caller. However, (*SKIP:NAME) searches only for names set with (*MARK).</p>
-
-<warning>
-<p>The fact that (*PRUNE:NAME) remembers the name is useless to the Erlang programmer,
-as names can not be retrieved.</p>
-</warning>
-
-<quote><p> (*SKIP)</p></quote>
-
-<p>This verb, when given without a name, is like (*PRUNE), except that if the
-pattern is unanchored, the "bumpalong" advance is not to the next character,
-but to the position in the subject where (*SKIP) was encountered. (*SKIP)
-signifies that whatever text was matched leading up to it cannot be part of a
-successful match. Consider:</p>
-
-<quote><p> a+(*SKIP)b</p></quote>
-
-<p>If the subject is "aaaac...", after the first match attempt fails (starting at
-the first character in the string), the starting point skips on to start the
-next attempt at "c". Note that a possessive quantifer does not have the same
-effect as this example; although it would suppress backtracking during the
-first match attempt, the second attempt would start at the second character
-instead of skipping on to "c".</p>
-
-<quote><p> (*SKIP:NAME)</p></quote>
-
-<p>When (*SKIP) has an associated name, its behaviour is modified. When it is
-triggered, the previous path through the pattern is searched for the most
-recent (*MARK) that has the same name. If one is found, the "bumpalong" advance
-is to the subject position that corresponds to that (*MARK) instead of to where
-(*SKIP) was encountered. If no (*MARK) with a matching name is found, the
-(*SKIP) is ignored.</p>
-
-<p>Note that (*SKIP:NAME) searches only for names set by (*MARK:NAME). It ignores
-names that are set by (*PRUNE:NAME) or (*THEN:NAME).</p>
-
-<quote><p> (*THEN) or (*THEN:NAME)</p></quote>
-
-<p>This verb causes a skip to the next innermost alternative when backtracking
-reaches it. That is, it cancels any further backtracking within the current
-alternative. Its name comes from the observation that it can be used for a
-pattern-based if-then-else block:</p>
-
-<quote><p> ( COND1 (*THEN) FOO | COND2 (*THEN) BAR | COND3 (*THEN) BAZ ) ...</p></quote>
+ <code>
+a+(*SKIP)b</code>
-<p>If the COND1 pattern matches, FOO is tried (and possibly further items after
-the end of the group if FOO succeeds); on failure, the matcher skips to the
-second alternative and tries COND2, without backtracking into COND1. If that
-succeeds and BAR fails, COND3 is tried. If subsequently BAZ fails, there are no
-more alternatives, so there is a backtrack to whatever came before the entire
-group. If (*THEN) is not inside an alternation, it acts like (*PRUNE).</p>
-
-<p>The behaviour of (*THEN:NAME) is the not the same as (*MARK:NAME)(*THEN).
-It is like (*MARK:NAME) in that the name is remembered for passing back to the
-caller. However, (*SKIP:NAME) searches only for names set with (*MARK).</p>
-
-<warning>
-<p>The fact that (*THEN:NAME) remembers the name is useless to the Erlang programmer,
-as names can not be retrieved.</p>
-</warning>
-
-<p>A subpattern that does not contain a | character is just a part of the
-enclosing alternative; it is not a nested alternation with only one
-alternative. The effect of (*THEN) extends beyond such a subpattern to the
-enclosing alternative. Consider this pattern, where A, B, etc. are complex
-pattern fragments that do not contain any | characters at this level:</p>
-
-<quote><p> A (B(*THEN)C) | D</p></quote>
+ <p>If the subject is "aaaac...", after the first match attempt fails
+ (starting at the first character in the string), the starting point skips
+ on to start the next attempt at "c". Notice that a possessive quantifier
+ does not have the same effect as this example; although it would suppress
+ backtracking during the first match attempt, the second attempt would
+ start at the second character instead of skipping on to "c".</p>
-<p>If A and B are matched, but there is a failure in C, matching does not
-backtrack into A; instead it moves to the next alternative, that is, D.
-However, if the subpattern containing (*THEN) is given an alternative, it
-behaves differently:</p>
-
-<quote><p> A (B(*THEN)C | (*FAIL)) | D</p></quote>
+ <p>When (*SKIP) has an associated name, its behavior is modified:</p>
-<p>The effect of (*THEN) is now confined to the inner subpattern. After a failure
-in C, matching moves to (*FAIL), which causes the whole subpattern to fail
-because there are no more alternatives to try. In this case, matching does now
-backtrack into A.</p>
+ <code>
+(*SKIP:NAME)</code>
-<p>Note that a conditional subpattern is not considered as having two
-alternatives, because only one is ever used. In other words, the | character in
-a conditional subpattern has a different meaning. Ignoring white space,
-consider:</p>
+ <p>When this is triggered, the previous path through the pattern is searched
+ for the most recent (*MARK) that has the same name. If one is found, the
+ "bumpalong" advance is to the subject position that corresponds to that
+ (*MARK) instead of to where (*SKIP) was encountered. If no (*MARK) with a
+ matching name is found, (*SKIP) is ignored.</p>
-<quote><p> ^.*? (?(?=a) a | b(*THEN)c )</p></quote>
+ <p>Notice that (*SKIP:NAME) searches only for names set by (*MARK:NAME). It
+ ignores names that are set by (*PRUNE:NAME) or (*THEN:NAME).</p>
-<p>If the subject is "ba", this pattern does not match. Because .*? is ungreedy,
-it initially matches zero characters. The condition (?=a) then fails, the
-character "b" is matched, but "c" is not. At this point, matching does not
-backtrack to .*? as might perhaps be expected from the presence of the |
-character. The conditional subpattern is part of the single alternative that
-comprises the whole pattern, and so the match fails. (If there was a backtrack
-into .*?, allowing it to match "b", the match would succeed.)</p>
+ <p>The following verb causes a skip to the next innermost alternative when
+ backtracking reaches it. That is, it cancels any further backtracking
+ within the current alternative.</p>
-<p>The verbs just described provide four different "strengths" of control when
-subsequent matching fails. (*THEN) is the weakest, carrying on the match at the
-next alternative. (*PRUNE) comes next, failing the match at the current
-starting position, but allowing an advance to the next character (for an
-unanchored pattern). (*SKIP) is similar, except that the advance may be more
-than one character. (*COMMIT) is the strongest, causing the entire match to
-fail.</p>
+ <code>
+(*THEN) or (*THEN:NAME)</code>
+ <p>The verb name comes from the observation that it can be used for a
+ pattern-based if-then-else block:</p>
-<p><em>More than one backtracking verb</em></p>
+ <code>
+( COND1 (*THEN) FOO | COND2 (*THEN) BAR | COND3 (*THEN) BAZ ) ...</code>
-<p>If more than one backtracking verb is present in a pattern, the one that is
-backtracked onto first acts. For example, consider this pattern, where A, B,
-etc. are complex pattern fragments:</p>
+ <p>If the COND1 pattern matches, FOO is tried (and possibly further items
+ after the end of the group if FOO succeeds). On failure, the matcher skips
+ to the second alternative and tries COND2, without backtracking into
+ COND1. If that succeeds and BAR fails, COND3 is tried. If BAZ then fails,
+ there are no more alternatives, so there is a backtrack to whatever
+ came before the entire group. If (*THEN) is not inside an alternation, it
+ acts like (*PRUNE).</p>
-<quote><p> (A(*COMMIT)B(*THEN)C|ABD)</p></quote>
+ <p>The behavior of (*THEN:NAME) is the not the same as (*MARK:NAME)(*THEN).
+ It is like (*MARK:NAME) in that the name is remembered for passing back to
+ the caller. However, (*SKIP:NAME) searches only for names set with
+ (*MARK).</p>
-<p>If A matches but B fails, the backtrack to (*COMMIT) causes the entire match to
-fail. However, if A and B match, but C fails, the backtrack to (*THEN) causes
-the next alternative (ABD) to be tried. This behaviour is consistent, but is
-not always the same as Perl's. It means that if two or more backtracking verbs
-appear in succession, all the the last of them has no effect. Consider this
-example:</p>
+ <note>
+ <p>The fact that (*THEN:NAME) remembers the name is useless to the Erlang
+ programmer, as names cannot be retrieved.</p>
+ </note>
-<quote><p> ...(*COMMIT)(*PRUNE)...</p></quote>
+ <p>A subpattern that does not contain a | character is just a part of the
+ enclosing alternative; it is not a nested alternation with only one
+ alternative. The effect of (*THEN) extends beyond such a subpattern to the
+ enclosing alternative. Consider the following pattern, where A, B, and so
+ on, are complex pattern fragments that do not contain any | characters at
+ this level:</p>
+
+ <code>
+A (B(*THEN)C) | D</code>
+
+ <p>If A and B are matched, but there is a failure in C, matching does not
+ backtrack into A; instead it moves to the next alternative, that is, D.
+ However, if the subpattern containing (*THEN) is given an alternative, it
+ behaves differently:</p>
+
+ <code>
+A (B(*THEN)C | (*FAIL)) | D</code>
+
+ <p>The effect of (*THEN) is now confined to the inner subpattern. After a
+ failure in C, matching moves to (*FAIL), which causes the whole subpattern
+ to fail, as there are no more alternatives to try. In this case, matching
+ does now backtrack into A.</p>
+
+ <p>Notice that a conditional subpattern is not considered as having two
+ alternatives, as only one is ever used. That is, the | character in a
+ conditional subpattern has a different meaning. Ignoring whitespace,
+ consider:</p>
+
+ <code>
+^.*? (?(?=a) a | b(*THEN)c )</code>
+
+ <p>If the subject is "ba", this pattern does not match. As .*? is ungreedy,
+ it initially matches zero characters. The condition (?=a) then fails, the
+ character "b" is matched, but "c" is not. At this point, matching does not
+ backtrack to .*? as can perhaps be expected from the presence of the |
+ character. The conditional subpattern is part of the single alternative
+ that comprises the whole pattern, and so the match fails. (If there was a
+ backtrack into .*?, allowing it to match "b", the match would
+ succeed.)</p>
+
+ <p>The verbs described above provide four different "strengths" of control
+ when subsequent matching fails:</p>
+
+ <list type="bulleted">
+ <item>
+ <p>(*THEN) is the weakest, carrying on the match at the next
+ alternative.</p>
+ </item>
+ <item>
+ <p>(*PRUNE) comes next, fails the match at the current starting
+ position, but allows an advance to the next character (for an
+ unanchored pattern).</p>
+ </item>
+ <item>
+ <p>(*SKIP) is similar, except that the advance can be more than one
+ character.</p>
+ </item>
+ <item>
+ <p>(*COMMIT) is the strongest, causing the entire match to fail.</p>
+ </item>
+ </list>
-<p>If there is a matching failure to the right, backtracking onto (*PRUNE) cases
-it to be triggered, and its action is taken. There can never be a backtrack
-onto (*COMMIT).</p>
+ <p><em>More than One Backtracking Verb</em></p>
-<p><em>Backtracking verbs in repeated groups</em></p>
+ <p>If more than one backtracking verb is present in a pattern, the one that
+ is backtracked onto first acts. For example, consider the following
+ pattern, where A, B, and so on, are complex pattern fragments:</p>
-<p>PCRE differs from Perl in its handling of backtracking verbs in repeated
-groups. For example, consider:</p>
+ <code>
+(A(*COMMIT)B(*THEN)C|ABD)</code>
-<quote><p> /(a(*COMMIT)b)+ac/</p></quote>
+ <p>If A matches but B fails, the backtrack to (*COMMIT) causes the entire
+ match to fail. However, if A and B match, but C fails, the backtrack to
+ (*THEN) causes the next alternative (ABD) to be tried. This behavior is
+ consistent, but is not always the same as in Perl. It means that if two or
+ more backtracking verbs appear in succession, the last of them has no
+ effect. Consider the following example:</p>
-<p>If the subject is "abac", Perl matches, but PCRE fails because the (*COMMIT) in
-the second repeat of the group acts.</p>
+ <code>
+...(*COMMIT)(*PRUNE)...</code>
-<p><em>Backtracking verbs in assertions</em></p>
+ <p>If there is a matching failure to the right, backtracking onto (*PRUNE)
+ cases it to be triggered, and its action is taken. There can never be a
+ backtrack onto (*COMMIT).</p>
-<p>(*FAIL) in an assertion has its normal effect: it forces an immediate backtrack.</p>
+ <p><em>Backtracking Verbs in Repeated Groups</em></p>
-<p>(*ACCEPT) in a positive assertion causes the assertion to succeed without any
-further processing. In a negative assertion, (*ACCEPT) causes the assertion to
-fail without any further processing.</p>
+ <p>PCRE differs from Perl in its handling of backtracking verbs in repeated
+ groups. For example, consider:</p>
-<p>The other backtracking verbs are not treated specially if they appear in a
-positive assertion. In particular, (*THEN) skips to the next alternative in the
-innermost enclosing group that has alternations, whether or not this is within
-the assertion.</p>
+ <code>
+/(a(*COMMIT)b)+ac/</code>
-<p>Negative assertions are, however, different, in order to ensure that changing a
-positive assertion into a negative assertion changes its result. Backtracking
-into (*COMMIT), (*SKIP), or (*PRUNE) causes a negative assertion to be true,
-without considering any further alternative branches in the assertion.
-Backtracking into (*THEN) causes it to skip to the next enclosing alternative
-within the assertion (the normal behaviour), but if the assertion does not have
-such an alternative, (*THEN) behaves like (*PRUNE).</p>
+ <p>If the subject is "abac", Perl matches, but PCRE fails because the
+ (*COMMIT) in the second repeat of the group acts.</p>
-<p><em>Backtracking verbs in subroutines</em></p>
+ <p><em>Backtracking Verbs in Assertions</em></p>
-<p>These behaviours occur whether or not the subpattern is called recursively.
-Perl's treatment of subroutines is different in some cases.</p>
+ <p>(*FAIL) in an assertion has its normal effect: it forces an immediate
+ backtrack.</p>
-<p>(*FAIL) in a subpattern called as a subroutine has its normal effect: it forces
-an immediate backtrack.</p>
+ <p>(*ACCEPT) in a positive assertion causes the assertion to succeed without
+ any further processing. In a negative assertion, (*ACCEPT) causes the
+ assertion to fail without any further processing.</p>
-<p>(*ACCEPT) in a subpattern called as a subroutine causes the subroutine match to
-succeed without any further processing. Matching then continues after the
-subroutine call.</p>
+ <p>The other backtracking verbs are not treated specially if they appear in
+ a positive assertion. In particular, (*THEN) skips to the next alternative
+ in the innermost enclosing group that has alternations, regardless if this
+ is within the assertion.</p>
-<p>(*COMMIT), (*SKIP), and (*PRUNE) in a subpattern called as a subroutine cause
-the subroutine match to fail.</p>
+ <p>Negative assertions are, however, different, to ensure that changing a
+ positive assertion into a negative assertion changes its result.
+ Backtracking into (*COMMIT), (*SKIP), or (*PRUNE) causes a negative
+ assertion to be true, without considering any further alternative branches
+ in the assertion. Backtracking into (*THEN) causes it to skip to the next
+ enclosing alternative within the assertion (the normal behavior), but if
+ the assertion does not have such an alternative, (*THEN) behaves like
+ (*PRUNE).</p>
-<p>(*THEN) skips to the next alternative in the innermost enclosing group within
-the subpattern that has alternatives. If there is no such group within the
-subpattern, (*THEN) causes the subroutine match to fail.</p>
+ <p><em>Backtracking Verbs in Subroutines</em></p>
-</section>
+ <p>These behaviors occur regardless if the subpattern is called recursively.
+ The treatment of subroutines in Perl is different in some cases.</p>
+ <list type="bulleted">
+ <item>
+ <p>(*FAIL) in a subpattern called as a subroutine has its normal effect:
+ it forces an immediate backtrack.</p>
+ </item>
+ <item>
+ <p>(*ACCEPT) in a subpattern called as a subroutine causes the
+ subroutine match to succeed without any further processing. Matching
+ then continues after the subroutine call.</p>
+ </item>
+ <item>
+ <p>(*COMMIT), (*SKIP), and (*PRUNE) in a subpattern called as a
+ subroutine cause the subroutine match to fail.</p>
+ </item>
+ <item>
+ <p>(*THEN) skips to the next alternative in the innermost enclosing
+ group within the subpattern that has alternatives. If there is no such
+ group within the subpattern, (*THEN) causes the subroutine match to
+ fail.</p>
+ </item>
+ </list>
+ </section>
</erlref>
diff --git a/lib/stdlib/doc/src/ref_man.xml b/lib/stdlib/doc/src/ref_man.xml
index 404873ea32..878a3babc5 100644
--- a/lib/stdlib/doc/src/ref_man.xml
+++ b/lib/stdlib/doc/src/ref_man.xml
@@ -30,9 +30,6 @@
<file>application.xml</file>
</header>
<description>
- <p>The Standard Erlang Libraries application, <em>STDLIB</em>,
- contains modules for manipulating lists, strings and files etc.</p>
- <br></br>
</description>
<xi:include href="stdlib_app.xml"/>
<xi:include href="array.xml"/>
diff --git a/lib/stdlib/doc/src/sets.xml b/lib/stdlib/doc/src/sets.xml
index 531d18fbef..f7668af1ed 100644
--- a/lib/stdlib/doc/src/sets.xml
+++ b/lib/stdlib/doc/src/sets.xml
@@ -24,21 +24,23 @@
<title>sets</title>
<prepared>Robert Virding</prepared>
- <responsible>Bjarne Dacker</responsible>
+ <responsible>Bjarne D&auml;cker</responsible>
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>99-07-27</date>
+ <date>1999-07-27</date>
<rev>A</rev>
- <file>sets.sgml</file>
+ <file>sets.xml</file>
</header>
<module>sets</module>
- <modulesummary>Functions for Set Manipulation</modulesummary>
+ <modulesummary>Functions for set manipulation.</modulesummary>
<description>
<p>Sets are collections of elements with no duplicate elements.
- The representation of a set is not defined.</p>
- <p>This module provides exactly the same interface as the module
- <c>ordsets</c> but with a defined representation. One difference is
+ The representation of a set is undefined.</p>
+
+ <p>This module provides the same interface as the
+ <seealso marker="ordsets"><c>ordsets(3)</c></seealso> module
+ but with a defined representation. One difference is
that while this module considers two elements as different if they
do not match (<c>=:=</c>), <c>ordsets</c> considers two elements as
different if and only if they do not compare equal (<c>==</c>).</p>
@@ -47,151 +49,170 @@
<datatypes>
<datatype>
<name name="set" n_vars="1"/>
- <desc><p>As returned by <c>new/0</c>.</p></desc>
+ <desc><p>As returned by
+ <seealso marker="#new/0"><c>new/0</c></seealso>.</p></desc>
</datatype>
<datatype>
<name name="set" n_vars="0"/>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="new" arity="0"/>
- <fsummary>Return an empty set</fsummary>
+ <name name="add_element" arity="2"/>
+ <fsummary>Add an element to a <c>Set</c>.</fsummary>
<desc>
- <p>Returns a new empty set.</p>
+ <p>Returns a new set formed from <c><anno>Set1</anno></c> with
+ <c><anno>Element</anno></c> inserted.</p>
</desc>
</func>
+
<func>
- <name name="is_set" arity="1"/>
- <fsummary>Test for a <c>Set</c></fsummary>
+ <name name="del_element" arity="2"/>
+ <fsummary>Remove an element from a <c>Set</c>.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Set</anno></c> is a set of
- elements, otherwise <c>false</c>.</p>
+ <p>Returns <c><anno>Set1</anno></c>, but with
+ <c><anno>Element</anno></c> removed.</p>
</desc>
</func>
+
<func>
- <name name="size" arity="1"/>
- <fsummary>Return the number of elements in a set</fsummary>
+ <name name="filter" arity="2"/>
+ <fsummary>Filter set elements.</fsummary>
<desc>
- <p>Returns the number of elements in <c><anno>Set</anno></c>.</p>
+ <p>Filters elements in <c><anno>Set1</anno></c> with boolean function
+ <c><anno>Pred</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="to_list" arity="1"/>
- <fsummary>Convert a <c>Set</c>into a list</fsummary>
+ <name name="fold" arity="3"/>
+ <fsummary>Fold over set elements.</fsummary>
<desc>
- <p>Returns the elements of <c><anno>Set</anno></c> as a list.
- The order of the returned elements is undefined.</p>
+ <p>Folds <c><anno>Function</anno></c> over every element in
+ <c><anno>Set</anno></c> and returns the final value of the
+ accumulator. The evaluation order is undefined.</p>
</desc>
</func>
+
<func>
<name name="from_list" arity="1"/>
- <fsummary>Convert a list into a <c>Set</c></fsummary>
+ <fsummary>Convert a list into a <c>Set</c>.</fsummary>
<desc>
<p>Returns a set of the elements in <c><anno>List</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="is_element" arity="2"/>
- <fsummary>Test for membership of a <c>Set</c></fsummary>
+ <name name="intersection" arity="1"/>
+ <fsummary>Return the intersection of a list of <c>Sets</c>.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Element</anno></c> is an element of
- <c><anno>Set</anno></c>, otherwise <c>false</c>.</p>
+ <p>Returns the intersection of the non-empty list of sets.</p>
</desc>
</func>
+
<func>
- <name name="add_element" arity="2"/>
- <fsummary>Add an element to a <c>Set</c></fsummary>
+ <name name="intersection" arity="2"/>
+ <fsummary>Return the intersection of two <c>Sets</c>.</fsummary>
<desc>
- <p>Returns a new set formed from <c><anno>Set1</anno></c> with
- <c><anno>Element</anno></c> inserted.</p>
+ <p>Returns the intersection of <c><anno>Set1</anno></c> and
+ <c><anno>Set2</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="del_element" arity="2"/>
- <fsummary>Remove an element from a <c>Set</c></fsummary>
+ <name name="is_disjoint" arity="2"/>
+ <fsummary>Check whether two <c>Sets</c> are disjoint.</fsummary>
<desc>
- <p>Returns <c><anno>Set1</anno></c>, but with <c><anno>Element</anno></c> removed.</p>
+ <p>Returns <c>true</c> if <c><anno>Set1</anno></c> and
+ <c><anno>Set2</anno></c> are disjoint (have no elements in common),
+ otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="union" arity="2"/>
- <fsummary>Return the union of two <c>Sets</c></fsummary>
+ <name name="is_element" arity="2"/>
+ <fsummary>Test for membership of a <c>Set</c>.</fsummary>
<desc>
- <p>Returns the merged (union) set of <c><anno>Set1</anno></c> and
- <c><anno>Set2</anno></c>.</p>
+ <p>Returns <c>true</c> if <c><anno>Element</anno></c> is an element of
+ <c><anno>Set</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="union" arity="1"/>
- <fsummary>Return the union of a list of <c>Sets</c></fsummary>
+ <name name="is_set" arity="1"/>
+ <fsummary>Test for a <c>Set</c>.</fsummary>
<desc>
- <p>Returns the merged (union) set of the list of sets.</p>
+ <p>Returns <c>true</c> if <c><anno>Set</anno></c> is a set of
+ elements, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="intersection" arity="2"/>
- <fsummary>Return the intersection of two <c>Sets</c></fsummary>
+ <name name="is_subset" arity="2"/>
+ <fsummary>Test for subset.</fsummary>
<desc>
- <p>Returns the intersection of <c><anno>Set1</anno></c> and
- <c><anno>Set2</anno></c>.</p>
+ <p>Returns <c>true</c> when every element of <c><anno>Set1</anno></c> is
+ also a member of <c><anno>Set2</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
- <name name="intersection" arity="1"/>
- <fsummary>Return the intersection of a list of <c>Sets</c></fsummary>
+ <name name="new" arity="0"/>
+ <fsummary>Return an empty set.</fsummary>
<desc>
- <p>Returns the intersection of the non-empty list of sets.</p>
+ <p>Returns a new empty set.</p>
</desc>
</func>
+
<func>
- <name name="is_disjoint" arity="2"/>
- <fsummary>Check whether two <c>Sets</c> are disjoint</fsummary>
+ <name name="size" arity="1"/>
+ <fsummary>Return the number of elements in a set.</fsummary>
<desc>
- <p>Returns <c>true</c> if <c><anno>Set1</anno></c> and
- <c><anno>Set2</anno></c> are disjoint (have no elements in common),
- and <c>false</c> otherwise.</p>
+ <p>Returns the number of elements in <c><anno>Set</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="subtract" arity="2"/>
- <fsummary>Return the difference of two <c>Sets</c></fsummary>
+ <fsummary>Return the difference of two <c>Sets</c>.</fsummary>
<desc>
- <p>Returns only the elements of <c><anno>Set1</anno></c> which are not
+ <p>Returns only the elements of <c><anno>Set1</anno></c> that are not
also elements of <c><anno>Set2</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="is_subset" arity="2"/>
- <fsummary>Test for subset</fsummary>
+ <name name="to_list" arity="1"/>
+ <fsummary>Convert a <c>Set</c>into a list.</fsummary>
<desc>
- <p>Returns <c>true</c> when every element of <c><anno>Set1</anno></c>1 is
- also a member of <c><anno>Set2</anno></c>, otherwise <c>false</c>.</p>
+ <p>Returns the elements of <c><anno>Set</anno></c> as a list.
+ The order of the returned elements is undefined.</p>
</desc>
</func>
+
<func>
- <name name="fold" arity="3"/>
- <fsummary>Fold over set elements</fsummary>
+ <name name="union" arity="1"/>
+ <fsummary>Return the union of a list of <c>Sets</c>.</fsummary>
<desc>
- <p>Fold <c><anno>Function</anno></c> over every element in <c><anno>Set</anno></c>
- returning the final value of the accumulator.
- The evaluation order is undefined.</p>
+ <p>Returns the merged (union) set of the list of sets.</p>
</desc>
</func>
+
<func>
- <name name="filter" arity="2"/>
- <fsummary>Filter set elements</fsummary>
+ <name name="union" arity="2"/>
+ <fsummary>Return the union of two <c>Sets</c>.</fsummary>
<desc>
- <p>Filter elements in <c><anno>Set1</anno></c> with boolean function
- <c><anno>Pred</anno></c>.</p>
+ <p>Returns the merged (union) set of <c><anno>Set1</anno></c> and
+ <c><anno>Set2</anno></c>.</p>
</desc>
</func>
</funcs>
<section>
<title>See Also</title>
- <p><seealso marker="ordsets">ordsets(3)</seealso>,
- <seealso marker="gb_sets">gb_sets(3)</seealso></p>
+ <p><seealso marker="gb_sets"><c>gb_sets(3)</c></seealso>,
+ <seealso marker="ordsets"><c>ordsets(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/shell.xml b/lib/stdlib/doc/src/shell.xml
index 65c441203c..d6e8036d4e 100644
--- a/lib/stdlib/doc/src/shell.xml
+++ b/lib/stdlib/doc/src/shell.xml
@@ -24,87 +24,96 @@
<title>shell</title>
<prepared>Bjorn Gustavsson</prepared>
- <responsible>Bjarne Dacker</responsible>
+ <responsible>Bjarne D&auml;cker</responsible>
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>97-01-24</date>
+ <date>1997-01-24</date>
<rev>A</rev>
- <file>shell.sgml</file>
+ <file>shell.xml</file>
</header>
<module>shell</module>
- <modulesummary>The Erlang Shell</modulesummary>
+ <modulesummary>The Erlang shell.</modulesummary>
<description>
- <p>The module <c>shell</c> implements an Erlang shell.
- </p>
- <p>The shell is a user interface program
+ <p>This module provides an Erlang shell.</p>
+
+ <p>The shell is a user interface program
for entering expression sequences. The expressions are
- evaluated and a value is returned.
+ evaluated and a value is returned.
A history mechanism saves previous commands and their
values, which can then be incorporated in later commands.
How many commands and results to save can be determined by the user,
- either interactively, by calling <c>shell:history/1</c> and
- <c>shell:results/1</c>, or by setting the application configuration
+ either interactively, by calling
+ <seealso marker="#history/1"><c>history/1</c></seealso> and
+ <seealso marker="#results/1"><c>results/1</c></seealso>,
+ or by setting the application configuration
parameters <c>shell_history_length</c> and
- <c>shell_saved_results</c> for the application STDLIB.
- </p>
- <p>The shell uses a helper process for evaluating commands in
- order to protect the history mechanism from exceptions. By
+ <c>shell_saved_results</c> for the STDLIB application.</p>
+
+ <p>The shell uses a helper process for evaluating commands
+ to protect the history mechanism from exceptions. By
default the evaluator process is killed when an exception
- occurs, but by calling <c>shell:catch_exception/1</c> or by
+ occurs, but by calling <seealso marker="#catch_exception/1">
+ <c>catch_exception/1</c></seealso> or by
setting the application configuration parameter
- <c>shell_catch_exception</c> for the application STDLIB
- this behavior can be changed. See also the example below.
- </p>
+ <c>shell_catch_exception</c> for the STDLIB application
+ this behavior can be changed. See also the example below.</p>
+
<p>Variable bindings, and local process dictionary changes
- which are generated in user expressions are preserved, and the variables
+ that are generated in user expressions are preserved, and the variables
can be used in later commands to access their values. The
- bindings can also be forgotten so the variables can be re-used.
- </p>
+ bindings can also be forgotten so the variables can be reused.</p>
+
<p>The special shell commands all have the syntax of (local)
function calls. They are evaluated as
normal function calls and many commands can be used in one
- expression sequence.
- </p>
+ expression sequence.</p>
+
<p>If a command (local function call) is not recognized by the
- shell, an attempt is first made to find the function in the
+ shell, an attempt is first made to find the function in
module <c>user_default</c>, where customized local commands
- can be placed. If found, then the function is evaluated.
- Otherwise, an attempt is made to evaluate the function in the
- module <c>shell_default</c>. The module
- <c>user_default</c> must be explicitly loaded.
- </p>
+ can be placed. If found, the function is evaluated,
+ otherwise an attempt is made to evaluate the function in
+ module <c>shell_default</c>. Module
+ <c>user_default</c> must be explicitly loaded.</p>
+
<p>The shell also permits the user to start multiple concurrent
- jobs. A job can be regarded as a set of processes which can
- communicate with the shell.
- </p>
+ jobs. A job can be regarded as a set of processes that can
+ communicate with the shell.</p>
+
<p>There is some support for reading and printing records in
the shell. During compilation record expressions are translated
to tuple expressions. In runtime it is not known whether a tuple
- actually represents a record. Nor are the record definitions
- used by compiler available at runtime. So in order to read the
+ represents a record, and the record definitions
+ used by the compiler are unavailable at runtime. So, to read the
record syntax and print tuples as records when possible, record
- definitions have to be maintained by the shell itself. The shell
- commands for reading, defining, forgetting, listing, and
- printing records are described below. Note that each job has its
- own set of record definitions. To facilitate matters record
- definitions in the modules <c>shell_default</c> and
+ definitions must be maintained by the shell itself.</p>
+
+ <p>The shell commands for reading, defining, forgetting, listing, and
+ printing records are described below. Notice that each job has its
+ own set of record definitions. To facilitate matters, record
+ definitions in modules <c>shell_default</c> and
<c>user_default</c> (if loaded) are read each time a new job is
- started. For instance, adding the line</p>
+ started. For example, adding the following line
+ to <c>user_default</c> makes the definition of <c>file_info</c>
+ readily available in the shell:</p>
+
<code type="none">
- -include_lib("kernel/include/file.hrl").</code>
- <p>to <c>user_default</c> makes the definition of <c>file_info</c>
- readily available in the shell.
- </p>
- <p>The shell runs in two modes: </p>
+-include_lib("kernel/include/file.hrl").</code>
+
+ <p>The shell runs in two modes:</p>
+
<list type="bulleted">
- <item><c>Normal (possibly restricted)</c> mode, in which
- commands can be edited and expressions evaluated.
+ <item>
+ <p><c>Normal (possibly restricted)</c> mode, in which
+ commands can be edited and expressions evaluated</p>
</item>
- <item>Job Control Mode <c>JCL</c>, in which jobs can be
- started, killed, detached and connected.
+ <item>
+ <p>Job Control Mode, <c>JCL</c>, in which jobs can be
+ started, killed, detached, and connected</p>
</item>
</list>
+
<p>Only the currently connected job can 'talk' to the shell.</p>
</description>
@@ -117,60 +126,51 @@
</item>
<tag><c>f()</c></tag>
<item>
- <p>Removes all variable bindings.
- </p>
+ <p>Removes all variable bindings.</p>
</item>
<tag><c>f(X)</c></tag>
<item>
- <p>Removes the binding of variable <c>X</c>.
- </p>
+ <p>Removes the binding of variable <c>X</c>.</p>
</item>
<tag><c>h()</c></tag>
<item>
- <p>Prints the history list.
- </p>
+ <p>Prints the history list.</p>
</item>
<tag><c>history(N)</c></tag>
<item>
<p>Sets the number of previous commands to keep in the
history list to <c>N</c>. The previous number is returned.
- The default number is 20.
- </p>
+ Defaults to 20.</p>
</item>
<tag><c>results(N)</c></tag>
<item>
<p>Sets the number of results from previous commands to keep in
the history list to <c>N</c>. The previous number is returned.
- The default number is 20.
- </p>
+ Defaults to 20.</p>
</item>
<tag><c>e(N)</c></tag>
<item>
- <p>Repeats the command <c>N</c>, if <c>N</c> is positive. If
+ <p>Repeats command <c>N</c>, if <c>N</c> is positive. If
it is negative, the <c>N</c>th previous command is repeated
- (i.e., <c>e(-1)</c> repeats the previous command).
- </p>
+ (that is, <c>e(-1)</c> repeats the previous command).</p>
</item>
<tag><c>v(N)</c></tag>
<item>
- <p>Uses the return value of the command <c>N</c> in the
+ <p>Uses the return value of command <c>N</c> in the
current command, if <c>N</c> is positive. If it is negative,
the return value of the <c>N</c>th previous command is used
- (i.e., <c>v(-1)</c> uses the value of the previous command).
- </p>
+ (that is, <c>v(-1)</c> uses the value of the previous command).</p>
</item>
<tag><c>help()</c></tag>
<item>
- <p>Evaluates <c>shell_default:help()</c>.
- </p>
+ <p>Evaluates <c>shell_default:help()</c>.</p>
</item>
<tag><c>c(File)</c></tag>
<item>
<p>Evaluates <c>shell_default:c(File)</c>. This compiles
and loads code in <c>File</c> and purges old versions of
code, if necessary. Assumes that the file and module names
- are the same.
- </p>
+ are the same.</p>
</item>
<tag><c>catch_exception(Bool)</c></tag>
<item>
@@ -179,161 +179,264 @@
(<c>false</c>) is to kill the evaluator process when an
exception occurs, which causes the shell to create a new
evaluator process. When the exception handling is set to
- <c>true</c> the evaluator process lives on which means that
- for instance ports and ETS tables as well as processes
- linked to the evaluator process survive the exception.
- </p>
+ <c>true</c>, the evaluator process lives on. This means,
+ for example, that ports and ETS tables as well as processes
+ linked to the evaluator process survive the exception.</p>
</item>
<tag><c>rd(RecordName, RecordDefinition)</c></tag>
<item>
<p>Defines a record in the shell. <c>RecordName</c> is
an atom and <c>RecordDefinition</c> lists the field names
and the default values. Usually record definitions are made
- known to the shell by use of the <c>rr</c> commands
+ known to the shell by use of the <c>rr/1,2,3</c> commands
described below, but sometimes it is handy to define records
- on the fly.
- </p>
+ on the fly.</p>
</item>
<tag><c>rf()</c></tag>
<item>
<p>Removes all record definitions, then reads record
definitions from the modules <c>shell_default</c> and
<c>user_default</c> (if loaded). Returns the names of the
- records defined.
- </p>
+ records defined.</p>
</item>
<tag><c>rf(RecordNames)</c></tag>
<item>
<p>Removes selected record definitions.
<c>RecordNames</c> is a record name or a list of record names.
- Use <c>'_'</c> to remove all record definitions.
- </p>
+ To remove all record definitions, use <c>'_'</c>.</p>
</item>
<tag><c>rl()</c></tag>
<item>
- <p>Prints all record definitions.
- </p>
+ <p>Prints all record definitions.</p>
</item>
<tag><c>rl(RecordNames)</c></tag>
<item>
<p>Prints selected record definitions.
- <c>RecordNames</c> is a record name or a list of record names.
- </p>
+ <c>RecordNames</c> is a record name or a list of record names.</p>
</item>
<tag><c>rp(Term)</c></tag>
<item>
<p>Prints a term using the record definitions known to the
shell. All of <c>Term</c> is printed; the depth is not
- limited as is the case when a return value is printed.
- </p>
+ limited as is the case when a return value is printed.</p>
</item>
<tag><c>rr(Module)</c></tag>
<item>
<p>Reads record definitions from a module's BEAM file. If
there are no record definitions in the BEAM file, the
source file is located and read instead. Returns the names
- of the record definitions read. <c>Module</c> is an atom.
- </p>
+ of the record definitions read. <c>Module</c> is an atom.</p>
</item>
<tag><c>rr(Wildcard)</c></tag>
<item>
<p>Reads record definitions from files. Existing
definitions of any of the record names read are replaced.
<c>Wildcard</c> is a wildcard string as defined in
- <c>filelib(3)</c> but not an atom.
- </p>
+ <seealso marker="filelib"><c>filelib(3)</c></seealso>,
+ but not an atom.</p>
</item>
<tag><c>rr(WildcardOrModule, RecordNames)</c></tag>
<item>
<p>Reads record definitions from files but
discards record names not mentioned in <c>RecordNames</c> (a
- record name or a list of record names).
- </p>
+ record name or a list of record names).</p>
</item>
<tag><c>rr(WildcardOrModule, RecordNames, Options)</c></tag>
<item>
<p>Reads record definitions from files. The compiler
options <c>{i,&nbsp;Dir}</c>, <c>{d,&nbsp;Macro}</c>, and
<c>{d,&nbsp;Macro,&nbsp;Value}</c> are recognized and used
- for setting up the include path and macro definitions. Use
- <c>'_'</c> as value of <c>RecordNames</c> to read all record
- definitions.
- </p>
+ for setting up the include path and macro definitions.
+ To read all record definitions, use
+ <c>'_'</c> as value of <c>RecordNames</c>.</p>
</item>
</taglist>
</section>
<section>
<title>Example</title>
- <p>The following example is a long dialogue with the shell. Commands
+ <p>The following example is a long dialog with the shell. Commands
starting with <c>></c> are inputs to the shell. All other lines
- are output from the shell. All commands in this example are explained at the end of the dialogue.
- .</p>
+ are output from the shell.</p>
+
<pre>
strider 1> <input>erl</input>
Erlang (BEAM) emulator version 5.3 [hipe] [threads:0]
Eshell V5.3 (abort with ^G)
-1><input>Str = "abcd".</input>
-"abcd"
+1> <input>Str = "abcd".</input>
+"abcd"</pre>
+
+ <p>Command 1 sets variable <c>Str</c> to string <c>"abcd"</c>.</p>
+
+ <pre>
2> <input>L = length(Str).</input>
-4
+4</pre>
+
+ <p>Command 2 sets <c>L</c> to the length of string <c>Str</c>.</p>
+
+ <pre>
3> <input>Descriptor = {L, list_to_atom(Str)}.</input>
-{4,abcd}
+{4,abcd}</pre>
+
+ <p>Command 3 builds the tuple <c>Descriptor</c>, evaluating the BIF
+ <seealso marker="erts:erlang#list_to_atom/1"><c>list_to_atom/1</c>
+ </seealso>.</p>
+
+ <pre>
4> <input>L.</input>
-4
+4</pre>
+
+ <p>Command 4 prints the value of variable <c>L</c>.</p>
+
+ <pre>
5> <input>b().</input>
Descriptor = {4,abcd}
L = 4
Str = "abcd"
-ok
+ok</pre>
+
+ <p>Command 5 evaluates the internal shell command <c>b()</c>, which
+ is an abbreviation of "bindings". This prints
+ the current shell variables and their bindings. <c>ok</c> at
+ the end is the return value of function <c>b()</c>.</p>
+
+ <pre>
6> <input>f(L).</input>
-ok
+ok</pre>
+
+ <p>Command 6 evaluates the internal shell command <c>f(L)</c> (abbreviation
+ of "forget"). The value of variable <c>L</c> is removed.</p>
+
+ <pre>
7> <input>b().</input>
Descriptor = {4,abcd}
Str = "abcd"
-ok
+ok</pre>
+
+ <p>Command 7 prints the new bindings.</p>
+
+ <pre>
8> <input>f(L).</input>
-ok
+ok</pre>
+
+ <p>Command 8 has no effect, as <c>L</c> has no value.</p>
+
+ <pre>
9> <input>{L, _} = Descriptor.</input>
-{4,abcd}
+{4,abcd}</pre>
+
+ <p>Command 9 performs a pattern matching operation on
+ <c>Descriptor</c>, binding a new value to <c>L</c>.</p>
+
+ <pre>
10> <input>L.</input>
-4
+4</pre>
+
+ <p>Command 10 prints the current value of <c>L</c>.</p>
+
+ <pre>
11> <input>{P, Q, R} = Descriptor.</input>
-** exception error: no match of right hand side value {4,abcd}
+** exception error: no match of right hand side value {4,abcd}</pre>
+
+ <p>Command 11 tries to match <c>{P, Q, R}</c> against
+ <c>Descriptor</c>, which is <c>{4, abc}</c>. The match fails and
+ none of the new variables become bound. The printout starting
+ with "<c>** exception error:</c>" is not the value of the
+ expression (the expression had no value because its evaluation
+ failed), but a warning printed by the system to inform
+ the user that an error has occurred. The values of the other
+ variables (<c>L</c>, <c>Str</c>, and so on) are unchanged.</p>
+
+ <pre>
12> <input>P.</input>
-* 1: variable 'P' is unbound **
+* 1: variable 'P' is unbound
13> <input>Descriptor.</input>
-{4,abcd}
+{4,abcd}</pre>
+
+ <p>Commands 12 and 13 show that <c>P</c> is unbound because the
+ previous command failed, and that <c>Descriptor</c> has not
+ changed.</p>
+
+ <pre>
14><input>{P, Q} = Descriptor.</input>
{4,abcd}
15> <input>P.</input>
-4
+4</pre>
+
+ <p>Commands 14 and 15 show a correct match where <c>P</c> and
+ <c>Q</c> are bound.</p>
+
+ <pre>
16> <input>f().</input>
-ok
+ok</pre>
+
+ <p>Command 16 clears all bindings.</p>
+
+ <p>The next few commands assume that <c>test1:demo(X)</c> is
+ defined as follows:</p>
+
+ <p><c>demo(X) -></c><br></br>
+ &nbsp;&nbsp;&nbsp;&nbsp;<c>put(aa, worked),</c><br></br>
+ &nbsp;&nbsp;&nbsp;&nbsp;<c>X = 1,</c><br></br>
+ &nbsp;&nbsp;&nbsp;&nbsp;<c>X + 10.</c></p>
+
+ <pre>
17> <input>put(aa, hello).</input>
undefined
18> <input>get(aa).</input>
-hello
+hello</pre>
+
+ <p>Commands 17 and 18 set and inspect the value of item
+ <c>aa</c> in the process dictionary.</p>
+
+ <pre>
19> <input>Y = test1:demo(1).</input>
-11
+11</pre>
+
+ <p>Command 19 evaluates <c>test1:demo(1)</c>. The evaluation
+ succeeds and the changes made in the process dictionary become
+ visible to the shell. The new value of dictionary item
+ <c>aa</c> can be seen in command 20.</p>
+
+ <pre>
20> <input>get().</input>
[{aa,worked}]
21> <input>put(aa, hello).</input>
worked
22> <input>Z = test1:demo(2).</input>
** exception error: no match of right hand side value 1
- in function test1:demo/1
+ in function test1:demo/1</pre>
+
+ <p>Commands 21 and 22 change the value of dictionary item
+ <c>aa</c> to <c>hello</c> and call <c>test1:demo(2)</c>. Evaluation
+ fails and the changes made to the dictionary in
+ <c>test1:demo(2)</c>, before the error occurred, are discarded.</p>
+
+ <pre>
23> <input>Z.</input>
-* 1: variable 'Z' is unbound **
+* 1: variable 'Z' is unbound
24> <input>get(aa).</input>
-hello
+hello</pre>
+
+ <p>Commands 23 and 24 show that <c>Z</c> was not bound and that
+ dictionary item <c>aa</c> has retained its original value.</p>
+
+ <pre>
25> <input>erase(), put(aa, hello).</input>
undefined
26> <input>spawn(test1, demo, [1]).</input>
&lt;0.57.0>
27> <input>get(aa).</input>
-hello
+hello</pre>
+
+ <p>Commands 25, 26, and 27 show the effect of evaluating
+ <c>test1:demo(1)</c> in the background. In this case, the
+ expression is evaluated in a newly spawned process. Any
+ changes made in the process dictionary are local to the newly
+ spawned process and therefore not visible to the shell.</p>
+
+ <pre>
28> <input>io:format("hello hello\n").</input>
hello hello
ok
@@ -341,31 +444,96 @@ ok
hello hello
ok
30> <input>v(28).</input>
-ok
+ok</pre>
+
+ <p>Commands 28, 29 and 30 use the history facilities of the shell.
+ Command 29 re-evaluates command 28. Command 30 uses the value (result)
+ of command 28. In the cases of a pure function (a function
+ with no side effects), the result is the same. For a function
+ with side effects, the result can be different.</p>
+
+ <p>The next few commands show some record manipulation. It is
+ assumed that <c>ex.erl</c> defines a record as follows:</p>
+
+ <p><c>-record(rec, {a, b = val()}).</c></p>
+ <p><c>val() -></c><br></br>
+ &nbsp;&nbsp;&nbsp;&nbsp;<c>3.</c></p>
+
+ <pre>
31> <input>c(ex).</input>
{ok,ex}
32> <input>rr(ex).</input>
-[rec]
+[rec]</pre>
+
+ <p>Commands 31 and 32 compile file <c>ex.erl</c> and read
+ the record definitions in <c>ex.beam</c>. If the compiler did not
+ output any record definitions on the BEAM file, <c>rr(ex)</c>
+ tries to read record definitions from the source file instead.</p>
+
+ <pre>
33> <input>rl(rec).</input>
-record(rec,{a,b = val()}).
-ok
+ok</pre>
+
+ <p>Command 33 prints the definition of the record named
+ <c>rec</c>.</p>
+
+ <pre>
34> <input>#rec{}.</input>
-** exception error: undefined shell command val/0
+** exception error: undefined shell command val/0</pre>
+
+ <p>Command 34 tries to create a <c>rec</c> record, but fails
+ as function <c>val/0</c> is undefined.</p>
+
+ <pre>
35> <input>#rec{b = 3}.</input>
-#rec{a = undefined,b = 3}
+#rec{a = undefined,b = 3}</pre>
+
+ <p>Command 35 shows the workaround: explicitly assign values to record
+ fields that cannot otherwise be initialized.</p>
+
+ <pre>
36> <input>rp(v(-1)).</input>
#rec{a = undefined,b = 3}
-ok
+ok</pre>
+
+ <p>Command 36 prints the newly created record using record
+ definitions maintained by the shell.</p>
+
+ <pre>
37> <input>rd(rec, {f = orddict:new()}).</input>
-rec
+rec</pre>
+
+ <p>Command 37 defines a record directly in the shell. The
+ definition replaces the one read from file <c>ex.beam</c>.</p>
+
+ <pre>
38> <input>#rec{}.</input>
#rec{f = []}
-ok
+ok</pre>
+
+ <p>Command 38 creates a record using the new definition, and
+ prints the result.</p>
+
+ <pre>
39> <input>rd(rec, {c}), A.</input>
-* 1: variable 'A' is unbound **
+* 1: variable 'A' is unbound
40> <input>#rec{}.</input>
#rec{c = undefined}
-ok
+ok</pre>
+
+ <p>Command 39 and 40 show that record definitions are updated
+ as side effects. The evaluation of the command fails, but
+ the definition of <c>rec</c> has been carried out.</p>
+
+ <p>For the next command, it is assumed that <c>test1:loop(N)</c> is
+ defined as follows:</p>
+
+ <p><c>loop(N) -></c><br></br>
+ &nbsp;&nbsp;&nbsp;&nbsp;<c>io:format("Hello Number: ~w~n", [N]),</c><br></br>
+ &nbsp;&nbsp;&nbsp;&nbsp;<c>loop(N+1).</c></p>
+
+ <pre>
41> <input>test1:loop(0).</input>
Hello Number: 0
Hello Number: 1
@@ -383,225 +551,122 @@ Hello Number: 3375
Hello Number: 3376
Hello Number: 3377
Hello Number: 3378
-** exception exit: killed
+** exception exit: killed</pre>
+
+ <p>Command 41 evaluates <c>test1:loop(0)</c>, which puts the
+ system into an infinite loop. At this point the user types
+ <c>^G</c> (Control G), which suspends output from the
+ current process,
+ which is stuck in a loop, and activates <c>JCL</c> mode. In <c>JCL</c>
+ mode the user can start and stop jobs.</p>
+
+ <p>In this particular case, command <c>i</c> ("interrupt")
+ terminates the looping program, and command <c>c</c>
+ connects to the shell again. As the process was
+ running in the background before we killed it, more
+ printouts occur before message "<c>** exception exit: killed</c>"
+ is shown.</p>
+
+ <pre>
42> <input>E = ets:new(t, []).</input>
-17
+17</pre>
+
+ <p>Command 42 creates an ETS table.</p>
+
+ <pre>
43> <input>ets:insert({d,1,2}).</input>
-** exception error: undefined function ets:insert/1
+** exception error: undefined function ets:insert/1</pre>
+
+ <p>Command 43 tries to insert a tuple into the ETS table, but the
+ first argument (the table) is missing. The exception kills the
+ evaluator process.</p>
+
+ <pre>
44> <input>ets:insert(E, {d,1,2}).</input>
** exception error: argument is of wrong type
in function ets:insert/2
- called as ets:insert(16,{d,1,2})
+ called as ets:insert(16,{d,1,2})</pre>
+
+ <p>Command 44 corrects the mistake, but the ETS table has been
+ destroyed as it was owned by the killed evaluator process.</p>
+
+ <pre>
45> <input>f(E).</input>
ok
46> <input>catch_exception(true).</input>
-false
+false</pre>
+
+ <p>Command 46 sets the exception handling of the evaluator process
+ to <c>true</c>. The exception handling can also be set when
+ starting Erlang by <c>erl -stdlib shell_catch_exception true</c>.</p>
+
+ <pre>
47> <input>E = ets:new(t, []).</input>
18
48> <input>ets:insert({d,1,2}).</input>
-* exception error: undefined function ets:insert/1
-49> <input>ets:insert(E, {d,1,2}).</input>
-true
-50> <input>halt().</input>
-strider 2></pre>
- </section>
+* exception error: undefined function ets:insert/1</pre>
- <section>
- <title>Comments</title>
- <p>Command 1 sets the variable <c>Str</c> to the string
- <c>"abcd"</c>.
- </p>
- <p>Command 2 sets <c>L</c> to the length of the string evaluating
- the BIF <c>atom_to_list</c>.
- </p>
- <p>Command 3 builds the tuple <c>Descriptor</c>.
- </p>
- <p>Command 4 prints the value of the variable <c>L</c>.
- </p>
- <p>Command 5 evaluates the internal shell command <c>b()</c>, which
- is an abbreviation of "bindings". This prints
- the current shell variables and their bindings. The <c>ok</c> at
- the end is the return value of the <c>b()</c> function.
- </p>
- <p>Command 6 <c>f(L)</c> evaluates the internal shell command
- <c>f(L)</c> (abbreviation of "forget"). The value of the variable
- <c>L</c> is removed.
- </p>
- <p>Command 7 prints the new bindings.
- </p>
- <p>Command 8 has no effect since <c>L</c> has no value.</p>
- <p>Command 9 performs a pattern matching operation on
- <c>Descriptor</c>, binding a new value to <c>L</c>.
- </p>
- <p>Command 10 prints the current value of <c>L</c>.
- </p>
- <p>Command 11 tries to match <c>{P, Q, R}</c> against
- <c>Descriptor</c> which is <c>{4, abc}</c>. The match fails and
- none of the new variables become bound. The printout starting
- with "<c>** exception error:</c>" is not the value of the
- expression (the expression had no value because its evaluation
- failed), but rather a warning printed by the system to inform
- the user that an error has occurred. The values of the other
- variables (<c>L</c>, <c>Str</c>, etc.) are unchanged.
- </p>
- <p>Commands 12 and 13 show that <c>P</c> is unbound because the
- previous command failed, and that <c>Descriptor</c> has not
- changed.
- </p>
- <p>Commands 14 and 15 show a correct match where <c>P</c> and
- <c>Q</c> are bound.
- </p>
- <p>Command 16 clears all bindings.
- </p>
- <p>The next few commands assume that <c>test1:demo(X)</c> is
- defined in the following way:</p>
- <pre>
-demo(X) ->
- put(aa, worked),
- X = 1,
- X + 10. </pre>
- <p>Commands 17 and 18 set and inspect the value of the item
- <c>aa</c> in the process dictionary.
- </p>
- <p>Command 19 evaluates <c>test1:demo(1)</c>. The evaluation
- succeeds and the changes made in the process dictionary become
- visible to the shell. The new value of the dictionary item
- <c>aa</c> can be seen in command 20.
- </p>
- <p>Commands 21 and 22 change the value of the dictionary item
- <c>aa</c> to <c>hello</c> and call <c>test1:demo(2)</c>. Evaluation
- fails and the changes made to the dictionary in
- <c>test1:demo(2)</c>, before the error occurred, are discarded.
- </p>
- <p>Commands 23 and 24 show that <c>Z</c> was not bound and that the
- dictionary item <c>aa</c> has retained its original value.
- </p>
- <p>Commands 25, 26 and 27 show the effect of evaluating
- <c>test1:demo(1)</c> in the background. In this case, the
- expression is evaluated in a newly spawned process. Any
- changes made in the process dictionary are local to the newly
- spawned process and therefore not visible to the shell.
- </p>
- <p>Commands 28, 29 and 30 use the history facilities of the shell.
- </p>
- <p>Command 29 is <c>e(28)</c>. This re-evaluates command
- 28. Command 30 is <c>v(28)</c>. This uses the value (result) of
- command 28. In the cases of a pure function (a function
- with no side effects), the result is the same. For a function
- with side effects, the result can be different.
- </p>
- <p>The next few commands show some record manipulation. It is
- assumed that <c>ex.erl</c> defines a record like this:</p>
- <pre>
--record(rec, {a, b = val()}).
-
-val() ->
- 3. </pre>
- <p>Commands 31 and 32 compiles the file <c>ex.erl</c> and reads
- the record definitions in <c>ex.beam</c>. If the compiler did not
- output any record definitions on the BEAM file, <c>rr(ex)</c>
- tries to read record definitions from the source file instead.
- </p>
- <p>Command 33 prints the definition of the record named
- <c>rec</c>.
- </p>
- <p>Command 34 tries to create a <c>rec</c> record, but fails
- since the function <c>val/0</c> is undefined. Command 35 shows
- the workaround: explicitly assign values to record fields that
- cannot otherwise be initialized.
- </p>
- <p>Command 36 prints the newly created record using record
- definitions maintained by the shell.
- </p>
- <p>Command 37 defines a record directly in the shell. The
- definition replaces the one read from the file <c>ex.beam</c>.
- </p>
- <p>Command 38 creates a record using the new definition, and
- prints the result.
- </p>
- <p>Command 39 and 40 show that record definitions are updated
- as side effects. The evaluation of the command fails but
- the definition of <c>rec</c> has been carried out.
- </p>
- <p>For the next command, it is assumed that <c>test1:loop(N)</c> is
- defined in the following way:</p>
- <pre>
-loop(N) ->
- io:format("Hello Number: ~w~n", [N]),
- loop(N+1).</pre>
- <p>Command 41 evaluates <c>test1:loop(0)</c>, which puts the
- system into an infinite loop. At this point the user types
- <c>Control G</c>, which suspends output from the current process,
- which is stuck in a loop, and activates <c>JCL</c> mode. In <c>JCL</c>
- mode the user can start and stop jobs.
- </p>
- <p>In this particular case, the <c>i</c> command ("interrupt") is
- used to terminate the looping program, and the <c>c</c> command
- is used to connect to the shell again. Since the process was
- running in the background before we killed it, there will be
- more printouts before the "<c>** exception exit: killed</c>"
- message is shown.
- </p>
- <p>Command 42 creates an ETS table.</p>
- <p>Command 43 tries to insert a tuple into the ETS table but the
- first argument (the table) is missing. The exception kills the
- evaluator process.</p>
- <p>Command 44 corrects the mistake, but the ETS table has been
- destroyed since it was owned by the killed evaluator process.</p>
- <p>Command 46 sets the exception handling of the evaluator process
- to <c>true</c>. The exception handling can also be set when
- starting Erlang, like this: <c>erl -stdlib shell_catch_exception
- true</c>.</p>
<p>Command 48 makes the same mistake as in command 43, but this time
the evaluator process lives on. The single star at the beginning
of the printout signals that the exception has been caught.</p>
+
+ <pre>
+49> <input>ets:insert(E, {d,1,2}).</input>
+true</pre>
+
<p>Command 49 successfully inserts the tuple into the ETS table.</p>
- <p>The <c>halt()</c> command exits the Erlang runtime system.
- </p>
+
+ <pre>
+50> <input>halt().</input>
+strider 2></pre>
+
+ <p>Command 50 exits the Erlang runtime system.</p>
</section>
<section>
<title>JCL Mode</title>
<p>When the shell starts, it starts a single evaluator
- process. This process, together with any local processes which
+ process. This process, together with any local processes that
it spawns, is referred to as a <c>job</c>. Only the current job,
which is said to be <c>connected</c>, can perform operations
- with standard IO. All other jobs, which are said to be <c>detached</c>, are
- <c>blocked</c> if they attempt to use standard IO.
- </p>
- <p>All jobs which do not use standard IO run in the normal way.
- </p>
- <p>The shell escape key <em><c>^G</c></em> (Control G) detaches the current job
- and activates <c>JCL</c> mode. The <c>JCL</c> mode prompt is <c>"-->"</c>. If <c>"?"</c> is entered at the prompt, the following help message is
- displayed:</p>
- <pre>
- --> ?
- c [nn] - connect to job
- i [nn] - interrupt job
- k [nn] - kill job
- j - list all jobs
- s [shell] - start local shell
- r [node [shell]] - start remote shell
- q - quit erlang
- ? | h - this message </pre>
+ with standard I/O. All other jobs, which are said to be <c>detached</c>,
+ are <c>blocked</c> if they attempt to use standard I/O.</p>
+
+ <p>All jobs that do not use standard I/O run in the normal way.</p>
+
+ <p>The shell escape key <c>^G</c> (Control G) detaches the current
+ job and activates <c>JCL</c> mode. The <c>JCL</c> mode prompt is
+ <c>"-->"</c>. If <c>"?"</c> is entered at the prompt, the following help
+ message is displayed:</p>
+
+ <pre>
+--> ?
+c [nn] - connect to job
+i [nn] - interrupt job
+k [nn] - kill job
+j - list all jobs
+s [shell] - start local shell
+r [node [shell]] - start remote shell
+q - quit erlang
+? | h - this message</pre>
+
<p>The <c>JCL</c> commands have the following meaning:</p>
+
<taglist>
<tag><c>c [nn]</c></tag>
<item>
<p>Connects to job number <c><![CDATA[<nn>]]></c> or the current
- job. The standard shell is resumed. Operations which use
- standard IO by the current job will be interleaved with
- user inputs to the shell.
- </p>
+ job. The standard shell is resumed. Operations that use
+ standard I/O by the current job are interleaved with
+ user inputs to the shell.</p>
</item>
<tag><c>i [nn]</c></tag>
<item>
<p>Stops the current evaluator process for job number
<c>nn</c> or the current job, but does not kill the shell
- process. Accordingly, any variable bindings and the process dictionary
- will be preserved and the job can be connected again.
- This command can be used to interrupt an endless loop.
- </p>
+ process. So, any variable bindings and the process
+ dictionary are preserved and the job can be connected again.
+ This command can be used to interrupt an endless loop.</p>
</item>
<tag><c>k [nn]</c></tag>
<item>
@@ -609,135 +674,166 @@ loop(N) ->
job. All spawned processes in the job are
killed, provided they have not evaluated the
<c>group_leader/1</c> BIF and are located on
- the local machine. Processes spawned on remote nodes will
- not be killed.
- </p>
+ the local machine. Processes spawned on remote nodes
+ are not killed.</p>
</item>
<tag><c>j</c></tag>
<item>
<p>Lists all jobs. A list of all known jobs is
- printed. The current job name is prefixed with '*'.
- </p>
+ printed. The current job name is prefixed with '*'.</p>
</item>
<tag><c>s</c></tag>
<item>
- <p>Starts a new job. This will be assigned the new index
- <c>[nn]</c> which can be used in references.
- </p>
+ <p>Starts a new job. This is assigned the new index
+ <c>[nn]</c>, which can be used in references.</p>
</item>
<tag><c>s [shell]</c></tag>
<item>
- <p>Starts a new job. This will be assigned the new index
- <c>[nn]</c> which can be used in references.
- If the optional argument <c>shell</c> is given, it is assumed
- to be a module that implements an alternative shell.
- </p>
+ <p>Starts a new job. This is assigned the new index
+ <c>[nn]</c>, which can be used in references.
+ If optional argument <c>shell</c> is specified, it is assumed
+ to be a module that implements an alternative shell.</p>
</item>
<tag><c>r [node]</c></tag>
<item>
<p>Starts a remote job on <c>node</c>. This is used in
distributed Erlang to allow a shell running on one node to
- control a number of applications running on a network of
- nodes.
- If the optional argument <c>shell</c> is given, it is assumed
- to be a module that implements an alternative shell.
- </p>
+ control a number of applications running on a network of nodes.
+ If optional argument <c>shell</c> is specified, it is assumed
+ to be a module that implements an alternative shell.</p>
</item>
<tag><c>q</c></tag>
<item>
- <p>Quits Erlang. Note that this option is disabled if
- Erlang is started with the ignore break, <c>+Bi</c>,
- system flag (which may be useful e.g. when running
- a restricted shell, see below).
- </p>
+ <p>Quits Erlang. Notice that this option is disabled if
+ Erlang is started with the ignore break, <c>+Bi</c>,
+ system flag (which can be useful, for example when running
+ a restricted shell, see the next section).</p>
</item>
<tag><c>?</c></tag>
<item>
- <p>Displays this message.</p>
+ <p>Displays the help message above.</p>
</item>
</taglist>
- <p>It is possible to alter the behavior of shell escape by means
- of the STDLIB application variable <c>shell_esc</c>. The value of
+
+ <p>The behavior of shell escape can be changed by the STDLIB
+ application variable <c>shell_esc</c>. The value of
the variable can be either <c>jcl</c> (<c>erl -stdlib shell_esc jcl</c>)
or <c>abort</c> (<c>erl -stdlib shell_esc abort</c>). The
- first option sets ^G to activate <c>JCL</c> mode (which is also
- default behavior). The latter sets ^G to terminate the current
- shell and start a new one. <c>JCL</c> mode cannot be invoked when
- <c>shell_esc</c> is set to <c>abort</c>. </p>
- <p>If you want an Erlang node to have a remote job active from the start
- (rather than the default local job), you start Erlang with the
- <c>-remsh</c> flag. Example: <c>erl -sname this_node -remsh other_node@other_host</c></p>
+ first option sets <c>^G</c> to activate <c>JCL</c> mode (which
+ is also default behavior). The latter sets <c>^G</c> to
+ terminate the current shell and start a new one.
+ <c>JCL</c> mode cannot be invoked when
+ <c>shell_esc</c> is set to <c>abort</c>.</p>
+
+ <p>If you want an Erlang node to have a remote job active from the start
+ (rather than the default local job), start Erlang with flag
+ <c>-remsh</c>, for example,
+ <c>erl -sname this_node -remsh other_node@other_host</c></p>
</section>
<section>
<title>Restricted Shell</title>
- <p>The shell may be started in a
+ <p>The shell can be started in a
restricted mode. In this mode, the shell evaluates a function call
only if allowed. This feature makes it possible to, for example,
prevent a user from accidentally calling a function from the
prompt that could harm a running system (useful in combination
- with the the system flag <em><c>+Bi</c></em>).</p>
+ with system flag <c>+Bi</c>).</p>
+
<p>When the restricted shell evaluates an expression and
- encounters a function call or an operator application,
+ encounters a function call or an operator application,
it calls a callback function (with
information about the function call in question). This callback
function returns <c>true</c> to let the shell go ahead with the
evaluation, or <c>false</c> to abort it. There are two possible
callback functions for the user to implement:</p>
- <p><em><c>local_allowed(Func, ArgList, State) -> {true,NewState} | {false,NewState}</c></em></p>
- <p>to determine if the call to the local function <c>Func</c>
- with arguments <c>ArgList</c> should be allowed.</p>
- <p><em><c>non_local_allowed(FuncSpec, ArgList, State) -> {true,NewState} | {false,NewState} | {{redirect,NewFuncSpec,NewArgList},NewState}</c></em></p>
- <p>to determine if the call to non-local function
- <c>FuncSpec</c> (<c>{Module,Func}</c> or a fun) with arguments
- <c>ArgList</c> should be allowed. The return value
- <c>{redirect,NewFuncSpec,NewArgList}</c> can be used to let
- the shell evaluate some other function than the one specified by
- <c>FuncSpec</c> and <c>ArgList</c>.</p>
- <p>These callback functions are in fact called from local and
+
+ <list type="bulleted">
+ <item>
+ <p><c>local_allowed(Func, ArgList, State) -> {boolean(),NewState}</c></p>
+ <p>This is used to determine if the call to the local function
+ <c>Func</c> with arguments <c>ArgList</c> is to be allowed.</p>
+ </item>
+ <item>
+ <p><c>non_local_allowed(FuncSpec, ArgList, State)
+ -> {boolean(),NewState}
+ | {{redirect,NewFuncSpec,NewArgList},NewState}</c></p>
+ <p>This is used to determine if the call to non-local function
+ <c>FuncSpec</c> (<c>{Module,Func}</c> or a fun) with arguments
+ <c>ArgList</c> is to be allowed. The return value
+ <c>{redirect,NewFuncSpec,NewArgList}</c> can be used to let
+ the shell evaluate some other function than the one specified by
+ <c>FuncSpec</c> and <c>ArgList</c>.</p>
+ </item>
+ </list>
+
+ <p>These callback functions are called from local and
non-local evaluation function handlers, described in the
- <seealso marker="erl_eval">erl_eval</seealso>
+ <seealso marker="erl_eval"><c>erl_eval</c></seealso>
manual page. (Arguments in <c>ArgList</c> are evaluated before the
callback functions are called.)</p>
- <p>The <c>State</c> argument is a tuple
+
+ <p>Argument <c>State</c> is a tuple
<c>{ShellState,ExprState}</c>. The return value <c>NewState</c>
- has the same form. This may be used to carry a state between calls
+ has the same form. This can be used to carry a state between calls
to the callback functions. Data saved in <c>ShellState</c> lives
through an entire shell session. Data saved in <c>ExprState</c>
lives only through the evaluation of the current expression.</p>
+
<p>There are two ways to start a restricted shell session:</p>
+
<list type="bulleted">
- <item>Use the STDLIB application variable <c>restricted_shell</c>
- and specify, as its value, the name of the callback
- module. Example (with callback functions implemented in
- callback_mod.erl): <c>$ erl -stdlib restricted_shell callback_mod</c></item>
- <item>From a normal shell session, call function
- <c>shell:start_restricted/1</c>. This exits the current evaluator
- and starts a new one in restricted mode.</item>
+ <item>
+ <p>Use STDLIB application variable <c>restricted_shell</c>
+ and specify, as its value, the name of the callback
+ module. Example (with callback functions implemented in
+ <c>callback_mod.erl</c>):
+ <c>$ erl -stdlib restricted_shell callback_mod</c>.</p>
+ </item>
+ <item>
+ <p>From a normal shell session, call function
+ <seealso marker="#start_restricted/1">
+ <c>start_restricted/1</c></seealso>. This exits the current evaluator
+ and starts a new one in restricted mode.</p>
+ </item>
</list>
+
<p><em>Notes:</em></p>
<list type="bulleted">
- <item>When restricted shell mode is activated or
- deactivated, new jobs started on the node will run in restricted
- or normal mode respectively.</item>
- <item>If restricted mode has been enabled on a
- particular node, remote shells connecting to this node will also
- run in restricted mode.</item>
- <item>The callback functions cannot be used to allow or disallow
- execution of functions called from compiled code (only functions
- called from expressions entered at the shell prompt).</item>
+ <item>
+ <p>When restricted shell mode is activated or
+ deactivated, new jobs started on the node run in restricted
+ or normal mode, respectively.</p>
+ </item>
+ <item>
+ <p>If restricted mode has been enabled on a
+ particular node, remote shells connecting to this node also
+ run in restricted mode.</p>
+ </item>
+ <item>
+ <p>The callback functions cannot be used to allow or disallow
+ execution of functions called from compiled code (only functions
+ called from expressions entered at the shell prompt).</p>
+ </item>
</list>
+
<p>Errors when loading the callback module is handled in different
ways depending on how the restricted shell is activated:</p>
+
<list type="bulleted">
- <item>If the restricted shell is activated by setting the kernel
- variable during emulator startup and the callback module cannot be
- loaded, a default restricted shell allowing only the commands
- <c>q()</c> and <c>init:stop()</c> is used as fallback.</item>
- <item>If the restricted shell is activated using
- <c>shell:start_restricted/1</c> and the callback module cannot be
- loaded, an error report is sent to the error logger and the call
- returns <c>{error,Reason}</c>.</item>
+ <item>
+ <p>If the restricted shell is activated by setting the STDLIB
+ variable during emulator startup, and the callback module cannot be
+ loaded, a default restricted shell allowing only the commands
+ <c>q()</c> and <c>init:stop()</c> is used as fallback.</p>
+ </item>
+ <item>
+ <p>If the restricted shell is activated using
+ <seealso marker="#start_restricted/1">
+ <c>start_restricted/1</c></seealso> and the callback module cannot
+ be loaded, an error report is sent to the error logger and the call
+ returns <c>{error,Reason}</c>.</p>
+ </item>
</list>
</section>
@@ -746,44 +842,27 @@ loop(N) ->
<p>The default shell prompt function displays the name of the node
(if the node can be part of a distributed system) and the
current command number. The user can customize the prompt
- function by calling
- <c>shell:prompt_func/1</c> or by setting the application
+ function by calling <seealso marker="#prompt_func/1">
+ <c>prompt_func/1</c></seealso> or by setting application
configuration parameter <c>shell_prompt_func</c> for the
- application STDLIB.</p>
+ STDLIB application.</p>
+
<p>A customized prompt function is stated as a tuple
<c>{Mod,&nbsp;Func}</c>. The function is called as
<c>Mod:Func(L)</c>, where <c>L</c> is a list of key-value pairs
created by the shell. Currently there is only one pair:
- <c>{history, N}</c>, where N is the current command number. The
- function should return a list of characters or an atom. This
- constraint is due to the Erlang I/O-protocol. Unicode characters
- beyond codepoint 255 are allowed in the list. Note
+ <c>{history, N}</c>, where <c>N</c> is the current command number. The
+ function is to return a list of characters or an atom. This
+ constraint is because of the Erlang I/O protocol. Unicode characters
+ beyond code point 255 are allowed in the list. Notice
that in restricted mode the call <c>Mod:Func(L)</c> must be
- allowed or the default shell prompt function will be called.</p>
- </section>
+ allowed or the default shell prompt function is called.</p>
+ </section>
<funcs>
<func>
- <name name="history" arity="1"/>
- <fsummary>Sets the number of previous commands to keep</fsummary>
- <desc>
- <p>Sets the number of previous commands to keep in the
- history list to <c><anno>N</anno></c>. The previous number is returned.
- The default number is 20.</p>
- </desc>
- </func>
- <func>
- <name name="results" arity="1"/>
- <fsummary>Sets the number of previous results to keep</fsummary>
- <desc>
- <p>Sets the number of results from previous commands to keep in
- the history list to <c><anno>N</anno></c>. The previous number is returned.
- The default number is 20.</p>
- </desc>
- </func>
- <func>
<name>catch_exception(Bool) -> boolean()</name>
- <fsummary>Sets the exception handling of the shell</fsummary>
+ <fsummary>Set the exception handling of the shell.</fsummary>
<type>
<v>Bool = boolean()</v>
</type>
@@ -793,52 +872,76 @@ loop(N) ->
(<c>false</c>) is to kill the evaluator process when an
exception occurs, which causes the shell to create a new
evaluator process. When the exception handling is set to
- <c>true</c> the evaluator process lives on which means that
- for instance ports and ETS tables as well as processes
+ <c>true</c>, the evaluator process lives on, which means that,
+ for example, ports and ETS tables as well as processes
linked to the evaluator process survive the exception.</p>
</desc>
</func>
+
+ <func>
+ <name name="history" arity="1"/>
+ <fsummary>Set the number of previous commands to keep.</fsummary>
+ <desc>
+ <p>Sets the number of previous commands to keep in the
+ history list to <c><anno>N</anno></c>. The previous number is
+ returned. Defaults to 20.</p>
+ </desc>
+ </func>
+
<func>
<name name="prompt_func" arity="1"/>
- <fsummary>Sets the shell prompt</fsummary>
+ <fsummary>Set the shell prompt.</fsummary>
<desc>
<p>Sets the shell prompt function to <c><anno>PromptFunc</anno></c>.
The previous prompt function is returned.</p>
</desc>
</func>
+
+ <func>
+ <name name="results" arity="1"/>
+ <fsummary>Set the number of previous results to keep.</fsummary>
+ <desc>
+ <p>Sets the number of results from previous commands to keep in
+ the history list to <c><anno>N</anno></c>. The previous number is
+ returned. Defaults to 20.</p>
+ </desc>
+ </func>
+
<func>
<name name="start_restricted" arity="1"/>
- <fsummary>Exits a normal shell and starts a restricted shell.</fsummary>
+ <fsummary>Exit a normal shell and starts a restricted shell.</fsummary>
<desc>
- <p>Exits a normal shell and starts a restricted
- shell. <c><anno>Module</anno></c> specifies the callback module for the
+ <p>Exits a normal shell and starts a restricted shell.
+ <c><anno>Module</anno></c> specifies the callback module for the
functions <c>local_allowed/3</c> and <c>non_local_allowed/3</c>.
The function is meant to be called from the shell.</p>
<p>If the callback module cannot be loaded, an error tuple is
returned. The <c><anno>Reason</anno></c> in the error tuple is the one
- returned by the code loader when trying to load the code of the callback
- module.</p>
+ returned by the code loader when trying to load the code of the
+ callback module.</p>
</desc>
</func>
+
<func>
<name name="stop_restricted" arity="0"/>
- <fsummary>Exits a restricted shell and starts a normal shell.</fsummary>
+ <fsummary>Exit a restricted shell and starts a normal shell.</fsummary>
<desc>
<p>Exits a restricted shell and starts a normal shell. The function
is meant to be called from the shell.</p>
</desc>
</func>
+
<func>
<name name="strings" arity="1"/>
- <fsummary>Sets the shell's string recognition flag.</fsummary>
+ <fsummary>Set the shell's string recognition flag.</fsummary>
<desc>
<p>Sets pretty printing of lists to <c><anno>Strings</anno></c>.
The previous value of the flag is returned.</p>
<p>The flag can also be set by the STDLIB application variable
- <c>shell_strings</c>. The default is
- <c>true</c> which means that lists of integers will be
- printed using the string syntax, when possible. The value
- <c>false</c> means that no lists will be printed using the
+ <c>shell_strings</c>. Defaults to
+ <c>true</c>, which means that lists of integers are
+ printed using the string syntax, when possible. Value
+ <c>false</c> means that no lists are printed using the
string syntax.</p>
</desc>
</func>
diff --git a/lib/stdlib/doc/src/shell_default.xml b/lib/stdlib/doc/src/shell_default.xml
index 4a90b7d7cc..81c99bce10 100644
--- a/lib/stdlib/doc/src/shell_default.xml
+++ b/lib/stdlib/doc/src/shell_default.xml
@@ -32,25 +32,27 @@
<checked>Joe Armstrong</checked>
<date>1996-09-09</date>
<rev>A</rev>
- <file>shell_default.sgml</file>
+ <file>shell_default.xml</file>
</header>
<module>shell_default</module>
- <modulesummary>Customizing the Erlang Environment</modulesummary>
+ <modulesummary>Customizing the Erlang environment.</modulesummary>
<description>
- <p>The functions in <c>shell_default</c> are called when no module
- name is given in a shell command.
- </p>
- <p>Consider the following shell dialogue:</p>
+ <p>The functions in this module are called when no module name is
+ specified in a shell command.</p>
+
+ <p>Consider the following shell dialog:</p>
+
<pre>
-1 > <input>lists:reverse("abc").</input>
+1> <input>lists:reverse("abc").</input>
"cba"
-2 > <input>c(foo).</input>
-{ok, foo} </pre>
- <p>In command one, the module <c>lists</c> is called. In command
- two, no module name is specified. The shell searches the modules
- <c>user_default</c> followed by <c>shell_default</c> for the
- function <c>foo/1</c>.
- </p>
+2> <input>c(foo).</input>
+{ok, foo}</pre>
+
+ <p>In command one, module <seealso marker="lists"><c>lists</c></seealso> is
+ called. In command two, no module name is specified. The shell searches
+ module <c>user_default</c> followed by module <c>shell_default</c> for
+ function <c>foo/1</c>.</p>
+
<p><c>shell_default</c> is intended for "system wide"
customizations to the shell. <c>user_default</c> is intended for
"local" or individual user customizations.</p>
@@ -60,10 +62,12 @@
<title>Hint</title>
<p>To add your own commands to the shell, create a module called
<c>user_default</c> and add the commands you want. Then add the
- following line as the <em>first</em> line in your <c>.erlang</c> file in your
- home directory. </p>
+ following line as the <em>first</em> line in your <c>.erlang</c> file in
+ your home directory.</p>
+
<pre>
-code:load_abs("$PATH/user_default"). </pre>
+code:load_abs("$PATH/user_default").</pre>
+
<p><c>$PATH</c> is the directory where your
<c>user_default</c> module can be found.</p>
</section>
diff --git a/lib/stdlib/doc/src/slave.xml b/lib/stdlib/doc/src/slave.xml
index 244822568b..e53ec8231b 100644
--- a/lib/stdlib/doc/src/slave.xml
+++ b/lib/stdlib/doc/src/slave.xml
@@ -29,89 +29,139 @@
<rev></rev>
</header>
<module>slave</module>
- <modulesummary>Functions to Starting and Controlling Slave Nodes</modulesummary>
+ <modulesummary>Functions for starting and controlling slave nodes.
+ </modulesummary>
<description>
<p>This module provides functions for starting Erlang slave nodes.
- All slave nodes which are started by a master will terminate
- automatically when the master terminates. All TTY output produced
- at the slave will be sent back to the master node. File I/O is
- done via the master.</p>
+ All slave nodes that are started by a master terminate
+ automatically when the master terminates. All terminal output produced
+ at the slave is sent back to the master node. File I/O is
+ done through the master.</p>
+
<p>Slave nodes on other hosts than the current one are started with
- the program <c>rsh</c>. The user must be allowed to <c>rsh</c> to
+ the <c>rsh</c> program. The user must be allowed to <c>rsh</c> to
the remote hosts without being prompted for a password. This can
- be arranged in a number of ways (refer to the <c>rsh</c>
- documentation for details). A slave node started on the same host
+ be arranged in a number of ways (for details, see the <c>rsh</c>
+ documentation). A slave node started on the same host
as the master inherits certain environment values from the master,
such as the current directory and the environment variables. For
what can be assumed about the environment when a slave is started
- on another host, read the documentation for the <c>rsh</c>
+ on another host, see the documentation for the <c>rsh</c>
program.</p>
+
<p>An alternative to the <c>rsh</c> program can be specified on
- the command line to <c>erl</c> as follows: <c>-rsh Program</c>.</p>
- <p>The slave node should use the same file system at the master. At
- least, Erlang/OTP should be installed in the same place on both
- computers and the same version of Erlang should be used.</p>
- <p>Currently, a node running on Windows NT can only start slave
+ the command line to
+ <seealso marker="erts:erl#erl"><c>erl(1)</c></seealso> as follows:</p>
+
+ <pre>
+-rsh Program</pre>
+
+ <p>The slave node is to use the same file system at the master. At
+ least, Erlang/OTP is to be installed in the same place on both
+ computers and the same version of Erlang is to be used.</p>
+
+ <p>A node running on Windows can only start slave
nodes on the host on which it is running.</p>
+
<p>The master node must be alive.</p>
</description>
+
<funcs>
<func>
+ <name>pseudo([Master | ServerList]) -> ok</name>
+ <fsummary>Start a number of pseudo servers.</fsummary>
+ <type>
+ <v>Master = node()</v>
+ <v>ServerList = [atom()]</v>
+ </type>
+ <desc>
+ <p>Calls <c>pseudo(Master, ServerList)</c>. If you want to start
+ a node from the command line and set up a number of pseudo
+ servers, an Erlang runtime system can be started as follows:</p>
+ <pre>
+% erl -name abc -s slave pseudo klacke@super x --</pre>
+ </desc>
+ </func>
+
+ <func>
+ <name name="pseudo" arity="2"/>
+ <fsummary>Start a number of pseudo servers.</fsummary>
+ <desc>
+ <p>Starts a number of pseudo servers. A pseudo server is a
+ server with a registered name that does nothing
+ but pass on all message to the real server that executes at a
+ master node. A pseudo server is an intermediary that only has
+ the same registered name as the real server.</p>
+ <p>For example, if you have started a slave node <c>N</c> and
+ want to execute <c>pxw</c> graphics code on this node, you can
+ start server <c>pxw_server</c> as a pseudo server at
+ the slave node. This is illustrated as follows:</p>
+ <code type="none">
+rpc:call(N, slave, pseudo, [node(), [pxw_server]]).</code>
+ </desc>
+ </func>
+
+ <func>
+ <name name="relay" arity="1"/>
+ <fsummary>Run a pseudo server.</fsummary>
+ <desc>
+ <p>Runs a pseudo server. This function never returns any value
+ and the process that executes the function receives
+ messages. All messages received are simply passed on to
+ <c><anno>Pid</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
<name name="start" arity="1"/>
<name name="start" arity="2"/>
<name name="start" arity="3"/>
- <fsummary>Start a slave node on a host</fsummary>
+ <fsummary>Start a slave node on a host.</fsummary>
<desc>
- <p>Starts a slave node on the host <c><anno>Host</anno></c>. Host names need
- not necessarily be specified as fully qualified names; short
+ <p>Starts a slave node on host <c><anno>Host</anno></c>. Host names
+ need not necessarily be specified as fully qualified names; short
names can also be used. This is the same condition that
applies to names of distributed Erlang nodes.</p>
- <p>The name of the started node will be <c><anno>Name</anno>@<anno>Host</anno></c>. If no
- name is provided, the name will be the same as the node which
- executes the call (with the exception of the host name part of
- the node name).</p>
+ <p>The name of the started node becomes
+ <c><anno>Name</anno>@<anno>Host</anno></c>. If no
+ name is provided, the name becomes the same as the node that
+ executes the call (except the host name part of the node name).</p>
<p>The slave node resets its <c>user</c> process so that all
- terminal I/O which is produced at the slave is automatically
- relayed to the master. Also, the file process will be relayed
+ terminal I/O that is produced at the slave is automatically
+ relayed to the master. Also, the file process is relayed
to the master.</p>
- <p>The <c><anno>Args</anno></c> argument is used to set <c>erl</c> command
- line arguments. If provided, it is passed to the new node and
- can be used for a variety of purposes. See
- <seealso marker="erts:erl#erl">erl(1)</seealso></p>
- <p>As an example, suppose that we want to start a slave node at
- host <c>H</c> with the node name <c>Name@H</c>, and we also
+ <p>Argument <c><anno>Args</anno></c> is used to set <c>erl</c>
+ command-line arguments. If provided, it is passed to the new
+ node and can be used for a variety of purposes; see
+ <seealso marker="erts:erl#erl"><c>erl(1)</c></seealso>.</p>
+ <p>As an example, suppose that you want to start a slave node at
+ host <c>H</c> with node name <c>Name@H</c> and
want the slave node to have the following properties:</p>
<list type="bulleted">
- <item>
- <p>directory <c>Dir</c> should be added to the code path;</p>
- </item>
- <item>
- <p>the Mnesia directory should be set to <c>M</c>;</p>
- </item>
- <item>
- <p>the unix <c>DISPLAY</c> environment variable should be
- set to the display of the master node.</p>
- </item>
+ <item>Directory <c>Dir</c> is to be added to the code path.</item>
+ <item>The Mnesia directory is to be set to <c>M</c>.</item>
+ <item>The Unix <c>DISPLAY</c> environment variable is to be
+ set to the display of the master node.</item>
</list>
<p>The following code is executed to achieve this:</p>
<code type="none">
E = " -env DISPLAY " ++ net_adm:localhost() ++ ":0 ",
Arg = "-mnesia_dir " ++ M ++ " -pa " ++ Dir ++ E,
slave:start(H, Name, Arg).</code>
- <p>If successful, the function returns <c>{ok, <anno>Node</anno>}</c>,
- where <c><anno>Node</anno></c> is the name of the new node. Otherwise it
- returns <c>{error, <anno>Reason</anno>}</c>, where <c><anno>Reason</anno></c> can be
- one of:</p>
+ <p>The function returns <c>{ok, <anno>Node</anno>}</c>, where
+ <c><anno>Node</anno></c> is the name of the new node, otherwise
+ <c>{error, <anno>Reason</anno>}</c>, where <c><anno>Reason</anno></c>
+ can be one of:</p>
<taglist>
<tag><c>timeout</c></tag>
<item>
<p>The master node failed to get in contact with the slave
- node. This can happen in a number of circumstances:</p>
+ node. This can occur in a number of circumstances:</p>
<list type="bulleted">
- <item>Erlang/OTP is not installed on the remote host</item>
- <item>the file system on the other host has a different
- structure to the the master</item>
- <item>the Erlang nodes have different cookies.</item>
+ <item>Erlang/OTP is not installed on the remote host.</item>
+ <item>The file system on the other host has a different
+ structure to the the master.</item>
+ <item>The Erlang nodes have different cookies.</item>
</list>
</item>
<tag><c>no_rsh</c></tag>
@@ -120,75 +170,35 @@ slave:start(H, Name, Arg).</code>
</item>
<tag><c>{already_running, <anno>Node</anno>}</c></tag>
<item>
- <p>A node with the name <c><anno>Name</anno>@<anno>Host</anno></c> already exists.</p>
+ <p>A node with name <c><anno>Name</anno>@<anno>Host</anno></c>
+ already exists.</p>
</item>
</taglist>
</desc>
</func>
+
<func>
<name name="start_link" arity="1"/>
<name name="start_link" arity="2"/>
<name name="start_link" arity="3"/>
- <fsummary>Start and link to a slave node on a host</fsummary>
+ <fsummary>Start and link to a slave node on a host.</fsummary>
<desc>
<p>Starts a slave node in the same way as <c>start/1,2,3</c>,
except that the slave node is linked to the currently
executing process. If that process terminates, the slave node
also terminates.</p>
- <p>See <c>start/1,2,3</c> for a description of arguments and
- return values.</p>
+ <p>For a description of arguments and return values, see
+ <seealso marker="#start/1"><c>start/1,2,3</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="stop" arity="1"/>
- <fsummary>Stop (kill) a node</fsummary>
+ <fsummary>Stop (kill) a node.</fsummary>
<desc>
<p>Stops (kills) a node.</p>
</desc>
</func>
- <func>
- <name>pseudo([Master | ServerList]) -> ok</name>
- <fsummary>Start a number of pseudo servers</fsummary>
- <type>
- <v>Master = node()</v>
- <v>ServerList = [atom()]</v>
- </type>
- <desc>
- <p>Calls <c>pseudo(Master, ServerList)</c>. If we want to start
- a node from the command line and set up a number of pseudo
- servers, an Erlang runtime system can be started as
- follows:</p>
- <pre>
-% erl -name abc -s slave pseudo klacke@super x --</pre>
- </desc>
- </func>
- <func>
- <name name="pseudo" arity="2"/>
- <fsummary>Start a number of pseudo servers</fsummary>
- <desc>
- <p>Starts a number of pseudo servers. A pseudo server is a
- server with a registered name which does absolutely nothing
- but pass on all message to the real server which executes at a
- master node. A pseudo server is an intermediary which only has
- the same registered name as the real server.</p>
- <p>For example, if we have started a slave node <c>N</c> and
- want to execute <c>pxw</c> graphics code on this node, we can
- start the server <c>pxw_server</c> as a pseudo server at
- the slave node. The following code illustrates:</p>
- <code type="none">
-rpc:call(N, slave, pseudo, [node(), [pxw_server]]).</code>
- </desc>
- </func>
- <func>
- <name name="relay" arity="1"/>
- <fsummary>Run a pseudo server</fsummary>
- <desc>
- <p>Runs a pseudo server. This function never returns any value
- and the process which executes the function will receive
- messages. All messages received will simply be passed on to
- <c><anno>Pid</anno></c>.</p>
- </desc>
- </func>
</funcs>
</erlref>
diff --git a/lib/stdlib/doc/src/sofs.xml b/lib/stdlib/doc/src/sofs.xml
index cf0855bc85..4cf1984d46 100644
--- a/lib/stdlib/doc/src/sofs.xml
+++ b/lib/stdlib/doc/src/sofs.xml
@@ -24,260 +24,284 @@
<title>sofs</title>
<prepared>Hans Bolinder</prepared>
- <responsible>nobody</responsible>
+ <responsible></responsible>
<docno></docno>
- <approved>nobody</approved>
- <checked>no</checked>
+ <approved></approved>
+ <checked></checked>
<date>2001-08-25</date>
<rev>PA1</rev>
- <file>sofs.sgml</file>
+ <file>sofs.xml</file>
</header>
<module>sofs</module>
- <modulesummary>Functions for Manipulating Sets of Sets</modulesummary>
+ <modulesummary>Functions for manipulating sets of sets.</modulesummary>
<description>
- <p>The <c>sofs</c> module implements operations on finite sets and
+ <p>This module provides operations on finite sets and
relations represented as sets. Intuitively, a set is a
collection of elements; every element belongs to the set, and
the set contains every element.</p>
+
<p>Given a set A and a sentence S(x), where x is a free variable,
a new set B whose elements are exactly those elements of A for
which S(x) holds can be formed, this is denoted B&nbsp;=
{x&nbsp;in&nbsp;A&nbsp;: S(x)}. Sentences are expressed using
the logical operators "for some" (or "there exists"), "for all",
"and", "or", "not". If the existence of a set containing all the
- specified elements is known (as will always be the case in this
- module), we write B&nbsp;= {x&nbsp;: S(x)}. </p>
- <p>The <em>unordered set</em> containing the elements a, b and c
- is denoted {a,&nbsp;b,&nbsp;c}. This notation is not to be
- confused with tuples. The <em>ordered pair</em> of a and b, with
- first <em>coordinate</em> a and second coordinate b, is denoted
- (a,&nbsp;b). An ordered pair is an <em>ordered set</em> of two
- elements. In this module ordered sets can contain one, two or
- more elements, and parentheses are used to enclose the elements.
- Unordered sets and ordered sets are orthogonal, again in this
- module; there is no unordered set equal to any ordered set.</p>
- <p>The set that contains no elements is called the <em>empty set</em>.
- If two sets A and B contain the same elements, then A
- is <marker id="equal"></marker><em>equal</em> to B, denoted
- A&nbsp;=&nbsp;B. Two ordered sets are equal if they contain the
- same number of elements and have equal elements at each
- coordinate. If a set A contains all elements that B contains,
- then B is a <marker id="subset"></marker><em>subset</em> of A.
- The <marker id="union"></marker><em>union</em> of two sets A and B is
- the smallest set that contains all elements of A and all elements of
- B. The <marker id="intersection"></marker><em>intersection</em> of two
- sets A and B is the set that contains all elements of A that
- belong to B.
- Two sets are <marker id="disjoint"></marker><em>disjoint</em> if their
- intersection is the empty set.
- The <marker id="difference"></marker><em>difference</em> of
- two sets A and B is the set that contains all elements of A that
- do not belong to B.
- The <marker id="symmetric_difference"></marker><em>symmetric
- difference</em> of
- two sets is the set that contains those element that belong to
- either of the two sets, but not both.
- The <marker id="union_n"></marker><em>union</em> of a collection
- of sets is the smallest set that contains all the elements that
- belong to at least one set of the collection.
- The <marker id="intersection_n"></marker><em>intersection</em> of
- a non-empty collection of sets is the set that contains all elements
- that belong to every set of the collection.</p>
- <p>The <marker id="Cartesian_product"></marker><em>Cartesian
- product</em> of
- two sets X and Y, denoted X&nbsp;&times;&nbsp;Y, is the set
- {a&nbsp;: a&nbsp;= (x,&nbsp;y) for some x&nbsp;in&nbsp;X and for
- some y&nbsp;in&nbsp;Y}.
- A <marker id="relation"></marker><em>relation</em> is a subset of
- X&nbsp;&times;&nbsp;Y. Let R be a relation. The fact that
- (x,&nbsp;y) belongs to R is written as x&nbsp;R&nbsp;y. Since
- relations are sets, the definitions of the last paragraph
- (subset, union, and so on) apply to relations as well.
- The <marker id="domain"></marker><em>domain</em> of R is the
- set {x&nbsp;: x&nbsp;R&nbsp;y for some y&nbsp;in&nbsp;Y}.
- The <marker id="range"></marker><em>range</em> of R is the
- set {y&nbsp;: x&nbsp;R&nbsp;y for some x&nbsp;in&nbsp;X}.
- The <marker id="converse"></marker><em>converse</em> of R is the
- set {a&nbsp;: a&nbsp;= (y,&nbsp;x) for some
- (x,&nbsp;y)&nbsp;in&nbsp;R}. If A is a subset of X, then
- the <marker id="image"></marker><em>image</em> of
- A under R is the set {y&nbsp;: x&nbsp;R&nbsp;y for some
- x&nbsp;in&nbsp;A}, and if B is a subset of Y, then
- the <marker id="inverse_image"></marker><em>inverse image</em> of B is
- the set {x&nbsp;: x&nbsp;R&nbsp;y for some y&nbsp;in&nbsp;B}. If R is a
- relation from X to Y and S is a relation from Y to Z, then
- the <marker id="relative_product"></marker><em>relative product</em> of
- R and S is the relation T from X to Z defined so that x&nbsp;T&nbsp;z
- if and only if there exists an element y in Y such that
- x&nbsp;R&nbsp;y and y&nbsp;S&nbsp;z.
- The <marker id="restriction"></marker><em>restriction</em> of R to A is
- the set S defined so that x&nbsp;S&nbsp;y if and only if there exists an
- element x in A such that x&nbsp;R&nbsp;y. If S is a restriction
- of R to A, then R is
- an <marker id="extension"></marker><em>extension</em> of S to X.
- If X&nbsp;=&nbsp;Y then we call R a relation <em>in</em> X.
- The <marker id="field"></marker><em>field</em> of a relation R in X
- is the union of the domain of R and the range of R.
- If R is a relation in X, and
- if S is defined so that x&nbsp;S&nbsp;y if x&nbsp;R&nbsp;y and
- not x&nbsp;=&nbsp;y, then S is
- the <marker id="strict_relation"></marker><em>strict</em> relation
- corresponding to
- R, and vice versa, if S is a relation in X, and if R is defined
- so that x&nbsp;R&nbsp;y if x&nbsp;S&nbsp;y or x&nbsp;=&nbsp;y,
- then R is the <marker id="weak_relation"></marker><em>weak</em> relation
- corresponding to S. A relation R in X is <em>reflexive</em> if
- x&nbsp;R&nbsp;x for every element x of X; it is
- <em>symmetric</em> if x&nbsp;R&nbsp;y implies that
- y&nbsp;R&nbsp;x; and it is <em>transitive</em> if
- x&nbsp;R&nbsp;y and y&nbsp;R&nbsp;z imply that x&nbsp;R&nbsp;z.</p>
- <p>A <marker id="function"></marker><em>function</em> F is a relation, a
- subset of X&nbsp;&times;&nbsp;Y, such that the domain of F is
- equal to X and such that for every x in X there is a unique
- element y in Y with (x,&nbsp;y) in F. The latter condition can
- be formulated as follows: if x&nbsp;F&nbsp;y and x&nbsp;F&nbsp;z
- then y&nbsp;=&nbsp;z. In this module, it will not be required
- that the domain of F be equal to X for a relation to be
- considered a function. Instead of writing
- (x,&nbsp;y)&nbsp;in&nbsp;F or x&nbsp;F&nbsp;y, we write
- F(x)&nbsp;=&nbsp;y when F is a function, and say that F maps x
- onto y, or that the value of F at x is y. Since functions are
- relations, the definitions of the last paragraph (domain, range,
- and so on) apply to functions as well. If the converse of a
- function F is a function F', then F' is called
- the <marker id="inverse"></marker><em>inverse</em> of F.
- The relative product of two functions F1 and F2 is called
- the <marker id="composite"></marker><em>composite</em> of F1 and F2
- if the range of F1 is a subset of the domain of F2. </p>
- <p>Sometimes, when the range of a function is more important than
- the function itself, the function is called a <em>family</em>.
- The domain of a family is called the <em>index set</em>, and the
- range is called the <em>indexed set</em>. If x is a family from
- I to X, then x[i] denotes the value of the function at index i.
- The notation "a family in X" is used for such a family. When the
- indexed set is a set of subsets of a set X, then we call x
- a <marker id="family"></marker><em>family of subsets</em> of X. If x
- is a family of subsets of X, then the union of the range of x is
- called the <em>union of the family</em> x. If x is non-empty
- (the index set is non-empty),
- the <em>intersection of the family</em> x is the intersection of
- the range of x. In this
- module, the only families that will be considered are families
- of subsets of some set X; in the following the word "family"
- will be used for such families of subsets.</p>
- <p>A <marker id="partition"></marker><em>partition</em> of a set X is a
- collection S of non-empty subsets of X whose union is X and
- whose elements are pairwise disjoint. A relation in a set is an
- <em>equivalence relation</em> if it is reflexive, symmetric and
- transitive. If R is an equivalence relation in X, and x is an
- element of X,
- the <marker id="equivalence_class"></marker><em>equivalence
- class</em> of x with respect to R is the set of all those
- elements y of X for which x&nbsp;R&nbsp;y holds. The equivalence
- classes constitute a partitioning of X. Conversely, if C is a
- partition of X, then the relation that holds for any two
- elements of X if they belong to the same equivalence class, is
- an equivalence relation induced by the partition C. If R is an
- equivalence relation in X, then
- the <marker id="canonical_map"></marker><em>canonical map</em> is
- the function that maps every element of X onto its equivalence class.
- </p>
- <p><marker id="binary_relation"></marker>Relations as defined above
- (as sets of ordered pairs) will from now on be referred to as
- <em>binary relations</em>. We call a set of ordered sets
- (x[1],&nbsp;...,&nbsp;x[n]) an <marker id="n_ary_relation"></marker>
- <em>(n-ary) relation</em>, and say that the relation is a subset of
- the <marker id="Cartesian_product_tuple"></marker>Cartesian product
- X[1]&nbsp;&times;&nbsp;...&nbsp;&times;&nbsp;X[n] where x[i] is
- an element of X[i], 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n.
- The <marker id="projection"></marker><em>projection</em> of an n-ary
- relation R onto coordinate i is the set {x[i]&nbsp;:
- (x[1],&nbsp;...,&nbsp;x[i],&nbsp;...,&nbsp;x[n]) in R for some
- x[j]&nbsp;in&nbsp;X[j], 1&nbsp;&lt;=&nbsp;j&nbsp;&lt;=&nbsp;n
- and not i&nbsp;=&nbsp;j}. The projections of a binary relation R
- onto the first and second coordinates are the domain and the
- range of R respectively. The relative product of binary
- relations can be generalized to n-ary relations as follows. Let
- TR be an ordered set (R[1],&nbsp;...,&nbsp;R[n]) of binary
- relations from X to Y[i] and S a binary relation from
- (Y[1]&nbsp;&times;&nbsp;...&nbsp;&times;&nbsp;Y[n]) to Z.
- The <marker id="tuple_relative_product"></marker><em>relative
- product</em> of
- TR and S is the binary relation T from X to Z defined so that
- x&nbsp;T&nbsp;z if and only if there exists an element y[i] in
- Y[i] for each 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n such that
- x&nbsp;R[i]&nbsp;y[i] and
- (y[1],&nbsp;...,&nbsp;y[n])&nbsp;S&nbsp;z. Now let TR be a an
- ordered set (R[1],&nbsp;...,&nbsp;R[n]) of binary relations from
- X[i] to Y[i] and S a subset of
- X[1]&nbsp;&times;&nbsp;...&nbsp;&times;&nbsp;X[n].
- The <marker id="multiple_relative_product"></marker><em>multiple
- relative product</em> of TR and S is defined to be the
- set {z&nbsp;: z&nbsp;= ((x[1],&nbsp;...,&nbsp;x[n]), (y[1],...,y[n]))
- for some (x[1],&nbsp;...,&nbsp;x[n])&nbsp;in&nbsp;S and for some
- (x[i],&nbsp;y[i]) in R[i],
- 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n}.
- The <marker id="natural_join"></marker><em>natural join</em> of
- an n-ary relation R
- and an m-ary relation S on coordinate i and j is defined to be
- the set {z&nbsp;: z&nbsp;= (x[1],&nbsp;...,&nbsp;x[n],&nbsp;
- y[1],&nbsp;...,&nbsp;y[j-1],&nbsp;y[j+1],&nbsp;...,&nbsp;y[m])
- for some (x[1],&nbsp;...,&nbsp;x[n])&nbsp;in&nbsp;R and for some
- (y[1],&nbsp;...,&nbsp;y[m])&nbsp;in&nbsp;S such that
- x[i]&nbsp;=&nbsp;y[j]}.</p>
- <p><marker id="sets_definition"></marker>The sets recognized by this
- module will be represented by elements of the relation Sets, defined as
- the smallest set such that:</p>
+ specified elements is known (as is always the case in this
+ module), this is denoted B&nbsp;= {x&nbsp;: S(x)}.</p>
+
<list type="bulleted">
- <item>for every atom T except '_' and for every term X,
- (T,&nbsp;X) belongs to Sets (<em>atomic sets</em>);
+ <item>
+ <p>The <em>unordered set</em> containing the elements a, b, and c is
+ denoted {a,&nbsp;b,&nbsp;c}. This notation is not to be confused with
+ tuples.</p>
+ <p>The <em>ordered pair</em> of a and b, with first <em>coordinate</em>
+ a and second coordinate b, is denoted (a,&nbsp;b). An ordered pair
+ is an <em>ordered set</em> of two elements. In this module, ordered
+ sets can contain one, two, or more elements, and parentheses are
+ used to enclose the elements.</p>
+ <p>Unordered sets and ordered sets are orthogonal, again in this
+ module; there is no unordered set equal to any ordered set.</p>
</item>
- <item>(['_'],&nbsp;[]) belongs to Sets (the <em>untyped empty set</em>);
+ <item>
+ <p>The <em>empty set</em> contains no elements.</p>
+ <p>Set A is <marker id="equal"></marker><em>equal</em> to set B if they
+ contain the same elements, which is denoted A&nbsp;=&nbsp;B. Two
+ ordered sets are equal if they contain the same number of elements
+ and have equal elements at each coordinate.</p>
+ <p>Set B is a <marker id="subset"></marker><em>subset</em> of set A
+ if A contains all elements that B contains.</p>
+ <p>The <marker id="union"></marker><em>union</em> of two sets A and B
+ is the smallest set that contains all elements of A and all elements
+ of B.</p>
+ <p>The <marker id="intersection"></marker><em>intersection</em> of two
+ sets A and B is the set that contains all elements of A that belong
+ to B.</p>
+ <p>Two sets are <marker id="disjoint"></marker><em>disjoint</em> if
+ their intersection is the empty set.</p>
+ <p>The <marker id="difference"></marker><em>difference</em> of two sets
+ A and B is the set that contains all elements of A that do not belong
+ to B.</p>
+ <p>The <marker id="symmetric_difference"></marker><em>symmetric
+ difference</em> of two sets is the set that contains those element
+ that belong to either of the two sets, but not both.</p>
+ <p>The <marker id="union_n"></marker><em>union</em> of a collection
+ of sets is the smallest set that contains all the elements that
+ belong to at least one set of the collection.</p>
+ <p>The <marker id="intersection_n"></marker><em>intersection</em> of
+ a non-empty collection of sets is the set that contains all elements
+ that belong to every set of the collection.</p>
</item>
- <item>for every tuple T&nbsp;= {T[1],&nbsp;...,&nbsp;T[n]} and
- for every tuple X&nbsp;= {X[1],&nbsp;...,&nbsp;X[n]}, if
- (T[i],&nbsp;X[i]) belongs to Sets for every
- 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n then (T,&nbsp;X) belongs
- to Sets (<em>ordered sets</em>);
+ <item>
+ <p>The <marker id="Cartesian_product"></marker><em>Cartesian
+ product</em> of two sets X and Y, denoted X&nbsp;&times;&nbsp;Y, is
+ the set {a&nbsp;: a&nbsp;= (x,&nbsp;y) for some x&nbsp;in&nbsp;X and
+ for some y&nbsp;in&nbsp;Y}.</p>
+ <p>A <marker id="relation"></marker><em>relation</em> is a subset of
+ X&nbsp;&times;&nbsp;Y. Let R be a relation. The fact that (x,&nbsp;y)
+ belongs to R is written as x&nbsp;R&nbsp;y. As relations are sets,
+ the definitions of the last item (subset, union, and so on) apply to
+ relations as well.</p>
+ <p>The <marker id="domain"></marker><em>domain</em> of R is the set
+ {x&nbsp;: x&nbsp;R&nbsp;y for some y&nbsp;in&nbsp;Y}.</p>
+ <p>The <marker id="range"></marker><em>range</em> of R is the set
+ {y&nbsp;: x&nbsp;R&nbsp;y for some x&nbsp;in&nbsp;X}.</p>
+ <p>The <marker id="converse"></marker><em>converse</em> of R is the
+ set {a&nbsp;: a&nbsp;= (y,&nbsp;x) for some
+ (x,&nbsp;y)&nbsp;in&nbsp;R}.</p>
+ <p>If A is a subset of X, the <marker id="image"></marker><em>image</em>
+ of A under R is the set {y&nbsp;: x&nbsp;R&nbsp;y for some
+ x&nbsp;in&nbsp;A}. If B is a subset of Y, the
+ <marker id="inverse_image"></marker><em>inverse image</em> of B is the
+ set {x&nbsp;: x&nbsp;R&nbsp;y for some y&nbsp;in&nbsp;B}.</p>
+ <p>If R is a relation from X to Y, and S is a relation from Y to Z, the
+ <marker id="relative_product"></marker><em>relative product</em> of R
+ and S is the relation T from X to Z defined so that x&nbsp;T&nbsp;z
+ if and only if there exists an element y in Y such that
+ x&nbsp;R&nbsp;y and y&nbsp;S&nbsp;z.</p>
+ <p>The <marker id="restriction"></marker><em>restriction</em> of R to A
+ is the set S defined so that x&nbsp;S&nbsp;y if and only if there
+ exists an element x in A such that x&nbsp;R&nbsp;y.</p>
+ <p>If S is a restriction of R to A, then R is an
+ <marker id="extension"></marker><em>extension</em> of S to X.</p>
+ <p>If X&nbsp;=&nbsp;Y, then R is called a relation <em>in</em> X.</p>
+ <p>The <marker id="field"></marker><em>field</em> of a relation R in X
+ is the union of the domain of R and the range of R.</p>
+ <p>If R is a relation in X, and if S is defined so that x&nbsp;S&nbsp;y
+ if x&nbsp;R&nbsp;y and not x&nbsp;=&nbsp;y, then S is the
+ <marker id="strict_relation"></marker><em>strict</em> relation
+ corresponding to R. Conversely, if S is a relation in X, and if R is
+ defined so that x&nbsp;R&nbsp;y if x&nbsp;S&nbsp;y or x&nbsp;=&nbsp;y,
+ then R is the <marker id="weak_relation"></marker><em>weak</em>
+ relation corresponding to S.</p>
+ <p>A relation R in X is <em>reflexive</em> if x&nbsp;R&nbsp;x for every
+ element x of X, it is <em>symmetric</em> if x&nbsp;R&nbsp;y implies
+ that y&nbsp;R&nbsp;x, and it is <em>transitive</em> if
+ x&nbsp;R&nbsp;y and y&nbsp;R&nbsp;z imply that x&nbsp;R&nbsp;z.</p>
+ </item>
+ <item>
+ <p>A <marker id="function"></marker><em>function</em> F is a relation,
+ a subset of X&nbsp;&times;&nbsp;Y, such that the domain of F is equal
+ to X and such that for every x in X there is a unique element y in Y
+ with (x,&nbsp;y) in F. The latter condition can be formulated as
+ follows: if x&nbsp;F&nbsp;y and x&nbsp;F&nbsp;z, then y&nbsp;=&nbsp;z.
+ In this module, it is not required that the domain of F is equal to X
+ for a relation to be considered a function.</p>
+ <p>Instead of writing (x,&nbsp;y)&nbsp;in&nbsp;F or x&nbsp;F&nbsp;y, we
+ write F(x)&nbsp;=&nbsp;y when F is a function, and say that F maps x
+ onto y, or that the value of F at x is y.</p>
+ <p>As functions are relations, the definitions of the last item (domain,
+ range, and so on) apply to functions as well.</p>
+ <p>If the converse of a function F is a function F', then F' is called
+ the <marker id="inverse"></marker><em>inverse</em> of F.</p>
+ <p>The relative product of two functions F1 and F2 is called
+ the <marker id="composite"></marker><em>composite</em> of F1 and F2
+ if the range of F1 is a subset of the domain of F2.</p>
+ </item>
+ <item>
+ <p>Sometimes, when the range of a function is more important than the
+ function itself, the function is called a <em>family</em>.</p>
+ <p>The domain of a family is called the <em>index set</em>, and the
+ range is called the <em>indexed set</em>.</p>
+ <p>If x is a family from I to X, then x[i] denotes the value of the
+ function at index i. The notation "a family in X" is used for such a
+ family.</p>
+ <p>When the indexed set is a set of subsets of a set X, we call x a
+ <marker id="family"></marker><em>family of subsets</em> of X.</p>
+ <p>If x is a family of subsets of X, the union of the range of x is
+ called the <em>union of the family</em> x.</p>
+ <p>If x is non-empty (the index set is non-empty), the <em>intersection
+ of the family</em> x is the intersection of the range of x.</p>
+ <p>In this module, the only families that are considered are families
+ of subsets of some set X; in the following, the word "family" is
+ used for such families of subsets.</p>
+ </item>
+ <item>
+ <p>A <marker id="partition"></marker><em>partition</em> of a set X is a
+ collection S of non-empty subsets of X whose union is X and whose
+ elements are pairwise disjoint.</p>
+ <p>A relation in a set is an <em>equivalence relation</em> if it is
+ reflexive, symmetric, and transitive.</p>
+ <p>If R is an equivalence relation in X, and x is an element of X, the
+ <marker id="equivalence_class"></marker><em>equivalence class</em> of
+ x with respect to R is the set of all those elements y of X for which
+ x&nbsp;R&nbsp;y holds. The equivalence classes constitute a
+ partitioning of X. Conversely, if C is a partition of X, the relation
+ that holds for any two elements of X if they belong to the same
+ equivalence class, is an equivalence relation induced by the
+ partition C.</p>
+ <p>If R is an equivalence relation in X, the
+ <marker id="canonical_map"></marker><em>canonical map</em> is the
+ function that maps every element of X onto its equivalence class.</p>
+ </item>
+ <item>
+ <p><marker id="binary_relation"></marker>Relations as defined above
+ (as sets of ordered pairs) are from now on referred to as <em>binary
+ relations</em>.</p>
+ <p>We call a set of ordered sets (x[1],&nbsp;...,&nbsp;x[n]) an
+ <marker id="n_ary_relation"></marker><em>(n-ary) relation</em>, and
+ say that the relation is a subset of the
+ <marker id="Cartesian_product_tuple"></marker>Cartesian product
+ X[1]&nbsp;&times;&nbsp;...&nbsp;&times;&nbsp;X[n], where x[i] is
+ an element of X[i], 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n.</p>
+ <p>The <marker id="projection"></marker><em>projection</em> of an n-ary
+ relation R onto coordinate i is the set {x[i]&nbsp;:
+ (x[1],&nbsp;...,&nbsp;x[i],&nbsp;...,&nbsp;x[n]) in R for some
+ x[j]&nbsp;in&nbsp;X[j], 1&nbsp;&lt;=&nbsp;j&nbsp;&lt;=&nbsp;n and
+ not i&nbsp;=&nbsp;j}. The projections of a binary relation R onto the
+ first and second coordinates are the domain and the range of R,
+ respectively.</p>
+ <p>The relative product of binary relations can be generalized to n-ary
+ relations as follows. Let TR be an ordered set
+ (R[1],&nbsp;...,&nbsp;R[n]) of binary relations from X to Y[i]
+ and S a binary relation from
+ (Y[1]&nbsp;&times;&nbsp;...&nbsp;&times;&nbsp;Y[n]) to Z. The
+ <marker id="tuple_relative_product"></marker><em>relative product</em>
+ of TR and S is the binary relation T from X to Z defined so that
+ x&nbsp;T&nbsp;z if and only if there exists an element y[i] in Y[i]
+ for each 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n such that
+ x&nbsp;R[i]&nbsp;y[i] and
+ (y[1],&nbsp;...,&nbsp;y[n])&nbsp;S&nbsp;z. Now let TR be a an
+ ordered set (R[1],&nbsp;...,&nbsp;R[n]) of binary relations from
+ X[i] to Y[i] and S a subset of
+ X[1]&nbsp;&times;&nbsp;...&nbsp;&times;&nbsp;X[n].
+ The <marker id="multiple_relative_product"></marker><em>multiple
+ relative product</em> of TR and S is defined to be the set
+ {z&nbsp;: z&nbsp;= ((x[1],&nbsp;...,&nbsp;x[n]), (y[1],...,y[n]))
+ for some (x[1],&nbsp;...,&nbsp;x[n])&nbsp;in&nbsp;S and for some
+ (x[i],&nbsp;y[i]) in R[i], 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n}.</p>
+ <p>The <marker id="natural_join"></marker><em>natural join</em> of an
+ n-ary relation R and an m-ary relation S on coordinate i and j is
+ defined to be the set
+ {z&nbsp;: z&nbsp;= (x[1],&nbsp;...,&nbsp;x[n],&nbsp;
+ y[1],&nbsp;...,&nbsp;y[j-1],&nbsp;y[j+1],&nbsp;...,&nbsp;y[m])
+ for some (x[1],&nbsp;...,&nbsp;x[n])&nbsp;in&nbsp;R and for some
+ (y[1],&nbsp;...,&nbsp;y[m])&nbsp;in&nbsp;S such that
+ x[i]&nbsp;=&nbsp;y[j]}.</p>
+ </item>
+ <item>
+ <p><marker id="sets_definition"></marker>The sets recognized by this
+ module are represented by elements of the relation Sets, which is
+ defined as the smallest set such that:</p>
+ <list type="bulleted">
+ <item>
+ <p>For every atom T, except '_', and for every term X,
+ (T,&nbsp;X) belongs to Sets (<em>atomic sets</em>).</p>
+ </item>
+ <item>
+ <p>(['_'],&nbsp;[]) belongs to Sets (the <em>untyped empty
+ set</em>).</p>
+ </item>
+ <item>
+ <p>For every tuple T&nbsp;= {T[1],&nbsp;...,&nbsp;T[n]} and
+ for every tuple X&nbsp;= {X[1],&nbsp;...,&nbsp;X[n]}, if
+ (T[i],&nbsp;X[i]) belongs to Sets for every
+ 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n, then (T,&nbsp;X) belongs
+ to Sets (<em>ordered sets</em>).</p>
+ </item>
+ <item>
+ <p>For every term T, if X is the empty list or a non-empty
+ sorted list [X[1],&nbsp;...,&nbsp;X[n]] without duplicates
+ such that (T,&nbsp;X[i]) belongs to Sets for every
+ 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n, then ([T],&nbsp;X)
+ belongs to Sets (<em>typed unordered sets</em>).</p>
+ </item>
+ </list>
+ <p>An <marker id="external_set"></marker><em>external set</em> is an
+ element of the range of Sets.</p>
+ <p>A <marker id="type"></marker><em>type</em> is an element of the
+ domain of Sets.</p>
+ <p>If S is an element (T,&nbsp;X) of Sets, then T is a
+ <marker id="valid_type"></marker><em>valid type</em> of X, T is the
+ type of S, and X is the external set of S.
+ <seealso marker="#from_term/2"><c>from_term/2</c></seealso> creates a
+ set from a type and an Erlang term turned into an external set.</p>
+ <p>The sets represented by Sets are the elements of the range of
+ function Set from Sets to Erlang terms and sets of Erlang terms:</p>
+ <list type="bulleted">
+ <item>Set(T,Term)&nbsp;= Term, where T is an atom</item>
+ <item>Set({T[1],&nbsp;...,&nbsp;T[n]},&nbsp;{X[1],&nbsp;...,
+ &nbsp;X[n]})&nbsp;= (Set(T[1],&nbsp;X[1]),&nbsp;...,&nbsp;
+ Set(T[n],&nbsp;X[n]))</item>
+ <item>Set([T],&nbsp;[X[1],&nbsp;...,&nbsp;X[n]])&nbsp;=
+ {Set(T,&nbsp;X[1]),&nbsp;...,&nbsp;Set(T,&nbsp;X[n])}</item>
+ <item>Set([T],&nbsp;[])&nbsp;= {}</item>
+ </list>
+ <p>When there is no risk of confusion, elements of Sets are identified
+ with the sets they represent. For example, if U is the result of
+ calling <seealso marker="#union/2"><c>union/2</c></seealso> with S1
+ and S2 as arguments, then U is said to be the union of S1 and S2.
+ A more precise formulation is that Set(U) is the union of Set(S1)
+ and Set(S2).</p>
</item>
- <item>for every term T, if X is the empty list or a non-empty
- sorted list [X[1],&nbsp;...,&nbsp;X[n]] without duplicates
- such that (T,&nbsp;X[i]) belongs to Sets for every
- 1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n, then ([T],&nbsp;X)
- belongs to Sets (<em>typed unordered sets</em>).</item>
- </list>
- <p>An <marker id="external_set"></marker><em>external set</em> is an
- element of the range of Sets.
- A <marker id="type"></marker><em>type</em>
- is an element of the domain of Sets. If S is an element
- (T,&nbsp;X) of Sets, then T is
- a <marker id="valid_type"></marker><em>valid type</em> of X,
- T is the type of S, and X is the external set
- of S. <seealso marker="#from_term">from_term/2</seealso> creates a
- set from a type and an Erlang term turned into an external set.</p>
- <p>The actual sets represented by Sets are the elements of the
- range of the function Set from Sets to Erlang terms and sets of
- Erlang terms:</p>
- <list type="bulleted">
- <item>Set(T,Term)&nbsp;= Term, where T is an atom;</item>
- <item>Set({T[1],&nbsp;...,&nbsp;T[n]},&nbsp;{X[1],&nbsp;...,&nbsp;X[n]})
- &nbsp;= (Set(T[1],&nbsp;X[1]),&nbsp;...,&nbsp;Set(T[n],&nbsp;X[n]));</item>
- <item>Set([T],&nbsp;[X[1],&nbsp;...,&nbsp;X[n]])
- &nbsp;= {Set(T,&nbsp;X[1]),&nbsp;...,&nbsp;Set(T,&nbsp;X[n])};</item>
- <item>Set([T],&nbsp;[])&nbsp;= {}.</item>
</list>
- <p>When there is no risk of confusion, elements of Sets will be
- identified with the sets they represent. For instance, if U is
- the result of calling <c>union/2</c> with S1 and S2 as
- arguments, then U is said to be the union of S1 and S2. A more
- precise formulation would be that Set(U) is the union of Set(S1)
- and Set(S2).</p>
+
<p>The types are used to implement the various conditions that
- sets need to fulfill. As an example, consider the relative
+ sets must fulfill. As an example, consider the relative
product of two sets R and S, and recall that the relative
product of R and S is defined if R is a binary relation to Y and
- S is a binary relation from Y. The function that implements the relative
- product, <seealso marker="#relprod_impl">relative_product/2</seealso>, checks
+ S is a binary relation from Y. The function that implements the
+ relative product, <seealso marker="#relative_product/2">
+ <c>relative_product/2</c></seealso>, checks
that the arguments represent binary relations by matching [{A,B}]
against the type of the first argument (Arg1 say), and [{C,D}]
against the type of the second argument (Arg2 say). The fact
@@ -290,33 +314,51 @@
ensure that W is equal to Y. The untyped empty set is handled
separately: its type, ['_'], matches the type of any unordered
set.</p>
- <p>A few functions of this module (<c>drestriction/3</c>,
- <c>family_projection/2</c>, <c>partition/2</c>,
- <c>partition_family/2</c>, <c>projection/2</c>,
- <c>restriction/3</c>, <c>substitution/2</c>) accept an Erlang
+
+ <p>A few functions of this module
+ (<seealso marker="#drestriction/3"><c>drestriction/3</c></seealso>,
+ <seealso marker="#family_projection/2"><c>family_projection/2</c></seealso>,
+ <seealso marker="#partition/2"><c>partition/2</c></seealso>,
+ <seealso marker="#partition_family/2"><c>partition_family/2</c></seealso>,
+ <seealso marker="#projection/2"><c>projection/2</c></seealso>,
+ <seealso marker="#restriction/3"><c>restriction/3</c></seealso>,
+ <seealso marker="#substitution/2"><c>substitution/2</c></seealso>)
+ accept an Erlang
function as a means to modify each element of a given unordered
set. <marker id="set_fun"></marker>Such a function, called
- SetFun in the following, can be
- specified as a functional object (fun), a tuple
- <c>{external,&nbsp;Fun}</c>, or an integer. If SetFun is
- specified as a fun, the fun is applied to each element of the
- given set and the return value is assumed to be a set. If SetFun
- is specified as a tuple <c>{external, Fun}</c>, Fun is applied
- to the external set of each element of the given set and the
- return value is assumed to be an external set. Selecting the
- elements of an unordered set as external sets and assembling a
- new unordered set from a list of external sets is in the present
- implementation more efficient than modifying each element as a
- set. However, this optimization can only be utilized when the
- elements of the unordered set are atomic or ordered sets. It
- must also be the case that the type of the elements matches some
- clause of Fun (the type of the created set is the result of
- applying Fun to the type of the given set), and that Fun does
- nothing but selecting, duplicating or rearranging parts of the
- elements. Specifying a SetFun as an integer I is equivalent to
- specifying <c>{external, fun(X)&nbsp;-> element(I,&nbsp;X)&nbsp;end}</c>,
- but is to be preferred since it makes it possible to handle this
- case even more efficiently. Examples of SetFuns:</p>
+ SetFun in the following, can be specified as a functional object (fun),
+ a tuple <c>{external,&nbsp;Fun}</c>, or an integer:</p>
+
+ <list type="bulleted">
+ <item>
+ <p>If SetFun is specified as a fun, the fun is applied to each element
+ of the given set and the return value is assumed to be a set.</p>
+ </item>
+ <item>
+ <p>If SetFun is specified as a tuple <c>{external, Fun}</c>, Fun is
+ applied to the external set of each element of the given set and the
+ return value is assumed to be an external set. Selecting the
+ elements of an unordered set as external sets and assembling a
+ new unordered set from a list of external sets is in the present
+ implementation more efficient than modifying each element as a
+ set. However, this optimization can only be used when the
+ elements of the unordered set are atomic or ordered sets. It
+ must also be the case that the type of the elements matches some
+ clause of Fun (the type of the created set is the result of
+ applying Fun to the type of the given set), and that Fun does
+ nothing but selecting, duplicating, or rearranging parts of the
+ elements.</p>
+ </item>
+ <item>
+ <p>Specifying a SetFun as an integer I is equivalent to
+ specifying <c>{external, fun(X)&nbsp;->
+ element(I,&nbsp;X)&nbsp;end}</c>, but is to be preferred, as it
+ makes it possible to handle this case even more efficiently.</p>
+ </item>
+ </list>
+
+ <p>Examples of SetFuns:</p>
+
<pre>
fun sofs:union/1
fun(S) -> sofs:partition(1, S) end
@@ -325,22 +367,31 @@ fun(S) -> sofs:partition(1, S) end
{external, fun({_,{_,C}}) -> C end}
{external, fun({_,{_,{_,E}=C}}) -> {E,{E,C}} end}
2</pre>
+
<p>The order in which a SetFun is applied to the elements of an
- unordered set is not specified, and may change in future
- versions of sofs.</p>
+ unordered set is not specified, and can change in future
+ versions of this module.</p>
+
<p>The execution time of the functions of this module is dominated
by the time it takes to sort lists. When no sorting is needed,
the execution time is in the worst case proportional to the sum
of the sizes of the input arguments and the returned value. A
- few functions execute in constant time: <c>from_external</c>,
- <c>is_empty_set</c>, <c>is_set</c>, <c>is_sofs_set</c>,
- <c>to_external</c>, <c>type</c>.</p>
+ few functions execute in constant time:
+ <seealso marker="#from_external/2"><c>from_external/2</c></seealso>,
+ <seealso marker="#is_empty_set/1"><c>is_empty_set/1</c></seealso>,
+ <seealso marker="#is_set/1"><c>is_set/1</c></seealso>,
+ <seealso marker="#is_sofs_set/1"><c>is_sofs_set/1</c></seealso>,
+ <seealso marker="#to_external/1"><c>to_external/1</c></seealso>
+ <seealso marker="#type/1"><c>type/1</c></seealso>.</p>
+
<p>The functions of this module exit the process with a
<c>badarg</c>, <c>bad_function</c>, or <c>type_mismatch</c>
message when given badly formed arguments or sets the types of
which are not compatible.</p>
- <p>When comparing external sets the operator <c>==/2</c> is used.</p>
+
+ <p>When comparing external sets, operator <c>==/2</c> is used.</p>
</description>
+
<datatypes>
<datatype>
<name name="anyset"></name>
@@ -399,10 +450,10 @@ fun(S) -> sofs:partition(1, S) end
<datatype>
<!-- Parameterized opaque types are NYI: -->
<name>tuple_of(T)</name>
- <desc><p><marker id="type-tuple_of"/>
- A tuple where the elements are of type <c>T</c>.</p></desc>
+ <desc><p>A tuple where the elements are of type <c>T</c>.</p></desc>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="a_function" arity="1"/>
@@ -411,24 +462,25 @@ fun(S) -> sofs:partition(1, S) end
<desc>
<p>Creates a <seealso marker="#function">function</seealso>.
<c>a_function(F,&nbsp;T)</c> is equivalent to
- <c>from_term(F,&nbsp;T)</c>, if the result is a function. If
+ <c>from_term(F,&nbsp;T)</c> if the result is a function. If
no <seealso marker="#type">type</seealso> is explicitly
- given, <c>[{atom,&nbsp;atom}]</c> is used as type of the
- function.</p>
+ specified, <c>[{atom,&nbsp;atom}]</c> is used as the
+ function type.</p>
</desc>
</func>
+
<func>
<name name="canonical_relation" arity="1"/>
<fsummary>Return the canonical map.</fsummary>
<desc>
<p>Returns the binary relation containing the elements
- (E,&nbsp;Set) such that Set belongs to <anno>SetOfSets</anno> and E
- belongs to Set. If SetOfSets is
- a <seealso marker="#partition">partition</seealso> of a set X and
- R is the equivalence relation in X induced by SetOfSets, then the
- returned relation is
- the <seealso marker="#canonical_map">canonical map</seealso> from
- X onto the equivalence classes with respect to R.</p>
+ (E,&nbsp;Set) such that Set belongs to <c><anno>SetOfSets</anno></c>
+ and E belongs to Set. If <c>SetOfSets</c> is
+ a <seealso marker="#partition">partition</seealso> of a set X and
+ R is the equivalence relation in X induced by <c>SetOfSets</c>,
+ then the returned relation is
+ the <seealso marker="#canonical_map">canonical map</seealso> from
+ X onto the equivalence classes with respect to R.</p>
<pre>
1> <input>Ss = sofs:from_term([[a,b],[b,c]]),</input>
<input>CR = sofs:canonical_relation(Ss),</input>
@@ -436,13 +488,14 @@ fun(S) -> sofs:partition(1, S) end
[{a,[a,b]},{b,[a,b]},{b,[b,c]},{c,[b,c]}]</pre>
</desc>
</func>
+
<func>
<name name="composite" arity="2"/>
<fsummary>Return the composite of two functions.</fsummary>
<desc>
<p>Returns the <seealso marker="#composite">composite</seealso> of
- the functions <anno>Function1</anno> and
- <anno>Function2</anno>.</p>
+ the functions <c><anno>Function1</anno></c> and
+ <c><anno>Function2</anno></c>.</p>
<pre>
1> <input>F1 = sofs:a_function([{a,1},{b,2},{c,2}]),</input>
<input>F2 = sofs:a_function([{1,x},{2,y},{3,z}]),</input>
@@ -451,13 +504,14 @@ fun(S) -> sofs:partition(1, S) end
[{a,x},{b,y},{c,y}]</pre>
</desc>
</func>
+
<func>
<name name="constant_function" arity="2"/>
- <fsummary>Create the function that maps each element of a
+ <fsummary>Create the function that maps each element of a
set onto another set.</fsummary>
<desc>
<p>Creates the <seealso marker="#function">function</seealso>
- that maps each element of the set Set onto AnySet.</p>
+ that maps each element of set <c>Set</c> onto <c>AnySet</c>.</p>
<pre>
1> <input>S = sofs:set([a,b]),</input>
<input>E = sofs:from_term(1),</input>
@@ -466,12 +520,13 @@ fun(S) -> sofs:partition(1, S) end
[{a,1},{b,1}]</pre>
</desc>
</func>
+
<func>
<name name="converse" arity="1"/>
<fsummary>Return the converse of a binary relation.</fsummary>
<desc>
<p>Returns the <seealso marker="#converse">converse</seealso>
- of the binary relation <anno>BinRel1</anno>.</p>
+ of the binary relation <c><anno>BinRel1</anno></c>.</p>
<pre>
1> <input>R1 = sofs:relation([{1,a},{2,b},{3,a}]),</input>
<input>R2 = sofs:converse(R1),</input>
@@ -479,39 +534,42 @@ fun(S) -> sofs:partition(1, S) end
[{a,1},{a,3},{b,2}]</pre>
</desc>
</func>
+
<func>
<name name="difference" arity="2"/>
<fsummary>Return the difference of two sets.</fsummary>
<desc>
- <p>Returns the <seealso marker="#difference">difference</seealso> of
- the sets <anno>Set1</anno> and <anno>Set2</anno>.</p>
+ <p>Returns the <seealso marker="#difference">difference</seealso> of
+ the sets <c><anno>Set1</anno></c> and <c><anno>Set2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="digraph_to_family" arity="1"/>
<name name="digraph_to_family" arity="2"/>
<fsummary>Create a family from a directed graph.</fsummary>
<desc>
<p>Creates a <seealso marker="#family">family</seealso> from
- the directed graph <anno>Graph</anno>. Each vertex a of
- <anno>Graph</anno> is
- represented by a pair (a,&nbsp;{b[1],&nbsp;...,&nbsp;b[n]})
- where the b[i]'s are the out-neighbours of a. If no type is
- explicitly given, [{atom,&nbsp;[atom]}] is used as type of
- the family. It is assumed that <anno>Type</anno> is
- a <seealso marker="#valid_type">valid type</seealso> of the
- external set of the family.</p>
+ the directed graph <c><anno>Graph</anno></c>. Each vertex a of
+ <c><anno>Graph</anno></c> is
+ represented by a pair (a,&nbsp;{b[1],&nbsp;...,&nbsp;b[n]}),
+ where the b[i]:s are the out-neighbors of a. If no type is
+ explicitly specified, [{atom,&nbsp;[atom]}] is used as type of
+ the family. It is assumed that <c><anno>Type</anno></c> is
+ a <seealso marker="#valid_type">valid type</seealso> of the
+ external set of the family.</p>
<p>If G is a directed graph, it holds that the vertices and
edges of G are the same as the vertices and edges of
<c>family_to_digraph(digraph_to_family(G))</c>.</p>
</desc>
</func>
+
<func>
<name name="domain" arity="1"/>
<fsummary>Return the domain of a binary relation.</fsummary>
<desc>
- <p>Returns the <seealso marker="#domain">domain</seealso> of
- the binary relation <anno>BinRel</anno>.</p>
+ <p>Returns the <seealso marker="#domain">domain</seealso> of
+ the binary relation <c><anno>BinRel</anno></c>.</p>
<pre>
1> <input>R = sofs:relation([{1,a},{1,b},{2,b},{2,c}]),</input>
<input>S = sofs:domain(R),</input>
@@ -519,14 +577,15 @@ fun(S) -> sofs:partition(1, S) end
[1,2]</pre>
</desc>
</func>
+
<func>
<name name="drestriction" arity="2"/>
<fsummary>Return a restriction of a binary relation.</fsummary>
<desc>
<p>Returns the difference between the binary relation
- <anno>BinRel1</anno>
+ <c><anno>BinRel1</anno></c>
and the <seealso marker="#restriction">restriction</seealso>
- of <anno>BinRel1</anno> to <anno>Set</anno>.</p>
+ of <c><anno>BinRel1</anno></c> to <c><anno>Set</anno></c>.</p>
<pre>
1> <input>R1 = sofs:relation([{1,a},{2,b},{3,c}]),</input>
<input>S = sofs:set([2,4,6]),</input>
@@ -537,14 +596,15 @@ fun(S) -> sofs:partition(1, S) end
<c>difference(R,&nbsp;restriction(R,&nbsp;S))</c>.</p>
</desc>
</func>
+
<func>
<name name="drestriction" arity="3"/>
<fsummary>Return a restriction of a relation.</fsummary>
<desc>
- <p>Returns a subset of <anno>Set1</anno> containing those elements
- that do
- not yield an element in <anno>Set2</anno> as the result of applying
- <anno>SetFun</anno>.</p>
+ <p>Returns a subset of <c><anno>Set1</anno></c> containing those
+ elements that do not give
+ an element in <c><anno>Set2</anno></c> as the result of applying
+ <c><anno>SetFun</anno></c>.</p>
<pre>
1> <input>SetFun = {external, fun({_A,B,C}) -> {B,C} end},</input>
<input>R1 = sofs:relation([{a,aa,1},{b,bb,2},{c,cc,3}]),</input>
@@ -556,24 +616,27 @@ fun(S) -> sofs:partition(1, S) end
<c>difference(S1,&nbsp;restriction(F,&nbsp;S1,&nbsp;S2))</c>.</p>
</desc>
</func>
+
<func>
<name name="empty_set" arity="0"/>
<fsummary>Return the untyped empty set.</fsummary>
<desc>
- <p>Returns the <seealso marker="#sets_definition">untyped empty
+ <p>Returns the <seealso marker="#sets_definition">untyped empty
set</seealso>. <c>empty_set()</c> is equivalent to
<c>from_term([],&nbsp;['_'])</c>.</p>
</desc>
</func>
+
<func>
<name name="extension" arity="3"/>
<fsummary>Extend the domain of a binary relation.</fsummary>
<desc>
- <p>Returns the <seealso marker="#extension">extension</seealso> of
- <anno>BinRel1</anno> such that
- for each element E in <anno>Set</anno> that does not belong to the
- <seealso marker="#domain">domain</seealso> of <anno>BinRel1</anno>,
- <anno>BinRel2</anno> contains the pair (E,&nbsp;AnySet).</p>
+ <p>Returns the <seealso marker="#extension">extension</seealso> of
+ <c><anno>BinRel1</anno></c> such that for
+ each element E in <c><anno>Set</anno></c> that does not belong to the
+ <seealso marker="#domain">domain</seealso> of
+ <c><anno>BinRel1</anno></c>, <c><anno>BinRel2</anno></c> contains the
+ pair (E,&nbsp;<c>AnySet</c>).</p>
<pre>
1> <input>S = sofs:set([b,c]),</input>
<input>A = sofs:empty_set(),</input>
@@ -583,31 +646,33 @@ fun(S) -> sofs:partition(1, S) end
[{a,[1,2]},{b,[3]},{c,[]}]</pre>
</desc>
</func>
+
<func>
<name name="family" arity="1"/>
<name name="family" arity="2"/>
<fsummary>Create a family of subsets.</fsummary>
<desc>
- <p>Creates a <seealso marker="#family">family of subsets</seealso>.
- <c>family(F,&nbsp;T)</c> is equivalent to
- <c>from_term(F,&nbsp;T)</c>, if the result is a family. If
+ <p>Creates a <seealso marker="#family">family of subsets</seealso>.
+ <c>family(F,&nbsp;T)</c> is equivalent to
+ <c>from_term(F,&nbsp;T)</c> if the result is a family. If
no <seealso marker="#type">type</seealso> is explicitly
- given, <c>[{atom,&nbsp;[atom]}]</c> is used as type of the
- family.</p>
+ specified, <c>[{atom,&nbsp;[atom]}]</c> is used as the
+ family type.</p>
</desc>
</func>
+
<func>
<name name="family_difference" arity="2"/>
<fsummary>Return the difference of two families.</fsummary>
<desc>
- <p>If <anno>Family1</anno> and <anno>Family2</anno>
- are <seealso marker="#family">families</seealso>, then
- <anno>Family3</anno> is the family
+ <p>If <c><anno>Family1</anno></c> and <c><anno>Family2</anno></c>
+ are <seealso marker="#family">families</seealso>, then
+ <c><anno>Family3</anno></c> is the family
such that the index set is equal to the index set of
- <anno>Family1</anno>, and <anno>Family3</anno>[i] is the
- difference between <anno>Family1</anno>[i]
- and <anno>Family2</anno>[i] if <anno>Family2</anno> maps i,
- <anno>Family1</anno>[i] otherwise.</p>
+ <c><anno>Family1</anno></c>, and <c><anno>Family3</anno></c>[i] is
+ the difference between <c><anno>Family1</anno></c>[i]
+ and <c><anno>Family2</anno></c>[i] if <c><anno>Family2</anno></c>
+ maps i, otherwise <c><anno>Family1</anno>[i]</c>.</p>
<pre>
1> <input>F1 = sofs:family([{a,[1,2]},{b,[3,4]}]),</input>
<input>F2 = sofs:family([{b,[4,5]},{c,[6,7]}]),</input>
@@ -616,19 +681,20 @@ fun(S) -> sofs:partition(1, S) end
[{a,[1,2]},{b,[3]}]</pre>
</desc>
</func>
+
<func>
<name name="family_domain" arity="1"/>
<fsummary>Return a family of domains.</fsummary>
<desc>
- <p>If <anno>Family1</anno> is
+ <p>If <c><anno>Family1</anno></c> is
a <seealso marker="#family">family</seealso>
- and <anno>Family1</anno>[i] is a binary relation for every i
- in the index set of <anno>Family1</anno>,
- then <anno>Family2</anno> is the family with the same index
- set as <anno>Family1</anno> such
- that <anno>Family2</anno>[i] is
+ and <c><anno>Family1</anno></c>[i] is a binary relation for every i
+ in the index set of <c><anno>Family1</anno></c>,
+ then <c><anno>Family2</anno></c> is the family with the same index
+ set as <c><anno>Family1</anno></c> such
+ that <c><anno>Family2</anno></c>[i] is
the <seealso marker="#domain">domain</seealso> of
- <anno>Family1</anno>[i].</p>
+ <c><anno>Family1</anno>[i]</c>.</p>
<pre>
1> <input>FR = sofs:from_term([{a,[{1,a},{2,b},{3,c}]},{b,[]},{c,[{4,d},{5,e}]}]),</input>
<input>F = sofs:family_domain(FR),</input>
@@ -636,43 +702,46 @@ fun(S) -> sofs:partition(1, S) end
[{a,[1,2,3]},{b,[]},{c,[4,5]}]</pre>
</desc>
</func>
+
<func>
<name name="family_field" arity="1"/>
<fsummary>Return a family of fields.</fsummary>
<desc>
- <p>If <anno>Family1</anno> is
+ <p>If <c><anno>Family1</anno></c> is
a <seealso marker="#family">family</seealso>
- and <anno>Family1</anno>[i] is a binary relation for every i
- in the index set of <anno>Family1</anno>,
- then <anno>Family2</anno> is the family with the same index
- set as <anno>Family1</anno> such
- that <anno>Family2</anno>[i] is
+ and <c><anno>Family1</anno></c>[i] is a binary relation for every i
+ in the index set of <c><anno>Family1</anno></c>,
+ then <c><anno>Family2</anno></c> is the family with the same index
+ set as <c><anno>Family1</anno></c> such
+ that <c><anno>Family2</anno></c>[i] is
the <seealso marker="#field">field</seealso> of
- <anno>Family1</anno>[i].</p>
+ <c><anno>Family1</anno></c>[i].</p>
<pre>
1> <input>FR = sofs:from_term([{a,[{1,a},{2,b},{3,c}]},{b,[]},{c,[{4,d},{5,e}]}]),</input>
<input>F = sofs:family_field(FR),</input>
<input>sofs:to_external(F).</input>
[{a,[1,2,3,a,b,c]},{b,[]},{c,[4,5,d,e]}]</pre>
<p><c>family_field(Family1)</c> is equivalent to
- <c>family_union(family_domain(Family1), family_range(Family1))</c>.</p>
+ <c>family_union(family_domain(Family1),
+ family_range(Family1))</c>.</p>
</desc>
</func>
+
<func>
<name name="family_intersection" arity="1"/>
<fsummary>Return the intersection of a family
of sets of sets.</fsummary>
<desc>
- <p>If <anno>Family1</anno> is
+ <p>If <c><anno>Family1</anno></c> is
a <seealso marker="#family">family</seealso>
- and <anno>Family1</anno>[i] is a set of sets for every i in
- the index set of <anno>Family1</anno>,
- then <anno>Family2</anno> is the family with the same index
- set as <anno>Family1</anno> such
- that <anno>Family2</anno>[i] is
+ and <c><anno>Family1</anno></c>[i] is a set of sets for every i in
+ the index set of <c><anno>Family1</anno></c>,
+ then <c><anno>Family2</anno></c> is the family with the same index
+ set as <c><anno>Family1</anno></c> such
+ that <c><anno>Family2</anno></c>[i] is
the <seealso marker="#intersection_n">intersection</seealso>
- of <anno>Family1</anno>[i].</p>
- <p>If <anno>Family1</anno>[i] is an empty set for some i, then
+ of <c><anno>Family1</anno></c>[i].</p>
+ <p>If <c><anno>Family1</anno></c>[i] is an empty set for some i,
the process exits with a <c>badarg</c> message.</p>
<pre>
1> <input>F1 = sofs:from_term([{a,[[1,2,3],[2,3,4]]},{b,[[x,y,z],[x,y]]}]),</input>
@@ -681,17 +750,18 @@ fun(S) -> sofs:partition(1, S) end
[{a,[2,3]},{b,[x,y]}]</pre>
</desc>
</func>
+
<func>
<name name="family_intersection" arity="2"/>
<fsummary>Return the intersection of two families.</fsummary>
<desc>
- <p>If <anno>Family1</anno> and <anno>Family2</anno>
- are <seealso marker="#family">families</seealso>,
- then <anno>Family3</anno> is the family such that the index
- set is the intersection of <anno>Family1</anno>'s and
- <anno>Family2</anno>'s index sets,
- and <anno>Family3</anno>[i] is the intersection of
- <anno>Family1</anno>[i] and <anno>Family2</anno>[i].</p>
+ <p>If <c><anno>Family1</anno></c> and <c><anno>Family2</anno></c>
+ are <seealso marker="#family">families</seealso>,
+ then <c><anno>Family3</anno></c> is the family such that the index
+ set is the intersection of <c><anno>Family1</anno></c>:s and
+ <c><anno>Family2</anno></c>:s index sets,
+ and <c><anno>Family3</anno></c>[i] is the intersection of
+ <c><anno>Family1</anno></c>[i] and <c><anno>Family2</anno></c>[i].</p>
<pre>
1> <input>F1 = sofs:family([{a,[1,2]},{b,[3,4]},{c,[5,6]}]),</input>
<input>F2 = sofs:family([{b,[4,5]},{c,[7,8]},{d,[9,10]}]),</input>
@@ -700,17 +770,18 @@ fun(S) -> sofs:partition(1, S) end
[{b,[4]},{c,[]}]</pre>
</desc>
</func>
+
<func>
<name name="family_projection" arity="2"/>
<fsummary>Return a family of modified subsets.</fsummary>
<desc>
- <p>If <anno>Family1</anno> is
- a <seealso marker="#family">family</seealso>
- then <anno>Family2</anno> is the family with the same index
- set as <anno>Family1</anno> such
- that <anno>Family2</anno>[i] is the result of
- calling <anno>SetFun</anno> with <anno>Family1</anno>[i] as
- argument.</p>
+ <p>If <c><anno>Family1</anno></c> is
+ a <seealso marker="#family">family</seealso>,
+ then <c><anno>Family2</anno></c> is the family with the same index
+ set as <c><anno>Family1</anno></c> such
+ that <c><anno>Family2</anno></c>[i] is the result of
+ calling <c><anno>SetFun</anno></c> with <c><anno>Family1</anno></c>[i]
+ as argument.</p>
<pre>
1> <input>F1 = sofs:from_term([{a,[[1,2],[2,3]]},{b,[[]]}]),</input>
<input>F2 = sofs:family_projection(fun sofs:union/1, F1),</input>
@@ -718,19 +789,20 @@ fun(S) -> sofs:partition(1, S) end
[{a,[1,2,3]},{b,[]}]</pre>
</desc>
</func>
+
<func>
<name name="family_range" arity="1"/>
<fsummary>Return a family of ranges.</fsummary>
<desc>
- <p>If <anno>Family1</anno> is
+ <p>If <c><anno>Family1</anno></c> is
a <seealso marker="#family">family</seealso>
- and <anno>Family1</anno>[i] is a binary relation for every i
- in the index set of <anno>Family1</anno>,
- then <anno>Family2</anno> is the family with the same index
- set as <anno>Family1</anno> such
- that <anno>Family2</anno>[i] is
+ and <c><anno>Family1</anno></c>[i] is a binary relation for every i
+ in the index set of <c><anno>Family1</anno></c>,
+ then <c><anno>Family2</anno></c> is the family with the same index
+ set as <c><anno>Family1</anno></c> such
+ that <c><anno>Family2</anno></c>[i] is
the <seealso marker="#range">range</seealso> of
- <anno>Family1</anno>[i].</p>
+ <c><anno>Family1</anno></c>[i].</p>
<pre>
1> <input>FR = sofs:from_term([{a,[{1,a},{2,b},{3,c}]},{b,[]},{c,[{4,d},{5,e}]}]),</input>
<input>F = sofs:family_range(FR),</input>
@@ -738,22 +810,23 @@ fun(S) -> sofs:partition(1, S) end
[{a,[a,b,c]},{b,[]},{c,[d,e]}]</pre>
</desc>
</func>
+
<func>
<name name="family_specification" arity="2"/>
<fsummary>Select a subset of a family using a predicate.</fsummary>
<desc>
- <p>If <anno>Family1</anno> is
+ <p>If <c><anno>Family1</anno></c> is
a <seealso marker="#family">family</seealso>,
- then <anno>Family2</anno> is
+ then <c><anno>Family2</anno></c> is
the <seealso marker="#restriction">restriction</seealso> of
- <anno>Family1</anno> to those elements i of the index set
- for which <anno>Fun</anno> applied
- to <anno>Family1</anno>[i] returns
- <c>true</c>. If <anno>Fun</anno> is a
- tuple <c>{external,&nbsp;Fun2}</c>, Fun2 is applied to
+ <c><anno>Family1</anno></c> to those elements i of the index set
+ for which <c><anno>Fun</anno></c> applied
+ to <c><anno>Family1</anno></c>[i] returns
+ <c>true</c>. If <c><anno>Fun</anno></c> is a
+ tuple <c>{external,&nbsp;Fun2}</c>, then <c>Fun2</c> is applied to
the <seealso marker="#external_set">external set</seealso>
- of <anno>Family1</anno>[i], otherwise <anno>Fun</anno> is
- applied to <anno>Family1</anno>[i].</p>
+ of <c><anno>Family1</anno></c>[i], otherwise <c><anno>Fun</anno></c>
+ is applied to <c><anno>Family1</anno></c>[i].</p>
<pre>
1> <input>F1 = sofs:family([{a,[1,2,3]},{b,[1,2]},{c,[1]}]),</input>
<input>SpecFun = fun(S) -> sofs:no_elements(S) =:= 2 end,</input>
@@ -762,23 +835,24 @@ fun(S) -> sofs:partition(1, S) end
[{b,[1,2]}]</pre>
</desc>
</func>
+
<func>
<name name="family_to_digraph" arity="1"/>
<name name="family_to_digraph" arity="2"/>
<fsummary>Create a directed graph from a family.</fsummary>
<desc>
- <p>Creates a directed graph from
- the <seealso marker="#family">family</seealso> <anno>Family</anno>.
+ <p>Creates a directed graph from
+ <seealso marker="#family">family</seealso> <c><anno>Family</anno></c>.
For each pair (a,&nbsp;{b[1],&nbsp;...,&nbsp;b[n]})
- of <anno>Family</anno>, the vertex
- a as well the edges (a,&nbsp;b[i]) for
+ of <c><anno>Family</anno></c>, vertex
+ a and the edges (a,&nbsp;b[i]) for
1&nbsp;&lt;=&nbsp;i&nbsp;&lt;=&nbsp;n are added to a newly
created directed graph.</p>
- <p>If no graph type is given <seealso marker="digraph#new/0">
- digraph:new/0</seealso> is used for
- creating the directed graph, otherwise the <anno>GraphType</anno>
- argument is passed on as second argument to
- <seealso marker="digraph#new/1">digraph:new/1</seealso>.</p>
+ <p>If no graph type is specified, <seealso marker="digraph#new/0">
+ <c>digraph:new/0</c></seealso> is used for
+ creating the directed graph, otherwise argument
+ <c><anno>GraphType</anno></c> is passed on as second argument to
+ <seealso marker="digraph#new/1"><c>digraph:new/1</c></seealso>.</p>
<p>It F is a family, it holds that F is a subset of
<c>digraph_to_family(family_to_digraph(F),&nbsp;type(F))</c>.
Equality holds if <c>union_of_family(F)</c> is a subset of
@@ -787,16 +861,17 @@ fun(S) -> sofs:partition(1, S) end
a <c>cyclic</c> message.</p>
</desc>
</func>
+
<func>
<name name="family_to_relation" arity="1"/>
<fsummary>Create a binary relation from a family.</fsummary>
<desc>
- <p>If <anno>Family</anno> is
+ <p>If <c><anno>Family</anno></c> is
a <seealso marker="#family">family</seealso>,
- then <anno>BinRel</anno> is the binary relation containing
+ then <c><anno>BinRel</anno></c> is the binary relation containing
all pairs (i,&nbsp;x) such that i belongs to the index set
- of <anno>Family</anno> and x belongs
- to <anno>Family</anno>[i].</p>
+ of <c><anno>Family</anno></c> and x belongs
+ to <c><anno>Family</anno></c>[i].</p>
<pre>
1> <input>F = sofs:family([{a,[]}, {b,[1]}, {c,[2,3]}]),</input>
<input>R = sofs:family_to_relation(F),</input>
@@ -804,19 +879,20 @@ fun(S) -> sofs:partition(1, S) end
[{b,1},{c,2},{c,3}]</pre>
</desc>
</func>
+
<func>
<name name="family_union" arity="1"/>
<fsummary>Return the union of a family of sets of sets.</fsummary>
<desc>
- <p>If <anno>Family1</anno> is
+ <p>If <c><anno>Family1</anno></c> is
a <seealso marker="#family">family</seealso>
- and <anno>Family1</anno>[i] is a set of sets for each i in
- the index set of <anno>Family1</anno>,
- then <anno>Family2</anno> is the family with the same index
- set as <anno>Family1</anno> such
- that <anno>Family2</anno>[i] is
+ and <c><anno>Family1</anno></c>[i] is a set of sets for each i in
+ the index set of <c><anno>Family1</anno></c>,
+ then <c><anno>Family2</anno></c> is the family with the same index
+ set as <c><anno>Family1</anno></c> such
+ that <c><anno>Family2</anno></c>[i] is
the <seealso marker="#union_n">union</seealso> of
- <anno>Family1</anno>[i].</p>
+ <c><anno>Family1</anno></c>[i].</p>
<pre>
1> <input>F1 = sofs:from_term([{a,[[1,2],[2,3]]},{b,[[]]}]),</input>
<input>F2 = sofs:family_union(F1),</input>
@@ -826,19 +902,20 @@ fun(S) -> sofs:partition(1, S) end
<c>family_projection(fun sofs:union/1,&nbsp;F)</c>.</p>
</desc>
</func>
+
<func>
<name name="family_union" arity="2"/>
<fsummary>Return the union of two families.</fsummary>
<desc>
- <p>If <anno>Family1</anno> and <anno>Family2</anno>
- are <seealso marker="#family">families</seealso>,
- then <anno>Family3</anno> is the family such that the index
- set is the union of <anno>Family1</anno>'s
- and <anno>Family2</anno>'s index sets,
- and <anno>Family3</anno>[i] is the union
- of <anno>Family1</anno>[i] and <anno>Family2</anno>[i] if
- both maps i, <anno>Family1</anno>[i]
- or <anno>Family2</anno>[i] otherwise.</p>
+ <p>If <c><anno>Family1</anno></c> and <c><anno>Family2</anno></c>
+ are <seealso marker="#family">families</seealso>,
+ then <c><anno>Family3</anno></c> is the family such that the index
+ set is the union of <c><anno>Family1</anno></c>:s
+ and <c><anno>Family2</anno></c>:s index sets,
+ and <c><anno>Family3</anno></c>[i] is the union
+ of <c><anno>Family1</anno></c>[i] and <c><anno>Family2</anno></c>[i]
+ if both map i, otherwise <c><anno>Family1</anno></c>[i]
+ or <c><anno>Family2</anno></c>[i].</p>
<pre>
1> <input>F1 = sofs:family([{a,[1,2]},{b,[3,4]},{c,[5,6]}]),</input>
<input>F2 = sofs:family([{b,[4,5]},{c,[7,8]},{d,[9,10]}]),</input>
@@ -847,40 +924,43 @@ fun(S) -> sofs:partition(1, S) end
[{a,[1,2]},{b,[3,4,5]},{c,[5,6,7,8]},{d,[9,10]}]</pre>
</desc>
</func>
+
<func>
<name name="field" arity="1"/>
<fsummary>Return the field of a binary relation.</fsummary>
<desc>
<p>Returns the <seealso marker="#field">field</seealso> of the
- binary relation <anno>BinRel</anno>.</p>
+ binary relation <c><anno>BinRel</anno></c>.</p>
<pre>
1> <input>R = sofs:relation([{1,a},{1,b},{2,b},{2,c}]),</input>
<input>S = sofs:field(R),</input>
<input>sofs:to_external(S).</input>
[1,2,a,b,c]</pre>
- <p><c>field(R)</c> is equivalent
- to <c>union(domain(R), range(R))</c>.</p>
+ <p><c>field(R)</c> is equivalent
+ to <c>union(domain(R), range(R))</c>.</p>
</desc>
</func>
+
<func>
<name name="from_external" arity="2"/>
<fsummary>Create a set.</fsummary>
<desc>
<p>Creates a set from the <seealso marker="#external_set">external
- set</seealso> <anno>ExternalSet</anno>
- and the <seealso marker="#type">type</seealso> <anno>Type</anno>.
- It is assumed that <anno>Type</anno> is
+ set</seealso> <c><anno>ExternalSet</anno></c> and
+ the <seealso marker="#type">type</seealso> <c><anno>Type</anno></c>.
+ It is assumed that <c><anno>Type</anno></c> is
a <seealso marker="#valid_type">valid
- type</seealso> of <anno>ExternalSet</anno>.</p>
+ type</seealso> of <c><anno>ExternalSet</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="from_sets" arity="1" clause_i="1"/>
<fsummary>Create a set out of a list of sets.</fsummary>
<desc>
- <p>Returns the <seealso marker="#sets_definition">unordered
- set</seealso> containing the sets of the list
- <anno>ListOfSets</anno>.</p>
+ <p>Returns the <seealso marker="#sets_definition">unordered
+ set</seealso> containing the sets of list
+ <c><anno>ListOfSets</anno></c>.</p>
<pre>
1> <input>S1 = sofs:relation([{a,1},{b,2}]),</input>
<input>S2 = sofs:relation([{x,3},{y,4}]),</input>
@@ -889,31 +969,33 @@ fun(S) -> sofs:partition(1, S) end
[[{a,1},{b,2}],[{x,3},{y,4}]]</pre>
</desc>
</func>
+
<func>
<name name="from_sets" arity="1" clause_i="2"/>
<fsummary>Create an ordered set out of a tuple of sets.</fsummary>
<desc>
- <p>Returns the <seealso marker="#sets_definition">ordered
- set</seealso> containing the sets of the non-empty tuple
- <anno>TupleOfSets</anno>.</p>
+ <p>Returns the <seealso marker="#sets_definition">ordered
+ set</seealso> containing the sets of the non-empty tuple
+ <c><anno>TupleOfSets</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="from_term" arity="1"/>
<name name="from_term" arity="2"/>
<fsummary>Create a set.</fsummary>
<desc>
- <p><marker id="from_term"></marker>Creates an element
- of <seealso marker="#sets_definition">Sets</seealso> by
- traversing the term <anno>Term</anno>, sorting lists,
- removing duplicates and
- deriving or verifying a <seealso marker="#valid_type">valid
- type</seealso> for the so obtained external set. An
- explicitly given <seealso marker="#type">type</seealso>
- <anno>Type</anno>
+ <p><marker id="from_term"></marker>Creates an element
+ of <seealso marker="#sets_definition">Sets</seealso> by
+ traversing term <c><anno>Term</anno></c>, sorting lists,
+ removing duplicates, and
+ deriving or verifying a <seealso marker="#valid_type">valid
+ type</seealso> for the so obtained external set. An
+ explicitly specified <seealso marker="#type">type</seealso>
+ <c><anno>Type</anno></c>
can be used to limit the depth of the traversal; an atomic
- type stops the traversal, as demonstrated by this example
- where "foo" and {"foo"} are left unmodified:</p>
+ type stops the traversal, as shown by the following example
+ where <c>"foo"</c> and <c>{"foo"}</c> are left unmodified:</p>
<pre>
1> <input>S = sofs:from_term([{{"foo"},[1,1]},{"foo",[2,2]}],
[{atom,[atom]}]),</input>
@@ -921,12 +1003,12 @@ fun(S) -> sofs:partition(1, S) end
[{{"foo"},[1]},{"foo",[2]}]</pre>
<p><c>from_term</c> can be used for creating atomic or ordered
sets. The only purpose of such a set is that of later
- building unordered sets since all functions in this module
+ building unordered sets, as all functions in this module
that <em>do</em> anything operate on unordered sets.
Creating unordered sets from a collection of ordered sets
- may be the way to go if the ordered sets are big and one
+ can be the way to go if the ordered sets are big and one
does not want to waste heap by rebuilding the elements of
- the unordered set. An example showing that a set can be
+ the unordered set. The following example shows that a set can be
built "layer by layer":</p>
<pre>
1> <input>A = sofs:from_term(a),</input>
@@ -936,19 +1018,25 @@ fun(S) -> sofs:partition(1, S) end
<input>Ss = sofs:from_sets([P1,P2]),</input>
<input>sofs:to_external(Ss).</input>
[{a,[1,2,3]},{b,[4,5,6]}]</pre>
- <p>Other functions that create sets are <c>from_external/2</c>
- and <c>from_sets/1</c>. Special cases of <c>from_term/2</c>
- are <c>a_function/1,2</c>, <c>empty_set/0</c>,
- <c>family/1,2</c>, <c>relation/1,2</c>, and <c>set/1,2</c>.</p>
+ <p>Other functions that create sets are
+ <seealso marker="#from_external/2"><c>from_external/2</c></seealso>
+ and <seealso marker="#from_sets/1"><c>from_sets/1</c></seealso>.
+ Special cases of <c>from_term/2</c> are
+ <seealso marker="#a_function/1"><c>a_function/1,2</c></seealso>,
+ <seealso marker="#empty_set/0"><c>empty_set/0</c></seealso>,
+ <seealso marker="#family/1"><c>family/1,2</c></seealso>,
+ <seealso marker="#relation/1"><c>relation/1,2</c></seealso>, and
+ <seealso marker="#set/1"><c>set/1,2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="image" arity="2"/>
<fsummary>Return the image of a set under a binary relation.</fsummary>
<desc>
- <p>Returns the <seealso marker="#image">image</seealso> of the
- set <anno>Set1</anno> under the binary
- relation <anno>BinRel</anno>.</p>
+ <p>Returns the <seealso marker="#image">image</seealso> of
+ set <c><anno>Set1</anno></c> under the binary
+ relation <c><anno>BinRel</anno></c>.</p>
<pre>
1> <input>R = sofs:relation([{1,a},{2,b},{2,c},{3,d}]),</input>
<input>S1 = sofs:set([1,2]),</input>
@@ -957,32 +1045,35 @@ fun(S) -> sofs:partition(1, S) end
[a,b,c]</pre>
</desc>
</func>
+
<func>
<name name="intersection" arity="1"/>
<fsummary>Return the intersection of a set of sets.</fsummary>
<desc>
- <p>Returns
- the <seealso marker="#intersection_n">intersection</seealso> of
- the set of sets <anno>SetOfSets</anno>.</p>
+ <p>Returns
+ the <seealso marker="#intersection_n">intersection</seealso> of
+ the set of sets <c><anno>SetOfSets</anno></c>.</p>
<p>Intersecting an empty set of sets exits the process with a
<c>badarg</c> message.</p>
</desc>
</func>
+
<func>
<name name="intersection" arity="2"/>
<fsummary>Return the intersection of two sets.</fsummary>
<desc>
- <p>Returns
- the <seealso marker="#intersection">intersection</seealso> of
- <anno>Set1</anno> and <anno>Set2</anno>.</p>
+ <p>Returns
+ the <seealso marker="#intersection">intersection</seealso> of
+ <c><anno>Set1</anno></c> and <c><anno>Set2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="intersection_of_family" arity="1"/>
<fsummary>Return the intersection of a family.</fsummary>
<desc>
- <p>Returns the intersection of
- the <seealso marker="#family">family</seealso> <anno>Family</anno>.
+ <p>Returns the intersection of
+ <seealso marker="#family">family</seealso> <c><anno>Family</anno></c>.
</p>
<p>Intersecting an empty family exits the process with a
<c>badarg</c> message.</p>
@@ -993,12 +1084,13 @@ fun(S) -> sofs:partition(1, S) end
[2]</pre>
</desc>
</func>
+
<func>
<name name="inverse" arity="1"/>
<fsummary>Return the inverse of a function.</fsummary>
<desc>
<p>Returns the <seealso marker="#inverse">inverse</seealso>
- of the function <anno>Function1</anno>.</p>
+ of function <c><anno>Function1</anno></c>.</p>
<pre>
1> <input>R1 = sofs:relation([{1,a},{2,b},{3,c}]),</input>
<input>R2 = sofs:inverse(R1),</input>
@@ -1006,14 +1098,15 @@ fun(S) -> sofs:partition(1, S) end
[{a,1},{b,2},{c,3}]</pre>
</desc>
</func>
+
<func>
<name name="inverse_image" arity="2"/>
- <fsummary>Return the inverse image of a set under
+ <fsummary>Return the inverse image of a set under
a binary relation.</fsummary>
<desc>
<p>Returns the <seealso marker="#inverse_image">inverse
- image</seealso> of <anno>Set1</anno> under the binary
- relation <anno>BinRel</anno>.</p>
+ image</seealso> of <c><anno>Set1</anno></c> under the binary
+ relation <c><anno>BinRel</anno></c>.</p>
<pre>
1> <input>R = sofs:relation([{1,a},{2,b},{2,c},{3,d}]),</input>
<input>S1 = sofs:set([c,d,e]),</input>
@@ -1022,42 +1115,46 @@ fun(S) -> sofs:partition(1, S) end
[2,3]</pre>
</desc>
</func>
+
<func>
<name name="is_a_function" arity="1"/>
<fsummary>Test for a function.</fsummary>
<desc>
- <p>Returns <c>true</c> if the binary relation <anno>BinRel</anno>
+ <p>Returns <c>true</c> if the binary relation <c><anno>BinRel</anno></c>
is a <seealso marker="#function">function</seealso> or the
- untyped empty set, <c>false</c> otherwise.</p>
+ untyped empty set, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_disjoint" arity="2"/>
<fsummary>Test for disjoint sets.</fsummary>
<desc>
- <p>Returns <c>true</c> if <anno>Set1</anno>
- and <anno>Set2</anno>
- are <seealso marker="#disjoint">disjoint</seealso>, <c>false</c>
- otherwise.</p>
+ <p>Returns <c>true</c> if <c><anno>Set1</anno></c>
+ and <c><anno>Set2</anno></c>
+ are <seealso marker="#disjoint">disjoint</seealso>, otherwise
+ <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_empty_set" arity="1"/>
<fsummary>Test for an empty set.</fsummary>
<desc>
- <p>Returns <c>true</c> if <anno>AnySet</anno> is an empty
- unordered set, <c>false</c> otherwise.</p>
+ <p>Returns <c>true</c> if <c><anno>AnySet</anno></c> is an empty
+ unordered set, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_equal" arity="2"/>
<fsummary>Test two sets for equality.</fsummary>
<desc>
- <p>Returns <c>true</c> if the <anno>AnySet1</anno>
- and <anno>AnySet2</anno>
- are <seealso marker="#equal">equal</seealso>, <c>false</c>
- otherwise. This example shows that <c>==/2</c> is used when
- comparing sets for equality:</p>
+ <p>Returns <c>true</c> if <c><anno>AnySet1</anno></c>
+ and <c><anno>AnySet2</anno></c>
+ are <seealso marker="#equal">equal</seealso>, otherwise
+ <c>false</c>. The following example shows that <c>==/2</c> is
+ used when comparing sets for equality:</p>
<pre>
1> <input>S1 = sofs:set([1.0]),</input>
<input>S2 = sofs:set([1]),</input>
@@ -1065,50 +1162,55 @@ fun(S) -> sofs:partition(1, S) end
true</pre>
</desc>
</func>
+
<func>
<name name="is_set" arity="1"/>
<fsummary>Test for an unordered set.</fsummary>
<desc>
- <p>Returns <c>true</c> if <anno>AnySet</anno> is
- an <seealso marker="#sets_definition">unordered set</seealso>, and
- <c>false</c> if <anno>AnySet</anno> is an ordered set or an
+ <p>Returns <c>true</c> if <c><anno>AnySet</anno></c> is
+ an <seealso marker="#sets_definition">unordered set</seealso>, and
+ <c>false</c> if <c><anno>AnySet</anno></c> is an ordered set or an
atomic set.</p>
</desc>
</func>
+
<func>
<name name="is_sofs_set" arity="1"/>
<fsummary>Test for an unordered set.</fsummary>
<desc>
- <p>Returns <c>true</c> if <anno>Term</anno> is
+ <p>Returns <c>true</c> if <c><anno>Term</anno></c> is
an <seealso marker="#sets_definition">unordered set</seealso>, an
- ordered set or an atomic set, <c>false</c> otherwise.</p>
+ ordered set, or an atomic set, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_subset" arity="2"/>
<fsummary>Test two sets for subset.</fsummary>
<desc>
- <p>Returns <c>true</c> if <anno>Set1</anno> is
- a <seealso marker="#subset">subset</seealso>
- of <anno>Set2</anno>, <c>false</c> otherwise.</p>
+ <p>Returns <c>true</c> if <c><anno>Set1</anno></c> is
+ a <seealso marker="#subset">subset</seealso>
+ of <c><anno>Set2</anno></c>, otherwise <c>false</c>.</p>
</desc>
</func>
+
<func>
<name name="is_type" arity="1"/>
<fsummary>Test for a type.</fsummary>
<desc>
- <p>Returns <c>true</c> if the term <anno>Term</anno> is
- a <seealso marker="#type">type</seealso>.</p>
+ <p>Returns <c>true</c> if term <c><anno>Term</anno></c> is
+ a <seealso marker="#type">type</seealso>.</p>
</desc>
</func>
+
<func>
<name name="join" arity="4"/>
<fsummary>Return the join of two relations.</fsummary>
<desc>
- <p>Returns the <seealso marker="#natural_join">natural
- join</seealso> of the relations <anno>Relation1</anno>
- and <anno>Relation2</anno> on coordinates <anno>I</anno> and
- <anno>J</anno>.</p>
+ <p>Returns the <seealso marker="#natural_join">natural
+ join</seealso> of the relations <c><anno>Relation1</anno></c>
+ and <c><anno>Relation2</anno></c> on coordinates <c><anno>I</anno></c>
+ and <c><anno>J</anno></c>.</p>
<pre>
1> <input>R1 = sofs:relation([{a,x,1},{b,y,2}]),</input>
<input>R2 = sofs:relation([{1,f,g},{1,h,i},{2,3,4}]),</input>
@@ -1117,18 +1219,19 @@ true</pre>
[{a,x,1,f,g},{a,x,1,h,i},{b,y,2,3,4}]</pre>
</desc>
</func>
+
<func>
<name name="multiple_relative_product" arity="2"/>
- <fsummary>Return the multiple relative product of a tuple of binary
+ <fsummary>Return the multiple relative product of a tuple of binary
relations and a relation.</fsummary>
<desc>
- <p>If <anno>TupleOfBinRels</anno> is a non-empty tuple
+ <p>If <c><anno>TupleOfBinRels</anno></c> is a non-empty tuple
{R[1],&nbsp;...,&nbsp;R[n]} of binary relations
- and <anno>BinRel1</anno> is a binary relation,
- then <anno>BinRel2</anno> is
- the <seealso marker="#multiple_relative_product">multiple relative
- product</seealso> of the ordered set
- (R[i],&nbsp;...,&nbsp;R[n]) and <anno>BinRel1</anno>.</p>
+ and <c><anno>BinRel1</anno></c> is a binary relation,
+ then <c><anno>BinRel2</anno></c> is
+ the <seealso marker="#multiple_relative_product">multiple relative
+ product</seealso> of the ordered set
+ (R[i],&nbsp;...,&nbsp;R[n]) and <c><anno>BinRel1</anno></c>.</p>
<pre>
1> <input>Ri = sofs:relation([{a,1},{b,2},{c,3}]),</input>
<input>R = sofs:relation([{a,b},{b,c},{c,a}]),</input>
@@ -1137,22 +1240,24 @@ true</pre>
[{1,2},{2,3},{3,1}]</pre>
</desc>
</func>
+
<func>
<name name="no_elements" arity="1"/>
<fsummary>Return the number of elements of a set.</fsummary>
<desc>
<p>Returns the number of elements of the ordered or unordered
- set <anno>ASet</anno>.</p>
+ set <c><anno>ASet</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="partition" arity="1"/>
<fsummary>Return the coarsest partition given a set of sets.</fsummary>
<desc>
- <p>Returns the <seealso marker="#partition">partition</seealso> of
- the union of the set of sets <anno>SetOfSets</anno> such that two
- elements are considered equal if they belong to the same
- elements of <anno>SetOfSets</anno>.</p>
+ <p>Returns the <seealso marker="#partition">partition</seealso> of
+ the union of the set of sets <c><anno>SetOfSets</anno></c> such that
+ two elements are considered equal if they belong to the same
+ elements of <c><anno>SetOfSets</anno></c>.</p>
<pre>
1> <input>Sets1 = sofs:from_term([[a,b,c],[d,e,f],[g,h,i]]),</input>
<input>Sets2 = sofs:from_term([[b,c,d],[e,f,g],[h,i,j]]),</input>
@@ -1161,13 +1266,14 @@ true</pre>
[[a],[b,c],[d],[e,f],[g],[h,i],[j]]</pre>
</desc>
</func>
+
<func>
<name name="partition" arity="2"/>
<fsummary>Return a partition of a set.</fsummary>
<desc>
- <p>Returns the <seealso marker="#partition">partition</seealso> of
- <anno>Set</anno> such that two elements are considered equal
- if the results of applying <anno>SetFun</anno> are equal.</p>
+ <p>Returns the <seealso marker="#partition">partition</seealso> of
+ <c><anno>Set</anno></c> such that two elements are considered equal
+ if the results of applying <c><anno>SetFun</anno></c> are equal.</p>
<pre>
1> <input>Ss = sofs:from_term([[a],[b],[c,d],[e,f]]),</input>
<input>SetFun = fun(S) -> sofs:from_term(sofs:no_elements(S)) end,</input>
@@ -1176,17 +1282,18 @@ true</pre>
[[[a],[b]],[[c,d],[e,f]]]</pre>
</desc>
</func>
+
<func>
<name name="partition" arity="3"/>
<fsummary>Return a partition of a set.</fsummary>
<desc>
<p>Returns a pair of sets that, regarded as constituting a
- set, forms a <seealso marker="#partition">partition</seealso> of
- <anno>Set1</anno>. If the
- result of applying <anno>SetFun</anno> to an element
- of <anno>Set1</anno> yields an element in <anno>Set2</anno>,
- the element belongs to <anno>Set3</anno>, otherwise the
- element belongs to <anno>Set4</anno>.</p>
+ set, forms a <seealso marker="#partition">partition</seealso> of
+ <c><anno>Set1</anno></c>. If the
+ result of applying <c><anno>SetFun</anno></c> to an element of
+ <c><anno>Set1</anno></c> gives an element in <c><anno>Set2</anno></c>,
+ the element belongs to <c><anno>Set3</anno></c>, otherwise the
+ element belongs to <c><anno>Set4</anno></c>.</p>
<pre>
1> <input>R1 = sofs:relation([{1,a},{2,b},{3,c}]),</input>
<input>S = sofs:set([2,4,6]),</input>
@@ -1194,23 +1301,23 @@ true</pre>
<input>{sofs:to_external(R2),sofs:to_external(R3)}.</input>
{[{2,b}],[{1,a},{3,c}]}</pre>
<p><c>partition(F,&nbsp;S1,&nbsp;S2)</c> is equivalent to
- <c>{restriction(F,&nbsp;S1,&nbsp;S2),
+ <c>{restriction(F,&nbsp;S1,&nbsp;S2),
drestriction(F,&nbsp;S1,&nbsp;S2)}</c>.</p>
</desc>
</func>
+
<func>
<name name="partition_family" arity="2"/>
<fsummary>Return a family indexing a partition.</fsummary>
<desc>
- <p>Returns the <seealso marker="#family">family</seealso>
- <anno>Family</anno> where the indexed set is
- a <seealso marker="#partition">partition</seealso>
- of <anno>Set</anno> such that two elements are considered
- equal if the results of applying <anno>SetFun</anno> are the
- same value i. This i is the index that <anno>Family</anno>
- maps onto
- the <seealso marker="#equivalence_class">equivalence
- class</seealso>.</p>
+ <p>Returns <seealso marker="#family">family</seealso>
+ <c><anno>Family</anno></c> where the indexed set is
+ a <seealso marker="#partition">partition</seealso>
+ of <c><anno>Set</anno></c> such that two elements are considered
+ equal if the results of applying <c><anno>SetFun</anno></c> are the
+ same value i. This i is the index that <c><anno>Family</anno></c>
+ maps onto the <seealso marker="#equivalence_class">equivalence
+ class</seealso>.</p>
<pre>
1> <input>S = sofs:relation([{a,a,a,a},{a,a,b,b},{a,b,b,b}]),</input>
<input>SetFun = {external, fun({A,_,C,_}) -> {A,C} end},</input>
@@ -1219,16 +1326,16 @@ true</pre>
[{{a,a},[{a,a,a,a}]},{{a,b},[{a,a,b,b},{a,b,b,b}]}]</pre>
</desc>
</func>
+
<func>
<name name="product" arity="1"/>
<fsummary>Return the Cartesian product of a tuple of sets.</fsummary>
<desc>
- <p>Returns the <seealso marker="#Cartesian_product_tuple">Cartesian
- product</seealso> of the non-empty tuple of sets
- <anno>TupleOfSets</anno>. If (x[1],&nbsp;...,&nbsp;x[n]) is
- an element of the n-ary relation <anno>Relation</anno>, then
- x[i] is drawn from element i
- of <anno>TupleOfSets</anno>.</p>
+ <p>Returns the <seealso marker="#Cartesian_product_tuple">Cartesian
+ product</seealso> of the non-empty tuple of sets
+ <c><anno>TupleOfSets</anno></c>. If (x[1],&nbsp;...,&nbsp;x[n]) is
+ an element of the n-ary relation <c><anno>Relation</anno></c>, then
+ x[i] is drawn from element i of <c><anno>TupleOfSets</anno></c>.</p>
<pre>
1> <input>S1 = sofs:set([a,b]),</input>
<input>S2 = sofs:set([1,2]),</input>
@@ -1238,13 +1345,14 @@ true</pre>
[{a,1,x},{a,1,y},{a,2,x},{a,2,y},{b,1,x},{b,1,y},{b,2,x},{b,2,y}]</pre>
</desc>
</func>
+
<func>
<name name="product" arity="2"/>
<fsummary>Return the Cartesian product of two sets.</fsummary>
<desc>
- <p>Returns the <seealso marker="#Cartesian_product">Cartesian
- product</seealso> of <anno>Set1</anno>
- and <anno>Set2</anno>.</p>
+ <p>Returns the <seealso marker="#Cartesian_product">Cartesian
+ product</seealso> of <c><anno>Set1</anno></c>
+ and <c><anno>Set2</anno></c>.</p>
<pre>
1> <input>S1 = sofs:set([1,2]),</input>
<input>S2 = sofs:set([a,b]),</input>
@@ -1255,17 +1363,18 @@ true</pre>
<c>product({S1,&nbsp;S2})</c>.</p>
</desc>
</func>
+
<func>
<name name="projection" arity="2"/>
<fsummary>Return a set of substituted elements.</fsummary>
<desc>
<p>Returns the set created by substituting each element of
- <anno>Set1</anno> by the result of
- applying <anno>SetFun</anno> to the element.</p>
- <p>If <anno>SetFun</anno> is a number i&nbsp;&gt;=&nbsp;1 and
- <anno>Set1</anno> is a relation, then the returned set is
+ <c><anno>Set1</anno></c> by the result of
+ applying <c><anno>SetFun</anno></c> to the element.</p>
+ <p>If <c><anno>SetFun</anno></c> is a number i&nbsp;&gt;=&nbsp;1 and
+ <c><anno>Set1</anno></c> is a relation, then the returned set is
the <seealso marker="#projection">projection</seealso> of
- <anno>Set1</anno> onto coordinate i.</p>
+ <c><anno>Set1</anno></c> onto coordinate i.</p>
<pre>
1> <input>S1 = sofs:from_term([{1,a},{2,b},{3,a}]),</input>
<input>S2 = sofs:projection(2, S1),</input>
@@ -1273,12 +1382,13 @@ true</pre>
[a,b]</pre>
</desc>
</func>
+
<func>
<name name="range" arity="1"/>
<fsummary>Return the range of a binary relation.</fsummary>
<desc>
<p>Returns the <seealso marker="#range">range</seealso> of the
- binary relation <anno>BinRel</anno>.</p>
+ binary relation <c><anno>BinRel</anno></c>.</p>
<pre>
1> <input>R = sofs:relation([{1,a},{1,b},{2,b},{2,c}]),</input>
<input>S = sofs:range(R),</input>
@@ -1286,6 +1396,7 @@ true</pre>
[a,b,c]</pre>
</desc>
</func>
+
<func>
<name name="relation" arity="1"/>
<name name="relation" arity="2"/>
@@ -1293,27 +1404,28 @@ true</pre>
<desc>
<p>Creates a <seealso marker="#relation">relation</seealso>.
<c>relation(R,&nbsp;T)</c> is equivalent to
- <c>from_term(R,&nbsp;T)</c>, if T is
- a <seealso marker="#type">type</seealso> and the result is a
- relation. If <anno>Type</anno> is an integer N, then
- <c>[{atom,&nbsp;...,&nbsp;atom}])</c>, where the size of the
- tuple is N, is used as type of the relation. If no type is
- explicitly given, the size of the first tuple of
- <anno>Tuples</anno> is
+ <c>from_term(R,&nbsp;T)</c>, if T is
+ a <seealso marker="#type">type</seealso> and the result is a
+ relation. If <c><anno>Type</anno></c> is an integer N, then
+ <c>[{atom,&nbsp;...,&nbsp;atom}])</c>, where the tuple size
+ is N, is used as type of the relation. If no type is
+ explicitly specified, the size of the first tuple of
+ <c><anno>Tuples</anno></c> is
used if there is such a tuple. <c>relation([])</c> is
equivalent to <c>relation([],&nbsp;2)</c>.</p>
</desc>
</func>
+
<func>
<name name="relation_to_family" arity="1"/>
<fsummary>Create a family from a binary relation.</fsummary>
<desc>
- <p>Returns the <seealso marker="#family">family</seealso>
- <anno>Family</anno> such that the index set is equal to
- the <seealso marker="#domain">domain</seealso> of the binary
- relation <anno>BinRel</anno>, and <anno>Family</anno>[i] is
- the <seealso marker="#image">image</seealso> of the set of i
- under <anno>BinRel</anno>.</p>
+ <p>Returns <seealso marker="#family">family</seealso>
+ <c><anno>Family</anno></c> such that the index set is equal to
+ the <seealso marker="#domain">domain</seealso> of the binary
+ relation <c><anno>BinRel</anno></c>, and <c><anno>Family</anno></c>[i]
+ is the <seealso marker="#image">image</seealso> of the set of i
+ under <c><anno>BinRel</anno></c>.</p>
<pre>
1> <input>R = sofs:relation([{b,1},{c,2},{c,3}]),</input>
<input>F = sofs:relation_to_family(R),</input>
@@ -1321,20 +1433,21 @@ true</pre>
[{b,[1]},{c,[2,3]}]</pre>
</desc>
</func>
+
<func>
<name name="relative_product" arity="1"/>
<name name="relative_product" arity="2" clause_i="1"/>
<fsummary>Return the relative product of a list of binary relations
- and a binary relation.</fsummary>
+ and a binary relation.</fsummary>
<desc>
- <p>If <anno>ListOfBinRels</anno> is a non-empty list
+ <p>If <c><anno>ListOfBinRels</anno></c> is a non-empty list
[R[1],&nbsp;...,&nbsp;R[n]] of binary relations and
- <anno>BinRel1</anno>
- is a binary relation, then <anno>BinRel2</anno> is the <seealso
- marker="#tuple_relative_product">relative product</seealso>
+ <c><anno>BinRel1</anno></c>
+ is a binary relation, then <c><anno>BinRel2</anno></c> is the
+ <seealso marker="#tuple_relative_product">relative product</seealso>
of the ordered set (R[i],&nbsp;...,&nbsp;R[n]) and
- <anno>BinRel1</anno>.</p>
- <p>If <anno>BinRel1</anno> is omitted, the relation of equality
+ <c><anno>BinRel1</anno></c>.</p>
+ <p>If <c><anno>BinRel1</anno></c> is omitted, the relation of equality
between the elements of
the <seealso marker="#Cartesian_product_tuple">Cartesian
product</seealso> of the ranges of R[i],
@@ -1346,33 +1459,33 @@ true</pre>
<input>R2 = sofs:relative_product([TR, R1]),</input>
<input>sofs:to_external(R2).</input>
[{1,{a,u}},{1,{aa,u}},{2,{b,v}}]</pre>
- <p>Note that <c>relative_product([R1],&nbsp;R2)</c> is
+ <p>Notice that <c>relative_product([R1],&nbsp;R2)</c> is
different from <c>relative_product(R1,&nbsp;R2)</c>; the
- list of one element is not identified with the element
- itself.</p>
+ list of one element is not identified with the element itself.</p>
</desc>
</func>
+
<func>
<name name="relative_product" arity="2" clause_i="2"/>
- <fsummary>Return the relative product of
+ <fsummary>Return the relative product of
two binary relations.</fsummary>
<desc>
- <p><marker id="relprod_impl"></marker>Returns
- the <seealso marker="#relative_product">relative
- product</seealso> of the binary relations <anno>BinRel1</anno>
- and <anno>BinRel2</anno>.</p>
+ <p>Returns the <seealso marker="#relative_product">relative
+ product</seealso> of the binary relations <c><anno>BinRel1</anno></c>
+ and <c><anno>BinRel2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="relative_product1" arity="2"/>
- <fsummary>Return the relative_product of
+ <fsummary>Return the relative_product of
two binary relations.</fsummary>
<desc>
- <p>Returns the <seealso marker="#relative_product">relative
- product</seealso> of
- the <seealso marker="#converse">converse</seealso> of the
- binary relation <anno>BinRel1</anno> and the binary
- relation <anno>BinRel2</anno>.</p>
+ <p>Returns the <seealso marker="#relative_product">relative
+ product</seealso> of
+ the <seealso marker="#converse">converse</seealso> of the
+ binary relation <c><anno>BinRel1</anno></c> and the binary
+ relation <c><anno>BinRel2</anno></c>.</p>
<pre>
1> <input>R1 = sofs:relation([{1,a},{1,aa},{2,b}]),</input>
<input>R2 = sofs:relation([{1,u},{2,v},{3,c}]),</input>
@@ -1383,13 +1496,14 @@ true</pre>
<c>relative_product(converse(R1),&nbsp;R2)</c>.</p>
</desc>
</func>
+
<func>
<name name="restriction" arity="2"/>
<fsummary>Return a restriction of a binary relation.</fsummary>
<desc>
<p>Returns the <seealso marker="#restriction">restriction</seealso> of
- the binary relation <anno>BinRel1</anno>
- to <anno>Set</anno>.</p>
+ the binary relation <c><anno>BinRel1</anno></c>
+ to <c><anno>Set</anno></c>.</p>
<pre>
1> <input>R1 = sofs:relation([{1,a},{2,b},{3,c}]),</input>
<input>S = sofs:set([1,2,4]),</input>
@@ -1398,13 +1512,14 @@ true</pre>
[{1,a},{2,b}]</pre>
</desc>
</func>
+
<func>
<name name="restriction" arity="3"/>
<fsummary>Return a restriction of a set.</fsummary>
<desc>
- <p>Returns a subset of <anno>Set1</anno> containing those
- elements that yield an element in <anno>Set2</anno> as the
- result of applying <anno>SetFun</anno>.</p>
+ <p>Returns a subset of <c><anno>Set1</anno></c> containing those
+ elements that gives an element in <c><anno>Set2</anno></c> as the
+ result of applying <c><anno>SetFun</anno></c>.</p>
<pre>
1> <input>S1 = sofs:relation([{1,a},{2,b},{3,c}]),</input>
<input>S2 = sofs:set([b,c,d]),</input>
@@ -1413,28 +1528,30 @@ true</pre>
[{2,b},{3,c}]</pre>
</desc>
</func>
+
<func>
<name name="set" arity="1"/>
<name name="set" arity="2"/>
<fsummary>Create a set of atoms or any type of sets.</fsummary>
<desc>
- <p>Creates an <seealso marker="#sets_definition">unordered
- set</seealso>. <c>set(L,&nbsp;T)</c> is equivalent to
+ <p>Creates an <seealso marker="#sets_definition">unordered
+ set</seealso>. <c>set(L,&nbsp;T)</c> is equivalent to
<c>from_term(L,&nbsp;T)</c>, if the result is an unordered
set. If no <seealso marker="#type">type</seealso> is
- explicitly given, <c>[atom]</c> is used as type of the set.</p>
+ explicitly specified, <c>[atom]</c> is used as the set type.</p>
</desc>
</func>
+
<func>
<name name="specification" arity="2"/>
<fsummary>Select a subset using a predicate.</fsummary>
<desc>
<p>Returns the set containing every element
- of <anno>Set1</anno> for which <anno>Fun</anno>
- returns <c>true</c>. If <anno>Fun</anno> is a tuple
- <c>{external,&nbsp;Fun2}</c>, Fun2 is applied to the
+ of <c><anno>Set1</anno></c> for which <c><anno>Fun</anno></c>
+ returns <c>true</c>. If <c><anno>Fun</anno></c> is a tuple
+ <c>{external,&nbsp;Fun2}</c>, <c>Fun2</c> is applied to the
<seealso marker="#external_set">external set</seealso> of
- each element, otherwise <anno>Fun</anno> is applied to each
+ each element, otherwise <c><anno>Fun</anno></c> is applied to each
element.</p>
<pre>
1> <input>R1 = sofs:relation([{a,1},{b,2}]),</input>
@@ -1445,14 +1562,15 @@ true</pre>
[[{a,1},{b,2}]]</pre>
</desc>
</func>
+
<func>
<name name="strict_relation" arity="1"/>
- <fsummary>Return the strict relation corresponding to
+ <fsummary>Return the strict relation corresponding to
a given relation.</fsummary>
<desc>
- <p>Returns the <seealso marker="#strict_relation">strict
+ <p>Returns the <seealso marker="#strict_relation">strict
relation</seealso> corresponding to the binary
- relation <anno>BinRel1</anno>.</p>
+ relation <c><anno>BinRel1</anno></c>.</p>
<pre>
1> <input>R1 = sofs:relation([{1,1},{1,2},{2,1},{2,2}]),</input>
<input>R2 = sofs:strict_relation(R1),</input>
@@ -1460,13 +1578,14 @@ true</pre>
[{1,2},{2,1}]</pre>
</desc>
</func>
+
<func>
<name name="substitution" arity="2"/>
<fsummary>Return a function with a given set as domain.</fsummary>
<desc>
<p>Returns a function, the domain of which
- is <anno>Set1</anno>. The value of an element of the domain
- is the result of applying <anno>SetFun</anno> to the
+ is <c><anno>Set1</anno></c>. The value of an element of the domain
+ is the result of applying <c><anno>SetFun</anno></c> to the
element.</p>
<pre>
1> <input>L = [{a,1},{b,2}].</input>
@@ -1483,24 +1602,24 @@ true</pre>
1> <input>I = sofs:substitution(fun(A) -> A end, sofs:set([a,b,c])),</input>
<input>sofs:to_external(I).</input>
[{a,a},{b,b},{c,c}]</pre>
- <p>Let SetOfSets be a set of sets and BinRel a binary
- relation. The function that maps each element Set of
- SetOfSets onto the <seealso marker="#image">image</seealso>
- of Set under BinRel is returned by this function:</p>
+ <p>Let <c>SetOfSets</c> be a set of sets and <c>BinRel</c> a binary
+ relation. The function that maps each element <c>Set</c> of
+ <c>SetOfSets</c> onto the <seealso marker="#image">image</seealso>
+ of <c>Set</c> under <c>BinRel</c> is returned by the following
+ function:</p>
<pre>
images(SetOfSets, BinRel) ->
Fun = fun(Set) -> sofs:image(BinRel, Set) end,
sofs:substitution(Fun, SetOfSets).</pre>
- <p>Here might be the place to reveal something that was more
- or less stated before, namely that external unordered sets
- are represented as sorted lists. As a consequence, creating
- the image of a set under a relation R may traverse all
+ <p>External unordered sets are represented as sorted lists. So,
+ creating the image of a set under a relation R can traverse all
elements of R (to that comes the sorting of results, the
- image). In <c>images/2</c>, BinRel will be traversed once
- for each element of SetOfSets, which may take too long. The
- following efficient function could be used instead under the
- assumption that the image of each element of SetOfSets under
- BinRel is non-empty:</p>
+ image). In <seealso marker="#image/2"><c>image/2</c></seealso>,
+ <c>BinRel</c> is traversed once
+ for each element of <c>SetOfSets</c>, which can take too long. The
+ following efficient function can be used instead under the
+ assumption that the image of each element of <c>SetOfSets</c> under
+ <c>BinRel</c> is non-empty:</p>
<pre>
images2(SetOfSets, BinRel) ->
CR = sofs:canonical_relation(SetOfSets),
@@ -1508,13 +1627,14 @@ images2(SetOfSets, BinRel) ->
sofs:relation_to_family(R).</pre>
</desc>
</func>
+
<func>
<name name="symdiff" arity="2"/>
<fsummary>Return the symmetric difference of two sets.</fsummary>
<desc>
- <p>Returns the <seealso marker="#symmetric_difference">symmetric
+ <p>Returns the <seealso marker="#symmetric_difference">symmetric
difference</seealso> (or the Boolean sum)
- of <anno>Set1</anno> and <anno>Set2</anno>.</p>
+ of <c><anno>Set1</anno></c> and <c><anno>Set2</anno></c>.</p>
<pre>
1> <input>S1 = sofs:set([1,2,3]),</input>
<input>S2 = sofs:set([2,3,4]),</input>
@@ -1523,68 +1643,81 @@ images2(SetOfSets, BinRel) ->
[1,4]</pre>
</desc>
</func>
+
<func>
<name name="symmetric_partition" arity="2"/>
<fsummary>Return a partition of two sets.</fsummary>
<desc>
- <p>Returns a triple of sets: <anno>Set3</anno> contains the
- elements of <anno>Set1</anno> that do not belong
- to <anno>Set2</anno>; <anno>Set4</anno> contains the
- elements of <anno>Set1</anno> that belong
- to <anno>Set2</anno>; <anno>Set5</anno> contains the
- elements of <anno>Set2</anno> that do not belong
- to <anno>Set1</anno>.</p>
+ <p>Returns a triple of sets:</p>
+ <list type="bulleted">
+ <item><c><anno>Set3</anno></c> contains the elements of
+ <c><anno>Set1</anno></c> that do not belong to
+ <c><anno>Set2</anno></c>.
+ </item>
+ <item><c><anno>Set4</anno></c> contains the elements of
+ <c><anno>Set1</anno></c> that belong to <c><anno>Set2</anno></c>.
+ </item>
+ <item><c><anno>Set5</anno></c> contains the elements of
+ <c><anno>Set2</anno></c> that do not belong to
+ <c><anno>Set1</anno></c>.
+ </item>
+ </list>
</desc>
</func>
+
<func>
<name name="to_external" arity="1"/>
<fsummary>Return the elements of a set.</fsummary>
<desc>
- <p>Returns the <seealso marker="#external_set">external
- set</seealso> of an atomic, ordered or unordered set.</p>
+ <p>Returns the <seealso marker="#external_set">external
+ set</seealso> of an atomic, ordered, or unordered set.</p>
</desc>
</func>
+
<func>
<name name="to_sets" arity="1"/>
- <fsummary>Return a list or a tuple of the elements of set.</fsummary>
+ <fsummary>Return a list or a tuple of the elements of a set.</fsummary>
<desc>
- <p>Returns the elements of the ordered set <anno>ASet</anno>
+ <p>Returns the elements of the ordered set <c><anno>ASet</anno></c>
as a tuple of sets, and the elements of the unordered set
- <anno>ASet</anno> as a sorted list of sets without
+ <c><anno>ASet</anno></c> as a sorted list of sets without
duplicates.</p>
</desc>
</func>
+
<func>
<name name="type" arity="1"/>
<fsummary>Return the type of a set.</fsummary>
<desc>
<p>Returns the <seealso marker="#type">type</seealso> of an
- atomic, ordered or unordered set.</p>
+ atomic, ordered, or unordered set.</p>
</desc>
</func>
+
<func>
<name name="union" arity="1"/>
<fsummary>Return the union of a set of sets.</fsummary>
<desc>
<p>Returns the <seealso marker="#union_n">union</seealso> of the
- set of sets <anno>SetOfSets</anno>.</p>
+ set of sets <c><anno>SetOfSets</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="union" arity="2"/>
<fsummary>Return the union of two sets.</fsummary>
<desc>
<p>Returns the <seealso marker="#union">union</seealso> of
- <anno>Set1</anno> and <anno>Set2</anno>.</p>
+ <c><anno>Set1</anno></c> and <c><anno>Set2</anno></c>.</p>
</desc>
</func>
+
<func>
<name name="union_of_family" arity="1"/>
<fsummary>Return the union of a family.</fsummary>
<desc>
- <p>Returns the union of
- the <seealso marker="#family">family</seealso> <anno>Family</anno>.
- </p>
+ <p>Returns the union of <seealso marker="#family">family</seealso>
+ <c><anno>Family</anno></c>.</p>
<pre>
1> <input>F = sofs:family([{a,[0,2,4]},{b,[0,1,2]},{c,[2,3]}]),</input>
<input>S = sofs:union_of_family(F),</input>
@@ -1592,16 +1725,17 @@ images2(SetOfSets, BinRel) ->
[0,1,2,3,4]</pre>
</desc>
</func>
+
<func>
<name name="weak_relation" arity="1"/>
- <fsummary>Return the weak relation corresponding to
+ <fsummary>Return the weak relation corresponding to
a given relation.</fsummary>
<desc>
<p>Returns a subset S of the <seealso marker="#weak_relation">weak
relation</seealso> W
- corresponding to the binary relation <anno>BinRel1</anno>.
+ corresponding to the binary relation <c><anno>BinRel1</anno></c>.
Let F be the <seealso marker="#field">field</seealso> of
- <anno>BinRel1</anno>. The
+ <c><anno>BinRel1</anno></c>. The
subset S is defined so that x S y if x W y for some x in F
and for some y in F.</p>
<pre>
@@ -1615,11 +1749,11 @@ images2(SetOfSets, BinRel) ->
<section>
<title>See Also</title>
- <p><seealso marker="dict">dict(3)</seealso>,
- <seealso marker="digraph">digraph(3)</seealso>,
- <seealso marker="orddict">orddict(3)</seealso>,
- <seealso marker="ordsets">ordsets(3)</seealso>,
- <seealso marker="sets">sets(3)</seealso></p>
+ <p><seealso marker="dict"><c>dict(3)</c></seealso>,
+ <seealso marker="digraph"><c>digraph(3)</c></seealso>,
+ <seealso marker="orddict"><c>orddict(3)</c></seealso>,
+ <seealso marker="ordsets"><c>ordsets(3)</c></seealso>,
+ <seealso marker="sets"><c>sets(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/stdlib_app.xml b/lib/stdlib/doc/src/stdlib_app.xml
index 5508be9c5d..f857cc394b 100644
--- a/lib/stdlib/doc/src/stdlib_app.xml
+++ b/lib/stdlib/doc/src/stdlib_app.xml
@@ -29,38 +29,38 @@
<rev></rev>
</header>
<app>STDLIB</app>
- <appsummary>The STDLIB Application</appsummary>
+ <appsummary>The STDLIB application.</appsummary>
<description>
- <p>The STDLIB is mandatory in the sense that the minimal system
- based on Erlang/OTP consists of Kernel and STDLIB. The STDLIB
- application contains no services.</p>
+ <p>The STDLIB application is mandatory in the sense that the minimal
+ system based on Erlang/OTP consists of Kernel and STDLIB.
+ The STDLIB application contains no services.</p>
</description>
<section>
<title>Configuration</title>
<p>The following configuration parameters are defined for the STDLIB
- application. See <c>app(4)</c> for more information about
- configuration parameters.</p>
+ application. For more information about configuration parameters, see the
+ <seealso marker="kernel:app"><c>app(4)</c></seealso> module in Kernel.</p>
+
<taglist>
<tag><c>shell_esc = icl | abort</c></tag>
<item>
- <p>This parameter can be used to alter the behaviour of
- the Erlang shell when ^G is pressed.</p>
+ <p>Can be used to change the behavior of the Erlang shell when
+ <em>^G</em> is pressed.</p>
</item>
<tag><c>restricted_shell = module()</c></tag>
<item>
- <p>This parameter can be used to run the Erlang shell
- in restricted mode.</p>
+ <p>Can be used to run the Erlang shell in restricted mode.</p>
</item>
<tag><c>shell_catch_exception = boolean()</c></tag>
<item>
- <p>This parameter can be used to set the exception handling
- of the Erlang shell's evaluator process.</p>
+ <p>Can be used to set the exception handling of the evaluator process of
+ Erlang shell.</p>
</item>
<tag><c>shell_history_length = integer() >= 0</c></tag>
<item>
- <p>This parameter can be used to determine how many
- commands are saved by the Erlang shell.</p>
+ <p>Can be used to determine how many commands are saved by the Erlang
+ shell.</p>
</item>
<tag><c>shell_prompt_func = {Mod, Func} | default</c></tag>
<item>
@@ -69,27 +69,26 @@
<item><c>Mod = atom()</c></item>
<item><c>Func = atom()</c></item>
</list>
- <p>This parameter can be used to set a customized
- Erlang shell prompt function.</p>
+ <p>Can be used to set a customized Erlang shell prompt function.</p>
</item>
<tag><c>shell_saved_results = integer() >= 0</c></tag>
<item>
- <p>This parameter can be used to determine how many
- results are saved by the Erlang shell.</p>
+ <p>Can be used to determine how many results are saved by the Erlang
+ shell.</p>
</item>
<tag><c>shell_strings = boolean()</c></tag>
<item>
- <p>This parameter can be used to determine how the Erlang
- shell outputs lists of integers.</p>
+ <p>Can be used to determine how the Erlang shell outputs lists of
+ integers.</p>
</item>
</taglist>
</section>
<section>
<title>See Also</title>
- <p><seealso marker="kernel:app">app(4)</seealso>,
- <seealso marker="kernel:application">application(3)</seealso>,
- <seealso marker="shell">shell(3)</seealso>, </p>
+ <p><seealso marker="kernel:app"><c>app(4)</c></seealso>,
+ <seealso marker="kernel:application"><c>application(3)</c></seealso>,
+ <seealso marker="shell">shell(3)</seealso></p>
</section>
</appref>
diff --git a/lib/stdlib/doc/src/string.xml b/lib/stdlib/doc/src/string.xml
index a9ecb60244..dddedf1132 100644
--- a/lib/stdlib/doc/src/string.xml
+++ b/lib/stdlib/doc/src/string.xml
@@ -24,306 +24,372 @@
<title>string</title>
<prepared>Robert Virding</prepared>
- <responsible>Bjarne Dacker</responsible>
+ <responsible>Bjarne D&auml;cker</responsible>
<docno>1</docno>
<approved>Bjarne D&auml;cker</approved>
<checked></checked>
- <date>96-09-28</date>
+ <date>1996-09-28</date>
<rev>A</rev>
- <file>string.sgml</file>
+ <file>string.xml</file>
</header>
<module>string</module>
- <modulesummary>String Processing Functions</modulesummary>
+ <modulesummary>String processing functions.</modulesummary>
<description>
- <p>This module contains functions for string processing.</p>
+ <p>This module provides functions for string processing.</p>
</description>
+
<funcs>
<func>
- <name name="len" arity="1"/>
- <fsummary>Return the length of a string</fsummary>
+ <name name="centre" arity="2"/>
+ <name name="centre" arity="3"/>
+ <fsummary>Center a string.</fsummary>
<desc>
- <p>Returns the number of characters in the string.</p>
+ <p>Returns a string, where <c><anno>String</anno></c> is centered in the
+ string and surrounded by blanks or <c><anno>Character</anno></c>.
+ The resulting string has length <c><anno>Number</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="equal" arity="2"/>
- <fsummary>Test string equality</fsummary>
+ <name name="chars" arity="2"/>
+ <name name="chars" arity="3"/>
+ <fsummary>Returns a string consisting of numbers of characters.</fsummary>
<desc>
- <p>Tests whether two strings are equal. Returns <c>true</c> if
- they are, otherwise <c>false</c>.</p>
+ <p>Returns a string consisting of <c><anno>Number</anno></c> characters
+ <c><anno>Character</anno></c>. Optionally, the string can end with
+ string <c><anno>Tail</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="concat" arity="2"/>
- <fsummary>Concatenate two strings</fsummary>
+ <name name="chr" arity="2"/>
+ <fsummary>Return the index of the first occurrence of
+ a character in a string.</fsummary>
<desc>
- <p>Concatenates two strings to form a new string. Returns the
- new string.</p>
+ <p>Returns the index of the first occurrence of
+ <c><anno>Character</anno></c> in <c><anno>String</anno></c>. Returns
+ <c>0</c> if <c><anno>Character</anno></c> does not occur.</p>
</desc>
</func>
+
<func>
- <name name="chr" arity="2"/>
- <name name="rchr" arity="2"/>
- <fsummary>Return the index of the first/last occurrence of<c>Character</c>in <c>String</c></fsummary>
+ <name name="concat" arity="2"/>
+ <fsummary>Concatenate two strings.</fsummary>
<desc>
- <p>Returns the index of the first/last occurrence of
- <c><anno>Character</anno></c> in <c><anno>String</anno></c>. <c>0</c> is returned if <c><anno>Character</anno></c> does not
- occur.</p>
+ <p>Concatenates <c><anno>String1</anno></c> and
+ <c><anno>String2</anno></c> to form a new string
+ <c><anno>String3</anno></c>, which is returned.</p>
</desc>
</func>
+
<func>
- <name name="str" arity="2"/>
- <name name="rstr" arity="2"/>
- <fsummary>Find the index of a substring</fsummary>
+ <name name="copies" arity="2"/>
+ <fsummary>Copy a string.</fsummary>
<desc>
- <p>Returns the position where the first/last occurrence of
- <c><anno>SubString</anno></c> begins in <c><anno>String</anno></c>. <c>0</c> is returned if <c><anno>SubString</anno></c>
- does not exist in <c><anno>String</anno></c>.
- For example:</p>
- <code type="none">
-> string:str(" Hello Hello World World ", "Hello World").
-8 </code>
+ <p>Returns a string containing <c><anno>String</anno></c> repeated
+ <c><anno>Number</anno></c> times.</p>
</desc>
</func>
+
<func>
- <name name="span" arity="2"/>
<name name="cspan" arity="2"/>
- <fsummary>Span characters at start of string</fsummary>
+ <fsummary>Span characters at start of a string.</fsummary>
<desc>
<p>Returns the length of the maximum initial segment of
- <c><anno>String</anno></c>, which consists entirely of characters from (not
- from) <c><anno>Chars</anno></c>.</p>
- <p>For example:</p>
+ <c><anno>String</anno></c>, which consists entirely of characters
+ not from <c><anno>Chars</anno></c>.</p>
+ <p><em>Example:</em></p>
<code type="none">
-> string:span("\t abcdef", " \t").
-5
> string:cspan("\t abcdef", " \t").
-0 </code>
+0</code>
</desc>
</func>
+
<func>
- <name name="substr" arity="2"/>
- <name name="substr" arity="3"/>
- <fsummary>Return a substring of <c>String</c></fsummary>
+ <name name="equal" arity="2"/>
+ <fsummary>Test string equality.</fsummary>
+ <desc>
+ <p>Returns <c>true</c> if <c><anno>String1</anno></c> and
+ <c><anno>String2</anno></c> are equal, otherwise <c>false</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="join" arity="2"/>
+ <fsummary>Join a list of strings with separator.</fsummary>
<desc>
- <p>Returns a substring of <c><anno>String</anno></c>, starting at the
- position <c><anno>Start</anno></c>, and ending at the end of the string or
- at length <c><anno>Length</anno></c>.</p>
- <p>For example:</p>
+ <p>Returns a string with the elements of <c><anno>StringList</anno></c>
+ separated by the string in <c><anno>Separator</anno></c>.</p>
+ <p><em>Example:</em></p>
<code type="none">
-> substr("Hello World", 4, 5).
-"lo Wo" </code>
+> join(["one", "two", "three"], ", ").
+"one, two, three"</code>
</desc>
</func>
+
<func>
- <name name="tokens" arity="2"/>
- <fsummary>Split string into tokens</fsummary>
+ <name name="left" arity="2"/>
+ <name name="left" arity="3"/>
+ <fsummary>Adjust left end of a string.</fsummary>
<desc>
- <p>Returns a list of tokens in <c><anno>String</anno></c>, separated by the
- characters in <c><anno>SeparatorList</anno></c>.</p>
- <p>For example:</p>
+ <p>Returns <c><anno>String</anno></c> with the length adjusted in
+ accordance with <c><anno>Number</anno></c>. The left margin is
+ fixed. If <c>length(<anno>String</anno>)</c> &lt;
+ <c><anno>Number</anno></c>, then <c><anno>String</anno></c> is padded
+ with blanks or <c><anno>Character</anno></c>s.</p>
+ <p><em>Example:</em></p>
<code type="none">
-> tokens("abc defxxghix jkl", "x ").
-["abc", "def", "ghi", "jkl"] </code>
- <p>Note that, as shown in the example above, two or more
- adjacent separator characters in <c><anno>String</anno></c>
- will be treated as one. That is, there will not be any empty
- strings in the resulting list of tokens.</p>
+> string:left("Hello",10,$.).
+"Hello....."</code>
</desc>
</func>
+
<func>
- <name name="join" arity="2"/>
- <fsummary>Join a list of strings with separator</fsummary>
+ <name name="len" arity="1"/>
+ <fsummary>Return the length of a string.</fsummary>
<desc>
- <p>Returns a string with the elements of <c><anno>StringList</anno></c>
- separated by the string in <c><anno>Separator</anno></c>.</p>
- <p>For example:</p>
- <code type="none">
-> join(["one", "two", "three"], ", ").
-"one, two, three" </code>
+ <p>Returns the number of characters in <c><anno>String</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="chars" arity="2"/>
- <name name="chars" arity="3"/>
- <fsummary>Returns a string consisting of numbers of characters</fsummary>
+ <name name="rchr" arity="2"/>
+ <fsummary>Return the index of the last occurrence of
+ a character in a string.</fsummary>
<desc>
- <p>Returns a string consisting of <c><anno>Number</anno></c> of characters
- <c><anno>Character</anno></c>. Optionally, the string can end with the
- string <c><anno>Tail</anno></c>.</p>
+ <p>Returns the index of the last occurrence of
+ <c><anno>Character</anno></c> in <c><anno>String</anno></c>. Returns
+ <c>0</c> if <c><anno>Character</anno></c> does not occur.</p>
</desc>
</func>
+
<func>
- <name name="copies" arity="2"/>
- <fsummary>Copy a string</fsummary>
+ <name name="right" arity="2"/>
+ <name name="right" arity="3"/>
+ <fsummary>Adjust right end of a string.</fsummary>
<desc>
- <p>Returns a string containing <c><anno>String</anno></c> repeated
- <c><anno>Number</anno></c> times.</p>
+ <p>Returns <c><anno>String</anno></c> with the length adjusted in
+ accordance with <c><anno>Number</anno></c>. The right margin is
+ fixed. If the length of <c>(<anno>String</anno>)</c> &lt;
+ <c><anno>Number</anno></c>, then <c><anno>String</anno></c> is padded
+ with blanks or <c><anno>Character</anno></c>s.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
+> string:right("Hello", 10, $.).
+".....Hello"</code>
</desc>
</func>
+
<func>
- <name name="words" arity="1"/>
- <name name="words" arity="2"/>
- <fsummary>Count blank separated words</fsummary>
+ <name name="rstr" arity="2"/>
+ <fsummary>Find the index of a substring.</fsummary>
<desc>
- <p>Returns the number of words in <c><anno>String</anno></c>, separated by
- blanks or <c><anno>Character</anno></c>.</p>
- <p>For example:</p>
+ <p>Returns the position where the last occurrence of
+ <c><anno>SubString</anno></c> begins in <c><anno>String</anno></c>.
+ Returns <c>0</c> if <c><anno>SubString</anno></c>
+ does not exist in <c><anno>String</anno></c>.</p>
+ <p><em>Example:</em></p>
<code type="none">
-> words(" Hello old boy!", $o).
-4 </code>
+> string:rstr(" Hello Hello World World ", "Hello World").
+8</code>
</desc>
</func>
+
<func>
- <name name="sub_word" arity="2"/>
- <name name="sub_word" arity="3"/>
- <fsummary>Extract subword</fsummary>
+ <name name="span" arity="2"/>
+ <fsummary>Span characters at start of a string.</fsummary>
<desc>
- <p>Returns the word in position <c><anno>Number</anno></c> of <c><anno>String</anno></c>.
- Words are separated by blanks or <c><anno>Character</anno></c>s.</p>
- <p>For example:</p>
+ <p>Returns the length of the maximum initial segment of
+ <c><anno>String</anno></c>, which consists entirely of characters
+ from <c><anno>Chars</anno></c>.</p>
+ <p><em>Example:</em></p>
<code type="none">
-> string:sub_word(" Hello old boy !",3,$o).
-"ld b" </code>
+> string:span("\t abcdef", " \t").
+5</code>
</desc>
</func>
+
+ <func>
+ <name name="str" arity="2"/>
+ <fsummary>Find the index of a substring.</fsummary>
+ <desc>
+ <p>Returns the position where the first occurrence of
+ <c><anno>SubString</anno></c> begins in <c><anno>String</anno></c>.
+ Returns <c>0</c> if <c><anno>SubString</anno></c>
+ does not exist in <c><anno>String</anno></c>.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
+> string:str(" Hello Hello World World ", "Hello World").
+8</code>
+ </desc>
+ </func>
+
<func>
<name name="strip" arity="1"/>
<name name="strip" arity="2"/>
<name name="strip" arity="3"/>
- <fsummary>Strip leading or trailing characters</fsummary>
+ <fsummary>Strip leading or trailing characters.</fsummary>
<desc>
<p>Returns a string, where leading and/or trailing blanks or a
number of <c><anno>Character</anno></c> have been removed.
- <c><anno>Direction</anno></c> can be <c>left</c>, <c>right</c>, or
- <c>both</c> and indicates from which direction blanks are to be
- removed. The function <c>strip/1</c> is equivalent to
+ <c><anno>Direction</anno></c>, which can be <c>left</c>, <c>right</c>,
+ or <c>both</c>, indicates from which direction blanks are to be
+ removed. <c>strip/1</c> is equivalent to
<c>strip(String, both)</c>.</p>
- <p>For example:</p>
+ <p><em>Example:</em></p>
<code type="none">
> string:strip("...Hello.....", both, $.).
-"Hello" </code>
+"Hello"</code>
</desc>
</func>
+
<func>
- <name name="left" arity="2"/>
- <name name="left" arity="3"/>
- <fsummary>Adjust left end of string</fsummary>
+ <name name="sub_string" arity="2"/>
+ <name name="sub_string" arity="3"/>
+ <fsummary>Extract a substring.</fsummary>
<desc>
- <p>Returns the <c><anno>String</anno></c> with the length adjusted in
- accordance with <c><anno>Number</anno></c>. The left margin is
- fixed. If the <c>length(<anno>String</anno>)</c> &lt; <c><anno>Number</anno></c>,
- <c><anno>String</anno></c> is padded with blanks or <c><anno>Character</anno></c>s.</p>
- <p>For example:</p>
+ <p>Returns a substring of <c><anno>String</anno></c>, starting at
+ position <c><anno>Start</anno></c> to the end of the string, or to
+ and including position <c><anno>Stop</anno></c>.</p>
+ <p><em>Example:</em></p>
<code type="none">
-> string:left("Hello",10,$.).
-"Hello....." </code>
+sub_string("Hello World", 4, 8).
+"lo Wo"</code>
</desc>
</func>
+
<func>
- <name name="right" arity="2"/>
- <name name="right" arity="3"/>
- <fsummary>Adjust right end of string</fsummary>
+ <name name="substr" arity="2"/>
+ <name name="substr" arity="3"/>
+ <fsummary>Return a substring of a string.</fsummary>
<desc>
- <p>Returns the <c><anno>String</anno></c> with the length adjusted in
- accordance with <c><anno>Number</anno></c>. The right margin is
- fixed. If the length of <c>(<anno>String</anno>)</c> &lt; <c><anno>Number</anno></c>,
- <c><anno>String</anno></c> is padded with blanks or <c><anno>Character</anno></c>s.</p>
- <p>For example:</p>
+ <p>Returns a substring of <c><anno>String</anno></c>, starting at
+ position <c><anno>Start</anno></c>, and ending at the end of the
+ string or at length <c><anno>Length</anno></c>.</p>
+ <p><em>Example:</em></p>
<code type="none">
-> string:right("Hello", 10, $.).
-".....Hello" </code>
- </desc>
- </func>
- <func>
- <name name="centre" arity="2"/>
- <name name="centre" arity="3"/>
- <fsummary>Center a string</fsummary>
- <desc>
- <p>Returns a string, where <c><anno>String</anno></c> is centred in the
- string and surrounded by blanks or characters. The resulting
- string will have the length <c><anno>Number</anno></c>.</p>
+> substr("Hello World", 4, 5).
+"lo Wo"</code>
</desc>
</func>
+
<func>
- <name name="sub_string" arity="2"/>
- <name name="sub_string" arity="3"/>
- <fsummary>Extract a substring</fsummary>
+ <name name="sub_word" arity="2"/>
+ <name name="sub_word" arity="3"/>
+ <fsummary>Extract subword.</fsummary>
<desc>
- <p>Returns a substring of <c><anno>String</anno></c>, starting at the
- position <c><anno>Start</anno></c> to the end of the string, or to and
- including the <c><anno>Stop</anno></c> position.</p>
- <p>For example:</p>
+ <p>Returns the word in position <c><anno>Number</anno></c> of
+ <c><anno>String</anno></c>. Words are separated by blanks or
+ <c><anno>Character</anno></c>s.</p>
+ <p><em>Example:</em></p>
<code type="none">
-sub_string("Hello World", 4, 8).
-"lo Wo" </code>
+> string:sub_word(" Hello old boy !",3,$o).
+"ld b"</code>
</desc>
</func>
+
<func>
<name name="to_float" arity="1"/>
- <fsummary>Returns a float whose text representation is the integers (ASCII values) in String.</fsummary>
+ <fsummary>Returns a float whose text representation is the integers
+ (ASCII values) in a string.</fsummary>
<desc>
- <p>Argument <c><anno>String</anno></c> is expected to start with a valid text
- represented float (the digits being ASCII values). Remaining characters
- in the string after the float are returned in <c><anno>Rest</anno></c>.</p>
- <p>Example:</p>
+ <p>Argument <c><anno>String</anno></c> is expected to start with a
+ valid text represented float (the digits are ASCII values).
+ Remaining characters in the string after the float are returned in
+ <c><anno>Rest</anno></c>.</p>
+ <p><em>Example:</em></p>
<code type="none">
- > {F1,Fs} = string:to_float("1.0-1.0e-1"),
- > {F2,[]} = string:to_float(Fs),
- > F1+F2.
- 0.9
- > string:to_float("3/2=1.5").
- {error,no_float}
- > string:to_float("-1.5eX").
- {-1.5,"eX"}</code>
+> {F1,Fs} = string:to_float("1.0-1.0e-1"),
+> {F2,[]} = string:to_float(Fs),
+> F1+F2.
+0.9
+> string:to_float("3/2=1.5").
+{error,no_float}
+> string:to_float("-1.5eX").
+{-1.5,"eX"}</code>
</desc>
</func>
+
<func>
<name name="to_integer" arity="1"/>
- <fsummary>Returns an integer whose text representation is the integers (ASCII values) in String.</fsummary>
+ <fsummary>Returns an integer whose text representation is the integers
+ (ASCII values) in a string.</fsummary>
<desc>
- <p>Argument <c><anno>String</anno></c> is expected to start with a valid text
- represented integer (the digits being ASCII values). Remaining characters
- in the string after the integer are returned in <c><anno>Rest</anno></c>.</p>
- <p>Example:</p>
+ <p>Argument <c><anno>String</anno></c> is expected to start with a
+ valid text represented integer (the digits are ASCII values).
+ Remaining characters in the string after the integer are returned in
+ <c><anno>Rest</anno></c>.</p>
+ <p><em>Example:</em></p>
<code type="none">
- > {I1,Is} = string:to_integer("33+22"),
- > {I2,[]} = string:to_integer(Is),
- > I1-I2.
- 11
- > string:to_integer("0.5").
- {0,".5"}
- > string:to_integer("x=2").
- {error,no_integer}</code>
+> {I1,Is} = string:to_integer("33+22"),
+> {I2,[]} = string:to_integer(Is),
+> I1-I2.
+11
+> string:to_integer("0.5").
+{0,".5"}
+> string:to_integer("x=2").
+{error,no_integer}</code>
</desc>
</func>
+
<func>
<name name="to_lower" arity="1" clause_i="1"/>
<name name="to_lower" arity="1" clause_i="2"/>
<name name="to_upper" arity="1" clause_i="1"/>
<name name="to_upper" arity="1" clause_i="2"/>
- <fsummary>Convert case of string (ISO/IEC 8859-1)</fsummary>
+ <fsummary>Convert case of string (ISO/IEC 8859-1).</fsummary>
<type variable="String" name_i="1"/>
<type variable="Result" name_i="1"/>
<type variable="Char"/>
<type variable="CharResult"/>
<desc>
- <p>The given string or character is case-converted. Note that
- the supported character set is ISO/IEC 8859-1 (a.k.a. Latin 1),
- all values outside this set is unchanged</p>
+ <p>The specified string or character is case-converted. Notice that
+ the supported character set is ISO/IEC 8859-1 (also called Latin 1);
+ all values outside this set are unchanged</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="tokens" arity="2"/>
+ <fsummary>Split string into tokens.</fsummary>
+ <desc>
+ <p>Returns a list of tokens in <c><anno>String</anno></c>, separated
+ by the characters in <c><anno>SeparatorList</anno></c>.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
+> tokens("abc defxxghix jkl", "x ").
+["abc", "def", "ghi", "jkl"]</code>
+ <p>Notice that, as shown in this example, two or more
+ adjacent separator characters in <c><anno>String</anno></c>
+ are treated as one. That is, there are no empty
+ strings in the resulting list of tokens.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="words" arity="1"/>
+ <name name="words" arity="2"/>
+ <fsummary>Count blank separated words.</fsummary>
+ <desc>
+ <p>Returns the number of words in <c><anno>String</anno></c>, separated
+ by blanks or <c><anno>Character</anno></c>.</p>
+ <p><em>Example:</em></p>
+ <code type="none">
+> words(" Hello old boy!", $o).
+4</code>
</desc>
</func>
</funcs>
<section>
<title>Notes</title>
- <p>Some of the general string functions may seem to overlap each
- other. The reason for this is that this string package is the
- combination of two earlier packages and all the functions of
- both packages have been retained.
- </p>
+ <p>Some of the general string functions can seem to overlap each
+ other. The reason is that this string package is the
+ combination of two earlier packages and all functions of
+ both packages have been retained.</p>
+
<note>
- <p>Any undocumented functions in <c>string</c> should not be used.</p>
+ <p>Any undocumented functions in <c>string</c> are not to be used.</p>
</note>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/supervisor.xml b/lib/stdlib/doc/src/supervisor.xml
index 29e5a732d5..294196f746 100644
--- a/lib/stdlib/doc/src/supervisor.xml
+++ b/lib/stdlib/doc/src/supervisor.xml
@@ -29,124 +29,138 @@
<rev></rev>
</header>
<module>supervisor</module>
- <modulesummary>Generic Supervisor Behaviour</modulesummary>
+ <modulesummary>Generic supervisor behavior.</modulesummary>
<description>
- <p>A behaviour module for implementing a supervisor, a process which
+ <p>This behavior module provides a supervisor, a process that
supervises other processes called child processes. A child
process can either be another supervisor or a worker process.
Worker processes are normally implemented using one of the
- <c>gen_event</c>, <c>gen_fsm</c>, <c>gen_statem</c> or <c>gen_server</c>
- behaviours. A supervisor implemented using this module will have
+ <seealso marker="gen_event"><c>gen_event</c></seealso>,
+ <seealso marker="gen_fsm"><c>gen_fsm</c></seealso>,
+ <seealso marker="gen_server"><c>gen_server</c></seealso>, or
+ <seealso marker="gen_statem"><c>gen_statem</c></seealso>
+ behaviors. A supervisor implemented using this module has
a standard set of interface functions and include functionality
for tracing and error reporting. Supervisors are used to build a
hierarchical process structure called a supervision tree, a
- nice way to structure a fault tolerant application. Refer to
- <em>OTP Design Principles</em> for more information.</p>
+ nice way to structure a fault-tolerant application. For more
+ information, see <seealso marker="doc/design_principles:sup_princ">
+ Supervisor Behaviour</seealso> in OTP Design Principles.</p>
+
<p>A supervisor expects the definition of which child processes to
supervise to be specified in a callback module exporting a
- pre-defined set of functions.</p>
- <p>Unless otherwise stated, all functions in this module will fail
+ predefined set of functions.</p>
+
+ <p>Unless otherwise stated, all functions in this module fail
if the specified supervisor does not exist or if bad arguments
- are given.</p>
+ are specified.</p>
</description>
<section>
+ <marker id="supervision_princ"/>
<title>Supervision Principles</title>
- <p>The supervisor is responsible for starting, stopping and
+ <p>The supervisor is responsible for starting, stopping, and
monitoring its child processes. The basic idea of a supervisor is
- that it shall keep its child processes alive by restarting them
+ that it must keep its child processes alive by restarting them
when necessary.</p>
+
<p>The children of a supervisor are defined as a list of
<em>child specifications</em>. When the supervisor is started, the child
processes are started in order from left to right according to
this list. When the supervisor terminates, it first terminates
its child processes in reversed start order, from right to left.</p>
+
<marker id="sup_flags"/>
- <p>The properties of a supervisor are defined by the supervisor
- flags. This is the type definition for the supervisor flags:
- </p>
- <pre>sup_flags() = #{strategy => strategy(), % optional
+ <p>The supervisor properties are defined by the supervisor flags.
+ The type definition for the supervisor flags is as follows:</p>
+
+ <pre>
+sup_flags() = #{strategy => strategy(), % optional
intensity => non_neg_integer(), % optional
- period => pos_integer()} % optional
- </pre>
- <p>A supervisor can have one of the following <em>restart
- strategies</em>, specified with the <c>strategy</c> key in the
- above map:
- </p>
+ period => pos_integer()} % optional</pre>
+
+ <p>A supervisor can have one of the following <em>restart strategies</em>
+ specified with the <c>strategy</c> key in the above map:</p>
+
<list type="bulleted">
<item>
- <p><c>one_for_one</c> - if one child process terminates and
- should be restarted, only that child process is
+ <p><c>one_for_one</c> - If one child process terminates and
+ is to be restarted, only that child process is
affected. This is the default restart strategy.</p>
</item>
<item>
- <p><c>one_for_all</c> - if one child process terminates and
- should be restarted, all other child processes are terminated
+ <p><c>one_for_all</c> - If one child process terminates and
+ is to be restarted, all other child processes are terminated
and then all child processes are restarted.</p>
</item>
<item>
- <p><c>rest_for_one</c> - if one child process terminates and
- should be restarted, the 'rest' of the child processes --
- i.e. the child processes after the terminated child process
- in the start order -- are terminated. Then the terminated
+ <p><c>rest_for_one</c> - If one child process terminates and
+ is to be restarted, the 'rest' of the child processes (that
+ is, the child processes after the terminated child process
+ in the start order) are terminated. Then the terminated
child process and all child processes after it are restarted.</p>
</item>
<item>
- <p><c>simple_one_for_one</c> - a simplified <c>one_for_one</c>
+ <p><c>simple_one_for_one</c> - A simplified <c>one_for_one</c>
supervisor, where all child processes are dynamically added
- instances of the same process type, i.e. running the same
+ instances of the same process type, that is, running the same
code.</p>
- <p>The functions <c>delete_child/2</c>
- and <c>restart_child/2</c> are invalid for
- <c>simple_one_for_one</c> supervisors and will return
+ <p>Functions
+ <seealso marker="#delete_child/2"><c>delete_child/2</c></seealso> and
+ <seealso marker="#restart_child/2"><c>restart_child/2</c></seealso>
+ are invalid for <c>simple_one_for_one</c> supervisors and return
<c>{error,simple_one_for_one}</c> if the specified supervisor
uses this restart strategy.</p>
- <p>The function <c>terminate_child/2</c> can be used for
+ <p>Function <seealso marker="#terminate_child/2">
+ <c>terminate_child/2</c></seealso> can be used for
children under <c>simple_one_for_one</c> supervisors by
- giving the child's <c>pid()</c> as the second argument. If
+ specifying the child's <c>pid()</c> as the second argument. If
instead the child specification identifier is used,
- <c>terminate_child/2</c> will return
+ <c>terminate_child/2</c> return
<c>{error,simple_one_for_one}</c>.</p>
- <p>Because a <c>simple_one_for_one</c> supervisor could have
+ <p>As a <c>simple_one_for_one</c> supervisor can have
many children, it shuts them all down asynchronously. This
- means that the children will do their cleanup in parallel,
+ means that the children do their cleanup in parallel,
and therefore the order in which they are stopped is not
defined.</p>
</item>
</list>
+
<p>To prevent a supervisor from getting into an infinite loop of
child process terminations and restarts, a <em>maximum restart
intensity</em> is defined using two integer values specified
- with the <c>intensity</c> and <c>period</c> keys in the above
+ with keys <c>intensity</c> and <c>period</c> in the above
map. Assuming the values <c>MaxR</c> for <c>intensity</c>
- and <c>MaxT</c> for <c>period</c>, then if more than <c>MaxR</c>
- restarts occur within <c>MaxT</c> seconds, the supervisor will
- terminate all child processes and then itself. The default value
- for <c>intensity</c> is <c>1</c>, and the default value
- for <c>period</c> is <c>5</c>.
- </p>
+ and <c>MaxT</c> for <c>period</c>, then, if more than <c>MaxR</c>
+ restarts occur within <c>MaxT</c> seconds, the supervisor
+ terminates all child processes and then itself. <c>intensity</c>
+ defaults to <c>1</c> and <c>period</c> defaults to <c>5</c>.</p>
+
<marker id="child_spec"/>
- <p>This is the type definition of a child specification:</p>
- <pre>child_spec() = #{id => child_id(), % mandatory
+ <p>The type definition of a child specification is as follows:</p>
+
+ <pre>
+child_spec() = #{id => child_id(), % mandatory
start => mfargs(), % mandatory
restart => restart(), % optional
shutdown => shutdown(), % optional
type => worker(), % optional
modules => modules()} % optional</pre>
+
<p>The old tuple format is kept for backwards compatibility,
see <seealso marker="#type-child_spec">child_spec()</seealso>,
- but the map is preferred.
- </p>
+ but the map is preferred.</p>
+
<list type="bulleted">
<item>
<p><c>id</c> is used to identify the child
specification internally by the supervisor.</p>
<p>The <c>id</c> key is mandatory.</p>
- <p>Note that this identifier on occations has been called
- "name". As far as possible, the terms "identifier" or "id"
- are now used but in order to keep backwards compatibility,
- some occurences of "name" can still be found, for example
- in error messages.</p>
+ <p>Notice that this identifier on occations has been called
+ "name". As far as possible, the terms "identifier" or "id"
+ are now used but to keep backward compatibility,
+ some occurences of "name" can still be found, for example
+ in error messages.</p>
</item>
<item>
<p><c>start</c> defines the function call used to start the
@@ -154,84 +168,86 @@
tuple <c>{M,F,A}</c> used as <c>apply(M,F,A)</c>.</p>
<p>The start function <em>must create and link to</em> the child
process, and must return <c>{ok,Child}</c> or
- <c>{ok,Child,Info}</c> where <c>Child</c> is the pid of
- the child process and <c>Info</c> an arbitrary term which is
+ <c>{ok,Child,Info}</c>, where <c>Child</c> is the pid of
+ the child process and <c>Info</c> any term that is
ignored by the supervisor.</p>
<p>The start function can also return <c>ignore</c> if the child
process for some reason cannot be started, in which case
- the child specification will be kept by the supervisor
- (unless it is a temporary child) but the non-existing child
- process will be ignored.</p>
- <p>If something goes wrong, the function may also return an
+ the child specification is kept by the supervisor
+ (unless it is a temporary child) but the non-existing child
+ process is ignored.</p>
+ <p>If something goes wrong, the function can also return an
error tuple <c>{error,Error}</c>.</p>
- <p>Note that the <c>start_link</c> functions of the different
- behaviour modules fulfill the above requirements.</p>
- <p>The <c>start</c> key is mandatory.</p>
+ <p>Notice that the <c>start_link</c> functions of the different
+ behavior modules fulfill the above requirements.</p>
+ <p>The <c>start</c> key is mandatory.</p>
</item>
<item>
<p><c>restart</c> defines when a terminated child process
- shall be restarted. A <c>permanent</c> child process will
- always be restarted, a <c>temporary</c> child process will
- never be restarted (even when the supervisor's restart strategy
+ must be restarted. A <c>permanent</c> child process is
+ always restarted. A <c>temporary</c> child process is
+ never restarted (even when the supervisor's restart strategy
is <c>rest_for_one</c> or <c>one_for_all</c> and a sibling's
- death causes the temporary process to be terminated) and a
- <c>transient</c> child process will be restarted only if
- it terminates abnormally, i.e. with another exit reason
- than <c>normal</c>, <c>shutdown</c> or <c>{shutdown,Term}</c>.</p>
- <p>The <c>restart</c> key is optional. If it is not given, the
- default value <c>permanent</c> will be used.</p>
+ death causes the temporary process to be terminated).
+ A <c>transient</c> child process is restarted only if
+ it terminates abnormally, that is, with another exit reason
+ than <c>normal</c>, <c>shutdown</c>, or <c>{shutdown,Term}</c>.</p>
+ <p>The <c>restart</c> key is optional. If it is not specified,
+ it defaults to <c>permanent</c>.</p>
</item>
<item>
- <p><c>shutdown</c> defines how a child process shall be
- terminated. <c>brutal_kill</c> means the child process will
- be unconditionally terminated using <c>exit(Child,kill)</c>.
- An integer timeout value means that the supervisor will tell
+ <p><c>shutdown</c> defines how a child process must be
+ terminated. <c>brutal_kill</c> means that the child process
+ is unconditionally terminated using <c>exit(Child,kill)</c>.
+ An integer time-out value means that the supervisor tells
the child process to terminate by calling
<c>exit(Child,shutdown)</c> and then wait for an exit signal
- with reason <c>shutdown</c> back from the child process. If
- no exit signal is received within the specified number of milliseconds,
+ with reason <c>shutdown</c> back from the child process. If no
+ exit signal is received within the specified number of milliseconds,
the child process is unconditionally terminated using
<c>exit(Child,kill)</c>.</p>
<p>If the child process is another supervisor, the shutdown time
- should be set to <c>infinity</c> to give the subtree ample
+ is to be set to <c>infinity</c> to give the subtree ample
time to shut down. It is also allowed to set it to <c>infinity</c>,
if the child process is a worker.</p>
<warning>
<p>Be careful when setting the shutdown time to
- <c>infinity</c> when the child process is a worker. Because, in this
- situation, the termination of the supervision tree depends on the
- child process, it must be implemented in a safe way and its cleanup
- procedure must always return.</p>
+ <c>infinity</c> when the child process is a worker. Because, in this
+ situation, the termination of the supervision tree depends on the
+ child process, it must be implemented in a safe way and its cleanup
+ procedure must always return.</p>
</warning>
- <p>Note that all child processes implemented using the standard
- OTP behaviour modules automatically adhere to the shutdown
+ <p>Notice that all child processes implemented using the standard
+ OTP behavior modules automatically adhere to the shutdown
protocol.</p>
- <p>The <c>shutdown</c> key is optional. If it is not given,
- the default value <c>5000</c> will be used if the child is
- of type <c>worker</c>; and <c>infinity</c> will be used if
- the child is of type <c>supervisor</c>.</p>
+ <p>The <c>shutdown</c> key is optional. If it is not specified,
+ it defaults to <c>5000</c> if the child is
+ of type <c>worker</c> and it defaults to <c>infinity</c> if
+ the child is of type <c>supervisor</c>.</p>
</item>
<item>
<p><c>type</c> specifies if the child process is a supervisor or
a worker.</p>
- <p>The <c>type</c> key is optional. If it is not given, the
- default value <c>worker</c> will be used.</p>
+ <p>The <c>type</c> key is optional. If it is not specified,
+ it defaults to <c>worker</c>.</p>
</item>
<item>
<p><c>modules</c> is used by the release handler during code
replacement to determine which processes are using a certain
module. As a rule of thumb, if the child process is a
<c>supervisor</c>, <c>gen_server</c>,
- <c>gen_fsm</c> or <c>gen_statem</c>
- this should be a list with one element <c>[Module]</c>,
- where <c>Module</c> is the callback module. If the child
- process is an event manager (<c>gen_event</c>) with a
- dynamic set of callback modules, the value <c>dynamic</c>
- shall be used. See <em>OTP Design Principles</em> for more
- information about release handling.</p>
- <p>The <c>modules</c> key is optional. If it is not given, it
- defaults to <c>[M]</c>, where <c>M</c> comes from the
- child's start <c>{M,F,A}</c></p>
+ <c>gen_statem</c>, or <c>gen_fsm</c>,
+ this is to be a list with one element <c>[Module]</c>,
+ where <c>Module</c> is the callback module. If the child
+ process is an event manager (<c>gen_event</c>) with a
+ dynamic set of callback modules, value <c>dynamic</c>
+ must be used. For more information about release handling, see
+ <seealso marker="doc/design_principles:release_handling">
+ Release Handling</seealso>
+ in OTP Design Principles.</p>
+ <p>The <c>modules</c> key is optional. If it is not specified, it
+ defaults to <c>[M]</c>, where <c>M</c> comes from the
+ child's start <c>{M,F,A}</c>.</p>
</item>
<item>
<p>Internally, the supervisor also keeps track of the pid
@@ -240,6 +256,7 @@
</item>
</list>
</section>
+
<datatypes>
<datatype>
<name name="child"/>
@@ -250,20 +267,18 @@
</datatype>
<datatype>
<name name="child_spec"/>
- <desc><p>The tuple format is kept for backwards compatibility
- only. A map is preferred; see more details
- <seealso marker="#child_spec">above</seealso>.</p></desc>
+ <desc><p>The tuple format is kept for backward compatibility
+ only. A map is preferred; see more details
+ <seealso marker="#child_spec">above</seealso>.</p></desc>
</datatype>
<datatype>
<name name="mfargs"/>
- <desc>
- <p>The value <c>undefined</c> for <c><anno>A</anno></c> (the
- argument list) is only to be used internally
- in <c>supervisor</c>. If the restart type of the child
- is <c>temporary</c>, then the process is never to be
- restarted and therefore there is no need to store the real
- argument list. The value <c>undefined</c> will then be
- stored instead.</p>
+ <desc><p>Value <c>undefined</c> for <c><anno>A</anno></c> (the
+ argument list) is only to be used internally
+ in <c>supervisor</c>. If the restart type of the child
+ is <c>temporary</c>, the process is never to be
+ restarted and therefore there is no need to store the real
+ argument list. Value <c>undefined</c> is then stored instead.</p>
</desc>
</datatype>
<datatype>
@@ -280,9 +295,9 @@
</datatype>
<datatype>
<name name="sup_flags"/>
- <desc><p>The tuple format is kept for backwards compatibility
- only. A map is preferred; see more details
- <seealso marker="#sup_flags">above</seealso>.</p></desc>
+ <desc><p>The tuple format is kept for backward compatibility
+ only. A map is preferred; see more details
+ <seealso marker="#sup_flags">above</seealso>.</p></desc>
</datatype>
<datatype>
<name name="sup_ref"/>
@@ -291,307 +306,355 @@
<name name="worker"/>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="start_link" arity="2"/>
- <name name="start_link" arity="3"/>
- <fsummary>Create a supervisor process.</fsummary>
- <type name="startlink_ret"/>
- <type name="startlink_err"/>
- <type name="sup_name"/>
+ <name name="check_childspecs" arity="1"/>
+ <fsummary>Check if children specifications are syntactically correct.
+ </fsummary>
<desc>
- <p>Creates a supervisor process as part of a supervision tree.
- The function will, among other things, ensure that
- the supervisor is linked to the calling process (its
- supervisor).</p>
- <p>The created supervisor process calls <c><anno>Module</anno>:init/1</c> to
- find out about restart strategy, maximum restart intensity
- and child processes. To ensure a synchronized start-up
- procedure, <c>start_link/2,3</c> does not return until
- <c><anno>Module</anno>:init/1</c> has returned and all child processes
- have been started.</p>
- <p>If <c><anno>SupName</anno>={local,Name}</c>, the supervisor is registered
- locally as <c>Name</c> using <c>register/2</c>. If
- <c><anno>SupName</anno>={global,Name}</c> the supervisor is registered
- globally as <c>Name</c> using <c>global:register_name/2</c>. If
- <c><anno>SupName</anno>={via,<anno>Module</anno>,<anno>Name</anno>}</c> the supervisor
- is registered as <c>Name</c> using the registry represented by
- <c>Module</c>. The <c>Module</c> callback must export the functions
- <c>register_name/2</c>, <c>unregister_name/1</c> and <c>send/2</c>,
- which shall behave like the corresponding functions in <c>global</c>.
- Thus, <c>{via,global,<anno>Name</anno>}</c> is a valid reference.</p>
- <p>If no name is provided, the supervisor is not registered.</p>
- <p><c><anno>Module</anno></c> is the name of the callback module.</p>
- <p><c><anno>Args</anno></c> is an arbitrary term which is passed as
- the argument to <c><anno>Module</anno>:init/1</c>.</p>
- <p>If the supervisor and its child processes are successfully
- created (i.e. if all child process start functions return
- <c>{ok,Child}</c>, <c>{ok,Child,Info}</c>, or <c>ignore</c>),
- the function returns <c>{ok,Pid}</c>, where <c>Pid</c> is
- the pid of the supervisor. If there already exists a process
- with the specified <c><anno>SupName</anno></c>, the function returns
- <c>{error,{already_started,Pid}}</c>, where <c>Pid</c> is
- the pid of that process.</p>
- <p>If <c><anno>Module</anno>:init/1</c> returns <c>ignore</c>, this function
- returns <c>ignore</c> as well, and the supervisor terminates
- with reason <c>normal</c>.
- If <c><anno>Module</anno>:init/1</c> fails or returns an incorrect value,
- this function returns <c>{error,Term}</c> where <c>Term</c>
- is a term with information about the error, and the supervisor
- terminates with reason <c>Term</c>.</p>
- <p>If any child process start function fails or returns an error
- tuple or an erroneous value, the supervisor will first terminate
- all already started child processes with reason <c>shutdown</c>
- and then terminate itself and return
- <c>{error, {shutdown, Reason}}</c>.</p>
+ <p>Takes a list of child specification as argument
+ and returns <c>ok</c> if all of them are syntactically
+ correct, otherwise <c>{error,<anno>Error</anno>}</c>.</p>
</desc>
</func>
+
<func>
- <name name="start_child" arity="2"/>
- <fsummary>Dynamically add a child process to a supervisor.</fsummary>
- <type name="startchild_ret"/>
- <type name="startchild_err"/>
+ <name name="count_children" arity="1"/>
+ <fsummary>Return counts for the number of child specifications,
+ active children, supervisors, and workers.</fsummary>
<desc>
- <p>Dynamically adds a child specification to the supervisor
- <c><anno>SupRef</anno></c> which starts the corresponding child process.</p>
- <p><marker id="SupRef"/><c><anno>SupRef</anno></c> can be:</p>
+ <p>Returns a property list (see <seealso marker="proplists">
+ <c>proplists</c></seealso>) containing the
+ counts for each of the following elements of the supervisor's
+ child specifications and managed processes:</p>
<list type="bulleted">
- <item>the pid,</item>
- <item><c>Name</c>, if the supervisor is locally registered,</item>
- <item><c>{Name,Node}</c>, if the supervisor is locally
- registered at another node, or</item>
- <item><c>{global,Name}</c>, if the supervisor is globally
- registered.</item>
- <item><c>{via,Module,Name}</c>, if the supervisor is registered
- through an alternative process registry.</item>
+ <item>
+ <p><c>specs</c> - The total count of children, dead or alive.</p>
+ </item>
+ <item>
+ <p><c>active</c> - The count of all actively running child
+ processes managed by this supervisor. For a
+ <c>simple_one_for_one</c> supervisors, no check is done to ensure
+ that each child process is still alive, although the result
+ provided here is likely to be very
+ accurate unless the supervisor is heavily overloaded.</p>
+ </item>
+ <item>
+ <p><c>supervisors</c> - The count of all children marked as
+ <c>child_type = supervisor</c> in the specification list,
+ regardless if the child process is still alive.</p>
+ </item>
+ <item>
+ <p><c>workers</c> - The count of all children marked as
+ <c>child_type = worker</c> in the specification list,
+ regardless if the child process is still alive.</p>
+ </item>
</list>
- <p><c><anno>ChildSpec</anno></c> must be a valid child specification
- (unless the supervisor is a <c>simple_one_for_one</c>
- supervisor; see below). The child process will be started by
- using the start function as defined in the child
- specification.</p>
- <p>In the case of a <c>simple_one_for_one</c> supervisor,
- the child specification defined in <c>Module:init/1</c> will
- be used, and <c><anno>ChildSpec</anno></c> shall instead be an arbitrary
- list of terms <c><anno>List</anno></c>. The child process will then be
- started by appending <c><anno>List</anno></c> to the existing start
- function arguments, i.e. by calling
- <c>apply(M, F, A++<anno>List</anno>)</c> where <c>{M,F,A}</c> is the start
- function defined in the child specification.</p>
- <p>If there already exists a child specification with
- the specified identifier, <c><anno>ChildSpec</anno></c> is discarded, and
- the function returns <c>{error,already_present}</c> or
- <c>{error,{already_started,<anno>Child</anno>}}</c>, depending on if
- the corresponding child process is running or not.</p>
- <p>If the child process start function returns <c>{ok,<anno>Child</anno>}</c>
- or <c>{ok,<anno>Child</anno>,<anno>Info</anno>}</c>, the child specification and pid are
- added to the supervisor and the function returns the same
- value.</p>
- <p>If the child process start function returns <c>ignore</c>,
- the child specification is added to the supervisor (unless the
- supervisor is a <c>simple_one_for_one</c> supervisor, see below),
- the pid is set to <c>undefined</c> and the function returns
- <c>{ok,undefined}</c>.
- </p>
- <p>In the case of a <c>simple_one_for_one</c> supervisor, when a child
- process start function returns <c>ignore</c> the functions returns
- <c>{ok,undefined}</c> and no child is added to the supervisor.
- </p>
- <p>If the child process start function returns an error tuple or
- an erroneous value, or if it fails, the child specification is
- discarded, and the function returns <c>{error,Error}</c> where
- <c>Error</c> is a term containing information about the error
- and child specification.</p>
+ <p>For a description of <c><anno>SupRef</anno></c>, see
+ <seealso marker="#SupRef"><c>start_child/2</c></seealso>.</p>
</desc>
</func>
- <func>
- <name name="terminate_child" arity="2"/>
- <fsummary>Terminate a child process belonging to a supervisor.</fsummary>
- <desc>
- <p>Tells the supervisor <c><anno>SupRef</anno></c> to terminate the given
- child.</p>
-
- <p>If the supervisor is not <c>simple_one_for_one</c>,
- <c><anno>Id</anno></c> must be the child specification
- identifier. The process, if there is one, is terminated and,
- unless it is a temporary child, the child specification is
- kept by the supervisor. The child process may later be
- restarted by the supervisor. The child process can also be
- restarted explicitly by calling
- <c>restart_child/2</c>. Use <c>delete_child/2</c> to remove
- the child specification.</p>
-
- <p>If the child is temporary, the child specification is deleted as
- soon as the process terminates. This means
- that <c>delete_child/2</c> has no meaning,
- and <c>restart_child/2</c> can not be used for these
- children.</p>
- <p>If the supervisor is <c>simple_one_for_one</c>, <c><anno>Id</anno></c>
- must be the child process' <c>pid()</c>. If the specified
- process is alive, but is not a child of the given
- supervisor, the function will return
- <c>{error,not_found}</c>. If the child specification
- identifier is given instead of a <c>pid()</c>, the
- function will return <c>{error,simple_one_for_one}</c>.</p>
- <p>If successful, the function returns <c>ok</c>. If there is
- no child specification with the specified <c><anno>Id</anno></c>, the
- function returns <c>{error,not_found}</c>.</p>
- <p>See <seealso marker="#SupRef"><c>start_child/2</c></seealso>
- for a description of <c><anno>SupRef</anno></c>.</p>
- </desc>
- </func>
<func>
<name name="delete_child" arity="2"/>
<fsummary>Delete a child specification from a supervisor.</fsummary>
<desc>
- <p>Tells the supervisor <c><anno>SupRef</anno></c> to delete the child
- specification identified by <c><anno>Id</anno></c>. The corresponding child
- process must not be running. Use <c>terminate_child/2</c> to
- terminate it.</p>
- <p>See <seealso marker="#SupRef"><c>start_child/2</c></seealso>
- for a description of <c><anno>SupRef</anno></c>.</p>
+ <p>Tells supervisor <c><anno>SupRef</anno></c> to delete the child
+ specification identified by <c><anno>Id</anno></c>. The corresponding
+ child process must not be running. Use
+ <seealso marker="#terminate_child/2">
+ <c>terminate_child/2</c></seealso> to terminate it.</p>
+ <p>For a description of <c><anno>SupRef</anno></c>, see
+ <seealso marker="#SupRef"><c>start_child/2</c></seealso>.</p>
<p>If successful, the function returns <c>ok</c>. If the child
- specification identified by <c><anno>Id</anno></c> exists but
- the corresponding child process is running or about to be restarted,
- the function returns <c>{error,running}</c> or
- <c>{error,restarting}</c>, respectively. If the child specification
+ specification identified by <c><anno>Id</anno></c> exists but the
+ corresponding child process is running or is about to be restarted,
+ the function returns <c>{error,running}</c> or
+ <c>{error,restarting}</c>, respectively. If the child specification
identified by <c><anno>Id</anno></c> does not exist, the function
- returns <c>{error,not_found}</c>.</p>
+ returns <c>{error,not_found}</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="get_childspec" arity="2"/>
+ <fsummary>Return the child specification map for the specified
+ child.</fsummary>
+ <desc>
+ <p>Returns the child specification map for the child identified
+ by <c>Id</c> under supervisor <c>SupRef</c>. The returned
+ map contains all keys, both mandatory and optional.</p>
+ <p>For a description of <c><anno>SupRef</anno></c>, see
+ <seealso marker="#SupRef"><c>start_child/2</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="restart_child" arity="2"/>
- <fsummary>Restart a terminated child process belonging to a supervisor.</fsummary>
+ <fsummary>Restart a terminated child process belonging to a supervisor.
+ </fsummary>
<desc>
- <p>Tells the supervisor <c><anno>SupRef</anno></c> to restart
+ <p>Tells supervisor <c><anno>SupRef</anno></c> to restart
a child process corresponding to the child specification
identified by <c><anno>Id</anno></c>. The child
specification must exist, and the corresponding child process
must not be running.</p>
- <p>Note that for temporary children, the child specification
- is automatically deleted when the child terminates; thus
- it is not possible to restart such children.</p>
- <p>See <seealso marker="#SupRef"><c>start_child/2</c></seealso>
- for a description of <c>SupRef</c>.</p>
+ <p>Notice that for temporary children, the child specification
+ is automatically deleted when the child terminates; thus,
+ it is not possible to restart such children.</p>
+ <p>For a description of <c><anno>SupRef</anno></c>, see
+ <seealso marker="#SupRef"><c>start_child/2</c></seealso>.</p>
<p>If the child specification identified
by <c><anno>Id</anno></c> does not exist, the function
returns <c>{error,not_found}</c>. If the child specification
exists but the corresponding process is already running, the
- function returns
- <c>{error,running}</c>.</p>
+ function returns <c>{error,running}</c>.</p>
<p>If the child process start function
returns <c>{ok,<anno>Child</anno>}</c>
or <c>{ok,<anno>Child</anno>,<anno>Info</anno>}</c>, the pid
is added to the supervisor and the function returns the same
value.</p>
<p>If the child process start function returns <c>ignore</c>,
- the pid remains set to <c>undefined</c>, and the function
+ the pid remains set to <c>undefined</c> and the function
returns <c>{ok,undefined}</c>.</p>
<p>If the child process start function returns an error tuple
or an erroneous value, or if it fails, the function returns
- <c>{error,<anno>Error</anno>}</c>
+ <c>{error,<anno>Error</anno>}</c>,
where <c><anno>Error</anno></c> is a term containing
information about the error.</p>
</desc>
</func>
+
<func>
- <name name="which_children" arity="1"/>
- <fsummary>Return information about all children specifications and
- child processes belonging to a supervisor.</fsummary>
+ <name name="start_child" arity="2"/>
+ <fsummary>Dynamically add a child process to a supervisor.</fsummary>
+ <type name="startchild_ret"/>
+ <type name="startchild_err"/>
<desc>
- <p>Returns a newly created list with information about all child
- specifications and child processes belonging to
- the supervisor <c><anno>SupRef</anno></c>.</p>
- <p>Note that calling this function when supervising a large
- number of children under low memory conditions can cause an
- out of memory exception.</p>
- <p>See <seealso marker="#SupRef"><c>start_child/2</c></seealso> for a description of
- <c>SupRef</c>.</p>
- <p>The information given for each child specification/process
- is:</p>
+ <p>Dynamically adds a child specification to supervisor
+ <c><anno>SupRef</anno></c>, which starts the corresponding child
+ process.</p>
+ <p><marker id="SupRef"/><c><anno>SupRef</anno></c> can be any of the
+ following:</p>
+ <list type="bulleted">
+ <item>The pid</item>
+ <item><c>Name</c>, if the supervisor is locally registered</item>
+ <item><c>{Name,Node}</c>, if the supervisor is locally
+ registered at another node</item>
+ <item><c>{global,Name}</c>, if the supervisor is globally
+ registered</item>
+ <item><c>{via,Module,Name}</c>, if the supervisor is registered
+ through an alternative process registry</item>
+ </list>
+ <p><c><anno>ChildSpec</anno></c> must be a valid child specification
+ (unless the supervisor is a <c>simple_one_for_one</c>
+ supervisor; see below). The child process is started by
+ using the start function as defined in the child specification.</p>
+ <p>For a <c>simple_one_for_one</c> supervisor,
+ the child specification defined in <c>Module:init/1</c> is used,
+ and <c><anno>ChildSpec</anno></c> must instead be an arbitrary
+ list of terms <c><anno>List</anno></c>. The child process is then
+ started by appending <c><anno>List</anno></c> to the existing start
+ function arguments, that is, by calling
+ <c>apply(M, F, A++<anno>List</anno>)</c>, where <c>{M,F,A}</c> is the
+ start function defined in the child specification.</p>
<list type="bulleted">
<item>
- <p><c><anno>Id</anno></c> - as defined in the child specification or
- <c>undefined</c> in the case of a
- <c>simple_one_for_one</c> supervisor.</p>
- </item>
- <item>
- <p><c><anno>Child</anno></c> - the pid of the corresponding child
- process, the atom <c>restarting</c> if the process is about to be
- restarted, or <c>undefined</c> if there is no such process.</p>
+ <p>If there already exists a child specification with the specified
+ identifier, <c><anno>ChildSpec</anno></c> is discarded, and
+ the function returns <c>{error,already_present}</c> or
+ <c>{error,{already_started,<anno>Child</anno>}}</c>, depending on
+ if the corresponding child process is running or not.</p>
</item>
<item>
- <p><c><anno>Type</anno></c> - as defined in the child specification.</p>
+ <p>If the child process start function returns
+ <c>{ok,<anno>Child</anno>}</c> or
+ <c>{ok,<anno>Child</anno>,<anno>Info</anno>}</c>, the child
+ specification and pid are added to the supervisor and the
+ function returns the same value.</p>
</item>
<item>
- <p><c><anno>Modules</anno></c> - as defined in the child specification.</p>
+ <p>If the child process start function returns <c>ignore</c>,
+ the child specification is added to the supervisor (unless the
+ supervisor is a <c>simple_one_for_one</c> supervisor, see below),
+ the pid is set to <c>undefined</c>, and the function returns
+ <c>{ok,undefined}</c>.</p>
</item>
</list>
+ <p>For a <c>simple_one_for_one</c> supervisor, when a child
+ process start function returns <c>ignore</c>, the functions returns
+ <c>{ok,undefined}</c> and no child is added to the supervisor.</p>
+ <p>If the child process start function returns an error tuple or
+ an erroneous value, or if it fails, the child specification is
+ discarded, and the function returns <c>{error,Error}</c>, where
+ <c>Error</c> is a term containing information about the error
+ and child specification.</p>
</desc>
</func>
+
<func>
- <name name="count_children" arity="1"/>
- <fsummary>Return counts for the number of child specifications,
- active children, supervisors, and workers.</fsummary>
+ <name name="start_link" arity="2"/>
+ <name name="start_link" arity="3"/>
+ <fsummary>Create a supervisor process.</fsummary>
+ <type name="startlink_ret"/>
+ <type name="startlink_err"/>
+ <type name="sup_name"/>
<desc>
- <p>Returns a property list (see <c>proplists</c>) containing the
- counts for each of the following elements of the supervisor's
- child specifications and managed processes:</p>
+ <p>Creates a supervisor process as part of a supervision tree.
+ For example, the function ensures that the supervisor is linked to
+ the calling process (its supervisor).</p>
+ <p>The created supervisor process calls
+ <c><anno>Module</anno>:init/1</c> to
+ find out about restart strategy, maximum restart intensity,
+ and child processes. To ensure a synchronized startup
+ procedure, <c>start_link/2,3</c> does not return until
+ <c><anno>Module</anno>:init/1</c> has returned and all child
+ processes have been started.</p>
<list type="bulleted">
<item>
- <p><c>specs</c> - the total count of children, dead or alive.</p>
+ <p>If <c><anno>SupName</anno>={local,Name}</c>, the supervisor is
+ registered locally as <c>Name</c> using <c>register/2</c>.</p>
</item>
<item>
- <p><c>active</c> - the count of all actively running child processes
- managed by this supervisor. In the case of <c>simple_one_for_one</c>
- supervisors, no check is carried out to ensure that each child process
- is still alive, though the result provided here is likely to be very
- accurate unless the supervisor is heavily overloaded.</p>
+ <p>If <c><anno>SupName</anno>={global,Name}</c>, the supervisor is
+ registered globally as <c>Name</c> using
+ <seealso marker="kernel:global#register_name/2">
+ <c>global:register_name/2</c></seealso>.</p>
</item>
<item>
- <p><c>supervisors</c> - the count of all children marked as
- child_type = supervisor in the spec list, whether or not the
- child process is still alive.</p>
+ <p>If
+ <c><anno>SupName</anno>={via,<anno>Module</anno>,<anno>Name</anno>}</c>,
+ the supervisor is registered as <c>Name</c> using the registry
+ represented by <c>Module</c>. The <c>Module</c> callback must
+ export the functions <c>register_name/2</c>,
+ <c>unregister_name/1</c>, and <c>send/2</c>, which must behave
+ like the corresponding functions in
+ <seealso marker="kernel:global"><c>global</c></seealso>. Thus,
+ <c>{via,global,<anno>Name</anno>}</c> is a valid reference.</p>
+ </item>
+ </list>
+ <p>If no name is provided, the supervisor is not registered.</p>
+ <p><c><anno>Module</anno></c> is the name of the callback module.</p>
+ <p><c><anno>Args</anno></c> is any term that is passed as
+ the argument to <c><anno>Module</anno>:init/1</c>.</p>
+ <list type="bulleted">
+ <item>
+ <p>If the supervisor and its child processes are successfully
+ created (that is, if all child process start functions return
+ <c>{ok,Child}</c>, <c>{ok,Child,Info}</c>, or <c>ignore</c>),
+ the function returns <c>{ok,Pid}</c>, where <c>Pid</c> is
+ the pid of the supervisor.</p>
</item>
<item>
- <p><c>workers</c> - the count of all children marked as
- child_type = worker in the spec list, whether or not the child
- process is still alive.</p>
+ <p>If there already exists a process with the specified
+ <c><anno>SupName</anno></c>, the function returns
+ <c>{error,{already_started,Pid}}</c>, where <c>Pid</c> is
+ the pid of that process.</p>
+ </item>
+ <item>
+ <p>If <c><anno>Module</anno>:init/1</c> returns <c>ignore</c>, this
+ function returns <c>ignore</c> as well, and the supervisor
+ terminates with reason <c>normal</c>.</p>
+ </item>
+ <item>
+ <p>If <c><anno>Module</anno>:init/1</c> fails or returns an
+ incorrect value, this function returns <c>{error,Term}</c>, where
+ <c>Term</c> is a term with information about the error, and the
+ supervisor terminates with reason <c>Term</c>.</p>
+ </item>
+ <item>
+ <p>If any child process start function fails or returns an error
+ tuple or an erroneous value, the supervisor first terminates
+ all already started child processes with reason <c>shutdown</c>
+ and then terminate itself and returns
+ <c>{error, {shutdown, Reason}}</c>.</p>
</item>
</list>
- <p>See <seealso marker="#SupRef"><c>start_child/2</c></seealso>
- for a description of <c><anno>SupRef</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="check_childspecs" arity="1"/>
- <fsummary>Check if children specifications are syntactically correct.</fsummary>
+ <name name="terminate_child" arity="2"/>
+ <fsummary>Terminate a child process belonging to a supervisor.</fsummary>
<desc>
- <p>This function takes a list of child specification as argument
- and returns <c>ok</c> if all of them are syntactically
- correct, or <c>{error,<anno>Error</anno>}</c> otherwise.</p>
+ <p>Tells supervisor <c><anno>SupRef</anno></c> to terminate the
+ specified child.</p>
+ <p>If the supervisor is not <c>simple_one_for_one</c>,
+ <c><anno>Id</anno></c> must be the child specification
+ identifier. The process, if any, is terminated and,
+ unless it is a temporary child, the child specification is
+ kept by the supervisor. The child process can later be
+ restarted by the supervisor. The child process can also be
+ restarted explicitly by calling
+ <seealso marker="#restart_child/2"><c>restart_child/2</c></seealso>.
+ Use
+ <seealso marker="#delete_child/2"><c>delete_child/2</c></seealso>
+ to remove the child specification.</p>
+ <p>If the child is temporary, the child specification is deleted as
+ soon as the process terminates. This means
+ that <c>delete_child/2</c> has no meaning
+ and <c>restart_child/2</c> cannot be used for these children.</p>
+ <p>If the supervisor is <c>simple_one_for_one</c>,
+ <c><anno>Id</anno></c>
+ must be the <c>pid()</c> of the child process. If the specified
+ process is alive, but is not a child of the specified
+ supervisor, the function returns
+ <c>{error,not_found}</c>. If the child specification
+ identifier is specified instead of a <c>pid()</c>, the
+ function returns <c>{error,simple_one_for_one}</c>.</p>
+ <p>If successful, the function returns <c>ok</c>. If there is
+ no child specification with the specified <c><anno>Id</anno></c>, the
+ function returns <c>{error,not_found}</c>.</p>
+ <p>For a description of <c><anno>SupRef</anno></c>, see
+ <seealso marker="#SupRef"><c>start_child/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="get_childspec" arity="2"/>
- <fsummary>Return the child specification map for the given
- child.</fsummary>
+ <name name="which_children" arity="1"/>
+ <fsummary>Return information about all children specifications and
+ child processes belonging to a supervisor.</fsummary>
<desc>
- <p>Returns the child specification map for the child identified
- by <c>Id</c> under supervisor <c>SupRef</c>. The returned
- map contains all keys, both mandatory and optional.</p>
- <p>See <seealso marker="#SupRef"><c>start_child/2</c></seealso>
- for a description of <c><anno>SupRef</anno></c>.</p>
+ <p>Returns a newly created list with information about all child
+ specifications and child processes belonging to
+ supervisor <c><anno>SupRef</anno></c>.</p>
+ <p>Notice that calling this function when supervising many
+ childrens under low memory conditions can cause an
+ out of memory exception.</p>
+ <p>For a description of <c><anno>SupRef</anno></c>, see
+ <seealso marker="#SupRef"><c>start_child/2</c></seealso>.</p>
+ <p>The following information is given for each child
+ specification/process:</p>
+ <list type="bulleted">
+ <item>
+ <p><c><anno>Id</anno></c> - As defined in the child specification or
+ <c>undefined</c> for a <c>simple_one_for_one</c> supervisor.</p>
+ </item>
+ <item>
+ <p><c><anno>Child</anno></c> - The pid of the corresponding child
+ process, the atom <c>restarting</c> if the process is about to be
+ restarted, or <c>undefined</c> if there is no such process.</p>
+ </item>
+ <item>
+ <p><c><anno>Type</anno></c> - As defined in the child
+ specification.</p>
+ </item>
+ <item>
+ <p><c><anno>Modules</anno></c> - As defined in the child
+ specification.</p>
+ </item>
+ </list>
</desc>
</func>
</funcs>
<section>
- <title>CALLBACK FUNCTIONS</title>
- <p>The following functions must be exported from a
+ <title>Callback Functions</title>
+ <p>The following function must be exported from a
<c>supervisor</c> callback module.</p>
</section>
+
<funcs>
<func>
<name>Module:init(Args) -> Result</name>
@@ -599,47 +662,52 @@
<type>
<v>Args = term()</v>
<v>Result = {ok,{SupFlags,[ChildSpec]}} | ignore</v>
- <v>&nbsp;SupFlags = <seealso marker="#type-sup_flags">sup_flags()</seealso></v>
- <v>&nbsp;ChildSpec = <seealso marker="#type-child_spec">child_spec()</seealso></v>
+ <v>&nbsp;SupFlags =
+ <seealso marker="#type-sup_flags"><c>sup_flags()</c></seealso></v>
+ <v>&nbsp;ChildSpec =
+ <seealso marker="#type-child_spec"><c>child_spec()</c></seealso></v>
</type>
<desc>
<p>Whenever a supervisor is started using
- <c>supervisor:start_link/2,3</c>, this function is called by
+ <seealso marker="#start_link/2"><c>start_link/2,3</c></seealso>,
+ this function is called by
the new process to find out about restart strategy, maximum
restart intensity, and child specifications.</p>
<p><c>Args</c> is the <c>Args</c> argument provided to the start
function.</p>
<p><c>SupFlags</c> is the supervisor flags defining the
- restart strategy and max restart intensity for the
+ restart strategy and maximum restart intensity for the
supervisor. <c>[ChildSpec]</c> is a list of valid child
specifications defining which child processes the supervisor
- shall start and monitor. See the discussion about
- Supervision Principles above.</p>
- <p>Note that when the restart strategy is
+ must start and monitor. See the discussion in section
+ <seealso marker="#supervision_princ">
+ <c>Supervision Principles</c></seealso> earlier.</p>
+ <p>Notice that when the restart strategy is
<c>simple_one_for_one</c>, the list of child specifications
must be a list with one child specification only.
- (The child specification identifier is ignored.) No child process is then started
+ (The child specification identifier is ignored.)
+ No child process is then started
during the initialization phase, but all children are assumed
to be started dynamically using
- <c>supervisor:start_child/2</c>.</p>
- <p>The function may also return <c>ignore</c>.</p>
- <p>Note that this function might also be called as a part of a
- code upgrade procedure. For this reason, the function should
- not have any side effects. See
- <seealso marker="doc/design_principles:appup_cookbook#sup">Design
- Principles</seealso> for more information about code upgrade
- of supervisors.</p>
+ <seealso marker="#start_child/2"><c>start_child/2</c></seealso>.</p>
+ <p>The function can also return <c>ignore</c>.</p>
+ <p>Notice that this function can also be called as a part of a code
+ upgrade procedure. Therefore, the function is not to have any side
+ effects. For more information about code upgrade of supervisors, see
+ section
+ <seealso marker="doc/design_principles:appup_cookbook#sup">Changing
+ a Supervisor</seealso> in OTP Design Principles.</p>
</desc>
</func>
</funcs>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="gen_event">gen_event(3)</seealso>,
- <seealso marker="gen_fsm">gen_fsm(3)</seealso>,
- <seealso marker="gen_statem">gen_statem(3)</seealso>,
- <seealso marker="gen_server">gen_server(3)</seealso>,
- <seealso marker="sys">sys(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="gen_event"><c>gen_event(3)</c></seealso>,
+ <seealso marker="gen_fsm"><c>gen_fsm(3)</c></seealso>,
+ <seealso marker="gen_statem"><c>gen_statem(3)</c></seealso>,
+ <seealso marker="gen_server"><c>gen_server(3)</c></seealso>,
+ <seealso marker="sys"><c>sys(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/supervisor_bridge.xml b/lib/stdlib/doc/src/supervisor_bridge.xml
index e40c8bbd6f..c4c1b37548 100644
--- a/lib/stdlib/doc/src/supervisor_bridge.xml
+++ b/lib/stdlib/doc/src/supervisor_bridge.xml
@@ -31,73 +31,106 @@
<rev></rev>
</header>
<module>supervisor_bridge</module>
- <modulesummary>Generic Supervisor Bridge Behaviour.</modulesummary>
+ <modulesummary>Generic supervisor bridge behavior.</modulesummary>
<description>
- <p>A behaviour module for implementing a supervisor_bridge, a process
- which connects a subsystem not designed according to the OTP design
- principles to a supervision tree. The supervisor_bridge sits between
+ <p>This behavior module provides a supervisor bridge, a process
+ that connects a subsystem not designed according to the OTP design
+ principles to a supervision tree. The supervisor bridge sits between
a supervisor and the subsystem. It behaves like a real supervisor to
its own supervisor, but has a different interface than a real
- supervisor to the subsystem. Refer to <em>OTP Design Principles</em>
- for more information.</p>
- <p>A supervisor_bridge assumes the functions for starting and stopping
+ supervisor to the subsystem. For more information, see
+ <seealso marker="doc/design_principles:sup_princ">
+ Supervisor Behaviour</seealso> in OTP Design Principles.
+ </p>
+
+ <p>A supervisor bridge assumes the functions for starting and stopping
the subsystem to be located in a callback module exporting a
- pre-defined set of functions.</p>
- <p>The <c>sys</c> module can be used for debugging a
- supervisor_bridge.</p>
- <p>Unless otherwise stated, all functions in this module will fail if
- the specified supervisor_bridge does not exist or if bad arguments are
- given.</p>
+ predefined set of functions.</p>
+
+ <p>The <seealso marker="sys"><c>sys(3)</c></seealso> module can be used
+ for debugging a supervisor bridge.</p>
+
+ <p>Unless otherwise stated, all functions in this module fail if
+ the specified supervisor bridge does not exist or if bad arguments are
+ specified.</p>
</description>
+
<funcs>
<func>
<name name="start_link" arity="2"/>
<name name="start_link" arity="3"/>
<fsummary>Create a supervisor bridge process.</fsummary>
<desc>
- <p>Creates a supervisor_bridge process, linked to the calling
- process, which calls <c><anno>Module</anno>:init/1</c> to start the subsystem.
- To ensure a synchronized start-up procedure, this function does
+ <p>Creates a supervisor bridge process, linked to the calling process,
+ which calls <c><anno>Module</anno>:init/1</c> to start the subsystem.
+ To ensure a synchronized startup procedure, this function does
not return until <c><anno>Module</anno>:init/1</c> has returned.</p>
- <p>If <c><anno>SupBridgeName</anno>={local,<anno>Name</anno>}</c> the supervisor_bridge is
- registered locally as <c><anno>Name</anno></c> using <c>register/2</c>.
- If <c><anno>SupBridgeName</anno>={global,<anno>Name</anno>}</c> the supervisor_bridge is
- registered globally as <c><anno>Name</anno></c> using
- <c>global:register_name/2</c>.
- If <c><anno>SupBridgeName</anno>={via,<anno>Module</anno>,<anno>Name</anno>}</c> the supervisor_bridge is
- registered as <c><anno>Name</anno></c> using a registry represented
- by <anno>Module</anno>. The <c>Module</c> callback should export
- the functions <c>register_name/2</c>, <c>unregister_name/1</c>
- and <c>send/2</c>, which should behave like the
- corresponding functions in <c>global</c>. Thus,
- <c>{via,global,GlobalName}</c> is a valid reference.
- If no name is provided, the supervisor_bridge is not registered.
- If there already exists a process with the specified
- <c><anno>SupBridgeName</anno></c> the function returns
- <c>{error,{already_started,<anno>Pid</anno>}}</c>, where <c><anno>Pid</anno></c> is the pid
- of that process.</p>
+ <list type="bulleted">
+ <item>
+ <p>If <c><anno>SupBridgeName</anno>={local,<anno>Name</anno>}</c>,
+ the supervisor bridge is registered locally as
+ <c><anno>Name</anno></c> using <c>register/2</c>.</p>
+ </item>
+ <item>
+ <p>If <c><anno>SupBridgeName</anno>={global,<anno>Name</anno>}</c>,
+ the supervisor bridge is registered globally as
+ <c><anno>Name</anno></c> using
+ <seealso marker="kernel:global#register_name/2">
+ <c>global:register_name/2</c></seealso>.</p>
+ </item>
+ <item>
+ <p>If
+ <c><anno>SupBridgeName</anno>={via,<anno>Module</anno>,<anno>Name</anno>}</c>,
+ the supervisor bridge is registered as <c><anno>Name</anno></c>
+ using a registry represented by <anno>Module</anno>. The
+ <c>Module</c> callback is to export functions
+ <c>register_name/2</c>, <c>unregister_name/1</c>, and <c>send/2</c>,
+ which are to behave like the corresponding functions in
+ <seealso marker="kernel:global"><c>global</c></seealso>.
+ Thus, <c>{via,global,GlobalName}</c> is a valid reference.</p>
+ </item>
+ </list>
+ <p>If no name is provided, the supervisor bridge is not registered.</p>
<p><c><anno>Module</anno></c> is the name of the callback module.</p>
- <p><c><anno>Args</anno></c> is an arbitrary term which is passed as the argument
- to <c><anno>Module</anno>:init/1</c>.</p>
- <p>If the supervisor_bridge and the subsystem are successfully
- started the function returns <c>{ok,<anno>Pid</anno>}</c>, where <c><anno>Pid</anno></c> is
- is the pid of the supervisor_bridge.</p>
- <p>If <c><anno>Module</anno>:init/1</c> returns <c>ignore</c>, this function
- returns <c>ignore</c> as well and the supervisor_bridge terminates
- with reason <c>normal</c>.
- If <c><anno>Module</anno>:init/1</c> fails or returns an error tuple or an
- incorrect value, this function returns <c>{error,<anno>Error</anno>r}</c> where
- <c><anno>Error</anno></c> is a term with information about the error, and
- the supervisor_bridge terminates with reason <c><anno>Error</anno></c>.</p>
+ <p><c><anno>Args</anno></c> is an arbitrary term that is passed as the
+ argument to <c><anno>Module</anno>:init/1</c>.</p>
+ <list type="bulleted">
+ <item>
+ <p>If the supervisor bridge and the subsystem are successfully
+ started, the function returns <c>{ok,<anno>Pid</anno>}</c>, where
+ <c><anno>Pid</anno></c> is is the pid of the supervisor
+ bridge.</p>
+ </item>
+ <item>
+ <p>If there already exists a process with the specified
+ <c><anno>SupBridgeName</anno></c>, the function returns
+ <c>{error,{already_started,<anno>Pid</anno>}}</c>, where
+ <c><anno>Pid</anno></c> is the pid of that process.</p>
+ </item>
+ <item>
+ <p>If <c><anno>Module</anno>:init/1</c> returns <c>ignore</c>, this
+ function returns <c>ignore</c> as well and the supervisor bridge
+ terminates with reason <c>normal</c>.</p>
+ </item>
+ <item>
+ <p>If <c><anno>Module</anno>:init/1</c> fails or returns an error
+ tuple or an incorrect value, this function returns
+ <c>{error,<anno>Error</anno>r}</c>, where
+ <c><anno>Error</anno></c> is a term with information about the
+ error, and the supervisor bridge
+ terminates with reason <c><anno>Error</anno></c>.</p>
+ </item>
+ </list>
</desc>
</func>
</funcs>
<section>
- <title>CALLBACK FUNCTIONS</title>
- <p>The following functions should be exported from a
+ <title>Callback Functions</title>
+ <p>The following functions must be exported from a
<c>supervisor_bridge</c> callback module.</p>
</section>
+
<funcs>
<func>
<name>Module:init(Args) -> Result</name>
@@ -110,25 +143,26 @@
<v>&nbsp;Error = term()</v>
</type>
<desc>
- <p>Whenever a supervisor_bridge is started using
- <c>supervisor_bridge:start_link/2,3</c>, this function is called
+ <p>Whenever a supervisor bridge is started using
+ <seealso marker="#start_link/2"><c>start_link/2,3</c></seealso>,
+ this function is called
by the new process to start the subsystem and initialize.</p>
<p><c>Args</c> is the <c>Args</c> argument provided to the start
function.</p>
- <p>The function should return <c>{ok,Pid,State}</c> where <c>Pid</c>
+ <p>The function is to return <c>{ok,Pid,State}</c>, where <c>Pid</c>
is the pid of the main process in the subsystem and <c>State</c>
is any term.</p>
<p>If later <c>Pid</c> terminates with a reason <c>Reason</c>,
- the supervisor bridge will terminate with reason <c>Reason</c> as
- well.
- If later the supervisor_bridge is stopped by its supervisor with
- reason <c>Reason</c>, it will call
+ the supervisor bridge terminates with reason <c>Reason</c> as well.
+ If later the supervisor bridge is stopped by its supervisor with
+ reason <c>Reason</c>, it calls
<c>Module:terminate(Reason,State)</c> to terminate.</p>
- <p>If something goes wrong during the initialization the function
- should return <c>{error,Error}</c> where <c>Error</c> is any
- term, or <c>ignore</c>.</p>
+ <p>If the initialization fails, the function is to return
+ <c>{error,Error}</c>, where <c>Error</c> is any term,
+ or <c>ignore</c>.</p>
</desc>
</func>
+
<func>
<name>Module:terminate(Reason, State)</name>
<fsummary>Clean up and stop subsystem.</fsummary>
@@ -137,15 +171,15 @@
<v>State = term()</v>
</type>
<desc>
- <p>This function is called by the supervisor_bridge when it is about
- to terminate. It should be the opposite of <c>Module:init/1</c>
+ <p>This function is called by the supervisor bridge when it is about
+ to terminate. It is to be the opposite of <c>Module:init/1</c>
and stop the subsystem and do any necessary cleaning up.
The return value is ignored.</p>
- <p><c>Reason</c> is <c>shutdown</c> if the supervisor_bridge is
- terminated by its supervisor. If the supervisor_bridge terminates
+ <p><c>Reason</c> is <c>shutdown</c> if the supervisor bridge is
+ terminated by its supervisor. If the supervisor bridge terminates
because a a linked process (apart from the main process of
the subsystem) has terminated with reason <c>Term</c>,
- <c>Reason</c> will be <c>Term</c>.</p>
+ then <c>Reason</c> becomes <c>Term</c>.</p>
<p><c>State</c> is taken from the return value of
<c>Module:init/1</c>.</p>
</desc>
@@ -153,9 +187,9 @@
</funcs>
<section>
- <title>SEE ALSO</title>
- <p><seealso marker="supervisor">supervisor(3)</seealso>,
- <seealso marker="sys">sys(3)</seealso></p>
+ <title>See Also</title>
+ <p><seealso marker="supervisor"><c>supervisor(3)</c></seealso>,
+ <seealso marker="sys"><c>sys(3)</c></seealso></p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/sys.xml b/lib/stdlib/doc/src/sys.xml
index 2255395f46..1120b926d5 100644
--- a/lib/stdlib/doc/src/sys.xml
+++ b/lib/stdlib/doc/src/sys.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2016</year>
+ <year>1996</year><year>2014</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -30,62 +30,67 @@
<checked></checked>
<date>1996-06-06</date>
<rev></rev>
- <file>sys.sgml</file>
+ <file>sys.xml</file>
</header>
<module>sys</module>
- <modulesummary>A Functional Interface to System Messages</modulesummary>
+ <modulesummary>A functional interface to system messages.</modulesummary>
<description>
- <p>This module contains functions for sending system messages used by programs, and messages used for debugging purposes.
- </p>
- <p>Functions used for implementation of processes
- should also understand system messages such as debugging
- messages and code change. These functions must be used to implement the use of system messages for a process; either directly, or through standard behaviours, such as <c>gen_server</c>.</p>
- <p>The default timeout is 5000 ms, unless otherwise specified. The
- <c>timeout</c> defines the time period to wait for the process to
+ <p>This module contains functions for sending system messages used by
+ programs, and messages used for debugging purposes.</p>
+ <p>Functions used for implementation of processes are also expected to
+ understand system messages, such as debug messages and code change. These
+ functions must be used to implement the use of system messages for a
+ process; either directly, or through standard behaviors, such as
+ <seealso marker="gen_server"><c>gen_server</c></seealso>.</p>
+ <p>The default time-out is 5000 ms, unless otherwise specified.
+ <c>timeout</c> defines the time to wait for the process to
respond to a request. If the process does not respond, the
function evaluates <c>exit({timeout, {M, F, A}})</c>.
</p>
- <p><marker id="dbg_opt"/>The functions make reference to a debug structure.
- The debug structure is a list of <c>dbg_opt()</c>.
- <c>dbg_opt()</c> is an internal data type used by the
- <c>handle_system_msg/6</c> function. No debugging is performed if it is an empty list.
- </p>
+ <marker id="dbg_opt"/>
+ <p>The functions make references to a debug structure.
+ The debug structure is a list of <c>dbg_opt()</c>, which is an internal
+ data type used by function <seealso marker="#handle_system_msg/6">
+ <c>handle_system_msg/6</c></seealso>. No debugging is performed if it is
+ an empty list.</p>
</description>
<section>
<title>System Messages</title>
- <p>Processes which are not implemented as one of the standard
- behaviours must still understand system
- messages. There are three different messages which must be
- understood:
- </p>
+ <p>Processes that are not implemented as one of the standard
+ behaviors must still understand system messages. The following
+ three messages must be understood:</p>
<list type="bulleted">
<item>
<p>Plain system messages. These are received as
<c>{system, From, Msg}</c>. The content and meaning of
this message are not interpreted by the
- receiving process module. When a system message has been
- received, the function <c>sys:handle_system_msg/6</c>
- is called in order to handle the request.
- </p>
+ receiving process module. When a system message is received, function
+ <seealso marker="#handle_system_msg/6">
+ <c>handle_system_msg/6</c></seealso>
+ is called to handle the request.</p>
</item>
<item>
<p>Shutdown messages. If the process traps exits, it must
- be able to handle an shut-down request from its parent, the
+ be able to handle a shutdown request from its parent, the
supervisor. The message <c>{'EXIT', Parent, Reason}</c>
- from the parent is an order to terminate. The process must terminate when this message is received, normally with the
+ from the parent is an order to terminate. The process must
+ terminate when this message is received, normally with the
same <c>Reason</c> as <c>Parent</c>.
</p>
</item>
<item>
- <p>There is one more message which the process must understand if the modules used to implement the process change dynamically during runtime. An example of such a process is the <c>gen_event</c> processes. This message is <c>{get_modules, From}</c>. The reply to this message is <c>From ! {modules, Modules}</c>,
- where <c>Modules</c> is a list of the currently active modules in the process.
- </p>
+ <p>If the modules used to implement the process change dynamically
+ during runtime, the process must understand one more message. An
+ example is the <seealso marker="gen_event"><c>gen_event</c></seealso>
+ processes. The message is <c>{get_modules, From}</c>.
+ The reply to this message is <c>From ! {modules, Modules}</c>, where
+ <c>Modules</c> is a list of the currently active modules in the
+ process.</p>
<p>This message is used by the release handler to find which
- processes execute a certain module. The process may at a
- later time be suspended and ordered to perform a code change
- for one of its modules.
- </p>
+ processes that execute a certain module. The process can later be
+ suspended and ordered to perform a code change for one of its
+ modules.</p>
</item>
</list>
</section>
@@ -93,15 +98,16 @@
<section>
<title>System Events</title>
<p>When debugging a process with the functions of this
- module, the process generates <em>system_events</em> which are
+ module, the process generates <em>system_events</em>, which are
then treated in the debug function. For example, <c>trace</c>
- formats the system events to the tty.
+ formats the system events to the terminal.
</p>
- <p>There are three predefined system events which are used when a
+ <p>Three predefined system events are used when a
process receives or sends a message. The process can also define its
own system events. It is always up to the process itself
to format these events.</p>
</section>
+
<datatypes>
<datatype>
<name name="name"/>
@@ -111,7 +117,7 @@
</datatype>
<datatype>
<name name="dbg_opt"/>
- <desc><p>See <seealso marker="#dbg_opt">above</seealso>.</p></desc>
+ <desc><p>See the introduction of this manual page.</p></desc>
</datatype>
<datatype>
<name name="dbg_fun"/>
@@ -120,421 +126,594 @@
<name name="format_fun"/>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="log" arity="2"/>
- <name name="log" arity="3"/>
- <fsummary>Log system events in memory</fsummary>
- <desc>
- <p>Turns the logging of system events On or Off. If On, a
- maximum of <c><anno>N</anno></c> events are kept in the
- debug structure (the default is 10). If <c><anno>Flag</anno></c> is <c>get</c>, a list of all
- logged events is returned. If <c><anno>Flag</anno></c> is <c>print</c>, the
- logged events are printed to <c>standard_io</c>. The events are
- formatted with a function that is defined by the process that
- generated the event (with a call to
- <c>sys:handle_debug/4</c>).</p>
- </desc>
- </func>
- <func>
- <name name="log_to_file" arity="2"/>
- <name name="log_to_file" arity="3"/>
- <fsummary>Log system events to the specified file</fsummary>
- <desc>
- <p>Enables or disables the logging of all system events in textual
- format to the file. The events are formatted with a function that is
- defined by the process that generated the event (with a call
- to <c>sys:handle_debug/4</c>).</p>
- </desc>
- </func>
- <func>
- <name name="statistics" arity="2"/>
- <name name="statistics" arity="3"/>
- <fsummary>Enable or disable the collections of statistics</fsummary>
+ <name name="change_code" arity="4"/>
+ <name name="change_code" arity="5"/>
+ <fsummary>Send the code change system message to the process.</fsummary>
<desc>
- <p>Enables or disables the collection of statistics. If <c><anno>Flag</anno></c> is
- <c>get</c>, the statistical collection is returned.</p>
+ <p>Tells the process to change code. The process must be
+ suspended to handle this message. Argument <c><anno>Extra</anno></c>
+ is reserved for each process to use as its own. Function
+ <c><anno>Module</anno>:system_code_change/4</c> is called.
+ <c><anno>OldVsn</anno></c> is the old version of the
+ <c><anno>Module</anno></c>.</p>
</desc>
</func>
+
<func>
- <name name="trace" arity="2"/>
- <name name="trace" arity="3"/>
- <fsummary>Print all system events on <c>standard_io</c></fsummary>
+ <name name="get_state" arity="1"/>
+ <name name="get_state" arity="2"/>
+ <fsummary>Get the state of the process.</fsummary>
<desc>
- <p>Prints all system events on <c>standard_io</c>. The events are
- formatted with a function that is defined by the process that
- generated the event (with a call to
- <c>sys:handle_debug/4</c>).</p>
+ <p>Gets the state of the process.</p>
+ <note>
+ <p>These functions are intended only to help with debugging. They are
+ provided for convenience, allowing developers to avoid having to
+ create their own state extraction functions and also avoid having
+ to interactively extract the state from the return values of
+ <seealso marker="#get_status-1"><c>get_status/1</c></seealso> or
+ <seealso marker="#get_status-2"><c>get_status/2</c></seealso>
+ while debugging.</p>
+ </note>
+ <p>The value of <c><anno>State</anno></c> varies for different types of
+ processes, as follows:</p>
+ <list type="bulleted">
+ <item>
+ <p>For a
+ <seealso marker="gen_server"><c>gen_server</c></seealso>
+ process, the returned <c><anno>State</anno></c>
+ is the state of the callback module.</p>
+ </item>
+ <item>
+ <p>For a
+ <seealso marker="gen_fsm"><c>gen_fsm</c></seealso>
+ process, <c><anno>State</anno></c> is the tuple
+ <c>{CurrentStateName, CurrentStateData}</c>.</p>
+ </item>
+ <item>
+ <p>For a
+ <seealso marker="gen_statem"><c>gen_statem</c></seealso>
+ process, <c><anno>State</anno></c> is the tuple
+ <c>{CurrentState,CurrentData}</c>.</p>
+ </item>
+ <item>
+ <p>For a
+ <seealso marker="gen_event"><c>gen_event</c></seealso>
+ process, <c><anno>State</anno></c> is a list of tuples,
+ where each tuple corresponds to an event handler registered
+ in the process and contains <c>{Module, Id, HandlerState}</c>,
+ as follows:</p>
+ <taglist>
+ <tag><c>Module</c></tag>
+ <item>
+ <p>The module name of the event handler.</p>
+ </item>
+ <tag><c>Id</c></tag>
+ <item>
+ <p>The ID of the handler (which is <c>false</c> if it was
+ registered without an ID).</p>
+ </item>
+ <tag><c>HandlerState</c></tag>
+ <item>
+ <p>The state of the handler.</p>
+ </item>
+ </taglist>
+ </item>
+ </list>
+ <p>If the callback module exports a function <c>system_get_state/1</c>,
+ it is called in the target process to get its state. Its argument is
+ the same as the <c>Misc</c> value returned by
+ <seealso marker="#get_status-1"><c>get_status/1,2</c></seealso>, and
+ function <seealso marker="#Module:system_get_state/1">
+ <c>Module:system_get_state/1</c></seealso> is expected to extract the
+ state of the callback module from it. Function
+ <c>system_get_state/1</c> must return <c>{ok, State}</c>, where
+ <c>State</c> is the state of the callback module.</p>
+ <p>If the callback module does not export a <c>system_get_state/1</c>
+ function, <c>get_state/1,2</c> assumes that the <c>Misc</c> value is
+ the state of the callback module and returns it directly instead.</p>
+ <p>If the callback module's <c>system_get_state/1</c> function crashes
+ or throws an exception, the caller exits with error
+ <c>{callback_failed, {Module, system_get_state}, {Class, Reason}}</c>,
+ where <c>Module</c> is the name of the callback module and
+ <c>Class</c> and <c>Reason</c> indicate details of the exception.</p>
+ <p>Function <c>system_get_state/1</c> is primarily useful for
+ user-defined behaviors and modules that implement OTP
+ <seealso marker="#special_process">special processes</seealso>.
+ The <c>gen_server</c>, <c>gen_fsm</c>,
+ <c>gen_statem</c>, and <c>gen_event</c> OTP
+ behavior modules export this function, so callback modules for those
+ behaviors need not to supply their own.</p>
+ <p>For more information about a process, including its state, see
+ <seealso marker="#get_status-1"><c>get_status/1</c></seealso> and
+ <seealso marker="#get_status-2"><c>get_status/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="no_debug" arity="1"/>
- <name name="no_debug" arity="2"/>
- <fsummary>Turn off debugging</fsummary>
+ <name name="get_status" arity="1"/>
+ <name name="get_status" arity="2"/>
+ <fsummary>Get the status of the process.</fsummary>
<desc>
- <p>Turns off all debugging for the process. This includes
- functions that have been installed explicitly with the
- <c>install</c> function, for example triggers.</p>
+ <p>Gets the status of the process.</p>
+ <p>The value of <c><anno>Misc</anno></c> varies for different types of
+ processes, for example:</p>
+ <list type="bulleted">
+ <item>
+ <p>A <seealso marker="gen_server"><c>gen_server</c></seealso>
+ process returns the state of the callback module.</p>
+ </item>
+ <item>
+ <p>A <seealso marker="gen_fsm"><c>gen_fsm</c></seealso>
+ process returns information, such as its current
+ state name and state data.</p>
+ </item>
+ <item>
+ <p>A <seealso marker="gen_statem"><c>gen_statem</c></seealso>
+ process returns information, such as its current
+ state name and state data.</p>
+ </item>
+ <item>
+ <p>A <seealso marker="gen_event"><c>gen_event</c></seealso>
+ process returns information about each of its
+ registered handlers.</p>
+ </item>
+ </list>
+ <p>Callback modules for <c>gen_server</c>,
+ <c>gen_fsm</c>, <c>gen_statem</c>, and <c>gen_event</c>
+ can also change the value of <c><anno>Misc</anno></c>
+ by exporting a function <c>format_status/2</c>, which contributes
+ module-specific information. For details, see
+ <seealso marker="gen_server#Module:format_status/2">
+ <c>gen_server:format_status/2</c></seealso>,
+ <seealso marker="gen_fsm#Module:format_status/2">
+ <c>gen_fsm:format_status/2</c></seealso>,
+ <seealso marker="gen_statem#Module:format_status/2">
+ <c>gen_statem:format_status/2</c></seealso>, and
+ <seealso marker="gen_event#Module:format_status/2">
+ <c>gen_event:format_status/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name name="suspend" arity="1"/>
- <name name="suspend" arity="2"/>
- <fsummary>Suspend the process</fsummary>
+ <name name="install" arity="2"/>
+ <name name="install" arity="3"/>
+ <fsummary>Install a debug function in the process.</fsummary>
<desc>
- <p>Suspends the process. When the process is suspended, it
- will only respond to other system messages, but not other
- messages.</p>
+ <p>Enables installation of alternative debug functions. An example of
+ such a function is a trigger, a function that waits for some
+ special event and performs some action when the event is
+ generated. For example, turning on low-level tracing.</p>
+ <p><c><anno>Func</anno></c> is called whenever a system event is
+ generated. This function is to return <c>done</c>, or a new
+ <c>Func</c> state. In the first case, the function is removed. It is
+ also removed if the function fails.</p>
</desc>
</func>
+
<func>
- <name name="resume" arity="1"/>
- <name name="resume" arity="2"/>
- <fsummary>Resume a suspended process</fsummary>
+ <name name="log" arity="2"/>
+ <name name="log" arity="3"/>
+ <fsummary>Log system events in memory.</fsummary>
<desc>
- <p>Resumes a suspended process.</p>
+ <p>Turns the logging of system events on or off. If on, a
+ maximum of <c><anno>N</anno></c> events are kept in the
+ debug structure (default is 10).</p>
+ <p>If <c><anno>Flag</anno></c> is <c>get</c>, a list of all logged
+ events is returned.</p>
+ <p>If <c><anno>Flag</anno></c> is <c>print</c>, the logged events
+ are printed to <c>standard_io</c>.</p>
+ <p>The events are formatted with a function that is defined by the
+ process that generated the event (with a call to
+ <seealso marker="#handle_debug/4">
+ <c>handle_debug/4</c>)</seealso>.</p>
</desc>
</func>
+
<func>
- <name name="change_code" arity="4"/>
- <name name="change_code" arity="5"/>
- <fsummary>Send the code change system message to the process</fsummary>
+ <name name="log_to_file" arity="2"/>
+ <name name="log_to_file" arity="3"/>
+ <fsummary>Log system events to the specified file.</fsummary>
<desc>
- <p>Tells the process to change code. The process must be
- suspended to handle this message. The <c><anno>Extra</anno></c> argument is
- reserved for each process to use as its own. The function
- <c><anno>Module</anno>:system_code_change/4</c> is called. <c><anno>OldVsn</anno></c> is
- the old version of the <c><anno>Module</anno></c>.</p>
+ <p>Enables or disables the logging of all system events in text
+ format to the file. The events are formatted with a function that is
+ defined by the process that generated the event (with a call to
+ <seealso marker="#handle_debug/4"><c>handle_debug/4</c></seealso>).
+ </p>
</desc>
</func>
+
<func>
- <name name="get_status" arity="1"/>
- <name name="get_status" arity="2"/>
- <fsummary>Get the status of the process</fsummary>
+ <name name="no_debug" arity="1"/>
+ <name name="no_debug" arity="2"/>
+ <fsummary>Turn off debugging.</fsummary>
<desc>
- <p>Gets the status of the process.</p>
- <p>The value of <c><anno>Misc</anno></c> varies for different types of
- processes. For example, a <c>gen_server</c> process returns
- the callback module's state, a <c>gen_fsm</c> process
- returns information such as its current state name and state data,
- a <c>gen_statem</c> process returns information about
- its current state and data, and a <c>gen_event</c> process
- returns information about each of its
- registered handlers. Callback modules for <c>gen_server</c>,
- <c>gen_fsm</c>, <c>gen_statem</c> and <c>gen_event</c>
- can also customise the value
- of <c><anno>Misc</anno></c> by exporting a <c>format_status/2</c>
- function that contributes module-specific information;
- see <seealso marker="gen_server#Module:format_status/2">gen_server format_status/2</seealso>,
- <seealso marker="gen_fsm#Module:format_status/2">gen_fsm format_status/2</seealso>,
- <seealso marker="gen_statem#Module:format_status/2">gen_statem format_status/2</seealso>, and
- <seealso marker="gen_event#Module:format_status/2">gen_event format_status/2</seealso>
- for more details.</p>
+ <p>Turns off all debugging for the process. This includes
+ functions that are installed explicitly with function
+ <seealso marker="#install/2"><c>install/2,3</c></seealso>,
+ for example, triggers.</p>
</desc>
</func>
+
<func>
- <name name="get_state" arity="1"/>
- <name name="get_state" arity="2"/>
- <fsummary>Get the state of the process</fsummary>
+ <name name="remove" arity="2"/>
+ <name name="remove" arity="3"/>
+ <fsummary>Remove a debug function from the process.</fsummary>
<desc>
- <p>Gets the state of the process.</p>
- <note>
- <p>These functions are intended only to help with debugging. They are provided for
- convenience, allowing developers to avoid having to create their own state extraction
- functions and also avoid having to interactively extract state from the return values of
- <seealso marker="#get_status-1"><c>get_status/1</c></seealso> or
- <seealso marker="#get_status-2"><c>get_status/2</c></seealso> while debugging.</p>
- </note>
- <p>The value of <c><anno>State</anno></c> varies for different types of
- processes. For a <c>gen_server</c> process, the returned <c><anno>State</anno></c>
- is simply the callback module's state. For a <c>gen_fsm</c> process,
- <c><anno>State</anno></c> is the tuple <c>{CurrentStateName, CurrentStateData}</c>.
- For a <c>gen_statem</c> process <c><anno>State</anno></c> is
- the tuple <c>{CurrentState,CurrentData}.</c>
- For a <c>gen_event</c> process, <c><anno>State</anno></c> a list of tuples,
- where each tuple corresponds to an event handler registered in the process and contains
- <c>{Module, Id, HandlerState}</c>, where <c>Module</c> is the event handler's module name,
- <c>Id</c> is the handler's ID (which is the value <c>false</c> if it was registered without
- an ID), and <c>HandlerState</c> is the handler's state.</p>
- <p>If the callback module exports a <c>system_get_state/1</c> function, it will be called in the
- target process to get its state. Its argument is the same as the <c>Misc</c> value returned by
- <seealso marker="#get_status-1">get_status/1,2</seealso>, and the <c>system_get_state/1</c>
- function is expected to extract the callback module's state from it. The <c>system_get_state/1</c>
- function must return <c>{ok, State}</c> where <c>State</c> is the callback module's state.</p>
- <p>If the callback module does not export a <c>system_get_state/1</c> function, <c>get_state/1,2</c>
- assumes the <c>Misc</c> value is the callback module's state and returns it directly instead.</p>
- <p>If the callback module's <c>system_get_state/1</c> function crashes or throws an exception, the
- caller exits with error <c>{callback_failed, {Module, system_get_state}, {Class, Reason}}</c> where
- <c>Module</c> is the name of the callback module and <c>Class</c> and <c>Reason</c> indicate
- details of the exception.</p>
- <p>The <c>system_get_state/1</c> function is primarily useful for user-defined
- behaviours and modules that implement OTP <seealso marker="#special_process">special
- processes</seealso>. The <c>gen_server</c>, <c>gen_fsm</c>,
- <c>gen_statem</c> and <c>gen_event</c> OTP
- behaviour modules export this function, so callback modules for those behaviours
- need not supply their own.</p>
- <p>To obtain more information about a process, including its state, see
- <seealso marker="#get_status-1">get_status/1</seealso> and
- <seealso marker="#get_status-2">get_status/2</seealso>.</p>
+ <p>Removes an installed debug function from the
+ process. <c><anno>Func</anno></c> must be the same as previously
+ installed.</p>
</desc>
</func>
+
<func>
<name name="replace_state" arity="2"/>
<name name="replace_state" arity="3"/>
- <fsummary>Replace the state of the process</fsummary>
+ <fsummary>Replace the state of the process.</fsummary>
<desc>
<p>Replaces the state of the process, and returns the new state.</p>
<note>
- <p>These functions are intended only to help with debugging, and they should not be
- be called from normal code. They are provided for convenience, allowing developers
- to avoid having to create their own custom state replacement functions.</p>
+ <p>These functions are intended only to help with debugging, and are
+ not to be called from normal code. They are provided for
+ convenience, allowing developers to avoid having to create their own
+ custom state replacement functions.</p>
</note>
- <p>The <c><anno>StateFun</anno></c> function provides a new state for the process.
- The <c><anno>State</anno></c> argument and <c><anno>NewState</anno></c> return value
- of <c><anno>StateFun</anno></c> vary for different types of processes. For a
- <c>gen_server</c> process, <c><anno>State</anno></c> is simply the callback module's
- state, and <c><anno>NewState</anno></c> is a new instance of that state. For a
- <c>gen_fsm</c> process, <c><anno>State</anno></c> is the tuple
- <c>{CurrentStateName, CurrentStateData}</c>, and <c><anno>NewState</anno></c>
- is a similar tuple that may contain a new state name, new state data, or both.
- The same applies for a <c>gen_statem</c> process but
- it names the tuple fields <c>{CurrentState,CurrentData}</c>.
- For a <c>gen_event</c> process, <c><anno>State</anno></c> is the tuple
- <c>{Module, Id, HandlerState}</c> where <c>Module</c> is the event handler's module name,
- <c>Id</c> is the handler's ID (which is the value <c>false</c> if it was registered without
- an ID), and <c>HandlerState</c> is the handler's state. <c><anno>NewState</anno></c> is a
- similar tuple where <c>Module</c> and <c>Id</c> shall have the same values as in
- <c><anno>State</anno></c> but the value of <c>HandlerState</c> may be different. Returning
- a <c><anno>NewState</anno></c> whose <c>Module</c> or <c>Id</c> values differ from those of
- <c><anno>State</anno></c> will result in the event handler's state remaining unchanged. For a
- <c>gen_event</c> process, <c><anno>StateFun</anno></c> is called once for each event handler
- registered in the <c>gen_event</c> process.</p>
- <p>If a <c><anno>StateFun</anno></c> function decides not to effect any change in process
- state, then regardless of process type, it may simply return its <c><anno>State</anno></c>
- argument.</p>
- <p>If a <c><anno>StateFun</anno></c> function crashes or throws an exception, then
- for <c>gen_server</c>, <c>gen_fsm</c> or <c>gen_statem</c> processes,
- the original state of the process is
- unchanged. For <c>gen_event</c> processes, a crashing or failing <c><anno>StateFun</anno></c>
- function means that only the state of the particular event handler it was working on when it
- failed or crashed is unchanged; it can still succeed in changing the states of other event
+ <p>Function <c><anno>StateFun</anno></c> provides a new state for the
+ process. Argument <c><anno>State</anno></c> and the
+ <c><anno>NewState</anno></c> return value of
+ <c><anno>StateFun</anno></c> vary for different types of
+ processes as follows:</p>
+ <list type="bulleted">
+ <item>
+ <p>For a <seealso marker="gen_server"><c>gen_server</c></seealso>
+ process, <c><anno>State</anno></c> is the state of the callback
+ module and <c><anno>NewState</anno></c>
+ is a new instance of that state.</p>
+ </item>
+ <item>
+ <p>For a <seealso marker="gen_fsm"><c>gen_fsm</c></seealso> process,
+ <c><anno>State</anno></c> is the tuple <c>{CurrentStateName,
+ CurrentStateData}</c>, and <c><anno>NewState</anno></c> is a
+ similar tuple, which can contain
+ a new state name, new state data, or both.</p>
+ </item>
+ <item>
+ <p>For a <seealso marker="gen_statem"><c>gen_statem</c></seealso>
+ process, <c><anno>State</anno></c> is the
+ tuple <c>{CurrentState,CurrentData}</c>,
+ and <c><anno>NewState</anno></c> is a
+ similar tuple, which can contain
+ a new current state, new state data, or both.</p>
+ </item>
+ <item>
+ <p>For a <seealso marker="gen_event"><c>gen_event</c></seealso>
+ process, <c><anno>State</anno></c> is the
+ tuple <c>{Module, Id, HandlerState}</c> as follows:</p>
+ <taglist>
+ <tag><c>Module</c></tag>
+ <item>
+ <p>The module name of the event handler.</p>
+ </item>
+ <tag><c>Id</c></tag>
+ <item>
+ <p>The ID of the handler (which is <c>false</c> if it was
+ registered without an ID).</p>
+ </item>
+ <tag><c>HandlerState</c></tag>
+ <item>
+ <p>The state of the handler.</p>
+ </item>
+ </taglist>
+ <p><c><anno>NewState</anno></c> is a similar tuple where
+ <c>Module</c> and <c>Id</c> are to have the same values as in
+ <c><anno>State</anno></c>, but the value of <c>HandlerState</c>
+ can be different. Returning a <c><anno>NewState</anno></c>, whose
+ <c>Module</c> or <c>Id</c> values differ from those of
+ <c><anno>State</anno></c>, leaves the state of the event handler
+ unchanged. For a <c>gen_event</c> process,
+ <c><anno>StateFun</anno></c> is called once for each event handler
+ registered in the <c>gen_event</c> process.</p>
+ </item>
+ </list>
+ <p>If a <c><anno>StateFun</anno></c> function decides not to effect any
+ change in process state, then regardless of process type, it can
+ return its <c><anno>State</anno></c> argument.</p>
+ <p>If a <c><anno>StateFun</anno></c> function crashes or throws an
+ exception, the original state of the process is unchanged for
+ <c>gen_server</c>, <c>gen_fsm</c>, and <c>gen_statem</c> processes.
+ For <c>gen_event</c> processes, a crashing or
+ failing <c><anno>StateFun</anno></c> function
+ means that only the state of the particular event handler it was
+ working on when it failed or crashed is unchanged; it can still
+ succeed in changing the states of other event
handlers registered in the same <c>gen_event</c> process.</p>
- <p>If the callback module exports a <c>system_replace_state/2</c> function, it will be called in the
- target process to replace its state using <c>StateFun</c>. Its two arguments are <c>StateFun</c>
- and <c>Misc</c>, where <c>Misc</c> is the same as the <c>Misc</c> value returned by
- <seealso marker="#get_status-1">get_status/1,2</seealso>. A <c>system_replace_state/2</c> function
- is expected to return <c>{ok, NewState, NewMisc}</c> where <c>NewState</c> is the callback module's
- new state obtained by calling <c>StateFun</c>, and <c>NewMisc</c> is a possibly new value used to
- replace the original <c>Misc</c> (required since <c>Misc</c> often contains the callback
- module's state within it).</p>
- <p>If the callback module does not export a <c>system_replace_state/2</c> function,
- <c>replace_state/2,3</c> assumes the <c>Misc</c> value is the callback module's state, passes it
- to <c>StateFun</c> and uses the return value as both the new state and as the new value of
- <c>Misc</c>.</p>
- <p>If the callback module's <c>system_replace_state/2</c> function crashes or throws an exception,
- the caller exits with error <c>{callback_failed, {Module, system_replace_state}, {Class, Reason}}</c>
- where <c>Module</c> is the name of the callback module and <c>Class</c> and <c>Reason</c> indicate details
- of the exception. If the callback module does not provide a <c>system_replace_state/2</c> function and
- <c>StateFun</c> crashes or throws an exception, the caller exits with error
+ <p>If the callback module exports a
+ <seealso marker="#Module:system_replace_state/2">
+ <c>system_replace_state/2</c></seealso> function, it is called in the
+ target process to replace its state using <c>StateFun</c>. Its two
+ arguments are <c>StateFun</c> and <c>Misc</c>, where
+ <c>Misc</c> is the same as the <c>Misc</c> value returned by
+ <seealso marker="#get_status-1"><c>get_status/1,2</c></seealso>.
+ A <c>system_replace_state/2</c> function is expected to return
+ <c>{ok, NewState, NewMisc}</c>, where <c>NewState</c> is the new state
+ of the callback module, obtained by calling <c>StateFun</c>, and
+ <c>NewMisc</c> is
+ a possibly new value used to replace the original <c>Misc</c>
+ (required as <c>Misc</c> often contains the state of the callback
+ module within it).</p>
+ <p>If the callback module does not export a
+ <c>system_replace_state/2</c> function,
+ <seealso marker="#replace_state/2"><c>replace_state/2,3</c></seealso>
+ assumes that <c>Misc</c> is the state of the callback module,
+ passes it to <c>StateFun</c> and uses the return value as
+ both the new state and as the new value of <c>Misc</c>.</p>
+ <p>If the callback module's function <c>system_replace_state/2</c>
+ crashes or throws an exception, the caller exits with error
+ <c>{callback_failed, {Module, system_replace_state}, {Class,
+ Reason}}</c>, where <c>Module</c> is the name of the callback module
+ and <c>Class</c> and <c>Reason</c> indicate details of the exception.
+ If the callback module does not provide a
+ <c>system_replace_state/2</c> function and <c>StateFun</c> crashes or
+ throws an exception, the caller exits with error
<c>{callback_failed, StateFun, {Class, Reason}}</c>.</p>
- <p>The <c>system_replace_state/2</c> function is primarily useful for user-defined behaviours and
- modules that implement OTP <seealso marker="#special_process">special processes</seealso>. The
- <c>gen_server</c>, <c>gen_fsm</c>, <c>gen_statem</c> and
- <c>gen_event</c> OTP behaviour modules export this function,
- and so callback modules for those behaviours need not supply their own.</p>
+ <p>Function <c>system_replace_state/2</c> is primarily useful for
+ user-defined behaviors and modules that implement OTP
+ <seealso marker="#special_process">special processes</seealso>. The
+ OTP behavior modules <c>gen_server</c>,
+ <c>gen_fsm</c>, <c>gen_statem</c>, and <c>gen_event</c>
+ export this function, so callback modules for those
+ behaviors need not to supply their own.</p>
</desc>
</func>
+
<func>
- <name name="install" arity="2"/>
- <name name="install" arity="3"/>
- <fsummary>Install a debug function in the process</fsummary>
+ <name name="resume" arity="1"/>
+ <name name="resume" arity="2"/>
+ <fsummary>Resume a suspended process.</fsummary>
<desc>
- <p>This function makes it possible to install other debug
- functions than the ones defined above. An example of such a
- function is a trigger, a function that waits for some
- special event and performs some action when the event is
- generated. This could, for example, be turning on low level tracing.
- </p>
- <p><c><anno>Func</anno></c> is called whenever a system event is
- generated. This function should return <c>done</c>, or a new
- func state. In the first case, the function is removed. It is removed
- if the function fails.</p>
+ <p>Resumes a suspended process.</p>
</desc>
</func>
+
<func>
- <name name="remove" arity="2"/>
- <name name="remove" arity="3"/>
- <fsummary>Remove a debug function from the process</fsummary>
+ <name name="statistics" arity="2"/>
+ <name name="statistics" arity="3"/>
+ <fsummary>Enable or disable the collections of statistics.</fsummary>
<desc>
- <p>Removes a previously installed debug function from the
- process. <c><anno>Func</anno></c> must be the same as previously
- installed.</p>
+ <p>Enables or disables the collection of statistics. If
+ <c><anno>Flag</anno></c> is <c>get</c>,
+ the statistical collection is returned.</p>
</desc>
</func>
+
+ <func>
+ <name name="suspend" arity="1"/>
+ <name name="suspend" arity="2"/>
+ <fsummary>Suspend the process.</fsummary>
+ <desc>
+ <p>Suspends the process. When the process is suspended, it
+ only responds to other system messages, but not other
+ messages.</p>
+ </desc>
+ </func>
+
<func>
<name name="terminate" arity="2"/>
<name name="terminate" arity="3"/>
- <fsummary>Terminate the process</fsummary>
+ <fsummary>Terminate the process.</fsummary>
<desc>
- <p>This function orders the process to terminate with the
- given <c><anno>Reason</anno></c>. The termination is done
- asynchronously, so there is no guarantee that the process is
- actually terminated when the function returns.</p>
+ <p>Orders the process to terminate with the
+ specified <c><anno>Reason</anno></c>. The termination is done
+ asynchronously, so it is not guaranteed that the process is
+ terminated when the function returns.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="trace" arity="2"/>
+ <name name="trace" arity="3"/>
+ <fsummary>Print all system events on <c>standard_io</c>.</fsummary>
+ <desc>
+ <p>Prints all system events on <c>standard_io</c>. The events are
+ formatted with a function that is defined by the process that
+ generated the event (with a call to
+ <seealso marker="#handle_debug/4"><c>handle_debug/4</c></seealso>).
+ </p>
</desc>
</func>
</funcs>
<section>
<title>Process Implementation Functions</title>
- <p><marker id="special_process"/>The following functions are used when implementing a
- special process. This is an ordinary process which does not use a
- standard behaviour, but a process which understands the standard system messages.</p>
+ <marker id="special_process"/>
+ <p>The following functions are used when implementing a
+ special process. This is an ordinary process, which does not use a
+ standard behavior, but a process that understands the standard system
+ messages.</p>
</section>
+
<funcs>
<func>
<name name="debug_options" arity="1"/>
- <fsummary>Convert a list of options to a debug structure</fsummary>
+ <fsummary>Convert a list of options to a debug structure.</fsummary>
<desc>
- <p>This function can be used by a process that initiates a debug
- structure from a list of options. The values of the
- <c><anno>Opt</anno></c> argument are the same as the corresponding
+ <p>Can be used by a process that initiates a debug
+ structure from a list of options. The values of argument
+ <c><anno>Opt</anno></c> are the same as for the corresponding
functions.</p>
</desc>
</func>
+
<func>
<name name="get_debug" arity="3"/>
- <fsummary>Get the data associated with a debug option</fsummary>
+ <fsummary>Get the data associated with a debug option.</fsummary>
<desc>
- <p>This function gets the data associated with a debug option. <c><anno>Default</anno></c> is returned if the
- <c><anno>Item</anno></c> is not found. Can be
- used by the process to retrieve debug data for printing
- before it terminates.</p>
+ <p>Gets the data associated with a debug option.
+ <c><anno>Default</anno></c>
+ is returned if <c><anno>Item</anno></c> is not found. Can be
+ used by the process to retrieve debug data for printing before it
+ terminates.</p>
</desc>
</func>
+
<func>
<name name="handle_debug" arity="4"/>
- <fsummary>Generate a system event</fsummary>
+ <fsummary>Generate a system event.</fsummary>
<desc>
<p>This function is called by a process when it generates a
- system event. <c><anno>FormFunc</anno></c> is a formatting
- function which is called as <c><anno>FormFunc</anno>(Device,
- <anno>Event</anno>, <anno>Extra</anno>)</c> in order to print
- the events, which is necessary if tracing is activated.
- <c><anno>Extra</anno></c> is any extra information which the
- process needs in the format function, for example the name
- of the process.</p>
+ system event. <c><anno>FormFunc</anno></c> is a formatting
+ function, called as <c><anno>FormFunc</anno>(Device,
+ <anno>Event</anno>, <anno>Extra</anno>)</c> to print the events,
+ which is necessary if tracing is activated.
+ <c><anno>Extra</anno></c> is any extra information that the
+ process needs in the format function, for example, the process
+ name.</p>
</desc>
</func>
+
<func>
<name name="handle_system_msg" arity="6"/>
- <fsummary>Take care of system messages</fsummary>
+ <fsummary>Take care of system messages.</fsummary>
<desc>
- <p>This function is used by a process module that wishes to take care of system
- messages. The process receives a <c>{system, <anno>From</anno>, <anno>Msg</anno>}</c>
- message and passes the <c><anno>Msg</anno></c> and <c><anno>From</anno></c> to this
- function.
- </p>
- <p>This function <em>never</em> returns. It calls the function
- <c><anno>Module</anno>:system_continue(<anno>Parent</anno>, NDebug, <anno>Misc</anno>)</c> where the
- process continues the execution, or
- <c><anno>Module</anno>:system_terminate(Reason, <anno>Parent</anno>, <anno>Debug</anno>, <anno>Misc</anno>)</c> if
- the process should terminate. The <c><anno>Module</anno></c> must export
- <c>system_continue/3</c>, <c>system_terminate/4</c>,
- <c>system_code_change/4</c>, <c>system_get_state/1</c> and
- <c>system_replace_state/2</c> (see below).
- </p>
- <p>The <c><anno>Misc</anno></c> argument can be used to save internal data
- in a process, for example its state. It is sent to
+ <p>This function is used by a process module to take care of system
+ messages. The process receives a
+ <c>{system, <anno>From</anno>, <anno>Msg</anno>}</c> message and
+ passes <c><anno>Msg</anno></c> and <c><anno>From</anno></c> to this
+ function.</p>
+ <p>This function <em>never</em> returns. It calls either of the
+ following functions:</p>
+ <list type="bulleted">
+ <item>
+ <p><c><anno>Module</anno>:system_continue(<anno>Parent</anno>,
+ NDebug, <anno>Misc</anno>)</c>,
+ where the process continues the execution.</p>
+ </item>
+ <item>
+ <p><c><anno>Module</anno>:system_terminate(Reason,
+ <anno>Parent</anno>, <anno>Debug</anno>, <anno>Misc</anno>)</c>,
+ if the process is to terminate.</p>
+ </item>
+ </list>
+ <p><c><anno>Module</anno></c> must export the following:</p>
+ <list type="bulleted">
+ <item><c>system_continue/3</c></item>
+ <item><c>system_terminate/4</c></item>
+ <item><c>system_code_change/4</c></item>
+ <item><c>system_get_state/1</c></item>
+ <item><c>system_replace_state/2</c></item>
+ </list>
+ <p>Argument <c><anno>Misc</anno></c> can be used to save internal data
+ in a process, for example, its state. It is sent to
<c><anno>Module</anno>:system_continue/3</c> or
- <c><anno>Module</anno>:system_terminate/4</c></p>
+ <c><anno>Module</anno>:system_terminate/4</c>.</p>
</desc>
</func>
+
<func>
<name name="print_log" arity="1"/>
- <fsummary>Print the logged events in the debug structure</fsummary>
+ <fsummary>Print the logged events in the debug structure.</fsummary>
<desc>
- <p>Prints the logged system events in the debug structure
+ <p>Prints the logged system events in the debug structure,
using <c>FormFunc</c> as defined when the event was
- generated by a call to <c>handle_debug/4</c>.</p>
+ generated by a call to
+ <seealso marker="#handle_debug/4"><c>handle_debug/4</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name>Mod:system_continue(Parent, Debug, Misc) -> none()</name>
- <fsummary>Called when the process should continue its execution</fsummary>
+ <name>Module:system_code_change(Misc, Module, OldVsn, Extra) ->
+ {ok, NMisc}</name>
+ <fsummary>Called when the process is to perform a code change.</fsummary>
<type>
- <v>Parent = pid()</v>
- <v>Debug = [<seealso marker="#type-dbg_opt">dbg_opt()</seealso>]</v>
<v>Misc = term()</v>
+ <v>OldVsn = undefined | term()</v>
+ <v>Module = atom()</v>
+ <v>Extra = term()</v>
+ <v>NMisc = term()</v>
</type>
<desc>
- <p>This function is called from <c>sys:handle_system_msg/6</c> when the process
- should continue its execution (for example after it has been
- suspended). This function never returns.</p>
+ <p>Called from <seealso marker="#handle_system_msg/6">
+ <c>handle_system_msg/6</c></seealso> when the process is to perform a
+ code change. The code change is used when the
+ internal data structure has changed. This function
+ converts argument <c>Misc</c> to the new data
+ structure. <c>OldVsn</c> is attribute <em>vsn</em> of the
+ old version of the <c>Module</c>. If no such attribute is
+ defined, the atom <c>undefined</c> is sent.</p>
</desc>
</func>
+
<func>
- <name>Mod:system_terminate(Reason, Parent, Debug, Misc) -> none()</name>
- <fsummary>Called when the process should terminate</fsummary>
+ <name>Module:system_continue(Parent, Debug, Misc) -> none()</name>
+ <fsummary>Called when the process is to continue its execution.</fsummary>
<type>
- <v>Reason = term()</v>
<v>Parent = pid()</v>
<v>Debug = [<seealso marker="#type-dbg_opt">dbg_opt()</seealso>]</v>
<v>Misc = term()</v>
</type>
<desc>
- <p>This function is called from <c>sys:handle_system_msg/6</c> when the process
- should terminate. For example, this function is called when
- the process is suspended and its parent orders shut-down.
- It gives the process a chance to do a clean-up. This function never
- returns.</p>
+ <p>Called from <seealso marker="#handle_system_msg/6">
+ <c>handle_system_msg/6</c></seealso> when the process is to continue
+ its execution (for example, after it has been
+ suspended). This function never returns.</p>
</desc>
</func>
+
<func>
- <name>Mod:system_code_change(Misc, Module, OldVsn, Extra) -> {ok, NMisc}</name>
- <fsummary>Called when the process should perform a code change</fsummary>
+ <name>Module:system_get_state(Misc) -> {ok, State}</name>
+ <fsummary>Called when the process is to return its current state.
+ </fsummary>
<type>
<v>Misc = term()</v>
- <v>OldVsn = undefined | term()</v>
- <v>Module = atom()</v>
- <v>Extra = term()</v>
- <v>NMisc = term()</v>
+ <v>State = term()</v>
</type>
<desc>
- <p>Called from <c>sys:handle_system_msg/6</c> when the process
- should perform a code change. The code change is used when the
- internal data structure has changed. This function
- converts the <c>Misc</c> argument to the new data
- structure. <c>OldVsn</c> is the <em>vsn</em> attribute of the
- old version of the <c>Module</c>. If no such attribute was
- defined, the atom <c>undefined</c> is sent.</p>
+ <p>Called from <seealso marker="#handle_system_msg/6">
+ <c>handle_system_msg/6</c></seealso>
+ when the process is to return a term that reflects its current state.
+ <c>State</c> is the value returned by
+ <seealso marker="#get_state/2"><c>get_state/2</c></seealso>.</p>
</desc>
</func>
+
<func>
- <name>Mod:system_get_state(Misc) -> {ok, State}</name>
- <fsummary>Called when the process should return its current state</fsummary>
+ <name>Module:system_replace_state(StateFun, Misc) ->
+ {ok, NState, NMisc}</name>
+ <fsummary>Called when the process is to replace its current state.
+ </fsummary>
<type>
+ <v>StateFun = fun((State :: term()) -> NState)</v>
<v>Misc = term()</v>
- <v>State = term()</v>
- </type>
+ <v>NState = term()</v>
+ <v>NMisc = term()</v>
+ </type>
<desc>
- <p>This function is called from <c>sys:handle_system_msg/6</c> when the process
- should return a term that reflects its current state. <c>State</c> is the
- value returned by <c>sys:get_state/2</c>.</p>
+ <p>Called from <seealso marker="#handle_system_msg/6">
+ <c>handle_system_msg/6</c></seealso> when the process is to replace
+ its current state. <c>NState</c> is the value returned by
+ <seealso marker="#replace_state/3"><c>replace_state/3</c></seealso>.
+ </p>
</desc>
</func>
+
<func>
- <name>Mod:system_replace_state(StateFun, Misc) -> {ok, NState, NMisc}</name>
- <fsummary>Called when the process should replace its current state</fsummary>
+ <name>Module:system_terminate(Reason, Parent, Debug, Misc) -> none()</name>
+ <fsummary>Called when the process is to terminate.</fsummary>
<type>
- <v>StateFun = fun((State :: term()) -> NState)</v>
+ <v>Reason = term()</v>
+ <v>Parent = pid()</v>
+ <v>Debug = [<seealso marker="#type-dbg_opt">dbg_opt()</seealso>]</v>
<v>Misc = term()</v>
- <v>NState = term()</v>
- <v>NMisc = term()</v>
- </type>
+ </type>
<desc>
- <p>This function is called from <c>sys:handle_system_msg/6</c> when the process
- should replace its current state. <c>NState</c> is the value returned by
- <c>sys:replace_state/3</c>.</p>
+ <p>Called from <seealso marker="#handle_system_msg/6">
+ <c>handle_system_msg/6</c></seealso> when the process is to terminate.
+ For example, this function is called when
+ the process is suspended and its parent orders shutdown.
+ It gives the process a chance to do a cleanup. This function never
+ returns.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/timer.xml b/lib/stdlib/doc/src/timer.xml
index 4f259d57a8..fcaccdb2cb 100644
--- a/lib/stdlib/doc/src/timer.xml
+++ b/lib/stdlib/doc/src/timer.xml
@@ -30,26 +30,25 @@
<checked></checked>
<date>1998-09-09</date>
<rev>D</rev>
- <file>timer.sgml</file>
+ <file>timer.xml</file>
</header>
<module>timer</module>
- <modulesummary>Timer Functions</modulesummary>
+ <modulesummary>Timer functions.</modulesummary>
<description>
<p>This module provides useful functions related to time. Unless otherwise
- stated, time is always measured in <c>milliseconds</c>. All
- timer functions return immediately, regardless of work carried
- out by another process.
- </p>
- <p>Successful evaluations of the timer functions yield return values
- containing a timer reference, denoted <c>TRef</c> below. By using
- <c>cancel/1</c>, the returned reference can be used to cancel any
- requested action. A <c>TRef</c> is an Erlang term, the contents
- of which must not be altered.
- </p>
- <p>The timeouts are not exact, but should be <c>at least</c> as long
- as requested.
- </p>
+ stated, time is always measured in <em>milliseconds</em>. All
+ timer functions return immediately, regardless of work done by another
+ process.</p>
+ <p>Successful evaluations of the timer functions give return values
+ containing a timer reference, denoted <c>TRef</c>. By using
+ <seealso marker="#cancel/1"><c>cancel/1</c></seealso>,
+ the returned reference can be used to cancel any
+ requested action. A <c>TRef</c> is an Erlang term, which contents
+ must not be changed.</p>
+ <p>The time-outs are not exact, but are <em>at least</em> as long
+ as requested.</p>
</description>
+
<datatypes>
<datatype>
<name name="time"/>
@@ -60,231 +59,286 @@
<desc><p>A timer reference.</p></desc>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="start" arity="0"/>
- <fsummary>Start a global timer server (named <c>timer_server</c>).</fsummary>
+ <name name="apply_after" arity="4"/>
+ <fsummary>Apply <c>Module:Function(Arguments)</c> after a specified
+ <c>Time</c>.</fsummary>
<desc>
- <p>Starts the timer server. Normally, the server does not need
- to be started explicitly. It is started dynamically if it
- is needed. This is useful during development, but in a
- target system the server should be started explicitly. Use
- configuration parameters for <c>kernel</c> for this.</p>
+ <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>,
+ <anno>Arguments</anno>)</c> after <c><anno>Time</anno></c>
+ milliseconds.</p>
+ <p>Returns <c>{ok, <anno>TRef</anno>}</c> or
+ <c>{error, <anno>Reason</anno>}</c>.</p>
</desc>
</func>
+
<func>
- <name name="apply_after" arity="4"/>
- <fsummary>Apply <c>Module:Function(Arguments)</c>after a specified <c>Time</c>.</fsummary>
+ <name name="apply_interval" arity="4"/>
+ <fsummary>Evaluate <c>Module:Function(Arguments)</c> repeatedly at
+ intervals of <c>Time</c>.</fsummary>
<desc>
- <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>, <anno>Arguments</anno>)</c> after <c><anno>Time</anno></c> amount of time
- has elapsed. Returns <c>{ok, <anno>TRef</anno>}</c>, or <c>{error, <anno>Reason</anno>}</c>.</p>
+ <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>,
+ <anno>Arguments</anno>)</c> repeatedly at intervals of
+ <c><anno>Time</anno></c>.</p>
+ <p>Returns <c>{ok, <anno>TRef</anno>}</c> or
+ <c>{error, <anno>Reason</anno>}</c>.</p>
</desc>
</func>
+
<func>
- <name name="send_after" arity="2"/>
- <name name="send_after" arity="3"/>
- <fsummary>Send <c>Message</c>to <c>Pid</c>after a specified <c>Time</c>.</fsummary>
+ <name name="cancel" arity="1"/>
+ <fsummary>Cancel a previously requested time-out identified by
+ <c>TRef</c>.</fsummary>
<desc>
- <taglist>
- <tag><c>send_after/3</c></tag>
- <item>
- <p>Evaluates <c><anno>Pid</anno> ! <anno>Message</anno></c> after <c><anno>Time</anno></c> amount
- of time has elapsed. (<c><anno>Pid</anno></c> can also be an atom of a
- registered name.) Returns <c>{ok, <anno>TRef</anno>}</c>, or
- <c>{error, <anno>Reason</anno>}</c>.</p>
- </item>
- <tag><c>send_after/2</c></tag>
- <item>
- <p>Same as <c>send_after(<anno>Time</anno>, self(), <anno>Message</anno>)</c>.</p>
- </item>
- </taglist>
+ <p>Cancels a previously requested time-out. <c><anno>TRef</anno></c> is
+ a unique
+ timer reference returned by the related timer function.</p>
+ <p>Returns <c>{ok, cancel}</c>, or <c>{error, <anno>Reason</anno>}</c>
+ when <c><anno>TRef</anno></c> is not a timer reference.</p>
</desc>
</func>
+
<func>
- <name name="kill_after" arity="1"/>
- <name name="kill_after" arity="2"/>
<name name="exit_after" arity="2"/>
<name name="exit_after" arity="3"/>
- <fsummary>Send an exit signal with <c>Reason</c>after a specified <c>Time</c>.</fsummary>
+ <fsummary>Send an exit signal with <c>Reason</c> after a specified
+ <c>Time</c>.</fsummary>
+ <desc>
+ <p><c>exit_after/2</c> is the same as
+ <c>exit_after(<anno>Time</anno>, self(),
+ <anno>Reason1</anno>)</c>.</p>
+ <p><c>exit_after/3</c> sends an exit signal with reason
+ <c><anno>Reason1</anno></c> to
+ pid <c><anno>Pid</anno></c>. Returns <c>{ok, <anno>TRef</anno>}</c>
+ or <c>{error, <anno>Reason2</anno>}</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="hms" arity="3"/>
+ <fsummary>Convert <c>Hours</c>+<c>Minutes</c>+<c>Seconds</c> to
+ <c>Milliseconds</c>.</fsummary>
+ <desc>
+ <p>Returns the number of milliseconds in <c><anno>Hours</anno> +
+ <anno>Minutes</anno> + <anno>Seconds</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="hours" arity="1"/>
+ <fsummary>Convert <c>Hours</c> to <c>Milliseconds</c>.</fsummary>
+ <desc>
+ <p>Returns the number of milliseconds in <c><anno>Hours</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="kill_after" arity="1"/>
+ <name name="kill_after" arity="2"/>
+ <fsummary>Send an exit signal with <c>Reason</c> after a specified
+ <c>Time</c>.</fsummary>
+ <desc>
+ <p><c>kill_after/1</c> is the same as
+ <c>exit_after(<anno>Time</anno>, self(), kill)</c>.</p>
+ <p><c>kill_after/2</c> is the same as
+ <c>exit_after(<anno>Time</anno>, <anno>Pid</anno>, kill)</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="minutes" arity="1"/>
+ <fsummary>Converts <c>Minutes</c> to <c>Milliseconds</c>.</fsummary>
+ <desc>
+ <p>Returns the number of milliseconds in
+ <c><anno>Minutes</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="now_diff" arity="2"/>
+ <fsummary>Calculate time difference between time stamps.</fsummary>
+ <type_desc variable="Tdiff">In microseconds</type_desc>
+ <desc>
+ <p>Calculates the time difference <c><anno>Tdiff</anno> =
+ <anno>T2</anno> - <anno>T1</anno></c> in <em>microseconds</em>,
+ where <c><anno>T1</anno></c> and <c><anno>T2</anno></c>
+ are time-stamp tuples on the same format as returned from
+ <seealso marker="erts:erlang#timestamp/0">
+ <c>erlang:timestamp/0</c></seealso> or
+ <seealso marker="kernel:os#timestamp/0">
+ <c>os:timestamp/0</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="seconds" arity="1"/>
+ <fsummary>Convert <c>Seconds</c> to <c>Milliseconds</c>.</fsummary>
+ <desc>
+ <p>Returns the number of milliseconds in
+ <c><anno>Seconds</anno></c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="send_after" arity="2"/>
+ <name name="send_after" arity="3"/>
+ <fsummary>Send <c>Message</c> to <c>Pid</c> after a specified
+ <c>Time</c>.</fsummary>
<desc>
<taglist>
- <tag><c>exit_after/3</c></tag>
- <item>
- <p>Send an exit signal with reason <c><anno>Reason1</anno></c> to Pid
- <c><anno>Pid</anno></c>. Returns <c>{ok, <anno>TRef</anno>}</c>, or
- <c>{error, <anno>Reason2</anno>}</c>.</p>
- </item>
- <tag><c>exit_after/2</c></tag>
- <item>
- <p>Same as <c>exit_after(<anno>Time</anno>, self(), <anno>Reason1</anno>)</c>. </p>
- </item>
- <tag><c>kill_after/2</c></tag>
+ <tag><c>send_after/3</c></tag>
<item>
- <p>Same as <c>exit_after(<anno>Time</anno>, <anno>Pid</anno>, kill)</c>. </p>
+ <p>Evaluates <c><anno>Pid</anno> ! <anno>Message</anno></c> after
+ <c><anno>Time</anno></c> milliseconds. (<c><anno>Pid</anno></c>
+ can also be an atom of a registered name.)</p>
+ <p>Returns <c>{ok, <anno>TRef</anno>}</c> or
+ <c>{error, <anno>Reason</anno>}</c>.</p>
</item>
- <tag><c>kill_after/1</c></tag>
+ <tag><c>send_after/2</c></tag>
<item>
- <p>Same as <c>exit_after(<anno>Time</anno>, self(), kill)</c>. </p>
+ <p>Same as <c>send_after(<anno>Time</anno>, self(),
+ <anno>Message</anno>)</c>.</p>
</item>
</taglist>
</desc>
</func>
- <func>
- <name name="apply_interval" arity="4"/>
- <fsummary>Evaluate <c>Module:Function(Arguments)</c>repeatedly at intervals of <c>Time</c>.</fsummary>
- <desc>
- <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>, <anno>Arguments</anno>)</c> repeatedly at
- intervals of <c><anno>Time</anno></c>. Returns <c>{ok, <anno>TRef</anno>}</c>, or
- <c>{error, <anno>Reason</anno>}</c>.</p>
- </desc>
- </func>
+
<func>
<name name="send_interval" arity="2"/>
<name name="send_interval" arity="3"/>
- <fsummary>Send <c>Message</c>repeatedly at intervals of <c>Time</c>.</fsummary>
+ <fsummary>Send <c>Message</c> repeatedly at intervals of <c>Time</c>.
+ </fsummary>
<desc>
<taglist>
<tag><c>send_interval/3</c></tag>
<item>
- <p>Evaluates <c><anno>Pid</anno> ! <anno>Message</anno></c> repeatedly after <c><anno>Time</anno></c>
- amount of time has elapsed. (<c><anno>Pid</anno></c> can also be an atom of
- a registered name.) Returns <c>{ok, <anno>TRef</anno>}</c> or
+ <p>Evaluates <c><anno>Pid</anno> ! <anno>Message</anno></c>
+ repeatedly after <c><anno>Time</anno></c> milliseconds.
+ (<c><anno>Pid</anno></c> can also be
+ an atom of a registered name.)</p>
+ <p>Returns <c>{ok, <anno>TRef</anno>}</c> or
<c>{error, <anno>Reason</anno>}</c>.</p>
</item>
<tag><c>send_interval/2</c></tag>
<item>
- <p>Same as <c>send_interval(<anno>Time</anno>, self(), <anno>Message</anno>)</c>.</p>
+ <p>Same as <c>send_interval(<anno>Time</anno>, self(),
+ <anno>Message</anno>)</c>.</p>
</item>
</taglist>
</desc>
</func>
+
<func>
- <name name="cancel" arity="1"/>
- <fsummary>Cancel a previously requested timeout identified by <c>TRef</c>.</fsummary>
+ <name name="sleep" arity="1"/>
+ <fsummary>Suspend the calling process for <c>Time</c> milliseconds.
+ </fsummary>
<desc>
- <p>Cancels a previously requested timeout. <c><anno>TRef</anno></c> is a unique
- timer reference returned by the timer function in question. Returns
- <c>{ok, cancel}</c>, or <c>{error, <anno>Reason</anno>}</c> when <c><anno>TRef</anno></c>
- is not a timer reference.</p>
+ <p>Suspends the process calling this function for
+ <c><anno>Time</anno></c> milliseconds and then returns <c>ok</c>,
+ or suspends the process forever if <c><anno>Time</anno></c> is the
+ atom <c>infinity</c>. Naturally, this
+ function does <em>not</em> return immediately.</p>
</desc>
</func>
+
<func>
- <name name="sleep" arity="1"/>
- <fsummary>Suspend the calling process for <c>Time</c>amount of milliseconds.</fsummary>
+ <name name="start" arity="0"/>
+ <fsummary>Start a global timer server (named <c>timer_server</c>).
+ </fsummary>
<desc>
- <p>Suspends the process calling this function for <c><anno>Time</anno></c> amount
- of milliseconds and then returns <c>ok</c>, or suspend the process
- forever if <c><anno>Time</anno></c> is the atom <c>infinity</c>. Naturally, this
- function does <em>not</em> return immediately.</p>
+ <p>Starts the timer server. Normally, the server does not need
+ to be started explicitly. It is started dynamically if it
+ is needed. This is useful during development, but in a
+ target system the server is to be started explicitly. Use
+ configuration parameters for
+ <seealso marker="kernel:index">Kernel</seealso> for this.</p>
</desc>
</func>
+
<func>
<name name="tc" arity="1"/>
<name name="tc" arity="2"/>
<name name="tc" arity="3"/>
<fsummary>Measure the real time it takes to evaluate <c>apply(Module,
- Function, Arguments)</c> or <c>apply(Fun, Arguments)</c></fsummary>
+ Function, Arguments)</c> or <c>apply(Fun, Arguments)</c>.</fsummary>
<type_desc variable="Time">In microseconds</type_desc>
<desc>
<taglist>
<tag><c>tc/3</c></tag>
<item>
- <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>, <anno>Arguments</anno>)</c> and measures
- the elapsed real time as reported by <c>os:timestamp/0</c>.
- Returns <c>{<anno>Time</anno>, <anno>Value</anno>}</c>, where
- <c><anno>Time</anno></c> is the elapsed real time in <em>microseconds</em>,
- and <c><anno>Value</anno></c> is what is returned from the apply.</p>
+ <p>Evaluates <c>apply(<anno>Module</anno>, <anno>Function</anno>,
+ <anno>Arguments</anno>)</c> and measures the elapsed real time as
+ reported by <seealso marker="os:timestamp/0">
+ <c>os:timestamp/0</c></seealso>.</p>
+ <p>Returns <c>{<anno>Time</anno>, <anno>Value</anno>}</c>, where
+ <c><anno>Time</anno></c> is the elapsed real time in
+ <em>microseconds</em>, and <c><anno>Value</anno></c> is what is
+ returned from the apply.</p>
</item>
<tag><c>tc/2</c></tag>
<item>
- <p>Evaluates <c>apply(<anno>Fun</anno>, <anno>Arguments</anno>)</c>. Otherwise works
- like <c>tc/3</c>.</p>
+ <p>Evaluates <c>apply(<anno>Fun</anno>, <anno>Arguments</anno>)</c>.
+ Otherwise the same as <c>tc/3</c>.</p>
</item>
<tag><c>tc/1</c></tag>
<item>
- <p>Evaluates <c><anno>Fun</anno>()</c>. Otherwise works like <c>tc/2</c>.</p>
+ <p>Evaluates <c><anno>Fun</anno>()</c>. Otherwise the same as
+ <c>tc/2</c>.</p>
</item>
-
</taglist>
</desc>
</func>
- <func>
- <name name="now_diff" arity="2"/>
- <fsummary>Calculate time difference between timestamps</fsummary>
- <type_desc variable="Tdiff">In microseconds</type_desc>
- <desc>
- <p>Calculates the time difference <c><anno>Tdiff</anno> = <anno>T2</anno> - <anno>T1</anno></c> in
- <em>microseconds</em>, where <c><anno>T1</anno></c> and <c><anno>T2</anno></c>
- are timestamp tuples on the same format as returned from
- <seealso marker="erts:erlang#timestamp/0"><c>erlang:timestamp/0</c></seealso>,
- or <seealso marker="kernel:os#timestamp/0"><c>os:timestamp/0</c></seealso>.</p>
- </desc>
- </func>
- <func>
- <name name="seconds" arity="1"/>
- <fsummary>Convert <c>Seconds</c>to <c>Milliseconds</c>.</fsummary>
- <desc>
- <p>Returns the number of milliseconds in <c><anno>Seconds</anno></c>.</p>
- </desc>
- </func>
- <func>
- <name name="minutes" arity="1"/>
- <fsummary>Converts <c>Minutes</c> to <c>Milliseconds</c>.</fsummary>
- <desc>
- <p>Return the number of milliseconds in <c><anno>Minutes</anno></c>.</p>
- </desc>
- </func>
- <func>
- <name name="hours" arity="1"/>
- <fsummary>Convert <c>Hours</c>to <c>Milliseconds</c>.</fsummary>
- <desc>
- <p>Returns the number of milliseconds in <c><anno>Hours</anno></c>.</p>
- </desc>
- </func>
- <func>
- <name name="hms" arity="3"/>
- <fsummary>Convert <c>Hours</c>+<c>Minutes</c>+<c>Seconds</c>to <c>Milliseconds</c>.</fsummary>
- <desc>
- <p>Returns the number of milliseconds in <c><anno>Hours</anno> + <anno>Minutes</anno> + <anno>Seconds</anno></c>.</p>
- </desc>
- </func>
</funcs>
<section>
<title>Examples</title>
- <p>This example illustrates how to print out "Hello World!" in 5 seconds:</p>
+ <p><em>Example 1</em></p>
+ <p>The following example shows how to print "Hello World!" in 5 seconds:</p>
<pre>
- 1> <input>timer:apply_after(5000, io, format, ["~nHello World!~n", []]).</input>
- {ok,TRef}
- Hello World!</pre>
- <p>The following coding example illustrates a process which performs a
- certain action and if this action is not completed within a certain
- limit, then the process is killed.</p>
+1> <input>timer:apply_after(5000, io, format, ["~nHello World!~n", []]).</input>
+{ok,TRef}
+Hello World!</pre>
+
+ <p><em>Example 2</em></p>
+ <p>The following example shows a process performing a
+ certain action, and if this action is not completed within a certain
+ limit, the process is killed:</p>
<code type="none">
- Pid = spawn(mod, fun, [foo, bar]),
- %% If pid is not finished in 10 seconds, kill him
- {ok, R} = timer:kill_after(timer:seconds(10), Pid),
- ...
- %% We change our mind...
- timer:cancel(R),
- ...</code>
+Pid = spawn(mod, fun, [foo, bar]),
+%% If pid is not finished in 10 seconds, kill him
+{ok, R} = timer:kill_after(timer:seconds(10), Pid),
+...
+%% We change our mind...
+timer:cancel(R),
+...</code>
</section>
<section>
- <title>WARNING</title>
- <p>A timer can always be removed by calling <c>cancel/1</c>.
- </p>
- <p>An interval timer, i.e. a timer created by evaluating any of the
- functions <c>apply_interval/4</c>, <c>send_interval/3</c>, and
- <c>send_interval/2</c>, is linked to the process towards which
- the timer performs its task.
- </p>
- <p>A one-shot timer, i.e. a timer created by evaluating any of the
- functions <c>apply_after/4</c>, <c>send_after/3</c>,
- <c>send_after/2</c>, <c>exit_after/3</c>, <c>exit_after/2</c>,
- <c>kill_after/2</c>, and <c>kill_after/1</c> is not linked to any
- process. Hence, such a timer is removed only when it reaches its
- timeout, or if it is explicitly removed by a call to <c>cancel/1</c>.</p>
+ <title>Notes</title>
+ <p>A timer can always be removed by calling
+ <seealso marker="#cancel/1"><c>cancel/1</c></seealso>.</p>
+
+ <p>An interval timer, that is, a timer created by evaluating any of the
+ functions
+ <seealso marker="#apply_interval/4"><c>apply_interval/4</c></seealso>,
+ <seealso marker="#send_interval/3"><c>send_interval/3</c></seealso>, and
+ <seealso marker="#send_interval/2"><c>send_interval/2</c></seealso>
+ is linked to the process to which the timer performs its task.</p>
+
+ <p>A one-shot timer, that is, a timer created by evaluating any of the
+ functions
+ <seealso marker="#apply_after/4"><c>apply_after/4</c></seealso>,
+ <seealso marker="#send_after/3"><c>send_after/3</c></seealso>,
+ <seealso marker="#send_after/2"><c>send_after/2</c></seealso>,
+ <seealso marker="#exit_after/3"><c>exit_after/3</c></seealso>,
+ <seealso marker="#exit_after/2"><c>exit_after/2</c></seealso>,
+ <seealso marker="#kill_after/2"><c>kill_after/2</c></seealso>, and
+ <seealso marker="#kill_after/1"><c>kill_after/1</c></seealso>
+ is not linked to any process. Hence, such a timer is removed only
+ when it reaches its time-out, or if it is explicitly removed by a call to
+ <seealso marker="#cancel/1"><c>cancel/1</c></seealso>.</p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/unicode.xml b/lib/stdlib/doc/src/unicode.xml
index edc6830cb5..93d0d37456 100644
--- a/lib/stdlib/doc/src/unicode.xml
+++ b/lib/stdlib/doc/src/unicode.xml
@@ -31,12 +31,27 @@
<rev></rev>
</header>
<module>unicode</module>
- <modulesummary>Functions for converting Unicode characters</modulesummary>
+ <modulesummary>Functions for converting Unicode characters.</modulesummary>
<description>
- <p>This module contains functions for converting between different character representations. Basically it converts between ISO-latin-1 characters and Unicode ditto, but it can also convert between different Unicode encodings (like UTF-8, UTF-16 and UTF-32).</p>
- <p>The default Unicode encoding in Erlang is in binaries UTF-8, which is also the format in which built in functions and libraries in OTP expect to find binary Unicode data. In lists, Unicode data is encoded as integers, each integer representing one character and encoded simply as the Unicode codepoint for the character.</p>
- <p>Other Unicode encodings than integers representing codepoints or UTF-8 in binaries are referred to as &quot;external encodings&quot;. The ISO-latin-1 encoding is in binaries and lists referred to as latin1-encoding.</p>
- <p>It is recommended to only use external encodings for communication with external entities where this is required. When working inside the Erlang/OTP environment, it is recommended to keep binaries in UTF-8 when representing Unicode characters. Latin1 encoding is supported both for backward compatibility and for communication with external entities not supporting Unicode character sets.</p>
+ <p>This module contains functions for converting between different character
+ representations. It converts between ISO Latin-1 characters and Unicode
+ characters, but it can also convert between different Unicode encodings
+ (like UTF-8, UTF-16, and UTF-32).</p>
+ <p>The default Unicode encoding in Erlang is in binaries UTF-8, which is also
+ the format in which built-in functions and libraries in OTP expect to find
+ binary Unicode data. In lists, Unicode data is encoded as integers, each
+ integer representing one character and encoded simply as the Unicode code
+ point for the character.</p>
+ <p>Other Unicode encodings than integers representing code points or UTF-8
+ in binaries are referred to as &quot;external encodings&quot;. The ISO
+ Latin-1 encoding
+ is in binaries and lists referred to as latin1-encoding.</p>
+ <p>It is recommended to only use external encodings for communication with
+ external entities where this is required. When working inside the
+ Erlang/OTP environment, it is recommended to keep binaries in UTF-8 when
+ representing Unicode characters. ISO Latin-1 encoding is supported both
+ for backward compatibility and for communication
+ with external entities not supporting Unicode character sets.</p>
</description>
<datatypes>
@@ -49,7 +64,8 @@
<datatype>
<name name="unicode_binary"/>
<desc>
- <p>A <c>binary()</c> with characters encoded in the UTF-8 coding standard.</p>
+ <p>A <c>binary()</c> with characters encoded in the UTF-8 coding
+ standard.</p>
</desc>
</datatype>
<datatype>
@@ -61,8 +77,8 @@
<datatype>
<name name="external_unicode_binary"/>
<desc>
- <p>A <c>binary()</c> with characters coded in a user specified Unicode
- encoding other than UTF-8 (UTF-16 or UTF-32).</p>
+ <p>A <c>binary()</c> with characters coded in a user-specified Unicode
+ encoding other than UTF-8 (that is, UTF-16 or UTF-32).</p>
</desc>
</datatype>
<datatype>
@@ -73,23 +89,23 @@
</datatype>
<datatype>
<name name="latin1_binary"/>
- <desc><p>A <c>binary()</c> with characters coded in ISO-latin-1.</p>
+ <desc><p>A <c>binary()</c> with characters coded in ISO Latin-1.</p>
</desc>
</datatype>
<datatype>
<name name="latin1_char"/>
- <desc><p>An <c>integer()</c> representing valid latin1
+ <desc><p>An <c>integer()</c> representing a valid ISO Latin-1
character (0-255).</p>
</desc>
</datatype>
<datatype>
<name name="latin1_chardata"/>
- <desc><p>The same as <c>iodata()</c>.</p>
+ <desc><p>Same as <c>iodata()</c>.</p>
</desc>
</datatype>
<datatype>
<name name="latin1_charlist"/>
- <desc><p>The same as <c>iolist()</c>.</p>
+ <desc><p>Same as <c>iolist()</c>.</p>
</desc>
</datatype>
</datatypes>
@@ -100,197 +116,224 @@
<fsummary>Identify UTF byte order marks in a binary.</fsummary>
<type name="endian"/>
<type_desc variable="Bin">
- A <c>binary()</c> such that <c>byte_size(<anno>Bin</anno>) >= 4</c>.
+ A <c>binary()</c> such that <c>byte_size(<anno>Bin</anno>) &gt;= 4</c>.
</type_desc>
<desc>
-
- <p>Check for a UTF byte order mark (BOM) in the beginning of a
- binary. If the supplied binary <c><anno>Bin</anno></c> begins with a valid
- byte order mark for either UTF-8, UTF-16 or UTF-32, the function
- returns the encoding identified along with the length of the BOM
- in bytes.</p>
-
- <p>If no BOM is found, the function returns <c>{latin1,0}</c></p>
+ <p>Checks for a UTF Byte Order Mark (BOM) in the beginning of a
+ binary. If the supplied binary <c><anno>Bin</anno></c> begins with a
+ valid BOM for either UTF-8, UTF-16, or UTF-32, the function
+ returns the encoding identified along with the BOM length
+ in bytes.</p>
+ <p>If no BOM is found, the function returns <c>{latin1,0}</c>.</p>
</desc>
</func>
+
<func>
- <name name="characters_to_list" arity="1"/>
- <fsummary>Convert a collection of characters to list of Unicode characters</fsummary>
+ <name name="characters_to_binary" arity="1"/>
+ <fsummary>Convert a collection of characters to a UTF-8 binary.</fsummary>
<desc>
- <p>Same as <c>characters_to_list(<anno>Data</anno>, unicode)</c>.</p>
+ <p>Same as <c>characters_to_binary(<anno>Data</anno>, unicode,
+ unicode)</c>.</p>
</desc>
</func>
- <func>
- <name name="characters_to_list" arity="2"/>
- <fsummary>Convert a collection of characters to list of Unicode characters</fsummary>
- <desc>
-
- <p>Converts a possibly deep list of integers and
- binaries into a list of integers representing Unicode
- characters. The binaries in the input may have characters
- encoded as latin1 (0 - 255, one character per byte), in which
- case the <c><anno>InEncoding</anno></c> parameter should be given as
- <c>latin1</c>, or have characters encoded as one of the
- UTF-encodings, which is given as the <c><anno>InEncoding</anno></c>
- parameter. Only when the <c><anno>InEncoding</anno></c> is one of the UTF
- encodings, integers in the list are allowed to be greater than
- 255.</p>
-
- <p>If <c><anno>InEncoding</anno></c> is <c>latin1</c>, the <c><anno>Data</anno></c> parameter
- corresponds to the <c>iodata()</c> type, but for <c>unicode</c>,
- the <c><anno>Data</anno></c> parameter can contain integers greater than 255
- (Unicode characters beyond the ISO-latin-1 range), which would
- make it invalid as <c>iodata()</c>.</p>
-
- <p>The purpose of the function is mainly to be able to convert
- combinations of Unicode characters into a pure Unicode
- string in list representation for further processing. For
- writing the data to an external entity, the reverse function
- <seealso
- marker="#characters_to_binary/3"><c>characters_to_binary/3</c></seealso>
- comes in handy.</p>
-
- <p>The option <c>unicode</c> is an alias for <c>utf8</c>, as this is the
- preferred encoding for Unicode characters in
- binaries. <c>utf16</c> is an alias for <c>{utf16,big}</c> and
- <c>utf32</c> is an alias for <c>{utf32,big}</c>. The <c>big</c>
- and <c>little</c> atoms denote big or little endian
- encoding.</p>
- <p>If for some reason, the data cannot be converted, either
- because of illegal Unicode/latin1 characters in the list, or
- because of invalid UTF encoding in any binaries, an error
- tuple is returned. The error tuple contains the tag
- <c>error</c>, a list representing the characters that could be
- converted before the error occurred and a representation of the
- characters including and after the offending integer/bytes. The
- last part is mostly for debugging as it still constitutes a
- possibly deep and/or mixed list, not necessarily of the same
- depth as the original data. The error occurs when traversing the
- list and whatever is left to decode is simply returned as is.</p>
-
- <p>However, if the input <c><anno>Data</anno></c> is a pure binary, the third
- part of the error tuple is guaranteed to be a binary as
- well.</p>
-
- <p>Errors occur for the following reasons:</p>
- <list type="bulleted">
-
- <item>Integers out of range - If <c><anno>InEncoding</anno></c> is
- <c>latin1</c>, an error occurs whenever an integer greater
- than 255 is found in the lists. If <c><anno>InEncoding</anno></c> is
- of a Unicode type, an error occurs whenever an integer
- <list type="bulleted">
- <item>greater than <c>16#10FFFF</c>
- (the maximum Unicode character),</item>
- <item>in the range <c>16#D800</c> to <c>16#DFFF</c>
- (invalid range reserved for UTF-16 surrogate pairs)</item>
- </list>
- is found.
- </item>
-
- <item>UTF encoding incorrect - If <c><anno>InEncoding</anno></c> is
- one of the UTF types, the bytes in any binaries have to be valid
- in that encoding. Errors can occur for various
- reasons, including &quot;pure&quot; decoding errors
- (like the upper
- bits of the bytes being wrong), the bytes are decoded to a
- too large number, the bytes are decoded to a code-point in the
- invalid Unicode
- range, or encoding is &quot;overlong&quot;, meaning that a
- number should have been encoded in fewer bytes. The
- case of a truncated UTF is handled specially, see the
- paragraph about incomplete binaries below. If
- <c><anno>InEncoding</anno></c> is <c>latin1</c>, binaries are always valid
- as long as they contain whole bytes,
- as each byte falls into the valid ISO-latin-1 range.</item>
-
- </list>
-
- <p>A special type of error is when no actual invalid integers or
- bytes are found, but a trailing <c>binary()</c> consists of too
- few bytes to decode the last character. This error might occur
- if bytes are read from a file in chunks or binaries in other
- ways are split on non UTF character boundaries. In this case an
- <c>incomplete</c> tuple is returned instead of the <c>error</c>
- tuple. It consists of the same parts as the <c>error</c> tuple, but
- the tag is <c>incomplete</c> instead of <c>error</c> and the
- last element is always guaranteed to be a binary consisting of
- the first part of a (so far) valid UTF character.</p>
-
- <p>If one UTF characters is split over two consecutive
- binaries in the <c><anno>Data</anno></c>, the conversion succeeds. This means
- that a character can be decoded from a range of binaries as long
- as the whole range is given as input without errors
- occurring. Example:</p>
-
-<code>
- decode_data(Data) ->
- case unicode:characters_to_list(Data,unicode) of
- {incomplete,Encoded, Rest} ->
- More = get_some_more_data(),
- Encoded ++ decode_data([Rest, More]);
- {error,Encoded,Rest} ->
- handle_error(Encoded,Rest);
- List ->
- List
- end.
-</code>
- <p>Bit-strings that are not whole bytes are however not allowed,
- so a UTF character has to be split along 8-bit boundaries to
- ever be decoded.</p>
-
- <p>If any parameters are of the wrong type, the list structure
- is invalid (a number as tail) or the binaries do not contain
- whole bytes (bit-strings), a <c>badarg</c> exception is
- thrown.</p>
-
+ <func>
+ <name name="characters_to_binary" arity="2"/>
+ <fsummary>Convert a collection of characters to a UTF-8 binary.</fsummary>
+ <desc>
+ <p>Same as <c>characters_to_binary(<anno>Data</anno>,
+ <anno>InEncoding</anno>, unicode)</c>.</p>
</desc>
</func>
+
<func>
- <name name="characters_to_binary" arity="1"/>
- <fsummary>Convert a collection of characters to a UTF-8 binary</fsummary>
+ <name name="characters_to_binary" arity="3"/>
+ <fsummary>Convert a collection of characters to a UTF-8 binary.</fsummary>
<desc>
- <p>Same as <c>characters_to_binary(<anno>Data</anno>, unicode, unicode)</c>.</p>
+ <p>Behaves as <seealso marker="#characters_to_list/2">
+ <c>characters_to_list/2</c></seealso>, but produces a binary
+ instead of a Unicode list.</p>
+ <p><c><anno>InEncoding</anno></c> defines how input is to be interpreted
+ if binaries are present in <c>Data</c></p>
+ <p><c><anno>OutEncoding</anno></c> defines in what format output is to
+ be generated.</p>
+ <p>Options:</p>
+ <taglist>
+ <tag><c>unicode</c></tag>
+ <item>
+ <p>An alias for <c>utf8</c>, as this is the preferred encoding for
+ Unicode characters in binaries.</p>
+ </item>
+ <tag><c>utf16</c></tag>
+ <item>
+ <p>An alias for <c>{utf16,big}</c>.</p>
+ </item>
+ <tag><c>utf32</c></tag>
+ <item>
+ <p>An alias for <c>{utf32,big}</c>.</p>
+ </item>
+ </taglist>
+ <p>The atoms <c>big</c> and <c>little</c> denote big- or little-endian
+ encoding.</p>
+ <p>Errors and exceptions occur as in
+ <seealso marker="#characters_to_list/2">
+ <c>characters_to_list/2</c></seealso>, but the second element
+ in tuple <c>error</c> or <c>incomplete</c> is a <c>binary()</c>
+ and not a <c>list()</c>.</p>
</desc>
</func>
- <func>
- <name name="characters_to_binary" arity="2"/>
- <fsummary>Convert a collection of characters to a UTF-8 binary</fsummary>
+ <func>
+ <name name="characters_to_list" arity="1"/>
+ <fsummary>Convert a collection of characters to a list of Unicode
+ characters.</fsummary>
<desc>
- <p>Same as <c>characters_to_binary(<anno>Data</anno>, <anno>InEncoding</anno>, unicode)</c>.</p>
+ <p>Same as <c>characters_to_list(<anno>Data</anno>, unicode)</c>.</p>
</desc>
- </func>
+ </func>
+
<func>
- <name name="characters_to_binary" arity="3"/>
- <fsummary>Convert a collection of characters to a UTF-8 binary</fsummary>
+ <name name="characters_to_list" arity="2"/>
+ <fsummary>Convert a collection of characters to a list of Unicode
+ characters.</fsummary>
<desc>
-
- <p>Behaves as <seealso marker="#characters_to_list/2">
- <c>characters_to_list/2</c></seealso>, but produces an binary
- instead of a Unicode list. The
- <c><anno>InEncoding</anno></c> defines how input is to be interpreted if
- binaries are present in the <c>Data</c>, while
- <c><anno>OutEncoding</anno></c> defines in what format output is to be
- generated.</p>
-
- <p>The option <c>unicode</c> is an alias for <c>utf8</c>, as this is the
- preferred encoding for Unicode characters in
- binaries. <c>utf16</c> is an alias for <c>{utf16,big}</c> and
- <c>utf32</c> is an alias for <c>{utf32,big}</c>. The <c>big</c>
- and <c>little</c> atoms denote big or little endian
- encoding.</p>
-
- <p>Errors and exceptions occur as in <seealso
- marker="#characters_to_list/2">
- <c>characters_to_list/2</c></seealso>, but the second element
- in the <c>error</c> or
- <c>incomplete</c> tuple will be a <c>binary()</c> and not a
- <c>list()</c>.</p>
-
+ <p>Converts a possibly deep list of integers and
+ binaries into a list of integers representing Unicode
+ characters. The binaries in the input can have characters
+ encoded as one of the following:</p>
+ <list type="bulleted">
+ <item>
+ <p>ISO Latin-1 (0-255, one character per byte). Here,
+ case parameter <c><anno>InEncoding</anno></c> is to be specified
+ as <c>latin1</c>.</p>
+ </item>
+ <item>
+ <p>One of the UTF-encodings, which is specified as parameter
+ <c><anno>InEncoding</anno></c>.</p>
+ </item>
+ </list>
+ <p>Only when <c><anno>InEncoding</anno></c> is one of the UTF
+ encodings, integers in the list are allowed to be &gt; 255.</p>
+ <p>If <c><anno>InEncoding</anno></c> is <c>latin1</c>, parameter
+ <c><anno>Data</anno></c> corresponds to the <c>iodata()</c> type,
+ but for <c>unicode</c>, parameter <c><anno>Data</anno></c> can
+ contain integers &gt; 255
+ (Unicode characters beyond the ISO Latin-1 range), which
+ makes it invalid as <c>iodata()</c>.</p>
+ <p>The purpose of the function is mainly to convert
+ combinations of Unicode characters into a pure Unicode
+ string in list representation for further processing. For
+ writing the data to an external entity, the reverse function
+ <seealso marker="#characters_to_binary/3">
+ <c>characters_to_binary/3</c></seealso>
+ comes in handy.</p>
+ <p>Option <c>unicode</c> is an alias for <c>utf8</c>, as this is the
+ preferred encoding for Unicode characters in
+ binaries. <c>utf16</c> is an alias for <c>{utf16,big}</c> and
+ <c>utf32</c> is an alias for <c>{utf32,big}</c>. The atoms <c>big</c>
+ and <c>little</c> denote big- or little-endian encoding.</p>
+ <p>If the data cannot be converted, either
+ because of illegal Unicode/ISO Latin-1 characters in the list,
+ or because of invalid UTF encoding in any binaries, an error
+ tuple is returned. The error tuple contains the tag
+ <c>error</c>, a list representing the characters that could be
+ converted before the error occurred and a representation of the
+ characters including and after the offending integer/bytes. The
+ last part is mostly for debugging, as it still constitutes a
+ possibly deep or mixed list, or both, not necessarily of the same
+ depth as the original data. The error occurs when traversing the
+ list and whatever is left to decode is returned "as is".</p>
+ <p>However, if the input <c><anno>Data</anno></c> is a pure binary,
+ the third part of the error tuple is guaranteed to be a binary as
+ well.</p>
+ <p>Errors occur for the following reasons:</p>
+ <list type="bulleted">
+ <item>
+ <p>Integers out of range.</p>
+ <p>If <c><anno>InEncoding</anno></c> is <c>latin1</c>,
+ an error occurs whenever an integer &gt; 255 is found
+ in the lists.</p>
+ <p>If <c><anno>InEncoding</anno></c> is of a Unicode type,
+ an error occurs whenever either of the following is found:</p>
+ <list type="bulleted">
+ <item>
+ <p>An integer &gt; 16#10FFFF
+ (the maximum Unicode character)</p>
+ </item>
+ <item>
+ <p>An integer in the range 16#D800 to 16#DFFF (invalid range
+ reserved for UTF-16 surrogate pairs)</p>
+ </item>
+ </list>
+ </item>
+ <item>
+ <p>Incorrect UTF encoding.</p>
+ <p>If <c><anno>InEncoding</anno></c> is one of the UTF types,
+ the bytes in any binaries must be valid in that encoding.</p>
+ <p>Errors can occur for various reasons, including the
+ following:</p>
+ <list type="bulleted">
+ <item>
+ <p>&quot;Pure&quot; decoding errors
+ (like the upper bits of the bytes being wrong).</p>
+ </item>
+ <item>
+ <p>The bytes are decoded to a too large number.</p>
+ </item>
+ <item>
+ <p>The bytes are decoded to a code point in the invalid
+ Unicode range.</p>
+ </item>
+ <item>
+ <p>Encoding is &quot;overlong&quot;, meaning that a number
+ should have been encoded in fewer bytes.</p>
+ </item>
+ </list>
+ <p>The case of a truncated UTF is handled specially, see the
+ paragraph about incomplete binaries below.</p>
+ <p>If <c><anno>InEncoding</anno></c> is <c>latin1</c>, binaries are
+ always valid as long as they contain whole bytes,
+ as each byte falls into the valid ISO Latin-1 range.</p>
+ </item>
+ </list>
+ <p>A special type of error is when no actual invalid integers or
+ bytes are found, but a trailing <c>binary()</c> consists of too
+ few bytes to decode the last character. This error can occur
+ if bytes are read from a file in chunks or if binaries in other
+ ways are split on non-UTF character boundaries. An <c>incomplete</c>
+ tuple is then returned instead of the <c>error</c> tuple.
+ It consists of the same parts as the <c>error</c> tuple, but
+ the tag is <c>incomplete</c> instead of <c>error</c> and the
+ last element is always guaranteed to be a binary consisting of
+ the first part of a (so far) valid UTF character.</p>
+ <p>If one UTF character is split over two consecutive binaries in
+ the <c><anno>Data</anno></c>, the conversion succeeds. This means
+ that a character can be decoded from a range of binaries as long
+ as the whole range is specified as input without errors occurring.</p>
+ <p><em>Example:</em></p>
+ <code>
+decode_data(Data) ->
+ case unicode:characters_to_list(Data,unicode) of
+ {incomplete,Encoded, Rest} ->
+ More = get_some_more_data(),
+ Encoded ++ decode_data([Rest, More]);
+ {error,Encoded,Rest} ->
+ handle_error(Encoded,Rest);
+ List ->
+ List
+ end.</code>
+ <p>However, bit strings that are not whole bytes are not allowed,
+ so a UTF character must be split along 8-bit boundaries to
+ ever be decoded.</p>
+ <p>A <c>badarg</c> exception is thrown for the following cases:</p>
+ <list type="bulleted">
+ <item>Any parameters are of the wrong type.</item>
+ <item>The list structure is invalid (a number as tail).</item>
+ <item>The binaries do not contain whole bytes (bit strings).</item>
+ </list>
</desc>
</func>
+
<func>
<name name="encoding_to_bom" arity="1"/>
<fsummary>Create a binary UTF byte order mark from encoding.</fsummary>
@@ -298,20 +341,15 @@
A <c>binary()</c> such that <c>byte_size(<anno>Bin</anno>) >= 4</c>.
</type_desc>
<desc>
-
- <p>Create a UTF byte order mark (BOM) as a binary from the
- supplied <c><anno>InEncoding</anno></c>. The BOM is, if supported at all,
- expected to be placed first in UTF encoded files or
- messages.</p>
-
- <p>The function returns <c>&lt;&lt;&gt;&gt;</c> for the
- <c>latin1</c> encoding as there is no BOM for ISO-latin-1.</p>
-
- <p>It can be noted that the BOM for UTF-8 is seldom used, and it
- is really not a <em>byte order</em> mark. There are obviously no
- byte order issues with UTF-8, so the BOM is only there to
- differentiate UTF-8 encoding from other UTF formats.</p>
-
+ <p>Creates a UTF Byte Order Mark (BOM) as a binary from the
+ supplied <c><anno>InEncoding</anno></c>. The BOM is, if supported at
+ all, expected to be placed first in UTF encoded files or messages.</p>
+ <p>The function returns <c>&lt;&lt;&gt;&gt;</c> for
+ <c>latin1</c> encoding, as there is no BOM for ISO Latin-1.</p>
+ <p>Notice that the BOM for UTF-8 is seldom used, and it
+ is really not a <em>byte order</em> mark. There are obviously no
+ byte order issues with UTF-8, so the BOM is only there to
+ differentiate UTF-8 encoding from other UTF formats.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/doc/src/unicode_usage.xml b/lib/stdlib/doc/src/unicode_usage.xml
index b4c9385e33..efc8b75075 100644
--- a/lib/stdlib/doc/src/unicode_usage.xml
+++ b/lib/stdlib/doc/src/unicode_usage.xml
@@ -33,427 +33,495 @@
<rev>PA1</rev>
<file>unicode_usage.xml</file>
</header>
-<section>
-<title>Unicode Implementation</title>
- <p>Implementing support for Unicode character sets is an ongoing
- process. The Erlang Enhancement Proposal (EEP) 10 outlined the
- basics of Unicode support and also specified a default encoding in
- binaries that all Unicode-aware modules should handle in the
- future.</p>
-
- <p>The functionality described in EEP10 was implemented in Erlang/OTP
- R13A, but that was by no means the end of it. In Erlang/OTP R14B01 support
- for Unicode file names was added, although it was in no way complete
- and was by default disabled on platforms where no guarantee was given
- for the file name encoding. With Erlang/OTP R16A came support for UTF-8 encoded
- source code, among with enhancements to many of the applications to
- support both Unicode encoded file names as well as support for UTF-8
- encoded files in several circumstances. Most notable is the support
- for UTF-8 in files read by <c>file:consult/1</c>, release handler support
- for UTF-8 and more support for Unicode character sets in the
- I/O-system. In Erlang/OTP 17.0, the encoding default for Erlang source files was
- switched to UTF-8.</p>
-
- <p>This guide outlines the current Unicode support and gives a couple
- of recipes for working with Unicode data.</p>
-</section>
-<section>
-<title>Understanding Unicode</title>
- <p>Experience with the Unicode support in Erlang has made it
- painfully clear that understanding Unicode characters and encodings
- is not as easy as one would expect. The complexity of the field as
- well as the implications of the standard requires thorough
- understanding of concepts rarely before thought of.</p>
-
- <p>Furthermore the Erlang implementation requires understanding of
- concepts that never were an issue for many (Erlang) programmers. To
- understand and use Unicode characters requires that you study the
- subject thoroughly, even if you're an experienced programmer.</p>
-
- <p>As an example, one could contemplate the issue of converting
- between upper and lower case letters. Reading the standard will make
- you realize that, to begin with, there's not a simple one to one
- mapping in all scripts. Take German as an example, where there's a
- letter "ß" (Sharp s) in lower case, but the uppercase equivalent is
- "SS". Or Greek, where "Σ" has two different lowercase forms: "ς" in
- word-final position and "σ" elsewhere. Or Turkish where dotted and
- dot-less "i" both exist in lower case and upper case forms, or
- Cyrillic "I" which usually has no lowercase form. Or of course
- languages that have no concept of upper case (or lower case). So, a
- conversion function will need to know not only one character at a
- time, but possibly the whole sentence, maybe the natural language
- the translation should be in and also take into account differences
- in input and output string length and so on. There is at the time of
- writing no Unicode to_upper/to_lower functionality in Erlang/OTP, but
- there are publicly available libraries that address these issues.</p>
-
- <p>Another example is the accented characters where the same glyph
- has two different representations. Let's look at the Swedish
- "ö". There's a code point for that in the Unicode standard, but you
- can also write it as "o" followed by U+0308 (Combining Diaeresis,
- with the simplified meaning that the last letter should have a "¨"
- above). They have exactly the same glyph. They are for most
- purposes the same, but they have completely different
- representations. For example MacOS X converts all file names to use
- Combining Diaeresis, while most other programs (including Erlang)
- try to hide that by doing the opposite when for example listing
- directories. However it's done, it's usually important to normalize
- such characters to avoid utter confusion.</p>
-
- <p>The list of examples can be made as long as the Unicode standard, I
- suspect. The point is that one need a kind of knowledge that was
- never needed when programs only took one or two languages into
- account. The complexity of human languages and scripts, certainly
- has made this a challenge when constructing a universal
- standard. Supporting Unicode properly in your program <em>will</em> require
- effort.</p>
-
-</section>
-<section>
-<title>What Unicode Is</title>
- <p>Unicode is a standard defining code points (numbers) for all
- known, living or dead, scripts. In principle, every known symbol
- used in any language has a Unicode code point.</p>
- <p>Unicode code points are defined and published by the <em>Unicode
- Consortium</em>, which is a non profit organization.</p>
- <p>Support for Unicode is increasing throughout the world of
- computing, as the benefits of one common character set are
- overwhelming when programs are used in a global environment.</p>
- <p>Along with the base of the standard: the code points for all the
- scripts, there are a couple of <em>encoding standards</em> available.</p>
- <p>It is vital to understand the difference between encodings and
- Unicode characters. Unicode characters are code points according to
- the Unicode standard, while the encodings are ways to represent such
- code points. An encoding is just a standard for representation,
- UTF-8 can for example be used to represent a very limited part of
- the Unicode character set (e.g. ISO-Latin-1), or the full Unicode
- range. It's just an encoding format.</p>
- <p>As long as all character sets were limited to 256 characters,
- each character could be stored in one single byte, so there was more
- or less only one practical encoding for the characters. Encoding
- each character in one byte was so common that the encoding wasn't
- even named. When we now, with the Unicode system, have a lot more
- than 256 characters, we need a common way to represent these. The
- common ways of representing the code points are the encodings. This
- means a whole new concept to the programmer, the concept of
- character representation, which was before a non-issue.</p>
-
- <p>Different operating systems and tools support different
- encodings. For example Linux and MacOS X has chosen the UTF-8
- encoding, which is backwards compatible with 7-bit ASCII and
- therefore affects programs written in plain English the
- least. Windows on the other hand supports a limited version of
- UTF-16, namely all the code planes where the characters can be
- stored in one single 16-bit entity, which includes most living
- languages.</p>
-
- <p>The most widely spread encodings are:</p>
- <taglist>
- <tag>Bytewise representation</tag>
- <item>This is not a proper Unicode representation, but the
- representation used for characters before the Unicode standard. It
- can still be used to represent character code points in the Unicode
- standard that have numbers below 256, which corresponds exactly to
- the ISO-Latin-1 character set. In Erlang, this is commonly denoted
- <c>latin1</c> encoding, which is slightly misleading as ISO-Latin-1 is
- a character code range, not an encoding.</item>
- <tag>UTF-8</tag>
- <item>Each character is stored in one to four bytes depending on
- code point. The encoding is backwards compatible with bytewise
- representation of 7-bit ASCII as all 7-bit characters are stored
- in one single byte in UTF-8. The characters beyond code point 127
- are stored in more bytes, letting the most significant bit in the
- first character indicate a multi-byte character. For details on
- the encoding, the RFC is publicly available. Note that UTF-8 is
- <em>not</em> compatible with bytewise representation for
- code points between 128 and 255, so a ISO-Latin-1 bytewise
- representation is not generally compatible with UTF-8.</item>
- <tag>UTF-16</tag>
- <item>This encoding has many similarities to UTF-8, but the basic
- unit is a 16-bit number. This means that all characters occupy at
- least two bytes, some high numbers even four bytes. Some programs,
- libraries and operating systems claiming to use UTF-16 only allows
- for characters that can be stored in one 16-bit entity, which is
- usually sufficient to handle living languages. As the basic unit
- is more than one byte, byte-order issues occur, why UTF-16 exists
- in both a big-endian and little-endian variant. In Erlang, the
- full UTF-16 range is supported when applicable, like in the
- <c>unicode</c> module and in the bit syntax.</item>
- <tag>UTF-32</tag>
- <item>The most straight forward representation. Each character is
- stored in one single 32-bit number. There is no need for escapes
- or any variable amount of entities for one character, all Unicode
- code points can be stored in one single 32-bit entity. As with
- UTF-16, there are byte-order issues, UTF-32 can be both big- and
- little-endian.</item>
- <tag>UCS-4</tag>
- <item>Basically the same as UTF-32, but without some Unicode
- semantics, defined by IEEE and has little use as a separate
- encoding standard. For all normal (and possibly abnormal) usages,
- UTF-32 and UCS-4 are interchangeable.</item>
- </taglist>
- <p>Certain ranges of numbers are left unused in the Unicode standard
- and certain ranges are even deemed invalid. The most notable invalid
- range is 16#D800 - 16#DFFF, as the UTF-16 encoding does not allow
- for encoding of these numbers. It can be speculated that the UTF-16
- encoding standard was, from the beginning, expected to be able to
- hold all Unicode characters in one 16-bit entity, but then had to be
- extended, leaving a hole in the Unicode range to cope with backward
- compatibility.</p>
- <p>Additionally, the code point 16#FEFF is used for byte order marks
- (BOM's) and use of that character is not encouraged in other
- contexts than that. It actually is valid though, as the character
- "ZWNBS" (Zero Width Non Breaking Space). BOM's are used to identify
- encodings and byte order for programs where such parameters are not
- known in advance. Byte order marks are more seldom used than one
- could expect, but their use might become more widely spread as they
- provide the means for programs to make educated guesses about the
- Unicode format of a certain file.</p>
-</section>
-<section>
- <title>Areas of Unicode Support</title>
- <p>To support Unicode in Erlang, problems in several areas have been
- addressed. Each area is described briefly in this section and more
- thoroughly further down in this document:</p>
- <taglist>
- <tag>Representation</tag>
- <item>To handle Unicode characters in Erlang, we have to have a
- common representation both in lists and binaries. The EEP (10) and
- the subsequent initial implementation in Erlang/OTP R13A settled a standard
- representation of Unicode characters in Erlang.</item>
- <tag>Manipulation</tag>
- <item>The Unicode characters need to be processed by the Erlang
- program, why library functions need to be able to handle them. In
- some cases functionality was added to already existing interfaces
- (as the string module now can handle lists with arbitrary code points),
- in some cases new functionality or options need to be added (as in
- the <c>io</c>-module, the file handling, the <c>unicode</c> module
- and the bit syntax). Today most modules in kernel and STDLIB, as
- well as the VM are Unicode aware.</item>
- <tag>File I/O</tag>
- <item>I/O is by far the most problematic area for Unicode. A file
- is an entity where bytes are stored and the lore of programming
- has been to treat characters and bytes as interchangeable. With
- Unicode characters, you need to decide on an encoding as soon as
- you want to store the data in a file. In Erlang you can open a
- text file with an encoding option, so that you can read characters
- from it rather than bytes, but you can also open a file for
- bytewise I/O. The I/O-system of Erlang has been designed (or at
- least used) in a way where you expect any I/O-server to be
- able to cope with any string data, but that is no longer the case
- when you work with Unicode characters. Handling the fact that you
- need to know the capabilities of the device where your data ends
- up is something new to the Erlang programmer. Furthermore, ports
- in Erlang are byte oriented, so an arbitrary string of (Unicode)
- characters can not be sent to a port without first converting it
- to an encoding of choice.</item>
- <tag>Terminal I/O</tag>
- <item>Terminal I/O is slightly easier than file I/O. The output is
- meant for human reading and is usually Erlang syntax (e.g. in the
- shell). There exists syntactic representation of any Unicode
- character without actually displaying the glyph (instead written
- as <c>\x{</c>HHH<c>}</c>), so Unicode data can usually be displayed
- even if the terminal as such do not support the whole Unicode
- range.</item>
- <tag>File names</tag>
- <item>File names can be stored as Unicode strings, in different
- ways depending on the underlying OS and file system. This can be
- handled fairly easy by a program. The problems arise when the file
- system is not consistent in it's encodings, like for example
- Linux. Linux allows files to be named with any sequence of bytes,
- leaving to each program to interpret those bytes. On systems where
- these "transparent" file names are used, Erlang has to be informed
- about the file name encoding by a startup flag. The default is
- bytewise interpretation, which is actually usually wrong, but
- allows for interpretation of <em>all</em> file names. The concept
- of "raw file names" can be used to handle wrongly encoded
- file names if one enables Unicode file name translation
- (<c>+fnu</c>) on platforms where this is not the default.</item>
- <tag>Source code encoding</tag>
- <item>When it comes to the Erlang source code, there is support
- for the UTF-8 encoding and bytewise encoding. The default in
- Erlang/OTP R16B was bytewise (or latin1) encoding; in Erlang/OTP 17.0
- it was changed to UTF-8. You can control the encoding by a comment like:
-<code>
-%% -*- coding: utf-8 -*-
-</code>
- in the beginning of the file. This of course requires your editor to
- support UTF-8 as well. The same comment is also interpreted by
- functions like <c>file:consult/1</c>, the release handler etc, so that
- you can have all text files in your source directories in UTF-8
- encoding.
- </item>
- <tag>The language</tag>
- <item>Having the source code in UTF-8 also allows you to write
- string literals containing Unicode characters with code points &gt;
- 255, although atoms, module names and function names are
- restricted to the ISO-Latin-1 range. Binary
- literals where you use the <c>/utf8</c> type, can also be
- expressed using Unicode characters &gt; 255. Having module names
- using characters other than 7-bit ASCII can cause trouble on
- operating systems with inconsistent file naming schemes, and might
- also hurt portability, so it's not really recommended. It is
- suggested in EEP 40 that the language should also allow for
- Unicode characters &gt; 255 in variable names. Whether to
- implement that EEP or not is yet to be decided.</item>
- </taglist>
-</section>
-<section>
- <title>Standard Unicode Representation</title>
- <p>In Erlang, strings are actually lists of integers. A string was
- up until Erlang/OTP R13 defined to be encoded in the ISO-latin-1 (ISO8859-1)
- character set, which is, code point by code point, a sub-range of
- the Unicode character set.</p>
- <p>The standard list encoding for strings was therefore easily
- extended to cope with the whole Unicode range: A Unicode string in
- Erlang is simply a list containing integers, each integer being a
- valid Unicode code point and representing one character in the
- Unicode character set.</p>
- <p>Erlang strings in ISO-latin-1 are a subset of Unicode
- strings.</p>
- <p>Only if a string contains code points &lt; 256, can it be
- directly converted to a binary by using
- i.e. <c>erlang:iolist_to_binary/1</c> or can be sent directly to a
- port. If the string contains Unicode characters &gt; 255, an
- encoding has to be decided upon and the string should be converted
- to a binary in the preferred encoding using
- <c>unicode:characters_to_binary/{1,2,3}</c>. Strings are not
- generally lists of bytes, as they were before Erlang/OTP R13. They are lists of
- characters. Characters are not generally bytes, they are Unicode
- code points.</p>
-
- <p>Binaries are more troublesome. For performance reasons, programs
- often store textual data in binaries instead of lists, mainly
- because they are more compact (one byte per character instead of two
- words per character, as is the case with lists). Using
- <c>erlang:list_to_binary/1</c>, an ISO-Latin-1 Erlang string could
- be converted into a binary, effectively using bytewise encoding -
- one byte per character. This was very convenient for those limited
- Erlang strings, but cannot be done for arbitrary Unicode lists.</p>
- <p>As the UTF-8 encoding is widely spread and provides some backward
- compatibility in the 7-bit ASCII range, it is selected as the
- standard encoding for Unicode characters in binaries for Erlang.</p>
- <p>The standard binary encoding is used whenever a library function
- in Erlang should cope with Unicode data in binaries, but is of
- course not enforced when communicating externally. Functions and
- bit-syntax exist to encode and decode both UTF-8, UTF-16 and UTF-32
- in binaries. Library functions dealing with binaries and Unicode in
- general, however, only deal with the default encoding.</p>
-
- <p>Character data may be combined from several sources, sometimes
- available in a mix of strings and binaries. Erlang has for long had
- the concept of <c>iodata</c> or <c>iolist</c>s, where binaries and
- lists can be combined to represent a sequence of bytes. In the same
- way, the Unicode aware modules often allow for combinations of
- binaries and lists where the binaries have characters encoded in
- UTF-8 and the lists contain such binaries or numbers representing
- Unicode code points:</p>
- <code type="none">
+ <section>
+ <title>Unicode Implementation</title>
+ <p>Implementing support for Unicode character sets is an ongoing process.
+ The Erlang Enhancement Proposal (EEP) 10 outlined the basics of Unicode
+ support and specified a default encoding in binaries that all
+ Unicode-aware modules are to handle in the future.</p>
+
+ <p>Here is an overview what has been done so far:</p>
+
+ <list type="bulleted">
+ <item><p>The functionality described in EEP10 was implemented
+ in Erlang/OTP R13A.</p></item>
+
+ <item><p>Erlang/OTP R14B01 added support for Unicode
+ filenames, but it was not complete and was by default
+ disabled on platforms where no guarantee was given for the
+ filename encoding.</p></item>
+
+ <item><p>With Erlang/OTP R16A came support for UTF-8 encoded
+ source code, with enhancements to many of the applications to
+ support both Unicode encoded filenames and support for UTF-8
+ encoded files in many circumstances. Most notable is the
+ support for UTF-8 in files read by <seealso
+ marker="kernel:file#consult/1"><c>file:consult/1</c></seealso>,
+ release handler support for UTF-8, and more support for
+ Unicode character sets in the I/O system.</p></item>
+
+ <item><p>In Erlang/OTP 17.0, the encoding default for Erlang
+ source files was switched to UTF-8.</p></item>
+ </list>
+
+ <p>This section outlines the current Unicode support and gives some
+ recipes for working with Unicode data.</p>
+ </section>
+
+ <section>
+ <title>Understanding Unicode</title>
+ <p>Experience with the Unicode support in Erlang has made it clear that
+ understanding Unicode characters and encodings is not as easy as one
+ would expect. The complexity of the field and the implications of the
+ standard require thorough understanding of concepts rarely before
+ thought of.</p>
+
+ <p>Also, the Erlang implementation requires understanding of
+ concepts that were never an issue for many (Erlang) programmers. To
+ understand and use Unicode characters requires that you study the
+ subject thoroughly, even if you are an experienced programmer.</p>
+
+ <p>As an example, contemplate the issue of converting between upper and
+ lower case letters. Reading the standard makes you realize that there is
+ not a simple one to one mapping in all scripts, for example:</p>
+
+ <list type="bulleted">
+ <item>
+ <p>In German, the letter "ß" (sharp s) is in lower case, but the
+ uppercase equivalent is "SS".</p>
+ </item>
+ <item>
+ <p>In Greek, the letter "Σ" has two different lowercase forms,
+ "ς" in word-final position and "σ" elsewhere.</p>
+ </item>
+ <item>
+ <p>In Turkish, both dotted and dotless "i" exist in lower case and
+ upper case forms.</p>
+ </item>
+ <item>
+ <p>Cyrillic "I" has usually no lowercase form.</p>
+ </item>
+ <item>
+ <p>Languages with no concept of upper case (or lower case).</p>
+ </item>
+ </list>
+
+ <p>So, a conversion function must know not only one character at a time,
+ but possibly the whole sentence, the natural language to translate to,
+ the differences in input and output string length, and so on.
+ Erlang/OTP has currently no Unicode <c>to_upper</c>/<c>to_lower</c>
+ functionality, but publicly available libraries address these issues.</p>
+
+ <p>Another example is the accented characters, where the same glyph has two
+ different representations. The Swedish letter "ö" is one example.
+ The Unicode standard has a code point for it, but you can also write it
+ as "o" followed by "U+0308" (Combining Diaeresis, with the simplified
+ meaning that the last letter is to have "¨" above). They have the same
+ glyph. They are for most purposes the same, but have different
+ representations. For example, MacOS X converts all filenames to use
+ Combining Diaeresis, while most other programs (including Erlang) try to
+ hide that by doing the opposite when, for example, listing directories.
+ However it is done, it is usually important to normalize such
+ characters to avoid confusion.</p>
+
+ <p>The list of examples can be made long. One need a kind of knowledge that
+ was not needed when programs only considered one or two languages. The
+ complexity of human languages and scripts has certainly made this a
+ challenge when constructing a universal standard. Supporting Unicode
+ properly in your program will require effort.</p>
+ </section>
+
+ <section>
+ <title>What Unicode Is</title>
+ <p>Unicode is a standard defining code points (numbers) for all known,
+ living or dead, scripts. In principle, every symbol used in any
+ language has a Unicode code point. Unicode code points are defined and
+ published by the Unicode Consortium, which is a non-profit
+ organization.</p>
+
+ <p>Support for Unicode is increasing throughout the world of computing, as
+ the benefits of one common character set are overwhelming when programs
+ are used in a global environment. Along with the base of the standard,
+ the code points for all the scripts, some <em>encoding standards</em> are
+ available.</p>
+
+ <p>It is vital to understand the difference between encodings and Unicode
+ characters. Unicode characters are code points according to the Unicode
+ standard, while the encodings are ways to represent such code points. An
+ encoding is only a standard for representation. UTF-8 can, for example,
+ be used to represent a very limited part of the Unicode character set
+ (for example ISO-Latin-1) or the full Unicode range. It is only an
+ encoding format.</p>
+
+ <p>As long as all character sets were limited to 256 characters, each
+ character could be stored in one single byte, so there was more or less
+ only one practical encoding for the characters. Encoding each character
+ in one byte was so common that the encoding was not even named. With the
+ Unicode system there are much more than 256 characters, so a common way
+ is needed to represent these. The common ways of representing the code
+ points are the encodings. This means a whole new concept to the
+ programmer, the concept of character representation, which was a
+ non-issue earlier.</p>
+
+ <p>Different operating systems and tools support different encodings. For
+ example, Linux and MacOS X have chosen the UTF-8 encoding, which is
+ backward compatible with 7-bit ASCII and therefore affects programs
+ written in plain English the least. Windows supports a limited version
+ of UTF-16, namely all the code planes where the characters can be
+ stored in one single 16-bit entity, which includes most living
+ languages.</p>
+
+ <p>The following are the most widely spread encodings:</p>
+
+ <taglist>
+ <tag>Bytewise representation</tag>
+ <item>
+ <p>This is not a proper Unicode representation, but the representation
+ used for characters before the Unicode standard. It can still be used
+ to represent character code points in the Unicode standard with
+ numbers &lt; 256, which exactly corresponds to the ISO Latin-1
+ character set. In Erlang, this is commonly denoted <c>latin1</c>
+ encoding, which is slightly misleading as ISO Latin-1 is a
+ character code range, not an encoding.</p>
+ </item>
+ <tag>UTF-8</tag>
+ <item>
+ <p>Each character is stored in one to four bytes depending on code
+ point. The encoding is backward compatible with bytewise
+ representation of 7-bit ASCII, as all 7-bit characters are stored in
+ one single byte in UTF-8. The characters beyond code point 127 are
+ stored in more bytes, letting the most significant bit in the first
+ character indicate a multi-byte character. For details on the
+ encoding, the RFC is publicly available.</p>
+ <p>Notice that UTF-8 is <em>not</em> compatible with bytewise
+ representation for code points from 128 through 255, so an ISO
+ Latin-1 bytewise representation is generally incompatible with
+ UTF-8.</p>
+ </item>
+ <tag>UTF-16</tag>
+ <item>
+ <p>This encoding has many similarities to UTF-8, but the basic
+ unit is a 16-bit number. This means that all characters occupy
+ at least two bytes, and some high numbers four bytes. Some
+ programs, libraries, and operating systems claiming to use
+ UTF-16 only allow for characters that can be stored in one
+ 16-bit entity, which is usually sufficient to handle living
+ languages. As the basic unit is more than one byte, byte-order
+ issues occur, which is why UTF-16 exists in both a big-endian
+ and a little-endian variant.</p>
+ <p>In Erlang, the full UTF-16 range is supported when applicable, like
+ in the <seealso marker="stdlib:unicode"><c>unicode</c></seealso>
+ module and in the bit syntax.</p>
+ </item>
+ <tag>UTF-32</tag>
+ <item>
+ <p>The most straightforward representation. Each character is stored in
+ one single 32-bit number. There is no need for escapes or any
+ variable number of entities for one character. All Unicode code
+ points can be stored in one single 32-bit entity. As with UTF-16,
+ there are byte-order issues. UTF-32 can be both big-endian and
+ little-endian.</p>
+ </item>
+ <tag>UCS-4</tag>
+ <item>
+ <p>Basically the same as UTF-32, but without some Unicode semantics,
+ defined by IEEE, and has little use as a separate encoding standard.
+ For all normal (and possibly abnormal) use, UTF-32 and UCS-4 are
+ interchangeable.</p>
+ </item>
+ </taglist>
+
+ <p>Certain number ranges are unused in the Unicode standard and certain
+ ranges are even deemed invalid. The most notable invalid range is
+ 16#D800-16#DFFF, as the UTF-16 encoding does not allow for encoding of
+ these numbers. This is possibly because the UTF-16 encoding standard,
+ from the beginning, was expected to be able to hold all Unicode
+ characters in one 16-bit entity, but was then extended, leaving a hole
+ in the Unicode range to handle backward compatibility.</p>
+
+ <p>Code point 16#FEFF is used for Byte Order Marks (BOMs) and use of that
+ character is not encouraged in other contexts. It is valid though, as
+ the character "ZWNBS" (Zero Width Non Breaking Space). BOMs are used to
+ identify encodings and byte order for programs where such parameters are
+ not known in advance. BOMs are more seldom used than expected, but can
+ become more widely spread as they provide the means for programs to make
+ educated guesses about the Unicode format of a certain file.</p>
+ </section>
+
+ <section>
+ <title>Areas of Unicode Support</title>
+ <p>To support Unicode in Erlang, problems in various areas have been
+ addressed. This section describes each area briefly and more
+ thoroughly later in this User's Guide.</p>
+
+ <taglist>
+ <tag>Representation</tag>
+ <item>
+ <p>To handle Unicode characters in Erlang, a common representation
+ in both lists and binaries is needed. EEP (10) and the subsequent
+ initial implementation in Erlang/OTP R13A settled a standard
+ representation of Unicode characters in Erlang.</p>
+ </item>
+ <tag>Manipulation</tag>
+ <item>
+ <p>The Unicode characters need to be processed by the Erlang
+ program, which is why library functions must be able to handle
+ them. In some cases functionality has been added to already
+ existing interfaces (as the <seealso
+ marker="stdlib:string"><c>string</c></seealso> module now can
+ handle lists with any code points). In some cases new
+ functionality or options have been added (as in the <seealso
+ marker="stdlib:io"><c>io</c></seealso> module, the file
+ handling, the <seealso
+ marker="stdlib:unicode"><c>unicode</c></seealso> module, and
+ the bit syntax). Today most modules in Kernel and
+ STDLIB, as well as the VM are Unicode-aware.</p>
+ </item>
+ <tag>File I/O</tag>
+ <item>
+ <p>I/O is by far the most problematic area for Unicode. A file is an
+ entity where bytes are stored, and the lore of programming has been
+ to treat characters and bytes as interchangeable. With Unicode
+ characters, you must decide on an encoding when you want to store
+ the data in a file. In Erlang, you can open a text file with an
+ encoding option, so that you can read characters from it rather than
+ bytes, but you can also open a file for bytewise I/O.</p>
+ <p>The Erlang I/O-system has been designed (or at least used) in a way
+ where you expect any I/O server to handle any string data.
+ That is, however, no longer the case when working with Unicode
+ characters. The Erlang programmer must now know the
+ capabilities of the device where the data ends up. Also, ports in
+ Erlang are byte-oriented, so an arbitrary string of (Unicode)
+ characters cannot be sent to a port without first converting it to an
+ encoding of choice.</p>
+ </item>
+ <tag>Terminal I/O</tag>
+ <item>
+ <p>Terminal I/O is slightly easier than file I/O. The output is meant
+ for human reading and is usually Erlang syntax (for example, in the
+ shell). There exists syntactic representation of any Unicode
+ character without displaying the glyph (instead written as
+ <c>\x</c>{<c>HHH</c>}). Unicode data can therefore usually be
+ displayed even if the terminal as such does not support the whole
+ Unicode range.</p>
+ </item>
+ <tag>Filenames</tag>
+ <item>
+ <p>Filenames can be stored as Unicode strings in different ways
+ depending on the underlying operating system and file system. This
+ can be handled fairly easy by a program. The problems arise when the
+ file system is inconsistent in its encodings. For example, Linux
+ allows files to be named with any sequence of bytes, leaving to each
+ program to interpret those bytes. On systems where these
+ "transparent" filenames are used, Erlang must be informed about the
+ filename encoding by a startup flag. The default is bytewise
+ interpretation, which is usually wrong, but allows for interpretation
+ of <em>all</em> filenames.</p>
+ <p>The concept of "raw filenames" can be used to handle wrongly encoded
+ filenames if one enables Unicode filename translation (<c>+fnu</c>)
+ on platforms where this is not the default.</p>
+ </item>
+ <tag>Source code encoding</tag>
+ <item>
+ <p>The Erlang source code has support for the UTF-8 encoding
+ and bytewise encoding. The default in Erlang/OTP R16B was bytewise
+ (<c>latin1</c>) encoding. It was changed to UTF-8 in Erlang/OTP 17.0.
+ You can control the encoding by a comment like the following in the
+ beginning of the file:</p>
+ <code>
+%% -*- coding: utf-8 -*-</code>
+ <p>This of course requires your editor to support UTF-8 as well. The
+ same comment is also interpreted by functions like
+ <seealso marker="kernel:file#consult/1"><c>file:consult/1</c></seealso>,
+ the release handler, and so on, so that you can have all text files
+ in your source directories in UTF-8 encoding.</p>
+ </item>
+ <tag>The language</tag>
+ <item>
+ <p>Having the source code in UTF-8 also allows you to write string
+ literals containing Unicode characters with code points &gt; 255,
+ although atoms, module names, and function names are restricted to
+ the ISO Latin-1 range. Binary literals, where you use type
+ <c>/utf8</c>, can also be expressed using Unicode characters &gt; 255.
+ Having module names using characters other than 7-bit ASCII can cause
+ trouble on operating systems with inconsistent file naming schemes,
+ and can hurt portability, so it is not recommended.</p>
+ <p>EEP 40 suggests that the language is also to allow for Unicode
+ characters &gt; 255 in variable names. Whether to implement that EEP
+ is yet to be decided.</p>
+ </item>
+ </taglist>
+ </section>
+
+ <section>
+ <title>Standard Unicode Representation</title>
+ <p>In Erlang, strings are lists of integers. A string was until
+ Erlang/OTP R13 defined to be encoded in the ISO Latin-1 (ISO 8859-1)
+ character set, which is, code point by code point, a subrange of the
+ Unicode character set.</p>
+
+ <p>The standard list encoding for strings was therefore easily extended to
+ handle the whole Unicode range. A Unicode string in Erlang is a list
+ containing integers, where each integer is a valid Unicode code point and
+ represents one character in the Unicode character set.</p>
+
+ <p>Erlang strings in ISO Latin-1 are a subset of Unicode strings.</p>
+
+ <p>Only if a string contains code points &lt; 256, can it be directly
+ converted to a binary by using, for example,
+ <seealso marker="erts:erlang#iolist_to_binary/1"><c>erlang:iolist_to_binary/1</c></seealso>
+ or can be sent directly to a port. If the string contains Unicode
+ characters &gt; 255, an encoding must be decided upon and the string is to
+ be converted to a binary in the preferred encoding using
+ <seealso marker="stdlib:unicode#characters_to_binary/1"><c>unicode:characters_to_binary/1,2,3</c></seealso>.
+ Strings are not generally lists of bytes, as they were before
+ Erlang/OTP R13, they are lists of characters. Characters are not
+ generally bytes, they are Unicode code points.</p>
+
+ <p>Binaries are more troublesome. For performance reasons, programs often
+ store textual data in binaries instead of lists, mainly because they are
+ more compact (one byte per character instead of two words per character,
+ as is the case with lists). Using
+ <seealso marker="erts:erlang#list_to_binary/1"><c>erlang:list_to_binary/1</c></seealso>,
+ an ISO Latin-1 Erlang string can be converted into a binary, effectively
+ using bytewise encoding: one byte per character. This was convenient for
+ those limited Erlang strings, but cannot be done for arbitrary Unicode
+ lists.</p>
+
+ <p>As the UTF-8 encoding is widely spread and provides some backward
+ compatibility in the 7-bit ASCII range, it is selected as the standard
+ encoding for Unicode characters in binaries for Erlang.</p>
+
+ <p>The standard binary encoding is used whenever a library function in
+ Erlang is to handle Unicode data in binaries, but is of course not
+ enforced when communicating externally. Functions and bit syntax exist to
+ encode and decode both UTF-8, UTF-16, and UTF-32 in binaries. However,
+ library functions dealing with binaries and Unicode in general only deal
+ with the default encoding.</p>
+
+ <p>Character data can be combined from many sources, sometimes available in
+ a mix of strings and binaries. Erlang has for long had the concept of
+ <c>iodata</c> or <c>iolist</c>s, where binaries and lists can be combined
+ to represent a sequence of bytes. In the same way, the Unicode-aware
+ modules often allow for combinations of binaries and lists, where the
+ binaries have characters encoded in UTF-8 and the lists contain such
+ binaries or numbers representing Unicode code points:</p>
+
+ <code type="none">
unicode_binary() = binary() with characters encoded in UTF-8 coding standard
chardata() = charlist() | unicode_binary()
charlist() = maybe_improper_list(char() | unicode_binary() | charlist(),
- unicode_binary() | nil())</code>
- <p>The module <seealso
- marker="stdlib:unicode"><c>unicode</c></seealso> in STDLIB even
- supports similar mixes with binaries containing other encodings than
- UTF-8, but that is a special case to allow for conversions to and
- from external data:</p>
- <code type="none">
-external_unicode_binary() = binary() with characters coded in
- a user specified Unicode encoding other than UTF-8 (UTF-16 or UTF-32)
+ unicode_binary() | nil())</code>
+
+ <p>The module <seealso marker="stdlib:unicode"><c>unicode</c></seealso>
+ even supports similar mixes with binaries containing other encodings than
+ UTF-8, but that is a special case to allow for conversions to and from
+ external data:</p>
+
+ <code type="none">
+external_unicode_binary() = binary() with characters coded in a user-specified
+ Unicode encoding other than UTF-8 (UTF-16 or UTF-32)
external_chardata() = external_charlist() | external_unicode_binary()
-external_charlist() = maybe_improper_list(char() |
- external_unicode_binary() |
- external_charlist(),
- external_unicode_binary() | nil())</code>
-</section>
-<section>
- <title>Basic Language Support</title>
- <p><marker id="unicode_in_erlang"/>As of Erlang/OTP R16 Erlang
- source files can be written in either UTF-8 or bytewise encoding
- (a.k.a. <c>latin1</c> encoding). The details on how to state the encoding
- of an Erlang source file can be found in
- <seealso marker="stdlib:epp#encoding"><c>epp(3)</c></seealso>. Strings and comments
- can be written using Unicode, but functions still have to be named
- using characters from the ISO-latin-1 character set and atoms are
- restricted to the same ISO-latin-1 range. These restrictions in the
- language are of course independent of the encoding of the source
- file.</p>
+external_charlist() = maybe_improper_list(char() | external_unicode_binary() |
+ external_charlist(), external_unicode_binary() | nil())</code>
+ </section>
+
<section>
- <title>Bit-syntax</title>
- <p>The bit-syntax contains types for coping with binary data in the
- three main encodings. The types are named <c>utf8</c>, <c>utf16</c>
- and <c>utf32</c> respectively. The <c>utf16</c> and <c>utf32</c> types
- can be in a big- or little-endian variant:</p>
- <code>
+ <title>Basic Language Support</title>
+ <p><marker id="unicode_in_erlang"/>As from Erlang/OTP R16, Erlang source
+ files can be written in UTF-8 or bytewise (<c>latin1</c>) encoding. For
+ information about how to state the encoding of an Erlang source file, see
+ the <seealso marker="stdlib:epp#encoding"><c>epp(3)</c></seealso> module.
+ Strings and comments can be written using Unicode, but functions must
+ still be named using characters from the ISO Latin-1 character set, and
+ atoms are restricted to the same ISO Latin-1 range. These restrictions in
+ the language are of course independent of the encoding of the source
+ file.</p>
+
+ <section>
+ <title>Bit Syntax</title>
+ <p>The bit syntax contains types for handling binary data in the
+ three main encodings. The types are named <c>utf8</c>, <c>utf16</c>,
+ and <c>utf32</c>. The <c>utf16</c> and <c>utf32</c> types can be in a
+ big-endian or a little-endian variant:</p>
+
+ <code>
&lt;&lt;Ch/utf8,_/binary&gt;&gt; = Bin1,
&lt;&lt;Ch/utf16-little,_/binary&gt;&gt; = Bin2,
Bin3 = &lt;&lt;$H/utf32-little, $e/utf32-little, $l/utf32-little, $l/utf32-little,
$o/utf32-little&gt;&gt;,</code>
- <p>For convenience, literal strings can be encoded with a Unicode
- encoding in binaries using the following (or similar) syntax:</p>
- <code>
+
+ <p>For convenience, literal strings can be encoded with a Unicode
+ encoding in binaries using the following (or similar) syntax:</p>
+
+ <code>
Bin4 = &lt;&lt;"Hello"/utf16&gt;&gt;,</code>
- </section>
- <section>
- <title>String and Character Literals</title>
- <p>For source code, there is an extension to the <c>\</c>OOO
- (backslash followed by three octal numbers) and <c>\x</c>HH
- (backslash followed by <c>x</c>, followed by two hexadecimal
- characters) syntax, namely <c>\x{</c>H ...<c>}</c> (a backslash
- followed by an <c>x</c>, followed by left curly bracket, any
- number of hexadecimal digits and a terminating right curly
- bracket). This allows for entering characters of any code point
- literally in a string even when the encoding of the source file is
- bytewise (<c>latin1</c>).</p>
- <p>In the shell, if using a Unicode input device, or in source
- code stored in UTF-8, <c>$</c> can be followed directly by a
- Unicode character producing an integer. In the following example
- the code point of a Cyrillic <c>с</c> is output:</p>
- <pre>
+ </section>
+
+ <section>
+ <title>String and Character Literals</title>
+ <p>For source code, there is an extension to syntax <c>\</c>OOO
+ (backslash followed by three octal numbers) and <c>\x</c>HH (backslash
+ followed by <c>x</c>, followed by two hexadecimal characters), namely
+ <c>\x{</c>H ...<c>}</c> (backslash followed by <c>x</c>, followed by
+ left curly bracket, any number of hexadecimal digits, and a terminating
+ right curly bracket). This allows for entering characters of any code
+ point literally in a string even when the encoding of the source file
+ is bytewise (<c>latin1</c>).</p>
+
+ <p>In the shell, if using a Unicode input device, or in source code
+ stored in UTF-8, <c>$</c> can be followed directly by a Unicode
+ character producing an integer. In the following example, the code
+ point of a Cyrillic <c>с</c> is output:</p>
+
+ <pre>
7> <input>$с.</input>
1089</pre>
- </section>
- <section>
- <title>Heuristic String Detection</title>
- <p>In certain output functions and in the output of return values
- in the shell, Erlang tries to heuristically detect string data in
- lists and binaries. Typically you will see heuristic detection in
- a situation like this:</p>
- <pre>
+ </section>
+
+ <section>
+ <title>Heuristic String Detection</title>
+ <p>In certain output functions and in the output of return values in
+ the shell, Erlang tries to detect string data in lists and binaries
+ heuristically. Typically you will see heuristic detection in a
+ situation like this:</p>
+
+ <pre>
1> <input>[97,98,99].</input>
"abc"
2> <input>&lt;&lt;97,98,99&gt;&gt;.</input>
&lt;&lt;"abc"&gt;&gt;
3> <input>&lt;&lt;195,165,195,164,195,182&gt;&gt;.</input>
&lt;&lt;"åäö"/utf8&gt;&gt;</pre>
- <p>Here the shell will detect lists containing printable
- characters or binaries containing printable characters either in
- bytewise or UTF-8 encoding. The question here is: what is a
- printable character? One view would be that anything the Unicode
- standard thinks is printable, will also be printable according to
- the heuristic detection. The result would be that almost any list
- of integers will be deemed a string, resulting in all sorts of
- characters being printed, maybe even characters your terminal does
- not have in its font set (resulting in some generic output you
- probably will not appreciate). Another way is to keep it backwards
- compatible so that only the ISO-Latin-1 character set is used to
- detect a string. A third way would be to let the user decide
- exactly what Unicode ranges are to be viewed as characters. Since
- Erlang/OTP R16B you can select either the whole Unicode range or the
- ISO-Latin-1 range by supplying the startup flag <c>+pc
- </c><i>Range</i>, where <i>Range</i> is either <c>latin1</c> or
- <c>unicode</c>. For backwards compatibility, the default is
- <c>latin1</c>. This only controls how heuristic string detection
- is done. In the future, more ranges are expected to be added, so
- that one can tailor the heuristics to the language and region
- relevant to the user.</p>
- <p>Lets look at an example with the two different startup options:</p>
-<pre>
+
+ <p>Here the shell detects lists containing printable characters or
+ binaries containing printable characters in bytewise or UTF-8 encoding.
+ But what is a printable character? One view is that anything the Unicode
+ standard thinks is printable, is also printable according to the
+ heuristic detection. The result is then that almost any list of
+ integers are deemed a string, and all sorts of characters are printed,
+ maybe also characters that your terminal lacks in its font set
+ (resulting in some unappreciated generic output).
+ Another way is to keep it backward compatible so that only the ISO
+ Latin-1 character set is used to detect a string. A third way is to let
+ the user decide exactly what Unicode ranges that are to be viewed as
+ characters.</p>
+
+ <p>As from Erlang/OTP R16B you can select the ISO Latin-1 range or the
+ whole Unicode range by supplying startup flag <c>+pc latin1</c> or
+ <c>+pc unicode</c>, respectively. For backward compatibility,
+ <c>latin1</c> is default. This only controls how heuristic string
+ detection is done. More ranges are expected to be added in the future,
+ enabling tailoring of the heuristics to the language and region
+ relevant to the user.</p>
+
+ <p>The following examples show the two startup options:</p>
+
+ <pre>
$ <input>erl +pc latin1</input>
Erlang R16B (erts-5.10.1) [source] [async-threads:0] [hipe] [kernel-poll:false]
@@ -467,9 +535,9 @@ Eshell V5.10.1 (abort with ^G)
4> <input>&lt;&lt;208,174,208,189,208,184,208,186,208,190,208,180&gt;&gt;.</input>
&lt;&lt;208,174,208,189,208,184,208,186,208,190,208,180&gt;&gt;
5> <input>&lt;&lt;229/utf8,228/utf8,246/utf8&gt;&gt;.</input>
-&lt;&lt;"åäö"/utf8&gt;&gt;
-</pre>
-<pre>
+&lt;&lt;"åäö"/utf8&gt;&gt;</pre>
+
+ <pre>
$ <input>erl +pc unicode</input>
Erlang R16B (erts-5.10.1) [source] [async-threads:0] [hipe] [kernel-poll:false]
@@ -483,78 +551,88 @@ Eshell V5.10.1 (abort with ^G)
4> <input>&lt;&lt;208,174,208,189,208,184,208,186,208,190,208,180&gt;&gt;.</input>
&lt;&lt;"Юникод"/utf8&gt;&gt;
5> <input>&lt;&lt;229/utf8,228/utf8,246/utf8&gt;&gt;.</input>
-&lt;&lt;"åäö"/utf8&gt;&gt;
-</pre>
- <p>In the examples, we can see that the default Erlang shell will
- only interpret characters from the ISO-Latin1 range as printable
- and will only detect lists or binaries with those "printable"
- characters as containing string data. The valid UTF-8 binary
- containing "Юникод", will not be printed as a string. When, on the
- other hand, started with all Unicode characters printable (<c>+pc
- unicode</c>), the shell will output anything containing printable
- Unicode data (in binaries either UTF-8 or bytewise encoded) as
- string data.</p>
-
- <p>These heuristics are also used by
- <c>io</c>(<c>_lib</c>)<c>:format/2</c> and friends when the
- <c>t</c> modifier is used in conjunction with <c>~p</c> or
- <c>~P</c>:</p>
-<pre>
+&lt;&lt;"åäö"/utf8&gt;&gt;</pre>
+
+ <p>In the examples, you can see that the default Erlang shell interprets
+ only characters from the ISO Latin1 range as printable and only detects
+ lists or binaries with those "printable" characters as containing
+ string data. The valid UTF-8 binary containing the Russian word
+ "Юникод", is not printed as a string. When started with all Unicode
+ characters printable (<c>+pc unicode</c>), the shell outputs anything
+ containing printable Unicode data (in binaries, either UTF-8 or
+ bytewise encoded) as string data.</p>
+
+ <p>These heuristics are also used by
+ <seealso marker="stdlib:io#format/2"><c>io:format/2</c></seealso>,
+ <seealso marker="stdlib:io_lib#format/2"><c>io_lib:format/2</c></seealso>,
+ and friends when modifier <c>t</c> is used with <c>~p</c> or
+ <c>~P</c>:</p>
+
+ <pre>
$ <input>erl +pc latin1</input>
Erlang R16B (erts-5.10.1) [source] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.10.1 (abort with ^G)
1> <input>io:format("~tp~n",[{&lt;&lt;"åäö"&gt;&gt;, &lt;&lt;"åäö"/utf8&gt;&gt;, &lt;&lt;208,174,208,189,208,184,208,186,208,190,208,180&gt;&gt;}]).</input>
{&lt;&lt;"åäö"&gt;&gt;,&lt;&lt;"åäö"/utf8&gt;&gt;,&lt;&lt;208,174,208,189,208,184,208,186,208,190,208,180&gt;&gt;}
-ok
-</pre>
-<pre>
+ok</pre>
+
+ <pre>
$ <input>erl +pc unicode</input>
Erlang R16B (erts-5.10.1) [source] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.10.1 (abort with ^G)
1> <input>io:format("~tp~n",[{&lt;&lt;"åäö"&gt;&gt;, &lt;&lt;"åäö"/utf8&gt;&gt;, &lt;&lt;208,174,208,189,208,184,208,186,208,190,208,180&gt;&gt;}]).</input>
{&lt;&lt;"åäö"&gt;&gt;,&lt;&lt;"åäö"/utf8&gt;&gt;,&lt;&lt;"Юникод"/utf8&gt;&gt;}
-ok
-</pre>
- <p>Please observe that this only affects <i>heuristic</i> interpretation
- of lists and binaries on output. For example the <c>~ts</c> format
- sequence does always output a valid lists of characters,
- regardless of the <c>+pc</c> setting, as the programmer has
- explicitly requested string output.</p>
+ok</pre>
+
+ <p>Notice that this only affects <em>heuristic</em> interpretation of
+ lists and binaries on output. For example, the <c>~ts</c> format
+ sequence always outputs a valid list of characters, regardless of the
+ <c>+pc</c> setting, as the programmer has explicitly requested string
+ output.</p>
+ </section>
</section>
-</section>
-<section>
- <title>The Interactive Shell</title>
- <p>The interactive Erlang shell, when started towards a terminal or
- started using the <c>werl</c> command on windows, can support
- Unicode input and output.</p>
- <p>On Windows, proper operation requires that a suitable font
- is installed and selected for the Erlang application to use. If no
- suitable font is available on your system, try installing the DejaVu
- fonts (<c>dejavu-fonts.org</c>), which are freely available and then
- select that font in the Erlang shell application.</p>
- <p>On Unix-like operating systems, the terminal should be able
- to handle UTF-8 on input and output (modern versions of XTerm, KDE
- konsole and the Gnome terminal do for example) and your locale
- settings have to be proper. As an example, my <c>LANG</c>
- environment variable is set as this:</p>
- <pre>
+
+ <section>
+ <title>The Interactive Shell</title>
+ <p>The interactive Erlang shell, when started to a terminal or started
+ using command <c>werl</c> on Windows, can support Unicode input and
+ output.</p>
+
+ <p>On Windows, proper operation requires that a suitable font is
+ installed and selected for the Erlang application to use. If no suitable
+ font is available on your system, try installing the
+ <url href="http://dejavu-fonts.org">DejaVu fonts</url>, which are freely
+ available, and then select that font in the Erlang shell application.</p>
+
+ <p>On Unix-like operating systems, the terminal is to be able to handle
+ UTF-8 on input and output (this is done by, for example, modern versions
+ of XTerm, KDE Konsole, and the Gnome terminal)
+ and your locale settings must be proper. As
+ an example, a <c>LANG</c> environment variable can be set as follows:</p>
+
+ <pre>
$ <input>echo $LANG</input>
en_US.UTF-8</pre>
- <p>Actually, most systems handle the <c>LC_CTYPE</c> variable before
- <c>LANG</c>, so if that is set, it has to be set to
- <c>UTF-8</c>:</p>
- <pre>
+
+ <p>Most systems handle variable <c>LC_CTYPE</c> before <c>LANG</c>, so if
+ that is set, it must be set to <c>UTF-8</c>:</p>
+
+ <pre>
$ echo <input>$LC_CTYPE</input>
en_US.UTF-8</pre>
- <p>The <c>LANG</c> or <c>LC_CTYPE</c> setting should be consistent
- with what the terminal is capable of, there is no portable way for
- Erlang to ask the actual terminal about its UTF-8 capacity, we have
- to rely on the language and character type settings.</p>
- <p>To investigate what Erlang thinks about the terminal, the
- <c>io:getopts()</c> call can be used when the shell is started:</p>
- <pre>
+
+ <p>The <c>LANG</c> or <c>LC_CTYPE</c> setting are to be consistent with
+ what the terminal is capable of. There is no portable way for Erlang to
+ ask the terminal about its UTF-8 capacity, we have to rely on the
+ language and character type settings.</p>
+
+ <p>To investigate what Erlang thinks about the terminal, the call
+ <seealso marker="stdlib:io#getopts/1"><c>io:getopts()</c></seealso>
+ can be used when the shell is started:</p>
+
+ <pre>
$ <input>LC_CTYPE=en_US.ISO-8859-1 erl</input>
Erlang R16B (erts-5.10.1) [source] [async-threads:0] [hipe] [kernel-poll:false]
@@ -571,27 +649,31 @@ Eshell V5.10.1 (abort with ^G)
{encoding,unicode}
2></pre>
- <p>When (finally?) everything is in order with the locale settings,
- fonts and the terminal emulator, you probably also have discovered a
- way to input characters in the script you desire. For testing, the
- simplest way is to add some keyboard mappings for other languages,
- usually done with some applet in your desktop environment. In my KDE
- environment, I start the KDE Control Center (Personal Settings),
- select "Regional and Accessibility" and then "Keyboard Layout". On
- Windows XP, I start Control Panel->Regional and Language
- Options, select the Language tab and click the Details... button in
- the square named "Text services and input Languages". Your
- environment probably provides similar means of changing the keyboard
- layout. Make sure you have a way to easily switch back and forth
- between keyboards if you are not used to this, entering commands
- using a Cyrillic character set is, as an example, not easily done in
- the Erlang shell.</p>
-
- <p>Now you are set up for some Unicode input and output. The
- simplest thing to do is of course to enter a string in the
- shell:</p>
-
- <pre>
+ <p>When (finally?) everything is in order with the locale settings, fonts.
+ and the terminal emulator, you have probably found a way to input
+ characters in the script you desire. For testing, the simplest way is to
+ add some keyboard mappings for other languages, usually done with some
+ applet in your desktop environment.</p>
+
+ <p>In a KDE environment, select <em>KDE Control Center (Personal
+ Settings)</em> > <em>Regional and Accessibility</em> > <em>Keyboard
+ Layout</em>.</p>
+
+ <p>On Windows XP, select <em>Control Panel</em> > <em>Regional and Language
+ Options</em>, select tab <em>Language</em>, and click button
+ <em>Details...</em> in the square named <em>Text Services and Input
+ Languages</em>.</p>
+
+ <p>Your environment
+ probably provides similar means of changing the keyboard layout. Ensure
+ that you have a way to switch back and forth between keyboards easily if
+ you are not used to this. For example, entering commands using a Cyrillic
+ character set is not easily done in the Erlang shell.</p>
+
+ <p>Now you are set up for some Unicode input and output. The simplest thing
+ to do is to enter a string in the shell:</p>
+
+ <pre>
$ <input>erl</input>
Erlang R16B (erts-5.10.1) [source] [async-threads:0] [hipe] [kernel-poll:false]
@@ -603,12 +685,13 @@ Eshell V5.10.1 (abort with ^G)
3> <input>io:format("~ts~n", [v(2)]).</input>
Юникод
ok
-4> </pre>
- <p>While strings can be input as Unicode characters, the language
- elements are still limited to the ISO-latin-1 character set. Only
- character constants and strings are allowed to be beyond that
- range:</p>
- <pre>
+4></pre>
+
+ <p>While strings can be input as Unicode characters, the language elements
+ are still limited to the ISO Latin-1 character set. Only character
+ constants and strings are allowed to be beyond that range:</p>
+
+ <pre>
$ <input>erl</input>
Erlang R16B (erts-5.10.1) [source] [async-threads:0] [hipe] [kernel-poll:false]
@@ -618,371 +701,398 @@ Eshell V5.10.1 (abort with ^G)
2> <input>Юникод.</input>
* 1: illegal character
2> </pre>
-</section>
-<section>
- <title>Unicode File Names</title>
- <marker id="unicode_file_names"/>
- <p>Most modern operating systems support Unicode file names in some
- way or another. There are several different ways to do this and
- Erlang by default treats the different approaches differently:</p>
- <taglist>
- <tag>Mandatory Unicode file naming</tag>
- <item>
- <p>Windows and, for most common uses, MacOS X enforces Unicode
- support for file names. All files created in the file system have
- names that can consistently be interpreted. In MacOS X, all file
- names are retrieved in UTF-8 encoding, while Windows has
- selected an approach where each system call handling file names
- has a special Unicode aware variant, giving much the same
- effect. There are no file names on these systems that are not
- Unicode file names, why the default behavior of the Erlang VM is
- to work in &quot;Unicode file name translation mode&quot;,
- meaning that a file name can be given as a Unicode list and that
- will be automatically translated to the proper name encoding for
- the underlying operating and file system.</p>
- <p>Doing i.e. a <c>file:list_dir/1</c> on one of these systems
- may return Unicode lists with code points beyond 255, depending
- on the content of the actual file system.</p>
- <p>As the feature is fairly new, you may still stumble upon non
- core applications that cannot handle being provided with file
- names containing characters with code points larger than 255, but
- the core Erlang system should have no problems with Unicode file
- names.</p>
- </item>
- <tag>Transparent file naming</tag>
- <item>
- <p>Most Unix operating systems have adopted a simpler approach,
- namely that Unicode file naming is not enforced, but by
- convention. Those systems usually use UTF-8 encoding for Unicode
- file names, but do not enforce it. On such a system, a file name
- containing characters having code points between 128 and 255 may
- be named either as plain ISO-latin-1 or using UTF-8 encoding. As
- no consistency is enforced, the Erlang VM can do no consistent
- translation of all file names.</p>
-
- <p>By default on such systems, Erlang starts in <c>utf8</c> file
- name mode if the terminal supports UTF-8, otherwise in
- <c>latin1</c> mode.</p>
-
- <p>In the <c>latin1</c> mode, file names are bytewise endcoded.
- This allows for list representation of all file names in
- the system, but, for example, a file named "Östersund.txt", will
- appear in <c>file:list_dir/1</c> as either "Östersund.txt" (if
- the file name was encoded in bytewise ISO-Latin-1 by the program
- creating the file, or more probably as
- <c>[195,150,115,116,101,114,115,117,110,100]</c>, which is a
- list containing UTF-8 bytes - not what you would want... If you
- on the other hand use Unicode file name translation on such a
- system, non-UTF-8 file names will simply be ignored by functions
- like <c>file:list_dir/1</c>. They can be retrieved with
- <c>file:list_dir_all/1</c>, but wrongly encoded file names will
- appear as &quot;raw file names&quot;.</p>
-
- </item>
- </taglist>
-
- <p>The Unicode file naming support was introduced with Erlang/OTP
- R14B01. A VM operating in Unicode file name translation mode can
- work with files having names in any language or character set (as
- long as it is supported by the underlying OS and file system). The
- Unicode character list is used to denote file or directory names and
- if the file system content is listed, you will also get
- Unicode lists as return value. The support lies in the Kernel and
- STDLIB modules, why most applications (that does not explicitly
- require the file names to be in the ISO-latin-1 range) will benefit
- from the Unicode support without change.</p>
-
- <p>On operating systems with mandatory Unicode file names, this
- means that you more easily conform to the file names of other (non
- Erlang) applications, and you can also process file names that, at
- least on Windows, were completely inaccessible (due to having names
- that could not be represented in ISO-latin-1). Also you will avoid
- creating incomprehensible file names on MacOS X as the vfs layer of
- the OS will accept all your file names as UTF-8 and will not rewrite
- them.</p>
-
- <p>For most systems, turning on Unicode file name translation is no
- problem even if it uses transparent file naming. Very few systems
- have mixed file name encodings. A consistent UTF-8 named system will
- work perfectly in Unicode file name mode. It was still however
- considered experimental in Erlang/OTP R14B01 and is still not the default on
- such systems. Unicode file name translation is turned on with the
- <c>+fnu</c> switch to the On Linux, a VM started without explicitly
- stating the file name translation mode will default to <c>latin1</c>
- as the native file name encoding. On Windows and MacOS X, the
- default behavior is that of Unicode file name translation, why the
- <c>file:native_name_encoding/0</c> by default returns <c>utf8</c> on
- those systems (the fact that Windows actually does not use UTF-8 on
- the file system level can safely be ignored by the Erlang
- programmer). The default behavior can, as stated before, be
- changed using the <c>+fnu</c> or <c>+fnl</c> options to the VM, see
- the <seealso marker="erts:erl"><c>erl</c></seealso> program. If the
- VM is started in Unicode file name translation mode,
- <c>file:native_name_encoding/0</c> will return the atom
- <c>utf8</c>. The <c>+fnu</c> switch can be followed by <c>w</c>,
- <c>i</c> or <c>e</c>, to control how wrongly encoded file names are
- to be reported. <c>w</c> means that a warning is sent to the
- <c>error_logger</c> whenever a wrongly encoded file name is
- "skipped" in directory listings, <c>i</c> means that those wrongly
- encoded file names are silently ignored and <c>e</c> means that the
- API function will return an error whenever a wrongly encoded file
- (or directory) name is encountered. <c>w</c> is the default. Note
- that <c>file:read_link/1</c> will always return an error if the link
- points to an invalid file name.</p>
-
- <p>In Unicode file name mode, file names given to the BIF
- <c>open_port/2</c> with the option <c>{spawn_executable,...}</c> are
- also interpreted as Unicode. So is the parameter list given in the
- <c>args</c> option available when using <c>spawn_executable</c>. The
- UTF-8 translation of arguments can be avoided using binaries, see
- the discussion about raw file names below.</p>
-
- <p>It is worth noting that the file <c>encoding</c> options given
- when opening a file has nothing to do with the file <em>name</em>
- encoding convention. You can very well open files containing data
- encoded in UTF-8 but having file names in bytewise (<c>latin1</c>) encoding
- or vice versa.</p>
-
- <note><p>Erlang drivers and NIF shared objects still can not be
- named with names containing code points beyond 127. This is a known
- limitation to be removed in a future release. Erlang modules however
- can, but it is definitely not a good idea and is still considered
- experimental.</p></note>
-
-<section>
- <title>Notes About Raw File Names</title>
- <marker id="notes-about-raw-filenames"/>
- <p>Raw file names were introduced together with Unicode file name
- support in erts-5.8.2 (Erlang/OTP R14B01). The reason &quot;raw file
- names&quot; was introduced in the system was to be able to
- consistently represent file names given in different encodings on
- the same system. Having the VM automatically translate a file name
- that is not in UTF-8 to a list of Unicode characters might seem
- practical, but this would open up for both duplicate file names and
- other inconsistent behavior. Consider a directory containing a file
- named &quot;björn&quot; in ISO-latin-1, while the Erlang VM is
- operating in Unicode file name mode (and therefore expecting UTF-8
- file naming). The ISO-latin-1 name is not valid UTF-8 and one could
- be tempted to think that automatic conversion in for example
- <c>file:list_dir/1</c> is a good idea. But what would happen if we
- later tried to open the file and have the name as a Unicode list
- (magically converted from the ISO-latin-1 file name)? The VM will
- convert the file name given to UTF-8, as this is the encoding
- expected. Effectively this means trying to open the file named
- &lt;&lt;&quot;björn&quot;/utf8&gt;&gt;. This file does not exist,
- and even if it existed it would not be the same file as the one that
- was listed. We could even create two files named &quot;björn&quot;,
- one named in the UTF-8 encoding and one not. If
- <c>file:list_dir/1</c> would automatically convert the ISO-latin-1
- file name to a list, we would get two identical file names as the
- result. To avoid this, we need to differentiate between file names
- being properly encoded according to the Unicode file naming
- convention (i.e. UTF-8) and file names being invalid under the
- encoding. By the common <c>file:list_dir/1</c> function, the wrongly
- encoded file names are simply ignored in Unicode file name
- translation mode, but by the <c>file:list_dir_all/1</c> function,
- the file names with invalid encoding are returned as &quot;raw&quot;
- file names, i.e. as binaries.</p>
-
- <p>The Erlang <c>file</c> module accepts raw file names as
- input. <c>open_port({spawn_executable, ...} ...)</c> also accepts
- them. As mentioned earlier, the arguments given in the option list
- to <c>open_port({spawn_executable, ...} ...)</c> undergo the same
- conversion as the file names, meaning that the executable will be
- provided with arguments in UTF-8 as well. This translation is
- avoided consistently with how the file names are treated, by giving
- the argument as a binary.</p>
-
- <p>To force Unicode file name translation mode on systems where this
- is not the default was considered experimental in Erlang/OTP R14B01 due to
- the fact that the initial implementation did not ignore wrongly
- encoded file names, so that raw file names could spread unexpectedly
- throughout the system. Beginning with Erlang/OTP R16B, the wrongly encoded file
- names are only retrieved by special functions
- (e.g. <c>file:list_dir_all/1</c>), so the impact on existing code is
- much lower, why it is now supported. Unicode file name translation
- is expected to be default in future releases.</p>
-
- <p>Even if you are operating without Unicode file naming translation
- automatically done by the VM, you can access and create files with
- names in UTF-8 encoding by using raw file names encoded as
- UTF-8. Enforcing the UTF-8 encoding regardless of the mode the
- Erlang VM is started in might, in some circumstances be a good idea,
- as the convention of using UTF-8 file names is spreading.</p>
-</section>
-<section>
- <title>Notes About MacOS X</title>
- <p>MacOS X's vfs layer enforces UTF-8 file names in a quite
- aggressive way. Older versions did this by simply refusing to create
- non UTF-8 conforming file names, while newer versions replace
- offending bytes with the sequence &quot;%HH&quot;, where HH is the
- original character in hexadecimal notation. As Unicode translation
- is enabled by default on MacOS X, the only way to come up against
- this is to either start the VM with the <c>+fnl</c> flag or to use a
- raw file name in bytewise (<c>latin1</c>) encoding. If using a raw
- filename, with a bytewise encoding containing characters between 127
- and 255, to create a file, the file can not be opened using the same
- name as the one used to create it. There is no remedy for this
- behaviour, other than keeping the file names in the right
- encoding.</p>
-
- <p>MacOS X also reorganizes the names of files so that the
- representation of accents etc is using the "combining characters",
- i.e. the character <c>ö</c> is represented as the code points
- [111,776], where 111 is the character <c>o</c> and 776 is the
- special accent character "combining diaeresis". This way of
- normalizing Unicode is otherwise very seldom used and Erlang
- normalizes those file names in the opposite way upon retrieval, so
- that file names using combining accents are not passed up to the
- Erlang application. In Erlang the file name &quot;björn&quot; is
- retrieved as [98,106,246,114,110], not as [98,106,117,776,114,110],
- even though the file system might think differently. The
- normalization into combining accents are redone when actually
- accessing files, so this can usually be ignored by the Erlang
- programmer.</p>
-</section>
-</section>
-<section>
- <title>Unicode in Environment and Parameters</title>
- <marker id="unicode_in_environment_and_parameters"/>
- <p>Environment variables and their interpretation is handled much in
- the same way as file names. If Unicode file names are enabled,
- environment variables as well as parameters to the Erlang VM are
- expected to be in Unicode.</p>
- <p>If Unicode file names are enabled, the calls to
- <seealso marker="kernel:os#getenv/0"><c>os:getenv/0</c></seealso>,
- <seealso marker="kernel:os#getenv/1"><c>os:getenv/1</c></seealso>,
- <seealso marker="kernel:os#putenv/2"><c>os:putenv/2</c></seealso> and
- <seealso marker="kernel:os#unsetenv/1"><c>os:unsetenv/1</c></seealso>
- will handle Unicode strings. On Unix-like platforms, the built-in
- functions will translate environment variables in UTF-8 to/from
- Unicode strings, possibly with code points > 255. On Windows the
- Unicode versions of the environment system API will be used, also
- allowing for code points > 255.</p>
- <p>On Unix-like operating systems, parameters are expected to be
- UTF-8 without translation if Unicode file names are enabled.</p>
-</section>
-<section>
- <title>Unicode-aware Modules</title>
- <p>Most of the modules in Erlang/OTP are of course Unicode-unaware
- in the sense that they have no notion of Unicode and really should
- not have. Typically they handle non-textual or byte-oriented data
- (like <c>gen_tcp</c> etc).</p>
- <p>Modules that actually handle textual data (like <c>io_lib</c>,
- <c>string</c> etc) are sometimes subject to conversion or extension
- to be able to handle Unicode characters.</p>
- <p>Fortunately, most textual data has been stored in lists and range
- checking has been sparse, why modules like <c>string</c> works well
- for Unicode lists with little need for conversion or extension.</p>
- <p>Some modules are however changed to be explicitly
- Unicode-aware. These modules include:</p>
- <taglist>
- <tag><c>unicode</c></tag>
- <item>
- <p>The module <seealso marker="stdlib:unicode"><c>unicode</c></seealso>
- is obviously Unicode-aware. It contains functions for conversion
- between different Unicode formats as well as some utilities for
- identifying byte order marks. Few programs handling Unicode data
- will survive without this module.</p>
- </item>
- <tag><c>io</c></tag>
- <item>
- <p>The <seealso marker="stdlib:io"><c>io</c></seealso> module has been
- extended along with the actual I/O-protocol to handle Unicode
- data. This means that several functions require binaries to be
- in UTF-8 and there are modifiers to formatting control sequences
- to allow for outputting of Unicode strings.</p>
- </item>
- <tag><c>file</c>, <c>group</c>, <c>user</c></tag>
- <item>
- <p>I/O-servers throughout the system are able to handle
- Unicode data and has options for converting data upon actual
- output or input to/from the device. As shown earlier, the
- <seealso marker="stdlib:shell"><c>shell</c></seealso> has support for
- Unicode terminals and the <seealso
- marker="kernel:file"><c>file</c></seealso> module allows for
- translation to and from various Unicode formats on disk.</p>
- <p>The actual reading and writing of files with Unicode data is
- however not best done with the <c>file</c> module as its
- interface is byte oriented. A file opened with a Unicode
- encoding (like UTF-8), is then best read or written using the
- <seealso marker="stdlib:io"><c>io</c></seealso> module.</p>
- </item>
- <tag><c>re</c></tag>
- <item>
- <p>The <seealso marker="stdlib:re"><c>re</c></seealso> module allows
- for matching Unicode strings as a special option. As the library
- is actually centered on matching in binaries, the Unicode
- support is UTF-8-centered.</p>
- </item>
- <tag><c>wx</c></tag>
- <item>
- <p>The <seealso marker="wx:wx"><c>wx</c></seealso> graphical library
- has extensive support for Unicode text</p>
- </item>
- </taglist>
- <p>The module <seealso
- marker="stdlib:string"><c>string</c></seealso> works perfectly for
- Unicode strings as well as for ISO-latin-1 strings with the
- exception of the language-dependent <seealso
- marker="stdlib:string#to_upper/1"><c>to_upper</c></seealso> and
- <seealso marker="stdlib:string#to_lower/1"><c>to_lower</c></seealso>
- functions, which are only correct for the ISO-latin-1 character
- set. Actually they can never function correctly for Unicode
- characters in their current form, as there are language and locale
- issues as well as multi-character mappings to consider when
- converting text between cases. Converting case in an international
- environment is a big subject not yet addressed in OTP.</p>
-</section>
-<section>
- <title>Unicode Data in Files</title>
- <p>The fact that Erlang as such can handle Unicode data in many forms
- does not automatically mean that the content of any file can be
- Unicode text. The external entities such as ports or I/O-servers are
- not generally Unicode capable.</p>
- <p>Ports are always byte oriented, so before sending data that you
- are not sure is bytewise encoded to a port, make sure to encode it
- in a proper Unicode encoding. Sometimes this will mean that only
- part of the data shall be encoded as e.g. UTF-8, some parts may be
- binary data (like a length indicator) or something else that shall
- not undergo character encoding, so no automatic translation is
- present.</p>
- <p>I/O-servers behave a little differently. The I/O-servers connected
- to terminals (or stdout) can usually cope with Unicode data
- regardless of the <c>encoding</c> option. This is convenient when
- one expects a modern environment but do not want to crash when
- writing to a archaic terminal or pipe. Files on the other hand are
- more picky. A file can have an encoding option which makes it
- generally usable by the io-module (e.g. <c>{encoding,utf8}</c>), but
- is by default opened as a byte oriented file. The <seealso
- marker="kernel:file"><c>file</c></seealso> module is byte oriented, why only
- ISO-Latin-1 characters can be written using that module. The
- <seealso marker="stdlib:io"><c>io</c></seealso> module is the one to use if
- Unicode data is to be output to a file with other <c>encoding</c>
- than <c>latin1</c> (a.k.a. bytewise encoding). It is slightly
- confusing that a file opened with
- e.g. <c>file:open(Name,[read,{encoding,utf8}])</c>, cannot be
- properly read using <c>file:read(File,N)</c> but you have to use the
- <c>io</c> module to retrieve the Unicode data from it. The reason is
- that <c>file:read</c> and <c>file:write</c> (and friends) are purely
- byte oriented, and should so be, as that is the way to access
- files other than text files - byte by byte. Just as with ports, you
- can of course write encoded data into a file by "manually" converting
- the data to the encoding of choice (using the <seealso
- marker="stdlib:unicode"><c>unicode</c></seealso> module or the bit syntax)
- and then output it on a bytewise encoded (<c>latin1</c>) file.</p>
- <p>The rule of thumb is that the <seealso
- marker="kernel:file"><c>file</c></seealso> module should be used for files
- opened for bytewise access (<c>{encoding,latin1}</c>) and the
- <seealso marker="stdlib:io"><c>io</c></seealso> module should be used when
- accessing files with any other encoding
- (e.g. <c>{encoding,uf8}</c>).</p>
-
- <p>Functions reading Erlang syntax from files generally recognize
- the <c>coding:</c> comment and can therefore handle Unicode data on
- input. When writing Erlang Terms to a file, you should insert
- such comments when applicable:</p>
- <pre>
+ </section>
+
+ <section>
+ <title>Unicode Filenames</title>
+ <marker id="unicode_file_names"/>
+ <p>Most modern operating systems support Unicode filenames in some way.
+ There are many different ways to do this and Erlang by default treats the
+ different approaches differently:</p>
+
+ <taglist>
+ <tag>Mandatory Unicode file naming</tag>
+ <item>
+ <p>Windows and, for most common uses, MacOS X enforce Unicode support
+ for filenames. All files created in the file system have names that
+ can consistently be interpreted. In MacOS X, all filenames are
+ retrieved in UTF-8 encoding. In Windows, each system call handling
+ filenames has a special Unicode-aware variant, giving much the same
+ effect. There are no filenames on these systems that are not Unicode
+ filenames. So, the default behavior of the Erlang VM is to work in
+ &quot;Unicode filename translation mode&quot;. This means that a
+ filename can be specified as a Unicode list, which is automatically
+ translated to the proper name encoding for the underlying operating
+ system and file system.</p>
+ <p>Doing, for example, a
+ <seealso marker="kernel:file#list_dir/1"><c>file:list_dir/1</c></seealso>
+ on one of these systems can return Unicode lists with code points
+ &gt; 255, depending on the content of the file system.</p>
+ </item>
+ <tag>Transparent file naming</tag>
+ <item>
+ <p>Most Unix operating systems have adopted a simpler approach, namely
+ that Unicode file naming is not enforced, but by convention. Those
+ systems usually use UTF-8 encoding for Unicode filenames, but do not
+ enforce it. On such a system, a filename containing characters with
+ code points from 128 through 255 can be named as plain ISO Latin-1 or
+ use UTF-8 encoding. As no consistency is enforced, the Erlang VM
+ cannot do consistent translation of all filenames.</p>
+ <p>By default on such systems, Erlang starts in <c>utf8</c> filename
+ mode if the terminal supports UTF-8, otherwise in <c>latin1</c>
+ mode.</p>
+ <p>In <c>latin1</c> mode, filenames are bytewise encoded. This allows
+ for list representation of all filenames in the system. However, a
+ a file named "Östersund.txt", appears in
+ <seealso marker="kernel:file#list_dir/1"><c>file:list_dir/1</c></seealso>
+ either as "Östersund.txt" (if the filename was encoded in bytewise
+ ISO Latin-1 by the program creating the file) or more probably as
+ <c>[195,150,115,116,101,114,115,117,110,100]</c>, which is a list
+ containing UTF-8 bytes (not what you want). If you use Unicode
+ filename translation on such a system, non-UTF-8 filenames are
+ ignored by functions like <c>file:list_dir/1</c>. They can be
+ retrieved with function
+ <seealso marker="kernel:file#list_dir_all/1"><c>file:list_dir_all/1</c></seealso>,
+ but wrongly encoded filenames appear as &quot;raw filenames&quot;.
+ </p>
+ </item>
+ </taglist>
+
+ <p>The Unicode file naming support was introduced in Erlang/OTP
+ R14B01. A VM operating in Unicode filename translation mode can
+ work with files having names in any language or character set (as
+ long as it is supported by the underlying operating system and
+ file system). The Unicode character list is used to denote
+ filenames or directory names. If the file system content is
+ listed, you also get Unicode lists as return value. The support
+ lies in the Kernel and STDLIB modules, which is why
+ most applications (that does not explicitly require the filenames
+ to be in the ISO Latin-1 range) benefit from the Unicode support
+ without change.</p>
+
+ <p>On operating systems with mandatory Unicode filenames, this means that
+ you more easily conform to the filenames of other (non-Erlang)
+ applications. You can also process filenames that, at least on Windows,
+ were inaccessible (because of having names that could not be represented
+ in ISO Latin-1). Also, you avoid creating incomprehensible filenames
+ on MacOS X, as the <c>vfs</c> layer of the operating system accepts all
+ your filenames as UTF-8 does not rewrite them.</p>
+
+ <p>For most systems, turning on Unicode filename translation is no problem
+ even if it uses transparent file naming. Very few systems have mixed
+ filename encodings. A consistent UTF-8 named system works perfectly in
+ Unicode filename mode. It was still, however, considered experimental in
+ Erlang/OTP R14B01 and is still not the default on such systems.</p>
+
+ <p>Unicode filename translation is turned on with switch <c>+fnu</c>. On
+ Linux, a VM started without explicitly stating the filename translation
+ mode defaults to <c>latin1</c> as the native filename encoding. On
+ Windows and MacOS X, the default behavior is that of Unicode filename
+ translation. Therefore
+ <seealso marker="kernel:file#native_name_encoding/0"><c>file:native_name_encoding/0</c></seealso>
+ by default returns <c>utf8</c> on those systems (Windows does not use
+ UTF-8 on the file system level, but this can safely be ignored by the
+ Erlang programmer). The default behavior can, as stated earlier, be
+ changed using option <c>+fnu</c> or <c>+fnl</c> to the VM, see the
+ <seealso marker="erts:erl"><c>erl</c></seealso> program. If the VM is
+ started in Unicode filename translation mode,
+ <c>file:native_name_encoding/0</c> returns atom <c>utf8</c>. Switch
+ <c>+fnu</c> can be followed by <c>w</c>, <c>i</c>, or <c>e</c> to control
+ how wrongly encoded filenames are to be reported.</p>
+
+ <list type="bulleted">
+ <item>
+ <p><c>w</c> means that a warning is sent to the <c>error_logger</c>
+ whenever a wrongly encoded filename is "skipped" in directory
+ listings. <c>w</c> is the default.</p>
+ </item>
+ <item>
+ <p><c>i</c> means that wrongly encoded filenames are silently ignored.
+ </p>
+ </item>
+ <item>
+ <p><c>e</c> means that the API function returns an error whenever a
+ wrongly encoded filename (or directory name) is encountered.</p>
+ </item>
+ </list>
+
+ <p>Notice that
+ <seealso marker="kernel:file#read_link/1"><c>file:read_link/1</c></seealso>
+ always returns an error if the link points to an invalid filename.</p>
+
+ <p>In Unicode filename mode, filenames given to BIF <c>open_port/2</c> with
+ option <c>{spawn_executable,...}</c> are also interpreted as Unicode. So
+ is the parameter list specified in option <c>args</c> available when
+ using <c>spawn_executable</c>. The UTF-8 translation of arguments can be
+ avoided using binaries, see section
+ <seealso marker="#notes-about-raw-filenames">Notes About Raw Filenames</seealso>.
+ </p>
+
+ <p>Notice that the file encoding options specified when opening a file has
+ nothing to do with the filename encoding convention. You can very well
+ open files containing data encoded in UTF-8, but having filenames in
+ bytewise (<c>latin1</c>) encoding or conversely.</p>
+
+ <note><p>Erlang drivers and NIF-shared objects still cannot be named with
+ names containing code points &gt; 127. This limitation will be removed in
+ a future release. However, Erlang modules can, but it is definitely not a
+ good idea and is still considered experimental.</p>
+ </note>
+
+ <section>
+ <title>Notes About Raw Filenames</title>
+ <marker id="notes-about-raw-filenames"/>
+ <p>Raw filenames were introduced together with Unicode filename support
+ in ERTS 5.8.2 (Erlang/OTP R14B01). The reason &quot;raw
+ filenames&quot; were introduced in the system was
+ to be able to represent
+ filenames, specified in different encodings on the same system,
+ consistently. It can seem practical to have the VM automatically
+ translate a filename that is not in UTF-8 to a list of Unicode
+ characters, but this would open up for both duplicate filenames and
+ other inconsistent behavior.</p>
+
+ <p>Consider a directory containing a file named &quot;björn&quot; in ISO
+ Latin-1, while the Erlang VM is operating in Unicode filename mode (and
+ therefore expects UTF-8 file naming). The ISO Latin-1 name is not valid
+ UTF-8 and one can be tempted to think that automatic conversion in, for
+ example,
+ <seealso marker="kernel:file#list_dir/1"><c>file:list_dir/1</c></seealso>
+ is a good idea. But what would happen if we later tried to open the file
+ and have the name as a Unicode list (magically converted from the ISO
+ Latin-1 filename)? The VM converts the filename to UTF-8, as this is
+ the encoding expected. Effectively this means trying to open the file
+ named &lt;&lt;&quot;björn&quot;/utf8&gt;&gt;. This file does not exist,
+ and even if it existed it would not be the same file as the one that was
+ listed. We could even create two files named &quot;björn&quot;, one
+ named in UTF-8 encoding and one not. If <c>file:list_dir/1</c> would
+ automatically convert the ISO Latin-1 filename to a list, we would get
+ two identical filenames as the result. To avoid this, we must
+ differentiate between filenames that are properly encoded according to
+ the Unicode file naming convention (that is, UTF-8) and filenames that
+ are invalid under the encoding. By the common function
+ <c>file:list_dir/1</c>, the wrongly encoded filenames are ignored in
+ Unicode filename translation mode, but by function
+ <seealso marker="kernel:file#list_dir_all/1"><c>file:list_dir_all/1</c></seealso>
+ the filenames with invalid encoding are returned as &quot;raw&quot;
+ filenames, that is, as binaries.</p>
+
+ <p>The <c>file</c> module accepts raw filenames as input.
+ <c>open_port({spawn_executable, ...} ...)</c> also accepts them. As
+ mentioned earlier, the arguments specified in the option list to
+ <c>open_port({spawn_executable, ...} ...)</c> undergo the same
+ conversion as the filenames, meaning that the executable is provided
+ with arguments in UTF-8 as well. This translation is avoided
+ consistently with how the filenames are treated, by giving the argument
+ as a binary.</p>
+
+ <p>To force Unicode filename translation mode on systems where this is not
+ the default was considered experimental in Erlang/OTP R14B01. This was
+ because the initial implementation did not ignore wrongly encoded
+ filenames, so that raw filenames could spread unexpectedly throughout
+ the system. As from Erlang/OTP R16B, the wrongly encoded
+ filenames are only retrieved by special functions (such as
+ <c>file:list_dir_all/1</c>). Since the impact on existing code is
+ therefore much lower it is now supported.
+ Unicode filename translation is
+ expected to be default in future releases.</p>
+
+ <p>Even if you are operating without Unicode file naming translation
+ automatically done by the VM, you can access and create files with
+ names in UTF-8 encoding by using raw filenames encoded as UTF-8.
+ Enforcing the UTF-8 encoding regardless of the mode the Erlang VM is
+ started in can in some circumstances be a good idea, as the convention
+ of using UTF-8 filenames is spreading.</p>
+ </section>
+
+ <section>
+ <title>Notes About MacOS X</title>
+ <p>The <c>vfs</c> layer of MacOS X enforces UTF-8 filenames in an
+ aggressive way. Older versions did this by refusing to create non-UTF-8
+ conforming filenames, while newer versions replace offending bytes with
+ the sequence &quot;%HH&quot;, where HH is the original character in
+ hexadecimal notation. As Unicode translation is enabled by default on
+ MacOS X, the only way to come up against this is to either start the VM
+ with flag <c>+fnl</c> or to use a raw filename in bytewise
+ (<c>latin1</c>) encoding. If using a raw filename, with a bytewise
+ encoding containing characters from 127 through 255, to create a file,
+ the file cannot be opened using the same name as the one used to create
+ it. There is no remedy for this behavior, except keeping the filenames
+ in the correct encoding.</p>
+
+ <p>MacOS X reorganizes the filenames so that the representation of
+ accents, and so on, uses the "combining characters". For example,
+ character <c>ö</c> is represented as code points <c>[111,776]</c>,
+ where <c>111</c> is character <c>o</c> and <c>776</c> is the special
+ accent character "Combining Diaeresis". This way of normalizing Unicode
+ is otherwise very seldom used. Erlang normalizes those filenames in the
+ opposite way upon retrieval, so that filenames using combining accents
+ are not passed up to the Erlang application. In Erlang, filename
+ &quot;björn&quot; is retrieved as <c>[98,106,246,114,110]</c>, not as
+ <c>[98,106,117,776,114,110]</c>, although the file system can think
+ differently. The normalization into combining accents is redone when
+ accessing files, so this can usually be ignored by the Erlang
+ programmer.</p>
+ </section>
+ </section>
+
+ <section>
+ <title>Unicode in Environment and Parameters</title>
+ <marker id="unicode_in_environment_and_parameters"/>
+ <p>Environment variables and their interpretation are handled much in the
+ same way as filenames. If Unicode filenames are enabled, environment
+ variables as well as parameters to the Erlang VM are expected to be in
+ Unicode.</p>
+
+ <p>If Unicode filenames are enabled, the calls to
+ <seealso marker="kernel:os#getenv/0"><c>os:getenv/0,1</c></seealso>,
+ <seealso marker="kernel:os#putenv/2"><c>os:putenv/2</c></seealso>, and
+ <seealso marker="kernel:os#unsetenv/1"><c>os:unsetenv/1</c></seealso>
+ handle Unicode strings. On Unix-like platforms, the built-in functions
+ translate environment variables in UTF-8 to/from Unicode strings, possibly
+ with code points &gt; 255. On Windows, the Unicode versions of the
+ environment system API are used, and code points &gt; 255 are allowed.</p>
+ <p>On Unix-like operating systems, parameters are expected to be UTF-8
+ without translation if Unicode filenames are enabled.</p>
+ </section>
+
+ <section>
+ <title>Unicode-Aware Modules</title>
+ <p>Most of the modules in Erlang/OTP are Unicode-unaware in the sense that
+ they have no notion of Unicode and should not have. Typically they handle
+ non-textual or byte-oriented data (such as <c>gen_tcp</c>).</p>
+
+ <p>Modules handling textual data (such as
+ <seealso marker="stdlib:io_lib"><c>io_lib</c></seealso> and
+ <seealso marker="stdlib:string"><c>string</c></seealso> are sometimes
+ subject to conversion or extension to be able to handle Unicode
+ characters.</p>
+
+ <p>Fortunately, most textual data has been stored in lists and range
+ checking has been sparse, so modules like <c>string</c> work well for
+ Unicode lists with little need for conversion or extension.</p>
+
+ <p>Some modules are, however, changed to be explicitly Unicode-aware. These
+ modules include:</p>
+
+ <taglist>
+ <tag><c>unicode</c></tag>
+ <item>
+ <p>The <seealso marker="stdlib:unicode"><c>unicode</c></seealso>
+ module is clearly Unicode-aware. It contains functions for conversion
+ between different Unicode formats and some utilities for identifying
+ byte order marks. Few programs handling Unicode data survive without
+ this module.</p>
+ </item>
+ <tag><c>io</c></tag>
+ <item>
+ <p>The <seealso marker="stdlib:io"><c>io</c></seealso> module has been
+ extended along with the actual I/O protocol to handle Unicode data.
+ This means that many functions require binaries to be in UTF-8, and
+ there are modifiers to format control sequences to allow for output
+ of Unicode strings.</p>
+ </item>
+ <tag><c>file</c>, <c>group</c>, <c>user</c></tag>
+ <item>
+ <p>I/O-servers throughout the system can handle Unicode data and have
+ options for converting data upon output or input to/from the device.
+ As shown earlier, the
+ <seealso marker="stdlib:shell"><c>shell</c></seealso> module has
+ support for Unicode terminals and the
+ <seealso marker="kernel:file"><c>file</c></seealso> module
+ allows for translation to and from various Unicode formats on
+ disk.</p>
+ <p>Reading and writing of files with Unicode data is, however, not best
+ done with the <c>file</c> module, as its interface is
+ byte-oriented. A file opened with a Unicode encoding (like UTF-8) is
+ best read or written using the
+ <seealso marker="stdlib:io"><c>io</c></seealso> module.</p>
+ </item>
+ <tag><c>re</c></tag>
+ <item>
+ <p>The <seealso marker="stdlib:re"><c>re</c></seealso> module allows
+ for matching Unicode strings as a special option. As the library is
+ centered on matching in binaries, the Unicode support is
+ UTF-8-centered.</p>
+ </item>
+ <tag><c>wx</c></tag>
+ <item>
+ <p>The graphical library <seealso marker="wx:wx"><c>wx</c></seealso>
+ has extensive support for Unicode text.</p></item>
+ </taglist>
+
+ <p>The <seealso marker="stdlib:string"><c>string</c></seealso> module works
+ perfectly for Unicode strings and ISO Latin-1 strings, except the
+ language-dependent functions
+ <seealso marker="stdlib:string#to_upper/1"><c>string:to_upper/1</c></seealso>
+ and
+ <seealso marker="stdlib:string#to_lower/1"><c>string:to_lower/1</c></seealso>,
+ which are only correct for the ISO Latin-1 character set. These two
+ functions can never function correctly for Unicode characters in their
+ current form, as there are language and locale issues as well as
+ multi-character mappings to consider when converting text between cases.
+ Converting case in an international environment is a large subject not
+ yet addressed in OTP.</p>
+ </section>
+
+ <section>
+ <title>Unicode Data in Files</title>
+ <p>Although Erlang can handle Unicode data in many forms does not
+ automatically mean that the content of any file can be Unicode text. The
+ external entities, such as ports and I/O servers, are not generally
+ Unicode capable.</p>
+
+ <p>Ports are always byte-oriented, so before sending data that you are not
+ sure is bytewise-encoded to a port, ensure to encode it in a proper
+ Unicode encoding. Sometimes this means that only part of the data must
+ be encoded as, for example, UTF-8. Some parts can be binary data (like a
+ length indicator) or something else that must not undergo character
+ encoding, so no automatic translation is present.</p>
+
+ <p>I/O servers behave a little differently. The I/O servers connected to
+ terminals (or <c>stdout</c>) can usually cope with Unicode data
+ regardless of the encoding option. This is convenient when one expects
+ a modern environment but do not want to crash when writing to an archaic
+ terminal or pipe.</p>
+
+ <p>A file can have an encoding option that makes it generally usable by the
+ <seealso marker="stdlib:io"><c>io</c></seealso> module (for example
+ <c>{encoding,utf8}</c>), but is by default opened as a byte-oriented file.
+ The <seealso marker="kernel:file"><c>file</c></seealso> module is
+ byte-oriented, so only ISO Latin-1 characters can be written using that
+ module. Use the <c>io</c> module if Unicode data is to be output to a
+ file with other <c>encoding</c> than <c>latin1</c> (bytewise encoding).
+ It is slightly confusing that a file opened with, for example,
+ <c>file:open(Name,[read,{encoding,utf8}])</c> cannot be properly read
+ using <c>file:read(File,N)</c>, but using the <c>io</c> module to retrieve
+ the Unicode data from it. The reason is that <c>file:read</c> and
+ <c>file:write</c> (and friends) are purely byte-oriented, and should be,
+ as that is the way to access files other than text files, byte by byte.
+ As with ports, you can write encoded data into a file by "manually"
+ converting the data to the encoding of choice (using the
+ <seealso marker="stdlib:unicode"><c>unicode</c></seealso> module or the
+ bit syntax) and then output it on a bytewise (<c>latin1</c>) encoded
+ file.</p>
+
+ <p>Recommendations:</p>
+
+ <list type="bulleted">
+ <item><p>Use the
+ <seealso marker="kernel:file"><c>file</c></seealso> module for
+ files opened for bytewise access (<c>{encoding,latin1}</c>).</p>
+ </item>
+ <item><p>Use the <seealso marker="stdlib:io"><c>io</c></seealso> module
+ when accessing files with any other encoding (for example
+ <c>{encoding,uf8}</c>).</p>
+ </item>
+ </list>
+
+ <p>Functions reading Erlang syntax from files recognize the <c>coding:</c>
+ comment and can therefore handle Unicode data on input. When writing
+ Erlang terms to a file, you are advised to insert such comments when
+ applicable:</p>
+
+ <pre>
$ <input>erl +fna +pc unicode</input>
Erlang R16B (erts-5.10.1) [source] [async-threads:0] [hipe] [kernel-poll:false]
@@ -990,202 +1100,224 @@ Eshell V5.10.1 (abort with ^G)
1> <input>file:write_file("test.term",&lt;&lt;"%% coding: utf-8\n[{\"Юникод\",4711}].\n"/utf8&gt;&gt;).</input>
ok
2> <input>file:consult("test.term").</input>
-{ok,[[{"Юникод",4711}]]}
- </pre>
-</section>
-<section>
- <title>Summary of Options</title>
- <marker id="unicode_options_summary"/>
- <p>The Unicode support is controlled by both command line switches,
- some standard environment variables and the version of OTP you are
- using. Most options affect mainly the way Unicode data is displayed,
- not the actual functionality of the API's in the standard
- libraries. This means that Erlang programs usually do not
- need to concern themselves with these options, they are more for the
- development environment. An Erlang program can be written so that it
- works well regardless of the type of system or the Unicode options
- that are in effect.</p>
-
- <p>Here follows a summary of the settings affecting Unicode:</p>
- <taglist>
- <tag>The <c>LANG</c> and <c>LC_CTYPE</c> environment variables</tag>
- <item>
- <p>The language setting in the OS mainly affects the shell. The
- terminal (i.e. the group leader) will operate with <c>{encoding,
- unicode}</c> only if the environment tells it that UTF-8 is
- allowed. This setting should correspond to the actual terminal
- you are using.</p>
- <p>The environment can also affect file name interpretation, if
- Erlang is started with the <c>+fna</c> flag (which is default from
- Erlang/OTP 17.0).</p>
- <p>You can check the setting of this by calling
- <c>io:getopts()</c>, which will give you an option list
- containing <c>{encoding,unicode}</c> or
- <c>{encoding,latin1}</c>.</p>
- </item>
- <tag>The <c>+pc </c>{<c>unicode</c>|<c>latin1</c>} flag to
- <seealso marker="erts:erl"><c>erl(1)</c></seealso></tag>
- <item>
- <p>This flag affects what is interpreted as string data when
- doing heuristic string detection in the shell and in
- <c>io</c>/<c>io_lib:format</c> with the <c>"~tp"</c> and
- <c>~tP</c> formatting instructions, as described above.</p>
- <p>You can check this option by calling io:printable_range/0,
- which will return <c>unicode</c> or <c>latin1</c>. To be
- compatible with future (expected) extensions to the settings,
- one should rather use <c>io_lib:printable_list/1</c> to check if
- a list is printable according to the setting. That function will
- take into account new possible settings returned from
- <c>io:printable_range/0</c>.</p>
- </item>
- <tag>The <c>+fn</c>{<c>l</c>|<c>a</c>|<c>u</c>}
- [{<c>w</c>|<c>i</c>|<c>e</c>}]
- flag to <seealso marker="erts:erl"><c>erl(1)</c></seealso></tag>
- <item>
- <p>This flag affects how the file names are to be interpreted. On
- operating systems with transparent file naming, this has to be
- specified to allow for file naming in Unicode characters (and
- for correct interpretation of file names containing characters
- &gt; 255.</p>
- <p><c>+fnl</c> means bytewise interpretation of file names, which
- was the usual way to represent ISO-Latin-1 file names before
- UTF-8 file naming got widespread.</p>
- <p><c>+fnu</c> means that file names are encoded in UTF-8, which
- is nowadays the common scheme (although not enforced).</p>
- <p><c>+fna</c> means that you automatically select between
- <c>+fnl</c> and <c>+fnu</c>, based on the <c>LANG</c> and
- <c>LC_CTYPE</c> environment variables. This is optimistic
- heuristics indeed, nothing enforces a user to have a terminal
- with the same encoding as the file system, but usually, this is
- the case. This is the default on all Unix-like operating
- systems except MacOS X.</p>
-
- <p>The file name translation mode can be read with the
- <c>file:native_name_encoding/0</c> function, which returns
- <c>latin1</c> (meaning bytewise encoding) or <c>utf8</c>.</p>
- </item>
- <tag><seealso marker="stdlib:epp#default_encoding/0">
- <c>epp:default_encoding/0</c></seealso></tag>
- <item>
- <p>This function returns the default encoding for Erlang source
- files (if no encoding comment is present) in the currently
- running release. In Erlang/OTP R16B <c>latin1</c> was returned (meaning
- bytewise encoding). In Erlang/OTP 17.0 and forward it returns
- <c>utf8</c>.</p>
- <p>The encoding of each file can be specified using comments as
- described in
- <seealso marker="stdlib:epp#encoding"><c>epp(3)</c></seealso>.</p>
- </item>
- <tag><seealso marker="stdlib:io#setopts/1"><c>io:setopts/</c>{<c>1</c>,<c>2</c>}</seealso> and the <c>-oldshell</c>/<c>-noshell</c> flags.</tag>
- <item>
- <p>When Erlang is started with <c>-oldshell</c> or
- <c>-noshell</c>, the I/O-server for <c>standard_io</c> is default
- set to bytewise encoding, while an interactive shell defaults to
- what the environment variables says.</p>
- <p>With the <c>io:setopts/2</c> function you can set the
- encoding of a file or other I/O-server. This can also be set when
- opening a file. Setting the terminal (or other
- <c>standard_io</c> server) unconditionally to the option
- <c>{encoding,utf8}</c> will for example make UTF-8 encoded characters
- being written to the device regardless of how Erlang was started or
- the users environment.</p>
- <p>Opening files with <c>encoding</c> option is convenient when
- writing or reading text files in a known encoding.</p>
- <p>You can retrieve the <c>encoding</c> setting for an I/O-server
- using <seealso
- marker="stdlib:io#getopts/1"><c>io:getopts()</c></seealso>.</p>
- </item>
- </taglist>
-</section>
-<section>
- <title>Recipes</title>
- <p>When starting with Unicode, one often stumbles over some common
- issues. I try to outline some methods of dealing with Unicode data
- in this section.</p>
+{ok,[[{"Юникод",4711}]]}</pre>
+ </section>
+
+ <section>
+ <title>Summary of Options</title>
+ <marker id="unicode_options_summary"/>
+ <p>The Unicode support is controlled by both command-line switches, some
+ standard environment variables, and the OTP version you are using. Most
+ options affect mainly how Unicode data is displayed, not the
+ functionality of the APIs in the standard libraries. This means that
+ Erlang programs usually do not need to concern themselves with these
+ options, they are more for the development environment. An Erlang program
+ can be written so that it works well regardless of the type of system or
+ the Unicode options that are in effect.</p>
+
+ <p>Here follows a summary of the settings affecting Unicode:</p>
+
+ <taglist>
+ <tag>The <c>LANG</c> and <c>LC_CTYPE</c> environment variables</tag>
+ <item>
+ <p>The language setting in the operating system mainly affects the
+ shell. The terminal (that is, the group leader) operates with
+ <c>{encoding, unicode}</c> only if the environment tells it that
+ UTF-8 is allowed. This setting is to correspond to the terminal you
+ are using.</p>
+ <p>The environment can also affect filename interpretation, if Erlang
+ is started with flag <c>+fna</c> (which is default from
+ Erlang/OTP 17.0).</p>
+ <p>You can check the setting of this by calling
+ <seealso marker="stdlib:io#getopts/1"><c>io:getopts()</c></seealso>,
+ which gives you an option list containing <c>{encoding,unicode}</c>
+ or <c>{encoding,latin1}</c>.</p>
+ </item>
+ <tag>The <c>+pc</c> {<c>unicode</c>|<c>latin1</c>} flag to
+ <seealso marker="erts:erl"><c>erl(1)</c></seealso></tag>
+ <item>
+ <p>This flag affects what is interpreted as string data when doing
+ heuristic string detection in the shell and in
+ <seealso marker="stdlib:io"><c>io</c></seealso>/
+ <seealso marker="stdlib:io_lib#format/2"><c>io_lib:format</c></seealso>
+ with the <c>"~tp"</c> and <c>~tP</c> formatting instructions, as
+ described earlier.</p>
+ <p>You can check this option by calling
+ <seealso marker="stdlib:io#printable_range/0"><c>io:printable_range/0</c></seealso>,
+ which returns <c>unicode</c> or <c>latin1</c>. To be compatible with
+ future (expected) extensions to the settings, rather use
+ <seealso marker="stdlib:io_lib#printable_list/1"><c>io_lib:printable_list/1</c></seealso>
+ to check if a list is printable according to the setting. That
+ function takes into account new possible settings returned from
+ <c>io:printable_range/0</c>.</p>
+ </item>
+ <tag>The <c>+fn</c>{<c>l</c>|<c>u</c>|<c>a</c>}
+ [{<c>w</c>|<c>i</c>|<c>e</c>}] flag to
+ <seealso marker="erts:erl"><c>erl(1)</c></seealso></tag>
+ <item>
+ <p>This flag affects how the filenames are to be interpreted. On
+ operating systems with transparent file naming, this must be
+ specified to allow for file naming in Unicode characters (and for
+ correct interpretation of filenames containing characters &gt; 255).
+ </p>
+ <list type="bulleted">
+ <item>
+ <p><c>+fnl</c> means bytewise interpretation of filenames, which was
+ the usual way to represent ISO Latin-1 filenames before UTF-8
+ file naming got widespread.</p>
+ </item>
+ <item>
+ <p><c>+fnu</c> means that filenames are encoded in UTF-8, which is
+ nowadays the common scheme (although not enforced).</p>
+ </item>
+ <item>
+ <p><c>+fna</c> means that you automatically select between
+ <c>+fnl</c> and <c>+fnu</c>, based on environment variables
+ <c>LANG</c> and <c>LC_CTYPE</c>. This is optimistic
+ heuristics indeed, nothing enforces a user to have a terminal with
+ the same encoding as the file system, but this is usually the
+ case. This is the default on all Unix-like operating systems,
+ except MacOS X.</p>
+ </item>
+ </list>
+ <p>The filename translation mode can be read with function
+ <seealso marker="kernel:file#native_name_encoding/0"><c>file:native_name_encoding/0</c></seealso>,
+ which returns <c>latin1</c> (bytewise encoding) or <c>utf8</c>.</p>
+ </item>
+ <tag><seealso marker="stdlib:epp#default_encoding/0"><c>epp:default_encoding/0</c></seealso></tag>
+ <item>
+ <p>This function returns the default encoding for Erlang source files
+ (if no encoding comment is present) in the currently running release.
+ In Erlang/OTP R16B, <c>latin1</c> (bytewise encoding) was returned.
+ As from Erlang/OTP 17.0, <c>utf8</c> is returned.</p>
+ <p>The encoding of each file can be specified using comments as
+ described in the
+ <seealso marker="stdlib:epp#encoding"><c>epp(3)</c></seealso> module.
+ </p>
+ </item>
+ <tag><seealso marker="stdlib:io#setopts/1"><c>io:setopts/1,2</c></seealso>
+ and flags <c>-oldshell</c>/<c>-noshell</c></tag>
+ <item>
+ <p>When Erlang is started with <c>-oldshell</c> or <c>-noshell</c>, the
+ I/O server for <c>standard_io</c> is by default set to bytewise
+ encoding, while an interactive shell defaults to what the
+ environment variables says.</p>
+ <p>You can set the encoding of a file or other I/O server with function
+ <seealso marker="stdlib:io#setopts/1"><c>io:setopts/2</c></seealso>.
+ This can also be set when opening a file. Setting the terminal (or
+ other <c>standard_io</c> server) unconditionally to option
+ <c>{encoding,utf8}</c> implies that UTF-8 encoded characters are
+ written to the device, regardless of how Erlang was started or the
+ user's environment.</p>
+ <p>Opening files with option <c>encoding</c> is convenient when
+ writing or reading text files in a known encoding.</p>
+ <p>You can retrieve the <c>encoding</c> setting for an I/O server with
+ function
+ <seealso marker="stdlib:io#getopts/1"><c>io:getopts()</c></seealso>.
+ </p>
+ </item>
+ </taglist>
+ </section>
+
<section>
- <title>Byte Order Marks</title>
- <p>A common method of identifying encoding in text-files is to put
- a byte order mark (BOM) first in the file. The BOM is the
- code point 16#FEFF encoded in the same way as the rest of the
- file. If such a file is to be read, the first few bytes (depending
- on encoding) is not part of the actual text. This code outlines
- how to open a file which is believed to have a BOM and set the
- files encoding and position for further sequential reading
- (preferably using the <seealso marker="stdlib:io"><c>io</c></seealso>
- module). Note that error handling is omitted from the code:</p>
-<code>
+ <title>Recipes</title>
+ <p>When starting with Unicode, one often stumbles over some common issues.
+ This section describes some methods of dealing with Unicode data.</p>
+
+ <section>
+ <title>Byte Order Marks</title>
+ <p>A common method of identifying encoding in text files is to put a Byte
+ Order Mark (BOM) first in the file. The BOM is the code point 16#FEFF
+ encoded in the same way as the remaining file. If such a file is to be
+ read, the first few bytes (depending on encoding) are not part of the
+ text. This code outlines how to open a file that is believed to
+ have a BOM, and sets the files encoding and position for further
+ sequential reading (preferably using the
+ <seealso marker="stdlib:io"><c>io</c></seealso> module).</p>
+
+ <p>Notice that error handling is omitted from the code:</p>
+
+ <code>
open_bom_file_for_reading(File) -&gt;
{ok,F} = file:open(File,[read,binary]),
{ok,Bin} = file:read(F,4),
{Type,Bytes} = unicode:bom_to_encoding(Bin),
file:position(F,Bytes),
io:setopts(F,[{encoding,Type}]),
- {ok,F}.
-</code>
- <p>The <c>unicode:bom_to_encoding/1</c> function identifies the
- encoding from a binary of at least four bytes. It returns, along
- with an term suitable for setting the encoding of the file, the
- actual length of the BOM, so that the file position can be set
- accordingly. Note that <c>file:position/2</c> always works on
- byte-offsets, so that the actual byte-length of the BOM is
- needed.</p>
- <p>To open a file for writing and putting the BOM first is even
- simpler:</p>
-<code>
+ {ok,F}.</code>
+
+ <p>Function
+ <seealso marker="stdlib:unicode#bom_to_encoding/1"><c>unicode:bom_to_encoding/1</c></seealso>
+ identifies the encoding from a binary of at least four bytes. It
+ returns, along with a term suitable for setting the encoding of the
+ file, the byte length of the BOM, so that the file position can be set
+ accordingly. Notice that function
+ <seealso marker="kernel:file#position/2"><c>file:position/2</c></seealso>
+ always works on byte-offsets, so that the byte length of the BOM is
+ needed.</p>
+
+ <p>To open a file for writing and place the BOM first is even simpler:</p>
+
+ <code>
open_bom_file_for_writing(File,Encoding) -&gt;
{ok,F} = file:open(File,[write,binary]),
ok = file:write(File,unicode:encoding_to_bom(Encoding)),
io:setopts(F,[{encoding,Encoding}]),
- {ok,F}.
-</code>
- <p>In both cases the file is then best processed using the
- <c>io</c> module, as the functions in <c>io</c> can handle code
- points beyond the ISO-latin-1 range.</p>
- </section>
- <section>
- <title>Formatted I/O</title>
- <p>When reading and writing to Unicode-aware entities, like the
- User or a file opened for Unicode translation, you will probably
- want to format text strings using the functions in <seealso
- marker="stdlib:io"><c>io</c></seealso> or <seealso
- marker="stdlib:io_lib"><c>io_lib</c></seealso>. For backward
- compatibility reasons, these functions do not accept just any list
- as a string, but require a special <em>translation modifier</em>
- when working with Unicode texts. The modifier is <c>t</c>. When
- applied to the <c>s</c> control character in a formatting string,
- it accepts all Unicode code points and expect binaries to be in
- UTF-8:</p>
- <pre>
+ {ok,F}.</code>
+
+ <p>The file is in both these cases then best processed using the
+ <seealso marker="stdlib:io"><c>io</c></seealso> module, as the functions
+ in that module can handle code points beyond the ISO Latin-1 range.</p>
+ </section>
+
+ <section>
+ <title>Formatted I/O</title>
+ <p>When reading and writing to Unicode-aware entities, like a
+ file opened for Unicode translation, you probably want to format text
+ strings using the functions in the
+ <seealso marker="stdlib:io"><c>io</c></seealso> module or the
+ <seealso marker="stdlib:io_lib"><c>io_lib</c></seealso> module. For
+ backward compatibility reasons, these functions do not accept any list
+ as a string, but require a special <em>translation modifier</em> when
+ working with Unicode texts. The modifier is <c>t</c>. When applied to
+ control character <c>s</c> in a formatting string, it accepts all
+ Unicode code points and expects binaries to be in UTF-8:</p>
+
+ <pre>
1> <input>io:format("~ts~n",[&lt;&lt;"åäö"/utf8&gt;&gt;]).</input>
åäö
ok
2> <input>io:format("~s~n",[&lt;&lt;"åäö"/utf8&gt;&gt;]).</input>
åäö
ok</pre>
- <p>Obviously the second <c>io:format/2</c> gives undesired output
- because the UTF-8 binary is not in latin1. For backward
- compatibility, the non prefixed <c>s</c> control character expects
- bytewise encoded ISO-latin-1 characters in binaries and lists
- containing only code points &lt; 256.</p>
- <p>As long as the data is always lists, the <c>t</c> modifier can
- be used for any string, but when binary data is involved, care
- must be taken to make the right choice of formatting characters. A
- bytewise encoded binary will also be interpreted as a string and
- printed even when using <c>~ts</c>, but it might be mistaken for a
- valid UTF-8 string and one should therefore avoid using the
- <c>~ts</c> control if the binary contains bytewise encoded
- characters and not UTF-8.</p>
- <p>The function <c>format/2</c> in <c>io_lib</c> behaves
- similarly. This function is defined to return a deep list of
- characters and the output could easily be converted to binary data
- for outputting on a device of any kind by a simple
- <c>erlang:list_to_binary/1</c>. When the translation modifier is
- used, the list can however contain characters that cannot be
- stored in one byte. The call to <c>erlang:list_to_binary/1</c>
- will in that case fail. However, if the I/O server you want to
- communicate with is Unicode-aware, the list returned can still be
- used directly:</p>
-<pre>
+
+ <p>Clearly, the second <c>io:format/2</c> gives undesired output, as the
+ UTF-8 binary is not in <c>latin1</c>. For backward compatibility, the
+ non-prefixed control character <c>s</c> expects bytewise-encoded ISO
+ Latin-1 characters in binaries and lists containing only code points
+ &lt; 256.</p>
+
+ <p>As long as the data is always lists, modifier <c>t</c> can be used for
+ any string, but when binary data is involved, care must be taken to
+ make the correct choice of formatting characters. A bytewise-encoded
+ binary is also interpreted as a string, and printed even when using
+ <c>~ts</c>, but it can be mistaken for a valid UTF-8 string. Avoid
+ therefore using the <c>~ts</c> control if the binary contains
+ bytewise-encoded characters and not UTF-8.</p>
+
+ <p>Function
+ <seealso marker="stdlib:io_lib#format/2"><c>io_lib:format/2</c></seealso>
+ behaves similarly. It is defined to return a deep list of characters
+ and the output can easily be converted to binary data for outputting on
+ any device by a simple
+ <seealso marker="erts:erlang#list_to_binary/1"><c>erlang:list_to_binary/1</c></seealso>.
+ When the translation modifier is used, the list can, however, contain
+ characters that cannot be stored in one byte. The call to
+ <c>erlang:list_to_binary/1</c> then fails. However, if the I/O server
+ you want to communicate with is Unicode-aware, the returned list can
+ still be used directly:</p>
+
+ <pre>
$ <input>erl +pc unicode</input>
Erlang R16B (erts-5.10.1) [source] [async-threads:0] [hipe] [kernel-poll:false]
@@ -1195,55 +1327,56 @@ Eshell V5.10.1 (abort with ^G)
2> <input>io:put_chars(io_lib:format("~ts~n", ["Γιούνικοντ"])).</input>
Γιούνικοντ
ok</pre>
- <p>The Unicode string is returned as a Unicode list, which is
- recognized as such since the Erlang shell uses the Unicode
- encoding (and is started with all Unicode characters considered
- printable). The Unicode list is valid input to the <seealso
- marker="stdlib:io#put_chars/2"><c>io:put_chars/2</c></seealso> function,
- so data can be output on any Unicode capable device. If the device
- is a terminal, characters will be output in the <c>\x{</c>H
- ...<c>}</c> format if encoding is <c>latin1</c> otherwise in UTF-8
- (for the non-interactive terminal - "oldshell" or "noshell") or
- whatever is suitable to show the character properly (for an
- interactive terminal - the regular shell). The bottom line is that
- you can always send Unicode data to the <c>standard_io</c>
- device. Files will however only accept Unicode code points beyond
- ISO-latin-1 if <c>encoding</c> is set to something else than
- <c>latin1</c>.</p>
- </section>
- <section>
- <title>Heuristic Identification of UTF-8</title>
- <p>While it is
- strongly encouraged that the actual encoding of characters in
- binary data is known prior to processing, that is not always
- possible. On a typical Linux system, there is a mix of UTF-8
- and ISO-latin-1 text files and there are seldom any BOM's in the
- files to identify them.</p>
- <p>UTF-8 is designed in such a way that ISO-latin-1 characters
- with numbers beyond the 7-bit ASCII range are seldom considered
- valid when decoded as UTF-8. Therefore one can usually use
- heuristics to determine if a file is in UTF-8 or if it is encoded
- in ISO-latin-1 (one byte per character) encoding. The
- <c>unicode</c> module can be used to determine if data can be
- interpreted as UTF-8:</p>
- <code>
+
+ <p>The Unicode string is returned as a Unicode list, which is recognized
+ as such, as the Erlang shell uses the Unicode encoding (and is started
+ with all Unicode characters considered printable). The Unicode list is
+ valid input to function
+ <seealso marker="stdlib:io#put_chars/2"><c>io:put_chars/2</c></seealso>,
+ so data can be output on any Unicode-capable device. If the device is a
+ terminal, characters are output in format <c>\x{</c>H...<c>}</c> if
+ encoding is <c>latin1</c>. Otherwise in UTF-8 (for the non-interactive
+ terminal: "oldshell" or "noshell") or whatever is suitable to show the
+ character properly (for an interactive terminal: the regular shell).</p>
+
+ <p>So, you can always send Unicode data to the <c>standard_io</c> device.
+ Files, however, accept only Unicode code points beyond ISO Latin-1 if
+ <c>encoding</c> is set to something else than <c>latin1</c>.</p>
+ </section>
+
+ <section>
+ <title>Heuristic Identification of UTF-8</title>
+ <p>While it is strongly encouraged that the encoding of characters
+ in binary data is known before processing, that is not always possible.
+ On a typical Linux system, there is a mix of UTF-8 and ISO Latin-1 text
+ files, and there are seldom any BOMs in the files to identify them.</p>
+
+ <p>UTF-8 is designed so that ISO Latin-1 characters with numbers beyond
+ the 7-bit ASCII range are seldom considered valid when decoded as UTF-8.
+ Therefore one can usually use heuristics to determine if a file is in
+ UTF-8 or if it is encoded in ISO Latin-1 (one byte per character).
+ The <seealso marker="stdlib:unicode"><c>unicode</c></seealso>
+ module can be used to determine if data can be interpreted as UTF-8:</p>
+
+ <code>
heuristic_encoding_bin(Bin) when is_binary(Bin) -&gt;
case unicode:characters_to_binary(Bin,utf8,utf8) of
Bin ->
utf8;
_ ->
latin1
- end.
- </code>
- <p>If one does not have a complete binary of the file content, one
- could instead chunk through the file and check part by part. The
- return-tuple <c>{incomplete,Decoded,Rest}</c> from
- <c>unicode:characters_to_binary/{1,2,3}</c> comes in handy. The
- incomplete rest from one chunk of data read from the file is
- prepended to the next chunk and we therefore circumvent the
- problem of character boundaries when reading chunks of bytes in
- UTF-8 encoding:</p>
- <code>
+ end.</code>
+
+ <p>If you do not have a complete binary of the file content, you can
+ instead chunk through the file and check part by part. The return-tuple
+ <c>{incomplete,Decoded,Rest}</c> from function
+ <seealso marker="stdlib:unicode#characters_to_binary/1"><c>unicode:characters_to_binary/1,2,3</c></seealso>
+ comes in handy. The incomplete rest from one chunk of data read from the
+ file is prepended to the next chunk and we therefore avoid the problem
+ of character boundaries when reading chunks of bytes in UTF-8
+ encoding:</p>
+
+ <code>
heuristic_encoding_file(FileName) -&gt;
{ok,F} = file:open(FileName,[read,binary]),
loop_through_file(F,&lt;&lt;&gt;&gt;,file:read(F,1024)).
@@ -1260,13 +1393,14 @@ loop_through_file(F,Acc,{ok,Bin}) when is_binary(Bin) -&gt;
loop_through_file(F,Rest,file:read(F,1024));
Res when is_binary(Res) ->
loop_through_file(F,&lt;&lt;&gt;&gt;,file:read(F,1024))
- end.
- </code>
- <p>Another option is to try to read the whole file in UTF-8
- encoding and see if it fails. Here we need to read the file using
- <c>io:get_chars/3</c>, as we have to succeed in reading characters
- with a code point over 255:</p>
- <code>
+ end.</code>
+
+ <p>Another option is to try to read the whole file in UTF-8 encoding and
+ see if it fails. Here we need to read the file using function
+ <seealso marker="stdlib:io#get_chars/3"><c>io:get_chars/3</c></seealso>,
+ as we have to read characters with a code point &gt; 255:</p>
+
+ <code>
heuristic_encoding_file2(FileName) -&gt;
{ok,F} = file:open(FileName,[read,binary,{encoding,utf8}]),
loop_through_file2(F,io:get_chars(F,'',1024)).
@@ -1276,69 +1410,71 @@ loop_through_file2(_,eof) -&gt;
loop_through_file2(_,{error,_Err}) -&gt;
latin1;
loop_through_file2(F,Bin) when is_binary(Bin) -&gt;
- loop_through_file2(F,io:get_chars(F,'',1024)).
- </code>
- </section>
- <section>
- <title>Lists of UTF-8 Bytes</title>
- <p>For various reasons, you may find yourself having a list of
- UTF-8 bytes. This is not a regular string of Unicode characters as
- each element in the list does not contain one character. Instead
- you get the "raw" UTF-8 encoding that you have in binaries. This
- is easily converted to a proper Unicode string by first converting
- byte per byte into a binary and then converting the binary of
- UTF-8 encoded characters back to a Unicode string:</p>
- <code>
- utf8_list_to_string(StrangeList) ->
- unicode:characters_to_list(list_to_binary(StrangeList)).
- </code>
- </section>
- <section>
- <title>Double UTF-8 Encoding</title>
- <p>When working with binaries, you may get the horrible "double
- UTF-8 encoding", where strange characters are encoded in your
- binaries or files that you did not expect. What you may have got,
- is a UTF-8 encoded binary that is for the second time encoded as
- UTF-8. A common situation is where you read a file, byte by byte,
- but the actual content is already UTF-8. If you then convert the
- bytes to UTF-8, using i.e. the <c>unicode</c> module or by
- writing to a file opened with the <c>{encoding,utf8}</c>
- option. You will have each <i>byte</i> in the in the input file
- encoded as UTF-8, not each character of the original text (one
- character may have been encoded in several bytes). There is no
- real remedy for this other than being very sure of which data is
- actually encoded in which format, and never convert UTF-8 data
- (possibly read byte by byte from a file) into UTF-8 again.</p>
- <p>The by far most common situation where this happens, is when
- you get lists of UTF-8 instead of proper Unicode strings, and then
- convert them to UTF-8 in a binary or on a file:</p>
- <code>
- wrong_thing_to_do() ->
- {ok,Bin} = file:read_file("an_utf8_encoded_file.txt"),
- MyList = binary_to_list(Bin), %% Wrong! It is an utf8 binary!
- {ok,C} = file:open("catastrophe.txt",[write,{encoding,utf8}]),
- io:put_chars(C,MyList), %% Expects a Unicode string, but get UTF-8
- %% bytes in a list!
- file:close(C). %% The file catastrophe.txt contains more or less unreadable
- %% garbage!
- </code>
- <p>Make very sure you know what a binary contains before
- converting it to a string. If no other option exists, try
- heuristics:</p>
- <code>
- if_you_can_not_know() ->
- {ok,Bin} = file:read_file("maybe_utf8_encoded_file.txt"),
- MyList = case unicode:characters_to_list(Bin) of
- L when is_list(L) ->
- L;
- _ ->
- binary_to_list(Bin) %% The file was bytewise encoded
- end,
- %% Now we know that the list is a Unicode string, not a list of UTF-8 bytes
- {ok,G} = file:open("greatness.txt",[write,{encoding,utf8}]),
- io:put_chars(G,MyList), %% Expects a Unicode string, which is what it gets!
- file:close(G). %% The file contains valid UTF-8 encoded Unicode characters!
- </code>
+ loop_through_file2(F,io:get_chars(F,'',1024)).</code>
+ </section>
+
+ <section>
+ <title>Lists of UTF-8 Bytes</title>
+ <p>For various reasons, you can sometimes have a list of UTF-8
+ bytes. This is not a regular string of Unicode characters, as each list
+ element does not contain one character. Instead you get the "raw" UTF-8
+ encoding that you have in binaries. This is easily converted to a proper
+ Unicode string by first converting byte per byte into a binary, and then
+ converting the binary of UTF-8 encoded characters back to a Unicode
+ string:</p>
+
+ <code>
+utf8_list_to_string(StrangeList) ->
+ unicode:characters_to_list(list_to_binary(StrangeList)).</code>
+ </section>
+
+ <section>
+ <title>Double UTF-8 Encoding</title>
+ <p>When working with binaries, you can get the horrible "double UTF-8
+ encoding", where strange characters are encoded in your binaries or
+ files. In other words, you can get a UTF-8 encoded binary that for the
+ second time is encoded as UTF-8. A common situation is where you read a
+ file, byte by byte, but the content is already UTF-8. If you then
+ convert the bytes to UTF-8, using, for example, the
+ <seealso marker="stdlib:unicode"><c>unicode</c></seealso> module, or by
+ writing to a file opened with option <c>{encoding,utf8}</c>, you have
+ each <em>byte</em> in the input file encoded as UTF-8, not each
+ character of the original text (one character can have been encoded in
+ many bytes). There is no real remedy for this other than to be sure of
+ which data is encoded in which format, and never convert UTF-8 data
+ (possibly read byte by byte from a file) into UTF-8 again.</p>
+
+ <p>By far the most common situation where this occurs, is when you get
+ lists of UTF-8 instead of proper Unicode strings, and then convert them
+ to UTF-8 in a binary or on a file:</p>
+
+ <code>
+wrong_thing_to_do() ->
+ {ok,Bin} = file:read_file("an_utf8_encoded_file.txt"),
+ MyList = binary_to_list(Bin), %% Wrong! It is an utf8 binary!
+ {ok,C} = file:open("catastrophe.txt",[write,{encoding,utf8}]),
+ io:put_chars(C,MyList), %% Expects a Unicode string, but get UTF-8
+ %% bytes in a list!
+ file:close(C). %% The file catastrophe.txt contains more or less unreadable
+ %% garbage!</code>
+
+ <p>Ensure you know what a binary contains before converting it to a
+ string. If no other option exists, try heuristics:</p>
+
+ <code>
+if_you_can_not_know() ->
+ {ok,Bin} = file:read_file("maybe_utf8_encoded_file.txt"),
+ MyList = case unicode:characters_to_list(Bin) of
+ L when is_list(L) ->
+ L;
+ _ ->
+ binary_to_list(Bin) %% The file was bytewise encoded
+ end,
+ %% Now we know that the list is a Unicode string, not a list of UTF-8 bytes
+ {ok,G} = file:open("greatness.txt",[write,{encoding,utf8}]),
+ io:put_chars(G,MyList), %% Expects a Unicode string, which is what it gets!
+ file:close(G). %% The file contains valid UTF-8 encoded Unicode characters!</code>
+ </section>
</section>
-</section>
</chapter>
+
diff --git a/lib/stdlib/doc/src/win32reg.xml b/lib/stdlib/doc/src/win32reg.xml
index 52a8942c59..f4a4fa1626 100644
--- a/lib/stdlib/doc/src/win32reg.xml
+++ b/lib/stdlib/doc/src/win32reg.xml
@@ -24,38 +24,39 @@
<title>win32reg</title>
<prepared>Bjorn Gustavsson</prepared>
- <responsible>NN</responsible>
+ <responsible></responsible>
<docno></docno>
- <approved>nobody</approved>
- <checked>no</checked>
+ <approved></approved>
+ <checked></checked>
<date>2000-08-10</date>
<rev>PA1</rev>
- <file>win32reg.sgml</file>
+ <file>win32reg.xml</file>
</header>
<module>win32reg</module>
- <modulesummary>win32reg provides access to the registry on Windows</modulesummary>
+ <modulesummary>Provides access to the registry on Windows.</modulesummary>
<description>
- <p><c>win32reg</c> provides read and write access to the
+ <p>This module provides read and write access to the
registry on Windows. It is essentially a port driver wrapped around the
Win32 API calls for accessing the registry.</p>
<p>The registry is a hierarchical database, used to store various system
- and software information in Windows. It is available in Windows 95 and
- Windows NT. It contains installation data, and is updated by installers
+ and software information in Windows.
+ It contains installation data, and is updated by installers
and system programs. The Erlang installer updates the registry by adding
data that Erlang needs.</p>
<p>The registry contains keys and values. Keys are like the directories
in a file system, they form a hierarchy. Values are like files, they have
a name and a value, and also a type.</p>
- <p>Paths to keys are left to right, with sub-keys to the right and backslash
- between keys. (Remember that backslashes must be doubled in Erlang strings.)
- Case is preserved but not significant.
- Example: <c>"\\hkey_local_machine\\software\\Ericsson\\Erlang\\5.0"</c> is the key
+ <p>Paths to keys are left to right, with subkeys to the right and backslash
+ between keys. (Remember that backslashes must be doubled in Erlang
+ strings.) Case is preserved but not significant.</p>
+ <p>For example,
+ <c>"\\hkey_local_machine\\software\\Ericsson\\Erlang\\5.0"</c> is the key
for the installation data for the latest Erlang release.</p>
- <p>There are six entry points in the Windows registry, top level keys. They can be
- abbreviated in the <c>win32reg</c> module as:</p>
+ <p>There are six entry points in the Windows registry, top-level keys.
+ They can be abbreviated in this module as follows:</p>
<pre>
-Abbrev. Registry key
-======= ============
+Abbreviation Registry key
+============ ============
hkcr HKEY_CLASSES_ROOT
current_user HKEY_CURRENT_USER
hkcu HKEY_CURRENT_USER
@@ -67,29 +68,39 @@ current_config HKEY_CURRENT_CONFIG
hkcc HKEY_CURRENT_CONFIG
dyn_data HKEY_DYN_DATA
hkdd HKEY_DYN_DATA</pre>
- <p>The key above could be written as <c>"\\hklm\\software\\ericsson\\erlang\\5.0"</c>.</p>
- <p>The <c>win32reg</c> module uses a current key. It works much like the
- current directory. From the current key, values can be fetched, sub-keys
+ <p>The key above can be written as
+ <c>"\\hklm\\software\\ericsson\\erlang\\5.0"</c>.</p>
+ <p>This module uses a current key. It works much like the
+ current directory. From the current key, values can be fetched, subkeys
can be listed, and so on.</p>
- <p>Under a key, any number of named values can be stored. They have name, and
+ <p>Under a key, any number of named values can be stored. They have names,
types, and data.</p>
- <p>Currently, the <c>win32reg</c> module supports storing only the following
- types: REG_DWORD, which is an
- integer, REG_SZ which is a string and REG_BINARY which is a binary.
- Other types can be read, and will be returned as binaries.</p>
- <p>There is also a "default" value, which has the empty string as name. It is read and
- written with the atom <c>default</c> instead of the name.</p>
- <p>Some registry values are stored as strings with references to environment variables,
- e.g. <c>"%SystemRoot%Windows"</c>. <c>SystemRoot</c> is an environment variable, and should be
- replaced with its value. A function <c>expand/1</c> is provided, so that environment
- variables surrounded in % can be expanded to their values.</p>
- <p>For additional information on the Windows registry consult the Win32
+ <p><c>win32reg</c> supports storing of the following types:</p>
+ <list type="bulleted">
+ <item><c>REG_DWORD</c>, which is an integer</item>
+ <item><c>REG_SZ</c>, which is a string</item>
+ <item><c>REG_BINARY</c>, which is a binary</item>
+ </list>
+ <p>Other types can be read, and are returned as binaries.</p>
+ <p>There is also a "default" value, which has the empty string as name. It
+ is read and written with the atom <c>default</c> instead of the name.</p>
+ <p>Some registry values are stored as strings with references to environment
+ variables, for example, <c>%SystemRoot%Windows</c>. <c>SystemRoot</c> is
+ an environment variable, and is to be replaced with its value. Function
+ <seealso marker="#expand/1"><c>expand/1</c></seealso> is provided so that
+ environment variables surrounded by <c>%</c> can be expanded to their
+ values.</p>
+ <p>For more information on the Windows registry, see consult the Win32
Programmer's Reference.</p>
</description>
+
<datatypes>
<datatype>
<name name="reg_handle"/>
- <desc><p>As returned by <seealso marker="#open/1">open/1</seealso>.</p></desc>
+ <desc>
+ <p>As returned by
+ <seealso marker="#open/1"><c>open/1</c></seealso>.</p>
+ </desc>
</datatype>
<datatype>
<name name="name"/>
@@ -98,136 +109,164 @@ hkdd HKEY_DYN_DATA</pre>
<name name="value"/>
</datatype>
</datatypes>
+
<funcs>
<func>
<name name="change_key" arity="2"/>
- <fsummary>Move to a key in the registry</fsummary>
+ <fsummary>Move to a key in the registry.</fsummary>
<desc>
- <p>Changes the current key to another key. Works like cd.
+ <p>Changes the current key to another key. Works like <c>cd</c>.
The key can be specified as a relative path or as an
- absolute path, starting with \.</p>
+ absolute path, starting with <c>\.</c></p>
</desc>
</func>
+
<func>
<name name="change_key_create" arity="2"/>
- <fsummary>Move to a key, create it if it is not there</fsummary>
+ <fsummary>Move to a key, create it if it is not there.</fsummary>
<desc>
<p>Creates a key, or just changes to it, if it is already there. Works
- like a combination of <c>mkdir</c> and <c>cd</c>. Calls the Win32 API function
- <c>RegCreateKeyEx()</c>.</p>
- <p>The registry must have been opened in write-mode.</p>
+ like a combination of <c>mkdir</c> and <c>cd</c>.
+ Calls the Win32 API function <c>RegCreateKeyEx()</c>.</p>
+ <p>The registry must have been opened in write mode.</p>
</desc>
</func>
+
<func>
<name name="close" arity="1"/>
<fsummary>Close the registry.</fsummary>
<desc>
- <p>Closes the registry. After that, the <c><anno>RegHandle</anno></c> cannot
- be used.</p>
+ <p>Closes the registry. After that, the <c><anno>RegHandle</anno></c>
+ cannot be used.</p>
</desc>
</func>
+
<func>
<name name="current_key" arity="1"/>
<fsummary>Return the path to the current key.</fsummary>
<desc>
- <p>Returns the path to the current key. This is the equivalent of <c>pwd</c>.</p>
- <p>Note that the current key is stored in the driver, and might be
- invalid (e.g. if the key has been removed).</p>
+ <p>Returns the path to the current key. This is the equivalent of
+ <c>pwd</c>.</p>
+ <p>Notice that the current key is stored in the driver, and can be
+ invalid (for example, if the key has been removed).</p>
</desc>
</func>
+
<func>
<name name="delete_key" arity="1"/>
- <fsummary>Delete the current key</fsummary>
+ <fsummary>Delete the current key.</fsummary>
<desc>
<p>Deletes the current key, if it is valid. Calls the Win32 API
- function <c>RegDeleteKey()</c>. Note that this call does not change the current key,
- (unlike <c>change_key_create/2</c>.) This means that after the call, the
- current key is invalid.</p>
+ function <c>RegDeleteKey()</c>. Notice that this call does not change
+ the current key (unlike
+ <seealso marker="#change_key_create/2">
+ <c>change_key_create/2</c></seealso>).
+ This means that after the call, the current key is invalid.</p>
</desc>
</func>
+
<func>
<name name="delete_value" arity="2"/>
<fsummary>Delete the named value on the current key.</fsummary>
<desc>
<p>Deletes a named value on the current key. The atom <c>default</c> is
- used for the the default value.</p>
- <p>The registry must have been opened in write-mode.</p>
+ used for the default value.</p>
+ <p>The registry must have been opened in write mode.</p>
</desc>
</func>
+
<func>
<name name="expand" arity="1"/>
- <fsummary>Expand a string with environment variables</fsummary>
+ <fsummary>Expand a string with environment variables.</fsummary>
<desc>
<p>Expands a string containing environment variables between percent
- characters. Anything between two % is taken for a environment
- variable, and is replaced by the value. Two consecutive % is replaced
- by one %.</p>
- <p>A variable name that is not in the environment, will result in an error.</p>
+ characters. Anything between two <c>%</c> is taken for an environment
+ variable, and is replaced by the value. Two consecutive <c>%</c> are
+ replaced by one <c>%</c>.</p>
+ <p>A variable name that is not in the environment results in an
+ error.</p>
</desc>
</func>
+
<func>
<name name="format_error" arity="1"/>
- <fsummary>Convert an POSIX errorcode to a string</fsummary>
+ <fsummary>Convert a POSIX error code to a string.</fsummary>
<desc>
- <p>Convert an POSIX errorcode to a string (by calling <c>erl_posix_msg:message</c>).</p>
+ <p>Converts a POSIX error code to a string
+ (by calling <c>erl_posix_msg:message/1</c>).</p>
</desc>
</func>
+
<func>
<name name="open" arity="1"/>
- <fsummary>Open the registry for reading or writing</fsummary>
+ <fsummary>Open the registry for reading or writing.</fsummary>
<desc>
- <p>Opens the registry for reading or writing. The current key will be the root
- (<c>HKEY_CLASSES_ROOT</c>). The <c>read</c> flag in the mode list can be omitted.</p>
- <p>Use <c>change_key/2</c> with an absolute path after <c>open</c>.</p>
+ <p>Opens the registry for reading or writing. The current key is the
+ root (<c>HKEY_CLASSES_ROOT</c>). Flag <c>read</c> in the mode list
+ can be omitted.</p>
+ <p>Use <seealso marker="#change_key/2"><c>change_key/2</c></seealso>
+ with an absolute path after
+ <seealso marker="#open/1"><c>open</c></seealso>.</p>
</desc>
</func>
+
<func>
<name name="set_value" arity="3"/>
- <fsummary>Set value at the current registry key with specified name.</fsummary>
+ <fsummary>Set value at the current registry key with specified name.
+ </fsummary>
<desc>
- <p>Sets the named (or default) value to value. Calls the Win32
- API function <c>RegSetValueEx()</c>. The value can be of three types, and
- the corresponding registry type will be used. Currently the types supported
- are: <c>REG_DWORD</c> for integers, <c>REG_SZ</c> for strings and
- <c>REG_BINARY</c> for binaries. Other types cannot currently be added
- or changed.</p>
- <p>The registry must have been opened in write-mode.</p>
+ <p>Sets the named (or default) value to <c>value</c>. Calls the Win32
+ API function <c>RegSetValueEx()</c>. The value can be of three types,
+ and the corresponding registry type is used. The supported types
+ are the following:</p>
+ <list type="bulleted">
+ <item><c>REG_DWORD</c> for integers</item>
+ <item><c>REG_SZ</c> for strings</item>
+ <item><c>REG_BINARY</c> for binaries</item>
+ </list>
+ <p>Other types cannot be added or changed.</p>
+ <p>The registry must have been opened in write mode.</p>
</desc>
</func>
+
<func>
<name name="sub_keys" arity="1"/>
<fsummary>Get subkeys to the current key.</fsummary>
<desc>
<p>Returns a list of subkeys to the current key. Calls the Win32
API function <c>EnumRegKeysEx()</c>.</p>
- <p>Avoid calling this on the root keys, it can be slow.</p>
+ <p>Avoid calling this on the root keys, as it can be slow.</p>
</desc>
</func>
+
<func>
<name name="value" arity="2"/>
<fsummary>Get the named value on the current key.</fsummary>
<desc>
<p>Retrieves the named value (or default) on the current key.
- Registry values of type <c>REG_SZ</c>, are returned as strings. Type <c>REG_DWORD</c>
- values are returned as integers. All other types are returned as binaries.</p>
+ Registry values of type <c>REG_SZ</c> are returned as strings.
+ Type <c>REG_DWORD</c> values are returned as integers. All other
+ types are returned as binaries.</p>
</desc>
</func>
+
<func>
<name name="values" arity="1"/>
<fsummary>Get all values on the current key.</fsummary>
<desc>
<p>Retrieves a list of all values on the current key. The values
- have types corresponding to the registry types, see <c>value</c>.
+ have types corresponding to the registry types, see
+ <seealso marker="#value/2"><c>value/2</c></seealso>.
Calls the Win32 API function <c>EnumRegValuesEx()</c>.</p>
</desc>
</func>
</funcs>
<section>
- <title>SEE ALSO</title>
- <p>Win32 Programmer's Reference (from Microsoft)</p>
- <p><c>erl_posix_msg</c></p>
- <p>The Windows 95 Registry (book from O'Reilly)</p>
+ <title>See Also</title>
+ <p><c>erl_posix_msg</c>,
+ The Windows 95 Registry (book from O'Reilly),
+ Win32 Programmer's Reference (from Microsoft)</p>
</section>
</erlref>
diff --git a/lib/stdlib/doc/src/zip.xml b/lib/stdlib/doc/src/zip.xml
index 09a6587583..0b5eac1e16 100644
--- a/lib/stdlib/doc/src/zip.xml
+++ b/lib/stdlib/doc/src/zip.xml
@@ -28,98 +28,130 @@
<docno>1</docno>
<approved></approved>
<checked></checked>
- <date>05-11-02</date>
+ <date>2005-11-02</date>
<rev>PA1</rev>
- <file>zip.sgml</file>
+ <file>zip.xml</file>
</header>
<module>zip</module>
- <modulesummary>Utility for reading and creating 'zip' archives.</modulesummary>
+ <modulesummary>Utility for reading and creating 'zip' archives.
+ </modulesummary>
<description>
- <p>The <c>zip</c> module archives and extracts files to and from a zip
- archive. The zip format is specified by the "ZIP Appnote.txt" file
- available on PKWare's website www.pkware.com.</p>
+ <p>This module archives and extracts files to and from a zip
+ archive. The zip format is specified by the "ZIP Appnote.txt" file,
+ available on the PKWARE web site
+ <url href="http://www.pkware.com">www.pkware.com</url>.</p>
<p>The zip module supports zip archive versions up to 6.1. However,
password-protection and Zip64 are not supported.</p>
- <p>By convention, the name of a zip file should end in "<c>.zip</c>".
- To abide to the convention, you'll need to add "<c>.zip</c>" yourself
- to the name.</p>
- <p>Zip archives are created with the
- <seealso marker="#zip_2">zip/2</seealso> or the
- <seealso marker="#zip_2">zip/3</seealso> function. (They are
- also available as <c>create</c>, to resemble the <c>erl_tar</c>
- module.)</p>
- <p>To extract files from a zip archive, use the
- <seealso marker="#unzip_1">unzip/1</seealso> or the
- <seealso marker="#unzip_2">unzip/2</seealso> function. (They are
- also available as <c>extract</c>.)</p>
- <p>To fold a function over all files in a zip archive, use the
- <seealso marker="#foldl_3">foldl_3</seealso> function.</p>
- <p>To return a list of the files in a zip archive, use the
- <seealso marker="#list_dir_1">list_dir/1</seealso> or the
- <seealso marker="#list_dir_2">list_dir/2</seealso> function. (They
- are also available as <c>table</c>.)</p>
- <p>To print a list of files to the Erlang shell,
- use either the <seealso marker="#t_1">t/1</seealso> or
- <seealso marker="#tt_1">tt/1</seealso> function.</p>
- <p>In some cases, it is desirable to open a zip archive, and to
- unzip files from it file by file, without having to reopen the
- archive. The functions
- <seealso marker="#zip_open">zip_open</seealso>,
- <seealso marker="#zip_get">zip_get</seealso>,
- <seealso marker="#zip_list_dir">zip_list_dir</seealso> and
- <seealso marker="#zip_close">zip_close</seealso> do this.</p>
+ <p>By convention, the name of a zip file is to end with <c>.zip</c>.
+ To abide to the convention, add <c>.zip</c> to the filename.</p>
+ <list type="bulleted">
+ <item>
+ <p>To create zip archives, use function
+ <seealso marker="#zip/2"><c>zip/2</c></seealso> or
+ <seealso marker="#zip/2"><c>zip/3</c></seealso>. They are
+ also available as <c>create/2,3</c>, to resemble the
+ <seealso marker="erl_tar"><c>erl_tar</c></seealso> module.</p>
+ </item>
+ <item>
+ <p>To extract files from a zip archive, use function
+ <seealso marker="#unzip/1"><c>unzip/1</c></seealso> or
+ <seealso marker="#unzip/2"><c>unzip/2</c></seealso>. They are
+ also available as <c>extract/1,2</c>, to resemble the
+ <seealso marker="erl_tar"><c>erl_tar</c></seealso> module.</p>
+ </item>
+ <item>
+ <p>To fold a function over all files in a zip archive, use function
+ <seealso marker="#foldl/3"><c>foldl/3</c></seealso>.</p>
+ </item>
+ <item>
+ <p>To return a list of the files in a zip archive, use function
+ <seealso marker="#list_dir/1"><c>list_dir/1</c></seealso> or
+ <seealso marker="#list_dir/2"><c>list_dir/2</c></seealso>. They are
+ also available as <c>table/1,2</c>, to resemble the
+ <seealso marker="erl_tar"><c>erl_tar</c></seealso> module.</p>
+ </item>
+ <item>
+ <p>To print a list of files to the Erlang shell, use function
+ <seealso marker="#t/1"><c>t/1</c></seealso> or
+ <seealso marker="#tt/1"><c>tt/1</c></seealso>.</p>
+ </item>
+ <item>
+ <p>Sometimes it is desirable to open a zip archive, and to
+ unzip files from it file by file, without having to reopen the
+ archive. This can be done by functions
+ <seealso marker="#zip_open/1"><c>zip_open/1,2</c></seealso>,
+ <seealso marker="#zip_get/1"><c>zip_get/1,2</c></seealso>,
+ <seealso marker="#zip_list_dir/1"><c>zip_list_dir/1</c></seealso>, and
+ <seealso marker="#zip_close/1"><c>zip_close/1</c></seealso>.</p>
+ </item>
+ </list>
</description>
<section>
- <title>LIMITATIONS</title>
- <p>Zip64 archives are not currently supported.</p>
- <p>Password-protected and encrypted archives are not currently
- supported</p>
- <p>Only the DEFLATE (zlib-compression) and the STORE (uncompressed
- data) zip methods are supported.</p>
- <p>The size of the archive is limited to 2 G-byte (32 bits).</p>
- <p>Comments for individual files is not supported when creating zip
- archives. The zip archive comment for the whole zip archive is
- supported.</p>
- <p>There is currently no support for altering an existing zip archive.
- To add or remove a file from an archive, the whole archive must be
- recreated.</p>
+ <title>Limitations</title>
+ <list type="bulleted">
+ <item>
+ <p>Zip64 archives are not supported.</p>
+ </item>
+ <item>
+ <p>Password-protected and encrypted archives are not supported.</p>
+ </item>
+ <item>
+ <p>Only the DEFLATE (zlib-compression) and the STORE (uncompressed
+ data) zip methods are supported.</p>
+ </item>
+ <item>
+ <p>The archive size is limited to 2 GB (32 bits).</p>
+ </item>
+ <item>
+ <p>Comments for individual files are not supported when creating zip
+ archives. The zip archive comment for the whole zip archive is
+ supported.</p>
+ </item>
+ <item>
+ <p>Changing a zip archive is not supported.
+ To add or remove a file from an archive, the whole archive must be
+ recreated.</p>
+ </item>
+ </list>
</section>
<datatypes>
<datatype>
<name name="zip_comment"/>
<desc>
- <p>The record <c>zip_comment</c> just contains the archive comment for
- a zip archive</p>
+ <p>The record <c>zip_comment</c> only contains the archive comment for
+ a zip archive.</p>
</desc>
</datatype>
<datatype>
<name name="zip_file"/>
<desc>
- <p>The record <c>zip_file</c> contains the following fields.</p>
+ <p>The record <c>zip_file</c> contains the following fields:</p>
<taglist>
<tag><c>name</c></tag>
<item>
- <p>the name of the file</p>
+ <p>The filename</p>
</item>
<tag><c>info</c></tag>
<item>
- <p>file info as in
- <seealso marker="kernel:file#read_file_info/1">file:read_file_info/1</seealso></p>
+ <p>File information as in
+ <seealso marker="kernel:file#read_file_info/1">
+ <c>file:read_file_info/1</c></seealso>
+ in Kernel</p>
</item>
<tag><c>comment</c></tag>
<item>
- <p>the comment for the file in the zip archive</p>
+ <p>The comment for the file in the zip archive</p>
</item>
<tag><c>offset</c></tag>
<item>
- <p>the offset of the file in the zip archive (used internally)</p>
+ <p>The file offset in the zip archive (used internally)</p>
</item>
<tag><c>comp_size</c></tag>
<item>
- <p>the compressed size of the file (the uncompressed size is found
- in <c>info</c>)</p>
+ <p>The size of the compressed file (the size of the uncompressed
+ file is found in <c>info</c>)</p>
</item>
</taglist>
</desc>
@@ -133,224 +165,44 @@
<datatype>
<name name="create_option"/>
<desc>
- <p>These options are described in <seealso marker="#zip_options">create/3</seealso>.</p>
+ <p>These options are described in <seealso marker="#zip_options">
+ <c>create/3</c></seealso>.</p>
</desc>
</datatype>
<datatype>
- <name name="handle"/>
+ <name name="handle"/>
<desc>
- <p>As returned by <seealso marker="#zip_open/2">zip_open/2</seealso>.</p>
+ <p>As returned by
+ <seealso marker="#zip_open/2"><c>zip_open/2</c></seealso>.</p>
</desc>
</datatype>
</datatypes>
+
<funcs>
<func>
- <name name="zip" arity="2"/>
- <name name="zip" arity="3"/>
- <name name="create" arity="2"/>
- <name name="create" arity="3"/>
- <fsummary>Create a zip archive with options</fsummary>
- <desc>
- <p>The <marker id="zip_2"></marker><c>zip</c> function creates a
- zip archive containing the files specified in <c><anno>FileList</anno></c>.</p>
- <p>As synonyms, the functions <c>create/2</c> and <c>create/3</c>
- are provided, to make it resemble the <c>erl_tar</c> module.</p>
- <p>The file-list is a list of files, with paths relative to the
- current directory, they will be stored with this path in the
- archive. Files may also be specified with data in binaries,
- to create an archive directly from data.</p>
- <p>Files will be compressed using the DEFLATE compression, as
- described in the Appnote.txt file. However, files will be
- stored without compression if they already are compressed.
- The <c>zip/2</c> and <c>zip/3</c> functions check the file extension
- to see whether the file should be stored without compression.
- Files with the following extensions are not compressed:
- <c>.Z</c>, <c>.zip</c>, <c>.zoo</c>, <c>.arc</c>, <c>.lzh</c>,
- <c>.arj</c>.</p>
- <p>It is possible to override the default behavior and
- explicitly control what types of files that should be
- compressed by using the <c>{compress, <anno>What</anno>}</c> and
- <c>{uncompress, <anno>What</anno>}</c> options. It is possible to have
- several <c>compress</c> and <c>uncompress</c> options. In
- order to trigger compression of a file, its extension must
- match with the
- <c>compress</c> condition and must not match the
- <c>uncompress</c> condition. For example if <c>compress</c> is
- set to <c>["gif", "jpg"]</c> and <c>uncompress</c> is set to
- <c>["jpg"]</c>, only files with <c>"gif"</c> as extension will
- be compressed. No other files will be compressed.</p>
- <marker id="zip_options"></marker>
- <p>The following options are available:</p>
- <taglist>
- <tag><c>cooked</c></tag>
- <item>
- <p>By default, the <c>open/2</c> function will open the
- zip file in <c>raw</c> mode, which is faster but does not allow
- a remote (erlang) file server to be used. Adding <c>cooked</c>
- to the mode list will override the default and open the zip file
- without the <c>raw</c> option. The same goes for the files
- added.</p>
- </item>
- <tag><c>verbose</c></tag>
- <item>
- <p>Print an informational message about each file
- being added.</p>
- </item>
- <tag><c>memory</c></tag>
- <item>
- <p>The output will not be to a file, but instead as a tuple
- <c>{<anno>FileName</anno>, binary()}</c>. The binary will be a full zip
- archive with header, and can be extracted with for instance
- <c>unzip/2</c>.</p>
- </item>
- <tag><c>{comment, <anno>Comment</anno>}</c></tag>
- <item>
- <p>Add a comment to the zip-archive.</p>
- </item>
- <tag><c>{cwd, <anno>CWD</anno>}</c></tag>
- <item>
- <p>Use the given directory as current directory, it will be
- prepended to file names when adding them, although it will not
- be in the zip-archive. (Acting like a file:set_cwd/1, but
- without changing the global cwd property.)</p>
- </item>
- <tag><c>{compress, <anno>What</anno>}</c></tag>
- <item>
- <p>Controls what types of files will be
- compressed. It is by default set to <c>all</c>. The
- following values of <c>What</c> are allowed:</p>
- <taglist>
- <tag><c>all</c></tag>
- <item><p> means that all files will be compressed (as long
- as they pass the <c>uncompress</c> condition).</p></item>
- <tag><c>[<anno>Extension</anno>]</c></tag>
- <item><p>means that only files with exactly these extensions
- will be compressed.</p></item>
- <tag><c>{add,[<anno>Extension</anno>]}</c></tag>
- <item><p>adds these extensions to the list of compress
- extensions.</p></item>
- <tag><c>{del,[<anno>Extension</anno>]}</c></tag>
- <item><p>deletes these extensions from the list of compress
- extensions.</p></item>
- </taglist>
- </item>
- <tag><c>{uncompress, <anno>What</anno>}</c></tag>
- <item>
- <p>Controls what types of files will be uncompressed. It is by
- default set to <c>[".Z", ".zip", ".zoo", ".arc", ".lzh", ".arj"]</c>.
- The following values of <c>What</c> are allowed:</p>
- <taglist>
- <tag><c>all</c></tag>
- <item><p> means that no files will be compressed.</p></item>
- <tag><c>[<anno>Extension</anno>]</c></tag>
- <item><p>means that files with these extensions will be
- uncompressed.</p></item>
- <tag><c>{add,[<anno>Extension</anno>]}</c></tag>
- <item><p>adds these extensions to the list of uncompress
- extensions.</p></item>
- <tag><c>{del,[<anno>Extension</anno>]}</c></tag>
- <item><p>deletes these extensions from the list of uncompress
- extensions.</p></item>
- </taglist>
- </item>
- </taglist>
- </desc>
- </func>
- <func>
- <name name="unzip" arity="1"/>
- <name name="unzip" arity="2"/>
- <name name="extract" arity="1"/>
- <name name="extract" arity="2"/>
- <fsummary>Extract files from a zip archive</fsummary>
- <desc>
- <p>The <marker id="unzip_1"></marker><c>unzip/1</c> function extracts
- all files from a zip archive.
- The <marker id="unzip_2"></marker><c>unzip/2</c> function provides
- options to extract some files, and more.</p>
- <p>If the <c><anno>Archive</anno></c> argument is given as a binary,
- the contents of the binary is assumed to be a zip archive,
- otherwise it should be a filename.</p>
- <p>The following options are available:</p>
- <taglist>
- <tag><c>{file_list, <anno>FileList</anno>}</c></tag>
- <item>
- <p>By default, all files will be extracted from the zip
- archive. With the <c>{file_list, <anno>FileList</anno>}</c> option,
- the <c>unzip/2</c> function will only extract the files
- whose names are included in <c><anno>FileList</anno></c>. The full
- paths, including the names of all sub directories within
- the zip archive, must be specified.</p>
- </item>
- <tag><c>cooked</c></tag>
- <item>
- <p>By default, the <c>open/2</c> function will open the
- zip file in <c>raw</c> mode, which is faster but does not allow
- a remote (erlang) file server to be used. Adding <c>cooked</c>
- to the mode list will override the default and open the zip file
- without the <c>raw</c> option. The same goes for the files
- extracted.</p>
- </item>
- <tag><c>keep_old_files</c></tag>
- <item>
- <p>By default, all existing files with the same name as file in
- the zip archive will be overwritten. With the <c>keep_old_files</c>
- option, the <c>unzip/2</c> function will not overwrite any existing
- files. Note that even with the <c>memory</c> option given, which
- means that no files will be overwritten, files existing will be
- excluded from the result.</p>
- </item>
- <tag><c>verbose</c></tag>
- <item>
- <p>Print an informational message as each file is being
- extracted.</p>
- </item>
- <tag><c>memory</c></tag>
- <item>
- <p>Instead of extracting to the current directory, the
- <c>memory</c> option will give the result as a list of tuples
- <c>{Filename, Binary}</c>, where <c>Binary</c> is a binary
- containing the extracted data of the file named <c>Filename</c>
- in the zip archive.</p>
- </item>
- <tag><c>{cwd, CWD}</c></tag>
- <item>
- <p>Use the given directory as current directory, it will be
- prepended to file names when extracting them from the
- zip-archive. (Acting like a file:set_cwd/1, but without
- changing the global cwd property.)</p>
- </item>
- </taglist>
- </desc>
- </func>
- <func>
<name name="foldl" arity="3"/>
- <fsummary>Fold a function over all files in a zip archive</fsummary>
+ <fsummary>Fold a function over all files in a zip archive.</fsummary>
<desc>
- <p>The <marker id="foldl_3"></marker> <c>foldl/3</c> function
- calls <c><anno>Fun</anno>(<anno>FileInArchive</anno>, <anno>GetInfo
- </anno>, <anno>GetBin</anno>, <anno>AccIn</anno>)</c> on
- successive files in the <c>Archive</c>, starting with
- <c><anno>AccIn</anno>
- == <anno>Acc0</anno></c>. <c><anno>FileInArchive</anno></c> is
- the name that the file
- has in the archive. <c><anno>GetInfo</anno></c> is a fun that
- returns info
- about the the file. <c><anno>GetBin</anno></c> returns the contents
- of the
- file. Both <c><anno>GetInfo</anno></c> and <c><anno>GetBin</anno></c>
- must be called
- within the <c><anno>Fun</anno></c>. Their behavior is undefined if
- they are
- called outside the context of the <c><anno>Fun</anno></c>.
- The <c><anno>Fun</anno></c>
- must return a new accumulator which is passed to the next
- call. <c>foldl/3</c> returns the final value of the
- accumulator. <c><anno>Acc0</anno></c> is returned if the archive is
- empty. It is not necessary to iterate over all files in the
- archive. The iteration may be ended prematurely in a
- controlled manner by throwing an exception.</p>
-
- <p>For example:</p>
+ <p>Calls <c><anno>Fun</anno>(<anno>FileInArchive</anno>, <anno>GetInfo
+ </anno>, <anno>GetBin</anno>, <anno>AccIn</anno>)</c> on
+ successive files in the <c>Archive</c>, starting with
+ <c><anno>AccIn</anno> == <anno>Acc0</anno></c>.</p>
+ <p><c><anno>FileInArchive</anno></c> is the name that the file
+ has in the archive.</p>
+ <p><c><anno>GetInfo</anno></c> is a fun that returns information
+ about the file.</p>
+ <p><c><anno>GetBin</anno></c> returns the file contents.</p>
+ <p>Both <c><anno>GetInfo</anno></c> and <c><anno>GetBin</anno></c>
+ must be called within the <c><anno>Fun</anno></c>. Their behavior is
+ undefined if they are called outside the context of
+ <c><anno>Fun</anno></c>.</p>
+ <p>The <c><anno>Fun</anno></c> must return a new accumulator, which is
+ passed to the next call. <c>foldl/3</c> returns the final accumulator
+ value. <c><anno>Acc0</anno></c> is returned if the archive is
+ empty. It is not necessary to iterate over all files in the archive.
+ The iteration can be ended prematurely in a controlled manner
+ by throwing an exception.</p>
+ <p><em>Example:</em></p>
<pre>
&gt; <input>Name = "dummy.zip".</input>
"dummy.zip"
@@ -380,97 +232,300 @@
</pre>
</desc>
</func>
+
<func>
<name name="list_dir" arity="1"/>
<name name="list_dir" arity="2"/>
<name name="table" arity="1" />
<name name="table" arity="2"/>
- <fsummary>Retrieve the name of all files in a zip archive</fsummary>
+ <fsummary>Retrieve the name of all files in a zip archive.</fsummary>
<desc>
- <p>The <marker id="list_dir_1"></marker><c>list_dir/1</c>
- function retrieves the names of all files in the zip archive
- <c><anno>Archive</anno></c>. The <marker id="list_dir_2"></marker>
- <c>list_dir/2</c> function provides options.</p>
- <p>As synonyms, the functions <c>table/2</c> and <c>table/3</c>
- are provided, to make it resemble the <c>erl_tar</c> module.</p>
+ <p><c>list_dir/1</c> retrieves all filenames in the zip archive
+ <c><anno>Archive</anno></c>.</p>
+ <p><c>list_dir/2</c> provides options.</p>
+ <p><c>table/1</c> and <c>table/2</c> are provided as synonyms
+ to resemble the
+ <seealso marker="erl_tar"><c>erl_tar</c></seealso> module.</p>
<p>The result value is the tuple <c>{ok, List}</c>, where <c>List</c>
contains the zip archive comment as the first element.</p>
- <p>The following options are available:</p>
+ <p>One option is available:</p>
<taglist>
<tag><c>cooked</c></tag>
<item>
- <p>By default, the <c>open/2</c> function will open the
- zip file in <c>raw</c> mode, which is faster but does not allow
- a remote (erlang) file server to be used. Adding <c>cooked</c>
- to the mode list will override the default and open the zip file
- without the <c>raw</c> option.</p>
+ <p>By default, this function opens the zip file in
+ <c>raw</c> mode, which is faster but does not allow a remote
+ (Erlang) file server to be used. Adding <c>cooked</c> to the
+ mode list overrides the default
+ and opens the zip file without option <c>raw</c>.</p>
</item>
</taglist>
</desc>
</func>
+
<func>
<name name="t" arity="1"/>
- <fsummary>Print the name of each file in a zip archive</fsummary>
+ <fsummary>Print the name of each file in a zip archive.</fsummary>
<desc>
- <p>The <marker id="t_1"></marker><c>t/1</c> function prints the names
- of all files in the zip archive <c><anno>Archive</anno></c> to the Erlang shell.
- (Similar to "<c>tar&nbsp;t</c>".)</p>
+ <p>Prints all filenames in the zip archive <c><anno>Archive</anno></c>
+ to the Erlang shell. (Similar to <c>tar&nbsp;t</c>.)</p>
</desc>
</func>
+
<func>
<name name="tt" arity="1"/>
- <fsummary>Print name and information for each file in a zip archive</fsummary>
+ <fsummary>Print name and information for each file in a zip archive.
+ </fsummary>
<desc>
- <p>The <marker id="tt_1"></marker><c>tt/1</c> function prints names and
- information about all files in the zip archive <c><anno>Archive</anno></c> to
- the Erlang shell. (Similar to "<c>tar tv</c>".)</p>
+ <p>Prints filenames and information about all files in the zip archive
+ <c><anno>Archive</anno></c> to the Erlang shell.
+ (Similar to <c>tar tv</c>.)</p>
</desc>
</func>
+
<func>
- <name name="zip_open" arity="1"/>
- <name name="zip_open" arity="2"/>
- <fsummary>Open an archive and return a handle to it</fsummary>
+ <name name="unzip" arity="1"/>
+ <name name="unzip" arity="2"/>
+ <name name="extract" arity="1"/>
+ <name name="extract" arity="2"/>
+ <fsummary>Extract files from a zip archive.</fsummary>
<desc>
- <p>The <marker id="zip_open"></marker><c>zip_open</c> function
- opens a
- zip archive, and reads and saves its directory. This
- means that subsequently reading files from the archive will be
- faster than unzipping files one at a time with <c>unzip</c>.</p>
- <p>The archive must be closed with <c>zip_close/1</c>.</p>
- <p>The <c><anno>ZipHandle</anno></c> will be closed if the
- process which originally opened the archive dies.</p>
+ <p><c>unzip/1</c> extracts all files from a zip archive.</p>
+ <p><c>unzip/2</c> provides options to extract some files, and more.</p>
+ <p><c>extract/1</c> and <c>extract/2</c> are provided as synonyms
+ to resemble module
+ <seealso marker="erl_tar"><c>erl_tar</c></seealso>.</p>
+ <p>If argument <c><anno>Archive</anno></c> is specified as a binary,
+ the contents of the binary is assumed to be a zip archive,
+ otherwise a filename.</p>
+ <p>Options:</p>
+ <taglist>
+ <tag><c>{file_list, <anno>FileList</anno>}</c></tag>
+ <item>
+ <p>By default, all files are extracted from the zip
+ archive. With option <c>{file_list, <anno>FileList</anno>}</c>,
+ function <c>unzip/2</c> only extracts the files
+ whose names are included in <c><anno>FileList</anno></c>. The full
+ paths, including the names of all subdirectories within
+ the zip archive, must be specified.</p>
+ </item>
+ <tag><c>cooked</c></tag>
+ <item>
+ <p>By default, this function opens the
+ zip file in <c>raw</c> mode, which is faster but does not allow
+ a remote (Erlang) file server to be used. Adding <c>cooked</c>
+ to the mode list overrides the default and opens the zip file
+ without option <c>raw</c>. The same applies for the files
+ extracted.</p>
+ </item>
+ <tag><c>keep_old_files</c></tag>
+ <item>
+ <p>By default, all files with the same name as files in
+ the zip archive are overwritten. With option <c>keep_old_files</c>
+ set, function <c>unzip/2</c> does not overwrite existing files.
+ Notice that
+ even with option <c>memory</c> specified, which
+ means that no files are overwritten, existing files are
+ excluded from the result.</p>
+ </item>
+ <tag><c>verbose</c></tag>
+ <item>
+ <p>Prints an informational message for each extracted file.</p>
+ </item>
+ <tag><c>memory</c></tag>
+ <item>
+ <p>Instead of extracting to the current directory,
+ the result is given as a list of tuples
+ <c>{Filename, Binary}</c>, where <c>Binary</c> is a binary
+ containing the extracted data of file <c>Filename</c>
+ in the zip archive.</p>
+ </item>
+ <tag><c>{cwd, CWD}</c></tag>
+ <item>
+ <p>Uses the specified directory as current directory. It is
+ prepended to filenames when extracting them from the
+ zip archive. (Acting like
+ <seealso marker="kernel:file#set_cwd/1">
+ <c>file:set_cwd/1</c></seealso> in Kernel,
+ but without changing the global <c>cwd</c> property.)</p>
+ </item>
+ </taglist>
</desc>
</func>
+
<func>
- <name name="zip_list_dir" arity="1"/>
- <fsummary>Return a table of files in open zip archive</fsummary>
+ <name name="zip" arity="2"/>
+ <name name="zip" arity="3"/>
+ <name name="create" arity="2"/>
+ <name name="create" arity="3"/>
+ <fsummary>Create a zip archive with options.</fsummary>
<desc>
- <p>The <marker id="zip_list_dir"></marker>
- <c>zip_list_dir/1</c> function
- returns the file list of an open zip archive. The first returned
- element is the zip archive comment.</p>
+ <p>Creates a zip archive containing the files specified in
+ <c><anno>FileList</anno></c>.</p>
+ <p><c>create/2</c> and <c>create/3</c> are provided as synonyms
+ to resemble module
+ <seealso marker="erl_tar"><c>erl_tar</c></seealso>.</p>
+ <p><c><anno>FileList</anno></c> is a list of files, with paths relative
+ to the current directory, which are stored with this path in the
+ archive. Files can also be specified with data in binaries
+ to create an archive directly from data.</p>
+ <p>Files are compressed using the DEFLATE compression, as
+ described in the "Appnote.txt" file. However, files are
+ stored without compression if they are already compressed.
+ <c>zip/2</c> and <c>zip/3</c> check the file extension
+ to determine if the file is to be stored without compression.
+ Files with the following extensions are not compressed:
+ <c>.Z</c>, <c>.zip</c>, <c>.zoo</c>, <c>.arc</c>, <c>.lzh</c>,
+ <c>.arj</c>.</p>
+ <p>It is possible to override the default behavior and control
+ what types of files that are to be compressed by using options
+ <c>{compress, <anno>What</anno>}</c> and
+ <c>{uncompress, <anno>What</anno>}</c>. It is also possible to use
+ many <c>compress</c> and <c>uncompress</c> options.</p>
+ <p>To trigger file compression, its extension must match with the
+ <c>compress</c> condition and must not match the
+ <c>uncompress</c> condition. For example, if <c>compress</c> is
+ set to <c>["gif", "jpg"]</c> and <c>uncompress</c> is set to
+ <c>["jpg"]</c>, only files with extension <c>"gif"</c> are
+ compressed.</p>
+ <marker id="zip_options"></marker>
+ <p>Options:</p>
+ <taglist>
+ <tag><c>cooked</c></tag>
+ <item>
+ <p>By default, this function opens the
+ zip file in mode <c>raw</c>, which is faster but does not allow
+ a remote (Erlang) file server to be used. Adding <c>cooked</c>
+ to the mode list overrides the default and opens the zip file
+ without the <c>raw</c> option. The same applies for the files
+ added.</p>
+ </item>
+ <tag><c>verbose</c></tag>
+ <item>
+ <p>Prints an informational message about each added file.</p>
+ </item>
+ <tag><c>memory</c></tag>
+ <item>
+ <p>The output is not to a file, but instead as a tuple
+ <c>{<anno>FileName</anno>, binary()}</c>. The binary is a full zip
+ archive with header and can be extracted with, for example,
+ <seealso marker="#unzip/2"><c>unzip/2</c></seealso>.</p>
+ </item>
+ <tag><c>{comment, <anno>Comment</anno>}</c></tag>
+ <item>
+ <p>Adds a comment to the zip archive.</p>
+ </item>
+ <tag><c>{cwd, <anno>CWD</anno>}</c></tag>
+ <item>
+ <p>Uses the specified directory as current work directory
+ (<c>cwd</c>). This is prepended to filenames when adding them,
+ although not in the zip archive (acting like
+ <seealso marker="kernel:file#set_cwd/1">
+ <c>file:set_cwd/1</c></seealso> in Kernel, but without
+ changing the global <c>cwd</c> property.).</p>
+ </item>
+ <tag><c>{compress, <anno>What</anno>}</c></tag>
+ <item>
+ <p>Controls what types of files to be compressed. Defaults to
+ <c>all</c>. The following values of <c>What</c> are allowed:</p>
+ <taglist>
+ <tag><c>all</c></tag>
+ <item>
+ <p>All files are compressed (as long
+ as they pass the <c>uncompress</c> condition).</p>
+ </item>
+ <tag><c>[<anno>Extension</anno>]</c></tag>
+ <item>
+ <p>Only files with exactly these extensions
+ are compressed.</p>
+ </item>
+ <tag><c>{add,[<anno>Extension</anno>]}</c></tag>
+ <item>
+ <p>Adds these extensions to the list of compress
+ extensions.</p>
+ </item>
+ <tag><c>{del,[<anno>Extension</anno>]}</c></tag>
+ <item>
+ <p>Deletes these extensions from the list of compress
+ extensions.</p>
+ </item>
+ </taglist>
+ </item>
+ <tag><c>{uncompress, <anno>What</anno>}</c></tag>
+ <item>
+ <p>Controls what types of files to be uncompressed. Defaults to
+ <c>[".Z", ".zip", ".zoo", ".arc", ".lzh", ".arj"]</c>.
+ The following values of <c>What</c> are allowed:</p>
+ <taglist>
+ <tag><c>all</c></tag>
+ <item>
+ <p>No files are compressed.</p>
+ </item>
+ <tag><c>[<anno>Extension</anno>]</c></tag>
+ <item>
+ <p>Files with these extensions are uncompressed.</p>
+ </item>
+ <tag><c>{add,[<anno>Extension</anno>]}</c></tag>
+ <item>
+ <p>Adds these extensions to the list of uncompress
+ extensions.</p>
+ </item>
+ <tag><c>{del,[<anno>Extension</anno>]}</c></tag>
+ <item>
+ <p>Deletes these extensions from the list of uncompress
+ extensions.</p>
+ </item>
+ </taglist>
+ </item>
+ </taglist>
</desc>
</func>
+
+ <func>
+ <name name="zip_close" arity="1"/>
+ <fsummary>Close an open archive.</fsummary>
+ <desc>
+ <p>Closes a zip archive, previously opened with
+ <seealso marker="#zip_open/1"><c>zip_open/1,2</c></seealso>.
+ All resources are closed, and the handle is not to be used after
+ closing.</p>
+ </desc>
+ </func>
+
<func>
<name name="zip_get" arity="1"/>
<name name="zip_get" arity="2"/>
- <fsummary>Extract files from an open archive</fsummary>
+ <fsummary>Extract files from an open archive.</fsummary>
<desc>
- <p>The <marker id="zip_get"></marker><c>zip_get</c> function extracts
- one or all files from an open archive.</p>
- <p>The files will be unzipped to memory or to file, depending on
- the options given to the <c>zip_open</c> function when the
- archive was opened.</p>
+ <p>Extracts one or all files from an open archive.</p>
+ <p>The files are unzipped to memory or to file, depending on
+ the options specified to function
+ <seealso marker="#zip_open/1"><c>zip_open/1,2</c></seealso>
+ when opening the archive.</p>
</desc>
</func>
+
<func>
- <name name="zip_close" arity="1"/>
- <fsummary>Close an open archive</fsummary>
+ <name name="zip_list_dir" arity="1"/>
+ <fsummary>Return a table of files in open zip archive.</fsummary>
<desc>
- <p>The <marker id="zip_close"></marker><c>zip_close/1</c> function
- closes a zip archive, previously opened with <c>zip_open</c>. All
- resources are closed, and the handle should not be used after
- closing.</p>
+ <p>Returns the file list of an open zip archive. The first returned
+ element is the zip archive comment.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="zip_open" arity="1"/>
+ <name name="zip_open" arity="2"/>
+ <fsummary>Open an archive and return a handle to it.</fsummary>
+ <desc>
+ <p>Opens a zip archive, and reads and saves its directory. This
+ means that later reading files from the archive is
+ faster than unzipping files one at a time with
+ <seealso marker="#unzip/1"><c>unzip/1,2</c></seealso>.</p>
+ <p>The archive must be closed with
+ <seealso marker="#zip_close/1"><c>zip_close/1</c></seealso>.</p>
+ <p>The <c><anno>ZipHandle</anno></c> is closed if the
+ process that originally opened the archive dies.</p>
</desc>
</func>
</funcs>
diff --git a/lib/stdlib/src/beam_lib.erl b/lib/stdlib/src/beam_lib.erl
index 7a17226e46..d7ee5c1f5d 100644
--- a/lib/stdlib/src/beam_lib.erl
+++ b/lib/stdlib/src/beam_lib.erl
@@ -46,7 +46,7 @@
terminate/2,code_change/3]).
-export([make_crypto_key/2, get_crypto_key/1]). %Utilities used by compiler
--export_type([attrib_entry/0, compinfo_entry/0, labeled_entry/0]).
+-export_type([attrib_entry/0, compinfo_entry/0, labeled_entry/0, label/0]).
-import(lists, [append/1, delete/2, foreach/2, keysort/2,
member/2, reverse/1, sort/1, splitwith/2]).
@@ -55,7 +55,7 @@
-type beam() :: module() | file:filename() | binary().
--type forms() :: [erl_parse:abstract_form()].
+-type forms() :: [erl_parse:abstract_form() | erl_parse:form_info()].
-type abst_code() :: {AbstVersion :: atom(), forms()} | 'no_abstract_code'.
-type dataB() :: binary().
diff --git a/lib/stdlib/src/epp.erl b/lib/stdlib/src/epp.erl
index 73934e0e3c..40eba4ad67 100644
--- a/lib/stdlib/src/epp.erl
+++ b/lib/stdlib/src/epp.erl
@@ -954,11 +954,15 @@ scan_undef(_Toks, Undef, From, St) ->
%% scan_include(Tokens, IncludeToken, From, St)
-scan_include([{'(',_Llp},{string,_Lf,NewName0},{')',_Lrp},{dot,_Ld}], Inc,
- From, St) ->
+scan_include(Tokens0, Inc, From, St) ->
+ Tokens = coalesce_strings(Tokens0),
+ scan_include1(Tokens, Inc, From, St).
+
+scan_include1([{'(',_Llp},{string,_Lf,NewName0},{')',_Lrp},{dot,_Ld}], Inc,
+ From, St) ->
NewName = expand_var(NewName0),
enter_file(NewName, Inc, From, St);
-scan_include(_Toks, Inc, From, St) ->
+scan_include1(_Toks, Inc, From, St) ->
epp_reply(From, {error,{loc(Inc),epp,{bad,include}}}),
wait_req_scan(St).
@@ -977,13 +981,17 @@ expand_lib_dir(Name) ->
error
end.
-scan_include_lib([{'(',_Llp},{string,_Lf,_NewName0},{')',_Lrp},{dot,_Ld}],
- Inc, From, St)
+scan_include_lib(Tokens0, Inc, From, St) ->
+ Tokens = coalesce_strings(Tokens0),
+ scan_include_lib1(Tokens, Inc, From, St).
+
+scan_include_lib1([{'(',_Llp},{string,_Lf,_NewName0},{')',_Lrp},{dot,_Ld}],
+ Inc, From, St)
when length(St#epp.sstk) >= 8 ->
epp_reply(From, {error,{loc(Inc),epp,{depth,"include_lib"}}}),
wait_req_scan(St);
-scan_include_lib([{'(',_Llp},{string,_Lf,NewName0},{')',_Lrp},{dot,_Ld}],
- Inc, From, St) ->
+scan_include_lib1([{'(',_Llp},{string,_Lf,NewName0},{')',_Lrp},{dot,_Ld}],
+ Inc, From, St) ->
NewName = expand_var(NewName0),
Loc = start_loc(St#epp.location),
case file:path_open(St#epp.path, NewName, [read]) of
@@ -1008,7 +1016,7 @@ scan_include_lib([{'(',_Llp},{string,_Lf,NewName0},{')',_Lrp},{dot,_Ld}],
wait_req_scan(St)
end
end;
-scan_include_lib(_Toks, Inc, From, St) ->
+scan_include_lib1(_Toks, Inc, From, St) ->
epp_reply(From, {error,{loc(Inc),epp,{bad,include_lib}}}),
wait_req_scan(St).
@@ -1110,8 +1118,12 @@ scan_endif(_Toks, Endif, From, St) ->
%% Set the current file and line to the given file and line.
%% Note that the line of the attribute itself is kept.
-scan_file([{'(',_Llp},{string,_Ls,Name},{',',_Lc},{integer,_Li,Ln},{')',_Lrp},
- {dot,_Ld}], Tf, From, St) ->
+scan_file(Tokens0, Tf, From, St) ->
+ Tokens = coalesce_strings(Tokens0),
+ scan_file1(Tokens, Tf, From, St).
+
+scan_file1([{'(',_Llp},{string,_Ls,Name},{',',_Lc},{integer,_Li,Ln},{')',_Lrp},
+ {dot,_Ld}], Tf, From, St) ->
Anno = erl_anno:new(Ln),
enter_file_reply(From, Name, Anno, loc(Tf), generated),
Ms0 = St#epp.macs,
@@ -1120,7 +1132,7 @@ scan_file([{'(',_Llp},{string,_Ls,Name},{',',_Lc},{integer,_Li,Ln},{')',_Lrp},
NewLoc = new_location(Ln, St#epp.location, Locf),
Delta = get_line(element(2, Tf))-Ln + St#epp.delta,
wait_req_scan(St#epp{name2=Name,location=NewLoc,delta=Delta,macs=Ms});
-scan_file(_Toks, Tf, From, St) ->
+scan_file1(_Toks, Tf, From, St) ->
epp_reply(From, {error,{loc(Tf),epp,{bad,file}}}),
wait_req_scan(St).
@@ -1537,6 +1549,18 @@ stringify(Ts, L) ->
[$\s | S] = lists:flatten(stringify1(Ts)),
[{string, L, S}].
+coalesce_strings([{string,A,S} | Tokens]) ->
+ coalesce_strings(Tokens, A, [S]);
+coalesce_strings([T | Tokens]) ->
+ [T | coalesce_strings(Tokens)];
+coalesce_strings([]) ->
+ [].
+
+coalesce_strings([{string,_,S}|Tokens], A, S0) ->
+ coalesce_strings(Tokens, A, [S | S0]);
+coalesce_strings(Tokens, A, S) ->
+ [{string,A,lists:append(lists:reverse(S))} | coalesce_strings(Tokens)].
+
%% epp_request(Epp)
%% epp_request(Epp, Request)
%% epp_reply(From, Reply)
diff --git a/lib/stdlib/src/erl_compile.erl b/lib/stdlib/src/erl_compile.erl
index ef54076ee3..a6ae398d03 100644
--- a/lib/stdlib/src/erl_compile.erl
+++ b/lib/stdlib/src/erl_compile.erl
@@ -60,6 +60,7 @@ compile_cmdline() ->
_ -> my_halt(2)
end.
+-spec my_halt(_) -> no_return().
my_halt(Reason) ->
erlang:halt(Reason).
diff --git a/lib/stdlib/src/erl_expand_records.erl b/lib/stdlib/src/erl_expand_records.erl
index 9c0a7fb7d5..ebcbc54ab1 100644
--- a/lib/stdlib/src/erl_expand_records.erl
+++ b/lib/stdlib/src/erl_expand_records.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -37,8 +37,9 @@
checked_ra=[] % successfully accessed records
}).
--spec(module(AbsForms, CompileOptions) -> AbsForms when
+-spec(module(AbsForms, CompileOptions) -> AbsForms2 when
AbsForms :: [erl_parse:abstract_form()],
+ AbsForms2 :: [erl_parse:abstract_form()],
CompileOptions :: [compile:option()]).
%% Is is assumed that Fs is a valid list of forms. It should pass
diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl
index 2508f96b91..e9332ce069 100644
--- a/lib/stdlib/src/erl_lint.erl
+++ b/lib/stdlib/src/erl_lint.erl
@@ -99,7 +99,7 @@ value_option(Flag, Default, On, OnVal, Off, OffVal, Opts) ->
module='', %Module
behaviour=[], %Behaviour
exports=gb_sets:empty() :: gb_sets:set(fa()),%Exports
- imports=[] :: [fa()], %Imports, an orddict()
+ imports=[] :: orddict:orddict(fa(), module()),%Imports
compile=[], %Compile flags
records=dict:new() %Record definitions
:: dict:dict(atom(), {line(),Fields :: term()}),
@@ -467,7 +467,7 @@ used_vars(Exprs, BindingsList) ->
%% really all ordsets!
-spec(module(AbsForms) -> {ok, Warnings} | {error, Errors, Warnings} when
- AbsForms :: [erl_parse:abstract_form()],
+ AbsForms :: [erl_parse:abstract_form() | erl_parse:form_info()],
Warnings :: [{file:filename(),[ErrorInfo]}],
Errors :: [{FileName2 :: file:filename(),[ErrorInfo]}],
ErrorInfo :: error_info()).
@@ -479,7 +479,7 @@ module(Forms) ->
-spec(module(AbsForms, FileName) ->
{ok, Warnings} | {error, Errors, Warnings} when
- AbsForms :: [erl_parse:abstract_form()],
+ AbsForms :: [erl_parse:abstract_form() | erl_parse:form_info()],
FileName :: atom() | string(),
Warnings :: [{file:filename(),[ErrorInfo]}],
Errors :: [{FileName2 :: file:filename(),[ErrorInfo]}],
@@ -492,7 +492,7 @@ module(Forms, FileName) ->
-spec(module(AbsForms, FileName, CompileOptions) ->
{ok, Warnings} | {error, Errors, Warnings} when
- AbsForms :: [erl_parse:abstract_form()],
+ AbsForms :: [erl_parse:abstract_form() | erl_parse:form_info()],
FileName :: atom() | string(),
CompileOptions :: [compile:option()],
Warnings :: [{file:filename(),[ErrorInfo]}],
diff --git a/lib/stdlib/src/erl_parse.yrl b/lib/stdlib/src/erl_parse.yrl
index a896de4f1c..85b2816451 100644
--- a/lib/stdlib/src/erl_parse.yrl
+++ b/lib/stdlib/src/erl_parse.yrl
@@ -170,9 +170,6 @@ fun_type -> '(' top_types ')' '->' top_type
: {type, ?anno('$1'), 'fun',
[{type, ?anno('$1'), product, '$2'},'$5']}.
-map_pair_types -> '...' : [{type, ?anno('$1'), map_field_assoc,
- [{type, ?anno('$1'), any, []},
- {type, ?anno('$1'), any, []}]}].
map_pair_types -> map_pair_type : ['$1'].
map_pair_types -> map_pair_type ',' map_pair_types : ['$1'|'$3'].
@@ -534,7 +531,7 @@ Erlang code.
-compile([{hipe,[{regalloc,linear_scan}]}]).
-export_type([abstract_clause/0, abstract_expr/0, abstract_form/0,
- abstract_type/0, error_info/0]).
+ abstract_type/0, form_info/0, error_info/0]).
%% Start of Abstract Format
@@ -546,7 +543,6 @@ Erlang code.
| af_export()
| af_import()
| af_export_type()
- | af_optional_callbacks()
| af_compile()
| af_file()
| af_record_decl()
@@ -573,9 +569,6 @@ Erlang code.
-type af_ta_list() :: [{type_name(), arity()}].
--type af_optional_callbacks() ::
- {'attribute', anno(), 'optional_callbacks', af_fa_list()}.
-
-type af_compile() :: {'attribute', anno(), 'compile', any()}.
-type af_file() :: {'attribute', anno(), 'file', {string(), anno()}}.
@@ -867,16 +860,22 @@ Erlang code.
| af_unary_op(af_singleton_integer_type())
| af_binary_op(af_singleton_integer_type()).
--type af_literal() :: af_atom() | af_integer() | af_float() | af_string().
+-type af_literal() :: af_atom()
+ | af_character()
+ | af_float()
+ | af_integer()
+ | af_string().
-type af_atom() :: af_lit_atom(atom()).
-type af_lit_atom(A) :: {'atom', anno(), A}.
--type af_integer() :: {'integer', anno(), non_neg_integer()}.
+-type af_character() :: {'char', anno(), char()}.
-type af_float() :: {'float', anno(), float()}.
+-type af_integer() :: {'integer', anno(), non_neg_integer()}.
+
-type af_string() :: {'string', anno(), string()}.
-type af_match(T) :: {'match', anno(), af_pattern(), T}.
@@ -944,6 +943,10 @@ Erlang code.
-type type_name() :: atom().
+-type form_info() :: {'eof', erl_anno:line()}
+ | {'error', erl_scan:error_info() | error_info()}
+ | {'warning', erl_scan:error_info() | error_info()}.
+
%% End of Abstract Format
%% XXX. To be refined.
@@ -1503,8 +1506,9 @@ type_preop_prec('#') -> {700,800}.
| abstract_type().
-spec map_anno(Fun, Abstr) -> NewAbstr when
- Fun :: fun((Anno) -> Anno),
+ Fun :: fun((Anno) -> NewAnno),
Anno :: erl_anno:anno(),
+ NewAnno :: erl_anno:anno(),
Abstr :: erl_parse_tree(),
NewAbstr :: erl_parse_tree().
@@ -1513,14 +1517,14 @@ map_anno(F0, Abstr) ->
{NewAbstr, []} = modify_anno1(Abstr, [], F),
NewAbstr.
--spec fold_anno(Fun, Acc0, Abstr) -> NewAbstr when
+-spec fold_anno(Fun, Acc0, Abstr) -> Acc1 when
Fun :: fun((Anno, AccIn) -> AccOut),
Anno :: erl_anno:anno(),
Acc0 :: term(),
+ Acc1 :: term(),
AccIn :: term(),
AccOut :: term(),
- Abstr :: erl_parse_tree(),
- NewAbstr :: erl_parse_tree().
+ Abstr :: erl_parse_tree().
fold_anno(F0, Acc0, Abstr) ->
F = fun(A, Acc) -> {A, F0(A, Acc)} end,
@@ -1528,8 +1532,9 @@ fold_anno(F0, Acc0, Abstr) ->
NewAcc.
-spec mapfold_anno(Fun, Acc0, Abstr) -> {NewAbstr, Acc1} when
- Fun :: fun((Anno, AccIn) -> {Anno, AccOut}),
+ Fun :: fun((Anno, AccIn) -> {NewAnno, AccOut}),
Anno :: erl_anno:anno(),
+ NewAnno :: erl_anno:anno(),
Acc0 :: term(),
Acc1 :: term(),
AccIn :: term(),
@@ -1545,7 +1550,9 @@ mapfold_anno(F, Acc0, Abstr) ->
Abstr :: erl_parse_tree().
new_anno(Term) ->
- map_anno(fun erl_anno:new/1, Term).
+ F = fun(L, Acc) -> {erl_anno:new(L), Acc} end,
+ {NewAbstr, []} = modify_anno1(Term, [], F),
+ NewAbstr.
-spec anno_to_term(Abstr) -> term() when
Abstr :: erl_parse_tree().
diff --git a/lib/stdlib/src/erl_pp.erl b/lib/stdlib/src/erl_pp.erl
index ca764675fc..d30cd508c1 100644
--- a/lib/stdlib/src/erl_pp.erl
+++ b/lib/stdlib/src/erl_pp.erl
@@ -70,19 +70,19 @@
%%%
-spec(form(Form) -> io_lib:chars() when
- Form :: erl_parse:abstract_form()).
+ Form :: erl_parse:abstract_form() | erl_parse:form_info()).
form(Thing) ->
form(Thing, none).
-spec(form(Form, Options) -> io_lib:chars() when
- Form :: erl_parse:abstract_form(),
+ Form :: erl_parse:abstract_form() | erl_parse:form_info(),
Options :: options()).
form(Thing, Options) ->
?TEST(Thing),
State = state(Options),
- frmt(lform(Thing, options(Options), State), State).
+ frmt(lform(Thing, options(Options)), State).
-spec(attribute(Attribute) -> io_lib:chars() when
Attribute :: erl_parse:abstract_form()).
@@ -97,7 +97,7 @@ attribute(Thing) ->
attribute(Thing, Options) ->
?TEST(Thing),
State = state(Options),
- frmt(lattribute(Thing, options(Options), State), State).
+ frmt(lattribute(Thing, options(Options)), State).
-spec(function(Function) -> io_lib:chars() when
Function :: erl_parse:abstract_form()).
@@ -217,55 +217,55 @@ encoding(Options) ->
unicode -> unicode
end.
-lform({attribute,Line,Name,Arg}, Opts, State) ->
- lattribute({attribute,Line,Name,Arg}, Opts, State);
-lform({function,Line,Name,Arity,Clauses}, Opts, _State) ->
+lform({attribute,Line,Name,Arg}, Opts) ->
+ lattribute({attribute,Line,Name,Arg}, Opts);
+lform({function,Line,Name,Arity,Clauses}, Opts) ->
lfunction({function,Line,Name,Arity,Clauses}, Opts);
%% These are specials to make it easier for the compiler.
-lform({error,E}, _Opts, _State) ->
+lform({error,E}, _Opts) ->
leaf(format("~p\n", [{error,E}]));
-lform({warning,W}, _Opts, _State) ->
+lform({warning,W}, _Opts) ->
leaf(format("~p\n", [{warning,W}]));
-lform({eof,_Line}, _Opts, _State) ->
+lform({eof,_Line}, _Opts) ->
$\n.
-lattribute({attribute,_Line,type,Type}, Opts, _State) ->
+lattribute({attribute,_Line,type,Type}, Opts) ->
[typeattr(type, Type, Opts),leaf(".\n")];
-lattribute({attribute,_Line,opaque,Type}, Opts, _State) ->
+lattribute({attribute,_Line,opaque,Type}, Opts) ->
[typeattr(opaque, Type, Opts),leaf(".\n")];
-lattribute({attribute,_Line,spec,Arg}, _Opts, _State) ->
+lattribute({attribute,_Line,spec,Arg}, _Opts) ->
[specattr(spec, Arg),leaf(".\n")];
-lattribute({attribute,_Line,callback,Arg}, _Opts, _State) ->
+lattribute({attribute,_Line,callback,Arg}, _Opts) ->
[specattr(callback, Arg),leaf(".\n")];
-lattribute({attribute,_Line,Name,Arg}, Opts, State) ->
- [lattribute(Name, Arg, Opts, State),leaf(".\n")].
+lattribute({attribute,_Line,Name,Arg}, Opts) ->
+ [lattribute(Name, Arg, Opts),leaf(".\n")].
-lattribute(module, {M,Vs}, _Opts, _State) ->
+lattribute(module, {M,Vs}, _Opts) ->
A = a0(),
attr("module",[{var,A,pname(M)},
foldr(fun(V, C) -> {cons,A,{var,A,V},C}
end, {nil,A}, Vs)]);
-lattribute(module, M, _Opts, _State) ->
+lattribute(module, M, _Opts) ->
attr("module", [{var,a0(),pname(M)}]);
-lattribute(export, Falist, _Opts, _State) ->
+lattribute(export, Falist, _Opts) ->
call({var,a0(),"-export"}, [falist(Falist)], 0, options(none));
-lattribute(import, Name, _Opts, _State) when is_list(Name) ->
+lattribute(import, Name, _Opts) when is_list(Name) ->
attr("import", [{var,a0(),pname(Name)}]);
-lattribute(import, {From,Falist}, _Opts, _State) ->
+lattribute(import, {From,Falist}, _Opts) ->
attr("import",[{var,a0(),pname(From)},falist(Falist)]);
-lattribute(export_type, Talist, _Opts, _State) ->
+lattribute(export_type, Talist, _Opts) ->
call({var,a0(),"-export_type"}, [falist(Talist)], 0, options(none));
-lattribute(optional_callbacks, Falist, Opts, _State) ->
+lattribute(optional_callbacks, Falist, Opts) ->
ArgL = try falist(Falist)
catch _:_ -> abstract(Falist, Opts)
end,
call({var,a0(),"-optional_callbacks"}, [ArgL], 0, options(none));
-lattribute(file, {Name,Line}, _Opts, State) ->
- attr("file", [{var,a0(),(State#pp.string_fun)(Name)},{integer,a0(),Line}]);
-lattribute(record, {Name,Is}, Opts, _State) ->
+lattribute(file, {Name,Line}, _Opts) ->
+ attr("file", [{string,a0(),Name},{integer,a0(),Line}]);
+lattribute(record, {Name,Is}, Opts) ->
Nl = leaf(format("-record(~w,", [Name])),
[{first,Nl,record_fields(Is, Opts)},$)];
-lattribute(Name, Arg, Options, _State) ->
+lattribute(Name, Arg, Options) ->
attr(write(Name), [abstract(Arg, Options)]).
abstract(Arg, #options{encoding = Encoding}) ->
@@ -344,27 +344,9 @@ binary_type(I1, I2) ->
map_type(Fs) ->
{first,[$#],map_pair_types(Fs)}.
-map_pair_types(Fs0) ->
- Fs = replace_any_map(Fs0),
+map_pair_types(Fs) ->
tuple_type(Fs, fun map_pair_type/2).
-replace_any_map([{type,Line,map_field_assoc,[KType,VType]}]=Fs) ->
- IsAny = fun({type,_,any,[]}) -> true;
- %% ({var,_,'_'}) -> true;
- (_) -> false
- end,
- case IsAny(KType) andalso IsAny(VType) of
- true ->
- [{type,Line,map_field_assoc,any}];
- false ->
- Fs
- end;
-replace_any_map([F|Fs]) ->
- [F|replace_any_map(Fs)];
-replace_any_map([]) -> [].
-
-map_pair_type({type,_Line,map_field_assoc,any}, _Prec) ->
- leaf("...");
map_pair_type({type,_Line,map_field_assoc,[KType,VType]}, Prec) ->
{list,[{cstep,[ltype(KType, Prec),leaf(" =>")],ltype(VType, Prec)}]};
map_pair_type({type,_Line,map_field_exact,[KType,VType]}, Prec) ->
diff --git a/lib/stdlib/src/escript.erl b/lib/stdlib/src/escript.erl
index b8ce311c35..f53b0e2246 100644
--- a/lib/stdlib/src/escript.erl
+++ b/lib/stdlib/src/escript.erl
@@ -906,6 +906,7 @@ anno(L) ->
fatal(Str) ->
throw(Str).
+-spec my_halt(_) -> no_return().
my_halt(Reason) ->
erlang:halt(Reason).
diff --git a/lib/stdlib/src/ets.erl b/lib/stdlib/src/ets.erl
index 3f74e01692..20de06fd0b 100644
--- a/lib/stdlib/src/ets.erl
+++ b/lib/stdlib/src/ets.erl
@@ -232,20 +232,20 @@ match(_) ->
match_object(_, _) ->
erlang:nif_error(undef).
--spec match_object(Tab, Pattern, Limit) -> {[Match], Continuation} |
+-spec match_object(Tab, Pattern, Limit) -> {[Object], Continuation} |
'$end_of_table' when
Tab :: tab(),
Pattern :: match_pattern(),
Limit :: pos_integer(),
- Match :: [term()],
+ Object :: tuple(),
Continuation :: continuation().
match_object(_, _, _) ->
erlang:nif_error(undef).
--spec match_object(Continuation) -> {[Match], Continuation} |
+-spec match_object(Continuation) -> {[Object], Continuation} |
'$end_of_table' when
- Match :: [term()],
+ Object :: tuple(),
Continuation :: continuation().
match_object(_) ->
diff --git a/lib/stdlib/src/gen_statem.erl b/lib/stdlib/src/gen_statem.erl
index 23bddafeed..3b3477b282 100644
--- a/lib/stdlib/src/gen_statem.erl
+++ b/lib/stdlib/src/gen_statem.erl
@@ -24,7 +24,7 @@
[start/3,start/4,start_link/3,start_link/4,
stop/1,stop/3,
cast/2,call/2,call/3,
- enter_loop/5,enter_loop/6,enter_loop/7,
+ enter_loop/4,enter_loop/5,enter_loop/6,
reply/1,reply/2]).
%% gen callbacks
@@ -63,8 +63,8 @@
{To :: pid(), Tag :: term()}. % Reply-to specifier for call
-type state() ::
- state_name() | % For state callback function StateName/5
- term(). % For state callback function handle_event/5
+ state_name() | % For StateName/3 callback functios
+ term(). % For handle_event/4 callback function
-type state_name() :: atom().
@@ -174,28 +174,33 @@
%% an {ok, ...} tuple. Thereafter the state callbacks are called
%% for all events to this server.
-callback init(Args :: term()) ->
- {callback_mode(), state(), data()} |
- {callback_mode(), state(), data(), [action()] | action()} |
+ {ok, state(), data()} |
+ {ok, state(), data(), [action()] | action()} |
'ignore' |
{'stop', Reason :: term()}.
-%% Example state callback for callback_mode() =:= state_functions
-%% state name 'state_name'.
+%% This callback shall return the callback mode of the callback module.
%%
-%% In this mode all states has to be type state_name() i.e atom().
+%% It is called once after init/0 and code_change/4 but before
+%% the first state callback StateName/3 or handle_event/4.
+-callback callback_mode() -> callback_mode().
+
+%% Example state callback for StateName = 'state_name'
+%% when callback_mode() =:= state_functions.
+%%
+%% In this mode all states has to be of type state_name() i.e atom().
%%
-%% Note that state callbacks and only state callbacks have arity 5
-%% and that is intended.
+%% Note that the only callbacks that have arity 3 are these
+%% StateName/3 callbacks and terminate/3, so the state name
+%% 'terminate' is unusable in this mode.
-callback state_name(
event_type(),
EventContent :: term(),
Data :: data()) ->
state_function_result().
%%
-%% State callback for callback_mode() =:= handle_event_function.
-%%
-%% Note that state callbacks and only state callbacks have arity 5
-%% and that is intended.
+%% State callback for all states
+%% when callback_mode() =:= handle_event_function.
-callback handle_event(
event_type(),
EventContent :: term(),
@@ -219,9 +224,8 @@
OldState :: state(),
OldData :: data(),
Extra :: term()) ->
- {NewCallbackMode :: callback_mode(),
- NewState :: state(),
- NewData :: data()}.
+ {ok, NewState :: state(), NewData :: data()} |
+ (Reason :: term()).
%% Format the callback module state in some sensible that is
%% often condensed way. For StatusOption =:= 'normal' the perferred
@@ -239,10 +243,13 @@
[init/1, % One may use enter_loop/5,6,7 instead
format_status/2, % Has got a default implementation
%%
- state_name/3, % Example for callback_mode =:= state_functions:
- %% there has to be a StateName/5 callback function for every StateName.
+ state_name/3, % Example for callback_mode() =:= state_functions:
+ %% there has to be a StateName/3 callback function
+ %% for every StateName in your state machine but the state name
+ %% 'state_name' does of course not have to be used.
%%
- handle_event/4]). % For callback_mode =:= handle_event_function
+ handle_event/4 % For callback_mode() =:= handle_event_function
+ ]).
%% Type validation functions
callback_mode(CallbackMode) ->
@@ -450,43 +457,35 @@ reply({To,Tag}, Reply) when is_pid(To) ->
%% the same arguments as you would have returned from init/1
-spec enter_loop(
Module :: module(), Opts :: [debug_opt()],
- CallbackMode :: callback_mode(),
State :: state(), Data :: data()) ->
no_return().
-enter_loop(Module, Opts, CallbackMode, State, Data) ->
- enter_loop(Module, Opts, CallbackMode, State, Data, self()).
+enter_loop(Module, Opts, State, Data) ->
+ enter_loop(Module, Opts, State, Data, self()).
%%
-spec enter_loop(
Module :: module(), Opts :: [debug_opt()],
- CallbackMode :: callback_mode(),
State :: state(), Data :: data(),
Server_or_Actions ::
server_name() | pid() | [action()]) ->
no_return().
-enter_loop(Module, Opts, CallbackMode, State, Data, Server_or_Actions) ->
+enter_loop(Module, Opts, State, Data, Server_or_Actions) ->
if
is_list(Server_or_Actions) ->
- enter_loop(
- Module, Opts, CallbackMode, State, Data,
- self(), Server_or_Actions);
+ enter_loop(Module, Opts, State, Data, self(), Server_or_Actions);
true ->
- enter_loop(
- Module, Opts, CallbackMode, State, Data,
- Server_or_Actions, [])
+ enter_loop(Module, Opts, State, Data, Server_or_Actions, [])
end.
%%
-spec enter_loop(
Module :: module(), Opts :: [debug_opt()],
- CallbackMode :: callback_mode(),
State :: state(), Data :: data(),
Server :: server_name() | pid(),
Actions :: [action()] | action()) ->
no_return().
-enter_loop(Module, Opts, CallbackMode, State, Data, Server, Actions) ->
+enter_loop(Module, Opts, State, Data, Server, Actions) ->
is_atom(Module) orelse error({atom,Module}),
- callback_mode(CallbackMode) orelse error({callback_mode,CallbackMode}),
Parent = gen:get_parent(),
- enter(Module, Opts, CallbackMode, State, Data, Server, Actions, Parent).
+ enter(Module, Opts, State, Data, Server, Actions, Parent).
%%---------------------------------------------------------------------------
%% API helpers
@@ -514,7 +513,7 @@ send(Proc, Msg) ->
end.
%% Here the init_it/6 and enter_loop/5,6,7 functions converge
-enter(Module, Opts, CallbackMode, State, Data, Server, Actions, Parent) ->
+enter(Module, Opts, State, Data, Server, Actions, Parent) ->
%% The values should already have been type checked
Name = gen:get_proc_name(Server),
Debug = gen:debug_options(Name, Opts),
@@ -530,7 +529,7 @@ enter(Module, Opts, CallbackMode, State, Data, Server, Actions, Parent) ->
[Actions,{postpone,false}]
end,
S = #{
- callback_mode => CallbackMode,
+ callback_mode => undefined,
module => Module,
name => Name,
%% All fields below will be replaced according to the arguments to
@@ -558,9 +557,15 @@ init_it(Starter, Parent, ServerRef, Module, Args, Opts) ->
Result ->
init_result(Starter, Parent, ServerRef, Module, Result, Opts);
Class:Reason ->
+ Stacktrace = erlang:get_stacktrace(),
+ Name = gen:get_proc_name(ServerRef),
gen:unregister_name(ServerRef),
proc_lib:init_ack(Starter, {error,Reason}),
- erlang:raise(Class, Reason, erlang:get_stacktrace())
+ error_info(
+ Class, Reason, Stacktrace,
+ #{name => Name, callback_mode => undefined},
+ [], [], undefined),
+ erlang:raise(Class, Reason, Stacktrace)
end.
%%---------------------------------------------------------------------------
@@ -568,30 +573,12 @@ init_it(Starter, Parent, ServerRef, Module, Args, Opts) ->
init_result(Starter, Parent, ServerRef, Module, Result, Opts) ->
case Result of
- {CallbackMode,State,Data} ->
- case callback_mode(CallbackMode) of
- true ->
- proc_lib:init_ack(Starter, {ok,self()}),
- enter(
- Module, Opts, CallbackMode, State, Data,
- ServerRef, [], Parent);
- false ->
- Error = {callback_mode,CallbackMode},
- proc_lib:init_ack(Starter, {error,Error}),
- exit(Error)
- end;
- {CallbackMode,State,Data,Actions} ->
- case callback_mode(CallbackMode) of
- true ->
- proc_lib:init_ack(Starter, {ok,self()}),
- enter(
- Module, Opts, CallbackMode, State, Data,
- ServerRef, Actions, Parent);
- false ->
- Error = {callback_mode,CallbackMode},
- proc_lib:init_ack(Starter, {error,Error}),
- exit(Error)
- end;
+ {ok,State,Data} ->
+ proc_lib:init_ack(Starter, {ok,self()}),
+ enter(Module, Opts, State, Data, ServerRef, [], Parent);
+ {ok,State,Data,Actions} ->
+ proc_lib:init_ack(Starter, {ok,self()}),
+ enter(Module, Opts, State, Data, ServerRef, Actions, Parent);
{stop,Reason} ->
gen:unregister_name(ServerRef),
proc_lib:init_ack(Starter, {error,Reason}),
@@ -601,8 +588,14 @@ init_result(Starter, Parent, ServerRef, Module, Result, Opts) ->
proc_lib:init_ack(Starter, ignore),
exit(normal);
_ ->
- Error = {bad_return_value,Result},
+ Name = gen:get_proc_name(ServerRef),
+ gen:unregister_name(ServerRef),
+ Error = {bad_return_from_init,Result},
proc_lib:init_ack(Starter, {error,Error}),
+ error_info(
+ error, Error, ?STACKTRACE(),
+ #{name => Name, callback_mode => undefined},
+ [], [], undefined),
exit(Error)
end.
@@ -630,11 +623,9 @@ system_code_change(
Result -> Result
end
of
- {NewCallbackMode,NewState,NewData} ->
- callback_mode(NewCallbackMode) orelse
- error({callback_mode,NewCallbackMode}),
+ {ok,NewState,NewData} ->
{ok,
- S#{callback_mode := NewCallbackMode,
+ S#{callback_mode := undefined,
state := NewState,
data := NewData}};
{ok,_} = Error ->
@@ -675,14 +666,14 @@ format_status(
%% them, not as the real erlang messages. Use trace for that.
%%---------------------------------------------------------------------------
-print_event(Dev, {in,Event}, {Name,_}) ->
+print_event(Dev, {in,Event}, {Name,State}) ->
io:format(
- Dev, "*DBG* ~p received ~s~n",
- [Name,event_string(Event)]);
-print_event(Dev, {out,Reply,{To,_Tag}}, {Name,_}) ->
+ Dev, "*DBG* ~p receive ~s in state ~p~n",
+ [Name,event_string(Event),State]);
+print_event(Dev, {out,Reply,{To,_Tag}}, {Name,State}) ->
io:format(
- Dev, "*DBG* ~p sent ~p to ~p~n",
- [Name,Reply,To]);
+ Dev, "*DBG* ~p send ~p to ~p from state ~p~n",
+ [Name,Reply,To,State]);
print_event(Dev, {Tag,Event,NextState}, {Name,State}) ->
StateString =
case NextState of
@@ -874,22 +865,36 @@ loop_event(
%%
try
case CallbackMode of
+ undefined ->
+ Module:callback_mode();
state_functions ->
- Module:State(Type, Content, Data);
+ erlang:apply(Module, State, [Type,Content,Data]);
handle_event_function ->
Module:handle_event(Type, Content, State, Data)
- end of
+ end
+ of
+ Result when CallbackMode =:= undefined ->
+ loop_event_callback_mode(
+ Parent, Debug, S, Events, State, Data, P, Event, Result);
Result ->
loop_event_result(
Parent, Debug, S, Events, State, Data, P, Event, Result)
catch
+ Result when CallbackMode =:= undefined ->
+ loop_event_callback_mode(
+ Parent, Debug, S, Events, State, Data, P, Event, Result);
Result ->
loop_event_result(
Parent, Debug, S, Events, State, Data, P, Event, Result);
- error:badarg when CallbackMode =:= state_functions ->
+ error:badarg ->
case erlang:get_stacktrace() of
- [{erlang,apply,[Module,State,_],_}|Stacktrace] ->
- Args = [Type,Content,Data],
+ [{erlang,apply,
+ [Module,State,[Type,Content,Data]=Args],
+ _}
+ |Stacktrace]
+ when CallbackMode =:= state_functions ->
+ %% We get here e.g if apply fails
+ %% due to State not being an atom
terminate(
error,
{undef_state_function,{Module,State,Args}},
@@ -901,24 +906,29 @@ loop_event(
Debug, S, [Event|Events], State, Data, P)
end;
error:undef ->
- %% Process an undef to check for the simple mistake
+ %% Process undef to check for the simple mistake
%% of calling a nonexistent state function
+ %% to make the undef more precise
case erlang:get_stacktrace() of
- [{Module,State,
- [Type,Content,Data]=Args,
- _}
+ [{Module,callback_mode,[]=Args,_}
+ |Stacktrace]
+ when CallbackMode =:= undefined ->
+ terminate(
+ error,
+ {undef_callback,{Module,callback_mode,Args}},
+ Stacktrace,
+ Debug, S, [Event|Events], State, Data, P);
+ [{Module,State,[Type,Content,Data]=Args,_}
|Stacktrace]
- when CallbackMode =:= state_functions ->
+ when CallbackMode =:= state_functions ->
terminate(
error,
{undef_state_function,{Module,State,Args}},
Stacktrace,
Debug, S, [Event|Events], State, Data, P);
- [{Module,handle_event,
- [Type,Content,State,Data]=Args,
- _}
+ [{Module,handle_event,[Type,Content,State,Data]=Args,_}
|Stacktrace]
- when CallbackMode =:= handle_event_function ->
+ when CallbackMode =:= handle_event_function ->
terminate(
error,
{undef_state_function,{Module,handle_event,Args}},
@@ -936,6 +946,25 @@ loop_event(
Debug, S, [Event|Events], State, Data, P)
end.
+%% Interpret callback_mode() result
+loop_event_callback_mode(
+ Parent, Debug, S, Events, State, Data, P, Event, CallbackMode) ->
+ case callback_mode(CallbackMode) of
+ true ->
+ Hibernate = false, % We have already GC:ed recently
+ loop_event(
+ Parent, Debug,
+ S#{callback_mode := CallbackMode},
+ Events,
+ State, Data, P, Event, Hibernate);
+ false ->
+ terminate(
+ error,
+ {bad_return_from_callback_mode,CallbackMode},
+ ?STACKTRACE(),
+ Debug, S, [Event|Events], State, Data, P)
+ end.
+
%% Interpret all callback return variants
loop_event_result(
Parent, Debug, S, Events, State, Data, P, Event, Result) ->
@@ -988,7 +1017,9 @@ loop_event_result(
State, Data, P, Event, State, Actions);
_ ->
terminate(
- error, {bad_return_value,Result}, ?STACKTRACE(),
+ error,
+ {bad_return_from_state_function,Result},
+ ?STACKTRACE(),
Debug, S, [Event|Events], State, Data, P)
end.
@@ -1025,20 +1056,26 @@ loop_event_actions(
Postpone, Hibernate, Timeout, NextEvents);
false ->
terminate(
- error, {bad_action,Action}, ?STACKTRACE(),
+ error,
+ {bad_action_from_state_function,Action},
+ ?STACKTRACE(),
Debug, S, [Event|Events], State, NewData, P)
end;
{next_event,Type,Content} ->
case event_type(Type) of
true ->
+ NewDebug =
+ sys_debug(Debug, S, State, {in,{Type,Content}}),
loop_event_actions(
- Parent, Debug, S, Events,
+ Parent, NewDebug, S, Events,
State, NewData, P, Event, NextState, Actions,
Postpone, Hibernate, Timeout,
[{Type,Content}|NextEvents]);
false ->
terminate(
- error, {bad_action,Action}, ?STACKTRACE(),
+ error,
+ {bad_action_from_state_function,Action},
+ ?STACKTRACE(),
Debug, S, [Event|Events], State, NewData, P)
end;
%% Actions that set options
@@ -1049,7 +1086,9 @@ loop_event_actions(
NewPostpone, Hibernate, Timeout, NextEvents);
{postpone,_} ->
terminate(
- error, {bad_action,Action}, ?STACKTRACE(),
+ error,
+ {bad_action_from_state_function,Action},
+ ?STACKTRACE(),
Debug, S, [Event|Events], State, NewData, P);
postpone ->
loop_event_actions(
@@ -1063,7 +1102,9 @@ loop_event_actions(
Postpone, NewHibernate, Timeout, NextEvents);
{hibernate,_} ->
terminate(
- error, {bad_action,Action}, ?STACKTRACE(),
+ error,
+ {bad_action_from_state_function,Action},
+ ?STACKTRACE(),
Debug, S, [Event|Events], State, NewData, P);
hibernate ->
loop_event_actions(
@@ -1082,7 +1123,9 @@ loop_event_actions(
Postpone, Hibernate, NewTimeout, NextEvents);
{timeout,_,_} ->
terminate(
- error, {bad_action,Action}, ?STACKTRACE(),
+ error,
+ {bad_action_from_state_function,Action},
+ ?STACKTRACE(),
Debug, S, [Event|Events], State, NewData, P);
infinity -> % Clear timer - it will never trigger
loop_event_actions(
@@ -1097,7 +1140,9 @@ loop_event_actions(
Postpone, Hibernate, NewTimeout, NextEvents);
_ ->
terminate(
- error, {bad_action,Action}, ?STACKTRACE(),
+ error,
+ {bad_action_from_state_function,Action},
+ ?STACKTRACE(),
Debug, S, [Event|Events], State, NewData, P)
end;
%%
@@ -1169,7 +1214,9 @@ do_reply_then_terminate(
NewDebug, S, Q, State, Data, P, Rs);
_ ->
terminate(
- error, {bad_action,R}, ?STACKTRACE(),
+ error,
+ {bad_reply_action_from_state_function,R},
+ ?STACKTRACE(),
Debug, S, Q, State, Data, P)
end.
@@ -1188,8 +1235,9 @@ terminate(
C:R ->
ST = erlang:get_stacktrace(),
error_info(
- C, R, ST, Debug, S, Q, P,
+ C, R, ST, S, Q, P,
format_status(terminate, get(), S, State, Data)),
+ sys:print_log(Debug),
erlang:raise(C, R, ST)
end,
case Reason of
@@ -1198,8 +1246,9 @@ terminate(
{shutdown,_} -> ok;
_ ->
error_info(
- Class, Reason, Stacktrace, Debug, S, Q, P,
- format_status(terminate, get(), S, State, Data))
+ Class, Reason, Stacktrace, S, Q, P,
+ format_status(terminate, get(), S, State, Data)),
+ sys:print_log(Debug)
end,
case Stacktrace of
[] ->
@@ -1209,7 +1258,7 @@ terminate(
end.
error_info(
- Class, Reason, Stacktrace, Debug,
+ Class, Reason, Stacktrace,
#{name := Name, callback_mode := CallbackMode},
Q, P, FmtData) ->
{FixedReason,FixedStacktrace} =
@@ -1276,9 +1325,7 @@ error_info(
case FixedStacktrace of
[] -> [];
_ -> [FixedStacktrace]
- end),
- sys:print_log(Debug),
- ok.
+ end).
%% Call Module:format_status/2 or return a default value
@@ -1291,7 +1338,7 @@ format_status(Opt, PDict, #{module := Module}, State, Data) ->
_:_ ->
format_status_default(
Opt, State,
- "Module:format_status/2 crashed")
+ atom_to_list(Module) ++ ":format_status/2 crashed")
end;
false ->
format_status_default(Opt, State, Data)
@@ -1299,10 +1346,10 @@ format_status(Opt, PDict, #{module := Module}, State, Data) ->
%% The default Module:format_status/2
format_status_default(Opt, State, Data) ->
- SSD = {State,Data},
+ StateData = {State,Data},
case Opt of
terminate ->
- SSD;
+ StateData;
_ ->
- [{data,[{"State",SSD}]}]
+ [{data,[{"State",StateData}]}]
end.
diff --git a/lib/stdlib/src/lib.erl b/lib/stdlib/src/lib.erl
index 6fba63a895..56654097d9 100644
--- a/lib/stdlib/src/lib.erl
+++ b/lib/stdlib/src/lib.erl
@@ -73,7 +73,7 @@ nonl([H|T]) -> [H|nonl(T)].
send(To, Msg) -> To ! Msg.
--spec sendw(To, Msg) -> Msg when
+-spec sendw(To, Msg) -> term() when
To :: pid() | atom() | {atom(), node()},
Msg :: term().
diff --git a/lib/stdlib/src/ms_transform.erl b/lib/stdlib/src/ms_transform.erl
index 24b5fde1db..c0eea652e7 100644
--- a/lib/stdlib/src/ms_transform.erl
+++ b/lib/stdlib/src/ms_transform.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -224,8 +224,9 @@ transform_from_shell(Dialect, Clauses, BoundEnvironment) ->
%% Called when translating during compiling
%%
--spec parse_transform(Forms, Options) -> Forms when
- Forms :: [erl_parse:abstract_form()],
+-spec parse_transform(Forms, Options) -> Forms2 when
+ Forms :: [erl_parse:abstract_form() | erl_parse:form_info()],
+ Forms2 :: [erl_parse:abstract_form() | erl_parse:form_info()],
Options :: term().
parse_transform(Forms, _Options) ->
diff --git a/lib/stdlib/src/otp_internal.erl b/lib/stdlib/src/otp_internal.erl
index 7a59523f06..3bd338071b 100644
--- a/lib/stdlib/src/otp_internal.erl
+++ b/lib/stdlib/src/otp_internal.erl
@@ -35,7 +35,7 @@
obsolete(Module, Name, Arity) ->
case obsolete_1(Module, Name, Arity) of
{deprecated=Tag,{_,_,_}=Replacement} ->
- {Tag,Replacement,"in a future release"};
+ {Tag,Replacement,"a future release"};
{_,String}=Ret when is_list(String) ->
Ret;
{_,_,_}=Ret ->
@@ -541,6 +541,8 @@ obsolete_1(random, _, _) ->
"use the 'rand' module instead"};
obsolete_1(code, rehash, 0) ->
{deprecated, "deprecated because the code path cache feature has been removed"};
+obsolete_1(queue, lait, 1) ->
+ {deprecated, {queue,liat,1}};
%% Removed in OTP 19.
diff --git a/lib/stdlib/src/proc_lib.erl b/lib/stdlib/src/proc_lib.erl
index 4a19603ec2..3dc1848550 100644
--- a/lib/stdlib/src/proc_lib.erl
+++ b/lib/stdlib/src/proc_lib.erl
@@ -479,18 +479,12 @@ trans_init(gen,init_it,[gen_server,_,_,supervisor_bridge,[Module|_],_]) ->
{supervisor_bridge,Module,1};
trans_init(gen,init_it,[gen_server,_,_,_,supervisor_bridge,[Module|_],_]) ->
{supervisor_bridge,Module,1};
-trans_init(gen,init_it,[GenMod,_,_,Module,_,_])
- when GenMod =:= gen_server;
- GenMod =:= gen_statem;
- GenMod =:= gen_fsm ->
- {Module,init,1};
-trans_init(gen,init_it,[GenMod,_,_,_,Module|_])
- when GenMod =:= gen_server;
- GenMod =:= gen_statem;
- GenMod =:= gen_fsm ->
- {Module,init,1};
trans_init(gen,init_it,[gen_event|_]) ->
{gen_event,init_it,6};
+trans_init(gen,init_it,[_GenMod,_,_,Module,_,_]) when is_atom(Module) ->
+ {Module,init,1};
+trans_init(gen,init_it,[_GenMod,_,_,_,Module|_]) when is_atom(Module) ->
+ {Module,init,1};
trans_init(M, F, A) when is_atom(M), is_atom(F) ->
{M,F,length(A)}.
diff --git a/lib/stdlib/src/proplists.erl b/lib/stdlib/src/proplists.erl
index 8e99ec0ed9..5356467b19 100644
--- a/lib/stdlib/src/proplists.erl
+++ b/lib/stdlib/src/proplists.erl
@@ -438,8 +438,9 @@ substitute_aliases_1([], P) ->
%% @see normalize/2
-spec substitute_negations(Negations, ListIn) -> ListOut when
- Negations :: [{Key, Key}],
- Key :: term(),
+ Negations :: [{Key1, Key2}],
+ Key1 :: term(),
+ Key2 :: term(),
ListIn :: [term()],
ListOut :: [term()].
diff --git a/lib/stdlib/src/qlc.erl b/lib/stdlib/src/qlc.erl
index b396ba7057..f3665824f2 100644
--- a/lib/stdlib/src/qlc.erl
+++ b/lib/stdlib/src/qlc.erl
@@ -734,10 +734,11 @@ table(TraverseFun, Options) when is_function(TraverseFun) ->
table(T1, T2) ->
erlang:error(badarg, [T1, T2]).
--spec(transform_from_evaluator(LC, Bs) -> Expr when
+-spec(transform_from_evaluator(LC, Bs) -> Return when
LC :: abstract_expr(),
- Expr :: abstract_expr(),
- Bs :: erl_eval:binding_struct()).
+ Bs :: erl_eval:binding_struct(),
+ Return :: {ok, abstract_expr()}
+ | {not_ok, {error, module(), Reason :: term()}}).
transform_from_evaluator(LC, Bs0) ->
qlc_pt:transform_from_evaluator(LC, Bs0).
diff --git a/lib/stdlib/src/qlc_pt.erl b/lib/stdlib/src/qlc_pt.erl
index e4b9768b12..0db63b81f4 100644
--- a/lib/stdlib/src/qlc_pt.erl
+++ b/lib/stdlib/src/qlc_pt.erl
@@ -67,8 +67,8 @@
%%%
-spec(parse_transform(Forms, Options) -> Forms2 when
- Forms :: [erl_parse:abstract_form()],
- Forms2 :: [erl_parse:abstract_form()],
+ Forms :: [erl_parse:abstract_form() | erl_parse:form_info()],
+ Forms2 :: [erl_parse:abstract_form() | erl_parse:form_info()],
Options :: [Option],
Option :: type_checker | compile:option()).
@@ -117,19 +117,21 @@ parse_transform(Forms0, Options) ->
true = ets:delete(NodeInfo)
end.
--spec(transform_from_evaluator(LC, Bs) -> Expr when
+-spec(transform_from_evaluator(LC, Bs) -> Return when
LC :: erl_parse:abstract_expr(),
- Expr :: erl_parse:abstract_expr(),
- Bs :: erl_eval:binding_struct()).
+ Bs :: erl_eval:binding_struct(),
+ Return :: {ok, erl_parse:abstract_expr()}
+ | {not_ok, {error, module(), Reason :: term()}}).
transform_from_evaluator(LC, Bindings) ->
?DEBUG("qlc Parse Transform (Evaluator Version)~n", []),
transform_expression(LC, Bindings, false).
--spec(transform_expression(LC, Bs) -> Expr when
+-spec(transform_expression(LC, Bs) -> Return when
LC :: erl_parse:abstract_expr(),
- Expr :: erl_parse:abstract_expr(),
- Bs :: erl_eval:binding_struct()).
+ Bs :: erl_eval:binding_struct(),
+ Return :: {ok, erl_parse:abstract_expr()}
+ | {not_ok, [{error, Reason :: term()}]}).
transform_expression(LC, Bindings) ->
transform_expression(LC, Bindings, true).
diff --git a/lib/stdlib/src/queue.erl b/lib/stdlib/src/queue.erl
index d4d1904886..11c0aa8d2b 100644
--- a/lib/stdlib/src/queue.erl
+++ b/lib/stdlib/src/queue.erl
@@ -31,10 +31,14 @@
%% Okasaki API from klacke
-export([cons/2,head/1,tail/1,
- snoc/2,last/1,daeh/1,init/1,liat/1,lait/1]).
+ snoc/2,last/1,daeh/1,init/1,liat/1]).
-export_type([queue/0, queue/1]).
+%% Mis-spelled, deprecated.
+-export([lait/1]).
+-deprecated([lait/1]).
+
%%--------------------------------------------------------------------------
%% Efficient implementation of double ended fifo queues
%%
diff --git a/lib/stdlib/src/shell.erl b/lib/stdlib/src/shell.erl
index 82a3a2be4f..28f37ef8bf 100644
--- a/lib/stdlib/src/shell.erl
+++ b/lib/stdlib/src/shell.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2015. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -768,6 +768,8 @@ used_records({call,_,{atom,_,record_info},[A,{atom,_,Name}]}) ->
{name, Name, A};
used_records({call,Line,{tuple,_,[M,F]},As}) ->
used_records({call,Line,{remote,Line,M,F},As});
+used_records({type,_,record,[{atom,_,Name}|Fs]}) ->
+ {name, Name, Fs};
used_records(T) when is_tuple(T) ->
{expr, tuple_to_list(T)};
used_records(E) ->
diff --git a/lib/stdlib/src/sofs.erl b/lib/stdlib/src/sofs.erl
index b18df2ad09..c244e06ca4 100644
--- a/lib/stdlib/src/sofs.erl
+++ b/lib/stdlib/src/sofs.erl
@@ -621,6 +621,9 @@ canonical_relation(Sets) when ?IS_SET(Sets) ->
%%% Functions on binary relations only.
%%%
+-spec(rel2fam(BinRel) -> Family when
+ Family :: family(),
+ BinRel :: binary_relation()).
rel2fam(R) ->
relation_to_family(R).
diff --git a/lib/stdlib/src/stdlib.app.src b/lib/stdlib/src/stdlib.app.src
index 32bcdc4f2a..09176d2ca0 100644
--- a/lib/stdlib/src/stdlib.app.src
+++ b/lib/stdlib/src/stdlib.app.src
@@ -106,7 +106,7 @@
dets]},
{applications, [kernel]},
{env, []},
- {runtime_dependencies, ["sasl-2.6","kernel-4.1","erts-7.3","crypto-3.3",
+ {runtime_dependencies, ["sasl-3.0","kernel-5.0","erts-8.0","crypto-3.3",
"compiler-5.0"]}
]}.
diff --git a/lib/stdlib/src/supervisor.erl b/lib/stdlib/src/supervisor.erl
index 38b764541a..c81e72689c 100644
--- a/lib/stdlib/src/supervisor.erl
+++ b/lib/stdlib/src/supervisor.erl
@@ -30,7 +30,7 @@
%% Internal exports
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
- terminate/2, code_change/3]).
+ terminate/2, code_change/3, format_status/2]).
-export([try_again_restart/2]).
%% For release_handler only
@@ -246,7 +246,7 @@ check_childspecs(ChildSpecs) when is_list(ChildSpecs) ->
check_childspecs(X) -> {error, {badarg, X}}.
%%%-----------------------------------------------------------------
-%%% Called by timer:apply_after from restart/2
+%%% Called by restart/2
-spec try_again_restart(SupRef, Child) -> ok when
SupRef :: sup_ref(),
Child :: child_id() | pid().
@@ -264,8 +264,13 @@ cast(Supervisor, Req) ->
get_callback_module(Pid) ->
{status, _Pid, {module, _Mod},
[_PDict, _SysState, _Parent, _Dbg, Misc]} = sys:get_status(Pid),
- [_Header, _Data, {data, [{"State", State}]}] = Misc,
- State#state.module.
+ case lists:keyfind(supervisor, 1, Misc) of
+ {supervisor, [{"Callback", Mod}]} ->
+ Mod;
+ _ ->
+ [_Header, _Data, {data, [{"State", State}]} | _] = Misc,
+ State#state.module
+ end.
%%% ---------------------------------------------------
%%%
@@ -571,8 +576,8 @@ count_child(#child{pid = Pid, child_type = supervisor},
end.
-%%% If a restart attempt failed, this message is sent via
-%%% timer:apply_after(0,...) in order to give gen_server the chance to
+%%% If a restart attempt failed, this message is cast
+%%% from restart/2 in order to give gen_server the chance to
%%% check it's inbox before trying again.
-spec handle_cast({try_again_restart, child_id() | pid()}, state()) ->
{'noreply', state()} | {stop, shutdown, state()}.
@@ -790,16 +795,10 @@ restart(Child, State) ->
Id = if ?is_simple(State) -> Child#child.pid;
true -> Child#child.name
end,
- {ok, _TRef} = timer:apply_after(0,
- ?MODULE,
- try_again_restart,
- [self(),Id]),
+ ok = try_again_restart(self(), Id),
{ok,NState2};
{try_again, NState2, #child{name=ChName}} ->
- {ok, _TRef} = timer:apply_after(0,
- ?MODULE,
- try_again_restart,
- [self(),ChName]),
+ ok = try_again_restart(self(), ChName),
{ok,NState2};
Other ->
Other
@@ -1456,3 +1455,9 @@ report_progress(Child, SupName) ->
Progress = [{supervisor, SupName},
{started, extract_child(Child)}],
error_logger:info_report(progress, Progress).
+
+format_status(terminate, [_PDict, State]) ->
+ State;
+format_status(_, [_PDict, State]) ->
+ [{data, [{"State", State}]},
+ {supervisor, [{"Callback", State#state.module}]}].
diff --git a/lib/stdlib/src/zip.erl b/lib/stdlib/src/zip.erl
index f8ba6f18e9..340cc21390 100644
--- a/lib/stdlib/src/zip.erl
+++ b/lib/stdlib/src/zip.erl
@@ -279,7 +279,8 @@ do_openzip_get(F, #openzip{files = Files, in = In0, input = Input,
case file_name_search(F, Files) of
{#zip_file{offset = Offset},_}=ZFile ->
In1 = Input({seek, bof, Offset}, In0),
- case get_z_file(In1, Z, Input, Output, [], fun silent/1, CWD, ZFile) of
+ case get_z_file(In1, Z, Input, Output, [], fun silent/1,
+ CWD, ZFile, fun all/1) of
{file, R, _In2} -> {ok, R};
_ -> throw(file_not_found)
end;
@@ -1403,9 +1404,10 @@ get_z_files([{#zip_file{offset = Offset},_} = ZFile | Rest], Z, In0,
true ->
In1 = Input({seek, bof, Offset}, In0),
{In2, Acc1} =
- case get_z_file(In1, Z, Input, Output, OpO, FB, CWD, ZFile) of
+ case get_z_file(In1, Z, Input, Output, OpO, FB,
+ CWD, ZFile, Filter) of
{file, GZD, Inx} -> {Inx, [GZD | Acc0]};
- {dir, Inx} -> {Inx, Acc0}
+ {_, Inx} -> {Inx, Acc0}
end,
get_z_files(Rest, Z, In2, Opts, Acc1);
_ ->
@@ -1413,7 +1415,8 @@ get_z_files([{#zip_file{offset = Offset},_} = ZFile | Rest], Z, In0,
end.
%% get a file from the archive, reading chunks
-get_z_file(In0, Z, Input, Output, OpO, FB, CWD, {ZipFile,Extra}) ->
+get_z_file(In0, Z, Input, Output, OpO, FB,
+ CWD, {ZipFile,Extra}, Filter) ->
case Input({read, ?LOCAL_FILE_HEADER_SZ}, In0) of
{eof, In1} ->
{eof, In1};
@@ -1433,29 +1436,64 @@ get_z_file(In0, Z, Input, Output, OpO, FB, CWD, {ZipFile,Extra}) ->
end,
{BFileN, In3} = Input({read, FileNameLen + ExtraLen}, In1),
{FileName, _} = get_file_name_extra(FileNameLen, ExtraLen, BFileN),
- FileName1 = add_cwd(CWD, FileName),
- case lists:last(FileName) of
- $/ ->
- %% perhaps this should always be done?
- Output({ensure_dir,FileName1},[]),
- {dir, In3};
- _ ->
- %% FileInfo = local_file_header_to_file_info(LH)
- %%{Out, In4, CRC, UncompSize} =
- {Out, In4, CRC, _UncompSize} =
- get_z_data(CompMethod, In3, FileName1,
- CompSize, Input, Output, OpO, Z),
- In5 = skip_z_data_descriptor(GPFlag, Input, In4),
- %% TODO This should be fixed some day:
- %% In5 = Input({set_file_info, FileName, FileInfo#file_info{size=UncompSize}}, In4),
- FB(FileName),
- CRC =:= CRC32 orelse throw({bad_crc, FileName}),
- {file, Out, In5}
+ ReadAndWrite =
+ case check_valid_location(CWD, FileName) of
+ {true,FileName1} ->
+ true;
+ {false,FileName1} ->
+ Filter({ZipFile#zip_file{name = FileName1},Extra})
+ end,
+ case ReadAndWrite of
+ true ->
+ case lists:last(FileName) of
+ $/ ->
+ %% perhaps this should always be done?
+ Output({ensure_dir,FileName1},[]),
+ {dir, In3};
+ _ ->
+ %% FileInfo = local_file_header_to_file_info(LH)
+ %%{Out, In4, CRC, UncompSize} =
+ {Out, In4, CRC, _UncompSize} =
+ get_z_data(CompMethod, In3, FileName1,
+ CompSize, Input, Output, OpO, Z),
+ In5 = skip_z_data_descriptor(GPFlag, Input, In4),
+ %% TODO This should be fixed some day:
+ %% In5 = Input({set_file_info, FileName,
+ %% FileInfo#file_info{size=UncompSize}}, In4),
+ FB(FileName),
+ CRC =:= CRC32 orelse throw({bad_crc, FileName}),
+ {file, Out, In5}
+ end;
+ false ->
+ {ignore, In3}
end;
_ ->
throw(bad_local_file_header)
end.
+%% make sure FileName doesn't have relative path that points over CWD
+check_valid_location(CWD, FileName) ->
+ %% check for directory traversal exploit
+ case check_dir_level(filename:split(FileName), 0) of
+ {FileOrDir,Level} when Level < 0 ->
+ CWD1 = if CWD == "" -> "./";
+ true -> CWD
+ end,
+ error_logger:format("Illegal path: ~ts, extracting in ~ts~n",
+ [add_cwd(CWD,FileName),CWD1]),
+ {false,add_cwd(CWD, FileOrDir)};
+ _ ->
+ {true,add_cwd(CWD, FileName)}
+ end.
+
+check_dir_level([FileOrDir], Level) ->
+ {FileOrDir,Level};
+check_dir_level(["." | Parts], Level) ->
+ check_dir_level(Parts, Level);
+check_dir_level([".." | Parts], Level) ->
+ check_dir_level(Parts, Level-1);
+check_dir_level([_Dir | Parts], Level) ->
+ check_dir_level(Parts, Level+1).
get_file_name_extra(FileNameLen, ExtraLen, B) ->
case B of
diff --git a/lib/stdlib/test/binary_module_SUITE.erl b/lib/stdlib/test/binary_module_SUITE.erl
index 55fdcdd054..c5cfea5e9e 100644
--- a/lib/stdlib/test/binary_module_SUITE.erl
+++ b/lib/stdlib/test/binary_module_SUITE.erl
@@ -19,9 +19,7 @@
%%
-module(binary_module_SUITE).
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_testcase/2, end_per_testcase/2,
- init_per_group/2,end_per_group/2,
+-export([all/0, suite/0,
interesting/1,scope_return/1,random_ref_comp/1,random_ref_sr_comp/1,
random_ref_fla_comp/1,parts/1, bin_to_list/1, list_to_bin/1,
copy/1, referenced/1,guard/1,encode_decode/1,badargs/1,longest_common_trap/1]).
@@ -30,15 +28,9 @@
-include_lib("common_test/include/ct.hrl").
-init_per_testcase(_Case, Config) ->
- Config.
-
-end_per_testcase(_Case, _Config) ->
- ok.
-
suite() ->
[{ct_hooks,[ts_install_cth]},
- {timetrap,{minutes,30}}].
+ {timetrap,{minutes,10}}].
all() ->
[scope_return,interesting, random_ref_fla_comp, random_ref_sr_comp,
@@ -46,21 +38,6 @@ all() ->
referenced, guard, encode_decode, badargs,
longest_common_trap].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-define(MASK_ERROR(EXPR),mask_error((catch (EXPR)))).
@@ -961,6 +938,7 @@ random_parts(X,N) ->
%% Test pseudorandomly generated cases against reference implementation.
random_ref_comp(Config) when is_list(Config) ->
+ ct:timetrap({minutes,30}), %% valgrind needs a lot of time
put(success_counter,0),
rand:seed(exsplus, {1271,769940,559934}),
Nr = {1,40},
@@ -991,6 +969,7 @@ random_ref_comp(Config) when is_list(Config) ->
%% Test pseudorandomly generated cases against reference implementation
%% of split and replace.
random_ref_sr_comp(Config) when is_list(Config) ->
+ ct:timetrap({minutes,30}), %% valgrind needs a lot
put(success_counter,0),
rand:seed(exsplus, {1271,769940,559934}),
Nr = {1,40},
diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl
index b0214e5238..d916eb3eef 100644
--- a/lib/stdlib/test/erl_lint_SUITE.erl
+++ b/lib/stdlib/test/erl_lint_SUITE.erl
@@ -2003,7 +2003,7 @@ otp_5362(Config) when is_list(Config) ->
{error,
[{5,erl_lint,{call_to_redefined_old_bif,{spawn,1}}}],
[{4,erl_lint,{deprecated,{erlang,hash,2},{erlang,phash2,2},
- "in a future release"}}]}},
+ "a future release"}}]}},
{otp_5362_5,
<<"-compile(nowarn_deprecated_function).
@@ -2063,7 +2063,7 @@ otp_5362(Config) when is_list(Config) ->
{nowarn_bif_clash,{spawn,1}}]}, % has no effect
{warnings,
[{5,erl_lint,{deprecated,{erlang,hash,2},{erlang,phash2,2},
- "in a future release"}}]}},
+ "a future release"}}]}},
{otp_5362_9,
<<"-include_lib(\"stdlib/include/qlc.hrl\").
@@ -2093,7 +2093,7 @@ otp_5362(Config) when is_list(Config) ->
[],
{warnings,
[{1,erl_lint,{deprecated,{erlang,hash,2},
- {erlang,phash2,2},"in a future release"}}]}},
+ {erlang,phash2,2},"a future release"}}]}},
{call_removed_function,
<<"t(X) -> regexp:match(X).">>,
diff --git a/lib/stdlib/test/erl_pp_SUITE.erl b/lib/stdlib/test/erl_pp_SUITE.erl
index a48ba7b5b7..a103f6dc53 100644
--- a/lib/stdlib/test/erl_pp_SUITE.erl
+++ b/lib/stdlib/test/erl_pp_SUITE.erl
@@ -50,7 +50,8 @@
otp_6321/1, otp_6911/1, otp_6914/1, otp_8150/1, otp_8238/1,
otp_8473/1, otp_8522/1, otp_8567/1, otp_8664/1, otp_9147/1,
- otp_10302/1, otp_10820/1, otp_11100/1, otp_11861/1, pr_1014/1]).
+ otp_10302/1, otp_10820/1, otp_11100/1, otp_11861/1, pr_1014/1,
+ otp_13662/1]).
%% Internal export.
-export([ehook/6]).
@@ -79,7 +80,7 @@ groups() ->
{tickets, [],
[otp_6321, otp_6911, otp_6914, otp_8150, otp_8238,
otp_8473, otp_8522, otp_8567, otp_8664, otp_9147,
- otp_10302, otp_10820, otp_11100, otp_11861, pr_1014]}].
+ otp_10302, otp_10820, otp_11100, otp_11861, pr_1014, otp_13662]}].
init_per_suite(Config) ->
Config.
@@ -1112,19 +1113,37 @@ pr_1014(Config) ->
ok = pp_forms(<<"-type t() :: #{any() => _}. ">>),
ok = pp_forms(<<"-type t() :: #{_ => any()}. ">>),
ok = pp_forms(<<"-type t() :: #{any() => any()}. ">>),
- ok = pp_forms(<<"-type t() :: #{...}. ">>),
- ok = pp_forms(<<"-type t() :: #{atom() := integer(), ...}. ">>),
+ ok = pp_forms(<<"-type t() :: #{atom() := integer(), any() => any()}. ">>),
FileName = filename('pr_1014.erl', Config),
C = <<"-module pr_1014.\n"
"-compile export_all.\n"
"-type m() :: #{..., a := integer()}.\n">>,
ok = file:write_file(FileName, C),
- {error,[{_,[{3,erl_parse,["syntax error before: ","','"]}]}],_} =
+ {error,[{_,[{3,erl_parse,["syntax error before: ","'...'"]}]}],_} =
compile:file(FileName, [return]),
ok.
+otp_13662(Config) ->
+ Include = "abcdefghijabcdefghijabcdefghijabcdefghijabcde"
+ "fghij-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.hrl",
+ IncludeFile = filename(Include, Config),
+ ok = file:write_file(IncludeFile, <<>>),
+ Ts = [{otp_13662,
+ <<"-file(\"abcdefghijabcdefghijabcdefghijabcdefghijabcde\"\n
+ \"fghij-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.erl\", 0).\n
+ -include(\"abcdefghijabcdefghijabcdefghijabcdefghijabcde\"
+ \"fghij-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.hrl\").\n
+ -include_lib(\"abcdefghijabcdefghijabcdefghijabcdefghijabcde\"
+ \"fghij-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.hrl\").
+ -compile(export_all).\n
+ t() ->\n
+ \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\n
+ \"aaaaaaaaaaaaaaaaaaaaaa\".\n">>}
+ ],
+ compile(Config, Ts).
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
compile(Config, Tests) ->
diff --git a/lib/stdlib/test/ets_SUITE.erl b/lib/stdlib/test/ets_SUITE.erl
index 15e3142408..b02d17bdb6 100644
--- a/lib/stdlib/test/ets_SUITE.erl
+++ b/lib/stdlib/test/ets_SUITE.erl
@@ -47,6 +47,7 @@
fixtable_next/1, fixtable_insert/1, rename/1, rename_unnamed/1, evil_rename/1,
update_element/1, update_counter/1, evil_update_counter/1, partly_bound/1, match_heavy/1]).
-export([update_counter_with_default/1]).
+-export([update_counter_table_growth/1]).
-export([member/1]).
-export([memory/1]).
-export([select_fail/1]).
@@ -100,6 +101,7 @@
heavy_lookup_element_do/1, member_do/1, otp_5340_do/1, otp_7665_do/1, meta_wb_do/1,
do_heavy_concurrent/1, tab2file2_do/2, exit_large_table_owner_do/2,
types_do/1, sleeper/0, memory_do/1, update_counter_with_default_do/1,
+ update_counter_table_growth_do/1,
ms_tracee_dummy/1, ms_tracee_dummy/2, ms_tracee_dummy/3, ms_tracee_dummy/4
]).
@@ -125,7 +127,7 @@ end_per_testcase(_Func, _Config) ->
suite() ->
[{ct_hooks,[ts_install_cth]},
- {timetrap,{minutes,20}}].
+ {timetrap,{minutes,5}}].
all() ->
[{group, new}, {group, insert}, {group, lookup},
@@ -137,6 +139,7 @@ all() ->
rename, rename_unnamed, evil_rename, update_element,
update_counter, evil_update_counter,
update_counter_with_default, partly_bound,
+ update_counter_table_growth,
match_heavy, {group, fold}, member, t_delete_object,
t_init_table, t_whitebox, t_delete_all_objects,
t_insert_list, t_test_ms, t_select_delete, t_ets_dets,
@@ -698,7 +701,7 @@ chk_normal_tab_struct_size() ->
io:format("?TAB_STRUCT_SZ=~p~n", [?TAB_STRUCT_SZ]),
ok.
-adjust_xmem([T1,T2,T3,T4], {A0,B0,C0,D0} = _Mem0) ->
+adjust_xmem([_T1,_T2,_T3,_T4], {A0,B0,C0,D0} = _Mem0) ->
%% Adjust for 64-bit, smp, and os:
%% Table struct size may differ.
@@ -1955,6 +1958,16 @@ update_counter_with_default_do(Opts) ->
ok.
+update_counter_table_growth(_Config) ->
+ repeat_for_opts(update_counter_table_growth_do).
+
+update_counter_table_growth_do(Opts) ->
+ Set = ets_new(b, [set | Opts]),
+ [ets:update_counter(Set, N, {2, 1}, {N, 1}) || N <- lists:seq(1,10000)],
+ OrderedSet = ets_new(b, [ordered_set | Opts]),
+ [ets:update_counter(OrderedSet, N, {2, 1}, {N, 1}) || N <- lists:seq(1,10000)],
+ ok.
+
%% Check that a first-next sequence always works on a fixed table.
fixtable_next(Config) when is_list(Config) ->
repeat_for_opts(fixtable_next_do, [write_concurrency,all_types]).
@@ -2809,16 +2822,22 @@ privacy_do(Opts) ->
privacy_check(pub,prot,priv),
Owner ! {shift,1,{pub,prot,priv}},
- receive {Pub1,Prot1,Priv1} -> ok end,
- privacy_check(Pub1,Prot1,Priv1),
+ receive
+ {Pub1,Prot1,Priv1} ->
+ ok = privacy_check(Pub1,Prot1,Priv1),
+ Owner ! {shift,2,{Pub1,Prot1,Priv1}}
+ end,
- Owner ! {shift,2,{Pub1,Prot1,Priv1}},
- receive {Pub2,Prot2,Priv2} -> ok end,
- privacy_check(Pub2,Prot2,Priv2),
+ receive
+ {Pub2,Prot2,Priv2} ->
+ ok = privacy_check(Pub2,Prot2,Priv2),
+ Owner ! {shift,0,{Pub2,Prot2,Priv2}}
+ end,
- Owner ! {shift,0,{Pub2,Prot2,Priv2}},
- receive {Pub2,Prot2,Priv2} -> ok end,
- privacy_check(Pub2,Prot2,Priv2),
+ receive
+ {Pub3,Prot3,Priv3} ->
+ ok = privacy_check(Pub3,Prot3,Priv3)
+ end,
Owner ! die,
receive {'EXIT',Owner,_} -> ok end,
@@ -2836,7 +2855,8 @@ privacy_check(Pub,Prot,Priv) ->
{'EXIT',{badarg,_}} = (catch ets:insert(Priv,{3,foo})),
%% check that it really wasn't written, either
- [] = ets:lookup(Prot,foo).
+ [] = ets:lookup(Prot,foo),
+ ok.
privacy_owner(Boss, Opts) ->
ets_new(pub, [public,named_table | Opts]),
@@ -3197,7 +3217,6 @@ delete_large_named_table_1(Name, Flags, Data, Fix) ->
true = ets:safe_fixtable(Tab, true),
lists:foreach(fun({K,_}) -> ets:delete(Tab, K) end, Data)
end,
- Parent = self(),
{Pid, MRef} = my_spawn_opt(fun() ->
receive
ets_new ->
@@ -3297,6 +3316,7 @@ exit_large_table_owner_do(Opts,{FEData,Config}) ->
verify_rescheduling_exit(Config, FEData, Opts, false, 1, 1).
exit_many_large_table_owner(Config) when is_list(Config) ->
+ ct:timetrap({minutes,30}), %% valgrind needs a lot
%%Data = [{erlang:phash2(I, 16#ffffff),I} || I <- lists:seq(1, 500000)],
FEData = fun(Do) -> repeat_while(fun(500000) -> {false,ok};
(I) -> Do({erlang:phash2(I, 16#ffffff),I}),
@@ -4270,6 +4290,7 @@ do_lookup_element(Tab, N, M) ->
heavy_concurrent(Config) when is_list(Config) ->
+ ct:timetrap({minutes,30}), %% valgrind needs a lot of time
repeat_for_opts(do_heavy_concurrent).
do_heavy_concurrent(Opts) ->
diff --git a/lib/stdlib/test/gen_server_SUITE.erl b/lib/stdlib/test/gen_server_SUITE.erl
index 3242511f4a..338cd3dc0a 100644
--- a/lib/stdlib/test/gen_server_SUITE.erl
+++ b/lib/stdlib/test/gen_server_SUITE.erl
@@ -185,7 +185,7 @@ start(Config) when is_list(Config) ->
gen_server:start({global, my_test_name},
gen_server_SUITE, [], []),
ok = gen_server:call({global, my_test_name}, stop),
- ct:sleep(1),
+ busy_wait_for_process(Pid4,600),
{'EXIT', {noproc,_}} = (catch gen_server:call(Pid4, started_p, 10)),
%% global register linked
@@ -214,7 +214,7 @@ start(Config) when is_list(Config) ->
gen_server:start({via, dummy_via, my_test_name},
gen_server_SUITE, [], []),
ok = gen_server:call({via, dummy_via, my_test_name}, stop),
- ct:sleep(1),
+ busy_wait_for_process(Pid6,600),
{'EXIT', {noproc,_}} = (catch gen_server:call(Pid6, started_p, 10)),
%% via register linked
diff --git a/lib/stdlib/test/gen_statem_SUITE.erl b/lib/stdlib/test/gen_statem_SUITE.erl
index 364314f91b..1d1417c2e6 100644
--- a/lib/stdlib/test/gen_statem_SUITE.erl
+++ b/lib/stdlib/test/gen_statem_SUITE.erl
@@ -37,33 +37,32 @@ all() ->
{group, stop_handle_event},
{group, abnormal},
{group, abnormal_handle_event},
- shutdown, stop_and_reply, event_order,
+ shutdown, stop_and_reply, event_order, code_change,
{group, sys},
hibernate, enter_loop].
groups() ->
- [{start, [],
- [start1, start2, start3, start4, start5, start6, start7,
- start8, start9, start10, start11, start12, next_events]},
- {start_handle_event, [],
- [start1, start2, start3, start4, start5, start6, start7,
- start8, start9, start10, start11, start12, next_events]},
- {stop, [],
- [stop1, stop2, stop3, stop4, stop5, stop6, stop7, stop8, stop9, stop10]},
- {stop_handle_event, [],
- [stop1, stop2, stop3, stop4, stop5, stop6, stop7, stop8, stop9, stop10]},
- {abnormal, [], [abnormal1, abnormal2]},
- {abnormal_handle_event, [], [abnormal1, abnormal2]},
- {sys, [],
- [sys1, code_change,
- call_format_status,
- error_format_status, terminate_crash_format,
- get_state, replace_state]},
- {sys_handle_event, [],
- [sys1,
- call_format_status,
- error_format_status, terminate_crash_format,
- get_state, replace_state]}].
+ [{start, [], tcs(start)},
+ {start_handle_event, [], tcs(start)},
+ {stop, [], tcs(stop)},
+ {stop_handle_event, [], tcs(stop)},
+ {abnormal, [], tcs(abnormal)},
+ {abnormal_handle_event, [], tcs(abnormal)},
+ {sys, [], tcs(sys)},
+ {sys_handle_event, [], tcs(sys)}].
+
+tcs(start) ->
+ [start1, start2, start3, start4, start5, start6, start7,
+ start8, start9, start10, start11, start12, next_events];
+tcs(stop) ->
+ [stop1, stop2, stop3, stop4, stop5, stop6, stop7, stop8, stop9, stop10];
+tcs(abnormal) ->
+ [abnormal1, abnormal2];
+tcs(sys) ->
+ [sys1, call_format_status,
+ error_format_status, terminate_crash_format,
+ get_state, replace_state].
+
init_per_suite(Config) ->
Config.
@@ -461,10 +460,10 @@ abnormal2(Config) ->
{ok,Pid} = gen_statem:start_link(?MODULE, start_arg(Config, []), []),
%% bad return value in the gen_statem loop
- {{bad_return_value,badreturn},_} =
+ {{bad_return_from_state_function,badreturn},_} =
?EXPECT_FAILURE(gen_statem:call(Pid, badreturn), Reason),
receive
- {'EXIT',Pid,{bad_return_value,badreturn}} -> ok
+ {'EXIT',Pid,{bad_return_from_state_function,badreturn}} -> ok
after 5000 ->
ct:fail(gen_statem_did_not_die)
end,
@@ -633,11 +632,13 @@ sys1(Config) ->
sys:resume(Pid),
stop_it(Pid).
-code_change(Config) ->
- Mode = handle_event_function,
- {ok,Pid} = gen_statem:start(?MODULE, start_arg(Config, []), []),
+code_change(_Config) ->
+ {ok,Pid} =
+ gen_statem:start(
+ ?MODULE, {callback_mode,state_functions,[]}, []),
{idle,data} = sys:get_state(Pid),
sys:suspend(Pid),
+ Mode = handle_event_function,
sys:change_code(Pid, ?MODULE, old_vsn, Mode),
sys:resume(Pid),
{idle,{old_vsn,data,Mode}} = sys:get_state(Pid),
@@ -708,7 +709,7 @@ error_format_status(Config) ->
gen_statem:start(
?MODULE, start_arg(Config, {data,Data}), []),
%% bad return value in the gen_statem loop
- {{bad_return_value,badreturn},_} =
+ {{bad_return_from_state_function,badreturn},_} =
?EXPECT_FAILURE(gen_statem:call(Pid, badreturn), Reason),
receive
{error,_,
@@ -716,7 +717,7 @@ error_format_status(Config) ->
"** State machine"++_,
[Pid,{{call,_},badreturn},
{formatted,idle,Data},
- error,{bad_return_value,badreturn}|_]}} ->
+ error,{bad_return_from_state_function,badreturn}|_]}} ->
ok;
Other when is_tuple(Other), element(1, Other) =:= error ->
error_logger_forwarder:unregister(),
@@ -1029,11 +1030,7 @@ enter_loop(_Config) ->
end,
%% Process not started using proc_lib
- CallbackMode = state_functions,
- Pid4 =
- spawn_link(
- gen_statem, enter_loop,
- [?MODULE,[],CallbackMode,state0,[]]),
+ Pid4 = spawn_link(gen_statem, enter_loop, [?MODULE,[],state0,[]]),
receive
{'EXIT',Pid4,process_was_not_started_by_proc_lib} ->
ok
@@ -1107,21 +1104,18 @@ enter_loop(Reg1, Reg2) ->
anon -> ignore
end,
proc_lib:init_ack({ok, self()}),
- CallbackMode = state_functions,
case Reg2 of
local ->
gen_statem:enter_loop(
- ?MODULE, [], CallbackMode, state0, [], {local,armitage});
+ ?MODULE, [], state0, [], {local,armitage});
global ->
gen_statem:enter_loop(
- ?MODULE, [], CallbackMode, state0, [], {global,armitage});
+ ?MODULE, [], state0, [], {global,armitage});
via ->
gen_statem:enter_loop(
- ?MODULE, [], CallbackMode, state0, [],
- {via, dummy_via, armitage});
+ ?MODULE, [], state0, [], {via, dummy_via, armitage});
anon ->
- gen_statem:enter_loop(
- ?MODULE, [], CallbackMode, state0, [])
+ gen_statem:enter_loop(?MODULE, [], state0, [])
end.
@@ -1266,33 +1260,39 @@ init(stop_shutdown) ->
{stop,shutdown};
init(sleep) ->
?t:sleep(1000),
- {state_functions,idle,data};
+ {ok,idle,data};
init(hiber) ->
- {state_functions,hiber_idle,[]};
+ {ok,hiber_idle,[]};
init(hiber_now) ->
- {state_functions,hiber_idle,[],[hibernate]};
+ {ok,hiber_idle,[],[hibernate]};
init({data, Data}) ->
- {state_functions,idle,Data};
+ {ok,idle,Data};
init({callback_mode,CallbackMode,Arg}) ->
- case init(Arg) of
- {_,State,Data,Ops} ->
- {CallbackMode,State,Data,Ops};
- {_,State,Data} ->
- {CallbackMode,State,Data};
- Other ->
- Other
- end;
+ ets:new(?MODULE, [named_table,private]),
+ ets:insert(?MODULE, {callback_mode,CallbackMode}),
+ init(Arg);
init({map_statem,#{init := Init}=Machine}) ->
+ ets:new(?MODULE, [named_table,private]),
+ ets:insert(?MODULE, {callback_mode,handle_event_function}),
case Init() of
{ok,State,Data,Ops} ->
- {handle_event_function,State,[Data|Machine],Ops};
+ {ok,State,[Data|Machine],Ops};
{ok,State,Data} ->
- {handle_event_function,State,[Data|Machine]};
+ {ok,State,[Data|Machine]};
Other ->
Other
end;
init([]) ->
- {state_functions,idle,data}.
+ {ok,idle,data}.
+
+callback_mode() ->
+ try ets:lookup(?MODULE, callback_mode) of
+ [{callback_mode,CallbackMode}] ->
+ CallbackMode
+ catch
+ error:badarg ->
+ state_functions
+ end.
terminate(_, _State, crash_terminate) ->
exit({crash,terminate});
@@ -1568,7 +1568,12 @@ wrap_result(Result) ->
code_change(OldVsn, State, Data, CallbackMode) ->
- {CallbackMode,State,{OldVsn,Data,CallbackMode}}.
+ io:format(
+ "code_change(~p, ~p, ~p, ~p)~n", [OldVsn,State,Data,CallbackMode]),
+ ets:insert(?MODULE, {callback_mode,CallbackMode}),
+ io:format(
+ "code_change(~p, ~p, ~p, ~p)~n", [OldVsn,State,Data,CallbackMode]),
+ {ok,State,{OldVsn,Data,CallbackMode}}.
format_status(terminate, [_Pdict,State,Data]) ->
{formatted,State,Data};
diff --git a/lib/stdlib/test/id_transform_SUITE.erl b/lib/stdlib/test/id_transform_SUITE.erl
index 54f452825f..3d4ae1a189 100644
--- a/lib/stdlib/test/id_transform_SUITE.erl
+++ b/lib/stdlib/test/id_transform_SUITE.erl
@@ -61,13 +61,8 @@ id_transform(Config) when is_list(Config) ->
"erl_id_trans.erl"]),
{ok,erl_id_trans,Bin} = compile:file(File,[binary]),
{module,erl_id_trans} = code:load_binary(erl_id_trans, File, Bin),
- case test_server:purify_is_running() of
- false ->
- ct:timetrap({hours,1}),
- run_in_test_suite();
- true ->
- {skip,"Valgrind (too slow)"}
- end.
+ ct:timetrap({hours,1}),
+ run_in_test_suite().
run_in_test_suite() ->
SuperDir = filename:dirname(filename:dirname(code:which(?MODULE))),
diff --git a/lib/stdlib/test/io_SUITE.erl b/lib/stdlib/test/io_SUITE.erl
index be6b470ca7..7d48cbc97c 100644
--- a/lib/stdlib/test/io_SUITE.erl
+++ b/lib/stdlib/test/io_SUITE.erl
@@ -19,10 +19,7 @@
%%
-module(io_SUITE).
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2]).
-
--export([init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0]).
-export([error_1/1, float_g/1, otp_5403/1, otp_5813/1, otp_6230/1,
otp_6282/1, otp_6354/1, otp_6495/1, otp_6517/1, otp_6502/1,
@@ -51,12 +48,6 @@
-define(privdir(Conf), proplists:get_value(priv_dir, Conf)).
-endif.
-init_per_testcase(_Case, Config) ->
- Config.
-
-end_per_testcase(_Case, _Config) ->
- ok.
-
suite() ->
[{ct_hooks,[ts_install_cth]},
{timetrap,{minutes,1}}].
@@ -72,22 +63,6 @@ all() ->
io_lib_width_too_small, io_with_huge_message_queue,
format_string, maps, coverage].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
%% Error cases for output.
error_1(Config) when is_list(Config) ->
%% We don't do erroneous output on stdout - the test server
@@ -952,7 +927,7 @@ otp_6708(Config) when is_list(Config) ->
otp_7084() ->
- [{timetrap,{minutes,3}}].
+ [{timetrap,{minutes,6}}]. %% valgrind needs a lot of time
%% OTP-7084. Printing floating point numbers nicely.
otp_7084(Config) when is_list(Config) ->
@@ -1830,13 +1805,14 @@ bad_printable_range(Config) when is_list(Config) ->
Cmd = lists:concat([lib:progname()," +pcunnnnnicode -run erlang halt"]),
P = open_port({spawn, Cmd}, [stderr_to_stdout, {line, 200}]),
ok = receive
- {P, {data, {eol , "bad range of printable characters" ++ _}}} ->
- ok;
- Other ->
- Other
- after 1000 ->
- timeout
- end,
+ {P, {data, {eol , "bad range of printable characters" ++ _}}} ->
+ ok;
+ Other ->
+ Other
+ %% valgrind needs a lot of time
+ after 6000 ->
+ timeout
+ end,
catch port_close(P),
flush_from_port(P),
ok.
diff --git a/lib/stdlib/test/io_proto_SUITE.erl b/lib/stdlib/test/io_proto_SUITE.erl
index 4e39f011f6..1e286a9306 100644
--- a/lib/stdlib/test/io_proto_SUITE.erl
+++ b/lib/stdlib/test/io_proto_SUITE.erl
@@ -75,7 +75,7 @@ end_per_testcase(_Case, Config) ->
suite() ->
[{ct_hooks,[ts_install_cth]},
- {timetrap,{minutes,20}}].
+ {timetrap,{minutes,5}}].
all() ->
[setopts_getopts, unicode_options, unicode_options_gen,
@@ -462,6 +462,7 @@ unicode_options(Config) when is_list(Config) ->
%% Tests various unicode options on random generated files.
unicode_options_gen(Config) when is_list(Config) ->
+ ct:timetrap({minutes,30}), %% valgrind needs a alot of time
random:seed(1240, 900586, 553728),
PrivDir = proplists:get_value(priv_dir, Config),
AllModes = [utf8,utf16,{utf16,big},{utf16,little},
diff --git a/lib/stdlib/test/rand_SUITE.erl b/lib/stdlib/test/rand_SUITE.erl
index 1bcdc3ccd0..cb778c96d4 100644
--- a/lib/stdlib/test/rand_SUITE.erl
+++ b/lib/stdlib/test/rand_SUITE.erl
@@ -18,18 +18,13 @@
%% %CopyrightEnd%
-module(rand_SUITE).
--export([all/0, suite/0,groups/0,
- init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- init_per_testcase/2, end_per_testcase/2
- ]).
+-export([all/0, suite/0,groups/0]).
-export([interval_int/1, interval_float/1, seed/1,
api_eq/1, reference/1,
basic_stats_uniform_1/1, basic_stats_uniform_2/1,
basic_stats_normal/1,
- plugin/1, measure/1
- ]).
+ plugin/1, measure/1]).
-export([test/0, gen/1]).
@@ -37,12 +32,6 @@
-define(LOOP, 1000000).
-init_per_testcase(_Case, Config) ->
- Config.
-
-end_per_testcase(_Case, _Config) ->
- ok.
-
suite() ->
[{ct_hooks,[ts_install_cth]},
{timetrap,{minutes,3}}].
@@ -52,19 +41,12 @@ all() ->
api_eq,
reference,
{group, basic_stats},
- plugin, measure
- ].
+ plugin, measure].
groups() ->
[{basic_stats, [parallel],
[basic_stats_uniform_1, basic_stats_uniform_2, basic_stats_normal]}].
-init_per_suite(Config) -> Config.
-end_per_suite(_Config) -> ok.
-
-init_per_group(_GroupName, Config) -> Config.
-end_per_group(_GroupName, Config) -> Config.
-
%% A simple helper to test without test_server during dev
test() ->
Tests = all(),
@@ -285,16 +267,19 @@ gen(_, _, Acc) -> lists:reverse(Acc).
%% Check that the algorithms generate sound values.
basic_stats_uniform_1(Config) when is_list(Config) ->
+ ct:timetrap({minutes,6}), %% valgrind needs a lot of time
[basic_uniform_1(?LOOP, rand:seed_s(Alg), 0.0, array:new([{default, 0}]))
|| Alg <- algs()],
ok.
basic_stats_uniform_2(Config) when is_list(Config) ->
+ ct:timetrap({minutes,6}), %% valgrind needs a lot of time
[basic_uniform_2(?LOOP, rand:seed_s(Alg), 0, array:new([{default, 0}]))
|| Alg <- algs()],
ok.
basic_stats_normal(Config) when is_list(Config) ->
+ ct:timetrap({minutes,6}), %% valgrind needs a lot of time
io:format("Testing normal~n",[]),
[basic_normal_1(?LOOP, rand:seed_s(Alg), 0, 0) || Alg <- algs()],
ok.
@@ -395,6 +380,7 @@ crypto_uniform_n(N, State0) ->
%% Not a test but measures the time characteristics of the different algorithms
measure(Suite) when is_atom(Suite) -> [];
measure(_Config) ->
+ ct:timetrap({minutes,6}), %% valgrind needs a lot of time
Algos = [crypto64|algs()],
io:format("RNG uniform integer performance~n",[]),
_ = measure_1(random, fun(State) -> {int, random:uniform_s(10000, State)} end),
diff --git a/lib/stdlib/test/select_SUITE.erl b/lib/stdlib/test/select_SUITE.erl
index e999d040c9..22b6d37e5d 100644
--- a/lib/stdlib/test/select_SUITE.erl
+++ b/lib/stdlib/test/select_SUITE.erl
@@ -59,42 +59,20 @@ config(priv_dir,_) ->
".".
-else.
%% When run in test server.
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,select_test/1,
- init_per_testcase/2, end_per_testcase/2,
- return_values/1]).
-
-init_per_testcase(_Case, Config) ->
- Config.
-
-end_per_testcase(_Case, _Config) ->
- ok.
+-export([all/0, suite/0,
+ select_test/1, return_values/1]).
suite() ->
[{ct_hooks,[ts_install_cth]},
- {timetrap,{minutes,20}}].
+ {timetrap,{minutes,1}}].
all() ->
[return_values, select_test].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
%% Test select in numerous ways.
select_test(Config) when is_list(Config) ->
+ ct:timetrap({minutes,40}), %% valgrinds needs a lot of time
do_test(Config).
%% Test return values in specific situations for select/3 and select/1.
diff --git a/lib/stdlib/test/shell_SUITE.erl b/lib/stdlib/test/shell_SUITE.erl
index dc82e92876..c409a6949b 100644
--- a/lib/stdlib/test/shell_SUITE.erl
+++ b/lib/stdlib/test/shell_SUITE.erl
@@ -30,7 +30,7 @@
progex_bit_syntax/1, progex_records/1,
progex_lc/1, progex_funs/1,
otp_5990/1, otp_6166/1, otp_6554/1,
- otp_7184/1, otp_7232/1, otp_8393/1, otp_10302/1]).
+ otp_7184/1, otp_7232/1, otp_8393/1, otp_10302/1, otp_13719/1]).
-export([ start_restricted_from_shell/1,
start_restricted_on_command_line/1,restricted_local/1]).
@@ -91,7 +91,7 @@ groups() ->
progex_funs]},
{tickets, [],
[otp_5990, otp_6166, otp_6554, otp_7184,
- otp_7232, otp_8393, otp_10302]}].
+ otp_7232, otp_8393, otp_10302, otp_13719]}].
init_per_suite(Config) ->
Config.
@@ -2810,6 +2810,19 @@ otp_10302(Config) when is_list(Config) ->
test_server:stop_node(Node),
ok.
+otp_13719(Config) when is_list(Config) ->
+ Test = <<"-module(otp_13719).
+ -record(bar, {}).
+ -record(foo, {bar :: #bar{}}).">>,
+ File = filename("otp_13719.erl", Config),
+ Beam = filename("otp_13719.beam", Config),
+ ok = compile_file(Config, File, Test, []),
+ RR = "rr(\"" ++ Beam ++ "\"). #foo{}.",
+ "[bar,foo]\n#foo{bar = undefined}.\n" = t(RR),
+ file:delete(filename("test.beam", Config)),
+ file:delete(File),
+ ok.
+
scan(B) ->
F = fun(Ts) ->
case erl_parse:parse_term(Ts) of
diff --git a/lib/stdlib/test/slave_SUITE.erl b/lib/stdlib/test/slave_SUITE.erl
index 25b706e81f..7525cf78de 100644
--- a/lib/stdlib/test/slave_SUITE.erl
+++ b/lib/stdlib/test/slave_SUITE.erl
@@ -71,6 +71,7 @@ t_start_link(Config) when is_list(Config) ->
rpc:cast(Slave1, erlang, halt, []),
rpc:cast(Slave2, erlang, halt, []),
+ ct:sleep(250),
is_dead(Slave1),
is_dead(Slave2),
diff --git a/lib/stdlib/test/supervisor_SUITE.erl b/lib/stdlib/test/supervisor_SUITE.erl
index 3f1aa0e7a3..cd2c6b0cbb 100644
--- a/lib/stdlib/test/supervisor_SUITE.erl
+++ b/lib/stdlib/test/supervisor_SUITE.erl
@@ -66,7 +66,7 @@
%% Misc tests
-export([child_unlink/1, tree/1, count_children/1,
- count_restarting_children/1,
+ count_restarting_children/1, get_callback_module/1,
do_not_save_start_parameters_for_temporary_children/1,
do_not_save_child_specs_for_temporary_children/1,
simple_one_for_one_scale_many_temporary_children/1,
@@ -91,7 +91,7 @@ all() ->
{group, normal_termination},
{group, shutdown_termination},
{group, abnormal_termination}, child_unlink, tree,
- count_children, count_restarting_children,
+ count_children, count_restarting_children, get_callback_module,
do_not_save_start_parameters_for_temporary_children,
do_not_save_child_specs_for_temporary_children,
simple_one_for_one_scale_many_temporary_children, temporary_bystander,
@@ -1507,6 +1507,14 @@ count_restarting_children(Config) when is_list(Config) ->
[1,0,0,0] = get_child_counts(SupPid).
%%-------------------------------------------------------------------------
+%% Test get_callback_module
+get_callback_module(Config) when is_list(Config) ->
+ Child = {child, {supervisor_1, start_child, []}, temporary, 1000,
+ worker, []},
+ {ok, SupPid} = start_link({ok, {{simple_one_for_one, 2, 3600}, [Child]}}),
+ supervisor_SUITE = supervisor:get_callback_module(SupPid).
+
+%%-------------------------------------------------------------------------
%% Temporary children shall not be restarted so they should not save
%% start parameters, as it potentially can take up a huge amount of
%% memory for no purpose.
diff --git a/lib/stdlib/test/unicode_SUITE.erl b/lib/stdlib/test/unicode_SUITE.erl
index 81a591f433..07d63bdf22 100644
--- a/lib/stdlib/test/unicode_SUITE.erl
+++ b/lib/stdlib/test/unicode_SUITE.erl
@@ -21,10 +21,7 @@
-include_lib("common_test/include/ct.hrl").
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- init_per_testcase/2,
- end_per_testcase/2,
+-export([all/0, suite/0,groups/0,
utf8_illegal_sequences_bif/1,
utf16_illegal_sequences_bif/1,
random_lists/1,
@@ -38,12 +35,6 @@
ex_binaries_errors_utf32_little/1,
ex_binaries_errors_utf32_big/1]).
-init_per_testcase(_Case, Config) ->
- Config.
-
-end_per_testcase(_Case, _Config) ->
- ok.
-
suite() ->
[{ct_hooks,[ts_install_cth]},
{timetrap,{minutes,20}}].
@@ -63,18 +54,6 @@ groups() ->
ex_binaries_errors_utf32_little,
ex_binaries_errors_utf32_big]}].
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
binaries_errors_limit(Config) when is_list(Config) ->
setlimit(10),
ex_binaries_errors_utf8(Config),
@@ -761,6 +740,7 @@ leading_lo_surrogate_bif(HiSurr, LoSurr, End) when LoSurr =< End ->
leading_lo_surrogate_bif(_, _, _) -> ok.
utf8_illegal_sequences_bif(Config) when is_list(Config) ->
+ ct:timetrap({minutes,40}), %% valgrind needs a lot
setlimit(10),
ex_utf8_illegal_sequences_bif(Config),
setlimit(default),
diff --git a/lib/stdlib/test/zip_SUITE.erl b/lib/stdlib/test/zip_SUITE.erl
index 2add5a39a2..7d90795c9e 100644
--- a/lib/stdlib/test/zip_SUITE.erl
+++ b/lib/stdlib/test/zip_SUITE.erl
@@ -25,6 +25,7 @@
zip_to_binary/1,
unzip_options/1, zip_options/1, list_dir_options/1, aliases/1,
openzip_api/1, zip_api/1, open_leak/1, unzip_jar/1,
+ unzip_traversal_exploit/1,
compress_control/1,
foldl/1]).
@@ -38,7 +39,8 @@ all() ->
[borderline, atomic, bad_zip, unzip_from_binary,
unzip_to_binary, zip_to_binary, unzip_options,
zip_options, list_dir_options, aliases, openzip_api,
- zip_api, open_leak, unzip_jar, compress_control, foldl].
+ zip_api, open_leak, unzip_jar, compress_control, foldl,
+ unzip_traversal_exploit].
groups() ->
[].
@@ -377,6 +379,52 @@ unzip_options(Config) when is_list(Config) ->
0 = delete_files([Subdir]),
ok.
+%% Test that unzip handles directory traversal exploit (OTP-13633)
+unzip_traversal_exploit(Config) ->
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ ZipName = filename:join(DataDir, "exploit.zip"),
+
+ %% $ zipinfo -1 test/zip_SUITE_data/exploit.zip
+ %% clash.txt
+ %% ../clash.txt
+ %% ../above.txt
+ %% subdir/../in_root_dir.txt
+
+ %% create a temp directory
+ SubDir = filename:join(PrivDir, "exploit_test"),
+ ok = file:make_dir(SubDir),
+
+ ClashFile = filename:join(SubDir,"clash.txt"),
+ AboveFile = filename:join(SubDir,"above.txt"),
+ RelativePathFile = filename:join(SubDir,"subdir/../in_root_dir.txt"),
+
+ %% unzip in SubDir
+ {ok, [ClashFile, ClashFile, AboveFile, RelativePathFile]} =
+ zip:unzip(ZipName, [{cwd,SubDir}]),
+
+ {ok,<<"This file will overwrite other file.\n">>} =
+ file:read_file(ClashFile),
+ {ok,_} = file:read_file(AboveFile),
+ {ok,_} = file:read_file(RelativePathFile),
+
+ %% clean up
+ delete_files([SubDir]),
+
+ %% create the temp directory again
+ ok = file:make_dir(SubDir),
+
+ %% unzip in SubDir
+ {ok, [ClashFile, AboveFile, RelativePathFile]} =
+ zip:unzip(ZipName, [{cwd,SubDir},keep_old_files]),
+
+ {ok,<<"This is the original file.\n">>} =
+ file:read_file(ClashFile),
+
+ %% clean up
+ delete_files([SubDir]),
+ ok.
+
%% Test unzip a jar file (OTP-7382).
unzip_jar(Config) when is_list(Config) ->
DataDir = proplists:get_value(data_dir, Config),
diff --git a/lib/stdlib/test/zip_SUITE_data/exploit.zip b/lib/stdlib/test/zip_SUITE_data/exploit.zip
new file mode 100644
index 0000000000..afb8dbd192
--- /dev/null
+++ b/lib/stdlib/test/zip_SUITE_data/exploit.zip
Binary files differ
diff --git a/lib/stdlib/vsn.mk b/lib/stdlib/vsn.mk
index 46e3ceac03..c74343d9ca 100644
--- a/lib/stdlib/vsn.mk
+++ b/lib/stdlib/vsn.mk
@@ -1 +1 @@
-STDLIB_VSN = 3.0
+STDLIB_VSN = 3.1
diff --git a/lib/syntax_tools/doc/specs/.gitignore b/lib/syntax_tools/doc/specs/.gitignore
new file mode 100644
index 0000000000..322eebcb06
--- /dev/null
+++ b/lib/syntax_tools/doc/specs/.gitignore
@@ -0,0 +1 @@
+specs_*.xml
diff --git a/lib/syntax_tools/doc/src/Makefile b/lib/syntax_tools/doc/src/Makefile
index ff4f3f78ff..e55222e59c 100644
--- a/lib/syntax_tools/doc/src/Makefile
+++ b/lib/syntax_tools/doc/src/Makefile
@@ -81,10 +81,15 @@ HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf
+SPECS_FILES = $(XML_REF3_FILES:%.xml=$(SPECDIR)/specs_%.xml)
+
+TOP_SPECS_FILE = specs.xml
+
# ----------------------------------------------------
# FLAGS
# ----------------------------------------------------
XML_FLAGS +=
+SPECS_FLAGS = -I../../include
DVIPS_FLAGS +=
# ----------------------------------------------------
@@ -93,7 +98,7 @@ DVIPS_FLAGS +=
$(HTMLDIR)/%.gif: %.gif
$(INSTALL_DATA) $< $@
-docs: pdf html man
+docs: man pdf html
$(TOP_PDF_FILE): $(XML_FILES)
@@ -120,6 +125,7 @@ clean clean_docs:
rm -f $(MAN3DIR)/*
rm -f $(XML_REF3_FILES) $(XML_CHAPTER_FILES) *.html
rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
+ rm -f $(SPECDIR)/*
rm -f errs core *~
# ----------------------------------------------------
diff --git a/lib/syntax_tools/doc/src/notes.xml b/lib/syntax_tools/doc/src/notes.xml
index 669447a6b9..ef207f7c3d 100644
--- a/lib/syntax_tools/doc/src/notes.xml
+++ b/lib/syntax_tools/doc/src/notes.xml
@@ -102,11 +102,11 @@
<p>
Teach Maps to erl_syntax</p>
<p>
- Affected functions: <list>
+ Affected functions:</p> <list>
<item>erl_syntax:abstract/1</item>
<item>erl_syntax:concrete/1</item>
<item>erl_syntax:is_leaf/1</item>
- <item>erl_syntax:is_literal/1</item> </list></p>
+ <item>erl_syntax:is_literal/1</item> </list>
<p>
Own Id: OTP-12265</p>
</item>
diff --git a/lib/syntax_tools/doc/src/specs.xml b/lib/syntax_tools/doc/src/specs.xml
new file mode 100644
index 0000000000..04c3a494e7
--- /dev/null
+++ b/lib/syntax_tools/doc/src/specs.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<specs xmlns:xi="http://www.w3.org/2001/XInclude">
+ <xi:include href="../specs/specs_epp_dodger.xml"/>
+ <xi:include href="../specs/specs_erl_comment_scan.xml"/>
+ <xi:include href="../specs/specs_erl_prettypr.xml"/>
+ <xi:include href="../specs/specs_erl_recomment.xml"/>
+ <xi:include href="../specs/specs_erl_syntax.xml"/>
+ <xi:include href="../specs/specs_erl_syntax_lib.xml"/>
+ <xi:include href="../specs/specs_erl_tidy.xml"/>
+ <xi:include href="../specs/specs_igor.xml"/>
+ <xi:include href="../specs/specs_merl.xml"/>
+ <xi:include href="../specs/specs_merl_transform.xml"/>
+ <xi:include href="../specs/specs_prettypr.xml"/>
+</specs>
diff --git a/lib/syntax_tools/src/Makefile b/lib/syntax_tools/src/Makefile
index 2e91adf8af..8325db45a8 100644
--- a/lib/syntax_tools/src/Makefile
+++ b/lib/syntax_tools/src/Makefile
@@ -29,7 +29,7 @@ ERL_COMPILE_FLAGS += -pa $(EBIN) -pa ./ -I$(INCLUDE)
ifeq ($(NATIVE_LIBS_ENABLED),yes)
ERL_COMPILE_FLAGS += +native
endif
-ERL_COMPILE_FLAGS += +nowarn_shadow_vars +warn_unused_import -Werror # +warn_missing_spec +warn_untyped_record
+ERL_COMPILE_FLAGS += +nowarn_shadow_vars +warn_unused_import #-Werror # +warn_missing_spec +warn_untyped_record
SOURCES=erl_syntax.erl erl_prettypr.erl erl_syntax_lib.erl \
erl_comment_scan.erl erl_recomment.erl erl_tidy.erl \
diff --git a/lib/syntax_tools/src/erl_comment_scan.erl b/lib/syntax_tools/src/erl_comment_scan.erl
index 03429d4d42..b5ac564146 100644
--- a/lib/syntax_tools/src/erl_comment_scan.erl
+++ b/lib/syntax_tools/src/erl_comment_scan.erl
@@ -30,8 +30,14 @@
%% =====================================================================
--type comment() :: {integer(), integer(), integer(), [string()]}.
--type commentLine() :: {integer(), integer(), integer(), string()}.
+-type comment() :: {Line:: integer(),
+ Column:: integer(),
+ Indentation :: integer(),
+ Text :: [string()]}.
+-type commentLine() :: {Line :: integer(),
+ Column :: integer(),
+ Indent :: integer(),
+ Text :: string()}.
%% =====================================================================
%% @spec file(FileName::file:filename()) -> [Comment]
diff --git a/lib/syntax_tools/src/erl_prettypr.erl b/lib/syntax_tools/src/erl_prettypr.erl
index 119d375746..df0d78031c 100644
--- a/lib/syntax_tools/src/erl_prettypr.erl
+++ b/lib/syntax_tools/src/erl_prettypr.erl
@@ -195,10 +195,16 @@ format(Node) ->
%% =====================================================================
%% @spec format(Tree::syntaxTree(), Options::[term()]) -> string()
-%% syntaxTree() = erl_syntax:syntaxTree()
%%
-%% @type hook() = (syntaxTree(), context(), Continuation) -> document()
-%% Continuation = (syntaxTree(), context()) -> document().
+%% @type syntaxTree() = erl_syntax:syntaxTree().
+%%
+%% An abstract syntax tree. See the {@link erl_syntax} module for
+%% details.
+%%
+%% @type hook() = (syntaxTree(), context(), Continuation) ->
+%% prettypr:document()
+%% Continuation = (syntaxTree(), context()) ->
+%% prettypr:document().
%%
%% A call-back function for user-controlled formatting. See {@link
%% format/2}.
@@ -277,7 +283,7 @@ format(Node, Options) ->
%% =====================================================================
-%% @spec best(Tree::syntaxTree()) -> empty | document()
+%% @spec best(Tree::syntaxTree()) -> empty | prettypr:document()
%% @equiv best(Tree, [])
-spec best(erl_syntax:syntaxTree()) -> 'empty' | prettypr:document().
@@ -288,7 +294,7 @@ best(Node) ->
%% =====================================================================
%% @spec best(Tree::syntaxTree(), Options::[term()]) ->
-%% empty | document()
+%% empty | prettypr:document()
%%
%% @doc Creates a fixed "best" abstract layout for a syntax tree. This
%% is similar to the `layout/2' function, except that here, the final
@@ -310,7 +316,7 @@ best(Node, Options) ->
%% =====================================================================
-%% @spec layout(Tree::syntaxTree()) -> document()
+%% @spec layout(Tree::syntaxTree()) -> prettypr:document()
%% @equiv layout(Tree, [])
-spec layout(erl_syntax:syntaxTree()) -> prettypr:document().
@@ -320,8 +326,7 @@ layout(Node) ->
%% =====================================================================
-%% @spec layout(Tree::syntaxTree(), Options::[term()]) -> document()
-%% document() = prettypr:document()
+%% @spec layout(Tree::syntaxTree(), Options::[term()]) -> prettypr:document()
%%
%% @doc Creates an abstract document layout for a syntax tree. The
%% result represents a set of possible layouts (cf. module `prettypr').
@@ -1130,13 +1135,14 @@ lay_2(Node, Ctxt) ->
any_size ->
text("map()");
Fs ->
- {Prec, _PrecR} = type_preop_prec('#'),
- Es = lay_map_fields(Fs,
- floating(text(",")),
- reset_prec(Ctxt)),
+ Ctxt1 = reset_prec(Ctxt),
+ Es = seq(Fs,
+ floating(text(",")), Ctxt1,
+ fun lay/2),
D = beside(floating(text("#{")),
beside(par(Es),
floating(text("}")))),
+ {Prec, _PrecR} = type_preop_prec('#'),
maybe_parentheses(D, Prec, Ctxt)
end;
@@ -1400,36 +1406,6 @@ lay_error_info(T, Ctxt) ->
lay_concrete(T, Ctxt) ->
lay(erl_syntax:abstract(T), Ctxt).
-lay_map_fields([H | T], Separator, Ctxt) ->
- case T of
- [] ->
- [case erl_syntax:type(H) of
- map_type_assoc ->
- lay_last_type_assoc(H, Ctxt);
- _ ->
- lay(H, Ctxt)
- end];
- _ ->
- [maybe_append(Separator, lay(H, Ctxt))
- | lay_map_fields(T, Separator, Ctxt)]
- end;
-lay_map_fields([], _, _) ->
- [empty()].
-
-lay_last_type_assoc(Node, Ctxt) ->
- Name = erl_syntax:map_type_assoc_name(Node),
- Value = erl_syntax:map_type_assoc_value(Node),
- IsAny = fun({type,_,any,[]}) -> true;
- %% ({var,_,'_'}) -> true;
- (_) -> false
- end,
- case IsAny(Name) andalso IsAny(Value) of
- true ->
- text("...");
- false ->
- lay_type_assoc(Name, Value, Ctxt)
- end.
-
lay_type_assoc(Name, Value, Ctxt) ->
Ctxt1 = reset_prec(Ctxt),
D1 = lay(Name, Ctxt1),
diff --git a/lib/syntax_tools/src/erl_recomment.erl b/lib/syntax_tools/src/erl_recomment.erl
index 5ce533285d..1d23034991 100644
--- a/lib/syntax_tools/src/erl_recomment.erl
+++ b/lib/syntax_tools/src/erl_recomment.erl
@@ -30,6 +30,9 @@
-export([recomment_forms/2, quick_recomment_forms/2, recomment_tree/2]).
+%% @type syntaxTree() = erl_syntax:syntaxTree(). An abstract syntax
+%% tree. See the {@link erl_syntax} module for details.
+
%% =====================================================================
%% @spec quick_recomment_forms(Forms, Comments::[Comment]) ->
%% syntaxTree()
@@ -55,7 +58,6 @@ quick_recomment_forms(Tree, Cs) ->
%% =====================================================================
%% @spec recomment_forms(Forms, Comments::[Comment]) -> syntaxTree()
%%
-%% syntaxTree() = erl_syntax:syntaxTree()
%% Forms = syntaxTree() | [syntaxTree()]
%% Comment = {Line, Column, Indentation, Text}
%% Line = integer()
@@ -601,16 +603,16 @@ expand_comment(C) ->
-record(leaf, {min = 0 :: integer(),
max = 0 :: integer(),
- precomments = [] :: [erl_syntax:syntaxTree()],
- postcomments = [] :: [erl_syntax:syntaxTree()],
+ precomments = [] :: [erl_comment_scan:comment()],
+ postcomments = [] :: [erl_comment_scan:comment()],
value :: erl_syntax:syntaxTree()}).
-record(tree, {min = 0 :: integer(),
max = 0 :: integer(),
type :: atom(),
attrs :: erl_syntax:syntaxTreeAttributes(),
- precomments = [] :: [erl_syntax:syntaxTree()],
- postcomments = [] :: [erl_syntax:syntaxTree()],
+ precomments = [] :: [erl_comment_scan:comment()],
+ postcomments = [] :: [erl_comment_scan:comment()],
subtrees = [] :: [extendedSyntaxTree()]}).
diff --git a/lib/syntax_tools/src/erl_syntax.erl b/lib/syntax_tools/src/erl_syntax.erl
index f4cda814fc..ee42e56172 100644
--- a/lib/syntax_tools/src/erl_syntax.erl
+++ b/lib/syntax_tools/src/erl_syntax.erl
@@ -443,7 +443,14 @@
-type syntaxTree() :: #tree{} | #wrapper{} | erl_parse().
--type erl_parse() :: erl_parse:abstract_form() | erl_parse:abstract_expr().
+-type erl_parse() :: erl_parse:abstract_clause()
+ | erl_parse:abstract_expr()
+ | erl_parse:abstract_form()
+ | erl_parse:abstract_type()
+ | erl_parse:form_info()
+ %% To shut up Dialyzer:
+ | {bin_element, _, _, _, _}.
+
%% The representation built by the Erlang standard library parser
%% `erl_parse'. This is a subset of the {@link syntaxTree()} type.
diff --git a/lib/syntax_tools/src/erl_syntax_lib.erl b/lib/syntax_tools/src/erl_syntax_lib.erl
index 9815559779..5aecf5d774 100644
--- a/lib/syntax_tools/src/erl_syntax_lib.erl
+++ b/lib/syntax_tools/src/erl_syntax_lib.erl
@@ -280,7 +280,7 @@ mapfoldl(_, S, []) ->
%% =====================================================================
%% @spec variables(syntaxTree()) -> set(atom())
%%
-%% set(T) = //stdlib/sets:set(T)
+%% @type set(T) = //stdlib/sets:set(T)
%%
%% @doc Returns the names of variables occurring in a syntax tree, The
%% result is a set of variable names represented by atoms. Macro names
@@ -1955,7 +1955,7 @@ analyze_application(Node) ->
%% =====================================================================
-%% @spec analyze_type_application(Node::syntaxTree()) -> typeName()
+%% @spec analyze_type_application(Node::syntaxTree()) -> TypeName
%%
%% TypeName = {atom(), integer()}
%% | {ModuleName, {atom(), integer()}}
diff --git a/lib/syntax_tools/src/erl_tidy.erl b/lib/syntax_tools/src/erl_tidy.erl
index f2de12b410..9e273dfb84 100644
--- a/lib/syntax_tools/src/erl_tidy.erl
+++ b/lib/syntax_tools/src/erl_tidy.erl
@@ -36,6 +36,11 @@
%% been reasonably well tested, but the possibility of errors remains.
%% Keep backups of your original code safely stored, until you feel
%% confident that the new, modified code can be trusted.
+%%
+%% @type syntaxTree() = erl_syntax:syntaxTree(). An abstract syntax
+%% tree. See the {@link erl_syntax} module for details.
+%%
+%% @type filename() = file:filename().
-module(erl_tidy).
@@ -79,7 +84,6 @@ dir(Dir) ->
%% =====================================================================
%% @spec dir(Directory::filename(), Options::[term()]) -> ok
-%% filename() = file:filename()
%%
%% @doc Tidies Erlang source files in a directory and its
%% subdirectories.
@@ -206,7 +210,7 @@ file__defaults() ->
{verbose, false}].
default_printer() ->
- fun (Tree, Options) -> erl_prettypr:format(Tree, Options) end.
+ fun erl_prettypr:format/2.
%% =====================================================================
%% @spec file(Name) -> ok
@@ -253,7 +257,7 @@ file(Name) ->
%%
%% <dt>{printer, Function}</dt>
%% <dd><ul>
-%% <li>`Function = (syntaxTree()) -> string()'</li>
+%% <li>`Function = (syntaxTree(), [term()]) -> string()'</li>
%% </ul>
%%
%% Specifies a function for prettyprinting Erlang syntax trees.
@@ -414,7 +418,7 @@ write_module(Tree, Name, Opts) ->
print_module(Tree, Opts) ->
Printer = proplists:get_value(printer, Opts),
- io:format(Printer(Tree, Opts)).
+ io:put_chars(Printer(Tree, Opts)).
output(FD, Printer, Tree, Opts) ->
io:put_chars(FD, Printer(Tree, Opts)),
@@ -513,7 +517,6 @@ module(Forms) ->
%% @spec module(Forms, Options::[term()]) -> syntaxTree()
%%
%% Forms = syntaxTree() | [syntaxTree()]
-%% syntaxTree() = erl_syntax:syntaxTree()
%%
%% @doc Tidies a syntax tree representation of a module
%% definition. The given `Forms' may be either a single
diff --git a/lib/syntax_tools/src/igor.erl b/lib/syntax_tools/src/igor.erl
index 1d14bd7c3a..943250e5cd 100644
--- a/lib/syntax_tools/src/igor.erl
+++ b/lib/syntax_tools/src/igor.erl
@@ -151,7 +151,8 @@ default_printer(Tree, Options) ->
%% @spec parse_transform(Forms::[syntaxTree()], Options::[term()]) ->
%% [syntaxTree()]
%%
-%% syntaxTree() = erl_syntax:syntaxTree()
+%% @type syntaxTree() = erl_syntax:syntaxTree(). An abstract syntax
+%% tree. See the {@link erl_syntax} module for details.
%%
%% @doc Allows Igor to work as a component of the Erlang compiler.
%% Including the term `{parse_transform, igor}' in the
@@ -212,7 +213,7 @@ merge(Name, Files) ->
%% @spec merge(Name::atom(), Files::[filename()], Options::[term()]) ->
%% [filename()]
%%
-%% filename() = file:filename()
+%% @type filename() = file:filename()
%%
%% @doc Merges source code files to a single file. `Name'
%% specifies the name of the resulting module - not the name of the
@@ -367,6 +368,7 @@ merge_files(Name, Files, Options) ->
%% @spec merge_files(Name::atom(), Sources::[Forms],
%% Files::[filename()], Options::[term()]) ->
%% {syntaxTree(), [stubDescriptor()]}
+%%
%% Forms = syntaxTree() | [syntaxTree()]
%%
%% @doc Merges source code files and syntax trees to a single syntax
diff --git a/lib/syntax_tools/src/merl_tests.erl b/lib/syntax_tools/src/merl_tests.erl
index c1aae3100e..27db594050 100644
--- a/lib/syntax_tools/src/merl_tests.erl
+++ b/lib/syntax_tools/src/merl_tests.erl
@@ -48,6 +48,21 @@ parse_error_test_() ->
f(merl:quote("{")))
].
+transform_parse_error_test_() ->
+ [?_assertEqual("merl:quote(\"{\")",
+ f(merl_transform:parse_transform(
+ [?Q("merl:quote(\"{\")")], []))),
+ ?_assertEqual("merl:quote(2, \"{\")",
+ f(merl_transform:parse_transform(
+ [?Q("merl:quote(2, \"{\")")], []))),
+ ?_assertEqual("merl:qquote(\"{\", [{var, V}])",
+ f(merl_transform:parse_transform(
+ [?Q("merl:qquote(\"{\", [{var, V}])")], []))),
+ ?_assertEqual("merl:qquote(2, \"{\", [{var, V}])",
+ f(merl_transform:parse_transform(
+ [?Q("merl:qquote(2, \"{\", [{var, V}])")], [])))
+ ].
+
term_test_() ->
[?_assertEqual(tuple, erl_syntax:type(merl:term({}))),
?_assertEqual("{foo, 42}", f(merl:term({foo, 42})))
diff --git a/lib/syntax_tools/src/merl_transform.erl b/lib/syntax_tools/src/merl_transform.erl
index fe58b6a122..497baddd0a 100644
--- a/lib/syntax_tools/src/merl_transform.erl
+++ b/lib/syntax_tools/src/merl_transform.erl
@@ -104,10 +104,15 @@ expand_qquote([Text, Env], T, Line) ->
case erl_syntax:is_literal(Text) of
true ->
As = [Line, erl_syntax:concrete(Text)],
- %% expand further if possible
- expand(merl:qquote(Line, "merl:subst(_@tree, _@env)",
- [{tree, eval_call(Line, quote, As, T)},
- {env, Env}]));
+ case eval_call(Line, quote, As, failed) of
+ failed ->
+ T;
+ T1 ->
+ %% expand further if possible
+ expand(merl:qquote(Line, "merl:subst(_@tree, _@env)",
+ [{tree, T1},
+ {env, Env}]))
+ end;
false ->
T
end;
diff --git a/lib/syntax_tools/test/merl_SUITE.erl b/lib/syntax_tools/test/merl_SUITE.erl
index 945972d405..52bbd9b3b8 100644
--- a/lib/syntax_tools/test/merl_SUITE.erl
+++ b/lib/syntax_tools/test/merl_SUITE.erl
@@ -29,12 +29,14 @@
init_per_group/2,end_per_group/2]).
%% Test cases
--export([merl_smoke_test/1]).
+-export([merl_smoke_test/1,
+ transform_parse_error_test/1]).
suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
- [merl_smoke_test].
+ [merl_smoke_test,
+ transform_parse_error_test].
groups() ->
[].
@@ -84,6 +86,21 @@ merl_smoke_test(Config) when is_list(Config) ->
end)),
ok.
+transform_parse_error_test(_Config) ->
+ ?assertEqual("merl:quote(\"{\")",
+ f(merl_transform:parse_transform(
+ [?Q("merl:quote(\"{\")")], []))),
+ ?assertEqual("merl:quote(2, \"{\")",
+ f(merl_transform:parse_transform(
+ [?Q("merl:quote(2, \"{\")")], []))),
+ ?assertEqual("merl:qquote(\"{\", [{var, V}])",
+ f(merl_transform:parse_transform(
+ [?Q("merl:qquote(\"{\", [{var, V}])")], []))),
+ ?assertEqual("merl:qquote(2, \"{\", [{var, V}])",
+ f(merl_transform:parse_transform(
+ [?Q("merl:qquote(2, \"{\", [{var, V}])")], []))),
+ ok.
+
%% utilities
f(Ts) when is_list(Ts) ->
diff --git a/lib/syntax_tools/test/syntax_tools_SUITE.erl b/lib/syntax_tools/test/syntax_tools_SUITE.erl
index b935d42bb7..43c17e9f1f 100644
--- a/lib/syntax_tools/test/syntax_tools_SUITE.erl
+++ b/lib/syntax_tools/test/syntax_tools_SUITE.erl
@@ -27,14 +27,14 @@
%% Test cases
-export([app_test/1,appup_test/1,smoke_test/1,revert/1,revert_map/1,
t_abstract_type/1,t_erl_parse_type/1,t_epp_dodger/1,
- t_comment_scan/1,t_igor/1]).
+ t_comment_scan/1,t_igor/1,t_erl_tidy/1]).
suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
[app_test,appup_test,smoke_test,revert,revert_map,
t_abstract_type,t_erl_parse_type,t_epp_dodger,
- t_comment_scan,t_igor].
+ t_comment_scan,t_igor,t_erl_tidy].
groups() ->
[].
@@ -237,6 +237,12 @@ t_igor(Config) when is_list(Config) ->
ok.
+t_erl_tidy(Config) when is_list(Config) ->
+ DataDir = ?config(data_dir, Config),
+ File = filename:join(DataDir,"erl_tidy_tilde.erl"),
+ ok = erl_tidy:file(File, [{stdout, true}]),
+ ok.
+
test_comment_scan([],_) -> ok;
test_comment_scan([File|Files],DataDir) ->
Filename = filename:join(DataDir,File),
diff --git a/lib/syntax_tools/test/syntax_tools_SUITE_data/erl_tidy_tilde.erl b/lib/syntax_tools/test/syntax_tools_SUITE_data/erl_tidy_tilde.erl
new file mode 100644
index 0000000000..888264bad6
--- /dev/null
+++ b/lib/syntax_tools/test/syntax_tools_SUITE_data/erl_tidy_tilde.erl
@@ -0,0 +1,13 @@
+%%
+%% File: erl_tidy_tilde.erl
+%% Author: Mark Bucciarelli
+%% Created: 2016-06-05
+%%
+
+-module(erl_tidy_tilde).
+
+-export([start/0]).
+
+start() ->
+ io:put_chars("tilde characters ('~')in source were "
+ "breaking erl_tidy\n").
diff --git a/lib/syntax_tools/test/syntax_tools_SUITE_data/type_specs.erl b/lib/syntax_tools/test/syntax_tools_SUITE_data/type_specs.erl
index 5621d3a293..e4f8a1c3de 100644
--- a/lib/syntax_tools/test/syntax_tools_SUITE_data/type_specs.erl
+++ b/lib/syntax_tools/test/syntax_tools_SUITE_data/type_specs.erl
@@ -49,9 +49,12 @@
-type m1() :: #{} | map().
-type m2() :: #{a := m1(), b => #{} | fy:m2()}.
--type m3() :: #{...}.
--type m4() :: #{_ => _, ...}.
--type m5() :: #{any() => any(), ...}. % Currently printed as `#{..., ...}'.
+%-type m3() :: #{...}.
+%-type m4() :: #{_ => _, ...}.
+%-type m5() :: #{any() => any(), ...}.
+-type m3() :: #{any() => any()}.
+-type m4() :: #{_ => _, any() => any()}.
+-type m5() :: #{any() => any(), any() => any()}.
-type b1() :: B1 :: binary() | (BitString :: bitstring()).
-define(PAIR(A, B), {(A), (B)}).
diff --git a/lib/tools/doc/src/erlang_mode.xml b/lib/tools/doc/src/erlang_mode.xml
index 00cf5196b4..7fef74813b 100644
--- a/lib/tools/doc/src/erlang_mode.xml
+++ b/lib/tools/doc/src/erlang_mode.xml
@@ -252,7 +252,14 @@
behavior</item>
<item>gen_event - skeleton for the OTP gen_event behavior</item>
<item>gen_fsm - skeleton for the OTP gen_fsm behavior</item>
- <item>gen_statem - skeleton for the OTP gen_statem behavior</item>
+ <item>
+ gen_statem (StateName/3) - skeleton for the OTP gen_statem behavior
+ using state name functions
+ </item>
+ <item>
+ gen_statem (handle_event/4) - skeleton for the OTP gen_statem behavior
+ using one state function
+ </item>
<item>Library module - skeleton for a module that does not
implement a process.</item>
<item>Corba callback - skeleton for a Corba callback module.</item>
diff --git a/lib/tools/doc/src/notes.xml b/lib/tools/doc/src/notes.xml
index 979fa5e0ab..a0a817c0f2 100644
--- a/lib/tools/doc/src/notes.xml
+++ b/lib/tools/doc/src/notes.xml
@@ -31,6 +31,21 @@
</header>
<p>This document describes the changes made to the Tools application.</p>
+<section><title>Tools 2.8.5</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>Correct a bug when adding multiple modules to an Xref
+ server. The bug was introduced in OTP-19.0. </p>
+ <p>
+ Own Id: OTP-13708 Aux Id: ERL-173 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Tools 2.8.4</title>
<section><title>Fixed Bugs and Malfunctions</title>
@@ -45,6 +60,25 @@
</list>
</section>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>Optimize adding multiple modules to an Xref server.
+ </p>
+ <p>
+ Own Id: OTP-13593</p>
+ </item>
+ <item>
+ <p>
+ Various emacs mode improvements, such as better tags
+ support.</p>
+ <p>
+ Own Id: OTP-13610</p>
+ </item>
+ </list>
+ </section>
+
</section>
<section><title>Tools 2.8.3</title>
diff --git a/lib/tools/doc/src/xref_chapter.xml b/lib/tools/doc/src/xref_chapter.xml
index 8b14e03064..872793bdcb 100644
--- a/lib/tools/doc/src/xref_chapter.xml
+++ b/lib/tools/doc/src/xref_chapter.xml
@@ -234,7 +234,7 @@
operand of the intersection operator <c>*</c> is implicitly
converted to the more special type of the second operand.</item>
<tag><c>xref:q(s, "(Mod) tools").</c></tag>
- <item>All modules of the <c>tools</c> application.</item>
+ <item>All modules of the Tools application.</item>
<tag><c>xref:q(s, '"xref_.*" : Mod').</c></tag>
<item>All modules with a name beginning with <c>xref_</c>.</item>
<tag><c>xref:q(s, "# E&nbsp;|&nbsp;X&nbsp;").</c></tag>
@@ -252,9 +252,9 @@
<tag><c>xref:q(s, "XC * (ME - strict ME)").</c></tag>
<item>External calls within some module.</item>
<tag><c>xref:q(s, "E&nbsp;|||&nbsp;kernel").</c></tag>
- <item>All calls within the <c>kernel</c> application. </item>
+ <item>All calls within the Kernel application. </item>
<tag><c>xref:q(s, "closure&nbsp;E&nbsp;|&nbsp;kernel&nbsp;||&nbsp;kernel").</c></tag>
- <item>All direct and indirect calls within the <c>kernel</c>
+ <item>All direct and indirect calls within the Kernel
application. Both the calling and the used functions of
indirect calls are defined in modules of the kernel
application, but it is possible that some functions outside
diff --git a/lib/tools/emacs/erlang-skels.el b/lib/tools/emacs/erlang-skels.el
index ce26c83295..0284c9d686 100644
--- a/lib/tools/emacs/erlang-skels.el
+++ b/lib/tools/emacs/erlang-skels.el
@@ -56,8 +56,10 @@
erlang-skel-gen-event erlang-skel-header)
("gen_fsm" "gen-fsm"
erlang-skel-gen-fsm erlang-skel-header)
- ("gen_statem" "gen-statem"
- erlang-skel-gen-statem erlang-skel-header)
+ ("gen_statem (StateName/3)" "gen-statem-StateName"
+ erlang-skel-gen-statem-StateName erlang-skel-header)
+ ("gen_statem (handle_event/4)" "gen-statem-handle-event"
+ erlang-skel-gen-statem-handle-event erlang-skel-header)
("wx_object" "wx-object"
erlang-skel-wx-object erlang-skel-header)
("Library module" "gen-lib"
@@ -497,6 +499,7 @@ Please see the function `tempo-define-template'.")
"%% {stop, Reason}" n
(erlang-skel-separator-end 2)
"init([]) ->" n>
+ "process_flag(trap_exit, true)," n>
"{ok, #state{}}." n
n
(erlang-skel-separator-start 2)
@@ -740,6 +743,7 @@ Please see the function `tempo-define-template'.")
"%% {stop, StopReason}" n
(erlang-skel-separator-end 2)
"init([]) ->" n>
+ "process_flag(trap_exit, true)," n>
"{ok, state_name, #state{}}." n
n
(erlang-skel-separator-start 2)
@@ -860,7 +864,7 @@ Please see the function `tempo-define-template'.")
"*The template of a gen_fsm.
Please see the function `tempo-define-template'.")
-(defvar erlang-skel-gen-statem
+(defvar erlang-skel-gen-statem-StateName
'((erlang-skel-include erlang-skel-large-header)
"-behaviour(gen_statem)." n n
@@ -868,9 +872,8 @@ Please see the function `tempo-define-template'.")
"-export([start_link/0])." n
n
"%% gen_statem callbacks" n
- "-export([init/1, terminate/3, code_change/4])." n
+ "-export([callback_mode/0, init/1, terminate/3, code_change/4])." n
"-export([state_name/3])." n
- "-export([handle_event/4])." n
n
"-define(SERVER, ?MODULE)." n
n
@@ -899,48 +902,151 @@ Please see the function `tempo-define-template'.")
(erlang-skel-separator-start 2)
"%% @private" n
"%% @doc" n
+ "%% Define the callback_mode() for this callback module." n
+ (erlang-skel-separator-end 2)
+ "-spec callback_mode() -> gen_statem:callback_mode()." n
+ "callback_mode() -> state_functions." n
+ n
+ (erlang-skel-separator-start 2)
+ "%% @private" n
+ "%% @doc" n
"%% Whenever a gen_statem is started using gen_statem:start/[3,4] or" n
"%% gen_statem:start_link/[3,4], this function is called by the new" n
"%% process to initialize." n
(erlang-skel-separator-end 2)
- "-spec init(Args :: term()) -> " n>
- "{gen_statem:callback_mode()," n>
- "State :: term(), Data :: term()} |" n>
- "{gen_statem:callback_mode()," n>
- "State :: term(), Data :: term()," n>
+ "-spec init(Args :: term()) ->" n>
+ "{ok, State :: term(), Data :: term()} |" n>
+ "{ok, State :: term(), Data :: term()," n>
"[gen_statem:action()] | gen_statem:action()} |" n>
"ignore |" n>
"{stop, Reason :: term()}." n
"init([]) ->" n>
- "{state_functions, state_name, #data{}}." n
+ "process_flag(trap_exit, true)," n>
+ "{ok, state_name, #data{}}." n
n
(erlang-skel-separator-start 2)
"%% @private" n
"%% @doc" n
- "%% If the gen_statem runs with CallbackMode =:= state_functions" n
- "%% there should be one instance of this function for each possible" n
- "%% state name. Whenever a gen_statem receives an event," n
- "%% the instance of this function with the same name" n
- "%% as the current state name StateName is called to" n
- "%% handle the event." n
+ "%% There should be one function like this for each state name." n
+ "%% Whenever a gen_statem receives an event, the function " n
+ "%% with the name of the current state (StateName) " n
+ "%% is called to handle the event." n
+ "%%" n
+ "%% NOTE: If there is an exported function handle_event/4, it is called" n
+ "%% instead of StateName/3 functions like this!" n
(erlang-skel-separator-end 2)
"-spec state_name(" n>
"gen_statem:event_type(), Msg :: term()," n>
"Data :: term()) ->" n>
- "gen_statem:state_function_result(). " n
+ "gen_statem:state_function_result()." n
"state_name({call,Caller}, _Msg, Data) ->" n>
"{next_state, state_name, Data, [{reply,Caller,ok}]}." n
n
(erlang-skel-separator-start 2)
"%% @private" n
"%% @doc" n
- "%% If the gen_statem runs with CallbackMode =:= handle_event_function" n
- "%% this function is called for every event a gen_statem receives." n
+ "%% This function is called by a gen_statem when it is about to" n
+ "%% terminate. It should be the opposite of Module:init/1 and do any" n
+ "%% necessary cleaning up. When it returns, the gen_statem terminates with" n
+ "%% Reason. The return value is ignored." n
+ (erlang-skel-separator-end 2)
+ "-spec terminate(Reason :: term(), State :: term(), Data :: term()) ->" n>
+ "any()." n
+ "terminate(_Reason, _State, _Data) ->" n>
+ "void." n
+ n
+ (erlang-skel-separator-start 2)
+ "%% @private" n
+ "%% @doc" n
+ "%% Convert process state when code is changed" n
+ (erlang-skel-separator-end 2)
+ "-spec code_change(" n>
+ "OldVsn :: term() | {down,term()}," n>
+ "State :: term(), Data :: term(), Extra :: term()) ->" n>
+ "{ok, NewState :: term(), NewData :: term()} |" n>
+ "(Reason :: term())." n
+ "code_change(_OldVsn, State, Data, _Extra) ->" n>
+ "{ok, State, Data}." n
+ n
+ (erlang-skel-double-separator-start 3)
+ "%%% Internal functions" n
+ (erlang-skel-double-separator-end 3)
+ )
+ "*The template of a gen_statem (StateName/3).
+Please see the function `tempo-define-template'.")
+
+(defvar erlang-skel-gen-statem-handle-event
+ '((erlang-skel-include erlang-skel-large-header)
+ "-behaviour(gen_statem)." n n
+
+ "%% API" n
+ "-export([start_link/0])." n
+ n
+ "%% gen_statem callbacks" n
+ "-export([callback_mode/0, init/1, terminate/3, code_change/4])." n
+ "-export([handle_event/4])." n
+ n
+ "-define(SERVER, ?MODULE)." n
+ n
+ "-record(data, {})." n
+ n
+ (erlang-skel-double-separator-start 3)
+ "%%% API" n
+ (erlang-skel-double-separator-end 3) n
+ (erlang-skel-separator-start 2)
+ "%% @doc" n
+ "%% Creates a gen_statem process which calls Module:init/1 to" n
+ "%% initialize. To ensure a synchronized start-up procedure, this" n
+ "%% function does not return until Module:init/1 has returned." n
+ "%%" n
+ (erlang-skel-separator-end 2)
+ "-spec start_link() ->" n>
+ "{ok, Pid :: pid()} |" n>
+ "ignore |" n>
+ "{error, Error :: term()}." n
+ "start_link() ->" n>
+ "gen_statem:start_link({local, ?SERVER}, ?MODULE, [], [])." n
+ n
+ (erlang-skel-double-separator-start 3)
+ "%%% gen_statem callbacks" n
+ (erlang-skel-double-separator-end 3) n
+ (erlang-skel-separator-start 2)
+ "%% @private" n
+ "%% @doc" n
+ "%% Define the callback_mode() for this callback module." n
+ (erlang-skel-separator-end 2)
+ "-spec callback_mode() -> gen_statem:callback_mode()." n
+ "callback_mode() -> handle_event_function." n
+ n
+ (erlang-skel-separator-start 2)
+ "%% @private" n
+ "%% @doc" n
+ "%% Whenever a gen_statem is started using gen_statem:start/[3,4] or" n
+ "%% gen_statem:start_link/[3,4], this function is called by the new" n
+ "%% process to initialize." n
+ (erlang-skel-separator-end 2)
+ "-spec init(Args :: term()) ->" n>
+ "{ok, State :: term(), Data :: term()} |" n>
+ "{ok, State :: term(), Data :: term()," n>
+ "[gen_statem:action()] | gen_statem:action()} |" n>
+ "ignore |" n>
+ "{stop, Reason :: term()}." n
+ "init([]) ->" n>
+ "process_flag(trap_exit, true)," n>
+ "{ok, state_name, #data{}}." n
+ n
+ (erlang-skel-separator-start 2)
+ "%% @private" n
+ "%% @doc" n
+ "%% This function is called for every event a gen_statem receives." n
+ "%%" n
+ "%% NOTE: If there is no exported function handle_event/4," n
+ "%% StateName/3 functions are called instead!" n
(erlang-skel-separator-end 2)
"-spec handle_event(" n>
"gen_statem:event_type(), Msg :: term()," n>
"State :: term(), Data :: term()) ->" n>
- "gen_statem:handle_event_result(). " n
+ "gen_statem:handle_event_result()." n
"handle_event({call,From}, _Msg, State, Data) ->" n>
"{next_state, State, Data, [{reply,From,ok}]}." n
n
@@ -965,7 +1071,8 @@ Please see the function `tempo-define-template'.")
"-spec code_change(" n>
"OldVsn :: term() | {down,term()}," n>
"State :: term(), Data :: term(), Extra :: term()) ->" n>
- "{ok, NewState :: term(), NewData :: term()}." n
+ "{ok, NewState :: term(), NewData :: term()} |" n>
+ "(Reason :: term())." n
"code_change(_OldVsn, State, Data, _Extra) ->" n>
"{ok, State, Data}." n
n
@@ -973,7 +1080,7 @@ Please see the function `tempo-define-template'.")
"%%% Internal functions" n
(erlang-skel-double-separator-end 3)
)
- "*The template of a gen_statem.
+ "*The template of a gen_statem (handle_event/4).
Please see the function `tempo-define-template'.")
(defvar erlang-skel-wx-object
diff --git a/lib/tools/emacs/erlang-test.el b/lib/tools/emacs/erlang-test.el
new file mode 100644
index 0000000000..ba6190d194
--- /dev/null
+++ b/lib/tools/emacs/erlang-test.el
@@ -0,0 +1,184 @@
+;;; erlang-test.el -*- lexical-binding: t; coding: utf-8-unix -*-
+
+;;; Unit tests for erlang.el.
+
+;; Author: Johan Claesson
+;; Created: 2016-05-07
+;; Keywords: erlang, languages
+
+;; %CopyrightBegin%
+;;
+;; Copyright Ericsson AB 2016. All Rights Reserved.
+;;
+;; Licensed under the Apache License, Version 2.0 (the "License");
+;; you may not use this file except in compliance with the License.
+;; You may obtain a copy of the License at
+;;
+;; http://www.apache.org/licenses/LICENSE-2.0
+;;
+;; Unless required by applicable law or agreed to in writing, software
+;; distributed under the License is distributed on an "AS IS" BASIS,
+;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+;; See the License for the specific language governing permissions and
+;; limitations under the License.
+;;
+;; %CopyrightEnd%
+
+
+;;; Commentary:
+
+;; This library require GNU Emacs 25 or later.
+
+;;; Code:
+
+(require 'ert)
+(require 'cl-lib)
+(require 'erlang)
+
+(defvar erlang-test-code
+ '((nil . "-module(erlang_test).")
+ (nil . "-import(lists, [map/2]).")
+ (nil . "-compile(export_all).")
+ ("SYMBOL" . "-define(SYMBOL, value).")
+ ("MACRO" . "-define(MACRO(X), X + X).")
+ ("struct" . "-record(struct, {until,maps,are,everywhere}).")
+ ("function". "function() -> #struct{}."))
+ "Alist of erlang test code.
+Each entry have the format (TAGNAME . ERLANG_CODE). If TAGNAME
+is nil there is no definitions in the ERLANG_CODE. The
+ERLANG_CODE is a single line of erlang code. These lines will be
+concatenated to form an erlang file to test on.")
+
+
+(ert-deftest erlang-test-tags ()
+ (let* ((dir (make-temp-file "erlang-test" t))
+ (erlang-file (expand-file-name "erlang_test.erl" dir))
+ (tags-file (expand-file-name "TAGS" dir))
+ (old-tags-file-name (default-value 'tags-file-name))
+ (old-tags-table-list (default-value 'tags-table-list))
+ tags-file-name
+ tags-table-list
+ tags-table-set-list
+ erlang-buffer
+ erlang-mode-hook
+ prog-mode-hook
+ erlang-shell-mode-hook
+ tags-add-tables)
+ (unwind-protect
+ (progn
+ (setq-default tags-file-name nil)
+ (setq-default tags-table-list nil)
+ (erlang-test-create-erlang-file erlang-file)
+ (erlang-test-compile-tags erlang-file tags-file)
+ (setq erlang-buffer (find-file-noselect erlang-file))
+ (with-current-buffer erlang-buffer
+ (setq-local tags-file-name tags-file))
+ ;; Setting global tags-file-name is a workaround for
+ ;; GNU Emacs bug#23164.
+ (setq tags-file-name tags-file)
+ (erlang-test-complete-at-point tags-file)
+ (erlang-test-completion-table)
+ (erlang-test-xref-find-definitions erlang-file erlang-buffer))
+ (when (buffer-live-p erlang-buffer)
+ (kill-buffer erlang-buffer))
+ (let ((tags-buffer (find-buffer-visiting tags-file)))
+ (when (buffer-live-p tags-buffer)
+ (kill-buffer tags-buffer)))
+ (when (file-exists-p dir)
+ (delete-directory dir t))
+ (setq-default tags-file-name old-tags-file-name)
+ (setq-default tags-table-list old-tags-table-list))))
+
+(defun erlang-test-create-erlang-file (erlang-file)
+ (with-temp-file erlang-file
+ (cl-loop for (_ . code) in erlang-test-code
+ do (insert code "\n"))))
+
+(defun erlang-test-compile-tags (erlang-file tags-file)
+ (should (zerop (call-process "etags" nil nil nil
+ "-o" tags-file
+ erlang-file))))
+
+(defun erlang-test-completion-table ()
+ (let ((erlang-replace-etags-tags-completion-table t))
+ (setq tags-completion-table nil)
+ (tags-completion-table))
+ (should (equal (sort tags-completion-table #'string-lessp)
+ (sort (erlang-expected-completion-table) #'string-lessp))))
+
+(defun erlang-expected-completion-table ()
+ (append (cl-loop for (symbol . _) in erlang-test-code
+ when (stringp symbol)
+ append (list symbol (concat "erlang_test:" symbol)))
+ (list "erlang_test:" "erlang_test:module_info")))
+
+(defun erlang-test-xref-find-definitions (erlang-file erlang-buffer)
+ (cl-loop for (tagname . code) in erlang-test-code
+ for line = 1 then (1+ line)
+ do (when tagname
+ (switch-to-buffer erlang-buffer)
+ (xref-find-definitions tagname)
+ (erlang-test-verify-pos erlang-file line)
+ (xref-find-definitions (concat "erlang_test:" tagname))
+ (erlang-test-verify-pos erlang-file line)))
+ (xref-find-definitions "erlang_test:")
+ (erlang-test-verify-pos erlang-file 1))
+
+(defun erlang-test-verify-pos (expected-file expected-line)
+ (should (string-equal (file-truename expected-file)
+ (file-truename (buffer-file-name))))
+ (should (eq expected-line (line-number-at-pos)))
+ (should (= (point-at-bol) (point))))
+
+(defun erlang-test-complete-at-point (tags-file)
+ (with-temp-buffer
+ (erlang-mode)
+ (setq-local tags-file-name tags-file)
+ (insert "\nerlang_test:fun")
+ (erlang-complete-tag)
+ (should (looking-back "erlang_test:function"))
+ (insert "\nfun")
+ (erlang-complete-tag)
+ (should (looking-back "function"))
+ (insert "\nerlang_")
+ (erlang-complete-tag)
+ (should (looking-back "erlang_test:"))))
+
+
+(ert-deftest erlang-test-compile-options ()
+ (erlang-test-format-opt t
+ "t")
+ (erlang-test-format-opt nil
+ "nil")
+ (erlang-test-format-opt (cons 1 2)
+ "{1, 2}")
+ (erlang-test-format-opt (list 1)
+ "[1]")
+ (erlang-test-format-opt (list 1 2)
+ "[1, 2]")
+ (erlang-test-format-opt (list 1 2 3)
+ "[1, 2, 3]")
+ (erlang-test-format-opt 'symbol
+ "symbol")
+ (erlang-test-format-opt "string"
+ "\"string\"")
+ (erlang-test-format-opt []
+ "{}")
+ (erlang-test-format-opt [1]
+ "{1}")
+ (erlang-test-format-opt [1 2]
+ "{1, 2}")
+ (erlang-test-format-opt [1 2 (3 [4 5 6] 7)]
+ "{1, 2, [3, {4, 5, 6}, 7]}"))
+
+(defun erlang-test-format-opt (elisp &optional expected-erlang)
+ (let ((erlang (inferior-erlang-format-opt elisp)))
+ (message "%s -> %s" elisp erlang)
+ (when expected-erlang
+ (should (equal erlang expected-erlang)))
+ erlang))
+
+
+(provide 'erlang-test)
+
+;;; erlang-test.el ends here
diff --git a/lib/tools/emacs/erlang.el b/lib/tools/emacs/erlang.el
index 0a3fc0ddff..73c6b8d768 100644
--- a/lib/tools/emacs/erlang.el
+++ b/lib/tools/emacs/erlang.el
@@ -70,8 +70,8 @@
;; `debug-on-error' to `t'. Repeat the error and enclose the debug
;; information in your bug-report.
;;
-;; To set the variable you can use the following command:
-;; M-x set-variable RET debug-on-error RET t RET
+;; To toggle the variable you can use the following command:
+;; M-x toggle-debug-on-error RET
;;; Code:
(eval-when-compile (require 'cl))
@@ -971,7 +971,7 @@ resulting regexp is surrounded by \\_< and \\_>."
(defvar erlang-defun-prompt-regexp (concat "^" erlang-atom-regexp "\\s *(")
"Regexp which should match beginning of a clause.")
-(defvar erlang-file-name-extension-regexp "\\.[eh]rl$"
+(defvar erlang-file-name-extension-regexp "\\.erl$"
"*Regexp which should match an Erlang file name.
This regexp is used when an Erlang module name is extracted from the
@@ -1068,8 +1068,14 @@ behaviour.")
"Font lock keyword highlighting a function header.")
(defface erlang-font-lock-exported-function-name-face
- '((default (:inherit font-lock-function-name-face)))
- "Face used for highlighting exported functions.")
+ (if (featurep 'xemacs)
+ (progn
+ (require 'font-lock)
+ `((t (:foreground ,(face-foreground 'font-lock-function-name-face))
+ (:background ,(face-background 'font-lock-function-name-face)))))
+ '((default (:inherit font-lock-function-name-face))))
+ "Face used for highlighting exported functions."
+ :group 'erlang)
(defvar erlang-font-lock-exported-function-name-face
'erlang-font-lock-exported-function-name-face)
@@ -1285,6 +1291,11 @@ Unfortunately, XEmacs hasn't got support for a special Font
Lock syntax table. The effect is that `apply' in the atom
`foo_apply' will be highlighted as a bif.")
+(defvar erlang-replace-etags-tags-completion-table nil
+ "Internal flag used by advice `erlang-replace-tags-table'.
+This is non-nil when `etags-tags-completion-table' should be
+replaced by `erlang-etags-tags-completion-table'.")
+
;;; Avoid errors while compiling this file.
@@ -1338,11 +1349,19 @@ Lock syntax table. The effect is that `apply' in the atom
(defun erlang-version ()
"Return the current version of Erlang mode."
(interactive)
- (if (interactive-p)
+ (if (erlang-interactive-p)
(message "Erlang mode version %s, written by Anders Lindgren"
erlang-version))
erlang-version)
+(defun erlang-interactive-p ()
+ (if (fboundp 'called-interactively-p)
+ (called-interactively-p 'interactive)
+ (funcall (symbol-function 'interactive-p))))
+
+(unless (fboundp 'prog-mode)
+ (defun prog-mode ()
+ (use-local-map (make-keymap))))
;;;###autoload
(define-derived-mode erlang-mode prog-mode "Erlang"
@@ -1415,7 +1434,9 @@ Other commands:
(erlang-tags-init)
(erlang-font-lock-init)
(erlang-skel-init)
- (tempo-use-tag-list 'erlang-tempo-tags)
+ (when (fboundp 'tempo-use-tag-list)
+ (tempo-use-tag-list 'erlang-tempo-tags))
+ (run-hooks 'erlang-mode-hook)
(if (zerop (buffer-size))
(run-hooks 'erlang-new-file-hook)))
@@ -1536,7 +1557,9 @@ Other commands:
table)))
(set (make-local-variable 'font-lock-syntax-table)
erlang-font-lock-syntax-table)
- (set (make-local-variable 'font-lock-beginning-of-syntax-function)
+ (set (make-local-variable (if (boundp 'syntax-begin-function)
+ 'syntax-begin-function
+ 'font-lock-beginning-of-syntax-function))
'erlang-beginning-of-clause)
(make-local-variable 'font-lock-keywords)
(let ((level (cond ((boundp 'font-lock-maximum-decoration)
@@ -2244,6 +2267,7 @@ mode with the command `M-x erlang-mode RET'.")))
;; This code is based on the package `tempo' which is part of modern
;; Emacsen. (GNU Emacs 19.25 (?) and XEmacs 19.14.)
+(defvar erlang-skel)
(defun erlang-skel-init ()
"Generate the skeleton functions and menu items.
The variable `erlang-skel' contains the name and descriptions of
@@ -2970,8 +2994,9 @@ Return nil if inside string, t if in a comment."
(current-column)))
;; Type and Spec indentation
((eq (car stack-top) '::)
- (if (looking-at "}")
- ;; Closing record definition with types
+ (if (looking-at "[},)]")
+ ;; Closing function spec, record definition with types,
+ ;; or a comma at the start of the line
;; pop stack and recurse
(erlang-calculate-stack-indent indent-point
(cons (erlang-pop stack) (cdr state)))
@@ -3204,18 +3229,16 @@ With argument, do this that many times."
(interactive "p")
(or arg (setq arg 1))
(while (and (looking-at "[ \t]*[%\n]")
- (zerop (forward-line 1))))
+ (zerop (forward-line 1))))
;; Move to the next clause.
(erlang-beginning-of-clause (- arg))
(beginning-of-line);; Just to be sure...
(let ((continue t))
(while (and (not (bobp)) continue)
(forward-line -1)
- (skip-chars-forward " \t")
- (if (looking-at "[%\n]")
- nil
- (end-of-line)
- (setq continue nil)))))
+ (unless (looking-at "[ \t]*[%\n]")
+ (end-of-line)
+ (setq continue nil)))))
(defun erlang-mark-clause ()
"Put mark at end of clause, point at beginning."
@@ -3742,6 +3765,12 @@ In the future the list may contain more elements."
(if (assoc fk (cdr (car imports)))
(setq mod (car (car imports)))
(setq imports (cdr imports))))
+ (cond ((eq (preceding-char) ?#)
+ (setq fk (concat "-record(" fk)))
+ ((eq (preceding-char) ??)
+ (setq fk (concat "-define(" fk)))
+ ((and (null mod) (not (member fk erlang-int-bifs)))
+ (setq mod (erlang-get-module))))
(setq res (list mod fk)))))
(store-match-data md)
res)))
@@ -3812,20 +3841,19 @@ exported function."
(defun erlang-check-module-name-init ()
"Initialize the functionality to compare file and module names.
-Unless we have `before-save-hook', we redefine the function
+Unless we have `before-save-hook', we advice the function
`set-visited-file-name' since it clears the variable
-`local-write-file-hooks'. The original function definition is
-stored in `erlang-orig-set-visited-file-name'."
+`local-write-file-hooks'."
(if (boundp 'before-save-hook)
- ;; If we have that, `make-local-hook' is obsolete.
(add-hook 'before-save-hook 'erlang-check-module-name nil t)
(require 'advice)
- (unless (ad-advised-definition-p 'set-visited-file-name)
- (defadvice set-visited-file-name (after erlang-set-visited-file-name
- activate)
- (if (eq major-mode 'erlang-mode)
- (add-hook 'local-write-file-hooks 'erlang-check-module-name))))
- (add-hook 'local-write-file-hooks 'erlang-check-module-name)))
+ (when (fboundp 'ad-advised-definition-p)
+ (unless (ad-advised-definition-p 'set-visited-file-name)
+ (defadvice set-visited-file-name (after erlang-set-visited-file-name
+ activate)
+ (if (eq major-mode 'erlang-mode)
+ (add-hook 'local-write-file-hooks 'erlang-check-module-name))))
+ (add-hook 'local-write-file-hooks 'erlang-check-module-name))))
(defun erlang-check-module-name ()
@@ -3902,7 +3930,7 @@ non-whitespace characters following the point on the current line."
(newline)
(if (condition-case nil
(progn (erlang-indent-line) t)
- (error (if (bolp) (delete-backward-char 1))))
+ (error (if (bolp) (delete-char -1))))
(if (not (bolp))
(save-excursion
(insert " ->"))
@@ -3914,7 +3942,7 @@ non-whitespace characters following the point on the current line."
(beginning-of-line)
(newline
erlang-electric-semicolon-insert-blank-lines))))
- (error (if (bolp) (delete-backward-char 1))))))))
+ (error (if (bolp) (delete-char -1))))))))
(defun erlang-electric-comma (&optional arg)
@@ -3944,7 +3972,7 @@ non-whitespace characters following the point on the current line."
(newline)
(condition-case nil
(erlang-indent-line)
- (error (if (bolp) (delete-backward-char 1))))))
+ (error (if (bolp) (delete-char -1))))))
(defun erlang-electric-lt (&optional arg)
"Insert a less-than sign, and optionally mark it as an open paren."
@@ -4030,7 +4058,7 @@ non-whitespace characters following the point on the current line."
(newline)
(condition-case nil
(erlang-indent-line)
- (error (if (bolp) (delete-backward-char 1))))))
+ (error (if (bolp) (delete-char -1))))))
;; Then it's just a plain greater-than.
(t
@@ -4070,7 +4098,7 @@ After being split/merged into `erlang-after-arrow' and
(newline)
(condition-case nil
(erlang-indent-line)
- (error (if (bolp) (delete-backward-char 1)))))))
+ (error (if (bolp) (delete-char -1)))))))
(defun erlang-electric-newline (&optional arg)
@@ -4318,11 +4346,6 @@ as on the old form `tag'.
In the completion list, `module:tag' and `module:' shows up.
-Call this function from an appropriate init file, or add it to
-Erlang mode hook with the commands:
- (add-hook 'erlang-mode-hook 'erlang-tags-init)
- (add-hook 'erlang-shell-mode-hook 'erlang-tags-init)
-
This function only works under Emacs 18 and Emacs 19. Currently, It
is not implemented under XEmacs. (Hint: The Emacs 19 etags module
works under XEmacs.)"
@@ -4333,12 +4356,17 @@ works under XEmacs.)"
(setq erlang-tags-installed t))
(t
(require 'etags)
- ;; Test on a function available in the Emacs 19 version
- ;; of tags but not in the XEmacs version.
- (if (not (fboundp 'find-tag-noselect))
- ()
- (erlang-tags-define-keys (current-local-map))
- (setq erlang-tags-installed t)))))
+ (set (make-local-variable 'find-tag-default-function)
+ 'erlang-find-tag-for-completion)
+ (if (>= emacs-major-version 25)
+ (add-hook 'xref-backend-functions
+ #'erlang-etags--xref-backend nil t)
+ ;; Test on a function available in the Emacs 19 version
+ ;; of tags but not in the XEmacs version.
+ (when (fboundp 'find-tag-noselect)
+ (erlang-tags-define-keys (current-local-map))
+ (setq erlang-tags-installed t))))))
+
;; Set all keys bound to `find-tag' et.al. in the global map and the
@@ -4363,10 +4391,6 @@ works under XEmacs.)"
(erlang-menu-init))
-;; There exists a variable `find-tag-default-function'. It is not used
-;; since `complete-tag' uses it to get current word under point. In that
-;; situation we don't want the module to be prepended.
-
(defun erlang-find-tag-default ()
"Return the default tag.
Search `-import' list of imported functions.
@@ -4546,6 +4570,11 @@ Tags can be given on the forms `tag', `module:', `module:tag'."
(current-buffer))) ; Return the new buffer.
+
+
+
+
+
;; Process interactive arguments for erlang-find-tag-*.
;;
;; Negative arguments work only for `etags', not `tags'. This is not
@@ -4639,9 +4668,25 @@ Tags can be given on the forms `tag', `module:', `module:tag'."
(set (make-local-variable 'find-tag-regexp-search-function)
'erlang-tags-regexp-search-forward)
(set (make-local-variable 'find-tag-tag-order)
- '(erlang-tag-match-module-p))
+ (mapcar #'erlang-make-order-function-aware-of-modules
+ erlang-tags-orig-tag-order))
(set (make-local-variable 'find-tag-regexp-tag-order)
- '(erlang-tag-match-module-regexp-p))))
+ (mapcar #'erlang-make-order-function-aware-of-modules
+ erlang-tags-orig-regexp-tag-order))))
+
+(defun erlang-make-order-function-aware-of-modules (f)
+ `(lambda (tag)
+ (let (mod)
+ (when (string-match ":" tag)
+ (setq mod (substring tag 0 (match-beginning 0)))
+ (setq tag (substring tag (match-end 0) nil)))
+ (and (funcall ',f tag)
+ (or (null mod)
+ (erlang-tag-at-point-match-module-p mod))))))
+
+(defun erlang-tag-at-point-match-module-p (mod)
+ (string-equal mod (erlang-get-module-from-file-name
+ (funcall (symbol-function 'file-of-tag)))))
(defun erlang-tags-remove-module-check ()
@@ -4718,60 +4763,32 @@ for a tag on the form `module:tag'."
(funcall erlang-tags-orig-regexp-search-function
tag bound noerror count)))
-
-;; t if point is at a tag line that matches TAG, containing
-;; module information. Assumes that all other order functions
-;; are stored in `erlang-tags-orig-[regex]-tag-order'.
-
-(defun erlang-tag-match-module-p (tag)
- (erlang-tag-match-module-common-p tag erlang-tags-orig-tag-order))
-
-(defun erlang-tag-match-module-regexp-p (tag)
- (erlang-tag-match-module-common-p tag erlang-tags-orig-regexp-tag-order))
-
-(defun erlang-tag-match-module-common-p (tag order)
- (let ((mod nil)
- (found nil))
- (if (string-match ":" tag)
- (progn
- (setq mod (substring tag 0 (match-beginning 0)))
- (setq tag (substring tag (match-end 0) nil))))
- (while (and order (not found))
- (setq found
- (and (not (memq (car order)
- '(erlang-tag-match-module-p
- erlang-tag-match-module-regexp-p)))
- (funcall (car order) tag)))
- (setq order (cdr order)))
- (and found
- (or (null mod)
- (string= mod (erlang-get-module-from-file-name
- (file-of-tag)))))))
-
-
;;; Tags completion, Emacs 19 `etags' specific.
;;;
;;; The basic idea is to create a second completion table `erlang-tags-
;;; completion-table' containing all normal tags plus tags on the form
-;;; `module:tag'.
+;;; `module:tag' and `module:'.
-
-(when (and (fboundp 'etags-tags-completion-table)
+(when (and (locate-library "etags")
+ (require 'etags)
+ (fboundp 'etags-tags-completion-table)
(fboundp 'tags-lazy-completion-table)) ; Emacs 23.1+
(if (fboundp 'advice-add)
;; Emacs 24.4+
(advice-add 'etags-tags-completion-table :around
- (lambda (oldfun)
- (if (eq find-tag-default-function 'erlang-find-tag-for-completion)
- (erlang-etags-tags-completion-table)
- (funcall oldfun)))
- (list :name 'erlang-replace-tags-table))
+ #'erlang-etags-tags-completion-table-advice)
;; Emacs 23.1-24.3
- (defadvice etags-tags-completion-table (around erlang-replace-tags-table activate)
- (if (eq find-tag-default-function 'erlang-find-tag-for-completion)
+ (defadvice etags-tags-completion-table (around
+ erlang-replace-tags-table
+ activate)
+ (if erlang-replace-etags-tags-completion-table
(setq ad-return-value (erlang-etags-tags-completion-table))
ad-do-it))))
+(defun erlang-etags-tags-completion-table-advice (oldfun)
+ (if erlang-replace-etags-tags-completion-table
+ (erlang-etags-tags-completion-table)
+ (funcall oldfun)))
(defun erlang-complete-tag ()
"Perform tags completion on the text around point.
@@ -4783,26 +4800,21 @@ about Erlang modules."
(condition-case nil
(require 'etags)
(error nil))
- (cond ((and erlang-tags-installed
- (fboundp 'etags-tags-completion-table)
+ (cond ((and (fboundp 'etags-tags-completion-table)
(fboundp 'tags-lazy-completion-table)) ; Emacs 23.1+
- ;; This depends on the advice called erlang-replace-tags-table
- ;; above. It is not enough to let-bind
- ;; tags-completion-table-function since that will not override
- ;; the buffer-local value in the TAGS buffer.
- (let ((find-tag-default-function 'erlang-find-tag-for-completion))
+ (let ((erlang-replace-etags-tags-completion-table t))
(complete-tag)))
((and erlang-tags-installed
- (fboundp 'complete-tag)
- (fboundp 'tags-complete-tag)) ; Emacs 19
+ (fboundp 'complete-tag)
+ (fboundp 'tags-complete-tag)) ; Emacs 19-22
(let ((orig-tags-complete-tag (symbol-function 'tags-complete-tag)))
(fset 'tags-complete-tag
(symbol-function 'erlang-tags-complete-tag))
(unwind-protect
- (funcall (symbol-function 'complete-tag))
+ (complete-tag)
(fset 'tags-complete-tag orig-tags-complete-tag))))
((fboundp 'complete-tag) ; Emacs 19
- (funcall (symbol-function 'complete-tag)))
+ (complete-tag))
((fboundp 'tag-complete-symbol) ; XEmacs
(funcall (symbol-function 'tag-complete-symbol)))
(t
@@ -4817,19 +4829,22 @@ about Erlang modules."
(buffer-substring-no-properties start (point)))))
-
;; Based on `tags-complete-tag', but this one uses
;; `erlang-tags-completion-table' instead of `tags-completion-table'.
;;
;; This is the entry-point called by system function `completing-read'.
+;;
+;; Used for minibuffer completion in Emacs 19-24 and completion in
+;; erlang buffers in Emacs 19-22.
(defun erlang-tags-complete-tag (string predicate what)
- (save-excursion
- ;; If we need to ask for the tag table, allow that.
- (let ((enable-recursive-minibuffers t))
- (visit-tags-table-buffer))
+ (with-current-buffer (window-buffer (minibuffer-selected-window))
+ (save-excursion
+ ;; If we need to ask for the tag table, allow that.
+ (let ((enable-recursive-minibuffers t))
+ (visit-tags-table-buffer))
(if (eq what t)
(all-completions string (erlang-tags-completion-table) predicate)
- (try-completion string (erlang-tags-completion-table) predicate))))
+ (try-completion string (erlang-tags-completion-table) predicate)))))
;; `tags-completion-table' calls itself recursively, make it
@@ -4847,7 +4862,6 @@ about Erlang modules."
(fset 'tags-completion-table
erlang-tags-orig-completion-table)))
-
(defun erlang-tags-completion-table-1 ()
(make-local-variable 'erlang-tags-completion-table)
(or erlang-tags-completion-table
@@ -4858,59 +4872,190 @@ about Erlang modules."
(setq erlang-tags-completion-table tags-completion-table))))
+
+;; Emacs 25 expects this function to return a list (and it is ok for
+;; it to include duplicates). Older emacsen expects an obarray.
+(defun erlang-etags-tags-completion-table ()
+ (if (>= emacs-major-version 25)
+ (erlang-etags-tags-completion-table-list)
+ (let ((obarray (make-vector 511 0)))
+ (dolist (tag (erlang-etags-tags-completion-table-list))
+ (intern tag obarray))
+ obarray)))
+
;; Based on `etags-tags-completion-table'. The difference is that we
-;; add three symbols to the vector, the tag, module: and module:tag.
+;; add three strings to the list, the tag, module: and module:tag.
;; The module is extracted from the file name of a tag. (This one
;; only works if we are looking at an `etags' file. However, this is
;; the only format supported by Emacs, so far.)
-(defun erlang-etags-tags-completion-table ()
- (let ((table (make-vector 511 0))
- (file nil)
- (progress-reporter
- (when (fboundp 'make-progress-reporter)
- (make-progress-reporter
- (format "Making erlang tags completion table for %s..." buffer-file-name)
- (point-min) (point-max)))))
+(defun erlang-etags-tags-completion-table-list ()
+ (let ((progress-reporter
+ (make-progress-reporter
+ (format "Making tags completion table for %s..." buffer-file-name)
+ (point-min) (point-max)))
+ table module)
(save-excursion
(goto-char (point-min))
- ;; This monster regexp matches an etags tag line.
- ;; \1 is the string to match;
- ;; \2 is not interesting;
- ;; \3 is the guessed tag name; XXX guess should be better eg DEFUN
- ;; \4 is not interesting;
- ;; \5 is the explicitly-specified tag name.
- ;; \6 is the line to start searching at;
- ;; \7 is the char to start searching at.
(while (progn
- (while (and
- (eq (following-char) ?\f)
- (looking-at "\f\n\\([^,\n]*\\),.*\n"))
- (setq file (buffer-substring
- (match-beginning 1) (match-end 1)))
- (goto-char (match-end 0)))
+ (while (and (eq (following-char) ?\f)
+ (looking-at "\f\n\\([^,\n]*\\),.*\n"))
+ (let ((file (buffer-substring (match-beginning 1)
+ (match-end 1))))
+ (setq module (erlang-get-module-from-file-name file))
+ (when module
+ (push (concat module ":") table)
+ (push (concat module ":module_info") table))
+ (forward-line 2)))
+ ;; This regexp matches an explicit tag name or the
+ ;; place where it would start.
(re-search-forward
- "\
-^\\(\\([^\177]+[^-a-zA-Z0-9_$\177]+\\)?\\([-a-zA-Z0-9_$?:]+\\)\
-\[^-a-zA-Z0-9_$?:\177]*\\)\177\\(\\([^\n\001]+\\)\001\\)?\
-\\([0-9]+\\)?,\\([0-9]+\\)?\n"
+ "[\f\t\n\r()=,; ]?\177\\\(?:\\([^\n\001]+\\)\001\\)?"
nil t))
- (let ((tag (if (match-beginning 5)
+ (let ((tag (if (match-beginning 1)
;; There is an explicit tag name.
- (buffer-substring (match-beginning 5) (match-end 5))
- ;; No explicit tag name. Best guess.
- (buffer-substring (match-beginning 3) (match-end 3))))
- (module (and file
- (erlang-get-module-from-file-name file))))
- (intern tag table)
+ (buffer-substring (match-beginning 1) (match-end 1))
+ ;; No explicit tag name. Backtrack a little,
+ ;; and look for the implicit one.
+ (goto-char (match-beginning 0))
+ (skip-chars-backward "^\f\t\n\r()=,; ")
+ (buffer-substring (point) (match-beginning 0)))))
+ (forward-line 1)
+ (push tag table)
(when (stringp module)
- (intern (concat module ":" tag) table)
- ;; Only the first ones will be stored in the table.
- (intern (concat module ":") table)
- (intern (concat module ":module_info") table))
- (when progress-reporter
- (progress-reporter-update progress-reporter (point))))))
+ (push (concat module ":" tag) table))
+ (progress-reporter-update progress-reporter (point)))))
table))
+
+
+
+;;; Xref backend erlang-etags
+
+;; In GNU Emacs 25 xref was introduced. It is a framework for cross
+;; referencing commands, in particular commands for finding
+;; definitions. It does not replace etags. It rather resides on top
+;; of it and provides user-friendly commands. The idea is that the
+;; user commands should be the same regardless of what backend does
+;; the actual finding of definitions.
+
+;; The backend below is a wrapper around the built-in etags backend.
+;; It adds awareness of the module:tag syntax in a similar way that is
+;; done above for the old etags commands.
+
+
+(defun erlang-etags--xref-backend () 'erlang-etags)
+
+(defun erlang-soft-require (feature)
+ (when (locate-library (symbol-name feature))
+ (require feature)))
+
+(and (erlang-soft-require 'xref)
+ (erlang-soft-require 'cl-generic)
+ ;; The purpose of using eval here is to avoid compilation
+ ;; warnings in emacsen without cl-defmethod.
+ (eval
+ '(progn
+ (cl-defmethod xref-backend-identifier-at-point
+ ((_backend (eql erlang-etags)))
+ (erlang-find-tag-default))
+
+ (cl-defmethod xref-backend-definitions
+ ((_backend (eql erlang-etags)) identifier)
+ (erlang-xref-find-definitions identifier))
+
+ (cl-defmethod xref-backend-apropos
+ ((_backend (eql erlang-etags)) identifier)
+ (erlang-xref-find-definitions identifier t))
+
+ (cl-defmethod xref-backend-identifier-completion-table
+ ((_backend (eql erlang-etags)))
+ (let ((erlang-replace-etags-tags-completion-table t))
+ (tags-completion-table))))))
+
+
+
+
+(defun erlang-xref-find-definitions (identifier &optional is-regexp)
+ (let ((id-list (split-string identifier ":")))
+ (cond
+ ;; Handle "tag"
+ ((null (cdr id-list))
+ (erlang-xref-find-definitions-tag identifier is-regexp))
+ ;; Handle "module:"
+ ((string-equal (cadr id-list) "")
+ (erlang-xref-find-definitions-module (car id-list)))
+ ;; Handle "module:tag"
+ (t
+ (erlang-xref-find-definitions-module-tag (car id-list)
+ (cadr id-list)
+ is-regexp)))))
+
+(defun erlang-xref-find-definitions-tag (tag is-regexp)
+ "Find all definitions of TAG and reorder them so that
+definitions in the currently visited file comes first."
+ (when (fboundp 'etags--xref-find-definitions)
+ (let* ((current-file (and (buffer-file-name)
+ (file-truename (buffer-file-name))))
+ (xrefs (etags--xref-find-definitions tag is-regexp))
+ local-xrefs non-local-xrefs)
+ (while xrefs
+ (if (string-equal (erlang-xref-truename-file (car xrefs))
+ current-file)
+ (push (car xrefs) local-xrefs)
+ (push (car xrefs) non-local-xrefs))
+ (setq xrefs (cdr xrefs)))
+ (append (reverse local-xrefs)
+ (reverse non-local-xrefs)))))
+
+(defun erlang-xref-find-definitions-module (module)
+ (and (fboundp 'xref-make)
+ (fboundp 'xref-make-file-location)
+ (let* ((first-time t)
+ xrefs matching-files)
+ (save-excursion
+ (while (visit-tags-table-buffer (not first-time))
+ (setq first-time nil)
+ (let ((files (tags-table-files)))
+ (while files
+ (let* ((file (car files))
+ (m (erlang-get-module-from-file-name file)))
+ (when (and m (string-equal m module))
+ (unless (member file matching-files)
+ (push file
+ matching-files)
+ (push (xref-make file
+ (xref-make-file-location file 1 0))
+ xrefs))))
+ (setq files (cdr files))))))
+ (nreverse xrefs))))
+
+(defun erlang-xref-find-definitions-module-tag (module tag is-regexp)
+ "Find all definitions of TAG and filter away definitions
+outside of MODULE."
+ (when (fboundp 'etags--xref-find-definitions)
+ (let ((xrefs (etags--xref-find-definitions tag is-regexp))
+ xrefs-in-module)
+ (while xrefs
+ (when (string-equal module (erlang-xref-module (car xrefs)))
+ (push (car xrefs) xrefs-in-module))
+ (setq xrefs (cdr xrefs)))
+ xrefs-in-module)))
+
+(defun erlang-xref-module (xref)
+ (erlang-get-module-from-file-name (erlang-xref-file xref)))
+
+(defun erlang-xref-truename-file (xref)
+ (let ((file (erlang-xref-file xref)))
+ (and file
+ (file-truename file))))
+
+(defun erlang-xref-file (xref)
+ (and (fboundp 'xref-location-group)
+ (fboundp 'xref-item-location)
+ (xref-location-group (xref-item-location xref))))
+
+
+
;;;
;;; Prepare for other methods to run an Erlang slave process.
;;;
@@ -5060,19 +5205,10 @@ The following special commands are available:
(setq comint-input-ignoredups t)
(setq comint-scroll-show-maximum-output t)
(setq comint-scroll-to-bottom-on-output t)
- ;; In Emacs 19.30, `add-hook' has got a `local' flag, use it. If
- ;; the call fails, just call the normal `add-hook'.
- (condition-case nil
- (progn
- (add-hook 'comint-output-filter-functions
- 'inferior-erlang-strip-delete nil t)
- (add-hook 'comint-output-filter-functions
- 'inferior-erlang-strip-ctrl-m nil t))
- (error
- (funcall (symbol-function 'make-local-hook)
- 'comint-output-filter-functions) ; obsolete as of Emacs 21.1
- (add-hook 'comint-output-filter-functions 'inferior-erlang-strip-delete)
- (add-hook 'comint-output-filter-functions 'inferior-erlang-strip-ctrl-m)))
+ (add-hook 'comint-output-filter-functions
+ 'inferior-erlang-strip-delete nil t)
+ (add-hook 'comint-output-filter-functions
+ 'inferior-erlang-strip-ctrl-m nil t)
;; Some older versions of comint don't have an input ring.
(if (fboundp 'comint-read-input-ring)
(progn
@@ -5098,6 +5234,7 @@ The following special commands are available:
(define-key map [menu-bar compilation]
(cons "Errors" compilation-menu-map)))
map)))))
+ (erlang-tags-init)
(run-hooks 'erlang-shell-mode-hook))
@@ -5309,8 +5446,7 @@ frame will become deselected before the next command."
()
(or (inferior-erlang-running-p)
(error "No inferior Erlang shell is running"))
- (save-excursion
- (set-buffer inferior-erlang-buffer)
+ (with-current-buffer inferior-erlang-buffer
(let ((msg nil))
(while (save-excursion
(goto-char (process-mark inferior-erlang-process))
@@ -5330,8 +5466,7 @@ frame will become deselected before the next command."
The empty command resembles hitting RET. This is useful in some
situations, for instance if a crash or error report from sasl
has been printed after the last prompt."
- (save-excursion
- (set-buffer inferior-erlang-buffer)
+ (with-current-buffer inferior-erlang-buffer
(if (> (point-max) 1)
;; make sure we get a prompt if buffer contains data
(if (save-excursion
@@ -5397,7 +5532,7 @@ Return the position after the newly inserted command."
(boundp 'comint-last-output-start))
(save-excursion
(goto-char
- (if (interactive-p)
+ (if (erlang-interactive-p)
(symbol-value 'comint-last-input-end)
(symbol-value 'comint-last-output-start)))
(while (progn (skip-chars-forward "^\C-h")
@@ -5416,7 +5551,7 @@ Return the position after the newly inserted command."
(let ((pmark (process-mark (get-buffer-process (current-buffer)))))
(save-excursion
(goto-char
- (if (interactive-p)
+ (if (erlang-interactive-p)
(symbol-value 'comint-last-input-end)
(symbol-value 'comint-last-output-start)))
(while (re-search-forward "\r+$" pmark t)
@@ -5443,23 +5578,21 @@ There exists two workarounds for this bug:
(save-some-buffers)
(inferior-erlang-prepare-for-input)
(let* ((dir (inferior-erlang-compile-outdir))
-;;; (file (file-name-nondirectory (buffer-file-name)))
(noext (substring (erlang-local-buffer-file-name) 0 -4))
(opts (append (list (cons 'outdir dir))
(if current-prefix-arg
(list 'debug_info 'export_all))
erlang-compile-extra-opts))
end)
- (save-excursion
- (set-buffer inferior-erlang-buffer)
- (compilation-forget-errors))
+ (with-current-buffer inferior-erlang-buffer
+ (when (fboundp 'compilation-forget-errors)
+ (compilation-forget-errors)))
(setq end (inferior-erlang-send-command
(inferior-erlang-compute-compile-command noext opts)
nil))
(sit-for 0)
(inferior-erlang-wait-prompt)
- (save-excursion
- (set-buffer inferior-erlang-buffer)
+ (with-current-buffer inferior-erlang-buffer
(setq compilation-error-list nil)
(set-marker compilation-parsing-end end))
(setq compilation-last-buffer inferior-erlang-buffer)))
@@ -5499,7 +5632,8 @@ unless the optional NO-DISPLAY is non-nil."
(let ((ccfn erlang-compile-command-function-alist)
(res (inferior-erlang-compute-erl-compile-command module-name opts))
ccfn-entry
- done)
+ done
+ result)
(if (not (null (erlang-local-buffer-file-name)))
(while (and (not done) (not (null ccfn)))
(setq ccfn-entry (car ccfn))
@@ -5580,31 +5714,29 @@ unless the optional NO-DISPLAY is non-nil."
(defun inferior-erlang-format-comma-opts (opts)
(if (null opts)
""
- (concat ", " (inferior-erlang-format-opts opts))))
-
-(defun inferior-erlang-format-opts (opts)
- (concat "[" (inferior-erlang-string-join (mapcar 'inferior-erlang-format-opt
- opts)
- ", ")
- "]"))
+ (concat ", " (inferior-erlang-format-opt opts))))
(defun inferior-erlang-format-opt (opt)
(cond ((stringp opt) (concat "\"" opt "\""))
- ((atom opt) (format "%s" opt))
- ((consp opt) (concat "{" (inferior-erlang-string-join
- (mapcar 'inferior-erlang-format-opt
- (list (car opt) (cdr opt)))
- ", ")
- "}"))
- (t (error (format "Unexpected opt %s" opt)))))
-
-(defun inferior-erlang-string-join (strs sep)
- (let ((result (or (car strs) "")))
- (setq strs (cdr strs))
- (while strs
- (setq result (concat result sep (car strs)))
- (setq strs (cdr strs)))
- result))
+ ((vectorp opt) (inferior-erlang-tuple (append opt nil)))
+ ((atom opt) (format "%s" opt))
+ ((consp opt) (if (listp (cdr opt))
+ (inferior-erlang-list opt)
+ (inferior-erlang-tuple (list (car opt) (cdr opt)))))
+ (t (error "Unexpected erlang compile option %s" opt))))
+
+(defun inferior-erlang-tuple (opts)
+ (concat "{" (mapconcat 'inferior-erlang-format-opt
+ opts
+ ", ")
+ "}"))
+
+(defun inferior-erlang-list (opts)
+ (concat "[" (mapconcat 'inferior-erlang-format-opt
+ opts
+ ", ")
+ "]"))
+
(defun erlang-local-buffer-file-name ()
;; When editing a file remotely via tramp,
@@ -5629,12 +5761,14 @@ unless the optional NO-DISPLAY is non-nil."
(tramp-tramp-file-p (buffer-file-name))))
(defun erlang-tramp-get-localname ()
- (let ((tramp-info (tramp-dissect-file-name (buffer-file-name))))
- (if (fboundp 'tramp-file-name-localname)
- (tramp-file-name-localname tramp-info)
- ;; In old versions of tramp, it was `tramp-file-name-path'
- ;; instead of the newer `tramp-file-name-localname'
- (tramp-file-name-path tramp-info))))
+ (when (fboundp 'tramp-dissect-file-name)
+ (let ((tramp-info (tramp-dissect-file-name (buffer-file-name))))
+ (if (fboundp 'tramp-file-name-localname)
+ (tramp-file-name-localname tramp-info)
+ ;; In old versions of tramp, it was `tramp-file-name-path'
+ ;; instead of the newer `tramp-file-name-localname'
+ (when (fboundp 'tramp-file-name-path)
+ (tramp-file-name-path tramp-info))))))
;; `next-error' only accepts buffers with major mode `compilation-mode'
;; or with the minor mode `compilation-minor-mode' activated.
@@ -5651,16 +5785,14 @@ Capable of finding error messages in an inferior Erlang buffer."
(and (boundp 'compilation-last-buffer)
compilation-last-buffer))))
(if (and (bufferp buf)
- (save-excursion
- (set-buffer buf)
+ (with-current-buffer buf
(and (eq major-mode 'erlang-shell-mode)
(setq major-mode 'compilation-mode))))
(unwind-protect
(progn
(setq done t)
(next-error argp))
- (save-excursion
- (set-buffer buf)
+ (with-current-buffer buf
(setq major-mode 'erlang-shell-mode))))
(or done
(next-error argp))))
@@ -5763,7 +5895,7 @@ Simplified version of a combination `defalias' and `make-obsolete',
it assumes that NEWDEF is loaded."
(defalias sym (symbol-function newdef))
(if (fboundp 'make-obsolete)
- (make-obsolete sym newdef)))
+ (make-obsolete sym newdef "long ago")))
(erlang-obsolete 'calculate-erlang-indent 'erlang-calculate-indent)
@@ -5781,11 +5913,8 @@ it assumes that NEWDEF is loaded."
(erlang-obsolete 'name-of-erlang-function 'erlang-name-of-function)
-;; Fixme: shouldn't redefine `set-visited-file-name' anyhow -- see above.
(defconst erlang-unload-hook
(list (lambda ()
- (defalias 'set-visited-file-name
- 'erlang-orig-set-visited-file-name)
(when (featurep 'advice)
(ad-unadvise 'Man-notify-when-ready)
(ad-unadvise 'set-visited-file-name)))))
diff --git a/lib/tools/emacs/test.erl.indented b/lib/tools/emacs/test.erl.indented
index 6913068133..7a1ff6a954 100644
--- a/lib/tools/emacs/test.erl.indented
+++ b/lib/tools/emacs/test.erl.indented
@@ -70,6 +70,9 @@ foo() ->
234,
d}).
+-record(record5, { a = 1 :: integer()
+ , b = foobar :: atom()
+ }).
-define(MACRO_1, macro).
-define(MACRO_2(_), macro).
@@ -144,6 +147,12 @@ foo() ->
-type t25() :: #rec3{f123 :: [t24() |
1|2|3|4|a|b|c|d|
nonempty_maybe_improper_list(integer, any())]}.
+-type t26() :: #rec4{ a :: integer()
+ , b :: any()
+ }.
+-type t27() :: { integer()
+ , atom()
+ }.
-type t99() ::
{t2(),t4(),t5(),t6(),t7(),t8(),t10(),t14(),
t15(),t20(),t21(), t22(),t25()}.
@@ -179,6 +188,10 @@ foo() ->
| {'error', {'no_process', term()}
| {'no_such_group', term()}}.
+-spec add( X :: integer()
+ , Y :: integer()
+ ) -> integer().
+
-opaque attributes_data() ::
[{'column', column()} | {'line', info_line()} |
{'text', string()}] | {line(),column()}.
diff --git a/lib/tools/emacs/test.erl.orig b/lib/tools/emacs/test.erl.orig
index 621948cbe1..2552c71baf 100644
--- a/lib/tools/emacs/test.erl.orig
+++ b/lib/tools/emacs/test.erl.orig
@@ -70,6 +70,9 @@ foo() ->
234,
d}).
+-record(record5, { a = 1 :: integer()
+, b = foobar :: atom()
+}).
-define(MACRO_1, macro).
-define(MACRO_2(_), macro).
@@ -144,6 +147,12 @@ nonempty_maybe_improper_list('integer', any())|
-type t25() :: #rec3{f123 :: [t24() |
1|2|3|4|a|b|c|d|
nonempty_maybe_improper_list(integer, any())]}.
+-type t26() :: #rec4{ a :: integer()
+, b :: any()
+}.
+-type t27() :: { integer()
+, atom()
+}.
-type t99() ::
{t2(),t4(),t5(),t6(),t7(),t8(),t10(),t14(),
t15(),t20(),t21(), t22(),t25()}.
@@ -179,6 +188,10 @@ t15(),t20(),t21(), t22(),t25()}.
| {'error', {'no_process', term()}
| {'no_such_group', term()}}.
+-spec add( X :: integer()
+, Y :: integer()
+) -> integer().
+
-opaque attributes_data() ::
[{'column', column()} | {'line', info_line()} |
{'text', string()}] | {line(),column()}.
diff --git a/lib/tools/src/cover.erl b/lib/tools/src/cover.erl
index 69331732bf..92c10cc306 100644
--- a/lib/tools/src/cover.erl
+++ b/lib/tools/src/cover.erl
@@ -573,7 +573,7 @@ call(Request) ->
Ref = erlang:monitor(process,?SERVER),
receive {'DOWN', Ref, _Type, _Object, noproc} ->
erlang:demonitor(Ref),
- start(),
+ {ok,_} = start(),
call(Request)
after 0 ->
?SERVER ! {self(),Request},
@@ -589,7 +589,9 @@ call(Request) ->
end.
reply(From, Reply) ->
- From ! {?SERVER,Reply}.
+ From ! {?SERVER,Reply},
+ ok.
+
is_from(From) ->
is_pid(From).
@@ -615,9 +617,11 @@ remote_call(Node,Request) ->
end.
remote_reply(Proc,Reply) when is_pid(Proc) ->
- Proc ! {?SERVER,Reply};
+ Proc ! {?SERVER,Reply},
+ ok;
remote_reply(MainNode,Reply) ->
- {?SERVER,MainNode} ! {?SERVER,Reply}.
+ {?SERVER,MainNode} ! {?SERVER,Reply},
+ ok.
%%%----------------------------------------------------------------------
%%% cover_server on main node
@@ -627,14 +631,16 @@ init_main(Starter) ->
register(?SERVER,self()),
%% Having write concurrancy here gives a 40% performance boost
%% when collect/1 is called.
- ets:new(?COVER_TABLE, [set, public, named_table
- ,{write_concurrency, true}
- ]),
- ets:new(?COVER_CLAUSE_TABLE, [set, public, named_table]),
- ets:new(?BINARY_TABLE, [set, public, named_table]),
- ets:new(?COLLECTION_TABLE, [set, public, named_table]),
- ets:new(?COLLECTION_CLAUSE_TABLE, [set, public, named_table]),
- net_kernel:monitor_nodes(true),
+ ?COVER_TABLE = ets:new(?COVER_TABLE, [set, public, named_table,
+ {write_concurrency, true}]),
+ ?COVER_CLAUSE_TABLE = ets:new(?COVER_CLAUSE_TABLE, [set, public,
+ named_table]),
+ ?BINARY_TABLE = ets:new(?BINARY_TABLE, [set, public, named_table]),
+ ?COLLECTION_TABLE = ets:new(?COLLECTION_TABLE, [set, public,
+ named_table]),
+ ?COLLECTION_CLAUSE_TABLE = ets:new(?COLLECTION_CLAUSE_TABLE, [set, public,
+ named_table]),
+ ok = net_kernel:monitor_nodes(true),
Starter ! {?SERVER,started},
main_process_loop(#main_state{}).
@@ -672,7 +678,7 @@ main_process_loop(State) ->
Imported = do_import_to_table(Fd,File,
State#main_state.imported),
reply(From, ok),
- file:close(Fd),
+ ok = file:close(Fd),
main_process_loop(State#main_state{imported=Imported});
{error,Reason} ->
reply(From, {error, {cant_open_file,File,Reason}}),
@@ -870,11 +876,12 @@ main_process_loop(State) ->
init_remote(Starter,MainNode) ->
register(?SERVER,self()),
- ets:new(?COVER_TABLE, [set, public, named_table
- %% write_concurrency here makes otp_8270 break :(
- %,{write_concurrency, true}
- ]),
- ets:new(?COVER_CLAUSE_TABLE, [set, public, named_table]),
+ %% write_concurrency here makes otp_8270 break :(
+ ?COVER_TABLE = ets:new(?COVER_TABLE, [set, public, named_table
+ %,{write_concurrency, true}
+ ]),
+ ?COVER_CLAUSE_TABLE = ets:new(?COVER_CLAUSE_TABLE, [set, public,
+ named_table]),
Starter ! {self(),started},
remote_process_loop(#remote_state{main_node=MainNode}).
@@ -907,11 +914,11 @@ remote_process_loop(State) ->
'_' -> [M || {M,_} <- State#remote_state.compiled];
_ -> Modules0
end,
- spawn(fun() ->
- ?SPAWN_DBG(remote_collect,
- {Modules, CollectorPid, From}),
- do_collect(Modules, CollectorPid, From)
- end),
+ spawn(fun() ->
+ ?SPAWN_DBG(remote_collect,
+ {Modules, CollectorPid, From}),
+ do_collect(Modules, CollectorPid, From)
+ end),
remote_process_loop(State);
{remote,stop} ->
@@ -952,13 +959,13 @@ remote_process_loop(State) ->
end.
do_collect(Modules, CollectorPid, From) ->
- pmap(
- fun(Module) ->
- Pattern = {#bump{module=Module, _='_'}, '$1'},
- MatchSpec = [{Pattern,[{'=/=','$1',0}],['$_']}],
- Match = ets:select(?COVER_TABLE,MatchSpec,?CHUNK_SIZE),
- send_chunks(Match, CollectorPid, [])
- end,Modules),
+ _ = pmap(
+ fun(Module) ->
+ Pattern = {#bump{module=Module, _='_'}, '$1'},
+ MatchSpec = [{Pattern,[{'=/=','$1',0}],['$_']}],
+ Match = ets:select(?COVER_TABLE,MatchSpec,?CHUNK_SIZE),
+ send_chunks(Match, CollectorPid, [])
+ end,Modules),
CollectorPid ! done,
remote_reply(From, ok).
@@ -994,20 +1001,20 @@ get_downs(Mons) ->
end.
reload_originals(Compiled) ->
- Modules = [M || {M,_} <- Compiled],
- pmap(fun do_reload_original/1, Modules).
+ _ = pmap(fun do_reload_original/1, [M || {M,_} <- Compiled]),
+ ok.
do_reload_original(Module) ->
case code:which(Module) of
?TAG ->
- code:purge(Module), % remove code marked as 'old'
- code:delete(Module), % mark cover compiled code as 'old'
+ _ = code:purge(Module), % remove code marked as 'old'
+ _ = code:delete(Module), % mark cover compiled code as 'old'
%% Note: original beam code must be loaded before the cover
%% compiled code is purged, in order to for references to
%% 'fun M:F/A' and %% 'fun F/A' funs to be correct (they
%% refer to (M:)F/A in the *latest* version of the module)
- code:load_file(Module), % load original code
- code:purge(Module); % remove cover compiled code
+ _ = code:load_file(Module), % load original code
+ _ = code:purge(Module); % remove cover compiled code
_ ->
ignore
end.
@@ -1219,12 +1226,13 @@ remote_reset(Module,Nodes) ->
%% Collect data from remote nodes - used for analyse or stop(Node)
remote_collect(Modules,Nodes,Stop) ->
- pmap(fun(Node) ->
- ?SPAWN_DBG(remote_collect,
- {Modules, Nodes, Stop}),
- do_collection(Node, Modules, Stop)
- end,
- Nodes).
+ _ = pmap(
+ fun(Node) ->
+ ?SPAWN_DBG(remote_collect,
+ {Modules, Nodes, Stop}),
+ do_collection(Node, Modules, Stop)
+ end, Nodes),
+ ok.
do_collection(Node, Module, Stop) ->
CollectorPid = spawn(fun collector_proc/0),
@@ -1260,8 +1268,8 @@ insert_in_collection_table([]) ->
insert_in_collection_table(Key,Val) ->
case ets:member(?COLLECTION_TABLE,Key) of
true ->
- ets:update_counter(?COLLECTION_TABLE,
- Key,Val);
+ _ = ets:update_counter(?COLLECTION_TABLE, Key,Val),
+ ok;
false ->
%% Make sure that there are no race conditions from ets:member
case ets:insert_new(?COLLECTION_TABLE,{Key,Val}) of
@@ -2421,7 +2429,7 @@ do_analyse_to_file1(Module, OutFile, ErlFile, HTML) ->
"<body style='background-color: white;"
" color: black'>\n"
"<pre>\n"],
- file:write(OutFd,Header);
+ ok = file:write(OutFd,Header);
true -> ok
end,
@@ -2435,7 +2443,7 @@ do_analyse_to_file1(Module, OutFile, ErlFile, HTML) ->
string:right(integer_to_list(H), 2, $0),
string:right(integer_to_list(Mi), 2, $0),
string:right(integer_to_list(S), 2, $0)]),
- file:write(OutFd,
+ ok = file:write(OutFd,
["File generated from ",ErlFile," by COVER ",
Timestamp,"\n\n"
"**************************************"
@@ -2447,14 +2455,13 @@ do_analyse_to_file1(Module, OutFile, ErlFile, HTML) ->
CovLines = lists:keysort(1,ets:select(?COLLECTION_TABLE, MS)),
print_lines(Module, CovLines, InFd, OutFd, 1, HTML),
- if
- HTML ->
- file:write(OutFd, "</pre>\n</body>\n</html>\n");
+ if HTML ->
+ ok = file:write(OutFd, "</pre>\n</body>\n</html>\n");
true -> ok
end,
- file:close(OutFd),
- file:close(InFd),
+ ok = file:close(OutFd),
+ ok = file:close(InFd),
{ok, OutFile};
@@ -2472,34 +2479,33 @@ print_lines(Module, CovLines, InFd, OutFd, L, HTML) ->
eof ->
ignore;
{ok,"%"++_=Line} -> %Comment line - not executed.
- file:write(OutFd, [tab(),escape_lt_and_gt(Line, HTML)]),
+ ok = file:write(OutFd, [tab(),escape_lt_and_gt(Line, HTML)]),
print_lines(Module, CovLines, InFd, OutFd, L+1, HTML);
{ok,RawLine} ->
Line = escape_lt_and_gt(RawLine,HTML),
case CovLines of
[{L,N}|CovLines1] ->
%% N = lists:foldl(fun([Ni], Nacc) -> Nacc+Ni end, 0, Ns),
- if
- N=:=0, HTML=:=true ->
- LineNoNL = Line -- "\n",
- Str = " 0",
- %%Str = string:right("0", 6, 32),
- RedLine = ["<font color=red>",Str,fill1(),
- LineNoNL,"</font>\n"],
- file:write(OutFd, RedLine);
- N<1000000 ->
- Str = string:right(integer_to_list(N), 6, 32),
- file:write(OutFd, [Str,fill1(),Line]);
- N<10000000 ->
- Str = integer_to_list(N),
- file:write(OutFd, [Str,fill2(),Line]);
- true ->
- Str = integer_to_list(N),
- file:write(OutFd, [Str,fill3(),Line])
- end,
+ if N=:=0, HTML=:=true ->
+ LineNoNL = Line -- "\n",
+ Str = " 0",
+ %%Str = string:right("0", 6, 32),
+ RedLine = ["<font color=red>",Str,fill1(),
+ LineNoNL,"</font>\n"],
+ ok = file:write(OutFd, RedLine);
+ N < 1000000 ->
+ Str = string:right(integer_to_list(N), 6, 32),
+ ok = file:write(OutFd, [Str,fill1(),Line]);
+ N < 10000000 ->
+ Str = integer_to_list(N),
+ ok = file:write(OutFd, [Str,fill2(),Line]);
+ true ->
+ Str = integer_to_list(N),
+ ok = file:write(OutFd, [Str,fill3(),Line])
+ end,
print_lines(Module, CovLines1, InFd, OutFd, L+1, HTML);
_ ->
- file:write(OutFd, [tab(),Line]),
+ ok = file:write(OutFd, [tab(),Line]),
print_lines(Module, CovLines, InFd, OutFd, L+1, HTML)
end
end.
@@ -2539,7 +2545,7 @@ do_export(Module, OutFile, From, State) ->
{error,{not_cover_compiled,Module}}
end
end,
- file:close(Fd),
+ ok = file:close(Fd),
reply(From, Reply);
{error,Reason} ->
reply(From, {error, {cant_open_file,OutFile,Reason}})
@@ -2581,10 +2587,9 @@ write(Element,Fd) ->
case byte_size(Bin) of
Size when Size > 255 ->
SizeBin = term_to_binary({'$size',Size}),
- file:write(Fd,
- <<(byte_size(SizeBin)):8,SizeBin/binary,Bin/binary>>);
+ ok = file:write(Fd, <<(byte_size(SizeBin)):8,SizeBin/binary,Bin/binary>>);
Size ->
- file:write(Fd,<<Size:8,Bin/binary>>)
+ ok = file:write(Fd,<<Size:8,Bin/binary>>)
end,
ok.
diff --git a/lib/tools/src/eprof.erl b/lib/tools/src/eprof.erl
index 07e995993b..3ae899a078 100644
--- a/lib/tools/src/eprof.erl
+++ b/lib/tools/src/eprof.erl
@@ -74,7 +74,6 @@
start() -> gen_server:start({local, ?MODULE}, ?MODULE, [], []).
stop() -> gen_server:call(?MODULE, stop, infinity).
-
analyze() ->
analyze(procs).
@@ -112,7 +111,7 @@ profile(Rootset, M, F, A, Pattern) when is_list(Rootset), is_atom(M), is_atom(F)
%% Returns when M:F/A has terminated
profile(Rootset, M, F, A, Pattern, Options) ->
- start(),
+ ok = start_internal(),
gen_server:call(?MODULE, {profile_start, Rootset, Pattern, {M,F,A}, Options}, infinity).
dump() ->
@@ -127,7 +126,7 @@ start_profiling(Rootset) ->
start_profiling(Rootset, Pattern) ->
start_profiling(Rootset, Pattern, ?default_options).
start_profiling(Rootset, Pattern, Options) ->
- start(),
+ ok = start_internal(),
gen_server:call(?MODULE, {profile_start, Rootset, Pattern, undefined, Options}, infinity).
stop_profiling() ->
@@ -251,9 +250,9 @@ handle_call({logfile, File}, _From, #state{ fd = OldFd } = S) ->
{ok, Fd} ->
case OldFd of
undefined -> ok;
- OldFd -> file:close(OldFd)
+ OldFd -> ok = file:close(OldFd)
end,
- {reply, ok, S#state{ fd = Fd}};
+ {reply, ok, S#state{fd = Fd}};
Error ->
{reply, Error, S}
end;
@@ -521,3 +520,10 @@ format(Fd, Format, Strings) ->
divide(_,0) -> 0.0;
divide(T,N) -> T/N.
+
+start_internal() ->
+ case start() of
+ {ok, _} -> ok;
+ {error, {already_started,_}} -> ok;
+ Error -> Error
+ end.
diff --git a/lib/tools/src/fprof.erl b/lib/tools/src/fprof.erl
index b21eedc625..1291a3e5ec 100644
--- a/lib/tools/src/fprof.erl
+++ b/lib/tools/src/fprof.erl
@@ -1003,7 +1003,7 @@ handle_req(#analyse{dest = Dest,
already_open ->
ok;
ok ->
- file:close(DestPid)
+ ok = file:close(DestPid)
end,
State
end;
@@ -1364,7 +1364,7 @@ tracer_loop(Parent, Handler, State) ->
Trace when element(1, Trace) =:= trace_ts ->
tracer_loop(Parent, Handler, Handler(Trace, State));
{'EXIT', Parent, Reason} ->
- handler(end_of_trace, State),
+ _ = handler(end_of_trace, State),
exit(Reason);
_ ->
tracer_loop(Parent, Handler, State)
@@ -1450,12 +1450,10 @@ end_of_trace(Table, TS) ->
Procs = get(),
put(table, Table),
?dbg(2, "get() -> ~p~n", [Procs]),
- lists:map(
- fun ({Pid, _}) when is_pid(Pid) ->
- trace_exit(Table, Pid, TS)
- end,
- Procs),
- erase(),
+ _ = lists:map(fun ({Pid, _}) when is_pid(Pid) ->
+ trace_exit(Table, Pid, TS)
+ end, Procs),
+ _ = erase(),
ok.
@@ -1638,6 +1636,11 @@ trace_handler({trace_ts, Pid, gc_major_start, _Func, TS} = Trace, Table, _, Dump
dump_stack(Dump, get(Pid), Trace),
trace_gc_start(Table, Pid, TS),
TS;
+
+trace_handler({trace_ts, Pid, gc_start, _Func, TS} = Trace, Table, _, Dump) ->
+ dump_stack(Dump, get(Pid), Trace),
+ trace_gc_start(Table, Pid, TS),
+ TS;
%%
%% gc_end
@@ -1650,6 +1653,12 @@ trace_handler({trace_ts, Pid, gc_major_end, _Func, TS} = Trace, Table, _, Dump)
dump_stack(Dump, get(Pid), Trace),
trace_gc_end(Table, Pid, TS),
TS;
+
+trace_handler({trace_ts, Pid, gc_end, _Func, TS} = Trace, Table, _, Dump) ->
+ dump_stack(Dump, get(Pid), Trace),
+ trace_gc_end(Table, Pid, TS),
+ TS;
+
%%
%% link
trace_handler({trace_ts, Pid, link, _OtherPid, TS} = Trace,
@@ -2047,7 +2056,7 @@ trace_exit(Table, Pid, TS) ->
[] ->
ok;
[_ | _] = Stack ->
- trace_return_to_int(Table, Pid, undefined, TS, Stack),
+ _ = trace_return_to_int(Table, Pid, undefined, TS, Stack),
ok
end,
ok.
@@ -2173,7 +2182,7 @@ trace_clock(_Table, _Pid, _T,
[[{suspend, _}], [{suspend, _}] | _]=_Stack, _Clock) ->
?dbg(9, "trace_clock(Table, ~w, ~w, ~w, ~w)~n",
[_Pid, _T, _Stack, _Clock]),
- void;
+ ok;
trace_clock(Table, Pid, T,
[[{garbage_collect, TS0}], [{suspend, _}]], Clock) ->
trace_clock_1(Table, Pid, T, TS0, undefined, garbage_collect, Clock);
@@ -2188,7 +2197,7 @@ trace_clock(Table, Pid, T, [[{Func0, TS0}], [{Func1, _} | _] | _], Clock) ->
trace_clock(Table, Pid, T, [[{Func0, TS0}]], Clock) ->
trace_clock_1(Table, Pid, T, TS0, undefined, Func0, Clock);
trace_clock(_, _, _, [], _) ->
- void.
+ ok.
trace_clock_1(Table, Pid, _, _, Caller, suspend, #clocks.own) ->
clock_add(Table, {Pid, Caller, suspend}, #clocks.own, 0);
@@ -2202,7 +2211,7 @@ trace_clock_1(Table, Pid, T, TS, Caller, Func, Clock) ->
clock_add(Table, Id, Clock, T) ->
?dbg(1, "clock_add(Table, ~w, ~w, ~w)~n", [Id, Clock, T]),
- try ets:update_counter(Table, Id, {Clock, T})
+ try ets:update_counter(Table, Id, {Clock, T}), ok
catch
error:badarg ->
ets:insert(Table, #clocks{id = Id}),
@@ -2211,7 +2220,7 @@ clock_add(Table, Id, Clock, T) ->
true -> ?dbg(0, "Negative counter value ~p ~p ~p ~p~n",
[X, Id, Clock, T])
end,
- X
+ ok
end.
clocks_add(Table, #clocks{id = Id} = Clocks) ->
diff --git a/lib/tools/src/lcnt.erl b/lib/tools/src/lcnt.erl
index 78407a651a..23d66b084e 100644
--- a/lib/tools/src/lcnt.erl
+++ b/lib/tools/src/lcnt.erl
@@ -23,67 +23,57 @@
-author("Björn-Egil Dahlberg").
%% gen_server callbacks
--export([
- init/1,
- handle_call/3,
- handle_cast/2,
- handle_info/2,
- terminate/2,
- code_change/3
- ]).
+-export([init/1,
+ handle_call/3,
+ handle_cast/2,
+ handle_info/2,
+ terminate/2,
+ code_change/3]).
%% start/stop
--export([
- start/0,
- stop/0
- ]).
+-export([start/0,
+ stop/0]).
%% erts_debug:lock_counters api
--export([
- rt_collect/0,
- rt_collect/1,
- rt_clear/0,
- rt_clear/1,
- rt_opt/1,
- rt_opt/2
- ]).
+-export([rt_collect/0,
+ rt_collect/1,
+ rt_clear/0,
+ rt_clear/1,
+ rt_opt/1,
+ rt_opt/2]).
%% gen_server call api
--export([
- raw/0,
- collect/0,
- collect/1,
- clear/0,
- clear/1,
- conflicts/0,
- conflicts/1,
- locations/0,
- locations/1,
- inspect/1,
- inspect/2,
- histogram/1,
- histogram/2,
- information/0,
- swap_pid_keys/0,
- % set options
- set/1,
- set/2,
-
- load/1,
- save/1
- ]).
+-export([raw/0,
+ collect/0,
+ collect/1,
+ clear/0,
+ clear/1,
+ conflicts/0,
+ conflicts/1,
+ locations/0,
+ locations/1,
+ inspect/1,
+ inspect/2,
+ histogram/1,
+ histogram/2,
+ information/0,
+ swap_pid_keys/0,
+ % set options
+ set/1,
+ set/2,
+
+ load/1,
+ save/1]).
%% convenience
--export([
- apply/3,
- apply/2,
- apply/1,
- all_conflicts/0,
- all_conflicts/1,
- pid/2, pid/3,
- port/1, port/2
- ]).
+-export([apply/3,
+ apply/2,
+ apply/1,
+ all_conflicts/0,
+ all_conflicts/1,
+ pid/2, pid/3,
+ port/1, port/2]).
-define(version, "1.0").
@@ -135,6 +125,13 @@ start() -> gen_server:start({local, ?MODULE}, ?MODULE, [], []).
stop() -> gen_server:call(?MODULE, stop, infinity).
init([]) -> {ok, #state{ locks = [], duration = 0 } }.
+start_internal() ->
+ case start() of
+ {ok,_} -> ok;
+ {error, {already_started,_}} -> ok;
+ Error -> Error
+ end.
+
%% -------------------------------------------------------------------- %%
%%
%% API erts_debug:lock_counters
@@ -184,7 +181,7 @@ raw() -> call(raw).
set(Option, Value) -> call({set, Option, Value}).
set({Option, Value}) -> call({set, Option, Value}).
save(Filename) -> call({save, Filename}).
-load(Filename) -> start(), call({load, Filename}).
+load(Filename) -> ok = start_internal(), call({load, Filename}).
call(Msg) -> gen_server:call(?MODULE, Msg, infinity).
@@ -195,7 +192,7 @@ call(Msg) -> gen_server:call(?MODULE, Msg, infinity).
%% -------------------------------------------------------------------- %%
apply(M,F,As) when is_atom(M), is_atom(F), is_list(As) ->
- lcnt:start(),
+ ok = start_internal(),
Opt = lcnt:rt_opt({copy_save, true}),
lcnt:clear(),
Res = erlang:apply(M,F,As),
@@ -207,7 +204,7 @@ apply(Fun) when is_function(Fun) ->
lcnt:apply(Fun, []).
apply(Fun, As) when is_function(Fun) ->
- lcnt:start(),
+ ok = start_internal(),
Opt = lcnt:rt_opt({copy_save, true}),
lcnt:clear(),
Res = erlang:apply(Fun, As),
diff --git a/lib/tools/src/make.erl b/lib/tools/src/make.erl
index 26378f28a0..37e67cbe34 100644
--- a/lib/tools/src/make.erl
+++ b/lib/tools/src/make.erl
@@ -317,5 +317,7 @@ check_includes2(Epp, File, ObjMTime) ->
epp:close(Epp),
false;
{error, _Error} ->
+ check_includes2(Epp, File, ObjMTime);
+ {warning, _Warning} ->
check_includes2(Epp, File, ObjMTime)
end.
diff --git a/lib/tools/src/tags.erl b/lib/tools/src/tags.erl
index 2bc1865503..b833d96c19 100644
--- a/lib/tools/src/tags.erl
+++ b/lib/tools/src/tags.erl
@@ -101,7 +101,7 @@ files(Files, Options) ->
case open_out(Options) of
{ok, Os} ->
files_loop(Files, Os),
- close_out(Os),
+ ok = close_out(Os),
ok;
_ ->
error
@@ -169,7 +169,7 @@ filename(Name, Os) ->
case file:open(Name, [read]) of
{ok, Desc} ->
Acc = module(Desc, [], [], {1, 0}),
- file:close(Desc),
+ ok = file:close(Desc),
genout(Os, Name, Acc),
ok;
_ ->
diff --git a/lib/tools/src/tools.app.src b/lib/tools/src/tools.app.src
index a00969eabe..18166cceb0 100644
--- a/lib/tools/src/tools.app.src
+++ b/lib/tools/src/tools.app.src
@@ -40,7 +40,7 @@
{env, [{file_util_search_methods,[{"", ""}, {"ebin", "esrc"}, {"ebin", "src"}]}
]
},
- {runtime_dependencies, ["stdlib-2.5","runtime_tools-1.8.14",
+ {runtime_dependencies, ["stdlib-3.1","runtime_tools-1.8.14",
"kernel-3.0","inets-5.10","erts-7.0",
"compiler-5.0"]}
]
diff --git a/lib/tools/src/xref_base.erl b/lib/tools/src/xref_base.erl
index 70eb107781..f298a1ce81 100644
--- a/lib/tools/src/xref_base.erl
+++ b/lib/tools/src/xref_base.erl
@@ -669,16 +669,45 @@ do_add_directory(Dir, AppName, Bui, Rec, Ver, War, State) ->
warnings(War, unreadable, Unreadable),
case Errors of
[] ->
- do_add_modules(FileNames, AppName, Bui, Ver, War, State, []);
+ do_add_modules(FileNames, AppName, Bui, Ver, War, State);
[Error | _] ->
throw(Error)
end.
-do_add_modules([], _AppName, _OB, _OV, _OW, State, Modules) ->
+do_add_modules(Files, AppName, OB, OV, OW, State0) ->
+ NFiles = length(Files),
+ Reader = fun(SplitName, State) ->
+ _Pid = read_module(SplitName, AppName, OB, OV, OW, State)
+ end,
+ N = parallelism(),
+ Files1 = start_readers(Files, Reader, State0, N),
+ %% Increase the number of readers towards the end to decrease the
+ %% waiting time for the collecting process:
+ Nx = N,
+ add_mods(Files1, Reader, State0, [], NFiles, Nx).
+
+add_mods(_, _ReaderFun, State, Modules, 0, _Nx) ->
{ok, sort(Modules), State};
-do_add_modules([File | Files], AppName, OB, OV, OW, State, Modules) ->
- {ok, M, NewState} = do_add_module(File, AppName, OB, OV, OW, State),
- do_add_modules(Files, AppName, OB, OV, OW, NewState, M ++ Modules).
+add_mods(Files, ReaderFun, State, Modules, N, Nx) ->
+ {I, Nx1} = case Nx > 0 of
+ false -> {1, Nx};
+ true -> {2, Nx - 1}
+ end,
+ Files1 = start_readers(Files, ReaderFun, State, I),
+ {ok, M, NewState} = process_module(State),
+ add_mods(Files1, ReaderFun, NewState, M ++ Modules, N - 1, Nx1).
+
+start_readers([SplitName|Files], ReaderFun, State, N) when N > 0 ->
+ _Pid = ReaderFun(SplitName, State),
+ start_readers(Files, ReaderFun, State, N - 1);
+start_readers(Files, _ReaderFun, _State, _) ->
+ Files.
+
+parallelism() ->
+ case erlang:system_info(multi_scheduling) of
+ enabled -> erlang:system_info(schedulers_online);
+ _ -> 1
+ end.
%% -> {ok, Module, State} | throw(Error)
do_add_a_module(File, AppName, Builtins, Verbose, Warnings, State) ->
@@ -692,50 +721,75 @@ do_add_a_module(File, AppName, Builtins, Verbose, Warnings, State) ->
%% -> {ok, Module, State} | throw(Error)
%% Options: verbose, warnings, builtins
-do_add_module({Dir, Basename}, AppName, Builtins, Verbose, Warnings, State) ->
- File = filename:join(Dir, Basename),
- {ok, M, Bad, NewState} =
- do_add_module1(Dir, File, AppName, Builtins, Verbose, Warnings, State),
- filter(fun({Tag,B}) -> warnings(Warnings, Tag, [[File,B]]) end, Bad),
- {ok, M, NewState}.
-
-do_add_module1(Dir, File, AppName, Builtins, Verbose, Warnings, State) ->
- message(Verbose, reading_beam, [File]),
- Mode = State#xref.mode,
+do_add_module(SplitName, AppName, Builtins, Verbose, Warnings, State) ->
+ _Pid = read_module(SplitName, AppName, Builtins, Verbose, Warnings, State),
+ process_module(State).
+
+read_module(SplitName, AppName, Builtins, Verbose, Warnings, State) ->
Me = self(),
- Fun = fun() -> Me ! {self(), abst(File, Builtins, Mode)} end,
- case xref_utils:subprocess(Fun, [link, {min_heap_size,100000}]) of
+ #xref{mode = Mode} = State,
+ Fun =
+ fun() ->
+ Me ! {?MODULE,
+ read_a_module(SplitName, AppName, Builtins, Verbose,
+ Warnings, Mode)}
+ end,
+ spawn_opt(Fun, [link, {min_heap_size, 1000000}, {priority, high}]).
+
+read_a_module({Dir, BaseName}, AppName, Builtins, Verbose, Warnings, Mode) ->
+ File = filename:join(Dir, BaseName),
+ case abst(File, Builtins, Mode) of
{ok, _M, no_abstract_code} when Verbose ->
- message(Verbose, skipped_beam, []),
- {ok, [], [], State};
+ message(Verbose, no_debug_info, [File]),
+ no;
{ok, _M, no_abstract_code} when not Verbose ->
message(Warnings, no_debug_info, [File]),
- {ok, [], [], State};
+ no;
{ok, M, Data, UnresCalls0} ->
- %% Remove duplicates. Identical unresolved calls on the
- %% same line are counted as _one_ unresolved call.
- UnresCalls = usort(UnresCalls0),
- message(Verbose, done, []),
- NoUnresCalls = length(UnresCalls),
- case NoUnresCalls of
- 0 -> ok;
- 1 -> warnings(Warnings, unresolved_summary1, [[M]]);
- N -> warnings(Warnings, unresolved_summary, [[M, N]])
- end,
- T = case xref_utils:file_info(File) of
- {ok, {_, _, _, Time}} -> Time;
- Error -> throw(Error)
- end,
- XMod = #xref_mod{name = M, app_name = AppName, dir = Dir,
- mtime = T, builtins = Builtins,
- no_unresolved = NoUnresCalls},
- do_add_module(State, XMod, UnresCalls, Data);
+ message(Verbose, done_file, [File]),
+ %% Remove duplicates. Identical unresolved calls on the
+ %% same line are counted as _one_ unresolved call.
+ UnresCalls = usort(UnresCalls0),
+ NoUnresCalls = length(UnresCalls),
+ case NoUnresCalls of
+ 0 -> ok;
+ 1 -> warnings(Warnings, unresolved_summary1, [[M]]);
+ N -> warnings(Warnings, unresolved_summary, [[M, N]])
+ end,
+ case xref_utils:file_info(File) of
+ {ok, {_, _, _, Time}} ->
+ XMod = #xref_mod{name = M, app_name = AppName,
+ dir = Dir, mtime = Time,
+ builtins = Builtins,
+ no_unresolved = NoUnresCalls},
+ {ok, PrepMod, Bad} =
+ prepare_module(Mode, XMod, UnresCalls, Data),
+ foreach(fun({Tag,B}) ->
+ warnings(Warnings, Tag,
+ [[File,B]])
+ end, Bad),
+ {ok, PrepMod};
+ Error -> Error
+ end;
Error ->
message(Verbose, error, []),
- throw(Error)
+ Error
end.
-abst(File, Builtins, Mode) when Mode =:= functions ->
+process_module(State) ->
+ receive
+ {?MODULE, Reply} ->
+ case Reply of
+ no ->
+ {ok, [], State};
+ {ok, PrepMod} ->
+ finish_module(PrepMod, State);
+ Error ->
+ throw(Error)
+ end
+ end.
+
+abst(File, Builtins, _Mode = functions) ->
case beam_lib:chunks(File, [abstract_code, exports, attributes]) of
{ok, {M,[{abstract_code,NoA},_X,_A]}} when NoA =:= no_abstract_code ->
{ok, M, NoA};
@@ -762,7 +816,7 @@ abst(File, Builtins, Mode) when Mode =:= functions ->
Error when element(1, Error) =:= error ->
Error
end;
-abst(File, Builtins, Mode) when Mode =:= modules ->
+abst(File, Builtins, _Mode = modules) ->
case beam_lib:chunks(File, [exports, imports, attributes]) of
{ok, {Mod, [{exports,X0}, {imports,I0}, {attributes,At}]}} ->
X1 = mfa_exports(X0, At, Mod),
@@ -856,19 +910,13 @@ deprecated_flag(_) -> undefined.
%% dom CallAt = LC U XC
%% Attrs is collected from the attribute 'xref' (experimental).
do_add_module(S, XMod, Unres, Data) ->
- M = XMod#xref_mod.name,
- case dict:find(M, S#xref.modules) of
- {ok, OldXMod} ->
- BF2 = module_file(XMod),
- BF1 = module_file(OldXMod),
- throw_error({module_clash, {M, BF1, BF2}});
- error ->
- do_add_module(S, M, XMod, Unres, Data)
- end.
+ #xref{mode = Mode} = S,
+ Mode = S#xref.mode,
+ {ok, PrepMod, Bad} = prepare_module(Mode, XMod, Unres, Data),
+ {ok, Ms, NS} = finish_module(PrepMod, S),
+ {ok, Ms, Bad, NS}.
-%%do_add_module(S, M, _XMod, _Unres, Data)->
-%% {ok, M, [], S};
-do_add_module(S, M, XMod, Unres0, Data) when S#xref.mode =:= functions ->
+prepare_module(_Mode = functions, XMod, Unres0, Data) ->
{DefAt0, LPreCAt0, XPreCAt0, LC0, XC0, X0, Attrs, Depr} = Data,
%% Bad is a list of bad values of 'xref' attributes.
{ALC0,AXC0,Bad0} = Attrs,
@@ -904,26 +952,27 @@ do_add_module(S, M, XMod, Unres0, Data) when S#xref.mode =:= functions ->
LC = union(LC1, ALC),
{DF1,DF_11,DF_21,DF_31,DBad} = depr_mod(Depr, X),
+ {EE, ECallAt} = inter_graph(X, L, LC, XC, CallAt),
+ {ok, {functions, XMod, [DefAt,L,X,LCallAt,XCallAt,CallAt,LC,XC,EE,ECallAt,
+ DF1,DF_11,DF_21,DF_31], NoCalls, Unres},
+ DBad++Bad};
+prepare_module(_Mode = modules, XMod, _Unres, Data) ->
+ {X0, I0, Depr} = Data,
+ X1 = xref_utils:xset(X0, [tspec(func)]),
+ I1 = xref_utils:xset(I0, [tspec(func)]),
+ {DF1,DF_11,DF_21,DF_31,DBad} = depr_mod(Depr, X1),
+ {ok, {modules, XMod, [X1,I1,DF1,DF_11,DF_21,DF_31]}, DBad}.
- %% {EE, ECallAt} = inter_graph(X, L, LC, XC, LCallAt, XCallAt),
- Self = self(),
- Fun = fun() -> inter_graph(Self, X, L, LC, XC, CallAt) end,
- {EE, ECallAt} =
- xref_utils:subprocess(Fun, [link, {min_heap_size,100000}]),
-
+finish_module({functions, XMod, List, NoCalls, Unres}, S) ->
+ ok = check_module(XMod, S),
[DefAt2,L2,X2,LCallAt2,XCallAt2,CallAt2,LC2,XC2,EE2,ECallAt2,
- DF2,DF_12,DF_22,DF_32] =
- pack([DefAt,L,X,LCallAt,XCallAt,CallAt,LC,XC,EE,ECallAt,
- DF1,DF_11,DF_21,DF_31]),
-
- %% Foo = [DefAt2,L2,X2,LCallAt2,XCallAt2,CallAt2,LC2,XC2,EE2,ECallAt2,
- %% DF2,DF_12,DF_22,DF_32],
- %% io:format("{~p, ~p, ~p},~n", [M, pack:lsize(Foo), pack:usize(Foo)]),
+ DF2,DF_12,DF_22,DF_32] = pack(List),
LU = range(LC2),
LPredefined = predefined_funs(LU),
+ M = XMod#xref_mod.name,
MS = xref_utils:xset(M, atom),
T = from_sets({MS,DefAt2,L2,X2,LCallAt2,XCallAt2,CallAt2,
LC2,XC2,LU,EE2,ECallAt2,Unres,LPredefined,
@@ -934,19 +983,28 @@ do_add_module(S, M, XMod, Unres0, Data) when S#xref.mode =:= functions ->
XMod1 = XMod#xref_mod{data = T, info = Info},
S1 = S#xref{modules = dict:store(M, XMod1, S#xref.modules)},
- {ok, [M], DBad++Bad, take_down(S1)};
-do_add_module(S, M, XMod, _Unres, Data) when S#xref.mode =:= modules ->
- {X0, I0, Depr} = Data,
- X1 = xref_utils:xset(X0, [tspec(func)]),
- I1 = xref_utils:xset(I0, [tspec(func)]),
- {DF1,DF_11,DF_21,DF_31,DBad} = depr_mod(Depr, X1),
- [X2,I2,DF2,DF_12,DF_22,DF_32] = pack([X1,I1,DF1,DF_11,DF_21,DF_31]),
+ {ok, [M], take_down(S1)};
+finish_module({modules, XMod, List}, S) ->
+ ok = check_module(XMod, S),
+ [X2,I2,DF2,DF_12,DF_22,DF_32] = pack(List),
+ M = XMod#xref_mod.name,
MS = xref_utils:xset(M, atom),
T = from_sets({MS, X2, I2, DF2, DF_12, DF_22, DF_32}),
Info = [],
XMod1 = XMod#xref_mod{data = T, info = Info},
S1 = S#xref{modules = dict:store(M, XMod1, S#xref.modules)},
- {ok, [M], DBad, take_down(S1)}.
+ {ok, [M], take_down(S1)}.
+
+check_module(XMod, State) ->
+ M = XMod#xref_mod.name,
+ case dict:find(M, State#xref.modules) of
+ {ok, OldXMod} ->
+ BF2 = module_file(XMod),
+ BF1 = module_file(OldXMod),
+ throw_error({module_clash, {M, BF1, BF2}});
+ error ->
+ ok
+ end.
depr_mod({Depr,Bad0}, X) ->
%% Bad0 are badly formed deprecated attributes.
@@ -992,9 +1050,6 @@ no_info(X, L, LC, XC, EE, Unres, NoCalls, NoUnresCalls) ->
%% Note: this is overwritten in do_set_up():
{no_inter_function_calls, no_elements(EE)}].
-inter_graph(Pid, X, L, LC, XC, CallAt) ->
- Pid ! {self(), inter_graph(X, L, LC, XC, CallAt)}.
-
%% Inter Call Graph.
%inter_graph(_X, _L, _LC, _XC, _CallAt) ->
% {empty_set(), empty_set()};
@@ -1727,7 +1782,7 @@ pack(T) ->
NT = pack1(T),
%% true = T =:= NT,
%% io:format("erasing ~p elements...~n", [length(erase())]),
- erase(), % wasting heap (and time)...
+ _ = erase(), % wasting heap (and time)...
foreach(fun({K,V}) -> put(K, V) end, PD),
NT.
@@ -1766,10 +1821,6 @@ tpack(T, I, L) ->
message(true, What, Arg) ->
case What of
- reading_beam ->
- io:format("~ts... ", Arg);
- skipped_beam ->
- io:format("skipped (no debug information)~n", Arg);
no_debug_info ->
io:format("Skipping ~ts (no debug information)~n", Arg);
unresolved_summary1 ->
@@ -1792,6 +1843,8 @@ message(true, What, Arg) ->
io:format("Setting up...", Arg);
done ->
io:format("done~n", Arg);
+ done_file ->
+ io:format("done reading ~ts~n", Arg);
error ->
io:format("error~n", Arg);
Else ->
diff --git a/lib/tools/src/xref_utils.erl b/lib/tools/src/xref_utils.erl
index f69aa70244..b0c168e018 100644
--- a/lib/tools/src/xref_utils.erl
+++ b/lib/tools/src/xref_utils.erl
@@ -47,8 +47,6 @@
-export([options/2]).
--export([subprocess/2]).
-
-export([format_error/1]).
-import(lists, [append/1, delete/2, filter/2, foldl/3, foreach/2,
@@ -512,12 +510,6 @@ find_beam(Culprit) ->
options(Options, Valid) ->
split_options(Options, [], [], [], Valid).
-subprocess(Fun, Opts) ->
- Pid = spawn_opt(Fun, Opts),
- receive
- {Pid, Reply} -> Reply
- end.
-
format_error({error, Module, Error}) ->
Module:format_error(Error);
format_error({file_error, FileName, Reason}) ->
diff --git a/lib/tools/test/cover_SUITE.erl b/lib/tools/test/cover_SUITE.erl
index b4c9264b30..90e113c178 100644
--- a/lib/tools/test/cover_SUITE.erl
+++ b/lib/tools/test/cover_SUITE.erl
@@ -1001,41 +1001,40 @@ otp_6115(Config) when is_list(Config) ->
%% Cover compile f1, but not f2
{ok, f1} = cover:compile(f1),
+ %% This test used to ensure that a process containing a
+ %% fun refering to cover compiled code was killed.
+ %% check_process_code may however ignore funs as of ERTS
+ %% version 8.1. The test has therefore been rewritten to
+ %% check that a process with a direct reference (in this
+ %% case a return address) to the code is killed.
+ %%
%% If f1 is cover compiled, a process P is started with a
- %% reference to the fun created in start_fail/0, and cover:stop() is
- %% called, then P should be killed.
- %% This is because (the fun held by P) references the cover
+ %% direct reference to the f1, and cover:stop() is called,
+ %% then P should be killed.
+ %% This is because of the return address to the cover
%% compiled code which should be *unloaded* when cover:stop() is
%% called -- running cover compiled code when there is no cover
%% server and thus no ets tables to bump counters in, makes no
%% sense.
- Pid1 = f1:start_a(),
- Pid2 = f1:start_b(),
+ Pid = spawn(fun () -> f1:non_tail_call_f2_wait() end),
%% Now stop cover
cover:stop(),
%% Ensure that f1 is loaded (and not cover compiled), and that
- %% both Pid1 and Pid2 are dead.
+ %% both Pid is dead.
case code:which(f1) of
Beam when is_list(Beam) ->
ok;
Other ->
ct:fail({"f1 is not reloaded", Other})
end,
- case process_info(Pid1) of
+ case process_info(Pid) of
undefined ->
ok;
- _PI1 ->
- RefToOldP1 = erlang:check_process_code(Pid1, f1),
- ct:fail({"Pid1 still alive", RefToOldP1})
- end,
- case process_info(Pid2) of
- undefined ->
- ok;
- _PI2 ->
- RefToOldP2 = erlang:check_process_code(Pid1, f2),
- ct:fail({"Pid2 still alive", RefToOldP2})
+ _PI ->
+ RefToOldP = erlang:check_process_code(Pid, f1),
+ ct:fail({"Pid still alive", RefToOldP})
end,
file:set_cwd(CWD),
diff --git a/lib/tools/test/cover_SUITE_data/otp_6115/f1.erl b/lib/tools/test/cover_SUITE_data/otp_6115/f1.erl
index 5399b33f19..fc4a62e70e 100644
--- a/lib/tools/test/cover_SUITE_data/otp_6115/f1.erl
+++ b/lib/tools/test/cover_SUITE_data/otp_6115/f1.erl
@@ -1,13 +1,6 @@
-module(f1).
--export([start_a/0, start_b/0]).
+-export([non_tail_call_f2_wait/0]).
-start_a() ->
- f2:start(fun() ->
- ok
- end).
-
-start_b() ->
- f2:start(fun fun1/0).
-
-fun1() ->
- ok.
+non_tail_call_f2_wait() ->
+ f2:wait(),
+ im_back.
diff --git a/lib/tools/test/cover_SUITE_data/otp_6115/f2.erl b/lib/tools/test/cover_SUITE_data/otp_6115/f2.erl
index 72a6a64c4d..4bc88035c7 100644
--- a/lib/tools/test/cover_SUITE_data/otp_6115/f2.erl
+++ b/lib/tools/test/cover_SUITE_data/otp_6115/f2.erl
@@ -1,13 +1,5 @@
-module(f2).
--export([start/1]).
+-export([wait/0]).
-start(Fun) ->
- spawn(fun() ->
- wait(Fun)
- end).
-
-wait(Fun) ->
- receive
- go ->
- Fun()
- end.
+wait() ->
+ receive after infinity -> ok end.
diff --git a/lib/tools/test/make_SUITE_data/test1.erl b/lib/tools/test/make_SUITE_data/test1.erl
index f4a133008e..9e21bdc767 100644
--- a/lib/tools/test/make_SUITE_data/test1.erl
+++ b/lib/tools/test/make_SUITE_data/test1.erl
@@ -3,6 +3,8 @@
-vsn('$Revision: /main/release/2 $').
-compile(export_all).
+-warning("a warning").
+
f1() ->
true.
diff --git a/lib/tools/test/xref_SUITE.erl b/lib/tools/test/xref_SUITE.erl
index ce30fb711a..01dbac6ecb 100644
--- a/lib/tools/test/xref_SUITE.erl
+++ b/lib/tools/test/xref_SUITE.erl
@@ -50,7 +50,7 @@
-export([analyze/1, basic/1, md/1, q/1, variables/1, unused_locals/1]).
--export([format_error/1, otp_7423/1, otp_7831/1, otp_10192/1]).
+-export([format_error/1, otp_7423/1, otp_7831/1, otp_10192/1, otp_13708/1]).
-import(lists, [append/2, flatten/1, keysearch/3, member/2, sort/1, usort/1]).
@@ -82,7 +82,7 @@ groups() ->
fun_mfa_r14, fun_mfa_vars, qlc]},
{analyses, [],
[analyze, basic, md, q, variables, unused_locals]},
- {misc, [], [format_error, otp_7423, otp_7831, otp_10192]}].
+ {misc, [], [format_error, otp_7423, otp_7831, otp_10192, otp_13708]}].
init_per_suite(Conf) when is_list(Conf) ->
@@ -2393,6 +2393,19 @@ otp_10192(Conf) when is_list(Conf) ->
xref:stop(s),
ok.
+%% OTP-10192. Allow filenames with character codes greater than 126.
+otp_13708(Conf) when is_list(Conf) ->
+ {ok, _} = start(s),
+ ok = xref:set_default(s, [{verbose, true}]),
+ {ok, []} = xref:q(s,"E"),
+ xref:stop(s),
+
+ CopyDir = ?copydir,
+ Dir = fname(CopyDir,"lib_test"),
+ {ok, _} = start(s),
+ ok = xref:set_library_path(s, [Dir], [{verbose, true}]),
+ xref:stop(s).
+
%%%
%%% Utilities
%%%
diff --git a/lib/tools/vsn.mk b/lib/tools/vsn.mk
index 8c889cbe4e..e066dbf5e9 100644
--- a/lib/tools/vsn.mk
+++ b/lib/tools/vsn.mk
@@ -1 +1 @@
-TOOLS_VSN = 2.8.4
+TOOLS_VSN = 2.8.6
diff --git a/lib/wx/api_gen/gl_gen.erl b/lib/wx/api_gen/gl_gen.erl
index 0473b7d771..54635bdd2e 100644
--- a/lib/wx/api_gen/gl_gen.erl
+++ b/lib/wx/api_gen/gl_gen.erl
@@ -191,8 +191,9 @@ parse_define([#xmlElement{name=initializer,content=Contents}|_R],Def,_Os) ->
try
case Val0 of
"0x" ++ Val1 ->
- _ = list_to_integer(Val1, 16),
- Def#def{val=Val1, type=hex};
+ Val2 = strip_type_cast(Val1),
+ _ = list_to_integer(Val2, 16),
+ Def#def{val=Val2, type=hex};
_ ->
Val = list_to_integer(Val0),
Def#def{val=Val, type=int}
@@ -214,6 +215,15 @@ extract_def2([#xmlElement{content=Cs}|R]) ->
extract_def2(Cs) ++ extract_def2(R);
extract_def2([]) -> [].
+strip_type_cast(Int) ->
+ lists:reverse(strip_type_cast2(lists:reverse(Int))).
+
+strip_type_cast2("u"++Rest) -> Rest; %% unsigned
+strip_type_cast2("lu"++Rest) -> Rest; %% unsigned long
+strip_type_cast2("llu"++Rest) -> Rest; %% unsigned long long
+strip_type_cast2(Rest) -> Rest.
+
+
strip_comment("/*" ++ Rest) ->
strip_comment_until_end(Rest);
strip_comment("//" ++ _) -> [];
diff --git a/lib/wx/api_gen/gl_gen_erl.erl b/lib/wx/api_gen/gl_gen_erl.erl
index c96df4f8f2..1be8d775be 100644
--- a/lib/wx/api_gen/gl_gen_erl.erl
+++ b/lib/wx/api_gen/gl_gen_erl.erl
@@ -463,7 +463,7 @@ doc_return_types(T, Ps0) ->
Ps = [P || P=#arg{in=In, where=Where} <- Ps0,In =/= true, Where =/= c],
doc_return_types2(T, Ps).
-doc_return_types2(void, []) -> "ok";
+doc_return_types2(void, []) -> "'ok'";
doc_return_types2(void, [#arg{type=T}]) -> doc_arg_type2(T);
doc_return_types2(T, []) -> doc_arg_type2(T);
doc_return_types2(void, Ps) ->
diff --git a/lib/wx/api_gen/wx_extra/wxEvtHandler.erl b/lib/wx/api_gen/wx_extra/wxEvtHandler.erl
index 85ebc093f5..17e10fb306 100644
--- a/lib/wx/api_gen/wx_extra/wxEvtHandler.erl
+++ b/lib/wx/api_gen/wx_extra/wxEvtHandler.erl
@@ -33,7 +33,7 @@
-type wxEvtHandler() :: wx:wx_object().
%% @doc Equivalent to {@link connect/3. connect(This, EventType, [])}
--spec connect(This::wxEvtHandler(), EventType::wxEventType()) -> ok.
+-spec connect(This::wxEvtHandler(), EventType::wxEventType()) -> 'ok'.
connect(This, EventType) ->
connect(This, EventType, []).
@@ -55,9 +55,9 @@ connect(This, EventType) ->
%% to process the event. Default not specfied i.e. a message will
%% be delivered to the process calling this function.
%% {userData, term()} An erlang term that will be sent with the event. Default: [].
--spec connect(This::wxEvtHandler(), EventType::wxEventType(), [Option]) -> ok when
- Option :: {id, integer()} | {lastId, integer()} | {skip, boolean()} |
- callback | {callback, function()} | {userData, term()}.
+-spec connect(This::wxEvtHandler(), EventType::wxEventType(), [Option]) -> 'ok' when
+ Option :: {'id', integer()} | {'lastId', integer()} | {'skip', boolean()} |
+ 'callback' | {'callback', function()} | {'userData', term()}.
connect(This=#wx_ref{type=ThisT}, EventType, Options) ->
EvH = parse_opts(Options, #evh{et=EventType}),
?CLASS(ThisT,wxEvtHandler),
@@ -115,7 +115,7 @@ disconnect(This=#wx_ref{type=ThisT,ref=_ThisRef}, EventType) when is_atom(EventT
%% EventType may be the atom 'null' to match any eventtype.
%% Notice that the options skip and userdata is not used to match the eventhandler.
-spec disconnect(This::wxEvtHandler(), EventType::wxEventType(), [Option]) -> boolean() when
- Option :: {id, integer()} | {lastId, integer()} | {callback, function()}.
+ Option :: {'id', integer()} | {'lastId', integer()} | {'callback', function()}.
disconnect(This=#wx_ref{type=ThisT,ref=_ThisRef}, EventType, Opts) ->
?CLASS(ThisT,wxEvtHandler),
EvH = parse_opts(Opts, #evh{et=EventType}),
diff --git a/lib/wx/api_gen/wx_extra/wxListCtrl.erl b/lib/wx/api_gen/wx_extra/wxListCtrl.erl
index acdb69fdeb..355a4cdfd1 100644
--- a/lib/wx/api_gen/wx_extra/wxListCtrl.erl
+++ b/lib/wx/api_gen/wx_extra/wxListCtrl.erl
@@ -43,33 +43,36 @@ SortItems>>
<<EXPORT:wxListCtrl new/0, new/1, new/2 wxListCtrl:EXPORT>>
<<wxListCtrl_new_0
-%% @spec () -> wxListCtrl()
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxlistctrl.html#wxlistctrlwxlistctrl">external documentation</a>.
+-spec new() -> wxListCtrl().
new() ->
wxe_util:construct(~s, <<>>).
wxListCtrl_new_0>>
<<wxListCtrl_new_2
-%% @spec (Parent::wxWindow:wxWindow()) -> wxListCtrl()
-%% @equiv new(Parent, [])
+-spec new(Parent) -> wxListCtrl() when
+ Parent::wxWindow:wxWindow().
new(Parent)
when is_record(Parent, wx_ref) ->
new(Parent, []).
-%% @spec (Parent::wxWindow:wxWindow(), [Option]) -> wxListCtrl()
-%% Option = {winid, integer()} |
-%% {pos, {X::integer(),Y::integer()}} |
-%% {size, {W::integer(),H::integer()}} |
-%% {style, integer()} |
-%% {validator, wx:wx()} |
-%% {onGetItemText, OnGetItemText} |
-%% {onGetItemAttr, OnGetItemAttr} |
-%% {onGetItemColumnImage, OnGetItemColumnImage}
+%% @doc Creates a listctrl with optional callback functions:
%%
-%% OnGetItemText = (This, Item, Column) -> wxString()
-%% OnGetItemAttr = (This, Item) -> wxListItemAttr()
+%% OnGetItemText = (This, Item, Column) -> unicode:charlist()
+%% OnGetItemAttr = (This, Item) -> wxListItemAttr:wxListItemAttr()
%% OnGetItemColumnImage = (This, Item, Column) -> integer()
-%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxlistctrl.html#wxlistctrlwxlistctrl">external documentation</a>.
+%%
+%% See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxlistctrl.html#wxlistctrlwxlistctrl">external documentation</a>.
+-spec new(Parent, [Option]) -> wxListCtrl() when
+ Parent::wxWindow:wxWindow(),
+ Option::{winid, integer()} |
+ {pos, {X::integer(),Y::integer()}} |
+ {size, {W::integer(),H::integer()}} |
+ {style, integer()} |
+ {validator, wx:wx_object()} |
+ {onGetItemText, function()} |
+ {onGetItemAttr, function()} |
+ {onGetItemColumnImage, function()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options)->
@@ -101,26 +104,27 @@ wxListCtrl_new_2>>
<<EXPORT:Create create/2, create/3 Create:EXPORT>>
<<Create
-%% @spec (This::wxListCtrl(), Parent::wxWindow:wxWindow()) -> bool()
%% @equiv create(This,Parent, [])
+-spec create(This, Parent) -> wxListCtrl() when
+ This::wxWindow:wxWindow(),
+ Parent::wxWindow:wxWindow().
create(This,Parent)
when is_record(This, wx_ref),is_record(Parent, wx_ref) ->
create(This,Parent, []).
-%% @spec (This::wxListCtrl(), Parent::wxWindow:wxWindow(), [Option]) -> bool()
-%% Option = {winid, integer()} |
-%% {pos, {X::integer(),Y::integer()}} |
-%% {size, {W::integer(),H::integer()}} |
-%% {style, integer()} |
-%% {validator, wx:wx()} |
-%% {onGetItemText, OnGetItemText} |
-%% {onGetItemAttr, OnGetItemAttr} |
-%% {onGetItemColumnImage, OnGetItemColumnImage}
-%%
-%% OnGetItemText = (This, Item, Column) -> wxString()
-%% OnGetItemAttr = (This, Item) -> wxListItemAttr()
-%% OnGetItemColumnImage = (This, Item, Column) -> integer()
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxlistctrl.html#wxlistctrlcreate">external documentation</a>.
+-spec create(This, Parent, [Option]) -> wxListCtrl() when
+ This::wxWindow:wxWindow(),
+ Parent::wxWindow:wxWindow(),
+ Option::{winid, integer()} |
+ {pos, {X::integer(),Y::integer()}} |
+ {size, {W::integer(),H::integer()}} |
+ {style, integer()} |
+ {validator, wx:wx_object()} |
+ {onGetItemText, function()} |
+ {onGetItemAttr, function()} |
+ {onGetItemColumnImage, function()}.
+
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxListCtrl),
diff --git a/lib/wx/api_gen/wx_extra/wxXmlResource.erl b/lib/wx/api_gen/wx_extra/wxXmlResource.erl
index 7700e2333e..b29ffba7c6 100644
--- a/lib/wx/api_gen/wx_extra/wxXmlResource.erl
+++ b/lib/wx/api_gen/wx_extra/wxXmlResource.erl
@@ -21,8 +21,6 @@
<<EXPORT:xrcctrl xrcctrl/3 xrcctrl:EXPORT>>
<<xrcctrl
-%% @spec (Window::wxWindow:wxWindow(),Name::string(), Type::atom()) -> wx:wxObject()
-
%% @doc Looks up a control with Name in a window created with XML
%% resources. You can use it to set/get values from controls.
%% The object is type casted to <b>Type</b>.
@@ -32,6 +30,10 @@
%% true = wxXmlResource:loadDialog(Xrc, Dlg, Frame, "controls_dialog"), <br />
%% LCtrl = xrcctrl(Dlg, "controls_listctrl", wxListCtrl), <br />
%% wxListCtrl:insertColumn(LCtrl, 0, "Name", [{width, 200}]), <br />
+-spec xrcctrl(Window, Name, Type) -> wx:wx_object() when
+ Window::wxWindow:wxWindow(),
+ Name::string(),
+ Type::atom().
xrcctrl(Window = #wx_ref{}, Name, Type) when is_list(Name), is_atom(Type) ->
%% Func Id ~s
diff --git a/lib/wx/api_gen/wx_gen_cpp.erl b/lib/wx/api_gen/wx_gen_cpp.erl
index 55c179142d..84d3990786 100644
--- a/lib/wx/api_gen/wx_gen_cpp.erl
+++ b/lib/wx/api_gen/wx_gen_cpp.erl
@@ -210,7 +210,7 @@ gen_funcs(Defs) ->
w(" void *This = getPtr(bp,memenv);~n"),
w(" wxeRefData *refd = getRefData(This);~n"),
w(" if(This && refd) {~n"),
- w(" if(recurse_level > 1 && refd->type != 4) {~n"),
+ w(" if(recurse_level > 1 && refd->type != 8) {~n"),
w(" delayed_delete->Append(Ecmd.Save(op));~n"),
w(" } else {~n"),
w(" delete_object(This, refd);~n"),
@@ -255,7 +255,21 @@ gen_funcs(Defs) ->
],
w("bool WxeApp::delete_object(void *ptr, wxeRefData *refd) {~n", []),
+ w(" if(wxe_debug) {\n"
+ " wxString msg;\n"
+ " const wxChar *class_info = wxT(\"unknown\");\n"
+ " if(refd->type < 10) {\n"
+ " wxClassInfo *cinfo = ((wxObject *)ptr)->GetClassInfo();\n"
+ " class_info = cinfo->GetClassName();\n"
+ " }\n"
+ " msg.Printf(wxT(\"Deleting {wx_ref, %d, %s} at %p \"), refd->ref, class_info, ptr);\n"
+ " send_msg(\"debug\", &msg);\n"
+ " };\n"),
+
w(" switch(refd->type) {~n", []),
+ w("#if wxUSE_GRAPHICS_CONTEXT~n", []),
+ w(" case 4: delete (wxGraphicsObject *) ptr; break;~n", []),
+ w("#endif~n", []),
Case = fun(C=#class{name=Class, id=Id, abstract=IsAbs, parent=P}) when P /= "static" ->
UglyWorkaround = lists:member(Class, UglySkipList),
HaveVirtual = virtual_dest(C),
@@ -761,7 +775,7 @@ call_wx(_N,{constructor,_},#type{base={class,RClass}},Ps) ->
end;
false ->
case is_dc(RClass) of
- true -> 4;
+ true -> 8;
false ->
case hd(reverse(wx_gen_erl:parents(RClass))) of
root -> Id;
@@ -819,19 +833,19 @@ return_res1(#type{name=Type,base={class,_},single=list,ref=reference}) ->
return_res1(#type{name=Type,base={comp,_,_},single=array,by_val=true}) ->
{Type ++ " Result = ", ""};
return_res1(#type{name=Type,single=true,by_val=true, base={class, _}}) ->
- %% Temporary memory leak !!!!!!
- case {need_copy_constr(Type),Type} of
- {true, _} -> ok;
- {_, "wxGraphics" ++ _} -> ok;
- _ ->
- io:format("~s::~s Building return value of temp ~s~n",
- [get(current_class),get(current_func),Type])
- end,
- case need_copy_constr(Type) of
- true ->
+ case {need_copy_constr(Type), Type} of
+ {true, _} ->
{Type ++ " * Result = new E" ++ Type ++ "(", "); newPtr((void *) Result,"
++ "3, memenv);"};
- false ->
+ {false, "wxGraphics" ++ _} ->
+ %% {"wxGraphicsObject * Result = new wxGraphicsObject(", "); newPtr((void *) Result,"
+ %% ++ "3, memenv);"};
+ {Type ++ " * Result = new " ++ Type ++ "(", "); newPtr((void *) Result,"
+ ++ "4, memenv);"};
+ {false, _} ->
+ %% Temporary memory leak !!!!!!
+ io:format("~s::~s Building return value of temp ~s~n",
+ [get(current_class),get(current_func),Type]),
{Type ++ " * Result = new " ++ Type ++ "(", "); newPtr((void *) Result,"
++ "3, memenv);"}
end;
diff --git a/lib/wx/api_gen/wx_gen_erl.erl b/lib/wx/api_gen/wx_gen_erl.erl
index 2e14fd272d..794de25002 100644
--- a/lib/wx/api_gen/wx_gen_erl.erl
+++ b/lib/wx/api_gen/wx_gen_erl.erl
@@ -379,7 +379,7 @@ gen_dest(#class{name=CName,abstract=Abs}, Ms) ->
gen_dest2(Class, Id) ->
w("%% @doc Destroys this object, do not use object again~n", []),
- w("-spec destroy(This::~s()) -> ok.~n", [Class]),
+ w("-spec destroy(This::~s()) -> 'ok'.~n", [Class]),
w("destroy(Obj=#wx_ref{type=Type}) ->~n", []),
w(" ?CLASS(Type,~s),~n",[Class]),
case Id of
@@ -482,7 +482,7 @@ arg_type_test(#param{name=Name0,in=In,type=#type{base={class,T},single=true},def
arg_type_test(#param{name=Name0,in=In,type=#type{base={class,T}}, def=none},EOS,Acc)
when In =/= false ->
Name = erl_arg_name(Name0),
- w(" [?CLASS(~sT,~s) || #wx_ref{type=~sT} <- ~s],~s", [Name,T,Name,Name,EOS]),
+ w(" _ = [?CLASS(~sT,~s) || #wx_ref{type=~sT} <- ~s],~s", [Name,T,Name,Name,EOS]),
Acc;
arg_type_test(#param{name=Name0,def=none,in=In,
type={merged,
@@ -770,7 +770,7 @@ write_spec(Args, Optional, {complex, Res}, Eol) ->
optional_type(Opts, Eol) ->
"Option :: " ++ args(fun optional_type2/1, Eol++"\t\t | ", Opts).
optional_type2(#param{name=Name, def=_Def, type=T}) ->
- "{" ++ erl_option_name(Name) ++ ", " ++ doc_arg_type2(T) ++ "}". %% %% Default: " ++ Def.
+ "{'" ++ erl_option_name(Name) ++ "', " ++ doc_arg_type2(T) ++ "}". %% %% Default: " ++ Def.
doc_link("utils", Func) ->
w("%% @doc See <a href=\"http://www.wxwidgets.org/manuals/2.8.12/wx_miscellany.html#~s\">"
@@ -861,7 +861,7 @@ doc_arg_type3(T, _) -> ?error({unknown_type,T}).
doc_return_types(T, Ps) ->
doc_return_types2(T, [P || P=#param{in=In} <- Ps,In =/= true]).
-doc_return_types2(void, []) -> {simple, "ok"};
+doc_return_types2(void, []) -> {simple, "'ok'"};
doc_return_types2(void, [#param{type=T}]) -> {simple, doc_arg_type2(T, out)};
doc_return_types2(T, []) -> {simple, doc_arg_type2(T, out)};
doc_return_types2(void, Ps) when length(Ps) < 4 ->
@@ -1220,7 +1220,7 @@ gen_event_recs() ->
build_event_rec(Class=#class{name=Name, event=Evs}) ->
EvTypes = [event_type_name(Ev) || Ev <- Evs],
- Str = args(fun(Ev) -> Ev end, " | ", EvTypes),
+ Str = args(fun(Ev) -> "'" ++ Ev ++ "'" end, " | ", EvTypes),
Attr = filter_attrs(Class),
Rec = event_rec_name(Name),
%%GetName = fun(#param{name=N}) ->event_attr_name(N) end,
diff --git a/lib/wx/c_src/gen/wxe_funcs.cpp b/lib/wx/c_src/gen/wxe_funcs.cpp
index 942baf7c7f..4243d8a35a 100644
--- a/lib/wx/c_src/gen/wxe_funcs.cpp
+++ b/lib/wx/c_src/gen/wxe_funcs.cpp
@@ -51,7 +51,7 @@ void WxeApp::wxe_dispatch(wxeCommand& Ecmd)
void *This = getPtr(bp,memenv);
wxeRefData *refd = getRefData(This);
if(This && refd) {
- if(recurse_level > 1 && refd->type != 4) {
+ if(recurse_level > 1 && refd->type != 8) {
delayed_delete->Append(Ecmd.Save(op));
} else {
delete_object(This, refd);
@@ -5889,27 +5889,27 @@ case wxMirrorDC_new: { // wxMirrorDC::wxMirrorDC
wxDC *dc = (wxDC *) getPtr(bp,memenv); bp += 4;
bool * mirror = (bool *) bp; bp += 4;
wxMirrorDC * Result = new EwxMirrorDC(*dc,*mirror);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxMirrorDC");
break;
}
case wxScreenDC_new: { // wxScreenDC::wxScreenDC
wxScreenDC * Result = new EwxScreenDC();
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxScreenDC");
break;
}
#if wxUSE_POSTSCRIPT
case wxPostScriptDC_new_0: { // wxPostScriptDC::wxPostScriptDC
wxPostScriptDC * Result = new EwxPostScriptDC();
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxPostScriptDC");
break;
}
case wxPostScriptDC_new_1: { // wxPostScriptDC::wxPostScriptDC
wxPrintData *printData = (wxPrintData *) getPtr(bp,memenv); bp += 4;
wxPostScriptDC * Result = new EwxPostScriptDC(*printData);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxPostScriptDC");
break;
}
@@ -5931,7 +5931,7 @@ case wxPostScriptDC_GetResolution: { // wxPostScriptDC::GetResolution
#if !wxCHECK_VERSION(2,9,0)
case wxWindowDC_new_0: { // wxWindowDC::wxWindowDC
wxWindowDC * Result = new EwxWindowDC();
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxWindowDC");
break;
}
@@ -5939,14 +5939,14 @@ case wxWindowDC_new_0: { // wxWindowDC::wxWindowDC
case wxWindowDC_new_1: { // wxWindowDC::wxWindowDC
wxWindow *win = (wxWindow *) getPtr(bp,memenv); bp += 4;
wxWindowDC * Result = new EwxWindowDC(win);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxWindowDC");
break;
}
#if !wxCHECK_VERSION(2,9,0)
case wxClientDC_new_0: { // wxClientDC::wxClientDC
wxClientDC * Result = new EwxClientDC();
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxClientDC");
break;
}
@@ -5954,14 +5954,14 @@ case wxClientDC_new_0: { // wxClientDC::wxClientDC
case wxClientDC_new_1: { // wxClientDC::wxClientDC
wxWindow *win = (wxWindow *) getPtr(bp,memenv); bp += 4;
wxClientDC * Result = new EwxClientDC(win);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxClientDC");
break;
}
#if !wxCHECK_VERSION(2,9,0)
case wxPaintDC_new_0: { // wxPaintDC::wxPaintDC
wxPaintDC * Result = new EwxPaintDC();
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxPaintDC");
break;
}
@@ -5969,27 +5969,27 @@ case wxPaintDC_new_0: { // wxPaintDC::wxPaintDC
case wxPaintDC_new_1: { // wxPaintDC::wxPaintDC
wxWindow *win = (wxWindow *) getPtr(bp,memenv); bp += 4;
wxPaintDC * Result = new EwxPaintDC(win);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxPaintDC");
break;
}
case wxMemoryDC_new_1_0: { // wxMemoryDC::wxMemoryDC
wxBitmap *bitmap = (wxBitmap *) getPtr(bp,memenv); bp += 4;
wxMemoryDC * Result = new EwxMemoryDC(*bitmap);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxMemoryDC");
break;
}
case wxMemoryDC_new_1_1: { // wxMemoryDC::wxMemoryDC
wxDC * dc = (wxDC *) getPtr(bp,memenv); bp += 4;
wxMemoryDC * Result = new EwxMemoryDC(dc);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxMemoryDC");
break;
}
case wxMemoryDC_new_0: { // wxMemoryDC::wxMemoryDC
wxMemoryDC * Result = new EwxMemoryDC();
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxMemoryDC");
break;
}
@@ -6009,7 +6009,7 @@ case wxMemoryDC_SelectObjectAsSource: { // wxMemoryDC::SelectObjectAsSource
}
case wxBufferedDC_new_0: { // wxBufferedDC::wxBufferedDC
wxBufferedDC * Result = new EwxBufferedDC();
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxBufferedDC");
break;
}
@@ -6027,7 +6027,7 @@ buffer = (wxBitmap *) getPtr(bp,memenv); bp += 4;
} break;
}};
wxBufferedDC * Result = new EwxBufferedDC(dc,*buffer,style);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxBufferedDC");
break;
}
@@ -6044,7 +6044,7 @@ case wxBufferedDC_new_3: { // wxBufferedDC::wxBufferedDC
} break;
}};
wxBufferedDC * Result = new EwxBufferedDC(dc,area,style);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxBufferedDC");
break;
}
@@ -6091,7 +6091,7 @@ case wxBufferedPaintDC_new_3: { // wxBufferedPaintDC::wxBufferedPaintDC
} break;
}};
wxBufferedPaintDC * Result = new EwxBufferedPaintDC(window,*buffer,style);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxBufferedPaintDC");
break;
}
@@ -6105,7 +6105,7 @@ case wxBufferedPaintDC_new_2: { // wxBufferedPaintDC::wxBufferedPaintDC
} break;
}};
wxBufferedPaintDC * Result = new EwxBufferedPaintDC(window,style);
- newPtr((void *) Result, 4, memenv);
+ newPtr((void *) Result, 8, memenv);
rt.addRef(getRef((void *)Result,memenv), "wxBufferedPaintDC");
break;
}
@@ -6147,7 +6147,7 @@ case wxGraphicsContext_CreatePen: { // wxGraphicsContext::CreatePen
wxGraphicsContext *This = (wxGraphicsContext *) getPtr(bp,memenv); bp += 4;
wxPen *pen = (wxPen *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxGraphicsPen * Result = new wxGraphicsPen(This->CreatePen(*pen)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsPen * Result = new wxGraphicsPen(This->CreatePen(*pen)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsPen");
break;
}
@@ -6155,7 +6155,7 @@ case wxGraphicsContext_CreateBrush: { // wxGraphicsContext::CreateBrush
wxGraphicsContext *This = (wxGraphicsContext *) getPtr(bp,memenv); bp += 4;
wxBrush *brush = (wxBrush *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateBrush(*brush)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateBrush(*brush)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsBrush");
break;
}
@@ -6179,7 +6179,7 @@ case wxGraphicsContext_CreateRadialGradientBrush: { // wxGraphicsContext::Create
int * cColorA = (int *) bp; bp += 4;
wxColour cColor = wxColour(*cColorR,*cColorG,*cColorB,*cColorA);
if(!This) throw wxe_badarg(0);
- wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateRadialGradientBrush(*xo,*yo,*xc,*yc,*radius,oColor,cColor)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateRadialGradientBrush(*xo,*yo,*xc,*yc,*radius,oColor,cColor)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsBrush");
break;
}
@@ -6203,7 +6203,7 @@ case wxGraphicsContext_CreateLinearGradientBrush: { // wxGraphicsContext::Create
int * c2A = (int *) bp; bp += 4;
wxColour c2 = wxColour(*c2R,*c2G,*c2B,*c2A);
if(!This) throw wxe_badarg(0);
- wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateLinearGradientBrush(*x1,*y1,*x2,*y2,c1,c2)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateLinearGradientBrush(*x1,*y1,*x2,*y2,c1,c2)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsBrush");
break;
}
@@ -6223,7 +6223,7 @@ case wxGraphicsContext_CreateFont: { // wxGraphicsContext::CreateFont
} break;
}};
if(!This) throw wxe_badarg(0);
- wxGraphicsFont * Result = new wxGraphicsFont(This->CreateFont(*font,col)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsFont * Result = new wxGraphicsFont(This->CreateFont(*font,col)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsFont");
break;
}
@@ -6263,14 +6263,14 @@ case wxGraphicsContext_CreateMatrix: { // wxGraphicsContext::CreateMatrix
} break;
}};
if(!This) throw wxe_badarg(0);
- wxGraphicsMatrix * Result = new wxGraphicsMatrix(This->CreateMatrix(a,b,c,d,tx,ty)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsMatrix * Result = new wxGraphicsMatrix(This->CreateMatrix(a,b,c,d,tx,ty)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsMatrix");
break;
}
case wxGraphicsContext_CreatePath: { // wxGraphicsContext::CreatePath
wxGraphicsContext *This = (wxGraphicsContext *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxGraphicsPath * Result = new wxGraphicsPath(This->CreatePath()); newPtr((void *) Result,3, memenv);;
+ wxGraphicsPath * Result = new wxGraphicsPath(This->CreatePath()); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsPath");
break;
}
@@ -6514,7 +6514,7 @@ case wxGraphicsContext_Translate: { // wxGraphicsContext::Translate
case wxGraphicsContext_GetTransform: { // wxGraphicsContext::GetTransform
wxGraphicsContext *This = (wxGraphicsContext *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxGraphicsMatrix * Result = new wxGraphicsMatrix(This->GetTransform()); newPtr((void *) Result,3, memenv);;
+ wxGraphicsMatrix * Result = new wxGraphicsMatrix(This->GetTransform()); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsMatrix");
break;
}
@@ -7000,7 +7000,7 @@ case wxGraphicsRenderer_CreatePen: { // wxGraphicsRenderer::CreatePen
wxGraphicsRenderer *This = (wxGraphicsRenderer *) getPtr(bp,memenv); bp += 4;
wxPen *pen = (wxPen *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxGraphicsPen * Result = new wxGraphicsPen(This->CreatePen(*pen)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsPen * Result = new wxGraphicsPen(This->CreatePen(*pen)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsPen");
break;
}
@@ -7008,7 +7008,7 @@ case wxGraphicsRenderer_CreateBrush: { // wxGraphicsRenderer::CreateBrush
wxGraphicsRenderer *This = (wxGraphicsRenderer *) getPtr(bp,memenv); bp += 4;
wxBrush *brush = (wxBrush *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateBrush(*brush)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateBrush(*brush)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsBrush");
break;
}
@@ -7031,7 +7031,7 @@ case wxGraphicsRenderer_CreateLinearGradientBrush: { // wxGraphicsRenderer::Crea
int * c2A = (int *) bp; bp += 4;
wxColour c2 = wxColour(*c2R,*c2G,*c2B,*c2A);
if(!This) throw wxe_badarg(0);
- wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateLinearGradientBrush(*x1,*y1,*x2,*y2,c1,c2)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateLinearGradientBrush(*x1,*y1,*x2,*y2,c1,c2)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsBrush");
break;
}
@@ -7056,7 +7056,7 @@ case wxGraphicsRenderer_CreateRadialGradientBrush: { // wxGraphicsRenderer::Crea
int * cColorA = (int *) bp; bp += 4;
wxColour cColor = wxColour(*cColorR,*cColorG,*cColorB,*cColorA);
if(!This) throw wxe_badarg(0);
- wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateRadialGradientBrush(*xo,*yo,*xc,*yc,*radius,oColor,cColor)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsBrush * Result = new wxGraphicsBrush(This->CreateRadialGradientBrush(*xo,*yo,*xc,*yc,*radius,oColor,cColor)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsBrush");
break;
}
@@ -7076,7 +7076,7 @@ case wxGraphicsRenderer_CreateFont: { // wxGraphicsRenderer::CreateFont
} break;
}};
if(!This) throw wxe_badarg(0);
- wxGraphicsFont * Result = new wxGraphicsFont(This->CreateFont(*font,col)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsFont * Result = new wxGraphicsFont(This->CreateFont(*font,col)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsFont");
break;
}
@@ -7116,14 +7116,14 @@ case wxGraphicsRenderer_CreateMatrix: { // wxGraphicsRenderer::CreateMatrix
} break;
}};
if(!This) throw wxe_badarg(0);
- wxGraphicsMatrix * Result = new wxGraphicsMatrix(This->CreateMatrix(a,b,c,d,tx,ty)); newPtr((void *) Result,3, memenv);;
+ wxGraphicsMatrix * Result = new wxGraphicsMatrix(This->CreateMatrix(a,b,c,d,tx,ty)); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsMatrix");
break;
}
case wxGraphicsRenderer_CreatePath: { // wxGraphicsRenderer::CreatePath
wxGraphicsRenderer *This = (wxGraphicsRenderer *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxGraphicsPath * Result = new wxGraphicsPath(This->CreatePath()); newPtr((void *) Result,3, memenv);;
+ wxGraphicsPath * Result = new wxGraphicsPath(This->CreatePath()); newPtr((void *) Result,4, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxGraphicsPath");
break;
}
@@ -32071,7 +32071,20 @@ case wxDCOverlay_Clear: { // wxDCOverlay::Clear
bool WxeApp::delete_object(void *ptr, wxeRefData *refd) {
+ if(wxe_debug) {
+ wxString msg;
+ const wxChar *class_info = wxT("unknown");
+ if(refd->type < 10) {
+ wxClassInfo *cinfo = ((wxObject *)ptr)->GetClassInfo();
+ class_info = cinfo->GetClassName();
+ }
+ msg.Printf(wxT("Deleting {wx_ref, %d, %s} at %p "), refd->ref, class_info, ptr);
+ send_msg("debug", &msg);
+ };
switch(refd->type) {
+#if wxUSE_GRAPHICS_CONTEXT
+ case 4: delete (wxGraphicsObject *) ptr; break;
+#endif
case 24: delete (wxGridCellBoolRenderer *) ptr; break;
case 25: delete (wxGridCellBoolEditor *) ptr; break;
case 26: delete (wxGridCellFloatRenderer *) ptr; break;
diff --git a/lib/wx/c_src/wxe_helpers.cpp b/lib/wx/c_src/wxe_helpers.cpp
index 4798e605e8..d1f607d2af 100644
--- a/lib/wx/c_src/wxe_helpers.cpp
+++ b/lib/wx/c_src/wxe_helpers.cpp
@@ -48,7 +48,7 @@ void wxeCommand::Delete()
driver_free(buffer);
buffer = NULL;
}
- op = -1;
+ op = -2;
}
/* ****************************************************************************
@@ -84,7 +84,7 @@ wxeCommand * wxeFifo::Get()
pos = m_first++;
m_n--;
m_first %= m_max;
- } while(m_q[pos].op == -1);
+ } while(m_q[pos].op < 0);
return &m_q[pos];
}
@@ -96,7 +96,7 @@ wxeCommand * wxeFifo::Peek(unsigned int *i)
return NULL;
pos = (m_first+*i) % m_max;
(*i)++;
- } while(m_q[pos].op == -1);
+ } while(m_q[pos].op < 0);
return &m_q[pos];
}
@@ -213,7 +213,7 @@ void wxeFifo::Realloc()
// Strip end of queue if ops are already taken care of, avoids reallocs
void wxeFifo::Strip()
{
- while((m_n > 0) && (m_q[(m_first + m_n - 1)%m_max].op == -1)) {
+ while((m_n > 0) && (m_q[(m_first + m_n - 1)%m_max].op < -1)) {
m_n--;
}
}
diff --git a/lib/wx/c_src/wxe_impl.cpp b/lib/wx/c_src/wxe_impl.cpp
index 175bcfce54..0d2da5d4a7 100644
--- a/lib/wx/c_src/wxe_impl.cpp
+++ b/lib/wx/c_src/wxe_impl.cpp
@@ -490,7 +490,7 @@ void WxeApp::destroyMemEnv(wxeMetaCommand& Ecmd)
if(it != ptr2ref.end()) {
wxeRefData *refd = it->second;
if(refd->alloc_in_erl) {
- if((refd->type == 4) && ((wxObject *)ptr)->IsKindOf(CLASSINFO(wxBufferedDC))) {
+ if((refd->type == 8) && ((wxObject *)ptr)->IsKindOf(CLASSINFO(wxBufferedDC))) {
((wxBufferedDC *)ptr)->m_dc = NULL; // Workaround
}
wxString msg;
@@ -500,7 +500,7 @@ void WxeApp::destroyMemEnv(wxeMetaCommand& Ecmd)
msg.Printf(wxT("Memory leak: {wx_ref, %d, %s}"),
refd->ref, cinfo->GetClassName());
send_msg("error", &msg);
- } else {
+ } else if(refd->type != 4) {
cleanup_ref = delete_object(ptr, refd);
}
if(cleanup_ref) {
@@ -562,7 +562,12 @@ int WxeApp::newPtr(void * ptr, int type, wxeMemEnv *memenv) {
if(wxe_debug) {
wxString msg;
- msg.Printf(wxT("Creating {wx_ref, %d, unknown} at %p "), ref, ptr);
+ const wxChar *class_info = wxT("unknown");
+ if(type < 10) {
+ wxClassInfo *cinfo = ((wxObject *)ptr)->GetClassInfo();
+ class_info = cinfo->GetClassName();
+ }
+ msg.Printf(wxT("Creating {wx_ref, %d, %s} at %p "), ref, class_info, ptr);
send_msg("debug", &msg);
}
@@ -614,12 +619,6 @@ void WxeApp::clearPtr(void * ptr) {
refd->memenv->ref2ptr[ref] = NULL;
free.Append(ref);
- if(wxe_debug) {
- wxString msg;
- msg.Printf(wxT("Deleting {wx_ref, %d, unknown} at %p "), ref, ptr);
- send_msg("debug", &msg);
- }
-
if(((int) refd->pid) != -1) {
// Send terminate pid to owner
wxeReturn rt = wxeReturn(WXE_DRV_PORT,refd->pid, false);
diff --git a/lib/wx/c_src/wxe_main.cpp b/lib/wx/c_src/wxe_main.cpp
index 6fcde42eb5..c7565e33bd 100644
--- a/lib/wx/c_src/wxe_main.cpp
+++ b/lib/wx/c_src/wxe_main.cpp
@@ -67,6 +67,7 @@ int load_native_gui()
int start_native_gui(wxe_data *sd)
{
int res;
+ ErlDrvThreadOpts *opts = NULL;
wxe_status_m = erl_drv_mutex_create((char *) "wxe_status_m");
wxe_status_c = erl_drv_cond_create((char *)"wxe_status_c");
@@ -78,8 +79,11 @@ int start_native_gui(wxe_data *sd)
res = erl_drv_steal_main_thread((char *)"wxwidgets",
&wxe_thread,wxe_main_loop,(void *) sd->pdl,NULL);
#else
+ opts = erl_drv_thread_opts_create((char *)"wx thread");
+ opts->suggested_stack_size = 8192;
res = erl_drv_thread_create((char *)"wxwidgets",
- &wxe_thread,wxe_main_loop,(void *) sd->pdl,NULL);
+ &wxe_thread,wxe_main_loop,(void *) sd->pdl,opts);
+ erl_drv_thread_opts_destroy(opts);
#endif
if(res == 0) {
erl_drv_mutex_lock(wxe_status_m);
diff --git a/lib/wx/c_src/wxe_memory.h b/lib/wx/c_src/wxe_memory.h
index 455e9696d3..66c83e40c3 100644
--- a/lib/wx/c_src/wxe_memory.h
+++ b/lib/wx/c_src/wxe_memory.h
@@ -48,8 +48,9 @@ class wxeRefData {
int type;
// 0 = wxWindow subclasses, 1 = wxObject subclasses
// 2 = wxDialog subclasses, 3 = allocated wxObjects but not returned from new
- // 4 = wxObjects that should always be deleted directly (wxDC derivates)
- // > 4 classes which lack virtual destr, or are supposed to be allocated on
+ // 4 = wxGraphicsObjects or it's subclasses that can no be overloaded
+ // 8 = wxObjects that should always be deleted directly (wxDC derivates)
+ // > 10 classes which lack virtual destr, or are supposed to be allocated on
// the stack
bool alloc_in_erl;
wxeMemEnv *memenv;
diff --git a/lib/wx/doc/specs/.gitignore b/lib/wx/doc/specs/.gitignore
new file mode 100644
index 0000000000..322eebcb06
--- /dev/null
+++ b/lib/wx/doc/specs/.gitignore
@@ -0,0 +1 @@
+specs_*.xml
diff --git a/lib/wx/doc/src/Makefile b/lib/wx/doc/src/Makefile
index cae2f9fe4e..23890f47f0 100644
--- a/lib/wx/doc/src/Makefile
+++ b/lib/wx/doc/src/Makefile
@@ -63,10 +63,15 @@ HTML_REF_MAN_FILE = $(HTMLDIR)/index.html
TOP_PDF_FILE = $(PDFDIR)/$(APPLICATION)-$(VSN).pdf
+SPECS_FILES = $(XML_REF3_FILES:%.xml=$(SPECDIR)/specs_%.xml)
+
+TOP_SPECS_FILE = specs.xml
+
# ----------------------------------------------------
# FLAGS
# ----------------------------------------------------
XML_FLAGS +=
+SPECS_FLAGS = -I../../include -I../../src
DVIPS_FLAGS +=
# ----------------------------------------------------
@@ -111,6 +116,7 @@ clean clean_docs:
rm -rf $(HTMLDIR)/*
rm -f $(MAN3DIR)/*
rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
+ rm -f $(SPECDIR)/*
rm -f errs core *~ ../html/edoc-info
rm -f $(XML_REF3_FILES) $(XML_CHAPTER_FILES) *.html
diff --git a/lib/wx/doc/src/specs.xml b/lib/wx/doc/src/specs.xml
new file mode 100644
index 0000000000..2e19baafc4
--- /dev/null
+++ b/lib/wx/doc/src/specs.xml
@@ -0,0 +1,232 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<specs xmlns:xi="http://www.w3.org/2001/XInclude">
+ <xi:include href="../specs/specs_wx.xml"/>
+ <xi:include href="../specs/specs_wx_object.xml"/>
+ <xi:include href="../specs/specs_wxAcceleratorEntry.xml"/>
+ <xi:include href="../specs/specs_wxAcceleratorTable.xml"/>
+ <xi:include href="../specs/specs_wxActivateEvent.xml"/>
+ <xi:include href="../specs/specs_wxArtProvider.xml"/>
+ <xi:include href="../specs/specs_wxAuiDockArt.xml"/>
+ <xi:include href="../specs/specs_wxAuiManager.xml"/>
+ <xi:include href="../specs/specs_wxAuiManagerEvent.xml"/>
+ <xi:include href="../specs/specs_wxAuiNotebook.xml"/>
+ <xi:include href="../specs/specs_wxAuiNotebookEvent.xml"/>
+ <xi:include href="../specs/specs_wxAuiPaneInfo.xml"/>
+ <xi:include href="../specs/specs_wxAuiSimpleTabArt.xml"/>
+ <xi:include href="../specs/specs_wxAuiTabArt.xml"/>
+ <xi:include href="../specs/specs_wxBitmapButton.xml"/>
+ <xi:include href="../specs/specs_wxBitmapDataObject.xml"/>
+ <xi:include href="../specs/specs_wxBitmap.xml"/>
+ <xi:include href="../specs/specs_wxBoxSizer.xml"/>
+ <xi:include href="../specs/specs_wxBrush.xml"/>
+ <xi:include href="../specs/specs_wxBufferedDC.xml"/>
+ <xi:include href="../specs/specs_wxBufferedPaintDC.xml"/>
+ <xi:include href="../specs/specs_wxButton.xml"/>
+ <xi:include href="../specs/specs_wxCalendarCtrl.xml"/>
+ <xi:include href="../specs/specs_wxCalendarDateAttr.xml"/>
+ <xi:include href="../specs/specs_wxCalendarEvent.xml"/>
+ <xi:include href="../specs/specs_wxCaret.xml"/>
+ <xi:include href="../specs/specs_wxCheckBox.xml"/>
+ <xi:include href="../specs/specs_wxCheckListBox.xml"/>
+ <xi:include href="../specs/specs_wxChildFocusEvent.xml"/>
+ <xi:include href="../specs/specs_wxChoicebook.xml"/>
+ <xi:include href="../specs/specs_wxChoice.xml"/>
+ <xi:include href="../specs/specs_wxClientDC.xml"/>
+ <xi:include href="../specs/specs_wxClipboard.xml"/>
+ <xi:include href="../specs/specs_wxClipboardTextEvent.xml"/>
+ <xi:include href="../specs/specs_wxCloseEvent.xml"/>
+ <xi:include href="../specs/specs_wxColourData.xml"/>
+ <xi:include href="../specs/specs_wxColourDialog.xml"/>
+ <xi:include href="../specs/specs_wxColourPickerCtrl.xml"/>
+ <xi:include href="../specs/specs_wxColourPickerEvent.xml"/>
+ <xi:include href="../specs/specs_wxComboBox.xml"/>
+ <xi:include href="../specs/specs_wxCommandEvent.xml"/>
+ <xi:include href="../specs/specs_wxContextMenuEvent.xml"/>
+ <xi:include href="../specs/specs_wxControl.xml"/>
+ <xi:include href="../specs/specs_wxControlWithItems.xml"/>
+ <xi:include href="../specs/specs_wxCursor.xml"/>
+ <xi:include href="../specs/specs_wxDataObject.xml"/>
+ <xi:include href="../specs/specs_wxDateEvent.xml"/>
+ <xi:include href="../specs/specs_wxDatePickerCtrl.xml"/>
+ <xi:include href="../specs/specs_wxDC.xml"/>
+ <xi:include href="../specs/specs_wxDCOverlay.xml"/>
+ <xi:include href="../specs/specs_wxDialog.xml"/>
+ <xi:include href="../specs/specs_wxDirDialog.xml"/>
+ <xi:include href="../specs/specs_wxDirPickerCtrl.xml"/>
+ <xi:include href="../specs/specs_wxDisplayChangedEvent.xml"/>
+ <xi:include href="../specs/specs_wxEraseEvent.xml"/>
+ <xi:include href="../specs/specs_wxEvent.xml"/>
+ <xi:include href="../specs/specs_wxEvtHandler.xml"/>
+ <xi:include href="../specs/specs_wxFileDataObject.xml"/>
+ <xi:include href="../specs/specs_wxFileDialog.xml"/>
+ <xi:include href="../specs/specs_wxFileDirPickerEvent.xml"/>
+ <xi:include href="../specs/specs_wxFilePickerCtrl.xml"/>
+ <xi:include href="../specs/specs_wxFindReplaceData.xml"/>
+ <xi:include href="../specs/specs_wxFindReplaceDialog.xml"/>
+ <xi:include href="../specs/specs_wxFlexGridSizer.xml"/>
+ <xi:include href="../specs/specs_wxFocusEvent.xml"/>
+ <xi:include href="../specs/specs_wxFontData.xml"/>
+ <xi:include href="../specs/specs_wxFontDialog.xml"/>
+ <xi:include href="../specs/specs_wxFont.xml"/>
+ <xi:include href="../specs/specs_wxFontPickerCtrl.xml"/>
+ <xi:include href="../specs/specs_wxFontPickerEvent.xml"/>
+ <xi:include href="../specs/specs_wxFrame.xml"/>
+ <xi:include href="../specs/specs_wxGauge.xml"/>
+ <xi:include href="../specs/specs_wxGBSizerItem.xml"/>
+ <xi:include href="../specs/specs_wxGenericDirCtrl.xml"/>
+ <xi:include href="../specs/specs_wxGLCanvas.xml"/>
+ <xi:include href="../specs/specs_wxGraphicsBrush.xml"/>
+ <xi:include href="../specs/specs_wxGraphicsContext.xml"/>
+ <xi:include href="../specs/specs_wxGraphicsFont.xml"/>
+ <xi:include href="../specs/specs_wxGraphicsMatrix.xml"/>
+ <xi:include href="../specs/specs_wxGraphicsObject.xml"/>
+ <xi:include href="../specs/specs_wxGraphicsPath.xml"/>
+ <xi:include href="../specs/specs_wxGraphicsPen.xml"/>
+ <xi:include href="../specs/specs_wxGraphicsRenderer.xml"/>
+ <xi:include href="../specs/specs_wxGridBagSizer.xml"/>
+ <xi:include href="../specs/specs_wxGridCellAttr.xml"/>
+ <xi:include href="../specs/specs_wxGridCellBoolEditor.xml"/>
+ <xi:include href="../specs/specs_wxGridCellBoolRenderer.xml"/>
+ <xi:include href="../specs/specs_wxGridCellChoiceEditor.xml"/>
+ <xi:include href="../specs/specs_wxGridCellEditor.xml"/>
+ <xi:include href="../specs/specs_wxGridCellFloatEditor.xml"/>
+ <xi:include href="../specs/specs_wxGridCellFloatRenderer.xml"/>
+ <xi:include href="../specs/specs_wxGridCellNumberEditor.xml"/>
+ <xi:include href="../specs/specs_wxGridCellNumberRenderer.xml"/>
+ <xi:include href="../specs/specs_wxGridCellRenderer.xml"/>
+ <xi:include href="../specs/specs_wxGridCellStringRenderer.xml"/>
+ <xi:include href="../specs/specs_wxGridCellTextEditor.xml"/>
+ <xi:include href="../specs/specs_wxGrid.xml"/>
+ <xi:include href="../specs/specs_wxGridEvent.xml"/>
+ <xi:include href="../specs/specs_wxGridSizer.xml"/>
+ <xi:include href="../specs/specs_wxHelpEvent.xml"/>
+ <xi:include href="../specs/specs_wxHtmlEasyPrinting.xml"/>
+ <xi:include href="../specs/specs_wxHtmlLinkEvent.xml"/>
+ <xi:include href="../specs/specs_wxHtmlWindow.xml"/>
+ <xi:include href="../specs/specs_wxIconBundle.xml"/>
+ <xi:include href="../specs/specs_wxIcon.xml"/>
+ <xi:include href="../specs/specs_wxIconizeEvent.xml"/>
+ <xi:include href="../specs/specs_wxIdleEvent.xml"/>
+ <xi:include href="../specs/specs_wxImage.xml"/>
+ <xi:include href="../specs/specs_wxImageList.xml"/>
+ <xi:include href="../specs/specs_wxInitDialogEvent.xml"/>
+ <xi:include href="../specs/specs_wxJoystickEvent.xml"/>
+ <xi:include href="../specs/specs_wxKeyEvent.xml"/>
+ <xi:include href="../specs/specs_wxLayoutAlgorithm.xml"/>
+ <xi:include href="../specs/specs_wxListbook.xml"/>
+ <xi:include href="../specs/specs_wxListBox.xml"/>
+ <xi:include href="../specs/specs_wxListCtrl.xml"/>
+ <xi:include href="../specs/specs_wxListEvent.xml"/>
+ <xi:include href="../specs/specs_wxListItemAttr.xml"/>
+ <xi:include href="../specs/specs_wxListItem.xml"/>
+ <xi:include href="../specs/specs_wxListView.xml"/>
+ <xi:include href="../specs/specs_wxLocale.xml"/>
+ <xi:include href="../specs/specs_wxLogNull.xml"/>
+ <xi:include href="../specs/specs_wxMask.xml"/>
+ <xi:include href="../specs/specs_wxMaximizeEvent.xml"/>
+ <xi:include href="../specs/specs_wxMDIChildFrame.xml"/>
+ <xi:include href="../specs/specs_wxMDIClientWindow.xml"/>
+ <xi:include href="../specs/specs_wxMDIParentFrame.xml"/>
+ <xi:include href="../specs/specs_wxMemoryDC.xml"/>
+ <xi:include href="../specs/specs_wxMenuBar.xml"/>
+ <xi:include href="../specs/specs_wxMenu.xml"/>
+ <xi:include href="../specs/specs_wxMenuEvent.xml"/>
+ <xi:include href="../specs/specs_wxMenuItem.xml"/>
+ <xi:include href="../specs/specs_wxMessageDialog.xml"/>
+ <xi:include href="../specs/specs_wxMiniFrame.xml"/>
+ <xi:include href="../specs/specs_wxMirrorDC.xml"/>
+ <xi:include href="../specs/specs_wxMouseCaptureChangedEvent.xml"/>
+ <xi:include href="../specs/specs_wxMouseCaptureLostEvent.xml"/>
+ <xi:include href="../specs/specs_wxMouseEvent.xml"/>
+ <xi:include href="../specs/specs_wxMoveEvent.xml"/>
+ <xi:include href="../specs/specs_wxMultiChoiceDialog.xml"/>
+ <xi:include href="../specs/specs_wxNavigationKeyEvent.xml"/>
+ <xi:include href="../specs/specs_wxNotebook.xml"/>
+ <xi:include href="../specs/specs_wxNotebookEvent.xml"/>
+ <xi:include href="../specs/specs_wxNotifyEvent.xml"/>
+ <xi:include href="../specs/specs_wxOverlay.xml"/>
+ <xi:include href="../specs/specs_wxPageSetupDialogData.xml"/>
+ <xi:include href="../specs/specs_wxPageSetupDialog.xml"/>
+ <xi:include href="../specs/specs_wxPaintDC.xml"/>
+ <xi:include href="../specs/specs_wxPaintEvent.xml"/>
+ <xi:include href="../specs/specs_wxPaletteChangedEvent.xml"/>
+ <xi:include href="../specs/specs_wxPalette.xml"/>
+ <xi:include href="../specs/specs_wxPanel.xml"/>
+ <xi:include href="../specs/specs_wxPasswordEntryDialog.xml"/>
+ <xi:include href="../specs/specs_wxPen.xml"/>
+ <xi:include href="../specs/specs_wxPickerBase.xml"/>
+ <xi:include href="../specs/specs_wxPopupTransientWindow.xml"/>
+ <xi:include href="../specs/specs_wxPopupWindow.xml"/>
+ <xi:include href="../specs/specs_wxPostScriptDC.xml"/>
+ <xi:include href="../specs/specs_wxPreviewCanvas.xml"/>
+ <xi:include href="../specs/specs_wxPreviewControlBar.xml"/>
+ <xi:include href="../specs/specs_wxPreviewFrame.xml"/>
+ <xi:include href="../specs/specs_wxPrintData.xml"/>
+ <xi:include href="../specs/specs_wxPrintDialogData.xml"/>
+ <xi:include href="../specs/specs_wxPrintDialog.xml"/>
+ <xi:include href="../specs/specs_wxPrinter.xml"/>
+ <xi:include href="../specs/specs_wxPrintout.xml"/>
+ <xi:include href="../specs/specs_wxPrintPreview.xml"/>
+ <xi:include href="../specs/specs_wxProgressDialog.xml"/>
+ <xi:include href="../specs/specs_wxQueryNewPaletteEvent.xml"/>
+ <xi:include href="../specs/specs_wxRadioBox.xml"/>
+ <xi:include href="../specs/specs_wxRadioButton.xml"/>
+ <xi:include href="../specs/specs_wxRegion.xml"/>
+ <xi:include href="../specs/specs_wxSashEvent.xml"/>
+ <xi:include href="../specs/specs_wxSashLayoutWindow.xml"/>
+ <xi:include href="../specs/specs_wxSashWindow.xml"/>
+ <xi:include href="../specs/specs_wxScreenDC.xml"/>
+ <xi:include href="../specs/specs_wxScrollBar.xml"/>
+ <xi:include href="../specs/specs_wxScrolledWindow.xml"/>
+ <xi:include href="../specs/specs_wxScrollEvent.xml"/>
+ <xi:include href="../specs/specs_wxScrollWinEvent.xml"/>
+ <xi:include href="../specs/specs_wxSetCursorEvent.xml"/>
+ <xi:include href="../specs/specs_wxShowEvent.xml"/>
+ <xi:include href="../specs/specs_wxSingleChoiceDialog.xml"/>
+ <xi:include href="../specs/specs_wxSizeEvent.xml"/>
+ <xi:include href="../specs/specs_wxSizer.xml"/>
+ <xi:include href="../specs/specs_wxSizerFlags.xml"/>
+ <xi:include href="../specs/specs_wxSizerItem.xml"/>
+ <xi:include href="../specs/specs_wxSlider.xml"/>
+ <xi:include href="../specs/specs_wxSpinButton.xml"/>
+ <xi:include href="../specs/specs_wxSpinCtrl.xml"/>
+ <xi:include href="../specs/specs_wxSpinEvent.xml"/>
+ <xi:include href="../specs/specs_wxSplashScreen.xml"/>
+ <xi:include href="../specs/specs_wxSplitterEvent.xml"/>
+ <xi:include href="../specs/specs_wxSplitterWindow.xml"/>
+ <xi:include href="../specs/specs_wxStaticBitmap.xml"/>
+ <xi:include href="../specs/specs_wxStaticBox.xml"/>
+ <xi:include href="../specs/specs_wxStaticBoxSizer.xml"/>
+ <xi:include href="../specs/specs_wxStaticLine.xml"/>
+ <xi:include href="../specs/specs_wxStaticText.xml"/>
+ <xi:include href="../specs/specs_wxStatusBar.xml"/>
+ <xi:include href="../specs/specs_wxStdDialogButtonSizer.xml"/>
+ <xi:include href="../specs/specs_wxStyledTextCtrl.xml"/>
+ <xi:include href="../specs/specs_wxStyledTextEvent.xml"/>
+ <xi:include href="../specs/specs_wxSysColourChangedEvent.xml"/>
+ <xi:include href="../specs/specs_wxSystemOptions.xml"/>
+ <xi:include href="../specs/specs_wxSystemSettings.xml"/>
+ <xi:include href="../specs/specs_wxTaskBarIcon.xml"/>
+ <xi:include href="../specs/specs_wxTaskBarIconEvent.xml"/>
+ <xi:include href="../specs/specs_wxTextAttr.xml"/>
+ <xi:include href="../specs/specs_wxTextCtrl.xml"/>
+ <xi:include href="../specs/specs_wxTextDataObject.xml"/>
+ <xi:include href="../specs/specs_wxTextEntryDialog.xml"/>
+ <xi:include href="../specs/specs_wxToggleButton.xml"/>
+ <xi:include href="../specs/specs_wxToolBar.xml"/>
+ <xi:include href="../specs/specs_wxToolbook.xml"/>
+ <xi:include href="../specs/specs_wxToolTip.xml"/>
+ <xi:include href="../specs/specs_wxTopLevelWindow.xml"/>
+ <xi:include href="../specs/specs_wxTreebook.xml"/>
+ <xi:include href="../specs/specs_wxTreeCtrl.xml"/>
+ <xi:include href="../specs/specs_wxTreeEvent.xml"/>
+ <xi:include href="../specs/specs_wxUpdateUIEvent.xml"/>
+ <xi:include href="../specs/specs_wxWindowCreateEvent.xml"/>
+ <xi:include href="../specs/specs_wxWindowDC.xml"/>
+ <xi:include href="../specs/specs_wxWindowDestroyEvent.xml"/>
+ <xi:include href="../specs/specs_wxWindow.xml"/>
+ <xi:include href="../specs/specs_wxXmlResource.xml"/>
+ <xi:include href="../specs/specs_wx_misc.xml"/>
+ <xi:include href="../specs/specs_glu.xml"/>
+ <xi:include href="../specs/specs_gl.xml"/>
+</specs>
diff --git a/lib/wx/examples/demo/ex_graphicsContext.erl b/lib/wx/examples/demo/ex_graphicsContext.erl
index d883ddfc5c..1193578037 100644
--- a/lib/wx/examples/demo/ex_graphicsContext.erl
+++ b/lib/wx/examples/demo/ex_graphicsContext.erl
@@ -135,6 +135,8 @@ draw(Win, Pen, Brush, Font) ->
wxGraphicsContext:drawPath(Canvas, Path)
end,
wx:foreach(F, lists:seq(1,10)),
+ wxGraphicsObject:destroy(Path),
+ wxGraphicsObject:destroy(Canvas),
ok
catch _:{not_supported, _} ->
Err = "wxGraphicsContext not available in this build of wxwidgets",
diff --git a/lib/wx/include/gl.hrl b/lib/wx/include/gl.hrl
index 39cd474fcb..d708515e1b 100644
--- a/lib/wx/include/gl.hrl
+++ b/lib/wx/include/gl.hrl
@@ -1723,7 +1723,7 @@
-define(GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER, 16#8A44).
-define(GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER, 16#8A45).
-define(GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER, 16#8A46).
--define(GL_INVALID_INDEX, 16#FFFFFFFFu).
+-define(GL_INVALID_INDEX, 16#FFFFFFFF).
-define(GL_COPY_READ_BUFFER, 16#8F36).
-define(GL_COPY_WRITE_BUFFER, 16#8F37).
-define(GL_DEPTH_CLAMP, 16#864F).
@@ -1746,7 +1746,7 @@
-define(GL_CONDITION_SATISFIED, 16#911C).
-define(GL_WAIT_FAILED, 16#911D).
-define(GL_SYNC_FLUSH_COMMANDS_BIT, 16#00000001).
--define(GL_TIMEOUT_IGNORED, 16#FFFFFFFFFFFFFFFFull).
+-define(GL_TIMEOUT_IGNORED, 16#FFFFFFFFFFFFFFFF).
-define(GL_SAMPLE_POSITION, 16#8E50).
-define(GL_SAMPLE_MASK, 16#8E51).
-define(GL_SAMPLE_MASK_VALUE, 16#8E52).
diff --git a/lib/wx/include/wx.hrl b/lib/wx/include/wx.hrl
index 44df57898a..30baeebb18 100644
--- a/lib/wx/include/wx.hrl
+++ b/lib/wx/include/wx.hrl
@@ -33,162 +33,127 @@
%% Here comes the definitions of all event records.
%% they contain the event type and possible some extra information.
--record(wxNavigationKey,{type :: wxNavigationKeyEventType(), %% Callback event: {@link wxNavigationKeyEvent}
- flags :: integer(),
- focus :: wxWindow:wxWindow()}).
--type wxNavigationKeyEventType() :: navigation_key.
--type wxNavigationKey() :: #wxNavigationKey{}. %% Callback event: {@link wxNavigationKeyEvent}
+-record(wxFocus,{type :: wxFocusEventType(), %% Callback event: {@link wxFocusEvent}
+ win :: wxWindow:wxWindow()}).
+-type wxFocusEventType() :: 'set_focus' | 'kill_focus'.
+-type wxFocus() :: #wxFocus{}. %% Callback event: {@link wxFocusEvent}
--record(wxSash,{type :: wxSashEventType(), %% Callback event: {@link wxSashEvent}
- edge :: wx:wx_enum(),
- dragRect :: {X::integer(), Y::integer(), W::integer(), H::integer()},
- dragStatus :: wx:wx_enum()}).
--type wxSashEventType() :: sash_dragged.
--type wxSash() :: #wxSash{}. %% Callback event: {@link wxSashEvent}
+-record(wxCommand,{type :: wxCommandEventType(), %% Callback event: {@link wxCommandEvent}
+ cmdString :: unicode:chardata(),
+ commandInt :: integer(),
+ extraLong :: integer()}).
+-type wxCommandEventType() :: 'command_button_clicked' | 'command_checkbox_clicked' | 'command_choice_selected' | 'command_listbox_selected' | 'command_listbox_doubleclicked' | 'command_text_updated' | 'command_text_enter' | 'command_menu_selected' | 'command_slider_updated' | 'command_radiobox_selected' | 'command_radiobutton_selected' | 'command_scrollbar_updated' | 'command_vlbox_selected' | 'command_combobox_selected' | 'command_tool_rclicked' | 'command_tool_enter' | 'command_checklistbox_toggled' | 'command_togglebutton_clicked' | 'command_left_click' | 'command_left_dclick' | 'command_right_click' | 'command_set_focus' | 'command_kill_focus' | 'command_enter'.
+-type wxCommand() :: #wxCommand{}. %% Callback event: {@link wxCommandEvent}
--record(wxList,{type :: wxListEventType(), %% Callback event: {@link wxListEvent}
- code :: integer(),
- oldItemIndex :: integer(),
- itemIndex :: integer(),
- col :: integer(),
- pointDrag :: {X::integer(), Y::integer()}}).
--type wxListEventType() :: command_list_begin_drag | command_list_begin_rdrag | command_list_begin_label_edit | command_list_end_label_edit | command_list_delete_item | command_list_delete_all_items | command_list_key_down | command_list_insert_item | command_list_col_click | command_list_col_right_click | command_list_col_begin_drag | command_list_col_dragging | command_list_col_end_drag | command_list_item_selected | command_list_item_deselected | command_list_item_right_click | command_list_item_middle_click | command_list_item_activated | command_list_item_focused | command_list_cache_hint.
--type wxList() :: #wxList{}. %% Callback event: {@link wxListEvent}
+-record(wxColourPicker,{type :: wxColourPickerEventType(), %% Callback event: {@link wxColourPickerEvent}
+ colour :: wx:wx_colour()}).
+-type wxColourPickerEventType() :: 'command_colourpicker_changed'.
+-type wxColourPicker() :: #wxColourPicker{}. %% Callback event: {@link wxColourPickerEvent}
--record(wxNotebook,{type :: wxNotebookEventType(), %% Callback event: {@link wxNotebookEvent}
- nSel :: integer(),
- nOldSel :: integer()}).
--type wxNotebookEventType() :: command_notebook_page_changed | command_notebook_page_changing.
--type wxNotebook() :: #wxNotebook{}. %% Callback event: {@link wxNotebookEvent}
+-record(wxHelp, {type :: wxHelpEventType()}). %% Callback event: {@link wxHelpEvent}
+-type wxHelpEventType() :: 'help' | 'detailed_help'.
+-type wxHelp() :: #wxHelp{}. %% Callback event: {@link wxHelpEvent}
--record(wxDisplayChanged, {type :: wxDisplayChangedEventType()}). %% Callback event: {@link wxDisplayChangedEvent}
--type wxDisplayChangedEventType() :: display_changed.
--type wxDisplayChanged() :: #wxDisplayChanged{}. %% Callback event: {@link wxDisplayChangedEvent}
+-record(wxSpin,{type :: wxSpinEventType(), %% Callback event: {@link wxSpinEvent}
+ commandInt :: integer()}).
+-type wxSpinEventType() :: 'command_spinctrl_updated' | 'spin_up' | 'spin_down' | 'spin'.
+-type wxSpin() :: #wxSpin{}. %% Callback event: {@link wxSpinEvent}
--record(wxErase,{type :: wxEraseEventType(), %% Callback event: {@link wxEraseEvent}
+-record(wxAuiManager,{type :: wxAuiManagerEventType(), %% Callback event: {@link wxAuiManagerEvent}
+ manager :: wxAuiManager:wxAuiManager(),
+ pane :: wxAuiPaneInfo:wxAuiPaneInfo(),
+ button :: integer(),
+ veto_flag :: boolean(),
+ canveto_flag :: boolean(),
dc :: wxDC:wxDC()}).
--type wxEraseEventType() :: erase_background.
--type wxErase() :: #wxErase{}. %% Callback event: {@link wxEraseEvent}
-
--record(wxKey,{type :: wxKeyEventType(), %% Callback event: {@link wxKeyEvent}
- x :: integer(),
- y :: integer(),
- keyCode :: integer(),
- controlDown :: boolean(),
- shiftDown :: boolean(),
- altDown :: boolean(),
- metaDown :: boolean(),
- scanCode :: boolean(),
- uniChar :: integer(),
- rawCode :: integer(),
- rawFlags :: integer()}).
--type wxKeyEventType() :: char | char_hook | key_down | key_up.
--type wxKey() :: #wxKey{}. %% Callback event: {@link wxKeyEvent}
-
--record(wxWindowDestroy, {type :: wxWindowDestroyEventType()}). %% Callback event: {@link wxWindowDestroyEvent}
--type wxWindowDestroyEventType() :: destroy.
--type wxWindowDestroy() :: #wxWindowDestroy{}. %% Callback event: {@link wxWindowDestroyEvent}
+-type wxAuiManagerEventType() :: 'aui_pane_button' | 'aui_pane_close' | 'aui_pane_maximize' | 'aui_pane_restore' | 'aui_pane_activated' | 'aui_render' | 'aui_find_manager'.
+-type wxAuiManager() :: #wxAuiManager{}. %% Callback event: {@link wxAuiManagerEvent}
--record(wxCalendar,{type :: wxCalendarEventType(), %% Callback event: {@link wxCalendarEvent}
- wday :: wx:wx_enum(),
+-record(wxDate,{type :: wxDateEventType(), %% Callback event: {@link wxDateEvent}
date :: wx:wx_datetime()}).
--type wxCalendarEventType() :: calendar_sel_changed | calendar_day_changed | calendar_month_changed | calendar_year_changed | calendar_doubleclicked | calendar_weekday_clicked.
--type wxCalendar() :: #wxCalendar{}. %% Callback event: {@link wxCalendarEvent}
+-type wxDateEventType() :: 'date_changed'.
+-type wxDate() :: #wxDate{}. %% Callback event: {@link wxDateEvent}
--record(wxSplitter, {type :: wxSplitterEventType()}). %% Callback event: {@link wxSplitterEvent}
--type wxSplitterEventType() :: command_splitter_sash_pos_changed | command_splitter_sash_pos_changing | command_splitter_doubleclicked | command_splitter_unsplit.
--type wxSplitter() :: #wxSplitter{}. %% Callback event: {@link wxSplitterEvent}
+-record(wxIconize,{type :: wxIconizeEventType(), %% Callback event: {@link wxIconizeEvent}
+ iconized :: boolean()}).
+-type wxIconizeEventType() :: 'iconize'.
+-type wxIconize() :: #wxIconize{}. %% Callback event: {@link wxIconizeEvent}
-record(wxScroll,{type :: wxScrollEventType(), %% Callback event: {@link wxScrollEvent}
commandInt :: integer(),
extraLong :: integer()}).
--type wxScrollEventType() :: scroll_top | scroll_bottom | scroll_lineup | scroll_linedown | scroll_pageup | scroll_pagedown | scroll_thumbtrack | scroll_thumbrelease | scroll_changed.
+-type wxScrollEventType() :: 'scroll_top' | 'scroll_bottom' | 'scroll_lineup' | 'scroll_linedown' | 'scroll_pageup' | 'scroll_pagedown' | 'scroll_thumbtrack' | 'scroll_thumbrelease' | 'scroll_changed'.
-type wxScroll() :: #wxScroll{}. %% Callback event: {@link wxScrollEvent}
--record(wxMenu,{type :: wxMenuEventType(), %% Callback event: {@link wxMenuEvent}
- menuId :: integer(),
- menu :: wxMenu:wxMenu()}).
--type wxMenuEventType() :: menu_open | menu_close | menu_highlight.
--type wxMenu() :: #wxMenu{}. %% Callback event: {@link wxMenuEvent}
+-record(wxSplitter, {type :: wxSplitterEventType()}). %% Callback event: {@link wxSplitterEvent}
+-type wxSplitterEventType() :: 'command_splitter_sash_pos_changed' | 'command_splitter_sash_pos_changing' | 'command_splitter_doubleclicked' | 'command_splitter_unsplit'.
+-type wxSplitter() :: #wxSplitter{}. %% Callback event: {@link wxSplitterEvent}
+
+-record(wxPaletteChanged, {type :: wxPaletteChangedEventType()}). %% Callback event: {@link wxPaletteChangedEvent}
+-type wxPaletteChangedEventType() :: 'palette_changed'.
+-type wxPaletteChanged() :: #wxPaletteChanged{}. %% Callback event: {@link wxPaletteChangedEvent}
+
+-record(wxNotebook,{type :: wxNotebookEventType(), %% Callback event: {@link wxNotebookEvent}
+ nSel :: integer(),
+ nOldSel :: integer()}).
+-type wxNotebookEventType() :: 'command_notebook_page_changed' | 'command_notebook_page_changing'.
+-type wxNotebook() :: #wxNotebook{}. %% Callback event: {@link wxNotebookEvent}
-record(wxContextMenu,{type :: wxContextMenuEventType(), %% Callback event: {@link wxContextMenuEvent}
pos :: {X::integer(), Y::integer()}}).
--type wxContextMenuEventType() :: context_menu.
+-type wxContextMenuEventType() :: 'context_menu'.
-type wxContextMenu() :: #wxContextMenu{}. %% Callback event: {@link wxContextMenuEvent}
--record(wxShow,{type :: wxShowEventType(), %% Callback event: {@link wxShowEvent}
- show :: boolean()}).
--type wxShowEventType() :: show.
--type wxShow() :: #wxShow{}. %% Callback event: {@link wxShowEvent}
-
--record(wxSpin,{type :: wxSpinEventType(), %% Callback event: {@link wxSpinEvent}
- commandInt :: integer()}).
--type wxSpinEventType() :: command_spinctrl_updated | spin_up | spin_down | spin.
--type wxSpin() :: #wxSpin{}. %% Callback event: {@link wxSpinEvent}
-
--record(wxSetCursor,{type :: wxSetCursorEventType(), %% Callback event: {@link wxSetCursorEvent}
- x :: integer(),
- y :: integer(),
- cursor :: wxCursor:wxCursor()}).
--type wxSetCursorEventType() :: set_cursor.
--type wxSetCursor() :: #wxSetCursor{}. %% Callback event: {@link wxSetCursorEvent}
-
--record(wxMouseCaptureLost, {type :: wxMouseCaptureLostEventType()}). %% Callback event: {@link wxMouseCaptureLostEvent}
--type wxMouseCaptureLostEventType() :: mouse_capture_lost.
--type wxMouseCaptureLost() :: #wxMouseCaptureLost{}. %% Callback event: {@link wxMouseCaptureLostEvent}
-
-record(wxFontPicker,{type :: wxFontPickerEventType(), %% Callback event: {@link wxFontPickerEvent}
font :: wxFont:wxFont()}).
--type wxFontPickerEventType() :: command_fontpicker_changed.
+-type wxFontPickerEventType() :: 'command_fontpicker_changed'.
-type wxFontPicker() :: #wxFontPicker{}. %% Callback event: {@link wxFontPickerEvent}
--record(wxScrollWin,{type :: wxScrollWinEventType(), %% Callback event: {@link wxScrollWinEvent}
- commandInt :: integer(),
- extraLong :: integer()}).
--type wxScrollWinEventType() :: scrollwin_top | scrollwin_bottom | scrollwin_lineup | scrollwin_linedown | scrollwin_pageup | scrollwin_pagedown | scrollwin_thumbtrack | scrollwin_thumbrelease.
--type wxScrollWin() :: #wxScrollWin{}. %% Callback event: {@link wxScrollWinEvent}
-
--record(wxPaint, {type :: wxPaintEventType()}). %% Callback event: {@link wxPaintEvent}
--type wxPaintEventType() :: paint.
--type wxPaint() :: #wxPaint{}. %% Callback event: {@link wxPaintEvent}
-
-record(wxChildFocus, {type :: wxChildFocusEventType()}). %% Callback event: {@link wxChildFocusEvent}
--type wxChildFocusEventType() :: child_focus.
+-type wxChildFocusEventType() :: 'child_focus'.
-type wxChildFocus() :: #wxChildFocus{}. %% Callback event: {@link wxChildFocusEvent}
--record(wxMaximize, {type :: wxMaximizeEventType()}). %% Callback event: {@link wxMaximizeEvent}
--type wxMaximizeEventType() :: maximize.
--type wxMaximize() :: #wxMaximize{}. %% Callback event: {@link wxMaximizeEvent}
-
--record(wxFileDirPicker,{type :: wxFileDirPickerEventType(), %% Callback event: {@link wxFileDirPickerEvent}
- path :: unicode:chardata()}).
--type wxFileDirPickerEventType() :: command_filepicker_changed | command_dirpicker_changed.
--type wxFileDirPicker() :: #wxFileDirPicker{}. %% Callback event: {@link wxFileDirPickerEvent}
-
--record(wxFocus,{type :: wxFocusEventType(), %% Callback event: {@link wxFocusEvent}
- win :: wxWindow:wxWindow()}).
--type wxFocusEventType() :: set_focus | kill_focus.
--type wxFocus() :: #wxFocus{}. %% Callback event: {@link wxFocusEvent}
-
--record(wxDate,{type :: wxDateEventType(), %% Callback event: {@link wxDateEvent}
- date :: wx:wx_datetime()}).
--type wxDateEventType() :: date_changed.
--type wxDate() :: #wxDate{}. %% Callback event: {@link wxDateEvent}
+-record(wxTaskBarIcon, {type :: wxTaskBarIconEventType()}). %% Callback event: {@link wxTaskBarIconEvent}
+-type wxTaskBarIconEventType() :: 'taskbar_move' | 'taskbar_left_down' | 'taskbar_left_up' | 'taskbar_right_down' | 'taskbar_right_up' | 'taskbar_left_dclick' | 'taskbar_right_dclick'.
+-type wxTaskBarIcon() :: #wxTaskBarIcon{}. %% Callback event: {@link wxTaskBarIconEvent}
--record(wxHtmlLink,{type :: wxHtmlLinkEventType(), %% Callback event: {@link wxHtmlLinkEvent}
- linkInfo :: wx:wx_wxHtmlLinkInfo()}).
--type wxHtmlLinkEventType() :: command_html_link_clicked.
--type wxHtmlLink() :: #wxHtmlLink{}. %% Callback event: {@link wxHtmlLinkEvent}
+-record(wxWindowDestroy, {type :: wxWindowDestroyEventType()}). %% Callback event: {@link wxWindowDestroyEvent}
+-type wxWindowDestroyEventType() :: 'destroy'.
+-type wxWindowDestroy() :: #wxWindowDestroy{}. %% Callback event: {@link wxWindowDestroyEvent}
--record(wxHelp, {type :: wxHelpEventType()}). %% Callback event: {@link wxHelpEvent}
--type wxHelpEventType() :: help | detailed_help.
--type wxHelp() :: #wxHelp{}. %% Callback event: {@link wxHelpEvent}
+-record(wxMenu,{type :: wxMenuEventType(), %% Callback event: {@link wxMenuEvent}
+ menuId :: integer(),
+ menu :: wxMenu:wxMenu()}).
+-type wxMenuEventType() :: 'menu_open' | 'menu_close' | 'menu_highlight'.
+-type wxMenu() :: #wxMenu{}. %% Callback event: {@link wxMenuEvent}
-record(wxActivate,{type :: wxActivateEventType(), %% Callback event: {@link wxActivateEvent}
active :: boolean()}).
--type wxActivateEventType() :: activate | activate_app | hibernate.
+-type wxActivateEventType() :: 'activate' | 'activate_app' | 'hibernate'.
-type wxActivate() :: #wxActivate{}. %% Callback event: {@link wxActivateEvent}
+-record(wxGrid,{type :: wxGridEventType(), %% Callback event: {@link wxGridEvent}
+ row :: integer(),
+ col :: integer(),
+ x :: integer(),
+ y :: integer(),
+ selecting :: boolean(),
+ control :: boolean(),
+ meta :: boolean(),
+ shift :: boolean(),
+ alt :: boolean()}).
+-type wxGridEventType() :: 'grid_cell_left_click' | 'grid_cell_right_click' | 'grid_cell_left_dclick' | 'grid_cell_right_dclick' | 'grid_label_left_click' | 'grid_label_right_click' | 'grid_label_left_dclick' | 'grid_label_right_dclick' | 'grid_row_size' | 'grid_col_size' | 'grid_range_select' | 'grid_cell_change' | 'grid_select_cell' | 'grid_editor_shown' | 'grid_editor_hidden' | 'grid_editor_created' | 'grid_cell_begin_drag'.
+-type wxGrid() :: #wxGrid{}. %% Callback event: {@link wxGridEvent}
+
+-record(wxPaint, {type :: wxPaintEventType()}). %% Callback event: {@link wxPaintEvent}
+-type wxPaintEventType() :: 'paint'.
+-type wxPaint() :: #wxPaint{}. %% Callback event: {@link wxPaintEvent}
+
+-record(wxShow,{type :: wxShowEventType(), %% Callback event: {@link wxShowEvent}
+ show :: boolean()}).
+-type wxShowEventType() :: 'show'.
+-type wxShow() :: #wxShow{}. %% Callback event: {@link wxShowEvent}
+
-record(wxStyledText,{type :: wxStyledTextEventType(), %% Callback event: {@link wxStyledTextEvent}
position :: integer(),
key :: integer(),
@@ -210,59 +175,116 @@
dragText :: unicode:chardata(),
dragAllowMove :: boolean(),
dragResult :: wx:wx_enum()}).
--type wxStyledTextEventType() :: stc_change | stc_styleneeded | stc_charadded | stc_savepointreached | stc_savepointleft | stc_romodifyattempt | stc_key | stc_doubleclick | stc_updateui | stc_modified | stc_macrorecord | stc_marginclick | stc_needshown | stc_painted | stc_userlistselection | stc_uridropped | stc_dwellstart | stc_dwellend | stc_start_drag | stc_drag_over | stc_do_drop | stc_zoom | stc_hotspot_click | stc_hotspot_dclick | stc_calltip_click | stc_autocomp_selection.
+-type wxStyledTextEventType() :: 'stc_change' | 'stc_styleneeded' | 'stc_charadded' | 'stc_savepointreached' | 'stc_savepointleft' | 'stc_romodifyattempt' | 'stc_key' | 'stc_doubleclick' | 'stc_updateui' | 'stc_modified' | 'stc_macrorecord' | 'stc_marginclick' | 'stc_needshown' | 'stc_painted' | 'stc_userlistselection' | 'stc_uridropped' | 'stc_dwellstart' | 'stc_dwellend' | 'stc_start_drag' | 'stc_drag_over' | 'stc_do_drop' | 'stc_zoom' | 'stc_hotspot_click' | 'stc_hotspot_dclick' | 'stc_calltip_click' | 'stc_autocomp_selection'.
-type wxStyledText() :: #wxStyledText{}. %% Callback event: {@link wxStyledTextEvent}
--record(wxSysColourChanged, {type :: wxSysColourChangedEventType()}). %% Callback event: {@link wxSysColourChangedEvent}
--type wxSysColourChangedEventType() :: sys_colour_changed.
--type wxSysColourChanged() :: #wxSysColourChanged{}. %% Callback event: {@link wxSysColourChangedEvent}
+-record(wxAuiNotebook,{type :: wxAuiNotebookEventType(), %% Callback event: {@link wxAuiNotebookEvent}
+ old_selection :: integer(),
+ selection :: integer(),
+ drag_source :: wxAuiNotebook:wxAuiNotebook()}).
+-type wxAuiNotebookEventType() :: 'command_auinotebook_page_close' | 'command_auinotebook_page_changed' | 'command_auinotebook_page_changing' | 'command_auinotebook_button' | 'command_auinotebook_begin_drag' | 'command_auinotebook_end_drag' | 'command_auinotebook_drag_motion' | 'command_auinotebook_allow_dnd' | 'command_auinotebook_tab_middle_down' | 'command_auinotebook_tab_middle_up' | 'command_auinotebook_tab_right_down' | 'command_auinotebook_tab_right_up' | 'command_auinotebook_page_closed' | 'command_auinotebook_drag_done' | 'command_auinotebook_bg_dclick'.
+-type wxAuiNotebook() :: #wxAuiNotebook{}. %% Callback event: {@link wxAuiNotebookEvent}
--record(wxGrid,{type :: wxGridEventType(), %% Callback event: {@link wxGridEvent}
- row :: integer(),
+-record(wxList,{type :: wxListEventType(), %% Callback event: {@link wxListEvent}
+ code :: integer(),
+ oldItemIndex :: integer(),
+ itemIndex :: integer(),
col :: integer(),
- x :: integer(),
- y :: integer(),
- selecting :: boolean(),
- control :: boolean(),
- meta :: boolean(),
- shift :: boolean(),
- alt :: boolean()}).
--type wxGridEventType() :: grid_cell_left_click | grid_cell_right_click | grid_cell_left_dclick | grid_cell_right_dclick | grid_label_left_click | grid_label_right_click | grid_label_left_dclick | grid_label_right_dclick | grid_row_size | grid_col_size | grid_range_select | grid_cell_change | grid_select_cell | grid_editor_shown | grid_editor_hidden | grid_editor_created | grid_cell_begin_drag.
--type wxGrid() :: #wxGrid{}. %% Callback event: {@link wxGridEvent}
-
--record(wxPaletteChanged, {type :: wxPaletteChangedEventType()}). %% Callback event: {@link wxPaletteChangedEvent}
--type wxPaletteChangedEventType() :: palette_changed.
--type wxPaletteChanged() :: #wxPaletteChanged{}. %% Callback event: {@link wxPaletteChangedEvent}
+ pointDrag :: {X::integer(), Y::integer()}}).
+-type wxListEventType() :: 'command_list_begin_drag' | 'command_list_begin_rdrag' | 'command_list_begin_label_edit' | 'command_list_end_label_edit' | 'command_list_delete_item' | 'command_list_delete_all_items' | 'command_list_key_down' | 'command_list_insert_item' | 'command_list_col_click' | 'command_list_col_right_click' | 'command_list_col_begin_drag' | 'command_list_col_dragging' | 'command_list_col_end_drag' | 'command_list_item_selected' | 'command_list_item_deselected' | 'command_list_item_right_click' | 'command_list_item_middle_click' | 'command_list_item_activated' | 'command_list_item_focused' | 'command_list_cache_hint'.
+-type wxList() :: #wxList{}. %% Callback event: {@link wxListEvent}
-record(wxUpdateUI, {type :: wxUpdateUIEventType()}). %% Callback event: {@link wxUpdateUIEvent}
--type wxUpdateUIEventType() :: update_ui.
+-type wxUpdateUIEventType() :: 'update_ui'.
-type wxUpdateUI() :: #wxUpdateUI{}. %% Callback event: {@link wxUpdateUIEvent}
--record(wxSize,{type :: wxSizeEventType(), %% Callback event: {@link wxSizeEvent}
- size :: {W::integer(), H::integer()},
- rect :: {X::integer(), Y::integer(), W::integer(), H::integer()}}).
--type wxSizeEventType() :: size.
--type wxSize() :: #wxSize{}. %% Callback event: {@link wxSizeEvent}
+-record(wxScrollWin,{type :: wxScrollWinEventType(), %% Callback event: {@link wxScrollWinEvent}
+ commandInt :: integer(),
+ extraLong :: integer()}).
+-type wxScrollWinEventType() :: 'scrollwin_top' | 'scrollwin_bottom' | 'scrollwin_lineup' | 'scrollwin_linedown' | 'scrollwin_pageup' | 'scrollwin_pagedown' | 'scrollwin_thumbtrack' | 'scrollwin_thumbrelease'.
+-type wxScrollWin() :: #wxScrollWin{}. %% Callback event: {@link wxScrollWinEvent}
--record(wxIconize,{type :: wxIconizeEventType(), %% Callback event: {@link wxIconizeEvent}
- iconized :: boolean()}).
--type wxIconizeEventType() :: iconize.
--type wxIconize() :: #wxIconize{}. %% Callback event: {@link wxIconizeEvent}
+-record(wxJoystick,{type :: wxJoystickEventType(), %% Callback event: {@link wxJoystickEvent}
+ pos :: {X::integer(), Y::integer()},
+ zPosition :: integer(),
+ buttonChange :: integer(),
+ buttonState :: integer(),
+ joyStick :: integer()}).
+-type wxJoystickEventType() :: 'joy_button_down' | 'joy_button_up' | 'joy_move' | 'joy_zmove'.
+-type wxJoystick() :: #wxJoystick{}. %% Callback event: {@link wxJoystickEvent}
--record(wxAuiNotebook,{type :: wxAuiNotebookEventType(), %% Callback event: {@link wxAuiNotebookEvent}
- old_selection :: integer(),
- selection :: integer(),
- drag_source :: wxAuiNotebook:wxAuiNotebook()}).
--type wxAuiNotebookEventType() :: command_auinotebook_page_close | command_auinotebook_page_changed | command_auinotebook_page_changing | command_auinotebook_button | command_auinotebook_begin_drag | command_auinotebook_end_drag | command_auinotebook_drag_motion | command_auinotebook_allow_dnd | command_auinotebook_tab_middle_down | command_auinotebook_tab_middle_up | command_auinotebook_tab_right_down | command_auinotebook_tab_right_up | command_auinotebook_page_closed | command_auinotebook_drag_done | command_auinotebook_bg_dclick.
--type wxAuiNotebook() :: #wxAuiNotebook{}. %% Callback event: {@link wxAuiNotebookEvent}
+-record(wxWindowCreate, {type :: wxWindowCreateEventType()}). %% Callback event: {@link wxWindowCreateEvent}
+-type wxWindowCreateEventType() :: 'create'.
+-type wxWindowCreate() :: #wxWindowCreate{}. %% Callback event: {@link wxWindowCreateEvent}
-record(wxClose, {type :: wxCloseEventType()}). %% Callback event: {@link wxCloseEvent}
--type wxCloseEventType() :: close_window | end_session | query_end_session.
+-type wxCloseEventType() :: 'close_window' | 'end_session' | 'query_end_session'.
-type wxClose() :: #wxClose{}. %% Callback event: {@link wxCloseEvent}
--record(wxMouseCaptureChanged, {type :: wxMouseCaptureChangedEventType()}). %% Callback event: {@link wxMouseCaptureChangedEvent}
--type wxMouseCaptureChangedEventType() :: mouse_capture_changed.
--type wxMouseCaptureChanged() :: #wxMouseCaptureChanged{}. %% Callback event: {@link wxMouseCaptureChangedEvent}
+-record(wxKey,{type :: wxKeyEventType(), %% Callback event: {@link wxKeyEvent}
+ x :: integer(),
+ y :: integer(),
+ keyCode :: integer(),
+ controlDown :: boolean(),
+ shiftDown :: boolean(),
+ altDown :: boolean(),
+ metaDown :: boolean(),
+ scanCode :: boolean(),
+ uniChar :: integer(),
+ rawCode :: integer(),
+ rawFlags :: integer()}).
+-type wxKeyEventType() :: 'char' | 'char_hook' | 'key_down' | 'key_up'.
+-type wxKey() :: #wxKey{}. %% Callback event: {@link wxKeyEvent}
+
+-record(wxIdle, {type :: wxIdleEventType()}). %% Callback event: {@link wxIdleEvent}
+-type wxIdleEventType() :: 'idle'.
+-type wxIdle() :: #wxIdle{}. %% Callback event: {@link wxIdleEvent}
+
+-record(wxQueryNewPalette, {type :: wxQueryNewPaletteEventType()}). %% Callback event: {@link wxQueryNewPaletteEvent}
+-type wxQueryNewPaletteEventType() :: 'query_new_palette'.
+-type wxQueryNewPalette() :: #wxQueryNewPalette{}. %% Callback event: {@link wxQueryNewPaletteEvent}
+
+-record(wxHtmlLink,{type :: wxHtmlLinkEventType(), %% Callback event: {@link wxHtmlLinkEvent}
+ linkInfo :: wx:wx_wxHtmlLinkInfo()}).
+-type wxHtmlLinkEventType() :: 'command_html_link_clicked'.
+-type wxHtmlLink() :: #wxHtmlLink{}. %% Callback event: {@link wxHtmlLinkEvent}
+
+-record(wxInitDialog, {type :: wxInitDialogEventType()}). %% Callback event: {@link wxInitDialogEvent}
+-type wxInitDialogEventType() :: 'init_dialog'.
+-type wxInitDialog() :: #wxInitDialog{}. %% Callback event: {@link wxInitDialogEvent}
+
+-record(wxMaximize, {type :: wxMaximizeEventType()}). %% Callback event: {@link wxMaximizeEvent}
+-type wxMaximizeEventType() :: 'maximize'.
+-type wxMaximize() :: #wxMaximize{}. %% Callback event: {@link wxMaximizeEvent}
+
+-record(wxClipboardText, {type :: wxClipboardTextEventType()}). %% Callback event: {@link wxClipboardTextEvent}
+-type wxClipboardTextEventType() :: 'command_text_copy' | 'command_text_cut' | 'command_text_paste'.
+-type wxClipboardText() :: #wxClipboardText{}. %% Callback event: {@link wxClipboardTextEvent}
+
+-record(wxTree,{type :: wxTreeEventType(), %% Callback event: {@link wxTreeEvent}
+ item :: integer(),
+ itemOld :: integer(),
+ pointDrag :: {X::integer(), Y::integer()}}).
+-type wxTreeEventType() :: 'command_tree_begin_drag' | 'command_tree_begin_rdrag' | 'command_tree_begin_label_edit' | 'command_tree_end_label_edit' | 'command_tree_delete_item' | 'command_tree_get_info' | 'command_tree_set_info' | 'command_tree_item_expanded' | 'command_tree_item_expanding' | 'command_tree_item_collapsed' | 'command_tree_item_collapsing' | 'command_tree_sel_changed' | 'command_tree_sel_changing' | 'command_tree_key_down' | 'command_tree_item_activated' | 'command_tree_item_right_click' | 'command_tree_item_middle_click' | 'command_tree_end_drag' | 'command_tree_state_image_click' | 'command_tree_item_gettooltip' | 'command_tree_item_menu'.
+-type wxTree() :: #wxTree{}. %% Callback event: {@link wxTreeEvent}
+
+-record(wxErase,{type :: wxEraseEventType(), %% Callback event: {@link wxEraseEvent}
+ dc :: wxDC:wxDC()}).
+-type wxEraseEventType() :: 'erase_background'.
+-type wxErase() :: #wxErase{}. %% Callback event: {@link wxEraseEvent}
+
+-record(wxSash,{type :: wxSashEventType(), %% Callback event: {@link wxSashEvent}
+ edge :: wx:wx_enum(),
+ dragRect :: {X::integer(), Y::integer(), W::integer(), H::integer()},
+ dragStatus :: wx:wx_enum()}).
+-type wxSashEventType() :: 'sash_dragged'.
+-type wxSash() :: #wxSash{}. %% Callback event: {@link wxSashEvent}
+
+-record(wxCalendar,{type :: wxCalendarEventType(), %% Callback event: {@link wxCalendarEvent}
+ wday :: wx:wx_enum(),
+ date :: wx:wx_datetime()}).
+-type wxCalendarEventType() :: 'calendar_sel_changed' | 'calendar_day_changed' | 'calendar_month_changed' | 'calendar_year_changed' | 'calendar_doubleclicked' | 'calendar_weekday_clicked'.
+-type wxCalendar() :: #wxCalendar{}. %% Callback event: {@link wxCalendarEvent}
-record(wxMouse,{type :: wxMouseEventType(), %% Callback event: {@link wxMouseEvent}
x :: integer(),
@@ -277,76 +299,54 @@
wheelRotation :: integer(),
wheelDelta :: integer(),
linesPerAction :: integer()}).
--type wxMouseEventType() :: left_down | left_up | middle_down | middle_up | right_down | right_up | motion | enter_window | leave_window | left_dclick | middle_dclick | right_dclick | mousewheel.
+-type wxMouseEventType() :: 'left_down' | 'left_up' | 'middle_down' | 'middle_up' | 'right_down' | 'right_up' | 'motion' | 'enter_window' | 'leave_window' | 'left_dclick' | 'middle_dclick' | 'right_dclick' | 'mousewheel'.
-type wxMouse() :: #wxMouse{}. %% Callback event: {@link wxMouseEvent}
--record(wxClipboardText, {type :: wxClipboardTextEventType()}). %% Callback event: {@link wxClipboardTextEvent}
--type wxClipboardTextEventType() :: command_text_copy | command_text_cut | command_text_paste.
--type wxClipboardText() :: #wxClipboardText{}. %% Callback event: {@link wxClipboardTextEvent}
-
--record(wxWindowCreate, {type :: wxWindowCreateEventType()}). %% Callback event: {@link wxWindowCreateEvent}
--type wxWindowCreateEventType() :: create.
--type wxWindowCreate() :: #wxWindowCreate{}. %% Callback event: {@link wxWindowCreateEvent}
-
--record(wxAuiManager,{type :: wxAuiManagerEventType(), %% Callback event: {@link wxAuiManagerEvent}
- manager :: wxAuiManager:wxAuiManager(),
- pane :: wxAuiPaneInfo:wxAuiPaneInfo(),
- button :: integer(),
- veto_flag :: boolean(),
- canveto_flag :: boolean(),
- dc :: wxDC:wxDC()}).
--type wxAuiManagerEventType() :: aui_pane_button | aui_pane_close | aui_pane_maximize | aui_pane_restore | aui_pane_activated | aui_render | aui_find_manager.
--type wxAuiManager() :: #wxAuiManager{}. %% Callback event: {@link wxAuiManagerEvent}
-
--record(wxInitDialog, {type :: wxInitDialogEventType()}). %% Callback event: {@link wxInitDialogEvent}
--type wxInitDialogEventType() :: init_dialog.
--type wxInitDialog() :: #wxInitDialog{}. %% Callback event: {@link wxInitDialogEvent}
-
--record(wxCommand,{type :: wxCommandEventType(), %% Callback event: {@link wxCommandEvent}
- cmdString :: unicode:chardata(),
- commandInt :: integer(),
- extraLong :: integer()}).
--type wxCommandEventType() :: command_button_clicked | command_checkbox_clicked | command_choice_selected | command_listbox_selected | command_listbox_doubleclicked | command_text_updated | command_text_enter | command_menu_selected | command_slider_updated | command_radiobox_selected | command_radiobutton_selected | command_scrollbar_updated | command_vlbox_selected | command_combobox_selected | command_tool_rclicked | command_tool_enter | command_checklistbox_toggled | command_togglebutton_clicked | command_left_click | command_left_dclick | command_right_click | command_set_focus | command_kill_focus | command_enter.
--type wxCommand() :: #wxCommand{}. %% Callback event: {@link wxCommandEvent}
+-record(wxSize,{type :: wxSizeEventType(), %% Callback event: {@link wxSizeEvent}
+ size :: {W::integer(), H::integer()},
+ rect :: {X::integer(), Y::integer(), W::integer(), H::integer()}}).
+-type wxSizeEventType() :: 'size'.
+-type wxSize() :: #wxSize{}. %% Callback event: {@link wxSizeEvent}
--record(wxJoystick,{type :: wxJoystickEventType(), %% Callback event: {@link wxJoystickEvent}
- pos :: {X::integer(), Y::integer()},
- zPosition :: integer(),
- buttonChange :: integer(),
- buttonState :: integer(),
- joyStick :: integer()}).
--type wxJoystickEventType() :: joy_button_down | joy_button_up | joy_move | joy_zmove.
--type wxJoystick() :: #wxJoystick{}. %% Callback event: {@link wxJoystickEvent}
+-record(wxSysColourChanged, {type :: wxSysColourChangedEventType()}). %% Callback event: {@link wxSysColourChangedEvent}
+-type wxSysColourChangedEventType() :: 'sys_colour_changed'.
+-type wxSysColourChanged() :: #wxSysColourChanged{}. %% Callback event: {@link wxSysColourChangedEvent}
--record(wxQueryNewPalette, {type :: wxQueryNewPaletteEventType()}). %% Callback event: {@link wxQueryNewPaletteEvent}
--type wxQueryNewPaletteEventType() :: query_new_palette.
--type wxQueryNewPalette() :: #wxQueryNewPalette{}. %% Callback event: {@link wxQueryNewPaletteEvent}
+-record(wxDisplayChanged, {type :: wxDisplayChangedEventType()}). %% Callback event: {@link wxDisplayChangedEvent}
+-type wxDisplayChangedEventType() :: 'display_changed'.
+-type wxDisplayChanged() :: #wxDisplayChanged{}. %% Callback event: {@link wxDisplayChangedEvent}
-record(wxMove,{type :: wxMoveEventType(), %% Callback event: {@link wxMoveEvent}
pos :: {X::integer(), Y::integer()},
rect :: {X::integer(), Y::integer(), W::integer(), H::integer()}}).
--type wxMoveEventType() :: move.
+-type wxMoveEventType() :: 'move'.
-type wxMove() :: #wxMove{}. %% Callback event: {@link wxMoveEvent}
--record(wxIdle, {type :: wxIdleEventType()}). %% Callback event: {@link wxIdleEvent}
--type wxIdleEventType() :: idle.
--type wxIdle() :: #wxIdle{}. %% Callback event: {@link wxIdleEvent}
+-record(wxNavigationKey,{type :: wxNavigationKeyEventType(), %% Callback event: {@link wxNavigationKeyEvent}
+ flags :: integer(),
+ focus :: wxWindow:wxWindow()}).
+-type wxNavigationKeyEventType() :: 'navigation_key'.
+-type wxNavigationKey() :: #wxNavigationKey{}. %% Callback event: {@link wxNavigationKeyEvent}
--record(wxColourPicker,{type :: wxColourPickerEventType(), %% Callback event: {@link wxColourPickerEvent}
- colour :: wx:wx_colour()}).
--type wxColourPickerEventType() :: command_colourpicker_changed.
--type wxColourPicker() :: #wxColourPicker{}. %% Callback event: {@link wxColourPickerEvent}
+-record(wxFileDirPicker,{type :: wxFileDirPickerEventType(), %% Callback event: {@link wxFileDirPickerEvent}
+ path :: unicode:chardata()}).
+-type wxFileDirPickerEventType() :: 'command_filepicker_changed' | 'command_dirpicker_changed'.
+-type wxFileDirPicker() :: #wxFileDirPicker{}. %% Callback event: {@link wxFileDirPickerEvent}
--record(wxTaskBarIcon, {type :: wxTaskBarIconEventType()}). %% Callback event: {@link wxTaskBarIconEvent}
--type wxTaskBarIconEventType() :: taskbar_move | taskbar_left_down | taskbar_left_up | taskbar_right_down | taskbar_right_up | taskbar_left_dclick | taskbar_right_dclick.
--type wxTaskBarIcon() :: #wxTaskBarIcon{}. %% Callback event: {@link wxTaskBarIconEvent}
+-record(wxSetCursor,{type :: wxSetCursorEventType(), %% Callback event: {@link wxSetCursorEvent}
+ x :: integer(),
+ y :: integer(),
+ cursor :: wxCursor:wxCursor()}).
+-type wxSetCursorEventType() :: 'set_cursor'.
+-type wxSetCursor() :: #wxSetCursor{}. %% Callback event: {@link wxSetCursorEvent}
--record(wxTree,{type :: wxTreeEventType(), %% Callback event: {@link wxTreeEvent}
- item :: integer(),
- itemOld :: integer(),
- pointDrag :: {X::integer(), Y::integer()}}).
--type wxTreeEventType() :: command_tree_begin_drag | command_tree_begin_rdrag | command_tree_begin_label_edit | command_tree_end_label_edit | command_tree_delete_item | command_tree_get_info | command_tree_set_info | command_tree_item_expanded | command_tree_item_expanding | command_tree_item_collapsed | command_tree_item_collapsing | command_tree_sel_changed | command_tree_sel_changing | command_tree_key_down | command_tree_item_activated | command_tree_item_right_click | command_tree_item_middle_click | command_tree_end_drag | command_tree_state_image_click | command_tree_item_gettooltip | command_tree_item_menu.
--type wxTree() :: #wxTree{}. %% Callback event: {@link wxTreeEvent}
+-record(wxMouseCaptureChanged, {type :: wxMouseCaptureChangedEventType()}). %% Callback event: {@link wxMouseCaptureChangedEvent}
+-type wxMouseCaptureChangedEventType() :: 'mouse_capture_changed'.
+-type wxMouseCaptureChanged() :: #wxMouseCaptureChanged{}. %% Callback event: {@link wxMouseCaptureChangedEvent}
+
+-record(wxMouseCaptureLost, {type :: wxMouseCaptureLostEventType()}). %% Callback event: {@link wxMouseCaptureLostEvent}
+-type wxMouseCaptureLostEventType() :: 'mouse_capture_lost'.
+-type wxMouseCaptureLost() :: #wxMouseCaptureLost{}. %% Callback event: {@link wxMouseCaptureLostEvent}
-type event() :: wxActivate() | wxAuiManager() | wxAuiNotebook() | wxCalendar() | wxChildFocus() | wxClipboardText() | wxClose() | wxColourPicker() | wxCommand() | wxContextMenu() | wxDate() | wxDisplayChanged() | wxErase() | wxFileDirPicker() | wxFocus() | wxFontPicker() | wxGrid() | wxHelp() | wxHtmlLink() | wxIconize() | wxIdle() | wxInitDialog() | wxJoystick() | wxKey() | wxList() | wxMaximize() | wxMenu() | wxMouse() | wxMouseCaptureChanged() | wxMouseCaptureLost() | wxMove() | wxNavigationKey() | wxNotebook() | wxPaint() | wxPaletteChanged() | wxQueryNewPalette() | wxSash() | wxScroll() | wxScrollWin() | wxSetCursor() | wxShow() | wxSize() | wxSpin() | wxSplitter() | wxStyledText() | wxSysColourChanged() | wxTaskBarIcon() | wxTree() | wxUpdateUI() | wxWindowCreate() | wxWindowDestroy().
-type wxEventType() :: wxActivateEventType() | wxAuiManagerEventType() | wxAuiNotebookEventType() | wxCalendarEventType() | wxChildFocusEventType() | wxClipboardTextEventType() | wxCloseEventType() | wxColourPickerEventType() | wxCommandEventType() | wxContextMenuEventType() | wxDateEventType() | wxDisplayChangedEventType() | wxEraseEventType() | wxFileDirPickerEventType() | wxFocusEventType() | wxFontPickerEventType() | wxGridEventType() | wxHelpEventType() | wxHtmlLinkEventType() | wxIconizeEventType() | wxIdleEventType() | wxInitDialogEventType() | wxJoystickEventType() | wxKeyEventType() | wxListEventType() | wxMaximizeEventType() | wxMenuEventType() | wxMouseCaptureChangedEventType() | wxMouseCaptureLostEventType() | wxMouseEventType() | wxMoveEventType() | wxNavigationKeyEventType() | wxNotebookEventType() | wxPaintEventType() | wxPaletteChangedEventType() | wxQueryNewPaletteEventType() | wxSashEventType() | wxScrollEventType() | wxScrollWinEventType() | wxSetCursorEventType() | wxShowEventType() | wxSizeEventType() | wxSpinEventType() | wxSplitterEventType() | wxStyledTextEventType() | wxSysColourChangedEventType() | wxTaskBarIconEventType() | wxTreeEventType() | wxUpdateUIEventType() | wxWindowCreateEventType() | wxWindowDestroyEventType().
diff --git a/lib/wx/src/gen/gl.erl b/lib/wx/src/gen/gl.erl
index bedd4e9cca..e10b99b10a 100644
--- a/lib/wx/src/gen/gl.erl
+++ b/lib/wx/src/gen/gl.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -321,7 +321,7 @@ send_bin(Tuple) when is_tuple(Tuple) ->
%% in the frame buffer.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClearIndex.xml">external</a> documentation.
--spec clearIndex(C) -> ok when C :: float().
+-spec clearIndex(C) -> 'ok' when C :: float().
clearIndex(C) ->
cast(5037, <<C:?GLfloat>>).
@@ -332,7 +332,7 @@ clearIndex(C) ->
%% range [0 1].
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClearColor.xml">external</a> documentation.
--spec clearColor(Red, Green, Blue, Alpha) -> ok when Red :: clamp(),Green :: clamp(),Blue :: clamp(),Alpha :: clamp().
+-spec clearColor(Red, Green, Blue, Alpha) -> 'ok' when Red :: clamp(),Green :: clamp(),Blue :: clamp(),Alpha :: clamp().
clearColor(Red,Green,Blue,Alpha) ->
cast(5038, <<Red:?GLclampf,Green:?GLclampf,Blue:?GLclampf,Alpha:?GLclampf>>).
@@ -362,7 +362,7 @@ clearColor(Red,Green,Blue,Alpha) ->
%% that buffer.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClear.xml">external</a> documentation.
--spec clear(Mask) -> ok when Mask :: integer().
+-spec clear(Mask) -> 'ok' when Mask :: integer().
clear(Mask) ->
cast(5039, <<Mask:?GLbitfield>>).
@@ -379,7 +379,7 @@ clear(Mask) ->
%% writing.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glIndexMask.xml">external</a> documentation.
--spec indexMask(Mask) -> ok when Mask :: integer().
+-spec indexMask(Mask) -> 'ok' when Mask :: integer().
indexMask(Mask) ->
cast(5040, <<Mask:?GLuint>>).
@@ -395,7 +395,7 @@ indexMask(Mask) ->
%% enabled or disabled for entire color components.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glColorMask.xml">external</a> documentation.
--spec colorMask(Red, Green, Blue, Alpha) -> ok when Red :: 0|1,Green :: 0|1,Blue :: 0|1,Alpha :: 0|1.
+-spec colorMask(Red, Green, Blue, Alpha) -> 'ok' when Red :: 0|1,Green :: 0|1,Blue :: 0|1,Alpha :: 0|1.
colorMask(Red,Green,Blue,Alpha) ->
cast(5041, <<Red:?GLboolean,Green:?GLboolean,Blue:?GLboolean,Alpha:?GLboolean>>).
@@ -438,7 +438,7 @@ colorMask(Red,Green,Blue,Alpha) ->
%% operations. ``gl:alphaFunc'' does not affect screen clear operations.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glAlphaFunc.xml">external</a> documentation.
--spec alphaFunc(Func, Ref) -> ok when Func :: enum(),Ref :: clamp().
+-spec alphaFunc(Func, Ref) -> 'ok' when Func :: enum(),Ref :: clamp().
alphaFunc(Func,Ref) ->
cast(5042, <<Func:?GLenum,Ref:?GLclampf>>).
@@ -513,7 +513,7 @@ alphaFunc(Func,Ref) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBlendFunc.xml">external</a> documentation.
--spec blendFunc(Sfactor, Dfactor) -> ok when Sfactor :: enum(),Dfactor :: enum().
+-spec blendFunc(Sfactor, Dfactor) -> 'ok' when Sfactor :: enum(),Dfactor :: enum().
blendFunc(Sfactor,Dfactor) ->
cast(5043, <<Sfactor:?GLenum,Dfactor:?GLenum>>).
@@ -543,7 +543,7 @@ blendFunc(Sfactor,Dfactor) ->
%% the source and destination colors.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLogicOp.xml">external</a> documentation.
--spec logicOp(Opcode) -> ok when Opcode :: enum().
+-spec logicOp(Opcode) -> 'ok' when Opcode :: enum().
logicOp(Opcode) ->
cast(5044, <<Opcode:?GLenum>>).
@@ -559,7 +559,7 @@ logicOp(Opcode) ->
%% front-facing and back-facing. See {@link gl:frontFace/1} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCullFace.xml">external</a> documentation.
--spec cullFace(Mode) -> ok when Mode :: enum().
+-spec cullFace(Mode) -> 'ok' when Mode :: enum().
cullFace(Mode) ->
cast(5045, <<Mode:?GLenum>>).
@@ -582,7 +582,7 @@ cullFace(Mode) ->
%% default, counterclockwise polygons are taken to be front-facing.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFrontFace.xml">external</a> documentation.
--spec frontFace(Mode) -> ok when Mode :: enum().
+-spec frontFace(Mode) -> 'ok' when Mode :: enum().
frontFace(Mode) ->
cast(5046, <<Mode:?GLenum>>).
@@ -594,7 +594,7 @@ frontFace(Mode) ->
%% built-in variable gl_PointSize will be used.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPointSize.xml">external</a> documentation.
--spec pointSize(Size) -> ok when Size :: float().
+-spec pointSize(Size) -> 'ok' when Size :: float().
pointSize(Size) ->
cast(5047, <<Size:?GLfloat>>).
@@ -626,7 +626,7 @@ pointSize(Size) ->
%% , `?GL_SMOOTH_LINE_WIDTH_RANGE', and `?GL_SMOOTH_LINE_WIDTH_GRANULARITY'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLineWidth.xml">external</a> documentation.
--spec lineWidth(Width) -> ok when Width :: float().
+-spec lineWidth(Width) -> 'ok' when Width :: float().
lineWidth(Width) ->
cast(5048, <<Width:?GLfloat>>).
@@ -658,7 +658,7 @@ lineWidth(Width) ->
%% stippling is disabled.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLineStipple.xml">external</a> documentation.
--spec lineStipple(Factor, Pattern) -> ok when Factor :: integer(),Pattern :: integer().
+-spec lineStipple(Factor, Pattern) -> 'ok' when Factor :: integer(),Pattern :: integer().
lineStipple(Factor,Pattern) ->
cast(5049, <<Factor:?GLint,Pattern:?GLushort>>).
@@ -686,7 +686,7 @@ lineStipple(Factor,Pattern) ->
%% control the rasterization of the polygon.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPolygonMode.xml">external</a> documentation.
--spec polygonMode(Face, Mode) -> ok when Face :: enum(),Mode :: enum().
+-spec polygonMode(Face, Mode) -> 'ok' when Face :: enum(),Mode :: enum().
polygonMode(Face,Mode) ->
cast(5050, <<Face:?GLenum,Mode:?GLenum>>).
@@ -704,7 +704,7 @@ polygonMode(Face,Mode) ->
%% to surfaces, and for rendering solids with highlighted edges.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPolygonOffset.xml">external</a> documentation.
--spec polygonOffset(Factor, Units) -> ok when Factor :: float(),Units :: float().
+-spec polygonOffset(Factor, Units) -> 'ok' when Factor :: float(),Units :: float().
polygonOffset(Factor,Units) ->
cast(5051, <<Factor:?GLfloat,Units:?GLfloat>>).
@@ -735,7 +735,7 @@ polygonOffset(Factor,Units) ->
%% the stipple pattern consists of all 1's.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPolygonStipple.xml">external</a> documentation.
--spec polygonStipple(Mask) -> ok when Mask :: binary().
+-spec polygonStipple(Mask) -> 'ok' when Mask :: binary().
polygonStipple(Mask) ->
send_bin(Mask),
cast(5052, <<>>).
@@ -774,12 +774,12 @@ getPolygonStipple() ->
%% is set to `?GL_POINT' or `?GL_LINE'. See {@link gl:polygonMode/2} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEdgeFlag.xml">external</a> documentation.
--spec edgeFlag(Flag) -> ok when Flag :: 0|1.
+-spec edgeFlag(Flag) -> 'ok' when Flag :: 0|1.
edgeFlag(Flag) ->
cast(5054, <<Flag:?GLboolean>>).
%% @equiv edgeFlag(Flag)
--spec edgeFlagv(Flag) -> ok when Flag :: {Flag :: 0|1}.
+-spec edgeFlagv(Flag) -> 'ok' when Flag :: {Flag :: 0|1}.
edgeFlagv({Flag}) -> edgeFlag(Flag).
%% @doc Define the scissor box
@@ -799,7 +799,7 @@ edgeFlagv({Flag}) -> edgeFlag(Flag).
%% window.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glScissor.xml">external</a> documentation.
--spec scissor(X, Y, Width, Height) -> ok when X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
+-spec scissor(X, Y, Width, Height) -> 'ok' when X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
scissor(X,Y,Width,Height) ->
cast(5055, <<X:?GLint,Y:?GLint,Width:?GLsizei,Height:?GLsizei>>).
@@ -827,7 +827,7 @@ scissor(X,Y,Width,Height) ->
%% disabled.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClipPlane.xml">external</a> documentation.
--spec clipPlane(Plane, Equation) -> ok when Plane :: enum(),Equation :: {float(),float(),float(),float()}.
+-spec clipPlane(Plane, Equation) -> 'ok' when Plane :: enum(),Equation :: {float(),float(),float(),float()}.
clipPlane(Plane,{E1,E2,E3,E4}) ->
cast(5056, <<Plane:?GLenum,0:32,E1:?GLdouble,E2:?GLdouble,E3:?GLdouble,E4:?GLdouble>>).
@@ -884,7 +884,7 @@ getClipPlane(Plane) ->
%% buffers. The context is selected at GL initialization.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawBuffer.xml">external</a> documentation.
--spec drawBuffer(Mode) -> ok when Mode :: enum().
+-spec drawBuffer(Mode) -> 'ok' when Mode :: enum().
drawBuffer(Mode) ->
cast(5058, <<Mode:?GLenum>>).
@@ -909,7 +909,7 @@ drawBuffer(Mode) ->
%% in double-buffered configurations.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glReadBuffer.xml">external</a> documentation.
--spec readBuffer(Mode) -> ok when Mode :: enum().
+-spec readBuffer(Mode) -> 'ok' when Mode :: enum().
readBuffer(Mode) ->
cast(5059, <<Mode:?GLenum>>).
@@ -1019,13 +1019,13 @@ readBuffer(Mode) ->
%% and clamped to the implementation-dependent point size range.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEnable.xml">external</a> documentation.
--spec enable(Cap) -> ok when Cap :: enum().
+-spec enable(Cap) -> 'ok' when Cap :: enum().
enable(Cap) ->
cast(5060, <<Cap:?GLenum>>).
%% @doc
%% See {@link enable/1}
--spec disable(Cap) -> ok when Cap :: enum().
+-spec disable(Cap) -> 'ok' when Cap :: enum().
disable(Cap) ->
cast(5061, <<Cap:?GLenum>>).
@@ -1115,13 +1115,13 @@ isEnabled(Cap) ->
%% is called. See {@link gl:vertexPointer/4} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEnableClientState.xml">external</a> documentation.
--spec enableClientState(Cap) -> ok when Cap :: enum().
+-spec enableClientState(Cap) -> 'ok' when Cap :: enum().
enableClientState(Cap) ->
cast(5063, <<Cap:?GLenum>>).
%% @doc
%% See {@link enableClientState/1}
--spec disableClientState(Cap) -> ok when Cap :: enum().
+-spec disableClientState(Cap) -> 'ok' when Cap :: enum().
disableClientState(Cap) ->
cast(5064, <<Cap:?GLenum>>).
@@ -2089,13 +2089,13 @@ getIntegerv(Pname) ->
%% Initially, the attribute stack is empty.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPushAttrib.xml">external</a> documentation.
--spec pushAttrib(Mask) -> ok when Mask :: integer().
+-spec pushAttrib(Mask) -> 'ok' when Mask :: integer().
pushAttrib(Mask) ->
cast(5069, <<Mask:?GLbitfield>>).
%% @doc
%% See {@link pushAttrib/1}
--spec popAttrib() -> ok.
+-spec popAttrib() -> 'ok'.
popAttrib() ->
cast(5070, <<>>).
@@ -2123,13 +2123,13 @@ popAttrib() ->
%% Initially, the client attribute stack is empty.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPushClientAttrib.xml">external</a> documentation.
--spec pushClientAttrib(Mask) -> ok when Mask :: integer().
+-spec pushClientAttrib(Mask) -> 'ok' when Mask :: integer().
pushClientAttrib(Mask) ->
cast(5071, <<Mask:?GLbitfield>>).
%% @doc
%% See {@link pushClientAttrib/1}
--spec popClientAttrib() -> ok.
+-spec popClientAttrib() -> 'ok'.
popClientAttrib() ->
cast(5072, <<>>).
@@ -2274,7 +2274,7 @@ getString(Name) ->
%% state, and all changes to the frame buffer contents.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFinish.xml">external</a> documentation.
--spec finish() -> ok.
+-spec finish() -> 'ok'.
finish() ->
cast(5076, <<>>).
@@ -2292,7 +2292,7 @@ finish() ->
%% for user input that depends on the generated image.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFlush.xml">external</a> documentation.
--spec flush() -> ok.
+-spec flush() -> 'ok'.
flush() ->
cast(5077, <<>>).
@@ -2334,7 +2334,7 @@ flush() ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glHint.xml">external</a> documentation.
--spec hint(Target, Mode) -> ok when Target :: enum(),Mode :: enum().
+-spec hint(Target, Mode) -> 'ok' when Target :: enum(),Mode :: enum().
hint(Target,Mode) ->
cast(5078, <<Target:?GLenum,Mode:?GLenum>>).
@@ -2344,7 +2344,7 @@ hint(Target,Mode) ->
%% buffer. Values specified by ``gl:clearDepth'' are clamped to the range [0 1].
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClearDepth.xml">external</a> documentation.
--spec clearDepth(Depth) -> ok when Depth :: clamp().
+-spec clearDepth(Depth) -> 'ok' when Depth :: clamp().
clearDepth(Depth) ->
cast(5079, <<Depth:?GLclampd>>).
@@ -2385,7 +2385,7 @@ clearDepth(Depth) ->
%% always passes.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDepthFunc.xml">external</a> documentation.
--spec depthFunc(Func) -> ok when Func :: enum().
+-spec depthFunc(Func) -> 'ok' when Func :: enum().
depthFunc(Func) ->
cast(5080, <<Func:?GLenum>>).
@@ -2396,7 +2396,7 @@ depthFunc(Func) ->
%% depth buffer writing is enabled.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDepthMask.xml">external</a> documentation.
--spec depthMask(Flag) -> ok when Flag :: 0|1.
+-spec depthMask(Flag) -> 'ok' when Flag :: 0|1.
depthMask(Flag) ->
cast(5081, <<Flag:?GLboolean>>).
@@ -2413,7 +2413,7 @@ depthMask(Flag) ->
%% the depth buffer range is fully utilized.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDepthRange.xml">external</a> documentation.
--spec depthRange(Near_val, Far_val) -> ok when Near_val :: clamp(),Far_val :: clamp().
+-spec depthRange(Near_val, Far_val) -> 'ok' when Near_val :: clamp(),Far_val :: clamp().
depthRange(Near_val,Far_val) ->
cast(5082, <<Near_val:?GLclampd,Far_val:?GLclampd>>).
@@ -2425,7 +2425,7 @@ depthRange(Near_val,Far_val) ->
%% Values specified by ``gl:clearAccum'' are clamped to the range [-1 1].
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClearAccum.xml">external</a> documentation.
--spec clearAccum(Red, Green, Blue, Alpha) -> ok when Red :: float(),Green :: float(),Blue :: float(),Alpha :: float().
+-spec clearAccum(Red, Green, Blue, Alpha) -> 'ok' when Red :: float(),Green :: float(),Blue :: float(),Alpha :: float().
clearAccum(Red,Green,Blue,Alpha) ->
cast(5083, <<Red:?GLfloat,Green:?GLfloat,Blue:?GLfloat,Alpha:?GLfloat>>).
@@ -2484,7 +2484,7 @@ clearAccum(Red,Green,Blue,Alpha) ->
%% to set it to, then call {@link gl:clear/1} with the accumulation buffer enabled.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glAccum.xml">external</a> documentation.
--spec accum(Op, Value) -> ok when Op :: enum(),Value :: float().
+-spec accum(Op, Value) -> 'ok' when Op :: enum(),Value :: float().
accum(Op,Value) ->
cast(5084, <<Op:?GLenum,Value:?GLfloat>>).
@@ -2507,7 +2507,7 @@ accum(Op,Value) ->
%% with argument `?GL_MATRIX_MODE'. The initial value is `?GL_MODELVIEW'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMatrixMode.xml">external</a> documentation.
--spec matrixMode(Mode) -> ok when Mode :: enum().
+-spec matrixMode(Mode) -> 'ok' when Mode :: enum().
matrixMode(Mode) ->
cast(5085, <<Mode:?GLenum>>).
@@ -2532,7 +2532,7 @@ matrixMode(Mode) ->
%% matrix stack.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glOrtho.xml">external</a> documentation.
--spec ortho(Left, Right, Bottom, Top, Near_val, Far_val) -> ok when Left :: float(),Right :: float(),Bottom :: float(),Top :: float(),Near_val :: float(),Far_val :: float().
+-spec ortho(Left, Right, Bottom, Top, Near_val, Far_val) -> 'ok' when Left :: float(),Right :: float(),Bottom :: float(),Top :: float(),Near_val :: float(),Far_val :: float().
ortho(Left,Right,Bottom,Top,Near_val,Far_val) ->
cast(5086, <<Left:?GLdouble,Right:?GLdouble,Bottom:?GLdouble,Top:?GLdouble,Near_val:?GLdouble,Far_val:?GLdouble>>).
@@ -2562,7 +2562,7 @@ ortho(Left,Right,Bottom,Top,Near_val,Far_val) ->
%% matrix stack.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFrustum.xml">external</a> documentation.
--spec frustum(Left, Right, Bottom, Top, Near_val, Far_val) -> ok when Left :: float(),Right :: float(),Bottom :: float(),Top :: float(),Near_val :: float(),Far_val :: float().
+-spec frustum(Left, Right, Bottom, Top, Near_val, Far_val) -> 'ok' when Left :: float(),Right :: float(),Bottom :: float(),Top :: float(),Near_val :: float(),Far_val :: float().
frustum(Left,Right,Bottom,Top,Near_val,Far_val) ->
cast(5087, <<Left:?GLdouble,Right:?GLdouble,Bottom:?GLdouble,Top:?GLdouble,Near_val:?GLdouble,Far_val:?GLdouble>>).
@@ -2580,7 +2580,7 @@ frustum(Left,Right,Bottom,Top,Near_val,Far_val) ->
%% To query this range, call {@link gl:getBooleanv/1} with argument `?GL_MAX_VIEWPORT_DIMS'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glViewport.xml">external</a> documentation.
--spec viewport(X, Y, Width, Height) -> ok when X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
+-spec viewport(X, Y, Width, Height) -> 'ok' when X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
viewport(X,Y,Width,Height) ->
cast(5088, <<X:?GLint,Y:?GLint,Width:?GLsizei,Height:?GLsizei>>).
@@ -2605,13 +2605,13 @@ viewport(X,Y,Width,Height) ->
%% GL state.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPushMatrix.xml">external</a> documentation.
--spec pushMatrix() -> ok.
+-spec pushMatrix() -> 'ok'.
pushMatrix() ->
cast(5089, <<>>).
%% @doc
%% See {@link pushMatrix/0}
--spec popMatrix() -> ok.
+-spec popMatrix() -> 'ok'.
popMatrix() ->
cast(5090, <<>>).
@@ -2625,7 +2625,7 @@ popMatrix() ->
%% but in some cases it is more efficient.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLoadIdentity.xml">external</a> documentation.
--spec loadIdentity() -> ok.
+-spec loadIdentity() -> 'ok'.
loadIdentity() ->
cast(5091, <<>>).
@@ -2645,7 +2645,7 @@ loadIdentity() ->
%% Projection and texture transformations are similarly defined.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLoadMatrix.xml">external</a> documentation.
--spec loadMatrixd(M) -> ok when M :: matrix().
+-spec loadMatrixd(M) -> 'ok' when M :: matrix().
loadMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5092, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,M13:?GLdouble,M14:?GLdouble,M15:?GLdouble,M16:?GLdouble>>);
loadMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -2653,7 +2653,7 @@ loadMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% @doc
%% See {@link loadMatrixd/1}
--spec loadMatrixf(M) -> ok when M :: matrix().
+-spec loadMatrixf(M) -> 'ok' when M :: matrix().
loadMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5093, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,M13:?GLfloat,M14:?GLfloat,M15:?GLfloat,M16:?GLfloat>>);
loadMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -2668,7 +2668,7 @@ loadMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% It is either the projection matrix, modelview matrix, or the texture matrix.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMultMatrix.xml">external</a> documentation.
--spec multMatrixd(M) -> ok when M :: matrix().
+-spec multMatrixd(M) -> 'ok' when M :: matrix().
multMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5094, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,M13:?GLdouble,M14:?GLdouble,M15:?GLdouble,M16:?GLdouble>>);
multMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -2676,7 +2676,7 @@ multMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% @doc
%% See {@link multMatrixd/1}
--spec multMatrixf(M) -> ok when M :: matrix().
+-spec multMatrixf(M) -> 'ok' when M :: matrix().
multMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5095, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,M13:?GLfloat,M14:?GLfloat,M15:?GLfloat,M16:?GLfloat>>);
multMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -2699,13 +2699,13 @@ multMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% to save and restore the unrotated coordinate system.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glRotate.xml">external</a> documentation.
--spec rotated(Angle, X, Y, Z) -> ok when Angle :: float(),X :: float(),Y :: float(),Z :: float().
+-spec rotated(Angle, X, Y, Z) -> 'ok' when Angle :: float(),X :: float(),Y :: float(),Z :: float().
rotated(Angle,X,Y,Z) ->
cast(5096, <<Angle:?GLdouble,X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>).
%% @doc
%% See {@link rotated/4}
--spec rotatef(Angle, X, Y, Z) -> ok when Angle :: float(),X :: float(),Y :: float(),Z :: float().
+-spec rotatef(Angle, X, Y, Z) -> 'ok' when Angle :: float(),X :: float(),Y :: float(),Z :: float().
rotatef(Angle,X,Y,Z) ->
cast(5097, <<Angle:?GLfloat,X:?GLfloat,Y:?GLfloat,Z:?GLfloat>>).
@@ -2728,13 +2728,13 @@ rotatef(Angle,X,Y,Z) ->
%% coordinate system.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glScale.xml">external</a> documentation.
--spec scaled(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec scaled(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
scaled(X,Y,Z) ->
cast(5098, <<X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>).
%% @doc
%% See {@link scaled/3}
--spec scalef(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec scalef(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
scalef(X,Y,Z) ->
cast(5099, <<X:?GLfloat,Y:?GLfloat,Z:?GLfloat>>).
@@ -2753,13 +2753,13 @@ scalef(X,Y,Z) ->
%% coordinate system.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTranslate.xml">external</a> documentation.
--spec translated(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec translated(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
translated(X,Y,Z) ->
cast(5100, <<X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>).
%% @doc
%% See {@link translated/3}
--spec translatef(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec translatef(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
translatef(X,Y,Z) ->
cast(5101, <<X:?GLfloat,Y:?GLfloat,Z:?GLfloat>>).
@@ -2788,7 +2788,7 @@ isList(List) ->
%% display list are ignored. If `Range' is 0, nothing happens.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteLists.xml">external</a> documentation.
--spec deleteLists(List, Range) -> ok when List :: integer(),Range :: integer().
+-spec deleteLists(List, Range) -> 'ok' when List :: integer(),Range :: integer().
deleteLists(List,Range) ->
cast(5103, <<List:?GLuint,Range:?GLsizei>>).
@@ -2851,14 +2851,14 @@ genLists(Range) ->
%% when {@link gl:endList/0} is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glNewList.xml">external</a> documentation.
--spec newList(List, Mode) -> ok when List :: integer(),Mode :: enum().
+-spec newList(List, Mode) -> 'ok' when List :: integer(),Mode :: enum().
newList(List,Mode) ->
cast(5105, <<List:?GLuint,Mode:?GLenum>>).
%% @doc glBeginList
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBeginList.xml">external</a> documentation.
--spec endList() -> ok.
+-spec endList() -> 'ok'.
endList() ->
cast(5106, <<>>).
@@ -2880,7 +2880,7 @@ endList() ->
%% , and {@link gl:pushMatrix/0} to preserve GL state across ``gl:callList'' calls.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCallList.xml">external</a> documentation.
--spec callList(List) -> ok when List :: integer().
+-spec callList(List) -> 'ok' when List :: integer().
callList(List) ->
cast(5107, <<List:?GLuint>>).
@@ -2947,7 +2947,7 @@ callList(List) ->
%% to preserve GL state across ``gl:callLists'' calls.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCallLists.xml">external</a> documentation.
--spec callLists(Lists) -> ok when Lists :: [integer()].
+-spec callLists(Lists) -> 'ok' when Lists :: [integer()].
callLists(Lists) ->
cast(5108, <<(length(Lists)):?GLuint,
(<< <<C:?GLuint>> || C <- Lists>>)/binary,0:(((1+length(Lists)) rem 2)*32)>>).
@@ -2961,7 +2961,7 @@ callLists(Lists) ->
%% the others are ignored.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glListBase.xml">external</a> documentation.
--spec listBase(Base) -> ok when Base :: integer().
+-spec listBase(Base) -> 'ok' when Base :: integer().
listBase(Base) ->
cast(5109, <<Base:?GLuint>>).
@@ -3032,13 +3032,13 @@ listBase(Base) ->
%% (3), `?GL_QUADS' (4), and `?GL_QUAD_STRIP' (2).
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBegin.xml">external</a> documentation.
--spec 'begin'(Mode) -> ok when Mode :: enum().
+-spec 'begin'(Mode) -> 'ok' when Mode :: enum().
'begin'(Mode) ->
cast(5110, <<Mode:?GLenum>>).
%% @doc
%% See {@link 'begin'/1}
--spec 'end'() -> ok.
+-spec 'end'() -> 'ok'.
'end'() ->
cast(5111, <<>>).
@@ -3052,122 +3052,122 @@ listBase(Base) ->
%% y, and z are specified, w defaults to 1.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertex.xml">external</a> documentation.
--spec vertex2d(X, Y) -> ok when X :: float(),Y :: float().
+-spec vertex2d(X, Y) -> 'ok' when X :: float(),Y :: float().
vertex2d(X,Y) ->
cast(5112, <<X:?GLdouble,Y:?GLdouble>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex2f(X, Y) -> ok when X :: float(),Y :: float().
+-spec vertex2f(X, Y) -> 'ok' when X :: float(),Y :: float().
vertex2f(X,Y) ->
cast(5113, <<X:?GLfloat,Y:?GLfloat>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex2i(X, Y) -> ok when X :: integer(),Y :: integer().
+-spec vertex2i(X, Y) -> 'ok' when X :: integer(),Y :: integer().
vertex2i(X,Y) ->
cast(5114, <<X:?GLint,Y:?GLint>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex2s(X, Y) -> ok when X :: integer(),Y :: integer().
+-spec vertex2s(X, Y) -> 'ok' when X :: integer(),Y :: integer().
vertex2s(X,Y) ->
cast(5115, <<X:?GLshort,Y:?GLshort>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex3d(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec vertex3d(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
vertex3d(X,Y,Z) ->
cast(5116, <<X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex3f(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec vertex3f(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
vertex3f(X,Y,Z) ->
cast(5117, <<X:?GLfloat,Y:?GLfloat,Z:?GLfloat>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex3i(X, Y, Z) -> ok when X :: integer(),Y :: integer(),Z :: integer().
+-spec vertex3i(X, Y, Z) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer().
vertex3i(X,Y,Z) ->
cast(5118, <<X:?GLint,Y:?GLint,Z:?GLint>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex3s(X, Y, Z) -> ok when X :: integer(),Y :: integer(),Z :: integer().
+-spec vertex3s(X, Y, Z) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer().
vertex3s(X,Y,Z) ->
cast(5119, <<X:?GLshort,Y:?GLshort,Z:?GLshort>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex4d(X, Y, Z, W) -> ok when X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec vertex4d(X, Y, Z, W) -> 'ok' when X :: float(),Y :: float(),Z :: float(),W :: float().
vertex4d(X,Y,Z,W) ->
cast(5120, <<X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex4f(X, Y, Z, W) -> ok when X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec vertex4f(X, Y, Z, W) -> 'ok' when X :: float(),Y :: float(),Z :: float(),W :: float().
vertex4f(X,Y,Z,W) ->
cast(5121, <<X:?GLfloat,Y:?GLfloat,Z:?GLfloat,W:?GLfloat>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex4i(X, Y, Z, W) -> ok when X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
+-spec vertex4i(X, Y, Z, W) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
vertex4i(X,Y,Z,W) ->
cast(5122, <<X:?GLint,Y:?GLint,Z:?GLint,W:?GLint>>).
%% @doc
%% See {@link vertex2d/2}
--spec vertex4s(X, Y, Z, W) -> ok when X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
+-spec vertex4s(X, Y, Z, W) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
vertex4s(X,Y,Z,W) ->
cast(5123, <<X:?GLshort,Y:?GLshort,Z:?GLshort,W:?GLshort>>).
%% @equiv vertex2d(X,Y)
--spec vertex2dv(V) -> ok when V :: {X :: float(),Y :: float()}.
+-spec vertex2dv(V) -> 'ok' when V :: {X :: float(),Y :: float()}.
vertex2dv({X,Y}) -> vertex2d(X,Y).
%% @equiv vertex2f(X,Y)
--spec vertex2fv(V) -> ok when V :: {X :: float(),Y :: float()}.
+-spec vertex2fv(V) -> 'ok' when V :: {X :: float(),Y :: float()}.
vertex2fv({X,Y}) -> vertex2f(X,Y).
%% @equiv vertex2i(X,Y)
--spec vertex2iv(V) -> ok when V :: {X :: integer(),Y :: integer()}.
+-spec vertex2iv(V) -> 'ok' when V :: {X :: integer(),Y :: integer()}.
vertex2iv({X,Y}) -> vertex2i(X,Y).
%% @equiv vertex2s(X,Y)
--spec vertex2sv(V) -> ok when V :: {X :: integer(),Y :: integer()}.
+-spec vertex2sv(V) -> 'ok' when V :: {X :: integer(),Y :: integer()}.
vertex2sv({X,Y}) -> vertex2s(X,Y).
%% @equiv vertex3d(X,Y,Z)
--spec vertex3dv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float()}.
+-spec vertex3dv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}.
vertex3dv({X,Y,Z}) -> vertex3d(X,Y,Z).
%% @equiv vertex3f(X,Y,Z)
--spec vertex3fv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float()}.
+-spec vertex3fv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}.
vertex3fv({X,Y,Z}) -> vertex3f(X,Y,Z).
%% @equiv vertex3i(X,Y,Z)
--spec vertex3iv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
+-spec vertex3iv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
vertex3iv({X,Y,Z}) -> vertex3i(X,Y,Z).
%% @equiv vertex3s(X,Y,Z)
--spec vertex3sv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
+-spec vertex3sv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
vertex3sv({X,Y,Z}) -> vertex3s(X,Y,Z).
%% @equiv vertex4d(X,Y,Z,W)
--spec vertex4dv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
+-spec vertex4dv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
vertex4dv({X,Y,Z,W}) -> vertex4d(X,Y,Z,W).
%% @equiv vertex4f(X,Y,Z,W)
--spec vertex4fv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
+-spec vertex4fv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
vertex4fv({X,Y,Z,W}) -> vertex4f(X,Y,Z,W).
%% @equiv vertex4i(X,Y,Z,W)
--spec vertex4iv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
+-spec vertex4iv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
vertex4iv({X,Y,Z,W}) -> vertex4i(X,Y,Z,W).
%% @equiv vertex4s(X,Y,Z,W)
--spec vertex4sv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
+-spec vertex4sv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
vertex4sv({X,Y,Z,W}) -> vertex4s(X,Y,Z,W).
%% @doc Set the current normal vector
@@ -3187,52 +3187,52 @@ vertex4sv({X,Y,Z,W}) -> vertex4s(X,Y,Z,W).
%% Normalization is initially disabled.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glNormal.xml">external</a> documentation.
--spec normal3b(Nx, Ny, Nz) -> ok when Nx :: integer(),Ny :: integer(),Nz :: integer().
+-spec normal3b(Nx, Ny, Nz) -> 'ok' when Nx :: integer(),Ny :: integer(),Nz :: integer().
normal3b(Nx,Ny,Nz) ->
cast(5124, <<Nx:?GLbyte,Ny:?GLbyte,Nz:?GLbyte>>).
%% @doc
%% See {@link normal3b/3}
--spec normal3d(Nx, Ny, Nz) -> ok when Nx :: float(),Ny :: float(),Nz :: float().
+-spec normal3d(Nx, Ny, Nz) -> 'ok' when Nx :: float(),Ny :: float(),Nz :: float().
normal3d(Nx,Ny,Nz) ->
cast(5125, <<Nx:?GLdouble,Ny:?GLdouble,Nz:?GLdouble>>).
%% @doc
%% See {@link normal3b/3}
--spec normal3f(Nx, Ny, Nz) -> ok when Nx :: float(),Ny :: float(),Nz :: float().
+-spec normal3f(Nx, Ny, Nz) -> 'ok' when Nx :: float(),Ny :: float(),Nz :: float().
normal3f(Nx,Ny,Nz) ->
cast(5126, <<Nx:?GLfloat,Ny:?GLfloat,Nz:?GLfloat>>).
%% @doc
%% See {@link normal3b/3}
--spec normal3i(Nx, Ny, Nz) -> ok when Nx :: integer(),Ny :: integer(),Nz :: integer().
+-spec normal3i(Nx, Ny, Nz) -> 'ok' when Nx :: integer(),Ny :: integer(),Nz :: integer().
normal3i(Nx,Ny,Nz) ->
cast(5127, <<Nx:?GLint,Ny:?GLint,Nz:?GLint>>).
%% @doc
%% See {@link normal3b/3}
--spec normal3s(Nx, Ny, Nz) -> ok when Nx :: integer(),Ny :: integer(),Nz :: integer().
+-spec normal3s(Nx, Ny, Nz) -> 'ok' when Nx :: integer(),Ny :: integer(),Nz :: integer().
normal3s(Nx,Ny,Nz) ->
cast(5128, <<Nx:?GLshort,Ny:?GLshort,Nz:?GLshort>>).
%% @equiv normal3b(Nx,Ny,Nz)
--spec normal3bv(V) -> ok when V :: {Nx :: integer(),Ny :: integer(),Nz :: integer()}.
+-spec normal3bv(V) -> 'ok' when V :: {Nx :: integer(),Ny :: integer(),Nz :: integer()}.
normal3bv({Nx,Ny,Nz}) -> normal3b(Nx,Ny,Nz).
%% @equiv normal3d(Nx,Ny,Nz)
--spec normal3dv(V) -> ok when V :: {Nx :: float(),Ny :: float(),Nz :: float()}.
+-spec normal3dv(V) -> 'ok' when V :: {Nx :: float(),Ny :: float(),Nz :: float()}.
normal3dv({Nx,Ny,Nz}) -> normal3d(Nx,Ny,Nz).
%% @equiv normal3f(Nx,Ny,Nz)
--spec normal3fv(V) -> ok when V :: {Nx :: float(),Ny :: float(),Nz :: float()}.
+-spec normal3fv(V) -> 'ok' when V :: {Nx :: float(),Ny :: float(),Nz :: float()}.
normal3fv({Nx,Ny,Nz}) -> normal3f(Nx,Ny,Nz).
%% @equiv normal3i(Nx,Ny,Nz)
--spec normal3iv(V) -> ok when V :: {Nx :: integer(),Ny :: integer(),Nz :: integer()}.
+-spec normal3iv(V) -> 'ok' when V :: {Nx :: integer(),Ny :: integer(),Nz :: integer()}.
normal3iv({Nx,Ny,Nz}) -> normal3i(Nx,Ny,Nz).
%% @equiv normal3s(Nx,Ny,Nz)
--spec normal3sv(V) -> ok when V :: {Nx :: integer(),Ny :: integer(),Nz :: integer()}.
+-spec normal3sv(V) -> 'ok' when V :: {Nx :: integer(),Ny :: integer(),Nz :: integer()}.
normal3sv({Nx,Ny,Nz}) -> normal3s(Nx,Ny,Nz).
%% @doc Set the current color index
@@ -3249,52 +3249,52 @@ normal3sv({Nx,Ny,Nz}) -> normal3s(Nx,Ny,Nz).
%% value that do not correspond to bits in the frame buffer are masked out.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glIndex.xml">external</a> documentation.
--spec indexd(C) -> ok when C :: float().
+-spec indexd(C) -> 'ok' when C :: float().
indexd(C) ->
cast(5129, <<C:?GLdouble>>).
%% @doc
%% See {@link indexd/1}
--spec indexf(C) -> ok when C :: float().
+-spec indexf(C) -> 'ok' when C :: float().
indexf(C) ->
cast(5130, <<C:?GLfloat>>).
%% @doc
%% See {@link indexd/1}
--spec indexi(C) -> ok when C :: integer().
+-spec indexi(C) -> 'ok' when C :: integer().
indexi(C) ->
cast(5131, <<C:?GLint>>).
%% @doc
%% See {@link indexd/1}
--spec indexs(C) -> ok when C :: integer().
+-spec indexs(C) -> 'ok' when C :: integer().
indexs(C) ->
cast(5132, <<C:?GLshort>>).
%% @doc
%% See {@link indexd/1}
--spec indexub(C) -> ok when C :: integer().
+-spec indexub(C) -> 'ok' when C :: integer().
indexub(C) ->
cast(5133, <<C:?GLubyte>>).
%% @equiv indexd(C)
--spec indexdv(C) -> ok when C :: {C :: float()}.
+-spec indexdv(C) -> 'ok' when C :: {C :: float()}.
indexdv({C}) -> indexd(C).
%% @equiv indexf(C)
--spec indexfv(C) -> ok when C :: {C :: float()}.
+-spec indexfv(C) -> 'ok' when C :: {C :: float()}.
indexfv({C}) -> indexf(C).
%% @equiv indexi(C)
--spec indexiv(C) -> ok when C :: {C :: integer()}.
+-spec indexiv(C) -> 'ok' when C :: {C :: integer()}.
indexiv({C}) -> indexi(C).
%% @equiv indexs(C)
--spec indexsv(C) -> ok when C :: {C :: integer()}.
+-spec indexsv(C) -> 'ok' when C :: {C :: integer()}.
indexsv({C}) -> indexs(C).
%% @equiv indexub(C)
--spec indexubv(C) -> ok when C :: {C :: integer()}.
+-spec indexubv(C) -> 'ok' when C :: {C :: integer()}.
indexubv({C}) -> indexub(C).
%% @doc Set the current color
@@ -3323,162 +3323,162 @@ indexubv({C}) -> indexub(C).
%% are interpolated or written into a color buffer.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glColor.xml">external</a> documentation.
--spec color3b(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec color3b(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
color3b(Red,Green,Blue) ->
cast(5134, <<Red:?GLbyte,Green:?GLbyte,Blue:?GLbyte>>).
%% @doc
%% See {@link color3b/3}
--spec color3d(Red, Green, Blue) -> ok when Red :: float(),Green :: float(),Blue :: float().
+-spec color3d(Red, Green, Blue) -> 'ok' when Red :: float(),Green :: float(),Blue :: float().
color3d(Red,Green,Blue) ->
cast(5135, <<Red:?GLdouble,Green:?GLdouble,Blue:?GLdouble>>).
%% @doc
%% See {@link color3b/3}
--spec color3f(Red, Green, Blue) -> ok when Red :: float(),Green :: float(),Blue :: float().
+-spec color3f(Red, Green, Blue) -> 'ok' when Red :: float(),Green :: float(),Blue :: float().
color3f(Red,Green,Blue) ->
cast(5136, <<Red:?GLfloat,Green:?GLfloat,Blue:?GLfloat>>).
%% @doc
%% See {@link color3b/3}
--spec color3i(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec color3i(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
color3i(Red,Green,Blue) ->
cast(5137, <<Red:?GLint,Green:?GLint,Blue:?GLint>>).
%% @doc
%% See {@link color3b/3}
--spec color3s(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec color3s(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
color3s(Red,Green,Blue) ->
cast(5138, <<Red:?GLshort,Green:?GLshort,Blue:?GLshort>>).
%% @doc
%% See {@link color3b/3}
--spec color3ub(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec color3ub(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
color3ub(Red,Green,Blue) ->
cast(5139, <<Red:?GLubyte,Green:?GLubyte,Blue:?GLubyte>>).
%% @doc
%% See {@link color3b/3}
--spec color3ui(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec color3ui(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
color3ui(Red,Green,Blue) ->
cast(5140, <<Red:?GLuint,Green:?GLuint,Blue:?GLuint>>).
%% @doc
%% See {@link color3b/3}
--spec color3us(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec color3us(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
color3us(Red,Green,Blue) ->
cast(5141, <<Red:?GLushort,Green:?GLushort,Blue:?GLushort>>).
%% @doc
%% See {@link color3b/3}
--spec color4b(Red, Green, Blue, Alpha) -> ok when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
+-spec color4b(Red, Green, Blue, Alpha) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
color4b(Red,Green,Blue,Alpha) ->
cast(5142, <<Red:?GLbyte,Green:?GLbyte,Blue:?GLbyte,Alpha:?GLbyte>>).
%% @doc
%% See {@link color3b/3}
--spec color4d(Red, Green, Blue, Alpha) -> ok when Red :: float(),Green :: float(),Blue :: float(),Alpha :: float().
+-spec color4d(Red, Green, Blue, Alpha) -> 'ok' when Red :: float(),Green :: float(),Blue :: float(),Alpha :: float().
color4d(Red,Green,Blue,Alpha) ->
cast(5143, <<Red:?GLdouble,Green:?GLdouble,Blue:?GLdouble,Alpha:?GLdouble>>).
%% @doc
%% See {@link color3b/3}
--spec color4f(Red, Green, Blue, Alpha) -> ok when Red :: float(),Green :: float(),Blue :: float(),Alpha :: float().
+-spec color4f(Red, Green, Blue, Alpha) -> 'ok' when Red :: float(),Green :: float(),Blue :: float(),Alpha :: float().
color4f(Red,Green,Blue,Alpha) ->
cast(5144, <<Red:?GLfloat,Green:?GLfloat,Blue:?GLfloat,Alpha:?GLfloat>>).
%% @doc
%% See {@link color3b/3}
--spec color4i(Red, Green, Blue, Alpha) -> ok when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
+-spec color4i(Red, Green, Blue, Alpha) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
color4i(Red,Green,Blue,Alpha) ->
cast(5145, <<Red:?GLint,Green:?GLint,Blue:?GLint,Alpha:?GLint>>).
%% @doc
%% See {@link color3b/3}
--spec color4s(Red, Green, Blue, Alpha) -> ok when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
+-spec color4s(Red, Green, Blue, Alpha) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
color4s(Red,Green,Blue,Alpha) ->
cast(5146, <<Red:?GLshort,Green:?GLshort,Blue:?GLshort,Alpha:?GLshort>>).
%% @doc
%% See {@link color3b/3}
--spec color4ub(Red, Green, Blue, Alpha) -> ok when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
+-spec color4ub(Red, Green, Blue, Alpha) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
color4ub(Red,Green,Blue,Alpha) ->
cast(5147, <<Red:?GLubyte,Green:?GLubyte,Blue:?GLubyte,Alpha:?GLubyte>>).
%% @doc
%% See {@link color3b/3}
--spec color4ui(Red, Green, Blue, Alpha) -> ok when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
+-spec color4ui(Red, Green, Blue, Alpha) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
color4ui(Red,Green,Blue,Alpha) ->
cast(5148, <<Red:?GLuint,Green:?GLuint,Blue:?GLuint,Alpha:?GLuint>>).
%% @doc
%% See {@link color3b/3}
--spec color4us(Red, Green, Blue, Alpha) -> ok when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
+-spec color4us(Red, Green, Blue, Alpha) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer().
color4us(Red,Green,Blue,Alpha) ->
cast(5149, <<Red:?GLushort,Green:?GLushort,Blue:?GLushort,Alpha:?GLushort>>).
%% @equiv color3b(Red,Green,Blue)
--spec color3bv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec color3bv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
color3bv({Red,Green,Blue}) -> color3b(Red,Green,Blue).
%% @equiv color3d(Red,Green,Blue)
--spec color3dv(V) -> ok when V :: {Red :: float(),Green :: float(),Blue :: float()}.
+-spec color3dv(V) -> 'ok' when V :: {Red :: float(),Green :: float(),Blue :: float()}.
color3dv({Red,Green,Blue}) -> color3d(Red,Green,Blue).
%% @equiv color3f(Red,Green,Blue)
--spec color3fv(V) -> ok when V :: {Red :: float(),Green :: float(),Blue :: float()}.
+-spec color3fv(V) -> 'ok' when V :: {Red :: float(),Green :: float(),Blue :: float()}.
color3fv({Red,Green,Blue}) -> color3f(Red,Green,Blue).
%% @equiv color3i(Red,Green,Blue)
--spec color3iv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec color3iv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
color3iv({Red,Green,Blue}) -> color3i(Red,Green,Blue).
%% @equiv color3s(Red,Green,Blue)
--spec color3sv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec color3sv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
color3sv({Red,Green,Blue}) -> color3s(Red,Green,Blue).
%% @equiv color3ub(Red,Green,Blue)
--spec color3ubv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec color3ubv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
color3ubv({Red,Green,Blue}) -> color3ub(Red,Green,Blue).
%% @equiv color3ui(Red,Green,Blue)
--spec color3uiv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec color3uiv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
color3uiv({Red,Green,Blue}) -> color3ui(Red,Green,Blue).
%% @equiv color3us(Red,Green,Blue)
--spec color3usv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec color3usv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
color3usv({Red,Green,Blue}) -> color3us(Red,Green,Blue).
%% @equiv color4b(Red,Green,Blue,Alpha)
--spec color4bv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
+-spec color4bv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
color4bv({Red,Green,Blue,Alpha}) -> color4b(Red,Green,Blue,Alpha).
%% @equiv color4d(Red,Green,Blue,Alpha)
--spec color4dv(V) -> ok when V :: {Red :: float(),Green :: float(),Blue :: float(),Alpha :: float()}.
+-spec color4dv(V) -> 'ok' when V :: {Red :: float(),Green :: float(),Blue :: float(),Alpha :: float()}.
color4dv({Red,Green,Blue,Alpha}) -> color4d(Red,Green,Blue,Alpha).
%% @equiv color4f(Red,Green,Blue,Alpha)
--spec color4fv(V) -> ok when V :: {Red :: float(),Green :: float(),Blue :: float(),Alpha :: float()}.
+-spec color4fv(V) -> 'ok' when V :: {Red :: float(),Green :: float(),Blue :: float(),Alpha :: float()}.
color4fv({Red,Green,Blue,Alpha}) -> color4f(Red,Green,Blue,Alpha).
%% @equiv color4i(Red,Green,Blue,Alpha)
--spec color4iv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
+-spec color4iv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
color4iv({Red,Green,Blue,Alpha}) -> color4i(Red,Green,Blue,Alpha).
%% @equiv color4s(Red,Green,Blue,Alpha)
--spec color4sv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
+-spec color4sv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
color4sv({Red,Green,Blue,Alpha}) -> color4s(Red,Green,Blue,Alpha).
%% @equiv color4ub(Red,Green,Blue,Alpha)
--spec color4ubv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
+-spec color4ubv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
color4ubv({Red,Green,Blue,Alpha}) -> color4ub(Red,Green,Blue,Alpha).
%% @equiv color4ui(Red,Green,Blue,Alpha)
--spec color4uiv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
+-spec color4uiv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
color4uiv({Red,Green,Blue,Alpha}) -> color4ui(Red,Green,Blue,Alpha).
%% @equiv color4us(Red,Green,Blue,Alpha)
--spec color4usv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
+-spec color4usv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer(),Alpha :: integer()}.
color4usv({Red,Green,Blue,Alpha}) -> color4us(Red,Green,Blue,Alpha).
%% @doc Set the current texture coordinates
@@ -3496,162 +3496,162 @@ color4usv({Red,Green,Blue,Alpha}) -> color4us(Red,Green,Blue,Alpha).
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexCoord.xml">external</a> documentation.
--spec texCoord1d(S) -> ok when S :: float().
+-spec texCoord1d(S) -> 'ok' when S :: float().
texCoord1d(S) ->
cast(5150, <<S:?GLdouble>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord1f(S) -> ok when S :: float().
+-spec texCoord1f(S) -> 'ok' when S :: float().
texCoord1f(S) ->
cast(5151, <<S:?GLfloat>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord1i(S) -> ok when S :: integer().
+-spec texCoord1i(S) -> 'ok' when S :: integer().
texCoord1i(S) ->
cast(5152, <<S:?GLint>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord1s(S) -> ok when S :: integer().
+-spec texCoord1s(S) -> 'ok' when S :: integer().
texCoord1s(S) ->
cast(5153, <<S:?GLshort>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord2d(S, T) -> ok when S :: float(),T :: float().
+-spec texCoord2d(S, T) -> 'ok' when S :: float(),T :: float().
texCoord2d(S,T) ->
cast(5154, <<S:?GLdouble,T:?GLdouble>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord2f(S, T) -> ok when S :: float(),T :: float().
+-spec texCoord2f(S, T) -> 'ok' when S :: float(),T :: float().
texCoord2f(S,T) ->
cast(5155, <<S:?GLfloat,T:?GLfloat>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord2i(S, T) -> ok when S :: integer(),T :: integer().
+-spec texCoord2i(S, T) -> 'ok' when S :: integer(),T :: integer().
texCoord2i(S,T) ->
cast(5156, <<S:?GLint,T:?GLint>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord2s(S, T) -> ok when S :: integer(),T :: integer().
+-spec texCoord2s(S, T) -> 'ok' when S :: integer(),T :: integer().
texCoord2s(S,T) ->
cast(5157, <<S:?GLshort,T:?GLshort>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord3d(S, T, R) -> ok when S :: float(),T :: float(),R :: float().
+-spec texCoord3d(S, T, R) -> 'ok' when S :: float(),T :: float(),R :: float().
texCoord3d(S,T,R) ->
cast(5158, <<S:?GLdouble,T:?GLdouble,R:?GLdouble>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord3f(S, T, R) -> ok when S :: float(),T :: float(),R :: float().
+-spec texCoord3f(S, T, R) -> 'ok' when S :: float(),T :: float(),R :: float().
texCoord3f(S,T,R) ->
cast(5159, <<S:?GLfloat,T:?GLfloat,R:?GLfloat>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord3i(S, T, R) -> ok when S :: integer(),T :: integer(),R :: integer().
+-spec texCoord3i(S, T, R) -> 'ok' when S :: integer(),T :: integer(),R :: integer().
texCoord3i(S,T,R) ->
cast(5160, <<S:?GLint,T:?GLint,R:?GLint>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord3s(S, T, R) -> ok when S :: integer(),T :: integer(),R :: integer().
+-spec texCoord3s(S, T, R) -> 'ok' when S :: integer(),T :: integer(),R :: integer().
texCoord3s(S,T,R) ->
cast(5161, <<S:?GLshort,T:?GLshort,R:?GLshort>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord4d(S, T, R, Q) -> ok when S :: float(),T :: float(),R :: float(),Q :: float().
+-spec texCoord4d(S, T, R, Q) -> 'ok' when S :: float(),T :: float(),R :: float(),Q :: float().
texCoord4d(S,T,R,Q) ->
cast(5162, <<S:?GLdouble,T:?GLdouble,R:?GLdouble,Q:?GLdouble>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord4f(S, T, R, Q) -> ok when S :: float(),T :: float(),R :: float(),Q :: float().
+-spec texCoord4f(S, T, R, Q) -> 'ok' when S :: float(),T :: float(),R :: float(),Q :: float().
texCoord4f(S,T,R,Q) ->
cast(5163, <<S:?GLfloat,T:?GLfloat,R:?GLfloat,Q:?GLfloat>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord4i(S, T, R, Q) -> ok when S :: integer(),T :: integer(),R :: integer(),Q :: integer().
+-spec texCoord4i(S, T, R, Q) -> 'ok' when S :: integer(),T :: integer(),R :: integer(),Q :: integer().
texCoord4i(S,T,R,Q) ->
cast(5164, <<S:?GLint,T:?GLint,R:?GLint,Q:?GLint>>).
%% @doc
%% See {@link texCoord1d/1}
--spec texCoord4s(S, T, R, Q) -> ok when S :: integer(),T :: integer(),R :: integer(),Q :: integer().
+-spec texCoord4s(S, T, R, Q) -> 'ok' when S :: integer(),T :: integer(),R :: integer(),Q :: integer().
texCoord4s(S,T,R,Q) ->
cast(5165, <<S:?GLshort,T:?GLshort,R:?GLshort,Q:?GLshort>>).
%% @equiv texCoord1d(S)
--spec texCoord1dv(V) -> ok when V :: {S :: float()}.
+-spec texCoord1dv(V) -> 'ok' when V :: {S :: float()}.
texCoord1dv({S}) -> texCoord1d(S).
%% @equiv texCoord1f(S)
--spec texCoord1fv(V) -> ok when V :: {S :: float()}.
+-spec texCoord1fv(V) -> 'ok' when V :: {S :: float()}.
texCoord1fv({S}) -> texCoord1f(S).
%% @equiv texCoord1i(S)
--spec texCoord1iv(V) -> ok when V :: {S :: integer()}.
+-spec texCoord1iv(V) -> 'ok' when V :: {S :: integer()}.
texCoord1iv({S}) -> texCoord1i(S).
%% @equiv texCoord1s(S)
--spec texCoord1sv(V) -> ok when V :: {S :: integer()}.
+-spec texCoord1sv(V) -> 'ok' when V :: {S :: integer()}.
texCoord1sv({S}) -> texCoord1s(S).
%% @equiv texCoord2d(S,T)
--spec texCoord2dv(V) -> ok when V :: {S :: float(),T :: float()}.
+-spec texCoord2dv(V) -> 'ok' when V :: {S :: float(),T :: float()}.
texCoord2dv({S,T}) -> texCoord2d(S,T).
%% @equiv texCoord2f(S,T)
--spec texCoord2fv(V) -> ok when V :: {S :: float(),T :: float()}.
+-spec texCoord2fv(V) -> 'ok' when V :: {S :: float(),T :: float()}.
texCoord2fv({S,T}) -> texCoord2f(S,T).
%% @equiv texCoord2i(S,T)
--spec texCoord2iv(V) -> ok when V :: {S :: integer(),T :: integer()}.
+-spec texCoord2iv(V) -> 'ok' when V :: {S :: integer(),T :: integer()}.
texCoord2iv({S,T}) -> texCoord2i(S,T).
%% @equiv texCoord2s(S,T)
--spec texCoord2sv(V) -> ok when V :: {S :: integer(),T :: integer()}.
+-spec texCoord2sv(V) -> 'ok' when V :: {S :: integer(),T :: integer()}.
texCoord2sv({S,T}) -> texCoord2s(S,T).
%% @equiv texCoord3d(S,T,R)
--spec texCoord3dv(V) -> ok when V :: {S :: float(),T :: float(),R :: float()}.
+-spec texCoord3dv(V) -> 'ok' when V :: {S :: float(),T :: float(),R :: float()}.
texCoord3dv({S,T,R}) -> texCoord3d(S,T,R).
%% @equiv texCoord3f(S,T,R)
--spec texCoord3fv(V) -> ok when V :: {S :: float(),T :: float(),R :: float()}.
+-spec texCoord3fv(V) -> 'ok' when V :: {S :: float(),T :: float(),R :: float()}.
texCoord3fv({S,T,R}) -> texCoord3f(S,T,R).
%% @equiv texCoord3i(S,T,R)
--spec texCoord3iv(V) -> ok when V :: {S :: integer(),T :: integer(),R :: integer()}.
+-spec texCoord3iv(V) -> 'ok' when V :: {S :: integer(),T :: integer(),R :: integer()}.
texCoord3iv({S,T,R}) -> texCoord3i(S,T,R).
%% @equiv texCoord3s(S,T,R)
--spec texCoord3sv(V) -> ok when V :: {S :: integer(),T :: integer(),R :: integer()}.
+-spec texCoord3sv(V) -> 'ok' when V :: {S :: integer(),T :: integer(),R :: integer()}.
texCoord3sv({S,T,R}) -> texCoord3s(S,T,R).
%% @equiv texCoord4d(S,T,R,Q)
--spec texCoord4dv(V) -> ok when V :: {S :: float(),T :: float(),R :: float(),Q :: float()}.
+-spec texCoord4dv(V) -> 'ok' when V :: {S :: float(),T :: float(),R :: float(),Q :: float()}.
texCoord4dv({S,T,R,Q}) -> texCoord4d(S,T,R,Q).
%% @equiv texCoord4f(S,T,R,Q)
--spec texCoord4fv(V) -> ok when V :: {S :: float(),T :: float(),R :: float(),Q :: float()}.
+-spec texCoord4fv(V) -> 'ok' when V :: {S :: float(),T :: float(),R :: float(),Q :: float()}.
texCoord4fv({S,T,R,Q}) -> texCoord4f(S,T,R,Q).
%% @equiv texCoord4i(S,T,R,Q)
--spec texCoord4iv(V) -> ok when V :: {S :: integer(),T :: integer(),R :: integer(),Q :: integer()}.
+-spec texCoord4iv(V) -> 'ok' when V :: {S :: integer(),T :: integer(),R :: integer(),Q :: integer()}.
texCoord4iv({S,T,R,Q}) -> texCoord4i(S,T,R,Q).
%% @equiv texCoord4s(S,T,R,Q)
--spec texCoord4sv(V) -> ok when V :: {S :: integer(),T :: integer(),R :: integer(),Q :: integer()}.
+-spec texCoord4sv(V) -> 'ok' when V :: {S :: integer(),T :: integer(),R :: integer(),Q :: integer()}.
texCoord4sv({S,T,R,Q}) -> texCoord4s(S,T,R,Q).
%% @doc Specify the raster position for pixel operations
@@ -3696,122 +3696,122 @@ texCoord4sv({S,T,R,Q}) -> texCoord4s(S,T,R,Q).
%% initial value.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glRasterPos.xml">external</a> documentation.
--spec rasterPos2d(X, Y) -> ok when X :: float(),Y :: float().
+-spec rasterPos2d(X, Y) -> 'ok' when X :: float(),Y :: float().
rasterPos2d(X,Y) ->
cast(5166, <<X:?GLdouble,Y:?GLdouble>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos2f(X, Y) -> ok when X :: float(),Y :: float().
+-spec rasterPos2f(X, Y) -> 'ok' when X :: float(),Y :: float().
rasterPos2f(X,Y) ->
cast(5167, <<X:?GLfloat,Y:?GLfloat>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos2i(X, Y) -> ok when X :: integer(),Y :: integer().
+-spec rasterPos2i(X, Y) -> 'ok' when X :: integer(),Y :: integer().
rasterPos2i(X,Y) ->
cast(5168, <<X:?GLint,Y:?GLint>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos2s(X, Y) -> ok when X :: integer(),Y :: integer().
+-spec rasterPos2s(X, Y) -> 'ok' when X :: integer(),Y :: integer().
rasterPos2s(X,Y) ->
cast(5169, <<X:?GLshort,Y:?GLshort>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos3d(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec rasterPos3d(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
rasterPos3d(X,Y,Z) ->
cast(5170, <<X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos3f(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec rasterPos3f(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
rasterPos3f(X,Y,Z) ->
cast(5171, <<X:?GLfloat,Y:?GLfloat,Z:?GLfloat>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos3i(X, Y, Z) -> ok when X :: integer(),Y :: integer(),Z :: integer().
+-spec rasterPos3i(X, Y, Z) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer().
rasterPos3i(X,Y,Z) ->
cast(5172, <<X:?GLint,Y:?GLint,Z:?GLint>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos3s(X, Y, Z) -> ok when X :: integer(),Y :: integer(),Z :: integer().
+-spec rasterPos3s(X, Y, Z) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer().
rasterPos3s(X,Y,Z) ->
cast(5173, <<X:?GLshort,Y:?GLshort,Z:?GLshort>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos4d(X, Y, Z, W) -> ok when X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec rasterPos4d(X, Y, Z, W) -> 'ok' when X :: float(),Y :: float(),Z :: float(),W :: float().
rasterPos4d(X,Y,Z,W) ->
cast(5174, <<X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos4f(X, Y, Z, W) -> ok when X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec rasterPos4f(X, Y, Z, W) -> 'ok' when X :: float(),Y :: float(),Z :: float(),W :: float().
rasterPos4f(X,Y,Z,W) ->
cast(5175, <<X:?GLfloat,Y:?GLfloat,Z:?GLfloat,W:?GLfloat>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos4i(X, Y, Z, W) -> ok when X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
+-spec rasterPos4i(X, Y, Z, W) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
rasterPos4i(X,Y,Z,W) ->
cast(5176, <<X:?GLint,Y:?GLint,Z:?GLint,W:?GLint>>).
%% @doc
%% See {@link rasterPos2d/2}
--spec rasterPos4s(X, Y, Z, W) -> ok when X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
+-spec rasterPos4s(X, Y, Z, W) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
rasterPos4s(X,Y,Z,W) ->
cast(5177, <<X:?GLshort,Y:?GLshort,Z:?GLshort,W:?GLshort>>).
%% @equiv rasterPos2d(X,Y)
--spec rasterPos2dv(V) -> ok when V :: {X :: float(),Y :: float()}.
+-spec rasterPos2dv(V) -> 'ok' when V :: {X :: float(),Y :: float()}.
rasterPos2dv({X,Y}) -> rasterPos2d(X,Y).
%% @equiv rasterPos2f(X,Y)
--spec rasterPos2fv(V) -> ok when V :: {X :: float(),Y :: float()}.
+-spec rasterPos2fv(V) -> 'ok' when V :: {X :: float(),Y :: float()}.
rasterPos2fv({X,Y}) -> rasterPos2f(X,Y).
%% @equiv rasterPos2i(X,Y)
--spec rasterPos2iv(V) -> ok when V :: {X :: integer(),Y :: integer()}.
+-spec rasterPos2iv(V) -> 'ok' when V :: {X :: integer(),Y :: integer()}.
rasterPos2iv({X,Y}) -> rasterPos2i(X,Y).
%% @equiv rasterPos2s(X,Y)
--spec rasterPos2sv(V) -> ok when V :: {X :: integer(),Y :: integer()}.
+-spec rasterPos2sv(V) -> 'ok' when V :: {X :: integer(),Y :: integer()}.
rasterPos2sv({X,Y}) -> rasterPos2s(X,Y).
%% @equiv rasterPos3d(X,Y,Z)
--spec rasterPos3dv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float()}.
+-spec rasterPos3dv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}.
rasterPos3dv({X,Y,Z}) -> rasterPos3d(X,Y,Z).
%% @equiv rasterPos3f(X,Y,Z)
--spec rasterPos3fv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float()}.
+-spec rasterPos3fv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}.
rasterPos3fv({X,Y,Z}) -> rasterPos3f(X,Y,Z).
%% @equiv rasterPos3i(X,Y,Z)
--spec rasterPos3iv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
+-spec rasterPos3iv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
rasterPos3iv({X,Y,Z}) -> rasterPos3i(X,Y,Z).
%% @equiv rasterPos3s(X,Y,Z)
--spec rasterPos3sv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
+-spec rasterPos3sv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
rasterPos3sv({X,Y,Z}) -> rasterPos3s(X,Y,Z).
%% @equiv rasterPos4d(X,Y,Z,W)
--spec rasterPos4dv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
+-spec rasterPos4dv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
rasterPos4dv({X,Y,Z,W}) -> rasterPos4d(X,Y,Z,W).
%% @equiv rasterPos4f(X,Y,Z,W)
--spec rasterPos4fv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
+-spec rasterPos4fv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
rasterPos4fv({X,Y,Z,W}) -> rasterPos4f(X,Y,Z,W).
%% @equiv rasterPos4i(X,Y,Z,W)
--spec rasterPos4iv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
+-spec rasterPos4iv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
rasterPos4iv({X,Y,Z,W}) -> rasterPos4i(X,Y,Z,W).
%% @equiv rasterPos4s(X,Y,Z,W)
--spec rasterPos4sv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
+-spec rasterPos4sv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
rasterPos4sv({X,Y,Z,W}) -> rasterPos4s(X,Y,Z,W).
%% @doc Draw a rectangle
@@ -3828,49 +3828,49 @@ rasterPos4sv({X,Y,Z,W}) -> rasterPos4s(X,Y,Z,W).
%% the rectangle is constructed with a counterclockwise winding.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glRect.xml">external</a> documentation.
--spec rectd(X1, Y1, X2, Y2) -> ok when X1 :: float(),Y1 :: float(),X2 :: float(),Y2 :: float().
+-spec rectd(X1, Y1, X2, Y2) -> 'ok' when X1 :: float(),Y1 :: float(),X2 :: float(),Y2 :: float().
rectd(X1,Y1,X2,Y2) ->
cast(5178, <<X1:?GLdouble,Y1:?GLdouble,X2:?GLdouble,Y2:?GLdouble>>).
%% @doc
%% See {@link rectd/4}
--spec rectf(X1, Y1, X2, Y2) -> ok when X1 :: float(),Y1 :: float(),X2 :: float(),Y2 :: float().
+-spec rectf(X1, Y1, X2, Y2) -> 'ok' when X1 :: float(),Y1 :: float(),X2 :: float(),Y2 :: float().
rectf(X1,Y1,X2,Y2) ->
cast(5179, <<X1:?GLfloat,Y1:?GLfloat,X2:?GLfloat,Y2:?GLfloat>>).
%% @doc
%% See {@link rectd/4}
--spec recti(X1, Y1, X2, Y2) -> ok when X1 :: integer(),Y1 :: integer(),X2 :: integer(),Y2 :: integer().
+-spec recti(X1, Y1, X2, Y2) -> 'ok' when X1 :: integer(),Y1 :: integer(),X2 :: integer(),Y2 :: integer().
recti(X1,Y1,X2,Y2) ->
cast(5180, <<X1:?GLint,Y1:?GLint,X2:?GLint,Y2:?GLint>>).
%% @doc
%% See {@link rectd/4}
--spec rects(X1, Y1, X2, Y2) -> ok when X1 :: integer(),Y1 :: integer(),X2 :: integer(),Y2 :: integer().
+-spec rects(X1, Y1, X2, Y2) -> 'ok' when X1 :: integer(),Y1 :: integer(),X2 :: integer(),Y2 :: integer().
rects(X1,Y1,X2,Y2) ->
cast(5181, <<X1:?GLshort,Y1:?GLshort,X2:?GLshort,Y2:?GLshort>>).
%% @doc
%% See {@link rectd/4}
--spec rectdv(V1, V2) -> ok when V1 :: {float(),float()},V2 :: {float(),float()}.
+-spec rectdv(V1, V2) -> 'ok' when V1 :: {float(),float()},V2 :: {float(),float()}.
rectdv({V1,V2},{V1,V2}) ->
cast(5182, <<V1:?GLdouble,V2:?GLdouble,V1:?GLdouble,V2:?GLdouble>>).
%% @doc
%% See {@link rectd/4}
--spec rectfv(V1, V2) -> ok when V1 :: {float(),float()},V2 :: {float(),float()}.
+-spec rectfv(V1, V2) -> 'ok' when V1 :: {float(),float()},V2 :: {float(),float()}.
rectfv({V1,V2},{V1,V2}) ->
cast(5183, <<V1:?GLfloat,V2:?GLfloat,V1:?GLfloat,V2:?GLfloat>>).
%% @doc
%% See {@link rectd/4}
--spec rectiv(V1, V2) -> ok when V1 :: {integer(),integer()},V2 :: {integer(),integer()}.
+-spec rectiv(V1, V2) -> 'ok' when V1 :: {integer(),integer()},V2 :: {integer(),integer()}.
rectiv({V1,V2},{V1,V2}) ->
cast(5184, <<V1:?GLint,V2:?GLint,V1:?GLint,V2:?GLint>>).
%% @doc
%% See {@link rectd/4}
--spec rectsv(V1, V2) -> ok when V1 :: {integer(),integer()},V2 :: {integer(),integer()}.
+-spec rectsv(V1, V2) -> 'ok' when V1 :: {integer(),integer()},V2 :: {integer(),integer()}.
rectsv({V1,V2},{V1,V2}) ->
cast(5185, <<V1:?GLshort,V2:?GLshort,V1:?GLshort,V2:?GLshort>>).
@@ -3898,7 +3898,7 @@ rectsv({V1,V2},{V1,V2}) ->
%% , or {@link gl:drawRangeElements/6} is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexPointer.xml">external</a> documentation.
--spec vertexPointer(Size, Type, Stride, Ptr) -> ok when Size :: integer(),Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
+-spec vertexPointer(Size, Type, Stride, Ptr) -> 'ok' when Size :: integer(),Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
vertexPointer(Size,Type,Stride,Ptr) when is_integer(Ptr) ->
cast(5186, <<Size:?GLint,Type:?GLenum,Stride:?GLsizei,Ptr:?GLuint>>);
vertexPointer(Size,Type,Stride,Ptr) ->
@@ -3929,7 +3929,7 @@ vertexPointer(Size,Type,Stride,Ptr) ->
%% , or {@link gl:arrayElement/1} is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glNormalPointer.xml">external</a> documentation.
--spec normalPointer(Type, Stride, Ptr) -> ok when Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
+-spec normalPointer(Type, Stride, Ptr) -> 'ok' when Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
normalPointer(Type,Stride,Ptr) when is_integer(Ptr) ->
cast(5188, <<Type:?GLenum,Stride:?GLsizei,Ptr:?GLuint>>);
normalPointer(Type,Stride,Ptr) ->
@@ -3961,7 +3961,7 @@ normalPointer(Type,Stride,Ptr) ->
%% , or {@link gl:arrayElement/1} is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glColorPointer.xml">external</a> documentation.
--spec colorPointer(Size, Type, Stride, Ptr) -> ok when Size :: integer(),Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
+-spec colorPointer(Size, Type, Stride, Ptr) -> 'ok' when Size :: integer(),Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
colorPointer(Size,Type,Stride,Ptr) when is_integer(Ptr) ->
cast(5190, <<Size:?GLint,Type:?GLenum,Stride:?GLsizei,Ptr:?GLuint>>);
colorPointer(Size,Type,Stride,Ptr) ->
@@ -3991,7 +3991,7 @@ colorPointer(Size,Type,Stride,Ptr) ->
%% , {@link gl:drawRangeElements/6} , or {@link gl:arrayElement/1} is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glIndexPointer.xml">external</a> documentation.
--spec indexPointer(Type, Stride, Ptr) -> ok when Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
+-spec indexPointer(Type, Stride, Ptr) -> 'ok' when Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
indexPointer(Type,Stride,Ptr) when is_integer(Ptr) ->
cast(5192, <<Type:?GLenum,Stride:?GLsizei,Ptr:?GLuint>>);
indexPointer(Type,Stride,Ptr) ->
@@ -4025,7 +4025,7 @@ indexPointer(Type,Stride,Ptr) ->
%% or {@link gl:drawRangeElements/6} is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexCoordPointer.xml">external</a> documentation.
--spec texCoordPointer(Size, Type, Stride, Ptr) -> ok when Size :: integer(),Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
+-spec texCoordPointer(Size, Type, Stride, Ptr) -> 'ok' when Size :: integer(),Type :: enum(),Stride :: integer(),Ptr :: offset()|mem().
texCoordPointer(Size,Type,Stride,Ptr) when is_integer(Ptr) ->
cast(5194, <<Size:?GLint,Type:?GLenum,Stride:?GLsizei,Ptr:?GLuint>>);
texCoordPointer(Size,Type,Stride,Ptr) ->
@@ -4054,7 +4054,7 @@ texCoordPointer(Size,Type,Stride,Ptr) ->
%% , {@link gl:drawRangeElements/6} , or {@link gl:arrayElement/1} is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEdgeFlagPointer.xml">external</a> documentation.
--spec edgeFlagPointer(Stride, Ptr) -> ok when Stride :: integer(),Ptr :: offset()|mem().
+-spec edgeFlagPointer(Stride, Ptr) -> 'ok' when Stride :: integer(),Ptr :: offset()|mem().
edgeFlagPointer(Stride,Ptr) when is_integer(Ptr) ->
cast(5196, <<Stride:?GLsizei,Ptr:?GLuint>>);
edgeFlagPointer(Stride,Ptr) ->
@@ -4082,7 +4082,7 @@ edgeFlagPointer(Stride,Ptr) ->
%% and a call that follows a change to array data may access original data.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glArrayElement.xml">external</a> documentation.
--spec arrayElement(I) -> ok when I :: integer().
+-spec arrayElement(I) -> 'ok' when I :: integer().
arrayElement(I) ->
cast(5198, <<I:?GLint>>).
@@ -4103,7 +4103,7 @@ arrayElement(I) ->
%% after ``gl:drawArrays'' returns. Attributes that aren't modified remain well defined.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawArrays.xml">external</a> documentation.
--spec drawArrays(Mode, First, Count) -> ok when Mode :: enum(),First :: integer(),Count :: integer().
+-spec drawArrays(Mode, First, Count) -> 'ok' when Mode :: enum(),First :: integer(),Count :: integer().
drawArrays(Mode,First,Count) ->
cast(5199, <<Mode:?GLenum,First:?GLint,Count:?GLsizei>>).
@@ -4125,7 +4125,7 @@ drawArrays(Mode,First,Count) ->
%% values.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElements.xml">external</a> documentation.
--spec drawElements(Mode, Count, Type, Indices) -> ok when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem().
+-spec drawElements(Mode, Count, Type, Indices) -> 'ok' when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem().
drawElements(Mode,Count,Type,Indices) when is_integer(Indices) ->
cast(5200, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint>>);
drawElements(Mode,Count,Type,Indices) ->
@@ -4153,7 +4153,7 @@ drawElements(Mode,Count,Type,Indices) ->
%% which follows is located at the first possible floating-point aligned address.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glInterleavedArrays.xml">external</a> documentation.
--spec interleavedArrays(Format, Stride, Pointer) -> ok when Format :: enum(),Stride :: integer(),Pointer :: offset()|mem().
+-spec interleavedArrays(Format, Stride, Pointer) -> 'ok' when Format :: enum(),Stride :: integer(),Pointer :: offset()|mem().
interleavedArrays(Format,Stride,Pointer) when is_integer(Pointer) ->
cast(5202, <<Format:?GLenum,Stride:?GLsizei,Pointer:?GLuint>>);
interleavedArrays(Format,Stride,Pointer) ->
@@ -4187,7 +4187,7 @@ interleavedArrays(Format,Stride,Pointer) ->
%% and `?GL_SMOOTH', respectively.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glShadeModel.xml">external</a> documentation.
--spec shadeModel(Mode) -> ok when Mode :: enum().
+-spec shadeModel(Mode) -> 'ok' when Mode :: enum().
shadeModel(Mode) ->
cast(5204, <<Mode:?GLenum>>).
@@ -4281,26 +4281,26 @@ shadeModel(Mode) ->
%% attenuation factors are (1, 0, 0), resulting in no attenuation.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLight.xml">external</a> documentation.
--spec lightf(Light, Pname, Param) -> ok when Light :: enum(),Pname :: enum(),Param :: float().
+-spec lightf(Light, Pname, Param) -> 'ok' when Light :: enum(),Pname :: enum(),Param :: float().
lightf(Light,Pname,Param) ->
cast(5205, <<Light:?GLenum,Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link lightf/3}
--spec lighti(Light, Pname, Param) -> ok when Light :: enum(),Pname :: enum(),Param :: integer().
+-spec lighti(Light, Pname, Param) -> 'ok' when Light :: enum(),Pname :: enum(),Param :: integer().
lighti(Light,Pname,Param) ->
cast(5206, <<Light:?GLenum,Pname:?GLenum,Param:?GLint>>).
%% @doc
%% See {@link lightf/3}
--spec lightfv(Light, Pname, Params) -> ok when Light :: enum(),Pname :: enum(),Params :: tuple().
+-spec lightfv(Light, Pname, Params) -> 'ok' when Light :: enum(),Pname :: enum(),Params :: tuple().
lightfv(Light,Pname,Params) ->
cast(5207, <<Light:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
%% @doc
%% See {@link lightf/3}
--spec lightiv(Light, Pname, Params) -> ok when Light :: enum(),Pname :: enum(),Params :: tuple().
+-spec lightiv(Light, Pname, Params) -> 'ok' when Light :: enum(),Pname :: enum(),Params :: tuple().
lightiv(Light,Pname,Params) ->
cast(5208, <<Light:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
@@ -4452,26 +4452,26 @@ getLightiv(Light,Pname) ->
%% as in the RGBA case, determine how much above ambient the resulting index is.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLightModel.xml">external</a> documentation.
--spec lightModelf(Pname, Param) -> ok when Pname :: enum(),Param :: float().
+-spec lightModelf(Pname, Param) -> 'ok' when Pname :: enum(),Param :: float().
lightModelf(Pname,Param) ->
cast(5211, <<Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link lightModelf/2}
--spec lightModeli(Pname, Param) -> ok when Pname :: enum(),Param :: integer().
+-spec lightModeli(Pname, Param) -> 'ok' when Pname :: enum(),Param :: integer().
lightModeli(Pname,Param) ->
cast(5212, <<Pname:?GLenum,Param:?GLint>>).
%% @doc
%% See {@link lightModelf/2}
--spec lightModelfv(Pname, Params) -> ok when Pname :: enum(),Params :: tuple().
+-spec lightModelfv(Pname, Params) -> 'ok' when Pname :: enum(),Params :: tuple().
lightModelfv(Pname,Params) ->
cast(5213, <<Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Params)>>)/binary,0:(((0+size(Params)) rem 2)*32)>>).
%% @doc
%% See {@link lightModelf/2}
--spec lightModeliv(Pname, Params) -> ok when Pname :: enum(),Params :: tuple().
+-spec lightModeliv(Pname, Params) -> 'ok' when Pname :: enum(),Params :: tuple().
lightModeliv(Pname,Params) ->
cast(5214, <<Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((0+size(Params)) rem 2)*32)>>).
@@ -4539,26 +4539,26 @@ lightModeliv(Pname,Params) ->
%% of color index lighting.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMaterial.xml">external</a> documentation.
--spec materialf(Face, Pname, Param) -> ok when Face :: enum(),Pname :: enum(),Param :: float().
+-spec materialf(Face, Pname, Param) -> 'ok' when Face :: enum(),Pname :: enum(),Param :: float().
materialf(Face,Pname,Param) ->
cast(5215, <<Face:?GLenum,Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link materialf/3}
--spec materiali(Face, Pname, Param) -> ok when Face :: enum(),Pname :: enum(),Param :: integer().
+-spec materiali(Face, Pname, Param) -> 'ok' when Face :: enum(),Pname :: enum(),Param :: integer().
materiali(Face,Pname,Param) ->
cast(5216, <<Face:?GLenum,Pname:?GLenum,Param:?GLint>>).
%% @doc
%% See {@link materialf/3}
--spec materialfv(Face, Pname, Params) -> ok when Face :: enum(),Pname :: enum(),Params :: tuple().
+-spec materialfv(Face, Pname, Params) -> 'ok' when Face :: enum(),Pname :: enum(),Params :: tuple().
materialfv(Face,Pname,Params) ->
cast(5217, <<Face:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
%% @doc
%% See {@link materialf/3}
--spec materialiv(Face, Pname, Params) -> ok when Face :: enum(),Pname :: enum(),Params :: tuple().
+-spec materialiv(Face, Pname, Params) -> 'ok' when Face :: enum(),Pname :: enum(),Params :: tuple().
materialiv(Face,Pname,Params) ->
cast(5218, <<Face:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
@@ -4629,7 +4629,7 @@ getMaterialiv(Face,Pname) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glColorMaterial.xml">external</a> documentation.
--spec colorMaterial(Face, Mode) -> ok when Face :: enum(),Mode :: enum().
+-spec colorMaterial(Face, Mode) -> 'ok' when Face :: enum(),Mode :: enum().
colorMaterial(Face,Mode) ->
cast(5221, <<Face:?GLenum,Mode:?GLenum>>).
@@ -4651,7 +4651,7 @@ colorMaterial(Face,Mode) ->
%% the resulting image about the current raster position.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPixelZoom.xml">external</a> documentation.
--spec pixelZoom(Xfactor, Yfactor) -> ok when Xfactor :: float(),Yfactor :: float().
+-spec pixelZoom(Xfactor, Yfactor) -> 'ok' when Xfactor :: float(),Yfactor :: float().
pixelZoom(Xfactor,Yfactor) ->
cast(5222, <<Xfactor:?GLfloat,Yfactor:?GLfloat>>).
@@ -4839,13 +4839,13 @@ pixelZoom(Xfactor,Yfactor) ->
%% Boolean parameters are set to false if `Param' is 0 and true otherwise.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPixelStore.xml">external</a> documentation.
--spec pixelStoref(Pname, Param) -> ok when Pname :: enum(),Param :: float().
+-spec pixelStoref(Pname, Param) -> 'ok' when Pname :: enum(),Param :: float().
pixelStoref(Pname,Param) ->
cast(5223, <<Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link pixelStoref/2}
--spec pixelStorei(Pname, Param) -> ok when Pname :: enum(),Param :: integer().
+-spec pixelStorei(Pname, Param) -> 'ok' when Pname :: enum(),Param :: integer().
pixelStorei(Pname,Param) ->
cast(5224, <<Pname:?GLenum,Param:?GLint>>).
@@ -4997,13 +4997,13 @@ pixelStorei(Pname,Param) ->
%% is converted to floating point before being assigned to real-valued parameters.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPixelTransfer.xml">external</a> documentation.
--spec pixelTransferf(Pname, Param) -> ok when Pname :: enum(),Param :: float().
+-spec pixelTransferf(Pname, Param) -> 'ok' when Pname :: enum(),Param :: float().
pixelTransferf(Pname,Param) ->
cast(5225, <<Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link pixelTransferf/2}
--spec pixelTransferi(Pname, Param) -> ok when Pname :: enum(),Param :: integer().
+-spec pixelTransferi(Pname, Param) -> 'ok' when Pname :: enum(),Param :: integer().
pixelTransferi(Pname,Param) ->
cast(5226, <<Pname:?GLenum,Param:?GLint>>).
@@ -5086,21 +5086,21 @@ pixelTransferi(Pname,Param) ->
%% <td> A </td><td> 1 </td><td> 0 </td></tr></tbody></table>
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPixelMap.xml">external</a> documentation.
--spec pixelMapfv(Map, Mapsize, Values) -> ok when Map :: enum(),Mapsize :: integer(),Values :: binary().
+-spec pixelMapfv(Map, Mapsize, Values) -> 'ok' when Map :: enum(),Mapsize :: integer(),Values :: binary().
pixelMapfv(Map,Mapsize,Values) ->
send_bin(Values),
cast(5227, <<Map:?GLenum,Mapsize:?GLsizei>>).
%% @doc
%% See {@link pixelMapfv/3}
--spec pixelMapuiv(Map, Mapsize, Values) -> ok when Map :: enum(),Mapsize :: integer(),Values :: binary().
+-spec pixelMapuiv(Map, Mapsize, Values) -> 'ok' when Map :: enum(),Mapsize :: integer(),Values :: binary().
pixelMapuiv(Map,Mapsize,Values) ->
send_bin(Values),
cast(5228, <<Map:?GLenum,Mapsize:?GLsizei>>).
%% @doc
%% See {@link pixelMapfv/3}
--spec pixelMapusv(Map, Mapsize, Values) -> ok when Map :: enum(),Mapsize :: integer(),Values :: binary().
+-spec pixelMapusv(Map, Mapsize, Values) -> 'ok' when Map :: enum(),Mapsize :: integer(),Values :: binary().
pixelMapusv(Map,Mapsize,Values) ->
send_bin(Values),
cast(5229, <<Map:?GLenum,Mapsize:?GLsizei>>).
@@ -5129,21 +5129,21 @@ pixelMapusv(Map,Mapsize,Values) ->
%% symbolic constant.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetPixelMap.xml">external</a> documentation.
--spec getPixelMapfv(Map, Values) -> ok when Map :: enum(),Values :: mem().
+-spec getPixelMapfv(Map, Values) -> 'ok' when Map :: enum(),Values :: mem().
getPixelMapfv(Map,Values) ->
send_bin(Values),
call(5230, <<Map:?GLenum>>).
%% @doc
%% See {@link getPixelMapfv/2}
--spec getPixelMapuiv(Map, Values) -> ok when Map :: enum(),Values :: mem().
+-spec getPixelMapuiv(Map, Values) -> 'ok' when Map :: enum(),Values :: mem().
getPixelMapuiv(Map,Values) ->
send_bin(Values),
call(5231, <<Map:?GLenum>>).
%% @doc
%% See {@link getPixelMapfv/2}
--spec getPixelMapusv(Map, Values) -> ok when Map :: enum(),Values :: mem().
+-spec getPixelMapusv(Map, Values) -> 'ok' when Map :: enum(),Values :: mem().
getPixelMapusv(Map,Values) ->
send_bin(Values),
call(5232, <<Map:?GLenum>>).
@@ -5191,7 +5191,7 @@ getPixelMapusv(Map,Values) ->
%% or index.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBitmap.xml">external</a> documentation.
--spec bitmap(Width, Height, Xorig, Yorig, Xmove, Ymove, Bitmap) -> ok when Width :: integer(),Height :: integer(),Xorig :: float(),Yorig :: float(),Xmove :: float(),Ymove :: float(),Bitmap :: offset()|mem().
+-spec bitmap(Width, Height, Xorig, Yorig, Xmove, Ymove, Bitmap) -> 'ok' when Width :: integer(),Height :: integer(),Xorig :: float(),Yorig :: float(),Xmove :: float(),Ymove :: float(),Bitmap :: offset()|mem().
bitmap(Width,Height,Xorig,Yorig,Xmove,Ymove,Bitmap) when is_integer(Bitmap) ->
cast(5233, <<Width:?GLsizei,Height:?GLsizei,Xorig:?GLfloat,Yorig:?GLfloat,Xmove:?GLfloat,Ymove:?GLfloat,Bitmap:?GLuint>>);
bitmap(Width,Height,Xorig,Yorig,Xmove,Ymove,Bitmap) ->
@@ -5292,7 +5292,7 @@ bitmap(Width,Height,Xorig,Yorig,Xmove,Ymove,Bitmap) ->
%% data is written into memory. See {@link gl:pixelStoref/2} for a description.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glReadPixels.xml">external</a> documentation.
--spec readPixels(X, Y, Width, Height, Format, Type, Pixels) -> ok when X :: integer(),Y :: integer(),Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Pixels :: mem().
+-spec readPixels(X, Y, Width, Height, Format, Type, Pixels) -> 'ok' when X :: integer(),Y :: integer(),Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Pixels :: mem().
readPixels(X,Y,Width,Height,Format,Type,Pixels) ->
send_bin(Pixels),
call(5235, <<X:?GLint,Y:?GLint,Width:?GLsizei,Height:?GLsizei,Format:?GLenum,Type:?GLenum>>).
@@ -5537,7 +5537,7 @@ readPixels(X,Y,Width,Height,Format,Type,Pixels) ->
%% .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawPixels.xml">external</a> documentation.
--spec drawPixels(Width, Height, Format, Type, Pixels) -> ok when Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
+-spec drawPixels(Width, Height, Format, Type, Pixels) -> 'ok' when Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
drawPixels(Width,Height,Format,Type,Pixels) when is_integer(Pixels) ->
cast(5236, <<Width:?GLsizei,Height:?GLsizei,Format:?GLenum,Type:?GLenum,Pixels:?GLuint>>);
drawPixels(Width,Height,Format,Type,Pixels) ->
@@ -5644,7 +5644,7 @@ drawPixels(Width,Height,Format,Type,Pixels) ->
%% .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyPixels.xml">external</a> documentation.
--spec copyPixels(X, Y, Width, Height, Type) -> ok when X :: integer(),Y :: integer(),Width :: integer(),Height :: integer(),Type :: enum().
+-spec copyPixels(X, Y, Width, Height, Type) -> 'ok' when X :: integer(),Y :: integer(),Width :: integer(),Height :: integer(),Type :: enum().
copyPixels(X,Y,Width,Height,Type) ->
cast(5238, <<X:?GLint,Y:?GLint,Width:?GLsizei,Height:?GLsizei,Type:?GLenum>>).
@@ -5707,7 +5707,7 @@ copyPixels(X,Y,Width,Height,Type) ->
%% `?GL_ALWAYS': Always passes.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glStencilFunc.xml">external</a> documentation.
--spec stencilFunc(Func, Ref, Mask) -> ok when Func :: enum(),Ref :: integer(),Mask :: integer().
+-spec stencilFunc(Func, Ref, Mask) -> 'ok' when Func :: enum(),Ref :: integer(),Mask :: integer().
stencilFunc(Func,Ref,Mask) ->
cast(5239, <<Func:?GLenum,Ref:?GLint,Mask:?GLuint>>).
@@ -5725,7 +5725,7 @@ stencilFunc(Func,Ref,Mask) ->
%% to set front and back stencil writemasks to different values.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glStencilMask.xml">external</a> documentation.
--spec stencilMask(Mask) -> ok when Mask :: integer().
+-spec stencilMask(Mask) -> 'ok' when Mask :: integer().
stencilMask(Mask) ->
cast(5240, <<Mask:?GLuint>>).
@@ -5786,7 +5786,7 @@ stencilMask(Mask) ->
%% stencil action when the stencil test fails and passes, respectively.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glStencilOp.xml">external</a> documentation.
--spec stencilOp(Fail, Zfail, Zpass) -> ok when Fail :: enum(),Zfail :: enum(),Zpass :: enum().
+-spec stencilOp(Fail, Zfail, Zpass) -> 'ok' when Fail :: enum(),Zfail :: enum(),Zpass :: enum().
stencilOp(Fail,Zfail,Zpass) ->
cast(5241, <<Fail:?GLenum,Zfail:?GLenum,Zpass:?GLenum>>).
@@ -5797,7 +5797,7 @@ stencilOp(Fail,Zfail,Zpass) ->
%% buffer.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClearStencil.xml">external</a> documentation.
--spec clearStencil(S) -> ok when S :: integer().
+-spec clearStencil(S) -> 'ok' when S :: integer().
clearStencil(S) ->
cast(5242, <<S:?GLint>>).
@@ -5876,39 +5876,39 @@ clearStencil(S) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexGen.xml">external</a> documentation.
--spec texGend(Coord, Pname, Param) -> ok when Coord :: enum(),Pname :: enum(),Param :: float().
+-spec texGend(Coord, Pname, Param) -> 'ok' when Coord :: enum(),Pname :: enum(),Param :: float().
texGend(Coord,Pname,Param) ->
cast(5243, <<Coord:?GLenum,Pname:?GLenum,Param:?GLdouble>>).
%% @doc
%% See {@link texGend/3}
--spec texGenf(Coord, Pname, Param) -> ok when Coord :: enum(),Pname :: enum(),Param :: float().
+-spec texGenf(Coord, Pname, Param) -> 'ok' when Coord :: enum(),Pname :: enum(),Param :: float().
texGenf(Coord,Pname,Param) ->
cast(5244, <<Coord:?GLenum,Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link texGend/3}
--spec texGeni(Coord, Pname, Param) -> ok when Coord :: enum(),Pname :: enum(),Param :: integer().
+-spec texGeni(Coord, Pname, Param) -> 'ok' when Coord :: enum(),Pname :: enum(),Param :: integer().
texGeni(Coord,Pname,Param) ->
cast(5245, <<Coord:?GLenum,Pname:?GLenum,Param:?GLint>>).
%% @doc
%% See {@link texGend/3}
--spec texGendv(Coord, Pname, Params) -> ok when Coord :: enum(),Pname :: enum(),Params :: tuple().
+-spec texGendv(Coord, Pname, Params) -> 'ok' when Coord :: enum(),Pname :: enum(),Params :: tuple().
texGendv(Coord,Pname,Params) ->
cast(5246, <<Coord:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,0:32,
(<< <<C:?GLdouble>> ||C <- tuple_to_list(Params)>>)/binary>>).
%% @doc
%% See {@link texGend/3}
--spec texGenfv(Coord, Pname, Params) -> ok when Coord :: enum(),Pname :: enum(),Params :: tuple().
+-spec texGenfv(Coord, Pname, Params) -> 'ok' when Coord :: enum(),Pname :: enum(),Params :: tuple().
texGenfv(Coord,Pname,Params) ->
cast(5247, <<Coord:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
%% @doc
%% See {@link texGend/3}
--spec texGeniv(Coord, Pname, Params) -> ok when Coord :: enum(),Pname :: enum(),Params :: tuple().
+-spec texGeniv(Coord, Pname, Params) -> 'ok' when Coord :: enum(),Pname :: enum(),Params :: tuple().
texGeniv(Coord,Pname,Params) ->
cast(5248, <<Coord:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
@@ -5955,14 +5955,14 @@ getTexGeniv(Coord,Pname) ->
%% @doc glTexEnvf
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexEnvf.xml">external</a> documentation.
--spec texEnvf(Target, Pname, Param) -> ok when Target :: enum(),Pname :: enum(),Param :: float().
+-spec texEnvf(Target, Pname, Param) -> 'ok' when Target :: enum(),Pname :: enum(),Param :: float().
texEnvf(Target,Pname,Param) ->
cast(5252, <<Target:?GLenum,Pname:?GLenum,Param:?GLfloat>>).
%% @doc glTexEnvi
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexEnvi.xml">external</a> documentation.
--spec texEnvi(Target, Pname, Param) -> ok when Target :: enum(),Pname :: enum(),Param :: integer().
+-spec texEnvi(Target, Pname, Param) -> 'ok' when Target :: enum(),Pname :: enum(),Param :: integer().
texEnvi(Target,Pname,Param) ->
cast(5253, <<Target:?GLenum,Pname:?GLenum,Param:?GLint>>).
@@ -6127,14 +6127,14 @@ texEnvi(Target,Pname,Param) ->
%% replacement. The default value is `?GL_FALSE'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexEnv.xml">external</a> documentation.
--spec texEnvfv(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: tuple().
+-spec texEnvfv(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: tuple().
texEnvfv(Target,Pname,Params) ->
cast(5254, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
%% @doc
%% See {@link texEnvfv/3}
--spec texEnviv(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: tuple().
+-spec texEnviv(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: tuple().
texEnviv(Target,Pname,Params) ->
cast(5255, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
@@ -6447,26 +6447,26 @@ getTexEnviv(Target,Pname) ->
%% to `?GL_REPEAT'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexParameter.xml">external</a> documentation.
--spec texParameterf(Target, Pname, Param) -> ok when Target :: enum(),Pname :: enum(),Param :: float().
+-spec texParameterf(Target, Pname, Param) -> 'ok' when Target :: enum(),Pname :: enum(),Param :: float().
texParameterf(Target,Pname,Param) ->
cast(5258, <<Target:?GLenum,Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link texParameterf/3}
--spec texParameteri(Target, Pname, Param) -> ok when Target :: enum(),Pname :: enum(),Param :: integer().
+-spec texParameteri(Target, Pname, Param) -> 'ok' when Target :: enum(),Pname :: enum(),Param :: integer().
texParameteri(Target,Pname,Param) ->
cast(5259, <<Target:?GLenum,Pname:?GLenum,Param:?GLint>>).
%% @doc
%% See {@link texParameterf/3}
--spec texParameterfv(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: tuple().
+-spec texParameterfv(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: tuple().
texParameterfv(Target,Pname,Params) ->
cast(5260, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
%% @doc
%% See {@link texParameterf/3}
--spec texParameteriv(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: tuple().
+-spec texParameteriv(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: tuple().
texParameteriv(Target,Pname,Params) ->
cast(5261, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
@@ -6743,7 +6743,7 @@ getTexLevelParameteriv(Target,Level,Pname) ->
%% comparison.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexImage1D.xml">external</a> documentation.
--spec texImage1D(Target, Level, InternalFormat, Width, Border, Format, Type, Pixels) -> ok when Target :: enum(),Level :: integer(),InternalFormat :: integer(),Width :: integer(),Border :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
+-spec texImage1D(Target, Level, InternalFormat, Width, Border, Format, Type, Pixels) -> 'ok' when Target :: enum(),Level :: integer(),InternalFormat :: integer(),Width :: integer(),Border :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
texImage1D(Target,Level,InternalFormat,Width,Border,Format,Type,Pixels) when is_integer(Pixels) ->
cast(5266, <<Target:?GLenum,Level:?GLint,InternalFormat:?GLint,Width:?GLsizei,Border:?GLint,Format:?GLenum,Type:?GLenum,Pixels:?GLuint>>);
texImage1D(Target,Level,InternalFormat,Width,Border,Format,Type,Pixels) ->
@@ -6865,7 +6865,7 @@ texImage1D(Target,Level,InternalFormat,Width,Border,Format,Type,Pixels) ->
%% comparison.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexImage2D.xml">external</a> documentation.
--spec texImage2D(Target, Level, InternalFormat, Width, Height, Border, Format, Type, Pixels) -> ok when Target :: enum(),Level :: integer(),InternalFormat :: integer(),Width :: integer(),Height :: integer(),Border :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
+-spec texImage2D(Target, Level, InternalFormat, Width, Height, Border, Format, Type, Pixels) -> 'ok' when Target :: enum(),Level :: integer(),InternalFormat :: integer(),Width :: integer(),Height :: integer(),Border :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
texImage2D(Target,Level,InternalFormat,Width,Height,Border,Format,Type,Pixels) when is_integer(Pixels) ->
cast(5268, <<Target:?GLenum,Level:?GLint,InternalFormat:?GLint,Width:?GLsizei,Height:?GLsizei,Border:?GLint,Format:?GLenum,Type:?GLenum,Pixels:?GLuint>>);
texImage2D(Target,Level,InternalFormat,Width,Height,Border,Format,Type,Pixels) ->
@@ -6910,7 +6910,7 @@ texImage2D(Target,Level,InternalFormat,Width,Height,Border,Format,Type,Pixels) -
%% .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetTexImage.xml">external</a> documentation.
--spec getTexImage(Target, Level, Format, Type, Pixels) -> ok when Target :: enum(),Level :: integer(),Format :: enum(),Type :: enum(),Pixels :: mem().
+-spec getTexImage(Target, Level, Format, Type, Pixels) -> 'ok' when Target :: enum(),Level :: integer(),Format :: enum(),Type :: enum(),Pixels :: mem().
getTexImage(Target,Level,Format,Type,Pixels) ->
send_bin(Pixels),
call(5270, <<Target:?GLenum,Level:?GLint,Format:?GLenum,Type:?GLenum>>).
@@ -6943,7 +6943,7 @@ genTextures(N) ->
%% textures.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteTextures.xml">external</a> documentation.
--spec deleteTextures(Textures) -> ok when Textures :: [integer()].
+-spec deleteTextures(Textures) -> 'ok' when Textures :: [integer()].
deleteTextures(Textures) ->
cast(5272, <<(length(Textures)):?GLuint,
(<< <<C:?GLuint>> || C <- Textures>>)/binary,0:(((1+length(Textures)) rem 2)*32)>>).
@@ -6995,7 +6995,7 @@ deleteTextures(Textures) ->
%% , {@link gl:texImage2D/9} , {@link gl:texImage3D/10} or another similar function.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindTexture.xml">external</a> documentation.
--spec bindTexture(Target, Texture) -> ok when Target :: enum(),Texture :: integer().
+-spec bindTexture(Target, Texture) -> 'ok' when Target :: enum(),Texture :: integer().
bindTexture(Target,Texture) ->
cast(5273, <<Target:?GLenum,Texture:?GLuint>>).
@@ -7024,7 +7024,7 @@ bindTexture(Target,Texture) ->
%% priority of a default texture.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPrioritizeTextures.xml">external</a> documentation.
--spec prioritizeTextures(Textures, Priorities) -> ok when Textures :: [integer()],Priorities :: [clamp()].
+-spec prioritizeTextures(Textures, Priorities) -> 'ok' when Textures :: [integer()],Priorities :: [clamp()].
prioritizeTextures(Textures,Priorities) ->
cast(5274, <<(length(Textures)):?GLuint,
(<< <<C:?GLuint>> || C <- Textures>>)/binary,0:(((1+length(Textures)) rem 2)*32),(length(Priorities)):?GLuint,
@@ -7072,7 +7072,7 @@ isTexture(Texture) ->
%% @doc glTexSubImage
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexSubImage.xml">external</a> documentation.
--spec texSubImage1D(Target, Level, Xoffset, Width, Format, Type, Pixels) -> ok when Target :: enum(),Level :: integer(),Xoffset :: integer(),Width :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
+-spec texSubImage1D(Target, Level, Xoffset, Width, Format, Type, Pixels) -> 'ok' when Target :: enum(),Level :: integer(),Xoffset :: integer(),Width :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
texSubImage1D(Target,Level,Xoffset,Width,Format,Type,Pixels) when is_integer(Pixels) ->
cast(5277, <<Target:?GLenum,Level:?GLint,Xoffset:?GLint,Width:?GLsizei,Format:?GLenum,Type:?GLenum,Pixels:?GLuint>>);
texSubImage1D(Target,Level,Xoffset,Width,Format,Type,Pixels) ->
@@ -7082,7 +7082,7 @@ texSubImage1D(Target,Level,Xoffset,Width,Format,Type,Pixels) ->
%% @doc glTexSubImage
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexSubImage.xml">external</a> documentation.
--spec texSubImage2D(Target, Level, Xoffset, Yoffset, Width, Height, Format, Type, Pixels) -> ok when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
+-spec texSubImage2D(Target, Level, Xoffset, Yoffset, Width, Height, Format, Type, Pixels) -> 'ok' when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
texSubImage2D(Target,Level,Xoffset,Yoffset,Width,Height,Format,Type,Pixels) when is_integer(Pixels) ->
cast(5279, <<Target:?GLenum,Level:?GLint,Xoffset:?GLint,Yoffset:?GLint,Width:?GLsizei,Height:?GLsizei,Format:?GLenum,Type:?GLenum,Pixels:?GLuint>>);
texSubImage2D(Target,Level,Xoffset,Yoffset,Width,Height,Format,Type,Pixels) ->
@@ -7118,7 +7118,7 @@ texSubImage2D(Target,Level,Xoffset,Yoffset,Width,Height,Format,Type,Pixels) ->
%% can be used to accomplish the conversion.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyTexImage1D.xml">external</a> documentation.
--spec copyTexImage1D(Target, Level, Internalformat, X, Y, Width, Border) -> ok when Target :: enum(),Level :: integer(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer(),Border :: integer().
+-spec copyTexImage1D(Target, Level, Internalformat, X, Y, Width, Border) -> 'ok' when Target :: enum(),Level :: integer(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer(),Border :: integer().
copyTexImage1D(Target,Level,Internalformat,X,Y,Width,Border) ->
cast(5281, <<Target:?GLenum,Level:?GLint,Internalformat:?GLenum,X:?GLint,Y:?GLint,Width:?GLsizei,Border:?GLint>>).
@@ -7149,7 +7149,7 @@ copyTexImage1D(Target,Level,Internalformat,X,Y,Width,Border) ->
%% can be used to accomplish the conversion.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyTexImage2D.xml">external</a> documentation.
--spec copyTexImage2D(Target, Level, Internalformat, X, Y, Width, Height, Border) -> ok when Target :: enum(),Level :: integer(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer(),Height :: integer(),Border :: integer().
+-spec copyTexImage2D(Target, Level, Internalformat, X, Y, Width, Height, Border) -> 'ok' when Target :: enum(),Level :: integer(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer(),Height :: integer(),Border :: integer().
copyTexImage2D(Target,Level,Internalformat,X,Y,Width,Height,Border) ->
cast(5282, <<Target:?GLenum,Level:?GLint,Internalformat:?GLenum,X:?GLint,Y:?GLint,Width:?GLsizei,Height:?GLsizei,Border:?GLint>>).
@@ -7178,7 +7178,7 @@ copyTexImage2D(Target,Level,Internalformat,X,Y,Width,Height,Border) ->
%% of the specified texture array or to texel values outside the specified subregion.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyTexSubImage1D.xml">external</a> documentation.
--spec copyTexSubImage1D(Target, Level, Xoffset, X, Y, Width) -> ok when Target :: enum(),Level :: integer(),Xoffset :: integer(),X :: integer(),Y :: integer(),Width :: integer().
+-spec copyTexSubImage1D(Target, Level, Xoffset, X, Y, Width) -> 'ok' when Target :: enum(),Level :: integer(),Xoffset :: integer(),X :: integer(),Y :: integer(),Width :: integer().
copyTexSubImage1D(Target,Level,Xoffset,X,Y,Width) ->
cast(5283, <<Target:?GLenum,Level:?GLint,Xoffset:?GLint,X:?GLint,Y:?GLint,Width:?GLsizei>>).
@@ -7211,14 +7211,14 @@ copyTexSubImage1D(Target,Level,Xoffset,X,Y,Width) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyTexSubImage2D.xml">external</a> documentation.
--spec copyTexSubImage2D(Target, Level, Xoffset, Yoffset, X, Y, Width, Height) -> ok when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
+-spec copyTexSubImage2D(Target, Level, Xoffset, Yoffset, X, Y, Width, Height) -> 'ok' when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
copyTexSubImage2D(Target,Level,Xoffset,Yoffset,X,Y,Width,Height) ->
cast(5284, <<Target:?GLenum,Level:?GLint,Xoffset:?GLint,Yoffset:?GLint,X:?GLint,Y:?GLint,Width:?GLsizei,Height:?GLsizei>>).
%% @doc glMap
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMap.xml">external</a> documentation.
--spec map1d(Target, U1, U2, Stride, Order, Points) -> ok when Target :: enum(),U1 :: float(),U2 :: float(),Stride :: integer(),Order :: integer(),Points :: binary().
+-spec map1d(Target, U1, U2, Stride, Order, Points) -> 'ok' when Target :: enum(),U1 :: float(),U2 :: float(),Stride :: integer(),Order :: integer(),Points :: binary().
map1d(Target,U1,U2,Stride,Order,Points) ->
send_bin(Points),
cast(5285, <<Target:?GLenum,0:32,U1:?GLdouble,U2:?GLdouble,Stride:?GLint,Order:?GLint>>).
@@ -7226,7 +7226,7 @@ map1d(Target,U1,U2,Stride,Order,Points) ->
%% @doc glMap
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMap.xml">external</a> documentation.
--spec map1f(Target, U1, U2, Stride, Order, Points) -> ok when Target :: enum(),U1 :: float(),U2 :: float(),Stride :: integer(),Order :: integer(),Points :: binary().
+-spec map1f(Target, U1, U2, Stride, Order, Points) -> 'ok' when Target :: enum(),U1 :: float(),U2 :: float(),Stride :: integer(),Order :: integer(),Points :: binary().
map1f(Target,U1,U2,Stride,Order,Points) ->
send_bin(Points),
cast(5286, <<Target:?GLenum,U1:?GLfloat,U2:?GLfloat,Stride:?GLint,Order:?GLint>>).
@@ -7234,7 +7234,7 @@ map1f(Target,U1,U2,Stride,Order,Points) ->
%% @doc glMap
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMap.xml">external</a> documentation.
--spec map2d(Target, U1, U2, Ustride, Uorder, V1, V2, Vstride, Vorder, Points) -> ok when Target :: enum(),U1 :: float(),U2 :: float(),Ustride :: integer(),Uorder :: integer(),V1 :: float(),V2 :: float(),Vstride :: integer(),Vorder :: integer(),Points :: binary().
+-spec map2d(Target, U1, U2, Ustride, Uorder, V1, V2, Vstride, Vorder, Points) -> 'ok' when Target :: enum(),U1 :: float(),U2 :: float(),Ustride :: integer(),Uorder :: integer(),V1 :: float(),V2 :: float(),Vstride :: integer(),Vorder :: integer(),Points :: binary().
map2d(Target,U1,U2,Ustride,Uorder,V1,V2,Vstride,Vorder,Points) ->
send_bin(Points),
cast(5287, <<Target:?GLenum,0:32,U1:?GLdouble,U2:?GLdouble,Ustride:?GLint,Uorder:?GLint,V1:?GLdouble,V2:?GLdouble,Vstride:?GLint,Vorder:?GLint>>).
@@ -7242,7 +7242,7 @@ map2d(Target,U1,U2,Ustride,Uorder,V1,V2,Vstride,Vorder,Points) ->
%% @doc glMap
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMap.xml">external</a> documentation.
--spec map2f(Target, U1, U2, Ustride, Uorder, V1, V2, Vstride, Vorder, Points) -> ok when Target :: enum(),U1 :: float(),U2 :: float(),Ustride :: integer(),Uorder :: integer(),V1 :: float(),V2 :: float(),Vstride :: integer(),Vorder :: integer(),Points :: binary().
+-spec map2f(Target, U1, U2, Ustride, Uorder, V1, V2, Vstride, Vorder, Points) -> 'ok' when Target :: enum(),U1 :: float(),U2 :: float(),Ustride :: integer(),Uorder :: integer(),V1 :: float(),V2 :: float(),Vstride :: integer(),Vorder :: integer(),Points :: binary().
map2f(Target,U1,U2,Ustride,Uorder,V1,V2,Vstride,Vorder,Points) ->
send_bin(Points),
cast(5288, <<Target:?GLenum,U1:?GLfloat,U2:?GLfloat,Ustride:?GLint,Uorder:?GLint,V1:?GLfloat,V2:?GLfloat,Vstride:?GLint,Vorder:?GLint>>).
@@ -7278,21 +7278,21 @@ map2f(Target,U1,U2,Ustride,Uorder,V1,V2,Vstride,Vorder,Points) ->
%% to the nearest integer values.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetMap.xml">external</a> documentation.
--spec getMapdv(Target, Query, V) -> ok when Target :: enum(),Query :: enum(),V :: mem().
+-spec getMapdv(Target, Query, V) -> 'ok' when Target :: enum(),Query :: enum(),V :: mem().
getMapdv(Target,Query,V) ->
send_bin(V),
call(5289, <<Target:?GLenum,Query:?GLenum>>).
%% @doc
%% See {@link getMapdv/3}
--spec getMapfv(Target, Query, V) -> ok when Target :: enum(),Query :: enum(),V :: mem().
+-spec getMapfv(Target, Query, V) -> 'ok' when Target :: enum(),Query :: enum(),V :: mem().
getMapfv(Target,Query,V) ->
send_bin(V),
call(5290, <<Target:?GLenum,Query:?GLenum>>).
%% @doc
%% See {@link getMapdv/3}
--spec getMapiv(Target, Query, V) -> ok when Target :: enum(),Query :: enum(),V :: mem().
+-spec getMapiv(Target, Query, V) -> 'ok' when Target :: enum(),Query :: enum(),V :: mem().
getMapiv(Target,Query,V) ->
send_bin(V),
call(5291, <<Target:?GLenum,Query:?GLenum>>).
@@ -7343,42 +7343,42 @@ getMapiv(Target,Query,V) ->
%% a normal map is enabled, no normal is generated for ``gl:evalCoord2'' commands.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEvalCoord.xml">external</a> documentation.
--spec evalCoord1d(U) -> ok when U :: float().
+-spec evalCoord1d(U) -> 'ok' when U :: float().
evalCoord1d(U) ->
cast(5292, <<U:?GLdouble>>).
%% @doc
%% See {@link evalCoord1d/1}
--spec evalCoord1f(U) -> ok when U :: float().
+-spec evalCoord1f(U) -> 'ok' when U :: float().
evalCoord1f(U) ->
cast(5293, <<U:?GLfloat>>).
%% @equiv evalCoord1d(U)
--spec evalCoord1dv(U) -> ok when U :: {U :: float()}.
+-spec evalCoord1dv(U) -> 'ok' when U :: {U :: float()}.
evalCoord1dv({U}) -> evalCoord1d(U).
%% @equiv evalCoord1f(U)
--spec evalCoord1fv(U) -> ok when U :: {U :: float()}.
+-spec evalCoord1fv(U) -> 'ok' when U :: {U :: float()}.
evalCoord1fv({U}) -> evalCoord1f(U).
%% @doc
%% See {@link evalCoord1d/1}
--spec evalCoord2d(U, V) -> ok when U :: float(),V :: float().
+-spec evalCoord2d(U, V) -> 'ok' when U :: float(),V :: float().
evalCoord2d(U,V) ->
cast(5294, <<U:?GLdouble,V:?GLdouble>>).
%% @doc
%% See {@link evalCoord1d/1}
--spec evalCoord2f(U, V) -> ok when U :: float(),V :: float().
+-spec evalCoord2f(U, V) -> 'ok' when U :: float(),V :: float().
evalCoord2f(U,V) ->
cast(5295, <<U:?GLfloat,V:?GLfloat>>).
%% @equiv evalCoord2d(U,V)
--spec evalCoord2dv(U) -> ok when U :: {U :: float(),V :: float()}.
+-spec evalCoord2dv(U) -> 'ok' when U :: {U :: float(),V :: float()}.
evalCoord2dv({U,V}) -> evalCoord2d(U,V).
%% @equiv evalCoord2f(U,V)
--spec evalCoord2fv(U) -> ok when U :: {U :: float(),V :: float()}.
+-spec evalCoord2fv(U) -> 'ok' when U :: {U :: float(),V :: float()}.
evalCoord2fv({U,V}) -> evalCoord2f(U,V).
%% @doc Define a one- or two-dimensional mesh
@@ -7413,25 +7413,25 @@ evalCoord2fv({U,V}) -> evalCoord2f(U,V).
%% and {@link gl:evalPoint1/1} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMapGrid.xml">external</a> documentation.
--spec mapGrid1d(Un, U1, U2) -> ok when Un :: integer(),U1 :: float(),U2 :: float().
+-spec mapGrid1d(Un, U1, U2) -> 'ok' when Un :: integer(),U1 :: float(),U2 :: float().
mapGrid1d(Un,U1,U2) ->
cast(5296, <<Un:?GLint,0:32,U1:?GLdouble,U2:?GLdouble>>).
%% @doc
%% See {@link mapGrid1d/3}
--spec mapGrid1f(Un, U1, U2) -> ok when Un :: integer(),U1 :: float(),U2 :: float().
+-spec mapGrid1f(Un, U1, U2) -> 'ok' when Un :: integer(),U1 :: float(),U2 :: float().
mapGrid1f(Un,U1,U2) ->
cast(5297, <<Un:?GLint,U1:?GLfloat,U2:?GLfloat>>).
%% @doc
%% See {@link mapGrid1d/3}
--spec mapGrid2d(Un, U1, U2, Vn, V1, V2) -> ok when Un :: integer(),U1 :: float(),U2 :: float(),Vn :: integer(),V1 :: float(),V2 :: float().
+-spec mapGrid2d(Un, U1, U2, Vn, V1, V2) -> 'ok' when Un :: integer(),U1 :: float(),U2 :: float(),Vn :: integer(),V1 :: float(),V2 :: float().
mapGrid2d(Un,U1,U2,Vn,V1,V2) ->
cast(5298, <<Un:?GLint,0:32,U1:?GLdouble,U2:?GLdouble,Vn:?GLint,0:32,V1:?GLdouble,V2:?GLdouble>>).
%% @doc
%% See {@link mapGrid1d/3}
--spec mapGrid2f(Un, U1, U2, Vn, V1, V2) -> ok when Un :: integer(),U1 :: float(),U2 :: float(),Vn :: integer(),V1 :: float(),V2 :: float().
+-spec mapGrid2f(Un, U1, U2, Vn, V1, V2) -> 'ok' when Un :: integer(),U1 :: float(),U2 :: float(),Vn :: integer(),V1 :: float(),V2 :: float().
mapGrid2f(Un,U1,U2,Vn,V1,V2) ->
cast(5299, <<Un:?GLint,U1:?GLfloat,U2:?GLfloat,Vn:?GLint,V1:?GLfloat,V2:?GLfloat>>).
@@ -7460,13 +7460,13 @@ mapGrid2f(Un,U1,U2,Vn,V1,V2) ->
%% if j=m, then the value computed from j.&amp;Delta; v+v 1 is exactly v 2.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEvalPoint.xml">external</a> documentation.
--spec evalPoint1(I) -> ok when I :: integer().
+-spec evalPoint1(I) -> 'ok' when I :: integer().
evalPoint1(I) ->
cast(5300, <<I:?GLint>>).
%% @doc
%% See {@link evalPoint1/1}
--spec evalPoint2(I, J) -> ok when I :: integer(),J :: integer().
+-spec evalPoint2(I, J) -> 'ok' when I :: integer(),J :: integer().
evalPoint2(I,J) ->
cast(5301, <<I:?GLint,J:?GLint>>).
@@ -7525,13 +7525,13 @@ evalPoint2(I,J) ->
%% computed from j.&amp;Delta; v+v 1 is exactly v 2.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEvalMesh.xml">external</a> documentation.
--spec evalMesh1(Mode, I1, I2) -> ok when Mode :: enum(),I1 :: integer(),I2 :: integer().
+-spec evalMesh1(Mode, I1, I2) -> 'ok' when Mode :: enum(),I1 :: integer(),I2 :: integer().
evalMesh1(Mode,I1,I2) ->
cast(5302, <<Mode:?GLenum,I1:?GLint,I2:?GLint>>).
%% @doc
%% See {@link evalMesh1/3}
--spec evalMesh2(Mode, I1, I2, J1, J2) -> ok when Mode :: enum(),I1 :: integer(),I2 :: integer(),J1 :: integer(),J2 :: integer().
+-spec evalMesh2(Mode, I1, I2, J1, J2) -> 'ok' when Mode :: enum(),I1 :: integer(),I2 :: integer(),J1 :: integer(),J2 :: integer().
evalMesh2(Mode,I1,I2,J1,J2) ->
cast(5303, <<Mode:?GLenum,I1:?GLint,I2:?GLint,J1:?GLint,J2:?GLint>>).
@@ -7601,26 +7601,26 @@ evalMesh2(Mode,I1,I2,J1,J2) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFog.xml">external</a> documentation.
--spec fogf(Pname, Param) -> ok when Pname :: enum(),Param :: float().
+-spec fogf(Pname, Param) -> 'ok' when Pname :: enum(),Param :: float().
fogf(Pname,Param) ->
cast(5304, <<Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link fogf/2}
--spec fogi(Pname, Param) -> ok when Pname :: enum(),Param :: integer().
+-spec fogi(Pname, Param) -> 'ok' when Pname :: enum(),Param :: integer().
fogi(Pname,Param) ->
cast(5305, <<Pname:?GLenum,Param:?GLint>>).
%% @doc
%% See {@link fogf/2}
--spec fogfv(Pname, Params) -> ok when Pname :: enum(),Params :: tuple().
+-spec fogfv(Pname, Params) -> 'ok' when Pname :: enum(),Params :: tuple().
fogfv(Pname,Params) ->
cast(5306, <<Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Params)>>)/binary,0:(((0+size(Params)) rem 2)*32)>>).
%% @doc
%% See {@link fogf/2}
--spec fogiv(Pname, Params) -> ok when Pname :: enum(),Params :: tuple().
+-spec fogiv(Pname, Params) -> 'ok' when Pname :: enum(),Params :: tuple().
fogiv(Pname,Params) ->
cast(5307, <<Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((0+size(Params)) rem 2)*32)>>).
@@ -7733,7 +7733,7 @@ fogiv(Pname,Params) ->
%% by the texture matrix.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFeedbackBuffer.xml">external</a> documentation.
--spec feedbackBuffer(Size, Type, Buffer) -> ok when Size :: integer(),Type :: enum(),Buffer :: mem().
+-spec feedbackBuffer(Size, Type, Buffer) -> 'ok' when Size :: integer(),Type :: enum(),Buffer :: mem().
feedbackBuffer(Size,Type,Buffer) ->
send_bin(Buffer),
call(5308, <<Size:?GLsizei,Type:?GLenum>>).
@@ -7752,7 +7752,7 @@ feedbackBuffer(Size,Type,Buffer) ->
%% commands with respect to the specification of graphics primitives is maintained.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPassThrough.xml">external</a> documentation.
--spec passThrough(Token) -> ok when Token :: float().
+-spec passThrough(Token) -> 'ok' when Token :: float().
passThrough(Token) ->
cast(5309, <<Token:?GLfloat>>).
@@ -7797,7 +7797,7 @@ passThrough(Token) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSelectBuffer.xml">external</a> documentation.
--spec selectBuffer(Size, Buffer) -> ok when Size :: integer(),Buffer :: mem().
+-spec selectBuffer(Size, Buffer) -> 'ok' when Size :: integer(),Buffer :: mem().
selectBuffer(Size,Buffer) ->
send_bin(Buffer),
call(5310, <<Size:?GLsizei>>).
@@ -7812,7 +7812,7 @@ selectBuffer(Size,Buffer) ->
%% while the render mode is not `?GL_SELECT' are ignored.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glInitNames.xml">external</a> documentation.
--spec initNames() -> ok.
+-spec initNames() -> 'ok'.
initNames() ->
cast(5311, <<>>).
@@ -7828,7 +7828,7 @@ initNames() ->
%% while the render mode is not `?GL_SELECT' are ignored.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLoadName.xml">external</a> documentation.
--spec loadName(Name) -> ok when Name :: integer().
+-spec loadName(Name) -> 'ok' when Name :: integer().
loadName(Name) ->
cast(5312, <<Name:?GLuint>>).
@@ -7852,13 +7852,13 @@ loadName(Name) ->
%% or {@link gl:pushName/1} while the render mode is not `?GL_SELECT' are ignored.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPushName.xml">external</a> documentation.
--spec pushName(Name) -> ok when Name :: integer().
+-spec pushName(Name) -> 'ok' when Name :: integer().
pushName(Name) ->
cast(5313, <<Name:?GLuint>>).
%% @doc
%% See {@link pushName/1}
--spec popName() -> ok.
+-spec popName() -> 'ok'.
popName() ->
cast(5314, <<>>).
@@ -7870,7 +7870,7 @@ popName() ->
%% is set to (0, 0, 0, 0).
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBlendColor.xml">external</a> documentation.
--spec blendColor(Red, Green, Blue, Alpha) -> ok when Red :: clamp(),Green :: clamp(),Blue :: clamp(),Alpha :: clamp().
+-spec blendColor(Red, Green, Blue, Alpha) -> 'ok' when Red :: clamp(),Green :: clamp(),Blue :: clamp(),Alpha :: clamp().
blendColor(Red,Green,Blue,Alpha) ->
cast(5315, <<Red:?GLclampf,Green:?GLclampf,Blue:?GLclampf,Alpha:?GLclampf>>).
@@ -7911,7 +7911,7 @@ blendColor(Red,Green,Blue,Alpha) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBlendEquation.xml">external</a> documentation.
--spec blendEquation(Mode) -> ok when Mode :: enum().
+-spec blendEquation(Mode) -> 'ok' when Mode :: enum().
blendEquation(Mode) ->
cast(5316, <<Mode:?GLenum>>).
@@ -7940,7 +7940,7 @@ blendEquation(Mode) ->
%% their previous values.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawRangeElements.xml">external</a> documentation.
--spec drawRangeElements(Mode, Start, End, Count, Type, Indices) -> ok when Mode :: enum(),Start :: integer(),End :: integer(),Count :: integer(),Type :: enum(),Indices :: offset()|mem().
+-spec drawRangeElements(Mode, Start, End, Count, Type, Indices) -> 'ok' when Mode :: enum(),Start :: integer(),End :: integer(),Count :: integer(),Type :: enum(),Indices :: offset()|mem().
drawRangeElements(Mode,Start,End,Count,Type,Indices) when is_integer(Indices) ->
cast(5317, <<Mode:?GLenum,Start:?GLuint,End:?GLuint,Count:?GLsizei,Type:?GLenum,Indices:?GLuint>>);
drawRangeElements(Mode,Start,End,Count,Type,Indices) ->
@@ -8048,7 +8048,7 @@ drawRangeElements(Mode,Start,End,Count,Type,Indices) ->
%% uses the R, G, and B values. A four-component image uses all of the RGBA components.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexImage3D.xml">external</a> documentation.
--spec texImage3D(Target, Level, InternalFormat, Width, Height, Depth, Border, Format, Type, Pixels) -> ok when Target :: enum(),Level :: integer(),InternalFormat :: integer(),Width :: integer(),Height :: integer(),Depth :: integer(),Border :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
+-spec texImage3D(Target, Level, InternalFormat, Width, Height, Depth, Border, Format, Type, Pixels) -> 'ok' when Target :: enum(),Level :: integer(),InternalFormat :: integer(),Width :: integer(),Height :: integer(),Depth :: integer(),Border :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
texImage3D(Target,Level,InternalFormat,Width,Height,Depth,Border,Format,Type,Pixels) when is_integer(Pixels) ->
cast(5319, <<Target:?GLenum,Level:?GLint,InternalFormat:?GLint,Width:?GLsizei,Height:?GLsizei,Depth:?GLsizei,Border:?GLint,Format:?GLenum,Type:?GLenum,Pixels:?GLuint>>);
texImage3D(Target,Level,InternalFormat,Width,Height,Depth,Border,Format,Type,Pixels) ->
@@ -8058,7 +8058,7 @@ texImage3D(Target,Level,InternalFormat,Width,Height,Depth,Border,Format,Type,Pix
%% @doc glTexSubImage
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexSubImage.xml">external</a> documentation.
--spec texSubImage3D(Target, Level, Xoffset, Yoffset, Zoffset, Width, Height, Depth, Format, Type, Pixels) -> ok when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Zoffset :: integer(),Width :: integer(),Height :: integer(),Depth :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
+-spec texSubImage3D(Target, Level, Xoffset, Yoffset, Zoffset, Width, Height, Depth, Format, Type, Pixels) -> 'ok' when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Zoffset :: integer(),Width :: integer(),Height :: integer(),Depth :: integer(),Format :: enum(),Type :: enum(),Pixels :: offset()|mem().
texSubImage3D(Target,Level,Xoffset,Yoffset,Zoffset,Width,Height,Depth,Format,Type,Pixels) when is_integer(Pixels) ->
cast(5321, <<Target:?GLenum,Level:?GLint,Xoffset:?GLint,Yoffset:?GLint,Zoffset:?GLint,Width:?GLsizei,Height:?GLsizei,Depth:?GLsizei,Format:?GLenum,Type:?GLenum,Pixels:?GLuint>>);
texSubImage3D(Target,Level,Xoffset,Yoffset,Zoffset,Width,Height,Depth,Format,Type,Pixels) ->
@@ -8095,7 +8095,7 @@ texSubImage3D(Target,Level,Xoffset,Yoffset,Zoffset,Width,Height,Depth,Format,Typ
%% the specified subregion.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyTexSubImage3D.xml">external</a> documentation.
--spec copyTexSubImage3D(Target, Level, Xoffset, Yoffset, Zoffset, X, Y, Width, Height) -> ok when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Zoffset :: integer(),X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
+-spec copyTexSubImage3D(Target, Level, Xoffset, Yoffset, Zoffset, X, Y, Width, Height) -> 'ok' when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Zoffset :: integer(),X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
copyTexSubImage3D(Target,Level,Xoffset,Yoffset,Zoffset,X,Y,Width,Height) ->
cast(5323, <<Target:?GLenum,Level:?GLint,Xoffset:?GLint,Yoffset:?GLint,Zoffset:?GLint,X:?GLint,Y:?GLint,Width:?GLsizei,Height:?GLsizei>>).
@@ -8195,7 +8195,7 @@ copyTexSubImage3D(Target,Level,Xoffset,Yoffset,Zoffset,X,Y,Width,Height) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glColorTable.xml">external</a> documentation.
--spec colorTable(Target, Internalformat, Width, Format, Type, Table) -> ok when Target :: enum(),Internalformat :: enum(),Width :: integer(),Format :: enum(),Type :: enum(),Table :: offset()|mem().
+-spec colorTable(Target, Internalformat, Width, Format, Type, Table) -> 'ok' when Target :: enum(),Internalformat :: enum(),Width :: integer(),Format :: enum(),Type :: enum(),Table :: offset()|mem().
colorTable(Target,Internalformat,Width,Format,Type,Table) when is_integer(Table) ->
cast(5324, <<Target:?GLenum,Internalformat:?GLenum,Width:?GLsizei,Format:?GLenum,Type:?GLenum,Table:?GLuint>>);
colorTable(Target,Internalformat,Width,Format,Type,Table) ->
@@ -8220,13 +8220,13 @@ colorTable(Target,Internalformat,Width,Format,Type,Table) ->
%% The color tables themselves are specified by calling {@link gl:colorTable/6} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glColorTableParameter.xml">external</a> documentation.
--spec colorTableParameterfv(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: {float(),float(),float(),float()}.
+-spec colorTableParameterfv(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: {float(),float(),float(),float()}.
colorTableParameterfv(Target,Pname,{P1,P2,P3,P4}) ->
cast(5326, <<Target:?GLenum,Pname:?GLenum,P1:?GLfloat,P2:?GLfloat,P3:?GLfloat,P4:?GLfloat>>).
%% @doc
%% See {@link colorTableParameterfv/3}
--spec colorTableParameteriv(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: {integer(),integer(),integer(),integer()}.
+-spec colorTableParameteriv(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: {integer(),integer(),integer(),integer()}.
colorTableParameteriv(Target,Pname,{P1,P2,P3,P4}) ->
cast(5327, <<Target:?GLenum,Pname:?GLenum,P1:?GLint,P2:?GLint,P3:?GLint,P4:?GLint>>).
@@ -8270,7 +8270,7 @@ colorTableParameteriv(Target,Pname,{P1,P2,P3,P4}) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyColorTable.xml">external</a> documentation.
--spec copyColorTable(Target, Internalformat, X, Y, Width) -> ok when Target :: enum(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer().
+-spec copyColorTable(Target, Internalformat, X, Y, Width) -> 'ok' when Target :: enum(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer().
copyColorTable(Target,Internalformat,X,Y,Width) ->
cast(5328, <<Target:?GLenum,Internalformat:?GLenum,X:?GLint,Y:?GLint,Width:?GLsizei>>).
@@ -8295,7 +8295,7 @@ copyColorTable(Target,Internalformat,X,Y,Width) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetColorTable.xml">external</a> documentation.
--spec getColorTable(Target, Format, Type, Table) -> ok when Target :: enum(),Format :: enum(),Type :: enum(),Table :: mem().
+-spec getColorTable(Target, Format, Type, Table) -> 'ok' when Target :: enum(),Format :: enum(),Type :: enum(),Table :: mem().
getColorTable(Target,Format,Type,Table) ->
send_bin(Table),
call(5329, <<Target:?GLenum,Format:?GLenum,Type:?GLenum>>).
@@ -8358,7 +8358,7 @@ getColorTableParameteriv(Target,Pname) ->
%% is treated as a byte offset into the buffer object's data store.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glColorSubTable.xml">external</a> documentation.
--spec colorSubTable(Target, Start, Count, Format, Type, Data) -> ok when Target :: enum(),Start :: integer(),Count :: integer(),Format :: enum(),Type :: enum(),Data :: offset()|mem().
+-spec colorSubTable(Target, Start, Count, Format, Type, Data) -> 'ok' when Target :: enum(),Start :: integer(),Count :: integer(),Format :: enum(),Type :: enum(),Data :: offset()|mem().
colorSubTable(Target,Start,Count,Format,Type,Data) when is_integer(Data) ->
cast(5332, <<Target:?GLenum,Start:?GLsizei,Count:?GLsizei,Format:?GLenum,Type:?GLenum,Data:?GLuint>>);
colorSubTable(Target,Start,Count,Format,Type,Data) ->
@@ -8375,7 +8375,7 @@ colorSubTable(Target,Start,Count,Format,Type,Data) ->
%% has no effect.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyColorSubTable.xml">external</a> documentation.
--spec copyColorSubTable(Target, Start, X, Y, Width) -> ok when Target :: enum(),Start :: integer(),X :: integer(),Y :: integer(),Width :: integer().
+-spec copyColorSubTable(Target, Start, X, Y, Width) -> 'ok' when Target :: enum(),Start :: integer(),X :: integer(),Y :: integer(),Width :: integer().
copyColorSubTable(Target,Start,X,Y,Width) ->
cast(5334, <<Target:?GLenum,Start:?GLsizei,X:?GLint,Y:?GLint,Width:?GLsizei>>).
@@ -8428,7 +8428,7 @@ copyColorSubTable(Target,Start,X,Y,Width) ->
%% set by {@link gl:pixelTransferf/2} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glConvolutionFilter1D.xml">external</a> documentation.
--spec convolutionFilter1D(Target, Internalformat, Width, Format, Type, Image) -> ok when Target :: enum(),Internalformat :: enum(),Width :: integer(),Format :: enum(),Type :: enum(),Image :: offset()|mem().
+-spec convolutionFilter1D(Target, Internalformat, Width, Format, Type, Image) -> 'ok' when Target :: enum(),Internalformat :: enum(),Width :: integer(),Format :: enum(),Type :: enum(),Image :: offset()|mem().
convolutionFilter1D(Target,Internalformat,Width,Format,Type,Image) when is_integer(Image) ->
cast(5335, <<Target:?GLenum,Internalformat:?GLenum,Width:?GLsizei,Format:?GLenum,Type:?GLenum,Image:?GLuint>>);
convolutionFilter1D(Target,Internalformat,Width,Format,Type,Image) ->
@@ -8485,7 +8485,7 @@ convolutionFilter1D(Target,Internalformat,Width,Format,Type,Image) ->
%% set by {@link gl:pixelTransferf/2} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glConvolutionFilter2D.xml">external</a> documentation.
--spec convolutionFilter2D(Target, Internalformat, Width, Height, Format, Type, Image) -> ok when Target :: enum(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Image :: offset()|mem().
+-spec convolutionFilter2D(Target, Internalformat, Width, Height, Format, Type, Image) -> 'ok' when Target :: enum(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Image :: offset()|mem().
convolutionFilter2D(Target,Internalformat,Width,Height,Format,Type,Image) when is_integer(Image) ->
cast(5337, <<Target:?GLenum,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei,Format:?GLenum,Type:?GLenum,Image:?GLuint>>);
convolutionFilter2D(Target,Internalformat,Width,Height,Format,Type,Image) ->
@@ -8526,24 +8526,24 @@ convolutionFilter2D(Target,Internalformat,Width,Height,Format,Type,Image) ->
%% image were replicated.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glConvolutionParameter.xml">external</a> documentation.
--spec convolutionParameterf(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: tuple().
+-spec convolutionParameterf(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: tuple().
convolutionParameterf(Target,Pname,Params) ->
cast(5339, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
%% @equiv convolutionParameterf(Target,Pname,Params)
--spec convolutionParameterfv(Target :: enum(),Pname :: enum(),Params) -> ok when Params :: {Params :: tuple()}.
+-spec convolutionParameterfv(Target :: enum(),Pname :: enum(),Params) -> 'ok' when Params :: {Params :: tuple()}.
convolutionParameterfv(Target,Pname,{Params}) -> convolutionParameterf(Target,Pname,Params).
%% @doc
%% See {@link convolutionParameterf/3}
--spec convolutionParameteri(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: tuple().
+-spec convolutionParameteri(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: tuple().
convolutionParameteri(Target,Pname,Params) ->
cast(5340, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
%% @equiv convolutionParameteri(Target,Pname,Params)
--spec convolutionParameteriv(Target :: enum(),Pname :: enum(),Params) -> ok when Params :: {Params :: tuple()}.
+-spec convolutionParameteriv(Target :: enum(),Pname :: enum(),Params) -> 'ok' when Params :: {Params :: tuple()}.
convolutionParameteriv(Target,Pname,{Params}) -> convolutionParameteri(Target,Pname,Params).
%% @doc Copy pixels into a one-dimensional convolution filter
@@ -8595,7 +8595,7 @@ convolutionParameteriv(Target,Pname,{Params}) -> convolutionParameteri(Target,P
%% set by {@link gl:pixelTransferf/2} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyConvolutionFilter1D.xml">external</a> documentation.
--spec copyConvolutionFilter1D(Target, Internalformat, X, Y, Width) -> ok when Target :: enum(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer().
+-spec copyConvolutionFilter1D(Target, Internalformat, X, Y, Width) -> 'ok' when Target :: enum(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer().
copyConvolutionFilter1D(Target,Internalformat,X,Y,Width) ->
cast(5341, <<Target:?GLenum,Internalformat:?GLenum,X:?GLint,Y:?GLint,Width:?GLsizei>>).
@@ -8649,7 +8649,7 @@ copyConvolutionFilter1D(Target,Internalformat,X,Y,Width) ->
%% set by {@link gl:pixelTransferf/2} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyConvolutionFilter2D.xml">external</a> documentation.
--spec copyConvolutionFilter2D(Target, Internalformat, X, Y, Width, Height) -> ok when Target :: enum(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
+-spec copyConvolutionFilter2D(Target, Internalformat, X, Y, Width, Height) -> 'ok' when Target :: enum(),Internalformat :: enum(),X :: integer(),Y :: integer(),Width :: integer(),Height :: integer().
copyConvolutionFilter2D(Target,Internalformat,X,Y,Width,Height) ->
cast(5342, <<Target:?GLenum,Internalformat:?GLenum,X:?GLint,Y:?GLint,Width:?GLsizei,Height:?GLsizei>>).
@@ -8675,7 +8675,7 @@ copyConvolutionFilter2D(Target,Internalformat,X,Y,Width,Height) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetConvolutionFilter.xml">external</a> documentation.
--spec getConvolutionFilter(Target, Format, Type, Image) -> ok when Target :: enum(),Format :: enum(),Type :: enum(),Image :: mem().
+-spec getConvolutionFilter(Target, Format, Type, Image) -> 'ok' when Target :: enum(),Format :: enum(),Type :: enum(),Image :: mem().
getConvolutionFilter(Target,Format,Type,Image) ->
send_bin(Image),
call(5343, <<Target:?GLenum,Format:?GLenum,Type:?GLenum>>).
@@ -8775,7 +8775,7 @@ getConvolutionParameteriv(Target,Pname) ->
%% set by {@link gl:pixelTransferf/2} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSeparableFilter2D.xml">external</a> documentation.
--spec separableFilter2D(Target, Internalformat, Width, Height, Format, Type, Row, Column) -> ok when Target :: enum(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Row :: offset()|mem(),Column :: offset()|mem().
+-spec separableFilter2D(Target, Internalformat, Width, Height, Format, Type, Row, Column) -> 'ok' when Target :: enum(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Format :: enum(),Type :: enum(),Row :: offset()|mem(),Column :: offset()|mem().
separableFilter2D(Target,Internalformat,Width,Height,Format,Type,Row,Column) when is_integer(Row), is_integer(Column) ->
cast(5346, <<Target:?GLenum,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei,Format:?GLenum,Type:?GLenum,Row:?GLuint,Column:?GLuint>>);
separableFilter2D(Target,Internalformat,Width,Height,Format,Type,Row,Column) ->
@@ -8804,7 +8804,7 @@ separableFilter2D(Target,Internalformat,Width,Height,Format,Type,Row,Column) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetHistogram.xml">external</a> documentation.
--spec getHistogram(Target, Reset, Format, Type, Values) -> ok when Target :: enum(),Reset :: 0|1,Format :: enum(),Type :: enum(),Values :: mem().
+-spec getHistogram(Target, Reset, Format, Type, Values) -> 'ok' when Target :: enum(),Reset :: 0|1,Format :: enum(),Type :: enum(),Values :: mem().
getHistogram(Target,Reset,Format,Type,Values) ->
send_bin(Values),
call(5348, <<Target:?GLenum,Reset:?GLboolean,0:24,Format:?GLenum,Type:?GLenum>>).
@@ -8868,7 +8868,7 @@ getHistogramParameteriv(Target,Pname) ->
%% are not modified, even if `Reset' is `?GL_TRUE'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetMinmax.xml">external</a> documentation.
--spec getMinmax(Target, Reset, Format, Types, Values) -> ok when Target :: enum(),Reset :: 0|1,Format :: enum(),Types :: enum(),Values :: mem().
+-spec getMinmax(Target, Reset, Format, Types, Values) -> 'ok' when Target :: enum(),Reset :: 0|1,Format :: enum(),Types :: enum(),Values :: mem().
getMinmax(Target,Reset,Format,Types,Values) ->
send_bin(Values),
call(5351, <<Target:?GLenum,Reset:?GLboolean,0:24,Format:?GLenum,Types:?GLenum>>).
@@ -8926,7 +8926,7 @@ getMinmaxParameteriv(Target,Pname) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glHistogram.xml">external</a> documentation.
--spec histogram(Target, Width, Internalformat, Sink) -> ok when Target :: enum(),Width :: integer(),Internalformat :: enum(),Sink :: 0|1.
+-spec histogram(Target, Width, Internalformat, Sink) -> 'ok' when Target :: enum(),Width :: integer(),Internalformat :: enum(),Sink :: 0|1.
histogram(Target,Width,Internalformat,Sink) ->
cast(5354, <<Target:?GLenum,Width:?GLsizei,Internalformat:?GLenum,Sink:?GLboolean>>).
@@ -8955,7 +8955,7 @@ histogram(Target,Width,Internalformat,Sink) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMinmax.xml">external</a> documentation.
--spec minmax(Target, Internalformat, Sink) -> ok when Target :: enum(),Internalformat :: enum(),Sink :: 0|1.
+-spec minmax(Target, Internalformat, Sink) -> 'ok' when Target :: enum(),Internalformat :: enum(),Sink :: 0|1.
minmax(Target,Internalformat,Sink) ->
cast(5355, <<Target:?GLenum,Internalformat:?GLenum,Sink:?GLboolean>>).
@@ -8964,7 +8964,7 @@ minmax(Target,Internalformat,Sink) ->
%% ``gl:resetHistogram'' resets all the elements of the current histogram table to zero.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glResetHistogram.xml">external</a> documentation.
--spec resetHistogram(Target) -> ok when Target :: enum().
+-spec resetHistogram(Target) -> 'ok' when Target :: enum().
resetHistogram(Target) ->
cast(5356, <<Target:?GLenum>>).
@@ -8975,7 +8975,7 @@ resetHistogram(Target) ->
%% ``minimum'' element receives the maximum possible component values.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glResetMinmax.xml">external</a> documentation.
--spec resetMinmax(Target) -> ok when Target :: enum().
+-spec resetMinmax(Target) -> 'ok' when Target :: enum().
resetMinmax(Target) ->
cast(5357, <<Target:?GLenum>>).
@@ -8986,7 +8986,7 @@ resetMinmax(Target) ->
%% but must be at least 80.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glActiveTexture.xml">external</a> documentation.
--spec activeTexture(Texture) -> ok when Texture :: enum().
+-spec activeTexture(Texture) -> 'ok' when Texture :: enum().
activeTexture(Texture) ->
cast(5358, <<Texture:?GLenum>>).
@@ -9012,7 +9012,7 @@ activeTexture(Texture) ->
%% on each sample.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSampleCoverage.xml">external</a> documentation.
--spec sampleCoverage(Value, Invert) -> ok when Value :: clamp(),Invert :: 0|1.
+-spec sampleCoverage(Value, Invert) -> 'ok' when Value :: clamp(),Invert :: 0|1.
sampleCoverage(Value,Invert) ->
cast(5359, <<Value:?GLclampf,Invert:?GLboolean>>).
@@ -9070,7 +9070,7 @@ sampleCoverage(Value,Invert) ->
%% b s×|width b/w|×|height b/h|×|depth b/d|
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompressedTexImage3D.xml">external</a> documentation.
--spec compressedTexImage3D(Target, Level, Internalformat, Width, Height, Depth, Border, ImageSize, Data) -> ok when Target :: enum(),Level :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Depth :: integer(),Border :: integer(),ImageSize :: integer(),Data :: offset()|mem().
+-spec compressedTexImage3D(Target, Level, Internalformat, Width, Height, Depth, Border, ImageSize, Data) -> 'ok' when Target :: enum(),Level :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Depth :: integer(),Border :: integer(),ImageSize :: integer(),Data :: offset()|mem().
compressedTexImage3D(Target,Level,Internalformat,Width,Height,Depth,Border,ImageSize,Data) when is_integer(Data) ->
cast(5360, <<Target:?GLenum,Level:?GLint,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei,Depth:?GLsizei,Border:?GLint,ImageSize:?GLsizei,Data:?GLuint>>);
compressedTexImage3D(Target,Level,Internalformat,Width,Height,Depth,Border,ImageSize,Data) ->
@@ -9132,7 +9132,7 @@ compressedTexImage3D(Target,Level,Internalformat,Width,Height,Depth,Border,Image
%% b s×|width b/w|×|height b/h|
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompressedTexImage2D.xml">external</a> documentation.
--spec compressedTexImage2D(Target, Level, Internalformat, Width, Height, Border, ImageSize, Data) -> ok when Target :: enum(),Level :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Border :: integer(),ImageSize :: integer(),Data :: offset()|mem().
+-spec compressedTexImage2D(Target, Level, Internalformat, Width, Height, Border, ImageSize, Data) -> 'ok' when Target :: enum(),Level :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Border :: integer(),ImageSize :: integer(),Data :: offset()|mem().
compressedTexImage2D(Target,Level,Internalformat,Width,Height,Border,ImageSize,Data) when is_integer(Data) ->
cast(5362, <<Target:?GLenum,Level:?GLint,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei,Border:?GLint,ImageSize:?GLsizei,Data:?GLuint>>);
compressedTexImage2D(Target,Level,Internalformat,Width,Height,Border,ImageSize,Data) ->
@@ -9189,7 +9189,7 @@ compressedTexImage2D(Target,Level,Internalformat,Width,Height,Border,ImageSize,D
%% b s×|width b/w|
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompressedTexImage1D.xml">external</a> documentation.
--spec compressedTexImage1D(Target, Level, Internalformat, Width, Border, ImageSize, Data) -> ok when Target :: enum(),Level :: integer(),Internalformat :: enum(),Width :: integer(),Border :: integer(),ImageSize :: integer(),Data :: offset()|mem().
+-spec compressedTexImage1D(Target, Level, Internalformat, Width, Border, ImageSize, Data) -> 'ok' when Target :: enum(),Level :: integer(),Internalformat :: enum(),Width :: integer(),Border :: integer(),ImageSize :: integer(),Data :: offset()|mem().
compressedTexImage1D(Target,Level,Internalformat,Width,Border,ImageSize,Data) when is_integer(Data) ->
cast(5364, <<Target:?GLenum,Level:?GLint,Internalformat:?GLenum,Width:?GLsizei,Border:?GLint,ImageSize:?GLsizei,Data:?GLuint>>);
compressedTexImage1D(Target,Level,Internalformat,Width,Border,ImageSize,Data) ->
@@ -9219,7 +9219,7 @@ compressedTexImage1D(Target,Level,Internalformat,Width,Border,ImageSize,Data) ->
%% as a byte offset into the buffer object's data store.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompressedTexSubImage3D.xml">external</a> documentation.
--spec compressedTexSubImage3D(Target, Level, Xoffset, Yoffset, Zoffset, Width, Height, Depth, Format, ImageSize, Data) -> ok when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Zoffset :: integer(),Width :: integer(),Height :: integer(),Depth :: integer(),Format :: enum(),ImageSize :: integer(),Data :: offset()|mem().
+-spec compressedTexSubImage3D(Target, Level, Xoffset, Yoffset, Zoffset, Width, Height, Depth, Format, ImageSize, Data) -> 'ok' when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Zoffset :: integer(),Width :: integer(),Height :: integer(),Depth :: integer(),Format :: enum(),ImageSize :: integer(),Data :: offset()|mem().
compressedTexSubImage3D(Target,Level,Xoffset,Yoffset,Zoffset,Width,Height,Depth,Format,ImageSize,Data) when is_integer(Data) ->
cast(5366, <<Target:?GLenum,Level:?GLint,Xoffset:?GLint,Yoffset:?GLint,Zoffset:?GLint,Width:?GLsizei,Height:?GLsizei,Depth:?GLsizei,Format:?GLenum,ImageSize:?GLsizei,Data:?GLuint>>);
compressedTexSubImage3D(Target,Level,Xoffset,Yoffset,Zoffset,Width,Height,Depth,Format,ImageSize,Data) ->
@@ -9248,7 +9248,7 @@ compressedTexSubImage3D(Target,Level,Xoffset,Yoffset,Zoffset,Width,Height,Depth,
%% as a byte offset into the buffer object's data store.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompressedTexSubImage2D.xml">external</a> documentation.
--spec compressedTexSubImage2D(Target, Level, Xoffset, Yoffset, Width, Height, Format, ImageSize, Data) -> ok when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Width :: integer(),Height :: integer(),Format :: enum(),ImageSize :: integer(),Data :: offset()|mem().
+-spec compressedTexSubImage2D(Target, Level, Xoffset, Yoffset, Width, Height, Format, ImageSize, Data) -> 'ok' when Target :: enum(),Level :: integer(),Xoffset :: integer(),Yoffset :: integer(),Width :: integer(),Height :: integer(),Format :: enum(),ImageSize :: integer(),Data :: offset()|mem().
compressedTexSubImage2D(Target,Level,Xoffset,Yoffset,Width,Height,Format,ImageSize,Data) when is_integer(Data) ->
cast(5368, <<Target:?GLenum,Level:?GLint,Xoffset:?GLint,Yoffset:?GLint,Width:?GLsizei,Height:?GLsizei,Format:?GLenum,ImageSize:?GLsizei,Data:?GLuint>>);
compressedTexSubImage2D(Target,Level,Xoffset,Yoffset,Width,Height,Format,ImageSize,Data) ->
@@ -9277,7 +9277,7 @@ compressedTexSubImage2D(Target,Level,Xoffset,Yoffset,Width,Height,Format,ImageSi
%% as a byte offset into the buffer object's data store.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompressedTexSubImage1D.xml">external</a> documentation.
--spec compressedTexSubImage1D(Target, Level, Xoffset, Width, Format, ImageSize, Data) -> ok when Target :: enum(),Level :: integer(),Xoffset :: integer(),Width :: integer(),Format :: enum(),ImageSize :: integer(),Data :: offset()|mem().
+-spec compressedTexSubImage1D(Target, Level, Xoffset, Width, Format, ImageSize, Data) -> 'ok' when Target :: enum(),Level :: integer(),Xoffset :: integer(),Width :: integer(),Format :: enum(),ImageSize :: integer(),Data :: offset()|mem().
compressedTexSubImage1D(Target,Level,Xoffset,Width,Format,ImageSize,Data) when is_integer(Data) ->
cast(5370, <<Target:?GLenum,Level:?GLint,Xoffset:?GLint,Width:?GLsizei,Format:?GLenum,ImageSize:?GLsizei,Data:?GLuint>>);
compressedTexSubImage1D(Target,Level,Xoffset,Width,Format,ImageSize,Data) ->
@@ -9307,7 +9307,7 @@ compressedTexSubImage1D(Target,Level,Xoffset,Width,Format,ImageSize,Data) ->
%% loading routine used for loading `Target' textures.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetCompressedTexImage.xml">external</a> documentation.
--spec getCompressedTexImage(Target, Lod, Img) -> ok when Target :: enum(),Lod :: integer(),Img :: mem().
+-spec getCompressedTexImage(Target, Lod, Img) -> 'ok' when Target :: enum(),Lod :: integer(),Img :: mem().
getCompressedTexImage(Target,Lod,Img) ->
send_bin(Img),
call(5372, <<Target:?GLenum,Lod:?GLint>>).
@@ -9320,7 +9320,7 @@ getCompressedTexImage(Target,Lod,Img) ->
%% .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClientActiveTexture.xml">external</a> documentation.
--spec clientActiveTexture(Texture) -> ok when Texture :: enum().
+-spec clientActiveTexture(Texture) -> 'ok' when Texture :: enum().
clientActiveTexture(Texture) ->
cast(5373, <<Texture:?GLenum>>).
@@ -9338,162 +9338,162 @@ clientActiveTexture(Texture) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml">external</a> documentation.
--spec multiTexCoord1d(Target, S) -> ok when Target :: enum(),S :: float().
+-spec multiTexCoord1d(Target, S) -> 'ok' when Target :: enum(),S :: float().
multiTexCoord1d(Target,S) ->
cast(5374, <<Target:?GLenum,0:32,S:?GLdouble>>).
%% @equiv multiTexCoord1d(Target,S)
--spec multiTexCoord1dv(Target :: enum(),V) -> ok when V :: {S :: float()}.
+-spec multiTexCoord1dv(Target :: enum(),V) -> 'ok' when V :: {S :: float()}.
multiTexCoord1dv(Target,{S}) -> multiTexCoord1d(Target,S).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord1f(Target, S) -> ok when Target :: enum(),S :: float().
+-spec multiTexCoord1f(Target, S) -> 'ok' when Target :: enum(),S :: float().
multiTexCoord1f(Target,S) ->
cast(5375, <<Target:?GLenum,S:?GLfloat>>).
%% @equiv multiTexCoord1f(Target,S)
--spec multiTexCoord1fv(Target :: enum(),V) -> ok when V :: {S :: float()}.
+-spec multiTexCoord1fv(Target :: enum(),V) -> 'ok' when V :: {S :: float()}.
multiTexCoord1fv(Target,{S}) -> multiTexCoord1f(Target,S).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord1i(Target, S) -> ok when Target :: enum(),S :: integer().
+-spec multiTexCoord1i(Target, S) -> 'ok' when Target :: enum(),S :: integer().
multiTexCoord1i(Target,S) ->
cast(5376, <<Target:?GLenum,S:?GLint>>).
%% @equiv multiTexCoord1i(Target,S)
--spec multiTexCoord1iv(Target :: enum(),V) -> ok when V :: {S :: integer()}.
+-spec multiTexCoord1iv(Target :: enum(),V) -> 'ok' when V :: {S :: integer()}.
multiTexCoord1iv(Target,{S}) -> multiTexCoord1i(Target,S).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord1s(Target, S) -> ok when Target :: enum(),S :: integer().
+-spec multiTexCoord1s(Target, S) -> 'ok' when Target :: enum(),S :: integer().
multiTexCoord1s(Target,S) ->
cast(5377, <<Target:?GLenum,S:?GLshort>>).
%% @equiv multiTexCoord1s(Target,S)
--spec multiTexCoord1sv(Target :: enum(),V) -> ok when V :: {S :: integer()}.
+-spec multiTexCoord1sv(Target :: enum(),V) -> 'ok' when V :: {S :: integer()}.
multiTexCoord1sv(Target,{S}) -> multiTexCoord1s(Target,S).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord2d(Target, S, T) -> ok when Target :: enum(),S :: float(),T :: float().
+-spec multiTexCoord2d(Target, S, T) -> 'ok' when Target :: enum(),S :: float(),T :: float().
multiTexCoord2d(Target,S,T) ->
cast(5378, <<Target:?GLenum,0:32,S:?GLdouble,T:?GLdouble>>).
%% @equiv multiTexCoord2d(Target,S,T)
--spec multiTexCoord2dv(Target :: enum(),V) -> ok when V :: {S :: float(),T :: float()}.
+-spec multiTexCoord2dv(Target :: enum(),V) -> 'ok' when V :: {S :: float(),T :: float()}.
multiTexCoord2dv(Target,{S,T}) -> multiTexCoord2d(Target,S,T).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord2f(Target, S, T) -> ok when Target :: enum(),S :: float(),T :: float().
+-spec multiTexCoord2f(Target, S, T) -> 'ok' when Target :: enum(),S :: float(),T :: float().
multiTexCoord2f(Target,S,T) ->
cast(5379, <<Target:?GLenum,S:?GLfloat,T:?GLfloat>>).
%% @equiv multiTexCoord2f(Target,S,T)
--spec multiTexCoord2fv(Target :: enum(),V) -> ok when V :: {S :: float(),T :: float()}.
+-spec multiTexCoord2fv(Target :: enum(),V) -> 'ok' when V :: {S :: float(),T :: float()}.
multiTexCoord2fv(Target,{S,T}) -> multiTexCoord2f(Target,S,T).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord2i(Target, S, T) -> ok when Target :: enum(),S :: integer(),T :: integer().
+-spec multiTexCoord2i(Target, S, T) -> 'ok' when Target :: enum(),S :: integer(),T :: integer().
multiTexCoord2i(Target,S,T) ->
cast(5380, <<Target:?GLenum,S:?GLint,T:?GLint>>).
%% @equiv multiTexCoord2i(Target,S,T)
--spec multiTexCoord2iv(Target :: enum(),V) -> ok when V :: {S :: integer(),T :: integer()}.
+-spec multiTexCoord2iv(Target :: enum(),V) -> 'ok' when V :: {S :: integer(),T :: integer()}.
multiTexCoord2iv(Target,{S,T}) -> multiTexCoord2i(Target,S,T).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord2s(Target, S, T) -> ok when Target :: enum(),S :: integer(),T :: integer().
+-spec multiTexCoord2s(Target, S, T) -> 'ok' when Target :: enum(),S :: integer(),T :: integer().
multiTexCoord2s(Target,S,T) ->
cast(5381, <<Target:?GLenum,S:?GLshort,T:?GLshort>>).
%% @equiv multiTexCoord2s(Target,S,T)
--spec multiTexCoord2sv(Target :: enum(),V) -> ok when V :: {S :: integer(),T :: integer()}.
+-spec multiTexCoord2sv(Target :: enum(),V) -> 'ok' when V :: {S :: integer(),T :: integer()}.
multiTexCoord2sv(Target,{S,T}) -> multiTexCoord2s(Target,S,T).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord3d(Target, S, T, R) -> ok when Target :: enum(),S :: float(),T :: float(),R :: float().
+-spec multiTexCoord3d(Target, S, T, R) -> 'ok' when Target :: enum(),S :: float(),T :: float(),R :: float().
multiTexCoord3d(Target,S,T,R) ->
cast(5382, <<Target:?GLenum,0:32,S:?GLdouble,T:?GLdouble,R:?GLdouble>>).
%% @equiv multiTexCoord3d(Target,S,T,R)
--spec multiTexCoord3dv(Target :: enum(),V) -> ok when V :: {S :: float(),T :: float(),R :: float()}.
+-spec multiTexCoord3dv(Target :: enum(),V) -> 'ok' when V :: {S :: float(),T :: float(),R :: float()}.
multiTexCoord3dv(Target,{S,T,R}) -> multiTexCoord3d(Target,S,T,R).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord3f(Target, S, T, R) -> ok when Target :: enum(),S :: float(),T :: float(),R :: float().
+-spec multiTexCoord3f(Target, S, T, R) -> 'ok' when Target :: enum(),S :: float(),T :: float(),R :: float().
multiTexCoord3f(Target,S,T,R) ->
cast(5383, <<Target:?GLenum,S:?GLfloat,T:?GLfloat,R:?GLfloat>>).
%% @equiv multiTexCoord3f(Target,S,T,R)
--spec multiTexCoord3fv(Target :: enum(),V) -> ok when V :: {S :: float(),T :: float(),R :: float()}.
+-spec multiTexCoord3fv(Target :: enum(),V) -> 'ok' when V :: {S :: float(),T :: float(),R :: float()}.
multiTexCoord3fv(Target,{S,T,R}) -> multiTexCoord3f(Target,S,T,R).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord3i(Target, S, T, R) -> ok when Target :: enum(),S :: integer(),T :: integer(),R :: integer().
+-spec multiTexCoord3i(Target, S, T, R) -> 'ok' when Target :: enum(),S :: integer(),T :: integer(),R :: integer().
multiTexCoord3i(Target,S,T,R) ->
cast(5384, <<Target:?GLenum,S:?GLint,T:?GLint,R:?GLint>>).
%% @equiv multiTexCoord3i(Target,S,T,R)
--spec multiTexCoord3iv(Target :: enum(),V) -> ok when V :: {S :: integer(),T :: integer(),R :: integer()}.
+-spec multiTexCoord3iv(Target :: enum(),V) -> 'ok' when V :: {S :: integer(),T :: integer(),R :: integer()}.
multiTexCoord3iv(Target,{S,T,R}) -> multiTexCoord3i(Target,S,T,R).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord3s(Target, S, T, R) -> ok when Target :: enum(),S :: integer(),T :: integer(),R :: integer().
+-spec multiTexCoord3s(Target, S, T, R) -> 'ok' when Target :: enum(),S :: integer(),T :: integer(),R :: integer().
multiTexCoord3s(Target,S,T,R) ->
cast(5385, <<Target:?GLenum,S:?GLshort,T:?GLshort,R:?GLshort>>).
%% @equiv multiTexCoord3s(Target,S,T,R)
--spec multiTexCoord3sv(Target :: enum(),V) -> ok when V :: {S :: integer(),T :: integer(),R :: integer()}.
+-spec multiTexCoord3sv(Target :: enum(),V) -> 'ok' when V :: {S :: integer(),T :: integer(),R :: integer()}.
multiTexCoord3sv(Target,{S,T,R}) -> multiTexCoord3s(Target,S,T,R).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord4d(Target, S, T, R, Q) -> ok when Target :: enum(),S :: float(),T :: float(),R :: float(),Q :: float().
+-spec multiTexCoord4d(Target, S, T, R, Q) -> 'ok' when Target :: enum(),S :: float(),T :: float(),R :: float(),Q :: float().
multiTexCoord4d(Target,S,T,R,Q) ->
cast(5386, <<Target:?GLenum,0:32,S:?GLdouble,T:?GLdouble,R:?GLdouble,Q:?GLdouble>>).
%% @equiv multiTexCoord4d(Target,S,T,R,Q)
--spec multiTexCoord4dv(Target :: enum(),V) -> ok when V :: {S :: float(),T :: float(),R :: float(),Q :: float()}.
+-spec multiTexCoord4dv(Target :: enum(),V) -> 'ok' when V :: {S :: float(),T :: float(),R :: float(),Q :: float()}.
multiTexCoord4dv(Target,{S,T,R,Q}) -> multiTexCoord4d(Target,S,T,R,Q).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord4f(Target, S, T, R, Q) -> ok when Target :: enum(),S :: float(),T :: float(),R :: float(),Q :: float().
+-spec multiTexCoord4f(Target, S, T, R, Q) -> 'ok' when Target :: enum(),S :: float(),T :: float(),R :: float(),Q :: float().
multiTexCoord4f(Target,S,T,R,Q) ->
cast(5387, <<Target:?GLenum,S:?GLfloat,T:?GLfloat,R:?GLfloat,Q:?GLfloat>>).
%% @equiv multiTexCoord4f(Target,S,T,R,Q)
--spec multiTexCoord4fv(Target :: enum(),V) -> ok when V :: {S :: float(),T :: float(),R :: float(),Q :: float()}.
+-spec multiTexCoord4fv(Target :: enum(),V) -> 'ok' when V :: {S :: float(),T :: float(),R :: float(),Q :: float()}.
multiTexCoord4fv(Target,{S,T,R,Q}) -> multiTexCoord4f(Target,S,T,R,Q).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord4i(Target, S, T, R, Q) -> ok when Target :: enum(),S :: integer(),T :: integer(),R :: integer(),Q :: integer().
+-spec multiTexCoord4i(Target, S, T, R, Q) -> 'ok' when Target :: enum(),S :: integer(),T :: integer(),R :: integer(),Q :: integer().
multiTexCoord4i(Target,S,T,R,Q) ->
cast(5388, <<Target:?GLenum,S:?GLint,T:?GLint,R:?GLint,Q:?GLint>>).
%% @equiv multiTexCoord4i(Target,S,T,R,Q)
--spec multiTexCoord4iv(Target :: enum(),V) -> ok when V :: {S :: integer(),T :: integer(),R :: integer(),Q :: integer()}.
+-spec multiTexCoord4iv(Target :: enum(),V) -> 'ok' when V :: {S :: integer(),T :: integer(),R :: integer(),Q :: integer()}.
multiTexCoord4iv(Target,{S,T,R,Q}) -> multiTexCoord4i(Target,S,T,R,Q).
%% @doc
%% See {@link multiTexCoord1d/2}
--spec multiTexCoord4s(Target, S, T, R, Q) -> ok when Target :: enum(),S :: integer(),T :: integer(),R :: integer(),Q :: integer().
+-spec multiTexCoord4s(Target, S, T, R, Q) -> 'ok' when Target :: enum(),S :: integer(),T :: integer(),R :: integer(),Q :: integer().
multiTexCoord4s(Target,S,T,R,Q) ->
cast(5389, <<Target:?GLenum,S:?GLshort,T:?GLshort,R:?GLshort,Q:?GLshort>>).
%% @equiv multiTexCoord4s(Target,S,T,R,Q)
--spec multiTexCoord4sv(Target :: enum(),V) -> ok when V :: {S :: integer(),T :: integer(),R :: integer(),Q :: integer()}.
+-spec multiTexCoord4sv(Target :: enum(),V) -> 'ok' when V :: {S :: integer(),T :: integer(),R :: integer(),Q :: integer()}.
multiTexCoord4sv(Target,{S,T,R,Q}) -> multiTexCoord4s(Target,S,T,R,Q).
%% @doc Replace the current matrix with the specified row-major ordered matrix
@@ -9515,7 +9515,7 @@ multiTexCoord4sv(Target,{S,T,R,Q}) -> multiTexCoord4s(Target,S,T,R,Q).
%% with M T, where T represents the transpose.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLoadTransposeMatrix.xml">external</a> documentation.
--spec loadTransposeMatrixf(M) -> ok when M :: matrix().
+-spec loadTransposeMatrixf(M) -> 'ok' when M :: matrix().
loadTransposeMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5390, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,M13:?GLfloat,M14:?GLfloat,M15:?GLfloat,M16:?GLfloat>>);
loadTransposeMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -9523,7 +9523,7 @@ loadTransposeMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% @doc
%% See {@link loadTransposeMatrixf/1}
--spec loadTransposeMatrixd(M) -> ok when M :: matrix().
+-spec loadTransposeMatrixd(M) -> 'ok' when M :: matrix().
loadTransposeMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5391, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,M13:?GLdouble,M14:?GLdouble,M15:?GLdouble,M16:?GLdouble>>);
loadTransposeMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -9538,7 +9538,7 @@ loadTransposeMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% It is either the projection matrix, modelview matrix, or the texture matrix.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMultTransposeMatrix.xml">external</a> documentation.
--spec multTransposeMatrixf(M) -> ok when M :: matrix().
+-spec multTransposeMatrixf(M) -> 'ok' when M :: matrix().
multTransposeMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5392, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,M13:?GLfloat,M14:?GLfloat,M15:?GLfloat,M16:?GLfloat>>);
multTransposeMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -9546,7 +9546,7 @@ multTransposeMatrixf({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% @doc
%% See {@link multTransposeMatrixf/1}
--spec multTransposeMatrixd(M) -> ok when M :: matrix().
+-spec multTransposeMatrixd(M) -> 'ok' when M :: matrix().
multTransposeMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5393, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,M13:?GLdouble,M14:?GLdouble,M15:?GLdouble,M16:?GLdouble>>);
multTransposeMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -9625,7 +9625,7 @@ multTransposeMatrixd({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBlendFuncSeparate.xml">external</a> documentation.
--spec blendFuncSeparate(SfactorRGB, DfactorRGB, SfactorAlpha, DfactorAlpha) -> ok when SfactorRGB :: enum(),DfactorRGB :: enum(),SfactorAlpha :: enum(),DfactorAlpha :: enum().
+-spec blendFuncSeparate(SfactorRGB, DfactorRGB, SfactorAlpha, DfactorAlpha) -> 'ok' when SfactorRGB :: enum(),DfactorRGB :: enum(),SfactorAlpha :: enum(),DfactorAlpha :: enum().
blendFuncSeparate(SfactorRGB,DfactorRGB,SfactorAlpha,DfactorAlpha) ->
cast(5394, <<SfactorRGB:?GLenum,DfactorRGB:?GLenum,SfactorAlpha:?GLenum,DfactorAlpha:?GLenum>>).
@@ -9650,7 +9650,7 @@ blendFuncSeparate(SfactorRGB,DfactorRGB,SfactorAlpha,DfactorAlpha) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMultiDrawArrays.xml">external</a> documentation.
--spec multiDrawArrays(Mode, First, Count) -> ok when Mode :: enum(),First :: [integer()],Count :: [integer()].
+-spec multiDrawArrays(Mode, First, Count) -> 'ok' when Mode :: enum(),First :: [integer()],Count :: [integer()].
multiDrawArrays(Mode,First,Count) ->
cast(5395, <<Mode:?GLenum,(length(First)):?GLuint,
(<< <<C:?GLint>> || C <- First>>)/binary,0:(((length(First)) rem 2)*32),(length(Count)):?GLuint,
@@ -9669,26 +9669,26 @@ multiDrawArrays(Mode,First,Count) ->
%% The default value is `?GL_UPPER_LEFT'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPointParameter.xml">external</a> documentation.
--spec pointParameterf(Pname, Param) -> ok when Pname :: enum(),Param :: float().
+-spec pointParameterf(Pname, Param) -> 'ok' when Pname :: enum(),Param :: float().
pointParameterf(Pname,Param) ->
cast(5396, <<Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link pointParameterf/2}
--spec pointParameterfv(Pname, Params) -> ok when Pname :: enum(),Params :: tuple().
+-spec pointParameterfv(Pname, Params) -> 'ok' when Pname :: enum(),Params :: tuple().
pointParameterfv(Pname,Params) ->
cast(5397, <<Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Params)>>)/binary,0:(((0+size(Params)) rem 2)*32)>>).
%% @doc
%% See {@link pointParameterf/2}
--spec pointParameteri(Pname, Param) -> ok when Pname :: enum(),Param :: integer().
+-spec pointParameteri(Pname, Param) -> 'ok' when Pname :: enum(),Param :: integer().
pointParameteri(Pname,Param) ->
cast(5398, <<Pname:?GLenum,Param:?GLint>>).
%% @doc
%% See {@link pointParameterf/2}
--spec pointParameteriv(Pname, Params) -> ok when Pname :: enum(),Params :: tuple().
+-spec pointParameteriv(Pname, Params) -> 'ok' when Pname :: enum(),Params :: tuple().
pointParameteriv(Pname,Params) ->
cast(5399, <<Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((0+size(Params)) rem 2)*32)>>).
@@ -9700,22 +9700,22 @@ pointParameteriv(Pname,Params) ->
%% the fog color (see {@link gl:fogf/2} ).
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFogCoord.xml">external</a> documentation.
--spec fogCoordf(Coord) -> ok when Coord :: float().
+-spec fogCoordf(Coord) -> 'ok' when Coord :: float().
fogCoordf(Coord) ->
cast(5400, <<Coord:?GLfloat>>).
%% @equiv fogCoordf(Coord)
--spec fogCoordfv(Coord) -> ok when Coord :: {Coord :: float()}.
+-spec fogCoordfv(Coord) -> 'ok' when Coord :: {Coord :: float()}.
fogCoordfv({Coord}) -> fogCoordf(Coord).
%% @doc
%% See {@link fogCoordf/1}
--spec fogCoordd(Coord) -> ok when Coord :: float().
+-spec fogCoordd(Coord) -> 'ok' when Coord :: float().
fogCoordd(Coord) ->
cast(5401, <<Coord:?GLdouble>>).
%% @equiv fogCoordd(Coord)
--spec fogCoorddv(Coord) -> ok when Coord :: {Coord :: float()}.
+-spec fogCoorddv(Coord) -> 'ok' when Coord :: {Coord :: float()}.
fogCoorddv({Coord}) -> fogCoordd(Coord).
%% @doc Define an array of fog coordinates
@@ -9741,7 +9741,7 @@ fogCoorddv({Coord}) -> fogCoordd(Coord).
%% , {@link gl:drawRangeElements/6} , or {@link gl:arrayElement/1} is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFogCoordPointer.xml">external</a> documentation.
--spec fogCoordPointer(Type, Stride, Pointer) -> ok when Type :: enum(),Stride :: integer(),Pointer :: offset()|mem().
+-spec fogCoordPointer(Type, Stride, Pointer) -> 'ok' when Type :: enum(),Stride :: integer(),Pointer :: offset()|mem().
fogCoordPointer(Type,Stride,Pointer) when is_integer(Pointer) ->
cast(5402, <<Type:?GLenum,Stride:?GLsizei,Pointer:?GLuint>>);
fogCoordPointer(Type,Stride,Pointer) ->
@@ -9778,82 +9778,82 @@ fogCoordPointer(Type,Stride,Pointer) ->
%% are interpolated or written into a color buffer.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml">external</a> documentation.
--spec secondaryColor3b(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec secondaryColor3b(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
secondaryColor3b(Red,Green,Blue) ->
cast(5404, <<Red:?GLbyte,Green:?GLbyte,Blue:?GLbyte>>).
%% @equiv secondaryColor3b(Red,Green,Blue)
--spec secondaryColor3bv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec secondaryColor3bv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
secondaryColor3bv({Red,Green,Blue}) -> secondaryColor3b(Red,Green,Blue).
%% @doc
%% See {@link secondaryColor3b/3}
--spec secondaryColor3d(Red, Green, Blue) -> ok when Red :: float(),Green :: float(),Blue :: float().
+-spec secondaryColor3d(Red, Green, Blue) -> 'ok' when Red :: float(),Green :: float(),Blue :: float().
secondaryColor3d(Red,Green,Blue) ->
cast(5405, <<Red:?GLdouble,Green:?GLdouble,Blue:?GLdouble>>).
%% @equiv secondaryColor3d(Red,Green,Blue)
--spec secondaryColor3dv(V) -> ok when V :: {Red :: float(),Green :: float(),Blue :: float()}.
+-spec secondaryColor3dv(V) -> 'ok' when V :: {Red :: float(),Green :: float(),Blue :: float()}.
secondaryColor3dv({Red,Green,Blue}) -> secondaryColor3d(Red,Green,Blue).
%% @doc
%% See {@link secondaryColor3b/3}
--spec secondaryColor3f(Red, Green, Blue) -> ok when Red :: float(),Green :: float(),Blue :: float().
+-spec secondaryColor3f(Red, Green, Blue) -> 'ok' when Red :: float(),Green :: float(),Blue :: float().
secondaryColor3f(Red,Green,Blue) ->
cast(5406, <<Red:?GLfloat,Green:?GLfloat,Blue:?GLfloat>>).
%% @equiv secondaryColor3f(Red,Green,Blue)
--spec secondaryColor3fv(V) -> ok when V :: {Red :: float(),Green :: float(),Blue :: float()}.
+-spec secondaryColor3fv(V) -> 'ok' when V :: {Red :: float(),Green :: float(),Blue :: float()}.
secondaryColor3fv({Red,Green,Blue}) -> secondaryColor3f(Red,Green,Blue).
%% @doc
%% See {@link secondaryColor3b/3}
--spec secondaryColor3i(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec secondaryColor3i(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
secondaryColor3i(Red,Green,Blue) ->
cast(5407, <<Red:?GLint,Green:?GLint,Blue:?GLint>>).
%% @equiv secondaryColor3i(Red,Green,Blue)
--spec secondaryColor3iv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec secondaryColor3iv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
secondaryColor3iv({Red,Green,Blue}) -> secondaryColor3i(Red,Green,Blue).
%% @doc
%% See {@link secondaryColor3b/3}
--spec secondaryColor3s(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec secondaryColor3s(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
secondaryColor3s(Red,Green,Blue) ->
cast(5408, <<Red:?GLshort,Green:?GLshort,Blue:?GLshort>>).
%% @equiv secondaryColor3s(Red,Green,Blue)
--spec secondaryColor3sv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec secondaryColor3sv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
secondaryColor3sv({Red,Green,Blue}) -> secondaryColor3s(Red,Green,Blue).
%% @doc
%% See {@link secondaryColor3b/3}
--spec secondaryColor3ub(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec secondaryColor3ub(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
secondaryColor3ub(Red,Green,Blue) ->
cast(5409, <<Red:?GLubyte,Green:?GLubyte,Blue:?GLubyte>>).
%% @equiv secondaryColor3ub(Red,Green,Blue)
--spec secondaryColor3ubv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec secondaryColor3ubv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
secondaryColor3ubv({Red,Green,Blue}) -> secondaryColor3ub(Red,Green,Blue).
%% @doc
%% See {@link secondaryColor3b/3}
--spec secondaryColor3ui(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec secondaryColor3ui(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
secondaryColor3ui(Red,Green,Blue) ->
cast(5410, <<Red:?GLuint,Green:?GLuint,Blue:?GLuint>>).
%% @equiv secondaryColor3ui(Red,Green,Blue)
--spec secondaryColor3uiv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec secondaryColor3uiv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
secondaryColor3uiv({Red,Green,Blue}) -> secondaryColor3ui(Red,Green,Blue).
%% @doc
%% See {@link secondaryColor3b/3}
--spec secondaryColor3us(Red, Green, Blue) -> ok when Red :: integer(),Green :: integer(),Blue :: integer().
+-spec secondaryColor3us(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer().
secondaryColor3us(Red,Green,Blue) ->
cast(5411, <<Red:?GLushort,Green:?GLushort,Blue:?GLushort>>).
%% @equiv secondaryColor3us(Red,Green,Blue)
--spec secondaryColor3usv(V) -> ok when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
+-spec secondaryColor3usv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}.
secondaryColor3usv({Red,Green,Blue}) -> secondaryColor3us(Red,Green,Blue).
%% @doc Define an array of secondary colors
@@ -9881,7 +9881,7 @@ secondaryColor3usv({Red,Green,Blue}) -> secondaryColor3us(Red,Green,Blue).
%% is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColorPointer.xml">external</a> documentation.
--spec secondaryColorPointer(Size, Type, Stride, Pointer) -> ok when Size :: integer(),Type :: enum(),Stride :: integer(),Pointer :: offset()|mem().
+-spec secondaryColorPointer(Size, Type, Stride, Pointer) -> 'ok' when Size :: integer(),Type :: enum(),Stride :: integer(),Pointer :: offset()|mem().
secondaryColorPointer(Size,Type,Stride,Pointer) when is_integer(Pointer) ->
cast(5412, <<Size:?GLint,Type:?GLenum,Stride:?GLsizei,Pointer:?GLuint>>);
secondaryColorPointer(Size,Type,Stride,Pointer) ->
@@ -9927,82 +9927,82 @@ secondaryColorPointer(Size,Type,Stride,Pointer) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWindowPos.xml">external</a> documentation.
--spec windowPos2d(X, Y) -> ok when X :: float(),Y :: float().
+-spec windowPos2d(X, Y) -> 'ok' when X :: float(),Y :: float().
windowPos2d(X,Y) ->
cast(5414, <<X:?GLdouble,Y:?GLdouble>>).
%% @equiv windowPos2d(X,Y)
--spec windowPos2dv(V) -> ok when V :: {X :: float(),Y :: float()}.
+-spec windowPos2dv(V) -> 'ok' when V :: {X :: float(),Y :: float()}.
windowPos2dv({X,Y}) -> windowPos2d(X,Y).
%% @doc
%% See {@link windowPos2d/2}
--spec windowPos2f(X, Y) -> ok when X :: float(),Y :: float().
+-spec windowPos2f(X, Y) -> 'ok' when X :: float(),Y :: float().
windowPos2f(X,Y) ->
cast(5415, <<X:?GLfloat,Y:?GLfloat>>).
%% @equiv windowPos2f(X,Y)
--spec windowPos2fv(V) -> ok when V :: {X :: float(),Y :: float()}.
+-spec windowPos2fv(V) -> 'ok' when V :: {X :: float(),Y :: float()}.
windowPos2fv({X,Y}) -> windowPos2f(X,Y).
%% @doc
%% See {@link windowPos2d/2}
--spec windowPos2i(X, Y) -> ok when X :: integer(),Y :: integer().
+-spec windowPos2i(X, Y) -> 'ok' when X :: integer(),Y :: integer().
windowPos2i(X,Y) ->
cast(5416, <<X:?GLint,Y:?GLint>>).
%% @equiv windowPos2i(X,Y)
--spec windowPos2iv(V) -> ok when V :: {X :: integer(),Y :: integer()}.
+-spec windowPos2iv(V) -> 'ok' when V :: {X :: integer(),Y :: integer()}.
windowPos2iv({X,Y}) -> windowPos2i(X,Y).
%% @doc
%% See {@link windowPos2d/2}
--spec windowPos2s(X, Y) -> ok when X :: integer(),Y :: integer().
+-spec windowPos2s(X, Y) -> 'ok' when X :: integer(),Y :: integer().
windowPos2s(X,Y) ->
cast(5417, <<X:?GLshort,Y:?GLshort>>).
%% @equiv windowPos2s(X,Y)
--spec windowPos2sv(V) -> ok when V :: {X :: integer(),Y :: integer()}.
+-spec windowPos2sv(V) -> 'ok' when V :: {X :: integer(),Y :: integer()}.
windowPos2sv({X,Y}) -> windowPos2s(X,Y).
%% @doc
%% See {@link windowPos2d/2}
--spec windowPos3d(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec windowPos3d(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
windowPos3d(X,Y,Z) ->
cast(5418, <<X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>).
%% @equiv windowPos3d(X,Y,Z)
--spec windowPos3dv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float()}.
+-spec windowPos3dv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}.
windowPos3dv({X,Y,Z}) -> windowPos3d(X,Y,Z).
%% @doc
%% See {@link windowPos2d/2}
--spec windowPos3f(X, Y, Z) -> ok when X :: float(),Y :: float(),Z :: float().
+-spec windowPos3f(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float().
windowPos3f(X,Y,Z) ->
cast(5419, <<X:?GLfloat,Y:?GLfloat,Z:?GLfloat>>).
%% @equiv windowPos3f(X,Y,Z)
--spec windowPos3fv(V) -> ok when V :: {X :: float(),Y :: float(),Z :: float()}.
+-spec windowPos3fv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}.
windowPos3fv({X,Y,Z}) -> windowPos3f(X,Y,Z).
%% @doc
%% See {@link windowPos2d/2}
--spec windowPos3i(X, Y, Z) -> ok when X :: integer(),Y :: integer(),Z :: integer().
+-spec windowPos3i(X, Y, Z) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer().
windowPos3i(X,Y,Z) ->
cast(5420, <<X:?GLint,Y:?GLint,Z:?GLint>>).
%% @equiv windowPos3i(X,Y,Z)
--spec windowPos3iv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
+-spec windowPos3iv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
windowPos3iv({X,Y,Z}) -> windowPos3i(X,Y,Z).
%% @doc
%% See {@link windowPos2d/2}
--spec windowPos3s(X, Y, Z) -> ok when X :: integer(),Y :: integer(),Z :: integer().
+-spec windowPos3s(X, Y, Z) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer().
windowPos3s(X,Y,Z) ->
cast(5421, <<X:?GLshort,Y:?GLshort,Z:?GLshort>>).
%% @equiv windowPos3s(X,Y,Z)
--spec windowPos3sv(V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
+-spec windowPos3sv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
windowPos3sv({X,Y,Z}) -> windowPos3s(X,Y,Z).
%% @doc Generate query object names
@@ -10032,7 +10032,7 @@ genQueries(N) ->
%% query objects.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteQueries.xml">external</a> documentation.
--spec deleteQueries(Ids) -> ok when Ids :: [integer()].
+-spec deleteQueries(Ids) -> 'ok' when Ids :: [integer()].
deleteQueries(Ids) ->
cast(5423, <<(length(Ids)):?GLuint,
(<< <<C:?GLuint>> || C <- Ids>>)/binary,0:(((1+length(Ids)) rem 2)*32)>>).
@@ -10114,13 +10114,13 @@ isQuery(Id) ->
%% is not yet complete.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBeginQuery.xml">external</a> documentation.
--spec beginQuery(Target, Id) -> ok when Target :: enum(),Id :: integer().
+-spec beginQuery(Target, Id) -> 'ok' when Target :: enum(),Id :: integer().
beginQuery(Target,Id) ->
cast(5425, <<Target:?GLenum,Id:?GLuint>>).
%% @doc
%% See {@link beginQuery/2}
--spec endQuery(Target) -> ok when Target :: enum().
+-spec endQuery(Target) -> 'ok' when Target :: enum().
endQuery(Target) ->
cast(5426, <<Target:?GLenum>>).
@@ -10236,7 +10236,7 @@ getQueryObjectuiv(Id,Pname) ->
%% buffer object based on its initial binding target.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindBuffer.xml">external</a> documentation.
--spec bindBuffer(Target, Buffer) -> ok when Target :: enum(),Buffer :: integer().
+-spec bindBuffer(Target, Buffer) -> 'ok' when Target :: enum(),Buffer :: integer().
bindBuffer(Target,Buffer) ->
cast(5430, <<Target:?GLenum,Buffer:?GLuint>>).
@@ -10251,7 +10251,7 @@ bindBuffer(Target,Buffer) ->
%% buffer objects.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteBuffers.xml">external</a> documentation.
--spec deleteBuffers(Buffers) -> ok when Buffers :: [integer()].
+-spec deleteBuffers(Buffers) -> 'ok' when Buffers :: [integer()].
deleteBuffers(Buffers) ->
cast(5431, <<(length(Buffers)):?GLuint,
(<< <<C:?GLuint>> || C <- Buffers>>)/binary,0:(((1+length(Buffers)) rem 2)*32)>>).
@@ -10323,7 +10323,7 @@ isBuffer(Buffer) ->
%% source for GL drawing and image specification commands.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBufferData.xml">external</a> documentation.
--spec bufferData(Target, Size, Data, Usage) -> ok when Target :: enum(),Size :: integer(),Data :: offset()|mem(),Usage :: enum().
+-spec bufferData(Target, Size, Data, Usage) -> 'ok' when Target :: enum(),Size :: integer(),Data :: offset()|mem(),Usage :: enum().
bufferData(Target,Size,Data,Usage) when is_integer(Data) ->
cast(5434, <<Target:?GLenum,0:32,Size:?GLsizeiptr,Data:?GLuint,Usage:?GLenum>>);
bufferData(Target,Size,Data,Usage) ->
@@ -10339,7 +10339,7 @@ bufferData(Target,Size,Data,Usage) ->
%% the buffer object's data store.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBufferSubData.xml">external</a> documentation.
--spec bufferSubData(Target, Offset, Size, Data) -> ok when Target :: enum(),Offset :: integer(),Size :: integer(),Data :: offset()|mem().
+-spec bufferSubData(Target, Offset, Size, Data) -> 'ok' when Target :: enum(),Offset :: integer(),Size :: integer(),Data :: offset()|mem().
bufferSubData(Target,Offset,Size,Data) when is_integer(Data) ->
cast(5436, <<Target:?GLenum,0:32,Offset:?GLintptr,Size:?GLsizeiptr,Data:?GLuint>>);
bufferSubData(Target,Offset,Size,Data) ->
@@ -10355,7 +10355,7 @@ bufferSubData(Target,Offset,Size,Data) ->
%% together define a range beyond the bounds of the buffer object's data store.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetBufferSubData.xml">external</a> documentation.
--spec getBufferSubData(Target, Offset, Size, Data) -> ok when Target :: enum(),Offset :: integer(),Size :: integer(),Data :: mem().
+-spec getBufferSubData(Target, Offset, Size, Data) -> 'ok' when Target :: enum(),Offset :: integer(),Size :: integer(),Data :: mem().
getBufferSubData(Target,Offset,Size,Data) ->
send_bin(Data),
call(5438, <<Target:?GLenum,0:32,Offset:?GLintptr,Size:?GLsizeiptr>>).
@@ -10422,7 +10422,7 @@ getBufferParameteriv(Target,Pname) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBlendEquationSeparate.xml">external</a> documentation.
--spec blendEquationSeparate(ModeRGB, ModeAlpha) -> ok when ModeRGB :: enum(),ModeAlpha :: enum().
+-spec blendEquationSeparate(ModeRGB, ModeAlpha) -> 'ok' when ModeRGB :: enum(),ModeAlpha :: enum().
blendEquationSeparate(ModeRGB,ModeAlpha) ->
cast(5440, <<ModeRGB:?GLenum,ModeAlpha:?GLenum>>).
@@ -10462,7 +10462,7 @@ blendEquationSeparate(ModeRGB,ModeAlpha) ->
%% .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawBuffers.xml">external</a> documentation.
--spec drawBuffers(Bufs) -> ok when Bufs :: [enum()].
+-spec drawBuffers(Bufs) -> 'ok' when Bufs :: [enum()].
drawBuffers(Bufs) ->
cast(5441, <<(length(Bufs)):?GLuint,
(<< <<C:?GLenum>> || C <- Bufs>>)/binary,0:(((1+length(Bufs)) rem 2)*32)>>).
@@ -10524,7 +10524,7 @@ drawBuffers(Bufs) ->
%% specify stencil action when the stencil test fails and passes, respectively.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glStencilOpSeparate.xml">external</a> documentation.
--spec stencilOpSeparate(Face, Sfail, Dpfail, Dppass) -> ok when Face :: enum(),Sfail :: enum(),Dpfail :: enum(),Dppass :: enum().
+-spec stencilOpSeparate(Face, Sfail, Dpfail, Dppass) -> 'ok' when Face :: enum(),Sfail :: enum(),Dpfail :: enum(),Dppass :: enum().
stencilOpSeparate(Face,Sfail,Dpfail,Dppass) ->
cast(5442, <<Face:?GLenum,Sfail:?GLenum,Dpfail:?GLenum,Dppass:?GLenum>>).
@@ -10587,7 +10587,7 @@ stencilOpSeparate(Face,Sfail,Dpfail,Dppass) ->
%% `?GL_ALWAYS': Always passes.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glStencilFuncSeparate.xml">external</a> documentation.
--spec stencilFuncSeparate(Face, Func, Ref, Mask) -> ok when Face :: enum(),Func :: enum(),Ref :: integer(),Mask :: integer().
+-spec stencilFuncSeparate(Face, Func, Ref, Mask) -> 'ok' when Face :: enum(),Func :: enum(),Ref :: integer(),Mask :: integer().
stencilFuncSeparate(Face,Func,Ref,Mask) ->
cast(5443, <<Face:?GLenum,Func:?GLenum,Ref:?GLint,Mask:?GLuint>>).
@@ -10605,7 +10605,7 @@ stencilFuncSeparate(Face,Func,Ref,Mask) ->
%% were called with `Face' set to `?GL_FRONT_AND_BACK'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glStencilMaskSeparate.xml">external</a> documentation.
--spec stencilMaskSeparate(Face, Mask) -> ok when Face :: enum(),Mask :: integer().
+-spec stencilMaskSeparate(Face, Mask) -> 'ok' when Face :: enum(),Mask :: integer().
stencilMaskSeparate(Face,Mask) ->
cast(5444, <<Face:?GLenum,Mask:?GLuint>>).
@@ -10629,7 +10629,7 @@ stencilMaskSeparate(Face,Mask) ->
%% all program objects to which it is attached.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glAttachShader.xml">external</a> documentation.
--spec attachShader(Program, Shader) -> ok when Program :: integer(),Shader :: integer().
+-spec attachShader(Program, Shader) -> 'ok' when Program :: integer(),Shader :: integer().
attachShader(Program,Shader) ->
cast(5445, <<Program:?GLuint,Shader:?GLuint>>).
@@ -10666,7 +10666,7 @@ attachShader(Program,Shader) ->
%% effect until the next time the program object is linked.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindAttribLocation.xml">external</a> documentation.
--spec bindAttribLocation(Program, Index, Name) -> ok when Program :: integer(),Index :: integer(),Name :: string().
+-spec bindAttribLocation(Program, Index, Name) -> 'ok' when Program :: integer(),Index :: integer(),Name :: string().
bindAttribLocation(Program,Index,Name) ->
cast(5446, <<Program:?GLuint,Index:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 1) rem 8)) rem 8)>>).
@@ -10686,7 +10686,7 @@ bindAttribLocation(Program,Index,Name) ->
%% .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompileShader.xml">external</a> documentation.
--spec compileShader(Shader) -> ok when Shader :: integer().
+-spec compileShader(Shader) -> 'ok' when Shader :: integer().
compileShader(Shader) ->
cast(5447, <<Shader:?GLuint>>).
@@ -10753,7 +10753,7 @@ createShader(Type) ->
%% with arguments `Program' and `?GL_DELETE_STATUS'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteProgram.xml">external</a> documentation.
--spec deleteProgram(Program) -> ok when Program :: integer().
+-spec deleteProgram(Program) -> 'ok' when Program :: integer().
deleteProgram(Program) ->
cast(5450, <<Program:?GLuint>>).
@@ -10772,7 +10772,7 @@ deleteProgram(Program) ->
%% with arguments `Shader' and `?GL_DELETE_STATUS'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteShader.xml">external</a> documentation.
--spec deleteShader(Shader) -> ok when Shader :: integer().
+-spec deleteShader(Shader) -> 'ok' when Shader :: integer().
deleteShader(Shader) ->
cast(5451, <<Shader:?GLuint>>).
@@ -10787,7 +10787,7 @@ deleteShader(Shader) ->
%% detached.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDetachShader.xml">external</a> documentation.
--spec detachShader(Program, Shader) -> ok when Program :: integer(),Shader :: integer().
+-spec detachShader(Program, Shader) -> 'ok' when Program :: integer(),Shader :: integer().
detachShader(Program,Shader) ->
cast(5452, <<Program:?GLuint,Shader:?GLuint>>).
@@ -10802,13 +10802,13 @@ detachShader(Program,Shader) ->
%% , or {@link gl:multiDrawArrays/3} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEnableVertexAttribArray.xml">external</a> documentation.
--spec disableVertexAttribArray(Index) -> ok when Index :: integer().
+-spec disableVertexAttribArray(Index) -> 'ok' when Index :: integer().
disableVertexAttribArray(Index) ->
cast(5453, <<Index:?GLuint>>).
%% @doc
%% See {@link disableVertexAttribArray/1}
--spec enableVertexAttribArray(Index) -> ok when Index :: integer().
+-spec enableVertexAttribArray(Index) -> 'ok' when Index :: integer().
enableVertexAttribArray(Index) ->
cast(5454, <<Index:?GLuint>>).
@@ -11515,7 +11515,7 @@ isShader(Shader) ->
%% log or the program that is part of the program object.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLinkProgram.xml">external</a> documentation.
--spec linkProgram(Program) -> ok when Program :: integer().
+-spec linkProgram(Program) -> 'ok' when Program :: integer().
linkProgram(Program) ->
cast(5472, <<Program:?GLuint>>).
@@ -11533,7 +11533,7 @@ linkProgram(Program) ->
%% scanned or parsed at this time; they are simply copied into the specified shader object.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glShaderSource.xml">external</a> documentation.
--spec shaderSource(Shader, String) -> ok when Shader :: integer(),String :: iolist().
+-spec shaderSource(Shader, String) -> 'ok' when Shader :: integer(),String :: iolist().
shaderSource(Shader,String) ->
StringTemp = list_to_binary([[Str|[0]] || Str <- String ]),
cast(5473, <<Shader:?GLuint,(length(String)):?GLuint,(size(StringTemp)):?GLuint,(StringTemp)/binary,0:((8-((size(StringTemp)+0) rem 8)) rem 8)>>).
@@ -11575,7 +11575,7 @@ shaderSource(Shader,String) ->
%% the results of fragment shader execution will be undefined.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glUseProgram.xml">external</a> documentation.
--spec useProgram(Program) -> ok when Program :: integer().
+-spec useProgram(Program) -> 'ok' when Program :: integer().
useProgram(Program) ->
cast(5474, <<Program:?GLuint>>).
@@ -11643,125 +11643,125 @@ useProgram(Program) ->
%% a single matrix, and a count greater than 1 can be used to modify an array of matrices.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml">external</a> documentation.
--spec uniform1f(Location, V0) -> ok when Location :: integer(),V0 :: float().
+-spec uniform1f(Location, V0) -> 'ok' when Location :: integer(),V0 :: float().
uniform1f(Location,V0) ->
cast(5475, <<Location:?GLint,V0:?GLfloat>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform2f(Location, V0, V1) -> ok when Location :: integer(),V0 :: float(),V1 :: float().
+-spec uniform2f(Location, V0, V1) -> 'ok' when Location :: integer(),V0 :: float(),V1 :: float().
uniform2f(Location,V0,V1) ->
cast(5476, <<Location:?GLint,V0:?GLfloat,V1:?GLfloat>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform3f(Location, V0, V1, V2) -> ok when Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float().
+-spec uniform3f(Location, V0, V1, V2) -> 'ok' when Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float().
uniform3f(Location,V0,V1,V2) ->
cast(5477, <<Location:?GLint,V0:?GLfloat,V1:?GLfloat,V2:?GLfloat>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform4f(Location, V0, V1, V2, V3) -> ok when Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float(),V3 :: float().
+-spec uniform4f(Location, V0, V1, V2, V3) -> 'ok' when Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float(),V3 :: float().
uniform4f(Location,V0,V1,V2,V3) ->
cast(5478, <<Location:?GLint,V0:?GLfloat,V1:?GLfloat,V2:?GLfloat,V3:?GLfloat>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform1i(Location, V0) -> ok when Location :: integer(),V0 :: integer().
+-spec uniform1i(Location, V0) -> 'ok' when Location :: integer(),V0 :: integer().
uniform1i(Location,V0) ->
cast(5479, <<Location:?GLint,V0:?GLint>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform2i(Location, V0, V1) -> ok when Location :: integer(),V0 :: integer(),V1 :: integer().
+-spec uniform2i(Location, V0, V1) -> 'ok' when Location :: integer(),V0 :: integer(),V1 :: integer().
uniform2i(Location,V0,V1) ->
cast(5480, <<Location:?GLint,V0:?GLint,V1:?GLint>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform3i(Location, V0, V1, V2) -> ok when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer().
+-spec uniform3i(Location, V0, V1, V2) -> 'ok' when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer().
uniform3i(Location,V0,V1,V2) ->
cast(5481, <<Location:?GLint,V0:?GLint,V1:?GLint,V2:?GLint>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform4i(Location, V0, V1, V2, V3) -> ok when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer().
+-spec uniform4i(Location, V0, V1, V2, V3) -> 'ok' when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer().
uniform4i(Location,V0,V1,V2,V3) ->
cast(5482, <<Location:?GLint,V0:?GLint,V1:?GLint,V2:?GLint,V3:?GLint>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform1fv(Location, Value) -> ok when Location :: integer(),Value :: [float()].
+-spec uniform1fv(Location, Value) -> 'ok' when Location :: integer(),Value :: [float()].
uniform1fv(Location,Value) ->
cast(5483, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<C:?GLfloat>> || C <- Value>>)/binary,0:(((length(Value)) rem 2)*32)>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform2fv(Location, Value) -> ok when Location :: integer(),Value :: [{float(),float()}].
+-spec uniform2fv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{float(),float()}].
uniform2fv(Location,Value) ->
cast(5484, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat>> || {V1,V2} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform3fv(Location, Value) -> ok when Location :: integer(),Value :: [{float(),float(),float()}].
+-spec uniform3fv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{float(),float(),float()}].
uniform3fv(Location,Value) ->
cast(5485, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat>> || {V1,V2,V3} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform4fv(Location, Value) -> ok when Location :: integer(),Value :: [{float(),float(),float(),float()}].
+-spec uniform4fv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{float(),float(),float(),float()}].
uniform4fv(Location,Value) ->
cast(5486, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform1iv(Location, Value) -> ok when Location :: integer(),Value :: [integer()].
+-spec uniform1iv(Location, Value) -> 'ok' when Location :: integer(),Value :: [integer()].
uniform1iv(Location,Value) ->
cast(5487, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<C:?GLint>> || C <- Value>>)/binary,0:(((length(Value)) rem 2)*32)>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform2iv(Location, Value) -> ok when Location :: integer(),Value :: [{integer(),integer()}].
+-spec uniform2iv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{integer(),integer()}].
uniform2iv(Location,Value) ->
cast(5488, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLint,V2:?GLint>> || {V1,V2} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform3iv(Location, Value) -> ok when Location :: integer(),Value :: [{integer(),integer(),integer()}].
+-spec uniform3iv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{integer(),integer(),integer()}].
uniform3iv(Location,Value) ->
cast(5489, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLint,V2:?GLint,V3:?GLint>> || {V1,V2,V3} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform4iv(Location, Value) -> ok when Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}].
+-spec uniform4iv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}].
uniform4iv(Location,Value) ->
cast(5490, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix2fv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}].
+-spec uniformMatrix2fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}].
uniformMatrix2fv(Location,Transpose,Value) ->
cast(5491, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix3fv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix3fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix3fv(Location,Transpose,Value) ->
cast(5492, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix4fv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix4fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix4fv(Location,Transpose,Value) ->
cast(5493, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat,V10:?GLfloat,V11:?GLfloat,V12:?GLfloat,V13:?GLfloat,V14:?GLfloat,V15:?GLfloat,V16:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16} <- Value>>)/binary>>).
@@ -11789,7 +11789,7 @@ uniformMatrix4fv(Location,Transpose,Value) ->
%% information strings.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glValidateProgram.xml">external</a> documentation.
--spec validateProgram(Program) -> ok when Program :: integer().
+-spec validateProgram(Program) -> 'ok' when Program :: integer().
validateProgram(Program) ->
cast(5494, <<Program:?GLuint>>).
@@ -11864,191 +11864,191 @@ validateProgram(Program) ->
%% attribute.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml">external</a> documentation.
--spec vertexAttrib1d(Index, X) -> ok when Index :: integer(),X :: float().
+-spec vertexAttrib1d(Index, X) -> 'ok' when Index :: integer(),X :: float().
vertexAttrib1d(Index,X) ->
cast(5495, <<Index:?GLuint,0:32,X:?GLdouble>>).
%% @equiv vertexAttrib1d(Index,X)
--spec vertexAttrib1dv(Index :: integer(),V) -> ok when V :: {X :: float()}.
+-spec vertexAttrib1dv(Index :: integer(),V) -> 'ok' when V :: {X :: float()}.
vertexAttrib1dv(Index,{X}) -> vertexAttrib1d(Index,X).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib1f(Index, X) -> ok when Index :: integer(),X :: float().
+-spec vertexAttrib1f(Index, X) -> 'ok' when Index :: integer(),X :: float().
vertexAttrib1f(Index,X) ->
cast(5496, <<Index:?GLuint,X:?GLfloat>>).
%% @equiv vertexAttrib1f(Index,X)
--spec vertexAttrib1fv(Index :: integer(),V) -> ok when V :: {X :: float()}.
+-spec vertexAttrib1fv(Index :: integer(),V) -> 'ok' when V :: {X :: float()}.
vertexAttrib1fv(Index,{X}) -> vertexAttrib1f(Index,X).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib1s(Index, X) -> ok when Index :: integer(),X :: integer().
+-spec vertexAttrib1s(Index, X) -> 'ok' when Index :: integer(),X :: integer().
vertexAttrib1s(Index,X) ->
cast(5497, <<Index:?GLuint,X:?GLshort>>).
%% @equiv vertexAttrib1s(Index,X)
--spec vertexAttrib1sv(Index :: integer(),V) -> ok when V :: {X :: integer()}.
+-spec vertexAttrib1sv(Index :: integer(),V) -> 'ok' when V :: {X :: integer()}.
vertexAttrib1sv(Index,{X}) -> vertexAttrib1s(Index,X).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib2d(Index, X, Y) -> ok when Index :: integer(),X :: float(),Y :: float().
+-spec vertexAttrib2d(Index, X, Y) -> 'ok' when Index :: integer(),X :: float(),Y :: float().
vertexAttrib2d(Index,X,Y) ->
cast(5498, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble>>).
%% @equiv vertexAttrib2d(Index,X,Y)
--spec vertexAttrib2dv(Index :: integer(),V) -> ok when V :: {X :: float(),Y :: float()}.
+-spec vertexAttrib2dv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float()}.
vertexAttrib2dv(Index,{X,Y}) -> vertexAttrib2d(Index,X,Y).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib2f(Index, X, Y) -> ok when Index :: integer(),X :: float(),Y :: float().
+-spec vertexAttrib2f(Index, X, Y) -> 'ok' when Index :: integer(),X :: float(),Y :: float().
vertexAttrib2f(Index,X,Y) ->
cast(5499, <<Index:?GLuint,X:?GLfloat,Y:?GLfloat>>).
%% @equiv vertexAttrib2f(Index,X,Y)
--spec vertexAttrib2fv(Index :: integer(),V) -> ok when V :: {X :: float(),Y :: float()}.
+-spec vertexAttrib2fv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float()}.
vertexAttrib2fv(Index,{X,Y}) -> vertexAttrib2f(Index,X,Y).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib2s(Index, X, Y) -> ok when Index :: integer(),X :: integer(),Y :: integer().
+-spec vertexAttrib2s(Index, X, Y) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer().
vertexAttrib2s(Index,X,Y) ->
cast(5500, <<Index:?GLuint,X:?GLshort,Y:?GLshort>>).
%% @equiv vertexAttrib2s(Index,X,Y)
--spec vertexAttrib2sv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer()}.
+-spec vertexAttrib2sv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer()}.
vertexAttrib2sv(Index,{X,Y}) -> vertexAttrib2s(Index,X,Y).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib3d(Index, X, Y, Z) -> ok when Index :: integer(),X :: float(),Y :: float(),Z :: float().
+-spec vertexAttrib3d(Index, X, Y, Z) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),Z :: float().
vertexAttrib3d(Index,X,Y,Z) ->
cast(5501, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>).
%% @equiv vertexAttrib3d(Index,X,Y,Z)
--spec vertexAttrib3dv(Index :: integer(),V) -> ok when V :: {X :: float(),Y :: float(),Z :: float()}.
+-spec vertexAttrib3dv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}.
vertexAttrib3dv(Index,{X,Y,Z}) -> vertexAttrib3d(Index,X,Y,Z).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib3f(Index, X, Y, Z) -> ok when Index :: integer(),X :: float(),Y :: float(),Z :: float().
+-spec vertexAttrib3f(Index, X, Y, Z) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),Z :: float().
vertexAttrib3f(Index,X,Y,Z) ->
cast(5502, <<Index:?GLuint,X:?GLfloat,Y:?GLfloat,Z:?GLfloat>>).
%% @equiv vertexAttrib3f(Index,X,Y,Z)
--spec vertexAttrib3fv(Index :: integer(),V) -> ok when V :: {X :: float(),Y :: float(),Z :: float()}.
+-spec vertexAttrib3fv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}.
vertexAttrib3fv(Index,{X,Y,Z}) -> vertexAttrib3f(Index,X,Y,Z).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib3s(Index, X, Y, Z) -> ok when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer().
+-spec vertexAttrib3s(Index, X, Y, Z) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer().
vertexAttrib3s(Index,X,Y,Z) ->
cast(5503, <<Index:?GLuint,X:?GLshort,Y:?GLshort,Z:?GLshort>>).
%% @equiv vertexAttrib3s(Index,X,Y,Z)
--spec vertexAttrib3sv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
+-spec vertexAttrib3sv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
vertexAttrib3sv(Index,{X,Y,Z}) -> vertexAttrib3s(Index,X,Y,Z).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4Nbv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4Nbv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4Nbv(Index,{V1,V2,V3,V4}) ->
cast(5504, <<Index:?GLuint,V1:?GLbyte,V2:?GLbyte,V3:?GLbyte,V4:?GLbyte>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4Niv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4Niv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4Niv(Index,{V1,V2,V3,V4}) ->
cast(5505, <<Index:?GLuint,V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4Nsv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4Nsv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4Nsv(Index,{V1,V2,V3,V4}) ->
cast(5506, <<Index:?GLuint,V1:?GLshort,V2:?GLshort,V3:?GLshort,V4:?GLshort>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4Nub(Index, X, Y, Z, W) -> ok when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
+-spec vertexAttrib4Nub(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
vertexAttrib4Nub(Index,X,Y,Z,W) ->
cast(5507, <<Index:?GLuint,X:?GLubyte,Y:?GLubyte,Z:?GLubyte,W:?GLubyte>>).
%% @equiv vertexAttrib4Nub(Index,X,Y,Z,W)
--spec vertexAttrib4Nubv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
+-spec vertexAttrib4Nubv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
vertexAttrib4Nubv(Index,{X,Y,Z,W}) -> vertexAttrib4Nub(Index,X,Y,Z,W).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4Nuiv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4Nuiv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4Nuiv(Index,{V1,V2,V3,V4}) ->
cast(5508, <<Index:?GLuint,V1:?GLuint,V2:?GLuint,V3:?GLuint,V4:?GLuint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4Nusv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4Nusv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4Nusv(Index,{V1,V2,V3,V4}) ->
cast(5509, <<Index:?GLuint,V1:?GLushort,V2:?GLushort,V3:?GLushort,V4:?GLushort>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4bv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4bv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4bv(Index,{V1,V2,V3,V4}) ->
cast(5510, <<Index:?GLuint,V1:?GLbyte,V2:?GLbyte,V3:?GLbyte,V4:?GLbyte>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4d(Index, X, Y, Z, W) -> ok when Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec vertexAttrib4d(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
vertexAttrib4d(Index,X,Y,Z,W) ->
cast(5511, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>).
%% @equiv vertexAttrib4d(Index,X,Y,Z,W)
--spec vertexAttrib4dv(Index :: integer(),V) -> ok when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
+-spec vertexAttrib4dv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
vertexAttrib4dv(Index,{X,Y,Z,W}) -> vertexAttrib4d(Index,X,Y,Z,W).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4f(Index, X, Y, Z, W) -> ok when Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec vertexAttrib4f(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
vertexAttrib4f(Index,X,Y,Z,W) ->
cast(5512, <<Index:?GLuint,X:?GLfloat,Y:?GLfloat,Z:?GLfloat,W:?GLfloat>>).
%% @equiv vertexAttrib4f(Index,X,Y,Z,W)
--spec vertexAttrib4fv(Index :: integer(),V) -> ok when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
+-spec vertexAttrib4fv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
vertexAttrib4fv(Index,{X,Y,Z,W}) -> vertexAttrib4f(Index,X,Y,Z,W).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4iv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4iv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4iv(Index,{V1,V2,V3,V4}) ->
cast(5513, <<Index:?GLuint,V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4s(Index, X, Y, Z, W) -> ok when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
+-spec vertexAttrib4s(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
vertexAttrib4s(Index,X,Y,Z,W) ->
cast(5514, <<Index:?GLuint,X:?GLshort,Y:?GLshort,Z:?GLshort,W:?GLshort>>).
%% @equiv vertexAttrib4s(Index,X,Y,Z,W)
--spec vertexAttrib4sv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
+-spec vertexAttrib4sv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
vertexAttrib4sv(Index,{X,Y,Z,W}) -> vertexAttrib4s(Index,X,Y,Z,W).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4ubv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4ubv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4ubv(Index,{V1,V2,V3,V4}) ->
cast(5515, <<Index:?GLuint,V1:?GLubyte,V2:?GLubyte,V3:?GLubyte,V4:?GLubyte>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4uiv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4uiv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4uiv(Index,{V1,V2,V3,V4}) ->
cast(5516, <<Index:?GLuint,V1:?GLuint,V2:?GLuint,V3:?GLuint,V4:?GLuint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttrib4usv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttrib4usv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttrib4usv(Index,{V1,V2,V3,V4}) ->
cast(5517, <<Index:?GLuint,V1:?GLushort,V2:?GLushort,V3:?GLushort,V4:?GLushort>>).
@@ -12092,7 +12092,7 @@ vertexAttrib4usv(Index,{V1,V2,V3,V4}) ->
%% , see `glMultiDrawElements', or {@link gl:drawRangeElements/6} is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribPointer.xml">external</a> documentation.
--spec vertexAttribPointer(Index, Size, Type, Normalized, Stride, Pointer) -> ok when Index :: integer(),Size :: integer(),Type :: enum(),Normalized :: 0|1,Stride :: integer(),Pointer :: offset()|mem().
+-spec vertexAttribPointer(Index, Size, Type, Normalized, Stride, Pointer) -> 'ok' when Index :: integer(),Size :: integer(),Type :: enum(),Normalized :: 0|1,Stride :: integer(),Pointer :: offset()|mem().
vertexAttribPointer(Index,Size,Type,Normalized,Stride,Pointer) when is_integer(Pointer) ->
cast(5518, <<Index:?GLuint,Size:?GLint,Type:?GLenum,Normalized:?GLboolean,0:24,Stride:?GLsizei,Pointer:?GLuint>>);
vertexAttribPointer(Index,Size,Type,Normalized,Stride,Pointer) ->
@@ -12101,42 +12101,42 @@ vertexAttribPointer(Index,Size,Type,Normalized,Stride,Pointer) ->
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix2x3fv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix2x3fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
uniformMatrix2x3fv(Location,Transpose,Value) ->
cast(5520, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix3x2fv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix3x2fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
uniformMatrix3x2fv(Location,Transpose,Value) ->
cast(5521, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix2x4fv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix2x4fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix2x4fv(Location,Transpose,Value) ->
cast(5522, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix4x2fv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix4x2fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix4x2fv(Location,Transpose,Value) ->
cast(5523, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix3x4fv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix3x4fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix3x4fv(Location,Transpose,Value) ->
cast(5524, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat,V10:?GLfloat,V11:?GLfloat,V12:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix4x3fv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix4x3fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix4x3fv(Location,Transpose,Value) ->
cast(5525, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat,V10:?GLfloat,V11:?GLfloat,V12:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>).
@@ -12144,7 +12144,7 @@ uniformMatrix4x3fv(Location,Transpose,Value) ->
%% @doc glColorMaski
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glColorMaski.xml">external</a> documentation.
--spec colorMaski(Index, R, G, B, A) -> ok when Index :: integer(),R :: 0|1,G :: 0|1,B :: 0|1,A :: 0|1.
+-spec colorMaski(Index, R, G, B, A) -> 'ok' when Index :: integer(),R :: 0|1,G :: 0|1,B :: 0|1,A :: 0|1.
colorMaski(Index,R,G,B,A) ->
cast(5526, <<Index:?GLuint,R:?GLboolean,G:?GLboolean,B:?GLboolean,A:?GLboolean>>).
@@ -12162,14 +12162,14 @@ getIntegeri_v(Target,Index) ->
%% @doc
%% See {@link enable/1}
--spec enablei(Target, Index) -> ok when Target :: enum(),Index :: integer().
+-spec enablei(Target, Index) -> 'ok' when Target :: enum(),Index :: integer().
enablei(Target,Index) ->
cast(5529, <<Target:?GLenum,Index:?GLuint>>).
%% @doc glEnablei
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEnablei.xml">external</a> documentation.
--spec disablei(Target, Index) -> ok when Target :: enum(),Index :: integer().
+-spec disablei(Target, Index) -> 'ok' when Target :: enum(),Index :: integer().
disablei(Target,Index) ->
cast(5530, <<Target:?GLenum,Index:?GLuint>>).
@@ -12204,13 +12204,13 @@ isEnabledi(Target,Index) ->
%% </td></tr></tbody></table>
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBeginTransformFeedback.xml">external</a> documentation.
--spec beginTransformFeedback(PrimitiveMode) -> ok when PrimitiveMode :: enum().
+-spec beginTransformFeedback(PrimitiveMode) -> 'ok' when PrimitiveMode :: enum().
beginTransformFeedback(PrimitiveMode) ->
cast(5532, <<PrimitiveMode:?GLenum>>).
%% @doc
%% See {@link beginTransformFeedback/1}
--spec endTransformFeedback() -> ok.
+-spec endTransformFeedback() -> 'ok'.
endTransformFeedback() ->
cast(5533, <<>>).
@@ -12229,7 +12229,7 @@ endTransformFeedback() ->
%% while used as an indexed target.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindBufferRange.xml">external</a> documentation.
--spec bindBufferRange(Target, Index, Buffer, Offset, Size) -> ok when Target :: enum(),Index :: integer(),Buffer :: integer(),Offset :: integer(),Size :: integer().
+-spec bindBufferRange(Target, Index, Buffer, Offset, Size) -> 'ok' when Target :: enum(),Index :: integer(),Buffer :: integer(),Offset :: integer(),Size :: integer().
bindBufferRange(Target,Index,Buffer,Offset,Size) ->
cast(5534, <<Target:?GLenum,Index:?GLuint,Buffer:?GLuint,0:32,Offset:?GLintptr,Size:?GLsizeiptr>>).
@@ -12244,7 +12244,7 @@ bindBufferRange(Target,Index,Buffer,Offset,Size) ->
%% binding point specified by `Target' .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindBufferBase.xml">external</a> documentation.
--spec bindBufferBase(Target, Index, Buffer) -> ok when Target :: enum(),Index :: integer(),Buffer :: integer().
+-spec bindBufferBase(Target, Index, Buffer) -> 'ok' when Target :: enum(),Index :: integer(),Buffer :: integer().
bindBufferBase(Target,Index,Buffer) ->
cast(5535, <<Target:?GLenum,Index:?GLuint,Buffer:?GLuint>>).
@@ -12282,7 +12282,7 @@ bindBufferBase(Target,Index,Buffer) ->
%% and the buffer mode is `?GL_INTERLEAVED_ATTRIBS'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTransformFeedbackVaryings.xml">external</a> documentation.
--spec transformFeedbackVaryings(Program, Varyings, BufferMode) -> ok when Program :: integer(),Varyings :: iolist(),BufferMode :: enum().
+-spec transformFeedbackVaryings(Program, Varyings, BufferMode) -> 'ok' when Program :: integer(),Varyings :: iolist(),BufferMode :: enum().
transformFeedbackVaryings(Program,Varyings,BufferMode) ->
VaryingsTemp = list_to_binary([[Str|[0]] || Str <- Varyings ]),
cast(5536, <<Program:?GLuint,(length(Varyings)):?GLuint,(size(VaryingsTemp)):?GLuint,(VaryingsTemp)/binary,0:((8-((size(VaryingsTemp)+0) rem 8)) rem 8),BufferMode:?GLenum>>).
@@ -12331,7 +12331,7 @@ getTransformFeedbackVarying(Program,Index,BufSize) ->
%% only if the selected read buffer has fixed point components and disabled otherwise.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClampColor.xml">external</a> documentation.
--spec clampColor(Target, Clamp) -> ok when Target :: enum(),Clamp :: enum().
+-spec clampColor(Target, Clamp) -> 'ok' when Target :: enum(),Clamp :: enum().
clampColor(Target,Clamp) ->
cast(5538, <<Target:?GLenum,Clamp:?GLenum>>).
@@ -12363,20 +12363,20 @@ clampColor(Target,Clamp) ->
%% waiting for the query to complete.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBeginConditionalRender.xml">external</a> documentation.
--spec beginConditionalRender(Id, Mode) -> ok when Id :: integer(),Mode :: enum().
+-spec beginConditionalRender(Id, Mode) -> 'ok' when Id :: integer(),Mode :: enum().
beginConditionalRender(Id,Mode) ->
cast(5539, <<Id:?GLuint,Mode:?GLenum>>).
%% @doc
%% See {@link beginConditionalRender/2}
--spec endConditionalRender() -> ok.
+-spec endConditionalRender() -> 'ok'.
endConditionalRender() ->
cast(5540, <<>>).
%% @doc glVertexAttribIPointer
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribIPointer.xml">external</a> documentation.
--spec vertexAttribIPointer(Index, Size, Type, Stride, Pointer) -> ok when Index :: integer(),Size :: integer(),Type :: enum(),Stride :: integer(),Pointer :: offset()|mem().
+-spec vertexAttribIPointer(Index, Size, Type, Stride, Pointer) -> 'ok' when Index :: integer(),Size :: integer(),Type :: enum(),Stride :: integer(),Pointer :: offset()|mem().
vertexAttribIPointer(Index,Size,Type,Stride,Pointer) when is_integer(Pointer) ->
cast(5541, <<Index:?GLuint,Size:?GLint,Type:?GLenum,Stride:?GLsizei,Pointer:?GLuint>>);
vertexAttribIPointer(Index,Size,Type,Stride,Pointer) ->
@@ -12398,105 +12398,105 @@ getVertexAttribIuiv(Index,Pname) ->
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI1i(Index, X) -> ok when Index :: integer(),X :: integer().
+-spec vertexAttribI1i(Index, X) -> 'ok' when Index :: integer(),X :: integer().
vertexAttribI1i(Index,X) ->
cast(5545, <<Index:?GLuint,X:?GLint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI2i(Index, X, Y) -> ok when Index :: integer(),X :: integer(),Y :: integer().
+-spec vertexAttribI2i(Index, X, Y) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer().
vertexAttribI2i(Index,X,Y) ->
cast(5546, <<Index:?GLuint,X:?GLint,Y:?GLint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI3i(Index, X, Y, Z) -> ok when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer().
+-spec vertexAttribI3i(Index, X, Y, Z) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer().
vertexAttribI3i(Index,X,Y,Z) ->
cast(5547, <<Index:?GLuint,X:?GLint,Y:?GLint,Z:?GLint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI4i(Index, X, Y, Z, W) -> ok when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
+-spec vertexAttribI4i(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
vertexAttribI4i(Index,X,Y,Z,W) ->
cast(5548, <<Index:?GLuint,X:?GLint,Y:?GLint,Z:?GLint,W:?GLint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI1ui(Index, X) -> ok when Index :: integer(),X :: integer().
+-spec vertexAttribI1ui(Index, X) -> 'ok' when Index :: integer(),X :: integer().
vertexAttribI1ui(Index,X) ->
cast(5549, <<Index:?GLuint,X:?GLuint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI2ui(Index, X, Y) -> ok when Index :: integer(),X :: integer(),Y :: integer().
+-spec vertexAttribI2ui(Index, X, Y) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer().
vertexAttribI2ui(Index,X,Y) ->
cast(5550, <<Index:?GLuint,X:?GLuint,Y:?GLuint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI3ui(Index, X, Y, Z) -> ok when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer().
+-spec vertexAttribI3ui(Index, X, Y, Z) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer().
vertexAttribI3ui(Index,X,Y,Z) ->
cast(5551, <<Index:?GLuint,X:?GLuint,Y:?GLuint,Z:?GLuint>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI4ui(Index, X, Y, Z, W) -> ok when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
+-spec vertexAttribI4ui(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer().
vertexAttribI4ui(Index,X,Y,Z,W) ->
cast(5552, <<Index:?GLuint,X:?GLuint,Y:?GLuint,Z:?GLuint,W:?GLuint>>).
%% @equiv vertexAttribI1i(Index,X)
--spec vertexAttribI1iv(Index :: integer(),V) -> ok when V :: {X :: integer()}.
+-spec vertexAttribI1iv(Index :: integer(),V) -> 'ok' when V :: {X :: integer()}.
vertexAttribI1iv(Index,{X}) -> vertexAttribI1i(Index,X).
%% @equiv vertexAttribI2i(Index,X,Y)
--spec vertexAttribI2iv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer()}.
+-spec vertexAttribI2iv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer()}.
vertexAttribI2iv(Index,{X,Y}) -> vertexAttribI2i(Index,X,Y).
%% @equiv vertexAttribI3i(Index,X,Y,Z)
--spec vertexAttribI3iv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
+-spec vertexAttribI3iv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
vertexAttribI3iv(Index,{X,Y,Z}) -> vertexAttribI3i(Index,X,Y,Z).
%% @equiv vertexAttribI4i(Index,X,Y,Z,W)
--spec vertexAttribI4iv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
+-spec vertexAttribI4iv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
vertexAttribI4iv(Index,{X,Y,Z,W}) -> vertexAttribI4i(Index,X,Y,Z,W).
%% @equiv vertexAttribI1ui(Index,X)
--spec vertexAttribI1uiv(Index :: integer(),V) -> ok when V :: {X :: integer()}.
+-spec vertexAttribI1uiv(Index :: integer(),V) -> 'ok' when V :: {X :: integer()}.
vertexAttribI1uiv(Index,{X}) -> vertexAttribI1ui(Index,X).
%% @equiv vertexAttribI2ui(Index,X,Y)
--spec vertexAttribI2uiv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer()}.
+-spec vertexAttribI2uiv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer()}.
vertexAttribI2uiv(Index,{X,Y}) -> vertexAttribI2ui(Index,X,Y).
%% @equiv vertexAttribI3ui(Index,X,Y,Z)
--spec vertexAttribI3uiv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
+-spec vertexAttribI3uiv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}.
vertexAttribI3uiv(Index,{X,Y,Z}) -> vertexAttribI3ui(Index,X,Y,Z).
%% @equiv vertexAttribI4ui(Index,X,Y,Z,W)
--spec vertexAttribI4uiv(Index :: integer(),V) -> ok when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
+-spec vertexAttribI4uiv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}.
vertexAttribI4uiv(Index,{X,Y,Z,W}) -> vertexAttribI4ui(Index,X,Y,Z,W).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI4bv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttribI4bv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttribI4bv(Index,{V1,V2,V3,V4}) ->
cast(5553, <<Index:?GLuint,V1:?GLbyte,V2:?GLbyte,V3:?GLbyte,V4:?GLbyte>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI4sv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttribI4sv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttribI4sv(Index,{V1,V2,V3,V4}) ->
cast(5554, <<Index:?GLuint,V1:?GLshort,V2:?GLshort,V3:?GLshort,V4:?GLshort>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI4ubv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttribI4ubv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttribI4ubv(Index,{V1,V2,V3,V4}) ->
cast(5555, <<Index:?GLuint,V1:?GLubyte,V2:?GLubyte,V3:?GLubyte,V4:?GLubyte>>).
%% @doc
%% See {@link vertexAttrib1d/2}
--spec vertexAttribI4usv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec vertexAttribI4usv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
vertexAttribI4usv(Index,{V1,V2,V3,V4}) ->
cast(5556, <<Index:?GLuint,V1:?GLushort,V2:?GLushort,V3:?GLushort,V4:?GLushort>>).
@@ -12529,7 +12529,7 @@ getUniformuiv(Program,Location) ->
%% More than one varying out variable is bound to the same color number.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindFragDataLocation.xml">external</a> documentation.
--spec bindFragDataLocation(Program, Color, Name) -> ok when Program :: integer(),Color :: integer(),Name :: string().
+-spec bindFragDataLocation(Program, Color, Name) -> 'ok' when Program :: integer(),Color :: integer(),Name :: string().
bindFragDataLocation(Program,Color,Name) ->
cast(5558, <<Program:?GLuint,Color:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 1) rem 8)) rem 8)>>).
@@ -12548,59 +12548,59 @@ getFragDataLocation(Program,Name) ->
%% @doc
%% See {@link uniform1f/2}
--spec uniform1ui(Location, V0) -> ok when Location :: integer(),V0 :: integer().
+-spec uniform1ui(Location, V0) -> 'ok' when Location :: integer(),V0 :: integer().
uniform1ui(Location,V0) ->
cast(5560, <<Location:?GLint,V0:?GLuint>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform2ui(Location, V0, V1) -> ok when Location :: integer(),V0 :: integer(),V1 :: integer().
+-spec uniform2ui(Location, V0, V1) -> 'ok' when Location :: integer(),V0 :: integer(),V1 :: integer().
uniform2ui(Location,V0,V1) ->
cast(5561, <<Location:?GLint,V0:?GLuint,V1:?GLuint>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform3ui(Location, V0, V1, V2) -> ok when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer().
+-spec uniform3ui(Location, V0, V1, V2) -> 'ok' when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer().
uniform3ui(Location,V0,V1,V2) ->
cast(5562, <<Location:?GLint,V0:?GLuint,V1:?GLuint,V2:?GLuint>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform4ui(Location, V0, V1, V2, V3) -> ok when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer().
+-spec uniform4ui(Location, V0, V1, V2, V3) -> 'ok' when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer().
uniform4ui(Location,V0,V1,V2,V3) ->
cast(5563, <<Location:?GLint,V0:?GLuint,V1:?GLuint,V2:?GLuint,V3:?GLuint>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform1uiv(Location, Value) -> ok when Location :: integer(),Value :: [integer()].
+-spec uniform1uiv(Location, Value) -> 'ok' when Location :: integer(),Value :: [integer()].
uniform1uiv(Location,Value) ->
cast(5564, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<C:?GLuint>> || C <- Value>>)/binary,0:(((length(Value)) rem 2)*32)>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform2uiv(Location, Value) -> ok when Location :: integer(),Value :: [{integer(),integer()}].
+-spec uniform2uiv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{integer(),integer()}].
uniform2uiv(Location,Value) ->
cast(5565, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLuint,V2:?GLuint>> || {V1,V2} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform3uiv(Location, Value) -> ok when Location :: integer(),Value :: [{integer(),integer(),integer()}].
+-spec uniform3uiv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{integer(),integer(),integer()}].
uniform3uiv(Location,Value) ->
cast(5566, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLuint,V2:?GLuint,V3:?GLuint>> || {V1,V2,V3} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform4uiv(Location, Value) -> ok when Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}].
+-spec uniform4uiv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}].
uniform4uiv(Location,Value) ->
cast(5567, <<Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLuint,V2:?GLuint,V3:?GLuint,V4:?GLuint>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link texParameterf/3}
--spec texParameterIiv(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: tuple().
+-spec texParameterIiv(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: tuple().
texParameterIiv(Target,Pname,Params) ->
cast(5568, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
@@ -12608,7 +12608,7 @@ texParameterIiv(Target,Pname,Params) ->
%% @doc glTexParameterI
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexParameterI.xml">external</a> documentation.
--spec texParameterIuiv(Target, Pname, Params) -> ok when Target :: enum(),Pname :: enum(),Params :: tuple().
+-spec texParameterIuiv(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: tuple().
texParameterIuiv(Target,Pname,Params) ->
cast(5569, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint,
(<< <<C:?GLuint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>).
@@ -12655,21 +12655,21 @@ getTexParameterIuiv(Target,Pname) ->
%% and the buffer being cleared is defined. However, this is not an error.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClearBuffer.xml">external</a> documentation.
--spec clearBufferiv(Buffer, Drawbuffer, Value) -> ok when Buffer :: enum(),Drawbuffer :: integer(),Value :: tuple().
+-spec clearBufferiv(Buffer, Drawbuffer, Value) -> 'ok' when Buffer :: enum(),Drawbuffer :: integer(),Value :: tuple().
clearBufferiv(Buffer,Drawbuffer,Value) ->
cast(5572, <<Buffer:?GLenum,Drawbuffer:?GLint,(size(Value)):?GLuint,
(<< <<C:?GLint>> ||C <- tuple_to_list(Value)>>)/binary,0:(((1+size(Value)) rem 2)*32)>>).
%% @doc
%% See {@link clearBufferiv/3}
--spec clearBufferuiv(Buffer, Drawbuffer, Value) -> ok when Buffer :: enum(),Drawbuffer :: integer(),Value :: tuple().
+-spec clearBufferuiv(Buffer, Drawbuffer, Value) -> 'ok' when Buffer :: enum(),Drawbuffer :: integer(),Value :: tuple().
clearBufferuiv(Buffer,Drawbuffer,Value) ->
cast(5573, <<Buffer:?GLenum,Drawbuffer:?GLint,(size(Value)):?GLuint,
(<< <<C:?GLuint>> ||C <- tuple_to_list(Value)>>)/binary,0:(((1+size(Value)) rem 2)*32)>>).
%% @doc
%% See {@link clearBufferiv/3}
--spec clearBufferfv(Buffer, Drawbuffer, Value) -> ok when Buffer :: enum(),Drawbuffer :: integer(),Value :: tuple().
+-spec clearBufferfv(Buffer, Drawbuffer, Value) -> 'ok' when Buffer :: enum(),Drawbuffer :: integer(),Value :: tuple().
clearBufferfv(Buffer,Drawbuffer,Value) ->
cast(5574, <<Buffer:?GLenum,Drawbuffer:?GLint,(size(Value)):?GLuint,
(<< <<C:?GLfloat>> ||C <- tuple_to_list(Value)>>)/binary,0:(((1+size(Value)) rem 2)*32)>>).
@@ -12677,7 +12677,7 @@ clearBufferfv(Buffer,Drawbuffer,Value) ->
%% @doc glClearBufferfi
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClearBufferfi.xml">external</a> documentation.
--spec clearBufferfi(Buffer, Drawbuffer, Depth, Stencil) -> ok when Buffer :: enum(),Drawbuffer :: integer(),Depth :: float(),Stencil :: integer().
+-spec clearBufferfi(Buffer, Drawbuffer, Depth, Stencil) -> 'ok' when Buffer :: enum(),Drawbuffer :: integer(),Depth :: float(),Stencil :: integer().
clearBufferfi(Buffer,Drawbuffer,Depth,Stencil) ->
cast(5575, <<Buffer:?GLenum,Drawbuffer:?GLint,Depth:?GLfloat,Stencil:?GLint>>).
@@ -12690,14 +12690,14 @@ getStringi(Name,Index) ->
%% @doc glDrawArraysInstance
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawArraysInstance.xml">external</a> documentation.
--spec drawArraysInstanced(Mode, First, Count, Primcount) -> ok when Mode :: enum(),First :: integer(),Count :: integer(),Primcount :: integer().
+-spec drawArraysInstanced(Mode, First, Count, Primcount) -> 'ok' when Mode :: enum(),First :: integer(),Count :: integer(),Primcount :: integer().
drawArraysInstanced(Mode,First,Count,Primcount) ->
cast(5577, <<Mode:?GLenum,First:?GLint,Count:?GLsizei,Primcount:?GLsizei>>).
%% @doc glDrawElementsInstance
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElementsInstance.xml">external</a> documentation.
--spec drawElementsInstanced(Mode, Count, Type, Indices, Primcount) -> ok when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer().
+-spec drawElementsInstanced(Mode, Count, Type, Indices, Primcount) -> 'ok' when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer().
drawElementsInstanced(Mode,Count,Type,Indices,Primcount) when is_integer(Indices) ->
cast(5578, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Primcount:?GLsizei>>);
drawElementsInstanced(Mode,Count,Type,Indices,Primcount) ->
@@ -12768,7 +12768,7 @@ drawElementsInstanced(Mode,Count,Type,Indices,Primcount) ->
%% or greater than or equal to the clamped number of texels in the texel array.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexBuffer.xml">external</a> documentation.
--spec texBuffer(Target, Internalformat, Buffer) -> ok when Target :: enum(),Internalformat :: enum(),Buffer :: integer().
+-spec texBuffer(Target, Internalformat, Buffer) -> 'ok' when Target :: enum(),Internalformat :: enum(),Buffer :: integer().
texBuffer(Target,Internalformat,Buffer) ->
cast(5580, <<Target:?GLenum,Internalformat:?GLenum,Buffer:?GLuint>>).
@@ -12790,7 +12790,7 @@ texBuffer(Target,Internalformat,Buffer) ->
%% occurs before the basevertex offset is added to the array index.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPrimitiveRestartIndex.xml">external</a> documentation.
--spec primitiveRestartIndex(Index) -> ok when Index :: integer().
+-spec primitiveRestartIndex(Index) -> 'ok' when Index :: integer().
primitiveRestartIndex(Index) ->
cast(5581, <<Index:?GLuint>>).
@@ -12860,7 +12860,7 @@ getBufferParameteri64v(Target,Pname) ->
%% is not zero, then `Textarget' must be `?GL_TEXTURE_3D'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFramebufferTexture.xml">external</a> documentation.
--spec framebufferTexture(Target, Attachment, Texture, Level) -> ok when Target :: enum(),Attachment :: enum(),Texture :: integer(),Level :: integer().
+-spec framebufferTexture(Target, Attachment, Texture, Level) -> 'ok' when Target :: enum(),Attachment :: enum(),Texture :: integer(),Level :: integer().
framebufferTexture(Target,Attachment,Texture,Level) ->
cast(5584, <<Target:?GLenum,Attachment:?GLenum,Texture:?GLuint,Level:?GLint>>).
@@ -12876,7 +12876,7 @@ framebufferTexture(Target,Attachment,Texture,Level) ->
%% `Index' must be less than the value of `?GL_MAX_VERTEX_ATTRIBUTES'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribDivisor.xml">external</a> documentation.
--spec vertexAttribDivisor(Index, Divisor) -> ok when Index :: integer(),Divisor :: integer().
+-spec vertexAttribDivisor(Index, Divisor) -> 'ok' when Index :: integer(),Divisor :: integer().
vertexAttribDivisor(Index,Divisor) ->
cast(5585, <<Index:?GLuint,Divisor:?GLuint>>).
@@ -12897,39 +12897,39 @@ vertexAttribDivisor(Index,Divisor) ->
%% that subset of the fragment's samples is implementation dependent.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMinSampleShading.xml">external</a> documentation.
--spec minSampleShading(Value) -> ok when Value :: clamp().
+-spec minSampleShading(Value) -> 'ok' when Value :: clamp().
minSampleShading(Value) ->
cast(5586, <<Value:?GLclampf>>).
%% @doc
%% See {@link blendEquation/1}
--spec blendEquationi(Buf, Mode) -> ok when Buf :: integer(),Mode :: enum().
+-spec blendEquationi(Buf, Mode) -> 'ok' when Buf :: integer(),Mode :: enum().
blendEquationi(Buf,Mode) ->
cast(5587, <<Buf:?GLuint,Mode:?GLenum>>).
%% @doc
%% See {@link blendEquationSeparate/2}
--spec blendEquationSeparatei(Buf, ModeRGB, ModeAlpha) -> ok when Buf :: integer(),ModeRGB :: enum(),ModeAlpha :: enum().
+-spec blendEquationSeparatei(Buf, ModeRGB, ModeAlpha) -> 'ok' when Buf :: integer(),ModeRGB :: enum(),ModeAlpha :: enum().
blendEquationSeparatei(Buf,ModeRGB,ModeAlpha) ->
cast(5588, <<Buf:?GLuint,ModeRGB:?GLenum,ModeAlpha:?GLenum>>).
%% @doc glBlendFunci
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBlendFunci.xml">external</a> documentation.
--spec blendFunci(Buf, Src, Dst) -> ok when Buf :: integer(),Src :: enum(),Dst :: enum().
+-spec blendFunci(Buf, Src, Dst) -> 'ok' when Buf :: integer(),Src :: enum(),Dst :: enum().
blendFunci(Buf,Src,Dst) ->
cast(5589, <<Buf:?GLuint,Src:?GLenum,Dst:?GLenum>>).
%% @doc
%% See {@link blendFuncSeparate/4}
--spec blendFuncSeparatei(Buf, SrcRGB, DstRGB, SrcAlpha, DstAlpha) -> ok when Buf :: integer(),SrcRGB :: enum(),DstRGB :: enum(),SrcAlpha :: enum(),DstAlpha :: enum().
+-spec blendFuncSeparatei(Buf, SrcRGB, DstRGB, SrcAlpha, DstAlpha) -> 'ok' when Buf :: integer(),SrcRGB :: enum(),DstRGB :: enum(),SrcAlpha :: enum(),DstAlpha :: enum().
blendFuncSeparatei(Buf,SrcRGB,DstRGB,SrcAlpha,DstAlpha) ->
cast(5590, <<Buf:?GLuint,SrcRGB:?GLenum,DstRGB:?GLenum,SrcAlpha:?GLenum,DstAlpha:?GLenum>>).
%% @doc glLoadTransposeMatrixARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLoadTransposeMatrixARB.xml">external</a> documentation.
--spec loadTransposeMatrixfARB(M) -> ok when M :: matrix().
+-spec loadTransposeMatrixfARB(M) -> 'ok' when M :: matrix().
loadTransposeMatrixfARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5591, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,M13:?GLfloat,M14:?GLfloat,M15:?GLfloat,M16:?GLfloat>>);
loadTransposeMatrixfARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -12938,7 +12938,7 @@ loadTransposeMatrixfARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% @doc glLoadTransposeMatrixARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLoadTransposeMatrixARB.xml">external</a> documentation.
--spec loadTransposeMatrixdARB(M) -> ok when M :: matrix().
+-spec loadTransposeMatrixdARB(M) -> 'ok' when M :: matrix().
loadTransposeMatrixdARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5592, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,M13:?GLdouble,M14:?GLdouble,M15:?GLdouble,M16:?GLdouble>>);
loadTransposeMatrixdARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -12947,7 +12947,7 @@ loadTransposeMatrixdARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% @doc glMultTransposeMatrixARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMultTransposeMatrixARB.xml">external</a> documentation.
--spec multTransposeMatrixfARB(M) -> ok when M :: matrix().
+-spec multTransposeMatrixfARB(M) -> 'ok' when M :: matrix().
multTransposeMatrixfARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5593, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,M13:?GLfloat,M14:?GLfloat,M15:?GLfloat,M16:?GLfloat>>);
multTransposeMatrixfARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -12956,7 +12956,7 @@ multTransposeMatrixfARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% @doc glMultTransposeMatrixARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMultTransposeMatrixARB.xml">external</a> documentation.
--spec multTransposeMatrixdARB(M) -> ok when M :: matrix().
+-spec multTransposeMatrixdARB(M) -> 'ok' when M :: matrix().
multTransposeMatrixdARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) ->
cast(5594, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,M13:?GLdouble,M14:?GLdouble,M15:?GLdouble,M16:?GLdouble>>);
multTransposeMatrixdARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
@@ -12965,7 +12965,7 @@ multTransposeMatrixdARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) ->
%% @doc glWeightARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation.
--spec weightbvARB(Weights) -> ok when Weights :: [integer()].
+-spec weightbvARB(Weights) -> 'ok' when Weights :: [integer()].
weightbvARB(Weights) ->
cast(5595, <<(length(Weights)):?GLuint,
(<< <<C:?GLbyte>> || C <- Weights>>)/binary,0:((8-((length(Weights)+ 4) rem 8)) rem 8)>>).
@@ -12973,7 +12973,7 @@ weightbvARB(Weights) ->
%% @doc glWeightARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation.
--spec weightsvARB(Weights) -> ok when Weights :: [integer()].
+-spec weightsvARB(Weights) -> 'ok' when Weights :: [integer()].
weightsvARB(Weights) ->
cast(5596, <<(length(Weights)):?GLuint,
(<< <<C:?GLshort>> || C <- Weights>>)/binary,0:((8-((length(Weights)*2+ 4) rem 8)) rem 8)>>).
@@ -12981,7 +12981,7 @@ weightsvARB(Weights) ->
%% @doc glWeightARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation.
--spec weightivARB(Weights) -> ok when Weights :: [integer()].
+-spec weightivARB(Weights) -> 'ok' when Weights :: [integer()].
weightivARB(Weights) ->
cast(5597, <<(length(Weights)):?GLuint,
(<< <<C:?GLint>> || C <- Weights>>)/binary,0:(((1+length(Weights)) rem 2)*32)>>).
@@ -12989,7 +12989,7 @@ weightivARB(Weights) ->
%% @doc glWeightARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation.
--spec weightfvARB(Weights) -> ok when Weights :: [float()].
+-spec weightfvARB(Weights) -> 'ok' when Weights :: [float()].
weightfvARB(Weights) ->
cast(5598, <<(length(Weights)):?GLuint,
(<< <<C:?GLfloat>> || C <- Weights>>)/binary,0:(((1+length(Weights)) rem 2)*32)>>).
@@ -12997,7 +12997,7 @@ weightfvARB(Weights) ->
%% @doc glWeightARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation.
--spec weightdvARB(Weights) -> ok when Weights :: [float()].
+-spec weightdvARB(Weights) -> 'ok' when Weights :: [float()].
weightdvARB(Weights) ->
cast(5599, <<(length(Weights)):?GLuint,0:32,
(<< <<C:?GLdouble>> || C <- Weights>>)/binary>>).
@@ -13005,7 +13005,7 @@ weightdvARB(Weights) ->
%% @doc glWeightARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation.
--spec weightubvARB(Weights) -> ok when Weights :: [integer()].
+-spec weightubvARB(Weights) -> 'ok' when Weights :: [integer()].
weightubvARB(Weights) ->
cast(5600, <<(length(Weights)):?GLuint,
(<< <<C:?GLubyte>> || C <- Weights>>)/binary,0:((8-((length(Weights)+ 4) rem 8)) rem 8)>>).
@@ -13013,7 +13013,7 @@ weightubvARB(Weights) ->
%% @doc glWeightARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation.
--spec weightusvARB(Weights) -> ok when Weights :: [integer()].
+-spec weightusvARB(Weights) -> 'ok' when Weights :: [integer()].
weightusvARB(Weights) ->
cast(5601, <<(length(Weights)):?GLuint,
(<< <<C:?GLushort>> || C <- Weights>>)/binary,0:((8-((length(Weights)*2+ 4) rem 8)) rem 8)>>).
@@ -13021,7 +13021,7 @@ weightusvARB(Weights) ->
%% @doc glWeightARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation.
--spec weightuivARB(Weights) -> ok when Weights :: [integer()].
+-spec weightuivARB(Weights) -> 'ok' when Weights :: [integer()].
weightuivARB(Weights) ->
cast(5602, <<(length(Weights)):?GLuint,
(<< <<C:?GLuint>> || C <- Weights>>)/binary,0:(((1+length(Weights)) rem 2)*32)>>).
@@ -13029,21 +13029,21 @@ weightuivARB(Weights) ->
%% @doc glVertexBlenARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexBlenARB.xml">external</a> documentation.
--spec vertexBlendARB(Count) -> ok when Count :: integer().
+-spec vertexBlendARB(Count) -> 'ok' when Count :: integer().
vertexBlendARB(Count) ->
cast(5603, <<Count:?GLint>>).
%% @doc glCurrentPaletteMatrixARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCurrentPaletteMatrixARB.xml">external</a> documentation.
--spec currentPaletteMatrixARB(Index) -> ok when Index :: integer().
+-spec currentPaletteMatrixARB(Index) -> 'ok' when Index :: integer().
currentPaletteMatrixARB(Index) ->
cast(5604, <<Index:?GLint>>).
%% @doc glMatrixIndexARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMatrixIndexARB.xml">external</a> documentation.
--spec matrixIndexubvARB(Indices) -> ok when Indices :: [integer()].
+-spec matrixIndexubvARB(Indices) -> 'ok' when Indices :: [integer()].
matrixIndexubvARB(Indices) ->
cast(5605, <<(length(Indices)):?GLuint,
(<< <<C:?GLubyte>> || C <- Indices>>)/binary,0:((8-((length(Indices)+ 4) rem 8)) rem 8)>>).
@@ -13051,7 +13051,7 @@ matrixIndexubvARB(Indices) ->
%% @doc glMatrixIndexARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMatrixIndexARB.xml">external</a> documentation.
--spec matrixIndexusvARB(Indices) -> ok when Indices :: [integer()].
+-spec matrixIndexusvARB(Indices) -> 'ok' when Indices :: [integer()].
matrixIndexusvARB(Indices) ->
cast(5606, <<(length(Indices)):?GLuint,
(<< <<C:?GLushort>> || C <- Indices>>)/binary,0:((8-((length(Indices)*2+ 4) rem 8)) rem 8)>>).
@@ -13059,7 +13059,7 @@ matrixIndexusvARB(Indices) ->
%% @doc glMatrixIndexARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMatrixIndexARB.xml">external</a> documentation.
--spec matrixIndexuivARB(Indices) -> ok when Indices :: [integer()].
+-spec matrixIndexuivARB(Indices) -> 'ok' when Indices :: [integer()].
matrixIndexuivARB(Indices) ->
cast(5607, <<(length(Indices)):?GLuint,
(<< <<C:?GLuint>> || C <- Indices>>)/binary,0:(((1+length(Indices)) rem 2)*32)>>).
@@ -13067,21 +13067,21 @@ matrixIndexuivARB(Indices) ->
%% @doc glProgramStringARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramStringARB.xml">external</a> documentation.
--spec programStringARB(Target, Format, String) -> ok when Target :: enum(),Format :: enum(),String :: string().
+-spec programStringARB(Target, Format, String) -> 'ok' when Target :: enum(),Format :: enum(),String :: string().
programStringARB(Target,Format,String) ->
cast(5608, <<Target:?GLenum,Format:?GLenum,(list_to_binary([String|[0]]))/binary,0:((8-((length(String)+ 1) rem 8)) rem 8)>>).
%% @doc glBindProgramARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindProgramARB.xml">external</a> documentation.
--spec bindProgramARB(Target, Program) -> ok when Target :: enum(),Program :: integer().
+-spec bindProgramARB(Target, Program) -> 'ok' when Target :: enum(),Program :: integer().
bindProgramARB(Target,Program) ->
cast(5609, <<Target:?GLenum,Program:?GLuint>>).
%% @doc glDeleteProgramsARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteProgramsARB.xml">external</a> documentation.
--spec deleteProgramsARB(Programs) -> ok when Programs :: [integer()].
+-spec deleteProgramsARB(Programs) -> 'ok' when Programs :: [integer()].
deleteProgramsARB(Programs) ->
cast(5610, <<(length(Programs)):?GLuint,
(<< <<C:?GLuint>> || C <- Programs>>)/binary,0:(((1+length(Programs)) rem 2)*32)>>).
@@ -13096,56 +13096,56 @@ genProgramsARB(N) ->
%% @doc glProgramEnvParameterARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramEnvParameterARB.xml">external</a> documentation.
--spec programEnvParameter4dARB(Target, Index, X, Y, Z, W) -> ok when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec programEnvParameter4dARB(Target, Index, X, Y, Z, W) -> 'ok' when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
programEnvParameter4dARB(Target,Index,X,Y,Z,W) ->
cast(5612, <<Target:?GLenum,Index:?GLuint,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>).
%% @doc glProgramEnvParameterARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramEnvParameterARB.xml">external</a> documentation.
--spec programEnvParameter4dvARB(Target, Index, Params) -> ok when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}.
+-spec programEnvParameter4dvARB(Target, Index, Params) -> 'ok' when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}.
programEnvParameter4dvARB(Target,Index,{P1,P2,P3,P4}) ->
cast(5613, <<Target:?GLenum,Index:?GLuint,P1:?GLdouble,P2:?GLdouble,P3:?GLdouble,P4:?GLdouble>>).
%% @doc glProgramEnvParameterARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramEnvParameterARB.xml">external</a> documentation.
--spec programEnvParameter4fARB(Target, Index, X, Y, Z, W) -> ok when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec programEnvParameter4fARB(Target, Index, X, Y, Z, W) -> 'ok' when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
programEnvParameter4fARB(Target,Index,X,Y,Z,W) ->
cast(5614, <<Target:?GLenum,Index:?GLuint,X:?GLfloat,Y:?GLfloat,Z:?GLfloat,W:?GLfloat>>).
%% @doc glProgramEnvParameterARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramEnvParameterARB.xml">external</a> documentation.
--spec programEnvParameter4fvARB(Target, Index, Params) -> ok when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}.
+-spec programEnvParameter4fvARB(Target, Index, Params) -> 'ok' when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}.
programEnvParameter4fvARB(Target,Index,{P1,P2,P3,P4}) ->
cast(5615, <<Target:?GLenum,Index:?GLuint,P1:?GLfloat,P2:?GLfloat,P3:?GLfloat,P4:?GLfloat>>).
%% @doc glProgramLocalParameterARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramLocalParameterARB.xml">external</a> documentation.
--spec programLocalParameter4dARB(Target, Index, X, Y, Z, W) -> ok when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec programLocalParameter4dARB(Target, Index, X, Y, Z, W) -> 'ok' when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
programLocalParameter4dARB(Target,Index,X,Y,Z,W) ->
cast(5616, <<Target:?GLenum,Index:?GLuint,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>).
%% @doc glProgramLocalParameterARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramLocalParameterARB.xml">external</a> documentation.
--spec programLocalParameter4dvARB(Target, Index, Params) -> ok when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}.
+-spec programLocalParameter4dvARB(Target, Index, Params) -> 'ok' when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}.
programLocalParameter4dvARB(Target,Index,{P1,P2,P3,P4}) ->
cast(5617, <<Target:?GLenum,Index:?GLuint,P1:?GLdouble,P2:?GLdouble,P3:?GLdouble,P4:?GLdouble>>).
%% @doc glProgramLocalParameterARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramLocalParameterARB.xml">external</a> documentation.
--spec programLocalParameter4fARB(Target, Index, X, Y, Z, W) -> ok when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec programLocalParameter4fARB(Target, Index, X, Y, Z, W) -> 'ok' when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
programLocalParameter4fARB(Target,Index,X,Y,Z,W) ->
cast(5618, <<Target:?GLenum,Index:?GLuint,X:?GLfloat,Y:?GLfloat,Z:?GLfloat,W:?GLfloat>>).
%% @doc glProgramLocalParameterARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramLocalParameterARB.xml">external</a> documentation.
--spec programLocalParameter4fvARB(Target, Index, Params) -> ok when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}.
+-spec programLocalParameter4fvARB(Target, Index, Params) -> 'ok' when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}.
programLocalParameter4fvARB(Target,Index,{P1,P2,P3,P4}) ->
cast(5619, <<Target:?GLenum,Index:?GLuint,P1:?GLfloat,P2:?GLfloat,P3:?GLfloat,P4:?GLfloat>>).
@@ -13180,7 +13180,7 @@ getProgramLocalParameterfvARB(Target,Index) ->
%% @doc glGetProgramStringARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetProgramStringARB.xml">external</a> documentation.
--spec getProgramStringARB(Target, Pname, String) -> ok when Target :: enum(),Pname :: enum(),String :: mem().
+-spec getProgramStringARB(Target, Pname, String) -> 'ok' when Target :: enum(),Pname :: enum(),String :: mem().
getProgramStringARB(Target,Pname,String) ->
send_bin(String),
call(5624, <<Target:?GLenum,Pname:?GLenum>>).
@@ -13195,7 +13195,7 @@ getBufferParameterivARB(Target,Pname) ->
%% @doc glDeleteObjectARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteObjectARB.xml">external</a> documentation.
--spec deleteObjectARB(Obj) -> ok when Obj :: integer().
+-spec deleteObjectARB(Obj) -> 'ok' when Obj :: integer().
deleteObjectARB(Obj) ->
cast(5626, <<Obj:?GLhandleARB>>).
@@ -13209,7 +13209,7 @@ getHandleARB(Pname) ->
%% @doc glDetachObjectARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDetachObjectARB.xml">external</a> documentation.
--spec detachObjectARB(ContainerObj, AttachedObj) -> ok when ContainerObj :: integer(),AttachedObj :: integer().
+-spec detachObjectARB(ContainerObj, AttachedObj) -> 'ok' when ContainerObj :: integer(),AttachedObj :: integer().
detachObjectARB(ContainerObj,AttachedObj) ->
cast(5628, <<ContainerObj:?GLhandleARB,AttachedObj:?GLhandleARB>>).
@@ -13223,7 +13223,7 @@ createShaderObjectARB(ShaderType) ->
%% @doc glShaderSourceARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glShaderSourceARB.xml">external</a> documentation.
--spec shaderSourceARB(ShaderObj, String) -> ok when ShaderObj :: integer(),String :: iolist().
+-spec shaderSourceARB(ShaderObj, String) -> 'ok' when ShaderObj :: integer(),String :: iolist().
shaderSourceARB(ShaderObj,String) ->
StringTemp = list_to_binary([[Str|[0]] || Str <- String ]),
cast(5630, <<ShaderObj:?GLhandleARB,(length(String)):?GLuint,(size(StringTemp)):?GLuint,(StringTemp)/binary,0:((8-((size(StringTemp)+4) rem 8)) rem 8)>>).
@@ -13231,7 +13231,7 @@ shaderSourceARB(ShaderObj,String) ->
%% @doc glCompileShaderARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompileShaderARB.xml">external</a> documentation.
--spec compileShaderARB(ShaderObj) -> ok when ShaderObj :: integer().
+-spec compileShaderARB(ShaderObj) -> 'ok' when ShaderObj :: integer().
compileShaderARB(ShaderObj) ->
cast(5631, <<ShaderObj:?GLhandleARB>>).
@@ -13245,28 +13245,28 @@ createProgramObjectARB() ->
%% @doc glAttachObjectARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glAttachObjectARB.xml">external</a> documentation.
--spec attachObjectARB(ContainerObj, Obj) -> ok when ContainerObj :: integer(),Obj :: integer().
+-spec attachObjectARB(ContainerObj, Obj) -> 'ok' when ContainerObj :: integer(),Obj :: integer().
attachObjectARB(ContainerObj,Obj) ->
cast(5633, <<ContainerObj:?GLhandleARB,Obj:?GLhandleARB>>).
%% @doc glLinkProgramARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLinkProgramARB.xml">external</a> documentation.
--spec linkProgramARB(ProgramObj) -> ok when ProgramObj :: integer().
+-spec linkProgramARB(ProgramObj) -> 'ok' when ProgramObj :: integer().
linkProgramARB(ProgramObj) ->
cast(5634, <<ProgramObj:?GLhandleARB>>).
%% @doc glUseProgramObjectARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glUseProgramObjectARB.xml">external</a> documentation.
--spec useProgramObjectARB(ProgramObj) -> ok when ProgramObj :: integer().
+-spec useProgramObjectARB(ProgramObj) -> 'ok' when ProgramObj :: integer().
useProgramObjectARB(ProgramObj) ->
cast(5635, <<ProgramObj:?GLhandleARB>>).
%% @doc glValidateProgramARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glValidateProgramARB.xml">external</a> documentation.
--spec validateProgramARB(ProgramObj) -> ok when ProgramObj :: integer().
+-spec validateProgramARB(ProgramObj) -> 'ok' when ProgramObj :: integer().
validateProgramARB(ProgramObj) ->
cast(5636, <<ProgramObj:?GLhandleARB>>).
@@ -13336,7 +13336,7 @@ getShaderSourceARB(Obj,MaxLength) ->
%% @doc glBindAttribLocationARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindAttribLocationARB.xml">external</a> documentation.
--spec bindAttribLocationARB(ProgramObj, Index, Name) -> ok when ProgramObj :: integer(),Index :: integer(),Name :: string().
+-spec bindAttribLocationARB(ProgramObj, Index, Name) -> 'ok' when ProgramObj :: integer(),Index :: integer(),Name :: string().
bindAttribLocationARB(ProgramObj,Index,Name) ->
cast(5646, <<ProgramObj:?GLhandleARB,Index:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 5) rem 8)) rem 8)>>).
@@ -13378,7 +13378,7 @@ isRenderbuffer(Renderbuffer) ->
%% object to `Target' .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindRenderbuffer.xml">external</a> documentation.
--spec bindRenderbuffer(Target, Renderbuffer) -> ok when Target :: enum(),Renderbuffer :: integer().
+-spec bindRenderbuffer(Target, Renderbuffer) -> 'ok' when Target :: enum(),Renderbuffer :: integer().
bindRenderbuffer(Target,Renderbuffer) ->
cast(5650, <<Target:?GLenum,Renderbuffer:?GLuint>>).
@@ -13400,7 +13400,7 @@ bindRenderbuffer(Target,Renderbuffer) ->
%% renderbuffer image is specifically `not' detached from any non-bound framebuffers.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteRenderbuffers.xml">external</a> documentation.
--spec deleteRenderbuffers(Renderbuffers) -> ok when Renderbuffers :: [integer()].
+-spec deleteRenderbuffers(Renderbuffers) -> 'ok' when Renderbuffers :: [integer()].
deleteRenderbuffers(Renderbuffers) ->
cast(5651, <<(length(Renderbuffers)):?GLuint,
(<< <<C:?GLuint>> || C <- Renderbuffers>>)/binary,0:(((1+length(Renderbuffers)) rem 2)*32)>>).
@@ -13440,7 +13440,7 @@ genRenderbuffers(N) ->
%% undefined.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glRenderbufferStorage.xml">external</a> documentation.
--spec renderbufferStorage(Target, Internalformat, Width, Height) -> ok when Target :: enum(),Internalformat :: enum(),Width :: integer(),Height :: integer().
+-spec renderbufferStorage(Target, Internalformat, Width, Height) -> 'ok' when Target :: enum(),Internalformat :: enum(),Width :: integer(),Height :: integer().
renderbufferStorage(Target,Internalformat,Width,Height) ->
cast(5653, <<Target:?GLenum,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei>>).
@@ -13500,7 +13500,7 @@ isFramebuffer(Framebuffer) ->
%% object to `Target' .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindFramebuffer.xml">external</a> documentation.
--spec bindFramebuffer(Target, Framebuffer) -> ok when Target :: enum(),Framebuffer :: integer().
+-spec bindFramebuffer(Target, Framebuffer) -> 'ok' when Target :: enum(),Framebuffer :: integer().
bindFramebuffer(Target,Framebuffer) ->
cast(5656, <<Target:?GLenum,Framebuffer:?GLuint>>).
@@ -13515,7 +13515,7 @@ bindFramebuffer(Target,Framebuffer) ->
%% had been executed with the corresponding `Target' and `Framebuffer' zero.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteFramebuffers.xml">external</a> documentation.
--spec deleteFramebuffers(Framebuffers) -> ok when Framebuffers :: [integer()].
+-spec deleteFramebuffers(Framebuffers) -> 'ok' when Framebuffers :: [integer()].
deleteFramebuffers(Framebuffers) ->
cast(5657, <<(length(Framebuffers)):?GLuint,
(<< <<C:?GLuint>> || C <- Framebuffers>>)/binary,0:(((1+length(Framebuffers)) rem 2)*32)>>).
@@ -13591,19 +13591,19 @@ checkFramebufferStatus(Target) ->
%% @doc
%% See {@link framebufferTexture/4}
--spec framebufferTexture1D(Target, Attachment, Textarget, Texture, Level) -> ok when Target :: enum(),Attachment :: enum(),Textarget :: enum(),Texture :: integer(),Level :: integer().
+-spec framebufferTexture1D(Target, Attachment, Textarget, Texture, Level) -> 'ok' when Target :: enum(),Attachment :: enum(),Textarget :: enum(),Texture :: integer(),Level :: integer().
framebufferTexture1D(Target,Attachment,Textarget,Texture,Level) ->
cast(5660, <<Target:?GLenum,Attachment:?GLenum,Textarget:?GLenum,Texture:?GLuint,Level:?GLint>>).
%% @doc
%% See {@link framebufferTexture/4}
--spec framebufferTexture2D(Target, Attachment, Textarget, Texture, Level) -> ok when Target :: enum(),Attachment :: enum(),Textarget :: enum(),Texture :: integer(),Level :: integer().
+-spec framebufferTexture2D(Target, Attachment, Textarget, Texture, Level) -> 'ok' when Target :: enum(),Attachment :: enum(),Textarget :: enum(),Texture :: integer(),Level :: integer().
framebufferTexture2D(Target,Attachment,Textarget,Texture,Level) ->
cast(5661, <<Target:?GLenum,Attachment:?GLenum,Textarget:?GLenum,Texture:?GLuint,Level:?GLint>>).
%% @doc
%% See {@link framebufferTexture/4}
--spec framebufferTexture3D(Target, Attachment, Textarget, Texture, Level, Zoffset) -> ok when Target :: enum(),Attachment :: enum(),Textarget :: enum(),Texture :: integer(),Level :: integer(),Zoffset :: integer().
+-spec framebufferTexture3D(Target, Attachment, Textarget, Texture, Level, Zoffset) -> 'ok' when Target :: enum(),Attachment :: enum(),Textarget :: enum(),Texture :: integer(),Level :: integer(),Zoffset :: integer().
framebufferTexture3D(Target,Attachment,Textarget,Texture,Level,Zoffset) ->
cast(5662, <<Target:?GLenum,Attachment:?GLenum,Textarget:?GLenum,Texture:?GLuint,Level:?GLint,Zoffset:?GLint>>).
@@ -13635,7 +13635,7 @@ framebufferTexture3D(Target,Attachment,Textarget,Texture,Level,Zoffset) ->
%% .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFramebufferRenderbuffer.xml">external</a> documentation.
--spec framebufferRenderbuffer(Target, Attachment, Renderbuffertarget, Renderbuffer) -> ok when Target :: enum(),Attachment :: enum(),Renderbuffertarget :: enum(),Renderbuffer :: integer().
+-spec framebufferRenderbuffer(Target, Attachment, Renderbuffertarget, Renderbuffer) -> 'ok' when Target :: enum(),Attachment :: enum(),Renderbuffertarget :: enum(),Renderbuffer :: integer().
framebufferRenderbuffer(Target,Attachment,Renderbuffertarget,Renderbuffer) ->
cast(5663, <<Target:?GLenum,Attachment:?GLenum,Renderbuffertarget:?GLenum,Renderbuffer:?GLuint>>).
@@ -13751,7 +13751,7 @@ getFramebufferAttachmentParameteriv(Target,Attachment,Pname) ->
%% independently.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGenerateMipmap.xml">external</a> documentation.
--spec generateMipmap(Target) -> ok when Target :: enum().
+-spec generateMipmap(Target) -> 'ok' when Target :: enum().
generateMipmap(Target) ->
cast(5665, <<Target:?GLenum>>).
@@ -13793,7 +13793,7 @@ generateMipmap(Target) ->
%% buffers are the same, the result of the operation is undefined.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBlitFramebuffer.xml">external</a> documentation.
--spec blitFramebuffer(SrcX0, SrcY0, SrcX1, SrcY1, DstX0, DstY0, DstX1, DstY1, Mask, Filter) -> ok when SrcX0 :: integer(),SrcY0 :: integer(),SrcX1 :: integer(),SrcY1 :: integer(),DstX0 :: integer(),DstY0 :: integer(),DstX1 :: integer(),DstY1 :: integer(),Mask :: integer(),Filter :: enum().
+-spec blitFramebuffer(SrcX0, SrcY0, SrcX1, SrcY1, DstX0, DstY0, DstX1, DstY1, Mask, Filter) -> 'ok' when SrcX0 :: integer(),SrcY0 :: integer(),SrcX1 :: integer(),SrcY1 :: integer(),DstX0 :: integer(),DstY0 :: integer(),DstX1 :: integer(),DstY1 :: integer(),Mask :: integer(),Filter :: enum().
blitFramebuffer(SrcX0,SrcY0,SrcX1,SrcY1,DstX0,DstY0,DstX1,DstY1,Mask,Filter) ->
cast(5666, <<SrcX0:?GLint,SrcY0:?GLint,SrcX1:?GLint,SrcY1:?GLint,DstX0:?GLint,DstY0:?GLint,DstX1:?GLint,DstY1:?GLint,Mask:?GLbitfield,Filter:?GLenum>>).
@@ -13817,19 +13817,19 @@ blitFramebuffer(SrcX0,SrcY0,SrcX1,SrcY1,DstX0,DstY0,DstX1,DstY1,Mask,Filter) ->
%% are undefined.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glRenderbufferStorageMultisample.xml">external</a> documentation.
--spec renderbufferStorageMultisample(Target, Samples, Internalformat, Width, Height) -> ok when Target :: enum(),Samples :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer().
+-spec renderbufferStorageMultisample(Target, Samples, Internalformat, Width, Height) -> 'ok' when Target :: enum(),Samples :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer().
renderbufferStorageMultisample(Target,Samples,Internalformat,Width,Height) ->
cast(5667, <<Target:?GLenum,Samples:?GLsizei,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei>>).
%% @doc
%% See {@link framebufferTexture/4}
--spec framebufferTextureLayer(Target, Attachment, Texture, Level, Layer) -> ok when Target :: enum(),Attachment :: enum(),Texture :: integer(),Level :: integer(),Layer :: integer().
+-spec framebufferTextureLayer(Target, Attachment, Texture, Level, Layer) -> 'ok' when Target :: enum(),Attachment :: enum(),Texture :: integer(),Level :: integer(),Layer :: integer().
framebufferTextureLayer(Target,Attachment,Texture,Level,Layer) ->
cast(5668, <<Target:?GLenum,Attachment:?GLenum,Texture:?GLuint,Level:?GLint,Layer:?GLint>>).
%% @doc
%% See {@link framebufferTexture/4}
--spec framebufferTextureFaceARB(Target, Attachment, Texture, Level, Face) -> ok when Target :: enum(),Attachment :: enum(),Texture :: integer(),Level :: integer(),Face :: enum().
+-spec framebufferTextureFaceARB(Target, Attachment, Texture, Level, Face) -> 'ok' when Target :: enum(),Attachment :: enum(),Texture :: integer(),Level :: integer(),Face :: enum().
framebufferTextureFaceARB(Target,Attachment,Texture,Level,Face) ->
cast(5669, <<Target:?GLenum,Attachment:?GLenum,Texture:?GLuint,Level:?GLint,Face:?GLenum>>).
@@ -13843,7 +13843,7 @@ framebufferTextureFaceARB(Target,Attachment,Texture,Level,Face) ->
%% to indicate distinct subranges of the mapping which require flushing.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFlushMappedBufferRange.xml">external</a> documentation.
--spec flushMappedBufferRange(Target, Offset, Length) -> ok when Target :: enum(),Offset :: integer(),Length :: integer().
+-spec flushMappedBufferRange(Target, Offset, Length) -> 'ok' when Target :: enum(),Offset :: integer(),Length :: integer().
flushMappedBufferRange(Target,Offset,Length) ->
cast(5670, <<Target:?GLenum,0:32,Offset:?GLintptr,Length:?GLsizeiptr>>).
@@ -13858,7 +13858,7 @@ flushMappedBufferRange(Target,Offset,Length) ->
%% array object, and any previous vertex array object binding is broken.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindVertexArray.xml">external</a> documentation.
--spec bindVertexArray(Array) -> ok when Array :: integer().
+-spec bindVertexArray(Array) -> 'ok' when Array :: integer().
bindVertexArray(Array) ->
cast(5671, <<Array:?GLuint>>).
@@ -13871,7 +13871,7 @@ bindVertexArray(Array) ->
%% current. Unused names in `Arrays' are silently ignored, as is the value zero.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteVertexArrays.xml">external</a> documentation.
--spec deleteVertexArrays(Arrays) -> ok when Arrays :: [integer()].
+-spec deleteVertexArrays(Arrays) -> 'ok' when Arrays :: [integer()].
deleteVertexArrays(Arrays) ->
cast(5672, <<(length(Arrays)):?GLuint,
(<< <<C:?GLuint>> || C <- Arrays>>)/binary,0:(((1+length(Arrays)) rem 2)*32)>>).
@@ -14045,7 +14045,7 @@ getUniformBlockIndex(Program,UniformBlockName) ->
%% vertex, geometry, or fragment programming stages of program, respectively, is returned.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetActiveUniformBlock.xml">external</a> documentation.
--spec getActiveUniformBlockiv(Program, UniformBlockIndex, Pname, Params) -> ok when Program :: integer(),UniformBlockIndex :: integer(),Pname :: enum(),Params :: mem().
+-spec getActiveUniformBlockiv(Program, UniformBlockIndex, Pname, Params) -> 'ok' when Program :: integer(),UniformBlockIndex :: integer(),Pname :: enum(),Params :: mem().
getActiveUniformBlockiv(Program,UniformBlockIndex,Pname,Params) ->
send_bin(Params),
call(5679, <<Program:?GLuint,UniformBlockIndex:?GLuint,Pname:?GLenum>>).
@@ -14095,7 +14095,7 @@ getActiveUniformBlockName(Program,UniformBlockIndex,BufSize) ->
%% assigned to each of its active uniform blocks is reset to zero.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glUniformBlockBinding.xml">external</a> documentation.
--spec uniformBlockBinding(Program, UniformBlockIndex, UniformBlockBinding) -> ok when Program :: integer(),UniformBlockIndex :: integer(),UniformBlockBinding :: integer().
+-spec uniformBlockBinding(Program, UniformBlockIndex, UniformBlockBinding) -> 'ok' when Program :: integer(),UniformBlockIndex :: integer(),UniformBlockBinding :: integer().
uniformBlockBinding(Program,UniformBlockIndex,UniformBlockBinding) ->
cast(5681, <<Program:?GLuint,UniformBlockIndex:?GLuint,UniformBlockBinding:?GLuint>>).
@@ -14121,7 +14121,7 @@ uniformBlockBinding(Program,UniformBlockIndex,UniformBlockBinding) ->
%% , `Writeoffset' and `Size' must not overlap.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyBufferSubData.xml">external</a> documentation.
--spec copyBufferSubData(ReadTarget, WriteTarget, ReadOffset, WriteOffset, Size) -> ok when ReadTarget :: enum(),WriteTarget :: enum(),ReadOffset :: integer(),WriteOffset :: integer(),Size :: integer().
+-spec copyBufferSubData(ReadTarget, WriteTarget, ReadOffset, WriteOffset, Size) -> 'ok' when ReadTarget :: enum(),WriteTarget :: enum(),ReadOffset :: integer(),WriteOffset :: integer(),Size :: integer().
copyBufferSubData(ReadTarget,WriteTarget,ReadOffset,WriteOffset,Size) ->
cast(5682, <<ReadTarget:?GLenum,WriteTarget:?GLenum,ReadOffset:?GLintptr,WriteOffset:?GLintptr,Size:?GLsizeiptr>>).
@@ -14135,7 +14135,7 @@ copyBufferSubData(ReadTarget,WriteTarget,ReadOffset,WriteOffset,Size) ->
%% operation is undefined if the sum would be negative.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElementsBaseVertex.xml">external</a> documentation.
--spec drawElementsBaseVertex(Mode, Count, Type, Indices, Basevertex) -> ok when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Basevertex :: integer().
+-spec drawElementsBaseVertex(Mode, Count, Type, Indices, Basevertex) -> 'ok' when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Basevertex :: integer().
drawElementsBaseVertex(Mode,Count,Type,Indices,Basevertex) when is_integer(Indices) ->
cast(5683, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Basevertex:?GLint>>);
drawElementsBaseVertex(Mode,Count,Type,Indices,Basevertex) ->
@@ -14157,7 +14157,7 @@ drawElementsBaseVertex(Mode,Count,Type,Indices,Basevertex) ->
%% if the sum would be negative.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawRangeElementsBaseVertex.xml">external</a> documentation.
--spec drawRangeElementsBaseVertex(Mode, Start, End, Count, Type, Indices, Basevertex) -> ok when Mode :: enum(),Start :: integer(),End :: integer(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Basevertex :: integer().
+-spec drawRangeElementsBaseVertex(Mode, Start, End, Count, Type, Indices, Basevertex) -> 'ok' when Mode :: enum(),Start :: integer(),End :: integer(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Basevertex :: integer().
drawRangeElementsBaseVertex(Mode,Start,End,Count,Type,Indices,Basevertex) when is_integer(Indices) ->
cast(5685, <<Mode:?GLenum,Start:?GLuint,End:?GLuint,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Basevertex:?GLint>>);
drawRangeElementsBaseVertex(Mode,Start,End,Count,Type,Indices,Basevertex) ->
@@ -14174,7 +14174,7 @@ drawRangeElementsBaseVertex(Mode,Start,End,Count,Type,Indices,Basevertex) ->
%% conditions). The operation is undefined if the sum would be negative.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElementsInstancedBaseVertex.xml">external</a> documentation.
--spec drawElementsInstancedBaseVertex(Mode, Count, Type, Indices, Primcount, Basevertex) -> ok when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer(),Basevertex :: integer().
+-spec drawElementsInstancedBaseVertex(Mode, Count, Type, Indices, Primcount, Basevertex) -> 'ok' when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer(),Basevertex :: integer().
drawElementsInstancedBaseVertex(Mode,Count,Type,Indices,Primcount,Basevertex) when is_integer(Indices) ->
cast(5687, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Primcount:?GLsizei,Basevertex:?GLint>>);
drawElementsInstancedBaseVertex(Mode,Count,Type,Indices,Primcount,Basevertex) ->
@@ -14211,7 +14211,7 @@ drawElementsInstancedBaseVertex(Mode,Count,Type,Indices,Primcount,Basevertex) ->
%% by using the flat qualifier when declaring the output.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProvokingVertex.xml">external</a> documentation.
--spec provokingVertex(Mode) -> ok when Mode :: enum().
+-spec provokingVertex(Mode) -> 'ok' when Mode :: enum().
provokingVertex(Mode) ->
cast(5689, <<Mode:?GLenum>>).
@@ -14263,7 +14263,7 @@ isSync(Sync) ->
%% ``gl:deleteSync'' will silently ignore a `Sync' value of zero.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteSync.xml">external</a> documentation.
--spec deleteSync(Sync) -> ok when Sync :: integer().
+-spec deleteSync(Sync) -> 'ok' when Sync :: integer().
deleteSync(Sync) ->
cast(5692, <<Sync:?GLsync>>).
@@ -14311,7 +14311,7 @@ clientWaitSync(Sync,Flags,Timeout) ->
%% If an error occurs, ``gl:waitSync'' does not cause the GL server to block.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWaitSync.xml">external</a> documentation.
--spec waitSync(Sync, Flags, Timeout) -> ok when Sync :: integer(),Flags :: integer(),Timeout :: integer().
+-spec waitSync(Sync, Flags, Timeout) -> 'ok' when Sync :: integer(),Flags :: integer(),Timeout :: integer().
waitSync(Sync,Flags,Timeout) ->
cast(5694, <<Sync:?GLsync,Flags:?GLbitfield,0:32,Timeout:?GLuint64>>).
@@ -14380,7 +14380,7 @@ getSynciv(Sync,Pname,BufSize) ->
%% on the multisample texture targets.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexImage2DMultisample.xml">external</a> documentation.
--spec texImage2DMultisample(Target, Samples, Internalformat, Width, Height, Fixedsamplelocations) -> ok when Target :: enum(),Samples :: integer(),Internalformat :: integer(),Width :: integer(),Height :: integer(),Fixedsamplelocations :: 0|1.
+-spec texImage2DMultisample(Target, Samples, Internalformat, Width, Height, Fixedsamplelocations) -> 'ok' when Target :: enum(),Samples :: integer(),Internalformat :: integer(),Width :: integer(),Height :: integer(),Fixedsamplelocations :: 0|1.
texImage2DMultisample(Target,Samples,Internalformat,Width,Height,Fixedsamplelocations) ->
cast(5697, <<Target:?GLenum,Samples:?GLsizei,Internalformat:?GLint,Width:?GLsizei,Height:?GLsizei,Fixedsamplelocations:?GLboolean>>).
@@ -14408,7 +14408,7 @@ texImage2DMultisample(Target,Samples,Internalformat,Width,Height,Fixedsampleloca
%% on the multisample texture targets.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexImage3DMultisample.xml">external</a> documentation.
--spec texImage3DMultisample(Target, Samples, Internalformat, Width, Height, Depth, Fixedsamplelocations) -> ok when Target :: enum(),Samples :: integer(),Internalformat :: integer(),Width :: integer(),Height :: integer(),Depth :: integer(),Fixedsamplelocations :: 0|1.
+-spec texImage3DMultisample(Target, Samples, Internalformat, Width, Height, Depth, Fixedsamplelocations) -> 'ok' when Target :: enum(),Samples :: integer(),Internalformat :: integer(),Width :: integer(),Height :: integer(),Depth :: integer(),Fixedsamplelocations :: 0|1.
texImage3DMultisample(Target,Samples,Internalformat,Width,Height,Depth,Fixedsamplelocations) ->
cast(5698, <<Target:?GLenum,Samples:?GLsizei,Internalformat:?GLint,Width:?GLsizei,Height:?GLsizei,Depth:?GLsizei,Fixedsamplelocations:?GLboolean>>).
@@ -14441,28 +14441,28 @@ getMultisamplefv(Pname,Index) ->
%% to sample 32 x `M' + `B'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSampleMaski.xml">external</a> documentation.
--spec sampleMaski(Index, Mask) -> ok when Index :: integer(),Mask :: integer().
+-spec sampleMaski(Index, Mask) -> 'ok' when Index :: integer(),Mask :: integer().
sampleMaski(Index,Mask) ->
cast(5700, <<Index:?GLuint,Mask:?GLbitfield>>).
%% @doc glNamedStringARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glNamedStringARB.xml">external</a> documentation.
--spec namedStringARB(Type, Name, String) -> ok when Type :: enum(),Name :: string(),String :: string().
+-spec namedStringARB(Type, Name, String) -> 'ok' when Type :: enum(),Name :: string(),String :: string().
namedStringARB(Type,Name,String) ->
cast(5701, <<Type:?GLenum,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 5) rem 8)) rem 8),(list_to_binary([String|[0]]))/binary,0:((8-((length(String)+ 1) rem 8)) rem 8)>>).
%% @doc glDeleteNamedStringARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteNamedStringARB.xml">external</a> documentation.
--spec deleteNamedStringARB(Name) -> ok when Name :: string().
+-spec deleteNamedStringARB(Name) -> 'ok' when Name :: string().
deleteNamedStringARB(Name) ->
cast(5702, <<(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 1) rem 8)) rem 8)>>).
%% @doc glCompileShaderIncludeARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompileShaderIncludeARB.xml">external</a> documentation.
--spec compileShaderIncludeARB(Shader, Path) -> ok when Shader :: integer(),Path :: iolist().
+-spec compileShaderIncludeARB(Shader, Path) -> 'ok' when Shader :: integer(),Path :: iolist().
compileShaderIncludeARB(Shader,Path) ->
PathTemp = list_to_binary([[Str|[0]] || Str <- Path ]),
cast(5703, <<Shader:?GLuint,(length(Path)):?GLuint,(size(PathTemp)):?GLuint,(PathTemp)/binary,0:((8-((size(PathTemp)+0) rem 8)) rem 8)>>).
@@ -14491,7 +14491,7 @@ getNamedStringivARB(Name,Pname) ->
%% @doc glBindFragDataLocationIndexe
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindFragDataLocationIndexe.xml">external</a> documentation.
--spec bindFragDataLocationIndexed(Program, ColorNumber, Index, Name) -> ok when Program :: integer(),ColorNumber :: integer(),Index :: integer(),Name :: string().
+-spec bindFragDataLocationIndexed(Program, ColorNumber, Index, Name) -> 'ok' when Program :: integer(),ColorNumber :: integer(),Index :: integer(),Name :: string().
bindFragDataLocationIndexed(Program,ColorNumber,Index,Name) ->
cast(5707, <<Program:?GLuint,ColorNumber:?GLuint,Index:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 5) rem 8)) rem 8)>>).
@@ -14533,7 +14533,7 @@ genSamplers(Count) ->
%% names in samplers are silently ignored, as is the reserved name zero.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteSamplers.xml">external</a> documentation.
--spec deleteSamplers(Samplers) -> ok when Samplers :: [integer()].
+-spec deleteSamplers(Samplers) -> 'ok' when Samplers :: [integer()].
deleteSamplers(Samplers) ->
cast(5710, <<(length(Samplers)):?GLuint,
(<< <<C:?GLuint>> || C <- Samplers>>)/binary,0:(((1+length(Samplers)) rem 2)*32)>>).
@@ -14564,7 +14564,7 @@ isSampler(Sampler) ->
%% be bound to multiple texture units simultaneously.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindSampler.xml">external</a> documentation.
--spec bindSampler(Unit, Sampler) -> ok when Unit :: integer(),Sampler :: integer().
+-spec bindSampler(Unit, Sampler) -> 'ok' when Unit :: integer(),Sampler :: integer().
bindSampler(Unit,Sampler) ->
cast(5712, <<Unit:?GLuint,Sampler:?GLuint>>).
@@ -14710,33 +14710,33 @@ bindSampler(Unit,Sampler) ->
%% bound texture. result is assigned to R t.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSamplerParameter.xml">external</a> documentation.
--spec samplerParameteri(Sampler, Pname, Param) -> ok when Sampler :: integer(),Pname :: enum(),Param :: integer().
+-spec samplerParameteri(Sampler, Pname, Param) -> 'ok' when Sampler :: integer(),Pname :: enum(),Param :: integer().
samplerParameteri(Sampler,Pname,Param) ->
cast(5713, <<Sampler:?GLuint,Pname:?GLenum,Param:?GLint>>).
%% @doc
%% See {@link samplerParameteri/3}
--spec samplerParameteriv(Sampler, Pname, Param) -> ok when Sampler :: integer(),Pname :: enum(),Param :: [integer()].
+-spec samplerParameteriv(Sampler, Pname, Param) -> 'ok' when Sampler :: integer(),Pname :: enum(),Param :: [integer()].
samplerParameteriv(Sampler,Pname,Param) ->
cast(5714, <<Sampler:?GLuint,Pname:?GLenum,(length(Param)):?GLuint,
(<< <<C:?GLint>> || C <- Param>>)/binary,0:(((1+length(Param)) rem 2)*32)>>).
%% @doc
%% See {@link samplerParameteri/3}
--spec samplerParameterf(Sampler, Pname, Param) -> ok when Sampler :: integer(),Pname :: enum(),Param :: float().
+-spec samplerParameterf(Sampler, Pname, Param) -> 'ok' when Sampler :: integer(),Pname :: enum(),Param :: float().
samplerParameterf(Sampler,Pname,Param) ->
cast(5715, <<Sampler:?GLuint,Pname:?GLenum,Param:?GLfloat>>).
%% @doc
%% See {@link samplerParameteri/3}
--spec samplerParameterfv(Sampler, Pname, Param) -> ok when Sampler :: integer(),Pname :: enum(),Param :: [float()].
+-spec samplerParameterfv(Sampler, Pname, Param) -> 'ok' when Sampler :: integer(),Pname :: enum(),Param :: [float()].
samplerParameterfv(Sampler,Pname,Param) ->
cast(5716, <<Sampler:?GLuint,Pname:?GLenum,(length(Param)):?GLuint,
(<< <<C:?GLfloat>> || C <- Param>>)/binary,0:(((1+length(Param)) rem 2)*32)>>).
%% @doc
%% See {@link samplerParameteri/3}
--spec samplerParameterIiv(Sampler, Pname, Param) -> ok when Sampler :: integer(),Pname :: enum(),Param :: [integer()].
+-spec samplerParameterIiv(Sampler, Pname, Param) -> 'ok' when Sampler :: integer(),Pname :: enum(),Param :: [integer()].
samplerParameterIiv(Sampler,Pname,Param) ->
cast(5717, <<Sampler:?GLuint,Pname:?GLenum,(length(Param)):?GLuint,
(<< <<C:?GLint>> || C <- Param>>)/binary,0:(((1+length(Param)) rem 2)*32)>>).
@@ -14744,7 +14744,7 @@ samplerParameterIiv(Sampler,Pname,Param) ->
%% @doc glSamplerParameterI
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSamplerParameterI.xml">external</a> documentation.
--spec samplerParameterIuiv(Sampler, Pname, Param) -> ok when Sampler :: integer(),Pname :: enum(),Param :: [integer()].
+-spec samplerParameterIuiv(Sampler, Pname, Param) -> 'ok' when Sampler :: integer(),Pname :: enum(),Param :: [integer()].
samplerParameterIuiv(Sampler,Pname,Param) ->
cast(5718, <<Sampler:?GLuint,Pname:?GLenum,(length(Param)):?GLuint,
(<< <<C:?GLuint>> || C <- Param>>)/binary,0:(((1+length(Param)) rem 2)*32)>>).
@@ -14826,7 +14826,7 @@ getSamplerParameterIuiv(Sampler,Pname) ->
%% that query object.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glQueryCounter.xml">external</a> documentation.
--spec queryCounter(Id, Target) -> ok when Id :: integer(),Target :: enum().
+-spec queryCounter(Id, Target) -> 'ok' when Id :: integer(),Target :: enum().
queryCounter(Id,Target) ->
cast(5723, <<Id:?GLuint,Target:?GLenum>>).
@@ -14870,7 +14870,7 @@ getQueryObjectui64v(Id,Pname) ->
%% well defined.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawArraysIndirect.xml">external</a> documentation.
--spec drawArraysIndirect(Mode, Indirect) -> ok when Mode :: enum(),Indirect :: offset()|mem().
+-spec drawArraysIndirect(Mode, Indirect) -> 'ok' when Mode :: enum(),Indirect :: offset()|mem().
drawArraysIndirect(Mode,Indirect) when is_integer(Indirect) ->
cast(5726, <<Mode:?GLenum,Indirect:?GLuint>>);
drawArraysIndirect(Mode,Indirect) ->
@@ -14910,7 +14910,7 @@ drawArraysIndirect(Mode,Indirect) ->
%% well defined.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElementsIndirect.xml">external</a> documentation.
--spec drawElementsIndirect(Mode, Type, Indirect) -> ok when Mode :: enum(),Type :: enum(),Indirect :: offset()|mem().
+-spec drawElementsIndirect(Mode, Type, Indirect) -> 'ok' when Mode :: enum(),Type :: enum(),Indirect :: offset()|mem().
drawElementsIndirect(Mode,Type,Indirect) when is_integer(Indirect) ->
cast(5728, <<Mode:?GLenum,Type:?GLenum,Indirect:?GLuint>>);
drawElementsIndirect(Mode,Type,Indirect) ->
@@ -14919,115 +14919,115 @@ drawElementsIndirect(Mode,Type,Indirect) ->
%% @doc
%% See {@link uniform1f/2}
--spec uniform1d(Location, X) -> ok when Location :: integer(),X :: float().
+-spec uniform1d(Location, X) -> 'ok' when Location :: integer(),X :: float().
uniform1d(Location,X) ->
cast(5730, <<Location:?GLint,0:32,X:?GLdouble>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform2d(Location, X, Y) -> ok when Location :: integer(),X :: float(),Y :: float().
+-spec uniform2d(Location, X, Y) -> 'ok' when Location :: integer(),X :: float(),Y :: float().
uniform2d(Location,X,Y) ->
cast(5731, <<Location:?GLint,0:32,X:?GLdouble,Y:?GLdouble>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform3d(Location, X, Y, Z) -> ok when Location :: integer(),X :: float(),Y :: float(),Z :: float().
+-spec uniform3d(Location, X, Y, Z) -> 'ok' when Location :: integer(),X :: float(),Y :: float(),Z :: float().
uniform3d(Location,X,Y,Z) ->
cast(5732, <<Location:?GLint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform4d(Location, X, Y, Z, W) -> ok when Location :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec uniform4d(Location, X, Y, Z, W) -> 'ok' when Location :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
uniform4d(Location,X,Y,Z,W) ->
cast(5733, <<Location:?GLint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform1dv(Location, Value) -> ok when Location :: integer(),Value :: [float()].
+-spec uniform1dv(Location, Value) -> 'ok' when Location :: integer(),Value :: [float()].
uniform1dv(Location,Value) ->
cast(5734, <<Location:?GLint,0:32,(length(Value)):?GLuint,0:32,
(<< <<C:?GLdouble>> || C <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform2dv(Location, Value) -> ok when Location :: integer(),Value :: [{float(),float()}].
+-spec uniform2dv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{float(),float()}].
uniform2dv(Location,Value) ->
cast(5735, <<Location:?GLint,0:32,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble>> || {V1,V2} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform3dv(Location, Value) -> ok when Location :: integer(),Value :: [{float(),float(),float()}].
+-spec uniform3dv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{float(),float(),float()}].
uniform3dv(Location,Value) ->
cast(5736, <<Location:?GLint,0:32,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble>> || {V1,V2,V3} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniform4dv(Location, Value) -> ok when Location :: integer(),Value :: [{float(),float(),float(),float()}].
+-spec uniform4dv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{float(),float(),float(),float()}].
uniform4dv(Location,Value) ->
cast(5737, <<Location:?GLint,0:32,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix2dv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}].
+-spec uniformMatrix2dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}].
uniformMatrix2dv(Location,Transpose,Value) ->
cast(5738, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix3dv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix3dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix3dv(Location,Transpose,Value) ->
cast(5739, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix4dv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix4dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix4dv(Location,Transpose,Value) ->
cast(5740, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble,V10:?GLdouble,V11:?GLdouble,V12:?GLdouble,V13:?GLdouble,V14:?GLdouble,V15:?GLdouble,V16:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix2x3dv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix2x3dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
uniformMatrix2x3dv(Location,Transpose,Value) ->
cast(5741, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix2x4dv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix2x4dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix2x4dv(Location,Transpose,Value) ->
cast(5742, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix3x2dv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix3x2dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
uniformMatrix3x2dv(Location,Transpose,Value) ->
cast(5743, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix3x4dv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix3x4dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix3x4dv(Location,Transpose,Value) ->
cast(5744, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble,V10:?GLdouble,V11:?GLdouble,V12:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix4x2dv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix4x2dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix4x2dv(Location,Transpose,Value) ->
cast(5745, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>).
%% @doc
%% See {@link uniform1f/2}
--spec uniformMatrix4x3dv(Location, Transpose, Value) -> ok when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec uniformMatrix4x3dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
uniformMatrix4x3dv(Location,Transpose,Value) ->
cast(5746, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble,V10:?GLdouble,V11:?GLdouble,V12:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>).
@@ -15126,7 +15126,7 @@ getActiveSubroutineName(Program,Shadertype,Index,Bufsize) ->
%% for the shader stage.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glUniformSubroutines.xml">external</a> documentation.
--spec uniformSubroutinesuiv(Shadertype, Indices) -> ok when Shadertype :: enum(),Indices :: [integer()].
+-spec uniformSubroutinesuiv(Shadertype, Indices) -> 'ok' when Shadertype :: enum(),Indices :: [integer()].
uniformSubroutinesuiv(Shadertype,Indices) ->
cast(5752, <<Shadertype:?GLenum,(length(Indices)):?GLuint,
(<< <<C:?GLuint>> || C <- Indices>>)/binary,0:(((length(Indices)) rem 2)*32)>>).
@@ -15199,13 +15199,13 @@ getProgramStageiv(Program,Shadertype,Pname) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPatchParameter.xml">external</a> documentation.
--spec patchParameteri(Pname, Value) -> ok when Pname :: enum(),Value :: integer().
+-spec patchParameteri(Pname, Value) -> 'ok' when Pname :: enum(),Value :: integer().
patchParameteri(Pname,Value) ->
cast(5755, <<Pname:?GLenum,Value:?GLint>>).
%% @doc
%% See {@link patchParameteri/2}
--spec patchParameterfv(Pname, Values) -> ok when Pname :: enum(),Values :: [float()].
+-spec patchParameterfv(Pname, Values) -> 'ok' when Pname :: enum(),Values :: [float()].
patchParameterfv(Pname,Values) ->
cast(5756, <<Pname:?GLenum,(length(Values)):?GLuint,
(<< <<C:?GLfloat>> || C <- Values>>)/binary,0:(((length(Values)) rem 2)*32)>>).
@@ -15229,7 +15229,7 @@ patchParameterfv(Pname,Values) ->
%% the currently bound transform feedback object.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindTransformFeedback.xml">external</a> documentation.
--spec bindTransformFeedback(Target, Id) -> ok when Target :: enum(),Id :: integer().
+-spec bindTransformFeedback(Target, Id) -> 'ok' when Target :: enum(),Id :: integer().
bindTransformFeedback(Target,Id) ->
cast(5757, <<Target:?GLenum,Id:?GLuint>>).
@@ -15242,7 +15242,7 @@ bindTransformFeedback(Target,Id) ->
%% becomes unused, but the underlying object is not deleted until it is no longer active.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteTransformFeedbacks.xml">external</a> documentation.
--spec deleteTransformFeedbacks(Ids) -> ok when Ids :: [integer()].
+-spec deleteTransformFeedbacks(Ids) -> 'ok' when Ids :: [integer()].
deleteTransformFeedbacks(Ids) ->
cast(5758, <<(length(Ids)):?GLuint,
(<< <<C:?GLuint>> || C <- Ids>>)/binary,0:(((1+length(Ids)) rem 2)*32)>>).
@@ -15282,7 +15282,7 @@ isTransformFeedback(Id) ->
%% while transform feedback is paused.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPauseTransformFeedback.xml">external</a> documentation.
--spec pauseTransformFeedback() -> ok.
+-spec pauseTransformFeedback() -> 'ok'.
pauseTransformFeedback() ->
cast(5761, <<>>).
@@ -15295,7 +15295,7 @@ pauseTransformFeedback() ->
%% while transform feedback is paused.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glResumeTransformFeedback.xml">external</a> documentation.
--spec resumeTransformFeedback() -> ok.
+-spec resumeTransformFeedback() -> 'ok'.
resumeTransformFeedback() ->
cast(5762, <<>>).
@@ -15309,7 +15309,7 @@ resumeTransformFeedback() ->
%% by `Id' .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawTransformFeedback.xml">external</a> documentation.
--spec drawTransformFeedback(Mode, Id) -> ok when Mode :: enum(),Id :: integer().
+-spec drawTransformFeedback(Mode, Id) -> 'ok' when Mode :: enum(),Id :: integer().
drawTransformFeedback(Mode,Id) ->
cast(5763, <<Mode:?GLenum,Id:?GLuint>>).
@@ -15327,14 +15327,14 @@ drawTransformFeedback(Mode,Id) ->
%% with `Stream' set to zero.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawTransformFeedbackStream.xml">external</a> documentation.
--spec drawTransformFeedbackStream(Mode, Id, Stream) -> ok when Mode :: enum(),Id :: integer(),Stream :: integer().
+-spec drawTransformFeedbackStream(Mode, Id, Stream) -> 'ok' when Mode :: enum(),Id :: integer(),Stream :: integer().
drawTransformFeedbackStream(Mode,Id,Stream) ->
cast(5764, <<Mode:?GLenum,Id:?GLuint,Stream:?GLuint>>).
%% @doc glBeginQueryIndexe
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBeginQueryIndexe.xml">external</a> documentation.
--spec beginQueryIndexed(Target, Index, Id) -> ok when Target :: enum(),Index :: integer(),Id :: integer().
+-spec beginQueryIndexed(Target, Index, Id) -> 'ok' when Target :: enum(),Index :: integer(),Id :: integer().
beginQueryIndexed(Target,Index,Id) ->
cast(5765, <<Target:?GLenum,Index:?GLuint,Id:?GLuint>>).
@@ -15411,7 +15411,7 @@ beginQueryIndexed(Target,Index,Id) ->
%% is not yet complete.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBeginQueryIndexed.xml">external</a> documentation.
--spec endQueryIndexed(Target, Index) -> ok when Target :: enum(),Index :: integer().
+-spec endQueryIndexed(Target, Index) -> 'ok' when Target :: enum(),Index :: integer().
endQueryIndexed(Target,Index) ->
cast(5766, <<Target:?GLenum,Index:?GLuint>>).
@@ -15441,7 +15441,7 @@ getQueryIndexediv(Target,Index,Pname) ->
%% freed by the call to ``gl:releaseShaderCompiler''.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glReleaseShaderCompiler.xml">external</a> documentation.
--spec releaseShaderCompiler() -> ok.
+-spec releaseShaderCompiler() -> 'ok'.
releaseShaderCompiler() ->
cast(5768, <<>>).
@@ -15463,7 +15463,7 @@ releaseShaderCompiler() ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glShaderBinary.xml">external</a> documentation.
--spec shaderBinary(Shaders, Binaryformat, Binary) -> ok when Shaders :: [integer()],Binaryformat :: enum(),Binary :: binary().
+-spec shaderBinary(Shaders, Binaryformat, Binary) -> 'ok' when Shaders :: [integer()],Binaryformat :: enum(),Binary :: binary().
shaderBinary(Shaders,Binaryformat,Binary) ->
send_bin(Binary),
cast(5769, <<(length(Shaders)):?GLuint,
@@ -15496,14 +15496,14 @@ getShaderPrecisionFormat(Shadertype,Precisiontype) ->
%% @doc
%% See {@link depthRange/2}
--spec depthRangef(N, F) -> ok when N :: clamp(),F :: clamp().
+-spec depthRangef(N, F) -> 'ok' when N :: clamp(),F :: clamp().
depthRangef(N,F) ->
cast(5771, <<N:?GLclampf,F:?GLclampf>>).
%% @doc glClearDepthf
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClearDepthf.xml">external</a> documentation.
--spec clearDepthf(D) -> ok when D :: clamp().
+-spec clearDepthf(D) -> 'ok' when D :: clamp().
clearDepthf(D) ->
cast(5772, <<D:?GLclampf>>).
@@ -15551,7 +15551,7 @@ getProgramBinary(Program,BufSize) ->
%% the program was linked before saving are restored with ``gl:programBinary'' is called.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramBinary.xml">external</a> documentation.
--spec programBinary(Program, BinaryFormat, Binary) -> ok when Program :: integer(),BinaryFormat :: enum(),Binary :: binary().
+-spec programBinary(Program, BinaryFormat, Binary) -> 'ok' when Program :: integer(),BinaryFormat :: enum(),Binary :: binary().
programBinary(Program,BinaryFormat,Binary) ->
send_bin(Binary),
cast(5774, <<Program:?GLuint,BinaryFormat:?GLenum>>).
@@ -15577,7 +15577,7 @@ programBinary(Program,BinaryFormat,Binary) ->
%% is `?GL_FALSE'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramParameter.xml">external</a> documentation.
--spec programParameteri(Program, Pname, Value) -> ok when Program :: integer(),Pname :: enum(),Value :: integer().
+-spec programParameteri(Program, Pname, Value) -> 'ok' when Program :: integer(),Pname :: enum(),Value :: integer().
programParameteri(Program,Pname,Value) ->
cast(5775, <<Program:?GLuint,Pname:?GLenum,Value:?GLint>>).
@@ -15602,7 +15602,7 @@ programParameteri(Program,Pname,Value) ->
%% , an error is generated.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glUseProgramStages.xml">external</a> documentation.
--spec useProgramStages(Pipeline, Stages, Program) -> ok when Pipeline :: integer(),Stages :: integer(),Program :: integer().
+-spec useProgramStages(Pipeline, Stages, Program) -> 'ok' when Pipeline :: integer(),Stages :: integer(),Program :: integer().
useProgramStages(Pipeline,Stages,Program) ->
cast(5776, <<Pipeline:?GLuint,Stages:?GLbitfield,Program:?GLuint>>).
@@ -15614,7 +15614,7 @@ useProgramStages(Pipeline,Stages,Program) ->
%% no program has been made current through a call to {@link gl:useProgram/1} .
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glActiveShaderProgram.xml">external</a> documentation.
--spec activeShaderProgram(Pipeline, Program) -> ok when Pipeline :: integer(),Program :: integer().
+-spec activeShaderProgram(Pipeline, Program) -> 'ok' when Pipeline :: integer(),Program :: integer().
activeShaderProgram(Pipeline,Program) ->
cast(5777, <<Pipeline:?GLuint,Program:?GLuint>>).
@@ -15644,7 +15644,7 @@ createShaderProgramv(Type,Strings) ->
%% taken from its program objects.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindProgramPipeline.xml">external</a> documentation.
--spec bindProgramPipeline(Pipeline) -> ok when Pipeline :: integer().
+-spec bindProgramPipeline(Pipeline) -> 'ok' when Pipeline :: integer().
bindProgramPipeline(Pipeline) ->
cast(5779, <<Pipeline:?GLuint>>).
@@ -15658,7 +15658,7 @@ bindProgramPipeline(Pipeline) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteProgramPipelines.xml">external</a> documentation.
--spec deleteProgramPipelines(Pipelines) -> ok when Pipelines :: [integer()].
+-spec deleteProgramPipelines(Pipelines) -> 'ok' when Pipelines :: [integer()].
deleteProgramPipelines(Pipelines) ->
cast(5780, <<(length(Pipelines)):?GLuint,
(<< <<C:?GLuint>> || C <- Pipelines>>)/binary,0:(((1+length(Pipelines)) rem 2)*32)>>).
@@ -15790,334 +15790,334 @@ getProgramPipelineiv(Pipeline,Pname) ->
%% a single matrix, and a count greater than 1 can be used to modify an array of matrices.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramUniform.xml">external</a> documentation.
--spec programUniform1i(Program, Location, V0) -> ok when Program :: integer(),Location :: integer(),V0 :: integer().
+-spec programUniform1i(Program, Location, V0) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer().
programUniform1i(Program,Location,V0) ->
cast(5784, <<Program:?GLuint,Location:?GLint,V0:?GLint>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform1iv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [integer()].
+-spec programUniform1iv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [integer()].
programUniform1iv(Program,Location,Value) ->
cast(5785, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<C:?GLint>> || C <- Value>>)/binary,0:(((1+length(Value)) rem 2)*32)>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform1f(Program, Location, V0) -> ok when Program :: integer(),Location :: integer(),V0 :: float().
+-spec programUniform1f(Program, Location, V0) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float().
programUniform1f(Program,Location,V0) ->
cast(5786, <<Program:?GLuint,Location:?GLint,V0:?GLfloat>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform1fv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [float()].
+-spec programUniform1fv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [float()].
programUniform1fv(Program,Location,Value) ->
cast(5787, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<C:?GLfloat>> || C <- Value>>)/binary,0:(((1+length(Value)) rem 2)*32)>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform1d(Program, Location, V0) -> ok when Program :: integer(),Location :: integer(),V0 :: float().
+-spec programUniform1d(Program, Location, V0) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float().
programUniform1d(Program,Location,V0) ->
cast(5788, <<Program:?GLuint,Location:?GLint,V0:?GLdouble>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform1dv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [float()].
+-spec programUniform1dv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [float()].
programUniform1dv(Program,Location,Value) ->
cast(5789, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,0:32,
(<< <<C:?GLdouble>> || C <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform1ui(Program, Location, V0) -> ok when Program :: integer(),Location :: integer(),V0 :: integer().
+-spec programUniform1ui(Program, Location, V0) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer().
programUniform1ui(Program,Location,V0) ->
cast(5790, <<Program:?GLuint,Location:?GLint,V0:?GLuint>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform1uiv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [integer()].
+-spec programUniform1uiv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [integer()].
programUniform1uiv(Program,Location,Value) ->
cast(5791, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<C:?GLuint>> || C <- Value>>)/binary,0:(((1+length(Value)) rem 2)*32)>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform2i(Program, Location, V0, V1) -> ok when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer().
+-spec programUniform2i(Program, Location, V0, V1) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer().
programUniform2i(Program,Location,V0,V1) ->
cast(5792, <<Program:?GLuint,Location:?GLint,V0:?GLint,V1:?GLint>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform2iv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{integer(),integer()}].
+-spec programUniform2iv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{integer(),integer()}].
programUniform2iv(Program,Location,Value) ->
cast(5793, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLint,V2:?GLint>> || {V1,V2} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform2f(Program, Location, V0, V1) -> ok when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float().
+-spec programUniform2f(Program, Location, V0, V1) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float().
programUniform2f(Program,Location,V0,V1) ->
cast(5794, <<Program:?GLuint,Location:?GLint,V0:?GLfloat,V1:?GLfloat>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform2fv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{float(),float()}].
+-spec programUniform2fv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{float(),float()}].
programUniform2fv(Program,Location,Value) ->
cast(5795, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat>> || {V1,V2} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform2d(Program, Location, V0, V1) -> ok when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float().
+-spec programUniform2d(Program, Location, V0, V1) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float().
programUniform2d(Program,Location,V0,V1) ->
cast(5796, <<Program:?GLuint,Location:?GLint,V0:?GLdouble,V1:?GLdouble>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform2dv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{float(),float()}].
+-spec programUniform2dv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{float(),float()}].
programUniform2dv(Program,Location,Value) ->
cast(5797, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble>> || {V1,V2} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform2ui(Program, Location, V0, V1) -> ok when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer().
+-spec programUniform2ui(Program, Location, V0, V1) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer().
programUniform2ui(Program,Location,V0,V1) ->
cast(5798, <<Program:?GLuint,Location:?GLint,V0:?GLuint,V1:?GLuint>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform2uiv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{integer(),integer()}].
+-spec programUniform2uiv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{integer(),integer()}].
programUniform2uiv(Program,Location,Value) ->
cast(5799, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLuint,V2:?GLuint>> || {V1,V2} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform3i(Program, Location, V0, V1, V2) -> ok when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer().
+-spec programUniform3i(Program, Location, V0, V1, V2) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer().
programUniform3i(Program,Location,V0,V1,V2) ->
cast(5800, <<Program:?GLuint,Location:?GLint,V0:?GLint,V1:?GLint,V2:?GLint>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform3iv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer()}].
+-spec programUniform3iv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer()}].
programUniform3iv(Program,Location,Value) ->
cast(5801, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLint,V2:?GLint,V3:?GLint>> || {V1,V2,V3} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform3f(Program, Location, V0, V1, V2) -> ok when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float().
+-spec programUniform3f(Program, Location, V0, V1, V2) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float().
programUniform3f(Program,Location,V0,V1,V2) ->
cast(5802, <<Program:?GLuint,Location:?GLint,V0:?GLfloat,V1:?GLfloat,V2:?GLfloat>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform3fv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float()}].
+-spec programUniform3fv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float()}].
programUniform3fv(Program,Location,Value) ->
cast(5803, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat>> || {V1,V2,V3} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform3d(Program, Location, V0, V1, V2) -> ok when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float().
+-spec programUniform3d(Program, Location, V0, V1, V2) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float().
programUniform3d(Program,Location,V0,V1,V2) ->
cast(5804, <<Program:?GLuint,Location:?GLint,V0:?GLdouble,V1:?GLdouble,V2:?GLdouble>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform3dv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float()}].
+-spec programUniform3dv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float()}].
programUniform3dv(Program,Location,Value) ->
cast(5805, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble>> || {V1,V2,V3} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform3ui(Program, Location, V0, V1, V2) -> ok when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer().
+-spec programUniform3ui(Program, Location, V0, V1, V2) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer().
programUniform3ui(Program,Location,V0,V1,V2) ->
cast(5806, <<Program:?GLuint,Location:?GLint,V0:?GLuint,V1:?GLuint,V2:?GLuint>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform3uiv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer()}].
+-spec programUniform3uiv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer()}].
programUniform3uiv(Program,Location,Value) ->
cast(5807, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLuint,V2:?GLuint,V3:?GLuint>> || {V1,V2,V3} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform4i(Program, Location, V0, V1, V2, V3) -> ok when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer().
+-spec programUniform4i(Program, Location, V0, V1, V2, V3) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer().
programUniform4i(Program,Location,V0,V1,V2,V3) ->
cast(5808, <<Program:?GLuint,Location:?GLint,V0:?GLint,V1:?GLint,V2:?GLint,V3:?GLint>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform4iv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}].
+-spec programUniform4iv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}].
programUniform4iv(Program,Location,Value) ->
cast(5809, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform4f(Program, Location, V0, V1, V2, V3) -> ok when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float(),V3 :: float().
+-spec programUniform4f(Program, Location, V0, V1, V2, V3) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float(),V3 :: float().
programUniform4f(Program,Location,V0,V1,V2,V3) ->
cast(5810, <<Program:?GLuint,Location:?GLint,V0:?GLfloat,V1:?GLfloat,V2:?GLfloat,V3:?GLfloat>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform4fv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float(),float()}].
+-spec programUniform4fv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float(),float()}].
programUniform4fv(Program,Location,Value) ->
cast(5811, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform4d(Program, Location, V0, V1, V2, V3) -> ok when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float(),V3 :: float().
+-spec programUniform4d(Program, Location, V0, V1, V2, V3) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float(),V3 :: float().
programUniform4d(Program,Location,V0,V1,V2,V3) ->
cast(5812, <<Program:?GLuint,Location:?GLint,V0:?GLdouble,V1:?GLdouble,V2:?GLdouble,V3:?GLdouble>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform4dv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float(),float()}].
+-spec programUniform4dv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float(),float()}].
programUniform4dv(Program,Location,Value) ->
cast(5813, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform4ui(Program, Location, V0, V1, V2, V3) -> ok when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer().
+-spec programUniform4ui(Program, Location, V0, V1, V2, V3) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer().
programUniform4ui(Program,Location,V0,V1,V2,V3) ->
cast(5814, <<Program:?GLuint,Location:?GLint,V0:?GLuint,V1:?GLuint,V2:?GLuint,V3:?GLuint>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniform4uiv(Program, Location, Value) -> ok when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}].
+-spec programUniform4uiv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}].
programUniform4uiv(Program,Location,Value) ->
cast(5815, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,
(<< <<V1:?GLuint,V2:?GLuint,V3:?GLuint,V4:?GLuint>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix2fv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}].
+-spec programUniformMatrix2fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}].
programUniformMatrix2fv(Program,Location,Transpose,Value) ->
cast(5816, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix3fv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix3fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix3fv(Program,Location,Transpose,Value) ->
cast(5817, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix4fv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix4fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix4fv(Program,Location,Transpose,Value) ->
cast(5818, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat,V10:?GLfloat,V11:?GLfloat,V12:?GLfloat,V13:?GLfloat,V14:?GLfloat,V15:?GLfloat,V16:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix2dv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}].
+-spec programUniformMatrix2dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}].
programUniformMatrix2dv(Program,Location,Transpose,Value) ->
cast(5819, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble>> || {V1,V2,V3,V4} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix3dv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix3dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix3dv(Program,Location,Transpose,Value) ->
cast(5820, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix4dv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix4dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix4dv(Program,Location,Transpose,Value) ->
cast(5821, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble,V10:?GLdouble,V11:?GLdouble,V12:?GLdouble,V13:?GLdouble,V14:?GLdouble,V15:?GLdouble,V16:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix2x3fv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix2x3fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
programUniformMatrix2x3fv(Program,Location,Transpose,Value) ->
cast(5822, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix3x2fv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix3x2fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
programUniformMatrix3x2fv(Program,Location,Transpose,Value) ->
cast(5823, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix2x4fv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix2x4fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix2x4fv(Program,Location,Transpose,Value) ->
cast(5824, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix4x2fv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix4x2fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix4x2fv(Program,Location,Transpose,Value) ->
cast(5825, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix3x4fv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix3x4fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix3x4fv(Program,Location,Transpose,Value) ->
cast(5826, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat,V10:?GLfloat,V11:?GLfloat,V12:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix4x3fv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix4x3fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix4x3fv(Program,Location,Transpose,Value) ->
cast(5827, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat,V10:?GLfloat,V11:?GLfloat,V12:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix2x3dv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix2x3dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
programUniformMatrix2x3dv(Program,Location,Transpose,Value) ->
cast(5828, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix3x2dv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix3x2dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}].
programUniformMatrix3x2dv(Program,Location,Transpose,Value) ->
cast(5829, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix2x4dv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix2x4dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix2x4dv(Program,Location,Transpose,Value) ->
cast(5830, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix4x2dv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix4x2dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix4x2dv(Program,Location,Transpose,Value) ->
cast(5831, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix3x4dv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix3x4dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix3x4dv(Program,Location,Transpose,Value) ->
cast(5832, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble,V10:?GLdouble,V11:?GLdouble,V12:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>).
%% @doc
%% See {@link programUniform1i/3}
--spec programUniformMatrix4x3dv(Program, Location, Transpose, Value) -> ok when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
+-spec programUniformMatrix4x3dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}].
programUniformMatrix4x3dv(Program,Location,Transpose,Value) ->
cast(5833, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32,
(<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble,V10:?GLdouble,V11:?GLdouble,V12:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>).
@@ -16138,7 +16138,7 @@ programUniformMatrix4x3dv(Program,Location,Transpose,Value) ->
%% pipeline object is created with name `Pipeline' and the default state vector.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glValidateProgramPipeline.xml">external</a> documentation.
--spec validateProgramPipeline(Pipeline) -> ok when Pipeline :: integer().
+-spec validateProgramPipeline(Pipeline) -> 'ok' when Pipeline :: integer().
validateProgramPipeline(Pipeline) ->
cast(5834, <<Pipeline:?GLuint>>).
@@ -16162,51 +16162,51 @@ getProgramPipelineInfoLog(Pipeline,BufSize) ->
%% @doc glVertexAttribL
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribL.xml">external</a> documentation.
--spec vertexAttribL1d(Index, X) -> ok when Index :: integer(),X :: float().
+-spec vertexAttribL1d(Index, X) -> 'ok' when Index :: integer(),X :: float().
vertexAttribL1d(Index,X) ->
cast(5836, <<Index:?GLuint,0:32,X:?GLdouble>>).
%% @doc glVertexAttribL
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribL.xml">external</a> documentation.
--spec vertexAttribL2d(Index, X, Y) -> ok when Index :: integer(),X :: float(),Y :: float().
+-spec vertexAttribL2d(Index, X, Y) -> 'ok' when Index :: integer(),X :: float(),Y :: float().
vertexAttribL2d(Index,X,Y) ->
cast(5837, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble>>).
%% @doc glVertexAttribL
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribL.xml">external</a> documentation.
--spec vertexAttribL3d(Index, X, Y, Z) -> ok when Index :: integer(),X :: float(),Y :: float(),Z :: float().
+-spec vertexAttribL3d(Index, X, Y, Z) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),Z :: float().
vertexAttribL3d(Index,X,Y,Z) ->
cast(5838, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>).
%% @doc glVertexAttribL
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribL.xml">external</a> documentation.
--spec vertexAttribL4d(Index, X, Y, Z, W) -> ok when Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
+-spec vertexAttribL4d(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float().
vertexAttribL4d(Index,X,Y,Z,W) ->
cast(5839, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>).
%% @equiv vertexAttribL1d(Index,X)
--spec vertexAttribL1dv(Index :: integer(),V) -> ok when V :: {X :: float()}.
+-spec vertexAttribL1dv(Index :: integer(),V) -> 'ok' when V :: {X :: float()}.
vertexAttribL1dv(Index,{X}) -> vertexAttribL1d(Index,X).
%% @equiv vertexAttribL2d(Index,X,Y)
--spec vertexAttribL2dv(Index :: integer(),V) -> ok when V :: {X :: float(),Y :: float()}.
+-spec vertexAttribL2dv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float()}.
vertexAttribL2dv(Index,{X,Y}) -> vertexAttribL2d(Index,X,Y).
%% @equiv vertexAttribL3d(Index,X,Y,Z)
--spec vertexAttribL3dv(Index :: integer(),V) -> ok when V :: {X :: float(),Y :: float(),Z :: float()}.
+-spec vertexAttribL3dv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}.
vertexAttribL3dv(Index,{X,Y,Z}) -> vertexAttribL3d(Index,X,Y,Z).
%% @equiv vertexAttribL4d(Index,X,Y,Z,W)
--spec vertexAttribL4dv(Index :: integer(),V) -> ok when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
+-spec vertexAttribL4dv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}.
vertexAttribL4dv(Index,{X,Y,Z,W}) -> vertexAttribL4d(Index,X,Y,Z,W).
%% @doc glVertexAttribLPointer
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribLPointer.xml">external</a> documentation.
--spec vertexAttribLPointer(Index, Size, Type, Stride, Pointer) -> ok when Index :: integer(),Size :: integer(),Type :: enum(),Stride :: integer(),Pointer :: offset()|mem().
+-spec vertexAttribLPointer(Index, Size, Type, Stride, Pointer) -> 'ok' when Index :: integer(),Size :: integer(),Type :: enum(),Stride :: integer(),Pointer :: offset()|mem().
vertexAttribLPointer(Index,Size,Type,Stride,Pointer) when is_integer(Pointer) ->
cast(5840, <<Index:?GLuint,Size:?GLint,Type:?GLenum,Stride:?GLsizei,Pointer:?GLuint>>);
vertexAttribLPointer(Index,Size,Type,Stride,Pointer) ->
@@ -16223,7 +16223,7 @@ getVertexAttribLdv(Index,Pname) ->
%% @doc glViewportArrayv
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glViewportArrayv.xml">external</a> documentation.
--spec viewportArrayv(First, V) -> ok when First :: integer(),V :: [{float(),float(),float(),float()}].
+-spec viewportArrayv(First, V) -> 'ok' when First :: integer(),V :: [{float(),float(),float(),float()}].
viewportArrayv(First,V) ->
cast(5843, <<First:?GLuint,(length(V)):?GLuint,
(<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat>> || {V1,V2,V3,V4} <- V>>)/binary>>).
@@ -16263,20 +16263,20 @@ viewportArrayv(First,V) ->
%% 1, v); }
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glViewportIndexed.xml">external</a> documentation.
--spec viewportIndexedf(Index, X, Y, W, H) -> ok when Index :: integer(),X :: float(),Y :: float(),W :: float(),H :: float().
+-spec viewportIndexedf(Index, X, Y, W, H) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),W :: float(),H :: float().
viewportIndexedf(Index,X,Y,W,H) ->
cast(5844, <<Index:?GLuint,X:?GLfloat,Y:?GLfloat,W:?GLfloat,H:?GLfloat>>).
%% @doc
%% See {@link viewportIndexedf/5}
--spec viewportIndexedfv(Index, V) -> ok when Index :: integer(),V :: {float(),float(),float(),float()}.
+-spec viewportIndexedfv(Index, V) -> 'ok' when Index :: integer(),V :: {float(),float(),float(),float()}.
viewportIndexedfv(Index,{V1,V2,V3,V4}) ->
cast(5845, <<Index:?GLuint,V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat>>).
%% @doc glScissorArrayv
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glScissorArrayv.xml">external</a> documentation.
--spec scissorArrayv(First, V) -> ok when First :: integer(),V :: [{integer(),integer(),integer(),integer()}].
+-spec scissorArrayv(First, V) -> 'ok' when First :: integer(),V :: [{integer(),integer(),integer(),integer()}].
scissorArrayv(First,V) ->
cast(5846, <<First:?GLuint,(length(V)):?GLuint,
(<< <<V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>> || {V1,V2,V3,V4} <- V>>)/binary>>).
@@ -16284,21 +16284,21 @@ scissorArrayv(First,V) ->
%% @doc glScissorIndexe
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glScissorIndexe.xml">external</a> documentation.
--spec scissorIndexed(Index, Left, Bottom, Width, Height) -> ok when Index :: integer(),Left :: integer(),Bottom :: integer(),Width :: integer(),Height :: integer().
+-spec scissorIndexed(Index, Left, Bottom, Width, Height) -> 'ok' when Index :: integer(),Left :: integer(),Bottom :: integer(),Width :: integer(),Height :: integer().
scissorIndexed(Index,Left,Bottom,Width,Height) ->
cast(5847, <<Index:?GLuint,Left:?GLint,Bottom:?GLint,Width:?GLsizei,Height:?GLsizei>>).
%% @doc glScissorIndexe
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glScissorIndexe.xml">external</a> documentation.
--spec scissorIndexedv(Index, V) -> ok when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
+-spec scissorIndexedv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}.
scissorIndexedv(Index,{V1,V2,V3,V4}) ->
cast(5848, <<Index:?GLuint,V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>>).
%% @doc glDepthRangeArrayv
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDepthRangeArrayv.xml">external</a> documentation.
--spec depthRangeArrayv(First, V) -> ok when First :: integer(),V :: [{clamp(),clamp()}].
+-spec depthRangeArrayv(First, V) -> 'ok' when First :: integer(),V :: [{clamp(),clamp()}].
depthRangeArrayv(First,V) ->
cast(5849, <<First:?GLuint,0:32,(length(V)):?GLuint,0:32,
(<< <<V1:?GLclampd,V2:?GLclampd>> || {V1,V2} <- V>>)/binary>>).
@@ -16306,7 +16306,7 @@ depthRangeArrayv(First,V) ->
%% @doc glDepthRangeIndexe
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDepthRangeIndexe.xml">external</a> documentation.
--spec depthRangeIndexed(Index, N, F) -> ok when Index :: integer(),N :: clamp(),F :: clamp().
+-spec depthRangeIndexed(Index, N, F) -> 'ok' when Index :: integer(),N :: clamp(),F :: clamp().
depthRangeIndexed(Index,N,F) ->
cast(5850, <<Index:?GLuint,0:32,N:?GLclampd,F:?GLclampd>>).
@@ -16325,7 +16325,7 @@ getDoublei_v(Target,Index) ->
%% @doc glDebugMessageControlARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDebugMessageControlARB.xml">external</a> documentation.
--spec debugMessageControlARB(Source, Type, Severity, Ids, Enabled) -> ok when Source :: enum(),Type :: enum(),Severity :: enum(),Ids :: [integer()],Enabled :: 0|1.
+-spec debugMessageControlARB(Source, Type, Severity, Ids, Enabled) -> 'ok' when Source :: enum(),Type :: enum(),Severity :: enum(),Ids :: [integer()],Enabled :: 0|1.
debugMessageControlARB(Source,Type,Severity,Ids,Enabled) ->
cast(5853, <<Source:?GLenum,Type:?GLenum,Severity:?GLenum,(length(Ids)):?GLuint,
(<< <<C:?GLuint>> || C <- Ids>>)/binary,0:(((length(Ids)) rem 2)*32),Enabled:?GLboolean>>).
@@ -16333,7 +16333,7 @@ debugMessageControlARB(Source,Type,Severity,Ids,Enabled) ->
%% @doc glDebugMessageInsertARB
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDebugMessageInsertARB.xml">external</a> documentation.
--spec debugMessageInsertARB(Source, Type, Id, Severity, Buf) -> ok when Source :: enum(),Type :: enum(),Id :: integer(),Severity :: enum(),Buf :: string().
+-spec debugMessageInsertARB(Source, Type, Id, Severity, Buf) -> 'ok' when Source :: enum(),Type :: enum(),Id :: integer(),Severity :: enum(),Buf :: string().
debugMessageInsertARB(Source,Type,Id,Severity,Buf) ->
cast(5854, <<Source:?GLenum,Type:?GLenum,Id:?GLuint,Severity:?GLenum,(list_to_binary([Buf|[0]]))/binary,0:((8-((length(Buf)+ 1) rem 8)) rem 8)>>).
@@ -16370,7 +16370,7 @@ getGraphicsResetStatusARB() ->
%% value of `?gl_InstanceID'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawArraysInstancedBaseInstance.xml">external</a> documentation.
--spec drawArraysInstancedBaseInstance(Mode, First, Count, Primcount, Baseinstance) -> ok when Mode :: enum(),First :: integer(),Count :: integer(),Primcount :: integer(),Baseinstance :: integer().
+-spec drawArraysInstancedBaseInstance(Mode, First, Count, Primcount, Baseinstance) -> 'ok' when Mode :: enum(),First :: integer(),Count :: integer(),Primcount :: integer(),Baseinstance :: integer().
drawArraysInstancedBaseInstance(Mode,First,Count,Primcount,Baseinstance) ->
cast(5857, <<Mode:?GLenum,First:?GLint,Count:?GLsizei,Primcount:?GLsizei,Baseinstance:?GLuint>>).
@@ -16393,7 +16393,7 @@ drawArraysInstancedBaseInstance(Mode,First,Count,Primcount,Baseinstance) ->
%% value of `?gl_InstanceID'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElementsInstancedBaseInstance.xml">external</a> documentation.
--spec drawElementsInstancedBaseInstance(Mode, Count, Type, Indices, Primcount, Baseinstance) -> ok when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer(),Baseinstance :: integer().
+-spec drawElementsInstancedBaseInstance(Mode, Count, Type, Indices, Primcount, Baseinstance) -> 'ok' when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer(),Baseinstance :: integer().
drawElementsInstancedBaseInstance(Mode,Count,Type,Indices,Primcount,Baseinstance) when is_integer(Indices) ->
cast(5858, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Primcount:?GLsizei,Baseinstance:?GLuint>>);
drawElementsInstancedBaseInstance(Mode,Count,Type,Indices,Primcount,Baseinstance) ->
@@ -16417,7 +16417,7 @@ drawElementsInstancedBaseInstance(Mode,Count,Type,Indices,Primcount,Baseinstance
%% value of `?gl_InstanceID'.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElementsInstancedBaseVertexBaseInstance.xml">external</a> documentation.
--spec drawElementsInstancedBaseVertexBaseInstance(Mode, Count, Type, Indices, Primcount, Basevertex, Baseinstance) -> ok when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer(),Basevertex :: integer(),Baseinstance :: integer().
+-spec drawElementsInstancedBaseVertexBaseInstance(Mode, Count, Type, Indices, Primcount, Basevertex, Baseinstance) -> 'ok' when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer(),Basevertex :: integer(),Baseinstance :: integer().
drawElementsInstancedBaseVertexBaseInstance(Mode,Count,Type,Indices,Primcount,Basevertex,Baseinstance) when is_integer(Indices) ->
cast(5860, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Primcount:?GLsizei,Basevertex:?GLint,Baseinstance:?GLuint>>);
drawElementsInstancedBaseVertexBaseInstance(Mode,Count,Type,Indices,Primcount,Basevertex,Baseinstance) ->
@@ -16427,14 +16427,14 @@ drawElementsInstancedBaseVertexBaseInstance(Mode,Count,Type,Indices,Primcount,Ba
%% @doc glDrawTransformFeedbackInstance
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawTransformFeedbackInstance.xml">external</a> documentation.
--spec drawTransformFeedbackInstanced(Mode, Id, Primcount) -> ok when Mode :: enum(),Id :: integer(),Primcount :: integer().
+-spec drawTransformFeedbackInstanced(Mode, Id, Primcount) -> 'ok' when Mode :: enum(),Id :: integer(),Primcount :: integer().
drawTransformFeedbackInstanced(Mode,Id,Primcount) ->
cast(5862, <<Mode:?GLenum,Id:?GLuint,Primcount:?GLsizei>>).
%% @doc glDrawTransformFeedbackStreamInstance
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawTransformFeedbackStreamInstance.xml">external</a> documentation.
--spec drawTransformFeedbackStreamInstanced(Mode, Id, Stream, Primcount) -> ok when Mode :: enum(),Id :: integer(),Stream :: integer(),Primcount :: integer().
+-spec drawTransformFeedbackStreamInstanced(Mode, Id, Stream, Primcount) -> 'ok' when Mode :: enum(),Id :: integer(),Stream :: integer(),Primcount :: integer().
drawTransformFeedbackStreamInstanced(Mode,Id,Stream,Primcount) ->
cast(5863, <<Mode:?GLenum,Id:?GLuint,Stream:?GLuint,Primcount:?GLsizei>>).
@@ -16503,7 +16503,7 @@ getInternalformativ(Target,Internalformat,Pname,BufSize) ->
%% respectively.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindImageTexture.xml">external</a> documentation.
--spec bindImageTexture(Unit, Texture, Level, Layered, Layer, Access, Format) -> ok when Unit :: integer(),Texture :: integer(),Level :: integer(),Layered :: 0|1,Layer :: integer(),Access :: enum(),Format :: enum().
+-spec bindImageTexture(Unit, Texture, Level, Layered, Layer, Access, Format) -> 'ok' when Unit :: integer(),Texture :: integer(),Level :: integer(),Layered :: 0|1,Layer :: integer(),Access :: enum(),Format :: enum().
bindImageTexture(Unit,Texture,Level,Layered,Layer,Access,Format) ->
cast(5865, <<Unit:?GLuint,Texture:?GLuint,Level:?GLint,Layered:?GLboolean,0:24,Layer:?GLint,Access:?GLenum,Format:?GLenum>>).
@@ -16630,7 +16630,7 @@ bindImageTexture(Unit,Texture,Level,Layered,Layer,Access,Format) ->
%% passes is necessary.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMemoryBarrier.xml">external</a> documentation.
--spec memoryBarrier(Barriers) -> ok when Barriers :: integer().
+-spec memoryBarrier(Barriers) -> 'ok' when Barriers :: integer().
memoryBarrier(Barriers) ->
cast(5866, <<Barriers:?GLbitfield>>).
@@ -16663,7 +16663,7 @@ memoryBarrier(Barriers) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexStorage1D.xml">external</a> documentation.
--spec texStorage1D(Target, Levels, Internalformat, Width) -> ok when Target :: enum(),Levels :: integer(),Internalformat :: enum(),Width :: integer().
+-spec texStorage1D(Target, Levels, Internalformat, Width) -> 'ok' when Target :: enum(),Levels :: integer(),Internalformat :: enum(),Width :: integer().
texStorage1D(Target,Levels,Internalformat,Width) ->
cast(5867, <<Target:?GLenum,Levels:?GLsizei,Internalformat:?GLenum,Width:?GLsizei>>).
@@ -16708,7 +16708,7 @@ texStorage1D(Target,Levels,Internalformat,Width) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexStorage2D.xml">external</a> documentation.
--spec texStorage2D(Target, Levels, Internalformat, Width, Height) -> ok when Target :: enum(),Levels :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer().
+-spec texStorage2D(Target, Levels, Internalformat, Width, Height) -> 'ok' when Target :: enum(),Levels :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer().
texStorage2D(Target,Levels,Internalformat,Width,Height) ->
cast(5868, <<Target:?GLenum,Levels:?GLsizei,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei>>).
@@ -16751,21 +16751,21 @@ texStorage2D(Target,Levels,Internalformat,Width,Height) ->
%%
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexStorage3D.xml">external</a> documentation.
--spec texStorage3D(Target, Levels, Internalformat, Width, Height, Depth) -> ok when Target :: enum(),Levels :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Depth :: integer().
+-spec texStorage3D(Target, Levels, Internalformat, Width, Height, Depth) -> 'ok' when Target :: enum(),Levels :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Depth :: integer().
texStorage3D(Target,Levels,Internalformat,Width,Height,Depth) ->
cast(5869, <<Target:?GLenum,Levels:?GLsizei,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei,Depth:?GLsizei>>).
%% @doc glDepthBoundsEXT
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDepthBoundsEXT.xml">external</a> documentation.
--spec depthBoundsEXT(Zmin, Zmax) -> ok when Zmin :: clamp(),Zmax :: clamp().
+-spec depthBoundsEXT(Zmin, Zmax) -> 'ok' when Zmin :: clamp(),Zmax :: clamp().
depthBoundsEXT(Zmin,Zmax) ->
cast(5870, <<Zmin:?GLclampd,Zmax:?GLclampd>>).
%% @doc glStencilClearTagEXT
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glStencilClearTagEXT.xml">external</a> documentation.
--spec stencilClearTagEXT(StencilTagBits, StencilClearTag) -> ok when StencilTagBits :: integer(),StencilClearTag :: integer().
+-spec stencilClearTagEXT(StencilTagBits, StencilClearTag) -> 'ok' when StencilTagBits :: integer(),StencilClearTag :: integer().
stencilClearTagEXT(StencilTagBits,StencilClearTag) ->
cast(5871, <<StencilTagBits:?GLsizei,StencilClearTag:?GLuint>>).
diff --git a/lib/wx/src/gen/glu.erl b/lib/wx/src/gen/glu.erl
index 5faba48930..47d9a83999 100644
--- a/lib/wx/src/gen/glu.erl
+++ b/lib/wx/src/gen/glu.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -356,7 +356,7 @@ checkExtension(ExtName,ExtString) ->
%% at the +`y' axis.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluCylinder.xml">external</a> documentation.
--spec cylinder(Quad, Base, Top, Height, Slices, Stacks) -> ok when Quad :: integer(),Base :: float(),Top :: float(),Height :: float(),Slices :: integer(),Stacks :: integer().
+-spec cylinder(Quad, Base, Top, Height, Slices, Stacks) -> 'ok' when Quad :: integer(),Base :: float(),Top :: float(),Height :: float(),Slices :: integer(),Stacks :: integer().
cylinder(Quad,Base,Top,Height,Slices,Stacks) ->
cast(5017, <<Quad:?GLUquadric,Base:?GLdouble,Top:?GLdouble,Height:?GLdouble,Slices:?GLint,Stacks:?GLint>>).
@@ -367,7 +367,7 @@ cylinder(Quad,Base,Top,Height,Slices,Stacks) ->
%% cannot be used again.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluDeleteQuadric.xml">external</a> documentation.
--spec deleteQuadric(Quad) -> ok when Quad :: integer().
+-spec deleteQuadric(Quad) -> 'ok' when Quad :: integer().
deleteQuadric(Quad) ->
cast(5018, <<Quad:?GLUquadric>>).
@@ -390,7 +390,7 @@ deleteQuadric(Quad) ->
%% (0, -`r', 0) it is (0.5, 0).
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluDisk.xml">external</a> documentation.
--spec disk(Quad, Inner, Outer, Slices, Loops) -> ok when Quad :: integer(),Inner :: float(),Outer :: float(),Slices :: integer(),Loops :: integer().
+-spec disk(Quad, Inner, Outer, Slices, Loops) -> 'ok' when Quad :: integer(),Inner :: float(),Outer :: float(),Slices :: integer(),Loops :: integer().
disk(Quad,Inner,Outer,Slices,Loops) ->
cast(5019, <<Quad:?GLUquadric,Inner:?GLdouble,Outer:?GLdouble,Slices:?GLint,Loops:?GLint>>).
@@ -468,7 +468,7 @@ getString(Name) ->
%% -eyez);
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluLookAt.xml">external</a> documentation.
--spec lookAt(EyeX, EyeY, EyeZ, CenterX, CenterY, CenterZ, UpX, UpY, UpZ) -> ok when EyeX :: float(),EyeY :: float(),EyeZ :: float(),CenterX :: float(),CenterY :: float(),CenterZ :: float(),UpX :: float(),UpY :: float(),UpZ :: float().
+-spec lookAt(EyeX, EyeY, EyeZ, CenterX, CenterY, CenterZ, UpX, UpY, UpZ) -> 'ok' when EyeX :: float(),EyeY :: float(),EyeZ :: float(),CenterX :: float(),CenterY :: float(),CenterZ :: float(),UpX :: float(),UpY :: float(),UpZ :: float().
lookAt(EyeX,EyeY,EyeZ,CenterX,CenterY,CenterZ,UpX,UpY,UpZ) ->
cast(5022, <<EyeX:?GLdouble,EyeY:?GLdouble,EyeZ:?GLdouble,CenterX:?GLdouble,CenterY:?GLdouble,CenterZ:?GLdouble,UpX:?GLdouble,UpY:?GLdouble,UpZ:?GLdouble>>).
@@ -489,7 +489,7 @@ newQuadric() ->
%% to calling {@link gl:ortho/6} with near=-1 and far=1.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluOrtho2D.xml">external</a> documentation.
--spec ortho2D(Left, Right, Bottom, Top) -> ok when Left :: float(),Right :: float(),Bottom :: float(),Top :: float().
+-spec ortho2D(Left, Right, Bottom, Top) -> 'ok' when Left :: float(),Right :: float(),Bottom :: float(),Top :: float().
ortho2D(Left,Right,Bottom,Top) ->
cast(5024, <<Left:?GLdouble,Right:?GLdouble,Bottom:?GLdouble,Top:?GLdouble>>).
@@ -518,7 +518,7 @@ ortho2D(Left,Right,Bottom,Top) ->
%% at (0, -`r', 0) it is (0.5, 0.0).
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluPartialDisk.xml">external</a> documentation.
--spec partialDisk(Quad, Inner, Outer, Slices, Loops, Start, Sweep) -> ok when Quad :: integer(),Inner :: float(),Outer :: float(),Slices :: integer(),Loops :: integer(),Start :: float(),Sweep :: float().
+-spec partialDisk(Quad, Inner, Outer, Slices, Loops, Start, Sweep) -> 'ok' when Quad :: integer(),Inner :: float(),Outer :: float(),Slices :: integer(),Loops :: integer(),Start :: float(),Sweep :: float().
partialDisk(Quad,Inner,Outer,Slices,Loops,Start,Sweep) ->
cast(5025, <<Quad:?GLUquadric,Inner:?GLdouble,Outer:?GLdouble,Slices:?GLint,Loops:?GLint,Start:?GLdouble,Sweep:?GLdouble>>).
@@ -542,7 +542,7 @@ partialDisk(Quad,Inner,Outer,Slices,Loops,Start,Sweep) ->
%% (f/aspect 0 0 0 0 f 0 0 0 0(zFar+zNear)/(zNear-zFar)(2×zFar×zNear)/(zNear-zFar) 0 0 -1 0)
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluPerspective.xml">external</a> documentation.
--spec perspective(Fovy, Aspect, ZNear, ZFar) -> ok when Fovy :: float(),Aspect :: float(),ZNear :: float(),ZFar :: float().
+-spec perspective(Fovy, Aspect, ZNear, ZFar) -> 'ok' when Fovy :: float(),Aspect :: float(),ZNear :: float(),ZFar :: float().
perspective(Fovy,Aspect,ZNear,ZFar) ->
cast(5026, <<Fovy:?GLdouble,Aspect:?GLdouble,ZNear:?GLdouble,ZFar:?GLdouble>>).
@@ -568,7 +568,7 @@ perspective(Fovy,Aspect,ZNear,ZFar) ->
%% it was subdivided without the pick matrix.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluPickMatrix.xml">external</a> documentation.
--spec pickMatrix(X, Y, DelX, DelY, Viewport) -> ok when X :: float(),Y :: float(),DelX :: float(),DelY :: float(),Viewport :: {integer(),integer(),integer(),integer()}.
+-spec pickMatrix(X, Y, DelX, DelY, Viewport) -> 'ok' when X :: float(),Y :: float(),DelX :: float(),DelY :: float(),Viewport :: {integer(),integer(),integer(),integer()}.
pickMatrix(X,Y,DelX,DelY,{V1,V2,V3,V4}) ->
cast(5027, <<X:?GLdouble,Y:?GLdouble,DelX:?GLdouble,DelY:?GLdouble,V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>>).
@@ -621,7 +621,7 @@ project(ObjX,ObjY,ObjZ,{M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12},{P1,P2,P3,P4,P5,
%% `?GLU_POINT': Quadrics are rendered as a set of points.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluQuadricDrawStyle.xml">external</a> documentation.
--spec quadricDrawStyle(Quad, Draw) -> ok when Quad :: integer(),Draw :: enum().
+-spec quadricDrawStyle(Quad, Draw) -> 'ok' when Quad :: integer(),Draw :: enum().
quadricDrawStyle(Quad,Draw) ->
cast(5029, <<Quad:?GLUquadric,Draw:?GLenum>>).
@@ -638,7 +638,7 @@ quadricDrawStyle(Quad,Draw) ->
%% initial value.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluQuadricNormals.xml">external</a> documentation.
--spec quadricNormals(Quad, Normal) -> ok when Quad :: integer(),Normal :: enum().
+-spec quadricNormals(Quad, Normal) -> 'ok' when Quad :: integer(),Normal :: enum().
quadricNormals(Quad,Normal) ->
cast(5030, <<Quad:?GLUquadric,Normal:?GLenum>>).
@@ -656,7 +656,7 @@ quadricNormals(Quad,Normal) ->
%% being drawn.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluQuadricOrientation.xml">external</a> documentation.
--spec quadricOrientation(Quad, Orientation) -> ok when Quad :: integer(),Orientation :: enum().
+-spec quadricOrientation(Quad, Orientation) -> 'ok' when Quad :: integer(),Orientation :: enum().
quadricOrientation(Quad,Orientation) ->
cast(5031, <<Quad:?GLUquadric,Orientation:?GLenum>>).
@@ -671,7 +671,7 @@ quadricOrientation(Quad,Orientation) ->
%% rendered.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluQuadricTexture.xml">external</a> documentation.
--spec quadricTexture(Quad, Texture) -> ok when Quad :: integer(),Texture :: 0|1.
+-spec quadricTexture(Quad, Texture) -> 'ok' when Quad :: integer(),Texture :: 0|1.
quadricTexture(Quad,Texture) ->
cast(5032, <<Quad:?GLUquadric,Texture:?GLboolean>>).
@@ -714,7 +714,7 @@ scaleImage(Format,WIn,HIn,TypeIn,DataIn,WOut,HOut,TypeOut,DataOut) ->
%% axis, and back to 1.0 at the +`y' axis.
%%
%% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluSphere.xml">external</a> documentation.
--spec sphere(Quad, Radius, Slices, Stacks) -> ok when Quad :: integer(),Radius :: float(),Slices :: integer(),Stacks :: integer().
+-spec sphere(Quad, Radius, Slices, Stacks) -> 'ok' when Quad :: integer(),Radius :: float(),Slices :: integer(),Stacks :: integer().
sphere(Quad,Radius,Slices,Stacks) ->
cast(5034, <<Quad:?GLUquadric,Radius:?GLdouble,Slices:?GLint,Stacks:?GLint>>).
diff --git a/lib/wx/src/gen/wxAcceleratorEntry.erl b/lib/wx/src/gen/wxAcceleratorEntry.erl
index 0885c25371..78d2ec47de 100644
--- a/lib/wx/src/gen/wxAcceleratorEntry.erl
+++ b/lib/wx/src/gen/wxAcceleratorEntry.erl
@@ -47,10 +47,10 @@ new() ->
%% Entry::wxAcceleratorEntry().<br />
%%
-spec new([Option]) -> wxAcceleratorEntry() when
- Option :: {flags, integer()}
- | {keyCode, integer()}
- | {cmd, integer()}
- | {item, wxMenuItem:wxMenuItem()};
+ Option :: {'flags', integer()}
+ | {'keyCode', integer()}
+ | {'cmd', integer()}
+ | {'item', wxMenuItem:wxMenuItem()};
(Entry) -> wxAcceleratorEntry() when
Entry::wxAcceleratorEntry().
new(Options)
@@ -93,7 +93,7 @@ getKeyCode(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv set(This,Flags,KeyCode,Cmd, [])
--spec set(This, Flags, KeyCode, Cmd) -> ok when
+-spec set(This, Flags, KeyCode, Cmd) -> 'ok' when
This::wxAcceleratorEntry(), Flags::integer(), KeyCode::integer(), Cmd::integer().
set(This,Flags,KeyCode,Cmd)
@@ -101,9 +101,9 @@ set(This,Flags,KeyCode,Cmd)
set(This,Flags,KeyCode,Cmd, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxacceleratorentry.html#wxacceleratorentryset">external documentation</a>.
--spec set(This, Flags, KeyCode, Cmd, [Option]) -> ok when
+-spec set(This, Flags, KeyCode, Cmd, [Option]) -> 'ok' when
This::wxAcceleratorEntry(), Flags::integer(), KeyCode::integer(), Cmd::integer(),
- Option :: {item, wxMenuItem:wxMenuItem()}.
+ Option :: {'item', wxMenuItem:wxMenuItem()}.
set(#wx_ref{type=ThisT,ref=ThisRef},Flags,KeyCode,Cmd, Options)
when is_integer(Flags),is_integer(KeyCode),is_integer(Cmd),is_list(Options) ->
?CLASS(ThisT,wxAcceleratorEntry),
@@ -114,7 +114,7 @@ set(#wx_ref{type=ThisT,ref=ThisRef},Flags,KeyCode,Cmd, Options)
<<ThisRef:32/?UI,Flags:32/?UI,KeyCode:32/?UI,Cmd:32/?UI, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxAcceleratorEntry()) -> ok.
+-spec destroy(This::wxAcceleratorEntry()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxAcceleratorEntry),
wxe_util:destroy(?wxAcceleratorEntry_destroy,Obj),
diff --git a/lib/wx/src/gen/wxAcceleratorTable.erl b/lib/wx/src/gen/wxAcceleratorTable.erl
index 3ed419b057..4efcaaa7d0 100644
--- a/lib/wx/src/gen/wxAcceleratorTable.erl
+++ b/lib/wx/src/gen/wxAcceleratorTable.erl
@@ -46,7 +46,7 @@ new() ->
N::integer(), Entries::[wxAcceleratorEntry:wxAcceleratorEntry()].
new(N,Entries)
when is_integer(N),is_list(Entries) ->
- [?CLASS(EntriesT,wxAcceleratorEntry) || #wx_ref{type=EntriesT} <- Entries],
+ _ = [?CLASS(EntriesT,wxAcceleratorEntry) || #wx_ref{type=EntriesT} <- Entries],
wxe_util:construct(?wxAcceleratorTable_new_2,
<<N:32/?UI,(length(Entries)):32/?UI,
(<< <<(C#wx_ref.ref):32/?UI>> || C <- Entries>>)/binary, 0:(((0+length(Entries)) rem 2)*32)>>).
@@ -60,7 +60,7 @@ ok(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxAcceleratorTable()) -> ok.
+-spec destroy(This::wxAcceleratorTable()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxAcceleratorTable),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxArtProvider.erl b/lib/wx/src/gen/wxArtProvider.erl
index c85c0b5457..da220a90c8 100644
--- a/lib/wx/src/gen/wxArtProvider.erl
+++ b/lib/wx/src/gen/wxArtProvider.erl
@@ -46,8 +46,8 @@ getBitmap(Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxartprovider.html#wxartprovidergetbitmap">external documentation</a>.
-spec getBitmap(Id, [Option]) -> wxBitmap:wxBitmap() when
Id::unicode:chardata(),
- Option :: {client, unicode:chardata()}
- | {size, {W::integer(), H::integer()}}.
+ Option :: {'client', unicode:chardata()}
+ | {'size', {W::integer(), H::integer()}}.
getBitmap(Id, Options)
when is_list(Id),is_list(Options) ->
Id_UC = unicode:characters_to_binary([Id,0]),
@@ -69,8 +69,8 @@ getIcon(Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxartprovider.html#wxartprovidergeticon">external documentation</a>.
-spec getIcon(Id, [Option]) -> wxIcon:wxIcon() when
Id::unicode:chardata(),
- Option :: {client, unicode:chardata()}
- | {size, {W::integer(), H::integer()}}.
+ Option :: {'client', unicode:chardata()}
+ | {'size', {W::integer(), H::integer()}}.
getIcon(Id, Options)
when is_list(Id),is_list(Options) ->
Id_UC = unicode:characters_to_binary([Id,0]),
diff --git a/lib/wx/src/gen/wxAuiDockArt.erl b/lib/wx/src/gen/wxAuiDockArt.erl
index 4149b1d424..5b7890f132 100644
--- a/lib/wx/src/gen/wxAuiDockArt.erl
+++ b/lib/wx/src/gen/wxAuiDockArt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -63,7 +63,7 @@ getMetric(#wx_ref{type=ThisT,ref=ThisRef},Id)
<<ThisRef:32/?UI,Id:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauidockart.html#wxauidockartsetcolour">external documentation</a>.
--spec setColour(This, Id, Colour) -> ok when
+-spec setColour(This, Id, Colour) -> 'ok' when
This::wxAuiDockArt(), Id::integer(), Colour::wx:wx_colour().
setColour(#wx_ref{type=ThisT,ref=ThisRef},Id,Colour)
when is_integer(Id),tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -72,7 +72,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},Id,Colour)
<<ThisRef:32/?UI,Id:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauidockart.html#wxauidockartsetfont">external documentation</a>.
--spec setFont(This, Id, Font) -> ok when
+-spec setFont(This, Id, Font) -> 'ok' when
This::wxAuiDockArt(), Id::integer(), Font::wxFont:wxFont().
setFont(#wx_ref{type=ThisT,ref=ThisRef},Id,#wx_ref{type=FontT,ref=FontRef})
when is_integer(Id) ->
@@ -82,7 +82,7 @@ setFont(#wx_ref{type=ThisT,ref=ThisRef},Id,#wx_ref{type=FontT,ref=FontRef})
<<ThisRef:32/?UI,Id:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauidockart.html#wxauidockartsetmetric">external documentation</a>.
--spec setMetric(This, Id, New_val) -> ok when
+-spec setMetric(This, Id, New_val) -> 'ok' when
This::wxAuiDockArt(), Id::integer(), New_val::integer().
setMetric(#wx_ref{type=ThisT,ref=ThisRef},Id,New_val)
when is_integer(Id),is_integer(New_val) ->
diff --git a/lib/wx/src/gen/wxAuiManager.erl b/lib/wx/src/gen/wxAuiManager.erl
index bf22e3091d..37693060e1 100644
--- a/lib/wx/src/gen/wxAuiManager.erl
+++ b/lib/wx/src/gen/wxAuiManager.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -52,8 +52,8 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagerwxauimanager">external documentation</a>.
-spec new([Option]) -> wxAuiManager() when
- Option :: {managed_wnd, wxWindow:wxWindow()}
- | {flags, integer()}.
+ Option :: {'managed_wnd', wxWindow:wxWindow()}
+ | {'flags', integer()}.
new(Options)
when is_list(Options) ->
MOpts = fun({managed_wnd, #wx_ref{type=Managed_wndT,ref=Managed_wndRef}}, Acc) -> ?CLASS(Managed_wndT,wxWindow),[<<1:32/?UI,Managed_wndRef:32/?UI>>|Acc];
@@ -78,8 +78,8 @@ addPane(This,Window)
%%
-spec addPane(This, Window, [Option]) -> boolean() when
This::wxAuiManager(), Window::wxWindow:wxWindow(),
- Option :: {direction, integer()}
- | {caption, unicode:chardata()};
+ Option :: {'direction', integer()}
+ | {'caption', unicode:chardata()};
(This, Window, Pane_info) -> boolean() when
This::wxAuiManager(), Window::wxWindow:wxWindow(), Pane_info::wxAuiPaneInfo:wxAuiPaneInfo().
addPane(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}, Options)
@@ -189,7 +189,7 @@ getPane(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}) ->
<<ThisRef:32/?UI,WindowRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagerhidehint">external documentation</a>.
--spec hideHint(This) -> ok when
+-spec hideHint(This) -> 'ok' when
This::wxAuiManager().
hideHint(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxAuiManager),
@@ -207,7 +207,7 @@ insertPane(This,Window,Insert_location)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagerinsertpane">external documentation</a>.
-spec insertPane(This, Window, Insert_location, [Option]) -> boolean() when
This::wxAuiManager(), Window::wxWindow:wxWindow(), Insert_location::wxAuiPaneInfo:wxAuiPaneInfo(),
- Option :: {insert_level, integer()}.
+ Option :: {'insert_level', integer()}.
insertPane(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef},#wx_ref{type=Insert_locationT,ref=Insert_locationRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiManager),
@@ -220,7 +220,7 @@ insertPane(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef},#
<<ThisRef:32/?UI,WindowRef:32/?UI,Insert_locationRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagerloadpaneinfo">external documentation</a>.
--spec loadPaneInfo(This, Pane_part, Pane) -> ok when
+-spec loadPaneInfo(This, Pane_part, Pane) -> 'ok' when
This::wxAuiManager(), Pane_part::unicode:chardata(), Pane::wxAuiPaneInfo:wxAuiPaneInfo().
loadPaneInfo(#wx_ref{type=ThisT,ref=ThisRef},Pane_part,#wx_ref{type=PaneT,ref=PaneRef})
when is_list(Pane_part) ->
@@ -241,7 +241,7 @@ loadPerspective(This,Perspective)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagerloadperspective">external documentation</a>.
-spec loadPerspective(This, Perspective, [Option]) -> boolean() when
This::wxAuiManager(), Perspective::unicode:chardata(),
- Option :: {update, boolean()}.
+ Option :: {'update', boolean()}.
loadPerspective(#wx_ref{type=ThisT,ref=ThisRef},Perspective, Options)
when is_list(Perspective),is_list(Options) ->
?CLASS(ThisT,wxAuiManager),
@@ -270,7 +270,7 @@ savePerspective(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagersetartprovider">external documentation</a>.
--spec setArtProvider(This, Art_provider) -> ok when
+-spec setArtProvider(This, Art_provider) -> 'ok' when
This::wxAuiManager(), Art_provider::wxAuiDockArt:wxAuiDockArt().
setArtProvider(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=Art_providerT,ref=Art_providerRef}) ->
?CLASS(ThisT,wxAuiManager),
@@ -279,7 +279,7 @@ setArtProvider(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=Art_providerT,ref=Ar
<<ThisRef:32/?UI,Art_providerRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagersetdocksizeconstraint">external documentation</a>.
--spec setDockSizeConstraint(This, Width_pct, Height_pct) -> ok when
+-spec setDockSizeConstraint(This, Width_pct, Height_pct) -> 'ok' when
This::wxAuiManager(), Width_pct::number(), Height_pct::number().
setDockSizeConstraint(#wx_ref{type=ThisT,ref=ThisRef},Width_pct,Height_pct)
when is_number(Width_pct),is_number(Height_pct) ->
@@ -288,7 +288,7 @@ setDockSizeConstraint(#wx_ref{type=ThisT,ref=ThisRef},Width_pct,Height_pct)
<<ThisRef:32/?UI,0:32,Width_pct:64/?F,Height_pct:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagersetflags">external documentation</a>.
--spec setFlags(This, Flags) -> ok when
+-spec setFlags(This, Flags) -> 'ok' when
This::wxAuiManager(), Flags::integer().
setFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
when is_integer(Flags) ->
@@ -297,7 +297,7 @@ setFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
<<ThisRef:32/?UI,Flags:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagersetmanagedwindow">external documentation</a>.
--spec setManagedWindow(This, Managed_wnd) -> ok when
+-spec setManagedWindow(This, Managed_wnd) -> 'ok' when
This::wxAuiManager(), Managed_wnd::wxWindow:wxWindow().
setManagedWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=Managed_wndT,ref=Managed_wndRef}) ->
?CLASS(ThisT,wxAuiManager),
@@ -306,7 +306,7 @@ setManagedWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=Managed_wndT,ref=M
<<ThisRef:32/?UI,Managed_wndRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagershowhint">external documentation</a>.
--spec showHint(This, Rect) -> ok when
+-spec showHint(This, Rect) -> 'ok' when
This::wxAuiManager(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.
showHint(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH) ->
@@ -315,7 +315,7 @@ showHint(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanageruninit">external documentation</a>.
--spec unInit(This) -> ok when
+-spec unInit(This) -> 'ok' when
This::wxAuiManager().
unInit(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxAuiManager),
@@ -323,7 +323,7 @@ unInit(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanager.html#wxauimanagerupdate">external documentation</a>.
--spec update(This) -> ok when
+-spec update(This) -> 'ok' when
This::wxAuiManager().
update(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxAuiManager),
@@ -331,7 +331,7 @@ update(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxAuiManager()) -> ok.
+-spec destroy(This::wxAuiManager()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxAuiManager),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxAuiManagerEvent.erl b/lib/wx/src/gen/wxAuiManagerEvent.erl
index 88e4433f24..2878c5b272 100644
--- a/lib/wx/src/gen/wxAuiManagerEvent.erl
+++ b/lib/wx/src/gen/wxAuiManagerEvent.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2009-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2009-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -46,7 +46,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxAuiManagerEvent() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanagerevent.html#wxauimanagereventsetmanager">external documentation</a>.
--spec setManager(This, Mgr) -> ok when
+-spec setManager(This, Mgr) -> 'ok' when
This::wxAuiManagerEvent(), Mgr::wxAuiManager:wxAuiManager().
setManager(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MgrT,ref=MgrRef}) ->
?CLASS(ThisT,wxAuiManagerEvent),
@@ -63,7 +63,7 @@ getManager(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanagerevent.html#wxauimanagereventsetpane">external documentation</a>.
--spec setPane(This, P) -> ok when
+-spec setPane(This, P) -> 'ok' when
This::wxAuiManagerEvent(), P::wxAuiPaneInfo:wxAuiPaneInfo().
setPane(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PT,ref=PRef}) ->
?CLASS(ThisT,wxAuiManagerEvent),
@@ -80,7 +80,7 @@ getPane(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanagerevent.html#wxauimanagereventsetbutton">external documentation</a>.
--spec setButton(This, B) -> ok when
+-spec setButton(This, B) -> 'ok' when
This::wxAuiManagerEvent(), B::integer().
setButton(#wx_ref{type=ThisT,ref=ThisRef},B)
when is_integer(B) ->
@@ -97,7 +97,7 @@ getButton(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanagerevent.html#wxauimanagereventsetdc">external documentation</a>.
--spec setDC(This, Pdc) -> ok when
+-spec setDC(This, Pdc) -> 'ok' when
This::wxAuiManagerEvent(), Pdc::wxDC:wxDC().
setDC(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PdcT,ref=PdcRef}) ->
?CLASS(ThisT,wxAuiManagerEvent),
@@ -114,7 +114,7 @@ getDC(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv veto(This, [])
--spec veto(This) -> ok when
+-spec veto(This) -> 'ok' when
This::wxAuiManagerEvent().
veto(This)
@@ -122,9 +122,9 @@ veto(This)
veto(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanagerevent.html#wxauimanagereventveto">external documentation</a>.
--spec veto(This, [Option]) -> ok when
+-spec veto(This, [Option]) -> 'ok' when
This::wxAuiManagerEvent(),
- Option :: {veto, boolean()}.
+ Option :: {'veto', boolean()}.
veto(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiManagerEvent),
@@ -143,7 +143,7 @@ getVeto(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauimanagerevent.html#wxauimanagereventsetcanveto">external documentation</a>.
--spec setCanVeto(This, Can_veto) -> ok when
+-spec setCanVeto(This, Can_veto) -> 'ok' when
This::wxAuiManagerEvent(), Can_veto::boolean().
setCanVeto(#wx_ref{type=ThisT,ref=ThisRef},Can_veto)
when is_boolean(Can_veto) ->
diff --git a/lib/wx/src/gen/wxAuiNotebook.erl b/lib/wx/src/gen/wxAuiNotebook.erl
index 7ec1acb26d..42da35e16a 100644
--- a/lib/wx/src/gen/wxAuiNotebook.erl
+++ b/lib/wx/src/gen/wxAuiNotebook.erl
@@ -100,10 +100,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebook.html#wxauinotebookwxauinotebook">external documentation</a>.
-spec new(Parent, [Option]) -> wxAuiNotebook() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -127,8 +127,8 @@ addPage(This,Page,Caption)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebook.html#wxauinotebookaddpage">external documentation</a>.
-spec addPage(This, Page, Caption, [Option]) -> boolean() when
This::wxAuiNotebook(), Page::wxWindow:wxWindow(), Caption::unicode:chardata(),
- Option :: {select, boolean()}
- | {bitmap, wxBitmap:wxBitmap()}.
+ Option :: {'select', boolean()}
+ | {'bitmap', wxBitmap:wxBitmap()}.
addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Caption, Options)
when is_list(Caption),is_list(Options) ->
?CLASS(ThisT,wxAuiNotebook),
@@ -152,10 +152,10 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebook.html#wxauinotebookcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxAuiNotebook(), Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiNotebook),
@@ -249,8 +249,8 @@ insertPage(This,Page_idx,Page,Caption)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebook.html#wxauinotebookinsertpage">external documentation</a>.
-spec insertPage(This, Page_idx, Page, Caption, [Option]) -> boolean() when
This::wxAuiNotebook(), Page_idx::integer(), Page::wxWindow:wxWindow(), Caption::unicode:chardata(),
- Option :: {select, boolean()}
- | {bitmap, wxBitmap:wxBitmap()}.
+ Option :: {'select', boolean()}
+ | {'bitmap', wxBitmap:wxBitmap()}.
insertPage(#wx_ref{type=ThisT,ref=ThisRef},Page_idx,#wx_ref{type=PageT,ref=PageRef},Caption, Options)
when is_integer(Page_idx),is_list(Caption),is_list(Options) ->
?CLASS(ThisT,wxAuiNotebook),
@@ -273,7 +273,7 @@ removePage(#wx_ref{type=ThisT,ref=ThisRef},Page)
<<ThisRef:32/?UI,Page:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebook.html#wxauinotebooksetartprovider">external documentation</a>.
--spec setArtProvider(This, Art) -> ok when
+-spec setArtProvider(This, Art) -> 'ok' when
This::wxAuiNotebook(), Art::wxAuiTabArt:wxAuiTabArt().
setArtProvider(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ArtT,ref=ArtRef}) ->
?CLASS(ThisT,wxAuiNotebook),
@@ -320,7 +320,7 @@ setSelection(#wx_ref{type=ThisT,ref=ThisRef},New_page)
<<ThisRef:32/?UI,New_page:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebook.html#wxauinotebooksettabctrlheight">external documentation</a>.
--spec setTabCtrlHeight(This, Height) -> ok when
+-spec setTabCtrlHeight(This, Height) -> 'ok' when
This::wxAuiNotebook(), Height::integer().
setTabCtrlHeight(#wx_ref{type=ThisT,ref=ThisRef},Height)
when is_integer(Height) ->
@@ -329,7 +329,7 @@ setTabCtrlHeight(#wx_ref{type=ThisT,ref=ThisRef},Height)
<<ThisRef:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebook.html#wxauinotebooksetuniformbitmapsize">external documentation</a>.
--spec setUniformBitmapSize(This, Size) -> ok when
+-spec setUniformBitmapSize(This, Size) -> 'ok' when
This::wxAuiNotebook(), Size::{W::integer(), H::integer()}.
setUniformBitmapSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -338,7 +338,7 @@ setUniformBitmapSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxAuiNotebook()) -> ok.
+-spec destroy(This::wxAuiNotebook()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxAuiNotebook),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxAuiNotebookEvent.erl b/lib/wx/src/gen/wxAuiNotebookEvent.erl
index 4ebe408cef..a51a85b7f4 100644
--- a/lib/wx/src/gen/wxAuiNotebookEvent.erl
+++ b/lib/wx/src/gen/wxAuiNotebookEvent.erl
@@ -52,7 +52,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxAuiNotebookEvent() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebookevent.html#wxauinotebookeventsetselection">external documentation</a>.
--spec setSelection(This, S) -> ok when
+-spec setSelection(This, S) -> 'ok' when
This::wxAuiNotebookEvent(), S::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},S)
when is_integer(S) ->
@@ -69,7 +69,7 @@ getSelection(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebookevent.html#wxauinotebookeventsetoldselection">external documentation</a>.
--spec setOldSelection(This, S) -> ok when
+-spec setOldSelection(This, S) -> 'ok' when
This::wxAuiNotebookEvent(), S::integer().
setOldSelection(#wx_ref{type=ThisT,ref=ThisRef},S)
when is_integer(S) ->
@@ -86,7 +86,7 @@ getOldSelection(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauinotebookevent.html#wxauinotebookeventsetdragsource">external documentation</a>.
--spec setDragSource(This, S) -> ok when
+-spec setDragSource(This, S) -> 'ok' when
This::wxAuiNotebookEvent(), S::wxAuiNotebook:wxAuiNotebook().
setDragSource(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ST,ref=SRef}) ->
?CLASS(ThisT,wxAuiNotebookEvent),
diff --git a/lib/wx/src/gen/wxAuiPaneInfo.erl b/lib/wx/src/gen/wxAuiPaneInfo.erl
index 1f15e9cd39..858da200be 100644
--- a/lib/wx/src/gen/wxAuiPaneInfo.erl
+++ b/lib/wx/src/gen/wxAuiPaneInfo.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -103,7 +103,7 @@ bottomDockable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfobottomdockable">external documentation</a>.
-spec bottomDockable(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {b, boolean()}.
+ Option :: {'b', boolean()}.
bottomDockable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -134,7 +134,7 @@ captionVisible(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfocaptionvisible">external documentation</a>.
-spec captionVisible(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {visible, boolean()}.
+ Option :: {'visible', boolean()}.
captionVisible(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -171,7 +171,7 @@ closeButton(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfoclosebutton">external documentation</a>.
-spec closeButton(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {visible, boolean()}.
+ Option :: {'visible', boolean()}.
closeButton(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -200,7 +200,7 @@ destroyOnClose(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfodestroyonclose">external documentation</a>.
-spec destroyOnClose(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {b, boolean()}.
+ Option :: {'b', boolean()}.
destroyOnClose(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -238,7 +238,7 @@ dockable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfodockable">external documentation</a>.
-spec dockable(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {b, boolean()}.
+ Option :: {'b', boolean()}.
dockable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -275,7 +275,7 @@ floatable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfofloatable">external documentation</a>.
-spec floatable(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {b, boolean()}.
+ Option :: {'b', boolean()}.
floatable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -332,7 +332,7 @@ gripper(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfogripper">external documentation</a>.
-spec gripper(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {visible, boolean()}.
+ Option :: {'visible', boolean()}.
gripper(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -353,7 +353,7 @@ gripperTop(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfogrippertop">external documentation</a>.
-spec gripperTop(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {attop, boolean()}.
+ Option :: {'attop', boolean()}.
gripperTop(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -576,7 +576,7 @@ leftDockable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfoleftdockable">external documentation</a>.
-spec leftDockable(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {b, boolean()}.
+ Option :: {'b', boolean()}.
leftDockable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -615,7 +615,7 @@ maximizeButton(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfomaximizebutton">external documentation</a>.
-spec maximizeButton(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {visible, boolean()}.
+ Option :: {'visible', boolean()}.
maximizeButton(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -654,7 +654,7 @@ minimizeButton(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfominimizebutton">external documentation</a>.
-spec minimizeButton(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {visible, boolean()}.
+ Option :: {'visible', boolean()}.
minimizeButton(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -675,7 +675,7 @@ movable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfomovable">external documentation</a>.
-spec movable(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {b, boolean()}.
+ Option :: {'b', boolean()}.
movable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -706,7 +706,7 @@ paneBorder(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfopaneborder">external documentation</a>.
-spec paneBorder(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {visible, boolean()}.
+ Option :: {'visible', boolean()}.
paneBorder(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -727,7 +727,7 @@ pinButton(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfopinbutton">external documentation</a>.
-spec pinButton(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {visible, boolean()}.
+ Option :: {'visible', boolean()}.
pinButton(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -757,7 +757,7 @@ resizable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinforesizable">external documentation</a>.
-spec resizable(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {resizable, boolean()}.
+ Option :: {'resizable', boolean()}.
resizable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -786,7 +786,7 @@ rightDockable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinforightdockable">external documentation</a>.
-spec rightDockable(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {b, boolean()}.
+ Option :: {'b', boolean()}.
rightDockable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -806,7 +806,7 @@ row(#wx_ref{type=ThisT,ref=ThisRef},Row)
<<ThisRef:32/?UI,Row:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfosafeset">external documentation</a>.
--spec safeSet(This, Source) -> ok when
+-spec safeSet(This, Source) -> 'ok' when
This::wxAuiPaneInfo(), Source::wxAuiPaneInfo().
safeSet(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SourceT,ref=SourceRef}) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -834,7 +834,7 @@ show(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfoshow">external documentation</a>.
-spec show(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {show, boolean()}.
+ Option :: {'show', boolean()}.
show(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -871,7 +871,7 @@ topDockable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauipaneinfo.html#wxauipaneinfotopdockable">external documentation</a>.
-spec topDockable(This, [Option]) -> wxAuiPaneInfo() when
This::wxAuiPaneInfo(),
- Option :: {b, boolean()}.
+ Option :: {'b', boolean()}.
topDockable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxAuiPaneInfo),
@@ -955,7 +955,7 @@ getFloatingSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxAuiPaneInfo()) -> ok.
+-spec destroy(This::wxAuiPaneInfo()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxAuiPaneInfo),
wxe_util:destroy(?wxAuiPaneInfo_destruct,Obj),
diff --git a/lib/wx/src/gen/wxAuiSimpleTabArt.erl b/lib/wx/src/gen/wxAuiSimpleTabArt.erl
index 57d12e2eb4..eae00e5591 100644
--- a/lib/wx/src/gen/wxAuiSimpleTabArt.erl
+++ b/lib/wx/src/gen/wxAuiSimpleTabArt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -47,7 +47,7 @@ new() ->
<<>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxAuiSimpleTabArt()) -> ok.
+-spec destroy(This::wxAuiSimpleTabArt()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxAuiSimpleTabArt),
wxe_util:destroy(?wxAuiSimpleTabArt_destroy,Obj),
diff --git a/lib/wx/src/gen/wxAuiTabArt.erl b/lib/wx/src/gen/wxAuiTabArt.erl
index 80924c0269..324c167aa5 100644
--- a/lib/wx/src/gen/wxAuiTabArt.erl
+++ b/lib/wx/src/gen/wxAuiTabArt.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -37,7 +37,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxAuiTabArt() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauitabart.html#wxauitabartsetflags">external documentation</a>.
--spec setFlags(This, Flags) -> ok when
+-spec setFlags(This, Flags) -> 'ok' when
This::wxAuiTabArt(), Flags::integer().
setFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
when is_integer(Flags) ->
@@ -46,7 +46,7 @@ setFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
<<ThisRef:32/?UI,Flags:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauitabart.html#wxauitabartsetmeasuringfont">external documentation</a>.
--spec setMeasuringFont(This, Font) -> ok when
+-spec setMeasuringFont(This, Font) -> 'ok' when
This::wxAuiTabArt(), Font::wxFont:wxFont().
setMeasuringFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxAuiTabArt),
@@ -55,7 +55,7 @@ setMeasuringFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauitabart.html#wxauitabartsetnormalfont">external documentation</a>.
--spec setNormalFont(This, Font) -> ok when
+-spec setNormalFont(This, Font) -> 'ok' when
This::wxAuiTabArt(), Font::wxFont:wxFont().
setNormalFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxAuiTabArt),
@@ -64,7 +64,7 @@ setNormalFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) -
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauitabart.html#wxauitabartsetselectedfont">external documentation</a>.
--spec setSelectedFont(This, Font) -> ok when
+-spec setSelectedFont(This, Font) -> 'ok' when
This::wxAuiTabArt(), Font::wxFont:wxFont().
setSelectedFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxAuiTabArt),
@@ -73,7 +73,7 @@ setSelectedFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef})
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauitabart.html#wxauitabartsetcolour">external documentation</a>.
--spec setColour(This, Colour) -> ok when
+-spec setColour(This, Colour) -> 'ok' when
This::wxAuiTabArt(), Colour::wx:wx_colour().
setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -82,7 +82,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxauitabart.html#wxauitabartsetactivecolour">external documentation</a>.
--spec setActiveColour(This, Colour) -> ok when
+-spec setActiveColour(This, Colour) -> 'ok' when
This::wxAuiTabArt(), Colour::wx:wx_colour().
setActiveColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
diff --git a/lib/wx/src/gen/wxBitmap.erl b/lib/wx/src/gen/wxBitmap.erl
index 9bf2f8eee0..e7830dae9b 100644
--- a/lib/wx/src/gen/wxBitmap.erl
+++ b/lib/wx/src/gen/wxBitmap.erl
@@ -67,20 +67,20 @@ new(Image)
%% <br /> Also:<br />
%% new(Filename, [Option]) -> wxBitmap() when<br />
%% Filename::unicode:chardata(),<br />
-%% Option :: {type, wx:wx_enum()};<br />
+%% Option :: {'type', wx:wx_enum()};<br />
%% (Image, [Option]) -> wxBitmap() when<br />
%% Image::wxImage:wxImage(),<br />
-%% Option :: {depth, integer()}.<br />
+%% Option :: {'depth', integer()}.<br />
%%
%%<br /> Type = ?wxBITMAP_TYPE_INVALID | ?wxBITMAP_TYPE_BMP | ?wxBITMAP_TYPE_BMP_RESOURCE | ?wxBITMAP_TYPE_RESOURCE | ?wxBITMAP_TYPE_ICO | ?wxBITMAP_TYPE_ICO_RESOURCE | ?wxBITMAP_TYPE_CUR | ?wxBITMAP_TYPE_CUR_RESOURCE | ?wxBITMAP_TYPE_XBM | ?wxBITMAP_TYPE_XBM_DATA | ?wxBITMAP_TYPE_XPM | ?wxBITMAP_TYPE_XPM_DATA | ?wxBITMAP_TYPE_TIF | ?wxBITMAP_TYPE_TIF_RESOURCE | ?wxBITMAP_TYPE_GIF | ?wxBITMAP_TYPE_GIF_RESOURCE | ?wxBITMAP_TYPE_PNG | ?wxBITMAP_TYPE_PNG_RESOURCE | ?wxBITMAP_TYPE_JPEG | ?wxBITMAP_TYPE_JPEG_RESOURCE | ?wxBITMAP_TYPE_PNM | ?wxBITMAP_TYPE_PNM_RESOURCE | ?wxBITMAP_TYPE_PCX | ?wxBITMAP_TYPE_PCX_RESOURCE | ?wxBITMAP_TYPE_PICT | ?wxBITMAP_TYPE_PICT_RESOURCE | ?wxBITMAP_TYPE_ICON | ?wxBITMAP_TYPE_ICON_RESOURCE | ?wxBITMAP_TYPE_ANI | ?wxBITMAP_TYPE_IFF | ?wxBITMAP_TYPE_TGA | ?wxBITMAP_TYPE_MACCURSOR | ?wxBITMAP_TYPE_MACCURSOR_RESOURCE | ?wxBITMAP_TYPE_ANY
-spec new(Width, Height) -> wxBitmap() when
Width::integer(), Height::integer();
(Filename, [Option]) -> wxBitmap() when
Filename::unicode:chardata(),
- Option :: {type, wx:wx_enum()};
+ Option :: {'type', wx:wx_enum()};
(Image, [Option]) -> wxBitmap() when
Image::wxImage:wxImage(),
- Option :: {depth, integer()}.
+ Option :: {'depth', integer()}.
new(Width,Height)
when is_integer(Width),is_integer(Height) ->
@@ -106,13 +106,13 @@ new(#wx_ref{type=ImageT,ref=ImageRef}, Options)
%% <br /> Also:<br />
%% new(Width, Height, [Option]) -> wxBitmap() when<br />
%% Width::integer(), Height::integer(),<br />
-%% Option :: {depth, integer()}.<br />
+%% Option :: {'depth', integer()}.<br />
%%
-spec new(Bits, Width, Height) -> wxBitmap() when
Bits::binary(), Width::integer(), Height::integer();
(Width, Height, [Option]) -> wxBitmap() when
Width::integer(), Height::integer(),
- Option :: {depth, integer()}.
+ Option :: {'depth', integer()}.
new(Bits,Width,Height)
when is_binary(Bits),is_integer(Width),is_integer(Height) ->
@@ -128,7 +128,7 @@ new(Width,Height, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmap.html#wxbitmapwxbitmap">external documentation</a>.
-spec new(Bits, Width, Height, [Option]) -> wxBitmap() when
Bits::binary(), Width::integer(), Height::integer(),
- Option :: {depth, integer()}.
+ Option :: {'depth', integer()}.
new(Bits,Width,Height, Options)
when is_binary(Bits),is_integer(Width),is_integer(Height),is_list(Options) ->
wxe_util:send_bin(Bits),
@@ -166,7 +166,7 @@ create(This,Width,Height)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmap.html#wxbitmapcreate">external documentation</a>.
-spec create(This, Width, Height, [Option]) -> boolean() when
This::wxBitmap(), Width::integer(), Height::integer(),
- Option :: {depth, integer()}.
+ Option :: {'depth', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},Width,Height, Options)
when is_integer(Width),is_integer(Height),is_list(Options) ->
?CLASS(ThisT,wxBitmap),
@@ -237,7 +237,7 @@ loadFile(This,Name)
%%<br /> Type = ?wxBITMAP_TYPE_INVALID | ?wxBITMAP_TYPE_BMP | ?wxBITMAP_TYPE_BMP_RESOURCE | ?wxBITMAP_TYPE_RESOURCE | ?wxBITMAP_TYPE_ICO | ?wxBITMAP_TYPE_ICO_RESOURCE | ?wxBITMAP_TYPE_CUR | ?wxBITMAP_TYPE_CUR_RESOURCE | ?wxBITMAP_TYPE_XBM | ?wxBITMAP_TYPE_XBM_DATA | ?wxBITMAP_TYPE_XPM | ?wxBITMAP_TYPE_XPM_DATA | ?wxBITMAP_TYPE_TIF | ?wxBITMAP_TYPE_TIF_RESOURCE | ?wxBITMAP_TYPE_GIF | ?wxBITMAP_TYPE_GIF_RESOURCE | ?wxBITMAP_TYPE_PNG | ?wxBITMAP_TYPE_PNG_RESOURCE | ?wxBITMAP_TYPE_JPEG | ?wxBITMAP_TYPE_JPEG_RESOURCE | ?wxBITMAP_TYPE_PNM | ?wxBITMAP_TYPE_PNM_RESOURCE | ?wxBITMAP_TYPE_PCX | ?wxBITMAP_TYPE_PCX_RESOURCE | ?wxBITMAP_TYPE_PICT | ?wxBITMAP_TYPE_PICT_RESOURCE | ?wxBITMAP_TYPE_ICON | ?wxBITMAP_TYPE_ICON_RESOURCE | ?wxBITMAP_TYPE_ANI | ?wxBITMAP_TYPE_IFF | ?wxBITMAP_TYPE_TGA | ?wxBITMAP_TYPE_MACCURSOR | ?wxBITMAP_TYPE_MACCURSOR_RESOURCE | ?wxBITMAP_TYPE_ANY
-spec loadFile(This, Name, [Option]) -> boolean() when
This::wxBitmap(), Name::unicode:chardata(),
- Option :: {type, wx:wx_enum()}.
+ Option :: {'type', wx:wx_enum()}.
loadFile(#wx_ref{type=ThisT,ref=ThisRef},Name, Options)
when is_list(Name),is_list(Options) ->
?CLASS(ThisT,wxBitmap),
@@ -268,7 +268,7 @@ saveFile(This,Name,Type)
%%<br /> Type = ?wxBITMAP_TYPE_INVALID | ?wxBITMAP_TYPE_BMP | ?wxBITMAP_TYPE_BMP_RESOURCE | ?wxBITMAP_TYPE_RESOURCE | ?wxBITMAP_TYPE_ICO | ?wxBITMAP_TYPE_ICO_RESOURCE | ?wxBITMAP_TYPE_CUR | ?wxBITMAP_TYPE_CUR_RESOURCE | ?wxBITMAP_TYPE_XBM | ?wxBITMAP_TYPE_XBM_DATA | ?wxBITMAP_TYPE_XPM | ?wxBITMAP_TYPE_XPM_DATA | ?wxBITMAP_TYPE_TIF | ?wxBITMAP_TYPE_TIF_RESOURCE | ?wxBITMAP_TYPE_GIF | ?wxBITMAP_TYPE_GIF_RESOURCE | ?wxBITMAP_TYPE_PNG | ?wxBITMAP_TYPE_PNG_RESOURCE | ?wxBITMAP_TYPE_JPEG | ?wxBITMAP_TYPE_JPEG_RESOURCE | ?wxBITMAP_TYPE_PNM | ?wxBITMAP_TYPE_PNM_RESOURCE | ?wxBITMAP_TYPE_PCX | ?wxBITMAP_TYPE_PCX_RESOURCE | ?wxBITMAP_TYPE_PICT | ?wxBITMAP_TYPE_PICT_RESOURCE | ?wxBITMAP_TYPE_ICON | ?wxBITMAP_TYPE_ICON_RESOURCE | ?wxBITMAP_TYPE_ANI | ?wxBITMAP_TYPE_IFF | ?wxBITMAP_TYPE_TGA | ?wxBITMAP_TYPE_MACCURSOR | ?wxBITMAP_TYPE_MACCURSOR_RESOURCE | ?wxBITMAP_TYPE_ANY
-spec saveFile(This, Name, Type, [Option]) -> boolean() when
This::wxBitmap(), Name::unicode:chardata(), Type::wx:wx_enum(),
- Option :: {palette, wxPalette:wxPalette()}.
+ Option :: {'palette', wxPalette:wxPalette()}.
saveFile(#wx_ref{type=ThisT,ref=ThisRef},Name,Type, Options)
when is_list(Name),is_integer(Type),is_list(Options) ->
?CLASS(ThisT,wxBitmap),
@@ -280,7 +280,7 @@ saveFile(#wx_ref{type=ThisT,ref=ThisRef},Name,Type, Options)
<<ThisRef:32/?UI,(byte_size(Name_UC)):32/?UI,(Name_UC)/binary, 0:(((8- ((0+byte_size(Name_UC)) band 16#7)) band 16#7))/unit:8,Type:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmap.html#wxbitmapsetdepth">external documentation</a>.
--spec setDepth(This, Depth) -> ok when
+-spec setDepth(This, Depth) -> 'ok' when
This::wxBitmap(), Depth::integer().
setDepth(#wx_ref{type=ThisT,ref=ThisRef},Depth)
when is_integer(Depth) ->
@@ -289,7 +289,7 @@ setDepth(#wx_ref{type=ThisT,ref=ThisRef},Depth)
<<ThisRef:32/?UI,Depth:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmap.html#wxbitmapsetheight">external documentation</a>.
--spec setHeight(This, Height) -> ok when
+-spec setHeight(This, Height) -> 'ok' when
This::wxBitmap(), Height::integer().
setHeight(#wx_ref{type=ThisT,ref=ThisRef},Height)
when is_integer(Height) ->
@@ -298,7 +298,7 @@ setHeight(#wx_ref{type=ThisT,ref=ThisRef},Height)
<<ThisRef:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmap.html#wxbitmapsetmask">external documentation</a>.
--spec setMask(This, Mask) -> ok when
+-spec setMask(This, Mask) -> 'ok' when
This::wxBitmap(), Mask::wxMask:wxMask().
setMask(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MaskT,ref=MaskRef}) ->
?CLASS(ThisT,wxBitmap),
@@ -307,7 +307,7 @@ setMask(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MaskT,ref=MaskRef}) ->
<<ThisRef:32/?UI,MaskRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmap.html#wxbitmapsetpalette">external documentation</a>.
--spec setPalette(This, Palette) -> ok when
+-spec setPalette(This, Palette) -> 'ok' when
This::wxBitmap(), Palette::wxPalette:wxPalette().
setPalette(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PaletteT,ref=PaletteRef}) ->
?CLASS(ThisT,wxBitmap),
@@ -316,7 +316,7 @@ setPalette(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PaletteT,ref=PaletteRef}
<<ThisRef:32/?UI,PaletteRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmap.html#wxbitmapsetwidth">external documentation</a>.
--spec setWidth(This, Width) -> ok when
+-spec setWidth(This, Width) -> 'ok' when
This::wxBitmap(), Width::integer().
setWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
when is_integer(Width) ->
@@ -325,7 +325,7 @@ setWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
<<ThisRef:32/?UI,Width:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxBitmap()) -> ok.
+-spec destroy(This::wxBitmap()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxBitmap),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxBitmapButton.erl b/lib/wx/src/gen/wxBitmapButton.erl
index 642828b0b0..d1d2d037e8 100644
--- a/lib/wx/src/gen/wxBitmapButton.erl
+++ b/lib/wx/src/gen/wxBitmapButton.erl
@@ -100,10 +100,10 @@ new(Parent,Id,Bitmap)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmapbutton.html#wxbitmapbuttonwxbitmapbutton">external documentation</a>.
-spec new(Parent, Id, Bitmap, [Option]) -> wxBitmapButton() when
Parent::wxWindow:wxWindow(), Id::integer(), Bitmap::wxBitmap:wxBitmap(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,#wx_ref{type=BitmapT,ref=BitmapRef}, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -128,10 +128,10 @@ create(This,Parent,Id,Bitmap)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmapbutton.html#wxbitmapbuttoncreate">external documentation</a>.
-spec create(This, Parent, Id, Bitmap, [Option]) -> boolean() when
This::wxBitmapButton(), Parent::wxWindow:wxWindow(), Id::integer(), Bitmap::wxBitmap:wxBitmap(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,#wx_ref{type=BitmapT,ref=BitmapRef}, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxBitmapButton),
@@ -179,7 +179,7 @@ getBitmapSelected(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmapbutton.html#wxbitmapbuttonsetbitmapdisabled">external documentation</a>.
--spec setBitmapDisabled(This, Disabled) -> ok when
+-spec setBitmapDisabled(This, Disabled) -> 'ok' when
This::wxBitmapButton(), Disabled::wxBitmap:wxBitmap().
setBitmapDisabled(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DisabledT,ref=DisabledRef}) ->
?CLASS(ThisT,wxBitmapButton),
@@ -188,7 +188,7 @@ setBitmapDisabled(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DisabledT,ref=Dis
<<ThisRef:32/?UI,DisabledRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmapbutton.html#wxbitmapbuttonsetbitmapfocus">external documentation</a>.
--spec setBitmapFocus(This, Focus) -> ok when
+-spec setBitmapFocus(This, Focus) -> 'ok' when
This::wxBitmapButton(), Focus::wxBitmap:wxBitmap().
setBitmapFocus(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FocusT,ref=FocusRef}) ->
?CLASS(ThisT,wxBitmapButton),
@@ -197,7 +197,7 @@ setBitmapFocus(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FocusT,ref=FocusRef}
<<ThisRef:32/?UI,FocusRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmapbutton.html#wxbitmapbuttonsetbitmaplabel">external documentation</a>.
--spec setBitmapLabel(This, Bitmap) -> ok when
+-spec setBitmapLabel(This, Bitmap) -> 'ok' when
This::wxBitmapButton(), Bitmap::wxBitmap:wxBitmap().
setBitmapLabel(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BitmapT,ref=BitmapRef}) ->
?CLASS(ThisT,wxBitmapButton),
@@ -206,7 +206,7 @@ setBitmapLabel(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BitmapT,ref=BitmapRe
<<ThisRef:32/?UI,BitmapRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmapbutton.html#wxbitmapbuttonsetbitmapselected">external documentation</a>.
--spec setBitmapSelected(This, Sel) -> ok when
+-spec setBitmapSelected(This, Sel) -> 'ok' when
This::wxBitmapButton(), Sel::wxBitmap:wxBitmap().
setBitmapSelected(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SelT,ref=SelRef}) ->
?CLASS(ThisT,wxBitmapButton),
@@ -215,7 +215,7 @@ setBitmapSelected(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SelT,ref=SelRef})
<<ThisRef:32/?UI,SelRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxBitmapButton()) -> ok.
+-spec destroy(This::wxBitmapButton()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxBitmapButton),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxBitmapDataObject.erl b/lib/wx/src/gen/wxBitmapDataObject.erl
index 2c90498880..58094a5910 100644
--- a/lib/wx/src/gen/wxBitmapDataObject.erl
+++ b/lib/wx/src/gen/wxBitmapDataObject.erl
@@ -51,7 +51,7 @@ new() ->
%% Bitmap::wxBitmap:wxBitmap().<br />
%%
-spec new([Option]) -> wxBitmapDataObject() when
- Option :: {bitmap, wxBitmap:wxBitmap()};
+ Option :: {'bitmap', wxBitmap:wxBitmap()};
(Bitmap) -> wxBitmapDataObject() when
Bitmap::wxBitmap:wxBitmap().
new(Options)
@@ -75,7 +75,7 @@ getBitmap(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbitmapdataobject.html#wxbitmapdataobjectsetbitmap">external documentation</a>.
--spec setBitmap(This, Bitmap) -> ok when
+-spec setBitmap(This, Bitmap) -> 'ok' when
This::wxBitmapDataObject(), Bitmap::wxBitmap:wxBitmap().
setBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BitmapT,ref=BitmapRef}) ->
?CLASS(ThisT,wxBitmapDataObject),
@@ -84,7 +84,7 @@ setBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BitmapT,ref=BitmapRef}) -
<<ThisRef:32/?UI,BitmapRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxBitmapDataObject()) -> ok.
+-spec destroy(This::wxBitmapDataObject()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxBitmapDataObject),
wxe_util:destroy(?wxBitmapDataObject_destroy,Obj),
diff --git a/lib/wx/src/gen/wxBoxSizer.erl b/lib/wx/src/gen/wxBoxSizer.erl
index 1a19b264d9..595be0a452 100644
--- a/lib/wx/src/gen/wxBoxSizer.erl
+++ b/lib/wx/src/gen/wxBoxSizer.erl
@@ -64,7 +64,7 @@ getOrientation(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxBoxSizer()) -> ok.
+-spec destroy(This::wxBoxSizer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxBoxSizer),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxBrush.erl b/lib/wx/src/gen/wxBrush.erl
index bc1956c1f7..8f5eced1b9 100644
--- a/lib/wx/src/gen/wxBrush.erl
+++ b/lib/wx/src/gen/wxBrush.erl
@@ -63,7 +63,7 @@ new(#wx_ref{type=StippleBitmapT,ref=StippleBitmapRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbrush.html#wxbrushwxbrush">external documentation</a>.
-spec new(Colour, [Option]) -> wxBrush() when
Colour::wx:wx_colour(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(Colour, Options)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4,is_list(Options) ->
MOpts = fun({style, Style}, Acc) -> [<<1:32/?UI,Style:32/?UI>>|Acc];
@@ -113,7 +113,7 @@ isOk(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbrush.html#wxbrushsetcolour">external documentation</a>.
--spec setColour(This, Col) -> ok when
+-spec setColour(This, Col) -> 'ok' when
This::wxBrush(), Col::wx:wx_colour().
setColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
when tuple_size(Col) =:= 3; tuple_size(Col) =:= 4 ->
@@ -122,7 +122,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Col)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbrush.html#wxbrushsetcolour">external documentation</a>.
--spec setColour(This, R, G, B) -> ok when
+-spec setColour(This, R, G, B) -> 'ok' when
This::wxBrush(), R::integer(), G::integer(), B::integer().
setColour(#wx_ref{type=ThisT,ref=ThisRef},R,G,B)
when is_integer(R),is_integer(G),is_integer(B) ->
@@ -131,7 +131,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},R,G,B)
<<ThisRef:32/?UI,R:32/?UI,G:32/?UI,B:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbrush.html#wxbrushsetstipple">external documentation</a>.
--spec setStipple(This, Stipple) -> ok when
+-spec setStipple(This, Stipple) -> 'ok' when
This::wxBrush(), Stipple::wxBitmap:wxBitmap().
setStipple(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=StippleT,ref=StippleRef}) ->
?CLASS(ThisT,wxBrush),
@@ -140,7 +140,7 @@ setStipple(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=StippleT,ref=StippleRef}
<<ThisRef:32/?UI,StippleRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbrush.html#wxbrushsetstyle">external documentation</a>.
--spec setStyle(This, Style) -> ok when
+-spec setStyle(This, Style) -> 'ok' when
This::wxBrush(), Style::integer().
setStyle(#wx_ref{type=ThisT,ref=ThisRef},Style)
when is_integer(Style) ->
@@ -149,7 +149,7 @@ setStyle(#wx_ref{type=ThisT,ref=ThisRef},Style)
<<ThisRef:32/?UI,Style:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxBrush()) -> ok.
+-spec destroy(This::wxBrush()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxBrush),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxBufferedDC.erl b/lib/wx/src/gen/wxBufferedDC.erl
index 67b851a84e..7856f6bb96 100644
--- a/lib/wx/src/gen/wxBufferedDC.erl
+++ b/lib/wx/src/gen/wxBufferedDC.erl
@@ -81,15 +81,15 @@ new(Dc)
%% <br /> Also:<br />
%% new(Dc, [Option]) -> wxBufferedDC() when<br />
%% Dc::wxDC:wxDC(),<br />
-%% Option :: {buffer, wxBitmap:wxBitmap()}<br />
-%% | {style, integer()}.<br />
+%% Option :: {'buffer', wxBitmap:wxBitmap()}<br />
+%% | {'style', integer()}.<br />
%%
-spec new(Dc, Area) -> wxBufferedDC() when
Dc::wxDC:wxDC(), Area::{W::integer(), H::integer()};
(Dc, [Option]) -> wxBufferedDC() when
Dc::wxDC:wxDC(),
- Option :: {buffer, wxBitmap:wxBitmap()}
- | {style, integer()}.
+ Option :: {'buffer', wxBitmap:wxBitmap()}
+ | {'style', integer()}.
new(Dc,Area={AreaW,AreaH})
when is_record(Dc, wx_ref),is_integer(AreaW),is_integer(AreaH) ->
@@ -107,7 +107,7 @@ new(#wx_ref{type=DcT,ref=DcRef}, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbuffereddc.html#wxbuffereddcwxbuffereddc">external documentation</a>.
-spec new(Dc, Area, [Option]) -> wxBufferedDC() when
Dc::wxDC:wxDC(), Area::{W::integer(), H::integer()},
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(#wx_ref{type=DcT,ref=DcRef},{AreaW,AreaH}, Options)
when is_integer(AreaW),is_integer(AreaH),is_list(Options) ->
?CLASS(DcT,wxDC),
@@ -118,7 +118,7 @@ new(#wx_ref{type=DcT,ref=DcRef},{AreaW,AreaH}, Options)
<<DcRef:32/?UI,AreaW:32/?UI,AreaH:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv init(This,Dc, [])
--spec init(This, Dc) -> ok when
+-spec init(This, Dc) -> 'ok' when
This::wxBufferedDC(), Dc::wxDC:wxDC().
init(This,Dc)
@@ -127,17 +127,17 @@ init(This,Dc)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbuffereddc.html#wxbuffereddcinit">external documentation</a>.
%% <br /> Also:<br />
-%% init(This, Dc, [Option]) -> ok when<br />
+%% init(This, Dc, [Option]) -> 'ok' when<br />
%% This::wxBufferedDC(), Dc::wxDC:wxDC(),<br />
-%% Option :: {buffer, wxBitmap:wxBitmap()}<br />
-%% | {style, integer()}.<br />
+%% Option :: {'buffer', wxBitmap:wxBitmap()}<br />
+%% | {'style', integer()}.<br />
%%
--spec init(This, Dc, Area) -> ok when
+-spec init(This, Dc, Area) -> 'ok' when
This::wxBufferedDC(), Dc::wxDC:wxDC(), Area::{W::integer(), H::integer()};
- (This, Dc, [Option]) -> ok when
+ (This, Dc, [Option]) -> 'ok' when
This::wxBufferedDC(), Dc::wxDC:wxDC(),
- Option :: {buffer, wxBitmap:wxBitmap()}
- | {style, integer()}.
+ Option :: {'buffer', wxBitmap:wxBitmap()}
+ | {'style', integer()}.
init(This,Dc,Area={AreaW,AreaH})
when is_record(This, wx_ref),is_record(Dc, wx_ref),is_integer(AreaW),is_integer(AreaH) ->
@@ -154,9 +154,9 @@ init(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DcT,ref=DcRef}, Options)
<<ThisRef:32/?UI,DcRef:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbuffereddc.html#wxbuffereddcinit">external documentation</a>.
--spec init(This, Dc, Area, [Option]) -> ok when
+-spec init(This, Dc, Area, [Option]) -> 'ok' when
This::wxBufferedDC(), Dc::wxDC:wxDC(), Area::{W::integer(), H::integer()},
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
init(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DcT,ref=DcRef},{AreaW,AreaH}, Options)
when is_integer(AreaW),is_integer(AreaH),is_list(Options) ->
?CLASS(ThisT,wxBufferedDC),
@@ -168,7 +168,7 @@ init(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DcT,ref=DcRef},{AreaW,AreaH},
<<ThisRef:32/?UI,DcRef:32/?UI,AreaW:32/?UI,AreaH:32/?UI, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxBufferedDC()) -> ok.
+-spec destroy(This::wxBufferedDC()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxBufferedDC),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxBufferedPaintDC.erl b/lib/wx/src/gen/wxBufferedPaintDC.erl
index 0601caf300..5af5098d27 100644
--- a/lib/wx/src/gen/wxBufferedPaintDC.erl
+++ b/lib/wx/src/gen/wxBufferedPaintDC.erl
@@ -78,13 +78,13 @@ new(Window)
%% <br /> Also:<br />
%% new(Window, [Option]) -> wxBufferedPaintDC() when<br />
%% Window::wxWindow:wxWindow(),<br />
-%% Option :: {style, integer()}.<br />
+%% Option :: {'style', integer()}.<br />
%%
-spec new(Window, Buffer) -> wxBufferedPaintDC() when
Window::wxWindow:wxWindow(), Buffer::wxBitmap:wxBitmap();
(Window, [Option]) -> wxBufferedPaintDC() when
Window::wxWindow:wxWindow(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(Window,Buffer)
when is_record(Window, wx_ref),is_record(Buffer, wx_ref) ->
@@ -101,7 +101,7 @@ new(#wx_ref{type=WindowT,ref=WindowRef}, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbufferedpaintdc.html#wxbufferedpaintdcwxbufferedpaintdc">external documentation</a>.
-spec new(Window, Buffer, [Option]) -> wxBufferedPaintDC() when
Window::wxWindow:wxWindow(), Buffer::wxBitmap:wxBitmap(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(#wx_ref{type=WindowT,ref=WindowRef},#wx_ref{type=BufferT,ref=BufferRef}, Options)
when is_list(Options) ->
?CLASS(WindowT,wxWindow),
@@ -113,7 +113,7 @@ new(#wx_ref{type=WindowT,ref=WindowRef},#wx_ref{type=BufferT,ref=BufferRef}, Opt
<<WindowRef:32/?UI,BufferRef:32/?UI, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxBufferedPaintDC()) -> ok.
+-spec destroy(This::wxBufferedPaintDC()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxBufferedPaintDC),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxButton.erl b/lib/wx/src/gen/wxButton.erl
index c94303bbea..65d45caa13 100644
--- a/lib/wx/src/gen/wxButton.erl
+++ b/lib/wx/src/gen/wxButton.erl
@@ -97,11 +97,11 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbutton.html#wxbuttonwxbutton">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxButton() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {label, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'label', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -126,11 +126,11 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbutton.html#wxbuttoncreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxButton(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {label, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'label', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxButton),
@@ -152,7 +152,7 @@ getDefaultSize() ->
<<>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbutton.html#wxbuttonsetdefault">external documentation</a>.
--spec setDefault(This) -> ok when
+-spec setDefault(This) -> 'ok' when
This::wxButton().
setDefault(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxButton),
@@ -160,7 +160,7 @@ setDefault(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxbutton.html#wxbuttonsetlabel">external documentation</a>.
--spec setLabel(This, Label) -> ok when
+-spec setLabel(This, Label) -> 'ok' when
This::wxButton(), Label::unicode:chardata().
setLabel(#wx_ref{type=ThisT,ref=ThisRef},Label)
when is_list(Label) ->
@@ -170,7 +170,7 @@ setLabel(#wx_ref{type=ThisT,ref=ThisRef},Label)
<<ThisRef:32/?UI,(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((0+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxButton()) -> ok.
+-spec destroy(This::wxButton()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxButton),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxCalendarCtrl.erl b/lib/wx/src/gen/wxCalendarCtrl.erl
index 1d4baeed08..93fcb61464 100644
--- a/lib/wx/src/gen/wxCalendarCtrl.erl
+++ b/lib/wx/src/gen/wxCalendarCtrl.erl
@@ -103,10 +103,10 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlwxcalendarctrl">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxCalendarCtrl() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {date, wx:wx_datetime()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'date', wx:wx_datetime()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -130,10 +130,10 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxCalendarCtrl(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {date, wx:wx_datetime()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'date', wx:wx_datetime()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxCalendarCtrl),
@@ -165,7 +165,7 @@ getDate(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv enableYearChange(This, [])
--spec enableYearChange(This) -> ok when
+-spec enableYearChange(This) -> 'ok' when
This::wxCalendarCtrl().
enableYearChange(This)
@@ -173,9 +173,9 @@ enableYearChange(This)
enableYearChange(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlenableyearchange">external documentation</a>.
--spec enableYearChange(This, [Option]) -> ok when
+-spec enableYearChange(This, [Option]) -> 'ok' when
This::wxCalendarCtrl(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enableYearChange(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxCalendarCtrl),
@@ -186,7 +186,7 @@ enableYearChange(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv enableMonthChange(This, [])
--spec enableMonthChange(This) -> ok when
+-spec enableMonthChange(This) -> 'ok' when
This::wxCalendarCtrl().
enableMonthChange(This)
@@ -194,9 +194,9 @@ enableMonthChange(This)
enableMonthChange(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlenablemonthchange">external documentation</a>.
--spec enableMonthChange(This, [Option]) -> ok when
+-spec enableMonthChange(This, [Option]) -> 'ok' when
This::wxCalendarCtrl(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enableMonthChange(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxCalendarCtrl),
@@ -207,7 +207,7 @@ enableMonthChange(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv enableHolidayDisplay(This, [])
--spec enableHolidayDisplay(This) -> ok when
+-spec enableHolidayDisplay(This) -> 'ok' when
This::wxCalendarCtrl().
enableHolidayDisplay(This)
@@ -215,9 +215,9 @@ enableHolidayDisplay(This)
enableHolidayDisplay(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlenableholidaydisplay">external documentation</a>.
--spec enableHolidayDisplay(This, [Option]) -> ok when
+-spec enableHolidayDisplay(This, [Option]) -> 'ok' when
This::wxCalendarCtrl(),
- Option :: {display, boolean()}.
+ Option :: {'display', boolean()}.
enableHolidayDisplay(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxCalendarCtrl),
@@ -228,7 +228,7 @@ enableHolidayDisplay(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlsetheadercolours">external documentation</a>.
--spec setHeaderColours(This, ColFg, ColBg) -> ok when
+-spec setHeaderColours(This, ColFg, ColBg) -> 'ok' when
This::wxCalendarCtrl(), ColFg::wx:wx_colour(), ColBg::wx:wx_colour().
setHeaderColours(#wx_ref{type=ThisT,ref=ThisRef},ColFg,ColBg)
when tuple_size(ColFg) =:= 3; tuple_size(ColFg) =:= 4,tuple_size(ColBg) =:= 3; tuple_size(ColBg) =:= 4 ->
@@ -253,7 +253,7 @@ getHeaderColourBg(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlsethighlightcolours">external documentation</a>.
--spec setHighlightColours(This, ColFg, ColBg) -> ok when
+-spec setHighlightColours(This, ColFg, ColBg) -> 'ok' when
This::wxCalendarCtrl(), ColFg::wx:wx_colour(), ColBg::wx:wx_colour().
setHighlightColours(#wx_ref{type=ThisT,ref=ThisRef},ColFg,ColBg)
when tuple_size(ColFg) =:= 3; tuple_size(ColFg) =:= 4,tuple_size(ColBg) =:= 3; tuple_size(ColBg) =:= 4 ->
@@ -278,7 +278,7 @@ getHighlightColourBg(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlsetholidaycolours">external documentation</a>.
--spec setHolidayColours(This, ColFg, ColBg) -> ok when
+-spec setHolidayColours(This, ColFg, ColBg) -> 'ok' when
This::wxCalendarCtrl(), ColFg::wx:wx_colour(), ColBg::wx:wx_colour().
setHolidayColours(#wx_ref{type=ThisT,ref=ThisRef},ColFg,ColBg)
when tuple_size(ColFg) =:= 3; tuple_size(ColFg) =:= 4,tuple_size(ColBg) =:= 3; tuple_size(ColBg) =:= 4 ->
@@ -312,7 +312,7 @@ getAttr(#wx_ref{type=ThisT,ref=ThisRef},Day)
<<ThisRef:32/?UI,Day:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlsetattr">external documentation</a>.
--spec setAttr(This, Day, Attr) -> ok when
+-spec setAttr(This, Day, Attr) -> 'ok' when
This::wxCalendarCtrl(), Day::integer(), Attr::wxCalendarDateAttr:wxCalendarDateAttr().
setAttr(#wx_ref{type=ThisT,ref=ThisRef},Day,#wx_ref{type=AttrT,ref=AttrRef})
when is_integer(Day) ->
@@ -322,7 +322,7 @@ setAttr(#wx_ref{type=ThisT,ref=ThisRef},Day,#wx_ref{type=AttrT,ref=AttrRef})
<<ThisRef:32/?UI,Day:32/?UI,AttrRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlsetholiday">external documentation</a>.
--spec setHoliday(This, Day) -> ok when
+-spec setHoliday(This, Day) -> 'ok' when
This::wxCalendarCtrl(), Day::integer().
setHoliday(#wx_ref{type=ThisT,ref=ThisRef},Day)
when is_integer(Day) ->
@@ -331,7 +331,7 @@ setHoliday(#wx_ref{type=ThisT,ref=ThisRef},Day)
<<ThisRef:32/?UI,Day:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendarctrl.html#wxcalendarctrlresetattr">external documentation</a>.
--spec resetAttr(This, Day) -> ok when
+-spec resetAttr(This, Day) -> 'ok' when
This::wxCalendarCtrl(), Day::integer().
resetAttr(#wx_ref{type=ThisT,ref=ThisRef},Day)
when is_integer(Day) ->
@@ -352,7 +352,7 @@ hitTest(#wx_ref{type=ThisT,ref=ThisRef},{PosX,PosY})
<<ThisRef:32/?UI,PosX:32/?UI,PosY:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxCalendarCtrl()) -> ok.
+-spec destroy(This::wxCalendarCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxCalendarCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxCalendarDateAttr.erl b/lib/wx/src/gen/wxCalendarDateAttr.erl
index 175b03cfdd..cb670fd273 100644
--- a/lib/wx/src/gen/wxCalendarDateAttr.erl
+++ b/lib/wx/src/gen/wxCalendarDateAttr.erl
@@ -67,21 +67,21 @@ new(ColText)
%% <br /> Also:<br />
%% new(ColText, [Option]) -> wxCalendarDateAttr() when<br />
%% ColText::wx:wx_colour(),<br />
-%% Option :: {colBack, wx:wx_colour()}<br />
-%% | {colBorder, wx:wx_colour()}<br />
-%% | {font, wxFont:wxFont()}<br />
-%% | {border, wx:wx_enum()}.<br />
+%% Option :: {'colBack', wx:wx_colour()}<br />
+%% | {'colBorder', wx:wx_colour()}<br />
+%% | {'font', wxFont:wxFont()}<br />
+%% | {'border', wx:wx_enum()}.<br />
%%
%%<br /> Border = ?wxCAL_BORDER_NONE | ?wxCAL_BORDER_SQUARE | ?wxCAL_BORDER_ROUND
-spec new(Border, [Option]) -> wxCalendarDateAttr() when
Border::wx:wx_enum(),
- Option :: {colBorder, wx:wx_colour()};
+ Option :: {'colBorder', wx:wx_colour()};
(ColText, [Option]) -> wxCalendarDateAttr() when
ColText::wx:wx_colour(),
- Option :: {colBack, wx:wx_colour()}
- | {colBorder, wx:wx_colour()}
- | {font, wxFont:wxFont()}
- | {border, wx:wx_enum()}.
+ Option :: {'colBack', wx:wx_colour()}
+ | {'colBorder', wx:wx_colour()}
+ | {'font', wxFont:wxFont()}
+ | {'border', wx:wx_enum()}.
new(Border, Options)
when is_integer(Border),is_list(Options) ->
MOpts = fun({colBorder, ColBorder}, Acc) -> [<<1:32/?UI,(wxe_util:colour_bin(ColBorder)):16/binary,0:32>>|Acc];
@@ -101,7 +101,7 @@ new(ColText, Options)
<<(wxe_util:colour_bin(ColText)):16/binary, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendardateattr.html#wxcalendardateattrsettextcolour">external documentation</a>.
--spec setTextColour(This, ColText) -> ok when
+-spec setTextColour(This, ColText) -> 'ok' when
This::wxCalendarDateAttr(), ColText::wx:wx_colour().
setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
when tuple_size(ColText) =:= 3; tuple_size(ColText) =:= 4 ->
@@ -110,7 +110,7 @@ setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColText)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendardateattr.html#wxcalendardateattrsetbackgroundcolour">external documentation</a>.
--spec setBackgroundColour(This, ColBack) -> ok when
+-spec setBackgroundColour(This, ColBack) -> 'ok' when
This::wxCalendarDateAttr(), ColBack::wx:wx_colour().
setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
when tuple_size(ColBack) =:= 3; tuple_size(ColBack) =:= 4 ->
@@ -119,7 +119,7 @@ setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColBack)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendardateattr.html#wxcalendardateattrsetbordercolour">external documentation</a>.
--spec setBorderColour(This, Col) -> ok when
+-spec setBorderColour(This, Col) -> 'ok' when
This::wxCalendarDateAttr(), Col::wx:wx_colour().
setBorderColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
when tuple_size(Col) =:= 3; tuple_size(Col) =:= 4 ->
@@ -128,7 +128,7 @@ setBorderColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Col)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendardateattr.html#wxcalendardateattrsetfont">external documentation</a>.
--spec setFont(This, Font) -> ok when
+-spec setFont(This, Font) -> 'ok' when
This::wxCalendarDateAttr(), Font::wxFont:wxFont().
setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxCalendarDateAttr),
@@ -138,7 +138,7 @@ setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendardateattr.html#wxcalendardateattrsetborder">external documentation</a>.
%%<br /> Border = ?wxCAL_BORDER_NONE | ?wxCAL_BORDER_SQUARE | ?wxCAL_BORDER_ROUND
--spec setBorder(This, Border) -> ok when
+-spec setBorder(This, Border) -> 'ok' when
This::wxCalendarDateAttr(), Border::wx:wx_enum().
setBorder(#wx_ref{type=ThisT,ref=ThisRef},Border)
when is_integer(Border) ->
@@ -147,7 +147,7 @@ setBorder(#wx_ref{type=ThisT,ref=ThisRef},Border)
<<ThisRef:32/?UI,Border:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcalendardateattr.html#wxcalendardateattrsetholiday">external documentation</a>.
--spec setHoliday(This, Holiday) -> ok when
+-spec setHoliday(This, Holiday) -> 'ok' when
This::wxCalendarDateAttr(), Holiday::boolean().
setHoliday(#wx_ref{type=ThisT,ref=ThisRef},Holiday)
when is_boolean(Holiday) ->
@@ -245,7 +245,7 @@ getBorder(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxCalendarDateAttr()) -> ok.
+-spec destroy(This::wxCalendarDateAttr()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxCalendarDateAttr),
wxe_util:destroy(?wxCalendarDateAttr_destroy,Obj),
diff --git a/lib/wx/src/gen/wxCaret.erl b/lib/wx/src/gen/wxCaret.erl
index 9da832aa67..8833a920d5 100644
--- a/lib/wx/src/gen/wxCaret.erl
+++ b/lib/wx/src/gen/wxCaret.erl
@@ -106,7 +106,7 @@ getWindow(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcaret.html#wxcarethide">external documentation</a>.
--spec hide(This) -> ok when
+-spec hide(This) -> 'ok' when
This::wxCaret().
hide(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxCaret),
@@ -130,7 +130,7 @@ isVisible(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcaret.html#wxcaretmove">external documentation</a>.
--spec move(This, Pt) -> ok when
+-spec move(This, Pt) -> 'ok' when
This::wxCaret(), Pt::{X::integer(), Y::integer()}.
move(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
when is_integer(PtX),is_integer(PtY) ->
@@ -139,7 +139,7 @@ move(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcaret.html#wxcaretmove">external documentation</a>.
--spec move(This, X, Y) -> ok when
+-spec move(This, X, Y) -> 'ok' when
This::wxCaret(), X::integer(), Y::integer().
move(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -148,7 +148,7 @@ move(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcaret.html#wxcaretsetblinktime">external documentation</a>.
--spec setBlinkTime(Milliseconds) -> ok when
+-spec setBlinkTime(Milliseconds) -> 'ok' when
Milliseconds::integer().
setBlinkTime(Milliseconds)
when is_integer(Milliseconds) ->
@@ -156,7 +156,7 @@ setBlinkTime(Milliseconds)
<<Milliseconds:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcaret.html#wxcaretsetsize">external documentation</a>.
--spec setSize(This, Size) -> ok when
+-spec setSize(This, Size) -> 'ok' when
This::wxCaret(), Size::{W::integer(), H::integer()}.
setSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -165,7 +165,7 @@ setSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcaret.html#wxcaretsetsize">external documentation</a>.
--spec setSize(This, Width, Height) -> ok when
+-spec setSize(This, Width, Height) -> 'ok' when
This::wxCaret(), Width::integer(), Height::integer().
setSize(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
when is_integer(Width),is_integer(Height) ->
@@ -174,7 +174,7 @@ setSize(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
<<ThisRef:32/?UI,Width:32/?UI,Height:32/?UI>>).
%% @equiv show(This, [])
--spec show(This) -> ok when
+-spec show(This) -> 'ok' when
This::wxCaret().
show(This)
@@ -182,9 +182,9 @@ show(This)
show(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcaret.html#wxcaretshow">external documentation</a>.
--spec show(This, [Option]) -> ok when
+-spec show(This, [Option]) -> 'ok' when
This::wxCaret(),
- Option :: {show, boolean()}.
+ Option :: {'show', boolean()}.
show(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxCaret),
@@ -195,7 +195,7 @@ show(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxCaret()) -> ok.
+-spec destroy(This::wxCaret()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxCaret),
wxe_util:destroy(?wxCaret_destruct,Obj),
diff --git a/lib/wx/src/gen/wxCheckBox.erl b/lib/wx/src/gen/wxCheckBox.erl
index 2cea4d04b4..3276add802 100644
--- a/lib/wx/src/gen/wxCheckBox.erl
+++ b/lib/wx/src/gen/wxCheckBox.erl
@@ -98,10 +98,10 @@ new(Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcheckbox.html#wxcheckboxwxcheckbox">external documentation</a>.
-spec new(Parent, Id, Label, [Option]) -> wxCheckBox() when
Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -126,10 +126,10 @@ create(This,Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcheckbox.html#wxcheckboxcreate">external documentation</a>.
-spec create(This, Parent, Id, Label, [Option]) -> boolean() when
This::wxCheckBox(), Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ThisT,wxCheckBox),
@@ -186,7 +186,7 @@ isChecked(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcheckbox.html#wxcheckboxsetvalue">external documentation</a>.
--spec setValue(This, State) -> ok when
+-spec setValue(This, State) -> 'ok' when
This::wxCheckBox(), State::boolean().
setValue(#wx_ref{type=ThisT,ref=ThisRef},State)
when is_boolean(State) ->
@@ -196,7 +196,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},State)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcheckbox.html#wxcheckboxset3statevalue">external documentation</a>.
%%<br /> State = ?wxCHK_UNCHECKED | ?wxCHK_CHECKED | ?wxCHK_UNDETERMINED
--spec set3StateValue(This, State) -> ok when
+-spec set3StateValue(This, State) -> 'ok' when
This::wxCheckBox(), State::wx:wx_enum().
set3StateValue(#wx_ref{type=ThisT,ref=ThisRef},State)
when is_integer(State) ->
@@ -205,7 +205,7 @@ set3StateValue(#wx_ref{type=ThisT,ref=ThisRef},State)
<<ThisRef:32/?UI,State:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxCheckBox()) -> ok.
+-spec destroy(This::wxCheckBox()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxCheckBox),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxCheckListBox.erl b/lib/wx/src/gen/wxCheckListBox.erl
index f6013e4863..888f29518c 100644
--- a/lib/wx/src/gen/wxCheckListBox.erl
+++ b/lib/wx/src/gen/wxCheckListBox.erl
@@ -105,11 +105,11 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchecklistbox.html#wxchecklistboxwxchecklistbox">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxCheckListBox() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {choices, [unicode:chardata()]}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'choices', [unicode:chardata()]}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -124,7 +124,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
<<ParentRef:32/?UI,Id:32/?UI, BinOpt/binary>>).
%% @equiv check(This,Index, [])
--spec check(This, Index) -> ok when
+-spec check(This, Index) -> 'ok' when
This::wxCheckListBox(), Index::integer().
check(This,Index)
@@ -132,9 +132,9 @@ check(This,Index)
check(This,Index, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchecklistbox.html#wxchecklistboxcheck">external documentation</a>.
--spec check(This, Index, [Option]) -> ok when
+-spec check(This, Index, [Option]) -> 'ok' when
This::wxCheckListBox(), Index::integer(),
- Option :: {check, boolean()}.
+ Option :: {'check', boolean()}.
check(#wx_ref{type=ThisT,ref=ThisRef},Index, Options)
when is_integer(Index),is_list(Options) ->
?CLASS(ThisT,wxCheckListBox),
@@ -154,7 +154,7 @@ isChecked(#wx_ref{type=ThisT,ref=ThisRef},Index)
<<ThisRef:32/?UI,Index:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxCheckListBox()) -> ok.
+-spec destroy(This::wxCheckListBox()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxCheckListBox),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxChoice.erl b/lib/wx/src/gen/wxChoice.erl
index 73867d6597..1a90b275d1 100644
--- a/lib/wx/src/gen/wxChoice.erl
+++ b/lib/wx/src/gen/wxChoice.erl
@@ -103,11 +103,11 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoice.html#wxchoicewxchoice">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxChoice() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {choices, [unicode:chardata()]}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'choices', [unicode:chardata()]}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -132,8 +132,8 @@ create(This,Parent,Id,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoice.html#wxchoicecreate">external documentation</a>.
-spec create(This, Parent, Id, Pos, Size, Choices, [Option]) -> boolean() when
This::wxChoice(), Parent::wxWindow:wxWindow(), Id::integer(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()],
- Option :: {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,{PosX,PosY},{SizeW,SizeH},Choices, Options)
when is_integer(Id),is_integer(PosX),is_integer(PosY),is_integer(SizeW),is_integer(SizeH),is_list(Choices),is_list(Options) ->
?CLASS(ThisT,wxChoice),
@@ -148,7 +148,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,{P
<<ThisRef:32/?UI,ParentRef:32/?UI,Id:32/?UI,PosX:32/?UI,PosY:32/?UI,SizeW:32/?UI,SizeH:32/?UI,(length(Choices_UCA)):32/?UI, (<< <<(byte_size(UC_Str)):32/?UI, UC_Str/binary>>|| UC_Str <- Choices_UCA>>)/binary, 0:(((8- ((0 + lists:sum([byte_size(S)+4||S<-Choices_UCA])) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoice.html#wxchoicedelete">external documentation</a>.
--spec delete(This, N) -> ok when
+-spec delete(This, N) -> 'ok' when
This::wxChoice(), N::integer().
delete(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -165,7 +165,7 @@ getColumns(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv setColumns(This, [])
--spec setColumns(This) -> ok when
+-spec setColumns(This) -> 'ok' when
This::wxChoice().
setColumns(This)
@@ -173,9 +173,9 @@ setColumns(This)
setColumns(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoice.html#wxchoicesetcolumns">external documentation</a>.
--spec setColumns(This, [Option]) -> ok when
+-spec setColumns(This, [Option]) -> 'ok' when
This::wxChoice(),
- Option :: {n, integer()}.
+ Option :: {'n', integer()}.
setColumns(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxChoice),
@@ -186,7 +186,7 @@ setColumns(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxChoice()) -> ok.
+-spec destroy(This::wxChoice()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxChoice),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxChoicebook.erl b/lib/wx/src/gen/wxChoicebook.erl
index 37a44a813a..34b62ff75b 100644
--- a/lib/wx/src/gen/wxChoicebook.erl
+++ b/lib/wx/src/gen/wxChoicebook.erl
@@ -101,9 +101,9 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoicebook.html#wxchoicebookwxchoicebook">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxChoicebook() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -126,8 +126,8 @@ addPage(This,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoicebook.html#wxchoicebookaddpage">external documentation</a>.
-spec addPage(This, Page, Text, [Option]) -> boolean() when
This::wxChoicebook(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxChoicebook),
@@ -141,7 +141,7 @@ addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Op
<<ThisRef:32/?UI,PageRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @equiv advanceSelection(This, [])
--spec advanceSelection(This) -> ok when
+-spec advanceSelection(This) -> 'ok' when
This::wxChoicebook().
advanceSelection(This)
@@ -149,9 +149,9 @@ advanceSelection(This)
advanceSelection(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoicebook.html#wxchoicebookadvanceselection">external documentation</a>.
--spec advanceSelection(This, [Option]) -> ok when
+-spec advanceSelection(This, [Option]) -> 'ok' when
This::wxChoicebook(),
- Option :: {forward, boolean()}.
+ Option :: {'forward', boolean()}.
advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxChoicebook),
@@ -162,7 +162,7 @@ advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoicebook.html#wxchoicebookassignimagelist">external documentation</a>.
--spec assignImageList(This, ImageList) -> ok when
+-spec assignImageList(This, ImageList) -> 'ok' when
This::wxChoicebook(), ImageList::wxImageList:wxImageList().
assignImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxChoicebook),
@@ -181,9 +181,9 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoicebook.html#wxchoicebookcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxChoicebook(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxChoicebook),
@@ -302,8 +302,8 @@ insertPage(This,N,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoicebook.html#wxchoicebookinsertpage">external documentation</a>.
-spec insertPage(This, N, Page, Text, [Option]) -> boolean() when
This::wxChoicebook(), N::integer(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
insertPage(#wx_ref{type=ThisT,ref=ThisRef},N,#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_integer(N),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxChoicebook),
@@ -317,7 +317,7 @@ insertPage(#wx_ref{type=ThisT,ref=ThisRef},N,#wx_ref{type=PageT,ref=PageRef},Tex
<<ThisRef:32/?UI,N:32/?UI,PageRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoicebook.html#wxchoicebooksetimagelist">external documentation</a>.
--spec setImageList(This, ImageList) -> ok when
+-spec setImageList(This, ImageList) -> 'ok' when
This::wxChoicebook(), ImageList::wxImageList:wxImageList().
setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxChoicebook),
@@ -326,7 +326,7 @@ setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageLi
<<ThisRef:32/?UI,ImageListRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxchoicebook.html#wxchoicebooksetpagesize">external documentation</a>.
--spec setPageSize(This, Size) -> ok when
+-spec setPageSize(This, Size) -> 'ok' when
This::wxChoicebook(), Size::{W::integer(), H::integer()}.
setPageSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -372,7 +372,7 @@ changeSelection(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxChoicebook()) -> ok.
+-spec destroy(This::wxChoicebook()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxChoicebook),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxClientDC.erl b/lib/wx/src/gen/wxClientDC.erl
index 3e9bcd33dd..4965536690 100644
--- a/lib/wx/src/gen/wxClientDC.erl
+++ b/lib/wx/src/gen/wxClientDC.erl
@@ -80,7 +80,7 @@ new(#wx_ref{type=WinT,ref=WinRef}) ->
<<WinRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxClientDC()) -> ok.
+-spec destroy(This::wxClientDC()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxClientDC),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxClipboard.erl b/lib/wx/src/gen/wxClipboard.erl
index cbf9e63067..747e4f1610 100644
--- a/lib/wx/src/gen/wxClipboard.erl
+++ b/lib/wx/src/gen/wxClipboard.erl
@@ -52,7 +52,7 @@ addData(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DataT,ref=DataRef}) ->
<<ThisRef:32/?UI,DataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxclipboard.html#wxclipboardclear">external documentation</a>.
--spec clear(This) -> ok when
+-spec clear(This) -> 'ok' when
This::wxClipboard().
clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxClipboard),
@@ -60,7 +60,7 @@ clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxclipboard.html#wxclipboardclose">external documentation</a>.
--spec close(This) -> ok when
+-spec close(This) -> 'ok' when
This::wxClipboard().
close(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxClipboard),
@@ -110,7 +110,7 @@ setData(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DataT,ref=DataRef}) ->
<<ThisRef:32/?UI,DataRef:32/?UI>>).
%% @equiv usePrimarySelection(This, [])
--spec usePrimarySelection(This) -> ok when
+-spec usePrimarySelection(This) -> 'ok' when
This::wxClipboard().
usePrimarySelection(This)
@@ -118,9 +118,9 @@ usePrimarySelection(This)
usePrimarySelection(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxclipboard.html#wxclipboarduseprimaryselection">external documentation</a>.
--spec usePrimarySelection(This, [Option]) -> ok when
+-spec usePrimarySelection(This, [Option]) -> 'ok' when
This::wxClipboard(),
- Option :: {primary, boolean()}.
+ Option :: {'primary', boolean()}.
usePrimarySelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxClipboard),
@@ -147,7 +147,7 @@ get() ->
<<>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxClipboard()) -> ok.
+-spec destroy(This::wxClipboard()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxClipboard),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxCloseEvent.erl b/lib/wx/src/gen/wxCloseEvent.erl
index b02a578b9e..6a683c6e8c 100644
--- a/lib/wx/src/gen/wxCloseEvent.erl
+++ b/lib/wx/src/gen/wxCloseEvent.erl
@@ -61,7 +61,7 @@ getLoggingOff(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcloseevent.html#wxcloseeventsetcanveto">external documentation</a>.
--spec setCanVeto(This, CanVeto) -> ok when
+-spec setCanVeto(This, CanVeto) -> 'ok' when
This::wxCloseEvent(), CanVeto::boolean().
setCanVeto(#wx_ref{type=ThisT,ref=ThisRef},CanVeto)
when is_boolean(CanVeto) ->
@@ -70,7 +70,7 @@ setCanVeto(#wx_ref{type=ThisT,ref=ThisRef},CanVeto)
<<ThisRef:32/?UI,(wxe_util:from_bool(CanVeto)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcloseevent.html#wxcloseeventsetloggingoff">external documentation</a>.
--spec setLoggingOff(This, LogOff) -> ok when
+-spec setLoggingOff(This, LogOff) -> 'ok' when
This::wxCloseEvent(), LogOff::boolean().
setLoggingOff(#wx_ref{type=ThisT,ref=ThisRef},LogOff)
when is_boolean(LogOff) ->
@@ -79,7 +79,7 @@ setLoggingOff(#wx_ref{type=ThisT,ref=ThisRef},LogOff)
<<ThisRef:32/?UI,(wxe_util:from_bool(LogOff)):32/?UI>>).
%% @equiv veto(This, [])
--spec veto(This) -> ok when
+-spec veto(This) -> 'ok' when
This::wxCloseEvent().
veto(This)
@@ -87,9 +87,9 @@ veto(This)
veto(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcloseevent.html#wxcloseeventveto">external documentation</a>.
--spec veto(This, [Option]) -> ok when
+-spec veto(This, [Option]) -> 'ok' when
This::wxCloseEvent(),
- Option :: {veto, boolean()}.
+ Option :: {'veto', boolean()}.
veto(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxCloseEvent),
diff --git a/lib/wx/src/gen/wxColourData.erl b/lib/wx/src/gen/wxColourData.erl
index 7379592298..92586688f6 100644
--- a/lib/wx/src/gen/wxColourData.erl
+++ b/lib/wx/src/gen/wxColourData.erl
@@ -76,7 +76,7 @@ getCustomColour(#wx_ref{type=ThisT,ref=ThisRef},I)
<<ThisRef:32/?UI,I:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcolourdata.html#wxcolourdatasetchoosefull">external documentation</a>.
--spec setChooseFull(This, Flag) -> ok when
+-spec setChooseFull(This, Flag) -> 'ok' when
This::wxColourData(), Flag::boolean().
setChooseFull(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -85,7 +85,7 @@ setChooseFull(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcolourdata.html#wxcolourdatasetcolour">external documentation</a>.
--spec setColour(This, Colour) -> ok when
+-spec setColour(This, Colour) -> 'ok' when
This::wxColourData(), Colour::wx:wx_colour().
setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -94,7 +94,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcolourdata.html#wxcolourdatasetcustomcolour">external documentation</a>.
--spec setCustomColour(This, I, Colour) -> ok when
+-spec setCustomColour(This, I, Colour) -> 'ok' when
This::wxColourData(), I::integer(), Colour::wx:wx_colour().
setCustomColour(#wx_ref{type=ThisT,ref=ThisRef},I,Colour)
when is_integer(I),tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -103,7 +103,7 @@ setCustomColour(#wx_ref{type=ThisT,ref=ThisRef},I,Colour)
<<ThisRef:32/?UI,I:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxColourData()) -> ok.
+-spec destroy(This::wxColourData()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxColourData),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxColourDialog.erl b/lib/wx/src/gen/wxColourDialog.erl
index 15eee30727..9c97434d9a 100644
--- a/lib/wx/src/gen/wxColourDialog.erl
+++ b/lib/wx/src/gen/wxColourDialog.erl
@@ -105,7 +105,7 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcolourdialog.html#wxcolourdialogwxcolourdialog">external documentation</a>.
-spec new(Parent, [Option]) -> wxColourDialog() when
Parent::wxWindow:wxWindow(),
- Option :: {data, wxColourData:wxColourData()}.
+ Option :: {'data', wxColourData:wxColourData()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -126,7 +126,7 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcolourdialog.html#wxcolourdialogcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxColourDialog(), Parent::wxWindow:wxWindow(),
- Option :: {data, wxColourData:wxColourData()}.
+ Option :: {'data', wxColourData:wxColourData()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxColourDialog),
@@ -146,7 +146,7 @@ getColourData(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxColourDialog()) -> ok.
+-spec destroy(This::wxColourDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxColourDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxColourPickerCtrl.erl b/lib/wx/src/gen/wxColourPickerCtrl.erl
index 486441c005..9c987b4dde 100644
--- a/lib/wx/src/gen/wxColourPickerCtrl.erl
+++ b/lib/wx/src/gen/wxColourPickerCtrl.erl
@@ -102,11 +102,11 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcolourpickerctrl.html#wxcolourpickerctrlwxcolourpickerctrl">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxColourPickerCtrl() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {col, wx:wx_colour()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'col', wx:wx_colour()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -131,11 +131,11 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcolourpickerctrl.html#wxcolourpickerctrlcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxColourPickerCtrl(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {col, wx:wx_colour()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'col', wx:wx_colour()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxColourPickerCtrl),
@@ -160,12 +160,12 @@ getColour(#wx_ref{type=ThisT,ref=ThisRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcolourpickerctrl.html#wxcolourpickerctrlsetcolour">external documentation</a>.
%% <br /> Also:<br />
-%% setColour(This, Col) -> ok when<br />
+%% setColour(This, Col) -> 'ok' when<br />
%% This::wxColourPickerCtrl(), Col::wx:wx_colour().<br />
%%
-spec setColour(This, Text) -> boolean() when
This::wxColourPickerCtrl(), Text::unicode:chardata();
- (This, Col) -> ok when
+ (This, Col) -> 'ok' when
This::wxColourPickerCtrl(), Col::wx:wx_colour().
setColour(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -180,7 +180,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Col)):16/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxColourPickerCtrl()) -> ok.
+-spec destroy(This::wxColourPickerCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxColourPickerCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxComboBox.erl b/lib/wx/src/gen/wxComboBox.erl
index 37d6e71605..bbdf768eba 100644
--- a/lib/wx/src/gen/wxComboBox.erl
+++ b/lib/wx/src/gen/wxComboBox.erl
@@ -105,12 +105,12 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxwxcombobox">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxComboBox() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {value, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {choices, [unicode:chardata()]}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'value', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'choices', [unicode:chardata()]}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -136,8 +136,8 @@ create(This,Parent,Id,Value,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxcreate">external documentation</a>.
-spec create(This, Parent, Id, Value, Pos, Size, Choices, [Option]) -> boolean() when
This::wxComboBox(), Parent::wxWindow:wxWindow(), Id::integer(), Value::unicode:chardata(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()],
- Option :: {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Value,{PosX,PosY},{SizeW,SizeH},Choices, Options)
when is_integer(Id),is_list(Value),is_integer(PosX),is_integer(PosY),is_integer(SizeW),is_integer(SizeH),is_list(Choices),is_list(Options) ->
?CLASS(ThisT,wxComboBox),
@@ -193,7 +193,7 @@ canUndo(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxcopy">external documentation</a>.
--spec copy(This) -> ok when
+-spec copy(This) -> 'ok' when
This::wxComboBox().
copy(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxComboBox),
@@ -201,7 +201,7 @@ copy(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxcut">external documentation</a>.
--spec cut(This) -> ok when
+-spec cut(This) -> 'ok' when
This::wxComboBox().
cut(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxComboBox),
@@ -233,7 +233,7 @@ getValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxpaste">external documentation</a>.
--spec paste(This) -> ok when
+-spec paste(This) -> 'ok' when
This::wxComboBox().
paste(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxComboBox),
@@ -241,7 +241,7 @@ paste(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxredo">external documentation</a>.
--spec redo(This) -> ok when
+-spec redo(This) -> 'ok' when
This::wxComboBox().
redo(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxComboBox),
@@ -249,7 +249,7 @@ redo(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxreplace">external documentation</a>.
--spec replace(This, From, To, Value) -> ok when
+-spec replace(This, From, To, Value) -> 'ok' when
This::wxComboBox(), From::integer(), To::integer(), Value::unicode:chardata().
replace(#wx_ref{type=ThisT,ref=ThisRef},From,To,Value)
when is_integer(From),is_integer(To),is_list(Value) ->
@@ -259,7 +259,7 @@ replace(#wx_ref{type=ThisT,ref=ThisRef},From,To,Value)
<<ThisRef:32/?UI,From:32/?UI,To:32/?UI,(byte_size(Value_UC)):32/?UI,(Value_UC)/binary, 0:(((8- ((0+byte_size(Value_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxremove">external documentation</a>.
--spec remove(This, From, To) -> ok when
+-spec remove(This, From, To) -> 'ok' when
This::wxComboBox(), From::integer(), To::integer().
remove(#wx_ref{type=ThisT,ref=ThisRef},From,To)
when is_integer(From),is_integer(To) ->
@@ -268,7 +268,7 @@ remove(#wx_ref{type=ThisT,ref=ThisRef},From,To)
<<ThisRef:32/?UI,From:32/?UI,To:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxsetinsertionpoint">external documentation</a>.
--spec setInsertionPoint(This, Pos) -> ok when
+-spec setInsertionPoint(This, Pos) -> 'ok' when
This::wxComboBox(), Pos::integer().
setInsertionPoint(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -277,7 +277,7 @@ setInsertionPoint(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxsetinsertionpointend">external documentation</a>.
--spec setInsertionPointEnd(This) -> ok when
+-spec setInsertionPointEnd(This) -> 'ok' when
This::wxComboBox().
setInsertionPointEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxComboBox),
@@ -285,7 +285,7 @@ setInsertionPointEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxsetselection">external documentation</a>.
--spec setSelection(This, N) -> ok when
+-spec setSelection(This, N) -> 'ok' when
This::wxComboBox(), N::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -294,7 +294,7 @@ setSelection(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxsetselection">external documentation</a>.
--spec setSelection(This, From, To) -> ok when
+-spec setSelection(This, From, To) -> 'ok' when
This::wxComboBox(), From::integer(), To::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},From,To)
when is_integer(From),is_integer(To) ->
@@ -303,7 +303,7 @@ setSelection(#wx_ref{type=ThisT,ref=ThisRef},From,To)
<<ThisRef:32/?UI,From:32/?UI,To:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxsetvalue">external documentation</a>.
--spec setValue(This, Value) -> ok when
+-spec setValue(This, Value) -> 'ok' when
This::wxComboBox(), Value::unicode:chardata().
setValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
when is_list(Value) ->
@@ -313,7 +313,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
<<ThisRef:32/?UI,(byte_size(Value_UC)):32/?UI,(Value_UC)/binary, 0:(((8- ((0+byte_size(Value_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcombobox.html#wxcomboboxundo">external documentation</a>.
--spec undo(This) -> ok when
+-spec undo(This) -> 'ok' when
This::wxComboBox().
undo(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxComboBox),
@@ -321,7 +321,7 @@ undo(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxComboBox()) -> ok.
+-spec destroy(This::wxComboBox()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxComboBox),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxCommandEvent.erl b/lib/wx/src/gen/wxCommandEvent.erl
index a36aa3aa95..781482aebb 100644
--- a/lib/wx/src/gen/wxCommandEvent.erl
+++ b/lib/wx/src/gen/wxCommandEvent.erl
@@ -102,7 +102,7 @@ isSelection(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcommandevent.html#wxcommandeventsetint">external documentation</a>.
--spec setInt(This, I) -> ok when
+-spec setInt(This, I) -> 'ok' when
This::wxCommandEvent(), I::integer().
setInt(#wx_ref{type=ThisT,ref=ThisRef},I)
when is_integer(I) ->
@@ -111,7 +111,7 @@ setInt(#wx_ref{type=ThisT,ref=ThisRef},I)
<<ThisRef:32/?UI,I:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcommandevent.html#wxcommandeventsetstring">external documentation</a>.
--spec setString(This, S) -> ok when
+-spec setString(This, S) -> 'ok' when
This::wxCommandEvent(), S::unicode:chardata().
setString(#wx_ref{type=ThisT,ref=ThisRef},S)
when is_list(S) ->
diff --git a/lib/wx/src/gen/wxContextMenuEvent.erl b/lib/wx/src/gen/wxContextMenuEvent.erl
index 94a7a2948d..f1c953badb 100644
--- a/lib/wx/src/gen/wxContextMenuEvent.erl
+++ b/lib/wx/src/gen/wxContextMenuEvent.erl
@@ -57,7 +57,7 @@ getPosition(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontextmenuevent.html#wxcontextmenueventsetposition">external documentation</a>.
--spec setPosition(This, Pos) -> ok when
+-spec setPosition(This, Pos) -> 'ok' when
This::wxContextMenuEvent(), Pos::{X::integer(), Y::integer()}.
setPosition(#wx_ref{type=ThisT,ref=ThisRef},{PosX,PosY})
when is_integer(PosX),is_integer(PosY) ->
diff --git a/lib/wx/src/gen/wxControl.erl b/lib/wx/src/gen/wxControl.erl
index f84ec34b02..a84f88639b 100644
--- a/lib/wx/src/gen/wxControl.erl
+++ b/lib/wx/src/gen/wxControl.erl
@@ -86,7 +86,7 @@ getLabel(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontrol.html#wxcontrolsetlabel">external documentation</a>.
--spec setLabel(This, Label) -> ok when
+-spec setLabel(This, Label) -> 'ok' when
This::wxControl(), Label::unicode:chardata().
setLabel(#wx_ref{type=ThisT,ref=ThisRef},Label)
when is_list(Label) ->
diff --git a/lib/wx/src/gen/wxControlWithItems.erl b/lib/wx/src/gen/wxControlWithItems.erl
index d52c7917a2..c4d116d9e7 100644
--- a/lib/wx/src/gen/wxControlWithItems.erl
+++ b/lib/wx/src/gen/wxControlWithItems.erl
@@ -104,7 +104,7 @@ append(#wx_ref{type=ThisT,ref=ThisRef},Item,ClientData)
<<ThisRef:32/?UI,(byte_size(Item_UC)):32/?UI,(Item_UC)/binary, 0:(((8- ((0+byte_size(Item_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontrolwithitems.html#wxcontrolwithitemsappend">external documentation</a>.
--spec appendStrings(This, Strings) -> ok when
+-spec appendStrings(This, Strings) -> 'ok' when
This::wxControlWithItems(), Strings::[unicode:chardata()].
appendStrings(#wx_ref{type=ThisT,ref=ThisRef},Strings)
when is_list(Strings) ->
@@ -115,7 +115,7 @@ appendStrings(#wx_ref{type=ThisT,ref=ThisRef},Strings)
<<ThisRef:32/?UI,(length(Strings_UCA)):32/?UI, (<< <<(byte_size(UC_Str)):32/?UI, UC_Str/binary>>|| UC_Str <- Strings_UCA>>)/binary, 0:(((8- ((0 + lists:sum([byte_size(S)+4||S<-Strings_UCA])) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontrolwithitems.html#wxcontrolwithitemsclear">external documentation</a>.
--spec clear(This) -> ok when
+-spec clear(This) -> 'ok' when
This::wxControlWithItems().
clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxControlWithItems),
@@ -123,7 +123,7 @@ clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontrolwithitems.html#wxcontrolwithitemsdelete">external documentation</a>.
--spec delete(This, N) -> ok when
+-spec delete(This, N) -> 'ok' when
This::wxControlWithItems(), N::integer().
delete(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -142,7 +142,7 @@ findString(This,S)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontrolwithitems.html#wxcontrolwithitemsfindstring">external documentation</a>.
-spec findString(This, S, [Option]) -> integer() when
This::wxControlWithItems(), S::unicode:chardata(),
- Option :: {bCase, boolean()}.
+ Option :: {'bCase', boolean()}.
findString(#wx_ref{type=ThisT,ref=ThisRef},S, Options)
when is_list(S),is_list(Options) ->
?CLASS(ThisT,wxControlWithItems),
@@ -163,7 +163,7 @@ getClientData(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontrolwithitems.html#wxcontrolwithitemssetclientobject">external documentation</a>.
--spec setClientData(This, N, ClientData) -> ok when
+-spec setClientData(This, N, ClientData) -> 'ok' when
This::wxControlWithItems(), N::integer(), ClientData::term().
setClientData(#wx_ref{type=ThisT,ref=ThisRef},N,ClientData)
when is_integer(N) ->
@@ -235,7 +235,7 @@ isEmpty(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontrolwithitems.html#wxcontrolwithitemsselect">external documentation</a>.
--spec select(This, N) -> ok when
+-spec select(This, N) -> 'ok' when
This::wxControlWithItems(), N::integer().
select(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -244,7 +244,7 @@ select(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontrolwithitems.html#wxcontrolwithitemssetselection">external documentation</a>.
--spec setSelection(This, N) -> ok when
+-spec setSelection(This, N) -> 'ok' when
This::wxControlWithItems(), N::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -253,7 +253,7 @@ setSelection(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcontrolwithitems.html#wxcontrolwithitemssetstring">external documentation</a>.
--spec setString(This, N, S) -> ok when
+-spec setString(This, N, S) -> 'ok' when
This::wxControlWithItems(), N::integer(), S::unicode:chardata().
setString(#wx_ref{type=ThisT,ref=ThisRef},N,S)
when is_integer(N),is_list(S) ->
diff --git a/lib/wx/src/gen/wxCursor.erl b/lib/wx/src/gen/wxCursor.erl
index 7f32b140e6..689935576a 100644
--- a/lib/wx/src/gen/wxCursor.erl
+++ b/lib/wx/src/gen/wxCursor.erl
@@ -78,8 +78,8 @@ new(Bits,Width,Height)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxcursor.html#wxcursorwxcursor">external documentation</a>.
-spec new(Bits, Width, Height, [Option]) -> wxCursor() when
Bits::binary(), Width::integer(), Height::integer(),
- Option :: {hotSpotX, integer()}
- | {hotSpotY, integer()}.
+ Option :: {'hotSpotX', integer()}
+ | {'hotSpotY', integer()}.
new(Bits,Width,Height, Options)
when is_binary(Bits),is_integer(Width),is_integer(Height),is_list(Options) ->
wxe_util:send_bin(Bits),
@@ -99,7 +99,7 @@ ok(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxCursor()) -> ok.
+-spec destroy(This::wxCursor()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxCursor),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxDC.erl b/lib/wx/src/gen/wxDC.erl
index 263ad76526..ad7a4251ec 100644
--- a/lib/wx/src/gen/wxDC.erl
+++ b/lib/wx/src/gen/wxDC.erl
@@ -69,9 +69,9 @@ blit(This,DestPt={DestPtX,DestPtY},Sz={SzW,SzH},Source,SrcPt={SrcPtX,SrcPtY})
%%<br /> Rop = integer
-spec blit(This, DestPt, Sz, Source, SrcPt, [Option]) -> boolean() when
This::wxDC(), DestPt::{X::integer(), Y::integer()}, Sz::{W::integer(), H::integer()}, Source::wxDC(), SrcPt::{X::integer(), Y::integer()},
- Option :: {rop, wx:wx_enum()}
- | {useMask, boolean()}
- | {srcPtMask, {X::integer(), Y::integer()}}.
+ Option :: {'rop', wx:wx_enum()}
+ | {'useMask', boolean()}
+ | {'srcPtMask', {X::integer(), Y::integer()}}.
blit(#wx_ref{type=ThisT,ref=ThisRef},{DestPtX,DestPtY},{SzW,SzH},#wx_ref{type=SourceT,ref=SourceRef},{SrcPtX,SrcPtY}, Options)
when is_integer(DestPtX),is_integer(DestPtY),is_integer(SzW),is_integer(SzH),is_integer(SrcPtX),is_integer(SrcPtY),is_list(Options) ->
?CLASS(ThisT,wxDC),
@@ -85,7 +85,7 @@ blit(#wx_ref{type=ThisT,ref=ThisRef},{DestPtX,DestPtY},{SzW,SzH},#wx_ref{type=So
<<ThisRef:32/?UI,DestPtX:32/?UI,DestPtY:32/?UI,SzW:32/?UI,SzH:32/?UI,SourceRef:32/?UI,SrcPtX:32/?UI,SrcPtY:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdccalcboundingbox">external documentation</a>.
--spec calcBoundingBox(This, X, Y) -> ok when
+-spec calcBoundingBox(This, X, Y) -> 'ok' when
This::wxDC(), X::integer(), Y::integer().
calcBoundingBox(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -94,7 +94,7 @@ calcBoundingBox(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcclear">external documentation</a>.
--spec clear(This) -> ok when
+-spec clear(This) -> 'ok' when
This::wxDC().
clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxDC),
@@ -102,7 +102,7 @@ clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdccomputescaleandorigin">external documentation</a>.
--spec computeScaleAndOrigin(This) -> ok when
+-spec computeScaleAndOrigin(This) -> 'ok' when
This::wxDC().
computeScaleAndOrigin(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxDC),
@@ -110,7 +110,7 @@ computeScaleAndOrigin(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdccrosshair">external documentation</a>.
--spec crossHair(This, Pt) -> ok when
+-spec crossHair(This, Pt) -> 'ok' when
This::wxDC(), Pt::{X::integer(), Y::integer()}.
crossHair(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
when is_integer(PtX),is_integer(PtY) ->
@@ -119,7 +119,7 @@ crossHair(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdestroyclippingregion">external documentation</a>.
--spec destroyClippingRegion(This) -> ok when
+-spec destroyClippingRegion(This) -> 'ok' when
This::wxDC().
destroyClippingRegion(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxDC),
@@ -163,7 +163,7 @@ deviceToLogicalYRel(#wx_ref{type=ThisT,ref=ThisRef},Y)
<<ThisRef:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawarc">external documentation</a>.
--spec drawArc(This, Pt1, Pt2, Centre) -> ok when
+-spec drawArc(This, Pt1, Pt2, Centre) -> 'ok' when
This::wxDC(), Pt1::{X::integer(), Y::integer()}, Pt2::{X::integer(), Y::integer()}, Centre::{X::integer(), Y::integer()}.
drawArc(#wx_ref{type=ThisT,ref=ThisRef},{Pt1X,Pt1Y},{Pt2X,Pt2Y},{CentreX,CentreY})
when is_integer(Pt1X),is_integer(Pt1Y),is_integer(Pt2X),is_integer(Pt2Y),is_integer(CentreX),is_integer(CentreY) ->
@@ -172,7 +172,7 @@ drawArc(#wx_ref{type=ThisT,ref=ThisRef},{Pt1X,Pt1Y},{Pt2X,Pt2Y},{CentreX,CentreY
<<ThisRef:32/?UI,Pt1X:32/?UI,Pt1Y:32/?UI,Pt2X:32/?UI,Pt2Y:32/?UI,CentreX:32/?UI,CentreY:32/?UI>>).
%% @equiv drawBitmap(This,Bmp,Pt, [])
--spec drawBitmap(This, Bmp, Pt) -> ok when
+-spec drawBitmap(This, Bmp, Pt) -> 'ok' when
This::wxDC(), Bmp::wxBitmap:wxBitmap(), Pt::{X::integer(), Y::integer()}.
drawBitmap(This,Bmp,Pt={PtX,PtY})
@@ -180,9 +180,9 @@ drawBitmap(This,Bmp,Pt={PtX,PtY})
drawBitmap(This,Bmp,Pt, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawbitmap">external documentation</a>.
--spec drawBitmap(This, Bmp, Pt, [Option]) -> ok when
+-spec drawBitmap(This, Bmp, Pt, [Option]) -> 'ok' when
This::wxDC(), Bmp::wxBitmap:wxBitmap(), Pt::{X::integer(), Y::integer()},
- Option :: {useMask, boolean()}.
+ Option :: {'useMask', boolean()}.
drawBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef},{PtX,PtY}, Options)
when is_integer(PtX),is_integer(PtY),is_list(Options) ->
?CLASS(ThisT,wxDC),
@@ -194,7 +194,7 @@ drawBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef},{PtX,Pt
<<ThisRef:32/?UI,BmpRef:32/?UI,PtX:32/?UI,PtY:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawcheckmark">external documentation</a>.
--spec drawCheckMark(This, Rect) -> ok when
+-spec drawCheckMark(This, Rect) -> 'ok' when
This::wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.
drawCheckMark(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH) ->
@@ -203,7 +203,7 @@ drawCheckMark(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawcircle">external documentation</a>.
--spec drawCircle(This, Pt, Radius) -> ok when
+-spec drawCircle(This, Pt, Radius) -> 'ok' when
This::wxDC(), Pt::{X::integer(), Y::integer()}, Radius::integer().
drawCircle(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},Radius)
when is_integer(PtX),is_integer(PtY),is_integer(Radius) ->
@@ -212,7 +212,7 @@ drawCircle(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},Radius)
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI,Radius:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawellipse">external documentation</a>.
--spec drawEllipse(This, Rect) -> ok when
+-spec drawEllipse(This, Rect) -> 'ok' when
This::wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.
drawEllipse(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH) ->
@@ -221,7 +221,7 @@ drawEllipse(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawellipse">external documentation</a>.
--spec drawEllipse(This, Pt, Sz) -> ok when
+-spec drawEllipse(This, Pt, Sz) -> 'ok' when
This::wxDC(), Pt::{X::integer(), Y::integer()}, Sz::{W::integer(), H::integer()}.
drawEllipse(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH})
when is_integer(PtX),is_integer(PtY),is_integer(SzW),is_integer(SzH) ->
@@ -230,7 +230,7 @@ drawEllipse(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH})
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI,SzW:32/?UI,SzH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawellipticarc">external documentation</a>.
--spec drawEllipticArc(This, Pt, Sz, Sa, Ea) -> ok when
+-spec drawEllipticArc(This, Pt, Sz, Sa, Ea) -> 'ok' when
This::wxDC(), Pt::{X::integer(), Y::integer()}, Sz::{W::integer(), H::integer()}, Sa::number(), Ea::number().
drawEllipticArc(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH},Sa,Ea)
when is_integer(PtX),is_integer(PtY),is_integer(SzW),is_integer(SzH),is_number(Sa),is_number(Ea) ->
@@ -239,7 +239,7 @@ drawEllipticArc(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH},Sa,Ea)
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI,SzW:32/?UI,SzH:32/?UI,0:32,Sa:64/?F,Ea:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawicon">external documentation</a>.
--spec drawIcon(This, Icon, Pt) -> ok when
+-spec drawIcon(This, Icon, Pt) -> 'ok' when
This::wxDC(), Icon::wxIcon:wxIcon(), Pt::{X::integer(), Y::integer()}.
drawIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef},{PtX,PtY})
when is_integer(PtX),is_integer(PtY) ->
@@ -249,7 +249,7 @@ drawIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef},{PtX,Pt
<<ThisRef:32/?UI,IconRef:32/?UI,PtX:32/?UI,PtY:32/?UI>>).
%% @equiv drawLabel(This,Text,Rect, [])
--spec drawLabel(This, Text, Rect) -> ok when
+-spec drawLabel(This, Text, Rect) -> 'ok' when
This::wxDC(), Text::unicode:chardata(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.
drawLabel(This,Text,Rect={RectX,RectY,RectW,RectH})
@@ -257,10 +257,10 @@ drawLabel(This,Text,Rect={RectX,RectY,RectW,RectH})
drawLabel(This,Text,Rect, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawlabel">external documentation</a>.
--spec drawLabel(This, Text, Rect, [Option]) -> ok when
+-spec drawLabel(This, Text, Rect, [Option]) -> 'ok' when
This::wxDC(), Text::unicode:chardata(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()},
- Option :: {alignment, integer()}
- | {indexAccel, integer()}.
+ Option :: {'alignment', integer()}
+ | {'indexAccel', integer()}.
drawLabel(#wx_ref{type=ThisT,ref=ThisRef},Text,{RectX,RectY,RectW,RectH}, Options)
when is_list(Text),is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH),is_list(Options) ->
?CLASS(ThisT,wxDC),
@@ -273,7 +273,7 @@ drawLabel(#wx_ref{type=ThisT,ref=ThisRef},Text,{RectX,RectY,RectW,RectH}, Option
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawline">external documentation</a>.
--spec drawLine(This, Pt1, Pt2) -> ok when
+-spec drawLine(This, Pt1, Pt2) -> 'ok' when
This::wxDC(), Pt1::{X::integer(), Y::integer()}, Pt2::{X::integer(), Y::integer()}.
drawLine(#wx_ref{type=ThisT,ref=ThisRef},{Pt1X,Pt1Y},{Pt2X,Pt2Y})
when is_integer(Pt1X),is_integer(Pt1Y),is_integer(Pt2X),is_integer(Pt2Y) ->
@@ -282,7 +282,7 @@ drawLine(#wx_ref{type=ThisT,ref=ThisRef},{Pt1X,Pt1Y},{Pt2X,Pt2Y})
<<ThisRef:32/?UI,Pt1X:32/?UI,Pt1Y:32/?UI,Pt2X:32/?UI,Pt2Y:32/?UI>>).
%% @equiv drawLines(This,Points, [])
--spec drawLines(This, Points) -> ok when
+-spec drawLines(This, Points) -> 'ok' when
This::wxDC(), Points::[{X::integer(), Y::integer()}].
drawLines(This,Points)
@@ -290,10 +290,10 @@ drawLines(This,Points)
drawLines(This,Points, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawlines">external documentation</a>.
--spec drawLines(This, Points, [Option]) -> ok when
+-spec drawLines(This, Points, [Option]) -> 'ok' when
This::wxDC(), Points::[{X::integer(), Y::integer()}],
- Option :: {xoffset, integer()}
- | {yoffset, integer()}.
+ Option :: {'xoffset', integer()}
+ | {'yoffset', integer()}.
drawLines(#wx_ref{type=ThisT,ref=ThisRef},Points, Options)
when is_list(Points),is_list(Options) ->
?CLASS(ThisT,wxDC),
@@ -306,7 +306,7 @@ drawLines(#wx_ref{type=ThisT,ref=ThisRef},Points, Options)
(<< <<X:32/?I,Y:32/?I>> || {X,Y} <- Points>>)/binary, BinOpt/binary>>).
%% @equiv drawPolygon(This,Points, [])
--spec drawPolygon(This, Points) -> ok when
+-spec drawPolygon(This, Points) -> 'ok' when
This::wxDC(), Points::[{X::integer(), Y::integer()}].
drawPolygon(This,Points)
@@ -315,11 +315,11 @@ drawPolygon(This,Points)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawpolygon">external documentation</a>.
%%<br /> FillStyle = integer
--spec drawPolygon(This, Points, [Option]) -> ok when
+-spec drawPolygon(This, Points, [Option]) -> 'ok' when
This::wxDC(), Points::[{X::integer(), Y::integer()}],
- Option :: {xoffset, integer()}
- | {yoffset, integer()}
- | {fillStyle, wx:wx_enum()}.
+ Option :: {'xoffset', integer()}
+ | {'yoffset', integer()}
+ | {'fillStyle', wx:wx_enum()}.
drawPolygon(#wx_ref{type=ThisT,ref=ThisRef},Points, Options)
when is_list(Points),is_list(Options) ->
?CLASS(ThisT,wxDC),
@@ -333,7 +333,7 @@ drawPolygon(#wx_ref{type=ThisT,ref=ThisRef},Points, Options)
(<< <<X:32/?I,Y:32/?I>> || {X,Y} <- Points>>)/binary, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawpoint">external documentation</a>.
--spec drawPoint(This, Pt) -> ok when
+-spec drawPoint(This, Pt) -> 'ok' when
This::wxDC(), Pt::{X::integer(), Y::integer()}.
drawPoint(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
when is_integer(PtX),is_integer(PtY) ->
@@ -342,7 +342,7 @@ drawPoint(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawrectangle">external documentation</a>.
--spec drawRectangle(This, Rect) -> ok when
+-spec drawRectangle(This, Rect) -> 'ok' when
This::wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.
drawRectangle(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH) ->
@@ -351,7 +351,7 @@ drawRectangle(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawrectangle">external documentation</a>.
--spec drawRectangle(This, Pt, Sz) -> ok when
+-spec drawRectangle(This, Pt, Sz) -> 'ok' when
This::wxDC(), Pt::{X::integer(), Y::integer()}, Sz::{W::integer(), H::integer()}.
drawRectangle(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH})
when is_integer(PtX),is_integer(PtY),is_integer(SzW),is_integer(SzH) ->
@@ -360,7 +360,7 @@ drawRectangle(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH})
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI,SzW:32/?UI,SzH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawrotatedtext">external documentation</a>.
--spec drawRotatedText(This, Text, Pt, Angle) -> ok when
+-spec drawRotatedText(This, Text, Pt, Angle) -> 'ok' when
This::wxDC(), Text::unicode:chardata(), Pt::{X::integer(), Y::integer()}, Angle::number().
drawRotatedText(#wx_ref{type=ThisT,ref=ThisRef},Text,{PtX,PtY},Angle)
when is_list(Text),is_integer(PtX),is_integer(PtY),is_number(Angle) ->
@@ -370,7 +370,7 @@ drawRotatedText(#wx_ref{type=ThisT,ref=ThisRef},Text,{PtX,PtY},Angle)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8,PtX:32/?UI,PtY:32/?UI,Angle:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawroundedrectangle">external documentation</a>.
--spec drawRoundedRectangle(This, R, Radius) -> ok when
+-spec drawRoundedRectangle(This, R, Radius) -> 'ok' when
This::wxDC(), R::{X::integer(), Y::integer(), W::integer(), H::integer()}, Radius::number().
drawRoundedRectangle(#wx_ref{type=ThisT,ref=ThisRef},{RX,RY,RW,RH},Radius)
when is_integer(RX),is_integer(RY),is_integer(RW),is_integer(RH),is_number(Radius) ->
@@ -379,7 +379,7 @@ drawRoundedRectangle(#wx_ref{type=ThisT,ref=ThisRef},{RX,RY,RW,RH},Radius)
<<ThisRef:32/?UI,RX:32/?UI,RY:32/?UI,RW:32/?UI,RH:32/?UI,0:32,Radius:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawroundedrectangle">external documentation</a>.
--spec drawRoundedRectangle(This, Pt, Sz, Radius) -> ok when
+-spec drawRoundedRectangle(This, Pt, Sz, Radius) -> 'ok' when
This::wxDC(), Pt::{X::integer(), Y::integer()}, Sz::{W::integer(), H::integer()}, Radius::number().
drawRoundedRectangle(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH},Radius)
when is_integer(PtX),is_integer(PtY),is_integer(SzW),is_integer(SzH),is_number(Radius) ->
@@ -388,7 +388,7 @@ drawRoundedRectangle(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH},Radius)
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI,SzW:32/?UI,SzH:32/?UI,0:32,Radius:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcdrawtext">external documentation</a>.
--spec drawText(This, Text, Pt) -> ok when
+-spec drawText(This, Text, Pt) -> 'ok' when
This::wxDC(), Text::unicode:chardata(), Pt::{X::integer(), Y::integer()}.
drawText(#wx_ref{type=ThisT,ref=ThisRef},Text,{PtX,PtY})
when is_list(Text),is_integer(PtX),is_integer(PtY) ->
@@ -398,7 +398,7 @@ drawText(#wx_ref{type=ThisT,ref=ThisRef},Text,{PtX,PtY})
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8,PtX:32/?UI,PtY:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcenddoc">external documentation</a>.
--spec endDoc(This) -> ok when
+-spec endDoc(This) -> 'ok' when
This::wxDC().
endDoc(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxDC),
@@ -406,7 +406,7 @@ endDoc(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcendpage">external documentation</a>.
--spec endPage(This) -> ok when
+-spec endPage(This) -> 'ok' when
This::wxDC().
endPage(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxDC),
@@ -425,7 +425,7 @@ floodFill(This,Pt={PtX,PtY},Col)
%%<br /> Style = integer
-spec floodFill(This, Pt, Col, [Option]) -> boolean() when
This::wxDC(), Pt::{X::integer(), Y::integer()}, Col::wx:wx_colour(),
- Option :: {style, wx:wx_enum()}.
+ Option :: {'style', wx:wx_enum()}.
floodFill(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},Col, Options)
when is_integer(PtX),is_integer(PtY),tuple_size(Col) =:= 3; tuple_size(Col) =:= 4,is_list(Options) ->
?CLASS(ThisT,wxDC),
@@ -530,7 +530,7 @@ getMultiLineTextExtent(#wx_ref{type=ThisT,ref=ThisRef},String)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcgetmultilinetextextent">external documentation</a>.
-spec getMultiLineTextExtent(This, String, [Option]) -> {Width::integer(), Height::integer(), HeightLine::integer()} when
This::wxDC(), String::unicode:chardata(),
- Option :: {font, wxFont:wxFont()}.
+ Option :: {'font', wxFont:wxFont()}.
getMultiLineTextExtent(#wx_ref{type=ThisT,ref=ThisRef},String, Options)
when is_list(String),is_list(Options) ->
?CLASS(ThisT,wxDC),
@@ -616,7 +616,7 @@ getTextExtent(#wx_ref{type=ThisT,ref=ThisRef},String)
-spec getTextExtent(This, String, [Option]) -> Result when
Result :: {X::integer(), Y::integer(), Descent::integer(), ExternalLeading::integer()},
This::wxDC(), String::unicode:chardata(),
- Option :: {theFont, wxFont:wxFont()}.
+ Option :: {'theFont', wxFont:wxFont()}.
getTextExtent(#wx_ref{type=ThisT,ref=ThisRef},String, Options)
when is_list(String),is_list(Options) ->
?CLASS(ThisT,wxDC),
@@ -644,7 +644,7 @@ getUserScale(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcgradientfillconcentric">external documentation</a>.
--spec gradientFillConcentric(This, Rect, InitialColour, DestColour) -> ok when
+-spec gradientFillConcentric(This, Rect, InitialColour, DestColour) -> 'ok' when
This::wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}, InitialColour::wx:wx_colour(), DestColour::wx:wx_colour().
gradientFillConcentric(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH},InitialColour,DestColour)
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH),tuple_size(InitialColour) =:= 3; tuple_size(InitialColour) =:= 4,tuple_size(DestColour) =:= 3; tuple_size(DestColour) =:= 4 ->
@@ -653,7 +653,7 @@ gradientFillConcentric(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH}
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI,(wxe_util:colour_bin(InitialColour)):16/binary,(wxe_util:colour_bin(DestColour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcgradientfillconcentric">external documentation</a>.
--spec gradientFillConcentric(This, Rect, InitialColour, DestColour, CircleCenter) -> ok when
+-spec gradientFillConcentric(This, Rect, InitialColour, DestColour, CircleCenter) -> 'ok' when
This::wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}, InitialColour::wx:wx_colour(), DestColour::wx:wx_colour(), CircleCenter::{X::integer(), Y::integer()}.
gradientFillConcentric(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH},InitialColour,DestColour,{CircleCenterX,CircleCenterY})
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH),tuple_size(InitialColour) =:= 3; tuple_size(InitialColour) =:= 4,tuple_size(DestColour) =:= 3; tuple_size(DestColour) =:= 4,is_integer(CircleCenterX),is_integer(CircleCenterY) ->
@@ -662,7 +662,7 @@ gradientFillConcentric(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH}
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI,(wxe_util:colour_bin(InitialColour)):16/binary,(wxe_util:colour_bin(DestColour)):16/binary,CircleCenterX:32/?UI,CircleCenterY:32/?UI>>).
%% @equiv gradientFillLinear(This,Rect,InitialColour,DestColour, [])
--spec gradientFillLinear(This, Rect, InitialColour, DestColour) -> ok when
+-spec gradientFillLinear(This, Rect, InitialColour, DestColour) -> 'ok' when
This::wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}, InitialColour::wx:wx_colour(), DestColour::wx:wx_colour().
gradientFillLinear(This,Rect={RectX,RectY,RectW,RectH},InitialColour,DestColour)
@@ -671,9 +671,9 @@ gradientFillLinear(This,Rect={RectX,RectY,RectW,RectH},InitialColour,DestColour)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcgradientfilllinear">external documentation</a>.
%%<br /> NDirection = ?wxLEFT | ?wxRIGHT | ?wxUP | ?wxDOWN | ?wxTOP | ?wxBOTTOM | ?wxNORTH | ?wxSOUTH | ?wxWEST | ?wxEAST | ?wxALL
--spec gradientFillLinear(This, Rect, InitialColour, DestColour, [Option]) -> ok when
+-spec gradientFillLinear(This, Rect, InitialColour, DestColour, [Option]) -> 'ok' when
This::wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}, InitialColour::wx:wx_colour(), DestColour::wx:wx_colour(),
- Option :: {nDirection, wx:wx_enum()}.
+ Option :: {'nDirection', wx:wx_enum()}.
gradientFillLinear(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH},InitialColour,DestColour, Options)
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH),tuple_size(InitialColour) =:= 3; tuple_size(InitialColour) =:= 4,tuple_size(DestColour) =:= 3; tuple_size(DestColour) =:= 4,is_list(Options) ->
?CLASS(ThisT,wxDC),
@@ -760,7 +760,7 @@ isOk(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcresetboundingbox">external documentation</a>.
--spec resetBoundingBox(This) -> ok when
+-spec resetBoundingBox(This) -> 'ok' when
This::wxDC().
resetBoundingBox(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxDC),
@@ -768,7 +768,7 @@ resetBoundingBox(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetaxisorientation">external documentation</a>.
--spec setAxisOrientation(This, XLeftRight, YBottomUp) -> ok when
+-spec setAxisOrientation(This, XLeftRight, YBottomUp) -> 'ok' when
This::wxDC(), XLeftRight::boolean(), YBottomUp::boolean().
setAxisOrientation(#wx_ref{type=ThisT,ref=ThisRef},XLeftRight,YBottomUp)
when is_boolean(XLeftRight),is_boolean(YBottomUp) ->
@@ -777,7 +777,7 @@ setAxisOrientation(#wx_ref{type=ThisT,ref=ThisRef},XLeftRight,YBottomUp)
<<ThisRef:32/?UI,(wxe_util:from_bool(XLeftRight)):32/?UI,(wxe_util:from_bool(YBottomUp)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetbackground">external documentation</a>.
--spec setBackground(This, Brush) -> ok when
+-spec setBackground(This, Brush) -> 'ok' when
This::wxDC(), Brush::wxBrush:wxBrush().
setBackground(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BrushT,ref=BrushRef}) ->
?CLASS(ThisT,wxDC),
@@ -786,7 +786,7 @@ setBackground(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BrushT,ref=BrushRef})
<<ThisRef:32/?UI,BrushRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetbackgroundmode">external documentation</a>.
--spec setBackgroundMode(This, Mode) -> ok when
+-spec setBackgroundMode(This, Mode) -> 'ok' when
This::wxDC(), Mode::integer().
setBackgroundMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
when is_integer(Mode) ->
@@ -795,7 +795,7 @@ setBackgroundMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
<<ThisRef:32/?UI,Mode:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetbrush">external documentation</a>.
--spec setBrush(This, Brush) -> ok when
+-spec setBrush(This, Brush) -> 'ok' when
This::wxDC(), Brush::wxBrush:wxBrush().
setBrush(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BrushT,ref=BrushRef}) ->
?CLASS(ThisT,wxDC),
@@ -805,12 +805,12 @@ setBrush(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BrushT,ref=BrushRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetclippingregion">external documentation</a>.
%% <br /> Also:<br />
-%% setClippingRegion(This, Rect) -> ok when<br />
+%% setClippingRegion(This, Rect) -> 'ok' when<br />
%% This::wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.<br />
%%
--spec setClippingRegion(This, Region) -> ok when
+-spec setClippingRegion(This, Region) -> 'ok' when
This::wxDC(), Region::wxRegion:wxRegion();
- (This, Rect) -> ok when
+ (This, Rect) -> 'ok' when
This::wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.
setClippingRegion(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=RegionT,ref=RegionRef}) ->
?CLASS(ThisT,wxDC),
@@ -824,7 +824,7 @@ setClippingRegion(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetclippingregion">external documentation</a>.
--spec setClippingRegion(This, Pt, Sz) -> ok when
+-spec setClippingRegion(This, Pt, Sz) -> 'ok' when
This::wxDC(), Pt::{X::integer(), Y::integer()}, Sz::{W::integer(), H::integer()}.
setClippingRegion(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH})
when is_integer(PtX),is_integer(PtY),is_integer(SzW),is_integer(SzH) ->
@@ -833,7 +833,7 @@ setClippingRegion(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY},{SzW,SzH})
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI,SzW:32/?UI,SzH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetdeviceorigin">external documentation</a>.
--spec setDeviceOrigin(This, X, Y) -> ok when
+-spec setDeviceOrigin(This, X, Y) -> 'ok' when
This::wxDC(), X::integer(), Y::integer().
setDeviceOrigin(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -842,7 +842,7 @@ setDeviceOrigin(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetfont">external documentation</a>.
--spec setFont(This, Font) -> ok when
+-spec setFont(This, Font) -> 'ok' when
This::wxDC(), Font::wxFont:wxFont().
setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxDC),
@@ -852,7 +852,7 @@ setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetlayoutdirection">external documentation</a>.
%%<br /> Dir = ?wxLayout_Default | ?wxLayout_LeftToRight | ?wxLayout_RightToLeft
--spec setLayoutDirection(This, Dir) -> ok when
+-spec setLayoutDirection(This, Dir) -> 'ok' when
This::wxDC(), Dir::wx:wx_enum().
setLayoutDirection(#wx_ref{type=ThisT,ref=ThisRef},Dir)
when is_integer(Dir) ->
@@ -862,7 +862,7 @@ setLayoutDirection(#wx_ref{type=ThisT,ref=ThisRef},Dir)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetlogicalfunction">external documentation</a>.
%%<br /> Function = integer
--spec setLogicalFunction(This, Function) -> ok when
+-spec setLogicalFunction(This, Function) -> 'ok' when
This::wxDC(), Function::wx:wx_enum().
setLogicalFunction(#wx_ref{type=ThisT,ref=ThisRef},Function)
when is_integer(Function) ->
@@ -872,7 +872,7 @@ setLogicalFunction(#wx_ref{type=ThisT,ref=ThisRef},Function)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetmapmode">external documentation</a>.
%%<br /> Mode = integer
--spec setMapMode(This, Mode) -> ok when
+-spec setMapMode(This, Mode) -> 'ok' when
This::wxDC(), Mode::wx:wx_enum().
setMapMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
when is_integer(Mode) ->
@@ -881,7 +881,7 @@ setMapMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
<<ThisRef:32/?UI,Mode:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetpalette">external documentation</a>.
--spec setPalette(This, Palette) -> ok when
+-spec setPalette(This, Palette) -> 'ok' when
This::wxDC(), Palette::wxPalette:wxPalette().
setPalette(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PaletteT,ref=PaletteRef}) ->
?CLASS(ThisT,wxDC),
@@ -890,7 +890,7 @@ setPalette(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PaletteT,ref=PaletteRef}
<<ThisRef:32/?UI,PaletteRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetpen">external documentation</a>.
--spec setPen(This, Pen) -> ok when
+-spec setPen(This, Pen) -> 'ok' when
This::wxDC(), Pen::wxPen:wxPen().
setPen(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PenT,ref=PenRef}) ->
?CLASS(ThisT,wxDC),
@@ -899,7 +899,7 @@ setPen(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PenT,ref=PenRef}) ->
<<ThisRef:32/?UI,PenRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsettextbackground">external documentation</a>.
--spec setTextBackground(This, Colour) -> ok when
+-spec setTextBackground(This, Colour) -> 'ok' when
This::wxDC(), Colour::wx:wx_colour().
setTextBackground(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -908,7 +908,7 @@ setTextBackground(#wx_ref{type=ThisT,ref=ThisRef},Colour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsettextforeground">external documentation</a>.
--spec setTextForeground(This, Colour) -> ok when
+-spec setTextForeground(This, Colour) -> 'ok' when
This::wxDC(), Colour::wx:wx_colour().
setTextForeground(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -917,7 +917,7 @@ setTextForeground(#wx_ref{type=ThisT,ref=ThisRef},Colour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcsetuserscale">external documentation</a>.
--spec setUserScale(This, X, Y) -> ok when
+-spec setUserScale(This, X, Y) -> 'ok' when
This::wxDC(), X::number(), Y::number().
setUserScale(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_number(X),is_number(Y) ->
@@ -936,7 +936,7 @@ startDoc(#wx_ref{type=ThisT,ref=ThisRef},Message)
<<ThisRef:32/?UI,(byte_size(Message_UC)):32/?UI,(Message_UC)/binary, 0:(((8- ((0+byte_size(Message_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdc.html#wxdcstartpage">external documentation</a>.
--spec startPage(This) -> ok when
+-spec startPage(This) -> 'ok' when
This::wxDC().
startPage(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxDC),
diff --git a/lib/wx/src/gen/wxDCOverlay.erl b/lib/wx/src/gen/wxDCOverlay.erl
index f98e310ba6..6eb0be1d64 100644
--- a/lib/wx/src/gen/wxDCOverlay.erl
+++ b/lib/wx/src/gen/wxDCOverlay.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -55,7 +55,7 @@ new(#wx_ref{type=OverlayT,ref=OverlayRef},#wx_ref{type=DcT,ref=DcRef},X,Y,Width,
<<OverlayRef:32/?UI,DcRef:32/?UI,X:32/?UI,Y:32/?UI,Width:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdcoverlay.html#wxdcoverlayclear">external documentation</a>.
--spec clear(This) -> ok when
+-spec clear(This) -> 'ok' when
This::wxDCOverlay().
clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxDCOverlay),
@@ -63,7 +63,7 @@ clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxDCOverlay()) -> ok.
+-spec destroy(This::wxDCOverlay()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxDCOverlay),
wxe_util:destroy(?wxDCOverlay_destruct,Obj),
diff --git a/lib/wx/src/gen/wxDatePickerCtrl.erl b/lib/wx/src/gen/wxDatePickerCtrl.erl
index 057f91d4e8..1b306a498a 100644
--- a/lib/wx/src/gen/wxDatePickerCtrl.erl
+++ b/lib/wx/src/gen/wxDatePickerCtrl.erl
@@ -102,11 +102,11 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdatepickerctrl.html#wxdatepickerctrlwxdatepickerctrl">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxDatePickerCtrl() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {date, wx:wx_datetime()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'date', wx:wx_datetime()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -138,7 +138,7 @@ getValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdatepickerctrl.html#wxdatepickerctrlsetrange">external documentation</a>.
--spec setRange(This, Dt1, Dt2) -> ok when
+-spec setRange(This, Dt1, Dt2) -> 'ok' when
This::wxDatePickerCtrl(), Dt1::wx:wx_datetime(), Dt2::wx:wx_datetime().
setRange(#wx_ref{type=ThisT,ref=ThisRef},Dt1,Dt2)
when tuple_size(Dt1) =:= 2,tuple_size(Dt2) =:= 2 ->
@@ -147,7 +147,7 @@ setRange(#wx_ref{type=ThisT,ref=ThisRef},Dt1,Dt2)
<<ThisRef:32/?UI,(wxe_util:datetime_bin(Dt1)):24/binary,(wxe_util:datetime_bin(Dt2)):24/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdatepickerctrl.html#wxdatepickerctrlsetvalue">external documentation</a>.
--spec setValue(This, Date) -> ok when
+-spec setValue(This, Date) -> 'ok' when
This::wxDatePickerCtrl(), Date::wx:wx_datetime().
setValue(#wx_ref{type=ThisT,ref=ThisRef},Date)
when tuple_size(Date) =:= 2 ->
@@ -156,7 +156,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},Date)
<<ThisRef:32/?UI,(wxe_util:datetime_bin(Date)):24/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxDatePickerCtrl()) -> ok.
+-spec destroy(This::wxDatePickerCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxDatePickerCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxDialog.erl b/lib/wx/src/gen/wxDialog.erl
index c3f4828c68..9f98644828 100644
--- a/lib/wx/src/gen/wxDialog.erl
+++ b/lib/wx/src/gen/wxDialog.erl
@@ -103,9 +103,9 @@ new(Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdialog.html#wxdialogwxdialog">external documentation</a>.
-spec new(Parent, Id, Title, [Option]) -> wxDialog() when
Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -129,9 +129,9 @@ create(This,Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdialog.html#wxdialogcreate">external documentation</a>.
-spec create(This, Parent, Id, Title, [Option]) -> boolean() when
This::wxDialog(), Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ThisT,wxDialog),
@@ -164,7 +164,7 @@ createStdDialogButtonSizer(#wx_ref{type=ThisT,ref=ThisRef},Flags)
<<ThisRef:32/?UI,Flags:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdialog.html#wxdialogendmodal">external documentation</a>.
--spec endModal(This, RetCode) -> ok when
+-spec endModal(This, RetCode) -> 'ok' when
This::wxDialog(), RetCode::integer().
endModal(#wx_ref{type=ThisT,ref=ThisRef},RetCode)
when is_integer(RetCode) ->
@@ -197,7 +197,7 @@ isModal(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdialog.html#wxdialogsetaffirmativeid">external documentation</a>.
--spec setAffirmativeId(This, AffirmativeId) -> ok when
+-spec setAffirmativeId(This, AffirmativeId) -> 'ok' when
This::wxDialog(), AffirmativeId::integer().
setAffirmativeId(#wx_ref{type=ThisT,ref=ThisRef},AffirmativeId)
when is_integer(AffirmativeId) ->
@@ -206,7 +206,7 @@ setAffirmativeId(#wx_ref{type=ThisT,ref=ThisRef},AffirmativeId)
<<ThisRef:32/?UI,AffirmativeId:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdialog.html#wxdialogsetreturncode">external documentation</a>.
--spec setReturnCode(This, ReturnCode) -> ok when
+-spec setReturnCode(This, ReturnCode) -> 'ok' when
This::wxDialog(), ReturnCode::integer().
setReturnCode(#wx_ref{type=ThisT,ref=ThisRef},ReturnCode)
when is_integer(ReturnCode) ->
@@ -225,7 +225,7 @@ show(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdialog.html#wxdialogshow">external documentation</a>.
-spec show(This, [Option]) -> boolean() when
This::wxDialog(),
- Option :: {show, boolean()}.
+ Option :: {'show', boolean()}.
show(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxDialog),
@@ -244,7 +244,7 @@ showModal(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxDialog()) -> ok.
+-spec destroy(This::wxDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxDirDialog.erl b/lib/wx/src/gen/wxDirDialog.erl
index aa7a419bcd..1b6b9dba71 100644
--- a/lib/wx/src/gen/wxDirDialog.erl
+++ b/lib/wx/src/gen/wxDirDialog.erl
@@ -99,11 +99,11 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdirdialog.html#wxdirdialogwxdirdialog">external documentation</a>.
-spec new(Parent, [Option]) -> wxDirDialog() when
Parent::wxWindow:wxWindow(),
- Option :: {title, unicode:chardata()}
- | {defaultPath, unicode:chardata()}
- | {style, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {sz, {W::integer(), H::integer()}}.
+ Option :: {'title', unicode:chardata()}
+ | {'defaultPath', unicode:chardata()}
+ | {'style', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'sz', {W::integer(), H::integer()}}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -134,7 +134,7 @@ getMessage(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdirdialog.html#wxdirdialogsetmessage">external documentation</a>.
--spec setMessage(This, Message) -> ok when
+-spec setMessage(This, Message) -> 'ok' when
This::wxDirDialog(), Message::unicode:chardata().
setMessage(#wx_ref{type=ThisT,ref=ThisRef},Message)
when is_list(Message) ->
@@ -144,7 +144,7 @@ setMessage(#wx_ref{type=ThisT,ref=ThisRef},Message)
<<ThisRef:32/?UI,(byte_size(Message_UC)):32/?UI,(Message_UC)/binary, 0:(((8- ((0+byte_size(Message_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdirdialog.html#wxdirdialogsetpath">external documentation</a>.
--spec setPath(This, Path) -> ok when
+-spec setPath(This, Path) -> 'ok' when
This::wxDirDialog(), Path::unicode:chardata().
setPath(#wx_ref{type=ThisT,ref=ThisRef},Path)
when is_list(Path) ->
@@ -154,7 +154,7 @@ setPath(#wx_ref{type=ThisT,ref=ThisRef},Path)
<<ThisRef:32/?UI,(byte_size(Path_UC)):32/?UI,(Path_UC)/binary, 0:(((8- ((0+byte_size(Path_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxDirDialog()) -> ok.
+-spec destroy(This::wxDirDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxDirDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxDirPickerCtrl.erl b/lib/wx/src/gen/wxDirPickerCtrl.erl
index fea7ee71a1..3bedeb7f54 100644
--- a/lib/wx/src/gen/wxDirPickerCtrl.erl
+++ b/lib/wx/src/gen/wxDirPickerCtrl.erl
@@ -102,12 +102,12 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdirpickerctrl.html#wxdirpickerctrlwxdirpickerctrl">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxDirPickerCtrl() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {path, unicode:chardata()}
- | {message, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'path', unicode:chardata()}
+ | {'message', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -133,12 +133,12 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdirpickerctrl.html#wxdirpickerctrlcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxDirPickerCtrl(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {path, unicode:chardata()}
- | {message, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'path', unicode:chardata()}
+ | {'message', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxDirPickerCtrl),
@@ -163,7 +163,7 @@ getPath(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxdirpickerctrl.html#wxdirpickerctrlsetpath">external documentation</a>.
--spec setPath(This, Str) -> ok when
+-spec setPath(This, Str) -> 'ok' when
This::wxDirPickerCtrl(), Str::unicode:chardata().
setPath(#wx_ref{type=ThisT,ref=ThisRef},Str)
when is_list(Str) ->
@@ -173,7 +173,7 @@ setPath(#wx_ref{type=ThisT,ref=ThisRef},Str)
<<ThisRef:32/?UI,(byte_size(Str_UC)):32/?UI,(Str_UC)/binary, 0:(((8- ((0+byte_size(Str_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxDirPickerCtrl()) -> ok.
+-spec destroy(This::wxDirPickerCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxDirPickerCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxEvent.erl b/lib/wx/src/gen/wxEvent.erl
index b896c938c2..677badd364 100644
--- a/lib/wx/src/gen/wxEvent.erl
+++ b/lib/wx/src/gen/wxEvent.erl
@@ -69,7 +69,7 @@ isCommandEvent(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxevent.html#wxeventresumepropagation">external documentation</a>.
--spec resumePropagation(This, PropagationLevel) -> ok when
+-spec resumePropagation(This, PropagationLevel) -> 'ok' when
This::wxEvent(), PropagationLevel::integer().
resumePropagation(#wx_ref{type=ThisT,ref=ThisRef},PropagationLevel)
when is_integer(PropagationLevel) ->
@@ -86,7 +86,7 @@ shouldPropagate(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv skip(This, [])
--spec skip(This) -> ok when
+-spec skip(This) -> 'ok' when
This::wxEvent().
skip(This)
@@ -94,9 +94,9 @@ skip(This)
skip(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxevent.html#wxeventskip">external documentation</a>.
--spec skip(This, [Option]) -> ok when
+-spec skip(This, [Option]) -> 'ok' when
This::wxEvent(),
- Option :: {skip, boolean()}.
+ Option :: {'skip', boolean()}.
skip(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxEvent),
diff --git a/lib/wx/src/gen/wxEvtHandler.erl b/lib/wx/src/gen/wxEvtHandler.erl
index d330075101..8d56ad952c 100644
--- a/lib/wx/src/gen/wxEvtHandler.erl
+++ b/lib/wx/src/gen/wxEvtHandler.erl
@@ -53,7 +53,7 @@
-type wxEvtHandler() :: wx:wx_object().
%% @doc Equivalent to {@link connect/3. connect(This, EventType, [])}
--spec connect(This::wxEvtHandler(), EventType::wxEventType()) -> ok.
+-spec connect(This::wxEvtHandler(), EventType::wxEventType()) -> 'ok'.
connect(This, EventType) ->
connect(This, EventType, []).
@@ -75,9 +75,9 @@ connect(This, EventType) ->
%% to process the event. Default not specfied i.e. a message will
%% be delivered to the process calling this function.
%% {userData, term()} An erlang term that will be sent with the event. Default: [].
--spec connect(This::wxEvtHandler(), EventType::wxEventType(), [Option]) -> ok when
- Option :: {id, integer()} | {lastId, integer()} | {skip, boolean()} |
- callback | {callback, function()} | {userData, term()}.
+-spec connect(This::wxEvtHandler(), EventType::wxEventType(), [Option]) -> 'ok' when
+ Option :: {'id', integer()} | {'lastId', integer()} | {'skip', boolean()} |
+ 'callback' | {'callback', function()} | {'userData', term()}.
connect(This=#wx_ref{type=ThisT}, EventType, Options) ->
EvH = parse_opts(Options, #evh{et=EventType}),
?CLASS(ThisT,wxEvtHandler),
@@ -135,7 +135,7 @@ disconnect(This=#wx_ref{type=ThisT,ref=_ThisRef}, EventType) when is_atom(EventT
%% EventType may be the atom 'null' to match any eventtype.
%% Notice that the options skip and userdata is not used to match the eventhandler.
-spec disconnect(This::wxEvtHandler(), EventType::wxEventType(), [Option]) -> boolean() when
- Option :: {id, integer()} | {lastId, integer()} | {callback, function()}.
+ Option :: {'id', integer()} | {'lastId', integer()} | {'callback', function()}.
disconnect(This=#wx_ref{type=ThisT,ref=_ThisRef}, EventType, Opts) ->
?CLASS(ThisT,wxEvtHandler),
EvH = parse_opts(Opts, #evh{et=EventType}),
diff --git a/lib/wx/src/gen/wxFileDataObject.erl b/lib/wx/src/gen/wxFileDataObject.erl
index 15f7d149e1..06d8ceb9cd 100644
--- a/lib/wx/src/gen/wxFileDataObject.erl
+++ b/lib/wx/src/gen/wxFileDataObject.erl
@@ -46,7 +46,7 @@ new() ->
<<>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfiledataobject.html#wxfiledataobjectaddfile">external documentation</a>.
--spec addFile(This, Filename) -> ok when
+-spec addFile(This, Filename) -> 'ok' when
This::wxFileDataObject(), Filename::unicode:chardata().
addFile(#wx_ref{type=ThisT,ref=ThisRef},Filename)
when is_list(Filename) ->
@@ -64,7 +64,7 @@ getFilenames(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFileDataObject()) -> ok.
+-spec destroy(This::wxFileDataObject()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFileDataObject),
wxe_util:destroy(?wxFileDataObject_destroy,Obj),
diff --git a/lib/wx/src/gen/wxFileDialog.erl b/lib/wx/src/gen/wxFileDialog.erl
index 36ee6463ae..070fce3a39 100644
--- a/lib/wx/src/gen/wxFileDialog.erl
+++ b/lib/wx/src/gen/wxFileDialog.erl
@@ -101,13 +101,13 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfiledialog.html#wxfiledialogwxfiledialog">external documentation</a>.
-spec new(Parent, [Option]) -> wxFileDialog() when
Parent::wxWindow:wxWindow(),
- Option :: {message, unicode:chardata()}
- | {defaultDir, unicode:chardata()}
- | {defaultFile, unicode:chardata()}
- | {wildCard, unicode:chardata()}
- | {style, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {sz, {W::integer(), H::integer()}}.
+ Option :: {'message', unicode:chardata()}
+ | {'defaultDir', unicode:chardata()}
+ | {'defaultFile', unicode:chardata()}
+ | {'wildCard', unicode:chardata()}
+ | {'style', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'sz', {W::integer(), H::integer()}}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -188,7 +188,7 @@ getWildcard(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfiledialog.html#wxfiledialogsetdirectory">external documentation</a>.
--spec setDirectory(This, Dir) -> ok when
+-spec setDirectory(This, Dir) -> 'ok' when
This::wxFileDialog(), Dir::unicode:chardata().
setDirectory(#wx_ref{type=ThisT,ref=ThisRef},Dir)
when is_list(Dir) ->
@@ -198,7 +198,7 @@ setDirectory(#wx_ref{type=ThisT,ref=ThisRef},Dir)
<<ThisRef:32/?UI,(byte_size(Dir_UC)):32/?UI,(Dir_UC)/binary, 0:(((8- ((0+byte_size(Dir_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfiledialog.html#wxfiledialogsetfilename">external documentation</a>.
--spec setFilename(This, Name) -> ok when
+-spec setFilename(This, Name) -> 'ok' when
This::wxFileDialog(), Name::unicode:chardata().
setFilename(#wx_ref{type=ThisT,ref=ThisRef},Name)
when is_list(Name) ->
@@ -208,7 +208,7 @@ setFilename(#wx_ref{type=ThisT,ref=ThisRef},Name)
<<ThisRef:32/?UI,(byte_size(Name_UC)):32/?UI,(Name_UC)/binary, 0:(((8- ((0+byte_size(Name_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfiledialog.html#wxfiledialogsetfilterindex">external documentation</a>.
--spec setFilterIndex(This, FilterIndex) -> ok when
+-spec setFilterIndex(This, FilterIndex) -> 'ok' when
This::wxFileDialog(), FilterIndex::integer().
setFilterIndex(#wx_ref{type=ThisT,ref=ThisRef},FilterIndex)
when is_integer(FilterIndex) ->
@@ -217,7 +217,7 @@ setFilterIndex(#wx_ref{type=ThisT,ref=ThisRef},FilterIndex)
<<ThisRef:32/?UI,FilterIndex:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfiledialog.html#wxfiledialogsetmessage">external documentation</a>.
--spec setMessage(This, Message) -> ok when
+-spec setMessage(This, Message) -> 'ok' when
This::wxFileDialog(), Message::unicode:chardata().
setMessage(#wx_ref{type=ThisT,ref=ThisRef},Message)
when is_list(Message) ->
@@ -227,7 +227,7 @@ setMessage(#wx_ref{type=ThisT,ref=ThisRef},Message)
<<ThisRef:32/?UI,(byte_size(Message_UC)):32/?UI,(Message_UC)/binary, 0:(((8- ((0+byte_size(Message_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfiledialog.html#wxfiledialogsetpath">external documentation</a>.
--spec setPath(This, Path) -> ok when
+-spec setPath(This, Path) -> 'ok' when
This::wxFileDialog(), Path::unicode:chardata().
setPath(#wx_ref{type=ThisT,ref=ThisRef},Path)
when is_list(Path) ->
@@ -237,7 +237,7 @@ setPath(#wx_ref{type=ThisT,ref=ThisRef},Path)
<<ThisRef:32/?UI,(byte_size(Path_UC)):32/?UI,(Path_UC)/binary, 0:(((8- ((0+byte_size(Path_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfiledialog.html#wxfiledialogsetwildcard">external documentation</a>.
--spec setWildcard(This, WildCard) -> ok when
+-spec setWildcard(This, WildCard) -> 'ok' when
This::wxFileDialog(), WildCard::unicode:chardata().
setWildcard(#wx_ref{type=ThisT,ref=ThisRef},WildCard)
when is_list(WildCard) ->
@@ -247,7 +247,7 @@ setWildcard(#wx_ref{type=ThisT,ref=ThisRef},WildCard)
<<ThisRef:32/?UI,(byte_size(WildCard_UC)):32/?UI,(WildCard_UC)/binary, 0:(((8- ((0+byte_size(WildCard_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFileDialog()) -> ok.
+-spec destroy(This::wxFileDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFileDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxFilePickerCtrl.erl b/lib/wx/src/gen/wxFilePickerCtrl.erl
index 2b57a5927b..396403dc22 100644
--- a/lib/wx/src/gen/wxFilePickerCtrl.erl
+++ b/lib/wx/src/gen/wxFilePickerCtrl.erl
@@ -102,13 +102,13 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfilepickerctrl.html#wxfilepickerctrlwxfilepickerctrl">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxFilePickerCtrl() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {path, unicode:chardata()}
- | {message, unicode:chardata()}
- | {wildcard, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'path', unicode:chardata()}
+ | {'message', unicode:chardata()}
+ | {'wildcard', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -135,13 +135,13 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfilepickerctrl.html#wxfilepickerctrlcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxFilePickerCtrl(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {path, unicode:chardata()}
- | {message, unicode:chardata()}
- | {wildcard, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'path', unicode:chardata()}
+ | {'message', unicode:chardata()}
+ | {'wildcard', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxFilePickerCtrl),
@@ -167,7 +167,7 @@ getPath(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfilepickerctrl.html#wxfilepickerctrlsetpath">external documentation</a>.
--spec setPath(This, Str) -> ok when
+-spec setPath(This, Str) -> 'ok' when
This::wxFilePickerCtrl(), Str::unicode:chardata().
setPath(#wx_ref{type=ThisT,ref=ThisRef},Str)
when is_list(Str) ->
@@ -177,7 +177,7 @@ setPath(#wx_ref{type=ThisT,ref=ThisRef},Str)
<<ThisRef:32/?UI,(byte_size(Str_UC)):32/?UI,(Str_UC)/binary, 0:(((8- ((0+byte_size(Str_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFilePickerCtrl()) -> ok.
+-spec destroy(This::wxFilePickerCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFilePickerCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxFindReplaceData.erl b/lib/wx/src/gen/wxFindReplaceData.erl
index 851ad2d76f..9b4b910f7e 100644
--- a/lib/wx/src/gen/wxFindReplaceData.erl
+++ b/lib/wx/src/gen/wxFindReplaceData.erl
@@ -75,7 +75,7 @@ getFlags(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfindreplacedata.html#wxfindreplacedatasetflags">external documentation</a>.
--spec setFlags(This, Flags) -> ok when
+-spec setFlags(This, Flags) -> 'ok' when
This::wxFindReplaceData(), Flags::integer().
setFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
when is_integer(Flags) ->
@@ -84,7 +84,7 @@ setFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
<<ThisRef:32/?UI,Flags:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfindreplacedata.html#wxfindreplacedatasetfindstring">external documentation</a>.
--spec setFindString(This, Str) -> ok when
+-spec setFindString(This, Str) -> 'ok' when
This::wxFindReplaceData(), Str::unicode:chardata().
setFindString(#wx_ref{type=ThisT,ref=ThisRef},Str)
when is_list(Str) ->
@@ -94,7 +94,7 @@ setFindString(#wx_ref{type=ThisT,ref=ThisRef},Str)
<<ThisRef:32/?UI,(byte_size(Str_UC)):32/?UI,(Str_UC)/binary, 0:(((8- ((0+byte_size(Str_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfindreplacedata.html#wxfindreplacedatasetreplacestring">external documentation</a>.
--spec setReplaceString(This, Str) -> ok when
+-spec setReplaceString(This, Str) -> 'ok' when
This::wxFindReplaceData(), Str::unicode:chardata().
setReplaceString(#wx_ref{type=ThisT,ref=ThisRef},Str)
when is_list(Str) ->
@@ -104,7 +104,7 @@ setReplaceString(#wx_ref{type=ThisT,ref=ThisRef},Str)
<<ThisRef:32/?UI,(byte_size(Str_UC)):32/?UI,(Str_UC)/binary, 0:(((8- ((0+byte_size(Str_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFindReplaceData()) -> ok.
+-spec destroy(This::wxFindReplaceData()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFindReplaceData),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxFindReplaceDialog.erl b/lib/wx/src/gen/wxFindReplaceDialog.erl
index d265e232b3..a34fc329ae 100644
--- a/lib/wx/src/gen/wxFindReplaceDialog.erl
+++ b/lib/wx/src/gen/wxFindReplaceDialog.erl
@@ -105,7 +105,7 @@ new(Parent,Data,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfindreplacedialog.html#wxfindreplacedialogwxfindreplacedialog">external documentation</a>.
-spec new(Parent, Data, Title, [Option]) -> wxFindReplaceDialog() when
Parent::wxWindow:wxWindow(), Data::wxFindReplaceData:wxFindReplaceData(), Title::unicode:chardata(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},#wx_ref{type=DataT,ref=DataRef},Title, Options)
when is_list(Title),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -128,7 +128,7 @@ create(This,Parent,Data,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfindreplacedialog.html#wxfindreplacedialogcreate">external documentation</a>.
-spec create(This, Parent, Data, Title, [Option]) -> boolean() when
This::wxFindReplaceDialog(), Parent::wxWindow:wxWindow(), Data::wxFindReplaceData:wxFindReplaceData(), Title::unicode:chardata(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},#wx_ref{type=DataT,ref=DataRef},Title, Options)
when is_list(Title),is_list(Options) ->
?CLASS(ThisT,wxFindReplaceDialog),
@@ -150,7 +150,7 @@ getData(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFindReplaceDialog()) -> ok.
+-spec destroy(This::wxFindReplaceDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFindReplaceDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxFlexGridSizer.erl b/lib/wx/src/gen/wxFlexGridSizer.erl
index 84a9b619ac..80ef8f6b24 100644
--- a/lib/wx/src/gen/wxFlexGridSizer.erl
+++ b/lib/wx/src/gen/wxFlexGridSizer.erl
@@ -64,8 +64,8 @@ new(Cols)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxflexgridsizer.html#wxflexgridsizerwxflexgridsizer">external documentation</a>.
-spec new(Cols, [Option]) -> wxFlexGridSizer() when
Cols::integer(),
- Option :: {vgap, integer()}
- | {hgap, integer()}.
+ Option :: {'vgap', integer()}
+ | {'hgap', integer()}.
new(Cols, Options)
when is_integer(Cols),is_list(Options) ->
MOpts = fun({vgap, Vgap}, Acc) -> [<<1:32/?UI,Vgap:32/?UI>>|Acc];
@@ -84,7 +84,7 @@ new(Rows,Cols,Vgap,Hgap)
<<Rows:32/?UI,Cols:32/?UI,Vgap:32/?UI,Hgap:32/?UI>>).
%% @equiv addGrowableCol(This,Idx, [])
--spec addGrowableCol(This, Idx) -> ok when
+-spec addGrowableCol(This, Idx) -> 'ok' when
This::wxFlexGridSizer(), Idx::integer().
addGrowableCol(This,Idx)
@@ -92,9 +92,9 @@ addGrowableCol(This,Idx)
addGrowableCol(This,Idx, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxflexgridsizer.html#wxflexgridsizeraddgrowablecol">external documentation</a>.
--spec addGrowableCol(This, Idx, [Option]) -> ok when
+-spec addGrowableCol(This, Idx, [Option]) -> 'ok' when
This::wxFlexGridSizer(), Idx::integer(),
- Option :: {proportion, integer()}.
+ Option :: {'proportion', integer()}.
addGrowableCol(#wx_ref{type=ThisT,ref=ThisRef},Idx, Options)
when is_integer(Idx),is_list(Options) ->
?CLASS(ThisT,wxFlexGridSizer),
@@ -105,7 +105,7 @@ addGrowableCol(#wx_ref{type=ThisT,ref=ThisRef},Idx, Options)
<<ThisRef:32/?UI,Idx:32/?UI, BinOpt/binary>>).
%% @equiv addGrowableRow(This,Idx, [])
--spec addGrowableRow(This, Idx) -> ok when
+-spec addGrowableRow(This, Idx) -> 'ok' when
This::wxFlexGridSizer(), Idx::integer().
addGrowableRow(This,Idx)
@@ -113,9 +113,9 @@ addGrowableRow(This,Idx)
addGrowableRow(This,Idx, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxflexgridsizer.html#wxflexgridsizeraddgrowablerow">external documentation</a>.
--spec addGrowableRow(This, Idx, [Option]) -> ok when
+-spec addGrowableRow(This, Idx, [Option]) -> 'ok' when
This::wxFlexGridSizer(), Idx::integer(),
- Option :: {proportion, integer()}.
+ Option :: {'proportion', integer()}.
addGrowableRow(#wx_ref{type=ThisT,ref=ThisRef},Idx, Options)
when is_integer(Idx),is_list(Options) ->
?CLASS(ThisT,wxFlexGridSizer),
@@ -143,7 +143,7 @@ getNonFlexibleGrowMode(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxflexgridsizer.html#wxflexgridsizerremovegrowablecol">external documentation</a>.
--spec removeGrowableCol(This, Idx) -> ok when
+-spec removeGrowableCol(This, Idx) -> 'ok' when
This::wxFlexGridSizer(), Idx::integer().
removeGrowableCol(#wx_ref{type=ThisT,ref=ThisRef},Idx)
when is_integer(Idx) ->
@@ -152,7 +152,7 @@ removeGrowableCol(#wx_ref{type=ThisT,ref=ThisRef},Idx)
<<ThisRef:32/?UI,Idx:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxflexgridsizer.html#wxflexgridsizerremovegrowablerow">external documentation</a>.
--spec removeGrowableRow(This, Idx) -> ok when
+-spec removeGrowableRow(This, Idx) -> 'ok' when
This::wxFlexGridSizer(), Idx::integer().
removeGrowableRow(#wx_ref{type=ThisT,ref=ThisRef},Idx)
when is_integer(Idx) ->
@@ -161,7 +161,7 @@ removeGrowableRow(#wx_ref{type=ThisT,ref=ThisRef},Idx)
<<ThisRef:32/?UI,Idx:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxflexgridsizer.html#wxflexgridsizersetflexibledirection">external documentation</a>.
--spec setFlexibleDirection(This, Direction) -> ok when
+-spec setFlexibleDirection(This, Direction) -> 'ok' when
This::wxFlexGridSizer(), Direction::integer().
setFlexibleDirection(#wx_ref{type=ThisT,ref=ThisRef},Direction)
when is_integer(Direction) ->
@@ -171,7 +171,7 @@ setFlexibleDirection(#wx_ref{type=ThisT,ref=ThisRef},Direction)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxflexgridsizer.html#wxflexgridsizersetnonflexiblegrowmode">external documentation</a>.
%%<br /> Mode = ?wxFLEX_GROWMODE_NONE | ?wxFLEX_GROWMODE_SPECIFIED | ?wxFLEX_GROWMODE_ALL
--spec setNonFlexibleGrowMode(This, Mode) -> ok when
+-spec setNonFlexibleGrowMode(This, Mode) -> 'ok' when
This::wxFlexGridSizer(), Mode::wx:wx_enum().
setNonFlexibleGrowMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
when is_integer(Mode) ->
@@ -180,7 +180,7 @@ setNonFlexibleGrowMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
<<ThisRef:32/?UI,Mode:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFlexGridSizer()) -> ok.
+-spec destroy(This::wxFlexGridSizer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFlexGridSizer),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxFont.erl b/lib/wx/src/gen/wxFont.erl
index 9b98f8b06e..56e6e96b6d 100644
--- a/lib/wx/src/gen/wxFont.erl
+++ b/lib/wx/src/gen/wxFont.erl
@@ -68,9 +68,9 @@ new(Size,Family,Style,Weight)
%%<br /> Style = ?wxFONTSTYLE_NORMAL | ?wxFONTSTYLE_ITALIC | ?wxFONTSTYLE_SLANT | ?wxFONTSTYLE_MAX
-spec new(Size, Family, Style, Weight, [Option]) -> wxFont() when
Size::integer(), Family::wx:wx_enum(), Style::wx:wx_enum(), Weight::integer(),
- Option :: {underlined, boolean()}
- | {face, unicode:chardata()}
- | {encoding, wx:wx_enum()}.
+ Option :: {'underlined', boolean()}
+ | {'face', unicode:chardata()}
+ | {'encoding', wx:wx_enum()}.
new(Size,Family,Style,Weight, Options)
when is_integer(Size),is_integer(Family),is_integer(Style),is_integer(Weight),is_list(Options) ->
MOpts = fun({underlined, Underlined}, Acc) -> [<<1:32/?UI,(wxe_util:from_bool(Underlined)):32/?UI>>|Acc];
@@ -172,7 +172,7 @@ ok(#wx_ref{type=ThisT,ref=ThisRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfont.html#wxfontsetdefaultencoding">external documentation</a>.
%%<br /> Encoding = ?wxFONTENCODING_SYSTEM | ?wxFONTENCODING_DEFAULT | ?wxFONTENCODING_ISO8859_1 | ?wxFONTENCODING_ISO8859_2 | ?wxFONTENCODING_ISO8859_3 | ?wxFONTENCODING_ISO8859_4 | ?wxFONTENCODING_ISO8859_5 | ?wxFONTENCODING_ISO8859_6 | ?wxFONTENCODING_ISO8859_7 | ?wxFONTENCODING_ISO8859_8 | ?wxFONTENCODING_ISO8859_9 | ?wxFONTENCODING_ISO8859_10 | ?wxFONTENCODING_ISO8859_11 | ?wxFONTENCODING_ISO8859_12 | ?wxFONTENCODING_ISO8859_13 | ?wxFONTENCODING_ISO8859_14 | ?wxFONTENCODING_ISO8859_15 | ?wxFONTENCODING_ISO8859_MAX | ?wxFONTENCODING_KOI8 | ?wxFONTENCODING_KOI8_U | ?wxFONTENCODING_ALTERNATIVE | ?wxFONTENCODING_BULGARIAN | ?wxFONTENCODING_CP437 | ?wxFONTENCODING_CP850 | ?wxFONTENCODING_CP852 | ?wxFONTENCODING_CP855 | ?wxFONTENCODING_CP866 | ?wxFONTENCODING_CP874 | ?wxFONTENCODING_CP932 | ?wxFONTENCODING_CP936 | ?wxFONTENCODING_CP949 | ?wxFONTENCODING_CP950 | ?wxFONTENCODING_CP1250 | ?wxFONTENCODING_CP1251 | ?wxFONTENCODING_CP1252 | ?wxFONTENCODING_CP1253 | ?wxFONTENCODING_CP1254 | ?wxFONTENCODING_CP1255 | ?wxFONTENCODING_CP1256 | ?wxFONTENCODING_CP1257 | ?wxFONTENCODING_CP12_MAX | ?wxFONTENCODING_UTF7 | ?wxFONTENCODING_UTF8 | ?wxFONTENCODING_EUC_JP | ?wxFONTENCODING_UTF16BE | ?wxFONTENCODING_UTF16LE | ?wxFONTENCODING_UTF32BE | ?wxFONTENCODING_UTF32LE | ?wxFONTENCODING_MACROMAN | ?wxFONTENCODING_MACJAPANESE | ?wxFONTENCODING_MACCHINESETRAD | ?wxFONTENCODING_MACKOREAN | ?wxFONTENCODING_MACARABIC | ?wxFONTENCODING_MACHEBREW | ?wxFONTENCODING_MACGREEK | ?wxFONTENCODING_MACCYRILLIC | ?wxFONTENCODING_MACDEVANAGARI | ?wxFONTENCODING_MACGURMUKHI | ?wxFONTENCODING_MACGUJARATI | ?wxFONTENCODING_MACORIYA | ?wxFONTENCODING_MACBENGALI | ?wxFONTENCODING_MACTAMIL | ?wxFONTENCODING_MACTELUGU | ?wxFONTENCODING_MACKANNADA | ?wxFONTENCODING_MACMALAJALAM | ?wxFONTENCODING_MACSINHALESE | ?wxFONTENCODING_MACBURMESE | ?wxFONTENCODING_MACKHMER | ?wxFONTENCODING_MACTHAI | ?wxFONTENCODING_MACLAOTIAN | ?wxFONTENCODING_MACGEORGIAN | ?wxFONTENCODING_MACARMENIAN | ?wxFONTENCODING_MACCHINESESIMP | ?wxFONTENCODING_MACTIBETAN | ?wxFONTENCODING_MACMONGOLIAN | ?wxFONTENCODING_MACETHIOPIC | ?wxFONTENCODING_MACCENTRALEUR | ?wxFONTENCODING_MACVIATNAMESE | ?wxFONTENCODING_MACARABICEXT | ?wxFONTENCODING_MACSYMBOL | ?wxFONTENCODING_MACDINGBATS | ?wxFONTENCODING_MACTURKISH | ?wxFONTENCODING_MACCROATIAN | ?wxFONTENCODING_MACICELANDIC | ?wxFONTENCODING_MACROMANIAN | ?wxFONTENCODING_MACCELTIC | ?wxFONTENCODING_MACGAELIC | ?wxFONTENCODING_MACKEYBOARD | ?wxFONTENCODING_MAX | ?wxFONTENCODING_MACMIN | ?wxFONTENCODING_MACMAX | ?wxFONTENCODING_UTF16 | ?wxFONTENCODING_UTF32 | ?wxFONTENCODING_UNICODE | ?wxFONTENCODING_GB2312 | ?wxFONTENCODING_BIG5 | ?wxFONTENCODING_SHIFT_JIS
--spec setDefaultEncoding(Encoding) -> ok when
+-spec setDefaultEncoding(Encoding) -> 'ok' when
Encoding::wx:wx_enum().
setDefaultEncoding(Encoding)
when is_integer(Encoding) ->
@@ -191,7 +191,7 @@ setFaceName(#wx_ref{type=ThisT,ref=ThisRef},FaceName)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfont.html#wxfontsetfamily">external documentation</a>.
%%<br /> Family = ?wxFONTFAMILY_DEFAULT | ?wxFONTFAMILY_DECORATIVE | ?wxFONTFAMILY_ROMAN | ?wxFONTFAMILY_SCRIPT | ?wxFONTFAMILY_SWISS | ?wxFONTFAMILY_MODERN | ?wxFONTFAMILY_TELETYPE | ?wxFONTFAMILY_MAX | ?wxFONTFAMILY_UNKNOWN
--spec setFamily(This, Family) -> ok when
+-spec setFamily(This, Family) -> 'ok' when
This::wxFont(), Family::wx:wx_enum().
setFamily(#wx_ref{type=ThisT,ref=ThisRef},Family)
when is_integer(Family) ->
@@ -200,7 +200,7 @@ setFamily(#wx_ref{type=ThisT,ref=ThisRef},Family)
<<ThisRef:32/?UI,Family:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfont.html#wxfontsetpointsize">external documentation</a>.
--spec setPointSize(This, PointSize) -> ok when
+-spec setPointSize(This, PointSize) -> 'ok' when
This::wxFont(), PointSize::integer().
setPointSize(#wx_ref{type=ThisT,ref=ThisRef},PointSize)
when is_integer(PointSize) ->
@@ -210,7 +210,7 @@ setPointSize(#wx_ref{type=ThisT,ref=ThisRef},PointSize)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfont.html#wxfontsetstyle">external documentation</a>.
%%<br /> Style = ?wxFONTSTYLE_NORMAL | ?wxFONTSTYLE_ITALIC | ?wxFONTSTYLE_SLANT | ?wxFONTSTYLE_MAX
--spec setStyle(This, Style) -> ok when
+-spec setStyle(This, Style) -> 'ok' when
This::wxFont(), Style::wx:wx_enum().
setStyle(#wx_ref{type=ThisT,ref=ThisRef},Style)
when is_integer(Style) ->
@@ -219,7 +219,7 @@ setStyle(#wx_ref{type=ThisT,ref=ThisRef},Style)
<<ThisRef:32/?UI,Style:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfont.html#wxfontsetunderlined">external documentation</a>.
--spec setUnderlined(This, Underlined) -> ok when
+-spec setUnderlined(This, Underlined) -> 'ok' when
This::wxFont(), Underlined::boolean().
setUnderlined(#wx_ref{type=ThisT,ref=ThisRef},Underlined)
when is_boolean(Underlined) ->
@@ -228,7 +228,7 @@ setUnderlined(#wx_ref{type=ThisT,ref=ThisRef},Underlined)
<<ThisRef:32/?UI,(wxe_util:from_bool(Underlined)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfont.html#wxfontsetweight">external documentation</a>.
--spec setWeight(This, Weight) -> ok when
+-spec setWeight(This, Weight) -> 'ok' when
This::wxFont(), Weight::integer().
setWeight(#wx_ref{type=ThisT,ref=ThisRef},Weight)
when is_integer(Weight) ->
@@ -237,7 +237,7 @@ setWeight(#wx_ref{type=ThisT,ref=ThisRef},Weight)
<<ThisRef:32/?UI,Weight:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFont()) -> ok.
+-spec destroy(This::wxFont()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFont),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxFontData.erl b/lib/wx/src/gen/wxFontData.erl
index 066367862f..2d1a1b5568 100644
--- a/lib/wx/src/gen/wxFontData.erl
+++ b/lib/wx/src/gen/wxFontData.erl
@@ -52,7 +52,7 @@ new(#wx_ref{type=DataT,ref=DataRef}) ->
<<DataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontdata.html#wxfontdataenableeffects">external documentation</a>.
--spec enableEffects(This, Flag) -> ok when
+-spec enableEffects(This, Flag) -> 'ok' when
This::wxFontData(), Flag::boolean().
enableEffects(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -109,7 +109,7 @@ getShowHelp(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontdata.html#wxfontdatasetallowsymbols">external documentation</a>.
--spec setAllowSymbols(This, Flag) -> ok when
+-spec setAllowSymbols(This, Flag) -> 'ok' when
This::wxFontData(), Flag::boolean().
setAllowSymbols(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -118,7 +118,7 @@ setAllowSymbols(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontdata.html#wxfontdatasetchosenfont">external documentation</a>.
--spec setChosenFont(This, Font) -> ok when
+-spec setChosenFont(This, Font) -> 'ok' when
This::wxFontData(), Font::wxFont:wxFont().
setChosenFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxFontData),
@@ -127,7 +127,7 @@ setChosenFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) -
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontdata.html#wxfontdatasetcolour">external documentation</a>.
--spec setColour(This, Colour) -> ok when
+-spec setColour(This, Colour) -> 'ok' when
This::wxFontData(), Colour::wx:wx_colour().
setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -136,7 +136,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontdata.html#wxfontdatasetinitialfont">external documentation</a>.
--spec setInitialFont(This, Font) -> ok when
+-spec setInitialFont(This, Font) -> 'ok' when
This::wxFontData(), Font::wxFont:wxFont().
setInitialFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxFontData),
@@ -145,7 +145,7 @@ setInitialFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef})
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontdata.html#wxfontdatasetrange">external documentation</a>.
--spec setRange(This, MinRange, MaxRange) -> ok when
+-spec setRange(This, MinRange, MaxRange) -> 'ok' when
This::wxFontData(), MinRange::integer(), MaxRange::integer().
setRange(#wx_ref{type=ThisT,ref=ThisRef},MinRange,MaxRange)
when is_integer(MinRange),is_integer(MaxRange) ->
@@ -154,7 +154,7 @@ setRange(#wx_ref{type=ThisT,ref=ThisRef},MinRange,MaxRange)
<<ThisRef:32/?UI,MinRange:32/?UI,MaxRange:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontdata.html#wxfontdatasetshowhelp">external documentation</a>.
--spec setShowHelp(This, Flag) -> ok when
+-spec setShowHelp(This, Flag) -> 'ok' when
This::wxFontData(), Flag::boolean().
setShowHelp(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -163,7 +163,7 @@ setShowHelp(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFontData()) -> ok.
+-spec destroy(This::wxFontData()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFontData),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxFontDialog.erl b/lib/wx/src/gen/wxFontDialog.erl
index de199cfcce..3e6a913973 100644
--- a/lib/wx/src/gen/wxFontDialog.erl
+++ b/lib/wx/src/gen/wxFontDialog.erl
@@ -122,7 +122,7 @@ getFontData(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFontDialog()) -> ok.
+-spec destroy(This::wxFontDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFontDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxFontPickerCtrl.erl b/lib/wx/src/gen/wxFontPickerCtrl.erl
index c21061e0fe..0356f795eb 100644
--- a/lib/wx/src/gen/wxFontPickerCtrl.erl
+++ b/lib/wx/src/gen/wxFontPickerCtrl.erl
@@ -103,11 +103,11 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontpickerctrl.html#wxfontpickerctrlwxfontpickerctrl">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxFontPickerCtrl() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {initial, wxFont:wxFont()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'initial', wxFont:wxFont()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -132,11 +132,11 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontpickerctrl.html#wxfontpickerctrlcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxFontPickerCtrl(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {initial, wxFont:wxFont()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'initial', wxFont:wxFont()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxFontPickerCtrl),
@@ -160,7 +160,7 @@ getSelectedFont(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontpickerctrl.html#wxfontpickerctrlsetselectedfont">external documentation</a>.
--spec setSelectedFont(This, F) -> ok when
+-spec setSelectedFont(This, F) -> 'ok' when
This::wxFontPickerCtrl(), F::wxFont:wxFont().
setSelectedFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FT,ref=FRef}) ->
?CLASS(ThisT,wxFontPickerCtrl),
@@ -177,7 +177,7 @@ getMaxPointSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxfontpickerctrl.html#wxfontpickerctrlsetmaxpointsize">external documentation</a>.
--spec setMaxPointSize(This, Max) -> ok when
+-spec setMaxPointSize(This, Max) -> 'ok' when
This::wxFontPickerCtrl(), Max::integer().
setMaxPointSize(#wx_ref{type=ThisT,ref=ThisRef},Max)
when is_integer(Max) ->
@@ -186,7 +186,7 @@ setMaxPointSize(#wx_ref{type=ThisT,ref=ThisRef},Max)
<<ThisRef:32/?UI,Max:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFontPickerCtrl()) -> ok.
+-spec destroy(This::wxFontPickerCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFontPickerCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxFrame.erl b/lib/wx/src/gen/wxFrame.erl
index 75860cd9b7..93aad5b235 100644
--- a/lib/wx/src/gen/wxFrame.erl
+++ b/lib/wx/src/gen/wxFrame.erl
@@ -105,9 +105,9 @@ new(Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframewxframe">external documentation</a>.
-spec new(Parent, Id, Title, [Option]) -> wxFrame() when
Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -131,9 +131,9 @@ create(This,Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframecreate">external documentation</a>.
-spec create(This, Parent, Id, Title, [Option]) -> boolean() when
This::wxFrame(), Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ThisT,wxFrame),
@@ -158,9 +158,9 @@ createStatusBar(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframecreatestatusbar">external documentation</a>.
-spec createStatusBar(This, [Option]) -> wxStatusBar:wxStatusBar() when
This::wxFrame(),
- Option :: {number, integer()}
- | {style, integer()}
- | {id, integer()}.
+ Option :: {'number', integer()}
+ | {'style', integer()}
+ | {'id', integer()}.
createStatusBar(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxFrame),
@@ -183,8 +183,8 @@ createToolBar(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframecreatetoolbar">external documentation</a>.
-spec createToolBar(This, [Option]) -> wxToolBar:wxToolBar() when
This::wxFrame(),
- Option :: {style, integer()}
- | {id, integer()}.
+ Option :: {'style', integer()}
+ | {'id', integer()}.
createToolBar(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxFrame),
@@ -245,7 +245,7 @@ processCommand(#wx_ref{type=ThisT,ref=ThisRef},Winid)
<<ThisRef:32/?UI,Winid:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframesendsizeevent">external documentation</a>.
--spec sendSizeEvent(This) -> ok when
+-spec sendSizeEvent(This) -> 'ok' when
This::wxFrame().
sendSizeEvent(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxFrame),
@@ -253,7 +253,7 @@ sendSizeEvent(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframesetmenubar">external documentation</a>.
--spec setMenuBar(This, Menubar) -> ok when
+-spec setMenuBar(This, Menubar) -> 'ok' when
This::wxFrame(), Menubar::wxMenuBar:wxMenuBar().
setMenuBar(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MenubarT,ref=MenubarRef}) ->
?CLASS(ThisT,wxFrame),
@@ -262,7 +262,7 @@ setMenuBar(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MenubarT,ref=MenubarRef}
<<ThisRef:32/?UI,MenubarRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframesetstatusbar">external documentation</a>.
--spec setStatusBar(This, Statbar) -> ok when
+-spec setStatusBar(This, Statbar) -> 'ok' when
This::wxFrame(), Statbar::wxStatusBar:wxStatusBar().
setStatusBar(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=StatbarT,ref=StatbarRef}) ->
?CLASS(ThisT,wxFrame),
@@ -271,7 +271,7 @@ setStatusBar(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=StatbarT,ref=StatbarRe
<<ThisRef:32/?UI,StatbarRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframesetstatusbarpane">external documentation</a>.
--spec setStatusBarPane(This, N) -> ok when
+-spec setStatusBarPane(This, N) -> 'ok' when
This::wxFrame(), N::integer().
setStatusBarPane(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -280,7 +280,7 @@ setStatusBarPane(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @equiv setStatusText(This,Text, [])
--spec setStatusText(This, Text) -> ok when
+-spec setStatusText(This, Text) -> 'ok' when
This::wxFrame(), Text::unicode:chardata().
setStatusText(This,Text)
@@ -288,9 +288,9 @@ setStatusText(This,Text)
setStatusText(This,Text, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframesetstatustext">external documentation</a>.
--spec setStatusText(This, Text, [Option]) -> ok when
+-spec setStatusText(This, Text, [Option]) -> 'ok' when
This::wxFrame(), Text::unicode:chardata(),
- Option :: {number, integer()}.
+ Option :: {'number', integer()}.
setStatusText(#wx_ref{type=ThisT,ref=ThisRef},Text, Options)
when is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxFrame),
@@ -302,7 +302,7 @@ setStatusText(#wx_ref{type=ThisT,ref=ThisRef},Text, Options)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframesetstatuswidths">external documentation</a>.
--spec setStatusWidths(This, Widths_field) -> ok when
+-spec setStatusWidths(This, Widths_field) -> 'ok' when
This::wxFrame(), Widths_field::[integer()].
setStatusWidths(#wx_ref{type=ThisT,ref=ThisRef},Widths_field)
when is_list(Widths_field) ->
@@ -312,7 +312,7 @@ setStatusWidths(#wx_ref{type=ThisT,ref=ThisRef},Widths_field)
(<< <<C:32/?I>> || C <- Widths_field>>)/binary, 0:(((0+length(Widths_field)) rem 2)*32)>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxframe.html#wxframesettoolbar">external documentation</a>.
--spec setToolBar(This, Toolbar) -> ok when
+-spec setToolBar(This, Toolbar) -> 'ok' when
This::wxFrame(), Toolbar::wxToolBar:wxToolBar().
setToolBar(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ToolbarT,ref=ToolbarRef}) ->
?CLASS(ThisT,wxFrame),
@@ -321,7 +321,7 @@ setToolBar(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ToolbarT,ref=ToolbarRef}
<<ThisRef:32/?UI,ToolbarRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxFrame()) -> ok.
+-spec destroy(This::wxFrame()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxFrame),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxGLCanvas.erl b/lib/wx/src/gen/wxGLCanvas.erl
index 9d3d13740d..2007047bd3 100644
--- a/lib/wx/src/gen/wxGLCanvas.erl
+++ b/lib/wx/src/gen/wxGLCanvas.erl
@@ -89,25 +89,25 @@ new(Parent)
%% <br /> Also:<br />
%% new(Parent, [Option]) -> wxGLCanvas() when<br />
%% Parent::wxWindow:wxWindow(),<br />
-%% Option :: {id, integer()}<br />
-%% | {pos, {X::integer(), Y::integer()}}<br />
-%% | {size, {W::integer(), H::integer()}}<br />
-%% | {style, integer()}<br />
-%% | {name, unicode:chardata()}<br />
-%% | {attribList, [integer()]}<br />
-%% | {palette, wxPalette:wxPalette()}.<br />
+%% Option :: {'id', integer()}<br />
+%% | {'pos', {X::integer(), Y::integer()}}<br />
+%% | {'size', {W::integer(), H::integer()}}<br />
+%% | {'style', integer()}<br />
+%% | {'name', unicode:chardata()}<br />
+%% | {'attribList', [integer()]}<br />
+%% | {'palette', wxPalette:wxPalette()}.<br />
%%
-spec new(Parent, Shared) -> wxGLCanvas() when
Parent::wxWindow:wxWindow(), Shared::wx:wx_object() | wxGLCanvas();
(Parent, [Option]) -> wxGLCanvas() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {name, unicode:chardata()}
- | {attribList, [integer()]}
- | {palette, wxPalette:wxPalette()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'name', unicode:chardata()}
+ | {'attribList', [integer()]}
+ | {'palette', wxPalette:wxPalette()}.
new(Parent,Shared)
when is_record(Parent, wx_ref),is_record(Shared, wx_ref) ->
@@ -131,13 +131,13 @@ new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxglcanvas.html#wxglcanvaswxglcanvas">external documentation</a>.
-spec new(Parent, Shared, [Option]) -> wxGLCanvas() when
Parent::wxWindow:wxWindow(), Shared::wx:wx_object() | wxGLCanvas(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {name, unicode:chardata()}
- | {attribList, [integer()]}
- | {palette, wxPalette:wxPalette()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'name', unicode:chardata()}
+ | {'attribList', [integer()]}
+ | {'palette', wxPalette:wxPalette()}.
new(#wx_ref{type=ParentT,ref=ParentRef},#wx_ref{type=SharedT,ref=SharedRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -169,7 +169,7 @@ getContext(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxglcanvas.html#wxglcanvassetcurrent">external documentation</a>.
--spec setCurrent(This) -> ok when
+-spec setCurrent(This) -> 'ok' when
This::wxGLCanvas().
setCurrent(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGLCanvas),
@@ -179,7 +179,7 @@ setCurrent(#wx_ref{type=ThisT,ref=ThisRef}) ->
_Result.
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxglcanvas.html#wxglcanvasswapbuffers">external documentation</a>.
--spec swapBuffers(This) -> ok when
+-spec swapBuffers(This) -> 'ok' when
This::wxGLCanvas().
swapBuffers(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGLCanvas),
@@ -187,7 +187,7 @@ swapBuffers(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGLCanvas()) -> ok.
+-spec destroy(This::wxGLCanvas()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGLCanvas),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxGauge.erl b/lib/wx/src/gen/wxGauge.erl
index 2745e251b4..fa2e7618e8 100644
--- a/lib/wx/src/gen/wxGauge.erl
+++ b/lib/wx/src/gen/wxGauge.erl
@@ -97,10 +97,10 @@ new(Parent,Id,Range)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgauge.html#wxgaugewxgauge">external documentation</a>.
-spec new(Parent, Id, Range, [Option]) -> wxGauge() when
Parent::wxWindow:wxWindow(), Id::integer(), Range::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Range, Options)
when is_integer(Id),is_integer(Range),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -124,10 +124,10 @@ create(This,Parent,Id,Range)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgauge.html#wxgaugecreate">external documentation</a>.
-spec create(This, Parent, Id, Range, [Option]) -> boolean() when
This::wxGauge(), Parent::wxWindow:wxWindow(), Id::integer(), Range::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Range, Options)
when is_integer(Id),is_integer(Range),is_list(Options) ->
?CLASS(ThisT,wxGauge),
@@ -166,7 +166,7 @@ isVertical(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgauge.html#wxgaugesetrange">external documentation</a>.
--spec setRange(This, R) -> ok when
+-spec setRange(This, R) -> 'ok' when
This::wxGauge(), R::integer().
setRange(#wx_ref{type=ThisT,ref=ThisRef},R)
when is_integer(R) ->
@@ -175,7 +175,7 @@ setRange(#wx_ref{type=ThisT,ref=ThisRef},R)
<<ThisRef:32/?UI,R:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgauge.html#wxgaugesetvalue">external documentation</a>.
--spec setValue(This, Pos) -> ok when
+-spec setValue(This, Pos) -> 'ok' when
This::wxGauge(), Pos::integer().
setValue(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -184,7 +184,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgauge.html#wxgaugepulse">external documentation</a>.
--spec pulse(This) -> ok when
+-spec pulse(This) -> 'ok' when
This::wxGauge().
pulse(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGauge),
@@ -192,7 +192,7 @@ pulse(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGauge()) -> ok.
+-spec destroy(This::wxGauge()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGauge),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxGenericDirCtrl.erl b/lib/wx/src/gen/wxGenericDirCtrl.erl
index bc26a1645e..3ea99c682d 100644
--- a/lib/wx/src/gen/wxGenericDirCtrl.erl
+++ b/lib/wx/src/gen/wxGenericDirCtrl.erl
@@ -99,13 +99,13 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgenericdirctrl.html#wxgenericdirctrlwxgenericdirctrl">external documentation</a>.
-spec new(Parent, [Option]) -> wxGenericDirCtrl() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {dir, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {filter, unicode:chardata()}
- | {defaultFilter, integer()}.
+ Option :: {'id', integer()}
+ | {'dir', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'filter', unicode:chardata()}
+ | {'defaultFilter', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -132,13 +132,13 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgenericdirctrl.html#wxgenericdirctrlcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxGenericDirCtrl(), Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {dir, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {filter, unicode:chardata()}
- | {defaultFilter, integer()}.
+ Option :: {'id', integer()}
+ | {'dir', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'filter', unicode:chardata()}
+ | {'defaultFilter', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGenericDirCtrl),
@@ -156,7 +156,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Opti
<<ThisRef:32/?UI,ParentRef:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgenericdirctrl.html#wxgenericdirctrlinit">external documentation</a>.
--spec init(This) -> ok when
+-spec init(This) -> 'ok' when
This::wxGenericDirCtrl().
init(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGenericDirCtrl),
@@ -164,7 +164,7 @@ init(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgenericdirctrl.html#wxgenericdirctrlcollapsetree">external documentation</a>.
--spec collapseTree(This) -> ok when
+-spec collapseTree(This) -> 'ok' when
This::wxGenericDirCtrl().
collapseTree(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGenericDirCtrl),
@@ -238,7 +238,7 @@ getTreeCtrl(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgenericdirctrl.html#wxgenericdirctrlrecreatetree">external documentation</a>.
--spec reCreateTree(This) -> ok when
+-spec reCreateTree(This) -> 'ok' when
This::wxGenericDirCtrl().
reCreateTree(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGenericDirCtrl),
@@ -246,7 +246,7 @@ reCreateTree(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgenericdirctrl.html#wxgenericdirctrlsetdefaultpath">external documentation</a>.
--spec setDefaultPath(This, Path) -> ok when
+-spec setDefaultPath(This, Path) -> 'ok' when
This::wxGenericDirCtrl(), Path::unicode:chardata().
setDefaultPath(#wx_ref{type=ThisT,ref=ThisRef},Path)
when is_list(Path) ->
@@ -256,7 +256,7 @@ setDefaultPath(#wx_ref{type=ThisT,ref=ThisRef},Path)
<<ThisRef:32/?UI,(byte_size(Path_UC)):32/?UI,(Path_UC)/binary, 0:(((8- ((0+byte_size(Path_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgenericdirctrl.html#wxgenericdirctrlsetfilter">external documentation</a>.
--spec setFilter(This, Filter) -> ok when
+-spec setFilter(This, Filter) -> 'ok' when
This::wxGenericDirCtrl(), Filter::unicode:chardata().
setFilter(#wx_ref{type=ThisT,ref=ThisRef},Filter)
when is_list(Filter) ->
@@ -266,7 +266,7 @@ setFilter(#wx_ref{type=ThisT,ref=ThisRef},Filter)
<<ThisRef:32/?UI,(byte_size(Filter_UC)):32/?UI,(Filter_UC)/binary, 0:(((8- ((0+byte_size(Filter_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgenericdirctrl.html#wxgenericdirctrlsetfilterindex">external documentation</a>.
--spec setFilterIndex(This, N) -> ok when
+-spec setFilterIndex(This, N) -> 'ok' when
This::wxGenericDirCtrl(), N::integer().
setFilterIndex(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -275,7 +275,7 @@ setFilterIndex(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgenericdirctrl.html#wxgenericdirctrlsetpath">external documentation</a>.
--spec setPath(This, Path) -> ok when
+-spec setPath(This, Path) -> 'ok' when
This::wxGenericDirCtrl(), Path::unicode:chardata().
setPath(#wx_ref{type=ThisT,ref=ThisRef},Path)
when is_list(Path) ->
@@ -285,7 +285,7 @@ setPath(#wx_ref{type=ThisT,ref=ThisRef},Path)
<<ThisRef:32/?UI,(byte_size(Path_UC)):32/?UI,(Path_UC)/binary, 0:(((8- ((0+byte_size(Path_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGenericDirCtrl()) -> ok.
+-spec destroy(This::wxGenericDirCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGenericDirCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxGraphicsContext.erl b/lib/wx/src/gen/wxGraphicsContext.erl
index bbb2cfc0ca..0aa2119210 100644
--- a/lib/wx/src/gen/wxGraphicsContext.erl
+++ b/lib/wx/src/gen/wxGraphicsContext.erl
@@ -114,7 +114,7 @@ createFont(This,Font)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextcreatefont">external documentation</a>.
-spec createFont(This, Font, [Option]) -> wxGraphicsFont:wxGraphicsFont() when
This::wxGraphicsContext(), Font::wxFont:wxFont(),
- Option :: {col, wx:wx_colour()}.
+ Option :: {'col', wx:wx_colour()}.
createFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -136,12 +136,12 @@ createMatrix(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextcreatematrix">external documentation</a>.
-spec createMatrix(This, [Option]) -> wxGraphicsMatrix:wxGraphicsMatrix() when
This::wxGraphicsContext(),
- Option :: {a, number()}
- | {b, number()}
- | {c, number()}
- | {d, number()}
- | {tx, number()}
- | {ty, number()}.
+ Option :: {'a', number()}
+ | {'b', number()}
+ | {'c', number()}
+ | {'d', number()}
+ | {'tx', number()}
+ | {'ty', number()}.
createMatrix(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -165,7 +165,7 @@ createPath(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextclip">external documentation</a>.
--spec clip(This, Region) -> ok when
+-spec clip(This, Region) -> 'ok' when
This::wxGraphicsContext(), Region::wxRegion:wxRegion().
clip(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=RegionT,ref=RegionRef}) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -174,7 +174,7 @@ clip(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=RegionT,ref=RegionRef}) ->
<<ThisRef:32/?UI,RegionRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextclip">external documentation</a>.
--spec clip(This, X, Y, W, H) -> ok when
+-spec clip(This, X, Y, W, H) -> 'ok' when
This::wxGraphicsContext(), X::number(), Y::number(), W::number(), H::number().
clip(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
when is_number(X),is_number(Y),is_number(W),is_number(H) ->
@@ -183,7 +183,7 @@ clip(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F,W:64/?F,H:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextresetclip">external documentation</a>.
--spec resetClip(This) -> ok when
+-spec resetClip(This) -> 'ok' when
This::wxGraphicsContext().
resetClip(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -191,7 +191,7 @@ resetClip(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawbitmap">external documentation</a>.
--spec drawBitmap(This, Bmp, X, Y, W, H) -> ok when
+-spec drawBitmap(This, Bmp, X, Y, W, H) -> 'ok' when
This::wxGraphicsContext(), Bmp::wxBitmap:wxBitmap(), X::number(), Y::number(), W::number(), H::number().
drawBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef},X,Y,W,H)
when is_number(X),is_number(Y),is_number(W),is_number(H) ->
@@ -201,7 +201,7 @@ drawBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef},X,Y,W,H
<<ThisRef:32/?UI,BmpRef:32/?UI,X:64/?F,Y:64/?F,W:64/?F,H:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawellipse">external documentation</a>.
--spec drawEllipse(This, X, Y, W, H) -> ok when
+-spec drawEllipse(This, X, Y, W, H) -> 'ok' when
This::wxGraphicsContext(), X::number(), Y::number(), W::number(), H::number().
drawEllipse(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
when is_number(X),is_number(Y),is_number(W),is_number(H) ->
@@ -210,7 +210,7 @@ drawEllipse(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F,W:64/?F,H:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawicon">external documentation</a>.
--spec drawIcon(This, Icon, X, Y, W, H) -> ok when
+-spec drawIcon(This, Icon, X, Y, W, H) -> 'ok' when
This::wxGraphicsContext(), Icon::wxIcon:wxIcon(), X::number(), Y::number(), W::number(), H::number().
drawIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef},X,Y,W,H)
when is_number(X),is_number(Y),is_number(W),is_number(H) ->
@@ -220,7 +220,7 @@ drawIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef},X,Y,W,H
<<ThisRef:32/?UI,IconRef:32/?UI,X:64/?F,Y:64/?F,W:64/?F,H:64/?F>>).
%% @equiv drawLines(This,Points, [])
--spec drawLines(This, Points) -> ok when
+-spec drawLines(This, Points) -> 'ok' when
This::wxGraphicsContext(), Points::[{X::float(), Y::float()}].
drawLines(This,Points)
@@ -229,9 +229,9 @@ drawLines(This,Points)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawlines">external documentation</a>.
%%<br /> FillStyle = integer
--spec drawLines(This, Points, [Option]) -> ok when
+-spec drawLines(This, Points, [Option]) -> 'ok' when
This::wxGraphicsContext(), Points::[{X::float(), Y::float()}],
- Option :: {fillStyle, wx:wx_enum()}.
+ Option :: {'fillStyle', wx:wx_enum()}.
drawLines(#wx_ref{type=ThisT,ref=ThisRef},Points, Options)
when is_list(Points),is_list(Options) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -243,7 +243,7 @@ drawLines(#wx_ref{type=ThisT,ref=ThisRef},Points, Options)
(<< <<X:64/?F,Y:64/?F>> || {X,Y} <- Points>>)/binary, BinOpt/binary>>).
%% @equiv drawPath(This,Path, [])
--spec drawPath(This, Path) -> ok when
+-spec drawPath(This, Path) -> 'ok' when
This::wxGraphicsContext(), Path::wxGraphicsPath:wxGraphicsPath().
drawPath(This,Path)
@@ -252,9 +252,9 @@ drawPath(This,Path)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawpath">external documentation</a>.
%%<br /> FillStyle = integer
--spec drawPath(This, Path, [Option]) -> ok when
+-spec drawPath(This, Path, [Option]) -> 'ok' when
This::wxGraphicsContext(), Path::wxGraphicsPath:wxGraphicsPath(),
- Option :: {fillStyle, wx:wx_enum()}.
+ Option :: {'fillStyle', wx:wx_enum()}.
drawPath(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PathT,ref=PathRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -266,7 +266,7 @@ drawPath(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PathT,ref=PathRef}, Option
<<ThisRef:32/?UI,PathRef:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawrectangle">external documentation</a>.
--spec drawRectangle(This, X, Y, W, H) -> ok when
+-spec drawRectangle(This, X, Y, W, H) -> 'ok' when
This::wxGraphicsContext(), X::number(), Y::number(), W::number(), H::number().
drawRectangle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
when is_number(X),is_number(Y),is_number(W),is_number(H) ->
@@ -275,7 +275,7 @@ drawRectangle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F,W:64/?F,H:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawroundedrectangle">external documentation</a>.
--spec drawRoundedRectangle(This, X, Y, W, H, Radius) -> ok when
+-spec drawRoundedRectangle(This, X, Y, W, H, Radius) -> 'ok' when
This::wxGraphicsContext(), X::number(), Y::number(), W::number(), H::number(), Radius::number().
drawRoundedRectangle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H,Radius)
when is_number(X),is_number(Y),is_number(W),is_number(H),is_number(Radius) ->
@@ -284,7 +284,7 @@ drawRoundedRectangle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H,Radius)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F,W:64/?F,H:64/?F,Radius:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawtext">external documentation</a>.
--spec drawText(This, Str, X, Y) -> ok when
+-spec drawText(This, Str, X, Y) -> 'ok' when
This::wxGraphicsContext(), Str::unicode:chardata(), X::number(), Y::number().
drawText(#wx_ref{type=ThisT,ref=ThisRef},Str,X,Y)
when is_list(Str),is_number(X),is_number(Y) ->
@@ -295,12 +295,12 @@ drawText(#wx_ref{type=ThisT,ref=ThisRef},Str,X,Y)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawtext">external documentation</a>.
%% <br /> Also:<br />
-%% drawText(This, Str, X, Y, BackgroundBrush) -> ok when<br />
+%% drawText(This, Str, X, Y, BackgroundBrush) -> 'ok' when<br />
%% This::wxGraphicsContext(), Str::unicode:chardata(), X::number(), Y::number(), BackgroundBrush::wxGraphicsBrush:wxGraphicsBrush().<br />
%%
--spec drawText(This, Str, X, Y, Angle) -> ok when
+-spec drawText(This, Str, X, Y, Angle) -> 'ok' when
This::wxGraphicsContext(), Str::unicode:chardata(), X::number(), Y::number(), Angle::number();
- (This, Str, X, Y, BackgroundBrush) -> ok when
+ (This, Str, X, Y, BackgroundBrush) -> 'ok' when
This::wxGraphicsContext(), Str::unicode:chardata(), X::number(), Y::number(), BackgroundBrush::wxGraphicsBrush:wxGraphicsBrush().
drawText(#wx_ref{type=ThisT,ref=ThisRef},Str,X,Y,Angle)
when is_list(Str),is_number(X),is_number(Y),is_number(Angle) ->
@@ -317,7 +317,7 @@ drawText(#wx_ref{type=ThisT,ref=ThisRef},Str,X,Y,#wx_ref{type=BackgroundBrushT,r
<<ThisRef:32/?UI,(byte_size(Str_UC)):32/?UI,(Str_UC)/binary, 0:(((8- ((0+byte_size(Str_UC)) band 16#7)) band 16#7))/unit:8,X:64/?F,Y:64/?F,BackgroundBrushRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextdrawtext">external documentation</a>.
--spec drawText(This, Str, X, Y, Angle, BackgroundBrush) -> ok when
+-spec drawText(This, Str, X, Y, Angle, BackgroundBrush) -> 'ok' when
This::wxGraphicsContext(), Str::unicode:chardata(), X::number(), Y::number(), Angle::number(), BackgroundBrush::wxGraphicsBrush:wxGraphicsBrush().
drawText(#wx_ref{type=ThisT,ref=ThisRef},Str,X,Y,Angle,#wx_ref{type=BackgroundBrushT,ref=BackgroundBrushRef})
when is_list(Str),is_number(X),is_number(Y),is_number(Angle) ->
@@ -328,7 +328,7 @@ drawText(#wx_ref{type=ThisT,ref=ThisRef},Str,X,Y,Angle,#wx_ref{type=BackgroundBr
<<ThisRef:32/?UI,(byte_size(Str_UC)):32/?UI,(Str_UC)/binary, 0:(((8- ((0+byte_size(Str_UC)) band 16#7)) band 16#7))/unit:8,X:64/?F,Y:64/?F,Angle:64/?F,BackgroundBrushRef:32/?UI>>).
%% @equiv fillPath(This,Path, [])
--spec fillPath(This, Path) -> ok when
+-spec fillPath(This, Path) -> 'ok' when
This::wxGraphicsContext(), Path::wxGraphicsPath:wxGraphicsPath().
fillPath(This,Path)
@@ -337,9 +337,9 @@ fillPath(This,Path)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextfillpath">external documentation</a>.
%%<br /> FillStyle = integer
--spec fillPath(This, Path, [Option]) -> ok when
+-spec fillPath(This, Path, [Option]) -> 'ok' when
This::wxGraphicsContext(), Path::wxGraphicsPath:wxGraphicsPath(),
- Option :: {fillStyle, wx:wx_enum()}.
+ Option :: {'fillStyle', wx:wx_enum()}.
fillPath(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PathT,ref=PathRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -351,7 +351,7 @@ fillPath(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PathT,ref=PathRef}, Option
<<ThisRef:32/?UI,PathRef:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextstrokepath">external documentation</a>.
--spec strokePath(This, Path) -> ok when
+-spec strokePath(This, Path) -> 'ok' when
This::wxGraphicsContext(), Path::wxGraphicsPath:wxGraphicsPath().
strokePath(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PathT,ref=PathRef}) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -381,7 +381,7 @@ getTextExtent(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextrotate">external documentation</a>.
--spec rotate(This, Angle) -> ok when
+-spec rotate(This, Angle) -> 'ok' when
This::wxGraphicsContext(), Angle::number().
rotate(#wx_ref{type=ThisT,ref=ThisRef},Angle)
when is_number(Angle) ->
@@ -390,7 +390,7 @@ rotate(#wx_ref{type=ThisT,ref=ThisRef},Angle)
<<ThisRef:32/?UI,0:32,Angle:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextscale">external documentation</a>.
--spec scale(This, XScale, YScale) -> ok when
+-spec scale(This, XScale, YScale) -> 'ok' when
This::wxGraphicsContext(), XScale::number(), YScale::number().
scale(#wx_ref{type=ThisT,ref=ThisRef},XScale,YScale)
when is_number(XScale),is_number(YScale) ->
@@ -399,7 +399,7 @@ scale(#wx_ref{type=ThisT,ref=ThisRef},XScale,YScale)
<<ThisRef:32/?UI,0:32,XScale:64/?F,YScale:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontexttranslate">external documentation</a>.
--spec translate(This, Dx, Dy) -> ok when
+-spec translate(This, Dx, Dy) -> 'ok' when
This::wxGraphicsContext(), Dx::number(), Dy::number().
translate(#wx_ref{type=ThisT,ref=ThisRef},Dx,Dy)
when is_number(Dx),is_number(Dy) ->
@@ -416,7 +416,7 @@ getTransform(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextsettransform">external documentation</a>.
--spec setTransform(This, Matrix) -> ok when
+-spec setTransform(This, Matrix) -> 'ok' when
This::wxGraphicsContext(), Matrix::wxGraphicsMatrix:wxGraphicsMatrix().
setTransform(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MatrixT,ref=MatrixRef}) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -425,7 +425,7 @@ setTransform(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MatrixT,ref=MatrixRef}
<<ThisRef:32/?UI,MatrixRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextconcattransform">external documentation</a>.
--spec concatTransform(This, Matrix) -> ok when
+-spec concatTransform(This, Matrix) -> 'ok' when
This::wxGraphicsContext(), Matrix::wxGraphicsMatrix:wxGraphicsMatrix().
concatTransform(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MatrixT,ref=MatrixRef}) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -434,7 +434,7 @@ concatTransform(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MatrixT,ref=MatrixR
<<ThisRef:32/?UI,MatrixRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextsetbrush">external documentation</a>.
--spec setBrush(This, Brush) -> ok when
+-spec setBrush(This, Brush) -> 'ok' when
This::wxGraphicsContext(), Brush::wxGraphicsBrush:wxGraphicsBrush() | wxBrush:wxBrush().
setBrush(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BrushT,ref=BrushRef}) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -448,7 +448,7 @@ setBrush(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BrushT,ref=BrushRef}) ->
<<ThisRef:32/?UI,BrushRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextsetfont">external documentation</a>.
--spec setFont(This, Font) -> ok when
+-spec setFont(This, Font) -> 'ok' when
This::wxGraphicsContext(), Font::wxGraphicsFont:wxGraphicsFont().
setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -457,7 +457,7 @@ setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextsetfont">external documentation</a>.
--spec setFont(This, Font, Colour) -> ok when
+-spec setFont(This, Font, Colour) -> 'ok' when
This::wxGraphicsContext(), Font::wxFont:wxFont(), Colour::wx:wx_colour().
setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -467,7 +467,7 @@ setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef},Colour)
<<ThisRef:32/?UI,FontRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextsetpen">external documentation</a>.
--spec setPen(This, Pen) -> ok when
+-spec setPen(This, Pen) -> 'ok' when
This::wxGraphicsContext(), Pen::wxPen:wxPen() | wxGraphicsPen:wxGraphicsPen().
setPen(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PenT,ref=PenRef}) ->
?CLASS(ThisT,wxGraphicsContext),
@@ -481,7 +481,7 @@ setPen(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PenT,ref=PenRef}) ->
<<ThisRef:32/?UI,PenRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextstrokeline">external documentation</a>.
--spec strokeLine(This, X1, Y1, X2, Y2) -> ok when
+-spec strokeLine(This, X1, Y1, X2, Y2) -> 'ok' when
This::wxGraphicsContext(), X1::number(), Y1::number(), X2::number(), Y2::number().
strokeLine(#wx_ref{type=ThisT,ref=ThisRef},X1,Y1,X2,Y2)
when is_number(X1),is_number(Y1),is_number(X2),is_number(Y2) ->
@@ -490,7 +490,7 @@ strokeLine(#wx_ref{type=ThisT,ref=ThisRef},X1,Y1,X2,Y2)
<<ThisRef:32/?UI,0:32,X1:64/?F,Y1:64/?F,X2:64/?F,Y2:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicscontext.html#wxgraphicscontextstrokelines">external documentation</a>.
--spec strokeLines(This, Points) -> ok when
+-spec strokeLines(This, Points) -> 'ok' when
This::wxGraphicsContext(), Points::[{X::float(), Y::float()}].
strokeLines(#wx_ref{type=ThisT,ref=ThisRef},Points)
when is_list(Points) ->
@@ -500,7 +500,7 @@ strokeLines(#wx_ref{type=ThisT,ref=ThisRef},Points)
(<< <<X:64/?F,Y:64/?F>> || {X,Y} <- Points>>)/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGraphicsContext()) -> ok.
+-spec destroy(This::wxGraphicsContext()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGraphicsContext),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxGraphicsMatrix.erl b/lib/wx/src/gen/wxGraphicsMatrix.erl
index b22e667fed..d388643ef7 100644
--- a/lib/wx/src/gen/wxGraphicsMatrix.erl
+++ b/lib/wx/src/gen/wxGraphicsMatrix.erl
@@ -41,7 +41,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxGraphicsMatrix() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicsmatrix.html#wxgraphicsmatrixconcat">external documentation</a>.
--spec concat(This, T) -> ok when
+-spec concat(This, T) -> 'ok' when
This::wxGraphicsMatrix(), T::wxGraphicsMatrix().
concat(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=TT,ref=TRef}) ->
?CLASS(ThisT,wxGraphicsMatrix),
@@ -59,7 +59,7 @@ get(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicsmatrix.html#wxgraphicsmatrixinvert">external documentation</a>.
--spec invert(This) -> ok when
+-spec invert(This) -> 'ok' when
This::wxGraphicsMatrix().
invert(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGraphicsMatrix),
@@ -84,7 +84,7 @@ isIdentity(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicsmatrix.html#wxgraphicsmatrixrotate">external documentation</a>.
--spec rotate(This, Angle) -> ok when
+-spec rotate(This, Angle) -> 'ok' when
This::wxGraphicsMatrix(), Angle::number().
rotate(#wx_ref{type=ThisT,ref=ThisRef},Angle)
when is_number(Angle) ->
@@ -93,7 +93,7 @@ rotate(#wx_ref{type=ThisT,ref=ThisRef},Angle)
<<ThisRef:32/?UI,0:32,Angle:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicsmatrix.html#wxgraphicsmatrixscale">external documentation</a>.
--spec scale(This, XScale, YScale) -> ok when
+-spec scale(This, XScale, YScale) -> 'ok' when
This::wxGraphicsMatrix(), XScale::number(), YScale::number().
scale(#wx_ref{type=ThisT,ref=ThisRef},XScale,YScale)
when is_number(XScale),is_number(YScale) ->
@@ -102,7 +102,7 @@ scale(#wx_ref{type=ThisT,ref=ThisRef},XScale,YScale)
<<ThisRef:32/?UI,0:32,XScale:64/?F,YScale:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicsmatrix.html#wxgraphicsmatrixtranslate">external documentation</a>.
--spec translate(This, Dx, Dy) -> ok when
+-spec translate(This, Dx, Dy) -> 'ok' when
This::wxGraphicsMatrix(), Dx::number(), Dy::number().
translate(#wx_ref{type=ThisT,ref=ThisRef},Dx,Dy)
when is_number(Dx),is_number(Dy) ->
@@ -111,7 +111,7 @@ translate(#wx_ref{type=ThisT,ref=ThisRef},Dx,Dy)
<<ThisRef:32/?UI,0:32,Dx:64/?F,Dy:64/?F>>).
%% @equiv set(This, [])
--spec set(This) -> ok when
+-spec set(This) -> 'ok' when
This::wxGraphicsMatrix().
set(This)
@@ -119,14 +119,14 @@ set(This)
set(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicsmatrix.html#wxgraphicsmatrixset">external documentation</a>.
--spec set(This, [Option]) -> ok when
+-spec set(This, [Option]) -> 'ok' when
This::wxGraphicsMatrix(),
- Option :: {a, number()}
- | {b, number()}
- | {c, number()}
- | {d, number()}
- | {tx, number()}
- | {ty, number()}.
+ Option :: {'a', number()}
+ | {'b', number()}
+ | {'c', number()}
+ | {'d', number()}
+ | {'tx', number()}
+ | {'ty', number()}.
set(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGraphicsMatrix),
diff --git a/lib/wx/src/gen/wxGraphicsObject.erl b/lib/wx/src/gen/wxGraphicsObject.erl
index f0e4d94785..8657b8d2eb 100644
--- a/lib/wx/src/gen/wxGraphicsObject.erl
+++ b/lib/wx/src/gen/wxGraphicsObject.erl
@@ -52,7 +52,7 @@ isNull(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGraphicsObject()) -> ok.
+-spec destroy(This::wxGraphicsObject()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGraphicsObject),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxGraphicsPath.erl b/lib/wx/src/gen/wxGraphicsPath.erl
index b2f7cd1785..266271d537 100644
--- a/lib/wx/src/gen/wxGraphicsPath.erl
+++ b/lib/wx/src/gen/wxGraphicsPath.erl
@@ -44,7 +44,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxGraphicsPath() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathmovetopoint">external documentation</a>.
--spec moveToPoint(This, P) -> ok when
+-spec moveToPoint(This, P) -> 'ok' when
This::wxGraphicsPath(), P::{X::float(), Y::float()}.
moveToPoint(#wx_ref{type=ThisT,ref=ThisRef},{PX,PY})
when is_number(PX),is_number(PY) ->
@@ -53,7 +53,7 @@ moveToPoint(#wx_ref{type=ThisT,ref=ThisRef},{PX,PY})
<<ThisRef:32/?UI,0:32,PX:64/?F,PY:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathmovetopoint">external documentation</a>.
--spec moveToPoint(This, X, Y) -> ok when
+-spec moveToPoint(This, X, Y) -> 'ok' when
This::wxGraphicsPath(), X::number(), Y::number().
moveToPoint(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_number(X),is_number(Y) ->
@@ -62,7 +62,7 @@ moveToPoint(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddarc">external documentation</a>.
--spec addArc(This, C, R, StartAngle, EndAngle, Clockwise) -> ok when
+-spec addArc(This, C, R, StartAngle, EndAngle, Clockwise) -> 'ok' when
This::wxGraphicsPath(), C::{X::float(), Y::float()}, R::number(), StartAngle::number(), EndAngle::number(), Clockwise::boolean().
addArc(#wx_ref{type=ThisT,ref=ThisRef},{CX,CY},R,StartAngle,EndAngle,Clockwise)
when is_number(CX),is_number(CY),is_number(R),is_number(StartAngle),is_number(EndAngle),is_boolean(Clockwise) ->
@@ -71,7 +71,7 @@ addArc(#wx_ref{type=ThisT,ref=ThisRef},{CX,CY},R,StartAngle,EndAngle,Clockwise)
<<ThisRef:32/?UI,0:32,CX:64/?F,CY:64/?F,R:64/?F,StartAngle:64/?F,EndAngle:64/?F,(wxe_util:from_bool(Clockwise)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddarc">external documentation</a>.
--spec addArc(This, X, Y, R, StartAngle, EndAngle, Clockwise) -> ok when
+-spec addArc(This, X, Y, R, StartAngle, EndAngle, Clockwise) -> 'ok' when
This::wxGraphicsPath(), X::number(), Y::number(), R::number(), StartAngle::number(), EndAngle::number(), Clockwise::boolean().
addArc(#wx_ref{type=ThisT,ref=ThisRef},X,Y,R,StartAngle,EndAngle,Clockwise)
when is_number(X),is_number(Y),is_number(R),is_number(StartAngle),is_number(EndAngle),is_boolean(Clockwise) ->
@@ -80,7 +80,7 @@ addArc(#wx_ref{type=ThisT,ref=ThisRef},X,Y,R,StartAngle,EndAngle,Clockwise)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F,R:64/?F,StartAngle:64/?F,EndAngle:64/?F,(wxe_util:from_bool(Clockwise)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddarctopoint">external documentation</a>.
--spec addArcToPoint(This, X1, Y1, X2, Y2, R) -> ok when
+-spec addArcToPoint(This, X1, Y1, X2, Y2, R) -> 'ok' when
This::wxGraphicsPath(), X1::number(), Y1::number(), X2::number(), Y2::number(), R::number().
addArcToPoint(#wx_ref{type=ThisT,ref=ThisRef},X1,Y1,X2,Y2,R)
when is_number(X1),is_number(Y1),is_number(X2),is_number(Y2),is_number(R) ->
@@ -89,7 +89,7 @@ addArcToPoint(#wx_ref{type=ThisT,ref=ThisRef},X1,Y1,X2,Y2,R)
<<ThisRef:32/?UI,0:32,X1:64/?F,Y1:64/?F,X2:64/?F,Y2:64/?F,R:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddcircle">external documentation</a>.
--spec addCircle(This, X, Y, R) -> ok when
+-spec addCircle(This, X, Y, R) -> 'ok' when
This::wxGraphicsPath(), X::number(), Y::number(), R::number().
addCircle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,R)
when is_number(X),is_number(Y),is_number(R) ->
@@ -98,7 +98,7 @@ addCircle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,R)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F,R:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddcurvetopoint">external documentation</a>.
--spec addCurveToPoint(This, C1, C2, E) -> ok when
+-spec addCurveToPoint(This, C1, C2, E) -> 'ok' when
This::wxGraphicsPath(), C1::{X::float(), Y::float()}, C2::{X::float(), Y::float()}, E::{X::float(), Y::float()}.
addCurveToPoint(#wx_ref{type=ThisT,ref=ThisRef},{C1X,C1Y},{C2X,C2Y},{EX,EY})
when is_number(C1X),is_number(C1Y),is_number(C2X),is_number(C2Y),is_number(EX),is_number(EY) ->
@@ -107,7 +107,7 @@ addCurveToPoint(#wx_ref{type=ThisT,ref=ThisRef},{C1X,C1Y},{C2X,C2Y},{EX,EY})
<<ThisRef:32/?UI,0:32,C1X:64/?F,C1Y:64/?F,C2X:64/?F,C2Y:64/?F,EX:64/?F,EY:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddcurvetopoint">external documentation</a>.
--spec addCurveToPoint(This, Cx1, Cy1, Cx2, Cy2, X, Y) -> ok when
+-spec addCurveToPoint(This, Cx1, Cy1, Cx2, Cy2, X, Y) -> 'ok' when
This::wxGraphicsPath(), Cx1::number(), Cy1::number(), Cx2::number(), Cy2::number(), X::number(), Y::number().
addCurveToPoint(#wx_ref{type=ThisT,ref=ThisRef},Cx1,Cy1,Cx2,Cy2,X,Y)
when is_number(Cx1),is_number(Cy1),is_number(Cx2),is_number(Cy2),is_number(X),is_number(Y) ->
@@ -116,7 +116,7 @@ addCurveToPoint(#wx_ref{type=ThisT,ref=ThisRef},Cx1,Cy1,Cx2,Cy2,X,Y)
<<ThisRef:32/?UI,0:32,Cx1:64/?F,Cy1:64/?F,Cx2:64/?F,Cy2:64/?F,X:64/?F,Y:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddellipse">external documentation</a>.
--spec addEllipse(This, X, Y, W, H) -> ok when
+-spec addEllipse(This, X, Y, W, H) -> 'ok' when
This::wxGraphicsPath(), X::number(), Y::number(), W::number(), H::number().
addEllipse(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
when is_number(X),is_number(Y),is_number(W),is_number(H) ->
@@ -125,7 +125,7 @@ addEllipse(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F,W:64/?F,H:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddlinetopoint">external documentation</a>.
--spec addLineToPoint(This, P) -> ok when
+-spec addLineToPoint(This, P) -> 'ok' when
This::wxGraphicsPath(), P::{X::float(), Y::float()}.
addLineToPoint(#wx_ref{type=ThisT,ref=ThisRef},{PX,PY})
when is_number(PX),is_number(PY) ->
@@ -134,7 +134,7 @@ addLineToPoint(#wx_ref{type=ThisT,ref=ThisRef},{PX,PY})
<<ThisRef:32/?UI,0:32,PX:64/?F,PY:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddlinetopoint">external documentation</a>.
--spec addLineToPoint(This, X, Y) -> ok when
+-spec addLineToPoint(This, X, Y) -> 'ok' when
This::wxGraphicsPath(), X::number(), Y::number().
addLineToPoint(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_number(X),is_number(Y) ->
@@ -143,7 +143,7 @@ addLineToPoint(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddpath">external documentation</a>.
--spec addPath(This, Path) -> ok when
+-spec addPath(This, Path) -> 'ok' when
This::wxGraphicsPath(), Path::wxGraphicsPath().
addPath(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PathT,ref=PathRef}) ->
?CLASS(ThisT,wxGraphicsPath),
@@ -152,7 +152,7 @@ addPath(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PathT,ref=PathRef}) ->
<<ThisRef:32/?UI,PathRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddquadcurvetopoint">external documentation</a>.
--spec addQuadCurveToPoint(This, Cx, Cy, X, Y) -> ok when
+-spec addQuadCurveToPoint(This, Cx, Cy, X, Y) -> 'ok' when
This::wxGraphicsPath(), Cx::number(), Cy::number(), X::number(), Y::number().
addQuadCurveToPoint(#wx_ref{type=ThisT,ref=ThisRef},Cx,Cy,X,Y)
when is_number(Cx),is_number(Cy),is_number(X),is_number(Y) ->
@@ -161,7 +161,7 @@ addQuadCurveToPoint(#wx_ref{type=ThisT,ref=ThisRef},Cx,Cy,X,Y)
<<ThisRef:32/?UI,0:32,Cx:64/?F,Cy:64/?F,X:64/?F,Y:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddrectangle">external documentation</a>.
--spec addRectangle(This, X, Y, W, H) -> ok when
+-spec addRectangle(This, X, Y, W, H) -> 'ok' when
This::wxGraphicsPath(), X::number(), Y::number(), W::number(), H::number().
addRectangle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
when is_number(X),is_number(Y),is_number(W),is_number(H) ->
@@ -170,7 +170,7 @@ addRectangle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F,W:64/?F,H:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathaddroundedrectangle">external documentation</a>.
--spec addRoundedRectangle(This, X, Y, W, H, Radius) -> ok when
+-spec addRoundedRectangle(This, X, Y, W, H, Radius) -> 'ok' when
This::wxGraphicsPath(), X::number(), Y::number(), W::number(), H::number(), Radius::number().
addRoundedRectangle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H,Radius)
when is_number(X),is_number(Y),is_number(W),is_number(H),is_number(Radius) ->
@@ -179,7 +179,7 @@ addRoundedRectangle(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H,Radius)
<<ThisRef:32/?UI,0:32,X:64/?F,Y:64/?F,W:64/?F,H:64/?F,Radius:64/?F>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathclosesubpath">external documentation</a>.
--spec closeSubpath(This) -> ok when
+-spec closeSubpath(This) -> 'ok' when
This::wxGraphicsPath().
closeSubpath(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGraphicsPath),
@@ -198,14 +198,14 @@ contains(This,C={CX,CY})
%% <br /> Also:<br />
%% contains(This, C, [Option]) -> boolean() when<br />
%% This::wxGraphicsPath(), C::{X::float(), Y::float()},<br />
-%% Option :: {fillStyle, wx:wx_enum()}.<br />
+%% Option :: {'fillStyle', wx:wx_enum()}.<br />
%%
%%<br /> FillStyle = integer
-spec contains(This, X, Y) -> boolean() when
This::wxGraphicsPath(), X::number(), Y::number();
(This, C, [Option]) -> boolean() when
This::wxGraphicsPath(), C::{X::float(), Y::float()},
- Option :: {fillStyle, wx:wx_enum()}.
+ Option :: {'fillStyle', wx:wx_enum()}.
contains(This,X,Y)
when is_record(This, wx_ref),is_number(X),is_number(Y) ->
@@ -223,7 +223,7 @@ contains(#wx_ref{type=ThisT,ref=ThisRef},{CX,CY}, Options)
%%<br /> FillStyle = integer
-spec contains(This, X, Y, [Option]) -> boolean() when
This::wxGraphicsPath(), X::number(), Y::number(),
- Option :: {fillStyle, wx:wx_enum()}.
+ Option :: {'fillStyle', wx:wx_enum()}.
contains(#wx_ref{type=ThisT,ref=ThisRef},X,Y, Options)
when is_number(X),is_number(Y),is_list(Options) ->
?CLASS(ThisT,wxGraphicsPath),
@@ -250,7 +250,7 @@ getCurrentPoint(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicspath.html#wxgraphicspathtransform">external documentation</a>.
--spec transform(This, Matrix) -> ok when
+-spec transform(This, Matrix) -> 'ok' when
This::wxGraphicsPath(), Matrix::wxGraphicsMatrix:wxGraphicsMatrix().
transform(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MatrixT,ref=MatrixRef}) ->
?CLASS(ThisT,wxGraphicsPath),
diff --git a/lib/wx/src/gen/wxGraphicsRenderer.erl b/lib/wx/src/gen/wxGraphicsRenderer.erl
index c28222fe24..a1b67476e3 100644
--- a/lib/wx/src/gen/wxGraphicsRenderer.erl
+++ b/lib/wx/src/gen/wxGraphicsRenderer.erl
@@ -106,7 +106,7 @@ createFont(This,Font)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicsrenderer.html#wxgraphicsrenderercreatefont">external documentation</a>.
-spec createFont(This, Font, [Option]) -> wxGraphicsFont:wxGraphicsFont() when
This::wxGraphicsRenderer(), Font::wxFont:wxFont(),
- Option :: {col, wx:wx_colour()}.
+ Option :: {'col', wx:wx_colour()}.
createFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGraphicsRenderer),
@@ -128,12 +128,12 @@ createMatrix(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgraphicsrenderer.html#wxgraphicsrenderercreatematrix">external documentation</a>.
-spec createMatrix(This, [Option]) -> wxGraphicsMatrix:wxGraphicsMatrix() when
This::wxGraphicsRenderer(),
- Option :: {a, number()}
- | {b, number()}
- | {c, number()}
- | {d, number()}
- | {tx, number()}
- | {ty, number()}.
+ Option :: {'a', number()}
+ | {'b', number()}
+ | {'c', number()}
+ | {'d', number()}
+ | {'tx', number()}
+ | {'ty', number()}.
createMatrix(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGraphicsRenderer),
diff --git a/lib/wx/src/gen/wxGrid.erl b/lib/wx/src/gen/wxGrid.erl
index 49bd89f188..a1533cbd9f 100644
--- a/lib/wx/src/gen/wxGrid.erl
+++ b/lib/wx/src/gen/wxGrid.erl
@@ -154,17 +154,17 @@ new(Parent,Id)
%% <br /> Also:<br />
%% new(Parent, Id, [Option]) -> wxGrid() when<br />
%% Parent::wxWindow:wxWindow(), Id::integer(),<br />
-%% Option :: {pos, {X::integer(), Y::integer()}}<br />
-%% | {size, {W::integer(), H::integer()}}<br />
-%% | {style, integer()}.<br />
+%% Option :: {'pos', {X::integer(), Y::integer()}}<br />
+%% | {'size', {W::integer(), H::integer()}}<br />
+%% | {'style', integer()}.<br />
%%
-spec new(Parent, X, Y) -> wxGrid() when
Parent::wxWindow:wxWindow(), X::integer(), Y::integer();
(Parent, Id, [Option]) -> wxGrid() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(Parent,X,Y)
when is_record(Parent, wx_ref),is_integer(X),is_integer(Y) ->
@@ -183,9 +183,9 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridwxgrid">external documentation</a>.
-spec new(Parent, X, Y, [Option]) -> wxGrid() when
Parent::wxWindow:wxWindow(), X::integer(), Y::integer(),
- Option :: {w, integer()}
- | {h, integer()}
- | {style, integer()}.
+ Option :: {'w', integer()}
+ | {'h', integer()}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},X,Y, Options)
when is_integer(X),is_integer(Y),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -208,8 +208,8 @@ appendCols(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridappendcols">external documentation</a>.
-spec appendCols(This, [Option]) -> boolean() when
This::wxGrid(),
- Option :: {numCols, integer()}
- | {updateLabels, boolean()}.
+ Option :: {'numCols', integer()}
+ | {'updateLabels', boolean()}.
appendCols(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -231,8 +231,8 @@ appendRows(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridappendrows">external documentation</a>.
-spec appendRows(This, [Option]) -> boolean() when
This::wxGrid(),
- Option :: {numRows, integer()}
- | {updateLabels, boolean()}.
+ Option :: {'numRows', integer()}
+ | {'updateLabels', boolean()}.
appendRows(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -244,7 +244,7 @@ appendRows(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridautosize">external documentation</a>.
--spec autoSize(This) -> ok when
+-spec autoSize(This) -> 'ok' when
This::wxGrid().
autoSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -252,7 +252,7 @@ autoSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv autoSizeColumn(This,Col, [])
--spec autoSizeColumn(This, Col) -> ok when
+-spec autoSizeColumn(This, Col) -> 'ok' when
This::wxGrid(), Col::integer().
autoSizeColumn(This,Col)
@@ -260,9 +260,9 @@ autoSizeColumn(This,Col)
autoSizeColumn(This,Col, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridautosizecolumn">external documentation</a>.
--spec autoSizeColumn(This, Col, [Option]) -> ok when
+-spec autoSizeColumn(This, Col, [Option]) -> 'ok' when
This::wxGrid(), Col::integer(),
- Option :: {setAsMin, boolean()}.
+ Option :: {'setAsMin', boolean()}.
autoSizeColumn(#wx_ref{type=ThisT,ref=ThisRef},Col, Options)
when is_integer(Col),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -273,7 +273,7 @@ autoSizeColumn(#wx_ref{type=ThisT,ref=ThisRef},Col, Options)
<<ThisRef:32/?UI,Col:32/?UI, BinOpt/binary>>).
%% @equiv autoSizeColumns(This, [])
--spec autoSizeColumns(This) -> ok when
+-spec autoSizeColumns(This) -> 'ok' when
This::wxGrid().
autoSizeColumns(This)
@@ -281,9 +281,9 @@ autoSizeColumns(This)
autoSizeColumns(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridautosizecolumns">external documentation</a>.
--spec autoSizeColumns(This, [Option]) -> ok when
+-spec autoSizeColumns(This, [Option]) -> 'ok' when
This::wxGrid(),
- Option :: {setAsMin, boolean()}.
+ Option :: {'setAsMin', boolean()}.
autoSizeColumns(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -294,7 +294,7 @@ autoSizeColumns(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv autoSizeRow(This,Row, [])
--spec autoSizeRow(This, Row) -> ok when
+-spec autoSizeRow(This, Row) -> 'ok' when
This::wxGrid(), Row::integer().
autoSizeRow(This,Row)
@@ -302,9 +302,9 @@ autoSizeRow(This,Row)
autoSizeRow(This,Row, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridautosizerow">external documentation</a>.
--spec autoSizeRow(This, Row, [Option]) -> ok when
+-spec autoSizeRow(This, Row, [Option]) -> 'ok' when
This::wxGrid(), Row::integer(),
- Option :: {setAsMin, boolean()}.
+ Option :: {'setAsMin', boolean()}.
autoSizeRow(#wx_ref{type=ThisT,ref=ThisRef},Row, Options)
when is_integer(Row),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -315,7 +315,7 @@ autoSizeRow(#wx_ref{type=ThisT,ref=ThisRef},Row, Options)
<<ThisRef:32/?UI,Row:32/?UI, BinOpt/binary>>).
%% @equiv autoSizeRows(This, [])
--spec autoSizeRows(This) -> ok when
+-spec autoSizeRows(This) -> 'ok' when
This::wxGrid().
autoSizeRows(This)
@@ -323,9 +323,9 @@ autoSizeRows(This)
autoSizeRows(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridautosizerows">external documentation</a>.
--spec autoSizeRows(This, [Option]) -> ok when
+-spec autoSizeRows(This, [Option]) -> 'ok' when
This::wxGrid(),
- Option :: {setAsMin, boolean()}.
+ Option :: {'setAsMin', boolean()}.
autoSizeRows(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -336,7 +336,7 @@ autoSizeRows(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridbeginbatch">external documentation</a>.
--spec beginBatch(This) -> ok when
+-spec beginBatch(This) -> 'ok' when
This::wxGrid().
beginBatch(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -403,7 +403,7 @@ cellToRect(#wx_ref{type=ThisT,ref=ThisRef},Row,Col)
<<ThisRef:32/?UI,Row:32/?UI,Col:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridcleargrid">external documentation</a>.
--spec clearGrid(This) -> ok when
+-spec clearGrid(This) -> 'ok' when
This::wxGrid().
clearGrid(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -411,7 +411,7 @@ clearGrid(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridclearselection">external documentation</a>.
--spec clearSelection(This) -> ok when
+-spec clearSelection(This) -> 'ok' when
This::wxGrid().
clearSelection(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -430,7 +430,7 @@ createGrid(This,NumRows,NumCols)
%%<br /> Selmode = ?wxGrid_wxGridSelectCells | ?wxGrid_wxGridSelectRows | ?wxGrid_wxGridSelectColumns
-spec createGrid(This, NumRows, NumCols, [Option]) -> boolean() when
This::wxGrid(), NumRows::integer(), NumCols::integer(),
- Option :: {selmode, wx:wx_enum()}.
+ Option :: {'selmode', wx:wx_enum()}.
createGrid(#wx_ref{type=ThisT,ref=ThisRef},NumRows,NumCols, Options)
when is_integer(NumRows),is_integer(NumCols),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -451,9 +451,9 @@ deleteCols(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgriddeletecols">external documentation</a>.
-spec deleteCols(This, [Option]) -> boolean() when
This::wxGrid(),
- Option :: {pos, integer()}
- | {numCols, integer()}
- | {updateLabels, boolean()}.
+ Option :: {'pos', integer()}
+ | {'numCols', integer()}
+ | {'updateLabels', boolean()}.
deleteCols(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -476,9 +476,9 @@ deleteRows(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgriddeleterows">external documentation</a>.
-spec deleteRows(This, [Option]) -> boolean() when
This::wxGrid(),
- Option :: {pos, integer()}
- | {numRows, integer()}
- | {updateLabels, boolean()}.
+ Option :: {'pos', integer()}
+ | {'numRows', integer()}
+ | {'updateLabels', boolean()}.
deleteRows(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -491,7 +491,7 @@ deleteRows(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgriddisablecelleditcontrol">external documentation</a>.
--spec disableCellEditControl(This) -> ok when
+-spec disableCellEditControl(This) -> 'ok' when
This::wxGrid().
disableCellEditControl(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -499,7 +499,7 @@ disableCellEditControl(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgriddisabledragcolsize">external documentation</a>.
--spec disableDragColSize(This) -> ok when
+-spec disableDragColSize(This) -> 'ok' when
This::wxGrid().
disableDragColSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -507,7 +507,7 @@ disableDragColSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgriddisabledraggridsize">external documentation</a>.
--spec disableDragGridSize(This) -> ok when
+-spec disableDragGridSize(This) -> 'ok' when
This::wxGrid().
disableDragGridSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -515,7 +515,7 @@ disableDragGridSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgriddisabledragrowsize">external documentation</a>.
--spec disableDragRowSize(This) -> ok when
+-spec disableDragRowSize(This) -> 'ok' when
This::wxGrid().
disableDragRowSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -523,7 +523,7 @@ disableDragRowSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv enableCellEditControl(This, [])
--spec enableCellEditControl(This) -> ok when
+-spec enableCellEditControl(This) -> 'ok' when
This::wxGrid().
enableCellEditControl(This)
@@ -531,9 +531,9 @@ enableCellEditControl(This)
enableCellEditControl(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridenablecelleditcontrol">external documentation</a>.
--spec enableCellEditControl(This, [Option]) -> ok when
+-spec enableCellEditControl(This, [Option]) -> 'ok' when
This::wxGrid(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enableCellEditControl(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -544,7 +544,7 @@ enableCellEditControl(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv enableDragColSize(This, [])
--spec enableDragColSize(This) -> ok when
+-spec enableDragColSize(This) -> 'ok' when
This::wxGrid().
enableDragColSize(This)
@@ -552,9 +552,9 @@ enableDragColSize(This)
enableDragColSize(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridenabledragcolsize">external documentation</a>.
--spec enableDragColSize(This, [Option]) -> ok when
+-spec enableDragColSize(This, [Option]) -> 'ok' when
This::wxGrid(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enableDragColSize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -565,7 +565,7 @@ enableDragColSize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv enableDragGridSize(This, [])
--spec enableDragGridSize(This) -> ok when
+-spec enableDragGridSize(This) -> 'ok' when
This::wxGrid().
enableDragGridSize(This)
@@ -573,9 +573,9 @@ enableDragGridSize(This)
enableDragGridSize(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridenabledraggridsize">external documentation</a>.
--spec enableDragGridSize(This, [Option]) -> ok when
+-spec enableDragGridSize(This, [Option]) -> 'ok' when
This::wxGrid(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enableDragGridSize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -586,7 +586,7 @@ enableDragGridSize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv enableDragRowSize(This, [])
--spec enableDragRowSize(This) -> ok when
+-spec enableDragRowSize(This) -> 'ok' when
This::wxGrid().
enableDragRowSize(This)
@@ -594,9 +594,9 @@ enableDragRowSize(This)
enableDragRowSize(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridenabledragrowsize">external documentation</a>.
--spec enableDragRowSize(This, [Option]) -> ok when
+-spec enableDragRowSize(This, [Option]) -> 'ok' when
This::wxGrid(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enableDragRowSize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -607,7 +607,7 @@ enableDragRowSize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridenableediting">external documentation</a>.
--spec enableEditing(This, Edit) -> ok when
+-spec enableEditing(This, Edit) -> 'ok' when
This::wxGrid(), Edit::boolean().
enableEditing(#wx_ref{type=ThisT,ref=ThisRef},Edit)
when is_boolean(Edit) ->
@@ -616,7 +616,7 @@ enableEditing(#wx_ref{type=ThisT,ref=ThisRef},Edit)
<<ThisRef:32/?UI,(wxe_util:from_bool(Edit)):32/?UI>>).
%% @equiv enableGridLines(This, [])
--spec enableGridLines(This) -> ok when
+-spec enableGridLines(This) -> 'ok' when
This::wxGrid().
enableGridLines(This)
@@ -624,9 +624,9 @@ enableGridLines(This)
enableGridLines(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridenablegridlines">external documentation</a>.
--spec enableGridLines(This, [Option]) -> ok when
+-spec enableGridLines(This, [Option]) -> 'ok' when
This::wxGrid(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enableGridLines(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -637,7 +637,7 @@ enableGridLines(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridendbatch">external documentation</a>.
--spec endBatch(This) -> ok when
+-spec endBatch(This) -> 'ok' when
This::wxGrid().
endBatch(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -645,7 +645,7 @@ endBatch(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridfit">external documentation</a>.
--spec fit(This) -> ok when
+-spec fit(This) -> 'ok' when
This::wxGrid().
fit(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -653,7 +653,7 @@ fit(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridforcerefresh">external documentation</a>.
--spec forceRefresh(This) -> ok when
+-spec forceRefresh(This) -> 'ok' when
This::wxGrid().
forceRefresh(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -1136,7 +1136,7 @@ getGridCornerLabelWindow(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridhidecelleditcontrol">external documentation</a>.
--spec hideCellEditControl(This) -> ok when
+-spec hideCellEditControl(This) -> 'ok' when
This::wxGrid().
hideCellEditControl(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -1154,9 +1154,9 @@ insertCols(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridinsertcols">external documentation</a>.
-spec insertCols(This, [Option]) -> boolean() when
This::wxGrid(),
- Option :: {pos, integer()}
- | {numCols, integer()}
- | {updateLabels, boolean()}.
+ Option :: {'pos', integer()}
+ | {'numCols', integer()}
+ | {'updateLabels', boolean()}.
insertCols(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1179,9 +1179,9 @@ insertRows(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridinsertrows">external documentation</a>.
-spec insertRows(This, [Option]) -> boolean() when
This::wxGrid(),
- Option :: {pos, integer()}
- | {numRows, integer()}
- | {updateLabels, boolean()}.
+ Option :: {'pos', integer()}
+ | {'numRows', integer()}
+ | {'updateLabels', boolean()}.
insertRows(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1264,13 +1264,13 @@ isVisible(This,Coords={CoordsR,CoordsC})
%% <br /> Also:<br />
%% isVisible(This, Coords, [Option]) -> boolean() when<br />
%% This::wxGrid(), Coords::{R::integer(), C::integer()},<br />
-%% Option :: {wholeCellVisible, boolean()}.<br />
+%% Option :: {'wholeCellVisible', boolean()}.<br />
%%
-spec isVisible(This, Row, Col) -> boolean() when
This::wxGrid(), Row::integer(), Col::integer();
(This, Coords, [Option]) -> boolean() when
This::wxGrid(), Coords::{R::integer(), C::integer()},
- Option :: {wholeCellVisible, boolean()}.
+ Option :: {'wholeCellVisible', boolean()}.
isVisible(This,Row,Col)
when is_record(This, wx_ref),is_integer(Row),is_integer(Col) ->
@@ -1287,7 +1287,7 @@ isVisible(#wx_ref{type=ThisT,ref=ThisRef},{CoordsR,CoordsC}, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridisvisible">external documentation</a>.
-spec isVisible(This, Row, Col, [Option]) -> boolean() when
This::wxGrid(), Row::integer(), Col::integer(),
- Option :: {wholeCellVisible, boolean()}.
+ Option :: {'wholeCellVisible', boolean()}.
isVisible(#wx_ref{type=ThisT,ref=ThisRef},Row,Col, Options)
when is_integer(Row),is_integer(Col),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1298,7 +1298,7 @@ isVisible(#wx_ref{type=ThisT,ref=ThisRef},Row,Col, Options)
<<ThisRef:32/?UI,Row:32/?UI,Col:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridmakecellvisible">external documentation</a>.
--spec makeCellVisible(This, Coords) -> ok when
+-spec makeCellVisible(This, Coords) -> 'ok' when
This::wxGrid(), Coords::{R::integer(), C::integer()}.
makeCellVisible(#wx_ref{type=ThisT,ref=ThisRef},{CoordsR,CoordsC})
when is_integer(CoordsR),is_integer(CoordsC) ->
@@ -1307,7 +1307,7 @@ makeCellVisible(#wx_ref{type=ThisT,ref=ThisRef},{CoordsR,CoordsC})
<<ThisRef:32/?UI,CoordsR:32/?UI,CoordsC:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridmakecellvisible">external documentation</a>.
--spec makeCellVisible(This, Row, Col) -> ok when
+-spec makeCellVisible(This, Row, Col) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer().
makeCellVisible(#wx_ref{type=ThisT,ref=ThisRef},Row,Col)
when is_integer(Row),is_integer(Col) ->
@@ -1404,7 +1404,7 @@ movePageUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridregisterdatatype">external documentation</a>.
--spec registerDataType(This, TypeName, Renderer, Editor) -> ok when
+-spec registerDataType(This, TypeName, Renderer, Editor) -> 'ok' when
This::wxGrid(), TypeName::unicode:chardata(), Renderer::wxGridCellRenderer:wxGridCellRenderer(), Editor::wxGridCellEditor:wxGridCellEditor().
registerDataType(#wx_ref{type=ThisT,ref=ThisRef},TypeName,#wx_ref{type=RendererT,ref=RendererRef},#wx_ref{type=EditorT,ref=EditorRef})
when is_list(TypeName) ->
@@ -1416,7 +1416,7 @@ registerDataType(#wx_ref{type=ThisT,ref=ThisRef},TypeName,#wx_ref{type=RendererT
<<ThisRef:32/?UI,(byte_size(TypeName_UC)):32/?UI,(TypeName_UC)/binary, 0:(((8- ((0+byte_size(TypeName_UC)) band 16#7)) band 16#7))/unit:8,RendererRef:32/?UI,EditorRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsaveeditcontrolvalue">external documentation</a>.
--spec saveEditControlValue(This) -> ok when
+-spec saveEditControlValue(This) -> 'ok' when
This::wxGrid().
saveEditControlValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -1424,7 +1424,7 @@ saveEditControlValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridselectall">external documentation</a>.
--spec selectAll(This) -> ok when
+-spec selectAll(This) -> 'ok' when
This::wxGrid().
selectAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -1432,7 +1432,7 @@ selectAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv selectBlock(This,TopLeft,BottomRight, [])
--spec selectBlock(This, TopLeft, BottomRight) -> ok when
+-spec selectBlock(This, TopLeft, BottomRight) -> 'ok' when
This::wxGrid(), TopLeft::{R::integer(), C::integer()}, BottomRight::{R::integer(), C::integer()}.
selectBlock(This,TopLeft={TopLeftR,TopLeftC},BottomRight={BottomRightR,BottomRightC})
@@ -1440,9 +1440,9 @@ selectBlock(This,TopLeft={TopLeftR,TopLeftC},BottomRight={BottomRightR,BottomRig
selectBlock(This,TopLeft,BottomRight, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridselectblock">external documentation</a>.
--spec selectBlock(This, TopLeft, BottomRight, [Option]) -> ok when
+-spec selectBlock(This, TopLeft, BottomRight, [Option]) -> 'ok' when
This::wxGrid(), TopLeft::{R::integer(), C::integer()}, BottomRight::{R::integer(), C::integer()},
- Option :: {addToSelected, boolean()}.
+ Option :: {'addToSelected', boolean()}.
selectBlock(#wx_ref{type=ThisT,ref=ThisRef},{TopLeftR,TopLeftC},{BottomRightR,BottomRightC}, Options)
when is_integer(TopLeftR),is_integer(TopLeftC),is_integer(BottomRightR),is_integer(BottomRightC),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1453,7 +1453,7 @@ selectBlock(#wx_ref{type=ThisT,ref=ThisRef},{TopLeftR,TopLeftC},{BottomRightR,Bo
<<ThisRef:32/?UI,TopLeftR:32/?UI,TopLeftC:32/?UI,BottomRightR:32/?UI,BottomRightC:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv selectBlock(This,TopRow,LeftCol,BottomRow,RightCol, [])
--spec selectBlock(This, TopRow, LeftCol, BottomRow, RightCol) -> ok when
+-spec selectBlock(This, TopRow, LeftCol, BottomRow, RightCol) -> 'ok' when
This::wxGrid(), TopRow::integer(), LeftCol::integer(), BottomRow::integer(), RightCol::integer().
selectBlock(This,TopRow,LeftCol,BottomRow,RightCol)
@@ -1461,9 +1461,9 @@ selectBlock(This,TopRow,LeftCol,BottomRow,RightCol)
selectBlock(This,TopRow,LeftCol,BottomRow,RightCol, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridselectblock">external documentation</a>.
--spec selectBlock(This, TopRow, LeftCol, BottomRow, RightCol, [Option]) -> ok when
+-spec selectBlock(This, TopRow, LeftCol, BottomRow, RightCol, [Option]) -> 'ok' when
This::wxGrid(), TopRow::integer(), LeftCol::integer(), BottomRow::integer(), RightCol::integer(),
- Option :: {addToSelected, boolean()}.
+ Option :: {'addToSelected', boolean()}.
selectBlock(#wx_ref{type=ThisT,ref=ThisRef},TopRow,LeftCol,BottomRow,RightCol, Options)
when is_integer(TopRow),is_integer(LeftCol),is_integer(BottomRow),is_integer(RightCol),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1474,7 +1474,7 @@ selectBlock(#wx_ref{type=ThisT,ref=ThisRef},TopRow,LeftCol,BottomRow,RightCol, O
<<ThisRef:32/?UI,TopRow:32/?UI,LeftCol:32/?UI,BottomRow:32/?UI,RightCol:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv selectCol(This,Col, [])
--spec selectCol(This, Col) -> ok when
+-spec selectCol(This, Col) -> 'ok' when
This::wxGrid(), Col::integer().
selectCol(This,Col)
@@ -1482,9 +1482,9 @@ selectCol(This,Col)
selectCol(This,Col, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridselectcol">external documentation</a>.
--spec selectCol(This, Col, [Option]) -> ok when
+-spec selectCol(This, Col, [Option]) -> 'ok' when
This::wxGrid(), Col::integer(),
- Option :: {addToSelected, boolean()}.
+ Option :: {'addToSelected', boolean()}.
selectCol(#wx_ref{type=ThisT,ref=ThisRef},Col, Options)
when is_integer(Col),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1495,7 +1495,7 @@ selectCol(#wx_ref{type=ThisT,ref=ThisRef},Col, Options)
<<ThisRef:32/?UI,Col:32/?UI, BinOpt/binary>>).
%% @equiv selectRow(This,Row, [])
--spec selectRow(This, Row) -> ok when
+-spec selectRow(This, Row) -> 'ok' when
This::wxGrid(), Row::integer().
selectRow(This,Row)
@@ -1503,9 +1503,9 @@ selectRow(This,Row)
selectRow(This,Row, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridselectrow">external documentation</a>.
--spec selectRow(This, Row, [Option]) -> ok when
+-spec selectRow(This, Row, [Option]) -> 'ok' when
This::wxGrid(), Row::integer(),
- Option :: {addToSelected, boolean()}.
+ Option :: {'addToSelected', boolean()}.
selectRow(#wx_ref{type=ThisT,ref=ThisRef},Row, Options)
when is_integer(Row),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1516,7 +1516,7 @@ selectRow(#wx_ref{type=ThisT,ref=ThisRef},Row, Options)
<<ThisRef:32/?UI,Row:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcellalignment">external documentation</a>.
--spec setCellAlignment(This, Align) -> ok when
+-spec setCellAlignment(This, Align) -> 'ok' when
This::wxGrid(), Align::integer().
setCellAlignment(#wx_ref{type=ThisT,ref=ThisRef},Align)
when is_integer(Align) ->
@@ -1525,7 +1525,7 @@ setCellAlignment(#wx_ref{type=ThisT,ref=ThisRef},Align)
<<ThisRef:32/?UI,Align:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcellalignment">external documentation</a>.
--spec setCellAlignment(This, Align, Row, Col) -> ok when
+-spec setCellAlignment(This, Align, Row, Col) -> 'ok' when
This::wxGrid(), Align::integer(), Row::integer(), Col::integer().
setCellAlignment(#wx_ref{type=ThisT,ref=ThisRef},Align,Row,Col)
when is_integer(Align),is_integer(Row),is_integer(Col) ->
@@ -1534,7 +1534,7 @@ setCellAlignment(#wx_ref{type=ThisT,ref=ThisRef},Align,Row,Col)
<<ThisRef:32/?UI,Align:32/?UI,Row:32/?UI,Col:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcellalignment">external documentation</a>.
--spec setCellAlignment(This, Row, Col, Horiz, Vert) -> ok when
+-spec setCellAlignment(This, Row, Col, Horiz, Vert) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer(), Horiz::integer(), Vert::integer().
setCellAlignment(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,Horiz,Vert)
when is_integer(Row),is_integer(Col),is_integer(Horiz),is_integer(Vert) ->
@@ -1543,7 +1543,7 @@ setCellAlignment(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,Horiz,Vert)
<<ThisRef:32/?UI,Row:32/?UI,Col:32/?UI,Horiz:32/?UI,Vert:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcellbackgroundcolour">external documentation</a>.
--spec setCellBackgroundColour(This, Col) -> ok when
+-spec setCellBackgroundColour(This, Col) -> 'ok' when
This::wxGrid(), Col::wx:wx_colour().
setCellBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
when tuple_size(Col) =:= 3; tuple_size(Col) =:= 4 ->
@@ -1553,12 +1553,12 @@ setCellBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcellbackgroundcolour">external documentation</a>.
%% <br /> Also:<br />
-%% setCellBackgroundColour(This, Colour, Row, Col) -> ok when<br />
+%% setCellBackgroundColour(This, Colour, Row, Col) -> 'ok' when<br />
%% This::wxGrid(), Colour::wx:wx_colour(), Row::integer(), Col::integer().<br />
%%
--spec setCellBackgroundColour(This, Row, Col, Val) -> ok when
+-spec setCellBackgroundColour(This, Row, Col, Val) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer(), Val::wx:wx_colour();
- (This, Colour, Row, Col) -> ok when
+ (This, Colour, Row, Col) -> 'ok' when
This::wxGrid(), Colour::wx:wx_colour(), Row::integer(), Col::integer().
setCellBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,Val)
when is_integer(Row),is_integer(Col),tuple_size(Val) =:= 3; tuple_size(Val) =:= 4 ->
@@ -1572,7 +1572,7 @@ setCellBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Colour,Row,Col)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary,Row:32/?UI,Col:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcelleditor">external documentation</a>.
--spec setCellEditor(This, Row, Col, Editor) -> ok when
+-spec setCellEditor(This, Row, Col, Editor) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer(), Editor::wxGridCellEditor:wxGridCellEditor().
setCellEditor(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,#wx_ref{type=EditorT,ref=EditorRef})
when is_integer(Row),is_integer(Col) ->
@@ -1582,7 +1582,7 @@ setCellEditor(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,#wx_ref{type=EditorT,ref=E
<<ThisRef:32/?UI,Row:32/?UI,Col:32/?UI,EditorRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcellfont">external documentation</a>.
--spec setCellFont(This, Row, Col, Val) -> ok when
+-spec setCellFont(This, Row, Col, Val) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer(), Val::wxFont:wxFont().
setCellFont(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,#wx_ref{type=ValT,ref=ValRef})
when is_integer(Row),is_integer(Col) ->
@@ -1592,7 +1592,7 @@ setCellFont(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,#wx_ref{type=ValT,ref=ValRef
<<ThisRef:32/?UI,Row:32/?UI,Col:32/?UI,ValRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcellrenderer">external documentation</a>.
--spec setCellRenderer(This, Row, Col, Renderer) -> ok when
+-spec setCellRenderer(This, Row, Col, Renderer) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer(), Renderer::wxGridCellRenderer:wxGridCellRenderer().
setCellRenderer(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,#wx_ref{type=RendererT,ref=RendererRef})
when is_integer(Row),is_integer(Col) ->
@@ -1602,7 +1602,7 @@ setCellRenderer(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,#wx_ref{type=RendererT,r
<<ThisRef:32/?UI,Row:32/?UI,Col:32/?UI,RendererRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcelltextcolour">external documentation</a>.
--spec setCellTextColour(This, Col) -> ok when
+-spec setCellTextColour(This, Col) -> 'ok' when
This::wxGrid(), Col::wx:wx_colour().
setCellTextColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
when tuple_size(Col) =:= 3; tuple_size(Col) =:= 4 ->
@@ -1612,12 +1612,12 @@ setCellTextColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcelltextcolour">external documentation</a>.
%% <br /> Also:<br />
-%% setCellTextColour(This, Val, Row, Col) -> ok when<br />
+%% setCellTextColour(This, Val, Row, Col) -> 'ok' when<br />
%% This::wxGrid(), Val::wx:wx_colour(), Row::integer(), Col::integer().<br />
%%
--spec setCellTextColour(This, Row, Col, Val) -> ok when
+-spec setCellTextColour(This, Row, Col, Val) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer(), Val::wx:wx_colour();
- (This, Val, Row, Col) -> ok when
+ (This, Val, Row, Col) -> 'ok' when
This::wxGrid(), Val::wx:wx_colour(), Row::integer(), Col::integer().
setCellTextColour(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,Val)
when is_integer(Row),is_integer(Col),tuple_size(Val) =:= 3; tuple_size(Val) =:= 4 ->
@@ -1631,7 +1631,7 @@ setCellTextColour(#wx_ref{type=ThisT,ref=ThisRef},Val,Row,Col)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Val)):16/binary,Row:32/?UI,Col:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcellvalue">external documentation</a>.
--spec setCellValue(This, Coords, S) -> ok when
+-spec setCellValue(This, Coords, S) -> 'ok' when
This::wxGrid(), Coords::{R::integer(), C::integer()}, S::unicode:chardata().
setCellValue(#wx_ref{type=ThisT,ref=ThisRef},{CoordsR,CoordsC},S)
when is_integer(CoordsR),is_integer(CoordsC),is_list(S) ->
@@ -1642,12 +1642,12 @@ setCellValue(#wx_ref{type=ThisT,ref=ThisRef},{CoordsR,CoordsC},S)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcellvalue">external documentation</a>.
%% <br /> Also:<br />
-%% setCellValue(This, Val, Row, Col) -> ok when<br />
+%% setCellValue(This, Val, Row, Col) -> 'ok' when<br />
%% This::wxGrid(), Val::unicode:chardata(), Row::integer(), Col::integer().<br />
%%
--spec setCellValue(This, Row, Col, S) -> ok when
+-spec setCellValue(This, Row, Col, S) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer(), S::unicode:chardata();
- (This, Val, Row, Col) -> ok when
+ (This, Val, Row, Col) -> 'ok' when
This::wxGrid(), Val::unicode:chardata(), Row::integer(), Col::integer().
setCellValue(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,S)
when is_integer(Row),is_integer(Col),is_list(S) ->
@@ -1663,7 +1663,7 @@ setCellValue(#wx_ref{type=ThisT,ref=ThisRef},Val,Row,Col)
<<ThisRef:32/?UI,(byte_size(Val_UC)):32/?UI,(Val_UC)/binary, 0:(((8- ((0+byte_size(Val_UC)) band 16#7)) band 16#7))/unit:8,Row:32/?UI,Col:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcolattr">external documentation</a>.
--spec setColAttr(This, Col, Attr) -> ok when
+-spec setColAttr(This, Col, Attr) -> 'ok' when
This::wxGrid(), Col::integer(), Attr::wxGridCellAttr:wxGridCellAttr().
setColAttr(#wx_ref{type=ThisT,ref=ThisRef},Col,#wx_ref{type=AttrT,ref=AttrRef})
when is_integer(Col) ->
@@ -1673,7 +1673,7 @@ setColAttr(#wx_ref{type=ThisT,ref=ThisRef},Col,#wx_ref{type=AttrT,ref=AttrRef})
<<ThisRef:32/?UI,Col:32/?UI,AttrRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcolformatbool">external documentation</a>.
--spec setColFormatBool(This, Col) -> ok when
+-spec setColFormatBool(This, Col) -> 'ok' when
This::wxGrid(), Col::integer().
setColFormatBool(#wx_ref{type=ThisT,ref=ThisRef},Col)
when is_integer(Col) ->
@@ -1682,7 +1682,7 @@ setColFormatBool(#wx_ref{type=ThisT,ref=ThisRef},Col)
<<ThisRef:32/?UI,Col:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcolformatnumber">external documentation</a>.
--spec setColFormatNumber(This, Col) -> ok when
+-spec setColFormatNumber(This, Col) -> 'ok' when
This::wxGrid(), Col::integer().
setColFormatNumber(#wx_ref{type=ThisT,ref=ThisRef},Col)
when is_integer(Col) ->
@@ -1691,7 +1691,7 @@ setColFormatNumber(#wx_ref{type=ThisT,ref=ThisRef},Col)
<<ThisRef:32/?UI,Col:32/?UI>>).
%% @equiv setColFormatFloat(This,Col, [])
--spec setColFormatFloat(This, Col) -> ok when
+-spec setColFormatFloat(This, Col) -> 'ok' when
This::wxGrid(), Col::integer().
setColFormatFloat(This,Col)
@@ -1699,10 +1699,10 @@ setColFormatFloat(This,Col)
setColFormatFloat(This,Col, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcolformatfloat">external documentation</a>.
--spec setColFormatFloat(This, Col, [Option]) -> ok when
+-spec setColFormatFloat(This, Col, [Option]) -> 'ok' when
This::wxGrid(), Col::integer(),
- Option :: {width, integer()}
- | {precision, integer()}.
+ Option :: {'width', integer()}
+ | {'precision', integer()}.
setColFormatFloat(#wx_ref{type=ThisT,ref=ThisRef},Col, Options)
when is_integer(Col),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1714,7 +1714,7 @@ setColFormatFloat(#wx_ref{type=ThisT,ref=ThisRef},Col, Options)
<<ThisRef:32/?UI,Col:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcolformatcustom">external documentation</a>.
--spec setColFormatCustom(This, Col, TypeName) -> ok when
+-spec setColFormatCustom(This, Col, TypeName) -> 'ok' when
This::wxGrid(), Col::integer(), TypeName::unicode:chardata().
setColFormatCustom(#wx_ref{type=ThisT,ref=ThisRef},Col,TypeName)
when is_integer(Col),is_list(TypeName) ->
@@ -1724,7 +1724,7 @@ setColFormatCustom(#wx_ref{type=ThisT,ref=ThisRef},Col,TypeName)
<<ThisRef:32/?UI,Col:32/?UI,(byte_size(TypeName_UC)):32/?UI,(TypeName_UC)/binary, 0:(((8- ((4+byte_size(TypeName_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcollabelalignment">external documentation</a>.
--spec setColLabelAlignment(This, Horiz, Vert) -> ok when
+-spec setColLabelAlignment(This, Horiz, Vert) -> 'ok' when
This::wxGrid(), Horiz::integer(), Vert::integer().
setColLabelAlignment(#wx_ref{type=ThisT,ref=ThisRef},Horiz,Vert)
when is_integer(Horiz),is_integer(Vert) ->
@@ -1733,7 +1733,7 @@ setColLabelAlignment(#wx_ref{type=ThisT,ref=ThisRef},Horiz,Vert)
<<ThisRef:32/?UI,Horiz:32/?UI,Vert:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcollabelsize">external documentation</a>.
--spec setColLabelSize(This, Height) -> ok when
+-spec setColLabelSize(This, Height) -> 'ok' when
This::wxGrid(), Height::integer().
setColLabelSize(#wx_ref{type=ThisT,ref=ThisRef},Height)
when is_integer(Height) ->
@@ -1742,7 +1742,7 @@ setColLabelSize(#wx_ref{type=ThisT,ref=ThisRef},Height)
<<ThisRef:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcollabelvalue">external documentation</a>.
--spec setColLabelValue(This, Col, Val) -> ok when
+-spec setColLabelValue(This, Col, Val) -> 'ok' when
This::wxGrid(), Col::integer(), Val::unicode:chardata().
setColLabelValue(#wx_ref{type=ThisT,ref=ThisRef},Col,Val)
when is_integer(Col),is_list(Val) ->
@@ -1752,7 +1752,7 @@ setColLabelValue(#wx_ref{type=ThisT,ref=ThisRef},Col,Val)
<<ThisRef:32/?UI,Col:32/?UI,(byte_size(Val_UC)):32/?UI,(Val_UC)/binary, 0:(((8- ((4+byte_size(Val_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcolminimalwidth">external documentation</a>.
--spec setColMinimalWidth(This, Col, Width) -> ok when
+-spec setColMinimalWidth(This, Col, Width) -> 'ok' when
This::wxGrid(), Col::integer(), Width::integer().
setColMinimalWidth(#wx_ref{type=ThisT,ref=ThisRef},Col,Width)
when is_integer(Col),is_integer(Width) ->
@@ -1761,7 +1761,7 @@ setColMinimalWidth(#wx_ref{type=ThisT,ref=ThisRef},Col,Width)
<<ThisRef:32/?UI,Col:32/?UI,Width:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcolminimalacceptablewidth">external documentation</a>.
--spec setColMinimalAcceptableWidth(This, Width) -> ok when
+-spec setColMinimalAcceptableWidth(This, Width) -> 'ok' when
This::wxGrid(), Width::integer().
setColMinimalAcceptableWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
when is_integer(Width) ->
@@ -1770,7 +1770,7 @@ setColMinimalAcceptableWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
<<ThisRef:32/?UI,Width:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetcolsize">external documentation</a>.
--spec setColSize(This, Col, Width) -> ok when
+-spec setColSize(This, Col, Width) -> 'ok' when
This::wxGrid(), Col::integer(), Width::integer().
setColSize(#wx_ref{type=ThisT,ref=ThisRef},Col,Width)
when is_integer(Col),is_integer(Width) ->
@@ -1779,7 +1779,7 @@ setColSize(#wx_ref{type=ThisT,ref=ThisRef},Col,Width)
<<ThisRef:32/?UI,Col:32/?UI,Width:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetdefaultcellalignment">external documentation</a>.
--spec setDefaultCellAlignment(This, Horiz, Vert) -> ok when
+-spec setDefaultCellAlignment(This, Horiz, Vert) -> 'ok' when
This::wxGrid(), Horiz::integer(), Vert::integer().
setDefaultCellAlignment(#wx_ref{type=ThisT,ref=ThisRef},Horiz,Vert)
when is_integer(Horiz),is_integer(Vert) ->
@@ -1788,7 +1788,7 @@ setDefaultCellAlignment(#wx_ref{type=ThisT,ref=ThisRef},Horiz,Vert)
<<ThisRef:32/?UI,Horiz:32/?UI,Vert:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetdefaultcellbackgroundcolour">external documentation</a>.
--spec setDefaultCellBackgroundColour(This, Val) -> ok when
+-spec setDefaultCellBackgroundColour(This, Val) -> 'ok' when
This::wxGrid(), Val::wx:wx_colour().
setDefaultCellBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
when tuple_size(Val) =:= 3; tuple_size(Val) =:= 4 ->
@@ -1797,7 +1797,7 @@ setDefaultCellBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Val)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetdefaultcellfont">external documentation</a>.
--spec setDefaultCellFont(This, Val) -> ok when
+-spec setDefaultCellFont(This, Val) -> 'ok' when
This::wxGrid(), Val::wxFont:wxFont().
setDefaultCellFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ValT,ref=ValRef}) ->
?CLASS(ThisT,wxGrid),
@@ -1806,7 +1806,7 @@ setDefaultCellFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ValT,ref=ValRef}
<<ThisRef:32/?UI,ValRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetdefaultcelltextcolour">external documentation</a>.
--spec setDefaultCellTextColour(This, Val) -> ok when
+-spec setDefaultCellTextColour(This, Val) -> 'ok' when
This::wxGrid(), Val::wx:wx_colour().
setDefaultCellTextColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
when tuple_size(Val) =:= 3; tuple_size(Val) =:= 4 ->
@@ -1815,7 +1815,7 @@ setDefaultCellTextColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Val)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetdefaulteditor">external documentation</a>.
--spec setDefaultEditor(This, Editor) -> ok when
+-spec setDefaultEditor(This, Editor) -> 'ok' when
This::wxGrid(), Editor::wxGridCellEditor:wxGridCellEditor().
setDefaultEditor(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=EditorT,ref=EditorRef}) ->
?CLASS(ThisT,wxGrid),
@@ -1824,7 +1824,7 @@ setDefaultEditor(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=EditorT,ref=Editor
<<ThisRef:32/?UI,EditorRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetdefaultrenderer">external documentation</a>.
--spec setDefaultRenderer(This, Renderer) -> ok when
+-spec setDefaultRenderer(This, Renderer) -> 'ok' when
This::wxGrid(), Renderer::wxGridCellRenderer:wxGridCellRenderer().
setDefaultRenderer(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=RendererT,ref=RendererRef}) ->
?CLASS(ThisT,wxGrid),
@@ -1833,7 +1833,7 @@ setDefaultRenderer(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=RendererT,ref=Re
<<ThisRef:32/?UI,RendererRef:32/?UI>>).
%% @equiv setDefaultColSize(This,Width, [])
--spec setDefaultColSize(This, Width) -> ok when
+-spec setDefaultColSize(This, Width) -> 'ok' when
This::wxGrid(), Width::integer().
setDefaultColSize(This,Width)
@@ -1841,9 +1841,9 @@ setDefaultColSize(This,Width)
setDefaultColSize(This,Width, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetdefaultcolsize">external documentation</a>.
--spec setDefaultColSize(This, Width, [Option]) -> ok when
+-spec setDefaultColSize(This, Width, [Option]) -> 'ok' when
This::wxGrid(), Width::integer(),
- Option :: {resizeExistingCols, boolean()}.
+ Option :: {'resizeExistingCols', boolean()}.
setDefaultColSize(#wx_ref{type=ThisT,ref=ThisRef},Width, Options)
when is_integer(Width),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1854,7 +1854,7 @@ setDefaultColSize(#wx_ref{type=ThisT,ref=ThisRef},Width, Options)
<<ThisRef:32/?UI,Width:32/?UI, BinOpt/binary>>).
%% @equiv setDefaultRowSize(This,Height, [])
--spec setDefaultRowSize(This, Height) -> ok when
+-spec setDefaultRowSize(This, Height) -> 'ok' when
This::wxGrid(), Height::integer().
setDefaultRowSize(This,Height)
@@ -1862,9 +1862,9 @@ setDefaultRowSize(This,Height)
setDefaultRowSize(This,Height, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetdefaultrowsize">external documentation</a>.
--spec setDefaultRowSize(This, Height, [Option]) -> ok when
+-spec setDefaultRowSize(This, Height, [Option]) -> 'ok' when
This::wxGrid(), Height::integer(),
- Option :: {resizeExistingRows, boolean()}.
+ Option :: {'resizeExistingRows', boolean()}.
setDefaultRowSize(#wx_ref{type=ThisT,ref=ThisRef},Height, Options)
when is_integer(Height),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1875,7 +1875,7 @@ setDefaultRowSize(#wx_ref{type=ThisT,ref=ThisRef},Height, Options)
<<ThisRef:32/?UI,Height:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetgridcursor">external documentation</a>.
--spec setGridCursor(This, Row, Col) -> ok when
+-spec setGridCursor(This, Row, Col) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer().
setGridCursor(#wx_ref{type=ThisT,ref=ThisRef},Row,Col)
when is_integer(Row),is_integer(Col) ->
@@ -1884,7 +1884,7 @@ setGridCursor(#wx_ref{type=ThisT,ref=ThisRef},Row,Col)
<<ThisRef:32/?UI,Row:32/?UI,Col:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetgridlinecolour">external documentation</a>.
--spec setGridLineColour(This, Val) -> ok when
+-spec setGridLineColour(This, Val) -> 'ok' when
This::wxGrid(), Val::wx:wx_colour().
setGridLineColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
when tuple_size(Val) =:= 3; tuple_size(Val) =:= 4 ->
@@ -1893,7 +1893,7 @@ setGridLineColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Val)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetlabelbackgroundcolour">external documentation</a>.
--spec setLabelBackgroundColour(This, Val) -> ok when
+-spec setLabelBackgroundColour(This, Val) -> 'ok' when
This::wxGrid(), Val::wx:wx_colour().
setLabelBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
when tuple_size(Val) =:= 3; tuple_size(Val) =:= 4 ->
@@ -1902,7 +1902,7 @@ setLabelBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Val)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetlabelfont">external documentation</a>.
--spec setLabelFont(This, Val) -> ok when
+-spec setLabelFont(This, Val) -> 'ok' when
This::wxGrid(), Val::wxFont:wxFont().
setLabelFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ValT,ref=ValRef}) ->
?CLASS(ThisT,wxGrid),
@@ -1911,7 +1911,7 @@ setLabelFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ValT,ref=ValRef}) ->
<<ThisRef:32/?UI,ValRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetlabeltextcolour">external documentation</a>.
--spec setLabelTextColour(This, Val) -> ok when
+-spec setLabelTextColour(This, Val) -> 'ok' when
This::wxGrid(), Val::wx:wx_colour().
setLabelTextColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
when tuple_size(Val) =:= 3; tuple_size(Val) =:= 4 ->
@@ -1920,7 +1920,7 @@ setLabelTextColour(#wx_ref{type=ThisT,ref=ThisRef},Val)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Val)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetmargins">external documentation</a>.
--spec setMargins(This, ExtraWidth, ExtraHeight) -> ok when
+-spec setMargins(This, ExtraWidth, ExtraHeight) -> 'ok' when
This::wxGrid(), ExtraWidth::integer(), ExtraHeight::integer().
setMargins(#wx_ref{type=ThisT,ref=ThisRef},ExtraWidth,ExtraHeight)
when is_integer(ExtraWidth),is_integer(ExtraHeight) ->
@@ -1929,7 +1929,7 @@ setMargins(#wx_ref{type=ThisT,ref=ThisRef},ExtraWidth,ExtraHeight)
<<ThisRef:32/?UI,ExtraWidth:32/?UI,ExtraHeight:32/?UI>>).
%% @equiv setReadOnly(This,Row,Col, [])
--spec setReadOnly(This, Row, Col) -> ok when
+-spec setReadOnly(This, Row, Col) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer().
setReadOnly(This,Row,Col)
@@ -1937,9 +1937,9 @@ setReadOnly(This,Row,Col)
setReadOnly(This,Row,Col, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetreadonly">external documentation</a>.
--spec setReadOnly(This, Row, Col, [Option]) -> ok when
+-spec setReadOnly(This, Row, Col, [Option]) -> 'ok' when
This::wxGrid(), Row::integer(), Col::integer(),
- Option :: {isReadOnly, boolean()}.
+ Option :: {'isReadOnly', boolean()}.
setReadOnly(#wx_ref{type=ThisT,ref=ThisRef},Row,Col, Options)
when is_integer(Row),is_integer(Col),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -1950,7 +1950,7 @@ setReadOnly(#wx_ref{type=ThisT,ref=ThisRef},Row,Col, Options)
<<ThisRef:32/?UI,Row:32/?UI,Col:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetrowattr">external documentation</a>.
--spec setRowAttr(This, Row, Attr) -> ok when
+-spec setRowAttr(This, Row, Attr) -> 'ok' when
This::wxGrid(), Row::integer(), Attr::wxGridCellAttr:wxGridCellAttr().
setRowAttr(#wx_ref{type=ThisT,ref=ThisRef},Row,#wx_ref{type=AttrT,ref=AttrRef})
when is_integer(Row) ->
@@ -1960,7 +1960,7 @@ setRowAttr(#wx_ref{type=ThisT,ref=ThisRef},Row,#wx_ref{type=AttrT,ref=AttrRef})
<<ThisRef:32/?UI,Row:32/?UI,AttrRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetrowlabelalignment">external documentation</a>.
--spec setRowLabelAlignment(This, Horiz, Vert) -> ok when
+-spec setRowLabelAlignment(This, Horiz, Vert) -> 'ok' when
This::wxGrid(), Horiz::integer(), Vert::integer().
setRowLabelAlignment(#wx_ref{type=ThisT,ref=ThisRef},Horiz,Vert)
when is_integer(Horiz),is_integer(Vert) ->
@@ -1969,7 +1969,7 @@ setRowLabelAlignment(#wx_ref{type=ThisT,ref=ThisRef},Horiz,Vert)
<<ThisRef:32/?UI,Horiz:32/?UI,Vert:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetrowlabelsize">external documentation</a>.
--spec setRowLabelSize(This, Width) -> ok when
+-spec setRowLabelSize(This, Width) -> 'ok' when
This::wxGrid(), Width::integer().
setRowLabelSize(#wx_ref{type=ThisT,ref=ThisRef},Width)
when is_integer(Width) ->
@@ -1978,7 +1978,7 @@ setRowLabelSize(#wx_ref{type=ThisT,ref=ThisRef},Width)
<<ThisRef:32/?UI,Width:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetrowlabelvalue">external documentation</a>.
--spec setRowLabelValue(This, Row, Val) -> ok when
+-spec setRowLabelValue(This, Row, Val) -> 'ok' when
This::wxGrid(), Row::integer(), Val::unicode:chardata().
setRowLabelValue(#wx_ref{type=ThisT,ref=ThisRef},Row,Val)
when is_integer(Row),is_list(Val) ->
@@ -1988,7 +1988,7 @@ setRowLabelValue(#wx_ref{type=ThisT,ref=ThisRef},Row,Val)
<<ThisRef:32/?UI,Row:32/?UI,(byte_size(Val_UC)):32/?UI,(Val_UC)/binary, 0:(((8- ((4+byte_size(Val_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetrowminimalheight">external documentation</a>.
--spec setRowMinimalHeight(This, Row, Width) -> ok when
+-spec setRowMinimalHeight(This, Row, Width) -> 'ok' when
This::wxGrid(), Row::integer(), Width::integer().
setRowMinimalHeight(#wx_ref{type=ThisT,ref=ThisRef},Row,Width)
when is_integer(Row),is_integer(Width) ->
@@ -1997,7 +1997,7 @@ setRowMinimalHeight(#wx_ref{type=ThisT,ref=ThisRef},Row,Width)
<<ThisRef:32/?UI,Row:32/?UI,Width:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetrowminimalacceptableheight">external documentation</a>.
--spec setRowMinimalAcceptableHeight(This, Width) -> ok when
+-spec setRowMinimalAcceptableHeight(This, Width) -> 'ok' when
This::wxGrid(), Width::integer().
setRowMinimalAcceptableHeight(#wx_ref{type=ThisT,ref=ThisRef},Width)
when is_integer(Width) ->
@@ -2006,7 +2006,7 @@ setRowMinimalAcceptableHeight(#wx_ref{type=ThisT,ref=ThisRef},Width)
<<ThisRef:32/?UI,Width:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetrowsize">external documentation</a>.
--spec setRowSize(This, Row, Height) -> ok when
+-spec setRowSize(This, Row, Height) -> 'ok' when
This::wxGrid(), Row::integer(), Height::integer().
setRowSize(#wx_ref{type=ThisT,ref=ThisRef},Row,Height)
when is_integer(Row),is_integer(Height) ->
@@ -2015,7 +2015,7 @@ setRowSize(#wx_ref{type=ThisT,ref=ThisRef},Row,Height)
<<ThisRef:32/?UI,Row:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetscrolllinex">external documentation</a>.
--spec setScrollLineX(This, X) -> ok when
+-spec setScrollLineX(This, X) -> 'ok' when
This::wxGrid(), X::integer().
setScrollLineX(#wx_ref{type=ThisT,ref=ThisRef},X)
when is_integer(X) ->
@@ -2024,7 +2024,7 @@ setScrollLineX(#wx_ref{type=ThisT,ref=ThisRef},X)
<<ThisRef:32/?UI,X:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetscrollliney">external documentation</a>.
--spec setScrollLineY(This, Y) -> ok when
+-spec setScrollLineY(This, Y) -> 'ok' when
This::wxGrid(), Y::integer().
setScrollLineY(#wx_ref{type=ThisT,ref=ThisRef},Y)
when is_integer(Y) ->
@@ -2033,7 +2033,7 @@ setScrollLineY(#wx_ref{type=ThisT,ref=ThisRef},Y)
<<ThisRef:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetselectionbackground">external documentation</a>.
--spec setSelectionBackground(This, C) -> ok when
+-spec setSelectionBackground(This, C) -> 'ok' when
This::wxGrid(), C::wx:wx_colour().
setSelectionBackground(#wx_ref{type=ThisT,ref=ThisRef},C)
when tuple_size(C) =:= 3; tuple_size(C) =:= 4 ->
@@ -2042,7 +2042,7 @@ setSelectionBackground(#wx_ref{type=ThisT,ref=ThisRef},C)
<<ThisRef:32/?UI,(wxe_util:colour_bin(C)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetselectionforeground">external documentation</a>.
--spec setSelectionForeground(This, C) -> ok when
+-spec setSelectionForeground(This, C) -> 'ok' when
This::wxGrid(), C::wx:wx_colour().
setSelectionForeground(#wx_ref{type=ThisT,ref=ThisRef},C)
when tuple_size(C) =:= 3; tuple_size(C) =:= 4 ->
@@ -2052,7 +2052,7 @@ setSelectionForeground(#wx_ref{type=ThisT,ref=ThisRef},C)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridsetselectionmode">external documentation</a>.
%%<br /> Selmode = ?wxGrid_wxGridSelectCells | ?wxGrid_wxGridSelectRows | ?wxGrid_wxGridSelectColumns
--spec setSelectionMode(This, Selmode) -> ok when
+-spec setSelectionMode(This, Selmode) -> 'ok' when
This::wxGrid(), Selmode::wx:wx_enum().
setSelectionMode(#wx_ref{type=ThisT,ref=ThisRef},Selmode)
when is_integer(Selmode) ->
@@ -2061,7 +2061,7 @@ setSelectionMode(#wx_ref{type=ThisT,ref=ThisRef},Selmode)
<<ThisRef:32/?UI,Selmode:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridshowcelleditcontrol">external documentation</a>.
--spec showCellEditControl(This) -> ok when
+-spec showCellEditControl(This) -> 'ok' when
This::wxGrid().
showCellEditControl(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGrid),
@@ -2079,7 +2079,7 @@ xToCol(This,X)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgrid.html#wxgridxtocol">external documentation</a>.
-spec xToCol(This, X, [Option]) -> integer() when
This::wxGrid(), X::integer(),
- Option :: {clipToMinMax, boolean()}.
+ Option :: {'clipToMinMax', boolean()}.
xToCol(#wx_ref{type=ThisT,ref=ThisRef},X, Options)
when is_integer(X),is_list(Options) ->
?CLASS(ThisT,wxGrid),
@@ -2117,7 +2117,7 @@ yToRow(#wx_ref{type=ThisT,ref=ThisRef},Y)
<<ThisRef:32/?UI,Y:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGrid()) -> ok.
+-spec destroy(This::wxGrid()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGrid),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxGridBagSizer.erl b/lib/wx/src/gen/wxGridBagSizer.erl
index 521bf7d5de..93ed002d6c 100644
--- a/lib/wx/src/gen/wxGridBagSizer.erl
+++ b/lib/wx/src/gen/wxGridBagSizer.erl
@@ -65,8 +65,8 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridbagsizer.html#wxgridbagsizerwxgridbagsizer">external documentation</a>.
-spec new([Option]) -> wxGridBagSizer() when
- Option :: {vgap, integer()}
- | {hgap, integer()}.
+ Option :: {'vgap', integer()}
+ | {'hgap', integer()}.
new(Options)
when is_list(Options) ->
MOpts = fun({vgap, Vgap}, Acc) -> [<<1:32/?UI,Vgap:32/?UI>>|Acc];
@@ -96,10 +96,10 @@ add(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ItemT,ref=ItemRef}) ->
%% This::wxGridBagSizer(), Window::wxWindow:wxWindow() | wxSizer:wxSizer(), Pos::{R::integer(), C::integer()};<br />
%% (This, Window, [Option]) -> wxSizerItem:wxSizerItem() when<br />
%% This::wxGridBagSizer(), Window::wxWindow:wxWindow() | wxSizer:wxSizer(),<br />
-%% Option :: {proportion, integer()}<br />
-%% | {flag, integer()}<br />
-%% | {border, integer()}<br />
-%% | {userData, wx:wx_object()}.<br />
+%% Option :: {'proportion', integer()}<br />
+%% | {'flag', integer()}<br />
+%% | {'border', integer()}<br />
+%% | {'userData', wx:wx_object()}.<br />
%%
-spec add(This, Width, Height) -> wxSizerItem:wxSizerItem() when
This::wxGridBagSizer(), Width::integer(), Height::integer();
@@ -107,10 +107,10 @@ add(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ItemT,ref=ItemRef}) ->
This::wxGridBagSizer(), Window::wxWindow:wxWindow() | wxSizer:wxSizer(), Pos::{R::integer(), C::integer()};
(This, Window, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxGridBagSizer(), Window::wxWindow:wxWindow() | wxSizer:wxSizer(),
- Option :: {proportion, integer()}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()}.
+ Option :: {'proportion', integer()}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()}.
add(This,Width,Height)
when is_record(This, wx_ref),is_integer(Width),is_integer(Height) ->
@@ -141,31 +141,31 @@ add(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}, Options
%% <br /> Also:<br />
%% add(This, Width, Height, [Option]) -> wxSizerItem:wxSizerItem() when<br />
%% This::wxGridBagSizer(), Width::integer(), Height::integer(),<br />
-%% Option :: {proportion, integer()}<br />
-%% | {flag, integer()}<br />
-%% | {border, integer()}<br />
-%% | {userData, wx:wx_object()};<br />
+%% Option :: {'proportion', integer()}<br />
+%% | {'flag', integer()}<br />
+%% | {'border', integer()}<br />
+%% | {'userData', wx:wx_object()};<br />
%% (This, Window, Pos, [Option]) -> wxSizerItem:wxSizerItem() when<br />
%% This::wxGridBagSizer(), Window::wxWindow:wxWindow() | wxSizer:wxSizer(), Pos::{R::integer(), C::integer()},<br />
-%% Option :: {span, {RS::integer(), CS::integer()}}<br />
-%% | {flag, integer()}<br />
-%% | {border, integer()}<br />
-%% | {userData, wx:wx_object()}.<br />
+%% Option :: {'span', {RS::integer(), CS::integer()}}<br />
+%% | {'flag', integer()}<br />
+%% | {'border', integer()}<br />
+%% | {'userData', wx:wx_object()}.<br />
%%
-spec add(This, Width, Height, Pos) -> wxSizerItem:wxSizerItem() when
This::wxGridBagSizer(), Width::integer(), Height::integer(), Pos::{R::integer(), C::integer()};
(This, Width, Height, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxGridBagSizer(), Width::integer(), Height::integer(),
- Option :: {proportion, integer()}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()};
+ Option :: {'proportion', integer()}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()};
(This, Window, Pos, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxGridBagSizer(), Window::wxWindow:wxWindow() | wxSizer:wxSizer(), Pos::{R::integer(), C::integer()},
- Option :: {span, {RS::integer(), CS::integer()}}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()}.
+ Option :: {'span', {RS::integer(), CS::integer()}}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()}.
add(This,Width,Height,Pos={PosR,PosC})
when is_record(This, wx_ref),is_integer(Width),is_integer(Height),is_integer(PosR),is_integer(PosC) ->
@@ -202,10 +202,10 @@ add(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef},{PosR,Po
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridbagsizer.html#wxgridbagsizeradd">external documentation</a>.
-spec add(This, Width, Height, Pos, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxGridBagSizer(), Width::integer(), Height::integer(), Pos::{R::integer(), C::integer()},
- Option :: {span, {RS::integer(), CS::integer()}}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()}.
+ Option :: {'span', {RS::integer(), CS::integer()}}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()}.
add(#wx_ref{type=ThisT,ref=ThisRef},Width,Height,{PosR,PosC}, Options)
when is_integer(Width),is_integer(Height),is_integer(PosR),is_integer(PosC),is_list(Options) ->
?CLASS(ThisT,wxGridBagSizer),
@@ -238,13 +238,13 @@ checkForIntersection(This,Item)
%% <br /> Also:<br />
%% checkForIntersection(This, Item, [Option]) -> boolean() when<br />
%% This::wxGridBagSizer(), Item::wxGBSizerItem:wxGBSizerItem(),<br />
-%% Option :: {excludeItem, wxGBSizerItem:wxGBSizerItem()}.<br />
+%% Option :: {'excludeItem', wxGBSizerItem:wxGBSizerItem()}.<br />
%%
-spec checkForIntersection(This, Pos, Span) -> boolean() when
This::wxGridBagSizer(), Pos::{R::integer(), C::integer()}, Span::{RS::integer(), CS::integer()};
(This, Item, [Option]) -> boolean() when
This::wxGridBagSizer(), Item::wxGBSizerItem:wxGBSizerItem(),
- Option :: {excludeItem, wxGBSizerItem:wxGBSizerItem()}.
+ Option :: {'excludeItem', wxGBSizerItem:wxGBSizerItem()}.
checkForIntersection(This,Pos={PosR,PosC},Span={SpanRS,SpanCS})
when is_record(This, wx_ref),is_integer(PosR),is_integer(PosC),is_integer(SpanRS),is_integer(SpanCS) ->
@@ -262,7 +262,7 @@ checkForIntersection(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ItemT,ref=Item
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridbagsizer.html#wxgridbagsizercheckforintersection">external documentation</a>.
-spec checkForIntersection(This, Pos, Span, [Option]) -> boolean() when
This::wxGridBagSizer(), Pos::{R::integer(), C::integer()}, Span::{RS::integer(), CS::integer()},
- Option :: {excludeItem, wxGBSizerItem:wxGBSizerItem()}.
+ Option :: {'excludeItem', wxGBSizerItem:wxGBSizerItem()}.
checkForIntersection(#wx_ref{type=ThisT,ref=ThisRef},{PosR,PosC},{SpanRS,SpanCS}, Options)
when is_integer(PosR),is_integer(PosC),is_integer(SpanRS),is_integer(SpanCS),is_list(Options) ->
?CLASS(ThisT,wxGridBagSizer),
@@ -381,7 +381,7 @@ getItemSpan(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef})
<<ThisRef:32/?UI,WindowRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridbagsizer.html#wxgridbagsizersetemptycellsize">external documentation</a>.
--spec setEmptyCellSize(This, Sz) -> ok when
+-spec setEmptyCellSize(This, Sz) -> 'ok' when
This::wxGridBagSizer(), Sz::{W::integer(), H::integer()}.
setEmptyCellSize(#wx_ref{type=ThisT,ref=ThisRef},{SzW,SzH})
when is_integer(SzW),is_integer(SzH) ->
@@ -442,7 +442,7 @@ setItemSpan(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef},
<<ThisRef:32/?UI,WindowRef:32/?UI,SpanRS:32/?UI,SpanCS:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridBagSizer()) -> ok.
+-spec destroy(This::wxGridBagSizer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridBagSizer),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxGridCellAttr.erl b/lib/wx/src/gen/wxGridCellAttr.erl
index 8d55155c5c..b279be25d8 100644
--- a/lib/wx/src/gen/wxGridCellAttr.erl
+++ b/lib/wx/src/gen/wxGridCellAttr.erl
@@ -40,7 +40,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxGridCellAttr() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellattr.html#wxgridcellattrsettextcolour">external documentation</a>.
--spec setTextColour(This, ColText) -> ok when
+-spec setTextColour(This, ColText) -> 'ok' when
This::wxGridCellAttr(), ColText::wx:wx_colour().
setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
when tuple_size(ColText) =:= 3; tuple_size(ColText) =:= 4 ->
@@ -49,7 +49,7 @@ setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColText)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellattr.html#wxgridcellattrsetbackgroundcolour">external documentation</a>.
--spec setBackgroundColour(This, ColBack) -> ok when
+-spec setBackgroundColour(This, ColBack) -> 'ok' when
This::wxGridCellAttr(), ColBack::wx:wx_colour().
setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
when tuple_size(ColBack) =:= 3; tuple_size(ColBack) =:= 4 ->
@@ -58,7 +58,7 @@ setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColBack)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellattr.html#wxgridcellattrsetfont">external documentation</a>.
--spec setFont(This, Font) -> ok when
+-spec setFont(This, Font) -> 'ok' when
This::wxGridCellAttr(), Font::wxFont:wxFont().
setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxGridCellAttr),
@@ -67,7 +67,7 @@ setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellattr.html#wxgridcellattrsetalignment">external documentation</a>.
--spec setAlignment(This, HAlign, VAlign) -> ok when
+-spec setAlignment(This, HAlign, VAlign) -> 'ok' when
This::wxGridCellAttr(), HAlign::integer(), VAlign::integer().
setAlignment(#wx_ref{type=ThisT,ref=ThisRef},HAlign,VAlign)
when is_integer(HAlign),is_integer(VAlign) ->
@@ -76,7 +76,7 @@ setAlignment(#wx_ref{type=ThisT,ref=ThisRef},HAlign,VAlign)
<<ThisRef:32/?UI,HAlign:32/?UI,VAlign:32/?UI>>).
%% @equiv setReadOnly(This, [])
--spec setReadOnly(This) -> ok when
+-spec setReadOnly(This) -> 'ok' when
This::wxGridCellAttr().
setReadOnly(This)
@@ -84,9 +84,9 @@ setReadOnly(This)
setReadOnly(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellattr.html#wxgridcellattrsetreadonly">external documentation</a>.
--spec setReadOnly(This, [Option]) -> ok when
+-spec setReadOnly(This, [Option]) -> 'ok' when
This::wxGridCellAttr(),
- Option :: {isReadOnly, boolean()}.
+ Option :: {'isReadOnly', boolean()}.
setReadOnly(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxGridCellAttr),
@@ -97,7 +97,7 @@ setReadOnly(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellattr.html#wxgridcellattrsetrenderer">external documentation</a>.
--spec setRenderer(This, Renderer) -> ok when
+-spec setRenderer(This, Renderer) -> 'ok' when
This::wxGridCellAttr(), Renderer::wxGridCellRenderer:wxGridCellRenderer().
setRenderer(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=RendererT,ref=RendererRef}) ->
?CLASS(ThisT,wxGridCellAttr),
@@ -106,7 +106,7 @@ setRenderer(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=RendererT,ref=RendererR
<<ThisRef:32/?UI,RendererRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellattr.html#wxgridcellattrseteditor">external documentation</a>.
--spec setEditor(This, Editor) -> ok when
+-spec setEditor(This, Editor) -> 'ok' when
This::wxGridCellAttr(), Editor::wxGridCellEditor:wxGridCellEditor().
setEditor(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=EditorT,ref=EditorRef}) ->
?CLASS(ThisT,wxGridCellAttr),
@@ -223,7 +223,7 @@ isReadOnly(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellattr.html#wxgridcellattrsetdefattr">external documentation</a>.
--spec setDefAttr(This, DefAttr) -> ok when
+-spec setDefAttr(This, DefAttr) -> 'ok' when
This::wxGridCellAttr(), DefAttr::wxGridCellAttr().
setDefAttr(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DefAttrT,ref=DefAttrRef}) ->
?CLASS(ThisT,wxGridCellAttr),
diff --git a/lib/wx/src/gen/wxGridCellBoolEditor.erl b/lib/wx/src/gen/wxGridCellBoolEditor.erl
index 93a05e2959..1d949d54ff 100644
--- a/lib/wx/src/gen/wxGridCellBoolEditor.erl
+++ b/lib/wx/src/gen/wxGridCellBoolEditor.erl
@@ -58,15 +58,15 @@ isTrueValue(Value)
<<(byte_size(Value_UC)):32/?UI,(Value_UC)/binary, 0:(((8- ((4+byte_size(Value_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @equiv useStringValues([])
--spec useStringValues() -> ok.
+-spec useStringValues() -> 'ok'.
useStringValues() ->
useStringValues([]).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellbooleditor.html#wxgridcellbooleditorusestringvalues">external documentation</a>.
--spec useStringValues([Option]) -> ok when
- Option :: {valueTrue, unicode:chardata()}
- | {valueFalse, unicode:chardata()}.
+-spec useStringValues([Option]) -> 'ok' when
+ Option :: {'valueTrue', unicode:chardata()}
+ | {'valueFalse', unicode:chardata()}.
useStringValues(Options)
when is_list(Options) ->
MOpts = fun({valueTrue, ValueTrue}, Acc) -> ValueTrue_UC = unicode:characters_to_binary([ValueTrue,0]),[<<1:32/?UI,(byte_size(ValueTrue_UC)):32/?UI,(ValueTrue_UC)/binary, 0:(((8- ((0+byte_size(ValueTrue_UC)) band 16#7)) band 16#7))/unit:8>>|Acc];
@@ -77,7 +77,7 @@ useStringValues(Options)
<<BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridCellBoolEditor()) -> ok.
+-spec destroy(This::wxGridCellBoolEditor()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridCellBoolEditor),
wxe_util:destroy(?wxGridCellBoolEditor_destroy,Obj),
diff --git a/lib/wx/src/gen/wxGridCellBoolRenderer.erl b/lib/wx/src/gen/wxGridCellBoolRenderer.erl
index ce576a3c1d..acdb9cb18f 100644
--- a/lib/wx/src/gen/wxGridCellBoolRenderer.erl
+++ b/lib/wx/src/gen/wxGridCellBoolRenderer.erl
@@ -46,7 +46,7 @@ new() ->
<<>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridCellBoolRenderer()) -> ok.
+-spec destroy(This::wxGridCellBoolRenderer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridCellBoolRenderer),
wxe_util:destroy(?wxGridCellBoolRenderer_destroy,Obj),
diff --git a/lib/wx/src/gen/wxGridCellChoiceEditor.erl b/lib/wx/src/gen/wxGridCellChoiceEditor.erl
index 3e24ea21a0..d5487c3618 100644
--- a/lib/wx/src/gen/wxGridCellChoiceEditor.erl
+++ b/lib/wx/src/gen/wxGridCellChoiceEditor.erl
@@ -53,7 +53,7 @@ new(Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellchoiceeditor.html#wxgridcellchoiceeditorwxgridcellchoiceeditor">external documentation</a>.
-spec new(Choices, [Option]) -> wxGridCellChoiceEditor() when
Choices::[unicode:chardata()],
- Option :: {allowOthers, boolean()}.
+ Option :: {'allowOthers', boolean()}.
new(Choices, Options)
when is_list(Choices),is_list(Options) ->
Choices_UCA = [unicode:characters_to_binary([ChoicesTemp,0]) ||
@@ -65,7 +65,7 @@ new(Choices, Options)
<<(length(Choices_UCA)):32/?UI, (<< <<(byte_size(UC_Str)):32/?UI, UC_Str/binary>>|| UC_Str <- Choices_UCA>>)/binary, 0:(((8- ((4 + lists:sum([byte_size(S)+4||S<-Choices_UCA])) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellchoiceeditor.html#wxgridcellchoiceeditorsetparameters">external documentation</a>.
--spec setParameters(This, Params) -> ok when
+-spec setParameters(This, Params) -> 'ok' when
This::wxGridCellChoiceEditor(), Params::unicode:chardata().
setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
when is_list(Params) ->
@@ -75,7 +75,7 @@ setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
<<ThisRef:32/?UI,(byte_size(Params_UC)):32/?UI,(Params_UC)/binary, 0:(((8- ((0+byte_size(Params_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridCellChoiceEditor()) -> ok.
+-spec destroy(This::wxGridCellChoiceEditor()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridCellChoiceEditor),
wxe_util:destroy(?wxGridCellChoiceEditor_destroy,Obj),
diff --git a/lib/wx/src/gen/wxGridCellEditor.erl b/lib/wx/src/gen/wxGridCellEditor.erl
index 03b196e5a2..d14b1c994c 100644
--- a/lib/wx/src/gen/wxGridCellEditor.erl
+++ b/lib/wx/src/gen/wxGridCellEditor.erl
@@ -39,7 +39,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxGridCellEditor() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelleditor.html#wxgridcelleditorcreate">external documentation</a>.
--spec create(This, Parent, Id, EvtHandler) -> ok when
+-spec create(This, Parent, Id, EvtHandler) -> 'ok' when
This::wxGridCellEditor(), Parent::wxWindow:wxWindow(), Id::integer(), EvtHandler::wxEvtHandler:wxEvtHandler().
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,#wx_ref{type=EvtHandlerT,ref=EvtHandlerRef})
when is_integer(Id) ->
@@ -58,7 +58,7 @@ isCreated(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelleditor.html#wxgridcelleditorsetsize">external documentation</a>.
--spec setSize(This, Rect) -> ok when
+-spec setSize(This, Rect) -> 'ok' when
This::wxGridCellEditor(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.
setSize(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH) ->
@@ -67,7 +67,7 @@ setSize(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI>>).
%% @equiv show(This,Show, [])
--spec show(This, Show) -> ok when
+-spec show(This, Show) -> 'ok' when
This::wxGridCellEditor(), Show::boolean().
show(This,Show)
@@ -75,9 +75,9 @@ show(This,Show)
show(This,Show, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelleditor.html#wxgridcelleditorshow">external documentation</a>.
--spec show(This, Show, [Option]) -> ok when
+-spec show(This, Show, [Option]) -> 'ok' when
This::wxGridCellEditor(), Show::boolean(),
- Option :: {attr, wxGridCellAttr:wxGridCellAttr()}.
+ Option :: {'attr', wxGridCellAttr:wxGridCellAttr()}.
show(#wx_ref{type=ThisT,ref=ThisRef},Show, Options)
when is_boolean(Show),is_list(Options) ->
?CLASS(ThisT,wxGridCellEditor),
@@ -88,7 +88,7 @@ show(#wx_ref{type=ThisT,ref=ThisRef},Show, Options)
<<ThisRef:32/?UI,(wxe_util:from_bool(Show)):32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelleditor.html#wxgridcelleditorpaintbackground">external documentation</a>.
--spec paintBackground(This, RectCell, Attr) -> ok when
+-spec paintBackground(This, RectCell, Attr) -> 'ok' when
This::wxGridCellEditor(), RectCell::{X::integer(), Y::integer(), W::integer(), H::integer()}, Attr::wxGridCellAttr:wxGridCellAttr().
paintBackground(#wx_ref{type=ThisT,ref=ThisRef},{RectCellX,RectCellY,RectCellW,RectCellH},#wx_ref{type=AttrT,ref=AttrRef})
when is_integer(RectCellX),is_integer(RectCellY),is_integer(RectCellW),is_integer(RectCellH) ->
@@ -98,7 +98,7 @@ paintBackground(#wx_ref{type=ThisT,ref=ThisRef},{RectCellX,RectCellY,RectCellW,R
<<ThisRef:32/?UI,RectCellX:32/?UI,RectCellY:32/?UI,RectCellW:32/?UI,RectCellH:32/?UI,AttrRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelleditor.html#wxgridcelleditorbeginedit">external documentation</a>.
--spec beginEdit(This, Row, Col, Grid) -> ok when
+-spec beginEdit(This, Row, Col, Grid) -> 'ok' when
This::wxGridCellEditor(), Row::integer(), Col::integer(), Grid::wxGrid:wxGrid().
beginEdit(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,#wx_ref{type=GridT,ref=GridRef})
when is_integer(Row),is_integer(Col) ->
@@ -118,7 +118,7 @@ endEdit(#wx_ref{type=ThisT,ref=ThisRef},Row,Col,#wx_ref{type=GridT,ref=GridRef})
<<ThisRef:32/?UI,Row:32/?UI,Col:32/?UI,GridRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelleditor.html#wxgridcelleditorreset">external documentation</a>.
--spec reset(This) -> ok when
+-spec reset(This) -> 'ok' when
This::wxGridCellEditor().
reset(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGridCellEditor),
@@ -126,7 +126,7 @@ reset(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelleditor.html#wxgridcelleditorstartingkey">external documentation</a>.
--spec startingKey(This, Event) -> ok when
+-spec startingKey(This, Event) -> 'ok' when
This::wxGridCellEditor(), Event::wxKeyEvent:wxKeyEvent().
startingKey(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=EventT,ref=EventRef}) ->
?CLASS(ThisT,wxGridCellEditor),
@@ -135,7 +135,7 @@ startingKey(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=EventT,ref=EventRef}) -
<<ThisRef:32/?UI,EventRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelleditor.html#wxgridcelleditorstartingclick">external documentation</a>.
--spec startingClick(This) -> ok when
+-spec startingClick(This) -> 'ok' when
This::wxGridCellEditor().
startingClick(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxGridCellEditor),
@@ -143,7 +143,7 @@ startingClick(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelleditor.html#wxgridcelleditorhandlereturn">external documentation</a>.
--spec handleReturn(This, Event) -> ok when
+-spec handleReturn(This, Event) -> 'ok' when
This::wxGridCellEditor(), Event::wxKeyEvent:wxKeyEvent().
handleReturn(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=EventT,ref=EventRef}) ->
?CLASS(ThisT,wxGridCellEditor),
diff --git a/lib/wx/src/gen/wxGridCellFloatEditor.erl b/lib/wx/src/gen/wxGridCellFloatEditor.erl
index e4f8b81fef..6e85469ecf 100644
--- a/lib/wx/src/gen/wxGridCellFloatEditor.erl
+++ b/lib/wx/src/gen/wxGridCellFloatEditor.erl
@@ -50,8 +50,8 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellfloateditor.html#wxgridcellfloateditorwxgridcellfloateditor">external documentation</a>.
-spec new([Option]) -> wxGridCellFloatEditor() when
- Option :: {width, integer()}
- | {precision, integer()}.
+ Option :: {'width', integer()}
+ | {'precision', integer()}.
new(Options)
when is_list(Options) ->
MOpts = fun({width, Width}, Acc) -> [<<1:32/?UI,Width:32/?UI>>|Acc];
@@ -62,7 +62,7 @@ new(Options)
<<BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellfloateditor.html#wxgridcellfloateditorsetparameters">external documentation</a>.
--spec setParameters(This, Params) -> ok when
+-spec setParameters(This, Params) -> 'ok' when
This::wxGridCellFloatEditor(), Params::unicode:chardata().
setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
when is_list(Params) ->
@@ -72,7 +72,7 @@ setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
<<ThisRef:32/?UI,(byte_size(Params_UC)):32/?UI,(Params_UC)/binary, 0:(((8- ((0+byte_size(Params_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridCellFloatEditor()) -> ok.
+-spec destroy(This::wxGridCellFloatEditor()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridCellFloatEditor),
wxe_util:destroy(?wxGridCellFloatEditor_destroy,Obj),
diff --git a/lib/wx/src/gen/wxGridCellFloatRenderer.erl b/lib/wx/src/gen/wxGridCellFloatRenderer.erl
index c5ddf78c44..ccb29902b3 100644
--- a/lib/wx/src/gen/wxGridCellFloatRenderer.erl
+++ b/lib/wx/src/gen/wxGridCellFloatRenderer.erl
@@ -50,8 +50,8 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellfloatrenderer.html#wxgridcellfloatrendererwxgridcellfloatrenderer">external documentation</a>.
-spec new([Option]) -> wxGridCellFloatRenderer() when
- Option :: {width, integer()}
- | {precision, integer()}.
+ Option :: {'width', integer()}
+ | {'precision', integer()}.
new(Options)
when is_list(Options) ->
MOpts = fun({width, Width}, Acc) -> [<<1:32/?UI,Width:32/?UI>>|Acc];
@@ -78,7 +78,7 @@ getWidth(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellfloatrenderer.html#wxgridcellfloatrenderersetparameters">external documentation</a>.
--spec setParameters(This, Params) -> ok when
+-spec setParameters(This, Params) -> 'ok' when
This::wxGridCellFloatRenderer(), Params::unicode:chardata().
setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
when is_list(Params) ->
@@ -88,7 +88,7 @@ setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
<<ThisRef:32/?UI,(byte_size(Params_UC)):32/?UI,(Params_UC)/binary, 0:(((8- ((0+byte_size(Params_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellfloatrenderer.html#wxgridcellfloatrenderersetprecision">external documentation</a>.
--spec setPrecision(This, Precision) -> ok when
+-spec setPrecision(This, Precision) -> 'ok' when
This::wxGridCellFloatRenderer(), Precision::integer().
setPrecision(#wx_ref{type=ThisT,ref=ThisRef},Precision)
when is_integer(Precision) ->
@@ -97,7 +97,7 @@ setPrecision(#wx_ref{type=ThisT,ref=ThisRef},Precision)
<<ThisRef:32/?UI,Precision:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellfloatrenderer.html#wxgridcellfloatrenderersetwidth">external documentation</a>.
--spec setWidth(This, Width) -> ok when
+-spec setWidth(This, Width) -> 'ok' when
This::wxGridCellFloatRenderer(), Width::integer().
setWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
when is_integer(Width) ->
@@ -106,7 +106,7 @@ setWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
<<ThisRef:32/?UI,Width:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridCellFloatRenderer()) -> ok.
+-spec destroy(This::wxGridCellFloatRenderer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridCellFloatRenderer),
wxe_util:destroy(?wxGridCellFloatRenderer_destroy,Obj),
diff --git a/lib/wx/src/gen/wxGridCellNumberEditor.erl b/lib/wx/src/gen/wxGridCellNumberEditor.erl
index fb42faaf24..7a47024b2f 100644
--- a/lib/wx/src/gen/wxGridCellNumberEditor.erl
+++ b/lib/wx/src/gen/wxGridCellNumberEditor.erl
@@ -52,8 +52,8 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellnumbereditor.html#wxgridcellnumbereditorwxgridcellnumbereditor">external documentation</a>.
-spec new([Option]) -> wxGridCellNumberEditor() when
- Option :: {min, integer()}
- | {max, integer()}.
+ Option :: {'min', integer()}
+ | {'max', integer()}.
new(Options)
when is_list(Options) ->
MOpts = fun({min, Min}, Acc) -> [<<1:32/?UI,Min:32/?UI>>|Acc];
@@ -72,7 +72,7 @@ getValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellnumbereditor.html#wxgridcellnumbereditorsetparameters">external documentation</a>.
--spec setParameters(This, Params) -> ok when
+-spec setParameters(This, Params) -> 'ok' when
This::wxGridCellNumberEditor(), Params::unicode:chardata().
setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
when is_list(Params) ->
@@ -82,7 +82,7 @@ setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
<<ThisRef:32/?UI,(byte_size(Params_UC)):32/?UI,(Params_UC)/binary, 0:(((8- ((0+byte_size(Params_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridCellNumberEditor()) -> ok.
+-spec destroy(This::wxGridCellNumberEditor()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridCellNumberEditor),
wxe_util:destroy(?wxGridCellNumberEditor_destroy,Obj),
diff --git a/lib/wx/src/gen/wxGridCellNumberRenderer.erl b/lib/wx/src/gen/wxGridCellNumberRenderer.erl
index 815640f6da..1267bb4167 100644
--- a/lib/wx/src/gen/wxGridCellNumberRenderer.erl
+++ b/lib/wx/src/gen/wxGridCellNumberRenderer.erl
@@ -48,7 +48,7 @@ new() ->
<<>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridCellNumberRenderer()) -> ok.
+-spec destroy(This::wxGridCellNumberRenderer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridCellNumberRenderer),
wxe_util:destroy(?wxGridCellNumberRenderer_destroy,Obj),
diff --git a/lib/wx/src/gen/wxGridCellRenderer.erl b/lib/wx/src/gen/wxGridCellRenderer.erl
index 00f553b71a..53d43f12a4 100644
--- a/lib/wx/src/gen/wxGridCellRenderer.erl
+++ b/lib/wx/src/gen/wxGridCellRenderer.erl
@@ -36,7 +36,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxGridCellRenderer() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcellrenderer.html#wxgridcellrendererdraw">external documentation</a>.
--spec draw(This, Grid, Attr, Dc, Rect, Row, Col, IsSelected) -> ok when
+-spec draw(This, Grid, Attr, Dc, Rect, Row, Col, IsSelected) -> 'ok' when
This::wxGridCellRenderer(), Grid::wxGrid:wxGrid(), Attr::wxGridCellAttr:wxGridCellAttr(), Dc::wxDC:wxDC(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}, Row::integer(), Col::integer(), IsSelected::boolean().
draw(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=GridT,ref=GridRef},#wx_ref{type=AttrT,ref=AttrRef},#wx_ref{type=DcT,ref=DcRef},{RectX,RectY,RectW,RectH},Row,Col,IsSelected)
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH),is_integer(Row),is_integer(Col),is_boolean(IsSelected) ->
diff --git a/lib/wx/src/gen/wxGridCellStringRenderer.erl b/lib/wx/src/gen/wxGridCellStringRenderer.erl
index fce72cf02b..7602187a7a 100644
--- a/lib/wx/src/gen/wxGridCellStringRenderer.erl
+++ b/lib/wx/src/gen/wxGridCellStringRenderer.erl
@@ -46,7 +46,7 @@ new() ->
<<>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridCellStringRenderer()) -> ok.
+-spec destroy(This::wxGridCellStringRenderer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridCellStringRenderer),
wxe_util:destroy(?wxGridCellStringRenderer_destroy,Obj),
diff --git a/lib/wx/src/gen/wxGridCellTextEditor.erl b/lib/wx/src/gen/wxGridCellTextEditor.erl
index e6d3f508b7..4ddb4a7028 100644
--- a/lib/wx/src/gen/wxGridCellTextEditor.erl
+++ b/lib/wx/src/gen/wxGridCellTextEditor.erl
@@ -49,7 +49,7 @@ new() ->
<<>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridcelltexteditor.html#wxgridcelltexteditorsetparameters">external documentation</a>.
--spec setParameters(This, Params) -> ok when
+-spec setParameters(This, Params) -> 'ok' when
This::wxGridCellTextEditor(), Params::unicode:chardata().
setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
when is_list(Params) ->
@@ -59,7 +59,7 @@ setParameters(#wx_ref{type=ThisT,ref=ThisRef},Params)
<<ThisRef:32/?UI,(byte_size(Params_UC)):32/?UI,(Params_UC)/binary, 0:(((8- ((0+byte_size(Params_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridCellTextEditor()) -> ok.
+-spec destroy(This::wxGridCellTextEditor()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridCellTextEditor),
wxe_util:destroy(?wxGridCellTextEditor_destroy,Obj),
diff --git a/lib/wx/src/gen/wxGridSizer.erl b/lib/wx/src/gen/wxGridSizer.erl
index 5cfede3e9c..bb2127f92a 100644
--- a/lib/wx/src/gen/wxGridSizer.erl
+++ b/lib/wx/src/gen/wxGridSizer.erl
@@ -59,8 +59,8 @@ new(Cols)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridsizer.html#wxgridsizerwxgridsizer">external documentation</a>.
-spec new(Cols, [Option]) -> wxGridSizer() when
Cols::integer(),
- Option :: {vgap, integer()}
- | {hgap, integer()}.
+ Option :: {'vgap', integer()}
+ | {'hgap', integer()}.
new(Cols, Options)
when is_integer(Cols),is_list(Options) ->
MOpts = fun({vgap, Vgap}, Acc) -> [<<1:32/?UI,Vgap:32/?UI>>|Acc];
@@ -111,7 +111,7 @@ getVGap(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridsizer.html#wxgridsizersetcols">external documentation</a>.
--spec setCols(This, Cols) -> ok when
+-spec setCols(This, Cols) -> 'ok' when
This::wxGridSizer(), Cols::integer().
setCols(#wx_ref{type=ThisT,ref=ThisRef},Cols)
when is_integer(Cols) ->
@@ -120,7 +120,7 @@ setCols(#wx_ref{type=ThisT,ref=ThisRef},Cols)
<<ThisRef:32/?UI,Cols:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridsizer.html#wxgridsizersethgap">external documentation</a>.
--spec setHGap(This, Gap) -> ok when
+-spec setHGap(This, Gap) -> 'ok' when
This::wxGridSizer(), Gap::integer().
setHGap(#wx_ref{type=ThisT,ref=ThisRef},Gap)
when is_integer(Gap) ->
@@ -129,7 +129,7 @@ setHGap(#wx_ref{type=ThisT,ref=ThisRef},Gap)
<<ThisRef:32/?UI,Gap:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridsizer.html#wxgridsizersetrows">external documentation</a>.
--spec setRows(This, Rows) -> ok when
+-spec setRows(This, Rows) -> 'ok' when
This::wxGridSizer(), Rows::integer().
setRows(#wx_ref{type=ThisT,ref=ThisRef},Rows)
when is_integer(Rows) ->
@@ -138,7 +138,7 @@ setRows(#wx_ref{type=ThisT,ref=ThisRef},Rows)
<<ThisRef:32/?UI,Rows:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxgridsizer.html#wxgridsizersetvgap">external documentation</a>.
--spec setVGap(This, Gap) -> ok when
+-spec setVGap(This, Gap) -> 'ok' when
This::wxGridSizer(), Gap::integer().
setVGap(#wx_ref{type=ThisT,ref=ThisRef},Gap)
when is_integer(Gap) ->
@@ -147,7 +147,7 @@ setVGap(#wx_ref{type=ThisT,ref=ThisRef},Gap)
<<ThisRef:32/?UI,Gap:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxGridSizer()) -> ok.
+-spec destroy(This::wxGridSizer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxGridSizer),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxHelpEvent.erl b/lib/wx/src/gen/wxHelpEvent.erl
index ec5107a3dc..251167d41e 100644
--- a/lib/wx/src/gen/wxHelpEvent.erl
+++ b/lib/wx/src/gen/wxHelpEvent.erl
@@ -63,7 +63,7 @@ getPosition(#wx_ref{type=ThisT,ref=ThisRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhelpevent.html#wxhelpeventsetorigin">external documentation</a>.
%%<br /> Origin = ?wxHelpEvent_Origin_Unknown | ?wxHelpEvent_Origin_Keyboard | ?wxHelpEvent_Origin_HelpButton
--spec setOrigin(This, Origin) -> ok when
+-spec setOrigin(This, Origin) -> 'ok' when
This::wxHelpEvent(), Origin::wx:wx_enum().
setOrigin(#wx_ref{type=ThisT,ref=ThisRef},Origin)
when is_integer(Origin) ->
@@ -72,7 +72,7 @@ setOrigin(#wx_ref{type=ThisT,ref=ThisRef},Origin)
<<ThisRef:32/?UI,Origin:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhelpevent.html#wxhelpeventsetposition">external documentation</a>.
--spec setPosition(This, Pos) -> ok when
+-spec setPosition(This, Pos) -> 'ok' when
This::wxHelpEvent(), Pos::{X::integer(), Y::integer()}.
setPosition(#wx_ref{type=ThisT,ref=ThisRef},{PosX,PosY})
when is_integer(PosX),is_integer(PosY) ->
diff --git a/lib/wx/src/gen/wxHtmlEasyPrinting.erl b/lib/wx/src/gen/wxHtmlEasyPrinting.erl
index b445fc01ab..a2cf46ed8d 100644
--- a/lib/wx/src/gen/wxHtmlEasyPrinting.erl
+++ b/lib/wx/src/gen/wxHtmlEasyPrinting.erl
@@ -46,8 +46,8 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmleasyprinting.html#wxhtmleasyprintingwxhtmleasyprinting">external documentation</a>.
-spec new([Option]) -> wxHtmlEasyPrinting() when
- Option :: {name, unicode:chardata()}
- | {parentWindow, wxWindow:wxWindow()}.
+ Option :: {'name', unicode:chardata()}
+ | {'parentWindow', wxWindow:wxWindow()}.
new(Options)
when is_list(Options) ->
MOpts = fun({name, Name}, Acc) -> Name_UC = unicode:characters_to_binary([Name,0]),[<<1:32/?UI,(byte_size(Name_UC)):32/?UI,(Name_UC)/binary, 0:(((8- ((0+byte_size(Name_UC)) band 16#7)) band 16#7))/unit:8>>|Acc];
@@ -94,7 +94,7 @@ previewText(This,Htmltext)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmleasyprinting.html#wxhtmleasyprintingpreviewtext">external documentation</a>.
-spec previewText(This, Htmltext, [Option]) -> boolean() when
This::wxHtmlEasyPrinting(), Htmltext::unicode:chardata(),
- Option :: {basepath, unicode:chardata()}.
+ Option :: {'basepath', unicode:chardata()}.
previewText(#wx_ref{type=ThisT,ref=ThisRef},Htmltext, Options)
when is_list(Htmltext),is_list(Options) ->
?CLASS(ThisT,wxHtmlEasyPrinting),
@@ -126,7 +126,7 @@ printText(This,Htmltext)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmleasyprinting.html#wxhtmleasyprintingprinttext">external documentation</a>.
-spec printText(This, Htmltext, [Option]) -> boolean() when
This::wxHtmlEasyPrinting(), Htmltext::unicode:chardata(),
- Option :: {basepath, unicode:chardata()}.
+ Option :: {'basepath', unicode:chardata()}.
printText(#wx_ref{type=ThisT,ref=ThisRef},Htmltext, Options)
when is_list(Htmltext),is_list(Options) ->
?CLASS(ThisT,wxHtmlEasyPrinting),
@@ -138,7 +138,7 @@ printText(#wx_ref{type=ThisT,ref=ThisRef},Htmltext, Options)
<<ThisRef:32/?UI,(byte_size(Htmltext_UC)):32/?UI,(Htmltext_UC)/binary, 0:(((8- ((0+byte_size(Htmltext_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmleasyprinting.html#wxhtmleasyprintingpagesetup">external documentation</a>.
--spec pageSetup(This) -> ok when
+-spec pageSetup(This) -> 'ok' when
This::wxHtmlEasyPrinting().
pageSetup(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxHtmlEasyPrinting),
@@ -146,7 +146,7 @@ pageSetup(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv setFonts(This,Normal_face,Fixed_face, [])
--spec setFonts(This, Normal_face, Fixed_face) -> ok when
+-spec setFonts(This, Normal_face, Fixed_face) -> 'ok' when
This::wxHtmlEasyPrinting(), Normal_face::unicode:chardata(), Fixed_face::unicode:chardata().
setFonts(This,Normal_face,Fixed_face)
@@ -154,9 +154,9 @@ setFonts(This,Normal_face,Fixed_face)
setFonts(This,Normal_face,Fixed_face, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmleasyprinting.html#wxhtmleasyprintingsetfonts">external documentation</a>.
--spec setFonts(This, Normal_face, Fixed_face, [Option]) -> ok when
+-spec setFonts(This, Normal_face, Fixed_face, [Option]) -> 'ok' when
This::wxHtmlEasyPrinting(), Normal_face::unicode:chardata(), Fixed_face::unicode:chardata(),
- Option :: {sizes, [integer()]}.
+ Option :: {'sizes', [integer()]}.
setFonts(#wx_ref{type=ThisT,ref=ThisRef},Normal_face,Fixed_face, Options)
when is_list(Normal_face),is_list(Fixed_face),is_list(Options) ->
?CLASS(ThisT,wxHtmlEasyPrinting),
@@ -170,7 +170,7 @@ setFonts(#wx_ref{type=ThisT,ref=ThisRef},Normal_face,Fixed_face, Options)
<<ThisRef:32/?UI,(byte_size(Normal_face_UC)):32/?UI,(Normal_face_UC)/binary, 0:(((8- ((0+byte_size(Normal_face_UC)) band 16#7)) band 16#7))/unit:8,(byte_size(Fixed_face_UC)):32/?UI,(Fixed_face_UC)/binary, 0:(((8- ((4+byte_size(Fixed_face_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @equiv setHeader(This,Header, [])
--spec setHeader(This, Header) -> ok when
+-spec setHeader(This, Header) -> 'ok' when
This::wxHtmlEasyPrinting(), Header::unicode:chardata().
setHeader(This,Header)
@@ -178,9 +178,9 @@ setHeader(This,Header)
setHeader(This,Header, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmleasyprinting.html#wxhtmleasyprintingsetheader">external documentation</a>.
--spec setHeader(This, Header, [Option]) -> ok when
+-spec setHeader(This, Header, [Option]) -> 'ok' when
This::wxHtmlEasyPrinting(), Header::unicode:chardata(),
- Option :: {pg, integer()}.
+ Option :: {'pg', integer()}.
setHeader(#wx_ref{type=ThisT,ref=ThisRef},Header, Options)
when is_list(Header),is_list(Options) ->
?CLASS(ThisT,wxHtmlEasyPrinting),
@@ -192,7 +192,7 @@ setHeader(#wx_ref{type=ThisT,ref=ThisRef},Header, Options)
<<ThisRef:32/?UI,(byte_size(Header_UC)):32/?UI,(Header_UC)/binary, 0:(((8- ((0+byte_size(Header_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @equiv setFooter(This,Footer, [])
--spec setFooter(This, Footer) -> ok when
+-spec setFooter(This, Footer) -> 'ok' when
This::wxHtmlEasyPrinting(), Footer::unicode:chardata().
setFooter(This,Footer)
@@ -200,9 +200,9 @@ setFooter(This,Footer)
setFooter(This,Footer, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmleasyprinting.html#wxhtmleasyprintingsetfooter">external documentation</a>.
--spec setFooter(This, Footer, [Option]) -> ok when
+-spec setFooter(This, Footer, [Option]) -> 'ok' when
This::wxHtmlEasyPrinting(), Footer::unicode:chardata(),
- Option :: {pg, integer()}.
+ Option :: {'pg', integer()}.
setFooter(#wx_ref{type=ThisT,ref=ThisRef},Footer, Options)
when is_list(Footer),is_list(Options) ->
?CLASS(ThisT,wxHtmlEasyPrinting),
@@ -214,7 +214,7 @@ setFooter(#wx_ref{type=ThisT,ref=ThisRef},Footer, Options)
<<ThisRef:32/?UI,(byte_size(Footer_UC)):32/?UI,(Footer_UC)/binary, 0:(((8- ((0+byte_size(Footer_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxHtmlEasyPrinting()) -> ok.
+-spec destroy(This::wxHtmlEasyPrinting()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxHtmlEasyPrinting),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxHtmlWindow.erl b/lib/wx/src/gen/wxHtmlWindow.erl
index 759b8ba0fd..f9bb135fcf 100644
--- a/lib/wx/src/gen/wxHtmlWindow.erl
+++ b/lib/wx/src/gen/wxHtmlWindow.erl
@@ -107,10 +107,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmlwindow.html#wxhtmlwindowwxhtmlwindow">external documentation</a>.
-spec new(Parent, [Option]) -> wxHtmlWindow() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -190,7 +190,7 @@ historyCanForward(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmlwindow.html#wxhtmlwindowhistoryclear">external documentation</a>.
--spec historyClear(This) -> ok when
+-spec historyClear(This) -> 'ok' when
This::wxHtmlWindow().
historyClear(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxHtmlWindow),
@@ -226,7 +226,7 @@ loadPage(#wx_ref{type=ThisT,ref=ThisRef},Location)
<<ThisRef:32/?UI,(byte_size(Location_UC)):32/?UI,(Location_UC)/binary, 0:(((8- ((0+byte_size(Location_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmlwindow.html#wxhtmlwindowselectall">external documentation</a>.
--spec selectAll(This) -> ok when
+-spec selectAll(This) -> 'ok' when
This::wxHtmlWindow().
selectAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxHtmlWindow),
@@ -242,7 +242,7 @@ selectionToText(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmlwindow.html#wxhtmlwindowselectline">external documentation</a>.
--spec selectLine(This, Pos) -> ok when
+-spec selectLine(This, Pos) -> 'ok' when
This::wxHtmlWindow(), Pos::{X::integer(), Y::integer()}.
selectLine(#wx_ref{type=ThisT,ref=ThisRef},{PosX,PosY})
when is_integer(PosX),is_integer(PosY) ->
@@ -251,7 +251,7 @@ selectLine(#wx_ref{type=ThisT,ref=ThisRef},{PosX,PosY})
<<ThisRef:32/?UI,PosX:32/?UI,PosY:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmlwindow.html#wxhtmlwindowselectword">external documentation</a>.
--spec selectWord(This, Pos) -> ok when
+-spec selectWord(This, Pos) -> 'ok' when
This::wxHtmlWindow(), Pos::{X::integer(), Y::integer()}.
selectWord(#wx_ref{type=ThisT,ref=ThisRef},{PosX,PosY})
when is_integer(PosX),is_integer(PosY) ->
@@ -260,7 +260,7 @@ selectWord(#wx_ref{type=ThisT,ref=ThisRef},{PosX,PosY})
<<ThisRef:32/?UI,PosX:32/?UI,PosY:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmlwindow.html#wxhtmlwindowsetborders">external documentation</a>.
--spec setBorders(This, B) -> ok when
+-spec setBorders(This, B) -> 'ok' when
This::wxHtmlWindow(), B::integer().
setBorders(#wx_ref{type=ThisT,ref=ThisRef},B)
when is_integer(B) ->
@@ -269,7 +269,7 @@ setBorders(#wx_ref{type=ThisT,ref=ThisRef},B)
<<ThisRef:32/?UI,B:32/?UI>>).
%% @equiv setFonts(This,Normal_face,Fixed_face, [])
--spec setFonts(This, Normal_face, Fixed_face) -> ok when
+-spec setFonts(This, Normal_face, Fixed_face) -> 'ok' when
This::wxHtmlWindow(), Normal_face::unicode:chardata(), Fixed_face::unicode:chardata().
setFonts(This,Normal_face,Fixed_face)
@@ -277,9 +277,9 @@ setFonts(This,Normal_face,Fixed_face)
setFonts(This,Normal_face,Fixed_face, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmlwindow.html#wxhtmlwindowsetfonts">external documentation</a>.
--spec setFonts(This, Normal_face, Fixed_face, [Option]) -> ok when
+-spec setFonts(This, Normal_face, Fixed_face, [Option]) -> 'ok' when
This::wxHtmlWindow(), Normal_face::unicode:chardata(), Fixed_face::unicode:chardata(),
- Option :: {sizes, integer()}.
+ Option :: {'sizes', integer()}.
setFonts(#wx_ref{type=ThisT,ref=ThisRef},Normal_face,Fixed_face, Options)
when is_list(Normal_face),is_list(Fixed_face),is_list(Options) ->
?CLASS(ThisT,wxHtmlWindow),
@@ -302,7 +302,7 @@ setPage(#wx_ref{type=ThisT,ref=ThisRef},Source)
<<ThisRef:32/?UI,(byte_size(Source_UC)):32/?UI,(Source_UC)/binary, 0:(((8- ((0+byte_size(Source_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmlwindow.html#wxhtmlwindowsetrelatedframe">external documentation</a>.
--spec setRelatedFrame(This, Frame, Format) -> ok when
+-spec setRelatedFrame(This, Frame, Format) -> 'ok' when
This::wxHtmlWindow(), Frame::wxFrame:wxFrame(), Format::unicode:chardata().
setRelatedFrame(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FrameT,ref=FrameRef},Format)
when is_list(Format) ->
@@ -313,7 +313,7 @@ setRelatedFrame(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FrameT,ref=FrameRef
<<ThisRef:32/?UI,FrameRef:32/?UI,(byte_size(Format_UC)):32/?UI,(Format_UC)/binary, 0:(((8- ((4+byte_size(Format_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxhtmlwindow.html#wxhtmlwindowsetrelatedstatusbar">external documentation</a>.
--spec setRelatedStatusBar(This, Bar) -> ok when
+-spec setRelatedStatusBar(This, Bar) -> 'ok' when
This::wxHtmlWindow(), Bar::integer().
setRelatedStatusBar(#wx_ref{type=ThisT,ref=ThisRef},Bar)
when is_integer(Bar) ->
@@ -330,7 +330,7 @@ toText(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxHtmlWindow()) -> ok.
+-spec destroy(This::wxHtmlWindow()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxHtmlWindow),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxIcon.erl b/lib/wx/src/gen/wxIcon.erl
index a14d76e270..c9ec32dffc 100644
--- a/lib/wx/src/gen/wxIcon.erl
+++ b/lib/wx/src/gen/wxIcon.erl
@@ -71,9 +71,9 @@ new(#wx_ref{type=LocT,ref=LocRef}) ->
%%<br /> Type = ?wxBITMAP_TYPE_INVALID | ?wxBITMAP_TYPE_BMP | ?wxBITMAP_TYPE_BMP_RESOURCE | ?wxBITMAP_TYPE_RESOURCE | ?wxBITMAP_TYPE_ICO | ?wxBITMAP_TYPE_ICO_RESOURCE | ?wxBITMAP_TYPE_CUR | ?wxBITMAP_TYPE_CUR_RESOURCE | ?wxBITMAP_TYPE_XBM | ?wxBITMAP_TYPE_XBM_DATA | ?wxBITMAP_TYPE_XPM | ?wxBITMAP_TYPE_XPM_DATA | ?wxBITMAP_TYPE_TIF | ?wxBITMAP_TYPE_TIF_RESOURCE | ?wxBITMAP_TYPE_GIF | ?wxBITMAP_TYPE_GIF_RESOURCE | ?wxBITMAP_TYPE_PNG | ?wxBITMAP_TYPE_PNG_RESOURCE | ?wxBITMAP_TYPE_JPEG | ?wxBITMAP_TYPE_JPEG_RESOURCE | ?wxBITMAP_TYPE_PNM | ?wxBITMAP_TYPE_PNM_RESOURCE | ?wxBITMAP_TYPE_PCX | ?wxBITMAP_TYPE_PCX_RESOURCE | ?wxBITMAP_TYPE_PICT | ?wxBITMAP_TYPE_PICT_RESOURCE | ?wxBITMAP_TYPE_ICON | ?wxBITMAP_TYPE_ICON_RESOURCE | ?wxBITMAP_TYPE_ANI | ?wxBITMAP_TYPE_IFF | ?wxBITMAP_TYPE_TGA | ?wxBITMAP_TYPE_MACCURSOR | ?wxBITMAP_TYPE_MACCURSOR_RESOURCE | ?wxBITMAP_TYPE_ANY
-spec new(Filename, [Option]) -> wxIcon() when
Filename::unicode:chardata(),
- Option :: {type, wx:wx_enum()}
- | {desiredWidth, integer()}
- | {desiredHeight, integer()}.
+ Option :: {'type', wx:wx_enum()}
+ | {'desiredWidth', integer()}
+ | {'desiredHeight', integer()}.
new(Filename, Options)
when is_list(Filename),is_list(Options) ->
Filename_UC = unicode:characters_to_binary([Filename,0]),
@@ -86,7 +86,7 @@ new(Filename, Options)
<<(byte_size(Filename_UC)):32/?UI,(Filename_UC)/binary, 0:(((8- ((4+byte_size(Filename_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxicon.html#wxiconcopyfrombitmap">external documentation</a>.
--spec copyFromBitmap(This, Bmp) -> ok when
+-spec copyFromBitmap(This, Bmp) -> 'ok' when
This::wxIcon(), Bmp::wxBitmap:wxBitmap().
copyFromBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef}) ->
?CLASS(ThisT,wxIcon),
@@ -95,7 +95,7 @@ copyFromBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef}) ->
<<ThisRef:32/?UI,BmpRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxIcon()) -> ok.
+-spec destroy(This::wxIcon()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxIcon),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxIconBundle.erl b/lib/wx/src/gen/wxIconBundle.erl
index 8edfdc48b8..47785963e3 100644
--- a/lib/wx/src/gen/wxIconBundle.erl
+++ b/lib/wx/src/gen/wxIconBundle.erl
@@ -64,7 +64,7 @@ new(File,Type)
<<(byte_size(File_UC)):32/?UI,(File_UC)/binary, 0:(((8- ((4+byte_size(File_UC)) band 16#7)) band 16#7))/unit:8,Type:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxiconbundle.html#wxiconbundleaddicon">external documentation</a>.
--spec addIcon(This, Icon) -> ok when
+-spec addIcon(This, Icon) -> 'ok' when
This::wxIconBundle(), Icon::wxIcon:wxIcon().
addIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef}) ->
?CLASS(ThisT,wxIconBundle),
@@ -73,7 +73,7 @@ addIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef}) ->
<<ThisRef:32/?UI,IconRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxiconbundle.html#wxiconbundleaddicon">external documentation</a>.
--spec addIcon(This, File, Type) -> ok when
+-spec addIcon(This, File, Type) -> 'ok' when
This::wxIconBundle(), File::unicode:chardata(), Type::integer().
addIcon(#wx_ref{type=ThisT,ref=ThisRef},File,Type)
when is_list(File),is_integer(Type) ->
@@ -97,7 +97,7 @@ getIcon(This)
%%
-spec getIcon(This, [Option]) -> wxIcon:wxIcon() when
This::wxIconBundle(),
- Option :: {size, integer()};
+ Option :: {'size', integer()};
(This, Size) -> wxIcon:wxIcon() when
This::wxIconBundle(), Size::{W::integer(), H::integer()}.
getIcon(#wx_ref{type=ThisT,ref=ThisRef}, Options)
@@ -115,7 +115,7 @@ getIcon(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxIconBundle()) -> ok.
+-spec destroy(This::wxIconBundle()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxIconBundle),
wxe_util:destroy(?wxIconBundle_destruct,Obj),
diff --git a/lib/wx/src/gen/wxIdleEvent.erl b/lib/wx/src/gen/wxIdleEvent.erl
index bcccf713f3..1cb3e34ef6 100644
--- a/lib/wx/src/gen/wxIdleEvent.erl
+++ b/lib/wx/src/gen/wxIdleEvent.erl
@@ -62,7 +62,7 @@ getMode() ->
<<>>).
%% @equiv requestMore(This, [])
--spec requestMore(This) -> ok when
+-spec requestMore(This) -> 'ok' when
This::wxIdleEvent().
requestMore(This)
@@ -70,9 +70,9 @@ requestMore(This)
requestMore(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxidleevent.html#wxidleeventrequestmore">external documentation</a>.
--spec requestMore(This, [Option]) -> ok when
+-spec requestMore(This, [Option]) -> 'ok' when
This::wxIdleEvent(),
- Option :: {needMore, boolean()}.
+ Option :: {'needMore', boolean()}.
requestMore(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxIdleEvent),
@@ -92,7 +92,7 @@ moreRequested(#wx_ref{type=ThisT,ref=ThisRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxidleevent.html#wxidleeventsetmode">external documentation</a>.
%%<br /> Mode = ?wxIDLE_PROCESS_ALL | ?wxIDLE_PROCESS_SPECIFIED
--spec setMode(Mode) -> ok when
+-spec setMode(Mode) -> 'ok' when
Mode::wx:wx_enum().
setMode(Mode)
when is_integer(Mode) ->
diff --git a/lib/wx/src/gen/wxImage.erl b/lib/wx/src/gen/wxImage.erl
index 884e49eabf..e82f3d609e 100644
--- a/lib/wx/src/gen/wxImage.erl
+++ b/lib/wx/src/gen/wxImage.erl
@@ -71,15 +71,15 @@ new(Name)
%% <br /> Also:<br />
%% new(Name, [Option]) -> wxImage() when<br />
%% Name::unicode:chardata(),<br />
-%% Option :: {type, integer()}<br />
-%% | {index, integer()}.<br />
+%% Option :: {'type', integer()}<br />
+%% | {'index', integer()}.<br />
%%
-spec new(Width, Height) -> wxImage() when
Width::integer(), Height::integer();
(Name, [Option]) -> wxImage() when
Name::unicode:chardata(),
- Option :: {type, integer()}
- | {index, integer()}.
+ Option :: {'type', integer()}
+ | {'index', integer()}.
new(Width,Height)
when is_integer(Width),is_integer(Height) ->
@@ -98,19 +98,19 @@ new(Name, Options)
%% <br /> Also:<br />
%% new(Width, Height, [Option]) -> wxImage() when<br />
%% Width::integer(), Height::integer(),<br />
-%% Option :: {clear, boolean()};<br />
+%% Option :: {'clear', boolean()};<br />
%% (Name, Mimetype, [Option]) -> wxImage() when<br />
%% Name::unicode:chardata(), Mimetype::unicode:chardata(),<br />
-%% Option :: {index, integer()}.<br />
+%% Option :: {'index', integer()}.<br />
%%
-spec new(Width, Height, Data) -> wxImage() when
Width::integer(), Height::integer(), Data::binary();
(Width, Height, [Option]) -> wxImage() when
Width::integer(), Height::integer(),
- Option :: {clear, boolean()};
+ Option :: {'clear', boolean()};
(Name, Mimetype, [Option]) -> wxImage() when
Name::unicode:chardata(), Mimetype::unicode:chardata(),
- Option :: {index, integer()}.
+ Option :: {'index', integer()}.
new(Width,Height,Data)
when is_integer(Width),is_integer(Height),is_binary(Data) ->
@@ -136,13 +136,13 @@ new(Name,Mimetype, Options)
%% <br /> Also:<br />
%% new(Width, Height, Data, [Option]) -> wxImage() when<br />
%% Width::integer(), Height::integer(), Data::binary(),<br />
-%% Option :: {static_data, boolean()}.<br />
+%% Option :: {'static_data', boolean()}.<br />
%%
-spec new(Width, Height, Data, Alpha) -> wxImage() when
Width::integer(), Height::integer(), Data::binary(), Alpha::binary();
(Width, Height, Data, [Option]) -> wxImage() when
Width::integer(), Height::integer(), Data::binary(),
- Option :: {static_data, boolean()}.
+ Option :: {'static_data', boolean()}.
new(Width,Height,Data,Alpha)
when is_integer(Width),is_integer(Height),is_binary(Data),is_binary(Alpha) ->
@@ -159,7 +159,7 @@ new(Width,Height,Data, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagewximage">external documentation</a>.
-spec new(Width, Height, Data, Alpha, [Option]) -> wxImage() when
Width::integer(), Height::integer(), Data::binary(), Alpha::binary(),
- Option :: {static_data, boolean()}.
+ Option :: {'static_data', boolean()}.
new(Width,Height,Data,Alpha, Options)
when is_integer(Width),is_integer(Height),is_binary(Data),is_binary(Alpha),is_list(Options) ->
wxe_util:send_bin(Data),
@@ -208,7 +208,7 @@ convertAlphaToMask(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximageconvertalphatomask">external documentation</a>.
-spec convertAlphaToMask(This, [Option]) -> boolean() when
This::wxImage(),
- Option :: {threshold, integer()}.
+ Option :: {'threshold', integer()}.
convertAlphaToMask(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -229,9 +229,9 @@ convertToGreyscale(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximageconverttogreyscale">external documentation</a>.
-spec convertToGreyscale(This, [Option]) -> wxImage() when
This::wxImage(),
- Option :: {lr, number()}
- | {lg, number()}
- | {lb, number()}.
+ Option :: {'lr', number()}
+ | {'lg', number()}
+ | {'lb', number()}.
convertToGreyscale(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -272,13 +272,13 @@ create(This,Width,Height)
%% <br /> Also:<br />
%% create(This, Width, Height, [Option]) -> boolean() when<br />
%% This::wxImage(), Width::integer(), Height::integer(),<br />
-%% Option :: {clear, boolean()}.<br />
+%% Option :: {'clear', boolean()}.<br />
%%
-spec create(This, Width, Height, Data) -> boolean() when
This::wxImage(), Width::integer(), Height::integer(), Data::binary();
(This, Width, Height, [Option]) -> boolean() when
This::wxImage(), Width::integer(), Height::integer(),
- Option :: {clear, boolean()}.
+ Option :: {'clear', boolean()}.
create(This,Width,Height,Data)
when is_record(This, wx_ref),is_integer(Width),is_integer(Height),is_binary(Data) ->
@@ -296,13 +296,13 @@ create(#wx_ref{type=ThisT,ref=ThisRef},Width,Height, Options)
%% <br /> Also:<br />
%% create(This, Width, Height, Data, [Option]) -> boolean() when<br />
%% This::wxImage(), Width::integer(), Height::integer(), Data::binary(),<br />
-%% Option :: {static_data, boolean()}.<br />
+%% Option :: {'static_data', boolean()}.<br />
%%
-spec create(This, Width, Height, Data, Alpha) -> boolean() when
This::wxImage(), Width::integer(), Height::integer(), Data::binary(), Alpha::binary();
(This, Width, Height, Data, [Option]) -> boolean() when
This::wxImage(), Width::integer(), Height::integer(), Data::binary(),
- Option :: {static_data, boolean()}.
+ Option :: {'static_data', boolean()}.
create(This,Width,Height,Data,Alpha)
when is_record(This, wx_ref),is_integer(Width),is_integer(Height),is_binary(Data),is_binary(Alpha) ->
@@ -320,7 +320,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},Width,Height,Data, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagecreate">external documentation</a>.
-spec create(This, Width, Height, Data, Alpha, [Option]) -> boolean() when
This::wxImage(), Width::integer(), Height::integer(), Data::binary(), Alpha::binary(),
- Option :: {static_data, boolean()}.
+ Option :: {'static_data', boolean()}.
create(#wx_ref{type=ThisT,ref=ThisRef},Width,Height,Data,Alpha, Options)
when is_integer(Width),is_integer(Height),is_binary(Data),is_binary(Alpha),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -333,7 +333,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},Width,Height,Data,Alpha, Options)
<<ThisRef:32/?UI,Width:32/?UI,Height:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagedestroy">external documentation</a>.
--spec 'Destroy'(This) -> ok when
+-spec 'Destroy'(This) -> 'ok' when
This::wxImage().
'Destroy'(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxImage),
@@ -353,9 +353,9 @@ findFirstUnusedColour(This)
-spec findFirstUnusedColour(This, [Option]) -> Result when
Result :: {Res ::boolean(), R::integer(), G::integer(), B::integer()},
This::wxImage(),
- Option :: {startR, integer()}
- | {startG, integer()}
- | {startB, integer()}.
+ Option :: {'startR', integer()}
+ | {'startG', integer()}
+ | {'startB', integer()}.
findFirstUnusedColour(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -428,7 +428,7 @@ getImageCount(Name)
%%<br /> Type = ?wxBITMAP_TYPE_INVALID | ?wxBITMAP_TYPE_BMP | ?wxBITMAP_TYPE_BMP_RESOURCE | ?wxBITMAP_TYPE_RESOURCE | ?wxBITMAP_TYPE_ICO | ?wxBITMAP_TYPE_ICO_RESOURCE | ?wxBITMAP_TYPE_CUR | ?wxBITMAP_TYPE_CUR_RESOURCE | ?wxBITMAP_TYPE_XBM | ?wxBITMAP_TYPE_XBM_DATA | ?wxBITMAP_TYPE_XPM | ?wxBITMAP_TYPE_XPM_DATA | ?wxBITMAP_TYPE_TIF | ?wxBITMAP_TYPE_TIF_RESOURCE | ?wxBITMAP_TYPE_GIF | ?wxBITMAP_TYPE_GIF_RESOURCE | ?wxBITMAP_TYPE_PNG | ?wxBITMAP_TYPE_PNG_RESOURCE | ?wxBITMAP_TYPE_JPEG | ?wxBITMAP_TYPE_JPEG_RESOURCE | ?wxBITMAP_TYPE_PNM | ?wxBITMAP_TYPE_PNM_RESOURCE | ?wxBITMAP_TYPE_PCX | ?wxBITMAP_TYPE_PCX_RESOURCE | ?wxBITMAP_TYPE_PICT | ?wxBITMAP_TYPE_PICT_RESOURCE | ?wxBITMAP_TYPE_ICON | ?wxBITMAP_TYPE_ICON_RESOURCE | ?wxBITMAP_TYPE_ANI | ?wxBITMAP_TYPE_IFF | ?wxBITMAP_TYPE_TGA | ?wxBITMAP_TYPE_MACCURSOR | ?wxBITMAP_TYPE_MACCURSOR_RESOURCE | ?wxBITMAP_TYPE_ANY
-spec getImageCount(Name, [Option]) -> integer() when
Name::unicode:chardata(),
- Option :: {type, wx:wx_enum()}.
+ Option :: {'type', wx:wx_enum()}.
getImageCount(Name, Options)
when is_list(Name),is_list(Options) ->
Name_UC = unicode:characters_to_binary([Name,0]),
@@ -560,7 +560,7 @@ hasOption(#wx_ref{type=ThisT,ref=ThisRef},Name)
<<ThisRef:32/?UI,(byte_size(Name_UC)):32/?UI,(Name_UC)/binary, 0:(((8- ((0+byte_size(Name_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximageinitalpha">external documentation</a>.
--spec initAlpha(This) -> ok when
+-spec initAlpha(This) -> 'ok' when
This::wxImage().
initAlpha(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxImage),
@@ -568,7 +568,7 @@ initAlpha(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximageinitstandardhandlers">external documentation</a>.
--spec initStandardHandlers() -> ok.
+-spec initStandardHandlers() -> 'ok'.
initStandardHandlers() ->
wxe_util:cast(?wxImage_InitStandardHandlers,
<<>>).
@@ -584,7 +584,7 @@ isTransparent(This,X,Y)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximageistransparent">external documentation</a>.
-spec isTransparent(This, X, Y, [Option]) -> boolean() when
This::wxImage(), X::integer(), Y::integer(),
- Option :: {threshold, integer()}.
+ Option :: {'threshold', integer()}.
isTransparent(#wx_ref{type=ThisT,ref=ThisRef},X,Y, Options)
when is_integer(X),is_integer(Y),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -605,8 +605,8 @@ loadFile(This,Name)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximageloadfile">external documentation</a>.
-spec loadFile(This, Name, [Option]) -> boolean() when
This::wxImage(), Name::unicode:chardata(),
- Option :: {type, integer()}
- | {index, integer()}.
+ Option :: {'type', integer()}
+ | {'index', integer()}.
loadFile(#wx_ref{type=ThisT,ref=ThisRef},Name, Options)
when is_list(Name),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -621,7 +621,7 @@ loadFile(#wx_ref{type=ThisT,ref=ThisRef},Name, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximageloadfile">external documentation</a>.
-spec loadFile(This, Name, Mimetype, [Option]) -> boolean() when
This::wxImage(), Name::unicode:chardata(), Mimetype::unicode:chardata(),
- Option :: {index, integer()}.
+ Option :: {'index', integer()}.
loadFile(#wx_ref{type=ThisT,ref=ThisRef},Name,Mimetype, Options)
when is_list(Name),is_list(Mimetype),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -661,7 +661,7 @@ mirror(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagemirror">external documentation</a>.
-spec mirror(This, [Option]) -> wxImage() when
This::wxImage(),
- Option :: {horizontally, boolean()}.
+ Option :: {'horizontally', boolean()}.
mirror(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -672,7 +672,7 @@ mirror(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagereplace">external documentation</a>.
--spec replace(This, R1, G1, B1, R2, G2, B2) -> ok when
+-spec replace(This, R1, G1, B1, R2, G2, B2) -> 'ok' when
This::wxImage(), R1::integer(), G1::integer(), B1::integer(), R2::integer(), G2::integer(), B2::integer().
replace(#wx_ref{type=ThisT,ref=ThisRef},R1,G1,B1,R2,G2,B2)
when is_integer(R1),is_integer(G1),is_integer(B1),is_integer(R2),is_integer(G2),is_integer(B2) ->
@@ -692,7 +692,7 @@ rescale(This,Width,Height)
%%<br /> Quality = integer
-spec rescale(This, Width, Height, [Option]) -> wxImage() when
This::wxImage(), Width::integer(), Height::integer(),
- Option :: {quality, wx:wx_enum()}.
+ Option :: {'quality', wx:wx_enum()}.
rescale(#wx_ref{type=ThisT,ref=ThisRef},Width,Height, Options)
when is_integer(Width),is_integer(Height),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -713,9 +713,9 @@ resize(This,Size={SizeW,SizeH},Pos={PosX,PosY})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximageresize">external documentation</a>.
-spec resize(This, Size, Pos, [Option]) -> wxImage() when
This::wxImage(), Size::{W::integer(), H::integer()}, Pos::{X::integer(), Y::integer()},
- Option :: {r, integer()}
- | {g, integer()}
- | {b, integer()}.
+ Option :: {'r', integer()}
+ | {'g', integer()}
+ | {'b', integer()}.
resize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH},{PosX,PosY}, Options)
when is_integer(SizeW),is_integer(SizeH),is_integer(PosX),is_integer(PosY),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -738,8 +738,8 @@ rotate(This,Angle,Centre_of_rotation={Centre_of_rotationX,Centre_of_rotationY})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagerotate">external documentation</a>.
-spec rotate(This, Angle, Centre_of_rotation, [Option]) -> wxImage() when
This::wxImage(), Angle::number(), Centre_of_rotation::{X::integer(), Y::integer()},
- Option :: {interpolating, boolean()}
- | {offset_after_rotation, {X::integer(), Y::integer()}}.
+ Option :: {'interpolating', boolean()}
+ | {'offset_after_rotation', {X::integer(), Y::integer()}}.
rotate(#wx_ref{type=ThisT,ref=ThisRef},Angle,{Centre_of_rotationX,Centre_of_rotationY}, Options)
when is_number(Angle),is_integer(Centre_of_rotationX),is_integer(Centre_of_rotationY),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -751,7 +751,7 @@ rotate(#wx_ref{type=ThisT,ref=ThisRef},Angle,{Centre_of_rotationX,Centre_of_rota
<<ThisRef:32/?UI,0:32,Angle:64/?F,Centre_of_rotationX:32/?UI,Centre_of_rotationY:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagerotatehue">external documentation</a>.
--spec rotateHue(This, Angle) -> ok when
+-spec rotateHue(This, Angle) -> 'ok' when
This::wxImage(), Angle::number().
rotateHue(#wx_ref{type=ThisT,ref=ThisRef},Angle)
when is_number(Angle) ->
@@ -770,7 +770,7 @@ rotate90(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagerotate90">external documentation</a>.
-spec rotate90(This, [Option]) -> wxImage() when
This::wxImage(),
- Option :: {clockwise, boolean()}.
+ Option :: {'clockwise', boolean()}.
rotate90(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -825,7 +825,7 @@ scale(This,Width,Height)
%%<br /> Quality = integer
-spec scale(This, Width, Height, [Option]) -> wxImage() when
This::wxImage(), Width::integer(), Height::integer(),
- Option :: {quality, wx:wx_enum()}.
+ Option :: {'quality', wx:wx_enum()}.
scale(#wx_ref{type=ThisT,ref=ThisRef},Width,Height, Options)
when is_integer(Width),is_integer(Height),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -846,9 +846,9 @@ size(This,Size={SizeW,SizeH},Pos={PosX,PosY})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesize">external documentation</a>.
-spec size(This, Size, Pos, [Option]) -> wxImage() when
This::wxImage(), Size::{W::integer(), H::integer()}, Pos::{X::integer(), Y::integer()},
- Option :: {r, integer()}
- | {g, integer()}
- | {b, integer()}.
+ Option :: {'r', integer()}
+ | {'g', integer()}
+ | {'b', integer()}.
size(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH},{PosX,PosY}, Options)
when is_integer(SizeW),is_integer(SizeH),is_integer(PosX),is_integer(PosY),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -861,7 +861,7 @@ size(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH},{PosX,PosY}, Options)
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI,PosX:32/?UI,PosY:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv setAlpha(This,Alpha, [])
--spec setAlpha(This, Alpha) -> ok when
+-spec setAlpha(This, Alpha) -> 'ok' when
This::wxImage(), Alpha::binary().
setAlpha(This,Alpha)
@@ -869,9 +869,9 @@ setAlpha(This,Alpha)
setAlpha(This,Alpha, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetalpha">external documentation</a>.
--spec setAlpha(This, Alpha, [Option]) -> ok when
+-spec setAlpha(This, Alpha, [Option]) -> 'ok' when
This::wxImage(), Alpha::binary(),
- Option :: {static_data, boolean()}.
+ Option :: {'static_data', boolean()}.
setAlpha(#wx_ref{type=ThisT,ref=ThisRef},Alpha, Options)
when is_binary(Alpha),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -883,7 +883,7 @@ setAlpha(#wx_ref{type=ThisT,ref=ThisRef},Alpha, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetalpha">external documentation</a>.
--spec setAlpha(This, X, Y, Alpha) -> ok when
+-spec setAlpha(This, X, Y, Alpha) -> 'ok' when
This::wxImage(), X::integer(), Y::integer(), Alpha::integer().
setAlpha(#wx_ref{type=ThisT,ref=ThisRef},X,Y,Alpha)
when is_integer(X),is_integer(Y),is_integer(Alpha) ->
@@ -892,7 +892,7 @@ setAlpha(#wx_ref{type=ThisT,ref=ThisRef},X,Y,Alpha)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI,Alpha:32/?UI>>).
%% @equiv setData(This,Data, [])
--spec setData(This, Data) -> ok when
+-spec setData(This, Data) -> 'ok' when
This::wxImage(), Data::binary().
setData(This,Data)
@@ -900,9 +900,9 @@ setData(This,Data)
setData(This,Data, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetdata">external documentation</a>.
--spec setData(This, Data, [Option]) -> ok when
+-spec setData(This, Data, [Option]) -> 'ok' when
This::wxImage(), Data::binary(),
- Option :: {static_data, boolean()}.
+ Option :: {'static_data', boolean()}.
setData(#wx_ref{type=ThisT,ref=ThisRef},Data, Options)
when is_binary(Data),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -914,7 +914,7 @@ setData(#wx_ref{type=ThisT,ref=ThisRef},Data, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv setData(This,Data,New_width,New_height, [])
--spec setData(This, Data, New_width, New_height) -> ok when
+-spec setData(This, Data, New_width, New_height) -> 'ok' when
This::wxImage(), Data::binary(), New_width::integer(), New_height::integer().
setData(This,Data,New_width,New_height)
@@ -922,9 +922,9 @@ setData(This,Data,New_width,New_height)
setData(This,Data,New_width,New_height, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetdata">external documentation</a>.
--spec setData(This, Data, New_width, New_height, [Option]) -> ok when
+-spec setData(This, Data, New_width, New_height, [Option]) -> 'ok' when
This::wxImage(), Data::binary(), New_width::integer(), New_height::integer(),
- Option :: {static_data, boolean()}.
+ Option :: {'static_data', boolean()}.
setData(#wx_ref{type=ThisT,ref=ThisRef},Data,New_width,New_height, Options)
when is_binary(Data),is_integer(New_width),is_integer(New_height),is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -936,7 +936,7 @@ setData(#wx_ref{type=ThisT,ref=ThisRef},Data,New_width,New_height, Options)
<<ThisRef:32/?UI,New_width:32/?UI,New_height:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv setMask(This, [])
--spec setMask(This) -> ok when
+-spec setMask(This) -> 'ok' when
This::wxImage().
setMask(This)
@@ -944,9 +944,9 @@ setMask(This)
setMask(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetmask">external documentation</a>.
--spec setMask(This, [Option]) -> ok when
+-spec setMask(This, [Option]) -> 'ok' when
This::wxImage(),
- Option :: {mask, boolean()}.
+ Option :: {'mask', boolean()}.
setMask(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxImage),
@@ -957,7 +957,7 @@ setMask(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetmaskcolour">external documentation</a>.
--spec setMaskColour(This, R, G, B) -> ok when
+-spec setMaskColour(This, R, G, B) -> 'ok' when
This::wxImage(), R::integer(), G::integer(), B::integer().
setMaskColour(#wx_ref{type=ThisT,ref=ThisRef},R,G,B)
when is_integer(R),is_integer(G),is_integer(B) ->
@@ -977,12 +977,12 @@ setMaskFromImage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MaskT,ref=MaskRef}
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetoption">external documentation</a>.
%% <br /> Also:<br />
-%% setOption(This, Name, Value) -> ok when<br />
+%% setOption(This, Name, Value) -> 'ok' when<br />
%% This::wxImage(), Name::unicode:chardata(), Value::unicode:chardata().<br />
%%
--spec setOption(This, Name, Value) -> ok when
+-spec setOption(This, Name, Value) -> 'ok' when
This::wxImage(), Name::unicode:chardata(), Value::integer();
- (This, Name, Value) -> ok when
+ (This, Name, Value) -> 'ok' when
This::wxImage(), Name::unicode:chardata(), Value::unicode:chardata().
setOption(#wx_ref{type=ThisT,ref=ThisRef},Name,Value)
when is_list(Name),is_integer(Value) ->
@@ -999,7 +999,7 @@ setOption(#wx_ref{type=ThisT,ref=ThisRef},Name,Value)
<<ThisRef:32/?UI,(byte_size(Name_UC)):32/?UI,(Name_UC)/binary, 0:(((8- ((0+byte_size(Name_UC)) band 16#7)) band 16#7))/unit:8,(byte_size(Value_UC)):32/?UI,(Value_UC)/binary, 0:(((8- ((4+byte_size(Value_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetpalette">external documentation</a>.
--spec setPalette(This, Palette) -> ok when
+-spec setPalette(This, Palette) -> 'ok' when
This::wxImage(), Palette::wxPalette:wxPalette().
setPalette(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PaletteT,ref=PaletteRef}) ->
?CLASS(ThisT,wxImage),
@@ -1008,7 +1008,7 @@ setPalette(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PaletteT,ref=PaletteRef}
<<ThisRef:32/?UI,PaletteRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetrgb">external documentation</a>.
--spec setRGB(This, Rect, R, G, B) -> ok when
+-spec setRGB(This, Rect, R, G, B) -> 'ok' when
This::wxImage(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}, R::integer(), G::integer(), B::integer().
setRGB(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH},R,G,B)
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH),is_integer(R),is_integer(G),is_integer(B) ->
@@ -1017,7 +1017,7 @@ setRGB(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH},R,G,B)
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI,R:32/?UI,G:32/?UI,B:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximage.html#wximagesetrgb">external documentation</a>.
--spec setRGB(This, X, Y, R, G, B) -> ok when
+-spec setRGB(This, X, Y, R, G, B) -> 'ok' when
This::wxImage(), X::integer(), Y::integer(), R::integer(), G::integer(), B::integer().
setRGB(#wx_ref{type=ThisT,ref=ThisRef},X,Y,R,G,B)
when is_integer(X),is_integer(Y),is_integer(R),is_integer(G),is_integer(B) ->
@@ -1026,7 +1026,7 @@ setRGB(#wx_ref{type=ThisT,ref=ThisRef},X,Y,R,G,B)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI,R:32/?UI,G:32/?UI,B:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxImage()) -> ok.
+-spec destroy(This::wxImage()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxImage),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxImageList.erl b/lib/wx/src/gen/wxImageList.erl
index dcd508d05b..39a44c0afe 100644
--- a/lib/wx/src/gen/wxImageList.erl
+++ b/lib/wx/src/gen/wxImageList.erl
@@ -54,8 +54,8 @@ new(Width,Height)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximagelist.html#wximagelistwximagelist">external documentation</a>.
-spec new(Width, Height, [Option]) -> wxImageList() when
Width::integer(), Height::integer(),
- Option :: {mask, boolean()}
- | {initialCount, integer()}.
+ Option :: {'mask', boolean()}
+ | {'initialCount', integer()}.
new(Width,Height, Options)
when is_integer(Width),is_integer(Height),is_list(Options) ->
MOpts = fun({mask, Mask}, Acc) -> [<<1:32/?UI,(wxe_util:from_bool(Mask)):32/?UI>>|Acc];
@@ -107,8 +107,8 @@ create(This,Width,Height)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximagelist.html#wximagelistcreate">external documentation</a>.
-spec create(This, Width, Height, [Option]) -> boolean() when
This::wxImageList(), Width::integer(), Height::integer(),
- Option :: {mask, boolean()}
- | {initialCount, integer()}.
+ Option :: {'mask', boolean()}
+ | {'initialCount', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},Width,Height, Options)
when is_integer(Width),is_integer(Height),is_list(Options) ->
?CLASS(ThisT,wxImageList),
@@ -130,8 +130,8 @@ draw(This,Index,Dc,X,Y)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wximagelist.html#wximagelistdraw">external documentation</a>.
-spec draw(This, Index, Dc, X, Y, [Option]) -> boolean() when
This::wxImageList(), Index::integer(), Dc::wxDC:wxDC(), X::integer(), Y::integer(),
- Option :: {flags, integer()}
- | {solidBackground, boolean()}.
+ Option :: {'flags', integer()}
+ | {'solidBackground', boolean()}.
draw(#wx_ref{type=ThisT,ref=ThisRef},Index,#wx_ref{type=DcT,ref=DcRef},X,Y, Options)
when is_integer(Index),is_integer(X),is_integer(Y),is_list(Options) ->
?CLASS(ThisT,wxImageList),
@@ -218,7 +218,7 @@ replace(#wx_ref{type=ThisT,ref=ThisRef},Index,#wx_ref{type=BitmapT,ref=BitmapRef
<<ThisRef:32/?UI,Index:32/?UI,BitmapRef:32/?UI,MaskRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxImageList()) -> ok.
+-spec destroy(This::wxImageList()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxImageList),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxJoystickEvent.erl b/lib/wx/src/gen/wxJoystickEvent.erl
index d26eb42fe8..6bad079953 100644
--- a/lib/wx/src/gen/wxJoystickEvent.erl
+++ b/lib/wx/src/gen/wxJoystickEvent.erl
@@ -57,7 +57,7 @@ buttonDown(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxjoystickevent.html#wxjoystickeventbuttondown">external documentation</a>.
-spec buttonDown(This, [Option]) -> boolean() when
This::wxJoystickEvent(),
- Option :: {but, integer()}.
+ Option :: {'but', integer()}.
buttonDown(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxJoystickEvent),
@@ -78,7 +78,7 @@ buttonIsDown(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxjoystickevent.html#wxjoystickeventbuttonisdown">external documentation</a>.
-spec buttonIsDown(This, [Option]) -> boolean() when
This::wxJoystickEvent(),
- Option :: {but, integer()}.
+ Option :: {'but', integer()}.
buttonIsDown(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxJoystickEvent),
@@ -99,7 +99,7 @@ buttonUp(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxjoystickevent.html#wxjoystickeventbuttonup">external documentation</a>.
-spec buttonUp(This, [Option]) -> boolean() when
This::wxJoystickEvent(),
- Option :: {but, integer()}.
+ Option :: {'but', integer()}.
buttonUp(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxJoystickEvent),
diff --git a/lib/wx/src/gen/wxLayoutAlgorithm.erl b/lib/wx/src/gen/wxLayoutAlgorithm.erl
index 344af3dc0d..f389b83281 100644
--- a/lib/wx/src/gen/wxLayoutAlgorithm.erl
+++ b/lib/wx/src/gen/wxLayoutAlgorithm.erl
@@ -53,7 +53,7 @@ layoutFrame(This,Frame)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlayoutalgorithm.html#wxlayoutalgorithmlayoutframe">external documentation</a>.
-spec layoutFrame(This, Frame, [Option]) -> boolean() when
This::wxLayoutAlgorithm(), Frame::wxFrame:wxFrame(),
- Option :: {mainWindow, wxWindow:wxWindow()}.
+ Option :: {'mainWindow', wxWindow:wxWindow()}.
layoutFrame(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FrameT,ref=FrameRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxLayoutAlgorithm),
@@ -75,7 +75,7 @@ layoutMDIFrame(This,Frame)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlayoutalgorithm.html#wxlayoutalgorithmlayoutmdiframe">external documentation</a>.
-spec layoutMDIFrame(This, Frame, [Option]) -> boolean() when
This::wxLayoutAlgorithm(), Frame::wxMDIParentFrame:wxMDIParentFrame(),
- Option :: {rect, {X::integer(), Y::integer(), W::integer(), H::integer()}}.
+ Option :: {'rect', {X::integer(), Y::integer(), W::integer(), H::integer()}}.
layoutMDIFrame(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FrameT,ref=FrameRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxLayoutAlgorithm),
@@ -97,7 +97,7 @@ layoutWindow(This,Frame)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlayoutalgorithm.html#wxlayoutalgorithmlayoutwindow">external documentation</a>.
-spec layoutWindow(This, Frame, [Option]) -> boolean() when
This::wxLayoutAlgorithm(), Frame::wxWindow:wxWindow(),
- Option :: {mainWindow, wxWindow:wxWindow()}.
+ Option :: {'mainWindow', wxWindow:wxWindow()}.
layoutWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FrameT,ref=FrameRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxLayoutAlgorithm),
@@ -109,7 +109,7 @@ layoutWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FrameT,ref=FrameRef},
<<ThisRef:32/?UI,FrameRef:32/?UI, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxLayoutAlgorithm()) -> ok.
+-spec destroy(This::wxLayoutAlgorithm()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxLayoutAlgorithm),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxListBox.erl b/lib/wx/src/gen/wxListBox.erl
index eaa026839e..9ab3616e9b 100644
--- a/lib/wx/src/gen/wxListBox.erl
+++ b/lib/wx/src/gen/wxListBox.erl
@@ -103,11 +103,11 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbox.html#wxlistboxwxlistbox">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxListBox() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {choices, [unicode:chardata()]}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'choices', [unicode:chardata()]}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -132,8 +132,8 @@ create(This,Parent,Id,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbox.html#wxlistboxcreate">external documentation</a>.
-spec create(This, Parent, Id, Pos, Size, Choices, [Option]) -> boolean() when
This::wxListBox(), Parent::wxWindow:wxWindow(), Id::integer(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()],
- Option :: {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,{PosX,PosY},{SizeW,SizeH},Choices, Options)
when is_integer(Id),is_integer(PosX),is_integer(PosY),is_integer(SizeW),is_integer(SizeH),is_list(Choices),is_list(Options) ->
?CLASS(ThisT,wxListBox),
@@ -148,7 +148,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,{P
<<ThisRef:32/?UI,ParentRef:32/?UI,Id:32/?UI,PosX:32/?UI,PosY:32/?UI,SizeW:32/?UI,SizeH:32/?UI,(length(Choices_UCA)):32/?UI, (<< <<(byte_size(UC_Str)):32/?UI, UC_Str/binary>>|| UC_Str <- Choices_UCA>>)/binary, 0:(((8- ((0 + lists:sum([byte_size(S)+4||S<-Choices_UCA])) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbox.html#wxlistboxdeselect">external documentation</a>.
--spec deselect(This, N) -> ok when
+-spec deselect(This, N) -> 'ok' when
This::wxListBox(), N::integer().
deselect(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -166,7 +166,7 @@ getSelections(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbox.html#wxlistboxinsertitems">external documentation</a>.
--spec insertItems(This, Items, Pos) -> ok when
+-spec insertItems(This, Items, Pos) -> 'ok' when
This::wxListBox(), Items::[unicode:chardata()], Pos::integer().
insertItems(#wx_ref{type=ThisT,ref=ThisRef},Items,Pos)
when is_list(Items),is_integer(Pos) ->
@@ -186,7 +186,7 @@ isSelected(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbox.html#wxlistboxset">external documentation</a>.
--spec set(This, Items) -> ok when
+-spec set(This, Items) -> 'ok' when
This::wxListBox(), Items::[unicode:chardata()].
set(#wx_ref{type=ThisT,ref=ThisRef},Items)
when is_list(Items) ->
@@ -207,12 +207,12 @@ hitTest(#wx_ref{type=ThisT,ref=ThisRef},{PointX,PointY})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbox.html#wxlistboxsetfirstitem">external documentation</a>.
%% <br /> Also:<br />
-%% setFirstItem(This, S) -> ok when<br />
+%% setFirstItem(This, S) -> 'ok' when<br />
%% This::wxListBox(), S::unicode:chardata().<br />
%%
--spec setFirstItem(This, N) -> ok when
+-spec setFirstItem(This, N) -> 'ok' when
This::wxListBox(), N::integer();
- (This, S) -> ok when
+ (This, S) -> 'ok' when
This::wxListBox(), S::unicode:chardata().
setFirstItem(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -227,7 +227,7 @@ setFirstItem(#wx_ref{type=ThisT,ref=ThisRef},S)
<<ThisRef:32/?UI,(byte_size(S_UC)):32/?UI,(S_UC)/binary, 0:(((8- ((0+byte_size(S_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxListBox()) -> ok.
+-spec destroy(This::wxListBox()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxListBox),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxListCtrl.erl b/lib/wx/src/gen/wxListCtrl.erl
index ed997710c8..851686062a 100644
--- a/lib/wx/src/gen/wxListCtrl.erl
+++ b/lib/wx/src/gen/wxListCtrl.erl
@@ -94,31 +94,34 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxListCtrl() :: wx:wx_object().
-%% @spec () -> wxListCtrl()
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxlistctrl.html#wxlistctrlwxlistctrl">external documentation</a>.
+-spec new() -> wxListCtrl().
new() ->
wxe_util:construct(?wxListCtrl_new_0, <<>>).
-%% @spec (Parent::wxWindow:wxWindow()) -> wxListCtrl()
-%% @equiv new(Parent, [])
+-spec new(Parent) -> wxListCtrl() when
+ Parent::wxWindow:wxWindow().
new(Parent)
when is_record(Parent, wx_ref) ->
new(Parent, []).
-%% @spec (Parent::wxWindow:wxWindow(), [Option]) -> wxListCtrl()
-%% Option = {winid, integer()} |
-%% {pos, {X::integer(),Y::integer()}} |
-%% {size, {W::integer(),H::integer()}} |
-%% {style, integer()} |
-%% {validator, wx:wx()} |
-%% {onGetItemText, OnGetItemText} |
-%% {onGetItemAttr, OnGetItemAttr} |
-%% {onGetItemColumnImage, OnGetItemColumnImage}
+%% @doc Creates a listctrl with optional callback functions:
%%
-%% OnGetItemText = (This, Item, Column) -> wxString()
-%% OnGetItemAttr = (This, Item) -> wxListItemAttr()
+%% OnGetItemText = (This, Item, Column) -> unicode:charlist()
+%% OnGetItemAttr = (This, Item) -> wxListItemAttr:wxListItemAttr()
%% OnGetItemColumnImage = (This, Item, Column) -> integer()
-%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxlistctrl.html#wxlistctrlwxlistctrl">external documentation</a>.
+%%
+%% See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxlistctrl.html#wxlistctrlwxlistctrl">external documentation</a>.
+-spec new(Parent, [Option]) -> wxListCtrl() when
+ Parent::wxWindow:wxWindow(),
+ Option::{winid, integer()} |
+ {pos, {X::integer(),Y::integer()}} |
+ {size, {W::integer(),H::integer()}} |
+ {style, integer()} |
+ {validator, wx:wx_object()} |
+ {onGetItemText, function()} |
+ {onGetItemAttr, function()} |
+ {onGetItemColumnImage, function()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options)->
@@ -156,7 +159,7 @@ arrange(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlarrange">external documentation</a>.
-spec arrange(This, [Option]) -> boolean() when
This::wxListCtrl(),
- Option :: {flag, integer()}.
+ Option :: {'flag', integer()}.
arrange(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxListCtrl),
@@ -167,7 +170,7 @@ arrange(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlassignimagelist">external documentation</a>.
--spec assignImageList(This, ImageList, Which) -> ok when
+-spec assignImageList(This, ImageList, Which) -> 'ok' when
This::wxListCtrl(), ImageList::wxImageList:wxImageList(), Which::integer().
assignImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef},Which)
when is_integer(Which) ->
@@ -177,7 +180,7 @@ assignImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=Imag
<<ThisRef:32/?UI,ImageListRef:32/?UI,Which:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlclearall">external documentation</a>.
--spec clearAll(This) -> ok when
+-spec clearAll(This) -> 'ok' when
This::wxListCtrl().
clearAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxListCtrl),
@@ -185,26 +188,27 @@ clearAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
-%% @spec (This::wxListCtrl(), Parent::wxWindow:wxWindow()) -> bool()
%% @equiv create(This,Parent, [])
+-spec create(This, Parent) -> wxListCtrl() when
+ This::wxWindow:wxWindow(),
+ Parent::wxWindow:wxWindow().
create(This,Parent)
when is_record(This, wx_ref),is_record(Parent, wx_ref) ->
create(This,Parent, []).
-%% @spec (This::wxListCtrl(), Parent::wxWindow:wxWindow(), [Option]) -> bool()
-%% Option = {winid, integer()} |
-%% {pos, {X::integer(),Y::integer()}} |
-%% {size, {W::integer(),H::integer()}} |
-%% {style, integer()} |
-%% {validator, wx:wx()} |
-%% {onGetItemText, OnGetItemText} |
-%% {onGetItemAttr, OnGetItemAttr} |
-%% {onGetItemColumnImage, OnGetItemColumnImage}
-%%
-%% OnGetItemText = (This, Item, Column) -> wxString()
-%% OnGetItemAttr = (This, Item) -> wxListItemAttr()
-%% OnGetItemColumnImage = (This, Item, Column) -> integer()
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxlistctrl.html#wxlistctrlcreate">external documentation</a>.
+-spec create(This, Parent, [Option]) -> wxListCtrl() when
+ This::wxWindow:wxWindow(),
+ Parent::wxWindow:wxWindow(),
+ Option::{winid, integer()} |
+ {pos, {X::integer(),Y::integer()}} |
+ {size, {W::integer(),H::integer()}} |
+ {style, integer()} |
+ {validator, wx:wx_object()} |
+ {onGetItemText, function()} |
+ {onGetItemAttr, function()} |
+ {onGetItemColumnImage, function()}.
+
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxListCtrl),
@@ -278,7 +282,7 @@ findItem(This,Start,Str)
%%
-spec findItem(This, Start, Str, [Option]) -> integer() when
This::wxListCtrl(), Start::integer(), Str::unicode:chardata(),
- Option :: {partial, boolean()};
+ Option :: {'partial', boolean()};
(This, Start, Pt, Direction) -> integer() when
This::wxListCtrl(), Start::integer(), Pt::{X::integer(), Y::integer()}, Direction::integer().
findItem(#wx_ref{type=ThisT,ref=ThisRef},Start,Str, Options)
@@ -415,7 +419,7 @@ getItemRect(This,Item)
-spec getItemRect(This, Item, [Option]) -> Result when
Result :: {Res ::boolean(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}},
This::wxListCtrl(), Item::integer(),
- Option :: {code, integer()}.
+ Option :: {'code', integer()}.
getItemRect(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
when is_integer(Item),is_list(Options) ->
?CLASS(ThisT,wxListCtrl),
@@ -471,8 +475,8 @@ getNextItem(This,Item)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlgetnextitem">external documentation</a>.
-spec getNextItem(This, Item, [Option]) -> integer() when
This::wxListCtrl(), Item::integer(),
- Option :: {geometry, integer()}
- | {state, integer()}.
+ Option :: {'geometry', integer()}
+ | {'state', integer()}.
getNextItem(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
when is_integer(Item),is_list(Options) ->
?CLASS(ThisT,wxListCtrl),
@@ -548,8 +552,8 @@ insertColumn(#wx_ref{type=ThisT,ref=ThisRef},Col,#wx_ref{type=InfoT,ref=InfoRef}
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlinsertcolumn">external documentation</a>.
-spec insertColumn(This, Col, Heading, [Option]) -> integer() when
This::wxListCtrl(), Col::integer(), Heading::unicode:chardata(),
- Option :: {format, integer()}
- | {width, integer()}.
+ Option :: {'format', integer()}
+ | {'width', integer()}.
insertColumn(#wx_ref{type=ThisT,ref=ThisRef},Col,Heading, Options)
when is_integer(Col),is_list(Heading),is_list(Options) ->
?CLASS(ThisT,wxListCtrl),
@@ -602,7 +606,7 @@ insertItem(#wx_ref{type=ThisT,ref=ThisRef},Index,Label,ImageIndex)
<<ThisRef:32/?UI,Index:32/?UI,(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((4+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8,ImageIndex:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlrefreshitem">external documentation</a>.
--spec refreshItem(This, Item) -> ok when
+-spec refreshItem(This, Item) -> 'ok' when
This::wxListCtrl(), Item::integer().
refreshItem(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -611,7 +615,7 @@ refreshItem(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,Item:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlrefreshitems">external documentation</a>.
--spec refreshItems(This, ItemFrom, ItemTo) -> ok when
+-spec refreshItems(This, ItemFrom, ItemTo) -> 'ok' when
This::wxListCtrl(), ItemFrom::integer(), ItemTo::integer().
refreshItems(#wx_ref{type=ThisT,ref=ThisRef},ItemFrom,ItemTo)
when is_integer(ItemFrom),is_integer(ItemTo) ->
@@ -657,7 +661,7 @@ setColumnWidth(#wx_ref{type=ThisT,ref=ThisRef},Col,Width)
<<ThisRef:32/?UI,Col:32/?UI,Width:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetimagelist">external documentation</a>.
--spec setImageList(This, ImageList, Which) -> ok when
+-spec setImageList(This, ImageList, Which) -> 'ok' when
This::wxListCtrl(), ImageList::wxImageList:wxImageList(), Which::integer().
setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef},Which)
when is_integer(Which) ->
@@ -686,7 +690,7 @@ setItem(This,Index,Col,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetitem">external documentation</a>.
-spec setItem(This, Index, Col, Label, [Option]) -> integer() when
This::wxListCtrl(), Index::integer(), Col::integer(), Label::unicode:chardata(),
- Option :: {imageId, integer()}.
+ Option :: {'imageId', integer()}.
setItem(#wx_ref{type=ThisT,ref=ThisRef},Index,Col,Label, Options)
when is_integer(Index),is_integer(Col),is_list(Label),is_list(Options) ->
?CLASS(ThisT,wxListCtrl),
@@ -698,7 +702,7 @@ setItem(#wx_ref{type=ThisT,ref=ThisRef},Index,Col,Label, Options)
<<ThisRef:32/?UI,Index:32/?UI,Col:32/?UI,(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((0+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetitembackgroundcolour">external documentation</a>.
--spec setItemBackgroundColour(This, Item, Col) -> ok when
+-spec setItemBackgroundColour(This, Item, Col) -> 'ok' when
This::wxListCtrl(), Item::integer(), Col::wx:wx_colour().
setItemBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Item,Col)
when is_integer(Item),tuple_size(Col) =:= 3; tuple_size(Col) =:= 4 ->
@@ -707,7 +711,7 @@ setItemBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Item,Col)
<<ThisRef:32/?UI,Item:32/?UI,(wxe_util:colour_bin(Col)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetitemcount">external documentation</a>.
--spec setItemCount(This, Count) -> ok when
+-spec setItemCount(This, Count) -> 'ok' when
This::wxListCtrl(), Count::integer().
setItemCount(#wx_ref{type=ThisT,ref=ThisRef},Count)
when is_integer(Count) ->
@@ -725,7 +729,7 @@ setItemData(#wx_ref{type=ThisT,ref=ThisRef},Item,Data)
<<ThisRef:32/?UI,Item:32/?UI,Data:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetitemfont">external documentation</a>.
--spec setItemFont(This, Item, F) -> ok when
+-spec setItemFont(This, Item, F) -> 'ok' when
This::wxListCtrl(), Item::integer(), F::wxFont:wxFont().
setItemFont(#wx_ref{type=ThisT,ref=ThisRef},Item,#wx_ref{type=FT,ref=FRef})
when is_integer(Item) ->
@@ -745,7 +749,7 @@ setItemImage(This,Item,Image)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetitemimage">external documentation</a>.
-spec setItemImage(This, Item, Image, [Option]) -> boolean() when
This::wxListCtrl(), Item::integer(), Image::integer(),
- Option :: {selImage, integer()}.
+ Option :: {'selImage', integer()}.
setItemImage(#wx_ref{type=ThisT,ref=ThisRef},Item,Image, Options)
when is_integer(Item),is_integer(Image),is_list(Options) ->
?CLASS(ThisT,wxListCtrl),
@@ -783,7 +787,7 @@ setItemState(#wx_ref{type=ThisT,ref=ThisRef},Item,State,StateMask)
<<ThisRef:32/?UI,Item:32/?UI,State:32/?UI,StateMask:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetitemtext">external documentation</a>.
--spec setItemText(This, Item, Str) -> ok when
+-spec setItemText(This, Item, Str) -> 'ok' when
This::wxListCtrl(), Item::integer(), Str::unicode:chardata().
setItemText(#wx_ref{type=ThisT,ref=ThisRef},Item,Str)
when is_integer(Item),is_list(Str) ->
@@ -793,7 +797,7 @@ setItemText(#wx_ref{type=ThisT,ref=ThisRef},Item,Str)
<<ThisRef:32/?UI,Item:32/?UI,(byte_size(Str_UC)):32/?UI,(Str_UC)/binary, 0:(((8- ((4+byte_size(Str_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetitemtextcolour">external documentation</a>.
--spec setItemTextColour(This, Item, Col) -> ok when
+-spec setItemTextColour(This, Item, Col) -> 'ok' when
This::wxListCtrl(), Item::integer(), Col::wx:wx_colour().
setItemTextColour(#wx_ref{type=ThisT,ref=ThisRef},Item,Col)
when is_integer(Item),tuple_size(Col) =:= 3; tuple_size(Col) =:= 4 ->
@@ -802,7 +806,7 @@ setItemTextColour(#wx_ref{type=ThisT,ref=ThisRef},Item,Col)
<<ThisRef:32/?UI,Item:32/?UI,(wxe_util:colour_bin(Col)):16/binary>>).
%% @equiv setSingleStyle(This,Style, [])
--spec setSingleStyle(This, Style) -> ok when
+-spec setSingleStyle(This, Style) -> 'ok' when
This::wxListCtrl(), Style::integer().
setSingleStyle(This,Style)
@@ -810,9 +814,9 @@ setSingleStyle(This,Style)
setSingleStyle(This,Style, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetsinglestyle">external documentation</a>.
--spec setSingleStyle(This, Style, [Option]) -> ok when
+-spec setSingleStyle(This, Style, [Option]) -> 'ok' when
This::wxListCtrl(), Style::integer(),
- Option :: {add, boolean()}.
+ Option :: {'add', boolean()}.
setSingleStyle(#wx_ref{type=ThisT,ref=ThisRef},Style, Options)
when is_integer(Style),is_list(Options) ->
?CLASS(ThisT,wxListCtrl),
@@ -823,7 +827,7 @@ setSingleStyle(#wx_ref{type=ThisT,ref=ThisRef},Style, Options)
<<ThisRef:32/?UI,Style:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsettextcolour">external documentation</a>.
--spec setTextColour(This, Col) -> ok when
+-spec setTextColour(This, Col) -> 'ok' when
This::wxListCtrl(), Col::wx:wx_colour().
setTextColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
when tuple_size(Col) =:= 3; tuple_size(Col) =:= 4 ->
@@ -832,7 +836,7 @@ setTextColour(#wx_ref{type=ThisT,ref=ThisRef},Col)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Col)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistctrl.html#wxlistctrlsetwindowstyleflag">external documentation</a>.
--spec setWindowStyleFlag(This, Style) -> ok when
+-spec setWindowStyleFlag(This, Style) -> 'ok' when
This::wxListCtrl(), Style::integer().
setWindowStyleFlag(#wx_ref{type=ThisT,ref=ThisRef},Style)
when is_integer(Style) ->
@@ -859,7 +863,7 @@ sortItems(#wx_ref{type=ThisT,ref=ThisRef}, SortCallBack)
SortId = wxe_util:get_cbId(Sort),
wxe_util:call(?wxListCtrl_SortItems, <<ThisRef:32/?UI,SortId:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxListCtrl()) -> ok.
+-spec destroy(This::wxListCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxListCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxListItem.erl b/lib/wx/src/gen/wxListItem.erl
index 0dcad246d0..1530a8c514 100644
--- a/lib/wx/src/gen/wxListItem.erl
+++ b/lib/wx/src/gen/wxListItem.erl
@@ -54,7 +54,7 @@ new(#wx_ref{type=ItemT,ref=ItemRef}) ->
<<ItemRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemclear">external documentation</a>.
--spec clear(This) -> ok when
+-spec clear(This) -> 'ok' when
This::wxListItem().
clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxListItem),
@@ -152,7 +152,7 @@ getWidth(#wx_ref{type=ThisT,ref=ThisRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetalign">external documentation</a>.
%%<br /> Align = ?wxLIST_FORMAT_LEFT | ?wxLIST_FORMAT_RIGHT | ?wxLIST_FORMAT_CENTRE | ?wxLIST_FORMAT_CENTER
--spec setAlign(This, Align) -> ok when
+-spec setAlign(This, Align) -> 'ok' when
This::wxListItem(), Align::wx:wx_enum().
setAlign(#wx_ref{type=ThisT,ref=ThisRef},Align)
when is_integer(Align) ->
@@ -161,7 +161,7 @@ setAlign(#wx_ref{type=ThisT,ref=ThisRef},Align)
<<ThisRef:32/?UI,Align:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetbackgroundcolour">external documentation</a>.
--spec setBackgroundColour(This, ColBack) -> ok when
+-spec setBackgroundColour(This, ColBack) -> 'ok' when
This::wxListItem(), ColBack::wx:wx_colour().
setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
when tuple_size(ColBack) =:= 3; tuple_size(ColBack) =:= 4 ->
@@ -170,7 +170,7 @@ setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColBack)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetcolumn">external documentation</a>.
--spec setColumn(This, Col) -> ok when
+-spec setColumn(This, Col) -> 'ok' when
This::wxListItem(), Col::integer().
setColumn(#wx_ref{type=ThisT,ref=ThisRef},Col)
when is_integer(Col) ->
@@ -179,7 +179,7 @@ setColumn(#wx_ref{type=ThisT,ref=ThisRef},Col)
<<ThisRef:32/?UI,Col:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetfont">external documentation</a>.
--spec setFont(This, Font) -> ok when
+-spec setFont(This, Font) -> 'ok' when
This::wxListItem(), Font::wxFont:wxFont().
setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxListItem),
@@ -188,7 +188,7 @@ setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetid">external documentation</a>.
--spec setId(This, Id) -> ok when
+-spec setId(This, Id) -> 'ok' when
This::wxListItem(), Id::integer().
setId(#wx_ref{type=ThisT,ref=ThisRef},Id)
when is_integer(Id) ->
@@ -197,7 +197,7 @@ setId(#wx_ref{type=ThisT,ref=ThisRef},Id)
<<ThisRef:32/?UI,Id:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetimage">external documentation</a>.
--spec setImage(This, Image) -> ok when
+-spec setImage(This, Image) -> 'ok' when
This::wxListItem(), Image::integer().
setImage(#wx_ref{type=ThisT,ref=ThisRef},Image)
when is_integer(Image) ->
@@ -206,7 +206,7 @@ setImage(#wx_ref{type=ThisT,ref=ThisRef},Image)
<<ThisRef:32/?UI,Image:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetmask">external documentation</a>.
--spec setMask(This, Mask) -> ok when
+-spec setMask(This, Mask) -> 'ok' when
This::wxListItem(), Mask::integer().
setMask(#wx_ref{type=ThisT,ref=ThisRef},Mask)
when is_integer(Mask) ->
@@ -215,7 +215,7 @@ setMask(#wx_ref{type=ThisT,ref=ThisRef},Mask)
<<ThisRef:32/?UI,Mask:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetstate">external documentation</a>.
--spec setState(This, State) -> ok when
+-spec setState(This, State) -> 'ok' when
This::wxListItem(), State::integer().
setState(#wx_ref{type=ThisT,ref=ThisRef},State)
when is_integer(State) ->
@@ -224,7 +224,7 @@ setState(#wx_ref{type=ThisT,ref=ThisRef},State)
<<ThisRef:32/?UI,State:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetstatemask">external documentation</a>.
--spec setStateMask(This, StateMask) -> ok when
+-spec setStateMask(This, StateMask) -> 'ok' when
This::wxListItem(), StateMask::integer().
setStateMask(#wx_ref{type=ThisT,ref=ThisRef},StateMask)
when is_integer(StateMask) ->
@@ -233,7 +233,7 @@ setStateMask(#wx_ref{type=ThisT,ref=ThisRef},StateMask)
<<ThisRef:32/?UI,StateMask:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsettext">external documentation</a>.
--spec setText(This, Text) -> ok when
+-spec setText(This, Text) -> 'ok' when
This::wxListItem(), Text::unicode:chardata().
setText(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -243,7 +243,7 @@ setText(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsettextcolour">external documentation</a>.
--spec setTextColour(This, ColText) -> ok when
+-spec setTextColour(This, ColText) -> 'ok' when
This::wxListItem(), ColText::wx:wx_colour().
setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
when tuple_size(ColText) =:= 3; tuple_size(ColText) =:= 4 ->
@@ -252,7 +252,7 @@ setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColText)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitem.html#wxlistitemsetwidth">external documentation</a>.
--spec setWidth(This, Width) -> ok when
+-spec setWidth(This, Width) -> 'ok' when
This::wxListItem(), Width::integer().
setWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
when is_integer(Width) ->
@@ -261,7 +261,7 @@ setWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
<<ThisRef:32/?UI,Width:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxListItem()) -> ok.
+-spec destroy(This::wxListItem()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxListItem),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxListItemAttr.erl b/lib/wx/src/gen/wxListItemAttr.erl
index c581292358..360366c1be 100644
--- a/lib/wx/src/gen/wxListItemAttr.erl
+++ b/lib/wx/src/gen/wxListItemAttr.erl
@@ -101,7 +101,7 @@ hasTextColour(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitemattr.html#wxlistitemattrsetbackgroundcolour">external documentation</a>.
--spec setBackgroundColour(This, ColBack) -> ok when
+-spec setBackgroundColour(This, ColBack) -> 'ok' when
This::wxListItemAttr(), ColBack::wx:wx_colour().
setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
when tuple_size(ColBack) =:= 3; tuple_size(ColBack) =:= 4 ->
@@ -110,7 +110,7 @@ setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColBack)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitemattr.html#wxlistitemattrsetfont">external documentation</a>.
--spec setFont(This, Font) -> ok when
+-spec setFont(This, Font) -> 'ok' when
This::wxListItemAttr(), Font::wxFont:wxFont().
setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxListItemAttr),
@@ -119,7 +119,7 @@ setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistitemattr.html#wxlistitemattrsettextcolour">external documentation</a>.
--spec setTextColour(This, ColText) -> ok when
+-spec setTextColour(This, ColText) -> 'ok' when
This::wxListItemAttr(), ColText::wx:wx_colour().
setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
when tuple_size(ColText) =:= 3; tuple_size(ColText) =:= 4 ->
@@ -128,7 +128,7 @@ setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColText)):16/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxListItemAttr()) -> ok.
+-spec destroy(This::wxListItemAttr()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxListItemAttr),
wxe_util:destroy(?wxListItemAttr_destroy,Obj),
diff --git a/lib/wx/src/gen/wxListView.erl b/lib/wx/src/gen/wxListView.erl
index 288afcee82..908bf4c1c9 100644
--- a/lib/wx/src/gen/wxListView.erl
+++ b/lib/wx/src/gen/wxListView.erl
@@ -81,7 +81,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxListView() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistview.html#wxlistviewclearcolumnimage">external documentation</a>.
--spec clearColumnImage(This, Col) -> ok when
+-spec clearColumnImage(This, Col) -> 'ok' when
This::wxListView(), Col::integer().
clearColumnImage(#wx_ref{type=ThisT,ref=ThisRef},Col)
when is_integer(Col) ->
@@ -90,7 +90,7 @@ clearColumnImage(#wx_ref{type=ThisT,ref=ThisRef},Col)
<<ThisRef:32/?UI,Col:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistview.html#wxlistviewfocus">external documentation</a>.
--spec focus(This, Index) -> ok when
+-spec focus(This, Index) -> 'ok' when
This::wxListView(), Index::integer().
focus(#wx_ref{type=ThisT,ref=ThisRef},Index)
when is_integer(Index) ->
@@ -133,7 +133,7 @@ isSelected(#wx_ref{type=ThisT,ref=ThisRef},Index)
<<ThisRef:32/?UI,Index:32/?UI>>).
%% @equiv select(This,N, [])
--spec select(This, N) -> ok when
+-spec select(This, N) -> 'ok' when
This::wxListView(), N::integer().
select(This,N)
@@ -141,9 +141,9 @@ select(This,N)
select(This,N, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistview.html#wxlistviewselect">external documentation</a>.
--spec select(This, N, [Option]) -> ok when
+-spec select(This, N, [Option]) -> 'ok' when
This::wxListView(), N::integer(),
- Option :: {on, boolean()}.
+ Option :: {'on', boolean()}.
select(#wx_ref{type=ThisT,ref=ThisRef},N, Options)
when is_integer(N),is_list(Options) ->
?CLASS(ThisT,wxListView),
@@ -154,7 +154,7 @@ select(#wx_ref{type=ThisT,ref=ThisRef},N, Options)
<<ThisRef:32/?UI,N:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistview.html#wxlistviewsetcolumnimage">external documentation</a>.
--spec setColumnImage(This, Col, Image) -> ok when
+-spec setColumnImage(This, Col, Image) -> 'ok' when
This::wxListView(), Col::integer(), Image::integer().
setColumnImage(#wx_ref{type=ThisT,ref=ThisRef},Col,Image)
when is_integer(Col),is_integer(Image) ->
diff --git a/lib/wx/src/gen/wxListbook.erl b/lib/wx/src/gen/wxListbook.erl
index 6ea34e8eb1..a7050e1db9 100644
--- a/lib/wx/src/gen/wxListbook.erl
+++ b/lib/wx/src/gen/wxListbook.erl
@@ -101,9 +101,9 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbook.html#wxlistbookwxlistbook">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxListbook() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -126,8 +126,8 @@ addPage(This,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbook.html#wxlistbookaddpage">external documentation</a>.
-spec addPage(This, Page, Text, [Option]) -> boolean() when
This::wxListbook(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxListbook),
@@ -141,7 +141,7 @@ addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Op
<<ThisRef:32/?UI,PageRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @equiv advanceSelection(This, [])
--spec advanceSelection(This) -> ok when
+-spec advanceSelection(This) -> 'ok' when
This::wxListbook().
advanceSelection(This)
@@ -149,9 +149,9 @@ advanceSelection(This)
advanceSelection(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbook.html#wxlistbookadvanceselection">external documentation</a>.
--spec advanceSelection(This, [Option]) -> ok when
+-spec advanceSelection(This, [Option]) -> 'ok' when
This::wxListbook(),
- Option :: {forward, boolean()}.
+ Option :: {'forward', boolean()}.
advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxListbook),
@@ -162,7 +162,7 @@ advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbook.html#wxlistbookassignimagelist">external documentation</a>.
--spec assignImageList(This, ImageList) -> ok when
+-spec assignImageList(This, ImageList) -> 'ok' when
This::wxListbook(), ImageList::wxImageList:wxImageList().
assignImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxListbook),
@@ -181,9 +181,9 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbook.html#wxlistbookcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxListbook(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxListbook),
@@ -302,8 +302,8 @@ insertPage(This,N,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbook.html#wxlistbookinsertpage">external documentation</a>.
-spec insertPage(This, N, Page, Text, [Option]) -> boolean() when
This::wxListbook(), N::integer(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
insertPage(#wx_ref{type=ThisT,ref=ThisRef},N,#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_integer(N),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxListbook),
@@ -317,7 +317,7 @@ insertPage(#wx_ref{type=ThisT,ref=ThisRef},N,#wx_ref{type=PageT,ref=PageRef},Tex
<<ThisRef:32/?UI,N:32/?UI,PageRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbook.html#wxlistbooksetimagelist">external documentation</a>.
--spec setImageList(This, ImageList) -> ok when
+-spec setImageList(This, ImageList) -> 'ok' when
This::wxListbook(), ImageList::wxImageList:wxImageList().
setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxListbook),
@@ -326,7 +326,7 @@ setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageLi
<<ThisRef:32/?UI,ImageListRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlistbook.html#wxlistbooksetpagesize">external documentation</a>.
--spec setPageSize(This, Size) -> ok when
+-spec setPageSize(This, Size) -> 'ok' when
This::wxListbook(), Size::{W::integer(), H::integer()}.
setPageSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -372,7 +372,7 @@ changeSelection(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxListbook()) -> ok.
+-spec destroy(This::wxListbook()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxListbook),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxLocale.erl b/lib/wx/src/gen/wxLocale.erl
index 7d208b9823..d473731bf8 100644
--- a/lib/wx/src/gen/wxLocale.erl
+++ b/lib/wx/src/gen/wxLocale.erl
@@ -56,7 +56,7 @@ new(Language)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlocale.html#wxlocalewxlocale">external documentation</a>.
-spec new(Language, [Option]) -> wxLocale() when
Language::integer(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
new(Language, Options)
when is_integer(Language),is_list(Options) ->
MOpts = fun({flags, Flags}, Acc) -> [<<1:32/?UI,Flags:32/?UI>>|Acc];
@@ -76,8 +76,8 @@ init(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlocale.html#wxlocaleinit">external documentation</a>.
-spec init(This, [Option]) -> boolean() when
This::wxLocale(),
- Option :: {language, integer()}
- | {flags, integer()}.
+ Option :: {'language', integer()}
+ | {'flags', integer()}.
init(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxLocale),
@@ -111,7 +111,7 @@ addCatalog(#wx_ref{type=ThisT,ref=ThisRef},SzDomain,MsgIdLanguage,MsgIdCharset)
<<ThisRef:32/?UI,(byte_size(SzDomain_UC)):32/?UI,(SzDomain_UC)/binary, 0:(((8- ((0+byte_size(SzDomain_UC)) band 16#7)) band 16#7))/unit:8,MsgIdLanguage:32/?UI,(byte_size(MsgIdCharset_UC)):32/?UI,(MsgIdCharset_UC)/binary, 0:(((8- ((0+byte_size(MsgIdCharset_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlocale.html#wxlocaleaddcataloglookuppathprefix">external documentation</a>.
--spec addCatalogLookupPathPrefix(Prefix) -> ok when
+-spec addCatalogLookupPathPrefix(Prefix) -> 'ok' when
Prefix::unicode:chardata().
addCatalogLookupPathPrefix(Prefix)
when is_list(Prefix) ->
@@ -170,7 +170,7 @@ getString(This,SzOrigString)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlocale.html#wxlocalegetstring">external documentation</a>.
-spec getString(This, SzOrigString, [Option]) -> unicode:charlist() when
This::wxLocale(), SzOrigString::unicode:chardata(),
- Option :: {szDomain, unicode:chardata()}.
+ Option :: {'szDomain', unicode:chardata()}.
getString(#wx_ref{type=ThisT,ref=ThisRef},SzOrigString, Options)
when is_list(SzOrigString),is_list(Options) ->
?CLASS(ThisT,wxLocale),
@@ -192,7 +192,7 @@ getString(This,SzOrigString,SzOrigString2,N)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlocale.html#wxlocalegetstring">external documentation</a>.
-spec getString(This, SzOrigString, SzOrigString2, N, [Option]) -> unicode:charlist() when
This::wxLocale(), SzOrigString::unicode:chardata(), SzOrigString2::unicode:chardata(), N::integer(),
- Option :: {szDomain, unicode:chardata()}.
+ Option :: {'szDomain', unicode:chardata()}.
getString(#wx_ref{type=ThisT,ref=ThisRef},SzOrigString,SzOrigString2,N, Options)
when is_list(SzOrigString),is_list(SzOrigString2),is_integer(N),is_list(Options) ->
?CLASS(ThisT,wxLocale),
@@ -215,7 +215,7 @@ getHeaderValue(This,SzHeader)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxlocale.html#wxlocalegetheadervalue">external documentation</a>.
-spec getHeaderValue(This, SzHeader, [Option]) -> unicode:charlist() when
This::wxLocale(), SzHeader::unicode:chardata(),
- Option :: {szDomain, unicode:chardata()}.
+ Option :: {'szDomain', unicode:chardata()}.
getHeaderValue(#wx_ref{type=ThisT,ref=ThisRef},SzHeader, Options)
when is_list(SzHeader),is_list(Options) ->
?CLASS(ThisT,wxLocale),
@@ -272,7 +272,7 @@ isOk(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxLocale()) -> ok.
+-spec destroy(This::wxLocale()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxLocale),
wxe_util:destroy(?wxLocale_destruct,Obj),
diff --git a/lib/wx/src/gen/wxLogNull.erl b/lib/wx/src/gen/wxLogNull.erl
index a071dffb95..e82601a350 100644
--- a/lib/wx/src/gen/wxLogNull.erl
+++ b/lib/wx/src/gen/wxLogNull.erl
@@ -42,7 +42,7 @@ new() ->
<<>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxLogNull()) -> ok.
+-spec destroy(This::wxLogNull()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxLogNull),
wxe_util:destroy(?wxLogNull_destroy,Obj),
diff --git a/lib/wx/src/gen/wxMDIChildFrame.erl b/lib/wx/src/gen/wxMDIChildFrame.erl
index ed29e5431f..b294e4898d 100644
--- a/lib/wx/src/gen/wxMDIChildFrame.erl
+++ b/lib/wx/src/gen/wxMDIChildFrame.erl
@@ -108,9 +108,9 @@ new(Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdichildframe.html#wxmdichildframewxmdichildframe">external documentation</a>.
-spec new(Parent, Id, Title, [Option]) -> wxMDIChildFrame() when
Parent::wxMDIParentFrame:wxMDIParentFrame(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ParentT,wxMDIParentFrame),
@@ -124,7 +124,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
<<ParentRef:32/?UI,Id:32/?UI,(byte_size(Title_UC)):32/?UI,(Title_UC)/binary, 0:(((8- ((4+byte_size(Title_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdichildframe.html#wxmdichildframeactivate">external documentation</a>.
--spec activate(This) -> ok when
+-spec activate(This) -> 'ok' when
This::wxMDIChildFrame().
activate(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxMDIChildFrame),
@@ -142,9 +142,9 @@ create(This,Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdichildframe.html#wxmdichildframecreate">external documentation</a>.
-spec create(This, Parent, Id, Title, [Option]) -> boolean() when
This::wxMDIChildFrame(), Parent::wxMDIParentFrame:wxMDIParentFrame(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ThisT,wxMDIChildFrame),
@@ -159,7 +159,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Ti
<<ThisRef:32/?UI,ParentRef:32/?UI,Id:32/?UI,(byte_size(Title_UC)):32/?UI,(Title_UC)/binary, 0:(((8- ((0+byte_size(Title_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @equiv maximize(This, [])
--spec maximize(This) -> ok when
+-spec maximize(This) -> 'ok' when
This::wxMDIChildFrame().
maximize(This)
@@ -167,9 +167,9 @@ maximize(This)
maximize(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdichildframe.html#wxmdichildframemaximize">external documentation</a>.
--spec maximize(This, [Option]) -> ok when
+-spec maximize(This, [Option]) -> 'ok' when
This::wxMDIChildFrame(),
- Option :: {maximize, boolean()}.
+ Option :: {'maximize', boolean()}.
maximize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxMDIChildFrame),
@@ -180,7 +180,7 @@ maximize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdichildframe.html#wxmdichildframerestore">external documentation</a>.
--spec restore(This) -> ok when
+-spec restore(This) -> 'ok' when
This::wxMDIChildFrame().
restore(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxMDIChildFrame),
@@ -188,7 +188,7 @@ restore(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMDIChildFrame()) -> ok.
+-spec destroy(This::wxMDIChildFrame()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMDIChildFrame),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMDIClientWindow.erl b/lib/wx/src/gen/wxMDIClientWindow.erl
index 6f10627086..ddc31760f4 100644
--- a/lib/wx/src/gen/wxMDIClientWindow.erl
+++ b/lib/wx/src/gen/wxMDIClientWindow.erl
@@ -96,7 +96,7 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdiclientwindow.html#wxmdiclientwindowwxmdiclientwindow">external documentation</a>.
-spec new(Parent, [Option]) -> wxMDIClientWindow() when
Parent::wxMDIParentFrame:wxMDIParentFrame(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxMDIParentFrame),
@@ -117,7 +117,7 @@ createClient(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdiclientwindow.html#wxmdiclientwindowcreateclient">external documentation</a>.
-spec createClient(This, Parent, [Option]) -> boolean() when
This::wxMDIClientWindow(), Parent::wxMDIParentFrame:wxMDIParentFrame(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
createClient(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxMDIClientWindow),
@@ -129,7 +129,7 @@ createClient(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}
<<ThisRef:32/?UI,ParentRef:32/?UI, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMDIClientWindow()) -> ok.
+-spec destroy(This::wxMDIClientWindow()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMDIClientWindow),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMDIParentFrame.erl b/lib/wx/src/gen/wxMDIParentFrame.erl
index 47d9182d60..63b4ec8e23 100644
--- a/lib/wx/src/gen/wxMDIParentFrame.erl
+++ b/lib/wx/src/gen/wxMDIParentFrame.erl
@@ -109,9 +109,9 @@ new(Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdiparentframe.html#wxmdiparentframewxmdiparentframe">external documentation</a>.
-spec new(Parent, Id, Title, [Option]) -> wxMDIParentFrame() when
Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -125,7 +125,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
<<ParentRef:32/?UI,Id:32/?UI,(byte_size(Title_UC)):32/?UI,(Title_UC)/binary, 0:(((8- ((4+byte_size(Title_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdiparentframe.html#wxmdiparentframeactivatenext">external documentation</a>.
--spec activateNext(This) -> ok when
+-spec activateNext(This) -> 'ok' when
This::wxMDIParentFrame().
activateNext(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxMDIParentFrame),
@@ -133,7 +133,7 @@ activateNext(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdiparentframe.html#wxmdiparentframeactivateprevious">external documentation</a>.
--spec activatePrevious(This) -> ok when
+-spec activatePrevious(This) -> 'ok' when
This::wxMDIParentFrame().
activatePrevious(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxMDIParentFrame),
@@ -141,7 +141,7 @@ activatePrevious(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdiparentframe.html#wxmdiparentframearrangeicons">external documentation</a>.
--spec arrangeIcons(This) -> ok when
+-spec arrangeIcons(This) -> 'ok' when
This::wxMDIParentFrame().
arrangeIcons(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxMDIParentFrame),
@@ -149,7 +149,7 @@ arrangeIcons(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdiparentframe.html#wxmdiparentframecascade">external documentation</a>.
--spec cascade(This) -> ok when
+-spec cascade(This) -> 'ok' when
This::wxMDIParentFrame().
cascade(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxMDIParentFrame),
@@ -167,9 +167,9 @@ create(This,Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdiparentframe.html#wxmdiparentframecreate">external documentation</a>.
-spec create(This, Parent, Id, Title, [Option]) -> boolean() when
This::wxMDIParentFrame(), Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ThisT,wxMDIParentFrame),
@@ -200,7 +200,7 @@ getClientWindow(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv tile(This, [])
--spec tile(This) -> ok when
+-spec tile(This) -> 'ok' when
This::wxMDIParentFrame().
tile(This)
@@ -209,9 +209,9 @@ tile(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmdiparentframe.html#wxmdiparentframetile">external documentation</a>.
%%<br /> Orient = ?wxHORIZONTAL | ?wxVERTICAL | ?wxBOTH
--spec tile(This, [Option]) -> ok when
+-spec tile(This, [Option]) -> 'ok' when
This::wxMDIParentFrame(),
- Option :: {orient, wx:wx_enum()}.
+ Option :: {'orient', wx:wx_enum()}.
tile(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxMDIParentFrame),
@@ -222,7 +222,7 @@ tile(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMDIParentFrame()) -> ok.
+-spec destroy(This::wxMDIParentFrame()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMDIParentFrame),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMask.erl b/lib/wx/src/gen/wxMask.erl
index 98c96277dd..f50392eb34 100644
--- a/lib/wx/src/gen/wxMask.erl
+++ b/lib/wx/src/gen/wxMask.erl
@@ -101,7 +101,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BitmapT,ref=BitmapRef},Colou
<<ThisRef:32/?UI,BitmapRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMask()) -> ok.
+-spec destroy(This::wxMask()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMask),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMemoryDC.erl b/lib/wx/src/gen/wxMemoryDC.erl
index 8a59be7ad2..f1a5669e17 100644
--- a/lib/wx/src/gen/wxMemoryDC.erl
+++ b/lib/wx/src/gen/wxMemoryDC.erl
@@ -81,7 +81,7 @@ new(#wx_ref{type=DcT,ref=DcRef}) ->
<<DcRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmemorydc.html#wxmemorydcselectobject">external documentation</a>.
--spec selectObject(This, Bmp) -> ok when
+-spec selectObject(This, Bmp) -> 'ok' when
This::wxMemoryDC(), Bmp::wxBitmap:wxBitmap().
selectObject(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef}) ->
?CLASS(ThisT,wxMemoryDC),
@@ -90,7 +90,7 @@ selectObject(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef}) ->
<<ThisRef:32/?UI,BmpRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmemorydc.html#wxmemorydcselectobjectassource">external documentation</a>.
--spec selectObjectAsSource(This, Bmp) -> ok when
+-spec selectObjectAsSource(This, Bmp) -> 'ok' when
This::wxMemoryDC(), Bmp::wxBitmap:wxBitmap().
selectObjectAsSource(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef}) ->
?CLASS(ThisT,wxMemoryDC),
@@ -99,7 +99,7 @@ selectObjectAsSource(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRe
<<ThisRef:32/?UI,BmpRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMemoryDC()) -> ok.
+-spec destroy(This::wxMemoryDC()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMemoryDC),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMenu.erl b/lib/wx/src/gen/wxMenu.erl
index 59feef7b19..317ea38685 100644
--- a/lib/wx/src/gen/wxMenu.erl
+++ b/lib/wx/src/gen/wxMenu.erl
@@ -55,7 +55,7 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenuwxmenu">external documentation</a>.
-spec new([Option]) -> wxMenu() when
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(Options)
when is_list(Options) ->
MOpts = fun({style, Style}, Acc) -> [<<1:32/?UI,Style:32/?UI>>|Acc];
@@ -67,7 +67,7 @@ new(Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenuwxmenu">external documentation</a>.
-spec new(Title, [Option]) -> wxMenu() when
Title::unicode:chardata(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(Title, Options)
when is_list(Title),is_list(Options) ->
Title_UC = unicode:characters_to_binary([Title,0]),
@@ -98,16 +98,16 @@ append(This,Itemid,Text)
%% <br /> Also:<br />
%% append(This, Itemid, Text, [Option]) -> wxMenuItem:wxMenuItem() when<br />
%% This::wxMenu(), Itemid::integer(), Text::unicode:chardata(),<br />
-%% Option :: {help, unicode:chardata()}<br />
-%% | {kind, wx:wx_enum()}.<br />
+%% Option :: {'help', unicode:chardata()}<br />
+%% | {'kind', wx:wx_enum()}.<br />
%%
%%<br /> Kind = ?wxITEM_SEPARATOR | ?wxITEM_NORMAL | ?wxITEM_CHECK | ?wxITEM_RADIO | ?wxITEM_MAX
-spec append(This, Itemid, Text, Submenu) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(), Submenu::wxMenu();
(This, Itemid, Text, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(),
- Option :: {help, unicode:chardata()}
- | {kind, wx:wx_enum()}.
+ Option :: {'help', unicode:chardata()}
+ | {'kind', wx:wx_enum()}.
append(This,Itemid,Text,Submenu)
when is_record(This, wx_ref),is_integer(Itemid),is_list(Text),is_record(Submenu, wx_ref) ->
@@ -127,13 +127,13 @@ append(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Text, Options)
%% <br /> Also:<br />
%% append(This, Itemid, Text, Submenu, [Option]) -> wxMenuItem:wxMenuItem() when<br />
%% This::wxMenu(), Itemid::integer(), Text::unicode:chardata(), Submenu::wxMenu(),<br />
-%% Option :: {help, unicode:chardata()}.<br />
+%% Option :: {'help', unicode:chardata()}.<br />
%%
--spec append(This, Itemid, Text, Help, IsCheckable) -> ok when
+-spec append(This, Itemid, Text, Help, IsCheckable) -> 'ok' when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(), Help::unicode:chardata(), IsCheckable::boolean();
(This, Itemid, Text, Submenu, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(), Submenu::wxMenu(),
- Option :: {help, unicode:chardata()}.
+ Option :: {'help', unicode:chardata()}.
append(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Text,Help,IsCheckable)
when is_integer(Itemid),is_list(Text),is_list(Help),is_boolean(IsCheckable) ->
?CLASS(ThisT,wxMenu),
@@ -163,7 +163,7 @@ appendCheckItem(This,Itemid,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenuappendcheckitem">external documentation</a>.
-spec appendCheckItem(This, Itemid, Text, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(),
- Option :: {help, unicode:chardata()}.
+ Option :: {'help', unicode:chardata()}.
appendCheckItem(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Text, Options)
when is_integer(Itemid),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxMenu),
@@ -185,7 +185,7 @@ appendRadioItem(This,Itemid,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenuappendradioitem">external documentation</a>.
-spec appendRadioItem(This, Itemid, Text, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(),
- Option :: {help, unicode:chardata()}.
+ Option :: {'help', unicode:chardata()}.
appendRadioItem(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Text, Options)
when is_integer(Itemid),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxMenu),
@@ -205,7 +205,7 @@ appendSeparator(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenubreak">external documentation</a>.
--spec break(This) -> ok when
+-spec break(This) -> 'ok' when
This::wxMenu().
break(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxMenu),
@@ -213,7 +213,7 @@ break(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenucheck">external documentation</a>.
--spec check(This, Itemid, Check) -> ok when
+-spec check(This, Itemid, Check) -> 'ok' when
This::wxMenu(), Itemid::integer(), Check::boolean().
check(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Check)
when is_integer(Itemid),is_boolean(Check) ->
@@ -262,7 +262,7 @@ delete(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ItemT,ref=ItemRef}) ->
<<ThisRef:32/?UI,ItemRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenuenable">external documentation</a>.
--spec enable(This, Itemid, Enable) -> ok when
+-spec enable(This, Itemid, Enable) -> 'ok' when
This::wxMenu(), Itemid::integer(), Enable::boolean().
enable(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Enable)
when is_integer(Itemid),is_boolean(Enable) ->
@@ -367,9 +367,9 @@ insert(#wx_ref{type=ThisT,ref=ThisRef},Pos,#wx_ref{type=ItemT,ref=ItemRef})
%%<br /> Kind = ?wxITEM_SEPARATOR | ?wxITEM_NORMAL | ?wxITEM_CHECK | ?wxITEM_RADIO | ?wxITEM_MAX
-spec insert(This, Pos, Itemid, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Pos::integer(), Itemid::integer(),
- Option :: {text, unicode:chardata()}
- | {help, unicode:chardata()}
- | {kind, wx:wx_enum()}.
+ Option :: {'text', unicode:chardata()}
+ | {'help', unicode:chardata()}
+ | {'kind', wx:wx_enum()}.
insert(#wx_ref{type=ThisT,ref=ThisRef},Pos,Itemid, Options)
when is_integer(Pos),is_integer(Itemid),is_list(Options) ->
?CLASS(ThisT,wxMenu),
@@ -393,13 +393,13 @@ insert(This,Pos,Itemid,Text,Submenu)
%% <br /> Also:<br />
%% insert(This, Pos, Itemid, Text, Submenu, [Option]) -> wxMenuItem:wxMenuItem() when<br />
%% This::wxMenu(), Pos::integer(), Itemid::integer(), Text::unicode:chardata(), Submenu::wxMenu(),<br />
-%% Option :: {help, unicode:chardata()}.<br />
+%% Option :: {'help', unicode:chardata()}.<br />
%%
--spec insert(This, Pos, Itemid, Text, Help, IsCheckable) -> ok when
+-spec insert(This, Pos, Itemid, Text, Help, IsCheckable) -> 'ok' when
This::wxMenu(), Pos::integer(), Itemid::integer(), Text::unicode:chardata(), Help::unicode:chardata(), IsCheckable::boolean();
(This, Pos, Itemid, Text, Submenu, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Pos::integer(), Itemid::integer(), Text::unicode:chardata(), Submenu::wxMenu(),
- Option :: {help, unicode:chardata()}.
+ Option :: {'help', unicode:chardata()}.
insert(#wx_ref{type=ThisT,ref=ThisRef},Pos,Itemid,Text,Help,IsCheckable)
when is_integer(Pos),is_integer(Itemid),is_list(Text),is_list(Help),is_boolean(IsCheckable) ->
?CLASS(ThisT,wxMenu),
@@ -429,7 +429,7 @@ insertCheckItem(This,Pos,Itemid,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenuinsertcheckitem">external documentation</a>.
-spec insertCheckItem(This, Pos, Itemid, Text, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Pos::integer(), Itemid::integer(), Text::unicode:chardata(),
- Option :: {help, unicode:chardata()}.
+ Option :: {'help', unicode:chardata()}.
insertCheckItem(#wx_ref{type=ThisT,ref=ThisRef},Pos,Itemid,Text, Options)
when is_integer(Pos),is_integer(Itemid),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxMenu),
@@ -451,7 +451,7 @@ insertRadioItem(This,Pos,Itemid,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenuinsertradioitem">external documentation</a>.
-spec insertRadioItem(This, Pos, Itemid, Text, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Pos::integer(), Itemid::integer(), Text::unicode:chardata(),
- Option :: {help, unicode:chardata()}.
+ Option :: {'help', unicode:chardata()}.
insertRadioItem(#wx_ref{type=ThisT,ref=ThisRef},Pos,Itemid,Text, Options)
when is_integer(Pos),is_integer(Itemid),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxMenu),
@@ -513,9 +513,9 @@ prepend(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ItemT,ref=ItemRef}) ->
%%<br /> Kind = ?wxITEM_SEPARATOR | ?wxITEM_NORMAL | ?wxITEM_CHECK | ?wxITEM_RADIO | ?wxITEM_MAX
-spec prepend(This, Itemid, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Itemid::integer(),
- Option :: {text, unicode:chardata()}
- | {help, unicode:chardata()}
- | {kind, wx:wx_enum()}.
+ Option :: {'text', unicode:chardata()}
+ | {'help', unicode:chardata()}
+ | {'kind', wx:wx_enum()}.
prepend(#wx_ref{type=ThisT,ref=ThisRef},Itemid, Options)
when is_integer(Itemid),is_list(Options) ->
?CLASS(ThisT,wxMenu),
@@ -539,13 +539,13 @@ prepend(This,Itemid,Text,Submenu)
%% <br /> Also:<br />
%% prepend(This, Itemid, Text, Submenu, [Option]) -> wxMenuItem:wxMenuItem() when<br />
%% This::wxMenu(), Itemid::integer(), Text::unicode:chardata(), Submenu::wxMenu(),<br />
-%% Option :: {help, unicode:chardata()}.<br />
+%% Option :: {'help', unicode:chardata()}.<br />
%%
--spec prepend(This, Itemid, Text, Help, IsCheckable) -> ok when
+-spec prepend(This, Itemid, Text, Help, IsCheckable) -> 'ok' when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(), Help::unicode:chardata(), IsCheckable::boolean();
(This, Itemid, Text, Submenu, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(), Submenu::wxMenu(),
- Option :: {help, unicode:chardata()}.
+ Option :: {'help', unicode:chardata()}.
prepend(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Text,Help,IsCheckable)
when is_integer(Itemid),is_list(Text),is_list(Help),is_boolean(IsCheckable) ->
?CLASS(ThisT,wxMenu),
@@ -575,7 +575,7 @@ prependCheckItem(This,Itemid,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenuprependcheckitem">external documentation</a>.
-spec prependCheckItem(This, Itemid, Text, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(),
- Option :: {help, unicode:chardata()}.
+ Option :: {'help', unicode:chardata()}.
prependCheckItem(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Text, Options)
when is_integer(Itemid),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxMenu),
@@ -597,7 +597,7 @@ prependRadioItem(This,Itemid,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenuprependradioitem">external documentation</a>.
-spec prependRadioItem(This, Itemid, Text, [Option]) -> wxMenuItem:wxMenuItem() when
This::wxMenu(), Itemid::integer(), Text::unicode:chardata(),
- Option :: {help, unicode:chardata()}.
+ Option :: {'help', unicode:chardata()}.
prependRadioItem(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Text, Options)
when is_integer(Itemid),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxMenu),
@@ -637,7 +637,7 @@ remove(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ItemT,ref=ItemRef}) ->
<<ThisRef:32/?UI,ItemRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenusethelpstring">external documentation</a>.
--spec setHelpString(This, Itemid, HelpString) -> ok when
+-spec setHelpString(This, Itemid, HelpString) -> 'ok' when
This::wxMenu(), Itemid::integer(), HelpString::unicode:chardata().
setHelpString(#wx_ref{type=ThisT,ref=ThisRef},Itemid,HelpString)
when is_integer(Itemid),is_list(HelpString) ->
@@ -647,7 +647,7 @@ setHelpString(#wx_ref{type=ThisT,ref=ThisRef},Itemid,HelpString)
<<ThisRef:32/?UI,Itemid:32/?UI,(byte_size(HelpString_UC)):32/?UI,(HelpString_UC)/binary, 0:(((8- ((4+byte_size(HelpString_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenusetlabel">external documentation</a>.
--spec setLabel(This, Itemid, Label) -> ok when
+-spec setLabel(This, Itemid, Label) -> 'ok' when
This::wxMenu(), Itemid::integer(), Label::unicode:chardata().
setLabel(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Label)
when is_integer(Itemid),is_list(Label) ->
@@ -657,7 +657,7 @@ setLabel(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Label)
<<ThisRef:32/?UI,Itemid:32/?UI,(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((4+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenu.html#wxmenusettitle">external documentation</a>.
--spec setTitle(This, Title) -> ok when
+-spec setTitle(This, Title) -> 'ok' when
This::wxMenu(), Title::unicode:chardata().
setTitle(#wx_ref{type=ThisT,ref=ThisRef},Title)
when is_list(Title) ->
@@ -667,7 +667,7 @@ setTitle(#wx_ref{type=ThisT,ref=ThisRef},Title)
<<ThisRef:32/?UI,(byte_size(Title_UC)):32/?UI,(Title_UC)/binary, 0:(((8- ((0+byte_size(Title_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMenu()) -> ok.
+-spec destroy(This::wxMenu()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMenu),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMenuBar.erl b/lib/wx/src/gen/wxMenuBar.erl
index 5e879da5ed..05f7a423d5 100644
--- a/lib/wx/src/gen/wxMenuBar.erl
+++ b/lib/wx/src/gen/wxMenuBar.erl
@@ -106,7 +106,7 @@ append(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MenuT,ref=MenuRef},Title)
<<ThisRef:32/?UI,MenuRef:32/?UI,(byte_size(Title_UC)):32/?UI,(Title_UC)/binary, 0:(((8- ((4+byte_size(Title_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenubar.html#wxmenubarcheck">external documentation</a>.
--spec check(This, Itemid, Check) -> ok when
+-spec check(This, Itemid, Check) -> 'ok' when
This::wxMenuBar(), Itemid::integer(), Check::boolean().
check(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Check)
when is_integer(Itemid),is_boolean(Check) ->
@@ -125,7 +125,7 @@ enable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenubar.html#wxmenubarenable">external documentation</a>.
-spec enable(This, [Option]) -> boolean() when
This::wxMenuBar(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxMenuBar),
@@ -136,7 +136,7 @@ enable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenubar.html#wxmenubarenable">external documentation</a>.
--spec enable(This, Itemid, Enable) -> ok when
+-spec enable(This, Itemid, Enable) -> 'ok' when
This::wxMenuBar(), Itemid::integer(), Enable::boolean().
enable(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Enable)
when is_integer(Itemid),is_boolean(Enable) ->
@@ -145,7 +145,7 @@ enable(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Enable)
<<ThisRef:32/?UI,Itemid:32/?UI,(wxe_util:from_bool(Enable)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenubar.html#wxmenubarenabletop">external documentation</a>.
--spec enableTop(This, Pos, Flag) -> ok when
+-spec enableTop(This, Pos, Flag) -> 'ok' when
This::wxMenuBar(), Pos::integer(), Flag::boolean().
enableTop(#wx_ref{type=ThisT,ref=ThisRef},Pos,Flag)
when is_integer(Pos),is_boolean(Flag) ->
@@ -293,7 +293,7 @@ replace(#wx_ref{type=ThisT,ref=ThisRef},Pos,#wx_ref{type=MenuT,ref=MenuRef},Titl
<<ThisRef:32/?UI,Pos:32/?UI,MenuRef:32/?UI,(byte_size(Title_UC)):32/?UI,(Title_UC)/binary, 0:(((8- ((0+byte_size(Title_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenubar.html#wxmenubarsethelpstring">external documentation</a>.
--spec setHelpString(This, Itemid, HelpString) -> ok when
+-spec setHelpString(This, Itemid, HelpString) -> 'ok' when
This::wxMenuBar(), Itemid::integer(), HelpString::unicode:chardata().
setHelpString(#wx_ref{type=ThisT,ref=ThisRef},Itemid,HelpString)
when is_integer(Itemid),is_list(HelpString) ->
@@ -303,7 +303,7 @@ setHelpString(#wx_ref{type=ThisT,ref=ThisRef},Itemid,HelpString)
<<ThisRef:32/?UI,Itemid:32/?UI,(byte_size(HelpString_UC)):32/?UI,(HelpString_UC)/binary, 0:(((8- ((4+byte_size(HelpString_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenubar.html#wxmenubarsetlabel">external documentation</a>.
--spec setLabel(This, S) -> ok when
+-spec setLabel(This, S) -> 'ok' when
This::wxMenuBar(), S::unicode:chardata().
setLabel(#wx_ref{type=ThisT,ref=ThisRef},S)
when is_list(S) ->
@@ -313,7 +313,7 @@ setLabel(#wx_ref{type=ThisT,ref=ThisRef},S)
<<ThisRef:32/?UI,(byte_size(S_UC)):32/?UI,(S_UC)/binary, 0:(((8- ((0+byte_size(S_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenubar.html#wxmenubarsetlabel">external documentation</a>.
--spec setLabel(This, Itemid, Label) -> ok when
+-spec setLabel(This, Itemid, Label) -> 'ok' when
This::wxMenuBar(), Itemid::integer(), Label::unicode:chardata().
setLabel(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Label)
when is_integer(Itemid),is_list(Label) ->
@@ -323,7 +323,7 @@ setLabel(#wx_ref{type=ThisT,ref=ThisRef},Itemid,Label)
<<ThisRef:32/?UI,Itemid:32/?UI,(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((4+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenubar.html#wxmenubarsetlabeltop">external documentation</a>.
--spec setLabelTop(This, Pos, Label) -> ok when
+-spec setLabelTop(This, Pos, Label) -> 'ok' when
This::wxMenuBar(), Pos::integer(), Label::unicode:chardata().
setLabelTop(#wx_ref{type=ThisT,ref=ThisRef},Pos,Label)
when is_integer(Pos),is_list(Label) ->
@@ -333,7 +333,7 @@ setLabelTop(#wx_ref{type=ThisT,ref=ThisRef},Pos,Label)
<<ThisRef:32/?UI,Pos:32/?UI,(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((4+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMenuBar()) -> ok.
+-spec destroy(This::wxMenuBar()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMenuBar),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMenuItem.erl b/lib/wx/src/gen/wxMenuItem.erl
index 9325f47d90..324910d15d 100644
--- a/lib/wx/src/gen/wxMenuItem.erl
+++ b/lib/wx/src/gen/wxMenuItem.erl
@@ -47,12 +47,12 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenuitem.html#wxmenuitemwxmenuitem">external documentation</a>.
%%<br /> Kind = ?wxITEM_SEPARATOR | ?wxITEM_NORMAL | ?wxITEM_CHECK | ?wxITEM_RADIO | ?wxITEM_MAX
-spec new([Option]) -> wxMenuItem() when
- Option :: {parentMenu, wxMenu:wxMenu()}
- | {id, integer()}
- | {text, unicode:chardata()}
- | {help, unicode:chardata()}
- | {kind, wx:wx_enum()}
- | {subMenu, wxMenu:wxMenu()}.
+ Option :: {'parentMenu', wxMenu:wxMenu()}
+ | {'id', integer()}
+ | {'text', unicode:chardata()}
+ | {'help', unicode:chardata()}
+ | {'kind', wx:wx_enum()}
+ | {'subMenu', wxMenu:wxMenu()}.
new(Options)
when is_list(Options) ->
MOpts = fun({parentMenu, #wx_ref{type=ParentMenuT,ref=ParentMenuRef}}, Acc) -> ?CLASS(ParentMenuT,wxMenu),[<<1:32/?UI,ParentMenuRef:32/?UI>>|Acc];
@@ -67,7 +67,7 @@ new(Options)
<<BinOpt/binary>>).
%% @equiv check(This, [])
--spec check(This) -> ok when
+-spec check(This) -> 'ok' when
This::wxMenuItem().
check(This)
@@ -75,9 +75,9 @@ check(This)
check(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenuitem.html#wxmenuitemcheck">external documentation</a>.
--spec check(This, [Option]) -> ok when
+-spec check(This, [Option]) -> 'ok' when
This::wxMenuItem(),
- Option :: {check, boolean()}.
+ Option :: {'check', boolean()}.
check(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxMenuItem),
@@ -88,7 +88,7 @@ check(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv enable(This, [])
--spec enable(This) -> ok when
+-spec enable(This) -> 'ok' when
This::wxMenuItem().
enable(This)
@@ -96,9 +96,9 @@ enable(This)
enable(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenuitem.html#wxmenuitemenable">external documentation</a>.
--spec enable(This, [Option]) -> ok when
+-spec enable(This, [Option]) -> 'ok' when
This::wxMenuItem(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxMenuItem),
@@ -223,7 +223,7 @@ isSubMenu(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenuitem.html#wxmenuitemsetbitmap">external documentation</a>.
--spec setBitmap(This, Bitmap) -> ok when
+-spec setBitmap(This, Bitmap) -> 'ok' when
This::wxMenuItem(), Bitmap::wxBitmap:wxBitmap().
setBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BitmapT,ref=BitmapRef}) ->
?CLASS(ThisT,wxMenuItem),
@@ -232,7 +232,7 @@ setBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BitmapT,ref=BitmapRef}) -
<<ThisRef:32/?UI,BitmapRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenuitem.html#wxmenuitemsethelp">external documentation</a>.
--spec setHelp(This, Str) -> ok when
+-spec setHelp(This, Str) -> 'ok' when
This::wxMenuItem(), Str::unicode:chardata().
setHelp(#wx_ref{type=ThisT,ref=ThisRef},Str)
when is_list(Str) ->
@@ -242,7 +242,7 @@ setHelp(#wx_ref{type=ThisT,ref=ThisRef},Str)
<<ThisRef:32/?UI,(byte_size(Str_UC)):32/?UI,(Str_UC)/binary, 0:(((8- ((0+byte_size(Str_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenuitem.html#wxmenuitemsetmenu">external documentation</a>.
--spec setMenu(This, Menu) -> ok when
+-spec setMenu(This, Menu) -> 'ok' when
This::wxMenuItem(), Menu::wxMenu:wxMenu().
setMenu(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MenuT,ref=MenuRef}) ->
?CLASS(ThisT,wxMenuItem),
@@ -251,7 +251,7 @@ setMenu(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MenuT,ref=MenuRef}) ->
<<ThisRef:32/?UI,MenuRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenuitem.html#wxmenuitemsetsubmenu">external documentation</a>.
--spec setSubMenu(This, Menu) -> ok when
+-spec setSubMenu(This, Menu) -> 'ok' when
This::wxMenuItem(), Menu::wxMenu:wxMenu().
setSubMenu(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MenuT,ref=MenuRef}) ->
?CLASS(ThisT,wxMenuItem),
@@ -260,7 +260,7 @@ setSubMenu(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MenuT,ref=MenuRef}) ->
<<ThisRef:32/?UI,MenuRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmenuitem.html#wxmenuitemsettext">external documentation</a>.
--spec setText(This, Str) -> ok when
+-spec setText(This, Str) -> 'ok' when
This::wxMenuItem(), Str::unicode:chardata().
setText(#wx_ref{type=ThisT,ref=ThisRef},Str)
when is_list(Str) ->
@@ -270,7 +270,7 @@ setText(#wx_ref{type=ThisT,ref=ThisRef},Str)
<<ThisRef:32/?UI,(byte_size(Str_UC)):32/?UI,(Str_UC)/binary, 0:(((8- ((0+byte_size(Str_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMenuItem()) -> ok.
+-spec destroy(This::wxMenuItem()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMenuItem),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMessageDialog.erl b/lib/wx/src/gen/wxMessageDialog.erl
index 1fe99b2b88..30e47529cc 100644
--- a/lib/wx/src/gen/wxMessageDialog.erl
+++ b/lib/wx/src/gen/wxMessageDialog.erl
@@ -99,9 +99,9 @@ new(Parent,Message)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmessagedialog.html#wxmessagedialogwxmessagedialog">external documentation</a>.
-spec new(Parent, Message, [Option]) -> wxMessageDialog() when
Parent::wxWindow:wxWindow(), Message::unicode:chardata(),
- Option :: {caption, unicode:chardata()}
- | {style, integer()}
- | {pos, {X::integer(), Y::integer()}}.
+ Option :: {'caption', unicode:chardata()}
+ | {'style', integer()}
+ | {'pos', {X::integer(), Y::integer()}}.
new(#wx_ref{type=ParentT,ref=ParentRef},Message, Options)
when is_list(Message),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -115,7 +115,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Message, Options)
<<ParentRef:32/?UI,(byte_size(Message_UC)):32/?UI,(Message_UC)/binary, 0:(((8- ((0+byte_size(Message_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMessageDialog()) -> ok.
+-spec destroy(This::wxMessageDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMessageDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMiniFrame.erl b/lib/wx/src/gen/wxMiniFrame.erl
index f731cc5416..4ae9764819 100644
--- a/lib/wx/src/gen/wxMiniFrame.erl
+++ b/lib/wx/src/gen/wxMiniFrame.erl
@@ -107,9 +107,9 @@ new(Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxminiframe.html#wxminiframewxminiframe">external documentation</a>.
-spec new(Parent, Id, Title, [Option]) -> wxMiniFrame() when
Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -133,9 +133,9 @@ create(This,Parent,Id,Title)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxminiframe.html#wxminiframecreate">external documentation</a>.
-spec create(This, Parent, Id, Title, [Option]) -> boolean() when
This::wxMiniFrame(), Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Title, Options)
when is_integer(Id),is_list(Title),is_list(Options) ->
?CLASS(ThisT,wxMiniFrame),
@@ -150,7 +150,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Ti
<<ThisRef:32/?UI,ParentRef:32/?UI,Id:32/?UI,(byte_size(Title_UC)):32/?UI,(Title_UC)/binary, 0:(((8- ((0+byte_size(Title_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMiniFrame()) -> ok.
+-spec destroy(This::wxMiniFrame()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMiniFrame),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMirrorDC.erl b/lib/wx/src/gen/wxMirrorDC.erl
index 20d51a2374..df2d133cab 100644
--- a/lib/wx/src/gen/wxMirrorDC.erl
+++ b/lib/wx/src/gen/wxMirrorDC.erl
@@ -71,7 +71,7 @@ new(#wx_ref{type=DcT,ref=DcRef},Mirror)
<<DcRef:32/?UI,(wxe_util:from_bool(Mirror)):32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMirrorDC()) -> ok.
+-spec destroy(This::wxMirrorDC()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMirrorDC),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxMouseEvent.erl b/lib/wx/src/gen/wxMouseEvent.erl
index 8728770693..a6aba1470e 100644
--- a/lib/wx/src/gen/wxMouseEvent.erl
+++ b/lib/wx/src/gen/wxMouseEvent.erl
@@ -78,7 +78,7 @@ buttonDClick(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmouseevent.html#wxmouseeventbuttondclick">external documentation</a>.
-spec buttonDClick(This, [Option]) -> boolean() when
This::wxMouseEvent(),
- Option :: {but, integer()}.
+ Option :: {'but', integer()}.
buttonDClick(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxMouseEvent),
@@ -99,7 +99,7 @@ buttonDown(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmouseevent.html#wxmouseeventbuttondown">external documentation</a>.
-spec buttonDown(This, [Option]) -> boolean() when
This::wxMouseEvent(),
- Option :: {but, integer()}.
+ Option :: {'but', integer()}.
buttonDown(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxMouseEvent),
@@ -120,7 +120,7 @@ buttonUp(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmouseevent.html#wxmouseeventbuttonup">external documentation</a>.
-spec buttonUp(This, [Option]) -> boolean() when
This::wxMouseEvent(),
- Option :: {but, integer()}.
+ Option :: {'but', integer()}.
buttonUp(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxMouseEvent),
diff --git a/lib/wx/src/gen/wxMultiChoiceDialog.erl b/lib/wx/src/gen/wxMultiChoiceDialog.erl
index 96e9c070a3..0436515256 100644
--- a/lib/wx/src/gen/wxMultiChoiceDialog.erl
+++ b/lib/wx/src/gen/wxMultiChoiceDialog.erl
@@ -105,8 +105,8 @@ new(Parent,Message,Caption,Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmultichoicedialog.html#wxmultichoicedialogwxmultichoicedialog">external documentation</a>.
-spec new(Parent, Message, Caption, Choices, [Option]) -> wxMultiChoiceDialog() when
Parent::wxWindow:wxWindow(), Message::unicode:chardata(), Caption::unicode:chardata(), Choices::[unicode:chardata()],
- Option :: {style, integer()}
- | {pos, {X::integer(), Y::integer()}}.
+ Option :: {'style', integer()}
+ | {'pos', {X::integer(), Y::integer()}}.
new(#wx_ref{type=ParentT,ref=ParentRef},Message,Caption,Choices, Options)
when is_list(Message),is_list(Caption),is_list(Choices),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -130,7 +130,7 @@ getSelections(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxmultichoicedialog.html#wxmultichoicedialogsetselections">external documentation</a>.
--spec setSelections(This, Selections) -> ok when
+-spec setSelections(This, Selections) -> 'ok' when
This::wxMultiChoiceDialog(), Selections::[integer()].
setSelections(#wx_ref{type=ThisT,ref=ThisRef},Selections)
when is_list(Selections) ->
@@ -140,7 +140,7 @@ setSelections(#wx_ref{type=ThisT,ref=ThisRef},Selections)
(<< <<C:32/?I>> || C <- Selections>>)/binary, 0:(((0+length(Selections)) rem 2)*32)>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxMultiChoiceDialog()) -> ok.
+-spec destroy(This::wxMultiChoiceDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxMultiChoiceDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxNavigationKeyEvent.erl b/lib/wx/src/gen/wxNavigationKeyEvent.erl
index 8a483f2ccf..c75d317723 100644
--- a/lib/wx/src/gen/wxNavigationKeyEvent.erl
+++ b/lib/wx/src/gen/wxNavigationKeyEvent.erl
@@ -54,7 +54,7 @@ getDirection(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnavigationkeyevent.html#wxnavigationkeyeventsetdirection">external documentation</a>.
--spec setDirection(This, BForward) -> ok when
+-spec setDirection(This, BForward) -> 'ok' when
This::wxNavigationKeyEvent(), BForward::boolean().
setDirection(#wx_ref{type=ThisT,ref=ThisRef},BForward)
when is_boolean(BForward) ->
@@ -71,7 +71,7 @@ isWindowChange(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnavigationkeyevent.html#wxnavigationkeyeventsetwindowchange">external documentation</a>.
--spec setWindowChange(This, BIs) -> ok when
+-spec setWindowChange(This, BIs) -> 'ok' when
This::wxNavigationKeyEvent(), BIs::boolean().
setWindowChange(#wx_ref{type=ThisT,ref=ThisRef},BIs)
when is_boolean(BIs) ->
@@ -88,7 +88,7 @@ isFromTab(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnavigationkeyevent.html#wxnavigationkeyeventsetfromtab">external documentation</a>.
--spec setFromTab(This, BIs) -> ok when
+-spec setFromTab(This, BIs) -> 'ok' when
This::wxNavigationKeyEvent(), BIs::boolean().
setFromTab(#wx_ref{type=ThisT,ref=ThisRef},BIs)
when is_boolean(BIs) ->
@@ -105,7 +105,7 @@ getCurrentFocus(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnavigationkeyevent.html#wxnavigationkeyeventsetcurrentfocus">external documentation</a>.
--spec setCurrentFocus(This, Win) -> ok when
+-spec setCurrentFocus(This, Win) -> 'ok' when
This::wxNavigationKeyEvent(), Win::wxWindow:wxWindow().
setCurrentFocus(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WinT,ref=WinRef}) ->
?CLASS(ThisT,wxNavigationKeyEvent),
diff --git a/lib/wx/src/gen/wxNotebook.erl b/lib/wx/src/gen/wxNotebook.erl
index 5011375aad..24f96ac88c 100644
--- a/lib/wx/src/gen/wxNotebook.erl
+++ b/lib/wx/src/gen/wxNotebook.erl
@@ -101,9 +101,9 @@ new(Parent,Winid)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebook.html#wxnotebookwxnotebook">external documentation</a>.
-spec new(Parent, Winid, [Option]) -> wxNotebook() when
Parent::wxWindow:wxWindow(), Winid::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Winid, Options)
when is_integer(Winid),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -126,8 +126,8 @@ addPage(This,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebook.html#wxnotebookaddpage">external documentation</a>.
-spec addPage(This, Page, Text, [Option]) -> boolean() when
This::wxNotebook(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxNotebook),
@@ -141,7 +141,7 @@ addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Op
<<ThisRef:32/?UI,PageRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @equiv advanceSelection(This, [])
--spec advanceSelection(This) -> ok when
+-spec advanceSelection(This) -> 'ok' when
This::wxNotebook().
advanceSelection(This)
@@ -149,9 +149,9 @@ advanceSelection(This)
advanceSelection(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebook.html#wxnotebookadvanceselection">external documentation</a>.
--spec advanceSelection(This, [Option]) -> ok when
+-spec advanceSelection(This, [Option]) -> 'ok' when
This::wxNotebook(),
- Option :: {forward, boolean()}.
+ Option :: {'forward', boolean()}.
advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxNotebook),
@@ -162,7 +162,7 @@ advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebook.html#wxnotebookassignimagelist">external documentation</a>.
--spec assignImageList(This, ImageList) -> ok when
+-spec assignImageList(This, ImageList) -> 'ok' when
This::wxNotebook(), ImageList::wxImageList:wxImageList().
assignImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxNotebook),
@@ -181,9 +181,9 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebook.html#wxnotebookcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxNotebook(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxNotebook),
@@ -318,8 +318,8 @@ insertPage(This,Position,Win,StrText)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebook.html#wxnotebookinsertpage">external documentation</a>.
-spec insertPage(This, Position, Win, StrText, [Option]) -> boolean() when
This::wxNotebook(), Position::integer(), Win::wxWindow:wxWindow(), StrText::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
insertPage(#wx_ref{type=ThisT,ref=ThisRef},Position,#wx_ref{type=WinT,ref=WinRef},StrText, Options)
when is_integer(Position),is_list(StrText),is_list(Options) ->
?CLASS(ThisT,wxNotebook),
@@ -333,7 +333,7 @@ insertPage(#wx_ref{type=ThisT,ref=ThisRef},Position,#wx_ref{type=WinT,ref=WinRef
<<ThisRef:32/?UI,Position:32/?UI,WinRef:32/?UI,(byte_size(StrText_UC)):32/?UI,(StrText_UC)/binary, 0:(((8- ((0+byte_size(StrText_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebook.html#wxnotebooksetimagelist">external documentation</a>.
--spec setImageList(This, ImageList) -> ok when
+-spec setImageList(This, ImageList) -> 'ok' when
This::wxNotebook(), ImageList::wxImageList:wxImageList().
setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxNotebook),
@@ -342,7 +342,7 @@ setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageLi
<<ThisRef:32/?UI,ImageListRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebook.html#wxnotebooksetpadding">external documentation</a>.
--spec setPadding(This, Padding) -> ok when
+-spec setPadding(This, Padding) -> 'ok' when
This::wxNotebook(), Padding::{W::integer(), H::integer()}.
setPadding(#wx_ref{type=ThisT,ref=ThisRef},{PaddingW,PaddingH})
when is_integer(PaddingW),is_integer(PaddingH) ->
@@ -351,7 +351,7 @@ setPadding(#wx_ref{type=ThisT,ref=ThisRef},{PaddingW,PaddingH})
<<ThisRef:32/?UI,PaddingW:32/?UI,PaddingH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebook.html#wxnotebooksetpagesize">external documentation</a>.
--spec setPageSize(This, Size) -> ok when
+-spec setPageSize(This, Size) -> 'ok' when
This::wxNotebook(), Size::{W::integer(), H::integer()}.
setPageSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -397,7 +397,7 @@ changeSelection(#wx_ref{type=ThisT,ref=ThisRef},NPage)
<<ThisRef:32/?UI,NPage:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxNotebook()) -> ok.
+-spec destroy(This::wxNotebook()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxNotebook),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxNotebookEvent.erl b/lib/wx/src/gen/wxNotebookEvent.erl
index 063cab68ea..899c5b14ca 100644
--- a/lib/wx/src/gen/wxNotebookEvent.erl
+++ b/lib/wx/src/gen/wxNotebookEvent.erl
@@ -67,7 +67,7 @@ getSelection(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebookevent.html#wxnotebookeventsetoldselection">external documentation</a>.
--spec setOldSelection(This, NOldSel) -> ok when
+-spec setOldSelection(This, NOldSel) -> 'ok' when
This::wxNotebookEvent(), NOldSel::integer().
setOldSelection(#wx_ref{type=ThisT,ref=ThisRef},NOldSel)
when is_integer(NOldSel) ->
@@ -76,7 +76,7 @@ setOldSelection(#wx_ref{type=ThisT,ref=ThisRef},NOldSel)
<<ThisRef:32/?UI,NOldSel:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotebookevent.html#wxnotebookeventsetselection">external documentation</a>.
--spec setSelection(This, NSel) -> ok when
+-spec setSelection(This, NSel) -> 'ok' when
This::wxNotebookEvent(), NSel::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},NSel)
when is_integer(NSel) ->
diff --git a/lib/wx/src/gen/wxNotifyEvent.erl b/lib/wx/src/gen/wxNotifyEvent.erl
index 0befce0e77..5f53b3af55 100644
--- a/lib/wx/src/gen/wxNotifyEvent.erl
+++ b/lib/wx/src/gen/wxNotifyEvent.erl
@@ -45,7 +45,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxNotifyEvent() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotifyevent.html#wxnotifyeventallow">external documentation</a>.
--spec allow(This) -> ok when
+-spec allow(This) -> 'ok' when
This::wxNotifyEvent().
allow(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxNotifyEvent),
@@ -61,7 +61,7 @@ isAllowed(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxnotifyevent.html#wxnotifyeventveto">external documentation</a>.
--spec veto(This) -> ok when
+-spec veto(This) -> 'ok' when
This::wxNotifyEvent().
veto(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxNotifyEvent),
diff --git a/lib/wx/src/gen/wxOverlay.erl b/lib/wx/src/gen/wxOverlay.erl
index 7da3ece657..efe6e69589 100644
--- a/lib/wx/src/gen/wxOverlay.erl
+++ b/lib/wx/src/gen/wxOverlay.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2015. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -42,7 +42,7 @@ new() ->
<<>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxoverlay.html#wxoverlayreset">external documentation</a>.
--spec reset(This) -> ok when
+-spec reset(This) -> 'ok' when
This::wxOverlay().
reset(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxOverlay),
@@ -50,7 +50,7 @@ reset(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxOverlay()) -> ok.
+-spec destroy(This::wxOverlay()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxOverlay),
wxe_util:destroy(?wxOverlay_destruct,Obj),
diff --git a/lib/wx/src/gen/wxPageSetupDialog.erl b/lib/wx/src/gen/wxPageSetupDialog.erl
index 41897064b5..091ba4628e 100644
--- a/lib/wx/src/gen/wxPageSetupDialog.erl
+++ b/lib/wx/src/gen/wxPageSetupDialog.erl
@@ -46,7 +46,7 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialog.html#wxpagesetupdialogwxpagesetupdialog">external documentation</a>.
-spec new(Parent, [Option]) -> wxPageSetupDialog() when
Parent::wxWindow:wxWindow(),
- Option :: {data, wxPageSetupDialogData:wxPageSetupDialogData()}.
+ Option :: {'data', wxPageSetupDialogData:wxPageSetupDialogData()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -73,7 +73,7 @@ showModal(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPageSetupDialog()) -> ok.
+-spec destroy(This::wxPageSetupDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPageSetupDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPageSetupDialogData.erl b/lib/wx/src/gen/wxPageSetupDialogData.erl
index 6aa8865e32..56c059c232 100644
--- a/lib/wx/src/gen/wxPageSetupDialogData.erl
+++ b/lib/wx/src/gen/wxPageSetupDialogData.erl
@@ -62,7 +62,7 @@ new(#wx_ref{type=PrintDataT,ref=PrintDataRef}) ->
<<PrintDataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdataenablehelp">external documentation</a>.
--spec enableHelp(This, Flag) -> ok when
+-spec enableHelp(This, Flag) -> 'ok' when
This::wxPageSetupDialogData(), Flag::boolean().
enableHelp(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -71,7 +71,7 @@ enableHelp(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdataenablemargins">external documentation</a>.
--spec enableMargins(This, Flag) -> ok when
+-spec enableMargins(This, Flag) -> 'ok' when
This::wxPageSetupDialogData(), Flag::boolean().
enableMargins(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -80,7 +80,7 @@ enableMargins(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdataenableorientation">external documentation</a>.
--spec enableOrientation(This, Flag) -> ok when
+-spec enableOrientation(This, Flag) -> 'ok' when
This::wxPageSetupDialogData(), Flag::boolean().
enableOrientation(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -89,7 +89,7 @@ enableOrientation(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdataenablepaper">external documentation</a>.
--spec enablePaper(This, Flag) -> ok when
+-spec enablePaper(This, Flag) -> 'ok' when
This::wxPageSetupDialogData(), Flag::boolean().
enablePaper(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -98,7 +98,7 @@ enablePaper(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdataenableprinter">external documentation</a>.
--spec enablePrinter(This, Flag) -> ok when
+-spec enablePrinter(This, Flag) -> 'ok' when
This::wxPageSetupDialogData(), Flag::boolean().
enablePrinter(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -228,7 +228,7 @@ isOk(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdatasetdefaultinfo">external documentation</a>.
--spec setDefaultInfo(This, Flag) -> ok when
+-spec setDefaultInfo(This, Flag) -> 'ok' when
This::wxPageSetupDialogData(), Flag::boolean().
setDefaultInfo(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -237,7 +237,7 @@ setDefaultInfo(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdatasetdefaultminmargins">external documentation</a>.
--spec setDefaultMinMargins(This, Flag) -> ok when
+-spec setDefaultMinMargins(This, Flag) -> 'ok' when
This::wxPageSetupDialogData(), Flag::boolean().
setDefaultMinMargins(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -246,7 +246,7 @@ setDefaultMinMargins(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdatasetmargintopleft">external documentation</a>.
--spec setMarginTopLeft(This, Pt) -> ok when
+-spec setMarginTopLeft(This, Pt) -> 'ok' when
This::wxPageSetupDialogData(), Pt::{X::integer(), Y::integer()}.
setMarginTopLeft(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
when is_integer(PtX),is_integer(PtY) ->
@@ -255,7 +255,7 @@ setMarginTopLeft(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdatasetmarginbottomright">external documentation</a>.
--spec setMarginBottomRight(This, Pt) -> ok when
+-spec setMarginBottomRight(This, Pt) -> 'ok' when
This::wxPageSetupDialogData(), Pt::{X::integer(), Y::integer()}.
setMarginBottomRight(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
when is_integer(PtX),is_integer(PtY) ->
@@ -264,7 +264,7 @@ setMarginBottomRight(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdatasetminmargintopleft">external documentation</a>.
--spec setMinMarginTopLeft(This, Pt) -> ok when
+-spec setMinMarginTopLeft(This, Pt) -> 'ok' when
This::wxPageSetupDialogData(), Pt::{X::integer(), Y::integer()}.
setMinMarginTopLeft(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
when is_integer(PtX),is_integer(PtY) ->
@@ -273,7 +273,7 @@ setMinMarginTopLeft(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdatasetminmarginbottomright">external documentation</a>.
--spec setMinMarginBottomRight(This, Pt) -> ok when
+-spec setMinMarginBottomRight(This, Pt) -> 'ok' when
This::wxPageSetupDialogData(), Pt::{X::integer(), Y::integer()}.
setMinMarginBottomRight(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
when is_integer(PtX),is_integer(PtY) ->
@@ -283,7 +283,7 @@ setMinMarginBottomRight(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdatasetpaperid">external documentation</a>.
%%<br /> Id = ?wxPAPER_NONE | ?wxPAPER_LETTER | ?wxPAPER_LEGAL | ?wxPAPER_A4 | ?wxPAPER_CSHEET | ?wxPAPER_DSHEET | ?wxPAPER_ESHEET | ?wxPAPER_LETTERSMALL | ?wxPAPER_TABLOID | ?wxPAPER_LEDGER | ?wxPAPER_STATEMENT | ?wxPAPER_EXECUTIVE | ?wxPAPER_A3 | ?wxPAPER_A4SMALL | ?wxPAPER_A5 | ?wxPAPER_B4 | ?wxPAPER_B5 | ?wxPAPER_FOLIO | ?wxPAPER_QUARTO | ?wxPAPER_10X14 | ?wxPAPER_11X17 | ?wxPAPER_NOTE | ?wxPAPER_ENV_9 | ?wxPAPER_ENV_10 | ?wxPAPER_ENV_11 | ?wxPAPER_ENV_12 | ?wxPAPER_ENV_14 | ?wxPAPER_ENV_DL | ?wxPAPER_ENV_C5 | ?wxPAPER_ENV_C3 | ?wxPAPER_ENV_C4 | ?wxPAPER_ENV_C6 | ?wxPAPER_ENV_C65 | ?wxPAPER_ENV_B4 | ?wxPAPER_ENV_B5 | ?wxPAPER_ENV_B6 | ?wxPAPER_ENV_ITALY | ?wxPAPER_ENV_MONARCH | ?wxPAPER_ENV_PERSONAL | ?wxPAPER_FANFOLD_US | ?wxPAPER_FANFOLD_STD_GERMAN | ?wxPAPER_FANFOLD_LGL_GERMAN | ?wxPAPER_ISO_B4 | ?wxPAPER_JAPANESE_POSTCARD | ?wxPAPER_9X11 | ?wxPAPER_10X11 | ?wxPAPER_15X11 | ?wxPAPER_ENV_INVITE | ?wxPAPER_LETTER_EXTRA | ?wxPAPER_LEGAL_EXTRA | ?wxPAPER_TABLOID_EXTRA | ?wxPAPER_A4_EXTRA | ?wxPAPER_LETTER_TRANSVERSE | ?wxPAPER_A4_TRANSVERSE | ?wxPAPER_LETTER_EXTRA_TRANSVERSE | ?wxPAPER_A_PLUS | ?wxPAPER_B_PLUS | ?wxPAPER_LETTER_PLUS | ?wxPAPER_A4_PLUS | ?wxPAPER_A5_TRANSVERSE | ?wxPAPER_B5_TRANSVERSE | ?wxPAPER_A3_EXTRA | ?wxPAPER_A5_EXTRA | ?wxPAPER_B5_EXTRA | ?wxPAPER_A2 | ?wxPAPER_A3_TRANSVERSE | ?wxPAPER_A3_EXTRA_TRANSVERSE | ?wxPAPER_DBL_JAPANESE_POSTCARD | ?wxPAPER_A6 | ?wxPAPER_JENV_KAKU2 | ?wxPAPER_JENV_KAKU3 | ?wxPAPER_JENV_CHOU3 | ?wxPAPER_JENV_CHOU4 | ?wxPAPER_LETTER_ROTATED | ?wxPAPER_A3_ROTATED | ?wxPAPER_A4_ROTATED | ?wxPAPER_A5_ROTATED | ?wxPAPER_B4_JIS_ROTATED | ?wxPAPER_B5_JIS_ROTATED | ?wxPAPER_JAPANESE_POSTCARD_ROTATED | ?wxPAPER_DBL_JAPANESE_POSTCARD_ROTATED | ?wxPAPER_A6_ROTATED | ?wxPAPER_JENV_KAKU2_ROTATED | ?wxPAPER_JENV_KAKU3_ROTATED | ?wxPAPER_JENV_CHOU3_ROTATED | ?wxPAPER_JENV_CHOU4_ROTATED | ?wxPAPER_B6_JIS | ?wxPAPER_B6_JIS_ROTATED | ?wxPAPER_12X11 | ?wxPAPER_JENV_YOU4 | ?wxPAPER_JENV_YOU4_ROTATED | ?wxPAPER_P16K | ?wxPAPER_P32K | ?wxPAPER_P32KBIG | ?wxPAPER_PENV_1 | ?wxPAPER_PENV_2 | ?wxPAPER_PENV_3 | ?wxPAPER_PENV_4 | ?wxPAPER_PENV_5 | ?wxPAPER_PENV_6 | ?wxPAPER_PENV_7 | ?wxPAPER_PENV_8 | ?wxPAPER_PENV_9 | ?wxPAPER_PENV_10 | ?wxPAPER_P16K_ROTATED | ?wxPAPER_P32K_ROTATED | ?wxPAPER_P32KBIG_ROTATED | ?wxPAPER_PENV_1_ROTATED | ?wxPAPER_PENV_2_ROTATED | ?wxPAPER_PENV_3_ROTATED | ?wxPAPER_PENV_4_ROTATED | ?wxPAPER_PENV_5_ROTATED | ?wxPAPER_PENV_6_ROTATED | ?wxPAPER_PENV_7_ROTATED | ?wxPAPER_PENV_8_ROTATED | ?wxPAPER_PENV_9_ROTATED | ?wxPAPER_PENV_10_ROTATED
--spec setPaperId(This, Id) -> ok when
+-spec setPaperId(This, Id) -> 'ok' when
This::wxPageSetupDialogData(), Id::wx:wx_enum().
setPaperId(#wx_ref{type=ThisT,ref=ThisRef},Id)
when is_integer(Id) ->
@@ -293,13 +293,13 @@ setPaperId(#wx_ref{type=ThisT,ref=ThisRef},Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdatasetpapersize">external documentation</a>.
%% <br /> Also:<br />
-%% setPaperSize(This, Sz) -> ok when<br />
+%% setPaperSize(This, Sz) -> 'ok' when<br />
%% This::wxPageSetupDialogData(), Sz::{W::integer(), H::integer()}.<br />
%%
%%<br /> Id = ?wxPAPER_NONE | ?wxPAPER_LETTER | ?wxPAPER_LEGAL | ?wxPAPER_A4 | ?wxPAPER_CSHEET | ?wxPAPER_DSHEET | ?wxPAPER_ESHEET | ?wxPAPER_LETTERSMALL | ?wxPAPER_TABLOID | ?wxPAPER_LEDGER | ?wxPAPER_STATEMENT | ?wxPAPER_EXECUTIVE | ?wxPAPER_A3 | ?wxPAPER_A4SMALL | ?wxPAPER_A5 | ?wxPAPER_B4 | ?wxPAPER_B5 | ?wxPAPER_FOLIO | ?wxPAPER_QUARTO | ?wxPAPER_10X14 | ?wxPAPER_11X17 | ?wxPAPER_NOTE | ?wxPAPER_ENV_9 | ?wxPAPER_ENV_10 | ?wxPAPER_ENV_11 | ?wxPAPER_ENV_12 | ?wxPAPER_ENV_14 | ?wxPAPER_ENV_DL | ?wxPAPER_ENV_C5 | ?wxPAPER_ENV_C3 | ?wxPAPER_ENV_C4 | ?wxPAPER_ENV_C6 | ?wxPAPER_ENV_C65 | ?wxPAPER_ENV_B4 | ?wxPAPER_ENV_B5 | ?wxPAPER_ENV_B6 | ?wxPAPER_ENV_ITALY | ?wxPAPER_ENV_MONARCH | ?wxPAPER_ENV_PERSONAL | ?wxPAPER_FANFOLD_US | ?wxPAPER_FANFOLD_STD_GERMAN | ?wxPAPER_FANFOLD_LGL_GERMAN | ?wxPAPER_ISO_B4 | ?wxPAPER_JAPANESE_POSTCARD | ?wxPAPER_9X11 | ?wxPAPER_10X11 | ?wxPAPER_15X11 | ?wxPAPER_ENV_INVITE | ?wxPAPER_LETTER_EXTRA | ?wxPAPER_LEGAL_EXTRA | ?wxPAPER_TABLOID_EXTRA | ?wxPAPER_A4_EXTRA | ?wxPAPER_LETTER_TRANSVERSE | ?wxPAPER_A4_TRANSVERSE | ?wxPAPER_LETTER_EXTRA_TRANSVERSE | ?wxPAPER_A_PLUS | ?wxPAPER_B_PLUS | ?wxPAPER_LETTER_PLUS | ?wxPAPER_A4_PLUS | ?wxPAPER_A5_TRANSVERSE | ?wxPAPER_B5_TRANSVERSE | ?wxPAPER_A3_EXTRA | ?wxPAPER_A5_EXTRA | ?wxPAPER_B5_EXTRA | ?wxPAPER_A2 | ?wxPAPER_A3_TRANSVERSE | ?wxPAPER_A3_EXTRA_TRANSVERSE | ?wxPAPER_DBL_JAPANESE_POSTCARD | ?wxPAPER_A6 | ?wxPAPER_JENV_KAKU2 | ?wxPAPER_JENV_KAKU3 | ?wxPAPER_JENV_CHOU3 | ?wxPAPER_JENV_CHOU4 | ?wxPAPER_LETTER_ROTATED | ?wxPAPER_A3_ROTATED | ?wxPAPER_A4_ROTATED | ?wxPAPER_A5_ROTATED | ?wxPAPER_B4_JIS_ROTATED | ?wxPAPER_B5_JIS_ROTATED | ?wxPAPER_JAPANESE_POSTCARD_ROTATED | ?wxPAPER_DBL_JAPANESE_POSTCARD_ROTATED | ?wxPAPER_A6_ROTATED | ?wxPAPER_JENV_KAKU2_ROTATED | ?wxPAPER_JENV_KAKU3_ROTATED | ?wxPAPER_JENV_CHOU3_ROTATED | ?wxPAPER_JENV_CHOU4_ROTATED | ?wxPAPER_B6_JIS | ?wxPAPER_B6_JIS_ROTATED | ?wxPAPER_12X11 | ?wxPAPER_JENV_YOU4 | ?wxPAPER_JENV_YOU4_ROTATED | ?wxPAPER_P16K | ?wxPAPER_P32K | ?wxPAPER_P32KBIG | ?wxPAPER_PENV_1 | ?wxPAPER_PENV_2 | ?wxPAPER_PENV_3 | ?wxPAPER_PENV_4 | ?wxPAPER_PENV_5 | ?wxPAPER_PENV_6 | ?wxPAPER_PENV_7 | ?wxPAPER_PENV_8 | ?wxPAPER_PENV_9 | ?wxPAPER_PENV_10 | ?wxPAPER_P16K_ROTATED | ?wxPAPER_P32K_ROTATED | ?wxPAPER_P32KBIG_ROTATED | ?wxPAPER_PENV_1_ROTATED | ?wxPAPER_PENV_2_ROTATED | ?wxPAPER_PENV_3_ROTATED | ?wxPAPER_PENV_4_ROTATED | ?wxPAPER_PENV_5_ROTATED | ?wxPAPER_PENV_6_ROTATED | ?wxPAPER_PENV_7_ROTATED | ?wxPAPER_PENV_8_ROTATED | ?wxPAPER_PENV_9_ROTATED | ?wxPAPER_PENV_10_ROTATED
--spec setPaperSize(This, Id) -> ok when
+-spec setPaperSize(This, Id) -> 'ok' when
This::wxPageSetupDialogData(), Id::wx:wx_enum();
- (This, Sz) -> ok when
+ (This, Sz) -> 'ok' when
This::wxPageSetupDialogData(), Sz::{W::integer(), H::integer()}.
setPaperSize(#wx_ref{type=ThisT,ref=ThisRef},Id)
when is_integer(Id) ->
@@ -313,7 +313,7 @@ setPaperSize(#wx_ref{type=ThisT,ref=ThisRef},{SzW,SzH})
<<ThisRef:32/?UI,SzW:32/?UI,SzH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpagesetupdialogdata.html#wxpagesetupdialogdatasetprintdata">external documentation</a>.
--spec setPrintData(This, PrintData) -> ok when
+-spec setPrintData(This, PrintData) -> 'ok' when
This::wxPageSetupDialogData(), PrintData::wxPrintData:wxPrintData().
setPrintData(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PrintDataT,ref=PrintDataRef}) ->
?CLASS(ThisT,wxPageSetupDialogData),
@@ -322,7 +322,7 @@ setPrintData(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PrintDataT,ref=PrintDa
<<ThisRef:32/?UI,PrintDataRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPageSetupDialogData()) -> ok.
+-spec destroy(This::wxPageSetupDialogData()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPageSetupDialogData),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPaintDC.erl b/lib/wx/src/gen/wxPaintDC.erl
index 77efd2c4ba..b571219020 100644
--- a/lib/wx/src/gen/wxPaintDC.erl
+++ b/lib/wx/src/gen/wxPaintDC.erl
@@ -80,7 +80,7 @@ new(#wx_ref{type=WinT,ref=WinRef}) ->
<<WinRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPaintDC()) -> ok.
+-spec destroy(This::wxPaintDC()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPaintDC),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPalette.erl b/lib/wx/src/gen/wxPalette.erl
index 8ac0833e01..799ce2b90d 100644
--- a/lib/wx/src/gen/wxPalette.erl
+++ b/lib/wx/src/gen/wxPalette.erl
@@ -101,7 +101,7 @@ isOk(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPalette()) -> ok.
+-spec destroy(This::wxPalette()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPalette),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPaletteChangedEvent.erl b/lib/wx/src/gen/wxPaletteChangedEvent.erl
index ab49719f6e..bc054fa285 100644
--- a/lib/wx/src/gen/wxPaletteChangedEvent.erl
+++ b/lib/wx/src/gen/wxPaletteChangedEvent.erl
@@ -45,7 +45,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxPaletteChangedEvent() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpalettechangedevent.html#wxpalettechangedeventsetchangedwindow">external documentation</a>.
--spec setChangedWindow(This, Win) -> ok when
+-spec setChangedWindow(This, Win) -> 'ok' when
This::wxPaletteChangedEvent(), Win::wxWindow:wxWindow().
setChangedWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WinT,ref=WinRef}) ->
?CLASS(ThisT,wxPaletteChangedEvent),
diff --git a/lib/wx/src/gen/wxPanel.erl b/lib/wx/src/gen/wxPanel.erl
index ceb894fe31..07898cf19e 100644
--- a/lib/wx/src/gen/wxPanel.erl
+++ b/lib/wx/src/gen/wxPanel.erl
@@ -94,10 +94,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpanel.html#wxpanelwxpanel">external documentation</a>.
-spec new(Parent, [Option]) -> wxPanel() when
Parent::wxWindow:wxWindow(),
- Option :: {winid, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'winid', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -121,7 +121,7 @@ new(Parent,X,Y,Width,Height)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpanel.html#wxpanelwxpanel">external documentation</a>.
-spec new(Parent, X, Y, Width, Height, [Option]) -> wxPanel() when
Parent::wxWindow:wxWindow(), X::integer(), Y::integer(), Width::integer(), Height::integer(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},X,Y,Width,Height, Options)
when is_integer(X),is_integer(Y),is_integer(Width),is_integer(Height),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -132,7 +132,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},X,Y,Width,Height, Options)
<<ParentRef:32/?UI,X:32/?UI,Y:32/?UI,Width:32/?UI,Height:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpanel.html#wxpanelinitdialog">external documentation</a>.
--spec initDialog(This) -> ok when
+-spec initDialog(This) -> 'ok' when
This::wxPanel().
initDialog(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPanel),
@@ -140,7 +140,7 @@ initDialog(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpanel.html#wxpanelsetfocusignoringchildren">external documentation</a>.
--spec setFocusIgnoringChildren(This) -> ok when
+-spec setFocusIgnoringChildren(This) -> 'ok' when
This::wxPanel().
setFocusIgnoringChildren(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPanel),
@@ -148,7 +148,7 @@ setFocusIgnoringChildren(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPanel()) -> ok.
+-spec destroy(This::wxPanel()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPanel),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPasswordEntryDialog.erl b/lib/wx/src/gen/wxPasswordEntryDialog.erl
index ac3f1c9d8c..e8ee8c8f37 100644
--- a/lib/wx/src/gen/wxPasswordEntryDialog.erl
+++ b/lib/wx/src/gen/wxPasswordEntryDialog.erl
@@ -101,10 +101,10 @@ new(Parent,Message)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpasswordentrydialog.html#wxpasswordentrydialogwxpasswordentrydialog">external documentation</a>.
-spec new(Parent, Message, [Option]) -> wxPasswordEntryDialog() when
Parent::wxWindow:wxWindow(), Message::unicode:chardata(),
- Option :: {caption, unicode:chardata()}
- | {value, unicode:chardata()}
- | {style, integer()}
- | {pos, {X::integer(), Y::integer()}}.
+ Option :: {'caption', unicode:chardata()}
+ | {'value', unicode:chardata()}
+ | {'style', integer()}
+ | {'pos', {X::integer(), Y::integer()}}.
new(#wx_ref{type=ParentT,ref=ParentRef},Message, Options)
when is_list(Message),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -119,7 +119,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Message, Options)
<<ParentRef:32/?UI,(byte_size(Message_UC)):32/?UI,(Message_UC)/binary, 0:(((8- ((0+byte_size(Message_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPasswordEntryDialog()) -> ok.
+-spec destroy(This::wxPasswordEntryDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPasswordEntryDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPen.erl b/lib/wx/src/gen/wxPen.erl
index 761b885006..7a2bbb827e 100644
--- a/lib/wx/src/gen/wxPen.erl
+++ b/lib/wx/src/gen/wxPen.erl
@@ -54,8 +54,8 @@ new(Colour)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpen.html#wxpenwxpen">external documentation</a>.
-spec new(Colour, [Option]) -> wxPen() when
Colour::wx:wx_colour(),
- Option :: {width, integer()}
- | {style, integer()}.
+ Option :: {'width', integer()}
+ | {'style', integer()}.
new(Colour, Options)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4,is_list(Options) ->
MOpts = fun({width, Width}, Acc) -> [<<1:32/?UI,Width:32/?UI>>|Acc];
@@ -115,7 +115,7 @@ isOk(#wx_ref{type=ThisT,ref=ThisRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpen.html#wxpensetcap">external documentation</a>.
%%<br /> CapStyle = integer
--spec setCap(This, CapStyle) -> ok when
+-spec setCap(This, CapStyle) -> 'ok' when
This::wxPen(), CapStyle::wx:wx_enum().
setCap(#wx_ref{type=ThisT,ref=ThisRef},CapStyle)
when is_integer(CapStyle) ->
@@ -124,7 +124,7 @@ setCap(#wx_ref{type=ThisT,ref=ThisRef},CapStyle)
<<ThisRef:32/?UI,CapStyle:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpen.html#wxpensetcolour">external documentation</a>.
--spec setColour(This, Colour) -> ok when
+-spec setColour(This, Colour) -> 'ok' when
This::wxPen(), Colour::wx:wx_colour().
setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -133,7 +133,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpen.html#wxpensetcolour">external documentation</a>.
--spec setColour(This, Red, Green, Blue) -> ok when
+-spec setColour(This, Red, Green, Blue) -> 'ok' when
This::wxPen(), Red::integer(), Green::integer(), Blue::integer().
setColour(#wx_ref{type=ThisT,ref=ThisRef},Red,Green,Blue)
when is_integer(Red),is_integer(Green),is_integer(Blue) ->
@@ -143,7 +143,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},Red,Green,Blue)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpen.html#wxpensetjoin">external documentation</a>.
%%<br /> JoinStyle = integer
--spec setJoin(This, JoinStyle) -> ok when
+-spec setJoin(This, JoinStyle) -> 'ok' when
This::wxPen(), JoinStyle::wx:wx_enum().
setJoin(#wx_ref{type=ThisT,ref=ThisRef},JoinStyle)
when is_integer(JoinStyle) ->
@@ -152,7 +152,7 @@ setJoin(#wx_ref{type=ThisT,ref=ThisRef},JoinStyle)
<<ThisRef:32/?UI,JoinStyle:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpen.html#wxpensetstyle">external documentation</a>.
--spec setStyle(This, Style) -> ok when
+-spec setStyle(This, Style) -> 'ok' when
This::wxPen(), Style::integer().
setStyle(#wx_ref{type=ThisT,ref=ThisRef},Style)
when is_integer(Style) ->
@@ -161,7 +161,7 @@ setStyle(#wx_ref{type=ThisT,ref=ThisRef},Style)
<<ThisRef:32/?UI,Style:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpen.html#wxpensetwidth">external documentation</a>.
--spec setWidth(This, Width) -> ok when
+-spec setWidth(This, Width) -> 'ok' when
This::wxPen(), Width::integer().
setWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
when is_integer(Width) ->
@@ -170,7 +170,7 @@ setWidth(#wx_ref{type=ThisT,ref=ThisRef},Width)
<<ThisRef:32/?UI,Width:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPen()) -> ok.
+-spec destroy(This::wxPen()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPen),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPickerBase.erl b/lib/wx/src/gen/wxPickerBase.erl
index bbdeaf6af8..33931f9119 100644
--- a/lib/wx/src/gen/wxPickerBase.erl
+++ b/lib/wx/src/gen/wxPickerBase.erl
@@ -83,7 +83,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxPickerBase() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpickerbase.html#wxpickerbasesetinternalmargin">external documentation</a>.
--spec setInternalMargin(This, Newmargin) -> ok when
+-spec setInternalMargin(This, Newmargin) -> 'ok' when
This::wxPickerBase(), Newmargin::integer().
setInternalMargin(#wx_ref{type=ThisT,ref=ThisRef},Newmargin)
when is_integer(Newmargin) ->
@@ -100,7 +100,7 @@ getInternalMargin(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpickerbase.html#wxpickerbasesettextctrlproportion">external documentation</a>.
--spec setTextCtrlProportion(This, Prop) -> ok when
+-spec setTextCtrlProportion(This, Prop) -> 'ok' when
This::wxPickerBase(), Prop::integer().
setTextCtrlProportion(#wx_ref{type=ThisT,ref=ThisRef},Prop)
when is_integer(Prop) ->
@@ -109,7 +109,7 @@ setTextCtrlProportion(#wx_ref{type=ThisT,ref=ThisRef},Prop)
<<ThisRef:32/?UI,Prop:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpickerbase.html#wxpickerbasesetpickerctrlproportion">external documentation</a>.
--spec setPickerCtrlProportion(This, Prop) -> ok when
+-spec setPickerCtrlProportion(This, Prop) -> 'ok' when
This::wxPickerBase(), Prop::integer().
setPickerCtrlProportion(#wx_ref{type=ThisT,ref=ThisRef},Prop)
when is_integer(Prop) ->
@@ -158,7 +158,7 @@ isTextCtrlGrowable(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv setPickerCtrlGrowable(This, [])
--spec setPickerCtrlGrowable(This) -> ok when
+-spec setPickerCtrlGrowable(This) -> 'ok' when
This::wxPickerBase().
setPickerCtrlGrowable(This)
@@ -166,9 +166,9 @@ setPickerCtrlGrowable(This)
setPickerCtrlGrowable(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpickerbase.html#wxpickerbasesetpickerctrlgrowable">external documentation</a>.
--spec setPickerCtrlGrowable(This, [Option]) -> ok when
+-spec setPickerCtrlGrowable(This, [Option]) -> 'ok' when
This::wxPickerBase(),
- Option :: {grow, boolean()}.
+ Option :: {'grow', boolean()}.
setPickerCtrlGrowable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxPickerBase),
@@ -179,7 +179,7 @@ setPickerCtrlGrowable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv setTextCtrlGrowable(This, [])
--spec setTextCtrlGrowable(This) -> ok when
+-spec setTextCtrlGrowable(This) -> 'ok' when
This::wxPickerBase().
setTextCtrlGrowable(This)
@@ -187,9 +187,9 @@ setTextCtrlGrowable(This)
setTextCtrlGrowable(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpickerbase.html#wxpickerbasesettextctrlgrowable">external documentation</a>.
--spec setTextCtrlGrowable(This, [Option]) -> ok when
+-spec setTextCtrlGrowable(This, [Option]) -> 'ok' when
This::wxPickerBase(),
- Option :: {grow, boolean()}.
+ Option :: {'grow', boolean()}.
setTextCtrlGrowable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxPickerBase),
diff --git a/lib/wx/src/gen/wxPopupTransientWindow.erl b/lib/wx/src/gen/wxPopupTransientWindow.erl
index c07c6e239e..b1feef6dcb 100644
--- a/lib/wx/src/gen/wxPopupTransientWindow.erl
+++ b/lib/wx/src/gen/wxPopupTransientWindow.erl
@@ -96,7 +96,7 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpopuptransientwindow.html#wxpopuptransientwindowwxpopuptransientwindow">external documentation</a>.
-spec new(Parent, [Option]) -> wxPopupTransientWindow() when
Parent::wxWindow:wxWindow(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -107,7 +107,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
<<ParentRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv popup(This, [])
--spec popup(This) -> ok when
+-spec popup(This) -> 'ok' when
This::wxPopupTransientWindow().
popup(This)
@@ -115,9 +115,9 @@ popup(This)
popup(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpopuptransientwindow.html#wxpopuptransientwindowpopup">external documentation</a>.
--spec popup(This, [Option]) -> ok when
+-spec popup(This, [Option]) -> 'ok' when
This::wxPopupTransientWindow(),
- Option :: {focus, wxWindow:wxWindow()}.
+ Option :: {'focus', wxWindow:wxWindow()}.
popup(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxPopupTransientWindow),
@@ -128,7 +128,7 @@ popup(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpopuptransientwindow.html#wxpopuptransientwindowdismiss">external documentation</a>.
--spec dismiss(This) -> ok when
+-spec dismiss(This) -> 'ok' when
This::wxPopupTransientWindow().
dismiss(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPopupTransientWindow),
@@ -136,7 +136,7 @@ dismiss(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPopupTransientWindow()) -> ok.
+-spec destroy(This::wxPopupTransientWindow()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPopupTransientWindow),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPopupWindow.erl b/lib/wx/src/gen/wxPopupWindow.erl
index 439f5fac54..962fd9903b 100644
--- a/lib/wx/src/gen/wxPopupWindow.erl
+++ b/lib/wx/src/gen/wxPopupWindow.erl
@@ -94,7 +94,7 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpopupwindow.html#wxpopupwindowwxpopupwindow">external documentation</a>.
-spec new(Parent, [Option]) -> wxPopupWindow() when
Parent::wxWindow:wxWindow(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -115,7 +115,7 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpopupwindow.html#wxpopupwindowcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxPopupWindow(), Parent::wxWindow:wxWindow(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxPopupWindow),
@@ -127,7 +127,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Opti
<<ThisRef:32/?UI,ParentRef:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpopupwindow.html#wxpopupwindowposition">external documentation</a>.
--spec position(This, PtOrigin, Size) -> ok when
+-spec position(This, PtOrigin, Size) -> 'ok' when
This::wxPopupWindow(), PtOrigin::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}.
position(#wx_ref{type=ThisT,ref=ThisRef},{PtOriginX,PtOriginY},{SizeW,SizeH})
when is_integer(PtOriginX),is_integer(PtOriginY),is_integer(SizeW),is_integer(SizeH) ->
@@ -136,7 +136,7 @@ position(#wx_ref{type=ThisT,ref=ThisRef},{PtOriginX,PtOriginY},{SizeW,SizeH})
<<ThisRef:32/?UI,PtOriginX:32/?UI,PtOriginY:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPopupWindow()) -> ok.
+-spec destroy(This::wxPopupWindow()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPopupWindow),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPostScriptDC.erl b/lib/wx/src/gen/wxPostScriptDC.erl
index 28f8a757ed..07764bca74 100644
--- a/lib/wx/src/gen/wxPostScriptDC.erl
+++ b/lib/wx/src/gen/wxPostScriptDC.erl
@@ -78,7 +78,7 @@ new(#wx_ref{type=PrintDataT,ref=PrintDataRef}) ->
<<PrintDataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpostscriptdc.html#wxpostscriptdcsetresolution">external documentation</a>.
--spec setResolution(Ppi) -> ok when
+-spec setResolution(Ppi) -> 'ok' when
Ppi::integer().
setResolution(Ppi)
when is_integer(Ppi) ->
@@ -92,7 +92,7 @@ getResolution() ->
<<>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPostScriptDC()) -> ok.
+-spec destroy(This::wxPostScriptDC()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPostScriptDC),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPreviewControlBar.erl b/lib/wx/src/gen/wxPreviewControlBar.erl
index 0e1828e87b..4dd224b26b 100644
--- a/lib/wx/src/gen/wxPreviewControlBar.erl
+++ b/lib/wx/src/gen/wxPreviewControlBar.erl
@@ -91,9 +91,9 @@ new(Preview,Buttons,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpreviewcontrolbar.html#wxpreviewcontrolbarwxpreviewcontrolbar">external documentation</a>.
-spec new(Preview, Buttons, Parent, [Option]) -> wxPreviewControlBar() when
Preview::wxPrintPreview:wxPrintPreview(), Buttons::integer(), Parent::wxWindow:wxWindow(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=PreviewT,ref=PreviewRef},Buttons,#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_integer(Buttons),is_list(Options) ->
?CLASS(PreviewT,wxPrintPreview),
@@ -107,7 +107,7 @@ new(#wx_ref{type=PreviewT,ref=PreviewRef},Buttons,#wx_ref{type=ParentT,ref=Paren
<<PreviewRef:32/?UI,Buttons:32/?UI,ParentRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpreviewcontrolbar.html#wxpreviewcontrolbarcreatebuttons">external documentation</a>.
--spec createButtons(This) -> ok when
+-spec createButtons(This) -> 'ok' when
This::wxPreviewControlBar().
createButtons(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPreviewControlBar),
@@ -131,7 +131,7 @@ getZoomControl(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpreviewcontrolbar.html#wxpreviewcontrolbarsetzoomcontrol">external documentation</a>.
--spec setZoomControl(This, Zoom) -> ok when
+-spec setZoomControl(This, Zoom) -> 'ok' when
This::wxPreviewControlBar(), Zoom::integer().
setZoomControl(#wx_ref{type=ThisT,ref=ThisRef},Zoom)
when is_integer(Zoom) ->
@@ -140,7 +140,7 @@ setZoomControl(#wx_ref{type=ThisT,ref=ThisRef},Zoom)
<<ThisRef:32/?UI,Zoom:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPreviewControlBar()) -> ok.
+-spec destroy(This::wxPreviewControlBar()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPreviewControlBar),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPreviewFrame.erl b/lib/wx/src/gen/wxPreviewFrame.erl
index fe684478a5..2f530b49ea 100644
--- a/lib/wx/src/gen/wxPreviewFrame.erl
+++ b/lib/wx/src/gen/wxPreviewFrame.erl
@@ -102,10 +102,10 @@ new(Preview,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpreviewframe.html#wxpreviewframewxpreviewframe">external documentation</a>.
-spec new(Preview, Parent, [Option]) -> wxPreviewFrame() when
Preview::wxPrintPreview:wxPrintPreview(), Parent::wxWindow:wxWindow(),
- Option :: {title, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'title', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=PreviewT,ref=PreviewRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(PreviewT,wxPrintPreview),
@@ -120,7 +120,7 @@ new(#wx_ref{type=PreviewT,ref=PreviewRef},#wx_ref{type=ParentT,ref=ParentRef}, O
<<PreviewRef:32/?UI,ParentRef:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpreviewframe.html#wxpreviewframecreatecontrolbar">external documentation</a>.
--spec createControlBar(This) -> ok when
+-spec createControlBar(This) -> 'ok' when
This::wxPreviewFrame().
createControlBar(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPreviewFrame),
@@ -128,7 +128,7 @@ createControlBar(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpreviewframe.html#wxpreviewframecreatecanvas">external documentation</a>.
--spec createCanvas(This) -> ok when
+-spec createCanvas(This) -> 'ok' when
This::wxPreviewFrame().
createCanvas(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPreviewFrame),
@@ -136,7 +136,7 @@ createCanvas(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpreviewframe.html#wxpreviewframeinitialize">external documentation</a>.
--spec initialize(This) -> ok when
+-spec initialize(This) -> 'ok' when
This::wxPreviewFrame().
initialize(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPreviewFrame),
@@ -144,7 +144,7 @@ initialize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxpreviewframe.html#wxpreviewframeonclosewindow">external documentation</a>.
--spec onCloseWindow(This, Event) -> ok when
+-spec onCloseWindow(This, Event) -> 'ok' when
This::wxPreviewFrame(), Event::wxCloseEvent:wxCloseEvent().
onCloseWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=EventT,ref=EventRef}) ->
?CLASS(ThisT,wxPreviewFrame),
@@ -153,7 +153,7 @@ onCloseWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=EventT,ref=EventRef})
<<ThisRef:32/?UI,EventRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPreviewFrame()) -> ok.
+-spec destroy(This::wxPreviewFrame()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPreviewFrame),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPrintData.erl b/lib/wx/src/gen/wxPrintData.erl
index a8a72c52f4..6b6b678adf 100644
--- a/lib/wx/src/gen/wxPrintData.erl
+++ b/lib/wx/src/gen/wxPrintData.erl
@@ -137,7 +137,7 @@ isOk(#wx_ref{type=ThisT,ref=ThisRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdata.html#wxprintdatasetbin">external documentation</a>.
%%<br /> Bin = ?wxPRINTBIN_DEFAULT | ?wxPRINTBIN_ONLYONE | ?wxPRINTBIN_LOWER | ?wxPRINTBIN_MIDDLE | ?wxPRINTBIN_MANUAL | ?wxPRINTBIN_ENVELOPE | ?wxPRINTBIN_ENVMANUAL | ?wxPRINTBIN_AUTO | ?wxPRINTBIN_TRACTOR | ?wxPRINTBIN_SMALLFMT | ?wxPRINTBIN_LARGEFMT | ?wxPRINTBIN_LARGECAPACITY | ?wxPRINTBIN_CASSETTE | ?wxPRINTBIN_FORMSOURCE | ?wxPRINTBIN_USER
--spec setBin(This, Bin) -> ok when
+-spec setBin(This, Bin) -> 'ok' when
This::wxPrintData(), Bin::wx:wx_enum().
setBin(#wx_ref{type=ThisT,ref=ThisRef},Bin)
when is_integer(Bin) ->
@@ -146,7 +146,7 @@ setBin(#wx_ref{type=ThisT,ref=ThisRef},Bin)
<<ThisRef:32/?UI,Bin:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdata.html#wxprintdatasetcollate">external documentation</a>.
--spec setCollate(This, Flag) -> ok when
+-spec setCollate(This, Flag) -> 'ok' when
This::wxPrintData(), Flag::boolean().
setCollate(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -155,7 +155,7 @@ setCollate(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdata.html#wxprintdatasetcolour">external documentation</a>.
--spec setColour(This, Colour) -> ok when
+-spec setColour(This, Colour) -> 'ok' when
This::wxPrintData(), Colour::boolean().
setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when is_boolean(Colour) ->
@@ -165,7 +165,7 @@ setColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdata.html#wxprintdatasetduplex">external documentation</a>.
%%<br /> Duplex = ?wxDUPLEX_SIMPLEX | ?wxDUPLEX_HORIZONTAL | ?wxDUPLEX_VERTICAL
--spec setDuplex(This, Duplex) -> ok when
+-spec setDuplex(This, Duplex) -> 'ok' when
This::wxPrintData(), Duplex::wx:wx_enum().
setDuplex(#wx_ref{type=ThisT,ref=ThisRef},Duplex)
when is_integer(Duplex) ->
@@ -174,7 +174,7 @@ setDuplex(#wx_ref{type=ThisT,ref=ThisRef},Duplex)
<<ThisRef:32/?UI,Duplex:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdata.html#wxprintdatasetnocopies">external documentation</a>.
--spec setNoCopies(This, V) -> ok when
+-spec setNoCopies(This, V) -> 'ok' when
This::wxPrintData(), V::integer().
setNoCopies(#wx_ref{type=ThisT,ref=ThisRef},V)
when is_integer(V) ->
@@ -183,7 +183,7 @@ setNoCopies(#wx_ref{type=ThisT,ref=ThisRef},V)
<<ThisRef:32/?UI,V:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdata.html#wxprintdatasetorientation">external documentation</a>.
--spec setOrientation(This, Orient) -> ok when
+-spec setOrientation(This, Orient) -> 'ok' when
This::wxPrintData(), Orient::integer().
setOrientation(#wx_ref{type=ThisT,ref=ThisRef},Orient)
when is_integer(Orient) ->
@@ -193,7 +193,7 @@ setOrientation(#wx_ref{type=ThisT,ref=ThisRef},Orient)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdata.html#wxprintdatasetpaperid">external documentation</a>.
%%<br /> SizeId = ?wxPAPER_NONE | ?wxPAPER_LETTER | ?wxPAPER_LEGAL | ?wxPAPER_A4 | ?wxPAPER_CSHEET | ?wxPAPER_DSHEET | ?wxPAPER_ESHEET | ?wxPAPER_LETTERSMALL | ?wxPAPER_TABLOID | ?wxPAPER_LEDGER | ?wxPAPER_STATEMENT | ?wxPAPER_EXECUTIVE | ?wxPAPER_A3 | ?wxPAPER_A4SMALL | ?wxPAPER_A5 | ?wxPAPER_B4 | ?wxPAPER_B5 | ?wxPAPER_FOLIO | ?wxPAPER_QUARTO | ?wxPAPER_10X14 | ?wxPAPER_11X17 | ?wxPAPER_NOTE | ?wxPAPER_ENV_9 | ?wxPAPER_ENV_10 | ?wxPAPER_ENV_11 | ?wxPAPER_ENV_12 | ?wxPAPER_ENV_14 | ?wxPAPER_ENV_DL | ?wxPAPER_ENV_C5 | ?wxPAPER_ENV_C3 | ?wxPAPER_ENV_C4 | ?wxPAPER_ENV_C6 | ?wxPAPER_ENV_C65 | ?wxPAPER_ENV_B4 | ?wxPAPER_ENV_B5 | ?wxPAPER_ENV_B6 | ?wxPAPER_ENV_ITALY | ?wxPAPER_ENV_MONARCH | ?wxPAPER_ENV_PERSONAL | ?wxPAPER_FANFOLD_US | ?wxPAPER_FANFOLD_STD_GERMAN | ?wxPAPER_FANFOLD_LGL_GERMAN | ?wxPAPER_ISO_B4 | ?wxPAPER_JAPANESE_POSTCARD | ?wxPAPER_9X11 | ?wxPAPER_10X11 | ?wxPAPER_15X11 | ?wxPAPER_ENV_INVITE | ?wxPAPER_LETTER_EXTRA | ?wxPAPER_LEGAL_EXTRA | ?wxPAPER_TABLOID_EXTRA | ?wxPAPER_A4_EXTRA | ?wxPAPER_LETTER_TRANSVERSE | ?wxPAPER_A4_TRANSVERSE | ?wxPAPER_LETTER_EXTRA_TRANSVERSE | ?wxPAPER_A_PLUS | ?wxPAPER_B_PLUS | ?wxPAPER_LETTER_PLUS | ?wxPAPER_A4_PLUS | ?wxPAPER_A5_TRANSVERSE | ?wxPAPER_B5_TRANSVERSE | ?wxPAPER_A3_EXTRA | ?wxPAPER_A5_EXTRA | ?wxPAPER_B5_EXTRA | ?wxPAPER_A2 | ?wxPAPER_A3_TRANSVERSE | ?wxPAPER_A3_EXTRA_TRANSVERSE | ?wxPAPER_DBL_JAPANESE_POSTCARD | ?wxPAPER_A6 | ?wxPAPER_JENV_KAKU2 | ?wxPAPER_JENV_KAKU3 | ?wxPAPER_JENV_CHOU3 | ?wxPAPER_JENV_CHOU4 | ?wxPAPER_LETTER_ROTATED | ?wxPAPER_A3_ROTATED | ?wxPAPER_A4_ROTATED | ?wxPAPER_A5_ROTATED | ?wxPAPER_B4_JIS_ROTATED | ?wxPAPER_B5_JIS_ROTATED | ?wxPAPER_JAPANESE_POSTCARD_ROTATED | ?wxPAPER_DBL_JAPANESE_POSTCARD_ROTATED | ?wxPAPER_A6_ROTATED | ?wxPAPER_JENV_KAKU2_ROTATED | ?wxPAPER_JENV_KAKU3_ROTATED | ?wxPAPER_JENV_CHOU3_ROTATED | ?wxPAPER_JENV_CHOU4_ROTATED | ?wxPAPER_B6_JIS | ?wxPAPER_B6_JIS_ROTATED | ?wxPAPER_12X11 | ?wxPAPER_JENV_YOU4 | ?wxPAPER_JENV_YOU4_ROTATED | ?wxPAPER_P16K | ?wxPAPER_P32K | ?wxPAPER_P32KBIG | ?wxPAPER_PENV_1 | ?wxPAPER_PENV_2 | ?wxPAPER_PENV_3 | ?wxPAPER_PENV_4 | ?wxPAPER_PENV_5 | ?wxPAPER_PENV_6 | ?wxPAPER_PENV_7 | ?wxPAPER_PENV_8 | ?wxPAPER_PENV_9 | ?wxPAPER_PENV_10 | ?wxPAPER_P16K_ROTATED | ?wxPAPER_P32K_ROTATED | ?wxPAPER_P32KBIG_ROTATED | ?wxPAPER_PENV_1_ROTATED | ?wxPAPER_PENV_2_ROTATED | ?wxPAPER_PENV_3_ROTATED | ?wxPAPER_PENV_4_ROTATED | ?wxPAPER_PENV_5_ROTATED | ?wxPAPER_PENV_6_ROTATED | ?wxPAPER_PENV_7_ROTATED | ?wxPAPER_PENV_8_ROTATED | ?wxPAPER_PENV_9_ROTATED | ?wxPAPER_PENV_10_ROTATED
--spec setPaperId(This, SizeId) -> ok when
+-spec setPaperId(This, SizeId) -> 'ok' when
This::wxPrintData(), SizeId::wx:wx_enum().
setPaperId(#wx_ref{type=ThisT,ref=ThisRef},SizeId)
when is_integer(SizeId) ->
@@ -202,7 +202,7 @@ setPaperId(#wx_ref{type=ThisT,ref=ThisRef},SizeId)
<<ThisRef:32/?UI,SizeId:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdata.html#wxprintdatasetprintername">external documentation</a>.
--spec setPrinterName(This, Name) -> ok when
+-spec setPrinterName(This, Name) -> 'ok' when
This::wxPrintData(), Name::unicode:chardata().
setPrinterName(#wx_ref{type=ThisT,ref=ThisRef},Name)
when is_list(Name) ->
@@ -212,7 +212,7 @@ setPrinterName(#wx_ref{type=ThisT,ref=ThisRef},Name)
<<ThisRef:32/?UI,(byte_size(Name_UC)):32/?UI,(Name_UC)/binary, 0:(((8- ((0+byte_size(Name_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdata.html#wxprintdatasetquality">external documentation</a>.
--spec setQuality(This, Quality) -> ok when
+-spec setQuality(This, Quality) -> 'ok' when
This::wxPrintData(), Quality::integer().
setQuality(#wx_ref{type=ThisT,ref=ThisRef},Quality)
when is_integer(Quality) ->
@@ -221,7 +221,7 @@ setQuality(#wx_ref{type=ThisT,ref=ThisRef},Quality)
<<ThisRef:32/?UI,Quality:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPrintData()) -> ok.
+-spec destroy(This::wxPrintData()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPrintData),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPrintDialog.erl b/lib/wx/src/gen/wxPrintDialog.erl
index a337089d5a..d4188e79c4 100644
--- a/lib/wx/src/gen/wxPrintDialog.erl
+++ b/lib/wx/src/gen/wxPrintDialog.erl
@@ -103,7 +103,7 @@ new(Parent)
%%
-spec new(Parent, [Option]) -> wxPrintDialog() when
Parent::wxWindow:wxWindow(),
- Option :: {data, wxPrintDialogData:wxPrintDialogData()};
+ Option :: {'data', wxPrintDialogData:wxPrintDialogData()};
(Parent, Data) -> wxPrintDialog() when
Parent::wxWindow:wxWindow(), Data::wxPrintData:wxPrintData().
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
@@ -137,7 +137,7 @@ getPrintDC(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPrintDialog()) -> ok.
+-spec destroy(This::wxPrintDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPrintDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPrintDialogData.erl b/lib/wx/src/gen/wxPrintDialogData.erl
index b93af1151b..5d39008a64 100644
--- a/lib/wx/src/gen/wxPrintDialogData.erl
+++ b/lib/wx/src/gen/wxPrintDialogData.erl
@@ -59,7 +59,7 @@ new(#wx_ref{type=DialogDataT,ref=DialogDataRef}) ->
<<DialogDataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdataenablehelp">external documentation</a>.
--spec enableHelp(This, Flag) -> ok when
+-spec enableHelp(This, Flag) -> 'ok' when
This::wxPrintDialogData(), Flag::boolean().
enableHelp(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -68,7 +68,7 @@ enableHelp(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdataenablepagenumbers">external documentation</a>.
--spec enablePageNumbers(This, Flag) -> ok when
+-spec enablePageNumbers(This, Flag) -> 'ok' when
This::wxPrintDialogData(), Flag::boolean().
enablePageNumbers(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -77,7 +77,7 @@ enablePageNumbers(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdataenableprinttofile">external documentation</a>.
--spec enablePrintToFile(This, Flag) -> ok when
+-spec enablePrintToFile(This, Flag) -> 'ok' when
This::wxPrintDialogData(), Flag::boolean().
enablePrintToFile(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -86,7 +86,7 @@ enablePrintToFile(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdataenableselection">external documentation</a>.
--spec enableSelection(This, Flag) -> ok when
+-spec enableSelection(This, Flag) -> 'ok' when
This::wxPrintDialogData(), Flag::boolean().
enableSelection(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -183,7 +183,7 @@ isOk(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdatasetcollate">external documentation</a>.
--spec setCollate(This, Flag) -> ok when
+-spec setCollate(This, Flag) -> 'ok' when
This::wxPrintDialogData(), Flag::boolean().
setCollate(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -192,7 +192,7 @@ setCollate(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdatasetfrompage">external documentation</a>.
--spec setFromPage(This, V) -> ok when
+-spec setFromPage(This, V) -> 'ok' when
This::wxPrintDialogData(), V::integer().
setFromPage(#wx_ref{type=ThisT,ref=ThisRef},V)
when is_integer(V) ->
@@ -201,7 +201,7 @@ setFromPage(#wx_ref{type=ThisT,ref=ThisRef},V)
<<ThisRef:32/?UI,V:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdatasetmaxpage">external documentation</a>.
--spec setMaxPage(This, V) -> ok when
+-spec setMaxPage(This, V) -> 'ok' when
This::wxPrintDialogData(), V::integer().
setMaxPage(#wx_ref{type=ThisT,ref=ThisRef},V)
when is_integer(V) ->
@@ -210,7 +210,7 @@ setMaxPage(#wx_ref{type=ThisT,ref=ThisRef},V)
<<ThisRef:32/?UI,V:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdatasetminpage">external documentation</a>.
--spec setMinPage(This, V) -> ok when
+-spec setMinPage(This, V) -> 'ok' when
This::wxPrintDialogData(), V::integer().
setMinPage(#wx_ref{type=ThisT,ref=ThisRef},V)
when is_integer(V) ->
@@ -219,7 +219,7 @@ setMinPage(#wx_ref{type=ThisT,ref=ThisRef},V)
<<ThisRef:32/?UI,V:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdatasetnocopies">external documentation</a>.
--spec setNoCopies(This, V) -> ok when
+-spec setNoCopies(This, V) -> 'ok' when
This::wxPrintDialogData(), V::integer().
setNoCopies(#wx_ref{type=ThisT,ref=ThisRef},V)
when is_integer(V) ->
@@ -228,7 +228,7 @@ setNoCopies(#wx_ref{type=ThisT,ref=ThisRef},V)
<<ThisRef:32/?UI,V:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdatasetprintdata">external documentation</a>.
--spec setPrintData(This, PrintData) -> ok when
+-spec setPrintData(This, PrintData) -> 'ok' when
This::wxPrintDialogData(), PrintData::wxPrintData:wxPrintData().
setPrintData(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PrintDataT,ref=PrintDataRef}) ->
?CLASS(ThisT,wxPrintDialogData),
@@ -237,7 +237,7 @@ setPrintData(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PrintDataT,ref=PrintDa
<<ThisRef:32/?UI,PrintDataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdatasetprinttofile">external documentation</a>.
--spec setPrintToFile(This, Flag) -> ok when
+-spec setPrintToFile(This, Flag) -> 'ok' when
This::wxPrintDialogData(), Flag::boolean().
setPrintToFile(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -246,7 +246,7 @@ setPrintToFile(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdatasetselection">external documentation</a>.
--spec setSelection(This, Flag) -> ok when
+-spec setSelection(This, Flag) -> 'ok' when
This::wxPrintDialogData(), Flag::boolean().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_boolean(Flag) ->
@@ -255,7 +255,7 @@ setSelection(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintdialogdata.html#wxprintdialogdatasettopage">external documentation</a>.
--spec setToPage(This, V) -> ok when
+-spec setToPage(This, V) -> 'ok' when
This::wxPrintDialogData(), V::integer().
setToPage(#wx_ref{type=ThisT,ref=ThisRef},V)
when is_integer(V) ->
@@ -264,7 +264,7 @@ setToPage(#wx_ref{type=ThisT,ref=ThisRef},V)
<<ThisRef:32/?UI,V:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPrintDialogData()) -> ok.
+-spec destroy(This::wxPrintDialogData()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPrintDialogData),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPrintPreview.erl b/lib/wx/src/gen/wxPrintPreview.erl
index 162d259530..a0034a5e5c 100644
--- a/lib/wx/src/gen/wxPrintPreview.erl
+++ b/lib/wx/src/gen/wxPrintPreview.erl
@@ -49,8 +49,8 @@ new(Printout)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintpreview.html#wxprintpreviewwxprintpreview">external documentation</a>.
-spec new(Printout, [Option]) -> wxPrintPreview() when
Printout::wxPrintout:wxPrintout(),
- Option :: {printoutForPrinting, wxPrintout:wxPrintout()}
- | {data, wxPrintDialogData:wxPrintDialogData()}.
+ Option :: {'printoutForPrinting', wxPrintout:wxPrintout()}
+ | {'data', wxPrintDialogData:wxPrintDialogData()}.
new(#wx_ref{type=PrintoutT,ref=PrintoutRef}, Options)
when is_list(Options) ->
?CLASS(PrintoutT,wxPrintout),
@@ -164,7 +164,7 @@ renderPage(#wx_ref{type=ThisT,ref=ThisRef},PageNum)
<<ThisRef:32/?UI,PageNum:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintpreview.html#wxprintpreviewsetcanvas">external documentation</a>.
--spec setCanvas(This, Canvas) -> ok when
+-spec setCanvas(This, Canvas) -> 'ok' when
This::wxPrintPreview(), Canvas::wxPreviewCanvas:wxPreviewCanvas().
setCanvas(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=CanvasT,ref=CanvasRef}) ->
?CLASS(ThisT,wxPrintPreview),
@@ -182,7 +182,7 @@ setCurrentPage(#wx_ref{type=ThisT,ref=ThisRef},PageNum)
<<ThisRef:32/?UI,PageNum:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintpreview.html#wxprintpreviewsetframe">external documentation</a>.
--spec setFrame(This, Frame) -> ok when
+-spec setFrame(This, Frame) -> 'ok' when
This::wxPrintPreview(), Frame::wxFrame:wxFrame().
setFrame(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FrameT,ref=FrameRef}) ->
?CLASS(ThisT,wxPrintPreview),
@@ -191,7 +191,7 @@ setFrame(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FrameT,ref=FrameRef}) ->
<<ThisRef:32/?UI,FrameRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintpreview.html#wxprintpreviewsetprintout">external documentation</a>.
--spec setPrintout(This, Printout) -> ok when
+-spec setPrintout(This, Printout) -> 'ok' when
This::wxPrintPreview(), Printout::wxPrintout:wxPrintout().
setPrintout(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PrintoutT,ref=PrintoutRef}) ->
?CLASS(ThisT,wxPrintPreview),
@@ -200,7 +200,7 @@ setPrintout(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PrintoutT,ref=PrintoutR
<<ThisRef:32/?UI,PrintoutRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintpreview.html#wxprintpreviewsetzoom">external documentation</a>.
--spec setZoom(This, Percent) -> ok when
+-spec setZoom(This, Percent) -> 'ok' when
This::wxPrintPreview(), Percent::integer().
setZoom(#wx_ref{type=ThisT,ref=ThisRef},Percent)
when is_integer(Percent) ->
@@ -209,7 +209,7 @@ setZoom(#wx_ref{type=ThisT,ref=ThisRef},Percent)
<<ThisRef:32/?UI,Percent:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPrintPreview()) -> ok.
+-spec destroy(This::wxPrintPreview()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPrintPreview),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPrinter.erl b/lib/wx/src/gen/wxPrinter.erl
index 5f3122d32c..b9fb1c07bd 100644
--- a/lib/wx/src/gen/wxPrinter.erl
+++ b/lib/wx/src/gen/wxPrinter.erl
@@ -44,7 +44,7 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprinter.html#wxprinterwxprinter">external documentation</a>.
-spec new([Option]) -> wxPrinter() when
- Option :: {data, wxPrintDialogData:wxPrintDialogData()}.
+ Option :: {'data', wxPrintDialogData:wxPrintDialogData()}.
new(Options)
when is_list(Options) ->
MOpts = fun({data, #wx_ref{type=DataT,ref=DataRef}}, Acc) -> ?CLASS(DataT,wxPrintDialogData),[<<1:32/?UI,DataRef:32/?UI>>|Acc];
@@ -97,7 +97,7 @@ print(This,Parent,Printout)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprinter.html#wxprinterprint">external documentation</a>.
-spec print(This, Parent, Printout, [Option]) -> boolean() when
This::wxPrinter(), Parent::wxWindow:wxWindow(), Printout::wxPrintout:wxPrintout(),
- Option :: {prompt, boolean()}.
+ Option :: {'prompt', boolean()}.
print(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},#wx_ref{type=PrintoutT,ref=PrintoutRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxPrinter),
@@ -119,7 +119,7 @@ printDialog(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef})
<<ThisRef:32/?UI,ParentRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprinter.html#wxprinterreporterror">external documentation</a>.
--spec reportError(This, Parent, Printout, Message) -> ok when
+-spec reportError(This, Parent, Printout, Message) -> 'ok' when
This::wxPrinter(), Parent::wxWindow:wxWindow(), Printout::wxPrintout:wxPrintout(), Message::unicode:chardata().
reportError(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},#wx_ref{type=PrintoutT,ref=PrintoutRef},Message)
when is_list(Message) ->
@@ -140,7 +140,7 @@ setup(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}) ->
<<ThisRef:32/?UI,ParentRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPrinter()) -> ok.
+-spec destroy(This::wxPrinter()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPrinter),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxPrintout.erl b/lib/wx/src/gen/wxPrintout.erl
index 7f2b59bbe7..7b28d0947d 100644
--- a/lib/wx/src/gen/wxPrintout.erl
+++ b/lib/wx/src/gen/wxPrintout.erl
@@ -187,7 +187,7 @@ isPreview(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintout.html#wxprintoutfitthissizetopaper">external documentation</a>.
--spec fitThisSizeToPaper(This, ImageSize) -> ok when
+-spec fitThisSizeToPaper(This, ImageSize) -> 'ok' when
This::wxPrintout(), ImageSize::{W::integer(), H::integer()}.
fitThisSizeToPaper(#wx_ref{type=ThisT,ref=ThisRef},{ImageSizeW,ImageSizeH})
when is_integer(ImageSizeW),is_integer(ImageSizeH) ->
@@ -196,7 +196,7 @@ fitThisSizeToPaper(#wx_ref{type=ThisT,ref=ThisRef},{ImageSizeW,ImageSizeH})
<<ThisRef:32/?UI,ImageSizeW:32/?UI,ImageSizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintout.html#wxprintoutfitthissizetopage">external documentation</a>.
--spec fitThisSizeToPage(This, ImageSize) -> ok when
+-spec fitThisSizeToPage(This, ImageSize) -> 'ok' when
This::wxPrintout(), ImageSize::{W::integer(), H::integer()}.
fitThisSizeToPage(#wx_ref{type=ThisT,ref=ThisRef},{ImageSizeW,ImageSizeH})
when is_integer(ImageSizeW),is_integer(ImageSizeH) ->
@@ -205,7 +205,7 @@ fitThisSizeToPage(#wx_ref{type=ThisT,ref=ThisRef},{ImageSizeW,ImageSizeH})
<<ThisRef:32/?UI,ImageSizeW:32/?UI,ImageSizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintout.html#wxprintoutfitthissizetopagemargins">external documentation</a>.
--spec fitThisSizeToPageMargins(This, ImageSize, PageSetupData) -> ok when
+-spec fitThisSizeToPageMargins(This, ImageSize, PageSetupData) -> 'ok' when
This::wxPrintout(), ImageSize::{W::integer(), H::integer()}, PageSetupData::wxPageSetupDialogData:wxPageSetupDialogData().
fitThisSizeToPageMargins(#wx_ref{type=ThisT,ref=ThisRef},{ImageSizeW,ImageSizeH},#wx_ref{type=PageSetupDataT,ref=PageSetupDataRef})
when is_integer(ImageSizeW),is_integer(ImageSizeH) ->
@@ -215,7 +215,7 @@ fitThisSizeToPageMargins(#wx_ref{type=ThisT,ref=ThisRef},{ImageSizeW,ImageSizeH}
<<ThisRef:32/?UI,ImageSizeW:32/?UI,ImageSizeH:32/?UI,PageSetupDataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintout.html#wxprintoutmapscreensizetopaper">external documentation</a>.
--spec mapScreenSizeToPaper(This) -> ok when
+-spec mapScreenSizeToPaper(This) -> 'ok' when
This::wxPrintout().
mapScreenSizeToPaper(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPrintout),
@@ -223,7 +223,7 @@ mapScreenSizeToPaper(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintout.html#wxprintoutmapscreensizetopage">external documentation</a>.
--spec mapScreenSizeToPage(This) -> ok when
+-spec mapScreenSizeToPage(This) -> 'ok' when
This::wxPrintout().
mapScreenSizeToPage(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPrintout),
@@ -231,7 +231,7 @@ mapScreenSizeToPage(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintout.html#wxprintoutmapscreensizetopagemargins">external documentation</a>.
--spec mapScreenSizeToPageMargins(This, PageSetupData) -> ok when
+-spec mapScreenSizeToPageMargins(This, PageSetupData) -> 'ok' when
This::wxPrintout(), PageSetupData::wxPageSetupDialogData:wxPageSetupDialogData().
mapScreenSizeToPageMargins(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageSetupDataT,ref=PageSetupDataRef}) ->
?CLASS(ThisT,wxPrintout),
@@ -240,7 +240,7 @@ mapScreenSizeToPageMargins(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageSetu
<<ThisRef:32/?UI,PageSetupDataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintout.html#wxprintoutmapscreensizetodevice">external documentation</a>.
--spec mapScreenSizeToDevice(This) -> ok when
+-spec mapScreenSizeToDevice(This) -> 'ok' when
This::wxPrintout().
mapScreenSizeToDevice(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxPrintout),
@@ -273,7 +273,7 @@ getLogicalPageMarginsRect(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageSetup
<<ThisRef:32/?UI,PageSetupDataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintout.html#wxprintoutsetlogicalorigin">external documentation</a>.
--spec setLogicalOrigin(This, X, Y) -> ok when
+-spec setLogicalOrigin(This, X, Y) -> 'ok' when
This::wxPrintout(), X::integer(), Y::integer().
setLogicalOrigin(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -282,7 +282,7 @@ setLogicalOrigin(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprintout.html#wxprintoutoffsetlogicalorigin">external documentation</a>.
--spec offsetLogicalOrigin(This, Xoff, Yoff) -> ok when
+-spec offsetLogicalOrigin(This, Xoff, Yoff) -> 'ok' when
This::wxPrintout(), Xoff::integer(), Yoff::integer().
offsetLogicalOrigin(#wx_ref{type=ThisT,ref=ThisRef},Xoff,Yoff)
when is_integer(Xoff),is_integer(Yoff) ->
@@ -291,7 +291,7 @@ offsetLogicalOrigin(#wx_ref{type=ThisT,ref=ThisRef},Xoff,Yoff)
<<ThisRef:32/?UI,Xoff:32/?UI,Yoff:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxPrintout()) -> ok.
+-spec destroy(This::wxPrintout()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxPrintout),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxProgressDialog.erl b/lib/wx/src/gen/wxProgressDialog.erl
index 665b900729..8e275f9dc8 100644
--- a/lib/wx/src/gen/wxProgressDialog.erl
+++ b/lib/wx/src/gen/wxProgressDialog.erl
@@ -99,9 +99,9 @@ new(Title,Message)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprogressdialog.html#wxprogressdialogwxprogressdialog">external documentation</a>.
-spec new(Title, Message, [Option]) -> wxProgressDialog() when
Title::unicode:chardata(), Message::unicode:chardata(),
- Option :: {maximum, integer()}
- | {parent, wxWindow:wxWindow()}
- | {style, integer()}.
+ Option :: {'maximum', integer()}
+ | {'parent', wxWindow:wxWindow()}
+ | {'style', integer()}.
new(Title,Message, Options)
when is_list(Title),is_list(Message),is_list(Options) ->
Title_UC = unicode:characters_to_binary([Title,0]),
@@ -115,7 +115,7 @@ new(Title,Message, Options)
<<(byte_size(Title_UC)):32/?UI,(Title_UC)/binary, 0:(((8- ((4+byte_size(Title_UC)) band 16#7)) band 16#7))/unit:8,(byte_size(Message_UC)):32/?UI,(Message_UC)/binary, 0:(((8- ((4+byte_size(Message_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprogressdialog.html#wxprogressdialogresume">external documentation</a>.
--spec resume(This) -> ok when
+-spec resume(This) -> 'ok' when
This::wxProgressDialog().
resume(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxProgressDialog),
@@ -123,7 +123,7 @@ resume(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprogressdialog.html#wxprogressdialogupdate">external documentation</a>.
--spec update(This) -> ok when
+-spec update(This) -> 'ok' when
This::wxProgressDialog().
update(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxProgressDialog),
@@ -141,7 +141,7 @@ update(This,Value)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxprogressdialog.html#wxprogressdialogupdate">external documentation</a>.
-spec update(This, Value, [Option]) -> boolean() when
This::wxProgressDialog(), Value::integer(),
- Option :: {newmsg, unicode:chardata()}.
+ Option :: {'newmsg', unicode:chardata()}.
update(#wx_ref{type=ThisT,ref=ThisRef},Value, Options)
when is_integer(Value),is_list(Options) ->
?CLASS(ThisT,wxProgressDialog),
@@ -152,7 +152,7 @@ update(#wx_ref{type=ThisT,ref=ThisRef},Value, Options)
<<ThisRef:32/?UI,Value:32/?UI, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxProgressDialog()) -> ok.
+-spec destroy(This::wxProgressDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxProgressDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxQueryNewPaletteEvent.erl b/lib/wx/src/gen/wxQueryNewPaletteEvent.erl
index 2473fe5f61..d32f893212 100644
--- a/lib/wx/src/gen/wxQueryNewPaletteEvent.erl
+++ b/lib/wx/src/gen/wxQueryNewPaletteEvent.erl
@@ -45,7 +45,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxQueryNewPaletteEvent() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxquerynewpaletteevent.html#wxquerynewpaletteeventsetpaletterealized">external documentation</a>.
--spec setPaletteRealized(This, Realized) -> ok when
+-spec setPaletteRealized(This, Realized) -> 'ok' when
This::wxQueryNewPaletteEvent(), Realized::boolean().
setPaletteRealized(#wx_ref{type=ThisT,ref=ThisRef},Realized)
when is_boolean(Realized) ->
diff --git a/lib/wx/src/gen/wxRadioBox.erl b/lib/wx/src/gen/wxRadioBox.erl
index 5ef1deff66..348d75db2a 100644
--- a/lib/wx/src/gen/wxRadioBox.erl
+++ b/lib/wx/src/gen/wxRadioBox.erl
@@ -92,9 +92,9 @@ new(Parent,Id,Title,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobox.html#wxradioboxwxradiobox">external documentation</a>.
-spec new(Parent, Id, Title, Pos, Size, Choices, [Option]) -> wxRadioBox() when
Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()],
- Option :: {majorDim, integer()}
- | {style, integer()}
- | {val, wx:wx_object()}.
+ Option :: {'majorDim', integer()}
+ | {'style', integer()}
+ | {'val', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Title,{PosX,PosY},{SizeW,SizeH},Choices, Options)
when is_integer(Id),is_list(Title),is_integer(PosX),is_integer(PosY),is_integer(SizeW),is_integer(SizeH),is_list(Choices),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -120,9 +120,9 @@ create(This,Parent,Id,Title,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobox.html#wxradioboxcreate">external documentation</a>.
-spec create(This, Parent, Id, Title, Pos, Size, Choices, [Option]) -> boolean() when
This::wxRadioBox(), Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()],
- Option :: {majorDim, integer()}
- | {style, integer()}
- | {val, wx:wx_object()}.
+ Option :: {'majorDim', integer()}
+ | {'style', integer()}
+ | {'val', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Title,{PosX,PosY},{SizeW,SizeH},Choices, Options)
when is_integer(Id),is_list(Title),is_integer(PosX),is_integer(PosY),is_integer(SizeW),is_integer(SizeH),is_list(Choices),is_list(Options) ->
?CLASS(ThisT,wxRadioBox),
@@ -150,13 +150,13 @@ enable(This)
%% <br /> Also:<br />
%% enable(This, [Option]) -> boolean() when<br />
%% This::wxRadioBox(),<br />
-%% Option :: {enable, boolean()}.<br />
+%% Option :: {'enable', boolean()}.<br />
%%
-spec enable(This, N) -> boolean() when
This::wxRadioBox(), N::integer();
(This, [Option]) -> boolean() when
This::wxRadioBox(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enable(This,N)
when is_record(This, wx_ref),is_integer(N) ->
@@ -173,7 +173,7 @@ enable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobox.html#wxradioboxenable">external documentation</a>.
-spec enable(This, N, [Option]) -> boolean() when
This::wxRadioBox(), N::integer(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enable(#wx_ref{type=ThisT,ref=ThisRef},N, Options)
when is_integer(N),is_list(Options) ->
?CLASS(ThisT,wxRadioBox),
@@ -201,7 +201,7 @@ getString(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobox.html#wxradioboxsetselection">external documentation</a>.
--spec setSelection(This, N) -> ok when
+-spec setSelection(This, N) -> 'ok' when
This::wxRadioBox(), N::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},N)
when is_integer(N) ->
@@ -221,13 +221,13 @@ show(This)
%% <br /> Also:<br />
%% show(This, [Option]) -> boolean() when<br />
%% This::wxRadioBox(),<br />
-%% Option :: {show, boolean()}.<br />
+%% Option :: {'show', boolean()}.<br />
%%
-spec show(This, N) -> boolean() when
This::wxRadioBox(), N::integer();
(This, [Option]) -> boolean() when
This::wxRadioBox(),
- Option :: {show, boolean()}.
+ Option :: {'show', boolean()}.
show(This,N)
when is_record(This, wx_ref),is_integer(N) ->
@@ -244,7 +244,7 @@ show(#wx_ref{type=ThisT,ref=ThisRef}, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobox.html#wxradioboxshow">external documentation</a>.
-spec show(This, N, [Option]) -> boolean() when
This::wxRadioBox(), N::integer(),
- Option :: {show, boolean()}.
+ Option :: {'show', boolean()}.
show(#wx_ref{type=ThisT,ref=ThisRef},N, Options)
when is_integer(N),is_list(Options) ->
?CLASS(ThisT,wxRadioBox),
@@ -316,7 +316,7 @@ isItemShown(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobox.html#wxradioboxsetitemhelptext">external documentation</a>.
--spec setItemHelpText(This, N, HelpText) -> ok when
+-spec setItemHelpText(This, N, HelpText) -> 'ok' when
This::wxRadioBox(), N::integer(), HelpText::unicode:chardata().
setItemHelpText(#wx_ref{type=ThisT,ref=ThisRef},N,HelpText)
when is_integer(N),is_list(HelpText) ->
@@ -326,7 +326,7 @@ setItemHelpText(#wx_ref{type=ThisT,ref=ThisRef},N,HelpText)
<<ThisRef:32/?UI,N:32/?UI,(byte_size(HelpText_UC)):32/?UI,(HelpText_UC)/binary, 0:(((8- ((4+byte_size(HelpText_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobox.html#wxradioboxsetitemtooltip">external documentation</a>.
--spec setItemToolTip(This, Item, Text) -> ok when
+-spec setItemToolTip(This, Item, Text) -> 'ok' when
This::wxRadioBox(), Item::integer(), Text::unicode:chardata().
setItemToolTip(#wx_ref{type=ThisT,ref=ThisRef},Item,Text)
when is_integer(Item),is_list(Text) ->
@@ -336,7 +336,7 @@ setItemToolTip(#wx_ref{type=ThisT,ref=ThisRef},Item,Text)
<<ThisRef:32/?UI,Item:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxRadioBox()) -> ok.
+-spec destroy(This::wxRadioBox()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxRadioBox),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxRadioButton.erl b/lib/wx/src/gen/wxRadioButton.erl
index 3b4689a27b..4487724be6 100644
--- a/lib/wx/src/gen/wxRadioButton.erl
+++ b/lib/wx/src/gen/wxRadioButton.erl
@@ -96,10 +96,10 @@ new(Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobutton.html#wxradiobuttonwxradiobutton">external documentation</a>.
-spec new(Parent, Id, Label, [Option]) -> wxRadioButton() when
Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -124,10 +124,10 @@ create(This,Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobutton.html#wxradiobuttoncreate">external documentation</a>.
-spec create(This, Parent, Id, Label, [Option]) -> boolean() when
This::wxRadioButton(), Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ThisT,wxRadioButton),
@@ -151,7 +151,7 @@ getValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxradiobutton.html#wxradiobuttonsetvalue">external documentation</a>.
--spec setValue(This, Val) -> ok when
+-spec setValue(This, Val) -> 'ok' when
This::wxRadioButton(), Val::boolean().
setValue(#wx_ref{type=ThisT,ref=ThisRef},Val)
when is_boolean(Val) ->
@@ -160,7 +160,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},Val)
<<ThisRef:32/?UI,(wxe_util:from_bool(Val)):32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxRadioButton()) -> ok.
+-spec destroy(This::wxRadioButton()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxRadioButton),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxRegion.erl b/lib/wx/src/gen/wxRegion.erl
index 7a21baee92..2e8c1af10e 100644
--- a/lib/wx/src/gen/wxRegion.erl
+++ b/lib/wx/src/gen/wxRegion.erl
@@ -79,7 +79,7 @@ new(X,Y,W,H)
<<X:32/?UI,Y:32/?UI,W:32/?UI,H:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxregion.html#wxregionclear">external documentation</a>.
--spec clear(This) -> ok when
+-spec clear(This) -> 'ok' when
This::wxRegion().
clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxRegion),
@@ -263,7 +263,7 @@ union(This,Bmp,Transp)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxregion.html#wxregionunion">external documentation</a>.
-spec union(This, Bmp, Transp, [Option]) -> boolean() when
This::wxRegion(), Bmp::wxBitmap:wxBitmap(), Transp::wx:wx_colour(),
- Option :: {tolerance, integer()}.
+ Option :: {'tolerance', integer()}.
union(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BmpT,ref=BmpRef},Transp, Options)
when tuple_size(Transp) =:= 3; tuple_size(Transp) =:= 4,is_list(Options) ->
?CLASS(ThisT,wxRegion),
@@ -313,7 +313,7 @@ union(#wx_ref{type=ThisT,ref=ThisRef},X,Y,W,H)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI,W:32/?UI,H:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxRegion()) -> ok.
+-spec destroy(This::wxRegion()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxRegion),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxSashLayoutWindow.erl b/lib/wx/src/gen/wxSashLayoutWindow.erl
index 223c07419d..ae081ae800 100644
--- a/lib/wx/src/gen/wxSashLayoutWindow.erl
+++ b/lib/wx/src/gen/wxSashLayoutWindow.erl
@@ -100,10 +100,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashlayoutwindow.html#wxsashlayoutwindowwxsashlayoutwindow">external documentation</a>.
-spec new(Parent, [Option]) -> wxSashLayoutWindow() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -127,10 +127,10 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashlayoutwindow.html#wxsashlayoutwindowcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxSashLayoutWindow(), Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSashLayoutWindow),
@@ -164,7 +164,7 @@ getOrientation(#wx_ref{type=ThisT,ref=ThisRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashlayoutwindow.html#wxsashlayoutwindowsetalignment">external documentation</a>.
%%<br /> Align = ?wxLAYOUT_NONE | ?wxLAYOUT_TOP | ?wxLAYOUT_LEFT | ?wxLAYOUT_RIGHT | ?wxLAYOUT_BOTTOM
--spec setAlignment(This, Align) -> ok when
+-spec setAlignment(This, Align) -> 'ok' when
This::wxSashLayoutWindow(), Align::wx:wx_enum().
setAlignment(#wx_ref{type=ThisT,ref=ThisRef},Align)
when is_integer(Align) ->
@@ -173,7 +173,7 @@ setAlignment(#wx_ref{type=ThisT,ref=ThisRef},Align)
<<ThisRef:32/?UI,Align:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashlayoutwindow.html#wxsashlayoutwindowsetdefaultsize">external documentation</a>.
--spec setDefaultSize(This, Size) -> ok when
+-spec setDefaultSize(This, Size) -> 'ok' when
This::wxSashLayoutWindow(), Size::{W::integer(), H::integer()}.
setDefaultSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -183,7 +183,7 @@ setDefaultSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashlayoutwindow.html#wxsashlayoutwindowsetorientation">external documentation</a>.
%%<br /> Orient = ?wxLAYOUT_HORIZONTAL | ?wxLAYOUT_VERTICAL
--spec setOrientation(This, Orient) -> ok when
+-spec setOrientation(This, Orient) -> 'ok' when
This::wxSashLayoutWindow(), Orient::wx:wx_enum().
setOrientation(#wx_ref{type=ThisT,ref=ThisRef},Orient)
when is_integer(Orient) ->
@@ -192,7 +192,7 @@ setOrientation(#wx_ref{type=ThisT,ref=ThisRef},Orient)
<<ThisRef:32/?UI,Orient:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSashLayoutWindow()) -> ok.
+-spec destroy(This::wxSashLayoutWindow()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSashLayoutWindow),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxSashWindow.erl b/lib/wx/src/gen/wxSashWindow.erl
index 4a39726ffd..773e0f1ab0 100644
--- a/lib/wx/src/gen/wxSashWindow.erl
+++ b/lib/wx/src/gen/wxSashWindow.erl
@@ -96,10 +96,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashwindow.html#wxsashwindowwxsashwindow">external documentation</a>.
-spec new(Parent, [Option]) -> wxSashWindow() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -155,7 +155,7 @@ getMinimumSizeY(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashwindow.html#wxsashwindowsetmaximumsizex">external documentation</a>.
--spec setMaximumSizeX(This, Max) -> ok when
+-spec setMaximumSizeX(This, Max) -> 'ok' when
This::wxSashWindow(), Max::integer().
setMaximumSizeX(#wx_ref{type=ThisT,ref=ThisRef},Max)
when is_integer(Max) ->
@@ -164,7 +164,7 @@ setMaximumSizeX(#wx_ref{type=ThisT,ref=ThisRef},Max)
<<ThisRef:32/?UI,Max:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashwindow.html#wxsashwindowsetmaximumsizey">external documentation</a>.
--spec setMaximumSizeY(This, Max) -> ok when
+-spec setMaximumSizeY(This, Max) -> 'ok' when
This::wxSashWindow(), Max::integer().
setMaximumSizeY(#wx_ref{type=ThisT,ref=ThisRef},Max)
when is_integer(Max) ->
@@ -173,7 +173,7 @@ setMaximumSizeY(#wx_ref{type=ThisT,ref=ThisRef},Max)
<<ThisRef:32/?UI,Max:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashwindow.html#wxsashwindowsetminimumsizex">external documentation</a>.
--spec setMinimumSizeX(This, Min) -> ok when
+-spec setMinimumSizeX(This, Min) -> 'ok' when
This::wxSashWindow(), Min::integer().
setMinimumSizeX(#wx_ref{type=ThisT,ref=ThisRef},Min)
when is_integer(Min) ->
@@ -182,7 +182,7 @@ setMinimumSizeX(#wx_ref{type=ThisT,ref=ThisRef},Min)
<<ThisRef:32/?UI,Min:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashwindow.html#wxsashwindowsetminimumsizey">external documentation</a>.
--spec setMinimumSizeY(This, Min) -> ok when
+-spec setMinimumSizeY(This, Min) -> 'ok' when
This::wxSashWindow(), Min::integer().
setMinimumSizeY(#wx_ref{type=ThisT,ref=ThisRef},Min)
when is_integer(Min) ->
@@ -192,7 +192,7 @@ setMinimumSizeY(#wx_ref{type=ThisT,ref=ThisRef},Min)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsashwindow.html#wxsashwindowsetsashvisible">external documentation</a>.
%%<br /> Edge = ?wxSASH_TOP | ?wxSASH_RIGHT | ?wxSASH_BOTTOM | ?wxSASH_LEFT | ?wxSASH_NONE
--spec setSashVisible(This, Edge, Sash) -> ok when
+-spec setSashVisible(This, Edge, Sash) -> 'ok' when
This::wxSashWindow(), Edge::wx:wx_enum(), Sash::boolean().
setSashVisible(#wx_ref{type=ThisT,ref=ThisRef},Edge,Sash)
when is_integer(Edge),is_boolean(Sash) ->
@@ -201,7 +201,7 @@ setSashVisible(#wx_ref{type=ThisT,ref=ThisRef},Edge,Sash)
<<ThisRef:32/?UI,Edge:32/?UI,(wxe_util:from_bool(Sash)):32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSashWindow()) -> ok.
+-spec destroy(This::wxSashWindow()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSashWindow),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxScreenDC.erl b/lib/wx/src/gen/wxScreenDC.erl
index 24028a000f..a36c25025c 100644
--- a/lib/wx/src/gen/wxScreenDC.erl
+++ b/lib/wx/src/gen/wxScreenDC.erl
@@ -68,7 +68,7 @@ new() ->
<<>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxScreenDC()) -> ok.
+-spec destroy(This::wxScreenDC()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxScreenDC),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxScrollBar.erl b/lib/wx/src/gen/wxScrollBar.erl
index ccddf84835..7f70d9d97b 100644
--- a/lib/wx/src/gen/wxScrollBar.erl
+++ b/lib/wx/src/gen/wxScrollBar.erl
@@ -97,10 +97,10 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrollbar.html#wxscrollbarwxscrollbar">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxScrollBar() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -124,10 +124,10 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrollbar.html#wxscrollbarcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxScrollBar(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxScrollBar),
@@ -174,7 +174,7 @@ getThumbSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrollbar.html#wxscrollbarsetthumbposition">external documentation</a>.
--spec setThumbPosition(This, ViewStart) -> ok when
+-spec setThumbPosition(This, ViewStart) -> 'ok' when
This::wxScrollBar(), ViewStart::integer().
setThumbPosition(#wx_ref{type=ThisT,ref=ThisRef},ViewStart)
when is_integer(ViewStart) ->
@@ -183,7 +183,7 @@ setThumbPosition(#wx_ref{type=ThisT,ref=ThisRef},ViewStart)
<<ThisRef:32/?UI,ViewStart:32/?UI>>).
%% @equiv setScrollbar(This,Position,ThumbSize,Range,PageSize, [])
--spec setScrollbar(This, Position, ThumbSize, Range, PageSize) -> ok when
+-spec setScrollbar(This, Position, ThumbSize, Range, PageSize) -> 'ok' when
This::wxScrollBar(), Position::integer(), ThumbSize::integer(), Range::integer(), PageSize::integer().
setScrollbar(This,Position,ThumbSize,Range,PageSize)
@@ -191,9 +191,9 @@ setScrollbar(This,Position,ThumbSize,Range,PageSize)
setScrollbar(This,Position,ThumbSize,Range,PageSize, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrollbar.html#wxscrollbarsetscrollbar">external documentation</a>.
--spec setScrollbar(This, Position, ThumbSize, Range, PageSize, [Option]) -> ok when
+-spec setScrollbar(This, Position, ThumbSize, Range, PageSize, [Option]) -> 'ok' when
This::wxScrollBar(), Position::integer(), ThumbSize::integer(), Range::integer(), PageSize::integer(),
- Option :: {refresh, boolean()}.
+ Option :: {'refresh', boolean()}.
setScrollbar(#wx_ref{type=ThisT,ref=ThisRef},Position,ThumbSize,Range,PageSize, Options)
when is_integer(Position),is_integer(ThumbSize),is_integer(Range),is_integer(PageSize),is_list(Options) ->
?CLASS(ThisT,wxScrollBar),
@@ -204,7 +204,7 @@ setScrollbar(#wx_ref{type=ThisT,ref=ThisRef},Position,ThumbSize,Range,PageSize,
<<ThisRef:32/?UI,Position:32/?UI,ThumbSize:32/?UI,Range:32/?UI,PageSize:32/?UI, 0:32,BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxScrollBar()) -> ok.
+-spec destroy(This::wxScrollBar()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxScrollBar),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxScrolledWindow.erl b/lib/wx/src/gen/wxScrolledWindow.erl
index 7c807980b4..70bc5adbd9 100644
--- a/lib/wx/src/gen/wxScrolledWindow.erl
+++ b/lib/wx/src/gen/wxScrolledWindow.erl
@@ -99,10 +99,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrolledwindow.html#wxscrolledwindowwxscrolledwindow">external documentation</a>.
-spec new(Parent, [Option]) -> wxScrolledWindow() when
Parent::wxWindow:wxWindow(),
- Option :: {winid, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'winid', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -152,7 +152,7 @@ calcUnscrolledPosition(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrolledwindow.html#wxscrolledwindowenablescrolling">external documentation</a>.
--spec enableScrolling(This, X_scrolling, Y_scrolling) -> ok when
+-spec enableScrolling(This, X_scrolling, Y_scrolling) -> 'ok' when
This::wxScrolledWindow(), X_scrolling::boolean(), Y_scrolling::boolean().
enableScrolling(#wx_ref{type=ThisT,ref=ThisRef},X_scrolling,Y_scrolling)
when is_boolean(X_scrolling),is_boolean(Y_scrolling) ->
@@ -177,7 +177,7 @@ getViewStart(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrolledwindow.html#wxscrolledwindowdopreparedc">external documentation</a>.
--spec doPrepareDC(This, Dc) -> ok when
+-spec doPrepareDC(This, Dc) -> 'ok' when
This::wxScrolledWindow(), Dc::wxDC:wxDC().
doPrepareDC(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DcT,ref=DcRef}) ->
?CLASS(ThisT,wxScrolledWindow),
@@ -186,7 +186,7 @@ doPrepareDC(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DcT,ref=DcRef}) ->
<<ThisRef:32/?UI,DcRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrolledwindow.html#wxscrolledwindowpreparedc">external documentation</a>.
--spec prepareDC(This, Dc) -> ok when
+-spec prepareDC(This, Dc) -> 'ok' when
This::wxScrolledWindow(), Dc::wxDC:wxDC().
prepareDC(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DcT,ref=DcRef}) ->
?CLASS(ThisT,wxScrolledWindow),
@@ -195,7 +195,7 @@ prepareDC(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DcT,ref=DcRef}) ->
<<ThisRef:32/?UI,DcRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrolledwindow.html#wxscrolledwindowscroll">external documentation</a>.
--spec scroll(This, X, Y) -> ok when
+-spec scroll(This, X, Y) -> 'ok' when
This::wxScrolledWindow(), X::integer(), Y::integer().
scroll(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -204,7 +204,7 @@ scroll(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @equiv setScrollbars(This,PixelsPerUnitX,PixelsPerUnitY,NoUnitsX,NoUnitsY, [])
--spec setScrollbars(This, PixelsPerUnitX, PixelsPerUnitY, NoUnitsX, NoUnitsY) -> ok when
+-spec setScrollbars(This, PixelsPerUnitX, PixelsPerUnitY, NoUnitsX, NoUnitsY) -> 'ok' when
This::wxScrolledWindow(), PixelsPerUnitX::integer(), PixelsPerUnitY::integer(), NoUnitsX::integer(), NoUnitsY::integer().
setScrollbars(This,PixelsPerUnitX,PixelsPerUnitY,NoUnitsX,NoUnitsY)
@@ -212,11 +212,11 @@ setScrollbars(This,PixelsPerUnitX,PixelsPerUnitY,NoUnitsX,NoUnitsY)
setScrollbars(This,PixelsPerUnitX,PixelsPerUnitY,NoUnitsX,NoUnitsY, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrolledwindow.html#wxscrolledwindowsetscrollbars">external documentation</a>.
--spec setScrollbars(This, PixelsPerUnitX, PixelsPerUnitY, NoUnitsX, NoUnitsY, [Option]) -> ok when
+-spec setScrollbars(This, PixelsPerUnitX, PixelsPerUnitY, NoUnitsX, NoUnitsY, [Option]) -> 'ok' when
This::wxScrolledWindow(), PixelsPerUnitX::integer(), PixelsPerUnitY::integer(), NoUnitsX::integer(), NoUnitsY::integer(),
- Option :: {xPos, integer()}
- | {yPos, integer()}
- | {noRefresh, boolean()}.
+ Option :: {'xPos', integer()}
+ | {'yPos', integer()}
+ | {'noRefresh', boolean()}.
setScrollbars(#wx_ref{type=ThisT,ref=ThisRef},PixelsPerUnitX,PixelsPerUnitY,NoUnitsX,NoUnitsY, Options)
when is_integer(PixelsPerUnitX),is_integer(PixelsPerUnitY),is_integer(NoUnitsX),is_integer(NoUnitsY),is_list(Options) ->
?CLASS(ThisT,wxScrolledWindow),
@@ -229,7 +229,7 @@ setScrollbars(#wx_ref{type=ThisT,ref=ThisRef},PixelsPerUnitX,PixelsPerUnitY,NoUn
<<ThisRef:32/?UI,PixelsPerUnitX:32/?UI,PixelsPerUnitY:32/?UI,NoUnitsX:32/?UI,NoUnitsY:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrolledwindow.html#wxscrolledwindowsetscrollrate">external documentation</a>.
--spec setScrollRate(This, Xstep, Ystep) -> ok when
+-spec setScrollRate(This, Xstep, Ystep) -> 'ok' when
This::wxScrolledWindow(), Xstep::integer(), Ystep::integer().
setScrollRate(#wx_ref{type=ThisT,ref=ThisRef},Xstep,Ystep)
when is_integer(Xstep),is_integer(Ystep) ->
@@ -238,7 +238,7 @@ setScrollRate(#wx_ref{type=ThisT,ref=ThisRef},Xstep,Ystep)
<<ThisRef:32/?UI,Xstep:32/?UI,Ystep:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxscrolledwindow.html#wxscrolledwindowsettargetwindow">external documentation</a>.
--spec setTargetWindow(This, Target) -> ok when
+-spec setTargetWindow(This, Target) -> 'ok' when
This::wxScrolledWindow(), Target::wxWindow:wxWindow().
setTargetWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=TargetT,ref=TargetRef}) ->
?CLASS(ThisT,wxScrolledWindow),
@@ -247,7 +247,7 @@ setTargetWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=TargetT,ref=TargetR
<<ThisRef:32/?UI,TargetRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxScrolledWindow()) -> ok.
+-spec destroy(This::wxScrolledWindow()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxScrolledWindow),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxSetCursorEvent.erl b/lib/wx/src/gen/wxSetCursorEvent.erl
index b7473d4d17..a97cbfb5ae 100644
--- a/lib/wx/src/gen/wxSetCursorEvent.erl
+++ b/lib/wx/src/gen/wxSetCursorEvent.erl
@@ -77,7 +77,7 @@ hasCursor(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsetcursorevent.html#wxsetcursoreventsetcursor">external documentation</a>.
--spec setCursor(This, Cursor) -> ok when
+-spec setCursor(This, Cursor) -> 'ok' when
This::wxSetCursorEvent(), Cursor::wxCursor:wxCursor().
setCursor(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=CursorT,ref=CursorRef}) ->
?CLASS(ThisT,wxSetCursorEvent),
diff --git a/lib/wx/src/gen/wxShowEvent.erl b/lib/wx/src/gen/wxShowEvent.erl
index 962a880f61..c4f37afe7b 100644
--- a/lib/wx/src/gen/wxShowEvent.erl
+++ b/lib/wx/src/gen/wxShowEvent.erl
@@ -45,7 +45,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxShowEvent() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxshowevent.html#wxshoweventsetshow">external documentation</a>.
--spec setShow(This, Show) -> ok when
+-spec setShow(This, Show) -> 'ok' when
This::wxShowEvent(), Show::boolean().
setShow(#wx_ref{type=ThisT,ref=ThisRef},Show)
when is_boolean(Show) ->
diff --git a/lib/wx/src/gen/wxSingleChoiceDialog.erl b/lib/wx/src/gen/wxSingleChoiceDialog.erl
index 641cb2836f..baff296d11 100644
--- a/lib/wx/src/gen/wxSingleChoiceDialog.erl
+++ b/lib/wx/src/gen/wxSingleChoiceDialog.erl
@@ -105,8 +105,8 @@ new(Parent,Message,Caption,Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsinglechoicedialog.html#wxsinglechoicedialogwxsinglechoicedialog">external documentation</a>.
-spec new(Parent, Message, Caption, Choices, [Option]) -> wxSingleChoiceDialog() when
Parent::wxWindow:wxWindow(), Message::unicode:chardata(), Caption::unicode:chardata(), Choices::[unicode:chardata()],
- Option :: {style, integer()}
- | {pos, {X::integer(), Y::integer()}}.
+ Option :: {'style', integer()}
+ | {'pos', {X::integer(), Y::integer()}}.
new(#wx_ref{type=ParentT,ref=ParentRef},Message,Caption,Choices, Options)
when is_list(Message),is_list(Caption),is_list(Choices),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -138,7 +138,7 @@ getStringSelection(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsinglechoicedialog.html#wxsinglechoicedialogsetselection">external documentation</a>.
--spec setSelection(This, Sel) -> ok when
+-spec setSelection(This, Sel) -> 'ok' when
This::wxSingleChoiceDialog(), Sel::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},Sel)
when is_integer(Sel) ->
@@ -147,7 +147,7 @@ setSelection(#wx_ref{type=ThisT,ref=ThisRef},Sel)
<<ThisRef:32/?UI,Sel:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSingleChoiceDialog()) -> ok.
+-spec destroy(This::wxSingleChoiceDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSingleChoiceDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxSizer.erl b/lib/wx/src/gen/wxSizer.erl
index 723625f85e..ab357c0846 100644
--- a/lib/wx/src/gen/wxSizer.erl
+++ b/lib/wx/src/gen/wxSizer.erl
@@ -54,10 +54,10 @@ add(This,Window)
%% <br /> Also:<br />
%% add(This, Window, [Option]) -> wxSizerItem:wxSizerItem() when<br />
%% This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(),<br />
-%% Option :: {proportion, integer()}<br />
-%% | {flag, integer()}<br />
-%% | {border, integer()}<br />
-%% | {userData, wx:wx_object()};<br />
+%% Option :: {'proportion', integer()}<br />
+%% | {'flag', integer()}<br />
+%% | {'border', integer()}<br />
+%% | {'userData', wx:wx_object()};<br />
%% (This, Window, Flags) -> wxSizerItem:wxSizerItem() when<br />
%% This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(), Flags::wxSizerFlags:wxSizerFlags().<br />
%%
@@ -65,10 +65,10 @@ add(This,Window)
This::wxSizer(), Width::integer(), Height::integer();
(This, Window, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(),
- Option :: {proportion, integer()}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()};
+ Option :: {'proportion', integer()}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()};
(This, Window, Flags) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(), Flags::wxSizerFlags:wxSizerFlags().
@@ -108,10 +108,10 @@ add(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef},#wx_ref{
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizeradd">external documentation</a>.
-spec add(This, Width, Height, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Width::integer(), Height::integer(),
- Option :: {proportion, integer()}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()}.
+ Option :: {'proportion', integer()}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()}.
add(#wx_ref{type=ThisT,ref=ThisRef},Width,Height, Options)
when is_integer(Width),is_integer(Height),is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -144,7 +144,7 @@ addStretchSpacer(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizeraddstretchspacer">external documentation</a>.
-spec addStretchSpacer(This, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(),
- Option :: {prop, integer()}.
+ Option :: {'prop', integer()}.
addStretchSpacer(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -163,7 +163,7 @@ calcMin(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv clear(This, [])
--spec clear(This) -> ok when
+-spec clear(This) -> 'ok' when
This::wxSizer().
clear(This)
@@ -171,9 +171,9 @@ clear(This)
clear(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerclear">external documentation</a>.
--spec clear(This, [Option]) -> ok when
+-spec clear(This, [Option]) -> 'ok' when
This::wxSizer(),
- Option :: {delete_windows, boolean()}.
+ Option :: {'delete_windows', boolean()}.
clear(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -218,7 +218,7 @@ fit(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}) ->
<<ThisRef:32/?UI,WindowRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerfitinside">external documentation</a>.
--spec fitInside(This, Window) -> ok when
+-spec fitInside(This, Window) -> 'ok' when
This::wxSizer(), Window::wxWindow:wxWindow().
fitInside(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}) ->
?CLASS(ThisT,wxSizer),
@@ -256,7 +256,7 @@ getItem(#wx_ref{type=ThisT,ref=ThisRef},Index)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizergetitem">external documentation</a>.
-spec getItem(This, Window, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(),
- Option :: {recursive, boolean()}.
+ Option :: {'recursive', boolean()}.
getItem(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -318,7 +318,7 @@ hide(#wx_ref{type=ThisT,ref=ThisRef},Index)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerhide">external documentation</a>.
-spec hide(This, Window, [Option]) -> boolean() when
This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(),
- Option :: {recursive, boolean()}.
+ Option :: {'recursive', boolean()}.
hide(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -348,10 +348,10 @@ insert(#wx_ref{type=ThisT,ref=ThisRef},Index,#wx_ref{type=ItemT,ref=ItemRef})
%% <br /> Also:<br />
%% insert(This, Index, Window, [Option]) -> wxSizerItem:wxSizerItem() when<br />
%% This::wxSizer(), Index::integer(), Window::wxWindow:wxWindow() | wxSizer(),<br />
-%% Option :: {proportion, integer()}<br />
-%% | {flag, integer()}<br />
-%% | {border, integer()}<br />
-%% | {userData, wx:wx_object()};<br />
+%% Option :: {'proportion', integer()}<br />
+%% | {'flag', integer()}<br />
+%% | {'border', integer()}<br />
+%% | {'userData', wx:wx_object()};<br />
%% (This, Index, Window, Flags) -> wxSizerItem:wxSizerItem() when<br />
%% This::wxSizer(), Index::integer(), Window::wxWindow:wxWindow() | wxSizer(), Flags::wxSizerFlags:wxSizerFlags().<br />
%%
@@ -359,10 +359,10 @@ insert(#wx_ref{type=ThisT,ref=ThisRef},Index,#wx_ref{type=ItemT,ref=ItemRef})
This::wxSizer(), Index::integer(), Width::integer(), Height::integer();
(This, Index, Window, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Index::integer(), Window::wxWindow:wxWindow() | wxSizer(),
- Option :: {proportion, integer()}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()};
+ Option :: {'proportion', integer()}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()};
(This, Index, Window, Flags) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Index::integer(), Window::wxWindow:wxWindow() | wxSizer(), Flags::wxSizerFlags:wxSizerFlags().
@@ -403,10 +403,10 @@ insert(#wx_ref{type=ThisT,ref=ThisRef},Index,#wx_ref{type=WindowT,ref=WindowRef}
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerinsert">external documentation</a>.
-spec insert(This, Index, Width, Height, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Index::integer(), Width::integer(), Height::integer(),
- Option :: {proportion, integer()}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()}.
+ Option :: {'proportion', integer()}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()}.
insert(#wx_ref{type=ThisT,ref=ThisRef},Index,Width,Height, Options)
when is_integer(Index),is_integer(Width),is_integer(Height),is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -439,7 +439,7 @@ insertStretchSpacer(This,Index)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerinsertstretchspacer">external documentation</a>.
-spec insertStretchSpacer(This, Index, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Index::integer(),
- Option :: {prop, integer()}.
+ Option :: {'prop', integer()}.
insertStretchSpacer(#wx_ref{type=ThisT,ref=ThisRef},Index, Options)
when is_integer(Index),is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -475,7 +475,7 @@ isShown(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}) ->
<<ThisRef:32/?UI,WindowRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerlayout">external documentation</a>.
--spec layout(This) -> ok when
+-spec layout(This) -> 'ok' when
This::wxSizer().
layout(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxSizer),
@@ -495,10 +495,10 @@ prepend(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ItemT,ref=ItemRef}) ->
%% <br /> Also:<br />
%% prepend(This, Window, [Option]) -> wxSizerItem:wxSizerItem() when<br />
%% This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(),<br />
-%% Option :: {proportion, integer()}<br />
-%% | {flag, integer()}<br />
-%% | {border, integer()}<br />
-%% | {userData, wx:wx_object()};<br />
+%% Option :: {'proportion', integer()}<br />
+%% | {'flag', integer()}<br />
+%% | {'border', integer()}<br />
+%% | {'userData', wx:wx_object()};<br />
%% (This, Window, Flags) -> wxSizerItem:wxSizerItem() when<br />
%% This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(), Flags::wxSizerFlags:wxSizerFlags().<br />
%%
@@ -506,10 +506,10 @@ prepend(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ItemT,ref=ItemRef}) ->
This::wxSizer(), Width::integer(), Height::integer();
(This, Window, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(),
- Option :: {proportion, integer()}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()};
+ Option :: {'proportion', integer()}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()};
(This, Window, Flags) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(), Flags::wxSizerFlags:wxSizerFlags().
@@ -549,10 +549,10 @@ prepend(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef},#wx_
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerprepend">external documentation</a>.
-spec prepend(This, Width, Height, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(), Width::integer(), Height::integer(),
- Option :: {proportion, integer()}
- | {flag, integer()}
- | {border, integer()}
- | {userData, wx:wx_object()}.
+ Option :: {'proportion', integer()}
+ | {'flag', integer()}
+ | {'border', integer()}
+ | {'userData', wx:wx_object()}.
prepend(#wx_ref{type=ThisT,ref=ThisRef},Width,Height, Options)
when is_integer(Width),is_integer(Height),is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -585,7 +585,7 @@ prependStretchSpacer(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerprependstretchspacer">external documentation</a>.
-spec prependStretchSpacer(This, [Option]) -> wxSizerItem:wxSizerItem() when
This::wxSizer(),
- Option :: {prop, integer()}.
+ Option :: {'prop', integer()}.
prependStretchSpacer(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -596,7 +596,7 @@ prependStretchSpacer(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerrecalcsizes">external documentation</a>.
--spec recalcSizes(This) -> ok when
+-spec recalcSizes(This) -> 'ok' when
This::wxSizer().
recalcSizes(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxSizer),
@@ -646,7 +646,7 @@ replace(#wx_ref{type=ThisT,ref=ThisRef},Index,#wx_ref{type=NewitemT,ref=NewitemR
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizerreplace">external documentation</a>.
-spec replace(This, Oldwin, Newwin, [Option]) -> boolean() when
This::wxSizer(), Oldwin::wxWindow:wxWindow() | wxSizer(), Newwin::wxWindow:wxWindow() | wxSizer(),
- Option :: {recursive, boolean()}.
+ Option :: {'recursive', boolean()}.
replace(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=OldwinT,ref=OldwinRef},#wx_ref{type=NewwinT,ref=NewwinRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSizer),
@@ -665,7 +665,7 @@ replace(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=OldwinT,ref=OldwinRef},#wx_
<<ThisRef:32/?UI,OldwinRef:32/?UI,NewwinRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizersetdimension">external documentation</a>.
--spec setDimension(This, X, Y, Width, Height) -> ok when
+-spec setDimension(This, X, Y, Width, Height) -> 'ok' when
This::wxSizer(), X::integer(), Y::integer(), Width::integer(), Height::integer().
setDimension(#wx_ref{type=ThisT,ref=ThisRef},X,Y,Width,Height)
when is_integer(X),is_integer(Y),is_integer(Width),is_integer(Height) ->
@@ -674,7 +674,7 @@ setDimension(#wx_ref{type=ThisT,ref=ThisRef},X,Y,Width,Height)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI,Width:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizersetminsize">external documentation</a>.
--spec setMinSize(This, Size) -> ok when
+-spec setMinSize(This, Size) -> 'ok' when
This::wxSizer(), Size::{W::integer(), H::integer()}.
setMinSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -683,7 +683,7 @@ setMinSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizersetminsize">external documentation</a>.
--spec setMinSize(This, Width, Height) -> ok when
+-spec setMinSize(This, Width, Height) -> 'ok' when
This::wxSizer(), Width::integer(), Height::integer().
setMinSize(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
when is_integer(Width),is_integer(Height) ->
@@ -744,7 +744,7 @@ setItemMinSize(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRe
<<ThisRef:32/?UI,WindowRef:32/?UI,Width:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizersetsizehints">external documentation</a>.
--spec setSizeHints(This, Window) -> ok when
+-spec setSizeHints(This, Window) -> 'ok' when
This::wxSizer(), Window::wxWindow:wxWindow().
setSizeHints(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}) ->
?CLASS(ThisT,wxSizer),
@@ -753,7 +753,7 @@ setSizeHints(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}
<<ThisRef:32/?UI,WindowRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizer.html#wxsizersetvirtualsizehints">external documentation</a>.
--spec setVirtualSizeHints(This, Window) -> ok when
+-spec setVirtualSizeHints(This, Window) -> 'ok' when
This::wxSizer(), Window::wxWindow:wxWindow().
setVirtualSizeHints(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}) ->
?CLASS(ThisT,wxSizer),
@@ -765,14 +765,14 @@ setVirtualSizeHints(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=Win
%% <br /> Also:<br />
%% show(This, Window) -> boolean() when<br />
%% This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer();<br />
-%% (This, Show) -> ok when<br />
+%% (This, Show) -> 'ok' when<br />
%% This::wxSizer(), Show::boolean().<br />
%%
-spec show(This, Index) -> boolean() when
This::wxSizer(), Index::integer();
(This, Window) -> boolean() when
This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer();
- (This, Show) -> ok when
+ (This, Show) -> 'ok' when
This::wxSizer(), Show::boolean().
show(This,Index)
@@ -792,16 +792,16 @@ show(#wx_ref{type=ThisT,ref=ThisRef},Show)
%% <br /> Also:<br />
%% show(This, Window, [Option]) -> boolean() when<br />
%% This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(),<br />
-%% Option :: {show, boolean()}<br />
-%% | {recursive, boolean()}.<br />
+%% Option :: {'show', boolean()}<br />
+%% | {'recursive', boolean()}.<br />
%%
-spec show(This, Index, [Option]) -> boolean() when
This::wxSizer(), Index::integer(),
- Option :: {show, boolean()};
+ Option :: {'show', boolean()};
(This, Window, [Option]) -> boolean() when
This::wxSizer(), Window::wxWindow:wxWindow() | wxSizer(),
- Option :: {show, boolean()}
- | {recursive, boolean()}.
+ Option :: {'show', boolean()}
+ | {'recursive', boolean()}.
show(#wx_ref{type=ThisT,ref=ThisRef},Index, Options)
when is_integer(Index),is_list(Options) ->
?CLASS(ThisT,wxSizer),
diff --git a/lib/wx/src/gen/wxSizerFlags.erl b/lib/wx/src/gen/wxSizerFlags.erl
index 08fbaca3af..45573446e5 100644
--- a/lib/wx/src/gen/wxSizerFlags.erl
+++ b/lib/wx/src/gen/wxSizerFlags.erl
@@ -44,7 +44,7 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizerflags.html#wxsizerflagswxsizerflags">external documentation</a>.
-spec new([Option]) -> wxSizerFlags() when
- Option :: {proportion, integer()}.
+ Option :: {'proportion', integer()}.
new(Options)
when is_list(Options) ->
MOpts = fun({proportion, Proportion}, Acc) -> [<<1:32/?UI,Proportion:32/?UI>>|Acc];
@@ -73,7 +73,7 @@ border(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizerflags.html#wxsizerflagsborder">external documentation</a>.
-spec border(This, [Option]) -> wxSizerFlags() when
This::wxSizerFlags(),
- Option :: {direction, integer()}.
+ Option :: {'direction', integer()}.
border(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSizerFlags),
@@ -142,7 +142,7 @@ right(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSizerFlags()) -> ok.
+-spec destroy(This::wxSizerFlags()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSizerFlags),
wxe_util:destroy(?wxSizerFlags_destroy,Obj),
diff --git a/lib/wx/src/gen/wxSizerItem.erl b/lib/wx/src/gen/wxSizerItem.erl
index 9eebe15cd0..ec21ee85b6 100644
--- a/lib/wx/src/gen/wxSizerItem.erl
+++ b/lib/wx/src/gen/wxSizerItem.erl
@@ -105,7 +105,7 @@ calcMin(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemdeletewindows">external documentation</a>.
--spec deleteWindows(This) -> ok when
+-spec deleteWindows(This) -> 'ok' when
This::wxSizerItem().
deleteWindows(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxSizerItem),
@@ -113,7 +113,7 @@ deleteWindows(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemdetachsizer">external documentation</a>.
--spec detachSizer(This) -> ok when
+-spec detachSizer(This) -> 'ok' when
This::wxSizerItem().
detachSizer(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxSizerItem),
@@ -249,7 +249,7 @@ isWindow(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetborder">external documentation</a>.
--spec setBorder(This, Border) -> ok when
+-spec setBorder(This, Border) -> 'ok' when
This::wxSizerItem(), Border::integer().
setBorder(#wx_ref{type=ThisT,ref=ThisRef},Border)
when is_integer(Border) ->
@@ -258,7 +258,7 @@ setBorder(#wx_ref{type=ThisT,ref=ThisRef},Border)
<<ThisRef:32/?UI,Border:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetdimension">external documentation</a>.
--spec setDimension(This, Pos, Size) -> ok when
+-spec setDimension(This, Pos, Size) -> 'ok' when
This::wxSizerItem(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}.
setDimension(#wx_ref{type=ThisT,ref=ThisRef},{PosX,PosY},{SizeW,SizeH})
when is_integer(PosX),is_integer(PosY),is_integer(SizeW),is_integer(SizeH) ->
@@ -267,7 +267,7 @@ setDimension(#wx_ref{type=ThisT,ref=ThisRef},{PosX,PosY},{SizeW,SizeH})
<<ThisRef:32/?UI,PosX:32/?UI,PosY:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetflag">external documentation</a>.
--spec setFlag(This, Flag) -> ok when
+-spec setFlag(This, Flag) -> 'ok' when
This::wxSizerItem(), Flag::integer().
setFlag(#wx_ref{type=ThisT,ref=ThisRef},Flag)
when is_integer(Flag) ->
@@ -276,7 +276,7 @@ setFlag(#wx_ref{type=ThisT,ref=ThisRef},Flag)
<<ThisRef:32/?UI,Flag:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetinitsize">external documentation</a>.
--spec setInitSize(This, X, Y) -> ok when
+-spec setInitSize(This, X, Y) -> 'ok' when
This::wxSizerItem(), X::integer(), Y::integer().
setInitSize(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -285,7 +285,7 @@ setInitSize(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetminsize">external documentation</a>.
--spec setMinSize(This, Size) -> ok when
+-spec setMinSize(This, Size) -> 'ok' when
This::wxSizerItem(), Size::{W::integer(), H::integer()}.
setMinSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -294,7 +294,7 @@ setMinSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetminsize">external documentation</a>.
--spec setMinSize(This, X, Y) -> ok when
+-spec setMinSize(This, X, Y) -> 'ok' when
This::wxSizerItem(), X::integer(), Y::integer().
setMinSize(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -303,7 +303,7 @@ setMinSize(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetproportion">external documentation</a>.
--spec setProportion(This, Proportion) -> ok when
+-spec setProportion(This, Proportion) -> 'ok' when
This::wxSizerItem(), Proportion::integer().
setProportion(#wx_ref{type=ThisT,ref=ThisRef},Proportion)
when is_integer(Proportion) ->
@@ -313,12 +313,12 @@ setProportion(#wx_ref{type=ThisT,ref=ThisRef},Proportion)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetratio">external documentation</a>.
%% <br /> Also:<br />
-%% setRatio(This, Size) -> ok when<br />
+%% setRatio(This, Size) -> 'ok' when<br />
%% This::wxSizerItem(), Size::{W::integer(), H::integer()}.<br />
%%
--spec setRatio(This, Ratio) -> ok when
+-spec setRatio(This, Ratio) -> 'ok' when
This::wxSizerItem(), Ratio::number();
- (This, Size) -> ok when
+ (This, Size) -> 'ok' when
This::wxSizerItem(), Size::{W::integer(), H::integer()}.
setRatio(#wx_ref{type=ThisT,ref=ThisRef},Ratio)
when is_number(Ratio) ->
@@ -332,7 +332,7 @@ setRatio(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetratio">external documentation</a>.
--spec setRatio(This, Width, Height) -> ok when
+-spec setRatio(This, Width, Height) -> 'ok' when
This::wxSizerItem(), Width::integer(), Height::integer().
setRatio(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
when is_integer(Width),is_integer(Height) ->
@@ -341,7 +341,7 @@ setRatio(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
<<ThisRef:32/?UI,Width:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetsizer">external documentation</a>.
--spec setSizer(This, Sizer) -> ok when
+-spec setSizer(This, Sizer) -> 'ok' when
This::wxSizerItem(), Sizer::wxSizer:wxSizer().
setSizer(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SizerT,ref=SizerRef}) ->
?CLASS(ThisT,wxSizerItem),
@@ -350,7 +350,7 @@ setSizer(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SizerT,ref=SizerRef}) ->
<<ThisRef:32/?UI,SizerRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetspacer">external documentation</a>.
--spec setSpacer(This, Size) -> ok when
+-spec setSpacer(This, Size) -> 'ok' when
This::wxSizerItem(), Size::{W::integer(), H::integer()}.
setSpacer(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -359,7 +359,7 @@ setSpacer(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetspacer">external documentation</a>.
--spec setSpacer(This, Width, Height) -> ok when
+-spec setSpacer(This, Width, Height) -> 'ok' when
This::wxSizerItem(), Width::integer(), Height::integer().
setSpacer(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
when is_integer(Width),is_integer(Height) ->
@@ -368,7 +368,7 @@ setSpacer(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
<<ThisRef:32/?UI,Width:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemsetwindow">external documentation</a>.
--spec setWindow(This, Window) -> ok when
+-spec setWindow(This, Window) -> 'ok' when
This::wxSizerItem(), Window::wxWindow:wxWindow().
setWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}) ->
?CLASS(ThisT,wxSizerItem),
@@ -377,7 +377,7 @@ setWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}) -
<<ThisRef:32/?UI,WindowRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsizeritem.html#wxsizeritemshow">external documentation</a>.
--spec show(This, Show) -> ok when
+-spec show(This, Show) -> 'ok' when
This::wxSizerItem(), Show::boolean().
show(#wx_ref{type=ThisT,ref=ThisRef},Show)
when is_boolean(Show) ->
@@ -386,7 +386,7 @@ show(#wx_ref{type=ThisT,ref=ThisRef},Show)
<<ThisRef:32/?UI,(wxe_util:from_bool(Show)):32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSizerItem()) -> ok.
+-spec destroy(This::wxSizerItem()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSizerItem),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxSlider.erl b/lib/wx/src/gen/wxSlider.erl
index 02103aed01..a215b3c1d5 100644
--- a/lib/wx/src/gen/wxSlider.erl
+++ b/lib/wx/src/gen/wxSlider.erl
@@ -98,10 +98,10 @@ new(Parent,Id,Value,MinValue,MaxValue)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxslider.html#wxsliderwxslider">external documentation</a>.
-spec new(Parent, Id, Value, MinValue, MaxValue, [Option]) -> wxSlider() when
Parent::wxWindow:wxWindow(), Id::integer(), Value::integer(), MinValue::integer(), MaxValue::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Value,MinValue,MaxValue, Options)
when is_integer(Id),is_integer(Value),is_integer(MinValue),is_integer(MaxValue),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -125,10 +125,10 @@ create(This,Parent,Id,Value,MinValue,MaxValue)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxslider.html#wxslidercreate">external documentation</a>.
-spec create(This, Parent, Id, Value, MinValue, MaxValue, [Option]) -> boolean() when
This::wxSlider(), Parent::wxWindow:wxWindow(), Id::integer(), Value::integer(), MinValue::integer(), MaxValue::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Value,MinValue,MaxValue, Options)
when is_integer(Id),is_integer(Value),is_integer(MinValue),is_integer(MaxValue),is_list(Options) ->
?CLASS(ThisT,wxSlider),
@@ -191,7 +191,7 @@ getValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxslider.html#wxslidersetlinesize">external documentation</a>.
--spec setLineSize(This, LineSize) -> ok when
+-spec setLineSize(This, LineSize) -> 'ok' when
This::wxSlider(), LineSize::integer().
setLineSize(#wx_ref{type=ThisT,ref=ThisRef},LineSize)
when is_integer(LineSize) ->
@@ -200,7 +200,7 @@ setLineSize(#wx_ref{type=ThisT,ref=ThisRef},LineSize)
<<ThisRef:32/?UI,LineSize:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxslider.html#wxslidersetpagesize">external documentation</a>.
--spec setPageSize(This, PageSize) -> ok when
+-spec setPageSize(This, PageSize) -> 'ok' when
This::wxSlider(), PageSize::integer().
setPageSize(#wx_ref{type=ThisT,ref=ThisRef},PageSize)
when is_integer(PageSize) ->
@@ -209,7 +209,7 @@ setPageSize(#wx_ref{type=ThisT,ref=ThisRef},PageSize)
<<ThisRef:32/?UI,PageSize:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxslider.html#wxslidersetrange">external documentation</a>.
--spec setRange(This, MinValue, MaxValue) -> ok when
+-spec setRange(This, MinValue, MaxValue) -> 'ok' when
This::wxSlider(), MinValue::integer(), MaxValue::integer().
setRange(#wx_ref{type=ThisT,ref=ThisRef},MinValue,MaxValue)
when is_integer(MinValue),is_integer(MaxValue) ->
@@ -218,7 +218,7 @@ setRange(#wx_ref{type=ThisT,ref=ThisRef},MinValue,MaxValue)
<<ThisRef:32/?UI,MinValue:32/?UI,MaxValue:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxslider.html#wxslidersetthumblength">external documentation</a>.
--spec setThumbLength(This, LenPixels) -> ok when
+-spec setThumbLength(This, LenPixels) -> 'ok' when
This::wxSlider(), LenPixels::integer().
setThumbLength(#wx_ref{type=ThisT,ref=ThisRef},LenPixels)
when is_integer(LenPixels) ->
@@ -227,7 +227,7 @@ setThumbLength(#wx_ref{type=ThisT,ref=ThisRef},LenPixels)
<<ThisRef:32/?UI,LenPixels:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxslider.html#wxslidersetvalue">external documentation</a>.
--spec setValue(This, Value) -> ok when
+-spec setValue(This, Value) -> 'ok' when
This::wxSlider(), Value::integer().
setValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
when is_integer(Value) ->
@@ -236,7 +236,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
<<ThisRef:32/?UI,Value:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSlider()) -> ok.
+-spec destroy(This::wxSlider()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSlider),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxSpinButton.erl b/lib/wx/src/gen/wxSpinButton.erl
index 82b48f87da..1c8d674d05 100644
--- a/lib/wx/src/gen/wxSpinButton.erl
+++ b/lib/wx/src/gen/wxSpinButton.erl
@@ -97,10 +97,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinbutton.html#wxspinbuttonwxspinbutton">external documentation</a>.
-spec new(Parent, [Option]) -> wxSpinButton() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -124,10 +124,10 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinbutton.html#wxspinbuttoncreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxSpinButton(), Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSpinButton),
@@ -166,7 +166,7 @@ getValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinbutton.html#wxspinbuttonsetrange">external documentation</a>.
--spec setRange(This, MinVal, MaxVal) -> ok when
+-spec setRange(This, MinVal, MaxVal) -> 'ok' when
This::wxSpinButton(), MinVal::integer(), MaxVal::integer().
setRange(#wx_ref{type=ThisT,ref=ThisRef},MinVal,MaxVal)
when is_integer(MinVal),is_integer(MaxVal) ->
@@ -175,7 +175,7 @@ setRange(#wx_ref{type=ThisT,ref=ThisRef},MinVal,MaxVal)
<<ThisRef:32/?UI,MinVal:32/?UI,MaxVal:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinbutton.html#wxspinbuttonsetvalue">external documentation</a>.
--spec setValue(This, Value) -> ok when
+-spec setValue(This, Value) -> 'ok' when
This::wxSpinButton(), Value::integer().
setValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
when is_integer(Value) ->
@@ -184,7 +184,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
<<ThisRef:32/?UI,Value:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSpinButton()) -> ok.
+-spec destroy(This::wxSpinButton()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSpinButton),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxSpinCtrl.erl b/lib/wx/src/gen/wxSpinCtrl.erl
index 89fa971543..f8a46dd146 100644
--- a/lib/wx/src/gen/wxSpinCtrl.erl
+++ b/lib/wx/src/gen/wxSpinCtrl.erl
@@ -97,14 +97,14 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinctrl.html#wxspinctrlwxspinctrl">external documentation</a>.
-spec new(Parent, [Option]) -> wxSpinCtrl() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {value, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {min, integer()}
- | {max, integer()}
- | {initial, integer()}.
+ Option :: {'id', integer()}
+ | {'value', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'min', integer()}
+ | {'max', integer()}
+ | {'initial', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -132,14 +132,14 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinctrl.html#wxspinctrlcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxSpinCtrl(), Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {value, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {min, integer()}
- | {max, integer()}
- | {initial, integer()}.
+ Option :: {'id', integer()}
+ | {'value', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'min', integer()}
+ | {'max', integer()}
+ | {'initial', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSpinCtrl),
@@ -159,12 +159,12 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Opti
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinctrl.html#wxspinctrlsetvalue">external documentation</a>.
%% <br /> Also:<br />
-%% setValue(This, Text) -> ok when<br />
+%% setValue(This, Text) -> 'ok' when<br />
%% This::wxSpinCtrl(), Text::unicode:chardata().<br />
%%
--spec setValue(This, Value) -> ok when
+-spec setValue(This, Value) -> 'ok' when
This::wxSpinCtrl(), Value::integer();
- (This, Text) -> ok when
+ (This, Text) -> 'ok' when
This::wxSpinCtrl(), Text::unicode:chardata().
setValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
when is_integer(Value) ->
@@ -187,7 +187,7 @@ getValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinctrl.html#wxspinctrlsetrange">external documentation</a>.
--spec setRange(This, MinVal, MaxVal) -> ok when
+-spec setRange(This, MinVal, MaxVal) -> 'ok' when
This::wxSpinCtrl(), MinVal::integer(), MaxVal::integer().
setRange(#wx_ref{type=ThisT,ref=ThisRef},MinVal,MaxVal)
when is_integer(MinVal),is_integer(MaxVal) ->
@@ -196,7 +196,7 @@ setRange(#wx_ref{type=ThisT,ref=ThisRef},MinVal,MaxVal)
<<ThisRef:32/?UI,MinVal:32/?UI,MaxVal:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinctrl.html#wxspinctrlsetselection">external documentation</a>.
--spec setSelection(This, From, To) -> ok when
+-spec setSelection(This, From, To) -> 'ok' when
This::wxSpinCtrl(), From::integer(), To::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},From,To)
when is_integer(From),is_integer(To) ->
@@ -221,7 +221,7 @@ getMax(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSpinCtrl()) -> ok.
+-spec destroy(This::wxSpinCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSpinCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxSpinEvent.erl b/lib/wx/src/gen/wxSpinEvent.erl
index da3111e5f5..1c99927de7 100644
--- a/lib/wx/src/gen/wxSpinEvent.erl
+++ b/lib/wx/src/gen/wxSpinEvent.erl
@@ -59,7 +59,7 @@ getPosition(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxspinevent.html#wxspineventsetposition">external documentation</a>.
--spec setPosition(This, Pos) -> ok when
+-spec setPosition(This, Pos) -> 'ok' when
This::wxSpinEvent(), Pos::integer().
setPosition(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
diff --git a/lib/wx/src/gen/wxSplashScreen.erl b/lib/wx/src/gen/wxSplashScreen.erl
index fad8cfcd8e..3b53e670c1 100644
--- a/lib/wx/src/gen/wxSplashScreen.erl
+++ b/lib/wx/src/gen/wxSplashScreen.erl
@@ -107,9 +107,9 @@ new(Bitmap,SplashStyle,Milliseconds,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplashscreen.html#wxsplashscreenwxsplashscreen">external documentation</a>.
-spec new(Bitmap, SplashStyle, Milliseconds, Parent, Id, [Option]) -> wxSplashScreen() when
Bitmap::wxBitmap:wxBitmap(), SplashStyle::integer(), Milliseconds::integer(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=BitmapT,ref=BitmapRef},SplashStyle,Milliseconds,#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(SplashStyle),is_integer(Milliseconds),is_integer(Id),is_list(Options) ->
?CLASS(BitmapT,wxBitmap),
@@ -139,7 +139,7 @@ getTimeout(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSplashScreen()) -> ok.
+-spec destroy(This::wxSplashScreen()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSplashScreen),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxSplitterEvent.erl b/lib/wx/src/gen/wxSplitterEvent.erl
index 3daef5cdc1..87b70b5955 100644
--- a/lib/wx/src/gen/wxSplitterEvent.erl
+++ b/lib/wx/src/gen/wxSplitterEvent.erl
@@ -83,7 +83,7 @@ getWindowBeingRemoved(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterevent.html#wxsplittereventsetsashposition">external documentation</a>.
--spec setSashPosition(This, Pos) -> ok when
+-spec setSashPosition(This, Pos) -> 'ok' when
This::wxSplitterEvent(), Pos::integer().
setSashPosition(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
diff --git a/lib/wx/src/gen/wxSplitterWindow.erl b/lib/wx/src/gen/wxSplitterWindow.erl
index 7db8dc60c4..f311d5011f 100644
--- a/lib/wx/src/gen/wxSplitterWindow.erl
+++ b/lib/wx/src/gen/wxSplitterWindow.erl
@@ -99,10 +99,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowwxsplitterwindow">external documentation</a>.
-spec new(Parent, [Option]) -> wxSplitterWindow() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -126,10 +126,10 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxSplitterWindow(), Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSplitterWindow),
@@ -193,7 +193,7 @@ getWindow2(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowinitialize">external documentation</a>.
--spec initialize(This, Window) -> ok when
+-spec initialize(This, Window) -> 'ok' when
This::wxSplitterWindow(), Window::wxWindow:wxWindow().
initialize(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WindowT,ref=WindowRef}) ->
?CLASS(ThisT,wxSplitterWindow),
@@ -220,7 +220,7 @@ replaceWindow(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WinOldT,ref=WinOldRef
<<ThisRef:32/?UI,WinOldRef:32/?UI,WinNewRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowsetsashgravity">external documentation</a>.
--spec setSashGravity(This, Gravity) -> ok when
+-spec setSashGravity(This, Gravity) -> 'ok' when
This::wxSplitterWindow(), Gravity::number().
setSashGravity(#wx_ref{type=ThisT,ref=ThisRef},Gravity)
when is_number(Gravity) ->
@@ -229,7 +229,7 @@ setSashGravity(#wx_ref{type=ThisT,ref=ThisRef},Gravity)
<<ThisRef:32/?UI,0:32,Gravity:64/?F>>).
%% @equiv setSashPosition(This,Position, [])
--spec setSashPosition(This, Position) -> ok when
+-spec setSashPosition(This, Position) -> 'ok' when
This::wxSplitterWindow(), Position::integer().
setSashPosition(This,Position)
@@ -237,9 +237,9 @@ setSashPosition(This,Position)
setSashPosition(This,Position, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowsetsashposition">external documentation</a>.
--spec setSashPosition(This, Position, [Option]) -> ok when
+-spec setSashPosition(This, Position, [Option]) -> 'ok' when
This::wxSplitterWindow(), Position::integer(),
- Option :: {redraw, boolean()}.
+ Option :: {'redraw', boolean()}.
setSashPosition(#wx_ref{type=ThisT,ref=ThisRef},Position, Options)
when is_integer(Position),is_list(Options) ->
?CLASS(ThisT,wxSplitterWindow),
@@ -250,7 +250,7 @@ setSashPosition(#wx_ref{type=ThisT,ref=ThisRef},Position, Options)
<<ThisRef:32/?UI,Position:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowsetsashsize">external documentation</a>.
--spec setSashSize(This, Width) -> ok when
+-spec setSashSize(This, Width) -> 'ok' when
This::wxSplitterWindow(), Width::integer().
setSashSize(#wx_ref{type=ThisT,ref=ThisRef},Width)
when is_integer(Width) ->
@@ -259,7 +259,7 @@ setSashSize(#wx_ref{type=ThisT,ref=ThisRef},Width)
<<ThisRef:32/?UI,Width:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowsetminimumpanesize">external documentation</a>.
--spec setMinimumPaneSize(This, Min) -> ok when
+-spec setMinimumPaneSize(This, Min) -> 'ok' when
This::wxSplitterWindow(), Min::integer().
setMinimumPaneSize(#wx_ref{type=ThisT,ref=ThisRef},Min)
when is_integer(Min) ->
@@ -268,7 +268,7 @@ setMinimumPaneSize(#wx_ref{type=ThisT,ref=ThisRef},Min)
<<ThisRef:32/?UI,Min:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowsetsplitmode">external documentation</a>.
--spec setSplitMode(This, Mode) -> ok when
+-spec setSplitMode(This, Mode) -> 'ok' when
This::wxSplitterWindow(), Mode::integer().
setSplitMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
when is_integer(Mode) ->
@@ -287,7 +287,7 @@ splitHorizontally(This,Window1,Window2)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowsplithorizontally">external documentation</a>.
-spec splitHorizontally(This, Window1, Window2, [Option]) -> boolean() when
This::wxSplitterWindow(), Window1::wxWindow:wxWindow(), Window2::wxWindow:wxWindow(),
- Option :: {sashPosition, integer()}.
+ Option :: {'sashPosition', integer()}.
splitHorizontally(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=Window1T,ref=Window1Ref},#wx_ref{type=Window2T,ref=Window2Ref}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSplitterWindow),
@@ -310,7 +310,7 @@ splitVertically(This,Window1,Window2)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowsplitvertically">external documentation</a>.
-spec splitVertically(This, Window1, Window2, [Option]) -> boolean() when
This::wxSplitterWindow(), Window1::wxWindow:wxWindow(), Window2::wxWindow:wxWindow(),
- Option :: {sashPosition, integer()}.
+ Option :: {'sashPosition', integer()}.
splitVertically(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=Window1T,ref=Window1Ref},#wx_ref{type=Window2T,ref=Window2Ref}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSplitterWindow),
@@ -333,7 +333,7 @@ unsplit(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowunsplit">external documentation</a>.
-spec unsplit(This, [Option]) -> boolean() when
This::wxSplitterWindow(),
- Option :: {toRemove, wxWindow:wxWindow()}.
+ Option :: {'toRemove', wxWindow:wxWindow()}.
unsplit(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxSplitterWindow),
@@ -344,7 +344,7 @@ unsplit(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsplitterwindow.html#wxsplitterwindowupdatesize">external documentation</a>.
--spec updateSize(This) -> ok when
+-spec updateSize(This) -> 'ok' when
This::wxSplitterWindow().
updateSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxSplitterWindow),
@@ -352,7 +352,7 @@ updateSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxSplitterWindow()) -> ok.
+-spec destroy(This::wxSplitterWindow()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxSplitterWindow),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxStaticBitmap.erl b/lib/wx/src/gen/wxStaticBitmap.erl
index 4da50262b9..3ef1499a28 100644
--- a/lib/wx/src/gen/wxStaticBitmap.erl
+++ b/lib/wx/src/gen/wxStaticBitmap.erl
@@ -96,9 +96,9 @@ new(Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstaticbitmap.html#wxstaticbitmapwxstaticbitmap">external documentation</a>.
-spec new(Parent, Id, Label, [Option]) -> wxStaticBitmap() when
Parent::wxWindow:wxWindow(), Id::integer(), Label::wxBitmap:wxBitmap(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,#wx_ref{type=LabelT,ref=LabelRef}, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -122,9 +122,9 @@ create(This,Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstaticbitmap.html#wxstaticbitmapcreate">external documentation</a>.
-spec create(This, Parent, Id, Label, [Option]) -> boolean() when
This::wxStaticBitmap(), Parent::wxWindow:wxWindow(), Id::integer(), Label::wxBitmap:wxBitmap(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,#wx_ref{type=LabelT,ref=LabelRef}, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxStaticBitmap),
@@ -147,7 +147,7 @@ getBitmap(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstaticbitmap.html#wxstaticbitmapsetbitmap">external documentation</a>.
--spec setBitmap(This, Bitmap) -> ok when
+-spec setBitmap(This, Bitmap) -> 'ok' when
This::wxStaticBitmap(), Bitmap::wxBitmap:wxBitmap().
setBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BitmapT,ref=BitmapRef}) ->
?CLASS(ThisT,wxStaticBitmap),
@@ -156,7 +156,7 @@ setBitmap(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BitmapT,ref=BitmapRef}) -
<<ThisRef:32/?UI,BitmapRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxStaticBitmap()) -> ok.
+-spec destroy(This::wxStaticBitmap()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxStaticBitmap),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxStaticBox.erl b/lib/wx/src/gen/wxStaticBox.erl
index 04584f23b2..46cca3b6f3 100644
--- a/lib/wx/src/gen/wxStaticBox.erl
+++ b/lib/wx/src/gen/wxStaticBox.erl
@@ -96,9 +96,9 @@ new(Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstaticbox.html#wxstaticboxwxstaticbox">external documentation</a>.
-spec new(Parent, Id, Label, [Option]) -> wxStaticBox() when
Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -122,9 +122,9 @@ create(This,Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstaticbox.html#wxstaticboxcreate">external documentation</a>.
-spec create(This, Parent, Id, Label, [Option]) -> boolean() when
This::wxStaticBox(), Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ThisT,wxStaticBox),
@@ -139,7 +139,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,La
<<ThisRef:32/?UI,ParentRef:32/?UI,Id:32/?UI,(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((0+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxStaticBox()) -> ok.
+-spec destroy(This::wxStaticBox()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxStaticBox),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxStaticBoxSizer.erl b/lib/wx/src/gen/wxStaticBoxSizer.erl
index 76dde099b6..2c69cb86b0 100644
--- a/lib/wx/src/gen/wxStaticBoxSizer.erl
+++ b/lib/wx/src/gen/wxStaticBoxSizer.erl
@@ -71,7 +71,7 @@ new(#wx_ref{type=BoxT,ref=BoxRef},Orient)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstaticboxsizer.html#wxstaticboxsizerwxstaticboxsizer">external documentation</a>.
-spec new(Orient, Win, [Option]) -> wxStaticBoxSizer() when
Orient::integer(), Win::wxWindow:wxWindow(),
- Option :: {label, unicode:chardata()}.
+ Option :: {'label', unicode:chardata()}.
new(Orient,#wx_ref{type=WinT,ref=WinRef}, Options)
when is_integer(Orient),is_list(Options) ->
?CLASS(WinT,wxWindow),
@@ -90,7 +90,7 @@ getStaticBox(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxStaticBoxSizer()) -> ok.
+-spec destroy(This::wxStaticBoxSizer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxStaticBoxSizer),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxStaticLine.erl b/lib/wx/src/gen/wxStaticLine.erl
index 6d23c5ac3d..94dd339cfc 100644
--- a/lib/wx/src/gen/wxStaticLine.erl
+++ b/lib/wx/src/gen/wxStaticLine.erl
@@ -97,10 +97,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstaticline.html#wxstaticlinewxstaticline">external documentation</a>.
-spec new(Parent, [Option]) -> wxStaticLine() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -124,10 +124,10 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstaticline.html#wxstaticlinecreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxStaticLine(), Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxStaticLine),
@@ -156,7 +156,7 @@ getDefaultSize() ->
<<>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxStaticLine()) -> ok.
+-spec destroy(This::wxStaticLine()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxStaticLine),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxStaticText.erl b/lib/wx/src/gen/wxStaticText.erl
index 635f29a1e8..37d0219bc6 100644
--- a/lib/wx/src/gen/wxStaticText.erl
+++ b/lib/wx/src/gen/wxStaticText.erl
@@ -96,9 +96,9 @@ new(Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatictext.html#wxstatictextwxstatictext">external documentation</a>.
-spec new(Parent, Id, Label, [Option]) -> wxStaticText() when
Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -122,9 +122,9 @@ create(This,Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatictext.html#wxstatictextcreate">external documentation</a>.
-spec create(This, Parent, Id, Label, [Option]) -> boolean() when
This::wxStaticText(), Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ThisT,wxStaticText),
@@ -147,7 +147,7 @@ getLabel(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatictext.html#wxstatictextsetlabel">external documentation</a>.
--spec setLabel(This, Label) -> ok when
+-spec setLabel(This, Label) -> 'ok' when
This::wxStaticText(), Label::unicode:chardata().
setLabel(#wx_ref{type=ThisT,ref=ThisRef},Label)
when is_list(Label) ->
@@ -157,7 +157,7 @@ setLabel(#wx_ref{type=ThisT,ref=ThisRef},Label)
<<ThisRef:32/?UI,(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((0+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatictext.html#wxstatictextwrap">external documentation</a>.
--spec wrap(This, Width) -> ok when
+-spec wrap(This, Width) -> 'ok' when
This::wxStaticText(), Width::integer().
wrap(#wx_ref{type=ThisT,ref=ThisRef},Width)
when is_integer(Width) ->
@@ -166,7 +166,7 @@ wrap(#wx_ref{type=ThisT,ref=ThisRef},Width)
<<ThisRef:32/?UI,Width:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxStaticText()) -> ok.
+-spec destroy(This::wxStaticText()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxStaticText),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxStatusBar.erl b/lib/wx/src/gen/wxStatusBar.erl
index 2cd0d4a43e..d0ce65273b 100644
--- a/lib/wx/src/gen/wxStatusBar.erl
+++ b/lib/wx/src/gen/wxStatusBar.erl
@@ -97,8 +97,8 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbarwxstatusbar">external documentation</a>.
-spec new(Parent, [Option]) -> wxStatusBar() when
Parent::wxWindow:wxWindow(),
- Option :: {winid, integer()}
- | {style, integer()}.
+ Option :: {'winid', integer()}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -120,8 +120,8 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbarcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxStatusBar(), Parent::wxWindow:wxWindow(),
- Option :: {winid, integer()}
- | {style, integer()}.
+ Option :: {'winid', integer()}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxStatusBar),
@@ -162,7 +162,7 @@ getStatusText(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbargetstatustext">external documentation</a>.
-spec getStatusText(This, [Option]) -> unicode:charlist() when
This::wxStatusBar(),
- Option :: {number, integer()}.
+ Option :: {'number', integer()}.
getStatusText(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxStatusBar),
@@ -173,7 +173,7 @@ getStatusText(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv popStatusText(This, [])
--spec popStatusText(This) -> ok when
+-spec popStatusText(This) -> 'ok' when
This::wxStatusBar().
popStatusText(This)
@@ -181,9 +181,9 @@ popStatusText(This)
popStatusText(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbarpopstatustext">external documentation</a>.
--spec popStatusText(This, [Option]) -> ok when
+-spec popStatusText(This, [Option]) -> 'ok' when
This::wxStatusBar(),
- Option :: {number, integer()}.
+ Option :: {'number', integer()}.
popStatusText(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxStatusBar),
@@ -194,7 +194,7 @@ popStatusText(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv pushStatusText(This,Text, [])
--spec pushStatusText(This, Text) -> ok when
+-spec pushStatusText(This, Text) -> 'ok' when
This::wxStatusBar(), Text::unicode:chardata().
pushStatusText(This,Text)
@@ -202,9 +202,9 @@ pushStatusText(This,Text)
pushStatusText(This,Text, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbarpushstatustext">external documentation</a>.
--spec pushStatusText(This, Text, [Option]) -> ok when
+-spec pushStatusText(This, Text, [Option]) -> 'ok' when
This::wxStatusBar(), Text::unicode:chardata(),
- Option :: {number, integer()}.
+ Option :: {'number', integer()}.
pushStatusText(#wx_ref{type=ThisT,ref=ThisRef},Text, Options)
when is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxStatusBar),
@@ -216,7 +216,7 @@ pushStatusText(#wx_ref{type=ThisT,ref=ThisRef},Text, Options)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @equiv setFieldsCount(This,Number, [])
--spec setFieldsCount(This, Number) -> ok when
+-spec setFieldsCount(This, Number) -> 'ok' when
This::wxStatusBar(), Number::integer().
setFieldsCount(This,Number)
@@ -224,9 +224,9 @@ setFieldsCount(This,Number)
setFieldsCount(This,Number, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbarsetfieldscount">external documentation</a>.
--spec setFieldsCount(This, Number, [Option]) -> ok when
+-spec setFieldsCount(This, Number, [Option]) -> 'ok' when
This::wxStatusBar(), Number::integer(),
- Option :: {widths, [integer()]}.
+ Option :: {'widths', [integer()]}.
setFieldsCount(#wx_ref{type=ThisT,ref=ThisRef},Number, Options)
when is_integer(Number),is_list(Options) ->
?CLASS(ThisT,wxStatusBar),
@@ -238,7 +238,7 @@ setFieldsCount(#wx_ref{type=ThisT,ref=ThisRef},Number, Options)
<<ThisRef:32/?UI,Number:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbarsetminheight">external documentation</a>.
--spec setMinHeight(This, Height) -> ok when
+-spec setMinHeight(This, Height) -> 'ok' when
This::wxStatusBar(), Height::integer().
setMinHeight(#wx_ref{type=ThisT,ref=ThisRef},Height)
when is_integer(Height) ->
@@ -247,7 +247,7 @@ setMinHeight(#wx_ref{type=ThisT,ref=ThisRef},Height)
<<ThisRef:32/?UI,Height:32/?UI>>).
%% @equiv setStatusText(This,Text, [])
--spec setStatusText(This, Text) -> ok when
+-spec setStatusText(This, Text) -> 'ok' when
This::wxStatusBar(), Text::unicode:chardata().
setStatusText(This,Text)
@@ -255,9 +255,9 @@ setStatusText(This,Text)
setStatusText(This,Text, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbarsetstatustext">external documentation</a>.
--spec setStatusText(This, Text, [Option]) -> ok when
+-spec setStatusText(This, Text, [Option]) -> 'ok' when
This::wxStatusBar(), Text::unicode:chardata(),
- Option :: {number, integer()}.
+ Option :: {'number', integer()}.
setStatusText(#wx_ref{type=ThisT,ref=ThisRef},Text, Options)
when is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxStatusBar),
@@ -269,7 +269,7 @@ setStatusText(#wx_ref{type=ThisT,ref=ThisRef},Text, Options)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbarsetstatuswidths">external documentation</a>.
--spec setStatusWidths(This, Widths_field) -> ok when
+-spec setStatusWidths(This, Widths_field) -> 'ok' when
This::wxStatusBar(), Widths_field::[integer()].
setStatusWidths(#wx_ref{type=ThisT,ref=ThisRef},Widths_field)
when is_list(Widths_field) ->
@@ -279,7 +279,7 @@ setStatusWidths(#wx_ref{type=ThisT,ref=ThisRef},Widths_field)
(<< <<C:32/?I>> || C <- Widths_field>>)/binary, 0:(((0+length(Widths_field)) rem 2)*32)>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstatusbar.html#wxstatusbarsetstatusstyles">external documentation</a>.
--spec setStatusStyles(This, Styles) -> ok when
+-spec setStatusStyles(This, Styles) -> 'ok' when
This::wxStatusBar(), Styles::[integer()].
setStatusStyles(#wx_ref{type=ThisT,ref=ThisRef},Styles)
when is_list(Styles) ->
@@ -289,7 +289,7 @@ setStatusStyles(#wx_ref{type=ThisT,ref=ThisRef},Styles)
(<< <<C:32/?I>> || C <- Styles>>)/binary, 0:(((0+length(Styles)) rem 2)*32)>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxStatusBar()) -> ok.
+-spec destroy(This::wxStatusBar()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxStatusBar),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxStdDialogButtonSizer.erl b/lib/wx/src/gen/wxStdDialogButtonSizer.erl
index 97beee6f14..70e8981def 100644
--- a/lib/wx/src/gen/wxStdDialogButtonSizer.erl
+++ b/lib/wx/src/gen/wxStdDialogButtonSizer.erl
@@ -57,7 +57,7 @@ new() ->
<<>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstddialogbuttonsizer.html#wxstddialogbuttonsizeraddbutton">external documentation</a>.
--spec addButton(This, Button) -> ok when
+-spec addButton(This, Button) -> 'ok' when
This::wxStdDialogButtonSizer(), Button::wxButton:wxButton().
addButton(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ButtonT,ref=ButtonRef}) ->
?CLASS(ThisT,wxStdDialogButtonSizer),
@@ -66,7 +66,7 @@ addButton(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ButtonT,ref=ButtonRef}) -
<<ThisRef:32/?UI,ButtonRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstddialogbuttonsizer.html#wxstddialogbuttonsizerrealize">external documentation</a>.
--spec realize(This) -> ok when
+-spec realize(This) -> 'ok' when
This::wxStdDialogButtonSizer().
realize(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStdDialogButtonSizer),
@@ -74,7 +74,7 @@ realize(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstddialogbuttonsizer.html#wxstddialogbuttonsizersetaffirmativebutton">external documentation</a>.
--spec setAffirmativeButton(This, Button) -> ok when
+-spec setAffirmativeButton(This, Button) -> 'ok' when
This::wxStdDialogButtonSizer(), Button::wxButton:wxButton().
setAffirmativeButton(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ButtonT,ref=ButtonRef}) ->
?CLASS(ThisT,wxStdDialogButtonSizer),
@@ -83,7 +83,7 @@ setAffirmativeButton(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ButtonT,ref=Bu
<<ThisRef:32/?UI,ButtonRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstddialogbuttonsizer.html#wxstddialogbuttonsizersetcancelbutton">external documentation</a>.
--spec setCancelButton(This, Button) -> ok when
+-spec setCancelButton(This, Button) -> 'ok' when
This::wxStdDialogButtonSizer(), Button::wxButton:wxButton().
setCancelButton(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ButtonT,ref=ButtonRef}) ->
?CLASS(ThisT,wxStdDialogButtonSizer),
@@ -92,7 +92,7 @@ setCancelButton(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ButtonT,ref=ButtonR
<<ThisRef:32/?UI,ButtonRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstddialogbuttonsizer.html#wxstddialogbuttonsizersetnegativebutton">external documentation</a>.
--spec setNegativeButton(This, Button) -> ok when
+-spec setNegativeButton(This, Button) -> 'ok' when
This::wxStdDialogButtonSizer(), Button::wxButton:wxButton().
setNegativeButton(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ButtonT,ref=ButtonRef}) ->
?CLASS(ThisT,wxStdDialogButtonSizer),
@@ -101,7 +101,7 @@ setNegativeButton(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ButtonT,ref=Butto
<<ThisRef:32/?UI,ButtonRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxStdDialogButtonSizer()) -> ok.
+-spec destroy(This::wxStdDialogButtonSizer()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxStdDialogButtonSizer),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxStyledTextCtrl.erl b/lib/wx/src/gen/wxStyledTextCtrl.erl
index 8e629db9ff..15ef728659 100644
--- a/lib/wx/src/gen/wxStyledTextCtrl.erl
+++ b/lib/wx/src/gen/wxStyledTextCtrl.erl
@@ -197,10 +197,10 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwxstyledtextctrl">external documentation</a>.
-spec new(Parent, [Option]) -> wxStyledTextCtrl() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -224,10 +224,10 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxStyledTextCtrl(), Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -242,7 +242,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Opti
<<ThisRef:32/?UI,ParentRef:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrladdtext">external documentation</a>.
--spec addText(This, Text) -> ok when
+-spec addText(This, Text) -> 'ok' when
This::wxStyledTextCtrl(), Text::unicode:chardata().
addText(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -252,7 +252,7 @@ addText(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrladdstyledtext">external documentation</a>.
--spec addStyledText(This, Data) -> ok when
+-spec addStyledText(This, Data) -> 'ok' when
This::wxStyledTextCtrl(), Data::wx:wx_object().
addStyledText(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DataT,ref=DataRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -261,7 +261,7 @@ addStyledText(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DataT,ref=DataRef}) -
<<ThisRef:32/?UI,DataRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlinserttext">external documentation</a>.
--spec insertText(This, Pos, Text) -> ok when
+-spec insertText(This, Pos, Text) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer(), Text::unicode:chardata().
insertText(#wx_ref{type=ThisT,ref=ThisRef},Pos,Text)
when is_integer(Pos),is_list(Text) ->
@@ -271,7 +271,7 @@ insertText(#wx_ref{type=ThisT,ref=ThisRef},Pos,Text)
<<ThisRef:32/?UI,Pos:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlclearall">external documentation</a>.
--spec clearAll(This) -> ok when
+-spec clearAll(This) -> 'ok' when
This::wxStyledTextCtrl().
clearAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -279,7 +279,7 @@ clearAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcleardocumentstyle">external documentation</a>.
--spec clearDocumentStyle(This) -> ok when
+-spec clearDocumentStyle(This) -> 'ok' when
This::wxStyledTextCtrl().
clearDocumentStyle(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -329,7 +329,7 @@ getStyleAt(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlredo">external documentation</a>.
--spec redo(This) -> ok when
+-spec redo(This) -> 'ok' when
This::wxStyledTextCtrl().
redo(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -337,7 +337,7 @@ redo(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetundocollection">external documentation</a>.
--spec setUndoCollection(This, CollectUndo) -> ok when
+-spec setUndoCollection(This, CollectUndo) -> 'ok' when
This::wxStyledTextCtrl(), CollectUndo::boolean().
setUndoCollection(#wx_ref{type=ThisT,ref=ThisRef},CollectUndo)
when is_boolean(CollectUndo) ->
@@ -346,7 +346,7 @@ setUndoCollection(#wx_ref{type=ThisT,ref=ThisRef},CollectUndo)
<<ThisRef:32/?UI,(wxe_util:from_bool(CollectUndo)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlselectall">external documentation</a>.
--spec selectAll(This) -> ok when
+-spec selectAll(This) -> 'ok' when
This::wxStyledTextCtrl().
selectAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -354,7 +354,7 @@ selectAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetsavepoint">external documentation</a>.
--spec setSavePoint(This) -> ok when
+-spec setSavePoint(This) -> 'ok' when
This::wxStyledTextCtrl().
setSavePoint(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -388,7 +388,7 @@ markerLineFromHandle(#wx_ref{type=ThisT,ref=ThisRef},Handle)
<<ThisRef:32/?UI,Handle:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmarkerdeletehandle">external documentation</a>.
--spec markerDeleteHandle(This, Handle) -> ok when
+-spec markerDeleteHandle(This, Handle) -> 'ok' when
This::wxStyledTextCtrl(), Handle::integer().
markerDeleteHandle(#wx_ref{type=ThisT,ref=ThisRef},Handle)
when is_integer(Handle) ->
@@ -413,7 +413,7 @@ getViewWhiteSpace(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetviewwhitespace">external documentation</a>.
--spec setViewWhiteSpace(This, ViewWS) -> ok when
+-spec setViewWhiteSpace(This, ViewWS) -> 'ok' when
This::wxStyledTextCtrl(), ViewWS::integer().
setViewWhiteSpace(#wx_ref{type=ThisT,ref=ThisRef},ViewWS)
when is_integer(ViewWS) ->
@@ -440,7 +440,7 @@ positionFromPointClose(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlgotoline">external documentation</a>.
--spec gotoLine(This, Line) -> ok when
+-spec gotoLine(This, Line) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer().
gotoLine(#wx_ref{type=ThisT,ref=ThisRef},Line)
when is_integer(Line) ->
@@ -449,7 +449,7 @@ gotoLine(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlgotopos">external documentation</a>.
--spec gotoPos(This, Pos) -> ok when
+-spec gotoPos(This, Pos) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer().
gotoPos(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -458,7 +458,7 @@ gotoPos(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetanchor">external documentation</a>.
--spec setAnchor(This, PosAnchor) -> ok when
+-spec setAnchor(This, PosAnchor) -> 'ok' when
This::wxStyledTextCtrl(), PosAnchor::integer().
setAnchor(#wx_ref{type=ThisT,ref=ThisRef},PosAnchor)
when is_integer(PosAnchor) ->
@@ -484,7 +484,7 @@ getEndStyled(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlconverteols">external documentation</a>.
--spec convertEOLs(This, EolMode) -> ok when
+-spec convertEOLs(This, EolMode) -> 'ok' when
This::wxStyledTextCtrl(), EolMode::integer().
convertEOLs(#wx_ref{type=ThisT,ref=ThisRef},EolMode)
when is_integer(EolMode) ->
@@ -501,7 +501,7 @@ getEOLMode(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlseteolmode">external documentation</a>.
--spec setEOLMode(This, EolMode) -> ok when
+-spec setEOLMode(This, EolMode) -> 'ok' when
This::wxStyledTextCtrl(), EolMode::integer().
setEOLMode(#wx_ref{type=ThisT,ref=ThisRef},EolMode)
when is_integer(EolMode) ->
@@ -510,7 +510,7 @@ setEOLMode(#wx_ref{type=ThisT,ref=ThisRef},EolMode)
<<ThisRef:32/?UI,EolMode:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstartstyling">external documentation</a>.
--spec startStyling(This, Pos, Mask) -> ok when
+-spec startStyling(This, Pos, Mask) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer(), Mask::integer().
startStyling(#wx_ref{type=ThisT,ref=ThisRef},Pos,Mask)
when is_integer(Pos),is_integer(Mask) ->
@@ -519,7 +519,7 @@ startStyling(#wx_ref{type=ThisT,ref=ThisRef},Pos,Mask)
<<ThisRef:32/?UI,Pos:32/?UI,Mask:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetstyling">external documentation</a>.
--spec setStyling(This, Length, Style) -> ok when
+-spec setStyling(This, Length, Style) -> 'ok' when
This::wxStyledTextCtrl(), Length::integer(), Style::integer().
setStyling(#wx_ref{type=ThisT,ref=ThisRef},Length,Style)
when is_integer(Length),is_integer(Style) ->
@@ -536,7 +536,7 @@ getBufferedDraw(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetbuffereddraw">external documentation</a>.
--spec setBufferedDraw(This, Buffered) -> ok when
+-spec setBufferedDraw(This, Buffered) -> 'ok' when
This::wxStyledTextCtrl(), Buffered::boolean().
setBufferedDraw(#wx_ref{type=ThisT,ref=ThisRef},Buffered)
when is_boolean(Buffered) ->
@@ -545,7 +545,7 @@ setBufferedDraw(#wx_ref{type=ThisT,ref=ThisRef},Buffered)
<<ThisRef:32/?UI,(wxe_util:from_bool(Buffered)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsettabwidth">external documentation</a>.
--spec setTabWidth(This, TabWidth) -> ok when
+-spec setTabWidth(This, TabWidth) -> 'ok' when
This::wxStyledTextCtrl(), TabWidth::integer().
setTabWidth(#wx_ref{type=ThisT,ref=ThisRef},TabWidth)
when is_integer(TabWidth) ->
@@ -562,7 +562,7 @@ getTabWidth(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcodepage">external documentation</a>.
--spec setCodePage(This, CodePage) -> ok when
+-spec setCodePage(This, CodePage) -> 'ok' when
This::wxStyledTextCtrl(), CodePage::integer().
setCodePage(#wx_ref{type=ThisT,ref=ThisRef},CodePage)
when is_integer(CodePage) ->
@@ -571,7 +571,7 @@ setCodePage(#wx_ref{type=ThisT,ref=ThisRef},CodePage)
<<ThisRef:32/?UI,CodePage:32/?UI>>).
%% @equiv markerDefine(This,MarkerNumber,MarkerSymbol, [])
--spec markerDefine(This, MarkerNumber, MarkerSymbol) -> ok when
+-spec markerDefine(This, MarkerNumber, MarkerSymbol) -> 'ok' when
This::wxStyledTextCtrl(), MarkerNumber::integer(), MarkerSymbol::integer().
markerDefine(This,MarkerNumber,MarkerSymbol)
@@ -579,10 +579,10 @@ markerDefine(This,MarkerNumber,MarkerSymbol)
markerDefine(This,MarkerNumber,MarkerSymbol, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmarkerdefine">external documentation</a>.
--spec markerDefine(This, MarkerNumber, MarkerSymbol, [Option]) -> ok when
+-spec markerDefine(This, MarkerNumber, MarkerSymbol, [Option]) -> 'ok' when
This::wxStyledTextCtrl(), MarkerNumber::integer(), MarkerSymbol::integer(),
- Option :: {foreground, wx:wx_colour()}
- | {background, wx:wx_colour()}.
+ Option :: {'foreground', wx:wx_colour()}
+ | {'background', wx:wx_colour()}.
markerDefine(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber,MarkerSymbol, Options)
when is_integer(MarkerNumber),is_integer(MarkerSymbol),is_list(Options) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -594,7 +594,7 @@ markerDefine(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber,MarkerSymbol, Options)
<<ThisRef:32/?UI,MarkerNumber:32/?UI,MarkerSymbol:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmarkersetforeground">external documentation</a>.
--spec markerSetForeground(This, MarkerNumber, Fore) -> ok when
+-spec markerSetForeground(This, MarkerNumber, Fore) -> 'ok' when
This::wxStyledTextCtrl(), MarkerNumber::integer(), Fore::wx:wx_colour().
markerSetForeground(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber,Fore)
when is_integer(MarkerNumber),tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -603,7 +603,7 @@ markerSetForeground(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber,Fore)
<<ThisRef:32/?UI,MarkerNumber:32/?UI,(wxe_util:colour_bin(Fore)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmarkersetbackground">external documentation</a>.
--spec markerSetBackground(This, MarkerNumber, Back) -> ok when
+-spec markerSetBackground(This, MarkerNumber, Back) -> 'ok' when
This::wxStyledTextCtrl(), MarkerNumber::integer(), Back::wx:wx_colour().
markerSetBackground(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber,Back)
when is_integer(MarkerNumber),tuple_size(Back) =:= 3; tuple_size(Back) =:= 4 ->
@@ -621,7 +621,7 @@ markerAdd(#wx_ref{type=ThisT,ref=ThisRef},Line,MarkerNumber)
<<ThisRef:32/?UI,Line:32/?UI,MarkerNumber:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmarkerdelete">external documentation</a>.
--spec markerDelete(This, Line, MarkerNumber) -> ok when
+-spec markerDelete(This, Line, MarkerNumber) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer(), MarkerNumber::integer().
markerDelete(#wx_ref{type=ThisT,ref=ThisRef},Line,MarkerNumber)
when is_integer(Line),is_integer(MarkerNumber) ->
@@ -630,7 +630,7 @@ markerDelete(#wx_ref{type=ThisT,ref=ThisRef},Line,MarkerNumber)
<<ThisRef:32/?UI,Line:32/?UI,MarkerNumber:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmarkerdeleteall">external documentation</a>.
--spec markerDeleteAll(This, MarkerNumber) -> ok when
+-spec markerDeleteAll(This, MarkerNumber) -> 'ok' when
This::wxStyledTextCtrl(), MarkerNumber::integer().
markerDeleteAll(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber)
when is_integer(MarkerNumber) ->
@@ -666,7 +666,7 @@ markerPrevious(#wx_ref{type=ThisT,ref=ThisRef},LineStart,MarkerMask)
<<ThisRef:32/?UI,LineStart:32/?UI,MarkerMask:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmarkerdefinebitmap">external documentation</a>.
--spec markerDefineBitmap(This, MarkerNumber, Bmp) -> ok when
+-spec markerDefineBitmap(This, MarkerNumber, Bmp) -> 'ok' when
This::wxStyledTextCtrl(), MarkerNumber::integer(), Bmp::wxBitmap:wxBitmap().
markerDefineBitmap(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber,#wx_ref{type=BmpT,ref=BmpRef})
when is_integer(MarkerNumber) ->
@@ -676,7 +676,7 @@ markerDefineBitmap(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber,#wx_ref{type=Bmp
<<ThisRef:32/?UI,MarkerNumber:32/?UI,BmpRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmarkeraddset">external documentation</a>.
--spec markerAddSet(This, Line, Set) -> ok when
+-spec markerAddSet(This, Line, Set) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer(), Set::integer().
markerAddSet(#wx_ref{type=ThisT,ref=ThisRef},Line,Set)
when is_integer(Line),is_integer(Set) ->
@@ -685,7 +685,7 @@ markerAddSet(#wx_ref{type=ThisT,ref=ThisRef},Line,Set)
<<ThisRef:32/?UI,Line:32/?UI,Set:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmarkersetalpha">external documentation</a>.
--spec markerSetAlpha(This, MarkerNumber, Alpha) -> ok when
+-spec markerSetAlpha(This, MarkerNumber, Alpha) -> 'ok' when
This::wxStyledTextCtrl(), MarkerNumber::integer(), Alpha::integer().
markerSetAlpha(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber,Alpha)
when is_integer(MarkerNumber),is_integer(Alpha) ->
@@ -694,7 +694,7 @@ markerSetAlpha(#wx_ref{type=ThisT,ref=ThisRef},MarkerNumber,Alpha)
<<ThisRef:32/?UI,MarkerNumber:32/?UI,Alpha:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmargintype">external documentation</a>.
--spec setMarginType(This, Margin, MarginType) -> ok when
+-spec setMarginType(This, Margin, MarginType) -> 'ok' when
This::wxStyledTextCtrl(), Margin::integer(), MarginType::integer().
setMarginType(#wx_ref{type=ThisT,ref=ThisRef},Margin,MarginType)
when is_integer(Margin),is_integer(MarginType) ->
@@ -712,7 +712,7 @@ getMarginType(#wx_ref{type=ThisT,ref=ThisRef},Margin)
<<ThisRef:32/?UI,Margin:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmarginwidth">external documentation</a>.
--spec setMarginWidth(This, Margin, PixelWidth) -> ok when
+-spec setMarginWidth(This, Margin, PixelWidth) -> 'ok' when
This::wxStyledTextCtrl(), Margin::integer(), PixelWidth::integer().
setMarginWidth(#wx_ref{type=ThisT,ref=ThisRef},Margin,PixelWidth)
when is_integer(Margin),is_integer(PixelWidth) ->
@@ -730,7 +730,7 @@ getMarginWidth(#wx_ref{type=ThisT,ref=ThisRef},Margin)
<<ThisRef:32/?UI,Margin:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmarginmask">external documentation</a>.
--spec setMarginMask(This, Margin, Mask) -> ok when
+-spec setMarginMask(This, Margin, Mask) -> 'ok' when
This::wxStyledTextCtrl(), Margin::integer(), Mask::integer().
setMarginMask(#wx_ref{type=ThisT,ref=ThisRef},Margin,Mask)
when is_integer(Margin),is_integer(Mask) ->
@@ -748,7 +748,7 @@ getMarginMask(#wx_ref{type=ThisT,ref=ThisRef},Margin)
<<ThisRef:32/?UI,Margin:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmarginsensitive">external documentation</a>.
--spec setMarginSensitive(This, Margin, Sensitive) -> ok when
+-spec setMarginSensitive(This, Margin, Sensitive) -> 'ok' when
This::wxStyledTextCtrl(), Margin::integer(), Sensitive::boolean().
setMarginSensitive(#wx_ref{type=ThisT,ref=ThisRef},Margin,Sensitive)
when is_integer(Margin),is_boolean(Sensitive) ->
@@ -766,7 +766,7 @@ getMarginSensitive(#wx_ref{type=ThisT,ref=ThisRef},Margin)
<<ThisRef:32/?UI,Margin:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstyleclearall">external documentation</a>.
--spec styleClearAll(This) -> ok when
+-spec styleClearAll(This) -> 'ok' when
This::wxStyledTextCtrl().
styleClearAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -774,7 +774,7 @@ styleClearAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetforeground">external documentation</a>.
--spec styleSetForeground(This, Style, Fore) -> ok when
+-spec styleSetForeground(This, Style, Fore) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), Fore::wx:wx_colour().
styleSetForeground(#wx_ref{type=ThisT,ref=ThisRef},Style,Fore)
when is_integer(Style),tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -783,7 +783,7 @@ styleSetForeground(#wx_ref{type=ThisT,ref=ThisRef},Style,Fore)
<<ThisRef:32/?UI,Style:32/?UI,(wxe_util:colour_bin(Fore)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetbackground">external documentation</a>.
--spec styleSetBackground(This, Style, Back) -> ok when
+-spec styleSetBackground(This, Style, Back) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), Back::wx:wx_colour().
styleSetBackground(#wx_ref{type=ThisT,ref=ThisRef},Style,Back)
when is_integer(Style),tuple_size(Back) =:= 3; tuple_size(Back) =:= 4 ->
@@ -792,7 +792,7 @@ styleSetBackground(#wx_ref{type=ThisT,ref=ThisRef},Style,Back)
<<ThisRef:32/?UI,Style:32/?UI,(wxe_util:colour_bin(Back)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetbold">external documentation</a>.
--spec styleSetBold(This, Style, Bold) -> ok when
+-spec styleSetBold(This, Style, Bold) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), Bold::boolean().
styleSetBold(#wx_ref{type=ThisT,ref=ThisRef},Style,Bold)
when is_integer(Style),is_boolean(Bold) ->
@@ -801,7 +801,7 @@ styleSetBold(#wx_ref{type=ThisT,ref=ThisRef},Style,Bold)
<<ThisRef:32/?UI,Style:32/?UI,(wxe_util:from_bool(Bold)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetitalic">external documentation</a>.
--spec styleSetItalic(This, Style, Italic) -> ok when
+-spec styleSetItalic(This, Style, Italic) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), Italic::boolean().
styleSetItalic(#wx_ref{type=ThisT,ref=ThisRef},Style,Italic)
when is_integer(Style),is_boolean(Italic) ->
@@ -810,7 +810,7 @@ styleSetItalic(#wx_ref{type=ThisT,ref=ThisRef},Style,Italic)
<<ThisRef:32/?UI,Style:32/?UI,(wxe_util:from_bool(Italic)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetsize">external documentation</a>.
--spec styleSetSize(This, Style, SizePoints) -> ok when
+-spec styleSetSize(This, Style, SizePoints) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), SizePoints::integer().
styleSetSize(#wx_ref{type=ThisT,ref=ThisRef},Style,SizePoints)
when is_integer(Style),is_integer(SizePoints) ->
@@ -819,7 +819,7 @@ styleSetSize(#wx_ref{type=ThisT,ref=ThisRef},Style,SizePoints)
<<ThisRef:32/?UI,Style:32/?UI,SizePoints:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetfacename">external documentation</a>.
--spec styleSetFaceName(This, Style, FontName) -> ok when
+-spec styleSetFaceName(This, Style, FontName) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), FontName::unicode:chardata().
styleSetFaceName(#wx_ref{type=ThisT,ref=ThisRef},Style,FontName)
when is_integer(Style),is_list(FontName) ->
@@ -829,7 +829,7 @@ styleSetFaceName(#wx_ref{type=ThisT,ref=ThisRef},Style,FontName)
<<ThisRef:32/?UI,Style:32/?UI,(byte_size(FontName_UC)):32/?UI,(FontName_UC)/binary, 0:(((8- ((4+byte_size(FontName_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstyleseteolfilled">external documentation</a>.
--spec styleSetEOLFilled(This, Style, Filled) -> ok when
+-spec styleSetEOLFilled(This, Style, Filled) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), Filled::boolean().
styleSetEOLFilled(#wx_ref{type=ThisT,ref=ThisRef},Style,Filled)
when is_integer(Style),is_boolean(Filled) ->
@@ -838,7 +838,7 @@ styleSetEOLFilled(#wx_ref{type=ThisT,ref=ThisRef},Style,Filled)
<<ThisRef:32/?UI,Style:32/?UI,(wxe_util:from_bool(Filled)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstyleresetdefault">external documentation</a>.
--spec styleResetDefault(This) -> ok when
+-spec styleResetDefault(This) -> 'ok' when
This::wxStyledTextCtrl().
styleResetDefault(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -846,7 +846,7 @@ styleResetDefault(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetunderline">external documentation</a>.
--spec styleSetUnderline(This, Style, Underline) -> ok when
+-spec styleSetUnderline(This, Style, Underline) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), Underline::boolean().
styleSetUnderline(#wx_ref{type=ThisT,ref=ThisRef},Style,Underline)
when is_integer(Style),is_boolean(Underline) ->
@@ -855,7 +855,7 @@ styleSetUnderline(#wx_ref{type=ThisT,ref=ThisRef},Style,Underline)
<<ThisRef:32/?UI,Style:32/?UI,(wxe_util:from_bool(Underline)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetcase">external documentation</a>.
--spec styleSetCase(This, Style, CaseForce) -> ok when
+-spec styleSetCase(This, Style, CaseForce) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), CaseForce::integer().
styleSetCase(#wx_ref{type=ThisT,ref=ThisRef},Style,CaseForce)
when is_integer(Style),is_integer(CaseForce) ->
@@ -864,7 +864,7 @@ styleSetCase(#wx_ref{type=ThisT,ref=ThisRef},Style,CaseForce)
<<ThisRef:32/?UI,Style:32/?UI,CaseForce:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesethotspot">external documentation</a>.
--spec styleSetHotSpot(This, Style, Hotspot) -> ok when
+-spec styleSetHotSpot(This, Style, Hotspot) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), Hotspot::boolean().
styleSetHotSpot(#wx_ref{type=ThisT,ref=ThisRef},Style,Hotspot)
when is_integer(Style),is_boolean(Hotspot) ->
@@ -873,7 +873,7 @@ styleSetHotSpot(#wx_ref{type=ThisT,ref=ThisRef},Style,Hotspot)
<<ThisRef:32/?UI,Style:32/?UI,(wxe_util:from_bool(Hotspot)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetselforeground">external documentation</a>.
--spec setSelForeground(This, UseSetting, Fore) -> ok when
+-spec setSelForeground(This, UseSetting, Fore) -> 'ok' when
This::wxStyledTextCtrl(), UseSetting::boolean(), Fore::wx:wx_colour().
setSelForeground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Fore)
when is_boolean(UseSetting),tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -882,7 +882,7 @@ setSelForeground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Fore)
<<ThisRef:32/?UI,(wxe_util:from_bool(UseSetting)):32/?UI,(wxe_util:colour_bin(Fore)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetselbackground">external documentation</a>.
--spec setSelBackground(This, UseSetting, Back) -> ok when
+-spec setSelBackground(This, UseSetting, Back) -> 'ok' when
This::wxStyledTextCtrl(), UseSetting::boolean(), Back::wx:wx_colour().
setSelBackground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Back)
when is_boolean(UseSetting),tuple_size(Back) =:= 3; tuple_size(Back) =:= 4 ->
@@ -899,7 +899,7 @@ getSelAlpha(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetselalpha">external documentation</a>.
--spec setSelAlpha(This, Alpha) -> ok when
+-spec setSelAlpha(This, Alpha) -> 'ok' when
This::wxStyledTextCtrl(), Alpha::integer().
setSelAlpha(#wx_ref{type=ThisT,ref=ThisRef},Alpha)
when is_integer(Alpha) ->
@@ -908,7 +908,7 @@ setSelAlpha(#wx_ref{type=ThisT,ref=ThisRef},Alpha)
<<ThisRef:32/?UI,Alpha:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcaretforeground">external documentation</a>.
--spec setCaretForeground(This, Fore) -> ok when
+-spec setCaretForeground(This, Fore) -> 'ok' when
This::wxStyledTextCtrl(), Fore::wx:wx_colour().
setCaretForeground(#wx_ref{type=ThisT,ref=ThisRef},Fore)
when tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -917,7 +917,7 @@ setCaretForeground(#wx_ref{type=ThisT,ref=ThisRef},Fore)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Fore)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcmdkeyassign">external documentation</a>.
--spec cmdKeyAssign(This, Key, Modifiers, Cmd) -> ok when
+-spec cmdKeyAssign(This, Key, Modifiers, Cmd) -> 'ok' when
This::wxStyledTextCtrl(), Key::integer(), Modifiers::integer(), Cmd::integer().
cmdKeyAssign(#wx_ref{type=ThisT,ref=ThisRef},Key,Modifiers,Cmd)
when is_integer(Key),is_integer(Modifiers),is_integer(Cmd) ->
@@ -926,7 +926,7 @@ cmdKeyAssign(#wx_ref{type=ThisT,ref=ThisRef},Key,Modifiers,Cmd)
<<ThisRef:32/?UI,Key:32/?UI,Modifiers:32/?UI,Cmd:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcmdkeyclear">external documentation</a>.
--spec cmdKeyClear(This, Key, Modifiers) -> ok when
+-spec cmdKeyClear(This, Key, Modifiers) -> 'ok' when
This::wxStyledTextCtrl(), Key::integer(), Modifiers::integer().
cmdKeyClear(#wx_ref{type=ThisT,ref=ThisRef},Key,Modifiers)
when is_integer(Key),is_integer(Modifiers) ->
@@ -935,7 +935,7 @@ cmdKeyClear(#wx_ref{type=ThisT,ref=ThisRef},Key,Modifiers)
<<ThisRef:32/?UI,Key:32/?UI,Modifiers:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcmdkeyclearall">external documentation</a>.
--spec cmdKeyClearAll(This) -> ok when
+-spec cmdKeyClearAll(This) -> 'ok' when
This::wxStyledTextCtrl().
cmdKeyClearAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -952,7 +952,7 @@ setStyleBytes(#wx_ref{type=ThisT,ref=ThisRef},Length)
<<ThisRef:32/?UI,Length:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetvisible">external documentation</a>.
--spec styleSetVisible(This, Style, Visible) -> ok when
+-spec styleSetVisible(This, Style, Visible) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), Visible::boolean().
styleSetVisible(#wx_ref{type=ThisT,ref=ThisRef},Style,Visible)
when is_integer(Style),is_boolean(Visible) ->
@@ -969,7 +969,7 @@ getCaretPeriod(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcaretperiod">external documentation</a>.
--spec setCaretPeriod(This, PeriodMilliseconds) -> ok when
+-spec setCaretPeriod(This, PeriodMilliseconds) -> 'ok' when
This::wxStyledTextCtrl(), PeriodMilliseconds::integer().
setCaretPeriod(#wx_ref{type=ThisT,ref=ThisRef},PeriodMilliseconds)
when is_integer(PeriodMilliseconds) ->
@@ -978,7 +978,7 @@ setCaretPeriod(#wx_ref{type=ThisT,ref=ThisRef},PeriodMilliseconds)
<<ThisRef:32/?UI,PeriodMilliseconds:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetwordchars">external documentation</a>.
--spec setWordChars(This, Characters) -> ok when
+-spec setWordChars(This, Characters) -> 'ok' when
This::wxStyledTextCtrl(), Characters::unicode:chardata().
setWordChars(#wx_ref{type=ThisT,ref=ThisRef},Characters)
when is_list(Characters) ->
@@ -988,7 +988,7 @@ setWordChars(#wx_ref{type=ThisT,ref=ThisRef},Characters)
<<ThisRef:32/?UI,(byte_size(Characters_UC)):32/?UI,(Characters_UC)/binary, 0:(((8- ((0+byte_size(Characters_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlbeginundoaction">external documentation</a>.
--spec beginUndoAction(This) -> ok when
+-spec beginUndoAction(This) -> 'ok' when
This::wxStyledTextCtrl().
beginUndoAction(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -996,7 +996,7 @@ beginUndoAction(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlendundoaction">external documentation</a>.
--spec endUndoAction(This) -> ok when
+-spec endUndoAction(This) -> 'ok' when
This::wxStyledTextCtrl().
endUndoAction(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1004,7 +1004,7 @@ endUndoAction(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlindicatorsetstyle">external documentation</a>.
--spec indicatorSetStyle(This, Indic, Style) -> ok when
+-spec indicatorSetStyle(This, Indic, Style) -> 'ok' when
This::wxStyledTextCtrl(), Indic::integer(), Style::integer().
indicatorSetStyle(#wx_ref{type=ThisT,ref=ThisRef},Indic,Style)
when is_integer(Indic),is_integer(Style) ->
@@ -1022,7 +1022,7 @@ indicatorGetStyle(#wx_ref{type=ThisT,ref=ThisRef},Indic)
<<ThisRef:32/?UI,Indic:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlindicatorsetforeground">external documentation</a>.
--spec indicatorSetForeground(This, Indic, Fore) -> ok when
+-spec indicatorSetForeground(This, Indic, Fore) -> 'ok' when
This::wxStyledTextCtrl(), Indic::integer(), Fore::wx:wx_colour().
indicatorSetForeground(#wx_ref{type=ThisT,ref=ThisRef},Indic,Fore)
when is_integer(Indic),tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -1040,7 +1040,7 @@ indicatorGetForeground(#wx_ref{type=ThisT,ref=ThisRef},Indic)
<<ThisRef:32/?UI,Indic:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetwhitespaceforeground">external documentation</a>.
--spec setWhitespaceForeground(This, UseSetting, Fore) -> ok when
+-spec setWhitespaceForeground(This, UseSetting, Fore) -> 'ok' when
This::wxStyledTextCtrl(), UseSetting::boolean(), Fore::wx:wx_colour().
setWhitespaceForeground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Fore)
when is_boolean(UseSetting),tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -1049,7 +1049,7 @@ setWhitespaceForeground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Fore)
<<ThisRef:32/?UI,(wxe_util:from_bool(UseSetting)):32/?UI,(wxe_util:colour_bin(Fore)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetwhitespacebackground">external documentation</a>.
--spec setWhitespaceBackground(This, UseSetting, Back) -> ok when
+-spec setWhitespaceBackground(This, UseSetting, Back) -> 'ok' when
This::wxStyledTextCtrl(), UseSetting::boolean(), Back::wx:wx_colour().
setWhitespaceBackground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Back)
when is_boolean(UseSetting),tuple_size(Back) =:= 3; tuple_size(Back) =:= 4 ->
@@ -1066,7 +1066,7 @@ getStyleBits(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetlinestate">external documentation</a>.
--spec setLineState(This, Line, State) -> ok when
+-spec setLineState(This, Line, State) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer(), State::integer().
setLineState(#wx_ref{type=ThisT,ref=ThisRef},Line,State)
when is_integer(Line),is_integer(State) ->
@@ -1100,7 +1100,7 @@ getCaretLineVisible(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcaretlinevisible">external documentation</a>.
--spec setCaretLineVisible(This, Show) -> ok when
+-spec setCaretLineVisible(This, Show) -> 'ok' when
This::wxStyledTextCtrl(), Show::boolean().
setCaretLineVisible(#wx_ref{type=ThisT,ref=ThisRef},Show)
when is_boolean(Show) ->
@@ -1117,7 +1117,7 @@ getCaretLineBackground(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcaretlinebackground">external documentation</a>.
--spec setCaretLineBackground(This, Back) -> ok when
+-spec setCaretLineBackground(This, Back) -> 'ok' when
This::wxStyledTextCtrl(), Back::wx:wx_colour().
setCaretLineBackground(#wx_ref{type=ThisT,ref=ThisRef},Back)
when tuple_size(Back) =:= 3; tuple_size(Back) =:= 4 ->
@@ -1126,7 +1126,7 @@ setCaretLineBackground(#wx_ref{type=ThisT,ref=ThisRef},Back)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Back)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompshow">external documentation</a>.
--spec autoCompShow(This, LenEntered, ItemList) -> ok when
+-spec autoCompShow(This, LenEntered, ItemList) -> 'ok' when
This::wxStyledTextCtrl(), LenEntered::integer(), ItemList::unicode:chardata().
autoCompShow(#wx_ref{type=ThisT,ref=ThisRef},LenEntered,ItemList)
when is_integer(LenEntered),is_list(ItemList) ->
@@ -1136,7 +1136,7 @@ autoCompShow(#wx_ref{type=ThisT,ref=ThisRef},LenEntered,ItemList)
<<ThisRef:32/?UI,LenEntered:32/?UI,(byte_size(ItemList_UC)):32/?UI,(ItemList_UC)/binary, 0:(((8- ((4+byte_size(ItemList_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompcancel">external documentation</a>.
--spec autoCompCancel(This) -> ok when
+-spec autoCompCancel(This) -> 'ok' when
This::wxStyledTextCtrl().
autoCompCancel(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1160,7 +1160,7 @@ autoCompPosStart(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompcomplete">external documentation</a>.
--spec autoCompComplete(This) -> ok when
+-spec autoCompComplete(This) -> 'ok' when
This::wxStyledTextCtrl().
autoCompComplete(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1168,7 +1168,7 @@ autoCompComplete(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompstops">external documentation</a>.
--spec autoCompStops(This, CharacterSet) -> ok when
+-spec autoCompStops(This, CharacterSet) -> 'ok' when
This::wxStyledTextCtrl(), CharacterSet::unicode:chardata().
autoCompStops(#wx_ref{type=ThisT,ref=ThisRef},CharacterSet)
when is_list(CharacterSet) ->
@@ -1178,7 +1178,7 @@ autoCompStops(#wx_ref{type=ThisT,ref=ThisRef},CharacterSet)
<<ThisRef:32/?UI,(byte_size(CharacterSet_UC)):32/?UI,(CharacterSet_UC)/binary, 0:(((8- ((0+byte_size(CharacterSet_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsetseparator">external documentation</a>.
--spec autoCompSetSeparator(This, SeparatorCharacter) -> ok when
+-spec autoCompSetSeparator(This, SeparatorCharacter) -> 'ok' when
This::wxStyledTextCtrl(), SeparatorCharacter::integer().
autoCompSetSeparator(#wx_ref{type=ThisT,ref=ThisRef},SeparatorCharacter)
when is_integer(SeparatorCharacter) ->
@@ -1195,7 +1195,7 @@ autoCompGetSeparator(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompselect">external documentation</a>.
--spec autoCompSelect(This, Text) -> ok when
+-spec autoCompSelect(This, Text) -> 'ok' when
This::wxStyledTextCtrl(), Text::unicode:chardata().
autoCompSelect(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -1205,7 +1205,7 @@ autoCompSelect(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsetcancelatstart">external documentation</a>.
--spec autoCompSetCancelAtStart(This, Cancel) -> ok when
+-spec autoCompSetCancelAtStart(This, Cancel) -> 'ok' when
This::wxStyledTextCtrl(), Cancel::boolean().
autoCompSetCancelAtStart(#wx_ref{type=ThisT,ref=ThisRef},Cancel)
when is_boolean(Cancel) ->
@@ -1222,7 +1222,7 @@ autoCompGetCancelAtStart(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsetfillups">external documentation</a>.
--spec autoCompSetFillUps(This, CharacterSet) -> ok when
+-spec autoCompSetFillUps(This, CharacterSet) -> 'ok' when
This::wxStyledTextCtrl(), CharacterSet::unicode:chardata().
autoCompSetFillUps(#wx_ref{type=ThisT,ref=ThisRef},CharacterSet)
when is_list(CharacterSet) ->
@@ -1232,7 +1232,7 @@ autoCompSetFillUps(#wx_ref{type=ThisT,ref=ThisRef},CharacterSet)
<<ThisRef:32/?UI,(byte_size(CharacterSet_UC)):32/?UI,(CharacterSet_UC)/binary, 0:(((8- ((0+byte_size(CharacterSet_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsetchoosesingle">external documentation</a>.
--spec autoCompSetChooseSingle(This, ChooseSingle) -> ok when
+-spec autoCompSetChooseSingle(This, ChooseSingle) -> 'ok' when
This::wxStyledTextCtrl(), ChooseSingle::boolean().
autoCompSetChooseSingle(#wx_ref{type=ThisT,ref=ThisRef},ChooseSingle)
when is_boolean(ChooseSingle) ->
@@ -1249,7 +1249,7 @@ autoCompGetChooseSingle(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsetignorecase">external documentation</a>.
--spec autoCompSetIgnoreCase(This, IgnoreCase) -> ok when
+-spec autoCompSetIgnoreCase(This, IgnoreCase) -> 'ok' when
This::wxStyledTextCtrl(), IgnoreCase::boolean().
autoCompSetIgnoreCase(#wx_ref{type=ThisT,ref=ThisRef},IgnoreCase)
when is_boolean(IgnoreCase) ->
@@ -1266,7 +1266,7 @@ autoCompGetIgnoreCase(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrluserlistshow">external documentation</a>.
--spec userListShow(This, ListType, ItemList) -> ok when
+-spec userListShow(This, ListType, ItemList) -> 'ok' when
This::wxStyledTextCtrl(), ListType::integer(), ItemList::unicode:chardata().
userListShow(#wx_ref{type=ThisT,ref=ThisRef},ListType,ItemList)
when is_integer(ListType),is_list(ItemList) ->
@@ -1276,7 +1276,7 @@ userListShow(#wx_ref{type=ThisT,ref=ThisRef},ListType,ItemList)
<<ThisRef:32/?UI,ListType:32/?UI,(byte_size(ItemList_UC)):32/?UI,(ItemList_UC)/binary, 0:(((8- ((4+byte_size(ItemList_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsetautohide">external documentation</a>.
--spec autoCompSetAutoHide(This, AutoHide) -> ok when
+-spec autoCompSetAutoHide(This, AutoHide) -> 'ok' when
This::wxStyledTextCtrl(), AutoHide::boolean().
autoCompSetAutoHide(#wx_ref{type=ThisT,ref=ThisRef},AutoHide)
when is_boolean(AutoHide) ->
@@ -1293,7 +1293,7 @@ autoCompGetAutoHide(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsetdroprestofword">external documentation</a>.
--spec autoCompSetDropRestOfWord(This, DropRestOfWord) -> ok when
+-spec autoCompSetDropRestOfWord(This, DropRestOfWord) -> 'ok' when
This::wxStyledTextCtrl(), DropRestOfWord::boolean().
autoCompSetDropRestOfWord(#wx_ref{type=ThisT,ref=ThisRef},DropRestOfWord)
when is_boolean(DropRestOfWord) ->
@@ -1310,7 +1310,7 @@ autoCompGetDropRestOfWord(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlregisterimage">external documentation</a>.
--spec registerImage(This, Type, Bmp) -> ok when
+-spec registerImage(This, Type, Bmp) -> 'ok' when
This::wxStyledTextCtrl(), Type::integer(), Bmp::wxBitmap:wxBitmap().
registerImage(#wx_ref{type=ThisT,ref=ThisRef},Type,#wx_ref{type=BmpT,ref=BmpRef})
when is_integer(Type) ->
@@ -1320,7 +1320,7 @@ registerImage(#wx_ref{type=ThisT,ref=ThisRef},Type,#wx_ref{type=BmpT,ref=BmpRef}
<<ThisRef:32/?UI,Type:32/?UI,BmpRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlclearregisteredimages">external documentation</a>.
--spec clearRegisteredImages(This) -> ok when
+-spec clearRegisteredImages(This) -> 'ok' when
This::wxStyledTextCtrl().
clearRegisteredImages(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1336,7 +1336,7 @@ autoCompGetTypeSeparator(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsettypeseparator">external documentation</a>.
--spec autoCompSetTypeSeparator(This, SeparatorCharacter) -> ok when
+-spec autoCompSetTypeSeparator(This, SeparatorCharacter) -> 'ok' when
This::wxStyledTextCtrl(), SeparatorCharacter::integer().
autoCompSetTypeSeparator(#wx_ref{type=ThisT,ref=ThisRef},SeparatorCharacter)
when is_integer(SeparatorCharacter) ->
@@ -1345,7 +1345,7 @@ autoCompSetTypeSeparator(#wx_ref{type=ThisT,ref=ThisRef},SeparatorCharacter)
<<ThisRef:32/?UI,SeparatorCharacter:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsetmaxwidth">external documentation</a>.
--spec autoCompSetMaxWidth(This, CharacterCount) -> ok when
+-spec autoCompSetMaxWidth(This, CharacterCount) -> 'ok' when
This::wxStyledTextCtrl(), CharacterCount::integer().
autoCompSetMaxWidth(#wx_ref{type=ThisT,ref=ThisRef},CharacterCount)
when is_integer(CharacterCount) ->
@@ -1362,7 +1362,7 @@ autoCompGetMaxWidth(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlautocompsetmaxheight">external documentation</a>.
--spec autoCompSetMaxHeight(This, RowCount) -> ok when
+-spec autoCompSetMaxHeight(This, RowCount) -> 'ok' when
This::wxStyledTextCtrl(), RowCount::integer().
autoCompSetMaxHeight(#wx_ref{type=ThisT,ref=ThisRef},RowCount)
when is_integer(RowCount) ->
@@ -1379,7 +1379,7 @@ autoCompGetMaxHeight(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetindent">external documentation</a>.
--spec setIndent(This, IndentSize) -> ok when
+-spec setIndent(This, IndentSize) -> 'ok' when
This::wxStyledTextCtrl(), IndentSize::integer().
setIndent(#wx_ref{type=ThisT,ref=ThisRef},IndentSize)
when is_integer(IndentSize) ->
@@ -1396,7 +1396,7 @@ getIndent(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetusetabs">external documentation</a>.
--spec setUseTabs(This, UseTabs) -> ok when
+-spec setUseTabs(This, UseTabs) -> 'ok' when
This::wxStyledTextCtrl(), UseTabs::boolean().
setUseTabs(#wx_ref{type=ThisT,ref=ThisRef},UseTabs)
when is_boolean(UseTabs) ->
@@ -1413,7 +1413,7 @@ getUseTabs(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetlineindentation">external documentation</a>.
--spec setLineIndentation(This, Line, IndentSize) -> ok when
+-spec setLineIndentation(This, Line, IndentSize) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer(), IndentSize::integer().
setLineIndentation(#wx_ref{type=ThisT,ref=ThisRef},Line,IndentSize)
when is_integer(Line),is_integer(IndentSize) ->
@@ -1449,7 +1449,7 @@ getColumn(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetusehorizontalscrollbar">external documentation</a>.
--spec setUseHorizontalScrollBar(This, Show) -> ok when
+-spec setUseHorizontalScrollBar(This, Show) -> 'ok' when
This::wxStyledTextCtrl(), Show::boolean().
setUseHorizontalScrollBar(#wx_ref{type=ThisT,ref=ThisRef},Show)
when is_boolean(Show) ->
@@ -1466,7 +1466,7 @@ getUseHorizontalScrollBar(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetindentationguides">external documentation</a>.
--spec setIndentationGuides(This, Show) -> ok when
+-spec setIndentationGuides(This, Show) -> 'ok' when
This::wxStyledTextCtrl(), Show::boolean().
setIndentationGuides(#wx_ref{type=ThisT,ref=ThisRef},Show)
when is_boolean(Show) ->
@@ -1483,7 +1483,7 @@ getIndentationGuides(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsethighlightguide">external documentation</a>.
--spec setHighlightGuide(This, Column) -> ok when
+-spec setHighlightGuide(This, Column) -> 'ok' when
This::wxStyledTextCtrl(), Column::integer().
setHighlightGuide(#wx_ref{type=ThisT,ref=ThisRef},Column)
when is_integer(Column) ->
@@ -1533,7 +1533,7 @@ getReadOnly(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcurrentpos">external documentation</a>.
--spec setCurrentPos(This, Pos) -> ok when
+-spec setCurrentPos(This, Pos) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer().
setCurrentPos(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -1542,7 +1542,7 @@ setCurrentPos(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetselectionstart">external documentation</a>.
--spec setSelectionStart(This, Pos) -> ok when
+-spec setSelectionStart(This, Pos) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer().
setSelectionStart(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -1559,7 +1559,7 @@ getSelectionStart(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetselectionend">external documentation</a>.
--spec setSelectionEnd(This, Pos) -> ok when
+-spec setSelectionEnd(This, Pos) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer().
setSelectionEnd(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -1576,7 +1576,7 @@ getSelectionEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetprintmagnification">external documentation</a>.
--spec setPrintMagnification(This, Magnification) -> ok when
+-spec setPrintMagnification(This, Magnification) -> 'ok' when
This::wxStyledTextCtrl(), Magnification::integer().
setPrintMagnification(#wx_ref{type=ThisT,ref=ThisRef},Magnification)
when is_integer(Magnification) ->
@@ -1593,7 +1593,7 @@ getPrintMagnification(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetprintcolourmode">external documentation</a>.
--spec setPrintColourMode(This, Mode) -> ok when
+-spec setPrintColourMode(This, Mode) -> 'ok' when
This::wxStyledTextCtrl(), Mode::integer().
setPrintColourMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
when is_integer(Mode) ->
@@ -1620,7 +1620,7 @@ findText(This,MinPos,MaxPos,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlfindtext">external documentation</a>.
-spec findText(This, MinPos, MaxPos, Text, [Option]) -> integer() when
This::wxStyledTextCtrl(), MinPos::integer(), MaxPos::integer(), Text::unicode:chardata(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
findText(#wx_ref{type=ThisT,ref=ThisRef},MinPos,MaxPos,Text, Options)
when is_integer(MinPos),is_integer(MaxPos),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1668,7 +1668,7 @@ getLineCount(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmarginleft">external documentation</a>.
--spec setMarginLeft(This, PixelWidth) -> ok when
+-spec setMarginLeft(This, PixelWidth) -> 'ok' when
This::wxStyledTextCtrl(), PixelWidth::integer().
setMarginLeft(#wx_ref{type=ThisT,ref=ThisRef},PixelWidth)
when is_integer(PixelWidth) ->
@@ -1685,7 +1685,7 @@ getMarginLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmarginright">external documentation</a>.
--spec setMarginRight(This, PixelWidth) -> ok when
+-spec setMarginRight(This, PixelWidth) -> 'ok' when
This::wxStyledTextCtrl(), PixelWidth::integer().
setMarginRight(#wx_ref{type=ThisT,ref=ThisRef},PixelWidth)
when is_integer(PixelWidth) ->
@@ -1710,7 +1710,7 @@ getModify(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetselection">external documentation</a>.
--spec setSelection(This, Start, End) -> ok when
+-spec setSelection(This, Start, End) -> 'ok' when
This::wxStyledTextCtrl(), Start::integer(), End::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},Start,End)
when is_integer(Start),is_integer(End) ->
@@ -1736,7 +1736,7 @@ getTextRange(#wx_ref{type=ThisT,ref=ThisRef},StartPos,EndPos)
<<ThisRef:32/?UI,StartPos:32/?UI,EndPos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlhideselection">external documentation</a>.
--spec hideSelection(This, Normal) -> ok when
+-spec hideSelection(This, Normal) -> 'ok' when
This::wxStyledTextCtrl(), Normal::boolean().
hideSelection(#wx_ref{type=ThisT,ref=ThisRef},Normal)
when is_boolean(Normal) ->
@@ -1763,7 +1763,7 @@ positionFromLine(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinescroll">external documentation</a>.
--spec lineScroll(This, Columns, Lines) -> ok when
+-spec lineScroll(This, Columns, Lines) -> 'ok' when
This::wxStyledTextCtrl(), Columns::integer(), Lines::integer().
lineScroll(#wx_ref{type=ThisT,ref=ThisRef},Columns,Lines)
when is_integer(Columns),is_integer(Lines) ->
@@ -1772,7 +1772,7 @@ lineScroll(#wx_ref{type=ThisT,ref=ThisRef},Columns,Lines)
<<ThisRef:32/?UI,Columns:32/?UI,Lines:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlensurecaretvisible">external documentation</a>.
--spec ensureCaretVisible(This) -> ok when
+-spec ensureCaretVisible(This) -> 'ok' when
This::wxStyledTextCtrl().
ensureCaretVisible(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1780,7 +1780,7 @@ ensureCaretVisible(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlreplaceselection">external documentation</a>.
--spec replaceSelection(This, Text) -> ok when
+-spec replaceSelection(This, Text) -> 'ok' when
This::wxStyledTextCtrl(), Text::unicode:chardata().
replaceSelection(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -1790,7 +1790,7 @@ replaceSelection(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetreadonly">external documentation</a>.
--spec setReadOnly(This, ReadOnly) -> ok when
+-spec setReadOnly(This, ReadOnly) -> 'ok' when
This::wxStyledTextCtrl(), ReadOnly::boolean().
setReadOnly(#wx_ref{type=ThisT,ref=ThisRef},ReadOnly)
when is_boolean(ReadOnly) ->
@@ -1815,7 +1815,7 @@ canUndo(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlemptyundobuffer">external documentation</a>.
--spec emptyUndoBuffer(This) -> ok when
+-spec emptyUndoBuffer(This) -> 'ok' when
This::wxStyledTextCtrl().
emptyUndoBuffer(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1823,7 +1823,7 @@ emptyUndoBuffer(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlundo">external documentation</a>.
--spec undo(This) -> ok when
+-spec undo(This) -> 'ok' when
This::wxStyledTextCtrl().
undo(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1831,7 +1831,7 @@ undo(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcut">external documentation</a>.
--spec cut(This) -> ok when
+-spec cut(This) -> 'ok' when
This::wxStyledTextCtrl().
cut(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1839,7 +1839,7 @@ cut(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcopy">external documentation</a>.
--spec copy(This) -> ok when
+-spec copy(This) -> 'ok' when
This::wxStyledTextCtrl().
copy(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1847,7 +1847,7 @@ copy(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlpaste">external documentation</a>.
--spec paste(This) -> ok when
+-spec paste(This) -> 'ok' when
This::wxStyledTextCtrl().
paste(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1855,7 +1855,7 @@ paste(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlclear">external documentation</a>.
--spec clear(This) -> ok when
+-spec clear(This) -> 'ok' when
This::wxStyledTextCtrl().
clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -1863,7 +1863,7 @@ clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsettext">external documentation</a>.
--spec setText(This, Text) -> ok when
+-spec setText(This, Text) -> 'ok' when
This::wxStyledTextCtrl(), Text::unicode:chardata().
setText(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -1897,7 +1897,7 @@ getOvertype(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcaretwidth">external documentation</a>.
--spec setCaretWidth(This, PixelWidth) -> ok when
+-spec setCaretWidth(This, PixelWidth) -> 'ok' when
This::wxStyledTextCtrl(), PixelWidth::integer().
setCaretWidth(#wx_ref{type=ThisT,ref=ThisRef},PixelWidth)
when is_integer(PixelWidth) ->
@@ -1914,7 +1914,7 @@ getCaretWidth(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsettargetstart">external documentation</a>.
--spec setTargetStart(This, Pos) -> ok when
+-spec setTargetStart(This, Pos) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer().
setTargetStart(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -1931,7 +1931,7 @@ getTargetStart(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsettargetend">external documentation</a>.
--spec setTargetEnd(This, Pos) -> ok when
+-spec setTargetEnd(This, Pos) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer().
setTargetEnd(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -1968,7 +1968,7 @@ searchInTarget(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetsearchflags">external documentation</a>.
--spec setSearchFlags(This, Flags) -> ok when
+-spec setSearchFlags(This, Flags) -> 'ok' when
This::wxStyledTextCtrl(), Flags::integer().
setSearchFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
when is_integer(Flags) ->
@@ -1985,7 +1985,7 @@ getSearchFlags(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcalltipshow">external documentation</a>.
--spec callTipShow(This, Pos, Definition) -> ok when
+-spec callTipShow(This, Pos, Definition) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer(), Definition::unicode:chardata().
callTipShow(#wx_ref{type=ThisT,ref=ThisRef},Pos,Definition)
when is_integer(Pos),is_list(Definition) ->
@@ -1995,7 +1995,7 @@ callTipShow(#wx_ref{type=ThisT,ref=ThisRef},Pos,Definition)
<<ThisRef:32/?UI,Pos:32/?UI,(byte_size(Definition_UC)):32/?UI,(Definition_UC)/binary, 0:(((8- ((4+byte_size(Definition_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcalltipcancel">external documentation</a>.
--spec callTipCancel(This) -> ok when
+-spec callTipCancel(This) -> 'ok' when
This::wxStyledTextCtrl().
callTipCancel(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2019,7 +2019,7 @@ callTipPosAtStart(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcalltipsethighlight">external documentation</a>.
--spec callTipSetHighlight(This, Start, End) -> ok when
+-spec callTipSetHighlight(This, Start, End) -> 'ok' when
This::wxStyledTextCtrl(), Start::integer(), End::integer().
callTipSetHighlight(#wx_ref{type=ThisT,ref=ThisRef},Start,End)
when is_integer(Start),is_integer(End) ->
@@ -2028,7 +2028,7 @@ callTipSetHighlight(#wx_ref{type=ThisT,ref=ThisRef},Start,End)
<<ThisRef:32/?UI,Start:32/?UI,End:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcalltipsetbackground">external documentation</a>.
--spec callTipSetBackground(This, Back) -> ok when
+-spec callTipSetBackground(This, Back) -> 'ok' when
This::wxStyledTextCtrl(), Back::wx:wx_colour().
callTipSetBackground(#wx_ref{type=ThisT,ref=ThisRef},Back)
when tuple_size(Back) =:= 3; tuple_size(Back) =:= 4 ->
@@ -2037,7 +2037,7 @@ callTipSetBackground(#wx_ref{type=ThisT,ref=ThisRef},Back)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Back)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcalltipsetforeground">external documentation</a>.
--spec callTipSetForeground(This, Fore) -> ok when
+-spec callTipSetForeground(This, Fore) -> 'ok' when
This::wxStyledTextCtrl(), Fore::wx:wx_colour().
callTipSetForeground(#wx_ref{type=ThisT,ref=ThisRef},Fore)
when tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -2046,7 +2046,7 @@ callTipSetForeground(#wx_ref{type=ThisT,ref=ThisRef},Fore)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Fore)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcalltipsetforegroundhighlight">external documentation</a>.
--spec callTipSetForegroundHighlight(This, Fore) -> ok when
+-spec callTipSetForegroundHighlight(This, Fore) -> 'ok' when
This::wxStyledTextCtrl(), Fore::wx:wx_colour().
callTipSetForegroundHighlight(#wx_ref{type=ThisT,ref=ThisRef},Fore)
when tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -2055,7 +2055,7 @@ callTipSetForegroundHighlight(#wx_ref{type=ThisT,ref=ThisRef},Fore)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Fore)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcalltipusestyle">external documentation</a>.
--spec callTipUseStyle(This, TabSize) -> ok when
+-spec callTipUseStyle(This, TabSize) -> 'ok' when
This::wxStyledTextCtrl(), TabSize::integer().
callTipUseStyle(#wx_ref{type=ThisT,ref=ThisRef},TabSize)
when is_integer(TabSize) ->
@@ -2091,7 +2091,7 @@ wrapCount(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetfoldlevel">external documentation</a>.
--spec setFoldLevel(This, Line, Level) -> ok when
+-spec setFoldLevel(This, Line, Level) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer(), Level::integer().
setFoldLevel(#wx_ref{type=ThisT,ref=ThisRef},Line,Level)
when is_integer(Line),is_integer(Level) ->
@@ -2127,7 +2127,7 @@ getFoldParent(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlshowlines">external documentation</a>.
--spec showLines(This, LineStart, LineEnd) -> ok when
+-spec showLines(This, LineStart, LineEnd) -> 'ok' when
This::wxStyledTextCtrl(), LineStart::integer(), LineEnd::integer().
showLines(#wx_ref{type=ThisT,ref=ThisRef},LineStart,LineEnd)
when is_integer(LineStart),is_integer(LineEnd) ->
@@ -2136,7 +2136,7 @@ showLines(#wx_ref{type=ThisT,ref=ThisRef},LineStart,LineEnd)
<<ThisRef:32/?UI,LineStart:32/?UI,LineEnd:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlhidelines">external documentation</a>.
--spec hideLines(This, LineStart, LineEnd) -> ok when
+-spec hideLines(This, LineStart, LineEnd) -> 'ok' when
This::wxStyledTextCtrl(), LineStart::integer(), LineEnd::integer().
hideLines(#wx_ref{type=ThisT,ref=ThisRef},LineStart,LineEnd)
when is_integer(LineStart),is_integer(LineEnd) ->
@@ -2154,7 +2154,7 @@ getLineVisible(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetfoldexpanded">external documentation</a>.
--spec setFoldExpanded(This, Line, Expanded) -> ok when
+-spec setFoldExpanded(This, Line, Expanded) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer(), Expanded::boolean().
setFoldExpanded(#wx_ref{type=ThisT,ref=ThisRef},Line,Expanded)
when is_integer(Line),is_boolean(Expanded) ->
@@ -2172,7 +2172,7 @@ getFoldExpanded(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrltogglefold">external documentation</a>.
--spec toggleFold(This, Line) -> ok when
+-spec toggleFold(This, Line) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer().
toggleFold(#wx_ref{type=ThisT,ref=ThisRef},Line)
when is_integer(Line) ->
@@ -2181,7 +2181,7 @@ toggleFold(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlensurevisible">external documentation</a>.
--spec ensureVisible(This, Line) -> ok when
+-spec ensureVisible(This, Line) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer().
ensureVisible(#wx_ref{type=ThisT,ref=ThisRef},Line)
when is_integer(Line) ->
@@ -2190,7 +2190,7 @@ ensureVisible(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetfoldflags">external documentation</a>.
--spec setFoldFlags(This, Flags) -> ok when
+-spec setFoldFlags(This, Flags) -> 'ok' when
This::wxStyledTextCtrl(), Flags::integer().
setFoldFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
when is_integer(Flags) ->
@@ -2199,7 +2199,7 @@ setFoldFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
<<ThisRef:32/?UI,Flags:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlensurevisibleenforcepolicy">external documentation</a>.
--spec ensureVisibleEnforcePolicy(This, Line) -> ok when
+-spec ensureVisibleEnforcePolicy(This, Line) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer().
ensureVisibleEnforcePolicy(#wx_ref{type=ThisT,ref=ThisRef},Line)
when is_integer(Line) ->
@@ -2208,7 +2208,7 @@ ensureVisibleEnforcePolicy(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsettabindents">external documentation</a>.
--spec setTabIndents(This, TabIndents) -> ok when
+-spec setTabIndents(This, TabIndents) -> 'ok' when
This::wxStyledTextCtrl(), TabIndents::boolean().
setTabIndents(#wx_ref{type=ThisT,ref=ThisRef},TabIndents)
when is_boolean(TabIndents) ->
@@ -2225,7 +2225,7 @@ getTabIndents(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetbackspaceunindents">external documentation</a>.
--spec setBackSpaceUnIndents(This, BsUnIndents) -> ok when
+-spec setBackSpaceUnIndents(This, BsUnIndents) -> 'ok' when
This::wxStyledTextCtrl(), BsUnIndents::boolean().
setBackSpaceUnIndents(#wx_ref{type=ThisT,ref=ThisRef},BsUnIndents)
when is_boolean(BsUnIndents) ->
@@ -2242,7 +2242,7 @@ getBackSpaceUnIndents(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmousedwelltime">external documentation</a>.
--spec setMouseDwellTime(This, PeriodMilliseconds) -> ok when
+-spec setMouseDwellTime(This, PeriodMilliseconds) -> 'ok' when
This::wxStyledTextCtrl(), PeriodMilliseconds::integer().
setMouseDwellTime(#wx_ref{type=ThisT,ref=ThisRef},PeriodMilliseconds)
when is_integer(PeriodMilliseconds) ->
@@ -2277,7 +2277,7 @@ wordEndPosition(#wx_ref{type=ThisT,ref=ThisRef},Pos,OnlyWordCharacters)
<<ThisRef:32/?UI,Pos:32/?UI,(wxe_util:from_bool(OnlyWordCharacters)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetwrapmode">external documentation</a>.
--spec setWrapMode(This, Mode) -> ok when
+-spec setWrapMode(This, Mode) -> 'ok' when
This::wxStyledTextCtrl(), Mode::integer().
setWrapMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
when is_integer(Mode) ->
@@ -2294,7 +2294,7 @@ getWrapMode(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetwrapvisualflags">external documentation</a>.
--spec setWrapVisualFlags(This, WrapVisualFlags) -> ok when
+-spec setWrapVisualFlags(This, WrapVisualFlags) -> 'ok' when
This::wxStyledTextCtrl(), WrapVisualFlags::integer().
setWrapVisualFlags(#wx_ref{type=ThisT,ref=ThisRef},WrapVisualFlags)
when is_integer(WrapVisualFlags) ->
@@ -2311,7 +2311,7 @@ getWrapVisualFlags(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetwrapvisualflagslocation">external documentation</a>.
--spec setWrapVisualFlagsLocation(This, WrapVisualFlagsLocation) -> ok when
+-spec setWrapVisualFlagsLocation(This, WrapVisualFlagsLocation) -> 'ok' when
This::wxStyledTextCtrl(), WrapVisualFlagsLocation::integer().
setWrapVisualFlagsLocation(#wx_ref{type=ThisT,ref=ThisRef},WrapVisualFlagsLocation)
when is_integer(WrapVisualFlagsLocation) ->
@@ -2328,7 +2328,7 @@ getWrapVisualFlagsLocation(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetwrapstartindent">external documentation</a>.
--spec setWrapStartIndent(This, Indent) -> ok when
+-spec setWrapStartIndent(This, Indent) -> 'ok' when
This::wxStyledTextCtrl(), Indent::integer().
setWrapStartIndent(#wx_ref{type=ThisT,ref=ThisRef},Indent)
when is_integer(Indent) ->
@@ -2345,7 +2345,7 @@ getWrapStartIndent(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetlayoutcache">external documentation</a>.
--spec setLayoutCache(This, Mode) -> ok when
+-spec setLayoutCache(This, Mode) -> 'ok' when
This::wxStyledTextCtrl(), Mode::integer().
setLayoutCache(#wx_ref{type=ThisT,ref=ThisRef},Mode)
when is_integer(Mode) ->
@@ -2362,7 +2362,7 @@ getLayoutCache(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetscrollwidth">external documentation</a>.
--spec setScrollWidth(This, PixelWidth) -> ok when
+-spec setScrollWidth(This, PixelWidth) -> 'ok' when
This::wxStyledTextCtrl(), PixelWidth::integer().
setScrollWidth(#wx_ref{type=ThisT,ref=ThisRef},PixelWidth)
when is_integer(PixelWidth) ->
@@ -2406,7 +2406,7 @@ textHeight(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetuseverticalscrollbar">external documentation</a>.
--spec setUseVerticalScrollBar(This, Show) -> ok when
+-spec setUseVerticalScrollBar(This, Show) -> 'ok' when
This::wxStyledTextCtrl(), Show::boolean().
setUseVerticalScrollBar(#wx_ref{type=ThisT,ref=ThisRef},Show)
when is_boolean(Show) ->
@@ -2423,7 +2423,7 @@ getUseVerticalScrollBar(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlappendtext">external documentation</a>.
--spec appendText(This, Text) -> ok when
+-spec appendText(This, Text) -> 'ok' when
This::wxStyledTextCtrl(), Text::unicode:chardata().
appendText(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -2441,7 +2441,7 @@ getTwoPhaseDraw(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsettwophasedraw">external documentation</a>.
--spec setTwoPhaseDraw(This, TwoPhase) -> ok when
+-spec setTwoPhaseDraw(This, TwoPhase) -> 'ok' when
This::wxStyledTextCtrl(), TwoPhase::boolean().
setTwoPhaseDraw(#wx_ref{type=ThisT,ref=ThisRef},TwoPhase)
when is_boolean(TwoPhase) ->
@@ -2450,7 +2450,7 @@ setTwoPhaseDraw(#wx_ref{type=ThisT,ref=ThisRef},TwoPhase)
<<ThisRef:32/?UI,(wxe_util:from_bool(TwoPhase)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrltargetfromselection">external documentation</a>.
--spec targetFromSelection(This) -> ok when
+-spec targetFromSelection(This) -> 'ok' when
This::wxStyledTextCtrl().
targetFromSelection(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2458,7 +2458,7 @@ targetFromSelection(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinesjoin">external documentation</a>.
--spec linesJoin(This) -> ok when
+-spec linesJoin(This) -> 'ok' when
This::wxStyledTextCtrl().
linesJoin(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2466,7 +2466,7 @@ linesJoin(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinessplit">external documentation</a>.
--spec linesSplit(This, PixelWidth) -> ok when
+-spec linesSplit(This, PixelWidth) -> 'ok' when
This::wxStyledTextCtrl(), PixelWidth::integer().
linesSplit(#wx_ref{type=ThisT,ref=ThisRef},PixelWidth)
when is_integer(PixelWidth) ->
@@ -2475,7 +2475,7 @@ linesSplit(#wx_ref{type=ThisT,ref=ThisRef},PixelWidth)
<<ThisRef:32/?UI,PixelWidth:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetfoldmargincolour">external documentation</a>.
--spec setFoldMarginColour(This, UseSetting, Back) -> ok when
+-spec setFoldMarginColour(This, UseSetting, Back) -> 'ok' when
This::wxStyledTextCtrl(), UseSetting::boolean(), Back::wx:wx_colour().
setFoldMarginColour(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Back)
when is_boolean(UseSetting),tuple_size(Back) =:= 3; tuple_size(Back) =:= 4 ->
@@ -2484,7 +2484,7 @@ setFoldMarginColour(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Back)
<<ThisRef:32/?UI,(wxe_util:from_bool(UseSetting)):32/?UI,(wxe_util:colour_bin(Back)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetfoldmarginhicolour">external documentation</a>.
--spec setFoldMarginHiColour(This, UseSetting, Fore) -> ok when
+-spec setFoldMarginHiColour(This, UseSetting, Fore) -> 'ok' when
This::wxStyledTextCtrl(), UseSetting::boolean(), Fore::wx:wx_colour().
setFoldMarginHiColour(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Fore)
when is_boolean(UseSetting),tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -2493,7 +2493,7 @@ setFoldMarginHiColour(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Fore)
<<ThisRef:32/?UI,(wxe_util:from_bool(UseSetting)):32/?UI,(wxe_util:colour_bin(Fore)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinedown">external documentation</a>.
--spec lineDown(This) -> ok when
+-spec lineDown(This) -> 'ok' when
This::wxStyledTextCtrl().
lineDown(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2501,7 +2501,7 @@ lineDown(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinedownextend">external documentation</a>.
--spec lineDownExtend(This) -> ok when
+-spec lineDownExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
lineDownExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2509,7 +2509,7 @@ lineDownExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineup">external documentation</a>.
--spec lineUp(This) -> ok when
+-spec lineUp(This) -> 'ok' when
This::wxStyledTextCtrl().
lineUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2517,7 +2517,7 @@ lineUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineupextend">external documentation</a>.
--spec lineUpExtend(This) -> ok when
+-spec lineUpExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
lineUpExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2525,7 +2525,7 @@ lineUpExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcharleft">external documentation</a>.
--spec charLeft(This) -> ok when
+-spec charLeft(This) -> 'ok' when
This::wxStyledTextCtrl().
charLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2533,7 +2533,7 @@ charLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcharleftextend">external documentation</a>.
--spec charLeftExtend(This) -> ok when
+-spec charLeftExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
charLeftExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2541,7 +2541,7 @@ charLeftExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcharright">external documentation</a>.
--spec charRight(This) -> ok when
+-spec charRight(This) -> 'ok' when
This::wxStyledTextCtrl().
charRight(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2549,7 +2549,7 @@ charRight(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcharrightextend">external documentation</a>.
--spec charRightExtend(This) -> ok when
+-spec charRightExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
charRightExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2557,7 +2557,7 @@ charRightExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordleft">external documentation</a>.
--spec wordLeft(This) -> ok when
+-spec wordLeft(This) -> 'ok' when
This::wxStyledTextCtrl().
wordLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2565,7 +2565,7 @@ wordLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordleftextend">external documentation</a>.
--spec wordLeftExtend(This) -> ok when
+-spec wordLeftExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
wordLeftExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2573,7 +2573,7 @@ wordLeftExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordright">external documentation</a>.
--spec wordRight(This) -> ok when
+-spec wordRight(This) -> 'ok' when
This::wxStyledTextCtrl().
wordRight(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2581,7 +2581,7 @@ wordRight(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordrightextend">external documentation</a>.
--spec wordRightExtend(This) -> ok when
+-spec wordRightExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
wordRightExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2589,7 +2589,7 @@ wordRightExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlhome">external documentation</a>.
--spec home(This) -> ok when
+-spec home(This) -> 'ok' when
This::wxStyledTextCtrl().
home(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2597,7 +2597,7 @@ home(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlhomeextend">external documentation</a>.
--spec homeExtend(This) -> ok when
+-spec homeExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
homeExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2605,7 +2605,7 @@ homeExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineend">external documentation</a>.
--spec lineEnd(This) -> ok when
+-spec lineEnd(This) -> 'ok' when
This::wxStyledTextCtrl().
lineEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2613,7 +2613,7 @@ lineEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineendextend">external documentation</a>.
--spec lineEndExtend(This) -> ok when
+-spec lineEndExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
lineEndExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2621,7 +2621,7 @@ lineEndExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldocumentstart">external documentation</a>.
--spec documentStart(This) -> ok when
+-spec documentStart(This) -> 'ok' when
This::wxStyledTextCtrl().
documentStart(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2629,7 +2629,7 @@ documentStart(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldocumentstartextend">external documentation</a>.
--spec documentStartExtend(This) -> ok when
+-spec documentStartExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
documentStartExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2637,7 +2637,7 @@ documentStartExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldocumentend">external documentation</a>.
--spec documentEnd(This) -> ok when
+-spec documentEnd(This) -> 'ok' when
This::wxStyledTextCtrl().
documentEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2645,7 +2645,7 @@ documentEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldocumentendextend">external documentation</a>.
--spec documentEndExtend(This) -> ok when
+-spec documentEndExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
documentEndExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2653,7 +2653,7 @@ documentEndExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlpageup">external documentation</a>.
--spec pageUp(This) -> ok when
+-spec pageUp(This) -> 'ok' when
This::wxStyledTextCtrl().
pageUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2661,7 +2661,7 @@ pageUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlpageupextend">external documentation</a>.
--spec pageUpExtend(This) -> ok when
+-spec pageUpExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
pageUpExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2669,7 +2669,7 @@ pageUpExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlpagedown">external documentation</a>.
--spec pageDown(This) -> ok when
+-spec pageDown(This) -> 'ok' when
This::wxStyledTextCtrl().
pageDown(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2677,7 +2677,7 @@ pageDown(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlpagedownextend">external documentation</a>.
--spec pageDownExtend(This) -> ok when
+-spec pageDownExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
pageDownExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2685,7 +2685,7 @@ pageDownExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrledittoggleovertype">external documentation</a>.
--spec editToggleOvertype(This) -> ok when
+-spec editToggleOvertype(This) -> 'ok' when
This::wxStyledTextCtrl().
editToggleOvertype(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2693,7 +2693,7 @@ editToggleOvertype(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcancel">external documentation</a>.
--spec cancel(This) -> ok when
+-spec cancel(This) -> 'ok' when
This::wxStyledTextCtrl().
cancel(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2701,7 +2701,7 @@ cancel(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldeleteback">external documentation</a>.
--spec deleteBack(This) -> ok when
+-spec deleteBack(This) -> 'ok' when
This::wxStyledTextCtrl().
deleteBack(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2709,7 +2709,7 @@ deleteBack(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrltab">external documentation</a>.
--spec tab(This) -> ok when
+-spec tab(This) -> 'ok' when
This::wxStyledTextCtrl().
tab(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2717,7 +2717,7 @@ tab(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlbacktab">external documentation</a>.
--spec backTab(This) -> ok when
+-spec backTab(This) -> 'ok' when
This::wxStyledTextCtrl().
backTab(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2725,7 +2725,7 @@ backTab(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlnewline">external documentation</a>.
--spec newLine(This) -> ok when
+-spec newLine(This) -> 'ok' when
This::wxStyledTextCtrl().
newLine(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2733,7 +2733,7 @@ newLine(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlformfeed">external documentation</a>.
--spec formFeed(This) -> ok when
+-spec formFeed(This) -> 'ok' when
This::wxStyledTextCtrl().
formFeed(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2741,7 +2741,7 @@ formFeed(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlvchome">external documentation</a>.
--spec vCHome(This) -> ok when
+-spec vCHome(This) -> 'ok' when
This::wxStyledTextCtrl().
vCHome(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2749,7 +2749,7 @@ vCHome(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlvchomeextend">external documentation</a>.
--spec vCHomeExtend(This) -> ok when
+-spec vCHomeExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
vCHomeExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2757,7 +2757,7 @@ vCHomeExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlzoomin">external documentation</a>.
--spec zoomIn(This) -> ok when
+-spec zoomIn(This) -> 'ok' when
This::wxStyledTextCtrl().
zoomIn(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2765,7 +2765,7 @@ zoomIn(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlzoomout">external documentation</a>.
--spec zoomOut(This) -> ok when
+-spec zoomOut(This) -> 'ok' when
This::wxStyledTextCtrl().
zoomOut(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2773,7 +2773,7 @@ zoomOut(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldelwordleft">external documentation</a>.
--spec delWordLeft(This) -> ok when
+-spec delWordLeft(This) -> 'ok' when
This::wxStyledTextCtrl().
delWordLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2781,7 +2781,7 @@ delWordLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldelwordright">external documentation</a>.
--spec delWordRight(This) -> ok when
+-spec delWordRight(This) -> 'ok' when
This::wxStyledTextCtrl().
delWordRight(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2789,7 +2789,7 @@ delWordRight(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinecut">external documentation</a>.
--spec lineCut(This) -> ok when
+-spec lineCut(This) -> 'ok' when
This::wxStyledTextCtrl().
lineCut(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2797,7 +2797,7 @@ lineCut(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinedelete">external documentation</a>.
--spec lineDelete(This) -> ok when
+-spec lineDelete(This) -> 'ok' when
This::wxStyledTextCtrl().
lineDelete(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2805,7 +2805,7 @@ lineDelete(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinetranspose">external documentation</a>.
--spec lineTranspose(This) -> ok when
+-spec lineTranspose(This) -> 'ok' when
This::wxStyledTextCtrl().
lineTranspose(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2813,7 +2813,7 @@ lineTranspose(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineduplicate">external documentation</a>.
--spec lineDuplicate(This) -> ok when
+-spec lineDuplicate(This) -> 'ok' when
This::wxStyledTextCtrl().
lineDuplicate(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2821,7 +2821,7 @@ lineDuplicate(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllowercase">external documentation</a>.
--spec lowerCase(This) -> ok when
+-spec lowerCase(This) -> 'ok' when
This::wxStyledTextCtrl().
lowerCase(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2829,7 +2829,7 @@ lowerCase(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrluppercase">external documentation</a>.
--spec upperCase(This) -> ok when
+-spec upperCase(This) -> 'ok' when
This::wxStyledTextCtrl().
upperCase(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2837,7 +2837,7 @@ upperCase(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinescrolldown">external documentation</a>.
--spec lineScrollDown(This) -> ok when
+-spec lineScrollDown(This) -> 'ok' when
This::wxStyledTextCtrl().
lineScrollDown(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2845,7 +2845,7 @@ lineScrollDown(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinescrollup">external documentation</a>.
--spec lineScrollUp(This) -> ok when
+-spec lineScrollUp(This) -> 'ok' when
This::wxStyledTextCtrl().
lineScrollUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2853,7 +2853,7 @@ lineScrollUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldeletebacknotline">external documentation</a>.
--spec deleteBackNotLine(This) -> ok when
+-spec deleteBackNotLine(This) -> 'ok' when
This::wxStyledTextCtrl().
deleteBackNotLine(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2861,7 +2861,7 @@ deleteBackNotLine(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlhomedisplay">external documentation</a>.
--spec homeDisplay(This) -> ok when
+-spec homeDisplay(This) -> 'ok' when
This::wxStyledTextCtrl().
homeDisplay(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2869,7 +2869,7 @@ homeDisplay(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlhomedisplayextend">external documentation</a>.
--spec homeDisplayExtend(This) -> ok when
+-spec homeDisplayExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
homeDisplayExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2877,7 +2877,7 @@ homeDisplayExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineenddisplay">external documentation</a>.
--spec lineEndDisplay(This) -> ok when
+-spec lineEndDisplay(This) -> 'ok' when
This::wxStyledTextCtrl().
lineEndDisplay(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2885,7 +2885,7 @@ lineEndDisplay(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineenddisplayextend">external documentation</a>.
--spec lineEndDisplayExtend(This) -> ok when
+-spec lineEndDisplayExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
lineEndDisplayExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2893,7 +2893,7 @@ lineEndDisplayExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlhomewrapextend">external documentation</a>.
--spec homeWrapExtend(This) -> ok when
+-spec homeWrapExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
homeWrapExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2901,7 +2901,7 @@ homeWrapExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineendwrap">external documentation</a>.
--spec lineEndWrap(This) -> ok when
+-spec lineEndWrap(This) -> 'ok' when
This::wxStyledTextCtrl().
lineEndWrap(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2909,7 +2909,7 @@ lineEndWrap(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineendwrapextend">external documentation</a>.
--spec lineEndWrapExtend(This) -> ok when
+-spec lineEndWrapExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
lineEndWrapExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2917,7 +2917,7 @@ lineEndWrapExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlvchomewrap">external documentation</a>.
--spec vCHomeWrap(This) -> ok when
+-spec vCHomeWrap(This) -> 'ok' when
This::wxStyledTextCtrl().
vCHomeWrap(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2925,7 +2925,7 @@ vCHomeWrap(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlvchomewrapextend">external documentation</a>.
--spec vCHomeWrapExtend(This) -> ok when
+-spec vCHomeWrapExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
vCHomeWrapExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2933,7 +2933,7 @@ vCHomeWrapExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinecopy">external documentation</a>.
--spec lineCopy(This) -> ok when
+-spec lineCopy(This) -> 'ok' when
This::wxStyledTextCtrl().
lineCopy(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2941,7 +2941,7 @@ lineCopy(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlmovecaretinsideview">external documentation</a>.
--spec moveCaretInsideView(This) -> ok when
+-spec moveCaretInsideView(This) -> 'ok' when
This::wxStyledTextCtrl().
moveCaretInsideView(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -2958,7 +2958,7 @@ lineLength(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlbracehighlight">external documentation</a>.
--spec braceHighlight(This, Pos1, Pos2) -> ok when
+-spec braceHighlight(This, Pos1, Pos2) -> 'ok' when
This::wxStyledTextCtrl(), Pos1::integer(), Pos2::integer().
braceHighlight(#wx_ref{type=ThisT,ref=ThisRef},Pos1,Pos2)
when is_integer(Pos1),is_integer(Pos2) ->
@@ -2967,7 +2967,7 @@ braceHighlight(#wx_ref{type=ThisT,ref=ThisRef},Pos1,Pos2)
<<ThisRef:32/?UI,Pos1:32/?UI,Pos2:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlbracebadlight">external documentation</a>.
--spec braceBadLight(This, Pos) -> ok when
+-spec braceBadLight(This, Pos) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer().
braceBadLight(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -2993,7 +2993,7 @@ getViewEOL(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetvieweol">external documentation</a>.
--spec setViewEOL(This, Visible) -> ok when
+-spec setViewEOL(This, Visible) -> 'ok' when
This::wxStyledTextCtrl(), Visible::boolean().
setViewEOL(#wx_ref{type=ThisT,ref=ThisRef},Visible)
when is_boolean(Visible) ->
@@ -3002,7 +3002,7 @@ setViewEOL(#wx_ref{type=ThisT,ref=ThisRef},Visible)
<<ThisRef:32/?UI,(wxe_util:from_bool(Visible)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmodeventmask">external documentation</a>.
--spec setModEventMask(This, Mask) -> ok when
+-spec setModEventMask(This, Mask) -> 'ok' when
This::wxStyledTextCtrl(), Mask::integer().
setModEventMask(#wx_ref{type=ThisT,ref=ThisRef},Mask)
when is_integer(Mask) ->
@@ -3019,7 +3019,7 @@ getEdgeColumn(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetedgecolumn">external documentation</a>.
--spec setEdgeColumn(This, Column) -> ok when
+-spec setEdgeColumn(This, Column) -> 'ok' when
This::wxStyledTextCtrl(), Column::integer().
setEdgeColumn(#wx_ref{type=ThisT,ref=ThisRef},Column)
when is_integer(Column) ->
@@ -3028,7 +3028,7 @@ setEdgeColumn(#wx_ref{type=ThisT,ref=ThisRef},Column)
<<ThisRef:32/?UI,Column:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetedgemode">external documentation</a>.
--spec setEdgeMode(This, Mode) -> ok when
+-spec setEdgeMode(This, Mode) -> 'ok' when
This::wxStyledTextCtrl(), Mode::integer().
setEdgeMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
when is_integer(Mode) ->
@@ -3053,7 +3053,7 @@ getEdgeColour(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetedgecolour">external documentation</a>.
--spec setEdgeColour(This, EdgeColour) -> ok when
+-spec setEdgeColour(This, EdgeColour) -> 'ok' when
This::wxStyledTextCtrl(), EdgeColour::wx:wx_colour().
setEdgeColour(#wx_ref{type=ThisT,ref=ThisRef},EdgeColour)
when tuple_size(EdgeColour) =:= 3; tuple_size(EdgeColour) =:= 4 ->
@@ -3062,7 +3062,7 @@ setEdgeColour(#wx_ref{type=ThisT,ref=ThisRef},EdgeColour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(EdgeColour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsearchanchor">external documentation</a>.
--spec searchAnchor(This) -> ok when
+-spec searchAnchor(This) -> 'ok' when
This::wxStyledTextCtrl().
searchAnchor(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3098,7 +3098,7 @@ linesOnScreen(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlusepopup">external documentation</a>.
--spec usePopUp(This, AllowPopUp) -> ok when
+-spec usePopUp(This, AllowPopUp) -> 'ok' when
This::wxStyledTextCtrl(), AllowPopUp::boolean().
usePopUp(#wx_ref{type=ThisT,ref=ThisRef},AllowPopUp)
when is_boolean(AllowPopUp) ->
@@ -3115,7 +3115,7 @@ selectionIsRectangle(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetzoom">external documentation</a>.
--spec setZoom(This, Zoom) -> ok when
+-spec setZoom(This, Zoom) -> 'ok' when
This::wxStyledTextCtrl(), Zoom::integer().
setZoom(#wx_ref{type=ThisT,ref=ThisRef},Zoom)
when is_integer(Zoom) ->
@@ -3140,7 +3140,7 @@ getModEventMask(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetstcfocus">external documentation</a>.
--spec setSTCFocus(This, Focus) -> ok when
+-spec setSTCFocus(This, Focus) -> 'ok' when
This::wxStyledTextCtrl(), Focus::boolean().
setSTCFocus(#wx_ref{type=ThisT,ref=ThisRef},Focus)
when is_boolean(Focus) ->
@@ -3157,7 +3157,7 @@ getSTCFocus(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetstatus">external documentation</a>.
--spec setStatus(This, StatusCode) -> ok when
+-spec setStatus(This, StatusCode) -> 'ok' when
This::wxStyledTextCtrl(), StatusCode::integer().
setStatus(#wx_ref{type=ThisT,ref=ThisRef},StatusCode)
when is_integer(StatusCode) ->
@@ -3174,7 +3174,7 @@ getStatus(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmousedowncaptures">external documentation</a>.
--spec setMouseDownCaptures(This, Captures) -> ok when
+-spec setMouseDownCaptures(This, Captures) -> 'ok' when
This::wxStyledTextCtrl(), Captures::boolean().
setMouseDownCaptures(#wx_ref{type=ThisT,ref=ThisRef},Captures)
when is_boolean(Captures) ->
@@ -3191,7 +3191,7 @@ getMouseDownCaptures(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetstccursor">external documentation</a>.
--spec setSTCCursor(This, CursorType) -> ok when
+-spec setSTCCursor(This, CursorType) -> 'ok' when
This::wxStyledTextCtrl(), CursorType::integer().
setSTCCursor(#wx_ref{type=ThisT,ref=ThisRef},CursorType)
when is_integer(CursorType) ->
@@ -3208,7 +3208,7 @@ getSTCCursor(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcontrolcharsymbol">external documentation</a>.
--spec setControlCharSymbol(This, Symbol) -> ok when
+-spec setControlCharSymbol(This, Symbol) -> 'ok' when
This::wxStyledTextCtrl(), Symbol::integer().
setControlCharSymbol(#wx_ref{type=ThisT,ref=ThisRef},Symbol)
when is_integer(Symbol) ->
@@ -3225,7 +3225,7 @@ getControlCharSymbol(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordpartleft">external documentation</a>.
--spec wordPartLeft(This) -> ok when
+-spec wordPartLeft(This) -> 'ok' when
This::wxStyledTextCtrl().
wordPartLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3233,7 +3233,7 @@ wordPartLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordpartleftextend">external documentation</a>.
--spec wordPartLeftExtend(This) -> ok when
+-spec wordPartLeftExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
wordPartLeftExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3241,7 +3241,7 @@ wordPartLeftExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordpartright">external documentation</a>.
--spec wordPartRight(This) -> ok when
+-spec wordPartRight(This) -> 'ok' when
This::wxStyledTextCtrl().
wordPartRight(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3249,7 +3249,7 @@ wordPartRight(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordpartrightextend">external documentation</a>.
--spec wordPartRightExtend(This) -> ok when
+-spec wordPartRightExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
wordPartRightExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3257,7 +3257,7 @@ wordPartRightExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetvisiblepolicy">external documentation</a>.
--spec setVisiblePolicy(This, VisiblePolicy, VisibleSlop) -> ok when
+-spec setVisiblePolicy(This, VisiblePolicy, VisibleSlop) -> 'ok' when
This::wxStyledTextCtrl(), VisiblePolicy::integer(), VisibleSlop::integer().
setVisiblePolicy(#wx_ref{type=ThisT,ref=ThisRef},VisiblePolicy,VisibleSlop)
when is_integer(VisiblePolicy),is_integer(VisibleSlop) ->
@@ -3266,7 +3266,7 @@ setVisiblePolicy(#wx_ref{type=ThisT,ref=ThisRef},VisiblePolicy,VisibleSlop)
<<ThisRef:32/?UI,VisiblePolicy:32/?UI,VisibleSlop:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldellineleft">external documentation</a>.
--spec delLineLeft(This) -> ok when
+-spec delLineLeft(This) -> 'ok' when
This::wxStyledTextCtrl().
delLineLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3274,7 +3274,7 @@ delLineLeft(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrldellineright">external documentation</a>.
--spec delLineRight(This) -> ok when
+-spec delLineRight(This) -> 'ok' when
This::wxStyledTextCtrl().
delLineRight(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3290,7 +3290,7 @@ getXOffset(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlchoosecaretx">external documentation</a>.
--spec chooseCaretX(This) -> ok when
+-spec chooseCaretX(This) -> 'ok' when
This::wxStyledTextCtrl().
chooseCaretX(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3298,7 +3298,7 @@ chooseCaretX(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetxcaretpolicy">external documentation</a>.
--spec setXCaretPolicy(This, CaretPolicy, CaretSlop) -> ok when
+-spec setXCaretPolicy(This, CaretPolicy, CaretSlop) -> 'ok' when
This::wxStyledTextCtrl(), CaretPolicy::integer(), CaretSlop::integer().
setXCaretPolicy(#wx_ref{type=ThisT,ref=ThisRef},CaretPolicy,CaretSlop)
when is_integer(CaretPolicy),is_integer(CaretSlop) ->
@@ -3307,7 +3307,7 @@ setXCaretPolicy(#wx_ref{type=ThisT,ref=ThisRef},CaretPolicy,CaretSlop)
<<ThisRef:32/?UI,CaretPolicy:32/?UI,CaretSlop:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetycaretpolicy">external documentation</a>.
--spec setYCaretPolicy(This, CaretPolicy, CaretSlop) -> ok when
+-spec setYCaretPolicy(This, CaretPolicy, CaretSlop) -> 'ok' when
This::wxStyledTextCtrl(), CaretPolicy::integer(), CaretSlop::integer().
setYCaretPolicy(#wx_ref{type=ThisT,ref=ThisRef},CaretPolicy,CaretSlop)
when is_integer(CaretPolicy),is_integer(CaretSlop) ->
@@ -3324,7 +3324,7 @@ getPrintWrapMode(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsethotspotactiveforeground">external documentation</a>.
--spec setHotspotActiveForeground(This, UseSetting, Fore) -> ok when
+-spec setHotspotActiveForeground(This, UseSetting, Fore) -> 'ok' when
This::wxStyledTextCtrl(), UseSetting::boolean(), Fore::wx:wx_colour().
setHotspotActiveForeground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Fore)
when is_boolean(UseSetting),tuple_size(Fore) =:= 3; tuple_size(Fore) =:= 4 ->
@@ -3333,7 +3333,7 @@ setHotspotActiveForeground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Fore)
<<ThisRef:32/?UI,(wxe_util:from_bool(UseSetting)):32/?UI,(wxe_util:colour_bin(Fore)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsethotspotactivebackground">external documentation</a>.
--spec setHotspotActiveBackground(This, UseSetting, Back) -> ok when
+-spec setHotspotActiveBackground(This, UseSetting, Back) -> 'ok' when
This::wxStyledTextCtrl(), UseSetting::boolean(), Back::wx:wx_colour().
setHotspotActiveBackground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Back)
when is_boolean(UseSetting),tuple_size(Back) =:= 3; tuple_size(Back) =:= 4 ->
@@ -3342,7 +3342,7 @@ setHotspotActiveBackground(#wx_ref{type=ThisT,ref=ThisRef},UseSetting,Back)
<<ThisRef:32/?UI,(wxe_util:from_bool(UseSetting)):32/?UI,(wxe_util:colour_bin(Back)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsethotspotactiveunderline">external documentation</a>.
--spec setHotspotActiveUnderline(This, Underline) -> ok when
+-spec setHotspotActiveUnderline(This, Underline) -> 'ok' when
This::wxStyledTextCtrl(), Underline::boolean().
setHotspotActiveUnderline(#wx_ref{type=ThisT,ref=ThisRef},Underline)
when is_boolean(Underline) ->
@@ -3351,7 +3351,7 @@ setHotspotActiveUnderline(#wx_ref{type=ThisT,ref=ThisRef},Underline)
<<ThisRef:32/?UI,(wxe_util:from_bool(Underline)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsethotspotsingleline">external documentation</a>.
--spec setHotspotSingleLine(This, SingleLine) -> ok when
+-spec setHotspotSingleLine(This, SingleLine) -> 'ok' when
This::wxStyledTextCtrl(), SingleLine::boolean().
setHotspotSingleLine(#wx_ref{type=ThisT,ref=ThisRef},SingleLine)
when is_boolean(SingleLine) ->
@@ -3360,7 +3360,7 @@ setHotspotSingleLine(#wx_ref{type=ThisT,ref=ThisRef},SingleLine)
<<ThisRef:32/?UI,(wxe_util:from_bool(SingleLine)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlparadownextend">external documentation</a>.
--spec paraDownExtend(This) -> ok when
+-spec paraDownExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
paraDownExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3368,7 +3368,7 @@ paraDownExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlparaup">external documentation</a>.
--spec paraUp(This) -> ok when
+-spec paraUp(This) -> 'ok' when
This::wxStyledTextCtrl().
paraUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3376,7 +3376,7 @@ paraUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlparaupextend">external documentation</a>.
--spec paraUpExtend(This) -> ok when
+-spec paraUpExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
paraUpExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3402,7 +3402,7 @@ positionAfter(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcopyrange">external documentation</a>.
--spec copyRange(This, Start, End) -> ok when
+-spec copyRange(This, Start, End) -> 'ok' when
This::wxStyledTextCtrl(), Start::integer(), End::integer().
copyRange(#wx_ref{type=ThisT,ref=ThisRef},Start,End)
when is_integer(Start),is_integer(End) ->
@@ -3411,7 +3411,7 @@ copyRange(#wx_ref{type=ThisT,ref=ThisRef},Start,End)
<<ThisRef:32/?UI,Start:32/?UI,End:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcopytext">external documentation</a>.
--spec copyText(This, Length, Text) -> ok when
+-spec copyText(This, Length, Text) -> 'ok' when
This::wxStyledTextCtrl(), Length::integer(), Text::unicode:chardata().
copyText(#wx_ref{type=ThisT,ref=ThisRef},Length,Text)
when is_integer(Length),is_list(Text) ->
@@ -3421,7 +3421,7 @@ copyText(#wx_ref{type=ThisT,ref=ThisRef},Length,Text)
<<ThisRef:32/?UI,Length:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetselectionmode">external documentation</a>.
--spec setSelectionMode(This, Mode) -> ok when
+-spec setSelectionMode(This, Mode) -> 'ok' when
This::wxStyledTextCtrl(), Mode::integer().
setSelectionMode(#wx_ref{type=ThisT,ref=ThisRef},Mode)
when is_integer(Mode) ->
@@ -3438,7 +3438,7 @@ getSelectionMode(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllinedownrectextend">external documentation</a>.
--spec lineDownRectExtend(This) -> ok when
+-spec lineDownRectExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
lineDownRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3446,7 +3446,7 @@ lineDownRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineuprectextend">external documentation</a>.
--spec lineUpRectExtend(This) -> ok when
+-spec lineUpRectExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
lineUpRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3454,7 +3454,7 @@ lineUpRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcharleftrectextend">external documentation</a>.
--spec charLeftRectExtend(This) -> ok when
+-spec charLeftRectExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
charLeftRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3462,7 +3462,7 @@ charLeftRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcharrightrectextend">external documentation</a>.
--spec charRightRectExtend(This) -> ok when
+-spec charRightRectExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
charRightRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3470,7 +3470,7 @@ charRightRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlhomerectextend">external documentation</a>.
--spec homeRectExtend(This) -> ok when
+-spec homeRectExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
homeRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3478,7 +3478,7 @@ homeRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlvchomerectextend">external documentation</a>.
--spec vCHomeRectExtend(This) -> ok when
+-spec vCHomeRectExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
vCHomeRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3486,7 +3486,7 @@ vCHomeRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrllineendrectextend">external documentation</a>.
--spec lineEndRectExtend(This) -> ok when
+-spec lineEndRectExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
lineEndRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3494,7 +3494,7 @@ lineEndRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlpageuprectextend">external documentation</a>.
--spec pageUpRectExtend(This) -> ok when
+-spec pageUpRectExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
pageUpRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3502,7 +3502,7 @@ pageUpRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlpagedownrectextend">external documentation</a>.
--spec pageDownRectExtend(This) -> ok when
+-spec pageDownRectExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
pageDownRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3510,7 +3510,7 @@ pageDownRectExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstutteredpageup">external documentation</a>.
--spec stutteredPageUp(This) -> ok when
+-spec stutteredPageUp(This) -> 'ok' when
This::wxStyledTextCtrl().
stutteredPageUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3518,7 +3518,7 @@ stutteredPageUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstutteredpageupextend">external documentation</a>.
--spec stutteredPageUpExtend(This) -> ok when
+-spec stutteredPageUpExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
stutteredPageUpExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3526,7 +3526,7 @@ stutteredPageUpExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstutteredpagedown">external documentation</a>.
--spec stutteredPageDown(This) -> ok when
+-spec stutteredPageDown(This) -> 'ok' when
This::wxStyledTextCtrl().
stutteredPageDown(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3534,7 +3534,7 @@ stutteredPageDown(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstutteredpagedownextend">external documentation</a>.
--spec stutteredPageDownExtend(This) -> ok when
+-spec stutteredPageDownExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
stutteredPageDownExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3542,7 +3542,7 @@ stutteredPageDownExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordleftend">external documentation</a>.
--spec wordLeftEnd(This) -> ok when
+-spec wordLeftEnd(This) -> 'ok' when
This::wxStyledTextCtrl().
wordLeftEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3550,7 +3550,7 @@ wordLeftEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordleftendextend">external documentation</a>.
--spec wordLeftEndExtend(This) -> ok when
+-spec wordLeftEndExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
wordLeftEndExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3558,7 +3558,7 @@ wordLeftEndExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordrightend">external documentation</a>.
--spec wordRightEnd(This) -> ok when
+-spec wordRightEnd(This) -> 'ok' when
This::wxStyledTextCtrl().
wordRightEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3566,7 +3566,7 @@ wordRightEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlwordrightendextend">external documentation</a>.
--spec wordRightEndExtend(This) -> ok when
+-spec wordRightEndExtend(This) -> 'ok' when
This::wxStyledTextCtrl().
wordRightEndExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3574,7 +3574,7 @@ wordRightEndExtend(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetwhitespacechars">external documentation</a>.
--spec setWhitespaceChars(This, Characters) -> ok when
+-spec setWhitespaceChars(This, Characters) -> 'ok' when
This::wxStyledTextCtrl(), Characters::unicode:chardata().
setWhitespaceChars(#wx_ref{type=ThisT,ref=ThisRef},Characters)
when is_list(Characters) ->
@@ -3584,7 +3584,7 @@ setWhitespaceChars(#wx_ref{type=ThisT,ref=ThisRef},Characters)
<<ThisRef:32/?UI,(byte_size(Characters_UC)):32/?UI,(Characters_UC)/binary, 0:(((8- ((0+byte_size(Characters_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcharsdefault">external documentation</a>.
--spec setCharsDefault(This) -> ok when
+-spec setCharsDefault(This) -> 'ok' when
This::wxStyledTextCtrl().
setCharsDefault(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3600,7 +3600,7 @@ autoCompGetCurrent(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlallocate">external documentation</a>.
--spec allocate(This, Bytes) -> ok when
+-spec allocate(This, Bytes) -> 'ok' when
This::wxStyledTextCtrl(), Bytes::integer().
allocate(#wx_ref{type=ThisT,ref=ThisRef},Bytes)
when is_integer(Bytes) ->
@@ -3626,7 +3626,7 @@ getCaretSticky(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcaretsticky">external documentation</a>.
--spec setCaretSticky(This, UseCaretStickyBehaviour) -> ok when
+-spec setCaretSticky(This, UseCaretStickyBehaviour) -> 'ok' when
This::wxStyledTextCtrl(), UseCaretStickyBehaviour::boolean().
setCaretSticky(#wx_ref{type=ThisT,ref=ThisRef},UseCaretStickyBehaviour)
when is_boolean(UseCaretStickyBehaviour) ->
@@ -3635,7 +3635,7 @@ setCaretSticky(#wx_ref{type=ThisT,ref=ThisRef},UseCaretStickyBehaviour)
<<ThisRef:32/?UI,(wxe_util:from_bool(UseCaretStickyBehaviour)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrltogglecaretsticky">external documentation</a>.
--spec toggleCaretSticky(This) -> ok when
+-spec toggleCaretSticky(This) -> 'ok' when
This::wxStyledTextCtrl().
toggleCaretSticky(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3643,7 +3643,7 @@ toggleCaretSticky(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetpasteconvertendings">external documentation</a>.
--spec setPasteConvertEndings(This, Convert) -> ok when
+-spec setPasteConvertEndings(This, Convert) -> 'ok' when
This::wxStyledTextCtrl(), Convert::boolean().
setPasteConvertEndings(#wx_ref{type=ThisT,ref=ThisRef},Convert)
when is_boolean(Convert) ->
@@ -3660,7 +3660,7 @@ getPasteConvertEndings(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlselectionduplicate">external documentation</a>.
--spec selectionDuplicate(This) -> ok when
+-spec selectionDuplicate(This) -> 'ok' when
This::wxStyledTextCtrl().
selectionDuplicate(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3668,7 +3668,7 @@ selectionDuplicate(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetcaretlinebackalpha">external documentation</a>.
--spec setCaretLineBackAlpha(This, Alpha) -> ok when
+-spec setCaretLineBackAlpha(This, Alpha) -> 'ok' when
This::wxStyledTextCtrl(), Alpha::integer().
setCaretLineBackAlpha(#wx_ref{type=ThisT,ref=ThisRef},Alpha)
when is_integer(Alpha) ->
@@ -3685,7 +3685,7 @@ getCaretLineBackAlpha(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstartrecord">external documentation</a>.
--spec startRecord(This) -> ok when
+-spec startRecord(This) -> 'ok' when
This::wxStyledTextCtrl().
startRecord(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3693,7 +3693,7 @@ startRecord(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstoprecord">external documentation</a>.
--spec stopRecord(This) -> ok when
+-spec stopRecord(This) -> 'ok' when
This::wxStyledTextCtrl().
stopRecord(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3701,7 +3701,7 @@ stopRecord(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetlexer">external documentation</a>.
--spec setLexer(This, Lexer) -> ok when
+-spec setLexer(This, Lexer) -> 'ok' when
This::wxStyledTextCtrl(), Lexer::integer().
setLexer(#wx_ref{type=ThisT,ref=ThisRef},Lexer)
when is_integer(Lexer) ->
@@ -3718,7 +3718,7 @@ getLexer(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcolourise">external documentation</a>.
--spec colourise(This, Start, End) -> ok when
+-spec colourise(This, Start, End) -> 'ok' when
This::wxStyledTextCtrl(), Start::integer(), End::integer().
colourise(#wx_ref{type=ThisT,ref=ThisRef},Start,End)
when is_integer(Start),is_integer(End) ->
@@ -3727,7 +3727,7 @@ colourise(#wx_ref{type=ThisT,ref=ThisRef},Start,End)
<<ThisRef:32/?UI,Start:32/?UI,End:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetproperty">external documentation</a>.
--spec setProperty(This, Key, Value) -> ok when
+-spec setProperty(This, Key, Value) -> 'ok' when
This::wxStyledTextCtrl(), Key::unicode:chardata(), Value::unicode:chardata().
setProperty(#wx_ref{type=ThisT,ref=ThisRef},Key,Value)
when is_list(Key),is_list(Value) ->
@@ -3738,7 +3738,7 @@ setProperty(#wx_ref{type=ThisT,ref=ThisRef},Key,Value)
<<ThisRef:32/?UI,(byte_size(Key_UC)):32/?UI,(Key_UC)/binary, 0:(((8- ((0+byte_size(Key_UC)) band 16#7)) band 16#7))/unit:8,(byte_size(Value_UC)):32/?UI,(Value_UC)/binary, 0:(((8- ((4+byte_size(Value_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetkeywords">external documentation</a>.
--spec setKeyWords(This, KeywordSet, KeyWords) -> ok when
+-spec setKeyWords(This, KeywordSet, KeyWords) -> 'ok' when
This::wxStyledTextCtrl(), KeywordSet::integer(), KeyWords::unicode:chardata().
setKeyWords(#wx_ref{type=ThisT,ref=ThisRef},KeywordSet,KeyWords)
when is_integer(KeywordSet),is_list(KeyWords) ->
@@ -3748,7 +3748,7 @@ setKeyWords(#wx_ref{type=ThisT,ref=ThisRef},KeywordSet,KeyWords)
<<ThisRef:32/?UI,KeywordSet:32/?UI,(byte_size(KeyWords_UC)):32/?UI,(KeyWords_UC)/binary, 0:(((8- ((4+byte_size(KeyWords_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetlexerlanguage">external documentation</a>.
--spec setLexerLanguage(This, Language) -> ok when
+-spec setLexerLanguage(This, Language) -> 'ok' when
This::wxStyledTextCtrl(), Language::unicode:chardata().
setLexerLanguage(#wx_ref{type=ThisT,ref=ThisRef},Language)
when is_list(Language) ->
@@ -3784,7 +3784,7 @@ getCurrentLine(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetspec">external documentation</a>.
--spec styleSetSpec(This, StyleNum, Spec) -> ok when
+-spec styleSetSpec(This, StyleNum, Spec) -> 'ok' when
This::wxStyledTextCtrl(), StyleNum::integer(), Spec::unicode:chardata().
styleSetSpec(#wx_ref{type=ThisT,ref=ThisRef},StyleNum,Spec)
when is_integer(StyleNum),is_list(Spec) ->
@@ -3794,7 +3794,7 @@ styleSetSpec(#wx_ref{type=ThisT,ref=ThisRef},StyleNum,Spec)
<<ThisRef:32/?UI,StyleNum:32/?UI,(byte_size(Spec_UC)):32/?UI,(Spec_UC)/binary, 0:(((8- ((4+byte_size(Spec_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetfont">external documentation</a>.
--spec styleSetFont(This, StyleNum, Font) -> ok when
+-spec styleSetFont(This, StyleNum, Font) -> 'ok' when
This::wxStyledTextCtrl(), StyleNum::integer(), Font::wxFont:wxFont().
styleSetFont(#wx_ref{type=ThisT,ref=ThisRef},StyleNum,#wx_ref{type=FontT,ref=FontRef})
when is_integer(StyleNum) ->
@@ -3804,7 +3804,7 @@ styleSetFont(#wx_ref{type=ThisT,ref=ThisRef},StyleNum,#wx_ref{type=FontT,ref=Fon
<<ThisRef:32/?UI,StyleNum:32/?UI,FontRef:32/?UI>>).
%% @equiv styleSetFontAttr(This,StyleNum,Size,FaceName,Bold,Italic,Underline, [])
--spec styleSetFontAttr(This, StyleNum, Size, FaceName, Bold, Italic, Underline) -> ok when
+-spec styleSetFontAttr(This, StyleNum, Size, FaceName, Bold, Italic, Underline) -> 'ok' when
This::wxStyledTextCtrl(), StyleNum::integer(), Size::integer(), FaceName::unicode:chardata(), Bold::boolean(), Italic::boolean(), Underline::boolean().
styleSetFontAttr(This,StyleNum,Size,FaceName,Bold,Italic,Underline)
@@ -3813,9 +3813,9 @@ styleSetFontAttr(This,StyleNum,Size,FaceName,Bold,Italic,Underline)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetfontattr">external documentation</a>.
%%<br /> Encoding = ?wxFONTENCODING_SYSTEM | ?wxFONTENCODING_DEFAULT | ?wxFONTENCODING_ISO8859_1 | ?wxFONTENCODING_ISO8859_2 | ?wxFONTENCODING_ISO8859_3 | ?wxFONTENCODING_ISO8859_4 | ?wxFONTENCODING_ISO8859_5 | ?wxFONTENCODING_ISO8859_6 | ?wxFONTENCODING_ISO8859_7 | ?wxFONTENCODING_ISO8859_8 | ?wxFONTENCODING_ISO8859_9 | ?wxFONTENCODING_ISO8859_10 | ?wxFONTENCODING_ISO8859_11 | ?wxFONTENCODING_ISO8859_12 | ?wxFONTENCODING_ISO8859_13 | ?wxFONTENCODING_ISO8859_14 | ?wxFONTENCODING_ISO8859_15 | ?wxFONTENCODING_ISO8859_MAX | ?wxFONTENCODING_KOI8 | ?wxFONTENCODING_KOI8_U | ?wxFONTENCODING_ALTERNATIVE | ?wxFONTENCODING_BULGARIAN | ?wxFONTENCODING_CP437 | ?wxFONTENCODING_CP850 | ?wxFONTENCODING_CP852 | ?wxFONTENCODING_CP855 | ?wxFONTENCODING_CP866 | ?wxFONTENCODING_CP874 | ?wxFONTENCODING_CP932 | ?wxFONTENCODING_CP936 | ?wxFONTENCODING_CP949 | ?wxFONTENCODING_CP950 | ?wxFONTENCODING_CP1250 | ?wxFONTENCODING_CP1251 | ?wxFONTENCODING_CP1252 | ?wxFONTENCODING_CP1253 | ?wxFONTENCODING_CP1254 | ?wxFONTENCODING_CP1255 | ?wxFONTENCODING_CP1256 | ?wxFONTENCODING_CP1257 | ?wxFONTENCODING_CP12_MAX | ?wxFONTENCODING_UTF7 | ?wxFONTENCODING_UTF8 | ?wxFONTENCODING_EUC_JP | ?wxFONTENCODING_UTF16BE | ?wxFONTENCODING_UTF16LE | ?wxFONTENCODING_UTF32BE | ?wxFONTENCODING_UTF32LE | ?wxFONTENCODING_MACROMAN | ?wxFONTENCODING_MACJAPANESE | ?wxFONTENCODING_MACCHINESETRAD | ?wxFONTENCODING_MACKOREAN | ?wxFONTENCODING_MACARABIC | ?wxFONTENCODING_MACHEBREW | ?wxFONTENCODING_MACGREEK | ?wxFONTENCODING_MACCYRILLIC | ?wxFONTENCODING_MACDEVANAGARI | ?wxFONTENCODING_MACGURMUKHI | ?wxFONTENCODING_MACGUJARATI | ?wxFONTENCODING_MACORIYA | ?wxFONTENCODING_MACBENGALI | ?wxFONTENCODING_MACTAMIL | ?wxFONTENCODING_MACTELUGU | ?wxFONTENCODING_MACKANNADA | ?wxFONTENCODING_MACMALAJALAM | ?wxFONTENCODING_MACSINHALESE | ?wxFONTENCODING_MACBURMESE | ?wxFONTENCODING_MACKHMER | ?wxFONTENCODING_MACTHAI | ?wxFONTENCODING_MACLAOTIAN | ?wxFONTENCODING_MACGEORGIAN | ?wxFONTENCODING_MACARMENIAN | ?wxFONTENCODING_MACCHINESESIMP | ?wxFONTENCODING_MACTIBETAN | ?wxFONTENCODING_MACMONGOLIAN | ?wxFONTENCODING_MACETHIOPIC | ?wxFONTENCODING_MACCENTRALEUR | ?wxFONTENCODING_MACVIATNAMESE | ?wxFONTENCODING_MACARABICEXT | ?wxFONTENCODING_MACSYMBOL | ?wxFONTENCODING_MACDINGBATS | ?wxFONTENCODING_MACTURKISH | ?wxFONTENCODING_MACCROATIAN | ?wxFONTENCODING_MACICELANDIC | ?wxFONTENCODING_MACROMANIAN | ?wxFONTENCODING_MACCELTIC | ?wxFONTENCODING_MACGAELIC | ?wxFONTENCODING_MACKEYBOARD | ?wxFONTENCODING_MAX | ?wxFONTENCODING_MACMIN | ?wxFONTENCODING_MACMAX | ?wxFONTENCODING_UTF16 | ?wxFONTENCODING_UTF32 | ?wxFONTENCODING_UNICODE | ?wxFONTENCODING_GB2312 | ?wxFONTENCODING_BIG5 | ?wxFONTENCODING_SHIFT_JIS
--spec styleSetFontAttr(This, StyleNum, Size, FaceName, Bold, Italic, Underline, [Option]) -> ok when
+-spec styleSetFontAttr(This, StyleNum, Size, FaceName, Bold, Italic, Underline, [Option]) -> 'ok' when
This::wxStyledTextCtrl(), StyleNum::integer(), Size::integer(), FaceName::unicode:chardata(), Bold::boolean(), Italic::boolean(), Underline::boolean(),
- Option :: {encoding, wx:wx_enum()}.
+ Option :: {'encoding', wx:wx_enum()}.
styleSetFontAttr(#wx_ref{type=ThisT,ref=ThisRef},StyleNum,Size,FaceName,Bold,Italic,Underline, Options)
when is_integer(StyleNum),is_integer(Size),is_list(FaceName),is_boolean(Bold),is_boolean(Italic),is_boolean(Underline),is_list(Options) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3827,7 +3827,7 @@ styleSetFontAttr(#wx_ref{type=ThisT,ref=ThisRef},StyleNum,Size,FaceName,Bold,Ita
<<ThisRef:32/?UI,StyleNum:32/?UI,Size:32/?UI,(byte_size(FaceName_UC)):32/?UI,(FaceName_UC)/binary, 0:(((8- ((0+byte_size(FaceName_UC)) band 16#7)) band 16#7))/unit:8,(wxe_util:from_bool(Bold)):32/?UI,(wxe_util:from_bool(Italic)):32/?UI,(wxe_util:from_bool(Underline)):32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetcharacterset">external documentation</a>.
--spec styleSetCharacterSet(This, Style, CharacterSet) -> ok when
+-spec styleSetCharacterSet(This, Style, CharacterSet) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), CharacterSet::integer().
styleSetCharacterSet(#wx_ref{type=ThisT,ref=ThisRef},Style,CharacterSet)
when is_integer(Style),is_integer(CharacterSet) ->
@@ -3837,7 +3837,7 @@ styleSetCharacterSet(#wx_ref{type=ThisT,ref=ThisRef},Style,CharacterSet)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlstylesetfontencoding">external documentation</a>.
%%<br /> Encoding = ?wxFONTENCODING_SYSTEM | ?wxFONTENCODING_DEFAULT | ?wxFONTENCODING_ISO8859_1 | ?wxFONTENCODING_ISO8859_2 | ?wxFONTENCODING_ISO8859_3 | ?wxFONTENCODING_ISO8859_4 | ?wxFONTENCODING_ISO8859_5 | ?wxFONTENCODING_ISO8859_6 | ?wxFONTENCODING_ISO8859_7 | ?wxFONTENCODING_ISO8859_8 | ?wxFONTENCODING_ISO8859_9 | ?wxFONTENCODING_ISO8859_10 | ?wxFONTENCODING_ISO8859_11 | ?wxFONTENCODING_ISO8859_12 | ?wxFONTENCODING_ISO8859_13 | ?wxFONTENCODING_ISO8859_14 | ?wxFONTENCODING_ISO8859_15 | ?wxFONTENCODING_ISO8859_MAX | ?wxFONTENCODING_KOI8 | ?wxFONTENCODING_KOI8_U | ?wxFONTENCODING_ALTERNATIVE | ?wxFONTENCODING_BULGARIAN | ?wxFONTENCODING_CP437 | ?wxFONTENCODING_CP850 | ?wxFONTENCODING_CP852 | ?wxFONTENCODING_CP855 | ?wxFONTENCODING_CP866 | ?wxFONTENCODING_CP874 | ?wxFONTENCODING_CP932 | ?wxFONTENCODING_CP936 | ?wxFONTENCODING_CP949 | ?wxFONTENCODING_CP950 | ?wxFONTENCODING_CP1250 | ?wxFONTENCODING_CP1251 | ?wxFONTENCODING_CP1252 | ?wxFONTENCODING_CP1253 | ?wxFONTENCODING_CP1254 | ?wxFONTENCODING_CP1255 | ?wxFONTENCODING_CP1256 | ?wxFONTENCODING_CP1257 | ?wxFONTENCODING_CP12_MAX | ?wxFONTENCODING_UTF7 | ?wxFONTENCODING_UTF8 | ?wxFONTENCODING_EUC_JP | ?wxFONTENCODING_UTF16BE | ?wxFONTENCODING_UTF16LE | ?wxFONTENCODING_UTF32BE | ?wxFONTENCODING_UTF32LE | ?wxFONTENCODING_MACROMAN | ?wxFONTENCODING_MACJAPANESE | ?wxFONTENCODING_MACCHINESETRAD | ?wxFONTENCODING_MACKOREAN | ?wxFONTENCODING_MACARABIC | ?wxFONTENCODING_MACHEBREW | ?wxFONTENCODING_MACGREEK | ?wxFONTENCODING_MACCYRILLIC | ?wxFONTENCODING_MACDEVANAGARI | ?wxFONTENCODING_MACGURMUKHI | ?wxFONTENCODING_MACGUJARATI | ?wxFONTENCODING_MACORIYA | ?wxFONTENCODING_MACBENGALI | ?wxFONTENCODING_MACTAMIL | ?wxFONTENCODING_MACTELUGU | ?wxFONTENCODING_MACKANNADA | ?wxFONTENCODING_MACMALAJALAM | ?wxFONTENCODING_MACSINHALESE | ?wxFONTENCODING_MACBURMESE | ?wxFONTENCODING_MACKHMER | ?wxFONTENCODING_MACTHAI | ?wxFONTENCODING_MACLAOTIAN | ?wxFONTENCODING_MACGEORGIAN | ?wxFONTENCODING_MACARMENIAN | ?wxFONTENCODING_MACCHINESESIMP | ?wxFONTENCODING_MACTIBETAN | ?wxFONTENCODING_MACMONGOLIAN | ?wxFONTENCODING_MACETHIOPIC | ?wxFONTENCODING_MACCENTRALEUR | ?wxFONTENCODING_MACVIATNAMESE | ?wxFONTENCODING_MACARABICEXT | ?wxFONTENCODING_MACSYMBOL | ?wxFONTENCODING_MACDINGBATS | ?wxFONTENCODING_MACTURKISH | ?wxFONTENCODING_MACCROATIAN | ?wxFONTENCODING_MACICELANDIC | ?wxFONTENCODING_MACROMANIAN | ?wxFONTENCODING_MACCELTIC | ?wxFONTENCODING_MACGAELIC | ?wxFONTENCODING_MACKEYBOARD | ?wxFONTENCODING_MAX | ?wxFONTENCODING_MACMIN | ?wxFONTENCODING_MACMAX | ?wxFONTENCODING_UTF16 | ?wxFONTENCODING_UTF32 | ?wxFONTENCODING_UNICODE | ?wxFONTENCODING_GB2312 | ?wxFONTENCODING_BIG5 | ?wxFONTENCODING_SHIFT_JIS
--spec styleSetFontEncoding(This, Style, Encoding) -> ok when
+-spec styleSetFontEncoding(This, Style, Encoding) -> 'ok' when
This::wxStyledTextCtrl(), Style::integer(), Encoding::wx:wx_enum().
styleSetFontEncoding(#wx_ref{type=ThisT,ref=ThisRef},Style,Encoding)
when is_integer(Style),is_integer(Encoding) ->
@@ -3846,7 +3846,7 @@ styleSetFontEncoding(#wx_ref{type=ThisT,ref=ThisRef},Style,Encoding)
<<ThisRef:32/?UI,Style:32/?UI,Encoding:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlcmdkeyexecute">external documentation</a>.
--spec cmdKeyExecute(This, Cmd) -> ok when
+-spec cmdKeyExecute(This, Cmd) -> 'ok' when
This::wxStyledTextCtrl(), Cmd::integer().
cmdKeyExecute(#wx_ref{type=ThisT,ref=ThisRef},Cmd)
when is_integer(Cmd) ->
@@ -3855,7 +3855,7 @@ cmdKeyExecute(#wx_ref{type=ThisT,ref=ThisRef},Cmd)
<<ThisRef:32/?UI,Cmd:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetmargins">external documentation</a>.
--spec setMargins(This, Left, Right) -> ok when
+-spec setMargins(This, Left, Right) -> 'ok' when
This::wxStyledTextCtrl(), Left::integer(), Right::integer().
setMargins(#wx_ref{type=ThisT,ref=ThisRef},Left,Right)
when is_integer(Left),is_integer(Right) ->
@@ -3881,7 +3881,7 @@ pointFromPosition(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlscrolltoline">external documentation</a>.
--spec scrollToLine(This, Line) -> ok when
+-spec scrollToLine(This, Line) -> 'ok' when
This::wxStyledTextCtrl(), Line::integer().
scrollToLine(#wx_ref{type=ThisT,ref=ThisRef},Line)
when is_integer(Line) ->
@@ -3890,7 +3890,7 @@ scrollToLine(#wx_ref{type=ThisT,ref=ThisRef},Line)
<<ThisRef:32/?UI,Line:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlscrolltocolumn">external documentation</a>.
--spec scrollToColumn(This, Column) -> ok when
+-spec scrollToColumn(This, Column) -> 'ok' when
This::wxStyledTextCtrl(), Column::integer().
scrollToColumn(#wx_ref{type=ThisT,ref=ThisRef},Column)
when is_integer(Column) ->
@@ -3899,7 +3899,7 @@ scrollToColumn(#wx_ref{type=ThisT,ref=ThisRef},Column)
<<ThisRef:32/?UI,Column:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetvscrollbar">external documentation</a>.
--spec setVScrollBar(This, Bar) -> ok when
+-spec setVScrollBar(This, Bar) -> 'ok' when
This::wxStyledTextCtrl(), Bar::wxScrollBar:wxScrollBar().
setVScrollBar(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BarT,ref=BarRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3908,7 +3908,7 @@ setVScrollBar(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BarT,ref=BarRef}) ->
<<ThisRef:32/?UI,BarRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsethscrollbar">external documentation</a>.
--spec setHScrollBar(This, Bar) -> ok when
+-spec setHScrollBar(This, Bar) -> 'ok' when
This::wxStyledTextCtrl(), Bar::wxScrollBar:wxScrollBar().
setHScrollBar(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=BarT,ref=BarRef}) ->
?CLASS(ThisT,wxStyledTextCtrl),
@@ -3925,7 +3925,7 @@ getLastKeydownProcessed(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsetlastkeydownprocessed">external documentation</a>.
--spec setLastKeydownProcessed(This, Val) -> ok when
+-spec setLastKeydownProcessed(This, Val) -> 'ok' when
This::wxStyledTextCtrl(), Val::boolean().
setLastKeydownProcessed(#wx_ref{type=ThisT,ref=ThisRef},Val)
when is_boolean(Val) ->
@@ -3983,7 +3983,7 @@ getUseAntiAliasing(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrladdtextraw">external documentation</a>.
--spec addTextRaw(This, Text) -> ok when
+-spec addTextRaw(This, Text) -> 'ok' when
This::wxStyledTextCtrl(), Text::binary().
addTextRaw(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_binary(Text) ->
@@ -3993,7 +3993,7 @@ addTextRaw(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlinserttextraw">external documentation</a>.
--spec insertTextRaw(This, Pos, Text) -> ok when
+-spec insertTextRaw(This, Pos, Text) -> 'ok' when
This::wxStyledTextCtrl(), Pos::integer(), Text::binary().
insertTextRaw(#wx_ref{type=ThisT,ref=ThisRef},Pos,Text)
when is_integer(Pos),is_binary(Text) ->
@@ -4038,7 +4038,7 @@ getTextRangeRaw(#wx_ref{type=ThisT,ref=ThisRef},StartPos,EndPos)
<<ThisRef:32/?UI,StartPos:32/?UI,EndPos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlsettextraw">external documentation</a>.
--spec setTextRaw(This, Text) -> ok when
+-spec setTextRaw(This, Text) -> 'ok' when
This::wxStyledTextCtrl(), Text::binary().
setTextRaw(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_binary(Text) ->
@@ -4056,7 +4056,7 @@ getTextRaw(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxstyledtextctrl.html#wxstyledtextctrlappendtextraw">external documentation</a>.
--spec appendTextRaw(This, Text) -> ok when
+-spec appendTextRaw(This, Text) -> 'ok' when
This::wxStyledTextCtrl(), Text::binary().
appendTextRaw(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_binary(Text) ->
@@ -4066,7 +4066,7 @@ appendTextRaw(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxStyledTextCtrl()) -> ok.
+-spec destroy(This::wxStyledTextCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxStyledTextCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxSystemOptions.erl b/lib/wx/src/gen/wxSystemOptions.erl
index 9db137b6a1..28d77b1e26 100644
--- a/lib/wx/src/gen/wxSystemOptions.erl
+++ b/lib/wx/src/gen/wxSystemOptions.erl
@@ -73,12 +73,12 @@ isFalse(Name)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxsystemoptions.html#wxsystemoptionssetoption">external documentation</a>.
%% <br /> Also:<br />
-%% setOption(Name, Value) -> ok when<br />
+%% setOption(Name, Value) -> 'ok' when<br />
%% Name::unicode:chardata(), Value::unicode:chardata().<br />
%%
--spec setOption(Name, Value) -> ok when
+-spec setOption(Name, Value) -> 'ok' when
Name::unicode:chardata(), Value::integer();
- (Name, Value) -> ok when
+ (Name, Value) -> 'ok' when
Name::unicode:chardata(), Value::unicode:chardata().
setOption(Name,Value)
when is_list(Name),is_integer(Value) ->
diff --git a/lib/wx/src/gen/wxSystemSettings.erl b/lib/wx/src/gen/wxSystemSettings.erl
index 234b2414c0..b48f783a45 100644
--- a/lib/wx/src/gen/wxSystemSettings.erl
+++ b/lib/wx/src/gen/wxSystemSettings.erl
@@ -65,7 +65,7 @@ getMetric(Index)
%%<br /> Index = ?wxSYS_MOUSE_BUTTONS | ?wxSYS_BORDER_X | ?wxSYS_BORDER_Y | ?wxSYS_CURSOR_X | ?wxSYS_CURSOR_Y | ?wxSYS_DCLICK_X | ?wxSYS_DCLICK_Y | ?wxSYS_DRAG_X | ?wxSYS_DRAG_Y | ?wxSYS_EDGE_X | ?wxSYS_EDGE_Y | ?wxSYS_HSCROLL_ARROW_X | ?wxSYS_HSCROLL_ARROW_Y | ?wxSYS_HTHUMB_X | ?wxSYS_ICON_X | ?wxSYS_ICON_Y | ?wxSYS_ICONSPACING_X | ?wxSYS_ICONSPACING_Y | ?wxSYS_WINDOWMIN_X | ?wxSYS_WINDOWMIN_Y | ?wxSYS_SCREEN_X | ?wxSYS_SCREEN_Y | ?wxSYS_FRAMESIZE_X | ?wxSYS_FRAMESIZE_Y | ?wxSYS_SMALLICON_X | ?wxSYS_SMALLICON_Y | ?wxSYS_HSCROLL_Y | ?wxSYS_VSCROLL_X | ?wxSYS_VSCROLL_ARROW_X | ?wxSYS_VSCROLL_ARROW_Y | ?wxSYS_VTHUMB_Y | ?wxSYS_CAPTION_Y | ?wxSYS_MENU_Y | ?wxSYS_NETWORK_PRESENT | ?wxSYS_PENWINDOWS_PRESENT | ?wxSYS_SHOW_SOUNDS | ?wxSYS_SWAP_BUTTONS
-spec getMetric(Index, [Option]) -> integer() when
Index::wx:wx_enum(),
- Option :: {win, wxWindow:wxWindow()}.
+ Option :: {'win', wxWindow:wxWindow()}.
getMetric(Index, Options)
when is_integer(Index),is_list(Options) ->
MOpts = fun({win, #wx_ref{type=WinT,ref=WinRef}}, Acc) -> ?CLASS(WinT,wxWindow),[<<1:32/?UI,WinRef:32/?UI>>|Acc];
diff --git a/lib/wx/src/gen/wxTaskBarIcon.erl b/lib/wx/src/gen/wxTaskBarIcon.erl
index 0f336c6e4c..af4859fb88 100644
--- a/lib/wx/src/gen/wxTaskBarIcon.erl
+++ b/lib/wx/src/gen/wxTaskBarIcon.erl
@@ -73,7 +73,7 @@ setIcon(This,Icon)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtaskbaricon.html#wxtaskbariconseticon">external documentation</a>.
-spec setIcon(This, Icon, [Option]) -> boolean() when
This::wxTaskBarIcon(), Icon::wxIcon:wxIcon(),
- Option :: {tooltip, unicode:chardata()}.
+ Option :: {'tooltip', unicode:chardata()}.
setIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTaskBarIcon),
@@ -85,7 +85,7 @@ setIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef}, Options
<<ThisRef:32/?UI,IconRef:32/?UI, BinOpt/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxTaskBarIcon()) -> ok.
+-spec destroy(This::wxTaskBarIcon()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxTaskBarIcon),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxTextAttr.erl b/lib/wx/src/gen/wxTextAttr.erl
index bcc2abf73e..4f6031cc88 100644
--- a/lib/wx/src/gen/wxTextAttr.erl
+++ b/lib/wx/src/gen/wxTextAttr.erl
@@ -58,9 +58,9 @@ new(ColText)
%%<br /> Alignment = ?wxTEXT_ALIGNMENT_DEFAULT | ?wxTEXT_ALIGNMENT_LEFT | ?wxTEXT_ALIGNMENT_CENTRE | ?wxTEXT_ALIGNMENT_CENTER | ?wxTEXT_ALIGNMENT_RIGHT | ?wxTEXT_ALIGNMENT_JUSTIFIED
-spec new(ColText, [Option]) -> wxTextAttr() when
ColText::wx:wx_colour(),
- Option :: {colBack, wx:wx_colour()}
- | {font, wxFont:wxFont()}
- | {alignment, wx:wx_enum()}.
+ Option :: {'colBack', wx:wx_colour()}
+ | {'font', wxFont:wxFont()}
+ | {'alignment', wx:wx_enum()}.
new(ColText, Options)
when tuple_size(ColText) =:= 3; tuple_size(ColText) =:= 4,is_list(Options) ->
MOpts = fun({colBack, ColBack}, Acc) -> [<<1:32/?UI,(wxe_util:colour_bin(ColBack)):16/binary,0:32>>|Acc];
@@ -178,7 +178,7 @@ isDefault(#wx_ref{type=ThisT,ref=ThisRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextattr.html#wxtextattrsetalignment">external documentation</a>.
%%<br /> Alignment = ?wxTEXT_ALIGNMENT_DEFAULT | ?wxTEXT_ALIGNMENT_LEFT | ?wxTEXT_ALIGNMENT_CENTRE | ?wxTEXT_ALIGNMENT_CENTER | ?wxTEXT_ALIGNMENT_RIGHT | ?wxTEXT_ALIGNMENT_JUSTIFIED
--spec setAlignment(This, Alignment) -> ok when
+-spec setAlignment(This, Alignment) -> 'ok' when
This::wxTextAttr(), Alignment::wx:wx_enum().
setAlignment(#wx_ref{type=ThisT,ref=ThisRef},Alignment)
when is_integer(Alignment) ->
@@ -187,7 +187,7 @@ setAlignment(#wx_ref{type=ThisT,ref=ThisRef},Alignment)
<<ThisRef:32/?UI,Alignment:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextattr.html#wxtextattrsetbackgroundcolour">external documentation</a>.
--spec setBackgroundColour(This, ColBack) -> ok when
+-spec setBackgroundColour(This, ColBack) -> 'ok' when
This::wxTextAttr(), ColBack::wx:wx_colour().
setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
when tuple_size(ColBack) =:= 3; tuple_size(ColBack) =:= 4 ->
@@ -196,7 +196,7 @@ setBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},ColBack)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColBack)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextattr.html#wxtextattrsetflags">external documentation</a>.
--spec setFlags(This, Flags) -> ok when
+-spec setFlags(This, Flags) -> 'ok' when
This::wxTextAttr(), Flags::integer().
setFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
when is_integer(Flags) ->
@@ -205,7 +205,7 @@ setFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
<<ThisRef:32/?UI,Flags:32/?UI>>).
%% @equiv setFont(This,Font, [])
--spec setFont(This, Font) -> ok when
+-spec setFont(This, Font) -> 'ok' when
This::wxTextAttr(), Font::wxFont:wxFont().
setFont(This,Font)
@@ -213,9 +213,9 @@ setFont(This,Font)
setFont(This,Font, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextattr.html#wxtextattrsetfont">external documentation</a>.
--spec setFont(This, Font, [Option]) -> ok when
+-spec setFont(This, Font, [Option]) -> 'ok' when
This::wxTextAttr(), Font::wxFont:wxFont(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTextAttr),
@@ -227,7 +227,7 @@ setFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}, Options
<<ThisRef:32/?UI,FontRef:32/?UI, BinOpt/binary>>).
%% @equiv setLeftIndent(This,Indent, [])
--spec setLeftIndent(This, Indent) -> ok when
+-spec setLeftIndent(This, Indent) -> 'ok' when
This::wxTextAttr(), Indent::integer().
setLeftIndent(This,Indent)
@@ -235,9 +235,9 @@ setLeftIndent(This,Indent)
setLeftIndent(This,Indent, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextattr.html#wxtextattrsetleftindent">external documentation</a>.
--spec setLeftIndent(This, Indent, [Option]) -> ok when
+-spec setLeftIndent(This, Indent, [Option]) -> 'ok' when
This::wxTextAttr(), Indent::integer(),
- Option :: {subIndent, integer()}.
+ Option :: {'subIndent', integer()}.
setLeftIndent(#wx_ref{type=ThisT,ref=ThisRef},Indent, Options)
when is_integer(Indent),is_list(Options) ->
?CLASS(ThisT,wxTextAttr),
@@ -248,7 +248,7 @@ setLeftIndent(#wx_ref{type=ThisT,ref=ThisRef},Indent, Options)
<<ThisRef:32/?UI,Indent:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextattr.html#wxtextattrsetrightindent">external documentation</a>.
--spec setRightIndent(This, Indent) -> ok when
+-spec setRightIndent(This, Indent) -> 'ok' when
This::wxTextAttr(), Indent::integer().
setRightIndent(#wx_ref{type=ThisT,ref=ThisRef},Indent)
when is_integer(Indent) ->
@@ -257,7 +257,7 @@ setRightIndent(#wx_ref{type=ThisT,ref=ThisRef},Indent)
<<ThisRef:32/?UI,Indent:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextattr.html#wxtextattrsettabs">external documentation</a>.
--spec setTabs(This, Tabs) -> ok when
+-spec setTabs(This, Tabs) -> 'ok' when
This::wxTextAttr(), Tabs::[integer()].
setTabs(#wx_ref{type=ThisT,ref=ThisRef},Tabs)
when is_list(Tabs) ->
@@ -267,7 +267,7 @@ setTabs(#wx_ref{type=ThisT,ref=ThisRef},Tabs)
(<< <<C:32/?I>> || C <- Tabs>>)/binary, 0:(((0+length(Tabs)) rem 2)*32)>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextattr.html#wxtextattrsettextcolour">external documentation</a>.
--spec setTextColour(This, ColText) -> ok when
+-spec setTextColour(This, ColText) -> 'ok' when
This::wxTextAttr(), ColText::wx:wx_colour().
setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
when tuple_size(ColText) =:= 3; tuple_size(ColText) =:= 4 ->
@@ -276,7 +276,7 @@ setTextColour(#wx_ref{type=ThisT,ref=ThisRef},ColText)
<<ThisRef:32/?UI,(wxe_util:colour_bin(ColText)):16/binary>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxTextAttr()) -> ok.
+-spec destroy(This::wxTextAttr()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxTextAttr),
wxe_util:destroy(?wxTextAttr_destroy,Obj),
diff --git a/lib/wx/src/gen/wxTextCtrl.erl b/lib/wx/src/gen/wxTextCtrl.erl
index 5840812579..5f03398959 100644
--- a/lib/wx/src/gen/wxTextCtrl.erl
+++ b/lib/wx/src/gen/wxTextCtrl.erl
@@ -104,11 +104,11 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlwxtextctrl">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxTextCtrl() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {value, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'value', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -123,7 +123,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
<<ParentRef:32/?UI,Id:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlappendtext">external documentation</a>.
--spec appendText(This, Text) -> ok when
+-spec appendText(This, Text) -> 'ok' when
This::wxTextCtrl(), Text::unicode:chardata().
appendText(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -173,7 +173,7 @@ canUndo(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlclear">external documentation</a>.
--spec clear(This) -> ok when
+-spec clear(This) -> 'ok' when
This::wxTextCtrl().
clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTextCtrl),
@@ -181,7 +181,7 @@ clear(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlcopy">external documentation</a>.
--spec copy(This) -> ok when
+-spec copy(This) -> 'ok' when
This::wxTextCtrl().
copy(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTextCtrl),
@@ -199,11 +199,11 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxTextCtrl(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {value, unicode:chardata()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'value', unicode:chardata()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxTextCtrl),
@@ -219,7 +219,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, O
<<ThisRef:32/?UI,ParentRef:32/?UI,Id:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlcut">external documentation</a>.
--spec cut(This) -> ok when
+-spec cut(This) -> 'ok' when
This::wxTextCtrl().
cut(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTextCtrl),
@@ -227,7 +227,7 @@ cut(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrldiscardedits">external documentation</a>.
--spec discardEdits(This) -> ok when
+-spec discardEdits(This) -> 'ok' when
This::wxTextCtrl().
discardEdits(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTextCtrl),
@@ -235,7 +235,7 @@ discardEdits(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlchangevalue">external documentation</a>.
--spec changeValue(This, Value) -> ok when
+-spec changeValue(This, Value) -> 'ok' when
This::wxTextCtrl(), Value::unicode:chardata().
changeValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
when is_list(Value) ->
@@ -389,7 +389,7 @@ loadFile(This,File)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlloadfile">external documentation</a>.
-spec loadFile(This, File, [Option]) -> boolean() when
This::wxTextCtrl(), File::unicode:chardata(),
- Option :: {fileType, integer()}.
+ Option :: {'fileType', integer()}.
loadFile(#wx_ref{type=ThisT,ref=ThisRef},File, Options)
when is_list(File),is_list(Options) ->
?CLASS(ThisT,wxTextCtrl),
@@ -401,7 +401,7 @@ loadFile(#wx_ref{type=ThisT,ref=ThisRef},File, Options)
<<ThisRef:32/?UI,(byte_size(File_UC)):32/?UI,(File_UC)/binary, 0:(((8- ((0+byte_size(File_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlmarkdirty">external documentation</a>.
--spec markDirty(This) -> ok when
+-spec markDirty(This) -> 'ok' when
This::wxTextCtrl().
markDirty(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTextCtrl),
@@ -409,7 +409,7 @@ markDirty(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlpaste">external documentation</a>.
--spec paste(This) -> ok when
+-spec paste(This) -> 'ok' when
This::wxTextCtrl().
paste(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTextCtrl),
@@ -427,7 +427,7 @@ positionToXY(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlredo">external documentation</a>.
--spec redo(This) -> ok when
+-spec redo(This) -> 'ok' when
This::wxTextCtrl().
redo(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTextCtrl),
@@ -435,7 +435,7 @@ redo(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlremove">external documentation</a>.
--spec remove(This, From, To) -> ok when
+-spec remove(This, From, To) -> 'ok' when
This::wxTextCtrl(), From::integer(), To::integer().
remove(#wx_ref{type=ThisT,ref=ThisRef},From,To)
when is_integer(From),is_integer(To) ->
@@ -444,7 +444,7 @@ remove(#wx_ref{type=ThisT,ref=ThisRef},From,To)
<<ThisRef:32/?UI,From:32/?UI,To:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlreplace">external documentation</a>.
--spec replace(This, From, To, Value) -> ok when
+-spec replace(This, From, To, Value) -> 'ok' when
This::wxTextCtrl(), From::integer(), To::integer(), Value::unicode:chardata().
replace(#wx_ref{type=ThisT,ref=ThisRef},From,To,Value)
when is_integer(From),is_integer(To),is_list(Value) ->
@@ -464,8 +464,8 @@ saveFile(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlsavefile">external documentation</a>.
-spec saveFile(This, [Option]) -> boolean() when
This::wxTextCtrl(),
- Option :: {file, unicode:chardata()}
- | {fileType, integer()}.
+ Option :: {'file', unicode:chardata()}
+ | {'fileType', integer()}.
saveFile(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTextCtrl),
@@ -486,7 +486,7 @@ setDefaultStyle(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=StyleT,ref=StyleRef
<<ThisRef:32/?UI,StyleRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlseteditable">external documentation</a>.
--spec setEditable(This, Editable) -> ok when
+-spec setEditable(This, Editable) -> 'ok' when
This::wxTextCtrl(), Editable::boolean().
setEditable(#wx_ref{type=ThisT,ref=ThisRef},Editable)
when is_boolean(Editable) ->
@@ -495,7 +495,7 @@ setEditable(#wx_ref{type=ThisT,ref=ThisRef},Editable)
<<ThisRef:32/?UI,(wxe_util:from_bool(Editable)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlsetinsertionpoint">external documentation</a>.
--spec setInsertionPoint(This, Pos) -> ok when
+-spec setInsertionPoint(This, Pos) -> 'ok' when
This::wxTextCtrl(), Pos::integer().
setInsertionPoint(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -504,7 +504,7 @@ setInsertionPoint(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlsetinsertionpointend">external documentation</a>.
--spec setInsertionPointEnd(This) -> ok when
+-spec setInsertionPointEnd(This) -> 'ok' when
This::wxTextCtrl().
setInsertionPointEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTextCtrl),
@@ -512,7 +512,7 @@ setInsertionPointEnd(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlsetmaxlength">external documentation</a>.
--spec setMaxLength(This, Len) -> ok when
+-spec setMaxLength(This, Len) -> 'ok' when
This::wxTextCtrl(), Len::integer().
setMaxLength(#wx_ref{type=ThisT,ref=ThisRef},Len)
when is_integer(Len) ->
@@ -521,7 +521,7 @@ setMaxLength(#wx_ref{type=ThisT,ref=ThisRef},Len)
<<ThisRef:32/?UI,Len:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlsetselection">external documentation</a>.
--spec setSelection(This, From, To) -> ok when
+-spec setSelection(This, From, To) -> 'ok' when
This::wxTextCtrl(), From::integer(), To::integer().
setSelection(#wx_ref{type=ThisT,ref=ThisRef},From,To)
when is_integer(From),is_integer(To) ->
@@ -540,7 +540,7 @@ setStyle(#wx_ref{type=ThisT,ref=ThisRef},Start,End,#wx_ref{type=StyleT,ref=Style
<<ThisRef:32/?UI,Start:32/?UI,End:32/?UI,StyleRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlsetvalue">external documentation</a>.
--spec setValue(This, Value) -> ok when
+-spec setValue(This, Value) -> 'ok' when
This::wxTextCtrl(), Value::unicode:chardata().
setValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
when is_list(Value) ->
@@ -550,7 +550,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},Value)
<<ThisRef:32/?UI,(byte_size(Value_UC)):32/?UI,(Value_UC)/binary, 0:(((8- ((0+byte_size(Value_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlshowposition">external documentation</a>.
--spec showPosition(This, Pos) -> ok when
+-spec showPosition(This, Pos) -> 'ok' when
This::wxTextCtrl(), Pos::integer().
showPosition(#wx_ref{type=ThisT,ref=ThisRef},Pos)
when is_integer(Pos) ->
@@ -559,7 +559,7 @@ showPosition(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlundo">external documentation</a>.
--spec undo(This) -> ok when
+-spec undo(This) -> 'ok' when
This::wxTextCtrl().
undo(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTextCtrl),
@@ -567,7 +567,7 @@ undo(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextctrl.html#wxtextctrlwritetext">external documentation</a>.
--spec writeText(This, Text) -> ok when
+-spec writeText(This, Text) -> 'ok' when
This::wxTextCtrl(), Text::unicode:chardata().
writeText(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -586,7 +586,7 @@ xYToPosition(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxTextCtrl()) -> ok.
+-spec destroy(This::wxTextCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxTextCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxTextDataObject.erl b/lib/wx/src/gen/wxTextDataObject.erl
index a1893eed1c..eb3e1f4bff 100644
--- a/lib/wx/src/gen/wxTextDataObject.erl
+++ b/lib/wx/src/gen/wxTextDataObject.erl
@@ -47,7 +47,7 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextdataobject.html#wxtextdataobjectwxtextdataobject">external documentation</a>.
-spec new([Option]) -> wxTextDataObject() when
- Option :: {text, unicode:chardata()}.
+ Option :: {'text', unicode:chardata()}.
new(Options)
when is_list(Options) ->
MOpts = fun({text, Text}, Acc) -> Text_UC = unicode:characters_to_binary([Text,0]),[<<1:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>|Acc];
@@ -73,7 +73,7 @@ getText(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextdataobject.html#wxtextdataobjectsettext">external documentation</a>.
--spec setText(This, Text) -> ok when
+-spec setText(This, Text) -> 'ok' when
This::wxTextDataObject(), Text::unicode:chardata().
setText(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -83,7 +83,7 @@ setText(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxTextDataObject()) -> ok.
+-spec destroy(This::wxTextDataObject()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxTextDataObject),
wxe_util:destroy(?wxTextDataObject_destroy,Obj),
diff --git a/lib/wx/src/gen/wxTextEntryDialog.erl b/lib/wx/src/gen/wxTextEntryDialog.erl
index a93c3857a8..eaf6dc3926 100644
--- a/lib/wx/src/gen/wxTextEntryDialog.erl
+++ b/lib/wx/src/gen/wxTextEntryDialog.erl
@@ -99,10 +99,10 @@ new(Parent,Message)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextentrydialog.html#wxtextentrydialogwxtextentrydialog">external documentation</a>.
-spec new(Parent, Message, [Option]) -> wxTextEntryDialog() when
Parent::wxWindow:wxWindow(), Message::unicode:chardata(),
- Option :: {caption, unicode:chardata()}
- | {value, unicode:chardata()}
- | {style, integer()}
- | {pos, {X::integer(), Y::integer()}}.
+ Option :: {'caption', unicode:chardata()}
+ | {'value', unicode:chardata()}
+ | {'style', integer()}
+ | {'pos', {X::integer(), Y::integer()}}.
new(#wx_ref{type=ParentT,ref=ParentRef},Message, Options)
when is_list(Message),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -125,7 +125,7 @@ getValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtextentrydialog.html#wxtextentrydialogsetvalue">external documentation</a>.
--spec setValue(This, Val) -> ok when
+-spec setValue(This, Val) -> 'ok' when
This::wxTextEntryDialog(), Val::unicode:chardata().
setValue(#wx_ref{type=ThisT,ref=ThisRef},Val)
when is_list(Val) ->
@@ -135,7 +135,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},Val)
<<ThisRef:32/?UI,(byte_size(Val_UC)):32/?UI,(Val_UC)/binary, 0:(((8- ((0+byte_size(Val_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxTextEntryDialog()) -> ok.
+-spec destroy(This::wxTextEntryDialog()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxTextEntryDialog),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxToggleButton.erl b/lib/wx/src/gen/wxToggleButton.erl
index dffb4b159d..9e8dab1c32 100644
--- a/lib/wx/src/gen/wxToggleButton.erl
+++ b/lib/wx/src/gen/wxToggleButton.erl
@@ -96,10 +96,10 @@ new(Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtogglebutton.html#wxtogglebuttonwxtogglebutton">external documentation</a>.
-spec new(Parent, Id, Label, [Option]) -> wxToggleButton() when
Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -124,10 +124,10 @@ create(This,Parent,Id,Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtogglebutton.html#wxtogglebuttoncreate">external documentation</a>.
-spec create(This, Parent, Id, Label, [Option]) -> boolean() when
This::wxToggleButton(), Parent::wxWindow:wxWindow(), Id::integer(), Label::unicode:chardata(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Label, Options)
when is_integer(Id),is_list(Label),is_list(Options) ->
?CLASS(ThisT,wxToggleButton),
@@ -151,7 +151,7 @@ getValue(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtogglebutton.html#wxtogglebuttonsetvalue">external documentation</a>.
--spec setValue(This, State) -> ok when
+-spec setValue(This, State) -> 'ok' when
This::wxToggleButton(), State::boolean().
setValue(#wx_ref{type=ThisT,ref=ThisRef},State)
when is_boolean(State) ->
@@ -160,7 +160,7 @@ setValue(#wx_ref{type=ThisT,ref=ThisRef},State)
<<ThisRef:32/?UI,(wxe_util:from_bool(State)):32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxToggleButton()) -> ok.
+-spec destroy(This::wxToggleButton()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxToggleButton),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxToolBar.erl b/lib/wx/src/gen/wxToolBar.erl
index b3cce2b6e9..9be37f943c 100644
--- a/lib/wx/src/gen/wxToolBar.erl
+++ b/lib/wx/src/gen/wxToolBar.erl
@@ -128,8 +128,8 @@ addTool(This,Toolid,Bitmap)
%% This::wxToolBar(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(), BmpDisabled::wxBitmap:wxBitmap();<br />
%% (This, Toolid, Bitmap, [Option]) -> wx:wx_object() when<br />
%% This::wxToolBar(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(),<br />
-%% Option :: {shortHelpString, unicode:chardata()}<br />
-%% | {longHelpString, unicode:chardata()}.<br />
+%% Option :: {'shortHelpString', unicode:chardata()}<br />
+%% | {'longHelpString', unicode:chardata()}.<br />
%%
%%<br /> Kind = ?wxITEM_SEPARATOR | ?wxITEM_NORMAL | ?wxITEM_CHECK | ?wxITEM_RADIO | ?wxITEM_MAX
-spec addTool(This, Toolid, Label, Bitmap) -> wx:wx_object() when
@@ -138,8 +138,8 @@ addTool(This,Toolid,Bitmap)
This::wxToolBar(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(), BmpDisabled::wxBitmap:wxBitmap();
(This, Toolid, Bitmap, [Option]) -> wx:wx_object() when
This::wxToolBar(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(),
- Option :: {shortHelpString, unicode:chardata()}
- | {longHelpString, unicode:chardata()}.
+ Option :: {'shortHelpString', unicode:chardata()}
+ | {'longHelpString', unicode:chardata()}.
addTool(This,Toolid,Label,Bitmap)
when is_record(This, wx_ref),is_integer(Toolid),is_list(Label),is_record(Bitmap, wx_ref) ->
@@ -163,28 +163,28 @@ addTool(#wx_ref{type=ThisT,ref=ThisRef},Toolid,#wx_ref{type=BitmapT,ref=BitmapRe
%% <br /> Also:<br />
%% addTool(This, Toolid, Label, Bitmap, [Option]) -> wx:wx_object() when<br />
%% This::wxToolBar(), Toolid::integer(), Label::unicode:chardata(), Bitmap::wxBitmap:wxBitmap(),<br />
-%% Option :: {shortHelp, unicode:chardata()}<br />
-%% | {kind, wx:wx_enum()};<br />
+%% Option :: {'shortHelp', unicode:chardata()}<br />
+%% | {'kind', wx:wx_enum()};<br />
%% (This, Toolid, Bitmap, BmpDisabled, [Option]) -> wx:wx_object() when<br />
%% This::wxToolBar(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(), BmpDisabled::wxBitmap:wxBitmap(),<br />
-%% Option :: {toggle, boolean()}<br />
-%% | {clientData, wx:wx_object()}<br />
-%% | {shortHelpString, unicode:chardata()}<br />
-%% | {longHelpString, unicode:chardata()}.<br />
+%% Option :: {'toggle', boolean()}<br />
+%% | {'clientData', wx:wx_object()}<br />
+%% | {'shortHelpString', unicode:chardata()}<br />
+%% | {'longHelpString', unicode:chardata()}.<br />
%%
%%<br /> Kind = ?wxITEM_SEPARATOR | ?wxITEM_NORMAL | ?wxITEM_CHECK | ?wxITEM_RADIO | ?wxITEM_MAX
-spec addTool(This, Toolid, Label, Bitmap, BmpDisabled) -> wx:wx_object() when
This::wxToolBar(), Toolid::integer(), Label::unicode:chardata(), Bitmap::wxBitmap:wxBitmap(), BmpDisabled::wxBitmap:wxBitmap();
(This, Toolid, Label, Bitmap, [Option]) -> wx:wx_object() when
This::wxToolBar(), Toolid::integer(), Label::unicode:chardata(), Bitmap::wxBitmap:wxBitmap(),
- Option :: {shortHelp, unicode:chardata()}
- | {kind, wx:wx_enum()};
+ Option :: {'shortHelp', unicode:chardata()}
+ | {'kind', wx:wx_enum()};
(This, Toolid, Bitmap, BmpDisabled, [Option]) -> wx:wx_object() when
This::wxToolBar(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(), BmpDisabled::wxBitmap:wxBitmap(),
- Option :: {toggle, boolean()}
- | {clientData, wx:wx_object()}
- | {shortHelpString, unicode:chardata()}
- | {longHelpString, unicode:chardata()}.
+ Option :: {'toggle', boolean()}
+ | {'clientData', wx:wx_object()}
+ | {'shortHelpString', unicode:chardata()}
+ | {'longHelpString', unicode:chardata()}.
addTool(This,Toolid,Label,Bitmap,BmpDisabled)
when is_record(This, wx_ref),is_integer(Toolid),is_list(Label),is_record(Bitmap, wx_ref),is_record(BmpDisabled, wx_ref) ->
@@ -218,20 +218,20 @@ addTool(#wx_ref{type=ThisT,ref=ThisRef},Toolid,#wx_ref{type=BitmapT,ref=BitmapRe
%% <br /> Also:<br />
%% addTool(This, Toolid, Label, Bitmap, BmpDisabled, [Option]) -> wx:wx_object() when<br />
%% This::wxToolBar(), Toolid::integer(), Label::unicode:chardata(), Bitmap::wxBitmap:wxBitmap(), BmpDisabled::wxBitmap:wxBitmap(),<br />
-%% Option :: {kind, wx:wx_enum()}<br />
-%% | {shortHelp, unicode:chardata()}<br />
-%% | {longHelp, unicode:chardata()}<br />
-%% | {data, wx:wx_object()}.<br />
+%% Option :: {'kind', wx:wx_enum()}<br />
+%% | {'shortHelp', unicode:chardata()}<br />
+%% | {'longHelp', unicode:chardata()}<br />
+%% | {'data', wx:wx_object()}.<br />
%%
%%<br /> Kind = ?wxITEM_SEPARATOR | ?wxITEM_NORMAL | ?wxITEM_CHECK | ?wxITEM_RADIO | ?wxITEM_MAX
-spec addTool(This, Toolid, Bitmap, BmpDisabled, Toggle, XPos) -> wx:wx_object() when
This::wxToolBar(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(), BmpDisabled::wxBitmap:wxBitmap(), Toggle::boolean(), XPos::integer();
(This, Toolid, Label, Bitmap, BmpDisabled, [Option]) -> wx:wx_object() when
This::wxToolBar(), Toolid::integer(), Label::unicode:chardata(), Bitmap::wxBitmap:wxBitmap(), BmpDisabled::wxBitmap:wxBitmap(),
- Option :: {kind, wx:wx_enum()}
- | {shortHelp, unicode:chardata()}
- | {longHelp, unicode:chardata()}
- | {data, wx:wx_object()}.
+ Option :: {'kind', wx:wx_enum()}
+ | {'shortHelp', unicode:chardata()}
+ | {'longHelp', unicode:chardata()}
+ | {'data', wx:wx_object()}.
addTool(This,Toolid,Bitmap,BmpDisabled,Toggle,XPos)
when is_record(This, wx_ref),is_integer(Toolid),is_record(Bitmap, wx_ref),is_record(BmpDisabled, wx_ref),is_boolean(Toggle),is_integer(XPos) ->
@@ -254,10 +254,10 @@ addTool(#wx_ref{type=ThisT,ref=ThisRef},Toolid,Label,#wx_ref{type=BitmapT,ref=Bi
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbaraddtool">external documentation</a>.
-spec addTool(This, Toolid, Bitmap, BmpDisabled, Toggle, XPos, [Option]) -> wx:wx_object() when
This::wxToolBar(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(), BmpDisabled::wxBitmap:wxBitmap(), Toggle::boolean(), XPos::integer(),
- Option :: {yPos, integer()}
- | {clientData, wx:wx_object()}
- | {shortHelp, unicode:chardata()}
- | {longHelp, unicode:chardata()}.
+ Option :: {'yPos', integer()}
+ | {'clientData', wx:wx_object()}
+ | {'shortHelp', unicode:chardata()}
+ | {'longHelp', unicode:chardata()}.
addTool(#wx_ref{type=ThisT,ref=ThisRef},Toolid,#wx_ref{type=BitmapT,ref=BitmapRef},#wx_ref{type=BmpDisabledT,ref=BmpDisabledRef},Toggle,XPos, Options)
when is_integer(Toolid),is_boolean(Toggle),is_integer(XPos),is_list(Options) ->
?CLASS(ThisT,wxToolBar),
@@ -283,10 +283,10 @@ addCheckTool(This,Toolid,Label,Bitmap)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbaraddchecktool">external documentation</a>.
-spec addCheckTool(This, Toolid, Label, Bitmap, [Option]) -> wx:wx_object() when
This::wxToolBar(), Toolid::integer(), Label::unicode:chardata(), Bitmap::wxBitmap:wxBitmap(),
- Option :: {bmpDisabled, wxBitmap:wxBitmap()}
- | {shortHelp, unicode:chardata()}
- | {longHelp, unicode:chardata()}
- | {data, wx:wx_object()}.
+ Option :: {'bmpDisabled', wxBitmap:wxBitmap()}
+ | {'shortHelp', unicode:chardata()}
+ | {'longHelp', unicode:chardata()}
+ | {'data', wx:wx_object()}.
addCheckTool(#wx_ref{type=ThisT,ref=ThisRef},Toolid,Label,#wx_ref{type=BitmapT,ref=BitmapRef}, Options)
when is_integer(Toolid),is_list(Label),is_list(Options) ->
?CLASS(ThisT,wxToolBar),
@@ -312,10 +312,10 @@ addRadioTool(This,Toolid,Label,Bitmap)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbaraddradiotool">external documentation</a>.
-spec addRadioTool(This, Toolid, Label, Bitmap, [Option]) -> wx:wx_object() when
This::wxToolBar(), Toolid::integer(), Label::unicode:chardata(), Bitmap::wxBitmap:wxBitmap(),
- Option :: {bmpDisabled, wxBitmap:wxBitmap()}
- | {shortHelp, unicode:chardata()}
- | {longHelp, unicode:chardata()}
- | {data, wx:wx_object()}.
+ Option :: {'bmpDisabled', wxBitmap:wxBitmap()}
+ | {'shortHelp', unicode:chardata()}
+ | {'longHelp', unicode:chardata()}
+ | {'data', wx:wx_object()}.
addRadioTool(#wx_ref{type=ThisT,ref=ThisRef},Toolid,Label,#wx_ref{type=BitmapT,ref=BitmapRef}, Options)
when is_integer(Toolid),is_list(Label),is_list(Options) ->
?CLASS(ThisT,wxToolBar),
@@ -366,7 +366,7 @@ deleteToolByPos(#wx_ref{type=ThisT,ref=ThisRef},Pos)
<<ThisRef:32/?UI,Pos:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbarenabletool">external documentation</a>.
--spec enableTool(This, Toolid, Enable) -> ok when
+-spec enableTool(This, Toolid, Enable) -> 'ok' when
This::wxToolBar(), Toolid::integer(), Enable::boolean().
enableTool(#wx_ref{type=ThisT,ref=ThisRef},Toolid,Enable)
when is_integer(Toolid),is_boolean(Enable) ->
@@ -527,22 +527,22 @@ insertTool(This,Pos,Toolid,Bitmap)
%% <br /> Also:<br />
%% insertTool(This, Pos, Toolid, Bitmap, [Option]) -> wx:wx_object() when<br />
%% This::wxToolBar(), Pos::integer(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(),<br />
-%% Option :: {bmpDisabled, wxBitmap:wxBitmap()}<br />
-%% | {toggle, boolean()}<br />
-%% | {clientData, wx:wx_object()}<br />
-%% | {shortHelp, unicode:chardata()}<br />
-%% | {longHelp, unicode:chardata()}.<br />
+%% Option :: {'bmpDisabled', wxBitmap:wxBitmap()}<br />
+%% | {'toggle', boolean()}<br />
+%% | {'clientData', wx:wx_object()}<br />
+%% | {'shortHelp', unicode:chardata()}<br />
+%% | {'longHelp', unicode:chardata()}.<br />
%%
%%<br /> Kind = ?wxITEM_SEPARATOR | ?wxITEM_NORMAL | ?wxITEM_CHECK | ?wxITEM_RADIO | ?wxITEM_MAX
-spec insertTool(This, Pos, Toolid, Label, Bitmap) -> wx:wx_object() when
This::wxToolBar(), Pos::integer(), Toolid::integer(), Label::unicode:chardata(), Bitmap::wxBitmap:wxBitmap();
(This, Pos, Toolid, Bitmap, [Option]) -> wx:wx_object() when
This::wxToolBar(), Pos::integer(), Toolid::integer(), Bitmap::wxBitmap:wxBitmap(),
- Option :: {bmpDisabled, wxBitmap:wxBitmap()}
- | {toggle, boolean()}
- | {clientData, wx:wx_object()}
- | {shortHelp, unicode:chardata()}
- | {longHelp, unicode:chardata()}.
+ Option :: {'bmpDisabled', wxBitmap:wxBitmap()}
+ | {'toggle', boolean()}
+ | {'clientData', wx:wx_object()}
+ | {'shortHelp', unicode:chardata()}
+ | {'longHelp', unicode:chardata()}.
insertTool(This,Pos,Toolid,Label,Bitmap)
when is_record(This, wx_ref),is_integer(Pos),is_integer(Toolid),is_list(Label),is_record(Bitmap, wx_ref) ->
@@ -565,11 +565,11 @@ insertTool(#wx_ref{type=ThisT,ref=ThisRef},Pos,Toolid,#wx_ref{type=BitmapT,ref=B
%%<br /> Kind = ?wxITEM_SEPARATOR | ?wxITEM_NORMAL | ?wxITEM_CHECK | ?wxITEM_RADIO | ?wxITEM_MAX
-spec insertTool(This, Pos, Toolid, Label, Bitmap, [Option]) -> wx:wx_object() when
This::wxToolBar(), Pos::integer(), Toolid::integer(), Label::unicode:chardata(), Bitmap::wxBitmap:wxBitmap(),
- Option :: {bmpDisabled, wxBitmap:wxBitmap()}
- | {kind, wx:wx_enum()}
- | {shortHelp, unicode:chardata()}
- | {longHelp, unicode:chardata()}
- | {clientData, wx:wx_object()}.
+ Option :: {'bmpDisabled', wxBitmap:wxBitmap()}
+ | {'kind', wx:wx_enum()}
+ | {'shortHelp', unicode:chardata()}
+ | {'longHelp', unicode:chardata()}
+ | {'clientData', wx:wx_object()}.
insertTool(#wx_ref{type=ThisT,ref=ThisRef},Pos,Toolid,Label,#wx_ref{type=BitmapT,ref=BitmapRef}, Options)
when is_integer(Pos),is_integer(Toolid),is_list(Label),is_list(Options) ->
?CLASS(ThisT,wxToolBar),
@@ -603,7 +603,7 @@ removeTool(#wx_ref{type=ThisT,ref=ThisRef},Toolid)
<<ThisRef:32/?UI,Toolid:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbarsetmargins">external documentation</a>.
--spec setMargins(This, X, Y) -> ok when
+-spec setMargins(This, X, Y) -> 'ok' when
This::wxToolBar(), X::integer(), Y::integer().
setMargins(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -612,7 +612,7 @@ setMargins(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbarsettoolbitmapsize">external documentation</a>.
--spec setToolBitmapSize(This, Size) -> ok when
+-spec setToolBitmapSize(This, Size) -> 'ok' when
This::wxToolBar(), Size::{W::integer(), H::integer()}.
setToolBitmapSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -621,7 +621,7 @@ setToolBitmapSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbarsettoollonghelp">external documentation</a>.
--spec setToolLongHelp(This, Toolid, HelpString) -> ok when
+-spec setToolLongHelp(This, Toolid, HelpString) -> 'ok' when
This::wxToolBar(), Toolid::integer(), HelpString::unicode:chardata().
setToolLongHelp(#wx_ref{type=ThisT,ref=ThisRef},Toolid,HelpString)
when is_integer(Toolid),is_list(HelpString) ->
@@ -631,7 +631,7 @@ setToolLongHelp(#wx_ref{type=ThisT,ref=ThisRef},Toolid,HelpString)
<<ThisRef:32/?UI,Toolid:32/?UI,(byte_size(HelpString_UC)):32/?UI,(HelpString_UC)/binary, 0:(((8- ((4+byte_size(HelpString_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbarsettoolpacking">external documentation</a>.
--spec setToolPacking(This, Packing) -> ok when
+-spec setToolPacking(This, Packing) -> 'ok' when
This::wxToolBar(), Packing::integer().
setToolPacking(#wx_ref{type=ThisT,ref=ThisRef},Packing)
when is_integer(Packing) ->
@@ -640,7 +640,7 @@ setToolPacking(#wx_ref{type=ThisT,ref=ThisRef},Packing)
<<ThisRef:32/?UI,Packing:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbarsettoolshorthelp">external documentation</a>.
--spec setToolShortHelp(This, Id, HelpString) -> ok when
+-spec setToolShortHelp(This, Id, HelpString) -> 'ok' when
This::wxToolBar(), Id::integer(), HelpString::unicode:chardata().
setToolShortHelp(#wx_ref{type=ThisT,ref=ThisRef},Id,HelpString)
when is_integer(Id),is_list(HelpString) ->
@@ -650,7 +650,7 @@ setToolShortHelp(#wx_ref{type=ThisT,ref=ThisRef},Id,HelpString)
<<ThisRef:32/?UI,Id:32/?UI,(byte_size(HelpString_UC)):32/?UI,(HelpString_UC)/binary, 0:(((8- ((4+byte_size(HelpString_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbarsettoolseparation">external documentation</a>.
--spec setToolSeparation(This, Separation) -> ok when
+-spec setToolSeparation(This, Separation) -> 'ok' when
This::wxToolBar(), Separation::integer().
setToolSeparation(#wx_ref{type=ThisT,ref=ThisRef},Separation)
when is_integer(Separation) ->
@@ -659,7 +659,7 @@ setToolSeparation(#wx_ref{type=ThisT,ref=ThisRef},Separation)
<<ThisRef:32/?UI,Separation:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbar.html#wxtoolbartoggletool">external documentation</a>.
--spec toggleTool(This, Toolid, Toggle) -> ok when
+-spec toggleTool(This, Toolid, Toggle) -> 'ok' when
This::wxToolBar(), Toolid::integer(), Toggle::boolean().
toggleTool(#wx_ref{type=ThisT,ref=ThisRef},Toolid,Toggle)
when is_integer(Toolid),is_boolean(Toggle) ->
diff --git a/lib/wx/src/gen/wxToolTip.erl b/lib/wx/src/gen/wxToolTip.erl
index 78831de8c5..163e764d8c 100644
--- a/lib/wx/src/gen/wxToolTip.erl
+++ b/lib/wx/src/gen/wxToolTip.erl
@@ -36,7 +36,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxToolTip() :: wx:wx_object().
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtooltip.html#wxtooltipenable">external documentation</a>.
--spec enable(Flag) -> ok when
+-spec enable(Flag) -> 'ok' when
Flag::boolean().
enable(Flag)
when is_boolean(Flag) ->
@@ -44,7 +44,7 @@ enable(Flag)
<<(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtooltip.html#wxtooltipsetdelay">external documentation</a>.
--spec setDelay(Msecs) -> ok when
+-spec setDelay(Msecs) -> 'ok' when
Msecs::integer().
setDelay(Msecs)
when is_integer(Msecs) ->
@@ -61,7 +61,7 @@ new(Tip)
<<(byte_size(Tip_UC)):32/?UI,(Tip_UC)/binary, 0:(((8- ((4+byte_size(Tip_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtooltip.html#wxtooltipsettip">external documentation</a>.
--spec setTip(This, Tip) -> ok when
+-spec setTip(This, Tip) -> 'ok' when
This::wxToolTip(), Tip::unicode:chardata().
setTip(#wx_ref{type=ThisT,ref=ThisRef},Tip)
when is_list(Tip) ->
@@ -87,7 +87,7 @@ getWindow(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxToolTip()) -> ok.
+-spec destroy(This::wxToolTip()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxToolTip),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxToolbook.erl b/lib/wx/src/gen/wxToolbook.erl
index cf77aefd8a..92dcbc726b 100644
--- a/lib/wx/src/gen/wxToolbook.erl
+++ b/lib/wx/src/gen/wxToolbook.erl
@@ -101,9 +101,9 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbook.html#wxtoolbookwxtoolbook">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxToolbook() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -126,8 +126,8 @@ addPage(This,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbook.html#wxtoolbookaddpage">external documentation</a>.
-spec addPage(This, Page, Text, [Option]) -> boolean() when
This::wxToolbook(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxToolbook),
@@ -141,7 +141,7 @@ addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Op
<<ThisRef:32/?UI,PageRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @equiv advanceSelection(This, [])
--spec advanceSelection(This) -> ok when
+-spec advanceSelection(This) -> 'ok' when
This::wxToolbook().
advanceSelection(This)
@@ -149,9 +149,9 @@ advanceSelection(This)
advanceSelection(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbook.html#wxtoolbookadvanceselection">external documentation</a>.
--spec advanceSelection(This, [Option]) -> ok when
+-spec advanceSelection(This, [Option]) -> 'ok' when
This::wxToolbook(),
- Option :: {forward, boolean()}.
+ Option :: {'forward', boolean()}.
advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxToolbook),
@@ -162,7 +162,7 @@ advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbook.html#wxtoolbookassignimagelist">external documentation</a>.
--spec assignImageList(This, ImageList) -> ok when
+-spec assignImageList(This, ImageList) -> 'ok' when
This::wxToolbook(), ImageList::wxImageList:wxImageList().
assignImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxToolbook),
@@ -181,9 +181,9 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbook.html#wxtoolbookcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxToolbook(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxToolbook),
@@ -302,8 +302,8 @@ insertPage(This,N,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbook.html#wxtoolbookinsertpage">external documentation</a>.
-spec insertPage(This, N, Page, Text, [Option]) -> boolean() when
This::wxToolbook(), N::integer(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
insertPage(#wx_ref{type=ThisT,ref=ThisRef},N,#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_integer(N),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxToolbook),
@@ -317,7 +317,7 @@ insertPage(#wx_ref{type=ThisT,ref=ThisRef},N,#wx_ref{type=PageT,ref=PageRef},Tex
<<ThisRef:32/?UI,N:32/?UI,PageRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbook.html#wxtoolbooksetimagelist">external documentation</a>.
--spec setImageList(This, ImageList) -> ok when
+-spec setImageList(This, ImageList) -> 'ok' when
This::wxToolbook(), ImageList::wxImageList:wxImageList().
setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxToolbook),
@@ -326,7 +326,7 @@ setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageLi
<<ThisRef:32/?UI,ImageListRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoolbook.html#wxtoolbooksetpagesize">external documentation</a>.
--spec setPageSize(This, Size) -> ok when
+-spec setPageSize(This, Size) -> 'ok' when
This::wxToolbook(), Size::{W::integer(), H::integer()}.
setPageSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -372,7 +372,7 @@ changeSelection(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxToolbook()) -> ok.
+-spec destroy(This::wxToolbook()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxToolbook),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxTopLevelWindow.erl b/lib/wx/src/gen/wxTopLevelWindow.erl
index 72813b0073..6ba81691c7 100644
--- a/lib/wx/src/gen/wxTopLevelWindow.erl
+++ b/lib/wx/src/gen/wxTopLevelWindow.erl
@@ -114,7 +114,7 @@ isActive(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv iconize(This, [])
--spec iconize(This) -> ok when
+-spec iconize(This) -> 'ok' when
This::wxTopLevelWindow().
iconize(This)
@@ -122,9 +122,9 @@ iconize(This)
iconize(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoplevelwindow.html#wxtoplevelwindowiconize">external documentation</a>.
--spec iconize(This, [Option]) -> ok when
+-spec iconize(This, [Option]) -> 'ok' when
This::wxTopLevelWindow(),
- Option :: {iconize, boolean()}.
+ Option :: {'iconize', boolean()}.
iconize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTopLevelWindow),
@@ -159,7 +159,7 @@ isMaximized(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv maximize(This, [])
--spec maximize(This) -> ok when
+-spec maximize(This) -> 'ok' when
This::wxTopLevelWindow().
maximize(This)
@@ -167,9 +167,9 @@ maximize(This)
maximize(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoplevelwindow.html#wxtoplevelwindowmaximize">external documentation</a>.
--spec maximize(This, [Option]) -> ok when
+-spec maximize(This, [Option]) -> 'ok' when
This::wxTopLevelWindow(),
- Option :: {maximize, boolean()}.
+ Option :: {'maximize', boolean()}.
maximize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTopLevelWindow),
@@ -180,7 +180,7 @@ maximize(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv requestUserAttention(This, [])
--spec requestUserAttention(This) -> ok when
+-spec requestUserAttention(This) -> 'ok' when
This::wxTopLevelWindow().
requestUserAttention(This)
@@ -188,9 +188,9 @@ requestUserAttention(This)
requestUserAttention(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoplevelwindow.html#wxtoplevelwindowrequestuserattention">external documentation</a>.
--spec requestUserAttention(This, [Option]) -> ok when
+-spec requestUserAttention(This, [Option]) -> 'ok' when
This::wxTopLevelWindow(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
requestUserAttention(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTopLevelWindow),
@@ -201,7 +201,7 @@ requestUserAttention(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoplevelwindow.html#wxtoplevelwindowseticon">external documentation</a>.
--spec setIcon(This, Icon) -> ok when
+-spec setIcon(This, Icon) -> 'ok' when
This::wxTopLevelWindow(), Icon::wxIcon:wxIcon().
setIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef}) ->
?CLASS(ThisT,wxTopLevelWindow),
@@ -210,7 +210,7 @@ setIcon(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconT,ref=IconRef}) ->
<<ThisRef:32/?UI,IconRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoplevelwindow.html#wxtoplevelwindowseticons">external documentation</a>.
--spec setIcons(This, Icons) -> ok when
+-spec setIcons(This, Icons) -> 'ok' when
This::wxTopLevelWindow(), Icons::wxIconBundle:wxIconBundle().
setIcons(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconsT,ref=IconsRef}) ->
?CLASS(ThisT,wxTopLevelWindow),
@@ -219,7 +219,7 @@ setIcons(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=IconsT,ref=IconsRef}) ->
<<ThisRef:32/?UI,IconsRef:32/?UI>>).
%% @equiv centerOnScreen(This, [])
--spec centerOnScreen(This) -> ok when
+-spec centerOnScreen(This) -> 'ok' when
This::wxTopLevelWindow().
centerOnScreen(This)
@@ -227,9 +227,9 @@ centerOnScreen(This)
centerOnScreen(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoplevelwindow.html#wxtoplevelwindowcenteronscreen">external documentation</a>.
--spec centerOnScreen(This, [Option]) -> ok when
+-spec centerOnScreen(This, [Option]) -> 'ok' when
This::wxTopLevelWindow(),
- Option :: {dir, integer()}.
+ Option :: {'dir', integer()}.
centerOnScreen(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTopLevelWindow),
@@ -240,7 +240,7 @@ centerOnScreen(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv centreOnScreen(This, [])
--spec centreOnScreen(This) -> ok when
+-spec centreOnScreen(This) -> 'ok' when
This::wxTopLevelWindow().
centreOnScreen(This)
@@ -248,9 +248,9 @@ centreOnScreen(This)
centreOnScreen(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoplevelwindow.html#wxtoplevelwindowcentreonscreen">external documentation</a>.
--spec centreOnScreen(This, [Option]) -> ok when
+-spec centreOnScreen(This, [Option]) -> 'ok' when
This::wxTopLevelWindow(),
- Option :: {dir, integer()}.
+ Option :: {'dir', integer()}.
centreOnScreen(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTopLevelWindow),
@@ -270,7 +270,7 @@ setShape(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=RegionT,ref=RegionRef}) ->
<<ThisRef:32/?UI,RegionRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoplevelwindow.html#wxtoplevelwindowsettitle">external documentation</a>.
--spec setTitle(This, Title) -> ok when
+-spec setTitle(This, Title) -> 'ok' when
This::wxTopLevelWindow(), Title::unicode:chardata().
setTitle(#wx_ref{type=ThisT,ref=ThisRef},Title)
when is_list(Title) ->
@@ -290,7 +290,7 @@ showFullScreen(This,Show)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtoplevelwindow.html#wxtoplevelwindowshowfullscreen">external documentation</a>.
-spec showFullScreen(This, Show, [Option]) -> boolean() when
This::wxTopLevelWindow(), Show::boolean(),
- Option :: {style, integer()}.
+ Option :: {'style', integer()}.
showFullScreen(#wx_ref{type=ThisT,ref=ThisRef},Show, Options)
when is_boolean(Show),is_list(Options) ->
?CLASS(ThisT,wxTopLevelWindow),
diff --git a/lib/wx/src/gen/wxTreeCtrl.erl b/lib/wx/src/gen/wxTreeCtrl.erl
index 43dee9107d..97b43309ad 100644
--- a/lib/wx/src/gen/wxTreeCtrl.erl
+++ b/lib/wx/src/gen/wxTreeCtrl.erl
@@ -117,11 +117,11 @@ new(Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlwxtreectrl">external documentation</a>.
-spec new(Parent, [Option]) -> wxTreeCtrl() when
Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -146,9 +146,9 @@ addRoot(This,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrladdroot">external documentation</a>.
-spec addRoot(This, Text, [Option]) -> integer() when
This::wxTreeCtrl(), Text::unicode:chardata(),
- Option :: {image, integer()}
- | {selectedImage, integer()}
- | {data, term()}.
+ Option :: {'image', integer()}
+ | {'selectedImage', integer()}
+ | {'data', term()}.
addRoot(#wx_ref{type=ThisT,ref=ThisRef},Text, Options)
when is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -172,9 +172,9 @@ appendItem(This,Parent,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlappenditem">external documentation</a>.
-spec appendItem(This, Parent, Text, [Option]) -> integer() when
This::wxTreeCtrl(), Parent::integer(), Text::unicode:chardata(),
- Option :: {image, integer()}
- | {selectedImage, integer()}
- | {data, term()}.
+ Option :: {'image', integer()}
+ | {'selectedImage', integer()}
+ | {'data', term()}.
appendItem(#wx_ref{type=ThisT,ref=ThisRef},Parent,Text, Options)
when is_integer(Parent),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -188,7 +188,7 @@ appendItem(#wx_ref{type=ThisT,ref=ThisRef},Parent,Text, Options)
<<ThisRef:32/?UI,0:32,Parent:64/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlassignimagelist">external documentation</a>.
--spec assignImageList(This, ImageList) -> ok when
+-spec assignImageList(This, ImageList) -> 'ok' when
This::wxTreeCtrl(), ImageList::wxImageList:wxImageList().
assignImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -197,7 +197,7 @@ assignImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=Imag
<<ThisRef:32/?UI,ImageListRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlassignstateimagelist">external documentation</a>.
--spec assignStateImageList(This, ImageList) -> ok when
+-spec assignStateImageList(This, ImageList) -> 'ok' when
This::wxTreeCtrl(), ImageList::wxImageList:wxImageList().
assignStateImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -206,7 +206,7 @@ assignStateImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref
<<ThisRef:32/?UI,ImageListRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlcollapse">external documentation</a>.
--spec collapse(This, Item) -> ok when
+-spec collapse(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
collapse(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -215,7 +215,7 @@ collapse(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlcollapseandreset">external documentation</a>.
--spec collapseAndReset(This, Item) -> ok when
+-spec collapseAndReset(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
collapseAndReset(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -234,11 +234,11 @@ create(This,Parent)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlcreate">external documentation</a>.
-spec create(This, Parent, [Option]) -> boolean() when
This::wxTreeCtrl(), Parent::wxWindow:wxWindow(),
- Option :: {id, integer()}
- | {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}
- | {validator, wx:wx_object()}.
+ Option :: {'id', integer()}
+ | {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}
+ | {'validator', wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -254,7 +254,7 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Opti
<<ThisRef:32/?UI,ParentRef:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrldelete">external documentation</a>.
--spec delete(This, Item) -> ok when
+-spec delete(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
delete(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -263,7 +263,7 @@ delete(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrldeleteallitems">external documentation</a>.
--spec deleteAllItems(This) -> ok when
+-spec deleteAllItems(This) -> 'ok' when
This::wxTreeCtrl().
deleteAllItems(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -271,7 +271,7 @@ deleteAllItems(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrldeletechildren">external documentation</a>.
--spec deleteChildren(This, Item) -> ok when
+-spec deleteChildren(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
deleteChildren(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -289,7 +289,7 @@ editLabel(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlensurevisible">external documentation</a>.
--spec ensureVisible(This, Item) -> ok when
+-spec ensureVisible(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
ensureVisible(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -298,7 +298,7 @@ ensureVisible(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlexpand">external documentation</a>.
--spec expand(This, Item) -> ok when
+-spec expand(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
expand(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -319,7 +319,7 @@ getBoundingRect(This,Item)
-spec getBoundingRect(This, Item, [Option]) -> Result when
Result :: {Res ::boolean(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}},
This::wxTreeCtrl(), Item::integer(),
- Option :: {textOnly, boolean()}.
+ Option :: {'textOnly', boolean()}.
getBoundingRect(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
when is_integer(Item),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -340,7 +340,7 @@ getChildrenCount(This,Item)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlgetchildrencount">external documentation</a>.
-spec getChildrenCount(This, Item, [Option]) -> integer() when
This::wxTreeCtrl(), Item::integer(),
- Option :: {recursively, boolean()}.
+ Option :: {'recursively', boolean()}.
getChildrenCount(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
when is_integer(Item),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -450,7 +450,7 @@ getItemImage(#wx_ref{type=ThisT,ref=ThisRef},Item)
%%<br /> Which = ?wxTreeItemIcon_Normal | ?wxTreeItemIcon_Selected | ?wxTreeItemIcon_Expanded | ?wxTreeItemIcon_SelectedExpanded | ?wxTreeItemIcon_Max
-spec getItemImage(This, Item, [Option]) -> integer() when
This::wxTreeCtrl(), Item::integer(),
- Option :: {which, wx:wx_enum()}.
+ Option :: {'which', wx:wx_enum()}.
getItemImage(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
when is_integer(Item),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -586,9 +586,9 @@ insertItem(This,Parent,Pos,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlinsertitem">external documentation</a>.
-spec insertItem(This, Parent, Pos, Text, [Option]) -> integer() when
This::wxTreeCtrl(), Parent::integer(), Pos::integer(), Text::unicode:chardata(),
- Option :: {image, integer()}
- | {selImage, integer()}
- | {data, term()}.
+ Option :: {'image', integer()}
+ | {'selImage', integer()}
+ | {'data', term()}.
insertItem(#wx_ref{type=ThisT,ref=ThisRef},Parent,Pos,Text, Options)
when is_integer(Parent),is_integer(Pos),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -665,9 +665,9 @@ prependItem(This,Parent,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlprependitem">external documentation</a>.
-spec prependItem(This, Parent, Text, [Option]) -> integer() when
This::wxTreeCtrl(), Parent::integer(), Text::unicode:chardata(),
- Option :: {image, integer()}
- | {selectedImage, integer()}
- | {data, term()}.
+ Option :: {'image', integer()}
+ | {'selectedImage', integer()}
+ | {'data', term()}.
prependItem(#wx_ref{type=ThisT,ref=ThisRef},Parent,Text, Options)
when is_integer(Parent),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -681,7 +681,7 @@ prependItem(#wx_ref{type=ThisT,ref=ThisRef},Parent,Text, Options)
<<ThisRef:32/?UI,0:32,Parent:64/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlscrollto">external documentation</a>.
--spec scrollTo(This, Item) -> ok when
+-spec scrollTo(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
scrollTo(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -690,7 +690,7 @@ scrollTo(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlselectitem">external documentation</a>.
--spec selectItem(This, Item) -> ok when
+-spec selectItem(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
selectItem(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -699,9 +699,9 @@ selectItem(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlselectitem">external documentation</a>.
--spec selectItem(This, Item, [Option]) -> ok when
+-spec selectItem(This, Item, [Option]) -> 'ok' when
This::wxTreeCtrl(), Item::integer(),
- Option :: {select, boolean()}.
+ Option :: {'select', boolean()}.
selectItem(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
when is_integer(Item),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -712,7 +712,7 @@ selectItem(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
<<ThisRef:32/?UI,0:32,Item:64/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetindent">external documentation</a>.
--spec setIndent(This, Indent) -> ok when
+-spec setIndent(This, Indent) -> 'ok' when
This::wxTreeCtrl(), Indent::integer().
setIndent(#wx_ref{type=ThisT,ref=ThisRef},Indent)
when is_integer(Indent) ->
@@ -721,7 +721,7 @@ setIndent(#wx_ref{type=ThisT,ref=ThisRef},Indent)
<<ThisRef:32/?UI,Indent:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetimagelist">external documentation</a>.
--spec setImageList(This, ImageList) -> ok when
+-spec setImageList(This, ImageList) -> 'ok' when
This::wxTreeCtrl(), ImageList::wxImageList:wxImageList().
setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -730,7 +730,7 @@ setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageLi
<<ThisRef:32/?UI,ImageListRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitembackgroundcolour">external documentation</a>.
--spec setItemBackgroundColour(This, Item, Col) -> ok when
+-spec setItemBackgroundColour(This, Item, Col) -> 'ok' when
This::wxTreeCtrl(), Item::integer(), Col::wx:wx_colour().
setItemBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Item,Col)
when is_integer(Item),tuple_size(Col) =:= 3; tuple_size(Col) =:= 4 ->
@@ -739,7 +739,7 @@ setItemBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Item,Col)
<<ThisRef:32/?UI,0:32,Item:64/?UI,(wxe_util:colour_bin(Col)):16/binary>>).
%% @equiv setItemBold(This,Item, [])
--spec setItemBold(This, Item) -> ok when
+-spec setItemBold(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
setItemBold(This,Item)
@@ -747,9 +747,9 @@ setItemBold(This,Item)
setItemBold(This,Item, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitembold">external documentation</a>.
--spec setItemBold(This, Item, [Option]) -> ok when
+-spec setItemBold(This, Item, [Option]) -> 'ok' when
This::wxTreeCtrl(), Item::integer(),
- Option :: {bold, boolean()}.
+ Option :: {'bold', boolean()}.
setItemBold(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
when is_integer(Item),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -760,7 +760,7 @@ setItemBold(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
<<ThisRef:32/?UI,0:32,Item:64/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitemdata">external documentation</a>.
--spec setItemData(This, Item, Data) -> ok when
+-spec setItemData(This, Item, Data) -> 'ok' when
This::wxTreeCtrl(), Item::integer(), Data::term().
setItemData(#wx_ref{type=ThisT,ref=ThisRef},Item,Data)
when is_integer(Item) ->
@@ -770,7 +770,7 @@ setItemData(#wx_ref{type=ThisT,ref=ThisRef},Item,Data)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @equiv setItemDropHighlight(This,Item, [])
--spec setItemDropHighlight(This, Item) -> ok when
+-spec setItemDropHighlight(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
setItemDropHighlight(This,Item)
@@ -778,9 +778,9 @@ setItemDropHighlight(This,Item)
setItemDropHighlight(This,Item, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitemdrophighlight">external documentation</a>.
--spec setItemDropHighlight(This, Item, [Option]) -> ok when
+-spec setItemDropHighlight(This, Item, [Option]) -> 'ok' when
This::wxTreeCtrl(), Item::integer(),
- Option :: {highlight, boolean()}.
+ Option :: {'highlight', boolean()}.
setItemDropHighlight(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
when is_integer(Item),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -791,7 +791,7 @@ setItemDropHighlight(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
<<ThisRef:32/?UI,0:32,Item:64/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitemfont">external documentation</a>.
--spec setItemFont(This, Item, Font) -> ok when
+-spec setItemFont(This, Item, Font) -> 'ok' when
This::wxTreeCtrl(), Item::integer(), Font::wxFont:wxFont().
setItemFont(#wx_ref{type=ThisT,ref=ThisRef},Item,#wx_ref{type=FontT,ref=FontRef})
when is_integer(Item) ->
@@ -801,7 +801,7 @@ setItemFont(#wx_ref{type=ThisT,ref=ThisRef},Item,#wx_ref{type=FontT,ref=FontRef}
<<ThisRef:32/?UI,0:32,Item:64/?UI,FontRef:32/?UI>>).
%% @equiv setItemHasChildren(This,Item, [])
--spec setItemHasChildren(This, Item) -> ok when
+-spec setItemHasChildren(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
setItemHasChildren(This,Item)
@@ -809,9 +809,9 @@ setItemHasChildren(This,Item)
setItemHasChildren(This,Item, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitemhaschildren">external documentation</a>.
--spec setItemHasChildren(This, Item, [Option]) -> ok when
+-spec setItemHasChildren(This, Item, [Option]) -> 'ok' when
This::wxTreeCtrl(), Item::integer(),
- Option :: {has, boolean()}.
+ Option :: {'has', boolean()}.
setItemHasChildren(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
when is_integer(Item),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -822,7 +822,7 @@ setItemHasChildren(#wx_ref{type=ThisT,ref=ThisRef},Item, Options)
<<ThisRef:32/?UI,0:32,Item:64/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitemimage">external documentation</a>.
--spec setItemImage(This, Item, Image) -> ok when
+-spec setItemImage(This, Item, Image) -> 'ok' when
This::wxTreeCtrl(), Item::integer(), Image::integer().
setItemImage(#wx_ref{type=ThisT,ref=ThisRef},Item,Image)
when is_integer(Item),is_integer(Image) ->
@@ -832,9 +832,9 @@ setItemImage(#wx_ref{type=ThisT,ref=ThisRef},Item,Image)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitemimage">external documentation</a>.
%%<br /> Which = ?wxTreeItemIcon_Normal | ?wxTreeItemIcon_Selected | ?wxTreeItemIcon_Expanded | ?wxTreeItemIcon_SelectedExpanded | ?wxTreeItemIcon_Max
--spec setItemImage(This, Item, Image, [Option]) -> ok when
+-spec setItemImage(This, Item, Image, [Option]) -> 'ok' when
This::wxTreeCtrl(), Item::integer(), Image::integer(),
- Option :: {which, wx:wx_enum()}.
+ Option :: {'which', wx:wx_enum()}.
setItemImage(#wx_ref{type=ThisT,ref=ThisRef},Item,Image, Options)
when is_integer(Item),is_integer(Image),is_list(Options) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -845,7 +845,7 @@ setItemImage(#wx_ref{type=ThisT,ref=ThisRef},Item,Image, Options)
<<ThisRef:32/?UI,0:32,Item:64/?UI,Image:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitemtext">external documentation</a>.
--spec setItemText(This, Item, Text) -> ok when
+-spec setItemText(This, Item, Text) -> 'ok' when
This::wxTreeCtrl(), Item::integer(), Text::unicode:chardata().
setItemText(#wx_ref{type=ThisT,ref=ThisRef},Item,Text)
when is_integer(Item),is_list(Text) ->
@@ -855,7 +855,7 @@ setItemText(#wx_ref{type=ThisT,ref=ThisRef},Item,Text)
<<ThisRef:32/?UI,0:32,Item:64/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetitemtextcolour">external documentation</a>.
--spec setItemTextColour(This, Item, Col) -> ok when
+-spec setItemTextColour(This, Item, Col) -> 'ok' when
This::wxTreeCtrl(), Item::integer(), Col::wx:wx_colour().
setItemTextColour(#wx_ref{type=ThisT,ref=ThisRef},Item,Col)
when is_integer(Item),tuple_size(Col) =:= 3; tuple_size(Col) =:= 4 ->
@@ -864,7 +864,7 @@ setItemTextColour(#wx_ref{type=ThisT,ref=ThisRef},Item,Col)
<<ThisRef:32/?UI,0:32,Item:64/?UI,(wxe_util:colour_bin(Col)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetstateimagelist">external documentation</a>.
--spec setStateImageList(This, ImageList) -> ok when
+-spec setStateImageList(This, ImageList) -> 'ok' when
This::wxTreeCtrl(), ImageList::wxImageList:wxImageList().
setStateImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -873,7 +873,7 @@ setStateImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=Im
<<ThisRef:32/?UI,ImageListRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsetwindowstyle">external documentation</a>.
--spec setWindowStyle(This, Styles) -> ok when
+-spec setWindowStyle(This, Styles) -> 'ok' when
This::wxTreeCtrl(), Styles::integer().
setWindowStyle(#wx_ref{type=ThisT,ref=ThisRef},Styles)
when is_integer(Styles) ->
@@ -882,7 +882,7 @@ setWindowStyle(#wx_ref{type=ThisT,ref=ThisRef},Styles)
<<ThisRef:32/?UI,Styles:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlsortchildren">external documentation</a>.
--spec sortChildren(This, Item) -> ok when
+-spec sortChildren(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
sortChildren(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -891,7 +891,7 @@ sortChildren(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrltoggle">external documentation</a>.
--spec toggle(This, Item) -> ok when
+-spec toggle(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
toggle(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -900,7 +900,7 @@ toggle(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrltoggleitemselection">external documentation</a>.
--spec toggleItemSelection(This, Item) -> ok when
+-spec toggleItemSelection(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
toggleItemSelection(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -909,7 +909,7 @@ toggleItemSelection(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlunselect">external documentation</a>.
--spec unselect(This) -> ok when
+-spec unselect(This) -> 'ok' when
This::wxTreeCtrl().
unselect(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -917,7 +917,7 @@ unselect(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlunselectall">external documentation</a>.
--spec unselectAll(This) -> ok when
+-spec unselectAll(This) -> 'ok' when
This::wxTreeCtrl().
unselectAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxTreeCtrl),
@@ -925,7 +925,7 @@ unselectAll(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreectrl.html#wxtreectrlunselectitem">external documentation</a>.
--spec unselectItem(This, Item) -> ok when
+-spec unselectItem(This, Item) -> 'ok' when
This::wxTreeCtrl(), Item::integer().
unselectItem(#wx_ref{type=ThisT,ref=ThisRef},Item)
when is_integer(Item) ->
@@ -934,7 +934,7 @@ unselectItem(#wx_ref{type=ThisT,ref=ThisRef},Item)
<<ThisRef:32/?UI,0:32,Item:64/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxTreeCtrl()) -> ok.
+-spec destroy(This::wxTreeCtrl()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxTreeCtrl),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxTreeEvent.erl b/lib/wx/src/gen/wxTreeEvent.erl
index 5200a7a8e9..41e86fe41f 100644
--- a/lib/wx/src/gen/wxTreeEvent.erl
+++ b/lib/wx/src/gen/wxTreeEvent.erl
@@ -108,7 +108,7 @@ isEditCancelled(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreeevent.html#wxtreeeventsettooltip">external documentation</a>.
--spec setToolTip(This, ToolTip) -> ok when
+-spec setToolTip(This, ToolTip) -> 'ok' when
This::wxTreeEvent(), ToolTip::unicode:chardata().
setToolTip(#wx_ref{type=ThisT,ref=ThisRef},ToolTip)
when is_list(ToolTip) ->
diff --git a/lib/wx/src/gen/wxTreebook.erl b/lib/wx/src/gen/wxTreebook.erl
index 1900f47289..5d3c177f7e 100644
--- a/lib/wx/src/gen/wxTreebook.erl
+++ b/lib/wx/src/gen/wxTreebook.erl
@@ -102,9 +102,9 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebookwxtreebook">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxTreebook() when
Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -127,8 +127,8 @@ addPage(This,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebookaddpage">external documentation</a>.
-spec addPage(This, Page, Text, [Option]) -> boolean() when
This::wxTreebook(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxTreebook),
@@ -142,7 +142,7 @@ addPage(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PageT,ref=PageRef},Text, Op
<<ThisRef:32/?UI,PageRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((4+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @equiv advanceSelection(This, [])
--spec advanceSelection(This) -> ok when
+-spec advanceSelection(This) -> 'ok' when
This::wxTreebook().
advanceSelection(This)
@@ -150,9 +150,9 @@ advanceSelection(This)
advanceSelection(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebookadvanceselection">external documentation</a>.
--spec advanceSelection(This, [Option]) -> ok when
+-spec advanceSelection(This, [Option]) -> 'ok' when
This::wxTreebook(),
- Option :: {forward, boolean()}.
+ Option :: {'forward', boolean()}.
advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxTreebook),
@@ -163,7 +163,7 @@ advanceSelection(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebookassignimagelist">external documentation</a>.
--spec assignImageList(This, ImageList) -> ok when
+-spec assignImageList(This, ImageList) -> 'ok' when
This::wxTreebook(), ImageList::wxImageList:wxImageList().
assignImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxTreebook),
@@ -182,9 +182,9 @@ create(This,Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebookcreate">external documentation</a>.
-spec create(This, Parent, Id, [Option]) -> boolean() when
This::wxTreebook(), Parent::wxWindow:wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ThisT,wxTreebook),
@@ -293,7 +293,7 @@ expandNode(This,Pos)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebookexpandnode">external documentation</a>.
-spec expandNode(This, Pos, [Option]) -> boolean() when
This::wxTreebook(), Pos::integer(),
- Option :: {expand, boolean()}.
+ Option :: {'expand', boolean()}.
expandNode(#wx_ref{type=ThisT,ref=ThisRef},Pos, Options)
when is_integer(Pos),is_list(Options) ->
?CLASS(ThisT,wxTreebook),
@@ -333,8 +333,8 @@ insertPage(This,Pos,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebookinsertpage">external documentation</a>.
-spec insertPage(This, Pos, Page, Text, [Option]) -> boolean() when
This::wxTreebook(), Pos::integer(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
insertPage(#wx_ref{type=ThisT,ref=ThisRef},Pos,#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_integer(Pos),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxTreebook),
@@ -358,8 +358,8 @@ insertSubPage(This,Pos,Page,Text)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebookinsertsubpage">external documentation</a>.
-spec insertSubPage(This, Pos, Page, Text, [Option]) -> boolean() when
This::wxTreebook(), Pos::integer(), Page::wxWindow:wxWindow(), Text::unicode:chardata(),
- Option :: {bSelect, boolean()}
- | {imageId, integer()}.
+ Option :: {'bSelect', boolean()}
+ | {'imageId', integer()}.
insertSubPage(#wx_ref{type=ThisT,ref=ThisRef},Pos,#wx_ref{type=PageT,ref=PageRef},Text, Options)
when is_integer(Pos),is_list(Text),is_list(Options) ->
?CLASS(ThisT,wxTreebook),
@@ -373,7 +373,7 @@ insertSubPage(#wx_ref{type=ThisT,ref=ThisRef},Pos,#wx_ref{type=PageT,ref=PageRef
<<ThisRef:32/?UI,Pos:32/?UI,PageRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebooksetimagelist">external documentation</a>.
--spec setImageList(This, ImageList) -> ok when
+-spec setImageList(This, ImageList) -> 'ok' when
This::wxTreebook(), ImageList::wxImageList:wxImageList().
setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageListRef}) ->
?CLASS(ThisT,wxTreebook),
@@ -382,7 +382,7 @@ setImageList(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ImageListT,ref=ImageLi
<<ThisRef:32/?UI,ImageListRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxtreebook.html#wxtreebooksetpagesize">external documentation</a>.
--spec setPageSize(This, Size) -> ok when
+-spec setPageSize(This, Size) -> 'ok' when
This::wxTreebook(), Size::{W::integer(), H::integer()}.
setPageSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -428,7 +428,7 @@ changeSelection(#wx_ref{type=ThisT,ref=ThisRef},N)
<<ThisRef:32/?UI,N:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxTreebook()) -> ok.
+-spec destroy(This::wxTreebook()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxTreebook),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxUpdateUIEvent.erl b/lib/wx/src/gen/wxUpdateUIEvent.erl
index db126eec40..fec42ed8eb 100644
--- a/lib/wx/src/gen/wxUpdateUIEvent.erl
+++ b/lib/wx/src/gen/wxUpdateUIEvent.erl
@@ -59,7 +59,7 @@ canUpdate(#wx_ref{type=WinT,ref=WinRef}) ->
<<WinRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxupdateuievent.html#wxupdateuieventcheck">external documentation</a>.
--spec check(This, Check) -> ok when
+-spec check(This, Check) -> 'ok' when
This::wxUpdateUIEvent(), Check::boolean().
check(#wx_ref{type=ThisT,ref=ThisRef},Check)
when is_boolean(Check) ->
@@ -68,7 +68,7 @@ check(#wx_ref{type=ThisT,ref=ThisRef},Check)
<<ThisRef:32/?UI,(wxe_util:from_bool(Check)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxupdateuievent.html#wxupdateuieventenable">external documentation</a>.
--spec enable(This, Enable) -> ok when
+-spec enable(This, Enable) -> 'ok' when
This::wxUpdateUIEvent(), Enable::boolean().
enable(#wx_ref{type=ThisT,ref=ThisRef},Enable)
when is_boolean(Enable) ->
@@ -77,7 +77,7 @@ enable(#wx_ref{type=ThisT,ref=ThisRef},Enable)
<<ThisRef:32/?UI,(wxe_util:from_bool(Enable)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxupdateuievent.html#wxupdateuieventshow">external documentation</a>.
--spec show(This, Show) -> ok when
+-spec show(This, Show) -> 'ok' when
This::wxUpdateUIEvent(), Show::boolean().
show(#wx_ref{type=ThisT,ref=ThisRef},Show)
when is_boolean(Show) ->
@@ -163,14 +163,14 @@ getUpdateInterval() ->
<<>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxupdateuievent.html#wxupdateuieventresetupdatetime">external documentation</a>.
--spec resetUpdateTime() -> ok.
+-spec resetUpdateTime() -> 'ok'.
resetUpdateTime() ->
wxe_util:cast(?wxUpdateUIEvent_ResetUpdateTime,
<<>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxupdateuievent.html#wxupdateuieventsetmode">external documentation</a>.
%%<br /> Mode = ?wxUPDATE_UI_PROCESS_ALL | ?wxUPDATE_UI_PROCESS_SPECIFIED
--spec setMode(Mode) -> ok when
+-spec setMode(Mode) -> 'ok' when
Mode::wx:wx_enum().
setMode(Mode)
when is_integer(Mode) ->
@@ -178,7 +178,7 @@ setMode(Mode)
<<Mode:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxupdateuievent.html#wxupdateuieventsettext">external documentation</a>.
--spec setText(This, Text) -> ok when
+-spec setText(This, Text) -> 'ok' when
This::wxUpdateUIEvent(), Text::unicode:chardata().
setText(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -188,7 +188,7 @@ setText(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxupdateuievent.html#wxupdateuieventsetupdateinterval">external documentation</a>.
--spec setUpdateInterval(UpdateInterval) -> ok when
+-spec setUpdateInterval(UpdateInterval) -> 'ok' when
UpdateInterval::integer().
setUpdateInterval(UpdateInterval)
when is_integer(UpdateInterval) ->
diff --git a/lib/wx/src/gen/wxWindow.erl b/lib/wx/src/gen/wxWindow.erl
index a8a61d547b..4ac7cc5d75 100644
--- a/lib/wx/src/gen/wxWindow.erl
+++ b/lib/wx/src/gen/wxWindow.erl
@@ -93,9 +93,9 @@ new(Parent,Id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowwxwindow">external documentation</a>.
-spec new(Parent, Id, [Option]) -> wxWindow() when
Parent::wxWindow(), Id::integer(),
- Option :: {pos, {X::integer(), Y::integer()}}
- | {size, {W::integer(), H::integer()}}
- | {style, integer()}.
+ Option :: {'pos', {X::integer(), Y::integer()}}
+ | {'size', {W::integer(), H::integer()}}
+ | {'style', integer()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
when is_integer(Id),is_list(Options) ->
?CLASS(ParentT,wxWindow),
@@ -108,7 +108,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
<<ParentRef:32/?UI,Id:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowcachebestsize">external documentation</a>.
--spec cacheBestSize(This, Size) -> ok when
+-spec cacheBestSize(This, Size) -> 'ok' when
This::wxWindow(), Size::{W::integer(), H::integer()}.
cacheBestSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -117,7 +117,7 @@ cacheBestSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowcapturemouse">external documentation</a>.
--spec captureMouse(This) -> ok when
+-spec captureMouse(This) -> 'ok' when
This::wxWindow().
captureMouse(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -125,7 +125,7 @@ captureMouse(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv center(This, [])
--spec center(This) -> ok when
+-spec center(This) -> 'ok' when
This::wxWindow().
center(This)
@@ -133,9 +133,9 @@ center(This)
center(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowcenter">external documentation</a>.
--spec center(This, [Option]) -> ok when
+-spec center(This, [Option]) -> 'ok' when
This::wxWindow(),
- Option :: {dir, integer()}.
+ Option :: {'dir', integer()}.
center(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -146,7 +146,7 @@ center(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv centerOnParent(This, [])
--spec centerOnParent(This) -> ok when
+-spec centerOnParent(This) -> 'ok' when
This::wxWindow().
centerOnParent(This)
@@ -154,9 +154,9 @@ centerOnParent(This)
centerOnParent(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowcenteronparent">external documentation</a>.
--spec centerOnParent(This, [Option]) -> ok when
+-spec centerOnParent(This, [Option]) -> 'ok' when
This::wxWindow(),
- Option :: {dir, integer()}.
+ Option :: {'dir', integer()}.
centerOnParent(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -167,7 +167,7 @@ centerOnParent(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv centre(This, [])
--spec centre(This) -> ok when
+-spec centre(This) -> 'ok' when
This::wxWindow().
centre(This)
@@ -175,9 +175,9 @@ centre(This)
centre(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowcentre">external documentation</a>.
--spec centre(This, [Option]) -> ok when
+-spec centre(This, [Option]) -> 'ok' when
This::wxWindow(),
- Option :: {dir, integer()}.
+ Option :: {'dir', integer()}.
centre(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -188,7 +188,7 @@ centre(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv centreOnParent(This, [])
--spec centreOnParent(This) -> ok when
+-spec centreOnParent(This) -> 'ok' when
This::wxWindow().
centreOnParent(This)
@@ -196,9 +196,9 @@ centreOnParent(This)
centreOnParent(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowcentreonparent">external documentation</a>.
--spec centreOnParent(This, [Option]) -> ok when
+-spec centreOnParent(This, [Option]) -> 'ok' when
This::wxWindow(),
- Option :: {dir, integer()}.
+ Option :: {'dir', integer()}.
centreOnParent(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -209,7 +209,7 @@ centreOnParent(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowclearbackground">external documentation</a>.
--spec clearBackground(This) -> ok when
+-spec clearBackground(This) -> 'ok' when
This::wxWindow().
clearBackground(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -245,7 +245,7 @@ close(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowclose">external documentation</a>.
-spec close(This, [Option]) -> boolean() when
This::wxWindow(),
- Option :: {force, boolean()}.
+ Option :: {'force', boolean()}.
close(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -308,7 +308,7 @@ enable(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowenable">external documentation</a>.
-spec enable(This, [Option]) -> boolean() when
This::wxWindow(),
- Option :: {enable, boolean()}.
+ Option :: {'enable', boolean()}.
enable(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -356,7 +356,7 @@ findWindowById(Winid)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowfindwindowbyid">external documentation</a>.
-spec findWindowById(Winid, [Option]) -> wxWindow() when
Winid::integer(),
- Option :: {parent, wxWindow()}.
+ Option :: {'parent', wxWindow()}.
findWindowById(Winid, Options)
when is_integer(Winid),is_list(Options) ->
MOpts = fun({parent, #wx_ref{type=ParentT,ref=ParentRef}}, Acc) -> ?CLASS(ParentT,wxWindow),[<<1:32/?UI,ParentRef:32/?UI>>|Acc];
@@ -376,7 +376,7 @@ findWindowByName(Name)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowfindwindowbyname">external documentation</a>.
-spec findWindowByName(Name, [Option]) -> wxWindow() when
Name::unicode:chardata(),
- Option :: {parent, wxWindow()}.
+ Option :: {'parent', wxWindow()}.
findWindowByName(Name, Options)
when is_list(Name),is_list(Options) ->
Name_UC = unicode:characters_to_binary([Name,0]),
@@ -397,7 +397,7 @@ findWindowByLabel(Label)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowfindwindowbylabel">external documentation</a>.
-spec findWindowByLabel(Label, [Option]) -> wxWindow() when
Label::unicode:chardata(),
- Option :: {parent, wxWindow()}.
+ Option :: {'parent', wxWindow()}.
findWindowByLabel(Label, Options)
when is_list(Label),is_list(Options) ->
Label_UC = unicode:characters_to_binary([Label,0]),
@@ -408,7 +408,7 @@ findWindowByLabel(Label, Options)
<<(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((4+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowfit">external documentation</a>.
--spec fit(This) -> ok when
+-spec fit(This) -> 'ok' when
This::wxWindow().
fit(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -416,7 +416,7 @@ fit(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowfitinside">external documentation</a>.
--spec fitInside(This) -> ok when
+-spec fitInside(This) -> 'ok' when
This::wxWindow().
fitInside(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -424,7 +424,7 @@ fitInside(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowfreeze">external documentation</a>.
--spec freeze(This) -> ok when
+-spec freeze(This) -> 'ok' when
This::wxWindow().
freeze(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -726,7 +726,7 @@ getTextExtent(This,String)
-spec getTextExtent(This, String, [Option]) -> Result when
Result :: {X::integer(), Y::integer(), Descent::integer(), ExternalLeading::integer()},
This::wxWindow(), String::unicode:chardata(),
- Option :: {theFont, wxFont:wxFont()}.
+ Option :: {'theFont', wxFont:wxFont()}.
getTextExtent(#wx_ref{type=ThisT,ref=ThisRef},String, Options)
when is_list(String),is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -812,7 +812,7 @@ hide(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowinheritattributes">external documentation</a>.
--spec inheritAttributes(This) -> ok when
+-spec inheritAttributes(This) -> 'ok' when
This::wxWindow().
inheritAttributes(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -820,7 +820,7 @@ inheritAttributes(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowinitdialog">external documentation</a>.
--spec initDialog(This) -> ok when
+-spec initDialog(This) -> 'ok' when
This::wxWindow().
initDialog(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -828,7 +828,7 @@ initDialog(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowinvalidatebestsize">external documentation</a>.
--spec invalidateBestSize(This) -> ok when
+-spec invalidateBestSize(This) -> 'ok' when
This::wxWindow().
invalidateBestSize(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -930,7 +930,7 @@ lineUp(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowlower">external documentation</a>.
--spec lower(This) -> ok when
+-spec lower(This) -> 'ok' when
This::wxWindow().
lower(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -938,7 +938,7 @@ lower(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv makeModal(This, [])
--spec makeModal(This) -> ok when
+-spec makeModal(This) -> 'ok' when
This::wxWindow().
makeModal(This)
@@ -946,9 +946,9 @@ makeModal(This)
makeModal(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowmakemodal">external documentation</a>.
--spec makeModal(This, [Option]) -> ok when
+-spec makeModal(This, [Option]) -> 'ok' when
This::wxWindow(),
- Option :: {modal, boolean()}.
+ Option :: {'modal', boolean()}.
makeModal(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -959,7 +959,7 @@ makeModal(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv move(This,Pt, [])
--spec move(This, Pt) -> ok when
+-spec move(This, Pt) -> 'ok' when
This::wxWindow(), Pt::{X::integer(), Y::integer()}.
move(This,Pt={PtX,PtY})
@@ -968,15 +968,15 @@ move(This,Pt={PtX,PtY})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowmove">external documentation</a>.
%% <br /> Also:<br />
-%% move(This, Pt, [Option]) -> ok when<br />
+%% move(This, Pt, [Option]) -> 'ok' when<br />
%% This::wxWindow(), Pt::{X::integer(), Y::integer()},<br />
-%% Option :: {flags, integer()}.<br />
+%% Option :: {'flags', integer()}.<br />
%%
--spec move(This, X, Y) -> ok when
+-spec move(This, X, Y) -> 'ok' when
This::wxWindow(), X::integer(), Y::integer();
- (This, Pt, [Option]) -> ok when
+ (This, Pt, [Option]) -> 'ok' when
This::wxWindow(), Pt::{X::integer(), Y::integer()},
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
move(This,X,Y)
when is_record(This, wx_ref),is_integer(X),is_integer(Y) ->
@@ -991,9 +991,9 @@ move(#wx_ref{type=ThisT,ref=ThisRef},{PtX,PtY}, Options)
<<ThisRef:32/?UI,PtX:32/?UI,PtY:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowmove">external documentation</a>.
--spec move(This, X, Y, [Option]) -> ok when
+-spec move(This, X, Y, [Option]) -> 'ok' when
This::wxWindow(), X::integer(), Y::integer(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
move(#wx_ref{type=ThisT,ref=ThisRef},X,Y, Options)
when is_integer(X),is_integer(Y),is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1004,7 +1004,7 @@ move(#wx_ref{type=ThisT,ref=ThisRef},X,Y, Options)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowmoveafterintaborder">external documentation</a>.
--spec moveAfterInTabOrder(This, Win) -> ok when
+-spec moveAfterInTabOrder(This, Win) -> 'ok' when
This::wxWindow(), Win::wxWindow().
moveAfterInTabOrder(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WinT,ref=WinRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1013,7 +1013,7 @@ moveAfterInTabOrder(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WinT,ref=WinRef
<<ThisRef:32/?UI,WinRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowmovebeforeintaborder">external documentation</a>.
--spec moveBeforeInTabOrder(This, Win) -> ok when
+-spec moveBeforeInTabOrder(This, Win) -> 'ok' when
This::wxWindow(), Win::wxWindow().
moveBeforeInTabOrder(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=WinT,ref=WinRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1032,7 +1032,7 @@ navigate(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindownavigate">external documentation</a>.
-spec navigate(This, [Option]) -> boolean() when
This::wxWindow(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
navigate(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1069,7 +1069,7 @@ popEventHandler(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowpopeventhandler">external documentation</a>.
-spec popEventHandler(This, [Option]) -> wxEvtHandler:wxEvtHandler() when
This::wxWindow(),
- Option :: {deleteHandler, boolean()}.
+ Option :: {'deleteHandler', boolean()}.
popEventHandler(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1090,7 +1090,7 @@ popupMenu(This,Menu)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowpopupmenu">external documentation</a>.
-spec popupMenu(This, Menu, [Option]) -> boolean() when
This::wxWindow(), Menu::wxMenu:wxMenu(),
- Option :: {pos, {X::integer(), Y::integer()}}.
+ Option :: {'pos', {X::integer(), Y::integer()}}.
popupMenu(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MenuT,ref=MenuRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1112,7 +1112,7 @@ popupMenu(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=MenuT,ref=MenuRef},X,Y)
<<ThisRef:32/?UI,MenuRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowraise">external documentation</a>.
--spec raise(This) -> ok when
+-spec raise(This) -> 'ok' when
This::wxWindow().
raise(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1120,7 +1120,7 @@ raise(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv refresh(This, [])
--spec refresh(This) -> ok when
+-spec refresh(This) -> 'ok' when
This::wxWindow().
refresh(This)
@@ -1128,10 +1128,10 @@ refresh(This)
refresh(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowrefresh">external documentation</a>.
--spec refresh(This, [Option]) -> ok when
+-spec refresh(This, [Option]) -> 'ok' when
This::wxWindow(),
- Option :: {eraseBackground, boolean()}
- | {rect, {X::integer(), Y::integer(), W::integer(), H::integer()}}.
+ Option :: {'eraseBackground', boolean()}
+ | {'rect', {X::integer(), Y::integer(), W::integer(), H::integer()}}.
refresh(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1143,7 +1143,7 @@ refresh(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv refreshRect(This,Rect, [])
--spec refreshRect(This, Rect) -> ok when
+-spec refreshRect(This, Rect) -> 'ok' when
This::wxWindow(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.
refreshRect(This,Rect={RectX,RectY,RectW,RectH})
@@ -1151,9 +1151,9 @@ refreshRect(This,Rect={RectX,RectY,RectW,RectH})
refreshRect(This,Rect, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowrefreshrect">external documentation</a>.
--spec refreshRect(This, Rect, [Option]) -> ok when
+-spec refreshRect(This, Rect, [Option]) -> 'ok' when
This::wxWindow(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()},
- Option :: {eraseBackground, boolean()}.
+ Option :: {'eraseBackground', boolean()}.
refreshRect(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH}, Options)
when is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH),is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1164,7 +1164,7 @@ refreshRect(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH}, Options)
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowreleasemouse">external documentation</a>.
--spec releaseMouse(This) -> ok when
+-spec releaseMouse(This) -> 'ok' when
This::wxWindow().
releaseMouse(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1172,7 +1172,7 @@ releaseMouse(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowremovechild">external documentation</a>.
--spec removeChild(This, Child) -> ok when
+-spec removeChild(This, Child) -> 'ok' when
This::wxWindow(), Child::wxWindow().
removeChild(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ChildT,ref=ChildRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1225,7 +1225,7 @@ scrollPages(#wx_ref{type=ThisT,ref=ThisRef},Pages)
<<ThisRef:32/?UI,Pages:32/?UI>>).
%% @equiv scrollWindow(This,Dx,Dy, [])
--spec scrollWindow(This, Dx, Dy) -> ok when
+-spec scrollWindow(This, Dx, Dy) -> 'ok' when
This::wxWindow(), Dx::integer(), Dy::integer().
scrollWindow(This,Dx,Dy)
@@ -1233,9 +1233,9 @@ scrollWindow(This,Dx,Dy)
scrollWindow(This,Dx,Dy, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowscrollwindow">external documentation</a>.
--spec scrollWindow(This, Dx, Dy, [Option]) -> ok when
+-spec scrollWindow(This, Dx, Dy, [Option]) -> 'ok' when
This::wxWindow(), Dx::integer(), Dy::integer(),
- Option :: {rect, {X::integer(), Y::integer(), W::integer(), H::integer()}}.
+ Option :: {'rect', {X::integer(), Y::integer(), W::integer(), H::integer()}}.
scrollWindow(#wx_ref{type=ThisT,ref=ThisRef},Dx,Dy, Options)
when is_integer(Dx),is_integer(Dy),is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1246,7 +1246,7 @@ scrollWindow(#wx_ref{type=ThisT,ref=ThisRef},Dx,Dy, Options)
<<ThisRef:32/?UI,Dx:32/?UI,Dy:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetacceleratortable">external documentation</a>.
--spec setAcceleratorTable(This, Accel) -> ok when
+-spec setAcceleratorTable(This, Accel) -> 'ok' when
This::wxWindow(), Accel::wxAcceleratorTable:wxAcceleratorTable().
setAcceleratorTable(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=AccelT,ref=AccelRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1255,7 +1255,7 @@ setAcceleratorTable(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=AccelT,ref=Acce
<<ThisRef:32/?UI,AccelRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetautolayout">external documentation</a>.
--spec setAutoLayout(This, AutoLayout) -> ok when
+-spec setAutoLayout(This, AutoLayout) -> 'ok' when
This::wxWindow(), AutoLayout::boolean().
setAutoLayout(#wx_ref{type=ThisT,ref=ThisRef},AutoLayout)
when is_boolean(AutoLayout) ->
@@ -1283,7 +1283,7 @@ setBackgroundStyle(#wx_ref{type=ThisT,ref=ThisRef},Style)
<<ThisRef:32/?UI,Style:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetcaret">external documentation</a>.
--spec setCaret(This, Caret) -> ok when
+-spec setCaret(This, Caret) -> 'ok' when
This::wxWindow(), Caret::wxCaret:wxCaret().
setCaret(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=CaretT,ref=CaretRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1293,12 +1293,12 @@ setCaret(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=CaretT,ref=CaretRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetclientsize">external documentation</a>.
%% <br /> Also:<br />
-%% setClientSize(This, Rect) -> ok when<br />
+%% setClientSize(This, Rect) -> 'ok' when<br />
%% This::wxWindow(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.<br />
%%
--spec setClientSize(This, Size) -> ok when
+-spec setClientSize(This, Size) -> 'ok' when
This::wxWindow(), Size::{W::integer(), H::integer()};
- (This, Rect) -> ok when
+ (This, Rect) -> 'ok' when
This::wxWindow(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}.
setClientSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -1312,7 +1312,7 @@ setClientSize(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH})
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetclientsize">external documentation</a>.
--spec setClientSize(This, Width, Height) -> ok when
+-spec setClientSize(This, Width, Height) -> 'ok' when
This::wxWindow(), Width::integer(), Height::integer().
setClientSize(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
when is_integer(Width),is_integer(Height) ->
@@ -1321,7 +1321,7 @@ setClientSize(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
<<ThisRef:32/?UI,Width:32/?UI,Height:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetcontainingsizer">external documentation</a>.
--spec setContainingSizer(This, Sizer) -> ok when
+-spec setContainingSizer(This, Sizer) -> 'ok' when
This::wxWindow(), Sizer::wxSizer:wxSizer().
setContainingSizer(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SizerT,ref=SizerRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1339,7 +1339,7 @@ setCursor(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=CursorT,ref=CursorRef}) -
<<ThisRef:32/?UI,CursorRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetmaxsize">external documentation</a>.
--spec setMaxSize(This, MaxSize) -> ok when
+-spec setMaxSize(This, MaxSize) -> 'ok' when
This::wxWindow(), MaxSize::{W::integer(), H::integer()}.
setMaxSize(#wx_ref{type=ThisT,ref=ThisRef},{MaxSizeW,MaxSizeH})
when is_integer(MaxSizeW),is_integer(MaxSizeH) ->
@@ -1348,7 +1348,7 @@ setMaxSize(#wx_ref{type=ThisT,ref=ThisRef},{MaxSizeW,MaxSizeH})
<<ThisRef:32/?UI,MaxSizeW:32/?UI,MaxSizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetminsize">external documentation</a>.
--spec setMinSize(This, MinSize) -> ok when
+-spec setMinSize(This, MinSize) -> 'ok' when
This::wxWindow(), MinSize::{W::integer(), H::integer()}.
setMinSize(#wx_ref{type=ThisT,ref=ThisRef},{MinSizeW,MinSizeH})
when is_integer(MinSizeW),is_integer(MinSizeH) ->
@@ -1357,7 +1357,7 @@ setMinSize(#wx_ref{type=ThisT,ref=ThisRef},{MinSizeW,MinSizeH})
<<ThisRef:32/?UI,MinSizeW:32/?UI,MinSizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetownbackgroundcolour">external documentation</a>.
--spec setOwnBackgroundColour(This, Colour) -> ok when
+-spec setOwnBackgroundColour(This, Colour) -> 'ok' when
This::wxWindow(), Colour::wx:wx_colour().
setOwnBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -1366,7 +1366,7 @@ setOwnBackgroundColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetownfont">external documentation</a>.
--spec setOwnFont(This, Font) -> ok when
+-spec setOwnFont(This, Font) -> 'ok' when
This::wxWindow(), Font::wxFont:wxFont().
setOwnFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1375,7 +1375,7 @@ setOwnFont(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=FontT,ref=FontRef}) ->
<<ThisRef:32/?UI,FontRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetownforegroundcolour">external documentation</a>.
--spec setOwnForegroundColour(This, Colour) -> ok when
+-spec setOwnForegroundColour(This, Colour) -> 'ok' when
This::wxWindow(), Colour::wx:wx_colour().
setOwnForegroundColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
when tuple_size(Colour) =:= 3; tuple_size(Colour) =:= 4 ->
@@ -1384,7 +1384,7 @@ setOwnForegroundColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetdroptarget">external documentation</a>.
--spec setDropTarget(This, DropTarget) -> ok when
+-spec setDropTarget(This, DropTarget) -> 'ok' when
This::wxWindow(), DropTarget::wx:wx_object().
setDropTarget(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DropTargetT,ref=DropTargetRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1393,7 +1393,7 @@ setDropTarget(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=DropTargetT,ref=DropT
<<ThisRef:32/?UI,DropTargetRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetextrastyle">external documentation</a>.
--spec setExtraStyle(This, ExStyle) -> ok when
+-spec setExtraStyle(This, ExStyle) -> 'ok' when
This::wxWindow(), ExStyle::integer().
setExtraStyle(#wx_ref{type=ThisT,ref=ThisRef},ExStyle)
when is_integer(ExStyle) ->
@@ -1402,7 +1402,7 @@ setExtraStyle(#wx_ref{type=ThisT,ref=ThisRef},ExStyle)
<<ThisRef:32/?UI,ExStyle:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetfocus">external documentation</a>.
--spec setFocus(This) -> ok when
+-spec setFocus(This) -> 'ok' when
This::wxWindow().
setFocus(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1410,7 +1410,7 @@ setFocus(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetfocusfromkbd">external documentation</a>.
--spec setFocusFromKbd(This) -> ok when
+-spec setFocusFromKbd(This) -> 'ok' when
This::wxWindow().
setFocusFromKbd(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1436,7 +1436,7 @@ setForegroundColour(#wx_ref{type=ThisT,ref=ThisRef},Colour)
<<ThisRef:32/?UI,(wxe_util:colour_bin(Colour)):16/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsethelptext">external documentation</a>.
--spec setHelpText(This, Text) -> ok when
+-spec setHelpText(This, Text) -> 'ok' when
This::wxWindow(), Text::unicode:chardata().
setHelpText(#wx_ref{type=ThisT,ref=ThisRef},Text)
when is_list(Text) ->
@@ -1446,7 +1446,7 @@ setHelpText(#wx_ref{type=ThisT,ref=ThisRef},Text)
<<ThisRef:32/?UI,(byte_size(Text_UC)):32/?UI,(Text_UC)/binary, 0:(((8- ((0+byte_size(Text_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetid">external documentation</a>.
--spec setId(This, Winid) -> ok when
+-spec setId(This, Winid) -> 'ok' when
This::wxWindow(), Winid::integer().
setId(#wx_ref{type=ThisT,ref=ThisRef},Winid)
when is_integer(Winid) ->
@@ -1455,7 +1455,7 @@ setId(#wx_ref{type=ThisT,ref=ThisRef},Winid)
<<ThisRef:32/?UI,Winid:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetlabel">external documentation</a>.
--spec setLabel(This, Label) -> ok when
+-spec setLabel(This, Label) -> 'ok' when
This::wxWindow(), Label::unicode:chardata().
setLabel(#wx_ref{type=ThisT,ref=ThisRef},Label)
when is_list(Label) ->
@@ -1465,7 +1465,7 @@ setLabel(#wx_ref{type=ThisT,ref=ThisRef},Label)
<<ThisRef:32/?UI,(byte_size(Label_UC)):32/?UI,(Label_UC)/binary, 0:(((8- ((0+byte_size(Label_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetname">external documentation</a>.
--spec setName(This, Name) -> ok when
+-spec setName(This, Name) -> 'ok' when
This::wxWindow(), Name::unicode:chardata().
setName(#wx_ref{type=ThisT,ref=ThisRef},Name)
when is_list(Name) ->
@@ -1475,7 +1475,7 @@ setName(#wx_ref{type=ThisT,ref=ThisRef},Name)
<<ThisRef:32/?UI,(byte_size(Name_UC)):32/?UI,(Name_UC)/binary, 0:(((8- ((0+byte_size(Name_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetpalette">external documentation</a>.
--spec setPalette(This, Pal) -> ok when
+-spec setPalette(This, Pal) -> 'ok' when
This::wxWindow(), Pal::wxPalette:wxPalette().
setPalette(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PalT,ref=PalRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1484,7 +1484,7 @@ setPalette(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=PalT,ref=PalRef}) ->
<<ThisRef:32/?UI,PalRef:32/?UI>>).
%% @equiv setScrollbar(This,Orient,Pos,ThumbVisible,Range, [])
--spec setScrollbar(This, Orient, Pos, ThumbVisible, Range) -> ok when
+-spec setScrollbar(This, Orient, Pos, ThumbVisible, Range) -> 'ok' when
This::wxWindow(), Orient::integer(), Pos::integer(), ThumbVisible::integer(), Range::integer().
setScrollbar(This,Orient,Pos,ThumbVisible,Range)
@@ -1492,9 +1492,9 @@ setScrollbar(This,Orient,Pos,ThumbVisible,Range)
setScrollbar(This,Orient,Pos,ThumbVisible,Range, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetscrollbar">external documentation</a>.
--spec setScrollbar(This, Orient, Pos, ThumbVisible, Range, [Option]) -> ok when
+-spec setScrollbar(This, Orient, Pos, ThumbVisible, Range, [Option]) -> 'ok' when
This::wxWindow(), Orient::integer(), Pos::integer(), ThumbVisible::integer(), Range::integer(),
- Option :: {refresh, boolean()}.
+ Option :: {'refresh', boolean()}.
setScrollbar(#wx_ref{type=ThisT,ref=ThisRef},Orient,Pos,ThumbVisible,Range, Options)
when is_integer(Orient),is_integer(Pos),is_integer(ThumbVisible),is_integer(Range),is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1505,7 +1505,7 @@ setScrollbar(#wx_ref{type=ThisT,ref=ThisRef},Orient,Pos,ThumbVisible,Range, Opti
<<ThisRef:32/?UI,Orient:32/?UI,Pos:32/?UI,ThumbVisible:32/?UI,Range:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv setScrollPos(This,Orient,Pos, [])
--spec setScrollPos(This, Orient, Pos) -> ok when
+-spec setScrollPos(This, Orient, Pos) -> 'ok' when
This::wxWindow(), Orient::integer(), Pos::integer().
setScrollPos(This,Orient,Pos)
@@ -1513,9 +1513,9 @@ setScrollPos(This,Orient,Pos)
setScrollPos(This,Orient,Pos, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetscrollpos">external documentation</a>.
--spec setScrollPos(This, Orient, Pos, [Option]) -> ok when
+-spec setScrollPos(This, Orient, Pos, [Option]) -> 'ok' when
This::wxWindow(), Orient::integer(), Pos::integer(),
- Option :: {refresh, boolean()}.
+ Option :: {'refresh', boolean()}.
setScrollPos(#wx_ref{type=ThisT,ref=ThisRef},Orient,Pos, Options)
when is_integer(Orient),is_integer(Pos),is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1527,12 +1527,12 @@ setScrollPos(#wx_ref{type=ThisT,ref=ThisRef},Orient,Pos, Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetsize">external documentation</a>.
%% <br /> Also:<br />
-%% setSize(This, Size) -> ok when<br />
+%% setSize(This, Size) -> 'ok' when<br />
%% This::wxWindow(), Size::{W::integer(), H::integer()}.<br />
%%
--spec setSize(This, Rect) -> ok when
+-spec setSize(This, Rect) -> 'ok' when
This::wxWindow(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()};
- (This, Size) -> ok when
+ (This, Size) -> 'ok' when
This::wxWindow(), Size::{W::integer(), H::integer()}.
setSize(This,Rect={RectX,RectY,RectW,RectH})
@@ -1546,15 +1546,15 @@ setSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetsize">external documentation</a>.
%% <br /> Also:<br />
-%% setSize(This, Rect, [Option]) -> ok when<br />
+%% setSize(This, Rect, [Option]) -> 'ok' when<br />
%% This::wxWindow(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()},<br />
-%% Option :: {sizeFlags, integer()}.<br />
+%% Option :: {'sizeFlags', integer()}.<br />
%%
--spec setSize(This, Width, Height) -> ok when
+-spec setSize(This, Width, Height) -> 'ok' when
This::wxWindow(), Width::integer(), Height::integer();
- (This, Rect, [Option]) -> ok when
+ (This, Rect, [Option]) -> 'ok' when
This::wxWindow(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()},
- Option :: {sizeFlags, integer()}.
+ Option :: {'sizeFlags', integer()}.
setSize(#wx_ref{type=ThisT,ref=ThisRef},Width,Height)
when is_integer(Width),is_integer(Height) ->
?CLASS(ThisT,wxWindow),
@@ -1570,7 +1570,7 @@ setSize(#wx_ref{type=ThisT,ref=ThisRef},{RectX,RectY,RectW,RectH}, Options)
<<ThisRef:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv setSize(This,X,Y,Width,Height, [])
--spec setSize(This, X, Y, Width, Height) -> ok when
+-spec setSize(This, X, Y, Width, Height) -> 'ok' when
This::wxWindow(), X::integer(), Y::integer(), Width::integer(), Height::integer().
setSize(This,X,Y,Width,Height)
@@ -1578,9 +1578,9 @@ setSize(This,X,Y,Width,Height)
setSize(This,X,Y,Width,Height, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetsize">external documentation</a>.
--spec setSize(This, X, Y, Width, Height, [Option]) -> ok when
+-spec setSize(This, X, Y, Width, Height, [Option]) -> 'ok' when
This::wxWindow(), X::integer(), Y::integer(), Width::integer(), Height::integer(),
- Option :: {sizeFlags, integer()}.
+ Option :: {'sizeFlags', integer()}.
setSize(#wx_ref{type=ThisT,ref=ThisRef},X,Y,Width,Height, Options)
when is_integer(X),is_integer(Y),is_integer(Width),is_integer(Height),is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1591,7 +1591,7 @@ setSize(#wx_ref{type=ThisT,ref=ThisRef},X,Y,Width,Height, Options)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI,Width:32/?UI,Height:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv setSizeHints(This,MinSize, [])
--spec setSizeHints(This, MinSize) -> ok when
+-spec setSizeHints(This, MinSize) -> 'ok' when
This::wxWindow(), MinSize::{W::integer(), H::integer()}.
setSizeHints(This,MinSize={MinSizeW,MinSizeH})
@@ -1600,17 +1600,17 @@ setSizeHints(This,MinSize={MinSizeW,MinSizeH})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetsizehints">external documentation</a>.
%% <br /> Also:<br />
-%% setSizeHints(This, MinSize, [Option]) -> ok when<br />
+%% setSizeHints(This, MinSize, [Option]) -> 'ok' when<br />
%% This::wxWindow(), MinSize::{W::integer(), H::integer()},<br />
-%% Option :: {maxSize, {W::integer(), H::integer()}}<br />
-%% | {incSize, {W::integer(), H::integer()}}.<br />
+%% Option :: {'maxSize', {W::integer(), H::integer()}}<br />
+%% | {'incSize', {W::integer(), H::integer()}}.<br />
%%
--spec setSizeHints(This, MinW, MinH) -> ok when
+-spec setSizeHints(This, MinW, MinH) -> 'ok' when
This::wxWindow(), MinW::integer(), MinH::integer();
- (This, MinSize, [Option]) -> ok when
+ (This, MinSize, [Option]) -> 'ok' when
This::wxWindow(), MinSize::{W::integer(), H::integer()},
- Option :: {maxSize, {W::integer(), H::integer()}}
- | {incSize, {W::integer(), H::integer()}}.
+ Option :: {'maxSize', {W::integer(), H::integer()}}
+ | {'incSize', {W::integer(), H::integer()}}.
setSizeHints(This,MinW,MinH)
when is_record(This, wx_ref),is_integer(MinW),is_integer(MinH) ->
@@ -1626,12 +1626,12 @@ setSizeHints(#wx_ref{type=ThisT,ref=ThisRef},{MinSizeW,MinSizeH}, Options)
<<ThisRef:32/?UI,MinSizeW:32/?UI,MinSizeH:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetsizehints">external documentation</a>.
--spec setSizeHints(This, MinW, MinH, [Option]) -> ok when
+-spec setSizeHints(This, MinW, MinH, [Option]) -> 'ok' when
This::wxWindow(), MinW::integer(), MinH::integer(),
- Option :: {maxW, integer()}
- | {maxH, integer()}
- | {incW, integer()}
- | {incH, integer()}.
+ Option :: {'maxW', integer()}
+ | {'maxH', integer()}
+ | {'incW', integer()}
+ | {'incH', integer()}.
setSizeHints(#wx_ref{type=ThisT,ref=ThisRef},MinW,MinH, Options)
when is_integer(MinW),is_integer(MinH),is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1645,7 +1645,7 @@ setSizeHints(#wx_ref{type=ThisT,ref=ThisRef},MinW,MinH, Options)
<<ThisRef:32/?UI,MinW:32/?UI,MinH:32/?UI, 0:32,BinOpt/binary>>).
%% @equiv setSizer(This,Sizer, [])
--spec setSizer(This, Sizer) -> ok when
+-spec setSizer(This, Sizer) -> 'ok' when
This::wxWindow(), Sizer::wxSizer:wxSizer().
setSizer(This,Sizer)
@@ -1653,9 +1653,9 @@ setSizer(This,Sizer)
setSizer(This,Sizer, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetsizer">external documentation</a>.
--spec setSizer(This, Sizer, [Option]) -> ok when
+-spec setSizer(This, Sizer, [Option]) -> 'ok' when
This::wxWindow(), Sizer::wxSizer:wxSizer(),
- Option :: {deleteOld, boolean()}.
+ Option :: {'deleteOld', boolean()}.
setSizer(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SizerT,ref=SizerRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1667,7 +1667,7 @@ setSizer(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SizerT,ref=SizerRef}, Opti
<<ThisRef:32/?UI,SizerRef:32/?UI, BinOpt/binary>>).
%% @equiv setSizerAndFit(This,Sizer, [])
--spec setSizerAndFit(This, Sizer) -> ok when
+-spec setSizerAndFit(This, Sizer) -> 'ok' when
This::wxWindow(), Sizer::wxSizer:wxSizer().
setSizerAndFit(This,Sizer)
@@ -1675,9 +1675,9 @@ setSizerAndFit(This,Sizer)
setSizerAndFit(This,Sizer, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetsizerandfit">external documentation</a>.
--spec setSizerAndFit(This, Sizer, [Option]) -> ok when
+-spec setSizerAndFit(This, Sizer, [Option]) -> 'ok' when
This::wxWindow(), Sizer::wxSizer:wxSizer(),
- Option :: {deleteOld, boolean()}.
+ Option :: {'deleteOld', boolean()}.
setSizerAndFit(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SizerT,ref=SizerRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1689,7 +1689,7 @@ setSizerAndFit(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=SizerT,ref=SizerRef}
<<ThisRef:32/?UI,SizerRef:32/?UI, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetthemeenabled">external documentation</a>.
--spec setThemeEnabled(This, EnableTheme) -> ok when
+-spec setThemeEnabled(This, EnableTheme) -> 'ok' when
This::wxWindow(), EnableTheme::boolean().
setThemeEnabled(#wx_ref{type=ThisT,ref=ThisRef},EnableTheme)
when is_boolean(EnableTheme) ->
@@ -1699,12 +1699,12 @@ setThemeEnabled(#wx_ref{type=ThisT,ref=ThisRef},EnableTheme)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsettooltip">external documentation</a>.
%% <br /> Also:<br />
-%% setToolTip(This, Tip) -> ok when<br />
+%% setToolTip(This, Tip) -> 'ok' when<br />
%% This::wxWindow(), Tip::wxToolTip:wxToolTip().<br />
%%
--spec setToolTip(This, Tip) -> ok when
+-spec setToolTip(This, Tip) -> 'ok' when
This::wxWindow(), Tip::unicode:chardata();
- (This, Tip) -> ok when
+ (This, Tip) -> 'ok' when
This::wxWindow(), Tip::wxToolTip:wxToolTip().
setToolTip(#wx_ref{type=ThisT,ref=ThisRef},Tip)
when is_list(Tip) ->
@@ -1719,7 +1719,7 @@ setToolTip(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=TipT,ref=TipRef}) ->
<<ThisRef:32/?UI,TipRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetvirtualsize">external documentation</a>.
--spec setVirtualSize(This, Size) -> ok when
+-spec setVirtualSize(This, Size) -> 'ok' when
This::wxWindow(), Size::{W::integer(), H::integer()}.
setVirtualSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
when is_integer(SizeW),is_integer(SizeH) ->
@@ -1728,7 +1728,7 @@ setVirtualSize(#wx_ref{type=ThisT,ref=ThisRef},{SizeW,SizeH})
<<ThisRef:32/?UI,SizeW:32/?UI,SizeH:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetvirtualsize">external documentation</a>.
--spec setVirtualSize(This, X, Y) -> ok when
+-spec setVirtualSize(This, X, Y) -> 'ok' when
This::wxWindow(), X::integer(), Y::integer().
setVirtualSize(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -1737,7 +1737,7 @@ setVirtualSize(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
%% @equiv setVirtualSizeHints(This,MinSize, [])
--spec setVirtualSizeHints(This, MinSize) -> ok when
+-spec setVirtualSizeHints(This, MinSize) -> 'ok' when
This::wxWindow(), MinSize::{W::integer(), H::integer()}.
setVirtualSizeHints(This,MinSize={MinSizeW,MinSizeH})
@@ -1746,15 +1746,15 @@ setVirtualSizeHints(This,MinSize={MinSizeW,MinSizeH})
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetvirtualsizehints">external documentation</a>.
%% <br /> Also:<br />
-%% setVirtualSizeHints(This, MinSize, [Option]) -> ok when<br />
+%% setVirtualSizeHints(This, MinSize, [Option]) -> 'ok' when<br />
%% This::wxWindow(), MinSize::{W::integer(), H::integer()},<br />
-%% Option :: {maxSize, {W::integer(), H::integer()}}.<br />
+%% Option :: {'maxSize', {W::integer(), H::integer()}}.<br />
%%
--spec setVirtualSizeHints(This, MinW, MinH) -> ok when
+-spec setVirtualSizeHints(This, MinW, MinH) -> 'ok' when
This::wxWindow(), MinW::integer(), MinH::integer();
- (This, MinSize, [Option]) -> ok when
+ (This, MinSize, [Option]) -> 'ok' when
This::wxWindow(), MinSize::{W::integer(), H::integer()},
- Option :: {maxSize, {W::integer(), H::integer()}}.
+ Option :: {'maxSize', {W::integer(), H::integer()}}.
setVirtualSizeHints(This,MinW,MinH)
when is_record(This, wx_ref),is_integer(MinW),is_integer(MinH) ->
@@ -1769,10 +1769,10 @@ setVirtualSizeHints(#wx_ref{type=ThisT,ref=ThisRef},{MinSizeW,MinSizeH}, Options
<<ThisRef:32/?UI,MinSizeW:32/?UI,MinSizeH:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetvirtualsizehints">external documentation</a>.
--spec setVirtualSizeHints(This, MinW, MinH, [Option]) -> ok when
+-spec setVirtualSizeHints(This, MinW, MinH, [Option]) -> 'ok' when
This::wxWindow(), MinW::integer(), MinH::integer(),
- Option :: {maxW, integer()}
- | {maxH, integer()}.
+ Option :: {'maxW', integer()}
+ | {'maxH', integer()}.
setVirtualSizeHints(#wx_ref{type=ThisT,ref=ThisRef},MinW,MinH, Options)
when is_integer(MinW),is_integer(MinH),is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1784,7 +1784,7 @@ setVirtualSizeHints(#wx_ref{type=ThisT,ref=ThisRef},MinW,MinH, Options)
<<ThisRef:32/?UI,MinW:32/?UI,MinH:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetwindowstyle">external documentation</a>.
--spec setWindowStyle(This, Style) -> ok when
+-spec setWindowStyle(This, Style) -> 'ok' when
This::wxWindow(), Style::integer().
setWindowStyle(#wx_ref{type=ThisT,ref=ThisRef},Style)
when is_integer(Style) ->
@@ -1793,7 +1793,7 @@ setWindowStyle(#wx_ref{type=ThisT,ref=ThisRef},Style)
<<ThisRef:32/?UI,Style:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetwindowstyleflag">external documentation</a>.
--spec setWindowStyleFlag(This, Style) -> ok when
+-spec setWindowStyleFlag(This, Style) -> 'ok' when
This::wxWindow(), Style::integer().
setWindowStyleFlag(#wx_ref{type=ThisT,ref=ThisRef},Style)
when is_integer(Style) ->
@@ -1803,7 +1803,7 @@ setWindowStyleFlag(#wx_ref{type=ThisT,ref=ThisRef},Style)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetwindowvariant">external documentation</a>.
%%<br /> Variant = ?wxWINDOW_VARIANT_NORMAL | ?wxWINDOW_VARIANT_SMALL | ?wxWINDOW_VARIANT_MINI | ?wxWINDOW_VARIANT_LARGE | ?wxWINDOW_VARIANT_MAX
--spec setWindowVariant(This, Variant) -> ok when
+-spec setWindowVariant(This, Variant) -> 'ok' when
This::wxWindow(), Variant::wx:wx_enum().
setWindowVariant(#wx_ref{type=ThisT,ref=ThisRef},Variant)
when is_integer(Variant) ->
@@ -1830,7 +1830,7 @@ show(This)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowshow">external documentation</a>.
-spec show(This, [Option]) -> boolean() when
This::wxWindow(),
- Option :: {show, boolean()}.
+ Option :: {'show', boolean()}.
show(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1841,7 +1841,7 @@ show(#wx_ref{type=ThisT,ref=ThisRef}, Options)
<<ThisRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowthaw">external documentation</a>.
--spec thaw(This) -> ok when
+-spec thaw(This) -> 'ok' when
This::wxWindow().
thaw(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1865,7 +1865,7 @@ transferDataToWindow(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowupdate">external documentation</a>.
--spec update(This) -> ok when
+-spec update(This) -> 'ok' when
This::wxWindow().
update(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxWindow),
@@ -1873,7 +1873,7 @@ update(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @equiv updateWindowUI(This, [])
--spec updateWindowUI(This) -> ok when
+-spec updateWindowUI(This) -> 'ok' when
This::wxWindow().
updateWindowUI(This)
@@ -1881,9 +1881,9 @@ updateWindowUI(This)
updateWindowUI(This, []).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowupdatewindowui">external documentation</a>.
--spec updateWindowUI(This, [Option]) -> ok when
+-spec updateWindowUI(This, [Option]) -> 'ok' when
This::wxWindow(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
updateWindowUI(#wx_ref{type=ThisT,ref=ThisRef}, Options)
when is_list(Options) ->
?CLASS(ThisT,wxWindow),
@@ -1902,7 +1902,7 @@ validate(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowwarppointer">external documentation</a>.
--spec warpPointer(This, X, Y) -> ok when
+-spec warpPointer(This, X, Y) -> 'ok' when
This::wxWindow(), X::integer(), Y::integer().
warpPointer(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
when is_integer(X),is_integer(Y) ->
@@ -1936,7 +1936,7 @@ isDoubleBuffered(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsetdoublebuffered">external documentation</a>.
--spec setDoubleBuffered(This, On) -> ok when
+-spec setDoubleBuffered(This, On) -> 'ok' when
This::wxWindow(), On::boolean().
setDoubleBuffered(#wx_ref{type=ThisT,ref=ThisRef},On)
when is_boolean(On) ->
@@ -1945,7 +1945,7 @@ setDoubleBuffered(#wx_ref{type=ThisT,ref=ThisRef},On)
<<ThisRef:32/?UI,(wxe_util:from_bool(On)):32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxWindow()) -> ok.
+-spec destroy(This::wxWindow()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxWindow),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxWindowDC.erl b/lib/wx/src/gen/wxWindowDC.erl
index 176580a9bf..9b1045b84d 100644
--- a/lib/wx/src/gen/wxWindowDC.erl
+++ b/lib/wx/src/gen/wxWindowDC.erl
@@ -78,7 +78,7 @@ new(#wx_ref{type=WinT,ref=WinRef}) ->
<<WinRef:32/?UI>>).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxWindowDC()) -> ok.
+-spec destroy(This::wxWindowDC()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxWindowDC),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wxXmlResource.erl b/lib/wx/src/gen/wxXmlResource.erl
index b4d08fbbd5..aa65b8b04e 100644
--- a/lib/wx/src/gen/wxXmlResource.erl
+++ b/lib/wx/src/gen/wxXmlResource.erl
@@ -48,8 +48,8 @@ new() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxxmlresource.html#wxxmlresourcewxxmlresource">external documentation</a>.
-spec new([Option]) -> wxXmlResource() when
- Option :: {flags, integer()}
- | {domain, unicode:chardata()}.
+ Option :: {'flags', integer()}
+ | {'domain', unicode:chardata()}.
new(Options)
when is_list(Options) ->
MOpts = fun({flags, Flags}, Acc) -> [<<1:32/?UI,Flags:32/?UI>>|Acc];
@@ -62,8 +62,8 @@ new(Options)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxxmlresource.html#wxxmlresourcewxxmlresource">external documentation</a>.
-spec new(Filemask, [Option]) -> wxXmlResource() when
Filemask::unicode:chardata(),
- Option :: {flags, integer()}
- | {domain, unicode:chardata()}.
+ Option :: {'flags', integer()}
+ | {'domain', unicode:chardata()}.
new(Filemask, Options)
when is_list(Filemask),is_list(Options) ->
Filemask_UC = unicode:characters_to_binary([Filemask,0]),
@@ -85,7 +85,7 @@ attachUnknownControl(This,Name,Control)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxxmlresource.html#wxxmlresourceattachunknowncontrol">external documentation</a>.
-spec attachUnknownControl(This, Name, Control, [Option]) -> boolean() when
This::wxXmlResource(), Name::unicode:chardata(), Control::wxWindow:wxWindow(),
- Option :: {parent, wxWindow:wxWindow()}.
+ Option :: {'parent', wxWindow:wxWindow()}.
attachUnknownControl(#wx_ref{type=ThisT,ref=ThisRef},Name,#wx_ref{type=ControlT,ref=ControlRef}, Options)
when is_list(Name),is_list(Options) ->
?CLASS(ThisT,wxXmlResource),
@@ -98,7 +98,7 @@ attachUnknownControl(#wx_ref{type=ThisT,ref=ThisRef},Name,#wx_ref{type=ControlT,
<<ThisRef:32/?UI,(byte_size(Name_UC)):32/?UI,(Name_UC)/binary, 0:(((8- ((0+byte_size(Name_UC)) band 16#7)) band 16#7))/unit:8,ControlRef:32/?UI, 0:32,BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxxmlresource.html#wxxmlresourceclearhandlers">external documentation</a>.
--spec clearHandlers(This) -> ok when
+-spec clearHandlers(This) -> 'ok' when
This::wxXmlResource().
clearHandlers(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxXmlResource),
@@ -147,7 +147,7 @@ getXRCID(Str_id)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxxmlresource.html#wxxmlresourcegetxrcid">external documentation</a>.
-spec getXRCID(Str_id, [Option]) -> integer() when
Str_id::[unicode:chardata()],
- Option :: {value_if_not_found, integer()}.
+ Option :: {'value_if_not_found', integer()}.
getXRCID(Str_id, Options)
when is_list(Str_id),is_list(Options) ->
Str_id_UC = unicode:characters_to_binary([Str_id,0]),
@@ -158,7 +158,7 @@ getXRCID(Str_id, Options)
<<(byte_size(Str_id_UC)):32/?UI,(Str_id_UC)/binary, 0:(((8- ((4+byte_size(Str_id_UC)) band 16#7)) band 16#7))/unit:8, BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxxmlresource.html#wxxmlresourceinitallhandlers">external documentation</a>.
--spec initAllHandlers(This) -> ok when
+-spec initAllHandlers(This) -> 'ok' when
This::wxXmlResource().
initAllHandlers(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxXmlResource),
@@ -315,7 +315,7 @@ set(#wx_ref{type=ResT,ref=ResRef}) ->
<<ResRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxxmlresource.html#wxxmlresourcesetflags">external documentation</a>.
--spec setFlags(This, Flags) -> ok when
+-spec setFlags(This, Flags) -> 'ok' when
This::wxXmlResource(), Flags::integer().
setFlags(#wx_ref{type=ThisT,ref=ThisRef},Flags)
when is_integer(Flags) ->
@@ -334,8 +334,6 @@ unload(#wx_ref{type=ThisT,ref=ThisRef},Filename)
<<ThisRef:32/?UI,(byte_size(Filename_UC)):32/?UI,(Filename_UC)/binary, 0:(((8- ((0+byte_size(Filename_UC)) band 16#7)) band 16#7))/unit:8>>).
-%% @spec (Window::wxWindow:wxWindow(),Name::string(), Type::atom()) -> wx:wxObject()
-
%% @doc Looks up a control with Name in a window created with XML
%% resources. You can use it to set/get values from controls.
%% The object is type casted to <b>Type</b>.
@@ -345,6 +343,10 @@ unload(#wx_ref{type=ThisT,ref=ThisRef},Filename)
%% true = wxXmlResource:loadDialog(Xrc, Dlg, Frame, "controls_dialog"), <br />
%% LCtrl = xrcctrl(Dlg, "controls_listctrl", wxListCtrl), <br />
%% wxListCtrl:insertColumn(LCtrl, 0, "Name", [{width, 200}]), <br />
+-spec xrcctrl(Window, Name, Type) -> wx:wx_object() when
+ Window::wxWindow:wxWindow(),
+ Name::string(),
+ Type::atom().
xrcctrl(Window = #wx_ref{}, Name, Type) when is_list(Name), is_atom(Type) ->
%% Func Id ?wxXmlResource_xrcctrl
@@ -353,7 +355,7 @@ xrcctrl(Window = #wx_ref{}, Name, Type) when is_list(Name), is_atom(Type) ->
wx:typeCast(Res, Type).
%% @doc Destroys this object, do not use object again
--spec destroy(This::wxXmlResource()) -> ok.
+-spec destroy(This::wxXmlResource()) -> 'ok'.
destroy(Obj=#wx_ref{type=Type}) ->
?CLASS(Type,wxXmlResource),
wxe_util:destroy(?DESTROY_OBJECT,Obj),
diff --git a/lib/wx/src/gen/wx_misc.erl b/lib/wx/src/gen/wx_misc.erl
index 5db6ceb036..ce5d917136 100644
--- a/lib/wx/src/gen/wx_misc.erl
+++ b/lib/wx/src/gen/wx_misc.erl
@@ -63,7 +63,7 @@ setDetectableAutoRepeat(Flag)
<<(wxe_util:from_bool(Flag)):32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_miscellany.html#wxbell">external documentation</a>.
--spec bell() -> ok.
+-spec bell() -> 'ok'.
bell() ->
wxe_util:cast(?utils_wxBell,
<<>>).
@@ -96,14 +96,14 @@ findWindowAtPoint({PtX,PtY})
<<PtX:32/?UI,PtY:32/?UI>>).
%% @equiv beginBusyCursor([])
--spec beginBusyCursor() -> ok.
+-spec beginBusyCursor() -> 'ok'.
beginBusyCursor() ->
beginBusyCursor([]).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_miscellany.html#wxbeginbusycursor">external documentation</a>.
--spec beginBusyCursor([Option]) -> ok when
- Option :: {cursor, wxCursor:wxCursor()}.
+-spec beginBusyCursor([Option]) -> 'ok' when
+ Option :: {'cursor', wxCursor:wxCursor()}.
beginBusyCursor(Options)
when is_list(Options) ->
MOpts = fun({cursor, #wx_ref{type=CursorT,ref=CursorRef}}, Acc) -> ?CLASS(CursorT,wxCursor),[<<1:32/?UI,CursorRef:32/?UI>>|Acc];
@@ -113,7 +113,7 @@ beginBusyCursor(Options)
<<BinOpt/binary>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_miscellany.html#wxendbusycursor">external documentation</a>.
--spec endBusyCursor() -> ok.
+-spec endBusyCursor() -> 'ok'.
endBusyCursor() ->
wxe_util:cast(?utils_wxEndBusyCursor,
<<>>).
@@ -141,7 +141,7 @@ shell() ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_miscellany.html#wxshell">external documentation</a>.
-spec shell([Option]) -> boolean() when
- Option :: {command, unicode:chardata()}.
+ Option :: {'command', unicode:chardata()}.
shell(Options)
when is_list(Options) ->
MOpts = fun({command, Command}, Acc) -> Command_UC = unicode:characters_to_binary([Command,0]),[<<1:32/?UI,(byte_size(Command_UC)):32/?UI,(Command_UC)/binary, 0:(((8- ((0+byte_size(Command_UC)) band 16#7)) band 16#7))/unit:8>>|Acc];
@@ -161,7 +161,7 @@ launchDefaultBrowser(Url)
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_miscellany.html#wxlaunchdefaultbrowser">external documentation</a>.
-spec launchDefaultBrowser(Url, [Option]) -> boolean() when
Url::unicode:chardata(),
- Option :: {flags, integer()}.
+ Option :: {'flags', integer()}.
launchDefaultBrowser(Url, Options)
when is_list(Url),is_list(Options) ->
Url_UC = unicode:characters_to_binary([Url,0]),
@@ -196,7 +196,7 @@ newId() ->
<<>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_miscellany.html#wxregisterid">external documentation</a>.
--spec registerId(Id) -> ok when
+-spec registerId(Id) -> 'ok' when
Id::integer().
registerId(Id)
when is_integer(Id) ->
@@ -234,7 +234,7 @@ displaySize() ->
<<>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_gdicmn.html#gdicmnwxsetcursor">external documentation</a>.
--spec setCursor(Cursor) -> ok when
+-spec setCursor(Cursor) -> 'ok' when
Cursor::wxCursor:wxCursor().
setCursor(#wx_ref{type=CursorT,ref=CursorRef}) ->
?CLASS(CursorT,wxCursor),
diff --git a/lib/wx/src/wx.erl b/lib/wx/src/wx.erl
index 6498b58cda..34bf06cf46 100644
--- a/lib/wx/src/wx.erl
+++ b/lib/wx/src/wx.erl
@@ -106,8 +106,8 @@ new() ->
%% Or {silent_start, Bool}, which causes error messages at startup to
%% be suppressed. The latter can be used as a silent test of whether
%% wx is properly installed or not.
--spec new([Option]) -> wx_object() when Option :: {debug, list() | atom()} |
- {silent_start, boolean()}.
+-spec new([Option]) -> wx_object()
+ when Option :: {'debug', list() | atom()} | {'silent_start', boolean()}.
new(Options) when is_list(Options) ->
Debug = proplists:get_value(debug, Options, 0),
SilentStart = proplists:get_value(silent_start, Options, false),
@@ -118,7 +118,7 @@ new(Options) when is_list(Options) ->
null().
%% @doc Stops a wx server.
--spec destroy() -> ok.
+-spec destroy() -> 'ok'.
destroy() ->
wxe_server:stop(),
erase(?WXE_IDENTIFIER),
@@ -136,7 +136,7 @@ get_env() ->
%% @doc Sets the process wx environment, allows this process to use
%% another process wx environment.
--spec set_env(wx_env()) -> ok.
+-spec set_env(wx_env()) -> 'ok'.
set_env(#wx_env{sv=Pid, port=Port} = Env) ->
put(?WXE_IDENTIFIER, Env),
put(opengl_port, Port),
@@ -191,7 +191,7 @@ batch(Fun) ->
end.
%% @doc Behaves like {@link //stdlib/lists:foreach/2} but batches wx commands. See {@link batch/1}.
--spec foreach(function(), list()) -> ok.
+-spec foreach(function(), list()) -> 'ok'.
foreach(Fun, List) ->
ok = wxe_util:cast(?BATCH_BEGIN, <<>>),
try lists:foreach(Fun, List)
@@ -267,7 +267,7 @@ get_memory_bin(#wx_mem{bin=Bin, size=Size}) ->
%% @doc Saves the memory from deletion until release_memory/1 is called.
%% If release_memory/1 is not called the memory will not be garbage collected.
--spec retain_memory(wx_memory()) -> ok.
+-spec retain_memory(wx_memory()) -> 'ok'.
retain_memory(#wx_mem{bin=Bin}) ->
wxe_util:send_bin(Bin),
ok = wxe_util:cast(?WXE_BIN_INCR, <<>>);
@@ -279,7 +279,7 @@ retain_memory(Bin) when is_binary(Bin) ->
wxe_util:send_bin(Bin),
ok = wxe_util:cast(?WXE_BIN_INCR, <<>>).
--spec release_memory(wx_memory()) -> ok.
+-spec release_memory(wx_memory()) -> 'ok'.
release_memory(#wx_mem{bin=Bin}) ->
wxe_util:send_bin(Bin),
ok = wxe_util:cast(?WXE_BIN_DECR, <<>>);
@@ -290,8 +290,8 @@ release_memory(Bin) when is_binary(Bin) ->
%% @doc Sets debug level. If debug level is 'verbose' or 'trace'
%% each call is printed on console. If Level is 'driver' each allocated
%% object and deletion is printed on the console.
--spec debug(Level | [Level]) -> ok
- when Level :: none | verbose | trace | driver | integer().
+-spec debug(Level | [Level]) -> 'ok'
+ when Level :: 'none' | 'verbose' | 'trace' | 'driver' | integer().
debug(Debug) ->
Level = calc_level(Debug),
@@ -332,7 +332,7 @@ set_debug(Level) when is_integer(Level) ->
end.
%% @doc Starts a wxErlang demo if examples directory exists and is compiled
--spec demo() -> ok | {error, atom()}.
+-spec demo() -> 'ok' | {'error', atom()}.
demo() ->
Priv = code:priv_dir(wx),
Demo = filename:join([filename:dirname(Priv),examples,demo]),
diff --git a/lib/wx/src/wx_object.erl b/lib/wx/src/wx_object.erl
index c22a083eb9..40170b6eb1 100644
--- a/lib/wx/src/wx_object.erl
+++ b/lib/wx/src/wx_object.erl
@@ -55,7 +55,7 @@
%% When stop is returned in one of the functions above with Reason =
%% normal | shutdown | Term, terminate(State) is called. It lets the
%% user module clean up, it is always called when server terminates or
-%% when wxObject() in the driver is deleted. If the Parent process
+%% when wx_object() in the driver is deleted. If the Parent process
%% terminates the Module:terminate/2 function is called. <br/>
%% terminate(Reason, State)
%%
@@ -113,35 +113,35 @@
%% -export([behaviour_info/1]).
-callback init(Args :: term()) ->
- {#wx_ref{}, State :: term()} | {#wx_ref{}, State :: term(), timeout() | hibernate} |
- {stop, Reason :: term()} | ignore.
+ {#wx_ref{}, State :: term()} | {#wx_ref{}, State :: term(), timeout() | 'hibernate'} |
+ {'stop', Reason :: term()} | 'ignore'.
-callback handle_event(Request :: #wx{}, State :: term()) ->
- {noreply, NewState :: term()} |
- {noreply, NewState :: term(), timeout() | hibernate} |
- {stop, Reason :: term(), NewState :: term()}.
+ {'noreply', NewState :: term()} |
+ {'noreply', NewState :: term(), timeout() | 'hibernate'} |
+ {'stop', Reason :: term(), NewState :: term()}.
-callback handle_call(Request :: term(), From :: {pid(), Tag :: term()},
State :: term()) ->
- {reply, Reply :: term(), NewState :: term()} |
- {reply, Reply :: term(), NewState :: term(), timeout() | hibernate} |
- {noreply, NewState :: term()} |
- {noreply, NewState :: term(), timeout() | hibernate} |
- {stop, Reason :: term(), Reply :: term(), NewState :: term()} |
- {stop, Reason :: term(), NewState :: term()}.
+ {'reply', Reply :: term(), NewState :: term()} |
+ {'reply', Reply :: term(), NewState :: term(), timeout() | 'hibernate'} |
+ {'noreply', NewState :: term()} |
+ {'noreply', NewState :: term(), timeout() | 'hibernate'} |
+ {'stop', Reason :: term(), Reply :: term(), NewState :: term()} |
+ {'stop', Reason :: term(), NewState :: term()}.
-callback handle_cast(Request :: term(), State :: term()) ->
- {noreply, NewState :: term()} |
- {noreply, NewState :: term(), timeout() | hibernate} |
- {stop, Reason :: term(), NewState :: term()}.
+ {'noreply', NewState :: term()} |
+ {'noreply', NewState :: term(), timeout() | 'hibernate'} |
+ {'stop', Reason :: term(), NewState :: term()}.
-callback handle_info(Info :: timeout() | term(), State :: term()) ->
- {noreply, NewState :: term()} |
- {noreply, NewState :: term(), timeout() | hibernate} |
- {stop, Reason :: term(), NewState :: term()}.
--callback terminate(Reason :: (normal | shutdown | {shutdown, term()} |
+ {'noreply', NewState :: term()} |
+ {'noreply', NewState :: term(), timeout() | 'hibernate'} |
+ {'stop', Reason :: term(), NewState :: term()}.
+-callback terminate(Reason :: ('normal' | 'shutdown' | {'shutdown', term()} |
term()),
State :: term()) ->
term().
--callback code_change(OldVsn :: (term() | {down, term()}), State :: term(),
+-callback code_change(OldVsn :: (term() | {'down', term()}), State :: term(),
Extra :: term()) ->
- {ok, NewState :: term()} | {error, Reason :: term()}.
+ {'ok', NewState :: term()} | {'error', Reason :: term()}.
%% System exports
@@ -171,58 +171,59 @@
%% -----------------------------------------------------------------
-%% @spec (Mod, Args, Options) -> wxWindow:wxWindow()
-%% Mod = atom()
-%% Args = term()
-%% Options = [{timeout, Timeout} | {debug, [Flag]}]
-%% Flag = trace | log | {logfile, File} | statistics | debug
%% @doc Starts a generic wx_object server and invokes Mod:init(Args) in the
%% new process.
+-spec start(Mod, Args, Options) -> wxWindow:wxWindow() | {error, term()} when
+ Mod::atom(),
+ Args::term(),
+ Flag::trace | log | {logfile, string()} | statistics | debug,
+ Options::[{timeout, timeout()} | {debug, [Flag]}].
start(Mod, Args, Options) ->
gen_response(gen:start(?MODULE, nolink, Mod, Args, [get(?WXE_IDENTIFIER)|Options])).
-
-%% @spec (Name, Mod, Args, Options) -> wxWindow:wxWindow()
-%% Name = {local, atom()}
-%% Mod = atom()
-%% Args = term()
-%% Options = [{timeout, Timeout} | {debug, [Flag]}]
-%% Flag = trace | log | {logfile, File} | statistics | debug
+
%% @doc Starts a generic wx_object server and invokes Mod:init(Args) in the
%% new process.
+-spec start(Name, Mod, Args, Options) -> wxWindow:wxWindow() | {error, term()} when
+ Name::{local, atom()},
+ Mod::atom(),
+ Args::term(),
+ Flag::trace | log | {logfile, string()} | statistics | debug,
+ Options::[{timeout, timeout()} | {debug, [Flag]}].
start(Name, Mod, Args, Options) ->
gen_response(gen:start(?MODULE, nolink, Name, Mod, Args, [get(?WXE_IDENTIFIER)|Options])).
-%% @spec (Mod, Args, Options) -> wxWindow:wxWindow()
-%% Mod = atom()
-%% Args = term()
-%% Options = [{timeout, Timeout} | {debug, [Flag]}]
-%% Flag = trace | log | {logfile, File} | statistics | debug
%% @doc Starts a generic wx_object server and invokes Mod:init(Args) in the
%% new process.
+-spec start_link(Mod, Args, Options) -> wxWindow:wxWindow() | {error, term()} when
+ Mod::atom(),
+ Args::term(),
+ Flag::trace | log | {logfile, string()} | statistics | debug,
+ Options::[{timeout, timeout()} | {debug, [Flag]}].
start_link(Mod, Args, Options) ->
gen_response(gen:start(?MODULE, link, Mod, Args, [get(?WXE_IDENTIFIER)|Options])).
-%% @spec (Name, Mod, Args, Options) -> wxWindow:wxWindow()
-%% Name = {local, atom()}
-%% Mod = atom()
-%% Args = term()
-%% Options = [{timeout, Timeout} | {debug, [Flag]}]
-%% Flag = trace | log | {logfile, File} | statistics | debug
%% @doc Starts a generic wx_object server and invokes Mod:init(Args) in the
%% new process.
+-spec start_link(Name, Mod, Args, Options) -> wxWindow:wxWindow() | {error, term()} when
+ Name::{local, atom()},
+ Mod::atom(),
+ Args::term(),
+ Flag::trace | log | {logfile, string()} | statistics | debug,
+ Options::[{timeout, timeout()} | {debug, [Flag]}].
start_link(Name, Mod, Args, Options) ->
gen_response(gen:start(?MODULE, link, Name, Mod, Args, [get(?WXE_IDENTIFIER)|Options])).
-
+
gen_response({ok, Pid}) ->
receive {ack, Pid, Ref = #wx_ref{}} -> Ref end;
gen_response(Reply) ->
Reply.
-%% @spec (Ref::wxObject()|atom()|pid()) -> ok
%% @doc Stops a generic wx_object server with reason 'normal'.
%% Invokes terminate(Reason,State) in the server. The call waits until
%% the process is terminated. If the process does not exist, an
%% exception is raised.
+-spec stop(Obj) -> ok when
+ Obj::wx:wx_object()|atom()|pid().
stop(Ref = #wx_ref{state=Pid}) when is_pid(Pid) ->
try
gen:stop(Pid)
@@ -236,11 +237,14 @@ stop(Name) when is_atom(Name) orelse is_pid(Name) ->
erlang:error({ExitReason, {?MODULE, stop, [Name]}})
end.
-%% @spec (Ref::wxObject()|atom()|pid(), Reason::term(), Timeout::timeout()) -> ok
%% @doc Stops a generic wx_object server with the given Reason.
%% Invokes terminate(Reason,State) in the server. The call waits until
%% the process is terminated. If the call times out, or if the process
%% does not exist, an exception is raised.
+-spec stop(Obj, Reason, Timeout) -> ok when
+ Obj::wx:wx_object()|atom()|pid(),
+ Reason::term(),
+ Timeout::timeout().
stop(Ref = #wx_ref{state=Pid}, Reason, Timeout) when is_pid(Pid) ->
try
gen:stop(Pid, Reason, Timeout)
@@ -254,12 +258,14 @@ stop(Name, Reason, Timeout) when is_atom(Name) orelse is_pid(Name) ->
erlang:error({ExitReason, {?MODULE, stop, [Name, Reason, Timeout]}})
end.
-%% @spec (Ref::wxObject()|atom()|pid(), Request::term()) -> term()
%% @doc Make a call to a wx_object server.
%% The call waits until it gets a result.
%% Invokes handle_call(Request, From, State) in the server
+-spec call(Obj, Request) -> term() when
+ Obj::wx:wx_object()|atom()|pid(),
+ Request::term().
call(Ref = #wx_ref{state=Pid}, Request) when is_pid(Pid) ->
- try
+ try
{ok,Res} = gen:call(Pid, '$gen_call', Request, infinity),
Res
catch _:Reason ->
@@ -272,10 +278,13 @@ call(Name, Request) when is_atom(Name) orelse is_pid(Name) ->
catch _:Reason ->
erlang:error({Reason, {?MODULE, call, [Name, Request]}})
end.
-
-%% @spec (Ref::wxObject()|atom()|pid(), Request::term(), Timeout::integer()) -> term()
+
%% @doc Make a call to a wx_object server with a timeout.
%% Invokes handle_call(Request, From, State) in server
+-spec call(Obj, Request, Timeout) -> term() when
+ Obj::wx:wx_object()|atom()|pid(),
+ Request::term(),
+ Timeout::integer().
call(Ref = #wx_ref{state=Pid}, Request, Timeout) when is_pid(Pid) ->
try
{ok,Res} = gen:call(Pid, '$gen_call', Request, Timeout),
@@ -291,10 +300,11 @@ call(Name, Request, Timeout) when is_atom(Name) orelse is_pid(Name) ->
erlang:error({Reason, {?MODULE, call, [Name, Request, Timeout]}})
end.
-%% @spec (Ref::wxObject()|atom()|pid(), Request::term()) -> ok
%% @doc Make a cast to a wx_object server.
%% Invokes handle_cast(Request, State) in the server
-
+-spec cast(Obj, Request) -> ok when
+ Obj::wx:wx_object()|atom()|pid(),
+ Request::term().
cast(#wx_ref{state=Pid}, Request) when is_pid(Pid) ->
Pid ! {'$gen_cast',Request},
ok;
@@ -302,21 +312,23 @@ cast(Name, Request) when is_atom(Name) orelse is_pid(Name) ->
Name ! {'$gen_cast',Request},
ok.
-%% @spec (Ref::wxObject()) -> pid()
%% @doc Get the pid of the object handle.
+-spec get_pid(Obj) -> pid() when
+ Obj::wx:wx_object()|atom()|pid().
get_pid(#wx_ref{state=Pid}) when is_pid(Pid) ->
Pid.
-%% @spec (Ref::wxObject(), pid()) -> wxObject()
%% @doc Sets the controlling process of the object handle.
+-spec set_pid(Obj, pid()) -> wx:wx_object() when
+ Obj::wx:wx_object()|atom()|pid().
set_pid(#wx_ref{}=R, Pid) when is_pid(Pid) ->
R#wx_ref{state=Pid}.
%% -----------------------------------------------------------------
%% Send a reply to the client.
%% -----------------------------------------------------------------
-%% @spec (From::tuple(), Reply::term()) -> pid()
%% @doc Get the pid of the object handle.
+-spec reply({pid(), Tag::term()}, Reply::term()) -> pid().
reply({To, Tag}, Reply) ->
catch To ! {Tag, Reply}.
diff --git a/lib/wx/src/wxe_master.erl b/lib/wx/src/wxe_master.erl
index 06be0367f8..e17a3327ac 100644
--- a/lib/wx/src/wxe_master.erl
+++ b/lib/wx/src/wxe_master.erl
@@ -185,10 +185,10 @@ handle_cast(_Msg, State) ->
%% Description: Handling all non call/cast messages
%%--------------------------------------------------------------------
handle_info({wxe_driver, error, Msg}, State) ->
- error_logger:format("WX ERROR: ~s~n", [Msg]),
+ error_logger:error_report([{wx, error}, {message, lists:flatten(Msg)}]),
{noreply, State};
handle_info({wxe_driver, internal_error, Msg}, State) ->
- error_logger:format("WX INTERNAL ERROR: ~s~n", [Msg]),
+ error_logger:error_report([{wx, internal_error}, {message, lists:flatten(Msg)}]),
{noreply, State};
handle_info({wxe_driver, debug, Msg}, State) ->
io:format("WX DBG: ~s~n", [Msg]),
diff --git a/lib/wx/src/wxe_util.erl b/lib/wx/src/wxe_util.erl
index 3eaf6aebed..bbcd9a65ea 100644
--- a/lib/wx/src/wxe_util.erl
+++ b/lib/wx/src/wxe_util.erl
@@ -82,9 +82,11 @@ rec(Op) ->
{'_wxe_error_', Op, Error} ->
[{_,MF}] = ets:lookup(wx_debug_info,Op),
erlang:error({Error, MF});
- {'_wxe_error_', Old, Error} ->
- [{_,MF}] = ets:lookup(wx_debug_info,Old),
- erlang:exit({Error, MF})
+ {'_wxe_error_', Old, Error} ->
+ [{_,{M,F,A}}] = ets:lookup(wx_debug_info,Old),
+ Msg = io_lib:format("~p in ~w:~w/~w", [Error, M, F, A]),
+ wxe_master ! {wxe_driver, error, Msg},
+ rec(Op)
end.
construct(Op, Args) ->
diff --git a/lib/wx/test/wx_basic_SUITE.erl b/lib/wx/test/wx_basic_SUITE.erl
index f89f25274a..6a2528780e 100644
--- a/lib/wx/test/wx_basic_SUITE.erl
+++ b/lib/wx/test/wx_basic_SUITE.erl
@@ -192,7 +192,9 @@ wx_api(Config) ->
?m(ok,wxButton:setLabel(Temp, "Testing")),
?m(ok,wxButton:destroy(Temp)),
?m({'EXIT',_},wxButton:getLabel(Temp)),
-
+ ?m(ok,wxButton:setLabel(Temp, "Testing")), %% Should generate an error report
+ ?m({'EXIT',_},wxButton:getLabel(Temp)),
+
case wx_test_lib:user_available(Config) of
true ->
%% Hmm popup doesn't return until mouse is pressed.
diff --git a/lib/wx/test/wx_class_SUITE.erl b/lib/wx/test/wx_class_SUITE.erl
index 6944a78360..0a3c4659bf 100644
--- a/lib/wx/test/wx_class_SUITE.erl
+++ b/lib/wx/test/wx_class_SUITE.erl
@@ -646,8 +646,8 @@ modal(Config) ->
%% need to sleep so we know that the window is stuck in
%% the ShowModal event loop and not in an earlier event loop
%% wx2.8 invokes the event loop from more calls than wx-3
- receive {dialog, M1, 1} -> timer:sleep(1200), ets:insert(test_state, {M1, ready}) end,
- receive {dialog, M2, 2} -> timer:sleep(1200), ets:insert(test_state, {M2, ready}) end,
+ M1 = receive {dialog, W1, 1} -> timer:sleep(1200), ets:insert(test_state, {W1, ready}), W1 end,
+ M2 = receive {dialog, W2, 2} -> timer:sleep(1200), ets:insert(test_state, {W2, ready}), W2 end,
receive done -> ok end,
receive {dialog_done, M2, 2} -> M2 end,
diff --git a/lib/xmerl/src/xmerl_eventp.erl b/lib/xmerl/src/xmerl_eventp.erl
index 598d26261d..8d7ea25e24 100644
--- a/lib/xmerl/src/xmerl_eventp.erl
+++ b/lib/xmerl/src/xmerl_eventp.erl
@@ -25,6 +25,90 @@
%% Each contain more elaborate settings of xmerl_scan that makes usage of
%% the customization functions.
%%
+%% @type xmlElement() = #xmlElement{}.
+%%
+%% @type option_list(). <p>Options allow to customize the behaviour of the
+%% scanner.
+%% See also <a href="xmerl_examples.html">tutorial</a> on customization
+%% functions.
+%% </p>
+%% <p>
+%% Possible options are:
+%% </p>
+%% <dl>
+%% <dt><code>{acc_fun, Fun}</code></dt>
+%% <dd>Call back function to accumulate contents of entity.</dd>
+%% <dt><code>{continuation_fun, Fun} |
+%% {continuation_fun, Fun, ContinuationState}</code></dt>
+%% <dd>Call back function to decide what to do if the scanner runs into EOF
+%% before the document is complete.</dd>
+%% <dt><code>{event_fun, Fun} |
+%% {event_fun, Fun, EventState}</code></dt>
+%% <dd>Call back function to handle scanner events.</dd>
+%% <dt><code>{fetch_fun, Fun} |
+%% {fetch_fun, Fun, FetchState}</code></dt>
+%% <dd>Call back function to fetch an external resource.</dd>
+%% <dt><code>{hook_fun, Fun} |
+%% {hook_fun, Fun, HookState}</code></dt>
+%% <dd>Call back function to process the document entities once
+%% identified.</dd>
+%% <dt><code>{close_fun, Fun}</code></dt>
+%% <dd>Called when document has been completely parsed.</dd>
+%% <dt><code>{rules, ReadFun, WriteFun, RulesState} |
+%% {rules, Rules}</code></dt>
+%% <dd>Handles storing of scanner information when parsing.</dd>
+%% <dt><code>{user_state, UserState}</code></dt>
+%% <dd>Global state variable accessible from all customization functions</dd>
+%%
+%% <dt><code>{fetch_path, PathList}</code></dt>
+%% <dd>PathList is a list of
+%% directories to search when fetching files. If the file in question
+%% is not in the fetch_path, the URI will be used as a file
+%% name.</dd>
+%% <dt><code>{space, Flag}</code></dt>
+%% <dd>'preserve' (default) to preserve spaces, 'normalize' to
+%% accumulate consecutive whitespace and replace it with one space.</dd>
+%% <dt><code>{line, Line}</code></dt>
+%% <dd>To specify starting line for scanning in document which contains
+%% fragments of XML.</dd>
+%% <dt><code>{namespace_conformant, Flag}</code></dt>
+%% <dd>Controls whether to behave as a namespace conformant XML parser,
+%% 'false' (default) to not otherwise 'true'.</dd>
+%% <dt><code>{validation, Flag}</code></dt>
+%% <dd>Controls whether to process as a validating XML parser:
+%% 'off' (default) no validation, or validation 'dtd' by DTD or 'schema'
+%% by XML Schema. 'false' and 'true' options are obsolete
+%% (i.e. they may be removed in a future release), if used 'false'
+%% equals 'off' and 'true' equals 'dtd'.</dd>
+%% <dt><code>{schemaLocation, [{Namespace,Link}|...]}</code></dt>
+%% <dd>Tells explicitly which XML Schema documents to use to validate
+%% the XML document. Used together with the
+%% <code>{validation,schema}</code> option.</dd>
+%% <dt><code>{quiet, Flag}</code></dt>
+%% <dd>Set to 'true' if xmerl should behave quietly and not output any
+%% information to standard output (default 'false').</dd>
+%% <dt><code>{doctype_DTD, DTD}</code></dt>
+%% <dd>Allows to specify DTD name when it isn't available in the XML
+%% document. This option has effect only together with
+%% <code>{validation,'dtd'</code> option.</dd>
+%% <dt><code>{xmlbase, Dir}</code></dt>
+%% <dd>XML Base directory. If using string/1 default is current directory.
+%% If using file/1 default is directory of given file.</dd>
+%% <dt><code>{encoding, Enc}</code></dt>
+%% <dd>Set default character set used (default UTF-8).
+%% This character set is used only if not explicitly given by the XML
+%% declaration. </dd>
+%% <dt><code>{document, Flag}</code></dt>
+%% <dd>Set to 'true' if xmerl should return a complete XML document
+%% as an xmlDocument record (default 'false').</dd>
+%% <dt><code>{comments, Flag}</code></dt>
+%% <dd>Set to 'false' if xmerl should skip comments otherwise they will
+%% be returned as xmlComment records (default 'true').</dd>
+%% <dt><code>{default_attrs, Flag}</code></dt>
+%% <dd>Set to 'true' if xmerl should add to elements missing attributes
+%% with a defined default value (default 'false').</dd>
+%% </dl>
+%%
-module(xmerl_eventp).
-vsn('0.19').
-date('03-09-17').
@@ -199,7 +283,7 @@ cont2(F, Exception, Sofar, Fd, Fname, T, S) ->
find_good_split(list_to_binary([Sofar,Bin]),
F,Exception,Fd,Fname,T,S);
eof ->
- file:close(Fd),
+ ok = file:close(Fd),
NewS = xmerl_scan:cont_state([{Fname, eof}|T], S),
F(binary_to_list(Sofar), NewS);
Error ->
@@ -319,7 +403,7 @@ close(S) ->
[{_Fname, eof}|T] ->
xmerl_scan:cont_state(T, S);
[{_Sofar, _Fname, Fd}|T] ->
- file:close(Fd),
+ ok = file:close(Fd),
xmerl_scan:cont_state(T, S)
end.
diff --git a/lib/xmerl/src/xmerl_sax_parser.erl b/lib/xmerl/src/xmerl_sax_parser.erl
index 196baacda7..318a0cf7f4 100644
--- a/lib/xmerl/src/xmerl_sax_parser.erl
+++ b/lib/xmerl/src/xmerl_sax_parser.erl
@@ -32,17 +32,13 @@
%%----------------------------------------------------------------------
%% External exports
%%----------------------------------------------------------------------
--export([
- file/2,
- stream/2
- ]).
+-export([file/2,
+ stream/2]).
%%----------------------------------------------------------------------
%% Internal exports
%%----------------------------------------------------------------------
--export([
- default_continuation_cb/1
- ]).
+-export([default_continuation_cb/1]).
%%----------------------------------------------------------------------
%% Macros
@@ -81,7 +77,7 @@ file(Name,Options) ->
{current_location, CL},
{entity, File}
|Options]),
- file:close(FD),
+ ok = file:close(FD),
Res
end.
diff --git a/lib/xmerl/src/xmerl_sax_parser_base.erlsrc b/lib/xmerl/src/xmerl_sax_parser_base.erlsrc
index 200770a7cf..4d75805b9b 100644
--- a/lib/xmerl/src/xmerl_sax_parser_base.erlsrc
+++ b/lib/xmerl/src/xmerl_sax_parser_base.erlsrc
@@ -29,12 +29,10 @@
%%----------------------------------------------------------------------
%% External exports
%%----------------------------------------------------------------------
--export([
- parse/2,
+-export([parse/2,
parse_dtd/2,
is_name_char/1,
- is_name_start/1
- ]).
+ is_name_start/1]).
%%----------------------------------------------------------------------
%% Internal exports
@@ -1681,7 +1679,7 @@ handle_external_entity({file, FileToOpen}, State) ->
current_location=filename:dirname(FileToOpen),
entity=filename:basename(FileToOpen),
input_type=file}),
- file:close(FD),
+ ok = file:close(FD),
EntityState#xmerl_sax_parser_state.event_state
end;
handle_external_entity({http, Url}, State) ->
@@ -1700,8 +1698,8 @@ handle_external_entity({http, Url}, State) ->
current_location=filename:dirname(Url),
entity=filename:basename(Url),
input_type=file}),
- file:close(FD),
- file:delete(TmpFile),
+ ok = file:close(FD),
+ ok = file:delete(TmpFile),
EntityState#xmerl_sax_parser_state.event_state
end
catch
@@ -3471,17 +3469,17 @@ http_get_file(Host, Port, Key) ->
receive_msg(Socket, FD, true, SendTimeout)
catch
throw:{error, Error} ->
- file:close(FD),
- file:delete(Filename),
+ ok = file:close(FD),
+ ok = file:delete(Filename),
throw({error, Error})
end;
{error, _Reason} ->
- file:close(FD),
- file:delete(Filename),
+ ok = file:close(FD),
+ ok = file:delete(Filename),
throw({error, lists:flatten(io_lib:format("Couldn't fetch http://~s:~p/~s",
[Host, Port, Key]))})
end,
- file:close(FD),
+ ok = file:close(FD),
Filename.
%%----------------------------------------------------------------------
@@ -3498,11 +3496,11 @@ receive_msg(Socket, FD, WaitForHeader, Timeout) ->
{tcp_closed, Socket} ->
ok;
{tcp, Socket, Response} when WaitForHeader == false ->
- file:write(FD, Response),
+ ok = file:write(FD, Response),
receive_msg(Socket, FD, WaitForHeader, Timeout);
{tcp, Socket, Response} ->
MsgBody = remove_header(Response),
- file:write(FD, MsgBody),
+ ok = file:write(FD, MsgBody),
receive_msg(Socket, FD, false, Timeout);
{tcp_error, Socket, _Reason} ->
gen_tcp:close(Socket),
diff --git a/lib/xmerl/src/xmerl_scan.erl b/lib/xmerl/src/xmerl_scan.erl
index ea487a0900..5e0459ec21 100644
--- a/lib/xmerl/src/xmerl_scan.erl
+++ b/lib/xmerl/src/xmerl_scan.erl
@@ -111,13 +111,16 @@
%% <dd>Set to 'true' if xmerl should add to elements missing attributes
%% with a defined default value (default 'false').</dd>
%% </dl>
+%% @type xmlElement() = #xmlElement{}.
+%% The record definition is found in xmerl.hrl.
+%% @type xmlDocument() = #xmlDocument{}.
+%% The record definition is found in xmerl.hrl.
%% @type document() = xmlElement() | xmlDocument(). <p>
%% The document returned by <tt>xmerl_scan:string/[1,2]</tt> and
%% <tt>xmerl_scan:file/[1,2]</tt>. The type of the returned record depends on
%% the value of the document option passed to the function.
%% </p>
-
-module(xmerl_scan).
-vsn('0.20').
-date('03-09-16').
@@ -605,7 +608,7 @@ scan_document(Str0, S=#xmerl_scanner{event_fun = Event,
schema ->
case schemaLocations(Res, S5) of
{ok, Schemas} ->
- cleanup(S5),
+ _ = cleanup(S5),
%%?dbg("Schemas: ~p~nRes: ~p~ninhertih_options(S): ~p~n",
%% [Schemas,Res,inherit_options(S5)]),
XSDRes = xmerl_xsd:process_validate(Schemas, Res,
diff --git a/lib/xmerl/src/xmerl_xpath.erl b/lib/xmerl/src/xmerl_xpath.erl
index bbebda1030..6146feba49 100644
--- a/lib/xmerl/src/xmerl_xpath.erl
+++ b/lib/xmerl/src/xmerl_xpath.erl
@@ -43,13 +43,27 @@
%% </pre>
%%
%% @type nodeEntity() =
-%% xmlElement()
-%% | xmlAttribute()
-%% | xmlText()
-%% | xmlPI()
-%% | xmlComment()
-%% | xmlNsNode()
-%% | xmlDocument()
+%% #xmlElement{}
+%% | #xmlAttribute{}
+%% | #xmlText{}
+%% | #xmlPI{}
+%% | #xmlComment{}
+%% | #xmlNsNode{}
+%% | #xmlDocument{}
+%%
+%% @type docNodes() = #xmlElement{}
+%% | #xmlAttribute{}
+%% | #xmlText{}
+%% | #xmlPI{}
+%% | #xmlComment{}
+%% | #xmlNsNode{}
+%%
+%% @type docEntity() = #xmlDocument{} | [docNodes()]
+%%
+%% @type xPathString() = string()
+%%
+%% @type parentList() = [{atom(), integer()}]
+%%
%% @type option_list(). <p>Options allows to customize the behaviour of the
%% XPath scanner.
%% </p>
@@ -115,7 +129,7 @@ string(Str, Doc, Options) ->
%% Parents = parentList()
%% Doc = nodeEntity()
%% Options = option_list()
-%% Scalar = xmlObj
+%% Scalar = #xmlObj{}
%% @doc Extracts the nodes from the parsed XML tree according to XPath.
%% xmlObj is a record with fields type and value,
%% where type is boolean | number | string
diff --git a/lib/xmerl/src/xmerl_xpath_scan.erl b/lib/xmerl/src/xmerl_xpath_scan.erl
index 5ef5dce737..9032a01eca 100644
--- a/lib/xmerl/src/xmerl_xpath_scan.erl
+++ b/lib/xmerl/src/xmerl_xpath_scan.erl
@@ -286,13 +286,13 @@ strip_ws(T) ->
T.
-special_token('@') -> true;
+%% special_token('@') -> true;
special_token('::') -> true;
special_token(',') -> true;
special_token('(') -> true;
special_token('[') -> true;
special_token('/') -> true;
-special_token('//') -> true;
+%% special_token('//') -> true;
special_token('|') -> true;
special_token('+') -> true;
special_token('-') -> true;
@@ -306,5 +306,4 @@ special_token('and') -> true;
special_token('or') -> true;
special_token('mod') -> true;
special_token('div') -> true;
-special_token(_) ->
- false.
+special_token(_) -> false.
diff --git a/lib/xmerl/src/xmerl_xs.erl b/lib/xmerl/src/xmerl_xs.erl
index 3e9f6622b8..1ce76cfa41 100644
--- a/lib/xmerl/src/xmerl_xs.erl
+++ b/lib/xmerl/src/xmerl_xs.erl
@@ -45,7 +45,6 @@
% XSLT package which is written i C++.
% See also the <a href="xmerl_xs_examples.html">Tutorial</a>.
% </p>
-
-module(xmerl_xs).
-export([xslapply/2, value_of/1, select/2, built_in_rules/2 ]).
@@ -71,15 +70,13 @@
%% xslapply(fun template/1, E),
%% "&lt;/h1>"];
%% </pre>
-
xslapply(Fun, EList) when is_list(EList) ->
- lists:map( Fun, EList);
+ lists:map(Fun, EList);
xslapply(Fun, E = #xmlElement{})->
lists:map( Fun, E#xmlElement.content).
-
%% @spec value_of(E) -> List
-%% E = unknown()
+%% E = term()
%%
%% @doc Concatenates all text nodes within the tree.
%%
diff --git a/lib/xmerl/src/xmerl_xsd.erl b/lib/xmerl/src/xmerl_xsd.erl
index 412ef59e41..a89b3159ec 100644
--- a/lib/xmerl/src/xmerl_xsd.erl
+++ b/lib/xmerl/src/xmerl_xsd.erl
@@ -49,6 +49,7 @@
%% <dd>It is possible by this option to provide a state with process
%% information from an earlier validation.</dd>
%% </dl>
+%% @type filename() = string()
%% @end
%%%-------------------------------------------------------------------
-module(xmerl_xsd).
@@ -64,12 +65,10 @@
%%----------------------------------------------------------------------
%% External exports
%%----------------------------------------------------------------------
--export([
- validate/2,validate/3,process_validate/2,process_validate/3,
+-export([validate/2,validate/3,process_validate/2,process_validate/3,
process_schema/1,process_schema/2,
process_schemas/1,process_schemas/2,
- state2file/1,state2file/2,file2state/1,format_error/1
- ]).
+ state2file/1,state2file/2,file2state/1,format_error/1]).
%%----------------------------------------------------------------------
%% Internal exports
@@ -140,7 +139,7 @@ state2file(S=#xsd_state{schema_name=SN}) ->
%% @spec state2file(State,FileName) -> ok | {error,Reason}
%% State = global_state()
-%% FileName = filename()
+%% FileName = string()
%% @doc Saves the schema state with all information of the processed
%% schema in a file. You can provide the file name for the saved
%% state. FileName is saved with the <code>.xss</code> extension
@@ -155,7 +154,7 @@ state2file(S,FileName) when is_record(S,xsd_state) ->
%% @spec file2state(FileName) -> {ok,State} | {error,Reason}
%% State = global_state()
-%% FileName = filename()
+%% FileName = string()
%% @doc Reads the schema state with all information of the processed
%% schema from a file created with <code>state2file/[1,2]</code>. The
%% format of this file is internal. The state can then be used
@@ -204,7 +203,7 @@ xmerl_xsd_vsn_check(S=#xsd_state{vsn=MD5_VSN}) ->
process_validate(Schema,Xml) ->
process_validate(Schema,Xml,[]).
%% @spec process_validate(Schema,Element,Options) -> Result
-%% Schema = filename()
+%% Schema = string()
%% Element = XmlElement
%% Options = option_list()
%% Result = {ValidXmlElement,State} | {error,Reason}
@@ -284,7 +283,7 @@ validate3(_,_,S) ->
process_schema(Schema) ->
process_schema(Schema,[]).
%% @spec process_schema(Schema,Options) -> Result
-%% Schema = filename()
+%% Schema = string()
%% Result = {ok,State} | {error,Reason}
%% State = global_state()
%% Reason = [ErrorReason] | ErrorReason
@@ -326,7 +325,7 @@ process_schema2({SE,_},State,_Schema) ->
process_schemas(Schemas) ->
process_schemas(Schemas,[]).
%% @spec process_schemas(Schemas,Options) -> Result
-%% Schemas = [{NameSpace,filename()}|Schemas] | []
+%% Schemas = [{NameSpace,string()}|Schemas] | []
%% Result = {ok,State} | {error,Reason}
%% Reason = [ErrorReason] | ErrorReason
%% Options = option_list()
@@ -550,7 +549,7 @@ element_content({attribute,S=#xsd_state{scope=Scope}},Att,Env) ->
{AttRef,add_ref(S,AttRef)};
Name ->
{AttrType,S2} = attribute_type(Att,[Name|Env],S),
- S3 = check_cm(attribute,allowed_content(attribute,Env),AttrType,S2),
+ S3 = check_cm(attribute,allowed_content(attribute,Env),AttrType,S2),
{Attr,S4} = attribute_properties(Att#xmlElement.attributes,
#schema_attribute{type=AttrType},S3),
Object = {attribute,
@@ -568,7 +567,7 @@ element_content({element,S},El,Env) ->
%% 3.3.3 bullet 2.2
S3 = element_forbidden_properties(El,S2),
S4 = element_forbidden_content(El#xmlElement.content,S3),
- ElRef =
+ ElRef =
{element,
{get_QName(Ref,El#xmlElement.namespace,reset_scope(S)),
Occ}},
@@ -813,7 +812,6 @@ element_content({restriction,S},R,Env) ->
%% base (resolved by base_type/1) or the type defined in content.
{CM,S2} = type(R#xmlElement.content,S,[restriction|Env]),
S3 = check_cm(restriction,allowed_content(restriction,Env),CM,S2),
-
{BaseTypeName,CM2,S4} = restriction_base_type(R,CM,S3), %% a QName
%% S5 = add_circularity_mark(BaseTypeName,S4),
BaseTypeType = base_type_type(Env),
@@ -1178,7 +1176,7 @@ rename_redef_group(Name={LN,Scope,NS},S) ->
NewName = {LN,['#redefine'|Scope],NS},
case resolve({group,NewName},S) of
{SG=#schema_group{name=Name},_} ->
- save_object({group,SG#schema_group{name=NewName}},S),
+ _ = save_object({group,SG#schema_group{name=NewName}},S),
NewName;
_ ->
failed
@@ -1735,20 +1733,20 @@ allowed_content(SorC,_Parents) when SorC==sequence;SorC==choice ->
{choice,{1,1}},{sequence,{1,1}},
{any,{1,1}}],
occurance={0,unbounded}}]};
-allowed_content(E,_Parents)
- when E==any;E==selector;E==field;E==notation;E==include;E==import;
- E==anyAttribute ->
- {annotation,{0,1}};
-allowed_content(UKK,_Parents) when UKK==unique;UKK==key;UKK==keyref->
- #chain{content=
- [{annotation,{0,1}},
- #chain{content=
- [{selector,{1,1}},{selector,{1,unbounded}}]}]};
-allowed_content(annotation,_Parents) ->
- #alternative{content=[{appinfo,{1,1}},{documentation,{1,1}}],
- occurance={0,unbounded}};
-allowed_content(E,_Parents) when E==appinfo;E==documentation ->
- {any,{0,unbounded}};
+%% allowed_content(E,_Parents)
+%% when E==any;E==selector;E==field;E==notation;E==include;E==import;
+%% E==anyAttribute ->
+%% {annotation,{0,1}};
+%% allowed_content(UKK,_Parents) when UKK==unique;UKK==key;UKK==keyref->
+%% #chain{content=
+%% [{annotation,{0,1}},
+%% #chain{content=
+%% [{selector,{1,1}},{selector,{1,unbounded}}]}]};
+%% allowed_content(annotation,_Parents) ->
+%% #alternative{content=[{appinfo,{1,1}},{documentation,{1,1}}],
+%% occurance={0,unbounded}};
+%% allowed_content(E,_Parents) when E==appinfo;E==documentation ->
+%% {any,{0,unbounded}};
allowed_content(simpleType,_Parents) ->
#chain{content=
[{annotation,{0,1}},
@@ -1768,22 +1766,22 @@ allowed_content(restriction,Parents) ->
end;
allowed_content(LU,_Parent) when LU==list;LU==union ->
#chain{content=[{annotation,{0,1}},{simpleType,{0,1}}]};
-allowed_content(schema,_) ->
- #chain{content=
- [#alternative{content=
- [{include,{1,1}},{import,{1,1}},
- {redefine,{1,1}},{annotation,{1,1}}],
- occurance={0,1}},
- #chain{content=
- [#alternative{content=
- [#alternative{content=
- [{simpleType,{1,1}},{complexType,{1,1}},
- {group,{1,1}},{attributeGroup,{1,1}}]},
- {element,{1,1}},
- {attribute,{1,1}},
- {notation,{1,1}}]},
- {annotation,{0,unbounded}}],
- occurance={0,unbounded}}]};
+%% allowed_content(schema,_) ->
+%% #chain{content=
+%% [#alternative{content=
+%% [{include,{1,1}},{import,{1,1}},
+%% {redefine,{1,1}},{annotation,{1,1}}],
+%% occurance={0,1}},
+%% #chain{content=
+%% [#alternative{content=
+%% [#alternative{content=
+%% [{simpleType,{1,1}},{complexType,{1,1}},
+%% {group,{1,1}},{attributeGroup,{1,1}}]},
+%% {element,{1,1}},
+%% {attribute,{1,1}},
+%% {notation,{1,1}}]},
+%% {annotation,{0,unbounded}}],
+%% occurance={0,unbounded}}]};
allowed_content(redefine,_Parents) ->
#alternative{content=
[{annotation,{1,1}},
@@ -1803,31 +1801,31 @@ allowed_content(extension,Parents) ->
allowed_content2(extension,simpleContent);
_ ->
allowed_content2(extension,complexContent)
- end;
-allowed_content(minExclusive,_Parents) ->
- [];
-allowed_content(minInclusive,_Parents) ->
- [];
-allowed_content(maxExclusive,_Parents) ->
- [];
-allowed_content(maxInclusive,_Parents) ->
- [];
-allowed_content(totalDigits,_Parents) ->
- [];
-allowed_content(fractionDigits,_Parents) ->
- [];
-allowed_content(length,_Parents) ->
- [];
-allowed_content(minLength,_Parents) ->
- [];
-allowed_content(maxLength,_Parents) ->
- [];
-allowed_content(enumeration,_Parents) ->
- [];
-allowed_content(whiteSpace,_Parents) ->
- [];
-allowed_content(pattern,_Parents) ->
- [].
+ end.
+%% allowed_content(minExclusive,_Parents) ->
+%% [];
+%% allowed_content(minInclusive,_Parents) ->
+%% [];
+%% allowed_content(maxExclusive,_Parents) ->
+%% [];
+%% allowed_content(maxInclusive,_Parents) ->
+%% [];
+%% allowed_content(totalDigits,_Parents) ->
+%% [];
+%% allowed_content(fractionDigits,_Parents) ->
+%% [];
+%% allowed_content(length,_Parents) ->
+%% [];
+%% allowed_content(minLength,_Parents) ->
+%% [];
+%% allowed_content(maxLength,_Parents) ->
+%% [];
+%% allowed_content(enumeration,_Parents) ->
+%% [];
+%% allowed_content(whiteSpace,_Parents) ->
+%% [];
+%% allowed_content(pattern,_Parents) ->
+%% [].
@@ -1905,9 +1903,9 @@ set_occurance(Ch = #chain{},Occ) ->
set_occurance(Alt = #alternative{},Occ) ->
Alt#alternative{occurance=Occ};
set_occurance({Name,_},Occ) when is_atom(Name) ->
- {Name,Occ};
-set_occurance(CM,_) ->
- CM.
+ {Name,Occ}.
+%% set_occurance(CM,_) ->
+%% CM.
process_external_schema_once(E,Namespace,S) when is_record(E,xmlElement) ->
@@ -3436,7 +3434,7 @@ check_keys([Key=#id_constraint{selector={selector,SelectorPath},
{L,S1} when length(L)==length(TargetNodeSet) ->
%% Part1: 3.11.4.4.2.1
S2 = key_sequence_uniqueness(L,XMLEl,S1),
- save_key(Key#id_constraint{key_sequence=L},S2),
+ _ = save_key(Key#id_constraint{key_sequence=L},S2),
S2;
{Err,S1} ->
acc_errs(S1,{error_path(XMLEl,XMLEl#xmlElement.name),?MODULE,
@@ -4014,7 +4012,7 @@ merge_derived_types(XSDType,InstType,Blocks,Mode,S) ->
{error,S2} ->
{InstType,S2};
{MergedType,S2} ->
- save_merged_type(MergedType,S2),
+ _ = save_merged_type(MergedType,S2),
{MergedType,S2}
end.
@@ -4970,7 +4968,7 @@ save_schema_element(CM,S=#xsd_state{elementFormDefault = EFD,
undefined -> [];
_ -> TN
end,
- save_in_table({schema,TN2},Schema2,S),
+ _ = save_in_table({schema,TN2},Schema2,S),
save_to_file(S).
%% other_global_elements(S,ElementList) ->
@@ -5006,13 +5004,13 @@ save_to_file(S=#xsd_state{tab2file=TF}) ->
{ok,IO}=file:open(filename:rootname(S#xsd_state.schema_name)++".tab",
[write]),
io:format(IO,"~p~n",[catch ets:tab2list(S#xsd_state.table)]),
- file:close(IO);
+ ok = file:close(IO);
false ->
ok;
IOFile ->
{ok,IO}=file:open(IOFile,[write]),
io:format(IO,"~p~n",[catch ets:tab2list(S#xsd_state.table)]),
- file:close(IO)
+ ok = file:close(IO)
end.
save_merged_type(Type=#schema_simple_type{},S) ->
@@ -5034,25 +5032,25 @@ save_idc(unique,IDConstr,S) ->
save_unique(IDConstr,S).
save_key(Key,S) ->
- save_object({key,Key},S),
+ _ = save_object({key,Key},S),
S.
save_keyref(KeyRef=#id_constraint{category=keyref},S) ->
S1 = add_keyref(KeyRef,S),
- save_object({keyref,KeyRef},S1),
+ _ = save_object({keyref,KeyRef},S1),
S1;
save_keyref(_,S) ->
S.
save_unique(Unique,S) ->
- save_object({unique,Unique},S),
+ _ = save_object({unique,Unique},S),
S.
save_substitutionGroup([],S) ->
S;
save_substitutionGroup([{Head,Members}|SGs],S) ->
%% save {head,[members]}
- save_in_table({substitutionGroup,Head},Members,S),
+ _ = save_in_table({substitutionGroup,Head},Members,S),
%% save {member,head}, an element can only be a member in one
%% substitutionGroup
lists:foreach(fun(X)->save_in_table({substitutionGroup_member,X},Head,S) end,Members),
@@ -5429,7 +5427,7 @@ add_key_once(Key,N,El,L) ->
%% {filename:join([[io_lib:format("/~w(~w)",[X,Y])||{X,Y}<-Parents],Type]),Pos}.
%% @spec format_error(Errors) -> Result
-%% Errors = error_tuple() | [error_tuple()]
+%% Errors = tuple() | [tuple()]
%% Result = string() | [string()]
%% @doc Formats error descriptions to human readable strings.
format_error(L) when is_list(L) ->
diff --git a/lib/xmerl/src/xmerl_xsd_type.erl b/lib/xmerl/src/xmerl_xsd_type.erl
index 14a673b0c0..3ee5961522 100644
--- a/lib/xmerl/src/xmerl_xsd_type.erl
+++ b/lib/xmerl/src/xmerl_xsd_type.erl
@@ -229,11 +229,13 @@ check_float(Value) ->
%% {Mantissa,Exponent}=lists:splitwith(Pred,Value),
%% SkipEe = fun([]) -> [];(L) -> tl(L) end,
case string:tokens(Value,"eE") of
- [Mantissa,Exponent] ->
- {ok,_} = check_decimal(Mantissa),
- {ok,_} = check_integer(Exponent);
- [Mantissa] ->
- check_decimal(Mantissa)
+ [Mantissa,Exponent] ->
+ {ok,_} = check_decimal(Mantissa),
+ {ok,_} = check_integer(Exponent),
+ ok;
+ [Mantissa] ->
+ {ok,_} = check_decimal(Mantissa),
+ ok
end,
{ok,Value}.
%% case {check_decimal(Mantissa),
@@ -367,7 +369,7 @@ check_dateTime("+"++_DateTime) ->
check_dateTime(DateTime) ->
[Date,Time] = string:tokens(DateTime,"T"),
[Y,M,D] = string:tokens(Date,"-"),
- check_year(Y),
+ {ok,_} = check_year(Y),
{ok,_} = check_positive_integer(M),
{ok,_} = check_positive_integer(D),
check_time(Time).
diff --git a/lib/xmerl/test/xmerl_SUITE.erl b/lib/xmerl/test/xmerl_SUITE.erl
index 413f5c82db..e97b8c6a4b 100644
--- a/lib/xmerl/test/xmerl_SUITE.erl
+++ b/lib/xmerl/test/xmerl_SUITE.erl
@@ -63,276 +63,238 @@ groups() ->
{app_test, [], [{xmerl_app_test, all}]},
{appup_test, [], [{xmerl_appup_test, all}]}].
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
+suite() ->
+ [{timetrap,{minutes,10}}].
%%----------------------------------------------------------------------
%% Initializations
%%----------------------------------------------------------------------
-init_per_suite(doc) ->
- ["Starts the test suite"];
+
init_per_suite(Config) ->
- Dog=test_server:timetrap({minutes,10}),
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line ok=erl_tar:extract("cpd.tar.gz",[compressed]),
- ?line ok=erl_tar:extract("misc.tar.gz",[compressed]),
- ?line ok = change_mode(["cpd", "misc"]),
- ?line file:set_cwd(filename:join(?config(data_dir,Config),xpath)),
+ file:set_cwd(datadir(Config)),
+ ok=erl_tar:extract("cpd.tar.gz",[compressed]),
+ ok=erl_tar:extract("misc.tar.gz",[compressed]),
+ ok = change_mode(["cpd", "misc"]),
+ file:set_cwd(filename:join(datadir(Config),xpath)),
TestServerIncludeDir=filename:join(filename:dirname(code:priv_dir(test_server)), "include"),
- ?line {ok, xpath_lib} = compile:file(xpath_lib, [{i, TestServerIncludeDir}]),
- ?line {ok, xpath_text} = compile:file(xpath_text, [{i, TestServerIncludeDir}]),
- ?line {ok, xpath_abbrev} = compile:file(xpath_abbrev, [{i, TestServerIncludeDir}]),
- [{watchdog, Dog}|Config].
+ {ok, xpath_lib} = compile:file(xpath_lib, [{i, TestServerIncludeDir}]),
+ {ok, xpath_text} = compile:file(xpath_text, [{i, TestServerIncludeDir}]),
+ {ok, xpath_abbrev} = compile:file(xpath_abbrev, [{i, TestServerIncludeDir}]),
+ Config.
-ifndef(dont_rm_test_dirs).
-end_per_suite(doc) ->
- ["Stops the test suite"];
end_per_suite(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line ok=rm_files(["cpd", "misc"]),
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- lists:keydelete(watchdog,1,Config).
+ file:set_cwd(datadir(Config)),
+ ok = rm_files(["cpd", "misc"]),
+ ok.
-else.
-end_per_suite(doc) ->
- ["Stops the test suite"];
-end_per_suite(Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- lists:keydelete(watchdog,1,Config).
+end_per_suite(_Config) ->
+ ok.
-endif.
%% initialization before each testcase
init_per_testcase(_TestCase,Config) ->
io:format("Config:~n~p",[Config]),
- ?line {ok, _} = file:read_file_info(filename:join([?config(priv_dir,Config)])),
- ?line code:add_patha(?config(priv_dir,Config)),
- Dog=test_server:timetrap({minutes,10}),
- [{watchdog, Dog}|Config].
+ {ok, _} = file:read_file_info(filename:join([privdir(Config)])),
+ code:add_patha(privdir(Config)),
+ Config.
%% clean up after each testcase
-end_per_testcase(_Func,Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Func,_Config) ->
ok.
%%----------------------------------------------------------------------
%% Test cases
%%----------------------------------------------------------------------
-cpd_invalid1(suite) -> [];
cpd_invalid1(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line case catch xmerl_scan:file(filename:join([?config(data_dir,Config), cpd,"cpd_test.xml"]),[]) of
- {'EXIT',{fatal,Reason}} ->
- case Reason of
- {expected_markup,_Path,28,32} -> ok;
- _ -> {comment,"parsing changed behaviour"}
- end
- end.
-
-cpd_invalid1_index(suite) -> [];
+ file:set_cwd(datadir(Config)),
+ case catch xmerl_scan:file(datadir_join(Config,[cpd,"cpd_test.xml"]),[]) of
+ {'EXIT',{fatal,Reason}} ->
+ case Reason of
+ {expected_markup,_Path,28,32} -> ok;
+ _ -> {comment,"parsing changed behaviour"}
+ end
+ end.
+
cpd_invalid1_index(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line case catch xmerl_scan:file(filename:join([?config(data_dir,Config), cpd,"cpd_index.xml"]),[]) of
- {'EXIT',{fatal,Reason}} ->
- case Reason of
- {{error,{whitespace_was_expected}},_Path,1,19} -> ok;
- _ -> {comment,"parsing changed behaviour"}
- end
- end.
-
-cpd_invalid2_index(suite) -> [];
+ file:set_cwd(datadir(Config)),
+ case catch xmerl_scan:file(datadir_join(Config,[cpd,"cpd_index.xml"]),[]) of
+ {'EXIT',{fatal,Reason}} ->
+ case Reason of
+ {{error,{whitespace_was_expected}},_Path,1,19} -> ok;
+ _ -> {comment,"parsing changed behaviour"}
+ end
+ end.
+
cpd_invalid2_index(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line case catch xmerl_scan:file(filename:join([?config(data_dir,Config), cpd,"cpd_index2.xml"]),[]) of
- {'EXIT',{fatal,Reason}} ->
- case Reason of
- {{invalid_target_name,_Ver},_Path,2,3} ->ok;
- _ -> {comment,"parsing changed behaviour"}
- end
- end.
-
-cpd_invalid_index3(suite) -> [];
+ file:set_cwd(datadir(Config)),
+ case catch xmerl_scan:file(datadir_join(Config,[cpd,"cpd_index2.xml"]),[]) of
+ {'EXIT',{fatal,Reason}} ->
+ case Reason of
+ {{invalid_target_name,_Ver},_Path,2,3} ->ok;
+ _ -> {comment,"parsing changed behaviour"}
+ end
+ end.
+
cpd_invalid_index3(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line case catch xmerl_scan:file(filename:join([?config(data_dir,Config), cpd,"cpd_index3.xml"]),[]) of
- {'EXIT',{fatal,Reason}} ->
- case Reason of
- {expected_markup,_Path,1,2} -> ok;
- _ -> {comment,"parsing changed behaviour"}
- end
- end.
-
-cpd_invalid_is_layer(suite) -> [];
+ file:set_cwd(datadir(Config)),
+ case catch xmerl_scan:file(datadir_join(Config,[cpd,"cpd_index3.xml"]),[]) of
+ {'EXIT',{fatal,Reason}} ->
+ case Reason of
+ {expected_markup,_Path,1,2} -> ok;
+ _ -> {comment,"parsing changed behaviour"}
+ end
+ end.
+
cpd_invalid_is_layer(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line case catch xmerl_scan:file(filename:join([?config(data_dir,Config), cpd,"is_layer2.xml"]),[]) of
- {'EXIT',{fatal,_Reason}} -> ok
- end.
+ file:set_cwd(datadir(Config)),
+ case catch xmerl_scan:file(datadir_join(Config,[cpd,"is_layer2.xml"]),[]) of
+ {'EXIT',{fatal,_Reason}} -> ok
+ end.
-cpd_expl_provided_DTD(suite) -> [];
cpd_expl_provided_DTD(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {#xmlElement{},[]} = xmerl_scan:file(filename:join([?config(data_dir,Config), cpd,"file_wo_DTD.xml"]),[{validation,true},{doctype_DTD,"separate_DTD.dtd"}]).
+ file:set_cwd(datadir(Config)),
+ {#xmlElement{},[]} = xmerl_scan:file(datadir_join(Config,[cpd,"file_wo_DTD.xml"]),
+ [{validation,true},{doctype_DTD,"separate_DTD.dtd"}]).
%%----------------------------------------------------------------------
-xpath_text1(suite) -> [];
xpath_text1(Config) ->
- ?line file:set_cwd(filename:join(?config(data_dir,Config),xpath)),
- ?line ok = xpath_text:one().
+ file:set_cwd(filename:join(datadir(Config),xpath)),
+ ok = xpath_text:one().
-xpath_main(suite) -> [];
xpath_main(Config) ->
- ?line file:set_cwd(filename:join(?config(data_dir,Config),xpath)),
- ?line ok = xpath_lib:test().
+ file:set_cwd(filename:join(datadir(Config),xpath)),
+ ok = xpath_lib:test().
-xpath_abbreviated_syntax(suite) -> [];
xpath_abbreviated_syntax(Config) ->
- ?line file:set_cwd(filename:join(?config(data_dir,Config),xpath)),
- ?line ok = xpath_abbrev:test().
+ file:set_cwd(filename:join(datadir(Config),xpath)),
+ ok = xpath_abbrev:test().
-xpath_functions(suite) -> [];
xpath_functions(Config) ->
- ?line file:set_cwd(filename:join(?config(data_dir,Config),xpath)),
- ?line ok = xpath_abbrev:functions().
+ file:set_cwd(filename:join(datadir(Config),xpath)),
+ ok = xpath_abbrev:functions().
-xpath_namespaces(suite) -> [];
xpath_namespaces(Config) ->
- ?line file:set_cwd(filename:join(?config(data_dir,Config),xpath)),
- ?line ok = xpath_abbrev:namespaces().
+ file:set_cwd(filename:join(datadir(Config),xpath)),
+ ok = xpath_abbrev:namespaces().
%%----------------------------------------------------------------------
-latin1_alias(suite) -> [];
latin1_alias(Config) ->
-% ?line file:set_cwd(filename:join(?config(data_dir,Config),misc)),
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {_Elements,[]}=
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- misc,"motorcycles.xml"]),
- [{validation,true},
- {encoding,'iso-8859-1'}]).
-
-syntax_bug1(suite) -> [];
+% file:set_cwd(filename:join(datadir(Config),misc)),
+ file:set_cwd(datadir(Config)),
+ {_Elements,[]} = xmerl_scan:file(datadir_join(Config,[misc,"motorcycles.xml"]),
+ [{validation,true},
+ {encoding,'iso-8859-1'}]).
+
syntax_bug1(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {fatal,{"expected one of: ?>, standalone, encoding",
- {file,'misc/syntax_bug1.xml'},{line,1},{col,21}}} =
- case catch xmerl_scan:file('misc/syntax_bug1.xml') of
- {'EXIT',Reason} ->
- Reason;
- Err -> Err
- end.
-
-syntax_bug2(suite) -> [];
+ file:set_cwd(datadir(Config)),
+ {fatal,{"expected one of: ?>, standalone, encoding",
+ {file,'misc/syntax_bug1.xml'},{line,1},{col,21}}
+ } = case catch xmerl_scan:file('misc/syntax_bug1.xml') of
+ {'EXIT',Reason} ->
+ Reason;
+ Err -> Err
+ end.
+
syntax_bug2(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {fatal,{"expected one of: ?>, whitespace_character",
- {file,'misc/syntax_bug2.xml'},{line,1},{col,20}}} =
- case catch xmerl_scan:file('misc/syntax_bug2.xml') of
- {'EXIT',Reason} ->
- Reason;
- Err -> Err
- end.
-
-syntax_bug3(suite) -> [];
+ file:set_cwd(datadir(Config)),
+ {fatal,{"expected one of: ?>, whitespace_character",
+ {file,'misc/syntax_bug2.xml'},{line,1},{col,20}}
+ } = case catch xmerl_scan:file('misc/syntax_bug2.xml') of
+ {'EXIT',Reason} ->
+ Reason;
+ Err -> Err
+ end.
+
syntax_bug3(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {fatal,{{endtag_does_not_match,{was,obj,should_have_been,int}},
- {file,'misc/syntax_bug3.xml'},{line,4},{col,3}}} =
- case catch xmerl_scan:file('misc/syntax_bug3.xml') of
- {'EXIT',Reason} ->
- Reason;
- Err -> Err
- end.
-
-pe_ref1(suite) -> [];
+ file:set_cwd(datadir(Config)),
+ {fatal,{{endtag_does_not_match,{was,obj,should_have_been,int}},
+ {file,'misc/syntax_bug3.xml'},{line,4},{col,3}}
+ } = case catch xmerl_scan:file('misc/syntax_bug3.xml') of
+ {'EXIT',Reason} ->
+ Reason;
+ Err -> Err
+ end.
+
pe_ref1(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {#xmlElement{},[]} = xmerl_scan:file(filename:join([?config(data_dir,Config), misc,"PE_ref1.xml"]),[{validation,true}]).
+ file:set_cwd(datadir(Config)),
+ {#xmlElement{},[]} = xmerl_scan:file(datadir_join(Config,[misc,"PE_ref1.xml"]),[{validation,true}]).
-copyright(suite) -> [];
copyright(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {#xmlElement{},[]} = xmerl_scan:file(filename:join([?config(data_dir,Config), misc,"cprght.xml"]),[{validation,true}]).
+ file:set_cwd(datadir(Config)),
+ {#xmlElement{},[]} = xmerl_scan:file(datadir_join(Config,[misc,"cprght.xml"]),[{validation,true}]).
-testXSEIF(suite) -> [];
testXSEIF(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {#xmlElement{},[]} = xmerl_scan:file(filename:join([?config(data_dir,Config), misc,"ReplBoard_1_1543-CNA11313Uen.xml"]),[{validation,true}]).
+ file:set_cwd(datadir(Config)),
+ {#xmlElement{},[]} = xmerl_scan:file(datadir_join(Config,[misc,"ReplBoard_1_1543-CNA11313Uen.xml"]),[{validation,true}]).
-export_simple1(suite) -> [];
-export_simple1(Config) ->
+export_simple1(_Config) ->
Simple = simple(),
Res = xmerl:export_simple(Simple,xmerl_xml,[{title, "Doc Title"}]),
- ?line "<?xml version="++_ = lists:flatten(Res),
+ "<?xml version="++_ = lists:flatten(Res),
%% Use of fun in simple content OTP-6679
Simple2 = simple2(),
Res2 = xmerl:export_simple(Simple2,xmerl_xml,[{title,"Doc Title"}]),
- ?line true = (Res2 =:= Res),
+ true = (Res2 =:= Res),
ok.
-export(suite) -> [];
export(Config) ->
- DataDir = ?config(data_dir,Config),
+ DataDir = datadir(Config),
Prolog = ["<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<!DOCTYPE motorcycles SYSTEM \"motorcycles.dtd\">\n"],
TestFile = filename:join([DataDir,"misc","motorcycles.xml"]),
- ?line {E,_} = xmerl_scan:file(TestFile),
- ?line Exported = xmerl:export([E],xmerl_xml,[{prolog,Prolog}]),
+ {E,_} = xmerl_scan:file(TestFile),
+ Exported = xmerl:export([E],xmerl_xml,[{prolog,Prolog}]),
B = list_to_binary(Exported++"\n"),
- ?line {ok, B} = file:read_file(TestFile),
+ {ok, B} = file:read_file(TestFile),
ok.
%%----------------------------------------------------------------------
-sax_parse_and_export(suite) -> [];
sax_parse_and_export(Config) ->
- ?line ok = sax_parse_export_xml_big(Config),
- ?line ok = sax_parse_export_xml_small(Config).
+ ok = sax_parse_export_xml_big(Config),
+ ok = sax_parse_export_xml_small(Config).
%%----------------------------------------------------------------------
sax_parse_export_xml_big(Config) ->
- DataDir = ?config(data_dir,Config),
- OutDir = ?config(priv_dir,Config),
+ DataDir = datadir(Config),
+ OutDir = privdir(Config),
io:format("DataDir: ~p~n,OutDir:~p~n",[DataDir,OutDir]),
CMOMxml = filename:join([DataDir,"eventp","CMOM.xml"]),
- ?line {Ex,[]} = xmerl_eventp:file_sax(CMOMxml, xmerl_xml,[],[]),
+ {Ex,[]} = xmerl_eventp:file_sax(CMOMxml, xmerl_xml,[],[]),
OutFile = filename:join([OutDir,"cmom"]),
file:delete(OutFile),
StubFile = filename:join([DataDir,"eventp","CelloMOM.stub"]),
- ?line {ok,Bin} = file:read_file(StubFile),
- ?line {ok,IO} = file:open(OutFile,[write,append]),
- ?line ok = file:write(IO,Bin),
- ?line ok = io:format(IO,"~s~n~n",[lists:flatten(Ex)]),
+ {ok,Bin} = file:read_file(StubFile),
+ {ok,IO} = file:open(OutFile,[write,append]),
+ ok = file:write(IO,Bin),
+ ok = io:format(IO,"~s~n~n",[lists:flatten(Ex)]),
Cmd = lists:flatten(io_lib:format("cmp ~s ~s",[OutFile,CMOMxml])),
- ?line [] = os:cmd(Cmd),
+ [] = os:cmd(Cmd),
ok.
sax_parse_export_xml_small(Config) ->
- DataDir = ?config(data_dir,Config),
- OutDir = ?config(priv_dir,Config),
+ DataDir = datadir(Config),
+ OutDir = privdir(Config),
Wurfl_xml = filename:join([DataDir,"eventp","wurfl.xml"]),
- ?line {Ex,[]} = xmerl_eventp:file_sax(Wurfl_xml, xmerl_xml,[],[]),
+ {Ex,[]} = xmerl_eventp:file_sax(Wurfl_xml, xmerl_xml,[],[]),
OutFile = filename:join([OutDir,"wrfl"]),
file:delete(OutFile),
StubFile = filename:join([DataDir,"eventp","wurfl.stub"]),
- ?line {ok,Bin} = file:read_file(StubFile),
- ?line {ok,IO} = file:open(OutFile,[write,append]),
- ?line ok = file:write(IO,Bin),
- ?line ok = io:format(IO,"~s~n",[lists:flatten(Ex)]),
+ {ok,Bin} = file:read_file(StubFile),
+ {ok,IO} = file:open(OutFile,[write,append]),
+ ok = file:write(IO,Bin),
+ ok = io:format(IO,"~s~n",[lists:flatten(Ex)]),
Cmd = lists:flatten(io_lib:format("cmp ~s ~s",[OutFile,Wurfl_xml])),
- ?line [] = os:cmd(Cmd),
+ [] = os:cmd(Cmd),
ok.
@@ -435,31 +397,28 @@ generate_heading_col(N) ->
%% A Kleene Closure child in a sequence consumed all following
%% childs. This problem has been fixed.
%%
-ticket_5998(suite) -> [];
ticket_5998(Config) ->
- DataDir = ?config(data_dir,Config),
+ DataDir = datadir(Config),
%% First fix is tested by case syntax_bug2.
- ?line case catch xmerl_scan:file(filename:join([DataDir,misc,
- "ticket_5998_2.xml"])) of
- {'EXIT',{fatal,Reason1}} ->
- case Reason1 of
- {{endtag_does_not_match,
- {was,obj,should_have_been,int}},
- _,_,_} -> ok;
- _ -> {comment,"parsing changed behaviour"}
- end
- end,
-
- ?line case catch xmerl_scan:file(filename:join([DataDir,misc,
- "ticket_5998_3.xml"])) of
- {'EXIT',{fatal,Reason2}} ->
- case Reason2 of
- {"expected one of: ?>, standalone, encoding",
- _,_,_} -> ok;
- _ -> {comment,"parsing changed behaviour"}
- end
- end.
+ case catch xmerl_scan:file(filename:join([DataDir,misc,"ticket_5998_2.xml"])) of
+ {'EXIT',{fatal,Reason1}} ->
+ case Reason1 of
+ {{endtag_does_not_match,
+ {was,obj,should_have_been,int}},
+ _,_,_} -> ok;
+ _ -> {comment,"parsing changed behaviour"}
+ end
+ end,
+
+ case catch xmerl_scan:file(filename:join([DataDir,misc,"ticket_5998_3.xml"])) of
+ {'EXIT',{fatal,Reason2}} ->
+ case Reason2 of
+ {"expected one of: ?>, standalone, encoding",
+ _,_,_} -> ok;
+ _ -> {comment,"parsing changed behaviour"}
+ end
+ end.
%%
@@ -468,32 +427,29 @@ ticket_5998(Config) ->
%% A Kleene Closure child in a sequence consumed all following
%% childs. This problem has been fixed.
%%
-ticket_7211(suite) -> [];
ticket_7211(Config) ->
- DataDir = ?config(data_dir,Config),
- ?line {E,[]} =
- xmerl_scan:file(filename:join([DataDir,misc,"notes2.xml"]),
- [{fetch_path,[filename:join([DataDir,misc,erlang_docs_dtd])]},
- {validation,dtd}]),
+ DataDir = datadir(Config),
+ {E,[]} = xmerl_scan:file(filename:join([DataDir,misc,"notes2.xml"]),
+ [{fetch_path,[filename:join([DataDir,misc,erlang_docs_dtd])]},
+ {validation,dtd}]),
- ?line ok = case E of
- Rec when is_record(Rec,xmlElement) ->
- ok;
- _ ->
- E
- end,
+ ok = case E of
+ Rec when is_record(Rec,xmlElement) ->
+ ok;
+ _ ->
+ E
+ end,
- ?line {E2,[]} =
- xmerl_scan:file(filename:join([DataDir,misc,"XS.xml"]),
- [{fetch_path,[filename:join([DataDir,misc,erlang_docs_dtd])]},
- {validation,dtd}]),
+ {E2,[]} = xmerl_scan:file(filename:join([DataDir,misc,"XS.xml"]),
+ [{fetch_path,[filename:join([DataDir,misc,erlang_docs_dtd])]},
+ {validation,dtd}]),
- ?line ok = case E2 of
- Rec2 when is_record(Rec2,xmlElement) ->
- ok;
- _ ->
- E2
- end.
+ ok = case E2 of
+ Rec2 when is_record(Rec2,xmlElement) ->
+ ok;
+ _ ->
+ E2
+ end.
%%
%% ticket_7214
@@ -503,21 +459,19 @@ ticket_7211(Config) ->
%% all content, followed by other child elements caused a
%% failure. This is now corrected.
%%
-ticket_7214(suite) -> [];
ticket_7214(Config) ->
- DataDir = ?config(data_dir,Config),
+ DataDir = datadir(Config),
- ?line {E,[]} =
- xmerl_scan:file(filename:join([DataDir,misc,'block_tags.html']),
- [{validation,dtd},
- {fetch_path,[filename:join([DataDir,misc,erlang_docs_dtd])]}]),
+ {E,[]} = xmerl_scan:file(filename:join([DataDir,misc,'block_tags.html']),
+ [{validation,dtd},
+ {fetch_path,[filename:join([DataDir,misc,erlang_docs_dtd])]}]),
- ?line ok = case E of
- Rec when is_record(Rec,xmlElement) ->
- ok;
- _ ->
- E
- end.
+ ok = case E of
+ Rec when is_record(Rec,xmlElement) ->
+ ok;
+ _ ->
+ E
+ end.
%%
%% ticket_7430
@@ -525,81 +479,67 @@ ticket_7214(Config) ->
%% Problem with contents of numeric character references followed by
%% UTF-8 characters..
%%
-ticket_7430(suite) -> [];
ticket_7430(Config) ->
- DataDir = ?config(data_dir,Config),
-
- ?line {E,[]} =
- xmerl_scan:string("<a>\303\251&#xD;\303\251</a>",
- [{encoding, 'utf-8'}]),
-
- ?line ok = case E of
- {xmlElement,a,a,[],
- {xmlNamespace,[],[]},
- [],1,[],
- [{xmlText,[{a,1}],1,[],"é",text},
- {xmlText,[{a,1}],2,[],"\né",text}],
- [],_,undeclared} ->
- ok;
- _ ->
- E
- end.
-
-ticket_6873(suite) -> [];
+ DataDir = datadir(Config),
+
+ {E,[]} = xmerl_scan:string("<a>\303\251&#xD;\303\251</a>",[{encoding,'utf-8'}]),
+
+ ok = case E of
+ {xmlElement,a,a,[],
+ {xmlNamespace,[],[]},
+ [],1,[],
+ [{xmlText,[{a,1}],1,[],"é",text},
+ {xmlText,[{a,1}],2,[],"\né",text}],
+ [],_,undeclared} ->
+ ok;
+ _ ->
+ E
+ end.
+
ticket_6873(Config) ->
- ?line file:set_cwd(filename:join(?config(data_dir,Config),xpath)),
- ?line ok = xpath_abbrev:ticket_6873(),
- ?line ok = xpath_lib:ticket_6873().
+ file:set_cwd(filename:join(datadir(Config),xpath)),
+ ok = xpath_abbrev:ticket_6873(),
+ ok = xpath_lib:ticket_6873().
-ticket_7496(suite) -> [];
ticket_7496(Config) ->
- ?line file:set_cwd(filename:join(?config(data_dir,Config),xpath)),
- ?line ok = xpath_abbrev:ticket_7496().
+ file:set_cwd(filename:join(datadir(Config),xpath)),
+ ok = xpath_abbrev:ticket_7496().
-ticket_8156(suite) -> [];
ticket_8156(Config) ->
- ?line {ftp,{[],[]},"testmachine1",21,"/w.erl"} = xmerl_uri:parse("ftp://testmachine1/w.erl"),
- ?line {ftp,{"user",[]},"testmachine1",21,"/w.erl"} = xmerl_uri:parse("ftp://user@testmachine1/w.erl"),
- ?line {ftp,{"user","hello"},"testmachine1",21,"/w.erl"} =
- xmerl_uri:parse("ftp://user:hello@testmachine1/w.erl"),
- ?line {ftp,{[],[]},"testmachine1",3000,"/w.erl"} = xmerl_uri:parse("ftp://testmachine1:3000/w.erl"),
- ?line {ftp,{"user","hello"},"testmachine1",3000,"/w.erl"} =
- xmerl_uri:parse("ftp://user:hello@testmachine1:3000/w.erl"),
+ {ftp,{[],[]},"testmachine1",21,"/w.erl"} = xmerl_uri:parse("ftp://testmachine1/w.erl"),
+ {ftp,{"user",[]},"testmachine1",21,"/w.erl"} = xmerl_uri:parse("ftp://user@testmachine1/w.erl"),
+ {ftp,{"user","hello"},"testmachine1",21,"/w.erl"} = xmerl_uri:parse("ftp://user:hello@testmachine1/w.erl"),
+ {ftp,{[],[]},"testmachine1",3000,"/w.erl"} = xmerl_uri:parse("ftp://testmachine1:3000/w.erl"),
+ {ftp,{"user","hello"},"testmachine1",3000,"/w.erl"} = xmerl_uri:parse("ftp://user:hello@testmachine1:3000/w.erl"),
ok.
-ticket_8697(suite) -> [];
-ticket_8697(doc) ->
- ["Test that xmerl_scan can decode unicode entities properly"];
+%% Test that xmerl_scan can decode unicode entities properly
ticket_8697(Config) ->
- ?line {UTF8Output, []} = xmerl_scan:string("<?xml version=\"1\" ?>\n<text>" ++ [229, 145, 156] ++ "</text>"),
- ?line #xmlElement{content = [#xmlText{value = UTF8Text}]} = UTF8Output,
- ?line [16#545C] = UTF8Text,
- ?line {DecEntityOutput, []} = xmerl_scan:string("<?xml version=\"1\" ?>\n<text>&#21596;</text>"),
- ?line #xmlElement{content = [#xmlText{value = DecEntityText}]} = DecEntityOutput,
- ?line [21596] = DecEntityText,
- ?line {HexEntityOutput, []} = xmerl_scan:string("<?xml version=\"1\" ?>\n<text>&#x545C;</text>"),
- ?line #xmlElement{content = [#xmlText{value = HexEntityText}]} = HexEntityOutput,
- ?line [16#545C] = HexEntityText,
+ {UTF8Output, []} = xmerl_scan:string("<?xml version=\"1\" ?>\n<text>" ++ [229, 145, 156] ++ "</text>"),
+ #xmlElement{content = [#xmlText{value = UTF8Text}]} = UTF8Output,
+ [16#545C] = UTF8Text,
+ {DecEntityOutput, []} = xmerl_scan:string("<?xml version=\"1\" ?>\n<text>&#21596;</text>"),
+ #xmlElement{content = [#xmlText{value = DecEntityText}]} = DecEntityOutput,
+ [21596] = DecEntityText,
+ {HexEntityOutput, []} = xmerl_scan:string("<?xml version=\"1\" ?>\n<text>&#x545C;</text>"),
+ #xmlElement{content = [#xmlText{value = HexEntityText}]} = HexEntityOutput,
+ [16#545C] = HexEntityText,
ok.
-ticket_9411(suite) -> [];
-ticket_9411(doc) ->
- ["Test that xmerl_scan handles attribute that contains for example &quot"];
+%% Test that xmerl_scan handles attribute that contains for example &quot
ticket_9411(Config) ->
- DataDir = ?config(data_dir,Config),
+ DataDir = datadir(Config),
- ?line {ok, Schema} = xmerl_xsd:process_schema(filename:join([DataDir,"misc/ticket_9411.xsd"])),
- ?line {ok, Bin} = file:read_file(filename:join([DataDir,"misc/ticket_9411.xml"])),
- ?line Xml = erlang:binary_to_list(Bin),
- ?line {E, _} = xmerl_scan:string(Xml),
- ?line {E, _} = xmerl_xsd:validate(E, Schema).
+ {ok, Schema} = xmerl_xsd:process_schema(filename:join([DataDir,"misc/ticket_9411.xsd"])),
+ {ok, Bin} = file:read_file(filename:join([DataDir,"misc/ticket_9411.xml"])),
+ Xml = erlang:binary_to_list(Bin),
+ {E, _} = xmerl_scan:string(Xml),
+ {E, _} = xmerl_xsd:validate(E, Schema).
-ticket_9457(suite) -> [];
-ticket_9457(doc) ->
- ["Test that xmerl_scan handles continuation correct when current input runs out at the end of an attribute value"];
+%% Test that xmerl_scan handles continuation correct when current input runs out at the end of an attribute value
ticket_9457(Config) ->
Opts = [{continuation_fun, fun ticket_9457_cont/3, start}, {space, normalize}],
- ?line {E, _} = xmerl_scan:string([], Opts).
+ {E, _} = xmerl_scan:string([], Opts).
ticket_9457_cont(Continue, Exception, GlobalState) ->
case xmerl_scan:cont_state(GlobalState) of
@@ -616,34 +556,23 @@ ticket_9457_cont(Continue, Exception, GlobalState) ->
end.
-ticket_9664_schema(suite) -> [];
-ticket_9664_schema(doc) ->
- ["Test that comments are handled correct whith"];
+%% Test that comments are handled correct whith
ticket_9664_schema(Config) ->
+ {E, _} = xmerl_scan:file(datadir_join(Config,[misc,"ticket_9664_schema.xml"]),[]),
+ {ok, S} = xmerl_xsd:process_schema(datadir_join(Config,[misc,"motorcycles.xsd"])),
+ {E1, _} = xmerl_xsd:validate(E, S),
- ?line {E, _} = xmerl_scan:file(filename:join([?config(data_dir, Config), misc,
- "ticket_9664_schema.xml"]),[]),
- ?line {ok, S} = xmerl_xsd:process_schema(filename:join([?config(data_dir, Config), misc,
- "motorcycles.xsd"])),
- ?line {E1, _} = xmerl_xsd:validate(E, S),
+ {E1,_} = xmerl_xsd:process_validate(datadir_join(Config,[misc,"motorcycles.xsd"]),E,[]),
- ?line {E1,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config), misc,
- "motorcycles.xsd"]),E,[]),
-
- ?line {E1,_} = xmerl_scan:file(filename:join([?config(data_dir,Config), misc,
- "ticket_9664_schema.xml"]),
- [{schemaLocation, [{"mc", "motorcycles.xsd"}]},
- {validation, schema}]),
+ {E1,_} = xmerl_scan:file(datadir_join(Config,[misc,"ticket_9664_schema.xml"]),
+ [{schemaLocation, [{"mc", "motorcycles.xsd"}]},
+ {validation, schema}]),
ok.
-ticket_9664_dtd(suite) -> [];
-ticket_9664_dtd(doc) ->
- ["Test that comments are handled correct whith"];
+%% Test that comments are handled correct whith
ticket_9664_dtd(Config) ->
- ?line {E, _} = xmerl_scan:file(filename:join([?config(data_dir, Config), misc,
- "ticket_9664_dtd.xml"]),[]),
- ?line {E, _} = xmerl_scan:file(filename:join([?config(data_dir, Config), misc,
- "ticket_9664_dtd.xml"]),[{validation, true}]),
+ {E, _} = xmerl_scan:file(datadir_join(Config,[misc,"ticket_9664_dtd.xml"]),[]),
+ {E, _} = xmerl_scan:file(datadir_join(Config,[misc,"ticket_9664_dtd.xml"]),[{validation, true}]),
ok.
@@ -653,11 +582,11 @@ ticket_9664_dtd(Config) ->
%% Dir is a directory
rm_f_(Dir) ->
- ?line {ok,CWD} = file:get_cwd(),
- ?line {ok,FileList} = file:list_dir(Dir),
- ?line file:set_cwd(filename:join([CWD,Dir])),
+ {ok,CWD} = file:get_cwd(),
+ {ok,FileList} = file:list_dir(Dir),
+ file:set_cwd(filename:join([CWD,Dir])),
rm_files(FileList),
- ?line file:set_cwd(CWD),
+ file:set_cwd(CWD),
? line ok = file:del_dir(Dir).
rm_files([])->
@@ -667,27 +596,27 @@ rm_files([F|Fs]) ->
true ->
rm_f_(F);
_ ->
- ?line ok = file:delete(F)
+ ok = file:delete(F)
end,
rm_files(Fs).
change_mode(Files) ->
change_mode3(Files).
change_mode2(Dir)->
- ?line {ok,CWD} = file:get_cwd(),
- ?line {ok,FileList} = file:list_dir(Dir),
- ?line file:set_cwd(filename:join([CWD,Dir])),
+ {ok,CWD} = file:get_cwd(),
+ {ok,FileList} = file:list_dir(Dir),
+ file:set_cwd(filename:join([CWD,Dir])),
change_mode3(FileList),
- ?line file:set_cwd(CWD).
+ file:set_cwd(CWD).
change_mode3([]) ->
ok;
change_mode3([F|Fs]) ->
case filelib:is_dir(F) of
- true ->
- chmod(F),
- change_mode2(F);
- _ ->
- chmod(F)
+ true ->
+ chmod(F),
+ change_mode2(F);
+ _ ->
+ chmod(F)
end,
change_mode3(Fs).
@@ -699,4 +628,11 @@ chmod(F) ->
_ ->
ok
end.
-
+
+privdir(Config) ->
+ proplists:get_value(priv_dir, Config).
+datadir(Config) ->
+ proplists:get_value(data_dir, Config).
+
+datadir_join(Config,Files) ->
+ filename:join([datadir(Config)|Files]).
diff --git a/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_abbrev.erl b/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_abbrev.erl
index 2e026d7476..aaa80097cd 100644
--- a/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_abbrev.erl
+++ b/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_abbrev.erl
@@ -14,109 +14,109 @@
-include_lib("xmerl/include/xmerl.hrl").
test() ->
- ?line {E,_} = xmerl_scan:file("xpath.xml"),
+ {E,_} = xmerl_scan:file("xpath.xml"),
- ?line Res1 = xmerl_xpath:string("blipp",E),
- ?line ok = check_node_set("blipp",Res1),
- ?line Res2 = xmerl_xpath:string("*",E),
- ?line ok = check_node_set("*",Res2),
- ?line Res3 = xmerl_xpath:string("blipp/blupp/plopp/text()",E),
- ?line ok = check_node_set("blipp/blupp/plopp/text()",Res3),
- ?line Res4 = xmerl_xpath:string("blipp/blupp/@att2",E),
- ?line ok = check_node_set("blipp/blupp/@att2",Res4),
- ?line Res5 = xmerl_xpath:string("blipp/@*",E),
- ?line ok = check_node_set("blipp/@*",Res5),
- ?line Res6 = xmerl_xpath:string("blipp[2]",E),
- ?line ok = check_node_set("blipp[2]",Res6),
- ?line Res7 = xmerl_xpath:string("blipp[last()]",E),
- ?line ok = check_node_set("blipp[last()]",Res7),
- ?line Res8 = xmerl_xpath:string("*/blupp",E),
- ?line ok = check_node_set("*/blupp",Res8),
- ?line Res9 = xmerl_xpath:string("/myBS_model/blipp[3]/blupp[2]",E),
- ?line ok = check_node_set("/myBS_model/blipp[3]/blupp[2]",Res9),
- ?line Res10 = xmerl_xpath:string("blipp//plopp",E),
- ?line ok = check_node_set("blipp//plopp",Res10),
- ?line Res11 = xmerl_xpath:string("//plopp",E),
- ?line ok = check_node_set("//plopp",Res11),
- ?line Res12 = xmerl_xpath:string("//blupp/plopp",E),
- ?line ok = check_node_set("//blupp/plopp",Res12),
- ?line Res13 = xmerl_xpath:string(".",E),
- ?line ok = check_node_set(".",Res13),
- ?line Res14 = xmerl_xpath:string(".//blipp2",E),
- ?line ok = check_node_set(".//blipp2",Res14),
- ?line Res15 = xmerl_xpath:string(".//blipp2/blupp/plopp/..",E),
- ?line ok = check_node_set(".//blipp2/blupp/plopp/..",Res15),
- ?line Res16 = xmerl_xpath:string(".//blipp[2]/blupp/plopp/../@att2",E),
- ?line ok = check_node_set(".//blipp[2]/blupp/plopp/../@att2",Res16),
- ?line Res17 = xmerl_xpath:string(".//blipp/blupp/plopp[2]/../@att2",E),
- ?line ok = check_node_set(".//blipp/blupp/plopp[2]/../@att2",Res17),
- ?line Res18 = xmerl_xpath:string("blipp[@id='name2']",E),
- ?line ok = check_node_set("blipp[@id='name2']",Res18),
- ?line Res19 = xmerl_xpath:string("blipp[@id='name2'][3]",E),
- ?line ok = check_node_set("blipp[@id='name2'][3]",Res19),
- ?line Res20 = xmerl_xpath:string("//blupp[plopp=\"here are some more text\"]",E),
- ?line ok = check_node_set("//blupp[plopp=\"here are some more text\"]",Res20),
- ?line Res21 = xmerl_xpath:string("//blupp[plopp]",E),
- ?line ok = check_node_set("//blupp[plopp]",Res21),
- ?line Res22 = xmerl_xpath:string("blipp[@id and @test]",E),
- ?line ok = check_node_set("blipp[@id and @test]",Res22).
+ Res1 = xmerl_xpath:string("blipp",E),
+ ok = check_node_set("blipp",Res1),
+ Res2 = xmerl_xpath:string("*",E),
+ ok = check_node_set("*",Res2),
+ Res3 = xmerl_xpath:string("blipp/blupp/plopp/text()",E),
+ ok = check_node_set("blipp/blupp/plopp/text()",Res3),
+ Res4 = xmerl_xpath:string("blipp/blupp/@att2",E),
+ ok = check_node_set("blipp/blupp/@att2",Res4),
+ Res5 = xmerl_xpath:string("blipp/@*",E),
+ ok = check_node_set("blipp/@*",Res5),
+ Res6 = xmerl_xpath:string("blipp[2]",E),
+ ok = check_node_set("blipp[2]",Res6),
+ Res7 = xmerl_xpath:string("blipp[last()]",E),
+ ok = check_node_set("blipp[last()]",Res7),
+ Res8 = xmerl_xpath:string("*/blupp",E),
+ ok = check_node_set("*/blupp",Res8),
+ Res9 = xmerl_xpath:string("/myBS_model/blipp[3]/blupp[2]",E),
+ ok = check_node_set("/myBS_model/blipp[3]/blupp[2]",Res9),
+ Res10 = xmerl_xpath:string("blipp//plopp",E),
+ ok = check_node_set("blipp//plopp",Res10),
+ Res11 = xmerl_xpath:string("//plopp",E),
+ ok = check_node_set("//plopp",Res11),
+ Res12 = xmerl_xpath:string("//blupp/plopp",E),
+ ok = check_node_set("//blupp/plopp",Res12),
+ Res13 = xmerl_xpath:string(".",E),
+ ok = check_node_set(".",Res13),
+ Res14 = xmerl_xpath:string(".//blipp2",E),
+ ok = check_node_set(".//blipp2",Res14),
+ Res15 = xmerl_xpath:string(".//blipp2/blupp/plopp/..",E),
+ ok = check_node_set(".//blipp2/blupp/plopp/..",Res15),
+ Res16 = xmerl_xpath:string(".//blipp[2]/blupp/plopp/../@att2",E),
+ ok = check_node_set(".//blipp[2]/blupp/plopp/../@att2",Res16),
+ Res17 = xmerl_xpath:string(".//blipp/blupp/plopp[2]/../@att2",E),
+ ok = check_node_set(".//blipp/blupp/plopp[2]/../@att2",Res17),
+ Res18 = xmerl_xpath:string("blipp[@id='name2']",E),
+ ok = check_node_set("blipp[@id='name2']",Res18),
+ Res19 = xmerl_xpath:string("blipp[@id='name2'][3]",E),
+ ok = check_node_set("blipp[@id='name2'][3]",Res19),
+ Res20 = xmerl_xpath:string("//blupp[plopp=\"here are some more text\"]",E),
+ ok = check_node_set("//blupp[plopp=\"here are some more text\"]",Res20),
+ Res21 = xmerl_xpath:string("//blupp[plopp]",E),
+ ok = check_node_set("//blupp[plopp]",Res21),
+ Res22 = xmerl_xpath:string("blipp[@id and @test]",E),
+ ok = check_node_set("blipp[@id and @test]",Res22).
check_node_set("blipp",[E1,E2,E3]) ->
- ?line ok = xml_element_name(E1,blipp),
- ?line ok = xml_element_name(E2,blipp),
- ?line ok = xml_element_name(E3,blipp),
+ ok = xml_element_name(E1,blipp),
+ ok = xml_element_name(E2,blipp),
+ ok = xml_element_name(E3,blipp),
ok;
check_node_set("*",[E1,E2,E3,E4]) ->
- ?line ok = xml_element_name(E1,blipp),
- ?line ok = xml_element_name(E2,blipp),
- ?line ok = xml_element_name(E3,blipp),
- ?line ok = xml_element_name(E4,blipp2),
+ ok = xml_element_name(E1,blipp),
+ ok = xml_element_name(E2,blipp),
+ ok = xml_element_name(E3,blipp),
+ ok = xml_element_name(E4,blipp2),
ok;
check_node_set("blipp/blupp/plopp/text()",[T1,T2]) ->
- ?line #xmlText{value="here are some text"} = T1,
- ?line #xmlText{value="here are some more text"} = T2,
+ #xmlText{value="here are some text"} = T1,
+ #xmlText{value="here are some more text"} = T2,
ok;
check_node_set("blipp/blupp/@att2",[A1,A2]) ->
- ?line #xmlAttribute{name=att2} = A1,
- ?line #xmlAttribute{name=att2} = A2,
+ #xmlAttribute{name=att2} = A1,
+ #xmlAttribute{name=att2} = A2,
ok;
check_node_set("blipp/@*",[A1,A2,A3,A4]) ->
- ?line #xmlAttribute{} = A1,
- ?line #xmlAttribute{} = A2,
- ?line #xmlAttribute{} = A3,
- ?line #xmlAttribute{} = A4,
+ #xmlAttribute{} = A1,
+ #xmlAttribute{} = A2,
+ #xmlAttribute{} = A3,
+ #xmlAttribute{} = A4,
ok;
check_node_set("blipp[2]",[E]) ->
- ?line #xmlElement{name=blipp,
- attributes=[#xmlAttribute{name=id,value="name2"}]} = E,
+ #xmlElement{name=blipp,
+ attributes=[#xmlAttribute{name=id,value="name2"}]} = E,
ok;
check_node_set("blipp[last()]",[E]) ->
- ?line #xmlElement{name=blipp,
- attributes=[#xmlAttribute{name=id,value="name3"}|_]} = E,
+ #xmlElement{name=blipp,
+ attributes=[#xmlAttribute{name=id,value="name3"}|_]} = E,
ok;
check_node_set("*/blupp",[E1,E2,E3,E4,E5,E6]) ->
- ?line ok = xml_element_name(E1,blupp),
- ?line ok = xml_element_name(E2,blupp),
- ?line ok = xml_element_name(E3,blupp),
- ?line ok = xml_element_name(E4,blupp),
- ?line ok = xml_element_name(E5,blupp),
- ?line ok = xml_element_name(E6,blupp),
+ ok = xml_element_name(E1,blupp),
+ ok = xml_element_name(E2,blupp),
+ ok = xml_element_name(E3,blupp),
+ ok = xml_element_name(E4,blupp),
+ ok = xml_element_name(E5,blupp),
+ ok = xml_element_name(E6,blupp),
ok;
check_node_set("/myBS_model/blipp[3]/blupp[2]",[E]) ->
- ?line #xmlElement{name=blupp,
- attributes=[#xmlAttribute{name=att,value="bluppc2"}]}=E,
+ #xmlElement{name=blupp,
+ attributes=[#xmlAttribute{name=att,value="bluppc2"}]}=E,
ok;
check_node_set("blipp//plopp",[#xmlElement{name=plopp},#xmlElement{name=plopp}]) ->
ok;
check_node_set("//plopp",[E1,E2,E3]) ->
- ?line ok = xml_element_name(E1,plopp),
- ?line ok = xml_element_name(E2,plopp),
- ?line ok = xml_element_name(E3,plopp),
+ ok = xml_element_name(E1,plopp),
+ ok = xml_element_name(E2,plopp),
+ ok = xml_element_name(E3,plopp),
ok;
check_node_set("//blupp/plopp",[E1,E2,E3]) ->
- ?line ok = xml_element_name(E1,plopp),
- ?line ok = xml_element_name(E2,plopp),
- ?line ok = xml_element_name(E3,plopp),
+ ok = xml_element_name(E1,plopp),
+ ok = xml_element_name(E2,plopp),
+ ok = xml_element_name(E3,plopp),
ok;
check_node_set(".",[#xmlElement{name=myBS_model}]) ->
ok;
@@ -129,169 +129,168 @@ check_node_set(".//blipp[2]/blupp/plopp/../@att2",[#xmlAttribute{name=att2,value
check_node_set(".//blipp/blupp/plopp[2]/../@att2",[#xmlAttribute{name=att2,value="bluppc"}]) ->
ok;
check_node_set("blipp[@id='name2']",[E]) ->
- ?line #xmlElement{name=blipp,
- attributes=[#xmlAttribute{name=id,value="name2"}]}=E,
+ #xmlElement{name=blipp,
+ attributes=[#xmlAttribute{name=id,value="name2"}]}=E,
ok;
check_node_set("blipp[@id='name2'][3]",[]) ->
ok;
check_node_set("//blupp[plopp=\"here are some more text\"]",[E]) ->
- ?line #xmlElement{name=blupp,
- content=[_T,#xmlElement{name=plopp,content=C}|_]} = E,
- ?line true = lists:keymember("here are some more text",#xmlText.value,C),
+ #xmlElement{name=blupp,
+ content=[_T,#xmlElement{name=plopp,content=C}|_]} = E,
+ true = lists:keymember("here are some more text",#xmlText.value,C),
ok;
check_node_set("//blupp[plopp]",[E1,E2,E3]) ->
- ?line #xmlElement{name=blupp,
- content=C1} = E1,
- ?line true = lists:keymember(plopp,#xmlElement.name,C1),
- ?line #xmlElement{name=blupp,
- content=C2} = E2,
- ?line true = lists:keymember(plopp,#xmlElement.name,C2),
- ?line #xmlElement{name=blupp,
- content=C3} = E3,
- ?line true = lists:keymember(plopp,#xmlElement.name,C3),
+ #xmlElement{name=blupp,
+ content=C1} = E1,
+ true = lists:keymember(plopp,#xmlElement.name,C1),
+ #xmlElement{name=blupp,
+ content=C2} = E2,
+ true = lists:keymember(plopp,#xmlElement.name,C2),
+ #xmlElement{name=blupp,
+ content=C3} = E3,
+ true = lists:keymember(plopp,#xmlElement.name,C3),
ok;
check_node_set("blipp[@id and @test]",[E]) ->
- ?line #xmlElement{name=blipp,
- attributes=Atts} = E,
- ?line true = lists:keymember(id,#xmlAttribute.name,Atts),
- ?line true = lists:keymember(test,#xmlAttribute.name,Atts),
+ #xmlElement{name=blipp,
+ attributes=Atts} = E,
+ true = lists:keymember(id,#xmlAttribute.name,Atts),
+ true = lists:keymember(test,#xmlAttribute.name,Atts),
ok;
check_node_set(Pattern,NodeSet) ->
io:format("Pattern: ~p~nNodeSet: ~p~n",[Pattern,NodeSet]),
error.
xml_element_name(E,N) ->
- ?line #xmlElement{name=N} = E,
+ #xmlElement{name=N} = E,
ok.
ticket_6873() ->
- ?line [#xmlElement{}] = xmerl_xpath:string("//foo[contains(@bar, 'oe')]",element(1,xmerl_scan:string("<foo bar=\"Joe\" />"))),
+ [#xmlElement{}] = xmerl_xpath:string("//foo[contains(@bar, 'oe')]",element(1,xmerl_scan:string("<foo bar=\"Joe\" />"))),
ok.
ticket_7496() ->
Test = fun(Doc, XPath, Exp) ->
- Result = xmerl_xpath:string(XPath, Doc),
- ?line Exp = [Name || #xmlElement{name = Name} <- Result],
- ok
- end,
- ?line {Doc1,_} = xmerl_scan:string("<a><b/> <c/> <d/> <e/></a>"),
- ?line ok = Test(Doc1, "//b/following::*", [c, d, e]),
- ?line ok = Test(Doc1,"//b/following::*[1]", [c]),
- ?line ok = Test(Doc1,"//b/following::*[position()=1]", [c]),
- ?line ok = Test(Doc1,"//b/following::*[3]", [e]),
- ?line ok = Test(Doc1,"//b/following::*[position()=3]", [e]),
- ?line ok = Test(Doc1,"//e/preceding::*", [b, c, d]),
- ?line ok = Test(Doc1,"//e/preceding::*[1]", [d]),
- ?line ok = Test(Doc1,"//e/preceding::*[position()=1]", [d]),
- ?line ok = Test(Doc1,"//e/preceding::*[3]", [b]),
- ?line ok = Test(Doc1,"//e/preceding::*[position()=3]", [b]),
- ?line ok = Test(Doc1,"//b/following::*[position() mod 2=0]", [d]),
- ?line ok = Test(Doc1,"//b/self::*", [b]),
+ Result = xmerl_xpath:string(XPath, Doc),
+ Exp = [Name || #xmlElement{name = Name} <- Result],
+ ok
+ end,
+ {Doc1,_} = xmerl_scan:string("<a><b/> <c/> <d/> <e/></a>"),
+ ok = Test(Doc1, "//b/following::*", [c, d, e]),
+ ok = Test(Doc1,"//b/following::*[1]", [c]),
+ ok = Test(Doc1,"//b/following::*[position()=1]", [c]),
+ ok = Test(Doc1,"//b/following::*[3]", [e]),
+ ok = Test(Doc1,"//b/following::*[position()=3]", [e]),
+ ok = Test(Doc1,"//e/preceding::*", [b, c, d]),
+ ok = Test(Doc1,"//e/preceding::*[1]", [d]),
+ ok = Test(Doc1,"//e/preceding::*[position()=1]", [d]),
+ ok = Test(Doc1,"//e/preceding::*[3]", [b]),
+ ok = Test(Doc1,"//e/preceding::*[position()=3]", [b]),
+ ok = Test(Doc1,"//b/following::*[position() mod 2=0]", [d]),
+ ok = Test(Doc1,"//b/self::*", [b]),
+
+ {Doc2,_} = xmerl_scan:string("<a><b/> <c><d/></c> <e/> <f><g/></f> <h/> <i><j/></i> <k/></a>"),
+ ok = Test(Doc2,"//g/preceding::*", [b, c, d, e]),
+ ok = Test(Doc2, "//g/following::*", [h, i, j, k]),
+ ok = Test(Doc2,"//g/ancestor::*", [a, f]),
+ ok = Test(Doc2,"//g/ancestor::*[1]", [f]),
+ ok = Test(Doc2,"//g/ancestor::*[2]", [a]),
+ ok = Test(Doc2,"//g/ancestor-or-self::*", [a, f, g]),
+ ok = Test(Doc2,"//g/ancestor-or-self::*[1]", [g]),
+ ok = Test(Doc2,"//g/ancestor-or-self::*[2]", [f]),
+ ok = Test(Doc2,"//g/ancestor-or-self::*[3]", [a]),
+ ok = Test(Doc2,"/descendant::*", [a, b, c, d, e, f, g, h, i, j, k]),
+ ok = Test(Doc2,"//f/preceding-sibling::*", [b, c, e]),
+ ok = Test(Doc2,"//f/following-sibling::*", [h, i, k]),
+ ok = Test(Doc2,"//f/self::*", [f]),
+ ok = Test(Doc2,"//f/ancestor::*", [a]),
+ ok = Test(Doc2,"//f/descendant::*", [g]),
+ ok = Test(Doc2,"//f/preceding::*", [b, c, d, e]),
+ ok = Test(Doc2,"//f/following::*", [h, i, j, k]),
+ ok = Test(Doc2,"//text()[1]/following-sibling::*", [c, e, f, h, i, k]),
+
+ {Doc3,_} = xmerl_scan:file("documentRoot.xml"),
+ ok = Test(Doc3,"//child",[child,child,child]),
+ ok = Test(Doc3,"//child[@name='beta']",[child]),
+ [{xmlAttribute,id,[],[],[],_,1,[],"2",false}] =
+ xmerl_xpath:string("/documentRoot/parent/child[@name='beta']/@id",Doc3),
+ ok = Test(Doc3,"/documentRoot/parent/child|/documentRoot/parent/pet",
+ [child,child,child,pet,pet]),
+ ok = Test(Doc3,"//*[starts-with(local-name(),'p')]",
+ [parent,pet,pet]).
- ?line {Doc2,_} = xmerl_scan:string("<a><b/> <c><d/></c> <e/> <f><g/></f> <h/> <i><j/></i> <k/></a>"),
- ?line ok = Test(Doc2,"//g/preceding::*", [b, c, d, e]),
- ?line ok = Test(Doc2, "//g/following::*", [h, i, j, k]),
- ?line ok = Test(Doc2,"//g/ancestor::*", [a, f]),
- ?line ok = Test(Doc2,"//g/ancestor::*[1]", [f]),
- ?line ok = Test(Doc2,"//g/ancestor::*[2]", [a]),
- ?line ok = Test(Doc2,"//g/ancestor-or-self::*", [a, f, g]),
- ?line ok = Test(Doc2,"//g/ancestor-or-self::*[1]", [g]),
- ?line ok = Test(Doc2,"//g/ancestor-or-self::*[2]", [f]),
- ?line ok = Test(Doc2,"//g/ancestor-or-self::*[3]", [a]),
- ?line ok = Test(Doc2,"/descendant::*", [a, b, c, d, e, f, g, h, i, j, k]),
- ?line ok = Test(Doc2,"//f/preceding-sibling::*", [b, c, e]),
- ?line ok = Test(Doc2,"//f/following-sibling::*", [h, i, k]),
- ?line ok = Test(Doc2,"//f/self::*", [f]),
- ?line ok = Test(Doc2,"//f/ancestor::*", [a]),
- ?line ok = Test(Doc2,"//f/descendant::*", [g]),
- ?line ok = Test(Doc2,"//f/preceding::*", [b, c, d, e]),
- ?line ok = Test(Doc2,"//f/following::*", [h, i, j, k]),
- ?line ok = Test(Doc2,"//text()[1]/following-sibling::*", [c, e, f, h, i, k]),
-
- ?line {Doc3,_} = xmerl_scan:file("documentRoot.xml"),
- ?line ok = Test(Doc3,"//child",[child,child,child]),
- ?line ok = Test(Doc3,"//child[@name='beta']",[child]),
- ?line [{xmlAttribute,id,[],[],[],_,1,[],"2",false}] =
- xmerl_xpath:string("/documentRoot/parent/child[@name='beta']/@id",Doc3),
- ?line ok = Test(Doc3,"/documentRoot/parent/child|/documentRoot/parent/pet",
- [child,child,child,pet,pet]),
- ?line ok = Test(Doc3,"//*[starts-with(local-name(),'p')]",
- [parent,pet,pet]).
-
functions() ->
Test = fun(Doc, XPath, Exp) ->
- Result = xmerl_xpath:string(XPath, Doc),
- ?line Exp = [begin
- case Obj of
- #xmlElement{name = EName} ->
- EName;
- #xmlAttribute{name = AName} ->
- AName;
- #xmlText{value=Text} ->
- Text
- end
- end|| Obj <- Result],
- ok
- end,
+ Result = xmerl_xpath:string(XPath, Doc),
+ Exp = [begin
+ case Obj of
+ #xmlElement{name = EName} ->
+ EName;
+ #xmlAttribute{name = AName} ->
+ AName;
+ #xmlText{value=Text} ->
+ Text
+ end
+ end|| Obj <- Result],
+ ok
+ end,
Foo =
- "<foo>"
- " <bar>"
- " <name>Xml</name>"
- " <value>1</value>"
- " </bar>"
- " <bar>"
- " <name>Xpath</name>"
- " <value>2</value>"
- " </bar>"
- " <bar>"
- " <name>Erlang</name>"
- " <value>3</value>"
- " </bar>"
- "</foo>",
+ "<foo>"
+ " <bar>"
+ " <name>Xml</name>"
+ " <value>1</value>"
+ " </bar>"
+ " <bar>"
+ " <name>Xpath</name>"
+ " <value>2</value>"
+ " </bar>"
+ " <bar>"
+ " <name>Erlang</name>"
+ " <value>3</value>"
+ " </bar>"
+ "</foo>",
{Doc,_} = xmerl_scan:string(Foo),
- ?line ok = Test(Doc,"/foo/bar[name = 'Xml']/value/text()",["1"]),
- ?line ok = Test(Doc,"/foo/bar/node()/text()",
- ["Xml","1","Xpath","2","Erlang","3"]),
- ?line ok = Test(Doc,"/foo/bar[contains(name, 'path')]",[bar]),
- ?line ok = Test(Doc,"/foo/bar[starts-with(name, 'X')]",[bar,bar]),
- ?line ok = Test(Doc,"/foo/bar[value = string(1)]/value/text()",["1"]),
-
+ ok = Test(Doc,"/foo/bar[name = 'Xml']/value/text()",["1"]),
+ ok = Test(Doc,"/foo/bar/node()/text()",
+ ["Xml","1","Xpath","2","Erlang","3"]),
+ ok = Test(Doc,"/foo/bar[contains(name, 'path')]",[bar]),
+ ok = Test(Doc,"/foo/bar[starts-with(name, 'X')]",[bar,bar]),
+ ok = Test(Doc,"/foo/bar[value = string(1)]/value/text()",["1"]),
+
{Doc2,_}= xmerl_scan:file("purchaseOrder.xml"),
- ?line ok = Test(Doc2,"//*[starts-with(local-name(),'c')]",
- ['apo:comment',city,city,comment]),
- ?line ok = Test(Doc2,"//*[starts-with(name(),'c')]",
- [city,city,comment]),
- ?line ok = Test(Doc2,"//*[starts-with(name(),'{http://www.example.com/PO1')]",
- ['apo:purchaseOrder','apo:comment']).
+ ok = Test(Doc2,"//*[starts-with(local-name(),'c')]",
+ ['apo:comment',city,city,comment]),
+ ok = Test(Doc2,"//*[starts-with(name(),'c')]",
+ [city,city,comment]),
+ ok = Test(Doc2,"//*[starts-with(name(),'{http://www.example.com/PO1')]",
+ ['apo:purchaseOrder','apo:comment']).
namespaces() ->
{Doc,_} = xmerl_scan:file("purchaseOrder.xml", [{namespace_conformant, true}]),
%% Element name using regular namespace and context namespace declaration.
- ?line [#xmlElement{nsinfo = {_, "purchaseOrder"}}] =
- xmerl_xpath:string("/apo:purchaseOrder", Doc),
- ?line [#xmlElement{nsinfo = {_, "purchaseOrder"}}] =
- xmerl_xpath:string("/t:purchaseOrder", Doc, [{namespace, [{"t", "http://www.example.com/PO1"}]}]),
+ [#xmlElement{nsinfo = {_, "purchaseOrder"}}] =
+ xmerl_xpath:string("/apo:purchaseOrder", Doc),
+ [#xmlElement{nsinfo = {_, "purchaseOrder"}}] =
+ xmerl_xpath:string("/t:purchaseOrder", Doc, [{namespace, [{"t", "http://www.example.com/PO1"}]}]),
%% Wildcard element name using regular namespace and context namespace declaration.
- ?line [#xmlElement{nsinfo = {_, "comment"}}] =
- xmerl_xpath:string("./apo:*", Doc),
- ?line [#xmlElement{nsinfo = {_, "comment"}}] =
- xmerl_xpath:string("./t:*", Doc, [{namespace, [{"t", "http://www.example.com/PO1"}]}]),
+ [#xmlElement{nsinfo = {_, "comment"}}] =
+ xmerl_xpath:string("./apo:*", Doc),
+ [#xmlElement{nsinfo = {_, "comment"}}] =
+ xmerl_xpath:string("./t:*", Doc, [{namespace, [{"t", "http://www.example.com/PO1"}]}]),
%% Attribute name using regular namespace and context namespace declaration.
- ?line [#xmlAttribute{nsinfo = {_, "type"}}, #xmlAttribute{nsinfo = {_, "type"}}] =
- xmerl_xpath:string("//@xsi:type", Doc),
- ?line [#xmlAttribute{nsinfo = {_, "type"}}, #xmlAttribute{nsinfo = {_, "type"}}] =
- xmerl_xpath:string("//@t:type", Doc, [{namespace, [{"t", "http://www.w3.org/2001/XMLSchema-instance"}]}]),
+ [#xmlAttribute{nsinfo = {_, "type"}}, #xmlAttribute{nsinfo = {_, "type"}}] =
+ xmerl_xpath:string("//@xsi:type", Doc),
+ [#xmlAttribute{nsinfo = {_, "type"}}, #xmlAttribute{nsinfo = {_, "type"}}] =
+ xmerl_xpath:string("//@t:type", Doc, [{namespace, [{"t", "http://www.w3.org/2001/XMLSchema-instance"}]}]),
%% Wildcard attribute name using regular namespace and context namespace declaration.
- ?line [#xmlAttribute{nsinfo = {_, "type"}}, #xmlAttribute{nsinfo = {_, "type"}}] =
- xmerl_xpath:string("//@xsi:*", Doc),
- ?line [#xmlAttribute{nsinfo = {_, "type"}}, #xmlAttribute{nsinfo = {_, "type"}}] =
- xmerl_xpath:string("//@t:*", Doc, [{namespace, [{"t", "http://www.w3.org/2001/XMLSchema-instance"}]}]),
-
+ [#xmlAttribute{nsinfo = {_, "type"}}, #xmlAttribute{nsinfo = {_, "type"}}] =
+ xmerl_xpath:string("//@xsi:*", Doc),
+ [#xmlAttribute{nsinfo = {_, "type"}}, #xmlAttribute{nsinfo = {_, "type"}}] =
+ xmerl_xpath:string("//@t:*", Doc, [{namespace, [{"t", "http://www.w3.org/2001/XMLSchema-instance"}]}]),
ok.
diff --git a/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_lib.erl b/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_lib.erl
index f5c65b0c63..e539436c12 100644
--- a/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_lib.erl
+++ b/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_lib.erl
@@ -13,105 +13,102 @@
-include_lib("xmerl/include/xmerl.hrl").
test() ->
- ?line {E,_} = xmerl_scan:file("myBS_model.xml"),
- ?line Res1 = xmerl_xpath:string("blipp",E),
- ?line ok = check_node_set("blipp",Res1),
- ?line Res2 = xmerl_xpath:string("//blipp",E),
- ?line ok = check_node_set("//blipp",Res2),
- ?line Res3 = xmerl_xpath:string("/myBS_model/blipp",E),
- ?line ok = check_node_set("/myBS_model/blipp",Res3),
- ?line Res4 = xmerl_xpath:string("blipp[@id=\"name1\"]",E),
- ?line ok = check_node_set("blipp[@id=\"name1\"]",Res4),
- ?line Res5 = xmerl_xpath:string("//blipp[@id=\"name1\"]",E),
- ?line ok = check_node_set("//blipp[@id=\"name1\"]",Res5),
- ?line Res6 = xmerl_xpath:string("/myBS_model/blipp[@id=\"name1\"]",E),
- ?line ok = check_node_set("/myBS_model/blipp[@id=\"name1\"]",Res6).
+ {E,_} = xmerl_scan:file("myBS_model.xml"),
+ Res1 = xmerl_xpath:string("blipp",E),
+ ok = check_node_set("blipp",Res1),
+ Res2 = xmerl_xpath:string("//blipp",E),
+ ok = check_node_set("//blipp",Res2),
+ Res3 = xmerl_xpath:string("/myBS_model/blipp",E),
+ ok = check_node_set("/myBS_model/blipp",Res3),
+ Res4 = xmerl_xpath:string("blipp[@id=\"name1\"]",E),
+ ok = check_node_set("blipp[@id=\"name1\"]",Res4),
+ Res5 = xmerl_xpath:string("//blipp[@id=\"name1\"]",E),
+ ok = check_node_set("//blipp[@id=\"name1\"]",Res5),
+ Res6 = xmerl_xpath:string("/myBS_model/blipp[@id=\"name1\"]",E),
+ ok = check_node_set("/myBS_model/blipp[@id=\"name1\"]",Res6).
check_node_set("blipp",[H1,H2]) ->
- ?line #xmlElement{name = blipp} = H1,
- ?line #xmlElement{name = blipp} = H2,
+ #xmlElement{name = blipp} = H1,
+ #xmlElement{name = blipp} = H2,
ok;
check_node_set("//blipp",[H1,H2]) ->
- ?line #xmlElement{name = blipp} = H1,
- ?line #xmlElement{name = blipp} = H2,
+ #xmlElement{name = blipp} = H1,
+ #xmlElement{name = blipp} = H2,
ok;
check_node_set("/myBS_model/blipp",[H1,H2]) ->
- ?line #xmlElement{name = blipp} = H1,
- ?line #xmlElement{name = blipp} = H2,
+ #xmlElement{name = blipp} = H1,
+ #xmlElement{name = blipp} = H2,
ok;
check_node_set("blipp[@id=\"name1\"]",[H]) ->
- ?line H#xmlElement{attributes=#xmlAttribute{name=id,value="name1"}},
+ H#xmlElement{attributes=#xmlAttribute{name=id,value="name1"}},
ok;
check_node_set("//blipp[@id=\"name1\"]",[H]) ->
- ?line H#xmlElement{attributes=#xmlAttribute{name=id,value="name1"}},
+ H#xmlElement{attributes=#xmlAttribute{name=id,value="name1"}},
ok;
check_node_set("/myBS_model/blipp[@id=\"name1\"]",[H]) ->
- ?line H#xmlElement{attributes=#xmlAttribute{name=id,value="name1"}},
+ H#xmlElement{attributes=#xmlAttribute{name=id,value="name1"}},
ok.
ticket_6873() ->
- GetId =
- fun(Atts) ->
- case lists:keysearch(id,#xmlAttribute.name,Atts) of
- {value,#xmlAttribute{value=AttV}} -> AttV;
- _ -> novalue
- end
- end,
- Test =
- fun(Doc, XPath, Exp) ->
- Result = xmerl_xpath:string(XPath, Doc),
- Exp = [begin
- case Obj of
- #xmlElement{name = EName,attributes=Atts} ->
- {EName,GetId(Atts)};
- #xmlAttribute{name = AName} ->
- AName;
- #xmlText{value=Text} ->
- Text
- end
- end|| Obj <- Result],
- ok
- end,
-
-
-
+ GetId = fun(Atts) ->
+ case lists:keysearch(id,#xmlAttribute.name,Atts) of
+ {value,#xmlAttribute{value=AttV}} -> AttV;
+ _ -> novalue
+ end
+ end,
+
+ Test = fun(Doc, XPath, Exp) ->
+ Result = xmerl_xpath:string(XPath, Doc),
+ Exp = [begin
+ case Obj of
+ #xmlElement{name = EName,attributes=Atts} ->
+ {EName,GetId(Atts)};
+ #xmlAttribute{name = AName} ->
+ AName;
+ #xmlText{value=Text} ->
+ Text
+ end
+ end|| Obj <- Result],
+ ok
+ end,
+
Doc1 = get_doc("e1074"),
- ?line ok = Test(Doc1,"/*",[{root,"1"}]),
- ?line ok = Test(Doc1,"/root",[{root,"1"}]),
- ?line ok = Test(Doc1,"/root/*",[{elem1,"2"},{elem1,"8"},{e,"12"}]),
- ?line ok = Test(Doc1,"/root/e",[{e,"12"}]),
- ?line ok = Test(Doc1,"//e",[{e,"12"},{e,"4"},{e,"6"},{e,"10"},{e,"11"}]),
- ?line ok = Test(Doc1,"//*[name() != 'e']",
- [{root,"1"},{elem1,"2"},{elem1,"8"},{elem2,"3"},
- {elem3,"5"},{elem3,"7"},{elem2,"9"}]),
- ?line ok = Test(Doc1,"//elem1/e",[{e,"10"},{e,"11"}]),
- ?line ok = Test(Doc1,"//elem1//e",[{e,"4"},{e,"6"},{e,"10"},{e,"11"}]),
- ?line ok = Test(Doc1,"//*[*]",
- [{root,"1"},{elem1,"2"},{elem1,"8"},
- {elem2,"3"},{elem3,"5"}]),
- ?line ok = Test(Doc1,"//*[not(*)]",
- [{e,"12"},{e,"4"},{elem3,"7"},{e,"6"},
- {elem2,"9"},{e,"10"},{e,"11"}]),
+ ok = Test(Doc1,"/*",[{root,"1"}]),
+ ok = Test(Doc1,"/root",[{root,"1"}]),
+ ok = Test(Doc1,"/root/*",[{elem1,"2"},{elem1,"8"},{e,"12"}]),
+ ok = Test(Doc1,"/root/e",[{e,"12"}]),
+ ok = Test(Doc1,"//e",[{e,"12"},{e,"4"},{e,"6"},{e,"10"},{e,"11"}]),
+ ok = Test(Doc1,"//*[name() != 'e']",
+ [{root,"1"},{elem1,"2"},{elem1,"8"},{elem2,"3"},
+ {elem3,"5"},{elem3,"7"},{elem2,"9"}]),
+ ok = Test(Doc1,"//elem1/e",[{e,"10"},{e,"11"}]),
+ ok = Test(Doc1,"//elem1//e",[{e,"4"},{e,"6"},{e,"10"},{e,"11"}]),
+ ok = Test(Doc1,"//*[*]",
+ [{root,"1"},{elem1,"2"},{elem1,"8"},
+ {elem2,"3"},{elem3,"5"}]),
+ ok = Test(Doc1,"//*[not(*)]",
+ [{e,"12"},{e,"4"},{elem3,"7"},{e,"6"},
+ {elem2,"9"},{e,"10"},{e,"11"}]),
%% contents would be empty in the above expression
- ?line [#xmlElement{content=[]}|_] = xmerl_xpath:string("//*[not(*)]",Doc1),
- ?line ok = Test(Doc1,"//*[e]",[{root,"1"},{elem1,"8"},{elem2,"3"},{elem3,"5"}]),
- ?line ok = Test(Doc1,"//*[count(e)>1]",[{elem1,"8"}]),
- ?line ok = Test(Doc1,"//*[not(e) and name() != 'e']",
- [{elem1,"2"},{elem3,"7"},{elem2,"9"}]),
- ?line ok = Test(Doc1,"/*/*/*/e",[{e,"4"}]),
- ?line ok = Test(Doc1,"//*[starts-with(name(), 'el')]",
- [{elem1,"2"},{elem1,"8"},{elem2,"3"},
- {elem3,"5"},{elem3,"7"},{elem2,"9"}]),
- ?line ok = Test(Doc1,"//*[contains(name(), 'lem1')]",
- [{elem1,"2"},{elem1,"8"}]),
- ?line ok = Test(Doc1,"/*/e | //elem2/e",[{e,"4"},{e,"12"}]),
+ [#xmlElement{content=[]}|_] = xmerl_xpath:string("//*[not(*)]",Doc1),
+ ok = Test(Doc1,"//*[e]",[{root,"1"},{elem1,"8"},{elem2,"3"},{elem3,"5"}]),
+ ok = Test(Doc1,"//*[count(e)>1]",[{elem1,"8"}]),
+ ok = Test(Doc1,"//*[not(e) and name() != 'e']",
+ [{elem1,"2"},{elem3,"7"},{elem2,"9"}]),
+ ok = Test(Doc1,"/*/*/*/e",[{e,"4"}]),
+ ok = Test(Doc1,"//*[starts-with(name(), 'el')]",
+ [{elem1,"2"},{elem1,"8"},{elem2,"3"},
+ {elem3,"5"},{elem3,"7"},{elem2,"9"}]),
+ ok = Test(Doc1,"//*[contains(name(), 'lem1')]",
+ [{elem1,"2"},{elem1,"8"}]),
+ ok = Test(Doc1,"/*/e | //elem2/e",[{e,"4"},{e,"12"}]),
io:format("Tested ~p~n",[e1074]),
Doc2 = get_doc("e1075"),
- ?line ok = Test(Doc2,"/*/*[1]",[{elem1,"2"}]),
- ?line ok = Test(Doc2,"/root/elem1[2]",[{elem1,"8"}]),
+ ok = Test(Doc2,"/*/*[1]",[{elem1,"2"}]),
+ ok = Test(Doc2,"/root/elem1[2]",[{elem1,"8"}]),
%% Get all first-born e elements in the document; that is, for all
%% e elements with e element siblings, include only the first
@@ -119,66 +116,61 @@ ticket_6873() ->
%% the document because the [1] predicate applies to e, which
%% represents the set of e elements under one element and not to
%% //e, which represents the set of e elements in the document.
- %% ?line ok = Test(Doc2,"//e[1]",[{e,"4"},{e,"6"},{e,"10"},{e,"12"}]),
+ %% ok = Test(Doc2,"//e[1]",[{e,"4"},{e,"6"},{e,"10"},{e,"12"}]),
%% The following expression retrieves the first e element in the
%% document:
- %% ?line ok = Test(Doc2,"(//e)[1]",[{e,4}]),
-
+ %% ok = Test(Doc2,"(//e)[1]",[{e,4}]),
+
%% For all e elements with e element siblings, include only the
%% first 3 siblings
- %% ?line ok = Test(Doc2,"//e[position() <= 3]",[{e,"4"},{e,"6"},{e,"10"},{e,"11"},{e,"12"}]),
+ %% ok = Test(Doc2,"//e[position() <= 3]",[{e,"4"},{e,"6"},{e,"10"},{e,"11"},{e,"12"}]),
%% Get all last-born e elements in the document; that is, for all
%% e elements with e element siblings, include only the last
%% sibling
- %% ?line ok = Test(Doc2,"//e[last()]",[{e,"4"},{e,"6"},{e,"11"},{e,"12"}]),
+ %% ok = Test(Doc2,"//e[last()]",[{e,"4"},{e,"6"},{e,"11"},{e,"12"}]),
%% Get the last e element in the document
- %% ?line ok = Test(Doc2,"(//e)[last()]", [{e,"12"}]),
-
+ %% ok = Test(Doc2,"(//e)[last()]", [{e,"12"}]),
io:format("Tested ~p~n",[e1075]),
-
Doc3 = get_doc("e1076"),
- ?line ok = Test(Doc3,"//*[.='cat']",[{elem1,"2"},{elem3,"6"}]),
- ?line ok = Test(Doc3,"//*[.='dog']",[]),
- ?line ok = Test(Doc3,"//*[contains(.,'cat')]",
- [{elem1,"2"},{elem1,"4"},{elem3,"6"}]),
- ?line ok = Test(Doc3,"//elem3[contains(.,'cat')]",[{elem3,"6"}]),
- ?line ok = Test(Doc3,"//*[contains(child::text(),'cat')]",[{elem1,"2"},{elem1,"4"},{elem3,"6"}]),
- ?line ok = Test(Doc3,"//*[count(*)=0 and contains(.,'cat')]",[{elem1,"2"},{elem3,"6"}]),
- ?line ok = Test(Doc3,"//*[contains(translate(.,'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'),'CAT')]",[{elem1,"2"},{elem1,"4"},{elem1,"7"},{elem3,"6"}]),
+ ok = Test(Doc3,"//*[.='cat']",[{elem1,"2"},{elem3,"6"}]),
+ ok = Test(Doc3,"//*[.='dog']",[]),
+ ok = Test(Doc3,"//*[contains(.,'cat')]", [{elem1,"2"},{elem1,"4"},{elem3,"6"}]),
+ ok = Test(Doc3,"//elem3[contains(.,'cat')]",[{elem3,"6"}]),
+ ok = Test(Doc3,"//*[contains(child::text(),'cat')]",[{elem1,"2"},{elem1,"4"},{elem3,"6"}]),
+ ok = Test(Doc3,"//*[count(*)=0 and contains(.,'cat')]",[{elem1,"2"},{elem3,"6"}]),
+ ok = Test(Doc3,"//*[contains(translate(.,'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'),'CAT')]",[{elem1,"2"},{elem1,"4"},{elem1,"7"},{elem3,"6"}]),
io:format("Tested ~p~n",[e1076]),
Doc4 = get_doc("e1078"),
- ?line ok = Test(Doc4,"//*[@pet='cat']",[{elem1,"2"}]),
- ?line ok = Test(Doc4,"//*[@pet='dog']",[{elem1,"7"}]),
- ?line ok = Test(Doc4,"//*[contains(@pet,'dog')]",
- [{elem1,"3"},{elem1,"7"}]),
- ?line ok = Test(Doc4,"//*[@age]",[{elem1,"3"},{elem3,"6"}]),
- ?line ok = Test(Doc4,"//elem1[@age]",[{elem1,"3"}]),
- ?line ok = Test(Doc4,"//*[@pet and @age]",[{elem1,"3"}]),
- ?line ok = Test(Doc4,"//*[contains(translate(@pet,'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'),'CAT')]",[{elem1,"2"},{elem1,"4"}]),
-
- io:format("Tested ~p~n",[e1078]),
+ ok = Test(Doc4,"//*[@pet='cat']",[{elem1,"2"}]),
+ ok = Test(Doc4,"//*[@pet='dog']",[{elem1,"7"}]),
+ ok = Test(Doc4,"//*[contains(@pet,'dog')]",
+ [{elem1,"3"},{elem1,"7"}]),
+ ok = Test(Doc4,"//*[@age]",[{elem1,"3"},{elem3,"6"}]),
+ ok = Test(Doc4,"//elem1[@age]",[{elem1,"3"}]),
+ ok = Test(Doc4,"//*[@pet and @age]",[{elem1,"3"}]),
+ ok = Test(Doc4,"//*[contains(translate(@pet,'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'),'CAT')]",[{elem1,"2"},{elem1,"4"}]),
+ io:format("Tested ~p~n",[e1078]),
Doc5 = get_doc("e1077"),
- ?line ok = Test(Doc5,"id('3')",[{e,"3"}]),
+ ok = Test(Doc5,"id('3')",[{e,"3"}]),
%% Get all e elements directly under element id 3
- %% ?line ok = Test(Doc5,"id('two')/e",[{e,"3"},{e,"4"},{e,"6"}]),
- ?line ok = Test(Doc5,"id('two 3 seven the fifth')",[{e,"seven"},{e,"3"},{e,"two"}]),
- ?line ok = Test(Doc5,"id('100')",[]),
-
+ %% ok = Test(Doc5,"id('two')/e",[{e,"3"},{e,"4"},{e,"6"}]),
+ ok = Test(Doc5,"id('two 3 seven the fifth')",[{e,"seven"},{e,"3"},{e,"two"}]),
+ ok = Test(Doc5,"id('100')",[]),
+
io:format("Tested ~p~n",[e1077]),
ok.
-
get_doc(Name) ->
- ?line {Doc,_} = xmerl_scan:file(Name++".xml"),
+ {Doc,_} = xmerl_scan:file(Name++".xml"),
Doc.
diff --git a/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_text.erl b/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_text.erl
index c3a1fb9c4d..77adde85e9 100644
--- a/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_text.erl
+++ b/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_text.erl
@@ -13,16 +13,16 @@
-include_lib("xmerl/include/xmerl.hrl").
-import(xmerl_xs,
- [ xslapply/2, value_of/1, select/2, built_in_rules/2 ]).
+ [ xslapply/2, value_of/1, select/2, built_in_rules/2 ]).
one() ->
- ?line {A,_}=xmerl_scan:file('motorcycles.xml'),
- ?line [["Suzuki","Yamaha"]] = template(A),
+ {A,_}=xmerl_scan:file('motorcycles.xml'),
+ [["Suzuki","Yamaha"]] = template(A),
ok.
%%% templates, test of OTP-5268
template(E = #xmlElement{name='motorcycles'}) ->
- [value_of(select("bike/name/manufacturer/text()",E))];
+ [value_of(select("bike/name/manufacturer/text()",E))];
template(E) -> built_in_rules(fun template/1, E).
diff --git a/lib/xmerl/test/xmerl_app_test.erl b/lib/xmerl/test/xmerl_app_test.erl
index 8dfa588826..a7bfed8cc6 100644
--- a/lib/xmerl/test/xmerl_app_test.erl
+++ b/lib/xmerl/test/xmerl_app_test.erl
@@ -56,8 +56,6 @@ end_per_group(_GroupName, Config) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-init_per_suite(suite) -> [];
-init_per_suite(doc) -> [];
init_per_suite(Config) when is_list(Config) ->
case is_app(xmerl) of
{ok, AppFile} ->
@@ -78,18 +76,12 @@ is_app(App) ->
end.
-end_per_suite(suite) -> [];
-end_per_suite(doc) -> [];
end_per_suite(Config) when is_list(Config) ->
Config.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-fields(suite) ->
- [];
-fields(doc) ->
- [];
fields(Config) when is_list(Config) ->
AppFile = key1search(app_file, Config),
Fields = [vsn, description, modules, registered, applications],
@@ -117,10 +109,6 @@ check_field(Name, AppFile, Missing) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-modules(suite) ->
- [];
-modules(doc) ->
- [];
modules(Config) when is_list(Config) ->
AppFile = key1search(app_file, Config),
Mods = key1search(modules, AppFile),
@@ -174,10 +162,6 @@ extra_modules(Mods, [Mod|Ebins], Extra) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-exportall(suite) ->
- [];
-exportall(doc) ->
- [];
exportall(Config) when is_list(Config) ->
AppFile = key1search(app_file, Config),
Mods = key1search(modules, AppFile),
@@ -207,24 +191,17 @@ check_export_all([Mod|Mods]) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-app_depend(suite) ->
- [];
-app_depend(doc) ->
- [];
app_depend(Config) when is_list(Config) ->
AppFile = key1search(app_file, Config),
Apps = key1search(applications, AppFile),
check_apps(Apps).
-check_apps([]) ->
- ok;
+check_apps([]) -> ok;
check_apps([App|Apps]) ->
case is_app(App) of
- {ok, _} ->
- check_apps(Apps);
- Error ->
- throw({error, {missing_app, {App, Error}}})
+ {ok, _} -> check_apps(Apps);
+ Error -> throw({error, {missing_app, {App, Error}}})
end.
diff --git a/lib/xmerl/test/xmerl_appup_test.erl b/lib/xmerl/test/xmerl_appup_test.erl
index cfadb66ec7..3a6ac12d33 100644
--- a/lib/xmerl/test/xmerl_appup_test.erl
+++ b/lib/xmerl/test/xmerl_appup_test.erl
@@ -31,32 +31,6 @@
all() ->
[appup].
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-init_per_suite(suite) -> [];
-init_per_suite(doc) -> [];
-init_per_suite(Config) when is_list(Config) ->
- Config.
-
-
-end_per_suite(suite) -> [];
-end_per_suite(doc) -> [];
-end_per_suite(Config) when is_list(Config) ->
- Config.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
%% perform a simple check of the appup file
appup(Config) when is_list(Config) ->
- ok = ?t:appup_test(xmerl).
+ ok = test_server:appup_test(xmerl).
diff --git a/lib/xmerl/test/xmerl_sax_SUITE.erl b/lib/xmerl/test/xmerl_sax_SUITE.erl
index 590ae14e23..f5c0a783c4 100644
--- a/lib/xmerl/test/xmerl_sax_SUITE.erl
+++ b/lib/xmerl/test/xmerl_sax_SUITE.erl
@@ -38,25 +38,11 @@
%% Initializations
%%----------------------------------------------------------------------
-init_per_suite(doc) ->
- ["Starts the test suite"];
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(doc) ->
- ["Stops the test suite"];
-end_per_suite(Config) ->
- Config.
-
+all() ->
+ [{group, bugs}].
-
-%% initialization before each testcase
-init_per_testcase(_TestCase,Config) ->
- Config.
-
-%% clean up after each testcase
-end_per_testcase(_Func,_Config) ->
- ok.
+groups() ->
+ [{bugs, [], [ticket_8213, ticket_8214, ticket_11551]}].
%%----------------------------------------------------------------------
%% Tests
@@ -66,9 +52,8 @@ end_per_testcase(_Func,_Config) ->
%% Test Case
%% ID: ticket_8213
%% Description: Checks that end of document is checked properly when continuation fun is missing.
-ticket_8213(suite) -> [];
ticket_8213(_Config) ->
- ?line {ok,ok,[]} = xmerl_sax_parser:stream("<elem/>", [{event_fun, fun (_E,_,_) -> ok end}]),
+ {ok,ok,[]} = xmerl_sax_parser:stream("<elem/>", [{event_fun, fun (_E,_,_) -> ok end}]),
ok.
@@ -76,65 +61,41 @@ ticket_8213(_Config) ->
%% Test Case
%% ID: ticket_8214
%% Description: Checks that attributes with default namespace don't get [] in NS field.
-ticket_8214(suite) -> [];
ticket_8214(_Config) ->
- ?line {ok,ok,[]} =
- xmerl_sax_parser:stream("<elem attr='123' x:attr='234' xmlns='http://lshift.net/d' "
- "xmlns:x='http://lshift.net/x' />",
- [{event_fun, fun ({startElement,"http://lshift.net/d","elem",
- {[],"elem"},
- [{[],[],"attr","123"},{"http://lshift.net/x","x","attr","234"}]},
- _, _) ->ok;
- ({startElement, _, "elem",_,_}, _,_) ->
- throw({test, "Error in startElement tuple"});
- (_E,_,_) -> ok
- end}]),
+ Event = fun ({startElement,"http://lshift.net/d","elem",
+ {[],"elem"},
+ [{[],[],"attr","123"},{"http://lshift.net/x","x","attr","234"}]},
+ _, _) ->ok;
+ ({startElement, _, "elem",_,_}, _,_) ->
+ throw({test, "Error in startElement tuple"});
+ (_E,_,_) -> ok
+ end,
+
+ {ok,ok,[]} = xmerl_sax_parser:stream("<elem attr='123' x:attr='234' xmlns='http://lshift.net/d' "
+ "xmlns:x='http://lshift.net/x' />",
+ [{event_fun, Event}]),
ok.
%%----------------------------------------------------------------------
%% Test Case
%% ID: ticket_8214
%% Description: Checks that attributes with default namespace don't get [] in NS field.
-ticket_11551(suite) -> [];
-ticket_11551(Config) ->
+ticket_11551(_Config) ->
Stream1 = <<"<?xml version=\"1.0\" encoding=\"utf-8\" ?>
<a>hej</a>
<?xml version=\"1.0\" encoding=\"utf-8\" ?>
<a>hej</a>">>,
- ?line {ok, undefined, <<"<?xml", _/binary>>} = xmerl_sax_parser:stream(Stream1, []),
+ {ok, undefined, <<"<?xml", _/binary>>} = xmerl_sax_parser:stream(Stream1, []),
Stream2= <<"<?xml version=\"1.0\" encoding=\"utf-8\" ?>
<a>hej</a>
<?xml version=\"1.0\" encoding=\"utf-8\" ?>
<a>hej</a>">>,
- ?line {ok, undefined, <<"<?xml", _/binary>>} = xmerl_sax_parser:stream(Stream2, []),
+ {ok, undefined, <<"<?xml", _/binary>>} = xmerl_sax_parser:stream(Stream2, []),
Stream3= <<"<a>hej</a>
<?xml version=\"1.0\" encoding=\"utf-8\" ?>
<a>hej</a>">>,
- ?line {ok, undefined, <<"<?xml", _/binary>>} = xmerl_sax_parser:stream(Stream3, []),
+ {ok, undefined, <<"<?xml", _/binary>>} = xmerl_sax_parser:stream(Stream3, []),
ok.
-
-
-
-%%----------------------------------------------------------------------
-%% Bug test cases
-%%
-
-%%----------------------------------------------------------------------
-%% Test Suite
-%%
-all() ->
- [{group, bugs}].
-
-groups() ->
- [{bugs, [], [ticket_8213, ticket_8214, ticket_11551]}].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
diff --git a/lib/xmerl/test/xmerl_sax_std_SUITE.erl b/lib/xmerl/test/xmerl_sax_std_SUITE.erl
index c363a8ea8b..525a3b175a 100644
--- a/lib/xmerl/test/xmerl_sax_std_SUITE.erl
+++ b/lib/xmerl/test/xmerl_sax_std_SUITE.erl
@@ -38,50 +38,40 @@
%% Initializations
%%----------------------------------------------------------------------
-init_per_suite(doc) ->
- ["Starts the test suite"];
init_per_suite(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line ok=erl_tar:extract("ibm.tgz",[compressed]),
- ?line ok=erl_tar:extract("japanese.tgz",[compressed]),
- ?line ok=erl_tar:extract("oasis.tgz",[compressed]),
- ?line ok=erl_tar:extract("sun.tgz",[compressed]),
- ?line ok=erl_tar:extract("xmltest.tgz",[compressed]),
- ?line ok = change_mode(["ibm","japanese","oasis",
- "sun","xmltest"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ ok=erl_tar:extract("ibm.tgz",[compressed]),
+ ok=erl_tar:extract("japanese.tgz",[compressed]),
+ ok=erl_tar:extract("oasis.tgz",[compressed]),
+ ok=erl_tar:extract("sun.tgz",[compressed]),
+ ok=erl_tar:extract("xmltest.tgz",[compressed]),
+ ok = change_mode(["ibm","japanese","oasis",
+ "sun","xmltest"]),
Config.
-
+
-ifndef(dont_rm_test_dirs).
-
-end_per_suite(doc) ->
- ["Stops the test suite"];
+
end_per_suite(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line ok=rm_files(["ibm","japanese","oasis","sun","xmltest"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ ok=rm_files(["ibm","japanese","oasis","sun","xmltest"]),
Config.
-
+
-else.
-
-end_per_suite(doc) ->
- ["Stops the test suite"];
+
end_per_suite(Config) ->
Config.
-
+
-endif.
-
+
%% initialization before each testcase
init_per_testcase(_TestCase,Config) ->
io:format("Config:\n~p\n",[Config]),
- ?line {ok, _} = file:read_file_info(filename:join([?config(priv_dir,Config)])),
- ?line code:add_patha(?config(priv_dir,Config)),
-% Dog=test_server:timetrap({minutes,10}),
-% [{watchdog, Dog}|Config].
+ {ok, _} = file:read_file_info(filename:join([privdir(Config)])),
+ code:add_patha(privdir(Config)),
Config.
%% clean up after each testcase
end_per_testcase(_Func,_Config) ->
-% Dog=?config(watchdog, Config),
-% test_server:timetrap_cancel(Dog),
ok.
%%----------------------------------------------------------------------
@@ -94,12 +84,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-001
%% Type: not-wf
%% Sections: 3.1 [41]
-'not-wf-sa-001'(suite) -> [];
'not-wf-sa-001'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/001.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/001.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -107,12 +96,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-002
%% Type: not-wf
%% Sections: 2.3 [4]
-'not-wf-sa-002'(suite) -> [];
'not-wf-sa-002'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/002.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/002.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -120,12 +108,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-003
%% Type: not-wf
%% Sections: 2.6 [16]
-'not-wf-sa-003'(suite) -> [];
'not-wf-sa-003'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/003.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/003.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -133,12 +120,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-004
%% Type: not-wf
%% Sections: 2.6 [16]
-'not-wf-sa-004'(suite) -> [];
'not-wf-sa-004'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/004.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/004.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -146,12 +132,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-005
%% Type: not-wf
%% Sections: 2.6 [16]
-'not-wf-sa-005'(suite) -> [];
'not-wf-sa-005'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/005.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/005.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -159,12 +144,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-006
%% Type: not-wf
%% Sections: 2.5 [16]
-'not-wf-sa-006'(suite) -> [];
'not-wf-sa-006'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/006.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/006.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -172,12 +156,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-007
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-007'(suite) -> [];
'not-wf-sa-007'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/007.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/007.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -185,12 +168,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-008
%% Type: not-wf
%% Sections: 2.3 [5]
-'not-wf-sa-008'(suite) -> [];
'not-wf-sa-008'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/008.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/008.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -198,12 +180,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-009
%% Type: not-wf
%% Sections: 4.1 [66]
-'not-wf-sa-009'(suite) -> [];
'not-wf-sa-009'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/009.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/009.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -211,12 +192,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-010
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-010'(suite) -> [];
'not-wf-sa-010'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/010.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/010.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -224,12 +204,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-011
%% Type: not-wf
%% Sections: 3.1 [41]
-'not-wf-sa-011'(suite) -> [];
'not-wf-sa-011'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/011.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/011.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -237,12 +216,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-012
%% Type: not-wf
%% Sections: 2.3 [10]
-'not-wf-sa-012'(suite) -> [];
'not-wf-sa-012'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/012.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/012.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -250,12 +228,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-013
%% Type: not-wf
%% Sections: 2.3 [10]
-'not-wf-sa-013'(suite) -> [];
'not-wf-sa-013'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/013.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/013.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -263,12 +240,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-014
%% Type: not-wf
%% Sections: 2.3 [10]
-'not-wf-sa-014'(suite) -> [];
'not-wf-sa-014'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/014.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/014.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -276,12 +252,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-015
%% Type: not-wf
%% Sections: 3.1 [41]
-'not-wf-sa-015'(suite) -> [];
'not-wf-sa-015'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/015.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/015.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -289,12 +264,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-016
%% Type: not-wf
%% Sections: 3.1 [41]
-'not-wf-sa-016'(suite) -> [];
'not-wf-sa-016'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/016.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/016.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -302,12 +276,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-017
%% Type: not-wf
%% Sections: 2.7 [18]
-'not-wf-sa-017'(suite) -> [];
'not-wf-sa-017'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/017.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/017.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -315,12 +288,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-018
%% Type: not-wf
%% Sections: 2.7 [19]
-'not-wf-sa-018'(suite) -> [];
'not-wf-sa-018'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/018.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/018.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -328,12 +300,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-019
%% Type: not-wf
%% Sections: 3.1 [42]
-'not-wf-sa-019'(suite) -> [];
'not-wf-sa-019'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/019.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/019.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -341,12 +312,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-020
%% Type: not-wf
%% Sections: 2.3 [10]
-'not-wf-sa-020'(suite) -> [];
'not-wf-sa-020'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/020.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/020.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -354,12 +324,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-021
%% Type: not-wf
%% Sections: 2.3 [10]
-'not-wf-sa-021'(suite) -> [];
'not-wf-sa-021'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/021.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/021.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -367,12 +336,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-022
%% Type: not-wf
%% Sections: 4.1 [66]
-'not-wf-sa-022'(suite) -> [];
'not-wf-sa-022'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/022.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/022.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -380,12 +348,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-023
%% Type: not-wf
%% Sections: 2.3 [5]
-'not-wf-sa-023'(suite) -> [];
'not-wf-sa-023'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/023.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/023.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -393,12 +360,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-024
%% Type: not-wf
%% Sections: 2.3 [5]
-'not-wf-sa-024'(suite) -> [];
'not-wf-sa-024'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/024.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/024.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -406,12 +372,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-025
%% Type: not-wf
%% Sections: 2.4 [14]
-'not-wf-sa-025'(suite) -> [];
'not-wf-sa-025'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/025.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/025.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -419,12 +384,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-026
%% Type: not-wf
%% Sections: 2.4 [14]
-'not-wf-sa-026'(suite) -> [];
'not-wf-sa-026'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/026.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/026.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -432,12 +396,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-027
%% Type: not-wf
%% Sections: 2.5 [15]
-'not-wf-sa-027'(suite) -> [];
'not-wf-sa-027'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/027.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/027.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -445,12 +408,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-028
%% Type: not-wf
%% Sections: 2.6 [16]
-'not-wf-sa-028'(suite) -> [];
'not-wf-sa-028'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/028.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/028.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -458,12 +420,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-029
%% Type: not-wf
%% Sections: 2.4 [14]
-'not-wf-sa-029'(suite) -> [];
'not-wf-sa-029'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/029.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/029.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -471,12 +432,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-030
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-030'(suite) -> [];
'not-wf-sa-030'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/030.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/030.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -484,12 +444,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-031
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-031'(suite) -> [];
'not-wf-sa-031'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/031.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/031.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -497,12 +456,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-032
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-032'(suite) -> [];
'not-wf-sa-032'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/032.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/032.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -510,12 +468,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-033
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-033'(suite) -> [];
'not-wf-sa-033'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/033.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/033.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -523,12 +480,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-034
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-034'(suite) -> [];
'not-wf-sa-034'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/034.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/034.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -536,12 +492,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-035
%% Type: not-wf
%% Sections: 3.1 [43]
-'not-wf-sa-035'(suite) -> [];
'not-wf-sa-035'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/035.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/035.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -549,15 +504,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-036
%% Type: not-wf
%% Sections: 2.8 [27]
-'not-wf-sa-036'(suite) -> [];
'not-wf-sa-036'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/036.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/036.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"Illegal data\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_,<<"Illegal data\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -565,15 +519,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-037
%% Type: not-wf
%% Sections: 2.8 [27]
-'not-wf-sa-037'(suite) -> [];
'not-wf-sa-037'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/037.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/037.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"&#32;\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_,<<"&#32;\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -581,12 +534,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-038
%% Type: not-wf
%% Sections: 3.1
-'not-wf-sa-038'(suite) -> [];
'not-wf-sa-038'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/038.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/038.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -594,12 +546,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-039
%% Type: not-wf
%% Sections: 3
-'not-wf-sa-039'(suite) -> [];
'not-wf-sa-039'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/039.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/039.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -607,15 +558,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-040
%% Type: not-wf
%% Sections: 2.8 [27]
-'not-wf-sa-040'(suite) -> [];
'not-wf-sa-040'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/040.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/040.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"<doc></doc>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_,<<"<doc></doc>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -623,15 +573,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-041
%% Type: not-wf
%% Sections: 2.8 [27]
-'not-wf-sa-041'(suite) -> [];
'not-wf-sa-041'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/041.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/041.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"<doc></doc>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_,<<"<doc></doc>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -639,12 +588,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-042
%% Type: not-wf
%% Sections: 3.1 [42]
-'not-wf-sa-042'(suite) -> [];
'not-wf-sa-042'(Config) -> {skip, "Fix 1"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/042.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/042.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -652,15 +600,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-043
%% Type: not-wf
%% Sections: 2.8 [27]
-'not-wf-sa-043'(suite) -> [];
'not-wf-sa-043'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/043.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/043.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"Illegal data\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_,<<"Illegal data\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -668,15 +615,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-044
%% Type: not-wf
%% Sections: 2.8 [27]
-'not-wf-sa-044'(suite) -> [];
'not-wf-sa-044'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/044.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/044.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"<doc/>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_,<<"<doc/>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -684,12 +630,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-045
%% Type: not-wf
%% Sections: 3.1 [44]
-'not-wf-sa-045'(suite) -> [];
'not-wf-sa-045'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/045.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/045.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -697,12 +642,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-046
%% Type: not-wf
%% Sections: 3.1 [40]
-'not-wf-sa-046'(suite) -> [];
'not-wf-sa-046'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/046.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/046.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -710,12 +654,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-047
%% Type: not-wf
%% Sections: 3.1 [44]
-'not-wf-sa-047'(suite) -> [];
'not-wf-sa-047'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/047.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/047.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -723,15 +666,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-048
%% Type: not-wf
%% Sections: 2.8 [27]
-'not-wf-sa-048'(suite) -> [];
'not-wf-sa-048'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/048.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/048.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"<![CDATA[]]>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_,<<"<![CDATA[]]>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -739,12 +681,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-049
%% Type: not-wf
%% Sections: 3.1 [40]
-'not-wf-sa-049'(suite) -> [];
'not-wf-sa-049'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/049.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/049.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -752,12 +693,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-050
%% Type: not-wf
%% Sections: 2.1 [1]
-'not-wf-sa-050'(suite) -> [];
'not-wf-sa-050'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/050.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/050.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -765,12 +705,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-051
%% Type: not-wf
%% Sections: 2.7 [18]
-'not-wf-sa-051'(suite) -> [];
'not-wf-sa-051'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/051.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/051.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -778,12 +717,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-052
%% Type: not-wf
%% Sections: 4.1 [66]
-'not-wf-sa-052'(suite) -> [];
'not-wf-sa-052'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/052.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/052.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -791,12 +729,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-053
%% Type: not-wf
%% Sections: 3.1 [42]
-'not-wf-sa-053'(suite) -> [];
'not-wf-sa-053'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/053.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/053.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -804,12 +741,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-054
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'not-wf-sa-054'(suite) -> [];
'not-wf-sa-054'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/054.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/054.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -817,12 +753,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-055
%% Type: not-wf
%% Sections: 2.8 [28]
-'not-wf-sa-055'(suite) -> [];
'not-wf-sa-055'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/055.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/055.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -830,12 +765,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-056
%% Type: not-wf
%% Sections: 2.8 [28]
-'not-wf-sa-056'(suite) -> [];
'not-wf-sa-056'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/056.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/056.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -843,12 +777,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-057
%% Type: not-wf
%% Sections: 3.2 [45]
-'not-wf-sa-057'(suite) -> [];
'not-wf-sa-057'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/057.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/057.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -856,12 +789,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-058
%% Type: not-wf
%% Sections: 3.3.1 [54]
-'not-wf-sa-058'(suite) -> [];
'not-wf-sa-058'(_Config) -> {skip, "Attlist Notation parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/058.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/058.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -869,12 +801,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-059
%% Type: not-wf
%% Sections: 3.3.1 [59]
-'not-wf-sa-059'(suite) -> [];
'not-wf-sa-059'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/059.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/059.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -882,12 +813,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-060
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'not-wf-sa-060'(suite) -> [];
'not-wf-sa-060'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/060.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/060.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -895,12 +825,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-061
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'not-wf-sa-061'(suite) -> [];
'not-wf-sa-061'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/061.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/061.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -908,12 +837,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-062
%% Type: not-wf
%% Sections: 4.2 [71]
-'not-wf-sa-062'(suite) -> [];
'not-wf-sa-062'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/062.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/062.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -921,12 +849,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-063
%% Type: not-wf
%% Sections: 2.8 [29]
-'not-wf-sa-063'(suite) -> [];
'not-wf-sa-063'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/063.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/063.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -934,12 +861,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-064
%% Type: not-wf
%% Sections: 3.3 [53]
-'not-wf-sa-064'(suite) -> [];
'not-wf-sa-064'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/064.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/064.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -947,12 +873,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-065
%% Type: not-wf
%% Sections: 3.3 [53]
-'not-wf-sa-065'(suite) -> [];
'not-wf-sa-065'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/065.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/065.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -960,12 +885,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-066
%% Type: not-wf
%% Sections: 3.3 [52]
-'not-wf-sa-066'(suite) -> [];
'not-wf-sa-066'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/066.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/066.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -973,12 +897,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-067
%% Type: not-wf
%% Sections: 3.3 [53]
-'not-wf-sa-067'(suite) -> [];
'not-wf-sa-067'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/067.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/067.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -986,12 +909,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-068
%% Type: not-wf
%% Sections: 3.3.1 [58]
-'not-wf-sa-068'(suite) -> [];
'not-wf-sa-068'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/068.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/068.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -999,12 +921,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-069
%% Type: not-wf
%% Sections: 4.2.2 [76]
-'not-wf-sa-069'(suite) -> [];
'not-wf-sa-069'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/069.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/069.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1012,12 +933,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-070
%% Type: not-wf
%% Sections: 2.5 [16]
-'not-wf-sa-070'(suite) -> [];
'not-wf-sa-070'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/070.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/070.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1025,12 +945,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-071
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-071'(suite) -> [];
'not-wf-sa-071'(_Config) -> {skip, "No loop detection yet"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/071.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/071.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1038,12 +957,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-072
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-072'(suite) -> [];
'not-wf-sa-072'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/072.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/072.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1051,12 +969,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-073
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-073'(suite) -> [];
'not-wf-sa-073'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/073.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/073.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1064,12 +981,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-074
%% Type: not-wf
%% Sections: 4.3.2
-'not-wf-sa-074'(suite) -> [];
'not-wf-sa-074'(_Config) -> {skip, "Entity not correct tag pair NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/074.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/074.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1077,12 +993,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-075
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-075'(suite) -> [];
'not-wf-sa-075'(_Config) -> {skip, "No loop detection yet"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/075.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/075.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1090,12 +1005,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-076
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-076'(suite) -> [];
'not-wf-sa-076'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/076.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/076.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1103,12 +1017,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-077
%% Type: not-wf
%% Sections: 41. [68]
-'not-wf-sa-077'(suite) -> [];
'not-wf-sa-077'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/077.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/077.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1116,12 +1029,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-078
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-078'(suite) -> [];
'not-wf-sa-078'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/078.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/078.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1129,12 +1041,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-079
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-079'(suite) -> [];
'not-wf-sa-079'(_Config) -> {skip, "No loop detection yet"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/079.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/079.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1142,12 +1053,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-080
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-080'(suite) -> [];
'not-wf-sa-080'(_Config) -> {skip, "No loop detection yet"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/080.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/080.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1155,12 +1065,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-081
%% Type: not-wf
%% Sections: 3.1
-'not-wf-sa-081'(suite) -> [];
'not-wf-sa-081'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/081.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/081.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1168,12 +1077,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-082
%% Type: not-wf
%% Sections: 3.1
-'not-wf-sa-082'(suite) -> [];
'not-wf-sa-082'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/082.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/082.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1181,12 +1089,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-083
%% Type: not-wf
%% Sections: 4.2.2 [76]
-'not-wf-sa-083'(suite) -> [];
'not-wf-sa-083'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/083.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/083.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1194,12 +1101,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-084
%% Type: not-wf
%% Sections: 4.1
-'not-wf-sa-084'(suite) -> [];
'not-wf-sa-084'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/084.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/084.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1207,12 +1113,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-085
%% Type: not-wf
%% Sections: 2.3 [13]
-'not-wf-sa-085'(suite) -> [];
'not-wf-sa-085'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/085.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/085.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1220,12 +1125,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-086
%% Type: not-wf
%% Sections: 2.3 [13]
-'not-wf-sa-086'(suite) -> [];
'not-wf-sa-086'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/086.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/086.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1233,12 +1137,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-087
%% Type: not-wf
%% Sections: 2.3 [13]
-'not-wf-sa-087'(suite) -> [];
'not-wf-sa-087'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/087.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/087.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1246,12 +1149,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-088
%% Type: not-wf
%% Sections: 2.3 [10]
-'not-wf-sa-088'(suite) -> [];
'not-wf-sa-088'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/088.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/088.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1259,12 +1161,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-089
%% Type: not-wf
%% Sections: 4.2 [74]
-'not-wf-sa-089'(suite) -> [];
'not-wf-sa-089'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/089.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/089.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1272,12 +1173,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-090
%% Type: not-wf
%% Sections: 2.3 [10]
-'not-wf-sa-090'(suite) -> [];
'not-wf-sa-090'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/090.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/090.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1285,12 +1185,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-091
%% Type: not-wf
%% Sections: 4.2 [74]
-'not-wf-sa-091'(suite) -> [];
'not-wf-sa-091'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/091.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/091.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1298,12 +1197,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-092
%% Type: not-wf
%% Sections: 4.5
-'not-wf-sa-092'(suite) -> [];
'not-wf-sa-092'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/092.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/092.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1311,12 +1209,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-093
%% Type: not-wf
%% Sections: 4.1 [66]
-'not-wf-sa-093'(suite) -> [];
'not-wf-sa-093'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/093.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/093.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1324,12 +1221,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-094
%% Type: not-wf
%% Sections: 2.8 [24]
-'not-wf-sa-094'(suite) -> [];
'not-wf-sa-094'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/094.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/094.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1337,12 +1233,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-095
%% Type: not-wf
%% Sections: 2.8 [23]
-'not-wf-sa-095'(suite) -> [];
'not-wf-sa-095'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/095.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/095.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1350,12 +1245,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-096
%% Type: not-wf
%% Sections: 2.9 [32]
-'not-wf-sa-096'(suite) -> [];
'not-wf-sa-096'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/096.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/096.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1363,12 +1257,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-097
%% Type: not-wf
%% Sections: 2.8 [24]
-'not-wf-sa-097'(suite) -> [];
'not-wf-sa-097'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/097.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/097.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1376,12 +1269,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-098
%% Type: not-wf
%% Sections: 2.8 [23]
-'not-wf-sa-098'(suite) -> [];
'not-wf-sa-098'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/098.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/098.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1389,12 +1281,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-099
%% Type: not-wf
%% Sections: 2.8 [23]
-'not-wf-sa-099'(suite) -> [];
'not-wf-sa-099'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/099.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/099.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1402,12 +1293,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-100
%% Type: not-wf
%% Sections: 2.9 [32]
-'not-wf-sa-100'(suite) -> [];
'not-wf-sa-100'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/100.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/100.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1415,12 +1305,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-101
%% Type: not-wf
%% Sections: 4.3.3 [81]
-'not-wf-sa-101'(suite) -> [];
'not-wf-sa-101'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/101.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/101.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1428,12 +1317,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-102
%% Type: not-wf
%% Sections: 2.8 [26]
-'not-wf-sa-102'(suite) -> [];
'not-wf-sa-102'(Config) -> {skip, "Fix 2"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/102.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/102.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1441,12 +1329,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-103
%% Type: not-wf
%% Sections: 4.3.2
-'not-wf-sa-103'(suite) -> [];
'not-wf-sa-103'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/103.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/103.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1454,12 +1341,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-104
%% Type: not-wf
%% Sections: 4.3.2
-'not-wf-sa-104'(suite) -> [];
'not-wf-sa-104'(_Config) -> {skip, "Entity not correct tag pair NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/104.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/104.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1467,12 +1353,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-105
%% Type: not-wf
%% Sections: 2.7
-'not-wf-sa-105'(suite) -> [];
'not-wf-sa-105'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/105.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/105.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1480,12 +1365,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-106
%% Type: not-wf
%% Sections: 4.2
-'not-wf-sa-106'(suite) -> [];
'not-wf-sa-106'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/106.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/106.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1493,12 +1377,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-107
%% Type: not-wf
%% Sections: 2.8 [28]
-'not-wf-sa-107'(suite) -> [];
'not-wf-sa-107'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/107.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/107.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1506,12 +1389,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-108
%% Type: not-wf
%% Sections: 2.7 [19]
-'not-wf-sa-108'(suite) -> [];
'not-wf-sa-108'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/108.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/108.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1519,12 +1401,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-109
%% Type: not-wf
%% Sections: 4.2 [70]
-'not-wf-sa-109'(suite) -> [];
'not-wf-sa-109'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/109.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/109.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1532,15 +1413,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-110
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-110'(suite) -> [];
'not-wf-sa-110'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/110.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/110.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"&e;\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_,<<"&e;\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1548,12 +1428,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-111
%% Type: not-wf
%% Sections: 3.1 [43]
-'not-wf-sa-111'(suite) -> [];
'not-wf-sa-111'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/111.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/111.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1561,12 +1440,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-112
%% Type: not-wf
%% Sections: 2.7 [19]
-'not-wf-sa-112'(suite) -> [];
'not-wf-sa-112'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/112.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/112.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1574,12 +1452,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-113
%% Type: not-wf
%% Sections: 2.3 [9]
-'not-wf-sa-113'(suite) -> [];
'not-wf-sa-113'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/113.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/113.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1587,12 +1464,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-114
%% Type: not-wf
%% Sections: 2.3 [9]
-'not-wf-sa-114'(suite) -> [];
'not-wf-sa-114'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/114.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/114.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1600,12 +1476,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-115
%% Type: not-wf
%% Sections: 4.5
-'not-wf-sa-115'(suite) -> [];
'not-wf-sa-115'(_Config) -> {skip, "& expansion not correct"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/115.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/115.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1613,12 +1488,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-116
%% Type: not-wf
%% Sections: 4.3.2
-'not-wf-sa-116'(suite) -> [];
'not-wf-sa-116'(_Config) -> {skip, "& expansion not correct"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/116.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/116.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1626,12 +1500,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-117
%% Type: not-wf
%% Sections: 4.3.2
-'not-wf-sa-117'(suite) -> [];
'not-wf-sa-117'(_Config) -> {skip, "& expansion not correct"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/117.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/117.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1639,12 +1512,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-118
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-118'(suite) -> [];
'not-wf-sa-118'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/118.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/118.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1652,12 +1524,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-119
%% Type: not-wf
%% Sections: 4.3.2
-'not-wf-sa-119'(suite) -> [];
'not-wf-sa-119'(_Config) -> {skip, "& expansion not correct"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/119.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/119.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1665,12 +1536,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-120
%% Type: not-wf
%% Sections: 4.5
-'not-wf-sa-120'(suite) -> [];
'not-wf-sa-120'(_Config) -> {skip, "& expansion not correct"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/120.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/120.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1678,12 +1548,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-121
%% Type: not-wf
%% Sections: 4.1 [68]
-'not-wf-sa-121'(suite) -> [];
'not-wf-sa-121'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/121.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/121.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1691,12 +1560,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-122
%% Type: not-wf
%% Sections: 3.2.1 [47]
-'not-wf-sa-122'(suite) -> [];
'not-wf-sa-122'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/122.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/122.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1704,12 +1572,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-123
%% Type: not-wf
%% Sections: 3.2.1 [48]
-'not-wf-sa-123'(suite) -> [];
'not-wf-sa-123'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/123.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/123.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1717,12 +1584,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-124
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'not-wf-sa-124'(suite) -> [];
'not-wf-sa-124'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/124.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/124.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1730,12 +1596,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-125
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'not-wf-sa-125'(suite) -> [];
'not-wf-sa-125'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/125.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/125.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1743,12 +1608,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-126
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'not-wf-sa-126'(suite) -> [];
'not-wf-sa-126'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/126.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/126.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1756,12 +1620,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-127
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'not-wf-sa-127'(suite) -> [];
'not-wf-sa-127'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/127.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/127.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1769,12 +1632,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-128
%% Type: not-wf
%% Sections: 2.7 [18]
-'not-wf-sa-128'(suite) -> [];
'not-wf-sa-128'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/128.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/128.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1782,12 +1644,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-129
%% Type: not-wf
%% Sections: 3.2 [45]
-'not-wf-sa-129'(suite) -> [];
'not-wf-sa-129'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/129.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/129.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1795,12 +1656,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-130
%% Type: not-wf
%% Sections: 3.2 [45]
-'not-wf-sa-130'(suite) -> [];
'not-wf-sa-130'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/130.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/130.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1808,12 +1668,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-131
%% Type: not-wf
%% Sections: 3.2 [45]
-'not-wf-sa-131'(suite) -> [];
'not-wf-sa-131'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/131.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/131.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1821,12 +1680,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-132
%% Type: not-wf
%% Sections: 3.2.1 [50]
-'not-wf-sa-132'(suite) -> [];
'not-wf-sa-132'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/132.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/132.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1834,12 +1692,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-133
%% Type: not-wf
%% Sections: 3.2.1
-'not-wf-sa-133'(suite) -> [];
'not-wf-sa-133'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/133.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/133.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1847,12 +1704,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-134
%% Type: not-wf
%% Sections: 3.2.1
-'not-wf-sa-134'(suite) -> [];
'not-wf-sa-134'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/134.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/134.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1860,12 +1716,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-135
%% Type: not-wf
%% Sections: 3.2.1 [47]
-'not-wf-sa-135'(suite) -> [];
'not-wf-sa-135'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/135.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/135.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1873,12 +1728,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-136
%% Type: not-wf
%% Sections: 3.2 [45]
-'not-wf-sa-136'(suite) -> [];
'not-wf-sa-136'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/136.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/136.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1886,12 +1740,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-137
%% Type: not-wf
%% Sections: 3.2 [45]
-'not-wf-sa-137'(suite) -> [];
'not-wf-sa-137'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/137.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/137.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1899,12 +1752,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-138
%% Type: not-wf
%% Sections: 3.2.1 [48]
-'not-wf-sa-138'(suite) -> [];
'not-wf-sa-138'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/138.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/138.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1912,12 +1764,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-139
%% Type: not-wf
%% Sections: 3.2.1 [46]
-'not-wf-sa-139'(suite) -> [];
'not-wf-sa-139'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/139.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/139.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1925,12 +1776,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-140
%% Type: not-wf
%% Sections: 2.3 [4]
-'not-wf-sa-140'(suite) -> [];
'not-wf-sa-140'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/140.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/140.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1938,12 +1788,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-141
%% Type: not-wf
%% Sections: 2.3 [5]
-'not-wf-sa-141'(suite) -> [];
'not-wf-sa-141'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/141.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/141.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1951,12 +1800,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-142
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-142'(suite) -> [];
'not-wf-sa-142'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/142.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/142.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1964,12 +1812,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-143
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-143'(suite) -> [];
'not-wf-sa-143'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/143.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/143.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1977,12 +1824,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-144
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-144'(suite) -> [];
'not-wf-sa-144'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/144.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/144.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -1990,12 +1836,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-145
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-145'(suite) -> [];
'not-wf-sa-145'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/145.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/145.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2003,12 +1848,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-146
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-146'(suite) -> [];
'not-wf-sa-146'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/146.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/146.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2016,12 +1860,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-147
%% Type: not-wf
%% Sections: 2.8 [22]
-'not-wf-sa-147'(suite) -> [];
'not-wf-sa-147'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/147.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/147.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2029,12 +1872,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-148
%% Type: not-wf
%% Sections: 2.8 [22]
-'not-wf-sa-148'(suite) -> [];
'not-wf-sa-148'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/148.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/148.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2042,12 +1884,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-149
%% Type: not-wf
%% Sections: 2.8 [28]
-'not-wf-sa-149'(suite) -> [];
'not-wf-sa-149'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/149.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/149.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2055,12 +1896,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-150
%% Type: not-wf
%% Sections: 3.1 [43]
-'not-wf-sa-150'(suite) -> [];
'not-wf-sa-150'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/150.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/150.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2068,16 +1908,15 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-151
%% Type: not-wf
%% Sections: 2.8 [27]
-'not-wf-sa-151'(suite) -> [];
'not-wf-sa-151'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/151.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/151.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"<?xml version=\"1.0\"?>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- % ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- % ?line check_result(R, "not-wf").
+ {ok,_,<<"<?xml version=\"1.0\"?>\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ % R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ % check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2085,12 +1924,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-152
%% Type: not-wf
%% Sections: 2.8 [22]
-'not-wf-sa-152'(suite) -> [];
'not-wf-sa-152'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/152.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/152.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2098,12 +1936,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-153
%% Type: not-wf
%% Sections: 4.3.2
-'not-wf-sa-153'(suite) -> [];
'not-wf-sa-153'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/153.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/153.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2111,12 +1948,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-154
%% Type: not-wf
%% Sections: 2.8 2.6 [23, 17]
-'not-wf-sa-154'(suite) -> [];
'not-wf-sa-154'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/154.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/154.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2124,12 +1960,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-155
%% Type: not-wf
%% Sections: 2.8 2.6 [23, 17]
-'not-wf-sa-155'(suite) -> [];
'not-wf-sa-155'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/155.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/155.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2137,12 +1972,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-156
%% Type: not-wf
%% Sections: 2.8 2.6 [23, 17]
-'not-wf-sa-156'(suite) -> [];
'not-wf-sa-156'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/156.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/156.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2150,12 +1984,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-157
%% Type: not-wf
%% Sections: 2.6 [17]
-'not-wf-sa-157'(suite) -> [];
'not-wf-sa-157'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/157.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/157.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2163,12 +1996,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-158
%% Type: not-wf
%% Sections: 3.3 [52]
-'not-wf-sa-158'(suite) -> [];
'not-wf-sa-158'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/158.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/158.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2176,12 +2008,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-159
%% Type: not-wf
%% Sections: 2.3 [9]
-'not-wf-sa-159'(suite) -> [];
'not-wf-sa-159'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/159.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/159.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2189,12 +2020,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-160
%% Type: not-wf
%% Sections: 2.8
-'not-wf-sa-160'(suite) -> [];
'not-wf-sa-160'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/160.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/160.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2202,12 +2032,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-161
%% Type: not-wf
%% Sections: 2.8
-'not-wf-sa-161'(suite) -> [];
'not-wf-sa-161'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/161.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/161.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2215,12 +2044,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-162
%% Type: not-wf
%% Sections: 2.8
-'not-wf-sa-162'(suite) -> [];
'not-wf-sa-162'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/162.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/162.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2228,12 +2056,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-163
%% Type: not-wf
%% Sections: 4.1 [69]
-'not-wf-sa-163'(suite) -> [];
'not-wf-sa-163'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/163.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/163.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2241,12 +2068,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-164
%% Type: not-wf
%% Sections: 4.1 [69]
-'not-wf-sa-164'(suite) -> [];
'not-wf-sa-164'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/164.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/164.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2254,12 +2080,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-165
%% Type: not-wf
%% Sections: 4.2 [72]
-'not-wf-sa-165'(suite) -> [];
'not-wf-sa-165'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/165.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/165.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2267,12 +2092,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-166
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-166'(suite) -> [];
'not-wf-sa-166'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/166.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/166.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2280,12 +2104,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-167
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-167'(suite) -> [];
'not-wf-sa-167'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/167.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/167.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2293,12 +2116,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-168
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-168'(suite) -> [];
'not-wf-sa-168'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/168.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/168.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2306,12 +2128,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-169
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-169'(suite) -> [];
'not-wf-sa-169'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/169.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/169.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2319,12 +2140,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-170
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-170'(suite) -> [];
'not-wf-sa-170'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/170.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/170.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2332,12 +2152,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-171
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-171'(suite) -> [];
'not-wf-sa-171'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/171.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/171.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2345,12 +2164,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-172
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-172'(suite) -> [];
'not-wf-sa-172'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/172.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/172.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2358,12 +2176,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-173
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-173'(suite) -> [];
'not-wf-sa-173'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/173.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/173.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2371,12 +2188,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-174
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-174'(suite) -> [];
'not-wf-sa-174'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/174.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/174.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2384,12 +2200,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-175
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-175'(suite) -> [];
'not-wf-sa-175'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/175.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/175.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2397,12 +2212,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-176
%% Type: not-wf
%% Sections: 3 [39]
-'not-wf-sa-176'(suite) -> [];
'not-wf-sa-176'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/176.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/176.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2410,12 +2224,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-177
%% Type: not-wf
%% Sections: 2.2 [2]
-'not-wf-sa-177'(suite) -> [];
'not-wf-sa-177'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/177.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/177.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2423,12 +2236,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-178
%% Type: not-wf
%% Sections: 3.1 [41]
-'not-wf-sa-178'(suite) -> [];
'not-wf-sa-178'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/178.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/178.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2436,12 +2248,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-179
%% Type: not-wf
%% Sections: 4.1 [66]
-'not-wf-sa-179'(suite) -> [];
'not-wf-sa-179'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/179.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/179.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2449,12 +2260,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-180
%% Type: not-wf
%% Sections: 4.1
-'not-wf-sa-180'(suite) -> [];
'not-wf-sa-180'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/180.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/180.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2462,12 +2272,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-181
%% Type: not-wf
%% Sections: 4.3.2
-'not-wf-sa-181'(suite) -> [];
'not-wf-sa-181'(_Config) -> {skip, "Entity not tag pair NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/181.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/181.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2475,12 +2284,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-182
%% Type: not-wf
%% Sections: 4.3.2
-'not-wf-sa-182'(suite) -> [];
'not-wf-sa-182'(_Config) -> {skip, "Entity not tag pair NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/182.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/182.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2488,12 +2296,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-183
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'not-wf-sa-183'(suite) -> [];
'not-wf-sa-183'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/183.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/183.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2501,12 +2308,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-184
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'not-wf-sa-184'(suite) -> [];
'not-wf-sa-184'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/184.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/184.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2514,12 +2320,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-185
%% Type: not-wf
%% Sections: 4.1
-'not-wf-sa-185'(suite) -> [];
'not-wf-sa-185'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/185.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/185.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2527,12 +2332,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa-186
%% Type: not-wf
%% Sections: 3.1 [44]
-'not-wf-sa-186'(suite) -> [];
'not-wf-sa-186'(Config) -> {skip, "Fix 2"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/186.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/sa/186.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2540,12 +2344,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-not-sa-001
%% Type: not-wf
%% Sections: 3.4 [62]
-'not-wf-not-sa-001'(suite) -> [];
'not-wf-not-sa-001'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/001.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/001.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2553,12 +2356,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-not-sa-002
%% Type: not-wf
%% Sections: 2.6 [17]
-'not-wf-not-sa-002'(suite) -> [];
'not-wf-not-sa-002'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/002.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/002.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2566,12 +2368,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-not-sa-003
%% Type: not-wf
%% Sections: 3.4 [62]
-'not-wf-not-sa-003'(suite) -> [];
'not-wf-not-sa-003'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/003.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/003.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2579,12 +2380,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-not-sa-004
%% Type: not-wf
%% Sections: 3.4 [62]
-'not-wf-not-sa-004'(suite) -> [];
'not-wf-not-sa-004'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/004.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/004.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2592,12 +2392,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-not-sa-005
%% Type: error
%% Sections: 4.1
-'not-wf-not-sa-005'(suite) -> [];
'not-wf-not-sa-005'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/005.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/005.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -2605,12 +2404,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-not-sa-006
%% Type: not-wf
%% Sections: 3.4 [62]
-'not-wf-not-sa-006'(suite) -> [];
'not-wf-not-sa-006'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/006.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/006.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2618,12 +2416,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-not-sa-007
%% Type: not-wf
%% Sections: 4.3.2 [79]
-'not-wf-not-sa-007'(suite) -> [];
'not-wf-not-sa-007'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/007.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/007.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2631,12 +2428,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-not-sa-008
%% Type: not-wf
%% Sections: 4.1 [69]
-'not-wf-not-sa-008'(suite) -> [];
'not-wf-not-sa-008'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/008.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/008.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2644,12 +2440,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-not-sa-009
%% Type: not-wf
%% Sections: 2.8
-'not-wf-not-sa-009'(suite) -> [];
'not-wf-not-sa-009'(_Config) -> {skip, "not a complete content in PE NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/009.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/not-sa/009.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2657,12 +2452,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-ext-sa-001
%% Type: not-wf
%% Sections: 4.1
-'not-wf-ext-sa-001'(suite) -> [];
'not-wf-ext-sa-001'(Config) -> {skip, "Fix 1"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/ext-sa/001.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/ext-sa/001.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2670,12 +2464,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-ext-sa-002
%% Type: not-wf
%% Sections: 4.3.1 4.3.2 [77, 78]
-'not-wf-ext-sa-002'(suite) -> [];
'not-wf-ext-sa-002'(Config) -> {skip, "Fix 1"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/ext-sa/002.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/ext-sa/002.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2683,12 +2476,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-ext-sa-003
%% Type: not-wf
%% Sections: 2.6 [17]
-'not-wf-ext-sa-003'(suite) -> [];
'not-wf-ext-sa-003'(Config) -> {skip, "Fix 1"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/ext-sa/003.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","not-wf/ext-sa/003.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -2696,12 +2488,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: invalid--002
%% Type: invalid
%% Sections: 3.2.1
-'invalid--002'(suite) -> [];
'invalid--002'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","invalid/002.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","invalid/002.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2709,12 +2500,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: invalid--005
%% Type: invalid
%% Sections: 2.8
-'invalid--005'(suite) -> [];
'invalid--005'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","invalid/005.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","invalid/005.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2722,12 +2512,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: invalid--006
%% Type: invalid
%% Sections: 2.8
-'invalid--006'(suite) -> [];
'invalid--006'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","invalid/006.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","invalid/006.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2735,12 +2524,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: invalid-not-sa-022
%% Type: invalid
%% Sections: 3.4 [62]
-'invalid-not-sa-022'(suite) -> [];
'invalid-not-sa-022'(_Config) -> {skip, "DTD element content parsing NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","invalid/not-sa/022.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "invalid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","invalid/not-sa/022.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2748,12 +2536,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-001
%% Type: valid
%% Sections: 3.2.2 [51]
-'valid-sa-001'(suite) -> [];
'valid-sa-001'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/001.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/001.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2761,12 +2548,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-002
%% Type: valid
%% Sections: 3.1 [40]
-'valid-sa-002'(suite) -> [];
'valid-sa-002'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/002.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/002.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2774,12 +2560,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-003
%% Type: valid
%% Sections: 3.1 [42]
-'valid-sa-003'(suite) -> [];
'valid-sa-003'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/003.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/003.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2787,12 +2572,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-004
%% Type: valid
%% Sections: 3.1 [41]
-'valid-sa-004'(suite) -> [];
'valid-sa-004'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/004.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/004.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2800,12 +2584,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-005
%% Type: valid
%% Sections: 3.1 [40]
-'valid-sa-005'(suite) -> [];
'valid-sa-005'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/005.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/005.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2813,12 +2596,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-006
%% Type: valid
%% Sections: 3.1 [41]
-'valid-sa-006'(suite) -> [];
'valid-sa-006'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/006.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/006.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2826,12 +2608,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-007
%% Type: valid
%% Sections: 3.1 4.6 [43]
-'valid-sa-007'(suite) -> [];
'valid-sa-007'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/007.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/007.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2839,12 +2620,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-008
%% Type: valid
%% Sections: 2.4 3.1 [43]
-'valid-sa-008'(suite) -> [];
'valid-sa-008'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/008.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/008.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2852,12 +2632,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-009
%% Type: valid
%% Sections: 2.3 3.1 [43]
-'valid-sa-009'(suite) -> [];
'valid-sa-009'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/009.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/009.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2865,12 +2644,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-010
%% Type: valid
%% Sections: 3.1 [40]
-'valid-sa-010'(suite) -> [];
'valid-sa-010'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/010.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/010.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2878,12 +2656,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-011
%% Type: valid
%% Sections: 3.1 [40]
-'valid-sa-011'(suite) -> [];
'valid-sa-011'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/011.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/011.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2891,12 +2668,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-012
%% Type: valid
%% Sections: 2.3 [4]
-'valid-sa-012'(suite) -> [];
'valid-sa-012'(Config) -> {skip, "Fix 1"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/012.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "valid").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/012.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2904,12 +2680,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-013
%% Type: valid
%% Sections: 2.3 3.1 [13] [40]
-'valid-sa-013'(suite) -> [];
'valid-sa-013'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/013.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/013.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2917,12 +2692,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-014
%% Type: valid
%% Sections: 2.3 3.1 [13] [40]
-'valid-sa-014'(suite) -> [];
'valid-sa-014'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/014.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/014.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2930,12 +2704,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-015
%% Type: valid
%% Sections: 2.3 3.1 [13] [40]
-'valid-sa-015'(suite) -> [];
'valid-sa-015'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/015.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/015.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2943,12 +2716,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-016
%% Type: valid
%% Sections: 2.6 3.1 [16] [43]
-'valid-sa-016'(suite) -> [];
'valid-sa-016'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/016.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/016.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2956,12 +2728,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-017
%% Type: valid
%% Sections: 2.6 3.1 [16] [43]
-'valid-sa-017'(suite) -> [];
'valid-sa-017'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/017.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/017.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2969,12 +2740,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-018
%% Type: valid
%% Sections: 2.7 3.1 [18] [43]
-'valid-sa-018'(suite) -> [];
'valid-sa-018'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/018.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/018.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2982,12 +2752,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-019
%% Type: valid
%% Sections: 2.7 3.1 [18] [43]
-'valid-sa-019'(suite) -> [];
'valid-sa-019'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/019.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/019.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -2995,12 +2764,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-020
%% Type: valid
%% Sections: 2.7 3.1 [18] [43]
-'valid-sa-020'(suite) -> [];
'valid-sa-020'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/020.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/020.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3008,12 +2776,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-021
%% Type: valid
%% Sections: 2.5 3.1 [15] [43]
-'valid-sa-021'(suite) -> [];
'valid-sa-021'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/021.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/021.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3021,12 +2788,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-022
%% Type: valid
%% Sections: 2.5 3.1 [15] [43]
-'valid-sa-022'(suite) -> [];
'valid-sa-022'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/022.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/022.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3034,12 +2800,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-023
%% Type: valid
%% Sections: 3.1 [43]
-'valid-sa-023'(suite) -> [];
'valid-sa-023'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/023.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/023.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3047,12 +2812,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-024
%% Type: valid
%% Sections: 3.1 4.1 [43] [66]
-'valid-sa-024'(suite) -> [];
'valid-sa-024'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/024.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/024.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3060,12 +2824,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-025
%% Type: valid
%% Sections: 3.2 [46]
-'valid-sa-025'(suite) -> [];
'valid-sa-025'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/025.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/025.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3073,12 +2836,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-026
%% Type: valid
%% Sections: 3.2 [46]
-'valid-sa-026'(suite) -> [];
'valid-sa-026'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/026.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/026.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3086,12 +2848,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-027
%% Type: valid
%% Sections: 3.2 [46]
-'valid-sa-027'(suite) -> [];
'valid-sa-027'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/027.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/027.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3099,12 +2860,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-028
%% Type: valid
%% Sections: 2.8 [24]
-'valid-sa-028'(suite) -> [];
'valid-sa-028'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/028.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/028.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3112,12 +2872,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-029
%% Type: valid
%% Sections: 2.8 [24]
-'valid-sa-029'(suite) -> [];
'valid-sa-029'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/029.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/029.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3125,12 +2884,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-030
%% Type: valid
%% Sections: 2.8 [25]
-'valid-sa-030'(suite) -> [];
'valid-sa-030'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/030.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/030.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3138,12 +2896,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-031
%% Type: valid
%% Sections: 4.3.3 [80]
-'valid-sa-031'(suite) -> [];
'valid-sa-031'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/031.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/031.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3151,12 +2908,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-032
%% Type: valid
%% Sections: 2.9 [32]
-'valid-sa-032'(suite) -> [];
'valid-sa-032'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/032.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/032.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3164,12 +2920,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-033
%% Type: valid
%% Sections: 2.8 [23]
-'valid-sa-033'(suite) -> [];
'valid-sa-033'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/033.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/033.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3177,12 +2932,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-034
%% Type: valid
%% Sections: 3.1 [44]
-'valid-sa-034'(suite) -> [];
'valid-sa-034'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/034.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/034.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3190,12 +2944,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-035
%% Type: valid
%% Sections: 3.1 [44]
-'valid-sa-035'(suite) -> [];
'valid-sa-035'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/035.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/035.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3203,12 +2956,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-036
%% Type: valid
%% Sections: 2.6 [16]
-'valid-sa-036'(suite) -> [];
'valid-sa-036'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/036.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/036.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3216,12 +2968,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-037
%% Type: valid
%% Sections: 2.6 [15]
-'valid-sa-037'(suite) -> [];
'valid-sa-037'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/037.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/037.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3229,12 +2980,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-038
%% Type: valid
%% Sections: 2.6 [15]
-'valid-sa-038'(suite) -> [];
'valid-sa-038'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/038.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/038.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3242,12 +2992,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-039
%% Type: valid
%% Sections: 2.6 [16]
-'valid-sa-039'(suite) -> [];
'valid-sa-039'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/039.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/039.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3255,12 +3004,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-040
%% Type: valid
%% Sections: 3.3 3.3.1 [52] [54]
-'valid-sa-040'(suite) -> [];
'valid-sa-040'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/040.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/040.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3268,12 +3016,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-041
%% Type: valid
%% Sections: 3.3.1 4.1 [54] [66]
-'valid-sa-041'(suite) -> [];
'valid-sa-041'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/041.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/041.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3281,12 +3028,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-042
%% Type: valid
%% Sections: 3.3.1 4.1 [54] [66]
-'valid-sa-042'(suite) -> [];
'valid-sa-042'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/042.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/042.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3294,12 +3040,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-043
%% Type: valid
%% Sections: 3.3
-'valid-sa-043'(suite) -> [];
'valid-sa-043'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/043.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/043.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3307,12 +3052,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-044
%% Type: valid
%% Sections: 3.1 [44]
-'valid-sa-044'(suite) -> [];
'valid-sa-044'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/044.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/044.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3320,12 +3064,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-045
%% Type: valid
%% Sections: 3.3 [52]
-'valid-sa-045'(suite) -> [];
'valid-sa-045'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/045.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/045.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3333,12 +3076,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-046
%% Type: valid
%% Sections: 3.3 [52]
-'valid-sa-046'(suite) -> [];
'valid-sa-046'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/046.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/046.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3346,12 +3088,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-047
%% Type: valid
%% Sections: 3.1 [43]
-'valid-sa-047'(suite) -> [];
'valid-sa-047'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/047.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/047.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3359,12 +3100,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-048
%% Type: valid
%% Sections: 2.4 3.1 [14] [43]
-'valid-sa-048'(suite) -> [];
'valid-sa-048'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/048.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/048.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3372,12 +3112,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-049
%% Type: valid
%% Sections: 2.2 [2]
-'valid-sa-049'(suite) -> [];
'valid-sa-049'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/049.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/049.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3385,12 +3124,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-050
%% Type: valid
%% Sections: 2.2 [2]
-'valid-sa-050'(suite) -> [];
'valid-sa-050'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/050.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/050.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3398,12 +3136,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-051
%% Type: valid
%% Sections: 2.2 [2]
-'valid-sa-051'(suite) -> [];
'valid-sa-051'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/051.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/051.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3411,12 +3148,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-052
%% Type: valid
%% Sections: 2.2 [2]
-'valid-sa-052'(suite) -> [];
'valid-sa-052'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/052.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/052.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3424,12 +3160,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-053
%% Type: valid
%% Sections: 4.4.2
-'valid-sa-053'(suite) -> [];
'valid-sa-053'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/053.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/053.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3437,12 +3172,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-054
%% Type: valid
%% Sections: 3.1 [40] [42]
-'valid-sa-054'(suite) -> [];
'valid-sa-054'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/054.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/054.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3450,12 +3184,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-055
%% Type: valid
%% Sections: 2.6 2.10 [16]
-'valid-sa-055'(suite) -> [];
'valid-sa-055'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/055.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/055.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3463,12 +3196,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-056
%% Type: valid
%% Sections: 3.3.1 4.1 [54] [66]
-'valid-sa-056'(suite) -> [];
'valid-sa-056'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/056.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/056.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3476,12 +3208,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-057
%% Type: valid
%% Sections: 3.2.1 [47]
-'valid-sa-057'(suite) -> [];
'valid-sa-057'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/057.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/057.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3489,12 +3220,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-058
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-058'(suite) -> [];
'valid-sa-058'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/058.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/058.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3502,12 +3232,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-059
%% Type: valid
%% Sections: 3.2 3.3 [46] [53]
-'valid-sa-059'(suite) -> [];
'valid-sa-059'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/059.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/059.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3515,12 +3244,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-060
%% Type: valid
%% Sections: 4.1 [66]
-'valid-sa-060'(suite) -> [];
'valid-sa-060'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/060.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/060.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3528,12 +3256,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-061
%% Type: valid
%% Sections: 4.1 [66]
-'valid-sa-061'(suite) -> [];
'valid-sa-061'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/061.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/061.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3541,12 +3268,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-062
%% Type: valid
%% Sections: 4.1 [66]
-'valid-sa-062'(suite) -> [];
'valid-sa-062'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/062.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/062.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3554,12 +3280,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-063
%% Type: valid
%% Sections: 2.3 [5]
-'valid-sa-063'(suite) -> [];
'valid-sa-063'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/063.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/063.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3567,12 +3292,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-064
%% Type: valid
%% Sections: 4.1 [66]
-'valid-sa-064'(suite) -> [];
'valid-sa-064'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/064.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/064.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3580,12 +3304,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-065
%% Type: valid
%% Sections: 4.5
-'valid-sa-065'(suite) -> [];
'valid-sa-065'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/065.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/065.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3593,12 +3316,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-066
%% Type: valid
%% Sections: 4.1 [66]
-'valid-sa-066'(suite) -> [];
'valid-sa-066'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/066.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/066.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3606,12 +3328,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-067
%% Type: valid
%% Sections: 4.1 [66]
-'valid-sa-067'(suite) -> [];
'valid-sa-067'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/067.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/067.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3619,12 +3340,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-068
%% Type: valid
%% Sections: 2.11, 4.5
-'valid-sa-068'(suite) -> [];
'valid-sa-068'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/068.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/068.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3632,12 +3352,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-069
%% Type: valid
%% Sections: 4.7
-'valid-sa-069'(suite) -> [];
'valid-sa-069'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/069.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/069.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3645,12 +3364,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-070
%% Type: valid
%% Sections: 4.4.8
-'valid-sa-070'(suite) -> [];
'valid-sa-070'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/070.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/070.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3658,12 +3376,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-071
%% Type: valid
%% Sections: 3.3 3.3.1 [52] [56]
-'valid-sa-071'(suite) -> [];
'valid-sa-071'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/071.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/071.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3671,12 +3388,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-072
%% Type: valid
%% Sections: 3.3 3.3.1 [52] [56]
-'valid-sa-072'(suite) -> [];
'valid-sa-072'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/072.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/072.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3684,12 +3400,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-073
%% Type: valid
%% Sections: 3.3 3.3.1 [52] [56]
-'valid-sa-073'(suite) -> [];
'valid-sa-073'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/073.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/073.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3697,12 +3412,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-074
%% Type: valid
%% Sections: 3.3 3.3.1 [52] [56]
-'valid-sa-074'(suite) -> [];
'valid-sa-074'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/074.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/074.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3710,12 +3424,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-075
%% Type: valid
%% Sections: 3.3 3.3.1 [52] [56]
-'valid-sa-075'(suite) -> [];
'valid-sa-075'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/075.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/075.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3723,12 +3436,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-076
%% Type: valid
%% Sections: 3.3.1
-'valid-sa-076'(suite) -> [];
'valid-sa-076'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/076.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/076.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3736,12 +3448,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-077
%% Type: valid
%% Sections: 3.3 3.3.1 [52] [54]
-'valid-sa-077'(suite) -> [];
'valid-sa-077'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/077.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/077.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3749,12 +3460,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-078
%% Type: valid
%% Sections: 3.3 3.3.1 [52] [54]
-'valid-sa-078'(suite) -> [];
'valid-sa-078'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/078.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/078.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3762,12 +3472,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-079
%% Type: valid
%% Sections: 3.3 3.3.2 [52] [60]
-'valid-sa-079'(suite) -> [];
'valid-sa-079'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/079.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/079.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3775,12 +3484,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-080
%% Type: valid
%% Sections: 3.3 3.3.2 [52] [60]
-'valid-sa-080'(suite) -> [];
'valid-sa-080'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/080.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/080.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3788,12 +3496,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-081
%% Type: valid
%% Sections: 3.2.1 [50]
-'valid-sa-081'(suite) -> [];
'valid-sa-081'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/081.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/081.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3801,12 +3508,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-082
%% Type: valid
%% Sections: 4.2 [72]
-'valid-sa-082'(suite) -> [];
'valid-sa-082'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/082.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/082.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3814,12 +3520,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-083
%% Type: valid
%% Sections: 4.2 [72]
-'valid-sa-083'(suite) -> [];
'valid-sa-083'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/083.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/083.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3827,12 +3532,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-084
%% Type: valid
%% Sections: 2.10
-'valid-sa-084'(suite) -> [];
'valid-sa-084'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/084.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/084.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3840,12 +3544,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-085
%% Type: valid
%% Sections: 4
-'valid-sa-085'(suite) -> [];
'valid-sa-085'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/085.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/085.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3853,12 +3556,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-086
%% Type: valid
%% Sections: 4.2
-'valid-sa-086'(suite) -> [];
'valid-sa-086'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/086.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/086.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3866,12 +3568,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-087
%% Type: valid
%% Sections: 4.5
-'valid-sa-087'(suite) -> [];
'valid-sa-087'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/087.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/087.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3879,12 +3580,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-088
%% Type: valid
%% Sections: 4.5
-'valid-sa-088'(suite) -> [];
'valid-sa-088'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/088.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/088.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3892,12 +3592,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-089
%% Type: valid
%% Sections: 4.1 [66]
-'valid-sa-089'(suite) -> [];
'valid-sa-089'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/089.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/089.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3905,12 +3604,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-090
%% Type: valid
%% Sections: 3.3.1
-'valid-sa-090'(suite) -> [];
'valid-sa-090'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/090.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/090.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3918,12 +3616,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-091
%% Type: valid
%% Sections: 3.3.1
-'valid-sa-091'(suite) -> [];
'valid-sa-091'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/091.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/091.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3931,12 +3628,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-092
%% Type: valid
%% Sections: 2.3 2.10
-'valid-sa-092'(suite) -> [];
'valid-sa-092'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/092.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/092.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3944,12 +3640,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-093
%% Type: valid
%% Sections: 2.10
-'valid-sa-093'(suite) -> [];
'valid-sa-093'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/093.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/093.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3957,12 +3652,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-094
%% Type: valid
%% Sections: 2.8
-'valid-sa-094'(suite) -> [];
'valid-sa-094'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/094.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/094.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3970,12 +3664,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-095
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-095'(suite) -> [];
'valid-sa-095'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/095.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/095.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3983,12 +3676,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-096
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-096'(suite) -> [];
'valid-sa-096'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/096.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/096.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -3996,12 +3688,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-097
%% Type: valid
%% Sections: 3.3
-'valid-sa-097'(suite) -> [];
'valid-sa-097'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/097.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/097.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4009,12 +3700,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-098
%% Type: valid
%% Sections: 2.6 2.10 [16]
-'valid-sa-098'(suite) -> [];
'valid-sa-098'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/098.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/098.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4022,12 +3712,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-099
%% Type: valid
%% Sections: 4.3.3 [81]
-'valid-sa-099'(suite) -> [];
'valid-sa-099'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/099.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/099.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4035,12 +3724,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-100
%% Type: valid
%% Sections: 2.3 [12]
-'valid-sa-100'(suite) -> [];
'valid-sa-100'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/100.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/100.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4048,12 +3736,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-101
%% Type: valid
%% Sections: 4.5
-'valid-sa-101'(suite) -> [];
'valid-sa-101'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/101.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/101.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4061,12 +3748,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-102
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-102'(suite) -> [];
'valid-sa-102'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/102.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/102.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4074,12 +3760,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-103
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-103'(suite) -> [];
'valid-sa-103'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/103.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/103.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4087,12 +3772,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-104
%% Type: valid
%% Sections: 3.1 [40]
-'valid-sa-104'(suite) -> [];
'valid-sa-104'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/104.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/104.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4100,12 +3784,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-105
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-105'(suite) -> [];
'valid-sa-105'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/105.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/105.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4113,12 +3796,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-106
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-106'(suite) -> [];
'valid-sa-106'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/106.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/106.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4126,12 +3808,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-107
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-107'(suite) -> [];
'valid-sa-107'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/107.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/107.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4139,12 +3820,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-108
%% Type: valid
%% Sections: 2.11, 3.3.3
-'valid-sa-108'(suite) -> [];
'valid-sa-108'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/108.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/108.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4152,12 +3832,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-109
%% Type: valid
%% Sections: 2.3 3.1 [10][40][41]
-'valid-sa-109'(suite) -> [];
'valid-sa-109'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/109.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/109.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4165,12 +3844,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-110
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-110'(suite) -> [];
'valid-sa-110'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/110.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/110.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4178,12 +3856,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-111
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-111'(suite) -> [];
'valid-sa-111'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/111.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/111.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4191,12 +3868,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-112
%% Type: valid
%% Sections: 3.2.1 [48][49]
-'valid-sa-112'(suite) -> [];
'valid-sa-112'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/112.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/112.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4204,12 +3880,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-113
%% Type: valid
%% Sections: 3.3 [52][53]
-'valid-sa-113'(suite) -> [];
'valid-sa-113'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/113.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/113.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4217,12 +3892,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-114
%% Type: valid
%% Sections: 2.7 [20]
-'valid-sa-114'(suite) -> [];
'valid-sa-114'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/114.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/114.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4230,12 +3904,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-115
%% Type: valid
%% Sections: 3.3.3
-'valid-sa-115'(suite) -> [];
'valid-sa-115'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/115.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/115.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4243,12 +3916,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-116
%% Type: valid
%% Sections: 2.11
-'valid-sa-116'(suite) -> [];
'valid-sa-116'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/116.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/116.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4256,12 +3928,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-117
%% Type: valid
%% Sections: 4.5
-'valid-sa-117'(suite) -> [];
'valid-sa-117'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/117.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/117.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4269,12 +3940,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-118
%% Type: valid
%% Sections: 4.5
-'valid-sa-118'(suite) -> [];
'valid-sa-118'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/118.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/118.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4282,12 +3952,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-sa-119
%% Type: valid
%% Sections: 2.5
-'valid-sa-119'(suite) -> [];
'valid-sa-119'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/119.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/sa/119.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4295,12 +3964,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-001
%% Type: valid
%% Sections: 4.2.2 [75]
-'valid-not-sa-001'(suite) -> [];
'valid-not-sa-001'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/001.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/001.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4308,12 +3976,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-002
%% Type: valid
%% Sections: 4.2.2 [75]
-'valid-not-sa-002'(suite) -> [];
'valid-not-sa-002'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/002.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/002.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4321,12 +3988,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-003
%% Type: valid
%% Sections: 4.1 [69]
-'valid-not-sa-003'(suite) -> [];
'valid-not-sa-003'(_Config) -> {skip, "external entity NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/003.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/003.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4334,12 +4000,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-004
%% Type: valid
%% Sections: 4.1 [69]
-'valid-not-sa-004'(suite) -> [];
'valid-not-sa-004'(_Config) -> {skip, "external entity NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/004.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/004.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4347,12 +4012,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-005
%% Type: valid
%% Sections: 4.1 [69]
-'valid-not-sa-005'(suite) -> [];
'valid-not-sa-005'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/005.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/005.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4360,12 +4024,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-006
%% Type: valid
%% Sections: 3.3 [52]
-'valid-not-sa-006'(suite) -> [];
'valid-not-sa-006'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/006.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/006.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4373,12 +4036,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-007
%% Type: valid
%% Sections: 3.3 [52]
-'valid-not-sa-007'(suite) -> [];
'valid-not-sa-007'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/007.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/007.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4386,12 +4048,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-008
%% Type: valid
%% Sections: 4.2.2 [75]
-'valid-not-sa-008'(suite) -> [];
'valid-not-sa-008'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/008.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/008.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4399,12 +4060,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-009
%% Type: valid
%% Sections: 4.2.2 [75]
-'valid-not-sa-009'(suite) -> [];
'valid-not-sa-009'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/009.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/009.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4412,12 +4072,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-010
%% Type: valid
%% Sections: 3.3 [52]
-'valid-not-sa-010'(suite) -> [];
'valid-not-sa-010'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/010.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/010.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4425,12 +4084,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-011
%% Type: valid
%% Sections: 4.2 4.2.1 [72] [75]
-'valid-not-sa-011'(suite) -> [];
'valid-not-sa-011'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/011.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/011.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4438,12 +4096,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-012
%% Type: valid
%% Sections: 4.3.1 [77]
-'valid-not-sa-012'(suite) -> [];
'valid-not-sa-012'(Config) -> {skip, "Fix 3"}.
- %% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/012.xml"]),
- %% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %% ?line check_result(R, "valid").
+ %% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/012.xml"]),
+ %% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4451,12 +4108,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-013
%% Type: valid
%% Sections: 3.4 [62]
-'valid-not-sa-013'(suite) -> [];
'valid-not-sa-013'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/013.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/013.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4464,12 +4120,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-014
%% Type: valid
%% Sections: 3.4 [62]
-'valid-not-sa-014'(suite) -> [];
'valid-not-sa-014'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/014.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/014.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4477,12 +4132,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-015
%% Type: valid
%% Sections: 3.4 [63]
-'valid-not-sa-015'(suite) -> [];
'valid-not-sa-015'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/015.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/015.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4490,12 +4144,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-016
%% Type: valid
%% Sections: 3.4 [62]
-'valid-not-sa-016'(suite) -> [];
'valid-not-sa-016'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/016.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/016.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4503,12 +4156,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-017
%% Type: valid
%% Sections: 4.2 [72]
-'valid-not-sa-017'(suite) -> [];
'valid-not-sa-017'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/017.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/017.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4516,12 +4168,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-018
%% Type: valid
%% Sections: 4.2.2 [75]
-'valid-not-sa-018'(suite) -> [];
'valid-not-sa-018'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/018.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/018.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4529,12 +4180,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-019
%% Type: valid
%% Sections: 4.4.8
-'valid-not-sa-019'(suite) -> [];
'valid-not-sa-019'(_Config) -> {skip, "partly replacement of markupdecls"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/019.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/019.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4542,12 +4192,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-020
%% Type: valid
%% Sections: 4.4.8
-'valid-not-sa-020'(suite) -> [];
'valid-not-sa-020'(_Config) -> {skip, "partly replacement of markupdecls"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/020.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/020.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4555,12 +4204,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-021
%% Type: valid
%% Sections: 4.2 [72]
-'valid-not-sa-021'(suite) -> [];
'valid-not-sa-021'(_Config) -> {skip, "partly replacement of markupdecls"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/021.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/021.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4568,12 +4216,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-023
%% Type: valid
%% Sections: 2.3 4.1 [10] [69]
-'valid-not-sa-023'(suite) -> [];
'valid-not-sa-023'(_Config) -> {skip, "partly replacement of markupdecls"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/023.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/023.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4581,12 +4228,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-024
%% Type: valid
%% Sections: 2.8, 4.1 [69]
-'valid-not-sa-024'(suite) -> [];
'valid-not-sa-024'(_Config) -> {skip, "partly replacement of markupdecls"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/024.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/024.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4594,12 +4240,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-025
%% Type: valid
%% Sections: 4.2
-'valid-not-sa-025'(suite) -> [];
'valid-not-sa-025'(_Config) -> {skip, "partly replacement of markupdecls"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/025.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/025.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4607,12 +4252,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-026
%% Type: valid
%% Sections: 3.3 [52]
-'valid-not-sa-026'(suite) -> [];
'valid-not-sa-026'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/026.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/026.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4620,12 +4264,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-027
%% Type: valid
%% Sections: 4.1 [69]
-'valid-not-sa-027'(suite) -> [];
'valid-not-sa-027'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/027.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/027.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4633,12 +4276,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-028
%% Type: valid
%% Sections: 3.4 [62]
-'valid-not-sa-028'(suite) -> [];
'valid-not-sa-028'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/028.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/028.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4646,12 +4288,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-029
%% Type: valid
%% Sections: 3.4 [62]
-'valid-not-sa-029'(suite) -> [];
'valid-not-sa-029'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/029.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/029.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4659,12 +4300,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-030
%% Type: valid
%% Sections: 3.4 [62]
-'valid-not-sa-030'(suite) -> [];
'valid-not-sa-030'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/030.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/030.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4672,12 +4312,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-not-sa-031
%% Type: valid
%% Sections: 2.7
-'valid-not-sa-031'(suite) -> [];
'valid-not-sa-031'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/031.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/not-sa/031.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4685,12 +4324,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-001
%% Type: valid
%% Sections: 2.11
-'valid-ext-sa-001'(suite) -> [];
'valid-ext-sa-001'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/001.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/001.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4698,12 +4336,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-002
%% Type: valid
%% Sections: 2.11
-'valid-ext-sa-002'(suite) -> [];
'valid-ext-sa-002'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/002.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/002.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4711,12 +4348,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-003
%% Type: valid
%% Sections: 3.1 4.1 [43] [68]
-'valid-ext-sa-003'(suite) -> [];
'valid-ext-sa-003'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/003.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/003.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4724,12 +4360,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-004
%% Type: valid
%% Sections: 2.11
-'valid-ext-sa-004'(suite) -> [];
'valid-ext-sa-004'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/004.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/004.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4737,12 +4372,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-005
%% Type: valid
%% Sections: 3.2.1 4.2.2 [48] [75]
-'valid-ext-sa-005'(suite) -> [];
'valid-ext-sa-005'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/005.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/005.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4750,12 +4384,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-006
%% Type: valid
%% Sections: 2.11 3.2.1 3.2.2 4.2.2 [48] [51] [75]
-'valid-ext-sa-006'(suite) -> [];
'valid-ext-sa-006'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/006.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/006.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4763,12 +4396,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-007
%% Type: valid
%% Sections: 4.2.2 4.4.3 [75]
-'valid-ext-sa-007'(suite) -> [];
'valid-ext-sa-007'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/007.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/007.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4776,12 +4408,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-008
%% Type: valid
%% Sections: 4.2.2 4.3.3. 4.4.3 [75] [80]
-'valid-ext-sa-008'(suite) -> [];
'valid-ext-sa-008'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/008.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/008.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4789,12 +4420,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-009
%% Type: valid
%% Sections: 2.11
-'valid-ext-sa-009'(suite) -> [];
'valid-ext-sa-009'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/009.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/009.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4802,12 +4432,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-011
%% Type: valid
%% Sections: 2.11 4.2.2 [75]
-'valid-ext-sa-011'(suite) -> [];
'valid-ext-sa-011'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/011.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/011.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4815,12 +4444,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-012
%% Type: valid
%% Sections: 4.2.1 4.2.2
-'valid-ext-sa-012'(suite) -> [];
'valid-ext-sa-012'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/012.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/012.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4828,12 +4456,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-013
%% Type: valid
%% Sections: 3.3.3
-'valid-ext-sa-013'(suite) -> [];
'valid-ext-sa-013'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/013.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/013.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4841,12 +4468,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: valid-ext-sa-014
%% Type: valid
%% Sections: 4.1 4.4.3 [68]
-'valid-ext-sa-014'(suite) -> [];
'valid-ext-sa-014'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/014.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"xmltest","valid/ext-sa/014.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -4864,12 +4490,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pr-xml-euc-jp
%% Type: error
%% Sections: 4.3.3 [4,84]
-'pr-xml-euc-jp'(suite) -> [];
'pr-xml-euc-jp'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-euc-jp.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-euc-jp.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -4877,12 +4502,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pr-xml-iso-2022-jp
%% Type: error
%% Sections: 4.3.3 [4,84]
-'pr-xml-iso-2022-jp'(suite) -> [];
'pr-xml-iso-2022-jp'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-iso-2022-jp.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-iso-2022-jp.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -4890,12 +4514,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pr-xml-little
%% Type: valid
%% Sections: 4.3.3 [4,84]
-'pr-xml-little'(suite) -> [];
'pr-xml-little'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-little-endian.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "valid").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-little-endian.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4903,12 +4526,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pr-xml-shift_jis
%% Type: error
%% Sections: 4.3.3 [4,84]
-'pr-xml-shift_jis'(suite) -> [];
'pr-xml-shift_jis'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-shift_jis.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-shift_jis.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -4916,12 +4538,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pr-xml-utf-16
%% Type: valid
%% Sections: 4.3.3 [4,84]
-'pr-xml-utf-16'(suite) -> [];
'pr-xml-utf-16'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-utf-16.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "valid").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-utf-16.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4929,12 +4550,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pr-xml-utf-8
%% Type: valid
%% Sections: 4.3.3 [4,84]
-'pr-xml-utf-8'(suite) -> [];
'pr-xml-utf-8'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-utf-8.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "valid").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","pr-xml-utf-8.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4942,12 +4562,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: weekly-euc-jp
%% Type: error
%% Sections: 4.3.3 [4,84]
-'weekly-euc-jp'(suite) -> [];
'weekly-euc-jp'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-euc-jp.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-euc-jp.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -4955,12 +4574,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: weekly-iso-2022-jp
%% Type: error
%% Sections: 4.3.3 [4,84]
-'weekly-iso-2022-jp'(suite) -> [];
'weekly-iso-2022-jp'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-iso-2022-jp.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-iso-2022-jp.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -4968,12 +4586,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: weekly-little
%% Type: valid
%% Sections: 4.3.3 [4,84]
-'weekly-little'(suite) -> [];
'weekly-little'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-little-endian.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "valid").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-little-endian.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -4981,12 +4598,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: weekly-shift_jis
%% Type: error
%% Sections: 4.3.3 [4,84]
-'weekly-shift_jis'(suite) -> [];
'weekly-shift_jis'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-shift_jis.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-shift_jis.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -4994,12 +4610,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: weekly-utf-16
%% Type: valid
%% Sections: 4.3.3 [4,84]
-'weekly-utf-16'(suite) -> [];
'weekly-utf-16'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-utf-16.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "valid").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-utf-16.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5007,12 +4622,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: weekly-utf-8
%% Type: valid
%% Sections: 4.3.3 [4,84]
-'weekly-utf-8'(suite) -> [];
'weekly-utf-8'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-utf-8.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "valid").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"japanese","weekly-utf-8.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -5030,12 +4644,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pe01
%% Type: valid
%% Sections: 2.8
-'pe01'(suite) -> [];
'pe01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/pe01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/pe01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5043,12 +4656,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: dtd00
%% Type: valid
%% Sections: 3.2.2 [51]
-'dtd00'(suite) -> [];
'dtd00'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/dtd00.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/dtd00.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5056,12 +4668,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: dtd01
%% Type: valid
%% Sections: 2.5 [15]
-'dtd01'(suite) -> [];
'dtd01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/dtd01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/dtd01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5069,12 +4680,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: element
%% Type: valid
%% Sections: 3
-'element'(suite) -> [];
'element'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/element.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/element.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5082,12 +4692,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ext01
%% Type: valid
%% Sections: 4.3.1 4.3.2 [77] [78]
-'ext01'(suite) -> [];
'ext01'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/ext01.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "valid").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/ext01.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5095,12 +4704,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ext02
%% Type: valid
%% Sections: 4.3.2 [78]
-'ext02'(suite) -> [];
'ext02'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/ext02.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "valid").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/ext02.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5108,12 +4716,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-sa01
%% Type: valid
%% Sections: 2.9
-'not-sa01'(suite) -> [];
'not-sa01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/not-sa01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/not-sa01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5121,12 +4728,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-sa02
%% Type: valid
%% Sections: 2.9
-'not-sa02'(suite) -> [];
'not-sa02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/not-sa02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/not-sa02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5134,12 +4740,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-sa03
%% Type: valid
%% Sections: 2.9
-'not-sa03'(suite) -> [];
'not-sa03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/not-sa03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/not-sa03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5147,12 +4752,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-sa04
%% Type: valid
%% Sections: 2.9
-'not-sa04'(suite) -> [];
'not-sa04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/not-sa04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/not-sa04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5160,12 +4764,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: notation01
%% Type: valid
%% Sections: 4.7 [82]
-'notation01'(suite) -> [];
'notation01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/notation01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/notation01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5173,12 +4776,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional
%% Type: valid
%% Sections: 3 3.2.1 [47]
-'optional'(suite) -> [];
'optional'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/optional.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/optional.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5186,12 +4788,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: required00
%% Type: valid
%% Sections: 3.3.2 [60]
-'required00'(suite) -> [];
'required00'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/required00.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/required00.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5199,12 +4800,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sa01
%% Type: valid
%% Sections: 2.9 [32]
-'sa01'(suite) -> [];
'sa01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5212,12 +4812,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sa02
%% Type: valid
%% Sections: 2.9 [32]
-'sa02'(suite) -> [];
'sa02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5225,12 +4824,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sa03
%% Type: valid
%% Sections: 2.9 [32]
-'sa03'(suite) -> [];
'sa03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5238,12 +4836,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sa04
%% Type: valid
%% Sections: 2.9 [32]
-'sa04'(suite) -> [];
'sa04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5251,12 +4848,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sa05
%% Type: valid
%% Sections: 2.9 [32]
-'sa05'(suite) -> [];
'sa05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sa05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5264,12 +4860,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-sgml01
%% Type: valid
%% Sections: 3.3.1 [59]
-'v-sgml01'(suite) -> [];
'v-sgml01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sgml01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/sgml01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5277,12 +4872,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-lang01
%% Type: valid
%% Sections: 2.12 [35]
-'v-lang01'(suite) -> [];
'v-lang01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5290,12 +4884,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-lang02
%% Type: valid
%% Sections: 2.12 [35]
-'v-lang02'(suite) -> [];
'v-lang02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5303,12 +4896,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-lang03
%% Type: valid
%% Sections: 2.12 [36]
-'v-lang03'(suite) -> [];
'v-lang03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5316,12 +4908,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-lang04
%% Type: valid
%% Sections: 2.12 [37]
-'v-lang04'(suite) -> [];
'v-lang04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5329,12 +4920,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-lang05
%% Type: valid
%% Sections: 2.12 [35]
-'v-lang05'(suite) -> [];
'v-lang05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5342,12 +4932,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-lang06
%% Type: valid
%% Sections: 2.12 [37]
-'v-lang06'(suite) -> [];
'v-lang06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/v-lang06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5355,12 +4944,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-pe00
%% Type: valid
%% Sections: 4.5
-'v-pe00'(suite) -> [];
'v-pe00'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/pe00.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/pe00.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5368,12 +4956,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-pe03
%% Type: valid
%% Sections: 4.5
-'v-pe03'(suite) -> [];
'v-pe03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/pe03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/pe03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5381,12 +4968,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: v-pe02
%% Type: valid
%% Sections: 4.5
-'v-pe02'(suite) -> [];
'v-pe02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/pe02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","valid/pe02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5394,12 +4980,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-dtd01
%% Type: invalid
%% Sections: 3.2.2
-'inv-dtd01'(suite) -> [];
'inv-dtd01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/dtd01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/dtd01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5407,12 +4992,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-dtd02
%% Type: invalid
%% Sections: 4.2.2
-'inv-dtd02'(suite) -> [];
'inv-dtd02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/dtd02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/dtd02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5420,12 +5004,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-dtd03
%% Type: invalid
%% Sections: 3
-'inv-dtd03'(suite) -> [];
'inv-dtd03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/dtd03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/dtd03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5433,12 +5016,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: el01
%% Type: invalid
%% Sections: 3
-'el01'(suite) -> [];
'el01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5446,12 +5028,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: el02
%% Type: invalid
%% Sections: 3
-'el02'(suite) -> [];
'el02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5459,12 +5040,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: el03
%% Type: invalid
%% Sections: 3
-'el03'(suite) -> [];
'el03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5472,12 +5052,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: el04
%% Type: invalid
%% Sections: 3.2
-'el04'(suite) -> [];
'el04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5485,12 +5064,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: el05
%% Type: invalid
%% Sections: 3.2.2
-'el05'(suite) -> [];
'el05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5498,12 +5076,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: el06
%% Type: invalid
%% Sections: 3
-'el06'(suite) -> [];
'el06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/el06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5511,12 +5088,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: id01
%% Type: invalid
%% Sections: 3.3.1
-'id01'(suite) -> [];
'id01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5524,12 +5100,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: id02
%% Type: invalid
%% Sections: 3.3.1
-'id02'(suite) -> [];
'id02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5537,12 +5112,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: id03
%% Type: invalid
%% Sections: 3.3.1
-'id03'(suite) -> [];
'id03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5550,12 +5124,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: id04
%% Type: invalid
%% Sections: 3.3.1
-'id04'(suite) -> [];
'id04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5563,12 +5136,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: id05
%% Type: invalid
%% Sections: 3.3.1
-'id05'(suite) -> [];
'id05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5576,12 +5148,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: id06
%% Type: invalid
%% Sections: 3.3.1
-'id06'(suite) -> [];
'id06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5589,12 +5160,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: id07
%% Type: invalid
%% Sections: 3.3.1
-'id07'(suite) -> [];
'id07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5602,12 +5172,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: id08
%% Type: invalid
%% Sections: 3.3.1
-'id08'(suite) -> [];
'id08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5615,12 +5184,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: id09
%% Type: invalid
%% Sections: 3.3.1
-'id09'(suite) -> [];
'id09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/id09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5628,12 +5196,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa01
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa01'(suite) -> [];
'inv-not-sa01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5641,12 +5208,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa02
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa02'(suite) -> [];
'inv-not-sa02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5654,12 +5220,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa04
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa04'(suite) -> [];
'inv-not-sa04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5667,12 +5232,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa05
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa05'(suite) -> [];
'inv-not-sa05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5680,12 +5244,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa06
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa06'(suite) -> [];
'inv-not-sa06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5693,12 +5256,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa07
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa07'(suite) -> [];
'inv-not-sa07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5706,12 +5268,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa08
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa08'(suite) -> [];
'inv-not-sa08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5719,12 +5280,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa09
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa09'(suite) -> [];
'inv-not-sa09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5732,12 +5292,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa10
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa10'(suite) -> [];
'inv-not-sa10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5745,12 +5304,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa11
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa11'(suite) -> [];
'inv-not-sa11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5758,12 +5316,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa12
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa12'(suite) -> [];
'inv-not-sa12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5771,12 +5328,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa13
%% Type: invalid
%% Sections: 2.9
-'inv-not-sa13'(suite) -> [];
'inv-not-sa13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5784,12 +5340,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-not-sa14
%% Type: invalid
%% Sections: 3
-'inv-not-sa14'(suite) -> [];
'inv-not-sa14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/not-sa14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5797,12 +5352,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional01
%% Type: invalid
%% Sections: 3
-'optional01'(suite) -> [];
'optional01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5810,12 +5364,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional02
%% Type: invalid
%% Sections: 3
-'optional02'(suite) -> [];
'optional02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5823,12 +5376,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional03
%% Type: invalid
%% Sections: 3
-'optional03'(suite) -> [];
'optional03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5836,12 +5388,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional04
%% Type: invalid
%% Sections: 3
-'optional04'(suite) -> [];
'optional04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5849,12 +5400,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional05
%% Type: invalid
%% Sections: 3
-'optional05'(suite) -> [];
'optional05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5862,12 +5412,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional06
%% Type: invalid
%% Sections: 3
-'optional06'(suite) -> [];
'optional06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5875,12 +5424,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional07
%% Type: invalid
%% Sections: 3
-'optional07'(suite) -> [];
'optional07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5888,12 +5436,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional08
%% Type: invalid
%% Sections: 3
-'optional08'(suite) -> [];
'optional08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5901,12 +5448,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional09
%% Type: invalid
%% Sections: 3
-'optional09'(suite) -> [];
'optional09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5914,12 +5460,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional10
%% Type: invalid
%% Sections: 3
-'optional10'(suite) -> [];
'optional10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5927,12 +5472,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional11
%% Type: invalid
%% Sections: 3
-'optional11'(suite) -> [];
'optional11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5940,12 +5484,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional12
%% Type: invalid
%% Sections: 3
-'optional12'(suite) -> [];
'optional12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5953,12 +5496,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional13
%% Type: invalid
%% Sections: 3
-'optional13'(suite) -> [];
'optional13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5966,12 +5508,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional14
%% Type: invalid
%% Sections: 3
-'optional14'(suite) -> [];
'optional14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5979,12 +5520,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional20
%% Type: invalid
%% Sections: 3
-'optional20'(suite) -> [];
'optional20'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional20.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional20.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -5992,12 +5532,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional21
%% Type: invalid
%% Sections: 3
-'optional21'(suite) -> [];
'optional21'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional21.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional21.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6005,12 +5544,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional22
%% Type: invalid
%% Sections: 3
-'optional22'(suite) -> [];
'optional22'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional22.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional22.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6018,12 +5556,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional23
%% Type: invalid
%% Sections: 3
-'optional23'(suite) -> [];
'optional23'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional23.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional23.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6031,12 +5568,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional24
%% Type: invalid
%% Sections: 3
-'optional24'(suite) -> [];
'optional24'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional24.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional24.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6044,12 +5580,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: optional25
%% Type: invalid
%% Sections: 3
-'optional25'(suite) -> [];
'optional25'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional25.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/optional25.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6057,12 +5592,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-required00
%% Type: invalid
%% Sections: 3.3.2
-'inv-required00'(suite) -> [];
'inv-required00'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/required00.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/required00.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6070,12 +5604,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-required01
%% Type: invalid
%% Sections: 3.1 2.10
-'inv-required01'(suite) -> [];
'inv-required01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/required01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/required01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6083,12 +5616,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: inv-required02
%% Type: invalid
%% Sections: 3.1 2.12
-'inv-required02'(suite) -> [];
'inv-required02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/required02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/required02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6096,12 +5628,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: root
%% Type: invalid
%% Sections: 2.8
-'root'(suite) -> [];
'root'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/root.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/root.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6109,12 +5640,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr01
%% Type: invalid
%% Sections: 3.3.1
-'attr01'(suite) -> [];
'attr01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6122,12 +5652,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr02
%% Type: invalid
%% Sections: 3.3.1
-'attr02'(suite) -> [];
'attr02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6135,12 +5664,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr03
%% Type: invalid
%% Sections: 3.3.1
-'attr03'(suite) -> [];
'attr03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6148,12 +5676,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr04
%% Type: invalid
%% Sections: 3.3.1
-'attr04'(suite) -> [];
'attr04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6161,12 +5688,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr05
%% Type: invalid
%% Sections: 3.3.1
-'attr05'(suite) -> [];
'attr05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6174,12 +5700,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr06
%% Type: invalid
%% Sections: 3.3.1
-'attr06'(suite) -> [];
'attr06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6187,12 +5712,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr07
%% Type: invalid
%% Sections: 3.3.1
-'attr07'(suite) -> [];
'attr07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6200,12 +5724,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr08
%% Type: invalid
%% Sections: 3.3.2
-'attr08'(suite) -> [];
'attr08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6213,12 +5736,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr09
%% Type: invalid
%% Sections: 3.3.2
-'attr09'(suite) -> [];
'attr09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6226,12 +5748,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr10
%% Type: invalid
%% Sections: 3.3.2
-'attr10'(suite) -> [];
'attr10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6239,12 +5760,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr11
%% Type: invalid
%% Sections: 3.3.2
-'attr11'(suite) -> [];
'attr11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6252,12 +5772,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr12
%% Type: invalid
%% Sections: 3.3.2
-'attr12'(suite) -> [];
'attr12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6265,12 +5784,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr13
%% Type: invalid
%% Sections: 3.3.2
-'attr13'(suite) -> [];
'attr13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6278,12 +5796,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr14
%% Type: invalid
%% Sections: 3.3.2
-'attr14'(suite) -> [];
'attr14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6291,12 +5808,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr15
%% Type: invalid
%% Sections: 3.3.2
-'attr15'(suite) -> [];
'attr15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6304,12 +5820,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attr16
%% Type: invalid
%% Sections: 3.3.2
-'attr16'(suite) -> [];
'attr16'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr16.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/attr16.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6317,12 +5832,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: utf16b
%% Type: invalid
%% Sections: 4.3.3 2.8
-'utf16b'(suite) -> [];
'utf16b'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/utf16b.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/utf16b.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6330,12 +5844,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: utf16l
%% Type: invalid
%% Sections: 4.3.3 2.8
-'utf16l'(suite) -> [];
'utf16l'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/utf16l.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/utf16l.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6343,12 +5856,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: empty
%% Type: invalid
%% Sections: 2.4 2.7 [18] 3
-'empty'(suite) -> [];
'empty'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/empty.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","invalid/empty.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -6356,12 +5868,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: not-wf-sa03
%% Type: not-wf
%% Sections: 2.9
-'not-wf-sa03'(suite) -> [];
'not-wf-sa03'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/not-sa03.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/not-sa03.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6369,12 +5880,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist01
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'attlist01'(suite) -> [];
'attlist01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6382,12 +5892,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist02
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'attlist02'(suite) -> [];
'attlist02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6395,12 +5904,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist03
%% Type: not-wf
%% Sections: 3.3.1 [59]
-'attlist03'(suite) -> [];
'attlist03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6408,12 +5916,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist04
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'attlist04'(suite) -> [];
'attlist04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6421,12 +5928,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist05
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'attlist05'(suite) -> [];
'attlist05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6434,12 +5940,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist06
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'attlist06'(suite) -> [];
'attlist06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6447,12 +5952,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist07
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'attlist07'(suite) -> [];
'attlist07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6460,12 +5964,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist08
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'attlist08'(suite) -> [];
'attlist08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6473,12 +5976,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist09
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'attlist09'(suite) -> [];
'attlist09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6486,12 +5988,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist10
%% Type: not-wf
%% Sections: 3.1 [40]
-'attlist10'(suite) -> [];
'attlist10'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist10.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist10.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6499,12 +6000,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: attlist11
%% Type: not-wf
%% Sections: 3.1 [44]
-'attlist11'(suite) -> [];
'attlist11'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist11.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/attlist11.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6512,12 +6012,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: cond01
%% Type: not-wf
%% Sections: 3.4 [61]
-'cond01'(suite) -> [];
'cond01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/cond01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/cond01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6525,12 +6024,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: cond02
%% Type: not-wf
%% Sections: 3.4 [61]
-'cond02'(suite) -> [];
'cond02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/cond02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/cond02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6538,12 +6036,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: content01
%% Type: not-wf
%% Sections: 3.2.1 [48]
-'content01'(suite) -> [];
'content01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/content01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/content01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6551,12 +6048,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: content02
%% Type: not-wf
%% Sections: 3.2.1 [48]
-'content02'(suite) -> [];
'content02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/content02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/content02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6564,12 +6060,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: content03
%% Type: not-wf
%% Sections: 3.2.1 [48]
-'content03'(suite) -> [];
'content03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/content03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/content03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6577,12 +6072,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: decl01
%% Type: not-wf
%% Sections: 4.3.1 [77]
-'decl01'(suite) -> [];
'decl01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/decl01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/decl01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6590,12 +6084,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: nwf-dtd00
%% Type: not-wf
%% Sections: 3.2.1 [55]
-'nwf-dtd00'(suite) -> [];
'nwf-dtd00'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd00.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd00.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6603,12 +6096,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: nwf-dtd01
%% Type: not-wf
%% Sections: 3.2.1 [55]
-'nwf-dtd01'(suite) -> [];
'nwf-dtd01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6616,12 +6108,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: dtd02
%% Type: not-wf
%% Sections: 4.1 [69]
-'dtd02'(suite) -> [];
'dtd02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6629,12 +6120,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: dtd03
%% Type: not-wf
%% Sections: 4.1 [69]
-'dtd03'(suite) -> [];
'dtd03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6642,12 +6132,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: dtd04
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'dtd04'(suite) -> [];
'dtd04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6655,12 +6144,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: dtd05
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'dtd05'(suite) -> [];
'dtd05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6668,12 +6156,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: dtd07
%% Type: not-wf
%% Sections: 4.3.1 [77]
-'dtd07'(suite) -> [];
'dtd07'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd07.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/dtd07.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6681,12 +6168,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: element00
%% Type: not-wf
%% Sections: 3.1 [42]
-'element00'(suite) -> [];
'element00'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element00.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element00.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6694,12 +6180,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: element01
%% Type: not-wf
%% Sections: 3.1 [42]
-'element01'(suite) -> [];
'element01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6707,12 +6192,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: element02
%% Type: not-wf
%% Sections: 3.1 [43]
-'element02'(suite) -> [];
'element02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6720,12 +6204,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: element03
%% Type: not-wf
%% Sections: 3.1 [43]
-'element03'(suite) -> [];
'element03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6733,12 +6216,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: element04
%% Type: not-wf
%% Sections: 3.1 [43]
-'element04'(suite) -> [];
'element04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/element04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6746,12 +6228,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: encoding01
%% Type: not-wf
%% Sections: 4.3.3 [81]
-'encoding01'(suite) -> [];
'encoding01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6759,12 +6240,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: encoding02
%% Type: not-wf
%% Sections: 4.3.3 [81]
-'encoding02'(suite) -> [];
'encoding02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6772,12 +6252,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: encoding03
%% Type: not-wf
%% Sections: 4.3.3 [81]
-'encoding03'(suite) -> [];
'encoding03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6785,12 +6264,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: encoding04
%% Type: not-wf
%% Sections: 4.3.3 [81]
-'encoding04'(suite) -> [];
'encoding04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6798,12 +6276,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: encoding05
%% Type: not-wf
%% Sections: 4.3.3 [81]
-'encoding05'(suite) -> [];
'encoding05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6811,12 +6288,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: encoding06
%% Type: not-wf
%% Sections: 4.3.3 [81]
-'encoding06'(suite) -> [];
'encoding06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6824,12 +6300,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: encoding07
%% Type: not-wf
%% Sections: 4.3.1 [77]
-'encoding07'(suite) -> [];
'encoding07'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding07.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/encoding07.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6837,12 +6312,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pi
%% Type: not-wf
%% Sections: 2.6 [16]
-'pi'(suite) -> [];
'pi'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pi.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pi.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6850,12 +6324,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pubid01
%% Type: not-wf
%% Sections: 2.3 [12]
-'pubid01'(suite) -> [];
'pubid01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6863,12 +6336,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pubid02
%% Type: not-wf
%% Sections: 2.3 [12]
-'pubid02'(suite) -> [];
'pubid02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6876,12 +6348,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pubid03
%% Type: not-wf
%% Sections: 2.3 [12]
-'pubid03'(suite) -> [];
'pubid03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6889,12 +6360,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pubid04
%% Type: not-wf
%% Sections: 2.3 [12]
-'pubid04'(suite) -> [];
'pubid04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6902,12 +6372,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: pubid05
%% Type: not-wf
%% Sections: 2.3 [12]
-'pubid05'(suite) -> [];
'pubid05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/pubid05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6915,12 +6384,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml01
%% Type: not-wf
%% Sections: 3 [39]
-'sgml01'(suite) -> [];
'sgml01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6928,12 +6396,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml02
%% Type: not-wf
%% Sections: 2.8
-'sgml02'(suite) -> [];
'sgml02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6941,12 +6408,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml03
%% Type: not-wf
%% Sections: 2.5 [15]
-'sgml03'(suite) -> [];
'sgml03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6954,12 +6420,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml04
%% Type: not-wf
%% Sections: 3.3 [52]
-'sgml04'(suite) -> [];
'sgml04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6967,12 +6432,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml05
%% Type: not-wf
%% Sections: 3.2 [45]
-'sgml05'(suite) -> [];
'sgml05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6980,12 +6444,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml06
%% Type: not-wf
%% Sections: 3.3 [52]
-'sgml06'(suite) -> [];
'sgml06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -6993,12 +6456,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml07
%% Type: not-wf
%% Sections: 3.2 [45]
-'sgml07'(suite) -> [];
'sgml07'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml07.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml07.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -7006,12 +6468,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml08
%% Type: not-wf
%% Sections: 3.2 [45]
-'sgml08'(suite) -> [];
'sgml08'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml08.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml08.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -7019,12 +6480,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml09
%% Type: not-wf
%% Sections: 3.2 [45]
-'sgml09'(suite) -> [];
'sgml09'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml09.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml09.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -7032,12 +6492,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml10
%% Type: not-wf
%% Sections: 3.2 [45]
-'sgml10'(suite) -> [];
'sgml10'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml10.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml10.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -7045,12 +6504,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml11
%% Type: not-wf
%% Sections: 3.2 [46]
-'sgml11'(suite) -> [];
'sgml11'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml11.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml11.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -7058,12 +6516,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml12
%% Type: not-wf
%% Sections: 3.2 [46]
-'sgml12'(suite) -> [];
'sgml12'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml12.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml12.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -7071,12 +6528,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: sgml13
%% Type: not-wf
%% Sections: 3.2.1 [47]
-'sgml13'(suite) -> [];
'sgml13'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml13.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/sgml13.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -7084,12 +6540,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: uri01
%% Type: error
%% Sections: 4.2.2 [75]
-'uri01'(suite) -> [];
'uri01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/uri01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "error").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"sun","not-wf/uri01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Cases
@@ -7102,12 +6557,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p01pass2
%% Type: valid
%% Sections: 2.2 [1]
-'o-p01pass2'(suite) -> [];
'o-p01pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7115,12 +6569,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p06pass1
%% Type: valid
%% Sections: 2.3 [6]
-'o-p06pass1'(suite) -> [];
'o-p06pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p06pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p06pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7128,12 +6581,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p07pass1
%% Type: valid
%% Sections: 2.3 [7]
-'o-p07pass1'(suite) -> [];
'o-p07pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p07pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p07pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7141,12 +6593,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p08pass1
%% Type: valid
%% Sections: 2.3 [8]
-'o-p08pass1'(suite) -> [];
'o-p08pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p08pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p08pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7154,12 +6605,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p09pass1
%% Type: valid
%% Sections: 2.3 [9]
-'o-p09pass1'(suite) -> [];
'o-p09pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7167,12 +6617,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p12pass1
%% Type: valid
%% Sections: 2.3 [12]
-'o-p12pass1'(suite) -> [];
'o-p12pass1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12pass1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12pass1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7180,12 +6629,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p22pass4
%% Type: valid
%% Sections: 2.8 [22]
-'o-p22pass4'(suite) -> [];
'o-p22pass4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7193,12 +6641,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p22pass5
%% Type: valid
%% Sections: 2.8 [22]
-'o-p22pass5'(suite) -> [];
'o-p22pass5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7206,12 +6653,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p22pass6
%% Type: valid
%% Sections: 2.8 [22]
-'o-p22pass6'(suite) -> [];
'o-p22pass6'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass6.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass6.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7219,12 +6665,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p28pass1
%% Type: valid
%% Sections: 3.1 [43] [44]
-'o-p28pass1'(suite) -> [];
'o-p28pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7232,12 +6677,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p28pass3
%% Type: valid
%% Sections: 2.8 4.1 [28] [69]
-'o-p28pass3'(suite) -> [];
'o-p28pass3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28pass3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28pass3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7245,12 +6689,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p28pass4
%% Type: valid
%% Sections: 2.8 4.2.2 [28] [75]
-'o-p28pass4'(suite) -> [];
'o-p28pass4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28pass4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28pass4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7258,12 +6701,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p28pass5
%% Type: valid
%% Sections: 2.8 4.1 [28] [69]
-'o-p28pass5'(suite) -> [];
'o-p28pass5'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28pass5.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28pass5.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7271,12 +6713,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p29pass1
%% Type: valid
%% Sections: 2.8 [29]
-'o-p29pass1'(suite) -> [];
'o-p29pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p29pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p29pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7284,12 +6725,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p30pass1
%% Type: valid
%% Sections: 2.8 4.2.2 [30] [75]
-'o-p30pass1'(suite) -> [];
'o-p30pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p30pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p30pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7297,12 +6737,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p30pass2
%% Type: valid
%% Sections: 2.8 4.2.2 4.3.1 [30] [75] [77]
-'o-p30pass2'(suite) -> [];
'o-p30pass2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p30pass2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p30pass2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7310,12 +6749,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p31pass1
%% Type: valid
%% Sections: 2.8 [31]
-'o-p31pass1'(suite) -> [];
'o-p31pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p31pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p31pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7323,12 +6761,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p31pass2
%% Type: valid
%% Sections: 2.8 3.4 4.2.2 [31] [62] [63] [75]
-'o-p31pass2'(suite) -> [];
'o-p31pass2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p31pass2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p31pass2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7336,12 +6773,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p43pass1
%% Type: valid
%% Sections: 2.4 2.5 2.6 2.7 [15] [16] [18]
-'o-p43pass1'(suite) -> [];
'o-p43pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p43pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p43pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7349,12 +6785,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p45pass1
%% Type: valid
%% Sections: 3.2 [45]
-'o-p45pass1'(suite) -> [];
'o-p45pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7362,12 +6797,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p46pass1
%% Type: valid
%% Sections: 3.2 3.2.1 3.2.2 [45] [46] [47] [51]
-'o-p46pass1'(suite) -> [];
'o-p46pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7375,12 +6809,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p47pass1
%% Type: valid
%% Sections: 3.2 3.2.1 [45] [46] [47]
-'o-p47pass1'(suite) -> [];
'o-p47pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7388,12 +6821,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p48pass1
%% Type: valid
%% Sections: 3.2 3.2.1 [45] [46] [47]
-'o-p48pass1'(suite) -> [];
'o-p48pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p48pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p48pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7401,12 +6833,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p49pass1
%% Type: valid
%% Sections: 3.2 3.2.1 [45] [46] [47]
-'o-p49pass1'(suite) -> [];
'o-p49pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p49pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p49pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7414,12 +6845,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p50pass1
%% Type: valid
%% Sections: 3.2 3.2.1 [45] [46] [47]
-'o-p50pass1'(suite) -> [];
'o-p50pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p50pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p50pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7427,12 +6857,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p51pass1
%% Type: valid
%% Sections: 3.2.2 [51]
-'o-p51pass1'(suite) -> [];
'o-p51pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7440,12 +6869,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p52pass1
%% Type: valid
%% Sections: 3.3 [52]
-'o-p52pass1'(suite) -> [];
'o-p52pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p52pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p52pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7453,12 +6881,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p53pass1
%% Type: valid
%% Sections: 3.3 [53]
-'o-p53pass1'(suite) -> [];
'o-p53pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7466,12 +6893,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p54pass1
%% Type: valid
%% Sections: 3.3.1 [54]
-'o-p54pass1'(suite) -> [];
'o-p54pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p54pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p54pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7479,12 +6905,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p55pass1
%% Type: valid
%% Sections: 3.3.1 [55]
-'o-p55pass1'(suite) -> [];
'o-p55pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p55pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p55pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7492,12 +6917,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p56pass1
%% Type: valid
%% Sections: 3.3.1 [56]
-'o-p56pass1'(suite) -> [];
'o-p56pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7505,12 +6929,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p57pass1
%% Type: valid
%% Sections: 3.3.1 [57]
-'o-p57pass1'(suite) -> [];
'o-p57pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p57pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p57pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7518,12 +6941,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p58pass1
%% Type: valid
%% Sections: 3.3.1 [58]
-'o-p58pass1'(suite) -> [];
'o-p58pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7531,12 +6953,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p59pass1
%% Type: valid
%% Sections: 3.3.1 [59]
-'o-p59pass1'(suite) -> [];
'o-p59pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p59pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p59pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7544,12 +6965,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p60pass1
%% Type: valid
%% Sections: 3.3.2 [60]
-'o-p60pass1'(suite) -> [];
'o-p60pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7557,12 +6977,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p61pass1
%% Type: valid
%% Sections: 3.4 [61]
-'o-p61pass1'(suite) -> [];
'o-p61pass1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p61pass1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p61pass1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7570,12 +6989,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p62pass1
%% Type: valid
%% Sections: 3.4 [62]
-'o-p62pass1'(suite) -> [];
'o-p62pass1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p62pass1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p62pass1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7583,12 +7001,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p63pass1
%% Type: valid
%% Sections: 3.4 [63]
-'o-p63pass1'(suite) -> [];
'o-p63pass1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p63pass1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p63pass1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7596,12 +7013,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p64pass1
%% Type: valid
%% Sections: 3.4 [64]
-'o-p64pass1'(suite) -> [];
'o-p64pass1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p64pass1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p64pass1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7609,12 +7025,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p68pass1
%% Type: valid
%% Sections: 4.1 [68]
-'o-p68pass1'(suite) -> [];
'o-p68pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p68pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p68pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7622,12 +7037,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p69pass1
%% Type: valid
%% Sections: 4.1 [69]
-'o-p69pass1'(suite) -> [];
'o-p69pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p69pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p69pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7635,12 +7049,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p70pass1
%% Type: valid
%% Sections: 4.2 [70]
-'o-p70pass1'(suite) -> [];
'o-p70pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p70pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p70pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7648,12 +7061,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p71pass1
%% Type: valid
%% Sections: 4.2 [71]
-'o-p71pass1'(suite) -> [];
'o-p71pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7661,12 +7073,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p72pass1
%% Type: valid
%% Sections: 4.2 [72]
-'o-p72pass1'(suite) -> [];
'o-p72pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7674,12 +7085,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p73pass1
%% Type: valid
%% Sections: 4.2 [73]
-'o-p73pass1'(suite) -> [];
'o-p73pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7687,12 +7097,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p76pass1
%% Type: valid
%% Sections: 4.2.2 [76]
-'o-p76pass1'(suite) -> [];
'o-p76pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7700,12 +7109,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p01pass1
%% Type: invalid
%% Sections: 2.1 [1]
-'o-p01pass1'(suite) -> [];
'o-p01pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7713,12 +7121,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p01pass3
%% Type: invalid
%% Sections: 2.1 [1]
-'o-p01pass3'(suite) -> [];
'o-p01pass3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01pass3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01pass3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7726,12 +7133,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03pass1
%% Type: invalid
%% Sections: 2.3 [3]
-'o-p03pass1'(suite) -> [];
'o-p03pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7739,12 +7145,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p04pass1
%% Type: invalid
%% Sections: 2.3 [4]
-'o-p04pass1'(suite) -> [];
'o-p04pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p04pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p04pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7752,12 +7157,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p05pass1
%% Type: invalid
%% Sections: 2.3 [5]
-'o-p05pass1'(suite) -> [];
'o-p05pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7765,12 +7169,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p06fail1
%% Type: invalid
%% Sections: 2.3 [6]
-'o-p06fail1'(suite) -> [];
'o-p06fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p06fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p06fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7778,12 +7181,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p08fail1
%% Type: invalid
%% Sections: 2.3 [8]
-'o-p08fail1'(suite) -> [];
'o-p08fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p08fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p08fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7791,12 +7193,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p08fail2
%% Type: invalid
%% Sections: 2.3 [8]
-'o-p08fail2'(suite) -> [];
'o-p08fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p08fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p08fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7804,12 +7205,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p10pass1
%% Type: invalid
%% Sections: 2.3 [10]
-'o-p10pass1'(suite) -> [];
'o-p10pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p10pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p10pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7817,12 +7217,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p14pass1
%% Type: invalid
%% Sections: 2.4 [14]
-'o-p14pass1'(suite) -> [];
'o-p14pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p14pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p14pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7830,12 +7229,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p15pass1
%% Type: invalid
%% Sections: 2.5 [15]
-'o-p15pass1'(suite) -> [];
'o-p15pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p15pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p15pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7843,12 +7241,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p16pass1
%% Type: invalid
%% Sections: 2.6 [16] [17]
-'o-p16pass1'(suite) -> [];
'o-p16pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7856,12 +7253,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p16pass2
%% Type: invalid
%% Sections: 2.6 [16]
-'o-p16pass2'(suite) -> [];
'o-p16pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7869,12 +7265,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p16pass3
%% Type: invalid
%% Sections: 2.6 [16]
-'o-p16pass3'(suite) -> [];
'o-p16pass3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16pass3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16pass3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7882,12 +7277,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p18pass1
%% Type: invalid
%% Sections: 2.7 [18]
-'o-p18pass1'(suite) -> [];
'o-p18pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p18pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p18pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7895,12 +7289,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p22pass1
%% Type: invalid
%% Sections: 2.8 [22]
-'o-p22pass1'(suite) -> [];
'o-p22pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7908,12 +7301,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p22pass2
%% Type: invalid
%% Sections: 2.8 [22]
-'o-p22pass2'(suite) -> [];
'o-p22pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7921,12 +7313,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p22pass3
%% Type: invalid
%% Sections: 2.8 [22]
-'o-p22pass3'(suite) -> [];
'o-p22pass3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22pass3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7934,12 +7325,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p23pass1
%% Type: invalid
%% Sections: 2.8 [23]
-'o-p23pass1'(suite) -> [];
'o-p23pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7947,12 +7337,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p23pass2
%% Type: invalid
%% Sections: 2.8 [23]
-'o-p23pass2'(suite) -> [];
'o-p23pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7960,12 +7349,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p23pass3
%% Type: invalid
%% Sections: 2.8 [23]
-'o-p23pass3'(suite) -> [];
'o-p23pass3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23pass3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23pass3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7973,12 +7361,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p23pass4
%% Type: invalid
%% Sections: 2.8 [23]
-'o-p23pass4'(suite) -> [];
'o-p23pass4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23pass4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23pass4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7986,12 +7373,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p24pass1
%% Type: invalid
%% Sections: 2.8 [24]
-'o-p24pass1'(suite) -> [];
'o-p24pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -7999,12 +7385,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p24pass2
%% Type: invalid
%% Sections: 2.8 [24]
-'o-p24pass2'(suite) -> [];
'o-p24pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8012,12 +7397,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p24pass3
%% Type: invalid
%% Sections: 2.8 [24]
-'o-p24pass3'(suite) -> [];
'o-p24pass3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24pass3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24pass3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8025,12 +7409,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p24pass4
%% Type: invalid
%% Sections: 2.8 [24]
-'o-p24pass4'(suite) -> [];
'o-p24pass4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24pass4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24pass4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8038,12 +7421,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p25pass1
%% Type: invalid
%% Sections: 2.8 [25]
-'o-p25pass1'(suite) -> [];
'o-p25pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p25pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p25pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8051,12 +7433,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p25pass2
%% Type: invalid
%% Sections: 2.8 [25]
-'o-p25pass2'(suite) -> [];
'o-p25pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p25pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p25pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8064,12 +7445,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p26pass1
%% Type: invalid
%% Sections: 2.8 [26]
-'o-p26pass1'(suite) -> [];
'o-p26pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p26pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p26pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8077,12 +7457,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p27pass1
%% Type: invalid
%% Sections: 2.8 [27]
-'o-p27pass1'(suite) -> [];
'o-p27pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8090,12 +7469,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p27pass2
%% Type: invalid
%% Sections: 2.8 [27]
-'o-p27pass2'(suite) -> [];
'o-p27pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8103,12 +7481,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p27pass3
%% Type: invalid
%% Sections: 2.8 [27]
-'o-p27pass3'(suite) -> [];
'o-p27pass3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27pass3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27pass3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8116,12 +7493,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p27pass4
%% Type: invalid
%% Sections: 2.8 [27]
-'o-p27pass4'(suite) -> [];
'o-p27pass4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27pass4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27pass4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8129,12 +7505,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p32pass1
%% Type: invalid
%% Sections: 2.9 [32]
-'o-p32pass1'(suite) -> [];
'o-p32pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8142,12 +7517,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p32pass2
%% Type: invalid
%% Sections: 2.9 [32]
-'o-p32pass2'(suite) -> [];
'o-p32pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8155,12 +7529,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p39pass1
%% Type: invalid
%% Sections: 3 3.1 [39] [44]
-'o-p39pass1'(suite) -> [];
'o-p39pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8168,12 +7541,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p39pass2
%% Type: invalid
%% Sections: 3 3.1 [39] [43]
-'o-p39pass2'(suite) -> [];
'o-p39pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8181,12 +7553,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p40pass1
%% Type: invalid
%% Sections: 3.1 [40]
-'o-p40pass1'(suite) -> [];
'o-p40pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8194,12 +7565,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p40pass2
%% Type: invalid
%% Sections: 3.1 [40]
-'o-p40pass2'(suite) -> [];
'o-p40pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8207,12 +7577,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p40pass3
%% Type: invalid
%% Sections: 3.1 [40] [41]
-'o-p40pass3'(suite) -> [];
'o-p40pass3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40pass3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40pass3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8220,12 +7589,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p40pass4
%% Type: invalid
%% Sections: 3.1 [40]
-'o-p40pass4'(suite) -> [];
'o-p40pass4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40pass4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40pass4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8233,12 +7601,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p41pass1
%% Type: invalid
%% Sections: 3.1 [41]
-'o-p41pass1'(suite) -> [];
'o-p41pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8246,12 +7613,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p41pass2
%% Type: invalid
%% Sections: 3.1 [41]
-'o-p41pass2'(suite) -> [];
'o-p41pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8259,12 +7625,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p42pass1
%% Type: invalid
%% Sections: 3.1 [42]
-'o-p42pass1'(suite) -> [];
'o-p42pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8272,12 +7637,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p42pass2
%% Type: invalid
%% Sections: 3.1 [42]
-'o-p42pass2'(suite) -> [];
'o-p42pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8285,12 +7649,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44pass1
%% Type: invalid
%% Sections: 3.1 [44]
-'o-p44pass1'(suite) -> [];
'o-p44pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8298,12 +7661,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44pass2
%% Type: invalid
%% Sections: 3.1 [44]
-'o-p44pass2'(suite) -> [];
'o-p44pass2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8311,12 +7673,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44pass3
%% Type: invalid
%% Sections: 3.1 [44]
-'o-p44pass3'(suite) -> [];
'o-p44pass3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8324,12 +7685,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44pass4
%% Type: invalid
%% Sections: 3.1 [44]
-'o-p44pass4'(suite) -> [];
'o-p44pass4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8337,12 +7697,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44pass5
%% Type: invalid
%% Sections: 3.1 [44]
-'o-p44pass5'(suite) -> [];
'o-p44pass5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44pass5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8350,12 +7709,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p66pass1
%% Type: invalid
%% Sections: 4.1 [66]
-'o-p66pass1'(suite) -> [];
'o-p66pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8363,12 +7721,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p74pass1
%% Type: invalid
%% Sections: 4.2 [74]
-'o-p74pass1'(suite) -> [];
'o-p74pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p74pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p74pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8376,12 +7733,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p75pass1
%% Type: invalid
%% Sections: 4.2.2 [75]
-'o-p75pass1'(suite) -> [];
'o-p75pass1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75pass1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75pass1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8389,12 +7745,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-e2
%% Type: invalid
%% Sections: 3.3.1 [58] [59] Errata [E2]
-'o-e2'(suite) -> [];
'o-e2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","e2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","e2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -8402,12 +7757,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p01fail1
%% Type: not-wf
%% Sections: 2.1 [1]
-'o-p01fail1'(suite) -> [];
'o-p01fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8415,12 +7769,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p01fail2
%% Type: not-wf
%% Sections: 2.1 [1]
-'o-p01fail2'(suite) -> [];
'o-p01fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8428,15 +7781,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p01fail3
%% Type: not-wf
%% Sections: 2.1 [1]
-'o-p01fail3'(suite) -> [];
'o-p01fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01fail3.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01fail3.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_, <<"<bad/>", _/binary>>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_, <<"<bad/>", _/binary>>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8444,12 +7796,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p01fail4
%% Type: not-wf
%% Sections: 2.1 [1]
-'o-p01fail4'(suite) -> [];
'o-p01fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p01fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8457,12 +7808,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail1
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail1'(suite) -> [];
'o-p02fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8470,12 +7820,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail10
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail10'(suite) -> [];
'o-p02fail10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8483,12 +7832,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail11
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail11'(suite) -> [];
'o-p02fail11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8496,12 +7844,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail12
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail12'(suite) -> [];
'o-p02fail12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8509,12 +7856,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail13
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail13'(suite) -> [];
'o-p02fail13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8522,12 +7868,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail14
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail14'(suite) -> [];
'o-p02fail14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8535,12 +7880,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail15
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail15'(suite) -> [];
'o-p02fail15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8548,12 +7892,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail16
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail16'(suite) -> [];
'o-p02fail16'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail16.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail16.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8561,12 +7904,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail17
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail17'(suite) -> [];
'o-p02fail17'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail17.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail17.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8574,12 +7916,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail18
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail18'(suite) -> [];
'o-p02fail18'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail18.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail18.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8587,12 +7928,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail19
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail19'(suite) -> [];
'o-p02fail19'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail19.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail19.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8600,12 +7940,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail2
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail2'(suite) -> [];
'o-p02fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8613,12 +7952,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail20
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail20'(suite) -> [];
'o-p02fail20'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail20.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail20.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8626,12 +7964,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail21
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail21'(suite) -> [];
'o-p02fail21'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail21.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail21.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8639,12 +7976,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail22
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail22'(suite) -> [];
'o-p02fail22'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail22.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail22.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8652,12 +7988,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail23
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail23'(suite) -> [];
'o-p02fail23'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail23.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail23.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8665,12 +8000,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail24
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail24'(suite) -> [];
'o-p02fail24'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail24.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail24.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8678,12 +8012,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail25
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail25'(suite) -> [];
'o-p02fail25'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail25.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail25.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8691,12 +8024,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail26
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail26'(suite) -> [];
'o-p02fail26'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail26.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail26.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8704,12 +8036,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail27
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail27'(suite) -> [];
'o-p02fail27'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail27.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail27.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8717,12 +8048,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail28
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail28'(suite) -> [];
'o-p02fail28'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail28.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail28.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8730,12 +8060,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail29
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail29'(suite) -> [];
'o-p02fail29'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail29.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail29.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8743,12 +8072,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail3
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail3'(suite) -> [];
'o-p02fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8756,12 +8084,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail30
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail30'(suite) -> [];
'o-p02fail30'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail30.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail30.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8769,12 +8096,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail31
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail31'(suite) -> [];
'o-p02fail31'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail31.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail31.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8782,12 +8108,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail4
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail4'(suite) -> [];
'o-p02fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8795,12 +8120,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail5
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail5'(suite) -> [];
'o-p02fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8808,12 +8132,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail6
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail6'(suite) -> [];
'o-p02fail6'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail6.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail6.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8821,12 +8144,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail7
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail7'(suite) -> [];
'o-p02fail7'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail7.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail7.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8834,12 +8156,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail8
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail8'(suite) -> [];
'o-p02fail8'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail8.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail8.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8847,12 +8168,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p02fail9
%% Type: not-wf
%% Sections: 2.2 [2]
-'o-p02fail9'(suite) -> [];
'o-p02fail9'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail9.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p02fail9.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8860,12 +8180,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail1
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail1'(suite) -> [];
'o-p03fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8873,12 +8192,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail10
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail10'(suite) -> [];
'o-p03fail10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8886,12 +8204,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail11
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail11'(suite) -> [];
'o-p03fail11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8899,12 +8216,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail12
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail12'(suite) -> [];
'o-p03fail12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8912,12 +8228,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail13
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail13'(suite) -> [];
'o-p03fail13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8925,12 +8240,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail14
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail14'(suite) -> [];
'o-p03fail14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8938,12 +8252,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail15
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail15'(suite) -> [];
'o-p03fail15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8951,12 +8264,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail16
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail16'(suite) -> [];
'o-p03fail16'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail16.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail16.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8964,12 +8276,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail17
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail17'(suite) -> [];
'o-p03fail17'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail17.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail17.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8977,12 +8288,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail18
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail18'(suite) -> [];
'o-p03fail18'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail18.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail18.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -8990,12 +8300,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail19
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail19'(suite) -> [];
'o-p03fail19'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail19.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail19.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9003,12 +8312,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail2
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail2'(suite) -> [];
'o-p03fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9016,12 +8324,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail20
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail20'(suite) -> [];
'o-p03fail20'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail20.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail20.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9029,12 +8336,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail21
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail21'(suite) -> [];
'o-p03fail21'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail21.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail21.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9042,12 +8348,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail22
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail22'(suite) -> [];
'o-p03fail22'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail22.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail22.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9055,12 +8360,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail23
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail23'(suite) -> [];
'o-p03fail23'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail23.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail23.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9068,12 +8372,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail24
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail24'(suite) -> [];
'o-p03fail24'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail24.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail24.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9081,12 +8384,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail25
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail25'(suite) -> [];
'o-p03fail25'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail25.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail25.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9094,12 +8396,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail26
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail26'(suite) -> [];
'o-p03fail26'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail26.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail26.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9107,12 +8408,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail27
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail27'(suite) -> [];
'o-p03fail27'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail27.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail27.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9120,12 +8420,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail28
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail28'(suite) -> [];
'o-p03fail28'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail28.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail28.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9133,12 +8432,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail29
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail29'(suite) -> [];
'o-p03fail29'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail29.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail29.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9146,12 +8444,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail3
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail3'(suite) -> [];
'o-p03fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9159,12 +8456,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail4
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail4'(suite) -> [];
'o-p03fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9172,12 +8468,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail5
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail5'(suite) -> [];
'o-p03fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9185,12 +8480,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail7
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail7'(suite) -> [];
'o-p03fail7'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail7.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail7.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9198,12 +8492,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail8
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail8'(suite) -> [];
'o-p03fail8'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail8.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail8.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9211,12 +8504,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p03fail9
%% Type: not-wf
%% Sections: 2.3 [3]
-'o-p03fail9'(suite) -> [];
'o-p03fail9'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail9.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p03fail9.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9224,12 +8516,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p04fail1
%% Type: not-wf
%% Sections: 2.3 [4]
-'o-p04fail1'(suite) -> [];
'o-p04fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p04fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p04fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9237,12 +8528,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p04fail2
%% Type: not-wf
%% Sections: 2.3 [4]
-'o-p04fail2'(suite) -> [];
'o-p04fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p04fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p04fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9250,12 +8540,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p04fail3
%% Type: not-wf
%% Sections: 2.3 [4]
-'o-p04fail3'(suite) -> [];
'o-p04fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p04fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p04fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9263,12 +8552,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p05fail1
%% Type: not-wf
%% Sections: 2.3 [5]
-'o-p05fail1'(suite) -> [];
'o-p05fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9276,12 +8564,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p05fail2
%% Type: not-wf
%% Sections: 2.3 [5]
-'o-p05fail2'(suite) -> [];
'o-p05fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9289,12 +8576,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p05fail3
%% Type: not-wf
%% Sections: 2.3 [5]
-'o-p05fail3'(suite) -> [];
'o-p05fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9302,12 +8588,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p05fail4
%% Type: not-wf
%% Sections: 2.3 [5]
-'o-p05fail4'(suite) -> [];
'o-p05fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9315,12 +8600,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p05fail5
%% Type: not-wf
%% Sections: 2.3 [5]
-'o-p05fail5'(suite) -> [];
'o-p05fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p05fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9328,12 +8612,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p09fail1
%% Type: not-wf
%% Sections: 2.3 [9]
-'o-p09fail1'(suite) -> [];
'o-p09fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9341,12 +8624,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p09fail2
%% Type: not-wf
%% Sections: 2.3 [9]
-'o-p09fail2'(suite) -> [];
'o-p09fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9354,12 +8636,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p09fail3
%% Type: not-wf
%% Sections: 2.3 [9]
-'o-p09fail3'(suite) -> [];
'o-p09fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9367,12 +8648,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p09fail4
%% Type: not-wf
%% Sections: 2.3 [9]
-'o-p09fail4'(suite) -> [];
'o-p09fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9380,12 +8660,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p09fail5
%% Type: not-wf
%% Sections: 2.3 [9]
-'o-p09fail5'(suite) -> [];
'o-p09fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p09fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9393,12 +8672,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p10fail1
%% Type: not-wf
%% Sections: 2.3 [10]
-'o-p10fail1'(suite) -> [];
'o-p10fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p10fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p10fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9406,12 +8684,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p10fail2
%% Type: not-wf
%% Sections: 2.3 [10]
-'o-p10fail2'(suite) -> [];
'o-p10fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p10fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p10fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9419,12 +8696,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p10fail3
%% Type: not-wf
%% Sections: 2.3 [10]
-'o-p10fail3'(suite) -> [];
'o-p10fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p10fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p10fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9432,12 +8708,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p11fail1
%% Type: not-wf
%% Sections: 2.3 [11]
-'o-p11fail1'(suite) -> [];
'o-p11fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p11fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p11fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9445,12 +8720,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p11fail2
%% Type: not-wf
%% Sections: 2.3 [11]
-'o-p11fail2'(suite) -> [];
'o-p11fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p11fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p11fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9458,12 +8732,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p12fail1
%% Type: not-wf
%% Sections: 2.3 [12]
-'o-p12fail1'(suite) -> [];
'o-p12fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9471,12 +8744,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p12fail2
%% Type: not-wf
%% Sections: 2.3 [12]
-'o-p12fail2'(suite) -> [];
'o-p12fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9484,12 +8756,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p12fail3
%% Type: not-wf
%% Sections: 2.3 [12]
-'o-p12fail3'(suite) -> [];
'o-p12fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9497,12 +8768,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p12fail4
%% Type: not-wf
%% Sections: 2.3 [12]
-'o-p12fail4'(suite) -> [];
'o-p12fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9510,12 +8780,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p12fail5
%% Type: not-wf
%% Sections: 2.3 [12]
-'o-p12fail5'(suite) -> [];
'o-p12fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9523,12 +8792,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p12fail6
%% Type: not-wf
%% Sections: 2.3 [12]
-'o-p12fail6'(suite) -> [];
'o-p12fail6'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail6.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail6.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9536,12 +8804,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p12fail7
%% Type: not-wf
%% Sections: 2.3 [13]
-'o-p12fail7'(suite) -> [];
'o-p12fail7'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail7.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p12fail7.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9549,12 +8816,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p14fail1
%% Type: not-wf
%% Sections: 2.4 [14]
-'o-p14fail1'(suite) -> [];
'o-p14fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p14fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p14fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9562,12 +8828,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p14fail2
%% Type: not-wf
%% Sections: 2.4 [14]
-'o-p14fail2'(suite) -> [];
'o-p14fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p14fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p14fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9575,12 +8840,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p14fail3
%% Type: not-wf
%% Sections: 2.4 [14]
-'o-p14fail3'(suite) -> [];
'o-p14fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p14fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p14fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9588,12 +8852,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p15fail1
%% Type: not-wf
%% Sections: 2.5 [15]
-'o-p15fail1'(suite) -> [];
'o-p15fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p15fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p15fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9601,12 +8864,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p15fail2
%% Type: not-wf
%% Sections: 2.5 [15]
-'o-p15fail2'(suite) -> [];
'o-p15fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p15fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p15fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9614,12 +8876,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p15fail3
%% Type: not-wf
%% Sections: 2.5 [15]
-'o-p15fail3'(suite) -> [];
'o-p15fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p15fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p15fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9627,12 +8888,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p16fail1
%% Type: not-wf
%% Sections: 2.6 [16]
-'o-p16fail1'(suite) -> [];
'o-p16fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9640,12 +8900,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p16fail2
%% Type: not-wf
%% Sections: 2.6 [16]
-'o-p16fail2'(suite) -> [];
'o-p16fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9653,12 +8912,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p16fail3
%% Type: not-wf
%% Sections: 2.6 [16]
-'o-p16fail3'(suite) -> [];
'o-p16fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p16fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9666,12 +8924,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p18fail1
%% Type: not-wf
%% Sections: 2.7 [18]
-'o-p18fail1'(suite) -> [];
'o-p18fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p18fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p18fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9679,12 +8936,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p18fail2
%% Type: not-wf
%% Sections: 2.7 [18]
-'o-p18fail2'(suite) -> [];
'o-p18fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p18fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p18fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9692,12 +8948,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p18fail3
%% Type: not-wf
%% Sections: 2.7 [18]
-'o-p18fail3'(suite) -> [];
'o-p18fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p18fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p18fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9705,12 +8960,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p22fail1
%% Type: not-wf
%% Sections: 2.8 [22]
-'o-p22fail1'(suite) -> [];
'o-p22fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9718,12 +8972,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p22fail2
%% Type: not-wf
%% Sections: 2.8 [22]
-'o-p22fail2'(suite) -> [];
'o-p22fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p22fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9731,12 +8984,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p23fail1
%% Type: not-wf
%% Sections: 2.8 [23]
-'o-p23fail1'(suite) -> [];
'o-p23fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9744,12 +8996,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p23fail2
%% Type: not-wf
%% Sections: 2.8 [23]
-'o-p23fail2'(suite) -> [];
'o-p23fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9757,12 +9008,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p23fail3
%% Type: not-wf
%% Sections: 2.8 [23]
-'o-p23fail3'(suite) -> [];
'o-p23fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9770,12 +9020,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p23fail4
%% Type: not-wf
%% Sections: 2.8 [23]
-'o-p23fail4'(suite) -> [];
'o-p23fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9783,12 +9032,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p23fail5
%% Type: not-wf
%% Sections: 2.8 [23]
-'o-p23fail5'(suite) -> [];
'o-p23fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p23fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9796,12 +9044,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p24fail1
%% Type: not-wf
%% Sections: 2.8 [24]
-'o-p24fail1'(suite) -> [];
'o-p24fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9809,12 +9056,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p24fail2
%% Type: not-wf
%% Sections: 2.8 [24]
-'o-p24fail2'(suite) -> [];
'o-p24fail2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24fail2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p24fail2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9822,12 +9068,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p25fail1
%% Type: not-wf
%% Sections: 2.8 [25]
-'o-p25fail1'(suite) -> [];
'o-p25fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p25fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p25fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9835,12 +9080,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p26fail1
%% Type: not-wf
%% Sections: 2.8 [26]
-'o-p26fail1'(suite) -> [];
'o-p26fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p26fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p26fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9848,12 +9092,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p26fail2
%% Type: not-wf
%% Sections: 2.8 [26]
-'o-p26fail2'(suite) -> [];
'o-p26fail2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p26fail2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p26fail2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9861,12 +9104,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p27fail1
%% Type: not-wf
%% Sections: 2.8 [27]
-'o-p27fail1'(suite) -> [];
'o-p27fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p27fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9874,12 +9116,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p28fail1
%% Type: not-wf
%% Sections: 2.8 [28]
-'o-p28fail1'(suite) -> [];
'o-p28fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p28fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9887,12 +9128,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p29fail1
%% Type: not-wf
%% Sections: 2.8 [29]
-'o-p29fail1'(suite) -> [];
'o-p29fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p29fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p29fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9900,12 +9140,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p30fail1
%% Type: not-wf
%% Sections: 2.8 [30]
-'o-p30fail1'(suite) -> [];
'o-p30fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p30fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p30fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9913,12 +9152,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p31fail1
%% Type: not-wf
%% Sections: 2.8 [31]
-'o-p31fail1'(suite) -> [];
'o-p31fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p31fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p31fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9926,12 +9164,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p32fail1
%% Type: not-wf
%% Sections: 2.9 [32]
-'o-p32fail1'(suite) -> [];
'o-p32fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9939,12 +9176,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p32fail2
%% Type: not-wf
%% Sections: 2.9 [32]
-'o-p32fail2'(suite) -> [];
'o-p32fail2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9952,12 +9188,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p32fail3
%% Type: not-wf
%% Sections: 2.9 [32]
-'o-p32fail3'(suite) -> [];
'o-p32fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9965,12 +9200,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p32fail4
%% Type: not-wf
%% Sections: 2.9 [32]
-'o-p32fail4'(suite) -> [];
'o-p32fail4'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail4.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail4.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9978,12 +9212,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p32fail5
%% Type: not-wf
%% Sections: 2.9 [32]
-'o-p32fail5'(suite) -> [];
'o-p32fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p32fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -9991,12 +9224,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p39fail1
%% Type: not-wf
%% Sections: 3 [39]
-'o-p39fail1'(suite) -> [];
'o-p39fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10004,12 +9236,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p39fail2
%% Type: not-wf
%% Sections: 3 [39]
-'o-p39fail2'(suite) -> [];
'o-p39fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10017,12 +9248,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p39fail3
%% Type: not-wf
%% Sections: 3 [39]
-'o-p39fail3'(suite) -> [];
'o-p39fail3'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail3.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail3.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10030,12 +9260,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p39fail4
%% Type: not-wf
%% Sections: 2.8 [23]
-'o-p39fail4'(suite) -> [];
'o-p39fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10043,12 +9272,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p39fail5
%% Type: not-wf
%% Sections: 2.8 [23]
-'o-p39fail5'(suite) -> [];
'o-p39fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p39fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10056,12 +9284,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p40fail1
%% Type: not-wf
%% Sections: 3.1 [40]
-'o-p40fail1'(suite) -> [];
'o-p40fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10069,12 +9296,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p40fail2
%% Type: not-wf
%% Sections: 3.1 [40]
-'o-p40fail2'(suite) -> [];
'o-p40fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10082,12 +9308,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p40fail3
%% Type: not-wf
%% Sections: 3.1 [40]
-'o-p40fail3'(suite) -> [];
'o-p40fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10095,12 +9320,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p40fail4
%% Type: not-wf
%% Sections: 3.1 [40]
-'o-p40fail4'(suite) -> [];
'o-p40fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p40fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10108,12 +9332,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p41fail1
%% Type: not-wf
%% Sections: 3.1 [41]
-'o-p41fail1'(suite) -> [];
'o-p41fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10121,12 +9344,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p41fail2
%% Type: not-wf
%% Sections: 3.1 [41]
-'o-p41fail2'(suite) -> [];
'o-p41fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10134,12 +9356,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p41fail3
%% Type: not-wf
%% Sections: 3.1 [41]
-'o-p41fail3'(suite) -> [];
'o-p41fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p41fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10147,12 +9368,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p42fail1
%% Type: not-wf
%% Sections: 3.1 [42]
-'o-p42fail1'(suite) -> [];
'o-p42fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10160,12 +9380,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p42fail2
%% Type: not-wf
%% Sections: 3.1 [42]
-'o-p42fail2'(suite) -> [];
'o-p42fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10173,12 +9392,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p42fail3
%% Type: not-wf
%% Sections: 3.1 [42]
-'o-p42fail3'(suite) -> [];
'o-p42fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p42fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10186,12 +9404,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p43fail1
%% Type: not-wf
%% Sections: 3.1 [43]
-'o-p43fail1'(suite) -> [];
'o-p43fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p43fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p43fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10199,12 +9416,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p43fail2
%% Type: not-wf
%% Sections: 3.1 [43]
-'o-p43fail2'(suite) -> [];
'o-p43fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p43fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p43fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10212,12 +9428,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p43fail3
%% Type: not-wf
%% Sections: 3.1 [43]
-'o-p43fail3'(suite) -> [];
'o-p43fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p43fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p43fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10225,12 +9440,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44fail1
%% Type: not-wf
%% Sections: 3.1 [44]
-'o-p44fail1'(suite) -> [];
'o-p44fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10238,12 +9452,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44fail2
%% Type: not-wf
%% Sections: 3.1 [44]
-'o-p44fail2'(suite) -> [];
'o-p44fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10251,12 +9464,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44fail3
%% Type: not-wf
%% Sections: 3.1 [44]
-'o-p44fail3'(suite) -> [];
'o-p44fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10264,12 +9476,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44fail4
%% Type: not-wf
%% Sections: 3.1 [44]
-'o-p44fail4'(suite) -> [];
'o-p44fail4'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail4.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail4.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10277,12 +9488,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p44fail5
%% Type: not-wf
%% Sections: 3.1 [44]
-'o-p44fail5'(suite) -> [];
'o-p44fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p44fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10290,12 +9500,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p45fail1
%% Type: not-wf
%% Sections: 3.2 [45]
-'o-p45fail1'(suite) -> [];
'o-p45fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10303,12 +9512,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p45fail2
%% Type: not-wf
%% Sections: 3.2 [45]
-'o-p45fail2'(suite) -> [];
'o-p45fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10316,12 +9524,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p45fail3
%% Type: not-wf
%% Sections: 3.2 [45]
-'o-p45fail3'(suite) -> [];
'o-p45fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10329,12 +9536,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p45fail4
%% Type: not-wf
%% Sections: 3.2 [45]
-'o-p45fail4'(suite) -> [];
'o-p45fail4'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45fail4.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p45fail4.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10342,12 +9548,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p46fail1
%% Type: not-wf
%% Sections: 3.2 [46]
-'o-p46fail1'(suite) -> [];
'o-p46fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10355,12 +9560,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p46fail2
%% Type: not-wf
%% Sections: 3.2 [46]
-'o-p46fail2'(suite) -> [];
'o-p46fail2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10368,12 +9572,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p46fail3
%% Type: not-wf
%% Sections: 3.2 [46]
-'o-p46fail3'(suite) -> [];
'o-p46fail3'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail3.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail3.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10381,12 +9584,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p46fail4
%% Type: not-wf
%% Sections: 3.2 [46]
-'o-p46fail4'(suite) -> [];
'o-p46fail4'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail4.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail4.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10394,12 +9596,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p46fail5
%% Type: not-wf
%% Sections: 3.2 [46]
-'o-p46fail5'(suite) -> [];
'o-p46fail5'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail5.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail5.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10407,12 +9608,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p46fail6
%% Type: not-wf
%% Sections: 3.2 [46]
-'o-p46fail6'(suite) -> [];
'o-p46fail6'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail6.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p46fail6.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10420,12 +9620,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p47fail1
%% Type: not-wf
%% Sections: 3.2.1 [47]
-'o-p47fail1'(suite) -> [];
'o-p47fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10433,12 +9632,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p47fail2
%% Type: not-wf
%% Sections: 3.2.1 [47]
-'o-p47fail2'(suite) -> [];
'o-p47fail2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47fail2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47fail2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10446,12 +9644,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p47fail3
%% Type: not-wf
%% Sections: 3.2.1 [47]
-'o-p47fail3'(suite) -> [];
'o-p47fail3'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47fail3.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47fail3.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10459,12 +9656,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p47fail4
%% Type: not-wf
%% Sections: 3.2.1 [47]
-'o-p47fail4'(suite) -> [];
'o-p47fail4'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47fail4.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p47fail4.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10472,12 +9668,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p48fail1
%% Type: not-wf
%% Sections: 3.2.1 [48]
-'o-p48fail1'(suite) -> [];
'o-p48fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p48fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p48fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10485,12 +9680,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p48fail2
%% Type: not-wf
%% Sections: 3.2.1 [48]
-'o-p48fail2'(suite) -> [];
'o-p48fail2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p48fail2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p48fail2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10498,12 +9692,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p49fail1
%% Type: not-wf
%% Sections: 3.2.1 [49]
-'o-p49fail1'(suite) -> [];
'o-p49fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p49fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p49fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10511,12 +9704,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p50fail1
%% Type: not-wf
%% Sections: 3.2.1 [50]
-'o-p50fail1'(suite) -> [];
'o-p50fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p50fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p50fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10524,12 +9716,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p51fail1
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'o-p51fail1'(suite) -> [];
'o-p51fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10537,12 +9728,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p51fail2
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'o-p51fail2'(suite) -> [];
'o-p51fail2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10550,12 +9740,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p51fail3
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'o-p51fail3'(suite) -> [];
'o-p51fail3'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail3.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail3.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10563,12 +9752,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p51fail4
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'o-p51fail4'(suite) -> [];
'o-p51fail4'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail4.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail4.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10576,12 +9764,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p51fail5
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'o-p51fail5'(suite) -> [];
'o-p51fail5'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail5.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail5.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10589,12 +9776,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p51fail6
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'o-p51fail6'(suite) -> [];
'o-p51fail6'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail6.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail6.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10602,12 +9788,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p51fail7
%% Type: not-wf
%% Sections: 3.2.2 [51]
-'o-p51fail7'(suite) -> [];
'o-p51fail7'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail7.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p51fail7.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10615,12 +9800,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p52fail1
%% Type: not-wf
%% Sections: 3.3 [52]
-'o-p52fail1'(suite) -> [];
'o-p52fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p52fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p52fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10628,12 +9812,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p52fail2
%% Type: not-wf
%% Sections: 3.3 [52]
-'o-p52fail2'(suite) -> [];
'o-p52fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p52fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p52fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10641,12 +9824,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p53fail1
%% Type: not-wf
%% Sections: 3.3 [53]
-'o-p53fail1'(suite) -> [];
'o-p53fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10654,12 +9836,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p53fail2
%% Type: not-wf
%% Sections: 3.3 [53]
-'o-p53fail2'(suite) -> [];
'o-p53fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10667,12 +9848,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p53fail3
%% Type: not-wf
%% Sections: 3.3 [53]
-'o-p53fail3'(suite) -> [];
'o-p53fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10680,12 +9860,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p53fail4
%% Type: not-wf
%% Sections: 3.3 [53]
-'o-p53fail4'(suite) -> [];
'o-p53fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10693,12 +9872,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p53fail5
%% Type: not-wf
%% Sections: 3.3 [53]
-'o-p53fail5'(suite) -> [];
'o-p53fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p53fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10706,12 +9884,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p54fail1
%% Type: not-wf
%% Sections: 3.3.1 [54]
-'o-p54fail1'(suite) -> [];
'o-p54fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p54fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p54fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10719,12 +9896,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p55fail1
%% Type: not-wf
%% Sections: 3.3.1 [55]
-'o-p55fail1'(suite) -> [];
'o-p55fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p55fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p55fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10732,12 +9908,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p56fail1
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'o-p56fail1'(suite) -> [];
'o-p56fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10745,12 +9920,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p56fail2
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'o-p56fail2'(suite) -> [];
'o-p56fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10758,12 +9932,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p56fail3
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'o-p56fail3'(suite) -> [];
'o-p56fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10771,12 +9944,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p56fail4
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'o-p56fail4'(suite) -> [];
'o-p56fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10784,12 +9956,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p56fail5
%% Type: not-wf
%% Sections: 3.3.1 [56]
-'o-p56fail5'(suite) -> [];
'o-p56fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p56fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10797,12 +9968,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p57fail1
%% Type: not-wf
%% Sections: 3.3.1 [57]
-'o-p57fail1'(suite) -> [];
'o-p57fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p57fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p57fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10810,12 +9980,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p58fail1
%% Type: not-wf
%% Sections: 3.3.1 [58]
-'o-p58fail1'(suite) -> [];
'o-p58fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10823,12 +9992,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p58fail2
%% Type: not-wf
%% Sections: 3.3.1 [58]
-'o-p58fail2'(suite) -> [];
'o-p58fail2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10836,12 +10004,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p58fail3
%% Type: not-wf
%% Sections: 3.3.1 [58]
-'o-p58fail3'(suite) -> [];
'o-p58fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10849,12 +10016,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p58fail4
%% Type: not-wf
%% Sections: 3.3.1 [58]
-'o-p58fail4'(suite) -> [];
'o-p58fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10862,12 +10028,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p58fail5
%% Type: not-wf
%% Sections: 3.3.1 [58]
-'o-p58fail5'(suite) -> [];
'o-p58fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10875,12 +10040,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p58fail6
%% Type: not-wf
%% Sections: 3.3.1 [58]
-'o-p58fail6'(suite) -> [];
'o-p58fail6'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail6.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail6.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10888,12 +10052,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p58fail7
%% Type: not-wf
%% Sections: 3.3.1 [58]
-'o-p58fail7'(suite) -> [];
'o-p58fail7'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail7.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail7.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10901,12 +10064,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p58fail8
%% Type: not-wf
%% Sections: 3.3.1 [58]
-'o-p58fail8'(suite) -> [];
'o-p58fail8'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail8.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p58fail8.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10914,12 +10076,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p59fail1
%% Type: not-wf
%% Sections: 3.3.1 [59]
-'o-p59fail1'(suite) -> [];
'o-p59fail1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p59fail1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p59fail1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10927,12 +10088,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p59fail2
%% Type: not-wf
%% Sections: 3.3.1 [59]
-'o-p59fail2'(suite) -> [];
'o-p59fail2'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p59fail2.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p59fail2.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10940,12 +10100,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p59fail3
%% Type: not-wf
%% Sections: 3.3.1 [59]
-'o-p59fail3'(suite) -> [];
'o-p59fail3'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p59fail3.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p59fail3.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10953,12 +10112,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p60fail1
%% Type: not-wf
%% Sections: 3.3.2 [60]
-'o-p60fail1'(suite) -> [];
'o-p60fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10966,12 +10124,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p60fail2
%% Type: not-wf
%% Sections: 3.3.2 [60]
-'o-p60fail2'(suite) -> [];
'o-p60fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10979,12 +10136,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p60fail3
%% Type: not-wf
%% Sections: 3.3.2 [60]
-'o-p60fail3'(suite) -> [];
'o-p60fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -10992,12 +10148,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p60fail4
%% Type: not-wf
%% Sections: 3.3.2 [60]
-'o-p60fail4'(suite) -> [];
'o-p60fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11005,12 +10160,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p60fail5
%% Type: not-wf
%% Sections: 3.3.2 [60]
-'o-p60fail5'(suite) -> [];
'o-p60fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p60fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11018,12 +10172,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p61fail1
%% Type: not-wf
%% Sections: 3.4 [61]
-'o-p61fail1'(suite) -> [];
'o-p61fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p61fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p61fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11031,12 +10184,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p62fail1
%% Type: not-wf
%% Sections: 3.4 [62]
-'o-p62fail1'(suite) -> [];
'o-p62fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p62fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p62fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11044,12 +10196,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p62fail2
%% Type: not-wf
%% Sections: 3.4 [62]
-'o-p62fail2'(suite) -> [];
'o-p62fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p62fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p62fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11057,12 +10208,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p63fail1
%% Type: not-wf
%% Sections: 3.4 [63]
-'o-p63fail1'(suite) -> [];
'o-p63fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p63fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p63fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11070,12 +10220,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p63fail2
%% Type: not-wf
%% Sections: 3.4 [63]
-'o-p63fail2'(suite) -> [];
'o-p63fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p63fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p63fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11083,12 +10232,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p64fail1
%% Type: not-wf
%% Sections: 3.4 [64]
-'o-p64fail1'(suite) -> [];
'o-p64fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p64fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p64fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11096,12 +10244,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p64fail2
%% Type: not-wf
%% Sections: 3.4 [64]
-'o-p64fail2'(suite) -> [];
'o-p64fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p64fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p64fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11109,12 +10256,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p66fail1
%% Type: not-wf
%% Sections: 4.1 [66]
-'o-p66fail1'(suite) -> [];
'o-p66fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11122,12 +10268,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p66fail2
%% Type: not-wf
%% Sections: 4.1 [66]
-'o-p66fail2'(suite) -> [];
'o-p66fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11135,12 +10280,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p66fail3
%% Type: not-wf
%% Sections: 4.1 [66]
-'o-p66fail3'(suite) -> [];
'o-p66fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11148,12 +10292,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p66fail4
%% Type: not-wf
%% Sections: 4.1 [66]
-'o-p66fail4'(suite) -> [];
'o-p66fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11161,12 +10304,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p66fail5
%% Type: not-wf
%% Sections: 4.1 [66]
-'o-p66fail5'(suite) -> [];
'o-p66fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11174,12 +10316,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p66fail6
%% Type: not-wf
%% Sections: 4.1 [66]
-'o-p66fail6'(suite) -> [];
'o-p66fail6'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail6.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p66fail6.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11187,12 +10328,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p68fail1
%% Type: not-wf
%% Sections: 4.1 [68]
-'o-p68fail1'(suite) -> [];
'o-p68fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p68fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p68fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11200,12 +10340,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p68fail2
%% Type: not-wf
%% Sections: 4.1 [68]
-'o-p68fail2'(suite) -> [];
'o-p68fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p68fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p68fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11213,12 +10352,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p68fail3
%% Type: not-wf
%% Sections: 4.1 [68]
-'o-p68fail3'(suite) -> [];
'o-p68fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p68fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p68fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11226,12 +10364,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p69fail1
%% Type: not-wf
%% Sections: 4.1 [69]
-'o-p69fail1'(suite) -> [];
'o-p69fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p69fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p69fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11239,12 +10376,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p69fail2
%% Type: not-wf
%% Sections: 4.1 [69]
-'o-p69fail2'(suite) -> [];
'o-p69fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p69fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p69fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11252,12 +10388,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p69fail3
%% Type: not-wf
%% Sections: 4.1 [69]
-'o-p69fail3'(suite) -> [];
'o-p69fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p69fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p69fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11265,12 +10400,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p70fail1
%% Type: not-wf
%% Sections: 4.2 [70]
-'o-p70fail1'(suite) -> [];
'o-p70fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p70fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p70fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11278,12 +10412,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p71fail1
%% Type: not-wf
%% Sections: 4.2 [71]
-'o-p71fail1'(suite) -> [];
'o-p71fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11291,12 +10424,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p71fail2
%% Type: not-wf
%% Sections: 4.2 [71]
-'o-p71fail2'(suite) -> [];
'o-p71fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11304,12 +10436,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p71fail3
%% Type: not-wf
%% Sections: 4.2 [71]
-'o-p71fail3'(suite) -> [];
'o-p71fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11317,12 +10448,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p71fail4
%% Type: not-wf
%% Sections: 4.2 [71]
-'o-p71fail4'(suite) -> [];
'o-p71fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p71fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11330,12 +10460,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p72fail1
%% Type: not-wf
%% Sections: 4.2 [72]
-'o-p72fail1'(suite) -> [];
'o-p72fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11343,12 +10472,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p72fail2
%% Type: not-wf
%% Sections: 4.2 [72]
-'o-p72fail2'(suite) -> [];
'o-p72fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11356,12 +10484,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p72fail3
%% Type: not-wf
%% Sections: 4.2 [72]
-'o-p72fail3'(suite) -> [];
'o-p72fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11369,12 +10496,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p72fail4
%% Type: not-wf
%% Sections: 4.2 [72]
-'o-p72fail4'(suite) -> [];
'o-p72fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p72fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11382,12 +10508,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p73fail1
%% Type: not-wf
%% Sections: 4.2 [73]
-'o-p73fail1'(suite) -> [];
'o-p73fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11395,12 +10520,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p73fail2
%% Type: not-wf
%% Sections: 4.2 [73]
-'o-p73fail2'(suite) -> [];
'o-p73fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11408,12 +10532,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p73fail3
%% Type: not-wf
%% Sections: 4.2 [73]
-'o-p73fail3'(suite) -> [];
'o-p73fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11421,12 +10544,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p73fail4
%% Type: not-wf
%% Sections: 4.2 [73]
-'o-p73fail4'(suite) -> [];
'o-p73fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11434,12 +10556,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p73fail5
%% Type: not-wf
%% Sections: 4.2 [73]
-'o-p73fail5'(suite) -> [];
'o-p73fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p73fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11447,12 +10568,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p74fail1
%% Type: not-wf
%% Sections: 4.2 [74]
-'o-p74fail1'(suite) -> [];
'o-p74fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p74fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p74fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11460,12 +10580,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p74fail2
%% Type: not-wf
%% Sections: 4.2 [74]
-'o-p74fail2'(suite) -> [];
'o-p74fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p74fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p74fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11473,12 +10592,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p74fail3
%% Type: not-wf
%% Sections: 4.2 [74]
-'o-p74fail3'(suite) -> [];
'o-p74fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p74fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p74fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11486,12 +10604,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p75fail1
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'o-p75fail1'(suite) -> [];
'o-p75fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11499,12 +10616,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p75fail2
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'o-p75fail2'(suite) -> [];
'o-p75fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11512,12 +10628,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p75fail3
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'o-p75fail3'(suite) -> [];
'o-p75fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11525,12 +10640,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p75fail4
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'o-p75fail4'(suite) -> [];
'o-p75fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11538,12 +10652,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p75fail5
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'o-p75fail5'(suite) -> [];
'o-p75fail5'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail5.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail5.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11551,12 +10664,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p75fail6
%% Type: not-wf
%% Sections: 4.2.2 [75]
-'o-p75fail6'(suite) -> [];
'o-p75fail6'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail6.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p75fail6.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11564,12 +10676,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p76fail1
%% Type: not-wf
%% Sections: 4.2.2 [76]
-'o-p76fail1'(suite) -> [];
'o-p76fail1'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76fail1.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76fail1.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11577,12 +10688,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p76fail2
%% Type: not-wf
%% Sections: 4.2.2 [76]
-'o-p76fail2'(suite) -> [];
'o-p76fail2'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76fail2.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76fail2.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11590,12 +10700,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p76fail3
%% Type: not-wf
%% Sections: 4.2.2 [76]
-'o-p76fail3'(suite) -> [];
'o-p76fail3'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76fail3.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76fail3.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11603,12 +10712,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p76fail4
%% Type: not-wf
%% Sections: 4.2.2 [76]
-'o-p76fail4'(suite) -> [];
'o-p76fail4'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76fail4.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p76fail4.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -11616,12 +10724,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: o-p11pass1
%% Type: error
%% Sections: 2.3, 4.2.2 [11]
-'o-p11pass1'(suite) -> [];
'o-p11pass1'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p11pass1.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "error").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"oasis","p11pass1.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Cases
@@ -11639,12 +10746,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P28-ibm28i01.xml
%% Type: invalid
%% Sections: 2.8
-'ibm-invalid-P28-ibm28i01'(suite) -> [];
'ibm-invalid-P28-ibm28i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P28/ibm28i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P28/ibm28i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -11657,12 +10763,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P32-ibm32i01.xml
%% Type: invalid
%% Sections: 2.9
-'ibm-invalid-P32-ibm32i01'(suite) -> [];
'ibm-invalid-P32-ibm32i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P32/ibm32i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P32/ibm32i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11670,12 +10775,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P32-ibm32i03.xml
%% Type: invalid
%% Sections: 2.9
-'ibm-invalid-P32-ibm32i03'(suite) -> [];
'ibm-invalid-P32-ibm32i03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P32/ibm32i03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P32/ibm32i03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11683,12 +10787,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P32-ibm32i04.xml
%% Type: invalid
%% Sections: 2.9
-'ibm-invalid-P32-ibm32i04'(suite) -> [];
'ibm-invalid-P32-ibm32i04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P32/ibm32i04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P32/ibm32i04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -11701,12 +10804,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P39-ibm39i01.xml
%% Type: invalid
%% Sections: 3
-'ibm-invalid-P39-ibm39i01'(suite) -> [];
'ibm-invalid-P39-ibm39i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P39/ibm39i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P39/ibm39i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11714,12 +10816,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P39-ibm39i02.xml
%% Type: invalid
%% Sections: 3
-'ibm-invalid-P39-ibm39i02'(suite) -> [];
'ibm-invalid-P39-ibm39i02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P39/ibm39i02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P39/ibm39i02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11727,12 +10828,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P39-ibm39i03.xml
%% Type: invalid
%% Sections: 3
-'ibm-invalid-P39-ibm39i03'(suite) -> [];
'ibm-invalid-P39-ibm39i03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P39/ibm39i03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P39/ibm39i03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11740,12 +10840,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P39-ibm39i04.xml
%% Type: invalid
%% Sections: 3
-'ibm-invalid-P39-ibm39i04'(suite) -> [];
'ibm-invalid-P39-ibm39i04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P39/ibm39i04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P39/ibm39i04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -11758,12 +10857,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P41-ibm41i01.xml
%% Type: invalid
%% Sections: 3.1
-'ibm-invalid-P41-ibm41i01'(suite) -> [];
'ibm-invalid-P41-ibm41i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P41/ibm41i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P41/ibm41i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11771,12 +10869,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P41-ibm41i02.xml
%% Type: invalid
%% Sections: 3.1
-'ibm-invalid-P41-ibm41i02'(suite) -> [];
'ibm-invalid-P41-ibm41i02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P41/ibm41i02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P41/ibm41i02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -11789,12 +10886,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P45-ibm45i01.xml
%% Type: invalid
%% Sections: 3.2
-'ibm-invalid-P45-ibm45i01'(suite) -> [];
'ibm-invalid-P45-ibm45i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P45/ibm45i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P45/ibm45i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -11807,12 +10903,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P49-ibm49i01.xml
%% Type: invalid
%% Sections: 3.2.1
-'ibm-invalid-P49-ibm49i01'(suite) -> [];
'ibm-invalid-P49-ibm49i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P49/ibm49i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P49/ibm49i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -11825,12 +10920,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P50-ibm50i01.xml
%% Type: invalid
%% Sections: 3.2.1
-'ibm-invalid-P50-ibm50i01'(suite) -> [];
'ibm-invalid-P50-ibm50i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P50/ibm50i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P50/ibm50i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -11843,12 +10937,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P51-ibm51i01.xml
%% Type: invalid
%% Sections: 3.2.2
-'ibm-invalid-P51-ibm51i01'(suite) -> [];
'ibm-invalid-P51-ibm51i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P51/ibm51i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P51/ibm51i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11856,12 +10949,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P51-ibm51i03.xml
%% Type: invalid
%% Sections: 3.2.2
-'ibm-invalid-P51-ibm51i03'(suite) -> [];
'ibm-invalid-P51-ibm51i03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P51/ibm51i03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P51/ibm51i03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -11874,12 +10966,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i01.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i01'(suite) -> [];
'ibm-invalid-P56-ibm56i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11887,12 +10978,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i02.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i02'(suite) -> [];
'ibm-invalid-P56-ibm56i02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11900,12 +10990,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i03.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i03'(suite) -> [];
'ibm-invalid-P56-ibm56i03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11913,12 +11002,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i05.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i05'(suite) -> [];
'ibm-invalid-P56-ibm56i05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11926,12 +11014,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i06.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i06'(suite) -> [];
'ibm-invalid-P56-ibm56i06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11939,12 +11026,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i07.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i07'(suite) -> [];
'ibm-invalid-P56-ibm56i07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11952,12 +11038,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i08.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i08'(suite) -> [];
'ibm-invalid-P56-ibm56i08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11965,12 +11050,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i09.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i09'(suite) -> [];
'ibm-invalid-P56-ibm56i09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11978,12 +11062,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i10.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i10'(suite) -> [];
'ibm-invalid-P56-ibm56i10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -11991,12 +11074,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i11.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i11'(suite) -> [];
'ibm-invalid-P56-ibm56i11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12004,12 +11086,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i12.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i12'(suite) -> [];
'ibm-invalid-P56-ibm56i12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12017,12 +11098,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i13.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i13'(suite) -> [];
'ibm-invalid-P56-ibm56i13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12030,12 +11110,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i14.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i14'(suite) -> [];
'ibm-invalid-P56-ibm56i14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12043,12 +11122,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i15.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i15'(suite) -> [];
'ibm-invalid-P56-ibm56i15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12056,12 +11134,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i16.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i16'(suite) -> [];
'ibm-invalid-P56-ibm56i16'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i16.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i16.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12069,12 +11146,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i17.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i17'(suite) -> [];
'ibm-invalid-P56-ibm56i17'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i17.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i17.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12082,12 +11158,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P56-ibm56i18.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P56-ibm56i18'(suite) -> [];
'ibm-invalid-P56-ibm56i18'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i18.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P56/ibm56i18.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12100,12 +11175,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P58-ibm58i01.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P58-ibm58i01'(suite) -> [];
'ibm-invalid-P58-ibm58i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P58/ibm58i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P58/ibm58i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12113,12 +11187,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P58-ibm58i02.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P58-ibm58i02'(suite) -> [];
'ibm-invalid-P58-ibm58i02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P58/ibm58i02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P58/ibm58i02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12131,12 +11204,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P59-ibm59i01.xml
%% Type: invalid
%% Sections: 3.3.1
-'ibm-invalid-P59-ibm59i01'(suite) -> [];
'ibm-invalid-P59-ibm59i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P59/ibm59i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P59/ibm59i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12149,12 +11221,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P60-ibm60i01.xml
%% Type: invalid
%% Sections: 3.3.2
-'ibm-invalid-P60-ibm60i01'(suite) -> [];
'ibm-invalid-P60-ibm60i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P60/ibm60i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P60/ibm60i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12162,12 +11233,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P60-ibm60i02.xml
%% Type: invalid
%% Sections: 3.3.2
-'ibm-invalid-P60-ibm60i02'(suite) -> [];
'ibm-invalid-P60-ibm60i02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P60/ibm60i02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P60/ibm60i02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12175,12 +11245,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P60-ibm60i03.xml
%% Type: invalid
%% Sections: 3.3.2
-'ibm-invalid-P60-ibm60i03'(suite) -> [];
'ibm-invalid-P60-ibm60i03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P60/ibm60i03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P60/ibm60i03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Case
@@ -12188,12 +11257,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P60-ibm60i04.xml
%% Type: invalid
%% Sections: 3.3.2
-'ibm-invalid-P60-ibm60i04'(suite) -> [];
'ibm-invalid-P60-ibm60i04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P60/ibm60i04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P60/ibm60i04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12206,12 +11274,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P68-ibm68i01.xml
%% Type: error
%% Sections: 4.1
-'ibm-invalid-P68-ibm68i01'(suite) -> [];
'ibm-invalid-P68-ibm68i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P68/ibm68i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P68/ibm68i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -12219,12 +11286,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P68-ibm68i02.xml
%% Type: error
%% Sections: 4.1
-'ibm-invalid-P68-ibm68i02'(suite) -> [];
'ibm-invalid-P68-ibm68i02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P68/ibm68i02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P68/ibm68i02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -12232,12 +11298,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P68-ibm68i03.xml
%% Type: error
%% Sections: 4.1
-'ibm-invalid-P68-ibm68i03'(suite) -> [];
'ibm-invalid-P68-ibm68i03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P68/ibm68i03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P68/ibm68i03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -12245,12 +11310,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P68-ibm68i04.xml
%% Type: error
%% Sections: 4.1
-'ibm-invalid-P68-ibm68i04'(suite) -> [];
'ibm-invalid-P68-ibm68i04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P68/ibm68i04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P68/ibm68i04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12263,12 +11327,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P69-ibm69i01.xml
%% Type: error
%% Sections: 4.1
-'ibm-invalid-P69-ibm69i01'(suite) -> [];
'ibm-invalid-P69-ibm69i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P69/ibm69i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P69/ibm69i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -12276,12 +11339,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P69-ibm69i02.xml
%% Type: error
%% Sections: 4.1
-'ibm-invalid-P69-ibm69i02'(suite) -> [];
'ibm-invalid-P69-ibm69i02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P69/ibm69i02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P69/ibm69i02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -12289,12 +11351,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P69-ibm69i03.xml
%% Type: error
%% Sections: 4.1
-'ibm-invalid-P69-ibm69i03'(suite) -> [];
'ibm-invalid-P69-ibm69i03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P69/ibm69i03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P69/ibm69i03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -12302,12 +11363,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P69-ibm69i04.xml
%% Type: error
%% Sections: 4.1
-'ibm-invalid-P69-ibm69i04'(suite) -> [];
'ibm-invalid-P69-ibm69i04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P69/ibm69i04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P69/ibm69i04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12320,12 +11380,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-invalid-P76-ibm76i01.xml
%% Type: invalid
%% Sections: 4.2.2
-'ibm-invalid-P76-ibm76i01'(suite) -> [];
'ibm-invalid-P76-ibm76i01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P76/ibm76i01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "invalid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","invalid/P76/ibm76i01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "invalid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12343,12 +11402,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P01-ibm01n01.xml
%% Type: not-wf
%% Sections: 2.1
-'ibm-not-wf-P01-ibm01n01'(suite) -> [];
'ibm-not-wf-P01-ibm01n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P01/ibm01n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P01/ibm01n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12356,16 +11414,15 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P01-ibm01n02.xml
%% Type: not-wf
%% Sections: 2.1
-'ibm-not-wf-P01-ibm01n02'(suite) -> [];
'ibm-not-wf-P01-ibm01n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P01/ibm01n02.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P01/ibm01n02.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_, <<"<?xml version=\"1.0\"?>", _/binary>>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- % ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- % ?line check_result(R, "not-wf").
+ {ok,_, <<"<?xml version=\"1.0\"?>", _/binary>>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ % R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ % check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12373,15 +11430,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P01-ibm01n03.xml
%% Type: not-wf
%% Sections: 2.1
-'ibm-not-wf-P01-ibm01n03'(suite) -> [];
'ibm-not-wf-P01-ibm01n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P01/ibm01n03.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P01/ibm01n03.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_, <<"<title>Wrong combination!</title>", _/binary>>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_, <<"<title>Wrong combination!</title>", _/binary>>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12394,12 +11450,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n01.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n01'(suite) -> [];
'ibm-not-wf-P02-ibm02n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12407,12 +11462,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n02.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n02'(suite) -> [];
'ibm-not-wf-P02-ibm02n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12420,12 +11474,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n03.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n03'(suite) -> [];
'ibm-not-wf-P02-ibm02n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12433,12 +11486,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n04.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n04'(suite) -> [];
'ibm-not-wf-P02-ibm02n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12446,12 +11498,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n05.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n05'(suite) -> [];
'ibm-not-wf-P02-ibm02n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12459,12 +11510,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n06.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n06'(suite) -> [];
'ibm-not-wf-P02-ibm02n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12472,12 +11522,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n07.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n07'(suite) -> [];
'ibm-not-wf-P02-ibm02n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12485,12 +11534,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n08.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n08'(suite) -> [];
'ibm-not-wf-P02-ibm02n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12498,12 +11546,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n09.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n09'(suite) -> [];
'ibm-not-wf-P02-ibm02n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12511,12 +11558,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n10.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n10'(suite) -> [];
'ibm-not-wf-P02-ibm02n10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12524,12 +11570,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n11.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n11'(suite) -> [];
'ibm-not-wf-P02-ibm02n11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12537,12 +11582,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n12.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n12'(suite) -> [];
'ibm-not-wf-P02-ibm02n12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12550,12 +11594,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n13.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n13'(suite) -> [];
'ibm-not-wf-P02-ibm02n13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12563,12 +11606,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n14.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n14'(suite) -> [];
'ibm-not-wf-P02-ibm02n14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12576,12 +11618,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n15.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n15'(suite) -> [];
'ibm-not-wf-P02-ibm02n15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12589,12 +11630,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n16.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n16'(suite) -> [];
'ibm-not-wf-P02-ibm02n16'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n16.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n16.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12602,12 +11642,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n17.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n17'(suite) -> [];
'ibm-not-wf-P02-ibm02n17'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n17.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n17.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12615,12 +11654,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n18.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n18'(suite) -> [];
'ibm-not-wf-P02-ibm02n18'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n18.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n18.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12628,12 +11666,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n19.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n19'(suite) -> [];
'ibm-not-wf-P02-ibm02n19'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n19.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n19.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12641,12 +11678,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n20.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n20'(suite) -> [];
'ibm-not-wf-P02-ibm02n20'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n20.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n20.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12654,12 +11690,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n21.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n21'(suite) -> [];
'ibm-not-wf-P02-ibm02n21'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n21.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n21.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12667,12 +11702,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n22.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n22'(suite) -> [];
'ibm-not-wf-P02-ibm02n22'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n22.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n22.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12680,12 +11714,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n23.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n23'(suite) -> [];
'ibm-not-wf-P02-ibm02n23'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n23.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n23.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12693,12 +11726,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n24.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n24'(suite) -> [];
'ibm-not-wf-P02-ibm02n24'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n24.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n24.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12706,12 +11738,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n25.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n25'(suite) -> [];
'ibm-not-wf-P02-ibm02n25'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n25.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n25.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12719,12 +11750,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n26.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n26'(suite) -> [];
'ibm-not-wf-P02-ibm02n26'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n26.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n26.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12732,12 +11762,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n27.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n27'(suite) -> [];
'ibm-not-wf-P02-ibm02n27'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n27.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n27.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12745,12 +11774,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n28.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n28'(suite) -> [];
'ibm-not-wf-P02-ibm02n28'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n28.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n28.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12758,12 +11786,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n29.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n29'(suite) -> [];
'ibm-not-wf-P02-ibm02n29'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n29.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n29.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12771,12 +11798,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n30.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n30'(suite) -> [];
'ibm-not-wf-P02-ibm02n30'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n30.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n30.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12784,12 +11810,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n31.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n31'(suite) -> [];
'ibm-not-wf-P02-ibm02n31'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n31.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n31.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12797,12 +11822,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n32.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n32'(suite) -> [];
'ibm-not-wf-P02-ibm02n32'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n32.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n32.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12810,12 +11834,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P02-ibm02n33.xml
%% Type: not-wf
%% Sections: 2.2
-'ibm-not-wf-P02-ibm02n33'(suite) -> [];
'ibm-not-wf-P02-ibm02n33'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n33.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P02/ibm02n33.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12828,12 +11851,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P03-ibm03n01.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P03-ibm03n01'(suite) -> [];
'ibm-not-wf-P03-ibm03n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P03/ibm03n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P03/ibm03n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -12846,12 +11868,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n01.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n01'(suite) -> [];
'ibm-not-wf-P04-ibm04n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12859,12 +11880,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n02.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n02'(suite) -> [];
'ibm-not-wf-P04-ibm04n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12872,12 +11892,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n03.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n03'(suite) -> [];
'ibm-not-wf-P04-ibm04n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12885,12 +11904,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n04.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n04'(suite) -> [];
'ibm-not-wf-P04-ibm04n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12898,12 +11916,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n05.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n05'(suite) -> [];
'ibm-not-wf-P04-ibm04n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12911,12 +11928,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n06.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n06'(suite) -> [];
'ibm-not-wf-P04-ibm04n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12924,12 +11940,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n07.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n07'(suite) -> [];
'ibm-not-wf-P04-ibm04n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12937,12 +11952,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n08.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n08'(suite) -> [];
'ibm-not-wf-P04-ibm04n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12950,12 +11964,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n09.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n09'(suite) -> [];
'ibm-not-wf-P04-ibm04n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12963,12 +11976,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n10.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n10'(suite) -> [];
'ibm-not-wf-P04-ibm04n10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12976,12 +11988,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n11.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n11'(suite) -> [];
'ibm-not-wf-P04-ibm04n11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -12989,12 +12000,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n12.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n12'(suite) -> [];
'ibm-not-wf-P04-ibm04n12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13002,12 +12012,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n13.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n13'(suite) -> [];
'ibm-not-wf-P04-ibm04n13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13015,12 +12024,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n14.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n14'(suite) -> [];
'ibm-not-wf-P04-ibm04n14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13028,12 +12036,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n15.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n15'(suite) -> [];
'ibm-not-wf-P04-ibm04n15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13041,12 +12048,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n16.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n16'(suite) -> [];
'ibm-not-wf-P04-ibm04n16'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n16.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n16.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13054,12 +12060,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n17.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n17'(suite) -> [];
'ibm-not-wf-P04-ibm04n17'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n17.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n17.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13067,12 +12072,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P04-ibm04n18.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P04-ibm04n18'(suite) -> [];
'ibm-not-wf-P04-ibm04n18'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n18.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P04/ibm04n18.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13085,12 +12089,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P05-ibm05n01.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P05-ibm05n01'(suite) -> [];
'ibm-not-wf-P05-ibm05n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P05/ibm05n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P05/ibm05n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13098,12 +12101,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P05-ibm05n02.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P05-ibm05n02'(suite) -> [];
'ibm-not-wf-P05-ibm05n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P05/ibm05n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P05/ibm05n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13111,12 +12113,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P05-ibm05n03.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P05-ibm05n03'(suite) -> [];
'ibm-not-wf-P05-ibm05n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P05/ibm05n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P05/ibm05n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13129,12 +12130,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P09-ibm09n01.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P09-ibm09n01'(suite) -> [];
'ibm-not-wf-P09-ibm09n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P09/ibm09n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P09/ibm09n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13142,12 +12142,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P09-ibm09n02.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P09-ibm09n02'(suite) -> [];
'ibm-not-wf-P09-ibm09n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P09/ibm09n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P09/ibm09n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13155,12 +12154,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P09-ibm09n03.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P09-ibm09n03'(suite) -> [];
'ibm-not-wf-P09-ibm09n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P09/ibm09n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P09/ibm09n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13168,12 +12166,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P09-ibm09n04.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P09-ibm09n04'(suite) -> [];
'ibm-not-wf-P09-ibm09n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P09/ibm09n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P09/ibm09n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13186,12 +12183,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P10-ibm10n01.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P10-ibm10n01'(suite) -> [];
'ibm-not-wf-P10-ibm10n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13199,12 +12195,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P10-ibm10n02.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P10-ibm10n02'(suite) -> [];
'ibm-not-wf-P10-ibm10n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13212,12 +12207,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P10-ibm10n03.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P10-ibm10n03'(suite) -> [];
'ibm-not-wf-P10-ibm10n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13225,12 +12219,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P10-ibm10n04.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P10-ibm10n04'(suite) -> [];
'ibm-not-wf-P10-ibm10n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13238,12 +12231,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P10-ibm10n05.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P10-ibm10n05'(suite) -> [];
'ibm-not-wf-P10-ibm10n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13251,12 +12243,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P10-ibm10n06.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P10-ibm10n06'(suite) -> [];
'ibm-not-wf-P10-ibm10n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13264,12 +12255,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P10-ibm10n07.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P10-ibm10n07'(suite) -> [];
'ibm-not-wf-P10-ibm10n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13277,12 +12267,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P10-ibm10n08.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P10-ibm10n08'(suite) -> [];
'ibm-not-wf-P10-ibm10n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P10/ibm10n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13295,12 +12284,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P11-ibm11n01.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P11-ibm11n01'(suite) -> [];
'ibm-not-wf-P11-ibm11n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P11/ibm11n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P11/ibm11n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13308,12 +12296,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P11-ibm11n02.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P11-ibm11n02'(suite) -> [];
'ibm-not-wf-P11-ibm11n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P11/ibm11n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P11/ibm11n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13321,12 +12308,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P11-ibm11n03.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P11-ibm11n03'(suite) -> [];
'ibm-not-wf-P11-ibm11n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P11/ibm11n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P11/ibm11n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13334,12 +12320,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P11-ibm11n04.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P11-ibm11n04'(suite) -> [];
'ibm-not-wf-P11-ibm11n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P11/ibm11n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P11/ibm11n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13352,12 +12337,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P12-ibm12n01.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P12-ibm12n01'(suite) -> [];
'ibm-not-wf-P12-ibm12n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P12/ibm12n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P12/ibm12n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13365,12 +12349,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P12-ibm12n02.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P12-ibm12n02'(suite) -> [];
'ibm-not-wf-P12-ibm12n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P12/ibm12n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P12/ibm12n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13378,12 +12361,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P12-ibm12n03.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P12-ibm12n03'(suite) -> [];
'ibm-not-wf-P12-ibm12n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P12/ibm12n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P12/ibm12n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13396,12 +12378,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P13-ibm13n01.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P13-ibm13n01'(suite) -> [];
'ibm-not-wf-P13-ibm13n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P13/ibm13n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P13/ibm13n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13409,12 +12390,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P13-ibm13n02.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P13-ibm13n02'(suite) -> [];
'ibm-not-wf-P13-ibm13n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P13/ibm13n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P13/ibm13n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13422,12 +12402,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P13-ibm13n03.xml
%% Type: not-wf
%% Sections: 2.3
-'ibm-not-wf-P13-ibm13n03'(suite) -> [];
'ibm-not-wf-P13-ibm13n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P13/ibm13n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P13/ibm13n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13440,12 +12419,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P14-ibm14n01.xml
%% Type: not-wf
%% Sections: 2.4
-'ibm-not-wf-P14-ibm14n01'(suite) -> [];
'ibm-not-wf-P14-ibm14n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P14/ibm14n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P14/ibm14n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13453,12 +12431,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P14-ibm14n02.xml
%% Type: not-wf
%% Sections: 2.4
-'ibm-not-wf-P14-ibm14n02'(suite) -> [];
'ibm-not-wf-P14-ibm14n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P14/ibm14n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P14/ibm14n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13466,12 +12443,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P14-ibm14n03.xml
%% Type: not-wf
%% Sections: 2.4
-'ibm-not-wf-P14-ibm14n03'(suite) -> [];
'ibm-not-wf-P14-ibm14n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P14/ibm14n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P14/ibm14n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13484,12 +12460,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P15-ibm15n01.xml
%% Type: not-wf
%% Sections: 2.5
-'ibm-not-wf-P15-ibm15n01'(suite) -> [];
'ibm-not-wf-P15-ibm15n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P15/ibm15n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P15/ibm15n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13497,12 +12472,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P15-ibm15n02.xml
%% Type: not-wf
%% Sections: 2.5
-'ibm-not-wf-P15-ibm15n02'(suite) -> [];
'ibm-not-wf-P15-ibm15n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P15/ibm15n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P15/ibm15n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13510,12 +12484,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P15-ibm15n03.xml
%% Type: not-wf
%% Sections: 2.5
-'ibm-not-wf-P15-ibm15n03'(suite) -> [];
'ibm-not-wf-P15-ibm15n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P15/ibm15n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P15/ibm15n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13523,12 +12496,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P15-ibm15n04.xml
%% Type: not-wf
%% Sections: 2.5
-'ibm-not-wf-P15-ibm15n04'(suite) -> [];
'ibm-not-wf-P15-ibm15n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P15/ibm15n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P15/ibm15n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13541,12 +12513,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P16-ibm16n01.xml
%% Type: not-wf
%% Sections: 2.6
-'ibm-not-wf-P16-ibm16n01'(suite) -> [];
'ibm-not-wf-P16-ibm16n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P16/ibm16n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P16/ibm16n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13554,12 +12525,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P16-ibm16n02.xml
%% Type: not-wf
%% Sections: 2.6
-'ibm-not-wf-P16-ibm16n02'(suite) -> [];
'ibm-not-wf-P16-ibm16n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P16/ibm16n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P16/ibm16n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13567,12 +12537,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P16-ibm16n03.xml
%% Type: not-wf
%% Sections: 2.6
-'ibm-not-wf-P16-ibm16n03'(suite) -> [];
'ibm-not-wf-P16-ibm16n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P16/ibm16n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P16/ibm16n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13580,12 +12549,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P16-ibm16n04.xml
%% Type: not-wf
%% Sections: 2.6
-'ibm-not-wf-P16-ibm16n04'(suite) -> [];
'ibm-not-wf-P16-ibm16n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P16/ibm16n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P16/ibm16n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13598,12 +12566,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P17-ibm17n01.xml
%% Type: not-wf
%% Sections: 2.6
-'ibm-not-wf-P17-ibm17n01'(suite) -> [];
'ibm-not-wf-P17-ibm17n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P17/ibm17n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P17/ibm17n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13611,12 +12578,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P17-ibm17n02.xml
%% Type: not-wf
%% Sections: 2.6
-'ibm-not-wf-P17-ibm17n02'(suite) -> [];
'ibm-not-wf-P17-ibm17n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P17/ibm17n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P17/ibm17n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13624,12 +12590,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P17-ibm17n03.xml
%% Type: not-wf
%% Sections: 2.6
-'ibm-not-wf-P17-ibm17n03'(suite) -> [];
'ibm-not-wf-P17-ibm17n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P17/ibm17n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P17/ibm17n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13637,12 +12602,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P17-ibm17n04.xml
%% Type: not-wf
%% Sections: 2.6
-'ibm-not-wf-P17-ibm17n04'(suite) -> [];
'ibm-not-wf-P17-ibm17n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P17/ibm17n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P17/ibm17n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13655,12 +12619,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P18-ibm18n01.xml
%% Type: not-wf
%% Sections: 2.7
-'ibm-not-wf-P18-ibm18n01'(suite) -> [];
'ibm-not-wf-P18-ibm18n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P18/ibm18n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P18/ibm18n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13668,12 +12631,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P18-ibm18n02.xml
%% Type: not-wf
%% Sections: 2.7
-'ibm-not-wf-P18-ibm18n02'(suite) -> [];
'ibm-not-wf-P18-ibm18n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P18/ibm18n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P18/ibm18n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13686,12 +12648,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P19-ibm19n01.xml
%% Type: not-wf
%% Sections: 2.7
-'ibm-not-wf-P19-ibm19n01'(suite) -> [];
'ibm-not-wf-P19-ibm19n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P19/ibm19n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P19/ibm19n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13699,12 +12660,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P19-ibm19n02.xml
%% Type: not-wf
%% Sections: 2.7
-'ibm-not-wf-P19-ibm19n02'(suite) -> [];
'ibm-not-wf-P19-ibm19n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P19/ibm19n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P19/ibm19n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13712,12 +12672,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P19-ibm19n03.xml
%% Type: not-wf
%% Sections: 2.7
-'ibm-not-wf-P19-ibm19n03'(suite) -> [];
'ibm-not-wf-P19-ibm19n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P19/ibm19n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P19/ibm19n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13730,12 +12689,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P20-ibm20n01.xml
%% Type: not-wf
%% Sections: 2.7
-'ibm-not-wf-P20-ibm20n01'(suite) -> [];
'ibm-not-wf-P20-ibm20n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P20/ibm20n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P20/ibm20n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13748,12 +12706,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P21-ibm21n01.xml
%% Type: not-wf
%% Sections: 2.7
-'ibm-not-wf-P21-ibm21n01'(suite) -> [];
'ibm-not-wf-P21-ibm21n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P21/ibm21n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P21/ibm21n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13761,12 +12718,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P21-ibm21n02.xml
%% Type: not-wf
%% Sections: 2.7
-'ibm-not-wf-P21-ibm21n02'(suite) -> [];
'ibm-not-wf-P21-ibm21n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P21/ibm21n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P21/ibm21n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13774,12 +12730,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P21-ibm21n03.xml
%% Type: not-wf
%% Sections: 2.7
-'ibm-not-wf-P21-ibm21n03'(suite) -> [];
'ibm-not-wf-P21-ibm21n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P21/ibm21n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P21/ibm21n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13792,12 +12747,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P22-ibm22n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P22-ibm22n01'(suite) -> [];
'ibm-not-wf-P22-ibm22n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P22/ibm22n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P22/ibm22n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13805,12 +12759,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P22-ibm22n02.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P22-ibm22n02'(suite) -> [];
'ibm-not-wf-P22-ibm22n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P22/ibm22n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P22/ibm22n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13818,12 +12771,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P22-ibm22n03.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P22-ibm22n03'(suite) -> [];
'ibm-not-wf-P22-ibm22n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P22/ibm22n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P22/ibm22n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13836,12 +12788,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P23-ibm23n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P23-ibm23n01'(suite) -> [];
'ibm-not-wf-P23-ibm23n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13849,12 +12800,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P23-ibm23n02.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P23-ibm23n02'(suite) -> [];
'ibm-not-wf-P23-ibm23n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13862,12 +12812,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P23-ibm23n03.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P23-ibm23n03'(suite) -> [];
'ibm-not-wf-P23-ibm23n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13875,12 +12824,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P23-ibm23n04.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P23-ibm23n04'(suite) -> [];
'ibm-not-wf-P23-ibm23n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13888,12 +12836,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P23-ibm23n05.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P23-ibm23n05'(suite) -> [];
'ibm-not-wf-P23-ibm23n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13901,12 +12848,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P23-ibm23n06.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P23-ibm23n06'(suite) -> [];
'ibm-not-wf-P23-ibm23n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P23/ibm23n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -13919,12 +12865,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P24-ibm24n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P24-ibm24n01'(suite) -> [];
'ibm-not-wf-P24-ibm24n01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13932,12 +12877,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P24-ibm24n02.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P24-ibm24n02'(suite) -> [];
'ibm-not-wf-P24-ibm24n02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13945,12 +12889,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P24-ibm24n03.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P24-ibm24n03'(suite) -> [];
'ibm-not-wf-P24-ibm24n03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13958,12 +12901,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P24-ibm24n04.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P24-ibm24n04'(suite) -> [];
'ibm-not-wf-P24-ibm24n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13971,12 +12913,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P24-ibm24n05.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P24-ibm24n05'(suite) -> [];
'ibm-not-wf-P24-ibm24n05'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n05.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n05.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13984,12 +12925,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P24-ibm24n06.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P24-ibm24n06'(suite) -> [];
'ibm-not-wf-P24-ibm24n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -13997,12 +12937,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P24-ibm24n07.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P24-ibm24n07'(suite) -> [];
'ibm-not-wf-P24-ibm24n07'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n07.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n07.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14010,12 +12949,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P24-ibm24n08.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P24-ibm24n08'(suite) -> [];
'ibm-not-wf-P24-ibm24n08'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n08.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n08.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14023,12 +12961,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P24-ibm24n09.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P24-ibm24n09'(suite) -> [];
'ibm-not-wf-P24-ibm24n09'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n09.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P24/ibm24n09.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14041,12 +12978,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P25-ibm25n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P25-ibm25n01'(suite) -> [];
'ibm-not-wf-P25-ibm25n01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P25/ibm25n01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P25/ibm25n01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14054,12 +12990,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P25-ibm25n02.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P25-ibm25n02'(suite) -> [];
'ibm-not-wf-P25-ibm25n02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P25/ibm25n02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P25/ibm25n02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14072,12 +13007,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P26-ibm26n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P26-ibm26n01'(suite) -> [];
'ibm-not-wf-P26-ibm26n01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P26/ibm26n01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P26/ibm26n01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14090,15 +13024,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P27-ibm27n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P27-ibm27n01'(suite) -> [];
'ibm-not-wf-P27-ibm27n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P27/ibm27n01.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P27/ibm27n01.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_, <<"<!ELEMENT cat EMPTY>">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_, <<"<!ELEMENT cat EMPTY>">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14111,12 +13044,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P28-ibm28n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P28-ibm28n01'(suite) -> [];
'ibm-not-wf-P28-ibm28n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14124,12 +13056,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P28-ibm28n02.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P28-ibm28n02'(suite) -> [];
'ibm-not-wf-P28-ibm28n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14137,12 +13068,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P28-ibm28n03.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P28-ibm28n03'(suite) -> [];
'ibm-not-wf-P28-ibm28n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14150,12 +13080,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P28-ibm28n04.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P28-ibm28n04'(suite) -> [];
'ibm-not-wf-P28-ibm28n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14163,12 +13092,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P28-ibm28n05.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P28-ibm28n05'(suite) -> [];
'ibm-not-wf-P28-ibm28n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14176,12 +13104,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P28-ibm28n06.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P28-ibm28n06'(suite) -> [];
'ibm-not-wf-P28-ibm28n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14189,12 +13116,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P28-ibm28n07.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P28-ibm28n07'(suite) -> [];
'ibm-not-wf-P28-ibm28n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14202,12 +13128,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P28-ibm28n08.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P28-ibm28n08'(suite) -> [];
'ibm-not-wf-P28-ibm28n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P28/ibm28n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14220,12 +13145,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-p28a-ibm28an01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-p28a-ibm28an01'(suite) -> [];
'ibm-not-wf-p28a-ibm28an01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/p28a/ibm28an01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/p28a/ibm28an01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14238,12 +13162,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P29-ibm29n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P29-ibm29n01'(suite) -> [];
'ibm-not-wf-P29-ibm29n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14251,12 +13174,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P29-ibm29n02.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P29-ibm29n02'(suite) -> [];
'ibm-not-wf-P29-ibm29n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14264,12 +13186,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P29-ibm29n03.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P29-ibm29n03'(suite) -> [];
'ibm-not-wf-P29-ibm29n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14277,12 +13198,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P29-ibm29n04.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P29-ibm29n04'(suite) -> [];
'ibm-not-wf-P29-ibm29n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14290,12 +13210,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P29-ibm29n05.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P29-ibm29n05'(suite) -> [];
'ibm-not-wf-P29-ibm29n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14303,12 +13222,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P29-ibm29n06.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P29-ibm29n06'(suite) -> [];
'ibm-not-wf-P29-ibm29n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14316,12 +13234,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P29-ibm29n07.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P29-ibm29n07'(suite) -> [];
'ibm-not-wf-P29-ibm29n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P29/ibm29n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14334,12 +13251,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P30-ibm30n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P30-ibm30n01'(suite) -> [];
'ibm-not-wf-P30-ibm30n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P30/ibm30n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P30/ibm30n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14352,12 +13268,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P31-ibm31n01.xml
%% Type: not-wf
%% Sections: 2.8
-'ibm-not-wf-P31-ibm31n01'(suite) -> [];
'ibm-not-wf-P31-ibm31n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P31/ibm31n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P31/ibm31n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14370,12 +13285,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P32-ibm32n01.xml
%% Type: not-wf
%% Sections: 2.9
-'ibm-not-wf-P32-ibm32n01'(suite) -> [];
'ibm-not-wf-P32-ibm32n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14383,12 +13297,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P32-ibm32n02.xml
%% Type: not-wf
%% Sections: 2.9
-'ibm-not-wf-P32-ibm32n02'(suite) -> [];
'ibm-not-wf-P32-ibm32n02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14396,12 +13309,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P32-ibm32n03.xml
%% Type: not-wf
%% Sections: 2.9
-'ibm-not-wf-P32-ibm32n03'(suite) -> [];
'ibm-not-wf-P32-ibm32n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14409,12 +13321,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P32-ibm32n04.xml
%% Type: not-wf
%% Sections: 2.9
-'ibm-not-wf-P32-ibm32n04'(suite) -> [];
'ibm-not-wf-P32-ibm32n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14422,12 +13333,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P32-ibm32n05.xml
%% Type: not-wf
%% Sections: 2.9
-'ibm-not-wf-P32-ibm32n05'(suite) -> [];
'ibm-not-wf-P32-ibm32n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14435,12 +13345,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P32-ibm32n06.xml
%% Type: not-wf
%% Sections: 2.9
-'ibm-not-wf-P32-ibm32n06'(suite) -> [];
'ibm-not-wf-P32-ibm32n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14448,12 +13357,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P32-ibm32n07.xml
%% Type: not-wf
%% Sections: 2.9
-'ibm-not-wf-P32-ibm32n07'(suite) -> [];
'ibm-not-wf-P32-ibm32n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14461,12 +13369,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P32-ibm32n08.xml
%% Type: not-wf
%% Sections: 2.9
-'ibm-not-wf-P32-ibm32n08'(suite) -> [];
'ibm-not-wf-P32-ibm32n08'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n08.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n08.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14474,12 +13381,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P32-ibm32n09.xml
%% Type: not-wf
%% Sections: 2.9
-'ibm-not-wf-P32-ibm32n09'(suite) -> [];
'ibm-not-wf-P32-ibm32n09'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n09.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P32/ibm32n09.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14492,12 +13398,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P39-ibm39n01.xml
%% Type: not-wf
%% Sections: 3
-'ibm-not-wf-P39-ibm39n01'(suite) -> [];
'ibm-not-wf-P39-ibm39n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14505,12 +13410,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P39-ibm39n02.xml
%% Type: not-wf
%% Sections: 3
-'ibm-not-wf-P39-ibm39n02'(suite) -> [];
'ibm-not-wf-P39-ibm39n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14518,12 +13422,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P39-ibm39n03.xml
%% Type: not-wf
%% Sections: 3
-'ibm-not-wf-P39-ibm39n03'(suite) -> [];
'ibm-not-wf-P39-ibm39n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14531,12 +13434,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P39-ibm39n04.xml
%% Type: not-wf
%% Sections: 3
-'ibm-not-wf-P39-ibm39n04'(suite) -> [];
'ibm-not-wf-P39-ibm39n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14544,12 +13446,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P39-ibm39n05.xml
%% Type: not-wf
%% Sections: 3
-'ibm-not-wf-P39-ibm39n05'(suite) -> [];
'ibm-not-wf-P39-ibm39n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14557,15 +13458,14 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P39-ibm39n06.xml
%% Type: not-wf
%% Sections: 3
-'ibm-not-wf-P39-ibm39n06'(suite) -> [];
'ibm-not-wf-P39-ibm39n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n06.xml"]),
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P39/ibm39n06.xml"]),
%% Special case becase we returns everything after a legal document
%% as an rest instead of giving and error to let the user handle
%% multipple docs on a stream.
- ?line {ok,_,<<"content after end tag\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
- %%?line check_result(R, "not-wf").
+ {ok,_,<<"content after end tag\r\n">>} = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]).
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14578,12 +13478,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P40-ibm40n01.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P40-ibm40n01'(suite) -> [];
'ibm-not-wf-P40-ibm40n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14591,12 +13490,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P40-ibm40n02.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P40-ibm40n02'(suite) -> [];
'ibm-not-wf-P40-ibm40n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14604,12 +13502,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P40-ibm40n03.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P40-ibm40n03'(suite) -> [];
'ibm-not-wf-P40-ibm40n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14617,12 +13514,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P40-ibm40n04.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P40-ibm40n04'(suite) -> [];
'ibm-not-wf-P40-ibm40n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14630,12 +13526,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P40-ibm40n05.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P40-ibm40n05'(suite) -> [];
'ibm-not-wf-P40-ibm40n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P40/ibm40n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14648,12 +13543,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n01.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n01'(suite) -> [];
'ibm-not-wf-P41-ibm41n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14661,12 +13555,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n02.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n02'(suite) -> [];
'ibm-not-wf-P41-ibm41n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14674,12 +13567,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n03.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n03'(suite) -> [];
'ibm-not-wf-P41-ibm41n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14687,12 +13579,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n04.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n04'(suite) -> [];
'ibm-not-wf-P41-ibm41n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14700,12 +13591,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n05.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n05'(suite) -> [];
'ibm-not-wf-P41-ibm41n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14713,12 +13603,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n06.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n06'(suite) -> [];
'ibm-not-wf-P41-ibm41n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14726,12 +13615,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n07.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n07'(suite) -> [];
'ibm-not-wf-P41-ibm41n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14739,12 +13627,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n08.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n08'(suite) -> [];
'ibm-not-wf-P41-ibm41n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14752,12 +13639,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n09.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n09'(suite) -> [];
'ibm-not-wf-P41-ibm41n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14765,12 +13651,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n10.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n10'(suite) -> [];
'ibm-not-wf-P41-ibm41n10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14778,12 +13663,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n11.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n11'(suite) -> [];
'ibm-not-wf-P41-ibm41n11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14791,12 +13675,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n12.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n12'(suite) -> [];
'ibm-not-wf-P41-ibm41n12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14804,12 +13687,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n13.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n13'(suite) -> [];
'ibm-not-wf-P41-ibm41n13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14817,12 +13699,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P41-ibm41n14.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P41-ibm41n14'(suite) -> [];
'ibm-not-wf-P41-ibm41n14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P41/ibm41n14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14835,12 +13716,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P42-ibm42n01.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P42-ibm42n01'(suite) -> [];
'ibm-not-wf-P42-ibm42n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14848,12 +13728,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P42-ibm42n02.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P42-ibm42n02'(suite) -> [];
'ibm-not-wf-P42-ibm42n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14861,12 +13740,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P42-ibm42n03.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P42-ibm42n03'(suite) -> [];
'ibm-not-wf-P42-ibm42n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14874,12 +13752,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P42-ibm42n04.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P42-ibm42n04'(suite) -> [];
'ibm-not-wf-P42-ibm42n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14887,12 +13764,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P42-ibm42n05.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P42-ibm42n05'(suite) -> [];
'ibm-not-wf-P42-ibm42n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P42/ibm42n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14905,12 +13781,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P43-ibm43n01.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P43-ibm43n01'(suite) -> [];
'ibm-not-wf-P43-ibm43n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P43/ibm43n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P43/ibm43n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14918,12 +13793,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P43-ibm43n02.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P43-ibm43n02'(suite) -> [];
'ibm-not-wf-P43-ibm43n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P43/ibm43n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P43/ibm43n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14931,12 +13805,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P43-ibm43n04.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P43-ibm43n04'(suite) -> [];
'ibm-not-wf-P43-ibm43n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P43/ibm43n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P43/ibm43n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14944,12 +13817,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P43-ibm43n05.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P43-ibm43n05'(suite) -> [];
'ibm-not-wf-P43-ibm43n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P43/ibm43n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P43/ibm43n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -14962,12 +13834,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P44-ibm44n01.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P44-ibm44n01'(suite) -> [];
'ibm-not-wf-P44-ibm44n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P44/ibm44n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P44/ibm44n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14975,12 +13846,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P44-ibm44n02.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P44-ibm44n02'(suite) -> [];
'ibm-not-wf-P44-ibm44n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P44/ibm44n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P44/ibm44n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -14988,12 +13858,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P44-ibm44n03.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P44-ibm44n03'(suite) -> [];
'ibm-not-wf-P44-ibm44n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P44/ibm44n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P44/ibm44n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15001,12 +13870,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P44-ibm44n04.xml
%% Type: not-wf
%% Sections: 3.1
-'ibm-not-wf-P44-ibm44n04'(suite) -> [];
'ibm-not-wf-P44-ibm44n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P44/ibm44n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P44/ibm44n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15019,12 +13887,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P45-ibm45n01.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P45-ibm45n01'(suite) -> [];
'ibm-not-wf-P45-ibm45n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15032,12 +13899,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P45-ibm45n02.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P45-ibm45n02'(suite) -> [];
'ibm-not-wf-P45-ibm45n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15045,12 +13911,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P45-ibm45n03.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P45-ibm45n03'(suite) -> [];
'ibm-not-wf-P45-ibm45n03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15058,12 +13923,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P45-ibm45n04.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P45-ibm45n04'(suite) -> [];
'ibm-not-wf-P45-ibm45n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15071,12 +13935,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P45-ibm45n05.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P45-ibm45n05'(suite) -> [];
'ibm-not-wf-P45-ibm45n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15084,12 +13947,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P45-ibm45n06.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P45-ibm45n06'(suite) -> [];
'ibm-not-wf-P45-ibm45n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15097,12 +13959,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P45-ibm45n07.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P45-ibm45n07'(suite) -> [];
'ibm-not-wf-P45-ibm45n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15110,12 +13971,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P45-ibm45n08.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P45-ibm45n08'(suite) -> [];
'ibm-not-wf-P45-ibm45n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15123,12 +13983,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P45-ibm45n09.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P45-ibm45n09'(suite) -> [];
'ibm-not-wf-P45-ibm45n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P45/ibm45n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15141,12 +14000,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P46-ibm46n01.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P46-ibm46n01'(suite) -> [];
'ibm-not-wf-P46-ibm46n01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15154,12 +14012,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P46-ibm46n02.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P46-ibm46n02'(suite) -> [];
'ibm-not-wf-P46-ibm46n02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15167,12 +14024,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P46-ibm46n03.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P46-ibm46n03'(suite) -> [];
'ibm-not-wf-P46-ibm46n03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15180,12 +14036,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P46-ibm46n04.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P46-ibm46n04'(suite) -> [];
'ibm-not-wf-P46-ibm46n04'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n04.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n04.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15193,12 +14048,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P46-ibm46n05.xml
%% Type: not-wf
%% Sections: 3.2
-'ibm-not-wf-P46-ibm46n05'(suite) -> [];
'ibm-not-wf-P46-ibm46n05'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n05.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P46/ibm46n05.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15211,12 +14065,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P47-ibm47n01.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P47-ibm47n01'(suite) -> [];
'ibm-not-wf-P47-ibm47n01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15224,12 +14077,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P47-ibm47n02.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P47-ibm47n02'(suite) -> [];
'ibm-not-wf-P47-ibm47n02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15237,12 +14089,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P47-ibm47n03.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P47-ibm47n03'(suite) -> [];
'ibm-not-wf-P47-ibm47n03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15250,12 +14101,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P47-ibm47n04.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P47-ibm47n04'(suite) -> [];
'ibm-not-wf-P47-ibm47n04'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n04.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n04.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15263,12 +14113,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P47-ibm47n05.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P47-ibm47n05'(suite) -> [];
'ibm-not-wf-P47-ibm47n05'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n05.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n05.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15276,12 +14125,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P47-ibm47n06.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P47-ibm47n06'(suite) -> [];
'ibm-not-wf-P47-ibm47n06'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n06.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P47/ibm47n06.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15294,12 +14142,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P48-ibm48n01.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P48-ibm48n01'(suite) -> [];
'ibm-not-wf-P48-ibm48n01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15307,12 +14154,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P48-ibm48n02.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P48-ibm48n02'(suite) -> [];
'ibm-not-wf-P48-ibm48n02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15320,12 +14166,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P48-ibm48n03.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P48-ibm48n03'(suite) -> [];
'ibm-not-wf-P48-ibm48n03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15333,12 +14178,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P48-ibm48n04.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P48-ibm48n04'(suite) -> [];
'ibm-not-wf-P48-ibm48n04'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n04.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n04.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15346,12 +14190,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P48-ibm48n05.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P48-ibm48n05'(suite) -> [];
'ibm-not-wf-P48-ibm48n05'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n05.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n05.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15359,12 +14202,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P48-ibm48n06.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P48-ibm48n06'(suite) -> [];
'ibm-not-wf-P48-ibm48n06'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n06.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n06.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15372,12 +14214,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P48-ibm48n07.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P48-ibm48n07'(suite) -> [];
'ibm-not-wf-P48-ibm48n07'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n07.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P48/ibm48n07.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15390,12 +14231,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P49-ibm49n01.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P49-ibm49n01'(suite) -> [];
'ibm-not-wf-P49-ibm49n01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15403,12 +14243,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P49-ibm49n02.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P49-ibm49n02'(suite) -> [];
'ibm-not-wf-P49-ibm49n02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15416,12 +14255,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P49-ibm49n03.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P49-ibm49n03'(suite) -> [];
'ibm-not-wf-P49-ibm49n03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15429,12 +14267,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P49-ibm49n04.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P49-ibm49n04'(suite) -> [];
'ibm-not-wf-P49-ibm49n04'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n04.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n04.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15442,12 +14279,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P49-ibm49n05.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P49-ibm49n05'(suite) -> [];
'ibm-not-wf-P49-ibm49n05'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n05.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n05.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15455,12 +14291,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P49-ibm49n06.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P49-ibm49n06'(suite) -> [];
'ibm-not-wf-P49-ibm49n06'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n06.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P49/ibm49n06.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15473,12 +14308,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P50-ibm50n01.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P50-ibm50n01'(suite) -> [];
'ibm-not-wf-P50-ibm50n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15486,12 +14320,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P50-ibm50n02.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P50-ibm50n02'(suite) -> [];
'ibm-not-wf-P50-ibm50n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15499,12 +14332,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P50-ibm50n03.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P50-ibm50n03'(suite) -> [];
'ibm-not-wf-P50-ibm50n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15512,12 +14344,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P50-ibm50n04.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P50-ibm50n04'(suite) -> [];
'ibm-not-wf-P50-ibm50n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15525,12 +14356,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P50-ibm50n05.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P50-ibm50n05'(suite) -> [];
'ibm-not-wf-P50-ibm50n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15538,12 +14368,11 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P50-ibm50n06.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P50-ibm50n06'(suite) -> [];
'ibm-not-wf-P50-ibm50n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15551,18 +14380,16 @@ end_per_testcase(_Func,_Config) ->
%% ID: ibm-not-wf-P50-ibm50n07.xml
%% Type: not-wf
%% Sections: 3.2.1
-'ibm-not-wf-P50-ibm50n07'(suite) -> [];
'ibm-not-wf-P50-ibm50n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P50/ibm50n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 50
-testcases67(suite) -> [].
%% ['ibm-not-wf-P50-ibm50n01','ibm-not-wf-P50-ibm50n02','ibm-not-wf-P50-ibm50n03','ibm-not-wf-P50-ibm50n04','ibm-not-wf-P50-ibm50n05','ibm-not-wf-P50-ibm50n06','ibm-not-wf-P50-ibm50n07'].
%%----------------------------------------------------------------------
@@ -15571,12 +14398,11 @@ testcases67(suite) -> [].
%% ID: ibm-not-wf-P51-ibm51n01.xml
%% Type: not-wf
%% Sections: 3.2.2
-'ibm-not-wf-P51-ibm51n01'(suite) -> [];
'ibm-not-wf-P51-ibm51n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15584,12 +14410,11 @@ testcases67(suite) -> [].
%% ID: ibm-not-wf-P51-ibm51n02.xml
%% Type: not-wf
%% Sections: 3.2.2
-'ibm-not-wf-P51-ibm51n02'(suite) -> [];
'ibm-not-wf-P51-ibm51n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15597,12 +14422,11 @@ testcases67(suite) -> [].
%% ID: ibm-not-wf-P51-ibm51n03.xml
%% Type: not-wf
%% Sections: 3.2.2
-'ibm-not-wf-P51-ibm51n03'(suite) -> [];
'ibm-not-wf-P51-ibm51n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15610,12 +14434,11 @@ testcases67(suite) -> [].
%% ID: ibm-not-wf-P51-ibm51n04.xml
%% Type: not-wf
%% Sections: 3.2.2
-'ibm-not-wf-P51-ibm51n04'(suite) -> [];
'ibm-not-wf-P51-ibm51n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15623,12 +14446,11 @@ testcases67(suite) -> [].
%% ID: ibm-not-wf-P51-ibm51n05.xml
%% Type: not-wf
%% Sections: 3.2.2
-'ibm-not-wf-P51-ibm51n05'(suite) -> [];
'ibm-not-wf-P51-ibm51n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15636,12 +14458,11 @@ testcases67(suite) -> [].
%% ID: ibm-not-wf-P51-ibm51n06.xml
%% Type: not-wf
%% Sections: 3.2.2
-'ibm-not-wf-P51-ibm51n06'(suite) -> [];
'ibm-not-wf-P51-ibm51n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15649,18 +14470,16 @@ testcases67(suite) -> [].
%% ID: ibm-not-wf-P51-ibm51n07.xml
%% Type: not-wf
%% Sections: 3.2.2
-'ibm-not-wf-P51-ibm51n07'(suite) -> [];
'ibm-not-wf-P51-ibm51n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P51/ibm51n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 51
-testcases68(suite) -> [].
%% ['ibm-not-wf-P51-ibm51n01','ibm-not-wf-P51-ibm51n02','ibm-not-wf-P51-ibm51n03','ibm-not-wf-P51-ibm51n04','ibm-not-wf-P51-ibm51n05','ibm-not-wf-P51-ibm51n06','ibm-not-wf-P51-ibm51n07'].
%%----------------------------------------------------------------------
@@ -15669,12 +14488,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P52-ibm52n01.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P52-ibm52n01'(suite) -> [];
'ibm-not-wf-P52-ibm52n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15682,12 +14500,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P52-ibm52n02.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P52-ibm52n02'(suite) -> [];
'ibm-not-wf-P52-ibm52n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15695,12 +14512,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P52-ibm52n03.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P52-ibm52n03'(suite) -> [];
'ibm-not-wf-P52-ibm52n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15708,12 +14524,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P52-ibm52n04.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P52-ibm52n04'(suite) -> [];
'ibm-not-wf-P52-ibm52n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15721,12 +14536,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P52-ibm52n05.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P52-ibm52n05'(suite) -> [];
'ibm-not-wf-P52-ibm52n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15734,12 +14548,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P52-ibm52n06.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P52-ibm52n06'(suite) -> [];
'ibm-not-wf-P52-ibm52n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P52/ibm52n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15752,12 +14565,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P53-ibm53n01.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P53-ibm53n01'(suite) -> [];
'ibm-not-wf-P53-ibm53n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15765,12 +14577,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P53-ibm53n02.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P53-ibm53n02'(suite) -> [];
'ibm-not-wf-P53-ibm53n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15778,12 +14589,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P53-ibm53n03.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P53-ibm53n03'(suite) -> [];
'ibm-not-wf-P53-ibm53n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15791,12 +14601,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P53-ibm53n04.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P53-ibm53n04'(suite) -> [];
'ibm-not-wf-P53-ibm53n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15804,12 +14613,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P53-ibm53n05.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P53-ibm53n05'(suite) -> [];
'ibm-not-wf-P53-ibm53n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15817,12 +14625,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P53-ibm53n06.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P53-ibm53n06'(suite) -> [];
'ibm-not-wf-P53-ibm53n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15830,12 +14637,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P53-ibm53n07.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P53-ibm53n07'(suite) -> [];
'ibm-not-wf-P53-ibm53n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15843,12 +14649,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P53-ibm53n08.xml
%% Type: not-wf
%% Sections: 3.3
-'ibm-not-wf-P53-ibm53n08'(suite) -> [];
'ibm-not-wf-P53-ibm53n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P53/ibm53n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15861,12 +14666,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P54-ibm54n01.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P54-ibm54n01'(suite) -> [];
'ibm-not-wf-P54-ibm54n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P54/ibm54n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P54/ibm54n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15874,12 +14678,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P54-ibm54n02.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P54-ibm54n02'(suite) -> [];
'ibm-not-wf-P54-ibm54n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P54/ibm54n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P54/ibm54n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15892,12 +14695,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P55-ibm55n01.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P55-ibm55n01'(suite) -> [];
'ibm-not-wf-P55-ibm55n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P55/ibm55n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P55/ibm55n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15905,12 +14707,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P55-ibm55n02.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P55-ibm55n02'(suite) -> [];
'ibm-not-wf-P55-ibm55n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P55/ibm55n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P55/ibm55n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15918,12 +14719,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P55-ibm55n03.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P55-ibm55n03'(suite) -> [];
'ibm-not-wf-P55-ibm55n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P55/ibm55n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P55/ibm55n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -15936,12 +14736,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P56-ibm56n01.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P56-ibm56n01'(suite) -> [];
'ibm-not-wf-P56-ibm56n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15949,12 +14748,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P56-ibm56n02.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P56-ibm56n02'(suite) -> [];
'ibm-not-wf-P56-ibm56n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15962,12 +14760,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P56-ibm56n03.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P56-ibm56n03'(suite) -> [];
'ibm-not-wf-P56-ibm56n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15975,12 +14772,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P56-ibm56n04.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P56-ibm56n04'(suite) -> [];
'ibm-not-wf-P56-ibm56n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -15988,12 +14784,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P56-ibm56n05.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P56-ibm56n05'(suite) -> [];
'ibm-not-wf-P56-ibm56n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16001,12 +14796,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P56-ibm56n06.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P56-ibm56n06'(suite) -> [];
'ibm-not-wf-P56-ibm56n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16014,12 +14808,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P56-ibm56n07.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P56-ibm56n07'(suite) -> [];
'ibm-not-wf-P56-ibm56n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P56/ibm56n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16032,12 +14825,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P57-ibm57n01.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P57-ibm57n01'(suite) -> [];
'ibm-not-wf-P57-ibm57n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P57/ibm57n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P57/ibm57n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16050,12 +14842,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P58-ibm58n01.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P58-ibm58n01'(suite) -> [];
'ibm-not-wf-P58-ibm58n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16063,12 +14854,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P58-ibm58n02.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P58-ibm58n02'(suite) -> [];
'ibm-not-wf-P58-ibm58n02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16076,12 +14866,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P58-ibm58n03.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P58-ibm58n03'(suite) -> [];
'ibm-not-wf-P58-ibm58n03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16089,12 +14878,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P58-ibm58n04.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P58-ibm58n04'(suite) -> [];
'ibm-not-wf-P58-ibm58n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16102,12 +14890,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P58-ibm58n05.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P58-ibm58n05'(suite) -> [];
'ibm-not-wf-P58-ibm58n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16115,12 +14902,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P58-ibm58n06.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P58-ibm58n06'(suite) -> [];
'ibm-not-wf-P58-ibm58n06'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n06.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n06.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16128,12 +14914,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P58-ibm58n07.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P58-ibm58n07'(suite) -> [];
'ibm-not-wf-P58-ibm58n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16141,12 +14926,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P58-ibm58n08.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P58-ibm58n08'(suite) -> [];
'ibm-not-wf-P58-ibm58n08'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n08.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P58/ibm58n08.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16159,12 +14943,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P59-ibm59n01.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P59-ibm59n01'(suite) -> [];
'ibm-not-wf-P59-ibm59n01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16172,12 +14955,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P59-ibm59n02.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P59-ibm59n02'(suite) -> [];
'ibm-not-wf-P59-ibm59n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16185,12 +14967,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P59-ibm59n03.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P59-ibm59n03'(suite) -> [];
'ibm-not-wf-P59-ibm59n03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16198,12 +14979,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P59-ibm59n04.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P59-ibm59n04'(suite) -> [];
'ibm-not-wf-P59-ibm59n04'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n04.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n04.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16211,12 +14991,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P59-ibm59n05.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P59-ibm59n05'(suite) -> [];
'ibm-not-wf-P59-ibm59n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16224,12 +15003,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P59-ibm59n06.xml
%% Type: not-wf
%% Sections: 3.3.1
-'ibm-not-wf-P59-ibm59n06'(suite) -> [];
'ibm-not-wf-P59-ibm59n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P59/ibm59n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16242,12 +15020,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P60-ibm60n01.xml
%% Type: not-wf
%% Sections: 3.3.2
-'ibm-not-wf-P60-ibm60n01'(suite) -> [];
'ibm-not-wf-P60-ibm60n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16255,12 +15032,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P60-ibm60n02.xml
%% Type: not-wf
%% Sections: 3.3.2
-'ibm-not-wf-P60-ibm60n02'(suite) -> [];
'ibm-not-wf-P60-ibm60n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16268,12 +15044,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P60-ibm60n03.xml
%% Type: not-wf
%% Sections: 3.3.2
-'ibm-not-wf-P60-ibm60n03'(suite) -> [];
'ibm-not-wf-P60-ibm60n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16281,12 +15056,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P60-ibm60n04.xml
%% Type: not-wf
%% Sections: 3.3.2
-'ibm-not-wf-P60-ibm60n04'(suite) -> [];
'ibm-not-wf-P60-ibm60n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16294,12 +15068,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P60-ibm60n05.xml
%% Type: not-wf
%% Sections: 3.3.2
-'ibm-not-wf-P60-ibm60n05'(suite) -> [];
'ibm-not-wf-P60-ibm60n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16307,12 +15080,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P60-ibm60n06.xml
%% Type: not-wf
%% Sections: 3.3.2
-'ibm-not-wf-P60-ibm60n06'(suite) -> [];
'ibm-not-wf-P60-ibm60n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16320,12 +15092,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P60-ibm60n07.xml
%% Type: not-wf
%% Sections: 3.3.2
-'ibm-not-wf-P60-ibm60n07'(suite) -> [];
'ibm-not-wf-P60-ibm60n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16333,12 +15104,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P60-ibm60n08.xml
%% Type: not-wf
%% Sections: 3.3.2
-'ibm-not-wf-P60-ibm60n08'(suite) -> [];
'ibm-not-wf-P60-ibm60n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P60/ibm60n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16351,12 +15121,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P61-ibm61n01.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P61-ibm61n01'(suite) -> [];
'ibm-not-wf-P61-ibm61n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P61/ibm61n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P61/ibm61n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16369,12 +15138,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P62-ibm62n01.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P62-ibm62n01'(suite) -> [];
'ibm-not-wf-P62-ibm62n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16382,12 +15150,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P62-ibm62n02.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P62-ibm62n02'(suite) -> [];
'ibm-not-wf-P62-ibm62n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16395,12 +15162,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P62-ibm62n03.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P62-ibm62n03'(suite) -> [];
'ibm-not-wf-P62-ibm62n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16408,12 +15174,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P62-ibm62n04.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P62-ibm62n04'(suite) -> [];
'ibm-not-wf-P62-ibm62n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16421,12 +15186,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P62-ibm62n05.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P62-ibm62n05'(suite) -> [];
'ibm-not-wf-P62-ibm62n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16434,12 +15198,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P62-ibm62n06.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P62-ibm62n06'(suite) -> [];
'ibm-not-wf-P62-ibm62n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16447,12 +15210,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P62-ibm62n07.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P62-ibm62n07'(suite) -> [];
'ibm-not-wf-P62-ibm62n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16460,12 +15222,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P62-ibm62n08.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P62-ibm62n08'(suite) -> [];
'ibm-not-wf-P62-ibm62n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P62/ibm62n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16478,12 +15239,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P63-ibm63n01.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P63-ibm63n01'(suite) -> [];
'ibm-not-wf-P63-ibm63n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16491,12 +15251,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P63-ibm63n02.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P63-ibm63n02'(suite) -> [];
'ibm-not-wf-P63-ibm63n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16504,12 +15263,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P63-ibm63n03.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P63-ibm63n03'(suite) -> [];
'ibm-not-wf-P63-ibm63n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16517,12 +15275,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P63-ibm63n04.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P63-ibm63n04'(suite) -> [];
'ibm-not-wf-P63-ibm63n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16530,12 +15287,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P63-ibm63n05.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P63-ibm63n05'(suite) -> [];
'ibm-not-wf-P63-ibm63n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16543,12 +15299,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P63-ibm63n06.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P63-ibm63n06'(suite) -> [];
'ibm-not-wf-P63-ibm63n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16556,12 +15311,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P63-ibm63n07.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P63-ibm63n07'(suite) -> [];
'ibm-not-wf-P63-ibm63n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P63/ibm63n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16574,12 +15328,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P64-ibm64n01.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P64-ibm64n01'(suite) -> [];
'ibm-not-wf-P64-ibm64n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P64/ibm64n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P64/ibm64n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16587,12 +15340,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P64-ibm64n02.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P64-ibm64n02'(suite) -> [];
'ibm-not-wf-P64-ibm64n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P64/ibm64n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P64/ibm64n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16600,12 +15352,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P64-ibm64n03.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P64-ibm64n03'(suite) -> [];
'ibm-not-wf-P64-ibm64n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P64/ibm64n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P64/ibm64n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16618,12 +15369,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P65-ibm65n01.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P65-ibm65n01'(suite) -> [];
'ibm-not-wf-P65-ibm65n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P65/ibm65n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P65/ibm65n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16631,12 +15381,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P65-ibm65n02.xml
%% Type: not-wf
%% Sections: 3.4
-'ibm-not-wf-P65-ibm65n02'(suite) -> [];
'ibm-not-wf-P65-ibm65n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P65/ibm65n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P65/ibm65n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16649,12 +15398,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n01.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n01'(suite) -> [];
'ibm-not-wf-P66-ibm66n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16662,12 +15410,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n02.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n02'(suite) -> [];
'ibm-not-wf-P66-ibm66n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16675,12 +15422,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n03.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n03'(suite) -> [];
'ibm-not-wf-P66-ibm66n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16688,12 +15434,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n04.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n04'(suite) -> [];
'ibm-not-wf-P66-ibm66n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16701,12 +15446,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n05.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n05'(suite) -> [];
'ibm-not-wf-P66-ibm66n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16714,12 +15458,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n06.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n06'(suite) -> [];
'ibm-not-wf-P66-ibm66n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16727,12 +15470,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n07.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n07'(suite) -> [];
'ibm-not-wf-P66-ibm66n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16740,12 +15482,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n08.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n08'(suite) -> [];
'ibm-not-wf-P66-ibm66n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16753,12 +15494,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n09.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n09'(suite) -> [];
'ibm-not-wf-P66-ibm66n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16766,12 +15506,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n10.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n10'(suite) -> [];
'ibm-not-wf-P66-ibm66n10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16779,12 +15518,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n11.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n11'(suite) -> [];
'ibm-not-wf-P66-ibm66n11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16792,12 +15530,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n12.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n12'(suite) -> [];
'ibm-not-wf-P66-ibm66n12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16805,12 +15542,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n13.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n13'(suite) -> [];
'ibm-not-wf-P66-ibm66n13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16818,12 +15554,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n14.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n14'(suite) -> [];
'ibm-not-wf-P66-ibm66n14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16831,12 +15566,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P66-ibm66n15.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P66-ibm66n15'(suite) -> [];
'ibm-not-wf-P66-ibm66n15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P66/ibm66n15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16849,12 +15583,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n01.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n01'(suite) -> [];
'ibm-not-wf-P68-ibm68n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16862,12 +15595,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n02.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n02'(suite) -> [];
'ibm-not-wf-P68-ibm68n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16875,12 +15607,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n03.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n03'(suite) -> [];
'ibm-not-wf-P68-ibm68n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16888,12 +15619,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n04.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n04'(suite) -> [];
'ibm-not-wf-P68-ibm68n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16901,12 +15631,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n05.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n05'(suite) -> [];
'ibm-not-wf-P68-ibm68n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16914,12 +15643,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n06.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n06'(suite) -> [];
'ibm-not-wf-P68-ibm68n06'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n06.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n06.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16927,12 +15655,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n07.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n07'(suite) -> [];
'ibm-not-wf-P68-ibm68n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16940,12 +15667,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n08.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n08'(suite) -> [];
'ibm-not-wf-P68-ibm68n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16953,12 +15679,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n09.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n09'(suite) -> [];
'ibm-not-wf-P68-ibm68n09'(_Config) -> {skip, "No loop detection yet"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n09.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n09.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16966,12 +15691,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P68-ibm68n10.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P68-ibm68n10'(suite) -> [];
'ibm-not-wf-P68-ibm68n10'(_Config) -> {skip, "No loop detection yet"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n10.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P68/ibm68n10.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -16984,12 +15708,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P69-ibm69n01.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P69-ibm69n01'(suite) -> [];
'ibm-not-wf-P69-ibm69n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -16997,12 +15720,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P69-ibm69n02.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P69-ibm69n02'(suite) -> [];
'ibm-not-wf-P69-ibm69n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17010,12 +15732,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P69-ibm69n03.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P69-ibm69n03'(suite) -> [];
'ibm-not-wf-P69-ibm69n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17023,12 +15744,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P69-ibm69n04.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P69-ibm69n04'(suite) -> [];
'ibm-not-wf-P69-ibm69n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17036,12 +15756,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P69-ibm69n05.xml
%% Type: error
%% Sections: 4.1
-'ibm-not-wf-P69-ibm69n05'(suite) -> [];
'ibm-not-wf-P69-ibm69n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "error").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "error").
%%----------------------------------------------------------------------
%% Test Case
@@ -17049,12 +15768,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P69-ibm69n06.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P69-ibm69n06'(suite) -> [];
'ibm-not-wf-P69-ibm69n06'(_Config) -> {skip, "No loop detection yet"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n06.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n06.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17062,12 +15780,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P69-ibm69n07.xml
%% Type: not-wf
%% Sections: 4.1
-'ibm-not-wf-P69-ibm69n07'(suite) -> [];
'ibm-not-wf-P69-ibm69n07'(_Config) -> {skip, "No loop detection yet"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n07.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P69/ibm69n07.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17080,12 +15797,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P71-ibm70n01.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P71-ibm70n01'(suite) -> [];
'ibm-not-wf-P71-ibm70n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm70n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm70n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17093,12 +15809,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P71-ibm71n01.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P71-ibm71n01'(suite) -> [];
'ibm-not-wf-P71-ibm71n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17106,12 +15821,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P71-ibm71n02.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P71-ibm71n02'(suite) -> [];
'ibm-not-wf-P71-ibm71n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17119,12 +15833,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P71-ibm71n03.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P71-ibm71n03'(suite) -> [];
'ibm-not-wf-P71-ibm71n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17132,12 +15845,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P71-ibm71n04.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P71-ibm71n04'(suite) -> [];
'ibm-not-wf-P71-ibm71n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17145,12 +15857,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P71-ibm71n05.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P71-ibm71n05'(suite) -> [];
'ibm-not-wf-P71-ibm71n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17158,12 +15869,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P71-ibm71n06.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P71-ibm71n06'(suite) -> [];
'ibm-not-wf-P71-ibm71n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17171,12 +15881,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P71-ibm71n07.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P71-ibm71n07'(suite) -> [];
'ibm-not-wf-P71-ibm71n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17184,12 +15893,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P71-ibm71n08.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P71-ibm71n08'(suite) -> [];
'ibm-not-wf-P71-ibm71n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P71/ibm71n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17202,12 +15910,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P72-ibm72n01.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P72-ibm72n01'(suite) -> [];
'ibm-not-wf-P72-ibm72n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17215,12 +15922,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P72-ibm72n02.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P72-ibm72n02'(suite) -> [];
'ibm-not-wf-P72-ibm72n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17228,12 +15934,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P72-ibm72n03.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P72-ibm72n03'(suite) -> [];
'ibm-not-wf-P72-ibm72n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17241,12 +15946,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P72-ibm72n04.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P72-ibm72n04'(suite) -> [];
'ibm-not-wf-P72-ibm72n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17254,12 +15958,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P72-ibm72n05.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P72-ibm72n05'(suite) -> [];
'ibm-not-wf-P72-ibm72n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17267,12 +15970,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P72-ibm72n06.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P72-ibm72n06'(suite) -> [];
'ibm-not-wf-P72-ibm72n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17280,12 +15982,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P72-ibm72n07.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P72-ibm72n07'(suite) -> [];
'ibm-not-wf-P72-ibm72n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17293,12 +15994,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P72-ibm72n08.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P72-ibm72n08'(suite) -> [];
'ibm-not-wf-P72-ibm72n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17306,12 +16006,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P72-ibm72n09.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P72-ibm72n09'(suite) -> [];
'ibm-not-wf-P72-ibm72n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P72/ibm72n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17324,12 +16023,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P73-ibm73n01.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P73-ibm73n01'(suite) -> [];
'ibm-not-wf-P73-ibm73n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P73/ibm73n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P73/ibm73n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17337,12 +16035,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P73-ibm73n03.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P73-ibm73n03'(suite) -> [];
'ibm-not-wf-P73-ibm73n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P73/ibm73n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P73/ibm73n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17355,12 +16052,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P74-ibm74n01.xml
%% Type: not-wf
%% Sections: 4.2
-'ibm-not-wf-P74-ibm74n01'(suite) -> [];
'ibm-not-wf-P74-ibm74n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P74/ibm74n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P74/ibm74n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17373,12 +16069,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n01.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n01'(suite) -> [];
'ibm-not-wf-P75-ibm75n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17386,12 +16081,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n02.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n02'(suite) -> [];
'ibm-not-wf-P75-ibm75n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17399,12 +16093,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n03.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n03'(suite) -> [];
'ibm-not-wf-P75-ibm75n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17412,12 +16105,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n04.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n04'(suite) -> [];
'ibm-not-wf-P75-ibm75n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17425,12 +16117,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n05.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n05'(suite) -> [];
'ibm-not-wf-P75-ibm75n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17438,12 +16129,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n06.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n06'(suite) -> [];
'ibm-not-wf-P75-ibm75n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17451,12 +16141,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n07.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n07'(suite) -> [];
'ibm-not-wf-P75-ibm75n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17464,12 +16153,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n08.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n08'(suite) -> [];
'ibm-not-wf-P75-ibm75n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17477,12 +16165,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n09.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n09'(suite) -> [];
'ibm-not-wf-P75-ibm75n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17490,12 +16177,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n10.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n10'(suite) -> [];
'ibm-not-wf-P75-ibm75n10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17503,12 +16189,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n11.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n11'(suite) -> [];
'ibm-not-wf-P75-ibm75n11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17516,12 +16201,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n12.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n12'(suite) -> [];
'ibm-not-wf-P75-ibm75n12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17529,12 +16213,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P75-ibm75n13.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P75-ibm75n13'(suite) -> [];
'ibm-not-wf-P75-ibm75n13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P75/ibm75n13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17547,12 +16230,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P76-ibm76n01.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P76-ibm76n01'(suite) -> [];
'ibm-not-wf-P76-ibm76n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17560,12 +16242,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P76-ibm76n02.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P76-ibm76n02'(suite) -> [];
'ibm-not-wf-P76-ibm76n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17573,12 +16254,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P76-ibm76n03.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P76-ibm76n03'(suite) -> [];
'ibm-not-wf-P76-ibm76n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17586,12 +16266,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P76-ibm76n04.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P76-ibm76n04'(suite) -> [];
'ibm-not-wf-P76-ibm76n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17599,12 +16278,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P76-ibm76n05.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P76-ibm76n05'(suite) -> [];
'ibm-not-wf-P76-ibm76n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17612,12 +16290,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P76-ibm76n06.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P76-ibm76n06'(suite) -> [];
'ibm-not-wf-P76-ibm76n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17625,12 +16302,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P76-ibm76n07.xml
%% Type: not-wf
%% Sections: 4.2.2
-'ibm-not-wf-P76-ibm76n07'(suite) -> [];
'ibm-not-wf-P76-ibm76n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P76/ibm76n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17643,12 +16319,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P77-ibm77n01.xml
%% Type: not-wf
%% Sections: 4.3.1
-'ibm-not-wf-P77-ibm77n01'(suite) -> [];
'ibm-not-wf-P77-ibm77n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P77/ibm77n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P77/ibm77n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17656,12 +16331,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P77-ibm77n02.xml
%% Type: not-wf
%% Sections: 4.3.1
-'ibm-not-wf-P77-ibm77n02'(suite) -> [];
'ibm-not-wf-P77-ibm77n02'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P77/ibm77n02.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P77/ibm77n02.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17669,12 +16343,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P77-ibm77n03.xml
%% Type: not-wf
%% Sections: 4.3.1
-'ibm-not-wf-P77-ibm77n03'(suite) -> [];
'ibm-not-wf-P77-ibm77n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P77/ibm77n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P77/ibm77n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17682,12 +16355,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P77-ibm77n04.xml
%% Type: not-wf
%% Sections: 4.3.1
-'ibm-not-wf-P77-ibm77n04'(suite) -> [];
'ibm-not-wf-P77-ibm77n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P77/ibm77n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P77/ibm77n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17700,12 +16372,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P78-ibm78n01.xml
%% Type: not-wf
%% Sections: 4.3.2
-'ibm-not-wf-P78-ibm78n01'(suite) -> [];
'ibm-not-wf-P78-ibm78n01'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P78/ibm78n01.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P78/ibm78n01.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17713,12 +16384,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P78-ibm78n02.xml
%% Type: not-wf
%% Sections: 4.3.2
-'ibm-not-wf-P78-ibm78n02'(suite) -> [];
'ibm-not-wf-P78-ibm78n02'(Config) -> {skip, "Fix 3"}.
- %%?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- %%?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P78/ibm78n02.xml"]),
- %%?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- %%?line check_result(R, "not-wf").
+ %%file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ %%Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P78/ibm78n02.xml"]),
+ %%R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ %%check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17731,12 +16401,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P79-ibm79n01.xml
%% Type: not-wf
%% Sections: 4.3.2
-'ibm-not-wf-P79-ibm79n01'(suite) -> [];
'ibm-not-wf-P79-ibm79n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P79/ibm79n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P79/ibm79n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17744,12 +16413,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P79-ibm79n02.xml
%% Type: not-wf
%% Sections: 4.3.2
-'ibm-not-wf-P79-ibm79n02'(suite) -> [];
'ibm-not-wf-P79-ibm79n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P79/ibm79n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P79/ibm79n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17762,12 +16430,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P80-ibm80n01.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P80-ibm80n01'(suite) -> [];
'ibm-not-wf-P80-ibm80n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17775,12 +16442,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P80-ibm80n02.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P80-ibm80n02'(suite) -> [];
'ibm-not-wf-P80-ibm80n02'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n02.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n02.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17788,12 +16454,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P80-ibm80n03.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P80-ibm80n03'(suite) -> [];
'ibm-not-wf-P80-ibm80n03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "not-wf").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17801,12 +16466,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P80-ibm80n04.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P80-ibm80n04'(suite) -> [];
'ibm-not-wf-P80-ibm80n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17814,12 +16478,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P80-ibm80n05.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P80-ibm80n05'(suite) -> [];
'ibm-not-wf-P80-ibm80n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17827,12 +16490,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P80-ibm80n06.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P80-ibm80n06'(suite) -> [];
'ibm-not-wf-P80-ibm80n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P80/ibm80n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17845,12 +16507,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P81-ibm81n01.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P81-ibm81n01'(suite) -> [];
'ibm-not-wf-P81-ibm81n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17858,12 +16519,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P81-ibm81n02.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P81-ibm81n02'(suite) -> [];
'ibm-not-wf-P81-ibm81n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17871,12 +16531,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P81-ibm81n03.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P81-ibm81n03'(suite) -> [];
'ibm-not-wf-P81-ibm81n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17884,12 +16543,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P81-ibm81n04.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P81-ibm81n04'(suite) -> [];
'ibm-not-wf-P81-ibm81n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17897,12 +16555,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P81-ibm81n05.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P81-ibm81n05'(suite) -> [];
'ibm-not-wf-P81-ibm81n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17910,12 +16567,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P81-ibm81n06.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P81-ibm81n06'(suite) -> [];
'ibm-not-wf-P81-ibm81n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17923,12 +16579,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P81-ibm81n07.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P81-ibm81n07'(suite) -> [];
'ibm-not-wf-P81-ibm81n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17936,12 +16591,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P81-ibm81n08.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P81-ibm81n08'(suite) -> [];
'ibm-not-wf-P81-ibm81n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17949,12 +16603,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P81-ibm81n09.xml
%% Type: not-wf
%% Sections: 4.3.3
-'ibm-not-wf-P81-ibm81n09'(suite) -> [];
'ibm-not-wf-P81-ibm81n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P81/ibm81n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -17967,12 +16620,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P82-ibm82n01.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P82-ibm82n01'(suite) -> [];
'ibm-not-wf-P82-ibm82n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17980,12 +16632,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P82-ibm82n02.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P82-ibm82n02'(suite) -> [];
'ibm-not-wf-P82-ibm82n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -17993,12 +16644,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P82-ibm82n03.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P82-ibm82n03'(suite) -> [];
'ibm-not-wf-P82-ibm82n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18006,12 +16656,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P82-ibm82n04.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P82-ibm82n04'(suite) -> [];
'ibm-not-wf-P82-ibm82n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18019,12 +16668,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P82-ibm82n05.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P82-ibm82n05'(suite) -> [];
'ibm-not-wf-P82-ibm82n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18032,12 +16680,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P82-ibm82n06.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P82-ibm82n06'(suite) -> [];
'ibm-not-wf-P82-ibm82n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18045,12 +16692,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P82-ibm82n07.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P82-ibm82n07'(suite) -> [];
'ibm-not-wf-P82-ibm82n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18058,12 +16704,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P82-ibm82n08.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P82-ibm82n08'(suite) -> [];
'ibm-not-wf-P82-ibm82n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P82/ibm82n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -18076,12 +16721,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P83-ibm83n01.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P83-ibm83n01'(suite) -> [];
'ibm-not-wf-P83-ibm83n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18089,12 +16733,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P83-ibm83n02.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P83-ibm83n02'(suite) -> [];
'ibm-not-wf-P83-ibm83n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18102,12 +16745,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P83-ibm83n03.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P83-ibm83n03'(suite) -> [];
'ibm-not-wf-P83-ibm83n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18115,12 +16757,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P83-ibm83n04.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P83-ibm83n04'(suite) -> [];
'ibm-not-wf-P83-ibm83n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18128,12 +16769,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P83-ibm83n05.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P83-ibm83n05'(suite) -> [];
'ibm-not-wf-P83-ibm83n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18141,12 +16781,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P83-ibm83n06.xml
%% Type: not-wf
%% Sections: 4.7
-'ibm-not-wf-P83-ibm83n06'(suite) -> [];
'ibm-not-wf-P83-ibm83n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P83/ibm83n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -18159,12 +16798,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n01.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n01'(suite) -> [];
'ibm-not-wf-P85-ibm85n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18172,12 +16810,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n02.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n02'(suite) -> [];
'ibm-not-wf-P85-ibm85n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18185,12 +16822,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n03.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n03'(suite) -> [];
'ibm-not-wf-P85-ibm85n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18198,12 +16834,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n04.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n04'(suite) -> [];
'ibm-not-wf-P85-ibm85n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18211,12 +16846,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n05.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n05'(suite) -> [];
'ibm-not-wf-P85-ibm85n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18224,12 +16858,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n06.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n06'(suite) -> [];
'ibm-not-wf-P85-ibm85n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18237,12 +16870,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n07.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n07'(suite) -> [];
'ibm-not-wf-P85-ibm85n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18250,12 +16882,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n08.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n08'(suite) -> [];
'ibm-not-wf-P85-ibm85n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18263,12 +16894,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n09.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n09'(suite) -> [];
'ibm-not-wf-P85-ibm85n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18276,12 +16906,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n10.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n10'(suite) -> [];
'ibm-not-wf-P85-ibm85n10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18289,12 +16918,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n100.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n100'(suite) -> [];
'ibm-not-wf-P85-ibm85n100'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n100.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n100.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18302,12 +16930,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n101.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n101'(suite) -> [];
'ibm-not-wf-P85-ibm85n101'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n101.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n101.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18315,12 +16942,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n102.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n102'(suite) -> [];
'ibm-not-wf-P85-ibm85n102'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n102.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n102.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18328,12 +16954,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n103.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n103'(suite) -> [];
'ibm-not-wf-P85-ibm85n103'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n103.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n103.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18341,12 +16966,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n104.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n104'(suite) -> [];
'ibm-not-wf-P85-ibm85n104'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n104.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n104.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18354,12 +16978,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n105.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n105'(suite) -> [];
'ibm-not-wf-P85-ibm85n105'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n105.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n105.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18367,12 +16990,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n106.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n106'(suite) -> [];
'ibm-not-wf-P85-ibm85n106'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n106.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n106.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18380,12 +17002,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n107.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n107'(suite) -> [];
'ibm-not-wf-P85-ibm85n107'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n107.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n107.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18393,12 +17014,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n108.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n108'(suite) -> [];
'ibm-not-wf-P85-ibm85n108'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n108.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n108.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18406,12 +17026,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n109.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n109'(suite) -> [];
'ibm-not-wf-P85-ibm85n109'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n109.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n109.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18419,12 +17038,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n11.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n11'(suite) -> [];
'ibm-not-wf-P85-ibm85n11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18432,12 +17050,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n110.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n110'(suite) -> [];
'ibm-not-wf-P85-ibm85n110'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n110.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n110.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18445,12 +17062,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n111.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n111'(suite) -> [];
'ibm-not-wf-P85-ibm85n111'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n111.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n111.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18458,12 +17074,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n112.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n112'(suite) -> [];
'ibm-not-wf-P85-ibm85n112'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n112.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n112.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18471,12 +17086,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n113.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n113'(suite) -> [];
'ibm-not-wf-P85-ibm85n113'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n113.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n113.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18484,12 +17098,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n114.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n114'(suite) -> [];
'ibm-not-wf-P85-ibm85n114'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n114.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n114.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18497,12 +17110,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n115.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n115'(suite) -> [];
'ibm-not-wf-P85-ibm85n115'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n115.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n115.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18510,12 +17122,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n116.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n116'(suite) -> [];
'ibm-not-wf-P85-ibm85n116'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n116.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n116.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18523,12 +17134,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n117.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n117'(suite) -> [];
'ibm-not-wf-P85-ibm85n117'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n117.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n117.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18536,12 +17146,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n118.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n118'(suite) -> [];
'ibm-not-wf-P85-ibm85n118'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n118.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n118.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18549,12 +17158,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n119.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n119'(suite) -> [];
'ibm-not-wf-P85-ibm85n119'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n119.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n119.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18562,12 +17170,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n12.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n12'(suite) -> [];
'ibm-not-wf-P85-ibm85n12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18575,12 +17182,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n120.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n120'(suite) -> [];
'ibm-not-wf-P85-ibm85n120'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n120.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n120.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18588,12 +17194,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n121.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n121'(suite) -> [];
'ibm-not-wf-P85-ibm85n121'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n121.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n121.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18601,12 +17206,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n122.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n122'(suite) -> [];
'ibm-not-wf-P85-ibm85n122'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n122.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n122.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18614,12 +17218,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n123.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n123'(suite) -> [];
'ibm-not-wf-P85-ibm85n123'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n123.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n123.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18627,12 +17230,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n124.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n124'(suite) -> [];
'ibm-not-wf-P85-ibm85n124'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n124.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n124.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18640,12 +17242,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n125.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n125'(suite) -> [];
'ibm-not-wf-P85-ibm85n125'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n125.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n125.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18653,12 +17254,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n126.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n126'(suite) -> [];
'ibm-not-wf-P85-ibm85n126'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n126.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n126.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18666,12 +17266,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n127.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n127'(suite) -> [];
'ibm-not-wf-P85-ibm85n127'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n127.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n127.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18679,12 +17278,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n128.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n128'(suite) -> [];
'ibm-not-wf-P85-ibm85n128'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n128.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n128.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18692,12 +17290,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n129.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n129'(suite) -> [];
'ibm-not-wf-P85-ibm85n129'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n129.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n129.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18705,12 +17302,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n13.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n13'(suite) -> [];
'ibm-not-wf-P85-ibm85n13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18718,12 +17314,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n130.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n130'(suite) -> [];
'ibm-not-wf-P85-ibm85n130'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n130.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n130.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18731,12 +17326,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n131.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n131'(suite) -> [];
'ibm-not-wf-P85-ibm85n131'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n131.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n131.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18744,12 +17338,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n132.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n132'(suite) -> [];
'ibm-not-wf-P85-ibm85n132'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n132.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n132.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18757,12 +17350,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n133.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n133'(suite) -> [];
'ibm-not-wf-P85-ibm85n133'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n133.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n133.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18770,12 +17362,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n134.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n134'(suite) -> [];
'ibm-not-wf-P85-ibm85n134'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n134.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n134.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18783,12 +17374,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n135.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n135'(suite) -> [];
'ibm-not-wf-P85-ibm85n135'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n135.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n135.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18796,12 +17386,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n136.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n136'(suite) -> [];
'ibm-not-wf-P85-ibm85n136'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n136.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n136.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18809,12 +17398,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n137.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n137'(suite) -> [];
'ibm-not-wf-P85-ibm85n137'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n137.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n137.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18822,12 +17410,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n138.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n138'(suite) -> [];
'ibm-not-wf-P85-ibm85n138'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n138.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n138.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18835,12 +17422,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n139.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n139'(suite) -> [];
'ibm-not-wf-P85-ibm85n139'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n139.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n139.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18848,12 +17434,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n14.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n14'(suite) -> [];
'ibm-not-wf-P85-ibm85n14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18861,12 +17446,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n140.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n140'(suite) -> [];
'ibm-not-wf-P85-ibm85n140'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n140.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n140.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18874,12 +17458,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n141.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n141'(suite) -> [];
'ibm-not-wf-P85-ibm85n141'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n141.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n141.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18887,12 +17470,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n142.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n142'(suite) -> [];
'ibm-not-wf-P85-ibm85n142'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n142.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n142.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18900,12 +17482,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n143.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n143'(suite) -> [];
'ibm-not-wf-P85-ibm85n143'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n143.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n143.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18913,12 +17494,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n144.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n144'(suite) -> [];
'ibm-not-wf-P85-ibm85n144'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n144.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n144.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18926,12 +17506,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n145.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n145'(suite) -> [];
'ibm-not-wf-P85-ibm85n145'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n145.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n145.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18939,12 +17518,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n146.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n146'(suite) -> [];
'ibm-not-wf-P85-ibm85n146'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n146.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n146.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18952,12 +17530,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n147.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n147'(suite) -> [];
'ibm-not-wf-P85-ibm85n147'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n147.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n147.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18965,12 +17542,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n148.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n148'(suite) -> [];
'ibm-not-wf-P85-ibm85n148'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n148.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n148.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18978,12 +17554,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n149.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n149'(suite) -> [];
'ibm-not-wf-P85-ibm85n149'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n149.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n149.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -18991,12 +17566,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n15.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n15'(suite) -> [];
'ibm-not-wf-P85-ibm85n15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19004,12 +17578,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n150.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n150'(suite) -> [];
'ibm-not-wf-P85-ibm85n150'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n150.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n150.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19017,12 +17590,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n151.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n151'(suite) -> [];
'ibm-not-wf-P85-ibm85n151'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n151.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n151.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19030,12 +17602,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n152.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n152'(suite) -> [];
'ibm-not-wf-P85-ibm85n152'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n152.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n152.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19043,12 +17614,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n153.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n153'(suite) -> [];
'ibm-not-wf-P85-ibm85n153'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n153.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n153.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19056,12 +17626,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n154.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n154'(suite) -> [];
'ibm-not-wf-P85-ibm85n154'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n154.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n154.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19069,12 +17638,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n155.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n155'(suite) -> [];
'ibm-not-wf-P85-ibm85n155'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n155.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n155.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19082,12 +17650,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n156.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n156'(suite) -> [];
'ibm-not-wf-P85-ibm85n156'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n156.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n156.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19095,12 +17662,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n157.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n157'(suite) -> [];
'ibm-not-wf-P85-ibm85n157'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n157.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n157.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19108,12 +17674,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n158.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n158'(suite) -> [];
'ibm-not-wf-P85-ibm85n158'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n158.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n158.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19121,12 +17686,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n159.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n159'(suite) -> [];
'ibm-not-wf-P85-ibm85n159'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n159.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n159.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19134,12 +17698,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n16.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n16'(suite) -> [];
'ibm-not-wf-P85-ibm85n16'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n16.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n16.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19147,12 +17710,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n160.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n160'(suite) -> [];
'ibm-not-wf-P85-ibm85n160'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n160.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n160.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19160,12 +17722,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n161.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n161'(suite) -> [];
'ibm-not-wf-P85-ibm85n161'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n161.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n161.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19173,12 +17734,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n162.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n162'(suite) -> [];
'ibm-not-wf-P85-ibm85n162'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n162.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n162.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19186,12 +17746,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n163.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n163'(suite) -> [];
'ibm-not-wf-P85-ibm85n163'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n163.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n163.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19199,12 +17758,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n164.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n164'(suite) -> [];
'ibm-not-wf-P85-ibm85n164'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n164.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n164.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19212,12 +17770,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n165.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n165'(suite) -> [];
'ibm-not-wf-P85-ibm85n165'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n165.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n165.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19225,12 +17782,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n166.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n166'(suite) -> [];
'ibm-not-wf-P85-ibm85n166'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n166.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n166.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19238,12 +17794,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n167.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n167'(suite) -> [];
'ibm-not-wf-P85-ibm85n167'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n167.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n167.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19251,12 +17806,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n168.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n168'(suite) -> [];
'ibm-not-wf-P85-ibm85n168'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n168.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n168.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19264,12 +17818,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n169.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n169'(suite) -> [];
'ibm-not-wf-P85-ibm85n169'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n169.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n169.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19277,12 +17830,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n17.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n17'(suite) -> [];
'ibm-not-wf-P85-ibm85n17'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n17.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n17.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19290,12 +17842,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n170.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n170'(suite) -> [];
'ibm-not-wf-P85-ibm85n170'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n170.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n170.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19303,12 +17854,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n171.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n171'(suite) -> [];
'ibm-not-wf-P85-ibm85n171'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n171.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n171.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19316,12 +17866,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n172.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n172'(suite) -> [];
'ibm-not-wf-P85-ibm85n172'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n172.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n172.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19329,12 +17878,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n173.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n173'(suite) -> [];
'ibm-not-wf-P85-ibm85n173'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n173.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n173.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19342,12 +17890,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n174.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n174'(suite) -> [];
'ibm-not-wf-P85-ibm85n174'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n174.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n174.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19355,12 +17902,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n175.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n175'(suite) -> [];
'ibm-not-wf-P85-ibm85n175'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n175.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n175.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19368,12 +17914,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n176.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n176'(suite) -> [];
'ibm-not-wf-P85-ibm85n176'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n176.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n176.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19381,12 +17926,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n177.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n177'(suite) -> [];
'ibm-not-wf-P85-ibm85n177'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n177.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n177.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19394,12 +17938,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n178.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n178'(suite) -> [];
'ibm-not-wf-P85-ibm85n178'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n178.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n178.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19407,12 +17950,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n179.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n179'(suite) -> [];
'ibm-not-wf-P85-ibm85n179'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n179.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n179.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19420,12 +17962,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n18.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n18'(suite) -> [];
'ibm-not-wf-P85-ibm85n18'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n18.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n18.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19433,12 +17974,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n180.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n180'(suite) -> [];
'ibm-not-wf-P85-ibm85n180'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n180.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n180.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19446,12 +17986,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n181.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n181'(suite) -> [];
'ibm-not-wf-P85-ibm85n181'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n181.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n181.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19459,12 +17998,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n182.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n182'(suite) -> [];
'ibm-not-wf-P85-ibm85n182'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n182.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n182.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19472,12 +18010,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n183.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n183'(suite) -> [];
'ibm-not-wf-P85-ibm85n183'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n183.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n183.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19485,12 +18022,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n184.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n184'(suite) -> [];
'ibm-not-wf-P85-ibm85n184'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n184.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n184.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19498,12 +18034,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n185.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n185'(suite) -> [];
'ibm-not-wf-P85-ibm85n185'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n185.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n185.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19511,12 +18046,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n186.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n186'(suite) -> [];
'ibm-not-wf-P85-ibm85n186'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n186.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n186.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19524,12 +18058,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n187.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n187'(suite) -> [];
'ibm-not-wf-P85-ibm85n187'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n187.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n187.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19537,12 +18070,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n188.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n188'(suite) -> [];
'ibm-not-wf-P85-ibm85n188'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n188.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n188.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19550,12 +18082,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n189.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n189'(suite) -> [];
'ibm-not-wf-P85-ibm85n189'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n189.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n189.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19563,12 +18094,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n19.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n19'(suite) -> [];
'ibm-not-wf-P85-ibm85n19'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n19.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n19.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19576,12 +18106,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n190.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n190'(suite) -> [];
'ibm-not-wf-P85-ibm85n190'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n190.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n190.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19589,12 +18118,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n191.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n191'(suite) -> [];
'ibm-not-wf-P85-ibm85n191'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n191.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n191.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19602,12 +18130,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n192.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n192'(suite) -> [];
'ibm-not-wf-P85-ibm85n192'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n192.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n192.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19615,12 +18142,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n193.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n193'(suite) -> [];
'ibm-not-wf-P85-ibm85n193'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n193.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n193.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19628,12 +18154,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n194.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n194'(suite) -> [];
'ibm-not-wf-P85-ibm85n194'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n194.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n194.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19641,12 +18166,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n195.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n195'(suite) -> [];
'ibm-not-wf-P85-ibm85n195'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n195.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n195.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19654,12 +18178,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n196.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n196'(suite) -> [];
'ibm-not-wf-P85-ibm85n196'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n196.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n196.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19667,12 +18190,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n197.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n197'(suite) -> [];
'ibm-not-wf-P85-ibm85n197'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n197.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n197.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19680,12 +18202,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n198.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n198'(suite) -> [];
'ibm-not-wf-P85-ibm85n198'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n198.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n198.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19693,12 +18214,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n20.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n20'(suite) -> [];
'ibm-not-wf-P85-ibm85n20'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n20.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n20.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19706,12 +18226,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n21.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n21'(suite) -> [];
'ibm-not-wf-P85-ibm85n21'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n21.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n21.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19719,12 +18238,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n22.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n22'(suite) -> [];
'ibm-not-wf-P85-ibm85n22'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n22.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n22.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19732,12 +18250,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n23.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n23'(suite) -> [];
'ibm-not-wf-P85-ibm85n23'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n23.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n23.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19745,12 +18262,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n24.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n24'(suite) -> [];
'ibm-not-wf-P85-ibm85n24'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n24.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n24.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19758,12 +18274,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n25.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n25'(suite) -> [];
'ibm-not-wf-P85-ibm85n25'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n25.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n25.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19771,12 +18286,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n26.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n26'(suite) -> [];
'ibm-not-wf-P85-ibm85n26'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n26.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n26.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19784,12 +18298,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n27.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n27'(suite) -> [];
'ibm-not-wf-P85-ibm85n27'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n27.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n27.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19797,12 +18310,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n28.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n28'(suite) -> [];
'ibm-not-wf-P85-ibm85n28'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n28.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n28.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19810,12 +18322,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n29.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n29'(suite) -> [];
'ibm-not-wf-P85-ibm85n29'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n29.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n29.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19823,12 +18334,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n30.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n30'(suite) -> [];
'ibm-not-wf-P85-ibm85n30'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n30.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n30.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19836,12 +18346,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n31.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n31'(suite) -> [];
'ibm-not-wf-P85-ibm85n31'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n31.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n31.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19849,12 +18358,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n32.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n32'(suite) -> [];
'ibm-not-wf-P85-ibm85n32'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n32.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n32.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19862,12 +18370,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n33.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n33'(suite) -> [];
'ibm-not-wf-P85-ibm85n33'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n33.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n33.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19875,12 +18382,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n34.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n34'(suite) -> [];
'ibm-not-wf-P85-ibm85n34'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n34.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n34.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19888,12 +18394,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n35.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n35'(suite) -> [];
'ibm-not-wf-P85-ibm85n35'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n35.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n35.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19901,12 +18406,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n36.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n36'(suite) -> [];
'ibm-not-wf-P85-ibm85n36'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n36.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n36.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19914,12 +18418,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n37.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n37'(suite) -> [];
'ibm-not-wf-P85-ibm85n37'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n37.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n37.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19927,12 +18430,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n38.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n38'(suite) -> [];
'ibm-not-wf-P85-ibm85n38'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n38.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n38.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19940,12 +18442,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n39.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n39'(suite) -> [];
'ibm-not-wf-P85-ibm85n39'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n39.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n39.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19953,12 +18454,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n40.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n40'(suite) -> [];
'ibm-not-wf-P85-ibm85n40'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n40.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n40.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19966,12 +18466,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n41.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n41'(suite) -> [];
'ibm-not-wf-P85-ibm85n41'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n41.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n41.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19979,12 +18478,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n42.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n42'(suite) -> [];
'ibm-not-wf-P85-ibm85n42'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n42.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n42.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -19992,12 +18490,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n43.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n43'(suite) -> [];
'ibm-not-wf-P85-ibm85n43'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n43.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n43.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20005,12 +18502,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n44.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n44'(suite) -> [];
'ibm-not-wf-P85-ibm85n44'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n44.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n44.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20018,12 +18514,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n45.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n45'(suite) -> [];
'ibm-not-wf-P85-ibm85n45'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n45.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n45.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20031,12 +18526,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n46.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n46'(suite) -> [];
'ibm-not-wf-P85-ibm85n46'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n46.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n46.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20044,12 +18538,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n47.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n47'(suite) -> [];
'ibm-not-wf-P85-ibm85n47'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n47.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n47.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20057,12 +18550,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n48.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n48'(suite) -> [];
'ibm-not-wf-P85-ibm85n48'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n48.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n48.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20070,12 +18562,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n49.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n49'(suite) -> [];
'ibm-not-wf-P85-ibm85n49'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n49.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n49.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20083,12 +18574,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n50.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n50'(suite) -> [];
'ibm-not-wf-P85-ibm85n50'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n50.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n50.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20096,12 +18586,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n51.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n51'(suite) -> [];
'ibm-not-wf-P85-ibm85n51'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n51.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n51.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20109,12 +18598,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n52.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n52'(suite) -> [];
'ibm-not-wf-P85-ibm85n52'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n52.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n52.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20122,12 +18610,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n53.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n53'(suite) -> [];
'ibm-not-wf-P85-ibm85n53'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n53.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n53.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20135,12 +18622,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n54.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n54'(suite) -> [];
'ibm-not-wf-P85-ibm85n54'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n54.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n54.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20148,12 +18634,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n55.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n55'(suite) -> [];
'ibm-not-wf-P85-ibm85n55'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n55.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n55.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20161,12 +18646,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n56.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n56'(suite) -> [];
'ibm-not-wf-P85-ibm85n56'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n56.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n56.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20174,12 +18658,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n57.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n57'(suite) -> [];
'ibm-not-wf-P85-ibm85n57'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n57.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n57.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20187,12 +18670,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n58.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n58'(suite) -> [];
'ibm-not-wf-P85-ibm85n58'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n58.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n58.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20200,12 +18682,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n59.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n59'(suite) -> [];
'ibm-not-wf-P85-ibm85n59'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n59.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n59.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20213,12 +18694,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n60.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n60'(suite) -> [];
'ibm-not-wf-P85-ibm85n60'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n60.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n60.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20226,12 +18706,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n61.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n61'(suite) -> [];
'ibm-not-wf-P85-ibm85n61'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n61.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n61.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20239,12 +18718,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n62.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n62'(suite) -> [];
'ibm-not-wf-P85-ibm85n62'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n62.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n62.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20252,12 +18730,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n63.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n63'(suite) -> [];
'ibm-not-wf-P85-ibm85n63'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n63.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n63.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20265,12 +18742,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n64.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n64'(suite) -> [];
'ibm-not-wf-P85-ibm85n64'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n64.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n64.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20278,12 +18754,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n65.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n65'(suite) -> [];
'ibm-not-wf-P85-ibm85n65'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n65.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n65.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20291,12 +18766,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n66.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n66'(suite) -> [];
'ibm-not-wf-P85-ibm85n66'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n66.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n66.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20304,12 +18778,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n67.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n67'(suite) -> [];
'ibm-not-wf-P85-ibm85n67'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n67.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n67.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20317,12 +18790,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n68.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n68'(suite) -> [];
'ibm-not-wf-P85-ibm85n68'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n68.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n68.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20330,12 +18802,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n69.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n69'(suite) -> [];
'ibm-not-wf-P85-ibm85n69'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n69.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n69.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20343,12 +18814,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n70.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n70'(suite) -> [];
'ibm-not-wf-P85-ibm85n70'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n70.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n70.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20356,12 +18826,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n71.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n71'(suite) -> [];
'ibm-not-wf-P85-ibm85n71'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n71.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n71.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20369,12 +18838,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n72.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n72'(suite) -> [];
'ibm-not-wf-P85-ibm85n72'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n72.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n72.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20382,12 +18850,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n73.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n73'(suite) -> [];
'ibm-not-wf-P85-ibm85n73'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n73.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n73.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20395,12 +18862,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n74.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n74'(suite) -> [];
'ibm-not-wf-P85-ibm85n74'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n74.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n74.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20408,12 +18874,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n75.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n75'(suite) -> [];
'ibm-not-wf-P85-ibm85n75'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n75.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n75.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20421,12 +18886,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n76.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n76'(suite) -> [];
'ibm-not-wf-P85-ibm85n76'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n76.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n76.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20434,12 +18898,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n77.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n77'(suite) -> [];
'ibm-not-wf-P85-ibm85n77'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n77.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n77.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20447,12 +18910,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n78.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n78'(suite) -> [];
'ibm-not-wf-P85-ibm85n78'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n78.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n78.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20460,12 +18922,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n79.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n79'(suite) -> [];
'ibm-not-wf-P85-ibm85n79'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n79.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n79.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20473,12 +18934,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n80.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n80'(suite) -> [];
'ibm-not-wf-P85-ibm85n80'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n80.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n80.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20486,12 +18946,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n81.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n81'(suite) -> [];
'ibm-not-wf-P85-ibm85n81'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n81.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n81.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20499,12 +18958,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n82.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n82'(suite) -> [];
'ibm-not-wf-P85-ibm85n82'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n82.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n82.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20512,12 +18970,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n83.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n83'(suite) -> [];
'ibm-not-wf-P85-ibm85n83'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n83.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n83.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20525,12 +18982,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n84.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n84'(suite) -> [];
'ibm-not-wf-P85-ibm85n84'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n84.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n84.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20538,12 +18994,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n85.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n85'(suite) -> [];
'ibm-not-wf-P85-ibm85n85'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n85.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n85.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20551,12 +19006,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n86.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n86'(suite) -> [];
'ibm-not-wf-P85-ibm85n86'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n86.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n86.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20564,12 +19018,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n87.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n87'(suite) -> [];
'ibm-not-wf-P85-ibm85n87'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n87.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n87.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20577,12 +19030,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n88.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n88'(suite) -> [];
'ibm-not-wf-P85-ibm85n88'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n88.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n88.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20590,12 +19042,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n89.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n89'(suite) -> [];
'ibm-not-wf-P85-ibm85n89'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n89.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n89.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20603,12 +19054,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n90.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n90'(suite) -> [];
'ibm-not-wf-P85-ibm85n90'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n90.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n90.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20616,12 +19066,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n91.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n91'(suite) -> [];
'ibm-not-wf-P85-ibm85n91'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n91.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n91.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20629,12 +19078,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n92.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n92'(suite) -> [];
'ibm-not-wf-P85-ibm85n92'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n92.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n92.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20642,12 +19090,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n93.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n93'(suite) -> [];
'ibm-not-wf-P85-ibm85n93'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n93.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n93.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20655,12 +19102,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n94.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n94'(suite) -> [];
'ibm-not-wf-P85-ibm85n94'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n94.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n94.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20668,12 +19114,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n95.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n95'(suite) -> [];
'ibm-not-wf-P85-ibm85n95'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n95.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n95.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20681,12 +19126,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n96.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n96'(suite) -> [];
'ibm-not-wf-P85-ibm85n96'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n96.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n96.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20694,12 +19138,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n97.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n97'(suite) -> [];
'ibm-not-wf-P85-ibm85n97'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n97.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n97.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20707,12 +19150,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n98.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n98'(suite) -> [];
'ibm-not-wf-P85-ibm85n98'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n98.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n98.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20720,12 +19162,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P85-ibm85n99.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P85-ibm85n99'(suite) -> [];
'ibm-not-wf-P85-ibm85n99'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n99.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P85/ibm85n99.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -20738,12 +19179,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P86-ibm86n01.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P86-ibm86n01'(suite) -> [];
'ibm-not-wf-P86-ibm86n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P86/ibm86n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P86/ibm86n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20751,12 +19191,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P86-ibm86n02.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P86-ibm86n02'(suite) -> [];
'ibm-not-wf-P86-ibm86n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P86/ibm86n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P86/ibm86n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20764,12 +19203,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P86-ibm86n03.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P86-ibm86n03'(suite) -> [];
'ibm-not-wf-P86-ibm86n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P86/ibm86n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P86/ibm86n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20777,12 +19215,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P86-ibm86n04.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P86-ibm86n04'(suite) -> [];
'ibm-not-wf-P86-ibm86n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P86/ibm86n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P86/ibm86n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -20795,12 +19232,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n01.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n01'(suite) -> [];
'ibm-not-wf-P87-ibm87n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20808,12 +19244,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n02.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n02'(suite) -> [];
'ibm-not-wf-P87-ibm87n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20821,12 +19256,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n03.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n03'(suite) -> [];
'ibm-not-wf-P87-ibm87n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20834,12 +19268,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n04.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n04'(suite) -> [];
'ibm-not-wf-P87-ibm87n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20847,12 +19280,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n05.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n05'(suite) -> [];
'ibm-not-wf-P87-ibm87n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20860,12 +19292,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n06.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n06'(suite) -> [];
'ibm-not-wf-P87-ibm87n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20873,12 +19304,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n07.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n07'(suite) -> [];
'ibm-not-wf-P87-ibm87n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20886,12 +19316,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n08.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n08'(suite) -> [];
'ibm-not-wf-P87-ibm87n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20899,12 +19328,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n09.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n09'(suite) -> [];
'ibm-not-wf-P87-ibm87n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20912,12 +19340,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n10.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n10'(suite) -> [];
'ibm-not-wf-P87-ibm87n10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20925,12 +19352,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n11.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n11'(suite) -> [];
'ibm-not-wf-P87-ibm87n11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20938,12 +19364,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n12.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n12'(suite) -> [];
'ibm-not-wf-P87-ibm87n12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20951,12 +19376,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n13.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n13'(suite) -> [];
'ibm-not-wf-P87-ibm87n13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20964,12 +19388,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n14.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n14'(suite) -> [];
'ibm-not-wf-P87-ibm87n14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20977,12 +19400,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n15.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n15'(suite) -> [];
'ibm-not-wf-P87-ibm87n15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -20990,12 +19412,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n16.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n16'(suite) -> [];
'ibm-not-wf-P87-ibm87n16'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n16.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n16.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21003,12 +19424,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n17.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n17'(suite) -> [];
'ibm-not-wf-P87-ibm87n17'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n17.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n17.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21016,12 +19436,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n18.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n18'(suite) -> [];
'ibm-not-wf-P87-ibm87n18'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n18.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n18.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21029,12 +19448,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n19.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n19'(suite) -> [];
'ibm-not-wf-P87-ibm87n19'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n19.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n19.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21042,12 +19460,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n20.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n20'(suite) -> [];
'ibm-not-wf-P87-ibm87n20'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n20.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n20.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21055,12 +19472,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n21.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n21'(suite) -> [];
'ibm-not-wf-P87-ibm87n21'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n21.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n21.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21068,12 +19484,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n22.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n22'(suite) -> [];
'ibm-not-wf-P87-ibm87n22'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n22.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n22.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21081,12 +19496,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n23.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n23'(suite) -> [];
'ibm-not-wf-P87-ibm87n23'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n23.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n23.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21094,12 +19508,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n24.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n24'(suite) -> [];
'ibm-not-wf-P87-ibm87n24'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n24.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n24.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21107,12 +19520,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n25.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n25'(suite) -> [];
'ibm-not-wf-P87-ibm87n25'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n25.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n25.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21120,12 +19532,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n26.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n26'(suite) -> [];
'ibm-not-wf-P87-ibm87n26'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n26.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n26.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21133,12 +19544,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n27.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n27'(suite) -> [];
'ibm-not-wf-P87-ibm87n27'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n27.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n27.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21146,12 +19556,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n28.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n28'(suite) -> [];
'ibm-not-wf-P87-ibm87n28'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n28.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n28.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21159,12 +19568,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n29.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n29'(suite) -> [];
'ibm-not-wf-P87-ibm87n29'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n29.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n29.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21172,12 +19580,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n30.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n30'(suite) -> [];
'ibm-not-wf-P87-ibm87n30'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n30.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n30.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21185,12 +19592,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n31.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n31'(suite) -> [];
'ibm-not-wf-P87-ibm87n31'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n31.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n31.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21198,12 +19604,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n32.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n32'(suite) -> [];
'ibm-not-wf-P87-ibm87n32'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n32.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n32.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21211,12 +19616,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n33.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n33'(suite) -> [];
'ibm-not-wf-P87-ibm87n33'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n33.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n33.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21224,12 +19628,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n34.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n34'(suite) -> [];
'ibm-not-wf-P87-ibm87n34'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n34.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n34.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21237,12 +19640,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n35.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n35'(suite) -> [];
'ibm-not-wf-P87-ibm87n35'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n35.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n35.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21250,12 +19652,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n36.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n36'(suite) -> [];
'ibm-not-wf-P87-ibm87n36'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n36.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n36.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21263,12 +19664,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n37.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n37'(suite) -> [];
'ibm-not-wf-P87-ibm87n37'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n37.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n37.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21276,12 +19676,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n38.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n38'(suite) -> [];
'ibm-not-wf-P87-ibm87n38'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n38.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n38.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21289,12 +19688,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n39.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n39'(suite) -> [];
'ibm-not-wf-P87-ibm87n39'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n39.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n39.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21302,12 +19700,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n40.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n40'(suite) -> [];
'ibm-not-wf-P87-ibm87n40'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n40.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n40.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21315,12 +19712,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n41.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n41'(suite) -> [];
'ibm-not-wf-P87-ibm87n41'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n41.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n41.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21328,12 +19724,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n42.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n42'(suite) -> [];
'ibm-not-wf-P87-ibm87n42'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n42.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n42.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21341,12 +19736,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n43.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n43'(suite) -> [];
'ibm-not-wf-P87-ibm87n43'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n43.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n43.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21354,12 +19748,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n44.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n44'(suite) -> [];
'ibm-not-wf-P87-ibm87n44'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n44.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n44.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21367,12 +19760,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n45.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n45'(suite) -> [];
'ibm-not-wf-P87-ibm87n45'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n45.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n45.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21380,12 +19772,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n46.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n46'(suite) -> [];
'ibm-not-wf-P87-ibm87n46'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n46.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n46.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21393,12 +19784,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n47.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n47'(suite) -> [];
'ibm-not-wf-P87-ibm87n47'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n47.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n47.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21406,12 +19796,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n48.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n48'(suite) -> [];
'ibm-not-wf-P87-ibm87n48'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n48.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n48.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21419,12 +19808,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n49.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n49'(suite) -> [];
'ibm-not-wf-P87-ibm87n49'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n49.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n49.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21432,12 +19820,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n50.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n50'(suite) -> [];
'ibm-not-wf-P87-ibm87n50'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n50.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n50.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21445,12 +19832,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n51.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n51'(suite) -> [];
'ibm-not-wf-P87-ibm87n51'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n51.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n51.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21458,12 +19844,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n52.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n52'(suite) -> [];
'ibm-not-wf-P87-ibm87n52'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n52.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n52.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21471,12 +19856,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n53.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n53'(suite) -> [];
'ibm-not-wf-P87-ibm87n53'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n53.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n53.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21484,12 +19868,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n54.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n54'(suite) -> [];
'ibm-not-wf-P87-ibm87n54'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n54.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n54.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21497,12 +19880,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n55.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n55'(suite) -> [];
'ibm-not-wf-P87-ibm87n55'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n55.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n55.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21510,12 +19892,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n56.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n56'(suite) -> [];
'ibm-not-wf-P87-ibm87n56'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n56.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n56.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21523,12 +19904,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n57.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n57'(suite) -> [];
'ibm-not-wf-P87-ibm87n57'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n57.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n57.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21536,12 +19916,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n58.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n58'(suite) -> [];
'ibm-not-wf-P87-ibm87n58'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n58.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n58.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21549,12 +19928,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n59.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n59'(suite) -> [];
'ibm-not-wf-P87-ibm87n59'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n59.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n59.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21562,12 +19940,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n60.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n60'(suite) -> [];
'ibm-not-wf-P87-ibm87n60'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n60.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n60.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21575,12 +19952,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n61.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n61'(suite) -> [];
'ibm-not-wf-P87-ibm87n61'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n61.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n61.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21588,12 +19964,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n62.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n62'(suite) -> [];
'ibm-not-wf-P87-ibm87n62'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n62.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n62.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21601,12 +19976,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n63.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n63'(suite) -> [];
'ibm-not-wf-P87-ibm87n63'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n63.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n63.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21614,12 +19988,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n64.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n64'(suite) -> [];
'ibm-not-wf-P87-ibm87n64'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n64.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n64.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21627,12 +20000,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n66.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n66'(suite) -> [];
'ibm-not-wf-P87-ibm87n66'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n66.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n66.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21640,12 +20012,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n67.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n67'(suite) -> [];
'ibm-not-wf-P87-ibm87n67'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n67.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n67.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21653,12 +20024,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n68.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n68'(suite) -> [];
'ibm-not-wf-P87-ibm87n68'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n68.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n68.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21666,12 +20036,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n69.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n69'(suite) -> [];
'ibm-not-wf-P87-ibm87n69'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n69.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n69.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21679,12 +20048,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n70.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n70'(suite) -> [];
'ibm-not-wf-P87-ibm87n70'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n70.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n70.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21692,12 +20060,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n71.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n71'(suite) -> [];
'ibm-not-wf-P87-ibm87n71'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n71.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n71.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21705,12 +20072,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n72.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n72'(suite) -> [];
'ibm-not-wf-P87-ibm87n72'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n72.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n72.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21718,12 +20084,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n73.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n73'(suite) -> [];
'ibm-not-wf-P87-ibm87n73'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n73.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n73.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21731,12 +20096,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n74.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n74'(suite) -> [];
'ibm-not-wf-P87-ibm87n74'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n74.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n74.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21744,12 +20108,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n75.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n75'(suite) -> [];
'ibm-not-wf-P87-ibm87n75'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n75.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n75.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21757,12 +20120,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n76.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n76'(suite) -> [];
'ibm-not-wf-P87-ibm87n76'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n76.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n76.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21770,12 +20132,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n77.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n77'(suite) -> [];
'ibm-not-wf-P87-ibm87n77'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n77.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n77.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21783,12 +20144,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n78.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n78'(suite) -> [];
'ibm-not-wf-P87-ibm87n78'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n78.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n78.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21796,12 +20156,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n79.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n79'(suite) -> [];
'ibm-not-wf-P87-ibm87n79'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n79.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n79.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21809,12 +20168,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n80.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n80'(suite) -> [];
'ibm-not-wf-P87-ibm87n80'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n80.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n80.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21822,12 +20180,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n81.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n81'(suite) -> [];
'ibm-not-wf-P87-ibm87n81'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n81.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n81.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21835,12 +20192,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n82.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n82'(suite) -> [];
'ibm-not-wf-P87-ibm87n82'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n82.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n82.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21848,12 +20204,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n83.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n83'(suite) -> [];
'ibm-not-wf-P87-ibm87n83'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n83.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n83.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21861,12 +20216,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n84.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n84'(suite) -> [];
'ibm-not-wf-P87-ibm87n84'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n84.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n84.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21874,12 +20228,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P87-ibm87n85.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P87-ibm87n85'(suite) -> [];
'ibm-not-wf-P87-ibm87n85'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n85.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P87/ibm87n85.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -21892,12 +20245,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n01.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n01'(suite) -> [];
'ibm-not-wf-P88-ibm88n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21905,12 +20257,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n02.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n02'(suite) -> [];
'ibm-not-wf-P88-ibm88n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21918,12 +20269,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n03.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n03'(suite) -> [];
'ibm-not-wf-P88-ibm88n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21931,12 +20281,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n04.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n04'(suite) -> [];
'ibm-not-wf-P88-ibm88n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21944,12 +20293,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n05.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n05'(suite) -> [];
'ibm-not-wf-P88-ibm88n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21957,12 +20305,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n06.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n06'(suite) -> [];
'ibm-not-wf-P88-ibm88n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21970,12 +20317,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n08.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n08'(suite) -> [];
'ibm-not-wf-P88-ibm88n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21983,12 +20329,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n09.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n09'(suite) -> [];
'ibm-not-wf-P88-ibm88n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -21996,12 +20341,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n10.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n10'(suite) -> [];
'ibm-not-wf-P88-ibm88n10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22009,12 +20353,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n11.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n11'(suite) -> [];
'ibm-not-wf-P88-ibm88n11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22022,12 +20365,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n12.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n12'(suite) -> [];
'ibm-not-wf-P88-ibm88n12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22035,12 +20377,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n13.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n13'(suite) -> [];
'ibm-not-wf-P88-ibm88n13'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n13.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n13.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22048,12 +20389,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n14.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n14'(suite) -> [];
'ibm-not-wf-P88-ibm88n14'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n14.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n14.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22061,12 +20401,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n15.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n15'(suite) -> [];
'ibm-not-wf-P88-ibm88n15'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n15.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n15.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22074,12 +20413,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P88-ibm88n16.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P88-ibm88n16'(suite) -> [];
'ibm-not-wf-P88-ibm88n16'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n16.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P88/ibm88n16.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22092,12 +20430,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n01.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n01'(suite) -> [];
'ibm-not-wf-P89-ibm89n01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22105,12 +20442,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n02.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n02'(suite) -> [];
'ibm-not-wf-P89-ibm89n02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22118,12 +20454,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n03.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n03'(suite) -> [];
'ibm-not-wf-P89-ibm89n03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22131,12 +20466,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n04.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n04'(suite) -> [];
'ibm-not-wf-P89-ibm89n04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22144,12 +20478,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n05.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n05'(suite) -> [];
'ibm-not-wf-P89-ibm89n05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22157,12 +20490,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n06.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n06'(suite) -> [];
'ibm-not-wf-P89-ibm89n06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22170,12 +20502,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n07.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n07'(suite) -> [];
'ibm-not-wf-P89-ibm89n07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22183,12 +20514,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n08.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n08'(suite) -> [];
'ibm-not-wf-P89-ibm89n08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22196,12 +20526,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n09.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n09'(suite) -> [];
'ibm-not-wf-P89-ibm89n09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22209,12 +20538,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n10.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n10'(suite) -> [];
'ibm-not-wf-P89-ibm89n10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22222,12 +20550,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n11.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n11'(suite) -> [];
'ibm-not-wf-P89-ibm89n11'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n11.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n11.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Case
@@ -22235,12 +20562,11 @@ testcases68(suite) -> [].
%% ID: ibm-not-wf-P89-ibm89n12.xml
%% Type: not-wf
%% Sections: B.
-'ibm-not-wf-P89-ibm89n12'(suite) -> [];
'ibm-not-wf-P89-ibm89n12'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n12.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "not-wf").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","not-wf/P89/ibm89n12.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "not-wf").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22258,12 +20584,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P01-ibm01v01.xml
%% Type: valid
%% Sections: 2.1
-'ibm-valid-P01-ibm01v01'(suite) -> [];
'ibm-valid-P01-ibm01v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P01/ibm01v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P01/ibm01v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22276,12 +20601,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P02-ibm02v01.xml
%% Type: valid
%% Sections: 2.2
-'ibm-valid-P02-ibm02v01'(suite) -> [];
'ibm-valid-P02-ibm02v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P02/ibm02v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P02/ibm02v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22294,12 +20618,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P03-ibm03v01.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P03-ibm03v01'(suite) -> [];
'ibm-valid-P03-ibm03v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P03/ibm03v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P03/ibm03v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22312,12 +20635,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P09-ibm09v01.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P09-ibm09v01'(suite) -> [];
'ibm-valid-P09-ibm09v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22325,12 +20647,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P09-ibm09v02.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P09-ibm09v02'(suite) -> [];
'ibm-valid-P09-ibm09v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22338,12 +20659,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P09-ibm09v03.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P09-ibm09v03'(suite) -> [];
'ibm-valid-P09-ibm09v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22351,12 +20671,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P09-ibm09v04.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P09-ibm09v04'(suite) -> [];
'ibm-valid-P09-ibm09v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22364,12 +20683,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P09-ibm09v05.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P09-ibm09v05'(suite) -> [];
'ibm-valid-P09-ibm09v05'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v05.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P09/ibm09v05.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22382,12 +20700,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P10-ibm10v01.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P10-ibm10v01'(suite) -> [];
'ibm-valid-P10-ibm10v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22395,12 +20712,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P10-ibm10v02.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P10-ibm10v02'(suite) -> [];
'ibm-valid-P10-ibm10v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22408,12 +20724,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P10-ibm10v03.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P10-ibm10v03'(suite) -> [];
'ibm-valid-P10-ibm10v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22421,12 +20736,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P10-ibm10v04.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P10-ibm10v04'(suite) -> [];
'ibm-valid-P10-ibm10v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22434,12 +20748,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P10-ibm10v05.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P10-ibm10v05'(suite) -> [];
'ibm-valid-P10-ibm10v05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22447,12 +20760,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P10-ibm10v06.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P10-ibm10v06'(suite) -> [];
'ibm-valid-P10-ibm10v06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22460,12 +20772,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P10-ibm10v07.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P10-ibm10v07'(suite) -> [];
'ibm-valid-P10-ibm10v07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22473,12 +20784,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P10-ibm10v08.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P10-ibm10v08'(suite) -> [];
'ibm-valid-P10-ibm10v08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P10/ibm10v08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22491,12 +20801,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P11-ibm11v01.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P11-ibm11v01'(suite) -> [];
'ibm-valid-P11-ibm11v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P11/ibm11v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P11/ibm11v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22504,12 +20813,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P11-ibm11v02.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P11-ibm11v02'(suite) -> [];
'ibm-valid-P11-ibm11v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P11/ibm11v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P11/ibm11v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22517,12 +20825,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P11-ibm11v03.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P11-ibm11v03'(suite) -> [];
'ibm-valid-P11-ibm11v03'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P11/ibm11v03.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P11/ibm11v03.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22530,12 +20837,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P11-ibm11v04.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P11-ibm11v04'(suite) -> [];
'ibm-valid-P11-ibm11v04'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P11/ibm11v04.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P11/ibm11v04.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22548,12 +20854,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P12-ibm12v01.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P12-ibm12v01'(suite) -> [];
'ibm-valid-P12-ibm12v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P12/ibm12v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P12/ibm12v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22561,12 +20866,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P12-ibm12v02.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P12-ibm12v02'(suite) -> [];
'ibm-valid-P12-ibm12v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P12/ibm12v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P12/ibm12v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22574,12 +20878,11 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P12-ibm12v03.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P12-ibm12v03'(suite) -> [];
'ibm-valid-P12-ibm12v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P12/ibm12v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P12/ibm12v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22587,18 +20890,16 @@ testcases68(suite) -> [].
%% ID: ibm-valid-P12-ibm12v04.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P12-ibm12v04'(suite) -> [];
'ibm-valid-P12-ibm12v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P12/ibm12v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P12/ibm12v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 12
-testcases111(suite) -> [].
%% ['ibm-valid-P12-ibm12v01','ibm-valid-P12-ibm12v02','ibm-valid-P12-ibm12v03','ibm-valid-P12-ibm12v04'].
%%----------------------------------------------------------------------
@@ -22607,18 +20908,16 @@ testcases111(suite) -> [].
%% ID: ibm-valid-P13-ibm13v01.xml
%% Type: valid
%% Sections: 2.3
-'ibm-valid-P13-ibm13v01'(suite) -> [];
'ibm-valid-P13-ibm13v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P13/ibm13v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P13/ibm13v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 13
-testcases112(suite) -> [].
%% ['ibm-valid-P13-ibm13v01'].
%%----------------------------------------------------------------------
@@ -22627,12 +20926,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P14-ibm14v01.xml
%% Type: valid
%% Sections: 2.4
-'ibm-valid-P14-ibm14v01'(suite) -> [];
'ibm-valid-P14-ibm14v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P14/ibm14v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P14/ibm14v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22640,12 +20938,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P14-ibm14v02.xml
%% Type: valid
%% Sections: 2.4
-'ibm-valid-P14-ibm14v02'(suite) -> [];
'ibm-valid-P14-ibm14v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P14/ibm14v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P14/ibm14v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22653,12 +20950,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P14-ibm14v03.xml
%% Type: valid
%% Sections: 2.4
-'ibm-valid-P14-ibm14v03'(suite) -> [];
'ibm-valid-P14-ibm14v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P14/ibm14v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P14/ibm14v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22671,12 +20967,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P15-ibm15v01.xml
%% Type: valid
%% Sections: 2.5
-'ibm-valid-P15-ibm15v01'(suite) -> [];
'ibm-valid-P15-ibm15v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P15/ibm15v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P15/ibm15v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22684,12 +20979,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P15-ibm15v02.xml
%% Type: valid
%% Sections: 2.5
-'ibm-valid-P15-ibm15v02'(suite) -> [];
'ibm-valid-P15-ibm15v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P15/ibm15v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P15/ibm15v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22697,12 +20991,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P15-ibm15v03.xml
%% Type: valid
%% Sections: 2.5
-'ibm-valid-P15-ibm15v03'(suite) -> [];
'ibm-valid-P15-ibm15v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P15/ibm15v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P15/ibm15v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22710,12 +21003,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P15-ibm15v04.xml
%% Type: valid
%% Sections: 2.5
-'ibm-valid-P15-ibm15v04'(suite) -> [];
'ibm-valid-P15-ibm15v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P15/ibm15v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P15/ibm15v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22728,12 +21020,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P16-ibm16v01.xml
%% Type: valid
%% Sections: 2.6
-'ibm-valid-P16-ibm16v01'(suite) -> [];
'ibm-valid-P16-ibm16v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P16/ibm16v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P16/ibm16v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22741,12 +21032,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P16-ibm16v02.xml
%% Type: valid
%% Sections: 2.6
-'ibm-valid-P16-ibm16v02'(suite) -> [];
'ibm-valid-P16-ibm16v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P16/ibm16v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P16/ibm16v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22754,12 +21044,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P16-ibm16v03.xml
%% Type: valid
%% Sections: 2.6
-'ibm-valid-P16-ibm16v03'(suite) -> [];
'ibm-valid-P16-ibm16v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P16/ibm16v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P16/ibm16v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22772,12 +21061,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P17-ibm17v01.xml
%% Type: valid
%% Sections: 2.6
-'ibm-valid-P17-ibm17v01'(suite) -> [];
'ibm-valid-P17-ibm17v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P17/ibm17v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P17/ibm17v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22790,12 +21078,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P18-ibm18v01.xml
%% Type: valid
%% Sections: 2.7
-'ibm-valid-P18-ibm18v01'(suite) -> [];
'ibm-valid-P18-ibm18v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P18/ibm18v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P18/ibm18v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22808,12 +21095,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P19-ibm19v01.xml
%% Type: valid
%% Sections: 2.7
-'ibm-valid-P19-ibm19v01'(suite) -> [];
'ibm-valid-P19-ibm19v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P19/ibm19v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P19/ibm19v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22826,12 +21112,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P20-ibm20v01.xml
%% Type: valid
%% Sections: 2.7
-'ibm-valid-P20-ibm20v01'(suite) -> [];
'ibm-valid-P20-ibm20v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P20/ibm20v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P20/ibm20v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22839,12 +21124,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P20-ibm20v02.xml
%% Type: valid
%% Sections: 2.7
-'ibm-valid-P20-ibm20v02'(suite) -> [];
'ibm-valid-P20-ibm20v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P20/ibm20v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P20/ibm20v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22857,12 +21141,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P21-ibm21v01.xml
%% Type: valid
%% Sections: 2.7
-'ibm-valid-P21-ibm21v01'(suite) -> [];
'ibm-valid-P21-ibm21v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P21/ibm21v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P21/ibm21v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22875,12 +21158,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P22-ibm22v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P22-ibm22v01'(suite) -> [];
'ibm-valid-P22-ibm22v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22888,12 +21170,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P22-ibm22v02.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P22-ibm22v02'(suite) -> [];
'ibm-valid-P22-ibm22v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22901,12 +21182,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P22-ibm22v03.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P22-ibm22v03'(suite) -> [];
'ibm-valid-P22-ibm22v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22914,12 +21194,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P22-ibm22v04.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P22-ibm22v04'(suite) -> [];
'ibm-valid-P22-ibm22v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22927,12 +21206,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P22-ibm22v05.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P22-ibm22v05'(suite) -> [];
'ibm-valid-P22-ibm22v05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22940,12 +21218,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P22-ibm22v06.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P22-ibm22v06'(suite) -> [];
'ibm-valid-P22-ibm22v06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22953,12 +21230,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P22-ibm22v07.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P22-ibm22v07'(suite) -> [];
'ibm-valid-P22-ibm22v07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P22/ibm22v07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -22971,12 +21247,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P23-ibm23v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P23-ibm23v01'(suite) -> [];
'ibm-valid-P23-ibm23v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22984,12 +21259,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P23-ibm23v02.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P23-ibm23v02'(suite) -> [];
'ibm-valid-P23-ibm23v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -22997,12 +21271,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P23-ibm23v03.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P23-ibm23v03'(suite) -> [];
'ibm-valid-P23-ibm23v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23010,12 +21283,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P23-ibm23v04.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P23-ibm23v04'(suite) -> [];
'ibm-valid-P23-ibm23v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23023,12 +21295,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P23-ibm23v05.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P23-ibm23v05'(suite) -> [];
'ibm-valid-P23-ibm23v05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23036,12 +21307,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P23-ibm23v06.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P23-ibm23v06'(suite) -> [];
'ibm-valid-P23-ibm23v06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P23/ibm23v06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23054,12 +21324,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P24-ibm24v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P24-ibm24v01'(suite) -> [];
'ibm-valid-P24-ibm24v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P24/ibm24v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P24/ibm24v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23067,12 +21336,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P24-ibm24v02.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P24-ibm24v02'(suite) -> [];
'ibm-valid-P24-ibm24v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P24/ibm24v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P24/ibm24v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23085,12 +21353,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P25-ibm25v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P25-ibm25v01'(suite) -> [];
'ibm-valid-P25-ibm25v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P25/ibm25v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P25/ibm25v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23098,12 +21365,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P25-ibm25v02.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P25-ibm25v02'(suite) -> [];
'ibm-valid-P25-ibm25v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P25/ibm25v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P25/ibm25v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23111,12 +21377,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P25-ibm25v03.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P25-ibm25v03'(suite) -> [];
'ibm-valid-P25-ibm25v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P25/ibm25v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P25/ibm25v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23124,12 +21389,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P25-ibm25v04.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P25-ibm25v04'(suite) -> [];
'ibm-valid-P25-ibm25v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P25/ibm25v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P25/ibm25v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23142,12 +21406,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P26-ibm26v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P26-ibm26v01'(suite) -> [];
'ibm-valid-P26-ibm26v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P26/ibm26v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P26/ibm26v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23160,12 +21423,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P27-ibm27v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P27-ibm27v01'(suite) -> [];
'ibm-valid-P27-ibm27v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P27/ibm27v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P27/ibm27v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23173,12 +21435,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P27-ibm27v02.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P27-ibm27v02'(suite) -> [];
'ibm-valid-P27-ibm27v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P27/ibm27v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P27/ibm27v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23186,12 +21447,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P27-ibm27v03.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P27-ibm27v03'(suite) -> [];
'ibm-valid-P27-ibm27v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P27/ibm27v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P27/ibm27v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23204,12 +21464,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P28-ibm28v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P28-ibm28v01'(suite) -> [];
'ibm-valid-P28-ibm28v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P28/ibm28v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P28/ibm28v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23217,12 +21476,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P28-ibm28v02.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P28-ibm28v02'(suite) -> [];
'ibm-valid-P28-ibm28v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P28/ibm28v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P28/ibm28v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23235,12 +21493,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P29-ibm29v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P29-ibm29v01'(suite) -> [];
'ibm-valid-P29-ibm29v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P29/ibm29v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P29/ibm29v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23248,12 +21505,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P29-ibm29v02.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P29-ibm29v02'(suite) -> [];
'ibm-valid-P29-ibm29v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P29/ibm29v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P29/ibm29v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23266,12 +21522,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P30-ibm30v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P30-ibm30v01'(suite) -> [];
'ibm-valid-P30-ibm30v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P30/ibm30v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P30/ibm30v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23279,12 +21534,11 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P30-ibm30v02.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P30-ibm30v02'(suite) -> [];
'ibm-valid-P30-ibm30v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P30/ibm30v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P30/ibm30v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23297,18 +21551,16 @@ testcases112(suite) -> [].
%% ID: ibm-valid-P31-ibm31v01.xml
%% Type: valid
%% Sections: 2.8
-'ibm-valid-P31-ibm31v01'(suite) -> [];
'ibm-valid-P31-ibm31v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P31/ibm31v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P31/ibm31v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 31
-testcases130(suite) -> [].
%% ['ibm-valid-P31-ibm31v01'].
%%----------------------------------------------------------------------
@@ -23317,12 +21569,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P32-ibm32v01.xml
%% Type: valid
%% Sections: 2.9
-'ibm-valid-P32-ibm32v01'(suite) -> [];
'ibm-valid-P32-ibm32v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P32/ibm32v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P32/ibm32v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23330,12 +21581,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P32-ibm32v02.xml
%% Type: valid
%% Sections: 2.9
-'ibm-valid-P32-ibm32v02'(suite) -> [];
'ibm-valid-P32-ibm32v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P32/ibm32v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P32/ibm32v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23343,12 +21593,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P32-ibm32v03.xml
%% Type: valid
%% Sections: 2.9
-'ibm-valid-P32-ibm32v03'(suite) -> [];
'ibm-valid-P32-ibm32v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P32/ibm32v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P32/ibm32v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23356,12 +21605,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P32-ibm32v04.xml
%% Type: valid
%% Sections: 2.9
-'ibm-valid-P32-ibm32v04'(suite) -> [];
'ibm-valid-P32-ibm32v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P32/ibm32v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P32/ibm32v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23374,12 +21622,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P33-ibm33v01.xml
%% Type: valid
%% Sections: 2.12
-'ibm-valid-P33-ibm33v01'(suite) -> [];
'ibm-valid-P33-ibm33v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P33/ibm33v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P33/ibm33v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23392,12 +21639,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P34-ibm34v01.xml
%% Type: valid
%% Sections: 2.12
-'ibm-valid-P34-ibm34v01'(suite) -> [];
'ibm-valid-P34-ibm34v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P34/ibm34v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P34/ibm34v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23410,12 +21656,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P35-ibm35v01.xml
%% Type: valid
%% Sections: 2.12
-'ibm-valid-P35-ibm35v01'(suite) -> [];
'ibm-valid-P35-ibm35v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P35/ibm35v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P35/ibm35v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23428,12 +21673,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P36-ibm36v01.xml
%% Type: valid
%% Sections: 2.12
-'ibm-valid-P36-ibm36v01'(suite) -> [];
'ibm-valid-P36-ibm36v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P36/ibm36v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P36/ibm36v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23446,12 +21690,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P37-ibm37v01.xml
%% Type: valid
%% Sections: 2.12
-'ibm-valid-P37-ibm37v01'(suite) -> [];
'ibm-valid-P37-ibm37v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P37/ibm37v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P37/ibm37v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23464,12 +21707,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P38-ibm38v01.xml
%% Type: valid
%% Sections: 2.12
-'ibm-valid-P38-ibm38v01'(suite) -> [];
'ibm-valid-P38-ibm38v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P38/ibm38v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P38/ibm38v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23482,12 +21724,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P39-ibm39v01.xml
%% Type: valid
%% Sections: 3
-'ibm-valid-P39-ibm39v01'(suite) -> [];
'ibm-valid-P39-ibm39v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P39/ibm39v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P39/ibm39v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23500,12 +21741,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P40-ibm40v01.xml
%% Type: valid
%% Sections: 3.1
-'ibm-valid-P40-ibm40v01'(suite) -> [];
'ibm-valid-P40-ibm40v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P40/ibm40v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P40/ibm40v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23518,12 +21758,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P41-ibm41v01.xml
%% Type: valid
%% Sections: 3.1
-'ibm-valid-P41-ibm41v01'(suite) -> [];
'ibm-valid-P41-ibm41v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P41/ibm41v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P41/ibm41v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23536,12 +21775,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P42-ibm42v01.xml
%% Type: valid
%% Sections: 3.1
-'ibm-valid-P42-ibm42v01'(suite) -> [];
'ibm-valid-P42-ibm42v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P42/ibm42v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P42/ibm42v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23554,12 +21792,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P43-ibm43v01.xml
%% Type: valid
%% Sections: 3.1
-'ibm-valid-P43-ibm43v01'(suite) -> [];
'ibm-valid-P43-ibm43v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P43/ibm43v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P43/ibm43v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23572,12 +21809,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P44-ibm44v01.xml
%% Type: valid
%% Sections: 3.1
-'ibm-valid-P44-ibm44v01'(suite) -> [];
'ibm-valid-P44-ibm44v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P44/ibm44v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P44/ibm44v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23590,12 +21826,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P45-ibm45v01.xml
%% Type: valid
%% Sections: 3.2
-'ibm-valid-P45-ibm45v01'(suite) -> [];
'ibm-valid-P45-ibm45v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P45/ibm45v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P45/ibm45v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23608,12 +21843,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P47-ibm47v01.xml
%% Type: valid
%% Sections: 3.2.1
-'ibm-valid-P47-ibm47v01'(suite) -> [];
'ibm-valid-P47-ibm47v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P47/ibm47v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P47/ibm47v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23626,12 +21860,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P49-ibm49v01.xml
%% Type: valid
%% Sections: 3.2.1
-'ibm-valid-P49-ibm49v01'(suite) -> [];
'ibm-valid-P49-ibm49v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P49/ibm49v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P49/ibm49v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23644,12 +21877,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P50-ibm50v01.xml
%% Type: valid
%% Sections: 3.2.1
-'ibm-valid-P50-ibm50v01'(suite) -> [];
'ibm-valid-P50-ibm50v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P50/ibm50v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P50/ibm50v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23662,12 +21894,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P51-ibm51v01.xml
%% Type: valid
%% Sections: 3.2.2
-'ibm-valid-P51-ibm51v01'(suite) -> [];
'ibm-valid-P51-ibm51v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P51/ibm51v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P51/ibm51v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23675,12 +21906,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P51-ibm51v02.xml
%% Type: valid
%% Sections: 3.2.2
-'ibm-valid-P51-ibm51v02'(suite) -> [];
'ibm-valid-P51-ibm51v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P51/ibm51v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P51/ibm51v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23693,12 +21923,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P52-ibm52v01.xml
%% Type: valid
%% Sections: 3.3
-'ibm-valid-P52-ibm52v01'(suite) -> [];
'ibm-valid-P52-ibm52v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P52/ibm52v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P52/ibm52v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23711,12 +21940,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P54-ibm54v01.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P54-ibm54v01'(suite) -> [];
'ibm-valid-P54-ibm54v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P54/ibm54v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P54/ibm54v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23724,12 +21952,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P54-ibm54v02.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P54-ibm54v02'(suite) -> [];
'ibm-valid-P54-ibm54v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P54/ibm54v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P54/ibm54v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23737,12 +21964,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P54-ibm54v03.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P54-ibm54v03'(suite) -> [];
'ibm-valid-P54-ibm54v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P54/ibm54v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P54/ibm54v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23755,12 +21981,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P55-ibm55v01.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P55-ibm55v01'(suite) -> [];
'ibm-valid-P55-ibm55v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P55/ibm55v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P55/ibm55v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23773,12 +21998,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v01.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v01'(suite) -> [];
'ibm-valid-P56-ibm56v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23786,12 +22010,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v02.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v02'(suite) -> [];
'ibm-valid-P56-ibm56v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23799,12 +22022,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v03.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v03'(suite) -> [];
'ibm-valid-P56-ibm56v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23812,12 +22034,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v04.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v04'(suite) -> [];
'ibm-valid-P56-ibm56v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23825,12 +22046,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v05.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v05'(suite) -> [];
'ibm-valid-P56-ibm56v05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23838,12 +22058,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v06.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v06'(suite) -> [];
'ibm-valid-P56-ibm56v06'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v06.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v06.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23851,12 +22070,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v07.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v07'(suite) -> [];
'ibm-valid-P56-ibm56v07'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v07.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v07.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23864,12 +22082,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v08.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v08'(suite) -> [];
'ibm-valid-P56-ibm56v08'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v08.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v08.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23877,12 +22094,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v09.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v09'(suite) -> [];
'ibm-valid-P56-ibm56v09'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v09.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v09.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23890,12 +22106,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P56-ibm56v10.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P56-ibm56v10'(suite) -> [];
'ibm-valid-P56-ibm56v10'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v10.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P56/ibm56v10.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23908,12 +22123,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P57-ibm57v01.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P57-ibm57v01'(suite) -> [];
'ibm-valid-P57-ibm57v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P57/ibm57v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P57/ibm57v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23926,12 +22140,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P58-ibm58v01.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P58-ibm58v01'(suite) -> [];
'ibm-valid-P58-ibm58v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P58/ibm58v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P58/ibm58v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23939,12 +22152,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P58-ibm58v02.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P58-ibm58v02'(suite) -> [];
'ibm-valid-P58-ibm58v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P58/ibm58v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P58/ibm58v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23957,12 +22169,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P59-ibm59v01.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P59-ibm59v01'(suite) -> [];
'ibm-valid-P59-ibm59v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P59/ibm59v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P59/ibm59v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -23970,12 +22181,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P59-ibm59v02.xml
%% Type: valid
%% Sections: 3.3.1
-'ibm-valid-P59-ibm59v02'(suite) -> [];
'ibm-valid-P59-ibm59v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P59/ibm59v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P59/ibm59v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -23988,12 +22198,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P60-ibm60v01.xml
%% Type: valid
%% Sections: 3.3.2
-'ibm-valid-P60-ibm60v01'(suite) -> [];
'ibm-valid-P60-ibm60v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P60/ibm60v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P60/ibm60v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24001,12 +22210,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P60-ibm60v02.xml
%% Type: valid
%% Sections: 3.3.2
-'ibm-valid-P60-ibm60v02'(suite) -> [];
'ibm-valid-P60-ibm60v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P60/ibm60v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P60/ibm60v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24014,12 +22222,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P60-ibm60v03.xml
%% Type: valid
%% Sections: 3.3.2
-'ibm-valid-P60-ibm60v03'(suite) -> [];
'ibm-valid-P60-ibm60v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P60/ibm60v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P60/ibm60v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24027,12 +22234,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P60-ibm60v04.xml
%% Type: valid
%% Sections: 3.3.2
-'ibm-valid-P60-ibm60v04'(suite) -> [];
'ibm-valid-P60-ibm60v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P60/ibm60v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P60/ibm60v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24045,12 +22251,11 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P61-ibm61v01.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P61-ibm61v01'(suite) -> [];
'ibm-valid-P61-ibm61v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P61/ibm61v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P61/ibm61v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24058,18 +22263,16 @@ testcases130(suite) -> [].
%% ID: ibm-valid-P61-ibm61v02.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P61-ibm61v02'(suite) -> [];
'ibm-valid-P61-ibm61v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P61/ibm61v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P61/ibm61v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 61
-testcases157(suite) -> [].
%% ['ibm-valid-P61-ibm61v01','ibm-valid-P61-ibm61v02'].
%%----------------------------------------------------------------------
@@ -24078,12 +22281,11 @@ testcases157(suite) -> [].
%% ID: ibm-valid-P62-ibm62v01.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P62-ibm62v01'(suite) -> [];
'ibm-valid-P62-ibm62v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24091,12 +22293,11 @@ testcases157(suite) -> [].
%% ID: ibm-valid-P62-ibm62v02.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P62-ibm62v02'(suite) -> [];
'ibm-valid-P62-ibm62v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24104,12 +22305,11 @@ testcases157(suite) -> [].
%% ID: ibm-valid-P62-ibm62v03.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P62-ibm62v03'(suite) -> [];
'ibm-valid-P62-ibm62v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24117,12 +22317,11 @@ testcases157(suite) -> [].
%% ID: ibm-valid-P62-ibm62v04.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P62-ibm62v04'(suite) -> [];
'ibm-valid-P62-ibm62v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24130,18 +22329,16 @@ testcases157(suite) -> [].
%% ID: ibm-valid-P62-ibm62v05.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P62-ibm62v05'(suite) -> [];
'ibm-valid-P62-ibm62v05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P62/ibm62v05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 62
-testcases158(suite) -> [].
%% ['ibm-valid-P62-ibm62v01','ibm-valid-P62-ibm62v02','ibm-valid-P62-ibm62v03','ibm-valid-P62-ibm62v04','ibm-valid-P62-ibm62v05'].
%%----------------------------------------------------------------------
@@ -24150,12 +22347,11 @@ testcases158(suite) -> [].
%% ID: ibm-valid-P63-ibm63v01.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P63-ibm63v01'(suite) -> [];
'ibm-valid-P63-ibm63v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24163,12 +22359,11 @@ testcases158(suite) -> [].
%% ID: ibm-valid-P63-ibm63v02.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P63-ibm63v02'(suite) -> [];
'ibm-valid-P63-ibm63v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24176,12 +22371,11 @@ testcases158(suite) -> [].
%% ID: ibm-valid-P63-ibm63v03.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P63-ibm63v03'(suite) -> [];
'ibm-valid-P63-ibm63v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24189,12 +22383,11 @@ testcases158(suite) -> [].
%% ID: ibm-valid-P63-ibm63v04.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P63-ibm63v04'(suite) -> [];
'ibm-valid-P63-ibm63v04'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v04.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v04.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24202,18 +22395,16 @@ testcases158(suite) -> [].
%% ID: ibm-valid-P63-ibm63v05.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P63-ibm63v05'(suite) -> [];
'ibm-valid-P63-ibm63v05'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v05.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P63/ibm63v05.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 63
-testcases159(suite) -> [].
%% ['ibm-valid-P63-ibm63v01','ibm-valid-P63-ibm63v02','ibm-valid-P63-ibm63v03','ibm-valid-P63-ibm63v04','ibm-valid-P63-ibm63v05'].
%%----------------------------------------------------------------------
@@ -24222,12 +22413,11 @@ testcases159(suite) -> [].
%% ID: ibm-valid-P64-ibm64v01.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P64-ibm64v01'(suite) -> [];
'ibm-valid-P64-ibm64v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P64/ibm64v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P64/ibm64v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24235,12 +22425,11 @@ testcases159(suite) -> [].
%% ID: ibm-valid-P64-ibm64v02.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P64-ibm64v02'(suite) -> [];
'ibm-valid-P64-ibm64v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P64/ibm64v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P64/ibm64v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24248,18 +22437,16 @@ testcases159(suite) -> [].
%% ID: ibm-valid-P64-ibm64v03.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P64-ibm64v03'(suite) -> [];
'ibm-valid-P64-ibm64v03'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P64/ibm64v03.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P64/ibm64v03.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 64
-testcases160(suite) -> [].
%% ['ibm-valid-P64-ibm64v01','ibm-valid-P64-ibm64v02','ibm-valid-P64-ibm64v03'].
%%----------------------------------------------------------------------
@@ -24268,12 +22455,11 @@ testcases160(suite) -> [].
%% ID: ibm-valid-P65-ibm65v01.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P65-ibm65v01'(suite) -> [];
'ibm-valid-P65-ibm65v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P65/ibm65v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P65/ibm65v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24281,18 +22467,16 @@ testcases160(suite) -> [].
%% ID: ibm-valid-P65-ibm65v02.xml
%% Type: valid
%% Sections: 3.4
-'ibm-valid-P65-ibm65v02'(suite) -> [];
'ibm-valid-P65-ibm65v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P65/ibm65v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P65/ibm65v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 65
-testcases161(suite) -> [].
%% ['ibm-valid-P65-ibm65v01','ibm-valid-P65-ibm65v02'].
%%----------------------------------------------------------------------
@@ -24301,12 +22485,11 @@ testcases161(suite) -> [].
%% ID: ibm-valid-P66-ibm66v01.xml
%% Type: valid
%% Sections: 4.1
-'ibm-valid-P66-ibm66v01'(suite) -> [];
'ibm-valid-P66-ibm66v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P66/ibm66v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P66/ibm66v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24319,12 +22502,11 @@ testcases161(suite) -> [].
%% ID: ibm-valid-P67-ibm67v01.xml
%% Type: valid
%% Sections: 4.1
-'ibm-valid-P67-ibm67v01'(suite) -> [];
'ibm-valid-P67-ibm67v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P67/ibm67v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P67/ibm67v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24337,12 +22519,11 @@ testcases161(suite) -> [].
%% ID: ibm-valid-P68-ibm68v01.xml
%% Type: valid
%% Sections: 4.1
-'ibm-valid-P68-ibm68v01'(suite) -> [];
'ibm-valid-P68-ibm68v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P68/ibm68v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P68/ibm68v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24350,12 +22531,11 @@ testcases161(suite) -> [].
%% ID: ibm-valid-P68-ibm68v02.xml
%% Type: valid
%% Sections: 4.1
-'ibm-valid-P68-ibm68v02'(suite) -> [];
'ibm-valid-P68-ibm68v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P68/ibm68v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P68/ibm68v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24368,12 +22548,11 @@ testcases161(suite) -> [].
%% ID: ibm-valid-P69-ibm69v01.xml
%% Type: valid
%% Sections: 4.1
-'ibm-valid-P69-ibm69v01'(suite) -> [];
'ibm-valid-P69-ibm69v01'(_Config) -> {skip, "NYI"}.
-%% ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
-%% ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P69/ibm69v01.xml"]),
-%% ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
-%% ?line check_result(R, "valid").
+%% file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+%% Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P69/ibm69v01.xml"]),
+%% R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+%% check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Case
@@ -24381,12 +22560,11 @@ testcases161(suite) -> [].
%% ID: ibm-valid-P69-ibm69v02.xml
%% Type: valid
%% Sections: 4.1
-'ibm-valid-P69-ibm69v02'(suite) -> [];
'ibm-valid-P69-ibm69v02'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P69/ibm69v02.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P69/ibm69v02.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24399,12 +22577,11 @@ testcases161(suite) -> [].
%% ID: ibm-valid-P70-ibm70v01.xml
%% Type: valid
%% Sections: 4.2
-'ibm-valid-P70-ibm70v01'(suite) -> [];
'ibm-valid-P70-ibm70v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P70/ibm70v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P70/ibm70v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24417,18 +22594,16 @@ testcases161(suite) -> [].
%% ID: ibm-valid-P78-ibm78v01.xml
%% Type: valid
%% Sections: 4.3.2
-'ibm-valid-P78-ibm78v01'(suite) -> [];
'ibm-valid-P78-ibm78v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P78/ibm78v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P78/ibm78v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 78
-testcases167(suite) -> [].
%% ['ibm-valid-P78-ibm78v01'].
%%----------------------------------------------------------------------
@@ -24437,12 +22612,11 @@ testcases167(suite) -> [].
%% ID: ibm-valid-P79-ibm79v01.xml
%% Type: valid
%% Sections: 4.3.2
-'ibm-valid-P79-ibm79v01'(suite) -> [];
'ibm-valid-P79-ibm79v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P79/ibm79v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P79/ibm79v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24455,12 +22629,11 @@ testcases167(suite) -> [].
%% ID: ibm-valid-P82-ibm82v01.xml
%% Type: valid
%% Sections: 4.7
-'ibm-valid-P82-ibm82v01'(suite) -> [];
'ibm-valid-P82-ibm82v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P82/ibm82v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P82/ibm82v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24473,18 +22646,16 @@ testcases167(suite) -> [].
%% ID: ibm-valid-P85-ibm85v01.xml
%% Type: valid
%% Sections: B.
-'ibm-valid-P85-ibm85v01'(suite) -> [];
'ibm-valid-P85-ibm85v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P85/ibm85v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P85/ibm85v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
%% Profile: IBM XML Conformance Test Suite - Production 85
-testcases170(suite) -> [].
%% ['ibm-valid-P85-ibm85v01'].
%%----------------------------------------------------------------------
@@ -24493,12 +22664,11 @@ testcases170(suite) -> [].
%% ID: ibm-valid-P86-ibm86v01.xml
%% Type: valid
%% Sections: B.
-'ibm-valid-P86-ibm86v01'(suite) -> [];
'ibm-valid-P86-ibm86v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P86/ibm86v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P86/ibm86v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24511,12 +22681,11 @@ testcases170(suite) -> [].
%% ID: ibm-valid-P87-ibm87v01.xml
%% Type: valid
%% Sections: B.
-'ibm-valid-P87-ibm87v01'(suite) -> [];
'ibm-valid-P87-ibm87v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P87/ibm87v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P87/ibm87v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24529,12 +22698,11 @@ testcases170(suite) -> [].
%% ID: ibm-valid-P88-ibm88v01.xml
%% Type: valid
%% Sections: B.
-'ibm-valid-P88-ibm88v01'(suite) -> [];
'ibm-valid-P88-ibm88v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P88/ibm88v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P88/ibm88v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -24547,12 +22715,11 @@ testcases170(suite) -> [].
%% ID: ibm-valid-P89-ibm89v01.xml
%% Type: valid
%% Sections: B.
-'ibm-valid-P89-ibm89v01'(suite) -> [];
'ibm-valid-P89-ibm89v01'(Config) ->
- ?line file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
- ?line Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P89/ibm89v01.xml"]),
- ?line R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
- ?line check_result(R, "valid").
+ file:set_cwd(xmerl_test_lib:get_data_dir(Config)),
+ Path = filename:join([xmerl_test_lib:get_data_dir(Config),"ibm","valid/P89/ibm89v01.xml"]),
+ R = xmerl_sax_parser:file(Path, [{event_fun, fun(_,_,S) -> S end}]),
+ check_result(R, "valid").
%%----------------------------------------------------------------------
%% Test Cases
@@ -25577,11 +23744,11 @@ end_per_group(_GroupName, Config) ->
%% Dir is a directory
rm_f_(Dir) ->
- ?line {ok,CWD} = file:get_cwd(),
- ?line {ok,FileList} = file:list_dir(Dir),
- ?line file:set_cwd(filename:join([CWD,Dir])),
+ {ok,CWD} = file:get_cwd(),
+ {ok,FileList} = file:list_dir(Dir),
+ file:set_cwd(filename:join([CWD,Dir])),
rm_files(FileList),
- ?line file:set_cwd(CWD),
+ file:set_cwd(CWD),
? line ok = file:del_dir(Dir).
rm_files([])->
@@ -25591,7 +23758,7 @@ rm_files([F|Fs]) ->
true ->
rm_f_(F);
_ ->
- ?line ok = file:delete(F)
+ ok = file:delete(F)
end,
rm_files(Fs).
@@ -25599,11 +23766,11 @@ rm_files([F|Fs]) ->
change_mode(Files) ->
change_mode3(Files).
change_mode2(Dir)->
- ?line {ok,CWD} = file:get_cwd(),
- ?line {ok,FileList} = file:list_dir(Dir),
- ?line file:set_cwd(filename:join([CWD,Dir])),
+ {ok,CWD} = file:get_cwd(),
+ {ok,FileList} = file:list_dir(Dir),
+ file:set_cwd(filename:join([CWD,Dir])),
change_mode3(FileList),
- ?line file:set_cwd(CWD).
+ file:set_cwd(CWD).
change_mode3([]) ->
ok;
change_mode3([F|Fs]) ->
@@ -25625,6 +23792,9 @@ chmod(F) ->
ok
end.
+privdir(Config) ->
+ proplists:get_value(priv_dir, Config).
+
%%----------------------------------------------------------------------
%% check_result
check_result({fatal_error,_,_,_,_}, "error") ->
diff --git a/lib/xmerl/test/xmerl_std_SUITE.erl b/lib/xmerl/test/xmerl_std_SUITE.erl
index ace0fb7cdb..5badfc708c 100644
--- a/lib/xmerl/test/xmerl_std_SUITE.erl
+++ b/lib/xmerl/test/xmerl_std_SUITE.erl
@@ -62,12 +62,8 @@ groups() ->
{japanese_test_cases, [], 'xerox-japanese'(suite)},
{oasis_test_cases, [], 'nist-oasis'(suite)}].
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
+suite() ->
+ [{timetrap,{minutes,10}}].
'sun-valid'(suite) -> %% 28 test cases
@@ -755,10972 +751,9145 @@ end_per_group(_GroupName, Config) ->
%% Initializations
%%----------------------------------------------------------------------
-init_per_suite(doc) ->
- ["Starts the test suite"];
init_per_suite(Config) ->
- Dog=test_server:timetrap({minutes,10}),
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line ok=erl_tar:extract("ibm.tgz",[compressed]),
- ?line ok=erl_tar:extract("japanese.tgz",[compressed]),
- ?line ok=erl_tar:extract("oasis.tgz",[compressed]),
- ?line ok=erl_tar:extract("sun.tgz",[compressed]),
- ?line ok=erl_tar:extract("xmltest.tgz",[compressed]),
- ?line ok = change_mode(["ibm","japanese","oasis",
- "sun","xmltest"]),
- [{watchdog, Dog}|Config].
-
+ file:set_cwd(datadir(Config)),
+ ok = erl_tar:extract("ibm.tgz",[compressed]),
+ ok = erl_tar:extract("japanese.tgz",[compressed]),
+ ok = erl_tar:extract("oasis.tgz",[compressed]),
+ ok = erl_tar:extract("sun.tgz",[compressed]),
+ ok = erl_tar:extract("xmltest.tgz",[compressed]),
+ ok = change_mode(["ibm","japanese","oasis",
+ "sun","xmltest"]),
+ Config.
-ifndef(dont_rm_test_dirs).
-end_per_suite(doc) ->
- ["Stops the test suite"];
end_per_suite(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line ok=rm_files(["ibm","japanese","oasis","sun","xmltest"]),
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- lists:keydelete(watchdog,1,Config).
+ file:set_cwd(datadir(Config)),
+ ok = rm_files(["ibm","japanese","oasis","sun","xmltest"]),
+ ok.
-else.
-end_per_suite(doc) ->
- ["Stops the test suite"];
end_per_suite(Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- lists:keydelete(watchdog,1,Config).
+ ok.
-endif.
%% initialization before each testcase
init_per_testcase(_TestCase,Config) ->
io:format("Config:~n~p",[Config]),
- ?line {ok, _} = file:read_file_info(filename:join([?config(priv_dir,Config)])),
- ?line code:add_patha(?config(priv_dir,Config)),
- Dog=test_server:timetrap({minutes,10}),
- [{watchdog, Dog}|Config].
+ {ok, _} = file:read_file_info(filename:join([privdir(Config)])),
+ code:add_patha(privdir(Config)),
+ Config.
%% clean up after each testcase
-end_per_testcase(_Func,Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Func,_Config) ->
ok.
%%----------------------------------------------------------------------
%% Test cases
%%----------------------------------------------------------------------
-'v-pe02'(suite) -> [];
'v-pe02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-pe02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-pe02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'v-pe03'(suite) -> [];
'v-pe03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-pe03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-pe03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'v-pe00'(suite) -> [];
'v-pe00'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-pe00.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-pe00.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'v-lang06'(suite) -> [];
'v-lang06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-lang06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-lang06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'v-lang05'(suite) -> [];
'v-lang05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-lang05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-lang05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'v-lang04'(suite) -> [];
'v-lang04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-lang04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-lang04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'v-lang03'(suite) -> [];
'v-lang03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-lang03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-lang03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'v-lang02'(suite) -> [];
'v-lang02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-lang02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-lang02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'v-lang01'(suite) -> [];
'v-lang01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-lang01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-lang01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'v-sgml01'(suite) -> [];
'v-sgml01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"v-sgml01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"v-sgml01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sa05'(suite) -> [];
'sa05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sa05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sa05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sa04'(suite) -> [];
'sa04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sa04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sa04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sa03'(suite) -> [];
'sa03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sa03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sa03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sa02'(suite) -> [];
'sa02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sa02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sa02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sa01'(suite) -> [];
'sa01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sa01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sa01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'required00'(suite) -> [];
'required00'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"required00.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"required00.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional'(suite) -> [];
'optional'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'notation01'(suite) -> [];
'notation01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"notation01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"notation01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-sa04'(suite) -> [];
'not-sa04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"not-sa04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"not-sa04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-sa03'(suite) -> [];
'not-sa03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"not-sa03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"not-sa03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-sa02'(suite) -> [];
'not-sa02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"not-sa02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"not-sa02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-sa01'(suite) -> [];
'not-sa01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"not-sa01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"not-sa01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ext02'(suite) -> [];
'ext02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"ext02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"ext02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ext01'(suite) -> [];
'ext01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"ext01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"ext01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'element'(suite) -> [];
'element'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"element.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"element.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'dtd01'(suite) -> [];
'dtd01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"dtd01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"dtd01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'dtd00'(suite) -> [];
'dtd00'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"dtd00.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"dtd00.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'pe01'(suite) -> [];
'pe01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"pe01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"pe01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
%%----------------------------------------------------------------------
-'empty'(suite) -> [];
'empty'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"empty.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"empty.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'utf16l'(suite) -> [];
'utf16l'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"utf16l.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"utf16l.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'utf16b'(suite) -> [];
'utf16b'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"utf16b.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"utf16b.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr16'(suite) -> [];
'attr16'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr16.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr16.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr15'(suite) -> [];
'attr15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr14'(suite) -> [];
'attr14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr13'(suite) -> [];
'attr13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr12'(suite) -> [];
'attr12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr11'(suite) -> [];
'attr11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr10'(suite) -> [];
'attr10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr09'(suite) -> [];
'attr09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr08'(suite) -> [];
'attr08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr07'(suite) -> [];
'attr07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr06'(suite) -> [];
'attr06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr05'(suite) -> [];
'attr05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr04'(suite) -> [];
'attr04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr03'(suite) -> [];
'attr03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr02'(suite) -> [];
'attr02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attr01'(suite) -> [];
'attr01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attr01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attr01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'root'(suite) -> [];
'root'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"root.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"root.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-required02'(suite) -> [];
'inv-required02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-required02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-required02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-required01'(suite) -> [];
'inv-required01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-required01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-required01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-required00'(suite) -> [];
'inv-required00'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-required00.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-required00.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional25'(suite) -> [];
'optional25'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional25.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional25.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional24'(suite) -> [];
'optional24'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional24.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional24.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional23'(suite) -> [];
'optional23'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional23.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional23.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional22'(suite) -> [];
'optional22'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional22.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional22.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional21'(suite) -> [];
'optional21'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional21.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional21.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional20'(suite) -> [];
'optional20'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional20.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional20.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional14'(suite) -> [];
'optional14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional13'(suite) -> [];
'optional13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional12'(suite) -> [];
'optional12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional11'(suite) -> [];
'optional11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional10'(suite) -> [];
'optional10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional09'(suite) -> [];
'optional09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional08'(suite) -> [];
'optional08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional07'(suite) -> [];
'optional07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional06'(suite) -> [];
'optional06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional05'(suite) -> [];
'optional05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional04'(suite) -> [];
'optional04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional03'(suite) -> [];
'optional03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional02'(suite) -> [];
'optional02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'optional01'(suite) -> [];
'optional01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"optional01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"optional01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa14'(suite) -> [];
'inv-not-sa14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa13'(suite) -> [];
'inv-not-sa13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa12'(suite) -> [];
'inv-not-sa12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa11'(suite) -> [];
'inv-not-sa11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa10'(suite) -> [];
'inv-not-sa10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa09'(suite) -> [];
'inv-not-sa09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa08'(suite) -> [];
'inv-not-sa08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa07'(suite) -> [];
'inv-not-sa07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa06'(suite) -> [];
'inv-not-sa06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa05'(suite) -> [];
'inv-not-sa05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa04'(suite) -> [];
'inv-not-sa04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa02'(suite) -> [];
'inv-not-sa02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-not-sa01'(suite) -> [];
'inv-not-sa01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-not-sa01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-not-sa01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'id09'(suite) -> [];
'id09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"id09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"id09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'id08'(suite) -> [];
'id08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"id08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"id08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'id07'(suite) -> [];
'id07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"id07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"id07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'id06'(suite) -> [];
'id06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"id06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"id06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'id05'(suite) -> [];
'id05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"id05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"id05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'id04'(suite) -> [];
'id04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"id04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"id04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'id03'(suite) -> [];
'id03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"id03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"id03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'id02'(suite) -> [];
'id02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"id02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"id02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'id01'(suite) -> [];
'id01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"id01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"id01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'el06'(suite) -> [];
'el06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"el06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"el06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'el05'(suite) -> [];
'el05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"el05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"el05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'el04'(suite) -> [];
'el04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"el04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"el04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'el03'(suite) -> [];
'el03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"el03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"el03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'el02'(suite) -> [];
'el02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"el02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"el02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'el01'(suite) -> [];
'el01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"el01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"el01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-dtd03'(suite) -> [];
'inv-dtd03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-dtd03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-dtd03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-dtd02'(suite) -> [];
'inv-dtd02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-dtd02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-dtd02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'inv-dtd01'(suite) -> [];
'inv-dtd01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"inv-dtd01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"inv-dtd01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
%%----------------------------------------------------------------------
-'sgml13'(suite) -> [];
'sgml13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml12'(suite) -> [];
'sgml12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml11'(suite) -> [];
'sgml11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml10'(suite) -> [];
'sgml10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml09'(suite) -> [];
'sgml09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml08'(suite) -> [];
'sgml08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml07'(suite) -> [];
'sgml07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml06'(suite) -> [];
'sgml06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml05'(suite) -> [];
'sgml05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml04'(suite) -> [];
'sgml04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml03'(suite) -> [];
'sgml03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml02'(suite) -> [];
'sgml02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'sgml01'(suite) -> [];
'sgml01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"sgml01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"sgml01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'pubid05'(suite) -> [];
'pubid05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"pubid05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"pubid05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'pubid04'(suite) -> [];
'pubid04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"pubid04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"pubid04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'pubid03'(suite) -> [];
'pubid03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"pubid03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"pubid03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'pubid02'(suite) -> [];
'pubid02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"pubid02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"pubid02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'pubid01'(suite) -> [];
'pubid01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"pubid01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"pubid01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'pi'(suite) -> [];
'pi'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"pi.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"pi.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'encoding07'(suite) -> [];
'encoding07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"encoding07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"encoding07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'encoding06'(suite) -> [];
'encoding06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"encoding06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"encoding06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'encoding05'(suite) -> [];
'encoding05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"encoding05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"encoding05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'encoding04'(suite) -> [];
'encoding04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"encoding04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"encoding04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'encoding03'(suite) -> [];
'encoding03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"encoding03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"encoding03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'encoding02'(suite) -> [];
'encoding02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"encoding02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"encoding02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'encoding01'(suite) -> [];
'encoding01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"encoding01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"encoding01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'element04'(suite) -> [];
'element04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"element04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"element04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'element03'(suite) -> [];
'element03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"element03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"element03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'element02'(suite) -> [];
'element02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"element02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"element02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'element01'(suite) -> [];
'element01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"element01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"element01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'element00'(suite) -> [];
'element00'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"element00.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"element00.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'dtd07'(suite) -> [];
'dtd07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"dtd07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"dtd07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'dtd05'(suite) -> [];
'dtd05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"dtd05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"dtd05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'dtd04'(suite) -> [];
'dtd04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"dtd04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"dtd04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'dtd03'(suite) -> [];
'dtd03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"dtd03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"dtd03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'dtd02'(suite) -> [];
'dtd02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"dtd02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"dtd02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'nwf-dtd01'(suite) -> [];
'nwf-dtd01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"nwf-dtd01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"nwf-dtd01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'nwf-dtd00'(suite) -> [];
'nwf-dtd00'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"nwf-dtd00.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"nwf-dtd00.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'decl01'(suite) -> [];
'decl01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"decl01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"decl01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'content03'(suite) -> [];
'content03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"content03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"content03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'content02'(suite) -> [];
'content02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"content02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"content02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'content01'(suite) -> [];
'content01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"content01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"content01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'cond02'(suite) -> [];
'cond02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"cond02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"cond02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'cond01'(suite) -> [];
'cond01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"cond01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"cond01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist11'(suite) -> [];
'attlist11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist10'(suite) -> [];
'attlist10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist09'(suite) -> [];
'attlist09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist08'(suite) -> [];
'attlist08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist07'(suite) -> [];
'attlist07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist06'(suite) -> [];
'attlist06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist05'(suite) -> [];
'attlist05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist04'(suite) -> [];
'attlist04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist03'(suite) -> [];
'attlist03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist02'(suite) -> [];
'attlist02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'attlist01'(suite) -> [];
'attlist01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"attlist01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"attlist01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa03'(suite) -> [];
'not-wf-sa03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"not-wf-sa03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"not-wf-sa03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
%%----------------------------------------------------------------------
-'uri01'(suite) -> [];
-'uri01'(doc) ->
- ["URI fragments disallowed"];
+%% URI fragments disallowed
'uri01'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),sun,"uri01.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[sun,"uri01.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["URI fragments disallowed"]}.
%%----------------------------------------------------------------------
-'valid-ext-sa-014'(suite) -> [];
'valid-ext-sa-014'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-014.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-014.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-013'(suite) -> [];
'valid-ext-sa-013'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-013.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-013.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-012'(suite) -> [];
'valid-ext-sa-012'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-012.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-012.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-011'(suite) -> [];
'valid-ext-sa-011'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-011.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-011.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-009'(suite) -> [];
'valid-ext-sa-009'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-009.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-009.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-008'(suite) -> [];
'valid-ext-sa-008'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-008.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-008.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-007'(suite) -> [];
'valid-ext-sa-007'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-007.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-007.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-006'(suite) -> [];
'valid-ext-sa-006'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-006.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-006.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-005'(suite) -> [];
'valid-ext-sa-005'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-005.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-005.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-004'(suite) -> [];
'valid-ext-sa-004'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-004.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-004.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-003'(suite) -> [];
'valid-ext-sa-003'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-003.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-003.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-002'(suite) -> [];
'valid-ext-sa-002'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-002.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-002.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-ext-sa-001'(suite) -> [];
'valid-ext-sa-001'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-ext-sa-001.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-ext-sa-001.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-031'(suite) -> [];
'valid-not-sa-031'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-031.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-031.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-030'(suite) -> [];
'valid-not-sa-030'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-030.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-030.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-029'(suite) -> [];
'valid-not-sa-029'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-029.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-029.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-028'(suite) -> [];
'valid-not-sa-028'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-028.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-028.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-027'(suite) -> [];
'valid-not-sa-027'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-027.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-027.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-026'(suite) -> [];
'valid-not-sa-026'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-026.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-026.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-025'(suite) -> [];
'valid-not-sa-025'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-025.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-025.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-024'(suite) -> [];
'valid-not-sa-024'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-024.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-024.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-023'(suite) -> [];
'valid-not-sa-023'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-023.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-023.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-021'(suite) -> [];
'valid-not-sa-021'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-021.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-021.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-020'(suite) -> [];
'valid-not-sa-020'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-020.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-020.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-019'(suite) -> [];
'valid-not-sa-019'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-019.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-019.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-018'(suite) -> [];
'valid-not-sa-018'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-018.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-018.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-017'(suite) -> [];
'valid-not-sa-017'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-017.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-017.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-016'(suite) -> [];
'valid-not-sa-016'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-016.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-016.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-015'(suite) -> [];
'valid-not-sa-015'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-015.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-015.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-014'(suite) -> [];
'valid-not-sa-014'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-014.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-014.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-013'(suite) -> [];
'valid-not-sa-013'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-013.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-013.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-012'(suite) -> [];
'valid-not-sa-012'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-012.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-012.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-011'(suite) -> [];
'valid-not-sa-011'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-011.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-011.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-010'(suite) -> [];
'valid-not-sa-010'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-010.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-010.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-009'(suite) -> [];
'valid-not-sa-009'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-009.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-009.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-008'(suite) -> [];
'valid-not-sa-008'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-008.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-008.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-007'(suite) -> [];
'valid-not-sa-007'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-007.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-007.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-006'(suite) -> [];
'valid-not-sa-006'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-006.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-006.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-005'(suite) -> [];
'valid-not-sa-005'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-005.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-005.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-004'(suite) -> [];
'valid-not-sa-004'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-004.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-004.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-003'(suite) -> [];
'valid-not-sa-003'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-003.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-003.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-002'(suite) -> [];
'valid-not-sa-002'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-002.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-002.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-not-sa-001'(suite) -> [];
'valid-not-sa-001'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-not-sa-001.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-not-sa-001.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-119'(suite) -> [];
'valid-sa-119'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-119.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-119.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-118'(suite) -> [];
'valid-sa-118'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-118.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-118.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-117'(suite) -> [];
'valid-sa-117'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-117.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-117.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-116'(suite) -> [];
'valid-sa-116'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-116.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-116.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-115'(suite) -> [];
'valid-sa-115'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-115.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-115.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-114'(suite) -> [];
'valid-sa-114'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-114.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-114.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-113'(suite) -> [];
'valid-sa-113'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-113.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-113.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-112'(suite) -> [];
'valid-sa-112'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-112.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-112.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-111'(suite) -> [];
'valid-sa-111'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-111.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-111.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-110'(suite) -> [];
'valid-sa-110'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-110.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-110.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-109'(suite) -> [];
'valid-sa-109'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-109.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-109.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-108'(suite) -> [];
'valid-sa-108'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-108.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-108.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-107'(suite) -> [];
'valid-sa-107'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-107.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-107.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-106'(suite) -> [];
'valid-sa-106'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-106.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-106.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-105'(suite) -> [];
'valid-sa-105'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-105.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-105.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-104'(suite) -> [];
'valid-sa-104'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-104.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-104.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-103'(suite) -> [];
'valid-sa-103'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-103.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-103.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-102'(suite) -> [];
'valid-sa-102'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-102.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-102.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-101'(suite) -> [];
'valid-sa-101'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-101.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-101.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-100'(suite) -> [];
'valid-sa-100'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-100.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-100.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["recursive xml spec"]}.
-'valid-sa-099'(suite) -> [];
'valid-sa-099'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-099.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-099.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-098'(suite) -> [];
'valid-sa-098'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-098.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-098.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-097'(suite) -> [];
'valid-sa-097'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-097.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-097.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-096'(suite) -> [];
'valid-sa-096'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-096.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-096.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-095'(suite) -> [];
'valid-sa-095'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-095.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-095.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-094'(suite) -> [];
'valid-sa-094'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-094.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-094.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-093'(suite) -> [];
'valid-sa-093'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-093.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-093.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-092'(suite) -> [];
'valid-sa-092'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-092.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-092.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-091'(suite) -> [];
'valid-sa-091'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-091.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-091.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-090'(suite) -> [];
'valid-sa-090'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-090.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-090.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-089'(suite) -> [];
'valid-sa-089'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-089.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-089.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-088'(suite) -> [];
'valid-sa-088'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-088.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-088.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-087'(suite) -> [];
'valid-sa-087'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-087.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-087.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-086'(suite) -> [];
'valid-sa-086'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-086.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-086.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-085'(suite) -> [];
'valid-sa-085'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-085.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-085.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-084'(suite) -> [];
'valid-sa-084'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-084.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-084.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-083'(suite) -> [];
'valid-sa-083'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-083.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-083.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-082'(suite) -> [];
'valid-sa-082'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-082.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-082.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-081'(suite) -> [];
'valid-sa-081'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-081.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-081.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-080'(suite) -> [];
'valid-sa-080'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-080.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-080.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-079'(suite) -> [];
'valid-sa-079'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-079.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-079.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-078'(suite) -> [];
'valid-sa-078'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-078.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-078.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-077'(suite) -> [];
'valid-sa-077'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-077.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-077.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-076'(suite) -> [];
'valid-sa-076'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-076.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-076.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-075'(suite) -> [];
'valid-sa-075'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-075.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-075.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-074'(suite) -> [];
'valid-sa-074'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-074.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-074.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-073'(suite) -> [];
'valid-sa-073'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-073.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-073.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-072'(suite) -> [];
'valid-sa-072'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-072.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-072.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-071'(suite) -> [];
'valid-sa-071'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-071.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-071.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-070'(suite) -> [];
'valid-sa-070'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-070.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-070.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-069'(suite) -> [];
'valid-sa-069'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-069.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-069.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-068'(suite) -> [];
'valid-sa-068'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-068.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-068.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-067'(suite) -> [];
'valid-sa-067'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-067.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-067.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-066'(suite) -> [];
'valid-sa-066'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-066.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-066.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-065'(suite) -> [];
'valid-sa-065'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-065.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-065.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-064'(suite) -> [];
'valid-sa-064'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-064.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-064.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Fails to handle UTF-8 encoded names, when they are converted to atoms"]}.
-'valid-sa-063'(suite) -> [];
'valid-sa-063'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-063.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-063.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Fails to handle Unicode integer (UTF-8) encoded names, when they are converted to atoms"]}.
-'valid-sa-062'(suite) -> [];
'valid-sa-062'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-062.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-062.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-061'(suite) -> [];
'valid-sa-061'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-061.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-061.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-060'(suite) -> [];
'valid-sa-060'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-060.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-060.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-059'(suite) -> [];
'valid-sa-059'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-059.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-059.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-058'(suite) -> [];
'valid-sa-058'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-058.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-058.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-057'(suite) -> [];
'valid-sa-057'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-057.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-057.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-056'(suite) -> [];
'valid-sa-056'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-056.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-056.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-055'(suite) -> [];
'valid-sa-055'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-055.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-055.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-054'(suite) -> [];
'valid-sa-054'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-054.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-054.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-053'(suite) -> [];
'valid-sa-053'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-053.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-053.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-052'(suite) -> [];
'valid-sa-052'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-052.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-052.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-051'(suite) -> [];
'valid-sa-051'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-051.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-051.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Fails to handle Unicode integer (UTF-16) encoded names, when they are converted to atoms"]}.
-'valid-sa-050'(suite) -> [];
'valid-sa-050'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-050.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-050.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-049'(suite) -> [];
'valid-sa-049'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-049.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-049.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-048'(suite) -> [];
'valid-sa-048'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-048.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-048.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-047'(suite) -> [];
'valid-sa-047'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-047.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-047.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-046'(suite) -> [];
'valid-sa-046'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-046.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-046.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-045'(suite) -> [];
'valid-sa-045'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-045.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-045.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-044'(suite) -> [];
'valid-sa-044'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-044.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-044.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-043'(suite) -> [];
'valid-sa-043'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-043.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-043.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-042'(suite) -> [];
'valid-sa-042'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-042.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-042.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-041'(suite) -> [];
'valid-sa-041'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-041.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-041.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-040'(suite) -> [];
'valid-sa-040'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-040.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-040.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-039'(suite) -> [];
'valid-sa-039'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-039.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-039.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-038'(suite) -> [];
'valid-sa-038'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-038.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-038.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-037'(suite) -> [];
'valid-sa-037'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-037.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-037.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-036'(suite) -> [];
'valid-sa-036'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-036.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-036.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-035'(suite) -> [];
'valid-sa-035'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-035.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-035.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-034'(suite) -> [];
'valid-sa-034'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-034.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-034.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-033'(suite) -> [];
'valid-sa-033'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-033.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-033.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-032'(suite) -> [];
'valid-sa-032'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-032.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-032.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-031'(suite) -> [];
'valid-sa-031'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-031.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-031.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-030'(suite) -> [];
'valid-sa-030'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-030.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-030.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-029'(suite) -> [];
'valid-sa-029'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-029.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-029.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-028'(suite) -> [];
'valid-sa-028'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-028.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-028.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-027'(suite) -> [];
'valid-sa-027'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-027.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-027.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-026'(suite) -> [];
'valid-sa-026'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-026.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-026.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-025'(suite) -> [];
'valid-sa-025'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-025.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-025.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-024'(suite) -> [];
'valid-sa-024'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-024.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-024.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-023'(suite) -> [];
'valid-sa-023'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-023.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-023.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-022'(suite) -> [];
'valid-sa-022'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-022.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-022.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-021'(suite) -> [];
'valid-sa-021'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-021.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-021.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-020'(suite) -> [];
'valid-sa-020'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-020.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-020.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-019'(suite) -> [];
'valid-sa-019'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-019.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-019.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-018'(suite) -> [];
'valid-sa-018'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-018.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-018.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-017'(suite) -> [];
'valid-sa-017'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-017.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-017.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-016'(suite) -> [];
'valid-sa-016'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-016.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-016.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-015'(suite) -> [];
'valid-sa-015'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-015.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-015.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-014'(suite) -> [];
'valid-sa-014'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-014.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-014.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-013'(suite) -> [];
'valid-sa-013'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-013.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-013.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-012'(suite) -> [];
'valid-sa-012'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-012.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-012.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-011'(suite) -> [];
'valid-sa-011'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-011.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-011.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-010'(suite) -> [];
'valid-sa-010'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-010.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-010.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-009'(suite) -> [];
'valid-sa-009'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-009.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-009.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-008'(suite) -> [];
'valid-sa-008'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-008.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-008.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-007'(suite) -> [];
'valid-sa-007'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-007.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-007.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-006'(suite) -> [];
'valid-sa-006'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-006.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-006.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-005'(suite) -> [];
'valid-sa-005'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-005.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-005.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-004'(suite) -> [];
'valid-sa-004'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-004.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-004.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-003'(suite) -> [];
'valid-sa-003'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-003.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-003.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-002'(suite) -> [];
'valid-sa-002'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-002.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-002.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'valid-sa-001'(suite) -> [];
'valid-sa-001'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"valid-sa-001.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"valid-sa-001.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'invalid-not-sa-022'(suite) -> [];
'invalid-not-sa-022'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"invalid-not-sa-022.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"invalid-not-sa-022.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'invalid--006'(suite) -> [];
'invalid--006'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"invalid--006.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"invalid--006.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'invalid--005'(suite) -> [];
'invalid--005'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"invalid--005.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"invalid--005.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'invalid--002'(suite) -> [];
'invalid--002'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"invalid--002.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"invalid--002.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-ext-sa-003'(suite) -> [];
'not-wf-ext-sa-003'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-ext-sa-003.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-ext-sa-003.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-ext-sa-002'(suite) -> [];
'not-wf-ext-sa-002'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-ext-sa-002.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-ext-sa-002.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-ext-sa-001'(suite) -> [];
'not-wf-ext-sa-001'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-ext-sa-001.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-ext-sa-001.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-not-sa-009'(suite) -> [];
'not-wf-not-sa-009'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-not-sa-009.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-not-sa-009.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-not-sa-008'(suite) -> [];
'not-wf-not-sa-008'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-not-sa-008.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-not-sa-008.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-not-sa-007'(suite) -> [];
'not-wf-not-sa-007'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-not-sa-007.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-not-sa-007.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-not-sa-006'(suite) -> [];
'not-wf-not-sa-006'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-not-sa-006.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-not-sa-006.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-not-sa-005'(suite) -> [];
'not-wf-not-sa-005'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-not-sa-005.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-not-sa-005.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-not-sa-004'(suite) -> [];
'not-wf-not-sa-004'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-not-sa-004.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-not-sa-004.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-not-sa-003'(suite) -> [];
'not-wf-not-sa-003'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-not-sa-003.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-not-sa-003.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-not-sa-002'(suite) -> [];
'not-wf-not-sa-002'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-not-sa-002.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-not-sa-002.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-not-sa-001'(suite) -> [];
'not-wf-not-sa-001'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-not-sa-001.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-not-sa-001.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-186'(suite) -> [];
'not-wf-sa-186'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-186.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-186.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-185'(suite) -> [];
'not-wf-sa-185'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-185.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-185.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-184'(suite) -> [];
'not-wf-sa-184'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-184.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-184.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-183'(suite) -> [];
'not-wf-sa-183'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-183.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-183.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-182'(suite) -> [];
'not-wf-sa-182'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-182.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-182.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-181'(suite) -> [];
'not-wf-sa-181'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-181.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-181.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-180'(suite) -> [];
'not-wf-sa-180'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-180.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-180.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-179'(suite) -> [];
'not-wf-sa-179'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-179.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-179.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-178'(suite) -> [];
'not-wf-sa-178'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-178.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-178.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-177'(suite) -> [];
'not-wf-sa-177'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-177.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-177.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["do not support UTF-8 (only Latin-1), therefore not ","able to check the illegal FFFF/FFFE (Unicode) characters"]}.
-'not-wf-sa-176'(suite) -> [];
'not-wf-sa-176'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-176.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-176.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-175'(suite) -> [];
'not-wf-sa-175'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-175.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-175.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["do not support UTF-8 (only Latin-1), therefore not ","able to check the illegal FFFF/FFFE (Unicode) characters"]}.
-'not-wf-sa-174'(suite) -> [];
'not-wf-sa-174'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-174.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-174.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["do not support UTF-8 (only Latin-1), therefore not ","able to check the illegal FFFF/FFFE (Unicode) characters"]}.
-'not-wf-sa-173'(suite) -> [];
'not-wf-sa-173'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-173.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-173.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["do not support UTF-8 (only Latin-1), therefore not ","able to check the illegal FFFF/FFFE (Unicode) characters"]}.
-'not-wf-sa-172'(suite) -> [];
'not-wf-sa-172'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-172.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-172.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["do not support UTF-8 (only Latin-1), therefore not ","able to check the illegal FFFF/FFFE (Unicode) characters"]}.
-'not-wf-sa-171'(suite) -> [];
'not-wf-sa-171'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-171.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-171.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["do not support UTF-8 (only Latin-1), therefore not ","able to check the illegal FFFF/FFFE (Unicode) characters"]}.
-'not-wf-sa-170'(suite) -> [];
'not-wf-sa-170'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-170.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-170.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["UTF-8 encoding of UCS-4 characters"]}.
-'not-wf-sa-169'(suite) -> [];
'not-wf-sa-169'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-169.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-169.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["UTF-8 encoding of an illegal unpaired surrogate (DC00)"]}.
-'not-wf-sa-168'(suite) -> [];
'not-wf-sa-168'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-168.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-168.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["UTF-8 encoding of an illegal unpaired surrogate (D800)"]}.
-'not-wf-sa-167'(suite) -> [];
'not-wf-sa-167'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-167.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-167.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["UTF-8 encoding of an illegal FFFE"]}.
-'not-wf-sa-166'(suite) -> [];
'not-wf-sa-166'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-166.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-166.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["UTF-8 encoding of an illegal FFFE"]}.
-'not-wf-sa-165'(suite) -> [];
'not-wf-sa-165'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-165.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-165.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-164'(suite) -> [];
'not-wf-sa-164'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-164.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-164.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-163'(suite) -> [];
'not-wf-sa-163'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-163.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-163.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-162'(suite) -> [];
'not-wf-sa-162'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-162.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-162.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-161'(suite) -> [];
'not-wf-sa-161'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-161.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-161.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-160'(suite) -> [];
'not-wf-sa-160'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-160.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-160.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-159'(suite) -> [];
'not-wf-sa-159'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-159.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-159.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-158'(suite) -> [];
'not-wf-sa-158'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-158.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-158.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-157'(suite) -> [];
'not-wf-sa-157'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-157.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-157.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-156'(suite) -> [];
'not-wf-sa-156'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-156.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-156.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-155'(suite) -> [];
'not-wf-sa-155'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-155.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-155.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-154'(suite) -> [];
'not-wf-sa-154'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-154.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-154.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-153'(suite) -> [];
'not-wf-sa-153'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-153.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-153.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-152'(suite) -> [];
'not-wf-sa-152'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-152.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-152.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-151'(suite) -> [];
'not-wf-sa-151'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-151.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-151.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["don't bother wath's in the Misc production"]}.
-'not-wf-sa-150'(suite) -> [];
'not-wf-sa-150'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-150.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-150.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-149'(suite) -> [];
'not-wf-sa-149'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-149.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-149.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-148'(suite) -> [];
'not-wf-sa-148'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-148.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-148.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-147'(suite) -> [];
'not-wf-sa-147'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-147.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-147.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-146'(suite) -> [];
'not-wf-sa-146'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-146.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-146.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-145'(suite) -> [];
'not-wf-sa-145'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-145.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-145.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-144'(suite) -> [];
'not-wf-sa-144'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-144.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-144.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-143'(suite) -> [];
'not-wf-sa-143'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-143.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-143.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-142'(suite) -> [];
'not-wf-sa-142'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-142.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-142.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-141'(suite) -> [];
'not-wf-sa-141'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-141.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-141.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-140'(suite) -> [];
'not-wf-sa-140'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-140.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-140.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-139'(suite) -> [];
'not-wf-sa-139'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-139.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-139.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-138'(suite) -> [];
'not-wf-sa-138'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-138.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-138.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-137'(suite) -> [];
'not-wf-sa-137'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-137.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-137.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-136'(suite) -> [];
'not-wf-sa-136'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-136.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-136.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-135'(suite) -> [];
'not-wf-sa-135'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-135.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-135.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-134'(suite) -> [];
'not-wf-sa-134'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-134.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-134.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-133'(suite) -> [];
'not-wf-sa-133'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-133.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-133.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-132'(suite) -> [];
'not-wf-sa-132'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-132.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-132.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-131'(suite) -> [];
'not-wf-sa-131'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-131.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-131.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-130'(suite) -> [];
'not-wf-sa-130'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-130.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-130.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-129'(suite) -> [];
'not-wf-sa-129'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-129.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-129.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-128'(suite) -> [];
'not-wf-sa-128'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-128.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-128.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-127'(suite) -> [];
'not-wf-sa-127'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-127.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-127.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-126'(suite) -> [];
'not-wf-sa-126'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-126.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-126.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-125'(suite) -> [];
'not-wf-sa-125'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-125.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-125.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-124'(suite) -> [];
'not-wf-sa-124'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-124.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-124.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-123'(suite) -> [];
'not-wf-sa-123'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-123.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-123.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-122'(suite) -> [];
'not-wf-sa-122'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-122.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-122.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-121'(suite) -> [];
'not-wf-sa-121'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-121.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-121.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-120'(suite) -> [];
'not-wf-sa-120'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-120.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-120.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-119'(suite) -> [];
'not-wf-sa-119'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-119.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-119.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-118'(suite) -> [];
'not-wf-sa-118'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-118.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-118.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-117'(suite) -> [];
'not-wf-sa-117'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-117.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-117.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-116'(suite) -> [];
'not-wf-sa-116'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-116.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-116.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-115'(suite) -> [];
'not-wf-sa-115'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-115.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-115.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-114'(suite) -> [];
'not-wf-sa-114'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-114.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-114.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-113'(suite) -> [];
'not-wf-sa-113'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-113.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-113.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-112'(suite) -> [];
'not-wf-sa-112'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-112.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-112.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-111'(suite) -> [];
'not-wf-sa-111'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-111.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-111.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-110'(suite) -> [];
'not-wf-sa-110'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-110.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-110.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-109'(suite) -> [];
'not-wf-sa-109'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-109.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-109.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-108'(suite) -> [];
'not-wf-sa-108'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-108.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-108.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-107'(suite) -> [];
'not-wf-sa-107'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-107.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-107.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-106'(suite) -> [];
'not-wf-sa-106'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-106.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-106.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-105'(suite) -> [];
'not-wf-sa-105'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-105.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-105.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-104'(suite) -> [];
'not-wf-sa-104'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-104.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-104.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-103'(suite) -> [];
'not-wf-sa-103'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-103.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-103.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-102'(suite) -> [];
'not-wf-sa-102'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-102.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-102.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-101'(suite) -> [];
'not-wf-sa-101'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-101.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-101.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-100'(suite) -> [];
'not-wf-sa-100'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-100.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-100.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-099'(suite) -> [];
'not-wf-sa-099'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-099.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-099.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-098'(suite) -> [];
'not-wf-sa-098'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-098.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-098.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-097'(suite) -> [];
'not-wf-sa-097'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-097.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-097.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-096'(suite) -> [];
'not-wf-sa-096'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-096.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-096.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-095'(suite) -> [];
'not-wf-sa-095'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-095.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-095.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-094'(suite) -> [];
'not-wf-sa-094'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-094.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-094.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-093'(suite) -> [];
'not-wf-sa-093'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-093.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-093.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-092'(suite) -> [];
'not-wf-sa-092'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-092.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-092.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-091'(suite) -> [];
'not-wf-sa-091'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-091.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-091.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-090'(suite) -> [];
'not-wf-sa-090'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-090.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-090.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-089'(suite) -> [];
'not-wf-sa-089'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-089.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-089.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-088'(suite) -> [];
'not-wf-sa-088'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-088.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-088.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-087'(suite) -> [];
'not-wf-sa-087'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-087.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-087.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-086'(suite) -> [];
'not-wf-sa-086'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-086.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-086.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-085'(suite) -> [];
'not-wf-sa-085'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-085.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-085.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-084'(suite) -> [];
'not-wf-sa-084'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-084.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-084.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-083'(suite) -> [];
'not-wf-sa-083'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-083.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-083.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-082'(suite) -> [];
'not-wf-sa-082'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-082.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-082.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-081'(suite) -> [];
'not-wf-sa-081'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-081.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-081.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-080'(suite) -> [];
'not-wf-sa-080'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-080.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-080.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-079'(suite) -> [];
'not-wf-sa-079'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-079.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-079.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-078'(suite) -> [];
'not-wf-sa-078'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-078.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-078.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-077'(suite) -> [];
'not-wf-sa-077'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-077.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-077.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-076'(suite) -> [];
'not-wf-sa-076'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-076.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-076.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-075'(suite) -> [];
'not-wf-sa-075'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-075.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-075.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-074'(suite) -> [];
'not-wf-sa-074'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-074.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-074.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-073'(suite) -> [];
'not-wf-sa-073'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-073.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-073.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-072'(suite) -> [];
'not-wf-sa-072'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-072.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-072.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-071'(suite) -> [];
'not-wf-sa-071'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-071.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-071.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-070'(suite) -> [];
'not-wf-sa-070'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-070.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-070.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-069'(suite) -> [];
'not-wf-sa-069'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-069.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-069.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-068'(suite) -> [];
'not-wf-sa-068'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-068.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-068.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-067'(suite) -> [];
'not-wf-sa-067'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-067.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-067.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-066'(suite) -> [];
'not-wf-sa-066'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-066.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-066.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-065'(suite) -> [];
'not-wf-sa-065'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-065.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-065.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-064'(suite) -> [];
'not-wf-sa-064'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-064.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-064.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-063'(suite) -> [];
'not-wf-sa-063'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-063.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-063.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-062'(suite) -> [];
'not-wf-sa-062'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-062.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-062.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-061'(suite) -> [];
'not-wf-sa-061'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-061.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-061.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-060'(suite) -> [];
'not-wf-sa-060'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-060.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-060.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-059'(suite) -> [];
'not-wf-sa-059'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-059.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-059.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-058'(suite) -> [];
'not-wf-sa-058'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-058.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-058.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-057'(suite) -> [];
'not-wf-sa-057'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-057.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-057.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-056'(suite) -> [];
'not-wf-sa-056'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-056.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-056.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-055'(suite) -> [];
'not-wf-sa-055'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-055.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-055.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-054'(suite) -> [];
'not-wf-sa-054'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-054.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-054.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-053'(suite) -> [];
'not-wf-sa-053'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-053.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-053.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-052'(suite) -> [];
'not-wf-sa-052'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-052.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-052.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-051'(suite) -> [];
'not-wf-sa-051'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-051.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-051.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-050'(suite) -> [];
'not-wf-sa-050'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-050.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-050.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-049'(suite) -> [];
'not-wf-sa-049'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-049.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-049.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-048'(suite) -> [];
'not-wf-sa-048'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-048.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-048.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-047'(suite) -> [];
'not-wf-sa-047'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-047.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-047.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-046'(suite) -> [];
'not-wf-sa-046'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-046.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-046.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-045'(suite) -> [];
'not-wf-sa-045'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-045.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-045.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-044'(suite) -> [];
'not-wf-sa-044'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-044.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-044.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-043'(suite) -> [];
'not-wf-sa-043'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-043.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-043.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-042'(suite) -> [];
'not-wf-sa-042'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-042.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-042.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-041'(suite) -> [];
'not-wf-sa-041'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-041.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-041.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-040'(suite) -> [];
'not-wf-sa-040'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-040.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-040.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-039'(suite) -> [];
'not-wf-sa-039'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-039.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-039.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-038'(suite) -> [];
'not-wf-sa-038'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-038.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-038.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-037'(suite) -> [];
'not-wf-sa-037'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-037.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-037.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-036'(suite) -> [];
'not-wf-sa-036'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-036.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-036.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-035'(suite) -> [];
'not-wf-sa-035'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-035.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-035.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-034'(suite) -> [];
'not-wf-sa-034'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-034.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-034.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-033'(suite) -> [];
'not-wf-sa-033'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-033.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-033.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-032'(suite) -> [];
'not-wf-sa-032'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-032.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-032.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-031'(suite) -> [];
'not-wf-sa-031'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-031.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-031.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-030'(suite) -> [];
'not-wf-sa-030'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-030.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-030.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-029'(suite) -> [];
'not-wf-sa-029'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-029.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-029.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-028'(suite) -> [];
'not-wf-sa-028'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-028.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-028.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-027'(suite) -> [];
'not-wf-sa-027'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-027.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-027.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-026'(suite) -> [];
'not-wf-sa-026'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-026.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-026.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-025'(suite) -> [];
'not-wf-sa-025'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-025.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-025.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-024'(suite) -> [];
'not-wf-sa-024'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-024.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-024.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-023'(suite) -> [];
'not-wf-sa-023'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-023.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-023.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-022'(suite) -> [];
'not-wf-sa-022'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-022.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-022.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-021'(suite) -> [];
'not-wf-sa-021'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-021.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-021.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-020'(suite) -> [];
'not-wf-sa-020'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-020.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-020.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-019'(suite) -> [];
'not-wf-sa-019'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-019.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-019.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-018'(suite) -> [];
'not-wf-sa-018'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-018.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-018.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-017'(suite) -> [];
'not-wf-sa-017'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-017.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-017.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-016'(suite) -> [];
'not-wf-sa-016'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-016.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-016.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-015'(suite) -> [];
'not-wf-sa-015'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-015.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-015.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-014'(suite) -> [];
'not-wf-sa-014'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-014.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-014.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-013'(suite) -> [];
'not-wf-sa-013'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-013.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-013.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-012'(suite) -> [];
'not-wf-sa-012'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-012.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-012.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-011'(suite) -> [];
'not-wf-sa-011'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-011.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-011.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-010'(suite) -> [];
'not-wf-sa-010'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-010.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-010.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-009'(suite) -> [];
'not-wf-sa-009'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-009.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-009.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-008'(suite) -> [];
'not-wf-sa-008'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-008.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-008.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-007'(suite) -> [];
'not-wf-sa-007'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-007.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-007.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-006'(suite) -> [];
'not-wf-sa-006'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-006.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-006.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-005'(suite) -> [];
'not-wf-sa-005'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-005.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-005.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-004'(suite) -> [];
'not-wf-sa-004'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-004.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-004.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-003'(suite) -> [];
'not-wf-sa-003'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-003.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-003.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-002'(suite) -> [];
'not-wf-sa-002'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-002.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-002.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'not-wf-sa-001'(suite) -> [];
'not-wf-sa-001'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),xmltest,"not-wf-sa-001.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[xmltest,"not-wf-sa-001.xml"]),[]),
+ xmerl:export([A],xmerl_test).
%%----------------------------------------------------------------------
-'japanese-weekly-utf-8'(suite) -> [];
'japanese-weekly-utf-8'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-weekly-utf-8.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-weekly-utf-8.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["UTF-8 encoding of japanese characters"]}.
-'japanese-weekly-utf-16'(suite) -> [];
'japanese-weekly-utf-16'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-weekly-utf-16.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-weekly-utf-16.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Test support for UTF-16 encoding, and XML names which contain Japanese characters."]}.
-'japanese-weekly-shift_jis'(suite) -> [];
'japanese-weekly-shift_jis'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-weekly-shift_jis.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-weekly-shift_jis.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'japanese-weekly-little'(suite) -> [];
'japanese-weekly-little'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-weekly-little.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-weekly-little.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Test support for little-endian UTF-16 encoding, and XML names which contain Japanese characters."]}.
-'japanese-weekly-iso-2022-jp'(suite) -> [];
'japanese-weekly-iso-2022-jp'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-weekly-iso-2022-jp.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-weekly-iso-2022-jp.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'japanese-weekly-euc-jp'(suite) -> [];
'japanese-weekly-euc-jp'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-weekly-euc-jp.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-weekly-euc-jp.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'japanese-pr-xml-utf-8'(suite) -> [];
'japanese-pr-xml-utf-8'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-pr-xml-utf-8.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-pr-xml-utf-8.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Test support for UTF-8 text which relies on Japanese characters"]}.
-'japanese-pr-xml-utf-16'(suite) -> [];
'japanese-pr-xml-utf-16'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-pr-xml-utf-16.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-pr-xml-utf-16.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Test support UTF-16 text which relies on Japanese characters."]}.
-'japanese-pr-xml-shift_jis'(suite) -> [];
'japanese-pr-xml-shift_jis'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-pr-xml-shift_jis.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-pr-xml-shift_jis.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'japanese-pr-xml-little'(suite) -> [];
'japanese-pr-xml-little'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-pr-xml-little.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-pr-xml-little.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Test support for little-endian UTF-16 text which relies on Japanese characters."]}.
-'japanese-pr-xml-iso-2022-jp'(suite) -> [];
'japanese-pr-xml-iso-2022-jp'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-pr-xml-iso-2022-jp.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-pr-xml-iso-2022-jp.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'japanese-pr-xml-euc-jp'(suite) -> [];
'japanese-pr-xml-euc-jp'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),japanese,"japanese-pr-xml-euc-jp.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[japanese,"japanese-pr-xml-euc-jp.xml"]),[]),
+ xmerl:export([A],xmerl_test).
%%----------------------------------------------------------------------
-'o-p11pass1'(suite) -> [];
'o-p11pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p11pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p11pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p76fail4'(suite) -> [];
'o-p76fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p76fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p76fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p76fail3'(suite) -> [];
'o-p76fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p76fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p76fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p76fail2'(suite) -> [];
'o-p76fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p76fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p76fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p76fail1'(suite) -> [];
'o-p76fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p76fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p76fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p75fail6'(suite) -> [];
'o-p75fail6'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p75fail6.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p75fail6.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p75fail5'(suite) -> [];
'o-p75fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p75fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p75fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p75fail4'(suite) -> [];
'o-p75fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p75fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p75fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p75fail3'(suite) -> [];
'o-p75fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p75fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p75fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p75fail2'(suite) -> [];
'o-p75fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p75fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p75fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p75fail1'(suite) -> [];
'o-p75fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p75fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p75fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p74fail3'(suite) -> [];
'o-p74fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p74fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p74fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p74fail2'(suite) -> [];
'o-p74fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p74fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p74fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p74fail1'(suite) -> [];
'o-p74fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p74fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p74fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p73fail5'(suite) -> [];
'o-p73fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p73fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p73fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p73fail4'(suite) -> [];
'o-p73fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p73fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p73fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p73fail3'(suite) -> [];
'o-p73fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p73fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p73fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p73fail2'(suite) -> [];
'o-p73fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p73fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p73fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p73fail1'(suite) -> [];
'o-p73fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p73fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p73fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p72fail4'(suite) -> [];
'o-p72fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p72fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p72fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p72fail3'(suite) -> [];
'o-p72fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p72fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p72fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p72fail2'(suite) -> [];
'o-p72fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p72fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p72fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p72fail1'(suite) -> [];
'o-p72fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p72fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p72fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p71fail4'(suite) -> [];
'o-p71fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p71fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p71fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p71fail3'(suite) -> [];
'o-p71fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p71fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p71fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p71fail2'(suite) -> [];
'o-p71fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p71fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p71fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p71fail1'(suite) -> [];
'o-p71fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p71fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p71fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p70fail1'(suite) -> [];
'o-p70fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p70fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p70fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p69fail3'(suite) -> [];
'o-p69fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p69fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p69fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p69fail2'(suite) -> [];
'o-p69fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p69fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p69fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p69fail1'(suite) -> [];
'o-p69fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p69fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p69fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p68fail3'(suite) -> [];
'o-p68fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p68fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p68fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p68fail2'(suite) -> [];
'o-p68fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p68fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p68fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p68fail1'(suite) -> [];
'o-p68fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p68fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p68fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p66fail6'(suite) -> [];
'o-p66fail6'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p66fail6.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p66fail6.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p66fail5'(suite) -> [];
'o-p66fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p66fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p66fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p66fail4'(suite) -> [];
'o-p66fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p66fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p66fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p66fail3'(suite) -> [];
'o-p66fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p66fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p66fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p66fail2'(suite) -> [];
'o-p66fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p66fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p66fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p66fail1'(suite) -> [];
'o-p66fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p66fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p66fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p64fail2'(suite) -> [];
'o-p64fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p64fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p64fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p64fail1'(suite) -> [];
'o-p64fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p64fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p64fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p63fail2'(suite) -> [];
'o-p63fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p63fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p63fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p63fail1'(suite) -> [];
'o-p63fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p63fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p63fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p62fail2'(suite) -> [];
'o-p62fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p62fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p62fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p62fail1'(suite) -> [];
'o-p62fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p62fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p62fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p61fail1'(suite) -> [];
'o-p61fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p61fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p61fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p60fail5'(suite) -> [];
'o-p60fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p60fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p60fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p60fail4'(suite) -> [];
'o-p60fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p60fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p60fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p60fail3'(suite) -> [];
'o-p60fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p60fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p60fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p60fail2'(suite) -> [];
'o-p60fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p60fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p60fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p60fail1'(suite) -> [];
'o-p60fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p60fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p60fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p59fail3'(suite) -> [];
'o-p59fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p59fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p59fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p59fail2'(suite) -> [];
'o-p59fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p59fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p59fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p59fail1'(suite) -> [];
'o-p59fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p59fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p59fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p58fail8'(suite) -> [];
'o-p58fail8'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p58fail8.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p58fail8.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p58fail7'(suite) -> [];
'o-p58fail7'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p58fail7.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p58fail7.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p58fail6'(suite) -> [];
'o-p58fail6'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p58fail6.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p58fail6.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p58fail5'(suite) -> [];
'o-p58fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p58fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p58fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p58fail4'(suite) -> [];
'o-p58fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p58fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p58fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p58fail3'(suite) -> [];
'o-p58fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p58fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p58fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p58fail2'(suite) -> [];
'o-p58fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p58fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p58fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p58fail1'(suite) -> [];
'o-p58fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p58fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p58fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p57fail1'(suite) -> [];
'o-p57fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p57fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p57fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p56fail5'(suite) -> [];
'o-p56fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p56fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p56fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p56fail4'(suite) -> [];
'o-p56fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p56fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p56fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p56fail3'(suite) -> [];
'o-p56fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p56fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p56fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p56fail2'(suite) -> [];
'o-p56fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p56fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p56fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p56fail1'(suite) -> [];
'o-p56fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p56fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p56fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p55fail1'(suite) -> [];
'o-p55fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p55fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p55fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p54fail1'(suite) -> [];
'o-p54fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p54fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p54fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p53fail5'(suite) -> [];
'o-p53fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p53fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p53fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p53fail4'(suite) -> [];
'o-p53fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p53fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p53fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p53fail3'(suite) -> [];
'o-p53fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p53fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p53fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p53fail2'(suite) -> [];
'o-p53fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p53fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p53fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p53fail1'(suite) -> [];
'o-p53fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p53fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p53fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p52fail2'(suite) -> [];
'o-p52fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p52fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p52fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p52fail1'(suite) -> [];
'o-p52fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p52fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p52fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p51fail7'(suite) -> [];
'o-p51fail7'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p51fail7.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p51fail7.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p51fail6'(suite) -> [];
'o-p51fail6'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p51fail6.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p51fail6.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p51fail5'(suite) -> [];
'o-p51fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p51fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p51fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p51fail4'(suite) -> [];
'o-p51fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p51fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p51fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p51fail3'(suite) -> [];
'o-p51fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p51fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p51fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p51fail2'(suite) -> [];
'o-p51fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p51fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p51fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p51fail1'(suite) -> [];
'o-p51fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p51fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p51fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p50fail1'(suite) -> [];
'o-p50fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p50fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p50fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p49fail1'(suite) -> [];
'o-p49fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p49fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p49fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p48fail2'(suite) -> [];
'o-p48fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p48fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p48fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p48fail1'(suite) -> [];
'o-p48fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p48fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p48fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p47fail4'(suite) -> [];
'o-p47fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p47fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p47fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p47fail3'(suite) -> [];
'o-p47fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p47fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p47fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p47fail2'(suite) -> [];
'o-p47fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p47fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p47fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p47fail1'(suite) -> [];
'o-p47fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p47fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p47fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p46fail6'(suite) -> [];
'o-p46fail6'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p46fail6.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p46fail6.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p46fail5'(suite) -> [];
'o-p46fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p46fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p46fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p46fail4'(suite) -> [];
'o-p46fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p46fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p46fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p46fail3'(suite) -> [];
'o-p46fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p46fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p46fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p46fail2'(suite) -> [];
'o-p46fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p46fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p46fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p46fail1'(suite) -> [];
'o-p46fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p46fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p46fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p45fail4'(suite) -> [];
'o-p45fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p45fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p45fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p45fail3'(suite) -> [];
'o-p45fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p45fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p45fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p45fail2'(suite) -> [];
'o-p45fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p45fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p45fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p45fail1'(suite) -> [];
'o-p45fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p45fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p45fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44fail5'(suite) -> [];
'o-p44fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44fail4'(suite) -> [];
'o-p44fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44fail3'(suite) -> [];
'o-p44fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44fail2'(suite) -> [];
'o-p44fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44fail1'(suite) -> [];
'o-p44fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p43fail3'(suite) -> [];
'o-p43fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p43fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p43fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p43fail2'(suite) -> [];
'o-p43fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p43fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p43fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p43fail1'(suite) -> [];
'o-p43fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p43fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p43fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p42fail3'(suite) -> [];
'o-p42fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p42fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p42fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p42fail2'(suite) -> [];
'o-p42fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p42fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p42fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p42fail1'(suite) -> [];
'o-p42fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p42fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p42fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p41fail3'(suite) -> [];
'o-p41fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p41fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p41fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p41fail2'(suite) -> [];
'o-p41fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p41fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p41fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p41fail1'(suite) -> [];
'o-p41fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p41fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p41fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p40fail4'(suite) -> [];
'o-p40fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p40fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p40fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p40fail3'(suite) -> [];
'o-p40fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p40fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p40fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p40fail2'(suite) -> [];
'o-p40fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p40fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p40fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p40fail1'(suite) -> [];
'o-p40fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p40fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p40fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p39fail5'(suite) -> [];
'o-p39fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p39fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p39fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p39fail4'(suite) -> [];
'o-p39fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p39fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p39fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p39fail3'(suite) -> [];
'o-p39fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p39fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p39fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p39fail2'(suite) -> [];
'o-p39fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p39fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p39fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p39fail1'(suite) -> [];
'o-p39fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p39fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p39fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p32fail5'(suite) -> [];
'o-p32fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p32fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p32fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p32fail4'(suite) -> [];
'o-p32fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p32fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p32fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p32fail3'(suite) -> [];
'o-p32fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p32fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p32fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p32fail2'(suite) -> [];
'o-p32fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p32fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p32fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p32fail1'(suite) -> [];
'o-p32fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p32fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p32fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p31fail1'(suite) -> [];
'o-p31fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p31fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p31fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p30fail1'(suite) -> [];
'o-p30fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p30fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p30fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p29fail1'(suite) -> [];
'o-p29fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p29fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p29fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p28fail1'(suite) -> [];
'o-p28fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p28fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p28fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p27fail1'(suite) -> [];
'o-p27fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p27fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p27fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p26fail2'(suite) -> [];
'o-p26fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p26fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p26fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p26fail1'(suite) -> [];
'o-p26fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p26fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p26fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p25fail1'(suite) -> [];
'o-p25fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p25fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p25fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p24fail2'(suite) -> [];
'o-p24fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p24fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p24fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p24fail1'(suite) -> [];
'o-p24fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p24fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p24fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p23fail5'(suite) -> [];
'o-p23fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p23fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p23fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p23fail4'(suite) -> [];
'o-p23fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p23fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p23fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p23fail3'(suite) -> [];
'o-p23fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p23fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p23fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p23fail2'(suite) -> [];
'o-p23fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p23fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p23fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p23fail1'(suite) -> [];
'o-p23fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p23fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p23fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p22fail2'(suite) -> [];
'o-p22fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p22fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p22fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p22fail1'(suite) -> [];
'o-p22fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p22fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p22fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p18fail3'(suite) -> [];
'o-p18fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p18fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p18fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p18fail2'(suite) -> [];
'o-p18fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p18fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p18fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p18fail1'(suite) -> [];
'o-p18fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p18fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p18fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p16fail3'(suite) -> [];
'o-p16fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p16fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p16fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p16fail2'(suite) -> [];
'o-p16fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p16fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p16fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p16fail1'(suite) -> [];
'o-p16fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p16fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p16fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p15fail3'(suite) -> [];
'o-p15fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p15fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p15fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p15fail2'(suite) -> [];
'o-p15fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p15fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p15fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p15fail1'(suite) -> [];
'o-p15fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p15fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p15fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p14fail3'(suite) -> [];
'o-p14fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p14fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p14fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p14fail2'(suite) -> [];
'o-p14fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p14fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p14fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p14fail1'(suite) -> [];
'o-p14fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p14fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p14fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p12fail7'(suite) -> [];
'o-p12fail7'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p12fail7.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p12fail7.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p12fail6'(suite) -> [];
'o-p12fail6'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p12fail6.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p12fail6.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p12fail5'(suite) -> [];
'o-p12fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p12fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p12fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p12fail4'(suite) -> [];
'o-p12fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p12fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p12fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p12fail3'(suite) -> [];
'o-p12fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p12fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p12fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p12fail2'(suite) -> [];
'o-p12fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p12fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p12fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p12fail1'(suite) -> [];
'o-p12fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p12fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p12fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p11fail2'(suite) -> [];
'o-p11fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p11fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p11fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p11fail1'(suite) -> [];
'o-p11fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p11fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p11fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p10fail3'(suite) -> [];
'o-p10fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p10fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p10fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p10fail2'(suite) -> [];
'o-p10fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p10fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p10fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p10fail1'(suite) -> [];
'o-p10fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p10fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p10fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p09fail5'(suite) -> [];
'o-p09fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p09fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p09fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p09fail4'(suite) -> [];
'o-p09fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p09fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p09fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p09fail3'(suite) -> [];
'o-p09fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p09fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p09fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p09fail2'(suite) -> [];
'o-p09fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p09fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p09fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p09fail1'(suite) -> [];
'o-p09fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p09fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p09fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p05fail5'(suite) -> [];
'o-p05fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p05fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p05fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p05fail4'(suite) -> [];
'o-p05fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p05fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p05fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p05fail3'(suite) -> [];
'o-p05fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p05fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p05fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p05fail2'(suite) -> [];
'o-p05fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p05fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p05fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p05fail1'(suite) -> [];
'o-p05fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p05fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p05fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p04fail3'(suite) -> [];
'o-p04fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p04fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p04fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p04fail2'(suite) -> [];
'o-p04fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p04fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p04fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p04fail1'(suite) -> [];
'o-p04fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p04fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p04fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail9'(suite) -> [];
'o-p03fail9'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail9.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail9.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail8'(suite) -> [];
'o-p03fail8'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail8.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail8.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail7'(suite) -> [];
'o-p03fail7'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail7.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail7.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail5'(suite) -> [];
'o-p03fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail4'(suite) -> [];
'o-p03fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail3'(suite) -> [];
'o-p03fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail29'(suite) -> [];
'o-p03fail29'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail29.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail29.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail28'(suite) -> [];
'o-p03fail28'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail28.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail28.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail27'(suite) -> [];
'o-p03fail27'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail27.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail27.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail26'(suite) -> [];
'o-p03fail26'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail26.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail26.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail25'(suite) -> [];
'o-p03fail25'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail25.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail25.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail24'(suite) -> [];
'o-p03fail24'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail24.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail24.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail23'(suite) -> [];
'o-p03fail23'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail23.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail23.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail22'(suite) -> [];
'o-p03fail22'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail22.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail22.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail21'(suite) -> [];
'o-p03fail21'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail21.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail21.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail20'(suite) -> [];
'o-p03fail20'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail20.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail20.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail2'(suite) -> [];
'o-p03fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail19'(suite) -> [];
'o-p03fail19'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail19.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail19.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail18'(suite) -> [];
'o-p03fail18'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail18.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail18.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail17'(suite) -> [];
'o-p03fail17'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail17.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail17.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail16'(suite) -> [];
'o-p03fail16'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail16.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail16.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail15'(suite) -> [];
'o-p03fail15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail14'(suite) -> [];
'o-p03fail14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail13'(suite) -> [];
'o-p03fail13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail12'(suite) -> [];
'o-p03fail12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail11'(suite) -> [];
'o-p03fail11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail10'(suite) -> [];
'o-p03fail10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p03fail1'(suite) -> [];
'o-p03fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail9'(suite) -> [];
'o-p02fail9'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail9.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail9.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail8'(suite) -> [];
'o-p02fail8'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail8.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail8.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail7'(suite) -> [];
'o-p02fail7'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail7.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail7.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail6'(suite) -> [];
'o-p02fail6'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail6.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail6.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail5'(suite) -> [];
'o-p02fail5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail4'(suite) -> [];
'o-p02fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail31'(suite) -> [];
'o-p02fail31'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail31.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail31.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail30'(suite) -> [];
'o-p02fail30'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail30.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail30.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail3'(suite) -> [];
'o-p02fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail29'(suite) -> [];
'o-p02fail29'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail29.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail29.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail28'(suite) -> [];
'o-p02fail28'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail28.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail28.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail27'(suite) -> [];
'o-p02fail27'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail27.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail27.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail26'(suite) -> [];
'o-p02fail26'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail26.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail26.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail25'(suite) -> [];
'o-p02fail25'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail25.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail25.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail24'(suite) -> [];
'o-p02fail24'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail24.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail24.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail23'(suite) -> [];
'o-p02fail23'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail23.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail23.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail22'(suite) -> [];
'o-p02fail22'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail22.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail22.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail21'(suite) -> [];
'o-p02fail21'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail21.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail21.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail20'(suite) -> [];
'o-p02fail20'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail20.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail20.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail2'(suite) -> [];
'o-p02fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail19'(suite) -> [];
'o-p02fail19'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail19.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail19.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail18'(suite) -> [];
'o-p02fail18'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail18.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail18.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail17'(suite) -> [];
'o-p02fail17'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail17.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail17.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail16'(suite) -> [];
'o-p02fail16'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail16.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail16.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail15'(suite) -> [];
'o-p02fail15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail14'(suite) -> [];
'o-p02fail14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail13'(suite) -> [];
'o-p02fail13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail12'(suite) -> [];
'o-p02fail12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail11'(suite) -> [];
'o-p02fail11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail10'(suite) -> [];
'o-p02fail10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p02fail1'(suite) -> [];
'o-p02fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p02fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p02fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p01fail4'(suite) -> [];
'o-p01fail4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p01fail4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p01fail4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p01fail3'(suite) -> [];
'o-p01fail3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p01fail3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p01fail3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p01fail2'(suite) -> [];
'o-p01fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p01fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p01fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p01fail1'(suite) -> [];
'o-p01fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p01fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p01fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-e2'(suite) -> [];
'o-e2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-e2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-e2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p75pass1'(suite) -> [];
'o-p75pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p75pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p75pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p74pass1'(suite) -> [];
'o-p74pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p74pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p74pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p66pass1'(suite) -> [];
'o-p66pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p66pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p66pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44pass5'(suite) -> [];
'o-p44pass5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44pass5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44pass5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44pass4'(suite) -> [];
'o-p44pass4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44pass4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44pass4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44pass3'(suite) -> [];
'o-p44pass3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44pass3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44pass3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44pass2'(suite) -> [];
'o-p44pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p44pass1'(suite) -> [];
'o-p44pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p44pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p44pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p42pass2'(suite) -> [];
'o-p42pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p42pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p42pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p42pass1'(suite) -> [];
'o-p42pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p42pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p42pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p41pass2'(suite) -> [];
'o-p41pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p41pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p41pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p41pass1'(suite) -> [];
'o-p41pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p41pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p41pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p40pass4'(suite) -> [];
'o-p40pass4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p40pass4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p40pass4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p40pass3'(suite) -> [];
'o-p40pass3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p40pass3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p40pass3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p40pass2'(suite) -> [];
'o-p40pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p40pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p40pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p40pass1'(suite) -> [];
'o-p40pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p40pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p40pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p39pass2'(suite) -> [];
'o-p39pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p39pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p39pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p39pass1'(suite) -> [];
'o-p39pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p39pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p39pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p32pass2'(suite) -> [];
'o-p32pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p32pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p32pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p32pass1'(suite) -> [];
'o-p32pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p32pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p32pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p27pass4'(suite) -> [];
'o-p27pass4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p27pass4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p27pass4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p27pass3'(suite) -> [];
'o-p27pass3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p27pass3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p27pass3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p27pass2'(suite) -> [];
'o-p27pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p27pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p27pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p27pass1'(suite) -> [];
'o-p27pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p27pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p27pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p26pass1'(suite) -> [];
'o-p26pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p26pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p26pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p25pass2'(suite) -> [];
'o-p25pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p25pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p25pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p25pass1'(suite) -> [];
'o-p25pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p25pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p25pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p24pass4'(suite) -> [];
'o-p24pass4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p24pass4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p24pass4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p24pass3'(suite) -> [];
'o-p24pass3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p24pass3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p24pass3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p24pass2'(suite) -> [];
'o-p24pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p24pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p24pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p24pass1'(suite) -> [];
'o-p24pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p24pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p24pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p23pass4'(suite) -> [];
'o-p23pass4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p23pass4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p23pass4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p23pass3'(suite) -> [];
'o-p23pass3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p23pass3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p23pass3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p23pass2'(suite) -> [];
'o-p23pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p23pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p23pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p23pass1'(suite) -> [];
'o-p23pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p23pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p23pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p22pass3'(suite) -> [];
'o-p22pass3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p22pass3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p22pass3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p22pass2'(suite) -> [];
'o-p22pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p22pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p22pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p22pass1'(suite) -> [];
'o-p22pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p22pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p22pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p18pass1'(suite) -> [];
'o-p18pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p18pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p18pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p16pass3'(suite) -> [];
'o-p16pass3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p16pass3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p16pass3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p16pass2'(suite) -> [];
'o-p16pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p16pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p16pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p16pass1'(suite) -> [];
'o-p16pass1'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p16pass1.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p16pass1.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Hard to interpret the meaning of the XML1.0 spec. See section 2.6 and 2.3."]}.
-'o-p15pass1'(suite) -> [];
'o-p15pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p15pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p15pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p14pass1'(suite) -> [];
'o-p14pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p14pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p14pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p10pass1'(suite) -> [];
'o-p10pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p10pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p10pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p08fail2'(suite) -> [];
'o-p08fail2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p08fail2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p08fail2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p08fail1'(suite) -> [];
'o-p08fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p08fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p08fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p06fail1'(suite) -> [];
'o-p06fail1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p06fail1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p06fail1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p05pass1'(suite) -> [];
'o-p05pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p05pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p05pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p04pass1'(suite) -> [];
'o-p04pass1'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p04pass1.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p04pass1.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Fails to handle name containing characters > x#ff, since they are converted to atoms"]}.
-'o-p03pass1'(suite) -> [];
'o-p03pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p03pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p03pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p01pass3'(suite) -> [];
'o-p01pass3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p01pass3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p01pass3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p01pass1'(suite) -> [];
'o-p01pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p01pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p01pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p76pass1'(suite) -> [];
'o-p76pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p76pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p76pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p73pass1'(suite) -> [];
'o-p73pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p73pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p73pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p72pass1'(suite) -> [];
'o-p72pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p72pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p72pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p71pass1'(suite) -> [];
'o-p71pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p71pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p71pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p70pass1'(suite) -> [];
'o-p70pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p70pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p70pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p69pass1'(suite) -> [];
'o-p69pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p69pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p69pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p68pass1'(suite) -> [];
'o-p68pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p68pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p68pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p64pass1'(suite) -> [];
'o-p64pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p64pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p64pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p63pass1'(suite) -> [];
'o-p63pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p63pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p63pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p62pass1'(suite) -> [];
'o-p62pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p62pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p62pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p61pass1'(suite) -> [];
'o-p61pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p61pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p61pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p60pass1'(suite) -> [];
'o-p60pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p60pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p60pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p59pass1'(suite) -> [];
'o-p59pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p59pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p59pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p58pass1'(suite) -> [];
'o-p58pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p58pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p58pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p57pass1'(suite) -> [];
'o-p57pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p57pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p57pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p56pass1'(suite) -> [];
'o-p56pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p56pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p56pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p55pass1'(suite) -> [];
'o-p55pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p55pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p55pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p54pass1'(suite) -> [];
'o-p54pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p54pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p54pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p53pass1'(suite) -> [];
'o-p53pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p53pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p53pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p52pass1'(suite) -> [];
'o-p52pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p52pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p52pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p51pass1'(suite) -> [];
'o-p51pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p51pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p51pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p50pass1'(suite) -> [];
'o-p50pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p50pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p50pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p49pass1'(suite) -> [];
'o-p49pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p49pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p49pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p48pass1'(suite) -> [];
'o-p48pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p48pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p48pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p47pass1'(suite) -> [];
'o-p47pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p47pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p47pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p46pass1'(suite) -> [];
'o-p46pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p46pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p46pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p45pass1'(suite) -> [];
'o-p45pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p45pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p45pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p43pass1'(suite) -> [];
'o-p43pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p43pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p43pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p31pass2'(suite) -> [];
'o-p31pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p31pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p31pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p31pass1'(suite) -> [];
'o-p31pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p31pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p31pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p30pass2'(suite) -> [];
'o-p30pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p30pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p30pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p30pass1'(suite) -> [];
'o-p30pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p30pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p30pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p29pass1'(suite) -> [];
'o-p29pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p29pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p29pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p28pass5'(suite) -> [];
'o-p28pass5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p28pass5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p28pass5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p28pass4'(suite) -> [];
'o-p28pass4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p28pass4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p28pass4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p28pass3'(suite) -> [];
'o-p28pass3'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p28pass3.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p28pass3.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p28pass1'(suite) -> [];
'o-p28pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p28pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p28pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p22pass6'(suite) -> [];
'o-p22pass6'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p22pass6.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p22pass6.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p22pass5'(suite) -> [];
'o-p22pass5'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p22pass5.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p22pass5.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p22pass4'(suite) -> [];
'o-p22pass4'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p22pass4.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p22pass4.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p12pass1'(suite) -> [];
'o-p12pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p12pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p12pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p09pass1'(suite) -> [];
'o-p09pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p09pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p09pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p08pass1'(suite) -> [];
'o-p08pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p08pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p08pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p07pass1'(suite) -> [];
'o-p07pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p07pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p07pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p06pass1'(suite) -> [];
'o-p06pass1'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p06pass1.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p06pass1.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'o-p01pass2'(suite) -> [];
'o-p01pass2'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),oasis,"o-p01pass2.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[oasis,"o-p01pass2.xml"]),[]),
+ xmerl:export([A],xmerl_test).
%%----------------------------------------------------------------------
-'ibm-invalid-P76-ibm76i01'(suite) -> [];
'ibm-invalid-P76-ibm76i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P76-ibm76i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P76-ibm76i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P69-ibm69i04'(suite) -> [];
'ibm-invalid-P69-ibm69i04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P69-ibm69i04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P69-ibm69i04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P69-ibm69i03'(suite) -> [];
'ibm-invalid-P69-ibm69i03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P69-ibm69i03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P69-ibm69i03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P69-ibm69i02'(suite) -> [];
'ibm-invalid-P69-ibm69i02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P69-ibm69i02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P69-ibm69i02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P69-ibm69i01'(suite) -> [];
'ibm-invalid-P69-ibm69i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P69-ibm69i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P69-ibm69i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P68-ibm68i04'(suite) -> [];
'ibm-invalid-P68-ibm68i04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P68-ibm68i04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P68-ibm68i04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P68-ibm68i03'(suite) -> [];
'ibm-invalid-P68-ibm68i03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P68-ibm68i03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P68-ibm68i03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P68-ibm68i02'(suite) -> [];
'ibm-invalid-P68-ibm68i02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P68-ibm68i02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P68-ibm68i02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P68-ibm68i01'(suite) -> [];
'ibm-invalid-P68-ibm68i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P68-ibm68i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P68-ibm68i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P60-ibm60i04'(suite) -> [];
'ibm-invalid-P60-ibm60i04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P60-ibm60i04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P60-ibm60i04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P60-ibm60i03'(suite) -> [];
'ibm-invalid-P60-ibm60i03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P60-ibm60i03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P60-ibm60i03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P60-ibm60i02'(suite) -> [];
'ibm-invalid-P60-ibm60i02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P60-ibm60i02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P60-ibm60i02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P60-ibm60i01'(suite) -> [];
'ibm-invalid-P60-ibm60i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P60-ibm60i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P60-ibm60i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P59-ibm59i01'(suite) -> [];
'ibm-invalid-P59-ibm59i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P59-ibm59i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P59-ibm59i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P58-ibm58i02'(suite) -> [];
'ibm-invalid-P58-ibm58i02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P58-ibm58i02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P58-ibm58i02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P58-ibm58i01'(suite) -> [];
'ibm-invalid-P58-ibm58i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P58-ibm58i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P58-ibm58i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i18'(suite) -> [];
'ibm-invalid-P56-ibm56i18'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i18.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i18.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i17'(suite) -> [];
'ibm-invalid-P56-ibm56i17'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i17.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i17.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i16'(suite) -> [];
'ibm-invalid-P56-ibm56i16'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i16.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i16.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i15'(suite) -> [];
'ibm-invalid-P56-ibm56i15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i14'(suite) -> [];
'ibm-invalid-P56-ibm56i14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i13'(suite) -> [];
'ibm-invalid-P56-ibm56i13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i12'(suite) -> [];
'ibm-invalid-P56-ibm56i12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i11'(suite) -> [];
'ibm-invalid-P56-ibm56i11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i10'(suite) -> [];
'ibm-invalid-P56-ibm56i10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i09'(suite) -> [];
'ibm-invalid-P56-ibm56i09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i08'(suite) -> [];
'ibm-invalid-P56-ibm56i08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i07'(suite) -> [];
'ibm-invalid-P56-ibm56i07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i06'(suite) -> [];
'ibm-invalid-P56-ibm56i06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i05'(suite) -> [];
'ibm-invalid-P56-ibm56i05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i03'(suite) -> [];
'ibm-invalid-P56-ibm56i03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i02'(suite) -> [];
'ibm-invalid-P56-ibm56i02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P56-ibm56i01'(suite) -> [];
'ibm-invalid-P56-ibm56i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P56-ibm56i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P56-ibm56i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P51-ibm51i03'(suite) -> [];
'ibm-invalid-P51-ibm51i03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P51-ibm51i03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P51-ibm51i03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P51-ibm51i01'(suite) -> [];
'ibm-invalid-P51-ibm51i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P51-ibm51i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P51-ibm51i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P50-ibm50i01'(suite) -> [];
'ibm-invalid-P50-ibm50i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P50-ibm50i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P50-ibm50i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P49-ibm49i01'(suite) -> [];
'ibm-invalid-P49-ibm49i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P49-ibm49i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P49-ibm49i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P45-ibm45i01'(suite) -> [];
'ibm-invalid-P45-ibm45i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P45-ibm45i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P45-ibm45i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P41-ibm41i02'(suite) -> [];
'ibm-invalid-P41-ibm41i02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P41-ibm41i02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P41-ibm41i02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P41-ibm41i01'(suite) -> [];
'ibm-invalid-P41-ibm41i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P41-ibm41i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P41-ibm41i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P39-ibm39i04'(suite) -> [];
'ibm-invalid-P39-ibm39i04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P39-ibm39i04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P39-ibm39i04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P39-ibm39i03'(suite) -> [];
'ibm-invalid-P39-ibm39i03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P39-ibm39i03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P39-ibm39i03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P39-ibm39i02'(suite) -> [];
'ibm-invalid-P39-ibm39i02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P39-ibm39i02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P39-ibm39i02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P39-ibm39i01'(suite) -> [];
'ibm-invalid-P39-ibm39i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P39-ibm39i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P39-ibm39i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P32-ibm32i04'(suite) -> [];
'ibm-invalid-P32-ibm32i04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P32-ibm32i04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P32-ibm32i04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P32-ibm32i03'(suite) -> [];
'ibm-invalid-P32-ibm32i03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P32-ibm32i03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P32-ibm32i03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P32-ibm32i01'(suite) -> [];
'ibm-invalid-P32-ibm32i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P32-ibm32i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P32-ibm32i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-invalid-P28-ibm28i01'(suite) -> [];
'ibm-invalid-P28-ibm28i01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-invalid-P28-ibm28i01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-invalid-P28-ibm28i01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
%%----------------------------------------------------------------------
-'ibm-not-wf-P89-ibm89n12'(suite) -> [];
'ibm-not-wf-P89-ibm89n12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n11'(suite) -> [];
'ibm-not-wf-P89-ibm89n11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n10'(suite) -> [];
'ibm-not-wf-P89-ibm89n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n09'(suite) -> [];
'ibm-not-wf-P89-ibm89n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n08'(suite) -> [];
'ibm-not-wf-P89-ibm89n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n07'(suite) -> [];
'ibm-not-wf-P89-ibm89n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n06'(suite) -> [];
'ibm-not-wf-P89-ibm89n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n05'(suite) -> [];
'ibm-not-wf-P89-ibm89n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n04'(suite) -> [];
'ibm-not-wf-P89-ibm89n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n03'(suite) -> [];
'ibm-not-wf-P89-ibm89n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n02'(suite) -> [];
'ibm-not-wf-P89-ibm89n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P89-ibm89n01'(suite) -> [];
'ibm-not-wf-P89-ibm89n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P89-ibm89n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P89-ibm89n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n16'(suite) -> [];
'ibm-not-wf-P88-ibm88n16'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n16.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n16.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n15'(suite) -> [];
'ibm-not-wf-P88-ibm88n15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n14'(suite) -> [];
'ibm-not-wf-P88-ibm88n14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n13'(suite) -> [];
'ibm-not-wf-P88-ibm88n13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n12'(suite) -> [];
'ibm-not-wf-P88-ibm88n12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n11'(suite) -> [];
'ibm-not-wf-P88-ibm88n11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n10'(suite) -> [];
'ibm-not-wf-P88-ibm88n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n09'(suite) -> [];
'ibm-not-wf-P88-ibm88n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n08'(suite) -> [];
'ibm-not-wf-P88-ibm88n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n06'(suite) -> [];
'ibm-not-wf-P88-ibm88n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n05'(suite) -> [];
'ibm-not-wf-P88-ibm88n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n04'(suite) -> [];
'ibm-not-wf-P88-ibm88n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n03'(suite) -> [];
'ibm-not-wf-P88-ibm88n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n02'(suite) -> [];
'ibm-not-wf-P88-ibm88n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P88-ibm88n01'(suite) -> [];
'ibm-not-wf-P88-ibm88n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P88-ibm88n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P88-ibm88n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n85'(suite) -> [];
'ibm-not-wf-P87-ibm87n85'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n85.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n85.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n84'(suite) -> [];
'ibm-not-wf-P87-ibm87n84'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n84.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n84.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n83'(suite) -> [];
'ibm-not-wf-P87-ibm87n83'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n83.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n83.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n82'(suite) -> [];
'ibm-not-wf-P87-ibm87n82'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n82.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n82.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n81'(suite) -> [];
'ibm-not-wf-P87-ibm87n81'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n81.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n81.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n80'(suite) -> [];
'ibm-not-wf-P87-ibm87n80'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n80.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n80.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n79'(suite) -> [];
'ibm-not-wf-P87-ibm87n79'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n79.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n79.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n78'(suite) -> [];
'ibm-not-wf-P87-ibm87n78'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n78.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n78.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n77'(suite) -> [];
'ibm-not-wf-P87-ibm87n77'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n77.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n77.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n76'(suite) -> [];
'ibm-not-wf-P87-ibm87n76'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n76.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n76.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n75'(suite) -> [];
'ibm-not-wf-P87-ibm87n75'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n75.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n75.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n74'(suite) -> [];
'ibm-not-wf-P87-ibm87n74'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n74.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n74.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n73'(suite) -> [];
'ibm-not-wf-P87-ibm87n73'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n73.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n73.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n72'(suite) -> [];
'ibm-not-wf-P87-ibm87n72'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n72.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n72.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n71'(suite) -> [];
'ibm-not-wf-P87-ibm87n71'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n71.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n71.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n70'(suite) -> [];
'ibm-not-wf-P87-ibm87n70'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n70.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n70.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n69'(suite) -> [];
'ibm-not-wf-P87-ibm87n69'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n69.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n69.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n68'(suite) -> [];
'ibm-not-wf-P87-ibm87n68'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n68.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n68.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n67'(suite) -> [];
'ibm-not-wf-P87-ibm87n67'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n67.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n67.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n66'(suite) -> [];
'ibm-not-wf-P87-ibm87n66'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n66.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n66.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n64'(suite) -> [];
'ibm-not-wf-P87-ibm87n64'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n64.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n64.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n63'(suite) -> [];
'ibm-not-wf-P87-ibm87n63'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n63.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n63.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n62'(suite) -> [];
'ibm-not-wf-P87-ibm87n62'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n62.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n62.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n61'(suite) -> [];
'ibm-not-wf-P87-ibm87n61'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n61.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n61.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n60'(suite) -> [];
'ibm-not-wf-P87-ibm87n60'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n60.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n60.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n59'(suite) -> [];
'ibm-not-wf-P87-ibm87n59'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n59.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n59.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n58'(suite) -> [];
'ibm-not-wf-P87-ibm87n58'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n58.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n58.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n57'(suite) -> [];
'ibm-not-wf-P87-ibm87n57'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n57.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n57.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n56'(suite) -> [];
'ibm-not-wf-P87-ibm87n56'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n56.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n56.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n55'(suite) -> [];
'ibm-not-wf-P87-ibm87n55'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n55.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n55.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n54'(suite) -> [];
'ibm-not-wf-P87-ibm87n54'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n54.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n54.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n53'(suite) -> [];
'ibm-not-wf-P87-ibm87n53'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n53.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n53.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n52'(suite) -> [];
'ibm-not-wf-P87-ibm87n52'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n52.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n52.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n51'(suite) -> [];
'ibm-not-wf-P87-ibm87n51'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n51.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n51.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n50'(suite) -> [];
'ibm-not-wf-P87-ibm87n50'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n50.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n50.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n49'(suite) -> [];
'ibm-not-wf-P87-ibm87n49'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n49.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n49.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n48'(suite) -> [];
'ibm-not-wf-P87-ibm87n48'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n48.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n48.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n47'(suite) -> [];
'ibm-not-wf-P87-ibm87n47'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n47.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n47.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n46'(suite) -> [];
'ibm-not-wf-P87-ibm87n46'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n46.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n46.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n45'(suite) -> [];
'ibm-not-wf-P87-ibm87n45'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n45.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n45.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n44'(suite) -> [];
'ibm-not-wf-P87-ibm87n44'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n44.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n44.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n43'(suite) -> [];
'ibm-not-wf-P87-ibm87n43'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n43.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n43.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n42'(suite) -> [];
'ibm-not-wf-P87-ibm87n42'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n42.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n42.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n41'(suite) -> [];
'ibm-not-wf-P87-ibm87n41'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n41.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n41.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n40'(suite) -> [];
'ibm-not-wf-P87-ibm87n40'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n40.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n40.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n39'(suite) -> [];
'ibm-not-wf-P87-ibm87n39'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n39.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n39.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n38'(suite) -> [];
'ibm-not-wf-P87-ibm87n38'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n38.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n38.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n37'(suite) -> [];
'ibm-not-wf-P87-ibm87n37'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n37.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n37.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n36'(suite) -> [];
'ibm-not-wf-P87-ibm87n36'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n36.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n36.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n35'(suite) -> [];
'ibm-not-wf-P87-ibm87n35'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n35.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n35.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n34'(suite) -> [];
'ibm-not-wf-P87-ibm87n34'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n34.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n34.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n33'(suite) -> [];
'ibm-not-wf-P87-ibm87n33'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n33.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n33.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n32'(suite) -> [];
'ibm-not-wf-P87-ibm87n32'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n32.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n32.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n31'(suite) -> [];
'ibm-not-wf-P87-ibm87n31'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n31.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n31.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n30'(suite) -> [];
'ibm-not-wf-P87-ibm87n30'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n30.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n30.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n29'(suite) -> [];
'ibm-not-wf-P87-ibm87n29'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n29.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n29.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n28'(suite) -> [];
'ibm-not-wf-P87-ibm87n28'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n28.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n28.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n27'(suite) -> [];
'ibm-not-wf-P87-ibm87n27'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n27.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n27.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n26'(suite) -> [];
'ibm-not-wf-P87-ibm87n26'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n26.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n26.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n25'(suite) -> [];
'ibm-not-wf-P87-ibm87n25'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n25.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n25.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n24'(suite) -> [];
'ibm-not-wf-P87-ibm87n24'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n24.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n24.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n23'(suite) -> [];
'ibm-not-wf-P87-ibm87n23'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n23.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n23.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n22'(suite) -> [];
'ibm-not-wf-P87-ibm87n22'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n22.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n22.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n21'(suite) -> [];
'ibm-not-wf-P87-ibm87n21'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n21.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n21.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n20'(suite) -> [];
'ibm-not-wf-P87-ibm87n20'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n20.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n20.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n19'(suite) -> [];
'ibm-not-wf-P87-ibm87n19'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n19.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n19.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n18'(suite) -> [];
'ibm-not-wf-P87-ibm87n18'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n18.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n18.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n17'(suite) -> [];
'ibm-not-wf-P87-ibm87n17'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n17.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n17.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n16'(suite) -> [];
'ibm-not-wf-P87-ibm87n16'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n16.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n16.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n15'(suite) -> [];
'ibm-not-wf-P87-ibm87n15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n14'(suite) -> [];
'ibm-not-wf-P87-ibm87n14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n13'(suite) -> [];
'ibm-not-wf-P87-ibm87n13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n12'(suite) -> [];
'ibm-not-wf-P87-ibm87n12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n11'(suite) -> [];
'ibm-not-wf-P87-ibm87n11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n10'(suite) -> [];
'ibm-not-wf-P87-ibm87n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n09'(suite) -> [];
'ibm-not-wf-P87-ibm87n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n08'(suite) -> [];
'ibm-not-wf-P87-ibm87n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n07'(suite) -> [];
'ibm-not-wf-P87-ibm87n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n06'(suite) -> [];
'ibm-not-wf-P87-ibm87n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n05'(suite) -> [];
'ibm-not-wf-P87-ibm87n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n04'(suite) -> [];
'ibm-not-wf-P87-ibm87n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n03'(suite) -> [];
'ibm-not-wf-P87-ibm87n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n02'(suite) -> [];
'ibm-not-wf-P87-ibm87n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P87-ibm87n01'(suite) -> [];
'ibm-not-wf-P87-ibm87n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P87-ibm87n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P87-ibm87n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P86-ibm86n04'(suite) -> [];
'ibm-not-wf-P86-ibm86n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P86-ibm86n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P86-ibm86n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P86-ibm86n03'(suite) -> [];
'ibm-not-wf-P86-ibm86n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P86-ibm86n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P86-ibm86n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P86-ibm86n02'(suite) -> [];
'ibm-not-wf-P86-ibm86n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P86-ibm86n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P86-ibm86n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P86-ibm86n01'(suite) -> [];
'ibm-not-wf-P86-ibm86n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P86-ibm86n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P86-ibm86n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n99'(suite) -> [];
'ibm-not-wf-P85-ibm85n99'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n99.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n99.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n98'(suite) -> [];
'ibm-not-wf-P85-ibm85n98'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n98.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n98.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n97'(suite) -> [];
'ibm-not-wf-P85-ibm85n97'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n97.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n97.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n96'(suite) -> [];
'ibm-not-wf-P85-ibm85n96'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n96.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n96.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n95'(suite) -> [];
'ibm-not-wf-P85-ibm85n95'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n95.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n95.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n94'(suite) -> [];
'ibm-not-wf-P85-ibm85n94'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n94.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n94.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n93'(suite) -> [];
'ibm-not-wf-P85-ibm85n93'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n93.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n93.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n92'(suite) -> [];
'ibm-not-wf-P85-ibm85n92'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n92.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n92.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n91'(suite) -> [];
'ibm-not-wf-P85-ibm85n91'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n91.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n91.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n90'(suite) -> [];
'ibm-not-wf-P85-ibm85n90'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n90.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n90.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n89'(suite) -> [];
'ibm-not-wf-P85-ibm85n89'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n89.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n89.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n88'(suite) -> [];
'ibm-not-wf-P85-ibm85n88'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n88.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n88.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n87'(suite) -> [];
'ibm-not-wf-P85-ibm85n87'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n87.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n87.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n86'(suite) -> [];
'ibm-not-wf-P85-ibm85n86'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n86.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n86.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n85'(suite) -> [];
'ibm-not-wf-P85-ibm85n85'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n85.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n85.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n84'(suite) -> [];
'ibm-not-wf-P85-ibm85n84'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n84.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n84.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n83'(suite) -> [];
'ibm-not-wf-P85-ibm85n83'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n83.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n83.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n82'(suite) -> [];
'ibm-not-wf-P85-ibm85n82'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n82.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n82.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n81'(suite) -> [];
'ibm-not-wf-P85-ibm85n81'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n81.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n81.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n80'(suite) -> [];
'ibm-not-wf-P85-ibm85n80'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n80.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n80.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n79'(suite) -> [];
'ibm-not-wf-P85-ibm85n79'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n79.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n79.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n78'(suite) -> [];
'ibm-not-wf-P85-ibm85n78'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n78.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n78.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n77'(suite) -> [];
'ibm-not-wf-P85-ibm85n77'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n77.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n77.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n76'(suite) -> [];
'ibm-not-wf-P85-ibm85n76'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n76.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n76.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n75'(suite) -> [];
'ibm-not-wf-P85-ibm85n75'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n75.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n75.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n74'(suite) -> [];
'ibm-not-wf-P85-ibm85n74'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n74.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n74.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n73'(suite) -> [];
'ibm-not-wf-P85-ibm85n73'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n73.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n73.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n72'(suite) -> [];
'ibm-not-wf-P85-ibm85n72'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n72.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n72.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n71'(suite) -> [];
'ibm-not-wf-P85-ibm85n71'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n71.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n71.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n70'(suite) -> [];
'ibm-not-wf-P85-ibm85n70'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n70.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n70.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n69'(suite) -> [];
'ibm-not-wf-P85-ibm85n69'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n69.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n69.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n68'(suite) -> [];
'ibm-not-wf-P85-ibm85n68'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n68.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n68.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n67'(suite) -> [];
'ibm-not-wf-P85-ibm85n67'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n67.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n67.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n66'(suite) -> [];
'ibm-not-wf-P85-ibm85n66'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n66.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n66.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n65'(suite) -> [];
'ibm-not-wf-P85-ibm85n65'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n65.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n65.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n64'(suite) -> [];
'ibm-not-wf-P85-ibm85n64'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n64.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n64.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n63'(suite) -> [];
'ibm-not-wf-P85-ibm85n63'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n63.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n63.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n62'(suite) -> [];
'ibm-not-wf-P85-ibm85n62'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n62.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n62.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n61'(suite) -> [];
'ibm-not-wf-P85-ibm85n61'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n61.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n61.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n60'(suite) -> [];
'ibm-not-wf-P85-ibm85n60'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n60.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n60.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n59'(suite) -> [];
'ibm-not-wf-P85-ibm85n59'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n59.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n59.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n58'(suite) -> [];
'ibm-not-wf-P85-ibm85n58'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n58.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n58.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n57'(suite) -> [];
'ibm-not-wf-P85-ibm85n57'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n57.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n57.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n56'(suite) -> [];
'ibm-not-wf-P85-ibm85n56'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n56.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n56.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n55'(suite) -> [];
'ibm-not-wf-P85-ibm85n55'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n55.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n55.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n54'(suite) -> [];
'ibm-not-wf-P85-ibm85n54'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n54.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n54.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n53'(suite) -> [];
'ibm-not-wf-P85-ibm85n53'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n53.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n53.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n52'(suite) -> [];
'ibm-not-wf-P85-ibm85n52'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n52.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n52.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n51'(suite) -> [];
'ibm-not-wf-P85-ibm85n51'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n51.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n51.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n50'(suite) -> [];
'ibm-not-wf-P85-ibm85n50'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n50.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n50.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n49'(suite) -> [];
'ibm-not-wf-P85-ibm85n49'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n49.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n49.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n48'(suite) -> [];
'ibm-not-wf-P85-ibm85n48'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n48.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n48.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n47'(suite) -> [];
'ibm-not-wf-P85-ibm85n47'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n47.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n47.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n46'(suite) -> [];
'ibm-not-wf-P85-ibm85n46'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n46.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n46.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n45'(suite) -> [];
'ibm-not-wf-P85-ibm85n45'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n45.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n45.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n44'(suite) -> [];
'ibm-not-wf-P85-ibm85n44'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n44.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n44.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n43'(suite) -> [];
'ibm-not-wf-P85-ibm85n43'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n43.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n43.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n42'(suite) -> [];
'ibm-not-wf-P85-ibm85n42'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n42.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n42.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n41'(suite) -> [];
'ibm-not-wf-P85-ibm85n41'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n41.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n41.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n40'(suite) -> [];
'ibm-not-wf-P85-ibm85n40'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n40.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n40.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n39'(suite) -> [];
'ibm-not-wf-P85-ibm85n39'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n39.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n39.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n38'(suite) -> [];
'ibm-not-wf-P85-ibm85n38'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n38.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n38.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n37'(suite) -> [];
'ibm-not-wf-P85-ibm85n37'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n37.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n37.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n36'(suite) -> [];
'ibm-not-wf-P85-ibm85n36'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n36.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n36.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n35'(suite) -> [];
'ibm-not-wf-P85-ibm85n35'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n35.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n35.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n34'(suite) -> [];
'ibm-not-wf-P85-ibm85n34'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n34.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n34.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n33'(suite) -> [];
'ibm-not-wf-P85-ibm85n33'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n33.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n33.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n32'(suite) -> [];
'ibm-not-wf-P85-ibm85n32'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n32.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n32.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n31'(suite) -> [];
'ibm-not-wf-P85-ibm85n31'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n31.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n31.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n30'(suite) -> [];
'ibm-not-wf-P85-ibm85n30'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n30.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n30.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n29'(suite) -> [];
'ibm-not-wf-P85-ibm85n29'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n29.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n29.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n28'(suite) -> [];
'ibm-not-wf-P85-ibm85n28'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n28.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n28.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n27'(suite) -> [];
'ibm-not-wf-P85-ibm85n27'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n27.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n27.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n26'(suite) -> [];
'ibm-not-wf-P85-ibm85n26'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n26.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n26.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n25'(suite) -> [];
'ibm-not-wf-P85-ibm85n25'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n25.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n25.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n24'(suite) -> [];
'ibm-not-wf-P85-ibm85n24'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n24.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n24.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n23'(suite) -> [];
'ibm-not-wf-P85-ibm85n23'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n23.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n23.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n22'(suite) -> [];
'ibm-not-wf-P85-ibm85n22'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n22.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n22.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n21'(suite) -> [];
'ibm-not-wf-P85-ibm85n21'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n21.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n21.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n20'(suite) -> [];
'ibm-not-wf-P85-ibm85n20'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n20.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n20.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n198'(suite) -> [];
'ibm-not-wf-P85-ibm85n198'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n198.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n198.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n197'(suite) -> [];
'ibm-not-wf-P85-ibm85n197'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n197.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n197.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n196'(suite) -> [];
'ibm-not-wf-P85-ibm85n196'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n196.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n196.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n195'(suite) -> [];
'ibm-not-wf-P85-ibm85n195'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n195.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n195.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n194'(suite) -> [];
'ibm-not-wf-P85-ibm85n194'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n194.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n194.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n193'(suite) -> [];
'ibm-not-wf-P85-ibm85n193'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n193.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n193.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n192'(suite) -> [];
'ibm-not-wf-P85-ibm85n192'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n192.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n192.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n191'(suite) -> [];
'ibm-not-wf-P85-ibm85n191'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n191.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n191.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n190'(suite) -> [];
'ibm-not-wf-P85-ibm85n190'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n190.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n190.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n19'(suite) -> [];
'ibm-not-wf-P85-ibm85n19'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n19.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n19.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n189'(suite) -> [];
'ibm-not-wf-P85-ibm85n189'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n189.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n189.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n188'(suite) -> [];
'ibm-not-wf-P85-ibm85n188'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n188.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n188.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n187'(suite) -> [];
'ibm-not-wf-P85-ibm85n187'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n187.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n187.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n186'(suite) -> [];
'ibm-not-wf-P85-ibm85n186'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n186.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n186.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n185'(suite) -> [];
'ibm-not-wf-P85-ibm85n185'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n185.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n185.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n184'(suite) -> [];
'ibm-not-wf-P85-ibm85n184'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n184.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n184.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n183'(suite) -> [];
'ibm-not-wf-P85-ibm85n183'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n183.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n183.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n182'(suite) -> [];
'ibm-not-wf-P85-ibm85n182'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n182.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n182.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n181'(suite) -> [];
'ibm-not-wf-P85-ibm85n181'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n181.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n181.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n180'(suite) -> [];
'ibm-not-wf-P85-ibm85n180'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n180.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n180.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n18'(suite) -> [];
'ibm-not-wf-P85-ibm85n18'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n18.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n18.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n179'(suite) -> [];
'ibm-not-wf-P85-ibm85n179'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n179.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n179.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n178'(suite) -> [];
'ibm-not-wf-P85-ibm85n178'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n178.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n178.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n177'(suite) -> [];
'ibm-not-wf-P85-ibm85n177'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n177.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n177.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n176'(suite) -> [];
'ibm-not-wf-P85-ibm85n176'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n176.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n176.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n175'(suite) -> [];
'ibm-not-wf-P85-ibm85n175'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n175.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n175.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n174'(suite) -> [];
'ibm-not-wf-P85-ibm85n174'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n174.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n174.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n173'(suite) -> [];
'ibm-not-wf-P85-ibm85n173'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n173.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n173.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n172'(suite) -> [];
'ibm-not-wf-P85-ibm85n172'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n172.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n172.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n171'(suite) -> [];
'ibm-not-wf-P85-ibm85n171'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n171.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n171.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n170'(suite) -> [];
'ibm-not-wf-P85-ibm85n170'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n170.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n170.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n17'(suite) -> [];
'ibm-not-wf-P85-ibm85n17'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n17.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n17.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n169'(suite) -> [];
'ibm-not-wf-P85-ibm85n169'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n169.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n169.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n168'(suite) -> [];
'ibm-not-wf-P85-ibm85n168'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n168.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n168.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n167'(suite) -> [];
'ibm-not-wf-P85-ibm85n167'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n167.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n167.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n166'(suite) -> [];
'ibm-not-wf-P85-ibm85n166'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n166.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n166.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n165'(suite) -> [];
'ibm-not-wf-P85-ibm85n165'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n165.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n165.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n164'(suite) -> [];
'ibm-not-wf-P85-ibm85n164'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n164.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n164.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n163'(suite) -> [];
'ibm-not-wf-P85-ibm85n163'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n163.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n163.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n162'(suite) -> [];
'ibm-not-wf-P85-ibm85n162'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n162.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n162.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n161'(suite) -> [];
'ibm-not-wf-P85-ibm85n161'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n161.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n161.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n160'(suite) -> [];
'ibm-not-wf-P85-ibm85n160'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n160.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n160.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n16'(suite) -> [];
'ibm-not-wf-P85-ibm85n16'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n16.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n16.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n159'(suite) -> [];
'ibm-not-wf-P85-ibm85n159'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n159.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n159.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n158'(suite) -> [];
'ibm-not-wf-P85-ibm85n158'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n158.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n158.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n157'(suite) -> [];
'ibm-not-wf-P85-ibm85n157'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n157.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n157.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n156'(suite) -> [];
'ibm-not-wf-P85-ibm85n156'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n156.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n156.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n155'(suite) -> [];
'ibm-not-wf-P85-ibm85n155'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n155.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n155.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n154'(suite) -> [];
'ibm-not-wf-P85-ibm85n154'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n154.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n154.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n153'(suite) -> [];
'ibm-not-wf-P85-ibm85n153'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n153.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n153.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n152'(suite) -> [];
'ibm-not-wf-P85-ibm85n152'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n152.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n152.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n151'(suite) -> [];
'ibm-not-wf-P85-ibm85n151'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n151.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n151.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n150'(suite) -> [];
'ibm-not-wf-P85-ibm85n150'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n150.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n150.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n15'(suite) -> [];
'ibm-not-wf-P85-ibm85n15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n149'(suite) -> [];
'ibm-not-wf-P85-ibm85n149'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n149.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n149.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n148'(suite) -> [];
'ibm-not-wf-P85-ibm85n148'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n148.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n148.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n147'(suite) -> [];
'ibm-not-wf-P85-ibm85n147'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n147.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n147.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n146'(suite) -> [];
'ibm-not-wf-P85-ibm85n146'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n146.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n146.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n145'(suite) -> [];
'ibm-not-wf-P85-ibm85n145'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n145.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n145.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n144'(suite) -> [];
'ibm-not-wf-P85-ibm85n144'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n144.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n144.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n143'(suite) -> [];
'ibm-not-wf-P85-ibm85n143'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n143.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n143.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n142'(suite) -> [];
'ibm-not-wf-P85-ibm85n142'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n142.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n142.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n141'(suite) -> [];
'ibm-not-wf-P85-ibm85n141'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n141.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n141.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n140'(suite) -> [];
'ibm-not-wf-P85-ibm85n140'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n140.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n140.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n14'(suite) -> [];
'ibm-not-wf-P85-ibm85n14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n139'(suite) -> [];
'ibm-not-wf-P85-ibm85n139'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n139.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n139.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n138'(suite) -> [];
'ibm-not-wf-P85-ibm85n138'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n138.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n138.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n137'(suite) -> [];
'ibm-not-wf-P85-ibm85n137'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n137.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n137.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n136'(suite) -> [];
'ibm-not-wf-P85-ibm85n136'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n136.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n136.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n135'(suite) -> [];
'ibm-not-wf-P85-ibm85n135'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n135.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n135.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n134'(suite) -> [];
'ibm-not-wf-P85-ibm85n134'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n134.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n134.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n133'(suite) -> [];
'ibm-not-wf-P85-ibm85n133'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n133.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n133.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n132'(suite) -> [];
'ibm-not-wf-P85-ibm85n132'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n132.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n132.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n131'(suite) -> [];
'ibm-not-wf-P85-ibm85n131'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n131.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n131.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n130'(suite) -> [];
'ibm-not-wf-P85-ibm85n130'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n130.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n130.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n13'(suite) -> [];
'ibm-not-wf-P85-ibm85n13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n129'(suite) -> [];
'ibm-not-wf-P85-ibm85n129'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n129.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n129.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n128'(suite) -> [];
'ibm-not-wf-P85-ibm85n128'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n128.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n128.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n127'(suite) -> [];
'ibm-not-wf-P85-ibm85n127'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n127.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n127.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n126'(suite) -> [];
'ibm-not-wf-P85-ibm85n126'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n126.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n126.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n125'(suite) -> [];
'ibm-not-wf-P85-ibm85n125'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n125.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n125.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n124'(suite) -> [];
'ibm-not-wf-P85-ibm85n124'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n124.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n124.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n123'(suite) -> [];
'ibm-not-wf-P85-ibm85n123'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n123.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n123.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n122'(suite) -> [];
'ibm-not-wf-P85-ibm85n122'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n122.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n122.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n121'(suite) -> [];
'ibm-not-wf-P85-ibm85n121'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n121.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n121.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n120'(suite) -> [];
'ibm-not-wf-P85-ibm85n120'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n120.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n120.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n12'(suite) -> [];
'ibm-not-wf-P85-ibm85n12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n119'(suite) -> [];
'ibm-not-wf-P85-ibm85n119'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n119.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n119.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n118'(suite) -> [];
'ibm-not-wf-P85-ibm85n118'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n118.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n118.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n117'(suite) -> [];
'ibm-not-wf-P85-ibm85n117'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n117.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n117.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n116'(suite) -> [];
'ibm-not-wf-P85-ibm85n116'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n116.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n116.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n115'(suite) -> [];
'ibm-not-wf-P85-ibm85n115'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n115.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n115.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n114'(suite) -> [];
'ibm-not-wf-P85-ibm85n114'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n114.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n114.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n113'(suite) -> [];
'ibm-not-wf-P85-ibm85n113'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n113.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n113.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n112'(suite) -> [];
'ibm-not-wf-P85-ibm85n112'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n112.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n112.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n111'(suite) -> [];
'ibm-not-wf-P85-ibm85n111'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n111.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n111.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n110'(suite) -> [];
'ibm-not-wf-P85-ibm85n110'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n110.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n110.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n11'(suite) -> [];
'ibm-not-wf-P85-ibm85n11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n109'(suite) -> [];
'ibm-not-wf-P85-ibm85n109'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n109.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n109.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n108'(suite) -> [];
'ibm-not-wf-P85-ibm85n108'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n108.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n108.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n107'(suite) -> [];
'ibm-not-wf-P85-ibm85n107'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n107.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n107.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n106'(suite) -> [];
'ibm-not-wf-P85-ibm85n106'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n106.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n106.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n105'(suite) -> [];
'ibm-not-wf-P85-ibm85n105'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n105.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n105.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n104'(suite) -> [];
'ibm-not-wf-P85-ibm85n104'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n104.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n104.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n103'(suite) -> [];
'ibm-not-wf-P85-ibm85n103'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n103.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n103.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n102'(suite) -> [];
'ibm-not-wf-P85-ibm85n102'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n102.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n102.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n101'(suite) -> [];
'ibm-not-wf-P85-ibm85n101'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n101.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n101.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n100'(suite) -> [];
'ibm-not-wf-P85-ibm85n100'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n100.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n100.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n10'(suite) -> [];
'ibm-not-wf-P85-ibm85n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n09'(suite) -> [];
'ibm-not-wf-P85-ibm85n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n08'(suite) -> [];
'ibm-not-wf-P85-ibm85n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n07'(suite) -> [];
'ibm-not-wf-P85-ibm85n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n06'(suite) -> [];
'ibm-not-wf-P85-ibm85n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n05'(suite) -> [];
'ibm-not-wf-P85-ibm85n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n04'(suite) -> [];
'ibm-not-wf-P85-ibm85n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n03'(suite) -> [];
'ibm-not-wf-P85-ibm85n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n02'(suite) -> [];
'ibm-not-wf-P85-ibm85n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P85-ibm85n01'(suite) -> [];
'ibm-not-wf-P85-ibm85n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P85-ibm85n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P85-ibm85n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P83-ibm83n06'(suite) -> [];
'ibm-not-wf-P83-ibm83n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P83-ibm83n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P83-ibm83n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P83-ibm83n05'(suite) -> [];
'ibm-not-wf-P83-ibm83n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P83-ibm83n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P83-ibm83n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P83-ibm83n04'(suite) -> [];
'ibm-not-wf-P83-ibm83n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P83-ibm83n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P83-ibm83n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P83-ibm83n03'(suite) -> [];
'ibm-not-wf-P83-ibm83n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P83-ibm83n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P83-ibm83n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P83-ibm83n02'(suite) -> [];
'ibm-not-wf-P83-ibm83n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P83-ibm83n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P83-ibm83n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P83-ibm83n01'(suite) -> [];
'ibm-not-wf-P83-ibm83n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P83-ibm83n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P83-ibm83n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P82-ibm82n08'(suite) -> [];
'ibm-not-wf-P82-ibm82n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P82-ibm82n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P82-ibm82n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P82-ibm82n07'(suite) -> [];
'ibm-not-wf-P82-ibm82n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P82-ibm82n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P82-ibm82n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P82-ibm82n06'(suite) -> [];
'ibm-not-wf-P82-ibm82n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P82-ibm82n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P82-ibm82n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P82-ibm82n05'(suite) -> [];
'ibm-not-wf-P82-ibm82n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P82-ibm82n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P82-ibm82n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P82-ibm82n04'(suite) -> [];
'ibm-not-wf-P82-ibm82n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P82-ibm82n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P82-ibm82n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P82-ibm82n03'(suite) -> [];
'ibm-not-wf-P82-ibm82n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P82-ibm82n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P82-ibm82n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P82-ibm82n02'(suite) -> [];
'ibm-not-wf-P82-ibm82n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P82-ibm82n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P82-ibm82n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P82-ibm82n01'(suite) -> [];
'ibm-not-wf-P82-ibm82n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P82-ibm82n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P82-ibm82n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P81-ibm81n09'(suite) -> [];
'ibm-not-wf-P81-ibm81n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P81-ibm81n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P81-ibm81n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P81-ibm81n08'(suite) -> [];
'ibm-not-wf-P81-ibm81n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P81-ibm81n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P81-ibm81n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P81-ibm81n07'(suite) -> [];
'ibm-not-wf-P81-ibm81n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P81-ibm81n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P81-ibm81n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P81-ibm81n06'(suite) -> [];
'ibm-not-wf-P81-ibm81n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P81-ibm81n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P81-ibm81n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P81-ibm81n05'(suite) -> [];
'ibm-not-wf-P81-ibm81n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P81-ibm81n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P81-ibm81n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P81-ibm81n04'(suite) -> [];
'ibm-not-wf-P81-ibm81n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P81-ibm81n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P81-ibm81n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P81-ibm81n03'(suite) -> [];
'ibm-not-wf-P81-ibm81n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P81-ibm81n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P81-ibm81n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P81-ibm81n02'(suite) -> [];
'ibm-not-wf-P81-ibm81n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P81-ibm81n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P81-ibm81n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P81-ibm81n01'(suite) -> [];
'ibm-not-wf-P81-ibm81n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P81-ibm81n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P81-ibm81n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P80-ibm80n06'(suite) -> [];
'ibm-not-wf-P80-ibm80n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P80-ibm80n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P80-ibm80n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P80-ibm80n05'(suite) -> [];
'ibm-not-wf-P80-ibm80n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P80-ibm80n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P80-ibm80n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P80-ibm80n04'(suite) -> [];
'ibm-not-wf-P80-ibm80n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P80-ibm80n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P80-ibm80n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P80-ibm80n03'(suite) -> [];
'ibm-not-wf-P80-ibm80n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P80-ibm80n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P80-ibm80n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P80-ibm80n02'(suite) -> [];
'ibm-not-wf-P80-ibm80n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P80-ibm80n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P80-ibm80n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P80-ibm80n01'(suite) -> [];
'ibm-not-wf-P80-ibm80n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P80-ibm80n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P80-ibm80n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P79-ibm79n02'(suite) -> [];
'ibm-not-wf-P79-ibm79n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P79-ibm79n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P79-ibm79n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P79-ibm79n01'(suite) -> [];
'ibm-not-wf-P79-ibm79n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P79-ibm79n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P79-ibm79n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P78-ibm78n02'(suite) -> [];
'ibm-not-wf-P78-ibm78n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P78-ibm78n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P78-ibm78n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P78-ibm78n01'(suite) -> [];
'ibm-not-wf-P78-ibm78n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P78-ibm78n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P78-ibm78n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P77-ibm77n04'(suite) -> [];
'ibm-not-wf-P77-ibm77n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P77-ibm77n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P77-ibm77n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P77-ibm77n03'(suite) -> [];
'ibm-not-wf-P77-ibm77n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P77-ibm77n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P77-ibm77n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P77-ibm77n02'(suite) -> [];
'ibm-not-wf-P77-ibm77n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P77-ibm77n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P77-ibm77n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P77-ibm77n01'(suite) -> [];
'ibm-not-wf-P77-ibm77n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P77-ibm77n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P77-ibm77n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P76-ibm76n07'(suite) -> [];
'ibm-not-wf-P76-ibm76n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P76-ibm76n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P76-ibm76n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P76-ibm76n06'(suite) -> [];
'ibm-not-wf-P76-ibm76n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P76-ibm76n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P76-ibm76n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P76-ibm76n05'(suite) -> [];
'ibm-not-wf-P76-ibm76n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P76-ibm76n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P76-ibm76n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P76-ibm76n04'(suite) -> [];
'ibm-not-wf-P76-ibm76n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P76-ibm76n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P76-ibm76n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P76-ibm76n03'(suite) -> [];
'ibm-not-wf-P76-ibm76n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P76-ibm76n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P76-ibm76n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P76-ibm76n02'(suite) -> [];
'ibm-not-wf-P76-ibm76n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P76-ibm76n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P76-ibm76n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P76-ibm76n01'(suite) -> [];
'ibm-not-wf-P76-ibm76n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P76-ibm76n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P76-ibm76n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n13'(suite) -> [];
'ibm-not-wf-P75-ibm75n13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n12'(suite) -> [];
'ibm-not-wf-P75-ibm75n12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n11'(suite) -> [];
'ibm-not-wf-P75-ibm75n11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n10'(suite) -> [];
'ibm-not-wf-P75-ibm75n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n09'(suite) -> [];
'ibm-not-wf-P75-ibm75n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n08'(suite) -> [];
'ibm-not-wf-P75-ibm75n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n07'(suite) -> [];
'ibm-not-wf-P75-ibm75n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n06'(suite) -> [];
'ibm-not-wf-P75-ibm75n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n05'(suite) -> [];
'ibm-not-wf-P75-ibm75n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n04'(suite) -> [];
'ibm-not-wf-P75-ibm75n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n03'(suite) -> [];
'ibm-not-wf-P75-ibm75n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n02'(suite) -> [];
'ibm-not-wf-P75-ibm75n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P75-ibm75n01'(suite) -> [];
'ibm-not-wf-P75-ibm75n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P75-ibm75n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P75-ibm75n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P74-ibm74n01'(suite) -> [];
'ibm-not-wf-P74-ibm74n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P74-ibm74n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P74-ibm74n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P73-ibm73n03'(suite) -> [];
'ibm-not-wf-P73-ibm73n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P73-ibm73n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P73-ibm73n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P73-ibm73n01'(suite) -> [];
'ibm-not-wf-P73-ibm73n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P73-ibm73n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P73-ibm73n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P72-ibm72n09'(suite) -> [];
'ibm-not-wf-P72-ibm72n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P72-ibm72n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P72-ibm72n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P72-ibm72n08'(suite) -> [];
'ibm-not-wf-P72-ibm72n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P72-ibm72n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P72-ibm72n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P72-ibm72n07'(suite) -> [];
'ibm-not-wf-P72-ibm72n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P72-ibm72n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P72-ibm72n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P72-ibm72n06'(suite) -> [];
'ibm-not-wf-P72-ibm72n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P72-ibm72n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P72-ibm72n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P72-ibm72n05'(suite) -> [];
'ibm-not-wf-P72-ibm72n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P72-ibm72n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P72-ibm72n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P72-ibm72n04'(suite) -> [];
'ibm-not-wf-P72-ibm72n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P72-ibm72n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P72-ibm72n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P72-ibm72n03'(suite) -> [];
'ibm-not-wf-P72-ibm72n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P72-ibm72n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P72-ibm72n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P72-ibm72n02'(suite) -> [];
'ibm-not-wf-P72-ibm72n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P72-ibm72n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P72-ibm72n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P72-ibm72n01'(suite) -> [];
'ibm-not-wf-P72-ibm72n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P72-ibm72n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P72-ibm72n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P71-ibm71n08'(suite) -> [];
'ibm-not-wf-P71-ibm71n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P71-ibm71n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P71-ibm71n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P71-ibm71n07'(suite) -> [];
'ibm-not-wf-P71-ibm71n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P71-ibm71n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P71-ibm71n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P71-ibm71n06'(suite) -> [];
'ibm-not-wf-P71-ibm71n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P71-ibm71n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P71-ibm71n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P71-ibm71n05'(suite) -> [];
'ibm-not-wf-P71-ibm71n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P71-ibm71n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P71-ibm71n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P71-ibm71n04'(suite) -> [];
'ibm-not-wf-P71-ibm71n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P71-ibm71n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P71-ibm71n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P71-ibm71n03'(suite) -> [];
'ibm-not-wf-P71-ibm71n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P71-ibm71n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P71-ibm71n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P71-ibm71n02'(suite) -> [];
'ibm-not-wf-P71-ibm71n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P71-ibm71n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P71-ibm71n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P71-ibm71n01'(suite) -> [];
'ibm-not-wf-P71-ibm71n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P71-ibm71n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P71-ibm71n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P71-ibm70n01'(suite) -> [];
'ibm-not-wf-P71-ibm70n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P71-ibm70n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P71-ibm70n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P69-ibm69n07'(suite) -> [];
'ibm-not-wf-P69-ibm69n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P69-ibm69n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P69-ibm69n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P69-ibm69n06'(suite) -> [];
'ibm-not-wf-P69-ibm69n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P69-ibm69n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P69-ibm69n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P69-ibm69n05'(suite) -> [];
'ibm-not-wf-P69-ibm69n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P69-ibm69n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P69-ibm69n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P69-ibm69n04'(suite) -> [];
'ibm-not-wf-P69-ibm69n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P69-ibm69n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P69-ibm69n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P69-ibm69n03'(suite) -> [];
'ibm-not-wf-P69-ibm69n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P69-ibm69n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P69-ibm69n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P69-ibm69n02'(suite) -> [];
'ibm-not-wf-P69-ibm69n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P69-ibm69n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P69-ibm69n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P69-ibm69n01'(suite) -> [];
'ibm-not-wf-P69-ibm69n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P69-ibm69n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P69-ibm69n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n10'(suite) -> [];
'ibm-not-wf-P68-ibm68n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n09'(suite) -> [];
'ibm-not-wf-P68-ibm68n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n08'(suite) -> [];
'ibm-not-wf-P68-ibm68n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n07'(suite) -> [];
'ibm-not-wf-P68-ibm68n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n06'(suite) -> [];
'ibm-not-wf-P68-ibm68n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n05'(suite) -> [];
'ibm-not-wf-P68-ibm68n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n04'(suite) -> [];
'ibm-not-wf-P68-ibm68n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n03'(suite) -> [];
'ibm-not-wf-P68-ibm68n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n02'(suite) -> [];
'ibm-not-wf-P68-ibm68n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P68-ibm68n01'(suite) -> [];
'ibm-not-wf-P68-ibm68n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P68-ibm68n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P68-ibm68n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n15'(suite) -> [];
'ibm-not-wf-P66-ibm66n15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n14'(suite) -> [];
'ibm-not-wf-P66-ibm66n14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n13'(suite) -> [];
'ibm-not-wf-P66-ibm66n13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n12'(suite) -> [];
'ibm-not-wf-P66-ibm66n12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n11'(suite) -> [];
'ibm-not-wf-P66-ibm66n11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n10'(suite) -> [];
'ibm-not-wf-P66-ibm66n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n09'(suite) -> [];
'ibm-not-wf-P66-ibm66n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n08'(suite) -> [];
'ibm-not-wf-P66-ibm66n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n07'(suite) -> [];
'ibm-not-wf-P66-ibm66n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n06'(suite) -> [];
'ibm-not-wf-P66-ibm66n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n05'(suite) -> [];
'ibm-not-wf-P66-ibm66n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n04'(suite) -> [];
'ibm-not-wf-P66-ibm66n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n03'(suite) -> [];
'ibm-not-wf-P66-ibm66n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n02'(suite) -> [];
'ibm-not-wf-P66-ibm66n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P66-ibm66n01'(suite) -> [];
'ibm-not-wf-P66-ibm66n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P66-ibm66n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P66-ibm66n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P65-ibm65n02'(suite) -> [];
'ibm-not-wf-P65-ibm65n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P65-ibm65n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P65-ibm65n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P65-ibm65n01'(suite) -> [];
'ibm-not-wf-P65-ibm65n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P65-ibm65n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P65-ibm65n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P64-ibm64n03'(suite) -> [];
'ibm-not-wf-P64-ibm64n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P64-ibm64n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P64-ibm64n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P64-ibm64n02'(suite) -> [];
'ibm-not-wf-P64-ibm64n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P64-ibm64n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P64-ibm64n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P64-ibm64n01'(suite) -> [];
'ibm-not-wf-P64-ibm64n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P64-ibm64n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P64-ibm64n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P63-ibm63n07'(suite) -> [];
'ibm-not-wf-P63-ibm63n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P63-ibm63n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P63-ibm63n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P63-ibm63n06'(suite) -> [];
'ibm-not-wf-P63-ibm63n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P63-ibm63n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P63-ibm63n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P63-ibm63n05'(suite) -> [];
'ibm-not-wf-P63-ibm63n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P63-ibm63n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P63-ibm63n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P63-ibm63n04'(suite) -> [];
'ibm-not-wf-P63-ibm63n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P63-ibm63n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P63-ibm63n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P63-ibm63n03'(suite) -> [];
'ibm-not-wf-P63-ibm63n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P63-ibm63n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P63-ibm63n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P63-ibm63n02'(suite) -> [];
'ibm-not-wf-P63-ibm63n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P63-ibm63n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P63-ibm63n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P63-ibm63n01'(suite) -> [];
'ibm-not-wf-P63-ibm63n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P63-ibm63n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P63-ibm63n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P62-ibm62n08'(suite) -> [];
'ibm-not-wf-P62-ibm62n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P62-ibm62n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P62-ibm62n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P62-ibm62n07'(suite) -> [];
'ibm-not-wf-P62-ibm62n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P62-ibm62n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P62-ibm62n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P62-ibm62n06'(suite) -> [];
'ibm-not-wf-P62-ibm62n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P62-ibm62n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P62-ibm62n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P62-ibm62n05'(suite) -> [];
'ibm-not-wf-P62-ibm62n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P62-ibm62n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P62-ibm62n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P62-ibm62n04'(suite) -> [];
'ibm-not-wf-P62-ibm62n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P62-ibm62n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P62-ibm62n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P62-ibm62n03'(suite) -> [];
'ibm-not-wf-P62-ibm62n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P62-ibm62n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P62-ibm62n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P62-ibm62n02'(suite) -> [];
'ibm-not-wf-P62-ibm62n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P62-ibm62n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P62-ibm62n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P62-ibm62n01'(suite) -> [];
'ibm-not-wf-P62-ibm62n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P62-ibm62n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P62-ibm62n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P61-ibm61n01'(suite) -> [];
'ibm-not-wf-P61-ibm61n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P61-ibm61n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P61-ibm61n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P60-ibm60n08'(suite) -> [];
'ibm-not-wf-P60-ibm60n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P60-ibm60n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P60-ibm60n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P60-ibm60n07'(suite) -> [];
'ibm-not-wf-P60-ibm60n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P60-ibm60n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P60-ibm60n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P60-ibm60n06'(suite) -> [];
'ibm-not-wf-P60-ibm60n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P60-ibm60n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P60-ibm60n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P60-ibm60n05'(suite) -> [];
'ibm-not-wf-P60-ibm60n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P60-ibm60n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P60-ibm60n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P60-ibm60n04'(suite) -> [];
'ibm-not-wf-P60-ibm60n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P60-ibm60n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P60-ibm60n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P60-ibm60n03'(suite) -> [];
'ibm-not-wf-P60-ibm60n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P60-ibm60n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P60-ibm60n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P60-ibm60n02'(suite) -> [];
'ibm-not-wf-P60-ibm60n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P60-ibm60n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P60-ibm60n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P60-ibm60n01'(suite) -> [];
'ibm-not-wf-P60-ibm60n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P60-ibm60n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P60-ibm60n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P59-ibm59n06'(suite) -> [];
'ibm-not-wf-P59-ibm59n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P59-ibm59n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P59-ibm59n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P59-ibm59n05'(suite) -> [];
'ibm-not-wf-P59-ibm59n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P59-ibm59n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P59-ibm59n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P59-ibm59n04'(suite) -> [];
'ibm-not-wf-P59-ibm59n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P59-ibm59n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P59-ibm59n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P59-ibm59n03'(suite) -> [];
'ibm-not-wf-P59-ibm59n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P59-ibm59n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P59-ibm59n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P59-ibm59n02'(suite) -> [];
'ibm-not-wf-P59-ibm59n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P59-ibm59n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P59-ibm59n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P59-ibm59n01'(suite) -> [];
'ibm-not-wf-P59-ibm59n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P59-ibm59n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P59-ibm59n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P58-ibm58n08'(suite) -> [];
'ibm-not-wf-P58-ibm58n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P58-ibm58n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P58-ibm58n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P58-ibm58n07'(suite) -> [];
'ibm-not-wf-P58-ibm58n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P58-ibm58n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P58-ibm58n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P58-ibm58n06'(suite) -> [];
'ibm-not-wf-P58-ibm58n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P58-ibm58n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P58-ibm58n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P58-ibm58n05'(suite) -> [];
'ibm-not-wf-P58-ibm58n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P58-ibm58n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P58-ibm58n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P58-ibm58n04'(suite) -> [];
'ibm-not-wf-P58-ibm58n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P58-ibm58n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P58-ibm58n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P58-ibm58n03'(suite) -> [];
'ibm-not-wf-P58-ibm58n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P58-ibm58n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P58-ibm58n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P58-ibm58n02'(suite) -> [];
'ibm-not-wf-P58-ibm58n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P58-ibm58n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P58-ibm58n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P58-ibm58n01'(suite) -> [];
'ibm-not-wf-P58-ibm58n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P58-ibm58n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P58-ibm58n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P57-ibm57n01'(suite) -> [];
'ibm-not-wf-P57-ibm57n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P57-ibm57n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P57-ibm57n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P56-ibm56n07'(suite) -> [];
'ibm-not-wf-P56-ibm56n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P56-ibm56n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P56-ibm56n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P56-ibm56n06'(suite) -> [];
'ibm-not-wf-P56-ibm56n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P56-ibm56n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P56-ibm56n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P56-ibm56n05'(suite) -> [];
'ibm-not-wf-P56-ibm56n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P56-ibm56n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P56-ibm56n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P56-ibm56n04'(suite) -> [];
'ibm-not-wf-P56-ibm56n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P56-ibm56n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P56-ibm56n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P56-ibm56n03'(suite) -> [];
'ibm-not-wf-P56-ibm56n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P56-ibm56n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P56-ibm56n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P56-ibm56n02'(suite) -> [];
'ibm-not-wf-P56-ibm56n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P56-ibm56n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P56-ibm56n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P56-ibm56n01'(suite) -> [];
'ibm-not-wf-P56-ibm56n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P56-ibm56n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P56-ibm56n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P55-ibm55n03'(suite) -> [];
'ibm-not-wf-P55-ibm55n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P55-ibm55n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P55-ibm55n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P55-ibm55n02'(suite) -> [];
'ibm-not-wf-P55-ibm55n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P55-ibm55n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P55-ibm55n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P55-ibm55n01'(suite) -> [];
'ibm-not-wf-P55-ibm55n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P55-ibm55n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P55-ibm55n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P54-ibm54n02'(suite) -> [];
'ibm-not-wf-P54-ibm54n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P54-ibm54n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P54-ibm54n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P54-ibm54n01'(suite) -> [];
'ibm-not-wf-P54-ibm54n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P54-ibm54n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P54-ibm54n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P53-ibm53n08'(suite) -> [];
'ibm-not-wf-P53-ibm53n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P53-ibm53n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P53-ibm53n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P53-ibm53n07'(suite) -> [];
'ibm-not-wf-P53-ibm53n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P53-ibm53n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P53-ibm53n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P53-ibm53n06'(suite) -> [];
'ibm-not-wf-P53-ibm53n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P53-ibm53n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P53-ibm53n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P53-ibm53n05'(suite) -> [];
'ibm-not-wf-P53-ibm53n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P53-ibm53n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P53-ibm53n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P53-ibm53n04'(suite) -> [];
'ibm-not-wf-P53-ibm53n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P53-ibm53n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P53-ibm53n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P53-ibm53n03'(suite) -> [];
'ibm-not-wf-P53-ibm53n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P53-ibm53n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P53-ibm53n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P53-ibm53n02'(suite) -> [];
'ibm-not-wf-P53-ibm53n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P53-ibm53n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P53-ibm53n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P53-ibm53n01'(suite) -> [];
'ibm-not-wf-P53-ibm53n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P53-ibm53n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P53-ibm53n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P52-ibm52n06'(suite) -> [];
'ibm-not-wf-P52-ibm52n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P52-ibm52n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P52-ibm52n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P52-ibm52n05'(suite) -> [];
'ibm-not-wf-P52-ibm52n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P52-ibm52n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P52-ibm52n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P52-ibm52n04'(suite) -> [];
'ibm-not-wf-P52-ibm52n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P52-ibm52n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P52-ibm52n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P52-ibm52n03'(suite) -> [];
'ibm-not-wf-P52-ibm52n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P52-ibm52n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P52-ibm52n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P52-ibm52n02'(suite) -> [];
'ibm-not-wf-P52-ibm52n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P52-ibm52n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P52-ibm52n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P52-ibm52n01'(suite) -> [];
'ibm-not-wf-P52-ibm52n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P52-ibm52n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P52-ibm52n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P51-ibm51n07'(suite) -> [];
'ibm-not-wf-P51-ibm51n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P51-ibm51n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P51-ibm51n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P51-ibm51n06'(suite) -> [];
'ibm-not-wf-P51-ibm51n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P51-ibm51n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P51-ibm51n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P51-ibm51n05'(suite) -> [];
'ibm-not-wf-P51-ibm51n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P51-ibm51n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P51-ibm51n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P51-ibm51n04'(suite) -> [];
'ibm-not-wf-P51-ibm51n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P51-ibm51n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P51-ibm51n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P51-ibm51n03'(suite) -> [];
'ibm-not-wf-P51-ibm51n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P51-ibm51n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P51-ibm51n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P51-ibm51n02'(suite) -> [];
'ibm-not-wf-P51-ibm51n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P51-ibm51n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P51-ibm51n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P51-ibm51n01'(suite) -> [];
'ibm-not-wf-P51-ibm51n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P51-ibm51n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P51-ibm51n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P50-ibm50n07'(suite) -> [];
'ibm-not-wf-P50-ibm50n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P50-ibm50n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P50-ibm50n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P50-ibm50n06'(suite) -> [];
'ibm-not-wf-P50-ibm50n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P50-ibm50n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P50-ibm50n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P50-ibm50n05'(suite) -> [];
'ibm-not-wf-P50-ibm50n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P50-ibm50n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P50-ibm50n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P50-ibm50n04'(suite) -> [];
'ibm-not-wf-P50-ibm50n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P50-ibm50n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P50-ibm50n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P50-ibm50n03'(suite) -> [];
'ibm-not-wf-P50-ibm50n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P50-ibm50n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P50-ibm50n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P50-ibm50n02'(suite) -> [];
'ibm-not-wf-P50-ibm50n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P50-ibm50n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P50-ibm50n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P50-ibm50n01'(suite) -> [];
'ibm-not-wf-P50-ibm50n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P50-ibm50n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P50-ibm50n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P49-ibm49n06'(suite) -> [];
'ibm-not-wf-P49-ibm49n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P49-ibm49n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P49-ibm49n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P49-ibm49n05'(suite) -> [];
'ibm-not-wf-P49-ibm49n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P49-ibm49n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P49-ibm49n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P49-ibm49n04'(suite) -> [];
'ibm-not-wf-P49-ibm49n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P49-ibm49n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P49-ibm49n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P49-ibm49n03'(suite) -> [];
'ibm-not-wf-P49-ibm49n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P49-ibm49n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P49-ibm49n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P49-ibm49n02'(suite) -> [];
'ibm-not-wf-P49-ibm49n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P49-ibm49n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P49-ibm49n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P49-ibm49n01'(suite) -> [];
'ibm-not-wf-P49-ibm49n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P49-ibm49n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P49-ibm49n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P48-ibm48n07'(suite) -> [];
'ibm-not-wf-P48-ibm48n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P48-ibm48n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P48-ibm48n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P48-ibm48n06'(suite) -> [];
'ibm-not-wf-P48-ibm48n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P48-ibm48n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P48-ibm48n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P48-ibm48n05'(suite) -> [];
'ibm-not-wf-P48-ibm48n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P48-ibm48n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P48-ibm48n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P48-ibm48n04'(suite) -> [];
'ibm-not-wf-P48-ibm48n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P48-ibm48n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P48-ibm48n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P48-ibm48n03'(suite) -> [];
'ibm-not-wf-P48-ibm48n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P48-ibm48n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P48-ibm48n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P48-ibm48n02'(suite) -> [];
'ibm-not-wf-P48-ibm48n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P48-ibm48n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P48-ibm48n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P48-ibm48n01'(suite) -> [];
'ibm-not-wf-P48-ibm48n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P48-ibm48n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P48-ibm48n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P47-ibm47n06'(suite) -> [];
'ibm-not-wf-P47-ibm47n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P47-ibm47n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P47-ibm47n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P47-ibm47n05'(suite) -> [];
'ibm-not-wf-P47-ibm47n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P47-ibm47n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P47-ibm47n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P47-ibm47n04'(suite) -> [];
'ibm-not-wf-P47-ibm47n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P47-ibm47n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P47-ibm47n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P47-ibm47n03'(suite) -> [];
'ibm-not-wf-P47-ibm47n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P47-ibm47n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P47-ibm47n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P47-ibm47n02'(suite) -> [];
'ibm-not-wf-P47-ibm47n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P47-ibm47n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P47-ibm47n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P47-ibm47n01'(suite) -> [];
'ibm-not-wf-P47-ibm47n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P47-ibm47n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P47-ibm47n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P46-ibm46n05'(suite) -> [];
'ibm-not-wf-P46-ibm46n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P46-ibm46n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P46-ibm46n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P46-ibm46n04'(suite) -> [];
'ibm-not-wf-P46-ibm46n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P46-ibm46n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P46-ibm46n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P46-ibm46n03'(suite) -> [];
'ibm-not-wf-P46-ibm46n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P46-ibm46n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P46-ibm46n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P46-ibm46n02'(suite) -> [];
'ibm-not-wf-P46-ibm46n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P46-ibm46n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P46-ibm46n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P46-ibm46n01'(suite) -> [];
'ibm-not-wf-P46-ibm46n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P46-ibm46n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P46-ibm46n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P45-ibm45n09'(suite) -> [];
'ibm-not-wf-P45-ibm45n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P45-ibm45n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P45-ibm45n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P45-ibm45n08'(suite) -> [];
'ibm-not-wf-P45-ibm45n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P45-ibm45n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P45-ibm45n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P45-ibm45n07'(suite) -> [];
'ibm-not-wf-P45-ibm45n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P45-ibm45n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P45-ibm45n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P45-ibm45n06'(suite) -> [];
'ibm-not-wf-P45-ibm45n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P45-ibm45n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P45-ibm45n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P45-ibm45n05'(suite) -> [];
'ibm-not-wf-P45-ibm45n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P45-ibm45n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P45-ibm45n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P45-ibm45n04'(suite) -> [];
'ibm-not-wf-P45-ibm45n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P45-ibm45n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P45-ibm45n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P45-ibm45n03'(suite) -> [];
'ibm-not-wf-P45-ibm45n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P45-ibm45n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P45-ibm45n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P45-ibm45n02'(suite) -> [];
'ibm-not-wf-P45-ibm45n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P45-ibm45n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P45-ibm45n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P45-ibm45n01'(suite) -> [];
'ibm-not-wf-P45-ibm45n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P45-ibm45n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P45-ibm45n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P44-ibm44n04'(suite) -> [];
'ibm-not-wf-P44-ibm44n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P44-ibm44n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P44-ibm44n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P44-ibm44n03'(suite) -> [];
'ibm-not-wf-P44-ibm44n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P44-ibm44n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P44-ibm44n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P44-ibm44n02'(suite) -> [];
'ibm-not-wf-P44-ibm44n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P44-ibm44n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P44-ibm44n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P44-ibm44n01'(suite) -> [];
'ibm-not-wf-P44-ibm44n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P44-ibm44n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P44-ibm44n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P43-ibm43n05'(suite) -> [];
'ibm-not-wf-P43-ibm43n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P43-ibm43n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P43-ibm43n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P43-ibm43n04'(suite) -> [];
'ibm-not-wf-P43-ibm43n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P43-ibm43n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P43-ibm43n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P43-ibm43n02'(suite) -> [];
'ibm-not-wf-P43-ibm43n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P43-ibm43n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P43-ibm43n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P43-ibm43n01'(suite) -> [];
'ibm-not-wf-P43-ibm43n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P43-ibm43n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P43-ibm43n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P42-ibm42n05'(suite) -> [];
'ibm-not-wf-P42-ibm42n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P42-ibm42n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P42-ibm42n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P42-ibm42n04'(suite) -> [];
'ibm-not-wf-P42-ibm42n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P42-ibm42n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P42-ibm42n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P42-ibm42n03'(suite) -> [];
'ibm-not-wf-P42-ibm42n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P42-ibm42n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P42-ibm42n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P42-ibm42n02'(suite) -> [];
'ibm-not-wf-P42-ibm42n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P42-ibm42n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P42-ibm42n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P42-ibm42n01'(suite) -> [];
'ibm-not-wf-P42-ibm42n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P42-ibm42n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P42-ibm42n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n14'(suite) -> [];
'ibm-not-wf-P41-ibm41n14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n13'(suite) -> [];
'ibm-not-wf-P41-ibm41n13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n12'(suite) -> [];
'ibm-not-wf-P41-ibm41n12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n11'(suite) -> [];
'ibm-not-wf-P41-ibm41n11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n10'(suite) -> [];
'ibm-not-wf-P41-ibm41n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n09'(suite) -> [];
'ibm-not-wf-P41-ibm41n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n08'(suite) -> [];
'ibm-not-wf-P41-ibm41n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n07'(suite) -> [];
'ibm-not-wf-P41-ibm41n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n06'(suite) -> [];
'ibm-not-wf-P41-ibm41n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n05'(suite) -> [];
'ibm-not-wf-P41-ibm41n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n04'(suite) -> [];
'ibm-not-wf-P41-ibm41n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n03'(suite) -> [];
'ibm-not-wf-P41-ibm41n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n02'(suite) -> [];
'ibm-not-wf-P41-ibm41n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P41-ibm41n01'(suite) -> [];
'ibm-not-wf-P41-ibm41n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P41-ibm41n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P41-ibm41n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P40-ibm40n05'(suite) -> [];
'ibm-not-wf-P40-ibm40n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P40-ibm40n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P40-ibm40n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P40-ibm40n04'(suite) -> [];
'ibm-not-wf-P40-ibm40n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P40-ibm40n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P40-ibm40n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P40-ibm40n03'(suite) -> [];
'ibm-not-wf-P40-ibm40n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P40-ibm40n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P40-ibm40n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P40-ibm40n02'(suite) -> [];
'ibm-not-wf-P40-ibm40n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P40-ibm40n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P40-ibm40n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P40-ibm40n01'(suite) -> [];
'ibm-not-wf-P40-ibm40n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P40-ibm40n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P40-ibm40n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P39-ibm39n06'(suite) -> [];
'ibm-not-wf-P39-ibm39n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P39-ibm39n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P39-ibm39n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P39-ibm39n05'(suite) -> [];
'ibm-not-wf-P39-ibm39n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P39-ibm39n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P39-ibm39n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P39-ibm39n04'(suite) -> [];
'ibm-not-wf-P39-ibm39n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P39-ibm39n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P39-ibm39n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P39-ibm39n03'(suite) -> [];
'ibm-not-wf-P39-ibm39n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P39-ibm39n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P39-ibm39n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P39-ibm39n02'(suite) -> [];
'ibm-not-wf-P39-ibm39n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P39-ibm39n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P39-ibm39n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P39-ibm39n01'(suite) -> [];
'ibm-not-wf-P39-ibm39n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P39-ibm39n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P39-ibm39n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P32-ibm32n09'(suite) -> [];
'ibm-not-wf-P32-ibm32n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P32-ibm32n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P32-ibm32n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P32-ibm32n08'(suite) -> [];
'ibm-not-wf-P32-ibm32n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P32-ibm32n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P32-ibm32n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P32-ibm32n07'(suite) -> [];
'ibm-not-wf-P32-ibm32n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P32-ibm32n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P32-ibm32n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P32-ibm32n06'(suite) -> [];
'ibm-not-wf-P32-ibm32n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P32-ibm32n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P32-ibm32n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P32-ibm32n05'(suite) -> [];
'ibm-not-wf-P32-ibm32n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P32-ibm32n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P32-ibm32n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P32-ibm32n04'(suite) -> [];
'ibm-not-wf-P32-ibm32n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P32-ibm32n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P32-ibm32n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P32-ibm32n03'(suite) -> [];
'ibm-not-wf-P32-ibm32n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P32-ibm32n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P32-ibm32n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P32-ibm32n02'(suite) -> [];
'ibm-not-wf-P32-ibm32n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P32-ibm32n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P32-ibm32n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P32-ibm32n01'(suite) -> [];
'ibm-not-wf-P32-ibm32n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P32-ibm32n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P32-ibm32n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P31-ibm31n01'(suite) -> [];
'ibm-not-wf-P31-ibm31n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P31-ibm31n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P31-ibm31n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P30-ibm30n01'(suite) -> [];
'ibm-not-wf-P30-ibm30n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P30-ibm30n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P30-ibm30n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P29-ibm29n07'(suite) -> [];
'ibm-not-wf-P29-ibm29n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P29-ibm29n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P29-ibm29n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P29-ibm29n06'(suite) -> [];
'ibm-not-wf-P29-ibm29n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P29-ibm29n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P29-ibm29n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P29-ibm29n05'(suite) -> [];
'ibm-not-wf-P29-ibm29n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P29-ibm29n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P29-ibm29n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P29-ibm29n04'(suite) -> [];
'ibm-not-wf-P29-ibm29n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P29-ibm29n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P29-ibm29n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P29-ibm29n03'(suite) -> [];
'ibm-not-wf-P29-ibm29n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P29-ibm29n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P29-ibm29n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P29-ibm29n02'(suite) -> [];
'ibm-not-wf-P29-ibm29n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P29-ibm29n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P29-ibm29n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P29-ibm29n01'(suite) -> [];
'ibm-not-wf-P29-ibm29n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P29-ibm29n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P29-ibm29n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P28a-ibm28an01'(suite) -> [];
'ibm-not-wf-P28a-ibm28an01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P28a-ibm28an01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P28a-ibm28an01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P28-ibm28n08'(suite) -> [];
'ibm-not-wf-P28-ibm28n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P28-ibm28n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P28-ibm28n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P28-ibm28n07'(suite) -> [];
'ibm-not-wf-P28-ibm28n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P28-ibm28n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P28-ibm28n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P28-ibm28n06'(suite) -> [];
'ibm-not-wf-P28-ibm28n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P28-ibm28n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P28-ibm28n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P28-ibm28n05'(suite) -> [];
'ibm-not-wf-P28-ibm28n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P28-ibm28n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P28-ibm28n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P28-ibm28n04'(suite) -> [];
'ibm-not-wf-P28-ibm28n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P28-ibm28n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P28-ibm28n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P28-ibm28n03'(suite) -> [];
'ibm-not-wf-P28-ibm28n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P28-ibm28n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P28-ibm28n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P28-ibm28n02'(suite) -> [];
'ibm-not-wf-P28-ibm28n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P28-ibm28n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P28-ibm28n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P28-ibm28n01'(suite) -> [];
'ibm-not-wf-P28-ibm28n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P28-ibm28n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P28-ibm28n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P27-ibm27n01'(suite) -> [];
'ibm-not-wf-P27-ibm27n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P27-ibm27n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P27-ibm27n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P26-ibm26n01'(suite) -> [];
'ibm-not-wf-P26-ibm26n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P26-ibm26n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P26-ibm26n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P25-ibm25n02'(suite) -> [];
'ibm-not-wf-P25-ibm25n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P25-ibm25n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P25-ibm25n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P25-ibm25n01'(suite) -> [];
'ibm-not-wf-P25-ibm25n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P25-ibm25n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P25-ibm25n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P24-ibm24n09'(suite) -> [];
'ibm-not-wf-P24-ibm24n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P24-ibm24n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P24-ibm24n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P24-ibm24n08'(suite) -> [];
'ibm-not-wf-P24-ibm24n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P24-ibm24n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P24-ibm24n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P24-ibm24n07'(suite) -> [];
'ibm-not-wf-P24-ibm24n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P24-ibm24n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P24-ibm24n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P24-ibm24n06'(suite) -> [];
'ibm-not-wf-P24-ibm24n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P24-ibm24n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P24-ibm24n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P24-ibm24n05'(suite) -> [];
'ibm-not-wf-P24-ibm24n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P24-ibm24n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P24-ibm24n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P24-ibm24n04'(suite) -> [];
'ibm-not-wf-P24-ibm24n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P24-ibm24n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P24-ibm24n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P24-ibm24n03'(suite) -> [];
'ibm-not-wf-P24-ibm24n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P24-ibm24n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P24-ibm24n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P24-ibm24n02'(suite) -> [];
'ibm-not-wf-P24-ibm24n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P24-ibm24n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P24-ibm24n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P24-ibm24n01'(suite) -> [];
'ibm-not-wf-P24-ibm24n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P24-ibm24n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P24-ibm24n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P23-ibm23n06'(suite) -> [];
'ibm-not-wf-P23-ibm23n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P23-ibm23n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P23-ibm23n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P23-ibm23n05'(suite) -> [];
'ibm-not-wf-P23-ibm23n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P23-ibm23n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P23-ibm23n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P23-ibm23n04'(suite) -> [];
'ibm-not-wf-P23-ibm23n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P23-ibm23n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P23-ibm23n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P23-ibm23n03'(suite) -> [];
'ibm-not-wf-P23-ibm23n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P23-ibm23n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P23-ibm23n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P23-ibm23n02'(suite) -> [];
'ibm-not-wf-P23-ibm23n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P23-ibm23n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P23-ibm23n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P23-ibm23n01'(suite) -> [];
'ibm-not-wf-P23-ibm23n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P23-ibm23n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P23-ibm23n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P22-ibm22n03'(suite) -> [];
'ibm-not-wf-P22-ibm22n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P22-ibm22n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P22-ibm22n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P22-ibm22n02'(suite) -> [];
'ibm-not-wf-P22-ibm22n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P22-ibm22n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P22-ibm22n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P22-ibm22n01'(suite) -> [];
'ibm-not-wf-P22-ibm22n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P22-ibm22n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P22-ibm22n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P21-ibm21n03'(suite) -> [];
'ibm-not-wf-P21-ibm21n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P21-ibm21n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P21-ibm21n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P21-ibm21n02'(suite) -> [];
'ibm-not-wf-P21-ibm21n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P21-ibm21n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P21-ibm21n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P21-ibm21n01'(suite) -> [];
'ibm-not-wf-P21-ibm21n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P21-ibm21n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P21-ibm21n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P20-ibm20n01'(suite) -> [];
'ibm-not-wf-P20-ibm20n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P20-ibm20n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P20-ibm20n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P19-ibm19n03'(suite) -> [];
'ibm-not-wf-P19-ibm19n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P19-ibm19n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P19-ibm19n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P19-ibm19n02'(suite) -> [];
'ibm-not-wf-P19-ibm19n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P19-ibm19n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P19-ibm19n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P19-ibm19n01'(suite) -> [];
'ibm-not-wf-P19-ibm19n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P19-ibm19n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P19-ibm19n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P18-ibm18n02'(suite) -> [];
'ibm-not-wf-P18-ibm18n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P18-ibm18n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P18-ibm18n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P18-ibm18n01'(suite) -> [];
'ibm-not-wf-P18-ibm18n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P18-ibm18n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P18-ibm18n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P17-ibm17n04'(suite) -> [];
'ibm-not-wf-P17-ibm17n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P17-ibm17n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P17-ibm17n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P17-ibm17n03'(suite) -> [];
'ibm-not-wf-P17-ibm17n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P17-ibm17n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P17-ibm17n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P17-ibm17n02'(suite) -> [];
'ibm-not-wf-P17-ibm17n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P17-ibm17n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P17-ibm17n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P17-ibm17n01'(suite) -> [];
'ibm-not-wf-P17-ibm17n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P17-ibm17n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P17-ibm17n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P16-ibm16n04'(suite) -> [];
'ibm-not-wf-P16-ibm16n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P16-ibm16n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P16-ibm16n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P16-ibm16n03'(suite) -> [];
'ibm-not-wf-P16-ibm16n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P16-ibm16n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P16-ibm16n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P16-ibm16n02'(suite) -> [];
'ibm-not-wf-P16-ibm16n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P16-ibm16n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P16-ibm16n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P16-ibm16n01'(suite) -> [];
'ibm-not-wf-P16-ibm16n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P16-ibm16n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P16-ibm16n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P15-ibm15n04'(suite) -> [];
'ibm-not-wf-P15-ibm15n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P15-ibm15n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P15-ibm15n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P15-ibm15n03'(suite) -> [];
'ibm-not-wf-P15-ibm15n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P15-ibm15n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P15-ibm15n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P15-ibm15n02'(suite) -> [];
'ibm-not-wf-P15-ibm15n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P15-ibm15n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P15-ibm15n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P15-ibm15n01'(suite) -> [];
'ibm-not-wf-P15-ibm15n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P15-ibm15n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P15-ibm15n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P14-ibm14n03'(suite) -> [];
'ibm-not-wf-P14-ibm14n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P14-ibm14n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P14-ibm14n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P14-ibm14n02'(suite) -> [];
'ibm-not-wf-P14-ibm14n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P14-ibm14n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P14-ibm14n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P14-ibm14n01'(suite) -> [];
'ibm-not-wf-P14-ibm14n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P14-ibm14n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P14-ibm14n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P13-ibm13n03'(suite) -> [];
'ibm-not-wf-P13-ibm13n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P13-ibm13n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P13-ibm13n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P13-ibm13n02'(suite) -> [];
'ibm-not-wf-P13-ibm13n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P13-ibm13n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P13-ibm13n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P13-ibm13n01'(suite) -> [];
'ibm-not-wf-P13-ibm13n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P13-ibm13n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P13-ibm13n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P12-ibm12n03'(suite) -> [];
'ibm-not-wf-P12-ibm12n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P12-ibm12n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P12-ibm12n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P12-ibm12n02'(suite) -> [];
'ibm-not-wf-P12-ibm12n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P12-ibm12n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P12-ibm12n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P12-ibm12n01'(suite) -> [];
'ibm-not-wf-P12-ibm12n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P12-ibm12n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P12-ibm12n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P11-ibm11n04'(suite) -> [];
'ibm-not-wf-P11-ibm11n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P11-ibm11n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P11-ibm11n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P11-ibm11n03'(suite) -> [];
'ibm-not-wf-P11-ibm11n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P11-ibm11n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P11-ibm11n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P11-ibm11n02'(suite) -> [];
'ibm-not-wf-P11-ibm11n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P11-ibm11n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P11-ibm11n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P11-ibm11n01'(suite) -> [];
'ibm-not-wf-P11-ibm11n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P11-ibm11n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P11-ibm11n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P10-ibm10n08'(suite) -> [];
'ibm-not-wf-P10-ibm10n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P10-ibm10n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P10-ibm10n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P10-ibm10n07'(suite) -> [];
'ibm-not-wf-P10-ibm10n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P10-ibm10n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P10-ibm10n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P10-ibm10n06'(suite) -> [];
'ibm-not-wf-P10-ibm10n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P10-ibm10n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P10-ibm10n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P10-ibm10n05'(suite) -> [];
'ibm-not-wf-P10-ibm10n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P10-ibm10n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P10-ibm10n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P10-ibm10n04'(suite) -> [];
'ibm-not-wf-P10-ibm10n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P10-ibm10n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P10-ibm10n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P10-ibm10n03'(suite) -> [];
'ibm-not-wf-P10-ibm10n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P10-ibm10n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P10-ibm10n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P10-ibm10n02'(suite) -> [];
'ibm-not-wf-P10-ibm10n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P10-ibm10n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P10-ibm10n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P10-ibm10n01'(suite) -> [];
'ibm-not-wf-P10-ibm10n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P10-ibm10n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P10-ibm10n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P09-ibm09n04'(suite) -> [];
'ibm-not-wf-P09-ibm09n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P09-ibm09n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P09-ibm09n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P09-ibm09n03'(suite) -> [];
'ibm-not-wf-P09-ibm09n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P09-ibm09n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P09-ibm09n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P09-ibm09n02'(suite) -> [];
'ibm-not-wf-P09-ibm09n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P09-ibm09n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P09-ibm09n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P09-ibm09n01'(suite) -> [];
'ibm-not-wf-P09-ibm09n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P09-ibm09n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P09-ibm09n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P05-ibm05n03'(suite) -> [];
'ibm-not-wf-P05-ibm05n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P05-ibm05n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P05-ibm05n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P05-ibm05n02'(suite) -> [];
'ibm-not-wf-P05-ibm05n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P05-ibm05n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P05-ibm05n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P05-ibm05n01'(suite) -> [];
'ibm-not-wf-P05-ibm05n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P05-ibm05n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P05-ibm05n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n18'(suite) -> [];
'ibm-not-wf-P04-ibm04n18'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n18.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n18.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n17'(suite) -> [];
'ibm-not-wf-P04-ibm04n17'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n17.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n17.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n16'(suite) -> [];
'ibm-not-wf-P04-ibm04n16'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n16.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n16.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n15'(suite) -> [];
'ibm-not-wf-P04-ibm04n15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n14'(suite) -> [];
'ibm-not-wf-P04-ibm04n14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n13'(suite) -> [];
'ibm-not-wf-P04-ibm04n13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n12'(suite) -> [];
'ibm-not-wf-P04-ibm04n12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n11'(suite) -> [];
'ibm-not-wf-P04-ibm04n11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n10'(suite) -> [];
'ibm-not-wf-P04-ibm04n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n09'(suite) -> [];
'ibm-not-wf-P04-ibm04n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n08'(suite) -> [];
'ibm-not-wf-P04-ibm04n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n07'(suite) -> [];
'ibm-not-wf-P04-ibm04n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n06'(suite) -> [];
'ibm-not-wf-P04-ibm04n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n05'(suite) -> [];
'ibm-not-wf-P04-ibm04n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n04'(suite) -> [];
'ibm-not-wf-P04-ibm04n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n03'(suite) -> [];
'ibm-not-wf-P04-ibm04n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n02'(suite) -> [];
'ibm-not-wf-P04-ibm04n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P04-ibm04n01'(suite) -> [];
'ibm-not-wf-P04-ibm04n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P04-ibm04n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P04-ibm04n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P03-ibm03n01'(suite) -> [];
'ibm-not-wf-P03-ibm03n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P03-ibm03n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P03-ibm03n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n33'(suite) -> [];
'ibm-not-wf-P02-ibm02n33'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n33.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n33.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n32'(suite) -> [];
'ibm-not-wf-P02-ibm02n32'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n32.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n32.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n31'(suite) -> [];
'ibm-not-wf-P02-ibm02n31'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n31.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n31.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n30'(suite) -> [];
'ibm-not-wf-P02-ibm02n30'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n30.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n30.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n29'(suite) -> [];
'ibm-not-wf-P02-ibm02n29'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n29.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n29.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n28'(suite) -> [];
'ibm-not-wf-P02-ibm02n28'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n28.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n28.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n27'(suite) -> [];
'ibm-not-wf-P02-ibm02n27'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n27.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n27.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n26'(suite) -> [];
'ibm-not-wf-P02-ibm02n26'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n26.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n26.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n25'(suite) -> [];
'ibm-not-wf-P02-ibm02n25'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n25.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n25.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n24'(suite) -> [];
'ibm-not-wf-P02-ibm02n24'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n24.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n24.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n23'(suite) -> [];
'ibm-not-wf-P02-ibm02n23'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n23.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n23.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n22'(suite) -> [];
'ibm-not-wf-P02-ibm02n22'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n22.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n22.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n21'(suite) -> [];
'ibm-not-wf-P02-ibm02n21'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n21.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n21.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n20'(suite) -> [];
'ibm-not-wf-P02-ibm02n20'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n20.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n20.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n19'(suite) -> [];
'ibm-not-wf-P02-ibm02n19'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n19.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n19.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n18'(suite) -> [];
'ibm-not-wf-P02-ibm02n18'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n18.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n18.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n17'(suite) -> [];
'ibm-not-wf-P02-ibm02n17'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n17.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n17.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n16'(suite) -> [];
'ibm-not-wf-P02-ibm02n16'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n16.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n16.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n15'(suite) -> [];
'ibm-not-wf-P02-ibm02n15'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n15.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n15.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n14'(suite) -> [];
'ibm-not-wf-P02-ibm02n14'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n14.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n14.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n13'(suite) -> [];
'ibm-not-wf-P02-ibm02n13'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n13.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n13.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n12'(suite) -> [];
'ibm-not-wf-P02-ibm02n12'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n12.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n12.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n11'(suite) -> [];
'ibm-not-wf-P02-ibm02n11'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n11.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n11.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n10'(suite) -> [];
'ibm-not-wf-P02-ibm02n10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n09'(suite) -> [];
'ibm-not-wf-P02-ibm02n09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n08'(suite) -> [];
'ibm-not-wf-P02-ibm02n08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n07'(suite) -> [];
'ibm-not-wf-P02-ibm02n07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n06'(suite) -> [];
'ibm-not-wf-P02-ibm02n06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n05'(suite) -> [];
'ibm-not-wf-P02-ibm02n05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n04'(suite) -> [];
'ibm-not-wf-P02-ibm02n04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n03'(suite) -> [];
'ibm-not-wf-P02-ibm02n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n02'(suite) -> [];
'ibm-not-wf-P02-ibm02n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P02-ibm02n01'(suite) -> [];
'ibm-not-wf-P02-ibm02n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P02-ibm02n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P02-ibm02n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P01-ibm01n03'(suite) -> [];
'ibm-not-wf-P01-ibm01n03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P01-ibm01n03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P01-ibm01n03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P01-ibm01n02'(suite) -> [];
'ibm-not-wf-P01-ibm01n02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P01-ibm01n02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P01-ibm01n02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-not-wf-P01-ibm01n01'(suite) -> [];
'ibm-not-wf-P01-ibm01n01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-not-wf-P01-ibm01n01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-not-wf-P01-ibm01n01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
%%----------------------------------------------------------------------
-'ibm-valid-P89-ibm89v01'(suite) -> [];
'ibm-valid-P89-ibm89v01'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P89-ibm89v01.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P89-ibm89v01.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Fails to handle name containing characters > x#ff, since they are converted to atoms"]}.
-'ibm-valid-P88-ibm88v01'(suite) -> [];
'ibm-valid-P88-ibm88v01'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P88-ibm88v01.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P88-ibm88v01.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Fails to handle name containing characters > x#ff, since they are converted to atoms"]}.
-'ibm-valid-P87-ibm87v01'(suite) -> [];
'ibm-valid-P87-ibm87v01'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P87-ibm87v01.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P87-ibm87v01.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Fails to handle name containing characters > x#ff, since they are converted to atoms"]}.
-'ibm-valid-P86-ibm86v01'(suite) -> [];
'ibm-valid-P86-ibm86v01'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P86-ibm86v01.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P86-ibm86v01.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Fails to handle name containing characters > x#ff, since they are converted to atoms"]}.
-'ibm-valid-P85-ibm85v01'(suite) -> [];
'ibm-valid-P85-ibm85v01'(_Config) ->
-% ?line file:set_cwd(?config(data_dir,Config)),
-% ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P85-ibm85v01.xml"]),[]),
-% ?line xmerl:export([A],xmerl_test).
+% file:set_cwd(datadir(Config)),
+% {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P85-ibm85v01.xml"]),[]),
+% xmerl:export([A],xmerl_test).
{skip,["Fails to handle name containing characters > x#ff, since they are converted to atoms"]}.
-'ibm-valid-P82-ibm82v01'(suite) -> [];
'ibm-valid-P82-ibm82v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P82-ibm82v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P82-ibm82v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P79-ibm79v01'(suite) -> [];
'ibm-valid-P79-ibm79v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P79-ibm79v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P79-ibm79v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P78-ibm78v01'(suite) -> [];
'ibm-valid-P78-ibm78v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P78-ibm78v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P78-ibm78v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P70-ibm70v01'(suite) -> [];
'ibm-valid-P70-ibm70v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P70-ibm70v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P70-ibm70v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P69-ibm69v02'(suite) -> [];
'ibm-valid-P69-ibm69v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P69-ibm69v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P69-ibm69v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P69-ibm69v01'(suite) -> [];
'ibm-valid-P69-ibm69v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P69-ibm69v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P69-ibm69v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P68-ibm68v02'(suite) -> [];
'ibm-valid-P68-ibm68v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P68-ibm68v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P68-ibm68v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P68-ibm68v01'(suite) -> [];
'ibm-valid-P68-ibm68v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P68-ibm68v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P68-ibm68v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P67-ibm67v01'(suite) -> [];
'ibm-valid-P67-ibm67v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P67-ibm67v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P67-ibm67v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P66-ibm66v01'(suite) -> [];
'ibm-valid-P66-ibm66v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P66-ibm66v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P66-ibm66v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P65-ibm65v02'(suite) -> [];
'ibm-valid-P65-ibm65v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P65-ibm65v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P65-ibm65v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P65-ibm65v01'(suite) -> [];
'ibm-valid-P65-ibm65v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P65-ibm65v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P65-ibm65v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P64-ibm64v03'(suite) -> [];
'ibm-valid-P64-ibm64v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P64-ibm64v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P64-ibm64v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P64-ibm64v02'(suite) -> [];
'ibm-valid-P64-ibm64v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P64-ibm64v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P64-ibm64v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P64-ibm64v01'(suite) -> [];
'ibm-valid-P64-ibm64v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P64-ibm64v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P64-ibm64v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P63-ibm63v05'(suite) -> [];
'ibm-valid-P63-ibm63v05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P63-ibm63v05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P63-ibm63v05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P63-ibm63v04'(suite) -> [];
'ibm-valid-P63-ibm63v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P63-ibm63v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P63-ibm63v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P63-ibm63v03'(suite) -> [];
'ibm-valid-P63-ibm63v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P63-ibm63v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P63-ibm63v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P63-ibm63v02'(suite) -> [];
'ibm-valid-P63-ibm63v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P63-ibm63v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P63-ibm63v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P63-ibm63v01'(suite) -> [];
'ibm-valid-P63-ibm63v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P63-ibm63v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P63-ibm63v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P62-ibm62v05'(suite) -> [];
'ibm-valid-P62-ibm62v05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P62-ibm62v05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P62-ibm62v05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P62-ibm62v04'(suite) -> [];
'ibm-valid-P62-ibm62v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P62-ibm62v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P62-ibm62v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P62-ibm62v03'(suite) -> [];
'ibm-valid-P62-ibm62v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P62-ibm62v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P62-ibm62v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P62-ibm62v02'(suite) -> [];
'ibm-valid-P62-ibm62v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P62-ibm62v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P62-ibm62v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P62-ibm62v01'(suite) -> [];
'ibm-valid-P62-ibm62v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P62-ibm62v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P62-ibm62v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P61-ibm61v02'(suite) -> [];
'ibm-valid-P61-ibm61v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P61-ibm61v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P61-ibm61v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P61-ibm61v01'(suite) -> [];
'ibm-valid-P61-ibm61v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P61-ibm61v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P61-ibm61v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P60-ibm60v04'(suite) -> [];
'ibm-valid-P60-ibm60v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P60-ibm60v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P60-ibm60v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P60-ibm60v03'(suite) -> [];
'ibm-valid-P60-ibm60v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P60-ibm60v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P60-ibm60v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P60-ibm60v02'(suite) -> [];
'ibm-valid-P60-ibm60v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P60-ibm60v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P60-ibm60v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P60-ibm60v01'(suite) -> [];
'ibm-valid-P60-ibm60v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P60-ibm60v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P60-ibm60v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P59-ibm59v02'(suite) -> [];
'ibm-valid-P59-ibm59v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P59-ibm59v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P59-ibm59v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P59-ibm59v01'(suite) -> [];
'ibm-valid-P59-ibm59v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P59-ibm59v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P59-ibm59v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P58-ibm58v02'(suite) -> [];
'ibm-valid-P58-ibm58v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P58-ibm58v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P58-ibm58v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P58-ibm58v01'(suite) -> [];
'ibm-valid-P58-ibm58v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P58-ibm58v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P58-ibm58v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P57-ibm57v01'(suite) -> [];
'ibm-valid-P57-ibm57v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P57-ibm57v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P57-ibm57v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v10'(suite) -> [];
'ibm-valid-P56-ibm56v10'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v10.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v10.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v09'(suite) -> [];
'ibm-valid-P56-ibm56v09'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v09.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v09.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v08'(suite) -> [];
'ibm-valid-P56-ibm56v08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v07'(suite) -> [];
'ibm-valid-P56-ibm56v07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v06'(suite) -> [];
'ibm-valid-P56-ibm56v06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v05'(suite) -> [];
'ibm-valid-P56-ibm56v05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v04'(suite) -> [];
'ibm-valid-P56-ibm56v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v03'(suite) -> [];
'ibm-valid-P56-ibm56v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v02'(suite) -> [];
'ibm-valid-P56-ibm56v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P56-ibm56v01'(suite) -> [];
'ibm-valid-P56-ibm56v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P56-ibm56v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P56-ibm56v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P55-ibm55v01'(suite) -> [];
'ibm-valid-P55-ibm55v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P55-ibm55v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P55-ibm55v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P54-ibm54v03'(suite) -> [];
'ibm-valid-P54-ibm54v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P54-ibm54v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P54-ibm54v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P54-ibm54v02'(suite) -> [];
'ibm-valid-P54-ibm54v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P54-ibm54v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P54-ibm54v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P54-ibm54v01'(suite) -> [];
'ibm-valid-P54-ibm54v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P54-ibm54v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P54-ibm54v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P52-ibm52v01'(suite) -> [];
'ibm-valid-P52-ibm52v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P52-ibm52v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P52-ibm52v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P51-ibm51v02'(suite) -> [];
'ibm-valid-P51-ibm51v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P51-ibm51v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P51-ibm51v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P51-ibm51v01'(suite) -> [];
'ibm-valid-P51-ibm51v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P51-ibm51v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P51-ibm51v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P50-ibm50v01'(suite) -> [];
'ibm-valid-P50-ibm50v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P50-ibm50v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P50-ibm50v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P49-ibm49v01'(suite) -> [];
'ibm-valid-P49-ibm49v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P49-ibm49v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P49-ibm49v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P47-ibm47v01'(suite) -> [];
'ibm-valid-P47-ibm47v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P47-ibm47v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P47-ibm47v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P45-ibm45v01'(suite) -> [];
'ibm-valid-P45-ibm45v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P45-ibm45v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P45-ibm45v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P44-ibm44v01'(suite) -> [];
'ibm-valid-P44-ibm44v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P44-ibm44v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P44-ibm44v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P43-ibm43v01'(suite) -> [];
'ibm-valid-P43-ibm43v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P43-ibm43v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P43-ibm43v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P42-ibm42v01'(suite) -> [];
'ibm-valid-P42-ibm42v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P42-ibm42v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P42-ibm42v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P41-ibm41v01'(suite) -> [];
'ibm-valid-P41-ibm41v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P41-ibm41v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P41-ibm41v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P40-ibm40v01'(suite) -> [];
'ibm-valid-P40-ibm40v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P40-ibm40v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P40-ibm40v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P39-ibm39v01'(suite) -> [];
'ibm-valid-P39-ibm39v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P39-ibm39v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P39-ibm39v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P38-ibm38v01'(suite) -> [];
'ibm-valid-P38-ibm38v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P38-ibm38v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P38-ibm38v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P37-ibm37v01'(suite) -> [];
'ibm-valid-P37-ibm37v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P37-ibm37v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P37-ibm37v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P36-ibm36v01'(suite) -> [];
'ibm-valid-P36-ibm36v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P36-ibm36v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P36-ibm36v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P35-ibm35v01'(suite) -> [];
'ibm-valid-P35-ibm35v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P35-ibm35v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P35-ibm35v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P34-ibm34v01'(suite) -> [];
'ibm-valid-P34-ibm34v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P34-ibm34v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P34-ibm34v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P33-ibm33v01'(suite) -> [];
'ibm-valid-P33-ibm33v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P33-ibm33v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P33-ibm33v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P32-ibm32v04'(suite) -> [];
'ibm-valid-P32-ibm32v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P32-ibm32v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P32-ibm32v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P32-ibm32v03'(suite) -> [];
'ibm-valid-P32-ibm32v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P32-ibm32v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P32-ibm32v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P32-ibm32v02'(suite) -> [];
'ibm-valid-P32-ibm32v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P32-ibm32v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P32-ibm32v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P32-ibm32v01'(suite) -> [];
'ibm-valid-P32-ibm32v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P32-ibm32v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P32-ibm32v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P31-ibm31v01'(suite) -> [];
'ibm-valid-P31-ibm31v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P31-ibm31v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P31-ibm31v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P30-ibm30v02'(suite) -> [];
'ibm-valid-P30-ibm30v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P30-ibm30v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P30-ibm30v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P30-ibm30v01'(suite) -> [];
'ibm-valid-P30-ibm30v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P30-ibm30v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P30-ibm30v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P29-ibm29v02'(suite) -> [];
'ibm-valid-P29-ibm29v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P29-ibm29v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P29-ibm29v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P29-ibm29v01'(suite) -> [];
'ibm-valid-P29-ibm29v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P29-ibm29v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P29-ibm29v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P28-ibm28v02'(suite) -> [];
'ibm-valid-P28-ibm28v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P28-ibm28v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P28-ibm28v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P28-ibm28v01'(suite) -> [];
'ibm-valid-P28-ibm28v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P28-ibm28v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P28-ibm28v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P27-ibm27v03'(suite) -> [];
'ibm-valid-P27-ibm27v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P27-ibm27v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P27-ibm27v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P27-ibm27v02'(suite) -> [];
'ibm-valid-P27-ibm27v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P27-ibm27v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P27-ibm27v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P27-ibm27v01'(suite) -> [];
'ibm-valid-P27-ibm27v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P27-ibm27v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P27-ibm27v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P26-ibm26v01'(suite) -> [];
'ibm-valid-P26-ibm26v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P26-ibm26v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P26-ibm26v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P25-ibm25v04'(suite) -> [];
'ibm-valid-P25-ibm25v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P25-ibm25v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P25-ibm25v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P25-ibm25v03'(suite) -> [];
'ibm-valid-P25-ibm25v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P25-ibm25v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P25-ibm25v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P25-ibm25v02'(suite) -> [];
'ibm-valid-P25-ibm25v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P25-ibm25v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P25-ibm25v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P25-ibm25v01'(suite) -> [];
'ibm-valid-P25-ibm25v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P25-ibm25v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P25-ibm25v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P24-ibm24v02'(suite) -> [];
'ibm-valid-P24-ibm24v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P24-ibm24v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P24-ibm24v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P24-ibm24v01'(suite) -> [];
'ibm-valid-P24-ibm24v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P24-ibm24v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P24-ibm24v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P23-ibm23v06'(suite) -> [];
'ibm-valid-P23-ibm23v06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P23-ibm23v06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P23-ibm23v06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P23-ibm23v05'(suite) -> [];
'ibm-valid-P23-ibm23v05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P23-ibm23v05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P23-ibm23v05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P23-ibm23v04'(suite) -> [];
'ibm-valid-P23-ibm23v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P23-ibm23v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P23-ibm23v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P23-ibm23v03'(suite) -> [];
'ibm-valid-P23-ibm23v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P23-ibm23v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P23-ibm23v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P23-ibm23v02'(suite) -> [];
'ibm-valid-P23-ibm23v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P23-ibm23v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P23-ibm23v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P23-ibm23v01'(suite) -> [];
'ibm-valid-P23-ibm23v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P23-ibm23v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P23-ibm23v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P22-ibm22v07'(suite) -> [];
'ibm-valid-P22-ibm22v07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P22-ibm22v07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P22-ibm22v07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P22-ibm22v06'(suite) -> [];
'ibm-valid-P22-ibm22v06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P22-ibm22v06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P22-ibm22v06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P22-ibm22v05'(suite) -> [];
'ibm-valid-P22-ibm22v05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P22-ibm22v05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P22-ibm22v05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P22-ibm22v04'(suite) -> [];
'ibm-valid-P22-ibm22v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P22-ibm22v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P22-ibm22v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P22-ibm22v03'(suite) -> [];
'ibm-valid-P22-ibm22v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P22-ibm22v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P22-ibm22v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P22-ibm22v02'(suite) -> [];
'ibm-valid-P22-ibm22v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P22-ibm22v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P22-ibm22v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P22-ibm22v01'(suite) -> [];
'ibm-valid-P22-ibm22v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P22-ibm22v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P22-ibm22v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P21-ibm21v01'(suite) -> [];
'ibm-valid-P21-ibm21v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P21-ibm21v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P21-ibm21v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P20-ibm20v02'(suite) -> [];
'ibm-valid-P20-ibm20v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P20-ibm20v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P20-ibm20v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P20-ibm20v01'(suite) -> [];
'ibm-valid-P20-ibm20v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P20-ibm20v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P20-ibm20v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P19-ibm19v01'(suite) -> [];
'ibm-valid-P19-ibm19v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P19-ibm19v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P19-ibm19v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P18-ibm18v01'(suite) -> [];
'ibm-valid-P18-ibm18v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P18-ibm18v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P18-ibm18v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P17-ibm17v01'(suite) -> [];
'ibm-valid-P17-ibm17v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P17-ibm17v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P17-ibm17v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P16-ibm16v03'(suite) -> [];
'ibm-valid-P16-ibm16v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P16-ibm16v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P16-ibm16v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P16-ibm16v02'(suite) -> [];
'ibm-valid-P16-ibm16v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P16-ibm16v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P16-ibm16v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P16-ibm16v01'(suite) -> [];
'ibm-valid-P16-ibm16v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P16-ibm16v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P16-ibm16v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P15-ibm15v04'(suite) -> [];
'ibm-valid-P15-ibm15v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P15-ibm15v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P15-ibm15v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P15-ibm15v03'(suite) -> [];
'ibm-valid-P15-ibm15v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P15-ibm15v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P15-ibm15v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P15-ibm15v02'(suite) -> [];
'ibm-valid-P15-ibm15v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P15-ibm15v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P15-ibm15v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P15-ibm15v01'(suite) -> [];
'ibm-valid-P15-ibm15v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P15-ibm15v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P15-ibm15v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P14-ibm14v03'(suite) -> [];
'ibm-valid-P14-ibm14v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P14-ibm14v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P14-ibm14v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P14-ibm14v02'(suite) -> [];
'ibm-valid-P14-ibm14v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P14-ibm14v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P14-ibm14v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P14-ibm14v01'(suite) -> [];
'ibm-valid-P14-ibm14v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P14-ibm14v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P14-ibm14v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P13-ibm13v01'(suite) -> [];
'ibm-valid-P13-ibm13v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P13-ibm13v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P13-ibm13v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P12-ibm12v04'(suite) -> [];
'ibm-valid-P12-ibm12v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P12-ibm12v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P12-ibm12v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P12-ibm12v03'(suite) -> [];
'ibm-valid-P12-ibm12v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P12-ibm12v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P12-ibm12v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P12-ibm12v02'(suite) -> [];
'ibm-valid-P12-ibm12v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P12-ibm12v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P12-ibm12v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P12-ibm12v01'(suite) -> [];
'ibm-valid-P12-ibm12v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P12-ibm12v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P12-ibm12v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P11-ibm11v04'(suite) -> [];
'ibm-valid-P11-ibm11v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P11-ibm11v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P11-ibm11v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P11-ibm11v03'(suite) -> [];
'ibm-valid-P11-ibm11v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P11-ibm11v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P11-ibm11v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P11-ibm11v02'(suite) -> [];
'ibm-valid-P11-ibm11v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P11-ibm11v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P11-ibm11v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P11-ibm11v01'(suite) -> [];
'ibm-valid-P11-ibm11v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P11-ibm11v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P11-ibm11v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P10-ibm10v08'(suite) -> [];
'ibm-valid-P10-ibm10v08'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P10-ibm10v08.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P10-ibm10v08.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P10-ibm10v07'(suite) -> [];
'ibm-valid-P10-ibm10v07'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P10-ibm10v07.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P10-ibm10v07.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P10-ibm10v06'(suite) -> [];
'ibm-valid-P10-ibm10v06'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P10-ibm10v06.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P10-ibm10v06.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P10-ibm10v05'(suite) -> [];
'ibm-valid-P10-ibm10v05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P10-ibm10v05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P10-ibm10v05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P10-ibm10v04'(suite) -> [];
'ibm-valid-P10-ibm10v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P10-ibm10v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P10-ibm10v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P10-ibm10v03'(suite) -> [];
'ibm-valid-P10-ibm10v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P10-ibm10v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P10-ibm10v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P10-ibm10v02'(suite) -> [];
'ibm-valid-P10-ibm10v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P10-ibm10v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P10-ibm10v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P10-ibm10v01'(suite) -> [];
'ibm-valid-P10-ibm10v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P10-ibm10v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P10-ibm10v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P09-ibm09v05'(suite) -> [];
'ibm-valid-P09-ibm09v05'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P09-ibm09v05.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P09-ibm09v05.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P09-ibm09v04'(suite) -> [];
'ibm-valid-P09-ibm09v04'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P09-ibm09v04.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P09-ibm09v04.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P09-ibm09v03'(suite) -> [];
'ibm-valid-P09-ibm09v03'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P09-ibm09v03.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P09-ibm09v03.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P09-ibm09v02'(suite) -> [];
'ibm-valid-P09-ibm09v02'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P09-ibm09v02.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P09-ibm09v02.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P09-ibm09v01'(suite) -> [];
'ibm-valid-P09-ibm09v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P09-ibm09v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P09-ibm09v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P03-ibm03v01'(suite) -> [];
'ibm-valid-P03-ibm03v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P03-ibm03v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P03-ibm03v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P02-ibm02v01'(suite) -> [];
'ibm-valid-P02-ibm02v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P02-ibm02v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P02-ibm02v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
-'ibm-valid-P01-ibm01v01'(suite) -> [];
'ibm-valid-P01-ibm01v01'(Config) ->
- ?line file:set_cwd(?config(data_dir,Config)),
- ?line {A,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),ibm,"ibm-valid-P01-ibm01v01.xml"]),[]),
- ?line xmerl:export([A],xmerl_test).
+ file:set_cwd(datadir(Config)),
+ {A,_} = xmerl_scan:file(datadir_join(Config,[ibm,"ibm-valid-P01-ibm01v01.xml"]),[]),
+ xmerl:export([A],xmerl_test).
@@ -11730,11 +9899,11 @@ end_per_testcase(_Func,Config) ->
%% Dir is a directory
rm_f_(Dir) ->
- ?line {ok,CWD} = file:get_cwd(),
- ?line {ok,FileList} = file:list_dir(Dir),
- ?line file:set_cwd(filename:join([CWD,Dir])),
+ {ok,CWD} = file:get_cwd(),
+ {ok,FileList} = file:list_dir(Dir),
+ file:set_cwd(filename:join([CWD,Dir])),
rm_files(FileList),
- ?line file:set_cwd(CWD),
+ file:set_cwd(CWD),
? line ok = file:del_dir(Dir).
rm_files([])->
@@ -11744,7 +9913,7 @@ rm_files([F|Fs]) ->
true ->
rm_f_(F);
_ ->
- ?line ok = file:delete(F)
+ ok = file:delete(F)
end,
rm_files(Fs).
@@ -11752,11 +9921,11 @@ rm_files([F|Fs]) ->
change_mode(Files) ->
change_mode3(Files).
change_mode2(Dir)->
- ?line {ok,CWD} = file:get_cwd(),
- ?line {ok,FileList} = file:list_dir(Dir),
- ?line file:set_cwd(filename:join([CWD,Dir])),
+ {ok,CWD} = file:get_cwd(),
+ {ok,FileList} = file:list_dir(Dir),
+ file:set_cwd(filename:join([CWD,Dir])),
change_mode3(FileList),
- ?line file:set_cwd(CWD).
+ file:set_cwd(CWD).
change_mode3([]) ->
ok;
change_mode3([F|Fs]) ->
@@ -11778,23 +9947,25 @@ chmod(F) ->
ok
end.
+privdir(Config) ->
+ proplists:get_value(priv_dir, Config).
+datadir(Config) ->
+ proplists:get_value(data_dir, Config).
-
+datadir_join(Config,Files) ->
+ filename:join([datadir(Config)|Files]).
%%add_xml_path(TestCase) ->
%testcase_dir(TestCase) ->
-% add_xml_path(lists:member(TestCase,ibm_test_cases(suite)),?ibm_dir,TestCase,
% [{fun japanese_test_cases/1,?japanese_dir},
% {fun oasis_test_cases/1,?oasis_dir},
% {fun sun_test_cases/1,?sun_dir},
% {fun xmltest_test_cases/1,?xmltest_dir}]).
%add_xml_path(true,Dir,_,_) ->
% io:format("directory in path:~p~n",[Dir]),
-%% ?line code:add_patha(Dir);
+%% code:add_patha(Dir);
% Dir;
%add_xml_path(_,_,TestCase,[{NextTCs,NextDir}|Rest]) ->
-% add_xml_path(lists:member(TestCase,NextTCs(suite)),NextDir,TestCase,Rest);
%add_xml_path(false,_,TC,[]) ->
% exit({error,{xmltests,uncovered_test_case,TC}}).
-
diff --git a/lib/xmerl/test/xmerl_test_lib.erl b/lib/xmerl/test/xmerl_test_lib.erl
index e3246d19a4..58a6341587 100644
--- a/lib/xmerl/test/xmerl_test_lib.erl
+++ b/lib/xmerl/test/xmerl_test_lib.erl
@@ -88,6 +88,6 @@ keysearch_delete(Key,N,List) ->
%% the original data directory.
get_data_dir(Config) ->
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
Opts = [{return,list}],
re:replace(Data, "xmerl_sax_std_SUITE", "xmerl_std_SUITE", Opts).
diff --git a/lib/xmerl/test/xmerl_xsd_MS2002-01-16_SUITE.erl b/lib/xmerl/test/xmerl_xsd_MS2002-01-16_SUITE.erl
index 84b388330f..32ec380597 100644
--- a/lib/xmerl/test/xmerl_xsd_MS2002-01-16_SUITE.erl
+++ b/lib/xmerl/test/xmerl_xsd_MS2002-01-16_SUITE.erl
@@ -39,1782 +39,1770 @@ all() ->
particlesKOSRTQUVW, stABCDE, stFGH, stIJK, stZ,
wildABCDEF, wildGHI, wildJKLMNQOP, wildZ].
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
+suite() ->
+ [{timetrap,{minutes,3}}].
%% initialization before the test suite
init_per_suite(Config) ->
- Dog=test_server:timetrap({minutes,10}),
- xmerl_xsd_lib:unpack(Config,msx),
- {ok,LogFile} = xmerl_xsd_lib:create_error_log_file(Config,msx),
- test_server:timetrap_cancel(Dog),
- [{suite,msx},{xmerl_error_log,LogFile}|Config].
+ ct:timetrap({minutes,10}),
+ xmerl_xsd_lib:unpack(Config,msx),
+ {ok,LogFile} = xmerl_xsd_lib:create_error_log_file(Config,msx),
+ [{suite,msx},{xmerl_error_log,LogFile}|Config].
end_per_suite(Config) ->
- xmerl_xsd_lib:rmdir(Config,msx),
- xmerl_xsd_lib:close_error_log_file(Config),
- ok.
+ xmerl_xsd_lib:rmdir(Config,msx),
+ xmerl_xsd_lib:close_error_log_file(Config),
+ ok.
%% initialization before each testcase
init_per_testcase(TestCase,Config) ->
- Dog=test_server:timetrap({minutes,3}),
- [{testcase,TestCase},{watchdog, Dog}|Config].
+ [{testcase,TestCase}|Config].
%% clean up after each testcase
-end_per_testcase(_Func,Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
+end_per_testcase(_Func,_Config) ->
+ ok.
%% Syntax Checking for Attribute Declaration
att(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA001.xsd','./msxsdtest/attribute',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA001.xsd','./msxsdtest/attribute',invalid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA002.xsd','./msxsdtest/attribute',invalid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA002.xsd','./msxsdtest/attribute',invalid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA003.xsd','./msxsdtest/attribute',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA003.xsd','./msxsdtest/attribute',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA004.xsd','./msxsdtest/attribute',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA004.xsd','./msxsdtest/attribute',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA005.xsd','./msxsdtest/attribute',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA005.xsd','./msxsdtest/attribute',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA006.xsd','./msxsdtest/attribute',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA006.xsd','./msxsdtest/attribute',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA007.xsd','./msxsdtest/attribute',valid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA007.xsd','./msxsdtest/attribute',valid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA008.xsd','./msxsdtest/attribute',valid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attA008.xsd','./msxsdtest/attribute',valid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB001.xsd','./msxsdtest/attribute',valid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB001.xsd','./msxsdtest/attribute',valid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB002.xsd','./msxsdtest/attribute',valid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB002.xsd','./msxsdtest/attribute',valid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB003.xsd','./msxsdtest/attribute',valid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB003.xsd','./msxsdtest/attribute',valid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB004.xsd','./msxsdtest/attribute',valid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB004.xsd','./msxsdtest/attribute',valid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB005.xsd','./msxsdtest/attribute',invalid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB005.xsd','./msxsdtest/attribute',invalid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB006.xsd','./msxsdtest/attribute',invalid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attB006.xsd','./msxsdtest/attribute',invalid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC001.xsd','./msxsdtest/attribute',valid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC001.xsd','./msxsdtest/attribute',valid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC003.xsd','./msxsdtest/attribute',valid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC003.xsd','./msxsdtest/attribute',valid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC004.xsd','./msxsdtest/attribute',invalid),
+ {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC004.xsd','./msxsdtest/attribute',invalid),
STResList17 = [STRes16|STResList16],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC005.xsd','./msxsdtest/attribute',invalid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC005.xsd','./msxsdtest/attribute',invalid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC006.xsd','./msxsdtest/attribute',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC006.xsd','./msxsdtest/attribute',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC007.xsd','./msxsdtest/attribute',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC007.xsd','./msxsdtest/attribute',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC008.xsd','./msxsdtest/attribute',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC008.xsd','./msxsdtest/attribute',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC009.xsd','./msxsdtest/attribute',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC009.xsd','./msxsdtest/attribute',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC010.xsd','./msxsdtest/attribute',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attC010.xsd','./msxsdtest/attribute',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD001.xsd','./msxsdtest/attribute',valid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD001.xsd','./msxsdtest/attribute',valid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD002.xsd','./msxsdtest/attribute',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD002.xsd','./msxsdtest/attribute',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD003.xsd','./msxsdtest/attribute',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD003.xsd','./msxsdtest/attribute',valid),
STResList26 = [STRes25|STResList25],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attD003.xml','./msxsdtest/attribute',valid,S25),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attD003.xml','./msxsdtest/attribute',valid,S25),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD004.xsd','./msxsdtest/attribute',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD004.xsd','./msxsdtest/attribute',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attD004.xml','./msxsdtest/attribute',valid,S26),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attD004.xml','./msxsdtest/attribute',valid,S26),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD005.xsd','./msxsdtest/attribute',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD005.xsd','./msxsdtest/attribute',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD006.xsd','./msxsdtest/attribute',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD006.xsd','./msxsdtest/attribute',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD007.xsd','./msxsdtest/attribute',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attD007.xsd','./msxsdtest/attribute',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attD007.xml','./msxsdtest/attribute',valid,S29),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attD007.xml','./msxsdtest/attribute',valid,S29),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE001.xsd','./msxsdtest/attribute',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE001.xsd','./msxsdtest/attribute',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attE001.xml','./msxsdtest/attribute',valid,S30),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attE001.xml','./msxsdtest/attribute',valid,S30),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE002.xsd','./msxsdtest/attribute',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE002.xsd','./msxsdtest/attribute',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE003.xsd','./msxsdtest/attribute',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE003.xsd','./msxsdtest/attribute',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE004.xsd','./msxsdtest/attribute',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE004.xsd','./msxsdtest/attribute',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE005.xsd','./msxsdtest/attribute',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE005.xsd','./msxsdtest/attribute',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE006.xsd','./msxsdtest/attribute',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE006.xsd','./msxsdtest/attribute',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE007.xsd','./msxsdtest/attribute',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE007.xsd','./msxsdtest/attribute',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE008.xsd','./msxsdtest/attribute',valid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attE008.xsd','./msxsdtest/attribute',valid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF001.xsd','./msxsdtest/attribute',valid),
+ {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF001.xsd','./msxsdtest/attribute',valid),
STResList39 = [STRes38|STResList38],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attF001.xml','./msxsdtest/attribute',invalid,S38),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attF001.xml','./msxsdtest/attribute',invalid,S38),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF002.xsd','./msxsdtest/attribute',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF002.xsd','./msxsdtest/attribute',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attF002.xml','./msxsdtest/attribute',valid,S39),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attF002.xml','./msxsdtest/attribute',valid,S39),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF003.xsd','./msxsdtest/attribute',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF003.xsd','./msxsdtest/attribute',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attF003.xml','./msxsdtest/attribute',valid,S40),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attF003.xml','./msxsdtest/attribute',valid,S40),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF004.xsd','./msxsdtest/attribute',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF004.xsd','./msxsdtest/attribute',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF005.xsd','./msxsdtest/attribute',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF005.xsd','./msxsdtest/attribute',invalid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF006.xsd','./msxsdtest/attribute',invalid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF006.xsd','./msxsdtest/attribute',invalid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF007.xsd','./msxsdtest/attribute',invalid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF007.xsd','./msxsdtest/attribute',invalid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF008.xsd','./msxsdtest/attribute',invalid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF008.xsd','./msxsdtest/attribute',invalid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF009.xsd','./msxsdtest/attribute',invalid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF009.xsd','./msxsdtest/attribute',invalid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF010.xsd','./msxsdtest/attribute',invalid),
+ {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF010.xsd','./msxsdtest/attribute',invalid),
STResList48 = [STRes47|STResList47],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF011.xsd','./msxsdtest/attribute',invalid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attF011.xsd','./msxsdtest/attribute',invalid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attG001.xsd','./msxsdtest/attribute',valid),
+ {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attG001.xsd','./msxsdtest/attribute',valid),
STResList50 = [STRes49|STResList49],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attG002.xsd','./msxsdtest/attribute',valid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attG002.xsd','./msxsdtest/attribute',valid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attG003.xsd','./msxsdtest/attribute',valid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attG003.xsd','./msxsdtest/attribute',valid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attH001.xsd','./msxsdtest/attribute',invalid),
+ {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attH001.xsd','./msxsdtest/attribute',invalid),
STResList53 = [STRes52|STResList52],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI001.xsd','./msxsdtest/attribute',valid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI001.xsd','./msxsdtest/attribute',valid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI002.xsd','./msxsdtest/attribute',valid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI002.xsd','./msxsdtest/attribute',valid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI003.xsd','./msxsdtest/attribute',valid),
+ {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI003.xsd','./msxsdtest/attribute',valid),
STResList56 = [STRes55|STResList55],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attI003.xml','./msxsdtest/attribute',valid,S55),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attI003.xml','./msxsdtest/attribute',valid,S55),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI004.xsd','./msxsdtest/attribute',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI004.xsd','./msxsdtest/attribute',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI005.xsd','./msxsdtest/attribute',invalid),
+ {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI005.xsd','./msxsdtest/attribute',invalid),
STResList58 = [STRes57|STResList57],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI006.xsd','./msxsdtest/attribute',invalid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attI006.xsd','./msxsdtest/attribute',invalid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ001.xsd','./msxsdtest/attribute',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ001.xsd','./msxsdtest/attribute',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ001.xml','./msxsdtest/attribute',valid,S59),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ001.xml','./msxsdtest/attribute',valid,S59),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ002.xsd','./msxsdtest/attribute',valid),
+ {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ002.xsd','./msxsdtest/attribute',valid),
STResList61 = [STRes60|STResList60],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ002.xml','./msxsdtest/attribute',invalid,S60),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ002.xml','./msxsdtest/attribute',invalid,S60),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ003.xsd','./msxsdtest/attribute',valid),
+ {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ003.xsd','./msxsdtest/attribute',valid),
STResList62 = [STRes61|STResList61],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ003.xml','./msxsdtest/attribute',invalid,S61),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ003.xml','./msxsdtest/attribute',invalid,S61),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ004.xsd','./msxsdtest/attribute',valid),
+ {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ004.xsd','./msxsdtest/attribute',valid),
STResList63 = [STRes62|STResList62],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ004.xml','./msxsdtest/attribute',valid,S62),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ004.xml','./msxsdtest/attribute',valid,S62),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ005.xsd','./msxsdtest/attribute',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ005.xsd','./msxsdtest/attribute',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ005.xml','./msxsdtest/attribute',valid,S63),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ005.xml','./msxsdtest/attribute',valid,S63),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ006.xsd','./msxsdtest/attribute',valid),
+ {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ006.xsd','./msxsdtest/attribute',valid),
STResList65 = [STRes64|STResList64],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ006.xml','./msxsdtest/attribute',valid,S64),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ006.xml','./msxsdtest/attribute',valid,S64),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ007.xsd','./msxsdtest/attribute',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ007.xsd','./msxsdtest/attribute',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ007.xml','./msxsdtest/attribute',valid,S65),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ007.xml','./msxsdtest/attribute',valid,S65),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ008.xsd','./msxsdtest/attribute',valid),
+ {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ008.xsd','./msxsdtest/attribute',valid),
STResList67 = [STRes66|STResList66],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ008.xml','./msxsdtest/attribute',invalid,S66),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ008.xml','./msxsdtest/attribute',invalid,S66),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ009.xsd','./msxsdtest/attribute',valid),
+ {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ009.xsd','./msxsdtest/attribute',valid),
STResList68 = [STRes67|STResList67],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ009.xml','./msxsdtest/attribute',invalid,S67),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ009.xml','./msxsdtest/attribute',invalid,S67),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ010.xsd','./msxsdtest/attribute',valid),
+ {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ010.xsd','./msxsdtest/attribute',valid),
STResList69 = [STRes68|STResList68],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ010.xml','./msxsdtest/attribute',invalid,S68),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ010.xml','./msxsdtest/attribute',invalid,S68),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ011.xsd','./msxsdtest/attribute',invalid),
+ {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ011.xsd','./msxsdtest/attribute',invalid),
STResList70 = [STRes69|STResList69],
- ?line {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ012.xsd','./msxsdtest/attribute',invalid),
+ {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ012.xsd','./msxsdtest/attribute',invalid),
STResList71 = [STRes70|STResList70],
- ?line {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ013.xsd','./msxsdtest/attribute',invalid),
+ {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ013.xsd','./msxsdtest/attribute',invalid),
STResList72 = [STRes71|STResList71],
- ?line {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ014.xsd','./msxsdtest/attribute',invalid),
+ {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ014.xsd','./msxsdtest/attribute',invalid),
STResList73 = [STRes72|STResList72],
- ?line {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ015.xsd','./msxsdtest/attribute',invalid),
+ {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ015.xsd','./msxsdtest/attribute',invalid),
STResList74 = [STRes73|STResList73],
- ?line {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ016.xsd','./msxsdtest/attribute',invalid),
+ {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ016.xsd','./msxsdtest/attribute',invalid),
STResList75 = [STRes74|STResList74],
- ?line {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ017.xsd','./msxsdtest/attribute',invalid),
+ {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ017.xsd','./msxsdtest/attribute',invalid),
STResList76 = [STRes75|STResList75],
- ?line {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ018.xsd','./msxsdtest/attribute',valid),
+ {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attJ018.xsd','./msxsdtest/attribute',valid),
STResList77 = [STRes76|STResList76],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ018.xml','./msxsdtest/attribute',valid,S76),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attJ018.xml','./msxsdtest/attribute',valid,S76),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa001.xsd','./msxsdtest/attribute',invalid),
+ {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa001.xsd','./msxsdtest/attribute',invalid),
STResList78 = [STRes77|STResList77],
- ?line {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa002.xsd','./msxsdtest/attribute',valid),
+ {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa002.xsd','./msxsdtest/attribute',valid),
STResList79 = [STRes78|STResList78],
- ?line {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa003.xsd','./msxsdtest/attribute',invalid),
+ {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa003.xsd','./msxsdtest/attribute',invalid),
STResList80 = [STRes79|STResList79],
- ?line {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa004.xsd','./msxsdtest/attribute',invalid),
+ {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa004.xsd','./msxsdtest/attribute',invalid),
STResList81 = [STRes80|STResList80],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa005.xsd','./msxsdtest/attribute',invalid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa005.xsd','./msxsdtest/attribute',invalid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa006.xsd','./msxsdtest/attribute',valid),
+ {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa006.xsd','./msxsdtest/attribute',valid),
STResList83 = [STRes82|STResList82],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa007.xsd','./msxsdtest/attribute',invalid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa007.xsd','./msxsdtest/attribute',invalid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa008.xsd','./msxsdtest/attribute',invalid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa008.xsd','./msxsdtest/attribute',invalid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa009.xsd','./msxsdtest/attribute',invalid),
+ {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa009.xsd','./msxsdtest/attribute',invalid),
STResList86 = [STRes85|STResList85],
- ?line {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa010.xsd','./msxsdtest/attribute',invalid),
+ {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa010.xsd','./msxsdtest/attribute',invalid),
STResList87 = [STRes86|STResList86],
- ?line {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa011.xsd','./msxsdtest/attribute',invalid),
+ {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa011.xsd','./msxsdtest/attribute',invalid),
STResList88 = [STRes87|STResList87],
- ?line {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa012.xsd','./msxsdtest/attribute',invalid),
+ {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa012.xsd','./msxsdtest/attribute',invalid),
STResList89 = [STRes88|STResList88],
- ?line {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa013.xsd','./msxsdtest/attribute',invalid),
+ {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa013.xsd','./msxsdtest/attribute',invalid),
STResList90 = [STRes89|STResList89],
- ?line {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa014.xsd','./msxsdtest/attribute',invalid),
+ {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa014.xsd','./msxsdtest/attribute',invalid),
STResList91 = [STRes90|STResList90],
- ?line {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa015.xsd','./msxsdtest/attribute',invalid),
+ {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKa015.xsd','./msxsdtest/attribute',invalid),
STResList92 = [STRes91|STResList91],
- ?line {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb001.xsd','./msxsdtest/attribute',invalid),
+ {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb001.xsd','./msxsdtest/attribute',invalid),
STResList93 = [STRes92|STResList92],
- ?line {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb002.xsd','./msxsdtest/attribute',valid),
+ {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb002.xsd','./msxsdtest/attribute',valid),
STResList94 = [STRes93|STResList93],
- ?line {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb003.xsd','./msxsdtest/attribute',valid),
+ {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb003.xsd','./msxsdtest/attribute',valid),
STResList95 = [STRes94|STResList94],
- ?line {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb004.xsd','./msxsdtest/attribute',invalid),
+ {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb004.xsd','./msxsdtest/attribute',invalid),
STResList96 = [STRes95|STResList95],
- ?line {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb005.xsd','./msxsdtest/attribute',invalid),
+ {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb005.xsd','./msxsdtest/attribute',invalid),
STResList97 = [STRes96|STResList96],
- ?line {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb006.xsd','./msxsdtest/attribute',valid),
+ {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb006.xsd','./msxsdtest/attribute',valid),
STResList98 = [STRes97|STResList97],
- ?line {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb007.xsd','./msxsdtest/attribute',valid),
+ {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb007.xsd','./msxsdtest/attribute',valid),
STResList99 = [STRes98|STResList98],
- ?line {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb008.xsd','./msxsdtest/attribute',valid),
+ {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb008.xsd','./msxsdtest/attribute',valid),
STResList100 = [STRes99|STResList99],
- ?line {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb009.xsd','./msxsdtest/attribute',valid),
+ {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb009.xsd','./msxsdtest/attribute',valid),
STResList101 = [STRes100|STResList100],
- ?line {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb010.xsd','./msxsdtest/attribute',invalid),
+ {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb010.xsd','./msxsdtest/attribute',invalid),
STResList102 = [STRes101|STResList101],
- ?line {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb011.xsd','./msxsdtest/attribute',invalid),
+ {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb011.xsd','./msxsdtest/attribute',invalid),
STResList103 = [STRes102|STResList102],
- ?line {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb012.xsd','./msxsdtest/attribute',invalid),
+ {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb012.xsd','./msxsdtest/attribute',invalid),
STResList104 = [STRes103|STResList103],
- ?line {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb013.xsd','./msxsdtest/attribute',invalid),
+ {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb013.xsd','./msxsdtest/attribute',invalid),
STResList105 = [STRes104|STResList104],
- ?line {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb014.xsd','./msxsdtest/attribute',invalid),
+ {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb014.xsd','./msxsdtest/attribute',invalid),
STResList106 = [STRes105|STResList105],
- ?line {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb015.xsd','./msxsdtest/attribute',invalid),
+ {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb015.xsd','./msxsdtest/attribute',invalid),
STResList107 = [STRes106|STResList106],
- ?line {STRes107,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb016.xsd','./msxsdtest/attribute',invalid),
+ {STRes107,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb016.xsd','./msxsdtest/attribute',invalid),
STResList108 = [STRes107|STResList107],
- ?line {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb017.xsd','./msxsdtest/attribute',invalid),
+ {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb017.xsd','./msxsdtest/attribute',invalid),
STResList109 = [STRes108|STResList108],
- ?line {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb018.xsd','./msxsdtest/attribute',invalid),
+ {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKb018.xsd','./msxsdtest/attribute',invalid),
STResList110 = [STRes109|STResList109],
- ?line {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc001.xsd','./msxsdtest/attribute',invalid),
+ {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc001.xsd','./msxsdtest/attribute',invalid),
STResList111 = [STRes110|STResList110],
- ?line {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc002.xsd','./msxsdtest/attribute',valid),
+ {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc002.xsd','./msxsdtest/attribute',valid),
STResList112 = [STRes111|STResList111],
- ?line {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc003.xsd','./msxsdtest/attribute',valid),
+ {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc003.xsd','./msxsdtest/attribute',valid),
STResList113 = [STRes112|STResList112],
- ?line {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc004.xsd','./msxsdtest/attribute',invalid),
+ {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc004.xsd','./msxsdtest/attribute',invalid),
STResList114 = [STRes113|STResList113],
- ?line {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc005.xsd','./msxsdtest/attribute',invalid),
+ {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc005.xsd','./msxsdtest/attribute',invalid),
STResList115 = [STRes114|STResList114],
- ?line {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc006.xsd','./msxsdtest/attribute',valid),
+ {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc006.xsd','./msxsdtest/attribute',valid),
STResList116 = [STRes115|STResList115],
- ?line {STRes116,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc007.xsd','./msxsdtest/attribute',valid),
+ {STRes116,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc007.xsd','./msxsdtest/attribute',valid),
STResList117 = [STRes116|STResList116],
- ?line {STRes117,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc008.xsd','./msxsdtest/attribute',valid),
+ {STRes117,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc008.xsd','./msxsdtest/attribute',valid),
STResList118 = [STRes117|STResList117],
- ?line {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc009.xsd','./msxsdtest/attribute',valid),
+ {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc009.xsd','./msxsdtest/attribute',valid),
STResList119 = [STRes118|STResList118],
- ?line {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc010.xsd','./msxsdtest/attribute',invalid),
+ {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc010.xsd','./msxsdtest/attribute',invalid),
STResList120 = [STRes119|STResList119],
- ?line {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc011.xsd','./msxsdtest/attribute',invalid),
+ {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc011.xsd','./msxsdtest/attribute',invalid),
STResList121 = [STRes120|STResList120],
- ?line {STRes121,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc012.xsd','./msxsdtest/attribute',invalid),
+ {STRes121,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc012.xsd','./msxsdtest/attribute',invalid),
STResList122 = [STRes121|STResList121],
- ?line {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc013.xsd','./msxsdtest/attribute',invalid),
+ {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc013.xsd','./msxsdtest/attribute',invalid),
STResList123 = [STRes122|STResList122],
- ?line {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc014.xsd','./msxsdtest/attribute',invalid),
+ {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc014.xsd','./msxsdtest/attribute',invalid),
STResList124 = [STRes123|STResList123],
- ?line {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc015.xsd','./msxsdtest/attribute',invalid),
+ {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc015.xsd','./msxsdtest/attribute',invalid),
STResList125 = [STRes124|STResList124],
- ?line {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc016.xsd','./msxsdtest/attribute',invalid),
+ {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc016.xsd','./msxsdtest/attribute',invalid),
STResList126 = [STRes125|STResList125],
- ?line {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc017.xsd','./msxsdtest/attribute',invalid),
+ {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc017.xsd','./msxsdtest/attribute',invalid),
STResList127 = [STRes126|STResList126],
- ?line {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc018.xsd','./msxsdtest/attribute',invalid),
+ {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attKc018.xsd','./msxsdtest/attribute',invalid),
STResList128 = [STRes127|STResList127],
- ?line {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa001.xsd','./msxsdtest/attribute',valid),
+ {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa001.xsd','./msxsdtest/attribute',valid),
STResList129 = [STRes128|STResList128],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa001.xml','./msxsdtest/attribute',valid,S128),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa001.xml','./msxsdtest/attribute',valid,S128),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa002.xsd','./msxsdtest/attribute',valid),
+ {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa002.xsd','./msxsdtest/attribute',valid),
STResList130 = [STRes129|STResList129],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa002.xml','./msxsdtest/attribute',valid,S129),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa002.xml','./msxsdtest/attribute',valid,S129),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa003.xsd','./msxsdtest/attribute',valid),
+ {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa003.xsd','./msxsdtest/attribute',valid),
STResList131 = [STRes130|STResList130],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa003.xml','./msxsdtest/attribute',valid,S130),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa003.xml','./msxsdtest/attribute',valid,S130),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa004.xsd','./msxsdtest/attribute',valid),
+ {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa004.xsd','./msxsdtest/attribute',valid),
STResList132 = [STRes131|STResList131],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa004.xml','./msxsdtest/attribute',valid,S131),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa004.xml','./msxsdtest/attribute',valid,S131),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes132,S132} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa005.xsd','./msxsdtest/attribute',valid),
+ {STRes132,S132} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa005.xsd','./msxsdtest/attribute',valid),
STResList133 = [STRes132|STResList132],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa005.xml','./msxsdtest/attribute',invalid,S132),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa005.xml','./msxsdtest/attribute',invalid,S132),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes133,S133} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa006.xsd','./msxsdtest/attribute',valid),
+ {STRes133,S133} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLa006.xsd','./msxsdtest/attribute',valid),
STResList134 = [STRes133|STResList133],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa006.xml','./msxsdtest/attribute',valid,S133),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLa006.xml','./msxsdtest/attribute',valid,S133),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes134,S134} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb001.xsd','./msxsdtest/attribute',valid),
+ {STRes134,S134} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb001.xsd','./msxsdtest/attribute',valid),
STResList135 = [STRes134|STResList134],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb001.xml','./msxsdtest/attribute',valid,S134),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb001.xml','./msxsdtest/attribute',valid,S134),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb002.xsd','./msxsdtest/attribute',valid),
+ {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb002.xsd','./msxsdtest/attribute',valid),
STResList136 = [STRes135|STResList135],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb002.xml','./msxsdtest/attribute',valid,S135),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb002.xml','./msxsdtest/attribute',valid,S135),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes136,S136} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb003.xsd','./msxsdtest/attribute',valid),
+ {STRes136,S136} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb003.xsd','./msxsdtest/attribute',valid),
STResList137 = [STRes136|STResList136],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb003.xml','./msxsdtest/attribute',valid,S136),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb003.xml','./msxsdtest/attribute',valid,S136),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb004.xsd','./msxsdtest/attribute',valid),
+ {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb004.xsd','./msxsdtest/attribute',valid),
STResList138 = [STRes137|STResList137],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb004.xml','./msxsdtest/attribute',valid,S137),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb004.xml','./msxsdtest/attribute',valid,S137),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb005.xsd','./msxsdtest/attribute',valid),
+ {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb005.xsd','./msxsdtest/attribute',valid),
STResList139 = [STRes138|STResList138],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb005.xml','./msxsdtest/attribute',invalid,S138),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb005.xml','./msxsdtest/attribute',invalid,S138),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb006.xsd','./msxsdtest/attribute',valid),
+ {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLb006.xsd','./msxsdtest/attribute',valid),
STResList140 = [STRes139|STResList139],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb006.xml','./msxsdtest/attribute',valid,S139),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLb006.xml','./msxsdtest/attribute',valid,S139),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc001.xsd','./msxsdtest/attribute',valid),
+ {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc001.xsd','./msxsdtest/attribute',valid),
STResList141 = [STRes140|STResList140],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc001.xml','./msxsdtest/attribute',valid,S140),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc001.xml','./msxsdtest/attribute',valid,S140),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc002.xsd','./msxsdtest/attribute',valid),
+ {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc002.xsd','./msxsdtest/attribute',valid),
STResList142 = [STRes141|STResList141],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc002.xml','./msxsdtest/attribute',valid,S141),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc002.xml','./msxsdtest/attribute',valid,S141),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc003.xsd','./msxsdtest/attribute',valid),
+ {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc003.xsd','./msxsdtest/attribute',valid),
STResList143 = [STRes142|STResList142],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc003.xml','./msxsdtest/attribute',valid,S142),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc003.xml','./msxsdtest/attribute',valid,S142),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc004.xsd','./msxsdtest/attribute',valid),
+ {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc004.xsd','./msxsdtest/attribute',valid),
STResList144 = [STRes143|STResList143],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc004.xml','./msxsdtest/attribute',valid,S143),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc004.xml','./msxsdtest/attribute',valid,S143),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc005.xsd','./msxsdtest/attribute',valid),
+ {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc005.xsd','./msxsdtest/attribute',valid),
STResList145 = [STRes144|STResList144],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc005.xml','./msxsdtest/attribute',invalid,S144),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc005.xml','./msxsdtest/attribute',invalid,S144),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc006.xsd','./msxsdtest/attribute',valid),
+ {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attLc006.xsd','./msxsdtest/attribute',valid),
STResList146 = [STRes145|STResList145],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc006.xml','./msxsdtest/attribute',valid,S145),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attLc006.xml','./msxsdtest/attribute',valid,S145),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMa001.xsd','./msxsdtest/attribute',valid),
+ {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMa001.xsd','./msxsdtest/attribute',valid),
STResList147 = [STRes146|STResList146],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMa001.xml','./msxsdtest/attribute',invalid,S146),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMa001.xml','./msxsdtest/attribute',invalid,S146),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMa002.xsd','./msxsdtest/attribute',valid),
+ {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMa002.xsd','./msxsdtest/attribute',valid),
STResList148 = [STRes147|STResList147],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMa002.xml','./msxsdtest/attribute',invalid,S147),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMa002.xml','./msxsdtest/attribute',invalid,S147),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMa003.xsd','./msxsdtest/attribute',valid),
+ {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMa003.xsd','./msxsdtest/attribute',valid),
STResList149 = [STRes148|STResList148],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMa003.xml','./msxsdtest/attribute',valid,S148),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMa003.xml','./msxsdtest/attribute',valid,S148),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMa004.xsd','./msxsdtest/attribute',valid),
+ {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMa004.xsd','./msxsdtest/attribute',valid),
STResList150 = [STRes149|STResList149],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMa004.xml','./msxsdtest/attribute',valid,S149),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMa004.xml','./msxsdtest/attribute',valid,S149),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb001.xsd','./msxsdtest/attribute',valid),
+ {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb001.xsd','./msxsdtest/attribute',valid),
STResList151 = [STRes150|STResList150],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb001.xml','./msxsdtest/attribute',invalid,S150),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb001.xml','./msxsdtest/attribute',invalid,S150),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes151,S151} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb002.xsd','./msxsdtest/attribute',valid),
+ {STRes151,S151} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb002.xsd','./msxsdtest/attribute',valid),
STResList152 = [STRes151|STResList151],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb002.xml','./msxsdtest/attribute',invalid,S151),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb002.xml','./msxsdtest/attribute',invalid,S151),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb003.xsd','./msxsdtest/attribute',valid),
+ {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb003.xsd','./msxsdtest/attribute',valid),
STResList153 = [STRes152|STResList152],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb003.xml','./msxsdtest/attribute',invalid,S152),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb003.xml','./msxsdtest/attribute',invalid,S152),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb004.xsd','./msxsdtest/attribute',valid),
+ {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb004.xsd','./msxsdtest/attribute',valid),
STResList154 = [STRes153|STResList153],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb004.xml','./msxsdtest/attribute',valid,S153),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb004.xml','./msxsdtest/attribute',valid,S153),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes154,S154} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb005.xsd','./msxsdtest/attribute',valid),
+ {STRes154,S154} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb005.xsd','./msxsdtest/attribute',valid),
STResList155 = [STRes154|STResList154],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb005.xml','./msxsdtest/attribute',valid,S154),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb005.xml','./msxsdtest/attribute',valid,S154),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb006.xsd','./msxsdtest/attribute',valid),
+ {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb006.xsd','./msxsdtest/attribute',valid),
STResList156 = [STRes155|STResList155],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb006.xml','./msxsdtest/attribute',valid,S155),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb006.xml','./msxsdtest/attribute',valid,S155),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb007.xsd','./msxsdtest/attribute',valid),
+ {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb007.xsd','./msxsdtest/attribute',valid),
STResList157 = [STRes156|STResList156],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb007.xml','./msxsdtest/attribute',valid,S156),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb007.xml','./msxsdtest/attribute',valid,S156),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb008.xsd','./msxsdtest/attribute',valid),
+ {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb008.xsd','./msxsdtest/attribute',valid),
STResList158 = [STRes157|STResList157],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb008.xml','./msxsdtest/attribute',valid,S157),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb008.xml','./msxsdtest/attribute',valid,S157),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb009.xsd','./msxsdtest/attribute',valid),
+ {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb009.xsd','./msxsdtest/attribute',valid),
STResList159 = [STRes158|STResList158],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb009.xml','./msxsdtest/attribute',valid,S158),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb009.xml','./msxsdtest/attribute',valid,S158),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes159,S159} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb010.xsd','./msxsdtest/attribute',valid),
+ {STRes159,S159} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb010.xsd','./msxsdtest/attribute',valid),
STResList160 = [STRes159|STResList159],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb010.xml','./msxsdtest/attribute',invalid,S159),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb010.xml','./msxsdtest/attribute',invalid,S159),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes160,S160} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb011.xsd','./msxsdtest/attribute',valid),
+ {STRes160,S160} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb011.xsd','./msxsdtest/attribute',valid),
STResList161 = [STRes160|STResList160],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb011.xml','./msxsdtest/attribute',invalid,S160),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb011.xml','./msxsdtest/attribute',invalid,S160),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes161,S161} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb012.xsd','./msxsdtest/attribute',valid),
+ {STRes161,S161} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMb012.xsd','./msxsdtest/attribute',valid),
STResList162 = [STRes161|STResList161],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb012.xml','./msxsdtest/attribute',invalid,S161),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMb012.xml','./msxsdtest/attribute',invalid,S161),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes162,S162} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc001.xsd','./msxsdtest/attribute',valid),
+ {STRes162,S162} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc001.xsd','./msxsdtest/attribute',valid),
STResList163 = [STRes162|STResList162],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc001.xml','./msxsdtest/attribute',invalid,S162),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc001.xml','./msxsdtest/attribute',invalid,S162),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes163,S163} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc002.xsd','./msxsdtest/attribute',valid),
+ {STRes163,S163} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc002.xsd','./msxsdtest/attribute',valid),
STResList164 = [STRes163|STResList163],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc002.xml','./msxsdtest/attribute',invalid,S163),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc002.xml','./msxsdtest/attribute',invalid,S163),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes164,S164} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc003.xsd','./msxsdtest/attribute',valid),
+ {STRes164,S164} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc003.xsd','./msxsdtest/attribute',valid),
STResList165 = [STRes164|STResList164],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc003.xml','./msxsdtest/attribute',invalid,S164),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc003.xml','./msxsdtest/attribute',invalid,S164),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes165,S165} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc004.xsd','./msxsdtest/attribute',valid),
+ {STRes165,S165} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc004.xsd','./msxsdtest/attribute',valid),
STResList166 = [STRes165|STResList165],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc004.xml','./msxsdtest/attribute',valid,S165),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc004.xml','./msxsdtest/attribute',valid,S165),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes166,S166} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc005.xsd','./msxsdtest/attribute',valid),
+ {STRes166,S166} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc005.xsd','./msxsdtest/attribute',valid),
STResList167 = [STRes166|STResList166],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc005.xml','./msxsdtest/attribute',valid,S166),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc005.xml','./msxsdtest/attribute',valid,S166),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc006.xsd','./msxsdtest/attribute',valid),
+ {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc006.xsd','./msxsdtest/attribute',valid),
STResList168 = [STRes167|STResList167],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc006.xml','./msxsdtest/attribute',valid,S167),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc006.xml','./msxsdtest/attribute',valid,S167),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc007.xsd','./msxsdtest/attribute',valid),
+ {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc007.xsd','./msxsdtest/attribute',valid),
STResList169 = [STRes168|STResList168],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc007.xml','./msxsdtest/attribute',valid,S168),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc007.xml','./msxsdtest/attribute',valid,S168),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc008.xsd','./msxsdtest/attribute',valid),
+ {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc008.xsd','./msxsdtest/attribute',valid),
STResList170 = [STRes169|STResList169],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc008.xml','./msxsdtest/attribute',valid,S169),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc008.xml','./msxsdtest/attribute',valid,S169),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc009.xsd','./msxsdtest/attribute',valid),
+ {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc009.xsd','./msxsdtest/attribute',valid),
STResList171 = [STRes170|STResList170],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc009.xml','./msxsdtest/attribute',valid,S170),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc009.xml','./msxsdtest/attribute',valid,S170),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc010.xsd','./msxsdtest/attribute',valid),
+ {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc010.xsd','./msxsdtest/attribute',valid),
STResList172 = [STRes171|STResList171],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc010.xml','./msxsdtest/attribute',invalid,S171),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc010.xml','./msxsdtest/attribute',invalid,S171),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc011.xsd','./msxsdtest/attribute',valid),
+ {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc011.xsd','./msxsdtest/attribute',valid),
STResList173 = [STRes172|STResList172],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc011.xml','./msxsdtest/attribute',invalid,S172),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc011.xml','./msxsdtest/attribute',invalid,S172),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc012.xsd','./msxsdtest/attribute',valid),
+ {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attMc012.xsd','./msxsdtest/attribute',valid),
STResList174 = [STRes173|STResList173],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc012.xml','./msxsdtest/attribute',invalid,S173),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attMc012.xml','./msxsdtest/attribute',invalid,S173),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO001.xsd','./msxsdtest/attribute',valid),
+ {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO001.xsd','./msxsdtest/attribute',valid),
STResList175 = [STRes174|STResList174],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO001.xml','./msxsdtest/attribute',invalid,S174),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO001.xml','./msxsdtest/attribute',invalid,S174),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes175,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO002.xsd','./msxsdtest/attribute',invalid),
+ {STRes175,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO002.xsd','./msxsdtest/attribute',invalid),
STResList176 = [STRes175|STResList175],
- ?line {STRes176,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO003.xsd','./msxsdtest/attribute',invalid),
+ {STRes176,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO003.xsd','./msxsdtest/attribute',invalid),
STResList177 = [STRes176|STResList176],
- ?line {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO004.xsd','./msxsdtest/attribute',valid),
+ {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO004.xsd','./msxsdtest/attribute',valid),
STResList178 = [STRes177|STResList177],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO004.xml','./msxsdtest/attribute',invalid,S177),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO004.xml','./msxsdtest/attribute',invalid,S177),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes178,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO005.xsd','./msxsdtest/attribute',invalid),
+ {STRes178,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO005.xsd','./msxsdtest/attribute',invalid),
STResList179 = [STRes178|STResList178],
- ?line {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO006.xsd','./msxsdtest/attribute',valid),
+ {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO006.xsd','./msxsdtest/attribute',valid),
STResList180 = [STRes179|STResList179],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO006.xml','./msxsdtest/attribute',valid,S179),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO006.xml','./msxsdtest/attribute',valid,S179),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO007.xsd','./msxsdtest/attribute',valid),
+ {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO007.xsd','./msxsdtest/attribute',valid),
STResList181 = [STRes180|STResList180],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO007.xml','./msxsdtest/attribute',valid,S180),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO007.xml','./msxsdtest/attribute',valid,S180),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO008.xsd','./msxsdtest/attribute',valid),
+ {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO008.xsd','./msxsdtest/attribute',valid),
STResList182 = [STRes181|STResList181],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO008.xml','./msxsdtest/attribute',invalid,S181),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO008.xml','./msxsdtest/attribute',invalid,S181),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO009.xsd','./msxsdtest/attribute',valid),
+ {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO009.xsd','./msxsdtest/attribute',valid),
STResList183 = [STRes182|STResList182],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO009.xml','./msxsdtest/attribute',valid,S182),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO009.xml','./msxsdtest/attribute',valid,S182),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO010.xsd','./msxsdtest/attribute',valid),
+ {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO010.xsd','./msxsdtest/attribute',valid),
STResList184 = [STRes183|STResList183],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO010.xml','./msxsdtest/attribute',valid,S183),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO010.xml','./msxsdtest/attribute',valid,S183),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO011.xsd','./msxsdtest/attribute',valid),
+ {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO011.xsd','./msxsdtest/attribute',valid),
STResList185 = [STRes184|STResList184],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO011.xml','./msxsdtest/attribute',valid,S184),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO011.xml','./msxsdtest/attribute',valid,S184),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO012.xsd','./msxsdtest/attribute',valid),
+ {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO012.xsd','./msxsdtest/attribute',valid),
STResList186 = [STRes185|STResList185],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO012.xml','./msxsdtest/attribute',invalid,S185),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attO012.xml','./msxsdtest/attribute',invalid,S185),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes186,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO013.xsd','./msxsdtest/attribute',invalid),
+ {STRes186,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO013.xsd','./msxsdtest/attribute',invalid),
STResList187 = [STRes186|STResList186],
- ?line {STRes187,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO014.xsd','./msxsdtest/attribute',invalid),
+ {STRes187,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO014.xsd','./msxsdtest/attribute',invalid),
STResList188 = [STRes187|STResList187],
- ?line {STRes188,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO015.xsd','./msxsdtest/attribute',invalid),
+ {STRes188,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO015.xsd','./msxsdtest/attribute',invalid),
STResList189 = [STRes188|STResList188],
- ?line {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO016.xsd','./msxsdtest/attribute',invalid),
+ {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO016.xsd','./msxsdtest/attribute',invalid),
STResList190 = [STRes189|STResList189],
- ?line {STRes190,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO017.xsd','./msxsdtest/attribute',invalid),
+ {STRes190,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO017.xsd','./msxsdtest/attribute',invalid),
STResList191 = [STRes190|STResList190],
- ?line {STRes191,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO018.xsd','./msxsdtest/attribute',valid),
+ {STRes191,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO018.xsd','./msxsdtest/attribute',valid),
STResList192 = [STRes191|STResList191],
- ?line {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO019.xsd','./msxsdtest/attribute',invalid),
+ {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO019.xsd','./msxsdtest/attribute',invalid),
STResList193 = [STRes192|STResList192],
- ?line {STRes193,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO020.xsd','./msxsdtest/attribute',invalid),
+ {STRes193,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO020.xsd','./msxsdtest/attribute',invalid),
STResList194 = [STRes193|STResList193],
- ?line {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO021.xsd','./msxsdtest/attribute',invalid),
+ {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO021.xsd','./msxsdtest/attribute',invalid),
STResList195 = [STRes194|STResList194],
- ?line {STRes195,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO022.xsd','./msxsdtest/attribute',invalid),
+ {STRes195,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO022.xsd','./msxsdtest/attribute',invalid),
STResList196 = [STRes195|STResList195],
- ?line {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO023.xsd','./msxsdtest/attribute',invalid),
+ {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO023.xsd','./msxsdtest/attribute',invalid),
STResList197 = [STRes196|STResList196],
- ?line {STRes197,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO024.xsd','./msxsdtest/attribute',invalid),
+ {STRes197,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO024.xsd','./msxsdtest/attribute',invalid),
STResList198 = [STRes197|STResList197],
- ?line {STRes198,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO025.xsd','./msxsdtest/attribute',valid),
+ {STRes198,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attO025.xsd','./msxsdtest/attribute',valid),
STResList199 = [STRes198|STResList198],
- ?line {STRes199,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP001.xsd','./msxsdtest/attribute',invalid),
+ {STRes199,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP001.xsd','./msxsdtest/attribute',invalid),
STResList200 = [STRes199|STResList199],
- ?line {STRes200,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP002.xsd','./msxsdtest/attribute',invalid),
+ {STRes200,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP002.xsd','./msxsdtest/attribute',invalid),
STResList201 = [STRes200|STResList200],
- ?line {STRes201,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP003.xsd','./msxsdtest/attribute',invalid),
+ {STRes201,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP003.xsd','./msxsdtest/attribute',invalid),
STResList202 = [STRes201|STResList201],
- ?line {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP004.xsd','./msxsdtest/attribute',valid),
+ {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP004.xsd','./msxsdtest/attribute',valid),
STResList203 = [STRes202|STResList202],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP004.xml','./msxsdtest/attribute',valid,S202),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP004.xml','./msxsdtest/attribute',valid,S202),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes203,S203} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP005.xsd','./msxsdtest/attribute',valid),
+ {STRes203,S203} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP005.xsd','./msxsdtest/attribute',valid),
STResList204 = [STRes203|STResList203],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP005.xml','./msxsdtest/attribute',invalid,S203),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP005.xml','./msxsdtest/attribute',invalid,S203),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes204,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP006.xsd','./msxsdtest/attribute',invalid),
+ {STRes204,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP006.xsd','./msxsdtest/attribute',invalid),
STResList205 = [STRes204|STResList204],
- ?line {STRes205,S205} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP007.xsd','./msxsdtest/attribute',valid),
+ {STRes205,S205} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP007.xsd','./msxsdtest/attribute',valid),
STResList206 = [STRes205|STResList205],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP007.xml','./msxsdtest/attribute',valid,S205),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP007.xml','./msxsdtest/attribute',valid,S205),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes206,S206} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP008.xsd','./msxsdtest/attribute',valid),
+ {STRes206,S206} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP008.xsd','./msxsdtest/attribute',valid),
STResList207 = [STRes206|STResList206],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP008.xml','./msxsdtest/attribute',invalid,S206),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP008.xml','./msxsdtest/attribute',invalid,S206),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes207,S207} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP009.xsd','./msxsdtest/attribute',valid),
+ {STRes207,S207} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP009.xsd','./msxsdtest/attribute',valid),
STResList208 = [STRes207|STResList207],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP009.xml','./msxsdtest/attribute',valid,S207),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP009.xml','./msxsdtest/attribute',valid,S207),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes208,S208} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP010.xsd','./msxsdtest/attribute',valid),
+ {STRes208,S208} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP010.xsd','./msxsdtest/attribute',valid),
STResList209 = [STRes208|STResList208],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP010.xml','./msxsdtest/attribute',invalid,S208),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP010.xml','./msxsdtest/attribute',invalid,S208),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes209,S209} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP011.xsd','./msxsdtest/attribute',valid),
+ {STRes209,S209} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP011.xsd','./msxsdtest/attribute',valid),
STResList210 = [STRes209|STResList209],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP011.xml','./msxsdtest/attribute',valid,S209),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP011.xml','./msxsdtest/attribute',valid,S209),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes210,S210} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP012.xsd','./msxsdtest/attribute',valid),
+ {STRes210,S210} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP012.xsd','./msxsdtest/attribute',valid),
STResList211 = [STRes210|STResList210],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP012.xml','./msxsdtest/attribute',invalid,S210),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP012.xml','./msxsdtest/attribute',invalid,S210),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes211,S211} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP013.xsd','./msxsdtest/attribute',valid),
+ {STRes211,S211} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP013.xsd','./msxsdtest/attribute',valid),
STResList212 = [STRes211|STResList211],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP013.xml','./msxsdtest/attribute',valid,S211),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP013.xml','./msxsdtest/attribute',valid,S211),
ITResList83 = [ITRes82|ITResList82],
- ?line {STRes212,S212} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP014.xsd','./msxsdtest/attribute',valid),
+ {STRes212,S212} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP014.xsd','./msxsdtest/attribute',valid),
STResList213 = [STRes212|STResList212],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP014.xml','./msxsdtest/attribute',invalid,S212),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP014.xml','./msxsdtest/attribute',invalid,S212),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes213,S213} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP015.xsd','./msxsdtest/attribute',valid),
+ {STRes213,S213} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP015.xsd','./msxsdtest/attribute',valid),
STResList214 = [STRes213|STResList213],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP015.xml','./msxsdtest/attribute',valid,S213),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP015.xml','./msxsdtest/attribute',valid,S213),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes214,S214} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP016.xsd','./msxsdtest/attribute',valid),
+ {STRes214,S214} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP016.xsd','./msxsdtest/attribute',valid),
STResList215 = [STRes214|STResList214],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP016.xml','./msxsdtest/attribute',invalid,S214),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP016.xml','./msxsdtest/attribute',invalid,S214),
ITResList86 = [ITRes85|ITResList85],
- ?line {STRes215,S215} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP017.xsd','./msxsdtest/attribute',valid),
+ {STRes215,S215} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP017.xsd','./msxsdtest/attribute',valid),
STResList216 = [STRes215|STResList215],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP017.xml','./msxsdtest/attribute',valid,S215),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP017.xml','./msxsdtest/attribute',valid,S215),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes216,S216} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP018.xsd','./msxsdtest/attribute',valid),
+ {STRes216,S216} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP018.xsd','./msxsdtest/attribute',valid),
STResList217 = [STRes216|STResList216],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP018.xml','./msxsdtest/attribute',invalid,S216),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP018.xml','./msxsdtest/attribute',invalid,S216),
ITResList88 = [ITRes87|ITResList87],
- ?line {STRes217,S217} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP019.xsd','./msxsdtest/attribute',valid),
+ {STRes217,S217} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP019.xsd','./msxsdtest/attribute',valid),
STResList218 = [STRes217|STResList217],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP019.xml','./msxsdtest/attribute',valid,S217),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP019.xml','./msxsdtest/attribute',valid,S217),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes218,S218} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP020.xsd','./msxsdtest/attribute',valid),
+ {STRes218,S218} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP020.xsd','./msxsdtest/attribute',valid),
STResList219 = [STRes218|STResList218],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP020.xml','./msxsdtest/attribute',invalid,S218),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP020.xml','./msxsdtest/attribute',invalid,S218),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes219,S219} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP021.xsd','./msxsdtest/attribute',valid),
+ {STRes219,S219} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP021.xsd','./msxsdtest/attribute',valid),
STResList220 = [STRes219|STResList219],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP021.xml','./msxsdtest/attribute',valid,S219),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP021.xml','./msxsdtest/attribute',valid,S219),
ITResList91 = [ITRes90|ITResList90],
- ?line {STRes220,S220} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP022.xsd','./msxsdtest/attribute',valid),
+ {STRes220,S220} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP022.xsd','./msxsdtest/attribute',valid),
STResList221 = [STRes220|STResList220],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP022.xml','./msxsdtest/attribute',valid,S220),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP022.xml','./msxsdtest/attribute',valid,S220),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes221,S221} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP023.xsd','./msxsdtest/attribute',valid),
+ {STRes221,S221} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP023.xsd','./msxsdtest/attribute',valid),
STResList222 = [STRes221|STResList221],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP023.xml','./msxsdtest/attribute',valid,S221),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP023.xml','./msxsdtest/attribute',valid,S221),
ITResList93 = [ITRes92|ITResList92],
- ?line {STRes222,S222} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP024.xsd','./msxsdtest/attribute',valid),
+ {STRes222,S222} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP024.xsd','./msxsdtest/attribute',valid),
STResList223 = [STRes222|STResList222],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP024.xml','./msxsdtest/attribute',valid,S222),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP024.xml','./msxsdtest/attribute',valid,S222),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes223,S223} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP025.xsd','./msxsdtest/attribute',valid),
+ {STRes223,S223} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP025.xsd','./msxsdtest/attribute',valid),
STResList224 = [STRes223|STResList223],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP025.xml','./msxsdtest/attribute',valid,S223),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP025.xml','./msxsdtest/attribute',valid,S223),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes224,S224} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP026.xsd','./msxsdtest/attribute',valid),
+ {STRes224,S224} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP026.xsd','./msxsdtest/attribute',valid),
STResList225 = [STRes224|STResList224],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP026.xml','./msxsdtest/attribute',valid,S224),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP026.xml','./msxsdtest/attribute',valid,S224),
ITResList96 = [ITRes95|ITResList95],
- ?line {STRes225,S225} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP027.xsd','./msxsdtest/attribute',valid),
+ {STRes225,S225} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP027.xsd','./msxsdtest/attribute',valid),
STResList226 = [STRes225|STResList225],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP027.xml','./msxsdtest/attribute',invalid,S225),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP027.xml','./msxsdtest/attribute',invalid,S225),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes226,S226} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP028.xsd','./msxsdtest/attribute',valid),
+ {STRes226,S226} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP028.xsd','./msxsdtest/attribute',valid),
STResList227 = [STRes226|STResList226],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP028.xml','./msxsdtest/attribute',valid,S226),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP028.xml','./msxsdtest/attribute',valid,S226),
ITResList98 = [ITRes97|ITResList97],
- ?line {STRes227,S227} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP029.xsd','./msxsdtest/attribute',valid),
+ {STRes227,S227} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP029.xsd','./msxsdtest/attribute',valid),
STResList228 = [STRes227|STResList227],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP029.xml','./msxsdtest/attribute',valid,S227),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP029.xml','./msxsdtest/attribute',valid,S227),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes228,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP030.xsd','./msxsdtest/attribute',invalid),
+ {STRes228,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP030.xsd','./msxsdtest/attribute',invalid),
STResList229 = [STRes228|STResList228],
- ?line {STRes229,S229} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP031.xsd','./msxsdtest/attribute',valid),
+ {STRes229,S229} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP031.xsd','./msxsdtest/attribute',valid),
STResList230 = [STRes229|STResList229],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP031.xml','./msxsdtest/attribute',invalid,S229),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP031.xml','./msxsdtest/attribute',invalid,S229),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes230,S230} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP032.xsd','./msxsdtest/attribute',valid),
+ {STRes230,S230} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attP032.xsd','./msxsdtest/attribute',valid),
STResList231 = [STRes230|STResList230],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP032.xml','./msxsdtest/attribute',valid,S230),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attP032.xml','./msxsdtest/attribute',valid,S230),
ITResList101 = [ITRes100|ITResList100],
- ?line {STRes231,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ001.xsd','./msxsdtest/attribute',invalid),
+ {STRes231,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ001.xsd','./msxsdtest/attribute',invalid),
STResList232 = [STRes231|STResList231],
- ?line {STRes232,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ002.xsd','./msxsdtest/attribute',invalid),
+ {STRes232,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ002.xsd','./msxsdtest/attribute',invalid),
STResList233 = [STRes232|STResList232],
- ?line {STRes233,S233} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ003.xsd','./msxsdtest/attribute',valid),
+ {STRes233,S233} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ003.xsd','./msxsdtest/attribute',valid),
STResList234 = [STRes233|STResList233],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attQ003.xml','./msxsdtest/attribute',valid,S233),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attQ003.xml','./msxsdtest/attribute',valid,S233),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes234,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ004.xsd','./msxsdtest/attribute',invalid),
+ {STRes234,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ004.xsd','./msxsdtest/attribute',invalid),
STResList235 = [STRes234|STResList234],
- ?line {STRes235,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ005.xsd','./msxsdtest/attribute',invalid),
+ {STRes235,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ005.xsd','./msxsdtest/attribute',invalid),
STResList236 = [STRes235|STResList235],
- ?line {STRes236,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ006.xsd','./msxsdtest/attribute',invalid),
+ {STRes236,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ006.xsd','./msxsdtest/attribute',invalid),
STResList237 = [STRes236|STResList236],
- ?line {STRes237,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ007.xsd','./msxsdtest/attribute',invalid),
+ {STRes237,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ007.xsd','./msxsdtest/attribute',invalid),
STResList238 = [STRes237|STResList237],
- ?line {STRes238,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ008.xsd','./msxsdtest/attribute',invalid),
+ {STRes238,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ008.xsd','./msxsdtest/attribute',invalid),
STResList239 = [STRes238|STResList238],
- ?line {STRes239,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ009.xsd','./msxsdtest/attribute',invalid),
+ {STRes239,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ009.xsd','./msxsdtest/attribute',invalid),
STResList240 = [STRes239|STResList239],
- ?line {STRes240,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ010.xsd','./msxsdtest/attribute',valid),
+ {STRes240,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ010.xsd','./msxsdtest/attribute',valid),
STResList241 = [STRes240|STResList240],
- ?line {STRes241,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ011.xsd','./msxsdtest/attribute',invalid),
+ {STRes241,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ011.xsd','./msxsdtest/attribute',invalid),
STResList242 = [STRes241|STResList241],
- ?line {STRes242,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ012.xsd','./msxsdtest/attribute',invalid),
+ {STRes242,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ012.xsd','./msxsdtest/attribute',invalid),
STResList243 = [STRes242|STResList242],
- ?line {STRes243,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ013.xsd','./msxsdtest/attribute',invalid),
+ {STRes243,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ013.xsd','./msxsdtest/attribute',invalid),
STResList244 = [STRes243|STResList243],
- ?line {STRes244,S244} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ014.xsd','./msxsdtest/attribute',valid),
+ {STRes244,S244} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ014.xsd','./msxsdtest/attribute',valid),
STResList245 = [STRes244|STResList244],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attQ014.xml','./msxsdtest/attribute',valid,S244),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attQ014.xml','./msxsdtest/attribute',valid,S244),
ITResList103 = [ITRes102|ITResList102],
- ?line {STRes245,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ015.xsd','./msxsdtest/attribute',invalid),
+ {STRes245,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ015.xsd','./msxsdtest/attribute',invalid),
STResList246 = [STRes245|STResList245],
- ?line {STRes246,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ016.xsd','./msxsdtest/attribute',invalid),
+ {STRes246,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ016.xsd','./msxsdtest/attribute',invalid),
STResList247 = [STRes246|STResList246],
- ?line {STRes247,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ017.xsd','./msxsdtest/attribute',invalid),
+ {STRes247,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ017.xsd','./msxsdtest/attribute',invalid),
STResList248 = [STRes247|STResList247],
- ?line {STRes248,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ018.xsd','./msxsdtest/attribute',invalid),
+ {STRes248,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ018.xsd','./msxsdtest/attribute',invalid),
STResList249 = [STRes248|STResList248],
- ?line {STRes249,S249} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ019.xsd','./msxsdtest/attribute',valid),
+ {STRes249,S249} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attQ019.xsd','./msxsdtest/attribute',valid),
STResList250 = [STRes249|STResList249],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attQ019.xml','./msxsdtest/attribute',valid,S249),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attQ019.xml','./msxsdtest/attribute',valid,S249),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes250,S250} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attZ001.xsd','./msxsdtest/attribute',valid),
+ {STRes250,S250} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attZ001.xsd','./msxsdtest/attribute',valid),
STResList251 = [STRes250|STResList250],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attZ001.xml','./msxsdtest/attribute',invalid,S250),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attZ001.xml','./msxsdtest/attribute',invalid,S250),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attZ002.xsd','./msxsdtest/attribute',valid),
+ {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attZ002.xsd','./msxsdtest/attribute',valid),
STResList252 = [STRes251|STResList251],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attZ002.xml','./msxsdtest/attribute',invalid,S251),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attZ002.xml','./msxsdtest/attribute',invalid,S251),
ITResList106 = [ITRes105|ITResList105],
- ?line {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attZ003.xsd','./msxsdtest/attribute',valid),
+ {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attribute/attZ003.xsd','./msxsdtest/attribute',valid),
STResList253 = [STRes252|STResList252],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attZ003.xml','./msxsdtest/attribute',invalid,S252),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attribute/attZ003.xml','./msxsdtest/attribute',invalid,S252),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes253,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA001.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes253,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA001.xsd','./msxsdtest/attributeGroup',valid),
STResList254 = [STRes253|STResList253],
- ?line {STRes254,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA002.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes254,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA002.xsd','./msxsdtest/attributeGroup',invalid),
STResList255 = [STRes254|STResList254],
- ?line {STRes255,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA003.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes255,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA003.xsd','./msxsdtest/attributeGroup',invalid),
STResList256 = [STRes255|STResList255],
- ?line {STRes256,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA004.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes256,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA004.xsd','./msxsdtest/attributeGroup',invalid),
STResList257 = [STRes256|STResList256],
- ?line {STRes257,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA005.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes257,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA005.xsd','./msxsdtest/attributeGroup',invalid),
STResList258 = [STRes257|STResList257],
- ?line {STRes258,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA006.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes258,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA006.xsd','./msxsdtest/attributeGroup',invalid),
STResList259 = [STRes258|STResList258],
- ?line {STRes259,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA007.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes259,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA007.xsd','./msxsdtest/attributeGroup',invalid),
STResList260 = [STRes259|STResList259],
- ?line {STRes260,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA008.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes260,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA008.xsd','./msxsdtest/attributeGroup',invalid),
STResList261 = [STRes260|STResList260],
- ?line {STRes261,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA009.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes261,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgA009.xsd','./msxsdtest/attributeGroup',invalid),
STResList262 = [STRes261|STResList261],
- ?line {STRes262,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB001.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes262,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB001.xsd','./msxsdtest/attributeGroup',valid),
STResList263 = [STRes262|STResList262],
- ?line {STRes263,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB002.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes263,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB002.xsd','./msxsdtest/attributeGroup',invalid),
STResList264 = [STRes263|STResList263],
- ?line {STRes264,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB003.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes264,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB003.xsd','./msxsdtest/attributeGroup',invalid),
STResList265 = [STRes264|STResList264],
- ?line {STRes265,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB004.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes265,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB004.xsd','./msxsdtest/attributeGroup',invalid),
STResList266 = [STRes265|STResList265],
- ?line {STRes266,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB005.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes266,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB005.xsd','./msxsdtest/attributeGroup',valid),
STResList267 = [STRes266|STResList266],
- ?line {STRes267,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB006.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes267,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB006.xsd','./msxsdtest/attributeGroup',invalid),
STResList268 = [STRes267|STResList267],
- ?line {STRes268,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB007.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes268,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB007.xsd','./msxsdtest/attributeGroup',invalid),
STResList269 = [STRes268|STResList268],
- ?line {STRes269,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB008.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes269,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB008.xsd','./msxsdtest/attributeGroup',valid),
STResList270 = [STRes269|STResList269],
- ?line {STRes270,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB009.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes270,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB009.xsd','./msxsdtest/attributeGroup',valid),
STResList271 = [STRes270|STResList270],
- ?line {STRes271,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB010.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes271,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB010.xsd','./msxsdtest/attributeGroup',invalid),
STResList272 = [STRes271|STResList271],
- ?line {STRes272,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB011.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes272,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB011.xsd','./msxsdtest/attributeGroup',invalid),
STResList273 = [STRes272|STResList272],
- ?line {STRes273,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB012.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes273,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB012.xsd','./msxsdtest/attributeGroup',valid),
STResList274 = [STRes273|STResList273],
- ?line {STRes274,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB013.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes274,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB013.xsd','./msxsdtest/attributeGroup',invalid),
STResList275 = [STRes274|STResList274],
- ?line {STRes275,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB014.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes275,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB014.xsd','./msxsdtest/attributeGroup',valid),
STResList276 = [STRes275|STResList275],
- ?line {STRes276,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB015.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes276,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgB015.xsd','./msxsdtest/attributeGroup',invalid),
STResList277 = [STRes276|STResList276],
- ?line {STRes277,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC001.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes277,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC001.xsd','./msxsdtest/attributeGroup',invalid),
STResList278 = [STRes277|STResList277],
- ?line {STRes278,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC002.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes278,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC002.xsd','./msxsdtest/attributeGroup',valid),
STResList279 = [STRes278|STResList278],
- ?line {STRes279,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC003.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes279,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC003.xsd','./msxsdtest/attributeGroup',valid),
STResList280 = [STRes279|STResList279],
- ?line {STRes280,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC004.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes280,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC004.xsd','./msxsdtest/attributeGroup',valid),
STResList281 = [STRes280|STResList280],
- ?line {STRes281,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC005.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes281,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC005.xsd','./msxsdtest/attributeGroup',valid),
STResList282 = [STRes281|STResList281],
- ?line {STRes282,S282} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC006.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes282,S282} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC006.xsd','./msxsdtest/attributeGroup',valid),
STResList283 = [STRes282|STResList282],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC006.xml','./msxsdtest/attributeGroup',invalid,S282),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC006.xml','./msxsdtest/attributeGroup',invalid,S282),
ITResList108 = [ITRes107|ITResList107],
- ?line {STRes283,S283} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC007.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes283,S283} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC007.xsd','./msxsdtest/attributeGroup',valid),
STResList284 = [STRes283|STResList283],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC007.xml','./msxsdtest/attributeGroup',valid,S283),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC007.xml','./msxsdtest/attributeGroup',valid,S283),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes284,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC008.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes284,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC008.xsd','./msxsdtest/attributeGroup',invalid),
STResList285 = [STRes284|STResList284],
- ?line {STRes285,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC009.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes285,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC009.xsd','./msxsdtest/attributeGroup',invalid),
STResList286 = [STRes285|STResList285],
- ?line {STRes286,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC010.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes286,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC010.xsd','./msxsdtest/attributeGroup',invalid),
STResList287 = [STRes286|STResList286],
- ?line {STRes287,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC011.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes287,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC011.xsd','./msxsdtest/attributeGroup',invalid),
STResList288 = [STRes287|STResList287],
- ?line {STRes288,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC012.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes288,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC012.xsd','./msxsdtest/attributeGroup',valid),
STResList289 = [STRes288|STResList288],
- ?line {STRes289,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC013.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes289,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC013.xsd','./msxsdtest/attributeGroup',valid),
STResList290 = [STRes289|STResList289],
- ?line {STRes290,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC014.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes290,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC014.xsd','./msxsdtest/attributeGroup',valid),
STResList291 = [STRes290|STResList290],
- ?line {STRes291,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC015.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes291,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC015.xsd','./msxsdtest/attributeGroup',valid),
STResList292 = [STRes291|STResList291],
- ?line {STRes292,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC016.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes292,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC016.xsd','./msxsdtest/attributeGroup',valid),
STResList293 = [STRes292|STResList292],
- ?line {STRes293,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC017.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes293,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC017.xsd','./msxsdtest/attributeGroup',valid),
STResList294 = [STRes293|STResList293],
- ?line {STRes294,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC018.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes294,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC018.xsd','./msxsdtest/attributeGroup',invalid),
STResList295 = [STRes294|STResList294],
- ?line {STRes295,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC019.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes295,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC019.xsd','./msxsdtest/attributeGroup',invalid),
STResList296 = [STRes295|STResList295],
- ?line {STRes296,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC020.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes296,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC020.xsd','./msxsdtest/attributeGroup',invalid),
STResList297 = [STRes296|STResList296],
- ?line {STRes297,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC021.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes297,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC021.xsd','./msxsdtest/attributeGroup',invalid),
STResList298 = [STRes297|STResList297],
- ?line {STRes298,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC022.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes298,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC022.xsd','./msxsdtest/attributeGroup',valid),
STResList299 = [STRes298|STResList298],
- ?line {STRes299,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC023.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes299,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC023.xsd','./msxsdtest/attributeGroup',valid),
STResList300 = [STRes299|STResList299],
- ?line {STRes300,S300} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC024.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes300,S300} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC024.xsd','./msxsdtest/attributeGroup',valid),
STResList301 = [STRes300|STResList300],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC024.xml','./msxsdtest/attributeGroup',valid,S300),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC024.xml','./msxsdtest/attributeGroup',valid,S300),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes301,S301} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC025.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes301,S301} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC025.xsd','./msxsdtest/attributeGroup',valid),
STResList302 = [STRes301|STResList301],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC025.xml','./msxsdtest/attributeGroup',invalid,S301),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC025.xml','./msxsdtest/attributeGroup',invalid,S301),
ITResList111 = [ITRes110|ITResList110],
- ?line {STRes302,S302} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC026.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes302,S302} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC026.xsd','./msxsdtest/attributeGroup',valid),
STResList303 = [STRes302|STResList302],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC026.xml','./msxsdtest/attributeGroup',valid,S302),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC026.xml','./msxsdtest/attributeGroup',valid,S302),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes303,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC027.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes303,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC027.xsd','./msxsdtest/attributeGroup',valid),
STResList304 = [STRes303|STResList303],
- ?line {STRes304,S304} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC028.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes304,S304} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC028.xsd','./msxsdtest/attributeGroup',valid),
STResList305 = [STRes304|STResList304],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC028.xml','./msxsdtest/attributeGroup',invalid,S304),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC028.xml','./msxsdtest/attributeGroup',invalid,S304),
ITResList113 = [ITRes112|ITResList112],
- ?line {STRes305,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC029.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes305,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC029.xsd','./msxsdtest/attributeGroup',invalid),
STResList306 = [STRes305|STResList305],
- ?line {STRes306,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC030.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes306,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC030.xsd','./msxsdtest/attributeGroup',invalid),
STResList307 = [STRes306|STResList306],
- ?line {STRes307,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC031.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes307,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC031.xsd','./msxsdtest/attributeGroup',invalid),
STResList308 = [STRes307|STResList307],
- ?line {STRes308,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC032.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes308,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC032.xsd','./msxsdtest/attributeGroup',invalid),
STResList309 = [STRes308|STResList308],
- ?line {STRes309,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC033.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes309,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC033.xsd','./msxsdtest/attributeGroup',valid),
STResList310 = [STRes309|STResList309],
- ?line {STRes310,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC034.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes310,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC034.xsd','./msxsdtest/attributeGroup',valid),
STResList311 = [STRes310|STResList310],
- ?line {STRes311,S311} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC035.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes311,S311} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC035.xsd','./msxsdtest/attributeGroup',valid),
STResList312 = [STRes311|STResList311],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC035.xml','./msxsdtest/attributeGroup',valid,S311),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC035.xml','./msxsdtest/attributeGroup',valid,S311),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes312,S312} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC036.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes312,S312} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC036.xsd','./msxsdtest/attributeGroup',valid),
STResList313 = [STRes312|STResList312],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC036.xml','./msxsdtest/attributeGroup',valid,S312),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC036.xml','./msxsdtest/attributeGroup',valid,S312),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes313,S313} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC037.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes313,S313} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC037.xsd','./msxsdtest/attributeGroup',valid),
STResList314 = [STRes313|STResList313],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC037.xml','./msxsdtest/attributeGroup',valid,S313),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC037.xml','./msxsdtest/attributeGroup',valid,S313),
ITResList116 = [ITRes115|ITResList115],
- ?line {STRes314,S314} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC038.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes314,S314} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC038.xsd','./msxsdtest/attributeGroup',valid),
STResList315 = [STRes314|STResList314],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC038.xml','./msxsdtest/attributeGroup',valid,S314),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgC038.xml','./msxsdtest/attributeGroup',valid,S314),
ITResList117 = [ITRes116|ITResList116],
- ?line {STRes315,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC039.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes315,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC039.xsd','./msxsdtest/attributeGroup',invalid),
STResList316 = [STRes315|STResList315],
- ?line {STRes316,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC040.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes316,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC040.xsd','./msxsdtest/attributeGroup',invalid),
STResList317 = [STRes316|STResList316],
- ?line {STRes317,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC041.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes317,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC041.xsd','./msxsdtest/attributeGroup',valid),
STResList318 = [STRes317|STResList317],
- ?line {STRes318,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC042.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes318,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC042.xsd','./msxsdtest/attributeGroup',invalid),
STResList319 = [STRes318|STResList318],
- ?line {STRes319,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC043.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes319,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC043.xsd','./msxsdtest/attributeGroup',valid),
STResList320 = [STRes319|STResList319],
- ?line {STRes320,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC044.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes320,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC044.xsd','./msxsdtest/attributeGroup',invalid),
STResList321 = [STRes320|STResList320],
- ?line {STRes321,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC045.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes321,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgC045.xsd','./msxsdtest/attributeGroup',valid),
STResList322 = [STRes321|STResList321],
- ?line {STRes322,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD001.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes322,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD001.xsd','./msxsdtest/attributeGroup',valid),
STResList323 = [STRes322|STResList322],
- ?line {STRes323,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD002.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes323,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD002.xsd','./msxsdtest/attributeGroup',invalid),
STResList324 = [STRes323|STResList323],
- ?line {STRes324,S324} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD003.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes324,S324} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD003.xsd','./msxsdtest/attributeGroup',valid),
STResList325 = [STRes324|STResList324],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD003.xml','./msxsdtest/attributeGroup',valid,S324),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD003.xml','./msxsdtest/attributeGroup',valid,S324),
ITResList118 = [ITRes117|ITResList117],
- ?line {STRes325,S325} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD004.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes325,S325} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD004.xsd','./msxsdtest/attributeGroup',valid),
STResList326 = [STRes325|STResList325],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD004.xml','./msxsdtest/attributeGroup',valid,S325),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD004.xml','./msxsdtest/attributeGroup',valid,S325),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes326,S326} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD005.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes326,S326} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD005.xsd','./msxsdtest/attributeGroup',valid),
STResList327 = [STRes326|STResList326],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD005.xml','./msxsdtest/attributeGroup',valid,S326),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD005.xml','./msxsdtest/attributeGroup',valid,S326),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes327,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD006.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes327,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD006.xsd','./msxsdtest/attributeGroup',invalid),
STResList328 = [STRes327|STResList327],
- ?line {STRes328,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD007.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes328,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD007.xsd','./msxsdtest/attributeGroup',invalid),
STResList329 = [STRes328|STResList328],
- ?line {STRes329,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD008.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes329,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD008.xsd','./msxsdtest/attributeGroup',invalid),
STResList330 = [STRes329|STResList329],
- ?line {STRes330,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD009.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes330,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD009.xsd','./msxsdtest/attributeGroup',invalid),
STResList331 = [STRes330|STResList330],
- ?line {STRes331,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD010.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes331,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD010.xsd','./msxsdtest/attributeGroup',valid),
STResList332 = [STRes331|STResList331],
- ?line {STRes332,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD011.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes332,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD011.xsd','./msxsdtest/attributeGroup',invalid),
STResList333 = [STRes332|STResList332],
- ?line {STRes333,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD012.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes333,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD012.xsd','./msxsdtest/attributeGroup',invalid),
STResList334 = [STRes333|STResList333],
- ?line {STRes334,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD013.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes334,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD013.xsd','./msxsdtest/attributeGroup',invalid),
STResList335 = [STRes334|STResList334],
- ?line {STRes335,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD014.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes335,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD014.xsd','./msxsdtest/attributeGroup',invalid),
STResList336 = [STRes335|STResList335],
- ?line {STRes336,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD015.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes336,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD015.xsd','./msxsdtest/attributeGroup',invalid),
STResList337 = [STRes336|STResList336],
- ?line {STRes337,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD016.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes337,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD016.xsd','./msxsdtest/attributeGroup',invalid),
STResList338 = [STRes337|STResList337],
- ?line {STRes338,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD017.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes338,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD017.xsd','./msxsdtest/attributeGroup',invalid),
STResList339 = [STRes338|STResList338],
- ?line {STRes339,S339} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD018.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes339,S339} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD018.xsd','./msxsdtest/attributeGroup',valid),
STResList340 = [STRes339|STResList339],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD018.xml','./msxsdtest/attributeGroup',valid,S339),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD018.xml','./msxsdtest/attributeGroup',valid,S339),
ITResList121 = [ITRes120|ITResList120],
- ?line {STRes340,S340} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD019.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes340,S340} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD019.xsd','./msxsdtest/attributeGroup',valid),
STResList341 = [STRes340|STResList340],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD019.xml','./msxsdtest/attributeGroup',valid,S340),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD019.xml','./msxsdtest/attributeGroup',valid,S340),
ITResList122 = [ITRes121|ITResList121],
- ?line {STRes341,S341} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD020.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes341,S341} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD020.xsd','./msxsdtest/attributeGroup',valid),
STResList342 = [STRes341|STResList341],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD020.xml','./msxsdtest/attributeGroup',valid,S341),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD020.xml','./msxsdtest/attributeGroup',valid,S341),
ITResList123 = [ITRes122|ITResList122],
- ?line {STRes342,S342} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD021.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes342,S342} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD021.xsd','./msxsdtest/attributeGroup',valid),
STResList343 = [STRes342|STResList342],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD021.xml','./msxsdtest/attributeGroup',valid,S342),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD021.xml','./msxsdtest/attributeGroup',valid,S342),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes343,S343} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD022.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes343,S343} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD022.xsd','./msxsdtest/attributeGroup',valid),
STResList344 = [STRes343|STResList343],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD022.xml','./msxsdtest/attributeGroup',valid,S343),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD022.xml','./msxsdtest/attributeGroup',valid,S343),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes344,S344} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD023.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes344,S344} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD023.xsd','./msxsdtest/attributeGroup',valid),
STResList345 = [STRes344|STResList344],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD023.xml','./msxsdtest/attributeGroup',invalid,S344),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD023.xml','./msxsdtest/attributeGroup',invalid,S344),
ITResList126 = [ITRes125|ITResList125],
- ?line {STRes345,S345} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD024.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes345,S345} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD024.xsd','./msxsdtest/attributeGroup',valid),
STResList346 = [STRes345|STResList345],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD024.xml','./msxsdtest/attributeGroup',invalid,S345),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD024.xml','./msxsdtest/attributeGroup',invalid,S345),
ITResList127 = [ITRes126|ITResList126],
- ?line {STRes346,S346} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD025.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes346,S346} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD025.xsd','./msxsdtest/attributeGroup',valid),
STResList347 = [STRes346|STResList346],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD025.xml','./msxsdtest/attributeGroup',valid,S346),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD025.xml','./msxsdtest/attributeGroup',valid,S346),
ITResList128 = [ITRes127|ITResList127],
- ?line {STRes347,S347} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD026.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes347,S347} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD026.xsd','./msxsdtest/attributeGroup',valid),
STResList348 = [STRes347|STResList347],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD026.xml','./msxsdtest/attributeGroup',invalid,S347),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD026.xml','./msxsdtest/attributeGroup',invalid,S347),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes348,S348} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD027.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes348,S348} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD027.xsd','./msxsdtest/attributeGroup',valid),
STResList349 = [STRes348|STResList348],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD027.xml','./msxsdtest/attributeGroup',valid,S348),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD027.xml','./msxsdtest/attributeGroup',valid,S348),
ITResList130 = [ITRes129|ITResList129],
- ?line {STRes349,S349} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD028.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes349,S349} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD028.xsd','./msxsdtest/attributeGroup',valid),
STResList350 = [STRes349|STResList349],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD028.xml','./msxsdtest/attributeGroup',invalid,S349),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD028.xml','./msxsdtest/attributeGroup',invalid,S349),
ITResList131 = [ITRes130|ITResList130],
- ?line {STRes350,S350} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD029.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes350,S350} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD029.xsd','./msxsdtest/attributeGroup',valid),
STResList351 = [STRes350|STResList350],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD029.xml','./msxsdtest/attributeGroup',valid,S350),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD029.xml','./msxsdtest/attributeGroup',valid,S350),
ITResList132 = [ITRes131|ITResList131],
- ?line {STRes351,S351} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD030.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes351,S351} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD030.xsd','./msxsdtest/attributeGroup',valid),
STResList352 = [STRes351|STResList351],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD030.xml','./msxsdtest/attributeGroup',invalid,S351),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD030.xml','./msxsdtest/attributeGroup',invalid,S351),
ITResList133 = [ITRes132|ITResList132],
- ?line {STRes352,S352} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD031.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes352,S352} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD031.xsd','./msxsdtest/attributeGroup',valid),
STResList353 = [STRes352|STResList352],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD031.xml','./msxsdtest/attributeGroup',valid,S352),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD031.xml','./msxsdtest/attributeGroup',valid,S352),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes353,S353} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD032.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes353,S353} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD032.xsd','./msxsdtest/attributeGroup',valid),
STResList354 = [STRes353|STResList353],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD032.xml','./msxsdtest/attributeGroup',valid,S353),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD032.xml','./msxsdtest/attributeGroup',valid,S353),
ITResList135 = [ITRes134|ITResList134],
- ?line {STRes354,S354} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD033.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes354,S354} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD033.xsd','./msxsdtest/attributeGroup',valid),
STResList355 = [STRes354|STResList354],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD033.xml','./msxsdtest/attributeGroup',valid,S354),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD033.xml','./msxsdtest/attributeGroup',valid,S354),
ITResList136 = [ITRes135|ITResList135],
- ?line {STRes355,S355} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD034.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes355,S355} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD034.xsd','./msxsdtest/attributeGroup',valid),
STResList356 = [STRes355|STResList355],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD034.xml','./msxsdtest/attributeGroup',valid,S355),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD034.xml','./msxsdtest/attributeGroup',valid,S355),
ITResList137 = [ITRes136|ITResList136],
- ?line {STRes356,S356} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD035.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes356,S356} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD035.xsd','./msxsdtest/attributeGroup',valid),
STResList357 = [STRes356|STResList356],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD035.xml','./msxsdtest/attributeGroup',invalid,S356),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD035.xml','./msxsdtest/attributeGroup',invalid,S356),
ITResList138 = [ITRes137|ITResList137],
- ?line {STRes357,S357} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD036.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes357,S357} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD036.xsd','./msxsdtest/attributeGroup',valid),
STResList358 = [STRes357|STResList357],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD036.xml','./msxsdtest/attributeGroup',valid,S357),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD036.xml','./msxsdtest/attributeGroup',valid,S357),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes358,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD037.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes358,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD037.xsd','./msxsdtest/attributeGroup',invalid),
STResList359 = [STRes358|STResList358],
- ?line {STRes359,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD038.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes359,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD038.xsd','./msxsdtest/attributeGroup',invalid),
STResList360 = [STRes359|STResList359],
- ?line {STRes360,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD039.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes360,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD039.xsd','./msxsdtest/attributeGroup',invalid),
STResList361 = [STRes360|STResList360],
- ?line {STRes361,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD040.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes361,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD040.xsd','./msxsdtest/attributeGroup',valid),
STResList362 = [STRes361|STResList361],
- ?line {STRes362,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD041.xsd','./msxsdtest/attributeGroup',invalid),
+ {STRes362,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD041.xsd','./msxsdtest/attributeGroup',invalid),
STResList363 = [STRes362|STResList362],
- ?line {STRes363,S363} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD042.xsd','./msxsdtest/attributeGroup',valid),
+ {STRes363,S363} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/attributeGroup/attgD042.xsd','./msxsdtest/attributeGroup',valid),
STResList364 = [STRes363|STResList363],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD042.xml','./msxsdtest/attributeGroup',invalid,S363),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/attributeGroup/attgD042.xml','./msxsdtest/attributeGroup',invalid,S363),
ITResList140 = [ITRes139|ITResList139],
@@ -1829,2574 +1817,2574 @@ att(Config) when is_list(Config) ->
ct(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA001.xsd','./msxsdtest/complexType',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA001.xsd','./msxsdtest/complexType',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA001.xml','./msxsdtest/complexType',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA001.xml','./msxsdtest/complexType',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA002.xsd','./msxsdtest/complexType',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA002.xsd','./msxsdtest/complexType',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA002.xml','./msxsdtest/complexType',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA002.xml','./msxsdtest/complexType',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA003.xsd','./msxsdtest/complexType',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA003.xsd','./msxsdtest/complexType',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA003.xml','./msxsdtest/complexType',valid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA003.xml','./msxsdtest/complexType',valid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA004.xsd','./msxsdtest/complexType',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA004.xsd','./msxsdtest/complexType',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA005.xsd','./msxsdtest/complexType',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA005.xsd','./msxsdtest/complexType',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA005.xml','./msxsdtest/complexType',valid,S4),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA005.xml','./msxsdtest/complexType',valid,S4),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA006.xsd','./msxsdtest/complexType',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA006.xsd','./msxsdtest/complexType',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA007.xsd','./msxsdtest/complexType',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA007.xsd','./msxsdtest/complexType',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA008.xsd','./msxsdtest/complexType',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA008.xsd','./msxsdtest/complexType',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA009.xsd','./msxsdtest/complexType',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA009.xsd','./msxsdtest/complexType',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA009.xml','./msxsdtest/complexType',valid,S8),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA009.xml','./msxsdtest/complexType',valid,S8),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA010.xsd','./msxsdtest/complexType',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA010.xsd','./msxsdtest/complexType',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA010.xml','./msxsdtest/complexType',valid,S9),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA010.xml','./msxsdtest/complexType',valid,S9),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA011.xsd','./msxsdtest/complexType',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA011.xsd','./msxsdtest/complexType',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA011.xml','./msxsdtest/complexType',valid,S10),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA011.xml','./msxsdtest/complexType',valid,S10),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA012.xsd','./msxsdtest/complexType',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA012.xsd','./msxsdtest/complexType',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA012.xml','./msxsdtest/complexType',valid,S11),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA012.xml','./msxsdtest/complexType',valid,S11),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA013.xsd','./msxsdtest/complexType',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA013.xsd','./msxsdtest/complexType',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA013.xml','./msxsdtest/complexType',valid,S12),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA013.xml','./msxsdtest/complexType',valid,S12),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA014.xsd','./msxsdtest/complexType',invalid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA014.xsd','./msxsdtest/complexType',invalid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA015.xsd','./msxsdtest/complexType',invalid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA015.xsd','./msxsdtest/complexType',invalid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA016.xsd','./msxsdtest/complexType',invalid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA016.xsd','./msxsdtest/complexType',invalid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA017.xsd','./msxsdtest/complexType',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA017.xsd','./msxsdtest/complexType',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA017.xml','./msxsdtest/complexType',valid,S16),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA017.xml','./msxsdtest/complexType',valid,S16),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA018.xsd','./msxsdtest/complexType',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA018.xsd','./msxsdtest/complexType',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA018.xml','./msxsdtest/complexType',valid,S17),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA018.xml','./msxsdtest/complexType',valid,S17),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA019.xsd','./msxsdtest/complexType',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA019.xsd','./msxsdtest/complexType',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA019.xml','./msxsdtest/complexType',valid,S18),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA019.xml','./msxsdtest/complexType',valid,S18),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA020.xsd','./msxsdtest/complexType',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA020.xsd','./msxsdtest/complexType',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA020.xml','./msxsdtest/complexType',valid,S19),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA020.xml','./msxsdtest/complexType',valid,S19),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA021.xsd','./msxsdtest/complexType',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA021.xsd','./msxsdtest/complexType',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA021.xml','./msxsdtest/complexType',valid,S20),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA021.xml','./msxsdtest/complexType',valid,S20),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA022.xsd','./msxsdtest/complexType',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA022.xsd','./msxsdtest/complexType',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA022.xml','./msxsdtest/complexType',valid,S21),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA022.xml','./msxsdtest/complexType',valid,S21),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA023.xsd','./msxsdtest/complexType',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA023.xsd','./msxsdtest/complexType',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA024.xsd','./msxsdtest/complexType',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA024.xsd','./msxsdtest/complexType',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA025.xsd','./msxsdtest/complexType',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA025.xsd','./msxsdtest/complexType',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA026.xsd','./msxsdtest/complexType',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA026.xsd','./msxsdtest/complexType',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA026.xml','./msxsdtest/complexType',valid,S25),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA026.xml','./msxsdtest/complexType',valid,S25),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA027.xsd','./msxsdtest/complexType',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA027.xsd','./msxsdtest/complexType',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA027.xml','./msxsdtest/complexType',valid,S26),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA027.xml','./msxsdtest/complexType',valid,S26),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA028.xsd','./msxsdtest/complexType',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA028.xsd','./msxsdtest/complexType',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA029.xsd','./msxsdtest/complexType',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA029.xsd','./msxsdtest/complexType',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA030.xsd','./msxsdtest/complexType',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA030.xsd','./msxsdtest/complexType',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA031.xsd','./msxsdtest/complexType',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA031.xsd','./msxsdtest/complexType',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA032.xsd','./msxsdtest/complexType',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA032.xsd','./msxsdtest/complexType',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA032.xml','./msxsdtest/complexType',valid,S31),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA032.xml','./msxsdtest/complexType',valid,S31),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA033.xsd','./msxsdtest/complexType',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA033.xsd','./msxsdtest/complexType',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA033.xml','./msxsdtest/complexType',valid,S32),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA033.xml','./msxsdtest/complexType',valid,S32),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA034.xsd','./msxsdtest/complexType',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA034.xsd','./msxsdtest/complexType',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA034.xml','./msxsdtest/complexType',valid,S33),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA034.xml','./msxsdtest/complexType',valid,S33),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA035.xsd','./msxsdtest/complexType',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA035.xsd','./msxsdtest/complexType',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA035.xml','./msxsdtest/complexType',valid,S34),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA035.xml','./msxsdtest/complexType',valid,S34),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA036.xsd','./msxsdtest/complexType',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA036.xsd','./msxsdtest/complexType',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA037.xsd','./msxsdtest/complexType',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA037.xsd','./msxsdtest/complexType',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA037.xml','./msxsdtest/complexType',valid,S36),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA037.xml','./msxsdtest/complexType',valid,S36),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA038.xsd','./msxsdtest/complexType',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA038.xsd','./msxsdtest/complexType',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA039.xsd','./msxsdtest/complexType',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA039.xsd','./msxsdtest/complexType',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA040.xsd','./msxsdtest/complexType',invalid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA040.xsd','./msxsdtest/complexType',invalid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA041.xsd','./msxsdtest/complexType',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA041.xsd','./msxsdtest/complexType',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA041.xml','./msxsdtest/complexType',valid,S40),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA041.xml','./msxsdtest/complexType',valid,S40),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA042.xsd','./msxsdtest/complexType',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA042.xsd','./msxsdtest/complexType',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA043.xsd','./msxsdtest/complexType',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA043.xsd','./msxsdtest/complexType',invalid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA044.xsd','./msxsdtest/complexType',invalid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA044.xsd','./msxsdtest/complexType',invalid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA045.xsd','./msxsdtest/complexType',valid),
+ {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA045.xsd','./msxsdtest/complexType',valid),
STResList45 = [STRes44|STResList44],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA045.xml','./msxsdtest/complexType',valid,S44),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA045.xml','./msxsdtest/complexType',valid,S44),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA046.xsd','./msxsdtest/complexType',invalid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA046.xsd','./msxsdtest/complexType',invalid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA047.xsd','./msxsdtest/complexType',valid),
+ {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA047.xsd','./msxsdtest/complexType',valid),
STResList47 = [STRes46|STResList46],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA047.xml','./msxsdtest/complexType',valid,S46),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA047.xml','./msxsdtest/complexType',valid,S46),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA048.xsd','./msxsdtest/complexType',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA048.xsd','./msxsdtest/complexType',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA048.xml','./msxsdtest/complexType',valid,S47),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA048.xml','./msxsdtest/complexType',valid,S47),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA049.xsd','./msxsdtest/complexType',valid),
+ {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctA049.xsd','./msxsdtest/complexType',valid),
STResList49 = [STRes48|STResList48],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA049.xml','./msxsdtest/complexType',valid,S48),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctA049.xml','./msxsdtest/complexType',valid,S48),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB001.xsd','./msxsdtest/complexType',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB001.xsd','./msxsdtest/complexType',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB001.xml','./msxsdtest/complexType',valid,S49),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB001.xml','./msxsdtest/complexType',valid,S49),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB002.xsd','./msxsdtest/complexType',invalid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB002.xsd','./msxsdtest/complexType',invalid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB003.xsd','./msxsdtest/complexType',valid),
+ {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB003.xsd','./msxsdtest/complexType',valid),
STResList52 = [STRes51|STResList51],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB003.xml','./msxsdtest/complexType',valid,S51),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB003.xml','./msxsdtest/complexType',valid,S51),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB004.xsd','./msxsdtest/complexType',invalid),
+ {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB004.xsd','./msxsdtest/complexType',invalid),
STResList53 = [STRes52|STResList52],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB005.xsd','./msxsdtest/complexType',invalid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB005.xsd','./msxsdtest/complexType',invalid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB006.xsd','./msxsdtest/complexType',invalid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB006.xsd','./msxsdtest/complexType',invalid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB007.xsd','./msxsdtest/complexType',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB007.xsd','./msxsdtest/complexType',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB008.xsd','./msxsdtest/complexType',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB008.xsd','./msxsdtest/complexType',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB009.xsd','./msxsdtest/complexType',invalid),
+ {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB009.xsd','./msxsdtest/complexType',invalid),
STResList58 = [STRes57|STResList57],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB010.xsd','./msxsdtest/complexType',invalid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB010.xsd','./msxsdtest/complexType',invalid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB011.xsd','./msxsdtest/complexType',invalid),
+ {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB011.xsd','./msxsdtest/complexType',invalid),
STResList60 = [STRes59|STResList59],
- ?line {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB012.xsd','./msxsdtest/complexType',invalid),
+ {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB012.xsd','./msxsdtest/complexType',invalid),
STResList61 = [STRes60|STResList60],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB013.xsd','./msxsdtest/complexType',invalid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB013.xsd','./msxsdtest/complexType',invalid),
STResList62 = [STRes61|STResList61],
- ?line {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB014.xsd','./msxsdtest/complexType',invalid),
+ {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB014.xsd','./msxsdtest/complexType',invalid),
STResList63 = [STRes62|STResList62],
- ?line {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB015.xsd','./msxsdtest/complexType',invalid),
+ {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB015.xsd','./msxsdtest/complexType',invalid),
STResList64 = [STRes63|STResList63],
- ?line {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB016.xsd','./msxsdtest/complexType',invalid),
+ {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB016.xsd','./msxsdtest/complexType',invalid),
STResList65 = [STRes64|STResList64],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB017.xsd','./msxsdtest/complexType',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB017.xsd','./msxsdtest/complexType',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB017.xml','./msxsdtest/complexType',valid,S65),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB017.xml','./msxsdtest/complexType',valid,S65),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB018.xsd','./msxsdtest/complexType',invalid),
+ {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB018.xsd','./msxsdtest/complexType',invalid),
STResList67 = [STRes66|STResList66],
- ?line {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB019.xsd','./msxsdtest/complexType',invalid),
+ {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB019.xsd','./msxsdtest/complexType',invalid),
STResList68 = [STRes67|STResList67],
- ?line {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB020.xsd','./msxsdtest/complexType',invalid),
+ {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB020.xsd','./msxsdtest/complexType',invalid),
STResList69 = [STRes68|STResList68],
- ?line {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB021.xsd','./msxsdtest/complexType',invalid),
+ {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB021.xsd','./msxsdtest/complexType',invalid),
STResList70 = [STRes69|STResList69],
- ?line {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB022.xsd','./msxsdtest/complexType',invalid),
+ {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB022.xsd','./msxsdtest/complexType',invalid),
STResList71 = [STRes70|STResList70],
- ?line {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB023.xsd','./msxsdtest/complexType',invalid),
+ {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB023.xsd','./msxsdtest/complexType',invalid),
STResList72 = [STRes71|STResList71],
- ?line {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB024.xsd','./msxsdtest/complexType',invalid),
+ {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB024.xsd','./msxsdtest/complexType',invalid),
STResList73 = [STRes72|STResList72],
- ?line {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB025.xsd','./msxsdtest/complexType',invalid),
+ {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB025.xsd','./msxsdtest/complexType',invalid),
STResList74 = [STRes73|STResList73],
- ?line {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB026.xsd','./msxsdtest/complexType',invalid),
+ {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB026.xsd','./msxsdtest/complexType',invalid),
STResList75 = [STRes74|STResList74],
- ?line {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB027.xsd','./msxsdtest/complexType',invalid),
+ {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB027.xsd','./msxsdtest/complexType',invalid),
STResList76 = [STRes75|STResList75],
- ?line {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB028.xsd','./msxsdtest/complexType',invalid),
+ {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB028.xsd','./msxsdtest/complexType',invalid),
STResList77 = [STRes76|STResList76],
- ?line {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB029.xsd','./msxsdtest/complexType',invalid),
+ {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB029.xsd','./msxsdtest/complexType',invalid),
STResList78 = [STRes77|STResList77],
- ?line {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB030.xsd','./msxsdtest/complexType',invalid),
+ {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB030.xsd','./msxsdtest/complexType',invalid),
STResList79 = [STRes78|STResList78],
- ?line {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB031.xsd','./msxsdtest/complexType',valid),
+ {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB031.xsd','./msxsdtest/complexType',valid),
STResList80 = [STRes79|STResList79],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB031.xml','./msxsdtest/complexType',valid,S79),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB031.xml','./msxsdtest/complexType',valid,S79),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB032.xsd','./msxsdtest/complexType',invalid),
+ {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB032.xsd','./msxsdtest/complexType',invalid),
STResList81 = [STRes80|STResList80],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB033.xsd','./msxsdtest/complexType',invalid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB033.xsd','./msxsdtest/complexType',invalid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB034.xsd','./msxsdtest/complexType',invalid),
+ {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB034.xsd','./msxsdtest/complexType',invalid),
STResList83 = [STRes82|STResList82],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB035.xsd','./msxsdtest/complexType',invalid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB035.xsd','./msxsdtest/complexType',invalid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB036.xsd','./msxsdtest/complexType',invalid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB036.xsd','./msxsdtest/complexType',invalid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB037.xsd','./msxsdtest/complexType',invalid),
+ {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB037.xsd','./msxsdtest/complexType',invalid),
STResList86 = [STRes85|STResList85],
- ?line {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB038.xsd','./msxsdtest/complexType',invalid),
+ {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB038.xsd','./msxsdtest/complexType',invalid),
STResList87 = [STRes86|STResList86],
- ?line {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB039.xsd','./msxsdtest/complexType',valid),
+ {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB039.xsd','./msxsdtest/complexType',valid),
STResList88 = [STRes87|STResList87],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB039.xml','./msxsdtest/complexType',valid,S87),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB039.xml','./msxsdtest/complexType',valid,S87),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB040.xsd','./msxsdtest/complexType',valid),
+ {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB040.xsd','./msxsdtest/complexType',valid),
STResList89 = [STRes88|STResList88],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB040.xml','./msxsdtest/complexType',valid,S88),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB040.xml','./msxsdtest/complexType',valid,S88),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB041.xsd','./msxsdtest/complexType',valid),
+ {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB041.xsd','./msxsdtest/complexType',valid),
STResList90 = [STRes89|STResList89],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB041.xml','./msxsdtest/complexType',valid,S89),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB041.xml','./msxsdtest/complexType',valid,S89),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB042.xsd','./msxsdtest/complexType',valid),
+ {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB042.xsd','./msxsdtest/complexType',valid),
STResList91 = [STRes90|STResList90],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB042.xml','./msxsdtest/complexType',valid,S90),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB042.xml','./msxsdtest/complexType',valid,S90),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB043.xsd','./msxsdtest/complexType',valid),
+ {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB043.xsd','./msxsdtest/complexType',valid),
STResList92 = [STRes91|STResList91],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB043.xml','./msxsdtest/complexType',valid,S91),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB043.xml','./msxsdtest/complexType',valid,S91),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB044.xsd','./msxsdtest/complexType',invalid),
+ {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB044.xsd','./msxsdtest/complexType',invalid),
STResList93 = [STRes92|STResList92],
- ?line {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB045.xsd','./msxsdtest/complexType',valid),
+ {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB045.xsd','./msxsdtest/complexType',valid),
STResList94 = [STRes93|STResList93],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB045.xml','./msxsdtest/complexType',valid,S93),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB045.xml','./msxsdtest/complexType',valid,S93),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB046.xsd','./msxsdtest/complexType',invalid),
+ {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB046.xsd','./msxsdtest/complexType',invalid),
STResList95 = [STRes94|STResList94],
- ?line {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB047.xsd','./msxsdtest/complexType',invalid),
+ {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB047.xsd','./msxsdtest/complexType',invalid),
STResList96 = [STRes95|STResList95],
- ?line {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB048.xsd','./msxsdtest/complexType',invalid),
+ {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB048.xsd','./msxsdtest/complexType',invalid),
STResList97 = [STRes96|STResList96],
- ?line {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB049.xsd','./msxsdtest/complexType',invalid),
+ {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB049.xsd','./msxsdtest/complexType',invalid),
STResList98 = [STRes97|STResList97],
- ?line {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB050.xsd','./msxsdtest/complexType',invalid),
+ {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB050.xsd','./msxsdtest/complexType',invalid),
STResList99 = [STRes98|STResList98],
- ?line {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB051.xsd','./msxsdtest/complexType',invalid),
+ {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB051.xsd','./msxsdtest/complexType',invalid),
STResList100 = [STRes99|STResList99],
- ?line {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB052.xsd','./msxsdtest/complexType',invalid),
+ {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB052.xsd','./msxsdtest/complexType',invalid),
STResList101 = [STRes100|STResList100],
- ?line {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB053.xsd','./msxsdtest/complexType',valid),
+ {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB053.xsd','./msxsdtest/complexType',valid),
STResList102 = [STRes101|STResList101],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB053.xml','./msxsdtest/complexType',valid,S101),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB053.xml','./msxsdtest/complexType',valid,S101),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes102,S102} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB054.xsd','./msxsdtest/complexType',valid),
+ {STRes102,S102} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB054.xsd','./msxsdtest/complexType',valid),
STResList103 = [STRes102|STResList102],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB054.xml','./msxsdtest/complexType',valid,S102),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB054.xml','./msxsdtest/complexType',valid,S102),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes103,S103} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB055.xsd','./msxsdtest/complexType',valid),
+ {STRes103,S103} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB055.xsd','./msxsdtest/complexType',valid),
STResList104 = [STRes103|STResList103],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB055.xml','./msxsdtest/complexType',valid,S103),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB055.xml','./msxsdtest/complexType',valid,S103),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB056.xsd','./msxsdtest/complexType',valid),
+ {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB056.xsd','./msxsdtest/complexType',valid),
STResList105 = [STRes104|STResList104],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB056.xml','./msxsdtest/complexType',valid,S104),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB056.xml','./msxsdtest/complexType',valid,S104),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB057.xsd','./msxsdtest/complexType',valid),
+ {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB057.xsd','./msxsdtest/complexType',valid),
STResList106 = [STRes105|STResList105],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB057.xml','./msxsdtest/complexType',valid,S105),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB057.xml','./msxsdtest/complexType',valid,S105),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB058.xsd','./msxsdtest/complexType',invalid),
+ {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB058.xsd','./msxsdtest/complexType',invalid),
STResList107 = [STRes106|STResList106],
- ?line {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB059.xsd','./msxsdtest/complexType',valid),
+ {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB059.xsd','./msxsdtest/complexType',valid),
STResList108 = [STRes107|STResList107],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB059.xml','./msxsdtest/complexType',valid,S107),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB059.xml','./msxsdtest/complexType',valid,S107),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB060.xsd','./msxsdtest/complexType',invalid),
+ {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB060.xsd','./msxsdtest/complexType',invalid),
STResList109 = [STRes108|STResList108],
- ?line {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB061.xsd','./msxsdtest/complexType',invalid),
+ {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB061.xsd','./msxsdtest/complexType',invalid),
STResList110 = [STRes109|STResList109],
- ?line {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB062.xsd','./msxsdtest/complexType',invalid),
+ {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB062.xsd','./msxsdtest/complexType',invalid),
STResList111 = [STRes110|STResList110],
- ?line {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB063.xsd','./msxsdtest/complexType',invalid),
+ {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB063.xsd','./msxsdtest/complexType',invalid),
STResList112 = [STRes111|STResList111],
- ?line {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB064.xsd','./msxsdtest/complexType',invalid),
+ {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB064.xsd','./msxsdtest/complexType',invalid),
STResList113 = [STRes112|STResList112],
- ?line {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB065.xsd','./msxsdtest/complexType',invalid),
+ {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB065.xsd','./msxsdtest/complexType',invalid),
STResList114 = [STRes113|STResList113],
- ?line {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB066.xsd','./msxsdtest/complexType',invalid),
+ {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB066.xsd','./msxsdtest/complexType',invalid),
STResList115 = [STRes114|STResList114],
- ?line {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB067.xsd','./msxsdtest/complexType',valid),
+ {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB067.xsd','./msxsdtest/complexType',valid),
STResList116 = [STRes115|STResList115],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB067.xml','./msxsdtest/complexType',valid,S115),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB067.xml','./msxsdtest/complexType',valid,S115),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB068.xsd','./msxsdtest/complexType',valid),
+ {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB068.xsd','./msxsdtest/complexType',valid),
STResList117 = [STRes116|STResList116],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB068.xml','./msxsdtest/complexType',valid,S116),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB068.xml','./msxsdtest/complexType',valid,S116),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB069.xsd','./msxsdtest/complexType',valid),
+ {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB069.xsd','./msxsdtest/complexType',valid),
STResList118 = [STRes117|STResList117],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB069.xml','./msxsdtest/complexType',valid,S117),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB069.xml','./msxsdtest/complexType',valid,S117),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB070.xsd','./msxsdtest/complexType',valid),
+ {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB070.xsd','./msxsdtest/complexType',valid),
STResList119 = [STRes118|STResList118],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB070.xml','./msxsdtest/complexType',valid,S118),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB070.xml','./msxsdtest/complexType',valid,S118),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB071.xsd','./msxsdtest/complexType',valid),
+ {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB071.xsd','./msxsdtest/complexType',valid),
STResList120 = [STRes119|STResList119],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB071.xml','./msxsdtest/complexType',valid,S119),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB071.xml','./msxsdtest/complexType',valid,S119),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB072.xsd','./msxsdtest/complexType',invalid),
+ {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB072.xsd','./msxsdtest/complexType',invalid),
STResList121 = [STRes120|STResList120],
- ?line {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB073.xsd','./msxsdtest/complexType',valid),
+ {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB073.xsd','./msxsdtest/complexType',valid),
STResList122 = [STRes121|STResList121],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB073.xml','./msxsdtest/complexType',valid,S121),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB073.xml','./msxsdtest/complexType',valid,S121),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB074.xsd','./msxsdtest/complexType',invalid),
+ {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB074.xsd','./msxsdtest/complexType',invalid),
STResList123 = [STRes122|STResList122],
- ?line {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB075.xsd','./msxsdtest/complexType',invalid),
+ {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB075.xsd','./msxsdtest/complexType',invalid),
STResList124 = [STRes123|STResList123],
- ?line {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB076.xsd','./msxsdtest/complexType',invalid),
+ {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB076.xsd','./msxsdtest/complexType',invalid),
STResList125 = [STRes124|STResList124],
- ?line {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB077.xsd','./msxsdtest/complexType',invalid),
+ {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB077.xsd','./msxsdtest/complexType',invalid),
STResList126 = [STRes125|STResList125],
- ?line {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB078.xsd','./msxsdtest/complexType',invalid),
+ {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB078.xsd','./msxsdtest/complexType',invalid),
STResList127 = [STRes126|STResList126],
- ?line {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB079.xsd','./msxsdtest/complexType',invalid),
+ {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB079.xsd','./msxsdtest/complexType',invalid),
STResList128 = [STRes127|STResList127],
- ?line {STRes128,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB080.xsd','./msxsdtest/complexType',invalid),
+ {STRes128,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB080.xsd','./msxsdtest/complexType',invalid),
STResList129 = [STRes128|STResList128],
- ?line {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB081.xsd','./msxsdtest/complexType',valid),
+ {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB081.xsd','./msxsdtest/complexType',valid),
STResList130 = [STRes129|STResList129],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB081.xml','./msxsdtest/complexType',valid,S129),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB081.xml','./msxsdtest/complexType',valid,S129),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB082.xsd','./msxsdtest/complexType',valid),
+ {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB082.xsd','./msxsdtest/complexType',valid),
STResList131 = [STRes130|STResList130],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB082.xml','./msxsdtest/complexType',valid,S130),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB082.xml','./msxsdtest/complexType',valid,S130),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB083.xsd','./msxsdtest/complexType',valid),
+ {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB083.xsd','./msxsdtest/complexType',valid),
STResList132 = [STRes131|STResList131],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB083.xml','./msxsdtest/complexType',valid,S131),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB083.xml','./msxsdtest/complexType',valid,S131),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes132,S132} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB084.xsd','./msxsdtest/complexType',valid),
+ {STRes132,S132} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB084.xsd','./msxsdtest/complexType',valid),
STResList133 = [STRes132|STResList132],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB084.xml','./msxsdtest/complexType',valid,S132),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB084.xml','./msxsdtest/complexType',valid,S132),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes133,S133} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB085.xsd','./msxsdtest/complexType',valid),
+ {STRes133,S133} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB085.xsd','./msxsdtest/complexType',valid),
STResList134 = [STRes133|STResList133],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB085.xml','./msxsdtest/complexType',valid,S133),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB085.xml','./msxsdtest/complexType',valid,S133),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB086.xsd','./msxsdtest/complexType',invalid),
+ {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB086.xsd','./msxsdtest/complexType',invalid),
STResList135 = [STRes134|STResList134],
- ?line {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB087.xsd','./msxsdtest/complexType',valid),
+ {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB087.xsd','./msxsdtest/complexType',valid),
STResList136 = [STRes135|STResList135],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB087.xml','./msxsdtest/complexType',valid,S135),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB087.xml','./msxsdtest/complexType',valid,S135),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB088.xsd','./msxsdtest/complexType',invalid),
+ {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB088.xsd','./msxsdtest/complexType',invalid),
STResList137 = [STRes136|STResList136],
- ?line {STRes137,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB089.xsd','./msxsdtest/complexType',invalid),
+ {STRes137,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB089.xsd','./msxsdtest/complexType',invalid),
STResList138 = [STRes137|STResList137],
- ?line {STRes138,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB090.xsd','./msxsdtest/complexType',invalid),
+ {STRes138,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB090.xsd','./msxsdtest/complexType',invalid),
STResList139 = [STRes138|STResList138],
- ?line {STRes139,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB091.xsd','./msxsdtest/complexType',invalid),
+ {STRes139,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB091.xsd','./msxsdtest/complexType',invalid),
STResList140 = [STRes139|STResList139],
- ?line {STRes140,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB092.xsd','./msxsdtest/complexType',invalid),
+ {STRes140,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB092.xsd','./msxsdtest/complexType',invalid),
STResList141 = [STRes140|STResList140],
- ?line {STRes141,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB093.xsd','./msxsdtest/complexType',invalid),
+ {STRes141,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB093.xsd','./msxsdtest/complexType',invalid),
STResList142 = [STRes141|STResList141],
- ?line {STRes142,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB094.xsd','./msxsdtest/complexType',invalid),
+ {STRes142,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB094.xsd','./msxsdtest/complexType',invalid),
STResList143 = [STRes142|STResList142],
- ?line {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB095.xsd','./msxsdtest/complexType',valid),
+ {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB095.xsd','./msxsdtest/complexType',valid),
STResList144 = [STRes143|STResList143],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB095.xml','./msxsdtest/complexType',valid,S143),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB095.xml','./msxsdtest/complexType',valid,S143),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB096.xsd','./msxsdtest/complexType',valid),
+ {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB096.xsd','./msxsdtest/complexType',valid),
STResList145 = [STRes144|STResList144],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB096.xml','./msxsdtest/complexType',valid,S144),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB096.xml','./msxsdtest/complexType',valid,S144),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB097.xsd','./msxsdtest/complexType',valid),
+ {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB097.xsd','./msxsdtest/complexType',valid),
STResList146 = [STRes145|STResList145],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB097.xml','./msxsdtest/complexType',valid,S145),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB097.xml','./msxsdtest/complexType',valid,S145),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB098.xsd','./msxsdtest/complexType',valid),
+ {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB098.xsd','./msxsdtest/complexType',valid),
STResList147 = [STRes146|STResList146],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB098.xml','./msxsdtest/complexType',valid,S146),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB098.xml','./msxsdtest/complexType',valid,S146),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes147,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB099.xsd','./msxsdtest/complexType',invalid),
+ {STRes147,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB099.xsd','./msxsdtest/complexType',invalid),
STResList148 = [STRes147|STResList147],
- ?line {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB100.xsd','./msxsdtest/complexType',valid),
+ {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB100.xsd','./msxsdtest/complexType',valid),
STResList149 = [STRes148|STResList148],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB100.xml','./msxsdtest/complexType',valid,S148),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB100.xml','./msxsdtest/complexType',valid,S148),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes149,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB101.xsd','./msxsdtest/complexType',invalid),
+ {STRes149,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB101.xsd','./msxsdtest/complexType',invalid),
STResList150 = [STRes149|STResList149],
- ?line {STRes150,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB102.xsd','./msxsdtest/complexType',invalid),
+ {STRes150,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB102.xsd','./msxsdtest/complexType',invalid),
STResList151 = [STRes150|STResList150],
- ?line {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB103.xsd','./msxsdtest/complexType',invalid),
+ {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB103.xsd','./msxsdtest/complexType',invalid),
STResList152 = [STRes151|STResList151],
- ?line {STRes152,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB104.xsd','./msxsdtest/complexType',invalid),
+ {STRes152,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB104.xsd','./msxsdtest/complexType',invalid),
STResList153 = [STRes152|STResList152],
- ?line {STRes153,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB105.xsd','./msxsdtest/complexType',invalid),
+ {STRes153,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB105.xsd','./msxsdtest/complexType',invalid),
STResList154 = [STRes153|STResList153],
- ?line {STRes154,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB106.xsd','./msxsdtest/complexType',invalid),
+ {STRes154,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB106.xsd','./msxsdtest/complexType',invalid),
STResList155 = [STRes154|STResList154],
- ?line {STRes155,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB107.xsd','./msxsdtest/complexType',invalid),
+ {STRes155,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB107.xsd','./msxsdtest/complexType',invalid),
STResList156 = [STRes155|STResList155],
- ?line {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB108.xsd','./msxsdtest/complexType',valid),
+ {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB108.xsd','./msxsdtest/complexType',valid),
STResList157 = [STRes156|STResList156],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB108.xml','./msxsdtest/complexType',valid,S156),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB108.xml','./msxsdtest/complexType',valid,S156),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB109.xsd','./msxsdtest/complexType',valid),
+ {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB109.xsd','./msxsdtest/complexType',valid),
STResList158 = [STRes157|STResList157],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB109.xml','./msxsdtest/complexType',valid,S157),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB109.xml','./msxsdtest/complexType',valid,S157),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB110.xsd','./msxsdtest/complexType',valid),
+ {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB110.xsd','./msxsdtest/complexType',valid),
STResList159 = [STRes158|STResList158],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB110.xml','./msxsdtest/complexType',valid,S158),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB110.xml','./msxsdtest/complexType',valid,S158),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes159,S159} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB111.xsd','./msxsdtest/complexType',valid),
+ {STRes159,S159} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB111.xsd','./msxsdtest/complexType',valid),
STResList160 = [STRes159|STResList159],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB111.xml','./msxsdtest/complexType',valid,S159),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB111.xml','./msxsdtest/complexType',valid,S159),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes160,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB112.xsd','./msxsdtest/complexType',invalid),
+ {STRes160,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB112.xsd','./msxsdtest/complexType',invalid),
STResList161 = [STRes160|STResList160],
- ?line {STRes161,S161} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB113.xsd','./msxsdtest/complexType',valid),
+ {STRes161,S161} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB113.xsd','./msxsdtest/complexType',valid),
STResList162 = [STRes161|STResList161],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB113.xml','./msxsdtest/complexType',valid,S161),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctB113.xml','./msxsdtest/complexType',valid,S161),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes162,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB114.xsd','./msxsdtest/complexType',invalid),
+ {STRes162,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB114.xsd','./msxsdtest/complexType',invalid),
STResList163 = [STRes162|STResList162],
- ?line {STRes163,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB115.xsd','./msxsdtest/complexType',invalid),
+ {STRes163,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB115.xsd','./msxsdtest/complexType',invalid),
STResList164 = [STRes163|STResList163],
- ?line {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB116.xsd','./msxsdtest/complexType',invalid),
+ {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB116.xsd','./msxsdtest/complexType',invalid),
STResList165 = [STRes164|STResList164],
- ?line {STRes165,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB117.xsd','./msxsdtest/complexType',invalid),
+ {STRes165,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB117.xsd','./msxsdtest/complexType',invalid),
STResList166 = [STRes165|STResList165],
- ?line {STRes166,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB118.xsd','./msxsdtest/complexType',invalid),
+ {STRes166,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB118.xsd','./msxsdtest/complexType',invalid),
STResList167 = [STRes166|STResList166],
- ?line {STRes167,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB119.xsd','./msxsdtest/complexType',invalid),
+ {STRes167,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB119.xsd','./msxsdtest/complexType',invalid),
STResList168 = [STRes167|STResList167],
- ?line {STRes168,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB120.xsd','./msxsdtest/complexType',invalid),
+ {STRes168,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB120.xsd','./msxsdtest/complexType',invalid),
STResList169 = [STRes168|STResList168],
- ?line {STRes169,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB121.xsd','./msxsdtest/complexType',invalid),
+ {STRes169,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB121.xsd','./msxsdtest/complexType',invalid),
STResList170 = [STRes169|STResList169],
- ?line {STRes170,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB122.xsd','./msxsdtest/complexType',invalid),
+ {STRes170,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB122.xsd','./msxsdtest/complexType',invalid),
STResList171 = [STRes170|STResList170],
- ?line {STRes171,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB123.xsd','./msxsdtest/complexType',invalid),
+ {STRes171,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB123.xsd','./msxsdtest/complexType',invalid),
STResList172 = [STRes171|STResList171],
- ?line {STRes172,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB124.xsd','./msxsdtest/complexType',invalid),
+ {STRes172,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB124.xsd','./msxsdtest/complexType',invalid),
STResList173 = [STRes172|STResList172],
- ?line {STRes173,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB125.xsd','./msxsdtest/complexType',invalid),
+ {STRes173,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctB125.xsd','./msxsdtest/complexType',invalid),
STResList174 = [STRes173|STResList173],
- ?line {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC001.xsd','./msxsdtest/complexType',valid),
+ {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC001.xsd','./msxsdtest/complexType',valid),
STResList175 = [STRes174|STResList174],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC001.xml','./msxsdtest/complexType',valid,S174),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC001.xml','./msxsdtest/complexType',valid,S174),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes175,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC002.xsd','./msxsdtest/complexType',invalid),
+ {STRes175,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC002.xsd','./msxsdtest/complexType',invalid),
STResList176 = [STRes175|STResList175],
- ?line {STRes176,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC003.xsd','./msxsdtest/complexType',invalid),
+ {STRes176,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC003.xsd','./msxsdtest/complexType',invalid),
STResList177 = [STRes176|STResList176],
- ?line {STRes177,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC004.xsd','./msxsdtest/complexType',invalid),
+ {STRes177,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC004.xsd','./msxsdtest/complexType',invalid),
STResList178 = [STRes177|STResList177],
- ?line {STRes178,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC005.xsd','./msxsdtest/complexType',invalid),
+ {STRes178,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC005.xsd','./msxsdtest/complexType',invalid),
STResList179 = [STRes178|STResList178],
- ?line {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC006.xsd','./msxsdtest/complexType',valid),
+ {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC006.xsd','./msxsdtest/complexType',valid),
STResList180 = [STRes179|STResList179],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC006.xml','./msxsdtest/complexType',valid,S179),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC006.xml','./msxsdtest/complexType',valid,S179),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC007.xsd','./msxsdtest/complexType',valid),
+ {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC007.xsd','./msxsdtest/complexType',valid),
STResList181 = [STRes180|STResList180],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC007.xml','./msxsdtest/complexType',valid,S180),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC007.xml','./msxsdtest/complexType',valid,S180),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC008.xsd','./msxsdtest/complexType',valid),
+ {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC008.xsd','./msxsdtest/complexType',valid),
STResList182 = [STRes181|STResList181],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC008.xml','./msxsdtest/complexType',valid,S181),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC008.xml','./msxsdtest/complexType',valid,S181),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes182,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC009.xsd','./msxsdtest/complexType',invalid),
+ {STRes182,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC009.xsd','./msxsdtest/complexType',invalid),
STResList183 = [STRes182|STResList182],
- ?line {STRes183,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC010.xsd','./msxsdtest/complexType',invalid),
+ {STRes183,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC010.xsd','./msxsdtest/complexType',invalid),
STResList184 = [STRes183|STResList183],
- ?line {STRes184,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC011.xsd','./msxsdtest/complexType',invalid),
+ {STRes184,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC011.xsd','./msxsdtest/complexType',invalid),
STResList185 = [STRes184|STResList184],
- ?line {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC012.xsd','./msxsdtest/complexType',valid),
+ {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctC012.xsd','./msxsdtest/complexType',valid),
STResList186 = [STRes185|STResList185],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC012.xml','./msxsdtest/complexType',valid,S185),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctC012.xml','./msxsdtest/complexType',valid,S185),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes186,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD001.xsd','./msxsdtest/complexType',invalid),
+ {STRes186,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD001.xsd','./msxsdtest/complexType',invalid),
STResList187 = [STRes186|STResList186],
- ?line {STRes187,S187} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD002.xsd','./msxsdtest/complexType',valid),
+ {STRes187,S187} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD002.xsd','./msxsdtest/complexType',valid),
STResList188 = [STRes187|STResList187],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD002.xml','./msxsdtest/complexType',valid,S187),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD002.xml','./msxsdtest/complexType',valid,S187),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes188,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD003.xsd','./msxsdtest/complexType',invalid),
+ {STRes188,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD003.xsd','./msxsdtest/complexType',invalid),
STResList189 = [STRes188|STResList188],
- ?line {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD004.xsd','./msxsdtest/complexType',invalid),
+ {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD004.xsd','./msxsdtest/complexType',invalid),
STResList190 = [STRes189|STResList189],
- ?line {STRes190,S190} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD005.xsd','./msxsdtest/complexType',valid),
+ {STRes190,S190} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD005.xsd','./msxsdtest/complexType',valid),
STResList191 = [STRes190|STResList190],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD005.xml','./msxsdtest/complexType',valid,S190),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD005.xml','./msxsdtest/complexType',valid,S190),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes191,S191} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD006.xsd','./msxsdtest/complexType',valid),
+ {STRes191,S191} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD006.xsd','./msxsdtest/complexType',valid),
STResList192 = [STRes191|STResList191],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD006.xml','./msxsdtest/complexType',valid,S191),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD006.xml','./msxsdtest/complexType',valid,S191),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD007.xsd','./msxsdtest/complexType',invalid),
+ {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD007.xsd','./msxsdtest/complexType',invalid),
STResList193 = [STRes192|STResList192],
- ?line {STRes193,S193} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD008.xsd','./msxsdtest/complexType',valid),
+ {STRes193,S193} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD008.xsd','./msxsdtest/complexType',valid),
STResList194 = [STRes193|STResList193],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD008.xml','./msxsdtest/complexType',valid,S193),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD008.xml','./msxsdtest/complexType',valid,S193),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD009.xsd','./msxsdtest/complexType',invalid),
+ {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD009.xsd','./msxsdtest/complexType',invalid),
STResList195 = [STRes194|STResList194],
- ?line {STRes195,S195} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD010.xsd','./msxsdtest/complexType',valid),
+ {STRes195,S195} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD010.xsd','./msxsdtest/complexType',valid),
STResList196 = [STRes195|STResList195],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD010.xml','./msxsdtest/complexType',valid,S195),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD010.xml','./msxsdtest/complexType',valid,S195),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD011.xsd','./msxsdtest/complexType',invalid),
+ {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD011.xsd','./msxsdtest/complexType',invalid),
STResList197 = [STRes196|STResList196],
- ?line {STRes197,S197} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD012.xsd','./msxsdtest/complexType',valid),
+ {STRes197,S197} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD012.xsd','./msxsdtest/complexType',valid),
STResList198 = [STRes197|STResList197],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD012.xml','./msxsdtest/complexType',valid,S197),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD012.xml','./msxsdtest/complexType',valid,S197),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes198,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD013.xsd','./msxsdtest/complexType',invalid),
+ {STRes198,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD013.xsd','./msxsdtest/complexType',invalid),
STResList199 = [STRes198|STResList198],
- ?line {STRes199,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD014.xsd','./msxsdtest/complexType',invalid),
+ {STRes199,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD014.xsd','./msxsdtest/complexType',invalid),
STResList200 = [STRes199|STResList199],
- ?line {STRes200,S200} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD015.xsd','./msxsdtest/complexType',valid),
+ {STRes200,S200} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD015.xsd','./msxsdtest/complexType',valid),
STResList201 = [STRes200|STResList200],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD015.xml','./msxsdtest/complexType',valid,S200),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD015.xml','./msxsdtest/complexType',valid,S200),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes201,S201} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD016.xsd','./msxsdtest/complexType',valid),
+ {STRes201,S201} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD016.xsd','./msxsdtest/complexType',valid),
STResList202 = [STRes201|STResList201],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD016.xml','./msxsdtest/complexType',valid,S201),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD016.xml','./msxsdtest/complexType',valid,S201),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD017.xsd','./msxsdtest/complexType',valid),
+ {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD017.xsd','./msxsdtest/complexType',valid),
STResList203 = [STRes202|STResList202],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD017.xml','./msxsdtest/complexType',valid,S202),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD017.xml','./msxsdtest/complexType',valid,S202),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes203,S203} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD018.xsd','./msxsdtest/complexType',valid),
+ {STRes203,S203} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD018.xsd','./msxsdtest/complexType',valid),
STResList204 = [STRes203|STResList203],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD018.xml','./msxsdtest/complexType',valid,S203),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD018.xml','./msxsdtest/complexType',valid,S203),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes204,S204} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD019.xsd','./msxsdtest/complexType',valid),
+ {STRes204,S204} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD019.xsd','./msxsdtest/complexType',valid),
STResList205 = [STRes204|STResList204],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD019.xml','./msxsdtest/complexType',valid,S204),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD019.xml','./msxsdtest/complexType',valid,S204),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes205,S205} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD020.xsd','./msxsdtest/complexType',valid),
+ {STRes205,S205} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD020.xsd','./msxsdtest/complexType',valid),
STResList206 = [STRes205|STResList205],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD020.xml','./msxsdtest/complexType',valid,S205),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD020.xml','./msxsdtest/complexType',valid,S205),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes206,S206} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD021.xsd','./msxsdtest/complexType',valid),
+ {STRes206,S206} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD021.xsd','./msxsdtest/complexType',valid),
STResList207 = [STRes206|STResList206],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD021.xml','./msxsdtest/complexType',valid,S206),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD021.xml','./msxsdtest/complexType',valid,S206),
ITResList83 = [ITRes82|ITResList82],
- ?line {STRes207,S207} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD022.xsd','./msxsdtest/complexType',valid),
+ {STRes207,S207} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD022.xsd','./msxsdtest/complexType',valid),
STResList208 = [STRes207|STResList207],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD022.xml','./msxsdtest/complexType',valid,S207),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD022.xml','./msxsdtest/complexType',valid,S207),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes208,S208} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD023.xsd','./msxsdtest/complexType',valid),
+ {STRes208,S208} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD023.xsd','./msxsdtest/complexType',valid),
STResList209 = [STRes208|STResList208],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD023.xml','./msxsdtest/complexType',valid,S208),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD023.xml','./msxsdtest/complexType',valid,S208),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes209,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD024.xsd','./msxsdtest/complexType',invalid),
+ {STRes209,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD024.xsd','./msxsdtest/complexType',invalid),
STResList210 = [STRes209|STResList209],
- ?line {STRes210,S210} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD025.xsd','./msxsdtest/complexType',valid),
+ {STRes210,S210} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD025.xsd','./msxsdtest/complexType',valid),
STResList211 = [STRes210|STResList210],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD025.xml','./msxsdtest/complexType',valid,S210),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD025.xml','./msxsdtest/complexType',valid,S210),
ITResList86 = [ITRes85|ITResList85],
- ?line {STRes211,S211} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD026.xsd','./msxsdtest/complexType',valid),
+ {STRes211,S211} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD026.xsd','./msxsdtest/complexType',valid),
STResList212 = [STRes211|STResList211],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD026.xml','./msxsdtest/complexType',valid,S211),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD026.xml','./msxsdtest/complexType',valid,S211),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes212,S212} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD027.xsd','./msxsdtest/complexType',valid),
+ {STRes212,S212} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD027.xsd','./msxsdtest/complexType',valid),
STResList213 = [STRes212|STResList212],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD027.xml','./msxsdtest/complexType',valid,S212),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD027.xml','./msxsdtest/complexType',valid,S212),
ITResList88 = [ITRes87|ITResList87],
- ?line {STRes213,S213} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD028.xsd','./msxsdtest/complexType',valid),
+ {STRes213,S213} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD028.xsd','./msxsdtest/complexType',valid),
STResList214 = [STRes213|STResList213],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD028.xml','./msxsdtest/complexType',valid,S213),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD028.xml','./msxsdtest/complexType',valid,S213),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes214,S214} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD029.xsd','./msxsdtest/complexType',valid),
+ {STRes214,S214} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD029.xsd','./msxsdtest/complexType',valid),
STResList215 = [STRes214|STResList214],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD029.xml','./msxsdtest/complexType',valid,S214),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD029.xml','./msxsdtest/complexType',valid,S214),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes215,S215} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD030.xsd','./msxsdtest/complexType',valid),
+ {STRes215,S215} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD030.xsd','./msxsdtest/complexType',valid),
STResList216 = [STRes215|STResList215],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD030.xml','./msxsdtest/complexType',valid,S215),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD030.xml','./msxsdtest/complexType',valid,S215),
ITResList91 = [ITRes90|ITResList90],
- ?line {STRes216,S216} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD031.xsd','./msxsdtest/complexType',valid),
+ {STRes216,S216} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD031.xsd','./msxsdtest/complexType',valid),
STResList217 = [STRes216|STResList216],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD031.xml','./msxsdtest/complexType',valid,S216),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD031.xml','./msxsdtest/complexType',valid,S216),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes217,S217} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD032.xsd','./msxsdtest/complexType',valid),
+ {STRes217,S217} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD032.xsd','./msxsdtest/complexType',valid),
STResList218 = [STRes217|STResList217],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD032.xml','./msxsdtest/complexType',valid,S217),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD032.xml','./msxsdtest/complexType',valid,S217),
ITResList93 = [ITRes92|ITResList92],
- ?line {STRes218,S218} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD033.xsd','./msxsdtest/complexType',valid),
+ {STRes218,S218} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD033.xsd','./msxsdtest/complexType',valid),
STResList219 = [STRes218|STResList218],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD033.xml','./msxsdtest/complexType',valid,S218),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD033.xml','./msxsdtest/complexType',valid,S218),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes219,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD034.xsd','./msxsdtest/complexType',invalid),
+ {STRes219,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD034.xsd','./msxsdtest/complexType',invalid),
STResList220 = [STRes219|STResList219],
- ?line {STRes220,S220} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD035.xsd','./msxsdtest/complexType',valid),
+ {STRes220,S220} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD035.xsd','./msxsdtest/complexType',valid),
STResList221 = [STRes220|STResList220],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD035.xml','./msxsdtest/complexType',valid,S220),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctD035.xml','./msxsdtest/complexType',valid,S220),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes221,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD036.xsd','./msxsdtest/complexType',invalid),
+ {STRes221,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD036.xsd','./msxsdtest/complexType',invalid),
STResList222 = [STRes221|STResList221],
- ?line {STRes222,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD037.xsd','./msxsdtest/complexType',invalid),
+ {STRes222,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD037.xsd','./msxsdtest/complexType',invalid),
STResList223 = [STRes222|STResList222],
- ?line {STRes223,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD038.xsd','./msxsdtest/complexType',invalid),
+ {STRes223,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD038.xsd','./msxsdtest/complexType',invalid),
STResList224 = [STRes223|STResList223],
- ?line {STRes224,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD039.xsd','./msxsdtest/complexType',invalid),
+ {STRes224,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD039.xsd','./msxsdtest/complexType',invalid),
STResList225 = [STRes224|STResList224],
- ?line {STRes225,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD040.xsd','./msxsdtest/complexType',invalid),
+ {STRes225,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD040.xsd','./msxsdtest/complexType',invalid),
STResList226 = [STRes225|STResList225],
- ?line {STRes226,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD041.xsd','./msxsdtest/complexType',invalid),
+ {STRes226,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD041.xsd','./msxsdtest/complexType',invalid),
STResList227 = [STRes226|STResList226],
- ?line {STRes227,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD042.xsd','./msxsdtest/complexType',invalid),
+ {STRes227,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD042.xsd','./msxsdtest/complexType',invalid),
STResList228 = [STRes227|STResList227],
- ?line {STRes228,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD043.xsd','./msxsdtest/complexType',invalid),
+ {STRes228,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctD043.xsd','./msxsdtest/complexType',invalid),
STResList229 = [STRes228|STResList228],
- ?line {STRes229,S229} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE001.xsd','./msxsdtest/complexType',valid),
+ {STRes229,S229} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE001.xsd','./msxsdtest/complexType',valid),
STResList230 = [STRes229|STResList229],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE001.xml','./msxsdtest/complexType',valid,S229),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE001.xml','./msxsdtest/complexType',valid,S229),
ITResList96 = [ITRes95|ITResList95],
- ?line {STRes230,S230} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE002.xsd','./msxsdtest/complexType',valid),
+ {STRes230,S230} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE002.xsd','./msxsdtest/complexType',valid),
STResList231 = [STRes230|STResList230],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE002.xml','./msxsdtest/complexType',valid,S230),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE002.xml','./msxsdtest/complexType',valid,S230),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes231,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE003.xsd','./msxsdtest/complexType',invalid),
+ {STRes231,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE003.xsd','./msxsdtest/complexType',invalid),
STResList232 = [STRes231|STResList231],
- ?line {STRes232,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE004.xsd','./msxsdtest/complexType',invalid),
+ {STRes232,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE004.xsd','./msxsdtest/complexType',invalid),
STResList233 = [STRes232|STResList232],
- ?line {STRes233,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE005.xsd','./msxsdtest/complexType',invalid),
+ {STRes233,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE005.xsd','./msxsdtest/complexType',invalid),
STResList234 = [STRes233|STResList233],
- ?line {STRes234,S234} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE006.xsd','./msxsdtest/complexType',valid),
+ {STRes234,S234} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE006.xsd','./msxsdtest/complexType',valid),
STResList235 = [STRes234|STResList234],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE006.xml','./msxsdtest/complexType',valid,S234),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE006.xml','./msxsdtest/complexType',valid,S234),
ITResList98 = [ITRes97|ITResList97],
- ?line {STRes235,S235} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE007.xsd','./msxsdtest/complexType',valid),
+ {STRes235,S235} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE007.xsd','./msxsdtest/complexType',valid),
STResList236 = [STRes235|STResList235],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE007.xml','./msxsdtest/complexType',valid,S235),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE007.xml','./msxsdtest/complexType',valid,S235),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes236,S236} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE008.xsd','./msxsdtest/complexType',valid),
+ {STRes236,S236} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE008.xsd','./msxsdtest/complexType',valid),
STResList237 = [STRes236|STResList236],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE008.xml','./msxsdtest/complexType',valid,S236),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE008.xml','./msxsdtest/complexType',valid,S236),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes237,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE009.xsd','./msxsdtest/complexType',invalid),
+ {STRes237,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE009.xsd','./msxsdtest/complexType',invalid),
STResList238 = [STRes237|STResList237],
- ?line {STRes238,S238} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE010.xsd','./msxsdtest/complexType',valid),
+ {STRes238,S238} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE010.xsd','./msxsdtest/complexType',valid),
STResList239 = [STRes238|STResList238],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE010.xml','./msxsdtest/complexType',valid,S238),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE010.xml','./msxsdtest/complexType',valid,S238),
ITResList101 = [ITRes100|ITResList100],
- ?line {STRes239,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE011.xsd','./msxsdtest/complexType',invalid),
+ {STRes239,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE011.xsd','./msxsdtest/complexType',invalid),
STResList240 = [STRes239|STResList239],
- ?line {STRes240,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE012.xsd','./msxsdtest/complexType',invalid),
+ {STRes240,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE012.xsd','./msxsdtest/complexType',invalid),
STResList241 = [STRes240|STResList240],
- ?line {STRes241,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE013.xsd','./msxsdtest/complexType',invalid),
+ {STRes241,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE013.xsd','./msxsdtest/complexType',invalid),
STResList242 = [STRes241|STResList241],
- ?line {STRes242,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE014.xsd','./msxsdtest/complexType',invalid),
+ {STRes242,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE014.xsd','./msxsdtest/complexType',invalid),
STResList243 = [STRes242|STResList242],
- ?line {STRes243,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE015.xsd','./msxsdtest/complexType',invalid),
+ {STRes243,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE015.xsd','./msxsdtest/complexType',invalid),
STResList244 = [STRes243|STResList243],
- ?line {STRes244,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE016.xsd','./msxsdtest/complexType',invalid),
+ {STRes244,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE016.xsd','./msxsdtest/complexType',invalid),
STResList245 = [STRes244|STResList244],
- ?line {STRes245,S245} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE017.xsd','./msxsdtest/complexType',valid),
+ {STRes245,S245} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctE017.xsd','./msxsdtest/complexType',valid),
STResList246 = [STRes245|STResList245],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE017.xml','./msxsdtest/complexType',valid,S245),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctE017.xml','./msxsdtest/complexType',valid,S245),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes246,S246} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF001.xsd','./msxsdtest/complexType',valid),
+ {STRes246,S246} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF001.xsd','./msxsdtest/complexType',valid),
STResList247 = [STRes246|STResList246],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF001.xml','./msxsdtest/complexType',valid,S246),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF001.xml','./msxsdtest/complexType',valid,S246),
ITResList103 = [ITRes102|ITResList102],
- ?line {STRes247,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF002.xsd','./msxsdtest/complexType',invalid),
+ {STRes247,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF002.xsd','./msxsdtest/complexType',invalid),
STResList248 = [STRes247|STResList247],
- ?line {STRes248,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF003.xsd','./msxsdtest/complexType',invalid),
+ {STRes248,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF003.xsd','./msxsdtest/complexType',invalid),
STResList249 = [STRes248|STResList248],
- ?line {STRes249,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF004.xsd','./msxsdtest/complexType',invalid),
+ {STRes249,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF004.xsd','./msxsdtest/complexType',invalid),
STResList250 = [STRes249|STResList249],
- ?line {STRes250,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF005.xsd','./msxsdtest/complexType',invalid),
+ {STRes250,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF005.xsd','./msxsdtest/complexType',invalid),
STResList251 = [STRes250|STResList250],
- ?line {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF006.xsd','./msxsdtest/complexType',valid),
+ {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF006.xsd','./msxsdtest/complexType',valid),
STResList252 = [STRes251|STResList251],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF006.xml','./msxsdtest/complexType',valid,S251),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF006.xml','./msxsdtest/complexType',valid,S251),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF007.xsd','./msxsdtest/complexType',valid),
+ {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF007.xsd','./msxsdtest/complexType',valid),
STResList253 = [STRes252|STResList252],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF007.xml','./msxsdtest/complexType',valid,S252),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF007.xml','./msxsdtest/complexType',valid,S252),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes253,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF008.xsd','./msxsdtest/complexType',invalid),
+ {STRes253,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF008.xsd','./msxsdtest/complexType',invalid),
STResList254 = [STRes253|STResList253],
- ?line {STRes254,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF009.xsd','./msxsdtest/complexType',invalid),
+ {STRes254,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF009.xsd','./msxsdtest/complexType',invalid),
STResList255 = [STRes254|STResList254],
- ?line {STRes255,S255} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF010.xsd','./msxsdtest/complexType',valid),
+ {STRes255,S255} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF010.xsd','./msxsdtest/complexType',valid),
STResList256 = [STRes255|STResList255],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF010.xml','./msxsdtest/complexType',valid,S255),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF010.xml','./msxsdtest/complexType',valid,S255),
ITResList106 = [ITRes105|ITResList105],
- ?line {STRes256,S256} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF011.xsd','./msxsdtest/complexType',valid),
+ {STRes256,S256} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF011.xsd','./msxsdtest/complexType',valid),
STResList257 = [STRes256|STResList256],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF011.xml','./msxsdtest/complexType',valid,S256),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF011.xml','./msxsdtest/complexType',valid,S256),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes257,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF012.xsd','./msxsdtest/complexType',invalid),
+ {STRes257,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF012.xsd','./msxsdtest/complexType',invalid),
STResList258 = [STRes257|STResList257],
- ?line {STRes258,S258} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF013.xsd','./msxsdtest/complexType',valid),
+ {STRes258,S258} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF013.xsd','./msxsdtest/complexType',valid),
STResList259 = [STRes258|STResList258],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF013.xml','./msxsdtest/complexType',valid,S258),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF013.xml','./msxsdtest/complexType',valid,S258),
ITResList108 = [ITRes107|ITResList107],
- ?line {STRes259,S259} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF014.xsd','./msxsdtest/complexType',valid),
+ {STRes259,S259} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF014.xsd','./msxsdtest/complexType',valid),
STResList260 = [STRes259|STResList259],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF014.xml','./msxsdtest/complexType',valid,S259),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctF014.xml','./msxsdtest/complexType',valid,S259),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes260,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF015.xsd','./msxsdtest/complexType',invalid),
+ {STRes260,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF015.xsd','./msxsdtest/complexType',invalid),
STResList261 = [STRes260|STResList260],
- ?line {STRes261,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF016.xsd','./msxsdtest/complexType',invalid),
+ {STRes261,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF016.xsd','./msxsdtest/complexType',invalid),
STResList262 = [STRes261|STResList261],
- ?line {STRes262,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF017.xsd','./msxsdtest/complexType',invalid),
+ {STRes262,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctF017.xsd','./msxsdtest/complexType',invalid),
STResList263 = [STRes262|STResList262],
- ?line {STRes263,S263} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG001.xsd','./msxsdtest/complexType',valid),
+ {STRes263,S263} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG001.xsd','./msxsdtest/complexType',valid),
STResList264 = [STRes263|STResList263],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG001.xml','./msxsdtest/complexType',valid,S263),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG001.xml','./msxsdtest/complexType',valid,S263),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes264,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG002.xsd','./msxsdtest/complexType',invalid),
+ {STRes264,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG002.xsd','./msxsdtest/complexType',invalid),
STResList265 = [STRes264|STResList264],
- ?line {STRes265,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG003.xsd','./msxsdtest/complexType',invalid),
+ {STRes265,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG003.xsd','./msxsdtest/complexType',invalid),
STResList266 = [STRes265|STResList265],
- ?line {STRes266,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG004.xsd','./msxsdtest/complexType',invalid),
+ {STRes266,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG004.xsd','./msxsdtest/complexType',invalid),
STResList267 = [STRes266|STResList266],
- ?line {STRes267,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG005.xsd','./msxsdtest/complexType',invalid),
+ {STRes267,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG005.xsd','./msxsdtest/complexType',invalid),
STResList268 = [STRes267|STResList267],
- ?line {STRes268,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG006.xsd','./msxsdtest/complexType',invalid),
+ {STRes268,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG006.xsd','./msxsdtest/complexType',invalid),
STResList269 = [STRes268|STResList268],
- ?line {STRes269,S269} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG007.xsd','./msxsdtest/complexType',valid),
+ {STRes269,S269} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG007.xsd','./msxsdtest/complexType',valid),
STResList270 = [STRes269|STResList269],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG007.xml','./msxsdtest/complexType',valid,S269),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG007.xml','./msxsdtest/complexType',valid,S269),
ITResList111 = [ITRes110|ITResList110],
- ?line {STRes270,S270} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG008.xsd','./msxsdtest/complexType',valid),
+ {STRes270,S270} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG008.xsd','./msxsdtest/complexType',valid),
STResList271 = [STRes270|STResList270],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG008.xml','./msxsdtest/complexType',valid,S270),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG008.xml','./msxsdtest/complexType',valid,S270),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes271,S271} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG009.xsd','./msxsdtest/complexType',valid),
+ {STRes271,S271} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG009.xsd','./msxsdtest/complexType',valid),
STResList272 = [STRes271|STResList271],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG009.xml','./msxsdtest/complexType',valid,S271),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG009.xml','./msxsdtest/complexType',valid,S271),
ITResList113 = [ITRes112|ITResList112],
- ?line {STRes272,S272} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG010.xsd','./msxsdtest/complexType',valid),
+ {STRes272,S272} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG010.xsd','./msxsdtest/complexType',valid),
STResList273 = [STRes272|STResList272],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG010.xml','./msxsdtest/complexType',valid,S272),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG010.xml','./msxsdtest/complexType',valid,S272),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes273,S273} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG011.xsd','./msxsdtest/complexType',valid),
+ {STRes273,S273} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG011.xsd','./msxsdtest/complexType',valid),
STResList274 = [STRes273|STResList273],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG011.xml','./msxsdtest/complexType',valid,S273),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG011.xml','./msxsdtest/complexType',valid,S273),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes274,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG012.xsd','./msxsdtest/complexType',invalid),
+ {STRes274,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG012.xsd','./msxsdtest/complexType',invalid),
STResList275 = [STRes274|STResList274],
- ?line {STRes275,S275} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG013.xsd','./msxsdtest/complexType',valid),
+ {STRes275,S275} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG013.xsd','./msxsdtest/complexType',valid),
STResList276 = [STRes275|STResList275],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG013.xml','./msxsdtest/complexType',valid,S275),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG013.xml','./msxsdtest/complexType',valid,S275),
ITResList116 = [ITRes115|ITResList115],
- ?line {STRes276,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG014.xsd','./msxsdtest/complexType',invalid),
+ {STRes276,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG014.xsd','./msxsdtest/complexType',invalid),
STResList277 = [STRes276|STResList276],
- ?line {STRes277,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG015.xsd','./msxsdtest/complexType',invalid),
+ {STRes277,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG015.xsd','./msxsdtest/complexType',invalid),
STResList278 = [STRes277|STResList277],
- ?line {STRes278,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG016.xsd','./msxsdtest/complexType',invalid),
+ {STRes278,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG016.xsd','./msxsdtest/complexType',invalid),
STResList279 = [STRes278|STResList278],
- ?line {STRes279,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG017.xsd','./msxsdtest/complexType',invalid),
+ {STRes279,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG017.xsd','./msxsdtest/complexType',invalid),
STResList280 = [STRes279|STResList279],
- ?line {STRes280,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG018.xsd','./msxsdtest/complexType',invalid),
+ {STRes280,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG018.xsd','./msxsdtest/complexType',invalid),
STResList281 = [STRes280|STResList280],
- ?line {STRes281,S281} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG019.xsd','./msxsdtest/complexType',valid),
+ {STRes281,S281} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG019.xsd','./msxsdtest/complexType',valid),
STResList282 = [STRes281|STResList281],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG019.xml','./msxsdtest/complexType',valid,S281),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG019.xml','./msxsdtest/complexType',valid,S281),
ITResList117 = [ITRes116|ITResList116],
- ?line {STRes282,S282} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG020.xsd','./msxsdtest/complexType',valid),
+ {STRes282,S282} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG020.xsd','./msxsdtest/complexType',valid),
STResList283 = [STRes282|STResList282],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG020.xml','./msxsdtest/complexType',valid,S282),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG020.xml','./msxsdtest/complexType',valid,S282),
ITResList118 = [ITRes117|ITResList117],
- ?line {STRes283,S283} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG021.xsd','./msxsdtest/complexType',valid),
+ {STRes283,S283} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG021.xsd','./msxsdtest/complexType',valid),
STResList284 = [STRes283|STResList283],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG021.xml','./msxsdtest/complexType',valid,S283),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG021.xml','./msxsdtest/complexType',valid,S283),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes284,S284} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG022.xsd','./msxsdtest/complexType',valid),
+ {STRes284,S284} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG022.xsd','./msxsdtest/complexType',valid),
STResList285 = [STRes284|STResList284],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG022.xml','./msxsdtest/complexType',valid,S284),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG022.xml','./msxsdtest/complexType',valid,S284),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes285,S285} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG023.xsd','./msxsdtest/complexType',valid),
+ {STRes285,S285} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG023.xsd','./msxsdtest/complexType',valid),
STResList286 = [STRes285|STResList285],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG023.xml','./msxsdtest/complexType',valid,S285),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG023.xml','./msxsdtest/complexType',valid,S285),
ITResList121 = [ITRes120|ITResList120],
- ?line {STRes286,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG024.xsd','./msxsdtest/complexType',invalid),
+ {STRes286,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG024.xsd','./msxsdtest/complexType',invalid),
STResList287 = [STRes286|STResList286],
- ?line {STRes287,S287} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG025.xsd','./msxsdtest/complexType',valid),
+ {STRes287,S287} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG025.xsd','./msxsdtest/complexType',valid),
STResList288 = [STRes287|STResList287],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG025.xml','./msxsdtest/complexType',valid,S287),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG025.xml','./msxsdtest/complexType',valid,S287),
ITResList122 = [ITRes121|ITResList121],
- ?line {STRes288,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG026.xsd','./msxsdtest/complexType',invalid),
+ {STRes288,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG026.xsd','./msxsdtest/complexType',invalid),
STResList289 = [STRes288|STResList288],
- ?line {STRes289,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG027.xsd','./msxsdtest/complexType',invalid),
+ {STRes289,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG027.xsd','./msxsdtest/complexType',invalid),
STResList290 = [STRes289|STResList289],
- ?line {STRes290,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG028.xsd','./msxsdtest/complexType',invalid),
+ {STRes290,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG028.xsd','./msxsdtest/complexType',invalid),
STResList291 = [STRes290|STResList290],
- ?line {STRes291,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG029.xsd','./msxsdtest/complexType',invalid),
+ {STRes291,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG029.xsd','./msxsdtest/complexType',invalid),
STResList292 = [STRes291|STResList291],
- ?line {STRes292,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG030.xsd','./msxsdtest/complexType',invalid),
+ {STRes292,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG030.xsd','./msxsdtest/complexType',invalid),
STResList293 = [STRes292|STResList292],
- ?line {STRes293,S293} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG031.xsd','./msxsdtest/complexType',valid),
+ {STRes293,S293} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG031.xsd','./msxsdtest/complexType',valid),
STResList294 = [STRes293|STResList293],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG031.xml','./msxsdtest/complexType',valid,S293),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG031.xml','./msxsdtest/complexType',valid,S293),
ITResList123 = [ITRes122|ITResList122],
- ?line {STRes294,S294} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG032.xsd','./msxsdtest/complexType',valid),
+ {STRes294,S294} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG032.xsd','./msxsdtest/complexType',valid),
STResList295 = [STRes294|STResList294],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG032.xml','./msxsdtest/complexType',valid,S294),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG032.xml','./msxsdtest/complexType',valid,S294),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes295,S295} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG033.xsd','./msxsdtest/complexType',valid),
+ {STRes295,S295} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG033.xsd','./msxsdtest/complexType',valid),
STResList296 = [STRes295|STResList295],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG033.xml','./msxsdtest/complexType',valid,S295),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG033.xml','./msxsdtest/complexType',valid,S295),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes296,S296} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG034.xsd','./msxsdtest/complexType',valid),
+ {STRes296,S296} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG034.xsd','./msxsdtest/complexType',valid),
STResList297 = [STRes296|STResList296],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG034.xml','./msxsdtest/complexType',valid,S296),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG034.xml','./msxsdtest/complexType',valid,S296),
ITResList126 = [ITRes125|ITResList125],
- ?line {STRes297,S297} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG035.xsd','./msxsdtest/complexType',valid),
+ {STRes297,S297} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG035.xsd','./msxsdtest/complexType',valid),
STResList298 = [STRes297|STResList297],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG035.xml','./msxsdtest/complexType',valid,S297),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG035.xml','./msxsdtest/complexType',valid,S297),
ITResList127 = [ITRes126|ITResList126],
- ?line {STRes298,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG036.xsd','./msxsdtest/complexType',invalid),
+ {STRes298,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG036.xsd','./msxsdtest/complexType',invalid),
STResList299 = [STRes298|STResList298],
- ?line {STRes299,S299} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG037.xsd','./msxsdtest/complexType',valid),
+ {STRes299,S299} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG037.xsd','./msxsdtest/complexType',valid),
STResList300 = [STRes299|STResList299],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG037.xml','./msxsdtest/complexType',valid,S299),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG037.xml','./msxsdtest/complexType',valid,S299),
ITResList128 = [ITRes127|ITResList127],
- ?line {STRes300,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG038.xsd','./msxsdtest/complexType',invalid),
+ {STRes300,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG038.xsd','./msxsdtest/complexType',invalid),
STResList301 = [STRes300|STResList300],
- ?line {STRes301,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG039.xsd','./msxsdtest/complexType',invalid),
+ {STRes301,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG039.xsd','./msxsdtest/complexType',invalid),
STResList302 = [STRes301|STResList301],
- ?line {STRes302,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG040.xsd','./msxsdtest/complexType',invalid),
+ {STRes302,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG040.xsd','./msxsdtest/complexType',invalid),
STResList303 = [STRes302|STResList302],
- ?line {STRes303,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG041.xsd','./msxsdtest/complexType',invalid),
+ {STRes303,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG041.xsd','./msxsdtest/complexType',invalid),
STResList304 = [STRes303|STResList303],
- ?line {STRes304,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG042.xsd','./msxsdtest/complexType',invalid),
+ {STRes304,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG042.xsd','./msxsdtest/complexType',invalid),
STResList305 = [STRes304|STResList304],
- ?line {STRes305,S305} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG043.xsd','./msxsdtest/complexType',valid),
+ {STRes305,S305} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG043.xsd','./msxsdtest/complexType',valid),
STResList306 = [STRes305|STResList305],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG043.xml','./msxsdtest/complexType',valid,S305),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG043.xml','./msxsdtest/complexType',valid,S305),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes306,S306} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG044.xsd','./msxsdtest/complexType',valid),
+ {STRes306,S306} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG044.xsd','./msxsdtest/complexType',valid),
STResList307 = [STRes306|STResList306],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG044.xml','./msxsdtest/complexType',valid,S306),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG044.xml','./msxsdtest/complexType',valid,S306),
ITResList130 = [ITRes129|ITResList129],
- ?line {STRes307,S307} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG045.xsd','./msxsdtest/complexType',valid),
+ {STRes307,S307} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG045.xsd','./msxsdtest/complexType',valid),
STResList308 = [STRes307|STResList307],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG045.xml','./msxsdtest/complexType',valid,S307),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG045.xml','./msxsdtest/complexType',valid,S307),
ITResList131 = [ITRes130|ITResList130],
- ?line {STRes308,S308} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG046.xsd','./msxsdtest/complexType',valid),
+ {STRes308,S308} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG046.xsd','./msxsdtest/complexType',valid),
STResList309 = [STRes308|STResList308],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG046.xml','./msxsdtest/complexType',valid,S308),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG046.xml','./msxsdtest/complexType',valid,S308),
ITResList132 = [ITRes131|ITResList131],
- ?line {STRes309,S309} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG047.xsd','./msxsdtest/complexType',valid),
+ {STRes309,S309} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG047.xsd','./msxsdtest/complexType',valid),
STResList310 = [STRes309|STResList309],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG047.xml','./msxsdtest/complexType',valid,S309),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG047.xml','./msxsdtest/complexType',valid,S309),
ITResList133 = [ITRes132|ITResList132],
- ?line {STRes310,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG048.xsd','./msxsdtest/complexType',invalid),
+ {STRes310,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG048.xsd','./msxsdtest/complexType',invalid),
STResList311 = [STRes310|STResList310],
- ?line {STRes311,S311} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG049.xsd','./msxsdtest/complexType',valid),
+ {STRes311,S311} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG049.xsd','./msxsdtest/complexType',valid),
STResList312 = [STRes311|STResList311],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG049.xml','./msxsdtest/complexType',valid,S311),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG049.xml','./msxsdtest/complexType',valid,S311),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes312,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG050.xsd','./msxsdtest/complexType',invalid),
+ {STRes312,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG050.xsd','./msxsdtest/complexType',invalid),
STResList313 = [STRes312|STResList312],
- ?line {STRes313,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG051.xsd','./msxsdtest/complexType',invalid),
+ {STRes313,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG051.xsd','./msxsdtest/complexType',invalid),
STResList314 = [STRes313|STResList313],
- ?line {STRes314,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG052.xsd','./msxsdtest/complexType',invalid),
+ {STRes314,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG052.xsd','./msxsdtest/complexType',invalid),
STResList315 = [STRes314|STResList314],
- ?line {STRes315,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG053.xsd','./msxsdtest/complexType',invalid),
+ {STRes315,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG053.xsd','./msxsdtest/complexType',invalid),
STResList316 = [STRes315|STResList315],
- ?line {STRes316,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG054.xsd','./msxsdtest/complexType',invalid),
+ {STRes316,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG054.xsd','./msxsdtest/complexType',invalid),
STResList317 = [STRes316|STResList316],
- ?line {STRes317,S317} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG055.xsd','./msxsdtest/complexType',valid),
+ {STRes317,S317} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG055.xsd','./msxsdtest/complexType',valid),
STResList318 = [STRes317|STResList317],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG055.xml','./msxsdtest/complexType',valid,S317),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG055.xml','./msxsdtest/complexType',valid,S317),
ITResList135 = [ITRes134|ITResList134],
- ?line {STRes318,S318} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG056.xsd','./msxsdtest/complexType',valid),
+ {STRes318,S318} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG056.xsd','./msxsdtest/complexType',valid),
STResList319 = [STRes318|STResList318],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG056.xml','./msxsdtest/complexType',valid,S318),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG056.xml','./msxsdtest/complexType',valid,S318),
ITResList136 = [ITRes135|ITResList135],
- ?line {STRes319,S319} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG057.xsd','./msxsdtest/complexType',valid),
+ {STRes319,S319} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG057.xsd','./msxsdtest/complexType',valid),
STResList320 = [STRes319|STResList319],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG057.xml','./msxsdtest/complexType',valid,S319),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG057.xml','./msxsdtest/complexType',valid,S319),
ITResList137 = [ITRes136|ITResList136],
- ?line {STRes320,S320} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG058.xsd','./msxsdtest/complexType',valid),
+ {STRes320,S320} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG058.xsd','./msxsdtest/complexType',valid),
STResList321 = [STRes320|STResList320],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG058.xml','./msxsdtest/complexType',valid,S320),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG058.xml','./msxsdtest/complexType',valid,S320),
ITResList138 = [ITRes137|ITResList137],
- ?line {STRes321,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG059.xsd','./msxsdtest/complexType',invalid),
+ {STRes321,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG059.xsd','./msxsdtest/complexType',invalid),
STResList322 = [STRes321|STResList321],
- ?line {STRes322,S322} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG060.xsd','./msxsdtest/complexType',valid),
+ {STRes322,S322} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG060.xsd','./msxsdtest/complexType',valid),
STResList323 = [STRes322|STResList322],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG060.xml','./msxsdtest/complexType',valid,S322),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG060.xml','./msxsdtest/complexType',valid,S322),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes323,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG061.xsd','./msxsdtest/complexType',invalid),
+ {STRes323,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG061.xsd','./msxsdtest/complexType',invalid),
STResList324 = [STRes323|STResList323],
- ?line {STRes324,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG062.xsd','./msxsdtest/complexType',invalid),
+ {STRes324,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG062.xsd','./msxsdtest/complexType',invalid),
STResList325 = [STRes324|STResList324],
- ?line {STRes325,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG063.xsd','./msxsdtest/complexType',invalid),
+ {STRes325,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG063.xsd','./msxsdtest/complexType',invalid),
STResList326 = [STRes325|STResList325],
- ?line {STRes326,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG064.xsd','./msxsdtest/complexType',invalid),
+ {STRes326,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG064.xsd','./msxsdtest/complexType',invalid),
STResList327 = [STRes326|STResList326],
- ?line {STRes327,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG065.xsd','./msxsdtest/complexType',invalid),
+ {STRes327,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG065.xsd','./msxsdtest/complexType',invalid),
STResList328 = [STRes327|STResList327],
- ?line {STRes328,S328} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG066.xsd','./msxsdtest/complexType',valid),
+ {STRes328,S328} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG066.xsd','./msxsdtest/complexType',valid),
STResList329 = [STRes328|STResList328],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG066.xml','./msxsdtest/complexType',valid,S328),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG066.xml','./msxsdtest/complexType',valid,S328),
ITResList140 = [ITRes139|ITResList139],
- ?line {STRes329,S329} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG067.xsd','./msxsdtest/complexType',valid),
+ {STRes329,S329} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG067.xsd','./msxsdtest/complexType',valid),
STResList330 = [STRes329|STResList329],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG067.xml','./msxsdtest/complexType',valid,S329),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG067.xml','./msxsdtest/complexType',valid,S329),
ITResList141 = [ITRes140|ITResList140],
- ?line {STRes330,S330} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG068.xsd','./msxsdtest/complexType',valid),
+ {STRes330,S330} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG068.xsd','./msxsdtest/complexType',valid),
STResList331 = [STRes330|STResList330],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG068.xml','./msxsdtest/complexType',valid,S330),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG068.xml','./msxsdtest/complexType',valid,S330),
ITResList142 = [ITRes141|ITResList141],
- ?line {STRes331,S331} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG069.xsd','./msxsdtest/complexType',valid),
+ {STRes331,S331} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG069.xsd','./msxsdtest/complexType',valid),
STResList332 = [STRes331|STResList331],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG069.xml','./msxsdtest/complexType',valid,S331),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG069.xml','./msxsdtest/complexType',valid,S331),
ITResList143 = [ITRes142|ITResList142],
- ?line {STRes332,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG070.xsd','./msxsdtest/complexType',invalid),
+ {STRes332,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG070.xsd','./msxsdtest/complexType',invalid),
STResList333 = [STRes332|STResList332],
- ?line {STRes333,S333} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG071.xsd','./msxsdtest/complexType',valid),
+ {STRes333,S333} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG071.xsd','./msxsdtest/complexType',valid),
STResList334 = [STRes333|STResList333],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG071.xml','./msxsdtest/complexType',valid,S333),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctG071.xml','./msxsdtest/complexType',valid,S333),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes334,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG072.xsd','./msxsdtest/complexType',invalid),
+ {STRes334,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG072.xsd','./msxsdtest/complexType',invalid),
STResList335 = [STRes334|STResList334],
- ?line {STRes335,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG073.xsd','./msxsdtest/complexType',invalid),
+ {STRes335,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG073.xsd','./msxsdtest/complexType',invalid),
STResList336 = [STRes335|STResList335],
- ?line {STRes336,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG074.xsd','./msxsdtest/complexType',invalid),
+ {STRes336,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG074.xsd','./msxsdtest/complexType',invalid),
STResList337 = [STRes336|STResList336],
- ?line {STRes337,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG075.xsd','./msxsdtest/complexType',invalid),
+ {STRes337,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG075.xsd','./msxsdtest/complexType',invalid),
STResList338 = [STRes337|STResList337],
- ?line {STRes338,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG076.xsd','./msxsdtest/complexType',invalid),
+ {STRes338,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG076.xsd','./msxsdtest/complexType',invalid),
STResList339 = [STRes338|STResList338],
- ?line {STRes339,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG077.xsd','./msxsdtest/complexType',invalid),
+ {STRes339,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG077.xsd','./msxsdtest/complexType',invalid),
STResList340 = [STRes339|STResList339],
- ?line {STRes340,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG078.xsd','./msxsdtest/complexType',invalid),
+ {STRes340,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG078.xsd','./msxsdtest/complexType',invalid),
STResList341 = [STRes340|STResList340],
- ?line {STRes341,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG079.xsd','./msxsdtest/complexType',invalid),
+ {STRes341,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG079.xsd','./msxsdtest/complexType',invalid),
STResList342 = [STRes341|STResList341],
- ?line {STRes342,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG080.xsd','./msxsdtest/complexType',invalid),
+ {STRes342,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG080.xsd','./msxsdtest/complexType',invalid),
STResList343 = [STRes342|STResList342],
- ?line {STRes343,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG081.xsd','./msxsdtest/complexType',invalid),
+ {STRes343,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctG081.xsd','./msxsdtest/complexType',invalid),
STResList344 = [STRes343|STResList343],
- ?line {STRes344,S344} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH001.xsd','./msxsdtest/complexType',valid),
+ {STRes344,S344} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH001.xsd','./msxsdtest/complexType',valid),
STResList345 = [STRes344|STResList344],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH001.xml','./msxsdtest/complexType',valid,S344),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH001.xml','./msxsdtest/complexType',valid,S344),
ITResList145 = [ITRes144|ITResList144],
- ?line {STRes345,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH002.xsd','./msxsdtest/complexType',invalid),
+ {STRes345,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH002.xsd','./msxsdtest/complexType',invalid),
STResList346 = [STRes345|STResList345],
- ?line {STRes346,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH003.xsd','./msxsdtest/complexType',invalid),
+ {STRes346,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH003.xsd','./msxsdtest/complexType',invalid),
STResList347 = [STRes346|STResList346],
- ?line {STRes347,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH004.xsd','./msxsdtest/complexType',invalid),
+ {STRes347,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH004.xsd','./msxsdtest/complexType',invalid),
STResList348 = [STRes347|STResList347],
- ?line {STRes348,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH005.xsd','./msxsdtest/complexType',invalid),
+ {STRes348,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH005.xsd','./msxsdtest/complexType',invalid),
STResList349 = [STRes348|STResList348],
- ?line {STRes349,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH006.xsd','./msxsdtest/complexType',invalid),
+ {STRes349,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH006.xsd','./msxsdtest/complexType',invalid),
STResList350 = [STRes349|STResList349],
- ?line {STRes350,S350} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH007.xsd','./msxsdtest/complexType',valid),
+ {STRes350,S350} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH007.xsd','./msxsdtest/complexType',valid),
STResList351 = [STRes350|STResList350],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH007.xml','./msxsdtest/complexType',valid,S350),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH007.xml','./msxsdtest/complexType',valid,S350),
ITResList146 = [ITRes145|ITResList145],
- ?line {STRes351,S351} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH008.xsd','./msxsdtest/complexType',valid),
+ {STRes351,S351} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH008.xsd','./msxsdtest/complexType',valid),
STResList352 = [STRes351|STResList351],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH008.xml','./msxsdtest/complexType',valid,S351),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH008.xml','./msxsdtest/complexType',valid,S351),
ITResList147 = [ITRes146|ITResList146],
- ?line {STRes352,S352} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH009.xsd','./msxsdtest/complexType',valid),
+ {STRes352,S352} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH009.xsd','./msxsdtest/complexType',valid),
STResList353 = [STRes352|STResList352],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH009.xml','./msxsdtest/complexType',valid,S352),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH009.xml','./msxsdtest/complexType',valid,S352),
ITResList148 = [ITRes147|ITResList147],
- ?line {STRes353,S353} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH010.xsd','./msxsdtest/complexType',valid),
+ {STRes353,S353} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH010.xsd','./msxsdtest/complexType',valid),
STResList354 = [STRes353|STResList353],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH010.xml','./msxsdtest/complexType',valid,S353),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH010.xml','./msxsdtest/complexType',valid,S353),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes354,S354} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH011.xsd','./msxsdtest/complexType',valid),
+ {STRes354,S354} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH011.xsd','./msxsdtest/complexType',valid),
STResList355 = [STRes354|STResList354],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH011.xml','./msxsdtest/complexType',valid,S354),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH011.xml','./msxsdtest/complexType',valid,S354),
ITResList150 = [ITRes149|ITResList149],
- ?line {STRes355,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH012.xsd','./msxsdtest/complexType',invalid),
+ {STRes355,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH012.xsd','./msxsdtest/complexType',invalid),
STResList356 = [STRes355|STResList355],
- ?line {STRes356,S356} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH013.xsd','./msxsdtest/complexType',valid),
+ {STRes356,S356} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH013.xsd','./msxsdtest/complexType',valid),
STResList357 = [STRes356|STResList356],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH013.xml','./msxsdtest/complexType',valid,S356),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH013.xml','./msxsdtest/complexType',valid,S356),
ITResList151 = [ITRes150|ITResList150],
- ?line {STRes357,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH014.xsd','./msxsdtest/complexType',invalid),
+ {STRes357,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH014.xsd','./msxsdtest/complexType',invalid),
STResList358 = [STRes357|STResList357],
- ?line {STRes358,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH015.xsd','./msxsdtest/complexType',invalid),
+ {STRes358,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH015.xsd','./msxsdtest/complexType',invalid),
STResList359 = [STRes358|STResList358],
- ?line {STRes359,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH016.xsd','./msxsdtest/complexType',invalid),
+ {STRes359,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH016.xsd','./msxsdtest/complexType',invalid),
STResList360 = [STRes359|STResList359],
- ?line {STRes360,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH017.xsd','./msxsdtest/complexType',invalid),
+ {STRes360,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH017.xsd','./msxsdtest/complexType',invalid),
STResList361 = [STRes360|STResList360],
- ?line {STRes361,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH018.xsd','./msxsdtest/complexType',invalid),
+ {STRes361,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH018.xsd','./msxsdtest/complexType',invalid),
STResList362 = [STRes361|STResList361],
- ?line {STRes362,S362} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH019.xsd','./msxsdtest/complexType',valid),
+ {STRes362,S362} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH019.xsd','./msxsdtest/complexType',valid),
STResList363 = [STRes362|STResList362],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH019.xml','./msxsdtest/complexType',valid,S362),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH019.xml','./msxsdtest/complexType',valid,S362),
ITResList152 = [ITRes151|ITResList151],
- ?line {STRes363,S363} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH020.xsd','./msxsdtest/complexType',valid),
+ {STRes363,S363} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH020.xsd','./msxsdtest/complexType',valid),
STResList364 = [STRes363|STResList363],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH020.xml','./msxsdtest/complexType',valid,S363),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH020.xml','./msxsdtest/complexType',valid,S363),
ITResList153 = [ITRes152|ITResList152],
- ?line {STRes364,S364} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH021.xsd','./msxsdtest/complexType',valid),
+ {STRes364,S364} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH021.xsd','./msxsdtest/complexType',valid),
STResList365 = [STRes364|STResList364],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH021.xml','./msxsdtest/complexType',valid,S364),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH021.xml','./msxsdtest/complexType',valid,S364),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes365,S365} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH022.xsd','./msxsdtest/complexType',valid),
+ {STRes365,S365} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH022.xsd','./msxsdtest/complexType',valid),
STResList366 = [STRes365|STResList365],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH022.xml','./msxsdtest/complexType',valid,S365),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH022.xml','./msxsdtest/complexType',valid,S365),
ITResList155 = [ITRes154|ITResList154],
- ?line {STRes366,S366} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH023.xsd','./msxsdtest/complexType',valid),
+ {STRes366,S366} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH023.xsd','./msxsdtest/complexType',valid),
STResList367 = [STRes366|STResList366],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH023.xml','./msxsdtest/complexType',valid,S366),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH023.xml','./msxsdtest/complexType',valid,S366),
ITResList156 = [ITRes155|ITResList155],
- ?line {STRes367,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH024.xsd','./msxsdtest/complexType',invalid),
+ {STRes367,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH024.xsd','./msxsdtest/complexType',invalid),
STResList368 = [STRes367|STResList367],
- ?line {STRes368,S368} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH025.xsd','./msxsdtest/complexType',valid),
+ {STRes368,S368} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH025.xsd','./msxsdtest/complexType',valid),
STResList369 = [STRes368|STResList368],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH025.xml','./msxsdtest/complexType',valid,S368),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH025.xml','./msxsdtest/complexType',valid,S368),
ITResList157 = [ITRes156|ITResList156],
- ?line {STRes369,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH026.xsd','./msxsdtest/complexType',invalid),
+ {STRes369,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH026.xsd','./msxsdtest/complexType',invalid),
STResList370 = [STRes369|STResList369],
- ?line {STRes370,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH027.xsd','./msxsdtest/complexType',invalid),
+ {STRes370,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH027.xsd','./msxsdtest/complexType',invalid),
STResList371 = [STRes370|STResList370],
- ?line {STRes371,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH028.xsd','./msxsdtest/complexType',invalid),
+ {STRes371,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH028.xsd','./msxsdtest/complexType',invalid),
STResList372 = [STRes371|STResList371],
- ?line {STRes372,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH029.xsd','./msxsdtest/complexType',invalid),
+ {STRes372,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH029.xsd','./msxsdtest/complexType',invalid),
STResList373 = [STRes372|STResList372],
- ?line {STRes373,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH030.xsd','./msxsdtest/complexType',invalid),
+ {STRes373,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH030.xsd','./msxsdtest/complexType',invalid),
STResList374 = [STRes373|STResList373],
- ?line {STRes374,S374} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH031.xsd','./msxsdtest/complexType',valid),
+ {STRes374,S374} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH031.xsd','./msxsdtest/complexType',valid),
STResList375 = [STRes374|STResList374],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH031.xml','./msxsdtest/complexType',valid,S374),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH031.xml','./msxsdtest/complexType',valid,S374),
ITResList158 = [ITRes157|ITResList157],
- ?line {STRes375,S375} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH032.xsd','./msxsdtest/complexType',valid),
+ {STRes375,S375} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH032.xsd','./msxsdtest/complexType',valid),
STResList376 = [STRes375|STResList375],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH032.xml','./msxsdtest/complexType',valid,S375),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH032.xml','./msxsdtest/complexType',valid,S375),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes376,S376} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH033.xsd','./msxsdtest/complexType',valid),
+ {STRes376,S376} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH033.xsd','./msxsdtest/complexType',valid),
STResList377 = [STRes376|STResList376],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH033.xml','./msxsdtest/complexType',valid,S376),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH033.xml','./msxsdtest/complexType',valid,S376),
ITResList160 = [ITRes159|ITResList159],
- ?line {STRes377,S377} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH034.xsd','./msxsdtest/complexType',valid),
+ {STRes377,S377} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH034.xsd','./msxsdtest/complexType',valid),
STResList378 = [STRes377|STResList377],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH034.xml','./msxsdtest/complexType',valid,S377),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH034.xml','./msxsdtest/complexType',valid,S377),
ITResList161 = [ITRes160|ITResList160],
- ?line {STRes378,S378} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH035.xsd','./msxsdtest/complexType',valid),
+ {STRes378,S378} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH035.xsd','./msxsdtest/complexType',valid),
STResList379 = [STRes378|STResList378],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH035.xml','./msxsdtest/complexType',valid,S378),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH035.xml','./msxsdtest/complexType',valid,S378),
ITResList162 = [ITRes161|ITResList161],
- ?line {STRes379,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH036.xsd','./msxsdtest/complexType',invalid),
+ {STRes379,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH036.xsd','./msxsdtest/complexType',invalid),
STResList380 = [STRes379|STResList379],
- ?line {STRes380,S380} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH037.xsd','./msxsdtest/complexType',valid),
+ {STRes380,S380} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH037.xsd','./msxsdtest/complexType',valid),
STResList381 = [STRes380|STResList380],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH037.xml','./msxsdtest/complexType',valid,S380),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH037.xml','./msxsdtest/complexType',valid,S380),
ITResList163 = [ITRes162|ITResList162],
- ?line {STRes381,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH038.xsd','./msxsdtest/complexType',invalid),
+ {STRes381,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH038.xsd','./msxsdtest/complexType',invalid),
STResList382 = [STRes381|STResList381],
- ?line {STRes382,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH039.xsd','./msxsdtest/complexType',invalid),
+ {STRes382,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH039.xsd','./msxsdtest/complexType',invalid),
STResList383 = [STRes382|STResList382],
- ?line {STRes383,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH040.xsd','./msxsdtest/complexType',invalid),
+ {STRes383,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH040.xsd','./msxsdtest/complexType',invalid),
STResList384 = [STRes383|STResList383],
- ?line {STRes384,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH041.xsd','./msxsdtest/complexType',invalid),
+ {STRes384,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH041.xsd','./msxsdtest/complexType',invalid),
STResList385 = [STRes384|STResList384],
- ?line {STRes385,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH042.xsd','./msxsdtest/complexType',invalid),
+ {STRes385,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH042.xsd','./msxsdtest/complexType',invalid),
STResList386 = [STRes385|STResList385],
- ?line {STRes386,S386} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH043.xsd','./msxsdtest/complexType',valid),
+ {STRes386,S386} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH043.xsd','./msxsdtest/complexType',valid),
STResList387 = [STRes386|STResList386],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH043.xml','./msxsdtest/complexType',valid,S386),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH043.xml','./msxsdtest/complexType',valid,S386),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes387,S387} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH044.xsd','./msxsdtest/complexType',valid),
+ {STRes387,S387} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH044.xsd','./msxsdtest/complexType',valid),
STResList388 = [STRes387|STResList387],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH044.xml','./msxsdtest/complexType',valid,S387),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH044.xml','./msxsdtest/complexType',valid,S387),
ITResList165 = [ITRes164|ITResList164],
- ?line {STRes388,S388} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH045.xsd','./msxsdtest/complexType',valid),
+ {STRes388,S388} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH045.xsd','./msxsdtest/complexType',valid),
STResList389 = [STRes388|STResList388],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH045.xml','./msxsdtest/complexType',valid,S388),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH045.xml','./msxsdtest/complexType',valid,S388),
ITResList166 = [ITRes165|ITResList165],
- ?line {STRes389,S389} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH046.xsd','./msxsdtest/complexType',valid),
+ {STRes389,S389} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH046.xsd','./msxsdtest/complexType',valid),
STResList390 = [STRes389|STResList389],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH046.xml','./msxsdtest/complexType',valid,S389),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH046.xml','./msxsdtest/complexType',valid,S389),
ITResList167 = [ITRes166|ITResList166],
- ?line {STRes390,S390} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH047.xsd','./msxsdtest/complexType',valid),
+ {STRes390,S390} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH047.xsd','./msxsdtest/complexType',valid),
STResList391 = [STRes390|STResList390],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH047.xml','./msxsdtest/complexType',valid,S390),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH047.xml','./msxsdtest/complexType',valid,S390),
ITResList168 = [ITRes167|ITResList167],
- ?line {STRes391,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH048.xsd','./msxsdtest/complexType',invalid),
+ {STRes391,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH048.xsd','./msxsdtest/complexType',invalid),
STResList392 = [STRes391|STResList391],
- ?line {STRes392,S392} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH049.xsd','./msxsdtest/complexType',valid),
+ {STRes392,S392} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH049.xsd','./msxsdtest/complexType',valid),
STResList393 = [STRes392|STResList392],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH049.xml','./msxsdtest/complexType',valid,S392),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH049.xml','./msxsdtest/complexType',valid,S392),
ITResList169 = [ITRes168|ITResList168],
- ?line {STRes393,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH050.xsd','./msxsdtest/complexType',invalid),
+ {STRes393,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH050.xsd','./msxsdtest/complexType',invalid),
STResList394 = [STRes393|STResList393],
- ?line {STRes394,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH051.xsd','./msxsdtest/complexType',invalid),
+ {STRes394,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH051.xsd','./msxsdtest/complexType',invalid),
STResList395 = [STRes394|STResList394],
- ?line {STRes395,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH052.xsd','./msxsdtest/complexType',invalid),
+ {STRes395,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH052.xsd','./msxsdtest/complexType',invalid),
STResList396 = [STRes395|STResList395],
- ?line {STRes396,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH053.xsd','./msxsdtest/complexType',invalid),
+ {STRes396,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH053.xsd','./msxsdtest/complexType',invalid),
STResList397 = [STRes396|STResList396],
- ?line {STRes397,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH054.xsd','./msxsdtest/complexType',invalid),
+ {STRes397,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH054.xsd','./msxsdtest/complexType',invalid),
STResList398 = [STRes397|STResList397],
- ?line {STRes398,S398} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH055.xsd','./msxsdtest/complexType',valid),
+ {STRes398,S398} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH055.xsd','./msxsdtest/complexType',valid),
STResList399 = [STRes398|STResList398],
- ?line ITRes169 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH055.xml','./msxsdtest/complexType',valid,S398),
+ ITRes169 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH055.xml','./msxsdtest/complexType',valid,S398),
ITResList170 = [ITRes169|ITResList169],
- ?line {STRes399,S399} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH056.xsd','./msxsdtest/complexType',valid),
+ {STRes399,S399} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH056.xsd','./msxsdtest/complexType',valid),
STResList400 = [STRes399|STResList399],
- ?line ITRes170 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH056.xml','./msxsdtest/complexType',valid,S399),
+ ITRes170 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH056.xml','./msxsdtest/complexType',valid,S399),
ITResList171 = [ITRes170|ITResList170],
- ?line {STRes400,S400} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH057.xsd','./msxsdtest/complexType',valid),
+ {STRes400,S400} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH057.xsd','./msxsdtest/complexType',valid),
STResList401 = [STRes400|STResList400],
- ?line ITRes171 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH057.xml','./msxsdtest/complexType',valid,S400),
+ ITRes171 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH057.xml','./msxsdtest/complexType',valid,S400),
ITResList172 = [ITRes171|ITResList171],
- ?line {STRes401,S401} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH058.xsd','./msxsdtest/complexType',valid),
+ {STRes401,S401} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH058.xsd','./msxsdtest/complexType',valid),
STResList402 = [STRes401|STResList401],
- ?line ITRes172 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH058.xml','./msxsdtest/complexType',valid,S401),
+ ITRes172 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH058.xml','./msxsdtest/complexType',valid,S401),
ITResList173 = [ITRes172|ITResList172],
- ?line {STRes402,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH059.xsd','./msxsdtest/complexType',invalid),
+ {STRes402,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH059.xsd','./msxsdtest/complexType',invalid),
STResList403 = [STRes402|STResList402],
- ?line {STRes403,S403} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH060.xsd','./msxsdtest/complexType',valid),
+ {STRes403,S403} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH060.xsd','./msxsdtest/complexType',valid),
STResList404 = [STRes403|STResList403],
- ?line ITRes173 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH060.xml','./msxsdtest/complexType',valid,S403),
+ ITRes173 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH060.xml','./msxsdtest/complexType',valid,S403),
ITResList174 = [ITRes173|ITResList173],
- ?line {STRes404,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH061.xsd','./msxsdtest/complexType',invalid),
+ {STRes404,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH061.xsd','./msxsdtest/complexType',invalid),
STResList405 = [STRes404|STResList404],
- ?line {STRes405,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH062.xsd','./msxsdtest/complexType',invalid),
+ {STRes405,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH062.xsd','./msxsdtest/complexType',invalid),
STResList406 = [STRes405|STResList405],
- ?line {STRes406,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH063.xsd','./msxsdtest/complexType',invalid),
+ {STRes406,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH063.xsd','./msxsdtest/complexType',invalid),
STResList407 = [STRes406|STResList406],
- ?line {STRes407,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH064.xsd','./msxsdtest/complexType',invalid),
+ {STRes407,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH064.xsd','./msxsdtest/complexType',invalid),
STResList408 = [STRes407|STResList407],
- ?line {STRes408,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH065.xsd','./msxsdtest/complexType',invalid),
+ {STRes408,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH065.xsd','./msxsdtest/complexType',invalid),
STResList409 = [STRes408|STResList408],
- ?line {STRes409,S409} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH066.xsd','./msxsdtest/complexType',valid),
+ {STRes409,S409} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH066.xsd','./msxsdtest/complexType',valid),
STResList410 = [STRes409|STResList409],
- ?line ITRes174 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH066.xml','./msxsdtest/complexType',valid,S409),
+ ITRes174 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH066.xml','./msxsdtest/complexType',valid,S409),
ITResList175 = [ITRes174|ITResList174],
- ?line {STRes410,S410} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH067.xsd','./msxsdtest/complexType',valid),
+ {STRes410,S410} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH067.xsd','./msxsdtest/complexType',valid),
STResList411 = [STRes410|STResList410],
- ?line ITRes175 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH067.xml','./msxsdtest/complexType',valid,S410),
+ ITRes175 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH067.xml','./msxsdtest/complexType',valid,S410),
ITResList176 = [ITRes175|ITResList175],
- ?line {STRes411,S411} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH068.xsd','./msxsdtest/complexType',valid),
+ {STRes411,S411} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH068.xsd','./msxsdtest/complexType',valid),
STResList412 = [STRes411|STResList411],
- ?line ITRes176 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH068.xml','./msxsdtest/complexType',valid,S411),
+ ITRes176 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH068.xml','./msxsdtest/complexType',valid,S411),
ITResList177 = [ITRes176|ITResList176],
- ?line {STRes412,S412} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH069.xsd','./msxsdtest/complexType',valid),
+ {STRes412,S412} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH069.xsd','./msxsdtest/complexType',valid),
STResList413 = [STRes412|STResList412],
- ?line ITRes177 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH069.xml','./msxsdtest/complexType',valid,S412),
+ ITRes177 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH069.xml','./msxsdtest/complexType',valid,S412),
ITResList178 = [ITRes177|ITResList177],
- ?line {STRes413,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH070.xsd','./msxsdtest/complexType',invalid),
+ {STRes413,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH070.xsd','./msxsdtest/complexType',invalid),
STResList414 = [STRes413|STResList413],
- ?line {STRes414,S414} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH071.xsd','./msxsdtest/complexType',valid),
+ {STRes414,S414} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH071.xsd','./msxsdtest/complexType',valid),
STResList415 = [STRes414|STResList414],
- ?line ITRes178 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH071.xml','./msxsdtest/complexType',valid,S414),
+ ITRes178 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH071.xml','./msxsdtest/complexType',valid,S414),
ITResList179 = [ITRes178|ITResList178],
- ?line {STRes415,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH072.xsd','./msxsdtest/complexType',invalid),
+ {STRes415,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH072.xsd','./msxsdtest/complexType',invalid),
STResList416 = [STRes415|STResList415],
- ?line {STRes416,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH073.xsd','./msxsdtest/complexType',invalid),
+ {STRes416,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH073.xsd','./msxsdtest/complexType',invalid),
STResList417 = [STRes416|STResList416],
- ?line {STRes417,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH074.xsd','./msxsdtest/complexType',invalid),
+ {STRes417,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH074.xsd','./msxsdtest/complexType',invalid),
STResList418 = [STRes417|STResList417],
- ?line {STRes418,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH075.xsd','./msxsdtest/complexType',invalid),
+ {STRes418,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH075.xsd','./msxsdtest/complexType',invalid),
STResList419 = [STRes418|STResList418],
- ?line {STRes419,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH076.xsd','./msxsdtest/complexType',invalid),
+ {STRes419,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH076.xsd','./msxsdtest/complexType',invalid),
STResList420 = [STRes419|STResList419],
- ?line {STRes420,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH077.xsd','./msxsdtest/complexType',invalid),
+ {STRes420,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH077.xsd','./msxsdtest/complexType',invalid),
STResList421 = [STRes420|STResList420],
- ?line {STRes421,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH078.xsd','./msxsdtest/complexType',invalid),
+ {STRes421,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH078.xsd','./msxsdtest/complexType',invalid),
STResList422 = [STRes421|STResList421],
- ?line {STRes422,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH079.xsd','./msxsdtest/complexType',invalid),
+ {STRes422,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH079.xsd','./msxsdtest/complexType',invalid),
STResList423 = [STRes422|STResList422],
- ?line {STRes423,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH080.xsd','./msxsdtest/complexType',invalid),
+ {STRes423,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH080.xsd','./msxsdtest/complexType',invalid),
STResList424 = [STRes423|STResList423],
- ?line {STRes424,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH081.xsd','./msxsdtest/complexType',invalid),
+ {STRes424,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH081.xsd','./msxsdtest/complexType',invalid),
STResList425 = [STRes424|STResList424],
- ?line {STRes425,S425} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH082.xsd','./msxsdtest/complexType',valid),
+ {STRes425,S425} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctH082.xsd','./msxsdtest/complexType',valid),
STResList426 = [STRes425|STResList425],
- ?line ITRes179 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH082.xml','./msxsdtest/complexType',valid,S425),
+ ITRes179 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctH082.xml','./msxsdtest/complexType',valid,S425),
ITResList180 = [ITRes179|ITResList179],
- ?line {STRes426,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI001.xsd','./msxsdtest/complexType',invalid),
+ {STRes426,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI001.xsd','./msxsdtest/complexType',invalid),
STResList427 = [STRes426|STResList426],
- ?line {STRes427,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI002.xsd','./msxsdtest/complexType',invalid),
+ {STRes427,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI002.xsd','./msxsdtest/complexType',invalid),
STResList428 = [STRes427|STResList427],
- ?line {STRes428,S428} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI003.xsd','./msxsdtest/complexType',valid),
+ {STRes428,S428} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI003.xsd','./msxsdtest/complexType',valid),
STResList429 = [STRes428|STResList428],
- ?line ITRes180 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI003.xml','./msxsdtest/complexType',valid,S428),
+ ITRes180 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI003.xml','./msxsdtest/complexType',valid,S428),
ITResList181 = [ITRes180|ITResList180],
- ?line {STRes429,S429} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI004.xsd','./msxsdtest/complexType',valid),
+ {STRes429,S429} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI004.xsd','./msxsdtest/complexType',valid),
STResList430 = [STRes429|STResList429],
- ?line ITRes181 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI004.xml','./msxsdtest/complexType',valid,S429),
+ ITRes181 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI004.xml','./msxsdtest/complexType',valid,S429),
ITResList182 = [ITRes181|ITResList181],
- ?line {STRes430,S430} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI005.xsd','./msxsdtest/complexType',valid),
+ {STRes430,S430} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI005.xsd','./msxsdtest/complexType',valid),
STResList431 = [STRes430|STResList430],
- ?line ITRes182 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI005.xml','./msxsdtest/complexType',valid,S430),
+ ITRes182 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI005.xml','./msxsdtest/complexType',valid,S430),
ITResList183 = [ITRes182|ITResList182],
- ?line {STRes431,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI006.xsd','./msxsdtest/complexType',invalid),
+ {STRes431,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI006.xsd','./msxsdtest/complexType',invalid),
STResList432 = [STRes431|STResList431],
- ?line {STRes432,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI007.xsd','./msxsdtest/complexType',invalid),
+ {STRes432,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI007.xsd','./msxsdtest/complexType',invalid),
STResList433 = [STRes432|STResList432],
- ?line {STRes433,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI008.xsd','./msxsdtest/complexType',invalid),
+ {STRes433,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI008.xsd','./msxsdtest/complexType',invalid),
STResList434 = [STRes433|STResList433],
- ?line {STRes434,S434} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI009.xsd','./msxsdtest/complexType',valid),
+ {STRes434,S434} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI009.xsd','./msxsdtest/complexType',valid),
STResList435 = [STRes434|STResList434],
- ?line ITRes183 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI009.xml','./msxsdtest/complexType',valid,S434),
+ ITRes183 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI009.xml','./msxsdtest/complexType',valid,S434),
ITResList184 = [ITRes183|ITResList183],
- ?line {STRes435,S435} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI010.xsd','./msxsdtest/complexType',valid),
+ {STRes435,S435} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI010.xsd','./msxsdtest/complexType',valid),
STResList436 = [STRes435|STResList435],
- ?line ITRes184 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI010.xml','./msxsdtest/complexType',valid,S435),
+ ITRes184 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI010.xml','./msxsdtest/complexType',valid,S435),
ITResList185 = [ITRes184|ITResList184],
- ?line {STRes436,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI011.xsd','./msxsdtest/complexType',invalid),
+ {STRes436,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI011.xsd','./msxsdtest/complexType',invalid),
STResList437 = [STRes436|STResList436],
- ?line {STRes437,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI012.xsd','./msxsdtest/complexType',invalid),
+ {STRes437,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI012.xsd','./msxsdtest/complexType',invalid),
STResList438 = [STRes437|STResList437],
- ?line {STRes438,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI013.xsd','./msxsdtest/complexType',invalid),
+ {STRes438,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI013.xsd','./msxsdtest/complexType',invalid),
STResList439 = [STRes438|STResList438],
- ?line {STRes439,S439} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI014.xsd','./msxsdtest/complexType',valid),
+ {STRes439,S439} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI014.xsd','./msxsdtest/complexType',valid),
STResList440 = [STRes439|STResList439],
- ?line ITRes185 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI014.xml','./msxsdtest/complexType',valid,S439),
+ ITRes185 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI014.xml','./msxsdtest/complexType',valid,S439),
ITResList186 = [ITRes185|ITResList185],
- ?line {STRes440,S440} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI015.xsd','./msxsdtest/complexType',valid),
+ {STRes440,S440} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI015.xsd','./msxsdtest/complexType',valid),
STResList441 = [STRes440|STResList440],
- ?line ITRes186 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI015.xml','./msxsdtest/complexType',valid,S440),
+ ITRes186 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI015.xml','./msxsdtest/complexType',valid,S440),
ITResList187 = [ITRes186|ITResList186],
- ?line {STRes441,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI016.xsd','./msxsdtest/complexType',invalid),
+ {STRes441,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI016.xsd','./msxsdtest/complexType',invalid),
STResList442 = [STRes441|STResList441],
- ?line {STRes442,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI017.xsd','./msxsdtest/complexType',invalid),
+ {STRes442,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI017.xsd','./msxsdtest/complexType',invalid),
STResList443 = [STRes442|STResList442],
- ?line {STRes443,S443} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI018.xsd','./msxsdtest/complexType',valid),
+ {STRes443,S443} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI018.xsd','./msxsdtest/complexType',valid),
STResList444 = [STRes443|STResList443],
- ?line ITRes187 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI018.xml','./msxsdtest/complexType',valid,S443),
+ ITRes187 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI018.xml','./msxsdtest/complexType',valid,S443),
ITResList188 = [ITRes187|ITResList187],
- ?line {STRes444,S444} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI019.xsd','./msxsdtest/complexType',valid),
+ {STRes444,S444} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI019.xsd','./msxsdtest/complexType',valid),
STResList445 = [STRes444|STResList444],
- ?line ITRes188 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI019.xml','./msxsdtest/complexType',valid,S444),
+ ITRes188 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI019.xml','./msxsdtest/complexType',valid,S444),
ITResList189 = [ITRes188|ITResList188],
- ?line {STRes445,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI020.xsd','./msxsdtest/complexType',invalid),
+ {STRes445,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI020.xsd','./msxsdtest/complexType',invalid),
STResList446 = [STRes445|STResList445],
- ?line {STRes446,S446} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI021.xsd','./msxsdtest/complexType',valid),
+ {STRes446,S446} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI021.xsd','./msxsdtest/complexType',valid),
STResList447 = [STRes446|STResList446],
- ?line ITRes189 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI021.xml','./msxsdtest/complexType',valid,S446),
+ ITRes189 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI021.xml','./msxsdtest/complexType',valid,S446),
ITResList190 = [ITRes189|ITResList189],
- ?line {STRes447,S447} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI022.xsd','./msxsdtest/complexType',valid),
+ {STRes447,S447} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI022.xsd','./msxsdtest/complexType',valid),
STResList448 = [STRes447|STResList447],
- ?line ITRes190 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI022.xml','./msxsdtest/complexType',valid,S447),
+ ITRes190 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI022.xml','./msxsdtest/complexType',valid,S447),
ITResList191 = [ITRes190|ITResList190],
- ?line {STRes448,S448} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI023.xsd','./msxsdtest/complexType',valid),
+ {STRes448,S448} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI023.xsd','./msxsdtest/complexType',valid),
STResList449 = [STRes448|STResList448],
- ?line ITRes191 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI023.xml','./msxsdtest/complexType',valid,S448),
+ ITRes191 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI023.xml','./msxsdtest/complexType',valid,S448),
ITResList192 = [ITRes191|ITResList191],
- ?line {STRes449,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI024.xsd','./msxsdtest/complexType',invalid),
+ {STRes449,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI024.xsd','./msxsdtest/complexType',invalid),
STResList450 = [STRes449|STResList449],
- ?line {STRes450,S450} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI025.xsd','./msxsdtest/complexType',valid),
+ {STRes450,S450} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI025.xsd','./msxsdtest/complexType',valid),
STResList451 = [STRes450|STResList450],
- ?line ITRes192 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI025.xml','./msxsdtest/complexType',valid,S450),
+ ITRes192 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI025.xml','./msxsdtest/complexType',valid,S450),
ITResList193 = [ITRes192|ITResList192],
- ?line {STRes451,S451} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI026.xsd','./msxsdtest/complexType',valid),
+ {STRes451,S451} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI026.xsd','./msxsdtest/complexType',valid),
STResList452 = [STRes451|STResList451],
- ?line ITRes193 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI026.xml','./msxsdtest/complexType',valid,S451),
+ ITRes193 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI026.xml','./msxsdtest/complexType',valid,S451),
ITResList194 = [ITRes193|ITResList193],
- ?line {STRes452,S452} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI027.xsd','./msxsdtest/complexType',valid),
+ {STRes452,S452} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI027.xsd','./msxsdtest/complexType',valid),
STResList453 = [STRes452|STResList452],
- ?line ITRes194 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI027.xml','./msxsdtest/complexType',valid,S452),
+ ITRes194 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI027.xml','./msxsdtest/complexType',valid,S452),
ITResList195 = [ITRes194|ITResList194],
- ?line {STRes453,S453} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI028.xsd','./msxsdtest/complexType',valid),
+ {STRes453,S453} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI028.xsd','./msxsdtest/complexType',valid),
STResList454 = [STRes453|STResList453],
- ?line ITRes195 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI028.xml','./msxsdtest/complexType',valid,S453),
+ ITRes195 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI028.xml','./msxsdtest/complexType',valid,S453),
ITResList196 = [ITRes195|ITResList195],
- ?line {STRes454,S454} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI029.xsd','./msxsdtest/complexType',valid),
+ {STRes454,S454} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI029.xsd','./msxsdtest/complexType',valid),
STResList455 = [STRes454|STResList454],
- ?line ITRes196 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI029.xml','./msxsdtest/complexType',valid,S454),
+ ITRes196 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI029.xml','./msxsdtest/complexType',valid,S454),
ITResList197 = [ITRes196|ITResList196],
- ?line {STRes455,S455} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI030.xsd','./msxsdtest/complexType',valid),
+ {STRes455,S455} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI030.xsd','./msxsdtest/complexType',valid),
STResList456 = [STRes455|STResList455],
- ?line ITRes197 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI030.xml','./msxsdtest/complexType',invalid,S455),
+ ITRes197 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI030.xml','./msxsdtest/complexType',invalid,S455),
ITResList198 = [ITRes197|ITResList197],
- ?line {STRes456,S456} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI031.xsd','./msxsdtest/complexType',valid),
+ {STRes456,S456} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI031.xsd','./msxsdtest/complexType',valid),
STResList457 = [STRes456|STResList456],
- ?line ITRes198 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI031.xml','./msxsdtest/complexType',invalid,S456),
+ ITRes198 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI031.xml','./msxsdtest/complexType',invalid,S456),
ITResList199 = [ITRes198|ITResList198],
- ?line {STRes457,S457} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI032.xsd','./msxsdtest/complexType',valid),
+ {STRes457,S457} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI032.xsd','./msxsdtest/complexType',valid),
STResList458 = [STRes457|STResList457],
- ?line ITRes199 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI032.xml','./msxsdtest/complexType',invalid,S457),
+ ITRes199 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI032.xml','./msxsdtest/complexType',invalid,S457),
ITResList200 = [ITRes199|ITResList199],
- ?line {STRes458,S458} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI033.xsd','./msxsdtest/complexType',valid),
+ {STRes458,S458} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI033.xsd','./msxsdtest/complexType',valid),
STResList459 = [STRes458|STResList458],
- ?line ITRes200 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI033.xml','./msxsdtest/complexType',valid,S458),
+ ITRes200 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI033.xml','./msxsdtest/complexType',valid,S458),
ITResList201 = [ITRes200|ITResList200],
- ?line {STRes459,S459} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI034.xsd','./msxsdtest/complexType',valid),
+ {STRes459,S459} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI034.xsd','./msxsdtest/complexType',valid),
STResList460 = [STRes459|STResList459],
- ?line ITRes201 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI034.xml','./msxsdtest/complexType',valid,S459),
+ ITRes201 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI034.xml','./msxsdtest/complexType',valid,S459),
ITResList202 = [ITRes201|ITResList201],
- ?line {STRes460,S460} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI035.xsd','./msxsdtest/complexType',valid),
+ {STRes460,S460} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI035.xsd','./msxsdtest/complexType',valid),
STResList461 = [STRes460|STResList460],
- ?line ITRes202 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI035.xml','./msxsdtest/complexType',invalid,S460),
+ ITRes202 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI035.xml','./msxsdtest/complexType',invalid,S460),
ITResList203 = [ITRes202|ITResList202],
- ?line {STRes461,S461} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI036.xsd','./msxsdtest/complexType',valid),
+ {STRes461,S461} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI036.xsd','./msxsdtest/complexType',valid),
STResList462 = [STRes461|STResList461],
- ?line ITRes203 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI036.xml','./msxsdtest/complexType',valid,S461),
+ ITRes203 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI036.xml','./msxsdtest/complexType',valid,S461),
ITResList204 = [ITRes203|ITResList203],
- ?line {STRes462,S462} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI037.xsd','./msxsdtest/complexType',valid),
+ {STRes462,S462} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI037.xsd','./msxsdtest/complexType',valid),
STResList463 = [STRes462|STResList462],
- ?line ITRes204 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI037.xml','./msxsdtest/complexType',valid,S462),
+ ITRes204 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI037.xml','./msxsdtest/complexType',valid,S462),
ITResList205 = [ITRes204|ITResList204],
- ?line {STRes463,S463} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI038.xsd','./msxsdtest/complexType',valid),
+ {STRes463,S463} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI038.xsd','./msxsdtest/complexType',valid),
STResList464 = [STRes463|STResList463],
- ?line ITRes205 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI038.xml','./msxsdtest/complexType',invalid,S463),
+ ITRes205 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI038.xml','./msxsdtest/complexType',invalid,S463),
ITResList206 = [ITRes205|ITResList205],
- ?line {STRes464,S464} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI039.xsd','./msxsdtest/complexType',valid),
+ {STRes464,S464} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI039.xsd','./msxsdtest/complexType',valid),
STResList465 = [STRes464|STResList464],
- ?line ITRes206 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI039.xml','./msxsdtest/complexType',invalid,S464),
+ ITRes206 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI039.xml','./msxsdtest/complexType',invalid,S464),
ITResList207 = [ITRes206|ITResList206],
- ?line {STRes465,S465} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI040.xsd','./msxsdtest/complexType',valid),
+ {STRes465,S465} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI040.xsd','./msxsdtest/complexType',valid),
STResList466 = [STRes465|STResList465],
- ?line ITRes207 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI040.xml','./msxsdtest/complexType',valid,S465),
+ ITRes207 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI040.xml','./msxsdtest/complexType',valid,S465),
ITResList208 = [ITRes207|ITResList207],
- ?line {STRes466,S466} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI041.xsd','./msxsdtest/complexType',valid),
+ {STRes466,S466} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI041.xsd','./msxsdtest/complexType',valid),
STResList467 = [STRes466|STResList466],
- ?line ITRes208 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI041.xml','./msxsdtest/complexType',valid,S466),
+ ITRes208 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI041.xml','./msxsdtest/complexType',valid,S466),
ITResList209 = [ITRes208|ITResList208],
- ?line {STRes467,S467} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI042.xsd','./msxsdtest/complexType',valid),
+ {STRes467,S467} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI042.xsd','./msxsdtest/complexType',valid),
STResList468 = [STRes467|STResList467],
- ?line ITRes209 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI042.xml','./msxsdtest/complexType',invalid,S467),
+ ITRes209 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI042.xml','./msxsdtest/complexType',invalid,S467),
ITResList210 = [ITRes209|ITResList209],
- ?line {STRes468,S468} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI043.xsd','./msxsdtest/complexType',valid),
+ {STRes468,S468} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI043.xsd','./msxsdtest/complexType',valid),
STResList469 = [STRes468|STResList468],
- ?line ITRes210 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI043.xml','./msxsdtest/complexType',valid,S468),
+ ITRes210 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI043.xml','./msxsdtest/complexType',valid,S468),
ITResList211 = [ITRes210|ITResList210],
- ?line {STRes469,S469} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI044.xsd','./msxsdtest/complexType',valid),
+ {STRes469,S469} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI044.xsd','./msxsdtest/complexType',valid),
STResList470 = [STRes469|STResList469],
- ?line ITRes211 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI044.xml','./msxsdtest/complexType',valid,S469),
+ ITRes211 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI044.xml','./msxsdtest/complexType',valid,S469),
ITResList212 = [ITRes211|ITResList211],
- ?line {STRes470,S470} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI045.xsd','./msxsdtest/complexType',valid),
+ {STRes470,S470} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI045.xsd','./msxsdtest/complexType',valid),
STResList471 = [STRes470|STResList470],
- ?line ITRes212 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI045.xml','./msxsdtest/complexType',invalid,S470),
+ ITRes212 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI045.xml','./msxsdtest/complexType',invalid,S470),
ITResList213 = [ITRes212|ITResList212],
- ?line {STRes471,S471} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI046.xsd','./msxsdtest/complexType',valid),
+ {STRes471,S471} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI046.xsd','./msxsdtest/complexType',valid),
STResList472 = [STRes471|STResList471],
- ?line ITRes213 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI046.xml','./msxsdtest/complexType',valid,S471),
+ ITRes213 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI046.xml','./msxsdtest/complexType',valid,S471),
ITResList214 = [ITRes213|ITResList213],
- ?line {STRes472,S472} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI047.xsd','./msxsdtest/complexType',valid),
+ {STRes472,S472} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI047.xsd','./msxsdtest/complexType',valid),
STResList473 = [STRes472|STResList472],
- ?line ITRes214 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI047.xml','./msxsdtest/complexType',valid,S472),
+ ITRes214 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI047.xml','./msxsdtest/complexType',valid,S472),
ITResList215 = [ITRes214|ITResList214],
- ?line {STRes473,S473} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI048.xsd','./msxsdtest/complexType',valid),
+ {STRes473,S473} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI048.xsd','./msxsdtest/complexType',valid),
STResList474 = [STRes473|STResList473],
- ?line ITRes215 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI048.xml','./msxsdtest/complexType',invalid,S473),
+ ITRes215 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI048.xml','./msxsdtest/complexType',invalid,S473),
ITResList216 = [ITRes215|ITResList215],
- ?line {STRes474,S474} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI049.xsd','./msxsdtest/complexType',valid),
+ {STRes474,S474} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI049.xsd','./msxsdtest/complexType',valid),
STResList475 = [STRes474|STResList474],
- ?line ITRes216 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI049.xml','./msxsdtest/complexType',invalid,S474),
+ ITRes216 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI049.xml','./msxsdtest/complexType',invalid,S474),
ITResList217 = [ITRes216|ITResList216],
- ?line {STRes475,S475} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI050.xsd','./msxsdtest/complexType',valid),
+ {STRes475,S475} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctI050.xsd','./msxsdtest/complexType',valid),
STResList476 = [STRes475|STResList475],
- ?line ITRes217 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI050.xml','./msxsdtest/complexType',valid,S475),
+ ITRes217 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctI050.xml','./msxsdtest/complexType',valid,S475),
ITResList218 = [ITRes217|ITResList217],
- ?line {STRes476,S476} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctJ001.xsd','./msxsdtest/complexType',valid),
+ {STRes476,S476} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctJ001.xsd','./msxsdtest/complexType',valid),
STResList477 = [STRes476|STResList476],
- ?line ITRes218 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctJ001.xml','./msxsdtest/complexType',valid,S476),
+ ITRes218 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctJ001.xml','./msxsdtest/complexType',valid,S476),
ITResList219 = [ITRes218|ITResList218],
- ?line {STRes477,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctJ002.xsd','./msxsdtest/complexType',invalid),
+ {STRes477,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctJ002.xsd','./msxsdtest/complexType',invalid),
STResList478 = [STRes477|STResList477],
- ?line {STRes478,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctJ003.xsd','./msxsdtest/complexType',invalid),
+ {STRes478,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctJ003.xsd','./msxsdtest/complexType',invalid),
STResList479 = [STRes478|STResList478],
- ?line {STRes479,S479} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctK001.xsd','./msxsdtest/complexType',valid),
+ {STRes479,S479} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctK001.xsd','./msxsdtest/complexType',valid),
STResList480 = [STRes479|STResList479],
- ?line ITRes219 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctK001.xml','./msxsdtest/complexType',valid,S479),
+ ITRes219 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctK001.xml','./msxsdtest/complexType',valid,S479),
ITResList220 = [ITRes219|ITResList219],
- ?line {STRes480,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctK002.xsd','./msxsdtest/complexType',invalid),
+ {STRes480,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctK002.xsd','./msxsdtest/complexType',invalid),
STResList481 = [STRes480|STResList480],
- ?line {STRes481,S481} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL001.xsd','./msxsdtest/complexType',valid),
+ {STRes481,S481} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL001.xsd','./msxsdtest/complexType',valid),
STResList482 = [STRes481|STResList481],
- ?line ITRes220 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL001.xml','./msxsdtest/complexType',invalid,S481),
+ ITRes220 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL001.xml','./msxsdtest/complexType',invalid,S481),
ITResList221 = [ITRes220|ITResList220],
- ?line {STRes482,S482} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL002.xsd','./msxsdtest/complexType',valid),
+ {STRes482,S482} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL002.xsd','./msxsdtest/complexType',valid),
STResList483 = [STRes482|STResList482],
- ?line ITRes221 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL002.xml','./msxsdtest/complexType',invalid,S482),
+ ITRes221 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL002.xml','./msxsdtest/complexType',invalid,S482),
ITResList222 = [ITRes221|ITResList221],
- ?line {STRes483,S483} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL003.xsd','./msxsdtest/complexType',valid),
+ {STRes483,S483} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL003.xsd','./msxsdtest/complexType',valid),
STResList484 = [STRes483|STResList483],
- ?line ITRes222 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL003.xml','./msxsdtest/complexType',valid,S483),
+ ITRes222 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL003.xml','./msxsdtest/complexType',valid,S483),
ITResList223 = [ITRes222|ITResList222],
- ?line {STRes484,S484} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL004.xsd','./msxsdtest/complexType',valid),
+ {STRes484,S484} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL004.xsd','./msxsdtest/complexType',valid),
STResList485 = [STRes484|STResList484],
- ?line ITRes223 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL004.xml','./msxsdtest/complexType',invalid,S484),
+ ITRes223 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL004.xml','./msxsdtest/complexType',invalid,S484),
ITResList224 = [ITRes223|ITResList223],
- ?line {STRes485,S485} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL005.xsd','./msxsdtest/complexType',valid),
+ {STRes485,S485} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL005.xsd','./msxsdtest/complexType',valid),
STResList486 = [STRes485|STResList485],
- ?line ITRes224 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL005.xml','./msxsdtest/complexType',valid,S485),
+ ITRes224 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL005.xml','./msxsdtest/complexType',valid,S485),
ITResList225 = [ITRes224|ITResList224],
- ?line {STRes486,S486} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL006.xsd','./msxsdtest/complexType',valid),
+ {STRes486,S486} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL006.xsd','./msxsdtest/complexType',valid),
STResList487 = [STRes486|STResList486],
- ?line ITRes225 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL006.xml','./msxsdtest/complexType',invalid,S486),
+ ITRes225 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL006.xml','./msxsdtest/complexType',invalid,S486),
ITResList226 = [ITRes225|ITResList225],
- ?line {STRes487,S487} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL007.xsd','./msxsdtest/complexType',valid),
+ {STRes487,S487} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL007.xsd','./msxsdtest/complexType',valid),
STResList488 = [STRes487|STResList487],
- ?line ITRes226 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL007.xml','./msxsdtest/complexType',valid,S487),
+ ITRes226 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL007.xml','./msxsdtest/complexType',valid,S487),
ITResList227 = [ITRes226|ITResList226],
- ?line {STRes488,S488} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL008.xsd','./msxsdtest/complexType',valid),
+ {STRes488,S488} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL008.xsd','./msxsdtest/complexType',valid),
STResList489 = [STRes488|STResList488],
- ?line ITRes227 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL008.xml','./msxsdtest/complexType',valid,S488),
+ ITRes227 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL008.xml','./msxsdtest/complexType',valid,S488),
ITResList228 = [ITRes227|ITResList227],
- ?line {STRes489,S489} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL009.xsd','./msxsdtest/complexType',valid),
+ {STRes489,S489} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL009.xsd','./msxsdtest/complexType',valid),
STResList490 = [STRes489|STResList489],
- ?line ITRes228 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL009.xml','./msxsdtest/complexType',invalid,S489),
+ ITRes228 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL009.xml','./msxsdtest/complexType',invalid,S489),
ITResList229 = [ITRes228|ITResList228],
- ?line {STRes490,S490} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL010.xsd','./msxsdtest/complexType',valid),
+ {STRes490,S490} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL010.xsd','./msxsdtest/complexType',valid),
STResList491 = [STRes490|STResList490],
- ?line ITRes229 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL010.xml','./msxsdtest/complexType',invalid,S490),
+ ITRes229 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL010.xml','./msxsdtest/complexType',invalid,S490),
ITResList230 = [ITRes229|ITResList229],
- ?line {STRes491,S491} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL011.xsd','./msxsdtest/complexType',valid),
+ {STRes491,S491} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL011.xsd','./msxsdtest/complexType',valid),
STResList492 = [STRes491|STResList491],
- ?line ITRes230 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL011.xml','./msxsdtest/complexType',valid,S491),
+ ITRes230 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL011.xml','./msxsdtest/complexType',valid,S491),
ITResList231 = [ITRes230|ITResList230],
- ?line {STRes492,S492} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL012.xsd','./msxsdtest/complexType',valid),
+ {STRes492,S492} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL012.xsd','./msxsdtest/complexType',valid),
STResList493 = [STRes492|STResList492],
- ?line ITRes231 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL012.xml','./msxsdtest/complexType',invalid,S492),
+ ITRes231 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL012.xml','./msxsdtest/complexType',invalid,S492),
ITResList232 = [ITRes231|ITResList231],
- ?line {STRes493,S493} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL013.xsd','./msxsdtest/complexType',valid),
+ {STRes493,S493} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL013.xsd','./msxsdtest/complexType',valid),
STResList494 = [STRes493|STResList493],
- ?line ITRes232 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL013.xml','./msxsdtest/complexType',invalid,S493),
+ ITRes232 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL013.xml','./msxsdtest/complexType',invalid,S493),
ITResList233 = [ITRes232|ITResList232],
- ?line {STRes494,S494} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL014.xsd','./msxsdtest/complexType',valid),
+ {STRes494,S494} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL014.xsd','./msxsdtest/complexType',valid),
STResList495 = [STRes494|STResList494],
- ?line ITRes233 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL014.xml','./msxsdtest/complexType',valid,S494),
+ ITRes233 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL014.xml','./msxsdtest/complexType',valid,S494),
ITResList234 = [ITRes233|ITResList233],
- ?line {STRes495,S495} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL015.xsd','./msxsdtest/complexType',valid),
+ {STRes495,S495} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL015.xsd','./msxsdtest/complexType',valid),
STResList496 = [STRes495|STResList495],
- ?line ITRes234 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL015.xml','./msxsdtest/complexType',valid,S495),
+ ITRes234 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL015.xml','./msxsdtest/complexType',valid,S495),
ITResList235 = [ITRes234|ITResList234],
- ?line {STRes496,S496} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL016.xsd','./msxsdtest/complexType',valid),
+ {STRes496,S496} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL016.xsd','./msxsdtest/complexType',valid),
STResList497 = [STRes496|STResList496],
- ?line ITRes235 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL016.xml','./msxsdtest/complexType',valid,S496),
+ ITRes235 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL016.xml','./msxsdtest/complexType',valid,S496),
ITResList236 = [ITRes235|ITResList235],
- ?line {STRes497,S497} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL017.xsd','./msxsdtest/complexType',valid),
+ {STRes497,S497} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL017.xsd','./msxsdtest/complexType',valid),
STResList498 = [STRes497|STResList497],
- ?line ITRes236 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL017.xml','./msxsdtest/complexType',valid,S497),
+ ITRes236 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL017.xml','./msxsdtest/complexType',valid,S497),
ITResList237 = [ITRes236|ITResList236],
- ?line {STRes498,S498} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL018.xsd','./msxsdtest/complexType',valid),
+ {STRes498,S498} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL018.xsd','./msxsdtest/complexType',valid),
STResList499 = [STRes498|STResList498],
- ?line ITRes237 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL018.xml','./msxsdtest/complexType',valid,S498),
+ ITRes237 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL018.xml','./msxsdtest/complexType',valid,S498),
ITResList238 = [ITRes237|ITResList237],
- ?line {STRes499,S499} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL019.xsd','./msxsdtest/complexType',valid),
+ {STRes499,S499} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL019.xsd','./msxsdtest/complexType',valid),
STResList500 = [STRes499|STResList499],
- ?line ITRes238 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL019.xml','./msxsdtest/complexType',valid,S499),
+ ITRes238 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL019.xml','./msxsdtest/complexType',valid,S499),
ITResList239 = [ITRes238|ITResList238],
- ?line {STRes500,S500} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL020.xsd','./msxsdtest/complexType',valid),
+ {STRes500,S500} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL020.xsd','./msxsdtest/complexType',valid),
STResList501 = [STRes500|STResList500],
- ?line ITRes239 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL020.xml','./msxsdtest/complexType',invalid,S500),
+ ITRes239 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL020.xml','./msxsdtest/complexType',invalid,S500),
ITResList240 = [ITRes239|ITResList239],
- ?line {STRes501,S501} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL021.xsd','./msxsdtest/complexType',valid),
+ {STRes501,S501} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctL021.xsd','./msxsdtest/complexType',valid),
STResList502 = [STRes501|STResList501],
- ?line ITRes240 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL021.xml','./msxsdtest/complexType',valid,S501),
+ ITRes240 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctL021.xml','./msxsdtest/complexType',valid,S501),
ITResList241 = [ITRes240|ITResList240],
- ?line {STRes502,S502} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/bug67200.xsd','./msxsdtest/complexType',valid),
+ {STRes502,S502} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/bug67200.xsd','./msxsdtest/complexType',valid),
STResList503 = [STRes502|STResList502],
- ?line ITRes241 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/bug67200.xml','./msxsdtest/complexType',valid,S502),
+ ITRes241 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/bug67200.xml','./msxsdtest/complexType',valid,S502),
ITResList242 = [ITRes241|ITResList241],
- ?line {STRes503,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctM001.xsd','./msxsdtest/complexType',invalid),
+ {STRes503,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctM001.xsd','./msxsdtest/complexType',invalid),
STResList504 = [STRes503|STResList503],
- ?line {STRes504,S504} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctM002.xsd','./msxsdtest/complexType',valid),
+ {STRes504,S504} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctM002.xsd','./msxsdtest/complexType',valid),
STResList505 = [STRes504|STResList504],
- ?line ITRes242 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctM002.xml','./msxsdtest/complexType',valid,S504),
+ ITRes242 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctM002.xml','./msxsdtest/complexType',valid,S504),
ITResList243 = [ITRes242|ITResList242],
- ?line {STRes505,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctM003.xsd','./msxsdtest/complexType',invalid),
+ {STRes505,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctM003.xsd','./msxsdtest/complexType',invalid),
STResList506 = [STRes505|STResList505],
- ?line {STRes506,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctM004.xsd','./msxsdtest/complexType',invalid),
+ {STRes506,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctM004.xsd','./msxsdtest/complexType',invalid),
STResList507 = [STRes506|STResList506],
- ?line {STRes507,S507} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctN001.xsd','./msxsdtest/complexType',valid),
+ {STRes507,S507} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctN001.xsd','./msxsdtest/complexType',valid),
STResList508 = [STRes507|STResList507],
- ?line ITRes243 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctN001.xml','./msxsdtest/complexType',valid,S507),
+ ITRes243 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctN001.xml','./msxsdtest/complexType',valid,S507),
ITResList244 = [ITRes243|ITResList243],
- ?line {STRes508,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctN002.xsd','./msxsdtest/complexType',invalid),
+ {STRes508,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctN002.xsd','./msxsdtest/complexType',invalid),
STResList509 = [STRes508|STResList508],
- ?line {STRes509,S509} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctN003.xsd','./msxsdtest/complexType',valid),
+ {STRes509,S509} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctN003.xsd','./msxsdtest/complexType',valid),
STResList510 = [STRes509|STResList509],
- ?line ITRes244 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctN003.xml','./msxsdtest/complexType',valid,S509),
+ ITRes244 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctN003.xml','./msxsdtest/complexType',valid,S509),
ITResList245 = [ITRes244|ITResList244],
- ?line {STRes510,S510} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctN004.xsd','./msxsdtest/complexType',valid),
+ {STRes510,S510} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctN004.xsd','./msxsdtest/complexType',valid),
STResList511 = [STRes510|STResList510],
- ?line ITRes245 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctN004.xml','./msxsdtest/complexType',valid,S510),
+ ITRes245 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctN004.xml','./msxsdtest/complexType',valid,S510),
ITResList246 = [ITRes245|ITResList245],
- ?line {STRes511,S511} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO001.xsd','./msxsdtest/complexType',valid),
+ {STRes511,S511} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO001.xsd','./msxsdtest/complexType',valid),
STResList512 = [STRes511|STResList511],
- ?line ITRes246 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctO001.xml','./msxsdtest/complexType',valid,S511),
+ ITRes246 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctO001.xml','./msxsdtest/complexType',valid,S511),
ITResList247 = [ITRes246|ITResList246],
- ?line {STRes512,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO002.xsd','./msxsdtest/complexType',invalid),
+ {STRes512,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO002.xsd','./msxsdtest/complexType',invalid),
STResList513 = [STRes512|STResList512],
- ?line {STRes513,S513} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO003.xsd','./msxsdtest/complexType',valid),
+ {STRes513,S513} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO003.xsd','./msxsdtest/complexType',valid),
STResList514 = [STRes513|STResList513],
- ?line ITRes247 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctO003.xml','./msxsdtest/complexType',valid,S513),
+ ITRes247 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctO003.xml','./msxsdtest/complexType',valid,S513),
ITResList248 = [ITRes247|ITResList247],
- ?line {STRes514,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO004.xsd','./msxsdtest/complexType',invalid),
+ {STRes514,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO004.xsd','./msxsdtest/complexType',invalid),
STResList515 = [STRes514|STResList514],
- ?line {STRes515,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO005.xsd','./msxsdtest/complexType',invalid),
+ {STRes515,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO005.xsd','./msxsdtest/complexType',invalid),
STResList516 = [STRes515|STResList515],
- ?line {STRes516,S516} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO006.xsd','./msxsdtest/complexType',valid),
+ {STRes516,S516} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO006.xsd','./msxsdtest/complexType',valid),
STResList517 = [STRes516|STResList516],
- ?line ITRes248 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctO006.xml','./msxsdtest/complexType',valid,S516),
+ ITRes248 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/complexType/ctO006.xml','./msxsdtest/complexType',valid,S516),
ITResList249 = [ITRes248|ITResList248],
- ?line {STRes517,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO007.xsd','./msxsdtest/complexType',invalid),
+ {STRes517,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/complexType/ctO007.xsd','./msxsdtest/complexType',invalid),
STResList518 = [STRes517|STResList517],
@@ -4411,1332 +4399,1332 @@ ct(Config) when is_list(Config) ->
elem(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA001.xsd','./msxsdtest/element',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA001.xsd','./msxsdtest/element',invalid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA002.xsd','./msxsdtest/element',valid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA002.xsd','./msxsdtest/element',valid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA003.xsd','./msxsdtest/element',valid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA003.xsd','./msxsdtest/element',valid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA004.xsd','./msxsdtest/element',valid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA004.xsd','./msxsdtest/element',valid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA005.xsd','./msxsdtest/element',valid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA005.xsd','./msxsdtest/element',valid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA006.xsd','./msxsdtest/element',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA006.xsd','./msxsdtest/element',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA007.xsd','./msxsdtest/element',valid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA007.xsd','./msxsdtest/element',valid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA009.xsd','./msxsdtest/element',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA009.xsd','./msxsdtest/element',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA010.xsd','./msxsdtest/element',invalid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA010.xsd','./msxsdtest/element',invalid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA011.xsd','./msxsdtest/element',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA011.xsd','./msxsdtest/element',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA012.xsd','./msxsdtest/element',invalid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA012.xsd','./msxsdtest/element',invalid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA013.xsd','./msxsdtest/element',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA013.xsd','./msxsdtest/element',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA014.xsd','./msxsdtest/element',invalid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA014.xsd','./msxsdtest/element',invalid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA015.xsd','./msxsdtest/element',valid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA015.xsd','./msxsdtest/element',valid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA016.xsd','./msxsdtest/element',valid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA016.xsd','./msxsdtest/element',valid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA017.xsd','./msxsdtest/element',valid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemA017.xsd','./msxsdtest/element',valid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB001.xsd','./msxsdtest/element',valid),
+ {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB001.xsd','./msxsdtest/element',valid),
STResList17 = [STRes16|STResList16],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB002.xsd','./msxsdtest/element',valid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB002.xsd','./msxsdtest/element',valid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB003.xsd','./msxsdtest/element',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB003.xsd','./msxsdtest/element',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB004.xsd','./msxsdtest/element',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB004.xsd','./msxsdtest/element',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB005.xsd','./msxsdtest/element',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB005.xsd','./msxsdtest/element',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB006.xsd','./msxsdtest/element',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB006.xsd','./msxsdtest/element',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB007.xsd','./msxsdtest/element',valid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB007.xsd','./msxsdtest/element',valid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB008.xsd','./msxsdtest/element',valid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB008.xsd','./msxsdtest/element',valid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB009.xsd','./msxsdtest/element',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB009.xsd','./msxsdtest/element',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB010.xsd','./msxsdtest/element',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemB010.xsd','./msxsdtest/element',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC001.xsd','./msxsdtest/element',valid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC001.xsd','./msxsdtest/element',valid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC002.xsd','./msxsdtest/element',valid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC002.xsd','./msxsdtest/element',valid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC003.xsd','./msxsdtest/element',valid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC003.xsd','./msxsdtest/element',valid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC004.xsd','./msxsdtest/element',valid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC004.xsd','./msxsdtest/element',valid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC005.xsd','./msxsdtest/element',valid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC005.xsd','./msxsdtest/element',valid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC006.xsd','./msxsdtest/element',valid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC006.xsd','./msxsdtest/element',valid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC007.xsd','./msxsdtest/element',valid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC007.xsd','./msxsdtest/element',valid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC008.xsd','./msxsdtest/element',valid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC008.xsd','./msxsdtest/element',valid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC009.xsd','./msxsdtest/element',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC009.xsd','./msxsdtest/element',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC010.xsd','./msxsdtest/element',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC010.xsd','./msxsdtest/element',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC011.xsd','./msxsdtest/element',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC011.xsd','./msxsdtest/element',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC012.xsd','./msxsdtest/element',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC012.xsd','./msxsdtest/element',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC013.xsd','./msxsdtest/element',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC013.xsd','./msxsdtest/element',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC014.xsd','./msxsdtest/element',invalid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC014.xsd','./msxsdtest/element',invalid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC015.xsd','./msxsdtest/element',invalid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC015.xsd','./msxsdtest/element',invalid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC016.xsd','./msxsdtest/element',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC016.xsd','./msxsdtest/element',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC017.xsd','./msxsdtest/element',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC017.xsd','./msxsdtest/element',invalid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC018.xsd','./msxsdtest/element',valid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC018.xsd','./msxsdtest/element',valid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC020.xsd','./msxsdtest/element',valid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemC020.xsd','./msxsdtest/element',valid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD001.xsd','./msxsdtest/element',valid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD001.xsd','./msxsdtest/element',valid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD002.xsd','./msxsdtest/element',valid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD002.xsd','./msxsdtest/element',valid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD003.xsd','./msxsdtest/element',invalid),
+ {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD003.xsd','./msxsdtest/element',invalid),
STResList48 = [STRes47|STResList47],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD004.xsd','./msxsdtest/element',invalid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD004.xsd','./msxsdtest/element',invalid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD005.xsd','./msxsdtest/element',invalid),
+ {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD005.xsd','./msxsdtest/element',invalid),
STResList50 = [STRes49|STResList49],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD006.xsd','./msxsdtest/element',valid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemD006.xsd','./msxsdtest/element',valid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE001.xsd','./msxsdtest/element',valid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE001.xsd','./msxsdtest/element',valid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE002.xsd','./msxsdtest/element',valid),
+ {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE002.xsd','./msxsdtest/element',valid),
STResList53 = [STRes52|STResList52],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE003.xsd','./msxsdtest/element',valid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE003.xsd','./msxsdtest/element',valid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE004.xsd','./msxsdtest/element',valid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE004.xsd','./msxsdtest/element',valid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE005.xsd','./msxsdtest/element',valid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE005.xsd','./msxsdtest/element',valid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE006.xsd','./msxsdtest/element',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE006.xsd','./msxsdtest/element',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE007.xsd','./msxsdtest/element',invalid),
+ {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE007.xsd','./msxsdtest/element',invalid),
STResList58 = [STRes57|STResList57],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE008.xsd','./msxsdtest/element',invalid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE008.xsd','./msxsdtest/element',invalid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE009.xsd','./msxsdtest/element',invalid),
+ {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemE009.xsd','./msxsdtest/element',invalid),
STResList60 = [STRes59|STResList59],
- ?line {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF001.xsd','./msxsdtest/element',valid),
+ {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF001.xsd','./msxsdtest/element',valid),
STResList61 = [STRes60|STResList60],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF002.xsd','./msxsdtest/element',valid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF002.xsd','./msxsdtest/element',valid),
STResList62 = [STRes61|STResList61],
- ?line {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF003.xsd','./msxsdtest/element',valid),
+ {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF003.xsd','./msxsdtest/element',valid),
STResList63 = [STRes62|STResList62],
- ?line {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF004.xsd','./msxsdtest/element',invalid),
+ {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF004.xsd','./msxsdtest/element',invalid),
STResList64 = [STRes63|STResList63],
- ?line {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF005.xsd','./msxsdtest/element',valid),
+ {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF005.xsd','./msxsdtest/element',valid),
STResList65 = [STRes64|STResList64],
- ?line {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF006.xsd','./msxsdtest/element',invalid),
+ {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF006.xsd','./msxsdtest/element',invalid),
STResList66 = [STRes65|STResList65],
- ?line {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF007.xsd','./msxsdtest/element',invalid),
+ {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF007.xsd','./msxsdtest/element',invalid),
STResList67 = [STRes66|STResList66],
- ?line {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF008.xsd','./msxsdtest/element',invalid),
+ {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF008.xsd','./msxsdtest/element',invalid),
STResList68 = [STRes67|STResList67],
- ?line {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF009.xsd','./msxsdtest/element',invalid),
+ {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF009.xsd','./msxsdtest/element',invalid),
STResList69 = [STRes68|STResList68],
- ?line {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF010.xsd','./msxsdtest/element',invalid),
+ {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF010.xsd','./msxsdtest/element',invalid),
STResList70 = [STRes69|STResList69],
- ?line {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF011.xsd','./msxsdtest/element',invalid),
+ {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF011.xsd','./msxsdtest/element',invalid),
STResList71 = [STRes70|STResList70],
- ?line {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF012.xsd','./msxsdtest/element',invalid),
+ {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF012.xsd','./msxsdtest/element',invalid),
STResList72 = [STRes71|STResList71],
- ?line {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF013.xsd','./msxsdtest/element',invalid),
+ {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF013.xsd','./msxsdtest/element',invalid),
STResList73 = [STRes72|STResList72],
- ?line {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF014.xsd','./msxsdtest/element',invalid),
+ {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF014.xsd','./msxsdtest/element',invalid),
STResList74 = [STRes73|STResList73],
- ?line {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF015.xsd','./msxsdtest/element',invalid),
+ {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF015.xsd','./msxsdtest/element',invalid),
STResList75 = [STRes74|STResList74],
- ?line {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF016.xsd','./msxsdtest/element',invalid),
+ {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF016.xsd','./msxsdtest/element',invalid),
STResList76 = [STRes75|STResList75],
- ?line {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF017.xsd','./msxsdtest/element',invalid),
+ {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF017.xsd','./msxsdtest/element',invalid),
STResList77 = [STRes76|STResList76],
- ?line {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF018.xsd','./msxsdtest/element',valid),
+ {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemF018.xsd','./msxsdtest/element',valid),
STResList78 = [STRes77|STResList77],
- ?line {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG001.xsd','./msxsdtest/element',valid),
+ {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG001.xsd','./msxsdtest/element',valid),
STResList79 = [STRes78|STResList78],
- ?line {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG002.xsd','./msxsdtest/element',valid),
+ {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG002.xsd','./msxsdtest/element',valid),
STResList80 = [STRes79|STResList79],
- ?line {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG003.xsd','./msxsdtest/element',invalid),
+ {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG003.xsd','./msxsdtest/element',invalid),
STResList81 = [STRes80|STResList80],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG004.xsd','./msxsdtest/element',invalid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG004.xsd','./msxsdtest/element',invalid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG005.xsd','./msxsdtest/element',valid),
+ {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemG005.xsd','./msxsdtest/element',valid),
STResList83 = [STRes82|STResList82],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH001.xsd','./msxsdtest/element',valid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH001.xsd','./msxsdtest/element',valid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH002.xsd','./msxsdtest/element',valid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH002.xsd','./msxsdtest/element',valid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH003.xsd','./msxsdtest/element',invalid),
+ {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH003.xsd','./msxsdtest/element',invalid),
STResList86 = [STRes85|STResList85],
- ?line {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH004.xsd','./msxsdtest/element',invalid),
+ {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH004.xsd','./msxsdtest/element',invalid),
STResList87 = [STRes86|STResList86],
- ?line {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH005.xsd','./msxsdtest/element',invalid),
+ {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH005.xsd','./msxsdtest/element',invalid),
STResList88 = [STRes87|STResList87],
- ?line {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH006.xsd','./msxsdtest/element',invalid),
+ {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemH006.xsd','./msxsdtest/element',invalid),
STResList89 = [STRes88|STResList88],
- ?line {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI001.xsd','./msxsdtest/element',valid),
+ {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI001.xsd','./msxsdtest/element',valid),
STResList90 = [STRes89|STResList89],
- ?line {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI002.xsd','./msxsdtest/element',valid),
+ {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI002.xsd','./msxsdtest/element',valid),
STResList91 = [STRes90|STResList90],
- ?line {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI003.xsd','./msxsdtest/element',invalid),
+ {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI003.xsd','./msxsdtest/element',invalid),
STResList92 = [STRes91|STResList91],
- ?line {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI004.xsd','./msxsdtest/element',invalid),
+ {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI004.xsd','./msxsdtest/element',invalid),
STResList93 = [STRes92|STResList92],
- ?line {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI005.xsd','./msxsdtest/element',invalid),
+ {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemI005.xsd','./msxsdtest/element',invalid),
STResList94 = [STRes93|STResList93],
- ?line {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ001.xsd','./msxsdtest/element',valid),
+ {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ001.xsd','./msxsdtest/element',valid),
STResList95 = [STRes94|STResList94],
- ?line {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ002.xsd','./msxsdtest/element',valid),
+ {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ002.xsd','./msxsdtest/element',valid),
STResList96 = [STRes95|STResList95],
- ?line {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ003.xsd','./msxsdtest/element',valid),
+ {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ003.xsd','./msxsdtest/element',valid),
STResList97 = [STRes96|STResList96],
- ?line {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ004.xsd','./msxsdtest/element',valid),
+ {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ004.xsd','./msxsdtest/element',valid),
STResList98 = [STRes97|STResList97],
- ?line {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ005.xsd','./msxsdtest/element',valid),
+ {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ005.xsd','./msxsdtest/element',valid),
STResList99 = [STRes98|STResList98],
- ?line {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ006.xsd','./msxsdtest/element',invalid),
+ {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ006.xsd','./msxsdtest/element',invalid),
STResList100 = [STRes99|STResList99],
- ?line {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ007.xsd','./msxsdtest/element',invalid),
+ {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ007.xsd','./msxsdtest/element',invalid),
STResList101 = [STRes100|STResList100],
- ?line {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ008.xsd','./msxsdtest/element',invalid),
+ {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ008.xsd','./msxsdtest/element',invalid),
STResList102 = [STRes101|STResList101],
- ?line {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ009.xsd','./msxsdtest/element',valid),
+ {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ009.xsd','./msxsdtest/element',valid),
STResList103 = [STRes102|STResList102],
- ?line {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ010.xsd','./msxsdtest/element',valid),
+ {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ010.xsd','./msxsdtest/element',valid),
STResList104 = [STRes103|STResList103],
- ?line {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ011.xsd','./msxsdtest/element',valid),
+ {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ011.xsd','./msxsdtest/element',valid),
STResList105 = [STRes104|STResList104],
- ?line {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ012.xsd','./msxsdtest/element',invalid),
+ {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ012.xsd','./msxsdtest/element',invalid),
STResList106 = [STRes105|STResList105],
- ?line {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ013.xsd','./msxsdtest/element',valid),
+ {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ013.xsd','./msxsdtest/element',valid),
STResList107 = [STRes106|STResList106],
- ?line {STRes107,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ014.xsd','./msxsdtest/element',invalid),
+ {STRes107,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ014.xsd','./msxsdtest/element',invalid),
STResList108 = [STRes107|STResList107],
- ?line {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ015.xsd','./msxsdtest/element',invalid),
+ {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ015.xsd','./msxsdtest/element',invalid),
STResList109 = [STRes108|STResList108],
- ?line {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ016.xsd','./msxsdtest/element',invalid),
+ {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ016.xsd','./msxsdtest/element',invalid),
STResList110 = [STRes109|STResList109],
- ?line {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ017.xsd','./msxsdtest/element',valid),
+ {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ017.xsd','./msxsdtest/element',valid),
STResList111 = [STRes110|STResList110],
- ?line {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ018.xsd','./msxsdtest/element',valid),
+ {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ018.xsd','./msxsdtest/element',valid),
STResList112 = [STRes111|STResList111],
- ?line {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ019.xsd','./msxsdtest/element',invalid),
+ {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ019.xsd','./msxsdtest/element',invalid),
STResList113 = [STRes112|STResList112],
- ?line {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ020.xsd','./msxsdtest/element',invalid),
+ {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ020.xsd','./msxsdtest/element',invalid),
STResList114 = [STRes113|STResList113],
- ?line {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ021.xsd','./msxsdtest/element',valid),
+ {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemJ021.xsd','./msxsdtest/element',valid),
STResList115 = [STRes114|STResList114],
- ?line {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK001.xsd','./msxsdtest/element',valid),
+ {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK001.xsd','./msxsdtest/element',valid),
STResList116 = [STRes115|STResList115],
- ?line {STRes116,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK002.xsd','./msxsdtest/element',valid),
+ {STRes116,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK002.xsd','./msxsdtest/element',valid),
STResList117 = [STRes116|STResList116],
- ?line {STRes117,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK003.xsd','./msxsdtest/element',invalid),
+ {STRes117,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK003.xsd','./msxsdtest/element',invalid),
STResList118 = [STRes117|STResList117],
- ?line {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK004.xsd','./msxsdtest/element',invalid),
+ {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK004.xsd','./msxsdtest/element',invalid),
STResList119 = [STRes118|STResList118],
- ?line {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK005.xsd','./msxsdtest/element',invalid),
+ {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK005.xsd','./msxsdtest/element',invalid),
STResList120 = [STRes119|STResList119],
- ?line {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK006.xsd','./msxsdtest/element',invalid),
+ {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK006.xsd','./msxsdtest/element',invalid),
STResList121 = [STRes120|STResList120],
- ?line {STRes121,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK007.xsd','./msxsdtest/element',invalid),
+ {STRes121,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemK007.xsd','./msxsdtest/element',invalid),
STResList122 = [STRes121|STResList121],
- ?line {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL001.xsd','./msxsdtest/element',valid),
+ {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL001.xsd','./msxsdtest/element',valid),
STResList123 = [STRes122|STResList122],
- ?line {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL002.xsd','./msxsdtest/element',invalid),
+ {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL002.xsd','./msxsdtest/element',invalid),
STResList124 = [STRes123|STResList123],
- ?line {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL003.xsd','./msxsdtest/element',invalid),
+ {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL003.xsd','./msxsdtest/element',invalid),
STResList125 = [STRes124|STResList124],
- ?line {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL004.xsd','./msxsdtest/element',valid),
+ {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL004.xsd','./msxsdtest/element',valid),
STResList126 = [STRes125|STResList125],
- ?line {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL005.xsd','./msxsdtest/element',valid),
+ {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemL005.xsd','./msxsdtest/element',valid),
STResList127 = [STRes126|STResList126],
- ?line {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM001.xsd','./msxsdtest/element',valid),
+ {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM001.xsd','./msxsdtest/element',valid),
STResList128 = [STRes127|STResList127],
- ?line {STRes128,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM002.xsd','./msxsdtest/element',invalid),
+ {STRes128,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM002.xsd','./msxsdtest/element',invalid),
STResList129 = [STRes128|STResList128],
- ?line {STRes129,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM003.xsd','./msxsdtest/element',invalid),
+ {STRes129,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM003.xsd','./msxsdtest/element',invalid),
STResList130 = [STRes129|STResList129],
- ?line {STRes130,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM004.xsd','./msxsdtest/element',valid),
+ {STRes130,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM004.xsd','./msxsdtest/element',valid),
STResList131 = [STRes130|STResList130],
- ?line {STRes131,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM005.xsd','./msxsdtest/element',invalid),
+ {STRes131,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemM005.xsd','./msxsdtest/element',invalid),
STResList132 = [STRes131|STResList131],
- ?line {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN001.xsd','./msxsdtest/element',valid),
+ {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN001.xsd','./msxsdtest/element',valid),
STResList133 = [STRes132|STResList132],
- ?line {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN002.xsd','./msxsdtest/element',valid),
+ {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN002.xsd','./msxsdtest/element',valid),
STResList134 = [STRes133|STResList133],
- ?line {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN003.xsd','./msxsdtest/element',valid),
+ {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN003.xsd','./msxsdtest/element',valid),
STResList135 = [STRes134|STResList134],
- ?line {STRes135,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN004.xsd','./msxsdtest/element',valid),
+ {STRes135,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN004.xsd','./msxsdtest/element',valid),
STResList136 = [STRes135|STResList135],
- ?line {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN005.xsd','./msxsdtest/element',valid),
+ {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN005.xsd','./msxsdtest/element',valid),
STResList137 = [STRes136|STResList136],
- ?line {STRes137,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN006.xsd','./msxsdtest/element',invalid),
+ {STRes137,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemN006.xsd','./msxsdtest/element',invalid),
STResList138 = [STRes137|STResList137],
- ?line {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO001.xsd','./msxsdtest/element',valid),
+ {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO001.xsd','./msxsdtest/element',valid),
STResList139 = [STRes138|STResList138],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO001.xml','./msxsdtest/element',invalid,S138),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO001.xml','./msxsdtest/element',invalid,S138),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO002.xsd','./msxsdtest/element',valid),
+ {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO002.xsd','./msxsdtest/element',valid),
STResList140 = [STRes139|STResList139],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO002.xml','./msxsdtest/element',valid,S139),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO002.xml','./msxsdtest/element',valid,S139),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO003.xsd','./msxsdtest/element',valid),
+ {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO003.xsd','./msxsdtest/element',valid),
STResList141 = [STRes140|STResList140],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO003.xml','./msxsdtest/element',valid,S140),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO003.xml','./msxsdtest/element',valid,S140),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO004.xsd','./msxsdtest/element',valid),
+ {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO004.xsd','./msxsdtest/element',valid),
STResList142 = [STRes141|STResList141],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO004.xml','./msxsdtest/element',valid,S141),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO004.xml','./msxsdtest/element',valid,S141),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO005.xsd','./msxsdtest/element',valid),
+ {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO005.xsd','./msxsdtest/element',valid),
STResList143 = [STRes142|STResList142],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO005.xml','./msxsdtest/element',valid,S142),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO005.xml','./msxsdtest/element',valid,S142),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO006.xsd','./msxsdtest/element',valid),
+ {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO006.xsd','./msxsdtest/element',valid),
STResList144 = [STRes143|STResList143],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO006.xml','./msxsdtest/element',valid,S143),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO006.xml','./msxsdtest/element',valid,S143),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO007.xsd','./msxsdtest/element',valid),
+ {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO007.xsd','./msxsdtest/element',valid),
STResList145 = [STRes144|STResList144],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO007.xml','./msxsdtest/element',invalid,S144),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO007.xml','./msxsdtest/element',invalid,S144),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO008.xsd','./msxsdtest/element',valid),
+ {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO008.xsd','./msxsdtest/element',valid),
STResList146 = [STRes145|STResList145],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO008.xml','./msxsdtest/element',valid,S145),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO008.xml','./msxsdtest/element',valid,S145),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO009.xsd','./msxsdtest/element',valid),
+ {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO009.xsd','./msxsdtest/element',valid),
STResList147 = [STRes146|STResList146],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO009.xml','./msxsdtest/element',valid,S146),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO009.xml','./msxsdtest/element',valid,S146),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO010.xsd','./msxsdtest/element',valid),
+ {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO010.xsd','./msxsdtest/element',valid),
STResList148 = [STRes147|STResList147],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO010.xml','./msxsdtest/element',invalid,S147),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO010.xml','./msxsdtest/element',invalid,S147),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO011.xsd','./msxsdtest/element',valid),
+ {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO011.xsd','./msxsdtest/element',valid),
STResList149 = [STRes148|STResList148],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO011.xml','./msxsdtest/element',invalid,S148),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO011.xml','./msxsdtest/element',invalid,S148),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO012.xsd','./msxsdtest/element',valid),
+ {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemO012.xsd','./msxsdtest/element',valid),
STResList150 = [STRes149|STResList149],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO012.xml','./msxsdtest/element',valid,S149),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemO012.xml','./msxsdtest/element',valid,S149),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes150,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP001.xsd','./msxsdtest/element',invalid),
+ {STRes150,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP001.xsd','./msxsdtest/element',invalid),
STResList151 = [STRes150|STResList150],
- ?line {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP002.xsd','./msxsdtest/element',invalid),
+ {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP002.xsd','./msxsdtest/element',invalid),
STResList152 = [STRes151|STResList151],
- ?line {STRes152,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP003.xsd','./msxsdtest/element',valid),
+ {STRes152,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP003.xsd','./msxsdtest/element',valid),
STResList153 = [STRes152|STResList152],
- ?line {STRes153,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP004.xsd','./msxsdtest/element',valid),
+ {STRes153,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP004.xsd','./msxsdtest/element',valid),
STResList154 = [STRes153|STResList153],
- ?line {STRes154,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP005.xsd','./msxsdtest/element',invalid),
+ {STRes154,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP005.xsd','./msxsdtest/element',invalid),
STResList155 = [STRes154|STResList154],
- ?line {STRes155,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP006.xsd','./msxsdtest/element',invalid),
+ {STRes155,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP006.xsd','./msxsdtest/element',invalid),
STResList156 = [STRes155|STResList155],
- ?line {STRes156,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP007.xsd','./msxsdtest/element',invalid),
+ {STRes156,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP007.xsd','./msxsdtest/element',invalid),
STResList157 = [STRes156|STResList156],
- ?line {STRes157,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP008.xsd','./msxsdtest/element',invalid),
+ {STRes157,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP008.xsd','./msxsdtest/element',invalid),
STResList158 = [STRes157|STResList157],
- ?line {STRes158,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP009.xsd','./msxsdtest/element',invalid),
+ {STRes158,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemP009.xsd','./msxsdtest/element',invalid),
STResList159 = [STRes158|STResList158],
- ?line {STRes159,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ001.xsd','./msxsdtest/element',valid),
+ {STRes159,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ001.xsd','./msxsdtest/element',valid),
STResList160 = [STRes159|STResList159],
- ?line {STRes160,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ002.xsd','./msxsdtest/element',valid),
+ {STRes160,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ002.xsd','./msxsdtest/element',valid),
STResList161 = [STRes160|STResList160],
- ?line {STRes161,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ003.xsd','./msxsdtest/element',valid),
+ {STRes161,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ003.xsd','./msxsdtest/element',valid),
STResList162 = [STRes161|STResList161],
- ?line {STRes162,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ004.xsd','./msxsdtest/element',invalid),
+ {STRes162,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ004.xsd','./msxsdtest/element',invalid),
STResList163 = [STRes162|STResList162],
- ?line {STRes163,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ005.xsd','./msxsdtest/element',valid),
+ {STRes163,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ005.xsd','./msxsdtest/element',valid),
STResList164 = [STRes163|STResList163],
- ?line {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ006.xsd','./msxsdtest/element',invalid),
+ {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ006.xsd','./msxsdtest/element',invalid),
STResList165 = [STRes164|STResList164],
- ?line {STRes165,S165} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ007.xsd','./msxsdtest/element',valid),
+ {STRes165,S165} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ007.xsd','./msxsdtest/element',valid),
STResList166 = [STRes165|STResList165],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ007.xml','./msxsdtest/element',invalid,S165),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ007.xml','./msxsdtest/element',invalid,S165),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes166,S166} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ008.xsd','./msxsdtest/element',valid),
+ {STRes166,S166} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ008.xsd','./msxsdtest/element',valid),
STResList167 = [STRes166|STResList166],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ008.xml','./msxsdtest/element',valid,S166),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ008.xml','./msxsdtest/element',valid,S166),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ009.xsd','./msxsdtest/element',valid),
+ {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ009.xsd','./msxsdtest/element',valid),
STResList168 = [STRes167|STResList167],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ009.xml','./msxsdtest/element',invalid,S167),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ009.xml','./msxsdtest/element',invalid,S167),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ010.xsd','./msxsdtest/element',valid),
+ {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ010.xsd','./msxsdtest/element',valid),
STResList169 = [STRes168|STResList168],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ010.xml','./msxsdtest/element',invalid,S168),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ010.xml','./msxsdtest/element',invalid,S168),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ011.xsd','./msxsdtest/element',valid),
+ {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ011.xsd','./msxsdtest/element',valid),
STResList170 = [STRes169|STResList169],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ011.xml','./msxsdtest/element',valid,S169),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ011.xml','./msxsdtest/element',valid,S169),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ012.xsd','./msxsdtest/element',valid),
+ {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ012.xsd','./msxsdtest/element',valid),
STResList171 = [STRes170|STResList170],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ012.xml','./msxsdtest/element',invalid,S170),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ012.xml','./msxsdtest/element',invalid,S170),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ013.xsd','./msxsdtest/element',valid),
+ {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ013.xsd','./msxsdtest/element',valid),
STResList172 = [STRes171|STResList171],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ013.xml','./msxsdtest/element',valid,S171),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ013.xml','./msxsdtest/element',valid,S171),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ014.xsd','./msxsdtest/element',valid),
+ {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ014.xsd','./msxsdtest/element',valid),
STResList173 = [STRes172|STResList172],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ014.xml','./msxsdtest/element',invalid,S172),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ014.xml','./msxsdtest/element',invalid,S172),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ015.xsd','./msxsdtest/element',valid),
+ {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ015.xsd','./msxsdtest/element',valid),
STResList174 = [STRes173|STResList173],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ015.xml','./msxsdtest/element',valid,S173),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ015.xml','./msxsdtest/element',valid,S173),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes174,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ016.xsd','./msxsdtest/element',valid),
+ {STRes174,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ016.xsd','./msxsdtest/element',valid),
STResList175 = [STRes174|STResList174],
- ?line {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ017.xsd','./msxsdtest/element',valid),
+ {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ017.xsd','./msxsdtest/element',valid),
STResList176 = [STRes175|STResList175],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ017.xml','./msxsdtest/element',valid,S175),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ017.xml','./msxsdtest/element',valid,S175),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes176,S176} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ018.xsd','./msxsdtest/element',valid),
+ {STRes176,S176} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ018.xsd','./msxsdtest/element',valid),
STResList177 = [STRes176|STResList176],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ018.xml','./msxsdtest/element',invalid,S176),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ018.xml','./msxsdtest/element',invalid,S176),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ019.xsd','./msxsdtest/element',valid),
+ {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ019.xsd','./msxsdtest/element',valid),
STResList178 = [STRes177|STResList177],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ019.xml','./msxsdtest/element',invalid,S177),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ019.xml','./msxsdtest/element',invalid,S177),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ020.xsd','./msxsdtest/element',valid),
+ {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ020.xsd','./msxsdtest/element',valid),
STResList179 = [STRes178|STResList178],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ020.xml','./msxsdtest/element',valid,S178),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ020.xml','./msxsdtest/element',valid,S178),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ021.xsd','./msxsdtest/element',valid),
+ {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ021.xsd','./msxsdtest/element',valid),
STResList180 = [STRes179|STResList179],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ021.xml','./msxsdtest/element',valid,S179),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ021.xml','./msxsdtest/element',valid,S179),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ022.xsd','./msxsdtest/element',valid),
+ {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemQ022.xsd','./msxsdtest/element',valid),
STResList181 = [STRes180|STResList180],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ022.xml','./msxsdtest/element',valid,S180),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemQ022.xml','./msxsdtest/element',valid,S180),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR001.xsd','./msxsdtest/element',valid),
+ {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR001.xsd','./msxsdtest/element',valid),
STResList182 = [STRes181|STResList181],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemR001.xml','./msxsdtest/element',valid,S181),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemR001.xml','./msxsdtest/element',valid,S181),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR002.xsd','./msxsdtest/element',valid),
+ {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR002.xsd','./msxsdtest/element',valid),
STResList183 = [STRes182|STResList182],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemR002.xml','./msxsdtest/element',valid,S182),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemR002.xml','./msxsdtest/element',valid,S182),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes183,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR003.xsd','./msxsdtest/element',invalid),
+ {STRes183,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR003.xsd','./msxsdtest/element',invalid),
STResList184 = [STRes183|STResList183],
- ?line {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR004.xsd','./msxsdtest/element',valid),
+ {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR004.xsd','./msxsdtest/element',valid),
STResList185 = [STRes184|STResList184],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemR004.xml','./msxsdtest/element',valid,S184),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemR004.xml','./msxsdtest/element',valid,S184),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR005.xsd','./msxsdtest/element',valid),
+ {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR005.xsd','./msxsdtest/element',valid),
STResList186 = [STRes185|STResList185],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemR005.xml','./msxsdtest/element',valid,S185),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemR005.xml','./msxsdtest/element',valid,S185),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes186,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR006.xsd','./msxsdtest/element',invalid),
+ {STRes186,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemR006.xsd','./msxsdtest/element',invalid),
STResList187 = [STRes186|STResList186],
- ?line {STRes187,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS001.xsd','./msxsdtest/element',invalid),
+ {STRes187,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS001.xsd','./msxsdtest/element',invalid),
STResList188 = [STRes187|STResList187],
- ?line {STRes188,S188} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS002.xsd','./msxsdtest/element',valid),
+ {STRes188,S188} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS002.xsd','./msxsdtest/element',valid),
STResList189 = [STRes188|STResList188],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemS002.xml','./msxsdtest/element',valid,S188),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemS002.xml','./msxsdtest/element',valid,S188),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes189,S189} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS003.xsd','./msxsdtest/element',valid),
+ {STRes189,S189} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS003.xsd','./msxsdtest/element',valid),
STResList190 = [STRes189|STResList189],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemS003.xml','./msxsdtest/element',valid,S189),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemS003.xml','./msxsdtest/element',valid,S189),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes190,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS004.xsd','./msxsdtest/element',invalid),
+ {STRes190,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS004.xsd','./msxsdtest/element',invalid),
STResList191 = [STRes190|STResList190],
- ?line {STRes191,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS005.xsd','./msxsdtest/element',invalid),
+ {STRes191,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS005.xsd','./msxsdtest/element',invalid),
STResList192 = [STRes191|STResList191],
- ?line {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS006.xsd','./msxsdtest/element',invalid),
+ {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS006.xsd','./msxsdtest/element',invalid),
STResList193 = [STRes192|STResList192],
- ?line {STRes193,S193} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS007.xsd','./msxsdtest/element',valid),
+ {STRes193,S193} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS007.xsd','./msxsdtest/element',valid),
STResList194 = [STRes193|STResList193],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemS007.xml','./msxsdtest/element',valid,S193),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemS007.xml','./msxsdtest/element',valid,S193),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes194,S194} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS008.xsd','./msxsdtest/element',valid),
+ {STRes194,S194} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemS008.xsd','./msxsdtest/element',valid),
STResList195 = [STRes194|STResList194],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemS008.xml','./msxsdtest/element',valid,S194),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemS008.xml','./msxsdtest/element',valid,S194),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes195,S195} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT001.xsd','./msxsdtest/element',valid),
+ {STRes195,S195} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT001.xsd','./msxsdtest/element',valid),
STResList196 = [STRes195|STResList195],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT001.xml','./msxsdtest/element',invalid,S195),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT001.xml','./msxsdtest/element',invalid,S195),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes196,S196} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT002.xsd','./msxsdtest/element',valid),
+ {STRes196,S196} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT002.xsd','./msxsdtest/element',valid),
STResList197 = [STRes196|STResList196],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT002.xml','./msxsdtest/element',valid,S196),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT002.xml','./msxsdtest/element',valid,S196),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes197,S197} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT003.xsd','./msxsdtest/element',valid),
+ {STRes197,S197} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT003.xsd','./msxsdtest/element',valid),
STResList198 = [STRes197|STResList197],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT003.xml','./msxsdtest/element',valid,S197),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT003.xml','./msxsdtest/element',valid,S197),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes198,S198} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT004.xsd','./msxsdtest/element',valid),
+ {STRes198,S198} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT004.xsd','./msxsdtest/element',valid),
STResList199 = [STRes198|STResList198],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT004.xml','./msxsdtest/element',invalid,S198),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT004.xml','./msxsdtest/element',invalid,S198),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes199,S199} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT005.xsd','./msxsdtest/element',valid),
+ {STRes199,S199} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT005.xsd','./msxsdtest/element',valid),
STResList200 = [STRes199|STResList199],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT005.xml','./msxsdtest/element',invalid,S199),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT005.xml','./msxsdtest/element',invalid,S199),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes200,S200} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT006.xsd','./msxsdtest/element',valid),
+ {STRes200,S200} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT006.xsd','./msxsdtest/element',valid),
STResList201 = [STRes200|STResList200],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT006.xml','./msxsdtest/element',invalid,S200),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT006.xml','./msxsdtest/element',invalid,S200),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes201,S201} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT007.xsd','./msxsdtest/element',valid),
+ {STRes201,S201} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT007.xsd','./msxsdtest/element',valid),
STResList202 = [STRes201|STResList201],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT007.xml','./msxsdtest/element',valid,S201),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT007.xml','./msxsdtest/element',valid,S201),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT008.xsd','./msxsdtest/element',valid),
+ {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT008.xsd','./msxsdtest/element',valid),
STResList203 = [STRes202|STResList202],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT008.xml','./msxsdtest/element',valid,S202),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT008.xml','./msxsdtest/element',valid,S202),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes203,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT009.xsd','./msxsdtest/element',invalid),
+ {STRes203,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT009.xsd','./msxsdtest/element',invalid),
STResList204 = [STRes203|STResList203],
- ?line {STRes204,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT010.xsd','./msxsdtest/element',invalid),
+ {STRes204,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT010.xsd','./msxsdtest/element',invalid),
STResList205 = [STRes204|STResList204],
- ?line {STRes205,S205} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT011.xsd','./msxsdtest/element',valid),
+ {STRes205,S205} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT011.xsd','./msxsdtest/element',valid),
STResList206 = [STRes205|STResList205],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT011.xml','./msxsdtest/element',invalid,S205),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT011.xml','./msxsdtest/element',invalid,S205),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes206,S206} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT012.xsd','./msxsdtest/element',valid),
+ {STRes206,S206} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT012.xsd','./msxsdtest/element',valid),
STResList207 = [STRes206|STResList206],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT012.xml','./msxsdtest/element',invalid,S206),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT012.xml','./msxsdtest/element',invalid,S206),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes207,S207} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT013.xsd','./msxsdtest/element',valid),
+ {STRes207,S207} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT013.xsd','./msxsdtest/element',valid),
STResList208 = [STRes207|STResList207],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT013.xml','./msxsdtest/element',invalid,S207),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT013.xml','./msxsdtest/element',invalid,S207),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes208,S208} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT014.xsd','./msxsdtest/element',valid),
+ {STRes208,S208} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT014.xsd','./msxsdtest/element',valid),
STResList209 = [STRes208|STResList208],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT014.xml','./msxsdtest/element',valid,S208),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT014.xml','./msxsdtest/element',valid,S208),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes209,S209} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT015.xsd','./msxsdtest/element',valid),
+ {STRes209,S209} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT015.xsd','./msxsdtest/element',valid),
STResList210 = [STRes209|STResList209],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT015.xml','./msxsdtest/element',valid,S209),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT015.xml','./msxsdtest/element',valid,S209),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes210,S210} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT016.xsd','./msxsdtest/element',valid),
+ {STRes210,S210} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT016.xsd','./msxsdtest/element',valid),
STResList211 = [STRes210|STResList210],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT016.xml','./msxsdtest/element',valid,S210),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT016.xml','./msxsdtest/element',valid,S210),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes211,S211} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT017.xsd','./msxsdtest/element',valid),
+ {STRes211,S211} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT017.xsd','./msxsdtest/element',valid),
STResList212 = [STRes211|STResList211],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT017.xml','./msxsdtest/element',invalid,S211),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT017.xml','./msxsdtest/element',invalid,S211),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes212,S212} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT018.xsd','./msxsdtest/element',valid),
+ {STRes212,S212} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT018.xsd','./msxsdtest/element',valid),
STResList213 = [STRes212|STResList212],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT018.xml','./msxsdtest/element',invalid,S212),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT018.xml','./msxsdtest/element',invalid,S212),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes213,S213} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT019.xsd','./msxsdtest/element',valid),
+ {STRes213,S213} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT019.xsd','./msxsdtest/element',valid),
STResList214 = [STRes213|STResList213],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT019.xml','./msxsdtest/element',invalid,S213),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT019.xml','./msxsdtest/element',invalid,S213),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes214,S214} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT022.xsd','./msxsdtest/element',valid),
+ {STRes214,S214} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT022.xsd','./msxsdtest/element',valid),
STResList215 = [STRes214|STResList214],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT022.xml','./msxsdtest/element',valid,S214),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT022.xml','./msxsdtest/element',valid,S214),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes215,S215} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT024.xsd','./msxsdtest/element',valid),
+ {STRes215,S215} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT024.xsd','./msxsdtest/element',valid),
STResList216 = [STRes215|STResList215],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT024.xml','./msxsdtest/element',invalid,S215),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT024.xml','./msxsdtest/element',invalid,S215),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes216,S216} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT025.xsd','./msxsdtest/element',valid),
+ {STRes216,S216} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT025.xsd','./msxsdtest/element',valid),
STResList217 = [STRes216|STResList216],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT025.xml','./msxsdtest/element',valid,S216),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT025.xml','./msxsdtest/element',valid,S216),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes217,S217} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT026.xsd','./msxsdtest/element',valid),
+ {STRes217,S217} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT026.xsd','./msxsdtest/element',valid),
STResList218 = [STRes217|STResList217],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT026.xml','./msxsdtest/element',valid,S217),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT026.xml','./msxsdtest/element',valid,S217),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes218,S218} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT027.xsd','./msxsdtest/element',valid),
+ {STRes218,S218} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT027.xsd','./msxsdtest/element',valid),
STResList219 = [STRes218|STResList218],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT027.xml','./msxsdtest/element',valid,S218),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT027.xml','./msxsdtest/element',valid,S218),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes219,S219} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT028.xsd','./msxsdtest/element',valid),
+ {STRes219,S219} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT028.xsd','./msxsdtest/element',valid),
STResList220 = [STRes219|STResList219],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT028.xml','./msxsdtest/element',valid,S219),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT028.xml','./msxsdtest/element',valid,S219),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes220,S220} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT029.xsd','./msxsdtest/element',valid),
+ {STRes220,S220} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT029.xsd','./msxsdtest/element',valid),
STResList221 = [STRes220|STResList220],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT029.xml','./msxsdtest/element',valid,S220),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT029.xml','./msxsdtest/element',valid,S220),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes221,S221} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT030.xsd','./msxsdtest/element',valid),
+ {STRes221,S221} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT030.xsd','./msxsdtest/element',valid),
STResList222 = [STRes221|STResList221],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT030.xml','./msxsdtest/element',valid,S221),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT030.xml','./msxsdtest/element',valid,S221),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes222,S222} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT031.xsd','./msxsdtest/element',valid),
+ {STRes222,S222} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT031.xsd','./msxsdtest/element',valid),
STResList223 = [STRes222|STResList222],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT031.xml','./msxsdtest/element',invalid,S222),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT031.xml','./msxsdtest/element',invalid,S222),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes223,S223} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT032.xsd','./msxsdtest/element',valid),
+ {STRes223,S223} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT032.xsd','./msxsdtest/element',valid),
STResList224 = [STRes223|STResList223],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT032.xml','./msxsdtest/element',valid,S223),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT032.xml','./msxsdtest/element',valid,S223),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes224,S224} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT033.xsd','./msxsdtest/element',valid),
+ {STRes224,S224} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT033.xsd','./msxsdtest/element',valid),
STResList225 = [STRes224|STResList224],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT033.xml','./msxsdtest/element',invalid,S224),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT033.xml','./msxsdtest/element',invalid,S224),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes225,S225} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT038.xsd','./msxsdtest/element',valid),
+ {STRes225,S225} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT038.xsd','./msxsdtest/element',valid),
STResList226 = [STRes225|STResList225],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT038.xml','./msxsdtest/element',valid,S225),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT038.xml','./msxsdtest/element',valid,S225),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes226,S226} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT039.xsd','./msxsdtest/element',valid),
+ {STRes226,S226} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT039.xsd','./msxsdtest/element',valid),
STResList227 = [STRes226|STResList226],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT039.xml','./msxsdtest/element',invalid,S226),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT039.xml','./msxsdtest/element',invalid,S226),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes227,S227} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT040.xsd','./msxsdtest/element',valid),
+ {STRes227,S227} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT040.xsd','./msxsdtest/element',valid),
STResList228 = [STRes227|STResList227],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT040.xml','./msxsdtest/element',valid,S227),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT040.xml','./msxsdtest/element',valid,S227),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes228,S228} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT041.xsd','./msxsdtest/element',valid),
+ {STRes228,S228} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT041.xsd','./msxsdtest/element',valid),
STResList229 = [STRes228|STResList228],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT041.xml','./msxsdtest/element',valid,S228),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT041.xml','./msxsdtest/element',valid,S228),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes229,S229} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT042.xsd','./msxsdtest/element',valid),
+ {STRes229,S229} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT042.xsd','./msxsdtest/element',valid),
STResList230 = [STRes229|STResList229],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT042.xml','./msxsdtest/element',valid,S229),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT042.xml','./msxsdtest/element',valid,S229),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes230,S230} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT043.xsd','./msxsdtest/element',valid),
+ {STRes230,S230} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT043.xsd','./msxsdtest/element',valid),
STResList231 = [STRes230|STResList230],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT043.xml','./msxsdtest/element',valid,S230),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT043.xml','./msxsdtest/element',valid,S230),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes231,S231} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT044.xsd','./msxsdtest/element',valid),
+ {STRes231,S231} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT044.xsd','./msxsdtest/element',valid),
STResList232 = [STRes231|STResList231],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT044.xml','./msxsdtest/element',valid,S231),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT044.xml','./msxsdtest/element',valid,S231),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes232,S232} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT045.xsd','./msxsdtest/element',valid),
+ {STRes232,S232} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT045.xsd','./msxsdtest/element',valid),
STResList233 = [STRes232|STResList232],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT045.xml','./msxsdtest/element',invalid,S232),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT045.xml','./msxsdtest/element',invalid,S232),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes233,S233} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT046.xsd','./msxsdtest/element',valid),
+ {STRes233,S233} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT046.xsd','./msxsdtest/element',valid),
STResList234 = [STRes233|STResList233],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT046.xml','./msxsdtest/element',invalid,S233),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT046.xml','./msxsdtest/element',invalid,S233),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes234,S234} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT047.xsd','./msxsdtest/element',valid),
+ {STRes234,S234} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT047.xsd','./msxsdtest/element',valid),
STResList235 = [STRes234|STResList234],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT047.xml','./msxsdtest/element',invalid,S234),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT047.xml','./msxsdtest/element',invalid,S234),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes235,S235} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT048.xsd','./msxsdtest/element',valid),
+ {STRes235,S235} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT048.xsd','./msxsdtest/element',valid),
STResList236 = [STRes235|STResList235],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT048.xml','./msxsdtest/element',invalid,S235),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT048.xml','./msxsdtest/element',invalid,S235),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes236,S236} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT049.xsd','./msxsdtest/element',valid),
+ {STRes236,S236} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT049.xsd','./msxsdtest/element',valid),
STResList237 = [STRes236|STResList236],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT049.xml','./msxsdtest/element',invalid,S236),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT049.xml','./msxsdtest/element',invalid,S236),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes237,S237} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT050.xsd','./msxsdtest/element',valid),
+ {STRes237,S237} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT050.xsd','./msxsdtest/element',valid),
STResList238 = [STRes237|STResList237],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT050.xml','./msxsdtest/element',invalid,S237),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT050.xml','./msxsdtest/element',invalid,S237),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes238,S238} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT051.xsd','./msxsdtest/element',valid),
+ {STRes238,S238} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT051.xsd','./msxsdtest/element',valid),
STResList239 = [STRes238|STResList238],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT051.xml','./msxsdtest/element',invalid,S238),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT051.xml','./msxsdtest/element',invalid,S238),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes239,S239} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT052.xsd','./msxsdtest/element',valid),
+ {STRes239,S239} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT052.xsd','./msxsdtest/element',valid),
STResList240 = [STRes239|STResList239],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT052.xml','./msxsdtest/element',invalid,S239),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT052.xml','./msxsdtest/element',invalid,S239),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes240,S240} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT053.xsd','./msxsdtest/element',valid),
+ {STRes240,S240} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT053.xsd','./msxsdtest/element',valid),
STResList241 = [STRes240|STResList240],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT053.xml','./msxsdtest/element',invalid,S240),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT053.xml','./msxsdtest/element',invalid,S240),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes241,S241} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT054.xsd','./msxsdtest/element',valid),
+ {STRes241,S241} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT054.xsd','./msxsdtest/element',valid),
STResList242 = [STRes241|STResList241],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT054.xml','./msxsdtest/element',invalid,S241),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT054.xml','./msxsdtest/element',invalid,S241),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes242,S242} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT055.xsd','./msxsdtest/element',valid),
+ {STRes242,S242} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT055.xsd','./msxsdtest/element',valid),
STResList243 = [STRes242|STResList242],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT055.xml','./msxsdtest/element',invalid,S242),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT055.xml','./msxsdtest/element',invalid,S242),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes243,S243} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT056.xsd','./msxsdtest/element',valid),
+ {STRes243,S243} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT056.xsd','./msxsdtest/element',valid),
STResList244 = [STRes243|STResList243],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT056.xml','./msxsdtest/element',invalid,S243),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT056.xml','./msxsdtest/element',invalid,S243),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes244,S244} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT057.xsd','./msxsdtest/element',valid),
+ {STRes244,S244} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT057.xsd','./msxsdtest/element',valid),
STResList245 = [STRes244|STResList244],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT057.xml','./msxsdtest/element',invalid,S244),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT057.xml','./msxsdtest/element',invalid,S244),
ITResList83 = [ITRes82|ITResList82],
- ?line {STRes245,S245} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT058.xsd','./msxsdtest/element',valid),
+ {STRes245,S245} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT058.xsd','./msxsdtest/element',valid),
STResList246 = [STRes245|STResList245],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT058.xml','./msxsdtest/element',valid,S245),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT058.xml','./msxsdtest/element',valid,S245),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes246,S246} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT074.xsd','./msxsdtest/element',valid),
+ {STRes246,S246} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemT074.xsd','./msxsdtest/element',valid),
STResList247 = [STRes246|STResList246],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT074.xml','./msxsdtest/element',invalid,S246),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemT074.xml','./msxsdtest/element',invalid,S246),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes247,S247} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU001.xsd','./msxsdtest/element',valid),
+ {STRes247,S247} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU001.xsd','./msxsdtest/element',valid),
STResList248 = [STRes247|STResList247],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU001.xml','./msxsdtest/element',valid,S247),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU001.xml','./msxsdtest/element',valid,S247),
ITResList86 = [ITRes85|ITResList85],
- ?line {STRes248,S248} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU002.xsd','./msxsdtest/element',valid),
+ {STRes248,S248} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU002.xsd','./msxsdtest/element',valid),
STResList249 = [STRes248|STResList248],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU002.xml','./msxsdtest/element',valid,S248),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU002.xml','./msxsdtest/element',valid,S248),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes249,S249} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU003.xsd','./msxsdtest/element',valid),
+ {STRes249,S249} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU003.xsd','./msxsdtest/element',valid),
STResList250 = [STRes249|STResList249],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU003.xml','./msxsdtest/element',valid,S249),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU003.xml','./msxsdtest/element',valid,S249),
ITResList88 = [ITRes87|ITResList87],
- ?line {STRes250,S250} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU004.xsd','./msxsdtest/element',valid),
+ {STRes250,S250} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU004.xsd','./msxsdtest/element',valid),
STResList251 = [STRes250|STResList250],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU004.xml','./msxsdtest/element',valid,S250),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU004.xml','./msxsdtest/element',valid,S250),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU005.xsd','./msxsdtest/element',valid),
+ {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU005.xsd','./msxsdtest/element',valid),
STResList252 = [STRes251|STResList251],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU005.xml','./msxsdtest/element',valid,S251),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU005.xml','./msxsdtest/element',valid,S251),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU006.xsd','./msxsdtest/element',valid),
+ {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU006.xsd','./msxsdtest/element',valid),
STResList253 = [STRes252|STResList252],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU006.xml','./msxsdtest/element',valid,S252),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU006.xml','./msxsdtest/element',valid,S252),
ITResList91 = [ITRes90|ITResList90],
- ?line {STRes253,S253} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU007.xsd','./msxsdtest/element',valid),
+ {STRes253,S253} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU007.xsd','./msxsdtest/element',valid),
STResList254 = [STRes253|STResList253],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU007.xml','./msxsdtest/element',valid,S253),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU007.xml','./msxsdtest/element',valid,S253),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes254,S254} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU008.xsd','./msxsdtest/element',valid),
+ {STRes254,S254} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU008.xsd','./msxsdtest/element',valid),
STResList255 = [STRes254|STResList254],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU008.xml','./msxsdtest/element',valid,S254),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU008.xml','./msxsdtest/element',valid,S254),
ITResList93 = [ITRes92|ITResList92],
- ?line {STRes255,S255} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU009.xsd','./msxsdtest/element',valid),
+ {STRes255,S255} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU009.xsd','./msxsdtest/element',valid),
STResList256 = [STRes255|STResList255],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU009.xml','./msxsdtest/element',valid,S255),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU009.xml','./msxsdtest/element',valid,S255),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes256,S256} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU010.xsd','./msxsdtest/element',valid),
+ {STRes256,S256} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU010.xsd','./msxsdtest/element',valid),
STResList257 = [STRes256|STResList256],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU010.xml','./msxsdtest/element',valid,S256),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU010.xml','./msxsdtest/element',valid,S256),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes257,S257} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU011.xsd','./msxsdtest/element',valid),
+ {STRes257,S257} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU011.xsd','./msxsdtest/element',valid),
STResList258 = [STRes257|STResList257],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU011.xml','./msxsdtest/element',valid,S257),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU011.xml','./msxsdtest/element',valid,S257),
ITResList96 = [ITRes95|ITResList95],
- ?line {STRes258,S258} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU012.xsd','./msxsdtest/element',valid),
+ {STRes258,S258} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU012.xsd','./msxsdtest/element',valid),
STResList259 = [STRes258|STResList258],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU012.xml','./msxsdtest/element',valid,S258),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU012.xml','./msxsdtest/element',valid,S258),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes259,S259} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU013.xsd','./msxsdtest/element',valid),
+ {STRes259,S259} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU013.xsd','./msxsdtest/element',valid),
STResList260 = [STRes259|STResList259],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU013.xml','./msxsdtest/element',valid,S259),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU013.xml','./msxsdtest/element',valid,S259),
ITResList98 = [ITRes97|ITResList97],
- ?line {STRes260,S260} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU014.xsd','./msxsdtest/element',valid),
+ {STRes260,S260} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU014.xsd','./msxsdtest/element',valid),
STResList261 = [STRes260|STResList260],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU014.xml','./msxsdtest/element',valid,S260),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU014.xml','./msxsdtest/element',valid,S260),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes261,S261} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU015.xsd','./msxsdtest/element',valid),
+ {STRes261,S261} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU015.xsd','./msxsdtest/element',valid),
STResList262 = [STRes261|STResList261],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU015.xml','./msxsdtest/element',valid,S261),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU015.xml','./msxsdtest/element',valid,S261),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes262,S262} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU017.xsd','./msxsdtest/element',valid),
+ {STRes262,S262} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU017.xsd','./msxsdtest/element',valid),
STResList263 = [STRes262|STResList262],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU017.xml','./msxsdtest/element',valid,S262),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU017.xml','./msxsdtest/element',valid,S262),
ITResList101 = [ITRes100|ITResList100],
- ?line {STRes263,S263} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU018.xsd','./msxsdtest/element',valid),
+ {STRes263,S263} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU018.xsd','./msxsdtest/element',valid),
STResList264 = [STRes263|STResList263],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU018.xml','./msxsdtest/element',valid,S263),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU018.xml','./msxsdtest/element',valid,S263),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes264,S264} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU019.xsd','./msxsdtest/element',valid),
+ {STRes264,S264} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU019.xsd','./msxsdtest/element',valid),
STResList265 = [STRes264|STResList264],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU019.xml','./msxsdtest/element',valid,S264),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU019.xml','./msxsdtest/element',valid,S264),
ITResList103 = [ITRes102|ITResList102],
- ?line {STRes265,S265} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU020.xsd','./msxsdtest/element',valid),
+ {STRes265,S265} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU020.xsd','./msxsdtest/element',valid),
STResList266 = [STRes265|STResList265],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU020.xml','./msxsdtest/element',valid,S265),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU020.xml','./msxsdtest/element',valid,S265),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes266,S266} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU021.xsd','./msxsdtest/element',valid),
+ {STRes266,S266} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU021.xsd','./msxsdtest/element',valid),
STResList267 = [STRes266|STResList266],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU021.xml','./msxsdtest/element',valid,S266),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU021.xml','./msxsdtest/element',valid,S266),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes267,S267} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU022.xsd','./msxsdtest/element',valid),
+ {STRes267,S267} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU022.xsd','./msxsdtest/element',valid),
STResList268 = [STRes267|STResList267],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU022.xml','./msxsdtest/element',valid,S267),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU022.xml','./msxsdtest/element',valid,S267),
ITResList106 = [ITRes105|ITResList105],
- ?line {STRes268,S268} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU023.xsd','./msxsdtest/element',valid),
+ {STRes268,S268} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU023.xsd','./msxsdtest/element',valid),
STResList269 = [STRes268|STResList268],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU023.xml','./msxsdtest/element',valid,S268),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU023.xml','./msxsdtest/element',valid,S268),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes269,S269} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU024.xsd','./msxsdtest/element',valid),
+ {STRes269,S269} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU024.xsd','./msxsdtest/element',valid),
STResList270 = [STRes269|STResList269],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU024.xml','./msxsdtest/element',valid,S269),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU024.xml','./msxsdtest/element',valid,S269),
ITResList108 = [ITRes107|ITResList107],
- ?line {STRes270,S270} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU025.xsd','./msxsdtest/element',valid),
+ {STRes270,S270} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemU025.xsd','./msxsdtest/element',valid),
STResList271 = [STRes270|STResList270],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU025.xml','./msxsdtest/element',invalid,S270),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemU025.xml','./msxsdtest/element',invalid,S270),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes271,S271} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ001.xsd','./msxsdtest/element',valid),
+ {STRes271,S271} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ001.xsd','./msxsdtest/element',valid),
STResList272 = [STRes271|STResList271],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemZ001.xml','./msxsdtest/element',invalid,S271),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemZ001.xml','./msxsdtest/element',invalid,S271),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes272,S272} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ002.xsd','./msxsdtest/element',valid),
+ {STRes272,S272} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ002.xsd','./msxsdtest/element',valid),
STResList273 = [STRes272|STResList272],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemZ002.xml','./msxsdtest/element',valid,S272),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemZ002.xml','./msxsdtest/element',valid,S272),
ITResList111 = [ITRes110|ITResList110],
- ?line {STRes273,S273} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ003.xsd','./msxsdtest/element',valid),
+ {STRes273,S273} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ003.xsd','./msxsdtest/element',valid),
STResList274 = [STRes273|STResList273],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemZ003.xml','./msxsdtest/element',valid,S273),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/element/elemZ003.xml','./msxsdtest/element',valid,S273),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes274,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ004.xsd','./msxsdtest/element',valid),
+ {STRes274,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ004.xsd','./msxsdtest/element',valid),
STResList275 = [STRes274|STResList274],
- ?line {STRes275,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ005.xsd','./msxsdtest/element',valid),
+ {STRes275,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/element/elemZ005.xsd','./msxsdtest/element',valid),
STResList276 = [STRes275|STResList275],
@@ -5747,1148 +5735,1148 @@ elem(Config) when is_list(Config) ->
model_group(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA001.xsd','./msxsdtest/Group',valid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA001.xsd','./msxsdtest/Group',valid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA002.xsd','./msxsdtest/Group',valid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA002.xsd','./msxsdtest/Group',valid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA003.xsd','./msxsdtest/Group',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA003.xsd','./msxsdtest/Group',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA004.xsd','./msxsdtest/Group',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA004.xsd','./msxsdtest/Group',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA005.xsd','./msxsdtest/Group',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA005.xsd','./msxsdtest/Group',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA006.xsd','./msxsdtest/Group',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA006.xsd','./msxsdtest/Group',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA007.xsd','./msxsdtest/Group',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA007.xsd','./msxsdtest/Group',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA008.xsd','./msxsdtest/Group',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA008.xsd','./msxsdtest/Group',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA009.xsd','./msxsdtest/Group',invalid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA009.xsd','./msxsdtest/Group',invalid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA010.xsd','./msxsdtest/Group',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA010.xsd','./msxsdtest/Group',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA011.xsd','./msxsdtest/Group',valid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA011.xsd','./msxsdtest/Group',valid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA012.xsd','./msxsdtest/Group',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupA012.xsd','./msxsdtest/Group',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB001.xsd','./msxsdtest/Group',invalid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB001.xsd','./msxsdtest/Group',invalid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB002.xsd','./msxsdtest/Group',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB002.xsd','./msxsdtest/Group',valid),
STResList14 = [STRes13|STResList13],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB002.xml','./msxsdtest/Group',valid,S13),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB002.xml','./msxsdtest/Group',valid,S13),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB003.xsd','./msxsdtest/Group',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB003.xsd','./msxsdtest/Group',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB003.xml','./msxsdtest/Group',valid,S14),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB003.xml','./msxsdtest/Group',valid,S14),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB004.xsd','./msxsdtest/Group',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB004.xsd','./msxsdtest/Group',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB004.xml','./msxsdtest/Group',valid,S15),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB004.xml','./msxsdtest/Group',valid,S15),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB005.xsd','./msxsdtest/Group',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB005.xsd','./msxsdtest/Group',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB005.xml','./msxsdtest/Group',valid,S16),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB005.xml','./msxsdtest/Group',valid,S16),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB006.xsd','./msxsdtest/Group',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB006.xsd','./msxsdtest/Group',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB006.xml','./msxsdtest/Group',valid,S17),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB006.xml','./msxsdtest/Group',valid,S17),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB007.xsd','./msxsdtest/Group',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB007.xsd','./msxsdtest/Group',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB008.xsd','./msxsdtest/Group',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB008.xsd','./msxsdtest/Group',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB009.xsd','./msxsdtest/Group',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB009.xsd','./msxsdtest/Group',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB009.xml','./msxsdtest/Group',valid,S20),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB009.xml','./msxsdtest/Group',valid,S20),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB010.xsd','./msxsdtest/Group',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB010.xsd','./msxsdtest/Group',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB010.xml','./msxsdtest/Group',valid,S21),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupB010.xml','./msxsdtest/Group',valid,S21),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB011.xsd','./msxsdtest/Group',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB011.xsd','./msxsdtest/Group',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB012.xsd','./msxsdtest/Group',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB012.xsd','./msxsdtest/Group',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB013.xsd','./msxsdtest/Group',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB013.xsd','./msxsdtest/Group',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB014.xsd','./msxsdtest/Group',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB014.xsd','./msxsdtest/Group',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB015.xsd','./msxsdtest/Group',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB015.xsd','./msxsdtest/Group',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB016.xsd','./msxsdtest/Group',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB016.xsd','./msxsdtest/Group',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB017.xsd','./msxsdtest/Group',valid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupB017.xsd','./msxsdtest/Group',valid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC001.xsd','./msxsdtest/Group',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC001.xsd','./msxsdtest/Group',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC002.xsd','./msxsdtest/Group',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC002.xsd','./msxsdtest/Group',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC003.xsd','./msxsdtest/Group',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC003.xsd','./msxsdtest/Group',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC004.xsd','./msxsdtest/Group',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC004.xsd','./msxsdtest/Group',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC005.xsd','./msxsdtest/Group',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC005.xsd','./msxsdtest/Group',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC006.xsd','./msxsdtest/Group',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC006.xsd','./msxsdtest/Group',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC007.xsd','./msxsdtest/Group',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC007.xsd','./msxsdtest/Group',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC008.xsd','./msxsdtest/Group',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC008.xsd','./msxsdtest/Group',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC009.xsd','./msxsdtest/Group',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC009.xsd','./msxsdtest/Group',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC010.xsd','./msxsdtest/Group',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC010.xsd','./msxsdtest/Group',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC011.xsd','./msxsdtest/Group',valid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC011.xsd','./msxsdtest/Group',valid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC012.xsd','./msxsdtest/Group',invalid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupC012.xsd','./msxsdtest/Group',invalid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupD001.xsd','./msxsdtest/Group',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupD001.xsd','./msxsdtest/Group',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupD002.xsd','./msxsdtest/Group',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupD002.xsd','./msxsdtest/Group',invalid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupD003.xsd','./msxsdtest/Group',invalid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupD003.xsd','./msxsdtest/Group',invalid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupD004.xsd','./msxsdtest/Group',invalid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupD004.xsd','./msxsdtest/Group',invalid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE001.xsd','./msxsdtest/Group',valid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE001.xsd','./msxsdtest/Group',valid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE002.xsd','./msxsdtest/Group',invalid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE002.xsd','./msxsdtest/Group',invalid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE003.xsd','./msxsdtest/Group',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE003.xsd','./msxsdtest/Group',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupE003.xml','./msxsdtest/Group',invalid,S47),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupE003.xml','./msxsdtest/Group',invalid,S47),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE004.xsd','./msxsdtest/Group',valid),
+ {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE004.xsd','./msxsdtest/Group',valid),
STResList49 = [STRes48|STResList48],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupE004.xml','./msxsdtest/Group',valid,S48),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupE004.xml','./msxsdtest/Group',valid,S48),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE005.xsd','./msxsdtest/Group',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupE005.xsd','./msxsdtest/Group',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupE005.xml','./msxsdtest/Group',invalid,S49),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupE005.xml','./msxsdtest/Group',invalid,S49),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF001.xsd','./msxsdtest/Group',valid),
+ {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF001.xsd','./msxsdtest/Group',valid),
STResList51 = [STRes50|STResList50],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF001.xml','./msxsdtest/Group',valid,S50),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF001.xml','./msxsdtest/Group',valid,S50),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF002.xsd','./msxsdtest/Group',valid),
+ {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF002.xsd','./msxsdtest/Group',valid),
STResList52 = [STRes51|STResList51],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF002.xml','./msxsdtest/Group',valid,S51),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF002.xml','./msxsdtest/Group',valid,S51),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF003.xsd','./msxsdtest/Group',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF003.xsd','./msxsdtest/Group',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF003.xml','./msxsdtest/Group',invalid,S52),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF003.xml','./msxsdtest/Group',invalid,S52),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF004.xsd','./msxsdtest/Group',valid),
+ {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF004.xsd','./msxsdtest/Group',valid),
STResList54 = [STRes53|STResList53],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF004.xml','./msxsdtest/Group',valid,S53),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF004.xml','./msxsdtest/Group',valid,S53),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF005.xsd','./msxsdtest/Group',valid),
+ {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF005.xsd','./msxsdtest/Group',valid),
STResList55 = [STRes54|STResList54],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF005.xml','./msxsdtest/Group',valid,S54),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF005.xml','./msxsdtest/Group',valid,S54),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF006.xsd','./msxsdtest/Group',valid),
+ {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF006.xsd','./msxsdtest/Group',valid),
STResList56 = [STRes55|STResList55],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF006.xml','./msxsdtest/Group',invalid,S55),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF006.xml','./msxsdtest/Group',invalid,S55),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF007.xsd','./msxsdtest/Group',valid),
+ {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF007.xsd','./msxsdtest/Group',valid),
STResList57 = [STRes56|STResList56],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF007.xml','./msxsdtest/Group',valid,S56),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF007.xml','./msxsdtest/Group',valid,S56),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF008.xsd','./msxsdtest/Group',valid),
+ {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF008.xsd','./msxsdtest/Group',valid),
STResList58 = [STRes57|STResList57],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF008.xml','./msxsdtest/Group',invalid,S57),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF008.xml','./msxsdtest/Group',invalid,S57),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF009.xsd','./msxsdtest/Group',valid),
+ {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF009.xsd','./msxsdtest/Group',valid),
STResList59 = [STRes58|STResList58],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF009.xml','./msxsdtest/Group',valid,S58),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF009.xml','./msxsdtest/Group',valid,S58),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF010.xsd','./msxsdtest/Group',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF010.xsd','./msxsdtest/Group',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF010.xml','./msxsdtest/Group',invalid,S59),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF010.xml','./msxsdtest/Group',invalid,S59),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF011.xsd','./msxsdtest/Group',valid),
+ {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF011.xsd','./msxsdtest/Group',valid),
STResList61 = [STRes60|STResList60],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF011.xml','./msxsdtest/Group',valid,S60),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF011.xml','./msxsdtest/Group',valid,S60),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF012.xsd','./msxsdtest/Group',valid),
+ {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF012.xsd','./msxsdtest/Group',valid),
STResList62 = [STRes61|STResList61],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF012.xml','./msxsdtest/Group',invalid,S61),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF012.xml','./msxsdtest/Group',invalid,S61),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF013.xsd','./msxsdtest/Group',valid),
+ {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF013.xsd','./msxsdtest/Group',valid),
STResList63 = [STRes62|STResList62],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF013.xml','./msxsdtest/Group',invalid,S62),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF013.xml','./msxsdtest/Group',invalid,S62),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF014.xsd','./msxsdtest/Group',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF014.xsd','./msxsdtest/Group',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF014.xml','./msxsdtest/Group',valid,S63),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF014.xml','./msxsdtest/Group',valid,S63),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF015.xsd','./msxsdtest/Group',valid),
+ {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF015.xsd','./msxsdtest/Group',valid),
STResList65 = [STRes64|STResList64],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF015.xml','./msxsdtest/Group',invalid,S64),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF015.xml','./msxsdtest/Group',invalid,S64),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF016.xsd','./msxsdtest/Group',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF016.xsd','./msxsdtest/Group',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF016.xml','./msxsdtest/Group',invalid,S65),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF016.xml','./msxsdtest/Group',invalid,S65),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF017.xsd','./msxsdtest/Group',valid),
+ {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF017.xsd','./msxsdtest/Group',valid),
STResList67 = [STRes66|STResList66],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF017.xml','./msxsdtest/Group',valid,S66),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF017.xml','./msxsdtest/Group',valid,S66),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF018.xsd','./msxsdtest/Group',valid),
+ {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF018.xsd','./msxsdtest/Group',valid),
STResList68 = [STRes67|STResList67],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF018.xml','./msxsdtest/Group',valid,S67),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF018.xml','./msxsdtest/Group',valid,S67),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF019.xsd','./msxsdtest/Group',valid),
+ {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF019.xsd','./msxsdtest/Group',valid),
STResList69 = [STRes68|STResList68],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF019.xml','./msxsdtest/Group',invalid,S68),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF019.xml','./msxsdtest/Group',invalid,S68),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF020.xsd','./msxsdtest/Group',invalid),
+ {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF020.xsd','./msxsdtest/Group',invalid),
STResList70 = [STRes69|STResList69],
- ?line {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF021.xsd','./msxsdtest/Group',valid),
+ {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF021.xsd','./msxsdtest/Group',valid),
STResList71 = [STRes70|STResList70],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF021.xml','./msxsdtest/Group',valid,S70),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupF021.xml','./msxsdtest/Group',valid,S70),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF022.xsd','./msxsdtest/Group',invalid),
+ {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF022.xsd','./msxsdtest/Group',invalid),
STResList72 = [STRes71|STResList71],
- ?line {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF023.xsd','./msxsdtest/Group',invalid),
+ {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF023.xsd','./msxsdtest/Group',invalid),
STResList73 = [STRes72|STResList72],
- ?line {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF024.xsd','./msxsdtest/Group',invalid),
+ {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF024.xsd','./msxsdtest/Group',invalid),
STResList74 = [STRes73|STResList73],
- ?line {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF025.xsd','./msxsdtest/Group',invalid),
+ {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupF025.xsd','./msxsdtest/Group',invalid),
STResList75 = [STRes74|STResList74],
- ?line {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG001.xsd','./msxsdtest/Group',valid),
+ {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG001.xsd','./msxsdtest/Group',valid),
STResList76 = [STRes75|STResList75],
- ?line {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG002.xsd','./msxsdtest/Group',invalid),
+ {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG002.xsd','./msxsdtest/Group',invalid),
STResList77 = [STRes76|STResList76],
- ?line {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG003.xsd','./msxsdtest/Group',valid),
+ {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG003.xsd','./msxsdtest/Group',valid),
STResList78 = [STRes77|STResList77],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupG003.xml','./msxsdtest/Group',invalid,S77),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupG003.xml','./msxsdtest/Group',invalid,S77),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG004.xsd','./msxsdtest/Group',valid),
+ {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG004.xsd','./msxsdtest/Group',valid),
STResList79 = [STRes78|STResList78],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupG004.xml','./msxsdtest/Group',valid,S78),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupG004.xml','./msxsdtest/Group',valid,S78),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG005.xsd','./msxsdtest/Group',valid),
+ {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupG005.xsd','./msxsdtest/Group',valid),
STResList80 = [STRes79|STResList79],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupG005.xml','./msxsdtest/Group',invalid,S79),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupG005.xml','./msxsdtest/Group',invalid,S79),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH001.xsd','./msxsdtest/Group',valid),
+ {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH001.xsd','./msxsdtest/Group',valid),
STResList81 = [STRes80|STResList80],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH001.xml','./msxsdtest/Group',valid,S80),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH001.xml','./msxsdtest/Group',valid,S80),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH002.xsd','./msxsdtest/Group',valid),
+ {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH002.xsd','./msxsdtest/Group',valid),
STResList82 = [STRes81|STResList81],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH002.xml','./msxsdtest/Group',valid,S81),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH002.xml','./msxsdtest/Group',valid,S81),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH003.xsd','./msxsdtest/Group',valid),
+ {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH003.xsd','./msxsdtest/Group',valid),
STResList83 = [STRes82|STResList82],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH003.xml','./msxsdtest/Group',invalid,S82),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH003.xml','./msxsdtest/Group',invalid,S82),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH004.xsd','./msxsdtest/Group',valid),
+ {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH004.xsd','./msxsdtest/Group',valid),
STResList84 = [STRes83|STResList83],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH004.xml','./msxsdtest/Group',valid,S83),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH004.xml','./msxsdtest/Group',valid,S83),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH005.xsd','./msxsdtest/Group',valid),
+ {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH005.xsd','./msxsdtest/Group',valid),
STResList85 = [STRes84|STResList84],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH005.xml','./msxsdtest/Group',valid,S84),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH005.xml','./msxsdtest/Group',valid,S84),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH006.xsd','./msxsdtest/Group',valid),
+ {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH006.xsd','./msxsdtest/Group',valid),
STResList86 = [STRes85|STResList85],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH006.xml','./msxsdtest/Group',invalid,S85),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH006.xml','./msxsdtest/Group',invalid,S85),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH007.xsd','./msxsdtest/Group',valid),
+ {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH007.xsd','./msxsdtest/Group',valid),
STResList87 = [STRes86|STResList86],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH007.xml','./msxsdtest/Group',valid,S86),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH007.xml','./msxsdtest/Group',valid,S86),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH008.xsd','./msxsdtest/Group',valid),
+ {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH008.xsd','./msxsdtest/Group',valid),
STResList88 = [STRes87|STResList87],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH008.xml','./msxsdtest/Group',invalid,S87),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH008.xml','./msxsdtest/Group',invalid,S87),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH009.xsd','./msxsdtest/Group',valid),
+ {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH009.xsd','./msxsdtest/Group',valid),
STResList89 = [STRes88|STResList88],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH009.xml','./msxsdtest/Group',valid,S88),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH009.xml','./msxsdtest/Group',valid,S88),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH010.xsd','./msxsdtest/Group',valid),
+ {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH010.xsd','./msxsdtest/Group',valid),
STResList90 = [STRes89|STResList89],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH010.xml','./msxsdtest/Group',invalid,S89),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH010.xml','./msxsdtest/Group',invalid,S89),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH011.xsd','./msxsdtest/Group',valid),
+ {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH011.xsd','./msxsdtest/Group',valid),
STResList91 = [STRes90|STResList90],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH011.xml','./msxsdtest/Group',valid,S90),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH011.xml','./msxsdtest/Group',valid,S90),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH012.xsd','./msxsdtest/Group',valid),
+ {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH012.xsd','./msxsdtest/Group',valid),
STResList92 = [STRes91|STResList91],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH012.xml','./msxsdtest/Group',invalid,S91),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH012.xml','./msxsdtest/Group',invalid,S91),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH013.xsd','./msxsdtest/Group',valid),
+ {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH013.xsd','./msxsdtest/Group',valid),
STResList93 = [STRes92|STResList92],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH013.xml','./msxsdtest/Group',invalid,S92),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH013.xml','./msxsdtest/Group',invalid,S92),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH014.xsd','./msxsdtest/Group',valid),
+ {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH014.xsd','./msxsdtest/Group',valid),
STResList94 = [STRes93|STResList93],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH014.xml','./msxsdtest/Group',valid,S93),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH014.xml','./msxsdtest/Group',valid,S93),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH015.xsd','./msxsdtest/Group',valid),
+ {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH015.xsd','./msxsdtest/Group',valid),
STResList95 = [STRes94|STResList94],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH015.xml','./msxsdtest/Group',invalid,S94),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH015.xml','./msxsdtest/Group',invalid,S94),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH016.xsd','./msxsdtest/Group',valid),
+ {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH016.xsd','./msxsdtest/Group',valid),
STResList96 = [STRes95|STResList95],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH016.xml','./msxsdtest/Group',invalid,S95),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH016.xml','./msxsdtest/Group',invalid,S95),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH017.xsd','./msxsdtest/Group',valid),
+ {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH017.xsd','./msxsdtest/Group',valid),
STResList97 = [STRes96|STResList96],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH017.xml','./msxsdtest/Group',valid,S96),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH017.xml','./msxsdtest/Group',valid,S96),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH018.xsd','./msxsdtest/Group',valid),
+ {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH018.xsd','./msxsdtest/Group',valid),
STResList98 = [STRes97|STResList97],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH018.xml','./msxsdtest/Group',valid,S97),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH018.xml','./msxsdtest/Group',valid,S97),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH019.xsd','./msxsdtest/Group',valid),
+ {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH019.xsd','./msxsdtest/Group',valid),
STResList99 = [STRes98|STResList98],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH019.xml','./msxsdtest/Group',invalid,S98),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH019.xml','./msxsdtest/Group',invalid,S98),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH020.xsd','./msxsdtest/Group',invalid),
+ {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH020.xsd','./msxsdtest/Group',invalid),
STResList100 = [STRes99|STResList99],
- ?line {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH021.xsd','./msxsdtest/Group',valid),
+ {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH021.xsd','./msxsdtest/Group',valid),
STResList101 = [STRes100|STResList100],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH021.xml','./msxsdtest/Group',valid,S100),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupH021.xml','./msxsdtest/Group',valid,S100),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH022.xsd','./msxsdtest/Group',invalid),
+ {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH022.xsd','./msxsdtest/Group',invalid),
STResList102 = [STRes101|STResList101],
- ?line {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH023.xsd','./msxsdtest/Group',invalid),
+ {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH023.xsd','./msxsdtest/Group',invalid),
STResList103 = [STRes102|STResList102],
- ?line {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH024.xsd','./msxsdtest/Group',invalid),
+ {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH024.xsd','./msxsdtest/Group',invalid),
STResList104 = [STRes103|STResList103],
- ?line {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH025.xsd','./msxsdtest/Group',invalid),
+ {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupH025.xsd','./msxsdtest/Group',invalid),
STResList105 = [STRes104|STResList104],
- ?line {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI001.xsd','./msxsdtest/Group',valid),
+ {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI001.xsd','./msxsdtest/Group',valid),
STResList106 = [STRes105|STResList105],
- ?line {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI002.xsd','./msxsdtest/Group',invalid),
+ {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI002.xsd','./msxsdtest/Group',invalid),
STResList107 = [STRes106|STResList106],
- ?line {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI003.xsd','./msxsdtest/Group',valid),
+ {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI003.xsd','./msxsdtest/Group',valid),
STResList108 = [STRes107|STResList107],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupI003.xml','./msxsdtest/Group',invalid,S107),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupI003.xml','./msxsdtest/Group',invalid,S107),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI004.xsd','./msxsdtest/Group',valid),
+ {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI004.xsd','./msxsdtest/Group',valid),
STResList109 = [STRes108|STResList108],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupI004.xml','./msxsdtest/Group',valid,S108),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupI004.xml','./msxsdtest/Group',valid,S108),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI005.xsd','./msxsdtest/Group',valid),
+ {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupI005.xsd','./msxsdtest/Group',valid),
STResList110 = [STRes109|STResList109],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupI005.xml','./msxsdtest/Group',invalid,S109),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupI005.xml','./msxsdtest/Group',invalid,S109),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ001.xsd','./msxsdtest/Group',valid),
+ {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ001.xsd','./msxsdtest/Group',valid),
STResList111 = [STRes110|STResList110],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ001.xml','./msxsdtest/Group',valid,S110),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ001.xml','./msxsdtest/Group',valid,S110),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ002.xsd','./msxsdtest/Group',valid),
+ {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ002.xsd','./msxsdtest/Group',valid),
STResList112 = [STRes111|STResList111],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ002.xml','./msxsdtest/Group',valid,S111),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ002.xml','./msxsdtest/Group',valid,S111),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ003.xsd','./msxsdtest/Group',valid),
+ {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ003.xsd','./msxsdtest/Group',valid),
STResList113 = [STRes112|STResList112],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ003.xml','./msxsdtest/Group',invalid,S112),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ003.xml','./msxsdtest/Group',invalid,S112),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ004.xsd','./msxsdtest/Group',valid),
+ {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ004.xsd','./msxsdtest/Group',valid),
STResList114 = [STRes113|STResList113],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ004.xml','./msxsdtest/Group',valid,S113),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ004.xml','./msxsdtest/Group',valid,S113),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ005.xsd','./msxsdtest/Group',valid),
+ {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ005.xsd','./msxsdtest/Group',valid),
STResList115 = [STRes114|STResList114],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ005.xml','./msxsdtest/Group',valid,S114),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ005.xml','./msxsdtest/Group',valid,S114),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ006.xsd','./msxsdtest/Group',valid),
+ {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ006.xsd','./msxsdtest/Group',valid),
STResList116 = [STRes115|STResList115],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ006.xml','./msxsdtest/Group',invalid,S115),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ006.xml','./msxsdtest/Group',invalid,S115),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ007.xsd','./msxsdtest/Group',valid),
+ {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ007.xsd','./msxsdtest/Group',valid),
STResList117 = [STRes116|STResList116],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ007.xml','./msxsdtest/Group',valid,S116),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ007.xml','./msxsdtest/Group',valid,S116),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ008.xsd','./msxsdtest/Group',valid),
+ {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ008.xsd','./msxsdtest/Group',valid),
STResList118 = [STRes117|STResList117],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ008.xml','./msxsdtest/Group',invalid,S117),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ008.xml','./msxsdtest/Group',invalid,S117),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ009.xsd','./msxsdtest/Group',valid),
+ {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ009.xsd','./msxsdtest/Group',valid),
STResList119 = [STRes118|STResList118],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ009.xml','./msxsdtest/Group',valid,S118),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ009.xml','./msxsdtest/Group',valid,S118),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ010.xsd','./msxsdtest/Group',valid),
+ {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ010.xsd','./msxsdtest/Group',valid),
STResList120 = [STRes119|STResList119],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ010.xml','./msxsdtest/Group',invalid,S119),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ010.xml','./msxsdtest/Group',invalid,S119),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes120,S120} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ011.xsd','./msxsdtest/Group',valid),
+ {STRes120,S120} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ011.xsd','./msxsdtest/Group',valid),
STResList121 = [STRes120|STResList120],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ011.xml','./msxsdtest/Group',valid,S120),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ011.xml','./msxsdtest/Group',valid,S120),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ012.xsd','./msxsdtest/Group',valid),
+ {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ012.xsd','./msxsdtest/Group',valid),
STResList122 = [STRes121|STResList121],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ012.xml','./msxsdtest/Group',invalid,S121),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ012.xml','./msxsdtest/Group',invalid,S121),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ013.xsd','./msxsdtest/Group',valid),
+ {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ013.xsd','./msxsdtest/Group',valid),
STResList123 = [STRes122|STResList122],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ013.xml','./msxsdtest/Group',invalid,S122),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ013.xml','./msxsdtest/Group',invalid,S122),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes123,S123} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ014.xsd','./msxsdtest/Group',valid),
+ {STRes123,S123} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ014.xsd','./msxsdtest/Group',valid),
STResList124 = [STRes123|STResList123],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ014.xml','./msxsdtest/Group',valid,S123),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ014.xml','./msxsdtest/Group',valid,S123),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ015.xsd','./msxsdtest/Group',valid),
+ {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ015.xsd','./msxsdtest/Group',valid),
STResList125 = [STRes124|STResList124],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ015.xml','./msxsdtest/Group',invalid,S124),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ015.xml','./msxsdtest/Group',invalid,S124),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes125,S125} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ016.xsd','./msxsdtest/Group',valid),
+ {STRes125,S125} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ016.xsd','./msxsdtest/Group',valid),
STResList126 = [STRes125|STResList125],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ016.xml','./msxsdtest/Group',invalid,S125),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ016.xml','./msxsdtest/Group',invalid,S125),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ017.xsd','./msxsdtest/Group',valid),
+ {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ017.xsd','./msxsdtest/Group',valid),
STResList127 = [STRes126|STResList126],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ017.xml','./msxsdtest/Group',valid,S126),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ017.xml','./msxsdtest/Group',valid,S126),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ018.xsd','./msxsdtest/Group',valid),
+ {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ018.xsd','./msxsdtest/Group',valid),
STResList128 = [STRes127|STResList127],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ018.xml','./msxsdtest/Group',valid,S127),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ018.xml','./msxsdtest/Group',valid,S127),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ019.xsd','./msxsdtest/Group',valid),
+ {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ019.xsd','./msxsdtest/Group',valid),
STResList129 = [STRes128|STResList128],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ019.xml','./msxsdtest/Group',invalid,S128),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ019.xml','./msxsdtest/Group',invalid,S128),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes129,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ020.xsd','./msxsdtest/Group',invalid),
+ {STRes129,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ020.xsd','./msxsdtest/Group',invalid),
STResList130 = [STRes129|STResList129],
- ?line {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ021.xsd','./msxsdtest/Group',valid),
+ {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ021.xsd','./msxsdtest/Group',valid),
STResList131 = [STRes130|STResList130],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ021.xml','./msxsdtest/Group',valid,S130),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupJ021.xml','./msxsdtest/Group',valid,S130),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes131,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ022.xsd','./msxsdtest/Group',invalid),
+ {STRes131,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ022.xsd','./msxsdtest/Group',invalid),
STResList132 = [STRes131|STResList131],
- ?line {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ023.xsd','./msxsdtest/Group',invalid),
+ {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ023.xsd','./msxsdtest/Group',invalid),
STResList133 = [STRes132|STResList132],
- ?line {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ024.xsd','./msxsdtest/Group',invalid),
+ {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ024.xsd','./msxsdtest/Group',invalid),
STResList134 = [STRes133|STResList133],
- ?line {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ025.xsd','./msxsdtest/Group',invalid),
+ {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupJ025.xsd','./msxsdtest/Group',invalid),
STResList135 = [STRes134|STResList134],
- ?line {STRes135,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK001.xsd','./msxsdtest/Group',valid),
+ {STRes135,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK001.xsd','./msxsdtest/Group',valid),
STResList136 = [STRes135|STResList135],
- ?line {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK002.xsd','./msxsdtest/Group',invalid),
+ {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK002.xsd','./msxsdtest/Group',invalid),
STResList137 = [STRes136|STResList136],
- ?line {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK003.xsd','./msxsdtest/Group',valid),
+ {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK003.xsd','./msxsdtest/Group',valid),
STResList138 = [STRes137|STResList137],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupK003.xml','./msxsdtest/Group',invalid,S137),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupK003.xml','./msxsdtest/Group',invalid,S137),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK004.xsd','./msxsdtest/Group',valid),
+ {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK004.xsd','./msxsdtest/Group',valid),
STResList139 = [STRes138|STResList138],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupK004.xml','./msxsdtest/Group',valid,S138),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupK004.xml','./msxsdtest/Group',valid,S138),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK005.xsd','./msxsdtest/Group',valid),
+ {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupK005.xsd','./msxsdtest/Group',valid),
STResList140 = [STRes139|STResList139],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupK005.xml','./msxsdtest/Group',invalid,S139),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupK005.xml','./msxsdtest/Group',invalid,S139),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL001.xsd','./msxsdtest/Group',valid),
+ {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL001.xsd','./msxsdtest/Group',valid),
STResList141 = [STRes140|STResList140],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL001.xml','./msxsdtest/Group',valid,S140),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL001.xml','./msxsdtest/Group',valid,S140),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL002.xsd','./msxsdtest/Group',valid),
+ {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL002.xsd','./msxsdtest/Group',valid),
STResList142 = [STRes141|STResList141],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL002.xml','./msxsdtest/Group',valid,S141),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL002.xml','./msxsdtest/Group',valid,S141),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL003.xsd','./msxsdtest/Group',valid),
+ {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL003.xsd','./msxsdtest/Group',valid),
STResList143 = [STRes142|STResList142],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL003.xml','./msxsdtest/Group',invalid,S142),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL003.xml','./msxsdtest/Group',invalid,S142),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL004.xsd','./msxsdtest/Group',valid),
+ {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL004.xsd','./msxsdtest/Group',valid),
STResList144 = [STRes143|STResList143],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL004.xml','./msxsdtest/Group',valid,S143),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL004.xml','./msxsdtest/Group',valid,S143),
ITResList83 = [ITRes82|ITResList82],
- ?line {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL005.xsd','./msxsdtest/Group',valid),
+ {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL005.xsd','./msxsdtest/Group',valid),
STResList145 = [STRes144|STResList144],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL005.xml','./msxsdtest/Group',valid,S144),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL005.xml','./msxsdtest/Group',valid,S144),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL006.xsd','./msxsdtest/Group',valid),
+ {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL006.xsd','./msxsdtest/Group',valid),
STResList146 = [STRes145|STResList145],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL006.xml','./msxsdtest/Group',invalid,S145),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL006.xml','./msxsdtest/Group',invalid,S145),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL007.xsd','./msxsdtest/Group',valid),
+ {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL007.xsd','./msxsdtest/Group',valid),
STResList147 = [STRes146|STResList146],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL007.xml','./msxsdtest/Group',valid,S146),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL007.xml','./msxsdtest/Group',valid,S146),
ITResList86 = [ITRes85|ITResList85],
- ?line {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL008.xsd','./msxsdtest/Group',valid),
+ {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL008.xsd','./msxsdtest/Group',valid),
STResList148 = [STRes147|STResList147],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL008.xml','./msxsdtest/Group',invalid,S147),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL008.xml','./msxsdtest/Group',invalid,S147),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL009.xsd','./msxsdtest/Group',valid),
+ {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL009.xsd','./msxsdtest/Group',valid),
STResList149 = [STRes148|STResList148],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL009.xml','./msxsdtest/Group',valid,S148),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL009.xml','./msxsdtest/Group',valid,S148),
ITResList88 = [ITRes87|ITResList87],
- ?line {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL010.xsd','./msxsdtest/Group',valid),
+ {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL010.xsd','./msxsdtest/Group',valid),
STResList150 = [STRes149|STResList149],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL010.xml','./msxsdtest/Group',invalid,S149),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL010.xml','./msxsdtest/Group',invalid,S149),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL011.xsd','./msxsdtest/Group',valid),
+ {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL011.xsd','./msxsdtest/Group',valid),
STResList151 = [STRes150|STResList150],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL011.xml','./msxsdtest/Group',valid,S150),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL011.xml','./msxsdtest/Group',valid,S150),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes151,S151} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL012.xsd','./msxsdtest/Group',valid),
+ {STRes151,S151} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL012.xsd','./msxsdtest/Group',valid),
STResList152 = [STRes151|STResList151],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL012.xml','./msxsdtest/Group',invalid,S151),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL012.xml','./msxsdtest/Group',invalid,S151),
ITResList91 = [ITRes90|ITResList90],
- ?line {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL013.xsd','./msxsdtest/Group',valid),
+ {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL013.xsd','./msxsdtest/Group',valid),
STResList153 = [STRes152|STResList152],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL013.xml','./msxsdtest/Group',invalid,S152),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL013.xml','./msxsdtest/Group',invalid,S152),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL014.xsd','./msxsdtest/Group',valid),
+ {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL014.xsd','./msxsdtest/Group',valid),
STResList154 = [STRes153|STResList153],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL014.xml','./msxsdtest/Group',valid,S153),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL014.xml','./msxsdtest/Group',valid,S153),
ITResList93 = [ITRes92|ITResList92],
- ?line {STRes154,S154} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL015.xsd','./msxsdtest/Group',valid),
+ {STRes154,S154} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL015.xsd','./msxsdtest/Group',valid),
STResList155 = [STRes154|STResList154],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL015.xml','./msxsdtest/Group',invalid,S154),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL015.xml','./msxsdtest/Group',invalid,S154),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL016.xsd','./msxsdtest/Group',valid),
+ {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL016.xsd','./msxsdtest/Group',valid),
STResList156 = [STRes155|STResList155],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL016.xml','./msxsdtest/Group',invalid,S155),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL016.xml','./msxsdtest/Group',invalid,S155),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL017.xsd','./msxsdtest/Group',valid),
+ {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL017.xsd','./msxsdtest/Group',valid),
STResList157 = [STRes156|STResList156],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL017.xml','./msxsdtest/Group',valid,S156),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL017.xml','./msxsdtest/Group',valid,S156),
ITResList96 = [ITRes95|ITResList95],
- ?line {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL018.xsd','./msxsdtest/Group',valid),
+ {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL018.xsd','./msxsdtest/Group',valid),
STResList158 = [STRes157|STResList157],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL018.xml','./msxsdtest/Group',valid,S157),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL018.xml','./msxsdtest/Group',valid,S157),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL019.xsd','./msxsdtest/Group',valid),
+ {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL019.xsd','./msxsdtest/Group',valid),
STResList159 = [STRes158|STResList158],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL019.xml','./msxsdtest/Group',invalid,S158),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL019.xml','./msxsdtest/Group',invalid,S158),
ITResList98 = [ITRes97|ITResList97],
- ?line {STRes159,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL020.xsd','./msxsdtest/Group',invalid),
+ {STRes159,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL020.xsd','./msxsdtest/Group',invalid),
STResList160 = [STRes159|STResList159],
- ?line {STRes160,S160} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL021.xsd','./msxsdtest/Group',valid),
+ {STRes160,S160} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL021.xsd','./msxsdtest/Group',valid),
STResList161 = [STRes160|STResList160],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL021.xml','./msxsdtest/Group',valid,S160),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupL021.xml','./msxsdtest/Group',valid,S160),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes161,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL022.xsd','./msxsdtest/Group',invalid),
+ {STRes161,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL022.xsd','./msxsdtest/Group',invalid),
STResList162 = [STRes161|STResList161],
- ?line {STRes162,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL023.xsd','./msxsdtest/Group',invalid),
+ {STRes162,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL023.xsd','./msxsdtest/Group',invalid),
STResList163 = [STRes162|STResList162],
- ?line {STRes163,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL024.xsd','./msxsdtest/Group',invalid),
+ {STRes163,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL024.xsd','./msxsdtest/Group',invalid),
STResList164 = [STRes163|STResList163],
- ?line {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL025.xsd','./msxsdtest/Group',invalid),
+ {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupL025.xsd','./msxsdtest/Group',invalid),
STResList165 = [STRes164|STResList164],
- ?line {STRes165,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM001.xsd','./msxsdtest/Group',valid),
+ {STRes165,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM001.xsd','./msxsdtest/Group',valid),
STResList166 = [STRes165|STResList165],
- ?line {STRes166,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM002.xsd','./msxsdtest/Group',invalid),
+ {STRes166,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM002.xsd','./msxsdtest/Group',invalid),
STResList167 = [STRes166|STResList166],
- ?line {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM003.xsd','./msxsdtest/Group',valid),
+ {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM003.xsd','./msxsdtest/Group',valid),
STResList168 = [STRes167|STResList167],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupM003.xml','./msxsdtest/Group',invalid,S167),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupM003.xml','./msxsdtest/Group',invalid,S167),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM004.xsd','./msxsdtest/Group',valid),
+ {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM004.xsd','./msxsdtest/Group',valid),
STResList169 = [STRes168|STResList168],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupM004.xml','./msxsdtest/Group',valid,S168),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupM004.xml','./msxsdtest/Group',valid,S168),
ITResList101 = [ITRes100|ITResList100],
- ?line {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM005.xsd','./msxsdtest/Group',valid),
+ {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupM005.xsd','./msxsdtest/Group',valid),
STResList170 = [STRes169|STResList169],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupM005.xml','./msxsdtest/Group',invalid,S169),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupM005.xml','./msxsdtest/Group',invalid,S169),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN001.xsd','./msxsdtest/Group',valid),
+ {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN001.xsd','./msxsdtest/Group',valid),
STResList171 = [STRes170|STResList170],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN001.xml','./msxsdtest/Group',valid,S170),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN001.xml','./msxsdtest/Group',valid,S170),
ITResList103 = [ITRes102|ITResList102],
- ?line {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN002.xsd','./msxsdtest/Group',valid),
+ {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN002.xsd','./msxsdtest/Group',valid),
STResList172 = [STRes171|STResList171],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN002.xml','./msxsdtest/Group',valid,S171),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN002.xml','./msxsdtest/Group',valid,S171),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN003.xsd','./msxsdtest/Group',valid),
+ {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN003.xsd','./msxsdtest/Group',valid),
STResList173 = [STRes172|STResList172],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN003.xml','./msxsdtest/Group',invalid,S172),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN003.xml','./msxsdtest/Group',invalid,S172),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN004.xsd','./msxsdtest/Group',valid),
+ {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN004.xsd','./msxsdtest/Group',valid),
STResList174 = [STRes173|STResList173],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN004.xml','./msxsdtest/Group',valid,S173),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN004.xml','./msxsdtest/Group',valid,S173),
ITResList106 = [ITRes105|ITResList105],
- ?line {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN005.xsd','./msxsdtest/Group',valid),
+ {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN005.xsd','./msxsdtest/Group',valid),
STResList175 = [STRes174|STResList174],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN005.xml','./msxsdtest/Group',valid,S174),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN005.xml','./msxsdtest/Group',valid,S174),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN006.xsd','./msxsdtest/Group',valid),
+ {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN006.xsd','./msxsdtest/Group',valid),
STResList176 = [STRes175|STResList175],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN006.xml','./msxsdtest/Group',invalid,S175),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN006.xml','./msxsdtest/Group',invalid,S175),
ITResList108 = [ITRes107|ITResList107],
- ?line {STRes176,S176} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN007.xsd','./msxsdtest/Group',valid),
+ {STRes176,S176} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN007.xsd','./msxsdtest/Group',valid),
STResList177 = [STRes176|STResList176],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN007.xml','./msxsdtest/Group',valid,S176),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN007.xml','./msxsdtest/Group',valid,S176),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN008.xsd','./msxsdtest/Group',valid),
+ {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN008.xsd','./msxsdtest/Group',valid),
STResList178 = [STRes177|STResList177],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN008.xml','./msxsdtest/Group',invalid,S177),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN008.xml','./msxsdtest/Group',invalid,S177),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN009.xsd','./msxsdtest/Group',valid),
+ {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN009.xsd','./msxsdtest/Group',valid),
STResList179 = [STRes178|STResList178],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN009.xml','./msxsdtest/Group',valid,S178),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN009.xml','./msxsdtest/Group',valid,S178),
ITResList111 = [ITRes110|ITResList110],
- ?line {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN010.xsd','./msxsdtest/Group',valid),
+ {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN010.xsd','./msxsdtest/Group',valid),
STResList180 = [STRes179|STResList179],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN010.xml','./msxsdtest/Group',invalid,S179),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN010.xml','./msxsdtest/Group',invalid,S179),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN011.xsd','./msxsdtest/Group',valid),
+ {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN011.xsd','./msxsdtest/Group',valid),
STResList181 = [STRes180|STResList180],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN011.xml','./msxsdtest/Group',valid,S180),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN011.xml','./msxsdtest/Group',valid,S180),
ITResList113 = [ITRes112|ITResList112],
- ?line {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN012.xsd','./msxsdtest/Group',valid),
+ {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN012.xsd','./msxsdtest/Group',valid),
STResList182 = [STRes181|STResList181],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN012.xml','./msxsdtest/Group',invalid,S181),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN012.xml','./msxsdtest/Group',invalid,S181),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN013.xsd','./msxsdtest/Group',valid),
+ {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN013.xsd','./msxsdtest/Group',valid),
STResList183 = [STRes182|STResList182],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN013.xml','./msxsdtest/Group',invalid,S182),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN013.xml','./msxsdtest/Group',invalid,S182),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN014.xsd','./msxsdtest/Group',valid),
+ {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN014.xsd','./msxsdtest/Group',valid),
STResList184 = [STRes183|STResList183],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN014.xml','./msxsdtest/Group',valid,S183),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN014.xml','./msxsdtest/Group',valid,S183),
ITResList116 = [ITRes115|ITResList115],
- ?line {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN015.xsd','./msxsdtest/Group',valid),
+ {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN015.xsd','./msxsdtest/Group',valid),
STResList185 = [STRes184|STResList184],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN015.xml','./msxsdtest/Group',invalid,S184),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN015.xml','./msxsdtest/Group',invalid,S184),
ITResList117 = [ITRes116|ITResList116],
- ?line {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN016.xsd','./msxsdtest/Group',valid),
+ {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN016.xsd','./msxsdtest/Group',valid),
STResList186 = [STRes185|STResList185],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN016.xml','./msxsdtest/Group',invalid,S185),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN016.xml','./msxsdtest/Group',invalid,S185),
ITResList118 = [ITRes117|ITResList117],
- ?line {STRes186,S186} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN017.xsd','./msxsdtest/Group',valid),
+ {STRes186,S186} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN017.xsd','./msxsdtest/Group',valid),
STResList187 = [STRes186|STResList186],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN017.xml','./msxsdtest/Group',valid,S186),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN017.xml','./msxsdtest/Group',valid,S186),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes187,S187} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN018.xsd','./msxsdtest/Group',valid),
+ {STRes187,S187} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN018.xsd','./msxsdtest/Group',valid),
STResList188 = [STRes187|STResList187],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN018.xml','./msxsdtest/Group',valid,S187),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN018.xml','./msxsdtest/Group',valid,S187),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes188,S188} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN019.xsd','./msxsdtest/Group',valid),
+ {STRes188,S188} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN019.xsd','./msxsdtest/Group',valid),
STResList189 = [STRes188|STResList188],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN019.xml','./msxsdtest/Group',invalid,S188),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN019.xml','./msxsdtest/Group',invalid,S188),
ITResList121 = [ITRes120|ITResList120],
- ?line {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN020.xsd','./msxsdtest/Group',invalid),
+ {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN020.xsd','./msxsdtest/Group',invalid),
STResList190 = [STRes189|STResList189],
- ?line {STRes190,S190} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN021.xsd','./msxsdtest/Group',valid),
+ {STRes190,S190} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN021.xsd','./msxsdtest/Group',valid),
STResList191 = [STRes190|STResList190],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN021.xml','./msxsdtest/Group',valid,S190),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupN021.xml','./msxsdtest/Group',valid,S190),
ITResList122 = [ITRes121|ITResList121],
- ?line {STRes191,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN022.xsd','./msxsdtest/Group',invalid),
+ {STRes191,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN022.xsd','./msxsdtest/Group',invalid),
STResList192 = [STRes191|STResList191],
- ?line {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN023.xsd','./msxsdtest/Group',invalid),
+ {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN023.xsd','./msxsdtest/Group',invalid),
STResList193 = [STRes192|STResList192],
- ?line {STRes193,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN024.xsd','./msxsdtest/Group',invalid),
+ {STRes193,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN024.xsd','./msxsdtest/Group',invalid),
STResList194 = [STRes193|STResList193],
- ?line {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN025.xsd','./msxsdtest/Group',invalid),
+ {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupN025.xsd','./msxsdtest/Group',invalid),
STResList195 = [STRes194|STResList194],
- ?line {STRes195,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO001.xsd','./msxsdtest/Group',valid),
+ {STRes195,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO001.xsd','./msxsdtest/Group',valid),
STResList196 = [STRes195|STResList195],
- ?line {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO002.xsd','./msxsdtest/Group',invalid),
+ {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO002.xsd','./msxsdtest/Group',invalid),
STResList197 = [STRes196|STResList196],
- ?line {STRes197,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO003.xsd','./msxsdtest/Group',invalid),
+ {STRes197,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO003.xsd','./msxsdtest/Group',invalid),
STResList198 = [STRes197|STResList197],
- ?line {STRes198,S198} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO004.xsd','./msxsdtest/Group',valid),
+ {STRes198,S198} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO004.xsd','./msxsdtest/Group',valid),
STResList199 = [STRes198|STResList198],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO004.xml','./msxsdtest/Group',valid,S198),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO004.xml','./msxsdtest/Group',valid,S198),
ITResList123 = [ITRes122|ITResList122],
- ?line {STRes199,S199} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO005.xsd','./msxsdtest/Group',valid),
+ {STRes199,S199} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO005.xsd','./msxsdtest/Group',valid),
STResList200 = [STRes199|STResList199],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO005.xml','./msxsdtest/Group',invalid,S199),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO005.xml','./msxsdtest/Group',invalid,S199),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes200,S200} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO006.xsd','./msxsdtest/Group',valid),
+ {STRes200,S200} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO006.xsd','./msxsdtest/Group',valid),
STResList201 = [STRes200|STResList200],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO006.xml','./msxsdtest/Group',valid,S200),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO006.xml','./msxsdtest/Group',valid,S200),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes201,S201} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO007.xsd','./msxsdtest/Group',valid),
+ {STRes201,S201} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO007.xsd','./msxsdtest/Group',valid),
STResList202 = [STRes201|STResList201],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO007.xml','./msxsdtest/Group',invalid,S201),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO007.xml','./msxsdtest/Group',invalid,S201),
ITResList126 = [ITRes125|ITResList125],
- ?line {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO008.xsd','./msxsdtest/Group',valid),
+ {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO008.xsd','./msxsdtest/Group',valid),
STResList203 = [STRes202|STResList202],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO008.xml','./msxsdtest/Group',valid,S202),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO008.xml','./msxsdtest/Group',valid,S202),
ITResList127 = [ITRes126|ITResList126],
- ?line {STRes203,S203} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO009.xsd','./msxsdtest/Group',valid),
+ {STRes203,S203} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO009.xsd','./msxsdtest/Group',valid),
STResList204 = [STRes203|STResList203],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO009.xml','./msxsdtest/Group',invalid,S203),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Group/groupO009.xml','./msxsdtest/Group',invalid,S203),
ITResList128 = [ITRes127|ITResList127],
- ?line {STRes204,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO010.xsd','./msxsdtest/Group',invalid),
+ {STRes204,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO010.xsd','./msxsdtest/Group',invalid),
STResList205 = [STRes204|STResList204],
- ?line {STRes205,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO011.xsd','./msxsdtest/Group',invalid),
+ {STRes205,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO011.xsd','./msxsdtest/Group',invalid),
STResList206 = [STRes205|STResList205],
- ?line {STRes206,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO012.xsd','./msxsdtest/Group',invalid),
+ {STRes206,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO012.xsd','./msxsdtest/Group',invalid),
STResList207 = [STRes206|STResList206],
- ?line {STRes207,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO013.xsd','./msxsdtest/Group',invalid),
+ {STRes207,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO013.xsd','./msxsdtest/Group',invalid),
STResList208 = [STRes207|STResList207],
- ?line {STRes208,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO014.xsd','./msxsdtest/Group',valid),
+ {STRes208,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO014.xsd','./msxsdtest/Group',valid),
STResList209 = [STRes208|STResList208],
- ?line {STRes209,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO015.xsd','./msxsdtest/Group',invalid),
+ {STRes209,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO015.xsd','./msxsdtest/Group',invalid),
STResList210 = [STRes209|STResList209],
- ?line {STRes210,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO016.xsd','./msxsdtest/Group',invalid),
+ {STRes210,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO016.xsd','./msxsdtest/Group',invalid),
STResList211 = [STRes210|STResList210],
- ?line {STRes211,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO017.xsd','./msxsdtest/Group',invalid),
+ {STRes211,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO017.xsd','./msxsdtest/Group',invalid),
STResList212 = [STRes211|STResList211],
- ?line {STRes212,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO018.xsd','./msxsdtest/Group',invalid),
+ {STRes212,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO018.xsd','./msxsdtest/Group',invalid),
STResList213 = [STRes212|STResList212],
- ?line {STRes213,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO019.xsd','./msxsdtest/Group',invalid),
+ {STRes213,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO019.xsd','./msxsdtest/Group',invalid),
STResList214 = [STRes213|STResList213],
- ?line {STRes214,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO020.xsd','./msxsdtest/Group',invalid),
+ {STRes214,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO020.xsd','./msxsdtest/Group',invalid),
STResList215 = [STRes214|STResList214],
- ?line {STRes215,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO021.xsd','./msxsdtest/Group',invalid),
+ {STRes215,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO021.xsd','./msxsdtest/Group',invalid),
STResList216 = [STRes215|STResList215],
- ?line {STRes216,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO022.xsd','./msxsdtest/Group',invalid),
+ {STRes216,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO022.xsd','./msxsdtest/Group',invalid),
STResList217 = [STRes216|STResList216],
- ?line {STRes217,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO023.xsd','./msxsdtest/Group',invalid),
+ {STRes217,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO023.xsd','./msxsdtest/Group',invalid),
STResList218 = [STRes217|STResList217],
- ?line {STRes218,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO024.xsd','./msxsdtest/Group',invalid),
+ {STRes218,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO024.xsd','./msxsdtest/Group',invalid),
STResList219 = [STRes218|STResList218],
- ?line {STRes219,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO025.xsd','./msxsdtest/Group',invalid),
+ {STRes219,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO025.xsd','./msxsdtest/Group',invalid),
STResList220 = [STRes219|STResList219],
- ?line {STRes220,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO026.xsd','./msxsdtest/Group',invalid),
+ {STRes220,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO026.xsd','./msxsdtest/Group',invalid),
STResList221 = [STRes220|STResList220],
- ?line {STRes221,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO027.xsd','./msxsdtest/Group',invalid),
+ {STRes221,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Group/groupO027.xsd','./msxsdtest/Group',invalid),
STResList222 = [STRes221|STResList221],
@@ -6899,5332 +6887,5332 @@ model_group(Config) when is_list(Config) ->
idc_(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_language.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S3),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_language.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S3),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S4),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S4),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S5),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S5),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S6),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S6),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S7),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S7),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S8),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S8),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S9),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S9),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S10),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S10),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S11),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S11),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S12),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S12),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S13),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S13),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S14),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S14),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S15),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S15),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S16),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S16),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S17),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S17),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S18),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S18),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S19),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S19),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S20),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S20),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S21),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S21),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S22),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S22),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S23),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S23),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S24),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S24),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S25),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S25),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S26),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S26),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S27),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S27),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S28),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S28),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S29),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S29),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S30),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S30),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S31),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S31),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S32),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S32),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S33),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S33),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S34),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S34),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S35),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S35),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S36),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S36),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList38 = [STRes37|STResList37],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S37),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S37),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList39 = [STRes38|STResList38],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S38),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S38),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S39),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_string_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S39),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S40),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S40),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList42 = [STRes41|STResList41],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S41),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S41),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList43 = [STRes42|STResList42],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S42),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S42),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList44 = [STRes43|STResList43],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_language.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S43),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_language.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S43),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList45 = [STRes44|STResList44],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S44),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S44),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList46 = [STRes45|STResList45],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S45),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S45),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList47 = [STRes46|STResList46],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S46),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S46),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S47),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S47),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList49 = [STRes48|STResList48],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S48),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S48),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S49),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S49),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList51 = [STRes50|STResList50],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S50),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S50),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList52 = [STRes51|STResList51],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S51),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S51),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S52),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S52),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList54 = [STRes53|STResList53],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S53),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S53),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList55 = [STRes54|STResList54],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S54),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S54),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList56 = [STRes55|STResList55],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S55),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S55),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList57 = [STRes56|STResList56],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S56),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S56),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList58 = [STRes57|STResList57],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S57),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S57),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList59 = [STRes58|STResList58],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S58),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S58),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S59),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S59),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList61 = [STRes60|STResList60],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S60),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S60),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList62 = [STRes61|STResList61],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S61),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S61),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList63 = [STRes62|STResList62],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S62),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S62),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S63),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S63),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList65 = [STRes64|STResList64],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S64),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S64),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S65),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S65),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList67 = [STRes66|STResList66],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S66),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S66),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList68 = [STRes67|STResList67],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S67),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S67),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList69 = [STRes68|STResList68],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S68),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S68),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList70 = [STRes69|STResList69],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S69),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S69),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList71 = [STRes70|STResList70],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S70),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S70),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList72 = [STRes71|STResList71],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S71),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S71),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList73 = [STRes72|STResList72],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S72),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S72),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList74 = [STRes73|STResList73],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S73),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S73),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList75 = [STRes74|STResList74],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S74),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S74),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList76 = [STRes75|STResList75],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S75),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S75),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList77 = [STRes76|STResList76],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S76),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S76),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList78 = [STRes77|STResList77],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S77),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S77),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList79 = [STRes78|STResList78],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S78),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S78),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList80 = [STRes79|STResList79],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S79),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_normalizedString_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S79),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList81 = [STRes80|STResList80],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S80),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S80),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList82 = [STRes81|STResList81],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S81),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S81),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList83 = [STRes82|STResList82],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S82),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S82),
ITResList83 = [ITRes82|ITResList82],
- ?line {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList84 = [STRes83|STResList83],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_language.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S83),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_language.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S83),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList85 = [STRes84|STResList84],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S84),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S84),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList86 = [STRes85|STResList85],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S85),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S85),
ITResList86 = [ITRes85|ITResList85],
- ?line {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList87 = [STRes86|STResList86],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S86),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S86),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList88 = [STRes87|STResList87],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S87),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S87),
ITResList88 = [ITRes87|ITResList87],
- ?line {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList89 = [STRes88|STResList88],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S88),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S88),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList90 = [STRes89|STResList89],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S89),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S89),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList91 = [STRes90|STResList90],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S90),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S90),
ITResList91 = [ITRes90|ITResList90],
- ?line {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList92 = [STRes91|STResList91],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S91),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S91),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList93 = [STRes92|STResList92],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S92),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S92),
ITResList93 = [ITRes92|ITResList92],
- ?line {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList94 = [STRes93|STResList93],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S93),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S93),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList95 = [STRes94|STResList94],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S94),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S94),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList96 = [STRes95|STResList95],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S95),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S95),
ITResList96 = [ITRes95|ITResList95],
- ?line {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList97 = [STRes96|STResList96],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S96),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S96),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList98 = [STRes97|STResList97],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S97),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S97),
ITResList98 = [ITRes97|ITResList97],
- ?line {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList99 = [STRes98|STResList98],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S98),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S98),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList100 = [STRes99|STResList99],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S99),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S99),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList101 = [STRes100|STResList100],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S100),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S100),
ITResList101 = [ITRes100|ITResList100],
- ?line {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList102 = [STRes101|STResList101],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S101),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S101),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes102,S102} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes102,S102} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList103 = [STRes102|STResList102],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S102),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S102),
ITResList103 = [ITRes102|ITResList102],
- ?line {STRes103,S103} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes103,S103} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList104 = [STRes103|STResList103],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S103),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S103),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList105 = [STRes104|STResList104],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S104),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S104),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList106 = [STRes105|STResList105],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S105),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S105),
ITResList106 = [ITRes105|ITResList105],
- ?line {STRes106,S106} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes106,S106} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList107 = [STRes106|STResList106],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S106),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S106),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList108 = [STRes107|STResList107],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S107),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S107),
ITResList108 = [ITRes107|ITResList107],
- ?line {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList109 = [STRes108|STResList108],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S108),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S108),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList110 = [STRes109|STResList109],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S109),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S109),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList111 = [STRes110|STResList110],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S110),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S110),
ITResList111 = [ITRes110|ITResList110],
- ?line {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList112 = [STRes111|STResList111],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S111),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S111),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList113 = [STRes112|STResList112],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S112),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S112),
ITResList113 = [ITRes112|ITResList112],
- ?line {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList114 = [STRes113|STResList113],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S113),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S113),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList115 = [STRes114|STResList114],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S114),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S114),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList116 = [STRes115|STResList115],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S115),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S115),
ITResList116 = [ITRes115|ITResList115],
- ?line {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList117 = [STRes116|STResList116],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S116),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S116),
ITResList117 = [ITRes116|ITResList116],
- ?line {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList118 = [STRes117|STResList117],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S117),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S117),
ITResList118 = [ITRes117|ITResList117],
- ?line {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList119 = [STRes118|STResList118],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S118),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S118),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList120 = [STRes119|STResList119],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S119),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_token_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S119),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes120,S120} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes120,S120} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList121 = [STRes120|STResList120],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S120),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S120),
ITResList121 = [ITRes120|ITResList120],
- ?line {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList122 = [STRes121|STResList121],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S121),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S121),
ITResList122 = [ITRes121|ITResList121],
- ?line {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList123 = [STRes122|STResList122],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S122),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S122),
ITResList123 = [ITRes122|ITResList122],
- ?line {STRes123,S123} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes123,S123} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList124 = [STRes123|STResList123],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_language.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S123),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_language.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S123),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList125 = [STRes124|STResList124],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S124),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S124),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes125,S125} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes125,S125} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList126 = [STRes125|STResList125],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S125),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S125),
ITResList126 = [ITRes125|ITResList125],
- ?line {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList127 = [STRes126|STResList126],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S126),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S126),
ITResList127 = [ITRes126|ITResList126],
- ?line {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList128 = [STRes127|STResList127],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S127),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S127),
ITResList128 = [ITRes127|ITResList127],
- ?line {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList129 = [STRes128|STResList128],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S128),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S128),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList130 = [STRes129|STResList129],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S129),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S129),
ITResList130 = [ITRes129|ITResList129],
- ?line {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList131 = [STRes130|STResList130],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S130),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S130),
ITResList131 = [ITRes130|ITResList130],
- ?line {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList132 = [STRes131|STResList131],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S131),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S131),
ITResList132 = [ITRes131|ITResList131],
- ?line {STRes132,S132} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes132,S132} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList133 = [STRes132|STResList132],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S132),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S132),
ITResList133 = [ITRes132|ITResList132],
- ?line {STRes133,S133} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes133,S133} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList134 = [STRes133|STResList133],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S133),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_language_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S133),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes134,S134} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes134,S134} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList135 = [STRes134|STResList134],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S134),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S134),
ITResList135 = [ITRes134|ITResList134],
- ?line {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList136 = [STRes135|STResList135],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S135),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S135),
ITResList136 = [ITRes135|ITResList135],
- ?line {STRes136,S136} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes136,S136} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList137 = [STRes136|STResList136],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S136),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S136),
ITResList137 = [ITRes136|ITResList136],
- ?line {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList138 = [STRes137|STResList137],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S137),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S137),
ITResList138 = [ITRes137|ITResList137],
- ?line {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList139 = [STRes138|STResList138],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S138),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S138),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList140 = [STRes139|STResList139],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S139),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S139),
ITResList140 = [ITRes139|ITResList139],
- ?line {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList141 = [STRes140|STResList140],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S140),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S140),
ITResList141 = [ITRes140|ITResList140],
- ?line {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList142 = [STRes141|STResList141],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S141),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S141),
ITResList142 = [ITRes141|ITResList141],
- ?line {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList143 = [STRes142|STResList142],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S142),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S142),
ITResList143 = [ITRes142|ITResList142],
- ?line {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList144 = [STRes143|STResList143],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S143),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S143),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList145 = [STRes144|STResList144],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S144),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S144),
ITResList145 = [ITRes144|ITResList144],
- ?line {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList146 = [STRes145|STResList145],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S145),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S145),
ITResList146 = [ITRes145|ITResList145],
- ?line {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList147 = [STRes146|STResList146],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S146),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S146),
ITResList147 = [ITRes146|ITResList146],
- ?line {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList148 = [STRes147|STResList147],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S147),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S147),
ITResList148 = [ITRes147|ITResList147],
- ?line {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList149 = [STRes148|STResList148],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S148),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_Name_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S148),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList150 = [STRes149|STResList149],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S149),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S149),
ITResList150 = [ITRes149|ITResList149],
- ?line {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList151 = [STRes150|STResList150],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S150),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S150),
ITResList151 = [ITRes150|ITResList150],
- ?line {STRes151,S151} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes151,S151} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList152 = [STRes151|STResList151],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S151),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S151),
ITResList152 = [ITRes151|ITResList151],
- ?line {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList153 = [STRes152|STResList152],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S152),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S152),
ITResList153 = [ITRes152|ITResList152],
- ?line {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList154 = [STRes153|STResList153],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S153),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S153),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes154,S154} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes154,S154} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList155 = [STRes154|STResList154],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S154),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S154),
ITResList155 = [ITRes154|ITResList154],
- ?line {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList156 = [STRes155|STResList155],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S155),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S155),
ITResList156 = [ITRes155|ITResList155],
- ?line {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList157 = [STRes156|STResList156],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S156),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S156),
ITResList157 = [ITRes156|ITResList156],
- ?line {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList158 = [STRes157|STResList157],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S157),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S157),
ITResList158 = [ITRes157|ITResList157],
- ?line {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList159 = [STRes158|STResList158],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S158),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S158),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes159,S159} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes159,S159} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList160 = [STRes159|STResList159],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S159),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S159),
ITResList160 = [ITRes159|ITResList159],
- ?line {STRes160,S160} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes160,S160} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList161 = [STRes160|STResList160],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S160),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S160),
ITResList161 = [ITRes160|ITResList160],
- ?line {STRes161,S161} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes161,S161} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList162 = [STRes161|STResList161],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S161),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S161),
ITResList162 = [ITRes161|ITResList161],
- ?line {STRes162,S162} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes162,S162} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList163 = [STRes162|STResList162],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S162),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S162),
ITResList163 = [ITRes162|ITResList162],
- ?line {STRes163,S163} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes163,S163} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList164 = [STRes163|STResList163],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S163),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NCName_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S163),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes164,S164} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes164,S164} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList165 = [STRes164|STResList164],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S164),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S164),
ITResList165 = [ITRes164|ITResList164],
- ?line {STRes165,S165} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes165,S165} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList166 = [STRes165|STResList165],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S165),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S165),
ITResList166 = [ITRes165|ITResList165],
- ?line {STRes166,S166} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes166,S166} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList167 = [STRes166|STResList166],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S166),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S166),
ITResList167 = [ITRes166|ITResList166],
- ?line {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList168 = [STRes167|STResList167],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S167),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S167),
ITResList168 = [ITRes167|ITResList167],
- ?line {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList169 = [STRes168|STResList168],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S168),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S168),
ITResList169 = [ITRes168|ITResList168],
- ?line {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList170 = [STRes169|STResList169],
- ?line ITRes169 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S169),
+ ITRes169 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S169),
ITResList170 = [ITRes169|ITResList169],
- ?line {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList171 = [STRes170|STResList170],
- ?line ITRes170 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S170),
+ ITRes170 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S170),
ITResList171 = [ITRes170|ITResList170],
- ?line {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList172 = [STRes171|STResList171],
- ?line ITRes171 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S171),
+ ITRes171 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S171),
ITResList172 = [ITRes171|ITResList171],
- ?line {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList173 = [STRes172|STResList172],
- ?line ITRes172 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S172),
+ ITRes172 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S172),
ITResList173 = [ITRes172|ITResList172],
- ?line {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList174 = [STRes173|STResList173],
- ?line ITRes173 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S173),
+ ITRes173 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S173),
ITResList174 = [ITRes173|ITResList173],
- ?line {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList175 = [STRes174|STResList174],
- ?line ITRes174 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S174),
+ ITRes174 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S174),
ITResList175 = [ITRes174|ITResList174],
- ?line {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList176 = [STRes175|STResList175],
- ?line ITRes175 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S175),
+ ITRes175 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S175),
ITResList176 = [ITRes175|ITResList175],
- ?line {STRes176,S176} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes176,S176} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList177 = [STRes176|STResList176],
- ?line ITRes176 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S176),
+ ITRes176 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S176),
ITResList177 = [ITRes176|ITResList176],
- ?line {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList178 = [STRes177|STResList177],
- ?line ITRes177 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S177),
+ ITRes177 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S177),
ITResList178 = [ITRes177|ITResList177],
- ?line {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList179 = [STRes178|STResList178],
- ?line ITRes178 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S178),
+ ITRes178 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S178),
ITResList179 = [ITRes178|ITResList178],
- ?line {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList180 = [STRes179|STResList179],
- ?line ITRes179 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S179),
+ ITRes179 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_ID_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S179),
ITResList180 = [ITRes179|ITResList179],
- ?line {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList181 = [STRes180|STResList180],
- ?line ITRes180 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S180),
+ ITRes180 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S180),
ITResList181 = [ITRes180|ITResList180],
- ?line {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList182 = [STRes181|STResList181],
- ?line ITRes181 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S181),
+ ITRes181 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S181),
ITResList182 = [ITRes181|ITResList181],
- ?line {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList183 = [STRes182|STResList182],
- ?line ITRes182 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S182),
+ ITRes182 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S182),
ITResList183 = [ITRes182|ITResList182],
- ?line {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList184 = [STRes183|STResList183],
- ?line ITRes183 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S183),
+ ITRes183 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S183),
ITResList184 = [ITRes183|ITResList183],
- ?line {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList185 = [STRes184|STResList184],
- ?line ITRes184 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S184),
+ ITRes184 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S184),
ITResList185 = [ITRes184|ITResList184],
- ?line {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList186 = [STRes185|STResList185],
- ?line ITRes185 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S185),
+ ITRes185 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S185),
ITResList186 = [ITRes185|ITResList185],
- ?line {STRes186,S186} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes186,S186} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList187 = [STRes186|STResList186],
- ?line ITRes186 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S186),
+ ITRes186 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S186),
ITResList187 = [ITRes186|ITResList186],
- ?line {STRes187,S187} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes187,S187} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList188 = [STRes187|STResList187],
- ?line ITRes187 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S187),
+ ITRes187 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S187),
ITResList188 = [ITRes187|ITResList187],
- ?line {STRes188,S188} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes188,S188} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList189 = [STRes188|STResList188],
- ?line ITRes188 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S188),
+ ITRes188 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S188),
ITResList189 = [ITRes188|ITResList188],
- ?line {STRes189,S189} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes189,S189} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList190 = [STRes189|STResList189],
- ?line ITRes189 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S189),
+ ITRes189 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S189),
ITResList190 = [ITRes189|ITResList189],
- ?line {STRes190,S190} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes190,S190} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList191 = [STRes190|STResList190],
- ?line ITRes190 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S190),
+ ITRes190 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S190),
ITResList191 = [ITRes190|ITResList190],
- ?line {STRes191,S191} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes191,S191} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList192 = [STRes191|STResList191],
- ?line ITRes191 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S191),
+ ITRes191 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S191),
ITResList192 = [ITRes191|ITResList191],
- ?line {STRes192,S192} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes192,S192} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList193 = [STRes192|STResList192],
- ?line ITRes192 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S192),
+ ITRes192 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S192),
ITResList193 = [ITRes192|ITResList192],
- ?line {STRes193,S193} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes193,S193} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList194 = [STRes193|STResList193],
- ?line ITRes193 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S193),
+ ITRes193 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S193),
ITResList194 = [ITRes193|ITResList193],
- ?line {STRes194,S194} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes194,S194} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList195 = [STRes194|STResList194],
- ?line ITRes194 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S194),
+ ITRes194 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREF_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S194),
ITResList195 = [ITRes194|ITResList194],
- ?line {STRes195,S195} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes195,S195} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList196 = [STRes195|STResList195],
- ?line ITRes195 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S195),
+ ITRes195 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S195),
ITResList196 = [ITRes195|ITResList195],
- ?line {STRes196,S196} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes196,S196} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList197 = [STRes196|STResList196],
- ?line ITRes196 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S196),
+ ITRes196 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S196),
ITResList197 = [ITRes196|ITResList196],
- ?line {STRes197,S197} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes197,S197} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList198 = [STRes197|STResList197],
- ?line ITRes197 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S197),
+ ITRes197 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S197),
ITResList198 = [ITRes197|ITResList197],
- ?line {STRes198,S198} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes198,S198} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList199 = [STRes198|STResList198],
- ?line ITRes198 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S198),
+ ITRes198 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S198),
ITResList199 = [ITRes198|ITResList198],
- ?line {STRes199,S199} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes199,S199} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList200 = [STRes199|STResList199],
- ?line ITRes199 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S199),
+ ITRes199 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S199),
ITResList200 = [ITRes199|ITResList199],
- ?line {STRes200,S200} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes200,S200} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList201 = [STRes200|STResList200],
- ?line ITRes200 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S200),
+ ITRes200 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S200),
ITResList201 = [ITRes200|ITResList200],
- ?line {STRes201,S201} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes201,S201} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList202 = [STRes201|STResList201],
- ?line ITRes201 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S201),
+ ITRes201 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S201),
ITResList202 = [ITRes201|ITResList201],
- ?line {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes202,S202} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList203 = [STRes202|STResList202],
- ?line ITRes202 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S202),
+ ITRes202 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S202),
ITResList203 = [ITRes202|ITResList202],
- ?line {STRes203,S203} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes203,S203} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList204 = [STRes203|STResList203],
- ?line ITRes203 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S203),
+ ITRes203 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_IDREFS_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S203),
ITResList204 = [ITRes203|ITResList203],
- ?line {STRes204,S204} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes204,S204} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList205 = [STRes204|STResList204],
- ?line ITRes204 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S204),
+ ITRes204 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_string.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S204),
ITResList205 = [ITRes204|ITResList204],
- ?line {STRes205,S205} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes205,S205} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList206 = [STRes205|STResList205],
- ?line ITRes205 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S205),
+ ITRes205 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S205),
ITResList206 = [ITRes205|ITResList205],
- ?line {STRes206,S206} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes206,S206} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList207 = [STRes206|STResList206],
- ?line ITRes206 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S206),
+ ITRes206 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_token.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S206),
ITResList207 = [ITRes206|ITResList206],
- ?line {STRes207,S207} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes207,S207} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList208 = [STRes207|STResList207],
- ?line ITRes207 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S207),
+ ITRes207 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S207),
ITResList208 = [ITRes207|ITResList207],
- ?line {STRes208,S208} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes208,S208} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList209 = [STRes208|STResList208],
- ?line ITRes208 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S208),
+ ITRes208 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S208),
ITResList209 = [ITRes208|ITResList208],
- ?line {STRes209,S209} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes209,S209} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList210 = [STRes209|STResList209],
- ?line ITRes209 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S209),
+ ITRes209 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S209),
ITResList210 = [ITRes209|ITResList209],
- ?line {STRes210,S210} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes210,S210} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList211 = [STRes210|STResList210],
- ?line ITRes210 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S210),
+ ITRes210 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S210),
ITResList211 = [ITRes210|ITResList210],
- ?line {STRes211,S211} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes211,S211} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList212 = [STRes211|STResList211],
- ?line ITRes211 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S211),
+ ITRes211 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S211),
ITResList212 = [ITRes211|ITResList211],
- ?line {STRes212,S212} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes212,S212} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList213 = [STRes212|STResList212],
- ?line ITRes212 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S212),
+ ITRes212 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S212),
ITResList213 = [ITRes212|ITResList212],
- ?line {STRes213,S213} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes213,S213} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList214 = [STRes213|STResList213],
- ?line ITRes213 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S213),
+ ITRes213 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S213),
ITResList214 = [ITRes213|ITResList213],
- ?line {STRes214,S214} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes214,S214} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList215 = [STRes214|STResList214],
- ?line ITRes214 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S214),
+ ITRes214 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S214),
ITResList215 = [ITRes214|ITResList214],
- ?line {STRes215,S215} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes215,S215} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList216 = [STRes215|STResList215],
- ?line ITRes215 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S215),
+ ITRes215 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S215),
ITResList216 = [ITRes215|ITResList215],
- ?line {STRes216,S216} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes216,S216} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList217 = [STRes216|STResList216],
- ?line ITRes216 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S216),
+ ITRes216 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S216),
ITResList217 = [ITRes216|ITResList216],
- ?line {STRes217,S217} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes217,S217} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList218 = [STRes217|STResList217],
- ?line ITRes217 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S217),
+ ITRes217 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S217),
ITResList218 = [ITRes217|ITResList217],
- ?line {STRes218,S218} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes218,S218} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList219 = [STRes218|STResList218],
- ?line ITRes218 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S218),
+ ITRes218 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S218),
ITResList219 = [ITRes218|ITResList218],
- ?line {STRes219,S219} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes219,S219} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList220 = [STRes219|STResList219],
- ?line ITRes219 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S219),
+ ITRes219 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S219),
ITResList220 = [ITRes219|ITResList219],
- ?line {STRes220,S220} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes220,S220} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList221 = [STRes220|STResList220],
- ?line ITRes220 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S220),
+ ITRes220 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S220),
ITResList221 = [ITRes220|ITResList220],
- ?line {STRes221,S221} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes221,S221} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList222 = [STRes221|STResList221],
- ?line ITRes221 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S221),
+ ITRes221 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S221),
ITResList222 = [ITRes221|ITResList221],
- ?line {STRes222,S222} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes222,S222} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList223 = [STRes222|STResList222],
- ?line ITRes222 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S222),
+ ITRes222 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S222),
ITResList223 = [ITRes222|ITResList222],
- ?line {STRes223,S223} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes223,S223} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList224 = [STRes223|STResList223],
- ?line ITRes223 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S223),
+ ITRes223 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S223),
ITResList224 = [ITRes223|ITResList223],
- ?line {STRes224,S224} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes224,S224} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList225 = [STRes224|STResList224],
- ?line ITRes224 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S224),
+ ITRes224 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S224),
ITResList225 = [ITRes224|ITResList224],
- ?line {STRes225,S225} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes225,S225} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList226 = [STRes225|STResList225],
- ?line ITRes225 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S225),
+ ITRes225 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S225),
ITResList226 = [ITRes225|ITResList225],
- ?line {STRes226,S226} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes226,S226} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList227 = [STRes226|STResList226],
- ?line ITRes226 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S226),
+ ITRes226 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S226),
ITResList227 = [ITRes226|ITResList226],
- ?line {STRes227,S227} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes227,S227} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList228 = [STRes227|STResList227],
- ?line ITRes227 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S227),
+ ITRes227 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S227),
ITResList228 = [ITRes227|ITResList227],
- ?line {STRes228,S228} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes228,S228} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList229 = [STRes228|STResList228],
- ?line ITRes228 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S228),
+ ITRes228 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S228),
ITResList229 = [ITRes228|ITResList228],
- ?line {STRes229,S229} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes229,S229} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList230 = [STRes229|STResList229],
- ?line ITRes229 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S229),
+ ITRes229 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S229),
ITResList230 = [ITRes229|ITResList229],
- ?line {STRes230,S230} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes230,S230} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList231 = [STRes230|STResList230],
- ?line ITRes230 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S230),
+ ITRes230 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S230),
ITResList231 = [ITRes230|ITResList230],
- ?line {STRes231,S231} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes231,S231} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList232 = [STRes231|STResList231],
- ?line ITRes231 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S231),
+ ITRes231 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S231),
ITResList232 = [ITRes231|ITResList231],
- ?line {STRes232,S232} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes232,S232} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList233 = [STRes232|STResList232],
- ?line ITRes232 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S232),
+ ITRes232 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S232),
ITResList233 = [ITRes232|ITResList232],
- ?line {STRes233,S233} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes233,S233} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList234 = [STRes233|STResList233],
- ?line ITRes233 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S233),
+ ITRes233 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S233),
ITResList234 = [ITRes233|ITResList233],
- ?line {STRes234,S234} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes234,S234} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList235 = [STRes234|STResList234],
- ?line ITRes234 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S234),
+ ITRes234 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S234),
ITResList235 = [ITRes234|ITResList234],
- ?line {STRes235,S235} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes235,S235} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList236 = [STRes235|STResList235],
- ?line ITRes235 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S235),
+ ITRes235 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S235),
ITResList236 = [ITRes235|ITResList235],
- ?line {STRes236,S236} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes236,S236} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList237 = [STRes236|STResList236],
- ?line ITRes236 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S236),
+ ITRes236 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S236),
ITResList237 = [ITRes236|ITResList236],
- ?line {STRes237,S237} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes237,S237} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList238 = [STRes237|STResList237],
- ?line ITRes237 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S237),
+ ITRes237 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S237),
ITResList238 = [ITRes237|ITResList237],
- ?line {STRes238,S238} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes238,S238} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList239 = [STRes238|STResList238],
- ?line ITRes238 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S238),
+ ITRes238 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S238),
ITResList239 = [ITRes238|ITResList238],
- ?line {STRes239,S239} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes239,S239} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList240 = [STRes239|STResList239],
- ?line ITRes239 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S239),
+ ITRes239 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S239),
ITResList240 = [ITRes239|ITResList239],
- ?line {STRes240,S240} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes240,S240} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList241 = [STRes240|STResList240],
- ?line ITRes240 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S240),
+ ITRes240 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S240),
ITResList241 = [ITRes240|ITResList240],
- ?line {STRes241,S241} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes241,S241} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList242 = [STRes241|STResList241],
- ?line ITRes241 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S241),
+ ITRes241 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S241),
ITResList242 = [ITRes241|ITResList241],
- ?line {STRes242,S242} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes242,S242} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList243 = [STRes242|STResList242],
- ?line ITRes242 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S242),
+ ITRes242 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S242),
ITResList243 = [ITRes242|ITResList242],
- ?line {STRes243,S243} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes243,S243} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList244 = [STRes243|STResList243],
- ?line ITRes243 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S243),
+ ITRes243 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S243),
ITResList244 = [ITRes243|ITResList243],
- ?line {STRes244,S244} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes244,S244} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList245 = [STRes244|STResList244],
- ?line ITRes244 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S244),
+ ITRes244 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKEN_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S244),
ITResList245 = [ITRes244|ITResList244],
- ?line {STRes245,S245} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes245,S245} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList246 = [STRes245|STResList245],
- ?line ITRes245 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S245),
+ ITRes245 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S245),
ITResList246 = [ITRes245|ITResList245],
- ?line {STRes246,S246} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes246,S246} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList247 = [STRes246|STResList246],
- ?line ITRes246 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S246),
+ ITRes246 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S246),
ITResList247 = [ITRes246|ITResList246],
- ?line {STRes247,S247} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes247,S247} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList248 = [STRes247|STResList247],
- ?line ITRes247 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S247),
+ ITRes247 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S247),
ITResList248 = [ITRes247|ITResList247],
- ?line {STRes248,S248} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes248,S248} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList249 = [STRes248|STResList248],
- ?line ITRes248 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S248),
+ ITRes248 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S248),
ITResList249 = [ITRes248|ITResList248],
- ?line {STRes249,S249} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes249,S249} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList250 = [STRes249|STResList249],
- ?line ITRes249 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S249),
+ ITRes249 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S249),
ITResList250 = [ITRes249|ITResList249],
- ?line {STRes250,S250} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes250,S250} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList251 = [STRes250|STResList250],
- ?line ITRes250 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S250),
+ ITRes250 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S250),
ITResList251 = [ITRes250|ITResList250],
- ?line {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList252 = [STRes251|STResList251],
- ?line ITRes251 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S251),
+ ITRes251 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S251),
ITResList252 = [ITRes251|ITResList251],
- ?line {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList253 = [STRes252|STResList252],
- ?line ITRes252 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S252),
+ ITRes252 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S252),
ITResList253 = [ITRes252|ITResList252],
- ?line {STRes253,S253} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes253,S253} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList254 = [STRes253|STResList253],
- ?line ITRes253 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S253),
+ ITRes253 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S253),
ITResList254 = [ITRes253|ITResList253],
- ?line {STRes254,S254} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes254,S254} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList255 = [STRes254|STResList254],
- ?line ITRes254 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S254),
+ ITRes254 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S254),
ITResList255 = [ITRes254|ITResList254],
- ?line {STRes255,S255} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes255,S255} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList256 = [STRes255|STResList255],
- ?line ITRes255 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S255),
+ ITRes255 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S255),
ITResList256 = [ITRes255|ITResList255],
- ?line {STRes256,S256} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes256,S256} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList257 = [STRes256|STResList256],
- ?line ITRes256 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S256),
+ ITRes256 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S256),
ITResList257 = [ITRes256|ITResList256],
- ?line {STRes257,S257} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes257,S257} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList258 = [STRes257|STResList257],
- ?line ITRes257 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S257),
+ ITRes257 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S257),
ITResList258 = [ITRes257|ITResList257],
- ?line {STRes258,S258} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes258,S258} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList259 = [STRes258|STResList258],
- ?line ITRes258 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S258),
+ ITRes258 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S258),
ITResList259 = [ITRes258|ITResList258],
- ?line {STRes259,S259} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes259,S259} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList260 = [STRes259|STResList259],
- ?line ITRes259 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S259),
+ ITRes259 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S259),
ITResList260 = [ITRes259|ITResList259],
- ?line {STRes260,S260} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes260,S260} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList261 = [STRes260|STResList260],
- ?line ITRes260 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S260),
+ ITRes260 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S260),
ITResList261 = [ITRes260|ITResList260],
- ?line {STRes261,S261} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes261,S261} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList262 = [STRes261|STResList261],
- ?line ITRes261 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S261),
+ ITRes261 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S261),
ITResList262 = [ITRes261|ITResList261],
- ?line {STRes262,S262} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes262,S262} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList263 = [STRes262|STResList262],
- ?line ITRes262 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S262),
+ ITRes262 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S262),
ITResList263 = [ITRes262|ITResList262],
- ?line {STRes263,S263} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes263,S263} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList264 = [STRes263|STResList263],
- ?line ITRes263 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S263),
+ ITRes263 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S263),
ITResList264 = [ITRes263|ITResList263],
- ?line {STRes264,S264} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes264,S264} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList265 = [STRes264|STResList264],
- ?line ITRes264 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S264),
+ ITRes264 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S264),
ITResList265 = [ITRes264|ITResList264],
- ?line {STRes265,S265} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes265,S265} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList266 = [STRes265|STResList265],
- ?line ITRes265 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S265),
+ ITRes265 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S265),
ITResList266 = [ITRes265|ITResList265],
- ?line {STRes266,S266} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes266,S266} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList267 = [STRes266|STResList266],
- ?line ITRes266 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S266),
+ ITRes266 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S266),
ITResList267 = [ITRes266|ITResList266],
- ?line {STRes267,S267} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes267,S267} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList268 = [STRes267|STResList267],
- ?line ITRes267 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S267),
+ ITRes267 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S267),
ITResList268 = [ITRes267|ITResList267],
- ?line {STRes268,S268} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes268,S268} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList269 = [STRes268|STResList268],
- ?line ITRes268 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S268),
+ ITRes268 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S268),
ITResList269 = [ITRes268|ITResList268],
- ?line {STRes269,S269} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes269,S269} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList270 = [STRes269|STResList269],
- ?line ITRes269 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S269),
+ ITRes269 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S269),
ITResList270 = [ITRes269|ITResList269],
- ?line {STRes270,S270} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes270,S270} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList271 = [STRes270|STResList270],
- ?line ITRes270 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S270),
+ ITRes270 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S270),
ITResList271 = [ITRes270|ITResList270],
- ?line {STRes271,S271} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes271,S271} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList272 = [STRes271|STResList271],
- ?line ITRes271 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S271),
+ ITRes271 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S271),
ITResList272 = [ITRes271|ITResList271],
- ?line {STRes272,S272} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes272,S272} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList273 = [STRes272|STResList272],
- ?line ITRes272 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S272),
+ ITRes272 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S272),
ITResList273 = [ITRes272|ITResList272],
- ?line {STRes273,S273} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes273,S273} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList274 = [STRes273|STResList273],
- ?line ITRes273 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S273),
+ ITRes273 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S273),
ITResList274 = [ITRes273|ITResList273],
- ?line {STRes274,S274} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes274,S274} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList275 = [STRes274|STResList274],
- ?line ITRes274 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S274),
+ ITRes274 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S274),
ITResList275 = [ITRes274|ITResList274],
- ?line {STRes275,S275} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes275,S275} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList276 = [STRes275|STResList275],
- ?line ITRes275 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S275),
+ ITRes275 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S275),
ITResList276 = [ITRes275|ITResList275],
- ?line {STRes276,S276} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes276,S276} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList277 = [STRes276|STResList276],
- ?line ITRes276 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S276),
+ ITRes276 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S276),
ITResList277 = [ITRes276|ITResList276],
- ?line {STRes277,S277} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes277,S277} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList278 = [STRes277|STResList277],
- ?line ITRes277 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S277),
+ ITRes277 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S277),
ITResList278 = [ITRes277|ITResList277],
- ?line {STRes278,S278} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes278,S278} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList279 = [STRes278|STResList278],
- ?line ITRes278 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S278),
+ ITRes278 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S278),
ITResList279 = [ITRes278|ITResList278],
- ?line {STRes279,S279} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes279,S279} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList280 = [STRes279|STResList279],
- ?line ITRes279 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S279),
+ ITRes279 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S279),
ITResList280 = [ITRes279|ITResList279],
- ?line {STRes280,S280} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes280,S280} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList281 = [STRes280|STResList280],
- ?line ITRes280 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S280),
+ ITRes280 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S280),
ITResList281 = [ITRes280|ITResList280],
- ?line {STRes281,S281} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes281,S281} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList282 = [STRes281|STResList281],
- ?line ITRes281 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S281),
+ ITRes281 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NMTOKENS_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S281),
ITResList282 = [ITRes281|ITResList281],
- ?line {STRes282,S282} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes282,S282} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList283 = [STRes282|STResList282],
- ?line ITRes282 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S282),
+ ITRes282 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S282),
ITResList283 = [ITRes282|ITResList282],
- ?line {STRes283,S283} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes283,S283} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList284 = [STRes283|STResList283],
- ?line ITRes283 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S283),
+ ITRes283 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S283),
ITResList284 = [ITRes283|ITResList283],
- ?line {STRes284,S284} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes284,S284} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList285 = [STRes284|STResList284],
- ?line ITRes284 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S284),
+ ITRes284 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S284),
ITResList285 = [ITRes284|ITResList284],
- ?line {STRes285,S285} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes285,S285} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList286 = [STRes285|STResList285],
- ?line ITRes285 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S285),
+ ITRes285 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S285),
ITResList286 = [ITRes285|ITResList285],
- ?line {STRes286,S286} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes286,S286} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList287 = [STRes286|STResList286],
- ?line ITRes286 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S286),
+ ITRes286 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S286),
ITResList287 = [ITRes286|ITResList286],
- ?line {STRes287,S287} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes287,S287} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList288 = [STRes287|STResList287],
- ?line ITRes287 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S287),
+ ITRes287 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S287),
ITResList288 = [ITRes287|ITResList287],
- ?line {STRes288,S288} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes288,S288} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList289 = [STRes288|STResList288],
- ?line ITRes288 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S288),
+ ITRes288 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S288),
ITResList289 = [ITRes288|ITResList288],
- ?line {STRes289,S289} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes289,S289} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList290 = [STRes289|STResList289],
- ?line ITRes289 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S289),
+ ITRes289 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S289),
ITResList290 = [ITRes289|ITResList289],
- ?line {STRes290,S290} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes290,S290} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList291 = [STRes290|STResList290],
- ?line ITRes290 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S290),
+ ITRes290 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S290),
ITResList291 = [ITRes290|ITResList290],
- ?line {STRes291,S291} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes291,S291} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList292 = [STRes291|STResList291],
- ?line ITRes291 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S291),
+ ITRes291 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S291),
ITResList292 = [ITRes291|ITResList291],
- ?line {STRes292,S292} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes292,S292} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList293 = [STRes292|STResList292],
- ?line ITRes292 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S292),
+ ITRes292 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S292),
ITResList293 = [ITRes292|ITResList292],
- ?line {STRes293,S293} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes293,S293} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList294 = [STRes293|STResList293],
- ?line ITRes293 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S293),
+ ITRes293 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S293),
ITResList294 = [ITRes293|ITResList293],
- ?line {STRes294,S294} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes294,S294} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList295 = [STRes294|STResList294],
- ?line ITRes294 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S294),
+ ITRes294 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S294),
ITResList295 = [ITRes294|ITResList294],
- ?line {STRes295,S295} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes295,S295} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList296 = [STRes295|STResList295],
- ?line ITRes295 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S295),
+ ITRes295 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S295),
ITResList296 = [ITRes295|ITResList295],
- ?line {STRes296,S296} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes296,S296} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList297 = [STRes296|STResList296],
- ?line ITRes296 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S296),
+ ITRes296 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S296),
ITResList297 = [ITRes296|ITResList296],
- ?line {STRes297,S297} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes297,S297} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList298 = [STRes297|STResList297],
- ?line ITRes297 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S297),
+ ITRes297 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S297),
ITResList298 = [ITRes297|ITResList297],
- ?line {STRes298,S298} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes298,S298} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList299 = [STRes298|STResList298],
- ?line ITRes298 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S298),
+ ITRes298 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S298),
ITResList299 = [ITRes298|ITResList298],
- ?line {STRes299,S299} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes299,S299} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList300 = [STRes299|STResList299],
- ?line ITRes299 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S299),
+ ITRes299 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S299),
ITResList300 = [ITRes299|ITResList299],
- ?line {STRes300,S300} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes300,S300} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList301 = [STRes300|STResList300],
- ?line ITRes300 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S300),
+ ITRes300 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S300),
ITResList301 = [ITRes300|ITResList300],
- ?line {STRes301,S301} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes301,S301} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList302 = [STRes301|STResList301],
- ?line ITRes301 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S301),
+ ITRes301 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S301),
ITResList302 = [ITRes301|ITResList301],
- ?line {STRes302,S302} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes302,S302} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList303 = [STRes302|STResList302],
- ?line ITRes302 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S302),
+ ITRes302 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S302),
ITResList303 = [ITRes302|ITResList302],
- ?line {STRes303,S303} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes303,S303} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList304 = [STRes303|STResList303],
- ?line ITRes303 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S303),
+ ITRes303 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S303),
ITResList304 = [ITRes303|ITResList303],
- ?line {STRes304,S304} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes304,S304} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList305 = [STRes304|STResList304],
- ?line ITRes304 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S304),
+ ITRes304 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S304),
ITResList305 = [ITRes304|ITResList304],
- ?line {STRes305,S305} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes305,S305} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList306 = [STRes305|STResList305],
- ?line ITRes305 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S305),
+ ITRes305 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S305),
ITResList306 = [ITRes305|ITResList305],
- ?line {STRes306,S306} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes306,S306} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList307 = [STRes306|STResList306],
- ?line ITRes306 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S306),
+ ITRes306 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S306),
ITResList307 = [ITRes306|ITResList306],
- ?line {STRes307,S307} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes307,S307} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList308 = [STRes307|STResList307],
- ?line ITRes307 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S307),
+ ITRes307 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S307),
ITResList308 = [ITRes307|ITResList307],
- ?line {STRes308,S308} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes308,S308} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList309 = [STRes308|STResList308],
- ?line ITRes308 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S308),
+ ITRes308 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S308),
ITResList309 = [ITRes308|ITResList308],
- ?line {STRes309,S309} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes309,S309} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList310 = [STRes309|STResList309],
- ?line ITRes309 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S309),
+ ITRes309 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S309),
ITResList310 = [ITRes309|ITResList309],
- ?line {STRes310,S310} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes310,S310} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList311 = [STRes310|STResList310],
- ?line ITRes310 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S310),
+ ITRes310 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S310),
ITResList311 = [ITRes310|ITResList310],
- ?line {STRes311,S311} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes311,S311} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList312 = [STRes311|STResList311],
- ?line ITRes311 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S311),
+ ITRes311 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S311),
ITResList312 = [ITRes311|ITResList311],
- ?line {STRes312,S312} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes312,S312} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList313 = [STRes312|STResList312],
- ?line ITRes312 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S312),
+ ITRes312 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_boolean_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S312),
ITResList313 = [ITRes312|ITResList312],
- ?line {STRes313,S313} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes313,S313} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList314 = [STRes313|STResList313],
- ?line ITRes313 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S313),
+ ITRes313 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S313),
ITResList314 = [ITRes313|ITResList313],
- ?line {STRes314,S314} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes314,S314} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList315 = [STRes314|STResList314],
- ?line ITRes314 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S314),
+ ITRes314 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S314),
ITResList315 = [ITRes314|ITResList314],
- ?line {STRes315,S315} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes315,S315} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList316 = [STRes315|STResList315],
- ?line ITRes315 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S315),
+ ITRes315 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S315),
ITResList316 = [ITRes315|ITResList315],
- ?line {STRes316,S316} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes316,S316} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList317 = [STRes316|STResList316],
- ?line ITRes316 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S316),
+ ITRes316 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S316),
ITResList317 = [ITRes316|ITResList316],
- ?line {STRes317,S317} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes317,S317} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList318 = [STRes317|STResList317],
- ?line ITRes317 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S317),
+ ITRes317 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S317),
ITResList318 = [ITRes317|ITResList317],
- ?line {STRes318,S318} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes318,S318} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList319 = [STRes318|STResList318],
- ?line ITRes318 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S318),
+ ITRes318 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S318),
ITResList319 = [ITRes318|ITResList318],
- ?line {STRes319,S319} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes319,S319} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList320 = [STRes319|STResList319],
- ?line ITRes319 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S319),
+ ITRes319 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S319),
ITResList320 = [ITRes319|ITResList319],
- ?line {STRes320,S320} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes320,S320} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList321 = [STRes320|STResList320],
- ?line ITRes320 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S320),
+ ITRes320 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S320),
ITResList321 = [ITRes320|ITResList320],
- ?line {STRes321,S321} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes321,S321} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList322 = [STRes321|STResList321],
- ?line ITRes321 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S321),
+ ITRes321 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S321),
ITResList322 = [ITRes321|ITResList321],
- ?line {STRes322,S322} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes322,S322} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList323 = [STRes322|STResList322],
- ?line ITRes322 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S322),
+ ITRes322 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S322),
ITResList323 = [ITRes322|ITResList322],
- ?line {STRes323,S323} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes323,S323} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList324 = [STRes323|STResList323],
- ?line ITRes323 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S323),
+ ITRes323 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S323),
ITResList324 = [ITRes323|ITResList323],
- ?line {STRes324,S324} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes324,S324} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList325 = [STRes324|STResList324],
- ?line ITRes324 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S324),
+ ITRes324 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S324),
ITResList325 = [ITRes324|ITResList324],
- ?line {STRes325,S325} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes325,S325} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList326 = [STRes325|STResList325],
- ?line ITRes325 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S325),
+ ITRes325 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S325),
ITResList326 = [ITRes325|ITResList325],
- ?line {STRes326,S326} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes326,S326} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList327 = [STRes326|STResList326],
- ?line ITRes326 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S326),
+ ITRes326 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S326),
ITResList327 = [ITRes326|ITResList326],
- ?line {STRes327,S327} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes327,S327} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList328 = [STRes327|STResList327],
- ?line ITRes327 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S327),
+ ITRes327 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S327),
ITResList328 = [ITRes327|ITResList327],
- ?line {STRes328,S328} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes328,S328} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList329 = [STRes328|STResList328],
- ?line ITRes328 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S328),
+ ITRes328 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S328),
ITResList329 = [ITRes328|ITResList328],
- ?line {STRes329,S329} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes329,S329} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList330 = [STRes329|STResList329],
- ?line ITRes329 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S329),
+ ITRes329 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S329),
ITResList330 = [ITRes329|ITResList329],
- ?line {STRes330,S330} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes330,S330} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList331 = [STRes330|STResList330],
- ?line ITRes330 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S330),
+ ITRes330 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S330),
ITResList331 = [ITRes330|ITResList330],
- ?line {STRes331,S331} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes331,S331} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList332 = [STRes331|STResList331],
- ?line ITRes331 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S331),
+ ITRes331 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S331),
ITResList332 = [ITRes331|ITResList331],
- ?line {STRes332,S332} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes332,S332} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList333 = [STRes332|STResList332],
- ?line ITRes332 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S332),
+ ITRes332 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S332),
ITResList333 = [ITRes332|ITResList332],
- ?line {STRes333,S333} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes333,S333} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList334 = [STRes333|STResList333],
- ?line ITRes333 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S333),
+ ITRes333 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S333),
ITResList334 = [ITRes333|ITResList333],
- ?line {STRes334,S334} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes334,S334} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList335 = [STRes334|STResList334],
- ?line ITRes334 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S334),
+ ITRes334 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_base64Binary_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S334),
ITResList335 = [ITRes334|ITResList334],
- ?line {STRes335,S335} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes335,S335} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList336 = [STRes335|STResList335],
- ?line ITRes335 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S335),
+ ITRes335 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S335),
ITResList336 = [ITRes335|ITResList335],
- ?line {STRes336,S336} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes336,S336} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList337 = [STRes336|STResList336],
- ?line ITRes336 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S336),
+ ITRes336 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S336),
ITResList337 = [ITRes336|ITResList336],
- ?line {STRes337,S337} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes337,S337} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList338 = [STRes337|STResList337],
- ?line ITRes337 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S337),
+ ITRes337 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S337),
ITResList338 = [ITRes337|ITResList337],
- ?line {STRes338,S338} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes338,S338} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList339 = [STRes338|STResList338],
- ?line ITRes338 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S338),
+ ITRes338 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S338),
ITResList339 = [ITRes338|ITResList338],
- ?line {STRes339,S339} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes339,S339} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList340 = [STRes339|STResList339],
- ?line ITRes339 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S339),
+ ITRes339 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S339),
ITResList340 = [ITRes339|ITResList339],
- ?line {STRes340,S340} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes340,S340} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList341 = [STRes340|STResList340],
- ?line ITRes340 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S340),
+ ITRes340 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S340),
ITResList341 = [ITRes340|ITResList340],
- ?line {STRes341,S341} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes341,S341} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList342 = [STRes341|STResList341],
- ?line ITRes341 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S341),
+ ITRes341 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S341),
ITResList342 = [ITRes341|ITResList341],
- ?line {STRes342,S342} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes342,S342} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList343 = [STRes342|STResList342],
- ?line ITRes342 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S342),
+ ITRes342 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S342),
ITResList343 = [ITRes342|ITResList342],
- ?line {STRes343,S343} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes343,S343} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList344 = [STRes343|STResList343],
- ?line ITRes343 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S343),
+ ITRes343 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S343),
ITResList344 = [ITRes343|ITResList343],
- ?line {STRes344,S344} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes344,S344} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList345 = [STRes344|STResList344],
- ?line ITRes344 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S344),
+ ITRes344 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S344),
ITResList345 = [ITRes344|ITResList344],
- ?line {STRes345,S345} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes345,S345} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList346 = [STRes345|STResList345],
- ?line ITRes345 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S345),
+ ITRes345 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S345),
ITResList346 = [ITRes345|ITResList345],
- ?line {STRes346,S346} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes346,S346} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList347 = [STRes346|STResList346],
- ?line ITRes346 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S346),
+ ITRes346 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S346),
ITResList347 = [ITRes346|ITResList346],
- ?line {STRes347,S347} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes347,S347} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList348 = [STRes347|STResList347],
- ?line ITRes347 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S347),
+ ITRes347 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S347),
ITResList348 = [ITRes347|ITResList347],
- ?line {STRes348,S348} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes348,S348} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList349 = [STRes348|STResList348],
- ?line ITRes348 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S348),
+ ITRes348 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S348),
ITResList349 = [ITRes348|ITResList348],
- ?line {STRes349,S349} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes349,S349} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList350 = [STRes349|STResList349],
- ?line ITRes349 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S349),
+ ITRes349 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S349),
ITResList350 = [ITRes349|ITResList349],
- ?line {STRes350,S350} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes350,S350} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList351 = [STRes350|STResList350],
- ?line ITRes350 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S350),
+ ITRes350 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S350),
ITResList351 = [ITRes350|ITResList350],
- ?line {STRes351,S351} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes351,S351} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList352 = [STRes351|STResList351],
- ?line ITRes351 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S351),
+ ITRes351 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S351),
ITResList352 = [ITRes351|ITResList351],
- ?line {STRes352,S352} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes352,S352} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList353 = [STRes352|STResList352],
- ?line ITRes352 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S352),
+ ITRes352 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S352),
ITResList353 = [ITRes352|ITResList352],
- ?line {STRes353,S353} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes353,S353} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList354 = [STRes353|STResList353],
- ?line ITRes353 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S353),
+ ITRes353 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S353),
ITResList354 = [ITRes353|ITResList353],
- ?line {STRes354,S354} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes354,S354} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList355 = [STRes354|STResList354],
- ?line ITRes354 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S354),
+ ITRes354 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S354),
ITResList355 = [ITRes354|ITResList354],
- ?line {STRes355,S355} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes355,S355} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList356 = [STRes355|STResList355],
- ?line ITRes355 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S355),
+ ITRes355 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S355),
ITResList356 = [ITRes355|ITResList355],
- ?line {STRes356,S356} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes356,S356} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList357 = [STRes356|STResList356],
- ?line ITRes356 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S356),
+ ITRes356 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_hexBinary_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S356),
ITResList357 = [ITRes356|ITResList356],
- ?line {STRes357,S357} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes357,S357} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList358 = [STRes357|STResList357],
- ?line ITRes357 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S357),
+ ITRes357 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S357),
ITResList358 = [ITRes357|ITResList357],
- ?line {STRes358,S358} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes358,S358} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList359 = [STRes358|STResList358],
- ?line ITRes358 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S358),
+ ITRes358 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S358),
ITResList359 = [ITRes358|ITResList358],
- ?line {STRes359,S359} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes359,S359} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList360 = [STRes359|STResList359],
- ?line ITRes359 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S359),
+ ITRes359 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S359),
ITResList360 = [ITRes359|ITResList359],
- ?line {STRes360,S360} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes360,S360} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList361 = [STRes360|STResList360],
- ?line ITRes360 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S360),
+ ITRes360 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S360),
ITResList361 = [ITRes360|ITResList360],
- ?line {STRes361,S361} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes361,S361} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList362 = [STRes361|STResList361],
- ?line ITRes361 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S361),
+ ITRes361 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S361),
ITResList362 = [ITRes361|ITResList361],
- ?line {STRes362,S362} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes362,S362} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList363 = [STRes362|STResList362],
- ?line ITRes362 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S362),
+ ITRes362 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S362),
ITResList363 = [ITRes362|ITResList362],
- ?line {STRes363,S363} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes363,S363} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList364 = [STRes363|STResList363],
- ?line ITRes363 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S363),
+ ITRes363 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S363),
ITResList364 = [ITRes363|ITResList363],
- ?line {STRes364,S364} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes364,S364} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList365 = [STRes364|STResList364],
- ?line ITRes364 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S364),
+ ITRes364 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S364),
ITResList365 = [ITRes364|ITResList364],
- ?line {STRes365,S365} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes365,S365} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList366 = [STRes365|STResList365],
- ?line ITRes365 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_float.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S365),
+ ITRes365 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_float.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S365),
ITResList366 = [ITRes365|ITResList365],
- ?line {STRes366,S366} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes366,S366} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList367 = [STRes366|STResList366],
- ?line ITRes366 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S366),
+ ITRes366 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S366),
ITResList367 = [ITRes366|ITResList366],
- ?line {STRes367,S367} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes367,S367} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList368 = [STRes367|STResList367],
- ?line ITRes367 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S367),
+ ITRes367 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S367),
ITResList368 = [ITRes367|ITResList367],
- ?line {STRes368,S368} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes368,S368} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList369 = [STRes368|STResList368],
- ?line ITRes368 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S368),
+ ITRes368 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S368),
ITResList369 = [ITRes368|ITResList368],
- ?line {STRes369,S369} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes369,S369} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList370 = [STRes369|STResList369],
- ?line ITRes369 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S369),
+ ITRes369 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S369),
ITResList370 = [ITRes369|ITResList369],
- ?line {STRes370,S370} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes370,S370} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList371 = [STRes370|STResList370],
- ?line ITRes370 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S370),
+ ITRes370 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S370),
ITResList371 = [ITRes370|ITResList370],
- ?line {STRes371,S371} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes371,S371} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList372 = [STRes371|STResList371],
- ?line ITRes371 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S371),
+ ITRes371 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S371),
ITResList372 = [ITRes371|ITResList371],
- ?line {STRes372,S372} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes372,S372} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList373 = [STRes372|STResList372],
- ?line ITRes372 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S372),
+ ITRes372 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S372),
ITResList373 = [ITRes372|ITResList372],
- ?line {STRes373,S373} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes373,S373} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList374 = [STRes373|STResList373],
- ?line ITRes373 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S373),
+ ITRes373 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S373),
ITResList374 = [ITRes373|ITResList373],
- ?line {STRes374,S374} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes374,S374} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList375 = [STRes374|STResList374],
- ?line ITRes374 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S374),
+ ITRes374 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S374),
ITResList375 = [ITRes374|ITResList374],
- ?line {STRes375,S375} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes375,S375} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList376 = [STRes375|STResList375],
- ?line ITRes375 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S375),
+ ITRes375 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S375),
ITResList376 = [ITRes375|ITResList375],
- ?line {STRes376,S376} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes376,S376} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList377 = [STRes376|STResList376],
- ?line ITRes376 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S376),
+ ITRes376 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S376),
ITResList377 = [ITRes376|ITResList376],
- ?line {STRes377,S377} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes377,S377} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList378 = [STRes377|STResList377],
- ?line ITRes377 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S377),
+ ITRes377 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S377),
ITResList378 = [ITRes377|ITResList377],
- ?line {STRes378,S378} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes378,S378} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList379 = [STRes378|STResList378],
- ?line ITRes378 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S378),
+ ITRes378 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S378),
ITResList379 = [ITRes378|ITResList378],
- ?line {STRes379,S379} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes379,S379} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList380 = [STRes379|STResList379],
- ?line ITRes379 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S379),
+ ITRes379 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S379),
ITResList380 = [ITRes379|ITResList379],
- ?line {STRes380,S380} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes380,S380} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList381 = [STRes380|STResList380],
- ?line ITRes380 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S380),
+ ITRes380 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S380),
ITResList381 = [ITRes380|ITResList380],
- ?line {STRes381,S381} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes381,S381} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList382 = [STRes381|STResList381],
- ?line ITRes381 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S381),
+ ITRes381 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_float_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S381),
ITResList382 = [ITRes381|ITResList381],
- ?line {STRes382,S382} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes382,S382} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList383 = [STRes382|STResList382],
- ?line ITRes382 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S382),
+ ITRes382 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S382),
ITResList383 = [ITRes382|ITResList382],
- ?line {STRes383,S383} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes383,S383} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList384 = [STRes383|STResList383],
- ?line ITRes383 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S383),
+ ITRes383 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S383),
ITResList384 = [ITRes383|ITResList383],
- ?line {STRes384,S384} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes384,S384} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList385 = [STRes384|STResList384],
- ?line ITRes384 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S384),
+ ITRes384 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S384),
ITResList385 = [ITRes384|ITResList384],
- ?line {STRes385,S385} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes385,S385} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList386 = [STRes385|STResList385],
- ?line ITRes385 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S385),
+ ITRes385 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S385),
ITResList386 = [ITRes385|ITResList385],
- ?line {STRes386,S386} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes386,S386} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList387 = [STRes386|STResList386],
- ?line ITRes386 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S386),
+ ITRes386 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S386),
ITResList387 = [ITRes386|ITResList386],
- ?line {STRes387,S387} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes387,S387} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList388 = [STRes387|STResList387],
- ?line ITRes387 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S387),
+ ITRes387 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S387),
ITResList388 = [ITRes387|ITResList387],
- ?line {STRes388,S388} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes388,S388} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList389 = [STRes388|STResList388],
- ?line ITRes388 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S388),
+ ITRes388 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S388),
ITResList389 = [ITRes388|ITResList388],
- ?line {STRes389,S389} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes389,S389} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList390 = [STRes389|STResList389],
- ?line ITRes389 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S389),
+ ITRes389 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S389),
ITResList390 = [ITRes389|ITResList389],
- ?line {STRes390,S390} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes390,S390} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList391 = [STRes390|STResList390],
- ?line ITRes390 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S390),
+ ITRes390 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S390),
ITResList391 = [ITRes390|ITResList390],
- ?line {STRes391,S391} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes391,S391} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList392 = [STRes391|STResList391],
- ?line ITRes391 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S391),
+ ITRes391 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S391),
ITResList392 = [ITRes391|ITResList391],
- ?line {STRes392,S392} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes392,S392} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList393 = [STRes392|STResList392],
- ?line ITRes392 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S392),
+ ITRes392 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S392),
ITResList393 = [ITRes392|ITResList392],
- ?line {STRes393,S393} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes393,S393} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList394 = [STRes393|STResList393],
- ?line ITRes393 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S393),
+ ITRes393 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S393),
ITResList394 = [ITRes393|ITResList393],
- ?line {STRes394,S394} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes394,S394} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList395 = [STRes394|STResList394],
- ?line ITRes394 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S394),
+ ITRes394 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S394),
ITResList395 = [ITRes394|ITResList394],
- ?line {STRes395,S395} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes395,S395} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList396 = [STRes395|STResList395],
- ?line ITRes395 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S395),
+ ITRes395 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S395),
ITResList396 = [ITRes395|ITResList395],
- ?line {STRes396,S396} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes396,S396} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList397 = [STRes396|STResList396],
- ?line ITRes396 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S396),
+ ITRes396 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S396),
ITResList397 = [ITRes396|ITResList396],
- ?line {STRes397,S397} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes397,S397} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList398 = [STRes397|STResList397],
- ?line ITRes397 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S397),
+ ITRes397 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S397),
ITResList398 = [ITRes397|ITResList397],
- ?line {STRes398,S398} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes398,S398} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList399 = [STRes398|STResList398],
- ?line ITRes398 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S398),
+ ITRes398 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S398),
ITResList399 = [ITRes398|ITResList398],
- ?line {STRes399,S399} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes399,S399} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList400 = [STRes399|STResList399],
- ?line ITRes399 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S399),
+ ITRes399 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S399),
ITResList400 = [ITRes399|ITResList399],
- ?line {STRes400,S400} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes400,S400} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList401 = [STRes400|STResList400],
- ?line ITRes400 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S400),
+ ITRes400 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S400),
ITResList401 = [ITRes400|ITResList400],
- ?line {STRes401,S401} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes401,S401} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList402 = [STRes401|STResList401],
- ?line ITRes401 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S401),
+ ITRes401 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S401),
ITResList402 = [ITRes401|ITResList401],
- ?line {STRes402,S402} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes402,S402} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList403 = [STRes402|STResList402],
- ?line ITRes402 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S402),
+ ITRes402 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S402),
ITResList403 = [ITRes402|ITResList402],
- ?line {STRes403,S403} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes403,S403} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList404 = [STRes403|STResList403],
- ?line ITRes403 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S403),
+ ITRes403 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S403),
ITResList404 = [ITRes403|ITResList403],
- ?line {STRes404,S404} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes404,S404} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList405 = [STRes404|STResList404],
- ?line ITRes404 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S404),
+ ITRes404 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S404),
ITResList405 = [ITRes404|ITResList404],
- ?line {STRes405,S405} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes405,S405} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList406 = [STRes405|STResList405],
- ?line ITRes405 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S405),
+ ITRes405 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S405),
ITResList406 = [ITRes405|ITResList405],
- ?line {STRes406,S406} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes406,S406} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList407 = [STRes406|STResList406],
- ?line ITRes406 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S406),
+ ITRes406 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_decimal_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S406),
ITResList407 = [ITRes406|ITResList406],
- ?line {STRes407,S407} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes407,S407} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList408 = [STRes407|STResList407],
- ?line ITRes407 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S407),
+ ITRes407 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S407),
ITResList408 = [ITRes407|ITResList407],
- ?line {STRes408,S408} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes408,S408} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList409 = [STRes408|STResList408],
- ?line ITRes408 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S408),
+ ITRes408 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S408),
ITResList409 = [ITRes408|ITResList408],
- ?line {STRes409,S409} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes409,S409} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList410 = [STRes409|STResList409],
- ?line ITRes409 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S409),
+ ITRes409 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S409),
ITResList410 = [ITRes409|ITResList409],
- ?line {STRes410,S410} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes410,S410} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList411 = [STRes410|STResList410],
- ?line ITRes410 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S410),
+ ITRes410 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S410),
ITResList411 = [ITRes410|ITResList410],
- ?line {STRes411,S411} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes411,S411} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList412 = [STRes411|STResList411],
- ?line ITRes411 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S411),
+ ITRes411 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S411),
ITResList412 = [ITRes411|ITResList411],
- ?line {STRes412,S412} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes412,S412} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList413 = [STRes412|STResList412],
- ?line ITRes412 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S412),
+ ITRes412 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S412),
ITResList413 = [ITRes412|ITResList412],
- ?line {STRes413,S413} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes413,S413} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList414 = [STRes413|STResList413],
- ?line ITRes413 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S413),
+ ITRes413 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S413),
ITResList414 = [ITRes413|ITResList413],
- ?line {STRes414,S414} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes414,S414} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList415 = [STRes414|STResList414],
- ?line ITRes414 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S414),
+ ITRes414 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S414),
ITResList415 = [ITRes414|ITResList414],
- ?line {STRes415,S415} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes415,S415} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList416 = [STRes415|STResList415],
- ?line ITRes415 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S415),
+ ITRes415 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S415),
ITResList416 = [ITRes415|ITResList415],
- ?line {STRes416,S416} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes416,S416} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList417 = [STRes416|STResList416],
- ?line ITRes416 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S416),
+ ITRes416 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S416),
ITResList417 = [ITRes416|ITResList416],
- ?line {STRes417,S417} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes417,S417} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList418 = [STRes417|STResList417],
- ?line ITRes417 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S417),
+ ITRes417 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S417),
ITResList418 = [ITRes417|ITResList417],
- ?line {STRes418,S418} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes418,S418} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList419 = [STRes418|STResList418],
- ?line ITRes418 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S418),
+ ITRes418 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S418),
ITResList419 = [ITRes418|ITResList418],
- ?line {STRes419,S419} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes419,S419} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList420 = [STRes419|STResList419],
- ?line ITRes419 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S419),
+ ITRes419 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S419),
ITResList420 = [ITRes419|ITResList419],
- ?line {STRes420,S420} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes420,S420} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList421 = [STRes420|STResList420],
- ?line ITRes420 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S420),
+ ITRes420 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S420),
ITResList421 = [ITRes420|ITResList420],
- ?line {STRes421,S421} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes421,S421} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList422 = [STRes421|STResList421],
- ?line ITRes421 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S421),
+ ITRes421 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S421),
ITResList422 = [ITRes421|ITResList421],
- ?line {STRes422,S422} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes422,S422} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList423 = [STRes422|STResList422],
- ?line ITRes422 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S422),
+ ITRes422 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S422),
ITResList423 = [ITRes422|ITResList422],
- ?line {STRes423,S423} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes423,S423} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList424 = [STRes423|STResList423],
- ?line ITRes423 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S423),
+ ITRes423 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S423),
ITResList424 = [ITRes423|ITResList423],
- ?line {STRes424,S424} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes424,S424} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList425 = [STRes424|STResList424],
- ?line ITRes424 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S424),
+ ITRes424 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S424),
ITResList425 = [ITRes424|ITResList424],
- ?line {STRes425,S425} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes425,S425} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList426 = [STRes425|STResList425],
- ?line ITRes425 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S425),
+ ITRes425 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S425),
ITResList426 = [ITRes425|ITResList425],
- ?line {STRes426,S426} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes426,S426} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList427 = [STRes426|STResList426],
- ?line ITRes426 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S426),
+ ITRes426 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S426),
ITResList427 = [ITRes426|ITResList426],
- ?line {STRes427,S427} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes427,S427} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList428 = [STRes427|STResList427],
- ?line ITRes427 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S427),
+ ITRes427 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S427),
ITResList428 = [ITRes427|ITResList427],
- ?line {STRes428,S428} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes428,S428} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList429 = [STRes428|STResList428],
- ?line ITRes428 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S428),
+ ITRes428 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S428),
ITResList429 = [ITRes428|ITResList428],
- ?line {STRes429,S429} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes429,S429} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList430 = [STRes429|STResList429],
- ?line ITRes429 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S429),
+ ITRes429 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S429),
ITResList430 = [ITRes429|ITResList429],
- ?line {STRes430,S430} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes430,S430} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList431 = [STRes430|STResList430],
- ?line ITRes430 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S430),
+ ITRes430 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S430),
ITResList431 = [ITRes430|ITResList430],
- ?line {STRes431,S431} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes431,S431} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList432 = [STRes431|STResList431],
- ?line ITRes431 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S431),
+ ITRes431 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_integer_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S431),
ITResList432 = [ITRes431|ITResList431],
- ?line {STRes432,S432} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes432,S432} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList433 = [STRes432|STResList432],
- ?line ITRes432 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S432),
+ ITRes432 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S432),
ITResList433 = [ITRes432|ITResList432],
- ?line {STRes433,S433} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes433,S433} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList434 = [STRes433|STResList433],
- ?line ITRes433 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S433),
+ ITRes433 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S433),
ITResList434 = [ITRes433|ITResList433],
- ?line {STRes434,S434} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes434,S434} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList435 = [STRes434|STResList434],
- ?line ITRes434 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S434),
+ ITRes434 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S434),
ITResList435 = [ITRes434|ITResList434],
- ?line {STRes435,S435} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes435,S435} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList436 = [STRes435|STResList435],
- ?line ITRes435 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S435),
+ ITRes435 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S435),
ITResList436 = [ITRes435|ITResList435],
- ?line {STRes436,S436} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes436,S436} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList437 = [STRes436|STResList436],
- ?line ITRes436 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S436),
+ ITRes436 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S436),
ITResList437 = [ITRes436|ITResList436],
- ?line {STRes437,S437} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes437,S437} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList438 = [STRes437|STResList437],
- ?line ITRes437 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S437),
+ ITRes437 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S437),
ITResList438 = [ITRes437|ITResList437],
- ?line {STRes438,S438} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes438,S438} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList439 = [STRes438|STResList438],
- ?line ITRes438 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S438),
+ ITRes438 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S438),
ITResList439 = [ITRes438|ITResList438],
- ?line {STRes439,S439} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes439,S439} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList440 = [STRes439|STResList439],
- ?line ITRes439 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S439),
+ ITRes439 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S439),
ITResList440 = [ITRes439|ITResList439],
- ?line {STRes440,S440} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes440,S440} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList441 = [STRes440|STResList440],
- ?line ITRes440 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S440),
+ ITRes440 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S440),
ITResList441 = [ITRes440|ITResList440],
- ?line {STRes441,S441} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes441,S441} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList442 = [STRes441|STResList441],
- ?line ITRes441 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S441),
+ ITRes441 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S441),
ITResList442 = [ITRes441|ITResList441],
- ?line {STRes442,S442} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes442,S442} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList443 = [STRes442|STResList442],
- ?line ITRes442 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S442),
+ ITRes442 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S442),
ITResList443 = [ITRes442|ITResList442],
- ?line {STRes443,S443} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes443,S443} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList444 = [STRes443|STResList443],
- ?line ITRes443 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S443),
+ ITRes443 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S443),
ITResList444 = [ITRes443|ITResList443],
- ?line {STRes444,S444} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes444,S444} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList445 = [STRes444|STResList444],
- ?line ITRes444 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S444),
+ ITRes444 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S444),
ITResList445 = [ITRes444|ITResList444],
- ?line {STRes445,S445} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes445,S445} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList446 = [STRes445|STResList445],
- ?line ITRes445 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S445),
+ ITRes445 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S445),
ITResList446 = [ITRes445|ITResList445],
- ?line {STRes446,S446} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes446,S446} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList447 = [STRes446|STResList446],
- ?line ITRes446 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S446),
+ ITRes446 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S446),
ITResList447 = [ITRes446|ITResList446],
- ?line {STRes447,S447} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes447,S447} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList448 = [STRes447|STResList447],
- ?line ITRes447 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S447),
+ ITRes447 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S447),
ITResList448 = [ITRes447|ITResList447],
- ?line {STRes448,S448} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes448,S448} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList449 = [STRes448|STResList448],
- ?line ITRes448 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S448),
+ ITRes448 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonPositiveInteger_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S448),
ITResList449 = [ITRes448|ITResList448],
- ?line {STRes449,S449} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes449,S449} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList450 = [STRes449|STResList449],
- ?line ITRes449 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S449),
+ ITRes449 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S449),
ITResList450 = [ITRes449|ITResList449],
- ?line {STRes450,S450} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes450,S450} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList451 = [STRes450|STResList450],
- ?line ITRes450 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S450),
+ ITRes450 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S450),
ITResList451 = [ITRes450|ITResList450],
- ?line {STRes451,S451} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes451,S451} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList452 = [STRes451|STResList451],
- ?line ITRes451 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S451),
+ ITRes451 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S451),
ITResList452 = [ITRes451|ITResList451],
- ?line {STRes452,S452} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes452,S452} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList453 = [STRes452|STResList452],
- ?line ITRes452 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S452),
+ ITRes452 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S452),
ITResList453 = [ITRes452|ITResList452],
- ?line {STRes453,S453} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes453,S453} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList454 = [STRes453|STResList453],
- ?line ITRes453 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S453),
+ ITRes453 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S453),
ITResList454 = [ITRes453|ITResList453],
- ?line {STRes454,S454} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes454,S454} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList455 = [STRes454|STResList454],
- ?line ITRes454 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S454),
+ ITRes454 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S454),
ITResList455 = [ITRes454|ITResList454],
- ?line {STRes455,S455} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes455,S455} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList456 = [STRes455|STResList455],
- ?line ITRes455 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S455),
+ ITRes455 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S455),
ITResList456 = [ITRes455|ITResList455],
- ?line {STRes456,S456} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes456,S456} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList457 = [STRes456|STResList456],
- ?line ITRes456 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S456),
+ ITRes456 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S456),
ITResList457 = [ITRes456|ITResList456],
- ?line {STRes457,S457} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes457,S457} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList458 = [STRes457|STResList457],
- ?line ITRes457 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S457),
+ ITRes457 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S457),
ITResList458 = [ITRes457|ITResList457],
- ?line {STRes458,S458} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes458,S458} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList459 = [STRes458|STResList458],
- ?line ITRes458 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S458),
+ ITRes458 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S458),
ITResList459 = [ITRes458|ITResList458],
- ?line {STRes459,S459} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes459,S459} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList460 = [STRes459|STResList459],
- ?line ITRes459 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S459),
+ ITRes459 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S459),
ITResList460 = [ITRes459|ITResList459],
- ?line {STRes460,S460} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes460,S460} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList461 = [STRes460|STResList460],
- ?line ITRes460 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S460),
+ ITRes460 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S460),
ITResList461 = [ITRes460|ITResList460],
- ?line {STRes461,S461} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes461,S461} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList462 = [STRes461|STResList461],
- ?line ITRes461 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S461),
+ ITRes461 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S461),
ITResList462 = [ITRes461|ITResList461],
- ?line {STRes462,S462} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes462,S462} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList463 = [STRes462|STResList462],
- ?line ITRes462 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S462),
+ ITRes462 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S462),
ITResList463 = [ITRes462|ITResList462],
- ?line {STRes463,S463} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes463,S463} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList464 = [STRes463|STResList463],
- ?line ITRes463 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S463),
+ ITRes463 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S463),
ITResList464 = [ITRes463|ITResList463],
- ?line {STRes464,S464} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes464,S464} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList465 = [STRes464|STResList464],
- ?line ITRes464 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S464),
+ ITRes464 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_negativeInteger_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S464),
ITResList465 = [ITRes464|ITResList464],
- ?line {STRes465,S465} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes465,S465} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList466 = [STRes465|STResList465],
- ?line ITRes465 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S465),
+ ITRes465 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S465),
ITResList466 = [ITRes465|ITResList465],
- ?line {STRes466,S466} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes466,S466} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList467 = [STRes466|STResList466],
- ?line ITRes466 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S466),
+ ITRes466 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S466),
ITResList467 = [ITRes466|ITResList466],
- ?line {STRes467,S467} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes467,S467} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList468 = [STRes467|STResList467],
- ?line ITRes467 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S467),
+ ITRes467 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S467),
ITResList468 = [ITRes467|ITResList467],
- ?line {STRes468,S468} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes468,S468} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList469 = [STRes468|STResList468],
- ?line ITRes468 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S468),
+ ITRes468 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S468),
ITResList469 = [ITRes468|ITResList468],
- ?line {STRes469,S469} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes469,S469} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList470 = [STRes469|STResList469],
- ?line ITRes469 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S469),
+ ITRes469 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S469),
ITResList470 = [ITRes469|ITResList469],
- ?line {STRes470,S470} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes470,S470} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList471 = [STRes470|STResList470],
- ?line ITRes470 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S470),
+ ITRes470 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S470),
ITResList471 = [ITRes470|ITResList470],
- ?line {STRes471,S471} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes471,S471} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList472 = [STRes471|STResList471],
- ?line ITRes471 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S471),
+ ITRes471 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S471),
ITResList472 = [ITRes471|ITResList471],
- ?line {STRes472,S472} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes472,S472} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList473 = [STRes472|STResList472],
- ?line ITRes472 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S472),
+ ITRes472 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S472),
ITResList473 = [ITRes472|ITResList472],
- ?line {STRes473,S473} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes473,S473} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList474 = [STRes473|STResList473],
- ?line ITRes473 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S473),
+ ITRes473 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S473),
ITResList474 = [ITRes473|ITResList473],
- ?line {STRes474,S474} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes474,S474} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList475 = [STRes474|STResList474],
- ?line ITRes474 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S474),
+ ITRes474 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S474),
ITResList475 = [ITRes474|ITResList474],
- ?line {STRes475,S475} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes475,S475} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList476 = [STRes475|STResList475],
- ?line ITRes475 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S475),
+ ITRes475 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S475),
ITResList476 = [ITRes475|ITResList475],
- ?line {STRes476,S476} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes476,S476} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList477 = [STRes476|STResList476],
- ?line ITRes476 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S476),
+ ITRes476 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S476),
ITResList477 = [ITRes476|ITResList476],
- ?line {STRes477,S477} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes477,S477} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList478 = [STRes477|STResList477],
- ?line ITRes477 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S477),
+ ITRes477 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S477),
ITResList478 = [ITRes477|ITResList477],
- ?line {STRes478,S478} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes478,S478} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList479 = [STRes478|STResList478],
- ?line ITRes478 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S478),
+ ITRes478 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S478),
ITResList479 = [ITRes478|ITResList478],
- ?line {STRes479,S479} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes479,S479} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList480 = [STRes479|STResList479],
- ?line ITRes479 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S479),
+ ITRes479 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S479),
ITResList480 = [ITRes479|ITResList479],
- ?line {STRes480,S480} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes480,S480} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList481 = [STRes480|STResList480],
- ?line ITRes480 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S480),
+ ITRes480 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S480),
ITResList481 = [ITRes480|ITResList480],
- ?line {STRes481,S481} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes481,S481} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList482 = [STRes481|STResList481],
- ?line ITRes481 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S481),
+ ITRes481 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S481),
ITResList482 = [ITRes481|ITResList481],
- ?line {STRes482,S482} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes482,S482} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList483 = [STRes482|STResList482],
- ?line ITRes482 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S482),
+ ITRes482 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S482),
ITResList483 = [ITRes482|ITResList482],
- ?line {STRes483,S483} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes483,S483} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList484 = [STRes483|STResList483],
- ?line ITRes483 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S483),
+ ITRes483 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S483),
ITResList484 = [ITRes483|ITResList483],
- ?line {STRes484,S484} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes484,S484} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList485 = [STRes484|STResList484],
- ?line ITRes484 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S484),
+ ITRes484 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S484),
ITResList485 = [ITRes484|ITResList484],
- ?line {STRes485,S485} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes485,S485} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList486 = [STRes485|STResList485],
- ?line ITRes485 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S485),
+ ITRes485 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S485),
ITResList486 = [ITRes485|ITResList485],
- ?line {STRes486,S486} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes486,S486} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList487 = [STRes486|STResList486],
- ?line ITRes486 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S486),
+ ITRes486 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S486),
ITResList487 = [ITRes486|ITResList486],
- ?line {STRes487,S487} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes487,S487} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList488 = [STRes487|STResList487],
- ?line ITRes487 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S487),
+ ITRes487 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S487),
ITResList488 = [ITRes487|ITResList487],
- ?line {STRes488,S488} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes488,S488} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList489 = [STRes488|STResList488],
- ?line ITRes488 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S488),
+ ITRes488 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S488),
ITResList489 = [ITRes488|ITResList488],
- ?line {STRes489,S489} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes489,S489} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList490 = [STRes489|STResList489],
- ?line ITRes489 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S489),
+ ITRes489 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_long_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S489),
ITResList490 = [ITRes489|ITResList489],
- ?line {STRes490,S490} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes490,S490} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList491 = [STRes490|STResList490],
- ?line ITRes490 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S490),
+ ITRes490 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S490),
ITResList491 = [ITRes490|ITResList490],
- ?line {STRes491,S491} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes491,S491} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList492 = [STRes491|STResList491],
- ?line ITRes491 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S491),
+ ITRes491 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S491),
ITResList492 = [ITRes491|ITResList491],
- ?line {STRes492,S492} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes492,S492} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList493 = [STRes492|STResList492],
- ?line ITRes492 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S492),
+ ITRes492 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S492),
ITResList493 = [ITRes492|ITResList492],
- ?line {STRes493,S493} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes493,S493} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList494 = [STRes493|STResList493],
- ?line ITRes493 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S493),
+ ITRes493 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S493),
ITResList494 = [ITRes493|ITResList493],
- ?line {STRes494,S494} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes494,S494} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList495 = [STRes494|STResList494],
- ?line ITRes494 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S494),
+ ITRes494 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S494),
ITResList495 = [ITRes494|ITResList494],
- ?line {STRes495,S495} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes495,S495} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList496 = [STRes495|STResList495],
- ?line ITRes495 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S495),
+ ITRes495 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S495),
ITResList496 = [ITRes495|ITResList495],
- ?line {STRes496,S496} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes496,S496} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList497 = [STRes496|STResList496],
- ?line ITRes496 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S496),
+ ITRes496 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S496),
ITResList497 = [ITRes496|ITResList496],
- ?line {STRes497,S497} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes497,S497} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList498 = [STRes497|STResList497],
- ?line ITRes497 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S497),
+ ITRes497 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S497),
ITResList498 = [ITRes497|ITResList497],
- ?line {STRes498,S498} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes498,S498} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList499 = [STRes498|STResList498],
- ?line ITRes498 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S498),
+ ITRes498 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S498),
ITResList499 = [ITRes498|ITResList498],
- ?line {STRes499,S499} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes499,S499} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList500 = [STRes499|STResList499],
- ?line ITRes499 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S499),
+ ITRes499 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S499),
ITResList500 = [ITRes499|ITResList499],
- ?line {STRes500,S500} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes500,S500} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList501 = [STRes500|STResList500],
- ?line ITRes500 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S500),
+ ITRes500 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S500),
ITResList501 = [ITRes500|ITResList500],
- ?line {STRes501,S501} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes501,S501} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList502 = [STRes501|STResList501],
- ?line ITRes501 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S501),
+ ITRes501 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S501),
ITResList502 = [ITRes501|ITResList501],
- ?line {STRes502,S502} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes502,S502} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList503 = [STRes502|STResList502],
- ?line ITRes502 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S502),
+ ITRes502 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S502),
ITResList503 = [ITRes502|ITResList502],
- ?line {STRes503,S503} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes503,S503} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList504 = [STRes503|STResList503],
- ?line ITRes503 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S503),
+ ITRes503 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S503),
ITResList504 = [ITRes503|ITResList503],
- ?line {STRes504,S504} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes504,S504} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList505 = [STRes504|STResList504],
- ?line ITRes504 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S504),
+ ITRes504 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S504),
ITResList505 = [ITRes504|ITResList504],
- ?line {STRes505,S505} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes505,S505} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList506 = [STRes505|STResList505],
- ?line ITRes505 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S505),
+ ITRes505 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S505),
ITResList506 = [ITRes505|ITResList505],
- ?line {STRes506,S506} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes506,S506} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList507 = [STRes506|STResList506],
- ?line ITRes506 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S506),
+ ITRes506 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S506),
ITResList507 = [ITRes506|ITResList506],
- ?line {STRes507,S507} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes507,S507} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList508 = [STRes507|STResList507],
- ?line ITRes507 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S507),
+ ITRes507 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S507),
ITResList508 = [ITRes507|ITResList507],
- ?line {STRes508,S508} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes508,S508} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList509 = [STRes508|STResList508],
- ?line ITRes508 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S508),
+ ITRes508 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S508),
ITResList509 = [ITRes508|ITResList508],
- ?line {STRes509,S509} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes509,S509} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList510 = [STRes509|STResList509],
- ?line ITRes509 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S509),
+ ITRes509 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S509),
ITResList510 = [ITRes509|ITResList509],
- ?line {STRes510,S510} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes510,S510} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList511 = [STRes510|STResList510],
- ?line ITRes510 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S510),
+ ITRes510 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S510),
ITResList511 = [ITRes510|ITResList510],
- ?line {STRes511,S511} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes511,S511} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList512 = [STRes511|STResList511],
- ?line ITRes511 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S511),
+ ITRes511 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S511),
ITResList512 = [ITRes511|ITResList511],
- ?line {STRes512,S512} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes512,S512} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList513 = [STRes512|STResList512],
- ?line ITRes512 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S512),
+ ITRes512 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S512),
ITResList513 = [ITRes512|ITResList512],
- ?line {STRes513,S513} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes513,S513} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList514 = [STRes513|STResList513],
- ?line ITRes513 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S513),
+ ITRes513 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S513),
ITResList514 = [ITRes513|ITResList513],
- ?line {STRes514,S514} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes514,S514} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList515 = [STRes514|STResList514],
- ?line ITRes514 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S514),
+ ITRes514 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_int_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S514),
ITResList515 = [ITRes514|ITResList514],
- ?line {STRes515,S515} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes515,S515} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList516 = [STRes515|STResList515],
- ?line ITRes515 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S515),
+ ITRes515 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S515),
ITResList516 = [ITRes515|ITResList515],
- ?line {STRes516,S516} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes516,S516} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList517 = [STRes516|STResList516],
- ?line ITRes516 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S516),
+ ITRes516 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S516),
ITResList517 = [ITRes516|ITResList516],
- ?line {STRes517,S517} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes517,S517} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList518 = [STRes517|STResList517],
- ?line ITRes517 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S517),
+ ITRes517 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S517),
ITResList518 = [ITRes517|ITResList517],
- ?line {STRes518,S518} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes518,S518} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList519 = [STRes518|STResList518],
- ?line ITRes518 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S518),
+ ITRes518 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S518),
ITResList519 = [ITRes518|ITResList518],
- ?line {STRes519,S519} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes519,S519} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList520 = [STRes519|STResList519],
- ?line ITRes519 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S519),
+ ITRes519 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S519),
ITResList520 = [ITRes519|ITResList519],
- ?line {STRes520,S520} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes520,S520} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList521 = [STRes520|STResList520],
- ?line ITRes520 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S520),
+ ITRes520 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S520),
ITResList521 = [ITRes520|ITResList520],
- ?line {STRes521,S521} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes521,S521} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList522 = [STRes521|STResList521],
- ?line ITRes521 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S521),
+ ITRes521 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S521),
ITResList522 = [ITRes521|ITResList521],
- ?line {STRes522,S522} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes522,S522} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList523 = [STRes522|STResList522],
- ?line ITRes522 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S522),
+ ITRes522 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S522),
ITResList523 = [ITRes522|ITResList522],
- ?line {STRes523,S523} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes523,S523} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList524 = [STRes523|STResList523],
- ?line ITRes523 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S523),
+ ITRes523 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S523),
ITResList524 = [ITRes523|ITResList523],
- ?line {STRes524,S524} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes524,S524} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList525 = [STRes524|STResList524],
- ?line ITRes524 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S524),
+ ITRes524 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S524),
ITResList525 = [ITRes524|ITResList524],
- ?line {STRes525,S525} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes525,S525} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList526 = [STRes525|STResList525],
- ?line ITRes525 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S525),
+ ITRes525 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S525),
ITResList526 = [ITRes525|ITResList525],
- ?line {STRes526,S526} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes526,S526} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList527 = [STRes526|STResList526],
- ?line ITRes526 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S526),
+ ITRes526 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S526),
ITResList527 = [ITRes526|ITResList526],
- ?line {STRes527,S527} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes527,S527} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList528 = [STRes527|STResList527],
- ?line ITRes527 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S527),
+ ITRes527 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S527),
ITResList528 = [ITRes527|ITResList527],
- ?line {STRes528,S528} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes528,S528} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList529 = [STRes528|STResList528],
- ?line ITRes528 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S528),
+ ITRes528 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S528),
ITResList529 = [ITRes528|ITResList528],
- ?line {STRes529,S529} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes529,S529} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList530 = [STRes529|STResList529],
- ?line ITRes529 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S529),
+ ITRes529 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S529),
ITResList530 = [ITRes529|ITResList529],
- ?line {STRes530,S530} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes530,S530} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList531 = [STRes530|STResList530],
- ?line ITRes530 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S530),
+ ITRes530 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S530),
ITResList531 = [ITRes530|ITResList530],
- ?line {STRes531,S531} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes531,S531} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList532 = [STRes531|STResList531],
- ?line ITRes531 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S531),
+ ITRes531 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S531),
ITResList532 = [ITRes531|ITResList531],
- ?line {STRes532,S532} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes532,S532} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList533 = [STRes532|STResList532],
- ?line ITRes532 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S532),
+ ITRes532 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S532),
ITResList533 = [ITRes532|ITResList532],
- ?line {STRes533,S533} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes533,S533} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList534 = [STRes533|STResList533],
- ?line ITRes533 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S533),
+ ITRes533 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S533),
ITResList534 = [ITRes533|ITResList533],
- ?line {STRes534,S534} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes534,S534} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList535 = [STRes534|STResList534],
- ?line ITRes534 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S534),
+ ITRes534 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S534),
ITResList535 = [ITRes534|ITResList534],
- ?line {STRes535,S535} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes535,S535} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList536 = [STRes535|STResList535],
- ?line ITRes535 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S535),
+ ITRes535 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S535),
ITResList536 = [ITRes535|ITResList535],
- ?line {STRes536,S536} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes536,S536} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList537 = [STRes536|STResList536],
- ?line ITRes536 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S536),
+ ITRes536 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S536),
ITResList537 = [ITRes536|ITResList536],
- ?line {STRes537,S537} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes537,S537} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList538 = [STRes537|STResList537],
- ?line ITRes537 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S537),
+ ITRes537 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S537),
ITResList538 = [ITRes537|ITResList537],
- ?line {STRes538,S538} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes538,S538} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList539 = [STRes538|STResList538],
- ?line ITRes538 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S538),
+ ITRes538 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S538),
ITResList539 = [ITRes538|ITResList538],
- ?line {STRes539,S539} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes539,S539} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList540 = [STRes539|STResList539],
- ?line ITRes539 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S539),
+ ITRes539 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_short_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S539),
ITResList540 = [ITRes539|ITResList539],
- ?line {STRes540,S540} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes540,S540} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList541 = [STRes540|STResList540],
- ?line ITRes540 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S540),
+ ITRes540 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S540),
ITResList541 = [ITRes540|ITResList540],
- ?line {STRes541,S541} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes541,S541} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList542 = [STRes541|STResList541],
- ?line ITRes541 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S541),
+ ITRes541 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S541),
ITResList542 = [ITRes541|ITResList541],
- ?line {STRes542,S542} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes542,S542} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList543 = [STRes542|STResList542],
- ?line ITRes542 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S542),
+ ITRes542 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S542),
ITResList543 = [ITRes542|ITResList542],
- ?line {STRes543,S543} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes543,S543} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList544 = [STRes543|STResList543],
- ?line ITRes543 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S543),
+ ITRes543 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S543),
ITResList544 = [ITRes543|ITResList543],
- ?line {STRes544,S544} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes544,S544} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList545 = [STRes544|STResList544],
- ?line ITRes544 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S544),
+ ITRes544 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S544),
ITResList545 = [ITRes544|ITResList544],
- ?line {STRes545,S545} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes545,S545} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList546 = [STRes545|STResList545],
- ?line ITRes545 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S545),
+ ITRes545 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S545),
ITResList546 = [ITRes545|ITResList545],
- ?line {STRes546,S546} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes546,S546} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList547 = [STRes546|STResList546],
- ?line ITRes546 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S546),
+ ITRes546 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S546),
ITResList547 = [ITRes546|ITResList546],
- ?line {STRes547,S547} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes547,S547} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList548 = [STRes547|STResList547],
- ?line ITRes547 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S547),
+ ITRes547 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S547),
ITResList548 = [ITRes547|ITResList547],
- ?line {STRes548,S548} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes548,S548} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList549 = [STRes548|STResList548],
- ?line ITRes548 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S548),
+ ITRes548 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S548),
ITResList549 = [ITRes548|ITResList548],
- ?line {STRes549,S549} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes549,S549} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList550 = [STRes549|STResList549],
- ?line ITRes549 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S549),
+ ITRes549 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S549),
ITResList550 = [ITRes549|ITResList549],
- ?line {STRes550,S550} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes550,S550} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList551 = [STRes550|STResList550],
- ?line ITRes550 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S550),
+ ITRes550 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S550),
ITResList551 = [ITRes550|ITResList550],
- ?line {STRes551,S551} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes551,S551} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList552 = [STRes551|STResList551],
- ?line ITRes551 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S551),
+ ITRes551 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S551),
ITResList552 = [ITRes551|ITResList551],
- ?line {STRes552,S552} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes552,S552} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList553 = [STRes552|STResList552],
- ?line ITRes552 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S552),
+ ITRes552 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S552),
ITResList553 = [ITRes552|ITResList552],
- ?line {STRes553,S553} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes553,S553} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList554 = [STRes553|STResList553],
- ?line ITRes553 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S553),
+ ITRes553 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_long.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S553),
ITResList554 = [ITRes553|ITResList553],
- ?line {STRes554,S554} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes554,S554} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList555 = [STRes554|STResList554],
- ?line ITRes554 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S554),
+ ITRes554 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_int.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S554),
ITResList555 = [ITRes554|ITResList554],
- ?line {STRes555,S555} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes555,S555} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList556 = [STRes555|STResList555],
- ?line ITRes555 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S555),
+ ITRes555 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_short.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S555),
ITResList556 = [ITRes555|ITResList555],
- ?line {STRes556,S556} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes556,S556} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList557 = [STRes556|STResList556],
- ?line ITRes556 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S556),
+ ITRes556 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S556),
ITResList557 = [ITRes556|ITResList556],
- ?line {STRes557,S557} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes557,S557} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList558 = [STRes557|STResList557],
- ?line ITRes557 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S557),
+ ITRes557 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S557),
ITResList558 = [ITRes557|ITResList557],
- ?line {STRes558,S558} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes558,S558} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList559 = [STRes558|STResList558],
- ?line ITRes558 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S558),
+ ITRes558 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S558),
ITResList559 = [ITRes558|ITResList558],
- ?line {STRes559,S559} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes559,S559} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList560 = [STRes559|STResList559],
- ?line ITRes559 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S559),
+ ITRes559 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S559),
ITResList560 = [ITRes559|ITResList559],
- ?line {STRes560,S560} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes560,S560} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList561 = [STRes560|STResList560],
- ?line ITRes560 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S560),
+ ITRes560 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S560),
ITResList561 = [ITRes560|ITResList560],
- ?line {STRes561,S561} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes561,S561} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList562 = [STRes561|STResList561],
- ?line ITRes561 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S561),
+ ITRes561 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S561),
ITResList562 = [ITRes561|ITResList561],
- ?line {STRes562,S562} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes562,S562} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList563 = [STRes562|STResList562],
- ?line ITRes562 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S562),
+ ITRes562 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S562),
ITResList563 = [ITRes562|ITResList562],
- ?line {STRes563,S563} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes563,S563} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList564 = [STRes563|STResList563],
- ?line ITRes563 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S563),
+ ITRes563 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S563),
ITResList564 = [ITRes563|ITResList563],
- ?line {STRes564,S564} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes564,S564} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList565 = [STRes564|STResList564],
- ?line ITRes564 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S564),
+ ITRes564 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_byte_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S564),
ITResList565 = [ITRes564|ITResList564],
- ?line {STRes565,S565} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes565,S565} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList566 = [STRes565|STResList565],
- ?line ITRes565 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S565),
+ ITRes565 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S565),
ITResList566 = [ITRes565|ITResList565],
- ?line {STRes566,S566} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes566,S566} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList567 = [STRes566|STResList566],
- ?line ITRes566 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S566),
+ ITRes566 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S566),
ITResList567 = [ITRes566|ITResList566],
- ?line {STRes567,S567} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes567,S567} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList568 = [STRes567|STResList567],
- ?line ITRes567 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S567),
+ ITRes567 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S567),
ITResList568 = [ITRes567|ITResList567],
- ?line {STRes568,S568} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes568,S568} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList569 = [STRes568|STResList568],
- ?line ITRes568 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S568),
+ ITRes568 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S568),
ITResList569 = [ITRes568|ITResList568],
- ?line {STRes569,S569} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes569,S569} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList570 = [STRes569|STResList569],
- ?line ITRes569 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S569),
+ ITRes569 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S569),
ITResList570 = [ITRes569|ITResList569],
- ?line {STRes570,S570} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes570,S570} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList571 = [STRes570|STResList570],
- ?line ITRes570 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S570),
+ ITRes570 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S570),
ITResList571 = [ITRes570|ITResList570],
- ?line {STRes571,S571} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes571,S571} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList572 = [STRes571|STResList571],
- ?line ITRes571 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S571),
+ ITRes571 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S571),
ITResList572 = [ITRes571|ITResList571],
- ?line {STRes572,S572} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes572,S572} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList573 = [STRes572|STResList572],
- ?line ITRes572 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S572),
+ ITRes572 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S572),
ITResList573 = [ITRes572|ITResList572],
- ?line {STRes573,S573} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes573,S573} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList574 = [STRes573|STResList573],
- ?line ITRes573 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S573),
+ ITRes573 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S573),
ITResList574 = [ITRes573|ITResList573],
- ?line {STRes574,S574} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes574,S574} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList575 = [STRes574|STResList574],
- ?line ITRes574 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S574),
+ ITRes574 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S574),
ITResList575 = [ITRes574|ITResList574],
- ?line {STRes575,S575} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes575,S575} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList576 = [STRes575|STResList575],
- ?line ITRes575 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S575),
+ ITRes575 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S575),
ITResList576 = [ITRes575|ITResList575],
- ?line {STRes576,S576} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes576,S576} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList577 = [STRes576|STResList576],
- ?line ITRes576 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S576),
+ ITRes576 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S576),
ITResList577 = [ITRes576|ITResList576],
- ?line {STRes577,S577} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes577,S577} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList578 = [STRes577|STResList577],
- ?line ITRes577 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S577),
+ ITRes577 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S577),
ITResList578 = [ITRes577|ITResList577],
- ?line {STRes578,S578} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes578,S578} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList579 = [STRes578|STResList578],
- ?line ITRes578 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S578),
+ ITRes578 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S578),
ITResList579 = [ITRes578|ITResList578],
- ?line {STRes579,S579} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes579,S579} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList580 = [STRes579|STResList579],
- ?line ITRes579 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S579),
+ ITRes579 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S579),
ITResList580 = [ITRes579|ITResList579],
- ?line {STRes580,S580} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes580,S580} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList581 = [STRes580|STResList580],
- ?line ITRes580 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S580),
+ ITRes580 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S580),
ITResList581 = [ITRes580|ITResList580],
- ?line {STRes581,S581} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes581,S581} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList582 = [STRes581|STResList581],
- ?line ITRes581 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S581),
+ ITRes581 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S581),
ITResList582 = [ITRes581|ITResList581],
- ?line {STRes582,S582} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes582,S582} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList583 = [STRes582|STResList582],
- ?line ITRes582 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S582),
+ ITRes582 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S582),
ITResList583 = [ITRes582|ITResList582],
- ?line {STRes583,S583} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes583,S583} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList584 = [STRes583|STResList583],
- ?line ITRes583 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S583),
+ ITRes583 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S583),
ITResList584 = [ITRes583|ITResList583],
- ?line {STRes584,S584} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes584,S584} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList585 = [STRes584|STResList584],
- ?line ITRes584 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S584),
+ ITRes584 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S584),
ITResList585 = [ITRes584|ITResList584],
- ?line {STRes585,S585} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes585,S585} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList586 = [STRes585|STResList585],
- ?line ITRes585 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S585),
+ ITRes585 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S585),
ITResList586 = [ITRes585|ITResList585],
- ?line {STRes586,S586} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes586,S586} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList587 = [STRes586|STResList586],
- ?line ITRes586 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S586),
+ ITRes586 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S586),
ITResList587 = [ITRes586|ITResList586],
- ?line {STRes587,S587} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes587,S587} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList588 = [STRes587|STResList587],
- ?line ITRes587 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S587),
+ ITRes587 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_nonNegativeInteger_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S587),
ITResList588 = [ITRes587|ITResList587],
- ?line {STRes588,S588} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes588,S588} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList589 = [STRes588|STResList588],
- ?line ITRes588 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S588),
+ ITRes588 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S588),
ITResList589 = [ITRes588|ITResList588],
- ?line {STRes589,S589} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes589,S589} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList590 = [STRes589|STResList589],
- ?line ITRes589 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S589),
+ ITRes589 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S589),
ITResList590 = [ITRes589|ITResList589],
- ?line {STRes590,S590} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes590,S590} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList591 = [STRes590|STResList590],
- ?line ITRes590 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S590),
+ ITRes590 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S590),
ITResList591 = [ITRes590|ITResList590],
- ?line {STRes591,S591} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes591,S591} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList592 = [STRes591|STResList591],
- ?line ITRes591 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S591),
+ ITRes591 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S591),
ITResList592 = [ITRes591|ITResList591],
- ?line {STRes592,S592} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes592,S592} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList593 = [STRes592|STResList592],
- ?line ITRes592 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S592),
+ ITRes592 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S592),
ITResList593 = [ITRes592|ITResList592],
- ?line {STRes593,S593} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes593,S593} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList594 = [STRes593|STResList593],
- ?line ITRes593 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S593),
+ ITRes593 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S593),
ITResList594 = [ITRes593|ITResList593],
- ?line {STRes594,S594} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes594,S594} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList595 = [STRes594|STResList594],
- ?line ITRes594 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S594),
+ ITRes594 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S594),
ITResList595 = [ITRes594|ITResList594],
- ?line {STRes595,S595} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes595,S595} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList596 = [STRes595|STResList595],
- ?line ITRes595 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S595),
+ ITRes595 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S595),
ITResList596 = [ITRes595|ITResList595],
- ?line {STRes596,S596} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes596,S596} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList597 = [STRes596|STResList596],
- ?line ITRes596 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S596),
+ ITRes596 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S596),
ITResList597 = [ITRes596|ITResList596],
- ?line {STRes597,S597} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes597,S597} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList598 = [STRes597|STResList597],
- ?line ITRes597 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S597),
+ ITRes597 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S597),
ITResList598 = [ITRes597|ITResList597],
- ?line {STRes598,S598} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes598,S598} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList599 = [STRes598|STResList598],
- ?line ITRes598 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S598),
+ ITRes598 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S598),
ITResList599 = [ITRes598|ITResList598],
- ?line {STRes599,S599} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes599,S599} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList600 = [STRes599|STResList599],
- ?line ITRes599 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S599),
+ ITRes599 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S599),
ITResList600 = [ITRes599|ITResList599],
- ?line {STRes600,S600} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes600,S600} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList601 = [STRes600|STResList600],
- ?line ITRes600 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S600),
+ ITRes600 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S600),
ITResList601 = [ITRes600|ITResList600],
- ?line {STRes601,S601} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes601,S601} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList602 = [STRes601|STResList601],
- ?line ITRes601 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S601),
+ ITRes601 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S601),
ITResList602 = [ITRes601|ITResList601],
- ?line {STRes602,S602} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes602,S602} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList603 = [STRes602|STResList602],
- ?line ITRes602 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S602),
+ ITRes602 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S602),
ITResList603 = [ITRes602|ITResList602],
- ?line {STRes603,S603} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes603,S603} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList604 = [STRes603|STResList603],
- ?line ITRes603 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S603),
+ ITRes603 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S603),
ITResList604 = [ITRes603|ITResList603],
- ?line {STRes604,S604} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes604,S604} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList605 = [STRes604|STResList604],
- ?line ITRes604 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S604),
+ ITRes604 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S604),
ITResList605 = [ITRes604|ITResList604],
- ?line {STRes605,S605} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes605,S605} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList606 = [STRes605|STResList605],
- ?line ITRes605 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S605),
+ ITRes605 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S605),
ITResList606 = [ITRes605|ITResList605],
- ?line {STRes606,S606} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes606,S606} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList607 = [STRes606|STResList606],
- ?line ITRes606 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S606),
+ ITRes606 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S606),
ITResList607 = [ITRes606|ITResList606],
- ?line {STRes607,S607} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes607,S607} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList608 = [STRes607|STResList607],
- ?line ITRes607 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S607),
+ ITRes607 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S607),
ITResList608 = [ITRes607|ITResList607],
- ?line {STRes608,S608} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes608,S608} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList609 = [STRes608|STResList608],
- ?line ITRes608 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S608),
+ ITRes608 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S608),
ITResList609 = [ITRes608|ITResList608],
- ?line {STRes609,S609} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes609,S609} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList610 = [STRes609|STResList609],
- ?line ITRes609 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S609),
+ ITRes609 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S609),
ITResList610 = [ITRes609|ITResList609],
- ?line {STRes610,S610} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes610,S610} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList611 = [STRes610|STResList610],
- ?line ITRes610 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S610),
+ ITRes610 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_positiveInteger_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S610),
ITResList611 = [ITRes610|ITResList610],
- ?line {STRes611,S611} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes611,S611} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList612 = [STRes611|STResList611],
- ?line ITRes611 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S611),
+ ITRes611 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S611),
ITResList612 = [ITRes611|ITResList611],
- ?line {STRes612,S612} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes612,S612} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList613 = [STRes612|STResList612],
- ?line ITRes612 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S612),
+ ITRes612 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S612),
ITResList613 = [ITRes612|ITResList612],
- ?line {STRes613,S613} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes613,S613} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList614 = [STRes613|STResList613],
- ?line ITRes613 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S613),
+ ITRes613 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S613),
ITResList614 = [ITRes613|ITResList613],
- ?line {STRes614,S614} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes614,S614} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList615 = [STRes614|STResList614],
- ?line ITRes614 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S614),
+ ITRes614 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S614),
ITResList615 = [ITRes614|ITResList614],
- ?line {STRes615,S615} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes615,S615} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList616 = [STRes615|STResList615],
- ?line ITRes615 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S615),
+ ITRes615 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S615),
ITResList616 = [ITRes615|ITResList615],
- ?line {STRes616,S616} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes616,S616} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList617 = [STRes616|STResList616],
- ?line ITRes616 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S616),
+ ITRes616 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S616),
ITResList617 = [ITRes616|ITResList616],
- ?line {STRes617,S617} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes617,S617} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList618 = [STRes617|STResList617],
- ?line ITRes617 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S617),
+ ITRes617 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S617),
ITResList618 = [ITRes617|ITResList617],
- ?line {STRes618,S618} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes618,S618} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList619 = [STRes618|STResList618],
- ?line ITRes618 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S618),
+ ITRes618 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S618),
ITResList619 = [ITRes618|ITResList618],
- ?line {STRes619,S619} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes619,S619} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList620 = [STRes619|STResList619],
- ?line ITRes619 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S619),
+ ITRes619 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S619),
ITResList620 = [ITRes619|ITResList619],
- ?line {STRes620,S620} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes620,S620} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList621 = [STRes620|STResList620],
- ?line ITRes620 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S620),
+ ITRes620 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S620),
ITResList621 = [ITRes620|ITResList620],
- ?line {STRes621,S621} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes621,S621} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList622 = [STRes621|STResList621],
- ?line ITRes621 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S621),
+ ITRes621 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S621),
ITResList622 = [ITRes621|ITResList621],
- ?line {STRes622,S622} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes622,S622} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList623 = [STRes622|STResList622],
- ?line ITRes622 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S622),
+ ITRes622 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S622),
ITResList623 = [ITRes622|ITResList622],
- ?line {STRes623,S623} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes623,S623} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList624 = [STRes623|STResList623],
- ?line ITRes623 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S623),
+ ITRes623 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S623),
ITResList624 = [ITRes623|ITResList623],
- ?line {STRes624,S624} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes624,S624} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList625 = [STRes624|STResList624],
- ?line ITRes624 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S624),
+ ITRes624 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S624),
ITResList625 = [ITRes624|ITResList624],
- ?line {STRes625,S625} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes625,S625} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList626 = [STRes625|STResList625],
- ?line ITRes625 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S625),
+ ITRes625 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S625),
ITResList626 = [ITRes625|ITResList625],
- ?line {STRes626,S626} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes626,S626} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList627 = [STRes626|STResList626],
- ?line ITRes626 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S626),
+ ITRes626 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S626),
ITResList627 = [ITRes626|ITResList626],
- ?line {STRes627,S627} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes627,S627} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList628 = [STRes627|STResList627],
- ?line ITRes627 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S627),
+ ITRes627 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S627),
ITResList628 = [ITRes627|ITResList627],
- ?line {STRes628,S628} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes628,S628} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList629 = [STRes628|STResList628],
- ?line ITRes628 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S628),
+ ITRes628 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S628),
ITResList629 = [ITRes628|ITResList628],
- ?line {STRes629,S629} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes629,S629} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList630 = [STRes629|STResList629],
- ?line ITRes629 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S629),
+ ITRes629 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S629),
ITResList630 = [ITRes629|ITResList629],
- ?line {STRes630,S630} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes630,S630} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList631 = [STRes630|STResList630],
- ?line ITRes630 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S630),
+ ITRes630 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S630),
ITResList631 = [ITRes630|ITResList630],
- ?line {STRes631,S631} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes631,S631} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList632 = [STRes631|STResList631],
- ?line ITRes631 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S631),
+ ITRes631 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S631),
ITResList632 = [ITRes631|ITResList631],
- ?line {STRes632,S632} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes632,S632} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList633 = [STRes632|STResList632],
- ?line ITRes632 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S632),
+ ITRes632 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S632),
ITResList633 = [ITRes632|ITResList632],
- ?line {STRes633,S633} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes633,S633} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList634 = [STRes633|STResList633],
- ?line ITRes633 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S633),
+ ITRes633 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedLong_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S633),
ITResList634 = [ITRes633|ITResList633],
- ?line {STRes634,S634} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes634,S634} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList635 = [STRes634|STResList634],
- ?line ITRes634 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S634),
+ ITRes634 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S634),
ITResList635 = [ITRes634|ITResList634],
- ?line {STRes635,S635} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes635,S635} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList636 = [STRes635|STResList635],
- ?line ITRes635 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S635),
+ ITRes635 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S635),
ITResList636 = [ITRes635|ITResList635],
- ?line {STRes636,S636} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes636,S636} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList637 = [STRes636|STResList636],
- ?line ITRes636 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S636),
+ ITRes636 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S636),
ITResList637 = [ITRes636|ITResList636],
- ?line {STRes637,S637} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes637,S637} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList638 = [STRes637|STResList637],
- ?line ITRes637 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S637),
+ ITRes637 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S637),
ITResList638 = [ITRes637|ITResList637],
- ?line {STRes638,S638} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes638,S638} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList639 = [STRes638|STResList638],
- ?line ITRes638 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S638),
+ ITRes638 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S638),
ITResList639 = [ITRes638|ITResList638],
- ?line {STRes639,S639} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes639,S639} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList640 = [STRes639|STResList639],
- ?line ITRes639 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S639),
+ ITRes639 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S639),
ITResList640 = [ITRes639|ITResList639],
- ?line {STRes640,S640} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes640,S640} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList641 = [STRes640|STResList640],
- ?line ITRes640 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S640),
+ ITRes640 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S640),
ITResList641 = [ITRes640|ITResList640],
- ?line {STRes641,S641} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes641,S641} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList642 = [STRes641|STResList641],
- ?line ITRes641 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S641),
+ ITRes641 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S641),
ITResList642 = [ITRes641|ITResList641],
- ?line {STRes642,S642} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes642,S642} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList643 = [STRes642|STResList642],
- ?line ITRes642 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S642),
+ ITRes642 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S642),
ITResList643 = [ITRes642|ITResList642],
- ?line {STRes643,S643} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes643,S643} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList644 = [STRes643|STResList643],
- ?line ITRes643 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S643),
+ ITRes643 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S643),
ITResList644 = [ITRes643|ITResList643],
- ?line {STRes644,S644} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes644,S644} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList645 = [STRes644|STResList644],
- ?line ITRes644 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S644),
+ ITRes644 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S644),
ITResList645 = [ITRes644|ITResList644],
- ?line {STRes645,S645} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes645,S645} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList646 = [STRes645|STResList645],
- ?line ITRes645 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S645),
+ ITRes645 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S645),
ITResList646 = [ITRes645|ITResList645],
- ?line {STRes646,S646} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes646,S646} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList647 = [STRes646|STResList646],
- ?line ITRes646 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S646),
+ ITRes646 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S646),
ITResList647 = [ITRes646|ITResList646],
- ?line {STRes647,S647} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes647,S647} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList648 = [STRes647|STResList647],
- ?line ITRes647 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S647),
+ ITRes647 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S647),
ITResList648 = [ITRes647|ITResList647],
- ?line {STRes648,S648} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes648,S648} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList649 = [STRes648|STResList648],
- ?line ITRes648 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S648),
+ ITRes648 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S648),
ITResList649 = [ITRes648|ITResList648],
- ?line {STRes649,S649} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes649,S649} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList650 = [STRes649|STResList649],
- ?line ITRes649 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S649),
+ ITRes649 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S649),
ITResList650 = [ITRes649|ITResList649],
- ?line {STRes650,S650} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes650,S650} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList651 = [STRes650|STResList650],
- ?line ITRes650 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S650),
+ ITRes650 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S650),
ITResList651 = [ITRes650|ITResList650],
- ?line {STRes651,S651} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes651,S651} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList652 = [STRes651|STResList651],
- ?line ITRes651 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S651),
+ ITRes651 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S651),
ITResList652 = [ITRes651|ITResList651],
- ?line {STRes652,S652} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes652,S652} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList653 = [STRes652|STResList652],
- ?line ITRes652 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S652),
+ ITRes652 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S652),
ITResList653 = [ITRes652|ITResList652],
- ?line {STRes653,S653} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes653,S653} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList654 = [STRes653|STResList653],
- ?line ITRes653 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S653),
+ ITRes653 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S653),
ITResList654 = [ITRes653|ITResList653],
- ?line {STRes654,S654} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes654,S654} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList655 = [STRes654|STResList654],
- ?line ITRes654 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S654),
+ ITRes654 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S654),
ITResList655 = [ITRes654|ITResList654],
- ?line {STRes655,S655} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes655,S655} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList656 = [STRes655|STResList655],
- ?line ITRes655 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S655),
+ ITRes655 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S655),
ITResList656 = [ITRes655|ITResList655],
- ?line {STRes656,S656} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes656,S656} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList657 = [STRes656|STResList656],
- ?line ITRes656 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S656),
+ ITRes656 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedInt_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S656),
ITResList657 = [ITRes656|ITResList656],
- ?line {STRes657,S657} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes657,S657} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList658 = [STRes657|STResList657],
- ?line ITRes657 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S657),
+ ITRes657 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S657),
ITResList658 = [ITRes657|ITResList657],
- ?line {STRes658,S658} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes658,S658} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList659 = [STRes658|STResList658],
- ?line ITRes658 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S658),
+ ITRes658 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S658),
ITResList659 = [ITRes658|ITResList658],
- ?line {STRes659,S659} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes659,S659} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList660 = [STRes659|STResList659],
- ?line ITRes659 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S659),
+ ITRes659 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S659),
ITResList660 = [ITRes659|ITResList659],
- ?line {STRes660,S660} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes660,S660} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList661 = [STRes660|STResList660],
- ?line ITRes660 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S660),
+ ITRes660 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S660),
ITResList661 = [ITRes660|ITResList660],
- ?line {STRes661,S661} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes661,S661} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList662 = [STRes661|STResList661],
- ?line ITRes661 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S661),
+ ITRes661 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S661),
ITResList662 = [ITRes661|ITResList661],
- ?line {STRes662,S662} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes662,S662} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList663 = [STRes662|STResList662],
- ?line ITRes662 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S662),
+ ITRes662 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S662),
ITResList663 = [ITRes662|ITResList662],
- ?line {STRes663,S663} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes663,S663} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList664 = [STRes663|STResList663],
- ?line ITRes663 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S663),
+ ITRes663 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S663),
ITResList664 = [ITRes663|ITResList663],
- ?line {STRes664,S664} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes664,S664} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList665 = [STRes664|STResList664],
- ?line ITRes664 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S664),
+ ITRes664 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S664),
ITResList665 = [ITRes664|ITResList664],
- ?line {STRes665,S665} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes665,S665} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList666 = [STRes665|STResList665],
- ?line ITRes665 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S665),
+ ITRes665 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S665),
ITResList666 = [ITRes665|ITResList665],
- ?line {STRes666,S666} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes666,S666} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList667 = [STRes666|STResList666],
- ?line ITRes666 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S666),
+ ITRes666 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S666),
ITResList667 = [ITRes666|ITResList666],
- ?line {STRes667,S667} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes667,S667} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList668 = [STRes667|STResList667],
- ?line ITRes667 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S667),
+ ITRes667 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S667),
ITResList668 = [ITRes667|ITResList667],
- ?line {STRes668,S668} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes668,S668} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList669 = [STRes668|STResList668],
- ?line ITRes668 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S668),
+ ITRes668 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S668),
ITResList669 = [ITRes668|ITResList668],
- ?line {STRes669,S669} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes669,S669} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList670 = [STRes669|STResList669],
- ?line ITRes669 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S669),
+ ITRes669 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S669),
ITResList670 = [ITRes669|ITResList669],
- ?line {STRes670,S670} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes670,S670} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList671 = [STRes670|STResList670],
- ?line ITRes670 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S670),
+ ITRes670 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S670),
ITResList671 = [ITRes670|ITResList670],
- ?line {STRes671,S671} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes671,S671} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList672 = [STRes671|STResList671],
- ?line ITRes671 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S671),
+ ITRes671 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S671),
ITResList672 = [ITRes671|ITResList671],
- ?line {STRes672,S672} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes672,S672} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList673 = [STRes672|STResList672],
- ?line ITRes672 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S672),
+ ITRes672 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S672),
ITResList673 = [ITRes672|ITResList672],
- ?line {STRes673,S673} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes673,S673} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList674 = [STRes673|STResList673],
- ?line ITRes673 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S673),
+ ITRes673 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S673),
ITResList674 = [ITRes673|ITResList673],
- ?line {STRes674,S674} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes674,S674} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList675 = [STRes674|STResList674],
- ?line ITRes674 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S674),
+ ITRes674 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S674),
ITResList675 = [ITRes674|ITResList674],
- ?line {STRes675,S675} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes675,S675} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList676 = [STRes675|STResList675],
- ?line ITRes675 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S675),
+ ITRes675 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S675),
ITResList676 = [ITRes675|ITResList675],
- ?line {STRes676,S676} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes676,S676} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList677 = [STRes676|STResList676],
- ?line ITRes676 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S676),
+ ITRes676 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S676),
ITResList677 = [ITRes676|ITResList676],
- ?line {STRes677,S677} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes677,S677} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList678 = [STRes677|STResList677],
- ?line ITRes677 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S677),
+ ITRes677 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S677),
ITResList678 = [ITRes677|ITResList677],
- ?line {STRes678,S678} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes678,S678} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList679 = [STRes678|STResList678],
- ?line ITRes678 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S678),
+ ITRes678 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S678),
ITResList679 = [ITRes678|ITResList678],
- ?line {STRes679,S679} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes679,S679} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList680 = [STRes679|STResList679],
- ?line ITRes679 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S679),
+ ITRes679 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedShort_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S679),
ITResList680 = [ITRes679|ITResList679],
- ?line {STRes680,S680} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes680,S680} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList681 = [STRes680|STResList680],
- ?line ITRes680 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S680),
+ ITRes680 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S680),
ITResList681 = [ITRes680|ITResList680],
- ?line {STRes681,S681} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes681,S681} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList682 = [STRes681|STResList681],
- ?line ITRes681 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S681),
+ ITRes681 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S681),
ITResList682 = [ITRes681|ITResList681],
- ?line {STRes682,S682} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes682,S682} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList683 = [STRes682|STResList682],
- ?line ITRes682 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S682),
+ ITRes682 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S682),
ITResList683 = [ITRes682|ITResList682],
- ?line {STRes683,S683} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes683,S683} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList684 = [STRes683|STResList683],
- ?line ITRes683 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S683),
+ ITRes683 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S683),
ITResList684 = [ITRes683|ITResList683],
- ?line {STRes684,S684} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes684,S684} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList685 = [STRes684|STResList684],
- ?line ITRes684 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S684),
+ ITRes684 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S684),
ITResList685 = [ITRes684|ITResList684],
- ?line {STRes685,S685} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes685,S685} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList686 = [STRes685|STResList685],
- ?line ITRes685 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S685),
+ ITRes685 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S685),
ITResList686 = [ITRes685|ITResList685],
- ?line {STRes686,S686} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes686,S686} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList687 = [STRes686|STResList686],
- ?line ITRes686 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S686),
+ ITRes686 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S686),
ITResList687 = [ITRes686|ITResList686],
- ?line {STRes687,S687} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes687,S687} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList688 = [STRes687|STResList687],
- ?line ITRes687 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S687),
+ ITRes687 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S687),
ITResList688 = [ITRes687|ITResList687],
- ?line {STRes688,S688} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes688,S688} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList689 = [STRes688|STResList688],
- ?line ITRes688 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S688),
+ ITRes688 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S688),
ITResList689 = [ITRes688|ITResList688],
- ?line {STRes689,S689} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes689,S689} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList690 = [STRes689|STResList689],
- ?line ITRes689 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S689),
+ ITRes689 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S689),
ITResList690 = [ITRes689|ITResList689],
- ?line {STRes690,S690} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes690,S690} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList691 = [STRes690|STResList690],
- ?line ITRes690 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S690),
+ ITRes690 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S690),
ITResList691 = [ITRes690|ITResList690],
- ?line {STRes691,S691} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes691,S691} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList692 = [STRes691|STResList691],
- ?line ITRes691 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S691),
+ ITRes691 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S691),
ITResList692 = [ITRes691|ITResList691],
- ?line {STRes692,S692} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes692,S692} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList693 = [STRes692|STResList692],
- ?line ITRes692 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S692),
+ ITRes692 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S692),
ITResList693 = [ITRes692|ITResList692],
- ?line {STRes693,S693} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes693,S693} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList694 = [STRes693|STResList693],
- ?line ITRes693 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S693),
+ ITRes693 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S693),
ITResList694 = [ITRes693|ITResList693],
- ?line {STRes694,S694} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes694,S694} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList695 = [STRes694|STResList694],
- ?line ITRes694 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S694),
+ ITRes694 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S694),
ITResList695 = [ITRes694|ITResList694],
- ?line {STRes695,S695} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes695,S695} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList696 = [STRes695|STResList695],
- ?line ITRes695 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S695),
+ ITRes695 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S695),
ITResList696 = [ITRes695|ITResList695],
- ?line {STRes696,S696} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes696,S696} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList697 = [STRes696|STResList696],
- ?line ITRes696 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S696),
+ ITRes696 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S696),
ITResList697 = [ITRes696|ITResList696],
- ?line {STRes697,S697} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes697,S697} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList698 = [STRes697|STResList697],
- ?line ITRes697 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S697),
+ ITRes697 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S697),
ITResList698 = [ITRes697|ITResList697],
- ?line {STRes698,S698} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes698,S698} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList699 = [STRes698|STResList698],
- ?line ITRes698 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S698),
+ ITRes698 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S698),
ITResList699 = [ITRes698|ITResList698],
- ?line {STRes699,S699} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes699,S699} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList700 = [STRes699|STResList699],
- ?line ITRes699 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S699),
+ ITRes699 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S699),
ITResList700 = [ITRes699|ITResList699],
- ?line {STRes700,S700} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes700,S700} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList701 = [STRes700|STResList700],
- ?line ITRes700 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S700),
+ ITRes700 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S700),
ITResList701 = [ITRes700|ITResList700],
- ?line {STRes701,S701} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes701,S701} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList702 = [STRes701|STResList701],
- ?line ITRes701 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S701),
+ ITRes701 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S701),
ITResList702 = [ITRes701|ITResList701],
- ?line {STRes702,S702} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes702,S702} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList703 = [STRes702|STResList702],
- ?line ITRes702 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S702),
+ ITRes702 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_unsignedByte_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S702),
ITResList703 = [ITRes702|ITResList702],
- ?line {STRes703,S703} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes703,S703} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList704 = [STRes703|STResList703],
- ?line ITRes703 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S703),
+ ITRes703 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S703),
ITResList704 = [ITRes703|ITResList703],
- ?line {STRes704,S704} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes704,S704} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList705 = [STRes704|STResList704],
- ?line ITRes704 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S704),
+ ITRes704 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S704),
ITResList705 = [ITRes704|ITResList704],
- ?line {STRes705,S705} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes705,S705} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList706 = [STRes705|STResList705],
- ?line ITRes705 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S705),
+ ITRes705 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S705),
ITResList706 = [ITRes705|ITResList705],
- ?line {STRes706,S706} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes706,S706} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList707 = [STRes706|STResList706],
- ?line ITRes706 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S706),
+ ITRes706 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S706),
ITResList707 = [ITRes706|ITResList706],
- ?line {STRes707,S707} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes707,S707} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList708 = [STRes707|STResList707],
- ?line ITRes707 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S707),
+ ITRes707 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S707),
ITResList708 = [ITRes707|ITResList707],
- ?line {STRes708,S708} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes708,S708} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList709 = [STRes708|STResList708],
- ?line ITRes708 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S708),
+ ITRes708 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S708),
ITResList709 = [ITRes708|ITResList708],
- ?line {STRes709,S709} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes709,S709} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList710 = [STRes709|STResList709],
- ?line ITRes709 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S709),
+ ITRes709 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S709),
ITResList710 = [ITRes709|ITResList709],
- ?line {STRes710,S710} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes710,S710} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList711 = [STRes710|STResList710],
- ?line ITRes710 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S710),
+ ITRes710 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S710),
ITResList711 = [ITRes710|ITResList710],
- ?line {STRes711,S711} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes711,S711} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList712 = [STRes711|STResList711],
- ?line ITRes711 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S711),
+ ITRes711 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S711),
ITResList712 = [ITRes711|ITResList711],
- ?line {STRes712,S712} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes712,S712} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList713 = [STRes712|STResList712],
- ?line ITRes712 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S712),
+ ITRes712 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S712),
ITResList713 = [ITRes712|ITResList712],
- ?line {STRes713,S713} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes713,S713} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList714 = [STRes713|STResList713],
- ?line ITRes713 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S713),
+ ITRes713 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S713),
ITResList714 = [ITRes713|ITResList713],
- ?line {STRes714,S714} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes714,S714} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList715 = [STRes714|STResList714],
- ?line ITRes714 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S714),
+ ITRes714 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S714),
ITResList715 = [ITRes714|ITResList714],
- ?line {STRes715,S715} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes715,S715} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList716 = [STRes715|STResList715],
- ?line ITRes715 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S715),
+ ITRes715 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S715),
ITResList716 = [ITRes715|ITResList715],
- ?line {STRes716,S716} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes716,S716} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList717 = [STRes716|STResList716],
- ?line ITRes716 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S716),
+ ITRes716 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S716),
ITResList717 = [ITRes716|ITResList716],
- ?line {STRes717,S717} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes717,S717} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList718 = [STRes717|STResList717],
- ?line ITRes717 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S717),
+ ITRes717 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S717),
ITResList718 = [ITRes717|ITResList717],
- ?line {STRes718,S718} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes718,S718} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList719 = [STRes718|STResList718],
- ?line ITRes718 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S718),
+ ITRes718 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S718),
ITResList719 = [ITRes718|ITResList718],
- ?line {STRes719,S719} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes719,S719} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList720 = [STRes719|STResList719],
- ?line ITRes719 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S719),
+ ITRes719 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S719),
ITResList720 = [ITRes719|ITResList719],
- ?line {STRes720,S720} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes720,S720} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList721 = [STRes720|STResList720],
- ?line ITRes720 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S720),
+ ITRes720 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S720),
ITResList721 = [ITRes720|ITResList720],
- ?line {STRes721,S721} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes721,S721} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList722 = [STRes721|STResList721],
- ?line ITRes721 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S721),
+ ITRes721 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S721),
ITResList722 = [ITRes721|ITResList721],
- ?line {STRes722,S722} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes722,S722} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList723 = [STRes722|STResList722],
- ?line ITRes722 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S722),
+ ITRes722 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S722),
ITResList723 = [ITRes722|ITResList722],
- ?line {STRes723,S723} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes723,S723} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList724 = [STRes723|STResList723],
- ?line ITRes723 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S723),
+ ITRes723 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S723),
ITResList724 = [ITRes723|ITResList723],
- ?line {STRes724,S724} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes724,S724} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList725 = [STRes724|STResList724],
- ?line ITRes724 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S724),
+ ITRes724 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S724),
ITResList725 = [ITRes724|ITResList724],
- ?line {STRes725,S725} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes725,S725} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList726 = [STRes725|STResList725],
- ?line ITRes725 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S725),
+ ITRes725 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S725),
ITResList726 = [ITRes725|ITResList725],
- ?line {STRes726,S726} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes726,S726} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList727 = [STRes726|STResList726],
- ?line ITRes726 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_double.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S726),
+ ITRes726 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_double.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S726),
ITResList727 = [ITRes726|ITResList726],
- ?line {STRes727,S727} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes727,S727} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList728 = [STRes727|STResList727],
- ?line ITRes727 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S727),
+ ITRes727 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_double_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S727),
ITResList728 = [ITRes727|ITResList727],
- ?line {STRes728,S728} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes728,S728} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList729 = [STRes728|STResList728],
- ?line ITRes728 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S728),
+ ITRes728 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S728),
ITResList729 = [ITRes728|ITResList728],
- ?line {STRes729,S729} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes729,S729} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList730 = [STRes729|STResList729],
- ?line ITRes729 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S729),
+ ITRes729 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S729),
ITResList730 = [ITRes729|ITResList729],
- ?line {STRes730,S730} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes730,S730} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList731 = [STRes730|STResList730],
- ?line ITRes730 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S730),
+ ITRes730 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S730),
ITResList731 = [ITRes730|ITResList730],
- ?line {STRes731,S731} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes731,S731} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList732 = [STRes731|STResList731],
- ?line ITRes731 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S731),
+ ITRes731 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S731),
ITResList732 = [ITRes731|ITResList731],
- ?line {STRes732,S732} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes732,S732} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList733 = [STRes732|STResList732],
- ?line ITRes732 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S732),
+ ITRes732 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S732),
ITResList733 = [ITRes732|ITResList732],
- ?line {STRes733,S733} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes733,S733} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList734 = [STRes733|STResList733],
- ?line ITRes733 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S733),
+ ITRes733 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S733),
ITResList734 = [ITRes733|ITResList733],
- ?line {STRes734,S734} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes734,S734} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList735 = [STRes734|STResList734],
- ?line ITRes734 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S734),
+ ITRes734 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S734),
ITResList735 = [ITRes734|ITResList734],
- ?line {STRes735,S735} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes735,S735} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList736 = [STRes735|STResList735],
- ?line ITRes735 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S735),
+ ITRes735 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S735),
ITResList736 = [ITRes735|ITResList735],
- ?line {STRes736,S736} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes736,S736} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList737 = [STRes736|STResList736],
- ?line ITRes736 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S736),
+ ITRes736 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S736),
ITResList737 = [ITRes736|ITResList736],
- ?line {STRes737,S737} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes737,S737} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList738 = [STRes737|STResList737],
- ?line ITRes737 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S737),
+ ITRes737 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S737),
ITResList738 = [ITRes737|ITResList737],
- ?line {STRes738,S738} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes738,S738} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList739 = [STRes738|STResList738],
- ?line ITRes738 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S738),
+ ITRes738 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S738),
ITResList739 = [ITRes738|ITResList738],
- ?line {STRes739,S739} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes739,S739} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList740 = [STRes739|STResList739],
- ?line ITRes739 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S739),
+ ITRes739 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S739),
ITResList740 = [ITRes739|ITResList739],
- ?line {STRes740,S740} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes740,S740} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_base64Binary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList741 = [STRes740|STResList740],
- ?line ITRes740 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S740),
+ ITRes740 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_base64Binary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S740),
ITResList741 = [ITRes740|ITResList740],
- ?line {STRes741,S741} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes741,S741} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_hexBinary.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList742 = [STRes741|STResList741],
- ?line ITRes741 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S741),
+ ITRes741 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_hexBinary.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S741),
ITResList742 = [ITRes741|ITResList741],
- ?line {STRes742,S742} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes742,S742} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_float.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList743 = [STRes742|STResList742],
- ?line ITRes742 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S742),
+ ITRes742 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_float.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S742),
ITResList743 = [ITRes742|ITResList742],
- ?line {STRes743,S743} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes743,S743} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_decimal.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList744 = [STRes743|STResList743],
- ?line ITRes743 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S743),
+ ITRes743 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_decimal.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S743),
ITResList744 = [ITRes743|ITResList743],
- ?line {STRes744,S744} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes744,S744} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_integer.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList745 = [STRes744|STResList744],
- ?line ITRes744 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S744),
+ ITRes744 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_integer.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S744),
ITResList745 = [ITRes744|ITResList744],
- ?line {STRes745,S745} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes745,S745} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_nonPositiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList746 = [STRes745|STResList745],
- ?line ITRes745 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S745),
+ ITRes745 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_nonPositiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S745),
ITResList746 = [ITRes745|ITResList745],
- ?line {STRes746,S746} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes746,S746} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_negativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList747 = [STRes746|STResList746],
- ?line ITRes746 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S746),
+ ITRes746 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_negativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S746),
ITResList747 = [ITRes746|ITResList746],
- ?line {STRes747,S747} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes747,S747} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_long.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList748 = [STRes747|STResList747],
- ?line ITRes747 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S747),
+ ITRes747 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_long.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S747),
ITResList748 = [ITRes747|ITResList747],
- ?line {STRes748,S748} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes748,S748} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_int.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList749 = [STRes748|STResList748],
- ?line ITRes748 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S748),
+ ITRes748 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_int.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S748),
ITResList749 = [ITRes748|ITResList748],
- ?line {STRes749,S749} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes749,S749} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_short.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList750 = [STRes749|STResList749],
- ?line ITRes749 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S749),
+ ITRes749 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_short.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S749),
ITResList750 = [ITRes749|ITResList749],
- ?line {STRes750,S750} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes750,S750} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_byte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList751 = [STRes750|STResList750],
- ?line ITRes750 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S750),
+ ITRes750 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_byte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S750),
ITResList751 = [ITRes750|ITResList750],
- ?line {STRes751,S751} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes751,S751} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_nonNegativeInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList752 = [STRes751|STResList751],
- ?line ITRes751 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S751),
+ ITRes751 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_nonNegativeInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S751),
ITResList752 = [ITRes751|ITResList751],
- ?line {STRes752,S752} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes752,S752} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_positiveInteger.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList753 = [STRes752|STResList752],
- ?line ITRes752 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S752),
+ ITRes752 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_positiveInteger.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S752),
ITResList753 = [ITRes752|ITResList752],
- ?line {STRes753,S753} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes753,S753} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedLong.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList754 = [STRes753|STResList753],
- ?line ITRes753 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S753),
+ ITRes753 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedLong.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S753),
ITResList754 = [ITRes753|ITResList753],
- ?line {STRes754,S754} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes754,S754} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedInt.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList755 = [STRes754|STResList754],
- ?line ITRes754 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S754),
+ ITRes754 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedInt.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S754),
ITResList755 = [ITRes754|ITResList754],
- ?line {STRes755,S755} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes755,S755} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedShort.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList756 = [STRes755|STResList755],
- ?line ITRes755 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S755),
+ ITRes755 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedShort.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S755),
ITResList756 = [ITRes755|ITResList755],
- ?line {STRes756,S756} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes756,S756} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedByte.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList757 = [STRes756|STResList756],
- ?line ITRes756 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S756),
+ ITRes756 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_unsignedByte.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S756),
ITResList757 = [ITRes756|ITResList756],
- ?line {STRes757,S757} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes757,S757} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_double.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList758 = [STRes757|STResList757],
- ?line ITRes757 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S757),
+ ITRes757 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_double.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S757),
ITResList758 = [ITRes757|ITResList757],
- ?line {STRes758,S758} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes758,S758} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList759 = [STRes758|STResList758],
- ?line ITRes758 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S758),
+ ITRes758 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S758),
ITResList759 = [ITRes758|ITResList758],
- ?line {STRes759,S759} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes759,S759} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList760 = [STRes759|STResList759],
- ?line ITRes759 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S759),
+ ITRes759 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S759),
ITResList760 = [ITRes759|ITResList759],
- ?line {STRes760,S760} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes760,S760} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList761 = [STRes760|STResList760],
- ?line ITRes760 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S760),
+ ITRes760 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S760),
ITResList761 = [ITRes760|ITResList760],
- ?line {STRes761,S761} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes761,S761} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList762 = [STRes761|STResList761],
- ?line ITRes761 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S761),
+ ITRes761 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S761),
ITResList762 = [ITRes761|ITResList761],
- ?line {STRes762,S762} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes762,S762} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList763 = [STRes762|STResList762],
- ?line ITRes762 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S762),
+ ITRes762 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S762),
ITResList763 = [ITRes762|ITResList762],
- ?line {STRes763,S763} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes763,S763} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList764 = [STRes763|STResList763],
- ?line ITRes763 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S763),
+ ITRes763 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S763),
ITResList764 = [ITRes763|ITResList763],
- ?line {STRes764,S764} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes764,S764} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList765 = [STRes764|STResList764],
- ?line ITRes764 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S764),
+ ITRes764 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S764),
ITResList765 = [ITRes764|ITResList764],
- ?line {STRes765,S765} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes765,S765} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList766 = [STRes765|STResList765],
- ?line ITRes765 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S765),
+ ITRes765 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S765),
ITResList766 = [ITRes765|ITResList765],
- ?line {STRes766,S766} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes766,S766} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList767 = [STRes766|STResList766],
- ?line ITRes766 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S766),
+ ITRes766 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S766),
ITResList767 = [ITRes766|ITResList766],
- ?line {STRes767,S767} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes767,S767} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList768 = [STRes767|STResList767],
- ?line ITRes767 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S767),
+ ITRes767 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S767),
ITResList768 = [ITRes767|ITResList767],
- ?line {STRes768,S768} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes768,S768} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList769 = [STRes768|STResList768],
- ?line ITRes768 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S768),
+ ITRes768 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S768),
ITResList769 = [ITRes768|ITResList768],
- ?line {STRes769,S769} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes769,S769} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList770 = [STRes769|STResList769],
- ?line ITRes769 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S769),
+ ITRes769 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_anyURI_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S769),
ITResList770 = [ITRes769|ITResList769],
- ?line {STRes770,S770} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes770,S770} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList771 = [STRes770|STResList770],
- ?line ITRes770 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S770),
+ ITRes770 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S770),
ITResList771 = [ITRes770|ITResList770],
- ?line {STRes771,S771} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes771,S771} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList772 = [STRes771|STResList771],
- ?line ITRes771 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S771),
+ ITRes771 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S771),
ITResList772 = [ITRes771|ITResList771],
- ?line {STRes772,S772} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes772,S772} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList773 = [STRes772|STResList772],
- ?line ITRes772 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S772),
+ ITRes772 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S772),
ITResList773 = [ITRes772|ITResList772],
- ?line {STRes773,S773} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes773,S773} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList774 = [STRes773|STResList773],
- ?line ITRes773 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S773),
+ ITRes773 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S773),
ITResList774 = [ITRes773|ITResList773],
- ?line {STRes774,S774} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes774,S774} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList775 = [STRes774|STResList774],
- ?line ITRes774 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S774),
+ ITRes774 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S774),
ITResList775 = [ITRes774|ITResList774],
- ?line {STRes775,S775} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes775,S775} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList776 = [STRes775|STResList775],
- ?line ITRes775 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S775),
+ ITRes775 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S775),
ITResList776 = [ITRes775|ITResList775],
- ?line {STRes776,S776} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes776,S776} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList777 = [STRes776|STResList776],
- ?line ITRes776 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S776),
+ ITRes776 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S776),
ITResList777 = [ITRes776|ITResList776],
- ?line {STRes777,S777} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes777,S777} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList778 = [STRes777|STResList777],
- ?line ITRes777 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S777),
+ ITRes777 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S777),
ITResList778 = [ITRes777|ITResList777],
- ?line {STRes778,S778} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes778,S778} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList779 = [STRes778|STResList778],
- ?line ITRes778 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S778),
+ ITRes778 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S778),
ITResList779 = [ITRes778|ITResList778],
- ?line {STRes779,S779} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes779,S779} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList780 = [STRes779|STResList779],
- ?line ITRes779 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S779),
+ ITRes779 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S779),
ITResList780 = [ITRes779|ITResList779],
- ?line {STRes780,S780} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes780,S780} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList781 = [STRes780|STResList780],
- ?line ITRes780 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S780),
+ ITRes780 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S780),
ITResList781 = [ITRes780|ITResList780],
- ?line {STRes781,S781} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes781,S781} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList782 = [STRes781|STResList781],
- ?line ITRes781 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S781),
+ ITRes781 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S781),
ITResList782 = [ITRes781|ITResList781],
- ?line {STRes782,S782} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes782,S782} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList783 = [STRes782|STResList782],
- ?line ITRes782 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S782),
+ ITRes782 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S782),
ITResList783 = [ITRes782|ITResList782],
- ?line {STRes783,S783} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes783,S783} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList784 = [STRes783|STResList783],
- ?line ITRes783 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S783),
+ ITRes783 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S783),
ITResList784 = [ITRes783|ITResList783],
- ?line {STRes784,S784} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes784,S784} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList785 = [STRes784|STResList784],
- ?line ITRes784 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S784),
+ ITRes784 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_QName_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S784),
ITResList785 = [ITRes784|ITResList784],
- ?line {STRes785,S785} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes785,S785} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList786 = [STRes785|STResList785],
- ?line ITRes785 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S785),
+ ITRes785 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S785),
ITResList786 = [ITRes785|ITResList785],
- ?line {STRes786,S786} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes786,S786} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList787 = [STRes786|STResList786],
- ?line ITRes786 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S786),
+ ITRes786 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S786),
ITResList787 = [ITRes786|ITResList786],
- ?line {STRes787,S787} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes787,S787} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList788 = [STRes787|STResList787],
- ?line ITRes787 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S787),
+ ITRes787 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S787),
ITResList788 = [ITRes787|ITResList787],
- ?line {STRes788,S788} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes788,S788} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_language.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList789 = [STRes788|STResList788],
- ?line ITRes788 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S788),
+ ITRes788 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_language.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S788),
ITResList789 = [ITRes788|ITResList788],
- ?line {STRes789,S789} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes789,S789} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList790 = [STRes789|STResList789],
- ?line ITRes789 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S789),
+ ITRes789 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S789),
ITResList790 = [ITRes789|ITResList789],
- ?line {STRes790,S790} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes790,S790} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList791 = [STRes790|STResList790],
- ?line ITRes790 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S790),
+ ITRes790 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S790),
ITResList791 = [ITRes790|ITResList790],
- ?line {STRes791,S791} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes791,S791} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList792 = [STRes791|STResList791],
- ?line ITRes791 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S791),
+ ITRes791 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S791),
ITResList792 = [ITRes791|ITResList791],
- ?line {STRes792,S792} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes792,S792} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList793 = [STRes792|STResList792],
- ?line ITRes792 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S792),
+ ITRes792 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S792),
ITResList793 = [ITRes792|ITResList792],
- ?line {STRes793,S793} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes793,S793} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList794 = [STRes793|STResList793],
- ?line ITRes793 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S793),
+ ITRes793 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S793),
ITResList794 = [ITRes793|ITResList793],
- ?line {STRes794,S794} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes794,S794} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList795 = [STRes794|STResList794],
- ?line ITRes794 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S794),
+ ITRes794 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S794),
ITResList795 = [ITRes794|ITResList794],
- ?line {STRes795,S795} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes795,S795} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList796 = [STRes795|STResList795],
- ?line ITRes795 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S795),
+ ITRes795 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S795),
ITResList796 = [ITRes795|ITResList795],
- ?line {STRes796,S796} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes796,S796} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_boolean.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList797 = [STRes796|STResList796],
- ?line ITRes796 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S796),
+ ITRes796 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_boolean.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S796),
ITResList797 = [ITRes796|ITResList796],
- ?line {STRes797,S797} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes797,S797} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList798 = [STRes797|STResList797],
- ?line ITRes797 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S797),
+ ITRes797 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S797),
ITResList798 = [ITRes797|ITResList797],
- ?line {STRes798,S798} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes798,S798} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList799 = [STRes798|STResList798],
- ?line ITRes798 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S798),
+ ITRes798 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S798),
ITResList799 = [ITRes798|ITResList798],
- ?line {STRes799,S799} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes799,S799} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList800 = [STRes799|STResList799],
- ?line ITRes799 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S799),
+ ITRes799 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_NOTATION_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S799),
ITResList800 = [ITRes799|ITResList799],
- ?line {STRes800,S800} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes800,S800} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList801 = [STRes800|STResList800],
- ?line ITRes800 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S800),
+ ITRes800 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S800),
ITResList801 = [ITRes800|ITResList800],
- ?line {STRes801,S801} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes801,S801} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList802 = [STRes801|STResList801],
- ?line ITRes801 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S801),
+ ITRes801 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S801),
ITResList802 = [ITRes801|ITResList801],
- ?line {STRes802,S802} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes802,S802} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList803 = [STRes802|STResList802],
- ?line ITRes802 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S802),
+ ITRes802 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S802),
ITResList803 = [ITRes802|ITResList802],
- ?line {STRes803,S803} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes803,S803} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_Name.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList804 = [STRes803|STResList803],
- ?line ITRes803 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S803),
+ ITRes803 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_Name.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S803),
ITResList804 = [ITRes803|ITResList803],
- ?line {STRes804,S804} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes804,S804} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NCName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList805 = [STRes804|STResList804],
- ?line ITRes804 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S804),
+ ITRes804 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NCName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S804),
ITResList805 = [ITRes804|ITResList804],
- ?line {STRes805,S805} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes805,S805} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_ID.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList806 = [STRes805|STResList805],
- ?line ITRes805 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S805),
+ ITRes805 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_ID.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S805),
ITResList806 = [ITRes805|ITResList805],
- ?line {STRes806,S806} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes806,S806} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_IDREF.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList807 = [STRes806|STResList806],
- ?line ITRes806 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S806),
+ ITRes806 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_IDREF.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S806),
ITResList807 = [ITRes806|ITResList806],
- ?line {STRes807,S807} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes807,S807} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_IDREFS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList808 = [STRes807|STResList807],
- ?line ITRes807 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S807),
+ ITRes807 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_IDREFS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S807),
ITResList808 = [ITRes807|ITResList807],
- ?line {STRes808,S808} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes808,S808} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList809 = [STRes808|STResList808],
- ?line ITRes808 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S808),
+ ITRes808 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S808),
ITResList809 = [ITRes808|ITResList808],
- ?line {STRes809,S809} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes809,S809} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList810 = [STRes809|STResList809],
- ?line ITRes809 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S809),
+ ITRes809 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S809),
ITResList810 = [ITRes809|ITResList809],
- ?line {STRes810,S810} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes810,S810} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList811 = [STRes810|STResList810],
- ?line ITRes810 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S810),
+ ITRes810 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S810),
ITResList811 = [ITRes810|ITResList810],
- ?line {STRes811,S811} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes811,S811} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_QName.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList812 = [STRes811|STResList811],
- ?line ITRes811 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S811),
+ ITRes811 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_QName.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S811),
ITResList812 = [ITRes811|ITResList811],
- ?line {STRes812,S812} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes812,S812} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NOTATION.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList813 = [STRes812|STResList812],
- ?line ITRes812 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S812),
+ ITRes812 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_NOTATION.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S812),
ITResList813 = [ITRes812|ITResList812],
- ?line {STRes813,S813} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes813,S813} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList814 = [STRes813|STResList813],
- ?line ITRes813 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S813),
+ ITRes813 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S813),
ITResList814 = [ITRes813|ITResList813],
- ?line {STRes814,S814} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes814,S814} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList815 = [STRes814|STResList814],
- ?line ITRes814 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S814),
+ ITRes814 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S814),
ITResList815 = [ITRes814|ITResList814],
- ?line {STRes815,S815} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes815,S815} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList816 = [STRes815|STResList815],
- ?line ITRes815 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S815),
+ ITRes815 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_time.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S815),
ITResList816 = [ITRes815|ITResList815],
- ?line {STRes816,S816} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes816,S816} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList817 = [STRes816|STResList816],
- ?line ITRes816 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S816),
+ ITRes816 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S816),
ITResList817 = [ITRes816|ITResList816],
- ?line {STRes817,S817} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes817,S817} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList818 = [STRes817|STResList817],
- ?line ITRes817 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S817),
+ ITRes817 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S817),
ITResList818 = [ITRes817|ITResList817],
- ?line {STRes818,S818} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes818,S818} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList819 = [STRes818|STResList818],
- ?line ITRes818 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S818),
+ ITRes818 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S818),
ITResList819 = [ITRes818|ITResList818],
- ?line {STRes819,S819} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes819,S819} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList820 = [STRes819|STResList819],
- ?line ITRes819 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S819),
+ ITRes819 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S819),
ITResList820 = [ITRes819|ITResList819],
- ?line {STRes820,S820} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes820,S820} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList821 = [STRes820|STResList820],
- ?line ITRes820 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S820),
+ ITRes820 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S820),
ITResList821 = [ITRes820|ITResList820],
- ?line {STRes821,S821} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes821,S821} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList822 = [STRes821|STResList821],
- ?line ITRes821 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S821),
+ ITRes821 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_duration_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S821),
ITResList822 = [ITRes821|ITResList821],
- ?line {STRes822,S822} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes822,S822} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList823 = [STRes822|STResList822],
- ?line ITRes822 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S822),
+ ITRes822 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S822),
ITResList823 = [ITRes822|ITResList822],
- ?line {STRes823,S823} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes823,S823} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList824 = [STRes823|STResList823],
- ?line ITRes823 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S823),
+ ITRes823 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S823),
ITResList824 = [ITRes823|ITResList823],
- ?line {STRes824,S824} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes824,S824} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList825 = [STRes824|STResList824],
- ?line ITRes824 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S824),
+ ITRes824 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S824),
ITResList825 = [ITRes824|ITResList824],
- ?line {STRes825,S825} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes825,S825} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList826 = [STRes825|STResList825],
- ?line ITRes825 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S825),
+ ITRes825 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S825),
ITResList826 = [ITRes825|ITResList825],
- ?line {STRes826,S826} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes826,S826} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList827 = [STRes826|STResList826],
- ?line ITRes826 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S826),
+ ITRes826 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S826),
ITResList827 = [ITRes826|ITResList826],
- ?line {STRes827,S827} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes827,S827} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList828 = [STRes827|STResList827],
- ?line ITRes827 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S827),
+ ITRes827 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S827),
ITResList828 = [ITRes827|ITResList827],
- ?line {STRes828,S828} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes828,S828} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList829 = [STRes828|STResList828],
- ?line ITRes828 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S828),
+ ITRes828 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S828),
ITResList829 = [ITRes828|ITResList828],
- ?line {STRes829,S829} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes829,S829} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList830 = [STRes829|STResList829],
- ?line ITRes829 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S829),
+ ITRes829 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S829),
ITResList830 = [ITRes829|ITResList829],
- ?line {STRes830,S830} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes830,S830} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList831 = [STRes830|STResList830],
- ?line ITRes830 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S830),
+ ITRes830 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_dateTime_date.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S830),
ITResList831 = [ITRes830|ITResList830],
- ?line {STRes831,S831} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes831,S831} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList832 = [STRes831|STResList831],
- ?line ITRes831 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S831),
+ ITRes831 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S831),
ITResList832 = [ITRes831|ITResList831],
- ?line {STRes832,S832} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes832,S832} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList833 = [STRes832|STResList832],
- ?line ITRes832 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S832),
+ ITRes832 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S832),
ITResList833 = [ITRes832|ITResList832],
- ?line {STRes833,S833} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes833,S833} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList834 = [STRes833|STResList833],
- ?line ITRes833 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S833),
+ ITRes833 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S833),
ITResList834 = [ITRes833|ITResList833],
- ?line {STRes834,S834} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes834,S834} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList835 = [STRes834|STResList834],
- ?line ITRes834 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S834),
+ ITRes834 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S834),
ITResList835 = [ITRes834|ITResList834],
- ?line {STRes835,S835} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes835,S835} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList836 = [STRes835|STResList835],
- ?line ITRes835 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S835),
+ ITRes835 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S835),
ITResList836 = [ITRes835|ITResList835],
- ?line {STRes836,S836} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes836,S836} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList837 = [STRes836|STResList836],
- ?line ITRes836 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S836),
+ ITRes836 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S836),
ITResList837 = [ITRes836|ITResList836],
- ?line {STRes837,S837} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes837,S837} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList838 = [STRes837|STResList837],
- ?line ITRes837 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S837),
+ ITRes837 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S837),
ITResList838 = [ITRes837|ITResList837],
- ?line {STRes838,S838} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes838,S838} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_time.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList839 = [STRes838|STResList838],
- ?line ITRes838 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_time.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S838),
+ ITRes838 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_time_time.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S838),
ITResList839 = [ITRes838|ITResList838],
- ?line {STRes839,S839} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes839,S839} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList840 = [STRes839|STResList839],
- ?line ITRes839 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S839),
+ ITRes839 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S839),
ITResList840 = [ITRes839|ITResList839],
- ?line {STRes840,S840} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes840,S840} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList841 = [STRes840|STResList840],
- ?line ITRes840 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S840),
+ ITRes840 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S840),
ITResList841 = [ITRes840|ITResList840],
- ?line {STRes841,S841} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes841,S841} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList842 = [STRes841|STResList841],
- ?line ITRes841 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S841),
+ ITRes841 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S841),
ITResList842 = [ITRes841|ITResList841],
- ?line {STRes842,S842} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes842,S842} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList843 = [STRes842|STResList842],
- ?line ITRes842 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S842),
+ ITRes842 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S842),
ITResList843 = [ITRes842|ITResList842],
- ?line {STRes843,S843} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes843,S843} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList844 = [STRes843|STResList843],
- ?line ITRes843 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S843),
+ ITRes843 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S843),
ITResList844 = [ITRes843|ITResList843],
- ?line {STRes844,S844} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes844,S844} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList845 = [STRes844|STResList844],
- ?line ITRes844 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S844),
+ ITRes844 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S844),
ITResList845 = [ITRes844|ITResList844],
- ?line {STRes845,S845} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes845,S845} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList846 = [STRes845|STResList845],
- ?line ITRes845 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S845),
+ ITRes845 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S845),
ITResList846 = [ITRes845|ITResList845],
- ?line {STRes846,S846} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes846,S846} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_dateTime.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList847 = [STRes846|STResList846],
- ?line ITRes846 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S846),
+ ITRes846 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_dateTime.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S846),
ITResList847 = [ITRes846|ITResList846],
- ?line {STRes847,S847} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes847,S847} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_date.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList848 = [STRes847|STResList847],
- ?line ITRes847 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_date.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S847),
+ ITRes847 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_date_date.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S847),
ITResList848 = [ITRes847|ITResList847],
- ?line {STRes848,S848} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes848,S848} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList849 = [STRes848|STResList848],
- ?line ITRes848 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S848),
+ ITRes848 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S848),
ITResList849 = [ITRes848|ITResList848],
- ?line {STRes849,S849} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes849,S849} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList850 = [STRes849|STResList849],
- ?line ITRes849 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S849),
+ ITRes849 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S849),
ITResList850 = [ITRes849|ITResList849],
- ?line {STRes850,S850} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes850,S850} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList851 = [STRes850|STResList850],
- ?line ITRes850 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S850),
+ ITRes850 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S850),
ITResList851 = [ITRes850|ITResList850],
- ?line {STRes851,S851} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes851,S851} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList852 = [STRes851|STResList851],
- ?line ITRes851 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S851),
+ ITRes851 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S851),
ITResList852 = [ITRes851|ITResList851],
- ?line {STRes852,S852} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes852,S852} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList853 = [STRes852|STResList852],
- ?line ITRes852 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S852),
+ ITRes852 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S852),
ITResList853 = [ITRes852|ITResList852],
- ?line {STRes853,S853} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes853,S853} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList854 = [STRes853|STResList853],
- ?line ITRes853 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S853),
+ ITRes853 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S853),
ITResList854 = [ITRes853|ITResList853],
- ?line {STRes854,S854} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes854,S854} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList855 = [STRes854|STResList854],
- ?line ITRes854 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S854),
+ ITRes854 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S854),
ITResList855 = [ITRes854|ITResList854],
- ?line {STRes855,S855} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes855,S855} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_gYearMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList856 = [STRes855|STResList855],
- ?line ITRes855 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S855),
+ ITRes855 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYearMonth_gYearMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S855),
ITResList856 = [ITRes855|ITResList855],
- ?line {STRes856,S856} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes856,S856} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList857 = [STRes856|STResList856],
- ?line ITRes856 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S856),
+ ITRes856 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S856),
ITResList857 = [ITRes856|ITResList856],
- ?line {STRes857,S857} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes857,S857} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList858 = [STRes857|STResList857],
- ?line ITRes857 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S857),
+ ITRes857 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S857),
ITResList858 = [ITRes857|ITResList857],
- ?line {STRes858,S858} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes858,S858} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList859 = [STRes858|STResList858],
- ?line ITRes858 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S858),
+ ITRes858 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S858),
ITResList859 = [ITRes858|ITResList858],
- ?line {STRes859,S859} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes859,S859} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList860 = [STRes859|STResList859],
- ?line ITRes859 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S859),
+ ITRes859 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S859),
ITResList860 = [ITRes859|ITResList859],
- ?line {STRes860,S860} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes860,S860} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList861 = [STRes860|STResList860],
- ?line ITRes860 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S860),
+ ITRes860 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S860),
ITResList861 = [ITRes860|ITResList860],
- ?line {STRes861,S861} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes861,S861} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList862 = [STRes861|STResList861],
- ?line ITRes861 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S861),
+ ITRes861 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S861),
ITResList862 = [ITRes861|ITResList861],
- ?line {STRes862,S862} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes862,S862} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList863 = [STRes862|STResList862],
- ?line ITRes862 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S862),
+ ITRes862 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S862),
ITResList863 = [ITRes862|ITResList862],
- ?line {STRes863,S863} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes863,S863} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_gYear.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList864 = [STRes863|STResList863],
- ?line ITRes863 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S863),
+ ITRes863 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gYear_gYear.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S863),
ITResList864 = [ITRes863|ITResList863],
- ?line {STRes864,S864} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes864,S864} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList865 = [STRes864|STResList864],
- ?line ITRes864 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S864),
+ ITRes864 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S864),
ITResList865 = [ITRes864|ITResList864],
- ?line {STRes865,S865} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes865,S865} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList866 = [STRes865|STResList865],
- ?line ITRes865 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S865),
+ ITRes865 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S865),
ITResList866 = [ITRes865|ITResList865],
- ?line {STRes866,S866} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes866,S866} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList867 = [STRes866|STResList866],
- ?line ITRes866 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S866),
+ ITRes866 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S866),
ITResList867 = [ITRes866|ITResList866],
- ?line {STRes867,S867} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes867,S867} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList868 = [STRes867|STResList867],
- ?line ITRes867 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S867),
+ ITRes867 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S867),
ITResList868 = [ITRes867|ITResList867],
- ?line {STRes868,S868} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes868,S868} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList869 = [STRes868|STResList868],
- ?line ITRes868 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S868),
+ ITRes868 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S868),
ITResList869 = [ITRes868|ITResList868],
- ?line {STRes869,S869} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes869,S869} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList870 = [STRes869|STResList869],
- ?line ITRes869 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S869),
+ ITRes869 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S869),
ITResList870 = [ITRes869|ITResList869],
- ?line {STRes870,S870} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes870,S870} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList871 = [STRes870|STResList870],
- ?line ITRes870 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S870),
+ ITRes870 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S870),
ITResList871 = [ITRes870|ITResList870],
- ?line {STRes871,S871} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes871,S871} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_gMonthDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList872 = [STRes871|STResList871],
- ?line ITRes871 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S871),
+ ITRes871 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonthDay_gMonthDay.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S871),
ITResList872 = [ITRes871|ITResList871],
- ?line {STRes872,S872} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes872,S872} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList873 = [STRes872|STResList872],
- ?line ITRes872 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S872),
+ ITRes872 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S872),
ITResList873 = [ITRes872|ITResList872],
- ?line {STRes873,S873} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes873,S873} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList874 = [STRes873|STResList873],
- ?line ITRes873 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S873),
+ ITRes873 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S873),
ITResList874 = [ITRes873|ITResList873],
- ?line {STRes874,S874} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes874,S874} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList875 = [STRes874|STResList874],
- ?line ITRes874 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S874),
+ ITRes874 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S874),
ITResList875 = [ITRes874|ITResList874],
- ?line {STRes875,S875} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes875,S875} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList876 = [STRes875|STResList875],
- ?line ITRes875 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S875),
+ ITRes875 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S875),
ITResList876 = [ITRes875|ITResList875],
- ?line {STRes876,S876} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes876,S876} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList877 = [STRes876|STResList876],
- ?line ITRes876 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S876),
+ ITRes876 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S876),
ITResList877 = [ITRes876|ITResList876],
- ?line {STRes877,S877} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes877,S877} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList878 = [STRes877|STResList877],
- ?line ITRes877 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S877),
+ ITRes877 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S877),
ITResList878 = [ITRes877|ITResList877],
- ?line {STRes878,S878} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes878,S878} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList879 = [STRes878|STResList878],
- ?line ITRes878 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S878),
+ ITRes878 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S878),
ITResList879 = [ITRes878|ITResList878],
- ?line {STRes879,S879} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes879,S879} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_gDay.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList880 = [STRes879|STResList879],
- ?line ITRes879 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S879),
+ ITRes879 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gDay_gDay.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S879),
ITResList880 = [ITRes879|ITResList879],
- ?line {STRes880,S880} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes880,S880} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_string.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList881 = [STRes880|STResList880],
- ?line ITRes880 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S880),
+ ITRes880 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_string.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S880),
ITResList881 = [ITRes880|ITResList880],
- ?line {STRes881,S881} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes881,S881} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_normalizedString.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList882 = [STRes881|STResList881],
- ?line ITRes881 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S881),
+ ITRes881 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_normalizedString.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S881),
ITResList882 = [ITRes881|ITResList881],
- ?line {STRes882,S882} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes882,S882} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_token.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList883 = [STRes882|STResList882],
- ?line ITRes882 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S882),
+ ITRes882 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_token.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S882),
ITResList883 = [ITRes882|ITResList882],
- ?line {STRes883,S883} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes883,S883} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_NMTOKEN.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList884 = [STRes883|STResList883],
- ?line ITRes883 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S883),
+ ITRes883 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_NMTOKEN.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S883),
ITResList884 = [ITRes883|ITResList883],
- ?line {STRes884,S884} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes884,S884} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_NMTOKENS.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList885 = [STRes884|STResList884],
- ?line ITRes884 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S884),
+ ITRes884 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_NMTOKENS.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S884),
ITResList885 = [ITRes884|ITResList884],
- ?line {STRes885,S885} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes885,S885} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_anyURI.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList886 = [STRes885|STResList885],
- ?line ITRes885 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S885),
+ ITRes885 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_anyURI.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S885),
ITResList886 = [ITRes885|ITResList885],
- ?line {STRes886,S886} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes886,S886} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_duration.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList887 = [STRes886|STResList886],
- ?line ITRes886 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S886),
+ ITRes886 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_duration.xml','./msxsdtest/identityConstraint/idc_datatypes',invalid,S886),
ITResList887 = [ITRes886|ITResList886],
- ?line {STRes887,S887} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
+ {STRes887,S887} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_gMonth.xsd','./msxsdtest/identityConstraint/idc_datatypes',valid),
STResList888 = [STRes887|STResList887],
- ?line ITRes887 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S887),
+ ITRes887 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idc_datatypes/idc_gMonth_gMonth.xml','./msxsdtest/identityConstraint/idc_datatypes',valid,S887),
ITResList888 = [ITRes887|ITResList887],
@@ -12240,3756 +12228,3756 @@ idc_(Config) when is_list(Config) ->
id(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA001.xsd','./msxsdtest/identityConstraint',valid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA002.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA002.xsd','./msxsdtest/identityConstraint',invalid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA003.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA003.xsd','./msxsdtest/identityConstraint',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA004.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA004.xsd','./msxsdtest/identityConstraint',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA005.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA005.xsd','./msxsdtest/identityConstraint',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA006.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA006.xsd','./msxsdtest/identityConstraint',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA007.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA007.xsd','./msxsdtest/identityConstraint',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA008.xsd','./msxsdtest/identityConstraint',valid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA009.xsd','./msxsdtest/identityConstraint',valid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA010.xsd','./msxsdtest/identityConstraint',valid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA011.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA011.xsd','./msxsdtest/identityConstraint',valid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA012.xsd','./msxsdtest/identityConstraint',valid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA013.xsd','./msxsdtest/identityConstraint',valid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA014.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA014.xsd','./msxsdtest/identityConstraint',valid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA015.xsd','./msxsdtest/identityConstraint',valid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA016.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA016.xsd','./msxsdtest/identityConstraint',invalid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA017.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA017.xsd','./msxsdtest/identityConstraint',valid),
STResList17 = [STRes16|STResList16],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA018.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA018.xsd','./msxsdtest/identityConstraint',invalid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA019.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA019.xsd','./msxsdtest/identityConstraint',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA020.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA020.xsd','./msxsdtest/identityConstraint',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA021.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA021.xsd','./msxsdtest/identityConstraint',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA022.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA022.xsd','./msxsdtest/identityConstraint',valid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA023.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA023.xsd','./msxsdtest/identityConstraint',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA024.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA024.xsd','./msxsdtest/identityConstraint',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA025.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA025.xsd','./msxsdtest/identityConstraint',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA026.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA026.xsd','./msxsdtest/identityConstraint',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA027.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA027.xsd','./msxsdtest/identityConstraint',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA028.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA028.xsd','./msxsdtest/identityConstraint',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA029.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA029.xsd','./msxsdtest/identityConstraint',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA030.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA030.xsd','./msxsdtest/identityConstraint',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA031.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA031.xsd','./msxsdtest/identityConstraint',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA032.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA032.xsd','./msxsdtest/identityConstraint',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA033.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA033.xsd','./msxsdtest/identityConstraint',valid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA034.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA034.xsd','./msxsdtest/identityConstraint',valid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA035.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA035.xsd','./msxsdtest/identityConstraint',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA036.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA036.xsd','./msxsdtest/identityConstraint',valid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA037.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA037.xsd','./msxsdtest/identityConstraint',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA038.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA038.xsd','./msxsdtest/identityConstraint',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA039.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA039.xsd','./msxsdtest/identityConstraint',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA040.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA040.xsd','./msxsdtest/identityConstraint',valid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA041.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA041.xsd','./msxsdtest/identityConstraint',valid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA042.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA042.xsd','./msxsdtest/identityConstraint',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA043.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA043.xsd','./msxsdtest/identityConstraint',invalid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA044.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA044.xsd','./msxsdtest/identityConstraint',invalid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA045.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA045.xsd','./msxsdtest/identityConstraint',valid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA046.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA046.xsd','./msxsdtest/identityConstraint',invalid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA047.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA047.xsd','./msxsdtest/identityConstraint',invalid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA048.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA048.xsd','./msxsdtest/identityConstraint',invalid),
STResList48 = [STRes47|STResList47],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA049.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA049.xsd','./msxsdtest/identityConstraint',invalid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA050.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA050.xsd','./msxsdtest/identityConstraint',invalid),
STResList50 = [STRes49|STResList49],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA051.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA051.xsd','./msxsdtest/identityConstraint',invalid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA052.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA052.xsd','./msxsdtest/identityConstraint',invalid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA053.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA053.xsd','./msxsdtest/identityConstraint',invalid),
STResList53 = [STRes52|STResList52],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA054.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA054.xsd','./msxsdtest/identityConstraint',invalid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA055.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA055.xsd','./msxsdtest/identityConstraint',invalid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA056.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA056.xsd','./msxsdtest/identityConstraint',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA057.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA057.xsd','./msxsdtest/identityConstraint',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA058.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA058.xsd','./msxsdtest/identityConstraint',invalid),
STResList58 = [STRes57|STResList57],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA059.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA059.xsd','./msxsdtest/identityConstraint',invalid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA060.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idA060.xsd','./msxsdtest/identityConstraint',invalid),
STResList60 = [STRes59|STResList59],
- ?line {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB001.xsd','./msxsdtest/identityConstraint',valid),
STResList61 = [STRes60|STResList60],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB002.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB002.xsd','./msxsdtest/identityConstraint',invalid),
STResList62 = [STRes61|STResList61],
- ?line {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB003.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB003.xsd','./msxsdtest/identityConstraint',invalid),
STResList63 = [STRes62|STResList62],
- ?line {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB004.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB004.xsd','./msxsdtest/identityConstraint',invalid),
STResList64 = [STRes63|STResList63],
- ?line {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB005.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB005.xsd','./msxsdtest/identityConstraint',invalid),
STResList65 = [STRes64|STResList64],
- ?line {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB006.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB006.xsd','./msxsdtest/identityConstraint',invalid),
STResList66 = [STRes65|STResList65],
- ?line {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB007.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB007.xsd','./msxsdtest/identityConstraint',invalid),
STResList67 = [STRes66|STResList66],
- ?line {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB008.xsd','./msxsdtest/identityConstraint',valid),
STResList68 = [STRes67|STResList67],
- ?line {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB009.xsd','./msxsdtest/identityConstraint',valid),
STResList69 = [STRes68|STResList68],
- ?line {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB010.xsd','./msxsdtest/identityConstraint',valid),
STResList70 = [STRes69|STResList69],
- ?line {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB011.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB011.xsd','./msxsdtest/identityConstraint',valid),
STResList71 = [STRes70|STResList70],
- ?line {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB012.xsd','./msxsdtest/identityConstraint',valid),
STResList72 = [STRes71|STResList71],
- ?line {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB013.xsd','./msxsdtest/identityConstraint',valid),
STResList73 = [STRes72|STResList72],
- ?line {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB014.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB014.xsd','./msxsdtest/identityConstraint',valid),
STResList74 = [STRes73|STResList73],
- ?line {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB015.xsd','./msxsdtest/identityConstraint',valid),
STResList75 = [STRes74|STResList74],
- ?line {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB016.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB016.xsd','./msxsdtest/identityConstraint',invalid),
STResList76 = [STRes75|STResList75],
- ?line {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB017.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB017.xsd','./msxsdtest/identityConstraint',invalid),
STResList77 = [STRes76|STResList76],
- ?line {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB018.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB018.xsd','./msxsdtest/identityConstraint',valid),
STResList78 = [STRes77|STResList77],
- ?line {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB019.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB019.xsd','./msxsdtest/identityConstraint',invalid),
STResList79 = [STRes78|STResList78],
- ?line {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB020.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB020.xsd','./msxsdtest/identityConstraint',invalid),
STResList80 = [STRes79|STResList79],
- ?line {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB021.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB021.xsd','./msxsdtest/identityConstraint',invalid),
STResList81 = [STRes80|STResList80],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB022.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB022.xsd','./msxsdtest/identityConstraint',valid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB023.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB023.xsd','./msxsdtest/identityConstraint',invalid),
STResList83 = [STRes82|STResList82],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB024.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB024.xsd','./msxsdtest/identityConstraint',invalid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB025.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB025.xsd','./msxsdtest/identityConstraint',invalid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB026.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB026.xsd','./msxsdtest/identityConstraint',invalid),
STResList86 = [STRes85|STResList85],
- ?line {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB027.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB027.xsd','./msxsdtest/identityConstraint',invalid),
STResList87 = [STRes86|STResList86],
- ?line {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB028.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB028.xsd','./msxsdtest/identityConstraint',invalid),
STResList88 = [STRes87|STResList87],
- ?line {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB029.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB029.xsd','./msxsdtest/identityConstraint',invalid),
STResList89 = [STRes88|STResList88],
- ?line {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB030.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB030.xsd','./msxsdtest/identityConstraint',invalid),
STResList90 = [STRes89|STResList89],
- ?line {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB031.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB031.xsd','./msxsdtest/identityConstraint',invalid),
STResList91 = [STRes90|STResList90],
- ?line {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB032.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB032.xsd','./msxsdtest/identityConstraint',invalid),
STResList92 = [STRes91|STResList91],
- ?line {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB033.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB033.xsd','./msxsdtest/identityConstraint',valid),
STResList93 = [STRes92|STResList92],
- ?line {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB034.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB034.xsd','./msxsdtest/identityConstraint',valid),
STResList94 = [STRes93|STResList93],
- ?line {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB035.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB035.xsd','./msxsdtest/identityConstraint',invalid),
STResList95 = [STRes94|STResList94],
- ?line {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB036.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB036.xsd','./msxsdtest/identityConstraint',valid),
STResList96 = [STRes95|STResList95],
- ?line {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB037.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB037.xsd','./msxsdtest/identityConstraint',invalid),
STResList97 = [STRes96|STResList96],
- ?line {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB038.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB038.xsd','./msxsdtest/identityConstraint',invalid),
STResList98 = [STRes97|STResList97],
- ?line {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB039.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB039.xsd','./msxsdtest/identityConstraint',invalid),
STResList99 = [STRes98|STResList98],
- ?line {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB040.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB040.xsd','./msxsdtest/identityConstraint',valid),
STResList100 = [STRes99|STResList99],
- ?line {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB041.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB041.xsd','./msxsdtest/identityConstraint',valid),
STResList101 = [STRes100|STResList100],
- ?line {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB042.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB042.xsd','./msxsdtest/identityConstraint',invalid),
STResList102 = [STRes101|STResList101],
- ?line {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB043.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB043.xsd','./msxsdtest/identityConstraint',invalid),
STResList103 = [STRes102|STResList102],
- ?line {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB044.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB044.xsd','./msxsdtest/identityConstraint',invalid),
STResList104 = [STRes103|STResList103],
- ?line {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB045.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB045.xsd','./msxsdtest/identityConstraint',valid),
STResList105 = [STRes104|STResList104],
- ?line {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB046.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB046.xsd','./msxsdtest/identityConstraint',invalid),
STResList106 = [STRes105|STResList105],
- ?line {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB047.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB047.xsd','./msxsdtest/identityConstraint',invalid),
STResList107 = [STRes106|STResList106],
- ?line {STRes107,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB048.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes107,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB048.xsd','./msxsdtest/identityConstraint',invalid),
STResList108 = [STRes107|STResList107],
- ?line {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB049.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB049.xsd','./msxsdtest/identityConstraint',invalid),
STResList109 = [STRes108|STResList108],
- ?line {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB050.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB050.xsd','./msxsdtest/identityConstraint',invalid),
STResList110 = [STRes109|STResList109],
- ?line {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB051.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB051.xsd','./msxsdtest/identityConstraint',invalid),
STResList111 = [STRes110|STResList110],
- ?line {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB052.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB052.xsd','./msxsdtest/identityConstraint',invalid),
STResList112 = [STRes111|STResList111],
- ?line {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB053.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB053.xsd','./msxsdtest/identityConstraint',invalid),
STResList113 = [STRes112|STResList112],
- ?line {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB054.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB054.xsd','./msxsdtest/identityConstraint',invalid),
STResList114 = [STRes113|STResList113],
- ?line {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB055.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB055.xsd','./msxsdtest/identityConstraint',invalid),
STResList115 = [STRes114|STResList114],
- ?line {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB056.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB056.xsd','./msxsdtest/identityConstraint',invalid),
STResList116 = [STRes115|STResList115],
- ?line {STRes116,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB057.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes116,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB057.xsd','./msxsdtest/identityConstraint',invalid),
STResList117 = [STRes116|STResList116],
- ?line {STRes117,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB058.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes117,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB058.xsd','./msxsdtest/identityConstraint',invalid),
STResList118 = [STRes117|STResList117],
- ?line {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB059.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB059.xsd','./msxsdtest/identityConstraint',invalid),
STResList119 = [STRes118|STResList118],
- ?line {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB060.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idB060.xsd','./msxsdtest/identityConstraint',invalid),
STResList120 = [STRes119|STResList119],
- ?line {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC001.xsd','./msxsdtest/identityConstraint',valid),
STResList121 = [STRes120|STResList120],
- ?line {STRes121,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC002.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes121,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC002.xsd','./msxsdtest/identityConstraint',invalid),
STResList122 = [STRes121|STResList121],
- ?line {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC003.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC003.xsd','./msxsdtest/identityConstraint',invalid),
STResList123 = [STRes122|STResList122],
- ?line {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC004.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC004.xsd','./msxsdtest/identityConstraint',invalid),
STResList124 = [STRes123|STResList123],
- ?line {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC005.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC005.xsd','./msxsdtest/identityConstraint',invalid),
STResList125 = [STRes124|STResList124],
- ?line {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC006.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC006.xsd','./msxsdtest/identityConstraint',invalid),
STResList126 = [STRes125|STResList125],
- ?line {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC007.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC007.xsd','./msxsdtest/identityConstraint',invalid),
STResList127 = [STRes126|STResList126],
- ?line {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC008.xsd','./msxsdtest/identityConstraint',valid),
STResList128 = [STRes127|STResList127],
- ?line {STRes128,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes128,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC009.xsd','./msxsdtest/identityConstraint',valid),
STResList129 = [STRes128|STResList128],
- ?line {STRes129,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes129,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC010.xsd','./msxsdtest/identityConstraint',valid),
STResList130 = [STRes129|STResList129],
- ?line {STRes130,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC011.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes130,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC011.xsd','./msxsdtest/identityConstraint',valid),
STResList131 = [STRes130|STResList130],
- ?line {STRes131,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes131,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC012.xsd','./msxsdtest/identityConstraint',valid),
STResList132 = [STRes131|STResList131],
- ?line {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC013.xsd','./msxsdtest/identityConstraint',valid),
STResList133 = [STRes132|STResList132],
- ?line {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC014.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC014.xsd','./msxsdtest/identityConstraint',valid),
STResList134 = [STRes133|STResList133],
- ?line {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC015.xsd','./msxsdtest/identityConstraint',valid),
STResList135 = [STRes134|STResList134],
- ?line {STRes135,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC016.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes135,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC016.xsd','./msxsdtest/identityConstraint',invalid),
STResList136 = [STRes135|STResList135],
- ?line {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC017.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC017.xsd','./msxsdtest/identityConstraint',invalid),
STResList137 = [STRes136|STResList136],
- ?line {STRes137,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC018.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes137,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC018.xsd','./msxsdtest/identityConstraint',invalid),
STResList138 = [STRes137|STResList137],
- ?line {STRes138,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC019.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes138,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC019.xsd','./msxsdtest/identityConstraint',valid),
STResList139 = [STRes138|STResList138],
- ?line {STRes139,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC020.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes139,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC020.xsd','./msxsdtest/identityConstraint',invalid),
STResList140 = [STRes139|STResList139],
- ?line {STRes140,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC021.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes140,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC021.xsd','./msxsdtest/identityConstraint',invalid),
STResList141 = [STRes140|STResList140],
- ?line {STRes141,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC022.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes141,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC022.xsd','./msxsdtest/identityConstraint',valid),
STResList142 = [STRes141|STResList141],
- ?line {STRes142,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC023.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes142,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC023.xsd','./msxsdtest/identityConstraint',invalid),
STResList143 = [STRes142|STResList142],
- ?line {STRes143,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC024.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes143,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC024.xsd','./msxsdtest/identityConstraint',invalid),
STResList144 = [STRes143|STResList143],
- ?line {STRes144,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC025.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes144,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC025.xsd','./msxsdtest/identityConstraint',invalid),
STResList145 = [STRes144|STResList144],
- ?line {STRes145,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC026.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes145,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC026.xsd','./msxsdtest/identityConstraint',invalid),
STResList146 = [STRes145|STResList145],
- ?line {STRes146,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC027.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes146,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC027.xsd','./msxsdtest/identityConstraint',invalid),
STResList147 = [STRes146|STResList146],
- ?line {STRes147,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC028.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes147,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC028.xsd','./msxsdtest/identityConstraint',invalid),
STResList148 = [STRes147|STResList147],
- ?line {STRes148,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC029.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes148,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC029.xsd','./msxsdtest/identityConstraint',invalid),
STResList149 = [STRes148|STResList148],
- ?line {STRes149,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC030.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes149,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC030.xsd','./msxsdtest/identityConstraint',invalid),
STResList150 = [STRes149|STResList149],
- ?line {STRes150,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC031.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes150,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC031.xsd','./msxsdtest/identityConstraint',invalid),
STResList151 = [STRes150|STResList150],
- ?line {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC032.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC032.xsd','./msxsdtest/identityConstraint',invalid),
STResList152 = [STRes151|STResList151],
- ?line {STRes152,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC033.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes152,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC033.xsd','./msxsdtest/identityConstraint',valid),
STResList153 = [STRes152|STResList152],
- ?line {STRes153,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC034.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes153,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC034.xsd','./msxsdtest/identityConstraint',valid),
STResList154 = [STRes153|STResList153],
- ?line {STRes154,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC035.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes154,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC035.xsd','./msxsdtest/identityConstraint',valid),
STResList155 = [STRes154|STResList154],
- ?line {STRes155,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC036.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes155,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC036.xsd','./msxsdtest/identityConstraint',valid),
STResList156 = [STRes155|STResList155],
- ?line {STRes156,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC038.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes156,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC038.xsd','./msxsdtest/identityConstraint',invalid),
STResList157 = [STRes156|STResList156],
- ?line {STRes157,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC039.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes157,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC039.xsd','./msxsdtest/identityConstraint',valid),
STResList158 = [STRes157|STResList157],
- ?line {STRes158,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC040.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes158,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC040.xsd','./msxsdtest/identityConstraint',invalid),
STResList159 = [STRes158|STResList158],
- ?line {STRes159,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC041.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes159,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC041.xsd','./msxsdtest/identityConstraint',invalid),
STResList160 = [STRes159|STResList159],
- ?line {STRes160,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC042.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes160,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC042.xsd','./msxsdtest/identityConstraint',invalid),
STResList161 = [STRes160|STResList160],
- ?line {STRes161,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC043.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes161,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC043.xsd','./msxsdtest/identityConstraint',valid),
STResList162 = [STRes161|STResList161],
- ?line {STRes162,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC044.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes162,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC044.xsd','./msxsdtest/identityConstraint',valid),
STResList163 = [STRes162|STResList162],
- ?line {STRes163,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC045.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes163,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC045.xsd','./msxsdtest/identityConstraint',invalid),
STResList164 = [STRes163|STResList163],
- ?line {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC046.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC046.xsd','./msxsdtest/identityConstraint',invalid),
STResList165 = [STRes164|STResList164],
- ?line {STRes165,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC047.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes165,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC047.xsd','./msxsdtest/identityConstraint',invalid),
STResList166 = [STRes165|STResList165],
- ?line {STRes166,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC048.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes166,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC048.xsd','./msxsdtest/identityConstraint',valid),
STResList167 = [STRes166|STResList166],
- ?line {STRes167,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC049.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes167,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC049.xsd','./msxsdtest/identityConstraint',invalid),
STResList168 = [STRes167|STResList167],
- ?line {STRes168,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC050.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes168,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC050.xsd','./msxsdtest/identityConstraint',invalid),
STResList169 = [STRes168|STResList168],
- ?line {STRes169,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC051.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes169,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC051.xsd','./msxsdtest/identityConstraint',invalid),
STResList170 = [STRes169|STResList169],
- ?line {STRes170,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC052.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes170,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC052.xsd','./msxsdtest/identityConstraint',invalid),
STResList171 = [STRes170|STResList170],
- ?line {STRes171,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC053.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes171,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC053.xsd','./msxsdtest/identityConstraint',invalid),
STResList172 = [STRes171|STResList171],
- ?line {STRes172,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC054.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes172,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC054.xsd','./msxsdtest/identityConstraint',invalid),
STResList173 = [STRes172|STResList172],
- ?line {STRes173,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC055.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes173,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC055.xsd','./msxsdtest/identityConstraint',invalid),
STResList174 = [STRes173|STResList173],
- ?line {STRes174,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC056.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes174,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC056.xsd','./msxsdtest/identityConstraint',invalid),
STResList175 = [STRes174|STResList174],
- ?line {STRes175,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC057.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes175,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC057.xsd','./msxsdtest/identityConstraint',invalid),
STResList176 = [STRes175|STResList175],
- ?line {STRes176,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC058.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes176,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC058.xsd','./msxsdtest/identityConstraint',invalid),
STResList177 = [STRes176|STResList176],
- ?line {STRes177,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC059.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes177,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC059.xsd','./msxsdtest/identityConstraint',invalid),
STResList178 = [STRes177|STResList177],
- ?line {STRes178,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC060.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes178,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC060.xsd','./msxsdtest/identityConstraint',invalid),
STResList179 = [STRes178|STResList178],
- ?line {STRes179,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC061.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes179,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC061.xsd','./msxsdtest/identityConstraint',invalid),
STResList180 = [STRes179|STResList179],
- ?line {STRes180,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC062.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes180,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC062.xsd','./msxsdtest/identityConstraint',invalid),
STResList181 = [STRes180|STResList180],
- ?line {STRes181,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC063.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes181,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idC063.xsd','./msxsdtest/identityConstraint',invalid),
STResList182 = [STRes181|STResList181],
- ?line {STRes182,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes182,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD001.xsd','./msxsdtest/identityConstraint',valid),
STResList183 = [STRes182|STResList182],
- ?line {STRes183,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD002.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes183,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD002.xsd','./msxsdtest/identityConstraint',invalid),
STResList184 = [STRes183|STResList183],
- ?line {STRes184,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD003.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes184,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD003.xsd','./msxsdtest/identityConstraint',invalid),
STResList185 = [STRes184|STResList184],
- ?line {STRes185,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD004.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes185,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD004.xsd','./msxsdtest/identityConstraint',invalid),
STResList186 = [STRes185|STResList185],
- ?line {STRes186,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD005.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes186,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD005.xsd','./msxsdtest/identityConstraint',invalid),
STResList187 = [STRes186|STResList186],
- ?line {STRes187,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD006.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes187,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD006.xsd','./msxsdtest/identityConstraint',invalid),
STResList188 = [STRes187|STResList187],
- ?line {STRes188,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD007.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes188,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD007.xsd','./msxsdtest/identityConstraint',invalid),
STResList189 = [STRes188|STResList188],
- ?line {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD008.xsd','./msxsdtest/identityConstraint',valid),
STResList190 = [STRes189|STResList189],
- ?line {STRes190,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes190,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD009.xsd','./msxsdtest/identityConstraint',valid),
STResList191 = [STRes190|STResList190],
- ?line {STRes191,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes191,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD010.xsd','./msxsdtest/identityConstraint',valid),
STResList192 = [STRes191|STResList191],
- ?line {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD011.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD011.xsd','./msxsdtest/identityConstraint',invalid),
STResList193 = [STRes192|STResList192],
- ?line {STRes193,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD012.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes193,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD012.xsd','./msxsdtest/identityConstraint',invalid),
STResList194 = [STRes193|STResList193],
- ?line {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD013.xsd','./msxsdtest/identityConstraint',valid),
STResList195 = [STRes194|STResList194],
- ?line {STRes195,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD014.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes195,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD014.xsd','./msxsdtest/identityConstraint',invalid),
STResList196 = [STRes195|STResList195],
- ?line {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD015.xsd','./msxsdtest/identityConstraint',valid),
STResList197 = [STRes196|STResList196],
- ?line {STRes197,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD016.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes197,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD016.xsd','./msxsdtest/identityConstraint',valid),
STResList198 = [STRes197|STResList197],
- ?line {STRes198,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD017.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes198,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD017.xsd','./msxsdtest/identityConstraint',invalid),
STResList199 = [STRes198|STResList198],
- ?line {STRes199,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD018.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes199,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD018.xsd','./msxsdtest/identityConstraint',invalid),
STResList200 = [STRes199|STResList199],
- ?line {STRes200,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD019.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes200,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD019.xsd','./msxsdtest/identityConstraint',invalid),
STResList201 = [STRes200|STResList200],
- ?line {STRes201,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD020.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes201,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD020.xsd','./msxsdtest/identityConstraint',invalid),
STResList202 = [STRes201|STResList201],
- ?line {STRes202,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD021.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes202,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD021.xsd','./msxsdtest/identityConstraint',invalid),
STResList203 = [STRes202|STResList202],
- ?line {STRes203,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD022.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes203,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD022.xsd','./msxsdtest/identityConstraint',invalid),
STResList204 = [STRes203|STResList203],
- ?line {STRes204,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD023.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes204,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD023.xsd','./msxsdtest/identityConstraint',invalid),
STResList205 = [STRes204|STResList204],
- ?line {STRes205,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD024.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes205,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD024.xsd','./msxsdtest/identityConstraint',invalid),
STResList206 = [STRes205|STResList205],
- ?line {STRes206,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD025.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes206,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD025.xsd','./msxsdtest/identityConstraint',invalid),
STResList207 = [STRes206|STResList206],
- ?line {STRes207,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD026.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes207,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD026.xsd','./msxsdtest/identityConstraint',invalid),
STResList208 = [STRes207|STResList207],
- ?line {STRes208,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD027.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes208,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD027.xsd','./msxsdtest/identityConstraint',invalid),
STResList209 = [STRes208|STResList208],
- ?line {STRes209,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD028.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes209,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD028.xsd','./msxsdtest/identityConstraint',invalid),
STResList210 = [STRes209|STResList209],
- ?line {STRes210,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD029.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes210,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD029.xsd','./msxsdtest/identityConstraint',invalid),
STResList211 = [STRes210|STResList210],
- ?line {STRes211,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD030.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes211,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD030.xsd','./msxsdtest/identityConstraint',invalid),
STResList212 = [STRes211|STResList211],
- ?line {STRes212,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD031.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes212,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD031.xsd','./msxsdtest/identityConstraint',invalid),
STResList213 = [STRes212|STResList212],
- ?line {STRes213,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD032.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes213,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD032.xsd','./msxsdtest/identityConstraint',invalid),
STResList214 = [STRes213|STResList213],
- ?line {STRes214,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD033.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes214,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idD033.xsd','./msxsdtest/identityConstraint',invalid),
STResList215 = [STRes214|STResList214],
- ?line {STRes215,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes215,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE001.xsd','./msxsdtest/identityConstraint',valid),
STResList216 = [STRes215|STResList215],
- ?line {STRes216,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE002.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes216,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE002.xsd','./msxsdtest/identityConstraint',invalid),
STResList217 = [STRes216|STResList216],
- ?line {STRes217,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE003.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes217,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE003.xsd','./msxsdtest/identityConstraint',invalid),
STResList218 = [STRes217|STResList217],
- ?line {STRes218,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE004.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes218,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE004.xsd','./msxsdtest/identityConstraint',invalid),
STResList219 = [STRes218|STResList218],
- ?line {STRes219,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE005.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes219,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE005.xsd','./msxsdtest/identityConstraint',invalid),
STResList220 = [STRes219|STResList219],
- ?line {STRes220,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE006.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes220,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE006.xsd','./msxsdtest/identityConstraint',invalid),
STResList221 = [STRes220|STResList220],
- ?line {STRes221,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE007.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes221,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE007.xsd','./msxsdtest/identityConstraint',invalid),
STResList222 = [STRes221|STResList221],
- ?line {STRes222,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes222,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE008.xsd','./msxsdtest/identityConstraint',valid),
STResList223 = [STRes222|STResList222],
- ?line {STRes223,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes223,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE009.xsd','./msxsdtest/identityConstraint',valid),
STResList224 = [STRes223|STResList223],
- ?line {STRes224,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes224,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE010.xsd','./msxsdtest/identityConstraint',valid),
STResList225 = [STRes224|STResList224],
- ?line {STRes225,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE011.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes225,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE011.xsd','./msxsdtest/identityConstraint',invalid),
STResList226 = [STRes225|STResList225],
- ?line {STRes226,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE012.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes226,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE012.xsd','./msxsdtest/identityConstraint',invalid),
STResList227 = [STRes226|STResList226],
- ?line {STRes227,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes227,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE013.xsd','./msxsdtest/identityConstraint',valid),
STResList228 = [STRes227|STResList227],
- ?line {STRes228,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE014.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes228,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE014.xsd','./msxsdtest/identityConstraint',invalid),
STResList229 = [STRes228|STResList228],
- ?line {STRes229,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes229,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE015.xsd','./msxsdtest/identityConstraint',valid),
STResList230 = [STRes229|STResList229],
- ?line {STRes230,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE016.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes230,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE016.xsd','./msxsdtest/identityConstraint',valid),
STResList231 = [STRes230|STResList230],
- ?line {STRes231,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE017.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes231,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE017.xsd','./msxsdtest/identityConstraint',invalid),
STResList232 = [STRes231|STResList231],
- ?line {STRes232,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE018.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes232,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE018.xsd','./msxsdtest/identityConstraint',invalid),
STResList233 = [STRes232|STResList232],
- ?line {STRes233,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE019.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes233,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE019.xsd','./msxsdtest/identityConstraint',invalid),
STResList234 = [STRes233|STResList233],
- ?line {STRes234,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE020.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes234,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE020.xsd','./msxsdtest/identityConstraint',invalid),
STResList235 = [STRes234|STResList234],
- ?line {STRes235,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE021.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes235,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE021.xsd','./msxsdtest/identityConstraint',invalid),
STResList236 = [STRes235|STResList235],
- ?line {STRes236,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE022.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes236,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE022.xsd','./msxsdtest/identityConstraint',invalid),
STResList237 = [STRes236|STResList236],
- ?line {STRes237,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE023.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes237,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE023.xsd','./msxsdtest/identityConstraint',invalid),
STResList238 = [STRes237|STResList237],
- ?line {STRes238,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE024.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes238,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE024.xsd','./msxsdtest/identityConstraint',invalid),
STResList239 = [STRes238|STResList238],
- ?line {STRes239,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE025.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes239,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE025.xsd','./msxsdtest/identityConstraint',invalid),
STResList240 = [STRes239|STResList239],
- ?line {STRes240,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE026.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes240,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE026.xsd','./msxsdtest/identityConstraint',invalid),
STResList241 = [STRes240|STResList240],
- ?line {STRes241,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE027.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes241,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE027.xsd','./msxsdtest/identityConstraint',invalid),
STResList242 = [STRes241|STResList241],
- ?line {STRes242,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE028.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes242,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE028.xsd','./msxsdtest/identityConstraint',invalid),
STResList243 = [STRes242|STResList242],
- ?line {STRes243,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE029.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes243,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE029.xsd','./msxsdtest/identityConstraint',invalid),
STResList244 = [STRes243|STResList243],
- ?line {STRes244,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE030.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes244,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE030.xsd','./msxsdtest/identityConstraint',invalid),
STResList245 = [STRes244|STResList244],
- ?line {STRes245,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE031.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes245,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE031.xsd','./msxsdtest/identityConstraint',invalid),
STResList246 = [STRes245|STResList245],
- ?line {STRes246,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE032.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes246,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE032.xsd','./msxsdtest/identityConstraint',invalid),
STResList247 = [STRes246|STResList246],
- ?line {STRes247,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE033.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes247,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idE033.xsd','./msxsdtest/identityConstraint',invalid),
STResList248 = [STRes247|STResList247],
- ?line {STRes248,S248} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes248,S248} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF001.xsd','./msxsdtest/identityConstraint',valid),
STResList249 = [STRes248|STResList248],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF001.xml','./msxsdtest/identityConstraint',valid,S248),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF001.xml','./msxsdtest/identityConstraint',valid,S248),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes249,S249} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF003.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes249,S249} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF003.xsd','./msxsdtest/identityConstraint',valid),
STResList250 = [STRes249|STResList249],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF003.xml','./msxsdtest/identityConstraint',valid,S249),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF003.xml','./msxsdtest/identityConstraint',valid,S249),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes250,S250} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF004.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes250,S250} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF004.xsd','./msxsdtest/identityConstraint',valid),
STResList251 = [STRes250|STResList250],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF004.xml','./msxsdtest/identityConstraint',valid,S250),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF004.xml','./msxsdtest/identityConstraint',valid,S250),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF005.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes251,S251} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF005.xsd','./msxsdtest/identityConstraint',valid),
STResList252 = [STRes251|STResList251],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF005.xml','./msxsdtest/identityConstraint',invalid,S251),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF005.xml','./msxsdtest/identityConstraint',invalid,S251),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF006.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes252,S252} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF006.xsd','./msxsdtest/identityConstraint',valid),
STResList253 = [STRes252|STResList252],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF006.xml','./msxsdtest/identityConstraint',invalid,S252),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF006.xml','./msxsdtest/identityConstraint',invalid,S252),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes253,S253} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF007.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes253,S253} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF007.xsd','./msxsdtest/identityConstraint',valid),
STResList254 = [STRes253|STResList253],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF007.xml','./msxsdtest/identityConstraint',valid,S253),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF007.xml','./msxsdtest/identityConstraint',valid,S253),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes254,S254} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes254,S254} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF008.xsd','./msxsdtest/identityConstraint',valid),
STResList255 = [STRes254|STResList254],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF008.xml','./msxsdtest/identityConstraint',invalid,S254),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF008.xml','./msxsdtest/identityConstraint',invalid,S254),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes255,S255} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes255,S255} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF009.xsd','./msxsdtest/identityConstraint',valid),
STResList256 = [STRes255|STResList255],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF009.xml','./msxsdtest/identityConstraint',valid,S255),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF009.xml','./msxsdtest/identityConstraint',valid,S255),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes256,S256} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes256,S256} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF010.xsd','./msxsdtest/identityConstraint',valid),
STResList257 = [STRes256|STResList256],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF010.xml','./msxsdtest/identityConstraint',invalid,S256),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF010.xml','./msxsdtest/identityConstraint',invalid,S256),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes257,S257} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF011.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes257,S257} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF011.xsd','./msxsdtest/identityConstraint',valid),
STResList258 = [STRes257|STResList257],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF011.xml','./msxsdtest/identityConstraint',valid,S257),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF011.xml','./msxsdtest/identityConstraint',valid,S257),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes258,S258} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes258,S258} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF012.xsd','./msxsdtest/identityConstraint',valid),
STResList259 = [STRes258|STResList258],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF012.xml','./msxsdtest/identityConstraint',valid,S258),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF012.xml','./msxsdtest/identityConstraint',valid,S258),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes259,S259} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes259,S259} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF013.xsd','./msxsdtest/identityConstraint',valid),
STResList260 = [STRes259|STResList259],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF013.xml','./msxsdtest/identityConstraint',valid,S259),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF013.xml','./msxsdtest/identityConstraint',valid,S259),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes260,S260} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF014.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes260,S260} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF014.xsd','./msxsdtest/identityConstraint',valid),
STResList261 = [STRes260|STResList260],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF014.xml','./msxsdtest/identityConstraint',valid,S260),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF014.xml','./msxsdtest/identityConstraint',valid,S260),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes261,S261} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes261,S261} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF015.xsd','./msxsdtest/identityConstraint',valid),
STResList262 = [STRes261|STResList261],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF015.xml','./msxsdtest/identityConstraint',invalid,S261),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF015.xml','./msxsdtest/identityConstraint',invalid,S261),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes262,S262} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF016.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes262,S262} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF016.xsd','./msxsdtest/identityConstraint',valid),
STResList263 = [STRes262|STResList262],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF016.xml','./msxsdtest/identityConstraint',invalid,S262),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF016.xml','./msxsdtest/identityConstraint',invalid,S262),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes263,S263} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF017.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes263,S263} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF017.xsd','./msxsdtest/identityConstraint',valid),
STResList264 = [STRes263|STResList263],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF017.xml','./msxsdtest/identityConstraint',invalid,S263),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF017.xml','./msxsdtest/identityConstraint',invalid,S263),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes264,S264} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF018.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes264,S264} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF018.xsd','./msxsdtest/identityConstraint',valid),
STResList265 = [STRes264|STResList264],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF018.xml','./msxsdtest/identityConstraint',invalid,S264),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF018.xml','./msxsdtest/identityConstraint',invalid,S264),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes265,S265} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF019.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes265,S265} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF019.xsd','./msxsdtest/identityConstraint',valid),
STResList266 = [STRes265|STResList265],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF019.xml','./msxsdtest/identityConstraint',valid,S265),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF019.xml','./msxsdtest/identityConstraint',valid,S265),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes266,S266} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF020.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes266,S266} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF020.xsd','./msxsdtest/identityConstraint',valid),
STResList267 = [STRes266|STResList266],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF020.xml','./msxsdtest/identityConstraint',valid,S266),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF020.xml','./msxsdtest/identityConstraint',valid,S266),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes267,S267} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF021.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes267,S267} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF021.xsd','./msxsdtest/identityConstraint',valid),
STResList268 = [STRes267|STResList267],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF021.xml','./msxsdtest/identityConstraint',valid,S267),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF021.xml','./msxsdtest/identityConstraint',valid,S267),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes268,S268} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF022.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes268,S268} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF022.xsd','./msxsdtest/identityConstraint',valid),
STResList269 = [STRes268|STResList268],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF022.xml','./msxsdtest/identityConstraint',valid,S268),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF022.xml','./msxsdtest/identityConstraint',valid,S268),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes269,S269} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF023.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes269,S269} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF023.xsd','./msxsdtest/identityConstraint',valid),
STResList270 = [STRes269|STResList269],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF023.xml','./msxsdtest/identityConstraint',valid,S269),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF023.xml','./msxsdtest/identityConstraint',valid,S269),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes270,S270} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF024.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes270,S270} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF024.xsd','./msxsdtest/identityConstraint',valid),
STResList271 = [STRes270|STResList270],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF024.xml','./msxsdtest/identityConstraint',valid,S270),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF024.xml','./msxsdtest/identityConstraint',valid,S270),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes271,S271} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF025.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes271,S271} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF025.xsd','./msxsdtest/identityConstraint',valid),
STResList272 = [STRes271|STResList271],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF025.xml','./msxsdtest/identityConstraint',valid,S271),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF025.xml','./msxsdtest/identityConstraint',valid,S271),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes272,S272} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF026.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes272,S272} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF026.xsd','./msxsdtest/identityConstraint',valid),
STResList273 = [STRes272|STResList272],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF026.xml','./msxsdtest/identityConstraint',valid,S272),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF026.xml','./msxsdtest/identityConstraint',valid,S272),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes273,S273} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF027.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes273,S273} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF027.xsd','./msxsdtest/identityConstraint',valid),
STResList274 = [STRes273|STResList273],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF027.xml','./msxsdtest/identityConstraint',valid,S273),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF027.xml','./msxsdtest/identityConstraint',valid,S273),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes274,S274} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF028.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes274,S274} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF028.xsd','./msxsdtest/identityConstraint',valid),
STResList275 = [STRes274|STResList274],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF028.xml','./msxsdtest/identityConstraint',valid,S274),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF028.xml','./msxsdtest/identityConstraint',valid,S274),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes275,S275} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF029.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes275,S275} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF029.xsd','./msxsdtest/identityConstraint',valid),
STResList276 = [STRes275|STResList275],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF029.xml','./msxsdtest/identityConstraint',valid,S275),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF029.xml','./msxsdtest/identityConstraint',valid,S275),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes276,S276} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF030.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes276,S276} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF030.xsd','./msxsdtest/identityConstraint',valid),
STResList277 = [STRes276|STResList276],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF030.xml','./msxsdtest/identityConstraint',valid,S276),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF030.xml','./msxsdtest/identityConstraint',valid,S276),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes277,S277} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF031.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes277,S277} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF031.xsd','./msxsdtest/identityConstraint',valid),
STResList278 = [STRes277|STResList277],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF031.xml','./msxsdtest/identityConstraint',valid,S277),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF031.xml','./msxsdtest/identityConstraint',valid,S277),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes278,S278} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF032.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes278,S278} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF032.xsd','./msxsdtest/identityConstraint',valid),
STResList279 = [STRes278|STResList278],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF032.xml','./msxsdtest/identityConstraint',valid,S278),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF032.xml','./msxsdtest/identityConstraint',valid,S278),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes279,S279} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF033.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes279,S279} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF033.xsd','./msxsdtest/identityConstraint',valid),
STResList280 = [STRes279|STResList279],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF033.xml','./msxsdtest/identityConstraint',valid,S279),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF033.xml','./msxsdtest/identityConstraint',valid,S279),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes280,S280} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF034.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes280,S280} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF034.xsd','./msxsdtest/identityConstraint',valid),
STResList281 = [STRes280|STResList280],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF034.xml','./msxsdtest/identityConstraint',valid,S280),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF034.xml','./msxsdtest/identityConstraint',valid,S280),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes281,S281} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF035.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes281,S281} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF035.xsd','./msxsdtest/identityConstraint',valid),
STResList282 = [STRes281|STResList281],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF035.xml','./msxsdtest/identityConstraint',valid,S281),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF035.xml','./msxsdtest/identityConstraint',valid,S281),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes282,S282} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF036.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes282,S282} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idF036.xsd','./msxsdtest/identityConstraint',valid),
STResList283 = [STRes282|STResList282],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF036.xml','./msxsdtest/identityConstraint',valid,S282),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idF036.xml','./msxsdtest/identityConstraint',valid,S282),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes283,S283} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes283,S283} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG001.xsd','./msxsdtest/identityConstraint',valid),
STResList284 = [STRes283|STResList283],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG001.xml','./msxsdtest/identityConstraint',valid,S283),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG001.xml','./msxsdtest/identityConstraint',valid,S283),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes284,S284} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG003.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes284,S284} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG003.xsd','./msxsdtest/identityConstraint',valid),
STResList285 = [STRes284|STResList284],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG003.xml','./msxsdtest/identityConstraint',invalid,S284),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG003.xml','./msxsdtest/identityConstraint',invalid,S284),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes285,S285} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG004.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes285,S285} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG004.xsd','./msxsdtest/identityConstraint',valid),
STResList286 = [STRes285|STResList285],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG004.xml','./msxsdtest/identityConstraint',valid,S285),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG004.xml','./msxsdtest/identityConstraint',valid,S285),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes286,S286} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG005.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes286,S286} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG005.xsd','./msxsdtest/identityConstraint',valid),
STResList287 = [STRes286|STResList286],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG005.xml','./msxsdtest/identityConstraint',invalid,S286),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG005.xml','./msxsdtest/identityConstraint',invalid,S286),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes287,S287} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG006.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes287,S287} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG006.xsd','./msxsdtest/identityConstraint',valid),
STResList288 = [STRes287|STResList287],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG006.xml','./msxsdtest/identityConstraint',invalid,S287),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG006.xml','./msxsdtest/identityConstraint',invalid,S287),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes288,S288} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG007.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes288,S288} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG007.xsd','./msxsdtest/identityConstraint',valid),
STResList289 = [STRes288|STResList288],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG007.xml','./msxsdtest/identityConstraint',valid,S288),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG007.xml','./msxsdtest/identityConstraint',valid,S288),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes289,S289} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes289,S289} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG008.xsd','./msxsdtest/identityConstraint',valid),
STResList290 = [STRes289|STResList289],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG008.xml','./msxsdtest/identityConstraint',invalid,S289),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG008.xml','./msxsdtest/identityConstraint',invalid,S289),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes290,S290} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes290,S290} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG009.xsd','./msxsdtest/identityConstraint',valid),
STResList291 = [STRes290|STResList290],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG009.xml','./msxsdtest/identityConstraint',invalid,S290),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG009.xml','./msxsdtest/identityConstraint',invalid,S290),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes291,S291} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes291,S291} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG010.xsd','./msxsdtest/identityConstraint',valid),
STResList292 = [STRes291|STResList291],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG010.xml','./msxsdtest/identityConstraint',invalid,S291),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG010.xml','./msxsdtest/identityConstraint',invalid,S291),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes292,S292} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG011.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes292,S292} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG011.xsd','./msxsdtest/identityConstraint',valid),
STResList293 = [STRes292|STResList292],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG011.xml','./msxsdtest/identityConstraint',invalid,S292),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG011.xml','./msxsdtest/identityConstraint',invalid,S292),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes293,S293} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes293,S293} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG012.xsd','./msxsdtest/identityConstraint',valid),
STResList294 = [STRes293|STResList293],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG012.xml','./msxsdtest/identityConstraint',invalid,S293),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG012.xml','./msxsdtest/identityConstraint',invalid,S293),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes294,S294} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes294,S294} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG013.xsd','./msxsdtest/identityConstraint',valid),
STResList295 = [STRes294|STResList294],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG013.xml','./msxsdtest/identityConstraint',valid,S294),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG013.xml','./msxsdtest/identityConstraint',valid,S294),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes295,S295} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG014.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes295,S295} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG014.xsd','./msxsdtest/identityConstraint',valid),
STResList296 = [STRes295|STResList295],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG014.xml','./msxsdtest/identityConstraint',valid,S295),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG014.xml','./msxsdtest/identityConstraint',valid,S295),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes296,S296} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes296,S296} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG015.xsd','./msxsdtest/identityConstraint',valid),
STResList297 = [STRes296|STResList296],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG015.xml','./msxsdtest/identityConstraint',valid,S296),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG015.xml','./msxsdtest/identityConstraint',valid,S296),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes297,S297} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG016.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes297,S297} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG016.xsd','./msxsdtest/identityConstraint',valid),
STResList298 = [STRes297|STResList297],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG016.xml','./msxsdtest/identityConstraint',valid,S297),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG016.xml','./msxsdtest/identityConstraint',valid,S297),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes298,S298} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG017.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes298,S298} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG017.xsd','./msxsdtest/identityConstraint',valid),
STResList299 = [STRes298|STResList298],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG017.xml','./msxsdtest/identityConstraint',valid,S298),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG017.xml','./msxsdtest/identityConstraint',valid,S298),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes299,S299} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG018.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes299,S299} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG018.xsd','./msxsdtest/identityConstraint',valid),
STResList300 = [STRes299|STResList299],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG018.xml','./msxsdtest/identityConstraint',valid,S299),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG018.xml','./msxsdtest/identityConstraint',valid,S299),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes300,S300} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG019.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes300,S300} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG019.xsd','./msxsdtest/identityConstraint',valid),
STResList301 = [STRes300|STResList300],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG019.xml','./msxsdtest/identityConstraint',valid,S300),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG019.xml','./msxsdtest/identityConstraint',valid,S300),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes301,S301} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG020.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes301,S301} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG020.xsd','./msxsdtest/identityConstraint',valid),
STResList302 = [STRes301|STResList301],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG020.xml','./msxsdtest/identityConstraint',invalid,S301),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG020.xml','./msxsdtest/identityConstraint',invalid,S301),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes302,S302} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG021.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes302,S302} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG021.xsd','./msxsdtest/identityConstraint',valid),
STResList303 = [STRes302|STResList302],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG021.xml','./msxsdtest/identityConstraint',valid,S302),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG021.xml','./msxsdtest/identityConstraint',valid,S302),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes303,S303} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG022.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes303,S303} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG022.xsd','./msxsdtest/identityConstraint',valid),
STResList304 = [STRes303|STResList303],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG022.xml','./msxsdtest/identityConstraint',valid,S303),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG022.xml','./msxsdtest/identityConstraint',valid,S303),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes304,S304} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG023.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes304,S304} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG023.xsd','./msxsdtest/identityConstraint',valid),
STResList305 = [STRes304|STResList304],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG023.xml','./msxsdtest/identityConstraint',valid,S304),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG023.xml','./msxsdtest/identityConstraint',valid,S304),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes305,S305} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG024.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes305,S305} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG024.xsd','./msxsdtest/identityConstraint',valid),
STResList306 = [STRes305|STResList305],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG024.xml','./msxsdtest/identityConstraint',valid,S305),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG024.xml','./msxsdtest/identityConstraint',valid,S305),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes306,S306} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG025.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes306,S306} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG025.xsd','./msxsdtest/identityConstraint',valid),
STResList307 = [STRes306|STResList306],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG025.xml','./msxsdtest/identityConstraint',invalid,S306),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG025.xml','./msxsdtest/identityConstraint',invalid,S306),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes307,S307} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG026.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes307,S307} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG026.xsd','./msxsdtest/identityConstraint',valid),
STResList308 = [STRes307|STResList307],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG026.xml','./msxsdtest/identityConstraint',valid,S307),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG026.xml','./msxsdtest/identityConstraint',valid,S307),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes308,S308} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG027.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes308,S308} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG027.xsd','./msxsdtest/identityConstraint',valid),
STResList309 = [STRes308|STResList308],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG027.xml','./msxsdtest/identityConstraint',valid,S308),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG027.xml','./msxsdtest/identityConstraint',valid,S308),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes309,S309} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG028.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes309,S309} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG028.xsd','./msxsdtest/identityConstraint',valid),
STResList310 = [STRes309|STResList309],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG028.xml','./msxsdtest/identityConstraint',valid,S309),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG028.xml','./msxsdtest/identityConstraint',valid,S309),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes310,S310} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG029.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes310,S310} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG029.xsd','./msxsdtest/identityConstraint',valid),
STResList311 = [STRes310|STResList310],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG029.xml','./msxsdtest/identityConstraint',valid,S310),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG029.xml','./msxsdtest/identityConstraint',valid,S310),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes311,S311} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG030.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes311,S311} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idG030.xsd','./msxsdtest/identityConstraint',valid),
STResList312 = [STRes311|STResList311],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG030.xml','./msxsdtest/identityConstraint',valid,S311),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idG030.xml','./msxsdtest/identityConstraint',valid,S311),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes312,S312} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes312,S312} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH001.xsd','./msxsdtest/identityConstraint',valid),
STResList313 = [STRes312|STResList312],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH001.xml','./msxsdtest/identityConstraint',valid,S312),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH001.xml','./msxsdtest/identityConstraint',valid,S312),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes313,S313} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH003.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes313,S313} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH003.xsd','./msxsdtest/identityConstraint',valid),
STResList314 = [STRes313|STResList313],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH003.xml','./msxsdtest/identityConstraint',valid,S313),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH003.xml','./msxsdtest/identityConstraint',valid,S313),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes314,S314} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH004.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes314,S314} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH004.xsd','./msxsdtest/identityConstraint',valid),
STResList315 = [STRes314|STResList314],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH004.xml','./msxsdtest/identityConstraint',valid,S314),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH004.xml','./msxsdtest/identityConstraint',valid,S314),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes315,S315} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH005.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes315,S315} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH005.xsd','./msxsdtest/identityConstraint',valid),
STResList316 = [STRes315|STResList315],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH005.xml','./msxsdtest/identityConstraint',invalid,S315),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH005.xml','./msxsdtest/identityConstraint',invalid,S315),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes316,S316} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH006.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes316,S316} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH006.xsd','./msxsdtest/identityConstraint',valid),
STResList317 = [STRes316|STResList316],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH006.xml','./msxsdtest/identityConstraint',invalid,S316),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH006.xml','./msxsdtest/identityConstraint',invalid,S316),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes317,S317} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH007.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes317,S317} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH007.xsd','./msxsdtest/identityConstraint',valid),
STResList318 = [STRes317|STResList317],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH007.xml','./msxsdtest/identityConstraint',valid,S317),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH007.xml','./msxsdtest/identityConstraint',valid,S317),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes318,S318} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes318,S318} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH008.xsd','./msxsdtest/identityConstraint',valid),
STResList319 = [STRes318|STResList318],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH008.xml','./msxsdtest/identityConstraint',valid,S318),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH008.xml','./msxsdtest/identityConstraint',valid,S318),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes319,S319} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes319,S319} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH009.xsd','./msxsdtest/identityConstraint',valid),
STResList320 = [STRes319|STResList319],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH009.xml','./msxsdtest/identityConstraint',valid,S319),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH009.xml','./msxsdtest/identityConstraint',valid,S319),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes320,S320} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes320,S320} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH010.xsd','./msxsdtest/identityConstraint',valid),
STResList321 = [STRes320|STResList320],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH010.xml','./msxsdtest/identityConstraint',invalid,S320),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH010.xml','./msxsdtest/identityConstraint',invalid,S320),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes321,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH011.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes321,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH011.xsd','./msxsdtest/identityConstraint',invalid),
STResList322 = [STRes321|STResList321],
- ?line {STRes322,S322} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes322,S322} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH012.xsd','./msxsdtest/identityConstraint',valid),
STResList323 = [STRes322|STResList322],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH012.xml','./msxsdtest/identityConstraint',invalid,S322),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH012.xml','./msxsdtest/identityConstraint',invalid,S322),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes323,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH013.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes323,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH013.xsd','./msxsdtest/identityConstraint',invalid),
STResList324 = [STRes323|STResList323],
- ?line {STRes324,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH014.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes324,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH014.xsd','./msxsdtest/identityConstraint',invalid),
STResList325 = [STRes324|STResList324],
- ?line {STRes325,S325} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes325,S325} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH015.xsd','./msxsdtest/identityConstraint',valid),
STResList326 = [STRes325|STResList325],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH015.xml','./msxsdtest/identityConstraint',valid,S325),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH015.xml','./msxsdtest/identityConstraint',valid,S325),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes326,S326} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH016.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes326,S326} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH016.xsd','./msxsdtest/identityConstraint',valid),
STResList327 = [STRes326|STResList326],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH016.xml','./msxsdtest/identityConstraint',valid,S326),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH016.xml','./msxsdtest/identityConstraint',valid,S326),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes327,S327} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH017.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes327,S327} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH017.xsd','./msxsdtest/identityConstraint',valid),
STResList328 = [STRes327|STResList327],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH017.xml','./msxsdtest/identityConstraint',valid,S327),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH017.xml','./msxsdtest/identityConstraint',valid,S327),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes328,S328} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH018.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes328,S328} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH018.xsd','./msxsdtest/identityConstraint',valid),
STResList329 = [STRes328|STResList328],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH018.xml','./msxsdtest/identityConstraint',valid,S328),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH018.xml','./msxsdtest/identityConstraint',valid,S328),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes329,S329} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH019.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes329,S329} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH019.xsd','./msxsdtest/identityConstraint',valid),
STResList330 = [STRes329|STResList329],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH019.xml','./msxsdtest/identityConstraint',valid,S329),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH019.xml','./msxsdtest/identityConstraint',valid,S329),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes330,S330} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH020.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes330,S330} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH020.xsd','./msxsdtest/identityConstraint',valid),
STResList331 = [STRes330|STResList330],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH020.xml','./msxsdtest/identityConstraint',valid,S330),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH020.xml','./msxsdtest/identityConstraint',valid,S330),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes331,S331} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH021.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes331,S331} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH021.xsd','./msxsdtest/identityConstraint',valid),
STResList332 = [STRes331|STResList331],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH021.xml','./msxsdtest/identityConstraint',valid,S331),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH021.xml','./msxsdtest/identityConstraint',valid,S331),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes332,S332} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH022.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes332,S332} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH022.xsd','./msxsdtest/identityConstraint',valid),
STResList333 = [STRes332|STResList332],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH022.xml','./msxsdtest/identityConstraint',valid,S332),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH022.xml','./msxsdtest/identityConstraint',valid,S332),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes333,S333} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH023.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes333,S333} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH023.xsd','./msxsdtest/identityConstraint',valid),
STResList334 = [STRes333|STResList333],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH023.xml','./msxsdtest/identityConstraint',valid,S333),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH023.xml','./msxsdtest/identityConstraint',valid,S333),
ITResList83 = [ITRes82|ITResList82],
- ?line {STRes334,S334} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH024.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes334,S334} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH024.xsd','./msxsdtest/identityConstraint',valid),
STResList335 = [STRes334|STResList334],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH024.xml','./msxsdtest/identityConstraint',valid,S334),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH024.xml','./msxsdtest/identityConstraint',valid,S334),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes335,S335} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH025.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes335,S335} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH025.xsd','./msxsdtest/identityConstraint',valid),
STResList336 = [STRes335|STResList335],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH025.xml','./msxsdtest/identityConstraint',valid,S335),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH025.xml','./msxsdtest/identityConstraint',valid,S335),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes336,S336} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH026.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes336,S336} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH026.xsd','./msxsdtest/identityConstraint',valid),
STResList337 = [STRes336|STResList336],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH026.xml','./msxsdtest/identityConstraint',valid,S336),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH026.xml','./msxsdtest/identityConstraint',valid,S336),
ITResList86 = [ITRes85|ITResList85],
- ?line {STRes337,S337} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH027.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes337,S337} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH027.xsd','./msxsdtest/identityConstraint',valid),
STResList338 = [STRes337|STResList337],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH027.xml','./msxsdtest/identityConstraint',valid,S337),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH027.xml','./msxsdtest/identityConstraint',valid,S337),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes338,S338} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH028.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes338,S338} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH028.xsd','./msxsdtest/identityConstraint',valid),
STResList339 = [STRes338|STResList338],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH028.xml','./msxsdtest/identityConstraint',valid,S338),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH028.xml','./msxsdtest/identityConstraint',valid,S338),
ITResList88 = [ITRes87|ITResList87],
- ?line {STRes339,S339} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH029.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes339,S339} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH029.xsd','./msxsdtest/identityConstraint',valid),
STResList340 = [STRes339|STResList339],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH029.xml','./msxsdtest/identityConstraint',valid,S339),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH029.xml','./msxsdtest/identityConstraint',valid,S339),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes340,S340} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH030.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes340,S340} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH030.xsd','./msxsdtest/identityConstraint',valid),
STResList341 = [STRes340|STResList340],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH030.xml','./msxsdtest/identityConstraint',valid,S340),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH030.xml','./msxsdtest/identityConstraint',valid,S340),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes341,S341} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH031.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes341,S341} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH031.xsd','./msxsdtest/identityConstraint',valid),
STResList342 = [STRes341|STResList341],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH031.xml','./msxsdtest/identityConstraint',valid,S341),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH031.xml','./msxsdtest/identityConstraint',valid,S341),
ITResList91 = [ITRes90|ITResList90],
- ?line {STRes342,S342} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH032.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes342,S342} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH032.xsd','./msxsdtest/identityConstraint',valid),
STResList343 = [STRes342|STResList342],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH032.xml','./msxsdtest/identityConstraint',valid,S342),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH032.xml','./msxsdtest/identityConstraint',valid,S342),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes343,S343} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH034.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes343,S343} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH034.xsd','./msxsdtest/identityConstraint',valid),
STResList344 = [STRes343|STResList343],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH034.xml','./msxsdtest/identityConstraint',valid,S343),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idH034.xml','./msxsdtest/identityConstraint',valid,S343),
ITResList93 = [ITRes92|ITResList92],
- ?line {STRes344,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH035.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes344,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idH035.xsd','./msxsdtest/identityConstraint',invalid),
STResList345 = [STRes344|STResList344],
- ?line {STRes345,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI001.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes345,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI001.xsd','./msxsdtest/identityConstraint',invalid),
STResList346 = [STRes345|STResList345],
- ?line {STRes346,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI002.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes346,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI002.xsd','./msxsdtest/identityConstraint',valid),
STResList347 = [STRes346|STResList346],
- ?line {STRes347,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI003.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes347,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI003.xsd','./msxsdtest/identityConstraint',invalid),
STResList348 = [STRes347|STResList347],
- ?line {STRes348,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI004.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes348,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI004.xsd','./msxsdtest/identityConstraint',invalid),
STResList349 = [STRes348|STResList348],
- ?line {STRes349,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI005.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes349,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI005.xsd','./msxsdtest/identityConstraint',invalid),
STResList350 = [STRes349|STResList349],
- ?line {STRes350,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI006.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes350,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI006.xsd','./msxsdtest/identityConstraint',invalid),
STResList351 = [STRes350|STResList350],
- ?line {STRes351,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI007.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes351,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI007.xsd','./msxsdtest/identityConstraint',invalid),
STResList352 = [STRes351|STResList351],
- ?line {STRes352,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes352,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI008.xsd','./msxsdtest/identityConstraint',valid),
STResList353 = [STRes352|STResList352],
- ?line {STRes353,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes353,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI009.xsd','./msxsdtest/identityConstraint',valid),
STResList354 = [STRes353|STResList353],
- ?line {STRes354,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI010.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes354,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI010.xsd','./msxsdtest/identityConstraint',invalid),
STResList355 = [STRes354|STResList354],
- ?line {STRes355,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI011.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes355,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI011.xsd','./msxsdtest/identityConstraint',valid),
STResList356 = [STRes355|STResList355],
- ?line {STRes356,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes356,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI012.xsd','./msxsdtest/identityConstraint',valid),
STResList357 = [STRes356|STResList356],
- ?line {STRes357,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes357,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI013.xsd','./msxsdtest/identityConstraint',valid),
STResList358 = [STRes357|STResList357],
- ?line {STRes358,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI014.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes358,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI014.xsd','./msxsdtest/identityConstraint',invalid),
STResList359 = [STRes358|STResList358],
- ?line {STRes359,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI015.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes359,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI015.xsd','./msxsdtest/identityConstraint',invalid),
STResList360 = [STRes359|STResList359],
- ?line {STRes360,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI016.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes360,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI016.xsd','./msxsdtest/identityConstraint',invalid),
STResList361 = [STRes360|STResList360],
- ?line {STRes361,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI017.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes361,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI017.xsd','./msxsdtest/identityConstraint',valid),
STResList362 = [STRes361|STResList361],
- ?line {STRes362,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI018.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes362,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI018.xsd','./msxsdtest/identityConstraint',invalid),
STResList363 = [STRes362|STResList362],
- ?line {STRes363,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI019.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes363,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI019.xsd','./msxsdtest/identityConstraint',valid),
STResList364 = [STRes363|STResList363],
- ?line {STRes364,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI020.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes364,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI020.xsd','./msxsdtest/identityConstraint',valid),
STResList365 = [STRes364|STResList364],
- ?line {STRes365,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI021.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes365,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI021.xsd','./msxsdtest/identityConstraint',valid),
STResList366 = [STRes365|STResList365],
- ?line {STRes366,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI022.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes366,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI022.xsd','./msxsdtest/identityConstraint',invalid),
STResList367 = [STRes366|STResList366],
- ?line {STRes367,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI023.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes367,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI023.xsd','./msxsdtest/identityConstraint',invalid),
STResList368 = [STRes367|STResList367],
- ?line {STRes368,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI024.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes368,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI024.xsd','./msxsdtest/identityConstraint',valid),
STResList369 = [STRes368|STResList368],
- ?line {STRes369,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI025.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes369,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI025.xsd','./msxsdtest/identityConstraint',valid),
STResList370 = [STRes369|STResList369],
- ?line {STRes370,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI026.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes370,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI026.xsd','./msxsdtest/identityConstraint',valid),
STResList371 = [STRes370|STResList370],
- ?line {STRes371,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI027.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes371,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI027.xsd','./msxsdtest/identityConstraint',valid),
STResList372 = [STRes371|STResList371],
- ?line {STRes372,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI028.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes372,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI028.xsd','./msxsdtest/identityConstraint',invalid),
STResList373 = [STRes372|STResList372],
- ?line {STRes373,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI029.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes373,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI029.xsd','./msxsdtest/identityConstraint',valid),
STResList374 = [STRes373|STResList373],
- ?line {STRes374,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI030.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes374,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI030.xsd','./msxsdtest/identityConstraint',valid),
STResList375 = [STRes374|STResList374],
- ?line {STRes375,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI031.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes375,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI031.xsd','./msxsdtest/identityConstraint',valid),
STResList376 = [STRes375|STResList375],
- ?line {STRes376,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI032.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes376,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI032.xsd','./msxsdtest/identityConstraint',valid),
STResList377 = [STRes376|STResList376],
- ?line {STRes377,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI033.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes377,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI033.xsd','./msxsdtest/identityConstraint',valid),
STResList378 = [STRes377|STResList377],
- ?line {STRes378,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI034.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes378,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI034.xsd','./msxsdtest/identityConstraint',valid),
STResList379 = [STRes378|STResList378],
- ?line {STRes379,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI035.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes379,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI035.xsd','./msxsdtest/identityConstraint',valid),
STResList380 = [STRes379|STResList379],
- ?line {STRes380,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI036.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes380,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI036.xsd','./msxsdtest/identityConstraint',valid),
STResList381 = [STRes380|STResList380],
- ?line {STRes381,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI037.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes381,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI037.xsd','./msxsdtest/identityConstraint',valid),
STResList382 = [STRes381|STResList381],
- ?line {STRes382,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI038.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes382,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI038.xsd','./msxsdtest/identityConstraint',invalid),
STResList383 = [STRes382|STResList382],
- ?line {STRes383,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI039.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes383,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI039.xsd','./msxsdtest/identityConstraint',valid),
STResList384 = [STRes383|STResList383],
- ?line {STRes384,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI040.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes384,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI040.xsd','./msxsdtest/identityConstraint',valid),
STResList385 = [STRes384|STResList384],
- ?line {STRes385,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI041.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes385,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI041.xsd','./msxsdtest/identityConstraint',valid),
STResList386 = [STRes385|STResList385],
- ?line {STRes386,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI042.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes386,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI042.xsd','./msxsdtest/identityConstraint',valid),
STResList387 = [STRes386|STResList386],
- ?line {STRes387,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI043.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes387,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI043.xsd','./msxsdtest/identityConstraint',valid),
STResList388 = [STRes387|STResList387],
- ?line {STRes388,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI044.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes388,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI044.xsd','./msxsdtest/identityConstraint',valid),
STResList389 = [STRes388|STResList388],
- ?line {STRes389,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI045.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes389,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI045.xsd','./msxsdtest/identityConstraint',valid),
STResList390 = [STRes389|STResList389],
- ?line {STRes390,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI046.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes390,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI046.xsd','./msxsdtest/identityConstraint',valid),
STResList391 = [STRes390|STResList390],
- ?line {STRes391,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI047.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes391,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI047.xsd','./msxsdtest/identityConstraint',valid),
STResList392 = [STRes391|STResList391],
- ?line {STRes392,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI048.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes392,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI048.xsd','./msxsdtest/identityConstraint',valid),
STResList393 = [STRes392|STResList392],
- ?line {STRes393,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI049.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes393,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI049.xsd','./msxsdtest/identityConstraint',valid),
STResList394 = [STRes393|STResList393],
- ?line {STRes394,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI050.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes394,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI050.xsd','./msxsdtest/identityConstraint',valid),
STResList395 = [STRes394|STResList394],
- ?line {STRes395,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI051.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes395,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI051.xsd','./msxsdtest/identityConstraint',valid),
STResList396 = [STRes395|STResList395],
- ?line {STRes396,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI052.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes396,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI052.xsd','./msxsdtest/identityConstraint',valid),
STResList397 = [STRes396|STResList396],
- ?line {STRes397,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI053.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes397,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI053.xsd','./msxsdtest/identityConstraint',valid),
STResList398 = [STRes397|STResList397],
- ?line {STRes398,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI054.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes398,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI054.xsd','./msxsdtest/identityConstraint',valid),
STResList399 = [STRes398|STResList398],
- ?line {STRes399,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI055.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes399,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI055.xsd','./msxsdtest/identityConstraint',valid),
STResList400 = [STRes399|STResList399],
- ?line {STRes400,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI056.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes400,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI056.xsd','./msxsdtest/identityConstraint',valid),
STResList401 = [STRes400|STResList400],
- ?line {STRes401,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI057.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes401,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI057.xsd','./msxsdtest/identityConstraint',valid),
STResList402 = [STRes401|STResList401],
- ?line {STRes402,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI058.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes402,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI058.xsd','./msxsdtest/identityConstraint',valid),
STResList403 = [STRes402|STResList402],
- ?line {STRes403,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI059.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes403,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI059.xsd','./msxsdtest/identityConstraint',valid),
STResList404 = [STRes403|STResList403],
- ?line {STRes404,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI060.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes404,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI060.xsd','./msxsdtest/identityConstraint',valid),
STResList405 = [STRes404|STResList404],
- ?line {STRes405,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI061.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes405,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI061.xsd','./msxsdtest/identityConstraint',valid),
STResList406 = [STRes405|STResList405],
- ?line {STRes406,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI062.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes406,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI062.xsd','./msxsdtest/identityConstraint',valid),
STResList407 = [STRes406|STResList406],
- ?line {STRes407,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI063.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes407,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI063.xsd','./msxsdtest/identityConstraint',valid),
STResList408 = [STRes407|STResList407],
- ?line {STRes408,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI064.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes408,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI064.xsd','./msxsdtest/identityConstraint',valid),
STResList409 = [STRes408|STResList408],
- ?line {STRes409,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI065.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes409,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI065.xsd','./msxsdtest/identityConstraint',valid),
STResList410 = [STRes409|STResList409],
- ?line {STRes410,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI066.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes410,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI066.xsd','./msxsdtest/identityConstraint',valid),
STResList411 = [STRes410|STResList410],
- ?line {STRes411,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI067.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes411,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI067.xsd','./msxsdtest/identityConstraint',valid),
STResList412 = [STRes411|STResList411],
- ?line {STRes412,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI068.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes412,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI068.xsd','./msxsdtest/identityConstraint',valid),
STResList413 = [STRes412|STResList412],
- ?line {STRes413,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI069.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes413,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI069.xsd','./msxsdtest/identityConstraint',valid),
STResList414 = [STRes413|STResList413],
- ?line {STRes414,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI070.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes414,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI070.xsd','./msxsdtest/identityConstraint',valid),
STResList415 = [STRes414|STResList414],
- ?line {STRes415,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI071.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes415,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI071.xsd','./msxsdtest/identityConstraint',valid),
STResList416 = [STRes415|STResList415],
- ?line {STRes416,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI072.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes416,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI072.xsd','./msxsdtest/identityConstraint',valid),
STResList417 = [STRes416|STResList416],
- ?line {STRes417,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI073.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes417,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI073.xsd','./msxsdtest/identityConstraint',valid),
STResList418 = [STRes417|STResList417],
- ?line {STRes418,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI074.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes418,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI074.xsd','./msxsdtest/identityConstraint',valid),
STResList419 = [STRes418|STResList418],
- ?line {STRes419,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI075.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes419,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI075.xsd','./msxsdtest/identityConstraint',valid),
STResList420 = [STRes419|STResList419],
- ?line {STRes420,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI076.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes420,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI076.xsd','./msxsdtest/identityConstraint',valid),
STResList421 = [STRes420|STResList420],
- ?line {STRes421,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI077.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes421,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI077.xsd','./msxsdtest/identityConstraint',valid),
STResList422 = [STRes421|STResList421],
- ?line {STRes422,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI078.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes422,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI078.xsd','./msxsdtest/identityConstraint',valid),
STResList423 = [STRes422|STResList422],
- ?line {STRes423,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI079.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes423,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI079.xsd','./msxsdtest/identityConstraint',valid),
STResList424 = [STRes423|STResList423],
- ?line {STRes424,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI080.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes424,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI080.xsd','./msxsdtest/identityConstraint',valid),
STResList425 = [STRes424|STResList424],
- ?line {STRes425,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI081.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes425,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI081.xsd','./msxsdtest/identityConstraint',valid),
STResList426 = [STRes425|STResList425],
- ?line {STRes426,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI082.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes426,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI082.xsd','./msxsdtest/identityConstraint',valid),
STResList427 = [STRes426|STResList426],
- ?line {STRes427,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI083.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes427,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI083.xsd','./msxsdtest/identityConstraint',valid),
STResList428 = [STRes427|STResList427],
- ?line {STRes428,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI084.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes428,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI084.xsd','./msxsdtest/identityConstraint',valid),
STResList429 = [STRes428|STResList428],
- ?line {STRes429,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI085.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes429,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI085.xsd','./msxsdtest/identityConstraint',valid),
STResList430 = [STRes429|STResList429],
- ?line {STRes430,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI086.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes430,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI086.xsd','./msxsdtest/identityConstraint',valid),
STResList431 = [STRes430|STResList430],
- ?line {STRes431,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI087.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes431,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI087.xsd','./msxsdtest/identityConstraint',valid),
STResList432 = [STRes431|STResList431],
- ?line {STRes432,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI088.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes432,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI088.xsd','./msxsdtest/identityConstraint',valid),
STResList433 = [STRes432|STResList432],
- ?line {STRes433,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI089.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes433,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI089.xsd','./msxsdtest/identityConstraint',valid),
STResList434 = [STRes433|STResList433],
- ?line {STRes434,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI090.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes434,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI090.xsd','./msxsdtest/identityConstraint',valid),
STResList435 = [STRes434|STResList434],
- ?line {STRes435,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI091.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes435,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI091.xsd','./msxsdtest/identityConstraint',valid),
STResList436 = [STRes435|STResList435],
- ?line {STRes436,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI092.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes436,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI092.xsd','./msxsdtest/identityConstraint',valid),
STResList437 = [STRes436|STResList436],
- ?line {STRes437,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI093.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes437,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI093.xsd','./msxsdtest/identityConstraint',valid),
STResList438 = [STRes437|STResList437],
- ?line {STRes438,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI094.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes438,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI094.xsd','./msxsdtest/identityConstraint',valid),
STResList439 = [STRes438|STResList438],
- ?line {STRes439,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI095.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes439,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI095.xsd','./msxsdtest/identityConstraint',valid),
STResList440 = [STRes439|STResList439],
- ?line {STRes440,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI096.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes440,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI096.xsd','./msxsdtest/identityConstraint',valid),
STResList441 = [STRes440|STResList440],
- ?line {STRes441,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI097.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes441,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI097.xsd','./msxsdtest/identityConstraint',valid),
STResList442 = [STRes441|STResList441],
- ?line {STRes442,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI098.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes442,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI098.xsd','./msxsdtest/identityConstraint',valid),
STResList443 = [STRes442|STResList442],
- ?line {STRes443,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI099.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes443,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI099.xsd','./msxsdtest/identityConstraint',valid),
STResList444 = [STRes443|STResList443],
- ?line {STRes444,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI100.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes444,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI100.xsd','./msxsdtest/identityConstraint',valid),
STResList445 = [STRes444|STResList444],
- ?line {STRes445,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI101.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes445,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI101.xsd','./msxsdtest/identityConstraint',valid),
STResList446 = [STRes445|STResList445],
- ?line {STRes446,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI102.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes446,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI102.xsd','./msxsdtest/identityConstraint',valid),
STResList447 = [STRes446|STResList446],
- ?line {STRes447,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI103.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes447,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI103.xsd','./msxsdtest/identityConstraint',valid),
STResList448 = [STRes447|STResList447],
- ?line {STRes448,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI104.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes448,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI104.xsd','./msxsdtest/identityConstraint',valid),
STResList449 = [STRes448|STResList448],
- ?line {STRes449,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI105.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes449,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI105.xsd','./msxsdtest/identityConstraint',valid),
STResList450 = [STRes449|STResList449],
- ?line {STRes450,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI106.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes450,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI106.xsd','./msxsdtest/identityConstraint',valid),
STResList451 = [STRes450|STResList450],
- ?line {STRes451,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI107.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes451,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI107.xsd','./msxsdtest/identityConstraint',valid),
STResList452 = [STRes451|STResList451],
- ?line {STRes452,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI108.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes452,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI108.xsd','./msxsdtest/identityConstraint',valid),
STResList453 = [STRes452|STResList452],
- ?line {STRes453,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI109.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes453,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI109.xsd','./msxsdtest/identityConstraint',valid),
STResList454 = [STRes453|STResList453],
- ?line {STRes454,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI110.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes454,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI110.xsd','./msxsdtest/identityConstraint',valid),
STResList455 = [STRes454|STResList454],
- ?line {STRes455,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI111.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes455,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI111.xsd','./msxsdtest/identityConstraint',valid),
STResList456 = [STRes455|STResList455],
- ?line {STRes456,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI112.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes456,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI112.xsd','./msxsdtest/identityConstraint',valid),
STResList457 = [STRes456|STResList456],
- ?line {STRes457,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI113.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes457,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI113.xsd','./msxsdtest/identityConstraint',valid),
STResList458 = [STRes457|STResList457],
- ?line {STRes458,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI114.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes458,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI114.xsd','./msxsdtest/identityConstraint',valid),
STResList459 = [STRes458|STResList458],
- ?line {STRes459,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI115.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes459,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI115.xsd','./msxsdtest/identityConstraint',valid),
STResList460 = [STRes459|STResList459],
- ?line {STRes460,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI116.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes460,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI116.xsd','./msxsdtest/identityConstraint',valid),
STResList461 = [STRes460|STResList460],
- ?line {STRes461,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI117.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes461,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI117.xsd','./msxsdtest/identityConstraint',valid),
STResList462 = [STRes461|STResList461],
- ?line {STRes462,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI118.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes462,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI118.xsd','./msxsdtest/identityConstraint',valid),
STResList463 = [STRes462|STResList462],
- ?line {STRes463,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI119.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes463,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI119.xsd','./msxsdtest/identityConstraint',valid),
STResList464 = [STRes463|STResList463],
- ?line {STRes464,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI120.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes464,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI120.xsd','./msxsdtest/identityConstraint',valid),
STResList465 = [STRes464|STResList464],
- ?line {STRes465,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI121.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes465,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI121.xsd','./msxsdtest/identityConstraint',valid),
STResList466 = [STRes465|STResList465],
- ?line {STRes466,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI122.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes466,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI122.xsd','./msxsdtest/identityConstraint',valid),
STResList467 = [STRes466|STResList466],
- ?line {STRes467,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI123.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes467,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI123.xsd','./msxsdtest/identityConstraint',valid),
STResList468 = [STRes467|STResList467],
- ?line {STRes468,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI124.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes468,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI124.xsd','./msxsdtest/identityConstraint',valid),
STResList469 = [STRes468|STResList468],
- ?line {STRes469,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI125.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes469,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI125.xsd','./msxsdtest/identityConstraint',valid),
STResList470 = [STRes469|STResList469],
- ?line {STRes470,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI126.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes470,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI126.xsd','./msxsdtest/identityConstraint',valid),
STResList471 = [STRes470|STResList470],
- ?line {STRes471,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI127.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes471,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI127.xsd','./msxsdtest/identityConstraint',valid),
STResList472 = [STRes471|STResList471],
- ?line {STRes472,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI128.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes472,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI128.xsd','./msxsdtest/identityConstraint',valid),
STResList473 = [STRes472|STResList472],
- ?line {STRes473,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI129.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes473,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI129.xsd','./msxsdtest/identityConstraint',valid),
STResList474 = [STRes473|STResList473],
- ?line {STRes474,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI130.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes474,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI130.xsd','./msxsdtest/identityConstraint',valid),
STResList475 = [STRes474|STResList474],
- ?line {STRes475,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI131.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes475,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI131.xsd','./msxsdtest/identityConstraint',valid),
STResList476 = [STRes475|STResList475],
- ?line {STRes476,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI132.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes476,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI132.xsd','./msxsdtest/identityConstraint',valid),
STResList477 = [STRes476|STResList476],
- ?line {STRes477,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI133.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes477,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI133.xsd','./msxsdtest/identityConstraint',valid),
STResList478 = [STRes477|STResList477],
- ?line {STRes478,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI134.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes478,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI134.xsd','./msxsdtest/identityConstraint',valid),
STResList479 = [STRes478|STResList478],
- ?line {STRes479,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI135.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes479,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI135.xsd','./msxsdtest/identityConstraint',valid),
STResList480 = [STRes479|STResList479],
- ?line {STRes480,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI136.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes480,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI136.xsd','./msxsdtest/identityConstraint',valid),
STResList481 = [STRes480|STResList480],
- ?line {STRes481,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI137.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes481,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI137.xsd','./msxsdtest/identityConstraint',valid),
STResList482 = [STRes481|STResList481],
- ?line {STRes482,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI138.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes482,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI138.xsd','./msxsdtest/identityConstraint',valid),
STResList483 = [STRes482|STResList482],
- ?line {STRes483,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI139.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes483,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI139.xsd','./msxsdtest/identityConstraint',valid),
STResList484 = [STRes483|STResList483],
- ?line {STRes484,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI140.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes484,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI140.xsd','./msxsdtest/identityConstraint',valid),
STResList485 = [STRes484|STResList484],
- ?line {STRes485,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI141.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes485,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI141.xsd','./msxsdtest/identityConstraint',valid),
STResList486 = [STRes485|STResList485],
- ?line {STRes486,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI142.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes486,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI142.xsd','./msxsdtest/identityConstraint',valid),
STResList487 = [STRes486|STResList486],
- ?line {STRes487,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI143.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes487,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI143.xsd','./msxsdtest/identityConstraint',valid),
STResList488 = [STRes487|STResList487],
- ?line {STRes488,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI144.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes488,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI144.xsd','./msxsdtest/identityConstraint',valid),
STResList489 = [STRes488|STResList488],
- ?line {STRes489,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI145.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes489,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI145.xsd','./msxsdtest/identityConstraint',invalid),
STResList490 = [STRes489|STResList489],
- ?line {STRes490,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI146.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes490,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI146.xsd','./msxsdtest/identityConstraint',invalid),
STResList491 = [STRes490|STResList490],
- ?line {STRes491,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI147.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes491,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI147.xsd','./msxsdtest/identityConstraint',invalid),
STResList492 = [STRes491|STResList491],
- ?line {STRes492,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI148.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes492,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI148.xsd','./msxsdtest/identityConstraint',invalid),
STResList493 = [STRes492|STResList492],
- ?line {STRes493,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI149.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes493,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI149.xsd','./msxsdtest/identityConstraint',invalid),
STResList494 = [STRes493|STResList493],
- ?line {STRes494,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI150.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes494,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI150.xsd','./msxsdtest/identityConstraint',invalid),
STResList495 = [STRes494|STResList494],
- ?line {STRes495,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI151.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes495,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI151.xsd','./msxsdtest/identityConstraint',invalid),
STResList496 = [STRes495|STResList495],
- ?line {STRes496,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI152.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes496,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idI152.xsd','./msxsdtest/identityConstraint',invalid),
STResList497 = [STRes496|STResList496],
- ?line {STRes497,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ001.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes497,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ001.xsd','./msxsdtest/identityConstraint',invalid),
STResList498 = [STRes497|STResList497],
- ?line {STRes498,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ002.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes498,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ002.xsd','./msxsdtest/identityConstraint',invalid),
STResList499 = [STRes498|STResList498],
- ?line {STRes499,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ003.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes499,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ003.xsd','./msxsdtest/identityConstraint',invalid),
STResList500 = [STRes499|STResList499],
- ?line {STRes500,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ004.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes500,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ004.xsd','./msxsdtest/identityConstraint',valid),
STResList501 = [STRes500|STResList500],
- ?line {STRes501,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ005.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes501,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ005.xsd','./msxsdtest/identityConstraint',invalid),
STResList502 = [STRes501|STResList501],
- ?line {STRes502,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ006.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes502,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ006.xsd','./msxsdtest/identityConstraint',invalid),
STResList503 = [STRes502|STResList502],
- ?line {STRes503,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ007.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes503,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ007.xsd','./msxsdtest/identityConstraint',invalid),
STResList504 = [STRes503|STResList503],
- ?line {STRes504,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ008.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes504,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ008.xsd','./msxsdtest/identityConstraint',invalid),
STResList505 = [STRes504|STResList504],
- ?line {STRes505,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes505,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ009.xsd','./msxsdtest/identityConstraint',valid),
STResList506 = [STRes505|STResList505],
- ?line {STRes506,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes506,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ010.xsd','./msxsdtest/identityConstraint',valid),
STResList507 = [STRes506|STResList506],
- ?line {STRes507,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ011.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes507,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ011.xsd','./msxsdtest/identityConstraint',invalid),
STResList508 = [STRes507|STResList507],
- ?line {STRes508,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes508,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ012.xsd','./msxsdtest/identityConstraint',valid),
STResList509 = [STRes508|STResList508],
- ?line {STRes509,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes509,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ013.xsd','./msxsdtest/identityConstraint',valid),
STResList510 = [STRes509|STResList509],
- ?line {STRes510,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ014.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes510,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ014.xsd','./msxsdtest/identityConstraint',valid),
STResList511 = [STRes510|STResList510],
- ?line {STRes511,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ015.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes511,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ015.xsd','./msxsdtest/identityConstraint',invalid),
STResList512 = [STRes511|STResList511],
- ?line {STRes512,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ016.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes512,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ016.xsd','./msxsdtest/identityConstraint',invalid),
STResList513 = [STRes512|STResList512],
- ?line {STRes513,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ017.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes513,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ017.xsd','./msxsdtest/identityConstraint',invalid),
STResList514 = [STRes513|STResList513],
- ?line {STRes514,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ018.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes514,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ018.xsd','./msxsdtest/identityConstraint',valid),
STResList515 = [STRes514|STResList514],
- ?line {STRes515,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ019.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes515,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ019.xsd','./msxsdtest/identityConstraint',valid),
STResList516 = [STRes515|STResList515],
- ?line {STRes516,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ020.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes516,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ020.xsd','./msxsdtest/identityConstraint',valid),
STResList517 = [STRes516|STResList516],
- ?line {STRes517,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ021.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes517,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ021.xsd','./msxsdtest/identityConstraint',valid),
STResList518 = [STRes517|STResList517],
- ?line {STRes518,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ022.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes518,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ022.xsd','./msxsdtest/identityConstraint',valid),
STResList519 = [STRes518|STResList518],
- ?line {STRes519,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ023.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes519,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ023.xsd','./msxsdtest/identityConstraint',valid),
STResList520 = [STRes519|STResList519],
- ?line {STRes520,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ024.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes520,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ024.xsd','./msxsdtest/identityConstraint',valid),
STResList521 = [STRes520|STResList520],
- ?line {STRes521,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ025.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes521,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ025.xsd','./msxsdtest/identityConstraint',invalid),
STResList522 = [STRes521|STResList521],
- ?line {STRes522,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ026.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes522,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ026.xsd','./msxsdtest/identityConstraint',invalid),
STResList523 = [STRes522|STResList522],
- ?line {STRes523,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ027.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes523,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ027.xsd','./msxsdtest/identityConstraint',valid),
STResList524 = [STRes523|STResList523],
- ?line {STRes524,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ028.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes524,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ028.xsd','./msxsdtest/identityConstraint',valid),
STResList525 = [STRes524|STResList524],
- ?line {STRes525,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ029.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes525,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ029.xsd','./msxsdtest/identityConstraint',valid),
STResList526 = [STRes525|STResList525],
- ?line {STRes526,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ030.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes526,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ030.xsd','./msxsdtest/identityConstraint',invalid),
STResList527 = [STRes526|STResList526],
- ?line {STRes527,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ031.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes527,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ031.xsd','./msxsdtest/identityConstraint',valid),
STResList528 = [STRes527|STResList527],
- ?line {STRes528,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ032.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes528,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ032.xsd','./msxsdtest/identityConstraint',invalid),
STResList529 = [STRes528|STResList528],
- ?line {STRes529,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ033.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes529,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ033.xsd','./msxsdtest/identityConstraint',valid),
STResList530 = [STRes529|STResList529],
- ?line {STRes530,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ034.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes530,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ034.xsd','./msxsdtest/identityConstraint',valid),
STResList531 = [STRes530|STResList530],
- ?line {STRes531,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ035.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes531,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ035.xsd','./msxsdtest/identityConstraint',valid),
STResList532 = [STRes531|STResList531],
- ?line {STRes532,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ036.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes532,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ036.xsd','./msxsdtest/identityConstraint',invalid),
STResList533 = [STRes532|STResList532],
- ?line {STRes533,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ037.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes533,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ037.xsd','./msxsdtest/identityConstraint',valid),
STResList534 = [STRes533|STResList533],
- ?line {STRes534,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ038.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes534,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ038.xsd','./msxsdtest/identityConstraint',valid),
STResList535 = [STRes534|STResList534],
- ?line {STRes535,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ039.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes535,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ039.xsd','./msxsdtest/identityConstraint',valid),
STResList536 = [STRes535|STResList535],
- ?line {STRes536,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ040.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes536,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ040.xsd','./msxsdtest/identityConstraint',valid),
STResList537 = [STRes536|STResList536],
- ?line {STRes537,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ041.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes537,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ041.xsd','./msxsdtest/identityConstraint',valid),
STResList538 = [STRes537|STResList537],
- ?line {STRes538,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ042.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes538,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ042.xsd','./msxsdtest/identityConstraint',valid),
STResList539 = [STRes538|STResList538],
- ?line {STRes539,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ043.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes539,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ043.xsd','./msxsdtest/identityConstraint',valid),
STResList540 = [STRes539|STResList539],
- ?line {STRes540,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ044.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes540,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ044.xsd','./msxsdtest/identityConstraint',valid),
STResList541 = [STRes540|STResList540],
- ?line {STRes541,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ045.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes541,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ045.xsd','./msxsdtest/identityConstraint',valid),
STResList542 = [STRes541|STResList541],
- ?line {STRes542,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ046.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes542,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ046.xsd','./msxsdtest/identityConstraint',valid),
STResList543 = [STRes542|STResList542],
- ?line {STRes543,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ047.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes543,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ047.xsd','./msxsdtest/identityConstraint',valid),
STResList544 = [STRes543|STResList543],
- ?line {STRes544,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ048.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes544,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ048.xsd','./msxsdtest/identityConstraint',valid),
STResList545 = [STRes544|STResList544],
- ?line {STRes545,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ049.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes545,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ049.xsd','./msxsdtest/identityConstraint',valid),
STResList546 = [STRes545|STResList545],
- ?line {STRes546,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ050.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes546,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ050.xsd','./msxsdtest/identityConstraint',valid),
STResList547 = [STRes546|STResList546],
- ?line {STRes547,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ051.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes547,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ051.xsd','./msxsdtest/identityConstraint',valid),
STResList548 = [STRes547|STResList547],
- ?line {STRes548,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ052.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes548,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ052.xsd','./msxsdtest/identityConstraint',invalid),
STResList549 = [STRes548|STResList548],
- ?line {STRes549,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ053.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes549,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ053.xsd','./msxsdtest/identityConstraint',valid),
STResList550 = [STRes549|STResList549],
- ?line {STRes550,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ054.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes550,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ054.xsd','./msxsdtest/identityConstraint',valid),
STResList551 = [STRes550|STResList550],
- ?line {STRes551,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ055.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes551,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ055.xsd','./msxsdtest/identityConstraint',valid),
STResList552 = [STRes551|STResList551],
- ?line {STRes552,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ056.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes552,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ056.xsd','./msxsdtest/identityConstraint',invalid),
STResList553 = [STRes552|STResList552],
- ?line {STRes553,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ057.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes553,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ057.xsd','./msxsdtest/identityConstraint',valid),
STResList554 = [STRes553|STResList553],
- ?line {STRes554,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ058.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes554,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ058.xsd','./msxsdtest/identityConstraint',valid),
STResList555 = [STRes554|STResList554],
- ?line {STRes555,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ059.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes555,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ059.xsd','./msxsdtest/identityConstraint',valid),
STResList556 = [STRes555|STResList555],
- ?line {STRes556,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ060.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes556,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ060.xsd','./msxsdtest/identityConstraint',valid),
STResList557 = [STRes556|STResList556],
- ?line {STRes557,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ061.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes557,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ061.xsd','./msxsdtest/identityConstraint',valid),
STResList558 = [STRes557|STResList557],
- ?line {STRes558,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ062.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes558,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ062.xsd','./msxsdtest/identityConstraint',valid),
STResList559 = [STRes558|STResList558],
- ?line {STRes559,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ063.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes559,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ063.xsd','./msxsdtest/identityConstraint',valid),
STResList560 = [STRes559|STResList559],
- ?line {STRes560,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ064.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes560,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ064.xsd','./msxsdtest/identityConstraint',valid),
STResList561 = [STRes560|STResList560],
- ?line {STRes561,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ065.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes561,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ065.xsd','./msxsdtest/identityConstraint',valid),
STResList562 = [STRes561|STResList561],
- ?line {STRes562,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ066.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes562,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ066.xsd','./msxsdtest/identityConstraint',valid),
STResList563 = [STRes562|STResList562],
- ?line {STRes563,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ067.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes563,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ067.xsd','./msxsdtest/identityConstraint',valid),
STResList564 = [STRes563|STResList563],
- ?line {STRes564,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ068.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes564,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ068.xsd','./msxsdtest/identityConstraint',valid),
STResList565 = [STRes564|STResList564],
- ?line {STRes565,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ069.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes565,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ069.xsd','./msxsdtest/identityConstraint',valid),
STResList566 = [STRes565|STResList565],
- ?line {STRes566,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ070.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes566,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ070.xsd','./msxsdtest/identityConstraint',valid),
STResList567 = [STRes566|STResList566],
- ?line {STRes567,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ071.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes567,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ071.xsd','./msxsdtest/identityConstraint',valid),
STResList568 = [STRes567|STResList567],
- ?line {STRes568,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ072.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes568,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ072.xsd','./msxsdtest/identityConstraint',valid),
STResList569 = [STRes568|STResList568],
- ?line {STRes569,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ073.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes569,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ073.xsd','./msxsdtest/identityConstraint',valid),
STResList570 = [STRes569|STResList569],
- ?line {STRes570,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ074.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes570,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ074.xsd','./msxsdtest/identityConstraint',valid),
STResList571 = [STRes570|STResList570],
- ?line {STRes571,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ075.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes571,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ075.xsd','./msxsdtest/identityConstraint',valid),
STResList572 = [STRes571|STResList571],
- ?line {STRes572,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ076.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes572,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ076.xsd','./msxsdtest/identityConstraint',valid),
STResList573 = [STRes572|STResList572],
- ?line {STRes573,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ077.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes573,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ077.xsd','./msxsdtest/identityConstraint',valid),
STResList574 = [STRes573|STResList573],
- ?line {STRes574,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ078.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes574,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ078.xsd','./msxsdtest/identityConstraint',valid),
STResList575 = [STRes574|STResList574],
- ?line {STRes575,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ079.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes575,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ079.xsd','./msxsdtest/identityConstraint',valid),
STResList576 = [STRes575|STResList575],
- ?line {STRes576,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ080.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes576,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ080.xsd','./msxsdtest/identityConstraint',valid),
STResList577 = [STRes576|STResList576],
- ?line {STRes577,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ081.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes577,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ081.xsd','./msxsdtest/identityConstraint',valid),
STResList578 = [STRes577|STResList577],
- ?line {STRes578,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ082.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes578,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ082.xsd','./msxsdtest/identityConstraint',valid),
STResList579 = [STRes578|STResList578],
- ?line {STRes579,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ083.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes579,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ083.xsd','./msxsdtest/identityConstraint',valid),
STResList580 = [STRes579|STResList579],
- ?line {STRes580,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ084.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes580,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ084.xsd','./msxsdtest/identityConstraint',valid),
STResList581 = [STRes580|STResList580],
- ?line {STRes581,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ085.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes581,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ085.xsd','./msxsdtest/identityConstraint',valid),
STResList582 = [STRes581|STResList581],
- ?line {STRes582,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ086.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes582,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ086.xsd','./msxsdtest/identityConstraint',valid),
STResList583 = [STRes582|STResList582],
- ?line {STRes583,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ087.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes583,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ087.xsd','./msxsdtest/identityConstraint',valid),
STResList584 = [STRes583|STResList583],
- ?line {STRes584,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ088.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes584,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ088.xsd','./msxsdtest/identityConstraint',valid),
STResList585 = [STRes584|STResList584],
- ?line {STRes585,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ089.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes585,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ089.xsd','./msxsdtest/identityConstraint',valid),
STResList586 = [STRes585|STResList585],
- ?line {STRes586,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ090.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes586,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ090.xsd','./msxsdtest/identityConstraint',valid),
STResList587 = [STRes586|STResList586],
- ?line {STRes587,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ091.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes587,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ091.xsd','./msxsdtest/identityConstraint',valid),
STResList588 = [STRes587|STResList587],
- ?line {STRes588,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ092.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes588,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ092.xsd','./msxsdtest/identityConstraint',valid),
STResList589 = [STRes588|STResList588],
- ?line {STRes589,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ093.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes589,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ093.xsd','./msxsdtest/identityConstraint',valid),
STResList590 = [STRes589|STResList589],
- ?line {STRes590,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ094.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes590,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ094.xsd','./msxsdtest/identityConstraint',valid),
STResList591 = [STRes590|STResList590],
- ?line {STRes591,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ095.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes591,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ095.xsd','./msxsdtest/identityConstraint',valid),
STResList592 = [STRes591|STResList591],
- ?line {STRes592,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ096.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes592,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ096.xsd','./msxsdtest/identityConstraint',valid),
STResList593 = [STRes592|STResList592],
- ?line {STRes593,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ097.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes593,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ097.xsd','./msxsdtest/identityConstraint',valid),
STResList594 = [STRes593|STResList593],
- ?line {STRes594,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ098.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes594,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ098.xsd','./msxsdtest/identityConstraint',valid),
STResList595 = [STRes594|STResList594],
- ?line {STRes595,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ099.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes595,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ099.xsd','./msxsdtest/identityConstraint',valid),
STResList596 = [STRes595|STResList595],
- ?line {STRes596,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ100.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes596,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ100.xsd','./msxsdtest/identityConstraint',valid),
STResList597 = [STRes596|STResList596],
- ?line {STRes597,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ101.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes597,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ101.xsd','./msxsdtest/identityConstraint',valid),
STResList598 = [STRes597|STResList597],
- ?line {STRes598,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ102.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes598,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ102.xsd','./msxsdtest/identityConstraint',valid),
STResList599 = [STRes598|STResList598],
- ?line {STRes599,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ103.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes599,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ103.xsd','./msxsdtest/identityConstraint',valid),
STResList600 = [STRes599|STResList599],
- ?line {STRes600,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ104.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes600,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ104.xsd','./msxsdtest/identityConstraint',valid),
STResList601 = [STRes600|STResList600],
- ?line {STRes601,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ105.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes601,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ105.xsd','./msxsdtest/identityConstraint',valid),
STResList602 = [STRes601|STResList601],
- ?line {STRes602,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ106.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes602,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ106.xsd','./msxsdtest/identityConstraint',valid),
STResList603 = [STRes602|STResList602],
- ?line {STRes603,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ107.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes603,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ107.xsd','./msxsdtest/identityConstraint',valid),
STResList604 = [STRes603|STResList603],
- ?line {STRes604,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ108.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes604,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ108.xsd','./msxsdtest/identityConstraint',valid),
STResList605 = [STRes604|STResList604],
- ?line {STRes605,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ109.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes605,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ109.xsd','./msxsdtest/identityConstraint',valid),
STResList606 = [STRes605|STResList605],
- ?line {STRes606,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ110.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes606,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ110.xsd','./msxsdtest/identityConstraint',valid),
STResList607 = [STRes606|STResList606],
- ?line {STRes607,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ111.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes607,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ111.xsd','./msxsdtest/identityConstraint',valid),
STResList608 = [STRes607|STResList607],
- ?line {STRes608,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ112.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes608,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ112.xsd','./msxsdtest/identityConstraint',valid),
STResList609 = [STRes608|STResList608],
- ?line {STRes609,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ113.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes609,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ113.xsd','./msxsdtest/identityConstraint',valid),
STResList610 = [STRes609|STResList609],
- ?line {STRes610,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ114.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes610,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ114.xsd','./msxsdtest/identityConstraint',valid),
STResList611 = [STRes610|STResList610],
- ?line {STRes611,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ115.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes611,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ115.xsd','./msxsdtest/identityConstraint',valid),
STResList612 = [STRes611|STResList611],
- ?line {STRes612,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ116.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes612,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ116.xsd','./msxsdtest/identityConstraint',valid),
STResList613 = [STRes612|STResList612],
- ?line {STRes613,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ117.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes613,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ117.xsd','./msxsdtest/identityConstraint',valid),
STResList614 = [STRes613|STResList613],
- ?line {STRes614,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ118.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes614,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ118.xsd','./msxsdtest/identityConstraint',valid),
STResList615 = [STRes614|STResList614],
- ?line {STRes615,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ119.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes615,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ119.xsd','./msxsdtest/identityConstraint',valid),
STResList616 = [STRes615|STResList615],
- ?line {STRes616,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ120.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes616,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ120.xsd','./msxsdtest/identityConstraint',valid),
STResList617 = [STRes616|STResList616],
- ?line {STRes617,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ121.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes617,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ121.xsd','./msxsdtest/identityConstraint',valid),
STResList618 = [STRes617|STResList617],
- ?line {STRes618,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ122.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes618,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ122.xsd','./msxsdtest/identityConstraint',valid),
STResList619 = [STRes618|STResList618],
- ?line {STRes619,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ123.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes619,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ123.xsd','./msxsdtest/identityConstraint',valid),
STResList620 = [STRes619|STResList619],
- ?line {STRes620,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ124.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes620,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ124.xsd','./msxsdtest/identityConstraint',valid),
STResList621 = [STRes620|STResList620],
- ?line {STRes621,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ125.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes621,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ125.xsd','./msxsdtest/identityConstraint',valid),
STResList622 = [STRes621|STResList621],
- ?line {STRes622,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ126.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes622,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ126.xsd','./msxsdtest/identityConstraint',valid),
STResList623 = [STRes622|STResList622],
- ?line {STRes623,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ127.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes623,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ127.xsd','./msxsdtest/identityConstraint',valid),
STResList624 = [STRes623|STResList623],
- ?line {STRes624,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ128.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes624,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ128.xsd','./msxsdtest/identityConstraint',valid),
STResList625 = [STRes624|STResList624],
- ?line {STRes625,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ129.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes625,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ129.xsd','./msxsdtest/identityConstraint',valid),
STResList626 = [STRes625|STResList625],
- ?line {STRes626,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ130.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes626,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ130.xsd','./msxsdtest/identityConstraint',valid),
STResList627 = [STRes626|STResList626],
- ?line {STRes627,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ131.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes627,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ131.xsd','./msxsdtest/identityConstraint',valid),
STResList628 = [STRes627|STResList627],
- ?line {STRes628,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ132.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes628,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ132.xsd','./msxsdtest/identityConstraint',valid),
STResList629 = [STRes628|STResList628],
- ?line {STRes629,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ133.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes629,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ133.xsd','./msxsdtest/identityConstraint',valid),
STResList630 = [STRes629|STResList629],
- ?line {STRes630,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ134.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes630,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ134.xsd','./msxsdtest/identityConstraint',valid),
STResList631 = [STRes630|STResList630],
- ?line {STRes631,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ135.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes631,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ135.xsd','./msxsdtest/identityConstraint',valid),
STResList632 = [STRes631|STResList631],
- ?line {STRes632,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ136.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes632,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ136.xsd','./msxsdtest/identityConstraint',valid),
STResList633 = [STRes632|STResList632],
- ?line {STRes633,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ137.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes633,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ137.xsd','./msxsdtest/identityConstraint',valid),
STResList634 = [STRes633|STResList633],
- ?line {STRes634,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ138.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes634,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ138.xsd','./msxsdtest/identityConstraint',valid),
STResList635 = [STRes634|STResList634],
- ?line {STRes635,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ139.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes635,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ139.xsd','./msxsdtest/identityConstraint',valid),
STResList636 = [STRes635|STResList635],
- ?line {STRes636,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ140.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes636,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ140.xsd','./msxsdtest/identityConstraint',valid),
STResList637 = [STRes636|STResList636],
- ?line {STRes637,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ141.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes637,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ141.xsd','./msxsdtest/identityConstraint',valid),
STResList638 = [STRes637|STResList637],
- ?line {STRes638,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ142.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes638,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ142.xsd','./msxsdtest/identityConstraint',valid),
STResList639 = [STRes638|STResList638],
- ?line {STRes639,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ143.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes639,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ143.xsd','./msxsdtest/identityConstraint',valid),
STResList640 = [STRes639|STResList639],
- ?line {STRes640,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ144.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes640,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ144.xsd','./msxsdtest/identityConstraint',valid),
STResList641 = [STRes640|STResList640],
- ?line {STRes641,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ145.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes641,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ145.xsd','./msxsdtest/identityConstraint',valid),
STResList642 = [STRes641|STResList641],
- ?line {STRes642,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ146.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes642,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ146.xsd','./msxsdtest/identityConstraint',valid),
STResList643 = [STRes642|STResList642],
- ?line {STRes643,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ147.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes643,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ147.xsd','./msxsdtest/identityConstraint',valid),
STResList644 = [STRes643|STResList643],
- ?line {STRes644,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ148.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes644,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ148.xsd','./msxsdtest/identityConstraint',valid),
STResList645 = [STRes644|STResList644],
- ?line {STRes645,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ149.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes645,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ149.xsd','./msxsdtest/identityConstraint',valid),
STResList646 = [STRes645|STResList645],
- ?line {STRes646,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ150.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes646,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ150.xsd','./msxsdtest/identityConstraint',valid),
STResList647 = [STRes646|STResList646],
- ?line {STRes647,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ151.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes647,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ151.xsd','./msxsdtest/identityConstraint',valid),
STResList648 = [STRes647|STResList647],
- ?line {STRes648,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ152.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes648,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ152.xsd','./msxsdtest/identityConstraint',valid),
STResList649 = [STRes648|STResList648],
- ?line {STRes649,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ153.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes649,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ153.xsd','./msxsdtest/identityConstraint',valid),
STResList650 = [STRes649|STResList649],
- ?line {STRes650,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ154.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes650,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ154.xsd','./msxsdtest/identityConstraint',valid),
STResList651 = [STRes650|STResList650],
- ?line {STRes651,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ155.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes651,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ155.xsd','./msxsdtest/identityConstraint',valid),
STResList652 = [STRes651|STResList651],
- ?line {STRes652,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ156.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes652,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ156.xsd','./msxsdtest/identityConstraint',valid),
STResList653 = [STRes652|STResList652],
- ?line {STRes653,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ157.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes653,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ157.xsd','./msxsdtest/identityConstraint',valid),
STResList654 = [STRes653|STResList653],
- ?line {STRes654,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ158.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes654,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ158.xsd','./msxsdtest/identityConstraint',valid),
STResList655 = [STRes654|STResList654],
- ?line {STRes655,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ159.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes655,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ159.xsd','./msxsdtest/identityConstraint',valid),
STResList656 = [STRes655|STResList655],
- ?line {STRes656,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ160.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes656,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ160.xsd','./msxsdtest/identityConstraint',valid),
STResList657 = [STRes656|STResList656],
- ?line {STRes657,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ161.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes657,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ161.xsd','./msxsdtest/identityConstraint',valid),
STResList658 = [STRes657|STResList657],
- ?line {STRes658,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ162.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes658,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ162.xsd','./msxsdtest/identityConstraint',valid),
STResList659 = [STRes658|STResList658],
- ?line {STRes659,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ163.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes659,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ163.xsd','./msxsdtest/identityConstraint',valid),
STResList660 = [STRes659|STResList659],
- ?line {STRes660,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ164.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes660,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ164.xsd','./msxsdtest/identityConstraint',valid),
STResList661 = [STRes660|STResList660],
- ?line {STRes661,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ165.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes661,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ165.xsd','./msxsdtest/identityConstraint',valid),
STResList662 = [STRes661|STResList661],
- ?line {STRes662,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ166.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes662,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ166.xsd','./msxsdtest/identityConstraint',valid),
STResList663 = [STRes662|STResList662],
- ?line {STRes663,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ167.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes663,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ167.xsd','./msxsdtest/identityConstraint',valid),
STResList664 = [STRes663|STResList663],
- ?line {STRes664,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ168.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes664,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ168.xsd','./msxsdtest/identityConstraint',valid),
STResList665 = [STRes664|STResList664],
- ?line {STRes665,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ169.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes665,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ169.xsd','./msxsdtest/identityConstraint',valid),
STResList666 = [STRes665|STResList665],
- ?line {STRes666,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ170.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes666,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ170.xsd','./msxsdtest/identityConstraint',valid),
STResList667 = [STRes666|STResList666],
- ?line {STRes667,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ171.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes667,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ171.xsd','./msxsdtest/identityConstraint',valid),
STResList668 = [STRes667|STResList667],
- ?line {STRes668,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ172.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes668,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ172.xsd','./msxsdtest/identityConstraint',valid),
STResList669 = [STRes668|STResList668],
- ?line {STRes669,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ173.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes669,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ173.xsd','./msxsdtest/identityConstraint',valid),
STResList670 = [STRes669|STResList669],
- ?line {STRes670,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ174.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes670,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ174.xsd','./msxsdtest/identityConstraint',valid),
STResList671 = [STRes670|STResList670],
- ?line {STRes671,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ175.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes671,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ175.xsd','./msxsdtest/identityConstraint',valid),
STResList672 = [STRes671|STResList671],
- ?line {STRes672,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ176.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes672,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ176.xsd','./msxsdtest/identityConstraint',valid),
STResList673 = [STRes672|STResList672],
- ?line {STRes673,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ177.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes673,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ177.xsd','./msxsdtest/identityConstraint',valid),
STResList674 = [STRes673|STResList673],
- ?line {STRes674,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ178.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes674,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ178.xsd','./msxsdtest/identityConstraint',valid),
STResList675 = [STRes674|STResList674],
- ?line {STRes675,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ179.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes675,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ179.xsd','./msxsdtest/identityConstraint',valid),
STResList676 = [STRes675|STResList675],
- ?line {STRes676,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ180.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes676,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ180.xsd','./msxsdtest/identityConstraint',valid),
STResList677 = [STRes676|STResList676],
- ?line {STRes677,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ181.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes677,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ181.xsd','./msxsdtest/identityConstraint',valid),
STResList678 = [STRes677|STResList677],
- ?line {STRes678,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ182.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes678,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ182.xsd','./msxsdtest/identityConstraint',valid),
STResList679 = [STRes678|STResList678],
- ?line {STRes679,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ183.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes679,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ183.xsd','./msxsdtest/identityConstraint',valid),
STResList680 = [STRes679|STResList679],
- ?line {STRes680,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ184.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes680,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ184.xsd','./msxsdtest/identityConstraint',valid),
STResList681 = [STRes680|STResList680],
- ?line {STRes681,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ185.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes681,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ185.xsd','./msxsdtest/identityConstraint',valid),
STResList682 = [STRes681|STResList681],
- ?line {STRes682,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ186.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes682,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ186.xsd','./msxsdtest/identityConstraint',valid),
STResList683 = [STRes682|STResList682],
- ?line {STRes683,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ187.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes683,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ187.xsd','./msxsdtest/identityConstraint',valid),
STResList684 = [STRes683|STResList683],
- ?line {STRes684,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ188.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes684,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ188.xsd','./msxsdtest/identityConstraint',valid),
STResList685 = [STRes684|STResList684],
- ?line {STRes685,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ189.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes685,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ189.xsd','./msxsdtest/identityConstraint',valid),
STResList686 = [STRes685|STResList685],
- ?line {STRes686,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ190.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes686,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ190.xsd','./msxsdtest/identityConstraint',valid),
STResList687 = [STRes686|STResList686],
- ?line {STRes687,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ191.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes687,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ191.xsd','./msxsdtest/identityConstraint',valid),
STResList688 = [STRes687|STResList687],
- ?line {STRes688,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ192.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes688,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ192.xsd','./msxsdtest/identityConstraint',valid),
STResList689 = [STRes688|STResList688],
- ?line {STRes689,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ193.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes689,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ193.xsd','./msxsdtest/identityConstraint',valid),
STResList690 = [STRes689|STResList689],
- ?line {STRes690,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ194.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes690,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ194.xsd','./msxsdtest/identityConstraint',valid),
STResList691 = [STRes690|STResList690],
- ?line {STRes691,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ195.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes691,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ195.xsd','./msxsdtest/identityConstraint',valid),
STResList692 = [STRes691|STResList691],
- ?line {STRes692,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ196.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes692,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ196.xsd','./msxsdtest/identityConstraint',valid),
STResList693 = [STRes692|STResList692],
- ?line {STRes693,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ197.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes693,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ197.xsd','./msxsdtest/identityConstraint',valid),
STResList694 = [STRes693|STResList693],
- ?line {STRes694,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ198.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes694,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ198.xsd','./msxsdtest/identityConstraint',valid),
STResList695 = [STRes694|STResList694],
- ?line {STRes695,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ199.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes695,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ199.xsd','./msxsdtest/identityConstraint',valid),
STResList696 = [STRes695|STResList695],
- ?line {STRes696,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ200.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes696,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ200.xsd','./msxsdtest/identityConstraint',valid),
STResList697 = [STRes696|STResList696],
- ?line {STRes697,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ201.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes697,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ201.xsd','./msxsdtest/identityConstraint',valid),
STResList698 = [STRes697|STResList697],
- ?line {STRes698,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ202.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes698,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ202.xsd','./msxsdtest/identityConstraint',valid),
STResList699 = [STRes698|STResList698],
- ?line {STRes699,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ203.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes699,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ203.xsd','./msxsdtest/identityConstraint',valid),
STResList700 = [STRes699|STResList699],
- ?line {STRes700,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ204.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes700,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ204.xsd','./msxsdtest/identityConstraint',valid),
STResList701 = [STRes700|STResList700],
- ?line {STRes701,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ205.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes701,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ205.xsd','./msxsdtest/identityConstraint',invalid),
STResList702 = [STRes701|STResList701],
- ?line {STRes702,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ206.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes702,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ206.xsd','./msxsdtest/identityConstraint',invalid),
STResList703 = [STRes702|STResList702],
- ?line {STRes703,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ207.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes703,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ207.xsd','./msxsdtest/identityConstraint',invalid),
STResList704 = [STRes703|STResList703],
- ?line {STRes704,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ208.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes704,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ208.xsd','./msxsdtest/identityConstraint',invalid),
STResList705 = [STRes704|STResList704],
- ?line {STRes705,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ209.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes705,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ209.xsd','./msxsdtest/identityConstraint',invalid),
STResList706 = [STRes705|STResList705],
- ?line {STRes706,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ210.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes706,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idJ210.xsd','./msxsdtest/identityConstraint',invalid),
STResList707 = [STRes706|STResList706],
- ?line {STRes707,S707} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes707,S707} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK001.xsd','./msxsdtest/identityConstraint',valid),
STResList708 = [STRes707|STResList707],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK001.xml','./msxsdtest/identityConstraint',valid,S707),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK001.xml','./msxsdtest/identityConstraint',valid,S707),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes708,S708} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK002.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes708,S708} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK002.xsd','./msxsdtest/identityConstraint',valid),
STResList709 = [STRes708|STResList708],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK002.xml','./msxsdtest/identityConstraint',valid,S708),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK002.xml','./msxsdtest/identityConstraint',valid,S708),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes709,S709} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK003.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes709,S709} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK003.xsd','./msxsdtest/identityConstraint',valid),
STResList710 = [STRes709|STResList709],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK003.xml','./msxsdtest/identityConstraint',invalid,S709),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK003.xml','./msxsdtest/identityConstraint',invalid,S709),
ITResList96 = [ITRes95|ITResList95],
- ?line {STRes710,S710} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK004.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes710,S710} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK004.xsd','./msxsdtest/identityConstraint',valid),
STResList711 = [STRes710|STResList710],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK004.xml','./msxsdtest/identityConstraint',valid,S710),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK004.xml','./msxsdtest/identityConstraint',valid,S710),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes711,S711} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK005.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes711,S711} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK005.xsd','./msxsdtest/identityConstraint',valid),
STResList712 = [STRes711|STResList711],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK005.xml','./msxsdtest/identityConstraint',valid,S711),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK005.xml','./msxsdtest/identityConstraint',valid,S711),
ITResList98 = [ITRes97|ITResList97],
- ?line {STRes712,S712} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK006.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes712,S712} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK006.xsd','./msxsdtest/identityConstraint',valid),
STResList713 = [STRes712|STResList712],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK006.xml','./msxsdtest/identityConstraint',valid,S712),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK006.xml','./msxsdtest/identityConstraint',valid,S712),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes713,S713} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK007.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes713,S713} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK007.xsd','./msxsdtest/identityConstraint',valid),
STResList714 = [STRes713|STResList713],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK007.xml','./msxsdtest/identityConstraint',valid,S713),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK007.xml','./msxsdtest/identityConstraint',valid,S713),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes714,S714} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes714,S714} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK008.xsd','./msxsdtest/identityConstraint',valid),
STResList715 = [STRes714|STResList714],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK008.xml','./msxsdtest/identityConstraint',valid,S714),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK008.xml','./msxsdtest/identityConstraint',valid,S714),
ITResList101 = [ITRes100|ITResList100],
- ?line {STRes715,S715} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes715,S715} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK009.xsd','./msxsdtest/identityConstraint',valid),
STResList716 = [STRes715|STResList715],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK009.xml','./msxsdtest/identityConstraint',valid,S715),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK009.xml','./msxsdtest/identityConstraint',valid,S715),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes716,S716} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes716,S716} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK010.xsd','./msxsdtest/identityConstraint',valid),
STResList717 = [STRes716|STResList716],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK010.xml','./msxsdtest/identityConstraint',valid,S716),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK010.xml','./msxsdtest/identityConstraint',valid,S716),
ITResList103 = [ITRes102|ITResList102],
- ?line {STRes717,S717} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK011.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes717,S717} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK011.xsd','./msxsdtest/identityConstraint',valid),
STResList718 = [STRes717|STResList717],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK011.xml','./msxsdtest/identityConstraint',valid,S717),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK011.xml','./msxsdtest/identityConstraint',valid,S717),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes718,S718} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes718,S718} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK012.xsd','./msxsdtest/identityConstraint',valid),
STResList719 = [STRes718|STResList718],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK012.xml','./msxsdtest/identityConstraint',invalid,S718),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK012.xml','./msxsdtest/identityConstraint',invalid,S718),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes719,S719} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes719,S719} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK013.xsd','./msxsdtest/identityConstraint',valid),
STResList720 = [STRes719|STResList719],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK013.xml','./msxsdtest/identityConstraint',valid,S719),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK013.xml','./msxsdtest/identityConstraint',valid,S719),
ITResList106 = [ITRes105|ITResList105],
- ?line {STRes720,S720} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK014.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes720,S720} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK014.xsd','./msxsdtest/identityConstraint',valid),
STResList721 = [STRes720|STResList720],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK014.xml','./msxsdtest/identityConstraint',valid,S720),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK014.xml','./msxsdtest/identityConstraint',valid,S720),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes721,S721} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes721,S721} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK015.xsd','./msxsdtest/identityConstraint',valid),
STResList722 = [STRes721|STResList721],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK015.xml','./msxsdtest/identityConstraint',valid,S721),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK015.xml','./msxsdtest/identityConstraint',valid,S721),
ITResList108 = [ITRes107|ITResList107],
- ?line {STRes722,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK016.xsd','./msxsdtest/identityConstraint',invalid),
+ {STRes722,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK016.xsd','./msxsdtest/identityConstraint',invalid),
STResList723 = [STRes722|STResList722],
- ?line {STRes723,S723} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK017.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes723,S723} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idK017.xsd','./msxsdtest/identityConstraint',valid),
STResList724 = [STRes723|STResList723],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK017.xml','./msxsdtest/identityConstraint',valid,S723),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idK017.xml','./msxsdtest/identityConstraint',valid,S723),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes724,S724} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes724,S724} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL001.xsd','./msxsdtest/identityConstraint',valid),
STResList725 = [STRes724|STResList724],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL001.xml','./msxsdtest/identityConstraint',valid,S724),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL001.xml','./msxsdtest/identityConstraint',valid,S724),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes725,S725} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL002.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes725,S725} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL002.xsd','./msxsdtest/identityConstraint',valid),
STResList726 = [STRes725|STResList725],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL002.xml','./msxsdtest/identityConstraint',invalid,S725),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL002.xml','./msxsdtest/identityConstraint',invalid,S725),
ITResList111 = [ITRes110|ITResList110],
- ?line {STRes726,S726} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL003.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes726,S726} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL003.xsd','./msxsdtest/identityConstraint',valid),
STResList727 = [STRes726|STResList726],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL003.xml','./msxsdtest/identityConstraint',valid,S726),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL003.xml','./msxsdtest/identityConstraint',valid,S726),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes727,S727} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL004.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes727,S727} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL004.xsd','./msxsdtest/identityConstraint',valid),
STResList728 = [STRes727|STResList727],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL004.xml','./msxsdtest/identityConstraint',valid,S727),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL004.xml','./msxsdtest/identityConstraint',valid,S727),
ITResList113 = [ITRes112|ITResList112],
- ?line {STRes728,S728} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL005.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes728,S728} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL005.xsd','./msxsdtest/identityConstraint',valid),
STResList729 = [STRes728|STResList728],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL005.xml','./msxsdtest/identityConstraint',valid,S728),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL005.xml','./msxsdtest/identityConstraint',valid,S728),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes729,S729} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL006.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes729,S729} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL006.xsd','./msxsdtest/identityConstraint',valid),
STResList730 = [STRes729|STResList729],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL006.xml','./msxsdtest/identityConstraint',invalid,S729),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL006.xml','./msxsdtest/identityConstraint',invalid,S729),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes730,S730} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL007.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes730,S730} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL007.xsd','./msxsdtest/identityConstraint',valid),
STResList731 = [STRes730|STResList730],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL007.xml','./msxsdtest/identityConstraint',invalid,S730),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL007.xml','./msxsdtest/identityConstraint',invalid,S730),
ITResList116 = [ITRes115|ITResList115],
- ?line {STRes731,S731} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL008.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes731,S731} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL008.xsd','./msxsdtest/identityConstraint',valid),
STResList732 = [STRes731|STResList731],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL008.xml','./msxsdtest/identityConstraint',valid,S731),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL008.xml','./msxsdtest/identityConstraint',valid,S731),
ITResList117 = [ITRes116|ITResList116],
- ?line {STRes732,S732} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL009.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes732,S732} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL009.xsd','./msxsdtest/identityConstraint',valid),
STResList733 = [STRes732|STResList732],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL009.xml','./msxsdtest/identityConstraint',valid,S732),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL009.xml','./msxsdtest/identityConstraint',valid,S732),
ITResList118 = [ITRes117|ITResList117],
- ?line {STRes733,S733} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL010.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes733,S733} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL010.xsd','./msxsdtest/identityConstraint',valid),
STResList734 = [STRes733|STResList733],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL010.xml','./msxsdtest/identityConstraint',valid,S733),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL010.xml','./msxsdtest/identityConstraint',valid,S733),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes734,S734} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL011.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes734,S734} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL011.xsd','./msxsdtest/identityConstraint',valid),
STResList735 = [STRes734|STResList734],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL011.xml','./msxsdtest/identityConstraint',invalid,S734),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL011.xml','./msxsdtest/identityConstraint',invalid,S734),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes735,S735} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL012.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes735,S735} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL012.xsd','./msxsdtest/identityConstraint',valid),
STResList736 = [STRes735|STResList735],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL012.xml','./msxsdtest/identityConstraint',invalid,S735),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL012.xml','./msxsdtest/identityConstraint',invalid,S735),
ITResList121 = [ITRes120|ITResList120],
- ?line {STRes736,S736} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL013.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes736,S736} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL013.xsd','./msxsdtest/identityConstraint',valid),
STResList737 = [STRes736|STResList736],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL013.xml','./msxsdtest/identityConstraint',valid,S736),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL013.xml','./msxsdtest/identityConstraint',valid,S736),
ITResList122 = [ITRes121|ITResList121],
- ?line {STRes737,S737} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL014.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes737,S737} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL014.xsd','./msxsdtest/identityConstraint',valid),
STResList738 = [STRes737|STResList737],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL014.xml','./msxsdtest/identityConstraint',valid,S737),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL014.xml','./msxsdtest/identityConstraint',valid,S737),
ITResList123 = [ITRes122|ITResList122],
- ?line {STRes738,S738} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL015.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes738,S738} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL015.xsd','./msxsdtest/identityConstraint',valid),
STResList739 = [STRes738|STResList738],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL015.xml','./msxsdtest/identityConstraint',invalid,S738),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL015.xml','./msxsdtest/identityConstraint',invalid,S738),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes739,S739} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL016.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes739,S739} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL016.xsd','./msxsdtest/identityConstraint',valid),
STResList740 = [STRes739|STResList739],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL016.xml','./msxsdtest/identityConstraint',valid,S739),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL016.xml','./msxsdtest/identityConstraint',valid,S739),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes740,S740} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL017.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes740,S740} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL017.xsd','./msxsdtest/identityConstraint',valid),
STResList741 = [STRes740|STResList740],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL017.xml','./msxsdtest/identityConstraint',valid,S740),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL017.xml','./msxsdtest/identityConstraint',valid,S740),
ITResList126 = [ITRes125|ITResList125],
- ?line {STRes741,S741} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL018.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes741,S741} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL018.xsd','./msxsdtest/identityConstraint',valid),
STResList742 = [STRes741|STResList741],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL018.xml','./msxsdtest/identityConstraint',valid,S741),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL018.xml','./msxsdtest/identityConstraint',valid,S741),
ITResList127 = [ITRes126|ITResList126],
- ?line {STRes742,S742} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL019.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes742,S742} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL019.xsd','./msxsdtest/identityConstraint',valid),
STResList743 = [STRes742|STResList742],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL019.xml','./msxsdtest/identityConstraint',invalid,S742),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL019.xml','./msxsdtest/identityConstraint',invalid,S742),
ITResList128 = [ITRes127|ITResList127],
- ?line {STRes743,S743} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL020.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes743,S743} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL020.xsd','./msxsdtest/identityConstraint',valid),
STResList744 = [STRes743|STResList743],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL020.xml','./msxsdtest/identityConstraint',valid,S743),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL020.xml','./msxsdtest/identityConstraint',valid,S743),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes744,S744} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL021.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes744,S744} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL021.xsd','./msxsdtest/identityConstraint',valid),
STResList745 = [STRes744|STResList744],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL021.xml','./msxsdtest/identityConstraint',valid,S744),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL021.xml','./msxsdtest/identityConstraint',valid,S744),
ITResList130 = [ITRes129|ITResList129],
- ?line {STRes745,S745} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL022.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes745,S745} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL022.xsd','./msxsdtest/identityConstraint',valid),
STResList746 = [STRes745|STResList745],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL022.xml','./msxsdtest/identityConstraint',invalid,S745),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL022.xml','./msxsdtest/identityConstraint',invalid,S745),
ITResList131 = [ITRes130|ITResList130],
- ?line {STRes746,S746} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL023.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes746,S746} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL023.xsd','./msxsdtest/identityConstraint',valid),
STResList747 = [STRes746|STResList746],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL023.xml','./msxsdtest/identityConstraint',valid,S746),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL023.xml','./msxsdtest/identityConstraint',valid,S746),
ITResList132 = [ITRes131|ITResList131],
- ?line {STRes747,S747} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL024.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes747,S747} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL024.xsd','./msxsdtest/identityConstraint',valid),
STResList748 = [STRes747|STResList747],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL024.xml','./msxsdtest/identityConstraint',valid,S747),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL024.xml','./msxsdtest/identityConstraint',valid,S747),
ITResList133 = [ITRes132|ITResList132],
- ?line {STRes748,S748} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL025.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes748,S748} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL025.xsd','./msxsdtest/identityConstraint',valid),
STResList749 = [STRes748|STResList748],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL025.xml','./msxsdtest/identityConstraint',invalid,S748),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL025.xml','./msxsdtest/identityConstraint',invalid,S748),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes749,S749} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL026.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes749,S749} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL026.xsd','./msxsdtest/identityConstraint',valid),
STResList750 = [STRes749|STResList749],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL026.xml','./msxsdtest/identityConstraint',valid,S749),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL026.xml','./msxsdtest/identityConstraint',valid,S749),
ITResList135 = [ITRes134|ITResList134],
- ?line {STRes750,S750} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL027.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes750,S750} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL027.xsd','./msxsdtest/identityConstraint',valid),
STResList751 = [STRes750|STResList750],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL027.xml','./msxsdtest/identityConstraint',invalid,S750),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL027.xml','./msxsdtest/identityConstraint',invalid,S750),
ITResList136 = [ITRes135|ITResList135],
- ?line {STRes751,S751} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL028.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes751,S751} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL028.xsd','./msxsdtest/identityConstraint',valid),
STResList752 = [STRes751|STResList751],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL028.xml','./msxsdtest/identityConstraint',valid,S751),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL028.xml','./msxsdtest/identityConstraint',valid,S751),
ITResList137 = [ITRes136|ITResList136],
- ?line {STRes752,S752} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL029.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes752,S752} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL029.xsd','./msxsdtest/identityConstraint',valid),
STResList753 = [STRes752|STResList752],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL029.xml','./msxsdtest/identityConstraint',valid,S752),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL029.xml','./msxsdtest/identityConstraint',valid,S752),
ITResList138 = [ITRes137|ITResList137],
- ?line {STRes753,S753} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL030.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes753,S753} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL030.xsd','./msxsdtest/identityConstraint',valid),
STResList754 = [STRes753|STResList753],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL030.xml','./msxsdtest/identityConstraint',valid,S753),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL030.xml','./msxsdtest/identityConstraint',valid,S753),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes754,S754} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL031.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes754,S754} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL031.xsd','./msxsdtest/identityConstraint',valid),
STResList755 = [STRes754|STResList754],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL031.xml','./msxsdtest/identityConstraint',invalid,S754),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL031.xml','./msxsdtest/identityConstraint',invalid,S754),
ITResList140 = [ITRes139|ITResList139],
- ?line {STRes755,S755} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL032.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes755,S755} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL032.xsd','./msxsdtest/identityConstraint',valid),
STResList756 = [STRes755|STResList755],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL032.xml','./msxsdtest/identityConstraint',invalid,S755),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL032.xml','./msxsdtest/identityConstraint',invalid,S755),
ITResList141 = [ITRes140|ITResList140],
- ?line {STRes756,S756} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL033.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes756,S756} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL033.xsd','./msxsdtest/identityConstraint',valid),
STResList757 = [STRes756|STResList756],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL033.xml','./msxsdtest/identityConstraint',valid,S756),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL033.xml','./msxsdtest/identityConstraint',valid,S756),
ITResList142 = [ITRes141|ITResList141],
- ?line {STRes757,S757} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL034.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes757,S757} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL034.xsd','./msxsdtest/identityConstraint',valid),
STResList758 = [STRes757|STResList757],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL034.xml','./msxsdtest/identityConstraint',valid,S757),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL034.xml','./msxsdtest/identityConstraint',valid,S757),
ITResList143 = [ITRes142|ITResList142],
- ?line {STRes758,S758} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL035.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes758,S758} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL035.xsd','./msxsdtest/identityConstraint',valid),
STResList759 = [STRes758|STResList758],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL035.xml','./msxsdtest/identityConstraint',valid,S758),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL035.xml','./msxsdtest/identityConstraint',valid,S758),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes759,S759} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL036.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes759,S759} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL036.xsd','./msxsdtest/identityConstraint',valid),
STResList760 = [STRes759|STResList759],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL036.xml','./msxsdtest/identityConstraint',invalid,S759),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL036.xml','./msxsdtest/identityConstraint',invalid,S759),
ITResList145 = [ITRes144|ITResList144],
- ?line {STRes760,S760} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL037.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes760,S760} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL037.xsd','./msxsdtest/identityConstraint',valid),
STResList761 = [STRes760|STResList760],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL037.xml','./msxsdtest/identityConstraint',invalid,S760),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL037.xml','./msxsdtest/identityConstraint',invalid,S760),
ITResList146 = [ITRes145|ITResList145],
- ?line {STRes761,S761} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL038.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes761,S761} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL038.xsd','./msxsdtest/identityConstraint',valid),
STResList762 = [STRes761|STResList761],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL038.xml','./msxsdtest/identityConstraint',valid,S761),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL038.xml','./msxsdtest/identityConstraint',valid,S761),
ITResList147 = [ITRes146|ITResList146],
- ?line {STRes762,S762} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL039.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes762,S762} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL039.xsd','./msxsdtest/identityConstraint',valid),
STResList763 = [STRes762|STResList762],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL039.xml','./msxsdtest/identityConstraint',valid,S762),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL039.xml','./msxsdtest/identityConstraint',valid,S762),
ITResList148 = [ITRes147|ITResList147],
- ?line {STRes763,S763} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL040.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes763,S763} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL040.xsd','./msxsdtest/identityConstraint',valid),
STResList764 = [STRes763|STResList763],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL040.xml','./msxsdtest/identityConstraint',invalid,S763),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL040.xml','./msxsdtest/identityConstraint',invalid,S763),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes764,S764} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL041.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes764,S764} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL041.xsd','./msxsdtest/identityConstraint',valid),
STResList765 = [STRes764|STResList764],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL041.xml','./msxsdtest/identityConstraint',valid,S764),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL041.xml','./msxsdtest/identityConstraint',valid,S764),
ITResList150 = [ITRes149|ITResList149],
- ?line {STRes765,S765} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL042.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes765,S765} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL042.xsd','./msxsdtest/identityConstraint',valid),
STResList766 = [STRes765|STResList765],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL042.xml','./msxsdtest/identityConstraint',valid,S765),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL042.xml','./msxsdtest/identityConstraint',valid,S765),
ITResList151 = [ITRes150|ITResList150],
- ?line {STRes766,S766} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL043.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes766,S766} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL043.xsd','./msxsdtest/identityConstraint',valid),
STResList767 = [STRes766|STResList766],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL043.xml','./msxsdtest/identityConstraint',valid,S766),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL043.xml','./msxsdtest/identityConstraint',valid,S766),
ITResList152 = [ITRes151|ITResList151],
- ?line {STRes767,S767} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL044.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes767,S767} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL044.xsd','./msxsdtest/identityConstraint',valid),
STResList768 = [STRes767|STResList767],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL044.xml','./msxsdtest/identityConstraint',invalid,S767),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL044.xml','./msxsdtest/identityConstraint',invalid,S767),
ITResList153 = [ITRes152|ITResList152],
- ?line {STRes768,S768} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL045.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes768,S768} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL045.xsd','./msxsdtest/identityConstraint',valid),
STResList769 = [STRes768|STResList768],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL045.xml','./msxsdtest/identityConstraint',valid,S768),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL045.xml','./msxsdtest/identityConstraint',valid,S768),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes769,S769} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL046.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes769,S769} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL046.xsd','./msxsdtest/identityConstraint',valid),
STResList770 = [STRes769|STResList769],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL046.xml','./msxsdtest/identityConstraint',valid,S769),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL046.xml','./msxsdtest/identityConstraint',valid,S769),
ITResList155 = [ITRes154|ITResList154],
- ?line {STRes770,S770} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL047.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes770,S770} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL047.xsd','./msxsdtest/identityConstraint',valid),
STResList771 = [STRes770|STResList770],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL047.xml','./msxsdtest/identityConstraint',invalid,S770),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL047.xml','./msxsdtest/identityConstraint',invalid,S770),
ITResList156 = [ITRes155|ITResList155],
- ?line {STRes771,S771} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL048.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes771,S771} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL048.xsd','./msxsdtest/identityConstraint',valid),
STResList772 = [STRes771|STResList771],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL048.xml','./msxsdtest/identityConstraint',valid,S771),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL048.xml','./msxsdtest/identityConstraint',valid,S771),
ITResList157 = [ITRes156|ITResList156],
- ?line {STRes772,S772} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL049.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes772,S772} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL049.xsd','./msxsdtest/identityConstraint',valid),
STResList773 = [STRes772|STResList772],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL049.xml','./msxsdtest/identityConstraint',valid,S772),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL049.xml','./msxsdtest/identityConstraint',valid,S772),
ITResList158 = [ITRes157|ITResList157],
- ?line {STRes773,S773} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL050.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes773,S773} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL050.xsd','./msxsdtest/identityConstraint',valid),
STResList774 = [STRes773|STResList773],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL050.xml','./msxsdtest/identityConstraint',invalid,S773),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL050.xml','./msxsdtest/identityConstraint',invalid,S773),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes774,S774} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL051.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes774,S774} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL051.xsd','./msxsdtest/identityConstraint',valid),
STResList775 = [STRes774|STResList774],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL051.xml','./msxsdtest/identityConstraint',valid,S774),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL051.xml','./msxsdtest/identityConstraint',valid,S774),
ITResList160 = [ITRes159|ITResList159],
- ?line {STRes775,S775} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL052.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes775,S775} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL052.xsd','./msxsdtest/identityConstraint',valid),
STResList776 = [STRes775|STResList775],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL052.xml','./msxsdtest/identityConstraint',invalid,S775),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL052.xml','./msxsdtest/identityConstraint',invalid,S775),
ITResList161 = [ITRes160|ITResList160],
- ?line {STRes776,S776} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL053.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes776,S776} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL053.xsd','./msxsdtest/identityConstraint',valid),
STResList777 = [STRes776|STResList776],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL053.xml','./msxsdtest/identityConstraint',valid,S776),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL053.xml','./msxsdtest/identityConstraint',valid,S776),
ITResList162 = [ITRes161|ITResList161],
- ?line {STRes777,S777} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL054.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes777,S777} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL054.xsd','./msxsdtest/identityConstraint',valid),
STResList778 = [STRes777|STResList777],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL054.xml','./msxsdtest/identityConstraint',valid,S777),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL054.xml','./msxsdtest/identityConstraint',valid,S777),
ITResList163 = [ITRes162|ITResList162],
- ?line {STRes778,S778} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL055.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes778,S778} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL055.xsd','./msxsdtest/identityConstraint',valid),
STResList779 = [STRes778|STResList778],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL055.xml','./msxsdtest/identityConstraint',valid,S778),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL055.xml','./msxsdtest/identityConstraint',valid,S778),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes779,S779} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL056.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes779,S779} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL056.xsd','./msxsdtest/identityConstraint',valid),
STResList780 = [STRes779|STResList779],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL056.xml','./msxsdtest/identityConstraint',invalid,S779),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL056.xml','./msxsdtest/identityConstraint',invalid,S779),
ITResList165 = [ITRes164|ITResList164],
- ?line {STRes780,S780} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL057.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes780,S780} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL057.xsd','./msxsdtest/identityConstraint',valid),
STResList781 = [STRes780|STResList780],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL057.xml','./msxsdtest/identityConstraint',invalid,S780),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL057.xml','./msxsdtest/identityConstraint',invalid,S780),
ITResList166 = [ITRes165|ITResList165],
- ?line {STRes781,S781} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL058.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes781,S781} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL058.xsd','./msxsdtest/identityConstraint',valid),
STResList782 = [STRes781|STResList781],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL058.xml','./msxsdtest/identityConstraint',valid,S781),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL058.xml','./msxsdtest/identityConstraint',valid,S781),
ITResList167 = [ITRes166|ITResList166],
- ?line {STRes782,S782} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL059.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes782,S782} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL059.xsd','./msxsdtest/identityConstraint',valid),
STResList783 = [STRes782|STResList782],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL059.xml','./msxsdtest/identityConstraint',valid,S782),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL059.xml','./msxsdtest/identityConstraint',valid,S782),
ITResList168 = [ITRes167|ITResList167],
- ?line {STRes783,S783} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL060.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes783,S783} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL060.xsd','./msxsdtest/identityConstraint',valid),
STResList784 = [STRes783|STResList783],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL060.xml','./msxsdtest/identityConstraint',valid,S783),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL060.xml','./msxsdtest/identityConstraint',valid,S783),
ITResList169 = [ITRes168|ITResList168],
- ?line {STRes784,S784} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL061.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes784,S784} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL061.xsd','./msxsdtest/identityConstraint',valid),
STResList785 = [STRes784|STResList784],
- ?line ITRes169 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL061.xml','./msxsdtest/identityConstraint',invalid,S784),
+ ITRes169 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL061.xml','./msxsdtest/identityConstraint',invalid,S784),
ITResList170 = [ITRes169|ITResList169],
- ?line {STRes785,S785} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL062.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes785,S785} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL062.xsd','./msxsdtest/identityConstraint',valid),
STResList786 = [STRes785|STResList785],
- ?line ITRes170 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL062.xml','./msxsdtest/identityConstraint',invalid,S785),
+ ITRes170 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL062.xml','./msxsdtest/identityConstraint',invalid,S785),
ITResList171 = [ITRes170|ITResList170],
- ?line {STRes786,S786} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL063.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes786,S786} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL063.xsd','./msxsdtest/identityConstraint',valid),
STResList787 = [STRes786|STResList786],
- ?line ITRes171 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL063.xml','./msxsdtest/identityConstraint',valid,S786),
+ ITRes171 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL063.xml','./msxsdtest/identityConstraint',valid,S786),
ITResList172 = [ITRes171|ITResList171],
- ?line {STRes787,S787} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL064.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes787,S787} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL064.xsd','./msxsdtest/identityConstraint',valid),
STResList788 = [STRes787|STResList787],
- ?line ITRes172 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL064.xml','./msxsdtest/identityConstraint',valid,S787),
+ ITRes172 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL064.xml','./msxsdtest/identityConstraint',valid,S787),
ITResList173 = [ITRes172|ITResList172],
- ?line {STRes788,S788} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL065.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes788,S788} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL065.xsd','./msxsdtest/identityConstraint',valid),
STResList789 = [STRes788|STResList788],
- ?line ITRes173 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL065.xml','./msxsdtest/identityConstraint',invalid,S788),
+ ITRes173 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL065.xml','./msxsdtest/identityConstraint',invalid,S788),
ITResList174 = [ITRes173|ITResList173],
- ?line {STRes789,S789} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL066.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes789,S789} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL066.xsd','./msxsdtest/identityConstraint',valid),
STResList790 = [STRes789|STResList789],
- ?line ITRes174 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL066.xml','./msxsdtest/identityConstraint',valid,S789),
+ ITRes174 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL066.xml','./msxsdtest/identityConstraint',valid,S789),
ITResList175 = [ITRes174|ITResList174],
- ?line {STRes790,S790} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL067.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes790,S790} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL067.xsd','./msxsdtest/identityConstraint',valid),
STResList791 = [STRes790|STResList790],
- ?line ITRes175 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL067.xml','./msxsdtest/identityConstraint',valid,S790),
+ ITRes175 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL067.xml','./msxsdtest/identityConstraint',valid,S790),
ITResList176 = [ITRes175|ITResList175],
- ?line {STRes791,S791} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL068.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes791,S791} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL068.xsd','./msxsdtest/identityConstraint',valid),
STResList792 = [STRes791|STResList791],
- ?line ITRes176 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL068.xml','./msxsdtest/identityConstraint',valid,S791),
+ ITRes176 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL068.xml','./msxsdtest/identityConstraint',valid,S791),
ITResList177 = [ITRes176|ITResList176],
- ?line {STRes792,S792} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL069.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes792,S792} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL069.xsd','./msxsdtest/identityConstraint',valid),
STResList793 = [STRes792|STResList792],
- ?line ITRes177 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL069.xml','./msxsdtest/identityConstraint',invalid,S792),
+ ITRes177 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL069.xml','./msxsdtest/identityConstraint',invalid,S792),
ITResList178 = [ITRes177|ITResList177],
- ?line {STRes793,S793} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL070.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes793,S793} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL070.xsd','./msxsdtest/identityConstraint',valid),
STResList794 = [STRes793|STResList793],
- ?line ITRes178 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL070.xml','./msxsdtest/identityConstraint',valid,S793),
+ ITRes178 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL070.xml','./msxsdtest/identityConstraint',valid,S793),
ITResList179 = [ITRes178|ITResList178],
- ?line {STRes794,S794} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL071.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes794,S794} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL071.xsd','./msxsdtest/identityConstraint',valid),
STResList795 = [STRes794|STResList794],
- ?line ITRes179 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL071.xml','./msxsdtest/identityConstraint',valid,S794),
+ ITRes179 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL071.xml','./msxsdtest/identityConstraint',valid,S794),
ITResList180 = [ITRes179|ITResList179],
- ?line {STRes795,S795} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL072.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes795,S795} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL072.xsd','./msxsdtest/identityConstraint',valid),
STResList796 = [STRes795|STResList795],
- ?line ITRes180 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL072.xml','./msxsdtest/identityConstraint',invalid,S795),
+ ITRes180 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL072.xml','./msxsdtest/identityConstraint',invalid,S795),
ITResList181 = [ITRes180|ITResList180],
- ?line {STRes796,S796} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL073.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes796,S796} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL073.xsd','./msxsdtest/identityConstraint',valid),
STResList797 = [STRes796|STResList796],
- ?line ITRes181 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL073.xml','./msxsdtest/identityConstraint',valid,S796),
+ ITRes181 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL073.xml','./msxsdtest/identityConstraint',valid,S796),
ITResList182 = [ITRes181|ITResList181],
- ?line {STRes797,S797} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL074.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes797,S797} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL074.xsd','./msxsdtest/identityConstraint',valid),
STResList798 = [STRes797|STResList797],
- ?line ITRes182 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL074.xml','./msxsdtest/identityConstraint',valid,S797),
+ ITRes182 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL074.xml','./msxsdtest/identityConstraint',valid,S797),
ITResList183 = [ITRes182|ITResList182],
- ?line {STRes798,S798} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL075.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes798,S798} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL075.xsd','./msxsdtest/identityConstraint',valid),
STResList799 = [STRes798|STResList798],
- ?line ITRes183 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL075.xml','./msxsdtest/identityConstraint',invalid,S798),
+ ITRes183 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL075.xml','./msxsdtest/identityConstraint',invalid,S798),
ITResList184 = [ITRes183|ITResList183],
- ?line {STRes799,S799} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL076.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes799,S799} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL076.xsd','./msxsdtest/identityConstraint',valid),
STResList800 = [STRes799|STResList799],
- ?line ITRes184 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL076.xml','./msxsdtest/identityConstraint',valid,S799),
+ ITRes184 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL076.xml','./msxsdtest/identityConstraint',valid,S799),
ITResList185 = [ITRes184|ITResList184],
- ?line {STRes800,S800} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL077.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes800,S800} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL077.xsd','./msxsdtest/identityConstraint',valid),
STResList801 = [STRes800|STResList800],
- ?line ITRes185 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL077.xml','./msxsdtest/identityConstraint',valid,S800),
+ ITRes185 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL077.xml','./msxsdtest/identityConstraint',valid,S800),
ITResList186 = [ITRes185|ITResList185],
- ?line {STRes801,S801} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL078.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes801,S801} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL078.xsd','./msxsdtest/identityConstraint',valid),
STResList802 = [STRes801|STResList801],
- ?line ITRes186 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL078.xml','./msxsdtest/identityConstraint',valid,S801),
+ ITRes186 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL078.xml','./msxsdtest/identityConstraint',valid,S801),
ITResList187 = [ITRes186|ITResList186],
- ?line {STRes802,S802} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL079.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes802,S802} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL079.xsd','./msxsdtest/identityConstraint',valid),
STResList803 = [STRes802|STResList802],
- ?line ITRes187 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL079.xml','./msxsdtest/identityConstraint',invalid,S802),
+ ITRes187 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL079.xml','./msxsdtest/identityConstraint',invalid,S802),
ITResList188 = [ITRes187|ITResList187],
- ?line {STRes803,S803} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL080.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes803,S803} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL080.xsd','./msxsdtest/identityConstraint',valid),
STResList804 = [STRes803|STResList803],
- ?line ITRes188 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL080.xml','./msxsdtest/identityConstraint',invalid,S803),
+ ITRes188 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL080.xml','./msxsdtest/identityConstraint',invalid,S803),
ITResList189 = [ITRes188|ITResList188],
- ?line {STRes804,S804} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL081.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes804,S804} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL081.xsd','./msxsdtest/identityConstraint',valid),
STResList805 = [STRes804|STResList804],
- ?line ITRes189 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL081.xml','./msxsdtest/identityConstraint',invalid,S804),
+ ITRes189 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL081.xml','./msxsdtest/identityConstraint',invalid,S804),
ITResList190 = [ITRes189|ITResList189],
- ?line {STRes805,S805} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL082.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes805,S805} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL082.xsd','./msxsdtest/identityConstraint',valid),
STResList806 = [STRes805|STResList805],
- ?line ITRes190 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL082.xml','./msxsdtest/identityConstraint',valid,S805),
+ ITRes190 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL082.xml','./msxsdtest/identityConstraint',valid,S805),
ITResList191 = [ITRes190|ITResList190],
- ?line {STRes806,S806} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL083.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes806,S806} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL083.xsd','./msxsdtest/identityConstraint',valid),
STResList807 = [STRes806|STResList806],
- ?line ITRes191 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL083.xml','./msxsdtest/identityConstraint',invalid,S806),
+ ITRes191 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL083.xml','./msxsdtest/identityConstraint',invalid,S806),
ITResList192 = [ITRes191|ITResList191],
- ?line {STRes807,S807} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL084.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes807,S807} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL084.xsd','./msxsdtest/identityConstraint',valid),
STResList808 = [STRes807|STResList807],
- ?line ITRes192 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL084.xml','./msxsdtest/identityConstraint',valid,S807),
+ ITRes192 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL084.xml','./msxsdtest/identityConstraint',valid,S807),
ITResList193 = [ITRes192|ITResList192],
- ?line {STRes808,S808} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL085.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes808,S808} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL085.xsd','./msxsdtest/identityConstraint',valid),
STResList809 = [STRes808|STResList808],
- ?line ITRes193 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL085.xml','./msxsdtest/identityConstraint',invalid,S808),
+ ITRes193 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL085.xml','./msxsdtest/identityConstraint',invalid,S808),
ITResList194 = [ITRes193|ITResList193],
- ?line {STRes809,S809} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL086.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes809,S809} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL086.xsd','./msxsdtest/identityConstraint',valid),
STResList810 = [STRes809|STResList809],
- ?line ITRes194 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL086.xml','./msxsdtest/identityConstraint',valid,S809),
+ ITRes194 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL086.xml','./msxsdtest/identityConstraint',valid,S809),
ITResList195 = [ITRes194|ITResList194],
- ?line {STRes810,S810} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL087.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes810,S810} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL087.xsd','./msxsdtest/identityConstraint',valid),
STResList811 = [STRes810|STResList810],
- ?line ITRes195 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL087.xml','./msxsdtest/identityConstraint',invalid,S810),
+ ITRes195 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL087.xml','./msxsdtest/identityConstraint',invalid,S810),
ITResList196 = [ITRes195|ITResList195],
- ?line {STRes811,S811} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL088.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes811,S811} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL088.xsd','./msxsdtest/identityConstraint',valid),
STResList812 = [STRes811|STResList811],
- ?line ITRes196 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL088.xml','./msxsdtest/identityConstraint',valid,S811),
+ ITRes196 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL088.xml','./msxsdtest/identityConstraint',valid,S811),
ITResList197 = [ITRes196|ITResList196],
- ?line {STRes812,S812} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL089.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes812,S812} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL089.xsd','./msxsdtest/identityConstraint',valid),
STResList813 = [STRes812|STResList812],
- ?line ITRes197 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL089.xml','./msxsdtest/identityConstraint',invalid,S812),
+ ITRes197 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL089.xml','./msxsdtest/identityConstraint',invalid,S812),
ITResList198 = [ITRes197|ITResList197],
- ?line {STRes813,S813} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL090.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes813,S813} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL090.xsd','./msxsdtest/identityConstraint',valid),
STResList814 = [STRes813|STResList813],
- ?line ITRes198 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL090.xml','./msxsdtest/identityConstraint',valid,S813),
+ ITRes198 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL090.xml','./msxsdtest/identityConstraint',valid,S813),
ITResList199 = [ITRes198|ITResList198],
- ?line {STRes814,S814} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL091.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes814,S814} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL091.xsd','./msxsdtest/identityConstraint',valid),
STResList815 = [STRes814|STResList814],
- ?line ITRes199 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL091.xml','./msxsdtest/identityConstraint',invalid,S814),
+ ITRes199 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL091.xml','./msxsdtest/identityConstraint',invalid,S814),
ITResList200 = [ITRes199|ITResList199],
- ?line {STRes815,S815} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL092.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes815,S815} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL092.xsd','./msxsdtest/identityConstraint',valid),
STResList816 = [STRes815|STResList815],
- ?line ITRes200 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL092.xml','./msxsdtest/identityConstraint',valid,S815),
+ ITRes200 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL092.xml','./msxsdtest/identityConstraint',valid,S815),
ITResList201 = [ITRes200|ITResList200],
- ?line {STRes816,S816} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL093.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes816,S816} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL093.xsd','./msxsdtest/identityConstraint',valid),
STResList817 = [STRes816|STResList816],
- ?line ITRes201 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL093.xml','./msxsdtest/identityConstraint',invalid,S816),
+ ITRes201 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL093.xml','./msxsdtest/identityConstraint',invalid,S816),
ITResList202 = [ITRes201|ITResList201],
- ?line {STRes817,S817} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL094.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes817,S817} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL094.xsd','./msxsdtest/identityConstraint',valid),
STResList818 = [STRes817|STResList817],
- ?line ITRes202 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL094.xml','./msxsdtest/identityConstraint',valid,S817),
+ ITRes202 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL094.xml','./msxsdtest/identityConstraint',valid,S817),
ITResList203 = [ITRes202|ITResList202],
- ?line {STRes818,S818} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL095.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes818,S818} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL095.xsd','./msxsdtest/identityConstraint',valid),
STResList819 = [STRes818|STResList818],
- ?line ITRes203 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL095.xml','./msxsdtest/identityConstraint',invalid,S818),
+ ITRes203 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL095.xml','./msxsdtest/identityConstraint',invalid,S818),
ITResList204 = [ITRes203|ITResList203],
- ?line {STRes819,S819} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL096.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes819,S819} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL096.xsd','./msxsdtest/identityConstraint',valid),
STResList820 = [STRes819|STResList819],
- ?line ITRes204 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL096.xml','./msxsdtest/identityConstraint',valid,S819),
+ ITRes204 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL096.xml','./msxsdtest/identityConstraint',valid,S819),
ITResList205 = [ITRes204|ITResList204],
- ?line {STRes820,S820} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL097.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes820,S820} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL097.xsd','./msxsdtest/identityConstraint',valid),
STResList821 = [STRes820|STResList820],
- ?line ITRes205 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL097.xml','./msxsdtest/identityConstraint',invalid,S820),
+ ITRes205 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL097.xml','./msxsdtest/identityConstraint',invalid,S820),
ITResList206 = [ITRes205|ITResList205],
- ?line {STRes821,S821} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL098.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes821,S821} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL098.xsd','./msxsdtest/identityConstraint',valid),
STResList822 = [STRes821|STResList821],
- ?line ITRes206 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL098.xml','./msxsdtest/identityConstraint',valid,S821),
+ ITRes206 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL098.xml','./msxsdtest/identityConstraint',valid,S821),
ITResList207 = [ITRes206|ITResList206],
- ?line {STRes822,S822} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL099.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes822,S822} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL099.xsd','./msxsdtest/identityConstraint',valid),
STResList823 = [STRes822|STResList822],
- ?line ITRes207 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL099.xml','./msxsdtest/identityConstraint',invalid,S822),
+ ITRes207 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL099.xml','./msxsdtest/identityConstraint',invalid,S822),
ITResList208 = [ITRes207|ITResList207],
- ?line {STRes823,S823} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL100.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes823,S823} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL100.xsd','./msxsdtest/identityConstraint',valid),
STResList824 = [STRes823|STResList823],
- ?line ITRes208 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL100.xml','./msxsdtest/identityConstraint',valid,S823),
+ ITRes208 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL100.xml','./msxsdtest/identityConstraint',valid,S823),
ITResList209 = [ITRes208|ITResList208],
- ?line {STRes824,S824} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL101.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes824,S824} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL101.xsd','./msxsdtest/identityConstraint',valid),
STResList825 = [STRes824|STResList824],
- ?line ITRes209 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL101.xml','./msxsdtest/identityConstraint',invalid,S824),
+ ITRes209 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL101.xml','./msxsdtest/identityConstraint',invalid,S824),
ITResList210 = [ITRes209|ITResList209],
- ?line {STRes825,S825} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL102.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes825,S825} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL102.xsd','./msxsdtest/identityConstraint',valid),
STResList826 = [STRes825|STResList825],
- ?line ITRes210 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL102.xml','./msxsdtest/identityConstraint',valid,S825),
+ ITRes210 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL102.xml','./msxsdtest/identityConstraint',valid,S825),
ITResList211 = [ITRes210|ITResList210],
- ?line {STRes826,S826} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL103.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes826,S826} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idL103.xsd','./msxsdtest/identityConstraint',valid),
STResList827 = [STRes826|STResList826],
- ?line ITRes211 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL103.xml','./msxsdtest/identityConstraint',invalid,S826),
+ ITRes211 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idL103.xml','./msxsdtest/identityConstraint',invalid,S826),
ITResList212 = [ITRes211|ITResList211],
- ?line {STRes827,S827} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idZ001.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes827,S827} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idZ001.xsd','./msxsdtest/identityConstraint',valid),
STResList828 = [STRes827|STResList827],
- ?line ITRes212 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idZ001.xml','./msxsdtest/identityConstraint',invalid,S827),
+ ITRes212 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idZ001.xml','./msxsdtest/identityConstraint',invalid,S827),
ITResList213 = [ITRes212|ITResList212],
- ?line {STRes828,S828} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idZ002.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes828,S828} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idZ002.xsd','./msxsdtest/identityConstraint',valid),
STResList829 = [STRes828|STResList828],
- ?line ITRes213 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idZ002.xml','./msxsdtest/identityConstraint',invalid,S828),
+ ITRes213 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idZ002.xml','./msxsdtest/identityConstraint',invalid,S828),
ITResList214 = [ITRes213|ITResList213],
- ?line {STRes829,S829} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idZ004.xsd','./msxsdtest/identityConstraint',valid),
+ {STRes829,S829} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/identityConstraint/idZ004.xsd','./msxsdtest/identityConstraint',valid),
STResList830 = [STRes829|STResList829],
- ?line ITRes214 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idZ004.xml','./msxsdtest/identityConstraint',invalid,S829),
+ ITRes214 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/identityConstraint/idZ004.xml','./msxsdtest/identityConstraint',invalid,S829),
ITResList215 = [ITRes214|ITResList214],
@@ -16000,318 +15988,318 @@ id(Config) when is_list(Config) ->
mgABCD(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA001.xsd','./msxsdtest/ModelGroups',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA001.xml','./msxsdtest/ModelGroups',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA001.xml','./msxsdtest/ModelGroups',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA002.xsd','./msxsdtest/ModelGroups',invalid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA003.xsd','./msxsdtest/ModelGroups',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA004.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA004.xsd','./msxsdtest/ModelGroups',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA005.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA005.xsd','./msxsdtest/ModelGroups',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA006.xsd','./msxsdtest/ModelGroups',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA007.xsd','./msxsdtest/ModelGroups',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA008.xsd','./msxsdtest/ModelGroups',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA009.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA009.xsd','./msxsdtest/ModelGroups',invalid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA010.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA010.xsd','./msxsdtest/ModelGroups',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA011.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA011.xsd','./msxsdtest/ModelGroups',invalid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA012.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA012.xsd','./msxsdtest/ModelGroups',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA013.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA013.xsd','./msxsdtest/ModelGroups',invalid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA014.xsd','./msxsdtest/ModelGroups',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA014.xml','./msxsdtest/ModelGroups',valid,S13),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA014.xml','./msxsdtest/ModelGroups',valid,S13),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA015.xsd','./msxsdtest/ModelGroups',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA015.xml','./msxsdtest/ModelGroups',valid,S14),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA015.xml','./msxsdtest/ModelGroups',valid,S14),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA016.xsd','./msxsdtest/ModelGroups',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA016.xml','./msxsdtest/ModelGroups',valid,S15),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA016.xml','./msxsdtest/ModelGroups',valid,S15),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA017.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA017.xsd','./msxsdtest/ModelGroups',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA017.xml','./msxsdtest/ModelGroups',valid,S16),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgA017.xml','./msxsdtest/ModelGroups',valid,S16),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA018.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA018.xsd','./msxsdtest/ModelGroups',invalid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA019.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgA019.xsd','./msxsdtest/ModelGroups',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa001.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa001.xsd','./msxsdtest/ModelGroups',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa002.xsd','./msxsdtest/ModelGroups',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa003.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa003.xsd','./msxsdtest/ModelGroups',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgAa003.xml','./msxsdtest/ModelGroups',valid,S21),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgAa003.xml','./msxsdtest/ModelGroups',valid,S21),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa004.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa004.xsd','./msxsdtest/ModelGroups',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa005.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa005.xsd','./msxsdtest/ModelGroups',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa006.xsd','./msxsdtest/ModelGroups',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa007.xsd','./msxsdtest/ModelGroups',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa008.xsd','./msxsdtest/ModelGroups',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa009.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa009.xsd','./msxsdtest/ModelGroups',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa010.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAa010.xsd','./msxsdtest/ModelGroups',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb001.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb001.xsd','./msxsdtest/ModelGroups',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb002.xsd','./msxsdtest/ModelGroups',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb003.xsd','./msxsdtest/ModelGroups',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb004.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb004.xsd','./msxsdtest/ModelGroups',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb005.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb005.xsd','./msxsdtest/ModelGroups',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb006.xsd','./msxsdtest/ModelGroups',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb007.xsd','./msxsdtest/ModelGroups',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb008.xsd','./msxsdtest/ModelGroups',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb009.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb009.xsd','./msxsdtest/ModelGroups',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb010.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgAb010.xsd','./msxsdtest/ModelGroups',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB001.xsd','./msxsdtest/ModelGroups',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgB001.xml','./msxsdtest/ModelGroups',valid,S39),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgB001.xml','./msxsdtest/ModelGroups',valid,S39),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB002.xsd','./msxsdtest/ModelGroups',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgB002.xml','./msxsdtest/ModelGroups',valid,S40),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgB002.xml','./msxsdtest/ModelGroups',valid,S40),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB003.xsd','./msxsdtest/ModelGroups',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB004.xsd','./msxsdtest/ModelGroups',valid),
STResList43 = [STRes42|STResList42],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgB004.xml','./msxsdtest/ModelGroups',valid,S42),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgB004.xml','./msxsdtest/ModelGroups',valid,S42),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB006.xsd','./msxsdtest/ModelGroups',valid),
STResList44 = [STRes43|STResList43],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgB006.xml','./msxsdtest/ModelGroups',valid,S43),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgB006.xml','./msxsdtest/ModelGroups',valid,S43),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB007.xsd','./msxsdtest/ModelGroups',invalid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB008.xsd','./msxsdtest/ModelGroups',invalid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB009.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB009.xsd','./msxsdtest/ModelGroups',invalid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB010.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgB010.xsd','./msxsdtest/ModelGroups',invalid),
STResList48 = [STRes47|STResList47],
- ?line {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC001.xsd','./msxsdtest/ModelGroups',valid),
STResList49 = [STRes48|STResList48],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC001.xml','./msxsdtest/ModelGroups',invalid,S48),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC001.xml','./msxsdtest/ModelGroups',invalid,S48),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC002.xsd','./msxsdtest/ModelGroups',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC002.xml','./msxsdtest/ModelGroups',valid,S49),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC002.xml','./msxsdtest/ModelGroups',valid,S49),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC003.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC003.xsd','./msxsdtest/ModelGroups',valid),
STResList51 = [STRes50|STResList50],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC003.xml','./msxsdtest/ModelGroups',invalid,S50),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC003.xml','./msxsdtest/ModelGroups',invalid,S50),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC004.xsd','./msxsdtest/ModelGroups',valid),
STResList52 = [STRes51|STResList51],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC004.xml','./msxsdtest/ModelGroups',valid,S51),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC004.xml','./msxsdtest/ModelGroups',valid,S51),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC005.xsd','./msxsdtest/ModelGroups',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC005.xml','./msxsdtest/ModelGroups',invalid,S52),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC005.xml','./msxsdtest/ModelGroups',invalid,S52),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC006.xsd','./msxsdtest/ModelGroups',valid),
STResList54 = [STRes53|STResList53],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC006.xml','./msxsdtest/ModelGroups',valid,S53),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC006.xml','./msxsdtest/ModelGroups',valid,S53),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC007.xsd','./msxsdtest/ModelGroups',valid),
STResList55 = [STRes54|STResList54],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC007.xml','./msxsdtest/ModelGroups',invalid,S54),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC007.xml','./msxsdtest/ModelGroups',invalid,S54),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC008.xsd','./msxsdtest/ModelGroups',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC009.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC009.xsd','./msxsdtest/ModelGroups',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC010.xsd','./msxsdtest/ModelGroups',valid),
STResList58 = [STRes57|STResList57],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC010.xml','./msxsdtest/ModelGroups',invalid,S57),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC010.xml','./msxsdtest/ModelGroups',invalid,S57),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC011.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC011.xsd','./msxsdtest/ModelGroups',valid),
STResList59 = [STRes58|STResList58],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC011.xml','./msxsdtest/ModelGroups',valid,S58),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC011.xml','./msxsdtest/ModelGroups',valid,S58),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC012.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC012.xsd','./msxsdtest/ModelGroups',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC012.xml','./msxsdtest/ModelGroups',invalid,S59),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC012.xml','./msxsdtest/ModelGroups',invalid,S59),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC013.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC013.xsd','./msxsdtest/ModelGroups',invalid),
STResList61 = [STRes60|STResList60],
- ?line {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgC014.xsd','./msxsdtest/ModelGroups',valid),
STResList62 = [STRes61|STResList61],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC014.xml','./msxsdtest/ModelGroups',valid,S61),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgC014.xml','./msxsdtest/ModelGroups',valid,S61),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgD001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgD001.xsd','./msxsdtest/ModelGroups',valid),
STResList63 = [STRes62|STResList62],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgD001.xml','./msxsdtest/ModelGroups',valid,S62),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgD001.xml','./msxsdtest/ModelGroups',valid,S62),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgD005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgD005.xsd','./msxsdtest/ModelGroups',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgD005.xml','./msxsdtest/ModelGroups',valid,S63),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgD005.xml','./msxsdtest/ModelGroups',valid,S63),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgD009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgD009.xsd','./msxsdtest/ModelGroups',valid),
STResList65 = [STRes64|STResList64],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgD009.xml','./msxsdtest/ModelGroups',valid,S64),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgD009.xml','./msxsdtest/ModelGroups',valid,S64),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgD013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgD013.xsd','./msxsdtest/ModelGroups',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgD013.xml','./msxsdtest/ModelGroups',valid,S65),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgD013.xml','./msxsdtest/ModelGroups',valid,S65),
ITResList25 = [ITRes24|ITResList24],
@@ -16322,454 +16310,454 @@ mgABCD(Config) when is_list(Config) ->
mgEFG(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE001.xsd','./msxsdtest/ModelGroups',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE001.xml','./msxsdtest/ModelGroups',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE001.xml','./msxsdtest/ModelGroups',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE002.xsd','./msxsdtest/ModelGroups',invalid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE003.xsd','./msxsdtest/ModelGroups',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE004.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE004.xsd','./msxsdtest/ModelGroups',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE005.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE005.xsd','./msxsdtest/ModelGroups',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE006.xsd','./msxsdtest/ModelGroups',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE007.xsd','./msxsdtest/ModelGroups',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE008.xsd','./msxsdtest/ModelGroups',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE009.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE009.xsd','./msxsdtest/ModelGroups',invalid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE010.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE010.xsd','./msxsdtest/ModelGroups',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE011.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE011.xsd','./msxsdtest/ModelGroups',invalid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE012.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE012.xsd','./msxsdtest/ModelGroups',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE013.xsd','./msxsdtest/ModelGroups',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE013.xml','./msxsdtest/ModelGroups',valid,S12),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE013.xml','./msxsdtest/ModelGroups',valid,S12),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE014.xsd','./msxsdtest/ModelGroups',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE014.xml','./msxsdtest/ModelGroups',valid,S13),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE014.xml','./msxsdtest/ModelGroups',valid,S13),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE015.xsd','./msxsdtest/ModelGroups',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE015.xml','./msxsdtest/ModelGroups',valid,S14),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE015.xml','./msxsdtest/ModelGroups',valid,S14),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE016.xsd','./msxsdtest/ModelGroups',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE016.xml','./msxsdtest/ModelGroups',valid,S15),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE016.xml','./msxsdtest/ModelGroups',valid,S15),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE017.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE017.xsd','./msxsdtest/ModelGroups',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE017.xml','./msxsdtest/ModelGroups',valid,S16),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE017.xml','./msxsdtest/ModelGroups',valid,S16),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE018.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgE018.xsd','./msxsdtest/ModelGroups',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE018.xml','./msxsdtest/ModelGroups',valid,S17),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgE018.xml','./msxsdtest/ModelGroups',valid,S17),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa001.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa001.xsd','./msxsdtest/ModelGroups',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa002.xsd','./msxsdtest/ModelGroups',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa003.xsd','./msxsdtest/ModelGroups',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa004.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa004.xsd','./msxsdtest/ModelGroups',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa005.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa005.xsd','./msxsdtest/ModelGroups',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa006.xsd','./msxsdtest/ModelGroups',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa007.xsd','./msxsdtest/ModelGroups',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEa008.xsd','./msxsdtest/ModelGroups',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb001.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb001.xsd','./msxsdtest/ModelGroups',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb002.xsd','./msxsdtest/ModelGroups',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb003.xsd','./msxsdtest/ModelGroups',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb004.xsd','./msxsdtest/ModelGroups',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgEb004.xml','./msxsdtest/ModelGroups',valid,S29),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgEb004.xml','./msxsdtest/ModelGroups',valid,S29),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb005.xsd','./msxsdtest/ModelGroups',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgEb005.xml','./msxsdtest/ModelGroups',valid,S30),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgEb005.xml','./msxsdtest/ModelGroups',valid,S30),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb006.xsd','./msxsdtest/ModelGroups',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb007.xsd','./msxsdtest/ModelGroups',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgEb008.xsd','./msxsdtest/ModelGroups',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF001.xsd','./msxsdtest/ModelGroups',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF001.xml','./msxsdtest/ModelGroups',valid,S34),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF001.xml','./msxsdtest/ModelGroups',valid,S34),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF002.xsd','./msxsdtest/ModelGroups',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF002.xml','./msxsdtest/ModelGroups',valid,S35),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF002.xml','./msxsdtest/ModelGroups',valid,S35),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF003.xsd','./msxsdtest/ModelGroups',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF004.xsd','./msxsdtest/ModelGroups',valid),
STResList38 = [STRes37|STResList37],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF004.xml','./msxsdtest/ModelGroups',valid,S37),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF004.xml','./msxsdtest/ModelGroups',valid,S37),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF005.xsd','./msxsdtest/ModelGroups',valid),
STResList39 = [STRes38|STResList38],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF005.xml','./msxsdtest/ModelGroups',valid,S38),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF005.xml','./msxsdtest/ModelGroups',valid,S38),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF006.xsd','./msxsdtest/ModelGroups',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF006.xml','./msxsdtest/ModelGroups',valid,S39),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF006.xml','./msxsdtest/ModelGroups',valid,S39),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF007.xsd','./msxsdtest/ModelGroups',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF007.xml','./msxsdtest/ModelGroups',valid,S40),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF007.xml','./msxsdtest/ModelGroups',valid,S40),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF008.xsd','./msxsdtest/ModelGroups',valid),
STResList42 = [STRes41|STResList41],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF008.xml','./msxsdtest/ModelGroups',valid,S41),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF008.xml','./msxsdtest/ModelGroups',valid,S41),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF009.xsd','./msxsdtest/ModelGroups',valid),
STResList43 = [STRes42|STResList42],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF009.xml','./msxsdtest/ModelGroups',valid,S42),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF009.xml','./msxsdtest/ModelGroups',valid,S42),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF010.xsd','./msxsdtest/ModelGroups',valid),
STResList44 = [STRes43|STResList43],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF010.xml','./msxsdtest/ModelGroups',valid,S43),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF010.xml','./msxsdtest/ModelGroups',valid,S43),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF011.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF011.xsd','./msxsdtest/ModelGroups',valid),
STResList45 = [STRes44|STResList44],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF011.xml','./msxsdtest/ModelGroups',valid,S44),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF011.xml','./msxsdtest/ModelGroups',valid,S44),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF012.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF012.xsd','./msxsdtest/ModelGroups',valid),
STResList46 = [STRes45|STResList45],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF012.xml','./msxsdtest/ModelGroups',valid,S45),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF012.xml','./msxsdtest/ModelGroups',valid,S45),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF013.xsd','./msxsdtest/ModelGroups',valid),
STResList47 = [STRes46|STResList46],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF013.xml','./msxsdtest/ModelGroups',valid,S46),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF013.xml','./msxsdtest/ModelGroups',valid,S46),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF014.xsd','./msxsdtest/ModelGroups',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF014.xml','./msxsdtest/ModelGroups',valid,S47),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF014.xml','./msxsdtest/ModelGroups',valid,S47),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF015.xsd','./msxsdtest/ModelGroups',valid),
STResList49 = [STRes48|STResList48],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF015.xml','./msxsdtest/ModelGroups',valid,S48),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF015.xml','./msxsdtest/ModelGroups',valid,S48),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF016.xsd','./msxsdtest/ModelGroups',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF016.xml','./msxsdtest/ModelGroups',valid,S49),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF016.xml','./msxsdtest/ModelGroups',valid,S49),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF017.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF017.xsd','./msxsdtest/ModelGroups',valid),
STResList51 = [STRes50|STResList50],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF017.xml','./msxsdtest/ModelGroups',valid,S50),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF017.xml','./msxsdtest/ModelGroups',valid,S50),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF018.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF018.xsd','./msxsdtest/ModelGroups',valid),
STResList52 = [STRes51|STResList51],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF018.xml','./msxsdtest/ModelGroups',valid,S51),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF018.xml','./msxsdtest/ModelGroups',valid,S51),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF019.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF019.xsd','./msxsdtest/ModelGroups',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF019.xml','./msxsdtest/ModelGroups',valid,S52),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgF019.xml','./msxsdtest/ModelGroups',valid,S52),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF020.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF020.xsd','./msxsdtest/ModelGroups',invalid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF021.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF021.xsd','./msxsdtest/ModelGroups',invalid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF022.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF022.xsd','./msxsdtest/ModelGroups',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF023.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgF023.xsd','./msxsdtest/ModelGroups',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG001.xsd','./msxsdtest/ModelGroups',valid),
STResList58 = [STRes57|STResList57],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG001.xml','./msxsdtest/ModelGroups',valid,S57),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG001.xml','./msxsdtest/ModelGroups',valid,S57),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG002.xsd','./msxsdtest/ModelGroups',invalid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG003.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG003.xsd','./msxsdtest/ModelGroups',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG003.xml','./msxsdtest/ModelGroups',invalid,S59),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG003.xml','./msxsdtest/ModelGroups',invalid,S59),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG004.xsd','./msxsdtest/ModelGroups',valid),
STResList61 = [STRes60|STResList60],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG004.xml','./msxsdtest/ModelGroups',valid,S60),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG004.xml','./msxsdtest/ModelGroups',valid,S60),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG005.xsd','./msxsdtest/ModelGroups',valid),
STResList62 = [STRes61|STResList61],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG005.xml','./msxsdtest/ModelGroups',invalid,S61),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG005.xml','./msxsdtest/ModelGroups',invalid,S61),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG006.xsd','./msxsdtest/ModelGroups',valid),
STResList63 = [STRes62|STResList62],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG006.xml','./msxsdtest/ModelGroups',valid,S62),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG006.xml','./msxsdtest/ModelGroups',valid,S62),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG007.xsd','./msxsdtest/ModelGroups',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG007.xml','./msxsdtest/ModelGroups',valid,S63),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG007.xml','./msxsdtest/ModelGroups',valid,S63),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG008.xsd','./msxsdtest/ModelGroups',valid),
STResList65 = [STRes64|STResList64],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG008.xml','./msxsdtest/ModelGroups',invalid,S64),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG008.xml','./msxsdtest/ModelGroups',invalid,S64),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG009.xsd','./msxsdtest/ModelGroups',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG009.xml','./msxsdtest/ModelGroups',valid,S65),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG009.xml','./msxsdtest/ModelGroups',valid,S65),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG010.xsd','./msxsdtest/ModelGroups',valid),
STResList67 = [STRes66|STResList66],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG010.xml','./msxsdtest/ModelGroups',valid,S66),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG010.xml','./msxsdtest/ModelGroups',valid,S66),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG011.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG011.xsd','./msxsdtest/ModelGroups',valid),
STResList68 = [STRes67|STResList67],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG011.xml','./msxsdtest/ModelGroups',invalid,S67),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG011.xml','./msxsdtest/ModelGroups',invalid,S67),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG012.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG012.xsd','./msxsdtest/ModelGroups',valid),
STResList69 = [STRes68|STResList68],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG012.xml','./msxsdtest/ModelGroups',valid,S68),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG012.xml','./msxsdtest/ModelGroups',valid,S68),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG013.xsd','./msxsdtest/ModelGroups',valid),
STResList70 = [STRes69|STResList69],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG013.xml','./msxsdtest/ModelGroups',invalid,S69),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG013.xml','./msxsdtest/ModelGroups',invalid,S69),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG014.xsd','./msxsdtest/ModelGroups',valid),
STResList71 = [STRes70|STResList70],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG014.xml','./msxsdtest/ModelGroups',valid,S70),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG014.xml','./msxsdtest/ModelGroups',valid,S70),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG015.xsd','./msxsdtest/ModelGroups',valid),
STResList72 = [STRes71|STResList71],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG015.xml','./msxsdtest/ModelGroups',invalid,S71),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG015.xml','./msxsdtest/ModelGroups',invalid,S71),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG016.xsd','./msxsdtest/ModelGroups',valid),
STResList73 = [STRes72|STResList72],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG016.xml','./msxsdtest/ModelGroups',valid,S72),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG016.xml','./msxsdtest/ModelGroups',valid,S72),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG017.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG017.xsd','./msxsdtest/ModelGroups',valid),
STResList74 = [STRes73|STResList73],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG017.xml','./msxsdtest/ModelGroups',invalid,S73),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG017.xml','./msxsdtest/ModelGroups',invalid,S73),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG018.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG018.xsd','./msxsdtest/ModelGroups',valid),
STResList75 = [STRes74|STResList74],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG018.xml','./msxsdtest/ModelGroups',invalid,S74),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG018.xml','./msxsdtest/ModelGroups',invalid,S74),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG019.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG019.xsd','./msxsdtest/ModelGroups',valid),
STResList76 = [STRes75|STResList75],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG019.xml','./msxsdtest/ModelGroups',valid,S75),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG019.xml','./msxsdtest/ModelGroups',valid,S75),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG020.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG020.xsd','./msxsdtest/ModelGroups',valid),
STResList77 = [STRes76|STResList76],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG020.xml','./msxsdtest/ModelGroups',invalid,S76),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG020.xml','./msxsdtest/ModelGroups',invalid,S76),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG021.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG021.xsd','./msxsdtest/ModelGroups',valid),
STResList78 = [STRes77|STResList77],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG021.xml','./msxsdtest/ModelGroups',invalid,S77),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG021.xml','./msxsdtest/ModelGroups',invalid,S77),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG022.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG022.xsd','./msxsdtest/ModelGroups',valid),
STResList79 = [STRes78|STResList78],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG022.xml','./msxsdtest/ModelGroups',valid,S78),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG022.xml','./msxsdtest/ModelGroups',valid,S78),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG023.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG023.xsd','./msxsdtest/ModelGroups',valid),
STResList80 = [STRes79|STResList79],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG023.xml','./msxsdtest/ModelGroups',valid,S79),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG023.xml','./msxsdtest/ModelGroups',valid,S79),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG024.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG024.xsd','./msxsdtest/ModelGroups',valid),
STResList81 = [STRes80|STResList80],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG024.xml','./msxsdtest/ModelGroups',invalid,S80),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG024.xml','./msxsdtest/ModelGroups',invalid,S80),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG025.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG025.xsd','./msxsdtest/ModelGroups',invalid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG026.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG026.xsd','./msxsdtest/ModelGroups',valid),
STResList83 = [STRes82|STResList82],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG026.xml','./msxsdtest/ModelGroups',valid,S82),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgG026.xml','./msxsdtest/ModelGroups',valid,S82),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG027.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG027.xsd','./msxsdtest/ModelGroups',invalid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG028.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG028.xsd','./msxsdtest/ModelGroups',invalid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG029.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG029.xsd','./msxsdtest/ModelGroups',invalid),
STResList86 = [STRes85|STResList85],
- ?line {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG030.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgG030.xsd','./msxsdtest/ModelGroups',invalid),
STResList87 = [STRes86|STResList86],
@@ -16780,454 +16768,454 @@ mgEFG(Config) when is_list(Config) ->
mgHIJ(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH001.xsd','./msxsdtest/ModelGroups',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH001.xml','./msxsdtest/ModelGroups',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH001.xml','./msxsdtest/ModelGroups',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH002.xsd','./msxsdtest/ModelGroups',invalid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH003.xsd','./msxsdtest/ModelGroups',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH004.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH004.xsd','./msxsdtest/ModelGroups',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH005.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH005.xsd','./msxsdtest/ModelGroups',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH006.xsd','./msxsdtest/ModelGroups',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH007.xsd','./msxsdtest/ModelGroups',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH008.xsd','./msxsdtest/ModelGroups',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH009.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH009.xsd','./msxsdtest/ModelGroups',invalid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH010.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH010.xsd','./msxsdtest/ModelGroups',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH011.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH011.xsd','./msxsdtest/ModelGroups',invalid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH012.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH012.xsd','./msxsdtest/ModelGroups',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH013.xsd','./msxsdtest/ModelGroups',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH013.xml','./msxsdtest/ModelGroups',valid,S12),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH013.xml','./msxsdtest/ModelGroups',valid,S12),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH014.xsd','./msxsdtest/ModelGroups',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH014.xml','./msxsdtest/ModelGroups',valid,S13),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH014.xml','./msxsdtest/ModelGroups',valid,S13),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH015.xsd','./msxsdtest/ModelGroups',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH015.xml','./msxsdtest/ModelGroups',valid,S14),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH015.xml','./msxsdtest/ModelGroups',valid,S14),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH016.xsd','./msxsdtest/ModelGroups',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH016.xml','./msxsdtest/ModelGroups',valid,S15),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH016.xml','./msxsdtest/ModelGroups',valid,S15),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH017.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH017.xsd','./msxsdtest/ModelGroups',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH017.xml','./msxsdtest/ModelGroups',valid,S16),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH017.xml','./msxsdtest/ModelGroups',valid,S16),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH018.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgH018.xsd','./msxsdtest/ModelGroups',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH018.xml','./msxsdtest/ModelGroups',valid,S17),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgH018.xml','./msxsdtest/ModelGroups',valid,S17),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa001.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa001.xsd','./msxsdtest/ModelGroups',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa002.xsd','./msxsdtest/ModelGroups',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa003.xsd','./msxsdtest/ModelGroups',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa004.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa004.xsd','./msxsdtest/ModelGroups',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa005.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa005.xsd','./msxsdtest/ModelGroups',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa006.xsd','./msxsdtest/ModelGroups',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa007.xsd','./msxsdtest/ModelGroups',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHa008.xsd','./msxsdtest/ModelGroups',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb001.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb001.xsd','./msxsdtest/ModelGroups',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb002.xsd','./msxsdtest/ModelGroups',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb003.xsd','./msxsdtest/ModelGroups',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb004.xsd','./msxsdtest/ModelGroups',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgHb004.xml','./msxsdtest/ModelGroups',valid,S29),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgHb004.xml','./msxsdtest/ModelGroups',valid,S29),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb005.xsd','./msxsdtest/ModelGroups',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgHb005.xml','./msxsdtest/ModelGroups',valid,S30),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgHb005.xml','./msxsdtest/ModelGroups',valid,S30),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb006.xsd','./msxsdtest/ModelGroups',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb007.xsd','./msxsdtest/ModelGroups',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgHb008.xsd','./msxsdtest/ModelGroups',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI001.xsd','./msxsdtest/ModelGroups',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI001.xml','./msxsdtest/ModelGroups',valid,S34),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI001.xml','./msxsdtest/ModelGroups',valid,S34),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI002.xsd','./msxsdtest/ModelGroups',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI002.xml','./msxsdtest/ModelGroups',valid,S35),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI002.xml','./msxsdtest/ModelGroups',valid,S35),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI003.xsd','./msxsdtest/ModelGroups',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI004.xsd','./msxsdtest/ModelGroups',valid),
STResList38 = [STRes37|STResList37],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI004.xml','./msxsdtest/ModelGroups',valid,S37),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI004.xml','./msxsdtest/ModelGroups',valid,S37),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI005.xsd','./msxsdtest/ModelGroups',valid),
STResList39 = [STRes38|STResList38],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI005.xml','./msxsdtest/ModelGroups',valid,S38),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI005.xml','./msxsdtest/ModelGroups',valid,S38),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI006.xsd','./msxsdtest/ModelGroups',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI006.xml','./msxsdtest/ModelGroups',valid,S39),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI006.xml','./msxsdtest/ModelGroups',valid,S39),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI007.xsd','./msxsdtest/ModelGroups',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI007.xml','./msxsdtest/ModelGroups',valid,S40),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI007.xml','./msxsdtest/ModelGroups',valid,S40),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI008.xsd','./msxsdtest/ModelGroups',valid),
STResList42 = [STRes41|STResList41],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI008.xml','./msxsdtest/ModelGroups',valid,S41),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI008.xml','./msxsdtest/ModelGroups',valid,S41),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI009.xsd','./msxsdtest/ModelGroups',valid),
STResList43 = [STRes42|STResList42],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI009.xml','./msxsdtest/ModelGroups',valid,S42),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI009.xml','./msxsdtest/ModelGroups',valid,S42),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI010.xsd','./msxsdtest/ModelGroups',valid),
STResList44 = [STRes43|STResList43],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI010.xml','./msxsdtest/ModelGroups',valid,S43),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI010.xml','./msxsdtest/ModelGroups',valid,S43),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI011.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI011.xsd','./msxsdtest/ModelGroups',valid),
STResList45 = [STRes44|STResList44],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI011.xml','./msxsdtest/ModelGroups',valid,S44),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI011.xml','./msxsdtest/ModelGroups',valid,S44),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI012.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI012.xsd','./msxsdtest/ModelGroups',valid),
STResList46 = [STRes45|STResList45],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI012.xml','./msxsdtest/ModelGroups',valid,S45),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI012.xml','./msxsdtest/ModelGroups',valid,S45),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI013.xsd','./msxsdtest/ModelGroups',valid),
STResList47 = [STRes46|STResList46],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI013.xml','./msxsdtest/ModelGroups',valid,S46),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI013.xml','./msxsdtest/ModelGroups',valid,S46),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI014.xsd','./msxsdtest/ModelGroups',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI014.xml','./msxsdtest/ModelGroups',valid,S47),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI014.xml','./msxsdtest/ModelGroups',valid,S47),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI015.xsd','./msxsdtest/ModelGroups',valid),
STResList49 = [STRes48|STResList48],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI015.xml','./msxsdtest/ModelGroups',valid,S48),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI015.xml','./msxsdtest/ModelGroups',valid,S48),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI016.xsd','./msxsdtest/ModelGroups',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI016.xml','./msxsdtest/ModelGroups',valid,S49),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI016.xml','./msxsdtest/ModelGroups',valid,S49),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI017.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI017.xsd','./msxsdtest/ModelGroups',valid),
STResList51 = [STRes50|STResList50],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI017.xml','./msxsdtest/ModelGroups',valid,S50),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI017.xml','./msxsdtest/ModelGroups',valid,S50),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI018.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI018.xsd','./msxsdtest/ModelGroups',valid),
STResList52 = [STRes51|STResList51],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI018.xml','./msxsdtest/ModelGroups',valid,S51),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI018.xml','./msxsdtest/ModelGroups',valid,S51),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI019.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI019.xsd','./msxsdtest/ModelGroups',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI019.xml','./msxsdtest/ModelGroups',valid,S52),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgI019.xml','./msxsdtest/ModelGroups',valid,S52),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI020.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI020.xsd','./msxsdtest/ModelGroups',invalid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI021.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI021.xsd','./msxsdtest/ModelGroups',invalid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI022.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI022.xsd','./msxsdtest/ModelGroups',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI023.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgI023.xsd','./msxsdtest/ModelGroups',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ001.xsd','./msxsdtest/ModelGroups',valid),
STResList58 = [STRes57|STResList57],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ001.xml','./msxsdtest/ModelGroups',valid,S57),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ001.xml','./msxsdtest/ModelGroups',valid,S57),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ002.xsd','./msxsdtest/ModelGroups',invalid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ003.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ003.xsd','./msxsdtest/ModelGroups',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ003.xml','./msxsdtest/ModelGroups',invalid,S59),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ003.xml','./msxsdtest/ModelGroups',invalid,S59),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ004.xsd','./msxsdtest/ModelGroups',valid),
STResList61 = [STRes60|STResList60],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ004.xml','./msxsdtest/ModelGroups',valid,S60),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ004.xml','./msxsdtest/ModelGroups',valid,S60),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ005.xsd','./msxsdtest/ModelGroups',valid),
STResList62 = [STRes61|STResList61],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ005.xml','./msxsdtest/ModelGroups',invalid,S61),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ005.xml','./msxsdtest/ModelGroups',invalid,S61),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ006.xsd','./msxsdtest/ModelGroups',valid),
STResList63 = [STRes62|STResList62],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ006.xml','./msxsdtest/ModelGroups',valid,S62),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ006.xml','./msxsdtest/ModelGroups',valid,S62),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ007.xsd','./msxsdtest/ModelGroups',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ007.xml','./msxsdtest/ModelGroups',valid,S63),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ007.xml','./msxsdtest/ModelGroups',valid,S63),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ008.xsd','./msxsdtest/ModelGroups',valid),
STResList65 = [STRes64|STResList64],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ008.xml','./msxsdtest/ModelGroups',invalid,S64),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ008.xml','./msxsdtest/ModelGroups',invalid,S64),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ009.xsd','./msxsdtest/ModelGroups',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ009.xml','./msxsdtest/ModelGroups',valid,S65),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ009.xml','./msxsdtest/ModelGroups',valid,S65),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ010.xsd','./msxsdtest/ModelGroups',valid),
STResList67 = [STRes66|STResList66],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ010.xml','./msxsdtest/ModelGroups',valid,S66),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ010.xml','./msxsdtest/ModelGroups',valid,S66),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ011.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ011.xsd','./msxsdtest/ModelGroups',valid),
STResList68 = [STRes67|STResList67],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ011.xml','./msxsdtest/ModelGroups',invalid,S67),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ011.xml','./msxsdtest/ModelGroups',invalid,S67),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ012.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ012.xsd','./msxsdtest/ModelGroups',valid),
STResList69 = [STRes68|STResList68],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ012.xml','./msxsdtest/ModelGroups',valid,S68),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ012.xml','./msxsdtest/ModelGroups',valid,S68),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ013.xsd','./msxsdtest/ModelGroups',valid),
STResList70 = [STRes69|STResList69],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ013.xml','./msxsdtest/ModelGroups',invalid,S69),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ013.xml','./msxsdtest/ModelGroups',invalid,S69),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ014.xsd','./msxsdtest/ModelGroups',valid),
STResList71 = [STRes70|STResList70],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ014.xml','./msxsdtest/ModelGroups',valid,S70),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ014.xml','./msxsdtest/ModelGroups',valid,S70),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ015.xsd','./msxsdtest/ModelGroups',valid),
STResList72 = [STRes71|STResList71],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ015.xml','./msxsdtest/ModelGroups',invalid,S71),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ015.xml','./msxsdtest/ModelGroups',invalid,S71),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ016.xsd','./msxsdtest/ModelGroups',valid),
STResList73 = [STRes72|STResList72],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ016.xml','./msxsdtest/ModelGroups',valid,S72),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ016.xml','./msxsdtest/ModelGroups',valid,S72),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ017.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ017.xsd','./msxsdtest/ModelGroups',valid),
STResList74 = [STRes73|STResList73],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ017.xml','./msxsdtest/ModelGroups',invalid,S73),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ017.xml','./msxsdtest/ModelGroups',invalid,S73),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ018.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ018.xsd','./msxsdtest/ModelGroups',valid),
STResList75 = [STRes74|STResList74],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ018.xml','./msxsdtest/ModelGroups',invalid,S74),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ018.xml','./msxsdtest/ModelGroups',invalid,S74),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ019.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ019.xsd','./msxsdtest/ModelGroups',valid),
STResList76 = [STRes75|STResList75],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ019.xml','./msxsdtest/ModelGroups',valid,S75),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ019.xml','./msxsdtest/ModelGroups',valid,S75),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ020.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ020.xsd','./msxsdtest/ModelGroups',valid),
STResList77 = [STRes76|STResList76],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ020.xml','./msxsdtest/ModelGroups',invalid,S76),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ020.xml','./msxsdtest/ModelGroups',invalid,S76),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ021.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ021.xsd','./msxsdtest/ModelGroups',valid),
STResList78 = [STRes77|STResList77],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ021.xml','./msxsdtest/ModelGroups',invalid,S77),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ021.xml','./msxsdtest/ModelGroups',invalid,S77),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ022.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ022.xsd','./msxsdtest/ModelGroups',valid),
STResList79 = [STRes78|STResList78],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ022.xml','./msxsdtest/ModelGroups',valid,S78),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ022.xml','./msxsdtest/ModelGroups',valid,S78),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ023.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ023.xsd','./msxsdtest/ModelGroups',valid),
STResList80 = [STRes79|STResList79],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ023.xml','./msxsdtest/ModelGroups',valid,S79),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ023.xml','./msxsdtest/ModelGroups',valid,S79),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ024.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ024.xsd','./msxsdtest/ModelGroups',valid),
STResList81 = [STRes80|STResList80],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ024.xml','./msxsdtest/ModelGroups',invalid,S80),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ024.xml','./msxsdtest/ModelGroups',invalid,S80),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ025.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ025.xsd','./msxsdtest/ModelGroups',invalid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ026.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ026.xsd','./msxsdtest/ModelGroups',valid),
STResList83 = [STRes82|STResList82],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ026.xml','./msxsdtest/ModelGroups',valid,S82),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgJ026.xml','./msxsdtest/ModelGroups',valid,S82),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ027.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ027.xsd','./msxsdtest/ModelGroups',invalid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ028.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ028.xsd','./msxsdtest/ModelGroups',invalid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ029.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ029.xsd','./msxsdtest/ModelGroups',invalid),
STResList86 = [STRes85|STResList85],
- ?line {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ030.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgJ030.xsd','./msxsdtest/ModelGroups',invalid),
STResList87 = [STRes86|STResList86],
@@ -17238,64 +17226,64 @@ mgHIJ(Config) when is_list(Config) ->
mgK(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK001.xsd','./msxsdtest/ModelGroups',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK001.xml','./msxsdtest/ModelGroups',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK001.xml','./msxsdtest/ModelGroups',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK002.xsd','./msxsdtest/ModelGroups',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK002.xml','./msxsdtest/ModelGroups',invalid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK002.xml','./msxsdtest/ModelGroups',invalid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK003.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK003.xsd','./msxsdtest/ModelGroups',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK003.xml','./msxsdtest/ModelGroups',invalid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK003.xml','./msxsdtest/ModelGroups',invalid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK004.xsd','./msxsdtest/ModelGroups',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK004.xml','./msxsdtest/ModelGroups',valid,S3),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK004.xml','./msxsdtest/ModelGroups',valid,S3),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK005.xsd','./msxsdtest/ModelGroups',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK005.xml','./msxsdtest/ModelGroups',invalid,S4),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK005.xml','./msxsdtest/ModelGroups',invalid,S4),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK006.xsd','./msxsdtest/ModelGroups',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK006.xml','./msxsdtest/ModelGroups',invalid,S5),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK006.xml','./msxsdtest/ModelGroups',invalid,S5),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK007.xsd','./msxsdtest/ModelGroups',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK007.xml','./msxsdtest/ModelGroups',invalid,S6),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK007.xml','./msxsdtest/ModelGroups',invalid,S6),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK008.xsd','./msxsdtest/ModelGroups',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK008.xml','./msxsdtest/ModelGroups',invalid,S7),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK008.xml','./msxsdtest/ModelGroups',invalid,S7),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK009.xsd','./msxsdtest/ModelGroups',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK009.xml','./msxsdtest/ModelGroups',valid,S8),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK009.xml','./msxsdtest/ModelGroups',valid,S8),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgK010.xsd','./msxsdtest/ModelGroups',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK010.xml','./msxsdtest/ModelGroups',invalid,S9),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgK010.xml','./msxsdtest/ModelGroups',invalid,S9),
ITResList10 = [ITRes9|ITResList9],
@@ -17306,142 +17294,142 @@ mgK(Config) when is_list(Config) ->
mgLM(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL001.xsd','./msxsdtest/ModelGroups',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL001.xml','./msxsdtest/ModelGroups',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL001.xml','./msxsdtest/ModelGroups',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL002.xsd','./msxsdtest/ModelGroups',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL002.xml','./msxsdtest/ModelGroups',invalid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL002.xml','./msxsdtest/ModelGroups',invalid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL003.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL003.xsd','./msxsdtest/ModelGroups',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL003.xml','./msxsdtest/ModelGroups',invalid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL003.xml','./msxsdtest/ModelGroups',invalid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL004.xsd','./msxsdtest/ModelGroups',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL004.xml','./msxsdtest/ModelGroups',valid,S3),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL004.xml','./msxsdtest/ModelGroups',valid,S3),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL005.xsd','./msxsdtest/ModelGroups',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL005.xml','./msxsdtest/ModelGroups',invalid,S4),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL005.xml','./msxsdtest/ModelGroups',invalid,S4),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL006.xsd','./msxsdtest/ModelGroups',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL006.xml','./msxsdtest/ModelGroups',valid,S5),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL006.xml','./msxsdtest/ModelGroups',valid,S5),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL007.xsd','./msxsdtest/ModelGroups',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL007.xml','./msxsdtest/ModelGroups',invalid,S6),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL007.xml','./msxsdtest/ModelGroups',invalid,S6),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL008.xsd','./msxsdtest/ModelGroups',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL008.xml','./msxsdtest/ModelGroups',valid,S7),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL008.xml','./msxsdtest/ModelGroups',valid,S7),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL009.xsd','./msxsdtest/ModelGroups',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL009.xml','./msxsdtest/ModelGroups',valid,S8),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL009.xml','./msxsdtest/ModelGroups',valid,S8),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgL010.xsd','./msxsdtest/ModelGroups',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL010.xml','./msxsdtest/ModelGroups',invalid,S9),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgL010.xml','./msxsdtest/ModelGroups',invalid,S9),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM002.xsd','./msxsdtest/ModelGroups',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM002.xml','./msxsdtest/ModelGroups',invalid,S10),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM002.xml','./msxsdtest/ModelGroups',invalid,S10),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM003.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM003.xsd','./msxsdtest/ModelGroups',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM003.xml','./msxsdtest/ModelGroups',invalid,S11),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM003.xml','./msxsdtest/ModelGroups',invalid,S11),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM004.xsd','./msxsdtest/ModelGroups',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM004.xml','./msxsdtest/ModelGroups',valid,S12),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM004.xml','./msxsdtest/ModelGroups',valid,S12),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM005.xsd','./msxsdtest/ModelGroups',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM005.xml','./msxsdtest/ModelGroups',invalid,S13),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM005.xml','./msxsdtest/ModelGroups',invalid,S13),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM006.xsd','./msxsdtest/ModelGroups',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM006.xml','./msxsdtest/ModelGroups',invalid,S14),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM006.xml','./msxsdtest/ModelGroups',invalid,S14),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM007.xsd','./msxsdtest/ModelGroups',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM007.xml','./msxsdtest/ModelGroups',invalid,S15),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM007.xml','./msxsdtest/ModelGroups',invalid,S15),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM008.xsd','./msxsdtest/ModelGroups',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM008.xml','./msxsdtest/ModelGroups',valid,S16),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM008.xml','./msxsdtest/ModelGroups',valid,S16),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM009.xsd','./msxsdtest/ModelGroups',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM009.xml','./msxsdtest/ModelGroups',valid,S17),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM009.xml','./msxsdtest/ModelGroups',valid,S17),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM010.xsd','./msxsdtest/ModelGroups',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM010.xml','./msxsdtest/ModelGroups',invalid,S18),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM010.xml','./msxsdtest/ModelGroups',invalid,S18),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM011.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM011.xsd','./msxsdtest/ModelGroups',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM011.xml','./msxsdtest/ModelGroups',valid,S19),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM011.xml','./msxsdtest/ModelGroups',valid,S19),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM012.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM012.xsd','./msxsdtest/ModelGroups',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM012.xml','./msxsdtest/ModelGroups',invalid,S20),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM012.xml','./msxsdtest/ModelGroups',invalid,S20),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM013.xsd','./msxsdtest/ModelGroups',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM013.xml','./msxsdtest/ModelGroups',valid,S21),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM013.xml','./msxsdtest/ModelGroups',valid,S21),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgM014.xsd','./msxsdtest/ModelGroups',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM014.xml','./msxsdtest/ModelGroups',invalid,S22),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgM014.xml','./msxsdtest/ModelGroups',invalid,S22),
ITResList23 = [ITRes22|ITResList22],
@@ -17452,100 +17440,100 @@ mgLM(Config) when is_list(Config) ->
mgN(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN001.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN001.xsd','./msxsdtest/ModelGroups',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN001.xml','./msxsdtest/ModelGroups',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN001.xml','./msxsdtest/ModelGroups',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN002.xsd','./msxsdtest/ModelGroups',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN002.xml','./msxsdtest/ModelGroups',invalid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN002.xml','./msxsdtest/ModelGroups',invalid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN003.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN003.xsd','./msxsdtest/ModelGroups',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN003.xml','./msxsdtest/ModelGroups',invalid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN003.xml','./msxsdtest/ModelGroups',invalid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN004.xsd','./msxsdtest/ModelGroups',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN004.xml','./msxsdtest/ModelGroups',invalid,S3),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN004.xml','./msxsdtest/ModelGroups',invalid,S3),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN005.xsd','./msxsdtest/ModelGroups',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN005.xml','./msxsdtest/ModelGroups',valid,S4),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN005.xml','./msxsdtest/ModelGroups',valid,S4),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN006.xsd','./msxsdtest/ModelGroups',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN006.xml','./msxsdtest/ModelGroups',invalid,S5),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN006.xml','./msxsdtest/ModelGroups',invalid,S5),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN007.xsd','./msxsdtest/ModelGroups',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN007.xml','./msxsdtest/ModelGroups',invalid,S6),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN007.xml','./msxsdtest/ModelGroups',invalid,S6),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN008.xsd','./msxsdtest/ModelGroups',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN008.xml','./msxsdtest/ModelGroups',invalid,S7),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN008.xml','./msxsdtest/ModelGroups',invalid,S7),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN009.xsd','./msxsdtest/ModelGroups',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN009.xml','./msxsdtest/ModelGroups',invalid,S8),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN009.xml','./msxsdtest/ModelGroups',invalid,S8),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN010.xsd','./msxsdtest/ModelGroups',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN010.xml','./msxsdtest/ModelGroups',invalid,S9),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN010.xml','./msxsdtest/ModelGroups',invalid,S9),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN011.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN011.xsd','./msxsdtest/ModelGroups',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN011.xml','./msxsdtest/ModelGroups',invalid,S10),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN011.xml','./msxsdtest/ModelGroups',invalid,S10),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN012.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN012.xsd','./msxsdtest/ModelGroups',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN012.xml','./msxsdtest/ModelGroups',valid,S11),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN012.xml','./msxsdtest/ModelGroups',valid,S11),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN013.xsd','./msxsdtest/ModelGroups',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN013.xml','./msxsdtest/ModelGroups',invalid,S12),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN013.xml','./msxsdtest/ModelGroups',invalid,S12),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN014.xsd','./msxsdtest/ModelGroups',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN014.xml','./msxsdtest/ModelGroups',invalid,S13),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN014.xml','./msxsdtest/ModelGroups',invalid,S13),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN015.xsd','./msxsdtest/ModelGroups',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN015.xml','./msxsdtest/ModelGroups',invalid,S14),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN015.xml','./msxsdtest/ModelGroups',invalid,S14),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgN016.xsd','./msxsdtest/ModelGroups',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN016.xml','./msxsdtest/ModelGroups',invalid,S15),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgN016.xml','./msxsdtest/ModelGroups',invalid,S15),
ITResList16 = [ITRes15|ITResList15],
@@ -17556,262 +17544,262 @@ mgN(Config) when is_list(Config) ->
mgOP(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO001.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO001.xsd','./msxsdtest/ModelGroups',invalid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO002.xsd','./msxsdtest/ModelGroups',valid),
STResList2 = [STRes1|STResList1],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO002.xml','./msxsdtest/ModelGroups',valid,S1),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO002.xml','./msxsdtest/ModelGroups',valid,S1),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO003.xsd','./msxsdtest/ModelGroups',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO004.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO004.xsd','./msxsdtest/ModelGroups',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO004.xml','./msxsdtest/ModelGroups',valid,S3),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO004.xml','./msxsdtest/ModelGroups',valid,S3),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO005.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO005.xsd','./msxsdtest/ModelGroups',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO005.xml','./msxsdtest/ModelGroups',valid,S4),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO005.xml','./msxsdtest/ModelGroups',valid,S4),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO006.xsd','./msxsdtest/ModelGroups',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO006.xml','./msxsdtest/ModelGroups',valid,S5),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO006.xml','./msxsdtest/ModelGroups',valid,S5),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO007.xsd','./msxsdtest/ModelGroups',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO007.xml','./msxsdtest/ModelGroups',valid,S6),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO007.xml','./msxsdtest/ModelGroups',valid,S6),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO008.xsd','./msxsdtest/ModelGroups',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO008.xml','./msxsdtest/ModelGroups',valid,S7),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO008.xml','./msxsdtest/ModelGroups',valid,S7),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO009.xsd','./msxsdtest/ModelGroups',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO009.xml','./msxsdtest/ModelGroups',valid,S8),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO009.xml','./msxsdtest/ModelGroups',valid,S8),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO010.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO010.xsd','./msxsdtest/ModelGroups',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO010.xml','./msxsdtest/ModelGroups',valid,S9),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO010.xml','./msxsdtest/ModelGroups',valid,S9),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO011.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO011.xsd','./msxsdtest/ModelGroups',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO011.xml','./msxsdtest/ModelGroups',valid,S10),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO011.xml','./msxsdtest/ModelGroups',valid,S10),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO012.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO012.xsd','./msxsdtest/ModelGroups',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO013.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO013.xsd','./msxsdtest/ModelGroups',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO013.xml','./msxsdtest/ModelGroups',valid,S12),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO013.xml','./msxsdtest/ModelGroups',valid,S12),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO014.xsd','./msxsdtest/ModelGroups',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO014.xml','./msxsdtest/ModelGroups',valid,S13),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO014.xml','./msxsdtest/ModelGroups',valid,S13),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO015.xsd','./msxsdtest/ModelGroups',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO015.xml','./msxsdtest/ModelGroups',valid,S14),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO015.xml','./msxsdtest/ModelGroups',valid,S14),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO016.xsd','./msxsdtest/ModelGroups',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO016.xml','./msxsdtest/ModelGroups',valid,S15),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO016.xml','./msxsdtest/ModelGroups',valid,S15),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO017.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO017.xsd','./msxsdtest/ModelGroups',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO017.xml','./msxsdtest/ModelGroups',valid,S16),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO017.xml','./msxsdtest/ModelGroups',valid,S16),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO018.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO018.xsd','./msxsdtest/ModelGroups',invalid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO019.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO019.xsd','./msxsdtest/ModelGroups',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO020.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO020.xsd','./msxsdtest/ModelGroups',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO021.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO021.xsd','./msxsdtest/ModelGroups',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO022.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO022.xsd','./msxsdtest/ModelGroups',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO023.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO023.xsd','./msxsdtest/ModelGroups',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO024.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO024.xsd','./msxsdtest/ModelGroups',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO025.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO025.xsd','./msxsdtest/ModelGroups',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO026.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO026.xsd','./msxsdtest/ModelGroups',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO027.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO027.xsd','./msxsdtest/ModelGroups',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO028.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO028.xsd','./msxsdtest/ModelGroups',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO028.xml','./msxsdtest/ModelGroups',valid,S27),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO028.xml','./msxsdtest/ModelGroups',valid,S27),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO029.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO029.xsd','./msxsdtest/ModelGroups',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO029.xml','./msxsdtest/ModelGroups',valid,S28),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO029.xml','./msxsdtest/ModelGroups',valid,S28),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO030.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO030.xsd','./msxsdtest/ModelGroups',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO030.xml','./msxsdtest/ModelGroups',valid,S29),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO030.xml','./msxsdtest/ModelGroups',valid,S29),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO031.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO031.xsd','./msxsdtest/ModelGroups',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO031.xml','./msxsdtest/ModelGroups',valid,S30),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO031.xml','./msxsdtest/ModelGroups',valid,S30),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO032.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO032.xsd','./msxsdtest/ModelGroups',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO033.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO033.xsd','./msxsdtest/ModelGroups',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO034.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO034.xsd','./msxsdtest/ModelGroups',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO034.xml','./msxsdtest/ModelGroups',valid,S33),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO034.xml','./msxsdtest/ModelGroups',valid,S33),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO035.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO035.xsd','./msxsdtest/ModelGroups',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO035.xml','./msxsdtest/ModelGroups',valid,S34),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO035.xml','./msxsdtest/ModelGroups',valid,S34),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO036.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO036.xsd','./msxsdtest/ModelGroups',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO036.xml','./msxsdtest/ModelGroups',valid,S35),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO036.xml','./msxsdtest/ModelGroups',valid,S35),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO037.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO037.xsd','./msxsdtest/ModelGroups',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO037.xml','./msxsdtest/ModelGroups',valid,S36),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO037.xml','./msxsdtest/ModelGroups',valid,S36),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO038.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgO038.xsd','./msxsdtest/ModelGroups',valid),
STResList38 = [STRes37|STResList37],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO038.xml','./msxsdtest/ModelGroups',valid,S37),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgO038.xml','./msxsdtest/ModelGroups',valid,S37),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP039.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP039.xsd','./msxsdtest/ModelGroups',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP040.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP040.xsd','./msxsdtest/ModelGroups',invalid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP041.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP041.xsd','./msxsdtest/ModelGroups',invalid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP042.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP042.xsd','./msxsdtest/ModelGroups',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP043.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP043.xsd','./msxsdtest/ModelGroups',invalid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP049.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP049.xsd','./msxsdtest/ModelGroups',invalid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP050.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP050.xsd','./msxsdtest/ModelGroups',invalid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP055.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP055.xsd','./msxsdtest/ModelGroups',invalid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP056.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP056.xsd','./msxsdtest/ModelGroups',invalid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP057.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP057.xsd','./msxsdtest/ModelGroups',invalid),
STResList48 = [STRes47|STResList47],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP058.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP058.xsd','./msxsdtest/ModelGroups',invalid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP059.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP059.xsd','./msxsdtest/ModelGroups',invalid),
STResList50 = [STRes49|STResList49],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP060.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP060.xsd','./msxsdtest/ModelGroups',invalid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP061.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP061.xsd','./msxsdtest/ModelGroups',invalid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP062.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgP062.xsd','./msxsdtest/ModelGroups',invalid),
STResList53 = [STRes52|STResList52],
@@ -17822,202 +17810,202 @@ mgOP(Config) when is_list(Config) ->
mgQR(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ001.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ001.xsd','./msxsdtest/ModelGroups',invalid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ002.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ002.xsd','./msxsdtest/ModelGroups',valid),
STResList2 = [STRes1|STResList1],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ002.xml','./msxsdtest/ModelGroups',valid,S1),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ002.xml','./msxsdtest/ModelGroups',valid,S1),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ003.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ003.xsd','./msxsdtest/ModelGroups',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ003.xml','./msxsdtest/ModelGroups',valid,S2),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ003.xml','./msxsdtest/ModelGroups',valid,S2),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ004.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ004.xsd','./msxsdtest/ModelGroups',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ005.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ005.xsd','./msxsdtest/ModelGroups',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ006.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ006.xsd','./msxsdtest/ModelGroups',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ006.xml','./msxsdtest/ModelGroups',valid,S5),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ006.xml','./msxsdtest/ModelGroups',valid,S5),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ007.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ007.xsd','./msxsdtest/ModelGroups',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ007.xml','./msxsdtest/ModelGroups',valid,S6),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ007.xml','./msxsdtest/ModelGroups',valid,S6),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ008.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ008.xsd','./msxsdtest/ModelGroups',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ008.xml','./msxsdtest/ModelGroups',valid,S7),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ008.xml','./msxsdtest/ModelGroups',valid,S7),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ009.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ009.xsd','./msxsdtest/ModelGroups',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ009.xml','./msxsdtest/ModelGroups',valid,S8),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ009.xml','./msxsdtest/ModelGroups',valid,S8),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ010.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ010.xsd','./msxsdtest/ModelGroups',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ011.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ011.xsd','./msxsdtest/ModelGroups',invalid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ012.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ012.xsd','./msxsdtest/ModelGroups',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ013.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ013.xsd','./msxsdtest/ModelGroups',invalid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ014.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ014.xsd','./msxsdtest/ModelGroups',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ014.xml','./msxsdtest/ModelGroups',valid,S13),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ014.xml','./msxsdtest/ModelGroups',valid,S13),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ015.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ015.xsd','./msxsdtest/ModelGroups',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ015.xml','./msxsdtest/ModelGroups',valid,S14),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ015.xml','./msxsdtest/ModelGroups',valid,S14),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ016.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ016.xsd','./msxsdtest/ModelGroups',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ016.xml','./msxsdtest/ModelGroups',valid,S15),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ016.xml','./msxsdtest/ModelGroups',valid,S15),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ017.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ017.xsd','./msxsdtest/ModelGroups',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ017.xml','./msxsdtest/ModelGroups',valid,S16),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ017.xml','./msxsdtest/ModelGroups',valid,S16),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ018.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ018.xsd','./msxsdtest/ModelGroups',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ018.xml','./msxsdtest/ModelGroups',valid,S17),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ018.xml','./msxsdtest/ModelGroups',valid,S17),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ019.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ019.xsd','./msxsdtest/ModelGroups',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ019.xml','./msxsdtest/ModelGroups',valid,S18),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ019.xml','./msxsdtest/ModelGroups',valid,S18),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ020.xsd','./msxsdtest/ModelGroups',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ020.xsd','./msxsdtest/ModelGroups',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ020.xml','./msxsdtest/ModelGroups',valid,S19),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/ModelGroups/mgQ020.xml','./msxsdtest/ModelGroups',valid,S19),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ021.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgQ021.xsd','./msxsdtest/ModelGroups',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR001.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR001.xsd','./msxsdtest/ModelGroups',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR002.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR002.xsd','./msxsdtest/ModelGroups',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR003.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR003.xsd','./msxsdtest/ModelGroups',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR004.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR004.xsd','./msxsdtest/ModelGroups',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR005.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR005.xsd','./msxsdtest/ModelGroups',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR006.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR006.xsd','./msxsdtest/ModelGroups',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR007.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR007.xsd','./msxsdtest/ModelGroups',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR008.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR008.xsd','./msxsdtest/ModelGroups',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR009.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR009.xsd','./msxsdtest/ModelGroups',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR010.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR010.xsd','./msxsdtest/ModelGroups',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR011.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR011.xsd','./msxsdtest/ModelGroups',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR012.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR012.xsd','./msxsdtest/ModelGroups',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR013.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR013.xsd','./msxsdtest/ModelGroups',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR014.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR014.xsd','./msxsdtest/ModelGroups',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR015.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR015.xsd','./msxsdtest/ModelGroups',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR016.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR016.xsd','./msxsdtest/ModelGroups',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR017.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR017.xsd','./msxsdtest/ModelGroups',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR018.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR018.xsd','./msxsdtest/ModelGroups',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR019.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR019.xsd','./msxsdtest/ModelGroups',invalid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR020.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR020.xsd','./msxsdtest/ModelGroups',invalid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR021.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR021.xsd','./msxsdtest/ModelGroups',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR022.xsd','./msxsdtest/ModelGroups',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/ModelGroups/mgR022.xsd','./msxsdtest/ModelGroups',invalid),
STResList43 = [STRes42|STResList42],
@@ -18041,184 +18029,184 @@ mgS(Config) when is_list(Config) ->
particlesAB(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA001.xsd','./msxsdtest/Particles',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA001.xsd','./msxsdtest/Particles',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA001.xml','./msxsdtest/Particles',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA001.xml','./msxsdtest/Particles',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA002.xsd','./msxsdtest/Particles',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA002.xsd','./msxsdtest/Particles',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA002.xml','./msxsdtest/Particles',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA002.xml','./msxsdtest/Particles',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA003.xsd','./msxsdtest/Particles',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA003.xsd','./msxsdtest/Particles',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA003.xml','./msxsdtest/Particles',invalid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA003.xml','./msxsdtest/Particles',invalid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA004.xsd','./msxsdtest/Particles',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA004.xsd','./msxsdtest/Particles',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA004.xml','./msxsdtest/Particles',invalid,S3),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA004.xml','./msxsdtest/Particles',invalid,S3),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA005.xsd','./msxsdtest/Particles',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA005.xsd','./msxsdtest/Particles',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA005.xml','./msxsdtest/Particles',invalid,S4),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA005.xml','./msxsdtest/Particles',invalid,S4),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA006.xsd','./msxsdtest/Particles',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA006.xsd','./msxsdtest/Particles',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA006.xml','./msxsdtest/Particles',valid,S5),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA006.xml','./msxsdtest/Particles',valid,S5),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA007.xsd','./msxsdtest/Particles',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA007.xsd','./msxsdtest/Particles',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA007.xml','./msxsdtest/Particles',valid,S6),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA007.xml','./msxsdtest/Particles',valid,S6),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA008.xsd','./msxsdtest/Particles',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA008.xsd','./msxsdtest/Particles',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA008.xml','./msxsdtest/Particles',invalid,S7),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA008.xml','./msxsdtest/Particles',invalid,S7),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA009.xsd','./msxsdtest/Particles',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA009.xsd','./msxsdtest/Particles',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA009.xml','./msxsdtest/Particles',invalid,S8),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA009.xml','./msxsdtest/Particles',invalid,S8),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA010.xsd','./msxsdtest/Particles',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA010.xsd','./msxsdtest/Particles',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA010.xml','./msxsdtest/Particles',valid,S9),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA010.xml','./msxsdtest/Particles',valid,S9),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA011.xsd','./msxsdtest/Particles',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA011.xsd','./msxsdtest/Particles',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA011.xml','./msxsdtest/Particles',valid,S10),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA011.xml','./msxsdtest/Particles',valid,S10),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA012.xsd','./msxsdtest/Particles',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA012.xsd','./msxsdtest/Particles',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA012.xml','./msxsdtest/Particles',invalid,S11),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA012.xml','./msxsdtest/Particles',invalid,S11),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA013.xsd','./msxsdtest/Particles',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA013.xsd','./msxsdtest/Particles',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA013.xml','./msxsdtest/Particles',invalid,S12),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA013.xml','./msxsdtest/Particles',invalid,S12),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA014.xsd','./msxsdtest/Particles',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA014.xsd','./msxsdtest/Particles',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA014.xml','./msxsdtest/Particles',valid,S13),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA014.xml','./msxsdtest/Particles',valid,S13),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA015.xsd','./msxsdtest/Particles',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesA015.xsd','./msxsdtest/Particles',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA015.xml','./msxsdtest/Particles',valid,S14),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesA015.xml','./msxsdtest/Particles',valid,S14),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB001.xsd','./msxsdtest/Particles',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB001.xsd','./msxsdtest/Particles',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB001.xml','./msxsdtest/Particles',invalid,S15),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB001.xml','./msxsdtest/Particles',invalid,S15),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB002.xsd','./msxsdtest/Particles',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB002.xsd','./msxsdtest/Particles',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB002.xml','./msxsdtest/Particles',valid,S16),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB002.xml','./msxsdtest/Particles',valid,S16),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB003.xsd','./msxsdtest/Particles',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB003.xsd','./msxsdtest/Particles',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB003.xml','./msxsdtest/Particles',invalid,S17),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB003.xml','./msxsdtest/Particles',invalid,S17),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB004.xsd','./msxsdtest/Particles',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB004.xsd','./msxsdtest/Particles',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB004.xml','./msxsdtest/Particles',invalid,S18),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB004.xml','./msxsdtest/Particles',invalid,S18),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB005.xsd','./msxsdtest/Particles',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB005.xsd','./msxsdtest/Particles',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB005.xml','./msxsdtest/Particles',valid,S19),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB005.xml','./msxsdtest/Particles',valid,S19),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB006.xsd','./msxsdtest/Particles',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB006.xsd','./msxsdtest/Particles',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB006.xml','./msxsdtest/Particles',valid,S20),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB006.xml','./msxsdtest/Particles',valid,S20),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB007.xsd','./msxsdtest/Particles',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB007.xsd','./msxsdtest/Particles',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB007.xml','./msxsdtest/Particles',invalid,S21),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB007.xml','./msxsdtest/Particles',invalid,S21),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB008.xsd','./msxsdtest/Particles',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB008.xsd','./msxsdtest/Particles',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB008.xml','./msxsdtest/Particles',invalid,S22),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB008.xml','./msxsdtest/Particles',invalid,S22),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB009.xsd','./msxsdtest/Particles',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB009.xsd','./msxsdtest/Particles',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB009.xml','./msxsdtest/Particles',valid,S23),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB009.xml','./msxsdtest/Particles',valid,S23),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB010.xsd','./msxsdtest/Particles',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB010.xsd','./msxsdtest/Particles',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB010.xml','./msxsdtest/Particles',valid,S24),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB010.xml','./msxsdtest/Particles',valid,S24),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB011.xsd','./msxsdtest/Particles',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB011.xsd','./msxsdtest/Particles',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB011.xml','./msxsdtest/Particles',invalid,S25),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB011.xml','./msxsdtest/Particles',invalid,S25),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB012.xsd','./msxsdtest/Particles',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB012.xsd','./msxsdtest/Particles',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB012.xml','./msxsdtest/Particles',invalid,S26),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB012.xml','./msxsdtest/Particles',invalid,S26),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB013.xsd','./msxsdtest/Particles',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB013.xsd','./msxsdtest/Particles',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB013.xml','./msxsdtest/Particles',valid,S27),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB013.xml','./msxsdtest/Particles',valid,S27),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB014.xsd','./msxsdtest/Particles',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB014.xsd','./msxsdtest/Particles',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB014.xml','./msxsdtest/Particles',valid,S28),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB014.xml','./msxsdtest/Particles',valid,S28),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB015.xsd','./msxsdtest/Particles',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesB015.xsd','./msxsdtest/Particles',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB015.xml','./msxsdtest/Particles',invalid,S29),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesB015.xml','./msxsdtest/Particles',invalid,S29),
ITResList30 = [ITRes29|ITResList29],
@@ -18229,1100 +18217,1100 @@ particlesAB(Config) when is_list(Config) ->
particlesCDE(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC001.xsd','./msxsdtest/Particles',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC001.xsd','./msxsdtest/Particles',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC001.xml','./msxsdtest/Particles',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC001.xml','./msxsdtest/Particles',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC002.xsd','./msxsdtest/Particles',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC002.xsd','./msxsdtest/Particles',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC002.xml','./msxsdtest/Particles',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC002.xml','./msxsdtest/Particles',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC003.xsd','./msxsdtest/Particles',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC003.xsd','./msxsdtest/Particles',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC003.xml','./msxsdtest/Particles',valid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC003.xml','./msxsdtest/Particles',valid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC004.xsd','./msxsdtest/Particles',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC004.xsd','./msxsdtest/Particles',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC004.xml','./msxsdtest/Particles',valid,S3),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC004.xml','./msxsdtest/Particles',valid,S3),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC005.xsd','./msxsdtest/Particles',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC005.xsd','./msxsdtest/Particles',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC005.xml','./msxsdtest/Particles',valid,S4),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC005.xml','./msxsdtest/Particles',valid,S4),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC006.xsd','./msxsdtest/Particles',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC006.xsd','./msxsdtest/Particles',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC006.xml','./msxsdtest/Particles',valid,S5),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC006.xml','./msxsdtest/Particles',valid,S5),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC007.xsd','./msxsdtest/Particles',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC007.xsd','./msxsdtest/Particles',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC007.xml','./msxsdtest/Particles',invalid,S6),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC007.xml','./msxsdtest/Particles',invalid,S6),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC008.xsd','./msxsdtest/Particles',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC008.xsd','./msxsdtest/Particles',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC008.xml','./msxsdtest/Particles',valid,S7),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC008.xml','./msxsdtest/Particles',valid,S7),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC009.xsd','./msxsdtest/Particles',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC009.xsd','./msxsdtest/Particles',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC009.xml','./msxsdtest/Particles',valid,S8),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC009.xml','./msxsdtest/Particles',valid,S8),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC010.xsd','./msxsdtest/Particles',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC010.xsd','./msxsdtest/Particles',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC010.xml','./msxsdtest/Particles',valid,S9),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC010.xml','./msxsdtest/Particles',valid,S9),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC011.xsd','./msxsdtest/Particles',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC011.xsd','./msxsdtest/Particles',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC011.xml','./msxsdtest/Particles',valid,S10),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC011.xml','./msxsdtest/Particles',valid,S10),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC012.xsd','./msxsdtest/Particles',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC012.xsd','./msxsdtest/Particles',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC012.xml','./msxsdtest/Particles',invalid,S11),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC012.xml','./msxsdtest/Particles',invalid,S11),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC013.xsd','./msxsdtest/Particles',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC013.xsd','./msxsdtest/Particles',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC013.xml','./msxsdtest/Particles',invalid,S12),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC013.xml','./msxsdtest/Particles',invalid,S12),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC014.xsd','./msxsdtest/Particles',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC014.xsd','./msxsdtest/Particles',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC014.xml','./msxsdtest/Particles',invalid,S13),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC014.xml','./msxsdtest/Particles',invalid,S13),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC015.xsd','./msxsdtest/Particles',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC015.xsd','./msxsdtest/Particles',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC015.xml','./msxsdtest/Particles',valid,S14),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC015.xml','./msxsdtest/Particles',valid,S14),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC016.xsd','./msxsdtest/Particles',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC016.xsd','./msxsdtest/Particles',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC016.xml','./msxsdtest/Particles',valid,S15),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC016.xml','./msxsdtest/Particles',valid,S15),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC017.xsd','./msxsdtest/Particles',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC017.xsd','./msxsdtest/Particles',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC017.xml','./msxsdtest/Particles',invalid,S16),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC017.xml','./msxsdtest/Particles',invalid,S16),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC018.xsd','./msxsdtest/Particles',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC018.xsd','./msxsdtest/Particles',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC018.xml','./msxsdtest/Particles',invalid,S17),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC018.xml','./msxsdtest/Particles',invalid,S17),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC019.xsd','./msxsdtest/Particles',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC019.xsd','./msxsdtest/Particles',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC019.xml','./msxsdtest/Particles',invalid,S18),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC019.xml','./msxsdtest/Particles',invalid,S18),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC020.xsd','./msxsdtest/Particles',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC020.xsd','./msxsdtest/Particles',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC020.xml','./msxsdtest/Particles',invalid,S19),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC020.xml','./msxsdtest/Particles',invalid,S19),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC021.xsd','./msxsdtest/Particles',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC021.xsd','./msxsdtest/Particles',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC021.xml','./msxsdtest/Particles',valid,S20),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC021.xml','./msxsdtest/Particles',valid,S20),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC022.xsd','./msxsdtest/Particles',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC022.xsd','./msxsdtest/Particles',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC022.xml','./msxsdtest/Particles',invalid,S21),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC022.xml','./msxsdtest/Particles',invalid,S21),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC023.xsd','./msxsdtest/Particles',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC023.xsd','./msxsdtest/Particles',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC023.xml','./msxsdtest/Particles',invalid,S22),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC023.xml','./msxsdtest/Particles',invalid,S22),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC024.xsd','./msxsdtest/Particles',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC024.xsd','./msxsdtest/Particles',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC024.xml','./msxsdtest/Particles',invalid,S23),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC024.xml','./msxsdtest/Particles',invalid,S23),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC025.xsd','./msxsdtest/Particles',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC025.xsd','./msxsdtest/Particles',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC025.xml','./msxsdtest/Particles',invalid,S24),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC025.xml','./msxsdtest/Particles',invalid,S24),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC026.xsd','./msxsdtest/Particles',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC026.xsd','./msxsdtest/Particles',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC026.xml','./msxsdtest/Particles',invalid,S25),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC026.xml','./msxsdtest/Particles',invalid,S25),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC027.xsd','./msxsdtest/Particles',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC027.xsd','./msxsdtest/Particles',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC027.xml','./msxsdtest/Particles',valid,S26),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC027.xml','./msxsdtest/Particles',valid,S26),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC028.xsd','./msxsdtest/Particles',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC028.xsd','./msxsdtest/Particles',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC028.xml','./msxsdtest/Particles',valid,S27),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC028.xml','./msxsdtest/Particles',valid,S27),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC029.xsd','./msxsdtest/Particles',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC029.xsd','./msxsdtest/Particles',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC029.xml','./msxsdtest/Particles',valid,S28),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC029.xml','./msxsdtest/Particles',valid,S28),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC030.xsd','./msxsdtest/Particles',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC030.xsd','./msxsdtest/Particles',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC030.xml','./msxsdtest/Particles',valid,S29),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC030.xml','./msxsdtest/Particles',valid,S29),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC031.xsd','./msxsdtest/Particles',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC031.xsd','./msxsdtest/Particles',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC031.xml','./msxsdtest/Particles',invalid,S30),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC031.xml','./msxsdtest/Particles',invalid,S30),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC032.xsd','./msxsdtest/Particles',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC032.xsd','./msxsdtest/Particles',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC032.xml','./msxsdtest/Particles',invalid,S31),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC032.xml','./msxsdtest/Particles',invalid,S31),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC033.xsd','./msxsdtest/Particles',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC033.xsd','./msxsdtest/Particles',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC033.xml','./msxsdtest/Particles',invalid,S32),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC033.xml','./msxsdtest/Particles',invalid,S32),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC034.xsd','./msxsdtest/Particles',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC034.xsd','./msxsdtest/Particles',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC034.xml','./msxsdtest/Particles',valid,S33),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC034.xml','./msxsdtest/Particles',valid,S33),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC035.xsd','./msxsdtest/Particles',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC035.xsd','./msxsdtest/Particles',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC035.xml','./msxsdtest/Particles',invalid,S34),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC035.xml','./msxsdtest/Particles',invalid,S34),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC036.xsd','./msxsdtest/Particles',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC036.xsd','./msxsdtest/Particles',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC036.xml','./msxsdtest/Particles',invalid,S35),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC036.xml','./msxsdtest/Particles',invalid,S35),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC037.xsd','./msxsdtest/Particles',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC037.xsd','./msxsdtest/Particles',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC037.xml','./msxsdtest/Particles',valid,S36),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC037.xml','./msxsdtest/Particles',valid,S36),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC038.xsd','./msxsdtest/Particles',valid),
+ {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC038.xsd','./msxsdtest/Particles',valid),
STResList38 = [STRes37|STResList37],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC038.xml','./msxsdtest/Particles',invalid,S37),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC038.xml','./msxsdtest/Particles',invalid,S37),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC039.xsd','./msxsdtest/Particles',valid),
+ {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC039.xsd','./msxsdtest/Particles',valid),
STResList39 = [STRes38|STResList38],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC039.xml','./msxsdtest/Particles',invalid,S38),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC039.xml','./msxsdtest/Particles',invalid,S38),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC040.xsd','./msxsdtest/Particles',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC040.xsd','./msxsdtest/Particles',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC040.xml','./msxsdtest/Particles',valid,S39),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC040.xml','./msxsdtest/Particles',valid,S39),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC041.xsd','./msxsdtest/Particles',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC041.xsd','./msxsdtest/Particles',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC041.xml','./msxsdtest/Particles',valid,S40),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC041.xml','./msxsdtest/Particles',valid,S40),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC042.xsd','./msxsdtest/Particles',valid),
+ {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC042.xsd','./msxsdtest/Particles',valid),
STResList42 = [STRes41|STResList41],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC042.xml','./msxsdtest/Particles',invalid,S41),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC042.xml','./msxsdtest/Particles',invalid,S41),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC043.xsd','./msxsdtest/Particles',valid),
+ {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC043.xsd','./msxsdtest/Particles',valid),
STResList43 = [STRes42|STResList42],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC043.xml','./msxsdtest/Particles',valid,S42),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC043.xml','./msxsdtest/Particles',valid,S42),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC044.xsd','./msxsdtest/Particles',valid),
+ {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC044.xsd','./msxsdtest/Particles',valid),
STResList44 = [STRes43|STResList43],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC044.xml','./msxsdtest/Particles',valid,S43),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC044.xml','./msxsdtest/Particles',valid,S43),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC045.xsd','./msxsdtest/Particles',valid),
+ {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC045.xsd','./msxsdtest/Particles',valid),
STResList45 = [STRes44|STResList44],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC045.xml','./msxsdtest/Particles',valid,S44),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC045.xml','./msxsdtest/Particles',valid,S44),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC046.xsd','./msxsdtest/Particles',valid),
+ {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC046.xsd','./msxsdtest/Particles',valid),
STResList46 = [STRes45|STResList45],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC046.xml','./msxsdtest/Particles',valid,S45),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC046.xml','./msxsdtest/Particles',valid,S45),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC047.xsd','./msxsdtest/Particles',valid),
+ {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC047.xsd','./msxsdtest/Particles',valid),
STResList47 = [STRes46|STResList46],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC047.xml','./msxsdtest/Particles',invalid,S46),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC047.xml','./msxsdtest/Particles',invalid,S46),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC048.xsd','./msxsdtest/Particles',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesC048.xsd','./msxsdtest/Particles',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC048.xml','./msxsdtest/Particles',invalid,S47),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesC048.xml','./msxsdtest/Particles',invalid,S47),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa001.xsd','./msxsdtest/Particles',valid),
+ {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa001.xsd','./msxsdtest/Particles',valid),
STResList49 = [STRes48|STResList48],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa001.xml','./msxsdtest/Particles',invalid,S48),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa001.xml','./msxsdtest/Particles',invalid,S48),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa002.xsd','./msxsdtest/Particles',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa002.xsd','./msxsdtest/Particles',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa002.xml','./msxsdtest/Particles',valid,S49),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa002.xml','./msxsdtest/Particles',valid,S49),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa003.xsd','./msxsdtest/Particles',valid),
+ {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa003.xsd','./msxsdtest/Particles',valid),
STResList51 = [STRes50|STResList50],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa003.xml','./msxsdtest/Particles',invalid,S50),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa003.xml','./msxsdtest/Particles',invalid,S50),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa004.xsd','./msxsdtest/Particles',valid),
+ {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa004.xsd','./msxsdtest/Particles',valid),
STResList52 = [STRes51|STResList51],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa004.xml','./msxsdtest/Particles',invalid,S51),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa004.xml','./msxsdtest/Particles',invalid,S51),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa005.xsd','./msxsdtest/Particles',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa005.xsd','./msxsdtest/Particles',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa005.xml','./msxsdtest/Particles',invalid,S52),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa005.xml','./msxsdtest/Particles',invalid,S52),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa006.xsd','./msxsdtest/Particles',valid),
+ {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa006.xsd','./msxsdtest/Particles',valid),
STResList54 = [STRes53|STResList53],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa006.xml','./msxsdtest/Particles',invalid,S53),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa006.xml','./msxsdtest/Particles',invalid,S53),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa007.xsd','./msxsdtest/Particles',valid),
+ {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa007.xsd','./msxsdtest/Particles',valid),
STResList55 = [STRes54|STResList54],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa007.xml','./msxsdtest/Particles',valid,S54),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa007.xml','./msxsdtest/Particles',valid,S54),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa008.xsd','./msxsdtest/Particles',valid),
+ {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa008.xsd','./msxsdtest/Particles',valid),
STResList56 = [STRes55|STResList55],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa008.xml','./msxsdtest/Particles',invalid,S55),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa008.xml','./msxsdtest/Particles',invalid,S55),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa009.xsd','./msxsdtest/Particles',valid),
+ {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa009.xsd','./msxsdtest/Particles',valid),
STResList57 = [STRes56|STResList56],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa009.xml','./msxsdtest/Particles',invalid,S56),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa009.xml','./msxsdtest/Particles',invalid,S56),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa010.xsd','./msxsdtest/Particles',valid),
+ {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa010.xsd','./msxsdtest/Particles',valid),
STResList58 = [STRes57|STResList57],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa010.xml','./msxsdtest/Particles',invalid,S57),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa010.xml','./msxsdtest/Particles',invalid,S57),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa011.xsd','./msxsdtest/Particles',valid),
+ {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDa011.xsd','./msxsdtest/Particles',valid),
STResList59 = [STRes58|STResList58],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa011.xml','./msxsdtest/Particles',invalid,S58),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDa011.xml','./msxsdtest/Particles',invalid,S58),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb001.xsd','./msxsdtest/Particles',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb001.xsd','./msxsdtest/Particles',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb001.xml','./msxsdtest/Particles',invalid,S59),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb001.xml','./msxsdtest/Particles',invalid,S59),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb002.xsd','./msxsdtest/Particles',valid),
+ {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb002.xsd','./msxsdtest/Particles',valid),
STResList61 = [STRes60|STResList60],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb002.xml','./msxsdtest/Particles',valid,S60),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb002.xml','./msxsdtest/Particles',valid,S60),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb003.xsd','./msxsdtest/Particles',valid),
+ {STRes61,S61} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb003.xsd','./msxsdtest/Particles',valid),
STResList62 = [STRes61|STResList61],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb003.xml','./msxsdtest/Particles',invalid,S61),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb003.xml','./msxsdtest/Particles',invalid,S61),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb004.xsd','./msxsdtest/Particles',valid),
+ {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb004.xsd','./msxsdtest/Particles',valid),
STResList63 = [STRes62|STResList62],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb004.xml','./msxsdtest/Particles',invalid,S62),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb004.xml','./msxsdtest/Particles',invalid,S62),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb005.xsd','./msxsdtest/Particles',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb005.xsd','./msxsdtest/Particles',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb005.xml','./msxsdtest/Particles',invalid,S63),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb005.xml','./msxsdtest/Particles',invalid,S63),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb006.xsd','./msxsdtest/Particles',valid),
+ {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb006.xsd','./msxsdtest/Particles',valid),
STResList65 = [STRes64|STResList64],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb006.xml','./msxsdtest/Particles',invalid,S64),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb006.xml','./msxsdtest/Particles',invalid,S64),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb007.xsd','./msxsdtest/Particles',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb007.xsd','./msxsdtest/Particles',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb007.xml','./msxsdtest/Particles',valid,S65),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb007.xml','./msxsdtest/Particles',valid,S65),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb008.xsd','./msxsdtest/Particles',valid),
+ {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb008.xsd','./msxsdtest/Particles',valid),
STResList67 = [STRes66|STResList66],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb008.xml','./msxsdtest/Particles',invalid,S66),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb008.xml','./msxsdtest/Particles',invalid,S66),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb009.xsd','./msxsdtest/Particles',valid),
+ {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb009.xsd','./msxsdtest/Particles',valid),
STResList68 = [STRes67|STResList67],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb009.xml','./msxsdtest/Particles',invalid,S67),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb009.xml','./msxsdtest/Particles',invalid,S67),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb010.xsd','./msxsdtest/Particles',valid),
+ {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb010.xsd','./msxsdtest/Particles',valid),
STResList69 = [STRes68|STResList68],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb010.xml','./msxsdtest/Particles',invalid,S68),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb010.xml','./msxsdtest/Particles',invalid,S68),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb011.xsd','./msxsdtest/Particles',valid),
+ {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDb011.xsd','./msxsdtest/Particles',valid),
STResList70 = [STRes69|STResList69],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb011.xml','./msxsdtest/Particles',invalid,S69),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDb011.xml','./msxsdtest/Particles',invalid,S69),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc001.xsd','./msxsdtest/Particles',valid),
+ {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc001.xsd','./msxsdtest/Particles',valid),
STResList71 = [STRes70|STResList70],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc001.xml','./msxsdtest/Particles',valid,S70),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc001.xml','./msxsdtest/Particles',valid,S70),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc002.xsd','./msxsdtest/Particles',valid),
+ {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc002.xsd','./msxsdtest/Particles',valid),
STResList72 = [STRes71|STResList71],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc002.xml','./msxsdtest/Particles',valid,S71),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc002.xml','./msxsdtest/Particles',valid,S71),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc003.xsd','./msxsdtest/Particles',valid),
+ {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc003.xsd','./msxsdtest/Particles',valid),
STResList73 = [STRes72|STResList72],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc003.xml','./msxsdtest/Particles',valid,S72),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc003.xml','./msxsdtest/Particles',valid,S72),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc004.xsd','./msxsdtest/Particles',valid),
+ {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc004.xsd','./msxsdtest/Particles',valid),
STResList74 = [STRes73|STResList73],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc004.xml','./msxsdtest/Particles',valid,S73),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc004.xml','./msxsdtest/Particles',valid,S73),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc005.xsd','./msxsdtest/Particles',valid),
+ {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc005.xsd','./msxsdtest/Particles',valid),
STResList75 = [STRes74|STResList74],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc005.xml','./msxsdtest/Particles',valid,S74),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc005.xml','./msxsdtest/Particles',valid,S74),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc006.xsd','./msxsdtest/Particles',valid),
+ {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc006.xsd','./msxsdtest/Particles',valid),
STResList76 = [STRes75|STResList75],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc006.xml','./msxsdtest/Particles',valid,S75),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc006.xml','./msxsdtest/Particles',valid,S75),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc007.xsd','./msxsdtest/Particles',valid),
+ {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc007.xsd','./msxsdtest/Particles',valid),
STResList77 = [STRes76|STResList76],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc007.xml','./msxsdtest/Particles',valid,S76),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc007.xml','./msxsdtest/Particles',valid,S76),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc008.xsd','./msxsdtest/Particles',valid),
+ {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc008.xsd','./msxsdtest/Particles',valid),
STResList78 = [STRes77|STResList77],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc008.xml','./msxsdtest/Particles',valid,S77),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc008.xml','./msxsdtest/Particles',valid,S77),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc009.xsd','./msxsdtest/Particles',valid),
+ {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesDc009.xsd','./msxsdtest/Particles',valid),
STResList79 = [STRes78|STResList78],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc009.xml','./msxsdtest/Particles',valid,S78),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesDc009.xml','./msxsdtest/Particles',valid,S78),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa001.xsd','./msxsdtest/Particles',valid),
+ {STRes79,S79} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa001.xsd','./msxsdtest/Particles',valid),
STResList80 = [STRes79|STResList79],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa001.xml','./msxsdtest/Particles',valid,S79),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa001.xml','./msxsdtest/Particles',valid,S79),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa002.xsd','./msxsdtest/Particles',valid),
+ {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa002.xsd','./msxsdtest/Particles',valid),
STResList81 = [STRes80|STResList80],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa002.xml','./msxsdtest/Particles',invalid,S80),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa002.xml','./msxsdtest/Particles',invalid,S80),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa003.xsd','./msxsdtest/Particles',valid),
+ {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa003.xsd','./msxsdtest/Particles',valid),
STResList82 = [STRes81|STResList81],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa003.xml','./msxsdtest/Particles',valid,S81),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa003.xml','./msxsdtest/Particles',valid,S81),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa004.xsd','./msxsdtest/Particles',valid),
+ {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa004.xsd','./msxsdtest/Particles',valid),
STResList83 = [STRes82|STResList82],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa004.xml','./msxsdtest/Particles',valid,S82),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa004.xml','./msxsdtest/Particles',valid,S82),
ITResList83 = [ITRes82|ITResList82],
- ?line {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa005.xsd','./msxsdtest/Particles',valid),
+ {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa005.xsd','./msxsdtest/Particles',valid),
STResList84 = [STRes83|STResList83],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa005.xml','./msxsdtest/Particles',invalid,S83),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa005.xml','./msxsdtest/Particles',invalid,S83),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa006.xsd','./msxsdtest/Particles',valid),
+ {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa006.xsd','./msxsdtest/Particles',valid),
STResList85 = [STRes84|STResList84],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa006.xml','./msxsdtest/Particles',invalid,S84),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa006.xml','./msxsdtest/Particles',invalid,S84),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa007.xsd','./msxsdtest/Particles',valid),
+ {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa007.xsd','./msxsdtest/Particles',valid),
STResList86 = [STRes85|STResList85],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa007.xml','./msxsdtest/Particles',invalid,S85),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa007.xml','./msxsdtest/Particles',invalid,S85),
ITResList86 = [ITRes85|ITResList85],
- ?line {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa008.xsd','./msxsdtest/Particles',valid),
+ {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa008.xsd','./msxsdtest/Particles',valid),
STResList87 = [STRes86|STResList86],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa008.xml','./msxsdtest/Particles',valid,S86),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa008.xml','./msxsdtest/Particles',valid,S86),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa009.xsd','./msxsdtest/Particles',valid),
+ {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa009.xsd','./msxsdtest/Particles',valid),
STResList88 = [STRes87|STResList87],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa009.xml','./msxsdtest/Particles',invalid,S87),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa009.xml','./msxsdtest/Particles',invalid,S87),
ITResList88 = [ITRes87|ITResList87],
- ?line {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa010.xsd','./msxsdtest/Particles',valid),
+ {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa010.xsd','./msxsdtest/Particles',valid),
STResList89 = [STRes88|STResList88],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa010.xml','./msxsdtest/Particles',valid,S88),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa010.xml','./msxsdtest/Particles',valid,S88),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa011.xsd','./msxsdtest/Particles',valid),
+ {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa011.xsd','./msxsdtest/Particles',valid),
STResList90 = [STRes89|STResList89],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa011.xml','./msxsdtest/Particles',valid,S89),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa011.xml','./msxsdtest/Particles',valid,S89),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa012.xsd','./msxsdtest/Particles',valid),
+ {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa012.xsd','./msxsdtest/Particles',valid),
STResList91 = [STRes90|STResList90],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa012.xml','./msxsdtest/Particles',invalid,S90),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa012.xml','./msxsdtest/Particles',invalid,S90),
ITResList91 = [ITRes90|ITResList90],
- ?line {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa013.xsd','./msxsdtest/Particles',valid),
+ {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa013.xsd','./msxsdtest/Particles',valid),
STResList92 = [STRes91|STResList91],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa013.xml','./msxsdtest/Particles',invalid,S91),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa013.xml','./msxsdtest/Particles',invalid,S91),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa014.xsd','./msxsdtest/Particles',valid),
+ {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa014.xsd','./msxsdtest/Particles',valid),
STResList93 = [STRes92|STResList92],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa014.xml','./msxsdtest/Particles',invalid,S92),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa014.xml','./msxsdtest/Particles',invalid,S92),
ITResList93 = [ITRes92|ITResList92],
- ?line {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa015.xsd','./msxsdtest/Particles',valid),
+ {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa015.xsd','./msxsdtest/Particles',valid),
STResList94 = [STRes93|STResList93],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa015.xml','./msxsdtest/Particles',valid,S93),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa015.xml','./msxsdtest/Particles',valid,S93),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa016.xsd','./msxsdtest/Particles',valid),
+ {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa016.xsd','./msxsdtest/Particles',valid),
STResList95 = [STRes94|STResList94],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa016.xml','./msxsdtest/Particles',invalid,S94),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa016.xml','./msxsdtest/Particles',invalid,S94),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa017.xsd','./msxsdtest/Particles',valid),
+ {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa017.xsd','./msxsdtest/Particles',valid),
STResList96 = [STRes95|STResList95],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa017.xml','./msxsdtest/Particles',valid,S95),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa017.xml','./msxsdtest/Particles',valid,S95),
ITResList96 = [ITRes95|ITResList95],
- ?line {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa018.xsd','./msxsdtest/Particles',valid),
+ {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa018.xsd','./msxsdtest/Particles',valid),
STResList97 = [STRes96|STResList96],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa018.xml','./msxsdtest/Particles',valid,S96),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa018.xml','./msxsdtest/Particles',valid,S96),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa019.xsd','./msxsdtest/Particles',valid),
+ {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa019.xsd','./msxsdtest/Particles',valid),
STResList98 = [STRes97|STResList97],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa019.xml','./msxsdtest/Particles',invalid,S97),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa019.xml','./msxsdtest/Particles',invalid,S97),
ITResList98 = [ITRes97|ITResList97],
- ?line {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa020.xsd','./msxsdtest/Particles',valid),
+ {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa020.xsd','./msxsdtest/Particles',valid),
STResList99 = [STRes98|STResList98],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa020.xml','./msxsdtest/Particles',invalid,S98),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa020.xml','./msxsdtest/Particles',invalid,S98),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa021.xsd','./msxsdtest/Particles',valid),
+ {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa021.xsd','./msxsdtest/Particles',valid),
STResList100 = [STRes99|STResList99],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa021.xml','./msxsdtest/Particles',invalid,S99),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEa021.xml','./msxsdtest/Particles',invalid,S99),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa022.xsd','./msxsdtest/Particles',invalid),
+ {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa022.xsd','./msxsdtest/Particles',invalid),
STResList101 = [STRes100|STResList100],
- ?line {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa023.xsd','./msxsdtest/Particles',invalid),
+ {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa023.xsd','./msxsdtest/Particles',invalid),
STResList102 = [STRes101|STResList101],
- ?line {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa024.xsd','./msxsdtest/Particles',invalid),
+ {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa024.xsd','./msxsdtest/Particles',invalid),
STResList103 = [STRes102|STResList102],
- ?line {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa025.xsd','./msxsdtest/Particles',invalid),
+ {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEa025.xsd','./msxsdtest/Particles',invalid),
STResList104 = [STRes103|STResList103],
- ?line {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb001.xsd','./msxsdtest/Particles',valid),
+ {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb001.xsd','./msxsdtest/Particles',valid),
STResList105 = [STRes104|STResList104],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb001.xml','./msxsdtest/Particles',valid,S104),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb001.xml','./msxsdtest/Particles',valid,S104),
ITResList101 = [ITRes100|ITResList100],
- ?line {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb002.xsd','./msxsdtest/Particles',valid),
+ {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb002.xsd','./msxsdtest/Particles',valid),
STResList106 = [STRes105|STResList105],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb002.xml','./msxsdtest/Particles',invalid,S105),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb002.xml','./msxsdtest/Particles',invalid,S105),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes106,S106} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb003.xsd','./msxsdtest/Particles',valid),
+ {STRes106,S106} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb003.xsd','./msxsdtest/Particles',valid),
STResList107 = [STRes106|STResList106],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb003.xml','./msxsdtest/Particles',valid,S106),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb003.xml','./msxsdtest/Particles',valid,S106),
ITResList103 = [ITRes102|ITResList102],
- ?line {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb004.xsd','./msxsdtest/Particles',valid),
+ {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb004.xsd','./msxsdtest/Particles',valid),
STResList108 = [STRes107|STResList107],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb004.xml','./msxsdtest/Particles',invalid,S107),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb004.xml','./msxsdtest/Particles',invalid,S107),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb005.xsd','./msxsdtest/Particles',valid),
+ {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb005.xsd','./msxsdtest/Particles',valid),
STResList109 = [STRes108|STResList108],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb005.xml','./msxsdtest/Particles',invalid,S108),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb005.xml','./msxsdtest/Particles',invalid,S108),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb006.xsd','./msxsdtest/Particles',valid),
+ {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb006.xsd','./msxsdtest/Particles',valid),
STResList110 = [STRes109|STResList109],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb006.xml','./msxsdtest/Particles',invalid,S109),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb006.xml','./msxsdtest/Particles',invalid,S109),
ITResList106 = [ITRes105|ITResList105],
- ?line {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb007.xsd','./msxsdtest/Particles',valid),
+ {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb007.xsd','./msxsdtest/Particles',valid),
STResList111 = [STRes110|STResList110],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb007.xml','./msxsdtest/Particles',invalid,S110),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb007.xml','./msxsdtest/Particles',invalid,S110),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb008.xsd','./msxsdtest/Particles',valid),
+ {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb008.xsd','./msxsdtest/Particles',valid),
STResList112 = [STRes111|STResList111],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb008.xml','./msxsdtest/Particles',invalid,S111),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb008.xml','./msxsdtest/Particles',invalid,S111),
ITResList108 = [ITRes107|ITResList107],
- ?line {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb009.xsd','./msxsdtest/Particles',valid),
+ {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb009.xsd','./msxsdtest/Particles',valid),
STResList113 = [STRes112|STResList112],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb009.xml','./msxsdtest/Particles',invalid,S112),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb009.xml','./msxsdtest/Particles',invalid,S112),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb010.xsd','./msxsdtest/Particles',valid),
+ {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb010.xsd','./msxsdtest/Particles',valid),
STResList114 = [STRes113|STResList113],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb010.xml','./msxsdtest/Particles',valid,S113),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb010.xml','./msxsdtest/Particles',valid,S113),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb011.xsd','./msxsdtest/Particles',valid),
+ {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb011.xsd','./msxsdtest/Particles',valid),
STResList115 = [STRes114|STResList114],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb011.xml','./msxsdtest/Particles',invalid,S114),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb011.xml','./msxsdtest/Particles',invalid,S114),
ITResList111 = [ITRes110|ITResList110],
- ?line {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb012.xsd','./msxsdtest/Particles',valid),
+ {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb012.xsd','./msxsdtest/Particles',valid),
STResList116 = [STRes115|STResList115],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb012.xml','./msxsdtest/Particles',invalid,S115),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb012.xml','./msxsdtest/Particles',invalid,S115),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb013.xsd','./msxsdtest/Particles',valid),
+ {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb013.xsd','./msxsdtest/Particles',valid),
STResList117 = [STRes116|STResList116],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb013.xml','./msxsdtest/Particles',invalid,S116),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb013.xml','./msxsdtest/Particles',invalid,S116),
ITResList113 = [ITRes112|ITResList112],
- ?line {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb014.xsd','./msxsdtest/Particles',valid),
+ {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb014.xsd','./msxsdtest/Particles',valid),
STResList118 = [STRes117|STResList117],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb014.xml','./msxsdtest/Particles',invalid,S117),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb014.xml','./msxsdtest/Particles',invalid,S117),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb015.xsd','./msxsdtest/Particles',invalid),
+ {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb015.xsd','./msxsdtest/Particles',invalid),
STResList119 = [STRes118|STResList118],
- ?line {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb016.xsd','./msxsdtest/Particles',valid),
+ {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb016.xsd','./msxsdtest/Particles',valid),
STResList120 = [STRes119|STResList119],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb016.xml','./msxsdtest/Particles',valid,S119),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb016.xml','./msxsdtest/Particles',valid,S119),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes120,S120} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb017.xsd','./msxsdtest/Particles',valid),
+ {STRes120,S120} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb017.xsd','./msxsdtest/Particles',valid),
STResList121 = [STRes120|STResList120],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb017.xml','./msxsdtest/Particles',invalid,S120),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb017.xml','./msxsdtest/Particles',invalid,S120),
ITResList116 = [ITRes115|ITResList115],
- ?line {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb018.xsd','./msxsdtest/Particles',valid),
+ {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb018.xsd','./msxsdtest/Particles',valid),
STResList122 = [STRes121|STResList121],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb018.xml','./msxsdtest/Particles',invalid,S121),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb018.xml','./msxsdtest/Particles',invalid,S121),
ITResList117 = [ITRes116|ITResList116],
- ?line {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb019.xsd','./msxsdtest/Particles',valid),
+ {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb019.xsd','./msxsdtest/Particles',valid),
STResList123 = [STRes122|STResList122],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb019.xml','./msxsdtest/Particles',valid,S122),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb019.xml','./msxsdtest/Particles',valid,S122),
ITResList118 = [ITRes117|ITResList117],
- ?line {STRes123,S123} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb020.xsd','./msxsdtest/Particles',valid),
+ {STRes123,S123} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb020.xsd','./msxsdtest/Particles',valid),
STResList124 = [STRes123|STResList123],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb020.xml','./msxsdtest/Particles',invalid,S123),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb020.xml','./msxsdtest/Particles',invalid,S123),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb021.xsd','./msxsdtest/Particles',valid),
+ {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb021.xsd','./msxsdtest/Particles',valid),
STResList125 = [STRes124|STResList124],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb021.xml','./msxsdtest/Particles',invalid,S124),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb021.xml','./msxsdtest/Particles',invalid,S124),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes125,S125} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb022.xsd','./msxsdtest/Particles',valid),
+ {STRes125,S125} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb022.xsd','./msxsdtest/Particles',valid),
STResList126 = [STRes125|STResList125],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb022.xml','./msxsdtest/Particles',invalid,S125),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb022.xml','./msxsdtest/Particles',invalid,S125),
ITResList121 = [ITRes120|ITResList120],
- ?line {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb023.xsd','./msxsdtest/Particles',valid),
+ {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb023.xsd','./msxsdtest/Particles',valid),
STResList127 = [STRes126|STResList126],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb023.xml','./msxsdtest/Particles',invalid,S126),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb023.xml','./msxsdtest/Particles',invalid,S126),
ITResList122 = [ITRes121|ITResList121],
- ?line {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb024.xsd','./msxsdtest/Particles',valid),
+ {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb024.xsd','./msxsdtest/Particles',valid),
STResList128 = [STRes127|STResList127],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb024.xml','./msxsdtest/Particles',invalid,S127),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb024.xml','./msxsdtest/Particles',invalid,S127),
ITResList123 = [ITRes122|ITResList122],
- ?line {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb025.xsd','./msxsdtest/Particles',valid),
+ {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb025.xsd','./msxsdtest/Particles',valid),
STResList129 = [STRes128|STResList128],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb025.xml','./msxsdtest/Particles',invalid,S128),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb025.xml','./msxsdtest/Particles',invalid,S128),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb026.xsd','./msxsdtest/Particles',valid),
+ {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb026.xsd','./msxsdtest/Particles',valid),
STResList130 = [STRes129|STResList129],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb026.xml','./msxsdtest/Particles',valid,S129),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb026.xml','./msxsdtest/Particles',valid,S129),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb027.xsd','./msxsdtest/Particles',valid),
+ {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb027.xsd','./msxsdtest/Particles',valid),
STResList131 = [STRes130|STResList130],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb027.xml','./msxsdtest/Particles',valid,S130),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb027.xml','./msxsdtest/Particles',valid,S130),
ITResList126 = [ITRes125|ITResList125],
- ?line {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb028.xsd','./msxsdtest/Particles',valid),
+ {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb028.xsd','./msxsdtest/Particles',valid),
STResList132 = [STRes131|STResList131],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb028.xml','./msxsdtest/Particles',invalid,S131),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb028.xml','./msxsdtest/Particles',invalid,S131),
ITResList127 = [ITRes126|ITResList126],
- ?line {STRes132,S132} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb029.xsd','./msxsdtest/Particles',valid),
+ {STRes132,S132} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb029.xsd','./msxsdtest/Particles',valid),
STResList133 = [STRes132|STResList132],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb029.xml','./msxsdtest/Particles',invalid,S132),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb029.xml','./msxsdtest/Particles',invalid,S132),
ITResList128 = [ITRes127|ITResList127],
- ?line {STRes133,S133} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb030.xsd','./msxsdtest/Particles',valid),
+ {STRes133,S133} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb030.xsd','./msxsdtest/Particles',valid),
STResList134 = [STRes133|STResList133],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb030.xml','./msxsdtest/Particles',invalid,S133),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb030.xml','./msxsdtest/Particles',invalid,S133),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes134,S134} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb031.xsd','./msxsdtest/Particles',valid),
+ {STRes134,S134} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb031.xsd','./msxsdtest/Particles',valid),
STResList135 = [STRes134|STResList134],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb031.xml','./msxsdtest/Particles',invalid,S134),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb031.xml','./msxsdtest/Particles',invalid,S134),
ITResList130 = [ITRes129|ITResList129],
- ?line {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb032.xsd','./msxsdtest/Particles',valid),
+ {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb032.xsd','./msxsdtest/Particles',valid),
STResList136 = [STRes135|STResList135],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb032.xml','./msxsdtest/Particles',invalid,S135),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb032.xml','./msxsdtest/Particles',invalid,S135),
ITResList131 = [ITRes130|ITResList130],
- ?line {STRes136,S136} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb033.xsd','./msxsdtest/Particles',valid),
+ {STRes136,S136} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb033.xsd','./msxsdtest/Particles',valid),
STResList137 = [STRes136|STResList136],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb033.xml','./msxsdtest/Particles',invalid,S136),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb033.xml','./msxsdtest/Particles',invalid,S136),
ITResList132 = [ITRes131|ITResList131],
- ?line {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb034.xsd','./msxsdtest/Particles',valid),
+ {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb034.xsd','./msxsdtest/Particles',valid),
STResList138 = [STRes137|STResList137],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb034.xml','./msxsdtest/Particles',invalid,S137),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb034.xml','./msxsdtest/Particles',invalid,S137),
ITResList133 = [ITRes132|ITResList132],
- ?line {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb035.xsd','./msxsdtest/Particles',valid),
+ {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb035.xsd','./msxsdtest/Particles',valid),
STResList139 = [STRes138|STResList138],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb035.xml','./msxsdtest/Particles',invalid,S138),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb035.xml','./msxsdtest/Particles',invalid,S138),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb036.xsd','./msxsdtest/Particles',valid),
+ {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb036.xsd','./msxsdtest/Particles',valid),
STResList140 = [STRes139|STResList139],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb036.xml','./msxsdtest/Particles',valid,S139),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb036.xml','./msxsdtest/Particles',valid,S139),
ITResList135 = [ITRes134|ITResList134],
- ?line {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb037.xsd','./msxsdtest/Particles',valid),
+ {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb037.xsd','./msxsdtest/Particles',valid),
STResList141 = [STRes140|STResList140],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb037.xml','./msxsdtest/Particles',invalid,S140),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb037.xml','./msxsdtest/Particles',invalid,S140),
ITResList136 = [ITRes135|ITResList135],
- ?line {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb038.xsd','./msxsdtest/Particles',valid),
+ {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb038.xsd','./msxsdtest/Particles',valid),
STResList142 = [STRes141|STResList141],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb038.xml','./msxsdtest/Particles',valid,S141),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb038.xml','./msxsdtest/Particles',valid,S141),
ITResList137 = [ITRes136|ITResList136],
- ?line {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb039.xsd','./msxsdtest/Particles',valid),
+ {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEb039.xsd','./msxsdtest/Particles',valid),
STResList143 = [STRes142|STResList142],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb039.xml','./msxsdtest/Particles',invalid,S142),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEb039.xml','./msxsdtest/Particles',invalid,S142),
ITResList138 = [ITRes137|ITResList137],
- ?line {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc001.xsd','./msxsdtest/Particles',valid),
+ {STRes143,S143} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc001.xsd','./msxsdtest/Particles',valid),
STResList144 = [STRes143|STResList143],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc001.xml','./msxsdtest/Particles',valid,S143),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc001.xml','./msxsdtest/Particles',valid,S143),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc002.xsd','./msxsdtest/Particles',valid),
+ {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc002.xsd','./msxsdtest/Particles',valid),
STResList145 = [STRes144|STResList144],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc002.xml','./msxsdtest/Particles',valid,S144),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc002.xml','./msxsdtest/Particles',valid,S144),
ITResList140 = [ITRes139|ITResList139],
- ?line {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc003.xsd','./msxsdtest/Particles',valid),
+ {STRes145,S145} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc003.xsd','./msxsdtest/Particles',valid),
STResList146 = [STRes145|STResList145],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc003.xml','./msxsdtest/Particles',invalid,S145),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc003.xml','./msxsdtest/Particles',invalid,S145),
ITResList141 = [ITRes140|ITResList140],
- ?line {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc004.xsd','./msxsdtest/Particles',valid),
+ {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc004.xsd','./msxsdtest/Particles',valid),
STResList147 = [STRes146|STResList146],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc004.xml','./msxsdtest/Particles',invalid,S146),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc004.xml','./msxsdtest/Particles',invalid,S146),
ITResList142 = [ITRes141|ITResList141],
- ?line {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc005.xsd','./msxsdtest/Particles',valid),
+ {STRes147,S147} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc005.xsd','./msxsdtest/Particles',valid),
STResList148 = [STRes147|STResList147],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc005.xml','./msxsdtest/Particles',invalid,S147),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc005.xml','./msxsdtest/Particles',invalid,S147),
ITResList143 = [ITRes142|ITResList142],
- ?line {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc006.xsd','./msxsdtest/Particles',valid),
+ {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc006.xsd','./msxsdtest/Particles',valid),
STResList149 = [STRes148|STResList148],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc006.xml','./msxsdtest/Particles',valid,S148),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc006.xml','./msxsdtest/Particles',valid,S148),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc007.xsd','./msxsdtest/Particles',valid),
+ {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc007.xsd','./msxsdtest/Particles',valid),
STResList150 = [STRes149|STResList149],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc007.xml','./msxsdtest/Particles',invalid,S149),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc007.xml','./msxsdtest/Particles',invalid,S149),
ITResList145 = [ITRes144|ITResList144],
- ?line {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc008.xsd','./msxsdtest/Particles',valid),
+ {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc008.xsd','./msxsdtest/Particles',valid),
STResList151 = [STRes150|STResList150],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc008.xml','./msxsdtest/Particles',invalid,S150),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc008.xml','./msxsdtest/Particles',invalid,S150),
ITResList146 = [ITRes145|ITResList145],
- ?line {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc009.xsd','./msxsdtest/Particles',invalid),
+ {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc009.xsd','./msxsdtest/Particles',invalid),
STResList152 = [STRes151|STResList151],
- ?line {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc010.xsd','./msxsdtest/Particles',valid),
+ {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc010.xsd','./msxsdtest/Particles',valid),
STResList153 = [STRes152|STResList152],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc010.xml','./msxsdtest/Particles',valid,S152),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc010.xml','./msxsdtest/Particles',valid,S152),
ITResList147 = [ITRes146|ITResList146],
- ?line {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc011.xsd','./msxsdtest/Particles',valid),
+ {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc011.xsd','./msxsdtest/Particles',valid),
STResList154 = [STRes153|STResList153],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc011.xml','./msxsdtest/Particles',invalid,S153),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc011.xml','./msxsdtest/Particles',invalid,S153),
ITResList148 = [ITRes147|ITResList147],
- ?line {STRes154,S154} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc012.xsd','./msxsdtest/Particles',valid),
+ {STRes154,S154} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc012.xsd','./msxsdtest/Particles',valid),
STResList155 = [STRes154|STResList154],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc012.xml','./msxsdtest/Particles',valid,S154),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc012.xml','./msxsdtest/Particles',valid,S154),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc013.xsd','./msxsdtest/Particles',valid),
+ {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc013.xsd','./msxsdtest/Particles',valid),
STResList156 = [STRes155|STResList155],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc013.xml','./msxsdtest/Particles',invalid,S155),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc013.xml','./msxsdtest/Particles',invalid,S155),
ITResList150 = [ITRes149|ITResList149],
- ?line {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc014.xsd','./msxsdtest/Particles',valid),
+ {STRes156,S156} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc014.xsd','./msxsdtest/Particles',valid),
STResList157 = [STRes156|STResList156],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc014.xml','./msxsdtest/Particles',invalid,S156),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc014.xml','./msxsdtest/Particles',invalid,S156),
ITResList151 = [ITRes150|ITResList150],
- ?line {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc015.xsd','./msxsdtest/Particles',valid),
+ {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc015.xsd','./msxsdtest/Particles',valid),
STResList158 = [STRes157|STResList157],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc015.xml','./msxsdtest/Particles',invalid,S157),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc015.xml','./msxsdtest/Particles',invalid,S157),
ITResList152 = [ITRes151|ITResList151],
- ?line {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc016.xsd','./msxsdtest/Particles',valid),
+ {STRes158,S158} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc016.xsd','./msxsdtest/Particles',valid),
STResList159 = [STRes158|STResList158],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc016.xml','./msxsdtest/Particles',valid,S158),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc016.xml','./msxsdtest/Particles',valid,S158),
ITResList153 = [ITRes152|ITResList152],
- ?line {STRes159,S159} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc017.xsd','./msxsdtest/Particles',valid),
+ {STRes159,S159} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc017.xsd','./msxsdtest/Particles',valid),
STResList160 = [STRes159|STResList159],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc017.xml','./msxsdtest/Particles',valid,S159),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc017.xml','./msxsdtest/Particles',valid,S159),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes160,S160} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc018.xsd','./msxsdtest/Particles',valid),
+ {STRes160,S160} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc018.xsd','./msxsdtest/Particles',valid),
STResList161 = [STRes160|STResList160],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc018.xml','./msxsdtest/Particles',valid,S160),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc018.xml','./msxsdtest/Particles',valid,S160),
ITResList155 = [ITRes154|ITResList154],
- ?line {STRes161,S161} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc019.xsd','./msxsdtest/Particles',valid),
+ {STRes161,S161} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc019.xsd','./msxsdtest/Particles',valid),
STResList162 = [STRes161|STResList161],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc019.xml','./msxsdtest/Particles',valid,S161),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc019.xml','./msxsdtest/Particles',valid,S161),
ITResList156 = [ITRes155|ITResList155],
- ?line {STRes162,S162} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc020.xsd','./msxsdtest/Particles',valid),
+ {STRes162,S162} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc020.xsd','./msxsdtest/Particles',valid),
STResList163 = [STRes162|STResList162],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc020.xml','./msxsdtest/Particles',valid,S162),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc020.xml','./msxsdtest/Particles',valid,S162),
ITResList157 = [ITRes156|ITResList156],
- ?line {STRes163,S163} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc021.xsd','./msxsdtest/Particles',valid),
+ {STRes163,S163} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc021.xsd','./msxsdtest/Particles',valid),
STResList164 = [STRes163|STResList163],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc021.xml','./msxsdtest/Particles',valid,S163),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc021.xml','./msxsdtest/Particles',valid,S163),
ITResList158 = [ITRes157|ITResList157],
- ?line {STRes164,S164} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc022.xsd','./msxsdtest/Particles',valid),
+ {STRes164,S164} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc022.xsd','./msxsdtest/Particles',valid),
STResList165 = [STRes164|STResList164],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc022.xml','./msxsdtest/Particles',invalid,S164),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc022.xml','./msxsdtest/Particles',invalid,S164),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes165,S165} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc023.xsd','./msxsdtest/Particles',valid),
+ {STRes165,S165} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc023.xsd','./msxsdtest/Particles',valid),
STResList166 = [STRes165|STResList165],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc023.xml','./msxsdtest/Particles',invalid,S165),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc023.xml','./msxsdtest/Particles',invalid,S165),
ITResList160 = [ITRes159|ITResList159],
- ?line {STRes166,S166} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc024.xsd','./msxsdtest/Particles',valid),
+ {STRes166,S166} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc024.xsd','./msxsdtest/Particles',valid),
STResList167 = [STRes166|STResList166],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc024.xml','./msxsdtest/Particles',invalid,S166),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc024.xml','./msxsdtest/Particles',invalid,S166),
ITResList161 = [ITRes160|ITResList160],
- ?line {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc025.xsd','./msxsdtest/Particles',valid),
+ {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc025.xsd','./msxsdtest/Particles',valid),
STResList168 = [STRes167|STResList167],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc025.xml','./msxsdtest/Particles',invalid,S167),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc025.xml','./msxsdtest/Particles',invalid,S167),
ITResList162 = [ITRes161|ITResList161],
- ?line {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc026.xsd','./msxsdtest/Particles',valid),
+ {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc026.xsd','./msxsdtest/Particles',valid),
STResList169 = [STRes168|STResList168],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc026.xml','./msxsdtest/Particles',invalid,S168),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc026.xml','./msxsdtest/Particles',invalid,S168),
ITResList163 = [ITRes162|ITResList162],
- ?line {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc027.xsd','./msxsdtest/Particles',valid),
+ {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc027.xsd','./msxsdtest/Particles',valid),
STResList170 = [STRes169|STResList169],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc027.xml','./msxsdtest/Particles',invalid,S169),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc027.xml','./msxsdtest/Particles',invalid,S169),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc028.xsd','./msxsdtest/Particles',valid),
+ {STRes170,S170} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc028.xsd','./msxsdtest/Particles',valid),
STResList171 = [STRes170|STResList170],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc028.xml','./msxsdtest/Particles',invalid,S170),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc028.xml','./msxsdtest/Particles',invalid,S170),
ITResList165 = [ITRes164|ITResList164],
- ?line {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc029.xsd','./msxsdtest/Particles',valid),
+ {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc029.xsd','./msxsdtest/Particles',valid),
STResList172 = [STRes171|STResList171],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc029.xml','./msxsdtest/Particles',valid,S171),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc029.xml','./msxsdtest/Particles',valid,S171),
ITResList166 = [ITRes165|ITResList165],
- ?line {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc030.xsd','./msxsdtest/Particles',valid),
+ {STRes172,S172} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc030.xsd','./msxsdtest/Particles',valid),
STResList173 = [STRes172|STResList172],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc030.xml','./msxsdtest/Particles',valid,S172),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc030.xml','./msxsdtest/Particles',valid,S172),
ITResList167 = [ITRes166|ITResList166],
- ?line {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc031.xsd','./msxsdtest/Particles',valid),
+ {STRes173,S173} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc031.xsd','./msxsdtest/Particles',valid),
STResList174 = [STRes173|STResList173],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc031.xml','./msxsdtest/Particles',valid,S173),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc031.xml','./msxsdtest/Particles',valid,S173),
ITResList168 = [ITRes167|ITResList167],
- ?line {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc032.xsd','./msxsdtest/Particles',valid),
+ {STRes174,S174} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc032.xsd','./msxsdtest/Particles',valid),
STResList175 = [STRes174|STResList174],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc032.xml','./msxsdtest/Particles',valid,S174),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc032.xml','./msxsdtest/Particles',valid,S174),
ITResList169 = [ITRes168|ITResList168],
- ?line {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc033.xsd','./msxsdtest/Particles',valid),
+ {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc033.xsd','./msxsdtest/Particles',valid),
STResList176 = [STRes175|STResList175],
- ?line ITRes169 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc033.xml','./msxsdtest/Particles',valid,S175),
+ ITRes169 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc033.xml','./msxsdtest/Particles',valid,S175),
ITResList170 = [ITRes169|ITResList169],
- ?line {STRes176,S176} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc034.xsd','./msxsdtest/Particles',valid),
+ {STRes176,S176} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc034.xsd','./msxsdtest/Particles',valid),
STResList177 = [STRes176|STResList176],
- ?line ITRes170 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc034.xml','./msxsdtest/Particles',valid,S176),
+ ITRes170 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc034.xml','./msxsdtest/Particles',valid,S176),
ITResList171 = [ITRes170|ITResList170],
- ?line {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc035.xsd','./msxsdtest/Particles',valid),
+ {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc035.xsd','./msxsdtest/Particles',valid),
STResList178 = [STRes177|STResList177],
- ?line ITRes171 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc035.xml','./msxsdtest/Particles',valid,S177),
+ ITRes171 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc035.xml','./msxsdtest/Particles',valid,S177),
ITResList172 = [ITRes171|ITResList171],
- ?line {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc036.xsd','./msxsdtest/Particles',valid),
+ {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc036.xsd','./msxsdtest/Particles',valid),
STResList179 = [STRes178|STResList178],
- ?line ITRes172 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc036.xml','./msxsdtest/Particles',valid,S178),
+ ITRes172 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc036.xml','./msxsdtest/Particles',valid,S178),
ITResList173 = [ITRes172|ITResList172],
- ?line {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc037.xsd','./msxsdtest/Particles',valid),
+ {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc037.xsd','./msxsdtest/Particles',valid),
STResList180 = [STRes179|STResList179],
- ?line ITRes173 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc037.xml','./msxsdtest/Particles',valid,S179),
+ ITRes173 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc037.xml','./msxsdtest/Particles',valid,S179),
ITResList174 = [ITRes173|ITResList173],
- ?line {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc038.xsd','./msxsdtest/Particles',valid),
+ {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc038.xsd','./msxsdtest/Particles',valid),
STResList181 = [STRes180|STResList180],
- ?line ITRes174 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc038.xml','./msxsdtest/Particles',invalid,S180),
+ ITRes174 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc038.xml','./msxsdtest/Particles',invalid,S180),
ITResList175 = [ITRes174|ITResList174],
- ?line {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc039.xsd','./msxsdtest/Particles',valid),
+ {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc039.xsd','./msxsdtest/Particles',valid),
STResList182 = [STRes181|STResList181],
- ?line ITRes175 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc039.xml','./msxsdtest/Particles',invalid,S181),
+ ITRes175 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc039.xml','./msxsdtest/Particles',invalid,S181),
ITResList176 = [ITRes175|ITResList175],
- ?line {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc040.xsd','./msxsdtest/Particles',valid),
+ {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc040.xsd','./msxsdtest/Particles',valid),
STResList183 = [STRes182|STResList182],
- ?line ITRes176 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc040.xml','./msxsdtest/Particles',invalid,S182),
+ ITRes176 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc040.xml','./msxsdtest/Particles',invalid,S182),
ITResList177 = [ITRes176|ITResList176],
- ?line {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc041.xsd','./msxsdtest/Particles',valid),
+ {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEc041.xsd','./msxsdtest/Particles',valid),
STResList184 = [STRes183|STResList183],
- ?line ITRes177 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc041.xml','./msxsdtest/Particles',invalid,S183),
+ ITRes177 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesEc041.xml','./msxsdtest/Particles',invalid,S183),
ITResList178 = [ITRes177|ITResList177],
- ?line {STRes184,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEd001.xsd','./msxsdtest/Particles',invalid),
+ {STRes184,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesEd001.xsd','./msxsdtest/Particles',invalid),
STResList185 = [STRes184|STResList184],
@@ -19333,764 +19321,764 @@ particlesCDE(Config) when is_list(Config) ->
particlesFHI(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa001.xsd','./msxsdtest/Particles',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa001.xsd','./msxsdtest/Particles',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa001.xml','./msxsdtest/Particles',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa001.xml','./msxsdtest/Particles',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa002.xsd','./msxsdtest/Particles',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa002.xsd','./msxsdtest/Particles',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa002.xml','./msxsdtest/Particles',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa002.xml','./msxsdtest/Particles',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa003.xsd','./msxsdtest/Particles',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa003.xsd','./msxsdtest/Particles',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa003.xml','./msxsdtest/Particles',valid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa003.xml','./msxsdtest/Particles',valid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa004.xsd','./msxsdtest/Particles',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa004.xsd','./msxsdtest/Particles',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa004.xml','./msxsdtest/Particles',valid,S3),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa004.xml','./msxsdtest/Particles',valid,S3),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa005.xsd','./msxsdtest/Particles',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFa005.xsd','./msxsdtest/Particles',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa005.xml','./msxsdtest/Particles',valid,S4),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFa005.xml','./msxsdtest/Particles',valid,S4),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb001.xsd','./msxsdtest/Particles',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb001.xsd','./msxsdtest/Particles',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFb001.xml','./msxsdtest/Particles',valid,S5),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFb001.xml','./msxsdtest/Particles',valid,S5),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb002.xsd','./msxsdtest/Particles',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb002.xsd','./msxsdtest/Particles',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb003.xsd','./msxsdtest/Particles',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb003.xsd','./msxsdtest/Particles',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb004.xsd','./msxsdtest/Particles',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb004.xsd','./msxsdtest/Particles',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFb004.xml','./msxsdtest/Particles',valid,S8),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesFb004.xml','./msxsdtest/Particles',valid,S8),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb005.xsd','./msxsdtest/Particles',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb005.xsd','./msxsdtest/Particles',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb006.xsd','./msxsdtest/Particles',invalid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesFb006.xsd','./msxsdtest/Particles',invalid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa001.xsd','./msxsdtest/Particles',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa001.xsd','./msxsdtest/Particles',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa001.xml','./msxsdtest/Particles',valid,S11),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa001.xml','./msxsdtest/Particles',valid,S11),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa002.xsd','./msxsdtest/Particles',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa002.xsd','./msxsdtest/Particles',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa002.xml','./msxsdtest/Particles',valid,S12),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa002.xml','./msxsdtest/Particles',valid,S12),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa003.xsd','./msxsdtest/Particles',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa003.xsd','./msxsdtest/Particles',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa003.xml','./msxsdtest/Particles',valid,S13),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa003.xml','./msxsdtest/Particles',valid,S13),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa004.xsd','./msxsdtest/Particles',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa004.xsd','./msxsdtest/Particles',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa004.xml','./msxsdtest/Particles',valid,S14),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa004.xml','./msxsdtest/Particles',valid,S14),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa005.xsd','./msxsdtest/Particles',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa005.xsd','./msxsdtest/Particles',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa005.xml','./msxsdtest/Particles',valid,S15),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa005.xml','./msxsdtest/Particles',valid,S15),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa006.xsd','./msxsdtest/Particles',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa006.xsd','./msxsdtest/Particles',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa006.xml','./msxsdtest/Particles',valid,S16),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa006.xml','./msxsdtest/Particles',valid,S16),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa007.xsd','./msxsdtest/Particles',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa007.xsd','./msxsdtest/Particles',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa007.xml','./msxsdtest/Particles',valid,S17),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa007.xml','./msxsdtest/Particles',valid,S17),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa008.xsd','./msxsdtest/Particles',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa008.xsd','./msxsdtest/Particles',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa009.xsd','./msxsdtest/Particles',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa009.xsd','./msxsdtest/Particles',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa009.xml','./msxsdtest/Particles',valid,S19),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa009.xml','./msxsdtest/Particles',valid,S19),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa010.xsd','./msxsdtest/Particles',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa010.xsd','./msxsdtest/Particles',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa010.xml','./msxsdtest/Particles',valid,S20),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa010.xml','./msxsdtest/Particles',valid,S20),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa011.xsd','./msxsdtest/Particles',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa011.xsd','./msxsdtest/Particles',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa011.xml','./msxsdtest/Particles',valid,S21),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa011.xml','./msxsdtest/Particles',valid,S21),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa012.xsd','./msxsdtest/Particles',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa012.xsd','./msxsdtest/Particles',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa012.xml','./msxsdtest/Particles',valid,S22),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa012.xml','./msxsdtest/Particles',valid,S22),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa013.xsd','./msxsdtest/Particles',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa013.xsd','./msxsdtest/Particles',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa013.xml','./msxsdtest/Particles',valid,S23),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa013.xml','./msxsdtest/Particles',valid,S23),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa014.xsd','./msxsdtest/Particles',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa014.xsd','./msxsdtest/Particles',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa014.xml','./msxsdtest/Particles',valid,S24),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa014.xml','./msxsdtest/Particles',valid,S24),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa015.xsd','./msxsdtest/Particles',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa015.xsd','./msxsdtest/Particles',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa015.xml','./msxsdtest/Particles',valid,S25),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa015.xml','./msxsdtest/Particles',valid,S25),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa016.xsd','./msxsdtest/Particles',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa016.xsd','./msxsdtest/Particles',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa016.xml','./msxsdtest/Particles',valid,S26),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa016.xml','./msxsdtest/Particles',valid,S26),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa017.xsd','./msxsdtest/Particles',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa017.xsd','./msxsdtest/Particles',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa017.xml','./msxsdtest/Particles',valid,S27),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa017.xml','./msxsdtest/Particles',valid,S27),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa018.xsd','./msxsdtest/Particles',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHa018.xsd','./msxsdtest/Particles',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa018.xml','./msxsdtest/Particles',valid,S28),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesHa018.xml','./msxsdtest/Particles',valid,S28),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb001.xsd','./msxsdtest/Particles',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb001.xsd','./msxsdtest/Particles',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb002.xsd','./msxsdtest/Particles',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb002.xsd','./msxsdtest/Particles',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb003.xsd','./msxsdtest/Particles',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb003.xsd','./msxsdtest/Particles',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb004.xsd','./msxsdtest/Particles',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb004.xsd','./msxsdtest/Particles',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb006.xsd','./msxsdtest/Particles',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb006.xsd','./msxsdtest/Particles',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb007.xsd','./msxsdtest/Particles',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb007.xsd','./msxsdtest/Particles',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb008.xsd','./msxsdtest/Particles',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb008.xsd','./msxsdtest/Particles',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb009.xsd','./msxsdtest/Particles',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb009.xsd','./msxsdtest/Particles',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb010.xsd','./msxsdtest/Particles',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb010.xsd','./msxsdtest/Particles',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb011.xsd','./msxsdtest/Particles',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesHb011.xsd','./msxsdtest/Particles',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa001.xsd','./msxsdtest/Particles',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa001.xsd','./msxsdtest/Particles',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIa001.xml','./msxsdtest/Particles',valid,S39),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIa001.xml','./msxsdtest/Particles',valid,S39),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa003.xsd','./msxsdtest/Particles',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa003.xsd','./msxsdtest/Particles',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIa003.xml','./msxsdtest/Particles',valid,S40),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIa003.xml','./msxsdtest/Particles',valid,S40),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa004.xsd','./msxsdtest/Particles',valid),
+ {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa004.xsd','./msxsdtest/Particles',valid),
STResList42 = [STRes41|STResList41],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIa004.xml','./msxsdtest/Particles',valid,S41),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIa004.xml','./msxsdtest/Particles',valid,S41),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa005.xsd','./msxsdtest/Particles',valid),
+ {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa005.xsd','./msxsdtest/Particles',valid),
STResList43 = [STRes42|STResList42],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIa005.xml','./msxsdtest/Particles',valid,S42),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIa005.xml','./msxsdtest/Particles',valid,S42),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa006.xsd','./msxsdtest/Particles',invalid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa006.xsd','./msxsdtest/Particles',invalid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa008.xsd','./msxsdtest/Particles',invalid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIa008.xsd','./msxsdtest/Particles',invalid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb001.xsd','./msxsdtest/Particles',valid),
+ {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb001.xsd','./msxsdtest/Particles',valid),
STResList46 = [STRes45|STResList45],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIb001.xml','./msxsdtest/Particles',valid,S45),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIb001.xml','./msxsdtest/Particles',valid,S45),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb002.xsd','./msxsdtest/Particles',invalid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb002.xsd','./msxsdtest/Particles',invalid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb003.xsd','./msxsdtest/Particles',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb003.xsd','./msxsdtest/Particles',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIb003.xml','./msxsdtest/Particles',valid,S47),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIb003.xml','./msxsdtest/Particles',valid,S47),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb004.xsd','./msxsdtest/Particles',invalid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb004.xsd','./msxsdtest/Particles',invalid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb005.xsd','./msxsdtest/Particles',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb005.xsd','./msxsdtest/Particles',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIb005.xml','./msxsdtest/Particles',valid,S49),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIb005.xml','./msxsdtest/Particles',valid,S49),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb006.xsd','./msxsdtest/Particles',invalid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb006.xsd','./msxsdtest/Particles',invalid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb007.xsd','./msxsdtest/Particles',invalid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIb007.xsd','./msxsdtest/Particles',invalid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc001.xsd','./msxsdtest/Particles',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc001.xsd','./msxsdtest/Particles',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIc001.xml','./msxsdtest/Particles',valid,S52),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIc001.xml','./msxsdtest/Particles',valid,S52),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc002.xsd','./msxsdtest/Particles',invalid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc002.xsd','./msxsdtest/Particles',invalid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc003.xsd','./msxsdtest/Particles',invalid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc003.xsd','./msxsdtest/Particles',invalid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc004.xsd','./msxsdtest/Particles',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc004.xsd','./msxsdtest/Particles',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc005.xsd','./msxsdtest/Particles',valid),
+ {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc005.xsd','./msxsdtest/Particles',valid),
STResList57 = [STRes56|STResList56],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIc005.xml','./msxsdtest/Particles',valid,S56),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIc005.xml','./msxsdtest/Particles',valid,S56),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc006.xsd','./msxsdtest/Particles',valid),
+ {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc006.xsd','./msxsdtest/Particles',valid),
STResList58 = [STRes57|STResList57],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIc006.xml','./msxsdtest/Particles',valid,S57),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIc006.xml','./msxsdtest/Particles',valid,S57),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc007.xsd','./msxsdtest/Particles',valid),
+ {STRes58,S58} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIc007.xsd','./msxsdtest/Particles',valid),
STResList59 = [STRes58|STResList58],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIc007.xml','./msxsdtest/Particles',valid,S58),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIc007.xml','./msxsdtest/Particles',valid,S58),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId001.xsd','./msxsdtest/Particles',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId001.xsd','./msxsdtest/Particles',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId001.xml','./msxsdtest/Particles',valid,S59),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId001.xml','./msxsdtest/Particles',valid,S59),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId002.xsd','./msxsdtest/Particles',valid),
+ {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId002.xsd','./msxsdtest/Particles',valid),
STResList61 = [STRes60|STResList60],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId002.xml','./msxsdtest/Particles',valid,S60),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId002.xml','./msxsdtest/Particles',valid,S60),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId003.xsd','./msxsdtest/Particles',invalid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId003.xsd','./msxsdtest/Particles',invalid),
STResList62 = [STRes61|STResList61],
- ?line {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId004.xsd','./msxsdtest/Particles',valid),
+ {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId004.xsd','./msxsdtest/Particles',valid),
STResList63 = [STRes62|STResList62],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId004.xml','./msxsdtest/Particles',valid,S62),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId004.xml','./msxsdtest/Particles',valid,S62),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId005.xsd','./msxsdtest/Particles',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId005.xsd','./msxsdtest/Particles',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId005.xml','./msxsdtest/Particles',valid,S63),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId005.xml','./msxsdtest/Particles',valid,S63),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId006.xsd','./msxsdtest/Particles',invalid),
+ {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId006.xsd','./msxsdtest/Particles',invalid),
STResList65 = [STRes64|STResList64],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId007.xsd','./msxsdtest/Particles',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId007.xsd','./msxsdtest/Particles',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId007.xml','./msxsdtest/Particles',valid,S65),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId007.xml','./msxsdtest/Particles',valid,S65),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId008.xsd','./msxsdtest/Particles',valid),
+ {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId008.xsd','./msxsdtest/Particles',valid),
STResList67 = [STRes66|STResList66],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId008.xml','./msxsdtest/Particles',valid,S66),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId008.xml','./msxsdtest/Particles',valid,S66),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId009.xsd','./msxsdtest/Particles',valid),
+ {STRes67,S67} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId009.xsd','./msxsdtest/Particles',valid),
STResList68 = [STRes67|STResList67],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId009.xml','./msxsdtest/Particles',valid,S67),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId009.xml','./msxsdtest/Particles',valid,S67),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId010.xsd','./msxsdtest/Particles',valid),
+ {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId010.xsd','./msxsdtest/Particles',valid),
STResList69 = [STRes68|STResList68],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId010.xml','./msxsdtest/Particles',valid,S68),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId010.xml','./msxsdtest/Particles',valid,S68),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId011.xsd','./msxsdtest/Particles',valid),
+ {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId011.xsd','./msxsdtest/Particles',valid),
STResList70 = [STRes69|STResList69],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId011.xml','./msxsdtest/Particles',valid,S69),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesId011.xml','./msxsdtest/Particles',valid,S69),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId012.xsd','./msxsdtest/Particles',invalid),
+ {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesId012.xsd','./msxsdtest/Particles',invalid),
STResList71 = [STRes70|STResList70],
- ?line {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe001.xsd','./msxsdtest/Particles',valid),
+ {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe001.xsd','./msxsdtest/Particles',valid),
STResList72 = [STRes71|STResList71],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe001.xml','./msxsdtest/Particles',valid,S71),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe001.xml','./msxsdtest/Particles',valid,S71),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe002.xsd','./msxsdtest/Particles',valid),
+ {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe002.xsd','./msxsdtest/Particles',valid),
STResList73 = [STRes72|STResList72],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe002.xml','./msxsdtest/Particles',valid,S72),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe002.xml','./msxsdtest/Particles',valid,S72),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe003.xsd','./msxsdtest/Particles',valid),
+ {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe003.xsd','./msxsdtest/Particles',valid),
STResList74 = [STRes73|STResList73],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe003.xml','./msxsdtest/Particles',valid,S73),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe003.xml','./msxsdtest/Particles',valid,S73),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe004.xsd','./msxsdtest/Particles',valid),
+ {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe004.xsd','./msxsdtest/Particles',valid),
STResList75 = [STRes74|STResList74],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe004.xml','./msxsdtest/Particles',valid,S74),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe004.xml','./msxsdtest/Particles',valid,S74),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe005.xsd','./msxsdtest/Particles',valid),
+ {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe005.xsd','./msxsdtest/Particles',valid),
STResList76 = [STRes75|STResList75],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe005.xml','./msxsdtest/Particles',valid,S75),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe005.xml','./msxsdtest/Particles',valid,S75),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe006.xsd','./msxsdtest/Particles',invalid),
+ {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe006.xsd','./msxsdtest/Particles',invalid),
STResList77 = [STRes76|STResList76],
- ?line {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe007.xsd','./msxsdtest/Particles',valid),
+ {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe007.xsd','./msxsdtest/Particles',valid),
STResList78 = [STRes77|STResList77],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe007.xml','./msxsdtest/Particles',valid,S77),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe007.xml','./msxsdtest/Particles',valid,S77),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe008.xsd','./msxsdtest/Particles',valid),
+ {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe008.xsd','./msxsdtest/Particles',valid),
STResList79 = [STRes78|STResList78],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe008.xml','./msxsdtest/Particles',valid,S78),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe008.xml','./msxsdtest/Particles',valid,S78),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe009.xsd','./msxsdtest/Particles',invalid),
+ {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe009.xsd','./msxsdtest/Particles',invalid),
STResList80 = [STRes79|STResList79],
- ?line {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe010.xsd','./msxsdtest/Particles',valid),
+ {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe010.xsd','./msxsdtest/Particles',valid),
STResList81 = [STRes80|STResList80],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe010.xml','./msxsdtest/Particles',valid,S80),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe010.xml','./msxsdtest/Particles',valid,S80),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe011.xsd','./msxsdtest/Particles',valid),
+ {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe011.xsd','./msxsdtest/Particles',valid),
STResList82 = [STRes81|STResList81],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe011.xml','./msxsdtest/Particles',valid,S81),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe011.xml','./msxsdtest/Particles',valid,S81),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe012.xsd','./msxsdtest/Particles',invalid),
+ {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe012.xsd','./msxsdtest/Particles',invalid),
STResList83 = [STRes82|STResList82],
- ?line {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe013.xsd','./msxsdtest/Particles',valid),
+ {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe013.xsd','./msxsdtest/Particles',valid),
STResList84 = [STRes83|STResList83],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe013.xml','./msxsdtest/Particles',valid,S83),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe013.xml','./msxsdtest/Particles',valid,S83),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe014.xsd','./msxsdtest/Particles',invalid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe014.xsd','./msxsdtest/Particles',invalid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe015.xsd','./msxsdtest/Particles',valid),
+ {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe015.xsd','./msxsdtest/Particles',valid),
STResList86 = [STRes85|STResList85],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe015.xml','./msxsdtest/Particles',valid,S85),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe015.xml','./msxsdtest/Particles',valid,S85),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe016.xsd','./msxsdtest/Particles',valid),
+ {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIe016.xsd','./msxsdtest/Particles',valid),
STResList87 = [STRes86|STResList86],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe016.xml','./msxsdtest/Particles',valid,S86),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIe016.xml','./msxsdtest/Particles',valid,S86),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf001.xsd','./msxsdtest/Particles',valid),
+ {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf001.xsd','./msxsdtest/Particles',valid),
STResList88 = [STRes87|STResList87],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf001.xml','./msxsdtest/Particles',valid,S87),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf001.xml','./msxsdtest/Particles',valid,S87),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf002.xsd','./msxsdtest/Particles',valid),
+ {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf002.xsd','./msxsdtest/Particles',valid),
STResList89 = [STRes88|STResList88],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf002.xml','./msxsdtest/Particles',valid,S88),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf002.xml','./msxsdtest/Particles',valid,S88),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf003.xsd','./msxsdtest/Particles',valid),
+ {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf003.xsd','./msxsdtest/Particles',valid),
STResList90 = [STRes89|STResList89],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf003.xml','./msxsdtest/Particles',valid,S89),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf003.xml','./msxsdtest/Particles',valid,S89),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf004.xsd','./msxsdtest/Particles',valid),
+ {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf004.xsd','./msxsdtest/Particles',valid),
STResList91 = [STRes90|STResList90],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf004.xml','./msxsdtest/Particles',valid,S90),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf004.xml','./msxsdtest/Particles',valid,S90),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf005.xsd','./msxsdtest/Particles',valid),
+ {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf005.xsd','./msxsdtest/Particles',valid),
STResList92 = [STRes91|STResList91],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf005.xml','./msxsdtest/Particles',valid,S91),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf005.xml','./msxsdtest/Particles',valid,S91),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf006.xsd','./msxsdtest/Particles',valid),
+ {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf006.xsd','./msxsdtest/Particles',valid),
STResList93 = [STRes92|STResList92],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf006.xml','./msxsdtest/Particles',valid,S92),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIf006.xml','./msxsdtest/Particles',valid,S92),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf007.xsd','./msxsdtest/Particles',invalid),
+ {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf007.xsd','./msxsdtest/Particles',invalid),
STResList94 = [STRes93|STResList93],
- ?line {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf008.xsd','./msxsdtest/Particles',invalid),
+ {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf008.xsd','./msxsdtest/Particles',invalid),
STResList95 = [STRes94|STResList94],
- ?line {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf009.xsd','./msxsdtest/Particles',invalid),
+ {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIf009.xsd','./msxsdtest/Particles',invalid),
STResList96 = [STRes95|STResList95],
- ?line {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg001.xsd','./msxsdtest/Particles',valid),
+ {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg001.xsd','./msxsdtest/Particles',valid),
STResList97 = [STRes96|STResList96],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg001.xml','./msxsdtest/Particles',valid,S96),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg001.xml','./msxsdtest/Particles',valid,S96),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg002.xsd','./msxsdtest/Particles',valid),
+ {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg002.xsd','./msxsdtest/Particles',valid),
STResList98 = [STRes97|STResList97],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg002.xml','./msxsdtest/Particles',valid,S97),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg002.xml','./msxsdtest/Particles',valid,S97),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg003.xsd','./msxsdtest/Particles',valid),
+ {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg003.xsd','./msxsdtest/Particles',valid),
STResList99 = [STRes98|STResList98],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg003.xml','./msxsdtest/Particles',valid,S98),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg003.xml','./msxsdtest/Particles',valid,S98),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg004.xsd','./msxsdtest/Particles',invalid),
+ {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg004.xsd','./msxsdtest/Particles',invalid),
STResList100 = [STRes99|STResList99],
- ?line {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg005.xsd','./msxsdtest/Particles',valid),
+ {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg005.xsd','./msxsdtest/Particles',valid),
STResList101 = [STRes100|STResList100],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg005.xml','./msxsdtest/Particles',valid,S100),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg005.xml','./msxsdtest/Particles',valid,S100),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg006.xsd','./msxsdtest/Particles',invalid),
+ {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg006.xsd','./msxsdtest/Particles',invalid),
STResList102 = [STRes101|STResList101],
- ?line {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg007.xsd','./msxsdtest/Particles',invalid),
+ {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg007.xsd','./msxsdtest/Particles',invalid),
STResList103 = [STRes102|STResList102],
- ?line {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg008.xsd','./msxsdtest/Particles',invalid),
+ {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg008.xsd','./msxsdtest/Particles',invalid),
STResList104 = [STRes103|STResList103],
- ?line {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg009.xsd','./msxsdtest/Particles',invalid),
+ {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg009.xsd','./msxsdtest/Particles',invalid),
STResList105 = [STRes104|STResList104],
- ?line {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg010.xsd','./msxsdtest/Particles',invalid),
+ {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg010.xsd','./msxsdtest/Particles',invalid),
STResList106 = [STRes105|STResList105],
- ?line {STRes106,S106} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg011.xsd','./msxsdtest/Particles',valid),
+ {STRes106,S106} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg011.xsd','./msxsdtest/Particles',valid),
STResList107 = [STRes106|STResList106],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg011.xml','./msxsdtest/Particles',valid,S106),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg011.xml','./msxsdtest/Particles',valid,S106),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg012.xsd','./msxsdtest/Particles',valid),
+ {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg012.xsd','./msxsdtest/Particles',valid),
STResList108 = [STRes107|STResList107],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg012.xml','./msxsdtest/Particles',valid,S107),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg012.xml','./msxsdtest/Particles',valid,S107),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg013.xsd','./msxsdtest/Particles',invalid),
+ {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg013.xsd','./msxsdtest/Particles',invalid),
STResList109 = [STRes108|STResList108],
- ?line {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg014.xsd','./msxsdtest/Particles',valid),
+ {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg014.xsd','./msxsdtest/Particles',valid),
STResList110 = [STRes109|STResList109],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg014.xml','./msxsdtest/Particles',valid,S109),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg014.xml','./msxsdtest/Particles',valid,S109),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg015.xsd','./msxsdtest/Particles',valid),
+ {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg015.xsd','./msxsdtest/Particles',valid),
STResList111 = [STRes110|STResList110],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg015.xml','./msxsdtest/Particles',valid,S110),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIg015.xml','./msxsdtest/Particles',valid,S110),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg016.xsd','./msxsdtest/Particles',invalid),
+ {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIg016.xsd','./msxsdtest/Particles',invalid),
STResList112 = [STRes111|STResList111],
- ?line {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIh001.xsd','./msxsdtest/Particles',invalid),
+ {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIh001.xsd','./msxsdtest/Particles',invalid),
STResList113 = [STRes112|STResList112],
- ?line {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj001.xsd','./msxsdtest/Particles',valid),
+ {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj001.xsd','./msxsdtest/Particles',valid),
STResList114 = [STRes113|STResList113],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIj001.xml','./msxsdtest/Particles',valid,S113),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIj001.xml','./msxsdtest/Particles',valid,S113),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj002.xsd','./msxsdtest/Particles',valid),
+ {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj002.xsd','./msxsdtest/Particles',valid),
STResList115 = [STRes114|STResList114],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIj002.xml','./msxsdtest/Particles',valid,S114),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIj002.xml','./msxsdtest/Particles',valid,S114),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj003.xsd','./msxsdtest/Particles',invalid),
+ {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj003.xsd','./msxsdtest/Particles',invalid),
STResList116 = [STRes115|STResList115],
- ?line {STRes116,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj004.xsd','./msxsdtest/Particles',invalid),
+ {STRes116,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj004.xsd','./msxsdtest/Particles',invalid),
STResList117 = [STRes116|STResList116],
- ?line {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj005.xsd','./msxsdtest/Particles',valid),
+ {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj005.xsd','./msxsdtest/Particles',valid),
STResList118 = [STRes117|STResList117],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIj005.xml','./msxsdtest/Particles',valid,S117),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIj005.xml','./msxsdtest/Particles',valid,S117),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj006.xsd','./msxsdtest/Particles',valid),
+ {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj006.xsd','./msxsdtest/Particles',valid),
STResList119 = [STRes118|STResList118],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIj006.xml','./msxsdtest/Particles',valid,S118),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIj006.xml','./msxsdtest/Particles',valid,S118),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj007.xsd','./msxsdtest/Particles',invalid),
+ {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj007.xsd','./msxsdtest/Particles',invalid),
STResList120 = [STRes119|STResList119],
- ?line {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj008.xsd','./msxsdtest/Particles',invalid),
+ {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj008.xsd','./msxsdtest/Particles',invalid),
STResList121 = [STRes120|STResList120],
- ?line {STRes121,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj009.xsd','./msxsdtest/Particles',invalid),
+ {STRes121,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj009.xsd','./msxsdtest/Particles',invalid),
STResList122 = [STRes121|STResList121],
- ?line {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj010.xsd','./msxsdtest/Particles',invalid),
+ {STRes122,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj010.xsd','./msxsdtest/Particles',invalid),
STResList123 = [STRes122|STResList122],
- ?line {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj011.xsd','./msxsdtest/Particles',invalid),
+ {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj011.xsd','./msxsdtest/Particles',invalid),
STResList124 = [STRes123|STResList123],
- ?line {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj012.xsd','./msxsdtest/Particles',invalid),
+ {STRes124,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj012.xsd','./msxsdtest/Particles',invalid),
STResList125 = [STRes124|STResList124],
- ?line {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj013.xsd','./msxsdtest/Particles',invalid),
+ {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj013.xsd','./msxsdtest/Particles',invalid),
STResList126 = [STRes125|STResList125],
- ?line {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj015.xsd','./msxsdtest/Particles',invalid),
+ {STRes126,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj015.xsd','./msxsdtest/Particles',invalid),
STResList127 = [STRes126|STResList126],
- ?line {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj016.xsd','./msxsdtest/Particles',invalid),
+ {STRes127,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIj016.xsd','./msxsdtest/Particles',invalid),
STResList128 = [STRes127|STResList127],
- ?line {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk001.xsd','./msxsdtest/Particles',valid),
+ {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk001.xsd','./msxsdtest/Particles',valid),
STResList129 = [STRes128|STResList128],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIk001.xml','./msxsdtest/Particles',valid,S128),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIk001.xml','./msxsdtest/Particles',valid,S128),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes129,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk002.xsd','./msxsdtest/Particles',invalid),
+ {STRes129,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk002.xsd','./msxsdtest/Particles',invalid),
STResList130 = [STRes129|STResList129],
- ?line {STRes130,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk003.xsd','./msxsdtest/Particles',invalid),
+ {STRes130,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk003.xsd','./msxsdtest/Particles',invalid),
STResList131 = [STRes130|STResList130],
- ?line {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk004.xsd','./msxsdtest/Particles',valid),
+ {STRes131,S131} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk004.xsd','./msxsdtest/Particles',valid),
STResList132 = [STRes131|STResList131],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIk004.xml','./msxsdtest/Particles',valid,S131),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIk004.xml','./msxsdtest/Particles',valid,S131),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk005.xsd','./msxsdtest/Particles',invalid),
+ {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk005.xsd','./msxsdtest/Particles',invalid),
STResList133 = [STRes132|STResList132],
- ?line {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk006.xsd','./msxsdtest/Particles',invalid),
+ {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk006.xsd','./msxsdtest/Particles',invalid),
STResList134 = [STRes133|STResList133],
- ?line {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk007.xsd','./msxsdtest/Particles',invalid),
+ {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk007.xsd','./msxsdtest/Particles',invalid),
STResList135 = [STRes134|STResList134],
- ?line {STRes135,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk008.xsd','./msxsdtest/Particles',invalid),
+ {STRes135,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk008.xsd','./msxsdtest/Particles',invalid),
STResList136 = [STRes135|STResList135],
- ?line {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk009.xsd','./msxsdtest/Particles',invalid),
+ {STRes136,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk009.xsd','./msxsdtest/Particles',invalid),
STResList137 = [STRes136|STResList136],
- ?line {STRes137,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk010.xsd','./msxsdtest/Particles',invalid),
+ {STRes137,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk010.xsd','./msxsdtest/Particles',invalid),
STResList138 = [STRes137|STResList137],
- ?line {STRes138,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk011.xsd','./msxsdtest/Particles',invalid),
+ {STRes138,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk011.xsd','./msxsdtest/Particles',invalid),
STResList139 = [STRes138|STResList138],
- ?line {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk012.xsd','./msxsdtest/Particles',valid),
+ {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk012.xsd','./msxsdtest/Particles',valid),
STResList140 = [STRes139|STResList139],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIk012.xml','./msxsdtest/Particles',valid,S139),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIk012.xml','./msxsdtest/Particles',valid,S139),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes140,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk013.xsd','./msxsdtest/Particles',invalid),
+ {STRes140,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk013.xsd','./msxsdtest/Particles',invalid),
STResList141 = [STRes140|STResList140],
- ?line {STRes141,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk015.xsd','./msxsdtest/Particles',invalid),
+ {STRes141,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk015.xsd','./msxsdtest/Particles',invalid),
STResList142 = [STRes141|STResList141],
- ?line {STRes142,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk016.xsd','./msxsdtest/Particles',invalid),
+ {STRes142,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk016.xsd','./msxsdtest/Particles',invalid),
STResList143 = [STRes142|STResList142],
- ?line {STRes143,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk019.xsd','./msxsdtest/Particles',invalid),
+ {STRes143,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk019.xsd','./msxsdtest/Particles',invalid),
STResList144 = [STRes143|STResList143],
- ?line {STRes144,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk020.xsd','./msxsdtest/Particles',invalid),
+ {STRes144,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk020.xsd','./msxsdtest/Particles',invalid),
STResList145 = [STRes144|STResList144],
- ?line {STRes145,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk021.xsd','./msxsdtest/Particles',invalid),
+ {STRes145,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk021.xsd','./msxsdtest/Particles',invalid),
STResList146 = [STRes145|STResList145],
- ?line {STRes146,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk022.xsd','./msxsdtest/Particles',invalid),
+ {STRes146,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk022.xsd','./msxsdtest/Particles',invalid),
STResList147 = [STRes146|STResList146],
- ?line {STRes147,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk024.xsd','./msxsdtest/Particles',invalid),
+ {STRes147,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk024.xsd','./msxsdtest/Particles',invalid),
STResList148 = [STRes147|STResList147],
- ?line {STRes148,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk025.xsd','./msxsdtest/Particles',invalid),
+ {STRes148,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk025.xsd','./msxsdtest/Particles',invalid),
STResList149 = [STRes148|STResList148],
- ?line {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk026.xsd','./msxsdtest/Particles',valid),
+ {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk026.xsd','./msxsdtest/Particles',valid),
STResList150 = [STRes149|STResList149],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIk026.xml','./msxsdtest/Particles',valid,S149),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesIk026.xml','./msxsdtest/Particles',valid,S149),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes150,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk027.xsd','./msxsdtest/Particles',invalid),
+ {STRes150,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesIk027.xsd','./msxsdtest/Particles',invalid),
STResList151 = [STRes150|STResList150],
@@ -20101,622 +20089,622 @@ particlesFHI(Config) when is_list(Config) ->
particlesJ(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa001.xsd','./msxsdtest/Particles',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa001.xsd','./msxsdtest/Particles',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa001.xml','./msxsdtest/Particles',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa001.xml','./msxsdtest/Particles',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa002.xsd','./msxsdtest/Particles',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa002.xsd','./msxsdtest/Particles',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa002.xml','./msxsdtest/Particles',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa002.xml','./msxsdtest/Particles',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa003.xsd','./msxsdtest/Particles',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa003.xsd','./msxsdtest/Particles',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa004.xsd','./msxsdtest/Particles',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa004.xsd','./msxsdtest/Particles',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa004.xml','./msxsdtest/Particles',valid,S3),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa004.xml','./msxsdtest/Particles',valid,S3),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa005.xsd','./msxsdtest/Particles',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa005.xsd','./msxsdtest/Particles',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa005.xml','./msxsdtest/Particles',valid,S4),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa005.xml','./msxsdtest/Particles',valid,S4),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa006.xsd','./msxsdtest/Particles',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa006.xsd','./msxsdtest/Particles',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa007.xsd','./msxsdtest/Particles',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa007.xsd','./msxsdtest/Particles',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa007.xml','./msxsdtest/Particles',valid,S6),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa007.xml','./msxsdtest/Particles',valid,S6),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa008.xsd','./msxsdtest/Particles',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa008.xsd','./msxsdtest/Particles',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa008.xml','./msxsdtest/Particles',valid,S7),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa008.xml','./msxsdtest/Particles',valid,S7),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa009.xsd','./msxsdtest/Particles',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa009.xsd','./msxsdtest/Particles',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa009.xml','./msxsdtest/Particles',valid,S8),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa009.xml','./msxsdtest/Particles',valid,S8),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa010.xsd','./msxsdtest/Particles',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa010.xsd','./msxsdtest/Particles',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa010.xml','./msxsdtest/Particles',valid,S9),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa010.xml','./msxsdtest/Particles',valid,S9),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa011.xsd','./msxsdtest/Particles',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa011.xsd','./msxsdtest/Particles',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa011.xml','./msxsdtest/Particles',valid,S10),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJa011.xml','./msxsdtest/Particles',valid,S10),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa012.xsd','./msxsdtest/Particles',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJa012.xsd','./msxsdtest/Particles',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb001.xsd','./msxsdtest/Particles',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb001.xsd','./msxsdtest/Particles',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb001.xml','./msxsdtest/Particles',valid,S12),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb001.xml','./msxsdtest/Particles',valid,S12),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb002.xsd','./msxsdtest/Particles',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb002.xsd','./msxsdtest/Particles',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb002.xml','./msxsdtest/Particles',valid,S13),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb002.xml','./msxsdtest/Particles',valid,S13),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb003.xsd','./msxsdtest/Particles',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb003.xsd','./msxsdtest/Particles',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb003.xml','./msxsdtest/Particles',valid,S14),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb003.xml','./msxsdtest/Particles',valid,S14),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb004.xsd','./msxsdtest/Particles',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb004.xsd','./msxsdtest/Particles',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb004.xml','./msxsdtest/Particles',valid,S15),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb004.xml','./msxsdtest/Particles',valid,S15),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb005.xsd','./msxsdtest/Particles',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb005.xsd','./msxsdtest/Particles',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb005.xml','./msxsdtest/Particles',valid,S16),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb005.xml','./msxsdtest/Particles',valid,S16),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb006.xsd','./msxsdtest/Particles',invalid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb006.xsd','./msxsdtest/Particles',invalid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb007.xsd','./msxsdtest/Particles',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb007.xsd','./msxsdtest/Particles',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb007.xml','./msxsdtest/Particles',valid,S18),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb007.xml','./msxsdtest/Particles',valid,S18),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb008.xsd','./msxsdtest/Particles',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb008.xsd','./msxsdtest/Particles',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb008.xml','./msxsdtest/Particles',valid,S19),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb008.xml','./msxsdtest/Particles',valid,S19),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb009.xsd','./msxsdtest/Particles',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb009.xsd','./msxsdtest/Particles',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb010.xsd','./msxsdtest/Particles',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb010.xsd','./msxsdtest/Particles',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb010.xml','./msxsdtest/Particles',valid,S21),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb010.xml','./msxsdtest/Particles',valid,S21),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb011.xsd','./msxsdtest/Particles',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb011.xsd','./msxsdtest/Particles',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb011.xml','./msxsdtest/Particles',valid,S22),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb011.xml','./msxsdtest/Particles',valid,S22),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb012.xsd','./msxsdtest/Particles',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb012.xsd','./msxsdtest/Particles',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb013.xsd','./msxsdtest/Particles',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb013.xsd','./msxsdtest/Particles',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb013.xml','./msxsdtest/Particles',valid,S24),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb013.xml','./msxsdtest/Particles',valid,S24),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb014.xsd','./msxsdtest/Particles',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb014.xsd','./msxsdtest/Particles',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb015.xsd','./msxsdtest/Particles',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb015.xsd','./msxsdtest/Particles',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb015.xml','./msxsdtest/Particles',valid,S26),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb015.xml','./msxsdtest/Particles',valid,S26),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb016.xsd','./msxsdtest/Particles',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJb016.xsd','./msxsdtest/Particles',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb016.xml','./msxsdtest/Particles',valid,S27),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJb016.xml','./msxsdtest/Particles',valid,S27),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc001.xsd','./msxsdtest/Particles',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc001.xsd','./msxsdtest/Particles',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc001.xml','./msxsdtest/Particles',valid,S28),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc001.xml','./msxsdtest/Particles',valid,S28),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc002.xsd','./msxsdtest/Particles',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc002.xsd','./msxsdtest/Particles',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc002.xml','./msxsdtest/Particles',valid,S29),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc002.xml','./msxsdtest/Particles',valid,S29),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc003.xsd','./msxsdtest/Particles',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc003.xsd','./msxsdtest/Particles',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc004.xsd','./msxsdtest/Particles',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc004.xsd','./msxsdtest/Particles',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc004.xml','./msxsdtest/Particles',valid,S31),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc004.xml','./msxsdtest/Particles',valid,S31),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc005.xsd','./msxsdtest/Particles',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc005.xsd','./msxsdtest/Particles',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc005.xml','./msxsdtest/Particles',valid,S32),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc005.xml','./msxsdtest/Particles',valid,S32),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc006.xsd','./msxsdtest/Particles',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc006.xsd','./msxsdtest/Particles',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc007.xsd','./msxsdtest/Particles',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc007.xsd','./msxsdtest/Particles',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc007.xml','./msxsdtest/Particles',valid,S34),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc007.xml','./msxsdtest/Particles',valid,S34),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc008.xsd','./msxsdtest/Particles',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc008.xsd','./msxsdtest/Particles',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc008.xml','./msxsdtest/Particles',valid,S35),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc008.xml','./msxsdtest/Particles',valid,S35),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc009.xsd','./msxsdtest/Particles',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc009.xsd','./msxsdtest/Particles',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc009.xml','./msxsdtest/Particles',valid,S36),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc009.xml','./msxsdtest/Particles',valid,S36),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc010.xsd','./msxsdtest/Particles',valid),
+ {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc010.xsd','./msxsdtest/Particles',valid),
STResList38 = [STRes37|STResList37],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc010.xml','./msxsdtest/Particles',valid,S37),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc010.xml','./msxsdtest/Particles',valid,S37),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc011.xsd','./msxsdtest/Particles',valid),
+ {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc011.xsd','./msxsdtest/Particles',valid),
STResList39 = [STRes38|STResList38],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc011.xml','./msxsdtest/Particles',valid,S38),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJc011.xml','./msxsdtest/Particles',valid,S38),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc012.xsd','./msxsdtest/Particles',invalid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJc012.xsd','./msxsdtest/Particles',invalid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd001.xsd','./msxsdtest/Particles',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd001.xsd','./msxsdtest/Particles',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd001.xml','./msxsdtest/Particles',valid,S40),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd001.xml','./msxsdtest/Particles',valid,S40),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd002.xsd','./msxsdtest/Particles',valid),
+ {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd002.xsd','./msxsdtest/Particles',valid),
STResList42 = [STRes41|STResList41],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd002.xml','./msxsdtest/Particles',valid,S41),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd002.xml','./msxsdtest/Particles',valid,S41),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd003.xsd','./msxsdtest/Particles',valid),
+ {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd003.xsd','./msxsdtest/Particles',valid),
STResList43 = [STRes42|STResList42],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd003.xml','./msxsdtest/Particles',valid,S42),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd003.xml','./msxsdtest/Particles',valid,S42),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd004.xsd','./msxsdtest/Particles',valid),
+ {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd004.xsd','./msxsdtest/Particles',valid),
STResList44 = [STRes43|STResList43],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd004.xml','./msxsdtest/Particles',valid,S43),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd004.xml','./msxsdtest/Particles',valid,S43),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd005.xsd','./msxsdtest/Particles',valid),
+ {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd005.xsd','./msxsdtest/Particles',valid),
STResList45 = [STRes44|STResList44],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd005.xml','./msxsdtest/Particles',valid,S44),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd005.xml','./msxsdtest/Particles',valid,S44),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd006.xsd','./msxsdtest/Particles',invalid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd006.xsd','./msxsdtest/Particles',invalid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd007.xsd','./msxsdtest/Particles',valid),
+ {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd007.xsd','./msxsdtest/Particles',valid),
STResList47 = [STRes46|STResList46],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd007.xml','./msxsdtest/Particles',valid,S46),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd007.xml','./msxsdtest/Particles',valid,S46),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd008.xsd','./msxsdtest/Particles',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd008.xsd','./msxsdtest/Particles',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd008.xml','./msxsdtest/Particles',valid,S47),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd008.xml','./msxsdtest/Particles',valid,S47),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd009.xsd','./msxsdtest/Particles',invalid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd009.xsd','./msxsdtest/Particles',invalid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd010.xsd','./msxsdtest/Particles',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd010.xsd','./msxsdtest/Particles',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd010.xml','./msxsdtest/Particles',valid,S49),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd010.xml','./msxsdtest/Particles',valid,S49),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd011.xsd','./msxsdtest/Particles',valid),
+ {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd011.xsd','./msxsdtest/Particles',valid),
STResList51 = [STRes50|STResList50],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd011.xml','./msxsdtest/Particles',valid,S50),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd011.xml','./msxsdtest/Particles',valid,S50),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd012.xsd','./msxsdtest/Particles',invalid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd012.xsd','./msxsdtest/Particles',invalid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd013.xsd','./msxsdtest/Particles',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd013.xsd','./msxsdtest/Particles',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd013.xml','./msxsdtest/Particles',valid,S52),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd013.xml','./msxsdtest/Particles',valid,S52),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd014.xsd','./msxsdtest/Particles',invalid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd014.xsd','./msxsdtest/Particles',invalid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd015.xsd','./msxsdtest/Particles',valid),
+ {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd015.xsd','./msxsdtest/Particles',valid),
STResList55 = [STRes54|STResList54],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd015.xml','./msxsdtest/Particles',valid,S54),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd015.xml','./msxsdtest/Particles',valid,S54),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd016.xsd','./msxsdtest/Particles',valid),
+ {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJd016.xsd','./msxsdtest/Particles',valid),
STResList56 = [STRes55|STResList55],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd016.xml','./msxsdtest/Particles',valid,S55),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJd016.xml','./msxsdtest/Particles',valid,S55),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe001.xsd','./msxsdtest/Particles',valid),
+ {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe001.xsd','./msxsdtest/Particles',valid),
STResList57 = [STRes56|STResList56],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe001.xml','./msxsdtest/Particles',valid,S56),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe001.xml','./msxsdtest/Particles',valid,S56),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe002.xsd','./msxsdtest/Particles',valid),
+ {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe002.xsd','./msxsdtest/Particles',valid),
STResList58 = [STRes57|STResList57],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe002.xml','./msxsdtest/Particles',valid,S57),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe002.xml','./msxsdtest/Particles',valid,S57),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe003.xsd','./msxsdtest/Particles',invalid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe003.xsd','./msxsdtest/Particles',invalid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe004.xsd','./msxsdtest/Particles',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe004.xsd','./msxsdtest/Particles',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe004.xml','./msxsdtest/Particles',valid,S59),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe004.xml','./msxsdtest/Particles',valid,S59),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe005.xsd','./msxsdtest/Particles',valid),
+ {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe005.xsd','./msxsdtest/Particles',valid),
STResList61 = [STRes60|STResList60],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe005.xml','./msxsdtest/Particles',valid,S60),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe005.xml','./msxsdtest/Particles',valid,S60),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe006.xsd','./msxsdtest/Particles',invalid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe006.xsd','./msxsdtest/Particles',invalid),
STResList62 = [STRes61|STResList61],
- ?line {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe007.xsd','./msxsdtest/Particles',valid),
+ {STRes62,S62} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe007.xsd','./msxsdtest/Particles',valid),
STResList63 = [STRes62|STResList62],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe007.xml','./msxsdtest/Particles',valid,S62),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe007.xml','./msxsdtest/Particles',valid,S62),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe008.xsd','./msxsdtest/Particles',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe008.xsd','./msxsdtest/Particles',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe008.xml','./msxsdtest/Particles',valid,S63),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe008.xml','./msxsdtest/Particles',valid,S63),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe009.xsd','./msxsdtest/Particles',valid),
+ {STRes64,S64} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe009.xsd','./msxsdtest/Particles',valid),
STResList65 = [STRes64|STResList64],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe009.xml','./msxsdtest/Particles',valid,S64),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe009.xml','./msxsdtest/Particles',valid,S64),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe010.xsd','./msxsdtest/Particles',valid),
+ {STRes65,S65} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe010.xsd','./msxsdtest/Particles',valid),
STResList66 = [STRes65|STResList65],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe010.xml','./msxsdtest/Particles',valid,S65),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe010.xml','./msxsdtest/Particles',valid,S65),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe011.xsd','./msxsdtest/Particles',valid),
+ {STRes66,S66} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe011.xsd','./msxsdtest/Particles',valid),
STResList67 = [STRes66|STResList66],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe011.xml','./msxsdtest/Particles',valid,S66),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJe011.xml','./msxsdtest/Particles',valid,S66),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe012.xsd','./msxsdtest/Particles',invalid),
+ {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJe012.xsd','./msxsdtest/Particles',invalid),
STResList68 = [STRes67|STResList67],
- ?line {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf001.xsd','./msxsdtest/Particles',valid),
+ {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf001.xsd','./msxsdtest/Particles',valid),
STResList69 = [STRes68|STResList68],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf001.xml','./msxsdtest/Particles',valid,S68),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf001.xml','./msxsdtest/Particles',valid,S68),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf002.xsd','./msxsdtest/Particles',valid),
+ {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf002.xsd','./msxsdtest/Particles',valid),
STResList70 = [STRes69|STResList69],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf002.xml','./msxsdtest/Particles',valid,S69),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf002.xml','./msxsdtest/Particles',valid,S69),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf003.xsd','./msxsdtest/Particles',valid),
+ {STRes70,S70} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf003.xsd','./msxsdtest/Particles',valid),
STResList71 = [STRes70|STResList70],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf003.xml','./msxsdtest/Particles',valid,S70),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf003.xml','./msxsdtest/Particles',valid,S70),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf004.xsd','./msxsdtest/Particles',valid),
+ {STRes71,S71} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf004.xsd','./msxsdtest/Particles',valid),
STResList72 = [STRes71|STResList71],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf004.xml','./msxsdtest/Particles',valid,S71),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf004.xml','./msxsdtest/Particles',valid,S71),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf005.xsd','./msxsdtest/Particles',valid),
+ {STRes72,S72} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf005.xsd','./msxsdtest/Particles',valid),
STResList73 = [STRes72|STResList72],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf005.xml','./msxsdtest/Particles',valid,S72),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf005.xml','./msxsdtest/Particles',valid,S72),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf006.xsd','./msxsdtest/Particles',invalid),
+ {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf006.xsd','./msxsdtest/Particles',invalid),
STResList74 = [STRes73|STResList73],
- ?line {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf007.xsd','./msxsdtest/Particles',valid),
+ {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf007.xsd','./msxsdtest/Particles',valid),
STResList75 = [STRes74|STResList74],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf007.xml','./msxsdtest/Particles',valid,S74),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf007.xml','./msxsdtest/Particles',valid,S74),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf008.xsd','./msxsdtest/Particles',valid),
+ {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf008.xsd','./msxsdtest/Particles',valid),
STResList76 = [STRes75|STResList75],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf008.xml','./msxsdtest/Particles',valid,S75),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf008.xml','./msxsdtest/Particles',valid,S75),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf009.xsd','./msxsdtest/Particles',invalid),
+ {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf009.xsd','./msxsdtest/Particles',invalid),
STResList77 = [STRes76|STResList76],
- ?line {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf010.xsd','./msxsdtest/Particles',valid),
+ {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf010.xsd','./msxsdtest/Particles',valid),
STResList78 = [STRes77|STResList77],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf010.xml','./msxsdtest/Particles',valid,S77),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf010.xml','./msxsdtest/Particles',valid,S77),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf011.xsd','./msxsdtest/Particles',valid),
+ {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf011.xsd','./msxsdtest/Particles',valid),
STResList79 = [STRes78|STResList78],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf011.xml','./msxsdtest/Particles',valid,S78),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf011.xml','./msxsdtest/Particles',valid,S78),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf012.xsd','./msxsdtest/Particles',invalid),
+ {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf012.xsd','./msxsdtest/Particles',invalid),
STResList80 = [STRes79|STResList79],
- ?line {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf013.xsd','./msxsdtest/Particles',valid),
+ {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf013.xsd','./msxsdtest/Particles',valid),
STResList81 = [STRes80|STResList80],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf013.xml','./msxsdtest/Particles',valid,S80),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf013.xml','./msxsdtest/Particles',valid,S80),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf014.xsd','./msxsdtest/Particles',invalid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf014.xsd','./msxsdtest/Particles',invalid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf015.xsd','./msxsdtest/Particles',valid),
+ {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf015.xsd','./msxsdtest/Particles',valid),
STResList83 = [STRes82|STResList82],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf015.xml','./msxsdtest/Particles',valid,S82),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf015.xml','./msxsdtest/Particles',valid,S82),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf016.xsd','./msxsdtest/Particles',valid),
+ {STRes83,S83} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJf016.xsd','./msxsdtest/Particles',valid),
STResList84 = [STRes83|STResList83],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf016.xml','./msxsdtest/Particles',valid,S83),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJf016.xml','./msxsdtest/Particles',valid,S83),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJg001.xsd','./msxsdtest/Particles',invalid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJg001.xsd','./msxsdtest/Particles',invalid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJh001.xsd','./msxsdtest/Particles',invalid),
+ {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJh001.xsd','./msxsdtest/Particles',invalid),
STResList86 = [STRes85|STResList85],
- ?line {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj001.xsd','./msxsdtest/Particles',valid),
+ {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj001.xsd','./msxsdtest/Particles',valid),
STResList87 = [STRes86|STResList86],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj001.xml','./msxsdtest/Particles',valid,S86),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj001.xml','./msxsdtest/Particles',valid,S86),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj002.xsd','./msxsdtest/Particles',valid),
+ {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj002.xsd','./msxsdtest/Particles',valid),
STResList88 = [STRes87|STResList87],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj002.xml','./msxsdtest/Particles',valid,S87),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj002.xml','./msxsdtest/Particles',valid,S87),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj003.xsd','./msxsdtest/Particles',invalid),
+ {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj003.xsd','./msxsdtest/Particles',invalid),
STResList89 = [STRes88|STResList88],
- ?line {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj004.xsd','./msxsdtest/Particles',valid),
+ {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj004.xsd','./msxsdtest/Particles',valid),
STResList90 = [STRes89|STResList89],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj004.xml','./msxsdtest/Particles',valid,S89),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj004.xml','./msxsdtest/Particles',valid,S89),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj005.xsd','./msxsdtest/Particles',valid),
+ {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj005.xsd','./msxsdtest/Particles',valid),
STResList91 = [STRes90|STResList90],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj005.xml','./msxsdtest/Particles',valid,S90),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj005.xml','./msxsdtest/Particles',valid,S90),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj006.xsd','./msxsdtest/Particles',invalid),
+ {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj006.xsd','./msxsdtest/Particles',invalid),
STResList92 = [STRes91|STResList91],
- ?line {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj007.xsd','./msxsdtest/Particles',valid),
+ {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj007.xsd','./msxsdtest/Particles',valid),
STResList93 = [STRes92|STResList92],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj007.xml','./msxsdtest/Particles',valid,S92),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj007.xml','./msxsdtest/Particles',valid,S92),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj008.xsd','./msxsdtest/Particles',valid),
+ {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj008.xsd','./msxsdtest/Particles',valid),
STResList94 = [STRes93|STResList93],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj008.xml','./msxsdtest/Particles',valid,S93),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj008.xml','./msxsdtest/Particles',valid,S93),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj009.xsd','./msxsdtest/Particles',valid),
+ {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj009.xsd','./msxsdtest/Particles',valid),
STResList95 = [STRes94|STResList94],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj009.xml','./msxsdtest/Particles',valid,S94),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj009.xml','./msxsdtest/Particles',valid,S94),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj010.xsd','./msxsdtest/Particles',valid),
+ {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj010.xsd','./msxsdtest/Particles',valid),
STResList96 = [STRes95|STResList95],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj010.xml','./msxsdtest/Particles',valid,S95),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj010.xml','./msxsdtest/Particles',valid,S95),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj011.xsd','./msxsdtest/Particles',valid),
+ {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj011.xsd','./msxsdtest/Particles',valid),
STResList97 = [STRes96|STResList96],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj011.xml','./msxsdtest/Particles',valid,S96),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJj011.xml','./msxsdtest/Particles',valid,S96),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj012.xsd','./msxsdtest/Particles',invalid),
+ {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJj012.xsd','./msxsdtest/Particles',invalid),
STResList98 = [STRes97|STResList97],
- ?line {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk001.xsd','./msxsdtest/Particles',valid),
+ {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk001.xsd','./msxsdtest/Particles',valid),
STResList99 = [STRes98|STResList98],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk001.xml','./msxsdtest/Particles',valid,S98),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk001.xml','./msxsdtest/Particles',valid,S98),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk002.xsd','./msxsdtest/Particles',valid),
+ {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk002.xsd','./msxsdtest/Particles',valid),
STResList100 = [STRes99|STResList99],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk002.xml','./msxsdtest/Particles',valid,S99),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk002.xml','./msxsdtest/Particles',valid,S99),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk003.xsd','./msxsdtest/Particles',valid),
+ {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk003.xsd','./msxsdtest/Particles',valid),
STResList101 = [STRes100|STResList100],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk003.xml','./msxsdtest/Particles',valid,S100),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk003.xml','./msxsdtest/Particles',valid,S100),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk004.xsd','./msxsdtest/Particles',valid),
+ {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk004.xsd','./msxsdtest/Particles',valid),
STResList102 = [STRes101|STResList101],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk004.xml','./msxsdtest/Particles',valid,S101),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk004.xml','./msxsdtest/Particles',valid,S101),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes102,S102} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk005.xsd','./msxsdtest/Particles',valid),
+ {STRes102,S102} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk005.xsd','./msxsdtest/Particles',valid),
STResList103 = [STRes102|STResList102],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk005.xml','./msxsdtest/Particles',valid,S102),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk005.xml','./msxsdtest/Particles',valid,S102),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk006.xsd','./msxsdtest/Particles',invalid),
+ {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk006.xsd','./msxsdtest/Particles',invalid),
STResList104 = [STRes103|STResList103],
- ?line {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk007.xsd','./msxsdtest/Particles',valid),
+ {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk007.xsd','./msxsdtest/Particles',valid),
STResList105 = [STRes104|STResList104],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk007.xml','./msxsdtest/Particles',valid,S104),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk007.xml','./msxsdtest/Particles',valid,S104),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk008.xsd','./msxsdtest/Particles',valid),
+ {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk008.xsd','./msxsdtest/Particles',valid),
STResList106 = [STRes105|STResList105],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk008.xml','./msxsdtest/Particles',valid,S105),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk008.xml','./msxsdtest/Particles',valid,S105),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk009.xsd','./msxsdtest/Particles',invalid),
+ {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk009.xsd','./msxsdtest/Particles',invalid),
STResList107 = [STRes106|STResList106],
- ?line {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk010.xsd','./msxsdtest/Particles',valid),
+ {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk010.xsd','./msxsdtest/Particles',valid),
STResList108 = [STRes107|STResList107],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk010.xml','./msxsdtest/Particles',valid,S107),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk010.xml','./msxsdtest/Particles',valid,S107),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk011.xsd','./msxsdtest/Particles',valid),
+ {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk011.xsd','./msxsdtest/Particles',valid),
STResList109 = [STRes108|STResList108],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk011.xml','./msxsdtest/Particles',valid,S108),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk011.xml','./msxsdtest/Particles',valid,S108),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk012.xsd','./msxsdtest/Particles',invalid),
+ {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk012.xsd','./msxsdtest/Particles',invalid),
STResList110 = [STRes109|STResList109],
- ?line {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk013.xsd','./msxsdtest/Particles',valid),
+ {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk013.xsd','./msxsdtest/Particles',valid),
STResList111 = [STRes110|STResList110],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk013.xml','./msxsdtest/Particles',valid,S110),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk013.xml','./msxsdtest/Particles',valid,S110),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk014.xsd','./msxsdtest/Particles',invalid),
+ {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk014.xsd','./msxsdtest/Particles',invalid),
STResList112 = [STRes111|STResList111],
- ?line {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk015.xsd','./msxsdtest/Particles',valid),
+ {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesJk015.xsd','./msxsdtest/Particles',valid),
STResList113 = [STRes112|STResList112],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk015.xml','./msxsdtest/Particles',valid,S112),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesJk015.xml','./msxsdtest/Particles',valid,S112),
ITResList83 = [ITRes82|ITResList82],
@@ -20727,1040 +20715,1040 @@ particlesJ(Config) when is_list(Config) ->
particlesKOSRTQUVW(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK001.xsd','./msxsdtest/Particles',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK001.xsd','./msxsdtest/Particles',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK001.xml','./msxsdtest/Particles',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK001.xml','./msxsdtest/Particles',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK002.xsd','./msxsdtest/Particles',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK002.xsd','./msxsdtest/Particles',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK002.xml','./msxsdtest/Particles',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK002.xml','./msxsdtest/Particles',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK003.xsd','./msxsdtest/Particles',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK003.xsd','./msxsdtest/Particles',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK003.xml','./msxsdtest/Particles',valid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK003.xml','./msxsdtest/Particles',valid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK004.xsd','./msxsdtest/Particles',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK004.xsd','./msxsdtest/Particles',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK005.xsd','./msxsdtest/Particles',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK005.xsd','./msxsdtest/Particles',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK005.xml','./msxsdtest/Particles',valid,S4),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK005.xml','./msxsdtest/Particles',valid,S4),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK006.xsd','./msxsdtest/Particles',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK006.xsd','./msxsdtest/Particles',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK008.xsd','./msxsdtest/Particles',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesK008.xsd','./msxsdtest/Particles',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK008.xml','./msxsdtest/Particles',valid,S6),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesK008.xml','./msxsdtest/Particles',valid,S6),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa001.xsd','./msxsdtest/Particles',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa001.xsd','./msxsdtest/Particles',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa001.xml','./msxsdtest/Particles',valid,S7),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa001.xml','./msxsdtest/Particles',valid,S7),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa002.xsd','./msxsdtest/Particles',invalid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa002.xsd','./msxsdtest/Particles',invalid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa003.xsd','./msxsdtest/Particles',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa003.xsd','./msxsdtest/Particles',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa003.xml','./msxsdtest/Particles',valid,S9),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa003.xml','./msxsdtest/Particles',valid,S9),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa004.xsd','./msxsdtest/Particles',invalid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa004.xsd','./msxsdtest/Particles',invalid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa005.xsd','./msxsdtest/Particles',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa005.xsd','./msxsdtest/Particles',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa006.xsd','./msxsdtest/Particles',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa006.xsd','./msxsdtest/Particles',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa006.xml','./msxsdtest/Particles',valid,S12),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa006.xml','./msxsdtest/Particles',valid,S12),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa007.xsd','./msxsdtest/Particles',invalid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa007.xsd','./msxsdtest/Particles',invalid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa008.xsd','./msxsdtest/Particles',invalid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa008.xsd','./msxsdtest/Particles',invalid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa009.xsd','./msxsdtest/Particles',invalid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa009.xsd','./msxsdtest/Particles',invalid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa010.xsd','./msxsdtest/Particles',invalid),
+ {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa010.xsd','./msxsdtest/Particles',invalid),
STResList17 = [STRes16|STResList16],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa011.xsd','./msxsdtest/Particles',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa011.xsd','./msxsdtest/Particles',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa011.xml','./msxsdtest/Particles',valid,S17),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa011.xml','./msxsdtest/Particles',valid,S17),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa012.xsd','./msxsdtest/Particles',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa012.xsd','./msxsdtest/Particles',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa012.xml','./msxsdtest/Particles',valid,S18),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa012.xml','./msxsdtest/Particles',valid,S18),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa013.xsd','./msxsdtest/Particles',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa013.xsd','./msxsdtest/Particles',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa013.xml','./msxsdtest/Particles',valid,S19),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa013.xml','./msxsdtest/Particles',valid,S19),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa014.xsd','./msxsdtest/Particles',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa014.xsd','./msxsdtest/Particles',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa014.xml','./msxsdtest/Particles',valid,S20),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOa014.xml','./msxsdtest/Particles',valid,S20),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa015.xsd','./msxsdtest/Particles',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOa015.xsd','./msxsdtest/Particles',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb001.xsd','./msxsdtest/Particles',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb001.xsd','./msxsdtest/Particles',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb001.xml','./msxsdtest/Particles',valid,S22),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb001.xml','./msxsdtest/Particles',valid,S22),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb002.xsd','./msxsdtest/Particles',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb002.xsd','./msxsdtest/Particles',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb002.xml','./msxsdtest/Particles',valid,S23),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb002.xml','./msxsdtest/Particles',valid,S23),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb003.xsd','./msxsdtest/Particles',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb003.xsd','./msxsdtest/Particles',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb003.xml','./msxsdtest/Particles',valid,S24),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb003.xml','./msxsdtest/Particles',valid,S24),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb004.xsd','./msxsdtest/Particles',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb004.xsd','./msxsdtest/Particles',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb004.xml','./msxsdtest/Particles',valid,S25),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb004.xml','./msxsdtest/Particles',valid,S25),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb005.xsd','./msxsdtest/Particles',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb005.xsd','./msxsdtest/Particles',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb005.xml','./msxsdtest/Particles',valid,S26),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb005.xml','./msxsdtest/Particles',valid,S26),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb006.xsd','./msxsdtest/Particles',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb006.xsd','./msxsdtest/Particles',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb006.xml','./msxsdtest/Particles',valid,S27),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb006.xml','./msxsdtest/Particles',valid,S27),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb007.xsd','./msxsdtest/Particles',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb007.xsd','./msxsdtest/Particles',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb007.xml','./msxsdtest/Particles',valid,S28),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb007.xml','./msxsdtest/Particles',valid,S28),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb008.xsd','./msxsdtest/Particles',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb008.xsd','./msxsdtest/Particles',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb008.xml','./msxsdtest/Particles',valid,S29),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb008.xml','./msxsdtest/Particles',valid,S29),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb009.xsd','./msxsdtest/Particles',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb009.xsd','./msxsdtest/Particles',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb009.xml','./msxsdtest/Particles',valid,S30),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb009.xml','./msxsdtest/Particles',valid,S30),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb010.xsd','./msxsdtest/Particles',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb010.xsd','./msxsdtest/Particles',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb011.xsd','./msxsdtest/Particles',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb011.xsd','./msxsdtest/Particles',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb012.xsd','./msxsdtest/Particles',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb012.xsd','./msxsdtest/Particles',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb012.xml','./msxsdtest/Particles',valid,S33),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb012.xml','./msxsdtest/Particles',valid,S33),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb013.xsd','./msxsdtest/Particles',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb013.xsd','./msxsdtest/Particles',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb013.xml','./msxsdtest/Particles',valid,S34),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb013.xml','./msxsdtest/Particles',valid,S34),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb014.xsd','./msxsdtest/Particles',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb014.xsd','./msxsdtest/Particles',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb015.xsd','./msxsdtest/Particles',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb015.xsd','./msxsdtest/Particles',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb015.xml','./msxsdtest/Particles',valid,S36),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb015.xml','./msxsdtest/Particles',valid,S36),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb016.xsd','./msxsdtest/Particles',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb016.xsd','./msxsdtest/Particles',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb017.xsd','./msxsdtest/Particles',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb017.xsd','./msxsdtest/Particles',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb018.xsd','./msxsdtest/Particles',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb018.xsd','./msxsdtest/Particles',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb018.xml','./msxsdtest/Particles',valid,S39),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb018.xml','./msxsdtest/Particles',valid,S39),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb019.xsd','./msxsdtest/Particles',invalid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb019.xsd','./msxsdtest/Particles',invalid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb020.xsd','./msxsdtest/Particles',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb020.xsd','./msxsdtest/Particles',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb021.xsd','./msxsdtest/Particles',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb021.xsd','./msxsdtest/Particles',invalid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb022.xsd','./msxsdtest/Particles',valid),
+ {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb022.xsd','./msxsdtest/Particles',valid),
STResList44 = [STRes43|STResList43],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb022.xml','./msxsdtest/Particles',valid,S43),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb022.xml','./msxsdtest/Particles',valid,S43),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb023.xsd','./msxsdtest/Particles',invalid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb023.xsd','./msxsdtest/Particles',invalid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb024.xsd','./msxsdtest/Particles',invalid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb024.xsd','./msxsdtest/Particles',invalid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb025.xsd','./msxsdtest/Particles',invalid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb025.xsd','./msxsdtest/Particles',invalid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb026.xsd','./msxsdtest/Particles',invalid),
+ {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb026.xsd','./msxsdtest/Particles',invalid),
STResList48 = [STRes47|STResList47],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb027.xsd','./msxsdtest/Particles',invalid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb027.xsd','./msxsdtest/Particles',invalid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb028.xsd','./msxsdtest/Particles',invalid),
+ {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb028.xsd','./msxsdtest/Particles',invalid),
STResList50 = [STRes49|STResList49],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb029.xsd','./msxsdtest/Particles',invalid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb029.xsd','./msxsdtest/Particles',invalid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb030.xsd','./msxsdtest/Particles',invalid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb030.xsd','./msxsdtest/Particles',invalid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb031.xsd','./msxsdtest/Particles',invalid),
+ {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb031.xsd','./msxsdtest/Particles',invalid),
STResList53 = [STRes52|STResList52],
- ?line {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb032.xsd','./msxsdtest/Particles',valid),
+ {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb032.xsd','./msxsdtest/Particles',valid),
STResList54 = [STRes53|STResList53],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb032.xml','./msxsdtest/Particles',valid,S53),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb032.xml','./msxsdtest/Particles',valid,S53),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb033.xsd','./msxsdtest/Particles',invalid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb033.xsd','./msxsdtest/Particles',invalid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb034.xsd','./msxsdtest/Particles',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb034.xsd','./msxsdtest/Particles',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb035.xsd','./msxsdtest/Particles',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb035.xsd','./msxsdtest/Particles',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb036.xsd','./msxsdtest/Particles',invalid),
+ {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb036.xsd','./msxsdtest/Particles',invalid),
STResList58 = [STRes57|STResList57],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb037.xsd','./msxsdtest/Particles',invalid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb037.xsd','./msxsdtest/Particles',invalid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb038.xsd','./msxsdtest/Particles',invalid),
+ {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb038.xsd','./msxsdtest/Particles',invalid),
STResList60 = [STRes59|STResList59],
- ?line {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb039.xsd','./msxsdtest/Particles',invalid),
+ {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb039.xsd','./msxsdtest/Particles',invalid),
STResList61 = [STRes60|STResList60],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb040.xsd','./msxsdtest/Particles',invalid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb040.xsd','./msxsdtest/Particles',invalid),
STResList62 = [STRes61|STResList61],
- ?line {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb041.xsd','./msxsdtest/Particles',invalid),
+ {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb041.xsd','./msxsdtest/Particles',invalid),
STResList63 = [STRes62|STResList62],
- ?line {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb042.xsd','./msxsdtest/Particles',valid),
+ {STRes63,S63} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb042.xsd','./msxsdtest/Particles',valid),
STResList64 = [STRes63|STResList63],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb042.xml','./msxsdtest/Particles',valid,S63),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb042.xml','./msxsdtest/Particles',valid,S63),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb043.xsd','./msxsdtest/Particles',invalid),
+ {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb043.xsd','./msxsdtest/Particles',invalid),
STResList65 = [STRes64|STResList64],
- ?line {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb044.xsd','./msxsdtest/Particles',invalid),
+ {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb044.xsd','./msxsdtest/Particles',invalid),
STResList66 = [STRes65|STResList65],
- ?line {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb045.xsd','./msxsdtest/Particles',invalid),
+ {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb045.xsd','./msxsdtest/Particles',invalid),
STResList67 = [STRes66|STResList66],
- ?line {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb046.xsd','./msxsdtest/Particles',invalid),
+ {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb046.xsd','./msxsdtest/Particles',invalid),
STResList68 = [STRes67|STResList67],
- ?line {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb047.xsd','./msxsdtest/Particles',valid),
+ {STRes68,S68} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb047.xsd','./msxsdtest/Particles',valid),
STResList69 = [STRes68|STResList68],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb047.xml','./msxsdtest/Particles',valid,S68),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb047.xml','./msxsdtest/Particles',valid,S68),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb048.xsd','./msxsdtest/Particles',valid),
+ {STRes69,S69} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb048.xsd','./msxsdtest/Particles',valid),
STResList70 = [STRes69|STResList69],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb048.xml','./msxsdtest/Particles',valid,S69),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb048.xml','./msxsdtest/Particles',valid,S69),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb049.xsd','./msxsdtest/Particles',invalid),
+ {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb049.xsd','./msxsdtest/Particles',invalid),
STResList71 = [STRes70|STResList70],
- ?line {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb050.xsd','./msxsdtest/Particles',invalid),
+ {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb050.xsd','./msxsdtest/Particles',invalid),
STResList72 = [STRes71|STResList71],
- ?line {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb051.xsd','./msxsdtest/Particles',invalid),
+ {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb051.xsd','./msxsdtest/Particles',invalid),
STResList73 = [STRes72|STResList72],
- ?line {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb052.xsd','./msxsdtest/Particles',valid),
+ {STRes73,S73} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb052.xsd','./msxsdtest/Particles',valid),
STResList74 = [STRes73|STResList73],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb052.xml','./msxsdtest/Particles',valid,S73),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb052.xml','./msxsdtest/Particles',valid,S73),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb053.xsd','./msxsdtest/Particles',valid),
+ {STRes74,S74} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb053.xsd','./msxsdtest/Particles',valid),
STResList75 = [STRes74|STResList74],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb053.xml','./msxsdtest/Particles',valid,S74),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb053.xml','./msxsdtest/Particles',valid,S74),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb054.xsd','./msxsdtest/Particles',valid),
+ {STRes75,S75} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb054.xsd','./msxsdtest/Particles',valid),
STResList76 = [STRes75|STResList75],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb054.xml','./msxsdtest/Particles',valid,S75),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb054.xml','./msxsdtest/Particles',valid,S75),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb055.xsd','./msxsdtest/Particles',valid),
+ {STRes76,S76} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb055.xsd','./msxsdtest/Particles',valid),
STResList77 = [STRes76|STResList76],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb055.xml','./msxsdtest/Particles',valid,S76),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb055.xml','./msxsdtest/Particles',valid,S76),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb056.xsd','./msxsdtest/Particles',valid),
+ {STRes77,S77} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb056.xsd','./msxsdtest/Particles',valid),
STResList78 = [STRes77|STResList77],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb056.xml','./msxsdtest/Particles',valid,S77),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb056.xml','./msxsdtest/Particles',valid,S77),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb057.xsd','./msxsdtest/Particles',valid),
+ {STRes78,S78} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb057.xsd','./msxsdtest/Particles',valid),
STResList79 = [STRes78|STResList78],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb057.xml','./msxsdtest/Particles',valid,S78),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb057.xml','./msxsdtest/Particles',valid,S78),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb058.xsd','./msxsdtest/Particles',invalid),
+ {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb058.xsd','./msxsdtest/Particles',invalid),
STResList80 = [STRes79|STResList79],
- ?line {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb059.xsd','./msxsdtest/Particles',valid),
+ {STRes80,S80} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb059.xsd','./msxsdtest/Particles',valid),
STResList81 = [STRes80|STResList80],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb059.xml','./msxsdtest/Particles',valid,S80),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb059.xml','./msxsdtest/Particles',valid,S80),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb060.xsd','./msxsdtest/Particles',valid),
+ {STRes81,S81} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesOb060.xsd','./msxsdtest/Particles',valid),
STResList82 = [STRes81|STResList81],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb060.xml','./msxsdtest/Particles',valid,S81),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesOb060.xml','./msxsdtest/Particles',valid,S81),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS001.xsd','./msxsdtest/Particles',valid),
+ {STRes82,S82} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS001.xsd','./msxsdtest/Particles',valid),
STResList83 = [STRes82|STResList82],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS001.xml','./msxsdtest/Particles',valid,S82),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS001.xml','./msxsdtest/Particles',valid,S82),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS002.xsd','./msxsdtest/Particles',invalid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS002.xsd','./msxsdtest/Particles',invalid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS003.xsd','./msxsdtest/Particles',valid),
+ {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS003.xsd','./msxsdtest/Particles',valid),
STResList85 = [STRes84|STResList84],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS003.xml','./msxsdtest/Particles',valid,S84),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS003.xml','./msxsdtest/Particles',valid,S84),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS004.xsd','./msxsdtest/Particles',valid),
+ {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS004.xsd','./msxsdtest/Particles',valid),
STResList86 = [STRes85|STResList85],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS004.xml','./msxsdtest/Particles',valid,S85),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS004.xml','./msxsdtest/Particles',valid,S85),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS005.xsd','./msxsdtest/Particles',invalid),
+ {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS005.xsd','./msxsdtest/Particles',invalid),
STResList87 = [STRes86|STResList86],
- ?line {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS006.xsd','./msxsdtest/Particles',invalid),
+ {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS006.xsd','./msxsdtest/Particles',invalid),
STResList88 = [STRes87|STResList87],
- ?line {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS007.xsd','./msxsdtest/Particles',valid),
+ {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS007.xsd','./msxsdtest/Particles',valid),
STResList89 = [STRes88|STResList88],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS007.xml','./msxsdtest/Particles',valid,S88),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS007.xml','./msxsdtest/Particles',valid,S88),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS008.xsd','./msxsdtest/Particles',invalid),
+ {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS008.xsd','./msxsdtest/Particles',invalid),
STResList90 = [STRes89|STResList89],
- ?line {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS009.xsd','./msxsdtest/Particles',invalid),
+ {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS009.xsd','./msxsdtest/Particles',invalid),
STResList91 = [STRes90|STResList90],
- ?line {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS010.xsd','./msxsdtest/Particles',invalid),
+ {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS010.xsd','./msxsdtest/Particles',invalid),
STResList92 = [STRes91|STResList91],
- ?line {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS011.xsd','./msxsdtest/Particles',valid),
+ {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesS011.xsd','./msxsdtest/Particles',valid),
STResList93 = [STRes92|STResList92],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS011.xml','./msxsdtest/Particles',valid,S92),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesS011.xml','./msxsdtest/Particles',valid,S92),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR001.xsd','./msxsdtest/Particles',valid),
+ {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR001.xsd','./msxsdtest/Particles',valid),
STResList94 = [STRes93|STResList93],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR001.xml','./msxsdtest/Particles',valid,S93),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR001.xml','./msxsdtest/Particles',valid,S93),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR002.xsd','./msxsdtest/Particles',valid),
+ {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR002.xsd','./msxsdtest/Particles',valid),
STResList95 = [STRes94|STResList94],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR002.xml','./msxsdtest/Particles',valid,S94),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR002.xml','./msxsdtest/Particles',valid,S94),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR003.xsd','./msxsdtest/Particles',valid),
+ {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR003.xsd','./msxsdtest/Particles',valid),
STResList96 = [STRes95|STResList95],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR003.xml','./msxsdtest/Particles',valid,S95),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR003.xml','./msxsdtest/Particles',valid,S95),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR004.xsd','./msxsdtest/Particles',valid),
+ {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR004.xsd','./msxsdtest/Particles',valid),
STResList97 = [STRes96|STResList96],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR004.xml','./msxsdtest/Particles',valid,S96),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR004.xml','./msxsdtest/Particles',valid,S96),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR005.xsd','./msxsdtest/Particles',valid),
+ {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR005.xsd','./msxsdtest/Particles',valid),
STResList98 = [STRes97|STResList97],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR005.xml','./msxsdtest/Particles',valid,S97),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR005.xml','./msxsdtest/Particles',valid,S97),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR006.xsd','./msxsdtest/Particles',invalid),
+ {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR006.xsd','./msxsdtest/Particles',invalid),
STResList99 = [STRes98|STResList98],
- ?line {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR007.xsd','./msxsdtest/Particles',valid),
+ {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR007.xsd','./msxsdtest/Particles',valid),
STResList100 = [STRes99|STResList99],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR007.xml','./msxsdtest/Particles',valid,S99),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR007.xml','./msxsdtest/Particles',valid,S99),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR008.xsd','./msxsdtest/Particles',valid),
+ {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR008.xsd','./msxsdtest/Particles',valid),
STResList101 = [STRes100|STResList100],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR008.xml','./msxsdtest/Particles',valid,S100),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR008.xml','./msxsdtest/Particles',valid,S100),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR009.xsd','./msxsdtest/Particles',valid),
+ {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR009.xsd','./msxsdtest/Particles',valid),
STResList102 = [STRes101|STResList101],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR009.xml','./msxsdtest/Particles',valid,S101),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR009.xml','./msxsdtest/Particles',valid,S101),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR010.xsd','./msxsdtest/Particles',invalid),
+ {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR010.xsd','./msxsdtest/Particles',invalid),
STResList103 = [STRes102|STResList102],
- ?line {STRes103,S103} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR011.xsd','./msxsdtest/Particles',valid),
+ {STRes103,S103} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR011.xsd','./msxsdtest/Particles',valid),
STResList104 = [STRes103|STResList103],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR011.xml','./msxsdtest/Particles',valid,S103),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR011.xml','./msxsdtest/Particles',valid,S103),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR012.xsd','./msxsdtest/Particles',valid),
+ {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR012.xsd','./msxsdtest/Particles',valid),
STResList105 = [STRes104|STResList104],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR012.xml','./msxsdtest/Particles',valid,S104),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR012.xml','./msxsdtest/Particles',valid,S104),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR013.xsd','./msxsdtest/Particles',valid),
+ {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR013.xsd','./msxsdtest/Particles',valid),
STResList106 = [STRes105|STResList105],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR013.xml','./msxsdtest/Particles',valid,S105),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR013.xml','./msxsdtest/Particles',valid,S105),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR014.xsd','./msxsdtest/Particles',invalid),
+ {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR014.xsd','./msxsdtest/Particles',invalid),
STResList107 = [STRes106|STResList106],
- ?line {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR015.xsd','./msxsdtest/Particles',valid),
+ {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR015.xsd','./msxsdtest/Particles',valid),
STResList108 = [STRes107|STResList107],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR015.xml','./msxsdtest/Particles',valid,S107),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR015.xml','./msxsdtest/Particles',valid,S107),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR016.xsd','./msxsdtest/Particles',valid),
+ {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR016.xsd','./msxsdtest/Particles',valid),
STResList109 = [STRes108|STResList108],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR016.xml','./msxsdtest/Particles',valid,S108),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR016.xml','./msxsdtest/Particles',valid,S108),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR017.xsd','./msxsdtest/Particles',valid),
+ {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR017.xsd','./msxsdtest/Particles',valid),
STResList110 = [STRes109|STResList109],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR017.xml','./msxsdtest/Particles',valid,S109),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR017.xml','./msxsdtest/Particles',valid,S109),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR018.xsd','./msxsdtest/Particles',invalid),
+ {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR018.xsd','./msxsdtest/Particles',invalid),
STResList111 = [STRes110|STResList110],
- ?line {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR019.xsd','./msxsdtest/Particles',valid),
+ {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR019.xsd','./msxsdtest/Particles',valid),
STResList112 = [STRes111|STResList111],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR019.xml','./msxsdtest/Particles',valid,S111),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR019.xml','./msxsdtest/Particles',valid,S111),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR020.xsd','./msxsdtest/Particles',valid),
+ {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR020.xsd','./msxsdtest/Particles',valid),
STResList113 = [STRes112|STResList112],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR020.xml','./msxsdtest/Particles',valid,S112),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR020.xml','./msxsdtest/Particles',valid,S112),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR021.xsd','./msxsdtest/Particles',invalid),
+ {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR021.xsd','./msxsdtest/Particles',invalid),
STResList114 = [STRes113|STResList113],
- ?line {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR022.xsd','./msxsdtest/Particles',valid),
+ {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR022.xsd','./msxsdtest/Particles',valid),
STResList115 = [STRes114|STResList114],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR022.xml','./msxsdtest/Particles',valid,S114),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR022.xml','./msxsdtest/Particles',valid,S114),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR023.xsd','./msxsdtest/Particles',invalid),
+ {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR023.xsd','./msxsdtest/Particles',invalid),
STResList116 = [STRes115|STResList115],
- ?line {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR024.xsd','./msxsdtest/Particles',valid),
+ {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR024.xsd','./msxsdtest/Particles',valid),
STResList117 = [STRes116|STResList116],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR024.xml','./msxsdtest/Particles',valid,S116),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR024.xml','./msxsdtest/Particles',valid,S116),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes117,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR025.xsd','./msxsdtest/Particles',invalid),
+ {STRes117,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR025.xsd','./msxsdtest/Particles',invalid),
STResList118 = [STRes117|STResList117],
- ?line {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR026.xsd','./msxsdtest/Particles',invalid),
+ {STRes118,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR026.xsd','./msxsdtest/Particles',invalid),
STResList119 = [STRes118|STResList118],
- ?line {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR027.xsd','./msxsdtest/Particles',invalid),
+ {STRes119,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR027.xsd','./msxsdtest/Particles',invalid),
STResList120 = [STRes119|STResList119],
- ?line {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR028.xsd','./msxsdtest/Particles',invalid),
+ {STRes120,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR028.xsd','./msxsdtest/Particles',invalid),
STResList121 = [STRes120|STResList120],
- ?line {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR029.xsd','./msxsdtest/Particles',valid),
+ {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR029.xsd','./msxsdtest/Particles',valid),
STResList122 = [STRes121|STResList121],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR029.xml','./msxsdtest/Particles',valid,S121),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR029.xml','./msxsdtest/Particles',valid,S121),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR030.xsd','./msxsdtest/Particles',valid),
+ {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR030.xsd','./msxsdtest/Particles',valid),
STResList123 = [STRes122|STResList122],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR030.xml','./msxsdtest/Particles',valid,S122),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesR030.xml','./msxsdtest/Particles',valid,S122),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR031.xsd','./msxsdtest/Particles',invalid),
+ {STRes123,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesR031.xsd','./msxsdtest/Particles',invalid),
STResList124 = [STRes123|STResList123],
- ?line {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT001.xsd','./msxsdtest/Particles',valid),
+ {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT001.xsd','./msxsdtest/Particles',valid),
STResList125 = [STRes124|STResList124],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT001.xml','./msxsdtest/Particles',valid,S124),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT001.xml','./msxsdtest/Particles',valid,S124),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT002.xsd','./msxsdtest/Particles',invalid),
+ {STRes125,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT002.xsd','./msxsdtest/Particles',invalid),
STResList126 = [STRes125|STResList125],
- ?line {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT003.xsd','./msxsdtest/Particles',valid),
+ {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT003.xsd','./msxsdtest/Particles',valid),
STResList127 = [STRes126|STResList126],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT003.xml','./msxsdtest/Particles',valid,S126),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT003.xml','./msxsdtest/Particles',valid,S126),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT004.xsd','./msxsdtest/Particles',valid),
+ {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT004.xsd','./msxsdtest/Particles',valid),
STResList128 = [STRes127|STResList127],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT004.xml','./msxsdtest/Particles',valid,S127),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT004.xml','./msxsdtest/Particles',valid,S127),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT005.xsd','./msxsdtest/Particles',valid),
+ {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT005.xsd','./msxsdtest/Particles',valid),
STResList129 = [STRes128|STResList128],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT005.xml','./msxsdtest/Particles',valid,S128),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT005.xml','./msxsdtest/Particles',valid,S128),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT006.xsd','./msxsdtest/Particles',valid),
+ {STRes129,S129} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT006.xsd','./msxsdtest/Particles',valid),
STResList130 = [STRes129|STResList129],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT006.xml','./msxsdtest/Particles',valid,S129),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT006.xml','./msxsdtest/Particles',valid,S129),
ITResList68 = [ITRes67|ITResList67],
- ?line {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT007.xsd','./msxsdtest/Particles',valid),
+ {STRes130,S130} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT007.xsd','./msxsdtest/Particles',valid),
STResList131 = [STRes130|STResList130],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT007.xml','./msxsdtest/Particles',valid,S130),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT007.xml','./msxsdtest/Particles',valid,S130),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes131,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT008.xsd','./msxsdtest/Particles',invalid),
+ {STRes131,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT008.xsd','./msxsdtest/Particles',invalid),
STResList132 = [STRes131|STResList131],
- ?line {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT009.xsd','./msxsdtest/Particles',invalid),
+ {STRes132,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT009.xsd','./msxsdtest/Particles',invalid),
STResList133 = [STRes132|STResList132],
- ?line {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT010.xsd','./msxsdtest/Particles',invalid),
+ {STRes133,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT010.xsd','./msxsdtest/Particles',invalid),
STResList134 = [STRes133|STResList133],
- ?line {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT011.xsd','./msxsdtest/Particles',invalid),
+ {STRes134,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT011.xsd','./msxsdtest/Particles',invalid),
STResList135 = [STRes134|STResList134],
- ?line {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT012.xsd','./msxsdtest/Particles',valid),
+ {STRes135,S135} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT012.xsd','./msxsdtest/Particles',valid),
STResList136 = [STRes135|STResList135],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT012.xml','./msxsdtest/Particles',valid,S135),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT012.xml','./msxsdtest/Particles',valid,S135),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes136,S136} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT013.xsd','./msxsdtest/Particles',valid),
+ {STRes136,S136} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT013.xsd','./msxsdtest/Particles',valid),
STResList137 = [STRes136|STResList136],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT013.xml','./msxsdtest/Particles',valid,S136),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT013.xml','./msxsdtest/Particles',valid,S136),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT014.xsd','./msxsdtest/Particles',valid),
+ {STRes137,S137} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesT014.xsd','./msxsdtest/Particles',valid),
STResList138 = [STRes137|STResList137],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT014.xml','./msxsdtest/Particles',valid,S137),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesT014.xml','./msxsdtest/Particles',valid,S137),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ001.xsd','./msxsdtest/Particles',valid),
+ {STRes138,S138} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ001.xsd','./msxsdtest/Particles',valid),
STResList139 = [STRes138|STResList138],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ001.xml','./msxsdtest/Particles',valid,S138),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ001.xml','./msxsdtest/Particles',valid,S138),
ITResList73 = [ITRes72|ITResList72],
- ?line {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ002.xsd','./msxsdtest/Particles',valid),
+ {STRes139,S139} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ002.xsd','./msxsdtest/Particles',valid),
STResList140 = [STRes139|STResList139],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ002.xml','./msxsdtest/Particles',valid,S139),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ002.xml','./msxsdtest/Particles',valid,S139),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ003.xsd','./msxsdtest/Particles',valid),
+ {STRes140,S140} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ003.xsd','./msxsdtest/Particles',valid),
STResList141 = [STRes140|STResList140],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ003.xml','./msxsdtest/Particles',valid,S140),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ003.xml','./msxsdtest/Particles',valid,S140),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ004.xsd','./msxsdtest/Particles',valid),
+ {STRes141,S141} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ004.xsd','./msxsdtest/Particles',valid),
STResList142 = [STRes141|STResList141],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ004.xml','./msxsdtest/Particles',valid,S141),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ004.xml','./msxsdtest/Particles',valid,S141),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ005.xsd','./msxsdtest/Particles',valid),
+ {STRes142,S142} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ005.xsd','./msxsdtest/Particles',valid),
STResList143 = [STRes142|STResList142],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ005.xml','./msxsdtest/Particles',valid,S142),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ005.xml','./msxsdtest/Particles',valid,S142),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes143,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ006.xsd','./msxsdtest/Particles',invalid),
+ {STRes143,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ006.xsd','./msxsdtest/Particles',invalid),
STResList144 = [STRes143|STResList143],
- ?line {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ007.xsd','./msxsdtest/Particles',valid),
+ {STRes144,S144} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ007.xsd','./msxsdtest/Particles',valid),
STResList145 = [STRes144|STResList144],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ007.xml','./msxsdtest/Particles',valid,S144),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ007.xml','./msxsdtest/Particles',valid,S144),
ITResList78 = [ITRes77|ITResList77],
- ?line {STRes145,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ008.xsd','./msxsdtest/Particles',invalid),
+ {STRes145,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ008.xsd','./msxsdtest/Particles',invalid),
STResList146 = [STRes145|STResList145],
- ?line {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ011.xsd','./msxsdtest/Particles',valid),
+ {STRes146,S146} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ011.xsd','./msxsdtest/Particles',valid),
STResList147 = [STRes146|STResList146],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ011.xml','./msxsdtest/Particles',valid,S146),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ011.xml','./msxsdtest/Particles',valid,S146),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes147,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ012.xsd','./msxsdtest/Particles',invalid),
+ {STRes147,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ012.xsd','./msxsdtest/Particles',invalid),
STResList148 = [STRes147|STResList147],
- ?line {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ013.xsd','./msxsdtest/Particles',valid),
+ {STRes148,S148} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ013.xsd','./msxsdtest/Particles',valid),
STResList149 = [STRes148|STResList148],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ013.xml','./msxsdtest/Particles',valid,S148),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ013.xml','./msxsdtest/Particles',valid,S148),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ016.xsd','./msxsdtest/Particles',valid),
+ {STRes149,S149} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ016.xsd','./msxsdtest/Particles',valid),
STResList150 = [STRes149|STResList149],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ016.xml','./msxsdtest/Particles',valid,S149),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ016.xml','./msxsdtest/Particles',valid,S149),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ017.xsd','./msxsdtest/Particles',valid),
+ {STRes150,S150} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ017.xsd','./msxsdtest/Particles',valid),
STResList151 = [STRes150|STResList150],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ017.xml','./msxsdtest/Particles',valid,S150),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ017.xml','./msxsdtest/Particles',valid,S150),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ018.xsd','./msxsdtest/Particles',invalid),
+ {STRes151,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ018.xsd','./msxsdtest/Particles',invalid),
STResList152 = [STRes151|STResList151],
- ?line {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ019.xsd','./msxsdtest/Particles',valid),
+ {STRes152,S152} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ019.xsd','./msxsdtest/Particles',valid),
STResList153 = [STRes152|STResList152],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ019.xml','./msxsdtest/Particles',valid,S152),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ019.xml','./msxsdtest/Particles',valid,S152),
ITResList83 = [ITRes82|ITResList82],
- ?line {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ020.xsd','./msxsdtest/Particles',valid),
+ {STRes153,S153} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ020.xsd','./msxsdtest/Particles',valid),
STResList154 = [STRes153|STResList153],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ020.xml','./msxsdtest/Particles',valid,S153),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ020.xml','./msxsdtest/Particles',valid,S153),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes154,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ021.xsd','./msxsdtest/Particles',invalid),
+ {STRes154,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ021.xsd','./msxsdtest/Particles',invalid),
STResList155 = [STRes154|STResList154],
- ?line {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ022.xsd','./msxsdtest/Particles',valid),
+ {STRes155,S155} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ022.xsd','./msxsdtest/Particles',valid),
STResList156 = [STRes155|STResList155],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ022.xml','./msxsdtest/Particles',valid,S155),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ022.xml','./msxsdtest/Particles',valid,S155),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes156,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ023.xsd','./msxsdtest/Particles',invalid),
+ {STRes156,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ023.xsd','./msxsdtest/Particles',invalid),
STResList157 = [STRes156|STResList156],
- ?line {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ024.xsd','./msxsdtest/Particles',valid),
+ {STRes157,S157} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ024.xsd','./msxsdtest/Particles',valid),
STResList158 = [STRes157|STResList157],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ024.xml','./msxsdtest/Particles',valid,S157),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ024.xml','./msxsdtest/Particles',valid,S157),
ITResList86 = [ITRes85|ITResList85],
- ?line {STRes158,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ025.xsd','./msxsdtest/Particles',invalid),
+ {STRes158,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ025.xsd','./msxsdtest/Particles',invalid),
STResList159 = [STRes158|STResList158],
- ?line {STRes159,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ026.xsd','./msxsdtest/Particles',invalid),
+ {STRes159,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ026.xsd','./msxsdtest/Particles',invalid),
STResList160 = [STRes159|STResList159],
- ?line {STRes160,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ027.xsd','./msxsdtest/Particles',invalid),
+ {STRes160,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ027.xsd','./msxsdtest/Particles',invalid),
STResList161 = [STRes160|STResList160],
- ?line {STRes161,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ028.xsd','./msxsdtest/Particles',invalid),
+ {STRes161,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ028.xsd','./msxsdtest/Particles',invalid),
STResList162 = [STRes161|STResList161],
- ?line {STRes162,S162} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ029.xsd','./msxsdtest/Particles',valid),
+ {STRes162,S162} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ029.xsd','./msxsdtest/Particles',valid),
STResList163 = [STRes162|STResList162],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ029.xml','./msxsdtest/Particles',valid,S162),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ029.xml','./msxsdtest/Particles',valid,S162),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes163,S163} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ030.xsd','./msxsdtest/Particles',valid),
+ {STRes163,S163} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ030.xsd','./msxsdtest/Particles',valid),
STResList164 = [STRes163|STResList163],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ030.xml','./msxsdtest/Particles',valid,S163),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesQ030.xml','./msxsdtest/Particles',valid,S163),
ITResList88 = [ITRes87|ITResList87],
- ?line {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ031.xsd','./msxsdtest/Particles',invalid),
+ {STRes164,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesQ031.xsd','./msxsdtest/Particles',invalid),
STResList165 = [STRes164|STResList164],
- ?line {STRes165,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU001.xsd','./msxsdtest/Particles',invalid),
+ {STRes165,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU001.xsd','./msxsdtest/Particles',invalid),
STResList166 = [STRes165|STResList165],
- ?line {STRes166,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU002.xsd','./msxsdtest/Particles',invalid),
+ {STRes166,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU002.xsd','./msxsdtest/Particles',invalid),
STResList167 = [STRes166|STResList166],
- ?line {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU003.xsd','./msxsdtest/Particles',valid),
+ {STRes167,S167} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU003.xsd','./msxsdtest/Particles',valid),
STResList168 = [STRes167|STResList167],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesU003.xml','./msxsdtest/Particles',valid,S167),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesU003.xml','./msxsdtest/Particles',valid,S167),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU004.xsd','./msxsdtest/Particles',valid),
+ {STRes168,S168} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU004.xsd','./msxsdtest/Particles',valid),
STResList169 = [STRes168|STResList168],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesU004.xml','./msxsdtest/Particles',valid,S168),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesU004.xml','./msxsdtest/Particles',valid,S168),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU005.xsd','./msxsdtest/Particles',valid),
+ {STRes169,S169} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU005.xsd','./msxsdtest/Particles',valid),
STResList170 = [STRes169|STResList169],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesU005.xml','./msxsdtest/Particles',valid,S169),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesU005.xml','./msxsdtest/Particles',valid,S169),
ITResList91 = [ITRes90|ITResList90],
- ?line {STRes170,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU006.xsd','./msxsdtest/Particles',invalid),
+ {STRes170,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU006.xsd','./msxsdtest/Particles',invalid),
STResList171 = [STRes170|STResList170],
- ?line {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU007.xsd','./msxsdtest/Particles',valid),
+ {STRes171,S171} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU007.xsd','./msxsdtest/Particles',valid),
STResList172 = [STRes171|STResList171],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesU007.xml','./msxsdtest/Particles',valid,S171),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesU007.xml','./msxsdtest/Particles',valid,S171),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes172,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU008.xsd','./msxsdtest/Particles',invalid),
+ {STRes172,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU008.xsd','./msxsdtest/Particles',invalid),
STResList173 = [STRes172|STResList172],
- ?line {STRes173,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU009.xsd','./msxsdtest/Particles',invalid),
+ {STRes173,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesU009.xsd','./msxsdtest/Particles',invalid),
STResList174 = [STRes173|STResList173],
- ?line {STRes174,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV002.xsd','./msxsdtest/Particles',invalid),
+ {STRes174,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV002.xsd','./msxsdtest/Particles',invalid),
STResList175 = [STRes174|STResList174],
- ?line {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV003.xsd','./msxsdtest/Particles',valid),
+ {STRes175,S175} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV003.xsd','./msxsdtest/Particles',valid),
STResList176 = [STRes175|STResList175],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV003.xml','./msxsdtest/Particles',valid,S175),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV003.xml','./msxsdtest/Particles',valid,S175),
ITResList93 = [ITRes92|ITResList92],
- ?line {STRes176,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV005.xsd','./msxsdtest/Particles',invalid),
+ {STRes176,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV005.xsd','./msxsdtest/Particles',invalid),
STResList177 = [STRes176|STResList176],
- ?line {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV006.xsd','./msxsdtest/Particles',valid),
+ {STRes177,S177} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV006.xsd','./msxsdtest/Particles',valid),
STResList178 = [STRes177|STResList177],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV006.xml','./msxsdtest/Particles',valid,S177),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV006.xml','./msxsdtest/Particles',valid,S177),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV007.xsd','./msxsdtest/Particles',valid),
+ {STRes178,S178} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV007.xsd','./msxsdtest/Particles',valid),
STResList179 = [STRes178|STResList178],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV007.xml','./msxsdtest/Particles',valid,S178),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV007.xml','./msxsdtest/Particles',valid,S178),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV008.xsd','./msxsdtest/Particles',valid),
+ {STRes179,S179} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV008.xsd','./msxsdtest/Particles',valid),
STResList180 = [STRes179|STResList179],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV008.xml','./msxsdtest/Particles',valid,S179),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV008.xml','./msxsdtest/Particles',valid,S179),
ITResList96 = [ITRes95|ITResList95],
- ?line {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV009.xsd','./msxsdtest/Particles',valid),
+ {STRes180,S180} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV009.xsd','./msxsdtest/Particles',valid),
STResList181 = [STRes180|STResList180],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV009.xml','./msxsdtest/Particles',valid,S180),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV009.xml','./msxsdtest/Particles',valid,S180),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV010.xsd','./msxsdtest/Particles',valid),
+ {STRes181,S181} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV010.xsd','./msxsdtest/Particles',valid),
STResList182 = [STRes181|STResList181],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV010.xml','./msxsdtest/Particles',valid,S181),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV010.xml','./msxsdtest/Particles',valid,S181),
ITResList98 = [ITRes97|ITResList97],
- ?line {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV011.xsd','./msxsdtest/Particles',valid),
+ {STRes182,S182} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV011.xsd','./msxsdtest/Particles',valid),
STResList183 = [STRes182|STResList182],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV011.xml','./msxsdtest/Particles',valid,S182),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV011.xml','./msxsdtest/Particles',valid,S182),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV012.xsd','./msxsdtest/Particles',valid),
+ {STRes183,S183} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV012.xsd','./msxsdtest/Particles',valid),
STResList184 = [STRes183|STResList183],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV012.xml','./msxsdtest/Particles',valid,S183),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV012.xml','./msxsdtest/Particles',valid,S183),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV013.xsd','./msxsdtest/Particles',valid),
+ {STRes184,S184} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV013.xsd','./msxsdtest/Particles',valid),
STResList185 = [STRes184|STResList184],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV013.xml','./msxsdtest/Particles',valid,S184),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV013.xml','./msxsdtest/Particles',valid,S184),
ITResList101 = [ITRes100|ITResList100],
- ?line {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV014.xsd','./msxsdtest/Particles',valid),
+ {STRes185,S185} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV014.xsd','./msxsdtest/Particles',valid),
STResList186 = [STRes185|STResList185],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV014.xml','./msxsdtest/Particles',valid,S185),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV014.xml','./msxsdtest/Particles',valid,S185),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes186,S186} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV015.xsd','./msxsdtest/Particles',valid),
+ {STRes186,S186} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV015.xsd','./msxsdtest/Particles',valid),
STResList187 = [STRes186|STResList186],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV015.xml','./msxsdtest/Particles',valid,S186),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesV015.xml','./msxsdtest/Particles',valid,S186),
ITResList103 = [ITRes102|ITResList102],
- ?line {STRes187,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV016.xsd','./msxsdtest/Particles',invalid),
+ {STRes187,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV016.xsd','./msxsdtest/Particles',invalid),
STResList188 = [STRes187|STResList187],
- ?line {STRes188,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV017.xsd','./msxsdtest/Particles',invalid),
+ {STRes188,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV017.xsd','./msxsdtest/Particles',invalid),
STResList189 = [STRes188|STResList188],
- ?line {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV018.xsd','./msxsdtest/Particles',invalid),
+ {STRes189,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV018.xsd','./msxsdtest/Particles',invalid),
STResList190 = [STRes189|STResList189],
- ?line {STRes190,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV020.xsd','./msxsdtest/Particles',invalid),
+ {STRes190,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesV020.xsd','./msxsdtest/Particles',invalid),
STResList191 = [STRes190|STResList190],
- ?line {STRes191,S191} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW001.xsd','./msxsdtest/Particles',valid),
+ {STRes191,S191} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW001.xsd','./msxsdtest/Particles',valid),
STResList192 = [STRes191|STResList191],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW001.xml','./msxsdtest/Particles',valid,S191),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW001.xml','./msxsdtest/Particles',valid,S191),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW002.xsd','./msxsdtest/Particles',invalid),
+ {STRes192,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW002.xsd','./msxsdtest/Particles',invalid),
STResList193 = [STRes192|STResList192],
- ?line {STRes193,S193} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW003.xsd','./msxsdtest/Particles',valid),
+ {STRes193,S193} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW003.xsd','./msxsdtest/Particles',valid),
STResList194 = [STRes193|STResList193],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW003.xml','./msxsdtest/Particles',valid,S193),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW003.xml','./msxsdtest/Particles',valid,S193),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW005.xsd','./msxsdtest/Particles',invalid),
+ {STRes194,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW005.xsd','./msxsdtest/Particles',invalid),
STResList195 = [STRes194|STResList194],
- ?line {STRes195,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW006.xsd','./msxsdtest/Particles',valid),
+ {STRes195,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW006.xsd','./msxsdtest/Particles',valid),
STResList196 = [STRes195|STResList195],
- ?line {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW007.xsd','./msxsdtest/Particles',invalid),
+ {STRes196,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW007.xsd','./msxsdtest/Particles',invalid),
STResList197 = [STRes196|STResList196],
- ?line {STRes197,S197} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW008.xsd','./msxsdtest/Particles',valid),
+ {STRes197,S197} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW008.xsd','./msxsdtest/Particles',valid),
STResList198 = [STRes197|STResList197],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW008.xml','./msxsdtest/Particles',valid,S197),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW008.xml','./msxsdtest/Particles',valid,S197),
ITResList106 = [ITRes105|ITResList105],
- ?line {STRes198,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW010.xsd','./msxsdtest/Particles',invalid),
+ {STRes198,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW010.xsd','./msxsdtest/Particles',invalid),
STResList199 = [STRes198|STResList198],
- ?line {STRes199,S199} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW011.xsd','./msxsdtest/Particles',valid),
+ {STRes199,S199} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW011.xsd','./msxsdtest/Particles',valid),
STResList200 = [STRes199|STResList199],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW011.xml','./msxsdtest/Particles',valid,S199),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW011.xml','./msxsdtest/Particles',valid,S199),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes200,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW012.xsd','./msxsdtest/Particles',invalid),
+ {STRes200,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW012.xsd','./msxsdtest/Particles',invalid),
STResList201 = [STRes200|STResList200],
- ?line {STRes201,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW013.xsd','./msxsdtest/Particles',invalid),
+ {STRes201,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW013.xsd','./msxsdtest/Particles',invalid),
STResList202 = [STRes201|STResList201],
- ?line {STRes202,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW014.xsd','./msxsdtest/Particles',invalid),
+ {STRes202,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW014.xsd','./msxsdtest/Particles',invalid),
STResList203 = [STRes202|STResList202],
- ?line {STRes203,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW015.xsd','./msxsdtest/Particles',invalid),
+ {STRes203,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW015.xsd','./msxsdtest/Particles',invalid),
STResList204 = [STRes203|STResList203],
- ?line {STRes204,S204} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW016.xsd','./msxsdtest/Particles',valid),
+ {STRes204,S204} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/Particles/particlesW016.xsd','./msxsdtest/Particles',valid),
STResList205 = [STRes204|STResList204],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW016.xml','./msxsdtest/Particles',valid,S204),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/Particles/particlesW016.xml','./msxsdtest/Particles',valid,S204),
ITResList108 = [ITRes107|ITResList107],
@@ -21771,467 +21759,467 @@ particlesKOSRTQUVW(Config) when is_list(Config) ->
stABCDE(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA001.xsd','./msxsdtest/simpleType',valid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA001.xsd','./msxsdtest/simpleType',valid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA002.xsd','./msxsdtest/simpleType',invalid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA002.xsd','./msxsdtest/simpleType',invalid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA003.xsd','./msxsdtest/simpleType',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA003.xsd','./msxsdtest/simpleType',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA004.xsd','./msxsdtest/simpleType',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA004.xsd','./msxsdtest/simpleType',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA005.xsd','./msxsdtest/simpleType',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA005.xsd','./msxsdtest/simpleType',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA006.xsd','./msxsdtest/simpleType',valid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA006.xsd','./msxsdtest/simpleType',valid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA007.xsd','./msxsdtest/simpleType',valid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA007.xsd','./msxsdtest/simpleType',valid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA008.xsd','./msxsdtest/simpleType',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA008.xsd','./msxsdtest/simpleType',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA009.xsd','./msxsdtest/simpleType',invalid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA009.xsd','./msxsdtest/simpleType',invalid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA010.xsd','./msxsdtest/simpleType',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA010.xsd','./msxsdtest/simpleType',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA011.xsd','./msxsdtest/simpleType',invalid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA011.xsd','./msxsdtest/simpleType',invalid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA012.xsd','./msxsdtest/simpleType',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA012.xsd','./msxsdtest/simpleType',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA013.xsd','./msxsdtest/simpleType',invalid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA013.xsd','./msxsdtest/simpleType',invalid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA014.xsd','./msxsdtest/simpleType',invalid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA014.xsd','./msxsdtest/simpleType',invalid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA015.xsd','./msxsdtest/simpleType',invalid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA015.xsd','./msxsdtest/simpleType',invalid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA016.xsd','./msxsdtest/simpleType',valid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA016.xsd','./msxsdtest/simpleType',valid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA017.xsd','./msxsdtest/simpleType',invalid),
+ {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA017.xsd','./msxsdtest/simpleType',invalid),
STResList17 = [STRes16|STResList16],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA018.xsd','./msxsdtest/simpleType',valid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA018.xsd','./msxsdtest/simpleType',valid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA019.xsd','./msxsdtest/simpleType',valid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA019.xsd','./msxsdtest/simpleType',valid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA020.xsd','./msxsdtest/simpleType',valid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stA020.xsd','./msxsdtest/simpleType',valid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB001.xsd','./msxsdtest/simpleType',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB001.xsd','./msxsdtest/simpleType',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB002.xsd','./msxsdtest/simpleType',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB002.xsd','./msxsdtest/simpleType',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB003.xsd','./msxsdtest/simpleType',valid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB003.xsd','./msxsdtest/simpleType',valid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB004.xsd','./msxsdtest/simpleType',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB004.xsd','./msxsdtest/simpleType',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB005.xsd','./msxsdtest/simpleType',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB005.xsd','./msxsdtest/simpleType',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB006.xsd','./msxsdtest/simpleType',valid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB006.xsd','./msxsdtest/simpleType',valid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB007.xsd','./msxsdtest/simpleType',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB007.xsd','./msxsdtest/simpleType',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB008.xsd','./msxsdtest/simpleType',valid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB008.xsd','./msxsdtest/simpleType',valid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB009.xsd','./msxsdtest/simpleType',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB009.xsd','./msxsdtest/simpleType',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB010.xsd','./msxsdtest/simpleType',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB010.xsd','./msxsdtest/simpleType',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB011.xsd','./msxsdtest/simpleType',valid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB011.xsd','./msxsdtest/simpleType',valid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB012.xsd','./msxsdtest/simpleType',valid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB012.xsd','./msxsdtest/simpleType',valid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB013.xsd','./msxsdtest/simpleType',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB013.xsd','./msxsdtest/simpleType',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB014.xsd','./msxsdtest/simpleType',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB014.xsd','./msxsdtest/simpleType',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB015.xsd','./msxsdtest/simpleType',valid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB015.xsd','./msxsdtest/simpleType',valid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB016.xsd','./msxsdtest/simpleType',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB016.xsd','./msxsdtest/simpleType',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB017.xsd','./msxsdtest/simpleType',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB017.xsd','./msxsdtest/simpleType',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB018.xsd','./msxsdtest/simpleType',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB018.xsd','./msxsdtest/simpleType',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB019.xsd','./msxsdtest/simpleType',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB019.xsd','./msxsdtest/simpleType',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB020.xsd','./msxsdtest/simpleType',invalid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB020.xsd','./msxsdtest/simpleType',invalid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB021.xsd','./msxsdtest/simpleType',invalid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB021.xsd','./msxsdtest/simpleType',invalid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB022.xsd','./msxsdtest/simpleType',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB022.xsd','./msxsdtest/simpleType',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB023.xsd','./msxsdtest/simpleType',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB023.xsd','./msxsdtest/simpleType',invalid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB024.xsd','./msxsdtest/simpleType',invalid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stB024.xsd','./msxsdtest/simpleType',invalid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC001.xsd','./msxsdtest/simpleType',valid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC001.xsd','./msxsdtest/simpleType',valid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC002.xsd','./msxsdtest/simpleType',invalid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC002.xsd','./msxsdtest/simpleType',invalid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC003.xsd','./msxsdtest/simpleType',valid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC003.xsd','./msxsdtest/simpleType',valid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC004.xsd','./msxsdtest/simpleType',invalid),
+ {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC004.xsd','./msxsdtest/simpleType',invalid),
STResList48 = [STRes47|STResList47],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC005.xsd','./msxsdtest/simpleType',valid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC005.xsd','./msxsdtest/simpleType',valid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC006.xsd','./msxsdtest/simpleType',invalid),
+ {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC006.xsd','./msxsdtest/simpleType',invalid),
STResList50 = [STRes49|STResList49],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC007.xsd','./msxsdtest/simpleType',invalid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC007.xsd','./msxsdtest/simpleType',invalid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC008.xsd','./msxsdtest/simpleType',invalid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC008.xsd','./msxsdtest/simpleType',invalid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC009.xsd','./msxsdtest/simpleType',invalid),
+ {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC009.xsd','./msxsdtest/simpleType',invalid),
STResList53 = [STRes52|STResList52],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC010.xsd','./msxsdtest/simpleType',valid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC010.xsd','./msxsdtest/simpleType',valid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC011.xsd','./msxsdtest/simpleType',invalid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC011.xsd','./msxsdtest/simpleType',invalid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC012.xsd','./msxsdtest/simpleType',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC012.xsd','./msxsdtest/simpleType',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC013.xsd','./msxsdtest/simpleType',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC013.xsd','./msxsdtest/simpleType',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC014.xsd','./msxsdtest/simpleType',valid),
+ {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC014.xsd','./msxsdtest/simpleType',valid),
STResList58 = [STRes57|STResList57],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC015.xsd','./msxsdtest/simpleType',valid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC015.xsd','./msxsdtest/simpleType',valid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC016.xsd','./msxsdtest/simpleType',valid),
+ {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC016.xsd','./msxsdtest/simpleType',valid),
STResList60 = [STRes59|STResList59],
- ?line {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC017.xsd','./msxsdtest/simpleType',valid),
+ {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC017.xsd','./msxsdtest/simpleType',valid),
STResList61 = [STRes60|STResList60],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC018.xsd','./msxsdtest/simpleType',valid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC018.xsd','./msxsdtest/simpleType',valid),
STResList62 = [STRes61|STResList61],
- ?line {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC019.xsd','./msxsdtest/simpleType',valid),
+ {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC019.xsd','./msxsdtest/simpleType',valid),
STResList63 = [STRes62|STResList62],
- ?line {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC020.xsd','./msxsdtest/simpleType',valid),
+ {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC020.xsd','./msxsdtest/simpleType',valid),
STResList64 = [STRes63|STResList63],
- ?line {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC021.xsd','./msxsdtest/simpleType',valid),
+ {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC021.xsd','./msxsdtest/simpleType',valid),
STResList65 = [STRes64|STResList64],
- ?line {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC022.xsd','./msxsdtest/simpleType',valid),
+ {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC022.xsd','./msxsdtest/simpleType',valid),
STResList66 = [STRes65|STResList65],
- ?line {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC023.xsd','./msxsdtest/simpleType',invalid),
+ {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC023.xsd','./msxsdtest/simpleType',invalid),
STResList67 = [STRes66|STResList66],
- ?line {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC024.xsd','./msxsdtest/simpleType',valid),
+ {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC024.xsd','./msxsdtest/simpleType',valid),
STResList68 = [STRes67|STResList67],
- ?line {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC025.xsd','./msxsdtest/simpleType',valid),
+ {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC025.xsd','./msxsdtest/simpleType',valid),
STResList69 = [STRes68|STResList68],
- ?line {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC026.xsd','./msxsdtest/simpleType',valid),
+ {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC026.xsd','./msxsdtest/simpleType',valid),
STResList70 = [STRes69|STResList69],
- ?line {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC027.xsd','./msxsdtest/simpleType',invalid),
+ {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC027.xsd','./msxsdtest/simpleType',invalid),
STResList71 = [STRes70|STResList70],
- ?line {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC028.xsd','./msxsdtest/simpleType',invalid),
+ {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC028.xsd','./msxsdtest/simpleType',invalid),
STResList72 = [STRes71|STResList71],
- ?line {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC029.xsd','./msxsdtest/simpleType',invalid),
+ {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC029.xsd','./msxsdtest/simpleType',invalid),
STResList73 = [STRes72|STResList72],
- ?line {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC030.xsd','./msxsdtest/simpleType',valid),
+ {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC030.xsd','./msxsdtest/simpleType',valid),
STResList74 = [STRes73|STResList73],
- ?line {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC031.xsd','./msxsdtest/simpleType',invalid),
+ {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC031.xsd','./msxsdtest/simpleType',invalid),
STResList75 = [STRes74|STResList74],
- ?line {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC032.xsd','./msxsdtest/simpleType',invalid),
+ {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC032.xsd','./msxsdtest/simpleType',invalid),
STResList76 = [STRes75|STResList75],
- ?line {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC033.xsd','./msxsdtest/simpleType',valid),
+ {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stC033.xsd','./msxsdtest/simpleType',valid),
STResList77 = [STRes76|STResList76],
- ?line {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD001.xsd','./msxsdtest/simpleType',valid),
+ {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD001.xsd','./msxsdtest/simpleType',valid),
STResList78 = [STRes77|STResList77],
- ?line {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD002.xsd','./msxsdtest/simpleType',invalid),
+ {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD002.xsd','./msxsdtest/simpleType',invalid),
STResList79 = [STRes78|STResList78],
- ?line {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD003.xsd','./msxsdtest/simpleType',invalid),
+ {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD003.xsd','./msxsdtest/simpleType',invalid),
STResList80 = [STRes79|STResList79],
- ?line {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD004.xsd','./msxsdtest/simpleType',invalid),
+ {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD004.xsd','./msxsdtest/simpleType',invalid),
STResList81 = [STRes80|STResList80],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD005.xsd','./msxsdtest/simpleType',invalid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD005.xsd','./msxsdtest/simpleType',invalid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD006.xsd','./msxsdtest/simpleType',valid),
+ {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD006.xsd','./msxsdtest/simpleType',valid),
STResList83 = [STRes82|STResList82],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD007.xsd','./msxsdtest/simpleType',valid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD007.xsd','./msxsdtest/simpleType',valid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD008.xsd','./msxsdtest/simpleType',valid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD008.xsd','./msxsdtest/simpleType',valid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD009.xsd','./msxsdtest/simpleType',invalid),
+ {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD009.xsd','./msxsdtest/simpleType',invalid),
STResList86 = [STRes85|STResList85],
- ?line {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD010.xsd','./msxsdtest/simpleType',invalid),
+ {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD010.xsd','./msxsdtest/simpleType',invalid),
STResList87 = [STRes86|STResList86],
- ?line {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD011.xsd','./msxsdtest/simpleType',valid),
+ {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD011.xsd','./msxsdtest/simpleType',valid),
STResList88 = [STRes87|STResList87],
- ?line {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD012.xsd','./msxsdtest/simpleType',valid),
+ {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD012.xsd','./msxsdtest/simpleType',valid),
STResList89 = [STRes88|STResList88],
- ?line {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD013.xsd','./msxsdtest/simpleType',valid),
+ {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD013.xsd','./msxsdtest/simpleType',valid),
STResList90 = [STRes89|STResList89],
- ?line {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD014.xsd','./msxsdtest/simpleType',valid),
+ {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD014.xsd','./msxsdtest/simpleType',valid),
STResList91 = [STRes90|STResList90],
- ?line {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD015.xsd','./msxsdtest/simpleType',invalid),
+ {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD015.xsd','./msxsdtest/simpleType',invalid),
STResList92 = [STRes91|STResList91],
- ?line {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD016.xsd','./msxsdtest/simpleType',invalid),
+ {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD016.xsd','./msxsdtest/simpleType',invalid),
STResList93 = [STRes92|STResList92],
- ?line {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD017.xsd','./msxsdtest/simpleType',invalid),
+ {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD017.xsd','./msxsdtest/simpleType',invalid),
STResList94 = [STRes93|STResList93],
- ?line {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD018.xsd','./msxsdtest/simpleType',invalid),
+ {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD018.xsd','./msxsdtest/simpleType',invalid),
STResList95 = [STRes94|STResList94],
- ?line {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD019.xsd','./msxsdtest/simpleType',invalid),
+ {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD019.xsd','./msxsdtest/simpleType',invalid),
STResList96 = [STRes95|STResList95],
- ?line {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD020.xsd','./msxsdtest/simpleType',valid),
+ {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD020.xsd','./msxsdtest/simpleType',valid),
STResList97 = [STRes96|STResList96],
- ?line {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD021.xsd','./msxsdtest/simpleType',valid),
+ {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stD021.xsd','./msxsdtest/simpleType',valid),
STResList98 = [STRes97|STResList97],
- ?line {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE001.xsd','./msxsdtest/simpleType',valid),
+ {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE001.xsd','./msxsdtest/simpleType',valid),
STResList99 = [STRes98|STResList98],
- ?line {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE002.xsd','./msxsdtest/simpleType',invalid),
+ {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE002.xsd','./msxsdtest/simpleType',invalid),
STResList100 = [STRes99|STResList99],
- ?line {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE003.xsd','./msxsdtest/simpleType',invalid),
+ {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE003.xsd','./msxsdtest/simpleType',invalid),
STResList101 = [STRes100|STResList100],
- ?line {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE004.xsd','./msxsdtest/simpleType',invalid),
+ {STRes101,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE004.xsd','./msxsdtest/simpleType',invalid),
STResList102 = [STRes101|STResList101],
- ?line {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE005.xsd','./msxsdtest/simpleType',invalid),
+ {STRes102,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE005.xsd','./msxsdtest/simpleType',invalid),
STResList103 = [STRes102|STResList102],
- ?line {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE006.xsd','./msxsdtest/simpleType',valid),
+ {STRes103,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE006.xsd','./msxsdtest/simpleType',valid),
STResList104 = [STRes103|STResList103],
- ?line {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE007.xsd','./msxsdtest/simpleType',valid),
+ {STRes104,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE007.xsd','./msxsdtest/simpleType',valid),
STResList105 = [STRes104|STResList104],
- ?line {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE008.xsd','./msxsdtest/simpleType',invalid),
+ {STRes105,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE008.xsd','./msxsdtest/simpleType',invalid),
STResList106 = [STRes105|STResList105],
- ?line {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE009.xsd','./msxsdtest/simpleType',valid),
+ {STRes106,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE009.xsd','./msxsdtest/simpleType',valid),
STResList107 = [STRes106|STResList106],
- ?line {STRes107,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE010.xsd','./msxsdtest/simpleType',valid),
+ {STRes107,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE010.xsd','./msxsdtest/simpleType',valid),
STResList108 = [STRes107|STResList107],
- ?line {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE011.xsd','./msxsdtest/simpleType',valid),
+ {STRes108,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE011.xsd','./msxsdtest/simpleType',valid),
STResList109 = [STRes108|STResList108],
- ?line {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE012.xsd','./msxsdtest/simpleType',invalid),
+ {STRes109,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE012.xsd','./msxsdtest/simpleType',invalid),
STResList110 = [STRes109|STResList109],
- ?line {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE013.xsd','./msxsdtest/simpleType',valid),
+ {STRes110,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE013.xsd','./msxsdtest/simpleType',valid),
STResList111 = [STRes110|STResList110],
- ?line {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE014.xsd','./msxsdtest/simpleType',valid),
+ {STRes111,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE014.xsd','./msxsdtest/simpleType',valid),
STResList112 = [STRes111|STResList111],
- ?line {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE015.xsd','./msxsdtest/simpleType',invalid),
+ {STRes112,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE015.xsd','./msxsdtest/simpleType',invalid),
STResList113 = [STRes112|STResList112],
- ?line {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE016.xsd','./msxsdtest/simpleType',invalid),
+ {STRes113,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE016.xsd','./msxsdtest/simpleType',invalid),
STResList114 = [STRes113|STResList113],
- ?line {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE017.xsd','./msxsdtest/simpleType',valid),
+ {STRes114,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE017.xsd','./msxsdtest/simpleType',valid),
STResList115 = [STRes114|STResList114],
- ?line {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE018.xsd','./msxsdtest/simpleType',invalid),
+ {STRes115,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stE018.xsd','./msxsdtest/simpleType',invalid),
STResList116 = [STRes115|STResList115],
@@ -22242,278 +22230,278 @@ stABCDE(Config) when is_list(Config) ->
stFGH(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF001.xsd','./msxsdtest/simpleType',valid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF001.xsd','./msxsdtest/simpleType',valid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF002.xsd','./msxsdtest/simpleType',valid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF002.xsd','./msxsdtest/simpleType',valid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF003.xsd','./msxsdtest/simpleType',valid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF003.xsd','./msxsdtest/simpleType',valid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF004.xsd','./msxsdtest/simpleType',valid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF004.xsd','./msxsdtest/simpleType',valid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF005.xsd','./msxsdtest/simpleType',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF005.xsd','./msxsdtest/simpleType',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF006.xsd','./msxsdtest/simpleType',valid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF006.xsd','./msxsdtest/simpleType',valid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF007.xsd','./msxsdtest/simpleType',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF007.xsd','./msxsdtest/simpleType',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF008.xsd','./msxsdtest/simpleType',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF008.xsd','./msxsdtest/simpleType',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF009.xsd','./msxsdtest/simpleType',invalid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF009.xsd','./msxsdtest/simpleType',invalid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF010.xsd','./msxsdtest/simpleType',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF010.xsd','./msxsdtest/simpleType',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF011.xsd','./msxsdtest/simpleType',invalid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF011.xsd','./msxsdtest/simpleType',invalid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF012.xsd','./msxsdtest/simpleType',invalid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF012.xsd','./msxsdtest/simpleType',invalid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF013.xsd','./msxsdtest/simpleType',invalid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF013.xsd','./msxsdtest/simpleType',invalid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF014.xsd','./msxsdtest/simpleType',invalid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF014.xsd','./msxsdtest/simpleType',invalid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF015.xsd','./msxsdtest/simpleType',invalid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF015.xsd','./msxsdtest/simpleType',invalid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF016.xsd','./msxsdtest/simpleType',valid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF016.xsd','./msxsdtest/simpleType',valid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF017.xsd','./msxsdtest/simpleType',valid),
+ {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF017.xsd','./msxsdtest/simpleType',valid),
STResList17 = [STRes16|STResList16],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF018.xsd','./msxsdtest/simpleType',invalid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF018.xsd','./msxsdtest/simpleType',invalid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF019.xsd','./msxsdtest/simpleType',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF019.xsd','./msxsdtest/simpleType',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF020.xsd','./msxsdtest/simpleType',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF020.xsd','./msxsdtest/simpleType',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF021.xsd','./msxsdtest/simpleType',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF021.xsd','./msxsdtest/simpleType',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF022.xsd','./msxsdtest/simpleType',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF022.xsd','./msxsdtest/simpleType',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF023.xsd','./msxsdtest/simpleType',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF023.xsd','./msxsdtest/simpleType',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF024.xsd','./msxsdtest/simpleType',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF024.xsd','./msxsdtest/simpleType',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF025.xsd','./msxsdtest/simpleType',invalid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF025.xsd','./msxsdtest/simpleType',invalid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF026.xsd','./msxsdtest/simpleType',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF026.xsd','./msxsdtest/simpleType',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF027.xsd','./msxsdtest/simpleType',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF027.xsd','./msxsdtest/simpleType',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF028.xsd','./msxsdtest/simpleType',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF028.xsd','./msxsdtest/simpleType',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF029.xsd','./msxsdtest/simpleType',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF029.xsd','./msxsdtest/simpleType',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF030.xsd','./msxsdtest/simpleType',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF030.xsd','./msxsdtest/simpleType',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF031.xsd','./msxsdtest/simpleType',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF031.xsd','./msxsdtest/simpleType',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF032.xsd','./msxsdtest/simpleType',valid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF032.xsd','./msxsdtest/simpleType',valid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF033.xsd','./msxsdtest/simpleType',invalid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF033.xsd','./msxsdtest/simpleType',invalid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF034.xsd','./msxsdtest/simpleType',valid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF034.xsd','./msxsdtest/simpleType',valid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF035.xsd','./msxsdtest/simpleType',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF035.xsd','./msxsdtest/simpleType',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF036.xsd','./msxsdtest/simpleType',valid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF036.xsd','./msxsdtest/simpleType',valid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF037.xsd','./msxsdtest/simpleType',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stF037.xsd','./msxsdtest/simpleType',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG001.xsd','./msxsdtest/simpleType',valid),
+ {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG001.xsd','./msxsdtest/simpleType',valid),
STResList38 = [STRes37|STResList37],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG001.xml','./msxsdtest/simpleType',valid,S37),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG001.xml','./msxsdtest/simpleType',valid,S37),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG002.xsd','./msxsdtest/simpleType',valid),
+ {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG002.xsd','./msxsdtest/simpleType',valid),
STResList39 = [STRes38|STResList38],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG002.xml','./msxsdtest/simpleType',valid,S38),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG002.xml','./msxsdtest/simpleType',valid,S38),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG003.xsd','./msxsdtest/simpleType',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG003.xsd','./msxsdtest/simpleType',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG003.xml','./msxsdtest/simpleType',invalid,S39),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG003.xml','./msxsdtest/simpleType',invalid,S39),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG004.xsd','./msxsdtest/simpleType',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG004.xsd','./msxsdtest/simpleType',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG004.xml','./msxsdtest/simpleType',valid,S40),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG004.xml','./msxsdtest/simpleType',valid,S40),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG005.xsd','./msxsdtest/simpleType',valid),
+ {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG005.xsd','./msxsdtest/simpleType',valid),
STResList42 = [STRes41|STResList41],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG005.xml','./msxsdtest/simpleType',invalid,S41),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG005.xml','./msxsdtest/simpleType',invalid,S41),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG006.xsd','./msxsdtest/simpleType',valid),
+ {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG006.xsd','./msxsdtest/simpleType',valid),
STResList43 = [STRes42|STResList42],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG006.xml','./msxsdtest/simpleType',valid,S42),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG006.xml','./msxsdtest/simpleType',valid,S42),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG007.xsd','./msxsdtest/simpleType',valid),
+ {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG007.xsd','./msxsdtest/simpleType',valid),
STResList44 = [STRes43|STResList43],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG007.xml','./msxsdtest/simpleType',invalid,S43),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG007.xml','./msxsdtest/simpleType',invalid,S43),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG008.xsd','./msxsdtest/simpleType',valid),
+ {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG008.xsd','./msxsdtest/simpleType',valid),
STResList45 = [STRes44|STResList44],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG008.xml','./msxsdtest/simpleType',valid,S44),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG008.xml','./msxsdtest/simpleType',valid,S44),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG009.xsd','./msxsdtest/simpleType',valid),
+ {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG009.xsd','./msxsdtest/simpleType',valid),
STResList46 = [STRes45|STResList45],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG009.xml','./msxsdtest/simpleType',invalid,S45),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG009.xml','./msxsdtest/simpleType',invalid,S45),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG010.xsd','./msxsdtest/simpleType',valid),
+ {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG010.xsd','./msxsdtest/simpleType',valid),
STResList47 = [STRes46|STResList46],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG010.xml','./msxsdtest/simpleType',valid,S46),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG010.xml','./msxsdtest/simpleType',valid,S46),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG011.xsd','./msxsdtest/simpleType',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG011.xsd','./msxsdtest/simpleType',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG011.xml','./msxsdtest/simpleType',invalid,S47),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG011.xml','./msxsdtest/simpleType',invalid,S47),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG012.xsd','./msxsdtest/simpleType',valid),
+ {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG012.xsd','./msxsdtest/simpleType',valid),
STResList49 = [STRes48|STResList48],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG012.xml','./msxsdtest/simpleType',valid,S48),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG012.xml','./msxsdtest/simpleType',valid,S48),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG013.xsd','./msxsdtest/simpleType',valid),
+ {STRes49,S49} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stG013.xsd','./msxsdtest/simpleType',valid),
STResList50 = [STRes49|STResList49],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG013.xml','./msxsdtest/simpleType',invalid,S49),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stG013.xml','./msxsdtest/simpleType',invalid,S49),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH001.xsd','./msxsdtest/simpleType',valid),
+ {STRes50,S50} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH001.xsd','./msxsdtest/simpleType',valid),
STResList51 = [STRes50|STResList50],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH001.xml','./msxsdtest/simpleType',valid,S50),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH001.xml','./msxsdtest/simpleType',valid,S50),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH002.xsd','./msxsdtest/simpleType',valid),
+ {STRes51,S51} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH002.xsd','./msxsdtest/simpleType',valid),
STResList52 = [STRes51|STResList51],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH002.xml','./msxsdtest/simpleType',invalid,S51),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH002.xml','./msxsdtest/simpleType',invalid,S51),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH003.xsd','./msxsdtest/simpleType',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH003.xsd','./msxsdtest/simpleType',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH003.xml','./msxsdtest/simpleType',valid,S52),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH003.xml','./msxsdtest/simpleType',valid,S52),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH004.xsd','./msxsdtest/simpleType',valid),
+ {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH004.xsd','./msxsdtest/simpleType',valid),
STResList54 = [STRes53|STResList53],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH004.xml','./msxsdtest/simpleType',invalid,S53),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH004.xml','./msxsdtest/simpleType',invalid,S53),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH005.xsd','./msxsdtest/simpleType',valid),
+ {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH005.xsd','./msxsdtest/simpleType',valid),
STResList55 = [STRes54|STResList54],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH005.xml','./msxsdtest/simpleType',valid,S54),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH005.xml','./msxsdtest/simpleType',valid,S54),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH006.xsd','./msxsdtest/simpleType',valid),
+ {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH006.xsd','./msxsdtest/simpleType',valid),
STResList56 = [STRes55|STResList55],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH006.xml','./msxsdtest/simpleType',invalid,S55),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH006.xml','./msxsdtest/simpleType',invalid,S55),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH007.xsd','./msxsdtest/simpleType',valid),
+ {STRes56,S56} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH007.xsd','./msxsdtest/simpleType',valid),
STResList57 = [STRes56|STResList56],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH007.xml','./msxsdtest/simpleType',valid,S56),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH007.xml','./msxsdtest/simpleType',valid,S56),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH008.xsd','./msxsdtest/simpleType',valid),
+ {STRes57,S57} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stH008.xsd','./msxsdtest/simpleType',valid),
STResList58 = [STRes57|STResList57],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH008.xml','./msxsdtest/simpleType',invalid,S57),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stH008.xml','./msxsdtest/simpleType',invalid,S57),
ITResList21 = [ITRes20|ITResList20],
@@ -22524,175 +22512,175 @@ stFGH(Config) when is_list(Config) ->
stIJK(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI001.xsd','./msxsdtest/simpleType',valid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI001.xsd','./msxsdtest/simpleType',valid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI002.xsd','./msxsdtest/simpleType',valid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI002.xsd','./msxsdtest/simpleType',valid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI003.xsd','./msxsdtest/simpleType',valid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI003.xsd','./msxsdtest/simpleType',valid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI004.xsd','./msxsdtest/simpleType',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI004.xsd','./msxsdtest/simpleType',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI005.xsd','./msxsdtest/simpleType',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stI005.xsd','./msxsdtest/simpleType',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ001.xsd','./msxsdtest/simpleType',valid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ001.xsd','./msxsdtest/simpleType',valid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ002.xsd','./msxsdtest/simpleType',valid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ002.xsd','./msxsdtest/simpleType',valid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ003.xsd','./msxsdtest/simpleType',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ003.xsd','./msxsdtest/simpleType',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ004.xsd','./msxsdtest/simpleType',valid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ004.xsd','./msxsdtest/simpleType',valid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ005.xsd','./msxsdtest/simpleType',valid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ005.xsd','./msxsdtest/simpleType',valid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ006.xsd','./msxsdtest/simpleType',valid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ006.xsd','./msxsdtest/simpleType',valid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ007.xsd','./msxsdtest/simpleType',valid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ007.xsd','./msxsdtest/simpleType',valid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ008.xsd','./msxsdtest/simpleType',valid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ008.xsd','./msxsdtest/simpleType',valid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ009.xsd','./msxsdtest/simpleType',invalid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ009.xsd','./msxsdtest/simpleType',invalid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ010.xsd','./msxsdtest/simpleType',invalid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ010.xsd','./msxsdtest/simpleType',invalid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ011.xsd','./msxsdtest/simpleType',invalid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ011.xsd','./msxsdtest/simpleType',invalid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ012.xsd','./msxsdtest/simpleType',invalid),
+ {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ012.xsd','./msxsdtest/simpleType',invalid),
STResList17 = [STRes16|STResList16],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ013.xsd','./msxsdtest/simpleType',invalid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ013.xsd','./msxsdtest/simpleType',invalid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ014.xsd','./msxsdtest/simpleType',invalid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ014.xsd','./msxsdtest/simpleType',invalid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ015.xsd','./msxsdtest/simpleType',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ015.xsd','./msxsdtest/simpleType',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ016.xsd','./msxsdtest/simpleType',invalid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ016.xsd','./msxsdtest/simpleType',invalid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ017.xsd','./msxsdtest/simpleType',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ017.xsd','./msxsdtest/simpleType',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ018.xsd','./msxsdtest/simpleType',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ018.xsd','./msxsdtest/simpleType',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ019.xsd','./msxsdtest/simpleType',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stJ019.xsd','./msxsdtest/simpleType',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK001.xsd','./msxsdtest/simpleType',valid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK001.xsd','./msxsdtest/simpleType',valid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK002.xsd','./msxsdtest/simpleType',invalid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK002.xsd','./msxsdtest/simpleType',invalid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK003.xsd','./msxsdtest/simpleType',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK003.xsd','./msxsdtest/simpleType',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK004.xsd','./msxsdtest/simpleType',valid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK004.xsd','./msxsdtest/simpleType',valid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK005.xsd','./msxsdtest/simpleType',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK005.xsd','./msxsdtest/simpleType',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK006.xsd','./msxsdtest/simpleType',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK006.xsd','./msxsdtest/simpleType',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK007.xsd','./msxsdtest/simpleType',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK007.xsd','./msxsdtest/simpleType',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK008.xsd','./msxsdtest/simpleType',valid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK008.xsd','./msxsdtest/simpleType',valid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK009.xsd','./msxsdtest/simpleType',valid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK009.xsd','./msxsdtest/simpleType',valid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK010.xsd','./msxsdtest/simpleType',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK010.xsd','./msxsdtest/simpleType',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK011.xsd','./msxsdtest/simpleType',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK011.xsd','./msxsdtest/simpleType',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK012.xsd','./msxsdtest/simpleType',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK012.xsd','./msxsdtest/simpleType',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK013.xsd','./msxsdtest/simpleType',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK013.xsd','./msxsdtest/simpleType',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK014.xsd','./msxsdtest/simpleType',invalid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK014.xsd','./msxsdtest/simpleType',invalid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK015.xsd','./msxsdtest/simpleType',invalid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK015.xsd','./msxsdtest/simpleType',invalid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK016.xsd','./msxsdtest/simpleType',invalid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK016.xsd','./msxsdtest/simpleType',invalid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK017.xsd','./msxsdtest/simpleType',invalid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK017.xsd','./msxsdtest/simpleType',invalid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK018.xsd','./msxsdtest/simpleType',invalid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK018.xsd','./msxsdtest/simpleType',invalid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK019.xsd','./msxsdtest/simpleType',invalid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stK019.xsd','./msxsdtest/simpleType',invalid),
STResList43 = [STRes42|STResList42],
@@ -22703,22 +22691,22 @@ stIJK(Config) when is_list(Config) ->
stZ(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stZ001.xsd','./msxsdtest/simpleType',valid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stZ001.xsd','./msxsdtest/simpleType',valid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stZ002.xsd','./msxsdtest/simpleType',invalid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stZ002.xsd','./msxsdtest/simpleType',invalid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stZ003.xsd','./msxsdtest/simpleType',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stZ003.xsd','./msxsdtest/simpleType',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stZ004.xsd','./msxsdtest/simpleType',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/simpleType/stZ004.xsd','./msxsdtest/simpleType',valid),
STResList4 = [STRes3|STResList3],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stZ004.xml','./msxsdtest/simpleType',valid,S3),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/simpleType/stZ004.xml','./msxsdtest/simpleType',valid,S3),
ITResList1 = [ITRes0|ITResList0],
@@ -22729,407 +22717,407 @@ stZ(Config) when is_list(Config) ->
wildABCDEF(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA001.xsd','./msxsdtest/wildCards',valid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA001.xsd','./msxsdtest/wildCards',valid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA002.xsd','./msxsdtest/wildCards',valid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA002.xsd','./msxsdtest/wildCards',valid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA003.xsd','./msxsdtest/wildCards',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA003.xsd','./msxsdtest/wildCards',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA004.xsd','./msxsdtest/wildCards',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA004.xsd','./msxsdtest/wildCards',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA005.xsd','./msxsdtest/wildCards',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA005.xsd','./msxsdtest/wildCards',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA006.xsd','./msxsdtest/wildCards',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA006.xsd','./msxsdtest/wildCards',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA007.xsd','./msxsdtest/wildCards',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA007.xsd','./msxsdtest/wildCards',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA008.xsd','./msxsdtest/wildCards',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildA008.xsd','./msxsdtest/wildCards',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB009.xsd','./msxsdtest/wildCards',valid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB009.xsd','./msxsdtest/wildCards',valid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB010.xsd','./msxsdtest/wildCards',valid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB010.xsd','./msxsdtest/wildCards',valid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB011.xsd','./msxsdtest/wildCards',valid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB011.xsd','./msxsdtest/wildCards',valid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB012.xsd','./msxsdtest/wildCards',valid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB012.xsd','./msxsdtest/wildCards',valid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB013.xsd','./msxsdtest/wildCards',valid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB013.xsd','./msxsdtest/wildCards',valid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB014.xsd','./msxsdtest/wildCards',invalid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB014.xsd','./msxsdtest/wildCards',invalid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB015.xsd','./msxsdtest/wildCards',invalid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB015.xsd','./msxsdtest/wildCards',invalid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB016.xsd','./msxsdtest/wildCards',invalid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB016.xsd','./msxsdtest/wildCards',invalid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB017.xsd','./msxsdtest/wildCards',valid),
+ {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB017.xsd','./msxsdtest/wildCards',valid),
STResList17 = [STRes16|STResList16],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB018.xsd','./msxsdtest/wildCards',valid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB018.xsd','./msxsdtest/wildCards',valid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB019.xsd','./msxsdtest/wildCards',valid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB019.xsd','./msxsdtest/wildCards',valid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB020.xsd','./msxsdtest/wildCards',invalid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB020.xsd','./msxsdtest/wildCards',invalid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB021.xsd','./msxsdtest/wildCards',valid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB021.xsd','./msxsdtest/wildCards',valid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB022.xsd','./msxsdtest/wildCards',invalid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB022.xsd','./msxsdtest/wildCards',invalid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB023.xsd','./msxsdtest/wildCards',invalid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB023.xsd','./msxsdtest/wildCards',invalid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB024.xsd','./msxsdtest/wildCards',invalid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB024.xsd','./msxsdtest/wildCards',invalid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB025.xsd','./msxsdtest/wildCards',valid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB025.xsd','./msxsdtest/wildCards',valid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB026.xsd','./msxsdtest/wildCards',valid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB026.xsd','./msxsdtest/wildCards',valid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB027.xsd','./msxsdtest/wildCards',invalid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB027.xsd','./msxsdtest/wildCards',invalid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB028.xsd','./msxsdtest/wildCards',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB028.xsd','./msxsdtest/wildCards',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB029.xsd','./msxsdtest/wildCards',valid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildB029.xsd','./msxsdtest/wildCards',valid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC030.xsd','./msxsdtest/wildCards',valid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC030.xsd','./msxsdtest/wildCards',valid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC031.xsd','./msxsdtest/wildCards',valid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC031.xsd','./msxsdtest/wildCards',valid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC032.xsd','./msxsdtest/wildCards',valid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC032.xsd','./msxsdtest/wildCards',valid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC033.xsd','./msxsdtest/wildCards',valid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC033.xsd','./msxsdtest/wildCards',valid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC034.xsd','./msxsdtest/wildCards',valid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC034.xsd','./msxsdtest/wildCards',valid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC035.xsd','./msxsdtest/wildCards',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC035.xsd','./msxsdtest/wildCards',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC036.xsd','./msxsdtest/wildCards',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC036.xsd','./msxsdtest/wildCards',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC037.xsd','./msxsdtest/wildCards',valid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC037.xsd','./msxsdtest/wildCards',valid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC038.xsd','./msxsdtest/wildCards',valid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC038.xsd','./msxsdtest/wildCards',valid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC039.xsd','./msxsdtest/wildCards',valid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC039.xsd','./msxsdtest/wildCards',valid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC040.xsd','./msxsdtest/wildCards',valid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC040.xsd','./msxsdtest/wildCards',valid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC041.xsd','./msxsdtest/wildCards',valid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC041.xsd','./msxsdtest/wildCards',valid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC042.xsd','./msxsdtest/wildCards',valid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC042.xsd','./msxsdtest/wildCards',valid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC043.xsd','./msxsdtest/wildCards',valid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC043.xsd','./msxsdtest/wildCards',valid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC044.xsd','./msxsdtest/wildCards',valid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC044.xsd','./msxsdtest/wildCards',valid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC045.xsd','./msxsdtest/wildCards',valid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC045.xsd','./msxsdtest/wildCards',valid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC046.xsd','./msxsdtest/wildCards',valid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC046.xsd','./msxsdtest/wildCards',valid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC047.xsd','./msxsdtest/wildCards',valid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC047.xsd','./msxsdtest/wildCards',valid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC048.xsd','./msxsdtest/wildCards',valid),
+ {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC048.xsd','./msxsdtest/wildCards',valid),
STResList48 = [STRes47|STResList47],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC049.xsd','./msxsdtest/wildCards',invalid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC049.xsd','./msxsdtest/wildCards',invalid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC050.xsd','./msxsdtest/wildCards',invalid),
+ {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC050.xsd','./msxsdtest/wildCards',invalid),
STResList50 = [STRes49|STResList49],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC051.xsd','./msxsdtest/wildCards',invalid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC051.xsd','./msxsdtest/wildCards',invalid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC052.xsd','./msxsdtest/wildCards',invalid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC052.xsd','./msxsdtest/wildCards',invalid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC053.xsd','./msxsdtest/wildCards',invalid),
+ {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC053.xsd','./msxsdtest/wildCards',invalid),
STResList53 = [STRes52|STResList52],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC054.xsd','./msxsdtest/wildCards',valid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC054.xsd','./msxsdtest/wildCards',valid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC055.xsd','./msxsdtest/wildCards',invalid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC055.xsd','./msxsdtest/wildCards',invalid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC056.xsd','./msxsdtest/wildCards',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC056.xsd','./msxsdtest/wildCards',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC057.xsd','./msxsdtest/wildCards',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC057.xsd','./msxsdtest/wildCards',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC058.xsd','./msxsdtest/wildCards',invalid),
+ {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC058.xsd','./msxsdtest/wildCards',invalid),
STResList58 = [STRes57|STResList57],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC059.xsd','./msxsdtest/wildCards',valid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC059.xsd','./msxsdtest/wildCards',valid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC060.xsd','./msxsdtest/wildCards',valid),
+ {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC060.xsd','./msxsdtest/wildCards',valid),
STResList60 = [STRes59|STResList59],
- ?line {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC061.xsd','./msxsdtest/wildCards',valid),
+ {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC061.xsd','./msxsdtest/wildCards',valid),
STResList61 = [STRes60|STResList60],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC062.xsd','./msxsdtest/wildCards',valid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC062.xsd','./msxsdtest/wildCards',valid),
STResList62 = [STRes61|STResList61],
- ?line {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC063.xsd','./msxsdtest/wildCards',valid),
+ {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC063.xsd','./msxsdtest/wildCards',valid),
STResList63 = [STRes62|STResList62],
- ?line {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC064.xsd','./msxsdtest/wildCards',valid),
+ {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC064.xsd','./msxsdtest/wildCards',valid),
STResList64 = [STRes63|STResList63],
- ?line {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC065.xsd','./msxsdtest/wildCards',valid),
+ {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC065.xsd','./msxsdtest/wildCards',valid),
STResList65 = [STRes64|STResList64],
- ?line {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC066.xsd','./msxsdtest/wildCards',invalid),
+ {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC066.xsd','./msxsdtest/wildCards',invalid),
STResList66 = [STRes65|STResList65],
- ?line {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC067.xsd','./msxsdtest/wildCards',invalid),
+ {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC067.xsd','./msxsdtest/wildCards',invalid),
STResList67 = [STRes66|STResList66],
- ?line {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC068.xsd','./msxsdtest/wildCards',valid),
+ {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC068.xsd','./msxsdtest/wildCards',valid),
STResList68 = [STRes67|STResList67],
- ?line {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC069.xsd','./msxsdtest/wildCards',valid),
+ {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC069.xsd','./msxsdtest/wildCards',valid),
STResList69 = [STRes68|STResList68],
- ?line {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC070.xsd','./msxsdtest/wildCards',valid),
+ {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildC070.xsd','./msxsdtest/wildCards',valid),
STResList70 = [STRes69|STResList69],
- ?line {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD071.xsd','./msxsdtest/wildCards',invalid),
+ {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD071.xsd','./msxsdtest/wildCards',invalid),
STResList71 = [STRes70|STResList70],
- ?line {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD072.xsd','./msxsdtest/wildCards',valid),
+ {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD072.xsd','./msxsdtest/wildCards',valid),
STResList72 = [STRes71|STResList71],
- ?line {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD073.xsd','./msxsdtest/wildCards',valid),
+ {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD073.xsd','./msxsdtest/wildCards',valid),
STResList73 = [STRes72|STResList72],
- ?line {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD074.xsd','./msxsdtest/wildCards',valid),
+ {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD074.xsd','./msxsdtest/wildCards',valid),
STResList74 = [STRes73|STResList73],
- ?line {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD075.xsd','./msxsdtest/wildCards',invalid),
+ {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD075.xsd','./msxsdtest/wildCards',invalid),
STResList75 = [STRes74|STResList74],
- ?line {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD076.xsd','./msxsdtest/wildCards',invalid),
+ {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD076.xsd','./msxsdtest/wildCards',invalid),
STResList76 = [STRes75|STResList75],
- ?line {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD077.xsd','./msxsdtest/wildCards',invalid),
+ {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD077.xsd','./msxsdtest/wildCards',invalid),
STResList77 = [STRes76|STResList76],
- ?line {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD078.xsd','./msxsdtest/wildCards',invalid),
+ {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD078.xsd','./msxsdtest/wildCards',invalid),
STResList78 = [STRes77|STResList77],
- ?line {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD079.xsd','./msxsdtest/wildCards',invalid),
+ {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildD079.xsd','./msxsdtest/wildCards',invalid),
STResList79 = [STRes78|STResList78],
- ?line {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildE001.xsd','./msxsdtest/wildCards',valid),
+ {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildE001.xsd','./msxsdtest/wildCards',valid),
STResList80 = [STRes79|STResList79],
- ?line {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildE002.xsd','./msxsdtest/wildCards',invalid),
+ {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildE002.xsd','./msxsdtest/wildCards',invalid),
STResList81 = [STRes80|STResList80],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF001.xsd','./msxsdtest/wildCards',valid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF001.xsd','./msxsdtest/wildCards',valid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF002.xsd','./msxsdtest/wildCards',valid),
+ {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF002.xsd','./msxsdtest/wildCards',valid),
STResList83 = [STRes82|STResList82],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF003.xsd','./msxsdtest/wildCards',valid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF003.xsd','./msxsdtest/wildCards',valid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF004.xsd','./msxsdtest/wildCards',valid),
+ {STRes84,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF004.xsd','./msxsdtest/wildCards',valid),
STResList85 = [STRes84|STResList84],
- ?line {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF005.xsd','./msxsdtest/wildCards',valid),
+ {STRes85,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF005.xsd','./msxsdtest/wildCards',valid),
STResList86 = [STRes85|STResList85],
- ?line {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF006.xsd','./msxsdtest/wildCards',invalid),
+ {STRes86,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF006.xsd','./msxsdtest/wildCards',invalid),
STResList87 = [STRes86|STResList86],
- ?line {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF007.xsd','./msxsdtest/wildCards',invalid),
+ {STRes87,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF007.xsd','./msxsdtest/wildCards',invalid),
STResList88 = [STRes87|STResList87],
- ?line {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF008.xsd','./msxsdtest/wildCards',invalid),
+ {STRes88,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF008.xsd','./msxsdtest/wildCards',invalid),
STResList89 = [STRes88|STResList88],
- ?line {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF009.xsd','./msxsdtest/wildCards',invalid),
+ {STRes89,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF009.xsd','./msxsdtest/wildCards',invalid),
STResList90 = [STRes89|STResList89],
- ?line {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF010.xsd','./msxsdtest/wildCards',invalid),
+ {STRes90,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF010.xsd','./msxsdtest/wildCards',invalid),
STResList91 = [STRes90|STResList90],
- ?line {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF011.xsd','./msxsdtest/wildCards',valid),
+ {STRes91,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF011.xsd','./msxsdtest/wildCards',valid),
STResList92 = [STRes91|STResList91],
- ?line {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF012.xsd','./msxsdtest/wildCards',invalid),
+ {STRes92,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF012.xsd','./msxsdtest/wildCards',invalid),
STResList93 = [STRes92|STResList92],
- ?line {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF013.xsd','./msxsdtest/wildCards',invalid),
+ {STRes93,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF013.xsd','./msxsdtest/wildCards',invalid),
STResList94 = [STRes93|STResList93],
- ?line {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF014.xsd','./msxsdtest/wildCards',invalid),
+ {STRes94,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF014.xsd','./msxsdtest/wildCards',invalid),
STResList95 = [STRes94|STResList94],
- ?line {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF015.xsd','./msxsdtest/wildCards',invalid),
+ {STRes95,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF015.xsd','./msxsdtest/wildCards',invalid),
STResList96 = [STRes95|STResList95],
- ?line {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF016.xsd','./msxsdtest/wildCards',invalid),
+ {STRes96,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF016.xsd','./msxsdtest/wildCards',invalid),
STResList97 = [STRes96|STResList96],
- ?line {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF017.xsd','./msxsdtest/wildCards',valid),
+ {STRes97,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF017.xsd','./msxsdtest/wildCards',valid),
STResList98 = [STRes97|STResList97],
- ?line {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF018.xsd','./msxsdtest/wildCards',invalid),
+ {STRes98,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF018.xsd','./msxsdtest/wildCards',invalid),
STResList99 = [STRes98|STResList98],
- ?line {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF019.xsd','./msxsdtest/wildCards',valid),
+ {STRes99,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF019.xsd','./msxsdtest/wildCards',valid),
STResList100 = [STRes99|STResList99],
- ?line {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF020.xsd','./msxsdtest/wildCards',valid),
+ {STRes100,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildF020.xsd','./msxsdtest/wildCards',valid),
STResList101 = [STRes100|STResList100],
@@ -23140,362 +23128,362 @@ wildABCDEF(Config) when is_list(Config) ->
wildGHI(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG001.xsd','./msxsdtest/wildCards',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG001.xsd','./msxsdtest/wildCards',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG001.xml','./msxsdtest/wildCards',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG001.xml','./msxsdtest/wildCards',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG002.xsd','./msxsdtest/wildCards',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG002.xsd','./msxsdtest/wildCards',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG002.xml','./msxsdtest/wildCards',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG002.xml','./msxsdtest/wildCards',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG003.xsd','./msxsdtest/wildCards',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG003.xsd','./msxsdtest/wildCards',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG003.xml','./msxsdtest/wildCards',invalid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG003.xml','./msxsdtest/wildCards',invalid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG004.xsd','./msxsdtest/wildCards',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG004.xsd','./msxsdtest/wildCards',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG004.xml','./msxsdtest/wildCards',valid,S3),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG004.xml','./msxsdtest/wildCards',valid,S3),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG005.xsd','./msxsdtest/wildCards',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG005.xsd','./msxsdtest/wildCards',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG005.xml','./msxsdtest/wildCards',invalid,S4),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG005.xml','./msxsdtest/wildCards',invalid,S4),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG006.xsd','./msxsdtest/wildCards',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG006.xsd','./msxsdtest/wildCards',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG006.xml','./msxsdtest/wildCards',valid,S5),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG006.xml','./msxsdtest/wildCards',valid,S5),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG007.xsd','./msxsdtest/wildCards',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG007.xsd','./msxsdtest/wildCards',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG007.xml','./msxsdtest/wildCards',valid,S6),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG007.xml','./msxsdtest/wildCards',valid,S6),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG008.xsd','./msxsdtest/wildCards',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG008.xsd','./msxsdtest/wildCards',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG008.xml','./msxsdtest/wildCards',invalid,S7),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG008.xml','./msxsdtest/wildCards',invalid,S7),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG009.xsd','./msxsdtest/wildCards',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG009.xsd','./msxsdtest/wildCards',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG009.xml','./msxsdtest/wildCards',invalid,S8),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG009.xml','./msxsdtest/wildCards',invalid,S8),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG010.xsd','./msxsdtest/wildCards',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG010.xsd','./msxsdtest/wildCards',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG010.xml','./msxsdtest/wildCards',valid,S9),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG010.xml','./msxsdtest/wildCards',valid,S9),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG011.xsd','./msxsdtest/wildCards',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG011.xsd','./msxsdtest/wildCards',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG011.xml','./msxsdtest/wildCards',invalid,S10),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG011.xml','./msxsdtest/wildCards',invalid,S10),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG012.xsd','./msxsdtest/wildCards',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG012.xsd','./msxsdtest/wildCards',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG012.xml','./msxsdtest/wildCards',valid,S11),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG012.xml','./msxsdtest/wildCards',valid,S11),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG013.xsd','./msxsdtest/wildCards',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG013.xsd','./msxsdtest/wildCards',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG013.xml','./msxsdtest/wildCards',valid,S12),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG013.xml','./msxsdtest/wildCards',valid,S12),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG014.xsd','./msxsdtest/wildCards',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG014.xsd','./msxsdtest/wildCards',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG014.xml','./msxsdtest/wildCards',invalid,S13),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG014.xml','./msxsdtest/wildCards',invalid,S13),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG015.xsd','./msxsdtest/wildCards',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG015.xsd','./msxsdtest/wildCards',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG015.xml','./msxsdtest/wildCards',valid,S14),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG015.xml','./msxsdtest/wildCards',valid,S14),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG016.xsd','./msxsdtest/wildCards',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG016.xsd','./msxsdtest/wildCards',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG016.xml','./msxsdtest/wildCards',valid,S15),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG016.xml','./msxsdtest/wildCards',valid,S15),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG017.xsd','./msxsdtest/wildCards',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG017.xsd','./msxsdtest/wildCards',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG017.xml','./msxsdtest/wildCards',invalid,S16),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG017.xml','./msxsdtest/wildCards',invalid,S16),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG018.xsd','./msxsdtest/wildCards',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG018.xsd','./msxsdtest/wildCards',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG018.xml','./msxsdtest/wildCards',valid,S17),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG018.xml','./msxsdtest/wildCards',valid,S17),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG019.xsd','./msxsdtest/wildCards',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG019.xsd','./msxsdtest/wildCards',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG019.xml','./msxsdtest/wildCards',invalid,S18),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG019.xml','./msxsdtest/wildCards',invalid,S18),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG020.xsd','./msxsdtest/wildCards',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG020.xsd','./msxsdtest/wildCards',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG020.xml','./msxsdtest/wildCards',invalid,S19),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG020.xml','./msxsdtest/wildCards',invalid,S19),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG021.xsd','./msxsdtest/wildCards',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG021.xsd','./msxsdtest/wildCards',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG021.xml','./msxsdtest/wildCards',valid,S20),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG021.xml','./msxsdtest/wildCards',valid,S20),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG022.xsd','./msxsdtest/wildCards',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG022.xsd','./msxsdtest/wildCards',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG022.xml','./msxsdtest/wildCards',invalid,S21),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG022.xml','./msxsdtest/wildCards',invalid,S21),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG023.xsd','./msxsdtest/wildCards',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG023.xsd','./msxsdtest/wildCards',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG023.xml','./msxsdtest/wildCards',valid,S22),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG023.xml','./msxsdtest/wildCards',valid,S22),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG024.xsd','./msxsdtest/wildCards',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG024.xsd','./msxsdtest/wildCards',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG024.xml','./msxsdtest/wildCards',invalid,S23),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG024.xml','./msxsdtest/wildCards',invalid,S23),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG025.xsd','./msxsdtest/wildCards',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG025.xsd','./msxsdtest/wildCards',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG025.xml','./msxsdtest/wildCards',invalid,S24),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG025.xml','./msxsdtest/wildCards',invalid,S24),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG026.xsd','./msxsdtest/wildCards',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG026.xsd','./msxsdtest/wildCards',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG026.xml','./msxsdtest/wildCards',valid,S25),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG026.xml','./msxsdtest/wildCards',valid,S25),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG027.xsd','./msxsdtest/wildCards',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG027.xsd','./msxsdtest/wildCards',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG027.xml','./msxsdtest/wildCards',valid,S26),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG027.xml','./msxsdtest/wildCards',valid,S26),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG028.xsd','./msxsdtest/wildCards',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG028.xsd','./msxsdtest/wildCards',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG028.xml','./msxsdtest/wildCards',invalid,S27),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG028.xml','./msxsdtest/wildCards',invalid,S27),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG029.xsd','./msxsdtest/wildCards',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG029.xsd','./msxsdtest/wildCards',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG029.xml','./msxsdtest/wildCards',invalid,S28),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG029.xml','./msxsdtest/wildCards',invalid,S28),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG030.xsd','./msxsdtest/wildCards',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG030.xsd','./msxsdtest/wildCards',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG030.xml','./msxsdtest/wildCards',invalid,S29),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG030.xml','./msxsdtest/wildCards',invalid,S29),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG031.xsd','./msxsdtest/wildCards',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG031.xsd','./msxsdtest/wildCards',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG031.xml','./msxsdtest/wildCards',valid,S30),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG031.xml','./msxsdtest/wildCards',valid,S30),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG032.xsd','./msxsdtest/wildCards',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG032.xsd','./msxsdtest/wildCards',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG032.xml','./msxsdtest/wildCards',invalid,S31),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG032.xml','./msxsdtest/wildCards',invalid,S31),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG033.xsd','./msxsdtest/wildCards',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG033.xsd','./msxsdtest/wildCards',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG033.xml','./msxsdtest/wildCards',valid,S32),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG033.xml','./msxsdtest/wildCards',valid,S32),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG034.xsd','./msxsdtest/wildCards',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG034.xsd','./msxsdtest/wildCards',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG034.xml','./msxsdtest/wildCards',invalid,S33),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG034.xml','./msxsdtest/wildCards',invalid,S33),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG035.xsd','./msxsdtest/wildCards',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG035.xsd','./msxsdtest/wildCards',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG035.xml','./msxsdtest/wildCards',valid,S34),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG035.xml','./msxsdtest/wildCards',valid,S34),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG036.xsd','./msxsdtest/wildCards',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG036.xsd','./msxsdtest/wildCards',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG036.xml','./msxsdtest/wildCards',invalid,S35),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG036.xml','./msxsdtest/wildCards',invalid,S35),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG037.xsd','./msxsdtest/wildCards',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG037.xsd','./msxsdtest/wildCards',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG037.xml','./msxsdtest/wildCards',valid,S36),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG037.xml','./msxsdtest/wildCards',valid,S36),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG038.xsd','./msxsdtest/wildCards',valid),
+ {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG038.xsd','./msxsdtest/wildCards',valid),
STResList38 = [STRes37|STResList37],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG038.xml','./msxsdtest/wildCards',valid,S37),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG038.xml','./msxsdtest/wildCards',valid,S37),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG039.xsd','./msxsdtest/wildCards',valid),
+ {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG039.xsd','./msxsdtest/wildCards',valid),
STResList39 = [STRes38|STResList38],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG039.xml','./msxsdtest/wildCards',invalid,S38),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG039.xml','./msxsdtest/wildCards',invalid,S38),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG040.xsd','./msxsdtest/wildCards',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildG040.xsd','./msxsdtest/wildCards',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG040.xml','./msxsdtest/wildCards',valid,S39),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildG040.xml','./msxsdtest/wildCards',valid,S39),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH001.xsd','./msxsdtest/wildCards',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH001.xsd','./msxsdtest/wildCards',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH001.xml','./msxsdtest/wildCards',invalid,S40),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH001.xml','./msxsdtest/wildCards',invalid,S40),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH002.xsd','./msxsdtest/wildCards',valid),
+ {STRes41,S41} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH002.xsd','./msxsdtest/wildCards',valid),
STResList42 = [STRes41|STResList41],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH002.xml','./msxsdtest/wildCards',invalid,S41),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH002.xml','./msxsdtest/wildCards',invalid,S41),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH003.xsd','./msxsdtest/wildCards',valid),
+ {STRes42,S42} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH003.xsd','./msxsdtest/wildCards',valid),
STResList43 = [STRes42|STResList42],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH003.xml','./msxsdtest/wildCards',valid,S42),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH003.xml','./msxsdtest/wildCards',valid,S42),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH004.xsd','./msxsdtest/wildCards',valid),
+ {STRes43,S43} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH004.xsd','./msxsdtest/wildCards',valid),
STResList44 = [STRes43|STResList43],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH004.xml','./msxsdtest/wildCards',valid,S43),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH004.xml','./msxsdtest/wildCards',valid,S43),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH006.xsd','./msxsdtest/wildCards',valid),
+ {STRes44,S44} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH006.xsd','./msxsdtest/wildCards',valid),
STResList45 = [STRes44|STResList44],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH006.xml','./msxsdtest/wildCards',invalid,S44),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH006.xml','./msxsdtest/wildCards',invalid,S44),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH007.xsd','./msxsdtest/wildCards',valid),
+ {STRes45,S45} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH007.xsd','./msxsdtest/wildCards',valid),
STResList46 = [STRes45|STResList45],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH007.xml','./msxsdtest/wildCards',valid,S45),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH007.xml','./msxsdtest/wildCards',valid,S45),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH008.xsd','./msxsdtest/wildCards',valid),
+ {STRes46,S46} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH008.xsd','./msxsdtest/wildCards',valid),
STResList47 = [STRes46|STResList46],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH008.xml','./msxsdtest/wildCards',invalid,S46),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH008.xml','./msxsdtest/wildCards',invalid,S46),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH009.xsd','./msxsdtest/wildCards',valid),
+ {STRes47,S47} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH009.xsd','./msxsdtest/wildCards',valid),
STResList48 = [STRes47|STResList47],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH009.xml','./msxsdtest/wildCards',valid,S47),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH009.xml','./msxsdtest/wildCards',valid,S47),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH010.xsd','./msxsdtest/wildCards',valid),
+ {STRes48,S48} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildH010.xsd','./msxsdtest/wildCards',valid),
STResList49 = [STRes48|STResList48],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH010.xml','./msxsdtest/wildCards',valid,S48),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildH010.xml','./msxsdtest/wildCards',valid,S48),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI001.xsd','./msxsdtest/wildCards',valid),
+ {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI001.xsd','./msxsdtest/wildCards',valid),
STResList50 = [STRes49|STResList49],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI002.xsd','./msxsdtest/wildCards',invalid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI002.xsd','./msxsdtest/wildCards',invalid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI003.xsd','./msxsdtest/wildCards',invalid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI003.xsd','./msxsdtest/wildCards',invalid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI004.xsd','./msxsdtest/wildCards',valid),
+ {STRes52,S52} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI004.xsd','./msxsdtest/wildCards',valid),
STResList53 = [STRes52|STResList52],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI004.xml','./msxsdtest/wildCards',valid,S52),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI004.xml','./msxsdtest/wildCards',valid,S52),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI005.xsd','./msxsdtest/wildCards',valid),
+ {STRes53,S53} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI005.xsd','./msxsdtest/wildCards',valid),
STResList54 = [STRes53|STResList53],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI005.xml','./msxsdtest/wildCards',valid,S53),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI005.xml','./msxsdtest/wildCards',valid,S53),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI006.xsd','./msxsdtest/wildCards',valid),
+ {STRes54,S54} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI006.xsd','./msxsdtest/wildCards',valid),
STResList55 = [STRes54|STResList54],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI006.xml','./msxsdtest/wildCards',valid,S54),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI006.xml','./msxsdtest/wildCards',valid,S54),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI007.xsd','./msxsdtest/wildCards',valid),
+ {STRes55,S55} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI007.xsd','./msxsdtest/wildCards',valid),
STResList56 = [STRes55|STResList55],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI007.xml','./msxsdtest/wildCards',valid,S55),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI007.xml','./msxsdtest/wildCards',valid,S55),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI008.xsd','./msxsdtest/wildCards',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI008.xsd','./msxsdtest/wildCards',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI009.xsd','./msxsdtest/wildCards',invalid),
+ {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI009.xsd','./msxsdtest/wildCards',invalid),
STResList58 = [STRes57|STResList57],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI010.xsd','./msxsdtest/wildCards',invalid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI010.xsd','./msxsdtest/wildCards',invalid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI011.xsd','./msxsdtest/wildCards',valid),
+ {STRes59,S59} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI011.xsd','./msxsdtest/wildCards',valid),
STResList60 = [STRes59|STResList59],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI011.xml','./msxsdtest/wildCards',valid,S59),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI011.xml','./msxsdtest/wildCards',valid,S59),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI012.xsd','./msxsdtest/wildCards',valid),
+ {STRes60,S60} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI012.xsd','./msxsdtest/wildCards',valid),
STResList61 = [STRes60|STResList60],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI012.xml','./msxsdtest/wildCards',valid,S60),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildI012.xml','./msxsdtest/wildCards',valid,S60),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI013.xsd','./msxsdtest/wildCards',invalid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildI013.xsd','./msxsdtest/wildCards',invalid),
STResList62 = [STRes61|STResList61],
@@ -23506,610 +23494,610 @@ wildGHI(Config) when is_list(Config) ->
wildJKLMNQOP(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ001.xsd','./msxsdtest/wildCards',valid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ001.xsd','./msxsdtest/wildCards',valid),
STResList1 = [STRes0|STResList0],
- ?line {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ002.xsd','./msxsdtest/wildCards',valid),
+ {STRes1,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ002.xsd','./msxsdtest/wildCards',valid),
STResList2 = [STRes1|STResList1],
- ?line {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ003.xsd','./msxsdtest/wildCards',invalid),
+ {STRes2,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ003.xsd','./msxsdtest/wildCards',invalid),
STResList3 = [STRes2|STResList2],
- ?line {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ004.xsd','./msxsdtest/wildCards',invalid),
+ {STRes3,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ004.xsd','./msxsdtest/wildCards',invalid),
STResList4 = [STRes3|STResList3],
- ?line {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ005.xsd','./msxsdtest/wildCards',invalid),
+ {STRes4,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ005.xsd','./msxsdtest/wildCards',invalid),
STResList5 = [STRes4|STResList4],
- ?line {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ006.xsd','./msxsdtest/wildCards',invalid),
+ {STRes5,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ006.xsd','./msxsdtest/wildCards',invalid),
STResList6 = [STRes5|STResList5],
- ?line {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ007.xsd','./msxsdtest/wildCards',invalid),
+ {STRes6,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ007.xsd','./msxsdtest/wildCards',invalid),
STResList7 = [STRes6|STResList6],
- ?line {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ008.xsd','./msxsdtest/wildCards',invalid),
+ {STRes7,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildJ008.xsd','./msxsdtest/wildCards',invalid),
STResList8 = [STRes7|STResList7],
- ?line {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK001.xsd','./msxsdtest/wildCards',valid),
+ {STRes8,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK001.xsd','./msxsdtest/wildCards',valid),
STResList9 = [STRes8|STResList8],
- ?line {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK002.xsd','./msxsdtest/wildCards',invalid),
+ {STRes9,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK002.xsd','./msxsdtest/wildCards',invalid),
STResList10 = [STRes9|STResList9],
- ?line {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK003.xsd','./msxsdtest/wildCards',valid),
+ {STRes10,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK003.xsd','./msxsdtest/wildCards',valid),
STResList11 = [STRes10|STResList10],
- ?line {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK004.xsd','./msxsdtest/wildCards',valid),
+ {STRes11,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK004.xsd','./msxsdtest/wildCards',valid),
STResList12 = [STRes11|STResList11],
- ?line {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK005.xsd','./msxsdtest/wildCards',valid),
+ {STRes12,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK005.xsd','./msxsdtest/wildCards',valid),
STResList13 = [STRes12|STResList12],
- ?line {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK006.xsd','./msxsdtest/wildCards',invalid),
+ {STRes13,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK006.xsd','./msxsdtest/wildCards',invalid),
STResList14 = [STRes13|STResList13],
- ?line {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK007.xsd','./msxsdtest/wildCards',invalid),
+ {STRes14,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK007.xsd','./msxsdtest/wildCards',invalid),
STResList15 = [STRes14|STResList14],
- ?line {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK008.xsd','./msxsdtest/wildCards',valid),
+ {STRes15,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK008.xsd','./msxsdtest/wildCards',valid),
STResList16 = [STRes15|STResList15],
- ?line {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK009.xsd','./msxsdtest/wildCards',valid),
+ {STRes16,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK009.xsd','./msxsdtest/wildCards',valid),
STResList17 = [STRes16|STResList16],
- ?line {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK010.xsd','./msxsdtest/wildCards',valid),
+ {STRes17,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK010.xsd','./msxsdtest/wildCards',valid),
STResList18 = [STRes17|STResList17],
- ?line {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK011.xsd','./msxsdtest/wildCards',valid),
+ {STRes18,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK011.xsd','./msxsdtest/wildCards',valid),
STResList19 = [STRes18|STResList18],
- ?line {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK012.xsd','./msxsdtest/wildCards',valid),
+ {STRes19,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK012.xsd','./msxsdtest/wildCards',valid),
STResList20 = [STRes19|STResList19],
- ?line {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK013.xsd','./msxsdtest/wildCards',valid),
+ {STRes20,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK013.xsd','./msxsdtest/wildCards',valid),
STResList21 = [STRes20|STResList20],
- ?line {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK014.xsd','./msxsdtest/wildCards',valid),
+ {STRes21,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK014.xsd','./msxsdtest/wildCards',valid),
STResList22 = [STRes21|STResList21],
- ?line {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK015.xsd','./msxsdtest/wildCards',valid),
+ {STRes22,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK015.xsd','./msxsdtest/wildCards',valid),
STResList23 = [STRes22|STResList22],
- ?line {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK016.xsd','./msxsdtest/wildCards',valid),
+ {STRes23,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK016.xsd','./msxsdtest/wildCards',valid),
STResList24 = [STRes23|STResList23],
- ?line {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK017.xsd','./msxsdtest/wildCards',valid),
+ {STRes24,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK017.xsd','./msxsdtest/wildCards',valid),
STResList25 = [STRes24|STResList24],
- ?line {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK018.xsd','./msxsdtest/wildCards',valid),
+ {STRes25,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK018.xsd','./msxsdtest/wildCards',valid),
STResList26 = [STRes25|STResList25],
- ?line {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK019.xsd','./msxsdtest/wildCards',valid),
+ {STRes26,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK019.xsd','./msxsdtest/wildCards',valid),
STResList27 = [STRes26|STResList26],
- ?line {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK020.xsd','./msxsdtest/wildCards',invalid),
+ {STRes27,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK020.xsd','./msxsdtest/wildCards',invalid),
STResList28 = [STRes27|STResList27],
- ?line {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK021.xsd','./msxsdtest/wildCards',invalid),
+ {STRes28,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK021.xsd','./msxsdtest/wildCards',invalid),
STResList29 = [STRes28|STResList28],
- ?line {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK022.xsd','./msxsdtest/wildCards',invalid),
+ {STRes29,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK022.xsd','./msxsdtest/wildCards',invalid),
STResList30 = [STRes29|STResList29],
- ?line {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK023.xsd','./msxsdtest/wildCards',invalid),
+ {STRes30,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK023.xsd','./msxsdtest/wildCards',invalid),
STResList31 = [STRes30|STResList30],
- ?line {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK024.xsd','./msxsdtest/wildCards',invalid),
+ {STRes31,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK024.xsd','./msxsdtest/wildCards',invalid),
STResList32 = [STRes31|STResList31],
- ?line {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK025.xsd','./msxsdtest/wildCards',valid),
+ {STRes32,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK025.xsd','./msxsdtest/wildCards',valid),
STResList33 = [STRes32|STResList32],
- ?line {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK026.xsd','./msxsdtest/wildCards',invalid),
+ {STRes33,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK026.xsd','./msxsdtest/wildCards',invalid),
STResList34 = [STRes33|STResList33],
- ?line {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK027.xsd','./msxsdtest/wildCards',invalid),
+ {STRes34,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK027.xsd','./msxsdtest/wildCards',invalid),
STResList35 = [STRes34|STResList34],
- ?line {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK028.xsd','./msxsdtest/wildCards',invalid),
+ {STRes35,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK028.xsd','./msxsdtest/wildCards',invalid),
STResList36 = [STRes35|STResList35],
- ?line {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK029.xsd','./msxsdtest/wildCards',invalid),
+ {STRes36,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK029.xsd','./msxsdtest/wildCards',invalid),
STResList37 = [STRes36|STResList36],
- ?line {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK030.xsd','./msxsdtest/wildCards',valid),
+ {STRes37,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK030.xsd','./msxsdtest/wildCards',valid),
STResList38 = [STRes37|STResList37],
- ?line {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK031.xsd','./msxsdtest/wildCards',valid),
+ {STRes38,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK031.xsd','./msxsdtest/wildCards',valid),
STResList39 = [STRes38|STResList38],
- ?line {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK032.xsd','./msxsdtest/wildCards',valid),
+ {STRes39,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK032.xsd','./msxsdtest/wildCards',valid),
STResList40 = [STRes39|STResList39],
- ?line {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK033.xsd','./msxsdtest/wildCards',valid),
+ {STRes40,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK033.xsd','./msxsdtest/wildCards',valid),
STResList41 = [STRes40|STResList40],
- ?line {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK034.xsd','./msxsdtest/wildCards',valid),
+ {STRes41,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK034.xsd','./msxsdtest/wildCards',valid),
STResList42 = [STRes41|STResList41],
- ?line {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK035.xsd','./msxsdtest/wildCards',valid),
+ {STRes42,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK035.xsd','./msxsdtest/wildCards',valid),
STResList43 = [STRes42|STResList42],
- ?line {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK036.xsd','./msxsdtest/wildCards',valid),
+ {STRes43,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK036.xsd','./msxsdtest/wildCards',valid),
STResList44 = [STRes43|STResList43],
- ?line {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK037.xsd','./msxsdtest/wildCards',valid),
+ {STRes44,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK037.xsd','./msxsdtest/wildCards',valid),
STResList45 = [STRes44|STResList44],
- ?line {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK038.xsd','./msxsdtest/wildCards',invalid),
+ {STRes45,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK038.xsd','./msxsdtest/wildCards',invalid),
STResList46 = [STRes45|STResList45],
- ?line {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK039.xsd','./msxsdtest/wildCards',valid),
+ {STRes46,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK039.xsd','./msxsdtest/wildCards',valid),
STResList47 = [STRes46|STResList46],
- ?line {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK040.xsd','./msxsdtest/wildCards',valid),
+ {STRes47,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK040.xsd','./msxsdtest/wildCards',valid),
STResList48 = [STRes47|STResList47],
- ?line {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK041.xsd','./msxsdtest/wildCards',valid),
+ {STRes48,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildK041.xsd','./msxsdtest/wildCards',valid),
STResList49 = [STRes48|STResList48],
- ?line {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL001.xsd','./msxsdtest/wildCards',invalid),
+ {STRes49,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL001.xsd','./msxsdtest/wildCards',invalid),
STResList50 = [STRes49|STResList49],
- ?line {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL002.xsd','./msxsdtest/wildCards',valid),
+ {STRes50,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL002.xsd','./msxsdtest/wildCards',valid),
STResList51 = [STRes50|STResList50],
- ?line {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL003.xsd','./msxsdtest/wildCards',valid),
+ {STRes51,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL003.xsd','./msxsdtest/wildCards',valid),
STResList52 = [STRes51|STResList51],
- ?line {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL004.xsd','./msxsdtest/wildCards',valid),
+ {STRes52,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL004.xsd','./msxsdtest/wildCards',valid),
STResList53 = [STRes52|STResList52],
- ?line {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL005.xsd','./msxsdtest/wildCards',invalid),
+ {STRes53,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL005.xsd','./msxsdtest/wildCards',invalid),
STResList54 = [STRes53|STResList53],
- ?line {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL006.xsd','./msxsdtest/wildCards',invalid),
+ {STRes54,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL006.xsd','./msxsdtest/wildCards',invalid),
STResList55 = [STRes54|STResList54],
- ?line {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL007.xsd','./msxsdtest/wildCards',invalid),
+ {STRes55,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL007.xsd','./msxsdtest/wildCards',invalid),
STResList56 = [STRes55|STResList55],
- ?line {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL008.xsd','./msxsdtest/wildCards',invalid),
+ {STRes56,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL008.xsd','./msxsdtest/wildCards',invalid),
STResList57 = [STRes56|STResList56],
- ?line {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL009.xsd','./msxsdtest/wildCards',invalid),
+ {STRes57,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildL009.xsd','./msxsdtest/wildCards',invalid),
STResList58 = [STRes57|STResList57],
- ?line {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildM001.xsd','./msxsdtest/wildCards',valid),
+ {STRes58,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildM001.xsd','./msxsdtest/wildCards',valid),
STResList59 = [STRes58|STResList58],
- ?line {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildM002.xsd','./msxsdtest/wildCards',invalid),
+ {STRes59,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildM002.xsd','./msxsdtest/wildCards',invalid),
STResList60 = [STRes59|STResList59],
- ?line {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN001.xsd','./msxsdtest/wildCards',invalid),
+ {STRes60,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN001.xsd','./msxsdtest/wildCards',invalid),
STResList61 = [STRes60|STResList60],
- ?line {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN002.xsd','./msxsdtest/wildCards',valid),
+ {STRes61,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN002.xsd','./msxsdtest/wildCards',valid),
STResList62 = [STRes61|STResList61],
- ?line {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN003.xsd','./msxsdtest/wildCards',valid),
+ {STRes62,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN003.xsd','./msxsdtest/wildCards',valid),
STResList63 = [STRes62|STResList62],
- ?line {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN004.xsd','./msxsdtest/wildCards',valid),
+ {STRes63,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN004.xsd','./msxsdtest/wildCards',valid),
STResList64 = [STRes63|STResList63],
- ?line {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN005.xsd','./msxsdtest/wildCards',valid),
+ {STRes64,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN005.xsd','./msxsdtest/wildCards',valid),
STResList65 = [STRes64|STResList64],
- ?line {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN006.xsd','./msxsdtest/wildCards',invalid),
+ {STRes65,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN006.xsd','./msxsdtest/wildCards',invalid),
STResList66 = [STRes65|STResList65],
- ?line {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN007.xsd','./msxsdtest/wildCards',invalid),
+ {STRes66,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN007.xsd','./msxsdtest/wildCards',invalid),
STResList67 = [STRes66|STResList66],
- ?line {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN008.xsd','./msxsdtest/wildCards',invalid),
+ {STRes67,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN008.xsd','./msxsdtest/wildCards',invalid),
STResList68 = [STRes67|STResList67],
- ?line {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN009.xsd','./msxsdtest/wildCards',invalid),
+ {STRes68,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN009.xsd','./msxsdtest/wildCards',invalid),
STResList69 = [STRes68|STResList68],
- ?line {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN010.xsd','./msxsdtest/wildCards',invalid),
+ {STRes69,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN010.xsd','./msxsdtest/wildCards',invalid),
STResList70 = [STRes69|STResList69],
- ?line {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN011.xsd','./msxsdtest/wildCards',valid),
+ {STRes70,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN011.xsd','./msxsdtest/wildCards',valid),
STResList71 = [STRes70|STResList70],
- ?line {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN012.xsd','./msxsdtest/wildCards',invalid),
+ {STRes71,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN012.xsd','./msxsdtest/wildCards',invalid),
STResList72 = [STRes71|STResList71],
- ?line {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN013.xsd','./msxsdtest/wildCards',invalid),
+ {STRes72,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN013.xsd','./msxsdtest/wildCards',invalid),
STResList73 = [STRes72|STResList72],
- ?line {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN014.xsd','./msxsdtest/wildCards',invalid),
+ {STRes73,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN014.xsd','./msxsdtest/wildCards',invalid),
STResList74 = [STRes73|STResList73],
- ?line {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN015.xsd','./msxsdtest/wildCards',invalid),
+ {STRes74,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN015.xsd','./msxsdtest/wildCards',invalid),
STResList75 = [STRes74|STResList74],
- ?line {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN016.xsd','./msxsdtest/wildCards',invalid),
+ {STRes75,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN016.xsd','./msxsdtest/wildCards',invalid),
STResList76 = [STRes75|STResList75],
- ?line {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN017.xsd','./msxsdtest/wildCards',valid),
+ {STRes76,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN017.xsd','./msxsdtest/wildCards',valid),
STResList77 = [STRes76|STResList76],
- ?line {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN018.xsd','./msxsdtest/wildCards',invalid),
+ {STRes77,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN018.xsd','./msxsdtest/wildCards',invalid),
STResList78 = [STRes77|STResList77],
- ?line {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN019.xsd','./msxsdtest/wildCards',valid),
+ {STRes78,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN019.xsd','./msxsdtest/wildCards',valid),
STResList79 = [STRes78|STResList78],
- ?line {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN020.xsd','./msxsdtest/wildCards',valid),
+ {STRes79,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildN020.xsd','./msxsdtest/wildCards',valid),
STResList80 = [STRes79|STResList79],
- ?line {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildQ001.xsd','./msxsdtest/wildCards',invalid),
+ {STRes80,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildQ001.xsd','./msxsdtest/wildCards',invalid),
STResList81 = [STRes80|STResList80],
- ?line {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildQ002.xsd','./msxsdtest/wildCards',invalid),
+ {STRes81,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildQ002.xsd','./msxsdtest/wildCards',invalid),
STResList82 = [STRes81|STResList81],
- ?line {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildQ003.xsd','./msxsdtest/wildCards',invalid),
+ {STRes82,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildQ003.xsd','./msxsdtest/wildCards',invalid),
STResList83 = [STRes82|STResList82],
- ?line {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildQ004.xsd','./msxsdtest/wildCards',invalid),
+ {STRes83,_} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildQ004.xsd','./msxsdtest/wildCards',invalid),
STResList84 = [STRes83|STResList83],
- ?line {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO001.xsd','./msxsdtest/wildCards',valid),
+ {STRes84,S84} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO001.xsd','./msxsdtest/wildCards',valid),
STResList85 = [STRes84|STResList84],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO001.xml','./msxsdtest/wildCards',valid,S84),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO001.xml','./msxsdtest/wildCards',valid,S84),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO002.xsd','./msxsdtest/wildCards',valid),
+ {STRes85,S85} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO002.xsd','./msxsdtest/wildCards',valid),
STResList86 = [STRes85|STResList85],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO002.xml','./msxsdtest/wildCards',valid,S85),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO002.xml','./msxsdtest/wildCards',valid,S85),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO003.xsd','./msxsdtest/wildCards',valid),
+ {STRes86,S86} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO003.xsd','./msxsdtest/wildCards',valid),
STResList87 = [STRes86|STResList86],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO003.xml','./msxsdtest/wildCards',invalid,S86),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO003.xml','./msxsdtest/wildCards',invalid,S86),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO004.xsd','./msxsdtest/wildCards',valid),
+ {STRes87,S87} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO004.xsd','./msxsdtest/wildCards',valid),
STResList88 = [STRes87|STResList87],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO004.xml','./msxsdtest/wildCards',valid,S87),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO004.xml','./msxsdtest/wildCards',valid,S87),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO005.xsd','./msxsdtest/wildCards',valid),
+ {STRes88,S88} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO005.xsd','./msxsdtest/wildCards',valid),
STResList89 = [STRes88|STResList88],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO005.xml','./msxsdtest/wildCards',valid,S88),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO005.xml','./msxsdtest/wildCards',valid,S88),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO006.xsd','./msxsdtest/wildCards',valid),
+ {STRes89,S89} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO006.xsd','./msxsdtest/wildCards',valid),
STResList90 = [STRes89|STResList89],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO006.xml','./msxsdtest/wildCards',invalid,S89),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO006.xml','./msxsdtest/wildCards',invalid,S89),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO007.xsd','./msxsdtest/wildCards',valid),
+ {STRes90,S90} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO007.xsd','./msxsdtest/wildCards',valid),
STResList91 = [STRes90|STResList90],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO007.xml','./msxsdtest/wildCards',valid,S90),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO007.xml','./msxsdtest/wildCards',valid,S90),
ITResList7 = [ITRes6|ITResList6],
- ?line {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO008.xsd','./msxsdtest/wildCards',valid),
+ {STRes91,S91} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO008.xsd','./msxsdtest/wildCards',valid),
STResList92 = [STRes91|STResList91],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO008.xml','./msxsdtest/wildCards',invalid,S91),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO008.xml','./msxsdtest/wildCards',invalid,S91),
ITResList8 = [ITRes7|ITResList7],
- ?line {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO009.xsd','./msxsdtest/wildCards',valid),
+ {STRes92,S92} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO009.xsd','./msxsdtest/wildCards',valid),
STResList93 = [STRes92|STResList92],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO009.xml','./msxsdtest/wildCards',invalid,S92),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO009.xml','./msxsdtest/wildCards',invalid,S92),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO010.xsd','./msxsdtest/wildCards',valid),
+ {STRes93,S93} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO010.xsd','./msxsdtest/wildCards',valid),
STResList94 = [STRes93|STResList93],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO010.xml','./msxsdtest/wildCards',valid,S93),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO010.xml','./msxsdtest/wildCards',valid,S93),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO011.xsd','./msxsdtest/wildCards',valid),
+ {STRes94,S94} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO011.xsd','./msxsdtest/wildCards',valid),
STResList95 = [STRes94|STResList94],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO011.xml','./msxsdtest/wildCards',invalid,S94),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO011.xml','./msxsdtest/wildCards',invalid,S94),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO012.xsd','./msxsdtest/wildCards',valid),
+ {STRes95,S95} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO012.xsd','./msxsdtest/wildCards',valid),
STResList96 = [STRes95|STResList95],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO012.xml','./msxsdtest/wildCards',valid,S95),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO012.xml','./msxsdtest/wildCards',valid,S95),
ITResList12 = [ITRes11|ITResList11],
- ?line {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO013.xsd','./msxsdtest/wildCards',valid),
+ {STRes96,S96} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO013.xsd','./msxsdtest/wildCards',valid),
STResList97 = [STRes96|STResList96],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO013.xml','./msxsdtest/wildCards',valid,S96),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO013.xml','./msxsdtest/wildCards',valid,S96),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO014.xsd','./msxsdtest/wildCards',valid),
+ {STRes97,S97} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO014.xsd','./msxsdtest/wildCards',valid),
STResList98 = [STRes97|STResList97],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO014.xml','./msxsdtest/wildCards',invalid,S97),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO014.xml','./msxsdtest/wildCards',invalid,S97),
ITResList14 = [ITRes13|ITResList13],
- ?line {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO015.xsd','./msxsdtest/wildCards',valid),
+ {STRes98,S98} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO015.xsd','./msxsdtest/wildCards',valid),
STResList99 = [STRes98|STResList98],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO015.xml','./msxsdtest/wildCards',valid,S98),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO015.xml','./msxsdtest/wildCards',valid,S98),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO016.xsd','./msxsdtest/wildCards',valid),
+ {STRes99,S99} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO016.xsd','./msxsdtest/wildCards',valid),
STResList100 = [STRes99|STResList99],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO016.xml','./msxsdtest/wildCards',valid,S99),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO016.xml','./msxsdtest/wildCards',valid,S99),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO017.xsd','./msxsdtest/wildCards',valid),
+ {STRes100,S100} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO017.xsd','./msxsdtest/wildCards',valid),
STResList101 = [STRes100|STResList100],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO017.xml','./msxsdtest/wildCards',invalid,S100),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO017.xml','./msxsdtest/wildCards',invalid,S100),
ITResList17 = [ITRes16|ITResList16],
- ?line {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO018.xsd','./msxsdtest/wildCards',valid),
+ {STRes101,S101} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO018.xsd','./msxsdtest/wildCards',valid),
STResList102 = [STRes101|STResList101],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO018.xml','./msxsdtest/wildCards',valid,S101),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO018.xml','./msxsdtest/wildCards',valid,S101),
ITResList18 = [ITRes17|ITResList17],
- ?line {STRes102,S102} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO019.xsd','./msxsdtest/wildCards',valid),
+ {STRes102,S102} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO019.xsd','./msxsdtest/wildCards',valid),
STResList103 = [STRes102|STResList102],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO019.xml','./msxsdtest/wildCards',valid,S102),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO019.xml','./msxsdtest/wildCards',valid,S102),
ITResList19 = [ITRes18|ITResList18],
- ?line {STRes103,S103} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO020.xsd','./msxsdtest/wildCards',valid),
+ {STRes103,S103} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO020.xsd','./msxsdtest/wildCards',valid),
STResList104 = [STRes103|STResList103],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO020.xml','./msxsdtest/wildCards',invalid,S103),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO020.xml','./msxsdtest/wildCards',invalid,S103),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO021.xsd','./msxsdtest/wildCards',valid),
+ {STRes104,S104} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO021.xsd','./msxsdtest/wildCards',valid),
STResList105 = [STRes104|STResList104],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO021.xml','./msxsdtest/wildCards',valid,S104),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO021.xml','./msxsdtest/wildCards',valid,S104),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO022.xsd','./msxsdtest/wildCards',valid),
+ {STRes105,S105} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO022.xsd','./msxsdtest/wildCards',valid),
STResList106 = [STRes105|STResList105],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO022.xml','./msxsdtest/wildCards',invalid,S105),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO022.xml','./msxsdtest/wildCards',invalid,S105),
ITResList22 = [ITRes21|ITResList21],
- ?line {STRes106,S106} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO023.xsd','./msxsdtest/wildCards',valid),
+ {STRes106,S106} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO023.xsd','./msxsdtest/wildCards',valid),
STResList107 = [STRes106|STResList106],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO023.xml','./msxsdtest/wildCards',valid,S106),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO023.xml','./msxsdtest/wildCards',valid,S106),
ITResList23 = [ITRes22|ITResList22],
- ?line {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO024.xsd','./msxsdtest/wildCards',valid),
+ {STRes107,S107} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO024.xsd','./msxsdtest/wildCards',valid),
STResList108 = [STRes107|STResList107],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO024.xml','./msxsdtest/wildCards',invalid,S107),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO024.xml','./msxsdtest/wildCards',invalid,S107),
ITResList24 = [ITRes23|ITResList23],
- ?line {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO025.xsd','./msxsdtest/wildCards',valid),
+ {STRes108,S108} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO025.xsd','./msxsdtest/wildCards',valid),
STResList109 = [STRes108|STResList108],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO025.xml','./msxsdtest/wildCards',invalid,S108),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO025.xml','./msxsdtest/wildCards',invalid,S108),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO026.xsd','./msxsdtest/wildCards',valid),
+ {STRes109,S109} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO026.xsd','./msxsdtest/wildCards',valid),
STResList110 = [STRes109|STResList109],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO026.xml','./msxsdtest/wildCards',valid,S109),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO026.xml','./msxsdtest/wildCards',valid,S109),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO027.xsd','./msxsdtest/wildCards',valid),
+ {STRes110,S110} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO027.xsd','./msxsdtest/wildCards',valid),
STResList111 = [STRes110|STResList110],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO027.xml','./msxsdtest/wildCards',valid,S110),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO027.xml','./msxsdtest/wildCards',valid,S110),
ITResList27 = [ITRes26|ITResList26],
- ?line {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO028.xsd','./msxsdtest/wildCards',valid),
+ {STRes111,S111} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO028.xsd','./msxsdtest/wildCards',valid),
STResList112 = [STRes111|STResList111],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO028.xml','./msxsdtest/wildCards',invalid,S111),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO028.xml','./msxsdtest/wildCards',invalid,S111),
ITResList28 = [ITRes27|ITResList27],
- ?line {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO029.xsd','./msxsdtest/wildCards',valid),
+ {STRes112,S112} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO029.xsd','./msxsdtest/wildCards',valid),
STResList113 = [STRes112|STResList112],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO029.xml','./msxsdtest/wildCards',valid,S112),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO029.xml','./msxsdtest/wildCards',valid,S112),
ITResList29 = [ITRes28|ITResList28],
- ?line {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO030.xsd','./msxsdtest/wildCards',valid),
+ {STRes113,S113} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO030.xsd','./msxsdtest/wildCards',valid),
STResList114 = [STRes113|STResList113],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO030.xml','./msxsdtest/wildCards',invalid,S113),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO030.xml','./msxsdtest/wildCards',invalid,S113),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO031.xsd','./msxsdtest/wildCards',valid),
+ {STRes114,S114} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO031.xsd','./msxsdtest/wildCards',valid),
STResList115 = [STRes114|STResList114],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO031.xml','./msxsdtest/wildCards',valid,S114),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO031.xml','./msxsdtest/wildCards',valid,S114),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO032.xsd','./msxsdtest/wildCards',valid),
+ {STRes115,S115} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO032.xsd','./msxsdtest/wildCards',valid),
STResList116 = [STRes115|STResList115],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO032.xml','./msxsdtest/wildCards',invalid,S115),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO032.xml','./msxsdtest/wildCards',invalid,S115),
ITResList32 = [ITRes31|ITResList31],
- ?line {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO033.xsd','./msxsdtest/wildCards',valid),
+ {STRes116,S116} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO033.xsd','./msxsdtest/wildCards',valid),
STResList117 = [STRes116|STResList116],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO033.xml','./msxsdtest/wildCards',valid,S116),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO033.xml','./msxsdtest/wildCards',valid,S116),
ITResList33 = [ITRes32|ITResList32],
- ?line {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO034.xsd','./msxsdtest/wildCards',valid),
+ {STRes117,S117} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO034.xsd','./msxsdtest/wildCards',valid),
STResList118 = [STRes117|STResList117],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO034.xml','./msxsdtest/wildCards',invalid,S117),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO034.xml','./msxsdtest/wildCards',invalid,S117),
ITResList34 = [ITRes33|ITResList33],
- ?line {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO035.xsd','./msxsdtest/wildCards',valid),
+ {STRes118,S118} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO035.xsd','./msxsdtest/wildCards',valid),
STResList119 = [STRes118|STResList118],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO035.xml','./msxsdtest/wildCards',invalid,S118),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO035.xml','./msxsdtest/wildCards',invalid,S118),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO037.xsd','./msxsdtest/wildCards',valid),
+ {STRes119,S119} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO037.xsd','./msxsdtest/wildCards',valid),
STResList120 = [STRes119|STResList119],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO037.xml','./msxsdtest/wildCards',valid,S119),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO037.xml','./msxsdtest/wildCards',valid,S119),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes120,S120} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO038.xsd','./msxsdtest/wildCards',valid),
+ {STRes120,S120} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO038.xsd','./msxsdtest/wildCards',valid),
STResList121 = [STRes120|STResList120],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO038.xml','./msxsdtest/wildCards',valid,S120),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO038.xml','./msxsdtest/wildCards',valid,S120),
ITResList37 = [ITRes36|ITResList36],
- ?line {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO039.xsd','./msxsdtest/wildCards',valid),
+ {STRes121,S121} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO039.xsd','./msxsdtest/wildCards',valid),
STResList122 = [STRes121|STResList121],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO039.xml','./msxsdtest/wildCards',invalid,S121),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO039.xml','./msxsdtest/wildCards',invalid,S121),
ITResList38 = [ITRes37|ITResList37],
- ?line {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO040.xsd','./msxsdtest/wildCards',valid),
+ {STRes122,S122} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildO040.xsd','./msxsdtest/wildCards',valid),
STResList123 = [STRes122|STResList122],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO040.xml','./msxsdtest/wildCards',valid,S122),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildO040.xml','./msxsdtest/wildCards',valid,S122),
ITResList39 = [ITRes38|ITResList38],
- ?line {STRes123,S123} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP001.xsd','./msxsdtest/wildCards',valid),
+ {STRes123,S123} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP001.xsd','./msxsdtest/wildCards',valid),
STResList124 = [STRes123|STResList123],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP001.xml','./msxsdtest/wildCards',valid,S123),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP001.xml','./msxsdtest/wildCards',valid,S123),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP002.xsd','./msxsdtest/wildCards',valid),
+ {STRes124,S124} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP002.xsd','./msxsdtest/wildCards',valid),
STResList125 = [STRes124|STResList124],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP002.xml','./msxsdtest/wildCards',invalid,S124),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP002.xml','./msxsdtest/wildCards',invalid,S124),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes125,S125} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP003.xsd','./msxsdtest/wildCards',valid),
+ {STRes125,S125} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP003.xsd','./msxsdtest/wildCards',valid),
STResList126 = [STRes125|STResList125],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP003.xml','./msxsdtest/wildCards',valid,S125),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP003.xml','./msxsdtest/wildCards',valid,S125),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP004.xsd','./msxsdtest/wildCards',valid),
+ {STRes126,S126} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP004.xsd','./msxsdtest/wildCards',valid),
STResList127 = [STRes126|STResList126],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP004.xml','./msxsdtest/wildCards',valid,S126),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP004.xml','./msxsdtest/wildCards',valid,S126),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP005.xsd','./msxsdtest/wildCards',valid),
+ {STRes127,S127} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP005.xsd','./msxsdtest/wildCards',valid),
STResList128 = [STRes127|STResList127],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP005.xml','./msxsdtest/wildCards',valid,S127),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP005.xml','./msxsdtest/wildCards',valid,S127),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP006.xsd','./msxsdtest/wildCards',valid),
+ {STRes128,S128} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildP006.xsd','./msxsdtest/wildCards',valid),
STResList129 = [STRes128|STResList128],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP006.xml','./msxsdtest/wildCards',valid,S128),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildP006.xml','./msxsdtest/wildCards',valid,S128),
ITResList45 = [ITRes44|ITResList44],
@@ -24120,12 +24108,10 @@ wildJKLMNQOP(Config) when is_list(Config) ->
wildZ(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildZ001.xsd','./msxsdtest/wildCards',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./msxsdtest/wildCards/wildZ001.xsd','./msxsdtest/wildCards',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildZ001.xml','./msxsdtest/wildCards',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./msxsdtest/wildCards/wildZ001.xml','./msxsdtest/wildCards',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
-
xmerl_xsd_lib:compare_test_results(Config,STResList1,ITResList1).
-
diff --git a/lib/xmerl/test/xmerl_xsd_NIST2002-01-16_SUITE.erl b/lib/xmerl/test/xmerl_xsd_NIST2002-01-16_SUITE.erl
index 11f1498f07..d9df8687d9 100644
--- a/lib/xmerl/test/xmerl_xsd_NIST2002-01-16_SUITE.erl
+++ b/lib/xmerl/test/xmerl_xsd_NIST2002-01-16_SUITE.erl
@@ -54,406 +54,394 @@ all() ->
'NISTSchema-unsignedByte', 'NISTSchema-unsignedInt',
'NISTSchema-unsignedLong', 'NISTSchema-unsignedShort'].
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
+suite() ->
+ [{timetrap,{minutes,3}}].
%% initialization before the test suite
init_per_suite(Config) ->
- Dog=test_server:timetrap({minutes,10}),
- xmerl_xsd_lib:unpack(Config,nist),
- {ok,LogFile} = xmerl_xsd_lib:create_error_log_file(Config,nist),
- test_server:timetrap_cancel(Dog),
- [{suite,nist},{xmerl_error_log,LogFile}|Config].
+ ct:timetrap({minutes,10}),
+ xmerl_xsd_lib:unpack(Config,nist),
+ {ok,LogFile} = xmerl_xsd_lib:create_error_log_file(Config,nist),
+ [{suite,nist},{xmerl_error_log,LogFile}|Config].
end_per_suite(Config) ->
- xmerl_xsd_lib:rmdir(Config,nist),
- xmerl_xsd_lib:close_error_log_file(Config),
- ok.
+ xmerl_xsd_lib:rmdir(Config,nist),
+ xmerl_xsd_lib:close_error_log_file(Config),
+ ok.
%% initialization before each testcase
init_per_testcase(TestCase,Config) ->
- Dog=test_server:timetrap({minutes,3}),
- [{testcase,TestCase},{watchdog, Dog}|Config].
+ [{testcase,TestCase}|Config].
%% clean up after each testcase
-end_per_testcase(_Func,Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
+end_per_testcase(_Func,_Config) ->
+ ok.
%% Data type derived by restriction of anyURI by facets
'NISTSchema-anyURI'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./NISTTestsAll/NISTSchema-anyURI-maxLength-1.xsd','./NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./NISTTestsAll/NISTSchema-anyURI-maxLength-1.xsd','./NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList44 = [ITRes43|ITResList43],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList49 = [ITRes48|ITResList48],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList54 = [ITRes53|ITResList53],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList59 = [ITRes58|ITResList58],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-anyURI-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-anyURI-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList129 = [ITRes128|ITResList128],
@@ -464,368 +452,368 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-base64Binary'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-base64Binary-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList129 = [ITRes128|ITResList128],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-base64Binary-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList130 = [ITRes129|ITResList129],
@@ -836,42 +824,42 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-boolean'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList3 = [ITRes2|ITResList2],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList4 = [ITRes3|ITResList3],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-boolean-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-boolean-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList9 = [ITRes8|ITResList8],
@@ -882,462 +870,462 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-byte'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-byte-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-byte-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
@@ -1348,406 +1336,406 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-date-'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-date-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-date-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
@@ -1758,406 +1746,406 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-dateTime'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-dateTime-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-dateTime-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
@@ -2168,546 +2156,546 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-decimal'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-fractionDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-fractionDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
- ?line {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes37,S37} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList38 = [STRes37|STResList37],
- ?line ITRes169 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S37),
+ ITRes169 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S37),
ITResList170 = [ITRes169|ITResList169],
- ?line ITRes170 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S37),
+ ITRes170 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S37),
ITResList171 = [ITRes170|ITResList170],
- ?line ITRes171 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S37),
+ ITRes171 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S37),
ITResList172 = [ITRes171|ITResList171],
- ?line ITRes172 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S37),
+ ITRes172 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S37),
ITResList173 = [ITRes172|ITResList172],
- ?line ITRes173 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S37),
+ ITRes173 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S37),
ITResList174 = [ITRes173|ITResList173],
- ?line {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes38,S38} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList39 = [STRes38|STResList38],
- ?line ITRes174 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S38),
+ ITRes174 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S38),
ITResList175 = [ITRes174|ITResList174],
- ?line ITRes175 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S38),
+ ITRes175 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S38),
ITResList176 = [ITRes175|ITResList175],
- ?line ITRes176 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S38),
+ ITRes176 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S38),
ITResList177 = [ITRes176|ITResList176],
- ?line ITRes177 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S38),
+ ITRes177 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S38),
ITResList178 = [ITRes177|ITResList177],
- ?line ITRes178 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S38),
+ ITRes178 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S38),
ITResList179 = [ITRes178|ITResList178],
- ?line {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes39,S39} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList40 = [STRes39|STResList39],
- ?line ITRes179 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S39),
+ ITRes179 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S39),
ITResList180 = [ITRes179|ITResList179],
- ?line ITRes180 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S39),
+ ITRes180 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S39),
ITResList181 = [ITRes180|ITResList180],
- ?line ITRes181 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S39),
+ ITRes181 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S39),
ITResList182 = [ITRes181|ITResList181],
- ?line ITRes182 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S39),
+ ITRes182 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S39),
ITResList183 = [ITRes182|ITResList182],
- ?line ITRes183 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S39),
+ ITRes183 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S39),
ITResList184 = [ITRes183|ITResList183],
- ?line {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes40,S40} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-decimal-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList41 = [STRes40|STResList40],
- ?line ITRes184 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S40),
+ ITRes184 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S40),
ITResList185 = [ITRes184|ITResList184],
- ?line ITRes185 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S40),
+ ITRes185 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S40),
ITResList186 = [ITRes185|ITResList185],
- ?line ITRes186 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S40),
+ ITRes186 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S40),
ITResList187 = [ITRes186|ITResList186],
- ?line ITRes187 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S40),
+ ITRes187 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S40),
ITResList188 = [ITRes187|ITResList187],
- ?line ITRes188 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S40),
+ ITRes188 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-decimal-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S40),
ITResList189 = [ITRes188|ITResList188],
@@ -2718,406 +2706,406 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-double'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-double-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-double-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
@@ -3128,406 +3116,406 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-duration'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-duration-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-duration-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
@@ -3538,406 +3526,406 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-float'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-float-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-float-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
@@ -3948,398 +3936,398 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-gDay'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList129 = [ITRes128|ITResList128],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gDay-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList134 = [ITRes133|ITResList133],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gDay-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
@@ -4350,406 +4338,406 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-gMonth-'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonth-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonth-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
@@ -4760,406 +4748,406 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-gMonthDay'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gMonthDay-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gMonthDay-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
@@ -5170,398 +5158,398 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-gYear-'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList129 = [ITRes128|ITResList128],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYear-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList134 = [ITRes133|ITResList133],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYear-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
@@ -5572,406 +5560,406 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-gYearMonth'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-gYearMonth-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-gYearMonth-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
@@ -5982,368 +5970,368 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-hexBinary'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-hexBinary-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList129 = [ITRes128|ITResList128],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-hexBinary-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList130 = [ITRes129|ITResList129],
@@ -6354,368 +6342,368 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-ID'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-ID-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList129 = [ITRes128|ITResList128],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-ID-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList130 = [ITRes129|ITResList129],
@@ -6726,490 +6714,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-int-'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-int-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-int-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -7220,490 +7208,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-integer'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-integer-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-integer-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -7714,360 +7702,360 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-language'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList10 = [ITRes9|ITResList9],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList15 = [ITRes14|ITResList14],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList20 = [ITRes19|ITResList19],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList51 = [ITRes50|ITResList50],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList56 = [ITRes55|ITResList55],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList61 = [ITRes60|ITResList60],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList66 = [ITRes65|ITResList65],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList71 = [ITRes70|ITResList70],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList76 = [ITRes75|ITResList75],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList81 = [ITRes80|ITResList80],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList86 = [ITRes85|ITResList85],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList91 = [ITRes90|ITResList90],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList96 = [ITRes95|ITResList95],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList101 = [ITRes100|ITResList100],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList106 = [ITRes105|ITResList105],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList111 = [ITRes110|ITResList110],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList116 = [ITRes115|ITResList115],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList121 = [ITRes120|ITResList120],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-language-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-language-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList126 = [ITRes125|ITResList125],
@@ -8078,490 +8066,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-long'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-long-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-long-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -8572,368 +8560,368 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-Name'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-Name-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList129 = [ITRes128|ITResList128],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-Name-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList130 = [ITRes129|ITResList129],
@@ -8944,368 +8932,368 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-NCName'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NCName-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList129 = [ITRes128|ITResList128],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NCName-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList130 = [ITRes129|ITResList129],
@@ -9316,490 +9304,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-negativeInteger'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-negativeInteger-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-negativeInteger-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -9810,364 +9798,364 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-NMTOKEN'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList118 = [ITRes117|ITResList117],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList123 = [ITRes122|ITResList122],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-NMTOKEN-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-NMTOKEN-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList128 = [ITRes127|ITResList127],
@@ -10178,490 +10166,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-nonNegativeInteger'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonNegativeInteger-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonNegativeInteger-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -10672,490 +10660,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-nonPositiveInteger'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-nonPositiveInteger-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-nonPositiveInteger-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -11166,366 +11154,366 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-normalizedString'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList10 = [ITRes9|ITResList9],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList15 = [ITRes14|ITResList14],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList20 = [ITRes19|ITResList19],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList117 = [ITRes116|ITResList116],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList122 = [ITRes121|ITResList121],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-whiteSpace-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-normalizedString-whiteSpace-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-normalizedString-whiteSpace-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList127 = [ITRes126|ITResList126],
@@ -11536,490 +11524,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-positiveInteger'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-positiveInteger-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-positiveInteger-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -12030,368 +12018,368 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-QName'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList25 = [ITRes24|ITResList24],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList30 = [ITRes29|ITResList29],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList35 = [ITRes34|ITResList34],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList40 = [ITRes39|ITResList39],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList45 = [ITRes44|ITResList44],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList50 = [ITRes49|ITResList49],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-2.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-3.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-4.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-1-5.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList55 = [ITRes54|ITResList54],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList60 = [ITRes59|ITResList59],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList65 = [ITRes64|ITResList64],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList70 = [ITRes69|ITResList69],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList75 = [ITRes74|ITResList74],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList80 = [ITRes79|ITResList79],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList85 = [ITRes84|ITResList84],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList90 = [ITRes89|ITResList89],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList95 = [ITRes94|ITResList94],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList100 = [ITRes99|ITResList99],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList105 = [ITRes104|ITResList104],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList110 = [ITRes109|ITResList109],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList115 = [ITRes114|ITResList114],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList120 = [ITRes119|ITResList119],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList125 = [ITRes124|ITResList124],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-QName-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList129 = [ITRes128|ITResList128],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-QName-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList130 = [ITRes129|ITResList129],
@@ -12402,490 +12390,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-short'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-short-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-short-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -12896,380 +12884,380 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-string'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList10 = [ITRes9|ITResList9],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList15 = [ITRes14|ITResList14],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList20 = [ITRes19|ITResList19],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList117 = [ITRes116|ITResList116],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList122 = [ITRes121|ITResList121],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-whiteSpace-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-whiteSpace-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList124 = [ITRes123|ITResList123],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList127 = [ITRes126|ITResList126],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-whiteSpace-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-string-whiteSpace-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList129 = [ITRes128|ITResList128],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-string-whiteSpace-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList132 = [ITRes131|ITResList131],
@@ -13280,406 +13268,406 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-time'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-time-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-time-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
@@ -13690,352 +13678,352 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-token'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList10 = [ITRes9|ITResList9],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList15 = [ITRes14|ITResList14],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-maxLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-2.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-3.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-4.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList20 = [ITRes19|ITResList19],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-maxLength-5-5.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-minLength-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-2.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList43 = [ITRes42|ITResList42],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-3.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-4.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-minLength-5-5.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList46 = [ITRes45|ITResList45],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList47 = [ITRes46|ITResList46],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList52 = [ITRes51|ITResList51],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList57 = [ITRes56|ITResList56],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList62 = [ITRes61|ITResList61],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-length-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList64 = [ITRes63|ITResList63],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-length-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList67 = [ITRes66|ITResList66],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList69 = [ITRes68|ITResList68],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList72 = [ITRes71|ITResList71],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList74 = [ITRes73|ITResList73],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList77 = [ITRes76|ITResList76],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList79 = [ITRes78|ITResList78],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList82 = [ITRes81|ITResList81],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList84 = [ITRes83|ITResList83],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList87 = [ITRes86|ITResList86],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList89 = [ITRes88|ITResList88],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList92 = [ITRes91|ITResList91],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList94 = [ITRes93|ITResList93],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList97 = [ITRes96|ITResList96],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList99 = [ITRes98|ITResList98],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList102 = [ITRes101|ITResList101],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList104 = [ITRes103|ITResList103],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList107 = [ITRes106|ITResList106],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList109 = [ITRes108|ITResList108],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList112 = [ITRes111|ITResList111],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList114 = [ITRes113|ITResList113],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList117 = [ITRes116|ITResList116],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-token-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList119 = [ITRes118|ITResList118],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-token-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList122 = [ITRes121|ITResList121],
@@ -14046,434 +14034,434 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-unsignedByte'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedByte-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedByte-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
@@ -14484,490 +14472,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-unsignedInt'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedInt-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedInt-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -14978,490 +14966,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-unsignedLong'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedLong-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedLong-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
@@ -15472,492 +15460,490 @@ end_per_testcase(_Func,Config) ->
'NISTSchema-unsignedShort'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes1,S1} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList2 = [STRes1|STResList1],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S1),
ITResList10 = [ITRes9|ITResList9],
- ?line {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes2,S2} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList3 = [STRes2|STResList2],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S2),
ITResList15 = [ITRes14|ITResList14],
- ?line {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes3,S3} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList4 = [STRes3|STResList3],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S3),
ITResList20 = [ITRes19|ITResList19],
- ?line {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes4,S4} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList5 = [STRes4|STResList4],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S4),
ITResList21 = [ITRes20|ITResList20],
- ?line {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes5,S5} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList6 = [STRes5|STResList5],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-2.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-3.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-4.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-1-5.xml','./nisttest/NISTTestsAll',valid,S5),
ITResList26 = [ITRes25|ITResList25],
- ?line {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes6,S6} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList7 = [STRes6|STResList6],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S6),
ITResList31 = [ITRes30|ITResList30],
- ?line {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes7,S7} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList8 = [STRes7|STResList7],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList34 = [ITRes33|ITResList33],
- ?line ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes34 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList35 = [ITRes34|ITResList34],
- ?line ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
+ ITRes35 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S7),
ITResList36 = [ITRes35|ITResList35],
- ?line {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes8,S8} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList9 = [STRes8|STResList8],
- ?line ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes36 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList37 = [ITRes36|ITResList36],
- ?line ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes37 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList38 = [ITRes37|ITResList37],
- ?line ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes38 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList39 = [ITRes38|ITResList38],
- ?line ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes39 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList40 = [ITRes39|ITResList39],
- ?line ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
+ ITRes40 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S8),
ITResList41 = [ITRes40|ITResList40],
- ?line {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes9,S9} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-minInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList10 = [STRes9|STResList9],
- ?line ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
+ ITRes41 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-minInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S9),
ITResList42 = [ITRes41|ITResList41],
- ?line {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes10,S10} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList11 = [STRes10|STResList10],
- ?line ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
+ ITRes42 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S10),
ITResList43 = [ITRes42|ITResList42],
- ?line {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes11,S11} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList12 = [STRes11|STResList11],
- ?line ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes43 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList44 = [ITRes43|ITResList43],
- ?line ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes44 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList45 = [ITRes44|ITResList44],
- ?line ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes45 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList46 = [ITRes45|ITResList45],
- ?line ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes46 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList47 = [ITRes46|ITResList46],
- ?line ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
+ ITRes47 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S11),
ITResList48 = [ITRes47|ITResList47],
- ?line {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes12,S12} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList13 = [STRes12|STResList12],
- ?line ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes48 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList49 = [ITRes48|ITResList48],
- ?line ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes49 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList50 = [ITRes49|ITResList49],
- ?line ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes50 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList51 = [ITRes50|ITResList50],
- ?line ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes51 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList52 = [ITRes51|ITResList51],
- ?line ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
+ ITRes52 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S12),
ITResList53 = [ITRes52|ITResList52],
- ?line {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes13,S13} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList14 = [STRes13|STResList13],
- ?line ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes53 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList54 = [ITRes53|ITResList53],
- ?line ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes54 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList55 = [ITRes54|ITResList54],
- ?line ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes55 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList56 = [ITRes55|ITResList55],
- ?line ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes56 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList57 = [ITRes56|ITResList56],
- ?line ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
+ ITRes57 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S13),
ITResList58 = [ITRes57|ITResList57],
- ?line {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes14,S14} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxExclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList15 = [STRes14|STResList14],
- ?line ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes58 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList59 = [ITRes58|ITResList58],
- ?line ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes59 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList60 = [ITRes59|ITResList59],
- ?line ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes60 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList61 = [ITRes60|ITResList60],
- ?line ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes61 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList62 = [ITRes61|ITResList61],
- ?line ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
+ ITRes62 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxExclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S14),
ITResList63 = [ITRes62|ITResList62],
- ?line {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes15,S15} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-1.xsd','./nisttest/NISTTestsAll',valid),
STResList16 = [STRes15|STResList15],
- ?line ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
+ ITRes63 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-1-1.xml','./nisttest/NISTTestsAll',valid,S15),
ITResList64 = [ITRes63|ITResList63],
- ?line {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes16,S16} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-2.xsd','./nisttest/NISTTestsAll',valid),
STResList17 = [STRes16|STResList16],
- ?line ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes64 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-1.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList65 = [ITRes64|ITResList64],
- ?line ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes65 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-2.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList66 = [ITRes65|ITResList65],
- ?line ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes66 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-3.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList67 = [ITRes66|ITResList66],
- ?line ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes67 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-4.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList68 = [ITRes67|ITResList67],
- ?line ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
+ ITRes68 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-2-5.xml','./nisttest/NISTTestsAll',valid,S16),
ITResList69 = [ITRes68|ITResList68],
- ?line {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes17,S17} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-3.xsd','./nisttest/NISTTestsAll',valid),
STResList18 = [STRes17|STResList17],
- ?line ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes69 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-1.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList70 = [ITRes69|ITResList69],
- ?line ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes70 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-2.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList71 = [ITRes70|ITResList70],
- ?line ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes71 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-3.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList72 = [ITRes71|ITResList71],
- ?line ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes72 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-4.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList73 = [ITRes72|ITResList72],
- ?line ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
+ ITRes73 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-3-5.xml','./nisttest/NISTTestsAll',valid,S17),
ITResList74 = [ITRes73|ITResList73],
- ?line {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes18,S18} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-4.xsd','./nisttest/NISTTestsAll',valid),
STResList19 = [STRes18|STResList18],
- ?line ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes74 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-1.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList75 = [ITRes74|ITResList74],
- ?line ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes75 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-2.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList76 = [ITRes75|ITResList75],
- ?line ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes76 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-3.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList77 = [ITRes76|ITResList76],
- ?line ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes77 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-4.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList78 = [ITRes77|ITResList77],
- ?line ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
+ ITRes78 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-4-5.xml','./nisttest/NISTTestsAll',valid,S18),
ITResList79 = [ITRes78|ITResList78],
- ?line {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes19,S19} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-maxInclusive-5.xsd','./nisttest/NISTTestsAll',valid),
STResList20 = [STRes19|STResList19],
- ?line ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes79 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-1.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList80 = [ITRes79|ITResList79],
- ?line ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes80 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-2.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList81 = [ITRes80|ITResList80],
- ?line ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes81 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-3.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList82 = [ITRes81|ITResList81],
- ?line ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes82 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-4.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList83 = [ITRes82|ITResList82],
- ?line ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
+ ITRes83 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-maxInclusive-5-5.xml','./nisttest/NISTTestsAll',valid,S19),
ITResList84 = [ITRes83|ITResList83],
- ?line {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes20,S20} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-fractionDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList21 = [STRes20|STResList20],
- ?line ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes84 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList85 = [ITRes84|ITResList84],
- ?line ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes85 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList86 = [ITRes85|ITResList85],
- ?line ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes86 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList87 = [ITRes86|ITResList86],
- ?line ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes87 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList88 = [ITRes87|ITResList87],
- ?line ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
+ ITRes88 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-fractionDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S20),
ITResList89 = [ITRes88|ITResList88],
- ?line {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes21,S21} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-1.xsd','./nisttest/NISTTestsAll',valid),
STResList22 = [STRes21|STResList21],
- ?line ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes89 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-1.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList90 = [ITRes89|ITResList89],
- ?line ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes90 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-2.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList91 = [ITRes90|ITResList90],
- ?line ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes91 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-3.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList92 = [ITRes91|ITResList91],
- ?line ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes92 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-4.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList93 = [ITRes92|ITResList92],
- ?line ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
+ ITRes93 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-1-5.xml','./nisttest/NISTTestsAll',valid,S21),
ITResList94 = [ITRes93|ITResList93],
- ?line {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes22,S22} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-2.xsd','./nisttest/NISTTestsAll',valid),
STResList23 = [STRes22|STResList22],
- ?line ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes94 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-1.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList95 = [ITRes94|ITResList94],
- ?line ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes95 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-2.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList96 = [ITRes95|ITResList95],
- ?line ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes96 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-3.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList97 = [ITRes96|ITResList96],
- ?line ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes97 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-4.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList98 = [ITRes97|ITResList97],
- ?line ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
+ ITRes98 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-2-5.xml','./nisttest/NISTTestsAll',valid,S22),
ITResList99 = [ITRes98|ITResList98],
- ?line {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes23,S23} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-3.xsd','./nisttest/NISTTestsAll',valid),
STResList24 = [STRes23|STResList23],
- ?line ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes99 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-1.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList100 = [ITRes99|ITResList99],
- ?line ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes100 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-2.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList101 = [ITRes100|ITResList100],
- ?line ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes101 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-3.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList102 = [ITRes101|ITResList101],
- ?line ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes102 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-4.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList103 = [ITRes102|ITResList102],
- ?line ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
+ ITRes103 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-3-5.xml','./nisttest/NISTTestsAll',valid,S23),
ITResList104 = [ITRes103|ITResList103],
- ?line {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes24,S24} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-4.xsd','./nisttest/NISTTestsAll',valid),
STResList25 = [STRes24|STResList24],
- ?line ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes104 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-1.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList105 = [ITRes104|ITResList104],
- ?line ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes105 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-2.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList106 = [ITRes105|ITResList105],
- ?line ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes106 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-3.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList107 = [ITRes106|ITResList106],
- ?line ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes107 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-4.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList108 = [ITRes107|ITResList107],
- ?line ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
+ ITRes108 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-4-5.xml','./nisttest/NISTTestsAll',valid,S24),
ITResList109 = [ITRes108|ITResList108],
- ?line {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes25,S25} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-totalDigits-5.xsd','./nisttest/NISTTestsAll',valid),
STResList26 = [STRes25|STResList25],
- ?line ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes109 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-1.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList110 = [ITRes109|ITResList109],
- ?line ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes110 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-2.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList111 = [ITRes110|ITResList110],
- ?line ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes111 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-3.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList112 = [ITRes111|ITResList111],
- ?line ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes112 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-4.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList113 = [ITRes112|ITResList112],
- ?line ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
+ ITRes113 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-totalDigits-5-5.xml','./nisttest/NISTTestsAll',valid,S25),
ITResList114 = [ITRes113|ITResList113],
- ?line {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes26,S26} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-1.xsd','./nisttest/NISTTestsAll',valid),
STResList27 = [STRes26|STResList26],
- ?line ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes114 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-1.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList115 = [ITRes114|ITResList114],
- ?line ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes115 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-2.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList116 = [ITRes115|ITResList115],
- ?line ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes116 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-3.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList117 = [ITRes116|ITResList116],
- ?line ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes117 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-4.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList118 = [ITRes117|ITResList117],
- ?line ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
+ ITRes118 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-1-5.xml','./nisttest/NISTTestsAll',valid,S26),
ITResList119 = [ITRes118|ITResList118],
- ?line {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes27,S27} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-2.xsd','./nisttest/NISTTestsAll',valid),
STResList28 = [STRes27|STResList27],
- ?line ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes119 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-1.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList120 = [ITRes119|ITResList119],
- ?line ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes120 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-2.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList121 = [ITRes120|ITResList120],
- ?line ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes121 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-3.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList122 = [ITRes121|ITResList121],
- ?line ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes122 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-4.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList123 = [ITRes122|ITResList122],
- ?line ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
+ ITRes123 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-2-5.xml','./nisttest/NISTTestsAll',valid,S27),
ITResList124 = [ITRes123|ITResList123],
- ?line {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes28,S28} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-3.xsd','./nisttest/NISTTestsAll',valid),
STResList29 = [STRes28|STResList28],
- ?line ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes124 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-1.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList125 = [ITRes124|ITResList124],
- ?line ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes125 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-2.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList126 = [ITRes125|ITResList125],
- ?line ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes126 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-3.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList127 = [ITRes126|ITResList126],
- ?line ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes127 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-4.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList128 = [ITRes127|ITResList127],
- ?line ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
+ ITRes128 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-3-5.xml','./nisttest/NISTTestsAll',valid,S28),
ITResList129 = [ITRes128|ITResList128],
- ?line {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes29,S29} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-4.xsd','./nisttest/NISTTestsAll',valid),
STResList30 = [STRes29|STResList29],
- ?line ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes129 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-1.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList130 = [ITRes129|ITResList129],
- ?line ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes130 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-2.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList131 = [ITRes130|ITResList130],
- ?line ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes131 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-3.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList132 = [ITRes131|ITResList131],
- ?line ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes132 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-4.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList133 = [ITRes132|ITResList132],
- ?line ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
+ ITRes133 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-4-5.xml','./nisttest/NISTTestsAll',valid,S29),
ITResList134 = [ITRes133|ITResList133],
- ?line {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes30,S30} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-pattern-5.xsd','./nisttest/NISTTestsAll',valid),
STResList31 = [STRes30|STResList30],
- ?line ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes134 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-1.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList135 = [ITRes134|ITResList134],
- ?line ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes135 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-2.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList136 = [ITRes135|ITResList135],
- ?line ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes136 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-3.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList137 = [ITRes136|ITResList136],
- ?line ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes137 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-4.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList138 = [ITRes137|ITResList137],
- ?line ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
+ ITRes138 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-pattern-5-5.xml','./nisttest/NISTTestsAll',valid,S30),
ITResList139 = [ITRes138|ITResList138],
- ?line {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes31,S31} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-1.xsd','./nisttest/NISTTestsAll',valid),
STResList32 = [STRes31|STResList31],
- ?line ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes139 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-1.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList140 = [ITRes139|ITResList139],
- ?line ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes140 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-2.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList141 = [ITRes140|ITResList140],
- ?line ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes141 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-3.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList142 = [ITRes141|ITResList141],
- ?line ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes142 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-4.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList143 = [ITRes142|ITResList142],
- ?line ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
+ ITRes143 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-1-5.xml','./nisttest/NISTTestsAll',valid,S31),
ITResList144 = [ITRes143|ITResList143],
- ?line {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes32,S32} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-2.xsd','./nisttest/NISTTestsAll',valid),
STResList33 = [STRes32|STResList32],
- ?line ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes144 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-1.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList145 = [ITRes144|ITResList144],
- ?line ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes145 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-2.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList146 = [ITRes145|ITResList145],
- ?line ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes146 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-3.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList147 = [ITRes146|ITResList146],
- ?line ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes147 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-4.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList148 = [ITRes147|ITResList147],
- ?line ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
+ ITRes148 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-2-5.xml','./nisttest/NISTTestsAll',valid,S32),
ITResList149 = [ITRes148|ITResList148],
- ?line {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes33,S33} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-3.xsd','./nisttest/NISTTestsAll',valid),
STResList34 = [STRes33|STResList33],
- ?line ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes149 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-1.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList150 = [ITRes149|ITResList149],
- ?line ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes150 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-2.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList151 = [ITRes150|ITResList150],
- ?line ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes151 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-3.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList152 = [ITRes151|ITResList151],
- ?line ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes152 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-4.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList153 = [ITRes152|ITResList152],
- ?line ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
+ ITRes153 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-3-5.xml','./nisttest/NISTTestsAll',valid,S33),
ITResList154 = [ITRes153|ITResList153],
- ?line {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes34,S34} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-4.xsd','./nisttest/NISTTestsAll',valid),
STResList35 = [STRes34|STResList34],
- ?line ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes154 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-1.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList155 = [ITRes154|ITResList154],
- ?line ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes155 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-2.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList156 = [ITRes155|ITResList155],
- ?line ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes156 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-3.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList157 = [ITRes156|ITResList156],
- ?line ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes157 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-4.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList158 = [ITRes157|ITResList157],
- ?line ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
+ ITRes158 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-4-5.xml','./nisttest/NISTTestsAll',valid,S34),
ITResList159 = [ITRes158|ITResList158],
- ?line {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes35,S35} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-enumeration-5.xsd','./nisttest/NISTTestsAll',valid),
STResList36 = [STRes35|STResList35],
- ?line ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes159 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-1.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList160 = [ITRes159|ITResList159],
- ?line ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes160 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-2.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList161 = [ITRes160|ITResList160],
- ?line ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes161 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-3.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList162 = [ITRes161|ITResList161],
- ?line ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes162 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-4.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList163 = [ITRes162|ITResList162],
- ?line ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
+ ITRes163 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-enumeration-5-5.xml','./nisttest/NISTTestsAll',valid,S35),
ITResList164 = [ITRes163|ITResList163],
- ?line {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
+ {STRes36,S36} = xmerl_xsd_lib:schema_test(Config,'./nisttest/NISTTestsAll/NISTSchema-unsignedShort-whiteSpace-1.xsd','./nisttest/NISTTestsAll',valid),
STResList37 = [STRes36|STResList36],
- ?line ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes164 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-1.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList165 = [ITRes164|ITResList164],
- ?line ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes165 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-2.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList166 = [ITRes165|ITResList165],
- ?line ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes166 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-3.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList167 = [ITRes166|ITResList166],
- ?line ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes167 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-4.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList168 = [ITRes167|ITResList167],
- ?line ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
+ ITRes168 = xmerl_xsd_lib:instance_test(Config,'./nisttest/NISTTestsAll/NISTXML-unsignedShort-whiteSpace-1-5.xml','./nisttest/NISTTestsAll',valid,S36),
ITResList169 = [ITRes168|ITResList168],
-
xmerl_xsd_lib:compare_test_results(Config,STResList37,ITResList169).
-
diff --git a/lib/xmerl/test/xmerl_xsd_SUITE.erl b/lib/xmerl/test/xmerl_xsd_SUITE.erl
index 5a95917b5c..3060f27e6c 100644
--- a/lib/xmerl/test/xmerl_xsd_SUITE.erl
+++ b/lib/xmerl/test/xmerl_xsd_SUITE.erl
@@ -74,229 +74,204 @@ groups() ->
{misc_block_tests, [],
[compare_dateTime, compare_duration]}].
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
+suite() ->
+ [{timetrap,{minutes,10}}].
init_per_testcase(_TestCase,Config) ->
- {ok, _} =
- file:read_file_info(filename:join([?config(priv_dir,Config)])),
- code:add_patha(?config(priv_dir,Config)),
- Dog=test_server:timetrap({minutes,10}),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Func,Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+ {ok,_} = file:read_file_info(filename:join([privdir(Config)])),
+ code:add_patha(privdir(Config)),
+ Config.
+
+end_per_testcase(_Func,_Config) ->
ok.
-string(suite) -> [];
string(_Config) ->
%% #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
- Str = [16#9,16#A,16#D,16#20,16#D7FF,16#E000,16#FFFD,16#10000,
- 16#10FFFF],
- ?line {ok,_} = check_simpleType(string,Str,dummy).
+ Str = [16#9,16#A,16#D,16#20,16#D7FF,16#E000,16#FFFD,16#10000, 16#10FFFF],
+ {ok,_} = check_simpleType(string,Str,dummy).
-boolean(suite) -> [];
boolean(_Config) ->
- ?line {ok,_} = check_simpleType(boolean,"1",dummy),
- ?line {ok,_} = check_simpleType(boolean,"0",dummy),
- ?line {ok,_} = check_simpleType(boolean,"true",dummy),
- ?line {ok,_} = check_simpleType(boolean,"false",dummy),
- ?line {error,_Reason} = check_simpleType(boolean,"gurka",dummy).
+ {ok,_} = check_simpleType(boolean,"1",dummy),
+ {ok,_} = check_simpleType(boolean,"0",dummy),
+ {ok,_} = check_simpleType(boolean,"true",dummy),
+ {ok,_} = check_simpleType(boolean,"false",dummy),
+ {error,_Reason} = check_simpleType(boolean,"gurka",dummy).
-decimal(suite) -> [];
decimal(_Config) ->
- ?line {ok,_} = check_simpleType(decimal,"-1.23",dummy),
- ?line {ok,_} = check_simpleType(decimal,"12678967.543233",dummy),
- ?line {ok,_} = check_simpleType(decimal,"+100000.00",dummy),
- ?line {ok,_} = check_simpleType(decimal,"210",dummy).
+ {ok,_} = check_simpleType(decimal,"-1.23",dummy),
+ {ok,_} = check_simpleType(decimal,"12678967.543233",dummy),
+ {ok,_} = check_simpleType(decimal,"+100000.00",dummy),
+ {ok,_} = check_simpleType(decimal,"210",dummy).
-float(suite) -> [];
float(_Config) ->
%% -1E4, 1267.43233E12, 12.78e-2, 12 , -0, 0 , INF, -INF, NaN
- ?line {ok,_} = check_simpleType(float,"-1E4",dummy),
- ?line {ok,_} = check_simpleType(float,"1267.43233E12",dummy),
- ?line {ok,_} = check_simpleType(float,"12.78e-2",dummy),
- ?line {ok,_} = check_simpleType(float,"12",dummy),
- ?line {ok,_} = check_simpleType(float,"-0",dummy),
- ?line {ok,_} = check_simpleType(float,"0",dummy),
- ?line {ok,_} = check_simpleType(float,"INF",dummy),
- ?line {ok,_} = check_simpleType(float,"-INF",dummy),
- ?line {ok,_} = check_simpleType(float,"NaN",dummy).
-
-
-double(suite) -> [];
+ {ok,_} = check_simpleType(float,"-1E4",dummy),
+ {ok,_} = check_simpleType(float,"1267.43233E12",dummy),
+ {ok,_} = check_simpleType(float,"12.78e-2",dummy),
+ {ok,_} = check_simpleType(float,"12",dummy),
+ {ok,_} = check_simpleType(float,"-0",dummy),
+ {ok,_} = check_simpleType(float,"0",dummy),
+ {ok,_} = check_simpleType(float,"INF",dummy),
+ {ok,_} = check_simpleType(float,"-INF",dummy),
+ {ok,_} = check_simpleType(float,"NaN",dummy).
+
+
double(_Config) ->
%% -1E4, 1267.43233E12, 12.78e-2, 12 , -0, 0 , INF, -INF, NaN
- ?line {ok,_} = check_simpleType(double,"-1E4",dummy),
- ?line {ok,_} = check_simpleType(double,"1267.43233E12",dummy),
- ?line {ok,_} = check_simpleType(double,"12.78e-2",dummy),
- ?line {ok,_} = check_simpleType(double,"12",dummy),
- ?line {ok,_} = check_simpleType(double,"-0",dummy),
- ?line {ok,_} = check_simpleType(double,"0",dummy),
- ?line {ok,_} = check_simpleType(double,"INF",dummy),
- ?line {ok,_} = check_simpleType(double,"-INF",dummy),
- ?line {ok,_} = check_simpleType(double,"NaN",dummy).
-
-
-duration(suite) -> [];
+ {ok,_} = check_simpleType(double,"-1E4",dummy),
+ {ok,_} = check_simpleType(double,"1267.43233E12",dummy),
+ {ok,_} = check_simpleType(double,"12.78e-2",dummy),
+ {ok,_} = check_simpleType(double,"12",dummy),
+ {ok,_} = check_simpleType(double,"-0",dummy),
+ {ok,_} = check_simpleType(double,"0",dummy),
+ {ok,_} = check_simpleType(double,"INF",dummy),
+ {ok,_} = check_simpleType(double,"-INF",dummy),
+ {ok,_} = check_simpleType(double,"NaN",dummy).
+
+
duration(_Config) ->
%% allowed: P1Y2M3DT10H30M -P120D P1347Y P1347M P1Y2MT2H
%% P0Y1347M P0Y1347M0D -P1347M
%% not allowed: P-1347M P1Y2MT
- ?line {ok,_} = check_simpleType(duration,"P1Y2M3DT10H30M",dummy),
- ?line {ok,_} = check_simpleType(duration,"-P120D",dummy),
- ?line {ok,_} = check_simpleType(duration,"P1347Y",dummy),
- ?line {ok,_} = check_simpleType(duration,"P1347M",dummy),
- ?line {ok,_} = check_simpleType(duration,"P1Y2MT2H",dummy),
- ?line {ok,_} = check_simpleType(duration,"P0Y1347M",dummy),
- ?line {ok,_} = check_simpleType(duration,"P0Y1347M0D",dummy),
- ?line {ok,_} = check_simpleType(duration,"-P1347M",dummy),
-
- ?line {error,_} = check_simpleType(duration,"P-1347M",dummy),
- ?line {error,_} = check_simpleType(duration,"P1Y2MT",dummy).
+ {ok,_} = check_simpleType(duration,"P1Y2M3DT10H30M",dummy),
+ {ok,_} = check_simpleType(duration,"-P120D",dummy),
+ {ok,_} = check_simpleType(duration,"P1347Y",dummy),
+ {ok,_} = check_simpleType(duration,"P1347M",dummy),
+ {ok,_} = check_simpleType(duration,"P1Y2MT2H",dummy),
+ {ok,_} = check_simpleType(duration,"P0Y1347M",dummy),
+ {ok,_} = check_simpleType(duration,"P0Y1347M0D",dummy),
+ {ok,_} = check_simpleType(duration,"-P1347M",dummy),
+
+ {error,_} = check_simpleType(duration,"P-1347M",dummy),
+ {error,_} = check_simpleType(duration,"P1Y2MT",dummy).
%% '-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
-dateTime(suite) -> [];
dateTime(_Config) ->
%% 2002-10-10T12:00:00-05:00
DT1 = "2002-10-10T12:00:00-05:00",
- ?line {ok,_} = check_simpleType(dateTime,DT1,dummy),
+ {ok,_} = check_simpleType(dateTime,DT1,dummy),
DT2 = "2002-10-10T17:00:00Z",
- ?line {ok,_} = check_simpleType(dateTime,DT2,dummy),
+ {ok,_} = check_simpleType(dateTime,DT2,dummy),
%% plus sign prohibited
DT3 = "+2002-10-10T17:00:00Z",
- ?line {error,_Reason3} = check_simpleType(dateTime,DT3,dummy),
+ {error,_Reason3} = check_simpleType(dateTime,DT3,dummy),
%% leading zeros when year are more than four digits prohibited
DT4 = "002002-10-10T17:00:00Z",
- ?line {error,_Reason4} = check_simpleType(dateTime,DT4,dummy),
+ {error,_Reason4} = check_simpleType(dateTime,DT4,dummy),
DT5 = "1953-12-31T12:10:10.10+12:00",
- ?line {ok,_} = check_simpleType(dateTime,DT5,dummy).
+ {ok,_} = check_simpleType(dateTime,DT5,dummy).
-time(suite) -> [];
time(_Config) ->
%% hh:mm:ss.sss with optional following time zone indicator.
T1 = "13:20:00-05:00",
- ?line {ok,_} = check_simpleType(time,T1,dummy),
+ {ok,_} = check_simpleType(time,T1,dummy),
%% canonical repr. of midnight
T2 = "00:00:00",
- ?line {ok,_} = check_simpleType(time,T2,dummy),
+ {ok,_} = check_simpleType(time,T2,dummy),
T3 = "12:34:56",
- ?line {ok,_} = check_simpleType(time,T3,dummy),
+ {ok,_} = check_simpleType(time,T3,dummy),
T4 = "12:34:56.552",
- ?line {ok,_} = check_simpleType(time,T4,dummy),
+ {ok,_} = check_simpleType(time,T4,dummy),
T5 = "12:34:56.552Z",
- ?line {ok,_} = check_simpleType(time,T5,dummy).
+ {ok,_} = check_simpleType(time,T5,dummy).
-date(suite) -> [];
date(_Config) ->
%% '-'? yyyy '-' mm '-' dd zzzzzz?
%% is
D1 = "2002-10-10+13:00",
- ?line {ok,_} = check_simpleType(date,D1,dummy),
+ {ok,_} = check_simpleType(date,D1,dummy),
D2 = "2002-10-09-11:00",
- ?line {ok,_} = check_simpleType(date,D2,dummy),
+ {ok,_} = check_simpleType(date,D2,dummy),
D12 = "+2002-13-09-11:00",
- ?line {error,_Reason12} = check_simpleType(date,D12,dummy),
+ {error,_Reason12} = check_simpleType(date,D12,dummy),
D13 = "2002-13-09-11:00",
- ?line {error,_Reason13} = check_simpleType(date,D13,dummy),
+ {error,_Reason13} = check_simpleType(date,D13,dummy),
D14 = "2002-12-39-11:00",
- ?line {error,_Reason14} = check_simpleType(date,D14,dummy).
+ {error,_Reason14} = check_simpleType(date,D14,dummy).
-gYearMonth(suite) -> [];
gYearMonth(_Config) ->
%% '-'? yyyy '-' mm zzzzzz?
GYM1 = "1955-10",
- ?line {ok,_} = check_simpleType(gYearMonth,GYM1,dummy),
+ {ok,_} = check_simpleType(gYearMonth,GYM1,dummy),
GYM2 = "-1955-10",
- ?line {ok,_} = check_simpleType(gYearMonth,GYM2,dummy),
+ {ok,_} = check_simpleType(gYearMonth,GYM2,dummy),
GYM3 = "1955-10Z",
- ?line {ok,_} = check_simpleType(gYearMonth,GYM3,dummy),
+ {ok,_} = check_simpleType(gYearMonth,GYM3,dummy),
GYM4 = "0055-10+10:00",
- ?line {ok,_} = check_simpleType(gYearMonth,GYM4,dummy),
+ {ok,_} = check_simpleType(gYearMonth,GYM4,dummy),
GYM5 = "0955-10Z",
- ?line {ok,_} = check_simpleType(gYearMonth,GYM5,dummy),
+ {ok,_} = check_simpleType(gYearMonth,GYM5,dummy),
GYM6 = "-11955-01",
- ?line {ok,_} = check_simpleType(gYearMonth,GYM6,dummy),
+ {ok,_} = check_simpleType(gYearMonth,GYM6,dummy),
- ?line {error,_} = check_simpleType(gYearMonth,"+2000-10",dummy),
- ?line {error,_} = check_simpleType(gYearMonth,"2000-00",dummy),
- ?line {error,_} = check_simpleType(gYearMonth,"2000-10+10:70",dummy).
+ {error,_} = check_simpleType(gYearMonth,"+2000-10",dummy),
+ {error,_} = check_simpleType(gYearMonth,"2000-00",dummy),
+ {error,_} = check_simpleType(gYearMonth,"2000-10+10:70",dummy).
-gYear(suite) -> [];
gYear(_Config) ->
%% '-'? yyyy zzzzzz?
- ?line {ok,_} = check_simpleType(gYear,"2000",dummy),
- ?line {ok,_} = check_simpleType(gYear,"2000-11:30",dummy),
- ?line {ok,_} = check_simpleType(gYear,"-2000",dummy),
- ?line {error,_} = check_simpleType(gYear,"0000",dummy).
+ {ok,_} = check_simpleType(gYear,"2000",dummy),
+ {ok,_} = check_simpleType(gYear,"2000-11:30",dummy),
+ {ok,_} = check_simpleType(gYear,"-2000",dummy),
+ {error,_} = check_simpleType(gYear,"0000",dummy).
-gMonthDay(suite) -> [];
gMonthDay(_Config) ->
%% mm '-' dd zzzzzz?
- ?line {ok,_} = check_simpleType(gMonthDay,"--05-03",dummy),
- ?line {ok,_} = check_simpleType(gMonthDay,"--05-03Z",dummy),
- ?line {error,_} = check_simpleType(gMonthDay,"05-00",dummy),
- ?line {error,_} = check_simpleType(gMonthDay,"00-03",dummy),
- ?line {error,_} = check_simpleType(gMonthDay,"-05-03",dummy).
+ {ok,_} = check_simpleType(gMonthDay,"--05-03",dummy),
+ {ok,_} = check_simpleType(gMonthDay,"--05-03Z",dummy),
+ {error,_} = check_simpleType(gMonthDay,"05-00",dummy),
+ {error,_} = check_simpleType(gMonthDay,"00-03",dummy),
+ {error,_} = check_simpleType(gMonthDay,"-05-03",dummy).
-gDay(suite) -> [];
gDay(_Config) ->
%% dd zzzzzz?
- ?line {ok,_} = check_simpleType(gDay,"---05",dummy),
- ?line {ok,_} = check_simpleType(gDay,"---30+03:00",dummy),
- ?line {error,_} = check_simpleType(gDay,"-30+03:00",dummy),
- ?line {error,_} = check_simpleType(gDay,"---00+03:00",dummy),
- ?line {error,_} = check_simpleType(gDay,"---40+03:00",dummy),
- ?line {error,_} = check_simpleType(gDay,"05",dummy).
-
-gMonth(suite) -> [];
+ {ok,_} = check_simpleType(gDay,"---05",dummy),
+ {ok,_} = check_simpleType(gDay,"---30+03:00",dummy),
+ {error,_} = check_simpleType(gDay,"-30+03:00",dummy),
+ {error,_} = check_simpleType(gDay,"---00+03:00",dummy),
+ {error,_} = check_simpleType(gDay,"---40+03:00",dummy),
+ {error,_} = check_simpleType(gDay,"05",dummy).
+
gMonth(_Config) ->
%% mm zzzzzz?
- ?line {ok,_} = check_simpleType(gMonth,"--05",dummy),
- ?line {ok,_} = check_simpleType(gMonth,"--10+03:00",dummy),
- ?line {error,_} = check_simpleType(gMonth,"-10+03:00",dummy),
- ?line {error,_} = check_simpleType(gMonth,"00+03:00",dummy),
- ?line {error,_} = check_simpleType(gMonth,"14",dummy),
- ?line {error,_} = check_simpleType(gMonth,"05",dummy).
+ {ok,_} = check_simpleType(gMonth,"--05",dummy),
+ {ok,_} = check_simpleType(gMonth,"--10+03:00",dummy),
+ {error,_} = check_simpleType(gMonth,"-10+03:00",dummy),
+ {error,_} = check_simpleType(gMonth,"00+03:00",dummy),
+ {error,_} = check_simpleType(gMonth,"14",dummy),
+ {error,_} = check_simpleType(gMonth,"05",dummy).
-hexBinary(suite) -> [];
hexBinary(_Config) ->
%% an even number of hexadecimal digits ([0-9a-fA-F]).
- ?line {ok,_} = check_simpleType(hexBinary,"05",dummy),
- ?line {ok,_} = check_simpleType(hexBinary,"aF",dummy),
- ?line {ok,_} = check_simpleType(hexBinary,
+ {ok,_} = check_simpleType(hexBinary,"05",dummy),
+ {ok,_} = check_simpleType(hexBinary,"aF",dummy),
+ {ok,_} = check_simpleType(hexBinary,
"0123456789abcdefABCDEF",dummy),
- ?line {error,_} = check_simpleType(hexBinary,
+ {error,_} = check_simpleType(hexBinary,
"0123456789absdefABCDEF",dummy),
- ?line {error,_} = check_simpleType(hexBinary,"aF5",dummy),
- ?line {error,_} = check_simpleType(hexBinary,"aFG",dummy).
+ {error,_} = check_simpleType(hexBinary,"aF5",dummy),
+ {error,_} = check_simpleType(hexBinary,"aFG",dummy).
-base64Binary(suite) -> [];
base64Binary(_Config) ->
%% a-z, A-Z, 0-9, the plus sign (+), the forward slash (/) and the
%% equal sign (=), together with the characters defined in [XML
%% 1.0 (Second Edition)] as white space.(16#9, 16#A, 16#D, 16#20)
- ?line {ok,_} = check_simpleType(base64Binary,"05+/AA==",dummy),
- ?line {ok,_} = check_simpleType(base64Binary,"05+/AA= =",dummy),
- ?line {ok,_} = check_simpleType(base64Binary,"05+/A A= =",dummy),
- ?line {ok,_} = check_simpleType(base64Binary,"05+/ AA= =",dummy),
- ?line {error,_} = check_simpleType(base64Binary,"05+/AA== ",dummy),
+ {ok,_} = check_simpleType(base64Binary,"05+/AA==",dummy),
+ {ok,_} = check_simpleType(base64Binary,"05+/AA= =",dummy),
+ {ok,_} = check_simpleType(base64Binary,"05+/A A= =",dummy),
+ {ok,_} = check_simpleType(base64Binary,"05+/ AA= =",dummy),
+ {error,_} = check_simpleType(base64Binary,"05+/AA== ",dummy),
B64B1 = "AbCd GhZz 09w=",
- ?line {ok,_} = check_simpleType(base64Binary,B64B1,dummy),
+ {ok,_} = check_simpleType(base64Binary,B64B1,dummy),
B64B2 = "AbCd GhZ9 0z8 =",
- ?line {ok,_} = check_simpleType(base64Binary,B64B2,dummy),
- ?line {ok,_} = check_simpleType(base64Binary,"0z8 =",dummy),
+ {ok,_} = check_simpleType(base64Binary,B64B2,dummy),
+ {ok,_} = check_simpleType(base64Binary,"0z8 =",dummy),
ErrB641 = "AbCd GZ9 0z8 =",
- ?line {error,_} = check_simpleType(base64Binary,ErrB641,dummy).
+ {error,_} = check_simpleType(base64Binary,ErrB641,dummy).
-anyURI(suite) -> [];
anyURI(_Config) ->
URI1 = "ftp://ftp.is.co.za/rfc/rfc1808.txt",
URI2 = "gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles",
@@ -304,25 +279,22 @@ anyURI(_Config) ->
URI4 = "mailto:[email protected]",
URI5 = "news:comp.infosystems.www.servers.unix",
URI6 = "telnet://melvyl.ucop.edu/",
- ?line ok=ok_loop(anyURI,[URI1,URI2,URI3,URI4,URI5,URI6]).
+ ok=ok_loop(anyURI,[URI1,URI2,URI3,URI4,URI5,URI6]).
-'QName'(suite) -> [];
'QName'(_Config) ->
%% QName ::= (Prefix ':')? LocalPart
%% Prefix ::= NCName
%% LocalPart ::= NCName
- ?line {ok,_} = check_simpleType('QName',"abc:def",dummy),
- ?line {ok,_} = check_simpleType('QName',"abc",dummy),
- ?line {ok,_} = check_simpleType('QName',"abc:def:ijk",dummy).
+ {ok,_} = check_simpleType('QName',"abc:def",dummy),
+ {ok,_} = check_simpleType('QName',"abc",dummy),
+ {ok,_} = check_simpleType('QName',"abc:def:ijk",dummy).
-'NOTATION'(suite) -> [];
'NOTATION'(_Config) ->
- ?line {ok,_} = check_simpleType('NOTATION',"abc:def",dummy),
- ?line {ok,_} = check_simpleType('NOTATION',"abc",dummy),
- ?line {ok,_} = check_simpleType('NOTATION',"abc:def:ijk",dummy).
+ {ok,_} = check_simpleType('NOTATION',"abc:def",dummy),
+ {ok,_} = check_simpleType('NOTATION',"abc",dummy),
+ {ok,_} = check_simpleType('NOTATION',"abc:def:ijk",dummy).
-normalizedString(suite) -> [];
normalizedString(_Config) ->
%% not contain the carriage return (#xD), line feed (#xA) nor tab
%% (#x9) characters.
@@ -330,10 +302,9 @@ normalizedString(_Config) ->
NotNStr1 = "this string is not normalized \t",
NotNStr2 = "neither is this \n string",
NotNStr3 = "or this \r string",
- ?line {ok,_} = check_simpleType(normalizedString,NStr1,dummy),
- ?line ok=error_loop(normalizedString,[NotNStr1,NotNStr2,NotNStr3]).
+ {ok,_} = check_simpleType(normalizedString,NStr1,dummy),
+ ok=error_loop(normalizedString,[NotNStr1,NotNStr2,NotNStr3]).
-token(suite) -> [];
token(_Config) ->
%% not contain the carriage return (#xD), line feed (#xA) nor tab
%% (#x9) characters, that have no leading or trailing spaces
@@ -346,10 +317,9 @@ token(_Config) ->
NotT4 = "tabs not \t allowed",
NotT5 = "newlines not allowed\n",
NotT6 = "or \r (carriage return)",
- ?line {ok,_} = check_simpleType(token,T1,dummy),
- ?line ok=error_loop(token,[NotT1,NotT2,NotT3,NotT4,NotT5,NotT6]).
+ {ok,_} = check_simpleType(token,T1,dummy),
+ ok=error_loop(token,[NotT1,NotT2,NotT3,NotT4,NotT5,NotT6]).
-language(suite) -> [];
language(_Config) ->
%% strings that conform to the pattern
%% [a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*
@@ -358,154 +328,130 @@ language(_Config) ->
NotL2 = "Abra-",
NotL3 = "Abracadabra",
NotL4 = "Abra-cadabrrra",
- ?line {ok,_} = check_simpleType(language,L,dummy),
- ?line ok=error_loop(language,[NotL1,NotL2,NotL3,NotL4]).
+ {ok,_} = check_simpleType(language,L,dummy),
+ ok=error_loop(language,[NotL1,NotL2,NotL3,NotL4]).
-'NMTOKEN'(suite) -> [];
'NMTOKEN'(_Config) ->
N = "name:withoutspace",
NotN1 = "name with space",
NotN2 = "namewith#strang/chars)",
- ?line {ok,_} = check_simpleType('NMTOKEN',N,dummy),
- ?line {error,_} = check_simpleType('NMTOKEN',NotN1,dummy),
- ?line {error,_} = check_simpleType('NMTOKEN',NotN2,dummy).
+ {ok,_} = check_simpleType('NMTOKEN',N,dummy),
+ {error,_} = check_simpleType('NMTOKEN',NotN1,dummy),
+ {error,_} = check_simpleType('NMTOKEN',NotN2,dummy).
-'NMTOKENS'(suite) -> [];
'NMTOKENS'(_Config) ->
N1 = "name1 name:2 name:three",
NotN1 = "name na%me",
- ?line {ok,_} = check_simpleType('NMTOKENS',N1,dummy),
- ?line {error,_} = check_simpleType('NMTOKENS',NotN1,dummy).
+ {ok,_} = check_simpleType('NMTOKENS',N1,dummy),
+ {error,_} = check_simpleType('NMTOKENS',NotN1,dummy).
-'Name'(suite) -> [];
'Name'(_Config) ->
- ?line {ok,_} = check_simpleType('Name',"_valid_Name",dummy).
+ {ok,_} = check_simpleType('Name',"_valid_Name",dummy).
-'NCName'(suite) -> [];
'NCName'(_Config) ->
- ?line {ok,_} = check_simpleType('NCName',"_valid_Name",dummy).
+ {ok,_} = check_simpleType('NCName',"_valid_Name",dummy).
-'ID'(suite) -> [];
'ID'(_Config) ->
- ?line {ok,_} = check_simpleType('ID',"_valid_Name",dummy).
+ {ok,_} = check_simpleType('ID',"_valid_Name",dummy).
-'IDREF'(suite) -> [];
'IDREF'(_Config) ->
- ?line {ok,_} = check_simpleType('IDREF',"_valid_Name",dummy).
+ {ok,_} = check_simpleType('IDREF',"_valid_Name",dummy).
-'IDREFS'(suite) -> [];
'IDREFS'(_Config) ->
- ?line {ok,_} = check_simpleType('IDREFS',"_valid_Name Name2",dummy).
+ {ok,_} = check_simpleType('IDREFS',"_valid_Name Name2",dummy).
-'ENTITY'(suite) -> [];
'ENTITY'(_Config) ->
- ?line {ok,_} = check_simpleType('ENTITY',"_valid_Name",dummy).
+ {ok,_} = check_simpleType('ENTITY',"_valid_Name",dummy).
-'ENTITIES'(suite) -> [];
'ENTITIES'(_Config) ->
- ?line {ok,_} = check_simpleType('ENTITIES',"name name3",dummy).
+ {ok,_} = check_simpleType('ENTITIES',"name name3",dummy).
-integer(suite) -> [];
integer(_Config) ->
IntList = ["-1", "0", "12678967543233", "+100000"],
- ?line ok = ok_loop(integer,IntList),
- ?line {error,_} = check_simpleType(integer,"1.3",dummy).
+ ok = ok_loop(integer,IntList),
+ {error,_} = check_simpleType(integer,"1.3",dummy).
-nonPositiveInteger(suite) -> [];
nonPositiveInteger(_Config) ->
NPIList = ["0", "-12678967543233", "-100000"],
- ?line ok = ok_loop(nonPositiveInteger,NPIList),
- ?line {error,_} = check_simpleType(nonPositiveInteger,"1",dummy).
+ ok = ok_loop(nonPositiveInteger,NPIList),
+ {error,_} = check_simpleType(nonPositiveInteger,"1",dummy).
-negativeInteger(suite) -> [];
negativeInteger(_Config) ->
NIList = ["-1", "-12678967543233", "-100000"],
- ?line ok = ok_loop(negativeInteger,NIList),
- ?line {error,_} = check_simpleType(negativeInteger,"1",dummy),
- ?line {error,_} = check_simpleType(negativeInteger,"0",dummy).
+ ok = ok_loop(negativeInteger,NIList),
+ {error,_} = check_simpleType(negativeInteger,"1",dummy),
+ {error,_} = check_simpleType(negativeInteger,"0",dummy).
-long(suite) -> [];
long(_Config) ->
L = ["9223372036854775807","-9223372036854775808","-1", "0",
"12678967543233", "+100000"],
- ?line ok = ok_loop(long,L),
+ ok = ok_loop(long,L),
Err = ["9223372036854775808","-9223372036854775809"],
- ?line ok = error_loop(long,Err).
+ ok = error_loop(long,Err).
-int(suite) -> [];
int(_Config) ->
L = ["2147483647", "-2147483648", "-1", "0", "126789675", "+100000"],
- ?line ok = ok_loop(int,L),
+ ok = ok_loop(int,L),
Err = ["2147483648", "-2147483649"],
- ?line ok = error_loop(int,Err).
+ ok = error_loop(int,Err).
-short(suite) -> [];
short(_Config) ->
L = ["32767", "-32768", "-1", "0", "12678", "+10000"],
- ?line ok = ok_loop(short,L),
+ ok = ok_loop(short,L),
Err = ["32768", "-32769"],
- ?line ok = error_loop(short,Err).
+ ok = error_loop(short,Err).
-byte(suite) -> [];
byte(_Config) ->
L = ["-1", "0", "126", "+100", "127", "-128"],
- ?line ok = ok_loop(byte,L),
+ ok = ok_loop(byte,L),
Err = ["128", "-129"],
- ?line ok = error_loop(byte,Err).
+ ok = error_loop(byte,Err).
-nonNegativeInteger(suite) -> [];
nonNegativeInteger(_Config) ->
L = ["1", "0", "12678967543233", "+100000"],
- ?line ok = ok_loop(nonNegativeInteger,L),
- ?line {error,_} = check_simpleType(nonNegativeInteger,"-1",dummy).
+ ok = ok_loop(nonNegativeInteger,L),
+ {error,_} = check_simpleType(nonNegativeInteger,"-1",dummy).
-unsignedLong(suite) -> [];
unsignedLong(_Config) ->
L = ["0", "12678967543233", "100000", "18446744073709551615"],
- ?line ok = ok_loop(unsignedLong,L),
+ ok = ok_loop(unsignedLong,L),
Err = ["-1","18446744073709551616"],
- ?line ok = error_loop(unsignedLong,Err).
+ ok = error_loop(unsignedLong,Err).
-unsignedInt(suite) -> [];
unsignedInt(_Config) ->
L = ["4294967295", "0", "1267896754", "100000"],
- ?line ok = ok_loop(unsignedInt,L),
+ ok = ok_loop(unsignedInt,L),
Err = ["-1","4294967296"],
- ?line ok = error_loop(unsignedInt,Err).
+ ok = error_loop(unsignedInt,Err).
-unsignedShort(suite) -> [];
unsignedShort(_Config) ->
L = ["65535", "0", "12678", "10000"],
- ?line ok = ok_loop(unsignedShort,L),
+ ok = ok_loop(unsignedShort,L),
Err = ["-1","65536"],
- ?line ok = error_loop(unsignedShort,Err).
+ ok = error_loop(unsignedShort,Err).
-unsignedByte(suite) -> [];
unsignedByte(_Config) ->
L = ["255", "0", "126", "100"],
- ?line ok = ok_loop(unsignedByte,L),
+ ok = ok_loop(unsignedByte,L),
Err = ["-1","256"],
- ?line ok = error_loop(unsignedByte,Err).
+ ok = error_loop(unsignedByte,Err).
-positiveInteger(suite) -> [];
positiveInteger(_Config) ->
L = ["1", "12678967543233", "+100000"],
- ?line ok = ok_loop(positiveInteger,L),
+ ok = ok_loop(positiveInteger,L),
Err = ["-1","0"],
- ?line ok = error_loop(positiveInteger,Err).
+ ok = error_loop(positiveInteger,Err).
-
-
ok_loop(_Type,[]) ->
ok;
ok_loop(Type,[H|T]) ->
- ?line {ok,_} = check_simpleType(Type,H,dummy),
+ {ok,_} = check_simpleType(Type,H,dummy),
ok_loop(Type,T).
error_loop(_T,[]) ->
ok;
error_loop(Type,[H|T]) ->
- ?line {error,_} = check_simpleType(Type,H,dummy),
+ {error,_} = check_simpleType(Type,H,dummy),
error_loop(Type,T).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -514,657 +460,524 @@ error_loop(Type,[H|T]) ->
-length(suite) -> [];
length(_Config) ->
- ?line {ok,"string"} =
- (xmerl_xsd_type:facet_fun(string,{length,"6"}))("string"),
- ?line {error,{length,12,should_be,6}} =
+ {ok,"string"} = (xmerl_xsd_type:facet_fun(string,{length,"6"}))("string"),
+ {error,{length,12,should_be,6}} =
(xmerl_xsd_type:facet_fun(string,{length,"6"}))("stringstring"),
ok.
-minLength(suite) -> [];
minLength(_Config) ->
- ?line {ok,"string"} =
- (xmerl_xsd_type:facet_fun(string,{minLength,"6"}))("string"),
- ?line {error,{minLength,3,should_at_least_be,6}} =
+ {ok,"string"} = (xmerl_xsd_type:facet_fun(string,{minLength,"6"}))("string"),
+ {error,{minLength,3,should_at_least_be,6}} =
(xmerl_xsd_type:facet_fun(string,{minLength,"6"}))("str"),
ok.
-maxLength(suite) -> [];
maxLength(_Config) ->
- ?line {ok,"string"} =
- (xmerl_xsd_type:facet_fun(string,{maxLength,"6"}))("string"),
- ?line {error,{maxLength,12,should_not_be_more_than,6}} =
+ {ok,"string"} = (xmerl_xsd_type:facet_fun(string,{maxLength,"6"}))("string"),
+ {error,{maxLength,12,should_not_be_more_than,6}} =
(xmerl_xsd_type:facet_fun(string,{maxLength,"6"}))("stringstring"),
ok.
-pattern(suite) -> [];
pattern(_Config) ->
RE1 = "[a-z]{5}",
- ?line {ok,"calle"} =
+ {ok,"calle"} =
(xmerl_xsd_type:facet_fun(string,{pattern,RE1}))
("calle"),
- ?line {error,{pattern_mismatch,"cal",RE1}} =
+ {error,{pattern_mismatch,"cal",RE1}} =
(xmerl_xsd_type:facet_fun(string,{pattern,RE1}))
("cal"),
RE2 = "[A-Z]{2}\\d\\s\\d[A-Z]{2}",
- ?line {ok,"AY2 3BC"} =
+ {ok,"AY2 3BC"} =
(xmerl_xsd_type:facet_fun(string,{pattern,RE2}))
("AY2 3BC"),
- ?line {error,{pattern_mismatch,"AY23BC",RE2}} =
+ {error,{pattern_mismatch,"AY23BC",RE2}} =
(xmerl_xsd_type:facet_fun(string,{pattern,RE2}))
("AY23BC").
-enumeration(suite) -> [];
enumeration(_Config) ->
- ?line {ok,"tomat"} =
+ {ok,"tomat"} =
(xmerl_xsd_type:facet_fun(string,{enumeration,["gurka","tomat","sallad"]}))("tomat"),
- ?line {error,{enumeration,"morot",should_be_one_of,["gurka","tomat","sallad"]}} =
+ {error,{enumeration,"morot",should_be_one_of,["gurka","tomat","sallad"]}} =
(xmerl_xsd_type:facet_fun(string,{enumeration,["gurka","tomat","sallad"]}))("morot"),
ok.
-whiteSpace(suite) -> [];
whiteSpace(_Config) ->
- ?line {ok,"gur ka"} = (xmerl_xsd_type:facet_fun(string,{whiteSpace,"collapse"}))(" gur\tka "),
- ?line {ok," gur ka "} = (xmerl_xsd_type:facet_fun(string,{whiteSpace,"replace"}))(" gur\nka\t"),
- ?line {ok," gurk\na\t"} = (xmerl_xsd_type:facet_fun(string,{whiteSpace,"preserve"}))(" gurk\na\t"),
+ {ok,"gur ka"} = (xmerl_xsd_type:facet_fun(string,{whiteSpace,"collapse"}))(" gur\tka "),
+ {ok," gur ka "} = (xmerl_xsd_type:facet_fun(string,{whiteSpace,"replace"}))(" gur\nka\t"),
+ {ok," gurk\na\t"} = (xmerl_xsd_type:facet_fun(string,{whiteSpace,"preserve"}))(" gurk\na\t"),
ok.
-maxInclusive(suite) -> [];
maxInclusive(_Config) ->
- ?line {error,{maxInclusive,"3",should_be_less_than_or_equal_with,"2"}} =
+ {error,{maxInclusive,"3",should_be_less_than_or_equal_with,"2"}} =
(xmerl_xsd_type:facet_fun(integer,{maxInclusive,"2"}))("3"),
- ?line {error,{maxInclusive,"3",should_be_less_than_or_equal_with,"2"}} =
+ {error,{maxInclusive,"3",should_be_less_than_or_equal_with,"2"}} =
(xmerl_xsd_type:facet_fun(decimal,{maxInclusive,"2"}))("3"),
- ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
+ {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(decimal,{maxInclusive,"2.234"}))("2.235"),
- ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
+ {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(decimal,{maxInclusive,"-2.222"}))("-2.221"),
- ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
+ {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(double,{maxInclusive,"2.333"}))("INF"),
- ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
+ {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(double,{maxInclusive,"1E3"}))("1001"),
- ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
+ {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(float,{maxInclusive,"-0.1"}))("-0"),
- ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
+ {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(float,{maxInclusive,"0"}))("0.01"),
- ?line {ok,"3"} = (xmerl_xsd_type:facet_fun(integer,{maxInclusive,"3"}))("3"),
+ {ok,"3"} = (xmerl_xsd_type:facet_fun(integer,{maxInclusive,"3"}))("3"),
- ?line {ok,"+100000.00"} =
+ {ok,"+100000.00"} =
(xmerl_xsd_type:facet_fun(decimal,{maxInclusive,"1E6"}))("+100000.00"),
- ?line {ok,"12678967.543222"} =
+ {ok,"12678967.543222"} =
(xmerl_xsd_type:facet_fun(decimal,{maxInclusive,"12678967.543233"}))("12678967.543222"),
- ?line {ok,"3.2E-11"} =
+ {ok,"3.2E-11"} =
(xmerl_xsd_type:facet_fun(double,{maxInclusive,"2E-10"}))("3.2E-11"),
- ?line {ok,"10E20"} =
+ {ok,"10E20"} =
(xmerl_xsd_type:facet_fun(double,{maxInclusive,"INF"}))("10E20"),
- ?line {ok,"0.127"} =
+ {ok,"0.127"} =
(xmerl_xsd_type:facet_fun(double,{maxInclusive,"12.78e-2"}))("0.127"),
- ?line {ok,"1267.43233E12"} = (xmerl_xsd_type:facet_fun(float,{maxInclusive,"1267.43233E12"}))("1267.43233E12"),
- ?line {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{maxInclusive,"33E-25"}))("34E-26"),
+ {ok,"1267.43233E12"} = (xmerl_xsd_type:facet_fun(float,{maxInclusive,"1267.43233E12"}))("1267.43233E12"),
+ {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{maxInclusive,"33E-25"}))("34E-26"),
- ?line {ok,"2007-10-26T12:00:00+03:00"} =
+ {ok,"2007-10-26T12:00:00+03:00"} =
(xmerl_xsd_type:facet_fun(dateTime,{maxInclusive,"2007-10-26T12:00:00+03:00"}))("2007-10-26T12:00:00+03:00"),
- ?line {ok,"2007-10-26T11:00:00+03:00"} =
+ {ok,"2007-10-26T11:00:00+03:00"} =
(xmerl_xsd_type:facet_fun(dateTime,{maxInclusive,"2007-10-26T12:00:00+03:00"}))("2007-10-26T11:00:00+03:00"),
- ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
+ {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(dateTime,{maxInclusive,"2007-10-26T12:00:00+03:00"}))("2007-10-26T12:00:00"),
- ?line {ok,"P1Y2M3DT10H30M"} =
+ {ok,"P1Y2M3DT10H30M"} =
(xmerl_xsd_type:facet_fun(duration,{maxInclusive,"P1Y2M4D"}))("P1Y2M3DT10H30M"),
- ?line {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
+ {error,{maxInclusive,_,should_be_less_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(duration,{maxInclusive,"P1Y2M3DT10H"}))("P1Y2M3DT10H30M"),
ok.
-maxExclusive(suite) -> [];
maxExclusive(_Config) ->
- ?line {error,{maxExclusive,"2",not_less_than,"2"}} =
+ {error,{maxExclusive,"2",not_less_than,"2"}} =
(xmerl_xsd_type:facet_fun(integer,{maxExclusive,"2"}))("2"),
- ?line {error,{maxExclusive,"-19999",not_less_than,"-20000"}} =
+ {error,{maxExclusive,"-19999",not_less_than,"-20000"}} =
(xmerl_xsd_type:facet_fun(integer,{maxExclusive,"-20000"}))("-19999"),
- ?line {error,{maxExclusive,"3.0000",not_less_than,"2.9999"}} =
+ {error,{maxExclusive,"3.0000",not_less_than,"2.9999"}} =
(xmerl_xsd_type:facet_fun(decimal,{maxExclusive,"2.9999"}))("3.0000"),
- ?line {error,{maxExclusive,_,not_less_than,_}} =
+ {error,{maxExclusive,_,not_less_than,_}} =
(xmerl_xsd_type:facet_fun(decimal,{maxExclusive,"2.234"}))("2.234"),
- ?line {error,{maxExclusive,_,not_less_than,_}} =
+ {error,{maxExclusive,_,not_less_than,_}} =
(xmerl_xsd_type:facet_fun(decimal,{maxExclusive,"-2.22222222"}))("-2.22222222"),
- ?line {error,{maxExclusive,_,not_less_than,_}} =
+ {error,{maxExclusive,_,not_less_than,_}} =
(xmerl_xsd_type:facet_fun(double,{maxExclusive,"2.333E23"}))("INF"),
- ?line {error,{maxExclusive,_,not_less_than,_}} =
+ {error,{maxExclusive,_,not_less_than,_}} =
(xmerl_xsd_type:facet_fun(double,{maxExclusive,"1E3"}))("1000"),
- ?line {error,{maxExclusive,_,not_less_than,_}} =
+ {error,{maxExclusive,_,not_less_than,_}} =
(xmerl_xsd_type:facet_fun(double,{maxExclusive,"1E-13"}))("0.999E-12"),
- ?line {error,{maxExclusive,_,not_less_than,_}} =
+ {error,{maxExclusive,_,not_less_than,_}} =
(xmerl_xsd_type:facet_fun(float,{maxExclusive,"-0.1"}))("-0.01E1"),
- ?line {error,{maxExclusive,_,not_less_than,_}} =
+ {error,{maxExclusive,_,not_less_than,_}} =
(xmerl_xsd_type:facet_fun(float,{maxExclusive,"-1E-1"}))("-0"),
- ?line {ok,"-4"} = (xmerl_xsd_type:facet_fun(integer,{maxExclusive,"3"}))("-4"),
+ {ok,"-4"} = (xmerl_xsd_type:facet_fun(integer,{maxExclusive,"3"}))("-4"),
- ?line {ok,"+100000.00"} =
+ {ok,"+100000.00"} =
(xmerl_xsd_type:facet_fun(decimal,{maxExclusive,"1E6"}))("+100000.00"),
%% must support 18 digits
- ?line {ok,"12678967.5432323456"} =
+ {ok,"12678967.5432323456"} =
(xmerl_xsd_type:facet_fun(decimal,{maxExclusive,"12678967.5432323457"}))("12678967.5432323456"),
- ?line {ok,"3.2E-11"} =
+ {ok,"3.2E-11"} =
(xmerl_xsd_type:facet_fun(double,{maxExclusive,"2E-10"}))("3.2E-11"),
- ?line {ok,"10E20"} =
+ {ok,"10E20"} =
(xmerl_xsd_type:facet_fun(double,{maxExclusive,"INF"}))("10E20"),
- ?line {ok,"0.127"} =
+ {ok,"0.127"} =
(xmerl_xsd_type:facet_fun(double,{maxExclusive,"12.78e-2"}))("0.127"),
- ?line {ok,"1267.43233E11"} = (xmerl_xsd_type:facet_fun(float,{maxExclusive,"1267.43233E12"}))("1267.43233E11"),
- ?line {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{maxExclusive,"33E-25"}))("34E-26"),
+ {ok,"1267.43233E11"} = (xmerl_xsd_type:facet_fun(float,{maxExclusive,"1267.43233E12"}))("1267.43233E11"),
+ {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{maxExclusive,"33E-25"}))("34E-26"),
- ?line {ok,"P1Y2M3DT10H30M"} = (xmerl_xsd_type:facet_fun(duration,{maxExclusive,"P1Y2M4D"}))("P1Y2M3DT10H30M"),
+ {ok,"P1Y2M3DT10H30M"} = (xmerl_xsd_type:facet_fun(duration,{maxExclusive,"P1Y2M4D"}))("P1Y2M3DT10H30M"),
- ?line {ok,"2006-09-06T19:17:45Z"} = (xmerl_xsd_type:facet_fun(dateTime,{maxExclusive,"2006-09-06T19:17:46Z"}))("2006-09-06T19:17:45Z"),
+ {ok,"2006-09-06T19:17:45Z"} = (xmerl_xsd_type:facet_fun(dateTime,{maxExclusive,"2006-09-06T19:17:46Z"}))("2006-09-06T19:17:45Z"),
ok.
-minExclusive(suite) -> [];
minExclusive(_Config) ->
- ?line {error,{minExclusive,"2",not_greater_than,"2"}} =
+ {error,{minExclusive,"2",not_greater_than,"2"}} =
(xmerl_xsd_type:facet_fun(integer,{minExclusive,"2"}))("2"),
- ?line {error,{minExclusive,"-20001",not_greater_than,"-20000"}} =
+ {error,{minExclusive,"-20001",not_greater_than,"-20000"}} =
(xmerl_xsd_type:facet_fun(integer,{minExclusive,"-20000"}))("-20001"),
- ?line {error,{minExclusive,"2.9999",not_greater_than,"2.9999"}} =
+ {error,{minExclusive,"2.9999",not_greater_than,"2.9999"}} =
(xmerl_xsd_type:facet_fun(decimal,{minExclusive,"2.9999"}))("2.9999"),
- ?line {error,{minExclusive,_,not_greater_than,_}} =
+ {error,{minExclusive,_,not_greater_than,_}} =
(xmerl_xsd_type:facet_fun(decimal,{minExclusive,"-123456789.123456788"}))("-123456789.123456789"),
- ?line {error,{minExclusive,_,not_greater_than,_}} =
+ {error,{minExclusive,_,not_greater_than,_}} =
(xmerl_xsd_type:facet_fun(decimal,{minExclusive,"-2.222222000"}))("-2.22222222"),
- ?line {error,{minExclusive,_,not_greater_than,_}} =
+ {error,{minExclusive,_,not_greater_than,_}} =
(xmerl_xsd_type:facet_fun(double,{minExclusive,"INF"}))("2.333E23"),
- ?line {error,{minExclusive,_,not_greater_than,_}} =
+ {error,{minExclusive,_,not_greater_than,_}} =
(xmerl_xsd_type:facet_fun(double,{minExclusive,"1E3"}))("1000"),
- ?line {error,{minExclusive,_,not_greater_than,_}} =
+ {error,{minExclusive,_,not_greater_than,_}} =
(xmerl_xsd_type:facet_fun(double,{minExclusive,"1E-13"}))("0.999E-14"),
- ?line {error,{minExclusive,_,not_greater_than,_}} =
+ {error,{minExclusive,_,not_greater_than,_}} =
(xmerl_xsd_type:facet_fun(float,{minExclusive,"-0.1"}))("-0.01E1"),
- ?line {error,{minExclusive,_,not_greater_than,_}} =
+ {error,{minExclusive,_,not_greater_than,_}} =
(xmerl_xsd_type:facet_fun(float,{minExclusive,"-0"}))("-1E-1"),
- ?line {ok,"4"} = (xmerl_xsd_type:facet_fun(integer,{minExclusive,"-3"}))("4"),
+ {ok,"4"} = (xmerl_xsd_type:facet_fun(integer,{minExclusive,"-3"}))("4"),
- ?line {ok,"+1000001.00"} =
+ {ok,"+1000001.00"} =
(xmerl_xsd_type:facet_fun(decimal,{minExclusive,"1E6"}))("+1000001.00"),
%% must support 18 digits
- ?line {ok,"12678967.5432323456"} =
+ {ok,"12678967.5432323456"} =
(xmerl_xsd_type:facet_fun(decimal,{minExclusive,"12678967.54323234555"}))("12678967.5432323456"),
- ?line {ok,"3.2E-11"} =
+ {ok,"3.2E-11"} =
(xmerl_xsd_type:facet_fun(double,{minExclusive,"2E-12"}))("3.2E-11"),
- ?line {ok,"10E20"} =
+ {ok,"10E20"} =
(xmerl_xsd_type:facet_fun(double,{minExclusive,"-INF"}))("10E20"),
- ?line {ok,"0.1279"} =
+ {ok,"0.1279"} =
(xmerl_xsd_type:facet_fun(double,{minExclusive,"12.78e-2"}))("0.1279"),
- ?line {ok,"126743.233E11"} = (xmerl_xsd_type:facet_fun(float,{minExclusive,"1267.43233E12"}))("126743.233E11"),
- ?line {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{minExclusive,"33E-27"}))("34E-26"),
+ {ok,"126743.233E11"} = (xmerl_xsd_type:facet_fun(float,{minExclusive,"1267.43233E12"}))("126743.233E11"),
+ {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{minExclusive,"33E-27"}))("34E-26"),
- ?line {ok,"P1Y2M3DT10H30M"} = (xmerl_xsd_type:facet_fun(duration,{minExclusive,"P1Y2M3D"}))("P1Y2M3DT10H30M"),
+ {ok,"P1Y2M3DT10H30M"} = (xmerl_xsd_type:facet_fun(duration,{minExclusive,"P1Y2M3D"}))("P1Y2M3DT10H30M"),
- ?line {ok,"2006-09-06T19:17:45Z"} = (xmerl_xsd_type:facet_fun(dateTime,{minExclusive,"2006-09-06T19:17:44Z"}))("2006-09-06T19:17:45Z"),
+ {ok,"2006-09-06T19:17:45Z"} = (xmerl_xsd_type:facet_fun(dateTime,{minExclusive,"2006-09-06T19:17:44Z"}))("2006-09-06T19:17:45Z"),
ok.
-minInclusive(suite) -> [];
minInclusive(_Config) ->
- ?line {error,{minInclusive,"1",not_greater_than_or_equal_with,"2"}} =
+ {error,{minInclusive,"1",not_greater_than_or_equal_with,"2"}} =
(xmerl_xsd_type:facet_fun(integer,{minInclusive,"2"}))("1"),
- ?line {error,{minInclusive,"-20001",not_greater_than_or_equal_with,
+ {error,{minInclusive,"-20001",not_greater_than_or_equal_with,
"-20000"}} =
(xmerl_xsd_type:facet_fun(integer,{minInclusive,"-20000"}))("-20001"),
- ?line {error,{minInclusive,"2.9999",not_greater_than_or_equal_with,
+ {error,{minInclusive,"2.9999",not_greater_than_or_equal_with,
"2.99999"}} =
(xmerl_xsd_type:facet_fun(decimal,{minInclusive,"2.99999"}))("2.9999"),
- ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
+ {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(decimal,{minInclusive,"-123456789.123456788"}))("-123456789.123456789"),
- ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
+ {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(decimal,{minInclusive,"-2.222222000"}))("-2.22222222"),
- ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
+ {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(double,{minInclusive,"2.333E23"}))("-INF"),
- ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
+ {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(double,{minInclusive,"1E3"}))("100"),
- ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
+ {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(double,{minInclusive,"1E-13"}))("0.999E-14"),
- ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
+ {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(float,{minInclusive,"-0.1"}))("-0.1E1"),
- ?line {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
+ {error,{minInclusive,_,not_greater_than_or_equal_with,_}} =
(xmerl_xsd_type:facet_fun(float,{minInclusive,"-0"}))("-1E-1"),
- ?line {error,_}=(xmerl_xsd_type:facet_fun(float,{minInclusive,"10E-10"}))("10E-11"),
+ {error,_}=(xmerl_xsd_type:facet_fun(float,{minInclusive,"10E-10"}))("10E-11"),
- ?line {ok,"4"} = (xmerl_xsd_type:facet_fun(integer,{minInclusive,"-3"}))("4"),
+ {ok,"4"} = (xmerl_xsd_type:facet_fun(integer,{minInclusive,"-3"}))("4"),
- ?line {ok,"+1000000.00"} =
- (xmerl_xsd_type:facet_fun(decimal,{minInclusive,"1E6"}))("+1000000.00"),
+ {ok,"+1000000.00"} = (xmerl_xsd_type:facet_fun(decimal,{minInclusive,"1E6"}))("+1000000.00"),
%% must support 18 digits
- ?line {ok,"12678967.5432323456"} =
+ {ok,"12678967.5432323456"} =
(xmerl_xsd_type:facet_fun(decimal,{minInclusive,"12678967.54323234555"}))("12678967.5432323456"),
- ?line {ok,"3.2E-11"} =
- (xmerl_xsd_type:facet_fun(double,{minInclusive,"2E-12"}))("3.2E-11"),
- ?line {ok,"10E20"} =
- (xmerl_xsd_type:facet_fun(double,{minInclusive,"-INF"}))("10E20"),
- ?line {ok,"0.1279"} =
- (xmerl_xsd_type:facet_fun(double,{minInclusive,"12.78e-2"}))("0.1279"),
+ {ok,"3.2E-11"} = (xmerl_xsd_type:facet_fun(double,{minInclusive,"2E-12"}))("3.2E-11"),
+ {ok,"10E20"} = (xmerl_xsd_type:facet_fun(double,{minInclusive,"-INF"}))("10E20"),
+ {ok,"0.1279"} = (xmerl_xsd_type:facet_fun(double,{minInclusive,"12.78e-2"}))("0.1279"),
- ?line {ok,"126743.233E11"} = (xmerl_xsd_type:facet_fun(float,{minInclusive,"1267.43233E12"}))("126743.233E11"),
- ?line {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{minInclusive,"33E-27"}))("34E-26"),
- ?line {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{minInclusive,"340E-27"}))("34E-26"),
+ {ok,"126743.233E11"} = (xmerl_xsd_type:facet_fun(float,{minInclusive,"1267.43233E12"}))("126743.233E11"),
+ {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{minInclusive,"33E-27"}))("34E-26"),
+ {ok,"34E-26"} = (xmerl_xsd_type:facet_fun(float,{minInclusive,"340E-27"}))("34E-26"),
- ?line {ok,"P1Y2M3DT10H30M"} = (xmerl_xsd_type:facet_fun(duration,{minInclusive,"P1Y2M3D"}))("P1Y2M3DT10H30M"),
+ {ok,"P1Y2M3DT10H30M"} = (xmerl_xsd_type:facet_fun(duration,{minInclusive,"P1Y2M3D"}))("P1Y2M3DT10H30M"),
- ?line {ok,"2006-09-06T19:17:45Z"} = (xmerl_xsd_type:facet_fun(dateTime,{minInclusive,"2006-09-06T19:17:45Z"}))("2006-09-06T19:17:45Z"),
+ {ok,"2006-09-06T19:17:45Z"} = (xmerl_xsd_type:facet_fun(dateTime,{minInclusive,"2006-09-06T19:17:45Z"}))("2006-09-06T19:17:45Z"),
ok.
-totalDigits(suite) -> [];
totalDigits(_Config) ->
- ?line {error,{totalDigits,4,to_many_digits}} =
+ {error,{totalDigits,4,to_many_digits}} =
(xmerl_xsd_type:facet_fun(integer,{totalDigits,"3"}))("3456"),
- ?line {error,{totalDigits,4,to_many_digits}} =
+ {error,{totalDigits,4,to_many_digits}} =
(xmerl_xsd_type:facet_fun(decimal,{totalDigits,"3"}))("00345.600"),
- ?line {ok,"555"} =
- (xmerl_xsd_type:facet_fun(integer,{totalDigits,"3"}))("555"),
- ?line {ok,"555"} =
- (xmerl_xsd_type:facet_fun(integer,{totalDigits,"7"}))("555"),
- ?line {ok,"555.555"} =
- (xmerl_xsd_type:facet_fun(decimal,{totalDigits,"7"}))("555.555"),
- ?line {ok,"555.555000000"} =
- (xmerl_xsd_type:facet_fun(decimal,{totalDigits,"7"}))("555.555000000"),
+ {ok,"555"} = (xmerl_xsd_type:facet_fun(integer,{totalDigits,"3"}))("555"),
+ {ok,"555"} = (xmerl_xsd_type:facet_fun(integer,{totalDigits,"7"}))("555"),
+ {ok,"555.555"} = (xmerl_xsd_type:facet_fun(decimal,{totalDigits,"7"}))("555.555"),
+ {ok,"555.555000000"} = (xmerl_xsd_type:facet_fun(decimal,{totalDigits,"7"}))("555.555000000"),
ok.
-fractionDigits(suite) -> [];
fractionDigits(_Config) ->
- ?line {error,{fractionDigits,3,to_many_digits_in,"555.555000000"}} =
+ {error,{fractionDigits,3,to_many_digits_in,"555.555000000"}} =
(xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"2"}))("555.555000000"),
- ?line {error,{fractionDigits,6,to_many_digits_in,"555.555001"}} =
+ {error,{fractionDigits,6,to_many_digits_in,"555.555001"}} =
(xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"5"}))("555.555001"),
- ?line {ok,"555.55500"} =
- (xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"5"}))("555.55500"),
- ?line {ok,"555"} =
- (xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"5"}))("555"),
- ?line {ok,"555.000"} =
- (xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"0"}))("555.000"),
+ {ok,"555.55500"} = (xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"5"}))("555.55500"),
+ {ok,"555"} = (xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"5"}))("555"),
+ {ok,"555.000"} = (xmerl_xsd_type:facet_fun(decimal,{fractionDigits,"0"}))("555.000"),
- ?line {ok,"555"} =
- (xmerl_xsd_type:facet_fun(integer,{fractionDigits,"0"}))("555"),
+ {ok,"555"} = (xmerl_xsd_type:facet_fun(integer,{fractionDigits,"0"}))("555"),
ok.
%% some block testing of dateTime and duration comparisons
-compare_dateTime(suite) -> [];
compare_dateTime(_Config) ->
%% comparison results according to table in section 3.2.7.4 of XML
%% Schema part 2
- ?line lt = xmerl_xsd_type:compare_dateTime("2000-01-15T00:00:00",
- "2000-02-15T00:00:00"),
- ?line gt = xmerl_xsd_type:compare_dateTime("2000-02-15T00:00:00",
- "2000-01-15T00:00:00"),
-
- ?line lt = xmerl_xsd_type:compare_dateTime("2000-01-15T12:00:00",
- "2000-01-16T12:00:00Z"),
- ?line gt = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00Z",
- "2000-01-15T12:00:00"),
+ lt = xmerl_xsd_type:compare_dateTime("2000-01-15T00:00:00",
+ "2000-02-15T00:00:00"),
+
+ gt = xmerl_xsd_type:compare_dateTime("2000-02-15T00:00:00",
+ "2000-01-15T00:00:00"),
+
+ lt = xmerl_xsd_type:compare_dateTime("2000-01-15T12:00:00",
+ "2000-01-16T12:00:00Z"),
+
+ gt = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00Z",
+ "2000-01-15T12:00:00"),
- ?line indefinite = xmerl_xsd_type:compare_dateTime("2000-01-01T12:00:00",
- "1999-12-31T23:00:00Z"),
- ?line indefinite = xmerl_xsd_type:compare_dateTime("1999-12-31T23:00:00Z",
- "2000-01-01T12:00:00"),
+ indefinite = xmerl_xsd_type:compare_dateTime("2000-01-01T12:00:00",
+ "1999-12-31T23:00:00Z"),
+
+ indefinite = xmerl_xsd_type:compare_dateTime("1999-12-31T23:00:00Z",
+ "2000-01-01T12:00:00"),
- ?line indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00",
- "2000-01-16T12:00:00Z"),
- ?line indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00Z",
- "2000-01-16T12:00:00"),
+ indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00",
+ "2000-01-16T12:00:00Z"),
- ?line indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T00:00:00",
- "2000-01-16T12:00:00Z"),
- ?line indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00Z",
- "2000-01-16T00:00:00"),
+ indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00Z",
+ "2000-01-16T12:00:00"),
+
+ indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T00:00:00",
+ "2000-01-16T12:00:00Z"),
+ indefinite = xmerl_xsd_type:compare_dateTime("2000-01-16T12:00:00Z",
+ "2000-01-16T00:00:00"),
%% example in appendix E.1 in XML Schema part 2.
- ?line {2001,4,17,19,23,17.3000,{pos,0,0}} =
+ {2001,4,17,19,23,17.3000,{pos,0,0}} =
xmerl_xsd_type:add_duration2dateTime("2000-01-12T12:13:14Z",
"P1Y3M5DT7H10M3.3S").
-compare_duration(suite) -> [];
compare_duration(_Config) ->
%% order relations according to section 3.2.6.2 in XML Schema
%% part2.
- ?line gt = xmerl_xsd_type:compare_durations("P1Y","P364D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P1Y","P365D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P1Y","P366D"),
- ?line lt = xmerl_xsd_type:compare_durations("P1Y","P367D"),
-
- ?line gt = xmerl_xsd_type:compare_durations("P1M","P27D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P1M","P28D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P1M","P29D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P1M","P30D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P1M","P31D"),
- ?line lt = xmerl_xsd_type:compare_durations("P1M","P32D"),
-
- ?line gt = xmerl_xsd_type:compare_durations("P5M","P149D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P5M","P150D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P5M","P151D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P5M","P152D"),
- ?line indefinite = xmerl_xsd_type:compare_durations("P5M","P153D"),
- ?line lt = xmerl_xsd_type:compare_durations("P5M","P154D").
-
-xml_xsd(suite) -> [];
+ gt = xmerl_xsd_type:compare_durations("P1Y","P364D"),
+ indefinite = xmerl_xsd_type:compare_durations("P1Y","P365D"),
+ indefinite = xmerl_xsd_type:compare_durations("P1Y","P366D"),
+ lt = xmerl_xsd_type:compare_durations("P1Y","P367D"),
+
+ gt = xmerl_xsd_type:compare_durations("P1M","P27D"),
+ indefinite = xmerl_xsd_type:compare_durations("P1M","P28D"),
+ indefinite = xmerl_xsd_type:compare_durations("P1M","P29D"),
+ indefinite = xmerl_xsd_type:compare_durations("P1M","P30D"),
+ indefinite = xmerl_xsd_type:compare_durations("P1M","P31D"),
+ lt = xmerl_xsd_type:compare_durations("P1M","P32D"),
+
+ gt = xmerl_xsd_type:compare_durations("P5M","P149D"),
+ indefinite = xmerl_xsd_type:compare_durations("P5M","P150D"),
+ indefinite = xmerl_xsd_type:compare_durations("P5M","P151D"),
+ indefinite = xmerl_xsd_type:compare_durations("P5M","P152D"),
+ indefinite = xmerl_xsd_type:compare_durations("P5M","P153D"),
+ lt = xmerl_xsd_type:compare_durations("P5M","P154D").
+
xml_xsd(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = datadir( Config),
Options = [{fetch_path, [DataDir]}],
{ok, _} = xmerl_xsd:process_schema("xml.xsd", Options).
-xml_lang_attr(suite) -> [];
xml_lang_attr(Config) ->
- DataDir = ?config(data_dir, Config),
- {Element, _} = xmerl_scan:file(filename:join([DataDir, "book.xml"])),
+ DataDir = datadir( Config),
+ {Element, _} = xmerl_scan:file(filename:join([DataDir,"book.xml"])),
Options = [{fetch_path, [DataDir]}],
{ok, Schema} = xmerl_xsd:process_schema("book.xsd", Options),
{Element, _} = xmerl_xsd:validate(Element, Schema).
-po(suite) -> [];
po(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po.xml"]),[]),
- ?line {E,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "po.xsd"]),E,[]).
+ {E,_} = xmerl_scan:file(datadir_join(Config,["po.xml"]),[]),
+ {E,_} = xmerl_xsd:process_validate(datadir_join(Config,["po.xsd"]),E,[]).
-po1(suite) -> [];
po1(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po1.xml"]),[]),
- ?line {E2,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "po1.xsd"]),E,[]),
- ?line ok = xmerl_test_lib:cmp_element(E,E2).
+ {E,_} = xmerl_scan:file(datadir_join(Config,["po1.xml"]),[]),
+ {E2,_} = xmerl_xsd:process_validate(datadir_join(Config,["po1.xsd"]),E,[]),
+ ok = xmerl_test_lib:cmp_element(E,E2).
-po2(suite) -> [];
po2(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po2.xml"]),[]),
- ?line {E2,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "po1.xsd"]),E,[]),
- ?line ok = xmerl_test_lib:cmp_element(E,E2).
+ {E,_} = xmerl_scan:file(datadir_join(Config,["po2.xml"]),[]),
+ {E2,_} = xmerl_xsd:process_validate(datadir_join(Config,["po1.xsd"]),E,[]),
+ ok = xmerl_test_lib:cmp_element(E,E2).
-ipo(suite) -> [];
ipo(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "ipo.xml"]),[]),
- ?line {VE,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "ipo.xsd"]),E,[]),
- ?line ok = xmerl_test_lib:cmp_element(E,VE).
+ {E,_} = xmerl_scan:file(datadir_join(Config,["ipo.xml"]),[]),
+ {VE,_} = xmerl_xsd:process_validate(datadir_join(Config,["ipo.xsd"]),E,[]),
+ ok = xmerl_test_lib:cmp_element(E,VE).
-ipo_redefine(suite) -> [];
ipo_redefine(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "ipo_redefine.xml"]),[]),
- ?line {VE,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "ipo_redefine.xsd"]),E,[]),
- ?line ok = xmerl_test_lib:cmp_element(E,VE).
+ {E,_} = xmerl_scan:file(datadir_join(Config,["ipo_redefine.xml"]),[]),
+ {VE,_} = xmerl_xsd:process_validate(datadir_join(Config,["ipo_redefine.xsd"]),E,[]),
+ ok = xmerl_test_lib:cmp_element(E,VE).
-'4Q99'(suite) -> [];
'4Q99'(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "4Q99.xml"]),[]),
+ {E,_} = xmerl_scan:file(datadir_join(Config,["4Q99.xml"]),[]),
%% the import in report.xsd lacks schemaLocation, so the imported
%% namespace definitions have to be loaded separately.
- ?line {ok,S} =
- xmerl_xsd:process_schema(filename:join([?config(data_dir,Config),
- "ipo.xsd"])),
- ?line {VE,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "report.xsd"]),E,[{state,S}]),
- ?line ok = xmerl_test_lib:cmp_element(E,VE),
+ {ok,S} = xmerl_xsd:process_schema(datadir_join(Config,["ipo.xsd"])),
+ {VE,_} = xmerl_xsd:process_validate(datadir_join(Config,["report.xsd"]),E,[{state,S}]),
+ ok = xmerl_test_lib:cmp_element(E,VE),
%% report2.xsd has an import element with a schemaLocation attribute
- ?line {VE,_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "report2.xsd"]),E,[]).
+ {VE,_} = xmerl_xsd:process_validate(datadir_join(Config,["report2.xsd"]),E,[]).
-small(suite) -> [];
small(Config) ->
- ?line {E=#xmlElement{},_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "small.xml"]),[]),
- ?line {VE=#xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "small.xsd"]),E,[]),
- ?line #xmlElement{attributes=Atts,content=C} = VE,
- ?line C = E#xmlElement.content,
+ {E=#xmlElement{},_} = xmerl_scan:file(datadir_join(Config,["small.xml"]),[]),
+ {VE=#xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,["small.xsd"]),E,[]),
+ #xmlElement{attributes=Atts,content=C} = VE,
+ C = E#xmlElement.content,
%% The attribute orderStatus with default value was absent in small.xml
%% Test of validation "on the fly" when parsing XML.
- ?line {VE,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "small.xml"]),
- [{validation,schema},
- {schemaLocation,[{"small",filename:join(?config(data_dir,Config),"small.xsd")}]}]),
- ?line {VE,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "small.xml"]),
- [{validation,schema}]),
- ?line true = lists:keymember(orderStatus,#xmlAttribute.name,Atts).
-
-complexType1(suite) -> [];
+ {VE,_} = xmerl_scan:file(datadir_join(Config,["small.xml"]),
+ [{validation,schema},
+ {schemaLocation,[{"small",filename:join(datadir(Config),"small.xsd")}]}]),
+ {VE,_} = xmerl_scan:file(datadir_join(Config,["small.xml"]),
+ [{validation,schema}]),
+ true = lists:keymember(orderStatus,#xmlAttribute.name,Atts).
+
complexType1(Config) ->
- ?line {E1=#xmlElement{},_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "complexTypes1.xml"]),[]),
- ?line {VE1=#xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "complexTypes.xsd"]),E1,[]),
- ?line ok = xmerl_test_lib:cmp_element(E1,VE1),
-
- ?line {E2=#xmlElement{},_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "complexTypes2.xml"]),[]),
- ?line {VE2=#xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "complexTypes.xsd"]),E2,[]),
- ?line ok = xmerl_test_lib:cmp_element(E2,VE2).
-
-model_group_all(suite) -> [];
+ {E1=#xmlElement{},_} = xmerl_scan:file(datadir_join(Config,["complexTypes1.xml"]),[]),
+ {VE1=#xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,[ "complexTypes.xsd"]),E1,[]),
+ ok = xmerl_test_lib:cmp_element(E1,VE1),
+
+ {E2=#xmlElement{},_} = xmerl_scan:file(datadir_join(Config,["complexTypes2.xml"]),[]),
+ {VE2=#xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,["complexTypes.xsd"]),E2,[]),
+ ok = xmerl_test_lib:cmp_element(E2,VE2).
+
model_group_all(Config) ->
- ?line {E=#xmlElement{},_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po1.xml"]),[]),
- ?line {E,_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "po1_all.xsd"]),E,[]),
-
- ?line {E1=#xmlElement{},_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po1_all1.xml"]),[]),
- ?line {E1,_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "po1_all.xsd"]),E1,[]),
-
- ?line {E2=#xmlElement{},_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po1_all2.xml"]),[]),
- ?line {E2,_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "po1_all.xsd"]),E2,[]),
-
- ?line {E3=#xmlElement{},_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po1_all_err1.xml"]),[]),
- ?line {error,_Reason1} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "po1_all.xsd"]),E3,[]),
+ {E=#xmlElement{},_} = xmerl_scan:file(datadir_join(Config,["po1.xml"]),[]),
+ {E,_} = xmerl_xsd:process_validate(datadir_join(Config,["po1_all.xsd"]),E,[]),
+
+ {E1=#xmlElement{},_} = xmerl_scan:file(datadir_join(Config,["po1_all1.xml"]),[]),
+ {E1,_} = xmerl_xsd:process_validate(datadir_join(Config,["po1_all.xsd"]),E1,[]),
+
+ {E2=#xmlElement{},_} = xmerl_scan:file(datadir_join(Config,["po1_all2.xml"]),[]),
+ {E2,_} = xmerl_xsd:process_validate(datadir_join(Config,["po1_all.xsd"]),E2,[]),
+
+ {E3=#xmlElement{},_} = xmerl_scan:file(datadir_join(Config,["po1_all_err1.xml"]),[]),
+ {error,_Reason1} = xmerl_xsd:process_validate(datadir_join(Config,["po1_all.xsd"]),E3,[]),
- ?line {E4=#xmlElement{},_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po1_all_err2.xml"]),[]),
- ?line {error,_Reason2} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "po1_all.xsd"]),E4,[]).
-
-substitutionGroup(suite) -> [];
+ {E4=#xmlElement{},_} = xmerl_scan:file(datadir_join(Config,["po1_all_err2.xml"]),[]),
+ {error,_Reason2} = xmerl_xsd:process_validate(datadir_join(Config,["po1_all.xsd"]),E4,[]).
+
substitutionGroup(Config) ->
- ?line {E,_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "ipo_substGroup.xml"]),[]),
- ?line {E,_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "ipo_substGroup.xsd"]),E,[]).
-attributeGroup(suite) -> [];
+ {E,_} = xmerl_scan:file(datadir_join(Config,["ipo_substGroup.xml"]),[]),
+ {E,_} = xmerl_xsd:process_validate(datadir_join(Config,["ipo_substGroup.xsd"]),E,[]).
+
attributeGroup(Config) ->
- ?line {E,_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po_attrGroup.xml"]),[]),
- ?line {E,_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "po_attrGroup.xsd"]),E,[]).
-test_key1(suite) -> [];
+ {E,_} = xmerl_scan:file(datadir_join(Config,["po_attrGroup.xml"]),[]),
+ {E,_} = xmerl_xsd:process_validate(datadir_join(Config,["po_attrGroup.xsd"]),E,[]).
+
test_key1(Config) ->
- ?line {E,_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "vehicle2.xml"]),[]),
- ?line {E,_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "vehicle.xsd"]),E,[]),
-
- ?line {E2,_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "vehicle.xml"]),[]),
- ?line {error,L2} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "vehicle.xsd"]),E2,[]),
- ?line 10 = erlang:length(L2),
-
- ?line {E3 = #xmlElement{},_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),
- "vehicle3.xml"]),[]),
- ?line {E3 = #xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "vehicle.xsd"]),E3,[]).
-
-sis1(suite) -> [];
+ {E,_} = xmerl_scan:file(datadir_join(Config,["vehicle2.xml"]),[]),
+ {E,_} = xmerl_xsd:process_validate(datadir_join(Config,["vehicle.xsd"]),E,[]),
+
+ {E2,_} = xmerl_scan:file(datadir_join(Config,["vehicle.xml"]),[]),
+ {error,L2} = xmerl_xsd:process_validate(datadir_join(Config,["vehicle.xsd"]),E2,[]),
+ 10 = erlang:length(L2),
+
+ {E3 = #xmlElement{},_} = xmerl_scan:file(datadir_join(Config,["vehicle3.xml"]),[]),
+ {E3 = #xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,["vehicle.xsd"]),E3,[]).
+
sis1(Config) ->
- ?line {E,_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),sis,
- "instance.xml"]),[]),
- ?line {#xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),sis,
- "IntegratedSite.xsd"]),E,[]).
-sis2(suite) -> [];
+ {E,_} = xmerl_scan:file(datadir_join(Config,[sis,"instance.xml"]),[]),
+ {#xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,[sis,"IntegratedSite.xsd"]),E,[]).
+
sis2(Config) ->
- ?line {BS_E,_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),sis,
- "bs_mim.xml"]),[]),
- ?line {SW_E,_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),sis,
- "swm_mim.xml"]),[]),
- ?line {HW_E,_} =
- xmerl_scan:file(filename:join([?config(data_dir,Config),sis,
- "hwm_mim.xml"]),[]),
-
- ?line {#xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),sis,
- "mim.xsd"]),BS_E,[]),
- ?line {#xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),sis,
- "mim.xsd"]),SW_E,[]),
- ?line {#xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),sis,
- "mim.xsd"]),HW_E,[]).
-
-state2file_file2state(suite) -> [];
+ {BS_E,_} = xmerl_scan:file(datadir_join(Config,[sis,"bs_mim.xml"]),[]),
+ {SW_E,_} = xmerl_scan:file(datadir_join(Config,[sis,"swm_mim.xml"]),[]),
+ {HW_E,_} = xmerl_scan:file(datadir_join(Config,[sis,"hwm_mim.xml"]),[]),
+
+ {#xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,[sis,"mim.xsd"]),BS_E,[]),
+ {#xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,[sis,"mim.xsd"]),SW_E,[]),
+ {#xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,[sis,"mim.xsd"]),HW_E,[]).
+
state2file_file2state(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "po.xml"]),[]),
- ?line {ok,S} = xmerl_xsd:process_schema(filename:join([?config(data_dir,Config),"po.xsd"])),
- ?line {E,_} = xmerl_xsd:validate(E,S),
- ?line ok = xmerl_xsd:state2file(S),
- ?line {ok,S} = xmerl_xsd:file2state(filename:join([?config(data_dir,Config),"po.xss"])),
- ?line {E,_} = xmerl_xsd:validate(E,S),
+ {E,_} = xmerl_scan:file(datadir_join(Config,[ "po.xml"]),[]),
+ {ok,S} = xmerl_xsd:process_schema(datadir_join(Config,["po.xsd"])),
+ {E,_} = xmerl_xsd:validate(E,S),
+ ok = xmerl_xsd:state2file(S),
+ {ok,S} = xmerl_xsd:file2state(datadir_join(Config,["po.xss"])),
+ {E,_} = xmerl_xsd:validate(E,S),
- ?line ok = xmerl_xsd:state2file(S,filename:join([?config(data_dir,Config),"po_state"])),
- ?line {ok,S} = xmerl_xsd:file2state(filename:join([?config(data_dir,Config),"po_state.xss"])),
+ ok = xmerl_xsd:state2file(S,datadir_join(Config,["po_state"])),
+ {ok,S} = xmerl_xsd:file2state(datadir_join(Config,["po_state.xss"])),
- ?line {E,_} = xmerl_xsd:validate(E,S).
+ {E,_} = xmerl_xsd:validate(E,S).
-union(suite) -> [];
union(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "instance.xml"])),
-
- ?line {_E2 = #xmlElement{},_} = xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),"measCollec.xsd"]),E).
+ {E,_} = xmerl_scan:file(datadir_join(Config,["instance.xml"])),
+ {_E2 = #xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,["measCollec.xsd"]),E).
-
-ticket_6910(suite) -> [];
ticket_6910(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- sis,"dummy_action_mim.xml"])),
- ?line {_E2 = #xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- sis,"mim2.xsd"]),E).
-ticket_7165(suite) -> [];
+ {E,_} = xmerl_scan:file(datadir_join(Config,[sis,"dummy_action_mim.xml"])),
+ {_E2 = #xmlElement{},_} =
+ xmerl_xsd:process_validate(datadir_join(Config,[sis,"mim2.xsd"]),E).
+
ticket_7165(Config) ->
%% The validation option seems not to work
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "ticket_7288.xml"]),
- [{validation, schema}]),
+ {_E,_} = xmerl_scan:file(datadir_join(Config,["ticket_7288.xml"]),
+ [{validation, schema}]),
%% The option xsdbase gave {error, enoent}.
- ?line {ok,_} = xmerl_xsd:process_schema("CxDataType_Rel5.xsd", [{xsdbase, ?config(data_dir,Config)}]).
+ {ok,_} = xmerl_xsd:process_schema("CxDataType_Rel5.xsd", [{xsdbase, datadir(Config)}]).
-ticket_7190(suite) -> [];
ticket_7190(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),
- "int.xml"])),
- ?line {_E2 = #xmlElement{},_} =
- xmerl_xsd:process_validate(filename:join([?config(data_dir,Config),
- "simple_int.xsd"]),E).
-ticket_7288(suite) -> [];
+ {E,_} = xmerl_scan:file(datadir_join(Config,["int.xml"])),
+ {_E2 = #xmlElement{},_} = xmerl_xsd:process_validate(datadir_join(Config,["simple_int.xsd"]),E).
+
ticket_7288(Config) ->
%% The schema table in the state where deleted by xmerl_xsd:validate if there was an error.
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),"ticket_7288.xml"])),
-
- ?line {ok,S} = xmerl_xsd:process_schema(filename:join([?config(data_dir,Config),"CxDataType_Rel5.xsd"])),
-
- ?line {error, EL} = xmerl_xsd:validate(E, S),
-
- ?line {error, EL} = xmerl_xsd:validate(E, S).
+ {E,_} = xmerl_scan:file(datadir_join(Config,["ticket_7288.xml"])),
+ {ok,S} = xmerl_xsd:process_schema(datadir_join(Config,["CxDataType_Rel5.xsd"])),
+ {error, EL} = xmerl_xsd:validate(E, S),
+ {error, EL} = xmerl_xsd:validate(E, S).
-ticket_7736(suite) -> [];
ticket_7736(Config) ->
- DataDir = ?config(data_dir,Config),
- ?line {ok, State } =
- xmerl_xsd:process_schema(filename:join([DataDir,"enum_bug.xsd"])),
+ DataDir = datadir(Config),
+ {ok, State } = xmerl_xsd:process_schema(filename:join([DataDir,"enum_bug.xsd"])),
- ?line {Entity ,_} =
- xmerl_scan:file(filename:join([DataDir,"enum_bug.xml"])),
+ {Entity ,_} = xmerl_scan:file(filename:join([DataDir,"enum_bug.xml"])),
- ?line {#xmlElement{},_} = xmerl_xsd:validate(Entity, State).
+ {#xmlElement{},_} = xmerl_xsd:validate(Entity, State).
-ticket_8599(suite) -> [];
ticket_8599(Config) ->
- ?line {E,_} = xmerl_scan:file(filename:join([?config(data_dir,Config),"ticket_8599.xml"])),
+ {E,_} = xmerl_scan:file(datadir_join(Config,["ticket_8599.xml"])),
- ?line {ok, S} = xmerl_xsd:process_schema(filename:join([?config(data_dir,Config),"ticket_8599.xsd"])),
+ {ok, S} = xmerl_xsd:process_schema(datadir_join(Config,["ticket_8599.xsd"])),
- ?line {{xmlElement,persons,persons,_,_,_,_,_,_,_,_,_},_GlobalState} = xmerl_xsd:validate(E, S).
+ {{xmlElement,persons,persons,_,_,_,_,_,_,_,_,_},_GlobalState} = xmerl_xsd:validate(E, S).
-ticket_9410(suite) -> [];
ticket_9410(Config) ->
- file:set_cwd(filename:join([?config(data_dir,Config),".."])),
- ?line {ok, _S} = xmerl_xsd:process_schema("xmerl_xsd_SUITE_data/small.xsd").
+ file:set_cwd(datadir_join(Config,[".."])),
+ {ok, _S} = xmerl_xsd:process_schema("xmerl_xsd_SUITE_data/small.xsd").
+
+%%======================================================================
+%% Support Functions
+%%======================================================================
+
+privdir(Config) ->
+ proplists:get_value(priv_dir, Config).
+datadir(Config) ->
+ proplists:get_value(data_dir, Config).
+
+datadir_join(Config,Files) ->
+ filename:join([datadir(Config)|Files]).
diff --git a/lib/xmerl/test/xmerl_xsd_Sun2002-01-16_SUITE.erl b/lib/xmerl/test/xmerl_xsd_Sun2002-01-16_SUITE.erl
index 774950176f..2af6165ee6 100644
--- a/lib/xmerl/test/xmerl_xsd_Sun2002-01-16_SUITE.erl
+++ b/lib/xmerl/test/xmerl_xsd_Sun2002-01-16_SUITE.erl
@@ -48,53 +48,41 @@ all() ->
'Sun-xsiType-block-2', 'Sun-xsiType-block-3',
'Sun-xsiType-block-4', 'Sun-type-and-subst-1'].
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
+suite() ->
+ [{timetrap,{minutes,3}}].
%% initialization before the test suite
init_per_suite(Config) ->
- Dog=test_server:timetrap({minutes,10}),
- xmerl_xsd_lib:unpack(Config,sun),
- {ok,LogFile} = xmerl_xsd_lib:create_error_log_file(Config,sun),
- test_server:timetrap_cancel(Dog),
- [{suite,sun},{xmerl_error_log,LogFile}|Config].
+ ct:timetrap({minutes,10}),
+ xmerl_xsd_lib:unpack(Config,sun),
+ {ok,LogFile} = xmerl_xsd_lib:create_error_log_file(Config,sun),
+ [{suite,sun},{xmerl_error_log,LogFile}|Config].
end_per_suite(Config) ->
- xmerl_xsd_lib:rmdir(Config,sun),
- xmerl_xsd_lib:close_error_log_file(Config),
- ok.
+ xmerl_xsd_lib:rmdir(Config,sun),
+ xmerl_xsd_lib:close_error_log_file(Config),
+ ok.
%% initialization before each testcase
init_per_testcase(TestCase,Config) ->
- Dog=test_server:timetrap({minutes,3}),
- [{testcase,TestCase},{watchdog, Dog}|Config].
+ [{testcase,TestCase}|Config].
%% clean up after each testcase
-end_per_testcase(_Func,Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
+end_per_testcase(_Func,_Config) ->
+ ok.
%% ID Constranints. Very naive test of identity constraint
'Sun-idc001.nogen'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc001.nogen.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc001.nogen.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc001.nogen.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc001.nogen.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc001.nogen.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc001.nogen.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc001.nogen.v01.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc001.nogen.v01.xml','./suntest/SunTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
@@ -104,7 +92,7 @@ end_per_testcase(_Func,Config) ->
'Sun-idc002.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc002.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc002.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -114,7 +102,7 @@ end_per_testcase(_Func,Config) ->
'Sun-idc002b.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc002b.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc002b.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -124,7 +112,7 @@ end_per_testcase(_Func,Config) ->
'Sun-idc003.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc003.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc003.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -134,18 +122,18 @@ end_per_testcase(_Func,Config) ->
'Sun-idc004.nogen'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc004.nogen.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc004.nogen.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.n02.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.n02.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.n03.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.n03.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc004.nogen.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
@@ -155,7 +143,7 @@ end_per_testcase(_Func,Config) ->
'Sun-idc004a.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc004a.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc004a.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -165,14 +153,14 @@ end_per_testcase(_Func,Config) ->
'Sun-idc005.nogen'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc005.nogen.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc005.nogen.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc005.nogen.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc005.nogen.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc005.nogen.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc005.nogen.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc005.nogen.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc005.nogen.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
@@ -182,14 +170,14 @@ end_per_testcase(_Func,Config) ->
'Sun-idc006.nogen'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc006.nogen.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/idc006.nogen.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc006.nogen.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc006.nogen.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc006.nogen.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc006.nogen.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc006.nogen.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/idc006.nogen.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
@@ -199,32 +187,32 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd001'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd001.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd001.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n02.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n02.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n03.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n03.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n04.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n04.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n05.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n05.xml','./suntest/SunTestsAll',invalid,S0),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n06.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n06.xml','./suntest/SunTestsAll',invalid,S0),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n07.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.n07.xml','./suntest/SunTestsAll',invalid,S0),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.v01.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.v01.xml','./suntest/SunTestsAll',valid,S0),
ITResList10 = [ITRes9|ITResList9],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.v02.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.v02.xml','./suntest/SunTestsAll',valid,S0),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.v03.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd001.v03.xml','./suntest/SunTestsAll',valid,S0),
ITResList12 = [ITRes11|ITResList11],
@@ -234,18 +222,18 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd002'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd002.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd002.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.n02.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.n02.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.v01.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd002.v01.xml','./suntest/SunTestsAll',valid,S0),
ITResList5 = [ITRes4|ITResList4],
@@ -255,7 +243,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd003-1.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd003-1.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd003-1.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -265,7 +253,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd003-2.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd003-2.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd003-2.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -275,10 +263,10 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd003a'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd003a.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd003a.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003a.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003a.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
@@ -288,16 +276,16 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd003b'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd003b.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd003b.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003b.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003b.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003b.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003b.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003b.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003b.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003b.v01.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd003b.v01.xml','./suntest/SunTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
@@ -307,36 +295,36 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd004'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd004.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd004.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n02.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n02.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n03.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n03.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n04.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n04.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n05.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n05.xml','./suntest/SunTestsAll',invalid,S0),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n06.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n06.xml','./suntest/SunTestsAll',invalid,S0),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n07.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n07.xml','./suntest/SunTestsAll',invalid,S0),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n08.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n08.xml','./suntest/SunTestsAll',invalid,S0),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n09.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n09.xml','./suntest/SunTestsAll',invalid,S0),
ITResList10 = [ITRes9|ITResList9],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n10.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n10.xml','./suntest/SunTestsAll',invalid,S0),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n11.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n11.xml','./suntest/SunTestsAll',invalid,S0),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n12.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.n12.xml','./suntest/SunTestsAll',invalid,S0),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd004.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList14 = [ITRes13|ITResList13],
@@ -346,24 +334,24 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd005'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd005.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd005.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n02.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n02.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n03.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n03.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n04.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n04.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n05.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n05.xml','./suntest/SunTestsAll',invalid,S0),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n06.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.n06.xml','./suntest/SunTestsAll',invalid,S0),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd005.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList8 = [ITRes7|ITResList7],
@@ -373,32 +361,32 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd006'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd006.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd006.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n02.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n02.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n03.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n03.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n04.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n04.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n05.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n05.xml','./suntest/SunTestsAll',invalid,S0),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n06.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n06.xml','./suntest/SunTestsAll',invalid,S0),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n07.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n07.xml','./suntest/SunTestsAll',invalid,S0),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n08.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n08.xml','./suntest/SunTestsAll',invalid,S0),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n09.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n09.xml','./suntest/SunTestsAll',invalid,S0),
ITResList10 = [ITRes9|ITResList9],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n10.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.n10.xml','./suntest/SunTestsAll',invalid,S0),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.v00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd006.v00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList12 = [ITRes11|ITResList11],
@@ -408,16 +396,16 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd008'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd008.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd008.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd008.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd008.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd008.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd008.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd008.n02.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd008.n02.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd008.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd008.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList4 = [ITRes3|ITResList3],
@@ -427,20 +415,20 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd011'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd011.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd011.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n02.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n02.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n03.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n03.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n04.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.n04.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.v00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd011.v00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList6 = [ITRes5|ITResList5],
@@ -450,12 +438,12 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd012'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd012.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd012.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd012.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd012.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd012.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd012.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
@@ -465,7 +453,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd013.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd013.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd013.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -475,7 +463,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd014.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd014.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd014.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -485,7 +473,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd015.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd015.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd015.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -495,7 +483,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd016.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd016.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd016.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -505,7 +493,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd017.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd017.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd017.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -515,7 +503,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd018.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd018.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd018.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -525,7 +513,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd019.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd019.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd019.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -535,7 +523,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd020.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd020.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd020.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -545,7 +533,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd020-2.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd020-2.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd020-2.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -555,7 +543,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd020-3.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd020-3.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd020-3.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -565,7 +553,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd020-4.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd020-4.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd020-4.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -575,34 +563,34 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd021'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd021.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd021.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n01.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n01.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n02.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n02.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n03.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n03.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n04.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n04.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n05.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n05.xml','./suntest/SunTestsAll',invalid,S0),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n06.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n06.xml','./suntest/SunTestsAll',invalid,S0),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n07.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n07.xml','./suntest/SunTestsAll',invalid,S0),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n08.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n08.xml','./suntest/SunTestsAll',invalid,S0),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n09.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n09.xml','./suntest/SunTestsAll',invalid,S0),
ITResList10 = [ITRes9|ITResList9],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n10.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n10.xml','./suntest/SunTestsAll',invalid,S0),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n11.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.n11.xml','./suntest/SunTestsAll',invalid,S0),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd021.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList13 = [ITRes12|ITResList12],
@@ -612,12 +600,12 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd022'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd022.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd022.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd022.n00.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd022.n00.xml','./suntest/SunTestsAll',invalid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd022.v00.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsd022.v00.xml','./suntest/SunTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
@@ -627,7 +615,7 @@ end_per_testcase(_Func,Config) ->
'Sun-xsd023.e'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd023.e.xsd','./suntest/SunTestsAll',invalid),
+ {STRes0,_} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsd023.e.xsd','./suntest/SunTestsAll',invalid),
STResList1 = [STRes0|STResList0],
@@ -637,12 +625,12 @@ end_per_testcase(_Func,Config) ->
'Sun-xsiType1'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType1.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType1.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType1.v1.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType1.v1.xml','./suntest/SunTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType1.n1.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType1.n1.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
@@ -652,18 +640,18 @@ end_per_testcase(_Func,Config) ->
'Sun-xsiType-block-1'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType-block-1.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType-block-1.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.v1.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.v1.xml','./suntest/SunTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.n1.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.n1.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.n2.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.n2.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.n3.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.n3.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.n4.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-1.n4.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
@@ -673,18 +661,18 @@ end_per_testcase(_Func,Config) ->
'Sun-xsiType-block-2'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType-block-2.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType-block-2.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.v1.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.v1.xml','./suntest/SunTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.n1.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.n1.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.n2.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.n2.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.n3.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.n3.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.n4.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-2.n4.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
@@ -694,18 +682,18 @@ end_per_testcase(_Func,Config) ->
'Sun-xsiType-block-3'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType-block-3.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType-block-3.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.v1.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.v1.xml','./suntest/SunTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.n1.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.n1.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.n2.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.n2.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.n3.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.n3.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.n4.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-3.n4.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
@@ -715,18 +703,18 @@ end_per_testcase(_Func,Config) ->
'Sun-xsiType-block-4'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType-block-4.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/xsiType-block-4.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.v1.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.v1.xml','./suntest/SunTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.n1.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.n1.xml','./suntest/SunTestsAll',invalid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.n2.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.n2.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.n3.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.n3.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.n4.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/xsiType-block-4.n4.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
@@ -736,78 +724,76 @@ end_per_testcase(_Func,Config) ->
'Sun-type-and-subst-1'(Config) when is_list(Config) ->
STResList0 = [],
- ?line {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/type-and-subst-1.xsd','./suntest/SunTestsAll',valid),
+ {STRes0,S0} = xmerl_xsd_lib:schema_test(Config,'./suntest/SunTestsAll/type-and-subst-1.xsd','./suntest/SunTestsAll',valid),
STResList1 = [STRes0|STResList0],
ITResList0 = [],
- ?line ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.v1.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes0 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.v1.xml','./suntest/SunTestsAll',valid,S0),
ITResList1 = [ITRes0|ITResList0],
- ?line ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.v2.xml','./suntest/SunTestsAll',valid,S0),
+ ITRes1 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.v2.xml','./suntest/SunTestsAll',valid,S0),
ITResList2 = [ITRes1|ITResList1],
- ?line ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n1.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes2 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n1.xml','./suntest/SunTestsAll',invalid,S0),
ITResList3 = [ITRes2|ITResList2],
- ?line ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n2.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes3 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n2.xml','./suntest/SunTestsAll',invalid,S0),
ITResList4 = [ITRes3|ITResList3],
- ?line ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n3.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes4 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n3.xml','./suntest/SunTestsAll',invalid,S0),
ITResList5 = [ITRes4|ITResList4],
- ?line ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n4.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes5 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n4.xml','./suntest/SunTestsAll',invalid,S0),
ITResList6 = [ITRes5|ITResList5],
- ?line ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n5.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes6 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n5.xml','./suntest/SunTestsAll',invalid,S0),
ITResList7 = [ITRes6|ITResList6],
- ?line ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n6.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes7 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n6.xml','./suntest/SunTestsAll',invalid,S0),
ITResList8 = [ITRes7|ITResList7],
- ?line ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n7.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes8 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n7.xml','./suntest/SunTestsAll',invalid,S0),
ITResList9 = [ITRes8|ITResList8],
- ?line ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n8.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes9 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n8.xml','./suntest/SunTestsAll',invalid,S0),
ITResList10 = [ITRes9|ITResList9],
- ?line ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n9.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes10 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n9.xml','./suntest/SunTestsAll',invalid,S0),
ITResList11 = [ITRes10|ITResList10],
- ?line ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n10.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes11 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n10.xml','./suntest/SunTestsAll',invalid,S0),
ITResList12 = [ITRes11|ITResList11],
- ?line ITRes12 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n11.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes12 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n11.xml','./suntest/SunTestsAll',invalid,S0),
ITResList13 = [ITRes12|ITResList12],
- ?line ITRes13 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n12.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes13 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n12.xml','./suntest/SunTestsAll',invalid,S0),
ITResList14 = [ITRes13|ITResList13],
- ?line ITRes14 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n13.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes14 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n13.xml','./suntest/SunTestsAll',invalid,S0),
ITResList15 = [ITRes14|ITResList14],
- ?line ITRes15 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n14.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes15 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n14.xml','./suntest/SunTestsAll',invalid,S0),
ITResList16 = [ITRes15|ITResList15],
- ?line ITRes16 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n15.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes16 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n15.xml','./suntest/SunTestsAll',invalid,S0),
ITResList17 = [ITRes16|ITResList16],
- ?line ITRes17 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n16.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes17 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n16.xml','./suntest/SunTestsAll',invalid,S0),
ITResList18 = [ITRes17|ITResList17],
- ?line ITRes18 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n17.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes18 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n17.xml','./suntest/SunTestsAll',invalid,S0),
ITResList19 = [ITRes18|ITResList18],
- ?line ITRes19 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n18.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes19 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n18.xml','./suntest/SunTestsAll',invalid,S0),
ITResList20 = [ITRes19|ITResList19],
- ?line ITRes20 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n19.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes20 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n19.xml','./suntest/SunTestsAll',invalid,S0),
ITResList21 = [ITRes20|ITResList20],
- ?line ITRes21 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n20.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes21 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n20.xml','./suntest/SunTestsAll',invalid,S0),
ITResList22 = [ITRes21|ITResList21],
- ?line ITRes22 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n21.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes22 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n21.xml','./suntest/SunTestsAll',invalid,S0),
ITResList23 = [ITRes22|ITResList22],
- ?line ITRes23 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n22.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes23 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n22.xml','./suntest/SunTestsAll',invalid,S0),
ITResList24 = [ITRes23|ITResList23],
- ?line ITRes24 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n23.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes24 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n23.xml','./suntest/SunTestsAll',invalid,S0),
ITResList25 = [ITRes24|ITResList24],
- ?line ITRes25 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n24.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes25 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n24.xml','./suntest/SunTestsAll',invalid,S0),
ITResList26 = [ITRes25|ITResList25],
- ?line ITRes26 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n25.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes26 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n25.xml','./suntest/SunTestsAll',invalid,S0),
ITResList27 = [ITRes26|ITResList26],
- ?line ITRes27 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n26.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes27 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n26.xml','./suntest/SunTestsAll',invalid,S0),
ITResList28 = [ITRes27|ITResList27],
- ?line ITRes28 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n27.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes28 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n27.xml','./suntest/SunTestsAll',invalid,S0),
ITResList29 = [ITRes28|ITResList28],
- ?line ITRes29 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n28.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes29 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n28.xml','./suntest/SunTestsAll',invalid,S0),
ITResList30 = [ITRes29|ITResList29],
- ?line ITRes30 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n29.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes30 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n29.xml','./suntest/SunTestsAll',invalid,S0),
ITResList31 = [ITRes30|ITResList30],
- ?line ITRes31 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n30.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes31 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n30.xml','./suntest/SunTestsAll',invalid,S0),
ITResList32 = [ITRes31|ITResList31],
- ?line ITRes32 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n31.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes32 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n31.xml','./suntest/SunTestsAll',invalid,S0),
ITResList33 = [ITRes32|ITResList32],
- ?line ITRes33 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n32.xml','./suntest/SunTestsAll',invalid,S0),
+ ITRes33 = xmerl_xsd_lib:instance_test(Config,'./suntest/SunTestsAll/type-and-subst-1.n32.xml','./suntest/SunTestsAll',invalid,S0),
ITResList34 = [ITRes33|ITResList33],
-
xmerl_xsd_lib:compare_test_results(Config,STResList1,ITResList34).
-
diff --git a/lib/xmerl/test/xmerl_xsd_lib.erl b/lib/xmerl/test/xmerl_xsd_lib.erl
index e008086cc6..6006cf500f 100644
--- a/lib/xmerl/test/xmerl_xsd_lib.erl
+++ b/lib/xmerl/test/xmerl_xsd_lib.erl
@@ -43,10 +43,8 @@ compare_test_results(Config, ST, IT) ->
ResIT=compare_instance_test_results(IT),
io:format("compare_test_results:~n ST = ~p~n IT = ~p~n ResST = ~p~n ResIT = ~p~n",[ST, IT, ResST, ResIT]),
case process_reference_results(Config, ResST, ResIT) of
- error ->
- error;
- Diff ->
- return_results(Diff, ResST, ResIT, length(ST)+length(IT))
+ error -> error;
+ Diff -> return_results(Diff, ResST, ResIT, length(ST)+length(IT))
end.
compare_schema_test_results(ST) ->
@@ -58,7 +56,7 @@ return_results({SkippedN, Diff},{STErrs, _},{ITErrs, _}, TotN) ->
NumErrs = length(STErrs ++ ITErrs),
case NumErrs == TotN of
true when TotN > 0 ->
- ?line exit(all_tests_cases_failed);
+ exit(all_tests_cases_failed);
_ ->
return_results2(Diff, TotN - NumErrs, SkippedN, TotN)
end.
@@ -76,29 +74,26 @@ return_results2({[], [], [], []}, NumSucc, SkippedN, TotN) ->
{comment,io_lib:format("~p successful tests, ~p skipped tests of totally ~p test cases.~n",
[NumSucc, SkippedN, TotN])};
return_results2({NewFail, NewSuccess, NewMal, NewNotMal}, NumSucc, SkippedN, TotN) ->
- NFComm =
- case NewFail of
- [] -> "";
- _ -> io_lib:format("These ~p tests are new failures: ~p~n",
- [length(NewFail), NewFail])
- end,
- NSComm =
- case NewSuccess of
- [] -> "";
- _ -> io_lib:format("These ~p skipped tests are new succeeding cases: ~p~n",
- [length(NewSuccess), NewSuccess])
- end,
- NMComm =
- case NewMal of
- [] -> "";
- _ -> io_lib:format("These ~p tests are now malicious: ~p~n",
- [length(NewMal), NewMal])
- end,
- NNMComm =
- case NewNotMal of
- [] -> "";
- _ -> io_lib:format("These ~p skipped tests were malicious, but succeeds now: ~p~n", [length(NewNotMal), NewNotMal])
- end,
+ NFComm = case NewFail of
+ [] -> "";
+ _ -> io_lib:format("These ~p tests are new failures: ~p~n",
+ [length(NewFail), NewFail])
+ end,
+ NSComm = case NewSuccess of
+ [] -> "";
+ _ -> io_lib:format("These ~p skipped tests are new succeeding cases: ~p~n",
+ [length(NewSuccess), NewSuccess])
+ end,
+ NMComm = case NewMal of
+ [] -> "";
+ _ -> io_lib:format("These ~p tests are now malicious: ~p~n",
+ [length(NewMal), NewMal])
+ end,
+ NNMComm = case NewNotMal of
+ [] -> "";
+ _ -> io_lib:format("These ~p skipped tests were malicious, but succeeds now: ~p~n",
+ [length(NewNotMal), NewNotMal])
+ end,
ct:comment(io_lib:format("~p successful tests, ~p skipped tests of totally ~p test cases. ~n" ++
NFComm ++ NSComm ++ NMComm ++ NNMComm, [NumSucc, SkippedN, TotN])),
[] = NewFail.
@@ -109,7 +104,7 @@ return_results2({NewFail, NewSuccess, NewMal, NewNotMal}, NumSucc, SkippedN, Tot
process_reference_results(Config, {ErrsST, MalST}, {ErrsIT, MalIT}) ->
{RefFailed, RefMalicious} = xsd_reference_log(Config),
-io:format("A: ~p : ~p\n\n",[RefFailed, RefMalicious]),
+ io:format("A: ~p : ~p\n\n",[RefFailed, RefMalicious]),
AllErrs = ErrsST ++ ErrsIT,
AllMals = MalST ++ MalIT,
%% test cases failed now but succeeded in reference results.
@@ -121,44 +116,45 @@ io:format("A: ~p : ~p\n\n",[RefFailed, RefMalicious]),
%% test cases succeeded now but malicious in reference results.
NewNotMal = [X||X<-RefMalicious, lists:member(X, AllMals) == false],
write_in_log(Config, AllErrs, AllMals),
-% io:format("process_reference_results:~n AllErrs = ~p~n NewFailures = ~p~n",[AllErrs,NewFailures]),
+ % io:format("process_reference_results:~n AllErrs = ~p~n NewFailures = ~p~n",[AllErrs,NewFailures]),
{length(RefFailed) + length(RefMalicious), {NewFailures, NewSucceeds, NewMalicious, NewNotMal}}.
xsd_reference_log(Config) ->
- DataDir = ?config(data_dir, Config),
- Suite = ?config(suite, Config),
+ DataDir = datadir(Config),
+ Suite = proplists:get_value(suite, Config),
SuiteReferenceLog =
- filename:join([DataDir, lists:concat([Suite, "_failed_cases.log"])]),
-io:format("B: ~p\n\n",[SuiteReferenceLog]),
+ filename:join([DataDir,lists:concat([Suite,"_failed_cases.log"])]),
+ io:format("B: ~p\n\n",[SuiteReferenceLog]),
case file:consult(SuiteReferenceLog) of
- {ok,List} when is_list(List) ->
-io:format("C: ~p\n\n",[List]),
- case lists:keysearch(?config(testcase, Config), 1, List) of
- {value,{_, TCRefFails}} ->
-io:format("D: ~p\n\n",[TCRefFails]),
- TCRefFails;
- _ ->
-io:format("D: ~no result\n\n",[]),
- {[], []}
- end;
- _ ->
- {[], []}
+ {ok,List} when is_list(List) ->
+ io:format("C: ~p\n\n",[List]),
+ case lists:keysearch(proplists:get_value(testcase, Config), 1, List) of
+ {value,{_, TCRefFails}} ->
+ io:format("D: ~p\n\n",[TCRefFails]),
+ TCRefFails;
+ _ ->
+ io:format("D: ~no result\n\n",[]),
+ {[], []}
+ end;
+ _ ->
+ {[], []}
end.
write_in_log(_Config, [], []) ->
ok;
write_in_log(Config, AllErrs, AllMals) ->
- ?line LogFileName = ?config(xmerl_error_log, Config),
+ LogFileName = proplists:get_value(xmerl_error_log, Config),
{ok,IO}=file:open(LogFileName, [append]),
- ?line TestCase = ?config(testcase, Config),
+ TestCase = proplists:get_value(testcase, Config),
io:format(IO,"{~p,{~p,~p}}.~n", [TestCase, AllErrs, AllMals]),
file:close(IO),
ok.
schema_test(Config,FileName,XsdBase,Validity) ->
ModuleName = filename:basename(FileName),
- DataDir = ?config(data_dir, Config),
- case xmerl_xsd:process_schema(filename:join([DataDir, FileName]), [{xsdbase,filename:join([DataDir, XsdBase])}]) of
+ DataDir = datadir(Config),
+ case xmerl_xsd:process_schema(filename:join([DataDir, FileName]),
+ [{xsdbase,filename:join([DataDir, XsdBase])}]) of
{error, enoent} ->
{{ModuleName, enoent},#xsd_state{}};
{Ok, S} ->
@@ -181,49 +177,49 @@ schema_test(Config,FileName,XsdBase,Validity) ->
end.
schema_test(Config, FileName, XsdBase, Validity, AccState) ->
ModuleName = filename:basename(FileName),
- DataDir = ?config(data_dir, Config),
+ DataDir = datadir(Config),
case xmerl_xsd:process_schema(filename:join([DataDir, FileName]),
- [{xsdbase, filename:join([DataDir, XsdBase])}, AccState]) of
- {error, enoent} ->
- {{ModuleName, enoent}, AccState};
- {Ok, S} ->
- case Validity of
- valid when Ok == ok ->
- {{ModuleName, S#xsd_state.errors == []}, S};
- invalid when Ok == error ->
- {{ModuleName, no_internal_error(S)}, AccState};
- notKnown ->
- {{ModuleName, true}, AccState};
- valid ->
- {{ModuleName, false}, AccState};
- _ ->
- {{ModuleName, false}, S}
- end
+ [{xsdbase,filename:join([DataDir, XsdBase])}, AccState]) of
+ {error, enoent} ->
+ {{ModuleName, enoent}, AccState};
+ {Ok, S} ->
+ case Validity of
+ valid when Ok == ok ->
+ {{ModuleName, S#xsd_state.errors == []}, S};
+ invalid when Ok == error ->
+ {{ModuleName, no_internal_error(S)}, AccState};
+ notKnown ->
+ {{ModuleName, true}, AccState};
+ valid ->
+ {{ModuleName, false}, AccState};
+ _ ->
+ {{ModuleName, false}, S}
+ end
end.
instance_test(Config, FileName, XMLBase, Validity, State) ->
ModuleName = filename:basename(FileName),
- DataDir = ?config(data_dir, Config),
+ DataDir = datadir(Config),
case xmerl_scan:file(filename:join([DataDir, FileName]),
- [{xmlbase, filename:join([DataDir, XMLBase])}]) of
- {error, enoent} ->
- {ModuleName, enoent};
- {E, _} ->
- {VE, S2} = xmerl_xsd:validate(E, State),
- case Validity of
- valid when is_record(VE, xmlElement) ->
- case S2#xsd_state.errors of
- [] -> ok;
- _ -> io:format("test case ~p failed.~nValidity: ~p~nValidation result:~p~n", [FileName, Validity, VE])
- end,
- {ModuleName, S2#xsd_state.errors == []};
- invalid when VE == error ->
- {ModuleName, no_internal_error(S2)};
- notKnown ->
- {ModuleName, true};
- _ ->
- io:format("test case ~p failed.~nValidity: ~p~nValidation result:~p~n", [FileName, Validity, VE]),
- {ModuleName,false}
- end
+ [{xmlbase,filename:join([DataDir, XMLBase])}]) of
+ {error, enoent} ->
+ {ModuleName, enoent};
+ {E, _} ->
+ {VE, S2} = xmerl_xsd:validate(E, State),
+ case Validity of
+ valid when is_record(VE, xmlElement) ->
+ case S2#xsd_state.errors of
+ [] -> ok;
+ _ -> io:format("test case ~p failed.~nValidity: ~p~nValidation result:~p~n", [FileName, Validity, VE])
+ end,
+ {ModuleName, S2#xsd_state.errors == []};
+ invalid when VE == error ->
+ {ModuleName, no_internal_error(S2)};
+ notKnown ->
+ {ModuleName, true};
+ _ ->
+ io:format("test case ~p failed.~nValidity: ~p~nValidation result:~p~n", [FileName, Validity, VE]),
+ {ModuleName,false}
+ end
end.
no_internal_error(R) ->
@@ -236,8 +232,8 @@ no_internal_error(R) ->
unpack(Config, Suite) ->
TarFile = suite_tar(Suite),
- ?line file:set_cwd(?config(data_dir, Config)),
- ?line ok=erl_tar:extract(TarFile, [compressed]),
+ file:set_cwd(datadir(Config)),
+ ok=erl_tar:extract(TarFile, [compressed]),
change_mode(filename:rootname(TarFile, ".tar.gz")).
suite_tar(sun) ->
@@ -250,45 +246,45 @@ suite_tar(nist) ->
change_mode(Files) ->
change_mode3(Files).
change_mode2(Dir)->
- ?line {ok, CWD} = file:get_cwd(),
- ?line {ok, FileList} = file:list_dir(Dir),
- ?line file:set_cwd(filename:join([CWD, Dir])),
+ {ok, CWD} = file:get_cwd(),
+ {ok, FileList} = file:list_dir(Dir),
+ file:set_cwd(filename:join([CWD, Dir])),
change_mode3(FileList),
- ?line file:set_cwd(CWD).
+ file:set_cwd(CWD).
change_mode3([]) ->
ok;
change_mode3([F |Fs]) ->
case filelib:is_dir(F) of
- true ->
- chmod(F),
- change_mode2(F);
- _ ->
- chmod(F)
+ true ->
+ chmod(F),
+ change_mode2(F);
+ _ ->
+ chmod(F)
end,
change_mode3(Fs).
chmod(F) ->
case file:read_file_info(F) of
- {ok, FileInfo} ->
- Mode= FileInfo#file_info.mode,
- file:write_file_info(F, FileInfo#file_info{mode=8#00777 bor Mode});
- _ ->
- ok
+ {ok, FileInfo} ->
+ Mode= FileInfo#file_info.mode,
+ file:write_file_info(F, FileInfo#file_info{mode=8#00777 bor Mode});
+ _ ->
+ ok
end.
rmdir(Config, Suite) ->
- ?line file:set_cwd(?config(data_dir, Config)),
+ file:set_cwd(datadir(Config)),
SuiteDir = filename:rootname(suite_tar(Suite), ".tar.gz"),
- ?line ok=rm_f_(SuiteDir).
+ ok=rm_f_(SuiteDir).
%% Dir is a directory
rm_f_(Dir) ->
- ?line {ok, CWD} = file:get_cwd(),
- ?line {ok, FileList} = file:list_dir(Dir),
- ?line file:set_cwd(filename:join([CWD, Dir])),
+ {ok, CWD} = file:get_cwd(),
+ {ok, FileList} = file:list_dir(Dir),
+ file:set_cwd(filename:join([CWD, Dir])),
rm_files(FileList),
- ?line file:set_cwd(CWD),
- ? line ok = file:del_dir(Dir).
+ file:set_cwd(CWD),
+ ok = file:del_dir(Dir).
rm_files([])->
ok;
@@ -298,25 +294,30 @@ rm_files([F |Fs]) ->
rm_f_(F);
_ ->
io:format("rm_files: ~p~n", [F]),
- ?line ok = file:delete(F)
+ ok = file:delete(F)
end,
rm_files(Fs).
create_error_log_file(Config, Suite) ->
- ?line {{Y, M, D}, {H, Min, S}} = calendar:local_time(),
+ {{Y, M, D}, {H, Min, S}} = calendar:local_time(),
DTString=lists:concat([Y, "-", M,"-", D, "_", H, ".", Min, ".", S]),
FileName = lists:concat([Suite, "_", DTString, ".errorlog"]),
-%% ?line {ok,_IO} = file:open(filename:join([?config(priv_dir,Config),
+%% {ok,_IO} = file:open(filename:join([privdir(Config),
%% FileName]),[append]).
-%% ?line {ok,_IO} = file:open(FileName,[append]).
- io:format("error log file: ~p~n", [filename:join([?config(priv_dir,Config), FileName])]),
- {ok, filename:join([?config(priv_dir,Config), FileName])}.
+%% {ok,_IO} = file:open(FileName,[append]).
+ io:format("error log file: ~p~n", [filename:join([privdir(Config), FileName])]),
+ {ok, filename:join([privdir(Config), FileName])}.
close_error_log_file(Config) ->
case lists:keysearch(xmerl_error_log, 1, Config) of
- {value,{_, IO}} ->
- file:close(IO);
- _ ->
- ok
+ {value,{_, IO}} ->
+ file:close(IO);
+ _ ->
+ ok
end.
+
+privdir(Config) ->
+ proplists:get_value(priv_dir, Config).
+datadir(Config) ->
+ proplists:get_value(data_dir, Config).
diff --git a/lib/xmerl/vsn.mk b/lib/xmerl/vsn.mk
index a78a035a1f..95adaa5bb0 100644
--- a/lib/xmerl/vsn.mk
+++ b/lib/xmerl/vsn.mk
@@ -1 +1 @@
-XMERL_VSN = 1.3.11
+XMERL_VSN = 1.3.12
diff --git a/make/emd2exml.in b/make/emd2exml.in
index d84b967e40..b4e052fef5 100644..100755
--- a/make/emd2exml.in
+++ b/make/emd2exml.in
@@ -1,4 +1,4 @@
-#!/usr/bin/env escript
+#!@ENV@ escript
%% -*- erlang -*-
%%! -smp disable
@@ -39,7 +39,7 @@
%%% Created : 25 Feb 2010 by Rickard Green
%%%-------------------------------------------------------------------
--define(MAX_HEADING, 3).
+-define(MAX_HEADING, 6).
-define(DELAYED_COPYRIGHT_IX, 0).
-define(DELAYED_TOC_IX, 1).
@@ -80,7 +80,6 @@
copyright = false,
copyright_data = [],
have_h1 = false,
- smarker_ix = false,
toc = [],
ifile,
ofile}).
@@ -368,9 +367,9 @@ put_text(S, "%OTP-REL%"++Cs, CTag, EmTag, Acc) ->
put_text(S, [$\\,C|Cs], no, EmTag, Acc) ->
put_text(S, Cs, no, EmTag, [C|Acc]);
put_text(S, [C,C|Cs], no, b, Acc) when C == $*; C == $_ ->
- put_text(S, Cs, no, no, ["</b>"|Acc]);
+ put_text(S, Cs, no, no, ["</strong>"|Acc]);
put_text(S, [C,C|Cs], no, no, Acc) when C == $*; C == $_ ->
- put_text(S, Cs, no, b, ["<b>"|Acc]);
+ put_text(S, Cs, no, b, ["<strong>"|Acc]);
put_text(S, [C|Cs], no, em, Acc) when C == $*; C == $_ ->
put_text(S, Cs, no, no, ["</em>"|Acc]);
put_text(S, [C|Cs], no, no, Acc) when C == $*; C == $_ ->
@@ -614,8 +613,7 @@ strip_lvls(_N, Str) ->
put_title(S, 1, Title) ->
header(chk_h1(1, S#state{h = 1, mlist = [top]}), Title);
put_title(#state{mlist = MList0,
- toc = TOC,
- smarker_ix = SMarkerIX} = S0, H, Title) ->
+ toc = TOC} = S0, H, Title) ->
TitleStr = text(Title),
MList1 = [mk_lvl_marker(Title) | MList0],
Marker = mk_marker(MList1),
@@ -626,12 +624,10 @@ put_title(#state{mlist = MList0,
"<seealso marker=\"#",Marker,"\">",
TitleStr,"</seealso>",nl()],
h = H,
- mlist = MList1,
- smarker_ix = false}),
- true = is_integer(SMarkerIX),
- S2 = write_delayed(S1, SMarkerIX, ["<marker id=\"", Marker, "\"/>",nl()]),
+ mlist = MList1}),
+ S2 = put_chars(S1, ["<marker id=\"", Marker, "\"/>",nl()]),
{STag, ETag} = case H > ?MAX_HEADING of
- true -> {"<p><b>", "</b></p>"};
+ true -> {"<p><strong>", "</strong></p>"};
false -> {"<title>", "</title>"}
end,
put_chars(S2, [STag, TitleStr, ETag, nl()]).
@@ -701,15 +697,10 @@ sections_change(H, OldH, #state{mlist = [_|ML], toc = TOC} = S0) ->
begin_section(1, S) ->
put_line(S, "<chapter>");
-begin_section(H, #state{delayed_array_ix = IX} = S0) when H > ?MAX_HEADING ->
- false = S0#state.smarker_ix,
- true = is_integer(IX),
- put_delayed(S0#state{smarker_ix = IX, delayed_array_ix = IX+1}, IX);
-begin_section(H, #state{delayed_array_ix = IX} = S0) when H > 1 ->
- false = S0#state.smarker_ix,
- true = is_integer(IX),
- S1 = put_delayed(S0#state{smarker_ix = IX, delayed_array_ix = IX+1}, IX),
- put_line(S1, "<section>");
+begin_section(H, S) when H > ?MAX_HEADING ->
+ S;
+begin_section(H, S0) when H > 1 ->
+ put_line(S0, "<section>");
begin_section(_H, S) ->
S.
@@ -779,7 +770,7 @@ create_toc(#state{toc = TOC} = S) ->
{value,{"true",[]}} ->
write_delayed(S,
?DELAYED_TOC_IX,
- ["<p><b>Table of Contents</b></p>", nl(), TOC]);
+ ["<p><strong>Table of Contents</strong></p>", nl(), TOC]);
_ ->
write_delayed(S, ?DELAYED_TOC_IX, "")
end.
@@ -986,10 +977,10 @@ chg_bq_lvl(Lvl, #state{bq_lvl = Lvl} = S) ->
S;
chg_bq_lvl(NewLvl, #state{bq_lvl = Lvl} = S) when NewLvl > Lvl ->
chg_bq_lvl(NewLvl,
- put_line(end_p(end_code(S#state{bq_lvl = Lvl+1})), "<blockquote>"));
+ put_line(end_p(end_code(S#state{bq_lvl = Lvl+1})), "<quote>"));
chg_bq_lvl(NewLvl, #state{bq_lvl = Lvl} = S) ->
chg_bq_lvl(NewLvl,
- put_line(end_p(end_code(S#state{bq_lvl = Lvl-1})), "</blockquote>")).
+ put_line(end_p(end_code(S#state{bq_lvl = Lvl-1})), "</quote>")).
%%
%% Resolve link
diff --git a/make/make_emakefile b/make/make_emakefile.in
index 80c4acae94..fbca77887a 100755
--- a/make/make_emakefile
+++ b/make/make_emakefile.in
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#!@PERL@
# -*- cperl -*-
use strict;
diff --git a/make/otp.mk.in b/make/otp.mk.in
index c05c499d66..7e2945b561 100644
--- a/make/otp.mk.in
+++ b/make/otp.mk.in
@@ -4,7 +4,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2013. All Rights Reserved.
+# Copyright Ericsson AB 1997-2016. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -260,6 +260,7 @@ DEFAULT_GIF_FILES = $(HTMLDIR)/min_head.gif
XSLTPROC = @XSLTPROC@
FOP = @FOP@
XMLLINT = @XMLLINT@
+CP = @CP@
DOCGEN=$(ERL_TOP)/lib/erl_docgen
FOP_CONFIG = $(DOCGEN)/priv/fop.xconf
@@ -271,6 +272,8 @@ SPECS_EXTRACTOR=$(DOCGEN)/priv/bin/specs_gen.escript
# Extract specifications and types from Erlang source files (-spec, -type)
$(SPECDIR)/specs_%.xml: $(SPECS_ESRC)/%.erl
escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) -o$(dir $@) $<
+$(SPECDIR)/specs_%.xml: $(SPECS_ESRC)/gen/%.erl
+ escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) -o$(dir $@) $<
$(MAN1DIR)/%.1: %.xml
diff --git a/make/otp_release_targets.mk b/make/otp_release_targets.mk
index e104b68991..13b54645ad 100644
--- a/make/otp_release_targets.mk
+++ b/make/otp_release_targets.mk
@@ -120,7 +120,7 @@ xmllint: $(XML_FILES)
echo Checking $$i; \
xmllint --noout --valid --nodefdtd --loaddtd --path $(DOCGEN)/priv/dtd:$(DOCGEN)/priv/dtd_html_entities $$i; \
else\
- awk -F\" '/xi:include/ {print "echo Checking " $$2 ;print "xmllint --noout --valid --nodefdtd --loaddtd --path $(DOCGEN)/priv/dtd:$(DOCGEN)/priv/dtd_html_entities " $$2}' $$i |sh; \
+ awk -F\" '/xi:include/ {print "echo Checking " $$2 ;print "xmllint --noout --valid --nodefdtd --loaddtd --path $(DOCGEN)/priv/dtd:$(DOCGEN)/priv/dtd_html_entities:$(XMLLINT_SRCDIRS) " $$2}' $$i |sh; \
fi \
done
diff --git a/otp_build b/otp_build
index 1b79b0b0fe..28a229b101 100755
--- a/otp_build
+++ b/otp_build
@@ -1393,9 +1393,6 @@ case "$1" in
TYPE=opt
fi;
FLAVOR=$1
- if [ $FLAVOR = opt ]; then
- FLAVOR=plain
- fi
do_boot;;
update_primary)
case $version_controller in
diff --git a/otp_versions.table b/otp_versions.table
index a2bf7bf86e..9d7d0a78bb 100644
--- a/otp_versions.table
+++ b/otp_versions.table
@@ -1,4 +1,14 @@
-OTP-19.0 : asn1-4.0.3 common_test-1.12.2 compiler-7.0 cosEvent-2.2.1 cosEventDomain-1.2.1 cosFileTransfer-1.2.1 cosNotification-1.2.2 cosProperty-1.2.1 cosTime-1.2.2 cosTransactions-1.3.2 crypto-3.7 debugger-4.2 dialyzer-3.0 diameter-1.12 edoc-0.7.19 eldap-1.2.2 erl_docgen-0.4.3 erl_interface-3.9 erts-8.0 et-1.6 eunit-2.2.14 gs-1.6.1 hipe-3.15.1 ic-4.4.1 inets-6.3 jinterface-1.7 kernel-5.0 megaco-3.18.1 mnesia-4.14 observer-2.2 odbc-2.11.2 orber-3.8.2 os_mon-2.4.1 otp_mibs-1.1.1 parsetools-2.1.2 percept-0.8.12 public_key-1.2 reltool-0.7.1 runtime_tools-1.10 sasl-3.0 snmp-5.2.3 ssh-4.3 ssl-8.0 stdlib-3.0 syntax_tools-2.0 tools-2.8.4 typer-0.9.11 wx-1.7 xmerl-1.3.11 # :
+OTP-19.0.5 : kernel-5.0.2 # asn1-4.0.3 common_test-1.12.2 compiler-7.0.1 cosEvent-2.2.1 cosEventDomain-1.2.1 cosFileTransfer-1.2.1 cosNotification-1.2.2 cosProperty-1.2.1 cosTime-1.2.2 cosTransactions-1.3.2 crypto-3.7 debugger-4.2 dialyzer-3.0.1 diameter-1.12 edoc-0.7.19 eldap-1.2.2 erl_docgen-0.5 erl_interface-3.9 erts-8.0.3 et-1.6 eunit-2.3 gs-1.6.1 hipe-3.15.1 ic-4.4.1 inets-6.3.2 jinterface-1.7 megaco-3.18.1 mnesia-4.14 observer-2.2.1 odbc-2.11.2 orber-3.8.2 os_mon-2.4.1 otp_mibs-1.1.1 parsetools-2.1.2 percept-0.9 public_key-1.2 reltool-0.7.1 runtime_tools-1.10 sasl-3.0 snmp-5.2.3 ssh-4.3.1 ssl-8.0.1 stdlib-3.0.1 syntax_tools-2.0 tools-2.8.5 typer-0.9.11 wx-1.7 xmerl-1.3.11 :
+OTP-19.0.4 : erts-8.0.3 # asn1-4.0.3 common_test-1.12.2 compiler-7.0.1 cosEvent-2.2.1 cosEventDomain-1.2.1 cosFileTransfer-1.2.1 cosNotification-1.2.2 cosProperty-1.2.1 cosTime-1.2.2 cosTransactions-1.3.2 crypto-3.7 debugger-4.2 dialyzer-3.0.1 diameter-1.12 edoc-0.7.19 eldap-1.2.2 erl_docgen-0.5 erl_interface-3.9 et-1.6 eunit-2.3 gs-1.6.1 hipe-3.15.1 ic-4.4.1 inets-6.3.2 jinterface-1.7 kernel-5.0.1 megaco-3.18.1 mnesia-4.14 observer-2.2.1 odbc-2.11.2 orber-3.8.2 os_mon-2.4.1 otp_mibs-1.1.1 parsetools-2.1.2 percept-0.9 public_key-1.2 reltool-0.7.1 runtime_tools-1.10 sasl-3.0 snmp-5.2.3 ssh-4.3.1 ssl-8.0.1 stdlib-3.0.1 syntax_tools-2.0 tools-2.8.5 typer-0.9.11 wx-1.7 xmerl-1.3.11 :
+OTP-19.0.3 : inets-6.3.2 kernel-5.0.1 ssl-8.0.1 # asn1-4.0.3 common_test-1.12.2 compiler-7.0.1 cosEvent-2.2.1 cosEventDomain-1.2.1 cosFileTransfer-1.2.1 cosNotification-1.2.2 cosProperty-1.2.1 cosTime-1.2.2 cosTransactions-1.3.2 crypto-3.7 debugger-4.2 dialyzer-3.0.1 diameter-1.12 edoc-0.7.19 eldap-1.2.2 erl_docgen-0.5 erl_interface-3.9 erts-8.0.2 et-1.6 eunit-2.3 gs-1.6.1 hipe-3.15.1 ic-4.4.1 jinterface-1.7 megaco-3.18.1 mnesia-4.14 observer-2.2.1 odbc-2.11.2 orber-3.8.2 os_mon-2.4.1 otp_mibs-1.1.1 parsetools-2.1.2 percept-0.9 public_key-1.2 reltool-0.7.1 runtime_tools-1.10 sasl-3.0 snmp-5.2.3 ssh-4.3.1 stdlib-3.0.1 syntax_tools-2.0 tools-2.8.5 typer-0.9.11 wx-1.7 xmerl-1.3.11 :
+OTP-19.0.2 : compiler-7.0.1 erts-8.0.2 stdlib-3.0.1 # asn1-4.0.3 common_test-1.12.2 cosEvent-2.2.1 cosEventDomain-1.2.1 cosFileTransfer-1.2.1 cosNotification-1.2.2 cosProperty-1.2.1 cosTime-1.2.2 cosTransactions-1.3.2 crypto-3.7 debugger-4.2 dialyzer-3.0.1 diameter-1.12 edoc-0.7.19 eldap-1.2.2 erl_docgen-0.5 erl_interface-3.9 et-1.6 eunit-2.3 gs-1.6.1 hipe-3.15.1 ic-4.4.1 inets-6.3.1 jinterface-1.7 kernel-5.0 megaco-3.18.1 mnesia-4.14 observer-2.2.1 odbc-2.11.2 orber-3.8.2 os_mon-2.4.1 otp_mibs-1.1.1 parsetools-2.1.2 percept-0.9 public_key-1.2 reltool-0.7.1 runtime_tools-1.10 sasl-3.0 snmp-5.2.3 ssh-4.3.1 ssl-8.0 syntax_tools-2.0 tools-2.8.5 typer-0.9.11 wx-1.7 xmerl-1.3.11 :
+OTP-19.0.1 : dialyzer-3.0.1 erts-8.0.1 inets-6.3.1 observer-2.2.1 ssh-4.3.1 tools-2.8.5 # asn1-4.0.3 common_test-1.12.2 compiler-7.0 cosEvent-2.2.1 cosEventDomain-1.2.1 cosFileTransfer-1.2.1 cosNotification-1.2.2 cosProperty-1.2.1 cosTime-1.2.2 cosTransactions-1.3.2 crypto-3.7 debugger-4.2 diameter-1.12 edoc-0.7.19 eldap-1.2.2 erl_docgen-0.5 erl_interface-3.9 et-1.6 eunit-2.3 gs-1.6.1 hipe-3.15.1 ic-4.4.1 jinterface-1.7 kernel-5.0 megaco-3.18.1 mnesia-4.14 odbc-2.11.2 orber-3.8.2 os_mon-2.4.1 otp_mibs-1.1.1 parsetools-2.1.2 percept-0.9 public_key-1.2 reltool-0.7.1 runtime_tools-1.10 sasl-3.0 snmp-5.2.3 ssl-8.0 stdlib-3.0 syntax_tools-2.0 typer-0.9.11 wx-1.7 xmerl-1.3.11 :
+OTP-19.0 : asn1-4.0.3 common_test-1.12.2 compiler-7.0 cosEvent-2.2.1 cosEventDomain-1.2.1 cosFileTransfer-1.2.1 cosNotification-1.2.2 cosProperty-1.2.1 cosTime-1.2.2 cosTransactions-1.3.2 crypto-3.7 debugger-4.2 dialyzer-3.0 diameter-1.12 edoc-0.7.19 eldap-1.2.2 erl_docgen-0.5 erl_interface-3.9 erts-8.0 et-1.6 eunit-2.3 gs-1.6.1 hipe-3.15.1 ic-4.4.1 inets-6.3 jinterface-1.7 kernel-5.0 megaco-3.18.1 mnesia-4.14 observer-2.2 odbc-2.11.2 orber-3.8.2 os_mon-2.4.1 otp_mibs-1.1.1 parsetools-2.1.2 percept-0.9 public_key-1.2 reltool-0.7.1 runtime_tools-1.10 sasl-3.0 snmp-5.2.3 ssh-4.3 ssl-8.0 stdlib-3.0 syntax_tools-2.0 tools-2.8.4 typer-0.9.11 wx-1.7 xmerl-1.3.11 # :
+OTP-18.3.4.4 : erts-7.3.1.2 # asn1-4.0.2 common_test-1.12.1.1 compiler-6.0.3 cosEvent-2.2 cosEventDomain-1.2 cosFileTransfer-1.2 cosNotification-1.2.1 cosProperty-1.2 cosTime-1.2.1 cosTransactions-1.3.1 crypto-3.6.3 debugger-4.1.2 dialyzer-2.9 diameter-1.11.2 edoc-0.7.18 eldap-1.2.1 erl_docgen-0.4.2 erl_interface-3.8.2 et-1.5.1 eunit-2.2.13 gs-1.6 hipe-3.15 ic-4.4 inets-6.2.4 jinterface-1.6.1 kernel-4.2 megaco-3.18 mnesia-4.13.4 observer-2.1.2 odbc-2.11.1 orber-3.8.1 os_mon-2.4 ose-1.1 otp_mibs-1.1 parsetools-2.1.1 percept-0.8.11 public_key-1.1.1 reltool-0.7 runtime_tools-1.9.3 sasl-2.7 snmp-5.2.2 ssh-4.2.2.2 ssl-7.3.3.1 stdlib-2.8 syntax_tools-1.7 test_server-3.10 tools-2.8.3 typer-0.9.10 webtool-0.9.1 wx-1.6.1 xmerl-1.3.10 :
+OTP-18.3.4.3 : ssh-4.2.2.2 # asn1-4.0.2 common_test-1.12.1.1 compiler-6.0.3 cosEvent-2.2 cosEventDomain-1.2 cosFileTransfer-1.2 cosNotification-1.2.1 cosProperty-1.2 cosTime-1.2.1 cosTransactions-1.3.1 crypto-3.6.3 debugger-4.1.2 dialyzer-2.9 diameter-1.11.2 edoc-0.7.18 eldap-1.2.1 erl_docgen-0.4.2 erl_interface-3.8.2 erts-7.3.1.1 et-1.5.1 eunit-2.2.13 gs-1.6 hipe-3.15 ic-4.4 inets-6.2.4 jinterface-1.6.1 kernel-4.2 megaco-3.18 mnesia-4.13.4 observer-2.1.2 odbc-2.11.1 orber-3.8.1 os_mon-2.4 ose-1.1 otp_mibs-1.1 parsetools-2.1.1 percept-0.8.11 public_key-1.1.1 reltool-0.7 runtime_tools-1.9.3 sasl-2.7 snmp-5.2.2 ssl-7.3.3.1 stdlib-2.8 syntax_tools-1.7 test_server-3.10 tools-2.8.3 typer-0.9.10 webtool-0.9.1 wx-1.6.1 xmerl-1.3.10 :
+OTP-18.3.4.2 : common_test-1.12.1.1 erts-7.3.1.1 ssl-7.3.3.1 # asn1-4.0.2 compiler-6.0.3 cosEvent-2.2 cosEventDomain-1.2 cosFileTransfer-1.2 cosNotification-1.2.1 cosProperty-1.2 cosTime-1.2.1 cosTransactions-1.3.1 crypto-3.6.3 debugger-4.1.2 dialyzer-2.9 diameter-1.11.2 edoc-0.7.18 eldap-1.2.1 erl_docgen-0.4.2 erl_interface-3.8.2 et-1.5.1 eunit-2.2.13 gs-1.6 hipe-3.15 ic-4.4 inets-6.2.4 jinterface-1.6.1 kernel-4.2 megaco-3.18 mnesia-4.13.4 observer-2.1.2 odbc-2.11.1 orber-3.8.1 os_mon-2.4 ose-1.1 otp_mibs-1.1 parsetools-2.1.1 percept-0.8.11 public_key-1.1.1 reltool-0.7 runtime_tools-1.9.3 sasl-2.7 snmp-5.2.2 ssh-4.2.2.1 stdlib-2.8 syntax_tools-1.7 test_server-3.10 tools-2.8.3 typer-0.9.10 webtool-0.9.1 wx-1.6.1 xmerl-1.3.10 :
+OTP-18.3.4.1 : ssh-4.2.2.1 # asn1-4.0.2 common_test-1.12.1 compiler-6.0.3 cosEvent-2.2 cosEventDomain-1.2 cosFileTransfer-1.2 cosNotification-1.2.1 cosProperty-1.2 cosTime-1.2.1 cosTransactions-1.3.1 crypto-3.6.3 debugger-4.1.2 dialyzer-2.9 diameter-1.11.2 edoc-0.7.18 eldap-1.2.1 erl_docgen-0.4.2 erl_interface-3.8.2 erts-7.3.1 et-1.5.1 eunit-2.2.13 gs-1.6 hipe-3.15 ic-4.4 inets-6.2.4 jinterface-1.6.1 kernel-4.2 megaco-3.18 mnesia-4.13.4 observer-2.1.2 odbc-2.11.1 orber-3.8.1 os_mon-2.4 ose-1.1 otp_mibs-1.1 parsetools-2.1.1 percept-0.8.11 public_key-1.1.1 reltool-0.7 runtime_tools-1.9.3 sasl-2.7 snmp-5.2.2 ssl-7.3.3 stdlib-2.8 syntax_tools-1.7 test_server-3.10 tools-2.8.3 typer-0.9.10 webtool-0.9.1 wx-1.6.1 xmerl-1.3.10 :
+OTP-18.3.4 : inets-6.2.4 ssl-7.3.3 # asn1-4.0.2 common_test-1.12.1 compiler-6.0.3 cosEvent-2.2 cosEventDomain-1.2 cosFileTransfer-1.2 cosNotification-1.2.1 cosProperty-1.2 cosTime-1.2.1 cosTransactions-1.3.1 crypto-3.6.3 debugger-4.1.2 dialyzer-2.9 diameter-1.11.2 edoc-0.7.18 eldap-1.2.1 erl_docgen-0.4.2 erl_interface-3.8.2 erts-7.3.1 et-1.5.1 eunit-2.2.13 gs-1.6 hipe-3.15 ic-4.4 jinterface-1.6.1 kernel-4.2 megaco-3.18 mnesia-4.13.4 observer-2.1.2 odbc-2.11.1 orber-3.8.1 os_mon-2.4 ose-1.1 otp_mibs-1.1 parsetools-2.1.1 percept-0.8.11 public_key-1.1.1 reltool-0.7 runtime_tools-1.9.3 sasl-2.7 snmp-5.2.2 ssh-4.2.2 stdlib-2.8 syntax_tools-1.7 test_server-3.10 tools-2.8.3 typer-0.9.10 webtool-0.9.1 wx-1.6.1 xmerl-1.3.10 :
OTP-18.3.3 : common_test-1.12.1 inets-6.2.3 ssl-7.3.2 # asn1-4.0.2 compiler-6.0.3 cosEvent-2.2 cosEventDomain-1.2 cosFileTransfer-1.2 cosNotification-1.2.1 cosProperty-1.2 cosTime-1.2.1 cosTransactions-1.3.1 crypto-3.6.3 debugger-4.1.2 dialyzer-2.9 diameter-1.11.2 edoc-0.7.18 eldap-1.2.1 erl_docgen-0.4.2 erl_interface-3.8.2 erts-7.3.1 et-1.5.1 eunit-2.2.13 gs-1.6 hipe-3.15 ic-4.4 jinterface-1.6.1 kernel-4.2 megaco-3.18 mnesia-4.13.4 observer-2.1.2 odbc-2.11.1 orber-3.8.1 os_mon-2.4 ose-1.1 otp_mibs-1.1 parsetools-2.1.1 percept-0.8.11 public_key-1.1.1 reltool-0.7 runtime_tools-1.9.3 sasl-2.7 snmp-5.2.2 ssh-4.2.2 stdlib-2.8 syntax_tools-1.7 test_server-3.10 tools-2.8.3 typer-0.9.10 webtool-0.9.1 wx-1.6.1 xmerl-1.3.10 :
OTP-18.3.2 : inets-6.2.2 ssl-7.3.1 # asn1-4.0.2 common_test-1.12 compiler-6.0.3 cosEvent-2.2 cosEventDomain-1.2 cosFileTransfer-1.2 cosNotification-1.2.1 cosProperty-1.2 cosTime-1.2.1 cosTransactions-1.3.1 crypto-3.6.3 debugger-4.1.2 dialyzer-2.9 diameter-1.11.2 edoc-0.7.18 eldap-1.2.1 erl_docgen-0.4.2 erl_interface-3.8.2 erts-7.3.1 et-1.5.1 eunit-2.2.13 gs-1.6 hipe-3.15 ic-4.4 jinterface-1.6.1 kernel-4.2 megaco-3.18 mnesia-4.13.4 observer-2.1.2 odbc-2.11.1 orber-3.8.1 os_mon-2.4 ose-1.1 otp_mibs-1.1 parsetools-2.1.1 percept-0.8.11 public_key-1.1.1 reltool-0.7 runtime_tools-1.9.3 sasl-2.7 snmp-5.2.2 ssh-4.2.2 stdlib-2.8 syntax_tools-1.7 test_server-3.10 tools-2.8.3 typer-0.9.10 webtool-0.9.1 wx-1.6.1 xmerl-1.3.10 :
OTP-18.3.1 : erts-7.3.1 inets-6.2.1 mnesia-4.13.4 # asn1-4.0.2 common_test-1.12 compiler-6.0.3 cosEvent-2.2 cosEventDomain-1.2 cosFileTransfer-1.2 cosNotification-1.2.1 cosProperty-1.2 cosTime-1.2.1 cosTransactions-1.3.1 crypto-3.6.3 debugger-4.1.2 dialyzer-2.9 diameter-1.11.2 edoc-0.7.18 eldap-1.2.1 erl_docgen-0.4.2 erl_interface-3.8.2 et-1.5.1 eunit-2.2.13 gs-1.6 hipe-3.15 ic-4.4 jinterface-1.6.1 kernel-4.2 megaco-3.18 observer-2.1.2 odbc-2.11.1 orber-3.8.1 os_mon-2.4 ose-1.1 otp_mibs-1.1 parsetools-2.1.1 percept-0.8.11 public_key-1.1.1 reltool-0.7 runtime_tools-1.9.3 sasl-2.7 snmp-5.2.2 ssh-4.2.2 ssl-7.3 stdlib-2.8 syntax_tools-1.7 test_server-3.10 tools-2.8.3 typer-0.9.10 webtool-0.9.1 wx-1.6.1 xmerl-1.3.10 :
diff --git a/system/README b/system/README
deleted file mode 100644
index 97ec9177c4..0000000000
--- a/system/README
+++ /dev/null
@@ -1,78 +0,0 @@
-Erlang/OTP December 6, 2013
-
-
-Release of Erlang 5.10.4/OTP R16B03
-
-
-1. GENERAL
- -------
-
-1.1 Installation Guide
-
- The installation guide can be found in
-
- <inst-root>doc/installation_guide/users_guide.html
-
-1.2 Java
-
- The Java sources were compiled using Java version 1.5.
-
-1.3 Disk space
-
- An installation of Erlang/OTP needs approximately 300 MB of
- disk space.
-
-1.4 The package contains HTML documentation. You can also get this
- documentation preformatted for printing in PDF format from
-
- http://www.erlang.se/doc/
-
- This site also contains HTML documentation for older releases
- as a reference.
-
-1.5 The Erlang system can run old BEAM files compiled with R11B-2
- or later (and almost all BEAM files compiled with R11B-0 or
- R11B-1). BEAM files from R10B or earlier are not supported.
-
- To get the best performance, you should recompile your
- application code with the R15B compiler.
-
-
-2. NOTES ABOUT THE SOLARIS VERSION
- -------------------------------
-
-2.1 For the Sparc Solaris environment, Solaris10 (2.10) and above is
- supported. The emulator runs on older Solaris 8 (2.8) versions
- and above. Older Solaris versions are neither tested nor supported.
- Also an Ultrasparc (sun4u architecture) is required.
-
-
-3. NOTES ABOUT THE VXWORKS VERSION
- -------------------------------
-
-3.1 The platform VxWorks is discontinued in the sense that only the
- libraries (erl_interface and ic's libraries) are supported. The VxWorks
- release is still packaged as a full release, but no support will be
- available for anything but the communication libraries.
-
-4 NOTES ABOUT THE LINUX VERSIONS
- -----------------------------
-
-4.1 The following linux distributions/version combinations are supported
- and tested:
-
- SuSE 10.1 x86, SuSE 10.1 x86_64, SuSE 11.0 x86, SuSE 11.0 x86_64
-
-5. APPLICATIONS NOTES
- ------------------
-
-
-6. MORE INFORMATION
- ----------------
-
- Commercial customers please visit http://www.erlang.se to find
- releases and more information. Commercial support is given through
-
- Open source users please visit http://www.erlang.org and direct
- problems to the open source community through the mailing list.
diff --git a/system/doc/design_principles/statem.xml b/system/doc/design_principles/statem.xml
index b63327291d..57e47431b8 100644
--- a/system/doc/design_principles/statem.xml
+++ b/system/doc/design_principles/statem.xml
@@ -33,7 +33,7 @@
<p>
This section is to be read with the
<seealso marker="stdlib:gen_statem"><c>gen_statem(3)</c></seealso>
- manual page in <c>STDLIB</c>, where all interface functions and callback
+ manual page in STDLIB, where all interface functions and callback
functions are described in detail.
</p>
<note>
@@ -52,7 +52,7 @@
<section>
<title>Event-Driven State Machines</title>
<p>
- Established Automata theory does not deal much with
+ Established Automata Theory does not deal much with
how a state transition is triggered,
but assumes that the output is a function
of the input (and the state) and that they are
@@ -226,11 +226,10 @@ handle_event(EventType, EventContent, State, Data) ->
-module(code_lock).
-behaviour(gen_statem).
-define(NAME, code_lock).
--define(CALLBACK_MODE, state_functions).
-export([start_link/1]).
-export([button/1]).
--export([init/1,terminate/3,code_change/4]).
+-export([init/1,callback_mode/0,terminate/3,code_change/4]).
-export([locked/3,open/3]).
start_link(Code) ->
@@ -242,7 +241,10 @@ button(Digit) ->
init(Code) ->
do_lock(),
Data = #{code => Code, remaining => Code},
- {?CALLBACK_MODE,locked,Data}.
+ {ok,locked,Data}.
+
+callback_mode() ->
+ state_functions.
locked(
cast, {button,Digit},
@@ -273,7 +275,7 @@ terminate(_Reason, State, _Data) ->
State =/= locked andalso do_lock(),
ok.
code_change(_Vsn, State, Data, _Extra) ->
- {?CALLBACK_MODE,State,Data}.
+ {ok,State,Data}.
]]></code>
<p>The code is explained in the next sections.</p>
</section>
@@ -308,7 +310,7 @@ start_link(Code) ->
as <c>{global,Name}</c>, then the <c>gen_statem</c> is
registered using
<seealso marker="kernel:global#register_name/2"><c>global:register_name/2</c></seealso>
- in <c>Kernel</c>.
+ in Kernel.
</p>
</item>
<item>
@@ -343,14 +345,8 @@ start_link(Code) ->
<p>
If name registration succeeds, the new <c>gen_statem</c> process
calls callback function <c>code_lock:init(Code)</c>.
- This function is expected to return <c>{CallbackMode,State,Data}</c>,
- where
- <seealso marker="#callback_modes"><c>CallbackMode</c></seealso>
- selects callback module state function mode, in this case
- <seealso marker="stdlib:gen_statem#type-callback_mode"><c>state_functions</c></seealso>
- through macro <c>?CALLBACK_MODE</c>. That is, each state
- has got its own handler function.
- <c>State</c> is the initial state of the <c>gen_statem</c>,
+ This function is expected to return <c>{ok,State,Data}</c>,
+ where <c>State</c> is the initial state of the <c>gen_statem</c>,
in this case <c>locked</c>; assuming that the door is locked to begin
with. <c>Data</c> is the internal server data of the <c>gen_statem</c>.
Here the server data is a <seealso marker="stdlib:maps">map</seealso>
@@ -359,11 +355,12 @@ start_link(Code) ->
that stores the remaining correct button sequence
(the same as the <c>code</c> to begin with).
</p>
+
<code type="erl"><![CDATA[
init(Code) ->
do_lock(),
Data = #{code => Code, remaining => Code},
- {?CALLBACK_MODE,locked,Data}.
+ {ok,locked,Data}.
]]></code>
<p>Function
<seealso marker="stdlib:gen_statem#start_link/3"><c>gen_statem:start_link</c></seealso>
@@ -380,6 +377,21 @@ init(Code) ->
can be used to start a standalone <c>gen_statem</c>, that is,
a <c>gen_statem</c> that is not part of a supervision tree.
</p>
+
+ <code type="erl"><![CDATA[
+callback_mode() ->
+ state_functions.
+ ]]></code>
+ <p>
+ Function
+ <seealso marker="stdlib:gen_statem#Module:callback_mode/0"><c>Module:callback_mode/0</c></seealso>
+ selects the
+ <seealso marker="#callback_modes"><c>CallbackMode</c></seealso>
+ for the callback module, in this case
+ <seealso marker="stdlib:gen_statem#type-callback_mode"><c>state_functions</c></seealso>.
+ That is, each state has got its own handler function.
+ </p>
+
</section>
<!-- =================================================================== -->
@@ -533,12 +545,11 @@ handle_event({call,From}, code_length, #{code := Code} = Data) ->
</p>
<code type="erl"><![CDATA[
...
--define(CALLBACK_MODE, handle_event_function).
-
-...
-export([handle_event/4]).
...
+callback_mode() ->
+ handle_event_function.
handle_event(cast, {button,Digit}, State, #{code := Code} = Data) ->
case State of
@@ -597,7 +608,7 @@ init(Args) ->
callback function <c>terminate(shutdown, State, Data)</c>.
</p>
<p>
- In the following example, function <c>terminate/3</c>
+ In this example, function <c>terminate/3</c>
locks the door if it is open, so we do not accidentally leave the door
open when the supervision tree terminates:
</p>
@@ -755,7 +766,7 @@ stop() ->
Suppose that we do not want a button to lock the door,
instead we want to ignore button events in the <c>open</c> state.
Then we start a timer when entering the <c>open</c> state
- and waits for it to expire while ignoring button events:
+ and wait for it to expire while ignoring button events:
</p>
<code type="erl"><![CDATA[
...
@@ -962,16 +973,13 @@ do_unlock() ->
</p>
<code type="erl"><![CDATA[
...
--define(CALLBACK_MODE, state_functions).
-
-...
-
init(Code) ->
process_flag(trap_exit, true),
Data = #{code => Code},
- enter(?CALLBACK_MODE, locked, Data).
+ enter(ok, locked, Data).
-...
+callback_mode() ->
+ state_functions.
locked(internal, enter, _Data) ->
do_lock(),
@@ -1027,11 +1035,10 @@ enter(Tag, State, Data) ->
-module(code_lock).
-behaviour(gen_statem).
-define(NAME, code_lock_2).
--define(CALLBACK_MODE, state_functions).
-export([start_link/1,stop/0]).
-export([button/1,code_length/0]).
--export([init/1,terminate/3,code_change/4]).
+-export([init/1,callback_mode/0,terminate/3,code_change/4]).
-export([locked/3,open/3]).
start_link(Code) ->
@@ -1047,7 +1054,10 @@ code_length() ->
init(Code) ->
process_flag(trap_exit, true),
Data = #{code => Code},
- enter(?CALLBACK_MODE, locked, Data).
+ enter(ok, locked, Data).
+
+callback_mode() ->
+ state_functions.
locked(internal, enter, #{code := Code} = Data) ->
do_lock(),
@@ -1091,7 +1101,7 @@ terminate(_Reason, State, _Data) ->
State =/= locked andalso do_lock(),
ok.
code_change(_Vsn, State, Data, _Extra) ->
- {?CALLBACK_MODE,State,Data}.
+ {ok,State,Data}.
]]></code>
</section>
@@ -1106,12 +1116,11 @@ code_change(_Vsn, State, Data, _Extra) ->
</p>
<code type="erl"><![CDATA[
...
--define(CALLBACK_MODE, handle_event_function).
-
-...
-export([handle_event/4]).
...
+callback_mode() ->
+ handle_event_function.
%% State: locked
handle_event(internal, enter, locked, #{code := Code} = Data) ->
@@ -1208,7 +1217,8 @@ format_status(Opt, [_PDict,State,Data]) ->
<seealso marker="stdlib:gen_statem#Module:format_status/2"><c>Module:format_status/2</c></seealso>
function. If you do not, a default implementation is used that
does the same as this example function without filtering
- the <c>Data</c> term, that is, <c>StateData = {State,Data}</c>.
+ the <c>Data</c> term, that is, <c>StateData = {State,Data}</c>,
+ in this example containing sensitive information.
</p>
</section>
@@ -1273,11 +1283,10 @@ format_status(Opt, [_PDict,State,Data]) ->
-module(code_lock).
-behaviour(gen_statem).
-define(NAME, code_lock_3).
--define(CALLBACK_MODE, handle_event_function).
-export([start_link/2,stop/0]).
-export([button/1,code_length/0,set_lock_button/1]).
--export([init/1,terminate/3,code_change/4,format_status/2]).
+-export([init/1,callback_mode/0,terminate/3,code_change/4,format_status/2]).
-export([handle_event/4]).
start_link(Code, LockButton) ->
@@ -1296,7 +1305,10 @@ set_lock_button(LockButton) ->
init({Code,LockButton}) ->
process_flag(trap_exit, true),
Data = #{code => Code, remaining => undefined, timer => undefined},
- enter(?CALLBACK_MODE, {locked,LockButton}, Data, []).
+ enter(ok, {locked,LockButton}, Data, []).
+
+callback_mode() ->
+ handle_event_function.
handle_event(
{call,From}, {set_lock_button,NewLockButton},
@@ -1366,7 +1378,7 @@ terminate(_Reason, State, _Data) ->
State =/= locked andalso do_lock(),
ok.
code_change(_Vsn, State, Data, _Extra) ->
- {?CALLBACK_MODE,State,Data}.
+ {ok,State,Data}.
format_status(Opt, [_PDict,State,Data]) ->
StateData =
{State,
diff --git a/system/doc/design_principles/sup_princ.xml b/system/doc/design_principles/sup_princ.xml
index a77b3964fc..0a24e97950 100644
--- a/system/doc/design_principles/sup_princ.xml
+++ b/system/doc/design_principles/sup_princ.xml
@@ -80,8 +80,8 @@ init(_Args) ->
</section>
<section>
- <title>Supervisor Flags</title>
<marker id="flags"/>
+ <title>Supervisor Flags</title>
<p>This is the type definition for the supervisor flags:</p>
<code type="none"><![CDATA[
sup_flags() = #{strategy => strategy(), % optional
@@ -106,9 +106,8 @@ sup_flags() = #{strategy => strategy(), % optional
</section>
<section>
- <marker id="strategy"></marker>
+ <marker id="strategy"/>
<title>Restart Strategy</title>
-
<p> The restart strategy is specified by
the <c>strategy</c> key in the supervisor flags map returned by
the callback function <c>init</c>:</p>
diff --git a/system/doc/efficiency_guide/advanced.xml b/system/doc/efficiency_guide/advanced.xml
index 3609b8d88e..eee2648f34 100644
--- a/system/doc/efficiency_guide/advanced.xml
+++ b/system/doc/efficiency_guide/advanced.xml
@@ -35,8 +35,7 @@
how much memory different data types and operations require. It is
implementation-dependent how much memory the Erlang data types and
other items consume, but the following table shows some figures for
- the <c>erts-5.2</c> system in R9B. There have been no significant
- changes in R13.</p>
+ the <c>erts-8.0</c> system in OTP 19.0.</p>
<p>The unit of measurement is memory words. There exists both a
32-bit and a 64-bit implementation. A word is therefore 4 bytes or
@@ -87,6 +86,19 @@
<cell>2 words + the size of each element.</cell>
</row>
<row>
+ <cell>Small Map</cell>
+ <cell>4 words + 2 words per entry (key and value) + the size of each key and value pair.</cell>
+ </row>
+ <row>
+ <cell>Large Map</cell>
+ <cell>
+ At least, 2 words + 2 x <c>N</c> words + 2 x log16(<c>N</c>) words +
+ the size of each key and value pair, where <c>N</c> is the number of pairs in the Map.
+ A large Map is represented as a tree internally where each node in the tree is a
+ "sparse tuple" of arity 16.
+ </cell>
+ </row>
+ <row>
<cell>Pid</cell>
<cell>1 word for a process identifier from the current local node
+ 5 words for a process identifier from another node.<br></br>
@@ -122,7 +134,7 @@
</row>
<row>
<cell>Erlang process</cell>
- <cell>327 words when spawned, including a heap of 233 words.</cell>
+ <cell>338 words when spawned, including a heap of 233 words.</cell>
</row>
<tcaption>Memory Size of Different Data Types</tcaption>
</table>
@@ -144,7 +156,7 @@
<seealso marker="erts:erl#max_processes"><c>+P</c></seealso>
command-line flag in the
<seealso marker="erts:erl"><c>erl(1)</c></seealso>
- manual page in <c>erts</c>.</cell>
+ manual page in ERTS.</cell>
</row>
<row>
<cell>Known nodes</cell>
@@ -224,7 +236,7 @@
<seealso marker="erts:erl#max_ports"><c>+Q</c></seealso>
command-line flag in the
<seealso marker="erts:erl"><c>erl(1)</c></seealso> manual page
- in <c>erts</c>.</cell>
+ in ERTS.</cell>
</row>
<row>
<cell><marker id="files_sockets"></marker>Open files and
diff --git a/system/doc/efficiency_guide/profiling.xml b/system/doc/efficiency_guide/profiling.xml
index 1f3d503170..bf50a03fa6 100644
--- a/system/doc/efficiency_guide/profiling.xml
+++ b/system/doc/efficiency_guide/profiling.xml
@@ -128,7 +128,7 @@
performance impact. Using <c>fprof</c> is just a matter of
calling a few library functions, see the
<seealso marker="tools:fprof">fprof</seealso> manual page in
- <c>tools</c> .<c>fprof</c> was introduced in R8.</p>
+ Tools .<c>fprof</c> was introduced in R8.</p>
</section>
<section>
@@ -138,7 +138,7 @@
and in which function calls this time has been spent. Time is
shown as percentage of total time and absolute time. For more
information, see the <seealso marker="tools:eprof">eprof</seealso>
- manual page in <c>tools</c>.</p>
+ manual page in Tools.</p>
</section>
<section>
@@ -152,7 +152,7 @@
optimization. Using <c>cover</c> is just a matter of calling a
few library functions, see the
<seealso marker="tools:cover">cover</seealso> manual page in
- <c>tools</c>.</p>
+ Tools.</p>
</section>
<section>
@@ -165,7 +165,7 @@
any modules to profile (compared with <c>cover</c>).
For more information, see the
<seealso marker="tools:cprof">cprof</seealso> manual page in
- <c>tools</c>.</p>
+ Tools.</p>
</section>
<section>
diff --git a/system/doc/embedded/embedded_nt.xml b/system/doc/embedded/embedded_nt.xml
index a1a4b90f3c..8e05100585 100644
--- a/system/doc/embedded/embedded_nt.xml
+++ b/system/doc/embedded/embedded_nt.xml
@@ -62,7 +62,7 @@
<p>For Windows NT running on standard PCs with ISA and/or PCI bus,
an extension card with a hardware watchdog can be installed.</p>
<p>For more information, see the <c>heart(3)</c> manual page in
- <c>kernel</c>.</p>
+ Kernel.</p>
</section>
</section>
@@ -72,7 +72,7 @@
to install the Erlang process as a Windows system service.
This service can start after Windows NT has booted.</p>
<p>For more information, see the <c>erlsrv</c> manual page
- in <c>erts</c>.</p>
+ in ERTS.</p>
</section>
</chapter>
diff --git a/system/doc/embedded/embedded_solaris.xml b/system/doc/embedded/embedded_solaris.xml
index f8febcc546..eaa334fb39 100644
--- a/system/doc/embedded/embedded_solaris.xml
+++ b/system/doc/embedded/embedded_solaris.xml
@@ -190,7 +190,7 @@ esac</pre>
the onboard hardware watchdog can be activated,
provided a VME bus driver is added to the operating system
(see also Installation Problems).</p>
- <p>See also the <c>heart(3)</c> manual page in <c>kernel</c>.</p>
+ <p>See also the <c>heart(3)</c> manual page in Kernel.</p>
</section>
<section>
@@ -206,7 +206,7 @@ esac</pre>
<pre>
chown 0 /usr/sbin/reboot
chmod 4755 /usr/sbin/reboot</pre>
- <p>See also the <c>heart(3)</c> manual page in <c>kernel</c>.</p>
+ <p>See also the <c>heart(3)</c> manual page in Kernel.</p>
</section>
<section>
@@ -413,8 +413,8 @@ chown root mod_syslog]]></code>
<section>
<title>Related Documents</title>
<p>See the <c>os_mon(3)</c> application,
- the <c>application(3)</c> manual page in <c>kernel</c>,
- and the <c>erl(1)</c> manual page in <c>erts</c>.</p>
+ the <c>application(3)</c> manual page in Kernel,
+ and the <c>erl(1)</c> manual page in ERTS.</p>
</section>
</section>
@@ -474,7 +474,7 @@ chown root mod_syslog]]></code>
default, it must be called <c>start</c> and reside in
<c><![CDATA[<ERL_INSTALL_DIR>/bin]]></c>. Another start
program can be used, by using configuration parameter
- <c>start_prg</c> in application <c>sasl</c>.</p>
+ <c>start_prg</c> in application SASL.</p>
<p>The start program must call <c>run_erl</c> as shown below.
It must also take an optional parameter, which defaults to
<c><![CDATA[<ERL_INSTALL_DIR>/releases/start_erl.data]]></c>.</p>
@@ -484,7 +484,7 @@ chown root mod_syslog]]></code>
<p>The <c><![CDATA[<RELDIR>]]></c> directory is where new release
packets are installed, and where the release handler keeps
information about releases. For more information, see the
- <c>release_handler(3)</c> manual page in <c>sasl</c>.</p>
+ <c>release_handler(3)</c> manual page in SASL.</p>
<p>The following script illustrates the default behaviour of the
program:</p>
<code type="none"><![CDATA[
@@ -624,7 +624,7 @@ export RELDIR
exec $BINDIR/erlexec -boot $RELDIR/$VSN/start -config $RELDIR/$VSN/sys $*</code>
<p>If a diskless and/or read-only client node with the
- <c>sasl</c> configuration parameter <c>static_emulator</c> set
+ SASL configuration parameter <c>static_emulator</c> set
to <c>true</c> is about to start, the <c>-boot</c> and
<c>-config</c> flags must be changed.</p>
<p>As such a client cannot
diff --git a/system/doc/embedded/starting.xml b/system/doc/embedded/starting.xml
index 720383e8ac..11bf9b412a 100644
--- a/system/doc/embedded/starting.xml
+++ b/system/doc/embedded/starting.xml
@@ -69,7 +69,7 @@
default, it must be called <c>start</c> and reside in
<c><![CDATA[<ERL_INSTALL_DIR>/bin]]></c>. Another start program can be
used, by using the configuration parameter <c>start_prg</c> in
- the application <c>sasl</c>.</p>
+ application SASL.</p>
<p>The start program must call <c>run_erl</c> as shown below.
It must also take an optional parameter which defaults to
<c><![CDATA[<ERL_INSTALL_DIR>/bin/start_erl.data]]></c>.
@@ -80,8 +80,8 @@
</p>
<p>The <c><![CDATA[<RELDIR>]]></c> directory is where new release packets
are installed, and where the release handler keeps information
- about releases. See <c>release_handler(3)</c> in the
- application <c>sasl</c> for further information.
+ about releases. See <c>release_handler(3)</c> in
+ application SASL for further information.
</p>
<p>The following script illustrates the default behaviour of the
program.
@@ -228,7 +228,7 @@ export PROGNAME
export RELDIR
exec $BINDIR/erlexec -boot $RELDIR/$VSN/start -config $RELDIR/$VSN/sys $* </code>
- <p>If a diskless and/or read-only client node with the <c>sasl</c>
+ <p>If a diskless and/or read-only client node with the SASL
configuration parameter <c>static_emulator</c> set to <c>true</c>
is about to start the <c>-boot</c> and <c>-config</c> flags must be
changed. As such a client can not read a new <c>start_erl.data</c>
diff --git a/system/doc/oam/oam_intro.xml b/system/doc/oam/oam_intro.xml
index cdcb6e3111..8b8d69e638 100644
--- a/system/doc/oam/oam_intro.xml
+++ b/system/doc/oam/oam_intro.xml
@@ -178,7 +178,7 @@
<section>
<title>MIB Structure</title>
<p>The top-level OTP MIB is called <c>OTP-REG</c> and it is
- included in the <c>sasl</c> application. All other OTP MIBs
+ included in the SASL application. All other OTP MIBs
import some objects from this MIB.</p>
<p>Each MIB is contained in one application. The MIB text
@@ -188,7 +188,7 @@
<c><![CDATA[include/<MIB>.hrl]]></c>, and the compiled MIBs
are stored under <c><![CDATA[priv/mibs/<MIB>.bin]]></c>.
For example, the <c>OTP-MIB</c> is included in the
- <c>sasl</c> application:</p>
+ SASL application:</p>
<code type="none">
sasl-1.3/mibs/OTP-MIB.mib
@@ -211,11 +211,11 @@ snmp:c("MY-MIB", [{il, ["sasl/priv/mibs"]}]).</code>
<p>The following MIBs are defined in the OTP system:</p>
<list type="bulleted">
- <item><p><c>OTP-REG)</c> (in <c>sasl</c>) contains the top-level
+ <item><p><c>OTP-REG)</c> (in SASL) contains the top-level
OTP registration objects, used by all other MIBs.</p></item>
- <item><p><c>OTP-TC</c> (in <c>sasl</c>) contains the general
+ <item><p><c>OTP-TC</c> (in SASL) contains the general
Textual Conventions, which can be used by any other MIB.</p></item>
- <item><p><c>OTP-MIB</c> (in <c>sasl</c>) contains objects for
+ <item><p><c>OTP-MIB</c> (in SASL) contains objects for
instrumentation of the Erlang nodes, the Erlang machines,
and the applications in the system.</p></item>
<item><p><c>OTP-OS-MON-MIB</c> (in <c>oc_mon</c>) contains
diff --git a/system/doc/programming_examples/records.xml b/system/doc/programming_examples/records.xml
index da346dd0b3..074aa636b4 100644
--- a/system/doc/programming_examples/records.xml
+++ b/system/doc/programming_examples/records.xml
@@ -93,7 +93,7 @@ person</pre>
at compile time, not at runtime. For details on records
in the shell, see the
<seealso marker="stdlib:shell">shell(3)</seealso>
- manual page in <c>stdlib</c>.</p>
+ manual page in STDLIB.</p>
</section>
<section>
diff --git a/system/doc/reference_manual/expressions.xml b/system/doc/reference_manual/expressions.xml
index 355fd3cfef..1a3d19aed1 100644
--- a/system/doc/reference_manual/expressions.xml
+++ b/system/doc/reference_manual/expressions.xml
@@ -1541,7 +1541,16 @@ end</pre>
<pre>
1> <input>[X*2 || X &lt;- [1,2,3]].</input>
[2,4,6]</pre>
- <p>More examples are provoded in
+ <p>When there are no generators or bit string generators, a list comprehension
+ returns either a list with one element (the result of evaluating <c>Expr</c>)
+ if all filters are true or an empty list otherwise.</p>
+ <p><em>Example:</em></p>
+ <pre>
+1> <input>[2 || is_integer(2)].</input>
+[2]
+2> <input>[x || is_integer(x)].</input>
+[]</pre>
+ <p>More examples are provided in
<seealso marker="doc/programming_examples:list_comprehensions">
Programming Examples.</seealso></p>
diff --git a/system/doc/reference_manual/typespec.xml b/system/doc/reference_manual/typespec.xml
index 9e26e9058d..1899efd5f3 100644
--- a/system/doc/reference_manual/typespec.xml
+++ b/system/doc/reference_manual/typespec.xml
@@ -47,7 +47,7 @@
<list type="bulleted">
<item>To document function interfaces</item>
<item>To provide more information for bug detection tools,
- such as <c>Dialyzer</c></item>
+ such as Dialyzer</item>
<item>To be exploited by documentation tools, such as EDoc, for
generating program documentation of various forms</item>
</list>
@@ -142,7 +142,7 @@
PairList :: Pair
| Pair, PairList
- Pair :: Type := Type %% notes a pair that must be present
+ Pair :: Type := Type %% denotes a pair that must be present
| Type => Type
TList :: Type
@@ -174,19 +174,13 @@
</p>
<p>
The general form of maps is <c>#{PairList}</c>. The key types in
- <c>PairList</c> are allowed to overlap, and if they do, the leftmost pair
- takes precedence. A map value does not belong to this type if contains a key
- that is not in <c>PairList</c>.
+ <c>PairList</c> are allowed to overlap, and if they do, the
+ leftmost pair takes precedence. A map pair has a key in
+ <c>PairList</c> if it belongs to this type.
</p>
<p>
- Because it is common to end a map type with <c>any() =&gt; any()</c> to denote
- that keys that do not belong to any other pair in <c>PairList</c> are
- allowed, and may map to any value, the shorthand notation <c>...</c> is
- allowed as the last pair of a map type.
- </p>
- <p>
- Notice that the syntactic representation of <c>map()</c> is <c>#{...}</c>
- (or <c>#{_ =&gt; _}</c>, or <c>#{any() =&gt; any()}</c>), not <c>#{}</c>.
+ Notice that the syntactic representation of <c>map()</c> is
+ <c>#{any() =&gt; any()}</c> (or <c>#{_ =&gt; _}</c>), not <c>#{}</c>.
The notation <c>#{}</c> specifies the singleton type for the empty map.
</p>
<p>
diff --git a/system/doc/system_principles/create_target.xmlsrc b/system/doc/system_principles/create_target.xmlsrc
index 8a463076f5..f9b27ffc35 100644
--- a/system/doc/system_principles/create_target.xmlsrc
+++ b/system/doc/system_principles/create_target.xmlsrc
@@ -374,10 +374,10 @@ os> <input>/usr/local/erl-target/bin/to_erl /tmp/erlang.pipe.1</input></pre>
</p>
<pre>
2> <input>release_handler:install_release(Vsn).</input>
-<output>{continue_after_restart,"FIRST",[]}
+{continue_after_restart,"FIRST",[]}
heart: Tue Apr 1 12:15:10 2014: Erlang has closed.
heart: Tue Apr 1 12:15:11 2014: Executed "/usr/local/erl-target/bin/start /usr/local/erl-target/releases/new_start_erl.data" -> 0. Terminating.
-[End]</output></pre>
+[End]</pre>
<p>
The above return value and output after the call to
<c>release_handler:install_release/1</c> means that the
@@ -398,12 +398,12 @@ os> <input>/usr/local/erl-target/bin/to_erl /tmp/erlang.pipe.2</input></pre>
</p>
<pre>
1> <input>release_handler:which_releases().</input>
-<output>[{"MYSYSTEM","SECOND",
+[{"MYSYSTEM","SECOND",
["kernel-3.0","stdlib-2.0","sasl-2.4","pea-2.0"],
current},
{"MYSYSTEM","FIRST",
["kernel-2.16.4","stdlib-1.19.4","sasl-2.3.4","pea-1.0"],
- permanent}]</output></pre>
+ permanent}]</pre>
<p>
Our new release, "SECOND", is now the current release, but we
can also see that our "FIRST" release is still permanent. This
@@ -420,12 +420,12 @@ os> <input>/usr/local/erl-target/bin/to_erl /tmp/erlang.pipe.2</input></pre>
</p>
<pre>
3> <input>release_handler:which_releases().</input>
-<output>[{"MYSYSTEM","SECOND",
+[{"MYSYSTEM","SECOND",
["kernel-3.0","stdlib-2.0","sasl-2.4","pea-2.0"],
permanent},
{"MYSYSTEM","FIRST",
["kernel-2.16.4","stdlib-1.19.4","sasl-2.3.4","pea-1.0"],
- old}]</output></pre>
+ old}]</pre>
<p>
We see that the new release version is <c>permanent</c>, so
it would be safe to restart the node.</p>
diff --git a/system/doc/system_principles/versions.xml b/system/doc/system_principles/versions.xml
index 3772d773fc..b9f7fa4bf6 100644
--- a/system/doc/system_principles/versions.xml
+++ b/system/doc/system_principles/versions.xml
@@ -57,11 +57,11 @@
<p>In an OTP source code tree, the OTP version can be read from
the text file <c>&lt;OTP source root&gt;/OTP_VERSION</c>. The
absolute path to the file can be constructed by calling
- <c>filename:join([<seealso marker="kernel:code#root_dir/0">code:root_dir()</seealso>, "OTP_VERSION"])</c>.</p>
+ <c>filename:join([</c><seealso marker="kernel:code#root_dir/0"><c>code:root_dir()</c></seealso><c>, "OTP_VERSION"])</c>.</p>
<p>In an installed OTP development system, the OTP version can be read
from the text file <c>&lt;OTP installation root&gt;/releases/&lt;OTP release number&gt;/OTP_VERSION</c>.
The absolute path to the file can by constructed by calling
- <c>filename:join([<seealso marker="kernel:code#root_dir/0">code:root_dir()</seealso>, "releases", <seealso marker="erts:erlang#system_info_otp_release"> erlang:system_info(otp_release)</seealso>, "OTP_VERSION"]).</c></p>
+ <c>filename:join([</c><seealso marker="kernel:code#root_dir/0"><c>code:root_dir()</c></seealso><c>, "releases", </c><seealso marker="erts:erlang#system_info_otp_release"><c>erlang:system_info(otp_release)</c></seealso><c>, "OTP_VERSION"]).</c></p>
<p>If the version read from the <c>OTP_VERSION</c> file in a
development system has a <c>**</c> suffix, the system has been
patched using the
diff --git a/system/doc/top/Makefile b/system/doc/top/Makefile
index caae19a8d1..116ec688fa 100644
--- a/system/doc/top/Makefile
+++ b/system/doc/top/Makefile
@@ -35,7 +35,7 @@ RELSYSDIR = "$(RELEASE_PATH)/doc"
GIF_FILES =
-INFO_FILES = ../../README ../../COPYRIGHT PR.template
+INFO_FILES = ../../../README.md ../../COPYRIGHT PR.template
TOPDOCDIR=.
@@ -74,6 +74,7 @@ XML_FILES = \
BOOK_FILES = book.xml
+XMLLINT_SRCDIRS= ../installation_guide:../system_principles:../embedded:../getting_started:../reference_manual:../programming_examples:../efficiency_guide:../tutorial:../design_principles:../oam
HTMLDIR= ../html
PDFREFDIR= pdf
@@ -120,10 +121,11 @@ $(HTMLDIR)/index.html + $(HTMLDIR)/applications.html: $(INDEX_SCRIPT) $(TEMPLATE
# Check if we are building the index from source or an installed release
if test "$$RELEASE_ROOT" = "" ; then \
$(ERL) -noshell -pa $(EBIN) -s erl_html_tools top_index src $(ERL_TOP) \
- $(HTMLDIR) $(SYSTEM_VSN) -s erlang halt ;\
+ $(HTMLDIR) `cat "$(ERL_TOP)/OTP_VERSION"` -s erlang halt ;\
else \
$(ERL) -noshell -pa $(EBIN) -s erl_html_tools top_index rel $(RELEASE_ROOT) \
- $(HTMLDIR) $(SYSTEM_VSN) -s erlang halt ;\
+ $(HTMLDIR) `cat "$(RELEASE_ROOT)/releases/$(SYSTEM_VSN)/OTP_VERSION"` \
+ -s erlang halt ;\
fi
diff --git a/system/doc/top/src/erl_html_tools.erl b/system/doc/top/src/erl_html_tools.erl
index ab58fdf666..d55c2e1164 100644
--- a/system/doc/top/src/erl_html_tools.erl
+++ b/system/doc/top/src/erl_html_tools.erl
@@ -54,24 +54,24 @@ top_index() ->
top_index(src, Value, filename:join(Value, "doc"), RelName)
end.
-top_index([src, RootDir, DestDir, OtpRel])
- when is_atom(RootDir), is_atom(DestDir), is_atom(OtpRel) ->
- top_index(src, atom_to_list(RootDir), atom_to_list(DestDir), atom_to_list(OtpRel));
-top_index([rel, RootDir, DestDir, OtpRel])
- when is_atom(RootDir), is_atom(DestDir), is_atom(OtpRel) ->
- top_index(rel, atom_to_list(RootDir), atom_to_list(DestDir), atom_to_list(OtpRel));
+top_index([src, RootDir, DestDir, OtpBaseVsn])
+ when is_atom(RootDir), is_atom(DestDir), is_atom(OtpBaseVsn) ->
+ top_index(src, atom_to_list(RootDir), atom_to_list(DestDir), atom_to_list(OtpBaseVsn));
+top_index([rel, RootDir, DestDir, OtpBaseVsn])
+ when is_atom(RootDir), is_atom(DestDir), is_atom(OtpBaseVsn) ->
+ top_index(rel, atom_to_list(RootDir), atom_to_list(DestDir), atom_to_list(OtpBaseVsn));
top_index(RootDir) when is_atom(RootDir) ->
{_,RelName} = init:script_id(),
top_index(rel, RootDir, filename:join(RootDir, "doc"), RelName).
-top_index(Source, RootDir, DestDir, OtpRel) ->
+top_index(Source, RootDir, DestDir, OtpBaseVsn) ->
report("****\nRootDir: ~p", [RootDir]),
report("****\nDestDir: ~p", [DestDir]),
- report("****\nOtpRel: ~p", [OtpRel]),
+ report("****\nOtpBaseVsn: ~p", [OtpBaseVsn]),
- put(otp_release, OtpRel),
+ put(otp_base_vsn, OtpBaseVsn),
Templates = find_templates(["","templates",DestDir]),
report("****\nTemplates: ~p", [Templates]),
@@ -81,9 +81,9 @@ top_index(Source, RootDir, DestDir, OtpRel) ->
report("****\nGroups: ~p", [Groups]),
process_templates(Templates, DestDir, Groups).
-top_index_silent(RootDir, DestDir, OtpRel) ->
+top_index_silent(RootDir, DestDir, OtpBaseVsn) ->
put(silent,true),
- Result = top_index(rel, RootDir, DestDir, OtpRel),
+ Result = top_index(rel, RootDir, DestDir, OtpBaseVsn),
erase(silent),
Result.
@@ -361,7 +361,7 @@ subst_template_1(Group, Stream, Info) ->
case file:read(Stream, 100000) of
{ok, Template} ->
Fun = fun(Match, _) -> {subst(Match, Info, Group),Info} end,
- gsub(Template, "#[A-Za-z0-9]+#", Fun, Info);
+ gsub(Template, "#[A-Za-z_0-9]+#", Fun, Info);
{error, Reason} ->
{error, Reason}
end.
@@ -379,8 +379,8 @@ get_version(Info) ->
""
end.
-subst("#release#", _Info, _Group) ->
- get(otp_release);
+subst("#otp_base_vsn#", _Info, _Group) ->
+ get(otp_base_vsn);
subst("#version#", Info, _Group) ->
get_version(Info);
subst("#copyright#", _Info, _Group) ->
diff --git a/system/doc/top/templates/index.html.src b/system/doc/top/templates/index.html.src
index 9637685946..d2a6736d34 100644
--- a/system/doc/top/templates/index.html.src
+++ b/system/doc/top/templates/index.html.src
@@ -22,7 +22,7 @@ limitations under the License.
<html>
<head>
<link rel="stylesheet" href="otp_doc.css" type="text/css"/>
- <title>Erlang/OTP #release#</title>
+ <title>Erlang/OTP #otp_base_vsn#</title>
<script id="js" type="text/javascript" language="JavaScript" src="js/flipmenu/flipmenu.js">
@@ -36,7 +36,7 @@ limitations under the License.
<div id="leftnav">
<div class="innertube">
<img alt="Erlang logo" src="erlang-logo.png"/ >
-<!-- small><a href="glossary.html">Glossary</a> |-->
+<p/>
<small><a href="applications.html">Applications</a><br>
<a href="man_index.html">Modules</a></small>
<p/>
@@ -74,7 +74,7 @@ limitations under the License.
<div id="content">
<div class="innertube">
<center>
-<font size="+1"><b>Erlang/OTP #release#</b></font><br>
+<font size="+1"><b>Erlang/OTP #otp_base_vsn#</b></font><br>
</center>
<center>
<p>
@@ -108,7 +108,7 @@ In addition to the documentation here Erlang is described in several recent book
<a href="http://shop.oreilly.com/product/0636920025818.do">"Introducing Erlang"</a> from O'Reilly.
</li>
<li>
-<a href="http://www.nostarch.com/erlang">"Learn You Some Erlang for Great Good!"</a> from nostarch.
+<a href="http://www.nostarch.com/erlang">"Learn You Some Erlang for Great Good!"</a> from No Starch Press.
</li>
<li>
<a href="http://oreilly.com/catalog/9780596518189">"Erlang Programming"</a> from O'Reilly.
@@ -119,6 +119,9 @@ In addition to the documentation here Erlang is described in several recent book
<li>
<a href="http://www.manning.com/logan">"Erlang and OTP in Action"</a> from Manning.
</li>
+<li>
+<a href="http://shop.oreilly.com/product/0636920024149.do">"Designing for Scalability with Erlang/OTP"</a> from O'Reilly.
+</li>
</ul>
<p>
These books are highly recommended as a start for learning Erlang.
@@ -129,14 +132,15 @@ href="applications.html">applications</a>. An application normally contains
Erlang <a href="man_index.html">modules</a>. Some OTP applications,
such as the C interface <em>erl_interface</em>, are written in other languages and have no Erlang
modules.
+<p></p>
+</li>
-<p>
<li>On a Unix system you can view the manual pages from the command
line using
<pre>
% erl -man &lt;module&gt;
</pre>
-<p>
+</li>
<li> You can of course use any editor you like to write Erlang
programs, but if you use Emacs there exists editing support such as
@@ -161,23 +165,27 @@ module and function name completion (tab) if the module is loaded.
<li>OpenSource users can ask questions
and share experiences on the <a href="http://www.erlang.org/static/doc/mailinglist.html">
-Erlang questions mailing list</a>. <p>
+Erlang questions mailing list</a>.
+<p></p>
+</li>
<li>Before asking a question you can browse the <a
href="http://www.erlang.org/pipermail/erlang-questions/">
mailing list archive</a> and read the <a
href="http://www.erlang.org/faq/faq.html" >Frequently
-Asked Questions</a>. <p>
+Asked Questions</a>.
+<p></p>
+</li>
<li>Additional information and links of interest for Erlang programmers can be found on the Erlang Open Source site
<a href="http://www.erlang.org/">http://www.erlang.org</a>.
-<p>
+</li>
</ul>
<center>
<small>
-Copyright &copy; 1999-2013
+Copyright &copy; 1999-2016
<a href="http://www.ericsson.com">Ericsson AB</a>
</small>
</center>